<?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>68532</bug_id>
          
          <creation_ts>2011-09-21 07:29:13 -0700</creation_ts>
          <short_desc>[WK2] Realign TextChecker implementation of windows port to common independent part for all ports</short_desc>
          <delta_ts>2011-10-06 14:33:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>68547</blocked>
    
    <blocked>68548</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>aroben</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>470789</commentid>
    <comment_count>0</comment_count>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-09-21 07:29:13 -0700</bug_when>
    <thetext>Implement the TextChecker for WebKit2 GTK port.
Further enhancements:
- Showing the suggestions for misspelled words in the context menu. Currently it just shows the misspelled words.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470806</commentid>
    <comment_count>1</comment_count>
      <attachid>108161</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-09-21 08:07:58 -0700</bug_when>
    <thetext>Created attachment 108161
Moving TextChecker from win port to all ports

Patch moves all the TextChecker feature implementation classes except TextChecker class from win port to common. All the files are completely platform independent and can be reused across all ports. Patch also corrects the windows builds files related to change of location of the files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470807</commentid>
    <comment_count>2</comment_count>
      <attachid>108162</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-09-21 08:08:58 -0700</bug_when>
    <thetext>Created attachment 108162
GTK port implementation for Text Checker

Patch includes the implementation of TextChecker class functions for GTK as well as makefile changes for GTK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470810</commentid>
    <comment_count>3</comment_count>
      <attachid>108163</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-09-21 08:10:23 -0700</bug_when>
    <thetext>Created attachment 108163
App changes for TextChecker 

App changes for testing the TextChecker feature. It currently addresses getting the words from enchant library. Doesn&apos;t support adding the suggestions to the Context Menu for usage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470812</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-21 08:15:10 -0700</bug_when>
    <thetext>Attachment 108163 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/MiniBrowser/gtk/...&quot; exit_code: 1

Last 3072 characters of output:
claration] [3]
Tools/MiniBrowser/gtk/BrowserWindow.c:738:  Declaration has space between * and variable name in EnchantDict* dict  [whitespace/declaration] [3]
Tools/MiniBrowser/gtk/BrowserWindow.c:750:  Declaration has space between * and variable name in BrowserWindow* window  [whitespace/declaration] [3]
Tools/MiniBrowser/gtk/BrowserWindow.c:751:  Declaration has space between * and variable name in GSList* dicts  [whitespace/declaration] [3]
Tools/MiniBrowser/gtk/BrowserWindow.c:756:  Declaration has space between * and variable name in char* string  [whitespace/declaration] [3]
Tools/MiniBrowser/gtk/BrowserWindow.c:758:  Declaration has space between * and variable name in PangoLanguage* language  [whitespace/declaration] [3]
Tools/MiniBrowser/gtk/BrowserWindow.c:759:  Declaration has space between * and variable name in PangoLogAttr* attrs  [whitespace/declaration] [3]
Tools/MiniBrowser/gtk/BrowserWindow.c:782:  Declaration has space between * and variable name in gchar* cstart  [whitespace/declaration] [3]
Tools/MiniBrowser/gtk/BrowserWindow.c:784:  Declaration has space between * and variable name in gchar* word  [whitespace/declaration] [3]
Tools/MiniBrowser/gtk/BrowserWindow.c:789:  Declaration has space between * and variable name in EnchantDict* dict  [whitespace/declaration] [3]
Tools/MiniBrowser/gtk/BrowserWindow.c:813:  Declaration has space between * and variable name in BrowserWindow* window  [whitespace/declaration] [3]
Tools/MiniBrowser/gtk/BrowserWindow.c:814:  Declaration has space between * and variable name in GSList* dicts  [whitespace/declaration] [3]
Tools/MiniBrowser/gtk/BrowserWindow.c:820:  Declaration has space between * and variable name in char* string  [whitespace/declaration] [3]
Tools/MiniBrowser/gtk/BrowserWindow.c:827:  Declaration has space between * and variable name in EnchantDict* dict  [whitespace/declaration] [3]
Tools/MiniBrowser/gtk/BrowserWindow.c:852:  Declaration has space between * and variable name in BrowserWindow* window  [whitespace/declaration] [3]
Tools/MiniBrowser/gtk/BrowserWindow.c:853:  Declaration has space between * and variable name in GSList* dicts  [whitespace/declaration] [3]
Tools/MiniBrowser/gtk/BrowserWindow.c:858:  Declaration has space between * and variable name in char* string  [whitespace/declaration] [3]
Tools/MiniBrowser/gtk/BrowserWindow.c:862:  Declaration has space between * and variable name in EnchantDict* dict  [whitespace/declaration] [3]
Tools/MiniBrowser/gtk/BrowserWindow.c:872:  Declaration has space between * and variable name in BrowserWindow* window  [whitespace/declaration] [3]
Tools/MiniBrowser/gtk/BrowserWindow.c:873:  Declaration has space between * and variable name in GSList* dicts  [whitespace/declaration] [3]
Tools/MiniBrowser/gtk/BrowserWindow.c:878:  Declaration has space between * and variable name in char* string  [whitespace/declaration] [3]
Tools/MiniBrowser/gtk/BrowserWindow.c:882:  Declaration has space between * and variable name in EnchantDict* dict  [whitespace/declaration] [3]
Total errors found: 32 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470820</commentid>
    <comment_count>5</comment_count>
      <attachid>108161</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-09-21 08:24:32 -0700</bug_when>
    <thetext>Comment on attachment 108161
Moving TextChecker from win port to all ports

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

Anders and/or Sam should probably review this.

&gt; Source/WebKit2/ChangeLog:75
&gt; +        * Shared/API/c/WKBase.h: Add WKGrammarDetailRef &amp; WKTextCheckerRef types.
&gt; +        * Shared/API/c/win/WKBaseWin.h: Remove WKGrammarDetailRef &amp; WKTextCheckerRef types.
&gt; +        * Shared/APIObject.h:
&gt; +        * UIProcess/API/C/WKAPICast.h: Added mapping for WKTextCheckerRef &amp; WKGrammarDetailRef.
&gt; +        (WebKit::toAPI):
&gt; +        * UIProcess/API/C/WKGrammarDetail.cpp: Renamed from Source/WebKit2/UIProcess/API/C/win/WKGrammarDetail.cpp.
&gt; +        (WKGrammarDetailGetTypeID):
&gt; +        (WKGrammarDetailCreate):
&gt; +        (WKGrammarDetailGetLocation):
&gt; +        (WKGrammarDetailGetLength):
&gt; +        (WKGrammarDetailCopyGuesses):
&gt; +        (WKGrammarDetailCopyUserDescription):
&gt; +        * UIProcess/API/C/WKGrammarDetail.h: Renamed from Source/WebKit2/UIProcess/API/C/win/WKGrammarDetail.h.
&gt; +        * UIProcess/API/C/WKTextChecker.cpp: Renamed from Source/WebKit2/UIProcess/API/C/win/WKTextChecker.cpp.
&gt; +        (WKTextCheckerSetClient):
&gt; +        (WKTextCheckerContinuousSpellCheckingEnabledStateChanged):
&gt; +        (WKTextCheckerGrammarCheckingEnabledStateChanged):
&gt; +        (WKTextCheckerCheckSpelling):
&gt; +        (WKTextCheckerChangeSpellingToWord):
&gt; +        * UIProcess/API/C/WKTextChecker.h: Renamed from Source/WebKit2/UIProcess/API/C/win/WKTextChecker.h.
&gt; +        * UIProcess/API/C/win/WKAPICastWin.h: Removed mapping for WKTextCheckerRef &amp; WKGrammarDetailRef.
&gt; +        * UIProcess/WebGrammarDetail.cpp: Renamed from Source/WebKit2/UIProcess/win/WebGrammarDetail.cpp.
&gt; +        (WebKit::WebGrammarDetail::create):
&gt; +        (WebKit::WebGrammarDetail::WebGrammarDetail):
&gt; +        (WebKit::WebGrammarDetail::guesses):
&gt; +        * UIProcess/WebGrammarDetail.h: Renamed from Source/WebKit2/UIProcess/win/WebGrammarDetail.h.
&gt; +        (WebKit::WebGrammarDetail::location):
&gt; +        (WebKit::WebGrammarDetail::length):
&gt; +        (WebKit::WebGrammarDetail::userDescription):
&gt; +        (WebKit::WebGrammarDetail::grammarDetail):
&gt; +        (WebKit::WebGrammarDetail::type):
&gt; +        * UIProcess/WebTextChecker.cpp: Renamed from Source/WebKit2/UIProcess/win/WebTextChecker.cpp.
&gt; +        (WebKit::WebTextChecker::shared):
&gt; +        (WebKit::WebTextChecker::WebTextChecker):
&gt; +        (WebKit::WebTextChecker::setClient):
&gt; +        (WebKit::updateStateForAllWebProcesses):
&gt; +        (WebKit::WebTextChecker::continuousSpellCheckingEnabledStateChanged):
&gt; +        (WebKit::WebTextChecker::grammarCheckingEnabledStateChanged):
&gt; +        (WebKit::WebTextChecker::checkSpelling):
&gt; +        (WebKit::WebTextChecker::changeSpellingToWord):
&gt; +        * UIProcess/WebTextChecker.h: Renamed from Source/WebKit2/UIProcess/win/WebTextChecker.h.
&gt; +        (WebKit::WebTextChecker::client):
&gt; +        (WebKit::WebTextChecker::type):
&gt; +        * UIProcess/WebTextCheckerClient.cpp: Renamed from Source/WebKit2/UIProcess/win/WebTextCheckerClient.cpp.
&gt; +        (WebKit::WebTextCheckerClient::continuousSpellCheckingAllowed):
&gt; +        (WebKit::WebTextCheckerClient::continuousSpellCheckingEnabled):
&gt; +        (WebKit::WebTextCheckerClient::setContinuousSpellCheckingEnabled):
&gt; +        (WebKit::WebTextCheckerClient::grammarCheckingEnabled):
&gt; +        (WebKit::WebTextCheckerClient::setGrammarCheckingEnabled):
&gt; +        (WebKit::WebTextCheckerClient::uniqueSpellDocumentTag):
&gt; +        (WebKit::WebTextCheckerClient::closeSpellDocumentWithTag):
&gt; +        (WebKit::WebTextCheckerClient::checkSpellingOfString):
&gt; +        (WebKit::WebTextCheckerClient::checkGrammarOfString):
&gt; +        (WebKit::WebTextCheckerClient::spellingUIIsShowing):
&gt; +        (WebKit::WebTextCheckerClient::toggleSpellingUIIsShowing):
&gt; +        (WebKit::WebTextCheckerClient::updateSpellingUIWithMisspelledWord):
&gt; +        (WebKit::WebTextCheckerClient::updateSpellingUIWithGrammarString):
&gt; +        (WebKit::WebTextCheckerClient::guessesForWord):
&gt; +        (WebKit::WebTextCheckerClient::learnWord):
&gt; +        (WebKit::WebTextCheckerClient::ignoreWord):
&gt; +        * UIProcess/WebTextCheckerClient.h: Renamed from Source/WebKit2/UIProcess/win/WebTextCheckerClient.h.
&gt; +        * win/WebKit2.vcproj: Corrected paths for renamed files.
&gt; +        * win/WebKit2Generated.make: Corrected paths for renamed files.

I really like the comments you added for the changes you made!

I think it is far more readable to delete the function names for files that were simply renamed. They&apos;re just adding noise, not information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470832</commentid>
    <comment_count>6</comment_count>
      <attachid>108162</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-09-21 08:39:35 -0700</bug_when>
    <thetext>Comment on attachment 108162
GTK port implementation for Text Checker

Attachment 108162 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9772748</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470833</commentid>
    <comment_count>7</comment_count>
      <attachid>108163</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-09-21 08:41:17 -0700</bug_when>
    <thetext>Comment on attachment 108163
App changes for TextChecker 

Attachment 108163 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9764794</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470913</commentid>
    <comment_count>8</comment_count>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-09-21 10:35:12 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 108162 [details])
&gt; Attachment 108162 [details] did not pass gtk-ews (gtk):
&gt; Output: http://queues.webkit.org/results/9772748
kov,
Attachments 108162 &amp; 108163 have a dependency on https://bugs.webkit.org/attachment.cgi?id=108161.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470961</commentid>
    <comment_count>9</comment_count>
      <attachid>108162</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-09-21 11:17:46 -0700</bug_when>
    <thetext>Comment on attachment 108162
GTK port implementation for Text Checker

Obsolete the patch since it is captured in https://bugs.webkit.org/show_bug.cgi?id=68548</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470966</commentid>
    <comment_count>10</comment_count>
      <attachid>108163</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-09-21 11:18:14 -0700</bug_when>
    <thetext>Comment on attachment 108163
App changes for TextChecker 

Obsolete the patch since it is captured in https://bugs.webkit.org/show_bug.cgi?id=68547</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471372</commentid>
    <comment_count>11</comment_count>
      <attachid>108279</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-09-21 23:27:03 -0700</bug_when>
    <thetext>Created attachment 108279
Moving TextChecker implementation from win port to common files

Modified ChangeLog as per aroben comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474070</commentid>
    <comment_count>12</comment_count>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-09-27 10:51:19 -0700</bug_when>
    <thetext>andersca, sam:
It would be great if you can update with comments if any?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477656</commentid>
    <comment_count>13</comment_count>
      <attachid>108279</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-10-04 09:52:43 -0700</bug_when>
    <thetext>Comment on attachment 108279
Moving TextChecker implementation from win port to common files

Patch looks fine, but please upload a new patch that applies so we can make sure it doesn&apos;t break any builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477679</commentid>
    <comment_count>14</comment_count>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-10-04 10:15:10 -0700</bug_when>
    <thetext>Since the Text Checker implementation of windows port is completely platform independent, moving all related files to common folders. Changing the title to reflect the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477813</commentid>
    <comment_count>15</comment_count>
      <attachid>109660</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-10-04 11:48:32 -0700</bug_when>
    <thetext>Created attachment 109660
Make window TextChecker implementation generic for all platforms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479490</commentid>
    <comment_count>16</comment_count>
      <attachid>109660</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-06 14:33:19 -0700</bug_when>
    <thetext>Comment on attachment 109660
Make window TextChecker implementation generic for all platforms

Clearing flags on attachment: 109660

Committed r96858: &lt;http://trac.webkit.org/changeset/96858&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479491</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-06 14:33:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108161</attachid>
            <date>2011-09-21 08:07:58 -0700</date>
            <delta_ts>2011-09-21 23:27:03 -0700</delta_ts>
            <desc>Moving TextChecker from win port to all ports</desc>
            <filename>68532-textchecker-wk2-moving.diff</filename>
            <type>text/plain</type>
            <size>85600</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBmYjE1NWMwLi4yNzM3NzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzkg
QEAKKzIwMTEtMDktMjEgIFJhdmkgUGhhbmVlbmRyYSBLYXNpYmhhdGxhICA8cmF2aS5rYXNpYmhh
dGxhQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIFRl
eHRDaGVja2VyIFdlYktpdDIgR1RLIHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02ODUzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFsbCB0aGUgVGV4dENoZWNrZXIgZmVhdHVyZSBpbXBsZW1lbnRh
dGlvbiBmaWxlcyBhcmUgbW92ZWQgb3V0c2lkZSBvZiB3aW4gcG9ydCBzaW5jZSB0aGV5IGFyZQor
ICAgICAgICBwbGF0Zm9ybSBpbmRlcGVuZGVudCBhbmQgY2FuIGJlIG1vdmVkIGFjcm9zcyBhbGwg
cG9ydHMuIE9ubHkgdGhlIGltcGxlbWVudGF0aW9uIG9mIFRleHRDaGVja2VyCisgICAgICAgIGNs
YXNzIGlzIHBsYXRmb3JtIGRlcGVuZGVudCBub3cgYW5kIGhhcyBiZWVuIHJldGFpbmVkIGFjcm9z
cyBhbGwgcG9ydHMuIFJlc3QgYWxsIGZpbGVzIGhhcyBiZWVuCisgICAgICAgIG1vdmVkIGZvciBh
bGwgcG9ydHMgdXNhZ2UuCisKKyAgICAgICAgKiBTaGFyZWQvQVBJL2MvV0tCYXNlLmg6IEFkZCBX
S0dyYW1tYXJEZXRhaWxSZWYgJiBXS1RleHRDaGVja2VyUmVmIHR5cGVzLgorICAgICAgICAqIFNo
YXJlZC9BUEkvYy93aW4vV0tCYXNlV2luLmg6IFJlbW92ZSBXS0dyYW1tYXJEZXRhaWxSZWYgJiBX
S1RleHRDaGVja2VyUmVmIHR5cGVzLgorICAgICAgICAqIFNoYXJlZC9BUElPYmplY3QuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0Lmg6IEFkZGVkIG1hcHBpbmcgZm9yIFdL
VGV4dENoZWNrZXJSZWYgJiBXS0dyYW1tYXJEZXRhaWxSZWYuCisgICAgICAgIChXZWJLaXQ6OnRv
QVBJKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tHcmFtbWFyRGV0YWlsLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tHcmFtbWFyRGV0
YWlsLmNwcC4KKyAgICAgICAgKFdLR3JhbW1hckRldGFpbEdldFR5cGVJRCk6CisgICAgICAgIChX
S0dyYW1tYXJEZXRhaWxDcmVhdGUpOgorICAgICAgICAoV0tHcmFtbWFyRGV0YWlsR2V0TG9jYXRp
b24pOgorICAgICAgICAoV0tHcmFtbWFyRGV0YWlsR2V0TGVuZ3RoKToKKyAgICAgICAgKFdLR3Jh
bW1hckRldGFpbENvcHlHdWVzc2VzKToKKyAgICAgICAgKFdLR3JhbW1hckRldGFpbENvcHlVc2Vy
RGVzY3JpcHRpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0dyYW1tYXJEZXRhaWwu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tHcmFt
bWFyRGV0YWlsLmguCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLVGV4dENoZWNrZXIuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dpbi9XS1RleHRD
aGVja2VyLmNwcC4KKyAgICAgICAgKFdLVGV4dENoZWNrZXJTZXRDbGllbnQpOgorICAgICAgICAo
V0tUZXh0Q2hlY2tlckNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZCk6
CisgICAgICAgIChXS1RleHRDaGVja2VyR3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXS1RleHRDaGVja2VyQ2hlY2tTcGVsbGluZyk6CisgICAgICAgIChXS1Rl
eHRDaGVja2VyQ2hhbmdlU3BlbGxpbmdUb1dvcmQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9XS1RleHRDaGVja2VyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0Mvd2luL1dLVGV4dENoZWNrZXIuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Mvd2lu
L1dLQVBJQ2FzdFdpbi5oOiBSZW1vdmVkIG1hcHBpbmcgZm9yIFdLVGV4dENoZWNrZXJSZWYgJiBX
S0dyYW1tYXJEZXRhaWxSZWYuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkdyYW1tYXJEZXRhaWwu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJHcmFtbWFy
RGV0YWlsLmNwcC4KKyAgICAgICAgKFdlYktpdDo6V2ViR3JhbW1hckRldGFpbDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViR3JhbW1hckRldGFpbDo6V2ViR3JhbW1hckRldGFpbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkdyYW1tYXJEZXRhaWw6Omd1ZXNzZXMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJHcmFtbWFyRGV0YWlsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3Mvd2luL1dlYkdyYW1tYXJEZXRhaWwuaC4KKyAgICAgICAgKFdlYktpdDo6V2ViR3Jh
bW1hckRldGFpbDo6bG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFtbWFyRGV0YWls
OjpsZW5ndGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFtbWFyRGV0YWlsOjp1c2VyRGVzY3Jp
cHRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFtbWFyRGV0YWlsOjpncmFtbWFyRGV0YWls
KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhbW1hckRldGFpbDo6dHlwZSk6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlRleHRDaGVja2VyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXIuY3BwLgorICAgICAgICAoV2ViS2l0OjpXZWJU
ZXh0Q2hlY2tlcjo6c2hhcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVGV4dENoZWNrZXI6Oldl
YlRleHRDaGVja2VyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVGV4dENoZWNrZXI6OnNldENsaWVu
dCk6CisgICAgICAgIChXZWJLaXQ6OnVwZGF0ZVN0YXRlRm9yQWxsV2ViUHJvY2Vzc2VzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRleHRDaGVja2VyOjpncmFt
bWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVGV4
dENoZWNrZXI6OmNoZWNrU3BlbGxpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJUZXh0Q2hlY2tl
cjo6Y2hhbmdlU3BlbGxpbmdUb1dvcmQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJUZXh0Q2hl
Y2tlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJUZXh0
Q2hlY2tlci5oLgorICAgICAgICAoV2ViS2l0OjpXZWJUZXh0Q2hlY2tlcjo6Y2xpZW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVGV4dENoZWNrZXI6OnR5cGUpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJUZXh0Q2hlY2tlckNsaWVudC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyQ2xpZW50LmNwcC4KKyAgICAgICAgKFdlYktpdDo6
V2ViVGV4dENoZWNrZXJDbGllbnQ6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlRleHRDaGVja2VyQ2xpZW50Ojpjb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJUZXh0Q2hlY2tlckNsaWVudDo6c2V0
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVGV4
dENoZWNrZXJDbGllbnQ6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJUZXh0Q2hlY2tlckNsaWVudDo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlRleHRDaGVja2VyQ2xpZW50Ojp1bmlxdWVTcGVsbERvY3VtZW50VGFn
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVGV4dENoZWNrZXJDbGllbnQ6OmNsb3NlU3BlbGxEb2N1
bWVudFdpdGhUYWcpOgorICAgICAgICAoV2ViS2l0OjpXZWJUZXh0Q2hlY2tlckNsaWVudDo6Y2hl
Y2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViVGV4dENoZWNrZXJDbGll
bnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViVGV4dENoZWNr
ZXJDbGllbnQ6OnNwZWxsaW5nVUlJc1Nob3dpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJUZXh0
Q2hlY2tlckNsaWVudDo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlRleHRDaGVja2VyQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRX
b3JkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVGV4dENoZWNrZXJDbGllbnQ6OnVwZGF0ZVNwZWxs
aW5nVUlXaXRoR3JhbW1hclN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlRleHRDaGVja2Vy
Q2xpZW50OjpndWVzc2VzRm9yV29yZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRleHRDaGVja2Vy
Q2xpZW50OjpsZWFybldvcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJUZXh0Q2hlY2tlckNsaWVu
dDo6aWdub3JlV29yZCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlRleHRDaGVja2VyQ2xpZW50
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlRleHRDaGVj
a2VyQ2xpZW50LmguCisgICAgICAgICogd2luL1dlYktpdDIudmNwcm9qOiBDb3JyZWN0ZWQgcGF0
aHMgZm9yIHJlbmFtZWQgZmlsZXMuCisgICAgICAgICogd2luL1dlYktpdDJHZW5lcmF0ZWQubWFr
ZTogQ29ycmVjdGVkIHBhdGhzIGZvciByZW5hbWVkIGZpbGVzLgorCiAyMDExLTA5LTE1ICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVuYW1lIEVOQUJMRShEQVRB
QkFTRSkgdG8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9BUEkvYy9XS0Jhc2UuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0Jh
c2UuaAppbmRleCAxYmFhODcyLi5lZGI2OWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQVBJL2MvV0tCYXNlLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dL
QmFzZS5oCkBAIC04NCw2ICs4NCw3IEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLRnJh
bWVQb2xpY3lMaXN0ZW5lciogV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmOwogdHlwZWRlZiBjb25z
dCBzdHJ1Y3QgT3BhcXVlV0tHZW9sb2NhdGlvbk1hbmFnZXIqIFdLR2VvbG9jYXRpb25NYW5hZ2Vy
UmVmOwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tHZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0KiBXS0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RSZWY7CiB0eXBlZGVmIGNvbnN0
IHN0cnVjdCBPcGFxdWVXS0dlb2xvY2F0aW9uUG9zaXRpb24qIFdLR2VvbG9jYXRpb25Qb3NpdGlv
blJlZjsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLR3JhbW1hckRldGFpbCogV0tHcmFt
bWFyRGV0YWlsUmVmOwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tJY29uRGF0YWJhc2Uq
IFdLSWNvbkRhdGFiYXNlUmVmOwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tJbnNwZWN0
b3IqIFdLSW5zcGVjdG9yUmVmOwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tLZXlWYWx1
ZVN0b3JhZ2VNYW5hZ2VyKiBXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJSZWY7CkBAIC05Niw2ICs5
Nyw3IEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLUGFnZUdyb3VwKiBXS1BhZ2VHcm91
cFJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLUGx1Z2luU2l0ZURhdGFNYW5hZ2Vy
KiBXS1BsdWdpblNpdGVEYXRhTWFuYWdlclJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1
ZVdLUHJlZmVyZW5jZXMqIFdLUHJlZmVyZW5jZXNSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBP
cGFxdWVXS1Byb3RlY3Rpb25TcGFjZSogV0tQcm90ZWN0aW9uU3BhY2VSZWY7Cit0eXBlZGVmIGNv
bnN0IHN0cnVjdCBPcGFxdWVXS1RleHRDaGVja2VyKiBXS1RleHRDaGVja2VyUmVmOwogCiAvKiBX
ZWJLaXQyIEJ1bmRsZSB0eXBlcyAqLwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQVBJL2Mvd2luL1dLQmFzZVdpbi5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL3dp
bi9XS0Jhc2VXaW4uaAppbmRleCBkOWMxM2UzLi5mZGQ0NjA3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQVBJL2Mvd2luL1dLQmFzZVdpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9BUEkvYy93aW4vV0tCYXNlV2luLmgKQEAgLTMyLDcgKzMyLDUgQEAKIAogdHlwZWRl
ZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tWaWV3KiBXS1ZpZXdSZWY7CiB0eXBlZGVmIGNvbnN0IHN0
cnVjdCBPcGFxdWVXS0VkaXRDb21tYW5kKiBXS0VkaXRDb21tYW5kUmVmOwotdHlwZWRlZiBjb25z
dCBzdHJ1Y3QgT3BhcXVlV0tUZXh0Q2hlY2tlciogV0tUZXh0Q2hlY2tlclJlZjsKLXR5cGVkZWYg
Y29uc3Qgc3RydWN0IE9wYXF1ZVdLR3JhbW1hckRldGFpbCogV0tHcmFtbWFyRGV0YWlsUmVmOwog
CiAjZW5kaWYgLyogV0tCYXNlV2luX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9BUElPYmplY3QuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElPYmplY3QuaAppbmRl
eCBlNWE3ZWVkLi4wMGI4NjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJ
T2JqZWN0LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSU9iamVjdC5oCkBAIC03Niw2
ICs3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgVHlwZUdlb2xvY2F0aW9uTWFuYWdlciwKICAgICAg
ICAgVHlwZUdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QsCiAgICAgICAgIFR5cGVHZW9sb2Nh
dGlvblBvc2l0aW9uLAorICAgICAgICBUeXBlR3JhbW1hckRldGFpbCwKICAgICAgICAgVHlwZUlj
b25EYXRhYmFzZSwKICAgICAgICAgVHlwZUluc3BlY3RvciwKICAgICAgICAgVHlwZUtleVZhbHVl
U3RvcmFnZU1hbmFnZXIsCkBAIC04Nyw2ICs4OCw3IEBAIHB1YmxpYzoKICAgICAgICAgVHlwZVBh
Z2VHcm91cCwKICAgICAgICAgVHlwZVBsdWdpblNpdGVEYXRhTWFuYWdlciwKICAgICAgICAgVHlw
ZVByZWZlcmVuY2VzLAorICAgICAgICBUeXBlVGV4dENoZWNrZXIsCiAKICAgICAgICAgLy8gQnVu
ZGxlIHR5cGVzCiAgICAgICAgIFR5cGVCdW5kbGUsCkBAIC0xMDUsOCArMTA3LDYgQEAgcHVibGlj
OgogCiAgICAgICAgIC8vIFBsYXRmb3JtIHNwZWNpZmljCiAgICAgICAgIFR5cGVFZGl0Q29tbWFu
ZFByb3h5LAotICAgICAgICBUeXBlR3JhbW1hckRldGFpbCwKLSAgICAgICAgVHlwZVRleHRDaGVj
a2VyLAogICAgICAgICBUeXBlVmlldwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS0FQSUNhc3QuaAppbmRleCA4MWMyZjVmLi5mNmQzMzNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5j
bHVkZSAiRm9udFNtb290aGluZ0xldmVsLmgiCiAjaW5jbHVkZSAiSFRUUENvb2tpZUFjY2VwdFBv
bGljeS5oIgogI2luY2x1ZGUgIlJlc291cmNlQ2FjaGVzVG9DbGVhci5oIgorI2luY2x1ZGUgIldl
YkdyYW1tYXJEZXRhaWwuaCIKICNpbmNsdWRlICJXS0NvbnRleHQuaCIKICNpbmNsdWRlICJXS0Nv
b2tpZU1hbmFnZXIuaCIKICNpbmNsdWRlICJXS0NyZWRlbnRpYWxUeXBlcy5oIgpAQCAtNjQsNiAr
NjUsNyBAQCBjbGFzcyBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk7CiBjbGFzcyBXZWJGcmFt
ZVByb3h5OwogY2xhc3MgV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJHZW9s
b2NhdGlvblBvc2l0aW9uOworY2xhc3MgV2ViR3JhbW1hckRldGFpbDsKIGNsYXNzIFdlYkljb25E
YXRhYmFzZTsKIGNsYXNzIFdlYkluc3BlY3RvclByb3h5OwogY2xhc3MgV2ViS2V5VmFsdWVTdG9y
YWdlTWFuYWdlclByb3h5OwpAQCAtNzYsNiArNzgsNyBAQCBjbGFzcyBXZWJQYWdlUHJveHk7CiBj
bGFzcyBXZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXI7CiBjbGFzcyBXZWJQcmVmZXJlbmNlczsKIGNs
YXNzIFdlYlByb3RlY3Rpb25TcGFjZTsKK2NsYXNzIFdlYlRleHRDaGVja2VyOwogCiBXS19BRERf
QVBJX01BUFBJTkcoV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclJlZiwgV2ViQXBwbGljYXRpb25D
YWNoZU1hbmFnZXJQcm94eSkKIFdLX0FERF9BUElfTUFQUElORyhXS0F1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlUmVmLCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KQpAQCAtOTQsNiArOTcsNyBA
QCBXS19BRERfQVBJX01BUFBJTkcoV0tGcmFtZVJlZiwgV2ViRnJhbWVQcm94eSkKIFdLX0FERF9B
UElfTUFQUElORyhXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiwgV2ViR2VvbG9jYXRpb25NYW5hZ2Vy
UHJveHkpCiBXS19BRERfQVBJX01BUFBJTkcoV0tHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
UmVmLCBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHkpCiBXS19BRERfQVBJX01BUFBJ
TkcoV0tHZW9sb2NhdGlvblBvc2l0aW9uUmVmLCBXZWJHZW9sb2NhdGlvblBvc2l0aW9uKQorV0tf
QUREX0FQSV9NQVBQSU5HKFdLR3JhbW1hckRldGFpbFJlZiwgV2ViR3JhbW1hckRldGFpbCkKIFdL
X0FERF9BUElfTUFQUElORyhXS0ljb25EYXRhYmFzZVJlZiwgV2ViSWNvbkRhdGFiYXNlKQogV0tf
QUREX0FQSV9NQVBQSU5HKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiwgV2ViS2V5VmFsdWVT
dG9yYWdlTWFuYWdlclByb3h5KQogV0tfQUREX0FQSV9NQVBQSU5HKFdLTWVkaWFDYWNoZU1hbmFn
ZXJSZWYsIFdlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHkpCkBAIC0xMDUsNiArMTA5LDcgQEAgV0tf
QUREX0FQSV9NQVBQSU5HKFdLUGFnZVJlZiwgV2ViUGFnZVByb3h5KQogV0tfQUREX0FQSV9NQVBQ
SU5HKFdLUGx1Z2luU2l0ZURhdGFNYW5hZ2VyUmVmLCBXZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIp
CiBXS19BRERfQVBJX01BUFBJTkcoV0tQcmVmZXJlbmNlc1JlZiwgV2ViUHJlZmVyZW5jZXMpCiBX
S19BRERfQVBJX01BUFBJTkcoV0tQcm90ZWN0aW9uU3BhY2VSZWYsIFdlYlByb3RlY3Rpb25TcGFj
ZSkKK1dLX0FERF9BUElfTUFQUElORyhXS1RleHRDaGVja2VyUmVmLCBXZWJUZXh0Q2hlY2tlcikK
IAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiBXS19BRERfQVBJX01BUFBJTkcoV0tJbnNwZWN0b3JS
ZWYsIFdlYkluc3BlY3RvclByb3h5KQpAQCAtMzI2LDYgKzMzMSwxMSBAQCBpbmxpbmUgV0tIVFRQ
Q29va2llQWNjZXB0UG9saWN5IHRvQVBJKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KQog
ICAgIHJldHVybiBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5QWx3YXlzOwogfQogCitpbmxpbmUg
UHJveHlpbmdSZWZQdHI8V2ViR3JhbW1hckRldGFpbD4gdG9BUEkoY29uc3QgV2ViQ29yZTo6R3Jh
bW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkKK3sKKyAgICByZXR1cm4gUHJveHlpbmdSZWZQdHI8
V2ViR3JhbW1hckRldGFpbD4oV2ViR3JhbW1hckRldGFpbDo6Y3JlYXRlKGdyYW1tYXJEZXRhaWwp
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNpZiBkZWZpbmVkKFdJTjMyKSB8fCBk
ZWZpbmVkKF9XSU4zMikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS0dyYW1tYXJEZXRhaWwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
R3JhbW1hckRldGFpbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFi
MGZjNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9X
S0dyYW1tYXJEZXRhaWwuY3BwCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0tHcmFtbWFyRGV0YWlsLmgiCisKKyNpbmNsdWRlICJB
UElPYmplY3QuaCIKKyNpbmNsdWRlICJJbW11dGFibGVBcnJheS5oIgorI2luY2x1ZGUgIldLQVBJ
Q2FzdC5oIgorI2luY2x1ZGUgIldlYkdyYW1tYXJEZXRhaWwuaCIKKwordXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKKworV0tUeXBlSUQgV0tHcmFtbWFyRGV0YWlsR2V0VHlwZUlEKCkKK3sKKyAgICBy
ZXR1cm4gdG9BUEkoQVBJT2JqZWN0OjpUeXBlR3JhbW1hckRldGFpbCk7Cit9CisKK1dLR3JhbW1h
ckRldGFpbFJlZiBXS0dyYW1tYXJEZXRhaWxDcmVhdGUoaW50IGxvY2F0aW9uLCBpbnQgbGVuZ3Ro
LCBXS0FycmF5UmVmIGd1ZXNzZXMsIFdLU3RyaW5nUmVmIHVzZXJEZXNjcmlwdGlvbikKK3sKKyAg
ICBSZWZQdHI8V2ViR3JhbW1hckRldGFpbD4gZGV0YWlsID0gV2ViR3JhbW1hckRldGFpbDo6Y3Jl
YXRlKGxvY2F0aW9uLCBsZW5ndGgsIHRvSW1wbChndWVzc2VzKSwgdG9XVEZTdHJpbmcodXNlckRl
c2NyaXB0aW9uKSk7CisgICAgcmV0dXJuIHRvQVBJKGRldGFpbC5yZWxlYXNlKCkucmVsZWFzZVJl
ZigpKTsKK30KKworaW50IFdLR3JhbW1hckRldGFpbEdldExvY2F0aW9uKFdLR3JhbW1hckRldGFp
bFJlZiBncmFtbWFyRGV0YWlsUmVmKQoreworICAgIHJldHVybiB0b0ltcGwoZ3JhbW1hckRldGFp
bFJlZiktPmxvY2F0aW9uKCk7Cit9CisKK2ludCBXS0dyYW1tYXJEZXRhaWxHZXRMZW5ndGgoV0tH
cmFtbWFyRGV0YWlsUmVmIGdyYW1tYXJEZXRhaWxSZWYpCit7CisgICAgcmV0dXJuIHRvSW1wbChn
cmFtbWFyRGV0YWlsUmVmKS0+bGVuZ3RoKCk7Cit9CisKK1dLQXJyYXlSZWYgV0tHcmFtbWFyRGV0
YWlsQ29weUd1ZXNzZXMoV0tHcmFtbWFyRGV0YWlsUmVmIGdyYW1tYXJEZXRhaWxSZWYpCit7Cisg
ICAgcmV0dXJuIHRvQVBJKHRvSW1wbChncmFtbWFyRGV0YWlsUmVmKS0+Z3Vlc3NlcygpLmxlYWtS
ZWYoKSk7Cit9CisKK1dLU3RyaW5nUmVmIFdLR3JhbW1hckRldGFpbENvcHlVc2VyRGVzY3JpcHRp
b24oV0tHcmFtbWFyRGV0YWlsUmVmIGdyYW1tYXJEZXRhaWxSZWYpCit7CisgICAgcmV0dXJuIHRv
Q29waWVkQVBJKHRvSW1wbChncmFtbWFyRGV0YWlsUmVmKS0+dXNlckRlc2NyaXB0aW9uKCkpOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLR3JhbW1hckRl
dGFpbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLR3JhbW1hckRldGFpbC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxODdjZTYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tHcmFtbWFyRGV0YWlsLmgK
QEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV0tHcmFtbWFyRGV0YWlsX2gK
KyNkZWZpbmUgV0tHcmFtbWFyRGV0YWlsX2gKKworI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+
CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworV0tfRVhQT1JU
IFdLVHlwZUlEIFdLR3JhbW1hckRldGFpbEdldFR5cGVJRCgpOworV0tfRVhQT1JUIFdLR3JhbW1h
ckRldGFpbFJlZiBXS0dyYW1tYXJEZXRhaWxDcmVhdGUoaW50IGxvY2F0aW9uLCBpbnQgbGVuZ3Ro
LCBXS0FycmF5UmVmIGd1ZXNzZXMsIFdLU3RyaW5nUmVmIHVzZXJEZXNjcmlwdGlvbik7CisKK1dL
X0VYUE9SVCBpbnQgV0tHcmFtbWFyRGV0YWlsR2V0TG9jYXRpb24oV0tHcmFtbWFyRGV0YWlsUmVm
IGdyYW1tYXJEZXRhaWxSZWYpOworV0tfRVhQT1JUIGludCBXS0dyYW1tYXJEZXRhaWxHZXRMZW5n
dGgoV0tHcmFtbWFyRGV0YWlsUmVmIGdyYW1tYXJEZXRhaWxSZWYpOworV0tfRVhQT1JUIFdLQXJy
YXlSZWYgV0tHcmFtbWFyRGV0YWlsQ29weUd1ZXNzZXMoV0tHcmFtbWFyRGV0YWlsUmVmIGdyYW1t
YXJEZXRhaWxSZWYpOworV0tfRVhQT1JUIFdLU3RyaW5nUmVmIFdLR3JhbW1hckRldGFpbENvcHlV
c2VyRGVzY3JpcHRpb24oV0tHcmFtbWFyRGV0YWlsUmVmIGdyYW1tYXJEZXRhaWxSZWYpOworCisj
aWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogV0tHcmFtbWFyRGV0YWls
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1RleHRD
aGVja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1RleHRDaGVja2Vy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzI5ZGEyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLVGV4dENoZWNrZXIu
Y3BwCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV0tUZXh0Q2hlY2tlci5oIgorCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5j
bHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViVGV4dENoZWNrZXIuaCIKKwordXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKKwordm9pZCBXS1RleHRDaGVja2VyU2V0Q2xpZW50KGNvbnN0
IFdLVGV4dENoZWNrZXJDbGllbnQqIHdrQ2xpZW50KQoreworICAgIGlmICh3a0NsaWVudCAmJiB3
a0NsaWVudC0+dmVyc2lvbikKKyAgICAgICAgcmV0dXJuOworICAgIFdlYlRleHRDaGVja2VyOjpz
aGFyZWQoKS0+c2V0Q2xpZW50KHdrQ2xpZW50KTsKK30KKwordm9pZCBXS1RleHRDaGVja2VyQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKK3sK
KyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZFN0YXRlQ2hhbmdlZChlbmFibGVkKTsKK30KKwordm9pZCBXS1RleHRDaGVja2VyR3JhbW1h
ckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCit7CisgICAgV2ViVGV4
dENoZWNrZXI6OnNoYXJlZCgpLT5ncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGVu
YWJsZWQpOworfQorCit2b2lkIFdLVGV4dENoZWNrZXJDaGVja1NwZWxsaW5nKFdLUGFnZVJlZiBw
YWdlLCBib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQoreworICAgIFdlYlRleHRDaGVja2VyOjpz
aGFyZWQoKS0+Y2hlY2tTcGVsbGluZyh0b0ltcGwocGFnZSksIHN0YXJ0QmVmb3JlU2VsZWN0aW9u
KTsKK30KKwordm9pZCBXS1RleHRDaGVja2VyQ2hhbmdlU3BlbGxpbmdUb1dvcmQoV0tQYWdlUmVm
IHBhZ2UsIFdLU3RyaW5nUmVmIHdvcmQpCit7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgp
LT5jaGFuZ2VTcGVsbGluZ1RvV29yZCh0b0ltcGwocGFnZSksIHRvV1RGU3RyaW5nKHdvcmQpKTsK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1RleHRDaGVj
a2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tUZXh0Q2hlY2tlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMDVlZDkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tUZXh0Q2hlY2tlci5oCkBAIC0w
LDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdLVGV4dENoZWNrZXJfaAorI2RlZmlu
ZSBXS1RleHRDaGVja2VyX2gKKworI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CisKKyNpZmRl
ZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLy8gVGV4dENoZWNrZXIgQ2xp
ZW50Cit0eXBlZGVmIGJvb2wgKCpXS1RleHRDaGVja2VyQ29udGlub3VzU3BlbGxDaGVja2luZ0Fs
bG93ZWQpKGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwordHlwZWRlZiBib29sICgqV0tUZXh0Q2hl
Y2tlckNvbnRpbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKShjb25zdCB2b2lkICpjbGllbnRJbmZv
KTsKK3R5cGVkZWYgdm9pZCAoKldLVGV4dENoZWNrZXJTZXRDb250aW5vdXNTcGVsbENoZWNraW5n
RW5hYmxlZCkoYm9vbCBlbmFibGVkLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKK3R5cGVkZWYg
Ym9vbCAoKldLVGV4dENoZWNrZXJHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKShjb25zdCB2b2lkICpj
bGllbnRJbmZvKTsKK3R5cGVkZWYgdm9pZCAoKldLVGV4dENoZWNrZXJTZXRHcmFtbWFyQ2hlY2tp
bmdFbmFibGVkKShib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwordHlwZWRl
ZiB1aW50NjRfdCAoKldLVGV4dENoZWNrZXJVbmlxdWVTcGVsbERvY3VtZW50VGFnKShXS1BhZ2VS
ZWYgcGFnZSwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS1RleHRD
aGVja2VyQ2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZykodWludDY0X3QgdGFnLCBjb25zdCB2b2lk
ICpjbGllbnRJbmZvKTsKK3R5cGVkZWYgdm9pZCAoKldLVGV4dENoZWNrZXJDaGVja1NwZWxsaW5n
T2ZTdHJpbmcpKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgaW50MzJfdCogbWlzc3Bl
bGxpbmdMb2NhdGlvbiwgaW50MzJfdCogbWlzc3BlbGxpbmdMZW5ndGgsIGNvbnN0IHZvaWQgKmNs
aWVudEluZm8pOwordHlwZWRlZiB2b2lkICgqV0tUZXh0Q2hlY2tlckNoZWNrR3JhbW1hck9mU3Ry
aW5nKSh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHRleHQsIFdLQXJyYXlSZWYqIGdyYW1tYXJE
ZXRhaWxzLCBpbnQzMl90KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludDMyX3QqIGJhZEdyYW1tYXJM
ZW5ndGgsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwordHlwZWRlZiBib29sICgqV0tUZXh0Q2hl
Y2tlclNwZWxsaW5nVUlJc1Nob3dpbmcpKGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwordHlwZWRl
ZiB2b2lkICgqV0tUZXh0Q2hlY2tlclRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcpKGNvbnN0IHZv
aWQgKmNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkICgqV0tUZXh0Q2hlY2tlclVwZGF0ZVNwZWxs
aW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQpKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgbWlzc3Bl
bGxlZFdvcmQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkICgqV0tUZXh0
Q2hlY2tlclVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZykodWludDY0X3QgdGFnLCBX
S1N0cmluZ1JlZiBiYWRHcmFtbWFyUGhyYXNlLCBXS0dyYW1tYXJEZXRhaWxSZWYgZ3JhbW1hckRl
dGFpbCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Cit0eXBlZGVmIFdLQXJyYXlSZWYgKCpXS1Rl
eHRDaGVja2VyR3Vlc3Nlc0ZvcldvcmQpKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwg
Y29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS1RleHRDaGVja2VyTGVh
cm5Xb3JkKSh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQgKmNsaWVu
dEluZm8pOwordHlwZWRlZiB2b2lkICgqV0tUZXh0Q2hlY2tlcklnbm9yZVdvcmQpKHVpbnQ2NF90
IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7CisKK3N0cnVj
dCBXS1RleHRDaGVja2VyQ2xpZW50IHsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOworICAg
IGNvbnN0IHZvaWQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsaWVudEluZm87CisgICAgV0tUZXh0Q2hlY2tlckNvbnRpbm91c1Nw
ZWxsQ2hlY2tpbmdBbGxvd2VkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludW91
c1NwZWxsQ2hlY2tpbmdBbGxvd2VkOworICAgIFdLVGV4dENoZWNrZXJDb250aW5vdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZDsKKyAgICBXS1RleHRDaGVja2VyU2V0Q29udGlub3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQ7CisgICAgV0tUZXh0Q2hlY2tlckdyYW1tYXJDaGVja2luZ0VuYWJsZWQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hckNoZWNraW5nRW5hYmxl
ZDsKKyAgICBXS1RleHRDaGVja2VyU2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkOworICAgIFdL
VGV4dENoZWNrZXJVbmlxdWVTcGVsbERvY3VtZW50VGFnICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWc7CisgICAgV0tUZXh0Q2hlY2tlckNs
b3NlU3BlbGxEb2N1bWVudFdpdGhUYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZzsKKyAgICBXS1RleHRDaGVja2VyQ2hlY2tTcGVsbGlu
Z09mU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1NwZWxs
aW5nT2ZTdHJpbmc7CisgICAgV0tUZXh0Q2hlY2tlckNoZWNrR3JhbW1hck9mU3RyaW5nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tHcmFtbWFyT2ZTdHJpbmc7Cisg
ICAgV0tUZXh0Q2hlY2tlclNwZWxsaW5nVUlJc1Nob3dpbmcgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3BlbGxpbmdVSUlzU2hvd2luZzsKKyAgICBXS1RleHRDaGVja2Vy
VG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nOworICAgIFdLVGV4dENoZWNrZXJVcGRhdGVTcGVs
bGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVNw
ZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQ7CisgICAgV0tUZXh0Q2hlY2tlclVwZGF0ZVNwZWxs
aW5nVUlXaXRoR3JhbW1hclN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3Bl
bGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nOworICAgIFdLVGV4dENoZWNrZXJHdWVzc2VzRm9yV29y
ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1ZXNzZXNGb3JX
b3JkOworICAgIFdLVGV4dENoZWNrZXJMZWFybldvcmQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxlYXJuV29yZDsKKyAgICBXS1RleHRDaGVja2VySWdu
b3JlV29yZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
Z25vcmVXb3JkOworfTsKK3R5cGVkZWYgc3RydWN0IFdLVGV4dENoZWNrZXJDbGllbnQgV0tUZXh0
Q2hlY2tlckNsaWVudDsKKworZW51bSB7IGtXS1RleHRDaGVja2VyQ2xpZW50Q3VycmVudFZlcnNp
b24gPSAwIH07CisKK1dLX0VYUE9SVCB2b2lkIFdLVGV4dENoZWNrZXJTZXRDbGllbnQoY29uc3Qg
V0tUZXh0Q2hlY2tlckNsaWVudCogY2xpZW50KTsKKworV0tfRVhQT1JUIHZvaWQgV0tUZXh0Q2hl
Y2tlckNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sKTsKK1dL
X0VYUE9SVCB2b2lkIFdLVGV4dENoZWNrZXJHcmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFu
Z2VkKGJvb2wpOworCitXS19FWFBPUlQgdm9pZCBXS1RleHRDaGVja2VyQ2hlY2tTcGVsbGluZyhX
S1BhZ2VSZWYgcGFnZSwgYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbik7CitXS19FWFBPUlQgdm9p
ZCBXS1RleHRDaGVja2VyQ2hhbmdlU3BlbGxpbmdUb1dvcmQoV0tQYWdlUmVmIHBhZ2UsIFdLU3Ry
aW5nUmVmIHdvcmQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYg
LyogV0tUZXh0Q2hlY2tlcl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0Mvd2luL1dLQVBJQ2FzdFdpbi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL3dpbi9XS0FQSUNhc3RXaW4uaAppbmRleCAyNDg5MWY1Li41YjcxY2YzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLQVBJQ2FzdFdpbi5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tBUElDYXN0V2luLmgKQEAgLTMw
LDI0ICszMCwxMyBAQAogI2Vycm9yICJQbGVhc2UgI2luY2x1ZGUgXCJXS0FQSUNhc3QuaFwiIGlu
c3RlYWQgb2YgdGhpcyBmaWxlIGRpcmVjdGx5LiIKICNlbmRpZgogCi0jaW5jbHVkZSAiV2ViR3Jh
bW1hckRldGFpbC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENoZWNrZXJDbGllbnQuaD4KLQog
bmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlZpZXc7CiBjbGFzcyBXZWJFZGl0Q29tbWFu
ZFByb3h5OwotY2xhc3MgV2ViVGV4dENoZWNrZXI7CiAKIFdLX0FERF9BUElfTUFQUElORyhXS1Zp
ZXdSZWYsIFdlYlZpZXcpCiBXS19BRERfQVBJX01BUFBJTkcoV0tFZGl0Q29tbWFuZFJlZiwgV2Vi
RWRpdENvbW1hbmRQcm94eSkKLVdLX0FERF9BUElfTUFQUElORyhXS1RleHRDaGVja2VyUmVmLCBX
ZWJUZXh0Q2hlY2tlcikKLVdLX0FERF9BUElfTUFQUElORyhXS0dyYW1tYXJEZXRhaWxSZWYsIFdl
YkdyYW1tYXJEZXRhaWwpCi0KLWlubGluZSBQcm94eWluZ1JlZlB0cjxXZWJHcmFtbWFyRGV0YWls
PiB0b0FQSShjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0YWlsKQotewot
ICAgIHJldHVybiBQcm94eWluZ1JlZlB0cjxXZWJHcmFtbWFyRGV0YWlsPihXZWJHcmFtbWFyRGV0
YWlsOjpjcmVhdGUoZ3JhbW1hckRldGFpbCkpOwotfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dpbi9XS0dyYW1t
YXJEZXRhaWwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dpbi9XS0dyYW1t
YXJEZXRhaWwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWIwZmM0Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tHcmFtbWFyRGV0
YWlsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV0tHcmFtbWFyRGV0YWlsLmgiCi0KLSNpbmNsdWRl
ICJBUElPYmplY3QuaCIKLSNpbmNsdWRlICJJbW11dGFibGVBcnJheS5oIgotI2luY2x1ZGUgIldL
QVBJQ2FzdC5oIgotI2luY2x1ZGUgIldlYkdyYW1tYXJEZXRhaWwuaCIKLQotdXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKLQotV0tUeXBlSUQgV0tHcmFtbWFyRGV0YWlsR2V0VHlwZUlEKCkKLXsKLSAg
ICByZXR1cm4gdG9BUEkoQVBJT2JqZWN0OjpUeXBlR3JhbW1hckRldGFpbCk7Ci19Ci0KLVdLR3Jh
bW1hckRldGFpbFJlZiBXS0dyYW1tYXJEZXRhaWxDcmVhdGUoaW50IGxvY2F0aW9uLCBpbnQgbGVu
Z3RoLCBXS0FycmF5UmVmIGd1ZXNzZXMsIFdLU3RyaW5nUmVmIHVzZXJEZXNjcmlwdGlvbikKLXsK
LSAgICBSZWZQdHI8V2ViR3JhbW1hckRldGFpbD4gZGV0YWlsID0gV2ViR3JhbW1hckRldGFpbDo6
Y3JlYXRlKGxvY2F0aW9uLCBsZW5ndGgsIHRvSW1wbChndWVzc2VzKSwgdG9XVEZTdHJpbmcodXNl
ckRlc2NyaXB0aW9uKSk7Ci0gICAgcmV0dXJuIHRvQVBJKGRldGFpbC5yZWxlYXNlKCkucmVsZWFz
ZVJlZigpKTsKLX0KLQotaW50IFdLR3JhbW1hckRldGFpbEdldExvY2F0aW9uKFdLR3JhbW1hckRl
dGFpbFJlZiBncmFtbWFyRGV0YWlsUmVmKQotewotICAgIHJldHVybiB0b0ltcGwoZ3JhbW1hckRl
dGFpbFJlZiktPmxvY2F0aW9uKCk7Ci19Ci0KLWludCBXS0dyYW1tYXJEZXRhaWxHZXRMZW5ndGgo
V0tHcmFtbWFyRGV0YWlsUmVmIGdyYW1tYXJEZXRhaWxSZWYpCi17Ci0gICAgcmV0dXJuIHRvSW1w
bChncmFtbWFyRGV0YWlsUmVmKS0+bGVuZ3RoKCk7Ci19Ci0KLVdLQXJyYXlSZWYgV0tHcmFtbWFy
RGV0YWlsQ29weUd1ZXNzZXMoV0tHcmFtbWFyRGV0YWlsUmVmIGdyYW1tYXJEZXRhaWxSZWYpCi17
Ci0gICAgcmV0dXJuIHRvQVBJKHRvSW1wbChncmFtbWFyRGV0YWlsUmVmKS0+Z3Vlc3NlcygpLmxl
YWtSZWYoKSk7Ci19Ci0KLVdLU3RyaW5nUmVmIFdLR3JhbW1hckRldGFpbENvcHlVc2VyRGVzY3Jp
cHRpb24oV0tHcmFtbWFyRGV0YWlsUmVmIGdyYW1tYXJEZXRhaWxSZWYpCi17Ci0gICAgcmV0dXJu
IHRvQ29waWVkQVBJKHRvSW1wbChncmFtbWFyRGV0YWlsUmVmKS0+dXNlckRlc2NyaXB0aW9uKCkp
OwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dpbi9XS0dy
YW1tYXJEZXRhaWwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tHcmFt
bWFyRGV0YWlsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxODdjZTYuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dpbi9XS0dyYW1tYXJEZXRh
aWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IFdLR3JhbW1hckRldGFpbF9oCi0jZGVmaW5lIFdLR3JhbW1hckRldGFpbF9oCi0KLSNpbmNsdWRl
IDxXZWJLaXQyL1dLQmFzZS5oPgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewot
I2VuZGlmCi0KLVdLX0VYUE9SVCBXS1R5cGVJRCBXS0dyYW1tYXJEZXRhaWxHZXRUeXBlSUQoKTsK
LVdLX0VYUE9SVCBXS0dyYW1tYXJEZXRhaWxSZWYgV0tHcmFtbWFyRGV0YWlsQ3JlYXRlKGludCBs
b2NhdGlvbiwgaW50IGxlbmd0aCwgV0tBcnJheVJlZiBndWVzc2VzLCBXS1N0cmluZ1JlZiB1c2Vy
RGVzY3JpcHRpb24pOwotCi1XS19FWFBPUlQgaW50IFdLR3JhbW1hckRldGFpbEdldExvY2F0aW9u
KFdLR3JhbW1hckRldGFpbFJlZiBncmFtbWFyRGV0YWlsUmVmKTsKLVdLX0VYUE9SVCBpbnQgV0tH
cmFtbWFyRGV0YWlsR2V0TGVuZ3RoKFdLR3JhbW1hckRldGFpbFJlZiBncmFtbWFyRGV0YWlsUmVm
KTsKLVdLX0VYUE9SVCBXS0FycmF5UmVmIFdLR3JhbW1hckRldGFpbENvcHlHdWVzc2VzKFdLR3Jh
bW1hckRldGFpbFJlZiBncmFtbWFyRGV0YWlsUmVmKTsKLVdLX0VYUE9SVCBXS1N0cmluZ1JlZiBX
S0dyYW1tYXJEZXRhaWxDb3B5VXNlckRlc2NyaXB0aW9uKFdLR3JhbW1hckRldGFpbFJlZiBncmFt
bWFyRGV0YWlsUmVmKTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotI2VuZGlm
IC8qIFdLR3JhbW1hckRldGFpbF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0Mvd2luL1dLVGV4dENoZWNrZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL3dpbi9XS1RleHRDaGVja2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMzMyOWRhMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0Mvd2luL1dLVGV4dENoZWNrZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXS1RleHRDaGVja2Vy
LmgiCi0KLSNpbmNsdWRlICJXS0FQSUNhc3QuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIK
LSNpbmNsdWRlICJXZWJUZXh0Q2hlY2tlci5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0Owot
Ci12b2lkIFdLVGV4dENoZWNrZXJTZXRDbGllbnQoY29uc3QgV0tUZXh0Q2hlY2tlckNsaWVudCog
d2tDbGllbnQpCi17Ci0gICAgaWYgKHdrQ2xpZW50ICYmIHdrQ2xpZW50LT52ZXJzaW9uKQotICAg
ICAgICByZXR1cm47Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5zZXRDbGllbnQod2tD
bGllbnQpOwotfQotCi12b2lkIFdLVGV4dENoZWNrZXJDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCBlbmFibGVkKQotewotICAgIFdlYlRleHRDaGVja2VyOjpz
aGFyZWQoKS0+Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJs
ZWQpOwotfQotCi12b2lkIFdLVGV4dENoZWNrZXJHcmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVD
aGFuZ2VkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmdy
YW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoZW5hYmxlZCk7Ci19Ci0KLXZvaWQgV0tU
ZXh0Q2hlY2tlckNoZWNrU3BlbGxpbmcoV0tQYWdlUmVmIHBhZ2UsIGJvb2wgc3RhcnRCZWZvcmVT
ZWxlY3Rpb24pCi17Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jaGVja1NwZWxsaW5n
KHRvSW1wbChwYWdlKSwgc3RhcnRCZWZvcmVTZWxlY3Rpb24pOwotfQotCi12b2lkIFdLVGV4dENo
ZWNrZXJDaGFuZ2VTcGVsbGluZ1RvV29yZChXS1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgd29y
ZCkKLXsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNoYW5nZVNwZWxsaW5nVG9Xb3Jk
KHRvSW1wbChwYWdlKSwgdG9XVEZTdHJpbmcod29yZCkpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dpbi9XS1RleHRDaGVja2VyLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLVGV4dENoZWNrZXIuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNmEwNWVkOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0Mvd2luL1dLVGV4dENoZWNrZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdLVGV4dENoZWNrZXJfaAotI2RlZmluZSBXS1Rl
eHRDaGVja2VyX2gKLQotI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+Ci0KLSNpZmRlZiBfX2Nw
bHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotLy8gVGV4dENoZWNrZXIgQ2xpZW50Ci10
eXBlZGVmIGJvb2wgKCpXS1RleHRDaGVja2VyQ29udGlub3VzU3BlbGxDaGVja2luZ0FsbG93ZWQp
KGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwotdHlwZWRlZiBib29sICgqV0tUZXh0Q2hlY2tlckNv
bnRpbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKShjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKLXR5
cGVkZWYgdm9pZCAoKldLVGV4dENoZWNrZXJTZXRDb250aW5vdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCkoYm9vbCBlbmFibGVkLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKLXR5cGVkZWYgYm9vbCAo
KldLVGV4dENoZWNrZXJHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKShjb25zdCB2b2lkICpjbGllbnRJ
bmZvKTsKLXR5cGVkZWYgdm9pZCAoKldLVGV4dENoZWNrZXJTZXRHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKShib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwotdHlwZWRlZiB1aW50
NjRfdCAoKldLVGV4dENoZWNrZXJVbmlxdWVTcGVsbERvY3VtZW50VGFnKShXS1BhZ2VSZWYgcGFn
ZSwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Ci10eXBlZGVmIHZvaWQgKCpXS1RleHRDaGVja2Vy
Q2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZykodWludDY0X3QgdGFnLCBjb25zdCB2b2lkICpjbGll
bnRJbmZvKTsKLXR5cGVkZWYgdm9pZCAoKldLVGV4dENoZWNrZXJDaGVja1NwZWxsaW5nT2ZTdHJp
bmcpKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgaW50MzJfdCogbWlzc3BlbGxpbmdM
b2NhdGlvbiwgaW50MzJfdCogbWlzc3BlbGxpbmdMZW5ndGgsIGNvbnN0IHZvaWQgKmNsaWVudElu
Zm8pOwotdHlwZWRlZiB2b2lkICgqV0tUZXh0Q2hlY2tlckNoZWNrR3JhbW1hck9mU3RyaW5nKSh1
aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHRleHQsIFdLQXJyYXlSZWYqIGdyYW1tYXJEZXRhaWxz
LCBpbnQzMl90KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludDMyX3QqIGJhZEdyYW1tYXJMZW5ndGgs
IGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwotdHlwZWRlZiBib29sICgqV0tUZXh0Q2hlY2tlclNw
ZWxsaW5nVUlJc1Nob3dpbmcpKGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwotdHlwZWRlZiB2b2lk
ICgqV0tUZXh0Q2hlY2tlclRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcpKGNvbnN0IHZvaWQgKmNs
aWVudEluZm8pOwotdHlwZWRlZiB2b2lkICgqV0tUZXh0Q2hlY2tlclVwZGF0ZVNwZWxsaW5nVUlX
aXRoTWlzc3BlbGxlZFdvcmQpKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgbWlzc3BlbGxlZFdv
cmQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwotdHlwZWRlZiB2b2lkICgqV0tUZXh0Q2hlY2tl
clVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZykodWludDY0X3QgdGFnLCBXS1N0cmlu
Z1JlZiBiYWRHcmFtbWFyUGhyYXNlLCBXS0dyYW1tYXJEZXRhaWxSZWYgZ3JhbW1hckRldGFpbCwg
Y29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Ci10eXBlZGVmIFdLQXJyYXlSZWYgKCpXS1RleHRDaGVj
a2VyR3Vlc3Nlc0ZvcldvcmQpKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qg
dm9pZCAqY2xpZW50SW5mbyk7Ci10eXBlZGVmIHZvaWQgKCpXS1RleHRDaGVja2VyTGVhcm5Xb3Jk
KSh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8p
OwotdHlwZWRlZiB2b2lkICgqV0tUZXh0Q2hlY2tlcklnbm9yZVdvcmQpKHVpbnQ2NF90IHRhZywg
V0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Ci0KLXN0cnVjdCBXS1Rl
eHRDaGVja2VyQ2xpZW50IHsKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOwotICAgIGNvbnN0
IHZvaWQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsaWVudEluZm87Ci0gICAgV0tUZXh0Q2hlY2tlckNvbnRpbm91c1NwZWxsQ2hl
Y2tpbmdBbGxvd2VkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludW91c1NwZWxs
Q2hlY2tpbmdBbGxvd2VkOwotICAgIFdLVGV4dENoZWNrZXJDb250aW5vdXNTcGVsbENoZWNraW5n
RW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZDsKLSAgICBXS1RleHRDaGVja2VyU2V0Q29udGlub3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQ7Ci0gICAgV0tUZXh0Q2hlY2tlckdyYW1tYXJDaGVja2luZ0VuYWJsZWQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hckNoZWNraW5nRW5hYmxlZDsKLSAg
ICBXS1RleHRDaGVja2VyU2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkOwotICAgIFdLVGV4dENo
ZWNrZXJVbmlxdWVTcGVsbERvY3VtZW50VGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWc7Ci0gICAgV0tUZXh0Q2hlY2tlckNsb3NlU3Bl
bGxEb2N1bWVudFdpdGhUYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VT
cGVsbERvY3VtZW50V2l0aFRhZzsKLSAgICBXS1RleHRDaGVja2VyQ2hlY2tTcGVsbGluZ09mU3Ry
aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1NwZWxsaW5nT2ZT
dHJpbmc7Ci0gICAgV0tUZXh0Q2hlY2tlckNoZWNrR3JhbW1hck9mU3RyaW5nICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tHcmFtbWFyT2ZTdHJpbmc7Ci0gICAgV0tU
ZXh0Q2hlY2tlclNwZWxsaW5nVUlJc1Nob3dpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3BlbGxpbmdVSUlzU2hvd2luZzsKLSAgICBXS1RleHRDaGVja2VyVG9nZ2xl
U3BlbGxpbmdVSUlzU2hvd2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2dn
bGVTcGVsbGluZ1VJSXNTaG93aW5nOwotICAgIFdLVGV4dENoZWNrZXJVcGRhdGVTcGVsbGluZ1VJ
V2l0aE1pc3NwZWxsZWRXb3JkICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVNwZWxsaW5n
VUlXaXRoTWlzc3BlbGxlZFdvcmQ7Ci0gICAgV0tUZXh0Q2hlY2tlclVwZGF0ZVNwZWxsaW5nVUlX
aXRoR3JhbW1hclN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3BlbGxpbmdV
SVdpdGhHcmFtbWFyU3RyaW5nOwotICAgIFdLVGV4dENoZWNrZXJHdWVzc2VzRm9yV29yZCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1ZXNzZXNGb3JXb3JkOwot
ICAgIFdLVGV4dENoZWNrZXJMZWFybldvcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxlYXJuV29yZDsKLSAgICBXS1RleHRDaGVja2VySWdub3JlV29y
ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVX
b3JkOwotfTsKLXR5cGVkZWYgc3RydWN0IFdLVGV4dENoZWNrZXJDbGllbnQgV0tUZXh0Q2hlY2tl
ckNsaWVudDsKLQotZW51bSB7IGtXS1RleHRDaGVja2VyQ2xpZW50Q3VycmVudFZlcnNpb24gPSAw
IH07Ci0KLVdLX0VYUE9SVCB2b2lkIFdLVGV4dENoZWNrZXJTZXRDbGllbnQoY29uc3QgV0tUZXh0
Q2hlY2tlckNsaWVudCogY2xpZW50KTsKLQotV0tfRVhQT1JUIHZvaWQgV0tUZXh0Q2hlY2tlckNv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sKTsKLVdLX0VYUE9S
VCB2b2lkIFdLVGV4dENoZWNrZXJHcmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJv
b2wpOwotCi1XS19FWFBPUlQgdm9pZCBXS1RleHRDaGVja2VyQ2hlY2tTcGVsbGluZyhXS1BhZ2VS
ZWYgcGFnZSwgYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbik7Ci1XS19FWFBPUlQgdm9pZCBXS1Rl
eHRDaGVja2VyQ2hhbmdlU3BlbGxpbmdUb1dvcmQoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVm
IHdvcmQpOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi0jZW5kaWYgLyogV0tU
ZXh0Q2hlY2tlcl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
R3JhbW1hckRldGFpbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViR3JhbW1hckRl
dGFpbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRmNTI4YwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJHcmFtbWFyRGV0YWls
LmNwcApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYkdyYW1tYXJEZXRhaWwuaCIKKworI2luY2x1ZGUgIkltbXV0YWJsZUFycmF5
LmgiCisjaW5jbHVkZSAiV0tHcmFtbWFyRGV0YWlsLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzUmVmUHRyPFdlYkdyYW1tYXJEZXRhaWw+IFdl
YkdyYW1tYXJEZXRhaWw6OmNyZWF0ZShpbnQgbG9jYXRpb24sIGludCBsZW5ndGgsIEltbXV0YWJs
ZUFycmF5KiBndWVzc2VzLCBjb25zdCBTdHJpbmcmIHVzZXJEZXNjcmlwdGlvbikKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdyYW1tYXJEZXRhaWwobG9jYXRpb24sIGxlbmd0aCwgZ3Vl
c3NlcywgdXNlckRlc2NyaXB0aW9uKSk7Cit9CisKK1Bhc3NSZWZQdHI8V2ViR3JhbW1hckRldGFp
bD4gV2ViR3JhbW1hckRldGFpbDo6Y3JlYXRlKGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwm
IGdyYW1tYXJEZXRhaWwpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHcmFtbWFyRGV0
YWlsKGdyYW1tYXJEZXRhaWwpKTsKK30KKworV2ViR3JhbW1hckRldGFpbDo6V2ViR3JhbW1hckRl
dGFpbChpbnQgbG9jYXRpb24sIGludCBsZW5ndGgsIEltbXV0YWJsZUFycmF5KiBndWVzc2VzLCBj
b25zdCBTdHJpbmcmIHVzZXJEZXNjcmlwdGlvbikKK3sKKyAgICBtX2dyYW1tYXJEZXRhaWwubG9j
YXRpb24gPSBsb2NhdGlvbjsKKyAgICBtX2dyYW1tYXJEZXRhaWwubGVuZ3RoID0gbGVuZ3RoOwor
CisgICAgc2l6ZV90IG51bUd1ZXNzZXMgPSBndWVzc2VzLT5zaXplKCk7CisgICAgbV9ncmFtbWFy
RGV0YWlsLmd1ZXNzZXMucmVzZXJ2ZUNhcGFjaXR5KG51bUd1ZXNzZXMpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbnVtR3Vlc3NlczsgKytpKQorICAgICAgICBtX2dyYW1tYXJEZXRhaWwu
Z3Vlc3Nlcy51bmNoZWNrZWRBcHBlbmQoZ3Vlc3Nlcy0+YXQ8V2ViU3RyaW5nPihpKS0+c3RyaW5n
KCkpOworCisgICAgbV9ncmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbiA9IHVzZXJEZXNjcmlw
dGlvbjsKK30KKworUGFzc1JlZlB0cjxJbW11dGFibGVBcnJheT4gV2ViR3JhbW1hckRldGFpbDo6
Z3Vlc3NlcygpIGNvbnN0Cit7CisgICAgc2l6ZV90IG51bUd1ZXNzZXMgPSBtX2dyYW1tYXJEZXRh
aWwuZ3Vlc3Nlcy5zaXplKCk7CisgICAgVmVjdG9yPFJlZlB0cjxBUElPYmplY3Q+ID4gd2tHdWVz
c2VzKG51bUd1ZXNzZXMpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HdWVzc2Vz
OyArK2kpCisgICAgICAgIHdrR3Vlc3Nlc1tpXSA9IFdlYlN0cmluZzo6Y3JlYXRlKG1fZ3JhbW1h
ckRldGFpbC5ndWVzc2VzW2ldKTsKKyAgICByZXR1cm4gSW1tdXRhYmxlQXJyYXk6OmFkb3B0KHdr
R3Vlc3Nlcyk7Cit9CisKK1dlYkdyYW1tYXJEZXRhaWw6OldlYkdyYW1tYXJEZXRhaWwoY29uc3Qg
V2ViQ29yZTo6R3JhbW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkKKyAgICA6IG1fZ3JhbW1hckRl
dGFpbChncmFtbWFyRGV0YWlsKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJHcmFtbWFyRGV0YWlsLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViR3JhbW1hckRldGFpbC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmZmNzliNWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViR3JhbW1hckRldGFpbC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYkdyYW1tYXJEZXRhaWxfaAorI2RlZmluZSBXZWJHcmFtbWFyRGV0
YWlsX2gKKworI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENo
ZWNrZXJDbGllbnQuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBJbW11dGFibGVBcnJh
eTsKKworY2xhc3MgV2ViR3JhbW1hckRldGFpbCA6IHB1YmxpYyBBUElPYmplY3QgeworcHVibGlj
OgorICAgIHN0YXRpYyBjb25zdCBUeXBlIEFQSVR5cGUgPSBUeXBlR3JhbW1hckRldGFpbDsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHcmFtbWFyRGV0YWlsPiBjcmVhdGUoaW50IGxvY2F0aW9u
LCBpbnQgbGVuZ3RoLCBJbW11dGFibGVBcnJheSogZ3Vlc3NlcywgY29uc3QgU3RyaW5nJiB1c2Vy
RGVzY3JpcHRpb24pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdyYW1tYXJEZXRhaWw+IGNy
ZWF0ZShjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJik7CisKKyAgICBpbnQgbG9jYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2dyYW1tYXJEZXRhaWwubG9jYXRpb247IH0KKyAgICBpbnQgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV9ncmFtbWFyRGV0YWlsLmxlbmd0aDsgfQorICAgIFBhc3NS
ZWZQdHI8SW1tdXRhYmxlQXJyYXk+IGd1ZXNzZXMoKSBjb25zdDsKKyAgICBjb25zdCBTdHJpbmcm
IHVzZXJEZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhbW1hckRldGFpbC51c2VyRGVz
Y3JpcHRpb247IH0KKworICAgIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmIGdyYW1tYXJE
ZXRhaWwoKSB7IHJldHVybiBtX2dyYW1tYXJEZXRhaWw7IH0KKworcHJpdmF0ZToKKyAgICBXZWJH
cmFtbWFyRGV0YWlsKGludCBsb2NhdGlvbiwgaW50IGxlbmd0aCwgSW1tdXRhYmxlQXJyYXkqIGd1
ZXNzZXMsIGNvbnN0IFN0cmluZyYgdXNlckRlc2NyaXB0aW9uKTsKKyAgICBXZWJHcmFtbWFyRGV0
YWlsKGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKTsKKworICAgIHZpcnR1YWwgVHlwZSB0
eXBlKCkgY29uc3QgeyByZXR1cm4gQVBJVHlwZTsgfQorCisgICAgV2ViQ29yZTo6R3JhbW1hckRl
dGFpbCBtX2dyYW1tYXJEZXRhaWw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIFdlYkdyYW1tYXJEZXRhaWxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlRleHRDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJU
ZXh0Q2hlY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc2MTg0
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJUZXh0Q2hl
Y2tlci5jcHAKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJUZXh0Q2hlY2tlci5oIgorCisjaW5jbHVkZSAiVGV4dENoZWNrZXIu
aCIKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0LmgiCisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViVGV4dENoZWNr
ZXIqIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKQoreworICAgIHN0YXRpYyBXZWJUZXh0Q2hlY2tl
ciogdGV4dENoZWNrZXIgPSBhZG9wdFJlZihuZXcgV2ViVGV4dENoZWNrZXIpLmxlYWtSZWYoKTsK
KyAgICByZXR1cm4gdGV4dENoZWNrZXI7Cit9CisKK1dlYlRleHRDaGVja2VyOjpXZWJUZXh0Q2hl
Y2tlcigpCit7Cit9CisKK3ZvaWQgV2ViVGV4dENoZWNrZXI6OnNldENsaWVudChjb25zdCBXS1Rl
eHRDaGVja2VyQ2xpZW50KiBjbGllbnQpCit7CisgICAgbV9jbGllbnQuaW5pdGlhbGl6ZShjbGll
bnQpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVTdGF0ZUZvckFsbFdlYlByb2Nlc3NlcygpCit7
CisgICAgY29uc3QgVmVjdG9yPFdlYkNvbnRleHQqPiYgY29udGV4dHMgPSBXZWJDb250ZXh0Ojph
bGxDb250ZXh0cygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29udGV4dHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgV2ViUHJvY2Vzc1Byb3h5KiB3ZWJQcm9jZXNzID0gY29udGV4dHNb
aV0tPnByb2Nlc3MoKTsKKyAgICAgICAgaWYgKCF3ZWJQcm9jZXNzKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIHdlYlByb2Nlc3MtPnVwZGF0ZVRleHRDaGVja2VyU3RhdGUoKTsKKyAg
ICB9Cit9CisKK3ZvaWQgV2ViVGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCit7CisgICAgVGV4dENoZWNrZXI6OmNvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChlbmFibGVkKTsKKyAgICB1cGRh
dGVTdGF0ZUZvckFsbFdlYlByb2Nlc3NlcygpOworfQorCit2b2lkIFdlYlRleHRDaGVja2VyOjpn
cmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBU
ZXh0Q2hlY2tlcjo6Z3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChlbmFibGVkKTsK
KyAgICB1cGRhdGVTdGF0ZUZvckFsbFdlYlByb2Nlc3NlcygpOworfQorCit2b2lkIFdlYlRleHRD
aGVja2VyOjpjaGVja1NwZWxsaW5nKGNvbnN0IFdlYlBhZ2VQcm94eSogcGFnZSwgYm9vbCBzdGFy
dEJlZm9yZVNlbGVjdGlvbikKK3sKKyAgICBwYWdlLT5hZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmco
c3RhcnRCZWZvcmVTZWxlY3Rpb24pOworfQorCit2b2lkIFdlYlRleHRDaGVja2VyOjpjaGFuZ2VT
cGVsbGluZ1RvV29yZChjb25zdCBXZWJQYWdlUHJveHkqIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGV4
dCkKK3sKKyAgICBwYWdlLT5jaGFuZ2VTcGVsbGluZ1RvV29yZCh0ZXh0KTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
VGV4dENoZWNrZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJUZXh0Q2hlY2tlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYzU3NGMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVGV4dENoZWNrZXIuaApAQCAtMCww
ICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJUZXh0Q2hlY2tlcl9oCisjZGVmaW5l
IFdlYlRleHRDaGVja2VyX2gKKworI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUgIldL
VGV4dENoZWNrZXIuaCIKKyNpbmNsdWRlICJXZWJUZXh0Q2hlY2tlckNsaWVudC5oIgorI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdl
UHJveHk7CisKK2NsYXNzIFdlYlRleHRDaGVja2VyIDogcHVibGljIEFQSU9iamVjdCB7CitwdWJs
aWM6CisgICAgc3RhdGljIGNvbnN0IFR5cGUgQVBJVHlwZSA9IFR5cGVUZXh0Q2hlY2tlcjsKKwor
ICAgIHN0YXRpYyBXZWJUZXh0Q2hlY2tlciogc2hhcmVkKCk7CisKKyAgICB2b2lkIHNldENsaWVu
dChjb25zdCBXS1RleHRDaGVja2VyQ2xpZW50Kik7CisgICAgV2ViVGV4dENoZWNrZXJDbGllbnQm
IGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CisKKyAgICB2b2lkIGNvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sKTsKKyAgICB2b2lkIGdyYW1tYXJDaGVj
a2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCk7CisKKyAgICB2b2lkIGNoZWNrU3BlbGxpbmco
Y29uc3QgV2ViUGFnZVByb3h5KiwgYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbik7CisgICAgdm9p
ZCBjaGFuZ2VTcGVsbGluZ1RvV29yZChjb25zdCBXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcm
KTsKKworcHJpdmF0ZToKKyAgICBXZWJUZXh0Q2hlY2tlcigpOworCisgICAgdmlydHVhbCBUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBBUElUeXBlOyB9CisKKyAgICBXZWJUZXh0Q2hlY2tlckNs
aWVudCBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
V2ViVGV4dENoZWNrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlRleHRDaGVja2VyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJUZXh0
Q2hlY2tlckNsaWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZl
NTJjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJUZXh0
Q2hlY2tlckNsaWVudC5jcHAKQEAgLTAsMCArMSwxNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVGV4dENoZWNrZXJDbGllbnQuaCIKKworI2luY2x1
ZGUgIkltbXV0YWJsZUFycmF5LmgiCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAi
V0tTaGFyZWRBUElDYXN0LmgiCisjaW5jbHVkZSAiV2ViR3JhbW1hckRldGFpbC5oIgorI2luY2x1
ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworYm9vbCBXZWJUZXh0Q2hlY2tlckNsaWVudDo6Y29udGludW91
c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCkKK3sKKyAgICBpZiAoIW1fY2xpZW50LmNvbnRpbnVvdXNT
cGVsbENoZWNraW5nQWxsb3dlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IG1fY2xpZW50LmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZChtX2NsaWVudC5jbGllbnRJ
bmZvKTsKK30KKworYm9vbCBXZWJUZXh0Q2hlY2tlckNsaWVudDo6Y29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKCkKK3sKKyAgICBpZiAoIW1fY2xpZW50LmNvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1fY2xpZW50
LmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChtX2NsaWVudC5jbGllbnRJbmZvKTsKK30K
Kwordm9pZCBXZWJUZXh0Q2hlY2tlckNsaWVudDo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAoIW1fY2xpZW50LnNldENvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQuc2V0
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGVuYWJsZWQsIG1fY2xpZW50LmNsaWVudElu
Zm8pOworfQorCitib29sIFdlYlRleHRDaGVja2VyQ2xpZW50OjpncmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKCkKK3sKKyAgICBpZiAoIW1fY2xpZW50LmdyYW1tYXJDaGVja2luZ0VuYWJsZWQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBtX2NsaWVudC5ncmFtbWFyQ2hlY2tpbmdF
bmFibGVkKG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCit2b2lkIFdlYlRleHRDaGVja2VyQ2xp
ZW50OjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAo
IW1fY2xpZW50LnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fY2xpZW50LnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoZW5hYmxlZCwgbV9jbGllbnQu
Y2xpZW50SW5mbyk7Cit9CisKK3VpbnQ2NF90IFdlYlRleHRDaGVja2VyQ2xpZW50Ojp1bmlxdWVT
cGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSogcGFnZSkKK3sKKyAgICBpZiAoIW1fY2xpZW50
LnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IG1fY2xpZW50LnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcodG9BUEkocGFnZSksIG1fY2xpZW50LmNs
aWVudEluZm8pOworfQorCit2b2lkIFdlYlRleHRDaGVja2VyQ2xpZW50OjpjbG9zZVNwZWxsRG9j
dW1lbnRXaXRoVGFnKHVpbnQ2NF90IHRhZykKK3sKKyAgICBpZiAoIW1fY2xpZW50LmNsb3NlU3Bl
bGxEb2N1bWVudFdpdGhUYWcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xpZW50LmNsb3Nl
U3BlbGxEb2N1bWVudFdpdGhUYWcodGFnLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKK30KKwordm9p
ZCBXZWJUZXh0Q2hlY2tlckNsaWVudDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHVpbnQ2NF90IHRh
ZywgY29uc3QgU3RyaW5nJiB0ZXh0LCBpbnQzMl90JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQz
Ml90JiBtaXNzcGVsbGluZ0xlbmd0aCkKK3sKKyAgICBpZiAoIW1fY2xpZW50LmNoZWNrU3BlbGxp
bmdPZlN0cmluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQuY2hlY2tTcGVsbGlu
Z09mU3RyaW5nKHRhZywgdG9BUEkodGV4dC5pbXBsKCkpLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwg
Jm1pc3NwZWxsaW5nTGVuZ3RoLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKK30KKwordm9pZCBXZWJU
ZXh0Q2hlY2tlckNsaWVudDo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcodWludDY0X3QgdGFnLCBjb25z
dCBTdHJpbmcmIHRleHQsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRl
dGFpbHMsIGludDMyX3QmIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCYgYmFkR3JhbW1hckxl
bmd0aCkKK3sKKyAgICBpZiAoIW1fY2xpZW50LmNoZWNrR3JhbW1hck9mU3RyaW5nKQorICAgICAg
ICByZXR1cm47CisKKyAgICBXS0FycmF5UmVmIHdrR3JhbW1hckRldGFpbHNSZWYgPSAwOworICAg
IG1fY2xpZW50LmNoZWNrR3JhbW1hck9mU3RyaW5nKHRhZywgdG9BUEkodGV4dC5pbXBsKCkpLCAm
d2tHcmFtbWFyRGV0YWlsc1JlZiwgJmJhZEdyYW1tYXJMb2NhdGlvbiwgJmJhZEdyYW1tYXJMZW5n
dGgsIG1fY2xpZW50LmNsaWVudEluZm8pOworCisgICAgUmVmUHRyPEltbXV0YWJsZUFycmF5PiB3
a0dyYW1tYXJEZXRhaWxzID0gYWRvcHRSZWYodG9JbXBsKHdrR3JhbW1hckRldGFpbHNSZWYpKTsK
KyAgICBzaXplX3QgbnVtR3JhbW1hckRldGFpbHMgPSB3a0dyYW1tYXJEZXRhaWxzLT5zaXplKCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HcmFtbWFyRGV0YWlsczsgKytpKQorICAg
ICAgICBncmFtbWFyRGV0YWlscy5hcHBlbmQod2tHcmFtbWFyRGV0YWlscy0+YXQ8V2ViR3JhbW1h
ckRldGFpbD4oaSktPmdyYW1tYXJEZXRhaWwoKSk7Cit9CisKK2Jvb2wgV2ViVGV4dENoZWNrZXJD
bGllbnQ6OnNwZWxsaW5nVUlJc1Nob3dpbmcoKQoreworICAgIGlmICghbV9jbGllbnQuc3BlbGxp
bmdVSUlzU2hvd2luZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1fY2xp
ZW50LnNwZWxsaW5nVUlJc1Nob3dpbmcobV9jbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK3ZvaWQg
V2ViVGV4dENoZWNrZXJDbGllbnQ6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKQoreworICAg
IGlmICghbV9jbGllbnQudG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZykKKyAgICAgICAgcmV0dXJu
OworCisgICAgcmV0dXJuIG1fY2xpZW50LnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcobV9jbGll
bnQuY2xpZW50SW5mbyk7Cit9CisKK3ZvaWQgV2ViVGV4dENoZWNrZXJDbGllbnQ6OnVwZGF0ZVNw
ZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQodWludDY0X3QgdGFnLCBjb25zdCBTdHJpbmcmIG1p
c3NwZWxsZWRXb3JkKQoreworICAgIGlmICghbV9jbGllbnQudXBkYXRlU3BlbGxpbmdVSVdpdGhN
aXNzcGVsbGVkV29yZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQudXBkYXRlU3Bl
bGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCh0YWcsIHRvQVBJKG1pc3NwZWxsZWRXb3JkLmltcGwo
KSksIG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCit2b2lkIFdlYlRleHRDaGVja2VyQ2xpZW50
Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcodWludDY0X3QgdGFnLCBjb25zdCBT
dHJpbmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmIGdy
YW1tYXJEZXRhaWwpCit7CisgICAgaWYgKCFtX2NsaWVudC51cGRhdGVTcGVsbGluZ1VJV2l0aEdy
YW1tYXJTdHJpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xpZW50LnVwZGF0ZVNwZWxs
aW5nVUlXaXRoR3JhbW1hclN0cmluZyh0YWcsIHRvQVBJKGJhZEdyYW1tYXJQaHJhc2UuaW1wbCgp
KSwgdG9BUEkoZ3JhbW1hckRldGFpbCksIG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCit2b2lk
IFdlYlRleHRDaGVja2VyQ2xpZW50OjpndWVzc2VzRm9yV29yZCh1aW50NjRfdCB0YWcsIGNvbnN0
IFN0cmluZyYgd29yZCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit7CisgICAgaWYgKCFtX2Ns
aWVudC5ndWVzc2VzRm9yV29yZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEltbXV0
YWJsZUFycmF5PiB3a0d1ZXNzZXMgPSBhZG9wdFJlZih0b0ltcGwobV9jbGllbnQuZ3Vlc3Nlc0Zv
cldvcmQodGFnLCB0b0FQSSh3b3JkLmltcGwoKSksIG1fY2xpZW50LmNsaWVudEluZm8pKSk7Cisg
ICAgc2l6ZV90IG51bUd1ZXNzZXMgPSB3a0d1ZXNzZXMtPnNpemUoKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG51bUd1ZXNzZXM7ICsraSkKKyAgICAgICAgZ3Vlc3Nlcy5hcHBlbmQod2tH
dWVzc2VzLT5hdDxXZWJTdHJpbmc+KGkpLT5zdHJpbmcoKSk7Cit9CisKK3ZvaWQgV2ViVGV4dENo
ZWNrZXJDbGllbnQ6OmxlYXJuV29yZCh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYgd29yZCkK
K3sKKyAgICBpZiAoIW1fY2xpZW50LmxlYXJuV29yZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9jbGllbnQubGVhcm5Xb3JkKHRhZywgdG9BUEkod29yZC5pbXBsKCkpLCBtX2NsaWVudC5jbGll
bnRJbmZvKTsKK30KKwordm9pZCBXZWJUZXh0Q2hlY2tlckNsaWVudDo6aWdub3JlV29yZCh1aW50
NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYgd29yZCkKK3sKKyAgICBpZiAoIW1fY2xpZW50Lmlnbm9y
ZVdvcmQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xpZW50Lmlnbm9yZVdvcmQodGFnLCB0
b0FQSSh3b3JkLmltcGwoKSksIG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJUZXh0
Q2hlY2tlckNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlRleHRDaGVja2Vy
Q2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY1MDAzZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJUZXh0Q2hlY2tlckNs
aWVudC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlRleHRDaGVj
a2VyQ2xpZW50X2gKKyNkZWZpbmUgV2ViVGV4dENoZWNrZXJDbGllbnRfaAorCisjaW5jbHVkZSAi
QVBJQ2xpZW50LmgiCisjaW5jbHVkZSAiV0tUZXh0Q2hlY2tlci5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvVGV4dENoZWNrZXJDbGllbnQuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VQ
cm94eTsKKworY2xhc3MgV2ViVGV4dENoZWNrZXJDbGllbnQgOiBwdWJsaWMgQVBJQ2xpZW50PFdL
VGV4dENoZWNrZXJDbGllbnQsIGtXS1RleHRDaGVja2VyQ2xpZW50Q3VycmVudFZlcnNpb24+IHsK
K3B1YmxpYzoKKyAgICBib29sIGNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpOworICAg
IGJvb2wgY29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CisgICAgdm9pZCBzZXRDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCk7CisgICAgYm9vbCBncmFtbWFyQ2hlY2tp
bmdFbmFibGVkKCk7CisgICAgdm9pZCBzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wpOwor
ICAgIHVpbnQ2NF90IHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5Kik7CisgICAg
dm9pZCBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHVpbnQ2NF90KTsKKyAgICB2b2lkIGNoZWNr
U3BlbGxpbmdPZlN0cmluZyh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYgdGV4dCwgaW50MzJf
dCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCYgbWlzc3BlbGxpbmdMZW5ndGgpOworICAg
IHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcodWludDY0X3QgdGFnLCBjb25zdCBTdHJpbmcmIHRl
eHQsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3QmIGJhZEdyYW1tYXJM
b2NhdGlvbiwgaW50MzJfdCYgYmFkR3JhbW1hckxlbmd0aCk7CisgICAgYm9vbCBzcGVsbGluZ1VJ
SXNTaG93aW5nKCk7CisgICAgdm9pZCB0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKCk7CisgICAg
dm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHVpbnQ2NF90IHRhZywgY29u
c3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCk7CisgICAgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0
aEdyYW1tYXJTdHJpbmcodWludDY0X3QgdGFnLCBjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJh
c2UsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKTsKKyAgICB2b2lkIGd1ZXNzZXNGb3JX
b3JkKHVpbnQ2NF90IHRhZywgY29uc3QgU3RyaW5nJiB3b3JkLCBWZWN0b3I8U3RyaW5nPiYgZ3Vl
c3Nlcyk7CisgICAgdm9pZCBsZWFybldvcmQodWludDY0X3QgdGFnLCBjb25zdCBTdHJpbmcmIHdv
cmQpOworICAgIHZvaWQgaWdub3JlV29yZCh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYgd29y
ZCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlRleHRDaGVj
a2VyQ2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2Vi
R3JhbW1hckRldGFpbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYkdyYW1t
YXJEZXRhaWwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGY1MjhjLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViR3JhbW1hckRldGFpbC5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkdyYW1tYXJEZXRhaWwuaCIKLQotI2luY2x1ZGUgIklt
bXV0YWJsZUFycmF5LmgiCi0jaW5jbHVkZSAiV0tHcmFtbWFyRGV0YWlsLmgiCi0jaW5jbHVkZSAi
V2ViU3RyaW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1QYXNzUmVmUHRyPFdlYkdyYW1t
YXJEZXRhaWw+IFdlYkdyYW1tYXJEZXRhaWw6OmNyZWF0ZShpbnQgbG9jYXRpb24sIGludCBsZW5n
dGgsIEltbXV0YWJsZUFycmF5KiBndWVzc2VzLCBjb25zdCBTdHJpbmcmIHVzZXJEZXNjcmlwdGlv
bikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdyYW1tYXJEZXRhaWwobG9jYXRpb24s
IGxlbmd0aCwgZ3Vlc3NlcywgdXNlckRlc2NyaXB0aW9uKSk7Ci19Ci0KLVBhc3NSZWZQdHI8V2Vi
R3JhbW1hckRldGFpbD4gV2ViR3JhbW1hckRldGFpbDo6Y3JlYXRlKGNvbnN0IFdlYkNvcmU6Okdy
YW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBX
ZWJHcmFtbWFyRGV0YWlsKGdyYW1tYXJEZXRhaWwpKTsKLX0KLQotV2ViR3JhbW1hckRldGFpbDo6
V2ViR3JhbW1hckRldGFpbChpbnQgbG9jYXRpb24sIGludCBsZW5ndGgsIEltbXV0YWJsZUFycmF5
KiBndWVzc2VzLCBjb25zdCBTdHJpbmcmIHVzZXJEZXNjcmlwdGlvbikKLXsKLSAgICBtX2dyYW1t
YXJEZXRhaWwubG9jYXRpb24gPSBsb2NhdGlvbjsKLSAgICBtX2dyYW1tYXJEZXRhaWwubGVuZ3Ro
ID0gbGVuZ3RoOwotCi0gICAgc2l6ZV90IG51bUd1ZXNzZXMgPSBndWVzc2VzLT5zaXplKCk7Ci0g
ICAgbV9ncmFtbWFyRGV0YWlsLmd1ZXNzZXMucmVzZXJ2ZUNhcGFjaXR5KG51bUd1ZXNzZXMpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtR3Vlc3NlczsgKytpKQotICAgICAgICBtX2dy
YW1tYXJEZXRhaWwuZ3Vlc3Nlcy51bmNoZWNrZWRBcHBlbmQoZ3Vlc3Nlcy0+YXQ8V2ViU3RyaW5n
PihpKS0+c3RyaW5nKCkpOwotCi0gICAgbV9ncmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbiA9
IHVzZXJEZXNjcmlwdGlvbjsKLX0KLQotUGFzc1JlZlB0cjxJbW11dGFibGVBcnJheT4gV2ViR3Jh
bW1hckRldGFpbDo6Z3Vlc3NlcygpIGNvbnN0Ci17Ci0gICAgc2l6ZV90IG51bUd1ZXNzZXMgPSBt
X2dyYW1tYXJEZXRhaWwuZ3Vlc3Nlcy5zaXplKCk7Ci0gICAgVmVjdG9yPFJlZlB0cjxBUElPYmpl
Y3Q+ID4gd2tHdWVzc2VzKG51bUd1ZXNzZXMpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1HdWVzc2VzOyArK2kpCi0gICAgICAgIHdrR3Vlc3Nlc1tpXSA9IFdlYlN0cmluZzo6Y3Jl
YXRlKG1fZ3JhbW1hckRldGFpbC5ndWVzc2VzW2ldKTsKLSAgICByZXR1cm4gSW1tdXRhYmxlQXJy
YXk6OmFkb3B0KHdrR3Vlc3Nlcyk7Ci19Ci0KLVdlYkdyYW1tYXJEZXRhaWw6OldlYkdyYW1tYXJE
ZXRhaWwoY29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkKLSAgICA6
IG1fZ3JhbW1hckRldGFpbChncmFtbWFyRGV0YWlsKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViR3JhbW1h
ckRldGFpbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJHcmFtbWFyRGV0YWls
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmNzliNWMuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJHcmFtbWFyRGV0YWlsLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJHcmFtbWFyRGV0
YWlsX2gKLSNkZWZpbmUgV2ViR3JhbW1hckRldGFpbF9oCi0KLSNpbmNsdWRlICJBUElPYmplY3Qu
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL1RleHRDaGVja2VyQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotY2xhc3MgSW1tdXRhYmxlQXJyYXk7Ci0KLWNsYXNzIFdlYkdyYW1tYXJEZXRhaWwg
OiBwdWJsaWMgQVBJT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgVHlwZSBBUElU
eXBlID0gVHlwZUdyYW1tYXJEZXRhaWw7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR3JhbW1h
ckRldGFpbD4gY3JlYXRlKGludCBsb2NhdGlvbiwgaW50IGxlbmd0aCwgSW1tdXRhYmxlQXJyYXkq
IGd1ZXNzZXMsIGNvbnN0IFN0cmluZyYgdXNlckRlc2NyaXB0aW9uKTsKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxXZWJHcmFtbWFyRGV0YWlsPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6R3JhbW1hckRl
dGFpbCYpOwotCi0gICAgaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ncmFtbWFyRGV0
YWlsLmxvY2F0aW9uOyB9Ci0gICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhbW1h
ckRldGFpbC5sZW5ndGg7IH0KLSAgICBQYXNzUmVmUHRyPEltbXV0YWJsZUFycmF5PiBndWVzc2Vz
KCkgY29uc3Q7Ci0gICAgY29uc3QgU3RyaW5nJiB1c2VyRGVzY3JpcHRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2dyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uOyB9Ci0KLSAgICBjb25zdCBXZWJD
b3JlOjpHcmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0YWlsKCkgeyByZXR1cm4gbV9ncmFtbWFyRGV0
YWlsOyB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViR3JhbW1hckRldGFpbChpbnQgbG9jYXRpb24sIGlu
dCBsZW5ndGgsIEltbXV0YWJsZUFycmF5KiBndWVzc2VzLCBjb25zdCBTdHJpbmcmIHVzZXJEZXNj
cmlwdGlvbik7Ci0gICAgV2ViR3JhbW1hckRldGFpbChjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0
YWlsJik7Ci0KLSAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIEFQSVR5cGU7
IH0KLQotICAgIFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwgbV9ncmFtbWFyRGV0YWlsOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJHcmFtbWFyRGV0YWlsX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXIuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tlci5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NjE4NDQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tlci5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IldlYlRleHRDaGVja2VyLmgiCi0KLSNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgotI2luY2x1ZGUg
IldLQVBJQ2FzdC5oIgotI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1XZWJUZXh0Q2hlY2tlciogV2ViVGV4dENo
ZWNrZXI6OnNoYXJlZCgpCi17Ci0gICAgc3RhdGljIFdlYlRleHRDaGVja2VyKiB0ZXh0Q2hlY2tl
ciA9IGFkb3B0UmVmKG5ldyBXZWJUZXh0Q2hlY2tlcikubGVha1JlZigpOwotICAgIHJldHVybiB0
ZXh0Q2hlY2tlcjsKLX0KLQotV2ViVGV4dENoZWNrZXI6OldlYlRleHRDaGVja2VyKCkKLXsKLX0K
LQotdm9pZCBXZWJUZXh0Q2hlY2tlcjo6c2V0Q2xpZW50KGNvbnN0IFdLVGV4dENoZWNrZXJDbGll
bnQqIGNsaWVudCkKLXsKLSAgICBtX2NsaWVudC5pbml0aWFsaXplKGNsaWVudCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHVwZGF0ZVN0YXRlRm9yQWxsV2ViUHJvY2Vzc2VzKCkKLXsKLSAgICBjb25zdCBW
ZWN0b3I8V2ViQ29udGV4dCo+JiBjb250ZXh0cyA9IFdlYkNvbnRleHQ6OmFsbENvbnRleHRzKCk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb250ZXh0cy5zaXplKCk7ICsraSkgewotICAg
ICAgICBXZWJQcm9jZXNzUHJveHkqIHdlYlByb2Nlc3MgPSBjb250ZXh0c1tpXS0+cHJvY2Vzcygp
OwotICAgICAgICBpZiAoIXdlYlByb2Nlc3MpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgd2ViUHJvY2Vzcy0+dXBkYXRlVGV4dENoZWNrZXJTdGF0ZSgpOwotICAgIH0KLX0KLQotdm9p
ZCBXZWJUZXh0Q2hlY2tlcjo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFu
Z2VkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBUZXh0Q2hlY2tlcjo6Y29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJsZWQpOwotICAgIHVwZGF0ZVN0YXRlRm9yQWxs
V2ViUHJvY2Vzc2VzKCk7Ci19Ci0KLXZvaWQgV2ViVGV4dENoZWNrZXI6OmdyYW1tYXJDaGVja2lu
Z0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCBlbmFibGVkKQotewotICAgIFRleHRDaGVja2VyOjpn
cmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJsZWQpOwotICAgIHVwZGF0ZVN0
YXRlRm9yQWxsV2ViUHJvY2Vzc2VzKCk7Ci19Ci0KLXZvaWQgV2ViVGV4dENoZWNrZXI6OmNoZWNr
U3BlbGxpbmcoY29uc3QgV2ViUGFnZVByb3h5KiBwYWdlLCBib29sIHN0YXJ0QmVmb3JlU2VsZWN0
aW9uKQotewotICAgIHBhZ2UtPmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhzdGFydEJlZm9yZVNl
bGVjdGlvbik7Ci19Ci0KLXZvaWQgV2ViVGV4dENoZWNrZXI6OmNoYW5nZVNwZWxsaW5nVG9Xb3Jk
KGNvbnN0IFdlYlBhZ2VQcm94eSogcGFnZSwgY29uc3QgU3RyaW5nJiB0ZXh0KQotewotICAgIHBh
Z2UtPmNoYW5nZVNwZWxsaW5nVG9Xb3JkKHRleHQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNr
ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXIuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFjNTc0Yy4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJUZXh0Q2hlY2tlcl9oCi0jZGVm
aW5lIFdlYlRleHRDaGVja2VyX2gKLQotI2luY2x1ZGUgIkFQSU9iamVjdC5oIgotI2luY2x1ZGUg
IldLVGV4dENoZWNrZXIuaCIKLSNpbmNsdWRlICJXZWJUZXh0Q2hlY2tlckNsaWVudC5oIgotI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQ
YWdlUHJveHk7Ci0KLWNsYXNzIFdlYlRleHRDaGVja2VyIDogcHVibGljIEFQSU9iamVjdCB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IFR5cGUgQVBJVHlwZSA9IFR5cGVUZXh0Q2hlY2tlcjsK
LQotICAgIHN0YXRpYyBXZWJUZXh0Q2hlY2tlciogc2hhcmVkKCk7Ci0KLSAgICB2b2lkIHNldENs
aWVudChjb25zdCBXS1RleHRDaGVja2VyQ2xpZW50Kik7Ci0gICAgV2ViVGV4dENoZWNrZXJDbGll
bnQmIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9Ci0KLSAgICB2b2lkIGNvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sKTsKLSAgICB2b2lkIGdyYW1tYXJD
aGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCk7Ci0KLSAgICB2b2lkIGNoZWNrU3BlbGxp
bmcoY29uc3QgV2ViUGFnZVByb3h5KiwgYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbik7Ci0gICAg
dm9pZCBjaGFuZ2VTcGVsbGluZ1RvV29yZChjb25zdCBXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJp
bmcmKTsKLQotcHJpdmF0ZToKLSAgICBXZWJUZXh0Q2hlY2tlcigpOwotCi0gICAgdmlydHVhbCBU
eXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBBUElUeXBlOyB9Ci0KLSAgICBXZWJUZXh0Q2hlY2tl
ckNsaWVudCBtX2NsaWVudDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYg
Ly8gV2ViVGV4dENoZWNrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3dpbi9XZWJUZXh0Q2hlY2tlckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
d2luL1dlYlRleHRDaGVja2VyQ2xpZW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggODZlNTJjNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dl
YlRleHRDaGVja2VyQ2xpZW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3NSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlRleHRDaGVja2Vy
Q2xpZW50LmgiCi0KLSNpbmNsdWRlICJJbW11dGFibGVBcnJheS5oIgotI2luY2x1ZGUgIldLQVBJ
Q2FzdC5oIgotI2luY2x1ZGUgIldLU2hhcmVkQVBJQ2FzdC5oIgotI2luY2x1ZGUgIldlYkdyYW1t
YXJEZXRhaWwuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWJvb2wgV2ViVGV4dENoZWNr
ZXJDbGllbnQ6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpCi17Ci0gICAgaWYgKCFt
X2NsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiBtX2NsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93
ZWQobV9jbGllbnQuY2xpZW50SW5mbyk7Ci19Ci0KLWJvb2wgV2ViVGV4dENoZWNrZXJDbGllbnQ6
OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCi17Ci0gICAgaWYgKCFtX2NsaWVudC5j
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHJldHVybiBtX2NsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQobV9jbGll
bnQuY2xpZW50SW5mbyk7Ci19Ci0KLXZvaWQgV2ViVGV4dENoZWNrZXJDbGllbnQ6OnNldENvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKCFtX2Ns
aWVudC5zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fY2xpZW50LnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChlbmFibGVk
LCBtX2NsaWVudC5jbGllbnRJbmZvKTsKLX0KLQotYm9vbCBXZWJUZXh0Q2hlY2tlckNsaWVudDo6
Z3JhbW1hckNoZWNraW5nRW5hYmxlZCgpCi17Ci0gICAgaWYgKCFtX2NsaWVudC5ncmFtbWFyQ2hl
Y2tpbmdFbmFibGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbV9jbGll
bnQuZ3JhbW1hckNoZWNraW5nRW5hYmxlZChtX2NsaWVudC5jbGllbnRJbmZvKTsKLX0KLQotdm9p
ZCBXZWJUZXh0Q2hlY2tlckNsaWVudDo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sIGVu
YWJsZWQpCi17Ci0gICAgaWYgKCFtX2NsaWVudC5zZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NsaWVudC5zZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
KGVuYWJsZWQsIG1fY2xpZW50LmNsaWVudEluZm8pOwotfQotCi11aW50NjRfdCBXZWJUZXh0Q2hl
Y2tlckNsaWVudDo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqIHBhZ2UpCi17
Ci0gICAgaWYgKCFtX2NsaWVudC51bmlxdWVTcGVsbERvY3VtZW50VGFnKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIHJldHVybiBtX2NsaWVudC51bmlxdWVTcGVsbERvY3VtZW50VGFnKHRvQVBJ
KHBhZ2UpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKLX0KLQotdm9pZCBXZWJUZXh0Q2hlY2tlckNs
aWVudDo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh1aW50NjRfdCB0YWcpCi17Ci0gICAgaWYg
KCFtX2NsaWVudC5jbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2NsaWVudC5jbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHRhZywgbV9jbGllbnQuY2xp
ZW50SW5mbyk7Ci19Ci0KLXZvaWQgV2ViVGV4dENoZWNrZXJDbGllbnQ6OmNoZWNrU3BlbGxpbmdP
ZlN0cmluZyh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYgdGV4dCwgaW50MzJfdCYgbWlzc3Bl
bGxpbmdMb2NhdGlvbiwgaW50MzJfdCYgbWlzc3BlbGxpbmdMZW5ndGgpCi17Ci0gICAgaWYgKCFt
X2NsaWVudC5jaGVja1NwZWxsaW5nT2ZTdHJpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
Y2xpZW50LmNoZWNrU3BlbGxpbmdPZlN0cmluZyh0YWcsIHRvQVBJKHRleHQuaW1wbCgpKSwgJm1p
c3NwZWxsaW5nTG9jYXRpb24sICZtaXNzcGVsbGluZ0xlbmd0aCwgbV9jbGllbnQuY2xpZW50SW5m
byk7Ci19Ci0KLXZvaWQgV2ViVGV4dENoZWNrZXJDbGllbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5n
KHVpbnQ2NF90IHRhZywgY29uc3QgU3RyaW5nJiB0ZXh0LCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1h
ckRldGFpbD4mIGdyYW1tYXJEZXRhaWxzLCBpbnQzMl90JiBiYWRHcmFtbWFyTG9jYXRpb24sIGlu
dDMyX3QmIGJhZEdyYW1tYXJMZW5ndGgpCi17Ci0gICAgaWYgKCFtX2NsaWVudC5jaGVja0dyYW1t
YXJPZlN0cmluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV0tBcnJheVJlZiB3a0dyYW1tYXJE
ZXRhaWxzUmVmID0gMDsKLSAgICBtX2NsaWVudC5jaGVja0dyYW1tYXJPZlN0cmluZyh0YWcsIHRv
QVBJKHRleHQuaW1wbCgpKSwgJndrR3JhbW1hckRldGFpbHNSZWYsICZiYWRHcmFtbWFyTG9jYXRp
b24sICZiYWRHcmFtbWFyTGVuZ3RoLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKLQotICAgIFJlZlB0
cjxJbW11dGFibGVBcnJheT4gd2tHcmFtbWFyRGV0YWlscyA9IGFkb3B0UmVmKHRvSW1wbCh3a0dy
YW1tYXJEZXRhaWxzUmVmKSk7Ci0gICAgc2l6ZV90IG51bUdyYW1tYXJEZXRhaWxzID0gd2tHcmFt
bWFyRGV0YWlscy0+c2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtR3JhbW1h
ckRldGFpbHM7ICsraSkKLSAgICAgICAgZ3JhbW1hckRldGFpbHMuYXBwZW5kKHdrR3JhbW1hckRl
dGFpbHMtPmF0PFdlYkdyYW1tYXJEZXRhaWw+KGkpLT5ncmFtbWFyRGV0YWlsKCkpOwotfQotCi1i
b29sIFdlYlRleHRDaGVja2VyQ2xpZW50OjpzcGVsbGluZ1VJSXNTaG93aW5nKCkKLXsKLSAgICBp
ZiAoIW1fY2xpZW50LnNwZWxsaW5nVUlJc1Nob3dpbmcpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiBtX2NsaWVudC5zcGVsbGluZ1VJSXNTaG93aW5nKG1fY2xpZW50LmNsaWVu
dEluZm8pOwotfQotCi12b2lkIFdlYlRleHRDaGVja2VyQ2xpZW50Ojp0b2dnbGVTcGVsbGluZ1VJ
SXNTaG93aW5nKCkKLXsKLSAgICBpZiAoIW1fY2xpZW50LnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dp
bmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJldHVybiBtX2NsaWVudC50b2dnbGVTcGVsbGlu
Z1VJSXNTaG93aW5nKG1fY2xpZW50LmNsaWVudEluZm8pOwotfQotCi12b2lkIFdlYlRleHRDaGVj
a2VyQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHVpbnQ2NF90IHRh
ZywgY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCkKLXsKLSAgICBpZiAoIW1fY2xpZW50LnVw
ZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fY2xpZW50LnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQodGFnLCB0b0FQSSht
aXNzcGVsbGVkV29yZC5pbXBsKCkpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKLX0KLQotdm9pZCBX
ZWJUZXh0Q2hlY2tlckNsaWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKHVp
bnQ2NF90IHRhZywgY29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBXZWJDb3Jl
OjpHcmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0YWlsKQotewotICAgIGlmICghbV9jbGllbnQudXBk
YXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2NsaWVudC51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcodGFnLCB0b0FQSShiYWRH
cmFtbWFyUGhyYXNlLmltcGwoKSksIHRvQVBJKGdyYW1tYXJEZXRhaWwpLCBtX2NsaWVudC5jbGll
bnRJbmZvKTsKLX0KLQotdm9pZCBXZWJUZXh0Q2hlY2tlckNsaWVudDo6Z3Vlc3Nlc0ZvcldvcmQo
dWludDY0X3QgdGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2Vz
KQotewotICAgIGlmICghbV9jbGllbnQuZ3Vlc3Nlc0ZvcldvcmQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFJlZlB0cjxJbW11dGFibGVBcnJheT4gd2tHdWVzc2VzID0gYWRvcHRSZWYodG9JbXBs
KG1fY2xpZW50Lmd1ZXNzZXNGb3JXb3JkKHRhZywgdG9BUEkod29yZC5pbXBsKCkpLCBtX2NsaWVu
dC5jbGllbnRJbmZvKSkpOwotICAgIHNpemVfdCBudW1HdWVzc2VzID0gd2tHdWVzc2VzLT5zaXpl
KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HdWVzc2VzOyArK2kpCi0gICAgICAg
IGd1ZXNzZXMuYXBwZW5kKHdrR3Vlc3Nlcy0+YXQ8V2ViU3RyaW5nPihpKS0+c3RyaW5nKCkpOwot
fQotCi12b2lkIFdlYlRleHRDaGVja2VyQ2xpZW50OjpsZWFybldvcmQodWludDY0X3QgdGFnLCBj
b25zdCBTdHJpbmcmIHdvcmQpCi17Ci0gICAgaWYgKCFtX2NsaWVudC5sZWFybldvcmQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fY2xpZW50LmxlYXJuV29yZCh0YWcsIHRvQVBJKHdvcmQuaW1w
bCgpKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7Ci19Ci0KLXZvaWQgV2ViVGV4dENoZWNrZXJDbGll
bnQ6Omlnbm9yZVdvcmQodWludDY0X3QgdGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCi17Ci0gICAg
aWYgKCFtX2NsaWVudC5pZ25vcmVXb3JkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NsaWVu
dC5pZ25vcmVXb3JkKHRhZywgdG9BUEkod29yZC5pbXBsKCkpLCBtX2NsaWVudC5jbGllbnRJbmZv
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyQ2xpZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGI2NTAwM2QuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3dpbi9XZWJUZXh0Q2hlY2tlckNsaWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViVGV4dENoZWNrZXJDbGllbnRfaAotI2RlZmluZSBX
ZWJUZXh0Q2hlY2tlckNsaWVudF9oCi0KLSNpbmNsdWRlICJBUElDbGllbnQuaCIKLSNpbmNsdWRl
ICJXS1RleHRDaGVja2VyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0Q2hlY2tlckNsaWVudC5o
PgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZVByb3h5OwotCi1jbGFzcyBXZWJUZXh0
Q2hlY2tlckNsaWVudCA6IHB1YmxpYyBBUElDbGllbnQ8V0tUZXh0Q2hlY2tlckNsaWVudCwga1dL
VGV4dENoZWNrZXJDbGllbnRDdXJyZW50VmVyc2lvbj4gewotcHVibGljOgotICAgIGJvb2wgY29u
dGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCk7Ci0gICAgYm9vbCBjb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQoKTsKLSAgICB2b2lkIHNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZChib29sKTsKLSAgICBib29sIGdyYW1tYXJDaGVja2luZ0VuYWJsZWQoKTsKLSAgICB2b2lk
IHNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCk7Ci0gICAgdWludDY0X3QgdW5pcXVlU3Bl
bGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqKTsKLSAgICB2b2lkIGNsb3NlU3BlbGxEb2N1bWVu
dFdpdGhUYWcodWludDY0X3QpOwotICAgIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKHVpbnQ2
NF90IHRhZywgY29uc3QgU3RyaW5nJiB0ZXh0LCBpbnQzMl90JiBtaXNzcGVsbGluZ0xvY2F0aW9u
LCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCk7Ci0gICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0
cmluZyh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9yPFdlYkNvcmU6Okdy
YW1tYXJEZXRhaWw+JiwgaW50MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRH
cmFtbWFyTGVuZ3RoKTsKLSAgICBib29sIHNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKLSAgICB2b2lk
IHRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKLSAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlX
aXRoTWlzc3BlbGxlZFdvcmQodWludDY0X3QgdGFnLCBjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRX
b3JkKTsKLSAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyh1aW50NjRf
dCB0YWcsIGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29uc3QgV2ViQ29yZTo6R3Jh
bW1hckRldGFpbCYpOwotICAgIHZvaWQgZ3Vlc3Nlc0ZvcldvcmQodWludDY0X3QgdGFnLCBjb25z
dCBTdHJpbmcmIHdvcmQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKTsKLSAgICB2b2lkIGxlYXJu
V29yZCh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYgd29yZCk7Ci0gICAgdm9pZCBpZ25vcmVX
b3JkKHVpbnQ2NF90IHRhZywgY29uc3QgU3RyaW5nJiB3b3JkKTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCi0jZW5kaWYgLy8gV2ViVGV4dENoZWNrZXJDbGllbnRfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvd2luL1dlYktpdDIudmNwcm9qIGIvU291cmNlL1dlYktpdDIvd2lu
L1dlYktpdDIudmNwcm9qCmluZGV4IGUwYjA1OTkuLmE1ZDdmZGEgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi93aW4vV2Vi
S2l0Mi52Y3Byb2oKQEAgLTI5MTUsNiArMjkxNSwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcV2ViR3JhbW1hckRldGFpbC5j
cHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJ
UHJvY2Vzc1xXZWJHcmFtbWFyRGV0YWlsLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUK
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xXZWJIaXN0b3J5Q2xpZW50LmNwcCIKIAkJ
CQk+CiAJCQk8L0ZpbGU+CkBAIC0zMDc1LDYgKzMwODMsMjIgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXFdlYlRleHRDaGVja2Vy
LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
VUlQcm9jZXNzXFdlYlRleHRDaGVja2VyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUK
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xXZWJUZXh0Q2hlY2tlckNsaWVudC5jcHAi
CisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJv
Y2Vzc1xXZWJUZXh0Q2hlY2tlckNsaWVudC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxl
CiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcV2ViVUlDbGllbnQuY3BwIgogCQkJCT4K
IAkJCTwvRmlsZT4KQEAgLTMyNDEsNiArMzI2NSwxNCBAQAogCQkJCQkJPgogCQkJCQk8L0ZpbGU+
CiAJCQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xBUElcQ1xXS0dy
YW1tYXJEZXRhaWwuY3BwIgorCQkJCQkJPgorCQkJCQk8L0ZpbGU+CisJCQkJCTxGaWxlCisJCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xBUElcQ1xXS0dyYW1tYXJEZXRhaWwuaCIKKwkJ
CQkJCT4KKwkJCQkJPC9GaWxlPgorCQkJCQk8RmlsZQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxV
SVByb2Nlc3NcQVBJXENcV0tJY29uRGF0YWJhc2UuY3BwIgogCQkJCQkJPgogCQkJCQk8L0ZpbGU+
CkBAIC0zMzYwLDYgKzMzOTIsMTQgQEAKIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNz
XEFQSVxDXFdLUmVzb3VyY2VDYWNoZU1hbmFnZXIuaCIKIAkJCQkJCT4KIAkJCQkJPC9GaWxlPgor
CQkJCQk8RmlsZQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcQVBJXENcV0tUZXh0
Q2hlY2tlci5jcHAiCisJCQkJCQk+CisJCQkJCTwvRmlsZT4KKwkJCQkJPEZpbGUKKwkJCQkJCVJl
bGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXEFQSVxDXFdLVGV4dENoZWNrZXIuaCIKKwkJCQkJCT4K
KwkJCQkJPC9GaWxlPgogCQkJCQk8RmlsdGVyCiAJCQkJCQlOYW1lPSJjZyIKIAkJCQkJCT4KQEAg
LTM0MTIsMjIgKzM0NTIsNiBAQAogCQkJCQkJCT4KIAkJCQkJCTwvRmlsZT4KIAkJCQkJCTxGaWxl
Ci0JCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcQVBJXENcd2luXFdLR3JhbW1hckRl
dGFpbC5jcHAiCi0JCQkJCQkJPgotCQkJCQkJPC9GaWxlPgotCQkJCQkJPEZpbGUKLQkJCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xBUElcQ1x3aW5cV0tHcmFtbWFyRGV0YWlsLmgiCi0J
CQkJCQkJPgotCQkJCQkJPC9GaWxlPgotCQkJCQkJPEZpbGUKLQkJCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXFVJUHJvY2Vzc1xBUElcQ1x3aW5cV0tUZXh0Q2hlY2tlci5jcHAiCi0JCQkJCQkJPgotCQkJ
CQkJPC9GaWxlPgotCQkJCQkJPEZpbGUKLQkJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vz
c1xBUElcQ1x3aW5cV0tUZXh0Q2hlY2tlci5oIgotCQkJCQkJCT4KLQkJCQkJCTwvRmlsZT4KLQkJ
CQkJCTxGaWxlCiAJCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcQVBJXENcd2luXFdL
Vmlldy5jcHAiCiAJCQkJCQkJPgogCQkJCQkJPC9GaWxlPgpAQCAtMzU4MiwxNCArMzYwNiw2IEBA
CiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxV
SVByb2Nlc3Ncd2luXFdlYkdyYW1tYXJEZXRhaWwuY3BwIgotCQkJCQk+Ci0JCQkJPC9GaWxlPgot
CQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXHdpblxXZWJHcmFtbWFy
RGV0YWlsLmgiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxVSVByb2Nlc3Ncd2luXFdlYkluc3BlY3RvclByb3h5V2luLmNwcCIKIAkJCQkJPgog
CQkJCTwvRmlsZT4KQEAgLTM2MTAsMjIgKzM2MjYsNiBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgog
CQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXHdpblxXZWJUZXh0Q2hl
Y2tlci5jcHAiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxVSVByb2Nlc3Ncd2luXFdlYlRleHRDaGVja2VyLmgiCi0JCQkJCT4KLQkJCQk8L0Zp
bGU+Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3Ncd2luXFdlYlRl
eHRDaGVja2VyQ2xpZW50LmNwcCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCQk8RmlsZQotCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1x3aW5cV2ViVGV4dENoZWNrZXJDbGllbnQuaCIK
LQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJ
UHJvY2Vzc1x3aW5cV2ViVW5kb0NsaWVudC5jcHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0MkdlbmVyYXRlZC5tYWtlIGIvU291cmNl
L1dlYktpdDIvd2luL1dlYktpdDJHZW5lcmF0ZWQubWFrZQppbmRleCAyMTc3OTgzLi4yMzU3MGY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0MkdlbmVyYXRlZC5tYWtlCisr
KyBiL1NvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyR2VuZXJhdGVkLm1ha2UKQEAgLTU4LDYgKzU4
LDcgQEAgYWxsOgogICAgIHhjb3B5IC95IC9kICIuLlxVSVByb2Nlc3NcQVBJXENcV0tHZW9sb2Nh
dGlvbk1hbmFnZXIuaCIgIiVDb25maWd1cmF0aW9uQnVpbGREaXIlXGluY2x1ZGVcV2ViS2l0MiIK
ICAgICB4Y29weSAveSAvZCAiLi5cVUlQcm9jZXNzXEFQSVxDXFdLR2VvbG9jYXRpb25QZXJtaXNz
aW9uUmVxdWVzdC5oIiAiJUNvbmZpZ3VyYXRpb25CdWlsZERpciVcaW5jbHVkZVxXZWJLaXQyIgog
ICAgIHhjb3B5IC95IC9kICIuLlxVSVByb2Nlc3NcQVBJXENcV0tHZW9sb2NhdGlvblBvc2l0aW9u
LmgiICIlQ29uZmlndXJhdGlvbkJ1aWxkRGlyJVxpbmNsdWRlXFdlYktpdDIiCisgICAgeGNvcHkg
L3kgL2QgIi4uXFVJUHJvY2Vzc1xBUElcQ1xXS0dyYW1tYXJEZXRhaWwuaCIgIiVDb25maWd1cmF0
aW9uQnVpbGREaXIlXGluY2x1ZGVcV2ViS2l0MiIKICAgICB4Y29weSAveSAvZCAiLi5cVUlQcm9j
ZXNzXEFQSVxDXFdLSW5zcGVjdG9yLmgiICIlQ29uZmlndXJhdGlvbkJ1aWxkRGlyJVxpbmNsdWRl
XFdlYktpdDIiCiAgICAgeGNvcHkgL3kgL2QgIi4uXFVJUHJvY2Vzc1xBUElcQ1xXS0ljb25EYXRh
YmFzZS5oIiAiJUNvbmZpZ3VyYXRpb25CdWlsZERpciVcaW5jbHVkZVxXZWJLaXQyIgogICAgIHhj
b3B5IC95IC9kICIuLlxVSVByb2Nlc3NcQVBJXENcV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmgi
ICIlQ29uZmlndXJhdGlvbkJ1aWxkRGlyJVxpbmNsdWRlXFdlYktpdDIiCkBAIC03NSw5ICs3Niw4
IEBAIGFsbDoKICAgICB4Y29weSAveSAvZCAiLi5cVUlQcm9jZXNzXEFQSVxDXFdLUHJvdGVjdGlv
blNwYWNlLmgiICIlQ29uZmlndXJhdGlvbkJ1aWxkRGlyJVxpbmNsdWRlXFdlYktpdDIiCiAgICAg
eGNvcHkgL3kgL2QgIi4uXFVJUHJvY2Vzc1xBUElcQ1xXS1Byb3RlY3Rpb25TcGFjZVR5cGVzLmgi
ICIlQ29uZmlndXJhdGlvbkJ1aWxkRGlyJVxpbmNsdWRlXFdlYktpdDIiCiAgICAgeGNvcHkgL3kg
L2QgIi4uXFVJUHJvY2Vzc1xBUElcQ1xXS1Jlc291cmNlQ2FjaGVNYW5hZ2VyLmgiICIlQ29uZmln
dXJhdGlvbkJ1aWxkRGlyJVxpbmNsdWRlXFdlYktpdDIiCisgICAgeGNvcHkgL3kgL2QgIi4uXFVJ
UHJvY2Vzc1xBUElcQ1xXS1RleHRDaGVja2VyLmgiICIlQ29uZmlndXJhdGlvbkJ1aWxkRGlyJVxp
bmNsdWRlXFdlYktpdDIiCiAgICAgeGNvcHkgL3kgL2QgIi4uXFVJUHJvY2Vzc1xBUElcQ1x3aW5c
V0tDb250ZXh0UHJpdmF0ZVdpbi5oIiAiJUNvbmZpZ3VyYXRpb25CdWlsZERpciVcaW5jbHVkZVxX
ZWJLaXQyIgotICAgIHhjb3B5IC95IC9kICIuLlxVSVByb2Nlc3NcQVBJXENcd2luXFdLR3JhbW1h
ckRldGFpbC5oIiAiJUNvbmZpZ3VyYXRpb25CdWlsZERpciVcaW5jbHVkZVxXZWJLaXQyIgotICAg
IHhjb3B5IC95IC9kICIuLlxVSVByb2Nlc3NcQVBJXENcd2luXFdLVGV4dENoZWNrZXIuaCIgIiVD
b25maWd1cmF0aW9uQnVpbGREaXIlXGluY2x1ZGVcV2ViS2l0MiIKICAgICB4Y29weSAveSAvZCAi
Li5cVUlQcm9jZXNzXEFQSVxDXHdpblxXS1ZpZXcuaCIgIiVDb25maWd1cmF0aW9uQnVpbGREaXIl
XGluY2x1ZGVcV2ViS2l0MiIKICAgICB4Y29weSAveSAvZCAiLi5cVUlQcm9jZXNzXEFQSVxDXHdp
blxXS1ZpZXdQcml2YXRlLmgiICIlQ29uZmlndXJhdGlvbkJ1aWxkRGlyJVxpbmNsdWRlXFdlYktp
dDIiCiAgICAgeGNvcHkgL3kgL2QgIi4uXFVJUHJvY2Vzc1xBUElcY3BwXFdLUmV0YWluUHRyLmgi
ICIlQ29uZmlndXJhdGlvbkJ1aWxkRGlyJVxpbmNsdWRlXFdlYktpdDIiCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108162</attachid>
            <date>2011-09-21 08:08:58 -0700</date>
            <delta_ts>2011-09-21 11:17:45 -0700</delta_ts>
            <desc>GTK port implementation for Text Checker</desc>
            <filename>68532-textchecker-wk2.diff</filename>
            <type>text/plain</type>
            <size>11151</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBmYjE1NWMwLi5jMTA1NGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQg
QEAKKzIwMTEtMDktMjEgIFJhdmkgUGhhbmVlbmRyYSBLYXNpYmhhdGxhICA8cmF2aS5rYXNpYmhh
dGxhQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIFRl
eHRDaGVja2VyIFdlYktpdDIgR1RLIHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02ODUzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoZSBmaWxlcyBtb2RpZmllZCBmb3IgVGV4dENoZWNrZXIgaW1w
bGVtZW50YXRpb24gZm9yIFdlYktpdDIgR1RLIHBvcnQuIEluY2x1ZGVzCisgICAgICAgIHRoZSBp
bXBsZW1lbnRhdGlvbiBvZiBjbGFzcyBUZXh0Q2hlY2tlciBhbmQgbWFrZWZpbGVzIGNoYW5nZXMu
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQgZmlsZXMgZm9yIFRleHRDaGVja2Vy
LgorICAgICAgICAqIFVJUHJvY2Vzcy9UZXh0Q2hlY2tlci5oOiBFbmFibGVkIHdpbmRvd3Mgc3Bl
Y2lmaWMgZnVuY3Rpb25zIGZvciBHVEsgcG9ydCBhcyB3ZWxsLiAKKyAgICAgICAgKiBVSVByb2Nl
c3MvZ3RrL1RleHRDaGVja2VyR3RrLmNwcDogSW1wbGVtZW5hdGlvbiBvZiB0aGUgVGV4dENoZWNr
ZXIgZnVuY3Rpb25zLgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6c3RhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93
ZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNldEdyYW1tYXJD
aGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0OjpUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyk6CisgICAgICAgIChX
ZWJLaXQ6OlRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKToKKyAgICAgICAg
KFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6CisgICAgICAgIChX
ZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyk6CisgICAgICAgIChXZWJL
aXQ6OlRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKToKKyAgICAgICAgKFdlYktpdDo6
VGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcpOgorICAgICAgICAoV2ViS2l0
OjpUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCk6CisgICAg
ICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJp
bmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgor
ICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKToKKyAgICAgICAgKFdlYktp
dDo6VGV4dENoZWNrZXI6Omlnbm9yZVdvcmQpOgorCiAyMDExLTA5LTE1ICBBZGFtIEJhcnRoICA8
YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVuYW1lIEVOQUJMRShEQVRBQkFTRSkgdG8g
RU5BQkxFKFNRTF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2Vm
aWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggZDYzNTk2My4uMWI1
ZTA4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvU291
cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTQ4LDYgKzQ4LDcgQEAgbGlid2Via2l0Mmd0
a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJT
SU9OQF9sYV9IRUEKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvQy9XS0Zvcm1TdWJtaXNzaW9u
TGlzdGVuZXIuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL0MvV0tGcmFtZS5oIFwKIAkk
KFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvQy9XS0ZyYW1lUG9saWN5TGlzdGVuZXIuaCBcCisJJChX
ZWJLaXQyKS9VSVByb2Nlc3MvQVBJL0MvV0tHcmFtbWFyRGV0YWlsLmggXAogCSQoV2ViS2l0Mikv
VUlQcm9jZXNzL0FQSS9DL1dLSW5zcGVjdG9yLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQ
SS9DL1dLS2V5VmFsdWVTdG9yYWdlTWFuYWdlci5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9B
UEkvQy9XS01lZGlhQ2FjaGVNYW5hZ2VyLmggXApAQCAtNjQsNiArNjUsNyBAQCBsaWJ3ZWJraXQy
Z3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZF
UlNJT05AX2xhX0hFQQogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9DL1dLUHJvdGVjdGlvblNw
YWNlLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9DL1dLUHJvdGVjdGlvblNwYWNlVHlw
ZXMuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUNhY2hlTWFuYWdl
ci5oIFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvQy9XS1RleHRDaGVja2VyLmggXAogCSQo
V2ViS2l0MikvVUlQcm9jZXNzL0FQSS9jcHAvV0tSZXRhaW5QdHIuaCBcCiAJJChXZWJLaXQyKS9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuaCBcCkBAIC00MTEsNiArNDEzLDggQEAgbGlid2Vi
a2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5P
Ul9WRVJTSU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tGcmFt
ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tGcmFtZVBvbGljeUxpc3Rl
bmVyLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLRnJhbWVQb2xpY3lM
aXN0ZW5lci5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tHcmFtbWFyRGV0
YWlsLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLR3JhbW1hckRldGFp
bC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tJY29uRGF0YWJhc2UuY3Bw
IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tJY29uRGF0YWJhc2UuaCBcCiAJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLSW5zcGVjdG9yLmNwcCBcCkBAIC00NDEs
NiArNDQ1LDggQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9A
V0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tQcm90ZWN0aW9uU3BhY2VUeXBlcy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUNhY2hlTWFuYWdlci5oIFwKIAlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUNhY2hlTWFuYWdlci5jcHAgXAorCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1RleHRDaGVja2VyLmggXAorCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9XS1RleHRDaGVja2VyLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9jcHAvV0tSZXRhaW5QdHIuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvUGFnZUNsaWVudEltcGwuY3BwIFwKQEAgLTU1MSw2ICs1NTcsOCBAQCBsaWJ3ZWJraXQy
Z3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZF
UlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJHZW9sb2NhdGlvbk1h
bmFnZXJQcm94eS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViR2VvbG9jYXRpb25Q
cm92aWRlci5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJHZW9sb2NhdGlvblBy
b3ZpZGVyLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJHcmFtbWFyRGV0YWlsLmNw
cCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkdyYW1tYXJEZXRhaWwuaCBcCiAJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkhpc3RvcnlDbGllbnQuY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViSGlzdG9yeUNsaWVudC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcCBcCkBAIC01ODYsNiArNTk0LDEwIEBAIGxpYndlYmtp
dDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1Jf
VkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlQ2Fj
aGVNYW5hZ2VyUHJveHkuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3Vy
Y2VMb2FkQ2xpZW50LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNl
TG9hZENsaWVudC5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVGV4dENoZWNrZXIu
Y3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVGV4dENoZWNrZXIuaCBcCisJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlRleHRDaGVja2VyQ2xpZW50LmNwcCBcCisJU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlRleHRDaGVja2VyQ2xpZW50LmggXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJVSUNsaWVudC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJVSUNsaWVudC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0FwcGxpY2F0aW9u
Q2FjaGUvV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvVGV4dENoZWNrZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9UZXh0Q2hlY2tlci5oCmluZGV4IDY5ZTI4MzcuLmFlZmFkY2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9UZXh0Q2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9UZXh0Q2hlY2tlci5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBib29sIHN1YnN0aXR1dGlvbnNQYW5lbElzU2hvd2luZygpOwogICAgIHN0YXRpYyB2b2lk
IHRvZ2dsZVN1YnN0aXR1dGlvbnNQYW5lbElzU2hvd2luZygpOwotI2VsaWYgUExBVEZPUk0oV0lO
KQorI2VsaWYgUExBVEZPUk0oV0lOKSB8fCBQTEFURk9STShHVEspCiAgICAgc3RhdGljIHZvaWQg
Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wpOwogICAgIHN0
YXRpYyB2b2lkIGdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCk7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJH
dGsuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAK
aW5kZXggMTE4YmVlMS4uNWIyNmQxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJUZXh0
Q2hlY2tlci5oIgogCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5oIgotI2luY2x1ZGUgPFdl
YkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlICJXZWJUZXh0Q2hlY2tlci5oIgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAKQEAgLTM4LDgxICszOCwxMDMgQEAgc3RhdGljIFRl
eHRDaGVja2VyU3RhdGUgdGV4dENoZWNrZXJTdGF0ZTsKIAogY29uc3QgVGV4dENoZWNrZXJTdGF0
ZSYgVGV4dENoZWNrZXI6OnN0YXRlKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0
YXRpYyBib29sIGRpZEluaXRpYWxpemVTdGF0ZTsKKyAgICBpZiAoZGlkSW5pdGlhbGl6ZVN0YXRl
KQorICAgICAgICByZXR1cm4gdGV4dENoZWNrZXJTdGF0ZTsKKworICAgIFdlYlRleHRDaGVja2Vy
Q2xpZW50JiBjbGllbnQgPSBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpOworICAg
IHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBjbGll
bnQuY29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CisgICAgdGV4dENoZWNrZXJTdGF0
ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSAgY2xpZW50LmdyYW1tYXJDaGVja2luZ0VuYWJs
ZWQoKTsKKworICAgIGRpZEluaXRpYWxpemVTdGF0ZSA9IHRydWU7CisKICAgICByZXR1cm4gdGV4
dENoZWNrZXJTdGF0ZTsKIH0KLQorICAKIGJvb2wgVGV4dENoZWNrZXI6OmlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdBbGxvd2VkKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5j
b250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6
c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgaXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAoc3RhdGUo
KS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9PSBpc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIHRleHRDaGVja2VyU3RhdGUuaXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZDsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNldENvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9v
bCBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBpZiAoc3RhdGUoKS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPT0gaXNHcmFtbWFyQ2hlY2tp
bmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0dyYW1t
YXJDaGVja2luZ0VuYWJsZWQgPSBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQ7CisgICAgV2ViVGV4
dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGlz
R3JhbW1hckNoZWNraW5nRW5hYmxlZCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXI6OmNvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCit7CisgICAg
dGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGVuYWJs
ZWQ7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNo
YW5nZWQoYm9vbCBlbmFibGVkKQoreworICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkID0gZW5hYmxlZDsKIH0KIAotaW50NjRfdCBUZXh0Q2hlY2tlcjo6dW5pcXVl
U3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqKQoraW50NjRfdCBUZXh0Q2hlY2tlcjo6dW5p
cXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqIHBhZ2UpCiB7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJl
ZCgpLT5jbGllbnQoKS51bmlxdWVTcGVsbERvY3VtZW50VGFnKHBhZ2UpOwogfQogCi12b2lkIFRl
eHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGludDY0X3QpCit2b2lkIFRleHRD
aGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGludDY0X3QgdGFnKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5j
bG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHRhZyk7CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNo
ZWNrU3BlbGxpbmdPZlN0cmluZyhpbnQ2NF90LCBjb25zdCBVQ2hhciosIHVpbnQzMl90LCBpbnQz
Ml90JiwgaW50MzJfdCYpCit2b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmco
aW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBVQ2hhciogdGV4dCwgdWludDMyX3QgbGVu
Z3RoLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xl
bmd0aCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFdlYlRleHRDaGVja2VyOjpzaGFy
ZWQoKS0+Y2xpZW50KCkuY2hlY2tTcGVsbGluZ09mU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIFN0
cmluZyh0ZXh0LCBsZW5ndGgpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0
aCk7CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3Qs
IGNvbnN0IFVDaGFyKiwgdWludDMyX3QsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYs
IGludDMyX3QmLCBpbnQzMl90JikKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3Ry
aW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQzMl90
IGxlbmd0aCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywg
aW50MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5j
bGllbnQoKS5jaGVja0dyYW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJpbmcodGV4
dCwgbGVuZ3RoKSwgZ3JhbW1hckRldGFpbHMsIGJhZEdyYW1tYXJMb2NhdGlvbiwgYmFkR3JhbW1h
ckxlbmd0aCk7CiB9CiAKIGJvb2wgVGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1Nob3dpbmcoKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBX
ZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNwZWxsaW5nVUlJc1Nob3dpbmcoKTsK
IH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVu
dCgpLnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6
dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChpbnQ2NF90LCBjb25zdCBTdHJpbmcm
KQordm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChp
bnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNs
aWVudCgpLnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoc3BlbGxEb2N1bWVudFRh
ZywgbWlzc3BlbGxlZFdvcmQpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGlu
Z1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCwgY29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1h
ckRldGFpbCYpCit2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJT
dHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQ
aHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0
ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBiYWRHcmFtbWFy
UGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nl
c0ZvcldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNv
bnN0IFN0cmluZyYgY29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmd1
ZXNzZXNGb3JXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQsIGd1ZXNzZXMpOwogfQogCi12b2lk
IFRleHRDaGVja2VyOjpsZWFybldvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJikKK3ZvaWQgVGV4
dENoZWNrZXI6OmxlYXJuV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmlu
ZyYgd29yZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFdlYlRleHRDaGVja2VyOjpz
aGFyZWQoKS0+Y2xpZW50KCkubGVhcm5Xb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOwogfQog
CiB2b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywg
Y29uc3QgU3RyaW5nJiB3b3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViVGV4
dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcs
IHdvcmQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="commit-queue"
          id="105059"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108163</attachid>
            <date>2011-09-21 08:10:23 -0700</date>
            <delta_ts>2011-09-21 11:18:13 -0700</delta_ts>
            <desc>App changes for TextChecker </desc>
            <filename>68532-textchecker-app.diff</filename>
            <type>text/plain</type>
            <size>12578</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlNWNj
MGY4Li42NDM1OTA2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDktMjEgIFJhdmkgUGhhbmVlbmRyYSBLYXNp
YmhhdGxhICA8cmF2aS5rYXNpYmhhdGxhQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBJbml0aWFs
IGltcGxlbWVudGF0aW9uIG9mIFRleHRDaGVja2VyIFdlYktpdDIgR1RLIHBvcnQuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODUzMgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFzIHBhcnQgb2YgaW5pdGlh
bCBpbXBsZW1lbnRhdGlvbiBvbmx5IGZldyBzYW1wbGUgZnVuY3Rpb25zIGhhcyBiZWVuIGFkZGVk
IHdoaWNoIHNob3djYXNlcworICAgICAgICB0aGUgd29ya2luZyBvZiB0aGUgdGV4dCBjaGVja2Vy
IGZlYXR1cmUuIE5vIFVJIGNvZGUgaGFzIGJlZW4gdG8gc2hvdyB0aGUgc3VnZ2VzdGlvbnMgZm9y
CisgICAgICAgIHRoZSBtaXNzcGVsbGVkIHdvcmRzLgorCisgICAgICAgICogTWluaUJyb3dzZXIv
Z3RrL0Jyb3dzZXJXaW5kb3cuYzoKKyAgICAgICAgKGJyb3dzZXJfd2luZG93X2luaXQpOgorICAg
ICAgICAoZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSk6IEluaXRpYWxpemluZyB0aGUg
V0tUZXh0Q2hlY2tlckNsaWVudCBmb3Igc2VuZGluZyB0byBXZWJQcm9jZXNzLgorICAgICAgICAo
Z2V0QXZhaWxhYmxlRGljdGlvbmFyaWVzQ2FsbGJhY2spOiBHZXQgZGljdGlvbmFyaWVzIGZyb20g
RW5jaGFudC4KKyAgICAgICAgKGZyZWVTcGVsbENoZWNraW5nTGFuZ3VhZ2UpOiBHZXQgZGljdGlv
bmFyaWVzIGZyb20gRW5jaGFudC4KKyAgICAgICAgKGxvYWRFbmNoYW50RGljdHMpOiBHZXQgZGlj
dGlvbmFyaWVzIGZyb20gRW5jaGFudC4KKyAgICAgICAgKGNoZWNrU3BlbGxpbmdPZlN0cmluZyk6
IEdldCBzcGVsbGluZyBzdWdnZXN0aW9ucyBmcm9tIEVuY2hhbnQuCisgICAgICAgIChndWVzc2Vz
Rm9yV29yZCk6IEdldCBzcGVsbGluZyBzdWdnZXN0aW9ucyBmcm9tIEVuY2hhbnQuCisgICAgICAg
IChsZWFybldvcmQpOiBBZGQgY3VycmVudCB3b3JkIHRvIEVuY2hhbnQgZGljdGlvbmFyeS4KKyAg
ICAgICAgKGlnbm9yZVdvcmQpOiBBZGQgY3VycmVudCB3b3JkIHRvIEVuY2hhbnQgZGljdGlvbmFy
eS4KKyAgICAgICAgKGJyb3dzZXJXaW5kb3dUZXh0Q2hlY2tlckluaXQpOiBTZXR1cCBXS1RleHRD
aGVja2VyQ2xpZW50LgorICAgICAgICAqIE1pbmlCcm93c2VyL2d0ay9HTlVtYWtlZmlsZS5hbTog
QWRkIGRlcGVuZGVuY3kgb2YgRW5jaGFudCB0byBNaW5pQnJvd3Nlci4KKwogMjAxMS0wOS0xNSAg
SmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBBbnRv
aW5lIExhYm91ciBhbmQgU2hhd24gU2luZ2ggdG8gdGhlIGNvbnRyaWJ1dG9ycy1idXQtbm90LWNv
bW1pdHRlcnMgbGlzdC4KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2Vy
V2luZG93LmMgYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5jCmluZGV4IDNm
N2IwODQuLjc0MDIxNTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2Vy
V2luZG93LmMKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuYwpAQCAt
MjcsNiArMjcsOSBAQAogCiAjaW5jbHVkZSAiQnJvd3NlcldpbmRvdy5oIgogCisjaW5jbHVkZSA8
V2ViS2l0Mi9XS1RleHRDaGVja2VyLmg+CisjaW5jbHVkZSA8ZW5jaGFudC5oPgorCiBlbnVtIHsK
ICAgICBQUk9QXzAsCiAKQEAgLTQ4LDYgKzUxLDkgQEAgc3RydWN0IF9Ccm93c2VyV2luZG93IHsK
IAogICAgIGdjaGFyICp0aXRsZTsKICAgICBnZG91YmxlIGxvYWRQcm9ncmVzczsKKworICAgIEVu
Y2hhbnRCcm9rZXIqIGVuY2hhbnRCcm9rZXI7CisgICAgR1NMaXN0KiBlbmNoYW50RGljdHM7CiB9
OwogCiBzdHJ1Y3QgX0Jyb3dzZXJXaW5kb3dDbGFzcyB7CkBAIC01Nyw2ICs2Myw3IEBAIHN0cnVj
dCBfQnJvd3NlcldpbmRvd0NsYXNzIHsKIHN0YXRpYyB2b2lkIGJyb3dzZXJXaW5kb3dMb2FkZXJD
bGllbnRJbml0KEJyb3dzZXJXaW5kb3cqKTsKIHN0YXRpYyB2b2lkIGJyb3dzZXJXaW5kb3dVSUNs
aWVudEluaXQoQnJvd3NlcldpbmRvdyopOwogc3RhdGljIHZvaWQgYnJvd3NlcldpbmRvd1BvbGlj
eUNsaWVudEluaXQoQnJvd3NlcldpbmRvdyopOworc3RhdGljIHZvaWQgYnJvd3NlcldpbmRvd1Rl
eHRDaGVja2VySW5pdChCcm93c2VyV2luZG93Kik7CiAKIHN0YXRpYyBnaW50IHdpbmRvd0NvdW50
ID0gMDsKIApAQCAtMTY2LDYgKzE3MywxMCBAQCBzdGF0aWMgdm9pZCBicm93c2VyX3dpbmRvd19p
bml0KEJyb3dzZXJXaW5kb3cqIHdpbmRvdykKIAogICAgIGd0a19jb250YWluZXJfYWRkKEdUS19D
T05UQUlORVIod2luZG93KSwgdmJveCk7CiAgICAgZ3RrX3dpZGdldF9zaG93KHZib3gpOworCisg
ICAgLy8gRW5jaGFudCByZWxhdGVkLgorICAgIHdpbmRvdy0+ZW5jaGFudEJyb2tlciA9IE5VTEw7
CisgICAgd2luZG93LT5lbmNoYW50RGljdHMgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBicm93
c2VyV2luZG93Q29uc3RydWN0ZWQoR09iamVjdCogZ09iamVjdCkKQEAgLTM3NSw2ICszODYsMTMg
QEAgc3RhdGljIHZvaWQgZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS1BhZ2VSZWYg
cGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0sKICAgICBicm93c2VyV2luZG93VXBkYXRlVVJMKEJS
T1dTRVJfV0lORE9XKGNsaWVudEluZm8pLCB1cmwpOwogICAgIGlmICh1cmwpCiAgICAgICAgIFdL
UmVsZWFzZSh1cmwpOworCisgICAgLy8gRklYTUU6OiBJcyB0aGlzIHRoZSBiZXN0IGxvY2F0aW9u
IGZvciBjcmVhdGluZyBhbmQgc2V0dGluZyBUZXh0Q2hlY2tlciBjbGllbnQ/CisgICAgLy8gVGhl
IFRleHRDaGVja2VyIGNsaWVudCBzaG91bGQgYmUgY3JlYXRlZCBhbmQgc2V0IGFzIGVuYWJsZWQg
b25seSB3aGVuIFdlYlByb2Nlc3MgaXMgY3JlYXRlZC4gCisgICAgLy8gT3RoZXJ3aXNlLCBzZXR0
aW5nIHRoZSB0ZXh0Y2hlY2tlciBkb2Vzbid0IGdldCBwcm9wYWdhdGVkIHRvIFdlYlByb2Nlc3Mg
YW5kIGl0IGFzc3VtZXMgdGhlcmUKKyAgICAvLyBubyBUZXh0Q2hlY2tlciBhbmQgdGhlIGNoZWNr
ZXIgY2FsbGJhY2tzIG5ldmVyIGdldCBpbnZva2VkLgorICAgIEJyb3dzZXJXaW5kb3cqIHdpbmRv
dyA9IChCcm93c2VyV2luZG93KiljbGllbnRJbmZvOworICAgIGJyb3dzZXJXaW5kb3dUZXh0Q2hl
Y2tlckluaXQod2luZG93KTsKIH0KIAogc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVNlcnZlclJlZGly
ZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYg
ZnJhbWUsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTY4
OCw2ICs3MDYsMjE2IEBAIHN0YXRpYyB2b2lkIGJyb3dzZXJXaW5kb3dQb2xpY3lDbGllbnRJbml0
KEJyb3dzZXJXaW5kb3cqIHdpbmRvdykKICAgICBXS1BhZ2VTZXRQYWdlUG9saWN5Q2xpZW50KFdL
Vmlld0dldFBhZ2Uod2luZG93LT53ZWJWaWV3KSwgJnBvbGljeUNsaWVudCk7CiB9CiAKKy8vIFNv
dXJjZSB0YWtlbiBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzcGVsbGNoZWNr
ZXJlbmNoYW50LmNwcCBBUEkgaW1wbGVtZW50YXRpb24uCitzdGF0aWMgdm9pZCBnZXRBdmFpbGFi
bGVEaWN0aW9uYXJpZXNDYWxsYmFjayhjb25zdCBjaGFyKiBjb25zdCBsYW5ndWFnZVRhZywgY29u
c3QgY2hhciogY29uc3QgcHJvdmlkZXJfbmFtZSwgY29uc3QgY2hhciogY29uc3QgcHJvdmlkZXJf
ZGVzYywgY29uc3QgY2hhciogY29uc3QgcHJvdmlkZXJfZmlsZSwgdm9pZCogZGF0YSkKK3sgICAg
ICAgICAgIAorICAgIGNoYXIqIGRpY3RzID0gKGNoYXIqKWRhdGE7CisgICAgZGljdHMgPSBnX3N0
cmR1cChsYW5ndWFnZVRhZyk7Cit9ICAgCisKKy8vIFNvdXJjZSB0YWtlbiBmcm9tIFNvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzcGVsbGNoZWNrZXJlbmNoYW50LmNwcCBBUEkgaW1wbGVt
ZW50YXRpb24uCitzdGF0aWMgdm9pZCBmcmVlU3BlbGxDaGVja2luZ0xhbmd1YWdlKGdwb2ludGVy
IGRhdGEsIGdwb2ludGVyIGNsaWVudCkKK3sKKyAgICBCcm93c2VyV2luZG93KiB3aW5kb3cgPSAo
QnJvd3NlcldpbmRvdyopY2xpZW50OworICAgIGVuY2hhbnRfYnJva2VyX2ZyZWVfZGljdCh3aW5k
b3ctPmVuY2hhbnRCcm9rZXIsIChFbmNoYW50RGljdCopZGF0YSk7Cit9CisKKy8vIFNvdXJjZSB0
YWtlbiBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzcGVsbGNoZWNrZXJlbmNo
YW50LmNwcCBBUEkgaW1wbGVtZW50YXRpb24uCitzdGF0aWMgdm9pZCBsb2FkRW5jaGFudERpY3Rz
KEJyb3dzZXJXaW5kb3cqIHdpbmRvdykKK3sKKyAgICBHU0xpc3QqIHNwZWxsRGljdGlvbmFyaWVz
ID0gMDsKKworICAgIGNvbnN0IGNoYXIqIGxhbmd1YWdlID0gcGFuZ29fbGFuZ3VhZ2VfdG9fc3Ry
aW5nKGd0a19nZXRfZGVmYXVsdF9sYW5ndWFnZSgpKTsKKyAgICBpZiAoZW5jaGFudF9icm9rZXJf
ZGljdF9leGlzdHMod2luZG93LT5lbmNoYW50QnJva2VyLCBsYW5ndWFnZSkpIHsKKyAgICAgICAg
RW5jaGFudERpY3QqIGRpY3QgPSBlbmNoYW50X2Jyb2tlcl9yZXF1ZXN0X2RpY3Qod2luZG93LT5l
bmNoYW50QnJva2VyLCBsYW5ndWFnZSk7CisgICAgICAgIHNwZWxsRGljdGlvbmFyaWVzID0gZ19z
bGlzdF9hcHBlbmQoc3BlbGxEaWN0aW9uYXJpZXMsIGRpY3QpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIE5vIGRpY3Rpb25hcmllcyBzZWxlY3RlZCwgd2UgZ2V0IG9uZSBmcm9tIHRoZSBsaXN0
LgorICAgICAgICBjaGFyKiBhbGxEaWN0aW9uYXJpZXMgPSAwOworICAgICAgICBlbmNoYW50X2Jy
b2tlcl9saXN0X2RpY3RzKHdpbmRvdy0+ZW5jaGFudEJyb2tlciwgZ2V0QXZhaWxhYmxlRGljdGlv
bmFyaWVzQ2FsbGJhY2ssIGFsbERpY3Rpb25hcmllcyk7CisgICAgICAgIGlmIChhbGxEaWN0aW9u
YXJpZXMpIHsKKyAgICAgICAgICAgIEVuY2hhbnREaWN0KiBkaWN0ID0gZW5jaGFudF9icm9rZXJf
cmVxdWVzdF9kaWN0KHdpbmRvdy0+ZW5jaGFudEJyb2tlciwgYWxsRGljdGlvbmFyaWVzKTsKKyAg
ICAgICAgICAgIHNwZWxsRGljdGlvbmFyaWVzID0gZ19zbGlzdF9hcHBlbmQoc3BlbGxEaWN0aW9u
YXJpZXMsIGRpY3QpOworICAgICAgICB9CisgICAgfQorICAgIGdfc2xpc3RfZm9yZWFjaCh3aW5k
b3ctPmVuY2hhbnREaWN0cywgZnJlZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZSwgd2luZG93KTsKKyAg
ICBnX3NsaXN0X2ZyZWUod2luZG93LT5lbmNoYW50RGljdHMpOworICAgIHdpbmRvdy0+ZW5jaGFu
dERpY3RzID0gc3BlbGxEaWN0aW9uYXJpZXM7Cit9CisKKy8vIFNvdXJjZSB0YWtlbiBmcm9tIFNv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzcGVsbGNoZWNrZXJlbmNoYW50LmNwcCBBUEkg
aW1wbGVtZW50YXRpb24uCitzdGF0aWMgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcodWludDY0
X3QgdGFnLCBXS1N0cmluZ1JlZiB0ZXh0LCBpbnQzMl90KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBp
bnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAg
ICBCcm93c2VyV2luZG93KiB3aW5kb3cgPSAoQnJvd3NlcldpbmRvdyopY2xpZW50SW5mbzsKKyAg
ICBHU0xpc3QqIGRpY3RzID0gd2luZG93LT5lbmNoYW50RGljdHM7CisgICAgaWYgKCFkaWN0cykK
KyAgICAgICAgcmV0dXJuOworCisgICAgc2l6ZV90IGxlbmd0aCA9IFdLU3RyaW5nR2V0TGVuZ3Ro
KHRleHQpOworICAgIGNoYXIqIHN0cmluZyA9IGdfbmV3MChjaGFyLCBsZW5ndGggKyAxKTsKKyAg
ICBXS1N0cmluZ0dldFVURjhDU3RyaW5nKHRleHQsIHN0cmluZywgbGVuZ3RoKTsKKyAgICBQYW5n
b0xhbmd1YWdlKiBsYW5ndWFnZSA9IHBhbmdvX2xhbmd1YWdlX2dldF9kZWZhdWx0KCk7CisgICAg
UGFuZ29Mb2dBdHRyKiBhdHRycyA9IGdfbmV3KFBhbmdvTG9nQXR0ciwgbGVuZ3RoICsgMSk7Cisg
ICAgICAgIAorICAgIC8vIHBhbmdvX2dldF9sb2dfYXR0cnMgdXNlcyBhbiBhZGl0aW9uYWwgcG9z
aXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgdGV4dC4KKyAgICBwYW5nb19nZXRfbG9nX2F0dHJzKHN0
cmluZywgbGVuZ3RoLCAtMSwgbGFuZ3VhZ2UsIGF0dHJzLCBsZW5ndGggKyAxKTsKKworICAgIHNp
emVfdCBpID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoICsgMTsgaSsrKSB7CisgICAg
ICAgIC8vIFdlIGdvIHRocm91Z2ggZWFjaCBjaGFyYWN0ZXIgdW50aWwgd2UgZmluZCBhbiBpc193
b3JkX3N0YXJ0LAorICAgICAgICAvLyB0aGVuIHdlIGdldCBpbnRvIGFuIGlubmVyIGxvb3AgdG8g
ZmluZCB0aGUgaXNfd29yZF9lbmQgY29ycmVzcG9uZGluZworICAgICAgICAvLyB0byBpdC4KKyAg
ICAgICAgaWYgKGF0dHJzW2ldLmlzX3dvcmRfc3RhcnQpIHsKKyAgICAgICAgICAgIGludCBzdGFy
dCA9IGk7CisgICAgICAgICAgICBpbnQgZW5kID0gaTsKKyAgICAgICAgICAgIGludCB3b3JkTGVu
Z3RoOworCisgICAgICAgICAgICB3aGlsZSAoYXR0cnNbZW5kXS5pc193b3JkX2VuZCA8IDEpCisg
ICAgICAgICAgICAgICAgZW5kKys7CisKKyAgICAgICAgICAgIHdvcmRMZW5ndGggPSBlbmQgLSBz
dGFydDsKKyAgICAgICAgICAgIC8vIFNldCB0aGUgaXRlcmF0b3IgdG8gYmUgYXQgdGhlIGN1cnJl
bnQgd29yZCBlbmQsIHNvIHdlIGRvbid0CisgICAgICAgICAgICAvLyBjaGVjayBjaGFyYWN0ZXJz
IHR3aWNlLgorICAgICAgICAgICAgaSA9IGVuZDsKKworICAgICAgICAgICAgZ2NoYXIqIGNzdGFy
dCA9IGdfdXRmOF9vZmZzZXRfdG9fcG9pbnRlcihzdHJpbmcsIHN0YXJ0KTsKKyAgICAgICAgICAg
IGdpbnQgYnl0ZXMgPSAoZ2ludCkoZ191dGY4X29mZnNldF90b19wb2ludGVyKHN0cmluZywgZW5k
KSAtIGNzdGFydCk7CisgICAgICAgICAgICBnY2hhciogd29yZCA9IGdfbmV3MChnY2hhciwgYnl0
ZXMgKyAxKTsKKworICAgICAgICAgICAgZ191dGY4X3N0cm5jcHkod29yZCwgY3N0YXJ0LCB3b3Jk
TGVuZ3RoKTsKKworICAgICAgICAgICAgZm9yICg7IGRpY3RzOyBkaWN0cyA9IGRpY3RzLT5uZXh0
KSB7CisgICAgICAgICAgICAgICAgRW5jaGFudERpY3QqIGRpY3QgPSAoRW5jaGFudERpY3QqKShk
aWN0cy0+ZGF0YSk7CisgICAgICAgICAgICAgICAgaWYgKGVuY2hhbnRfZGljdF9jaGVjayhkaWN0
LCB3b3JkLCB3b3JkTGVuZ3RoKSkgeworICAgICAgICAgICAgICAgICAgICAqbWlzc3BlbGxpbmdM
b2NhdGlvbiA9IHN0YXJ0OworICAgICAgICAgICAgICAgICAgICAqbWlzc3BlbGxpbmdMZW5ndGgg
PSB3b3JkTGVuZ3RoOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIFN0b3AgY2hlY2tpbmcsIHRoaXMgd29yZCBpcyBvayBpbiBhdCBsZWFzdCBvbmUgZGlj
dC4KKyAgICAgICAgICAgICAgICAgICAgKm1pc3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKKyAgICAg
ICAgICAgICAgICAgICAgKm1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
Z19mcmVlKHdvcmQpOworICAgICAgICAgICAgd29yZCA9IDA7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZ19mcmVlKGF0dHJzKTsKKyAgICBhdHRycyA9IDA7CisgICAgZ19mcmVlKHN0cmluZyk7Cisg
ICAgc3RyaW5nID0gMDsKK30KKworLy8gU291cmNlIHRha2VuIGZyb20gU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHNwZWxsY2hlY2tlcmVuY2hhbnQuY3BwIEFQSSBpbXBsZW1lbnRhdGlv
bi4KK3N0YXRpYyBXS0FycmF5UmVmIGd1ZXNzZXNGb3JXb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJp
bmdSZWYgd29yZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAgICBCcm93c2VyV2luZG93
KiB3aW5kb3cgPSAoQnJvd3NlcldpbmRvdyopY2xpZW50SW5mbzsKKyAgICBHU0xpc3QqIGRpY3Rz
ID0gd2luZG93LT5lbmNoYW50RGljdHM7CisgICAgY2hhcioqIGd1ZXNzZXMgPSAwOworICAgIGlm
ICghZGljdHMpCisgICAgICAgIHJldHVybiAwOworCisgICAgc2l6ZV90IGxlbmd0aCA9IFdLU3Ry
aW5nR2V0TGVuZ3RoKHdvcmQpOworICAgIGNoYXIqIHN0cmluZyA9IGdfbmV3MChjaGFyLCBsZW5n
dGggKyAxKTsKKyAgICBXS1N0cmluZ0dldFVURjhDU3RyaW5nKHdvcmQsIHN0cmluZywgbGVuZ3Ro
KTsKKworICAgIHNpemVfdCBudW1iZXJPZlN1Z2dlc3Rpb25zID0gMDsKKyAgICBmb3IgKDsgZGlj
dHM7IGRpY3RzID0gZGljdHMtPm5leHQpIHsKKyAgICAgICAgc2l6ZV90IGk7CisKKyAgICAgICAg
RW5jaGFudERpY3QqIGRpY3QgPSAoRW5jaGFudERpY3QqKShkaWN0cy0+ZGF0YSk7CisgICAgICAg
IGdjaGFyKiogc3VnZ2VzdGlvbnMgPSBlbmNoYW50X2RpY3Rfc3VnZ2VzdChkaWN0LCBzdHJpbmcs
IC0xLCAmbnVtYmVyT2ZTdWdnZXN0aW9ucyk7CisKKyAgICAgICAgaWYgKG51bWJlck9mU3VnZ2Vz
dGlvbnMgPiAwKSB7CisgICAgICAgICAgICBpZiAobnVtYmVyT2ZTdWdnZXN0aW9ucyA+IDEwKQor
ICAgICAgICAgICAgICAgIG51bWJlck9mU3VnZ2VzdGlvbnMgPSAxMDsKKworICAgICAgICAgICAg
Z3Vlc3NlcyA9IChjaGFyKiopZ19tYWxsb2MwKChudW1iZXJPZlN1Z2dlc3Rpb25zICsgMSkgKiBz
aXplb2YoY2hhciopKTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1iZXJPZlN1Z2dl
c3Rpb25zICYmIGkgPCAxMDsgaSsrKQorICAgICAgICAgICAgICAgIGd1ZXNzZXNbaV0gPSBnX3N0
cmR1cChzdWdnZXN0aW9uc1tpXSk7CisKKyAgICAgICAgICAgIGd1ZXNzZXNbaV0gPSAwOworCisg
ICAgICAgICAgICBlbmNoYW50X2RpY3RfZnJlZV9zdWdnZXN0aW9ucyhkaWN0LCBzdWdnZXN0aW9u
cyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBXS0FycmF5UmVmIGFycmF5UmVmID0gV0tBcnJh
eUNyZWF0ZSgoY29uc3Qgdm9pZCoqKWd1ZXNzZXMsIG51bWJlck9mU3VnZ2VzdGlvbnMpOworICAg
IGdfc3RyZnJlZXYoZ3Vlc3Nlcyk7CisgICAgcmV0dXJuIGFycmF5UmVmOworfQorCisvLyBTb3Vy
Y2UgdGFrZW4gZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c3BlbGxjaGVja2Vy
ZW5jaGFudC5jcHAgQVBJIGltcGxlbWVudGF0aW9uLgorc3RhdGljIHZvaWQgbGVhcm5Xb3JkKHVp
bnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sK
KyAgICBCcm93c2VyV2luZG93KiB3aW5kb3cgPSAoQnJvd3NlcldpbmRvdyopY2xpZW50SW5mbzsK
KyAgICBHU0xpc3QqIGRpY3RzID0gd2luZG93LT5lbmNoYW50RGljdHM7CisgICAgaWYgKCFkaWN0
cykKKyAgICAgICAgcmV0dXJuOworCisgICAgc2l6ZV90IGxlbmd0aCA9IFdLU3RyaW5nR2V0TGVu
Z3RoKHdvcmQpOworICAgIGNoYXIqIHN0cmluZyA9IGdfbmV3MChjaGFyLCBsZW5ndGggKyAxKTsK
KyAgICBXS1N0cmluZ0dldFVURjhDU3RyaW5nKHdvcmQsIHN0cmluZywgbGVuZ3RoKTsKKworICAg
IGZvciAoOyBkaWN0czsgZGljdHMgPSBkaWN0cy0+bmV4dCkgeworICAgICAgICBFbmNoYW50RGlj
dCogZGljdCA9IChFbmNoYW50RGljdCopKGRpY3RzLT5kYXRhKTsKKyAgICAgICAgZW5jaGFudF9k
aWN0X2FkZF90b19wZXJzb25hbChkaWN0LCBzdHJpbmcsIC0xKTsKKyAgICB9CisgICAgZ19mcmVl
KHN0cmluZyk7CisgICAgc3RyaW5nID0gMDsKK30KKworLy8gU291cmNlIHRha2VuIGZyb20gU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNwZWxsY2hlY2tlcmVuY2hhbnQuY3BwIEFQSSBp
bXBsZW1lbnRhdGlvbi4KK3N0YXRpYyB2b2lkIGlnbm9yZVdvcmQodWludDY0X3QgdGFnLCBXS1N0
cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIEJyb3dzZXJXaW5k
b3cqIHdpbmRvdyA9IChCcm93c2VyV2luZG93KiljbGllbnRJbmZvOworICAgIEdTTGlzdCogZGlj
dHMgPSB3aW5kb3ctPmVuY2hhbnREaWN0czsKKyAgICBpZiAoIWRpY3RzKQorICAgICAgICByZXR1
cm47CisKKyAgICBzaXplX3QgbGVuZ3RoID0gV0tTdHJpbmdHZXRMZW5ndGgod29yZCk7CisgICAg
Y2hhciogc3RyaW5nID0gZ19uZXcwKGNoYXIsIGxlbmd0aCArIDEpOworICAgIFdLU3RyaW5nR2V0
VVRGOENTdHJpbmcod29yZCwgc3RyaW5nLCBsZW5ndGgpOworCisgICAgZm9yICg7IGRpY3RzOyBk
aWN0cyA9IGRpY3RzLT5uZXh0KSB7CisgICAgICAgIEVuY2hhbnREaWN0KiBkaWN0ID0gKEVuY2hh
bnREaWN0KikoZGljdHMtPmRhdGEpOworICAgICAgICBlbmNoYW50X2RpY3RfYWRkX3RvX3Nlc3Np
b24oZGljdCwgc3RyaW5nLCAtMSk7CisgICAgfQorICAgIGdfZnJlZShzdHJpbmcpOworICAgIHN0
cmluZyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGJyb3dzZXJXaW5kb3dUZXh0Q2hlY2tlckluaXQo
QnJvd3NlcldpbmRvdyogd2luZG93KQoreworICAgIGlmICghd2luZG93LT5lbmNoYW50QnJva2Vy
KQorICAgICAgICB3aW5kb3ctPmVuY2hhbnRCcm9rZXIgPSBlbmNoYW50X2Jyb2tlcl9pbml0KCk7
CisKKyAgICBXS1RleHRDaGVja2VyQ2xpZW50IHRleHRDaGVja2VyQ2xpZW50ID0geworICAgICAg
ICBrV0tUZXh0Q2hlY2tlckNsaWVudEN1cnJlbnRWZXJzaW9uLAorICAgICAgICB3aW5kb3csICAg
ICAgIC8qIGNsaWVudEluZm8gKi8KKyAgICAgICAgMCwgICAgICAgICAgICAvKiBjb250aW51b3Vz
U3BlbGxDaGVja2luZ0FsbG93ZWQgKi8KKyAgICAgICAgMCwgICAgICAgICAgICAvKiBjb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgKi8KKyAgICAgICAgMCwgICAgICAgICAgICAvKiBzZXRD
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgKi8KKyAgICAgICAgMCwgICAgICAgICAgICAv
KiBncmFtbWFyQ2hlY2tpbmdFbmFibGVkICovCisgICAgICAgIDAsICAgICAgICAgICAgLyogc2V0
R3JhbW1hckNoZWNraW5nRW5hYmxlZCAqLworICAgICAgICAwLCAgICAgICAgICAgIC8qIHVuaXF1
ZVNwZWxsRG9jdW1lbnRUYWcgKi8KKyAgICAgICAgMCwgICAgICAgICAgICAvKiBjbG9zZVNwZWxs
RG9jdW1lbnRXaXRoVGFnICovCisgICAgICAgIGNoZWNrU3BlbGxpbmdPZlN0cmluZywKKyAgICAg
ICAgMCwgICAgICAgICAgICAvKiBjaGVja0dyYW1tYXJPZlN0cmluZyAqLworICAgICAgICAwLCAg
ICAgICAgICAgIC8qIHNwZWxsaW5nVUlJc1Nob3dpbmcgKi8KKyAgICAgICAgMCwgICAgICAgICAg
ICAvKiB0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nICovCisgICAgICAgIDAsICAgICAgICAgICAg
LyogdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCAqLworICAgICAgICAwLCAgICAg
ICAgICAgIC8qIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyAqLworICAgICAgICBn
dWVzc2VzRm9yV29yZCwKKyAgICAgICAgbGVhcm5Xb3JkLAorICAgICAgICBpZ25vcmVXb3JkCisg
ICAgfTsKKworICAgIGxvYWRFbmNoYW50RGljdHMod2luZG93KTsKKyAgICBXS1RleHRDaGVja2Vy
U2V0Q2xpZW50KCZ0ZXh0Q2hlY2tlckNsaWVudCk7CisgICAgV0tUZXh0Q2hlY2tlckNvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZCh0cnVlKTsKK30KKwogLy8gUHVibGlj
IEFQSS4KIEd0a1dpZGdldCogYnJvd3Nlcl93aW5kb3dfbmV3KFdLVmlld1JlZiB2aWV3KQogewpk
aWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0dOVW1ha2VmaWxlLmFtIGIvVG9vbHMv
TWluaUJyb3dzZXIvZ3RrL0dOVW1ha2VmaWxlLmFtCmluZGV4IGUzNzg1NzYuLmU4MzQ4ZDEgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9HTlVtYWtlZmlsZS5hbQorKysgYi9Ub29s
cy9NaW5pQnJvd3Nlci9ndGsvR05VbWFrZWZpbGUuYW0KQEAgLTYsNiArNiw3IEBAIFByb2dyYW1z
X01pbmlCcm93c2VyX0NQUEZMQUdTID0gXAogCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvaW5jbHVkZSBcCiAJLURXRUJLSVRfRVhFQ19QQVRIPVwiJHtzaGVsbCBwd2R9
LyQodG9wX2J1aWxkZGlyKS9Qcm9ncmFtcy9cIiBcCiAJJChnbG9iYWxfY3BwZmxhZ3MpIFwKKwkk
KEVOQ0hBTlRfQ0ZMQUdTKSBcCiAJJChHTElCX0NGTEFHUykgXAogCSQoR1RLX0NGTEFHUykKIApA
QCAtMjUsNiArMjYsNyBAQCBnZW5lcmF0ZS1taW5pYnJvd3Nlci1mb3J3YXJkLWhlYWRlcnM6ICQo
V2ViS2l0MikvU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYQogCiBQcm9ncmFtc19NaW5p
QnJvd3Nlcl9MREFERCA9IFwKIAlsaWJ3ZWJraXQyZ3RrLUBXRUJLSVRHVEtfQVBJX01BSk9SX1ZF
UlNJT05ALkBXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05ALmxhIFwKKwkkKEVOQ0hBTlRfTElC
UykgXAogCSQoR0xJQl9MSUJTKSBcCiAJJChHVEtfTElCUykKIAo=
</data>
<flag name="commit-queue"
          id="105061"
          type_id="3"
          status="-"
          setter="gustavo.noronha"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108279</attachid>
            <date>2011-09-21 23:27:03 -0700</date>
            <delta_ts>2011-10-04 11:48:32 -0700</delta_ts>
            <desc>Moving TextChecker implementation from win port to common files</desc>
            <filename>68532-textchecker-wk2-moving.diff</filename>
            <type>text/plain</type>
            <size>83208</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBmYjE1NWMwLi5kOTM5N2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMg
QEAKKzIwMTEtMDktMjEgIFJhdmkgUGhhbmVlbmRyYSBLYXNpYmhhdGxhICA8cmF2aS5rYXNpYmhh
dGxhQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIFRl
eHRDaGVja2VyIFdlYktpdDIgR1RLIHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02ODUzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFsbCB0aGUgVGV4dENoZWNrZXIgZmVhdHVyZSBpbXBsZW1lbnRh
dGlvbiBmaWxlcyBhcmUgbW92ZWQgb3V0c2lkZSBvZiB3aW4gcG9ydCBzaW5jZSB0aGV5IGFyZQor
ICAgICAgICBwbGF0Zm9ybSBpbmRlcGVuZGVudCBhbmQgY2FuIGJlIG1vdmVkIGFjcm9zcyBhbGwg
cG9ydHMuIE9ubHkgdGhlIGltcGxlbWVudGF0aW9uIG9mIFRleHRDaGVja2VyCisgICAgICAgIGNs
YXNzIGlzIHBsYXRmb3JtIGRlcGVuZGVudCBub3cgYW5kIGhhcyBiZWVuIHJldGFpbmVkIGFjcm9z
cyBhbGwgcG9ydHMuIFJlc3QgYWxsIGZpbGVzIGhhcyBiZWVuCisgICAgICAgIG1vdmVkIGZvciBh
bGwgcG9ydHMgdXNhZ2UuCisKKyAgICAgICAgKiBTaGFyZWQvQVBJL2MvV0tCYXNlLmg6IEFkZCBX
S0dyYW1tYXJEZXRhaWxSZWYgJiBXS1RleHRDaGVja2VyUmVmIHR5cGVzLgorICAgICAgICAqIFNo
YXJlZC9BUEkvYy93aW4vV0tCYXNlV2luLmg6IFJlbW92ZSBXS0dyYW1tYXJEZXRhaWxSZWYgJiBX
S1RleHRDaGVja2VyUmVmIHR5cGVzLgorICAgICAgICAqIFNoYXJlZC9BUElPYmplY3QuaDogTW92
ZWQgVHlwZUdyYW1tYXJEZXRhaWwgJiBUeXBlVGV4dENoZWNrZXIgZnJvbSBwbGF0Zm9ybSBzcGVj
aWZpYyBzZWN0aW9uIHRvIFVJUHJvY2VzcyB0eXBlcy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0MvV0tBUElDYXN0Lmg6IEFkZGVkIG1hcHBpbmcgZm9yIFdLVGV4dENoZWNrZXJSZWYgJiBXS0dy
YW1tYXJEZXRhaWxSZWYuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLR3JhbW1hckRldGFp
bC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dL
R3JhbW1hckRldGFpbC5jcHAuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLR3JhbW1hckRl
dGFpbC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dpbi9X
S0dyYW1tYXJEZXRhaWwuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tUZXh0Q2hlY2tl
ci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dL
VGV4dENoZWNrZXIuY3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1RleHRDaGVja2Vy
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLVGV4
dENoZWNrZXIuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Mvd2luL1dLQVBJQ2FzdFdpbi5o
OiBSZW1vdmVkIG1hcHBpbmcgZm9yIFdLVGV4dENoZWNrZXJSZWYgJiBXS0dyYW1tYXJEZXRhaWxS
ZWYuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkdyYW1tYXJEZXRhaWwuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJHcmFtbWFyRGV0YWlsLmNwcC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViR3JhbW1hckRldGFpbC5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJHcmFtbWFyRGV0YWlsLmguCisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlRleHRDaGVja2VyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXIuY3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJU
ZXh0Q2hlY2tlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9X
ZWJUZXh0Q2hlY2tlci5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJUZXh0Q2hlY2tlckNsaWVu
dC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlRleHRD
aGVja2VyQ2xpZW50LmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViVGV4dENoZWNrZXJDbGll
bnQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4dENo
ZWNrZXJDbGllbnQuaC4KKyAgICAgICAgKiB3aW4vV2ViS2l0Mi52Y3Byb2o6IENvcnJlY3RlZCBw
YXRocyBmb3IgcmVuYW1lZCBmaWxlcy4KKyAgICAgICAgKiB3aW4vV2ViS2l0MkdlbmVyYXRlZC5t
YWtlOiBDb3JyZWN0ZWQgcGF0aHMgZm9yIHJlbmFtZWQgZmlsZXMuCisKIDIwMTEtMDktMTUgIEFk
YW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZW5hbWUgRU5BQkxFKERB
VEFCQVNFKSB0byBFTkFCTEUoU1FMX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL0FQSS9jL1dLQmFzZS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dL
QmFzZS5oCmluZGV4IDFiYWE4NzIuLmVkYjY5YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9BUEkvYy9XS0Jhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2Mv
V0tCYXNlLmgKQEAgLTg0LDYgKzg0LDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tG
cmFtZVBvbGljeUxpc3RlbmVyKiBXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWY7CiB0eXBlZGVmIGNv
bnN0IHN0cnVjdCBPcGFxdWVXS0dlb2xvY2F0aW9uTWFuYWdlciogV0tHZW9sb2NhdGlvbk1hbmFn
ZXJSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVXS0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3QqIFdLR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFJlZjsKIHR5cGVkZWYgY29u
c3Qgc3RydWN0IE9wYXF1ZVdLR2VvbG9jYXRpb25Qb3NpdGlvbiogV0tHZW9sb2NhdGlvblBvc2l0
aW9uUmVmOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tHcmFtbWFyRGV0YWlsKiBXS0dy
YW1tYXJEZXRhaWxSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVXS0ljb25EYXRhYmFz
ZSogV0tJY29uRGF0YWJhc2VSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVXS0luc3Bl
Y3RvciogV0tJbnNwZWN0b3JSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVXS0tleVZh
bHVlU3RvcmFnZU1hbmFnZXIqIFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZjsKQEAgLTk2LDYg
Kzk3LDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tQYWdlR3JvdXAqIFdLUGFnZUdy
b3VwUmVmOwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tQbHVnaW5TaXRlRGF0YU1hbmFn
ZXIqIFdLUGx1Z2luU2l0ZURhdGFNYW5hZ2VyUmVmOwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3Bh
cXVlV0tQcmVmZXJlbmNlcyogV0tQcmVmZXJlbmNlc1JlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0
IE9wYXF1ZVdLUHJvdGVjdGlvblNwYWNlKiBXS1Byb3RlY3Rpb25TcGFjZVJlZjsKK3R5cGVkZWYg
Y29uc3Qgc3RydWN0IE9wYXF1ZVdLVGV4dENoZWNrZXIqIFdLVGV4dENoZWNrZXJSZWY7CiAKIC8q
IFdlYktpdDIgQnVuZGxlIHR5cGVzICovCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9BUEkvYy93aW4vV0tCYXNlV2luLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2Mv
d2luL1dLQmFzZVdpbi5oCmluZGV4IGQ5YzEzZTMuLmZkZDQ2MDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy93aW4vV0tCYXNlV2luLmgKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL0FQSS9jL3dpbi9XS0Jhc2VXaW4uaApAQCAtMzIsNyArMzIsNSBAQAogCiB0eXBl
ZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVXS1ZpZXcqIFdLVmlld1JlZjsKIHR5cGVkZWYgY29uc3Qg
c3RydWN0IE9wYXF1ZVdLRWRpdENvbW1hbmQqIFdLRWRpdENvbW1hbmRSZWY7Ci10eXBlZGVmIGNv
bnN0IHN0cnVjdCBPcGFxdWVXS1RleHRDaGVja2VyKiBXS1RleHRDaGVja2VyUmVmOwotdHlwZWRl
ZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tHcmFtbWFyRGV0YWlsKiBXS0dyYW1tYXJEZXRhaWxSZWY7
CiAKICNlbmRpZiAvKiBXS0Jhc2VXaW5faCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL0FQSU9iamVjdC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSU9iamVjdC5oCmlu
ZGV4IGU1YTdlZWQuLjAwYjg2NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9B
UElPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJT2JqZWN0LmgKQEAgLTc2
LDYgKzc2LDcgQEAgcHVibGljOgogICAgICAgICBUeXBlR2VvbG9jYXRpb25NYW5hZ2VyLAogICAg
ICAgICBUeXBlR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdCwKICAgICAgICAgVHlwZUdlb2xv
Y2F0aW9uUG9zaXRpb24sCisgICAgICAgIFR5cGVHcmFtbWFyRGV0YWlsLAogICAgICAgICBUeXBl
SWNvbkRhdGFiYXNlLAogICAgICAgICBUeXBlSW5zcGVjdG9yLAogICAgICAgICBUeXBlS2V5VmFs
dWVTdG9yYWdlTWFuYWdlciwKQEAgLTg3LDYgKzg4LDcgQEAgcHVibGljOgogICAgICAgICBUeXBl
UGFnZUdyb3VwLAogICAgICAgICBUeXBlUGx1Z2luU2l0ZURhdGFNYW5hZ2VyLAogICAgICAgICBU
eXBlUHJlZmVyZW5jZXMsCisgICAgICAgIFR5cGVUZXh0Q2hlY2tlciwKIAogICAgICAgICAvLyBC
dW5kbGUgdHlwZXMKICAgICAgICAgVHlwZUJ1bmRsZSwKQEAgLTEwNSw4ICsxMDcsNiBAQCBwdWJs
aWM6CiAKICAgICAgICAgLy8gUGxhdGZvcm0gc3BlY2lmaWMKICAgICAgICAgVHlwZUVkaXRDb21t
YW5kUHJveHksCi0gICAgICAgIFR5cGVHcmFtbWFyRGV0YWlsLAotICAgICAgICBUeXBlVGV4dENo
ZWNrZXIsCiAgICAgICAgIFR5cGVWaWV3CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCmluZGV4IDgxYzJmNWYuLmY2ZDMzM2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bmNsdWRlICJGb250U21vb3RoaW5nTGV2ZWwuaCIKICNpbmNsdWRlICJIVFRQQ29va2llQWNjZXB0
UG9saWN5LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VDYWNoZXNUb0NsZWFyLmgiCisjaW5jbHVkZSAi
V2ViR3JhbW1hckRldGFpbC5oIgogI2luY2x1ZGUgIldLQ29udGV4dC5oIgogI2luY2x1ZGUgIldL
Q29va2llTWFuYWdlci5oIgogI2luY2x1ZGUgIldLQ3JlZGVudGlhbFR5cGVzLmgiCkBAIC02NCw2
ICs2NSw3IEBAIGNsYXNzIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTsKIGNsYXNzIFdlYkZy
YW1lUHJveHk7CiBjbGFzcyBXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eTsKIGNsYXNzIFdlYkdl
b2xvY2F0aW9uUG9zaXRpb247CitjbGFzcyBXZWJHcmFtbWFyRGV0YWlsOwogY2xhc3MgV2ViSWNv
bkRhdGFiYXNlOwogY2xhc3MgV2ViSW5zcGVjdG9yUHJveHk7CiBjbGFzcyBXZWJLZXlWYWx1ZVN0
b3JhZ2VNYW5hZ2VyUHJveHk7CkBAIC03Niw2ICs3OCw3IEBAIGNsYXNzIFdlYlBhZ2VQcm94eTsK
IGNsYXNzIFdlYlBsdWdpblNpdGVEYXRhTWFuYWdlcjsKIGNsYXNzIFdlYlByZWZlcmVuY2VzOwog
Y2xhc3MgV2ViUHJvdGVjdGlvblNwYWNlOworY2xhc3MgV2ViVGV4dENoZWNrZXI7CiAKIFdLX0FE
RF9BUElfTUFQUElORyhXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUmVmLCBXZWJBcHBsaWNhdGlv
bkNhY2hlTWFuYWdlclByb3h5KQogV0tfQUREX0FQSV9NQVBQSU5HKFdLQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VSZWYsIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkpCkBAIC05NCw2ICs5Nyw3
IEBAIFdLX0FERF9BUElfTUFQUElORyhXS0ZyYW1lUmVmLCBXZWJGcmFtZVByb3h5KQogV0tfQURE
X0FQSV9NQVBQSU5HKFdLR2VvbG9jYXRpb25NYW5hZ2VyUmVmLCBXZWJHZW9sb2NhdGlvbk1hbmFn
ZXJQcm94eSkKIFdLX0FERF9BUElfTUFQUElORyhXS0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVl
c3RSZWYsIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eSkKIFdLX0FERF9BUElfTUFQ
UElORyhXS0dlb2xvY2F0aW9uUG9zaXRpb25SZWYsIFdlYkdlb2xvY2F0aW9uUG9zaXRpb24pCitX
S19BRERfQVBJX01BUFBJTkcoV0tHcmFtbWFyRGV0YWlsUmVmLCBXZWJHcmFtbWFyRGV0YWlsKQog
V0tfQUREX0FQSV9NQVBQSU5HKFdLSWNvbkRhdGFiYXNlUmVmLCBXZWJJY29uRGF0YWJhc2UpCiBX
S19BRERfQVBJX01BUFBJTkcoV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmLCBXZWJLZXlWYWx1
ZVN0b3JhZ2VNYW5hZ2VyUHJveHkpCiBXS19BRERfQVBJX01BUFBJTkcoV0tNZWRpYUNhY2hlTWFu
YWdlclJlZiwgV2ViTWVkaWFDYWNoZU1hbmFnZXJQcm94eSkKQEAgLTEwNSw2ICsxMDksNyBAQCBX
S19BRERfQVBJX01BUFBJTkcoV0tQYWdlUmVmLCBXZWJQYWdlUHJveHkpCiBXS19BRERfQVBJX01B
UFBJTkcoV0tQbHVnaW5TaXRlRGF0YU1hbmFnZXJSZWYsIFdlYlBsdWdpblNpdGVEYXRhTWFuYWdl
cikKIFdLX0FERF9BUElfTUFQUElORyhXS1ByZWZlcmVuY2VzUmVmLCBXZWJQcmVmZXJlbmNlcykK
IFdLX0FERF9BUElfTUFQUElORyhXS1Byb3RlY3Rpb25TcGFjZVJlZiwgV2ViUHJvdGVjdGlvblNw
YWNlKQorV0tfQUREX0FQSV9NQVBQSU5HKFdLVGV4dENoZWNrZXJSZWYsIFdlYlRleHRDaGVja2Vy
KQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIFdLX0FERF9BUElfTUFQUElORyhXS0luc3BlY3Rv
clJlZiwgV2ViSW5zcGVjdG9yUHJveHkpCkBAIC0zMjYsNiArMzMxLDExIEBAIGlubGluZSBXS0hU
VFBDb29raWVBY2NlcHRQb2xpY3kgdG9BUEkoSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kp
CiAgICAgcmV0dXJuIGtXS0hUVFBDb29raWVBY2NlcHRQb2xpY3lBbHdheXM7CiB9CiAKK2lubGlu
ZSBQcm94eWluZ1JlZlB0cjxXZWJHcmFtbWFyRGV0YWlsPiB0b0FQSShjb25zdCBXZWJDb3JlOjpH
cmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0YWlsKQoreworICAgIHJldHVybiBQcm94eWluZ1JlZlB0
cjxXZWJHcmFtbWFyRGV0YWlsPihXZWJHcmFtbWFyRGV0YWlsOjpjcmVhdGUoZ3JhbW1hckRldGFp
bCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2lmIGRlZmluZWQoV0lOMzIpIHx8
IGRlZmluZWQoX1dJTjMyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL1dLR3JhbW1hckRldGFpbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
V0tHcmFtbWFyRGV0YWlsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41
YWIwZmM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L1dLR3JhbW1hckRldGFpbC5jcHAKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXS0dyYW1tYXJEZXRhaWwuaCIKKworI2luY2x1ZGUg
IkFQSU9iamVjdC5oIgorI2luY2x1ZGUgIkltbXV0YWJsZUFycmF5LmgiCisjaW5jbHVkZSAiV0tB
UElDYXN0LmgiCisjaW5jbHVkZSAiV2ViR3JhbW1hckRldGFpbC5oIgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OworCitXS1R5cGVJRCBXS0dyYW1tYXJEZXRhaWxHZXRUeXBlSUQoKQoreworICAg
IHJldHVybiB0b0FQSShBUElPYmplY3Q6OlR5cGVHcmFtbWFyRGV0YWlsKTsKK30KKworV0tHcmFt
bWFyRGV0YWlsUmVmIFdLR3JhbW1hckRldGFpbENyZWF0ZShpbnQgbG9jYXRpb24sIGludCBsZW5n
dGgsIFdLQXJyYXlSZWYgZ3Vlc3NlcywgV0tTdHJpbmdSZWYgdXNlckRlc2NyaXB0aW9uKQorewor
ICAgIFJlZlB0cjxXZWJHcmFtbWFyRGV0YWlsPiBkZXRhaWwgPSBXZWJHcmFtbWFyRGV0YWlsOjpj
cmVhdGUobG9jYXRpb24sIGxlbmd0aCwgdG9JbXBsKGd1ZXNzZXMpLCB0b1dURlN0cmluZyh1c2Vy
RGVzY3JpcHRpb24pKTsKKyAgICByZXR1cm4gdG9BUEkoZGV0YWlsLnJlbGVhc2UoKS5yZWxlYXNl
UmVmKCkpOworfQorCitpbnQgV0tHcmFtbWFyRGV0YWlsR2V0TG9jYXRpb24oV0tHcmFtbWFyRGV0
YWlsUmVmIGdyYW1tYXJEZXRhaWxSZWYpCit7CisgICAgcmV0dXJuIHRvSW1wbChncmFtbWFyRGV0
YWlsUmVmKS0+bG9jYXRpb24oKTsKK30KKworaW50IFdLR3JhbW1hckRldGFpbEdldExlbmd0aChX
S0dyYW1tYXJEZXRhaWxSZWYgZ3JhbW1hckRldGFpbFJlZikKK3sKKyAgICByZXR1cm4gdG9JbXBs
KGdyYW1tYXJEZXRhaWxSZWYpLT5sZW5ndGgoKTsKK30KKworV0tBcnJheVJlZiBXS0dyYW1tYXJE
ZXRhaWxDb3B5R3Vlc3NlcyhXS0dyYW1tYXJEZXRhaWxSZWYgZ3JhbW1hckRldGFpbFJlZikKK3sK
KyAgICByZXR1cm4gdG9BUEkodG9JbXBsKGdyYW1tYXJEZXRhaWxSZWYpLT5ndWVzc2VzKCkubGVh
a1JlZigpKTsKK30KKworV0tTdHJpbmdSZWYgV0tHcmFtbWFyRGV0YWlsQ29weVVzZXJEZXNjcmlw
dGlvbihXS0dyYW1tYXJEZXRhaWxSZWYgZ3JhbW1hckRldGFpbFJlZikKK3sKKyAgICByZXR1cm4g
dG9Db3BpZWRBUEkodG9JbXBsKGdyYW1tYXJEZXRhaWxSZWYpLT51c2VyRGVzY3JpcHRpb24oKSk7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tHcmFtbWFy
RGV0YWlsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tHcmFtbWFyRGV0YWls
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4N2NlNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0dyYW1tYXJEZXRhaWwu
aApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXS0dyYW1tYXJEZXRhaWxf
aAorI2RlZmluZSBXS0dyYW1tYXJEZXRhaWxfaAorCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2Uu
aD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitXS19FWFBP
UlQgV0tUeXBlSUQgV0tHcmFtbWFyRGV0YWlsR2V0VHlwZUlEKCk7CitXS19FWFBPUlQgV0tHcmFt
bWFyRGV0YWlsUmVmIFdLR3JhbW1hckRldGFpbENyZWF0ZShpbnQgbG9jYXRpb24sIGludCBsZW5n
dGgsIFdLQXJyYXlSZWYgZ3Vlc3NlcywgV0tTdHJpbmdSZWYgdXNlckRlc2NyaXB0aW9uKTsKKwor
V0tfRVhQT1JUIGludCBXS0dyYW1tYXJEZXRhaWxHZXRMb2NhdGlvbihXS0dyYW1tYXJEZXRhaWxS
ZWYgZ3JhbW1hckRldGFpbFJlZik7CitXS19FWFBPUlQgaW50IFdLR3JhbW1hckRldGFpbEdldExl
bmd0aChXS0dyYW1tYXJEZXRhaWxSZWYgZ3JhbW1hckRldGFpbFJlZik7CitXS19FWFBPUlQgV0tB
cnJheVJlZiBXS0dyYW1tYXJEZXRhaWxDb3B5R3Vlc3NlcyhXS0dyYW1tYXJEZXRhaWxSZWYgZ3Jh
bW1hckRldGFpbFJlZik7CitXS19FWFBPUlQgV0tTdHJpbmdSZWYgV0tHcmFtbWFyRGV0YWlsQ29w
eVVzZXJEZXNjcmlwdGlvbihXS0dyYW1tYXJEZXRhaWxSZWYgZ3JhbW1hckRldGFpbFJlZik7CisK
KyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBXS0dyYW1tYXJEZXRh
aWxfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLVGV4
dENoZWNrZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLVGV4dENoZWNr
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMjlkYTIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tUZXh0Q2hlY2tl
ci5jcHAKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXS1RleHRDaGVja2VyLmgiCisKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNp
bmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJUZXh0Q2hlY2tlci5oIgorCit1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCit2b2lkIFdLVGV4dENoZWNrZXJTZXRDbGllbnQoY29u
c3QgV0tUZXh0Q2hlY2tlckNsaWVudCogd2tDbGllbnQpCit7CisgICAgaWYgKHdrQ2xpZW50ICYm
IHdrQ2xpZW50LT52ZXJzaW9uKQorICAgICAgICByZXR1cm47CisgICAgV2ViVGV4dENoZWNrZXI6
OnNoYXJlZCgpLT5zZXRDbGllbnQod2tDbGllbnQpOworfQorCit2b2lkIFdLVGV4dENoZWNrZXJD
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCBlbmFibGVkKQor
eworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJsZWQpOworfQorCit2b2lkIFdLVGV4dENoZWNrZXJHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBXZWJU
ZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQo
ZW5hYmxlZCk7Cit9CisKK3ZvaWQgV0tUZXh0Q2hlY2tlckNoZWNrU3BlbGxpbmcoV0tQYWdlUmVm
IHBhZ2UsIGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCit7CisgICAgV2ViVGV4dENoZWNrZXI6
OnNoYXJlZCgpLT5jaGVja1NwZWxsaW5nKHRvSW1wbChwYWdlKSwgc3RhcnRCZWZvcmVTZWxlY3Rp
b24pOworfQorCit2b2lkIFdLVGV4dENoZWNrZXJDaGFuZ2VTcGVsbGluZ1RvV29yZChXS1BhZ2VS
ZWYgcGFnZSwgV0tTdHJpbmdSZWYgd29yZCkKK3sKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVk
KCktPmNoYW5nZVNwZWxsaW5nVG9Xb3JkKHRvSW1wbChwYWdlKSwgdG9XVEZTdHJpbmcod29yZCkp
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLVGV4dENo
ZWNrZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1RleHRDaGVja2VyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEwNWVkOQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1RleHRDaGVja2VyLmgKQEAg
LTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV0tUZXh0Q2hlY2tlcl9oCisjZGVm
aW5lIFdLVGV4dENoZWNrZXJfaAorCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKworI2lm
ZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvLyBUZXh0Q2hlY2tlciBD
bGllbnQKK3R5cGVkZWYgYm9vbCAoKldLVGV4dENoZWNrZXJDb250aW5vdXNTcGVsbENoZWNraW5n
QWxsb3dlZCkoY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Cit0eXBlZGVmIGJvb2wgKCpXS1RleHRD
aGVja2VyQ29udGlub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpKGNvbnN0IHZvaWQgKmNsaWVudElu
Zm8pOwordHlwZWRlZiB2b2lkICgqV0tUZXh0Q2hlY2tlclNldENvbnRpbm91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKShib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwordHlwZWRl
ZiBib29sICgqV0tUZXh0Q2hlY2tlckdyYW1tYXJDaGVja2luZ0VuYWJsZWQpKGNvbnN0IHZvaWQg
KmNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkICgqV0tUZXh0Q2hlY2tlclNldEdyYW1tYXJDaGVj
a2luZ0VuYWJsZWQpKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Cit0eXBl
ZGVmIHVpbnQ2NF90ICgqV0tUZXh0Q2hlY2tlclVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcpKFdLUGFn
ZVJlZiBwYWdlLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKK3R5cGVkZWYgdm9pZCAoKldLVGV4
dENoZWNrZXJDbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKSh1aW50NjRfdCB0YWcsIGNvbnN0IHZv
aWQgKmNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkICgqV0tUZXh0Q2hlY2tlckNoZWNrU3BlbGxp
bmdPZlN0cmluZykodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0ZXh0LCBpbnQzMl90KiBtaXNz
cGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCwgY29uc3Qgdm9pZCAq
Y2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS1RleHRDaGVja2VyQ2hlY2tHcmFtbWFyT2ZT
dHJpbmcpKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgV0tBcnJheVJlZiogZ3JhbW1h
ckRldGFpbHMsIGludDMyX3QqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCogYmFkR3JhbW1h
ckxlbmd0aCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Cit0eXBlZGVmIGJvb2wgKCpXS1RleHRD
aGVja2VyU3BlbGxpbmdVSUlzU2hvd2luZykoY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Cit0eXBl
ZGVmIHZvaWQgKCpXS1RleHRDaGVja2VyVG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZykoY29uc3Qg
dm9pZCAqY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS1RleHRDaGVja2VyVXBkYXRlU3Bl
bGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCkodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiBtaXNz
cGVsbGVkV29yZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS1Rl
eHRDaGVja2VyVXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKSh1aW50NjRfdCB0YWcs
IFdLU3RyaW5nUmVmIGJhZEdyYW1tYXJQaHJhc2UsIFdLR3JhbW1hckRldGFpbFJlZiBncmFtbWFy
RGV0YWlsLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKK3R5cGVkZWYgV0tBcnJheVJlZiAoKldL
VGV4dENoZWNrZXJHdWVzc2VzRm9yV29yZCkodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3Jk
LCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKK3R5cGVkZWYgdm9pZCAoKldLVGV4dENoZWNrZXJM
ZWFybldvcmQpKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCAqY2xp
ZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS1RleHRDaGVja2VySWdub3JlV29yZCkodWludDY0
X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKKworc3Ry
dWN0IFdLVGV4dENoZWNrZXJDbGllbnQgeworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb247Cisg
ICAgY29uc3Qgdm9pZCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xpZW50SW5mbzsKKyAgICBXS1RleHRDaGVja2VyQ29udGlub3Vz
U3BlbGxDaGVja2luZ0FsbG93ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQ7CisgICAgV0tUZXh0Q2hlY2tlckNvbnRpbm91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkOworICAgIFdLVGV4dENoZWNrZXJTZXRDb250aW5vdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZDsKKyAgICBXS1RleHRDaGVja2VyR3JhbW1hckNoZWNraW5nRW5hYmxl
ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyQ2hlY2tpbmdFbmFi
bGVkOworICAgIFdLVGV4dENoZWNrZXJTZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQ7CisgICAg
V0tUZXh0Q2hlY2tlclVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5pcXVlU3BlbGxEb2N1bWVudFRhZzsKKyAgICBXS1RleHRDaGVja2Vy
Q2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnOworICAgIFdLVGV4dENoZWNrZXJDaGVja1NwZWxs
aW5nT2ZTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrU3Bl
bGxpbmdPZlN0cmluZzsKKyAgICBXS1RleHRDaGVja2VyQ2hlY2tHcmFtbWFyT2ZTdHJpbmcgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0dyYW1tYXJPZlN0cmluZzsK
KyAgICBXS1RleHRDaGVja2VyU3BlbGxpbmdVSUlzU2hvd2luZyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzcGVsbGluZ1VJSXNTaG93aW5nOworICAgIFdLVGV4dENoZWNr
ZXJUb2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmc7CisgICAgV0tUZXh0Q2hlY2tlclVwZGF0ZVNw
ZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRl
U3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZDsKKyAgICBXS1RleHRDaGVja2VyVXBkYXRlU3Bl
bGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVT
cGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmc7CisgICAgV0tUZXh0Q2hlY2tlckd1ZXNzZXNGb3JX
b3JkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vlc3Nlc0Zv
cldvcmQ7CisgICAgV0tUZXh0Q2hlY2tlckxlYXJuV29yZCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVhcm5Xb3JkOworICAgIFdLVGV4dENoZWNrZXJJ
Z25vcmVXb3JkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlnbm9yZVdvcmQ7Cit9OwordHlwZWRlZiBzdHJ1Y3QgV0tUZXh0Q2hlY2tlckNsaWVudCBXS1Rl
eHRDaGVja2VyQ2xpZW50OworCitlbnVtIHsga1dLVGV4dENoZWNrZXJDbGllbnRDdXJyZW50VmVy
c2lvbiA9IDAgfTsKKworV0tfRVhQT1JUIHZvaWQgV0tUZXh0Q2hlY2tlclNldENsaWVudChjb25z
dCBXS1RleHRDaGVja2VyQ2xpZW50KiBjbGllbnQpOworCitXS19FWFBPUlQgdm9pZCBXS1RleHRD
aGVja2VyQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wpOwor
V0tfRVhQT1JUIHZvaWQgV0tUZXh0Q2hlY2tlckdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNo
YW5nZWQoYm9vbCk7CisKK1dLX0VYUE9SVCB2b2lkIFdLVGV4dENoZWNrZXJDaGVja1NwZWxsaW5n
KFdLUGFnZVJlZiBwYWdlLCBib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKTsKK1dLX0VYUE9SVCB2
b2lkIFdLVGV4dENoZWNrZXJDaGFuZ2VTcGVsbGluZ1RvV29yZChXS1BhZ2VSZWYgcGFnZSwgV0tT
dHJpbmdSZWYgd29yZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRp
ZiAvKiBXS1RleHRDaGVja2VyX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy93aW4vV0tBUElDYXN0V2luLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0Mvd2luL1dLQVBJQ2FzdFdpbi5oCmluZGV4IDI0ODkxZjUuLjViNzFjZjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tBUElDYXN0V2luLmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dpbi9XS0FQSUNhc3RXaW4uaApAQCAt
MzAsMjQgKzMwLDEzIEBACiAjZXJyb3IgIlBsZWFzZSAjaW5jbHVkZSBcIldLQVBJQ2FzdC5oXCIg
aW5zdGVhZCBvZiB0aGlzIGZpbGUgZGlyZWN0bHkuIgogI2VuZGlmCiAKLSNpbmNsdWRlICJXZWJH
cmFtbWFyRGV0YWlsLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0Q2hlY2tlckNsaWVudC5oPgot
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViVmlldzsKIGNsYXNzIFdlYkVkaXRDb21t
YW5kUHJveHk7Ci1jbGFzcyBXZWJUZXh0Q2hlY2tlcjsKIAogV0tfQUREX0FQSV9NQVBQSU5HKFdL
Vmlld1JlZiwgV2ViVmlldykKIFdLX0FERF9BUElfTUFQUElORyhXS0VkaXRDb21tYW5kUmVmLCBX
ZWJFZGl0Q29tbWFuZFByb3h5KQotV0tfQUREX0FQSV9NQVBQSU5HKFdLVGV4dENoZWNrZXJSZWYs
IFdlYlRleHRDaGVja2VyKQotV0tfQUREX0FQSV9NQVBQSU5HKFdLR3JhbW1hckRldGFpbFJlZiwg
V2ViR3JhbW1hckRldGFpbCkKLQotaW5saW5lIFByb3h5aW5nUmVmUHRyPFdlYkdyYW1tYXJEZXRh
aWw+IHRvQVBJKGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCi17
Ci0gICAgcmV0dXJuIFByb3h5aW5nUmVmUHRyPFdlYkdyYW1tYXJEZXRhaWw+KFdlYkdyYW1tYXJE
ZXRhaWw6OmNyZWF0ZShncmFtbWFyRGV0YWlsKSk7Ci19CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLR3Jh
bW1hckRldGFpbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLR3Jh
bW1hckRldGFpbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhYjBmYzQuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dpbi9XS0dyYW1tYXJE
ZXRhaWwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXS0dyYW1tYXJEZXRhaWwuaCIKLQotI2luY2x1
ZGUgIkFQSU9iamVjdC5oIgotI2luY2x1ZGUgIkltbXV0YWJsZUFycmF5LmgiCi0jaW5jbHVkZSAi
V0tBUElDYXN0LmgiCi0jaW5jbHVkZSAiV2ViR3JhbW1hckRldGFpbC5oIgotCi11c2luZyBuYW1l
c3BhY2UgV2ViS2l0OwotCi1XS1R5cGVJRCBXS0dyYW1tYXJEZXRhaWxHZXRUeXBlSUQoKQotewot
ICAgIHJldHVybiB0b0FQSShBUElPYmplY3Q6OlR5cGVHcmFtbWFyRGV0YWlsKTsKLX0KLQotV0tH
cmFtbWFyRGV0YWlsUmVmIFdLR3JhbW1hckRldGFpbENyZWF0ZShpbnQgbG9jYXRpb24sIGludCBs
ZW5ndGgsIFdLQXJyYXlSZWYgZ3Vlc3NlcywgV0tTdHJpbmdSZWYgdXNlckRlc2NyaXB0aW9uKQot
ewotICAgIFJlZlB0cjxXZWJHcmFtbWFyRGV0YWlsPiBkZXRhaWwgPSBXZWJHcmFtbWFyRGV0YWls
OjpjcmVhdGUobG9jYXRpb24sIGxlbmd0aCwgdG9JbXBsKGd1ZXNzZXMpLCB0b1dURlN0cmluZyh1
c2VyRGVzY3JpcHRpb24pKTsKLSAgICByZXR1cm4gdG9BUEkoZGV0YWlsLnJlbGVhc2UoKS5yZWxl
YXNlUmVmKCkpOwotfQotCi1pbnQgV0tHcmFtbWFyRGV0YWlsR2V0TG9jYXRpb24oV0tHcmFtbWFy
RGV0YWlsUmVmIGdyYW1tYXJEZXRhaWxSZWYpCi17Ci0gICAgcmV0dXJuIHRvSW1wbChncmFtbWFy
RGV0YWlsUmVmKS0+bG9jYXRpb24oKTsKLX0KLQotaW50IFdLR3JhbW1hckRldGFpbEdldExlbmd0
aChXS0dyYW1tYXJEZXRhaWxSZWYgZ3JhbW1hckRldGFpbFJlZikKLXsKLSAgICByZXR1cm4gdG9J
bXBsKGdyYW1tYXJEZXRhaWxSZWYpLT5sZW5ndGgoKTsKLX0KLQotV0tBcnJheVJlZiBXS0dyYW1t
YXJEZXRhaWxDb3B5R3Vlc3NlcyhXS0dyYW1tYXJEZXRhaWxSZWYgZ3JhbW1hckRldGFpbFJlZikK
LXsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGdyYW1tYXJEZXRhaWxSZWYpLT5ndWVzc2VzKCku
bGVha1JlZigpKTsKLX0KLQotV0tTdHJpbmdSZWYgV0tHcmFtbWFyRGV0YWlsQ29weVVzZXJEZXNj
cmlwdGlvbihXS0dyYW1tYXJEZXRhaWxSZWYgZ3JhbW1hckRldGFpbFJlZikKLXsKLSAgICByZXR1
cm4gdG9Db3BpZWRBUEkodG9JbXBsKGdyYW1tYXJEZXRhaWxSZWYpLT51c2VyRGVzY3JpcHRpb24o
KSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dL
R3JhbW1hckRldGFpbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dpbi9XS0dy
YW1tYXJEZXRhaWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE4N2NlNi4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLR3JhbW1hckRl
dGFpbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgV0tHcmFtbWFyRGV0YWlsX2gKLSNkZWZpbmUgV0tHcmFtbWFyRGV0YWlsX2gKLQotI2luY2x1
ZGUgPFdlYktpdDIvV0tCYXNlLmg+Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7
Ci0jZW5kaWYKLQotV0tfRVhQT1JUIFdLVHlwZUlEIFdLR3JhbW1hckRldGFpbEdldFR5cGVJRCgp
OwotV0tfRVhQT1JUIFdLR3JhbW1hckRldGFpbFJlZiBXS0dyYW1tYXJEZXRhaWxDcmVhdGUoaW50
IGxvY2F0aW9uLCBpbnQgbGVuZ3RoLCBXS0FycmF5UmVmIGd1ZXNzZXMsIFdLU3RyaW5nUmVmIHVz
ZXJEZXNjcmlwdGlvbik7Ci0KLVdLX0VYUE9SVCBpbnQgV0tHcmFtbWFyRGV0YWlsR2V0TG9jYXRp
b24oV0tHcmFtbWFyRGV0YWlsUmVmIGdyYW1tYXJEZXRhaWxSZWYpOwotV0tfRVhQT1JUIGludCBX
S0dyYW1tYXJEZXRhaWxHZXRMZW5ndGgoV0tHcmFtbWFyRGV0YWlsUmVmIGdyYW1tYXJEZXRhaWxS
ZWYpOwotV0tfRVhQT1JUIFdLQXJyYXlSZWYgV0tHcmFtbWFyRGV0YWlsQ29weUd1ZXNzZXMoV0tH
cmFtbWFyRGV0YWlsUmVmIGdyYW1tYXJEZXRhaWxSZWYpOwotV0tfRVhQT1JUIFdLU3RyaW5nUmVm
IFdLR3JhbW1hckRldGFpbENvcHlVc2VyRGVzY3JpcHRpb24oV0tHcmFtbWFyRGV0YWlsUmVmIGdy
YW1tYXJEZXRhaWxSZWYpOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi0jZW5k
aWYgLyogV0tHcmFtbWFyRGV0YWlsX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy93aW4vV0tUZXh0Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0Mvd2luL1dLVGV4dENoZWNrZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAzMzI5ZGEyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy93aW4vV0tUZXh0Q2hlY2tlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldLVGV4dENoZWNr
ZXIuaCIKLQotI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5o
IgotI2luY2x1ZGUgIldlYlRleHRDaGVja2VyLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
Ci0KLXZvaWQgV0tUZXh0Q2hlY2tlclNldENsaWVudChjb25zdCBXS1RleHRDaGVja2VyQ2xpZW50
KiB3a0NsaWVudCkKLXsKLSAgICBpZiAod2tDbGllbnQgJiYgd2tDbGllbnQtPnZlcnNpb24pCi0g
ICAgICAgIHJldHVybjsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPnNldENsaWVudCh3
a0NsaWVudCk7Ci19Ci0KLXZvaWQgV0tUZXh0Q2hlY2tlckNvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCi17Ci0gICAgV2ViVGV4dENoZWNrZXI6
OnNoYXJlZCgpLT5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoZW5h
YmxlZCk7Ci19Ci0KLXZvaWQgV0tUZXh0Q2hlY2tlckdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0
ZUNoYW5nZWQoYm9vbCBlbmFibGVkKQotewotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+
Z3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChlbmFibGVkKTsKLX0KLQotdm9pZCBX
S1RleHRDaGVja2VyQ2hlY2tTcGVsbGluZyhXS1BhZ2VSZWYgcGFnZSwgYm9vbCBzdGFydEJlZm9y
ZVNlbGVjdGlvbikKLXsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNoZWNrU3BlbGxp
bmcodG9JbXBsKHBhZ2UpLCBzdGFydEJlZm9yZVNlbGVjdGlvbik7Ci19Ci0KLXZvaWQgV0tUZXh0
Q2hlY2tlckNoYW5nZVNwZWxsaW5nVG9Xb3JkKFdLUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiB3
b3JkKQotewotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2hhbmdlU3BlbGxpbmdUb1dv
cmQodG9JbXBsKHBhZ2UpLCB0b1dURlN0cmluZyh3b3JkKSk7Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLVGV4dENoZWNrZXIuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tUZXh0Q2hlY2tlci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA2YTA1ZWQ5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy93aW4vV0tUZXh0Q2hlY2tlci5oCisrKyAvZGV2L251bGwKQEAgLTEsODkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV0tUZXh0Q2hlY2tlcl9oCi0jZGVmaW5lIFdL
VGV4dENoZWNrZXJfaAotCi0jaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KLQotI2lmZGVmIF9f
Y3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0vLyBUZXh0Q2hlY2tlciBDbGllbnQK
LXR5cGVkZWYgYm9vbCAoKldLVGV4dENoZWNrZXJDb250aW5vdXNTcGVsbENoZWNraW5nQWxsb3dl
ZCkoY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Ci10eXBlZGVmIGJvb2wgKCpXS1RleHRDaGVja2Vy
Q29udGlub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpKGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwot
dHlwZWRlZiB2b2lkICgqV0tUZXh0Q2hlY2tlclNldENvbnRpbm91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKShib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwotdHlwZWRlZiBib29s
ICgqV0tUZXh0Q2hlY2tlckdyYW1tYXJDaGVja2luZ0VuYWJsZWQpKGNvbnN0IHZvaWQgKmNsaWVu
dEluZm8pOwotdHlwZWRlZiB2b2lkICgqV0tUZXh0Q2hlY2tlclNldEdyYW1tYXJDaGVja2luZ0Vu
YWJsZWQpKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Ci10eXBlZGVmIHVp
bnQ2NF90ICgqV0tUZXh0Q2hlY2tlclVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcpKFdLUGFnZVJlZiBw
YWdlLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKLXR5cGVkZWYgdm9pZCAoKldLVGV4dENoZWNr
ZXJDbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKSh1aW50NjRfdCB0YWcsIGNvbnN0IHZvaWQgKmNs
aWVudEluZm8pOwotdHlwZWRlZiB2b2lkICgqV0tUZXh0Q2hlY2tlckNoZWNrU3BlbGxpbmdPZlN0
cmluZykodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0ZXh0LCBpbnQzMl90KiBtaXNzcGVsbGlu
Z0xvY2F0aW9uLCBpbnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCwgY29uc3Qgdm9pZCAqY2xpZW50
SW5mbyk7Ci10eXBlZGVmIHZvaWQgKCpXS1RleHRDaGVja2VyQ2hlY2tHcmFtbWFyT2ZTdHJpbmcp
KHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgV0tBcnJheVJlZiogZ3JhbW1hckRldGFp
bHMsIGludDMyX3QqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCogYmFkR3JhbW1hckxlbmd0
aCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Ci10eXBlZGVmIGJvb2wgKCpXS1RleHRDaGVja2Vy
U3BlbGxpbmdVSUlzU2hvd2luZykoY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Ci10eXBlZGVmIHZv
aWQgKCpXS1RleHRDaGVja2VyVG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZykoY29uc3Qgdm9pZCAq
Y2xpZW50SW5mbyk7Ci10eXBlZGVmIHZvaWQgKCpXS1RleHRDaGVja2VyVXBkYXRlU3BlbGxpbmdV
SVdpdGhNaXNzcGVsbGVkV29yZCkodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiBtaXNzcGVsbGVk
V29yZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Ci10eXBlZGVmIHZvaWQgKCpXS1RleHRDaGVj
a2VyVXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKSh1aW50NjRfdCB0YWcsIFdLU3Ry
aW5nUmVmIGJhZEdyYW1tYXJQaHJhc2UsIFdLR3JhbW1hckRldGFpbFJlZiBncmFtbWFyRGV0YWls
LCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKLXR5cGVkZWYgV0tBcnJheVJlZiAoKldLVGV4dENo
ZWNrZXJHdWVzc2VzRm9yV29yZCkodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25z
dCB2b2lkICpjbGllbnRJbmZvKTsKLXR5cGVkZWYgdm9pZCAoKldLVGV4dENoZWNrZXJMZWFybldv
cmQpKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5m
byk7Ci10eXBlZGVmIHZvaWQgKCpXS1RleHRDaGVja2VySWdub3JlV29yZCkodWludDY0X3QgdGFn
LCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKLQotc3RydWN0IFdL
VGV4dENoZWNrZXJDbGllbnQgewotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb247Ci0gICAgY29u
c3Qgdm9pZCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2xpZW50SW5mbzsKLSAgICBXS1RleHRDaGVja2VyQ29udGlub3VzU3BlbGxD
aGVja2luZ0FsbG93ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51b3VzU3Bl
bGxDaGVja2luZ0FsbG93ZWQ7Ci0gICAgV0tUZXh0Q2hlY2tlckNvbnRpbm91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkOwotICAgIFdLVGV4dENoZWNrZXJTZXRDb250aW5vdXNTcGVsbENoZWNraW5n
RW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZDsKLSAgICBXS1RleHRDaGVja2VyR3JhbW1hckNoZWNraW5nRW5hYmxlZCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyQ2hlY2tpbmdFbmFibGVkOwot
ICAgIFdLVGV4dENoZWNrZXJTZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQ7Ci0gICAgV0tUZXh0
Q2hlY2tlclVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5pcXVlU3BlbGxEb2N1bWVudFRhZzsKLSAgICBXS1RleHRDaGVja2VyQ2xvc2VT
cGVsbERvY3VtZW50V2l0aFRhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9z
ZVNwZWxsRG9jdW1lbnRXaXRoVGFnOwotICAgIFdLVGV4dENoZWNrZXJDaGVja1NwZWxsaW5nT2ZT
dHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrU3BlbGxpbmdP
ZlN0cmluZzsKLSAgICBXS1RleHRDaGVja2VyQ2hlY2tHcmFtbWFyT2ZTdHJpbmcgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0dyYW1tYXJPZlN0cmluZzsKLSAgICBX
S1RleHRDaGVja2VyU3BlbGxpbmdVSUlzU2hvd2luZyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzcGVsbGluZ1VJSXNTaG93aW5nOwotICAgIFdLVGV4dENoZWNrZXJUb2dn
bGVTcGVsbGluZ1VJSXNTaG93aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
Z2dsZVNwZWxsaW5nVUlJc1Nob3dpbmc7Ci0gICAgV0tUZXh0Q2hlY2tlclVwZGF0ZVNwZWxsaW5n
VUlXaXRoTWlzc3BlbGxlZFdvcmQgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3BlbGxp
bmdVSVdpdGhNaXNzcGVsbGVkV29yZDsKLSAgICBXS1RleHRDaGVja2VyVXBkYXRlU3BlbGxpbmdV
SVdpdGhHcmFtbWFyU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTcGVsbGlu
Z1VJV2l0aEdyYW1tYXJTdHJpbmc7Ci0gICAgV0tUZXh0Q2hlY2tlckd1ZXNzZXNGb3JXb3JkICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vlc3Nlc0ZvcldvcmQ7
Ci0gICAgV0tUZXh0Q2hlY2tlckxlYXJuV29yZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGVhcm5Xb3JkOwotICAgIFdLVGV4dENoZWNrZXJJZ25vcmVX
b3JkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9y
ZVdvcmQ7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgV0tUZXh0Q2hlY2tlckNsaWVudCBXS1RleHRDaGVj
a2VyQ2xpZW50OwotCi1lbnVtIHsga1dLVGV4dENoZWNrZXJDbGllbnRDdXJyZW50VmVyc2lvbiA9
IDAgfTsKLQotV0tfRVhQT1JUIHZvaWQgV0tUZXh0Q2hlY2tlclNldENsaWVudChjb25zdCBXS1Rl
eHRDaGVja2VyQ2xpZW50KiBjbGllbnQpOwotCi1XS19FWFBPUlQgdm9pZCBXS1RleHRDaGVja2Vy
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wpOwotV0tfRVhQ
T1JUIHZvaWQgV0tUZXh0Q2hlY2tlckdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQo
Ym9vbCk7Ci0KLVdLX0VYUE9SVCB2b2lkIFdLVGV4dENoZWNrZXJDaGVja1NwZWxsaW5nKFdLUGFn
ZVJlZiBwYWdlLCBib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKTsKLVdLX0VYUE9SVCB2b2lkIFdL
VGV4dENoZWNrZXJDaGFuZ2VTcGVsbGluZ1RvV29yZChXS1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdS
ZWYgd29yZCk7Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLSNlbmRpZiAvKiBX
S1RleHRDaGVja2VyX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJHcmFtbWFyRGV0YWlsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJHcmFtbWFy
RGV0YWlsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGY1MjhjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkdyYW1tYXJEZXRh
aWwuY3BwCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViR3JhbW1hckRldGFpbC5oIgorCisjaW5jbHVkZSAiSW1tdXRhYmxlQXJy
YXkuaCIKKyNpbmNsdWRlICJXS0dyYW1tYXJEZXRhaWwuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcu
aCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NSZWZQdHI8V2ViR3JhbW1hckRldGFpbD4g
V2ViR3JhbW1hckRldGFpbDo6Y3JlYXRlKGludCBsb2NhdGlvbiwgaW50IGxlbmd0aCwgSW1tdXRh
YmxlQXJyYXkqIGd1ZXNzZXMsIGNvbnN0IFN0cmluZyYgdXNlckRlc2NyaXB0aW9uKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgV2ViR3JhbW1hckRldGFpbChsb2NhdGlvbiwgbGVuZ3RoLCBn
dWVzc2VzLCB1c2VyRGVzY3JpcHRpb24pKTsKK30KKworUGFzc1JlZlB0cjxXZWJHcmFtbWFyRGV0
YWlsPiBXZWJHcmFtbWFyRGV0YWlsOjpjcmVhdGUoY29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFp
bCYgZ3JhbW1hckRldGFpbCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdyYW1tYXJE
ZXRhaWwoZ3JhbW1hckRldGFpbCkpOworfQorCitXZWJHcmFtbWFyRGV0YWlsOjpXZWJHcmFtbWFy
RGV0YWlsKGludCBsb2NhdGlvbiwgaW50IGxlbmd0aCwgSW1tdXRhYmxlQXJyYXkqIGd1ZXNzZXMs
IGNvbnN0IFN0cmluZyYgdXNlckRlc2NyaXB0aW9uKQoreworICAgIG1fZ3JhbW1hckRldGFpbC5s
b2NhdGlvbiA9IGxvY2F0aW9uOworICAgIG1fZ3JhbW1hckRldGFpbC5sZW5ndGggPSBsZW5ndGg7
CisKKyAgICBzaXplX3QgbnVtR3Vlc3NlcyA9IGd1ZXNzZXMtPnNpemUoKTsKKyAgICBtX2dyYW1t
YXJEZXRhaWwuZ3Vlc3Nlcy5yZXNlcnZlQ2FwYWNpdHkobnVtR3Vlc3Nlcyk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBudW1HdWVzc2VzOyArK2kpCisgICAgICAgIG1fZ3JhbW1hckRldGFp
bC5ndWVzc2VzLnVuY2hlY2tlZEFwcGVuZChndWVzc2VzLT5hdDxXZWJTdHJpbmc+KGkpLT5zdHJp
bmcoKSk7CisKKyAgICBtX2dyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uID0gdXNlckRlc2Ny
aXB0aW9uOworfQorCitQYXNzUmVmUHRyPEltbXV0YWJsZUFycmF5PiBXZWJHcmFtbWFyRGV0YWls
OjpndWVzc2VzKCkgY29uc3QKK3sKKyAgICBzaXplX3QgbnVtR3Vlc3NlcyA9IG1fZ3JhbW1hckRl
dGFpbC5ndWVzc2VzLnNpemUoKTsKKyAgICBWZWN0b3I8UmVmUHRyPEFQSU9iamVjdD4gPiB3a0d1
ZXNzZXMobnVtR3Vlc3Nlcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUd1ZXNz
ZXM7ICsraSkKKyAgICAgICAgd2tHdWVzc2VzW2ldID0gV2ViU3RyaW5nOjpjcmVhdGUobV9ncmFt
bWFyRGV0YWlsLmd1ZXNzZXNbaV0pOworICAgIHJldHVybiBJbW11dGFibGVBcnJheTo6YWRvcHQo
d2tHdWVzc2VzKTsKK30KKworV2ViR3JhbW1hckRldGFpbDo6V2ViR3JhbW1hckRldGFpbChjb25z
dCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0YWlsKQorICAgIDogbV9ncmFtbWFy
RGV0YWlsKGdyYW1tYXJEZXRhaWwpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkdyYW1tYXJEZXRhaWwuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJHcmFtbWFyRGV0YWlsLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZmY3OWI1YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJHcmFtbWFyRGV0YWlsLmgKQEAgLTAsMCArMSw2MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgV2ViR3JhbW1hckRldGFpbF9oCisjZGVmaW5lIFdlYkdyYW1tYXJE
ZXRhaWxfaAorCisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0
Q2hlY2tlckNsaWVudC5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEltbXV0YWJsZUFy
cmF5OworCitjbGFzcyBXZWJHcmFtbWFyRGV0YWlsIDogcHVibGljIEFQSU9iamVjdCB7CitwdWJs
aWM6CisgICAgc3RhdGljIGNvbnN0IFR5cGUgQVBJVHlwZSA9IFR5cGVHcmFtbWFyRGV0YWlsOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdyYW1tYXJEZXRhaWw+IGNyZWF0ZShpbnQgbG9jYXRp
b24sIGludCBsZW5ndGgsIEltbXV0YWJsZUFycmF5KiBndWVzc2VzLCBjb25zdCBTdHJpbmcmIHVz
ZXJEZXNjcmlwdGlvbik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR3JhbW1hckRldGFpbD4g
Y3JlYXRlKGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKTsKKworICAgIGludCBsb2NhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhbW1hckRldGFpbC5sb2NhdGlvbjsgfQorICAgIGludCBs
ZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2dyYW1tYXJEZXRhaWwubGVuZ3RoOyB9CisgICAgUGFz
c1JlZlB0cjxJbW11dGFibGVBcnJheT4gZ3Vlc3NlcygpIGNvbnN0OworICAgIGNvbnN0IFN0cmlu
ZyYgdXNlckRlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ncmFtbWFyRGV0YWlsLnVzZXJE
ZXNjcmlwdGlvbjsgfQorCisgICAgY29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYgZ3JhbW1h
ckRldGFpbCgpIHsgcmV0dXJuIG1fZ3JhbW1hckRldGFpbDsgfQorCitwcml2YXRlOgorICAgIFdl
YkdyYW1tYXJEZXRhaWwoaW50IGxvY2F0aW9uLCBpbnQgbGVuZ3RoLCBJbW11dGFibGVBcnJheSog
Z3Vlc3NlcywgY29uc3QgU3RyaW5nJiB1c2VyRGVzY3JpcHRpb24pOworICAgIFdlYkdyYW1tYXJE
ZXRhaWwoY29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYpOworCisgICAgdmlydHVhbCBUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBBUElUeXBlOyB9CisKKyAgICBXZWJDb3JlOjpHcmFtbWFy
RGV0YWlsIG1fZ3JhbW1hckRldGFpbDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gV2ViR3JhbW1hckRldGFpbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViVGV4dENoZWNrZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlRleHRDaGVja2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzYx
ODQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlRleHRD
aGVja2VyLmNwcApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYlRleHRDaGVja2VyLmgiCisKKyNpbmNsdWRlICJUZXh0Q2hlY2tl
ci5oIgorI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJUZXh0Q2hl
Y2tlciogV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpCit7CisgICAgc3RhdGljIFdlYlRleHRDaGVj
a2VyKiB0ZXh0Q2hlY2tlciA9IGFkb3B0UmVmKG5ldyBXZWJUZXh0Q2hlY2tlcikubGVha1JlZigp
OworICAgIHJldHVybiB0ZXh0Q2hlY2tlcjsKK30KKworV2ViVGV4dENoZWNrZXI6OldlYlRleHRD
aGVja2VyKCkKK3sKK30KKwordm9pZCBXZWJUZXh0Q2hlY2tlcjo6c2V0Q2xpZW50KGNvbnN0IFdL
VGV4dENoZWNrZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICBtX2NsaWVudC5pbml0aWFsaXplKGNs
aWVudCk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZVN0YXRlRm9yQWxsV2ViUHJvY2Vzc2VzKCkK
K3sKKyAgICBjb25zdCBWZWN0b3I8V2ViQ29udGV4dCo+JiBjb250ZXh0cyA9IFdlYkNvbnRleHQ6
OmFsbENvbnRleHRzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb250ZXh0cy5zaXpl
KCk7ICsraSkgeworICAgICAgICBXZWJQcm9jZXNzUHJveHkqIHdlYlByb2Nlc3MgPSBjb250ZXh0
c1tpXS0+cHJvY2VzcygpOworICAgICAgICBpZiAoIXdlYlByb2Nlc3MpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgd2ViUHJvY2Vzcy0+dXBkYXRlVGV4dENoZWNrZXJTdGF0ZSgpOwor
ICAgIH0KK30KKwordm9pZCBXZWJUZXh0Q2hlY2tlcjo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBUZXh0Q2hlY2tlcjo6Y29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJsZWQpOworICAgIHVw
ZGF0ZVN0YXRlRm9yQWxsV2ViUHJvY2Vzc2VzKCk7Cit9CisKK3ZvaWQgV2ViVGV4dENoZWNrZXI6
OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCBlbmFibGVkKQoreworICAg
IFRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJsZWQp
OworICAgIHVwZGF0ZVN0YXRlRm9yQWxsV2ViUHJvY2Vzc2VzKCk7Cit9CisKK3ZvaWQgV2ViVGV4
dENoZWNrZXI6OmNoZWNrU3BlbGxpbmcoY29uc3QgV2ViUGFnZVByb3h5KiBwYWdlLCBib29sIHN0
YXJ0QmVmb3JlU2VsZWN0aW9uKQoreworICAgIHBhZ2UtPmFkdmFuY2VUb05leHRNaXNzcGVsbGlu
ZyhzdGFydEJlZm9yZVNlbGVjdGlvbik7Cit9CisKK3ZvaWQgV2ViVGV4dENoZWNrZXI6OmNoYW5n
ZVNwZWxsaW5nVG9Xb3JkKGNvbnN0IFdlYlBhZ2VQcm94eSogcGFnZSwgY29uc3QgU3RyaW5nJiB0
ZXh0KQoreworICAgIHBhZ2UtPmNoYW5nZVNwZWxsaW5nVG9Xb3JkKHRleHQpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJUZXh0Q2hlY2tlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlRleHRDaGVja2Vy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjNTc0YwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJUZXh0Q2hlY2tlci5oCkBAIC0w
LDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlRleHRDaGVja2VyX2gKKyNkZWZp
bmUgV2ViVGV4dENoZWNrZXJfaAorCisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAi
V0tUZXh0Q2hlY2tlci5oIgorI2luY2x1ZGUgIldlYlRleHRDaGVja2VyQ2xpZW50LmgiCisjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBh
Z2VQcm94eTsKKworY2xhc3MgV2ViVGV4dENoZWNrZXIgOiBwdWJsaWMgQVBJT2JqZWN0IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgVHlwZSBBUElUeXBlID0gVHlwZVRleHRDaGVja2VyOwor
CisgICAgc3RhdGljIFdlYlRleHRDaGVja2VyKiBzaGFyZWQoKTsKKworICAgIHZvaWQgc2V0Q2xp
ZW50KGNvbnN0IFdLVGV4dENoZWNrZXJDbGllbnQqKTsKKyAgICBXZWJUZXh0Q2hlY2tlckNsaWVu
dCYgY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KKworICAgIHZvaWQgY29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wpOworICAgIHZvaWQgZ3JhbW1hckNo
ZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sKTsKKworICAgIHZvaWQgY2hlY2tTcGVsbGlu
Zyhjb25zdCBXZWJQYWdlUHJveHkqLCBib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKTsKKyAgICB2
b2lkIGNoYW5nZVNwZWxsaW5nVG9Xb3JkKGNvbnN0IFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0cmlu
ZyYpOworCitwcml2YXRlOgorICAgIFdlYlRleHRDaGVja2VyKCk7CisKKyAgICB2aXJ0dWFsIFR5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIEFQSVR5cGU7IH0KKworICAgIFdlYlRleHRDaGVja2Vy
Q2xpZW50IG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBXZWJUZXh0Q2hlY2tlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViVGV4dENoZWNrZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlRl
eHRDaGVja2VyQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44
NmU1MmM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlRl
eHRDaGVja2VyQ2xpZW50LmNwcApAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJUZXh0Q2hlY2tlckNsaWVudC5oIgorCisjaW5j
bHVkZSAiSW1tdXRhYmxlQXJyYXkuaCIKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRl
ICJXS1NoYXJlZEFQSUNhc3QuaCIKKyNpbmNsdWRlICJXZWJHcmFtbWFyRGV0YWlsLmgiCisjaW5j
bHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitib29sIFdlYlRleHRDaGVja2VyQ2xpZW50Ojpjb250aW51
b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoKQoreworICAgIGlmICghbV9jbGllbnQuY29udGludW91
c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gbV9jbGllbnQuY29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKG1fY2xpZW50LmNsaWVu
dEluZm8pOworfQorCitib29sIFdlYlRleHRDaGVja2VyQ2xpZW50Ojpjb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQoKQoreworICAgIGlmICghbV9jbGllbnQuY29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9jbGll
bnQuY29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKG1fY2xpZW50LmNsaWVudEluZm8pOwor
fQorCit2b2lkIFdlYlRleHRDaGVja2VyQ2xpZW50OjpzZXRDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlmICghbV9jbGllbnQuc2V0Q29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaWVudC5z
ZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoZW5hYmxlZCwgbV9jbGllbnQuY2xpZW50
SW5mbyk7Cit9CisKK2Jvb2wgV2ViVGV4dENoZWNrZXJDbGllbnQ6OmdyYW1tYXJDaGVja2luZ0Vu
YWJsZWQoKQoreworICAgIGlmICghbV9jbGllbnQuZ3JhbW1hckNoZWNraW5nRW5hYmxlZCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1fY2xpZW50LmdyYW1tYXJDaGVja2lu
Z0VuYWJsZWQobV9jbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK3ZvaWQgV2ViVGV4dENoZWNrZXJD
bGllbnQ6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlm
ICghbV9jbGllbnQuc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9jbGllbnQuc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChlbmFibGVkLCBtX2NsaWVu
dC5jbGllbnRJbmZvKTsKK30KKwordWludDY0X3QgV2ViVGV4dENoZWNrZXJDbGllbnQ6OnVuaXF1
ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5KiBwYWdlKQoreworICAgIGlmICghbV9jbGll
bnQudW5pcXVlU3BlbGxEb2N1bWVudFRhZykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1
cm4gbV9jbGllbnQudW5pcXVlU3BlbGxEb2N1bWVudFRhZyh0b0FQSShwYWdlKSwgbV9jbGllbnQu
Y2xpZW50SW5mbyk7Cit9CisKK3ZvaWQgV2ViVGV4dENoZWNrZXJDbGllbnQ6OmNsb3NlU3BlbGxE
b2N1bWVudFdpdGhUYWcodWludDY0X3QgdGFnKQoreworICAgIGlmICghbV9jbGllbnQuY2xvc2VT
cGVsbERvY3VtZW50V2l0aFRhZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQuY2xv
c2VTcGVsbERvY3VtZW50V2l0aFRhZyh0YWcsIG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCit2
b2lkIFdlYlRleHRDaGVja2VyQ2xpZW50OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcodWludDY0X3Qg
dGFnLCBjb25zdCBTdHJpbmcmIHRleHQsIGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGlu
dDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3RoKQoreworICAgIGlmICghbV9jbGllbnQuY2hlY2tTcGVs
bGluZ09mU3RyaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaWVudC5jaGVja1NwZWxs
aW5nT2ZTdHJpbmcodGFnLCB0b0FQSSh0ZXh0LmltcGwoKSksICZtaXNzcGVsbGluZ0xvY2F0aW9u
LCAmbWlzc3BlbGxpbmdMZW5ndGgsIG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCit2b2lkIFdl
YlRleHRDaGVja2VyQ2xpZW50OjpjaGVja0dyYW1tYXJPZlN0cmluZyh1aW50NjRfdCB0YWcsIGNv
bnN0IFN0cmluZyYgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiBncmFtbWFy
RGV0YWlscywgaW50MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFy
TGVuZ3RoKQoreworICAgIGlmICghbV9jbGllbnQuY2hlY2tHcmFtbWFyT2ZTdHJpbmcpCisgICAg
ICAgIHJldHVybjsKKworICAgIFdLQXJyYXlSZWYgd2tHcmFtbWFyRGV0YWlsc1JlZiA9IDA7Cisg
ICAgbV9jbGllbnQuY2hlY2tHcmFtbWFyT2ZTdHJpbmcodGFnLCB0b0FQSSh0ZXh0LmltcGwoKSks
ICZ3a0dyYW1tYXJEZXRhaWxzUmVmLCAmYmFkR3JhbW1hckxvY2F0aW9uLCAmYmFkR3JhbW1hckxl
bmd0aCwgbV9jbGllbnQuY2xpZW50SW5mbyk7CisKKyAgICBSZWZQdHI8SW1tdXRhYmxlQXJyYXk+
IHdrR3JhbW1hckRldGFpbHMgPSBhZG9wdFJlZih0b0ltcGwod2tHcmFtbWFyRGV0YWlsc1JlZikp
OworICAgIHNpemVfdCBudW1HcmFtbWFyRGV0YWlscyA9IHdrR3JhbW1hckRldGFpbHMtPnNpemUo
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUdyYW1tYXJEZXRhaWxzOyArK2kpCisg
ICAgICAgIGdyYW1tYXJEZXRhaWxzLmFwcGVuZCh3a0dyYW1tYXJEZXRhaWxzLT5hdDxXZWJHcmFt
bWFyRGV0YWlsPihpKS0+Z3JhbW1hckRldGFpbCgpKTsKK30KKworYm9vbCBXZWJUZXh0Q2hlY2tl
ckNsaWVudDo6c3BlbGxpbmdVSUlzU2hvd2luZygpCit7CisgICAgaWYgKCFtX2NsaWVudC5zcGVs
bGluZ1VJSXNTaG93aW5nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9j
bGllbnQuc3BlbGxpbmdVSUlzU2hvd2luZyhtX2NsaWVudC5jbGllbnRJbmZvKTsKK30KKwordm9p
ZCBXZWJUZXh0Q2hlY2tlckNsaWVudDo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpCit7Cisg
ICAgaWYgKCFtX2NsaWVudC50b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKQorICAgICAgICByZXR1
cm47CisKKyAgICByZXR1cm4gbV9jbGllbnQudG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZyhtX2Ns
aWVudC5jbGllbnRJbmZvKTsKK30KKwordm9pZCBXZWJUZXh0Q2hlY2tlckNsaWVudDo6dXBkYXRl
U3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYg
bWlzc3BlbGxlZFdvcmQpCit7CisgICAgaWYgKCFtX2NsaWVudC51cGRhdGVTcGVsbGluZ1VJV2l0
aE1pc3NwZWxsZWRXb3JkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaWVudC51cGRhdGVT
cGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHRhZywgdG9BUEkobWlzc3BlbGxlZFdvcmQuaW1w
bCgpKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK3ZvaWQgV2ViVGV4dENoZWNrZXJDbGll
bnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyh1aW50NjRfdCB0YWcsIGNvbnN0
IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYg
Z3JhbW1hckRldGFpbCkKK3sKKyAgICBpZiAoIW1fY2xpZW50LnVwZGF0ZVNwZWxsaW5nVUlXaXRo
R3JhbW1hclN0cmluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQudXBkYXRlU3Bl
bGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKHRhZywgdG9BUEkoYmFkR3JhbW1hclBocmFzZS5pbXBs
KCkpLCB0b0FQSShncmFtbWFyRGV0YWlsKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK3Zv
aWQgV2ViVGV4dENoZWNrZXJDbGllbnQ6Omd1ZXNzZXNGb3JXb3JkKHVpbnQ2NF90IHRhZywgY29u
c3QgU3RyaW5nJiB3b3JkLCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKK3sKKyAgICBpZiAoIW1f
Y2xpZW50Lmd1ZXNzZXNGb3JXb3JkKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1t
dXRhYmxlQXJyYXk+IHdrR3Vlc3NlcyA9IGFkb3B0UmVmKHRvSW1wbChtX2NsaWVudC5ndWVzc2Vz
Rm9yV29yZCh0YWcsIHRvQVBJKHdvcmQuaW1wbCgpKSwgbV9jbGllbnQuY2xpZW50SW5mbykpKTsK
KyAgICBzaXplX3QgbnVtR3Vlc3NlcyA9IHdrR3Vlc3Nlcy0+c2l6ZSgpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbnVtR3Vlc3NlczsgKytpKQorICAgICAgICBndWVzc2VzLmFwcGVuZCh3
a0d1ZXNzZXMtPmF0PFdlYlN0cmluZz4oaSktPnN0cmluZygpKTsKK30KKwordm9pZCBXZWJUZXh0
Q2hlY2tlckNsaWVudDo6bGVhcm5Xb3JkKHVpbnQ2NF90IHRhZywgY29uc3QgU3RyaW5nJiB3b3Jk
KQoreworICAgIGlmICghbV9jbGllbnQubGVhcm5Xb3JkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2NsaWVudC5sZWFybldvcmQodGFnLCB0b0FQSSh3b3JkLmltcGwoKSksIG1fY2xpZW50LmNs
aWVudEluZm8pOworfQorCit2b2lkIFdlYlRleHRDaGVja2VyQ2xpZW50OjppZ25vcmVXb3JkKHVp
bnQ2NF90IHRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQoreworICAgIGlmICghbV9jbGllbnQuaWdu
b3JlV29yZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQuaWdub3JlV29yZCh0YWcs
IHRvQVBJKHdvcmQuaW1wbCgpKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlRl
eHRDaGVja2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVGV4dENoZWNr
ZXJDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjUwMDNkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlRleHRDaGVja2Vy
Q2xpZW50LmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVGV4dENo
ZWNrZXJDbGllbnRfaAorI2RlZmluZSBXZWJUZXh0Q2hlY2tlckNsaWVudF9oCisKKyNpbmNsdWRl
ICJBUElDbGllbnQuaCIKKyNpbmNsdWRlICJXS1RleHRDaGVja2VyLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9UZXh0Q2hlY2tlckNsaWVudC5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFn
ZVByb3h5OworCitjbGFzcyBXZWJUZXh0Q2hlY2tlckNsaWVudCA6IHB1YmxpYyBBUElDbGllbnQ8
V0tUZXh0Q2hlY2tlckNsaWVudCwga1dLVGV4dENoZWNrZXJDbGllbnRDdXJyZW50VmVyc2lvbj4g
eworcHVibGljOgorICAgIGJvb2wgY29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCk7Cisg
ICAgYm9vbCBjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKKyAgICB2b2lkIHNldENv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sKTsKKyAgICBib29sIGdyYW1tYXJDaGVj
a2luZ0VuYWJsZWQoKTsKKyAgICB2b2lkIHNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCk7
CisgICAgdWludDY0X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqKTsKKyAg
ICB2b2lkIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodWludDY0X3QpOworICAgIHZvaWQgY2hl
Y2tTcGVsbGluZ09mU3RyaW5nKHVpbnQ2NF90IHRhZywgY29uc3QgU3RyaW5nJiB0ZXh0LCBpbnQz
Ml90JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCk7Cisg
ICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYg
dGV4dCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50MzJfdCYgYmFkR3JhbW1h
ckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKTsKKyAgICBib29sIHNwZWxsaW5n
VUlJc1Nob3dpbmcoKTsKKyAgICB2b2lkIHRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKKyAg
ICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQodWludDY0X3QgdGFnLCBj
b25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKTsKKyAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlX
aXRoR3JhbW1hclN0cmluZyh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBo
cmFzZSwgY29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYpOworICAgIHZvaWQgZ3Vlc3Nlc0Zv
cldvcmQodWludDY0X3QgdGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIFZlY3RvcjxTdHJpbmc+JiBn
dWVzc2VzKTsKKyAgICB2b2lkIGxlYXJuV29yZCh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYg
d29yZCk7CisgICAgdm9pZCBpZ25vcmVXb3JkKHVpbnQ2NF90IHRhZywgY29uc3QgU3RyaW5nJiB3
b3JkKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViVGV4dENo
ZWNrZXJDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9X
ZWJHcmFtbWFyRGV0YWlsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViR3Jh
bW1hckRldGFpbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkZjUyOGMuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJHcmFtbWFyRGV0YWls
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViR3JhbW1hckRldGFpbC5oIgotCi0jaW5jbHVkZSAi
SW1tdXRhYmxlQXJyYXkuaCIKLSNpbmNsdWRlICJXS0dyYW1tYXJEZXRhaWwuaCIKLSNpbmNsdWRl
ICJXZWJTdHJpbmcuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVBhc3NSZWZQdHI8V2ViR3Jh
bW1hckRldGFpbD4gV2ViR3JhbW1hckRldGFpbDo6Y3JlYXRlKGludCBsb2NhdGlvbiwgaW50IGxl
bmd0aCwgSW1tdXRhYmxlQXJyYXkqIGd1ZXNzZXMsIGNvbnN0IFN0cmluZyYgdXNlckRlc2NyaXB0
aW9uKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR3JhbW1hckRldGFpbChsb2NhdGlv
biwgbGVuZ3RoLCBndWVzc2VzLCB1c2VyRGVzY3JpcHRpb24pKTsKLX0KLQotUGFzc1JlZlB0cjxX
ZWJHcmFtbWFyRGV0YWlsPiBXZWJHcmFtbWFyRGV0YWlsOjpjcmVhdGUoY29uc3QgV2ViQ29yZTo6
R3JhbW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFdlYkdyYW1tYXJEZXRhaWwoZ3JhbW1hckRldGFpbCkpOwotfQotCi1XZWJHcmFtbWFyRGV0YWls
OjpXZWJHcmFtbWFyRGV0YWlsKGludCBsb2NhdGlvbiwgaW50IGxlbmd0aCwgSW1tdXRhYmxlQXJy
YXkqIGd1ZXNzZXMsIGNvbnN0IFN0cmluZyYgdXNlckRlc2NyaXB0aW9uKQotewotICAgIG1fZ3Jh
bW1hckRldGFpbC5sb2NhdGlvbiA9IGxvY2F0aW9uOwotICAgIG1fZ3JhbW1hckRldGFpbC5sZW5n
dGggPSBsZW5ndGg7Ci0KLSAgICBzaXplX3QgbnVtR3Vlc3NlcyA9IGd1ZXNzZXMtPnNpemUoKTsK
LSAgICBtX2dyYW1tYXJEZXRhaWwuZ3Vlc3Nlcy5yZXNlcnZlQ2FwYWNpdHkobnVtR3Vlc3Nlcyk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HdWVzc2VzOyArK2kpCi0gICAgICAgIG1f
Z3JhbW1hckRldGFpbC5ndWVzc2VzLnVuY2hlY2tlZEFwcGVuZChndWVzc2VzLT5hdDxXZWJTdHJp
bmc+KGkpLT5zdHJpbmcoKSk7Ci0KLSAgICBtX2dyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9u
ID0gdXNlckRlc2NyaXB0aW9uOwotfQotCi1QYXNzUmVmUHRyPEltbXV0YWJsZUFycmF5PiBXZWJH
cmFtbWFyRGV0YWlsOjpndWVzc2VzKCkgY29uc3QKLXsKLSAgICBzaXplX3QgbnVtR3Vlc3NlcyA9
IG1fZ3JhbW1hckRldGFpbC5ndWVzc2VzLnNpemUoKTsKLSAgICBWZWN0b3I8UmVmUHRyPEFQSU9i
amVjdD4gPiB3a0d1ZXNzZXMobnVtR3Vlc3Nlcyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bUd1ZXNzZXM7ICsraSkKLSAgICAgICAgd2tHdWVzc2VzW2ldID0gV2ViU3RyaW5nOjpj
cmVhdGUobV9ncmFtbWFyRGV0YWlsLmd1ZXNzZXNbaV0pOwotICAgIHJldHVybiBJbW11dGFibGVB
cnJheTo6YWRvcHQod2tHdWVzc2VzKTsKLX0KLQotV2ViR3JhbW1hckRldGFpbDo6V2ViR3JhbW1h
ckRldGFpbChjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0YWlsKQotICAg
IDogbV9ncmFtbWFyRGV0YWlsKGdyYW1tYXJEZXRhaWwpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJHcmFt
bWFyRGV0YWlsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYkdyYW1tYXJEZXRh
aWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY3OWI1Yy4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYkdyYW1tYXJEZXRhaWwuaAorKysgL2Rl
di9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYkdyYW1tYXJE
ZXRhaWxfaAotI2RlZmluZSBXZWJHcmFtbWFyRGV0YWlsX2gKLQotI2luY2x1ZGUgIkFQSU9iamVj
dC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENoZWNrZXJDbGllbnQuaD4KLSNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1jbGFzcyBJbW11dGFibGVBcnJheTsKLQotY2xhc3MgV2ViR3JhbW1hckRldGFp
bCA6IHB1YmxpYyBBUElPYmplY3QgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBUeXBlIEFQ
SVR5cGUgPSBUeXBlR3JhbW1hckRldGFpbDsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHcmFt
bWFyRGV0YWlsPiBjcmVhdGUoaW50IGxvY2F0aW9uLCBpbnQgbGVuZ3RoLCBJbW11dGFibGVBcnJh
eSogZ3Vlc3NlcywgY29uc3QgU3RyaW5nJiB1c2VyRGVzY3JpcHRpb24pOwotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFdlYkdyYW1tYXJEZXRhaWw+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpHcmFtbWFy
RGV0YWlsJik7Ci0KLSAgICBpbnQgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2dyYW1tYXJE
ZXRhaWwubG9jYXRpb247IH0KLSAgICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9ncmFt
bWFyRGV0YWlsLmxlbmd0aDsgfQotICAgIFBhc3NSZWZQdHI8SW1tdXRhYmxlQXJyYXk+IGd1ZXNz
ZXMoKSBjb25zdDsKLSAgICBjb25zdCBTdHJpbmcmIHVzZXJEZXNjcmlwdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fZ3JhbW1hckRldGFpbC51c2VyRGVzY3JpcHRpb247IH0KLQotICAgIGNvbnN0IFdl
YkNvcmU6OkdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwoKSB7IHJldHVybiBtX2dyYW1tYXJE
ZXRhaWw7IH0KLQotcHJpdmF0ZToKLSAgICBXZWJHcmFtbWFyRGV0YWlsKGludCBsb2NhdGlvbiwg
aW50IGxlbmd0aCwgSW1tdXRhYmxlQXJyYXkqIGd1ZXNzZXMsIGNvbnN0IFN0cmluZyYgdXNlckRl
c2NyaXB0aW9uKTsKLSAgICBXZWJHcmFtbWFyRGV0YWlsKGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJE
ZXRhaWwmKTsKLQotICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gQVBJVHlw
ZTsgfQotCi0gICAgV2ViQ29yZTo6R3JhbW1hckRldGFpbCBtX2dyYW1tYXJEZXRhaWw7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFdlYkdyYW1tYXJEZXRhaWxfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc2MTg0NC4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiV2ViVGV4dENoZWNrZXIuaCIKLQotI2luY2x1ZGUgIlRleHRDaGVja2VyLmgiCi0jaW5jbHVk
ZSAiV0tBUElDYXN0LmgiCi0jaW5jbHVkZSAiV2ViQ29udGV4dC5oIgotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYlRleHRDaGVja2VyKiBXZWJUZXh0
Q2hlY2tlcjo6c2hhcmVkKCkKLXsKLSAgICBzdGF0aWMgV2ViVGV4dENoZWNrZXIqIHRleHRDaGVj
a2VyID0gYWRvcHRSZWYobmV3IFdlYlRleHRDaGVja2VyKS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJu
IHRleHRDaGVja2VyOwotfQotCi1XZWJUZXh0Q2hlY2tlcjo6V2ViVGV4dENoZWNrZXIoKQotewot
fQotCi12b2lkIFdlYlRleHRDaGVja2VyOjpzZXRDbGllbnQoY29uc3QgV0tUZXh0Q2hlY2tlckNs
aWVudCogY2xpZW50KQotewotICAgIG1fY2xpZW50LmluaXRpYWxpemUoY2xpZW50KTsKLX0KLQot
c3RhdGljIHZvaWQgdXBkYXRlU3RhdGVGb3JBbGxXZWJQcm9jZXNzZXMoKQotewotICAgIGNvbnN0
IFZlY3RvcjxXZWJDb250ZXh0Kj4mIGNvbnRleHRzID0gV2ViQ29udGV4dDo6YWxsQ29udGV4dHMo
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbnRleHRzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIFdlYlByb2Nlc3NQcm94eSogd2ViUHJvY2VzcyA9IGNvbnRleHRzW2ldLT5wcm9jZXNz
KCk7Ci0gICAgICAgIGlmICghd2ViUHJvY2VzcykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB3ZWJQcm9jZXNzLT51cGRhdGVUZXh0Q2hlY2tlclN0YXRlKCk7Ci0gICAgfQotfQotCi12
b2lkIFdlYlRleHRDaGVja2VyOjpjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNo
YW5nZWQoYm9vbCBlbmFibGVkKQotewotICAgIFRleHRDaGVja2VyOjpjb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoZW5hYmxlZCk7Ci0gICAgdXBkYXRlU3RhdGVGb3JB
bGxXZWJQcm9jZXNzZXMoKTsKLX0KLQotdm9pZCBXZWJUZXh0Q2hlY2tlcjo6Z3JhbW1hckNoZWNr
aW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCi17Ci0gICAgVGV4dENoZWNrZXI6
OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoZW5hYmxlZCk7Ci0gICAgdXBkYXRl
U3RhdGVGb3JBbGxXZWJQcm9jZXNzZXMoKTsKLX0KLQotdm9pZCBXZWJUZXh0Q2hlY2tlcjo6Y2hl
Y2tTcGVsbGluZyhjb25zdCBXZWJQYWdlUHJveHkqIHBhZ2UsIGJvb2wgc3RhcnRCZWZvcmVTZWxl
Y3Rpb24pCi17Ci0gICAgcGFnZS0+YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKHN0YXJ0QmVmb3Jl
U2VsZWN0aW9uKTsKLX0KLQotdm9pZCBXZWJUZXh0Q2hlY2tlcjo6Y2hhbmdlU3BlbGxpbmdUb1dv
cmQoY29uc3QgV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBTdHJpbmcmIHRleHQpCi17Ci0gICAg
cGFnZS0+Y2hhbmdlU3BlbGxpbmdUb1dvcmQodGV4dCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hl
Y2tlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tlci5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWM1NzRjLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXIuaAorKysgL2Rldi9udWxsCkBA
IC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYlRleHRDaGVja2VyX2gKLSNk
ZWZpbmUgV2ViVGV4dENoZWNrZXJfaAotCi0jaW5jbHVkZSAiQVBJT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiV0tUZXh0Q2hlY2tlci5oIgotI2luY2x1ZGUgIldlYlRleHRDaGVja2VyQ2xpZW50LmgiCi0j
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdl
YlBhZ2VQcm94eTsKLQotY2xhc3MgV2ViVGV4dENoZWNrZXIgOiBwdWJsaWMgQVBJT2JqZWN0IHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgVHlwZSBBUElUeXBlID0gVHlwZVRleHRDaGVja2Vy
OwotCi0gICAgc3RhdGljIFdlYlRleHRDaGVja2VyKiBzaGFyZWQoKTsKLQotICAgIHZvaWQgc2V0
Q2xpZW50KGNvbnN0IFdLVGV4dENoZWNrZXJDbGllbnQqKTsKLSAgICBXZWJUZXh0Q2hlY2tlckNs
aWVudCYgY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KLQotICAgIHZvaWQgY29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wpOwotICAgIHZvaWQgZ3JhbW1h
ckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sKTsKLQotICAgIHZvaWQgY2hlY2tTcGVs
bGluZyhjb25zdCBXZWJQYWdlUHJveHkqLCBib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKTsKLSAg
ICB2b2lkIGNoYW5nZVNwZWxsaW5nVG9Xb3JkKGNvbnN0IFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0
cmluZyYpOwotCi1wcml2YXRlOgotICAgIFdlYlRleHRDaGVja2VyKCk7Ci0KLSAgICB2aXJ0dWFs
IFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIEFQSVR5cGU7IH0KLQotICAgIFdlYlRleHRDaGVj
a2VyQ2xpZW50IG1fY2xpZW50OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRp
ZiAvLyBXZWJUZXh0Q2hlY2tlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3Mvd2luL1dlYlRleHRDaGVja2VyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy93aW4vV2ViVGV4dENoZWNrZXJDbGllbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4NmU1MmM2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4v
V2ViVGV4dENoZWNrZXJDbGllbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViVGV4dENoZWNr
ZXJDbGllbnQuaCIKLQotI2luY2x1ZGUgIkltbXV0YWJsZUFycmF5LmgiCi0jaW5jbHVkZSAiV0tB
UElDYXN0LmgiCi0jaW5jbHVkZSAiV0tTaGFyZWRBUElDYXN0LmgiCi0jaW5jbHVkZSAiV2ViR3Jh
bW1hckRldGFpbC5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotYm9vbCBXZWJUZXh0Q2hl
Y2tlckNsaWVudDo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCkKLXsKLSAgICBpZiAo
IW1fY2xpZW50LmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmV0dXJuIG1fY2xpZW50LmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxs
b3dlZChtX2NsaWVudC5jbGllbnRJbmZvKTsKLX0KLQotYm9vbCBXZWJUZXh0Q2hlY2tlckNsaWVu
dDo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkKLXsKLSAgICBpZiAoIW1fY2xpZW50
LmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmV0dXJuIG1fY2xpZW50LmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChtX2Ns
aWVudC5jbGllbnRJbmZvKTsKLX0KLQotdm9pZCBXZWJUZXh0Q2hlY2tlckNsaWVudDo6c2V0Q29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAoIW1f
Y2xpZW50LnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9jbGllbnQuc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGVuYWJs
ZWQsIG1fY2xpZW50LmNsaWVudEluZm8pOwotfQotCi1ib29sIFdlYlRleHRDaGVja2VyQ2xpZW50
OjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkKLXsKLSAgICBpZiAoIW1fY2xpZW50LmdyYW1tYXJD
aGVja2luZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBtX2Ns
aWVudC5ncmFtbWFyQ2hlY2tpbmdFbmFibGVkKG1fY2xpZW50LmNsaWVudEluZm8pOwotfQotCi12
b2lkIFdlYlRleHRDaGVja2VyQ2xpZW50OjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKLXsKLSAgICBpZiAoIW1fY2xpZW50LnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xpZW50LnNldEdyYW1tYXJDaGVja2luZ0VuYWJs
ZWQoZW5hYmxlZCwgbV9jbGllbnQuY2xpZW50SW5mbyk7Ci19Ci0KLXVpbnQ2NF90IFdlYlRleHRD
aGVja2VyQ2xpZW50Ojp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSogcGFnZSkK
LXsKLSAgICBpZiAoIW1fY2xpZW50LnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgcmV0dXJuIG1fY2xpZW50LnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcodG9B
UEkocGFnZSksIG1fY2xpZW50LmNsaWVudEluZm8pOwotfQotCi12b2lkIFdlYlRleHRDaGVja2Vy
Q2xpZW50OjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHVpbnQ2NF90IHRhZykKLXsKLSAgICBp
ZiAoIW1fY2xpZW50LmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fY2xpZW50LmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodGFnLCBtX2NsaWVudC5j
bGllbnRJbmZvKTsKLX0KLQotdm9pZCBXZWJUZXh0Q2hlY2tlckNsaWVudDo6Y2hlY2tTcGVsbGlu
Z09mU3RyaW5nKHVpbnQ2NF90IHRhZywgY29uc3QgU3RyaW5nJiB0ZXh0LCBpbnQzMl90JiBtaXNz
cGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCkKLXsKLSAgICBpZiAo
IW1fY2xpZW50LmNoZWNrU3BlbGxpbmdPZlN0cmluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9jbGllbnQuY2hlY2tTcGVsbGluZ09mU3RyaW5nKHRhZywgdG9BUEkodGV4dC5pbXBsKCkpLCAm
bWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoLCBtX2NsaWVudC5jbGllbnRJ
bmZvKTsKLX0KLQotdm9pZCBXZWJUZXh0Q2hlY2tlckNsaWVudDo6Y2hlY2tHcmFtbWFyT2ZTdHJp
bmcodWludDY0X3QgdGFnLCBjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxXZWJDb3JlOjpHcmFt
bWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludDMyX3QmIGJhZEdyYW1tYXJMb2NhdGlvbiwg
aW50MzJfdCYgYmFkR3JhbW1hckxlbmd0aCkKLXsKLSAgICBpZiAoIW1fY2xpZW50LmNoZWNrR3Jh
bW1hck9mU3RyaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXS0FycmF5UmVmIHdrR3JhbW1h
ckRldGFpbHNSZWYgPSAwOwotICAgIG1fY2xpZW50LmNoZWNrR3JhbW1hck9mU3RyaW5nKHRhZywg
dG9BUEkodGV4dC5pbXBsKCkpLCAmd2tHcmFtbWFyRGV0YWlsc1JlZiwgJmJhZEdyYW1tYXJMb2Nh
dGlvbiwgJmJhZEdyYW1tYXJMZW5ndGgsIG1fY2xpZW50LmNsaWVudEluZm8pOwotCi0gICAgUmVm
UHRyPEltbXV0YWJsZUFycmF5PiB3a0dyYW1tYXJEZXRhaWxzID0gYWRvcHRSZWYodG9JbXBsKHdr
R3JhbW1hckRldGFpbHNSZWYpKTsKLSAgICBzaXplX3QgbnVtR3JhbW1hckRldGFpbHMgPSB3a0dy
YW1tYXJEZXRhaWxzLT5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HcmFt
bWFyRGV0YWlsczsgKytpKQotICAgICAgICBncmFtbWFyRGV0YWlscy5hcHBlbmQod2tHcmFtbWFy
RGV0YWlscy0+YXQ8V2ViR3JhbW1hckRldGFpbD4oaSktPmdyYW1tYXJEZXRhaWwoKSk7Ci19Ci0K
LWJvb2wgV2ViVGV4dENoZWNrZXJDbGllbnQ6OnNwZWxsaW5nVUlJc1Nob3dpbmcoKQotewotICAg
IGlmICghbV9jbGllbnQuc3BlbGxpbmdVSUlzU2hvd2luZykKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIG1fY2xpZW50LnNwZWxsaW5nVUlJc1Nob3dpbmcobV9jbGllbnQuY2xp
ZW50SW5mbyk7Ci19Ci0KLXZvaWQgV2ViVGV4dENoZWNrZXJDbGllbnQ6OnRvZ2dsZVNwZWxsaW5n
VUlJc1Nob3dpbmcoKQotewotICAgIGlmICghbV9jbGllbnQudG9nZ2xlU3BlbGxpbmdVSUlzU2hv
d2luZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmV0dXJuIG1fY2xpZW50LnRvZ2dsZVNwZWxs
aW5nVUlJc1Nob3dpbmcobV9jbGllbnQuY2xpZW50SW5mbyk7Ci19Ci0KLXZvaWQgV2ViVGV4dENo
ZWNrZXJDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQodWludDY0X3Qg
dGFnLCBjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKQotewotICAgIGlmICghbV9jbGllbnQu
dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9jbGllbnQudXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCh0YWcsIHRvQVBJ
KG1pc3NwZWxsZWRXb3JkLmltcGwoKSksIG1fY2xpZW50LmNsaWVudEluZm8pOwotfQotCi12b2lk
IFdlYlRleHRDaGVja2VyQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmco
dWludDY0X3QgdGFnLCBjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IFdlYkNv
cmU6OkdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCi17Ci0gICAgaWYgKCFtX2NsaWVudC51
cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fY2xpZW50LnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyh0YWcsIHRvQVBJKGJh
ZEdyYW1tYXJQaHJhc2UuaW1wbCgpKSwgdG9BUEkoZ3JhbW1hckRldGFpbCksIG1fY2xpZW50LmNs
aWVudEluZm8pOwotfQotCi12b2lkIFdlYlRleHRDaGVja2VyQ2xpZW50OjpndWVzc2VzRm9yV29y
ZCh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYgd29yZCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNz
ZXMpCi17Ci0gICAgaWYgKCFtX2NsaWVudC5ndWVzc2VzRm9yV29yZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgUmVmUHRyPEltbXV0YWJsZUFycmF5PiB3a0d1ZXNzZXMgPSBhZG9wdFJlZih0b0lt
cGwobV9jbGllbnQuZ3Vlc3Nlc0ZvcldvcmQodGFnLCB0b0FQSSh3b3JkLmltcGwoKSksIG1fY2xp
ZW50LmNsaWVudEluZm8pKSk7Ci0gICAgc2l6ZV90IG51bUd1ZXNzZXMgPSB3a0d1ZXNzZXMtPnNp
emUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUd1ZXNzZXM7ICsraSkKLSAgICAg
ICAgZ3Vlc3Nlcy5hcHBlbmQod2tHdWVzc2VzLT5hdDxXZWJTdHJpbmc+KGkpLT5zdHJpbmcoKSk7
Ci19Ci0KLXZvaWQgV2ViVGV4dENoZWNrZXJDbGllbnQ6OmxlYXJuV29yZCh1aW50NjRfdCB0YWcs
IGNvbnN0IFN0cmluZyYgd29yZCkKLXsKLSAgICBpZiAoIW1fY2xpZW50LmxlYXJuV29yZCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9jbGllbnQubGVhcm5Xb3JkKHRhZywgdG9BUEkod29yZC5p
bXBsKCkpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKLX0KLQotdm9pZCBXZWJUZXh0Q2hlY2tlckNs
aWVudDo6aWdub3JlV29yZCh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYgd29yZCkKLXsKLSAg
ICBpZiAoIW1fY2xpZW50Lmlnbm9yZVdvcmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xp
ZW50Lmlnbm9yZVdvcmQodGFnLCB0b0FQSSh3b3JkLmltcGwoKSksIG1fY2xpZW50LmNsaWVudElu
Zm8pOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXJDbGllbnQuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYjY1MDAzZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3Mvd2luL1dlYlRleHRDaGVja2VyQ2xpZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJUZXh0Q2hlY2tlckNsaWVudF9oCi0jZGVmaW5l
IFdlYlRleHRDaGVja2VyQ2xpZW50X2gKLQotI2luY2x1ZGUgIkFQSUNsaWVudC5oIgotI2luY2x1
ZGUgIldLVGV4dENoZWNrZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1RleHRDaGVja2VyQ2xpZW50
Lmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlUHJveHk7Ci0KLWNsYXNzIFdlYlRl
eHRDaGVja2VyQ2xpZW50IDogcHVibGljIEFQSUNsaWVudDxXS1RleHRDaGVja2VyQ2xpZW50LCBr
V0tUZXh0Q2hlY2tlckNsaWVudEN1cnJlbnRWZXJzaW9uPiB7Ci1wdWJsaWM6Ci0gICAgYm9vbCBj
b250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoKTsKLSAgICBib29sIGNvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCgpOwotICAgIHZvaWQgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKGJvb2wpOwotICAgIGJvb2wgZ3JhbW1hckNoZWNraW5nRW5hYmxlZCgpOwotICAgIHZv
aWQgc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sKTsKLSAgICB1aW50NjRfdCB1bmlxdWVT
cGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSopOwotICAgIHZvaWQgY2xvc2VTcGVsbERvY3Vt
ZW50V2l0aFRhZyh1aW50NjRfdCk7Ci0gICAgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcodWlu
dDY0X3QgdGFnLCBjb25zdCBTdHJpbmcmIHRleHQsIGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRp
b24sIGludDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3RoKTsKLSAgICB2b2lkIGNoZWNrR3JhbW1hck9m
U3RyaW5nKHVpbnQ2NF90IHRhZywgY29uc3QgU3RyaW5nJiB0ZXh0LCBWZWN0b3I8V2ViQ29yZTo6
R3JhbW1hckRldGFpbD4mLCBpbnQzMl90JiBiYWRHcmFtbWFyTG9jYXRpb24sIGludDMyX3QmIGJh
ZEdyYW1tYXJMZW5ndGgpOwotICAgIGJvb2wgc3BlbGxpbmdVSUlzU2hvd2luZygpOwotICAgIHZv
aWQgdG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpOwotICAgIHZvaWQgdXBkYXRlU3BlbGxpbmdV
SVdpdGhNaXNzcGVsbGVkV29yZCh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYgbWlzc3BlbGxl
ZFdvcmQpOwotICAgIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKHVpbnQ2
NF90IHRhZywgY29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBXZWJDb3JlOjpH
cmFtbWFyRGV0YWlsJik7Ci0gICAgdm9pZCBndWVzc2VzRm9yV29yZCh1aW50NjRfdCB0YWcsIGNv
bnN0IFN0cmluZyYgd29yZCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpOwotICAgIHZvaWQgbGVh
cm5Xb3JkKHVpbnQ2NF90IHRhZywgY29uc3QgU3RyaW5nJiB3b3JkKTsKLSAgICB2b2lkIGlnbm9y
ZVdvcmQodWludDY0X3QgdGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJUZXh0Q2hlY2tlckNsaWVudF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2ogYi9Tb3VyY2UvV2ViS2l0Mi93
aW4vV2ViS2l0Mi52Y3Byb2oKaW5kZXggZTBiMDU5OS4uYTVkN2ZkYSAxMDA3NTUKLS0tIGEvU291
cmNlL1dlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL3dpbi9X
ZWJLaXQyLnZjcHJvagpAQCAtMjkxNSw2ICsyOTE1LDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgog
CQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xXZWJHcmFtbWFyRGV0YWls
LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
VUlQcm9jZXNzXFdlYkdyYW1tYXJEZXRhaWwuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXFdlYkhpc3RvcnlDbGllbnQuY3BwIgog
CQkJCT4KIAkJCTwvRmlsZT4KQEAgLTMwNzUsNiArMzA4MywyMiBAQAogCQkJCT4KIAkJCTwvRmls
ZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcV2ViVGV4dENoZWNr
ZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxVSVByb2Nlc3NcV2ViVGV4dENoZWNrZXIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXFdlYlRleHRDaGVja2VyQ2xpZW50LmNw
cCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQ
cm9jZXNzXFdlYlRleHRDaGVja2VyQ2xpZW50LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xXZWJVSUNsaWVudC5jcHAiCiAJCQkJ
PgogCQkJPC9GaWxlPgpAQCAtMzI0MSw2ICszMjY1LDE0IEBACiAJCQkJCQk+CiAJCQkJCTwvRmls
ZT4KIAkJCQkJPEZpbGUKKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXEFQSVxDXFdL
R3JhbW1hckRldGFpbC5jcHAiCisJCQkJCQk+CisJCQkJCTwvRmlsZT4KKwkJCQkJPEZpbGUKKwkJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXEFQSVxDXFdLR3JhbW1hckRldGFpbC5oIgor
CQkJCQkJPgorCQkJCQk8L0ZpbGU+CisJCQkJCTxGaWxlCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XFVJUHJvY2Vzc1xBUElcQ1xXS0ljb25EYXRhYmFzZS5jcHAiCiAJCQkJCQk+CiAJCQkJCTwvRmls
ZT4KQEAgLTMzNjAsNiArMzM5MiwxNCBAQAogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nl
c3NcQVBJXENcV0tSZXNvdXJjZUNhY2hlTWFuYWdlci5oIgogCQkJCQkJPgogCQkJCQk8L0ZpbGU+
CisJCQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xBUElcQ1xXS1Rl
eHRDaGVja2VyLmNwcCIKKwkJCQkJCT4KKwkJCQkJPC9GaWxlPgorCQkJCQk8RmlsZQorCQkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcQVBJXENcV0tUZXh0Q2hlY2tlci5oIgorCQkJCQkJ
PgorCQkJCQk8L0ZpbGU+CiAJCQkJCTxGaWx0ZXIKIAkJCQkJCU5hbWU9ImNnIgogCQkJCQkJPgpA
QCAtMzQxMiwyMiArMzQ1Miw2IEBACiAJCQkJCQkJPgogCQkJCQkJPC9GaWxlPgogCQkJCQkJPEZp
bGUKLQkJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xBUElcQ1x3aW5cV0tHcmFtbWFy
RGV0YWlsLmNwcCIKLQkJCQkJCQk+Ci0JCQkJCQk8L0ZpbGU+Ci0JCQkJCQk8RmlsZQotCQkJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXEFQSVxDXHdpblxXS0dyYW1tYXJEZXRhaWwuaCIK
LQkJCQkJCQk+Ci0JCQkJCQk8L0ZpbGU+Ci0JCQkJCQk8RmlsZQotCQkJCQkJCVJlbGF0aXZlUGF0
aD0iLi5cVUlQcm9jZXNzXEFQSVxDXHdpblxXS1RleHRDaGVja2VyLmNwcCIKLQkJCQkJCQk+Ci0J
CQkJCQk8L0ZpbGU+Ci0JCQkJCQk8RmlsZQotCQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9j
ZXNzXEFQSVxDXHdpblxXS1RleHRDaGVja2VyLmgiCi0JCQkJCQkJPgotCQkJCQkJPC9GaWxlPgot
CQkJCQkJPEZpbGUKIAkJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xBUElcQ1x3aW5c
V0tWaWV3LmNwcCIKIAkJCQkJCQk+CiAJCQkJCQk8L0ZpbGU+CkBAIC0zNTgyLDE0ICszNjA2LDYg
QEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XFVJUHJvY2Vzc1x3aW5cV2ViR3JhbW1hckRldGFpbC5jcHAiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+
Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3Ncd2luXFdlYkdyYW1t
YXJEZXRhaWwuaCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCQk8RmlsZQogCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXFVJUHJvY2Vzc1x3aW5cV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwIgogCQkJCQk+
CiAJCQkJPC9GaWxlPgpAQCAtMzYxMCwyMiArMzYyNiw2IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+
CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3Ncd2luXFdlYlRleHRD
aGVja2VyLmNwcCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCQk8RmlsZQotCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXFVJUHJvY2Vzc1x3aW5cV2ViVGV4dENoZWNrZXIuaCIKLQkJCQkJPgotCQkJCTwv
RmlsZT4KLQkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1x3aW5cV2Vi
VGV4dENoZWNrZXJDbGllbnQuY3BwIgotCQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJCTxGaWxlCi0J
CQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXHdpblxXZWJUZXh0Q2hlY2tlckNsaWVudC5o
IgotCQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
VUlQcm9jZXNzXHdpblxXZWJVbmRvQ2xpZW50LmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyR2VuZXJhdGVkLm1ha2UgYi9Tb3Vy
Y2UvV2ViS2l0Mi93aW4vV2ViS2l0MkdlbmVyYXRlZC5tYWtlCmluZGV4IDIxNzc5ODMuLjIzNTcw
ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyR2VuZXJhdGVkLm1ha2UK
KysrIGIvU291cmNlL1dlYktpdDIvd2luL1dlYktpdDJHZW5lcmF0ZWQubWFrZQpAQCAtNTgsNiAr
NTgsNyBAQCBhbGw6CiAgICAgeGNvcHkgL3kgL2QgIi4uXFVJUHJvY2Vzc1xBUElcQ1xXS0dlb2xv
Y2F0aW9uTWFuYWdlci5oIiAiJUNvbmZpZ3VyYXRpb25CdWlsZERpciVcaW5jbHVkZVxXZWJLaXQy
IgogICAgIHhjb3B5IC95IC9kICIuLlxVSVByb2Nlc3NcQVBJXENcV0tHZW9sb2NhdGlvblBlcm1p
c3Npb25SZXF1ZXN0LmgiICIlQ29uZmlndXJhdGlvbkJ1aWxkRGlyJVxpbmNsdWRlXFdlYktpdDIi
CiAgICAgeGNvcHkgL3kgL2QgIi4uXFVJUHJvY2Vzc1xBUElcQ1xXS0dlb2xvY2F0aW9uUG9zaXRp
b24uaCIgIiVDb25maWd1cmF0aW9uQnVpbGREaXIlXGluY2x1ZGVcV2ViS2l0MiIKKyAgICB4Y29w
eSAveSAvZCAiLi5cVUlQcm9jZXNzXEFQSVxDXFdLR3JhbW1hckRldGFpbC5oIiAiJUNvbmZpZ3Vy
YXRpb25CdWlsZERpciVcaW5jbHVkZVxXZWJLaXQyIgogICAgIHhjb3B5IC95IC9kICIuLlxVSVBy
b2Nlc3NcQVBJXENcV0tJbnNwZWN0b3IuaCIgIiVDb25maWd1cmF0aW9uQnVpbGREaXIlXGluY2x1
ZGVcV2ViS2l0MiIKICAgICB4Y29weSAveSAvZCAiLi5cVUlQcm9jZXNzXEFQSVxDXFdLSWNvbkRh
dGFiYXNlLmgiICIlQ29uZmlndXJhdGlvbkJ1aWxkRGlyJVxpbmNsdWRlXFdlYktpdDIiCiAgICAg
eGNvcHkgL3kgL2QgIi4uXFVJUHJvY2Vzc1xBUElcQ1xXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXIu
aCIgIiVDb25maWd1cmF0aW9uQnVpbGREaXIlXGluY2x1ZGVcV2ViS2l0MiIKQEAgLTc1LDkgKzc2
LDggQEAgYWxsOgogICAgIHhjb3B5IC95IC9kICIuLlxVSVByb2Nlc3NcQVBJXENcV0tQcm90ZWN0
aW9uU3BhY2UuaCIgIiVDb25maWd1cmF0aW9uQnVpbGREaXIlXGluY2x1ZGVcV2ViS2l0MiIKICAg
ICB4Y29weSAveSAvZCAiLi5cVUlQcm9jZXNzXEFQSVxDXFdLUHJvdGVjdGlvblNwYWNlVHlwZXMu
aCIgIiVDb25maWd1cmF0aW9uQnVpbGREaXIlXGluY2x1ZGVcV2ViS2l0MiIKICAgICB4Y29weSAv
eSAvZCAiLi5cVUlQcm9jZXNzXEFQSVxDXFdLUmVzb3VyY2VDYWNoZU1hbmFnZXIuaCIgIiVDb25m
aWd1cmF0aW9uQnVpbGREaXIlXGluY2x1ZGVcV2ViS2l0MiIKKyAgICB4Y29weSAveSAvZCAiLi5c
VUlQcm9jZXNzXEFQSVxDXFdLVGV4dENoZWNrZXIuaCIgIiVDb25maWd1cmF0aW9uQnVpbGREaXIl
XGluY2x1ZGVcV2ViS2l0MiIKICAgICB4Y29weSAveSAvZCAiLi5cVUlQcm9jZXNzXEFQSVxDXHdp
blxXS0NvbnRleHRQcml2YXRlV2luLmgiICIlQ29uZmlndXJhdGlvbkJ1aWxkRGlyJVxpbmNsdWRl
XFdlYktpdDIiCi0gICAgeGNvcHkgL3kgL2QgIi4uXFVJUHJvY2Vzc1xBUElcQ1x3aW5cV0tHcmFt
bWFyRGV0YWlsLmgiICIlQ29uZmlndXJhdGlvbkJ1aWxkRGlyJVxpbmNsdWRlXFdlYktpdDIiCi0g
ICAgeGNvcHkgL3kgL2QgIi4uXFVJUHJvY2Vzc1xBUElcQ1x3aW5cV0tUZXh0Q2hlY2tlci5oIiAi
JUNvbmZpZ3VyYXRpb25CdWlsZERpciVcaW5jbHVkZVxXZWJLaXQyIgogICAgIHhjb3B5IC95IC9k
ICIuLlxVSVByb2Nlc3NcQVBJXENcd2luXFdLVmlldy5oIiAiJUNvbmZpZ3VyYXRpb25CdWlsZERp
ciVcaW5jbHVkZVxXZWJLaXQyIgogICAgIHhjb3B5IC95IC9kICIuLlxVSVByb2Nlc3NcQVBJXENc
d2luXFdLVmlld1ByaXZhdGUuaCIgIiVDb25maWd1cmF0aW9uQnVpbGREaXIlXGluY2x1ZGVcV2Vi
S2l0MiIKICAgICB4Y29weSAveSAvZCAiLi5cVUlQcm9jZXNzXEFQSVxjcHBcV0tSZXRhaW5QdHIu
aCIgIiVDb25maWd1cmF0aW9uQnVpbGREaXIlXGluY2x1ZGVcV2ViS2l0MiIK
</data>
<flag name="review"
          id="105210"
          type_id="1"
          status="-"
          setter="andersca"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109660</attachid>
            <date>2011-10-04 11:48:32 -0700</date>
            <delta_ts>2011-10-06 14:33:19 -0700</delta_ts>
            <desc>Make window TextChecker implementation generic for all platforms</desc>
            <filename>68532_rev1.diff</filename>
            <type>text/plain</type>
            <size>83624</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJUZXh0Q2hlY2tlckNsaWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlRleHRDaGVja2VyQ2xp
ZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJUZXh0
Q2hlY2tlckNsaWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlRleHRDaGVja2VyQ2xpZW50
LmgiCisKKyNpbmNsdWRlICJJbW11dGFibGVBcnJheS5oIgorI2luY2x1ZGUgIldLQVBJQ2FzdC5o
IgorI2luY2x1ZGUgIldLU2hhcmVkQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldlYkdyYW1tYXJEZXRh
aWwuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Jvb2wgV2ViVGV4dENoZWNrZXJDbGll
bnQ6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpCit7CisgICAgaWYgKCFtX2NsaWVu
dC5jb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiBtX2NsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQobV9j
bGllbnQuY2xpZW50SW5mbyk7Cit9CisKK2Jvb2wgV2ViVGV4dENoZWNrZXJDbGllbnQ6OmNvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCit7CisgICAgaWYgKCFtX2NsaWVudC5jb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiBtX2NsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQobV9jbGllbnQuY2xp
ZW50SW5mbyk7Cit9CisKK3ZvaWQgV2ViVGV4dENoZWNrZXJDbGllbnQ6OnNldENvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgaWYgKCFtX2NsaWVudC5z
ZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fY2xpZW50LnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChlbmFibGVkLCBtX2Ns
aWVudC5jbGllbnRJbmZvKTsKK30KKworYm9vbCBXZWJUZXh0Q2hlY2tlckNsaWVudDo6Z3JhbW1h
ckNoZWNraW5nRW5hYmxlZCgpCit7CisgICAgaWYgKCFtX2NsaWVudC5ncmFtbWFyQ2hlY2tpbmdF
bmFibGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9jbGllbnQuZ3Jh
bW1hckNoZWNraW5nRW5hYmxlZChtX2NsaWVudC5jbGllbnRJbmZvKTsKK30KKwordm9pZCBXZWJU
ZXh0Q2hlY2tlckNsaWVudDo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQp
Cit7CisgICAgaWYgKCFtX2NsaWVudC5zZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2NsaWVudC5zZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGVuYWJs
ZWQsIG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCit1aW50NjRfdCBXZWJUZXh0Q2hlY2tlckNs
aWVudDo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqIHBhZ2UpCit7CisgICAg
aWYgKCFtX2NsaWVudC51bmlxdWVTcGVsbERvY3VtZW50VGFnKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHJldHVybiBtX2NsaWVudC51bmlxdWVTcGVsbERvY3VtZW50VGFnKHRvQVBJKHBhZ2Up
LCBtX2NsaWVudC5jbGllbnRJbmZvKTsKK30KKwordm9pZCBXZWJUZXh0Q2hlY2tlckNsaWVudDo6
Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh1aW50NjRfdCB0YWcpCit7CisgICAgaWYgKCFtX2Ns
aWVudC5jbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2NsaWVudC5jbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHRhZywgbV9jbGllbnQuY2xpZW50SW5m
byk7Cit9CisKK3ZvaWQgV2ViVGV4dENoZWNrZXJDbGllbnQ6OmNoZWNrU3BlbGxpbmdPZlN0cmlu
Zyh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYgdGV4dCwgaW50MzJfdCYgbWlzc3BlbGxpbmdM
b2NhdGlvbiwgaW50MzJfdCYgbWlzc3BlbGxpbmdMZW5ndGgpCit7CisgICAgaWYgKCFtX2NsaWVu
dC5jaGVja1NwZWxsaW5nT2ZTdHJpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xpZW50
LmNoZWNrU3BlbGxpbmdPZlN0cmluZyh0YWcsIHRvQVBJKHRleHQuaW1wbCgpKSwgJm1pc3NwZWxs
aW5nTG9jYXRpb24sICZtaXNzcGVsbGluZ0xlbmd0aCwgbV9jbGllbnQuY2xpZW50SW5mbyk7Cit9
CisKK3ZvaWQgV2ViVGV4dENoZWNrZXJDbGllbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKHVpbnQ2
NF90IHRhZywgY29uc3QgU3RyaW5nJiB0ZXh0LCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFp
bD4mIGdyYW1tYXJEZXRhaWxzLCBpbnQzMl90JiBiYWRHcmFtbWFyTG9jYXRpb24sIGludDMyX3Qm
IGJhZEdyYW1tYXJMZW5ndGgpCit7CisgICAgaWYgKCFtX2NsaWVudC5jaGVja0dyYW1tYXJPZlN0
cmluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgV0tBcnJheVJlZiB3a0dyYW1tYXJEZXRhaWxz
UmVmID0gMDsKKyAgICBtX2NsaWVudC5jaGVja0dyYW1tYXJPZlN0cmluZyh0YWcsIHRvQVBJKHRl
eHQuaW1wbCgpKSwgJndrR3JhbW1hckRldGFpbHNSZWYsICZiYWRHcmFtbWFyTG9jYXRpb24sICZi
YWRHcmFtbWFyTGVuZ3RoLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKKworICAgIFJlZlB0cjxJbW11
dGFibGVBcnJheT4gd2tHcmFtbWFyRGV0YWlscyA9IGFkb3B0UmVmKHRvSW1wbCh3a0dyYW1tYXJE
ZXRhaWxzUmVmKSk7CisgICAgc2l6ZV90IG51bUdyYW1tYXJEZXRhaWxzID0gd2tHcmFtbWFyRGV0
YWlscy0+c2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtR3JhbW1hckRldGFp
bHM7ICsraSkKKyAgICAgICAgZ3JhbW1hckRldGFpbHMuYXBwZW5kKHdrR3JhbW1hckRldGFpbHMt
PmF0PFdlYkdyYW1tYXJEZXRhaWw+KGkpLT5ncmFtbWFyRGV0YWlsKCkpOworfQorCitib29sIFdl
YlRleHRDaGVja2VyQ2xpZW50OjpzcGVsbGluZ1VJSXNTaG93aW5nKCkKK3sKKyAgICBpZiAoIW1f
Y2xpZW50LnNwZWxsaW5nVUlJc1Nob3dpbmcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiBtX2NsaWVudC5zcGVsbGluZ1VJSXNTaG93aW5nKG1fY2xpZW50LmNsaWVudEluZm8p
OworfQorCit2b2lkIFdlYlRleHRDaGVja2VyQ2xpZW50Ojp0b2dnbGVTcGVsbGluZ1VJSXNTaG93
aW5nKCkKK3sKKyAgICBpZiAoIW1fY2xpZW50LnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcpCisg
ICAgICAgIHJldHVybjsKKworICAgIHJldHVybiBtX2NsaWVudC50b2dnbGVTcGVsbGluZ1VJSXNT
aG93aW5nKG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCit2b2lkIFdlYlRleHRDaGVja2VyQ2xp
ZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHVpbnQ2NF90IHRhZywgY29u
c3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCkKK3sKKyAgICBpZiAoIW1fY2xpZW50LnVwZGF0ZVNw
ZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xp
ZW50LnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQodGFnLCB0b0FQSShtaXNzcGVs
bGVkV29yZC5pbXBsKCkpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKK30KKwordm9pZCBXZWJUZXh0
Q2hlY2tlckNsaWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKHVpbnQ2NF90
IHRhZywgY29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBXZWJDb3JlOjpHcmFt
bWFyRGV0YWlsJiBncmFtbWFyRGV0YWlsKQoreworICAgIGlmICghbV9jbGllbnQudXBkYXRlU3Bl
bGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaWVu
dC51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcodGFnLCB0b0FQSShiYWRHcmFtbWFy
UGhyYXNlLmltcGwoKSksIHRvQVBJKGdyYW1tYXJEZXRhaWwpLCBtX2NsaWVudC5jbGllbnRJbmZv
KTsKK30KKwordm9pZCBXZWJUZXh0Q2hlY2tlckNsaWVudDo6Z3Vlc3Nlc0ZvcldvcmQodWludDY0
X3QgdGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQorewor
ICAgIGlmICghbV9jbGllbnQuZ3Vlc3Nlc0ZvcldvcmQpCisgICAgICAgIHJldHVybjsKKworICAg
IFJlZlB0cjxJbW11dGFibGVBcnJheT4gd2tHdWVzc2VzID0gYWRvcHRSZWYodG9JbXBsKG1fY2xp
ZW50Lmd1ZXNzZXNGb3JXb3JkKHRhZywgdG9BUEkod29yZC5pbXBsKCkpLCBtX2NsaWVudC5jbGll
bnRJbmZvKSkpOworICAgIHNpemVfdCBudW1HdWVzc2VzID0gd2tHdWVzc2VzLT5zaXplKCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HdWVzc2VzOyArK2kpCisgICAgICAgIGd1ZXNz
ZXMuYXBwZW5kKHdrR3Vlc3Nlcy0+YXQ8V2ViU3RyaW5nPihpKS0+c3RyaW5nKCkpOworfQorCit2
b2lkIFdlYlRleHRDaGVja2VyQ2xpZW50OjpsZWFybldvcmQodWludDY0X3QgdGFnLCBjb25zdCBT
dHJpbmcmIHdvcmQpCit7CisgICAgaWYgKCFtX2NsaWVudC5sZWFybldvcmQpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fY2xpZW50LmxlYXJuV29yZCh0YWcsIHRvQVBJKHdvcmQuaW1wbCgpKSwg
bV9jbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK3ZvaWQgV2ViVGV4dENoZWNrZXJDbGllbnQ6Omln
bm9yZVdvcmQodWludDY0X3QgdGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCit7CisgICAgaWYgKCFt
X2NsaWVudC5pZ25vcmVXb3JkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaWVudC5pZ25v
cmVXb3JkKHRhZywgdG9BUEkod29yZC5pbXBsKCkpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViR3JhbW1hckRldGFpbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJHcmFtbWFyRGV0YWlsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViR3JhbW1hckRldGFpbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBXZWJHcmFtbWFyRGV0YWlsX2gKKyNkZWZpbmUgV2ViR3JhbW1h
ckRldGFpbF9oCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Rl
eHRDaGVja2VyQ2xpZW50Lmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgSW1tdXRhYmxl
QXJyYXk7CisKK2NsYXNzIFdlYkdyYW1tYXJEZXRhaWwgOiBwdWJsaWMgQVBJT2JqZWN0IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgVHlwZSBBUElUeXBlID0gVHlwZUdyYW1tYXJEZXRhaWw7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR3JhbW1hckRldGFpbD4gY3JlYXRlKGludCBsb2Nh
dGlvbiwgaW50IGxlbmd0aCwgSW1tdXRhYmxlQXJyYXkqIGd1ZXNzZXMsIGNvbnN0IFN0cmluZyYg
dXNlckRlc2NyaXB0aW9uKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHcmFtbWFyRGV0YWls
PiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYpOworCisgICAgaW50IGxvY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ncmFtbWFyRGV0YWlsLmxvY2F0aW9uOyB9CisgICAgaW50
IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhbW1hckRldGFpbC5sZW5ndGg7IH0KKyAgICBQ
YXNzUmVmUHRyPEltbXV0YWJsZUFycmF5PiBndWVzc2VzKCkgY29uc3Q7CisgICAgY29uc3QgU3Ry
aW5nJiB1c2VyRGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2dyYW1tYXJEZXRhaWwudXNl
ckRlc2NyaXB0aW9uOyB9CisKKyAgICBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJiBncmFt
bWFyRGV0YWlsKCkgeyByZXR1cm4gbV9ncmFtbWFyRGV0YWlsOyB9CisKK3ByaXZhdGU6CisgICAg
V2ViR3JhbW1hckRldGFpbChpbnQgbG9jYXRpb24sIGludCBsZW5ndGgsIEltbXV0YWJsZUFycmF5
KiBndWVzc2VzLCBjb25zdCBTdHJpbmcmIHVzZXJEZXNjcmlwdGlvbik7CisgICAgV2ViR3JhbW1h
ckRldGFpbChjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJik7CisKKyAgICB2aXJ0dWFsIFR5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIEFQSVR5cGU7IH0KKworICAgIFdlYkNvcmU6OkdyYW1t
YXJEZXRhaWwgbV9ncmFtbWFyRGV0YWlsOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBXZWJHcmFtbWFyRGV0YWlsX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9XS0dyYW1tYXJEZXRhaWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvV0tHcmFtbWFyRGV0YWlsLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tHcmFtbWFyRGV0YWlsLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdLR3JhbW1hckRldGFpbF9o
CisjZGVmaW5lIFdLR3JhbW1hckRldGFpbF9oCisKKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5o
PgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK1dLX0VYUE9S
VCBXS1R5cGVJRCBXS0dyYW1tYXJEZXRhaWxHZXRUeXBlSUQoKTsKK1dLX0VYUE9SVCBXS0dyYW1t
YXJEZXRhaWxSZWYgV0tHcmFtbWFyRGV0YWlsQ3JlYXRlKGludCBsb2NhdGlvbiwgaW50IGxlbmd0
aCwgV0tBcnJheVJlZiBndWVzc2VzLCBXS1N0cmluZ1JlZiB1c2VyRGVzY3JpcHRpb24pOworCitX
S19FWFBPUlQgaW50IFdLR3JhbW1hckRldGFpbEdldExvY2F0aW9uKFdLR3JhbW1hckRldGFpbFJl
ZiBncmFtbWFyRGV0YWlsUmVmKTsKK1dLX0VYUE9SVCBpbnQgV0tHcmFtbWFyRGV0YWlsR2V0TGVu
Z3RoKFdLR3JhbW1hckRldGFpbFJlZiBncmFtbWFyRGV0YWlsUmVmKTsKK1dLX0VYUE9SVCBXS0Fy
cmF5UmVmIFdLR3JhbW1hckRldGFpbENvcHlHdWVzc2VzKFdLR3JhbW1hckRldGFpbFJlZiBncmFt
bWFyRGV0YWlsUmVmKTsKK1dLX0VYUE9SVCBXS1N0cmluZ1JlZiBXS0dyYW1tYXJEZXRhaWxDb3B5
VXNlckRlc2NyaXB0aW9uKFdLR3JhbW1hckRldGFpbFJlZiBncmFtbWFyRGV0YWlsUmVmKTsKKwor
I2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIFdLR3JhbW1hckRldGFp
bF9oICovCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tHcmFtbWFyRGV0
YWlsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tH
cmFtbWFyRGV0YWlsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS0dyYW1tYXJEZXRhaWwuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldLR3JhbW1hckRl
dGFpbC5oIgorCisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiSW1tdXRhYmxlQXJy
YXkuaCIKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXZWJHcmFtbWFyRGV0YWls
LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK1dLVHlwZUlEIFdLR3JhbW1hckRldGFp
bEdldFR5cGVJRCgpCit7CisgICAgcmV0dXJuIHRvQVBJKEFQSU9iamVjdDo6VHlwZUdyYW1tYXJE
ZXRhaWwpOworfQorCitXS0dyYW1tYXJEZXRhaWxSZWYgV0tHcmFtbWFyRGV0YWlsQ3JlYXRlKGlu
dCBsb2NhdGlvbiwgaW50IGxlbmd0aCwgV0tBcnJheVJlZiBndWVzc2VzLCBXS1N0cmluZ1JlZiB1
c2VyRGVzY3JpcHRpb24pCit7CisgICAgUmVmUHRyPFdlYkdyYW1tYXJEZXRhaWw+IGRldGFpbCA9
IFdlYkdyYW1tYXJEZXRhaWw6OmNyZWF0ZShsb2NhdGlvbiwgbGVuZ3RoLCB0b0ltcGwoZ3Vlc3Nl
cyksIHRvV1RGU3RyaW5nKHVzZXJEZXNjcmlwdGlvbikpOworICAgIHJldHVybiB0b0FQSShkZXRh
aWwucmVsZWFzZSgpLnJlbGVhc2VSZWYoKSk7Cit9CisKK2ludCBXS0dyYW1tYXJEZXRhaWxHZXRM
b2NhdGlvbihXS0dyYW1tYXJEZXRhaWxSZWYgZ3JhbW1hckRldGFpbFJlZikKK3sKKyAgICByZXR1
cm4gdG9JbXBsKGdyYW1tYXJEZXRhaWxSZWYpLT5sb2NhdGlvbigpOworfQorCitpbnQgV0tHcmFt
bWFyRGV0YWlsR2V0TGVuZ3RoKFdLR3JhbW1hckRldGFpbFJlZiBncmFtbWFyRGV0YWlsUmVmKQor
eworICAgIHJldHVybiB0b0ltcGwoZ3JhbW1hckRldGFpbFJlZiktPmxlbmd0aCgpOworfQorCitX
S0FycmF5UmVmIFdLR3JhbW1hckRldGFpbENvcHlHdWVzc2VzKFdLR3JhbW1hckRldGFpbFJlZiBn
cmFtbWFyRGV0YWlsUmVmKQoreworICAgIHJldHVybiB0b0FQSSh0b0ltcGwoZ3JhbW1hckRldGFp
bFJlZiktPmd1ZXNzZXMoKS5sZWFrUmVmKCkpOworfQorCitXS1N0cmluZ1JlZiBXS0dyYW1tYXJE
ZXRhaWxDb3B5VXNlckRlc2NyaXB0aW9uKFdLR3JhbW1hckRldGFpbFJlZiBncmFtbWFyRGV0YWls
UmVmKQoreworICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0ltcGwoZ3JhbW1hckRldGFpbFJlZikt
PnVzZXJEZXNjcmlwdGlvbigpKTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy93aW4vV0tHcmFtbWFyRGV0YWlsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL3dpbi9XS0dyYW1tYXJEZXRhaWwuaAkocmV2aXNpb24gOTY2MDIpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLR3JhbW1hckRldGFpbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdLR3Jh
bW1hckRldGFpbF9oCi0jZGVmaW5lIFdLR3JhbW1hckRldGFpbF9oCi0KLSNpbmNsdWRlIDxXZWJL
aXQyL1dLQmFzZS5oPgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlm
Ci0KLVdLX0VYUE9SVCBXS1R5cGVJRCBXS0dyYW1tYXJEZXRhaWxHZXRUeXBlSUQoKTsKLVdLX0VY
UE9SVCBXS0dyYW1tYXJEZXRhaWxSZWYgV0tHcmFtbWFyRGV0YWlsQ3JlYXRlKGludCBsb2NhdGlv
biwgaW50IGxlbmd0aCwgV0tBcnJheVJlZiBndWVzc2VzLCBXS1N0cmluZ1JlZiB1c2VyRGVzY3Jp
cHRpb24pOwotCi1XS19FWFBPUlQgaW50IFdLR3JhbW1hckRldGFpbEdldExvY2F0aW9uKFdLR3Jh
bW1hckRldGFpbFJlZiBncmFtbWFyRGV0YWlsUmVmKTsKLVdLX0VYUE9SVCBpbnQgV0tHcmFtbWFy
RGV0YWlsR2V0TGVuZ3RoKFdLR3JhbW1hckRldGFpbFJlZiBncmFtbWFyRGV0YWlsUmVmKTsKLVdL
X0VYUE9SVCBXS0FycmF5UmVmIFdLR3JhbW1hckRldGFpbENvcHlHdWVzc2VzKFdLR3JhbW1hckRl
dGFpbFJlZiBncmFtbWFyRGV0YWlsUmVmKTsKLVdLX0VYUE9SVCBXS1N0cmluZ1JlZiBXS0dyYW1t
YXJEZXRhaWxDb3B5VXNlckRlc2NyaXB0aW9uKFdLR3JhbW1hckRldGFpbFJlZiBncmFtbWFyRGV0
YWlsUmVmKTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotI2VuZGlmIC8qIFdL
R3JhbW1hckRldGFpbF9oICovCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
d2luL1dLVGV4dENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0Mvd2luL1dLVGV4dENoZWNrZXIuaAkocmV2aXNpb24gOTY2MDIpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLVGV4dENoZWNrZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXS1RleHRDaGVja2VyX2gK
LSNkZWZpbmUgV0tUZXh0Q2hlY2tlcl9oCi0KLSNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgot
Ci0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLS8vIFRleHRDaGVj
a2VyIENsaWVudAotdHlwZWRlZiBib29sICgqV0tUZXh0Q2hlY2tlckNvbnRpbm91c1NwZWxsQ2hl
Y2tpbmdBbGxvd2VkKShjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKLXR5cGVkZWYgYm9vbCAoKldL
VGV4dENoZWNrZXJDb250aW5vdXNTcGVsbENoZWNraW5nRW5hYmxlZCkoY29uc3Qgdm9pZCAqY2xp
ZW50SW5mbyk7Ci10eXBlZGVmIHZvaWQgKCpXS1RleHRDaGVja2VyU2V0Q29udGlub3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQpKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Ci10
eXBlZGVmIGJvb2wgKCpXS1RleHRDaGVja2VyR3JhbW1hckNoZWNraW5nRW5hYmxlZCkoY29uc3Qg
dm9pZCAqY2xpZW50SW5mbyk7Ci10eXBlZGVmIHZvaWQgKCpXS1RleHRDaGVja2VyU2V0R3JhbW1h
ckNoZWNraW5nRW5hYmxlZCkoYm9vbCBlbmFibGVkLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsK
LXR5cGVkZWYgdWludDY0X3QgKCpXS1RleHRDaGVja2VyVW5pcXVlU3BlbGxEb2N1bWVudFRhZyko
V0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwotdHlwZWRlZiB2b2lkICgq
V0tUZXh0Q2hlY2tlckNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcpKHVpbnQ2NF90IHRhZywgY29u
c3Qgdm9pZCAqY2xpZW50SW5mbyk7Ci10eXBlZGVmIHZvaWQgKCpXS1RleHRDaGVja2VyQ2hlY2tT
cGVsbGluZ09mU3RyaW5nKSh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHRleHQsIGludDMyX3Qq
IG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QqIG1pc3NwZWxsaW5nTGVuZ3RoLCBjb25zdCB2
b2lkICpjbGllbnRJbmZvKTsKLXR5cGVkZWYgdm9pZCAoKldLVGV4dENoZWNrZXJDaGVja0dyYW1t
YXJPZlN0cmluZykodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0ZXh0LCBXS0FycmF5UmVmKiBn
cmFtbWFyRGV0YWlscywgaW50MzJfdCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90KiBiYWRH
cmFtbWFyTGVuZ3RoLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKLXR5cGVkZWYgYm9vbCAoKldL
VGV4dENoZWNrZXJTcGVsbGluZ1VJSXNTaG93aW5nKShjb25zdCB2b2lkICpjbGllbnRJbmZvKTsK
LXR5cGVkZWYgdm9pZCAoKldLVGV4dENoZWNrZXJUb2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKShj
b25zdCB2b2lkICpjbGllbnRJbmZvKTsKLXR5cGVkZWYgdm9pZCAoKldLVGV4dENoZWNrZXJVcGRh
dGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKSh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVm
IG1pc3NwZWxsZWRXb3JkLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKLXR5cGVkZWYgdm9pZCAo
KldLVGV4dENoZWNrZXJVcGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpKHVpbnQ2NF90
IHRhZywgV0tTdHJpbmdSZWYgYmFkR3JhbW1hclBocmFzZSwgV0tHcmFtbWFyRGV0YWlsUmVmIGdy
YW1tYXJEZXRhaWwsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwotdHlwZWRlZiBXS0FycmF5UmVm
ICgqV0tUZXh0Q2hlY2tlckd1ZXNzZXNGb3JXb3JkKSh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVm
IHdvcmQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwotdHlwZWRlZiB2b2lkICgqV0tUZXh0Q2hl
Y2tlckxlYXJuV29yZCkodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lk
ICpjbGllbnRJbmZvKTsKLXR5cGVkZWYgdm9pZCAoKldLVGV4dENoZWNrZXJJZ25vcmVXb3JkKSh1
aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwot
Ci1zdHJ1Y3QgV0tUZXh0Q2hlY2tlckNsaWVudCB7Ci0gICAgaW50ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lv
bjsKLSAgICBjb25zdCB2b2lkICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRJbmZvOwotICAgIFdLVGV4dENoZWNrZXJDb250
aW5vdXNTcGVsbENoZWNraW5nQWxsb3dlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZDsKLSAgICBXS1RleHRDaGVja2VyQ29udGlub3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ7Ci0gICAgV0tUZXh0Q2hlY2tlclNldENvbnRpbm91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkOwotICAgIFdLVGV4dENoZWNrZXJHcmFtbWFyQ2hlY2tpbmdF
bmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJDaGVja2lu
Z0VuYWJsZWQ7Ci0gICAgV0tUZXh0Q2hlY2tlclNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZDsK
LSAgICBXS1RleHRDaGVja2VyVW5pcXVlU3BlbGxEb2N1bWVudFRhZyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bmlxdWVTcGVsbERvY3VtZW50VGFnOwotICAgIFdLVGV4dENo
ZWNrZXJDbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWc7Ci0gICAgV0tUZXh0Q2hlY2tlckNoZWNr
U3BlbGxpbmdPZlN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hl
Y2tTcGVsbGluZ09mU3RyaW5nOwotICAgIFdLVGV4dENoZWNrZXJDaGVja0dyYW1tYXJPZlN0cmlu
ZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrR3JhbW1hck9mU3Ry
aW5nOwotICAgIFdLVGV4dENoZWNrZXJTcGVsbGluZ1VJSXNTaG93aW5nICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWxsaW5nVUlJc1Nob3dpbmc7Ci0gICAgV0tUZXh0
Q2hlY2tlclRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZzsKLSAgICBXS1RleHRDaGVja2VyVXBk
YXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCAgICAgICAgICAgICAgICAgICAgICAgICB1
cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkOwotICAgIFdLVGV4dENoZWNrZXJVcGRh
dGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgIHVw
ZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZzsKLSAgICBXS1RleHRDaGVja2VyR3Vlc3Nl
c0ZvcldvcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWVz
c2VzRm9yV29yZDsKLSAgICBXS1RleHRDaGVja2VyTGVhcm5Xb3JkICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWFybldvcmQ7Ci0gICAgV0tUZXh0Q2hl
Y2tlcklnbm9yZVdvcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWdub3JlV29yZDsKLX07Ci10eXBlZGVmIHN0cnVjdCBXS1RleHRDaGVja2VyQ2xpZW50
IFdLVGV4dENoZWNrZXJDbGllbnQ7Ci0KLWVudW0geyBrV0tUZXh0Q2hlY2tlckNsaWVudEN1cnJl
bnRWZXJzaW9uID0gMCB9OwotCi1XS19FWFBPUlQgdm9pZCBXS1RleHRDaGVja2VyU2V0Q2xpZW50
KGNvbnN0IFdLVGV4dENoZWNrZXJDbGllbnQqIGNsaWVudCk7Ci0KLVdLX0VYUE9SVCB2b2lkIFdL
VGV4dENoZWNrZXJDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9v
bCk7Ci1XS19FWFBPUlQgdm9pZCBXS1RleHRDaGVja2VyR3JhbW1hckNoZWNraW5nRW5hYmxlZFN0
YXRlQ2hhbmdlZChib29sKTsKLQotV0tfRVhQT1JUIHZvaWQgV0tUZXh0Q2hlY2tlckNoZWNrU3Bl
bGxpbmcoV0tQYWdlUmVmIHBhZ2UsIGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pOwotV0tfRVhQ
T1JUIHZvaWQgV0tUZXh0Q2hlY2tlckNoYW5nZVNwZWxsaW5nVG9Xb3JkKFdLUGFnZVJlZiBwYWdl
LCBXS1N0cmluZ1JlZiB3b3JkKTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQot
I2VuZGlmIC8qIFdLVGV4dENoZWNrZXJfaCAqLwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL3dpbi9XS0FQSUNhc3RXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLQVBJQ2FzdFdpbi5oCShyZXZpc2lvbiA5NjYwMikKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tBUElDYXN0V2luLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDI1ICszMCwxNCBAQAogI2Vycm9yICJQbGVhc2UgI2luY2x1ZGUgXCJX
S0FQSUNhc3QuaFwiIGluc3RlYWQgb2YgdGhpcyBmaWxlIGRpcmVjdGx5LiIKICNlbmRpZgogCi0j
aW5jbHVkZSAiV2ViR3JhbW1hckRldGFpbC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENoZWNr
ZXJDbGllbnQuaD4KLQogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlZpZXc7CiBjbGFz
cyBXZWJFZGl0Q29tbWFuZFByb3h5OwotY2xhc3MgV2ViVGV4dENoZWNrZXI7CiAKIFdLX0FERF9B
UElfTUFQUElORyhXS1ZpZXdSZWYsIFdlYlZpZXcpCiBXS19BRERfQVBJX01BUFBJTkcoV0tFZGl0
Q29tbWFuZFJlZiwgV2ViRWRpdENvbW1hbmRQcm94eSkKLVdLX0FERF9BUElfTUFQUElORyhXS1Rl
eHRDaGVja2VyUmVmLCBXZWJUZXh0Q2hlY2tlcikKLVdLX0FERF9BUElfTUFQUElORyhXS0dyYW1t
YXJEZXRhaWxSZWYsIFdlYkdyYW1tYXJEZXRhaWwpCiAKLWlubGluZSBQcm94eWluZ1JlZlB0cjxX
ZWJHcmFtbWFyRGV0YWlsPiB0b0FQSShjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJiBncmFt
bWFyRGV0YWlsKQotewotICAgIHJldHVybiBQcm94eWluZ1JlZlB0cjxXZWJHcmFtbWFyRGV0YWls
PihXZWJHcmFtbWFyRGV0YWlsOjpjcmVhdGUoZ3JhbW1hckRldGFpbCkpOwotfQotCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIFdLQVBJQ2FzdFdpbl9oCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLR3JhbW1hckRldGFpbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dpbi9XS0dyYW1tYXJEZXRhaWwu
Y3BwCShyZXZpc2lvbiA5NjYwMikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93
aW4vV0tHcmFtbWFyRGV0YWlsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2NSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldLR3JhbW1hckRldGFp
bC5oIgotCi0jaW5jbHVkZSAiQVBJT2JqZWN0LmgiCi0jaW5jbHVkZSAiSW1tdXRhYmxlQXJyYXku
aCIKLSNpbmNsdWRlICJXS0FQSUNhc3QuaCIKLSNpbmNsdWRlICJXZWJHcmFtbWFyRGV0YWlsLmgi
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KLVdLVHlwZUlEIFdLR3JhbW1hckRldGFpbEdl
dFR5cGVJRCgpCi17Ci0gICAgcmV0dXJuIHRvQVBJKEFQSU9iamVjdDo6VHlwZUdyYW1tYXJEZXRh
aWwpOwotfQotCi1XS0dyYW1tYXJEZXRhaWxSZWYgV0tHcmFtbWFyRGV0YWlsQ3JlYXRlKGludCBs
b2NhdGlvbiwgaW50IGxlbmd0aCwgV0tBcnJheVJlZiBndWVzc2VzLCBXS1N0cmluZ1JlZiB1c2Vy
RGVzY3JpcHRpb24pCi17Ci0gICAgUmVmUHRyPFdlYkdyYW1tYXJEZXRhaWw+IGRldGFpbCA9IFdl
YkdyYW1tYXJEZXRhaWw6OmNyZWF0ZShsb2NhdGlvbiwgbGVuZ3RoLCB0b0ltcGwoZ3Vlc3Nlcyks
IHRvV1RGU3RyaW5nKHVzZXJEZXNjcmlwdGlvbikpOwotICAgIHJldHVybiB0b0FQSShkZXRhaWwu
cmVsZWFzZSgpLnJlbGVhc2VSZWYoKSk7Ci19Ci0KLWludCBXS0dyYW1tYXJEZXRhaWxHZXRMb2Nh
dGlvbihXS0dyYW1tYXJEZXRhaWxSZWYgZ3JhbW1hckRldGFpbFJlZikKLXsKLSAgICByZXR1cm4g
dG9JbXBsKGdyYW1tYXJEZXRhaWxSZWYpLT5sb2NhdGlvbigpOwotfQotCi1pbnQgV0tHcmFtbWFy
RGV0YWlsR2V0TGVuZ3RoKFdLR3JhbW1hckRldGFpbFJlZiBncmFtbWFyRGV0YWlsUmVmKQotewot
ICAgIHJldHVybiB0b0ltcGwoZ3JhbW1hckRldGFpbFJlZiktPmxlbmd0aCgpOwotfQotCi1XS0Fy
cmF5UmVmIFdLR3JhbW1hckRldGFpbENvcHlHdWVzc2VzKFdLR3JhbW1hckRldGFpbFJlZiBncmFt
bWFyRGV0YWlsUmVmKQotewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwoZ3JhbW1hckRldGFpbFJl
ZiktPmd1ZXNzZXMoKS5sZWFrUmVmKCkpOwotfQotCi1XS1N0cmluZ1JlZiBXS0dyYW1tYXJEZXRh
aWxDb3B5VXNlckRlc2NyaXB0aW9uKFdLR3JhbW1hckRldGFpbFJlZiBncmFtbWFyRGV0YWlsUmVm
KQotewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0ltcGwoZ3JhbW1hckRldGFpbFJlZiktPnVz
ZXJEZXNjcmlwdGlvbigpKTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy93aW4vV0tUZXh0Q2hlY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL3dpbi9XS1RleHRDaGVja2VyLmNwcAkocmV2aXNpb24gOTY2MDIpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLVGV4dENoZWNrZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiV0tUZXh0Q2hlY2tlci5oIgotCi0jaW5jbHVkZSAiV0tBUElDYXN0Lmgi
Ci0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViVGV4dENoZWNrZXIuaCIK
LQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQotdm9pZCBXS1RleHRDaGVja2VyU2V0Q2xpZW50
KGNvbnN0IFdLVGV4dENoZWNrZXJDbGllbnQqIHdrQ2xpZW50KQotewotICAgIGlmICh3a0NsaWVu
dCAmJiB3a0NsaWVudC0+dmVyc2lvbikKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYlRleHRDaGVj
a2VyOjpzaGFyZWQoKS0+c2V0Q2xpZW50KHdrQ2xpZW50KTsKLX0KLQotdm9pZCBXS1RleHRDaGVj
a2VyQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxl
ZCkKLXsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChlbmFibGVkKTsKLX0KLQotdm9pZCBXS1RleHRDaGVja2Vy
R3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCi17Ci0gICAg
V2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5ncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFu
Z2VkKGVuYWJsZWQpOwotfQotCi12b2lkIFdLVGV4dENoZWNrZXJDaGVja1NwZWxsaW5nKFdLUGFn
ZVJlZiBwYWdlLCBib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQotewotICAgIFdlYlRleHRDaGVj
a2VyOjpzaGFyZWQoKS0+Y2hlY2tTcGVsbGluZyh0b0ltcGwocGFnZSksIHN0YXJ0QmVmb3JlU2Vs
ZWN0aW9uKTsKLX0KLQotdm9pZCBXS1RleHRDaGVja2VyQ2hhbmdlU3BlbGxpbmdUb1dvcmQoV0tQ
YWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHdvcmQpCi17Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNo
YXJlZCgpLT5jaGFuZ2VTcGVsbGluZ1RvV29yZCh0b0ltcGwocGFnZSksIHRvV1RGU3RyaW5nKHdv
cmQpKTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0
LmgJKHJldmlzaW9uIDk2NjAyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
QVBJQ2FzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRm9u
dFNtb290aGluZ0xldmVsLmgiCiAjaW5jbHVkZSAiSFRUUENvb2tpZUFjY2VwdFBvbGljeS5oIgog
I2luY2x1ZGUgIlJlc291cmNlQ2FjaGVzVG9DbGVhci5oIgorI2luY2x1ZGUgIldlYkdyYW1tYXJE
ZXRhaWwuaCIKICNpbmNsdWRlICJXS0NvbnRleHQuaCIKICNpbmNsdWRlICJXS0Nvb2tpZU1hbmFn
ZXIuaCIKICNpbmNsdWRlICJXS0NyZWRlbnRpYWxUeXBlcy5oIgpAQCAtNjQsNiArNjUsNyBAQAog
Y2xhc3MgV2ViRnJhbWVQcm94eTsKIGNsYXNzIFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5Owog
Y2xhc3MgV2ViR2VvbG9jYXRpb25Qb3NpdGlvbjsKK2NsYXNzIFdlYkdyYW1tYXJEZXRhaWw7CiBj
bGFzcyBXZWJIaXRUZXN0UmVzdWx0OwogY2xhc3MgV2ViSWNvbkRhdGFiYXNlOwogY2xhc3MgV2Vi
SW5zcGVjdG9yUHJveHk7CkBAIC03Nyw2ICs3OSw3IEBACiBjbGFzcyBXZWJQbHVnaW5TaXRlRGF0
YU1hbmFnZXI7CiBjbGFzcyBXZWJQcmVmZXJlbmNlczsKIGNsYXNzIFdlYlByb3RlY3Rpb25TcGFj
ZTsKK2NsYXNzIFdlYlRleHRDaGVja2VyOwogCiBXS19BRERfQVBJX01BUFBJTkcoV0tBcHBsaWNh
dGlvbkNhY2hlTWFuYWdlclJlZiwgV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eSkKIFdL
X0FERF9BUElfTUFQUElORyhXS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUmVmLCBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZVByb3h5KQpAQCAtOTUsNiArOTgsNyBAQAogV0tfQUREX0FQSV9NQVBQSU5H
KFdLR2VvbG9jYXRpb25NYW5hZ2VyUmVmLCBXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eSkKIFdL
X0FERF9BUElfTUFQUElORyhXS0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RSZWYsIEdlb2xv
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eSkKIFdLX0FERF9BUElfTUFQUElORyhXS0dlb2xv
Y2F0aW9uUG9zaXRpb25SZWYsIFdlYkdlb2xvY2F0aW9uUG9zaXRpb24pCitXS19BRERfQVBJX01B
UFBJTkcoV0tHcmFtbWFyRGV0YWlsUmVmLCBXZWJHcmFtbWFyRGV0YWlsKQogV0tfQUREX0FQSV9N
QVBQSU5HKFdLSGl0VGVzdFJlc3VsdFJlZiwgV2ViSGl0VGVzdFJlc3VsdCkKIFdLX0FERF9BUElf
TUFQUElORyhXS0ljb25EYXRhYmFzZVJlZiwgV2ViSWNvbkRhdGFiYXNlKQogV0tfQUREX0FQSV9N
QVBQSU5HKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiwgV2ViS2V5VmFsdWVTdG9yYWdlTWFu
YWdlclByb3h5KQpAQCAtMTA3LDYgKzExMSw3IEBACiBXS19BRERfQVBJX01BUFBJTkcoV0tQbHVn
aW5TaXRlRGF0YU1hbmFnZXJSZWYsIFdlYlBsdWdpblNpdGVEYXRhTWFuYWdlcikKIFdLX0FERF9B
UElfTUFQUElORyhXS1ByZWZlcmVuY2VzUmVmLCBXZWJQcmVmZXJlbmNlcykKIFdLX0FERF9BUElf
TUFQUElORyhXS1Byb3RlY3Rpb25TcGFjZVJlZiwgV2ViUHJvdGVjdGlvblNwYWNlKQorV0tfQURE
X0FQSV9NQVBQSU5HKFdLVGV4dENoZWNrZXJSZWYsIFdlYlRleHRDaGVja2VyKQogCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUikKIFdLX0FERF9BUElfTUFQUElORyhXS0luc3BlY3RvclJlZiwgV2ViSW5z
cGVjdG9yUHJveHkpCkBAIC0zMjgsNiArMzMzLDExIEBACiAgICAgcmV0dXJuIGtXS0hUVFBDb29r
aWVBY2NlcHRQb2xpY3lBbHdheXM7CiB9CiAKK2lubGluZSBQcm94eWluZ1JlZlB0cjxXZWJHcmFt
bWFyRGV0YWlsPiB0b0FQSShjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0
YWlsKQoreworICAgIHJldHVybiBQcm94eWluZ1JlZlB0cjxXZWJHcmFtbWFyRGV0YWlsPihXZWJH
cmFtbWFyRGV0YWlsOjpjcmVhdGUoZ3JhbW1hckRldGFpbCkpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKIAogI2lmIGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyKQpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLVGV4dENoZWNrZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tUZXh0Q2hlY2tlci5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLVGV4dENoZWNrZXIu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV0tU
ZXh0Q2hlY2tlcl9oCisjZGVmaW5lIFdLVGV4dENoZWNrZXJfaAorCisjaW5jbHVkZSA8V2ViS2l0
Mi9XS0Jhc2UuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgor
CisvLyBUZXh0Q2hlY2tlciBDbGllbnQKK3R5cGVkZWYgYm9vbCAoKldLVGV4dENoZWNrZXJDb250
aW5vdXNTcGVsbENoZWNraW5nQWxsb3dlZCkoY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Cit0eXBl
ZGVmIGJvb2wgKCpXS1RleHRDaGVja2VyQ29udGlub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpKGNv
bnN0IHZvaWQgKmNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkICgqV0tUZXh0Q2hlY2tlclNldENv
bnRpbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKShib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQgKmNs
aWVudEluZm8pOwordHlwZWRlZiBib29sICgqV0tUZXh0Q2hlY2tlckdyYW1tYXJDaGVja2luZ0Vu
YWJsZWQpKGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkICgqV0tUZXh0Q2hl
Y2tlclNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQpKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCAq
Y2xpZW50SW5mbyk7Cit0eXBlZGVmIHVpbnQ2NF90ICgqV0tUZXh0Q2hlY2tlclVuaXF1ZVNwZWxs
RG9jdW1lbnRUYWcpKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKK3R5
cGVkZWYgdm9pZCAoKldLVGV4dENoZWNrZXJDbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKSh1aW50
NjRfdCB0YWcsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkICgqV0tUZXh0
Q2hlY2tlckNoZWNrU3BlbGxpbmdPZlN0cmluZykodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0
ZXh0LCBpbnQzMl90KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90KiBtaXNzcGVsbGluZ0xl
bmd0aCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS1RleHRDaGVj
a2VyQ2hlY2tHcmFtbWFyT2ZTdHJpbmcpKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwg
V0tBcnJheVJlZiogZ3JhbW1hckRldGFpbHMsIGludDMyX3QqIGJhZEdyYW1tYXJMb2NhdGlvbiwg
aW50MzJfdCogYmFkR3JhbW1hckxlbmd0aCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Cit0eXBl
ZGVmIGJvb2wgKCpXS1RleHRDaGVja2VyU3BlbGxpbmdVSUlzU2hvd2luZykoY29uc3Qgdm9pZCAq
Y2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS1RleHRDaGVja2VyVG9nZ2xlU3BlbGxpbmdV
SUlzU2hvd2luZykoY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS1Rl
eHRDaGVja2VyVXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCkodWludDY0X3QgdGFn
LCBXS1N0cmluZ1JlZiBtaXNzcGVsbGVkV29yZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Cit0
eXBlZGVmIHZvaWQgKCpXS1RleHRDaGVja2VyVXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3Ry
aW5nKSh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIGJhZEdyYW1tYXJQaHJhc2UsIFdLR3JhbW1h
ckRldGFpbFJlZiBncmFtbWFyRGV0YWlsLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKK3R5cGVk
ZWYgV0tBcnJheVJlZiAoKldLVGV4dENoZWNrZXJHdWVzc2VzRm9yV29yZCkodWludDY0X3QgdGFn
LCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKK3R5cGVkZWYgdm9p
ZCAoKldLVGV4dENoZWNrZXJMZWFybldvcmQpKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29y
ZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS1RleHRDaGVja2Vy
SWdub3JlV29yZCkodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkICpj
bGllbnRJbmZvKTsKKworc3RydWN0IFdLVGV4dENoZWNrZXJDbGllbnQgeworICAgIGludCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZlcnNpb247CisgICAgY29uc3Qgdm9pZCAqICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50SW5mbzsKKyAgICBXS1Rl
eHRDaGVja2VyQ29udGlub3VzU3BlbGxDaGVja2luZ0FsbG93ZWQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQ7CisgICAgV0tUZXh0Q2hl
Y2tlckNvbnRpbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOworICAgIFdLVGV4dENoZWNrZXJT
ZXRDb250aW5vdXNTcGVsbENoZWNraW5nRW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDsKKyAgICBXS1RleHRDaGVja2VyR3Jh
bW1hckNoZWNraW5nRW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
cmFtbWFyQ2hlY2tpbmdFbmFibGVkOworICAgIFdLVGV4dENoZWNrZXJTZXRHcmFtbWFyQ2hlY2tp
bmdFbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEdyYW1tYXJDaGVj
a2luZ0VuYWJsZWQ7CisgICAgV0tUZXh0Q2hlY2tlclVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlU3BlbGxEb2N1bWVudFRhZzsK
KyAgICBXS1RleHRDaGVja2VyQ2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnOworICAgIFdLVGV4
dENoZWNrZXJDaGVja1NwZWxsaW5nT2ZTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoZWNrU3BlbGxpbmdPZlN0cmluZzsKKyAgICBXS1RleHRDaGVja2VyQ2hlY2tH
cmFtbWFyT2ZTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVj
a0dyYW1tYXJPZlN0cmluZzsKKyAgICBXS1RleHRDaGVja2VyU3BlbGxpbmdVSUlzU2hvd2luZyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVsbGluZ1VJSXNTaG93aW5n
OworICAgIFdLVGV4dENoZWNrZXJUb2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmc7CisgICAgV0tU
ZXh0Q2hlY2tlclVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQgICAgICAgICAgICAg
ICAgICAgICAgICAgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZDsKKyAgICBXS1Rl
eHRDaGVja2VyVXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nICAgICAgICAgICAgICAg
ICAgICAgICAgICB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmc7CisgICAgV0tUZXh0
Q2hlY2tlckd1ZXNzZXNGb3JXb3JkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ3Vlc3Nlc0ZvcldvcmQ7CisgICAgV0tUZXh0Q2hlY2tlckxlYXJuV29yZCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVhcm5Xb3JkOwor
ICAgIFdLVGV4dENoZWNrZXJJZ25vcmVXb3JkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlnbm9yZVdvcmQ7Cit9OwordHlwZWRlZiBzdHJ1Y3QgV0tUZXh0
Q2hlY2tlckNsaWVudCBXS1RleHRDaGVja2VyQ2xpZW50OworCitlbnVtIHsga1dLVGV4dENoZWNr
ZXJDbGllbnRDdXJyZW50VmVyc2lvbiA9IDAgfTsKKworV0tfRVhQT1JUIHZvaWQgV0tUZXh0Q2hl
Y2tlclNldENsaWVudChjb25zdCBXS1RleHRDaGVja2VyQ2xpZW50KiBjbGllbnQpOworCitXS19F
WFBPUlQgdm9pZCBXS1RleHRDaGVja2VyQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3Rh
dGVDaGFuZ2VkKGJvb2wpOworV0tfRVhQT1JUIHZvaWQgV0tUZXh0Q2hlY2tlckdyYW1tYXJDaGVj
a2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCk7CisKK1dLX0VYUE9SVCB2b2lkIFdLVGV4dENo
ZWNrZXJDaGVja1NwZWxsaW5nKFdLUGFnZVJlZiBwYWdlLCBib29sIHN0YXJ0QmVmb3JlU2VsZWN0
aW9uKTsKK1dLX0VYUE9SVCB2b2lkIFdLVGV4dENoZWNrZXJDaGFuZ2VTcGVsbGluZ1RvV29yZChX
S1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgd29yZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cwor
fQorI2VuZGlmCisKKyNlbmRpZiAvKiBXS1RleHRDaGVja2VyX2ggKi8KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1RleHRDaGVja2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tUZXh0Q2hlY2tlci5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tUZXh0Q2hlY2tlci5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV0tUZXh0Q2hlY2tlci5oIgorCisjaW5jbHVkZSAiV0tBUElDYXN0
LmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViVGV4dENoZWNrZXIu
aCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKwordm9pZCBXS1RleHRDaGVja2VyU2V0Q2xp
ZW50KGNvbnN0IFdLVGV4dENoZWNrZXJDbGllbnQqIHdrQ2xpZW50KQoreworICAgIGlmICh3a0Ns
aWVudCAmJiB3a0NsaWVudC0+dmVyc2lvbikKKyAgICAgICAgcmV0dXJuOworICAgIFdlYlRleHRD
aGVja2VyOjpzaGFyZWQoKS0+c2V0Q2xpZW50KHdrQ2xpZW50KTsKK30KKwordm9pZCBXS1RleHRD
aGVja2VyQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5h
YmxlZCkKK3sKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChlbmFibGVkKTsKK30KKwordm9pZCBXS1RleHRDaGVj
a2VyR3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCit7Cisg
ICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5ncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVD
aGFuZ2VkKGVuYWJsZWQpOworfQorCit2b2lkIFdLVGV4dENoZWNrZXJDaGVja1NwZWxsaW5nKFdL
UGFnZVJlZiBwYWdlLCBib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQoreworICAgIFdlYlRleHRD
aGVja2VyOjpzaGFyZWQoKS0+Y2hlY2tTcGVsbGluZyh0b0ltcGwocGFnZSksIHN0YXJ0QmVmb3Jl
U2VsZWN0aW9uKTsKK30KKwordm9pZCBXS1RleHRDaGVja2VyQ2hhbmdlU3BlbGxpbmdUb1dvcmQo
V0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHdvcmQpCit7CisgICAgV2ViVGV4dENoZWNrZXI6
OnNoYXJlZCgpLT5jaGFuZ2VTcGVsbGluZ1RvV29yZCh0b0ltcGwocGFnZSksIHRvV1RGU3RyaW5n
KHdvcmQpKTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJHcmFtbWFyRGV0
YWlsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViR3JhbW1h
ckRldGFpbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
R3JhbW1hckRldGFpbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR3JhbW1hckRldGFpbC5oIgor
CisjaW5jbHVkZSAiSW1tdXRhYmxlQXJyYXkuaCIKKyNpbmNsdWRlICJXS0dyYW1tYXJEZXRhaWwu
aCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NS
ZWZQdHI8V2ViR3JhbW1hckRldGFpbD4gV2ViR3JhbW1hckRldGFpbDo6Y3JlYXRlKGludCBsb2Nh
dGlvbiwgaW50IGxlbmd0aCwgSW1tdXRhYmxlQXJyYXkqIGd1ZXNzZXMsIGNvbnN0IFN0cmluZyYg
dXNlckRlc2NyaXB0aW9uKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR3JhbW1hckRl
dGFpbChsb2NhdGlvbiwgbGVuZ3RoLCBndWVzc2VzLCB1c2VyRGVzY3JpcHRpb24pKTsKK30KKwor
UGFzc1JlZlB0cjxXZWJHcmFtbWFyRGV0YWlsPiBXZWJHcmFtbWFyRGV0YWlsOjpjcmVhdGUoY29u
c3QgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFdlYkdyYW1tYXJEZXRhaWwoZ3JhbW1hckRldGFpbCkpOworfQorCitXZWJH
cmFtbWFyRGV0YWlsOjpXZWJHcmFtbWFyRGV0YWlsKGludCBsb2NhdGlvbiwgaW50IGxlbmd0aCwg
SW1tdXRhYmxlQXJyYXkqIGd1ZXNzZXMsIGNvbnN0IFN0cmluZyYgdXNlckRlc2NyaXB0aW9uKQor
eworICAgIG1fZ3JhbW1hckRldGFpbC5sb2NhdGlvbiA9IGxvY2F0aW9uOworICAgIG1fZ3JhbW1h
ckRldGFpbC5sZW5ndGggPSBsZW5ndGg7CisKKyAgICBzaXplX3QgbnVtR3Vlc3NlcyA9IGd1ZXNz
ZXMtPnNpemUoKTsKKyAgICBtX2dyYW1tYXJEZXRhaWwuZ3Vlc3Nlcy5yZXNlcnZlQ2FwYWNpdHko
bnVtR3Vlc3Nlcyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HdWVzc2VzOyArK2kp
CisgICAgICAgIG1fZ3JhbW1hckRldGFpbC5ndWVzc2VzLnVuY2hlY2tlZEFwcGVuZChndWVzc2Vz
LT5hdDxXZWJTdHJpbmc+KGkpLT5zdHJpbmcoKSk7CisKKyAgICBtX2dyYW1tYXJEZXRhaWwudXNl
ckRlc2NyaXB0aW9uID0gdXNlckRlc2NyaXB0aW9uOworfQorCitQYXNzUmVmUHRyPEltbXV0YWJs
ZUFycmF5PiBXZWJHcmFtbWFyRGV0YWlsOjpndWVzc2VzKCkgY29uc3QKK3sKKyAgICBzaXplX3Qg
bnVtR3Vlc3NlcyA9IG1fZ3JhbW1hckRldGFpbC5ndWVzc2VzLnNpemUoKTsKKyAgICBWZWN0b3I8
UmVmUHRyPEFQSU9iamVjdD4gPiB3a0d1ZXNzZXMobnVtR3Vlc3Nlcyk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bUd1ZXNzZXM7ICsraSkKKyAgICAgICAgd2tHdWVzc2VzW2ldID0g
V2ViU3RyaW5nOjpjcmVhdGUobV9ncmFtbWFyRGV0YWlsLmd1ZXNzZXNbaV0pOworICAgIHJldHVy
biBJbW11dGFibGVBcnJheTo6YWRvcHQod2tHdWVzc2VzKTsKK30KKworV2ViR3JhbW1hckRldGFp
bDo6V2ViR3JhbW1hckRldGFpbChjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJiBncmFtbWFy
RGV0YWlsKQorICAgIDogbV9ncmFtbWFyRGV0YWlsKGdyYW1tYXJEZXRhaWwpCit7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlRl
eHRDaGVja2VyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlRleHRDaGVja2VyQ2xpZW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViVGV4dENoZWNrZXJDbGllbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVGV4dENoZWNrZXJDbGllbnRfaAorI2RlZmlu
ZSBXZWJUZXh0Q2hlY2tlckNsaWVudF9oCisKKyNpbmNsdWRlICJBUElDbGllbnQuaCIKKyNpbmNs
dWRlICJXS1RleHRDaGVja2VyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0Q2hlY2tlckNsaWVu
dC5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZVByb3h5OworCitjbGFzcyBXZWJU
ZXh0Q2hlY2tlckNsaWVudCA6IHB1YmxpYyBBUElDbGllbnQ8V0tUZXh0Q2hlY2tlckNsaWVudCwg
a1dLVGV4dENoZWNrZXJDbGllbnRDdXJyZW50VmVyc2lvbj4geworcHVibGljOgorICAgIGJvb2wg
Y29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCk7CisgICAgYm9vbCBjb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQoKTsKKyAgICB2b2lkIHNldENvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZChib29sKTsKKyAgICBib29sIGdyYW1tYXJDaGVja2luZ0VuYWJsZWQoKTsKKyAgICB2
b2lkIHNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCk7CisgICAgdWludDY0X3QgdW5pcXVl
U3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqKTsKKyAgICB2b2lkIGNsb3NlU3BlbGxEb2N1
bWVudFdpdGhUYWcodWludDY0X3QpOworICAgIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKHVp
bnQ2NF90IHRhZywgY29uc3QgU3RyaW5nJiB0ZXh0LCBpbnQzMl90JiBtaXNzcGVsbGluZ0xvY2F0
aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgdm9pZCBjaGVja0dyYW1tYXJP
ZlN0cmluZyh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9yPFdlYkNvcmU6
OkdyYW1tYXJEZXRhaWw+JiwgaW50MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBi
YWRHcmFtbWFyTGVuZ3RoKTsKKyAgICBib29sIHNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKKyAgICB2
b2lkIHRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKKyAgICB2b2lkIHVwZGF0ZVNwZWxsaW5n
VUlXaXRoTWlzc3BlbGxlZFdvcmQodWludDY0X3QgdGFnLCBjb25zdCBTdHJpbmcmIG1pc3NwZWxs
ZWRXb3JkKTsKKyAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyh1aW50
NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29uc3QgV2ViQ29yZTo6
R3JhbW1hckRldGFpbCYpOworICAgIHZvaWQgZ3Vlc3Nlc0ZvcldvcmQodWludDY0X3QgdGFnLCBj
b25zdCBTdHJpbmcmIHdvcmQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKTsKKyAgICB2b2lkIGxl
YXJuV29yZCh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYgd29yZCk7CisgICAgdm9pZCBpZ25v
cmVXb3JkKHVpbnQ2NF90IHRhZywgY29uc3QgU3RyaW5nJiB3b3JkKTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViVGV4dENoZWNrZXJDbGllbnRfaApJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tlckNsaWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tlckNs
aWVudC5jcHAJKHJldmlzaW9uIDk2NjAyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dp
bi9XZWJUZXh0Q2hlY2tlckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTc1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViVGV4dENo
ZWNrZXJDbGllbnQuaCIKLQotI2luY2x1ZGUgIkltbXV0YWJsZUFycmF5LmgiCi0jaW5jbHVkZSAi
V0tBUElDYXN0LmgiCi0jaW5jbHVkZSAiV0tTaGFyZWRBUElDYXN0LmgiCi0jaW5jbHVkZSAiV2Vi
R3JhbW1hckRldGFpbC5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotYm9vbCBXZWJUZXh0
Q2hlY2tlckNsaWVudDo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCkKLXsKLSAgICBp
ZiAoIW1fY2xpZW50LmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG1fY2xpZW50LmNvbnRpbnVvdXNTcGVsbENoZWNraW5n
QWxsb3dlZChtX2NsaWVudC5jbGllbnRJbmZvKTsKLX0KLQotYm9vbCBXZWJUZXh0Q2hlY2tlckNs
aWVudDo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkKLXsKLSAgICBpZiAoIW1fY2xp
ZW50LmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIG1fY2xpZW50LmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCht
X2NsaWVudC5jbGllbnRJbmZvKTsKLX0KLQotdm9pZCBXZWJUZXh0Q2hlY2tlckNsaWVudDo6c2V0
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAo
IW1fY2xpZW50LnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9jbGllbnQuc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGVu
YWJsZWQsIG1fY2xpZW50LmNsaWVudEluZm8pOwotfQotCi1ib29sIFdlYlRleHRDaGVja2VyQ2xp
ZW50OjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkKLXsKLSAgICBpZiAoIW1fY2xpZW50LmdyYW1t
YXJDaGVja2luZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBt
X2NsaWVudC5ncmFtbWFyQ2hlY2tpbmdFbmFibGVkKG1fY2xpZW50LmNsaWVudEluZm8pOwotfQot
Ci12b2lkIFdlYlRleHRDaGVja2VyQ2xpZW50OjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJv
b2wgZW5hYmxlZCkKLXsKLSAgICBpZiAoIW1fY2xpZW50LnNldEdyYW1tYXJDaGVja2luZ0VuYWJs
ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xpZW50LnNldEdyYW1tYXJDaGVja2luZ0Vu
YWJsZWQoZW5hYmxlZCwgbV9jbGllbnQuY2xpZW50SW5mbyk7Ci19Ci0KLXVpbnQ2NF90IFdlYlRl
eHRDaGVja2VyQ2xpZW50Ojp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSogcGFn
ZSkKLXsKLSAgICBpZiAoIW1fY2xpZW50LnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY2xpZW50LnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWco
dG9BUEkocGFnZSksIG1fY2xpZW50LmNsaWVudEluZm8pOwotfQotCi12b2lkIFdlYlRleHRDaGVj
a2VyQ2xpZW50OjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHVpbnQ2NF90IHRhZykKLXsKLSAg
ICBpZiAoIW1fY2xpZW50LmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fY2xpZW50LmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodGFnLCBtX2NsaWVu
dC5jbGllbnRJbmZvKTsKLX0KLQotdm9pZCBXZWJUZXh0Q2hlY2tlckNsaWVudDo6Y2hlY2tTcGVs
bGluZ09mU3RyaW5nKHVpbnQ2NF90IHRhZywgY29uc3QgU3RyaW5nJiB0ZXh0LCBpbnQzMl90JiBt
aXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCkKLXsKLSAgICBp
ZiAoIW1fY2xpZW50LmNoZWNrU3BlbGxpbmdPZlN0cmluZykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9jbGllbnQuY2hlY2tTcGVsbGluZ09mU3RyaW5nKHRhZywgdG9BUEkodGV4dC5pbXBsKCkp
LCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoLCBtX2NsaWVudC5jbGll
bnRJbmZvKTsKLX0KLQotdm9pZCBXZWJUZXh0Q2hlY2tlckNsaWVudDo6Y2hlY2tHcmFtbWFyT2ZT
dHJpbmcodWludDY0X3QgdGFnLCBjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxXZWJDb3JlOjpH
cmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludDMyX3QmIGJhZEdyYW1tYXJMb2NhdGlv
biwgaW50MzJfdCYgYmFkR3JhbW1hckxlbmd0aCkKLXsKLSAgICBpZiAoIW1fY2xpZW50LmNoZWNr
R3JhbW1hck9mU3RyaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXS0FycmF5UmVmIHdrR3Jh
bW1hckRldGFpbHNSZWYgPSAwOwotICAgIG1fY2xpZW50LmNoZWNrR3JhbW1hck9mU3RyaW5nKHRh
ZywgdG9BUEkodGV4dC5pbXBsKCkpLCAmd2tHcmFtbWFyRGV0YWlsc1JlZiwgJmJhZEdyYW1tYXJM
b2NhdGlvbiwgJmJhZEdyYW1tYXJMZW5ndGgsIG1fY2xpZW50LmNsaWVudEluZm8pOwotCi0gICAg
UmVmUHRyPEltbXV0YWJsZUFycmF5PiB3a0dyYW1tYXJEZXRhaWxzID0gYWRvcHRSZWYodG9JbXBs
KHdrR3JhbW1hckRldGFpbHNSZWYpKTsKLSAgICBzaXplX3QgbnVtR3JhbW1hckRldGFpbHMgPSB3
a0dyYW1tYXJEZXRhaWxzLT5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1H
cmFtbWFyRGV0YWlsczsgKytpKQotICAgICAgICBncmFtbWFyRGV0YWlscy5hcHBlbmQod2tHcmFt
bWFyRGV0YWlscy0+YXQ8V2ViR3JhbW1hckRldGFpbD4oaSktPmdyYW1tYXJEZXRhaWwoKSk7Ci19
Ci0KLWJvb2wgV2ViVGV4dENoZWNrZXJDbGllbnQ6OnNwZWxsaW5nVUlJc1Nob3dpbmcoKQotewot
ICAgIGlmICghbV9jbGllbnQuc3BlbGxpbmdVSUlzU2hvd2luZykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIG1fY2xpZW50LnNwZWxsaW5nVUlJc1Nob3dpbmcobV9jbGllbnQu
Y2xpZW50SW5mbyk7Ci19Ci0KLXZvaWQgV2ViVGV4dENoZWNrZXJDbGllbnQ6OnRvZ2dsZVNwZWxs
aW5nVUlJc1Nob3dpbmcoKQotewotICAgIGlmICghbV9jbGllbnQudG9nZ2xlU3BlbGxpbmdVSUlz
U2hvd2luZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmV0dXJuIG1fY2xpZW50LnRvZ2dsZVNw
ZWxsaW5nVUlJc1Nob3dpbmcobV9jbGllbnQuY2xpZW50SW5mbyk7Ci19Ci0KLXZvaWQgV2ViVGV4
dENoZWNrZXJDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQodWludDY0
X3QgdGFnLCBjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKQotewotICAgIGlmICghbV9jbGll
bnQudXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9jbGllbnQudXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCh0YWcsIHRv
QVBJKG1pc3NwZWxsZWRXb3JkLmltcGwoKSksIG1fY2xpZW50LmNsaWVudEluZm8pOwotfQotCi12
b2lkIFdlYlRleHRDaGVja2VyQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJp
bmcodWludDY0X3QgdGFnLCBjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IFdl
YkNvcmU6OkdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCi17Ci0gICAgaWYgKCFtX2NsaWVu
dC51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fY2xpZW50LnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyh0YWcsIHRvQVBJ
KGJhZEdyYW1tYXJQaHJhc2UuaW1wbCgpKSwgdG9BUEkoZ3JhbW1hckRldGFpbCksIG1fY2xpZW50
LmNsaWVudEluZm8pOwotfQotCi12b2lkIFdlYlRleHRDaGVja2VyQ2xpZW50OjpndWVzc2VzRm9y
V29yZCh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYgd29yZCwgVmVjdG9yPFN0cmluZz4mIGd1
ZXNzZXMpCi17Ci0gICAgaWYgKCFtX2NsaWVudC5ndWVzc2VzRm9yV29yZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgUmVmUHRyPEltbXV0YWJsZUFycmF5PiB3a0d1ZXNzZXMgPSBhZG9wdFJlZih0
b0ltcGwobV9jbGllbnQuZ3Vlc3Nlc0ZvcldvcmQodGFnLCB0b0FQSSh3b3JkLmltcGwoKSksIG1f
Y2xpZW50LmNsaWVudEluZm8pKSk7Ci0gICAgc2l6ZV90IG51bUd1ZXNzZXMgPSB3a0d1ZXNzZXMt
PnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUd1ZXNzZXM7ICsraSkKLSAg
ICAgICAgZ3Vlc3Nlcy5hcHBlbmQod2tHdWVzc2VzLT5hdDxXZWJTdHJpbmc+KGkpLT5zdHJpbmco
KSk7Ci19Ci0KLXZvaWQgV2ViVGV4dENoZWNrZXJDbGllbnQ6OmxlYXJuV29yZCh1aW50NjRfdCB0
YWcsIGNvbnN0IFN0cmluZyYgd29yZCkKLXsKLSAgICBpZiAoIW1fY2xpZW50LmxlYXJuV29yZCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jbGllbnQubGVhcm5Xb3JkKHRhZywgdG9BUEkod29y
ZC5pbXBsKCkpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKLX0KLQotdm9pZCBXZWJUZXh0Q2hlY2tl
ckNsaWVudDo6aWdub3JlV29yZCh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYgd29yZCkKLXsK
LSAgICBpZiAoIW1fY2xpZW50Lmlnbm9yZVdvcmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
Y2xpZW50Lmlnbm9yZVdvcmQodGFnLCB0b0FQSSh3b3JkLmltcGwoKSksIG1fY2xpZW50LmNsaWVu
dEluZm8pOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy93aW4vV2ViR3JhbW1hckRldGFpbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJHcmFtbWFyRGV0YWlsLmNwcAkocmV2aXNpb24gOTY2
MDIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYkdyYW1tYXJEZXRhaWwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViR3JhbW1hckRldGFpbC5oIgotCi0jaW5jbHVkZSAiSW1t
dXRhYmxlQXJyYXkuaCIKLSNpbmNsdWRlICJXS0dyYW1tYXJEZXRhaWwuaCIKLSNpbmNsdWRlICJX
ZWJTdHJpbmcuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVBhc3NSZWZQdHI8V2ViR3JhbW1h
ckRldGFpbD4gV2ViR3JhbW1hckRldGFpbDo6Y3JlYXRlKGludCBsb2NhdGlvbiwgaW50IGxlbmd0
aCwgSW1tdXRhYmxlQXJyYXkqIGd1ZXNzZXMsIGNvbnN0IFN0cmluZyYgdXNlckRlc2NyaXB0aW9u
KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR3JhbW1hckRldGFpbChsb2NhdGlvbiwg
bGVuZ3RoLCBndWVzc2VzLCB1c2VyRGVzY3JpcHRpb24pKTsKLX0KLQotUGFzc1JlZlB0cjxXZWJH
cmFtbWFyRGV0YWlsPiBXZWJHcmFtbWFyRGV0YWlsOjpjcmVhdGUoY29uc3QgV2ViQ29yZTo6R3Jh
bW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdl
YkdyYW1tYXJEZXRhaWwoZ3JhbW1hckRldGFpbCkpOwotfQotCi1XZWJHcmFtbWFyRGV0YWlsOjpX
ZWJHcmFtbWFyRGV0YWlsKGludCBsb2NhdGlvbiwgaW50IGxlbmd0aCwgSW1tdXRhYmxlQXJyYXkq
IGd1ZXNzZXMsIGNvbnN0IFN0cmluZyYgdXNlckRlc2NyaXB0aW9uKQotewotICAgIG1fZ3JhbW1h
ckRldGFpbC5sb2NhdGlvbiA9IGxvY2F0aW9uOwotICAgIG1fZ3JhbW1hckRldGFpbC5sZW5ndGgg
PSBsZW5ndGg7Ci0KLSAgICBzaXplX3QgbnVtR3Vlc3NlcyA9IGd1ZXNzZXMtPnNpemUoKTsKLSAg
ICBtX2dyYW1tYXJEZXRhaWwuZ3Vlc3Nlcy5yZXNlcnZlQ2FwYWNpdHkobnVtR3Vlc3Nlcyk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HdWVzc2VzOyArK2kpCi0gICAgICAgIG1fZ3Jh
bW1hckRldGFpbC5ndWVzc2VzLnVuY2hlY2tlZEFwcGVuZChndWVzc2VzLT5hdDxXZWJTdHJpbmc+
KGkpLT5zdHJpbmcoKSk7Ci0KLSAgICBtX2dyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uID0g
dXNlckRlc2NyaXB0aW9uOwotfQotCi1QYXNzUmVmUHRyPEltbXV0YWJsZUFycmF5PiBXZWJHcmFt
bWFyRGV0YWlsOjpndWVzc2VzKCkgY29uc3QKLXsKLSAgICBzaXplX3QgbnVtR3Vlc3NlcyA9IG1f
Z3JhbW1hckRldGFpbC5ndWVzc2VzLnNpemUoKTsKLSAgICBWZWN0b3I8UmVmUHRyPEFQSU9iamVj
dD4gPiB3a0d1ZXNzZXMobnVtR3Vlc3Nlcyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bUd1ZXNzZXM7ICsraSkKLSAgICAgICAgd2tHdWVzc2VzW2ldID0gV2ViU3RyaW5nOjpjcmVh
dGUobV9ncmFtbWFyRGV0YWlsLmd1ZXNzZXNbaV0pOwotICAgIHJldHVybiBJbW11dGFibGVBcnJh
eTo6YWRvcHQod2tHdWVzc2VzKTsKLX0KLQotV2ViR3JhbW1hckRldGFpbDo6V2ViR3JhbW1hckRl
dGFpbChjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0YWlsKQotICAgIDog
bV9ncmFtbWFyRGV0YWlsKGdyYW1tYXJEZXRhaWwpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hl
Y2tlci5jcHAJKHJldmlzaW9uIDk2NjAyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dp
bi9XZWJUZXh0Q2hlY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJUZXh0Q2hlY2tlci5o
IgotCi0jaW5jbHVkZSAiVGV4dENoZWNrZXIuaCIKLSNpbmNsdWRlICJXS0FQSUNhc3QuaCIKLSNp
bmNsdWRlICJXZWJDb250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotV2ViVGV4dENoZWNrZXIqIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKQot
ewotICAgIHN0YXRpYyBXZWJUZXh0Q2hlY2tlciogdGV4dENoZWNrZXIgPSBhZG9wdFJlZihuZXcg
V2ViVGV4dENoZWNrZXIpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gdGV4dENoZWNrZXI7Ci19Ci0K
LVdlYlRleHRDaGVja2VyOjpXZWJUZXh0Q2hlY2tlcigpCi17Ci19Ci0KLXZvaWQgV2ViVGV4dENo
ZWNrZXI6OnNldENsaWVudChjb25zdCBXS1RleHRDaGVja2VyQ2xpZW50KiBjbGllbnQpCi17Ci0g
ICAgbV9jbGllbnQuaW5pdGlhbGl6ZShjbGllbnQpOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVT
dGF0ZUZvckFsbFdlYlByb2Nlc3NlcygpCi17Ci0gICAgY29uc3QgVmVjdG9yPFdlYkNvbnRleHQq
PiYgY29udGV4dHMgPSBXZWJDb250ZXh0OjphbGxDb250ZXh0cygpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY29udGV4dHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgV2ViUHJvY2Vzc1By
b3h5KiB3ZWJQcm9jZXNzID0gY29udGV4dHNbaV0tPnByb2Nlc3MoKTsKLSAgICAgICAgaWYgKCF3
ZWJQcm9jZXNzKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHdlYlByb2Nlc3MtPnVw
ZGF0ZVRleHRDaGVja2VyU3RhdGUoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViVGV4dENoZWNrZXI6
OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQp
Ci17Ci0gICAgVGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRl
Q2hhbmdlZChlbmFibGVkKTsKLSAgICB1cGRhdGVTdGF0ZUZvckFsbFdlYlByb2Nlc3NlcygpOwot
fQotCi12b2lkIFdlYlRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFu
Z2VkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBUZXh0Q2hlY2tlcjo6Z3JhbW1hckNoZWNraW5nRW5h
YmxlZFN0YXRlQ2hhbmdlZChlbmFibGVkKTsKLSAgICB1cGRhdGVTdGF0ZUZvckFsbFdlYlByb2Nl
c3NlcygpOwotfQotCi12b2lkIFdlYlRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nKGNvbnN0IFdl
YlBhZ2VQcm94eSogcGFnZSwgYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKLXsKLSAgICBwYWdl
LT5hZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoc3RhcnRCZWZvcmVTZWxlY3Rpb24pOwotfQotCi12
b2lkIFdlYlRleHRDaGVja2VyOjpjaGFuZ2VTcGVsbGluZ1RvV29yZChjb25zdCBXZWJQYWdlUHJv
eHkqIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGV4dCkKLXsKLSAgICBwYWdlLT5jaGFuZ2VTcGVsbGlu
Z1RvV29yZCh0ZXh0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyQ2xpZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tlckNsaWVudC5oCShy
ZXZpc2lvbiA5NjYwMikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4dENo
ZWNrZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBXZWJUZXh0Q2hlY2tlckNsaWVudF9oCi0jZGVmaW5lIFdlYlRleHRDaGVja2Vy
Q2xpZW50X2gKLQotI2luY2x1ZGUgIkFQSUNsaWVudC5oIgotI2luY2x1ZGUgIldLVGV4dENoZWNr
ZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1RleHRDaGVja2VyQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1jbGFzcyBXZWJQYWdlUHJveHk7Ci0KLWNsYXNzIFdlYlRleHRDaGVja2VyQ2xpZW50
IDogcHVibGljIEFQSUNsaWVudDxXS1RleHRDaGVja2VyQ2xpZW50LCBrV0tUZXh0Q2hlY2tlckNs
aWVudEN1cnJlbnRWZXJzaW9uPiB7Ci1wdWJsaWM6Ci0gICAgYm9vbCBjb250aW51b3VzU3BlbGxD
aGVja2luZ0FsbG93ZWQoKTsKLSAgICBib29sIGNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCgpOwotICAgIHZvaWQgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpOwot
ICAgIGJvb2wgZ3JhbW1hckNoZWNraW5nRW5hYmxlZCgpOwotICAgIHZvaWQgc2V0R3JhbW1hckNo
ZWNraW5nRW5hYmxlZChib29sKTsKLSAgICB1aW50NjRfdCB1bmlxdWVTcGVsbERvY3VtZW50VGFn
KFdlYlBhZ2VQcm94eSopOwotICAgIHZvaWQgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh1aW50
NjRfdCk7Ci0gICAgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcodWludDY0X3QgdGFnLCBjb25z
dCBTdHJpbmcmIHRleHQsIGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QmIG1p
c3NwZWxsaW5nTGVuZ3RoKTsKLSAgICB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKHVpbnQ2NF90
IHRhZywgY29uc3QgU3RyaW5nJiB0ZXh0LCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4m
LCBpbnQzMl90JiBiYWRHcmFtbWFyTG9jYXRpb24sIGludDMyX3QmIGJhZEdyYW1tYXJMZW5ndGgp
OwotICAgIGJvb2wgc3BlbGxpbmdVSUlzU2hvd2luZygpOwotICAgIHZvaWQgdG9nZ2xlU3BlbGxp
bmdVSUlzU2hvd2luZygpOwotICAgIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVk
V29yZCh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpOwotICAgIHZv
aWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKHVpbnQ2NF90IHRhZywgY29uc3Qg
U3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJik7
Ci0gICAgdm9pZCBndWVzc2VzRm9yV29yZCh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYgd29y
ZCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpOwotICAgIHZvaWQgbGVhcm5Xb3JkKHVpbnQ2NF90
IHRhZywgY29uc3QgU3RyaW5nJiB3b3JkKTsKLSAgICB2b2lkIGlnbm9yZVdvcmQodWludDY0X3Qg
dGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZiAvLyBXZWJUZXh0Q2hlY2tlckNsaWVudF9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3Mvd2luL1dlYkdyYW1tYXJEZXRhaWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3Mvd2luL1dlYkdyYW1tYXJEZXRhaWwuaAkocmV2aXNpb24gOTY2MDIpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYkdyYW1tYXJEZXRhaWwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJHcmFtbWFy
RGV0YWlsX2gKLSNkZWZpbmUgV2ViR3JhbW1hckRldGFpbF9oCi0KLSNpbmNsdWRlICJBUElPYmpl
Y3QuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1RleHRDaGVja2VyQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotY2xhc3MgSW1tdXRhYmxlQXJyYXk7Ci0KLWNsYXNzIFdlYkdyYW1tYXJEZXRh
aWwgOiBwdWJsaWMgQVBJT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgVHlwZSBB
UElUeXBlID0gVHlwZUdyYW1tYXJEZXRhaWw7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR3Jh
bW1hckRldGFpbD4gY3JlYXRlKGludCBsb2NhdGlvbiwgaW50IGxlbmd0aCwgSW1tdXRhYmxlQXJy
YXkqIGd1ZXNzZXMsIGNvbnN0IFN0cmluZyYgdXNlckRlc2NyaXB0aW9uKTsKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXZWJHcmFtbWFyRGV0YWlsPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6R3JhbW1h
ckRldGFpbCYpOwotCi0gICAgaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ncmFtbWFy
RGV0YWlsLmxvY2F0aW9uOyB9Ci0gICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3Jh
bW1hckRldGFpbC5sZW5ndGg7IH0KLSAgICBQYXNzUmVmUHRyPEltbXV0YWJsZUFycmF5PiBndWVz
c2VzKCkgY29uc3Q7Ci0gICAgY29uc3QgU3RyaW5nJiB1c2VyRGVzY3JpcHRpb24oKSBjb25zdCB7
IHJldHVybiBtX2dyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uOyB9Ci0KLSAgICBjb25zdCBX
ZWJDb3JlOjpHcmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0YWlsKCkgeyByZXR1cm4gbV9ncmFtbWFy
RGV0YWlsOyB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViR3JhbW1hckRldGFpbChpbnQgbG9jYXRpb24s
IGludCBsZW5ndGgsIEltbXV0YWJsZUFycmF5KiBndWVzc2VzLCBjb25zdCBTdHJpbmcmIHVzZXJE
ZXNjcmlwdGlvbik7Ci0gICAgV2ViR3JhbW1hckRldGFpbChjb25zdCBXZWJDb3JlOjpHcmFtbWFy
RGV0YWlsJik7Ci0KLSAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIEFQSVR5
cGU7IH0KLQotICAgIFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwgbV9ncmFtbWFyRGV0YWlsOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJHcmFtbWFyRGV0YWlsX2gK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyLmgJ
KHJldmlzaW9uIDk2NjAyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJUZXh0
Q2hlY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIFdlYlRleHRDaGVja2VyX2gKLSNkZWZpbmUgV2ViVGV4dENoZWNrZXJfaAotCi0jaW5j
bHVkZSAiQVBJT2JqZWN0LmgiCi0jaW5jbHVkZSAiV0tUZXh0Q2hlY2tlci5oIgotI2luY2x1ZGUg
IldlYlRleHRDaGVja2VyQ2xpZW50LmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VQcm94eTsKLQotY2xhc3MgV2ViVGV4dENo
ZWNrZXIgOiBwdWJsaWMgQVBJT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgVHlw
ZSBBUElUeXBlID0gVHlwZVRleHRDaGVja2VyOwotCi0gICAgc3RhdGljIFdlYlRleHRDaGVja2Vy
KiBzaGFyZWQoKTsKLQotICAgIHZvaWQgc2V0Q2xpZW50KGNvbnN0IFdLVGV4dENoZWNrZXJDbGll
bnQqKTsKLSAgICBXZWJUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50KCkgeyByZXR1cm4gbV9jbGll
bnQ7IH0KLQotICAgIHZvaWQgY29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFu
Z2VkKGJvb2wpOwotICAgIHZvaWQgZ3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChi
b29sKTsKLQotICAgIHZvaWQgY2hlY2tTcGVsbGluZyhjb25zdCBXZWJQYWdlUHJveHkqLCBib29s
IHN0YXJ0QmVmb3JlU2VsZWN0aW9uKTsKLSAgICB2b2lkIGNoYW5nZVNwZWxsaW5nVG9Xb3JkKGNv
bnN0IFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYpOwotCi1wcml2YXRlOgotICAgIFdlYlRl
eHRDaGVja2VyKCk7Ci0KLSAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIEFQ
SVR5cGU7IH0KLQotICAgIFdlYlRleHRDaGVja2VyQ2xpZW50IG1fY2xpZW50OwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJUZXh0Q2hlY2tlcl9oCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVGV4dENoZWNrZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVGV4dENoZWNrZXIuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJUZXh0Q2hlY2tlci5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJUZXh0Q2hlY2tlcl9oCisj
ZGVmaW5lIFdlYlRleHRDaGVja2VyX2gKKworI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1
ZGUgIldLVGV4dENoZWNrZXIuaCIKKyNpbmNsdWRlICJXZWJUZXh0Q2hlY2tlckNsaWVudC5oIgor
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBX
ZWJQYWdlUHJveHk7CisKK2NsYXNzIFdlYlRleHRDaGVja2VyIDogcHVibGljIEFQSU9iamVjdCB7
CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IFR5cGUgQVBJVHlwZSA9IFR5cGVUZXh0Q2hlY2tl
cjsKKworICAgIHN0YXRpYyBXZWJUZXh0Q2hlY2tlciogc2hhcmVkKCk7CisKKyAgICB2b2lkIHNl
dENsaWVudChjb25zdCBXS1RleHRDaGVja2VyQ2xpZW50Kik7CisgICAgV2ViVGV4dENoZWNrZXJD
bGllbnQmIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CisKKyAgICB2b2lkIGNvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sKTsKKyAgICB2b2lkIGdyYW1t
YXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCk7CisKKyAgICB2b2lkIGNoZWNrU3Bl
bGxpbmcoY29uc3QgV2ViUGFnZVByb3h5KiwgYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbik7Cisg
ICAgdm9pZCBjaGFuZ2VTcGVsbGluZ1RvV29yZChjb25zdCBXZWJQYWdlUHJveHkqLCBjb25zdCBT
dHJpbmcmKTsKKworcHJpdmF0ZToKKyAgICBXZWJUZXh0Q2hlY2tlcigpOworCisgICAgdmlydHVh
bCBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBBUElUeXBlOyB9CisKKyAgICBXZWJUZXh0Q2hl
Y2tlckNsaWVudCBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gV2ViVGV4dENoZWNrZXJfaApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlRleHRDaGVja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViVGV4dENoZWNrZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlRleHRDaGVja2VyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJUZXh0Q2hlY2tlci5o
IgorCisjaW5jbHVkZSAiVGV4dENoZWNrZXIuaCIKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNp
bmNsdWRlICJXZWJDb250ZXh0LmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworV2ViVGV4dENoZWNrZXIqIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKQor
eworICAgIHN0YXRpYyBXZWJUZXh0Q2hlY2tlciogdGV4dENoZWNrZXIgPSBhZG9wdFJlZihuZXcg
V2ViVGV4dENoZWNrZXIpLmxlYWtSZWYoKTsKKyAgICByZXR1cm4gdGV4dENoZWNrZXI7Cit9CisK
K1dlYlRleHRDaGVja2VyOjpXZWJUZXh0Q2hlY2tlcigpCit7Cit9CisKK3ZvaWQgV2ViVGV4dENo
ZWNrZXI6OnNldENsaWVudChjb25zdCBXS1RleHRDaGVja2VyQ2xpZW50KiBjbGllbnQpCit7Cisg
ICAgbV9jbGllbnQuaW5pdGlhbGl6ZShjbGllbnQpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVT
dGF0ZUZvckFsbFdlYlByb2Nlc3NlcygpCit7CisgICAgY29uc3QgVmVjdG9yPFdlYkNvbnRleHQq
PiYgY29udGV4dHMgPSBXZWJDb250ZXh0OjphbGxDb250ZXh0cygpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY29udGV4dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViUHJvY2Vzc1By
b3h5KiB3ZWJQcm9jZXNzID0gY29udGV4dHNbaV0tPnByb2Nlc3MoKTsKKyAgICAgICAgaWYgKCF3
ZWJQcm9jZXNzKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHdlYlByb2Nlc3MtPnVw
ZGF0ZVRleHRDaGVja2VyU3RhdGUoKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVGV4dENoZWNrZXI6
OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQp
Cit7CisgICAgVGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRl
Q2hhbmdlZChlbmFibGVkKTsKKyAgICB1cGRhdGVTdGF0ZUZvckFsbFdlYlByb2Nlc3NlcygpOwor
fQorCit2b2lkIFdlYlRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFu
Z2VkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBUZXh0Q2hlY2tlcjo6Z3JhbW1hckNoZWNraW5nRW5h
YmxlZFN0YXRlQ2hhbmdlZChlbmFibGVkKTsKKyAgICB1cGRhdGVTdGF0ZUZvckFsbFdlYlByb2Nl
c3NlcygpOworfQorCit2b2lkIFdlYlRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nKGNvbnN0IFdl
YlBhZ2VQcm94eSogcGFnZSwgYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKK3sKKyAgICBwYWdl
LT5hZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoc3RhcnRCZWZvcmVTZWxlY3Rpb24pOworfQorCit2
b2lkIFdlYlRleHRDaGVja2VyOjpjaGFuZ2VTcGVsbGluZ1RvV29yZChjb25zdCBXZWJQYWdlUHJv
eHkqIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBwYWdlLT5jaGFuZ2VTcGVsbGlu
Z1RvV29yZCh0ZXh0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA5NjYwMykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDExLTEwLTA0ICBSYXZpIFBoYW5lZW5kcmEgS2FzaWJo
YXRsYSAgPHJhdmkua2FzaWJoYXRsYUBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgTW92ZSB3aW5k
b3dzIHNwZWNpZmljIFRleHRDaGVja2VyIGltcGxlbWVudGF0aW9uIGNvbW1vbiB0byBhbGwgcG9y
dHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODUz
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsbCB0
aGUgVGV4dENoZWNrZXIgZmVhdHVyZSBpbXBsZW1lbnRhdGlvbiBmaWxlcyBhcmUgbW92ZWQgb3V0
c2lkZSBvZiB3aW4gcG9ydCBzaW5jZSB0aGV5IGFyZQorICAgICAgICBwbGF0Zm9ybSBpbmRlcGVu
ZGVudCBhbmQgY2FuIGJlIG1vdmVkIGFjcm9zcyBhbGwgcG9ydHMuIE9ubHkgdGhlIGltcGxlbWVu
dGF0aW9uIG9mIFRleHRDaGVja2VyCisgICAgICAgIGNsYXNzIGlzIHBsYXRmb3JtIGRlcGVuZGVu
dCBub3cgYW5kIGhhcyBiZWVuIHJldGFpbmVkIGFjcm9zcyBhbGwgcG9ydHMuIFJlc3QgYWxsIGZp
bGVzIGhhcyBiZWVuCisgICAgICAgIG1vdmVkIGZvciBhbGwgcG9ydHMgdXNhZ2UuCisKKyAgICAg
ICAgKiBTaGFyZWQvQVBJL2MvV0tCYXNlLmg6IEFkZCBXS0dyYW1tYXJEZXRhaWxSZWYgJiBXS1Rl
eHRDaGVja2VyUmVmIHR5cGVzLgorICAgICAgICAqIFNoYXJlZC9BUEkvYy93aW4vV0tCYXNlV2lu
Lmg6IFJlbW92ZSBXS0dyYW1tYXJEZXRhaWxSZWYgJiBXS1RleHRDaGVja2VyUmVmIHR5cGVzLgor
ICAgICAgICAqIFNoYXJlZC9BUElPYmplY3QuaDogTW92ZWQgVHlwZUdyYW1tYXJEZXRhaWwgJiBU
eXBlVGV4dENoZWNrZXIgZnJvbSBwbGF0Zm9ybSBzcGVjaWZpYyBzZWN0aW9uIHRvIFVJUHJvY2Vz
cyB0eXBlcy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0Lmg6IEFkZGVkIG1h
cHBpbmcgZm9yIFdLVGV4dENoZWNrZXJSZWYgJiBXS0dyYW1tYXJEZXRhaWxSZWYuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9DL1dLR3JhbW1hckRldGFpbC5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLR3JhbW1hckRldGFpbC5jcHAuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9DL1dLR3JhbW1hckRldGFpbC5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dpbi9XS0dyYW1tYXJEZXRhaWwuaC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tUZXh0Q2hlY2tlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLVGV4dENoZWNrZXIuY3BwLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1RleHRDaGVja2VyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLVGV4dENoZWNrZXIuaC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0Mvd2luL1dLQVBJQ2FzdFdpbi5oOiBSZW1vdmVkIG1hcHBpbmcgZm9yIFdL
VGV4dENoZWNrZXJSZWYgJiBXS0dyYW1tYXJEZXRhaWxSZWYuCisgICAgICAgICogVUlQcm9jZXNz
L1dlYkdyYW1tYXJEZXRhaWwuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3dpbi9XZWJHcmFtbWFyRGV0YWlsLmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViR3Jh
bW1hckRldGFpbC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9X
ZWJHcmFtbWFyRGV0YWlsLmguCisgICAgICAgICogVUlQcm9jZXNzL1dlYlRleHRDaGVja2VyLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNr
ZXIuY3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJUZXh0Q2hlY2tlci5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tlci5oLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJUZXh0Q2hlY2tlckNsaWVudC5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyQ2xpZW50LmNwcC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViVGV4dENoZWNrZXJDbGllbnQuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXJDbGllbnQuaC4KKyAgICAgICAg
KiB3aW4vV2ViS2l0Mi52Y3Byb2o6IENvcnJlY3RlZCBwYXRocyBmb3IgcmVuYW1lZCBmaWxlcy4K
KyAgICAgICAgKiB3aW4vV2ViS2l0MkdlbmVyYXRlZC5tYWtlOiBDb3JyZWN0ZWQgcGF0aHMgZm9y
IHJlbmFtZWQgZmlsZXMuCisKIDIwMTEtMTAtMDQgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogUmVtb3ZlIGh0dHAvdGVzdHMv
aW5zcGVjdG9yL25ldHdvcmsvZGlzYWJsZWQtY2FjaGUtY3Jhc2guaHRtbC4KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi93aW4vV2ViS2l0Mi52Y3Byb2oJKHJldmlzaW9uIDk2NjAyKQorKysgU291cmNlL1dlYktpdDIv
d2luL1dlYktpdDIudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yOTMxLDYgKzI5MzEsMTQgQEAK
IAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9j
ZXNzXFdlYkdyYW1tYXJEZXRhaWwuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcV2ViR3JhbW1hckRldGFpbC5oIgorCQkJCT4K
KwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcV2Vi
SGlzdG9yeUNsaWVudC5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMzA5MSw2ICszMDk5LDIy
IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJ
UHJvY2Vzc1xXZWJUZXh0Q2hlY2tlci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUK
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xXZWJUZXh0Q2hlY2tlci5oIgorCQkJCT4K
KwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcV2Vi
VGV4dENoZWNrZXJDbGllbnQuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcV2ViVGV4dENoZWNrZXJDbGllbnQuaCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXFdl
YlVJQ2xpZW50LmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0zMjY1LDYgKzMyODksMTQgQEAK
IAkJCQkJCT4KIAkJCQkJPC9GaWxlPgogCQkJCQk8RmlsZQorCQkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxVSVByb2Nlc3NcQVBJXENcV0tHcmFtbWFyRGV0YWlsLmNwcCIKKwkJCQkJCT4KKwkJCQkJPC9G
aWxlPgorCQkJCQk8RmlsZQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcQVBJXENc
V0tHcmFtbWFyRGV0YWlsLmgiCisJCQkJCQk+CisJCQkJCTwvRmlsZT4KKwkJCQkJPEZpbGUKIAkJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXEFQSVxDXFdLSWNvbkRhdGFiYXNlLmNwcCIK
IAkJCQkJCT4KIAkJCQkJPC9GaWxlPgpAQCAtMzM4NCw2ICszNDE2LDE0IEBACiAJCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xBUElcQ1xXS1Jlc291cmNlQ2FjaGVNYW5hZ2VyLmgiCiAJ
CQkJCQk+CiAJCQkJCTwvRmlsZT4KKwkJCQkJPEZpbGUKKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
VUlQcm9jZXNzXEFQSVxDXFdLVGV4dENoZWNrZXIuY3BwIgorCQkJCQkJPgorCQkJCQk8L0ZpbGU+
CisJCQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xBUElcQ1xXS1Rl
eHRDaGVja2VyLmgiCisJCQkJCQk+CisJCQkJCTwvRmlsZT4KIAkJCQkJPEZpbHRlcgogCQkJCQkJ
TmFtZT0iY2ciCiAJCQkJCQk+CkBAIC0zNDM2LDIyICszNDc2LDYgQEAKIAkJCQkJCQk+CiAJCQkJ
CQk8L0ZpbGU+CiAJCQkJCQk8RmlsZQotCQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNz
XEFQSVxDXHdpblxXS0dyYW1tYXJEZXRhaWwuY3BwIgotCQkJCQkJCT4KLQkJCQkJCTwvRmlsZT4K
LQkJCQkJCTxGaWxlCi0JCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcQVBJXENcd2lu
XFdLR3JhbW1hckRldGFpbC5oIgotCQkJCQkJCT4KLQkJCQkJCTwvRmlsZT4KLQkJCQkJCTxGaWxl
Ci0JCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcQVBJXENcd2luXFdLVGV4dENoZWNr
ZXIuY3BwIgotCQkJCQkJCT4KLQkJCQkJCTwvRmlsZT4KLQkJCQkJCTxGaWxlCi0JCQkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcQVBJXENcd2luXFdLVGV4dENoZWNrZXIuaCIKLQkJCQkJ
CQk+Ci0JCQkJCQk8L0ZpbGU+Ci0JCQkJCQk8RmlsZQogCQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
VUlQcm9jZXNzXEFQSVxDXHdpblxXS1ZpZXcuY3BwIgogCQkJCQkJCT4KIAkJCQkJCTwvRmlsZT4K
QEAgLTM2MDYsMTQgKzM2MzAsNiBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCi0J
CQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXHdpblxXZWJHcmFtbWFyRGV0YWlsLmNwcCIK
LQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJ
UHJvY2Vzc1x3aW5cV2ViR3JhbW1hckRldGFpbC5oIgotCQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJ
CTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXHdpblxXZWJJbnNwZWN0b3JQ
cm94eVdpbi5jcHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CkBAIC0zNjM0LDIyICszNjUwLDYgQEAK
IAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJ
UHJvY2Vzc1x3aW5cV2ViVGV4dENoZWNrZXIuY3BwIgotCQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJ
CTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXHdpblxXZWJUZXh0Q2hlY2tl
ci5oIgotCQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0i
Li5cVUlQcm9jZXNzXHdpblxXZWJUZXh0Q2hlY2tlckNsaWVudC5jcHAiCi0JCQkJCT4KLQkJCQk8
L0ZpbGU+Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3Ncd2luXFdl
YlRleHRDaGVja2VyQ2xpZW50LmgiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKIAkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3Ncd2luXFdlYlVuZG9DbGllbnQuY3BwIgogCQkJ
CQk+CiAJCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYktpdDIvd2luL1dlYktpdDJHZW5lcmF0
ZWQubWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0MkdlbmVyYXRl
ZC5tYWtlCShyZXZpc2lvbiA5NjYwMikKKysrIFNvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyR2Vu
ZXJhdGVkLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAKICAgICB4Y29weSAv
eSAvZCAiLi5cVUlQcm9jZXNzXEFQSVxDXFdLR2VvbG9jYXRpb25NYW5hZ2VyLmgiICIlQ29uZmln
dXJhdGlvbkJ1aWxkRGlyJVxpbmNsdWRlXFdlYktpdDIiCiAgICAgeGNvcHkgL3kgL2QgIi4uXFVJ
UHJvY2Vzc1xBUElcQ1xXS0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuaCIgIiVDb25maWd1
cmF0aW9uQnVpbGREaXIlXGluY2x1ZGVcV2ViS2l0MiIKICAgICB4Y29weSAveSAvZCAiLi5cVUlQ
cm9jZXNzXEFQSVxDXFdLR2VvbG9jYXRpb25Qb3NpdGlvbi5oIiAiJUNvbmZpZ3VyYXRpb25CdWls
ZERpciVcaW5jbHVkZVxXZWJLaXQyIgorICAgIHhjb3B5IC95IC9kICIuLlxVSVByb2Nlc3NcQVBJ
XENcV0tHcmFtbWFyRGV0YWlsLmgiICIlQ29uZmlndXJhdGlvbkJ1aWxkRGlyJVxpbmNsdWRlXFdl
YktpdDIiCiAgICAgeGNvcHkgL3kgL2QgIi4uXFVJUHJvY2Vzc1xBUElcQ1xXS0hpdFRlc3RSZXN1
bHQuaCIgIiVDb25maWd1cmF0aW9uQnVpbGREaXIlXGluY2x1ZGVcV2ViS2l0MiIKICAgICB4Y29w
eSAveSAvZCAiLi5cVUlQcm9jZXNzXEFQSVxDXFdLSW5zcGVjdG9yLmgiICIlQ29uZmlndXJhdGlv
bkJ1aWxkRGlyJVxpbmNsdWRlXFdlYktpdDIiCiAgICAgeGNvcHkgL3kgL2QgIi4uXFVJUHJvY2Vz
c1xBUElcQ1xXS0ljb25EYXRhYmFzZS5oIiAiJUNvbmZpZ3VyYXRpb25CdWlsZERpciVcaW5jbHVk
ZVxXZWJLaXQyIgpAQCAtODEsOSArODIsOCBAQAogICAgIHhjb3B5IC95IC9kICIuLlxVSVByb2Nl
c3NcQVBJXENcV0tQcm90ZWN0aW9uU3BhY2UuaCIgIiVDb25maWd1cmF0aW9uQnVpbGREaXIlXGlu
Y2x1ZGVcV2ViS2l0MiIKICAgICB4Y29weSAveSAvZCAiLi5cVUlQcm9jZXNzXEFQSVxDXFdLUHJv
dGVjdGlvblNwYWNlVHlwZXMuaCIgIiVDb25maWd1cmF0aW9uQnVpbGREaXIlXGluY2x1ZGVcV2Vi
S2l0MiIKICAgICB4Y29weSAveSAvZCAiLi5cVUlQcm9jZXNzXEFQSVxDXFdLUmVzb3VyY2VDYWNo
ZU1hbmFnZXIuaCIgIiVDb25maWd1cmF0aW9uQnVpbGREaXIlXGluY2x1ZGVcV2ViS2l0MiIKKyAg
ICB4Y29weSAveSAvZCAiLi5cVUlQcm9jZXNzXEFQSVxDXFdLVGV4dENoZWNrZXIuaCIgIiVDb25m
aWd1cmF0aW9uQnVpbGREaXIlXGluY2x1ZGVcV2ViS2l0MiIKICAgICB4Y29weSAveSAvZCAiLi5c
VUlQcm9jZXNzXEFQSVxDXHdpblxXS0NvbnRleHRQcml2YXRlV2luLmgiICIlQ29uZmlndXJhdGlv
bkJ1aWxkRGlyJVxpbmNsdWRlXFdlYktpdDIiCi0gICAgeGNvcHkgL3kgL2QgIi4uXFVJUHJvY2Vz
c1xBUElcQ1x3aW5cV0tHcmFtbWFyRGV0YWlsLmgiICIlQ29uZmlndXJhdGlvbkJ1aWxkRGlyJVxp
bmNsdWRlXFdlYktpdDIiCi0gICAgeGNvcHkgL3kgL2QgIi4uXFVJUHJvY2Vzc1xBUElcQ1x3aW5c
V0tUZXh0Q2hlY2tlci5oIiAiJUNvbmZpZ3VyYXRpb25CdWlsZERpciVcaW5jbHVkZVxXZWJLaXQy
IgogICAgIHhjb3B5IC95IC9kICIuLlxVSVByb2Nlc3NcQVBJXENcd2luXFdLVmlldy5oIiAiJUNv
bmZpZ3VyYXRpb25CdWlsZERpciVcaW5jbHVkZVxXZWJLaXQyIgogICAgIHhjb3B5IC95IC9kICIu
LlxVSVByb2Nlc3NcQVBJXENcd2luXFdLVmlld1ByaXZhdGUuaCIgIiVDb25maWd1cmF0aW9uQnVp
bGREaXIlXGluY2x1ZGVcV2ViS2l0MiIKICAgICB4Y29weSAveSAvZCAiLi5cVUlQcm9jZXNzXEFQ
SVxjcHBcV0tSZXRhaW5QdHIuaCIgIiVDb25maWd1cmF0aW9uQnVpbGREaXIlXGluY2x1ZGVcV2Vi
S2l0MiIKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy93aW4vV0tCYXNlV2luLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL3dpbi9XS0Jhc2VXaW4u
aAkocmV2aXNpb24gOTY2MDIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2Mvd2luL1dL
QmFzZVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw1IEBACiAKIHR5cGVkZWYgY29u
c3Qgc3RydWN0IE9wYXF1ZVdLVmlldyogV0tWaWV3UmVmOwogdHlwZWRlZiBjb25zdCBzdHJ1Y3Qg
T3BhcXVlV0tFZGl0Q29tbWFuZCogV0tFZGl0Q29tbWFuZFJlZjsKLXR5cGVkZWYgY29uc3Qgc3Ry
dWN0IE9wYXF1ZVdLVGV4dENoZWNrZXIqIFdLVGV4dENoZWNrZXJSZWY7Ci10eXBlZGVmIGNvbnN0
IHN0cnVjdCBPcGFxdWVXS0dyYW1tYXJEZXRhaWwqIFdLR3JhbW1hckRldGFpbFJlZjsKIAogI2Vu
ZGlmIC8qIFdLQmFzZVdpbl9oICovCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2Mv
V0tCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLQmFz
ZS5oCShyZXZpc2lvbiA5NjYwMikKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0Jh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQAogdHlwZWRlZiBjb25zdCBzdHJ1
Y3QgT3BhcXVlV0tHZW9sb2NhdGlvbk1hbmFnZXIqIFdLR2VvbG9jYXRpb25NYW5hZ2VyUmVmOwog
dHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
KiBXS0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVj
dCBPcGFxdWVXS0dlb2xvY2F0aW9uUG9zaXRpb24qIFdLR2VvbG9jYXRpb25Qb3NpdGlvblJlZjsK
K3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLR3JhbW1hckRldGFpbCogV0tHcmFtbWFyRGV0
YWlsUmVmOwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tIaXRUZXN0UmVzdWx0KiBXS0hp
dFRlc3RSZXN1bHRSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVXS0ljb25EYXRhYmFz
ZSogV0tJY29uRGF0YWJhc2VSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVXS0luc3Bl
Y3RvciogV0tJbnNwZWN0b3JSZWY7CkBAIC0xMDAsNiArMTAxLDcgQEAKIHR5cGVkZWYgY29uc3Qg
c3RydWN0IE9wYXF1ZVdLUGx1Z2luU2l0ZURhdGFNYW5hZ2VyKiBXS1BsdWdpblNpdGVEYXRhTWFu
YWdlclJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLUHJlZmVyZW5jZXMqIFdLUHJl
ZmVyZW5jZXNSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVXS1Byb3RlY3Rpb25TcGFj
ZSogV0tQcm90ZWN0aW9uU3BhY2VSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVXS1Rl
eHRDaGVja2VyKiBXS1RleHRDaGVja2VyUmVmOwogCiAvKiBXZWJLaXQyIEJ1bmRsZSB0eXBlcyAq
LwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSU9iamVjdC5oCShyZXZpc2lvbiA5NjYwMikKKysr
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODIs
NiArODIsNyBAQAogICAgICAgICBUeXBlR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdCwKICAg
ICAgICAgVHlwZUhpdFRlc3RSZXN1bHQsCiAgICAgICAgIFR5cGVHZW9sb2NhdGlvblBvc2l0aW9u
LAorICAgICAgICBUeXBlR3JhbW1hckRldGFpbCwKICAgICAgICAgVHlwZUljb25EYXRhYmFzZSwK
ICAgICAgICAgVHlwZUluc3BlY3RvciwKICAgICAgICAgVHlwZUtleVZhbHVlU3RvcmFnZU1hbmFn
ZXIsCkBAIC05Myw2ICs5NCw3IEBACiAgICAgICAgIFR5cGVQYWdlR3JvdXAsCiAgICAgICAgIFR5
cGVQbHVnaW5TaXRlRGF0YU1hbmFnZXIsCiAgICAgICAgIFR5cGVQcmVmZXJlbmNlcywKKyAgICAg
ICAgVHlwZVRleHRDaGVja2VyLAogCiAgICAgICAgIC8vIEJ1bmRsZSB0eXBlcwogICAgICAgICBU
eXBlQnVuZGxlLApAQCAtMTExLDggKzExMyw2IEBACiAKICAgICAgICAgLy8gUGxhdGZvcm0gc3Bl
Y2lmaWMKICAgICAgICAgVHlwZUVkaXRDb21tYW5kUHJveHksCi0gICAgICAgIFR5cGVHcmFtbWFy
RGV0YWlsLAotICAgICAgICBUeXBlVGV4dENoZWNrZXIsCiAgICAgICAgIFR5cGVWaWV3CiAgICAg
fTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>