<?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>105463</bug_id>
          
          <creation_ts>2012-12-19 13:55:38 -0800</creation_ts>
          <short_desc>Implement pointer events</short_desc>
          <delta_ts>2019-02-06 22:43:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>UI Events</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc>https://dvcs.w3.org/hg/pointerevents/raw-file/tip/pointerEvents.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>WebExposed</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Scott Blomquist">sblom</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>afbarstow</cc>
    
    <cc>benjamin</cc>
    
    <cc>brucel</cc>
    
    <cc>buildbot</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dave.methvin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>d.nomiyama</cc>
    
    <cc>dominicc</cc>
    
    <cc>dw.im</cc>
    
    <cc>eoconnor</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>fracting</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>jknotten</cc>
    
    <cc>kenneth</cc>
    
    <cc>killertofu</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>leviw</cc>
    
    <cc>mbrubeck</cc>
    
    <cc>miket</cc>
    
    <cc>mike</cc>
    
    <cc>mjs</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>peter</cc>
    
    <cc>peter+ews</cc>
    
    <cc>philn</cc>
    
    <cc>priyajeet.hora</cc>
    
    <cc>ravi.kasibhatla</cc>
    
    <cc>rbyers</cc>
    
    <cc>redux</cc>
    
    <cc>rniwa</cc>
    
    <cc>syoichi</cc>
    
    <cc>vertigoback</cc>
    
    <cc>webkit.bugzilla</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>794906</commentid>
    <comment_count>0</comment_count>
      <attachid>180221</attachid>
    <who name="Scott Blomquist">sblom</who>
    <bug_when>2012-12-19 13:55:38 -0800</bug_when>
    <thetext>Created attachment 180221
Early prototype of pointer events

Master bug for any future pointer events work. Will open dependencies for specific sub-items.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795036</commentid>
    <comment_count>1</comment_count>
      <attachid>180221</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-19 16:42:49 -0800</bug_when>
    <thetext>Comment on attachment 180221
Early prototype of pointer events

Thanks for contributing a patch.

If you wanted reviewers to take a look at your patch, please set r?. If you don’t want them to review your patch, then don’t set any flag on r (like I just removed it now). r- indicates that a reviewer had already taken a look at your patch and decided that it should be rejected, which I believe isn’t the case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795080</commentid>
    <comment_count>2</comment_count>
    <who name="Rick Byers">rbyers</who>
    <bug_when>2012-12-19 18:07:23 -0800</bug_when>
    <thetext>Sorry, that was my suggestion since they know this patch is nowhere near ready to be reviewed (lots of work left, lots of testing to be done, etc.).  I know there&apos;s been debate over explicitly marking review- on webkit-dev, maybe I misinterpreted the consensus.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795193</commentid>
    <comment_count>3</comment_count>
      <attachid>180221</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-12-19 22:27:13 -0800</bug_when>
    <thetext>Comment on attachment 180221
Early prototype of pointer events

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

&gt; WebKit/chromium/public/WebInputEvent.h:135
&gt; +        // WebPointerEvent

It&apos;s not clear to me that the pointer abstraction should be pushed to the
platform.  It seems like Chromium is already feeding WebKit information
about mouse and touch input, and that could just be used to generate
pointer events within WebKit.  Is there an advantage to synthesizing
pointer events within Chromium instead?

I&apos;m not sure I understand the {Got,Lost}PointerCapture events.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795254</commentid>
    <comment_count>4</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-12-20 01:08:23 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Sorry, that was my suggestion since they know this patch is nowhere near ready to be reviewed (lots of work left, lots of testing to be done, etc.).  I know there&apos;s been debate over explicitly marking review- on webkit-dev, maybe I misinterpreted the consensus.

I think the problem is that we don&apos;t have a flag for saying &quot;Please give me initial comments on my work-in-progress patch&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795439</commentid>
    <comment_count>5</comment_count>
    <who name="Rick Byers">rbyers</who>
    <bug_when>2012-12-20 07:49:52 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 180221 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=180221&amp;action=review
&gt; 
&gt; &gt; WebKit/chromium/public/WebInputEvent.h:135
&gt; &gt; +        // WebPointerEvent
&gt; 
&gt; It&apos;s not clear to me that the pointer abstraction should be pushed to the
&gt; platform.  It seems like Chromium is already feeding WebKit information
&gt; about mouse and touch input, and that could just be used to generate
&gt; pointer events within WebKit.  Is there an advantage to synthesizing
&gt; pointer events within Chromium instead?

Yes, talking offline with Scott I suggested he start by trying to synthesize all the pointer events entirely in WebCore.  I think eventually we&apos;d probably want to push it down to the platform, at least on some ports (eg. I think it&apos;s the only way to ever add stylus support on Windows - since neither PlatformMouseEvent nor PlatformTouchEvent is really appropriate for that), but I don&apos;t think they should worry about that yet.  Scott is in the process of removing all the code in the platform layer now.

Some of the other big outstanding issues in my mind (other than the obvious outstanding debate about whether pointer events should be implemented in WebKit at all) are:

1) How best to avoid duplicating logic that exists already for mouse/touch handling?  I see there&apos;s quite a bit of copy/paste of existing code here (mainly in EventHandler.cpp).  In addition to the software engineering issues, you&apos;re also going to have to figure out how to get good test coverage of all the added code.   But at this point the patch is just a proof of concept, so not something to worry too much about yet.

2) How will mouse events be suppressed when pointer events are swallowed?  In particular, how do we make sure that all the expected peripheral behavior associated with mouse events occur (and occurs consistently) regardless of whether or not mouse events are generated (and again, ideally without duplicating this code in two places).  I think there&apos;s a ton of complexity and opportunity for regressions in subtle but important behavior here.  I&apos;m not sure where on the spectrum to aim between a  major refactoring and cleanup of EventHandler and a lower-risk approach that may duplicate some logic.  One way to shed some light on this is to look through the entire existing set of mouse and touch tests and decide how much of the behavior (and so also tests) needs to exist for pure pointer events.

3) What is the right strategy in general for testing?  Again there&apos;s going to be a lot of overlap with the existing tests.  Should we be trying to share some test code (eg. parameterizing some tests so they could run in both mouse and pointer event variants?).

4) What is the right model for touchevents and pointerevents co-existing.  This is primarily a spec issue that will be addressed by the WebEvents working group.  I think we need to allow both types of events to co-exist on the same page (eg. we wouldn&apos;t want to restrict librarys / embeddable sites from opting into consuming pointer events out of fear of breaking sites).  The common case is probably easy (along the lines of the mouse event compatibility in the pointer event spec), but it will get tricky when it comes to how mouse events are generated (TE and PE specify a different mapping to mouse events and it&apos; spossible code designed for the TE model could be broken by the PE model in the presence of TouchEvents).

There&apos;s also a number of obvious issues of mechanics (probably want a run-time flag to enable this, -webkit prefixes, etc.) but I think we&apos;re far from having anything to land so it&apos;s not worth worrying about this yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795827</commentid>
    <comment_count>6</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2012-12-20 14:47:07 -0800</bug_when>
    <thetext>Besides the issues of mechanics, it seems to me there was not consensus to add this feature to WebKit when it was proposed on webkit-dev. Out of courtesy I won&apos;t mark the bug as WONTFIX (as perhaps a patch or spec revisions would change people&apos;s minds). But please make sure not to r+ or land anything until/unless the state of the feature proposal discussion changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795830</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-20 14:48:32 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; But please make sure not to r+ or land anything until/unless the state of the feature proposal discussion changes.

Maybe we need a keyword of some sort like PendingWebKitDevResolution?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837186</commentid>
    <comment_count>8</comment_count>
      <attachid>189248</attachid>
    <who name="Scott Blomquist">sblom</who>
    <bug_when>2013-02-19 22:43:07 -0800</bug_when>
    <thetext>Created attachment 189248
Updated Pointer Events implementation to live entirely in WebCore (as opposed to creeping into platform layer)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837191</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-19 22:49:22 -0800</bug_when>
    <thetext>Attachment 189248 did not pass style-queue:

Source/WebCore/html/HTMLElement.cpp:341:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.idl:32:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/platform/PlatformPointerEvent.h:36:  Header file should not contain WebCore config.h. Should be: alphabetically sorted.  [build/include_order] [4]
Source/WebCore/platform/PlatformPointerEvent.h:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/platform/PlatformPointerEvent.h:53:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/PlatformPointerEvent.h:54:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/PlatformPointerEvent.h:55:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/PlatformPointerEvent.h:56:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/PlatformPointerEvent.h:57:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/PlatformPointerEvent.h:58:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/PlatformPointerEvent.h:59:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/PlatformPointerEvent.h:71:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/PlatformPointerEvent.h:77:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/PlatformPointerEvent.h:82:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/PlatformPointerEvent.h:114:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/platform/PlatformPointerEvent.h:128:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/dom/PointerEvent.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/dom/PointerEvent.h:80:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/dom/PointerEvent.h:104:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.h:105:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.h:106:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.h:107:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.h:108:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/dom/PointerEvent.h:109:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.h:110:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.h:111:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.h:112:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.h:115:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.h:118:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.h:119:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.h:120:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.h:121:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.h:122:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/dom/PointerEvent.h:123:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.h:124:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.h:123:  The parameter name &quot;clipboard&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/dom/PointerEvent.h:125:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/dom/PointerEvent.h:126:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.h:153:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/platform/PlatformPointerEvent.cpp:33:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/platform/PlatformPointerEvent.cpp:56:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/WebCore/platform/PlatformPointerEvent.cpp:58:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/PlatformPointerEvent.cpp:60:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/WebCore/platform/PlatformPointerEvent.cpp:70:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/PlatformPointerEvent.cpp:80:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/PlatformPointerEvent.cpp:111:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/platform/PlatformPointerEvent.cpp:141:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/platform/PlatformPointerEvent.cpp:151:  Missing space before ( in switch(  [whitespace/parens] [5]
Source/WebCore/platform/PlatformPointerEvent.cpp:175:  Missing space before ( in switch(  [whitespace/parens] [5]
Source/WebCore/platform/PlatformPointerEvent.cpp:194:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebCore/platform/PlatformPointerEvent.cpp:195:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebCore/platform/PlatformPointerEvent.cpp:196:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebCore/platform/PlatformPointerEvent.cpp:197:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebCore/platform/PlatformPointerEvent.cpp:198:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebCore/dom/PointerEvent.cpp:28:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/dom/PointerEvent.cpp:29:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/dom/PointerEvent.cpp:58:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/dom/PointerEvent.cpp:59:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/dom/PointerEvent.cpp:68:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:69:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:70:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:71:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:72:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/dom/PointerEvent.cpp:73:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:74:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:75:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:76:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:79:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:82:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:83:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:84:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:85:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:86:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/dom/PointerEvent.cpp:87:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:88:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:89:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/dom/PointerEvent.cpp:90:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:91:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:92:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:93:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:94:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:95:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:96:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/dom/PointerEvent.cpp:97:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:98:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:99:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:100:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:103:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:106:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:107:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:108:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:109:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:110:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/dom/PointerEvent.cpp:111:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:112:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:113:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/dom/PointerEvent.cpp:130:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/dom/PointerEvent.cpp:143:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/dom/PointerEvent.cpp:161:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/dom/PointerEvent.cpp:164:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/dom/PointerEvent.cpp:167:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/dom/PointerEvent.cpp:174:  Missing space before ( in switch(  [whitespace/parens] [5]
Source/WebCore/dom/PointerEvent.cpp:175:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/dom/PointerEvent.cpp:223:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/dom/PointerEvent.cpp:224:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/page/EventHandler.cpp:4050:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/page/EventHandler.cpp:4057:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/page/EventHandler.cpp:4121:  Declaration has space between type name and * in Node *nodeUnderPointer  [whitespace/declaration] [3]
Source/WebCore/page/EventHandler.cpp:4122:  Declaration has space between type name and * in Node *lastNodFailed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/DerivedSources.make&apos;, u&apos;Source/WebCore/DerivedSources.pri&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/WebCore.gypi&apos;, u&apos;Source/WebCore/dom/Document.h&apos;, u&apos;Source/WebCore/dom/Document.idl&apos;, u&apos;Source/WebCore/dom/Element.h&apos;, u&apos;Source/WebCore/dom/Element.idl&apos;, u&apos;Source/WebCore/dom/EventNames.h&apos;, u&apos;Source/WebCore/dom/EventNames.in&apos;, u&apos;Source/WebCore/dom/Node.cpp&apos;, u&apos;Source/WebCore/dom/Node.h&apos;, u&apos;Source/WebCore/dom/PointerEvent.cpp&apos;, u&apos;Source/WebCore/dom/PointerEvent.h&apos;, u&apos;Source/WebCore/dom/PointerEvent.idl&apos;, u&apos;Source/WebCore/html/HTMLAttributeNames.in&apos;, u&apos;Source/WebCore/html/HTMLElement.cpp&apos;, u&apos;Source/WebCore/page/DOMWindow.h&apos;, u&apos;Source/WebCore/page/DOMWindow.idl&apos;, u&apos;Source/WebCore/page/EventHandler.cpp&apos;, u&apos;Source/WebCore/page/EventHandler.h&apos;, u&apos;Source/WebCore/platform/PlatformEvent.h&apos;, u&apos;Source/WebCore/platform/PlatformPointerEvent.cpp&apos;, u&apos;Source/WebCore/platform/PlatformPointerEvent.h&apos;, u&apos;Source/WebKit/chromium/features.gypi&apos;]&quot; exit_code: 1
eUnderPointer  [whitespace/declaration] [3]
Source/WebCore/page/EventHandler.cpp:4126:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/page/EventHandler.cpp:4177:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 111 in 25 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>837193</commentid>
    <comment_count>10</comment_count>
      <attachid>189248</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2013-02-19 22:53:37 -0800</bug_when>
    <thetext>Comment on attachment 189248
Updated Pointer Events implementation to live entirely in WebCore (as opposed to creeping into platform layer)

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

You can avoid a lot of these messages by running the check-webkit-style script before uploading.

&gt; Source/WebCore/dom/PointerEvent.h:131
&gt; +        int ConvertPointerTypeNameToInt(const String &amp;);
&gt; +        const AtomicString ConvertPointerTypeIntToString(int) const;

More style: functions should begin with a lowercase character.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837198</commentid>
    <comment_count>11</comment_count>
      <attachid>189248</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-02-19 22:56:40 -0800</bug_when>
    <thetext>Comment on attachment 189248
Updated Pointer Events implementation to live entirely in WebCore (as opposed to creeping into platform layer)

Attachment 189248 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/16650096</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837204</commentid>
    <comment_count>12</comment_count>
      <attachid>189248</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-19 23:08:15 -0800</bug_when>
    <thetext>Comment on attachment 189248
Updated Pointer Events implementation to live entirely in WebCore (as opposed to creeping into platform layer)

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

Below are a large number of minor style comments.  This patch needs a bit of work before we can land it.  I haven&apos;t reviewed much beyond style and structure.  Also, we&apos;ll need LayoutTests for this feature.

&gt; Source/WebCore/dom/Document.h:10
&gt; + * Portions Copyright Microsoft Open Technologies, Inc. All rights reserved.

Is it possible to use a copyright notice similar to the ones above (e.g., with a year)?

&gt; Source/WebCore/dom/Document.h:294
&gt; +    DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitpointerdown);

We&apos;ll probably want to implement pointer events without a vendor prefix given the current state of its standardization.

&gt; Source/WebCore/dom/Node.cpp:2398
&gt; +bool Node::dispatchPointerEvent(const PlatformPointerEvent&amp; e, const AtomicString&amp; eventType,
&gt; +    int detail, Node* relatedTarget)

This should be on one line.

&gt; Source/WebCore/dom/Node.cpp:2400
&gt; +    return EventDispatcher::dispatchEvent(this, PointerEventDispatchMediator::create(PointerEvent::create(eventType, document()-&gt;defaultView(), e, detail, relatedTarget)));

e -&gt; event

&gt; Source/WebCore/dom/PointerEvent.cpp:29
&gt; +#include &quot;config.h&quot;
&gt; +#include &quot;MouseEvent.h&quot;
&gt; +#include &quot;PointerEvent.h&quot;

Please move MouseEvent.h into the #include group below (alphabetized).

&gt; Source/WebCore/dom/PointerEvent.cpp:38
&gt; +

Please remove this extra blank line.

&gt; Source/WebCore/dom/PointerEvent.cpp:42
&gt; +// PointerEvent is based on MouseEvent
&gt; +//

Please remove these comments.

&gt; Source/WebCore/dom/PointerEvent.cpp:68
&gt; +PointerEvent::PointerEvent(
&gt; +			const AtomicString&amp; type, 

Please use spaces instead of tabs.

&gt; Source/WebCore/dom/PointerEvent.cpp:114
&gt; +    m_pointerId(eventInfo.m_pointerId),

WebKit style is to begin these lines with &quot;, &quot; and then the name of the member variable.

&gt; Source/WebCore/dom/PointerEvent.cpp:157
&gt; +int PointerEvent::ConvertPointerTypeNameToInt(const String&amp; name)

Should this function use AtomicStrings for faster comparison?  Also, the &quot;C&quot; should be lower-case.  WebKit uses camelCase names for functions.

&gt; Source/WebCore/dom/PointerEvent.cpp:159
&gt; +    if (name == &quot;mouse&quot;) {

No need for { } with one-line conditionals.

&gt; Source/WebCore/dom/PointerEvent.cpp:172
&gt; +const AtomicString PointerEvent::ConvertPointerTypeIntToString(int pointerType) const

Why does this return a &quot;const&quot; string?  That doesn&apos;t make much sense.

&gt; Source/WebCore/dom/PointerEvent.cpp:175
&gt; +    switch(pointerType)
&gt; +    {

These lines should be combined.

&gt; Source/WebCore/dom/PointerEvent.cpp:190
&gt; +inline static int adjustedClientX(int innerClientX, HTMLIFrameElement* iframe, FrameView* frameView)

Please move static functions to the top of the file (just inside the &quot;namespace WebCore&quot; declaration).  Also, the &quot;inline&quot; keyword is redundant with the &quot;static&quot; keyword here.

&gt; Source/WebCore/dom/PointerEvent.cpp:217
&gt; +    if (dispatcher-&gt;node()-&gt;disabled()) // Don&apos;t even send DOM events for disabled controls..

Please remove this comment.  WebKit enjoys comments that explain the &quot;why&quot; behind the code.  Comments like this that just say &quot;what&quot; the code does are redundant with the code itself.

&gt; Source/WebCore/dom/PointerEvent.cpp:225
&gt; +    if ((event()-&gt;type() != eventNames().webkitpointeroverEvent)  &amp;&amp;
&gt; +       (event()-&gt;type() != eventNames().webkitpointeroutEvent)) 
&gt; +    {

These lines do not conform to the WebKit style guide.

&gt; Source/WebCore/dom/PointerEvent.h:40
&gt; +    class PointerEvent : public MouseEvent {

Class declarations should not be indented.

&gt; Source/WebCore/dom/PointerEvent.h:92
&gt; +        // provide interface name for pointer object

I&apos;m not sure what you&apos;re trying to say with this comment.  Perhaps we should remove it?

&gt; Source/WebCore/dom/PointerEvent.h:95
&gt; +        // Overload to separate from MouseEvent

This comment is redundant with the code.

&gt; Source/WebCore/dom/PointerEvent.h:100
&gt; +        const AtomicString pointerType() const { return ConvertPointerTypeIntToString(m_pointerType); }

The &quot;const&quot; here doesn&apos;t really make sense.

&gt; Source/WebCore/dom/PointerEvent.h:127
&gt; +    protected:

Why protected and not private?

&gt; Source/WebCore/dom/PointerEvent.idl:12
&gt; +[
&gt; +    Conditional=POINTER_EVENTS
&gt; +] interface PointerEvent : MouseEvent {

We should use ConstructorTemplate=Event to allow for DOM4-style construction of PointerEvents.

&gt; Source/WebCore/dom/PointerEvent.idl:16
&gt; +    [InitializedByEventConstructor] readonly attribute boolean isPrimary;
&gt; +    [InitializedByEventConstructor] readonly attribute long pointerId;
&gt; +    [InitializedByEventConstructor] readonly attribute DOMString pointerType;

InitializedByEventConstructor &lt;-- These attributes are good, but they require the ConstructorTemplate attribute on the interface in order to work.

&gt; Source/WebCore/dom/PointerEvent.idl:18
&gt; +    [ObjCLegacyUnnamedParameters] void initPointerEvent(in [Optional=DefaultIsUndefined] DOMString type, 

Please remove initPointerEvent.  Instead, script should use a DOM4-style event constructor.

If the Pointer Events spec is still using this old style of event construction, we should provide feedback to the working group that it should instead using DOM4-style event constructors.

&gt; Source/WebCore/html/HTMLAttributeNames.in:228
&gt; +onwebkitpointerdown
&gt; +onwebkitpointerup
&gt; +onwebkitpointermove
&gt; +onwebkitpointerover
&gt; +onwebkitpointerout
&gt; +onwebkitpointercancel

Again, we should remove the vendor prefixes.  The spec is already in LC.

&gt; Source/WebCore/page/EventHandler.cpp:4053
&gt; +bool EventHandler::handlePointerEvents(PlatformPointerEventCollection &amp; coll)

No space needed between PlatformPointerEventCollection and &amp;.  Should this be a const reference?

Also, &quot;coll&quot; isn&apos;t a great name.  WebKit prefers that we use complete words in variable names.

&gt; Source/WebCore/page/EventHandler.cpp:4056
&gt; +    for (Vector&lt;PlatformPointerEvent&gt;::iterator iter = coll.events.begin(); iter != coll.events.end(); iter++)
&gt; +    {

Please combine these lines.

Is it safe to iterate the vector from the parameter?  Should we make a local copy of the vector first and iterate that?  Given that we&apos;re dispatching events below, we might worry that JavaScript will destroy the parameter.  (I haven&apos;t analyzed the codepath to see if that&apos;s a real problem.)

&gt; Source/WebCore/page/EventHandler.cpp:4061
&gt; +        if (e.PointerProcessed()) {

No need for { } for one-line conditionals.

Also, please replace &quot;e&quot; with a complete word.

&gt; Source/WebCore/page/EventHandler.cpp:4082
&gt; +        default:

Generally we leave off the default case for this sort of switch so that the compiler will tell us if we forget a case.

&gt; Source/WebCore/page/EventHandler.cpp:4089
&gt; +bool EventHandler::dispatchPointerEvent(const AtomicString&amp; eventType, const PlatformPointerEvent&amp; e)

This function is too long.  Can we factor out various pieces into smaller functions?

&gt; Source/WebCore/page/EventHandler.cpp:4093
&gt; +    ASSERT(m_frame);
&gt; +    if (!m_frame)
&gt; +        return false;

It isn&apos;t correct to both ASSERT a condition and to handle its negation.  If the case can occur, then we should handle it and not have an ASSERT.  If the case cannot occur, then we should have the ASSERT and not handle the impossible case.

&gt; Source/WebCore/page/EventHandler.cpp:4128
&gt; +    Node *nodeUnderPointer = result;
&gt; +    Node *lastNodeUnderPointer = m_lastNodeUnderMouse.get();

&quot;Node *&quot;  -&gt;  &quot;Node* &quot;

&gt; Source/WebCore/platform/PlatformPointerEvent.cpp:2
&gt; + * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.

Why is there an Apple copyright in this new file?

&gt; Source/WebCore/platform/PlatformPointerEvent.cpp:31
&gt; +/*
&gt; +
&gt; +This implements Pointer Events as defined in Pointer Events specification submission to W3C.
&gt; +
&gt; + */

This comment is useless and should be removed.

&gt; Source/WebCore/platform/PlatformPointerEvent.cpp:38
&gt; +static long convertButtonToChordedValue(PointerButton);
&gt; +static long convertMouseButtonToChordedValue(MouseButton);

Usually we implement static functions at the same time we declare them.

&gt; Source/WebCore/platform/PlatformPointerEvent.cpp:48
&gt; +//----------------------------------

This comment is useless and should be removed.

&gt; Source/WebCore/platform/PlatformPointerEvent.cpp:109
&gt; +PlatformEvent::Type PlatformPointerEvent::convertToPointerType(PlatformEvent::Type t)

&quot;t&quot; -&gt; please use complete words in variable names.

&gt; Source/WebCore/platform/PlatformPointerEvent.cpp:149
&gt; +static long convertButtonToChordedValue(PointerButton btn)

btn -&gt; please use complete words in variable names.

&gt; Source/WebCore/platform/PlatformPointerEvent.cpp:198
&gt; +//-----------------------------------
&gt; +
&gt; +//#ifdef __clang__
&gt; +//#pragma clang diagnostic ignored &quot;-Wglobal-constructors&quot;
&gt; +//#pragma clang diagnostic ignored &quot;-Wexit-time-destructors&quot;
&gt; +//#endif
&gt; +//PlatformPointerEventTracker PlatformPointerEvent::m_trackedPointerEvents;

Please remove commented out code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837205</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-19 23:08:57 -0800</bug_when>
    <thetext>&gt; Maybe we need a keyword of some sort like PendingWebKitDevResolution?

I don&apos;t think we need such a keyword.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837700</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-20 13:29:50 -0800</bug_when>
    <thetext>Looks like the spec has already been updated to using a DOM4-style constructor:

https://dvcs.w3.org/hg/pointerevents/raw-file/tip/pointerEvents.html#pointerevent-interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860934</commentid>
    <comment_count>15</comment_count>
      <attachid>194399</attachid>
    <who name="Scott Blomquist">sblom</who>
    <bug_when>2013-03-21 17:41:01 -0700</bug_when>
    <thetext>Created attachment 194399
Updated pointer events implementation

With this patch, check-webkit-style runs clean for me and I&apos;ve incorporated most of Adam&apos;s and Levi&apos;s review feedback. I&apos;ll incorporate the rest of the feedback in the next update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860937</commentid>
    <comment_count>16</comment_count>
    <who name="Scott Blomquist">sblom</who>
    <bug_when>2013-03-21 17:44:31 -0700</bug_when>
    <thetext>Additional revisions to the Pointer Events implementation. It&apos;s still not quite ready for an intensive review, but I appreciate all of the feedback that I&apos;ve received from all of you so far.

My next major steps include:
  1) Finish implementing the remaining features of the Pointer Events spec draft. (At which point, I&apos;ll ask for a much deeper review.)
  2) Add layout tests.
  3) Incorporate remaining feedback items from Adam, Levi, et al.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860961</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-21 18:17:41 -0700</bug_when>
    <thetext>Attachment 194399 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/DerivedSources.make&apos;, u&apos;Source/WebCore/DerivedSources.pri&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/WebCore.gypi&apos;, u&apos;Source/WebCore/dom/Document.h&apos;, u&apos;Source/WebCore/dom/Document.idl&apos;, u&apos;Source/WebCore/dom/Element.h&apos;, u&apos;Source/WebCore/dom/Element.idl&apos;, u&apos;Source/WebCore/dom/EventNames.h&apos;, u&apos;Source/WebCore/dom/EventNames.in&apos;, u&apos;Source/WebCore/dom/Node.cpp&apos;, u&apos;Source/WebCore/dom/Node.h&apos;, u&apos;Source/WebCore/dom/PointerEvent.cpp&apos;, u&apos;Source/WebCore/dom/PointerEvent.h&apos;, u&apos;Source/WebCore/dom/PointerEvent.idl&apos;, u&apos;Source/WebCore/html/HTMLAttributeNames.in&apos;, u&apos;Source/WebCore/html/HTMLElement.cpp&apos;, u&apos;Source/WebCore/page/DOMWindow.h&apos;, u&apos;Source/WebCore/page/DOMWindow.idl&apos;, u&apos;Source/WebCore/page/EventHandler.cpp&apos;, u&apos;Source/WebCore/page/EventHandler.h&apos;, u&apos;Source/WebCore/platform/PlatformEvent.h&apos;, u&apos;Source/WebCore/platform/PlatformPointerEvent.cpp&apos;, u&apos;Source/WebCore/platform/PlatformPointerEvent.h&apos;, u&apos;Source/WebKit/chromium/features.gypi&apos;]&quot; exit_code: 1
Source/WebCore/page/EventHandler.cpp:4175:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 25 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>860986</commentid>
    <comment_count>18</comment_count>
      <attachid>194399</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-21 18:45:06 -0700</bug_when>
    <thetext>Comment on attachment 194399
Updated pointer events implementation

Attachment 194399 did not pass qt-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/17226423</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860991</commentid>
    <comment_count>19</comment_count>
      <attachid>194399</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-21 18:56:49 -0700</bug_when>
    <thetext>Comment on attachment 194399
Updated pointer events implementation

Attachment 194399 did not pass chromium-ews (chromium-xvfb):
Output: http://webkit-commit-queue.appspot.com/results/17139747</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860994</commentid>
    <comment_count>20</comment_count>
      <attachid>194399</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-21 19:16:59 -0700</bug_when>
    <thetext>Comment on attachment 194399
Updated pointer events implementation

Attachment 194399 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-commit-queue.appspot.com/results/17155927</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860996</commentid>
    <comment_count>21</comment_count>
      <attachid>194399</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-21 19:21:36 -0700</bug_when>
    <thetext>Comment on attachment 194399
Updated pointer events implementation

Attachment 194399 did not pass qt-wk2-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/17138920</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861039</commentid>
    <comment_count>22</comment_count>
      <attachid>194399</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-03-21 20:19:13 -0700</bug_when>
    <thetext>Comment on attachment 194399
Updated pointer events implementation

Attachment 194399 did not pass gtk-ews (gtk):
Output: http://webkit-commit-queue.appspot.com/results/17212894</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861045</commentid>
    <comment_count>23</comment_count>
      <attachid>194399</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-21 20:32:34 -0700</bug_when>
    <thetext>Comment on attachment 194399
Updated pointer events implementation

Attachment 194399 did not pass cr-linux-debug-ews (chromium-xvfb):
Output: http://webkit-commit-queue.appspot.com/results/17147670</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861094</commentid>
    <comment_count>24</comment_count>
      <attachid>194399</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-03-21 22:11:13 -0700</bug_when>
    <thetext>Comment on attachment 194399
Updated pointer events implementation

Attachment 194399 did not pass cr-android-ews (chromium-android):
Output: http://webkit-commit-queue.appspot.com/results/17193611</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861117</commentid>
    <comment_count>25</comment_count>
      <attachid>194399</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-03-21 22:53:29 -0700</bug_when>
    <thetext>Comment on attachment 194399
Updated pointer events implementation

Attachment 194399 did not pass cr-android-ews (chromium-android):
Output: http://webkit-commit-queue.appspot.com/results/17136902</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861163</commentid>
    <comment_count>26</comment_count>
      <attachid>194399</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-03-22 00:09:18 -0700</bug_when>
    <thetext>Comment on attachment 194399
Updated pointer events implementation

Attachment 194399 did not pass efl-ews (efl):
Output: http://webkit-commit-queue.appspot.com/results/17239360</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861175</commentid>
    <comment_count>27</comment_count>
      <attachid>194399</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-03-22 00:40:09 -0700</bug_when>
    <thetext>Comment on attachment 194399
Updated pointer events implementation

Attachment 194399 did not pass efl-ews (efl):
Output: http://webkit-commit-queue.appspot.com/results/17207584</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861490</commentid>
    <comment_count>28</comment_count>
      <attachid>194399</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-22 08:24:47 -0700</bug_when>
    <thetext>Comment on attachment 194399
Updated pointer events implementation

Attachment 194399 did not pass mac-ews (mac):
Output: http://webkit-commit-queue.appspot.com/results/17209738</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861557</commentid>
    <comment_count>29</comment_count>
      <attachid>194399</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-22 09:26:22 -0700</bug_when>
    <thetext>Comment on attachment 194399
Updated pointer events implementation

Attachment 194399 did not pass mac-ews (mac):
Output: http://webkit-commit-queue.appspot.com/results/17207647</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>862132</commentid>
    <comment_count>30</comment_count>
      <attachid>194399</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-22 21:20:32 -0700</bug_when>
    <thetext>Comment on attachment 194399
Updated pointer events implementation

Attachment 194399 did not pass win-ews (win):
Output: http://webkit-commit-queue.appspot.com/results/17183856</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>880076</commentid>
    <comment_count>31</comment_count>
      <attachid>199314</attachid>
    <who name="Scott Blomquist">sblom</who>
    <bug_when>2013-04-23 12:24:54 -0700</bug_when>
    <thetext>Created attachment 199314
Updated pointer events implementation

A few more bug and style fixes. Still TODO: test coverage, implement more of the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>972638</commentid>
    <comment_count>32</comment_count>
    <who name="Jason G.">killertofu</who>
    <bug_when>2014-01-27 15:58:42 -0800</bug_when>
    <thetext>Is it possible to get an update on this? It looks like Microsoft&apos;s attention has been on Blink and Gecko for the past several months, with the latest patch here bitrotting away. I was going to play around at the platform layer and investigate writing patches to properly pass through pen events, but so far I haven&apos;t been able to rebase this basic implementation patch to master.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973119</commentid>
    <comment_count>33</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-28 14:45:41 -0800</bug_when>
    <thetext>Short term, I don&apos;t think we should add this.

I don&apos;t think the spec even addressed the compatibility with touch events(?).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973363</commentid>
    <comment_count>34</comment_count>
    <who name="Matt Brubeck">mbrubeck</who>
    <bug_when>2014-01-29 07:28:27 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; I don&apos;t think the spec even addressed the compatibility with touch events(?).

Work on documenting Touch Event / Pointer Event interaction has started in the Touch Event CG:
http://www.w3.org/community/touchevents/

Overall however we cannot make progress on Touch Event standardization in the W3C if Apple continues to refuse to participate, and continues trying to patent various parts of the API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010426</commentid>
    <comment_count>35</comment_count>
    <who name="Jorik Tangelder">j.tangelder</who>
    <bug_when>2014-05-20 00:57:13 -0700</bug_when>
    <thetext>What about supporting the touch-action property of the pointer events specification?
https://dvcs.w3.org/hg/pointerevents/raw-file/tip/pointerEvents.html#the-touch-action-css-property

Even when pointer events are not implemented, this css property would really improve the support for touch gestures in webpages. Now we&apos;re stuck with only calling preventDefault, and often makes elements blocking the scrolling of a page when not needed...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010429</commentid>
    <comment_count>36</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-05-20 01:38:50 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; What about supporting the touch-action property of the pointer events specification?
&gt; https://dvcs.w3.org/hg/pointerevents/raw-file/tip/pointerEvents.html#the-touch-action-css-property
&gt; 
&gt; Even when pointer events are not implemented, this css property would really improve the support for touch gestures in webpages. Now we&apos;re stuck with only calling preventDefault, and often makes elements blocking the scrolling of a page when not needed...

Yes, I think this is a good idea.

The definition of touch-action is very odd, but the general concepts are interesting.

Can you please open a separate bug for that? It is worth experimenting with touch-action outside pointer events.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010444</commentid>
    <comment_count>37</comment_count>
    <who name="Patrick H. Lauke">redux</who>
    <bug_when>2014-05-20 02:54:42 -0700</bug_when>
    <thetext>Separate bug for touch-action:manipulation https://bugs.webkit.org/show_bug.cgi?id=133114</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072630</commentid>
    <comment_count>38</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-26 21:05:53 -0800</bug_when>
    <thetext>*** Bug 142025 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503327</commentid>
    <comment_count>39</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:19:10 -0800</bug_when>
    <thetext>Mass move bugs into the DOM component.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503634</commentid>
    <comment_count>40</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-02-06 21:59:23 -0800</bug_when>
    <thetext>Pointer events are UI events. Also, pointer events are currently in development.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180221</attachid>
            <date>2012-12-19 13:55:38 -0800</date>
            <delta_ts>2013-02-19 22:43:07 -0800</delta_ts>
            <desc>Early prototype of pointer events</desc>
            <filename>pointerevents.patch</filename>
            <type>text/plain</type>
            <size>47944</size>
            <attacher name="Scott Blomquist">sblom</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2Vi
S2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkJKHJldmlzaW9uIDEzNzcwOSkNCisrKyBXZWJLaXQv
Y2hyb21pdW0vZmVhdHVyZXMuZ3lwaQkod29ya2luZyBjb3B5KQ0KQEAgLTEsNSArMSw2IEBADQog
IwogIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMgUG9ydGlvbnMgQ29weXJpZ2h0IE1pY3Jvc29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogIyAKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAg
LTk1LDYgKzk2LDcgQEANCiAgICAgICAnRU5BQkxFX1BBR0VfVklTSUJJTElUWV9BUEk9MScsCiAg
ICAgICAnRU5BQkxFX1BFUkZPUk1BTkNFX1RJTUVMSU5FPTEnLAogICAgICAgJ0VOQUJMRV9QT0lO
VEVSX0xPQ0s9MScsCisgICAgICAnRU5BQkxFX1BPSU5URVJfRVZFTlRTPTEnLAogICAgICAgJ0VO
QUJMRV9QUk9HUkVTU19FTEVNRU5UPTEnLAogICAgICAgJ0VOQUJMRV9QUk9YSU1JVFlfRVZFTlRT
PTAnLAogICAgICAgJ0VOQUJMRV9RVU9UQT0xJywKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViSW5wdXRFdmVudENvbnZlcnNpb24uY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJJbnB1dEV2ZW50Q29udmVyc2lvbi5jcHAJKHJldmlzaW9uIDEzNzU5NikNCisr
KyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYklucHV0RXZlbnRDb252ZXJzaW9uLmNwcAkod29ya2lu
ZyBjb3B5KQ0KQEAgLTEsNSArMSw2IEBADQogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IE1pY3Jv
c29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzksNiArNDAsNyBAQA0KICNpbmNsdWRl
ICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVRv
dWNoRXZlbnQuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTY3JvbGxW
aWV3LmgiCiAjaW5jbHVkZSAiVG91Y2guaCIKQEAgLTM4OCw2ICszOTAsODggQEANCiB9CiAjZW5k
aWYKIAorI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKKy8vIENvbnZlcnQgTW91c2UgYW5kIFRv
dWNoIHR5cGVzIHRvIGNvcnJlc3BvbmRpbmcgUG9pbnRlciB0eXBlCisvLworaW5saW5lIFBsYXRm
b3JtRXZlbnQ6OlR5cGUgdG9QbGF0Zm9ybVBvaW50ZXJFdmVudFR5cGUoY29uc3QgV2ViSW5wdXRF
dmVudDo6VHlwZSB0KQoreworICAgIHN3aXRjaCAodCkgeworICAgIGNhc2UgV2ViSW5wdXRFdmVu
dDo6TW91c2VEb3duOgorICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6VG91Y2hTdGFydDoKKyAgICAg
ICAgcmV0dXJuIFBsYXRmb3JtRXZlbnQ6OlBvaW50ZXJEb3duOworCisgICAgY2FzZSBXZWJJbnB1
dEV2ZW50OjpNb3VzZVVwOgorICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6VG91Y2hFbmQ6CisgICAg
ICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpQb2ludGVyVXA7CisKKyAgICBjYXNlIFdlYklucHV0
RXZlbnQ6Ok1vdXNlTW92ZToKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6OlRvdWNoTW92ZToKKyAg
ICAgICAgcmV0dXJuIFBsYXRmb3JtRXZlbnQ6OlBvaW50ZXJNb3ZlOworCisgICAgY2FzZSBXZWJJ
bnB1dEV2ZW50OjpNb3VzZUVudGVyOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1FdmVudDo6UG9p
bnRlck92ZXI7CisKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1vdXNlTGVhdmU6CisgICAgICAg
IHJldHVybiBQbGF0Zm9ybUV2ZW50OjpQb2ludGVyT3V0OworCisgICAgY2FzZSBXZWJJbnB1dEV2
ZW50OjpUb3VjaENhbmNlbDoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtRXZlbnQ6OlBvaW50ZXJD
YW5jZWw7CisKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6OlVuZGVmaW5lZDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpQb2lu
dGVyTW92ZTsKK30KKworLy8gQWRkIGtleSBtb2RpZmllcnMgdG8gUG9pbnRlciBldmVudAorLy8K
K2lubGluZSB1bnNpZ25lZCB0b1BsYXRmb3JtUG9pbnRlckV2ZW50TW9kaWZpZXJzKGludCBtb2Rp
ZmllcnMpCit7CisgICAgdW5zaWduZWQgcGxhdGZvcm1fbW9kaWZpZXJzID0gMDsKKyAgICBpZiAo
bW9kaWZpZXJzICYgV2ViSW5wdXRFdmVudDo6U2hpZnRLZXkpCisgICAgICAgIHBsYXRmb3JtX21v
ZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpTaGlmdEtleTsKKyAgICBpZiAobW9kaWZpZXJzICYg
V2ViSW5wdXRFdmVudDo6Q29udHJvbEtleSkKKyAgICAgICAgcGxhdGZvcm1fbW9kaWZpZXJzIHw9
IFBsYXRmb3JtRXZlbnQ6OkN0cmxLZXk7CisgICAgaWYgKG1vZGlmaWVycyAmIFdlYklucHV0RXZl
bnQ6OkFsdEtleSkKKyAgICAgICAgcGxhdGZvcm1fbW9kaWZpZXJzIHw9IFBsYXRmb3JtRXZlbnQ6
OkFsdEtleTsKKyAgICBpZiAobW9kaWZpZXJzICYgV2ViSW5wdXRFdmVudDo6TWV0YUtleSkKKyAg
ICAgICAgcGxhdGZvcm1fbW9kaWZpZXJzIHw9IFBsYXRmb3JtRXZlbnQ6Ok1ldGFLZXk7CisgICAg
cmV0dXJuIHBsYXRmb3JtX21vZGlmaWVyczsKK30KKworLy8gQ3JlYXRlIFBsYXRmb3JtUG9pbnRl
ckV2ZW50IGZyb20gV2ViTW91c2VFdmVudAorLy8KK1BsYXRmb3JtUG9pbnRlckV2ZW50QnVpbGRl
cjo6UGxhdGZvcm1Qb2ludGVyRXZlbnRCdWlsZGVyKGNvbnN0IFdlYkNvcmU6OldpZGdldCogd2lk
Z2V0LCBjb25zdCBXZWJNb3VzZUV2ZW50JiBlKQoreworICAgIG1fdHlwZSA9IHRvUGxhdGZvcm1Q
b2ludGVyRXZlbnRUeXBlKGUudHlwZSk7CisKKyAgICBtX21vZGlmaWVycyA9IHRvUGxhdGZvcm1Q
b2ludGVyRXZlbnRNb2RpZmllcnMoZS5tb2RpZmllcnMpOworCisgICAgbV9wb3NpdGlvbiA9IHdp
ZGdldC0+Y29udmVydEZyb21Db250YWluaW5nV2luZG93KEludFBvaW50KGUueCwgZS55KSk7Cisg
ICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KGUuZ2xvYmFsWCwgZS5nbG9iYWxZKTsKKyNp
ZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQorICAgIG1fbW92ZW1lbnREZWx0YSA9IEludFBvaW50KGUu
bW92ZW1lbnRYLCBlLm1vdmVtZW50WSk7CisjZW5kaWYKKyAgICBtX2J1dHRvbiA9IHN0YXRpY19j
YXN0PE1vdXNlQnV0dG9uPihlLmJ1dHRvbik7CisKKyAgICBtX21vZGlmaWVyRmxhZ3MgPSBlLm1v
ZGlmaWVyczsKKyAgICBtX3RpbWVzdGFtcCA9IGUudGltZVN0YW1wU2Vjb25kczsKKyAgICBtX2Ns
aWNrQ291bnQgPSBlLmNsaWNrQ291bnQ7Cit9CisKKy8vIENyZWF0ZSBQbGF0Zm9ybVBvaW50ZXJF
dmVudCBmcm9tIFdlYlRvdWNoRXZlbnQKKy8vCitQbGF0Zm9ybVBvaW50ZXJFdmVudEJ1aWxkZXI6
OlBsYXRmb3JtUG9pbnRlckV2ZW50QnVpbGRlcihjb25zdCBXZWJDb3JlOjpXaWRnZXQqLCBjb25z
dCBXZWJUb3VjaEV2ZW50JiBlKQoreworICAgIG1fdHlwZSA9IHRvUGxhdGZvcm1Qb2ludGVyRXZl
bnRUeXBlKGUudHlwZSk7CisKKyAgICBtX21vZGlmaWVycyA9IHRvUGxhdGZvcm1Qb2ludGVyRXZl
bnRNb2RpZmllcnMoZS5tb2RpZmllcnMpOworCisgICAgbV90aW1lc3RhbXAgPSBlLnRpbWVTdGFt
cFNlY29uZHM7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoUE9JTlRFUl9FVkVOVFMpCisKIHN0YXRp
YyBpbnQgZ2V0V2ViSW5wdXRNb2RpZmllcnMoY29uc3QgVUlFdmVudFdpdGhLZXlTdGF0ZSYgZXZl
bnQpCiB7CiAgICAgaW50IG1vZGlmaWVycyA9IDA7CkBAIC02MzIsNCArNzE2LDg1IEBADQogfQog
I2VuZGlmIC8vIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKIAorI2lmIEVOQUJMRShQT0lOVEVSX0VW
RU5UUykKKworLy8gQ3JlYXRlIFdlYlBvaW50ZXJFdmVudCBmcm9tIFdlYkNvcmU6Ok1vdXNlRXZl
bnQKKy8vCitXZWJQb2ludGVyRXZlbnRCdWlsZGVyOjpXZWJQb2ludGVyRXZlbnRCdWlsZGVyKGNv
bnN0IFdlYkNvcmU6OldpZGdldCogd2lkZ2V0LCBjb25zdCBXZWJDb3JlOjpSZW5kZXJPYmplY3Qq
IHJlbmRlck9iamVjdCwgY29uc3QgV2ViQ29yZTo6TW91c2VFdmVudCYgZSkKK3sKKyAgICB1cGRh
dGVXZWJNb3VzZUV2ZW50RnJvbVdlYkNvcmVNb3VzZUV2ZW50KGUsICp3aWRnZXQsICpyZW5kZXJP
YmplY3QsICp0aGlzKTsKKworICAgIGlmIChlLnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vt
b3ZlRXZlbnQpCisgICAgICAgIHR5cGUgPSBQb2ludGVyTW92ZTsKKyAgICBlbHNlIGlmIChlLnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpCisgICAgICAgIHR5cGUgPSBQb2lu
dGVyT3ZlcjsKKyAgICBlbHNlIGlmIChlLnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRF
dmVudCkKKyAgICAgICAgdHlwZSA9IFBvaW50ZXJPdXQ7CisgICAgZWxzZSBpZiAoZS50eXBlKCkg
PT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KQorICAgICAgICB0eXBlID0gUG9pbnRlckRv
d247CisgICAgZWxzZSBpZiAoZS50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkK
KyAgICAgICAgdHlwZSA9IFBvaW50ZXJVcDsKKyAgICBlbHNlIHsKKyAgICAgICAgdHlwZSA9IFVu
ZGVmaW5lZDsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgc3dp
dGNoIChlLmJ1dHRvbigpKSB7CisgICAgY2FzZSBMZWZ0QnV0dG9uOgorICAgICAgICBidXR0b24g
PSBXZWJNb3VzZUV2ZW50OjpCdXR0b25MZWZ0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1p
ZGRsZUJ1dHRvbjoKKyAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVudDo6QnV0dG9uTWlkZGxl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJpZ2h0QnV0dG9uOgorICAgICAgICBidXR0b24g
PSBXZWJNb3VzZUV2ZW50OjpCdXR0b25SaWdodDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGlmIChlLmJ1dHRvbkRvd24oKSkgeworICAgICAgICBzd2l0Y2ggKGUuYnV0dG9uKCkpIHsKKyAg
ICAgICAgY2FzZSBMZWZ0QnV0dG9uOgorICAgICAgICAgICAgbW9kaWZpZXJzIHw9IFdlYklucHV0
RXZlbnQ6OkxlZnRCdXR0b25Eb3duOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
TWlkZGxlQnV0dG9uOgorICAgICAgICAgICAgbW9kaWZpZXJzIHw9IFdlYklucHV0RXZlbnQ6Ok1p
ZGRsZUJ1dHRvbkRvd247CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSaWdodEJ1
dHRvbjoKKyAgICAgICAgICAgIG1vZGlmaWVycyB8PSBXZWJJbnB1dEV2ZW50OjpSaWdodEJ1dHRv
bkRvd247CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyNpZiBFTkFCTEUo
UE9JTlRFUl9MT0NLKQorICAgIG1vdmVtZW50WCA9IGUud2Via2l0TW92ZW1lbnRYKCk7CisgICAg
bW92ZW1lbnRZID0gZS53ZWJraXRNb3ZlbWVudFkoKTsKKyNlbmRpZgorICAgIGNsaWNrQ291bnQg
PSBlLmRldGFpbCgpOworCisgICAgdGltZVN0YW1wU2Vjb25kcyA9IGUudGltZVN0YW1wKCkgLyBt
aWxsaXNQZXJTZWNvbmQ7CisgICAgbW9kaWZpZXJzID0gZ2V0V2ViSW5wdXRNb2RpZmllcnMoZSk7
Cit9CisKKy8vIENyZWF0ZSBXZWJQb2ludGVyRXZlbnQgZnJvbSBXZWJDb3JlOjpUb3VjaEV2ZW50
CisvLworV2ViUG9pbnRlckV2ZW50QnVpbGRlcjo6V2ViUG9pbnRlckV2ZW50QnVpbGRlcihjb25z
dCBXZWJDb3JlOjpXaWRnZXQqIHdpZGdldCwgY29uc3QgV2ViQ29yZTo6VG91Y2hFdmVudCYgZSkK
K3sKKworICAgIGlmIChlLnR5cGUoKSA9PSBldmVudE5hbWVzKCkudG91Y2htb3ZlRXZlbnQpCisg
ICAgICAgIHR5cGUgPSBQb2ludGVyTW92ZTsKKyAgICBlbHNlIGlmIChlLnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkudG91Y2hzdGFydEV2ZW50KQorICAgICAgICB0eXBlID0gUG9pbnRlckRvd247Cisg
ICAgZWxzZSBpZiAoZS50eXBlKCkgPT0gZXZlbnROYW1lcygpLnRvdWNoZW5kRXZlbnQpCisgICAg
ICAgIHR5cGUgPSBQb2ludGVyVXA7CisgICAgZWxzZSBpZiAoZS50eXBlKCkgPT0gZXZlbnROYW1l
cygpLnRvdWNoY2FuY2VsRXZlbnQpCisgICAgICAgIHR5cGUgPSBQb2ludGVyQ2FuY2VsOworICAg
IGVsc2UgeworICAgICAgICB0eXBlID0gVW5kZWZpbmVkOworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisKKyAgICBtb2RpZmllcnMgPSBnZXRXZWJJbnB1dE1vZGlmaWVycyhl
KTsKKyAgICB0aW1lU3RhbXBTZWNvbmRzID0gZS50aW1lU3RhbXAoKSAvIG1pbGxpc1BlclNlY29u
ZDsKK30KKyNlbmRpZiAvLyBFTkFCTEUoUE9JTlRFUl9FVkVOVFMpCisKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VXaWRnZXREZWxlZ2F0ZS5o
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlV2lkZ2V0RGVsZWdhdGUu
aAkocmV2aXNpb24gMTM3NTk2KQ0KKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvUGFnZVdpZGdldERl
bGVnYXRlLmgJKHdvcmtpbmcgY29weSkNCkBAIC0xLDUgKzEsNiBAQA0KIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25z
IENvcHlyaWdodCBNaWNyb3NvZnQgT3BlbiBUZWNobm9sb2dpZXMsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTY2LDYgKzY3
LDEzIEBADQogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgdmlydHVhbCBib29sIGhhbmRs
ZVRvdWNoRXZlbnQoV2ViQ29yZTo6RnJhbWUmIG1haW5GcmFtZSwgY29uc3QgV2ViVG91Y2hFdmVu
dCYpOwogI2VuZGlmCisjaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQorCS8vIENyZWF0ZSBQb2lu
dGVyIGV2ZW50IGZyb20gV2ViTW91c2VFdmVudAorCXZpcnR1YWwgYm9vbCBjcmVhdGVQb2ludGVy
RXZlbnRGcm9tTW91c2UoV2ViQ29yZTo6RnJhbWUmIG1haW5GcmFtZSwgY29uc3QgV2ViTW91c2VF
dmVudCYpOworCisJLy8gQ3JlYXRlIFBvaW50ZXIgZXZlbnQgZnJvbSBXZWJUb3VjaEV2ZW50CisJ
dmlydHVhbCBib29sIGNyZWF0ZVBvaW50ZXJFdmVudEZyb21Ub3VjaChXZWJDb3JlOjpGcmFtZSYg
bWFpbkZyYW1lLCBjb25zdCBXZWJUb3VjaEV2ZW50Jik7CisjZW5kaWYKICAgICB2aXJ0dWFsIH5Q
YWdlV2lkZ2V0RXZlbnRIYW5kbGVyKCkgeyB9CiB9OwogCkluZGV4OiBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYklucHV0RXZlbnRDb252ZXJzaW9uLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYklucHV0RXZlbnRDb252ZXJzaW9uLmgJKHJldmlzaW9uIDEzNzU5NikNCisr
KyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYklucHV0RXZlbnRDb252ZXJzaW9uLmgJKHdvcmtpbmcg
Y29weSkNCkBAIC0xLDUgKzEsNiBAQA0KIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCBNaWNyb3Nv
ZnQgT3BlbiBUZWNobm9sb2dpZXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM0LDggKzM1LDEwIEBADQogI2luY2x1ZGUg
IlBsYXRmb3JtR2VzdHVyZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Q
b2ludGVyRXZlbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVRvdWNoRXZlbnQuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVBvaW50ZXJFdmVudC5o
IgogI2luY2x1ZGUgIldlYklucHV0RXZlbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
OTgsNiArMTAxLDE2IEBADQogfTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRT
KQorLy8gQ3JlYXRlcyBhIFdlYkNvcmU6OlBsYXRmb3JtUG9pbnRlckV2ZW50IGZvciBhIGNvcnJl
c3BvbmRpbmcgV2ViTW91c2VFdmVudCB8IFdlYlRvdWNoRXZlbnQuCisvLyBJZiB0aGUgZXZlbnQg
bWFwcGluZyBmYWlscywgdGhlIGV2ZW50IHR5cGUgd2lsbCBiZSBzZXQgdG8gVW5kZWZpbmVkLgor
Y2xhc3MgUGxhdGZvcm1Qb2ludGVyRXZlbnRCdWlsZGVyIDogcHVibGljIFdlYkNvcmU6OlBsYXRm
b3JtUG9pbnRlckV2ZW50IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBQbGF0Zm9ybVBvaW50ZXJF
dmVudEJ1aWxkZXIoY29uc3QgV2ViQ29yZTo6V2lkZ2V0KiwgY29uc3QgV2ViTW91c2VFdmVudCYp
OworICAgIGV4cGxpY2l0IFBsYXRmb3JtUG9pbnRlckV2ZW50QnVpbGRlcihjb25zdCBXZWJDb3Jl
OjpXaWRnZXQqLCBjb25zdCBXZWJUb3VjaEV2ZW50Jik7Cit9OworI2VuZGlmIC8vIEVOQUJMRShQ
T0lOVEVSX0VWRU5UUykKKwogLy8gQ29udmVydHMgYSBXZWJDb3JlOjpNb3VzZUV2ZW50IHRvIGEg
Y29ycmVzcG9uZGluZyBXZWJNb3VzZUV2ZW50LgogLy8gTk9URTogVGhpcyBpcyBvbmx5IGltcGxl
bWVudGVkIGZvciBtb3VzZW1vdmUsIG1vdXNlb3ZlciwgbW91c2VvdXQsCiAvLyBtb3VzZWRvd24g
YW5kIG1vdXNldXAuICBJZiB0aGUgZXZlbnQgbWFwcGluZyBmYWlscywgdGhlIGV2ZW50IHR5cGUg
d2lsbApAQCAtMTQyLDYgKzE1NSwxNiBAQA0KIH07CiAjZW5kaWYgLy8gRU5BQkxFKEdFU1RVUkVf
RVZFTlRTKQogCisjaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQorLy8gQ3JlYXRlcyBhIFdlYkNv
cmU6OlBvaW50ZXJFdmVudCBmb3IgYSBjb3JyZXNwb25kaW5nIFdlYk1vdXNlRXZlbnQgfCBXZWJU
b3VjaEV2ZW50LgorLy8gSWYgdGhlIGV2ZW50IG1hcHBpbmcgZmFpbHMsIHRoZSBldmVudCB0eXBl
IHdpbGwgYmUgc2V0IHRvIFVuZGVmaW5lZC4KK2NsYXNzIFdlYlBvaW50ZXJFdmVudEJ1aWxkZXIg
OiBwdWJsaWMgV2ViUG9pbnRlckV2ZW50IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJQb2lu
dGVyRXZlbnRCdWlsZGVyKGNvbnN0IFdlYkNvcmU6OldpZGdldCosIGNvbnN0IFdlYkNvcmU6OlJl
bmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBXZWJDb3JlOjpNb3VzZUV2ZW50Jik7Cisg
ICAgZXhwbGljaXQgV2ViUG9pbnRlckV2ZW50QnVpbGRlcihjb25zdCBXZWJDb3JlOjpXaWRnZXQq
LCBjb25zdCBXZWJDb3JlOjpUb3VjaEV2ZW50Jik7Cit9OworI2VuZGlmIC8vIEVOQUJMRShQT0lO
VEVSX0VWRU5UUykKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZgpJbmRleDogV2Vi
S2l0L2Nocm9taXVtL3NyYy9QYWdlV2lkZ2V0RGVsZWdhdGUuY3BwDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
V2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlV2lkZ2V0RGVsZWdhdGUuY3BwCShyZXZpc2lvbiAxMzc1
OTYpDQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlV2lkZ2V0RGVsZWdhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpDQpAQCAtMSw1ICsxLDYgQEANCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgTWlj
cm9zb2Z0IE9wZW4gVGVjaG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0xMDksNiArMTEwLDI2IEBADQogYm9v
bCBQYWdlV2lkZ2V0RGVsZWdhdGU6OmhhbmRsZUlucHV0RXZlbnQoUGFnZSogcGFnZSwgUGFnZVdp
ZGdldEV2ZW50SGFuZGxlciYgaGFuZGxlciwgY29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCiB7
CiAgICAgRnJhbWUqIGZyYW1lID0gcGFnZSA/IHBhZ2UtPm1haW5GcmFtZSgpIDogMDsKKworI2lm
IEVOQUJMRShQT0lOVEVSX0VWRU5UUykKKwkvLyBDcmVhdGUgYWRkaXRpb25hbCBQb2ludGVyIGV2
ZW50IGZyb20gTW91c2UgZXZlbnQuIAorCS8vIFRoZSBQb2ludGVyIGV2ZW50IGlzIHByb2Nlc3Nl
ZCBiZWZvcmUgTW91c2UgZXZlbnQKKwlpZiAoV2ViSW5wdXRFdmVudDo6aXNNb3VzZUV2ZW50VHlw
ZShldmVudC50eXBlKSkKKwl7CisJCWlmICghZnJhbWUgfHwgIWZyYW1lLT52aWV3KCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKwkJaGFuZGxlci5jcmVhdGVQb2ludGVyRXZlbnRGcm9tTW91
c2UoKmZyYW1lLCAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVudCo+KCZldmVudCkpOwor
CX0KKwkvLyBDcmVhdGUgYWRkaXRpb25hbCBQb2ludGVyIGV2ZW50IGZyb20gVG91Y2ggZXZlbnQu
IAorCS8vIFRoZSBQb2ludGVyIGV2ZW50IGlzIHByb2Nlc3NlZCBiZWZvcmUgVG91Y2ggZXZlbnQK
KwllbHNlIGlmIChXZWJJbnB1dEV2ZW50Ojppc1RvdWNoRXZlbnRUeXBlKGV2ZW50LnR5cGUpKQor
CXsKKwkJaWYgKCFmcmFtZSB8fCAhZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKwkJaGFuZGxlci5jcmVhdGVQb2ludGVyRXZlbnRGcm9tVG91Y2goKmZyYW1lLCAqc3Rh
dGljX2Nhc3Q8Y29uc3QgV2ViVG91Y2hFdmVudCo+KCZldmVudCkpOworCX0KKyNlbmRpZiAvLyBF
TkFCTEUoUE9JTlRFUl9FVkVOVFMpCisKICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHsKIAogICAg
IC8vIEZJWE1FOiBXZWJLaXQgc2VlbXMgdG8gYWx3YXlzIHJldHVybiBmYWxzZSBvbiBtb3VzZSBl
dmVudHMgcHJvY2Vzc2luZwpAQCAtMjI3LDQgKzI0OCwyMSBAQA0KIH0KICNlbmRpZgogCisjaWYg
RU5BQkxFKFBPSU5URVJfRVZFTlRTKQorLy8gQ3JlYXRlIFBvaW50ZXIgZXZlbnQgZnJvbSBXZWJN
b3VzZUV2ZW50CisvLworYm9vbCBQYWdlV2lkZ2V0RXZlbnRIYW5kbGVyOjpjcmVhdGVQb2ludGVy
RXZlbnRGcm9tTW91c2UoV2ViQ29yZTo6RnJhbWUmIG1haW5GcmFtZSwgY29uc3QgV2ViTW91c2VF
dmVudCYgZSkKK3sKKyAgICByZXR1cm4gbWFpbkZyYW1lLmV2ZW50SGFuZGxlcigpLT5oYW5kbGVQ
b2ludGVyRXZlbnQoUGxhdGZvcm1Qb2ludGVyRXZlbnRCdWlsZGVyKG1haW5GcmFtZS52aWV3KCks
IGUpKTsKIH0KKworLy8gQ3JlYXRlIFBvaW50ZXIgZXZlbnQgZnJvbSBXZWJUb3VjaEV2ZW50Cisv
LworYm9vbCBQYWdlV2lkZ2V0RXZlbnRIYW5kbGVyOjpjcmVhdGVQb2ludGVyRXZlbnRGcm9tVG91
Y2goV2ViQ29yZTo6RnJhbWUmIG1haW5GcmFtZSwgY29uc3QgV2ViVG91Y2hFdmVudCYgZSkKK3sK
KyAgICByZXR1cm4gbWFpbkZyYW1lLmV2ZW50SGFuZGxlcigpLT5oYW5kbGVQb2ludGVyRXZlbnQo
UGxhdGZvcm1Qb2ludGVyRXZlbnRCdWlsZGVyKG1haW5GcmFtZS52aWV3KCksIGUpKTsKK30KKyNl
bmRpZgorCisKK30KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW5wdXRFdmVudC5o
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnB1dEV2ZW50LmgJ
KHJldmlzaW9uIDEzNzU5NikNCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklucHV0RXZl
bnQuaAkod29ya2luZyBjb3B5KQ0KQEAgLTEsNSArMSw2IEBADQogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29w
eXJpZ2h0IE1pY3Jvc29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMTMwLDYgKzEzMSwx
NiBAQA0KICAgICAgICAgVG91Y2hNb3ZlLAogICAgICAgICBUb3VjaEVuZCwKICAgICAgICAgVG91
Y2hDYW5jZWwsCisKKyAgICAgICAgLy8gV2ViUG9pbnRlckV2ZW50CisgICAgICAgIFBvaW50ZXJE
b3duLAorICAgICAgICBQb2ludGVyVXAsCisgICAgICAgIFBvaW50ZXJDYW5jZWwsCisgICAgICAg
IFBvaW50ZXJNb3ZlLAorICAgICAgICBQb2ludGVyT3ZlciwKKyAgICAgICAgUG9pbnRlck91dCwK
KyAgICAgICAgR290UG9pbnRlckNhcHR1cmUsCisgICAgICAgIExvc3RQb2ludGVyQ2FwdHVyZQog
ICAgIH07CiAKICAgICBlbnVtIE1vZGlmaWVycyB7CkBAIC00ODAsNiArNDkxLDE4IEBADQogICAg
IH0KIH07CiAKKy8vIFdlYlBvaW50ZXJFdmVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBXZWJQb2ludGVyRXZlbnQg
aXMgYmFzZWQgb24gV2ViTW91c2VFdmVudAorLy8KK2NsYXNzIFdlYlBvaW50ZXJFdmVudCA6IHB1
YmxpYyBXZWJNb3VzZUV2ZW50IHsKK3B1YmxpYzoKKyAgICBXZWJQb2ludGVyRXZlbnQodW5zaWdu
ZWQgc2l6ZVBhcmFtID0gc2l6ZW9mKFdlYlBvaW50ZXJFdmVudCkpCisgICAgICAgIDogV2ViTW91
c2VFdmVudCgpCisgICAgeworICAgIH0KK307CisKICNwcmFnbWEgcGFjayhwb3ApCiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMzc1OTYp
DQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpDQpAQCAtMTM5
Myw2ICsxMzkzLDcgQEANCiAJJChXZWJDb3JlKS9kb20vTm90YXRpb24uaWRsIFwKIAkkKFdlYkNv
cmUpL2RvbS9PdmVyZmxvd0V2ZW50LmlkbCBcCiAJJChXZWJDb3JlKS9kb20vUGFnZVRyYW5zaXRp
b25FdmVudC5pZGwgXAorCSQoV2ViQ29yZSkvZG9tL1BvaW50ZXJFdmVudC5pZGwgXAkKIAkkKFdl
YkNvcmUpL2RvbS9Qb3BTdGF0ZUV2ZW50LmlkbCBcCiAJJChXZWJDb3JlKS9kb20vUHJvY2Vzc2lu
Z0luc3RydWN0aW9uLmlkbCBcCiAJJChXZWJDb3JlKS9kb20vUHJvZ3Jlc3NFdmVudC5pZGwgXApA
QCAtNTgwNSw2ICs1ODA2LDcgQEANCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1N
ZW51RGVzY3JpcHRpb24uaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3Vz
ZUV2ZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtUGFzdGVib2FyZC5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVBvaW50ZXJFdmVudC5oIFwJCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TY3JlZW4uaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmggXApJbmRleDogV2ViQ29yZS9EZXJpdmVkU291cmNl
cy5wcmkNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaQkocmV2aXNp
b24gMTM3NTk2KQ0KKysrIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCSh3b3JraW5nIGNvcHkp
DQpAQCAtMjYzLDYgKzI2Myw3IEBADQogICAgICQkUFdEL2RvbS9Ob3RhdGlvbi5pZGwgXAogICAg
ICQkUFdEL2RvbS9PdmVyZmxvd0V2ZW50LmlkbCBcCiAgICAgJCRQV0QvZG9tL1BhZ2VUcmFuc2l0
aW9uRXZlbnQuaWRsIFwKKyAgICAkJFBXRC9kb20vUG9pbnRlckV2ZW50LmlkbCBcCiAgICAgJCRQ
V0QvZG9tL1BvcFN0YXRlRXZlbnQuaWRsIFwKICAgICAkJFBXRC9kb20vUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uLmlkbCBcCiAgICAgJCRQV0QvZG9tL1Byb2dyZXNzRXZlbnQuaWRsIFwKSW5kZXg6IFdl
YkNvcmUvZG9tL0V2ZW50TmFtZXMuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvZG9tL0V2ZW50
TmFtZXMuaAkocmV2aXNpb24gMTM3NTk2KQ0KKysrIFdlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAko
d29ya2luZyBjb3B5KQ0KQEAgLTEsNiArMSw3IEBADQogLyoKICAqIENvcHlyaWdodCAoQykgMjAw
NSwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgSm9uIFNoaWVyIChqc2hpZXJAaWFzdGF0ZS5lZHUpCisgKiBQb3J0aW9ucyBDb3B5cmln
aHQgTWljcm9zb2Z0IE9wZW4gVGVjaG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1Miw2ICsyNTMsMTUgQEANCiAgICAgbWFjcm8od2Vi
a2l0cHJlcmVuZGVybG9hZCkgXAogICAgIG1hY3JvKHdlYmtpdHByZXJlbmRlcmRvbWNvbnRlbnRs
b2FkZWQpIFwKICAgICBcCisgICAgbWFjcm8ocG9pbnRlcmRvd24pIFwKKyAgICBtYWNybyhwb2lu
dGVydXApIFwKKyAgICBtYWNybyhwb2ludGVyY2FuY2VsKSBcCisgICAgbWFjcm8ocG9pbnRlcm1v
dmUpIFwKKyAgICBtYWNybyhwb2ludGVyb3ZlcikgXAorICAgIG1hY3JvKHBvaW50ZXJvdXQpIFwK
KyAgICBtYWNybyhnb3Rwb2ludGVyY2FwdHVyZSkgXAorICAgIG1hY3JvKGxvc3Rwb2ludGVyY2Fw
dHVyZSkgXAorICAgIFwKIAogLy8gZW5kIG9mIERPTV9FVkVOVF9OQU1FU19GT1JfRUFDSAogCklu
ZGV4OiBXZWJDb3JlL2RvbS9FdmVudE5hbWVzLmluDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9k
b20vRXZlbnROYW1lcy5pbgkocmV2aXNpb24gMTM3NTk2KQ0KKysrIFdlYkNvcmUvZG9tL0V2ZW50
TmFtZXMuaW4JKHdvcmtpbmcgY29weSkNCkBAIC01MCwzICs1MCw0IEBADQogT3JpZW50YXRpb25F
dmVudCBpbnRlcmZhY2VOYW1lPUV2ZW50LCBjb25kaXRpb25hbD1PUklFTlRBVElPTl9FVkVOVFMK
IE1lZGlhS2V5RXZlbnQgY29uZGl0aW9uYWw9RU5DUllQVEVEX01FRElBCiBUcmFja0V2ZW50IGNv
bmRpdGlvbmFsPVZJREVPX1RSQUNLCitQb2ludGVyRXZlbnQgY29uZGl0aW9uYWw9UE9JTlRFUl9F
VkVOVFMKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuaA0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUv
ZG9tL05vZGUuaAkocmV2aXNpb24gMTM3NTk2KQ0KKysrIFdlYkNvcmUvZG9tL05vZGUuaAkod29y
a2luZyBjb3B5KQ0KQEAgLTQsNiArNCw3IEBADQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsg
TXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogUG9y
dGlvbnMgQ29weXJpZ2h0IE1pY3Jvc29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC05MSw2ICs5MiwxMCBAQA0KIGNs
YXNzIFBsYXRmb3JtR2VzdHVyZUV2ZW50OwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoUE9JTlRFUl9F
VkVOVFMpCitjbGFzcyBQbGF0Zm9ybVBvaW50ZXJFdmVudDsKKyNlbmRpZgorCiAjaWYgRU5BQkxF
KE1JQ1JPREFUQSkKIGNsYXNzIEhUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbjsKIGNsYXNzIFByb3Bl
cnR5Tm9kZUxpc3Q7CkBAIC02MjMsNiArNjI4LDkgQEANCiAjaWYgRU5BQkxFKEdFU1RVUkVfRVZF
TlRTKQogICAgIGJvb2wgZGlzcGF0Y2hHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJl
RXZlbnQmKTsKICNlbmRpZgorI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKKyAgICBib29sIGRp
c3BhdGNoUG9pbnRlckV2ZW50KGNvbnN0IFBsYXRmb3JtUG9pbnRlckV2ZW50JiwgY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIGludCBjbGlja0NvdW50ID0gMCwgTm9kZSogcmVsYXRlZFRh
cmdldCA9IDApOworI2VuZGlmIC8vIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKICAgICB2b2lkIGRp
c3BhdGNoU2ltdWxhdGVkQ2xpY2soRXZlbnQqIHVuZGVybHlpbmdFdmVudCwgU2ltdWxhdGVkQ2xp
Y2tNb3VzZUV2ZW50T3B0aW9ucyA9IFNlbmROb0V2ZW50cywgU2ltdWxhdGVkQ2xpY2tWaXN1YWxP
cHRpb25zID0gU2hvd1ByZXNzZWRMb29rKTsKICAgICBib29sIGRpc3BhdGNoQmVmb3JlTG9hZEV2
ZW50KGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKIApJbmRleDogV2ViQ29yZS9kb20vUG9pbnRl
ckV2ZW50LmlkbA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvZG9tL1BvaW50ZXJFdmVudC5pZGwJ
KHJldmlzaW9uIDApDQorKysgV2ViQ29yZS9kb20vUG9pbnRlckV2ZW50LmlkbAkocmV2aXNpb24g
MCkNCkBAIC0wLDAgKzEsMjAgQEANCitpbnRlcmZhY2UgUG9pbnRlckV2ZW50IDogTW91c2VFdmVu
dCB7CisgICAgCisgICAgW09iakNMZWdhY3lVbm5hbWVkUGFyYW1ldGVyc10gdm9pZCBpbml0UG9p
bnRlckV2ZW50KGluIFtPcHRpb25hbD1EZWZhdWx0SXNVbmRlZmluZWRdIERPTVN0cmluZyB0eXBl
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbD1E
ZWZhdWx0SXNVbmRlZmluZWRdIGJvb2xlYW4gY2FuQnViYmxlLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbD1EZWZhdWx0SXNVbmRlZmluZWRdIGJv
b2xlYW4gY2FuY2VsYWJsZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBET01XaW5kb3cgdmlldywgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWw9RGVmYXVsdElz
VW5kZWZpbmVkXSBsb25nIGRldGFpbCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBsb25nIHNjcmVlblgsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsPURlZmF1
bHRJc1VuZGVmaW5lZF0gbG9uZyBzY3JlZW5ZLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluIFtPcHRpb25hbD1EZWZhdWx0SXNVbmRlZmluZWRdIGxvbmcgY2xpZW50
WCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWw9
RGVmYXVsdElzVW5kZWZpbmVkXSBsb25nIGNsaWVudFksIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gYm9vbGVh
biBjdHJsS2V5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtP
cHRpb25hbD1EZWZhdWx0SXNVbmRlZmluZWRdIGJvb2xlYW4gYWx0S2V5LCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbD1EZWZhdWx0SXNVbmRlZmlu
ZWRdIGJvb2xlYW4gc2hpZnRLZXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gYm9vbGVhbiBtZXRhS2V5LCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbD1EZWZh
dWx0SXNVbmRlZmluZWRdIHVuc2lnbmVkIHNob3J0IGJ1dHRvbiwKKwkJCQkJCQkJCSAgIGluIFtP
cHRpb25hbD1EZWZhdWx0SXNVbmRlZmluZWRdIEV2ZW50VGFyZ2V0IHJlbGF0ZWRUYXJnZXQKKwkJ
CQkJCQkJCSAgICk7Cit9OworCkluZGV4OiBXZWJDb3JlL2RvbS9Qb2ludGVyRXZlbnQuY3BwDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQotLS0gV2ViQ29yZS9kb20vUG9pbnRlckV2ZW50LmNwcAkocmV2aXNpb24gMCkN
CisrKyBXZWJDb3JlL2RvbS9Qb2ludGVyRXZlbnQuY3BwCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCAr
MSwxNzAgQEANCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdo
dCBNaWNyb3NvZnQgT3BlbiBUZWNobm9sb2dpZXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50
LmgiCisjaW5jbHVkZSAiUG9pbnRlckV2ZW50LmgiCisKKyNpbmNsdWRlICJFdmVudERpc3BhdGNo
ZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MSUZyYW1lRWxlbWVudC5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtUG9pbnRlckV2ZW50LmgiCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBQb2ludGVyRXZlbnQgaXMgYmFzZWQgb24gTW91c2VFdmVudAorLy8KK1Bhc3NSZWZQdHI8UG9p
bnRlckV2ZW50PiBQb2ludGVyRXZlbnQ6OmNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsIGNvbnN0IFBsYXRmb3JtUG9pbnRl
ckV2ZW50JiBldmVudCwgaW50IGRldGFpbCwgUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0
KQoreworICAgIGJvb2wgaXNDYW5jZWxhYmxlID0gZXZlbnRUeXBlICE9IGV2ZW50TmFtZXMoKS5w
b2ludGVybW92ZUV2ZW50OworCisgICAgcmV0dXJuIFBvaW50ZXJFdmVudDo6Y3JlYXRlKGV2ZW50
VHlwZSwgdHJ1ZSwgaXNDYW5jZWxhYmxlLCB2aWV3LAorICAgICAgICBkZXRhaWwsIGV2ZW50Lmds
b2JhbFBvc2l0aW9uKCkueCgpLCBldmVudC5nbG9iYWxQb3NpdGlvbigpLnkoKSwgZXZlbnQucG9z
aXRpb24oKS54KCksIGV2ZW50LnBvc2l0aW9uKCkueSgpLAorI2lmIEVOQUJMRShQT0lOVEVSX0xP
Q0spCisgICAgICAgIGV2ZW50Lm1vdmVtZW50RGVsdGEoKS54KCksIGV2ZW50Lm1vdmVtZW50RGVs
dGEoKS55KCksCisjZW5kaWYKKyAgICAgICAgZXZlbnQuY3RybEtleSgpLCBldmVudC5hbHRLZXko
KSwgZXZlbnQuc2hpZnRLZXkoKSwgZXZlbnQubWV0YUtleSgpLCBldmVudC5idXR0b24oKSwKKyAg
ICAgICAgcmVsYXRlZFRhcmdldCwgMCwgZmFsc2UpOworfQorCitQb2ludGVyRXZlbnQ6OlBvaW50
ZXJFdmVudCgpIDogTW91c2VFdmVudCgpCit7Cit9CisKK1BvaW50ZXJFdmVudDo6UG9pbnRlckV2
ZW50KAorCQkJY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCAKKwkJCWJvb2wgY2FuQnViYmxlLCAK
KwkJCWJvb2wgY2FuY2VsYWJsZSwgCisJCQlQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywK
KyAgICAgICAgICAgIGludCBkZXRhaWwsIAorCQkJaW50IHNjcmVlblgsIAorCQkJaW50IHNjcmVl
blksIAorCQkJaW50IHBhZ2VYLCAKKwkJCWludCBwYWdlWSwKKyNpZiBFTkFCTEUoUE9JTlRFUl9M
T0NLKQorICAgICAgICAgICAgaW50IG1vdmVtZW50WCwgCisJCQlpbnQgbW92ZW1lbnRZLAorI2Vu
ZGlmCisgICAgICAgICAgICBib29sIGN0cmxLZXksIAorCQkJYm9vbCBhbHRLZXksIAorCQkJYm9v
bCBzaGlmdEtleSwgCisJCQlib29sIG1ldGFLZXksIAorCQkJdW5zaWduZWQgc2hvcnQgYnV0dG9u
LAorICAgICAgICAgICAgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcmVsYXRlZFRhcmdldCwgCisJ
CQlQYXNzUmVmUHRyPENsaXBib2FyZD4gY2xpcGJvYXJkLCAKKwkJCWJvb2wgaXNTaW11bGF0ZWQK
KwkpCisJOiBNb3VzZUV2ZW50KAorCQkJdHlwZSwgCisJCQljYW5CdWJibGUsIAorCQkJY2FuY2Vs
YWJsZSwgCisJCQl2aWV3LAorICAgICAgICAgICAgZGV0YWlsLCAKKwkJCXNjcmVlblgsIAorCQkJ
c2NyZWVuWSwgCisJCQlwYWdlWCwgCisJCQlwYWdlWSwKKyNpZiBFTkFCTEUoUE9JTlRFUl9MT0NL
KQorICAgICAgICAgICAgbW92ZW1lbnRYLCAKKwkJCW1vdmVtZW50WSwKKyNlbmRpZgorICAgICAg
ICAgICAgY3RybEtleSwgCisJCQlhbHRLZXksIAorCQkJc2hpZnRLZXksIAorCQkJbWV0YUtleSwg
CisJCQlidXR0b24sCisgICAgICAgICAgICByZWxhdGVkVGFyZ2V0LCAKKwkJCWNsaXBib2FyZCwg
CisJCQlpc1NpbXVsYXRlZAorCSkKK3sKK30KKworUG9pbnRlckV2ZW50Ojp+UG9pbnRlckV2ZW50
KCkKK3sKK30KKwordm9pZCBQb2ludGVyRXZlbnQ6OmluaXRQb2ludGVyRXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBQYXNzUmVm
UHRyPEFic3RyYWN0Vmlldz4gdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGRldGFpbCwgaW50IHNjcmVlblgsIGludCBzY3JlZW5ZLCBpbnQgY2xpZW50WCwgaW50IGNs
aWVudFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleSwgYm9v
bCBhbHRLZXksIGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYnV0dG9uLCBQYXNzUmVmUHRyPEV2ZW50VGFy
Z2V0PiByZWxhdGVkVGFyZ2V0KQoreworICAgIE1vdXNlRXZlbnQ6OmluaXRNb3VzZUV2ZW50KHR5
cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGV0YWlsLCBzY3JlZW5YLCBzY3JlZW5ZLCBjbGllbnRYLCBjbGllbnRZLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHJsS2V5LCBhbHRLZXksIHNoaWZ0S2V5LCBt
ZXRhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24sIHJlbGF0ZWRU
YXJnZXQpOworfQorCisvLyBGSVhNRTogRml4IHBvc2l0aW9uaW5nLiBlLmcuIFdlIG5lZWQgdG8g
Y29uc2lkZXIgYm9yZGVyL3BhZGRpbmcuCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTM2OTYKK2lubGluZSBzdGF0aWMgaW50IGFkanVzdGVkQ2xpZW50WChpbnQg
aW5uZXJDbGllbnRYLCBIVE1MSUZyYW1lRWxlbWVudCogaWZyYW1lLCBGcmFtZVZpZXcqIGZyYW1l
VmlldykKK3sKKyAgICByZXR1cm4gaWZyYW1lLT5vZmZzZXRMZWZ0KCkgLSBmcmFtZVZpZXctPnNj
cm9sbFgoKSArIGlubmVyQ2xpZW50WDsKK30KKworaW5saW5lIHN0YXRpYyBpbnQgYWRqdXN0ZWRD
bGllbnRZKGludCBpbm5lckNsaWVudFksIEhUTUxJRnJhbWVFbGVtZW50KiBpZnJhbWUsIEZyYW1l
VmlldyogZnJhbWVWaWV3KQoreworICAgIHJldHVybiBpZnJhbWUtPm9mZnNldFRvcCgpIC0gZnJh
bWVWaWV3LT5zY3JvbGxZKCkgKyBpbm5lckNsaWVudFk7Cit9CisKK1Bhc3NSZWZQdHI8UG9pbnRl
ckV2ZW50RGlzcGF0Y2hNZWRpYXRvcj4gUG9pbnRlckV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6Y3Jl
YXRlKFBhc3NSZWZQdHI8UG9pbnRlckV2ZW50PiBwb2ludGVyRXZlbnQpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBQb2ludGVyRXZlbnREaXNwYXRjaE1lZGlhdG9yKHBvaW50ZXJFdmVudCkp
OworfQorCitQb2ludGVyRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpQb2ludGVyRXZlbnREaXNwYXRj
aE1lZGlhdG9yKFBhc3NSZWZQdHI8UG9pbnRlckV2ZW50PiBwb2ludGVyRXZlbnQpCisgICAgOiBF
dmVudERpc3BhdGNoTWVkaWF0b3IocG9pbnRlckV2ZW50KQoreworfQorCitQb2ludGVyRXZlbnQq
IFBvaW50ZXJFdmVudERpc3BhdGNoTWVkaWF0b3I6OmV2ZW50KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UG9pbnRlckV2ZW50Kj4oRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpldmVu
dCgpKTsKK30KKworYm9vbCBQb2ludGVyRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2
ZW50KEV2ZW50RGlzcGF0Y2hlciogZGlzcGF0Y2hlcikgY29uc3QKK3sKKyAgICBpZiAoZGlzcGF0
Y2hlci0+bm9kZSgpLT5kaXNhYmxlZCgpKSAvLyBEb24ndCBldmVuIHNlbmQgRE9NIGV2ZW50cyBm
b3IgZGlzYWJsZWQgY29udHJvbHMuLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChl
dmVudCgpLT50eXBlKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFNob3Vs
ZG4ndCBoYXBwZW4uCisKKyAgICBFdmVudFRhcmdldCogcmVsYXRlZFRhcmdldCA9IGV2ZW50KCkt
PnJlbGF0ZWRUYXJnZXQoKTsKKyAgICBkaXNwYXRjaGVyLT5hZGp1c3RSZWxhdGVkVGFyZ2V0KGV2
ZW50KCksIHJlbGF0ZWRUYXJnZXQpOworCisgICAgZGlzcGF0Y2hlci0+ZGlzcGF0Y2hFdmVudChl
dmVudCgpKTsKKyAgICBib29sIHN3YWxsb3dFdmVudCA9IGV2ZW50KCktPmRlZmF1bHRIYW5kbGVk
KCkgfHwgZXZlbnQoKS0+ZGVmYXVsdFByZXZlbnRlZCgpOworCisgICAgaWYgKGV2ZW50KCktPnR5
cGUoKSAhPSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCB8fCBldmVudCgpLT5kZXRhaWwoKSAhPSAy
KQorICAgICAgICByZXR1cm4gc3dhbGxvd0V2ZW50OworICAgIHJldHVybiBzd2FsbG93RXZlbnQ7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL1BvaW50ZXJF
dmVudC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9kb20vUG9pbnRlckV2ZW50LmgJKHJldmlz
aW9uIDApDQorKysgV2ViQ29yZS9kb20vUG9pbnRlckV2ZW50LmgJKHJldmlzaW9uIDApDQpAQCAt
MCwwICsxLDExMyBAQA0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29w
eXJpZ2h0IE1pY3Jvc29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFCisgKi8KKworI2lmbmRlZiBQb2ludGVyRXZlbnRfaAorI2RlZmluZSBQb2lu
dGVyRXZlbnRfaAorCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCisjaW5jbHVkZSAiRXZlbnREaXNw
YXRjaE1lZGlhdG9yLmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEV2ZW50RGlzcGF0Y2hlcjsKK2NsYXNzIFBsYXRmb3JtUG9pbnRlckV2
ZW50OworCisgICAgY2xhc3MgUG9pbnRlckV2ZW50IDogcHVibGljIE1vdXNlRXZlbnQgeworICAg
IHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UG9pbnRlckV2ZW50PiBjcmVhdGUo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBvaW50ZXJFdmVu
dCk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UG9pbnRlckV2ZW50PiBj
cmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5j
ZWxhYmxlLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywKKyAgICAgICAgICAgIGludCBk
ZXRhaWwsIGludCBzY3JlZW5YLCBpbnQgc2NyZWVuWSwgaW50IHBhZ2VYLCBpbnQgcGFnZVksCisj
aWYgRU5BQkxFKFBPSU5URVJfTE9DSykKKyAgICAgICAgICAgIGludCBtb3ZlbWVudFgsIGludCBt
b3ZlbWVudFksCisjZW5kaWYKKyAgICAgICAgICAgIGJvb2wgY3RybEtleSwgYm9vbCBhbHRLZXks
IGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSwgdW5zaWduZWQgc2hvcnQgYnV0dG9uLAorICAg
ICAgICAgICAgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcmVsYXRlZFRhcmdldCwgUGFzc1JlZlB0
cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCA9IDAsIGJvb2wgaXNTaW11bGF0ZWQgPSBmYWxzZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQb2ludGVyRXZlbnQodHlw
ZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlLCB2aWV3LCBkZXRhaWwsIHNjcmVlblgsIHNjcmVlblks
IHBhZ2VYLCBwYWdlWSwKKyNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQorICAgICAgICAgICAgICAg
IG1vdmVtZW50WCwgbW92ZW1lbnRZLAorI2VuZGlmCisgICAgICAgICAgICAgICAgY3RybEtleSwg
YWx0S2V5LCBzaGlmdEtleSwgbWV0YUtleSwgYnV0dG9uLCByZWxhdGVkVGFyZ2V0LCBjbGlwYm9h
cmQsIGlzU2ltdWxhdGVkKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
UG9pbnRlckV2ZW50PiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NS
ZWZQdHI8QWJzdHJhY3RWaWV3PiwgY29uc3QgUGxhdGZvcm1Qb2ludGVyRXZlbnQmLCBpbnQgZGV0
YWlsLCBQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQpOworCisgICAgICAgIHZpcnR1YWwg
flBvaW50ZXJFdmVudCgpOworCisgICAgICAgIHZvaWQgaW5pdFBvaW50ZXJFdmVudChjb25zdCBB
dG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NS
ZWZQdHI8QWJzdHJhY3RWaWV3PiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0
YWlsLCBpbnQgc2NyZWVuWCwgaW50IHNjcmVlblksIGludCBjbGllbnRYLCBpbnQgY2xpZW50WSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBi
b29sIHNoaWZ0S2V5LCBib29sIG1ldGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgc2hvcnQgYnV0dG9uLCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiByZWxhdGVkVGFy
Z2V0KTsKKworICAgICAgICAvLyBPdmVybG9hZCB0byBzZXBhcmF0ZSBmcm9tIE1vdXNlRXZlbnQK
KyAgICAgICAgdmlydHVhbCBib29sIGlzTW91c2VFdmVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFBvaW50ZXJFdmVudCgKKwkJCWNvbnN0IEF0
b21pY1N0cmluZyYgdHlwZSwgCisJCQlib29sIGNhbkJ1YmJsZSwgCisJCQlib29sIGNhbmNlbGFi
bGUsIAorCQkJUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+LAorICAgICAgICAgICAgaW50IGRldGFp
bCwgCisJCQlpbnQgc2NyZWVuWCwgCisJCQlpbnQgc2NyZWVuWSwgCisJCQlpbnQgcGFnZVgsIAor
CQkJaW50IHBhZ2VZLAorI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCisgICAgICAgICAgICBpbnQg
bW92ZW1lbnRYLCAKKwkJCWludCBtb3ZlbWVudFksCisjZW5kaWYKKyAgICAgICAgICAgIGJvb2wg
Y3RybEtleSwgCisJCQlib29sIGFsdEtleSwgCisJCQlib29sIHNoaWZ0S2V5LCAKKwkJCWJvb2wg
bWV0YUtleSwgCisJCQl1bnNpZ25lZCBzaG9ydCBidXR0b24sCisgICAgICAgICAgICBQYXNzUmVm
UHRyPEV2ZW50VGFyZ2V0PiByZWxhdGVkVGFyZ2V0LCAKKwkJCVBhc3NSZWZQdHI8Q2xpcGJvYXJk
PiBjbGlwYm9hcmQsIAorCQkJYm9vbCBpc1NpbXVsYXRlZCk7CisJCQkJICAgCisgICAgcHJvdGVj
dGVkOgorICAgICAgICBQb2ludGVyRXZlbnQoKTsKKworfTsKKworY2xhc3MgUG9pbnRlckV2ZW50
RGlzcGF0Y2hNZWRpYXRvciA6IHB1YmxpYyBFdmVudERpc3BhdGNoTWVkaWF0b3IgeworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBvaW50ZXJFdmVudERpc3BhdGNoTWVkaWF0b3I+IGNy
ZWF0ZShQYXNzUmVmUHRyPFBvaW50ZXJFdmVudD4pOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0
IFBvaW50ZXJFdmVudERpc3BhdGNoTWVkaWF0b3IoUGFzc1JlZlB0cjxQb2ludGVyRXZlbnQ+KTsK
KyAgICBQb2ludGVyRXZlbnQqIGV2ZW50KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgZGlz
cGF0Y2hFdmVudChFdmVudERpc3BhdGNoZXIqKSBjb25zdDsKK307CisJCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQb2ludGVyRXZlbnRfaApJbmRleDogV2ViQ29yZS9kb20v
Tm9kZS5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24g
MTM3NTk2KQ0KKysrIFdlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtNSw2
ICs1LDcgQEANCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgs
IDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQogICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBQb3J0aW9ucyBDb3B5
cmlnaHQgTWljcm9zb2Z0IE9wZW4gVGVjaG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEyMyw2ICsxMjQsMTAgQEANCiAjaW5jbHVkZSAi
R2VzdHVyZUV2ZW50LmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKKyNp
bmNsdWRlICJQb2ludGVyRXZlbnQuaCIKKyNlbmRpZgorCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikK
ICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjZW5kaWYKQEAgLTI0MDYsNiArMjQx
MSwxNCBAQA0KIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQorYm9vbCBO
b2RlOjpkaXNwYXRjaFBvaW50ZXJFdmVudChjb25zdCBQbGF0Zm9ybVBvaW50ZXJFdmVudCYgZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsCisgICAgaW50IGRldGFpbCwgTm9kZSogcmVs
YXRlZFRhcmdldCkKK3sKKyAgICByZXR1cm4gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50
KHRoaXMsIFBvaW50ZXJFdmVudERpc3BhdGNoTWVkaWF0b3I6OmNyZWF0ZShQb2ludGVyRXZlbnQ6
OmNyZWF0ZShldmVudFR5cGUsIGRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksIGUsIGRldGFpbCwg
cmVsYXRlZFRhcmdldCkpKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoUE9JTlRFUl9FVkVOVFMpCisK
IHZvaWQgTm9kZTo6ZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhFdmVudCogdW5kZXJseWluZ0V2ZW50
LCBTaW11bGF0ZWRDbGlja01vdXNlRXZlbnRPcHRpb25zIGV2ZW50T3B0aW9ucywgU2ltdWxhdGVk
Q2xpY2tWaXN1YWxPcHRpb25zIHZpc3VhbE9wdGlvbnMpCiB7CiAgICAgRXZlbnREaXNwYXRjaGVy
OjpkaXNwYXRjaFNpbXVsYXRlZENsaWNrKHRoaXMsIHVuZGVybHlpbmdFdmVudCwgZXZlbnRPcHRp
b25zLCB2aXN1YWxPcHRpb25zKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaA0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkocmV2aXNpb24gMTM3
NTk2KQ0KKysrIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkod29ya2luZyBjb3B5KQ0KQEAg
LTEsNSArMSw2IEBADQogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSwgMjAx
MCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5
cmlnaHQgTWljcm9zb2Z0IE9wZW4gVGVjaG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDYgKzY2LDcgQEANCiBj
bGFzcyBOb2RlOwogY2xhc3MgT3B0aW9uYWxDdXJzb3I7CiBjbGFzcyBQbGF0Zm9ybUtleWJvYXJk
RXZlbnQ7CitjbGFzcyBQbGF0Zm9ybVBvaW50ZXJFdmVudDsKIGNsYXNzIFBsYXRmb3JtVG91Y2hF
dmVudDsKIGNsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKIGNsYXNzIFJlbmRlckxheWVyOwpAQCAt
MjQxLDYgKzI0MywxMCBAQA0KICAgICBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZv
cm1Ub3VjaEV2ZW50Jik7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKKyAg
ICBib29sIGhhbmRsZVBvaW50ZXJFdmVudChjb25zdCBQbGF0Zm9ybVBvaW50ZXJFdmVudCYpOwor
I2VuZGlmCisKICAgICBib29sIHVzZUhhbmRDdXJzb3IoTm9kZSosIGJvb2wgaXNPdmVyTGluaywg
Ym9vbCBzaGlmdEtleSk7CiAKIHByaXZhdGU6CkBAIC0zMjQsNiArMzMwLDEwIEBADQogICAgIGJv
b2wgZHJhZ0h5c3RlcmVzaXNFeGNlZWRlZChjb25zdCBJbnRQb2ludCYpIGNvbnN0OwogI2VuZGlm
IC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAKKyNpZiBFTkFCTEUoUE9JTlRFUl9FVkVOVFMpCisg
ICAgYm9vbCBkaXNwYXRjaFBvaW50ZXJFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgY29uc3QgUGxhdGZvcm1Qb2ludGVyRXZlbnQmKTsKKyNlbmRpZiAvLyBFTkFCTEUoUE9JTlRF
Ul9FVkVOVFMpCisKICAgICBib29sIHBhc3NNb3VzZVByZXNzRXZlbnRUb1N1YmZyYW1lKE1vdXNl
RXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmLCBGcmFtZSogc3ViZnJhbWUpOwogICAgIGJvb2wgcGFz
c01vdXNlTW92ZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiwg
RnJhbWUqIHN1YmZyYW1lLCBIaXRUZXN0UmVzdWx0KiBob3ZlcmVkTm9kZSA9IDApOwogICAgIGJv
b2wgcGFzc01vdXNlUmVsZWFzZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RS
ZXN1bHRzJiwgRnJhbWUqIHN1YmZyYW1lKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJl
dmlzaW9uIDEzNzU5NikNCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQ0KQEAgLTIsNiArMiw3IEBADQogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAy
MDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQog
ICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYy4gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgTWljcm9zb2Z0IE9wZW4gVGVjaG5vbG9naWVzLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTExNSw2ICsxMTYsMTAgQEANCiAjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZVNldC5oIgog
I2VuZGlmCiAKKyNpZiBFTkFCTEUoUE9JTlRFUl9FVkVOVFMpCisjaW5jbHVkZSAiUGxhdGZvcm1Q
b2ludGVyRXZlbnQuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CkBAIC00MDc5LDQgKzQwODQsMTQzIEBADQogICAgIG1fbGFzdEtu
b3duTW91c2VHbG9iYWxQb3NpdGlvbiA9IGV2ZW50Lmdsb2JhbFBvc2l0aW9uKCk7CiB9CiAKLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKyNpZiBFTkFCTEUoUE9JTlRFUl9FVkVOVFMpCisKK2Jvb2wg
RXZlbnRIYW5kbGVyOjpoYW5kbGVQb2ludGVyRXZlbnQoY29uc3QgUGxhdGZvcm1Qb2ludGVyRXZl
bnQmIGUpCit7CisgICAgc3dpdGNoIChlLnR5cGUoKSkgeworICAgIGNhc2UgUGxhdGZvcm1FdmVu
dDo6UG9pbnRlckRvd246CisgICAgICAgIHJldHVybiBkaXNwYXRjaFBvaW50ZXJFdmVudChldmVu
dE5hbWVzKCkucG9pbnRlcmRvd25FdmVudCwgZSk7CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpQ
b2ludGVyVXA6CisgICAgICAgIHJldHVybiBkaXNwYXRjaFBvaW50ZXJFdmVudChldmVudE5hbWVz
KCkucG9pbnRlcnVwRXZlbnQsIGUpOworICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6UG9pbnRlckNh
bmNlbDoKKyAgICAgICAgcmV0dXJuIGRpc3BhdGNoUG9pbnRlckV2ZW50KGV2ZW50TmFtZXMoKS5w
b2ludGVyY2FuY2VsRXZlbnQsIGUpOworICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6UG9pbnRlck1v
dmU6CisgICAgICAgIHJldHVybiBkaXNwYXRjaFBvaW50ZXJFdmVudChldmVudE5hbWVzKCkucG9p
bnRlcm1vdmVFdmVudCwgZSk7CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpQb2ludGVyT3ZlcjoK
KyAgICAgICAgcmV0dXJuIGRpc3BhdGNoUG9pbnRlckV2ZW50KGV2ZW50TmFtZXMoKS5wb2ludGVy
b3ZlckV2ZW50LCBlKTsKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6OlBvaW50ZXJPdXQ6CisgICAg
ICAgIHJldHVybiBkaXNwYXRjaFBvaW50ZXJFdmVudChldmVudE5hbWVzKCkucG9pbnRlcm91dEV2
ZW50LCBlKTsKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6OkdvdFBvaW50ZXJDYXB0dXJlOgorICAg
ICAgICByZXR1cm4gZGlzcGF0Y2hQb2ludGVyRXZlbnQoZXZlbnROYW1lcygpLmdvdHBvaW50ZXJj
YXB0dXJlRXZlbnQsIGUpOworICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6TG9zdFBvaW50ZXJDYXB0
dXJlOgorICAgICAgICByZXR1cm4gZGlzcGF0Y2hQb2ludGVyRXZlbnQoZXZlbnROYW1lcygpLmxv
c3Rwb2ludGVyY2FwdHVyZUV2ZW50LCBlKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRXZlbnRI
YW5kbGVyOjpkaXNwYXRjaFBvaW50ZXJFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgY29uc3QgUGxhdGZvcm1Qb2ludGVyRXZlbnQmIGUpCit7CisgICAgQVNTRVJUKG1fZnJhbWUp
OworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRy
PEZyYW1lVmlldz4gcHJvdGVjdG9yKG1fZnJhbWUtPnZpZXcoKSk7CisgICAgSGl0VGVzdFJlcXVl
c3Q6OkhpdFRlc3RSZXF1ZXN0VHlwZSBoaXRUeXBlID0gSGl0VGVzdFJlcXVlc3Q6Ok1vdmU7CisK
KyAgICBpZiAobV9tb3VzZVByZXNzZWQpCisgICAgICAgIGhpdFR5cGUgfD0gSGl0VGVzdFJlcXVl
c3Q6OkFjdGl2ZTsKKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgLy8gVHJlYXQgYW55
IG1vdXNlIG1vdmUgZXZlbnRzIGFzIHJlYWRvbmx5IGlmIHRoZSB1c2VyIGlzIGN1cnJlbnRseSB0
b3VjaGluZyB0aGUgc2NyZWVuLgorICAgIGlmIChtX3RvdWNoUHJlc3NlZCkKKyAgICAgICAgaGl0
VHlwZSB8PSBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlIHwgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5
OworI2VuZGlmCisgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChoaXRUeXBlKTsKKyAgICBNb3Vz
ZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzIG1ldiA9IHByZXBhcmVNb3VzZUV2ZW50KHJlcXVlc3Qs
IGUpOworCisgICAgSGl0VGVzdFJlc3VsdCBob3ZlcmVkTm9kZSA9IG1ldi5oaXRUZXN0UmVzdWx0
KCk7CisgICAgCisgICAgLy8gZ2VuZXJhdGUgcG9pbnRlcm91dCwgcG9pbnRlcm92ZXIgZXZlbnRz
IChjb3BpZWQgZnJvbSB1cGRhdGVNb3VzZUV2ZW50VGFyZ2V0Tm9kZSgpKQorICAgIC8vCisgICAg
Tm9kZSogcmVzdWx0ID0gbWV2LnRhcmdldE5vZGUoKTsKKyAgICAKKyAgICAvLyBJZiB3ZSdyZSBj
YXB0dXJpbmcsIHdlIGFsd2F5cyBnbyByaWdodCB0byB0aGF0IG5vZGUuCisgICAgaWYgKG1fY2Fw
dHVyaW5nTW91c2VFdmVudHNOb2RlKQorICAgICAgICByZXN1bHQgPSBtX2NhcHR1cmluZ01vdXNl
RXZlbnRzTm9kZS5nZXQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBu
b2RlIGlzIGEgdGV4dCBub2RlLCBkaXNwYXRjaCBvbiB0aGUgcGFyZW50IG5vZGUgLSByZGFyOi8v
NDE5NjY0NgorICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC0+aXNUZXh0Tm9kZSgpKSB7Cisg
ICAgICAgICAgICBBbmNlc3RvckNoYWluV2Fsa2VyIHdhbGtlcihyZXN1bHQpOworICAgICAgICAg
ICAgd2Fsa2VyLnBhcmVudCgpOworICAgICAgICAgICAgcmVzdWx0ID0gd2Fsa2VyLmdldCgpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgTm9kZSAqbm9kZVVuZGVyUG9pbnRlciA9IHJlc3VsdDsK
KyAgICBOb2RlICpsYXN0Tm9kZVVuZGVyUG9pbnRlciA9IG1fbGFzdE5vZGVVbmRlck1vdXNlLmdl
dCgpOworCisgICAgaWYgKGxhc3ROb2RlVW5kZXJQb2ludGVyICYmIGxhc3ROb2RlVW5kZXJQb2lu
dGVyLT5kb2N1bWVudCgpICE9IG1fZnJhbWUtPmRvY3VtZW50KCkpIHsKKyAgICAgICAgbGFzdE5v
ZGVVbmRlclBvaW50ZXIgPSAwOworICAgIH0KKyAgICBpZiAobGFzdE5vZGVVbmRlclBvaW50ZXIg
IT0gbm9kZVVuZGVyUG9pbnRlcikgeworICAgICAgICAvLyBzZW5kIHBvaW50ZXJvdXQgZXZlbnQg
dG8gdGhlIG9sZCBub2RlCisgICAgICAgIGlmIChsYXN0Tm9kZVVuZGVyUG9pbnRlcikKKyAgICAg
ICAgICAgIGxhc3ROb2RlVW5kZXJQb2ludGVyLT5kaXNwYXRjaFBvaW50ZXJFdmVudChlLCBldmVu
dE5hbWVzKCkucG9pbnRlcm91dEV2ZW50LCAwLCBub2RlVW5kZXJQb2ludGVyKTsKKyAgICAgICAg
Ly8gc2VuZCBwb2ludGVyb3ZlciBldmVudCB0byB0aGUgbmV3IG5vZGUKKyAgICAgICAgaWYgKG5v
ZGVVbmRlclBvaW50ZXIpCisgICAgICAgICAgICBub2RlVW5kZXJQb2ludGVyLT5kaXNwYXRjaFBv
aW50ZXJFdmVudChlLCBldmVudE5hbWVzKCkucG9pbnRlcm92ZXJFdmVudCwgMCwgbGFzdE5vZGVV
bmRlclBvaW50ZXIpOworICAgIH0KKworICAgIGJvb2wgc3dhbGxvd0V2ZW50ID0gZmFsc2U7CisK
KyAgICAvLyBzZW5kIHdoYXRldmVyIHBvaW50ZXIgZXZlbnQgd2UgcGxhbm5lZCB0byBzZW5kIGlu
IHRoZSBmaXJzdCBwbGFjZQorICAgIGlmIChub2RlVW5kZXJQb2ludGVyKQorICAgICAgICBzd2Fs
bG93RXZlbnQgPSBub2RlVW5kZXJQb2ludGVyLT5kaXNwYXRjaFBvaW50ZXJFdmVudChlLCBldmVu
dFR5cGUpOworCisgICAgaWYgKCFzd2FsbG93RXZlbnQgJiYgZXZlbnRUeXBlID09IGV2ZW50TmFt
ZXMoKS5wb2ludGVyZG93bkV2ZW50KSB7CisKKyAgICAgICAgLy8gSWYgY2xpY2tpbmcgb24gYSBm
cmFtZSBzY3JvbGxiYXIsIGRvIG5vdCBtZXNzIHVwIHdpdGggY29udGVudCBmb2N1cy4KKyAgICAg
ICAgaWYgKEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKSkgeworICAgICAgICAgICAg
aWYgKHZpZXctPnNjcm9sbGJhckF0UG9pbnQoZS5wb3NpdGlvbigpKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGUgbGF5b3V0IG5lZWRz
IHRvIGJlIHVwIHRvIGRhdGUgdG8gZGV0ZXJtaW5lIGlmIGFuIGVsZW1lbnQgaXMgZm9jdXNhYmxl
LgorICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5n
U3R5bGVzaGVldHMoKTsKKworICAgICAgICAvLyBCbHVyIGN1cnJlbnQgZm9jdXMgbm9kZSB3aGVu
IGEgbGluay9idXR0b24gaXMgY2xpY2tlZDsgdGhpcworICAgICAgICAvLyBpcyBleHBlY3RlZCBi
eSBzb21lIHNpdGVzIHRoYXQgcmVseSBvbiBvbkNoYW5nZSBoYW5kbGVycyBydW5uaW5nCisgICAg
ICAgIC8vIGZyb20gZm9ybSBmaWVsZHMgYmVmb3JlIHRoZSBidXR0b24gY2xpY2sgaXMgcHJvY2Vz
c2VkLgorICAgICAgICBOb2RlKiBub2RlID0gbm9kZVVuZGVyUG9pbnRlcjsKKworICAgICAgICAv
LyBXYWxrIHVwIHRoZSBET00gdHJlZSB0byBzZWFyY2ggZm9yIGEgbm9kZSB0byBmb2N1cy4KKyAg
ICAgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5pc01vdXNlRm9jdXNh
YmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUbyBmaXggPHJkYXI6Ly9wcm9ibGVtLzQ4OTU0
Mjg+IENhbid0IGRyYWcgc2VsZWN0ZWQgVG9Ebywgd2UgZG9uJ3QgZm9jdXMgYQorICAgICAgICAg
ICAgICAgIC8vIG5vZGUgb24gbW91c2UgZG93biBpZiBpdCdzIHNlbGVjdGVkIGFuZCBpbnNpZGUg
YSBmb2N1c2VkIG5vZGUuIEl0IHdpbGwgYmUKKyAgICAgICAgICAgICAgICAvLyBmb2N1c2VkIGlm
IHRoZSB1c2VyIGRvZXMgYSBtb3VzZXVwIG92ZXIgaXQsIGhvd2V2ZXIsIGJlY2F1c2UgdGhlIG1v
dXNldXAKKyAgICAgICAgICAgICAgICAvLyB3aWxsIHNldCBhIHNlbGVjdGlvbiBpbnNpZGUgaXQs
IHdoaWNoIHdpbGwgY2FsbCBzZXRGb2N1c2VOb2RlSWZOZWVkZWQuCisgICAgICAgICAgICAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgICAgICAgICAgTm9kZSogbiA9IG5vZGUtPmlz
U2hhZG93Um9vdCgpID8gdG9TaGFkb3dSb290KG5vZGUpLT5ob3N0KCkgOiBub2RlOworICAgICAg
ICAgICAgICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpCisgICAgICAgICAg
ICAgICAgICAgICYmIG1fZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLT5j
b21wYXJlTm9kZShuLCBlYykgPT0gUmFuZ2U6Ok5PREVfSU5TSURFCisgICAgICAgICAgICAgICAg
ICAgICYmIG4tPmlzRGVzY2VuZGFudE9mKG1fZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWROb2Rl
KCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bm9kZSA9IG5vZGUtPnBhcmVudE9ySG9zdE5vZGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IElmIGZvY3VzIHNoaWZ0IGlzIGJsb2NrZWQsIHdlIGVhdCB0aGUgZXZlbnQuICBOb3RlIHdlIHNo
b3VsZCBuZXZlciBjbGVhciBzd2FsbG93RXZlbnQKKyAgICAgICAgLy8gaWYgdGhlIHBhZ2UgYWxy
ZWFkeSBzZXQgaXQgKGUuZy4sIGJ5IGNhbmNlbGluZyBkZWZhdWx0IGJlaGF2aW9yKS4KKyAgICAg
ICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpIHsKKyAgICAgICAgICAgIGlmIChu
b2RlICYmIG5vZGUtPmlzTW91c2VGb2N1c2FibGUoKSkgeworICAgICAgICAgICAgICAgIGlmICgh
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEZvY3VzZWROb2RlKG5vZGUsIG1fZnJhbWUpKQor
ICAgICAgICAgICAgICAgICAgICBzd2FsbG93RXZlbnQgPSB0cnVlOworICAgICAgICAgICAgfSBl
bHNlIGlmICghbm9kZSB8fCAhbm9kZS0+Zm9jdXNlZCgpKSB7CisgICAgICAgICAgICAgICAgaWYg
KCFwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZE5vZGUoMCwgbV9mcmFtZSkpCisg
ICAgICAgICAgICAgICAgICAgIHN3YWxsb3dFdmVudCA9IHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3dhbGxvd0V2ZW50OworfQorCisjZW5kaWYg
Ly8gRU5BQkxFKFBPSU5URVJfRVZFTlRTKQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Bs
YXRmb3JtRXZlbnQuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1F
dmVudC5oCShyZXZpc2lvbiAxMzc1OTYpDQorKysgV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUV2
ZW50LmgJKHdvcmtpbmcgY29weSkNCkBAIC0xLDUgKzEsNiBAQA0KIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29w
eXJpZ2h0IE1pY3Jvc29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw2ICs3MSwxNyBAQA0K
ICAgICAgICAgVG91Y2hFbmQsCiAgICAgICAgIFRvdWNoQ2FuY2VsLAogI2VuZGlmCisjaWYgRU5B
QkxFKFBPSU5URVJfRVZFTlRTKQorICAgICAgICAvLyBQbGF0Zm9ybVBvaW50ZXJFdmVudAorICAg
ICAgICBQb2ludGVyRG93biwKKyAgICAgICAgUG9pbnRlclVwLAorICAgICAgICBQb2ludGVyQ2Fu
Y2VsLAorICAgICAgICBQb2ludGVyTW92ZSwKKyAgICAgICAgUG9pbnRlck92ZXIsCisgICAgICAg
IFBvaW50ZXJPdXQsCisgICAgICAgIEdvdFBvaW50ZXJDYXB0dXJlLAorICAgICAgICBMb3N0UG9p
bnRlckNhcHR1cmUKKyNlbmRpZgogICAgIH07CiAKICAgICBlbnVtIE1vZGlmaWVycyB7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtUG9pbnRlckV2ZW50LmgNCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t
LSBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtUG9pbnRlckV2ZW50LmgJKHJldmlzaW9uIDApDQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVBvaW50ZXJFdmVudC5oCShyZXZpc2lvbiAwKQ0K
QEAgLTAsMCArMSw2MiBAQA0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMg
Q29weXJpZ2h0IE1pY3Jvc29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFCisgKi8KKworLyoKKworVGhpcyBpbXBsZW1lbnRzIFBvaW50ZXIgRXZl
bnRzIGFzIGRlZmluZWQgaW4gUG9pbnRlciBFdmVudHMgc3BlY2lmaWNhdGlvbiBzdWJtaXNzaW9u
IHRvIFczQy4KKworICovCisKKyNpZm5kZWYgUGxhdGZvcm1Qb2ludGVyRXZlbnRfaAorI2RlZmlu
ZSBQbGF0Zm9ybVBvaW50ZXJFdmVudF9oCisKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBF
TkFCTEUoUE9JTlRFUl9FVkVOVFMpCisKKyAgICBjbGFzcyBQbGF0Zm9ybVBvaW50ZXJFdmVudCA6
IHB1YmxpYyBQbGF0Zm9ybU1vdXNlRXZlbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgUGxhdGZv
cm1Qb2ludGVyRXZlbnQoKQorICAgICAgICAgICAgOiBQbGF0Zm9ybU1vdXNlRXZlbnQoKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBQbGF0Zm9ybVBvaW50ZXJFdmVudChjb25zdCBJ
bnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgTW91c2VC
dXR0b24gYnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgY2xpY2tDb3VudCwgYm9vbCBzaGlmdEtleSwgYm9vbCBjdHJsS2V5LCBi
b29sIGFsdEtleSwgYm9vbCBtZXRhS2V5LCBkb3VibGUgdGltZXN0YW1wKQorICAgICAgICAgICAg
OiBQbGF0Zm9ybU1vdXNlRXZlbnQocG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCBidXR0b24sIHR5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlja0NvdW50LCBzaGlmdEtleSwgY3Ry
bEtleSwgYWx0S2V5LCBtZXRhS2V5LCB0aW1lc3RhbXApCisgICAgICAgIHsKKyAgICAgICAgfQor
ICAgIH07CisKKyNlbmRpZiAvLyBFTkFCTEUoUE9JTlRFUl9FVkVOVFMpCisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBsYXRmb3JtUG9pbnRlckV2ZW50X2gKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS5neXBpDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJ
KHJldmlzaW9uIDEzNzU5NikNCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5
KQ0KQEAgLTIzNyw2ICsyMzcsNyBAQA0KICAgICAgICAgICAgICdkb20vTm90YXRpb24uaWRsJywK
ICAgICAgICAgICAgICdkb20vT3ZlcmZsb3dFdmVudC5pZGwnLAogICAgICAgICAgICAgJ2RvbS9Q
YWdlVHJhbnNpdGlvbkV2ZW50LmlkbCcsCisgICAgICAgICAgICAnZG9tL1BvaW50ZXJFdmVudC5p
ZGwnLAogICAgICAgICAgICAgJ2RvbS9Qb3BTdGF0ZUV2ZW50LmlkbCcsCiAgICAgICAgICAgICAn
ZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5pZGwnLAogICAgICAgICAgICAgJ2RvbS9Qcm9ncmVz
c0V2ZW50LmlkbCcsCkBAIC0yODU2LDYgKzI4NTcsNyBAQA0KICAgICAgICAgICAgICdkb20vUGFn
ZVRyYW5zaXRpb25FdmVudC5jcHAnLAogICAgICAgICAgICAgJ2RvbS9QYWdlVHJhbnNpdGlvbkV2
ZW50LmgnLAogICAgICAgICAgICAgJ2RvbS9QZW5kaW5nU2NyaXB0LmNwcCcsCisgICAgICAgICAg
ICAnZG9tL1BvaW50ZXJFdmVudC5jcHAnLAkJCQogICAgICAgICAgICAgJ2RvbS9Qb3BTdGF0ZUV2
ZW50LmNwcCcsCiAgICAgICAgICAgICAnZG9tL1BvcFN0YXRlRXZlbnQuaCcsCiAgICAgICAgICAg
ICAnZG9tL1Bvc2l0aW9uLmNwcCcsCkBAIC0zNDcyLDYgKzM0NzQsNyBAQA0KICAgICAgICAgICAg
ICdwbGF0Zm9ybS9QbGF0Zm9ybUluc3RydW1lbnRhdGlvbi5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9QbGF0Zm9ybU1lbW9yeUluc3RydW1lbnRhdGlvbi5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL1BsYXRmb3JtTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL1BsYXRmb3JtUG9pbnRlckV2ZW50LmgnLAkJCQogICAgICAgICAgICAgJ3BsYXRmb3Jt
L1BsYXRmb3JtU3RyYXRlZ2llcy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3Jt
VG91Y2hFdmVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0Zm9ybVRvdWNoUG9pbnQu
aCcsCkluZGV4OiBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UNCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBX
ZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDEzNzU5NikNCisrKyBXZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkNCkBAIC0xLDYgKzEsNyBAQA0KICMg
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWlu
aWdAZ21haWwuY29tPgogIyBDb3B5cmlnaHQgKEMpIDIwMDkgQ2FtZXJvbiBNY0Nvcm1hY2sgPGNh
bUBtY2MuaWQuYXU+CisjIFBvcnRpb25zIENvcHlyaWdodCBNaWNyb3NvZnQgT3BlbiBUZWNobm9s
b2dpZXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjQ3LDYgKzI0OCw3IEBADQogICAgICQoV2ViQ29yZSkvZG9tL05vdGF0aW9uLmlk
bCBcCiAgICAgJChXZWJDb3JlKS9kb20vT3ZlcmZsb3dFdmVudC5pZGwgXAogICAgICQoV2ViQ29y
ZSkvZG9tL1BhZ2VUcmFuc2l0aW9uRXZlbnQuaWRsIFwKKyAgICAkKFdlYkNvcmUpL2RvbS9Qb2lu
dGVyRXZlbnQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2RvbS9Qb3BTdGF0ZUV2ZW50LmlkbCBcCiAg
ICAgJChXZWJDb3JlKS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmlkbCBcCiAgICAgJChXZWJD
b3JlKS9kb20vUHJvZ3Jlc3NFdmVudC5pZGwgXApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxFbGVt
ZW50LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDEzNzU5NikNCisrKyBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpDQpAQCAtNCw2ICs0LDcgQEANCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTW90b3JvbGEg
TW9iaWxpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgTWlj
cm9zb2Z0IE9wZW4gVGVjaG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTMyNCw2ICszMjUsMTggQEANCiAgICAgICAgIHNldEF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnRvdWNoZW5kRXZlbnQsIGNyZWF0ZUF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIodGhpcywgbmFtZSwgdmFsdWUpKTsKICAgICB9IGVsc2UgaWYgKG5hbWUg
PT0gb250b3VjaGNhbmNlbEF0dHIpIHsKICAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5l
cihldmVudE5hbWVzKCkudG91Y2hjYW5jZWxFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0
ZW5lcih0aGlzLCBuYW1lLCB2YWx1ZSkpOworICAgIH0gZWxzZSBpZiAobmFtZSA9PSBvbnBvaW50
ZXJkb3duQXR0cikgeworICAgICAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFt
ZXMoKS5wb2ludGVyZG93bkV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRoaXMs
IG5hbWUsIHZhbHVlKSk7CisgICAgfSBlbHNlIGlmIChuYW1lID09IG9ucG9pbnRlcnVwQXR0cikg
eworICAgICAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5wb2ludGVy
dXBFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlzLCBuYW1lLCB2YWx1ZSkp
OworICAgIH0gZWxzZSBpZiAobmFtZSA9PSBvbnBvaW50ZXJtb3ZlQXR0cikgeworICAgICAgICBz
ZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5wb2ludGVybW92ZUV2ZW50LCBj
cmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRoaXMsIG5hbWUsIHZhbHVlKSk7CisgICAgfSBl
bHNlIGlmIChuYW1lID09IG9ucG9pbnRlcm92ZXJBdHRyKSB7CisgICAgICAgIHNldEF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnBvaW50ZXJvdmVyRXZlbnQsIGNyZWF0ZUF0dHJp
YnV0ZUV2ZW50TGlzdGVuZXIodGhpcywgbmFtZSwgdmFsdWUpKTsKKyAgICB9IGVsc2UgaWYgKG5h
bWUgPT0gb25wb2ludGVyb3V0QXR0cikgeworICAgICAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3Rl
bmVyKGV2ZW50TmFtZXMoKS5wb2ludGVyb3V0RXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIodGhpcywgbmFtZSwgdmFsdWUpKTsKKyAgICB9IGVsc2UgaWYgKG5hbWUgPT0gb25wb2lu
dGVyY2FuY2VsQXR0cikgeworICAgICAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50
TmFtZXMoKS5wb2ludGVyY2FuY2VsRXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
dGhpcywgbmFtZSwgdmFsdWUpKTsKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgfSBl
bHNlIGlmIChuYW1lID09IG9ud2Via2l0ZnVsbHNjcmVlbmNoYW5nZUF0dHIpIHsKICAgICAgICAg
c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkud2Via2l0ZnVsbHNjcmVlbmNo
YW5nZUV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRoaXMsIG5hbWUsIHZhbHVl
KSk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQotLS0gV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgkocmV2aXNpb24gMTM3NTk2
KQ0KKysrIFdlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4JKHdvcmtpbmcgY29weSkN
CkBAIC0yMjAsNiArMjIwLDEyIEBADQogb25wYXVzZQogb25wbGF5CiBvbnBsYXlpbmcKK29ucG9p
bnRlcmRvd24KK29ucG9pbnRlcnVwCitvbnBvaW50ZXJtb3ZlCitvbnBvaW50ZXJvdmVyCitvbnBv
aW50ZXJvdXQKK29ucG9pbnRlcmNhbmNlbAogb25wb3BzdGF0ZQogb25wcm9ncmVzcwogb25yYXRl
Y2hhbmdlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189248</attachid>
            <date>2013-02-19 22:43:07 -0800</date>
            <delta_ts>2013-03-21 17:41:01 -0700</delta_ts>
            <desc>Updated Pointer Events implementation to live entirely in WebCore (as opposed to creeping into platform layer)</desc>
            <filename>pointer-events-20130219.patch</filename>
            <type>text/plain</type>
            <size>59848</size>
            <attacher name="Scott Blomquist">sblom</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2Uv
V2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDM3NzIyNTIuLmUwZTdlMmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dl
YkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMSw2ICsxLDcgQEAKICMgQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICMgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29t
PgogIyBDb3B5cmlnaHQgKEMpIDIwMDkgQ2FtZXJvbiBNY0Nvcm1hY2sgPGNhbUBtY2MuaWQuYXU+
CisjIFBvcnRpb25zIENvcHlyaWdodCBNaWNyb3NvZnQgT3BlbiBUZWNobm9sb2dpZXMsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYw
LDYgKzI2MSw3IEBAIEJJTkRJTkdfSURMUyA9IFwKICAgICAkKFdlYkNvcmUpL2RvbS9Ob3RhdGlv
bi5pZGwgXAogICAgICQoV2ViQ29yZSkvZG9tL092ZXJmbG93RXZlbnQuaWRsIFwKICAgICAkKFdl
YkNvcmUpL2RvbS9QYWdlVHJhbnNpdGlvbkV2ZW50LmlkbCBcCisgICAgJChXZWJDb3JlKS9kb20v
UG9pbnRlckV2ZW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9kb20vUG9wU3RhdGVFdmVudC5pZGwg
XAogICAgICQoV2ViQ29yZSkvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5pZGwgXAogICAgICQo
V2ViQ29yZSkvZG9tL1Byb2dyZXNzRXZlbnQuaWRsIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0Rlcml2ZWRTb3VyY2VzLnByaSBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnBy
aQppbmRleCBkMTFiZTRkLi5lODkwMjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9EZXJp
dmVkU291cmNlcy5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCkBA
IC0yNjcsNiArMjY3LDcgQEAgSURMX0JJTkRJTkdTICs9IFwKICAgICAkJFBXRC9kb20vTm90YXRp
b24uaWRsIFwKICAgICAkJFBXRC9kb20vT3ZlcmZsb3dFdmVudC5pZGwgXAogICAgICQkUFdEL2Rv
bS9QYWdlVHJhbnNpdGlvbkV2ZW50LmlkbCBcCisgICAgJCRQV0QvZG9tL1BvaW50ZXJFdmVudC5p
ZGwgXAogICAgICQkUFdEL2RvbS9Qb3BTdGF0ZUV2ZW50LmlkbCBcCiAgICAgJCRQV0QvZG9tL1By
b2Nlc3NpbmdJbnN0cnVjdGlvbi5pZGwgXAogICAgICQkUFdEL2RvbS9Qcm9ncmVzc0V2ZW50Lmlk
bCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA2NzE5NmQ0Li5lZmQ5NzYyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTE0MDcsNiArMTQwNyw3IEBAIGRvbV9i
aW5kaW5nX2lkbHMgKz0gXAogCSQoV2ViQ29yZSkvZG9tL05vdGF0aW9uLmlkbCBcCiAJJChXZWJD
b3JlKS9kb20vT3ZlcmZsb3dFdmVudC5pZGwgXAogCSQoV2ViQ29yZSkvZG9tL1BhZ2VUcmFuc2l0
aW9uRXZlbnQuaWRsIFwKKwkkKFdlYkNvcmUpL2RvbS9Qb2ludGVyRXZlbnQuaWRsIFwKIAkkKFdl
YkNvcmUpL2RvbS9Qb3BTdGF0ZUV2ZW50LmlkbCBcCiAJJChXZWJDb3JlKS9kb20vUHJvY2Vzc2lu
Z0luc3RydWN0aW9uLmlkbCBcCiAJJChXZWJDb3JlKS9kb20vUHJvZ3Jlc3NFdmVudC5pZGwgXApA
QCAtNTkyOSw2ICs1OTMwLDcgQEAgd2ViY29yZV9wbGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtUG9pbnRlckV2ZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtU2NyZWVuLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2ll
cy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5oIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQppbmRleCA3ODhmYjM4Li45YTQwNThlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBA
IC0yNDAsNiArMjQwLDcgQEAKICAgICAgICAgICAgICdkb20vTm90YXRpb24uaWRsJywKICAgICAg
ICAgICAgICdkb20vT3ZlcmZsb3dFdmVudC5pZGwnLAogICAgICAgICAgICAgJ2RvbS9QYWdlVHJh
bnNpdGlvbkV2ZW50LmlkbCcsCisgICAgICAgICAgICAnZG9tL1BvaW50ZXJFdmVudC5pZGwnLAog
ICAgICAgICAgICAgJ2RvbS9Qb3BTdGF0ZUV2ZW50LmlkbCcsCiAgICAgICAgICAgICAnZG9tL1By
b2Nlc3NpbmdJbnN0cnVjdGlvbi5pZGwnLAogICAgICAgICAgICAgJ2RvbS9Qcm9ncmVzc0V2ZW50
LmlkbCcsCkBAIC0yOTE0LDYgKzI5MTUsNyBAQAogICAgICAgICAgICAgJ2RvbS9QYWdlVHJhbnNp
dGlvbkV2ZW50LmNwcCcsCiAgICAgICAgICAgICAnZG9tL1BhZ2VUcmFuc2l0aW9uRXZlbnQuaCcs
CiAgICAgICAgICAgICAnZG9tL1BlbmRpbmdTY3JpcHQuY3BwJywKKyAgICAgICAgICAgICdkb20v
UG9pbnRlckV2ZW50LmNwcCcsCiAgICAgICAgICAgICAnZG9tL1BvcFN0YXRlRXZlbnQuY3BwJywK
ICAgICAgICAgICAgICdkb20vUG9wU3RhdGVFdmVudC5oJywKICAgICAgICAgICAgICdkb20vUG9z
aXRpb24uY3BwJywKQEAgLTM1NTksNiArMzU2MSw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
UGxhdGZvcm1JbnN0cnVtZW50YXRpb24uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vUGxhdGZv
cm1NZW1vcnlJbnN0cnVtZW50YXRpb24uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0
Zm9ybU1lbW9yeUluc3RydW1lbnRhdGlvbi5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0
Zm9ybVBvaW50ZXJFdmVudC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtUG9p
bnRlckV2ZW50LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtVG91Y2hFdmVudC5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9QbGF0Zm9ybVRvdWNoUG9pbnQuaCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CmluZGV4IDEyNjQzOGQuLmY5ZmFlMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC03LDYgKzcs
NyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIFBvcnRpb25zIENvcHlyaWdodCBNaWNyb3NvZnQgT3BlbiBUZWNobm9sb2dpZXMsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjg5LDcgKzI5MCwx
NiBAQCBjbGFzcyBEb2N1bWVudCA6IHB1YmxpYyBDb250YWluZXJOb2RlLCBwdWJsaWMgVHJlZVNj
b3BlLCBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQwogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRf
TElTVEVORVIoc2Nyb2xsKTsKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHNl
bGVjdCk7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihzdWJtaXQpOwotCisj
aWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQorICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElT
VEVORVIod2Via2l0cG9pbnRlcmRvd24pOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElT
VEVORVIod2Via2l0cG9pbnRlcnVwKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RF
TkVSKHdlYmtpdHBvaW50ZXJjYW5jZWwpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElT
VEVORVIod2Via2l0cG9pbnRlcm1vdmUpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElT
VEVORVIod2Via2l0cG9pbnRlcm92ZXIpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElT
VEVORVIod2Via2l0cG9pbnRlcm91dCk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNU
RU5FUih3ZWJraXRnb3Rwb2ludGVyY2FwdHVyZSk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVO
VF9MSVNURU5FUih3ZWJraXRsb3N0cG9pbnRlcmNhcHR1cmUpOworI2VuZGlmCiAgICAgREVGSU5F
X0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihibHVyKTsKICAgICBERUZJTkVfQVRUUklCVVRFX0VW
RU5UX0xJU1RFTkVSKGVycm9yKTsKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVS
KGZvY3VzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCmluZGV4IDRkNGU5ZmIuLmU5ODAyNDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmlkbApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgor
ICogUG9ydGlvbnMgQ29weXJpZ2h0IE1pY3Jvc29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMTgsNiArMzE5LDE2
IEBACiAgICAgLy8gYXR0cmlidXRlIFtOb3RFbnVtZXJhYmxlXSBFdmVudExpc3RlbmVyIG9udm9s
dW1lY2hhbmdlOwogICAgIC8vIGF0dHJpYnV0ZSBbTm90RW51bWVyYWJsZV0gRXZlbnRMaXN0ZW5l
ciBvbndhaXRpbmc7CiAKKyAgICAvLyBQb2ludGVyIGV2ZW50cworICAgIFtOb3RFbnVtZXJhYmxl
XSBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbndlYmtpdHBvaW50ZXJkb3duOworICAgIFtOb3RF
bnVtZXJhYmxlXSBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbndlYmtpdHBvaW50ZXJ1cDsKKyAg
ICBbTm90RW51bWVyYWJsZV0gYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb253ZWJraXRwb2ludGVy
Y2FuY2VsOworICAgIFtOb3RFbnVtZXJhYmxlXSBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbndl
YmtpdHBvaW50ZXJtb3ZlOworICAgIFtOb3RFbnVtZXJhYmxlXSBhdHRyaWJ1dGUgRXZlbnRMaXN0
ZW5lciBvbndlYmtpdHBvaW50ZXJvdmVyOworICAgIFtOb3RFbnVtZXJhYmxlXSBhdHRyaWJ1dGUg
RXZlbnRMaXN0ZW5lciBvbndlYmtpdHBvaW50ZXJvdXQ7CisgICAgW05vdEVudW1lcmFibGVdIGF0
dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ud2Via2l0Z290cG9pbnRlcmNhcHR1cmU7CisgICAgW05v
dEVudW1lcmFibGVdIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ud2Via2l0bG9zdHBvaW50ZXJj
YXB0dXJlOworCiAgICAgLy8gV2ViS2l0IGV4dGVuc2lvbnMKICAgICBbTm90RW51bWVyYWJsZV0g
YXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25iZWZvcmVjdXQ7CiAgICAgW05vdEVudW1lcmFibGVd
IGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uY3V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKaW5kZXggODY4
YjFlZC4uN2VhZGEwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCkBAIC00LDYgKzQsNyBAQAogICogICAg
ICAgICAgIChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgICAgICAgICAg
KEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0
IE1pY3Jvc29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMDAsNiArMjAxLDE2IEBAIGNsYXNzIEVsZW1lbnQgOiBw
dWJsaWMgQ29udGFpbmVyTm9kZSB7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5F
UihzY3JvbGwpOwogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoc2VsZWN0KTsK
ICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHN1Ym1pdCk7CisjaWYgRU5BQkxF
KFBPSU5URVJfRVZFTlRTKQorICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIod2Vi
a2l0cG9pbnRlcmRvd24pOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIod2Vi
a2l0cG9pbnRlcnVwKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHdlYmtp
dHBvaW50ZXJjYW5jZWwpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIod2Vi
a2l0cG9pbnRlcm1vdmUpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIod2Vi
a2l0cG9pbnRlcm92ZXIpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIod2Vi
a2l0cG9pbnRlcm91dCk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUih3ZWJr
aXRnb3Rwb2ludGVyY2FwdHVyZSk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5F
Uih3ZWJraXRsb3N0cG9pbnRlcmNhcHR1cmUpOworI2VuZGlmCiAKICAgICAvLyBUaGVzZSBmb3Vy
IGF0dHJpYnV0ZSBldmVudCBoYW5kbGVyIGF0dHJpYnV0ZXMgYXJlIG92ZXJyaWRkZW4gYnkgSFRN
TEJvZHlFbGVtZW50CiAgICAgLy8gYW5kIEhUTUxGcmFtZVNldEVsZW1lbnQgdG8gZm9yd2FyZCB0
byB0aGUgRE9NV2luZG93LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
aWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaWRsCmluZGV4IDg1YWMxZGYuLjYxOWYw
YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5pZGwKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNv
bT4KKyAqIFBvcnRpb25zIENvcHlyaWdodCBNaWNyb3NvZnQgT3BlbiBUZWNobm9sb2dpZXMsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjA5LDYgKzIx
MCwxNiBAQAogICAgIC8vIGF0dHJpYnV0ZSBbTm90RW51bWVyYWJsZV0gRXZlbnRMaXN0ZW5lciBv
bnZvbHVtZWNoYW5nZTsKICAgICAvLyBhdHRyaWJ1dGUgW05vdEVudW1lcmFibGVdIEV2ZW50TGlz
dGVuZXIgb253YWl0aW5nOwogCisgICAgLy8gUG9pbnRlciBldmVudHMKKyAgICBbTm90RW51bWVy
YWJsZV0gYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb253ZWJraXRwb2ludGVyZG93bjsKKyAgICBb
Tm90RW51bWVyYWJsZV0gYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb253ZWJraXRwb2ludGVydXA7
CisgICAgW05vdEVudW1lcmFibGVdIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ud2Via2l0cG9p
bnRlcmNhbmNlbDsKKyAgICBbTm90RW51bWVyYWJsZV0gYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIg
b253ZWJraXRwb2ludGVybW92ZTsKKyAgICBbTm90RW51bWVyYWJsZV0gYXR0cmlidXRlIEV2ZW50
TGlzdGVuZXIgb253ZWJraXRwb2ludGVyb3ZlcjsKKyAgICBbTm90RW51bWVyYWJsZV0gYXR0cmli
dXRlIEV2ZW50TGlzdGVuZXIgb253ZWJraXRwb2ludGVyb3V0OworICAgIFtOb3RFbnVtZXJhYmxl
XSBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbndlYmtpdGdvdHBvaW50ZXJjYXB0dXJlOworICAg
IFtOb3RFbnVtZXJhYmxlXSBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbndlYmtpdGxvc3Rwb2lu
dGVyY2FwdHVyZTsKKwogICAgIC8vIFdlYktpdCBleHRlbnNpb25zCiAgICAgW05vdEVudW1lcmFi
bGVdIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uYmVmb3JlY3V0OwogICAgIFtOb3RFbnVtZXJh
YmxlXSBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmN1dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudE5hbWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5o
CmluZGV4IDIyYTdiMzIuLjBkMWQ1ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudE5hbWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaApAQCAtMSw2
ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEpvbiBTaGllciAoanNoaWVy
QGlhc3RhdGUuZWR1KQorICogUG9ydGlvbnMgQ29weXJpZ2h0IE1pY3Jvc29mdCBPcGVuIFRlY2hu
b2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yNTIsNiArMjUzLDE1IEBACiAgICAgbWFjcm8oYXV0b2NvbXBsZXRlKSBcCiAgICAgbWFjcm8o
YXV0b2NvbXBsZXRlZXJyb3IpIFwKICAgICBcCisgICAgbWFjcm8od2Via2l0cG9pbnRlcmRvd24p
IFwKKyAgICBtYWNybyh3ZWJraXRwb2ludGVydXApIFwKKyAgICBtYWNybyh3ZWJraXRwb2ludGVy
Y2FuY2VsKSBcCisgICAgbWFjcm8od2Via2l0cG9pbnRlcm1vdmUpIFwKKyAgICBtYWNybyh3ZWJr
aXRwb2ludGVyb3ZlcikgXAorICAgIG1hY3JvKHdlYmtpdHBvaW50ZXJvdXQpIFwKKyAgICBtYWNy
byh3ZWJraXRnb3Rwb2ludGVyY2FwdHVyZSkgXAorICAgIG1hY3JvKHdlYmtpdGxvc3Rwb2ludGVy
Y2FwdHVyZSkgXAorICAgIFwKICAgICBtYWNybyh3ZWJraXRwcmVyZW5kZXJzdGFydCkgXAogICAg
IG1hY3JvKHdlYmtpdHByZXJlbmRlcnN0b3ApIFwKICAgICBtYWNybyh3ZWJraXRwcmVyZW5kZXJs
b2FkKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5pbiBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmluCmluZGV4IGMwNGIwMjUuLjVmOGM0ZTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmluCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudE5hbWVzLmluCkBAIC0xOSw2ICsxOSw4IEBAIE11dGF0aW9uRXZlbnQK
IE11dGF0aW9uRXZlbnRzIGludGVyZmFjZU5hbWU9TXV0YXRpb25FdmVudAogT3ZlcmZsb3dFdmVu
dAogUGFnZVRyYW5zaXRpb25FdmVudAorUG9pbnRlckV2ZW50CitQb2ludGVyRXZlbnRzIGludGVy
ZmFjZU5hbWU9UG9pbnRlckV2ZW50CiBQb3BTdGF0ZUV2ZW50CiBQcm9ncmVzc0V2ZW50CiBUZXh0
RXZlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCBlN2M0NjUwLi5hMzU3ZGExIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCkBAIC01LDYgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKICAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogUG9y
dGlvbnMgQ29weXJpZ2h0IE1pY3Jvc29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMjYsNiArMTI3LDEwIEBACiAj
aW5jbHVkZSAiR2VzdHVyZUV2ZW50LmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShQT0lOVEVSX0VW
RU5UUykKKyNpbmNsdWRlICJQb2ludGVyRXZlbnQuaCIKKyNlbmRpZgorCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUikKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjZW5kaWYKQEAgLTIz
ODgsNiArMjM5MywxNCBAQCBib29sIE5vZGU6OmRpc3BhdGNoR2VzdHVyZUV2ZW50KGNvbnN0IFBs
YXRmb3JtR2VzdHVyZUV2ZW50JiBldmVudCkKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFBPSU5U
RVJfRVZFTlRTKQorYm9vbCBOb2RlOjpkaXNwYXRjaFBvaW50ZXJFdmVudChjb25zdCBQbGF0Zm9y
bVBvaW50ZXJFdmVudCYgZSwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsCisgICAgaW50
IGRldGFpbCwgTm9kZSogcmVsYXRlZFRhcmdldCkKK3sKKyAgICByZXR1cm4gRXZlbnREaXNwYXRj
aGVyOjpkaXNwYXRjaEV2ZW50KHRoaXMsIFBvaW50ZXJFdmVudERpc3BhdGNoTWVkaWF0b3I6OmNy
ZWF0ZShQb2ludGVyRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIGRvY3VtZW50KCktPmRlZmF1bHRW
aWV3KCksIGUsIGRldGFpbCwgcmVsYXRlZFRhcmdldCkpKTsKK30KKyNlbmRpZgorCiB2b2lkIE5v
ZGU6OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soRXZlbnQqIHVuZGVybHlpbmdFdmVudCwgU2ltdWxh
dGVkQ2xpY2tNb3VzZUV2ZW50T3B0aW9ucyBldmVudE9wdGlvbnMsIFNpbXVsYXRlZENsaWNrVmlz
dWFsT3B0aW9ucyB2aXN1YWxPcHRpb25zKQogewogICAgIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0
Y2hTaW11bGF0ZWRDbGljayh0aGlzLCB1bmRlcmx5aW5nRXZlbnQsIGV2ZW50T3B0aW9ucywgdmlz
dWFsT3B0aW9ucyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCBhODM2YmYwLi40NzE2MjMzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmgKQEAgLTQsNiArNCw3IEBACiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyICht
dWVsbGVyQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBQb3J0aW9ucyBDb3B5
cmlnaHQgTWljcm9zb2Z0IE9wZW4gVGVjaG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTc2LDYgKzc3LDcgQEAKIGNsYXNzIE5vZGVSZW5k
ZXJpbmdDb250ZXh0OwogY2xhc3MgUGxhdGZvcm1LZXlib2FyZEV2ZW50OwogY2xhc3MgUGxhdGZv
cm1Nb3VzZUV2ZW50OworY2xhc3MgUGxhdGZvcm1Qb2ludGVyRXZlbnQ7CiBjbGFzcyBQbGF0Zm9y
bVdoZWVsRXZlbnQ7CiBjbGFzcyBRdWFsaWZpZWROYW1lOwogY2xhc3MgUmFkaW9Ob2RlTGlzdDsK
QEAgLTYzNyw2ICs2MzksMTAgQEAgY2xhc3MgTm9kZSA6IHB1YmxpYyBFdmVudFRhcmdldCwgcHVi
bGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIFRyZWVTaGFyZWQ8Tm9kZT4KICNpZiBFTkFCTEUo
R0VTVFVSRV9FVkVOVFMpCiAgICAgYm9vbCBkaXNwYXRjaEdlc3R1cmVFdmVudChjb25zdCBQbGF0
Zm9ybUdlc3R1cmVFdmVudCYpOwogI2VuZGlmCisjaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQor
ICAgIGJvb2wgZGlzcGF0Y2hQb2ludGVyRXZlbnQoY29uc3QgUGxhdGZvcm1Qb2ludGVyRXZlbnQm
LCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgaW50IGNsaWNrQ291bnQgPSAwLCBOb2Rl
KiByZWxhdGVkVGFyZ2V0ID0gMCk7CisjZW5kaWYKKwogICAgIHZvaWQgZGlzcGF0Y2hTaW11bGF0
ZWRDbGljayhFdmVudCogdW5kZXJseWluZ0V2ZW50LCBTaW11bGF0ZWRDbGlja01vdXNlRXZlbnRP
cHRpb25zID0gU2VuZE5vRXZlbnRzLCBTaW11bGF0ZWRDbGlja1Zpc3VhbE9wdGlvbnMgPSBTaG93
UHJlc3NlZExvb2spOwogICAgIGJvb2wgZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQoY29uc3QgU3Ry
aW5nJiBzb3VyY2VVUkwpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9pbnRl
ckV2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb2ludGVyRXZlbnQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYjc5ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vUG9pbnRlckV2ZW50LmNwcApAQCAtMCwwICsxLDI0NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgTWljcm9zb2Z0IE9w
ZW4gVGVjaG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2luY2x1ZGUg
IlBvaW50ZXJFdmVudC5oIgorCisjaW5jbHVkZSAiRXZlbnREaXNwYXRjaGVyLmgiCisjaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCisjaW5jbHVkZSAiSFRNTElGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVBv
aW50ZXJFdmVudC5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gUG9pbnRlckV2ZW50
IGlzIGJhc2VkIG9uIE1vdXNlRXZlbnQKKy8vCitQYXNzUmVmUHRyPFBvaW50ZXJFdmVudD4gUG9p
bnRlckV2ZW50OjpjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQ
dHI8QWJzdHJhY3RWaWV3PiB2aWV3LCBjb25zdCBQbGF0Zm9ybVBvaW50ZXJFdmVudCYgZXZlbnQs
IGludCBkZXRhaWwsIFBhc3NSZWZQdHI8Tm9kZT4gcmVsYXRlZFRhcmdldCkKK3sKKyAgICBib29s
IGlzQ2FuY2VsYWJsZSA9IGV2ZW50VHlwZSAhPSBldmVudE5hbWVzKCkud2Via2l0cG9pbnRlcm1v
dmVFdmVudDsKKworICAgIHJldHVybiBQb2ludGVyRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIHRy
dWUsIGlzQ2FuY2VsYWJsZSwgdmlldywKKyAgICAgICAgZGV0YWlsLCBldmVudC5nbG9iYWxQb3Np
dGlvbigpLngoKSwgZXZlbnQuZ2xvYmFsUG9zaXRpb24oKS55KCksIGV2ZW50LnBvc2l0aW9uKCku
eCgpLCBldmVudC5wb3NpdGlvbigpLnkoKSwKKyNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQorICAg
ICAgICBldmVudC5tb3ZlbWVudERlbHRhKCkueCgpLCBldmVudC5tb3ZlbWVudERlbHRhKCkueSgp
LAorI2VuZGlmCisgICAgICAgIGV2ZW50LmN0cmxLZXkoKSwgCisgICAgICAgIGV2ZW50LmFsdEtl
eSgpLCAKKyAgICAgICAgZXZlbnQuc2hpZnRLZXkoKSwgCisgICAgICAgIGV2ZW50Lm1ldGFLZXko
KSwgCisgICAgICAgIGV2ZW50LmJ1dHRvbigpLAorICAgICAgICByZWxhdGVkVGFyZ2V0LCAKKyAg
ICAgICAgMCwgICAgICAgICAgICAgICAgICAvLyBQYXNzUmVmUHRyPENsaXBib2FyZD4gY2xpcGJv
YXJkCisgICAgICAgIGZhbHNlLCAgICAgICAgICAgICAgLy8gYm9vbCBpc1NpbXVsYXRlZAorICAg
ICAgICBldmVudC5nZXRQb2ludGVySW5mbygpKTsKK30KKworUG9pbnRlckV2ZW50OjpQb2ludGVy
RXZlbnQoKSA6IE1vdXNlRXZlbnQoKQoreworfQorCitQb2ludGVyRXZlbnQ6OlBvaW50ZXJFdmVu
dCgKKwkJCWNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgCisJCQlib29sIGNhbkJ1YmJsZSwgCisJ
CQlib29sIGNhbmNlbGFibGUsIAorCQkJUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsCisg
ICAgICAgICAgICBpbnQgZGV0YWlsLCAKKwkJCWludCBzY3JlZW5YLCAKKwkJCWludCBzY3JlZW5Z
LCAKKwkJCWludCBwYWdlWCwgCisJCQlpbnQgcGFnZVksCisjaWYgRU5BQkxFKFBPSU5URVJfTE9D
SykKKyAgICAgICAgICAgIGludCBtb3ZlbWVudFgsIAorCQkJaW50IG1vdmVtZW50WSwKKyNlbmRp
ZgorICAgICAgICAgICAgYm9vbCBjdHJsS2V5LCAKKwkJCWJvb2wgYWx0S2V5LCAKKwkJCWJvb2wg
c2hpZnRLZXksIAorCQkJYm9vbCBtZXRhS2V5LCAKKwkJCXVuc2lnbmVkIHNob3J0IGJ1dHRvbiwK
KyAgICAgICAgICAgIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHJlbGF0ZWRUYXJnZXQsIAorCQkJ
UGFzc1JlZlB0cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCwgCisJCQlib29sIGlzU2ltdWxhdGVkLAor
ICAgICAgICAgICAgY29uc3QgUG9pbnRlckluZm8mIGV2ZW50SW5mbworCSkKKwk6IE1vdXNlRXZl
bnQoCisJCQl0eXBlLCAKKwkJCWNhbkJ1YmJsZSwgCisJCQljYW5jZWxhYmxlLCAKKwkJCXZpZXcs
CisgICAgICAgICAgICBkZXRhaWwsIAorCQkJc2NyZWVuWCwgCisJCQlzY3JlZW5ZLCAKKwkJCXBh
Z2VYLCAKKwkJCXBhZ2VZLAorI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCisgICAgICAgICAgICBt
b3ZlbWVudFgsIAorCQkJbW92ZW1lbnRZLAorI2VuZGlmCisgICAgICAgICAgICBjdHJsS2V5LCAK
KwkJCWFsdEtleSwgCisJCQlzaGlmdEtleSwgCisJCQltZXRhS2V5LCAKKwkJCWJ1dHRvbiwKKyAg
ICAgICAgICAgIHJlbGF0ZWRUYXJnZXQsIAorCQkJY2xpcGJvYXJkLCAKKwkJCWlzU2ltdWxhdGVk
CisJKSwKKyAgICBtX3BvaW50ZXJJZChldmVudEluZm8ubV9wb2ludGVySWQpLAorICAgIG1fd2lk
dGgoZXZlbnRJbmZvLm1fd2lkdGgpLAorICAgIG1faGVpZ2h0KGV2ZW50SW5mby5tX2hlaWdodCks
CisgICAgbV9wcmVzc3VyZShldmVudEluZm8ubV9wcmVzc3VyZSksCisgICAgbV90aWx0WChldmVu
dEluZm8ubV90aWx0WCksCisgICAgbV90aWx0WShldmVudEluZm8ubV90aWx0WSksCisgICAgbV9w
b2ludGVyVHlwZShldmVudEluZm8ubV9wb2ludGVyVHlwZSksCisgICAgbV9wcmltYXJ5UG9pbnRl
cihldmVudEluZm8ubV9wcmltYXJ5UG9pbnRlcikKK3sKK30KKworUG9pbnRlckV2ZW50Ojp+UG9p
bnRlckV2ZW50KCkKK3sKK30KKwordm9pZCBQb2ludGVyRXZlbnQ6OmluaXRQb2ludGVyRXZlbnQo
Y29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxl
LCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGRldGFpbCwgaW50IHNjcmVlblgsIGludCBzY3JlZW5ZLCBpbnQgY2xpZW50
WCwgaW50IGNsaWVudFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3Ry
bEtleSwgYm9vbCBhbHRLZXksIGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYnV0dG9uLCBQYXNzUmVmUHRy
PEV2ZW50VGFyZ2V0PiByZWxhdGVkVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb25nIHBvaW50ZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9u
ZyB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBoZWlnaHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHByZXNzdXJlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRpbHRYLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb25nIHRpbHRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmIHBvaW50ZXJUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGlzUHJpbWFyeSkKK3sKKyAgICBNb3VzZUV2ZW50Ojppbml0TW91c2VFdmVudCh0eXBl
LCBjYW5CdWJibGUsIGNhbmNlbGFibGUsIHZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRldGFpbCwgc2NyZWVuWCwgc2NyZWVuWSwgY2xpZW50WCwgY2xpZW50WSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RybEtleSwgYWx0S2V5LCBzaGlmdEtleSwgbWV0
YUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLCByZWxhdGVkVGFy
Z2V0KTsKKyAgICBtX3BvaW50ZXJJZCA9IHBvaW50ZXJJZDsKKyAgICBtX3dpZHRoID0gd2lkdGg7
CisgICAgbV9oZWlnaHQgPSBoZWlnaHQ7CisgICAgbV9wcmVzc3VyZSA9IHByZXNzdXJlOworICAg
IG1fdGlsdFggPSAgdGlsdFg7CisgICAgbV90aWx0WSA9IHRpbHRZOworICAgIG1fcG9pbnRlclR5
cGUgPSBDb252ZXJ0UG9pbnRlclR5cGVOYW1lVG9JbnQocG9pbnRlclR5cGUpOworICAgIG1fcHJp
bWFyeVBvaW50ZXIgPSBpc1ByaW1hcnk7Cit9CisKKworaW50IFBvaW50ZXJFdmVudDo6Q29udmVy
dFBvaW50ZXJUeXBlTmFtZVRvSW50KGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobmFt
ZSA9PSAibW91c2UiKSB7CisgICAgICAgIHJldHVybiBQb2ludGVyVHlwZU1vdXNlOworICAgIH0K
KyAgICBpZiAobmFtZSA9PSAicGVuIikgeworICAgICAgICByZXR1cm4gUG9pbnRlclR5cGVQZW47
CisgICAgfQorICAgIGlmIChuYW1lID09ICJ0b3VjaCIpIHsKKyAgICAgICAgcmV0dXJuIFBvaW50
ZXJUeXBlVG91Y2g7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biAwOworfQorCitjb25zdCBBdG9taWNTdHJpbmcgUG9pbnRlckV2ZW50OjpDb252ZXJ0UG9pbnRl
clR5cGVJbnRUb1N0cmluZyhpbnQgcG9pbnRlclR5cGUpIGNvbnN0Cit7CisgICAgc3dpdGNoKHBv
aW50ZXJUeXBlKQorICAgIHsKKyAgICBjYXNlIFBvaW50ZXJUeXBlTW91c2U6CisgICAgICAgIHJl
dHVybiAibW91c2UiOworICAgIGNhc2UgUG9pbnRlclR5cGVQZW46CisgICAgICAgIHJldHVybiAi
cGVuIjsKKyAgICBjYXNlIFBvaW50ZXJUeXBlVG91Y2g6CisgICAgICAgIHJldHVybiAidG91Y2gi
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAg
ICByZXR1cm4gIiI7Cit9CisKKy8vIEZJWE1FOiBGaXggcG9zaXRpb25pbmcuIGUuZy4gV2UgbmVl
ZCB0byBjb25zaWRlciBib3JkZXIvcGFkZGluZy4KKy8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05MzY5NgoraW5saW5lIHN0YXRpYyBpbnQgYWRqdXN0ZWRDbGllbnRY
KGludCBpbm5lckNsaWVudFgsIEhUTUxJRnJhbWVFbGVtZW50KiBpZnJhbWUsIEZyYW1lVmlldyog
ZnJhbWVWaWV3KQoreworICAgIHJldHVybiBpZnJhbWUtPm9mZnNldExlZnQoKSAtIGZyYW1lVmll
dy0+c2Nyb2xsWCgpICsgaW5uZXJDbGllbnRYOworfQorCitpbmxpbmUgc3RhdGljIGludCBhZGp1
c3RlZENsaWVudFkoaW50IGlubmVyQ2xpZW50WSwgSFRNTElGcmFtZUVsZW1lbnQqIGlmcmFtZSwg
RnJhbWVWaWV3KiBmcmFtZVZpZXcpCit7CisgICAgcmV0dXJuIGlmcmFtZS0+b2Zmc2V0VG9wKCkg
LSBmcmFtZVZpZXctPnNjcm9sbFkoKSArIGlubmVyQ2xpZW50WTsKK30KKworUGFzc1JlZlB0cjxQ
b2ludGVyRXZlbnREaXNwYXRjaE1lZGlhdG9yPiBQb2ludGVyRXZlbnREaXNwYXRjaE1lZGlhdG9y
OjpjcmVhdGUoUGFzc1JlZlB0cjxQb2ludGVyRXZlbnQ+IHBvaW50ZXJFdmVudCkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFBvaW50ZXJFdmVudERpc3BhdGNoTWVkaWF0b3IocG9pbnRlckV2
ZW50KSk7Cit9CisKK1BvaW50ZXJFdmVudERpc3BhdGNoTWVkaWF0b3I6OlBvaW50ZXJFdmVudERp
c3BhdGNoTWVkaWF0b3IoUGFzc1JlZlB0cjxQb2ludGVyRXZlbnQ+IHBvaW50ZXJFdmVudCkKKyAg
ICA6IEV2ZW50RGlzcGF0Y2hNZWRpYXRvcihwb2ludGVyRXZlbnQpCit7Cit9CisKK1BvaW50ZXJF
dmVudCogUG9pbnRlckV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZXZlbnQoKSBjb25zdAoreworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxQb2ludGVyRXZlbnQqPihFdmVudERpc3BhdGNoTWVkaWF0b3I6
OmV2ZW50KCkpOworfQorCitib29sIFBvaW50ZXJFdmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3Bh
dGNoRXZlbnQoRXZlbnREaXNwYXRjaGVyKiBkaXNwYXRjaGVyKSBjb25zdAoreworICAgIGlmIChk
aXNwYXRjaGVyLT5ub2RlKCktPmRpc2FibGVkKCkpIC8vIERvbid0IGV2ZW4gc2VuZCBET00gZXZl
bnRzIGZvciBkaXNhYmxlZCBjb250cm9scy4uCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGV2ZW50KCktPnR5cGUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
U2hvdWxkbid0IGhhcHBlbi4KKworICAgIGlmICgoZXZlbnQoKS0+dHlwZSgpICE9IGV2ZW50TmFt
ZXMoKS53ZWJraXRwb2ludGVyb3ZlckV2ZW50KSAgJiYKKyAgICAgICAoZXZlbnQoKS0+dHlwZSgp
ICE9IGV2ZW50TmFtZXMoKS53ZWJraXRwb2ludGVyb3V0RXZlbnQpKSAKKyAgICB7CisgICAgICAg
IEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0ID0gZXZlbnQoKS0+cmVsYXRlZFRhcmdldCgpOwor
ICAgICAgICBkaXNwYXRjaGVyLT5hZGp1c3RSZWxhdGVkVGFyZ2V0KGV2ZW50KCksIHJlbGF0ZWRU
YXJnZXQpOworICAgIH0KKworICAgIGRpc3BhdGNoZXItPmRpc3BhdGNoRXZlbnQoZXZlbnQoKSk7
CisgICAgYm9vbCBzd2FsbG93RXZlbnQgPSBldmVudCgpLT5kZWZhdWx0SGFuZGxlZCgpIHx8IGV2
ZW50KCktPmRlZmF1bHRQcmV2ZW50ZWQoKTsKKworICAgIGlmIChldmVudCgpLT50eXBlKCkgIT0g
ZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgfHwgZXZlbnQoKS0+ZGV0YWlsKCkgIT0gMikKKyAgICAg
ICAgcmV0dXJuIHN3YWxsb3dFdmVudDsKKyAgICByZXR1cm4gc3dhbGxvd0V2ZW50OworfQorCitj
b25zdCBBdG9taWNTdHJpbmcmIFBvaW50ZXJFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JQb2ludGVyRXZlbnQ7Cit9CisK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L1BvaW50ZXJFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1BvaW50ZXJFdmVudC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYmVjNjAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9pbnRlckV2ZW50LmgKQEAgLTAsMCArMSwxNTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IE1pY3Jvc29mdCBP
cGVuIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFCisgKi8K
KworI2lmbmRlZiBQb2ludGVyRXZlbnRfaAorI2RlZmluZSBQb2ludGVyRXZlbnRfaAorCisjaW5j
bHVkZSAiQ2xpcGJvYXJkLmgiCisjaW5jbHVkZSAiRXZlbnREaXNwYXRjaE1lZGlhdG9yLmgiCisj
aW5jbHVkZSAiTW91c2VFdmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEV2
ZW50RGlzcGF0Y2hlcjsKK3N0cnVjdCBQb2ludGVySW5mbzsKK2NsYXNzIFBsYXRmb3JtUG9pbnRl
ckV2ZW50OworCisgICAgY2xhc3MgUG9pbnRlckV2ZW50IDogcHVibGljIE1vdXNlRXZlbnQgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UG9pbnRlckV2ZW50PiBjcmVh
dGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBvaW50ZXJF
dmVudCk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UG9pbnRlckV2ZW50
PiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCAKKyAgICAgICAgICAgIGJvb2wgY2Fu
QnViYmxlLCAKKyAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZSwgCisgICAgICAgICAgICBQYXNz
UmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywKKyAgICAgICAgICAgIGludCBkZXRhaWwsIAorICAg
ICAgICAgICAgaW50IHNjcmVlblgsIAorICAgICAgICAgICAgaW50IHNjcmVlblksIAorICAgICAg
ICAgICAgaW50IHBhZ2VYLCAKKyAgICAgICAgICAgIGludCBwYWdlWSwKKyNpZiBFTkFCTEUoUE9J
TlRFUl9MT0NLKQorICAgICAgICAgICAgaW50IG1vdmVtZW50WCwgaW50IG1vdmVtZW50WSwKKyNl
bmRpZgorICAgICAgICAgICAgYm9vbCBjdHJsS2V5LCAKKyAgICAgICAgICAgIGJvb2wgYWx0S2V5
LCAKKyAgICAgICAgICAgIGJvb2wgc2hpZnRLZXksIAorICAgICAgICAgICAgYm9vbCBtZXRhS2V5
LCAKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGJ1dHRvbiwKKyAgICAgICAgICAgIFBhc3NS
ZWZQdHI8RXZlbnRUYXJnZXQ+IHJlbGF0ZWRUYXJnZXQsIAorICAgICAgICAgICAgUGFzc1JlZlB0
cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCwgCisgICAgICAgICAgICBib29sIGlzU2ltdWxhdGVkLAor
ICAgICAgICAgICAgY29uc3QgUG9pbnRlckluZm8mIGV2ZW50SW5mbworICAgICAgICAgICAgKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBvaW50ZXJFdmVudCh0
eXBlLCBjYW5CdWJibGUsIGNhbmNlbGFibGUsIHZpZXcsIGRldGFpbCwgc2NyZWVuWCwgc2NyZWVu
WSwgcGFnZVgsIHBhZ2VZLAorI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCisgICAgICAgICAgICAg
ICAgbW92ZW1lbnRYLCBtb3ZlbWVudFksCisjZW5kaWYKKyAgICAgICAgICAgICAgICBjdHJsS2V5
LCBhbHRLZXksIHNoaWZ0S2V5LCBtZXRhS2V5LCBidXR0b24sIHJlbGF0ZWRUYXJnZXQsIGNsaXBi
b2FyZCwgaXNTaW11bGF0ZWQsIGV2ZW50SW5mbykpOworICAgICAgICB9CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFBvaW50ZXJFdmVudD4gY3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sIGNvbnN0IFBsYXRmb3JtUG9pbnRlckV2
ZW50JiwgaW50IGRldGFpbCwgUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0KTsKKworICAg
ICAgICB2aXJ0dWFsIH5Qb2ludGVyRXZlbnQoKTsKKworICAgICAgICB2b2lkIGluaXRQb2ludGVy
RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5j
ZWxhYmxlLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGRldGFpbCwgaW50IHNjcmVlblgsIGludCBzY3JlZW5ZLCBpbnQgY2xpZW50WCwg
aW50IGNsaWVudFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5LCBi
b29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBtZXRhS2V5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGJ1dHRvbiwgUGFzc1JlZlB0cjxFdmVudFRhcmdl
dD4gcmVsYXRlZFRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBvaW50
ZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHdpZHRoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvbmcgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZsb2F0IHByZXNzdXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGls
dFgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0aWx0WSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBvaW50ZXJUeXBlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgaXNQcmltYXJ5KTsKKworICAgICAgICAvLyBwcm92aWRlIGlu
dGVyZmFjZSBuYW1lIGZvciBwb2ludGVyIG9iamVjdAorICAgICAgICB2aXJ0dWFsIGNvbnN0IEF0
b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworCisgICAgICAgIC8vIE92ZXJsb2Fk
IHRvIHNlcGFyYXRlIGZyb20gTW91c2VFdmVudAorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNNb3Vz
ZUV2ZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgICAgICBib29sIGlzUHJpbWFy
eSgpIHsgcmV0dXJuIG1fcHJpbWFyeVBvaW50ZXI7IH0KKyAgICAgICAgbG9uZyBwb2ludGVySWQo
KSB7IHJldHVybiBtX3BvaW50ZXJJZDsgfQorICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcgcG9p
bnRlclR5cGUoKSBjb25zdCB7IHJldHVybiBDb252ZXJ0UG9pbnRlclR5cGVJbnRUb1N0cmluZyht
X3BvaW50ZXJUeXBlKTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICBQb2ludGVyRXZlbnQo
CisJCQljb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIAorCQkJYm9vbCBjYW5CdWJibGUsIAorCQkJ
Ym9vbCBjYW5jZWxhYmxlLCAKKwkJCVBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiwKKyAgICAgICAg
ICAgIGludCBkZXRhaWwsIAorCQkJaW50IHNjcmVlblgsIAorCQkJaW50IHNjcmVlblksIAorCQkJ
aW50IHBhZ2VYLCAKKwkJCWludCBwYWdlWSwKKyNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQorICAg
ICAgICAgICAgaW50IG1vdmVtZW50WCwgCisJCQlpbnQgbW92ZW1lbnRZLAorI2VuZGlmCisgICAg
ICAgICAgICBib29sIGN0cmxLZXksIAorCQkJYm9vbCBhbHRLZXksIAorCQkJYm9vbCBzaGlmdEtl
eSwgCisJCQlib29sIG1ldGFLZXksIAorCQkJdW5zaWduZWQgc2hvcnQgYnV0dG9uLAorICAgICAg
ICAgICAgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcmVsYXRlZFRhcmdldCwgCisJCQlQYXNzUmVm
UHRyPENsaXBib2FyZD4gY2xpcGJvYXJkLCAKKwkJCWJvb2wgaXNTaW11bGF0ZWQsCisgICAgICAg
ICAgICBjb25zdCBQb2ludGVySW5mbyYgZXZlbnRJbmZvKTsKKwkJCQkgICAKKyAgICBwcm90ZWN0
ZWQ6CisgICAgICAgIFBvaW50ZXJFdmVudCgpOworCisgICAgICAgIGludCBDb252ZXJ0UG9pbnRl
clR5cGVOYW1lVG9JbnQoY29uc3QgU3RyaW5nICYpOworICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcgQ29udmVydFBvaW50ZXJUeXBlSW50VG9TdHJpbmcoaW50KSBjb25zdDsKKworICAgICAgICBs
b25nIG1fcG9pbnRlcklkOworICAgICAgICBsb25nIG1fd2lkdGg7CisgICAgICAgIGxvbmcgbV9o
ZWlnaHQ7CisgICAgICAgIGRvdWJsZSBtX3ByZXNzdXJlOworICAgICAgICBsb25nIG1fdGlsdFg7
CisgICAgICAgIGxvbmcgbV90aWx0WTsKKyAgICAgICAgaW50IG1fcG9pbnRlclR5cGU7CisgICAg
ICAgIGJvb2wgbV9wcmltYXJ5UG9pbnRlcjsKK307CisKK2NsYXNzIFBvaW50ZXJFdmVudERpc3Bh
dGNoTWVkaWF0b3IgOiBwdWJsaWMgRXZlbnREaXNwYXRjaE1lZGlhdG9yIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxQb2ludGVyRXZlbnREaXNwYXRjaE1lZGlhdG9yPiBjcmVhdGUo
UGFzc1JlZlB0cjxQb2ludGVyRXZlbnQ+KTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBQb2lu
dGVyRXZlbnREaXNwYXRjaE1lZGlhdG9yKFBhc3NSZWZQdHI8UG9pbnRlckV2ZW50Pik7CisgICAg
UG9pbnRlckV2ZW50KiBldmVudCgpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGRpc3BhdGNo
RXZlbnQoRXZlbnREaXNwYXRjaGVyKikgY29uc3Q7Cit9OworCQorfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gUG9pbnRlckV2ZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Qb2ludGVyRXZlbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL1BvaW50ZXJFdmVu
dC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA3OTBkOAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb2ludGVyRXZlbnQuaWRsCkBAIC0wLDAg
KzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0
IE1pY3Jvc29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyLiAyLjEgYXMKKyAqIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKK1sKKyAgICBDb25kaXRpb25hbD1Q
T0lOVEVSX0VWRU5UUworXSBpbnRlcmZhY2UgUG9pbnRlckV2ZW50IDogTW91c2VFdmVudCB7CisK
KyAgICBbSW5pdGlhbGl6ZWRCeUV2ZW50Q29uc3RydWN0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBi
b29sZWFuIGlzUHJpbWFyeTsKKyAgICBbSW5pdGlhbGl6ZWRCeUV2ZW50Q29uc3RydWN0b3JdIHJl
YWRvbmx5IGF0dHJpYnV0ZSBsb25nIHBvaW50ZXJJZDsKKyAgICBbSW5pdGlhbGl6ZWRCeUV2ZW50
Q29uc3RydWN0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgcG9pbnRlclR5cGU7CisK
KyAgICBbT2JqQ0xlZ2FjeVVubmFtZWRQYXJhbWV0ZXJzXSB2b2lkIGluaXRQb2ludGVyRXZlbnQo
aW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gRE9NU3RyaW5nIHR5cGUsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsPURlZmF1bHRJc1Vu
ZGVmaW5lZF0gYm9vbGVhbiBjYW5CdWJibGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gYm9vbGVhbiBjYW5j
ZWxhYmxlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRp
b25hbD1EZWZhdWx0SXNVbmRlZmluZWRdIERPTVdpbmRvdyB2aWV3LCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbD1EZWZhdWx0SXNVbmRlZmluZWRd
IGxvbmcgZGV0YWlsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IFtPcHRpb25hbD1EZWZhdWx0SXNVbmRlZmluZWRdIGxvbmcgc2NyZWVuWCwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZp
bmVkXSBsb25nIHNjcmVlblksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gbG9uZyBjbGllbnRYLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbD1EZWZhdWx0SXNV
bmRlZmluZWRdIGxvbmcgY2xpZW50WSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBib29sZWFuIGN0cmxLZXks
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsPURl
ZmF1bHRJc1VuZGVmaW5lZF0gYm9vbGVhbiBhbHRLZXksIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gYm9vbGVh
biBzaGlmdEtleSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBb
T3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBib29sZWFuIG1ldGFLZXksIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVm
aW5lZF0gdW5zaWduZWQgc2hvcnQgYnV0dG9uLAorCQkJCSAgICAgICBpbiBbT3B0aW9uYWw9RGVm
YXVsdElzVW5kZWZpbmVkXSBFdmVudFRhcmdldCByZWxhdGVkVGFyZ2V0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5l
ZF0gbG9uZyBwb2ludGVySWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBsb25nIHdpZHRoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVm
aW5lZF0gbG9uZyBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBmbG9hdCBwcmVzc3VyZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbD1EZWZhdWx0SXNV
bmRlZmluZWRdIGxvbmcgdGlsdFgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBsb25nIHRpbHRZLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsPURlZmF1bHRJc1Vu
ZGVmaW5lZF0gRE9NU3RyaW5nIHBvaW50ZXJUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gYm9vbGVhbiBp
c1ByaW1hcnkpOworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJp
YnV0ZU5hbWVzLmluIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4K
aW5kZXggNzE1NGNiYS4uNTBmNDVmOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEF0dHJpYnV0ZU5hbWVzLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJp
YnV0ZU5hbWVzLmluCkBAIC0yMjAsNiArMjIwLDEyIEBAIG9ucGFzdGUKIG9ucGF1c2UKIG9ucGxh
eQogb25wbGF5aW5nCitvbndlYmtpdHBvaW50ZXJkb3duCitvbndlYmtpdHBvaW50ZXJ1cAorb253
ZWJraXRwb2ludGVybW92ZQorb253ZWJraXRwb2ludGVyb3Zlcgorb253ZWJraXRwb2ludGVyb3V0
CitvbndlYmtpdHBvaW50ZXJjYW5jZWwKIG9ucG9wc3RhdGUKIG9ucHJvZ3Jlc3MKIG9ucmF0ZWNo
YW5nZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAppbmRleCBiNTkxODJhLi5lMDVhNDky
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqIENv
cHlyaWdodCAoQykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIFBvcnRpb25zIENvcHlyaWdodCBNaWNyb3NvZnQgT3BlbiBUZWNobm9sb2dpZXMsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzI2LDYgKzMyNywx
OCBAQCB2b2lkIEhUTUxFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmCiAgICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLnRvdWNoZW5kRXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIodGhpcywgbmFtZSwgdmFsdWUpKTsKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gb250b3Vj
aGNhbmNlbEF0dHIpIHsKICAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5h
bWVzKCkudG91Y2hjYW5jZWxFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlz
LCBuYW1lLCB2YWx1ZSkpOworICAgIH0gZWxzZSBpZiAobmFtZSA9PSBvbndlYmtpdHBvaW50ZXJk
b3duQXR0cikgeworICAgICAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMo
KS53ZWJraXRwb2ludGVyZG93bkV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRo
aXMsIG5hbWUsIHZhbHVlKSk7CisgICAgfSBlbHNlIGlmIChuYW1lID09IG9ud2Via2l0cG9pbnRl
cnVwQXR0cikgeworICAgICAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMo
KS53ZWJraXRwb2ludGVydXBFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlz
LCBuYW1lLCB2YWx1ZSkpOworICAgIH0gZWxzZSBpZiAobmFtZSA9PSBvbndlYmtpdHBvaW50ZXJt
b3ZlQXR0cikgeworICAgICAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMo
KS53ZWJraXRwb2ludGVybW92ZUV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRo
aXMsIG5hbWUsIHZhbHVlKSk7CisgICAgfSBlbHNlIGlmIChuYW1lID09IG9ud2Via2l0cG9pbnRl
cm92ZXJBdHRyKSB7CisgICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1l
cygpLndlYmtpdHBvaW50ZXJvdmVyRXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
dGhpcywgbmFtZSwgdmFsdWUpKTsKKyAgICB9IGVsc2UgaWYgKG5hbWUgPT0gb253ZWJraXRwb2lu
dGVyb3V0QXR0cikgeworICAgICAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFt
ZXMoKS53ZWJraXRwb2ludGVyb3V0RXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
dGhpcywgbmFtZSwgdmFsdWUpKTsKKyAgICB9IGVsc2UgaWYgKG5hbWUgPT0gb253ZWJraXRwb2lu
dGVyY2FuY2VsQXR0cikgeworICAgICAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50
TmFtZXMoKS53ZWJraXRwb2ludGVyY2FuY2VsRXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIodGhpcywgbmFtZSwgdmFsdWUpKTsJCQogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkK
ICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gb253ZWJraXRmdWxsc2NyZWVuY2hhbmdlQXR0cikgewog
ICAgICAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS53ZWJraXRmdWxs
c2NyZWVuY2hhbmdlRXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIodGhpcywgbmFt
ZSwgdmFsdWUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCmluZGV4IDRiNzY0MzguLjBjMzZjY2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICogUG9ydGlvbnMgQ29weXJpZ2h0IE1pY3Jvc29mdCBPcGVuIFRl
Y2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zODgsNiArMzg5LDE3IEBACiAgICAgICAgIERFRklORV9BVFRSSUJV
VEVfRVZFTlRfTElTVEVORVIob3JpZW50YXRpb25jaGFuZ2UpOwogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoUE9JTlRFUl9FVkVOVFMpCisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUih3
ZWJraXRwb2ludGVyZG93bik7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUih3
ZWJraXRwb2ludGVydXApOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIod2Vi
a2l0cG9pbnRlcmNhbmNlbCk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUih3
ZWJraXRwb2ludGVybW92ZSk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUih3
ZWJraXRwb2ludGVyb3Zlcik7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUih3
ZWJraXRwb2ludGVyb3V0KTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHdl
YmtpdGdvdHBvaW50ZXJjYXB0dXJlKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RF
TkVSKHdlYmtpdGxvc3Rwb2ludGVyY2FwdHVyZSk7CisjZW5kaWYKKwogI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCiAgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIodG91Y2hz
dGFydCk7CiAgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIodG91Y2htb3Zl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAppbmRleCA2NzFlYzViLi5mMDZjZjFmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCBNaWNyb3NvZnQgT3BlbiBUZWNobm9sb2dpZXMsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjgyLDYgKzI4MywxNSBAQAogICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9udm9sdW1l
Y2hhbmdlOwogICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ud2FpdGluZzsKIAorICAgIGF0
dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ud2Via2l0cG9pbnRlcmRvd247CisgICAgYXR0cmlidXRl
IEV2ZW50TGlzdGVuZXIgb253ZWJraXRwb2ludGVydXA7CisgICAgYXR0cmlidXRlIEV2ZW50TGlz
dGVuZXIgb253ZWJraXRwb2ludGVyY2FuY2VsOworICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVy
IG9ud2Via2l0cG9pbnRlcm1vdmU7CisgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb253ZWJr
aXRwb2ludGVyb3ZlcjsKKyAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbndlYmtpdHBvaW50
ZXJvdXQ7CisgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb253ZWJraXRnb3Rwb2ludGVyY2Fw
dHVyZTsKKyAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbndlYmtpdGxvc3Rwb2ludGVyY2Fw
dHVyZTsKKwogICAgIC8vIE5vdCBpbXBsZW1lbnRlZCB5ZXQuCiAgICAgLy8gYXR0cmlidXRlIEV2
ZW50TGlzdGVuZXIgb25hZnRlcnByaW50OwogICAgIC8vIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVy
IG9uYmVmb3JlcHJpbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggM2Jh
YzRmMi4uNzMzMmVhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMiw2
ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKICAqIENvcHlyaWdodCAoQykg
MjAxMiBEaWdpYSBQbGMuIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogUG9ydGlvbnMg
Q29weXJpZ2h0IE1pY3Jvc29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTYsNiArMTE3LDEw
IEBACiAjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZVNldC5oIgogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoUE9JTlRFUl9FVkVOVFMpCisjaW5jbHVkZSAiUGxhdGZvcm1Qb2ludGVyRXZlbnQuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CkBAIC02MjksNiArNjM0LDEwIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNz
RXZlbnQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlCiAKICAgICBtX2Zy
YW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsK
IAorI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKKyAgICBoYW5kbGVQb2ludGVyRXZlbnRzKFBs
YXRmb3JtUG9pbnRlckV2ZW50Q29sbGVjdGlvbihldmVudC5ldmVudCgpKSk7CisjZW5kaWYKKwog
ICAgIGlmIChTY3JvbGxWaWV3KiBzY3JvbGxWaWV3ID0gbV9mcmFtZS0+dmlldygpKSB7CiAgICAg
ICAgIGlmIChzY3JvbGxWaWV3LT5pc1BvaW50SW5TY3JvbGxiYXJDb3JuZXIoZXZlbnQuZXZlbnQo
KS5wb3NpdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2MDgsNiArMTYx
Nyw5IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYgZXZlbnQpCiAgICAgUmVmUHRyPEZyYW1lVmlldz4gcHJvdGVjdG9yKG1fZnJhbWUtPnZp
ZXcoKSk7CiAgICAgTWF4aW11bUR1cmF0aW9uVHJhY2tlciBtYXhEdXJhdGlvblRyYWNrZXIoJm1f
bWF4TW91c2VNb3ZlZER1cmF0aW9uKTsKIAorI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKKyAg
ICBoYW5kbGVQb2ludGVyRXZlbnRzKFBsYXRmb3JtUG9pbnRlckV2ZW50Q29sbGVjdGlvbihldmVu
dCkpOworI2VuZGlmCiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIC8vIEZJWE1FOiB0
aGlzIHNob3VsZCBiZSBtb3ZlZCBlbHNld2hlcmUgdG8gYWxzbyBiZSBhYmxlIHRvIGRpc3BhdGNo
IHRvdWNoY2FuY2VsIGV2ZW50cy4KQEAgLTE3OTIsNiArMTgwNCwxMCBAQCBib29sIEV2ZW50SGFu
ZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBt
b3VzZUV2ZW50KQogCiAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldENhcmV0QmxpbmtpbmdT
dXNwZW5kZWQoZmFsc2UpOwogCisjaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQorICAgIGhhbmRs
ZVBvaW50ZXJFdmVudHMoUGxhdGZvcm1Qb2ludGVyRXZlbnRDb2xsZWN0aW9uKG1vdXNlRXZlbnQp
KTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBib29sIGRlZmF1bHRQ
cmV2ZW50ZWQgPSBkaXNwYXRjaFN5bnRoZXRpY1RvdWNoRXZlbnRJZkVuYWJsZWQobW91c2VFdmVu
dCk7CiAgICAgaWYgKGRlZmF1bHRQcmV2ZW50ZWQpCkBAIC0zNzg0LDYgKzM4MDAsMTAgQEAgSGl0
VGVzdFJlc3VsdCBFdmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bHRJbkZyYW1lKEZyYW1lKiBmcmFt
ZSwgY29uc3QgTGF5b3V0UG9pbnQKIAogYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZl
bnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCkKIHsKKyNpZiBFTkFCTEUoUE9JTlRF
Ul9FVkVOVFMpCisgICAgaGFuZGxlUG9pbnRlckV2ZW50cyhQbGF0Zm9ybVBvaW50ZXJFdmVudENv
bGxlY3Rpb24oZXZlbnQpKTsKKyNlbmRpZgorCiAgICAgLy8gRmlyc3QgYnVpbGQgdXAgdGhlIGxp
c3RzIHRvIHVzZSBmb3IgdGhlICd0b3VjaGVzJywgJ3RhcmdldFRvdWNoZXMnIGFuZCAnY2hhbmdl
ZFRvdWNoZXMnIGF0dHJpYnV0ZXMKICAgICAvLyBpbiB0aGUgSlMgZXZlbnQuIFNlZSBodHRwOi8v
d3d3LnNpdGVwZW4uY29tL2Jsb2cvMjAwOC8wNy8xMC90b3VjaGluZy1hbmQtZ2VzdHVyaW5nLW9u
LXRoZS1pcGhvbmUvCiAgICAgLy8gZm9yIGFuIG92ZXJ2aWV3IG9mIGhvdyB0aGVzZSBsaXN0cyBm
aXQgdG9nZXRoZXIuCkBAIC00MDI4LDQgKzQwNDgsMTUzIEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpz
ZXRMYXN0S25vd25Nb3VzZVBvc2l0aW9uKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQp
CiAgICAgbV9sYXN0S25vd25Nb3VzZUdsb2JhbFBvc2l0aW9uID0gZXZlbnQuZ2xvYmFsUG9zaXRp
b24oKTsKIH0KIAorI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKKworYm9vbCBFdmVudEhhbmRs
ZXI6OmhhbmRsZVBvaW50ZXJFdmVudHMoUGxhdGZvcm1Qb2ludGVyRXZlbnRDb2xsZWN0aW9uICYg
Y29sbCkKK3sKKyAgICBmb3IgKFZlY3RvcjxQbGF0Zm9ybVBvaW50ZXJFdmVudD46Oml0ZXJhdG9y
IGl0ZXIgPSBjb2xsLmV2ZW50cy5iZWdpbigpOyBpdGVyICE9IGNvbGwuZXZlbnRzLmVuZCgpOyBp
dGVyKyspCisgICAgeworICAgICAgICBQbGF0Zm9ybVBvaW50ZXJFdmVudCYgZSA9ICgqaXRlcik7
CisKKyAgICAgICAgLy8gaWYgUGxhdGZvcm1Qb2ludGVyRXZlbnQgd2FzIHByb2Nlc3NlZCBhdCB0
aGUgY29uc3RydWN0aW9uLCAKKyAgICAgICAgLy8gZG9uJ3QgZGlzcGF0Y2ggaXQKKyAgICAgICAg
aWYgKGUuUG9pbnRlclByb2Nlc3NlZCgpKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIHN3aXRjaCAoZS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBQbGF0Zm9y
bUV2ZW50OjpQb2ludGVyRG93bjoKKyAgICAgICAgICAgIHJldHVybiBkaXNwYXRjaFBvaW50ZXJF
dmVudChldmVudE5hbWVzKCkud2Via2l0cG9pbnRlcmRvd25FdmVudCwgZSk7CisgICAgICAgIGNh
c2UgUGxhdGZvcm1FdmVudDo6UG9pbnRlclVwOgorICAgICAgICAgICAgcmV0dXJuIGRpc3BhdGNo
UG9pbnRlckV2ZW50KGV2ZW50TmFtZXMoKS53ZWJraXRwb2ludGVydXBFdmVudCwgZSk7CisgICAg
ICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6UG9pbnRlckNhbmNlbDoKKyAgICAgICAgICAgIHJldHVy
biBkaXNwYXRjaFBvaW50ZXJFdmVudChldmVudE5hbWVzKCkud2Via2l0cG9pbnRlcmNhbmNlbEV2
ZW50LCBlKTsKKyAgICAgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpQb2ludGVyTW92ZToKKyAgICAg
ICAgICAgIHJldHVybiBkaXNwYXRjaFBvaW50ZXJFdmVudChldmVudE5hbWVzKCkud2Via2l0cG9p
bnRlcm1vdmVFdmVudCwgZSk7CisgICAgICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6UG9pbnRlck92
ZXI6CisgICAgICAgICAgICByZXR1cm4gZGlzcGF0Y2hQb2ludGVyRXZlbnQoZXZlbnROYW1lcygp
LndlYmtpdHBvaW50ZXJvdmVyRXZlbnQsIGUpOworICAgICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6
OlBvaW50ZXJPdXQ6CisgICAgICAgICAgICByZXR1cm4gZGlzcGF0Y2hQb2ludGVyRXZlbnQoZXZl
bnROYW1lcygpLndlYmtpdHBvaW50ZXJvdXRFdmVudCwgZSk7CisgICAgICAgIGNhc2UgUGxhdGZv
cm1FdmVudDo6R290UG9pbnRlckNhcHR1cmU6CisgICAgICAgICAgICByZXR1cm4gZGlzcGF0Y2hQ
b2ludGVyRXZlbnQoZXZlbnROYW1lcygpLndlYmtpdGdvdHBvaW50ZXJjYXB0dXJlRXZlbnQsIGUp
OworICAgICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okxvc3RQb2ludGVyQ2FwdHVyZToKKyAgICAg
ICAgICAgIHJldHVybiBkaXNwYXRjaFBvaW50ZXJFdmVudChldmVudE5hbWVzKCkud2Via2l0bG9z
dHBvaW50ZXJjYXB0dXJlRXZlbnQsIGUpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpkaXNwYXRjaFBvaW50ZXJFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSwgY29uc3QgUGxhdGZvcm1Qb2ludGVyRXZlbnQmIGUpCit7Cisg
ICAgQVNTRVJUKG1fZnJhbWUpOworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgUmVmUHRyPEZyYW1lVmlldz4gcHJvdGVjdG9yKG1fZnJhbWUtPnZpZXcoKSk7
CisgICAgSGl0VGVzdFJlcXVlc3Q6OkhpdFRlc3RSZXF1ZXN0VHlwZSBoaXRUeXBlID0gSGl0VGVz
dFJlcXVlc3Q6Ok1vdmU7CisKKyAgICBpZiAobV9tb3VzZVByZXNzZWQpCisgICAgICAgIGhpdFR5
cGUgfD0gSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZTsKKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
CisgICAgLy8gVHJlYXQgYW55IG1vdXNlIG1vdmUgZXZlbnRzIGFzIHJlYWRvbmx5IGlmIHRoZSB1
c2VyIGlzIGN1cnJlbnRseSB0b3VjaGluZyB0aGUgc2NyZWVuLgorICAgIGlmIChtX3RvdWNoUHJl
c3NlZCkKKyAgICAgICAgaGl0VHlwZSB8PSBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlIHwgSGl0VGVz
dFJlcXVlc3Q6OlJlYWRPbmx5OworI2VuZGlmCisgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdCho
aXRUeXBlKTsKKyAgICBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzIG1ldiA9IHByZXBhcmVN
b3VzZUV2ZW50KHJlcXVlc3QsIGUpOworCisgICAgSGl0VGVzdFJlc3VsdCBob3ZlcmVkTm9kZSA9
IG1ldi5oaXRUZXN0UmVzdWx0KCk7CisgICAgCisgICAgLy8gZ2VuZXJhdGUgcG9pbnRlcm91dCwg
cG9pbnRlcm92ZXIgZXZlbnRzIChjb3BpZWQgZnJvbSB1cGRhdGVNb3VzZUV2ZW50VGFyZ2V0Tm9k
ZSgpKQorICAgIC8vCisgICAgTm9kZSogcmVzdWx0ID0gbWV2LnRhcmdldE5vZGUoKTsKKyAgICAK
KyAgICAvLyBJZiB3ZSdyZSBjYXB0dXJpbmcsIHdlIGFsd2F5cyBnbyByaWdodCB0byB0aGF0IG5v
ZGUuCisgICAgaWYgKG1fY2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKQorICAgICAgICByZXN1bHQg
PSBtX2NhcHR1cmluZ01vdXNlRXZlbnRzTm9kZS5nZXQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
Ly8gSWYgdGhlIHRhcmdldCBub2RlIGlzIGEgdGV4dCBub2RlLCBkaXNwYXRjaCBvbiB0aGUgcGFy
ZW50IG5vZGUgLSByZGFyOi8vNDE5NjY0NgorICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC0+
aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgICAgICBBbmNlc3RvckNoYWluV2Fsa2VyIHdhbGtlcihy
ZXN1bHQpOworICAgICAgICAgICAgd2Fsa2VyLnBhcmVudCgpOworICAgICAgICAgICAgcmVzdWx0
ID0gd2Fsa2VyLmdldCgpOworICAgICAgICB9CisgICAgfQorCisgICAgTm9kZSAqbm9kZVVuZGVy
UG9pbnRlciA9IHJlc3VsdDsKKyAgICBOb2RlICpsYXN0Tm9kZVVuZGVyUG9pbnRlciA9IG1fbGFz
dE5vZGVVbmRlck1vdXNlLmdldCgpOworCisgICAgaWYgKGxhc3ROb2RlVW5kZXJQb2ludGVyICYm
IGxhc3ROb2RlVW5kZXJQb2ludGVyLT5kb2N1bWVudCgpICE9IG1fZnJhbWUtPmRvY3VtZW50KCkp
IHsKKyAgICAgICAgbGFzdE5vZGVVbmRlclBvaW50ZXIgPSAwOworICAgIH0KKyAgICBpZiAobGFz
dE5vZGVVbmRlclBvaW50ZXIgIT0gbm9kZVVuZGVyUG9pbnRlcikgeworICAgICAgICAvLyBzZW5k
IHBvaW50ZXJvdXQgZXZlbnQgdG8gdGhlIG9sZCBub2RlCisgICAgICAgIGlmIChsYXN0Tm9kZVVu
ZGVyUG9pbnRlcikKKyAgICAgICAgICAgIGxhc3ROb2RlVW5kZXJQb2ludGVyLT5kaXNwYXRjaFBv
aW50ZXJFdmVudChlLCBldmVudE5hbWVzKCkud2Via2l0cG9pbnRlcm91dEV2ZW50LCAwLCBub2Rl
VW5kZXJQb2ludGVyKTsKKyAgICAgICAgLy8gc2VuZCBwb2ludGVyb3ZlciBldmVudCB0byB0aGUg
bmV3IG5vZGUKKyAgICAgICAgaWYgKG5vZGVVbmRlclBvaW50ZXIpCisgICAgICAgICAgICBub2Rl
VW5kZXJQb2ludGVyLT5kaXNwYXRjaFBvaW50ZXJFdmVudChlLCBldmVudE5hbWVzKCkud2Via2l0
cG9pbnRlcm92ZXJFdmVudCwgMCwgbGFzdE5vZGVVbmRlclBvaW50ZXIpOworICAgIH0KKworICAg
IGJvb2wgc3dhbGxvd0V2ZW50ID0gZmFsc2U7CisKKyAgICAvLyBzZW5kIHdoYXRldmVyIHBvaW50
ZXIgZXZlbnQgd2UgcGxhbm5lZCB0byBzZW5kIGluIHRoZSBmaXJzdCBwbGFjZQorICAgIGlmIChu
b2RlVW5kZXJQb2ludGVyKQorICAgICAgICBzd2FsbG93RXZlbnQgPSBub2RlVW5kZXJQb2ludGVy
LT5kaXNwYXRjaFBvaW50ZXJFdmVudChlLCBldmVudFR5cGUpOworCisgICAgaWYgKCFzd2FsbG93
RXZlbnQgJiYgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS53ZWJraXRwb2ludGVyZG93bkV2ZW50
KSB7CisKKyAgICAgICAgLy8gSWYgY2xpY2tpbmcgb24gYSBmcmFtZSBzY3JvbGxiYXIsIGRvIG5v
dCBtZXNzIHVwIHdpdGggY29udGVudCBmb2N1cy4KKyAgICAgICAgaWYgKEZyYW1lVmlldyogdmll
dyA9IG1fZnJhbWUtPnZpZXcoKSkgeworICAgICAgICAgICAgaWYgKHZpZXctPnNjcm9sbGJhckF0
UG9pbnQoZS5wb3NpdGlvbigpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBUaGUgbGF5b3V0IG5lZWRzIHRvIGJlIHVwIHRvIGRhdGUgdG8g
ZGV0ZXJtaW5lIGlmIGFuIGVsZW1lbnQgaXMgZm9jdXNhYmxlLgorICAgICAgICBtX2ZyYW1lLT5k
b2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKworICAg
ICAgICAvLyBCbHVyIGN1cnJlbnQgZm9jdXMgbm9kZSB3aGVuIGEgbGluay9idXR0b24gaXMgY2xp
Y2tlZDsgdGhpcworICAgICAgICAvLyBpcyBleHBlY3RlZCBieSBzb21lIHNpdGVzIHRoYXQgcmVs
eSBvbiBvbkNoYW5nZSBoYW5kbGVycyBydW5uaW5nCisgICAgICAgIC8vIGZyb20gZm9ybSBmaWVs
ZHMgYmVmb3JlIHRoZSBidXR0b24gY2xpY2sgaXMgcHJvY2Vzc2VkLgorICAgICAgICBOb2RlKiBu
b2RlID0gbm9kZVVuZGVyUG9pbnRlcjsKKworICAgICAgICAvLyBXYWxrIHVwIHRoZSBET00gdHJl
ZSB0byBzZWFyY2ggZm9yIGEgbm9kZSB0byBmb2N1cy4KKyAgICAgICAgd2hpbGUgKG5vZGUpIHsK
KyAgICAgICAgICAgIGlmIChub2RlLT5pc01vdXNlRm9jdXNhYmxlKCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyBUbyBmaXggPHJkYXI6Ly9wcm9ibGVtLzQ4OTU0Mjg+IENhbid0IGRyYWcgc2VsZWN0
ZWQgVG9Ebywgd2UgZG9uJ3QgZm9jdXMgYQorICAgICAgICAgICAgICAgIC8vIG5vZGUgb24gbW91
c2UgZG93biBpZiBpdCdzIHNlbGVjdGVkIGFuZCBpbnNpZGUgYSBmb2N1c2VkIG5vZGUuIEl0IHdp
bGwgYmUKKyAgICAgICAgICAgICAgICAvLyBmb2N1c2VkIGlmIHRoZSB1c2VyIGRvZXMgYSBtb3Vz
ZXVwIG92ZXIgaXQsIGhvd2V2ZXIsIGJlY2F1c2UgdGhlIG1vdXNldXAKKyAgICAgICAgICAgICAg
ICAvLyB3aWxsIHNldCBhIHNlbGVjdGlvbiBpbnNpZGUgaXQsIHdoaWNoIHdpbGwgY2FsbCBzZXRG
b2N1c2VOb2RlSWZOZWVkZWQuCisgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgICAgICAgICAgICAgTm9kZSogbiA9IG5vZGUtPmlzU2hhZG93Um9vdCgpID8gdG9TaGFk
b3dSb290KG5vZGUpLT5ob3N0KCkgOiBub2RlOworICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1l
LT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpCisgICAgICAgICAgICAgICAgICAgICYmIG1fZnJhbWUt
PnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLT5jb21wYXJlTm9kZShuLCBlYykgPT0g
UmFuZ2U6Ok5PREVfSU5TSURFCisgICAgICAgICAgICAgICAgICAgICYmIG4tPmlzRGVzY2VuZGFu
dE9mKG1fZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE9y
U2hhZG93SG9zdE5vZGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIGZvY3VzIHNoaWZ0
IGlzIGJsb2NrZWQsIHdlIGVhdCB0aGUgZXZlbnQuICBOb3RlIHdlIHNob3VsZCBuZXZlciBjbGVh
ciBzd2FsbG93RXZlbnQKKyAgICAgICAgLy8gaWYgdGhlIHBhZ2UgYWxyZWFkeSBzZXQgaXQgKGUu
Zy4sIGJ5IGNhbmNlbGluZyBkZWZhdWx0IGJlaGF2aW9yKS4KKyAgICAgICAgaWYgKFBhZ2UqIHBh
Z2UgPSBtX2ZyYW1lLT5wYWdlKCkpIHsKKyAgICAgICAgICAgIGlmIChub2RlICYmIG5vZGUtPmlz
TW91c2VGb2N1c2FibGUoKSkgeworICAgICAgICAgICAgICAgIGlmICghcGFnZS0+Zm9jdXNDb250
cm9sbGVyKCktPnNldEZvY3VzZWROb2RlKG5vZGUsIG1fZnJhbWUpKQorICAgICAgICAgICAgICAg
ICAgICBzd2FsbG93RXZlbnQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmICghbm9kZSB8
fCAhbm9kZS0+Zm9jdXNlZCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFwYWdlLT5mb2N1c0Nv
bnRyb2xsZXIoKS0+c2V0Rm9jdXNlZE5vZGUoMCwgbV9mcmFtZSkpCisgICAgICAgICAgICAgICAg
ICAgIHN3YWxsb3dFdmVudCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gc3dhbGxvd0V2ZW50OworfQorI2VuZGlmIC8vIEVOQUJMRShQT0lOVEVS
X0VWRU5UUykKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmgKaW5kZXggM2ZjMDdmMi4uMTRkYmZhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAw
OSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9u
cyBDb3B5cmlnaHQgTWljcm9zb2Z0IE9wZW4gVGVjaG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDYgKzY4LDcg
QEAKIGNsYXNzIE5vZGU7CiBjbGFzcyBPcHRpb25hbEN1cnNvcjsKIGNsYXNzIFBsYXRmb3JtS2V5
Ym9hcmRFdmVudDsKK2NsYXNzIFBsYXRmb3JtUG9pbnRlckV2ZW50Q29sbGVjdGlvbjsKIGNsYXNz
IFBsYXRmb3JtVG91Y2hFdmVudDsKIGNsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKIGNsYXNzIFJl
bmRlckxheWVyOwpAQCAtMjQ4LDYgKzI1MCwxMCBAQCBjbGFzcyBFdmVudEhhbmRsZXIgewogICAg
IGJvb2wgaGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmKTsKICNlbmRp
ZgogCisjaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQorICAgIGJvb2wgaGFuZGxlUG9pbnRlckV2
ZW50cyhQbGF0Zm9ybVBvaW50ZXJFdmVudENvbGxlY3Rpb24mKTsKKyNlbmRpZgorCiAgICAgYm9v
bCB1c2VIYW5kQ3Vyc29yKE5vZGUqLCBib29sIGlzT3ZlckxpbmssIGJvb2wgc2hpZnRLZXkpOwog
CiBwcml2YXRlOgpAQCAtMzIyLDYgKzMyOCw5IEBAIGNsYXNzIEV2ZW50SGFuZGxlciB7CiAgICAg
Ym9vbCBkcmFnSHlzdGVyZXNpc0V4Y2VlZGVkKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAg
ICBib29sIGRyYWdIeXN0ZXJlc2lzRXhjZWVkZWQoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKICNl
bmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKQorI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykK
KyAgICBib29sIGRpc3BhdGNoUG9pbnRlckV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBjb25zdCBQbGF0Zm9ybVBvaW50ZXJFdmVudCYpOworI2VuZGlmIC8vIEVOQUJMRShQT0lO
VEVSX0VWRU5UUykKIAogICAgIGJvb2wgcGFzc01vdXNlUHJlc3NFdmVudFRvU3ViZnJhbWUoTW91
c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYsIEZyYW1lKiBzdWJmcmFtZSk7CiAgICAgYm9vbCBw
YXNzTW91c2VNb3ZlRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMm
LCBGcmFtZSogc3ViZnJhbWUsIEhpdFRlc3RSZXN1bHQqIGhvdmVyZWROb2RlID0gMCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUV2ZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUV2ZW50LmgKaW5kZXggMjU0N2EyZS4uMTI2MjRlYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1FdmVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtRXZlbnQuaApAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogUG9ydGlvbnMgQ29weXJpZ2h0IE1pY3Jvc29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC03MSw2ICs3MiwxNyBAQCBjbGFzcyBQbGF0Zm9ybUV2ZW50IHsKICAgICAgICAgVG91Y2hFbmQs
CiAgICAgICAgIFRvdWNoQ2FuY2VsLAogI2VuZGlmCisjaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRT
KQorICAgICAgICAvLyBQbGF0Zm9ybVBvaW50ZXJFdmVudAorICAgICAgICBQb2ludGVyRG93biwK
KyAgICAgICAgUG9pbnRlclVwLAorICAgICAgICBQb2ludGVyQ2FuY2VsLAorICAgICAgICBQb2lu
dGVyTW92ZSwKKyAgICAgICAgUG9pbnRlck92ZXIsCisgICAgICAgIFBvaW50ZXJPdXQsCisgICAg
ICAgIEdvdFBvaW50ZXJDYXB0dXJlLAorICAgICAgICBMb3N0UG9pbnRlckNhcHR1cmUsCisjZW5k
aWYKICAgICB9OwogCiAgICAgZW51bSBNb2RpZmllcnMgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Qb2ludGVyRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGxhdGZvcm1Qb2ludGVyRXZlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmE0NTIwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybVBvaW50ZXJFdmVudC5jcHAKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IE1pY3Jvc29mdCBPcGVu
IFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFCisgKi8KKwor
LyoKKworVGhpcyBpbXBsZW1lbnRzIFBvaW50ZXIgRXZlbnRzIGFzIGRlZmluZWQgaW4gUG9pbnRl
ciBFdmVudHMgc3BlY2lmaWNhdGlvbiBzdWJtaXNzaW9uIHRvIFczQy4KKworICovCisKKyNpbmNs
dWRlICJQbGF0Zm9ybVBvaW50ZXJFdmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBsb25nIGNvbnZlcnRCdXR0b25Ub0Nob3JkZWRWYWx1ZShQb2ludGVyQnV0dG9uKTsKK3N0
YXRpYyBsb25nIGNvbnZlcnRNb3VzZUJ1dHRvblRvQ2hvcmRlZFZhbHVlKE1vdXNlQnV0dG9uKTsK
Kworc3RhdGljIGNvbnN0IGxvbmcgUG9pbnRlck5vQnV0dG9uRGVmaW5lID0gMDsKK3N0YXRpYyBj
b25zdCBsb25nIFBvaW50ZXJMZWZ0QnV0dG9uRGVmaW5lID0gMTsKK3N0YXRpYyBjb25zdCBsb25n
IFBvaW50ZXJNaWRkbGVCdXR0b25EZWZpbmUgPSA0Oworc3RhdGljIGNvbnN0IGxvbmcgUG9pbnRl
clJpZ2h0QnV0dG9uRGVmaW5lID0gMjsKK3N0YXRpYyBjb25zdCBsb25nIFBvaW50ZXJYMUJ1dHRv
bkRlZmluZSA9IDg7CitzdGF0aWMgY29uc3QgbG9uZyBQb2ludGVyWDJCdXR0b25EZWZpbmUgPSAx
NjsKK3N0YXRpYyBjb25zdCBsb25nIFBvaW50ZXJQZW5FcmFzZUJ1dHRvbkRlZmluZSA9IDMyOwor
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBQb2ludGVySW5m
bzo6SW5pdChQbGF0Zm9ybUV2ZW50OjpUeXBlIHBsYXRmb3JtVHlwZSwgUG9pbnRlclR5cGUgcG9p
bnRlclR5cGUsIGxvbmcgcG9pbnRlcklkLCBsb25nIGNob3JkZWRCdXR0b25zKQoreworICAgIGlm
IChwb2ludGVyVHlwZSA9PSBQb2ludGVyVHlwZU1vdXNlKSB7CisgICAgICAgIG1fcG9pbnRlcklk
ID0gTW91c2VQb2ludGVySWQ7CisgICAgICAgIG1fcHJpbWFyeVBvaW50ZXIgPSB0cnVlOworICAg
IH0KKyAgICBlbHNlIGlmIChwb2ludGVyVHlwZSA9PSBQb2ludGVyVHlwZVRvdWNoKSB7CisgICAg
ICAgIG1fcG9pbnRlcklkID0gcG9pbnRlcklkICsgMzsKKyAgICAgICAgbV9wcmltYXJ5UG9pbnRl
ciA9IChwb2ludGVySWQgPT0gMCk7CisgICAgfQorICAgIGVsc2UgIHsKKyAgICAgICAgbV9wb2lu
dGVySWQgPSBQZW5Qb2ludGVySWQ7CisgICAgICAgIG1fcHJpbWFyeVBvaW50ZXIgPSB0cnVlOwor
ICAgIH0KKworICAgIG1fdHlwZSA9IHBsYXRmb3JtVHlwZTsKKyAgICBtX3dpZHRoID0gMTsgLy8g
ZGVmYXVsdCB2YWx1ZSBwcm92aWRlZAorICAgIG1faGVpZ2h0ID0gMTsgLy8gZGVmYXVsdCB2YWx1
ZSBwcm92aWRlZAorICAgIG1fcHJlc3N1cmUgPSAwOyAvLyBoYXJkd2FyZSBkb2VzIG5vdCBzdXBw
b3J0IHByZXNzdXJlCisgICAgbV90aWx0WCA9IDA7IC8vIGhhcmR3YXJlIGRvZXMgbm90IHN1cHBv
cnQgdGlsdAorICAgIG1fdGlsdFkgPSAwOyAgLy8gaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCB0
aWx0CisgICAgbV9wb2ludGVyVHlwZSA9IHBvaW50ZXJUeXBlOworICAgIG1fcHJvY2Vzc2VkID0g
ZmFsc2U7IC8vIGJ5IGRlZmF1bHQgZXZlbnQgaXMgbm90IHByb2Nlc3NlZAorCisgICAgbV9jaG9y
ZGVkQnV0dG9ucyA9IGNob3JkZWRCdXR0b25zOworfQorCitib29sIFBvaW50ZXJJbmZvOjppc0J1
dHRvblByZXNzZWQoUG9pbnRlckJ1dHRvbiBidG4pCit7CisgICAgbG9uZyBjaHJvZGVkVmFsID0g
Y29udmVydEJ1dHRvblRvQ2hvcmRlZFZhbHVlKGJ0bik7CisgICAgcmV0dXJuICgobV9jaG9yZGVk
QnV0dG9ucyAmIGNocm9kZWRWYWwpICE9IDApOworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitQbGF0Zm9ybVBvaW50ZXJFdmVudDo6UGxhdGZvcm1Q
b2ludGVyRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50ICYgZSkKKyAgICA6IFBsYXRmb3Jt
TW91c2VFdmVudChlKQoreworICAgIGxvbmcgY2hvcmRlZEJ1dHRvbnMgPSBjb252ZXJ0TW91c2VC
dXR0b25Ub0Nob3JkZWRWYWx1ZShlLmJ1dHRvbigpKTsKKworICAgIG1faW5mby5Jbml0KGNvbnZl
cnRUb1BvaW50ZXJUeXBlKGUudHlwZSgpKSwgUG9pbnRlclR5cGVNb3VzZSwgUG9pbnRlckluZm86
Ok1vdXNlUG9pbnRlcklkLCBjaG9yZGVkQnV0dG9ucyk7Cit9CisKK1BsYXRmb3JtUG9pbnRlckV2
ZW50OjpQbGF0Zm9ybVBvaW50ZXJFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQgJiB0b3Vj
aFB0LCBpbnQgcGxhdGZvcm1UeXBlLCB1bnNpZ25lZCBtb2RpZmllcnMsIGRvdWJsZSB0aW1lc3Rh
bXApCisgICAgOiBQbGF0Zm9ybU1vdXNlRXZlbnQoKQoreworICAgIG1faW5mby5Jbml0KGNvbnZl
cnRUb1BvaW50ZXJUeXBlKFBsYXRmb3JtRXZlbnQ6OlR5cGUocGxhdGZvcm1UeXBlKSksIFBvaW50
ZXJUeXBlVG91Y2gsIHRvdWNoUHQuaWQoKSwgUG9pbnRlck5vQnV0dG9uRGVmaW5lKTsKKworICAg
IG1fbW9kaWZpZXJzID0gbW9kaWZpZXJzOworICAgIG1fdGltZXN0YW1wID0gdGltZXN0YW1wOwor
CisgICAgbV9wb3NpdGlvbiA9IHRvdWNoUHQucG9zKCk7CisgICAgbV9nbG9iYWxQb3NpdGlvbiA9
IHRvdWNoUHQuc2NyZWVuUG9zKCk7Cit9CisKKworLy8gZXhwZWN0cyBjb252ZXJzaW9uIGZyb20g
UGxhdGZvcm1Nb3VzZUV2ZW50IG9yIFBsYXRmb3JtVG91Y2hFdmVudCBvbmx5CisvLyAKK1BsYXRm
b3JtRXZlbnQ6OlR5cGUgUGxhdGZvcm1Qb2ludGVyRXZlbnQ6OmNvbnZlcnRUb1BvaW50ZXJUeXBl
KFBsYXRmb3JtRXZlbnQ6OlR5cGUgdCkKK3sKKyAgICBpZiAodCA9PSBNb3VzZU1vdmVkKSAKKyAg
ICAgICAgcmV0dXJuIFBvaW50ZXJNb3ZlOworICAgIGVsc2UgaWYgKHQgPT0gTW91c2VQcmVzc2Vk
KQorICAgICAgICByZXR1cm4gUG9pbnRlckRvd247CisgICAgZWxzZSBpZiAodCA9PSBNb3VzZVJl
bGVhc2VkKQorICAgICAgICByZXR1cm4gUG9pbnRlclVwOworICAgIGVsc2UgaWYgKHQgPT0gVG91
Y2hTdGFydCkKKyAgICAgICAgcmV0dXJuIFBvaW50ZXJEb3duOworICAgIGVsc2UgaWYgKHQgPT0g
VG91Y2hNb3ZlKQorICAgICAgICByZXR1cm4gUG9pbnRlck1vdmU7CisgICAgZWxzZSBpZiAodCA9
PSBUb3VjaEVuZCkKKyAgICAgICAgcmV0dXJuIFBvaW50ZXJVcDsKKyAgICBlbHNlIGlmICh0ID09
IFRvdWNoQ2FuY2VsKQorICAgICAgICByZXR1cm4gUG9pbnRlckNhbmNlbDsKKyAgICBlbHNlIHsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBOb1R5cGU7Cisg
ICAgfQorfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Bs
YXRmb3JtUG9pbnRlckV2ZW50Q29sbGVjdGlvbjo6UGxhdGZvcm1Qb2ludGVyRXZlbnRDb2xsZWN0
aW9uKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCAmIGUpCit7CisgICAgZXZlbnRzLmFwcGVuZChQ
bGF0Zm9ybVBvaW50ZXJFdmVudChlKSk7Cit9CisKK1BsYXRmb3JtUG9pbnRlckV2ZW50Q29sbGVj
dGlvbjo6UGxhdGZvcm1Qb2ludGVyRXZlbnRDb2xsZWN0aW9uKGNvbnN0IFBsYXRmb3JtVG91Y2hF
dmVudCAmIGUpCit7CisgICAgZm9yIChWZWN0b3I8UGxhdGZvcm1Ub3VjaFBvaW50Pjo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IGUudG91Y2hQb2ludHMoKS5iZWdpbigpOyBpdGVyICE9IGUudG91Y2hQ
b2ludHMoKS5lbmQoKTsgaXRlcisrKQorICAgIHsKKyAgICAgICAgY29uc3QgUGxhdGZvcm1Ub3Vj
aFBvaW50JiB0b3VjaFBvaW50ID0gKCppdGVyKTsKKyAgICAgICAgZXZlbnRzLmFwcGVuZChQbGF0
Zm9ybVBvaW50ZXJFdmVudCh0b3VjaFBvaW50LCBlLnR5cGUoKSwgZS5tb2RpZmllcnMoKSwgZS50
aW1lc3RhbXAoKSkpOworICAgIH0KK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCitzdGF0aWMgbG9uZyBjb252ZXJ0QnV0dG9uVG9DaG9yZGVkVmFsdWUoUG9p
bnRlckJ1dHRvbiBidG4pCit7CisgICAgc3dpdGNoKGJ0bikgeworCisgICAgY2FzZSBQb2ludGVy
Tm9CdXR0b246CisgICAgICAgIHJldHVybiBQb2ludGVyTm9CdXR0b25EZWZpbmU7CisgICAgY2Fz
ZSBQb2ludGVyTGVmdEJ1dHRvbjoKKyAgICAgICAgcmV0dXJuIFBvaW50ZXJMZWZ0QnV0dG9uRGVm
aW5lOworICAgIGNhc2UgUG9pbnRlck1pZGRsZUJ1dHRvbjoKKyAgICAgICAgcmV0dXJuIFBvaW50
ZXJNaWRkbGVCdXR0b25EZWZpbmU7CisgICAgY2FzZSBQb2ludGVyUmlnaHRCdXR0b246CisgICAg
ICAgIHJldHVybiBQb2ludGVyUmlnaHRCdXR0b25EZWZpbmU7CisgICAgY2FzZSBQb2ludGVyWDFC
dXR0b246CisgICAgICAgIHJldHVybiBQb2ludGVyWDFCdXR0b25EZWZpbmU7CisgICAgY2FzZSBQ
b2ludGVyWDJCdXR0b246CisgICAgICAgIHJldHVybiBQb2ludGVyWDJCdXR0b25EZWZpbmU7Cisg
ICAgY2FzZSBQb2ludGVyUGVuRXJhc2VCdXR0b246CisgICAgICAgIHJldHVybiBQb2ludGVyUGVu
RXJhc2VCdXR0b25EZWZpbmU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworc3RhdGljIGxvbmcgY29udmVy
dE1vdXNlQnV0dG9uVG9DaG9yZGVkVmFsdWUoTW91c2VCdXR0b24gYnRuKQoreworICAgIHN3aXRj
aChidG4pIHsKKworICAgIGNhc2UgTm9CdXR0b246CisgICAgICAgIHJldHVybiBQb2ludGVyTm9C
dXR0b25EZWZpbmU7CisgICAgY2FzZSBMZWZ0QnV0dG9uOgorICAgICAgICByZXR1cm4gUG9pbnRl
ckxlZnRCdXR0b25EZWZpbmU7CisgICAgY2FzZSBNaWRkbGVCdXR0b246CisgICAgICAgIHJldHVy
biBQb2ludGVyTWlkZGxlQnV0dG9uRGVmaW5lOworICAgIGNhc2UgUmlnaHRCdXR0b246CisgICAg
ICAgIHJldHVybiBQb2ludGVyUmlnaHRCdXR0b25EZWZpbmU7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwor
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vI2lmZGVmIF9fY2xh
bmdfXworLy8jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdnbG9iYWwtY29uc3Ry
dWN0b3JzIgorLy8jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdleGl0LXRpbWUt
ZGVzdHJ1Y3RvcnMiCisvLyNlbmRpZgorLy9QbGF0Zm9ybVBvaW50ZXJFdmVudFRyYWNrZXIgUGxh
dGZvcm1Qb2ludGVyRXZlbnQ6Om1fdHJhY2tlZFBvaW50ZXJFdmVudHM7CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZv
cm1Qb2ludGVyRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtUG9pbnRl
ckV2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBlYjdlNgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtUG9pbnRlckV2
ZW50LmgKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9y
dGlvbnMgQ29weXJpZ2h0IE1pY3Jvc29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFCisgKi8KKworLyoKKworVGhpcyBpbXBsZW1lbnRzIFBvaW50
ZXIgRXZlbnRzIGFzIGRlZmluZWQgaW4gUG9pbnRlciBFdmVudHMgc3BlY2lmaWNhdGlvbiBzdWJt
aXNzaW9uIHRvIFczQy4KKworICovCisKKyNpZm5kZWYgUGxhdGZvcm1Qb2ludGVyRXZlbnRfaAor
I2RlZmluZSBQbGF0Zm9ybVBvaW50ZXJFdmVudF9oCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVRvdWNoRXZl
bnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgUGxhdGZvcm1Qb2ludGVy
RXZlbnQ7CisKKyAgICBlbnVtIFBvaW50ZXJUeXBlIHsgCisgICAgICAgIFBvaW50ZXJUeXBlTWlu
ID0gMCwgCisgICAgICAgIFBvaW50ZXJUeXBlVG91Y2ggPSAwLCAKKyAgICAgICAgUG9pbnRlclR5
cGVQZW4gPSAxLCAKKyAgICAgICAgUG9pbnRlclR5cGVNb3VzZSA9IDIsIAorICAgICAgICBQb2lu
dGVyVHlwZU1heCA9IDMgCisgICAgfTsKKworICAgIGVudW0gUG9pbnRlckJ1dHRvbiB7IAorICAg
ICAgICBQb2ludGVyTm9CdXR0b24gPSAtMSwgICAgICAvLyBubyBidXR0b25zIHByZXNzZWQgb24g
ZGV2aWNlCisgICAgICAgIFBvaW50ZXJMZWZ0QnV0dG9uLCAgICAgICAgIC8vIExlZnQgbW91c2Ug
YnV0dG9uLCBUb3VjaCBjb250YWN0LCBQZW4gY29udGFjdAorICAgICAgICBQb2ludGVyTWlkZGxl
QnV0dG9uLCAgICAgICAvLyBNaWRkbGUgbW91c2UgYnV0dG9uCisgICAgICAgIFBvaW50ZXJSaWdo
dEJ1dHRvbiwgICAgICAgIC8vIFJpZ2h0IG1vdXNlIGJ1dHRvbiwgUGVuIGNvbnRhY3Qgd2l0aCBi
YXJyZWwgYnV0dG9uIHByZXNzZWQKKyAgICAgICAgUG9pbnRlclgxQnV0dG9uLCAgICAgICAgICAg
Ly8gQmFjayBtb3VzZSBidXR0b24KKyAgICAgICAgUG9pbnRlclgyQnV0dG9uLCAgICAgICAgICAg
Ly8gRm9yd2FyZCBtb3VzZSBidXR0b24KKyAgICAgICAgUG9pbnRlclBlbkVyYXNlQnV0dG9uICAg
ICAgLy8gUGVuIGNvbnRhY3Qgd2l0aCBlcmFzZSBidXR0b24gcHJlc3NlZAorICAgIH07CisKKyAg
ICB0eXBlZGVmIHN0cnVjdCBQb2ludGVySW5mbyB7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGxv
bmcgTW91c2VQb2ludGVySWQgPSAxOworICAgICAgICBzdGF0aWMgY29uc3QgbG9uZyBQZW5Qb2lu
dGVySWQgPSAyOworCisgICAgICAgIC8vIGNvcHkgb2YgUGxhdGZvcm1FdmVudCBmaWVsZCBtX3R5
cGUKKyAgICAgICAgdW5zaWduZWQgbV90eXBlOyAKKworICAgICAgICAvLyBzdGFydCBvZiBwb2lu
dGVyIGV2ZW50IHByb3BlcnRpZXMKKyAgICAgICAgbG9uZyBtX3BvaW50ZXJJZDsgICAvLyBJZCBv
ZiBwb2ludGVyIChtb3VzZSwgdG91Y2gxLCAuLi4sIHBlbjEsLi4uICkKKyAgICAgICAgbG9uZyBt
X3dpZHRoOworICAgICAgICBsb25nIG1faGVpZ2h0OworICAgICAgICBkb3VibGUgbV9wcmVzc3Vy
ZTsKKyAgICAgICAgbG9uZyBtX3RpbHRYOworICAgICAgICBsb25nIG1fdGlsdFk7CisgICAgICAg
IFBvaW50ZXJUeXBlIG1fcG9pbnRlclR5cGU7ICAvLyBUeXBlIG9mIHBvaW50ZXIgKG1vdXNlLCB0
b3VjaCwgcGVuKQorICAgICAgICBib29sIG1fcHJpbWFyeVBvaW50ZXI7CisKKyAgICAgICAgbG9u
ZyBtX2Nob3JkZWRCdXR0b25zOyAvLyBDb21iaW5lZCBidXR0b25zIGZvciB0aGUgcG9pbnRlcgor
CisgICAgICAgIGJvb2wgbV9wcm9jZXNzZWQ7ICAgLy8gaWYgdHJ1ZSwgZG8gbm90IGRpc3BhdGNo
IHRvIHNjcmlwdGluZyBlbmdpbmUKKworICAgICAgICB2b2lkIEluaXQoUGxhdGZvcm1FdmVudDo6
VHlwZSwgUG9pbnRlclR5cGUsIGxvbmcgcG9pbnRlcklkLCBsb25nIGNob3JkZWRCdXR0b25zKTsK
KworICAgICAgICBib29sIGlzQnV0dG9uUHJlc3NlZChQb2ludGVyQnV0dG9uKTsKKyAgICAgICAg
dm9pZCBhZGRCdXR0b25zKGxvbmcgY2hvcmRlZEJ1dHRvbnMpIHsgbV9jaG9yZGVkQnV0dG9ucyA9
IG1fY2hvcmRlZEJ1dHRvbnMgfCBjaG9yZGVkQnV0dG9uczsgfQorCisgICAgfSBQb2ludGVySW5m
bzsKKworCisgICAgY2xhc3MgUGxhdGZvcm1Qb2ludGVyRXZlbnQgOiBwdWJsaWMgUGxhdGZvcm1N
b3VzZUV2ZW50IHsKKworICAgIHB1YmxpYzoKKworICAgICAgICBleHBsaWNpdCBQbGF0Zm9ybVBv
aW50ZXJFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQgJik7CisgICAgICAgIGV4cGxpY2l0
IFBsYXRmb3JtUG9pbnRlckV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCAmLCBpbnQsIHVu
c2lnbmVkLCBkb3VibGUpOworCisgICAgICAgIGJvb2wgaXNQcmltYXJ5KCkgeyByZXR1cm4gbV9p
bmZvLm1fcHJpbWFyeVBvaW50ZXI7IH0KKyAgICAgICAgdm9pZCBzZXRQcmltYXJ5KGJvb2wgcHJp
bWFyeSkgeyBtX2luZm8ubV9wcmltYXJ5UG9pbnRlciA9IHByaW1hcnk7IH0KKworICAgICAgICBj
b25zdCBQb2ludGVySW5mbyYgZ2V0UG9pbnRlckluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm87
IH0gCisKKyAgICAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VHlw
ZT4obV9pbmZvLm1fdHlwZSk7IH0KKworICAgICAgICBib29sIFBvaW50ZXJQcm9jZXNzZWQoKSBj
b25zdCB7IHJldHVybiBtX2luZm8ubV9wcm9jZXNzZWQ7IH0KKyAgICBwcm90ZWN0ZWQ6CisKKyAg
ICAgICAgUGxhdGZvcm1FdmVudDo6VHlwZSBjb252ZXJ0VG9Qb2ludGVyVHlwZShQbGF0Zm9ybUV2
ZW50OjpUeXBlKTsKKworICAgICAgICBQb2ludGVySW5mbyBtX2luZm87CisKKyAgICBwcml2YXRl
OgorICAgICAgICBQbGF0Zm9ybVBvaW50ZXJFdmVudCgpIHt9CisgICAgfTsKKworCisgICAgY2xh
c3MgUGxhdGZvcm1Qb2ludGVyRXZlbnRDb2xsZWN0aW9uIHsKKworICAgIHB1YmxpYzoKKworICAg
ICAgICBleHBsaWNpdCBQbGF0Zm9ybVBvaW50ZXJFdmVudENvbGxlY3Rpb24oY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50ICYpOworICAgICAgICBleHBsaWNpdCBQbGF0Zm9ybVBvaW50ZXJFdmVudENv
bGxlY3Rpb24oY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50ICYpOworCisgICAgICAgIFZlY3RvcjxQ
bGF0Zm9ybVBvaW50ZXJFdmVudD4gZXZlbnRzOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgUGxh
dGZvcm1Qb2ludGVyRXZlbnRDb2xsZWN0aW9uKCkge30KKyAgICB9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQbGF0Zm9ybVBvaW50ZXJFdmVudF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL2ZlYXR1cmVzLmd5cGkKaW5kZXggZjJlMGE0MS4uMjExMzZlYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vZmVhdHVyZXMuZ3lwaQpAQCAtOTksNiArOTksNyBAQAogICAgICAgJ0VOQUJMRV9Q
QUdFX1ZJU0lCSUxJVFlfQVBJPTEnLAogICAgICAgJ0VOQUJMRV9QRVJGT1JNQU5DRV9USU1FTElO
RT0xJywKICAgICAgICdFTkFCTEVfUE9JTlRFUl9MT0NLPTEnLAorICAgICAgJ0VOQUJMRV9QT0lO
VEVSX0VWRU5UUz0xJywKICAgICAgICdFTkFCTEVfUFJPR1JFU1NfRUxFTUVOVD0xJywKICAgICAg
ICdFTkFCTEVfUFJPWElNSVRZX0VWRU5UUz0wJywKICAgICAgICdFTkFCTEVfUVVPVEE9MScsCg==
</data>
<flag name="review"
          id="209594"
          type_id="1"
          status="-"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="209593"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>194399</attachid>
            <date>2013-03-21 17:41:01 -0700</date>
            <delta_ts>2013-04-23 12:24:54 -0700</delta_ts>
            <desc>Updated pointer events implementation</desc>
            <filename>pointer-events-20130321.patch</filename>
            <type>text/plain</type>
            <size>58770</size>
            <attacher name="Scott Blomquist">sblom</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2Uv
V2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDc1OWI0ZjAuLjRiMjNhOTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dl
YkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMSw2ICsxLDcgQEAKICMgQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICMgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29t
PgogIyBDb3B5cmlnaHQgKEMpIDIwMDkgQ2FtZXJvbiBNY0Nvcm1hY2sgPGNhbUBtY2MuaWQuYXU+
CisjIENvcHlyaWdodCAoQykgMjAxMyBNaWNyb3NvZnQgT3BlbiBUZWNobm9sb2dpZXMsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjY1
LDYgKzI2Niw3IEBAIEJJTkRJTkdfSURMUyA9IFwKICAgICAkKFdlYkNvcmUpL2RvbS9Ob3RhdGlv
bi5pZGwgXAogICAgICQoV2ViQ29yZSkvZG9tL092ZXJmbG93RXZlbnQuaWRsIFwKICAgICAkKFdl
YkNvcmUpL2RvbS9QYWdlVHJhbnNpdGlvbkV2ZW50LmlkbCBcCisgICAgJChXZWJDb3JlKS9kb20v
UG9pbnRlckV2ZW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9kb20vUG9wU3RhdGVFdmVudC5pZGwg
XAogICAgICQoV2ViQ29yZSkvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5pZGwgXAogICAgICQo
V2ViQ29yZSkvZG9tL1Byb2dyZXNzRXZlbnQuaWRsIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0Rlcml2ZWRTb3VyY2VzLnByaSBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnBy
aQppbmRleCA0MjEyYjg1Li5jNWM4ZWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9EZXJp
dmVkU291cmNlcy5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCkBA
IC0yNzEsNiArMjcxLDcgQEAgSURMX0JJTkRJTkdTICs9IFwKICAgICAkJFBXRC9kb20vTm90YXRp
b24uaWRsIFwKICAgICAkJFBXRC9kb20vT3ZlcmZsb3dFdmVudC5pZGwgXAogICAgICQkUFdEL2Rv
bS9QYWdlVHJhbnNpdGlvbkV2ZW50LmlkbCBcCisgICAgJCRQV0QvZG9tL1BvaW50ZXJFdmVudC5p
ZGwgXAogICAgICQkUFdEL2RvbS9Qb3BTdGF0ZUV2ZW50LmlkbCBcCiAgICAgJCRQV0QvZG9tL1By
b2Nlc3NpbmdJbnN0cnVjdGlvbi5pZGwgXAogICAgICQkUFdEL2RvbS9Qcm9ncmVzc0V2ZW50Lmlk
bCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAzZDRhMDcyLi44MGNjM2EyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTE0MTksNiArMTQxOSw3IEBAIGRvbV9i
aW5kaW5nX2lkbHMgKz0gXAogCSQoV2ViQ29yZSkvZG9tL05vdGF0aW9uLmlkbCBcCiAJJChXZWJD
b3JlKS9kb20vT3ZlcmZsb3dFdmVudC5pZGwgXAogCSQoV2ViQ29yZSkvZG9tL1BhZ2VUcmFuc2l0
aW9uRXZlbnQuaWRsIFwKKwkkKFdlYkNvcmUpL2RvbS9Qb2ludGVyRXZlbnQuaWRsIFwKIAkkKFdl
YkNvcmUpL2RvbS9Qb3BTdGF0ZUV2ZW50LmlkbCBcCiAJJChXZWJDb3JlKS9kb20vUHJvY2Vzc2lu
Z0luc3RydWN0aW9uLmlkbCBcCiAJJChXZWJDb3JlKS9kb20vUHJvZ3Jlc3NFdmVudC5pZGwgXApA
QCAtNTk4Miw2ICs1OTgzLDcgQEAgd2ViY29yZV9wbGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtUG9pbnRlckV2ZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtU2NyZWVuLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2ll
cy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5oIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQppbmRleCA5ZTA4YTkzLi43M2I4OWM5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBA
IC0zMzEsNiArMzMxLDcgQEAKICAgICAgICAgICAgICdkb20vTm90YXRpb24uaWRsJywKICAgICAg
ICAgICAgICdkb20vT3ZlcmZsb3dFdmVudC5pZGwnLAogICAgICAgICAgICAgJ2RvbS9QYWdlVHJh
bnNpdGlvbkV2ZW50LmlkbCcsCisgICAgICAgICAgICAnZG9tL1BvaW50ZXJFdmVudC5pZGwnLAog
ICAgICAgICAgICAgJ2RvbS9Qb3BTdGF0ZUV2ZW50LmlkbCcsCiAgICAgICAgICAgICAnZG9tL1By
b2Nlc3NpbmdJbnN0cnVjdGlvbi5pZGwnLAogICAgICAgICAgICAgJ2RvbS9Qcm9ncmVzc0V2ZW50
LmlkbCcsCkBAIC0zMDM2LDYgKzMwMzcsNyBAQAogICAgICAgICAgICAgJ2RvbS9QYWdlVHJhbnNp
dGlvbkV2ZW50LmNwcCcsCiAgICAgICAgICAgICAnZG9tL1BhZ2VUcmFuc2l0aW9uRXZlbnQuaCcs
CiAgICAgICAgICAgICAnZG9tL1BlbmRpbmdTY3JpcHQuY3BwJywKKyAgICAgICAgICAgICdkb20v
UG9pbnRlckV2ZW50LmNwcCcsCiAgICAgICAgICAgICAnZG9tL1BvcFN0YXRlRXZlbnQuY3BwJywK
ICAgICAgICAgICAgICdkb20vUG9wU3RhdGVFdmVudC5oJywKICAgICAgICAgICAgICdkb20vUG9z
aXRpb24uY3BwJywKQEAgLTM2OTQsNiArMzY5Niw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
UGxhdGZvcm1JbnN0cnVtZW50YXRpb24uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vUGxhdGZv
cm1NZW1vcnlJbnN0cnVtZW50YXRpb24uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0
Zm9ybU1lbW9yeUluc3RydW1lbnRhdGlvbi5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0
Zm9ybVBvaW50ZXJFdmVudC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtUG9p
bnRlckV2ZW50LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtVG91Y2hFdmVudC5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9QbGF0Zm9ybVRvdWNoUG9pbnQuaCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CmluZGV4IDQ4YTVhMjEuLjViNzU4OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC03LDYgKzcs
NyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMyBNaWNyb3NvZnQgT3BlbiBUZWNobm9sb2dpZXMsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcyLDcgKzI3Mywx
OCBAQCBwdWJsaWM6CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihzY3JvbGwp
OwogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoc2VsZWN0KTsKICAgICBERUZJ
TkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHN1Ym1pdCk7Ci0KKyNpZiBFTkFCTEUoUE9JTlRF
Ul9FVkVOVFMpCisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihwb2ludGVyZG93
bik7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihwb2ludGVydXApOworICAg
IERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIocG9pbnRlcmNhbmNlbCk7CisgICAgREVG
SU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihwb2ludGVybW92ZSk7CisgICAgREVGSU5FX0FU
VFJJQlVURV9FVkVOVF9MSVNURU5FUihwb2ludGVyb3Zlcik7CisgICAgREVGSU5FX0FUVFJJQlVU
RV9FVkVOVF9MSVNURU5FUihwb2ludGVyb3V0KTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5U
X0xJU1RFTkVSKHBvaW50ZXJlbnRlcik7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNU
RU5FUihwb2ludGVybGVhdmUpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIo
Z290cG9pbnRlcmNhcHR1cmUpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIo
bG9zdHBvaW50ZXJjYXB0dXJlKTsKKyNlbmRpZgogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRf
TElTVEVORVIoYmx1cik7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihlcnJv
cik7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihmb2N1cyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmlkbAppbmRleCBjYWE1OGNmLi4xYTZlYTZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5pZGwKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAxMyBNaWNyb3NvZnQgT3BlbiBUZWNobm9sb2dpZXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIyLDYgKzMyMywxNiBAQAogICAgIC8vIGF0dHJp
YnV0ZSBbTm90RW51bWVyYWJsZV0gRXZlbnRMaXN0ZW5lciBvbnZvbHVtZWNoYW5nZTsKICAgICAv
LyBhdHRyaWJ1dGUgW05vdEVudW1lcmFibGVdIEV2ZW50TGlzdGVuZXIgb253YWl0aW5nOwogCisg
ICAgLy8gUG9pbnRlciBldmVudHMKKyAgICBbTm90RW51bWVyYWJsZV0gYXR0cmlidXRlIEV2ZW50
TGlzdGVuZXIgb25wb2ludGVyZG93bjsKKyAgICBbTm90RW51bWVyYWJsZV0gYXR0cmlidXRlIEV2
ZW50TGlzdGVuZXIgb25wb2ludGVydXA7CisgICAgW05vdEVudW1lcmFibGVdIGF0dHJpYnV0ZSBF
dmVudExpc3RlbmVyIG9ucG9pbnRlcmNhbmNlbDsKKyAgICBbTm90RW51bWVyYWJsZV0gYXR0cmli
dXRlIEV2ZW50TGlzdGVuZXIgb25wb2ludGVybW92ZTsKKyAgICBbTm90RW51bWVyYWJsZV0gYXR0
cmlidXRlIEV2ZW50TGlzdGVuZXIgb25wb2ludGVyb3ZlcjsKKyAgICBbTm90RW51bWVyYWJsZV0g
YXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25wb2ludGVyb3V0OworICAgIFtOb3RFbnVtZXJhYmxl
XSBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmdvdHBvaW50ZXJjYXB0dXJlOworICAgIFtOb3RF
bnVtZXJhYmxlXSBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmxvc3Rwb2ludGVyY2FwdHVyZTsK
KwogICAgIC8vIFdlYktpdCBleHRlbnNpb25zCiAgICAgW05vdEVudW1lcmFibGVdIGF0dHJpYnV0
ZSBFdmVudExpc3RlbmVyIG9uYmVmb3JlY3V0OwogICAgIFtOb3RFbnVtZXJhYmxlXSBhdHRyaWJ1
dGUgRXZlbnRMaXN0ZW5lciBvbmN1dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4IDZjYTViMjIuLmNi
MThlYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtNCw2ICs0LDcgQEAKICAqICAgICAgICAgICAo
QykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogICAgICAgICAgIChDKSAyMDAx
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBNaWNyb3Nv
ZnQgT3BlbiBUZWNobm9sb2dpZXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjA3LDYgKzIwOCwxNiBAQCBwdWJsaWM6CiAgICAgREVGSU5FX0FUVFJJ
QlVURV9FVkVOVF9MSVNURU5FUihzY3JvbGwpOwogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRf
TElTVEVORVIoc2VsZWN0KTsKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHN1
Ym1pdCk7CisjaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQorICAgIERFRklORV9BVFRSSUJVVEVf
RVZFTlRfTElTVEVORVIocG9pbnRlcmRvd24pOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRf
TElTVEVORVIocG9pbnRlcnVwKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVS
KHBvaW50ZXJjYW5jZWwpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIocG9p
bnRlcm1vdmUpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIocG9pbnRlcm92
ZXIpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIocG9pbnRlcm91dCk7Cisg
ICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihnb3Rwb2ludGVyY2FwdHVyZSk7Cisg
ICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihsb3N0cG9pbnRlcmNhcHR1cmUpOwor
I2VuZGlmCiAKICAgICAvLyBUaGVzZSBmb3VyIGF0dHJpYnV0ZSBldmVudCBoYW5kbGVyIGF0dHJp
YnV0ZXMgYXJlIG92ZXJyaWRkZW4gYnkgSFRNTEJvZHlFbGVtZW50CiAgICAgLy8gYW5kIEhUTUxG
cmFtZVNldEVsZW1lbnQgdG8gZm9yd2FyZCB0byB0aGUgRE9NV2luZG93LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuaWRsCmluZGV4IGZhYTczYTguLjU0YzFkZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5pZGwKQEAg
LTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwg
V2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBNaWNy
b3NvZnQgT3BlbiBUZWNobm9sb2dpZXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjE1LDYgKzIxNiwxNiBAQAogICAgIC8vIGF0dHJpYnV0ZSBbTm90
RW51bWVyYWJsZV0gRXZlbnRMaXN0ZW5lciBvbnZvbHVtZWNoYW5nZTsKICAgICAvLyBhdHRyaWJ1
dGUgW05vdEVudW1lcmFibGVdIEV2ZW50TGlzdGVuZXIgb253YWl0aW5nOwogCisgICAgLy8gUG9p
bnRlciBldmVudHMKKyAgICBbTm90RW51bWVyYWJsZV0gYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIg
b25wb2ludGVyZG93bjsKKyAgICBbTm90RW51bWVyYWJsZV0gYXR0cmlidXRlIEV2ZW50TGlzdGVu
ZXIgb25wb2ludGVydXA7CisgICAgW05vdEVudW1lcmFibGVdIGF0dHJpYnV0ZSBFdmVudExpc3Rl
bmVyIG9ucG9pbnRlcmNhbmNlbDsKKyAgICBbTm90RW51bWVyYWJsZV0gYXR0cmlidXRlIEV2ZW50
TGlzdGVuZXIgb25wb2ludGVybW92ZTsKKyAgICBbTm90RW51bWVyYWJsZV0gYXR0cmlidXRlIEV2
ZW50TGlzdGVuZXIgb25wb2ludGVyb3ZlcjsKKyAgICBbTm90RW51bWVyYWJsZV0gYXR0cmlidXRl
IEV2ZW50TGlzdGVuZXIgb25wb2ludGVyb3V0OworICAgIFtOb3RFbnVtZXJhYmxlXSBhdHRyaWJ1
dGUgRXZlbnRMaXN0ZW5lciBvbmdvdHBvaW50ZXJjYXB0dXJlOworICAgIFtOb3RFbnVtZXJhYmxl
XSBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmxvc3Rwb2ludGVyY2FwdHVyZTsKKwogICAgIC8v
IFdlYktpdCBleHRlbnNpb25zCiAgICAgW05vdEVudW1lcmFibGVdIGF0dHJpYnV0ZSBFdmVudExp
c3RlbmVyIG9uYmVmb3JlY3V0OwogICAgIFtOb3RFbnVtZXJhYmxlXSBhdHRyaWJ1dGUgRXZlbnRM
aXN0ZW5lciBvbmN1dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVz
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCmluZGV4IDNiNWYyMzIuLjhjZmQy
MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDUsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDA2IEpvbiBTaGllciAoanNoaWVyQGlhc3RhdGUuZWR1KQorICogQ29w
eXJpZ2h0IChDKSAyMDEzIE1pY3Jvc29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNTQsNiArMjU1LDE3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBtYWNybyhhdXRvY29tcGxldGUpIFwKICAgICBtYWNybyhh
dXRvY29tcGxldGVlcnJvcikgXAogICAgIFwKKyAgICBtYWNybyhwb2ludGVyZG93bikgXAorICAg
IG1hY3JvKHBvaW50ZXJ1cCkgXAorICAgIG1hY3JvKHBvaW50ZXJjYW5jZWwpIFwKKyAgICBtYWNy
byhwb2ludGVybW92ZSkgXAorICAgIG1hY3JvKHBvaW50ZXJvdmVyKSBcCisgICAgbWFjcm8ocG9p
bnRlcm91dCkgXAorICAgIG1hY3JvKHBvaW50ZXJlbnRlcikgXAorICAgIG1hY3JvKHBvaW50ZXJs
ZWF2ZSkgXAorICAgIG1hY3JvKGdvdHBvaW50ZXJjYXB0dXJlKSBcCisgICAgbWFjcm8obG9zdHBv
aW50ZXJjYXB0dXJlKSBcCisgICAgXAogICAgIG1hY3JvKHdlYmtpdHByZXJlbmRlcnN0YXJ0KSBc
CiAgICAgbWFjcm8od2Via2l0cHJlcmVuZGVyc3RvcCkgXAogICAgIG1hY3JvKHdlYmtpdHByZXJl
bmRlcmxvYWQpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmlu
IGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaW4KaW5kZXggZmI3NGVmNi4uYWJlMDY0
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaW4KKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaW4KQEAgLTE5LDYgKzE5LDggQEAgTXV0YXRpb25F
dmVudAogTXV0YXRpb25FdmVudHMgaW50ZXJmYWNlTmFtZT1NdXRhdGlvbkV2ZW50CiBPdmVyZmxv
d0V2ZW50CiBQYWdlVHJhbnNpdGlvbkV2ZW50CitQb2ludGVyRXZlbnQKK1BvaW50ZXJFdmVudHMg
aW50ZXJmYWNlTmFtZT1Qb2ludGVyRXZlbnQKIFBvcFN0YXRlRXZlbnQKIFByb2dyZXNzRXZlbnQK
IFRleHRFdmVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IDMwZDEzZTYuLmZjYzZhNjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKQEAgLTUsNiArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgTWljcm9zb2Z0IE9wZW4gVGVjaG5vbG9naWVzLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEyNyw2ICsxMjgsMTAg
QEAKICNpbmNsdWRlICJHZXN0dXJlRXZlbnQuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKFBPSU5U
RVJfRVZFTlRTKQorI2luY2x1ZGUgIlBvaW50ZXJFdmVudC5oIgorI2VuZGlmCisKICNpZiBFTkFC
TEUoSU5TUEVDVE9SKQogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNlbmRpZgpA
QCAtMjM5Niw2ICsyNDAxLDEzIEBAIGJvb2wgTm9kZTo6ZGlzcGF0Y2hHZXN0dXJlRXZlbnQoY29u
c3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGV2ZW50KQogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
UE9JTlRFUl9FVkVOVFMpCitib29sIE5vZGU6OmRpc3BhdGNoUG9pbnRlckV2ZW50KGNvbnN0IFBs
YXRmb3JtUG9pbnRlckV2ZW50JiBldmVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUs
IGludCBkZXRhaWwsIE5vZGUqIHJlbGF0ZWRUYXJnZXQpCit7CisgICAgcmV0dXJuIEV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCh0aGlzLCBQb2ludGVyRXZlbnREaXNwYXRjaE1lZGlhdG9y
OjpjcmVhdGUoUG9pbnRlckV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCBkb2N1bWVudCgpLT5kZWZh
dWx0VmlldygpLCBldmVudCwgZGV0YWlsLCByZWxhdGVkVGFyZ2V0KSkpOworfQorI2VuZGlmCisK
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogYm9vbCBOb2RlOjpkaXNwYXRjaFRvdWNoRXZlbnQo
UGFzc1JlZlB0cjxUb3VjaEV2ZW50PiBldmVudCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IGI0MDc4NjMu
LmEyMDg3OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuaApAQCAtNCw2ICs0LDcgQEAKICAqICAgICAgICAgICAoQykg
MjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9i
aWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29t
LykKKyAqIENvcHlyaWdodCAoQykgMjAxMyBNaWNyb3NvZnQgT3BlbiBUZWNobm9sb2dpZXMsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNzYsNiArNzcs
NyBAQCBjbGFzcyBOb2RlUmFyZURhdGE7CiBjbGFzcyBOb2RlUmVuZGVyaW5nQ29udGV4dDsKIGNs
YXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDsKIGNsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKK2Ns
YXNzIFBsYXRmb3JtUG9pbnRlckV2ZW50OwogY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OwogY2xh
c3MgUXVhbGlmaWVkTmFtZTsKIGNsYXNzIFJhZGlvTm9kZUxpc3Q7CkBAIC02NDgsNiArNjUwLDkg
QEAgcHVibGljOgogI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKICAgICBib29sIGRpc3BhdGNo
R2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50Jik7CiAjZW5kaWYKKyNpZiBF
TkFCTEUoUE9JTlRFUl9FVkVOVFMpCisgICAgYm9vbCBkaXNwYXRjaFBvaW50ZXJFdmVudChjb25z
dCBQbGF0Zm9ybVBvaW50ZXJFdmVudCYsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBp
bnQgY2xpY2tDb3VudCA9IDAsIE5vZGUqIHJlbGF0ZWRUYXJnZXQgPSAwKTsKKyNlbmRpZgogI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgYm9vbCBkaXNwYXRjaFRvdWNoRXZlbnQoUGFzc1Jl
ZlB0cjxUb3VjaEV2ZW50Pik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Qb2ludGVyRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1BvaW50ZXJFdmVudC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRkOTUwYzYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9pbnRlckV2ZW50LmNwcApAQCAtMCwwICsxLDI1
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTWlj
cm9zb2Z0IE9wZW4gVGVjaG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUG9pbnRlckV2ZW50Lmgi
CisKKyNpbmNsdWRlICJFdmVudERpc3BhdGNoZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgi
CisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJI
VE1MSUZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVBvaW50ZXJFdmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBp
bnQgYWRqdXN0ZWRDbGllbnRYKGludCBpbm5lckNsaWVudFgsIEhUTUxJRnJhbWVFbGVtZW50KiBp
ZnJhbWUsIEZyYW1lVmlldyogZnJhbWVWaWV3KQoreworICAgIHJldHVybiBpZnJhbWUtPm9mZnNl
dExlZnQoKSAtIGZyYW1lVmlldy0+c2Nyb2xsWCgpICsgaW5uZXJDbGllbnRYOworfQorCitzdGF0
aWMgaW50IGFkanVzdGVkQ2xpZW50WShpbnQgaW5uZXJDbGllbnRZLCBIVE1MSUZyYW1lRWxlbWVu
dCogaWZyYW1lLCBGcmFtZVZpZXcqIGZyYW1lVmlldykKK3sKKyAgICByZXR1cm4gaWZyYW1lLT5v
ZmZzZXRUb3AoKSAtIGZyYW1lVmlldy0+c2Nyb2xsWSgpICsgaW5uZXJDbGllbnRZOworfQorCitQ
b2ludGVyRXZlbnRJbml0OjpQb2ludGVyRXZlbnRJbml0KCkKKyAgICA6IHBvaW50ZXJJZCgwKQor
ICAgICwgd2lkdGgoMCkKKyAgICAsIGhlaWdodCgwKQorICAgICwgcHJlc3N1cmUoMCkKKyAgICAs
IHRpbHRYKDApCisgICAgLCB0aWx0WSgwKQorICAgICwgcG9pbnRlclR5cGUoIiIpCisgICAgLCBp
c1ByaW1hcnkoZmFsc2UpCit7Cit9CisKKworUGFzc1JlZlB0cjxQb2ludGVyRXZlbnQ+IFBvaW50
ZXJFdmVudDo6Y3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgUG9pbnRlckV2
ZW50SW5pdCYgaW5pdGlhbGl6ZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQb2ludGVy
RXZlbnQodHlwZSwgaW5pdGlhbGl6ZXIpKTsKK30KKworUGFzc1JlZlB0cjxQb2ludGVyRXZlbnQ+
IFBvaW50ZXJFdmVudDo6Y3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNz
UmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywgY29uc3QgUGxhdGZvcm1Qb2ludGVyRXZlbnQmIGV2
ZW50LCBpbnQgZGV0YWlsLCBQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQpCit7CisgICAg
Ym9vbCBpc0NhbmNlbGFibGUgPSBldmVudFR5cGUgIT0gZXZlbnROYW1lcygpLnBvaW50ZXJtb3Zl
RXZlbnQ7CisKKyAgICByZXR1cm4gUG9pbnRlckV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCB0cnVl
LCBpc0NhbmNlbGFibGUsIHZpZXcsCisgICAgICAgIGRldGFpbCwgZXZlbnQuZ2xvYmFsUG9zaXRp
b24oKS54KCksIGV2ZW50Lmdsb2JhbFBvc2l0aW9uKCkueSgpLCBldmVudC5wb3NpdGlvbigpLngo
KSwgZXZlbnQucG9zaXRpb24oKS55KCksCisjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKKyAgICAg
ICAgZXZlbnQubW92ZW1lbnREZWx0YSgpLngoKSwgZXZlbnQubW92ZW1lbnREZWx0YSgpLnkoKSwK
KyNlbmRpZgorICAgICAgICBldmVudC5jdHJsS2V5KCksCisgICAgICAgIGV2ZW50LmFsdEtleSgp
LAorICAgICAgICBldmVudC5zaGlmdEtleSgpLAorICAgICAgICBldmVudC5tZXRhS2V5KCksCisg
ICAgICAgIGV2ZW50LmJ1dHRvbigpLAorICAgICAgICByZWxhdGVkVGFyZ2V0LAorICAgICAgICAw
LCAvLyBQYXNzUmVmUHRyPENsaXBib2FyZD4gY2xpcGJvYXJkCisgICAgICAgIGZhbHNlLCAvLyBi
b29sIGlzU2ltdWxhdGVkCisgICAgICAgIGV2ZW50LmdldFBvaW50ZXJJbmZvKCkpOworfQorCitQ
b2ludGVyRXZlbnQ6OlBvaW50ZXJFdmVudCgpIDogTW91c2VFdmVudCgpCit7Cit9CisKK1BvaW50
ZXJFdmVudDo6UG9pbnRlckV2ZW50KAorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwKKyAg
ICBib29sIGNhbkJ1YmJsZSwKKyAgICBib29sIGNhbmNlbGFibGUsCisgICAgUGFzc1JlZlB0cjxB
YnN0cmFjdFZpZXc+IHZpZXcsCisgICAgaW50IGRldGFpbCwKKyAgICBpbnQgc2NyZWVuWCwKKyAg
ICBpbnQgc2NyZWVuWSwKKyAgICBpbnQgcGFnZVgsCisgICAgaW50IHBhZ2VZLAorI2lmIEVOQUJM
RShQT0lOVEVSX0xPQ0spCisgICAgaW50IG1vdmVtZW50WCwKKyAgICBpbnQgbW92ZW1lbnRZLAor
I2VuZGlmCisgICAgYm9vbCBjdHJsS2V5LAorICAgIGJvb2wgYWx0S2V5LAorICAgIGJvb2wgc2hp
ZnRLZXksCisgICAgYm9vbCBtZXRhS2V5LAorICAgIHVuc2lnbmVkIHNob3J0IGJ1dHRvbiwKKyAg
ICBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiByZWxhdGVkVGFyZ2V0LAorICAgIFBhc3NSZWZQdHI8
Q2xpcGJvYXJkPiBjbGlwYm9hcmQsCisgICAgYm9vbCBpc1NpbXVsYXRlZCwKKyAgICBjb25zdCBQ
b2ludGVySW5mbyYgZXZlbnRJbmZvCisgICAgKQorICAgIDogTW91c2VFdmVudCgKKyAgICAgICAg
dHlwZSwKKyAgICAgICAgY2FuQnViYmxlLAorICAgICAgICBjYW5jZWxhYmxlLAorICAgICAgICB2
aWV3LAorICAgICAgICBkZXRhaWwsCisgICAgICAgIHNjcmVlblgsCisgICAgICAgIHNjcmVlblks
CisgICAgICAgIHBhZ2VYLAorICAgICAgICBwYWdlWSwKKyNpZiBFTkFCTEUoUE9JTlRFUl9MT0NL
KQorICAgICAgICBtb3ZlbWVudFgsCisgICAgICAgIG1vdmVtZW50WSwKKyNlbmRpZgorICAgICAg
ICBjdHJsS2V5LAorICAgICAgICBhbHRLZXksCisgICAgICAgIHNoaWZ0S2V5LAorICAgICAgICBt
ZXRhS2V5LAorICAgICAgICBidXR0b24sCisgICAgICAgIHJlbGF0ZWRUYXJnZXQsCisgICAgICAg
IGNsaXBib2FyZCwKKyAgICAgICAgaXNTaW11bGF0ZWQKKyAgICApCisgICAgLCBtX3BvaW50ZXJJ
ZChldmVudEluZm8ubV9wb2ludGVySWQpCisgICAgLCBtX3dpZHRoKGV2ZW50SW5mby5tX3dpZHRo
KQorICAgICwgbV9oZWlnaHQoZXZlbnRJbmZvLm1faGVpZ2h0KQorICAgICwgbV9wcmVzc3VyZShl
dmVudEluZm8ubV9wcmVzc3VyZSkKKyAgICAsIG1fdGlsdFgoZXZlbnRJbmZvLm1fdGlsdFgpCisg
ICAgLCBtX3RpbHRZKGV2ZW50SW5mby5tX3RpbHRZKQorICAgICwgbV9wb2ludGVyVHlwZShldmVu
dEluZm8ubV9wb2ludGVyVHlwZSkKKyAgICAsIG1fcHJpbWFyeVBvaW50ZXIoZXZlbnRJbmZvLm1f
cHJpbWFyeVBvaW50ZXIpCit7Cit9CisKK1BvaW50ZXJFdmVudDo6UG9pbnRlckV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25zdCBQb2ludGVyRXZlbnRJbml0JiBpbml0aWFs
aXplcikKKyAgICA6IE1vdXNlRXZlbnQoZXZlbnRUeXBlLCBpbml0aWFsaXplcikKKyAgICAsIG1f
cG9pbnRlcklkKGluaXRpYWxpemVyLnBvaW50ZXJJZCkKKyAgICAsIG1fd2lkdGgoaW5pdGlhbGl6
ZXIud2lkdGgpCisgICAgLCBtX2hlaWdodChpbml0aWFsaXplci5oZWlnaHQpCisgICAgLCBtX3By
ZXNzdXJlKGluaXRpYWxpemVyLnByZXNzdXJlKQorICAgICwgbV90aWx0WChpbml0aWFsaXplci50
aWx0WCkKKyAgICAsIG1fdGlsdFkoaW5pdGlhbGl6ZXIudGlsdFkpCisgICAgLCBtX3BvaW50ZXJU
eXBlKGNvbnZlcnRQb2ludGVyVHlwZU5hbWVUb0ludChpbml0aWFsaXplci5wb2ludGVyVHlwZSkp
CisgICAgLCBtX3ByaW1hcnlQb2ludGVyKGluaXRpYWxpemVyLmlzUHJpbWFyeSkKK3sKK30KKwor
UG9pbnRlckV2ZW50Ojp+UG9pbnRlckV2ZW50KCkKK3sKK30KKwordm9pZCBQb2ludGVyRXZlbnQ6
OmluaXRQb2ludGVyRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJs
ZSwgYm9vbCBjYW5jZWxhYmxlLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywKKyAgICBp
bnQgZGV0YWlsLCBpbnQgc2NyZWVuWCwgaW50IHNjcmVlblksIGludCBjbGllbnRYLCBpbnQgY2xp
ZW50WSwKKyAgICBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBib29sIHNoaWZ0S2V5LCBib29s
IG1ldGFLZXksCisgICAgdW5zaWduZWQgc2hvcnQgYnV0dG9uLCBQYXNzUmVmUHRyPEV2ZW50VGFy
Z2V0PiByZWxhdGVkVGFyZ2V0LAorICAgIGxvbmcgcG9pbnRlcklkLAorICAgIGxvbmcgd2lkdGgs
CisgICAgbG9uZyBoZWlnaHQsCisgICAgZmxvYXQgcHJlc3N1cmUsCisgICAgbG9uZyB0aWx0WCwK
KyAgICBsb25nIHRpbHRZLAorICAgIGNvbnN0IFN0cmluZyYgcG9pbnRlclR5cGUsCisgICAgYm9v
bCBpc1ByaW1hcnkpCit7CisgICAgTW91c2VFdmVudDo6aW5pdE1vdXNlRXZlbnQodHlwZSwgY2Fu
QnViYmxlLCBjYW5jZWxhYmxlLCB2aWV3LAorICAgICAgICBkZXRhaWwsIHNjcmVlblgsIHNjcmVl
blksIGNsaWVudFgsIGNsaWVudFksCisgICAgICAgIGN0cmxLZXksIGFsdEtleSwgc2hpZnRLZXks
IG1ldGFLZXksCisgICAgICAgIGJ1dHRvbiwgcmVsYXRlZFRhcmdldCk7CisgICAgbV9wb2ludGVy
SWQgPSBwb2ludGVySWQ7CisgICAgbV93aWR0aCA9IHdpZHRoOworICAgIG1faGVpZ2h0ID0gaGVp
Z2h0OworICAgIG1fcHJlc3N1cmUgPSBwcmVzc3VyZTsKKyAgICBtX3RpbHRYID0gIHRpbHRYOwor
ICAgIG1fdGlsdFkgPSB0aWx0WTsKKyAgICBtX3BvaW50ZXJUeXBlID0gY29udmVydFBvaW50ZXJU
eXBlTmFtZVRvSW50KHBvaW50ZXJUeXBlKTsKKyAgICBtX3ByaW1hcnlQb2ludGVyID0gaXNQcmlt
YXJ5OworfQorCitpbnQgUG9pbnRlckV2ZW50Ojpjb252ZXJ0UG9pbnRlclR5cGVOYW1lVG9JbnQo
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lID09ICJtb3VzZSIpCisg
ICAgICAgIHJldHVybiBQb2ludGVyVHlwZU1vdXNlOworICAgIGlmIChuYW1lID09ICJwZW4iKQor
ICAgICAgICByZXR1cm4gUG9pbnRlclR5cGVQZW47CisgICAgaWYgKG5hbWUgPT0gInRvdWNoIikK
KyAgICAgICAgcmV0dXJuIFBvaW50ZXJUeXBlVG91Y2g7CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0F0b21pY1N0cmluZyBQb2ludGVyRXZlbnQ6OmNvbnZl
cnRQb2ludGVyVHlwZUludFRvU3RyaW5nKGludCBwb2ludGVyVHlwZSkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKHBvaW50ZXJUeXBlKSB7CisgICAgY2FzZSBQb2ludGVyVHlwZU1vdXNlOgorICAgICAg
ICByZXR1cm4gIm1vdXNlIjsKKyAgICBjYXNlIFBvaW50ZXJUeXBlUGVuOgorICAgICAgICByZXR1
cm4gInBlbiI7CisgICAgY2FzZSBQb2ludGVyVHlwZVRvdWNoOgorICAgICAgICByZXR1cm4gInRv
dWNoIjsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
CisgICAgcmV0dXJuICIiOworfQorCitQYXNzUmVmUHRyPFBvaW50ZXJFdmVudERpc3BhdGNoTWVk
aWF0b3I+IFBvaW50ZXJFdmVudERpc3BhdGNoTWVkaWF0b3I6OmNyZWF0ZShQYXNzUmVmUHRyPFBv
aW50ZXJFdmVudD4gcG9pbnRlckV2ZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUG9p
bnRlckV2ZW50RGlzcGF0Y2hNZWRpYXRvcihwb2ludGVyRXZlbnQpKTsKK30KKworUG9pbnRlckV2
ZW50RGlzcGF0Y2hNZWRpYXRvcjo6UG9pbnRlckV2ZW50RGlzcGF0Y2hNZWRpYXRvcihQYXNzUmVm
UHRyPFBvaW50ZXJFdmVudD4gcG9pbnRlckV2ZW50KQorICAgIDogRXZlbnREaXNwYXRjaE1lZGlh
dG9yKHBvaW50ZXJFdmVudCkKK3sKK30KKworUG9pbnRlckV2ZW50KiBQb2ludGVyRXZlbnREaXNw
YXRjaE1lZGlhdG9yOjpldmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBv
aW50ZXJFdmVudCo+KEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZXZlbnQoKSk7Cit9CisKK2Jvb2wg
UG9pbnRlckV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChFdmVudERpc3BhdGNo
ZXIqIGRpc3BhdGNoZXIpIGNvbnN0Cit7CisgICAgaWYgKGRpc3BhdGNoZXItPm5vZGUoKS0+ZGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoZXZlbnQoKS0+dHlwZSgp
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBTaG91bGRuJ3QgaGFwcGVuLgor
CisgICAgQVNTRVJUKCFldmVudCgpLT50YXJnZXQoKSB8fCBldmVudCgpLT50YXJnZXQoKSAhPSBl
dmVudCgpLT5yZWxhdGVkVGFyZ2V0KCkpOworCisgICAgZGlzcGF0Y2hlci0+ZGlzcGF0Y2goKTsK
KyAgICBib29sIHN3YWxsb3dFdmVudCA9IGV2ZW50KCktPmRlZmF1bHRIYW5kbGVkKCkgfHwgZXZl
bnQoKS0+ZGVmYXVsdFByZXZlbnRlZCgpOworCisgICAgcmV0dXJuIHN3YWxsb3dFdmVudDsKK30K
KworY29uc3QgQXRvbWljU3RyaW5nJiBQb2ludGVyRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25z
dAoreworICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yUG9pbnRlckV2ZW50Owor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vUG9pbnRlckV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9pbnRlckV2ZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMxMTg3NQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb2ludGVyRXZlbnQuaApAQCAtMCwwICsxLDE3MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMTMg
TWljcm9zb2Z0IE9wZW4gVGVjaG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UKKyAqLworCisjaWZuZGVmIFBvaW50ZXJFdmVudF9oCisjZGVmaW5lIFBvaW50ZXJFdmVu
dF9oCisKKyNpbmNsdWRlICJDbGlwYm9hcmQuaCIKKyNpbmNsdWRlICJFdmVudERpc3BhdGNoTWVk
aWF0b3IuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRXZlbnREaXNwYXRjaGVyOworc3RydWN0IFBvaW50ZXJJbmZvOworY2xhc3MgUGxh
dGZvcm1Qb2ludGVyRXZlbnQ7CisKK3N0cnVjdCBQb2ludGVyRXZlbnRJbml0IDogcHVibGljIE1v
dXNlRXZlbnRJbml0IHsKKyAgICBQb2ludGVyRXZlbnRJbml0KCk7CisKKyAgICBpbnQgcG9pbnRl
cklkOworICAgIGludCB3aWR0aDsKKyAgICBpbnQgaGVpZ2h0OworICAgIGRvdWJsZSBwcmVzc3Vy
ZTsKKyAgICBpbnQgdGlsdFg7CisgICAgaW50IHRpbHRZOworICAgIFN0cmluZyBwb2ludGVyVHlw
ZTsKKyAgICBib29sIGlzUHJpbWFyeTsKK307CisKK2NsYXNzIFBvaW50ZXJFdmVudCA6IHB1Ymxp
YyBNb3VzZUV2ZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQb2ludGVyRXZl
bnQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBvaW50ZXJF
dmVudCk7CisgICAgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBvaW50ZXJFdmVudD4gY3JlYXRl
KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwKKyAgICAgICAgYm9vbCBjYW5CdWJibGUsCisgICAg
ICAgIGJvb2wgY2FuY2VsYWJsZSwKKyAgICAgICAgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZp
ZXcsCisgICAgICAgIGludCBkZXRhaWwsCisgICAgICAgIGludCBzY3JlZW5YLAorICAgICAgICBp
bnQgc2NyZWVuWSwKKyAgICAgICAgaW50IHBhZ2VYLAorICAgICAgICBpbnQgcGFnZVksCisjaWYg
RU5BQkxFKFBPSU5URVJfTE9DSykKKyAgICAgICAgaW50IG1vdmVtZW50WCwgaW50IG1vdmVtZW50
WSwKKyNlbmRpZgorICAgICAgICBib29sIGN0cmxLZXksCisgICAgICAgIGJvb2wgYWx0S2V5LAor
ICAgICAgICBib29sIHNoaWZ0S2V5LAorICAgICAgICBib29sIG1ldGFLZXksCisgICAgICAgIHVu
c2lnbmVkIHNob3J0IGJ1dHRvbiwKKyAgICAgICAgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcmVs
YXRlZFRhcmdldCwKKyAgICAgICAgUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCwKKyAg
ICAgICAgYm9vbCBpc1NpbXVsYXRlZCwKKyAgICAgICAgY29uc3QgUG9pbnRlckluZm8mIGV2ZW50
SW5mbworICAgICkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUG9pbnRlckV2
ZW50KHR5cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgdmlldywgZGV0YWlsLCBzY3JlZW5YLCBz
Y3JlZW5ZLCBwYWdlWCwgcGFnZVksCisjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKKyAgICAgICAg
ICAgIG1vdmVtZW50WCwgbW92ZW1lbnRZLAorI2VuZGlmCisgICAgICAgICAgICBjdHJsS2V5LCBh
bHRLZXksIHNoaWZ0S2V5LCBtZXRhS2V5LCBidXR0b24sIHJlbGF0ZWRUYXJnZXQsIGNsaXBib2Fy
ZCwgaXNTaW11bGF0ZWQsIGV2ZW50SW5mbykpOworICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxQb2ludGVyRXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFz
c1JlZlB0cjxBYnN0cmFjdFZpZXc+LCBjb25zdCBQbGF0Zm9ybVBvaW50ZXJFdmVudCYsIGludCBk
ZXRhaWwsIFBhc3NSZWZQdHI8Tm9kZT4gcmVsYXRlZFRhcmdldCk7CisKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxQb2ludGVyRXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgY29uc3QgUG9pbnRlckV2ZW50SW5pdCYpOworCisgICAgdmlydHVhbCB+UG9pbnRlckV2ZW50
KCk7CisKKyAgICB2b2lkIGluaXRQb2ludGVyRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBl
LCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmll
dz4sCisgICAgICAgIGludCBkZXRhaWwsIGludCBzY3JlZW5YLCBpbnQgc2NyZWVuWSwgaW50IGNs
aWVudFgsIGludCBjbGllbnRZLAorICAgICAgICBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBi
b29sIHNoaWZ0S2V5LCBib29sIG1ldGFLZXksCisgICAgICAgIHVuc2lnbmVkIHNob3J0IGJ1dHRv
biwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcmVsYXRlZFRhcmdldCwKKyAgICAgICAgbG9uZyBw
b2ludGVySWQsCisgICAgICAgIGxvbmcgd2lkdGgsCisgICAgICAgIGxvbmcgaGVpZ2h0LAorICAg
ICAgICBmbG9hdCBwcmVzc3VyZSwKKyAgICAgICAgbG9uZyB0aWx0WCwKKyAgICAgICAgbG9uZyB0
aWx0WSwKKyAgICAgICAgY29uc3QgU3RyaW5nJiBwb2ludGVyVHlwZSwKKyAgICAgICAgYm9vbCBp
c1ByaW1hcnkpOworCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5h
bWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUV2ZW50KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzUHJpbWFyeSgpIHsgcmV0dXJuIG1fcHJpbWFyeVBvaW50
ZXI7IH0KKyAgICBsb25nIHBvaW50ZXJJZCgpIHsgcmV0dXJuIG1fcG9pbnRlcklkOyB9CisgICAg
bG9uZyB3aWR0aCgpIHsgcmV0dXJuIG1fd2lkdGg7IH0KKyAgICBsb25nIGhlaWdodCgpIHsgcmV0
dXJuIG1faGVpZ2h0OyB9CisgICAgZG91YmxlIHByZXNzdXJlKCkgeyByZXR1cm4gbV9wcmVzc3Vy
ZTsgfQorICAgIGxvbmcgdGlsdFgoKSB7IHJldHVybiBtX3RpbHRYOyB9CisgICAgbG9uZyB0aWx0
WSgpIHsgcmV0dXJuIG1fdGlsdFk7IH0KKyAgICBBdG9taWNTdHJpbmcgcG9pbnRlclR5cGUoKSBj
b25zdCB7IHJldHVybiBjb252ZXJ0UG9pbnRlclR5cGVJbnRUb1N0cmluZyhtX3BvaW50ZXJUeXBl
KTsgfQorCitwcml2YXRlOgorICAgIFBvaW50ZXJFdmVudCgKKyAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiB0eXBlLAorICAgICAgICBib29sIGNhbkJ1YmJsZSwKKyAgICAgICAgYm9vbCBjYW5j
ZWxhYmxlLAorICAgICAgICBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sCisgICAgICAgIGludCBk
ZXRhaWwsCisgICAgICAgIGludCBzY3JlZW5YLAorICAgICAgICBpbnQgc2NyZWVuWSwKKyAgICAg
ICAgaW50IHBhZ2VYLAorICAgICAgICBpbnQgcGFnZVksCisjaWYgRU5BQkxFKFBPSU5URVJfTE9D
SykKKyAgICAgICAgaW50IG1vdmVtZW50WCwKKyAgICAgICAgaW50IG1vdmVtZW50WSwKKyNlbmRp
ZgorICAgICAgICBib29sIGN0cmxLZXksCisgICAgICAgIGJvb2wgYWx0S2V5LAorICAgICAgICBi
b29sIHNoaWZ0S2V5LAorICAgICAgICBib29sIG1ldGFLZXksCisgICAgICAgIHVuc2lnbmVkIHNo
b3J0IGJ1dHRvbiwKKyAgICAgICAgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4sCisgICAgICAgIFBh
c3NSZWZQdHI8Q2xpcGJvYXJkPiwKKyAgICAgICAgYm9vbCBpc1NpbXVsYXRlZCwKKyAgICAgICAg
Y29uc3QgUG9pbnRlckluZm8mIGV2ZW50SW5mbyk7CisKKyAgICBQb2ludGVyRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBQb2ludGVyRXZlbnRJbml0Jik7CisgICAgUG9pbnRl
ckV2ZW50KCk7CisKKyAgICBpbnQgY29udmVydFBvaW50ZXJUeXBlTmFtZVRvSW50KGNvbnN0IEF0
b21pY1N0cmluZyAmKTsKKyAgICBBdG9taWNTdHJpbmcgY29udmVydFBvaW50ZXJUeXBlSW50VG9T
dHJpbmcoaW50KSBjb25zdDsKKworICAgIGxvbmcgbV9wb2ludGVySWQ7CisgICAgbG9uZyBtX3dp
ZHRoOworICAgIGxvbmcgbV9oZWlnaHQ7CisgICAgZG91YmxlIG1fcHJlc3N1cmU7CisgICAgbG9u
ZyBtX3RpbHRYOworICAgIGxvbmcgbV90aWx0WTsKKyAgICBpbnQgbV9wb2ludGVyVHlwZTsKKyAg
ICBib29sIG1fcHJpbWFyeVBvaW50ZXI7Cit9OworCitjbGFzcyBQb2ludGVyRXZlbnREaXNwYXRj
aE1lZGlhdG9yIDogcHVibGljIEV2ZW50RGlzcGF0Y2hNZWRpYXRvciB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8UG9pbnRlckV2ZW50RGlzcGF0Y2hNZWRpYXRvcj4gY3JlYXRlKFBh
c3NSZWZQdHI8UG9pbnRlckV2ZW50Pik7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgUG9pbnRl
ckV2ZW50RGlzcGF0Y2hNZWRpYXRvcihQYXNzUmVmUHRyPFBvaW50ZXJFdmVudD4pOworICAgIFBv
aW50ZXJFdmVudCogZXZlbnQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2
ZW50KEV2ZW50RGlzcGF0Y2hlciopIGNvbnN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gUG9pbnRlckV2ZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Qb2ludGVyRXZlbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL1BvaW50ZXJFdmVudC5p
ZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdiZGRkNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb2ludGVyRXZlbnQuaWRsCkBAIC0wLDAgKzEs
NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIE1p
Y3Jvc29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyLiAyLjEgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKK1sKKyAgICBDb25kaXRpb25hbD1QT0lO
VEVSX0VWRU5UUywKKyAgICBDb25zdHJ1Y3RvckNvbmRpdGlvbmFsPURPTTRfRVZFTlRTX0NPTlNU
UlVDVE9SLAorICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9RXZlbnQsCisgICAgVjhTa2lwVlRhYmxl
VmFsaWRhdGlvbgorXSBpbnRlcmZhY2UgUG9pbnRlckV2ZW50IDogTW91c2VFdmVudCB7CisKKyAg
ICBbSW5pdGlhbGl6ZWRCeUV2ZW50Q29uc3RydWN0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25n
IHBvaW50ZXJJZDsKKyAgICBbSW5pdGlhbGl6ZWRCeUV2ZW50Q29uc3RydWN0b3JdIHJlYWRvbmx5
IGF0dHJpYnV0ZSBsb25nIHdpZHRoOworICAgIFtJbml0aWFsaXplZEJ5RXZlbnRDb25zdHJ1Y3Rv
cl0gcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgaGVpZ2h0OworICAgIFtJbml0aWFsaXplZEJ5RXZl
bnRDb25zdHJ1Y3Rvcl0gcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0IHByZXNzdXJlOworICAgIFtJ
bml0aWFsaXplZEJ5RXZlbnRDb25zdHJ1Y3Rvcl0gcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgdGls
dFg7CisgICAgW0luaXRpYWxpemVkQnlFdmVudENvbnN0cnVjdG9yXSByZWFkb25seSBhdHRyaWJ1
dGUgbG9uZyB0aWx0WTsKKyAgICBbSW5pdGlhbGl6ZWRCeUV2ZW50Q29uc3RydWN0b3JdIHJlYWRv
bmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgcG9pbnRlclR5cGU7CisgICAgW0luaXRpYWxpemVkQnlF
dmVudENvbnN0cnVjdG9yXSByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBpc1ByaW1hcnk7CisK
KyAgICBbT2JqQ0xlZ2FjeVVubmFtZWRQYXJhbWV0ZXJzXSB2b2lkIGluaXRQb2ludGVyRXZlbnQo
aW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gRE9NU3RyaW5nIHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5k
ZWZpbmVkXSBib29sZWFuIGNhbkJ1YmJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluIFtPcHRpb25hbD1EZWZhdWx0SXNVbmRlZmluZWRdIGJvb2xlYW4gY2FuY2Vs
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25h
bD1EZWZhdWx0SXNVbmRlZmluZWRdIERPTVdpbmRvdyB2aWV3LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gbG9u
ZyBkZXRhaWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0
aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBsb25nIHNjcmVlblgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBs
b25nIHNjcmVlblksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBb
T3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBsb25nIGNsaWVudFgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVk
XSBsb25nIGNsaWVudFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
biBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBib29sZWFuIGN0cmxLZXksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5k
ZWZpbmVkXSBib29sZWFuIGFsdEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluIFtPcHRpb25hbD1EZWZhdWx0SXNVbmRlZmluZWRdIGJvb2xlYW4gc2hpZnRLZXks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWw9RGVm
YXVsdElzVW5kZWZpbmVkXSBib29sZWFuIG1ldGFLZXksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSB1bnNpZ25l
ZCBzaG9ydCBidXR0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
biBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBFdmVudFRhcmdldCByZWxhdGVkVGFyZ2V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsPURl
ZmF1bHRJc1VuZGVmaW5lZF0gbG9uZyBwb2ludGVySWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBsb25nIHdp
ZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFs
PURlZmF1bHRJc1VuZGVmaW5lZF0gbG9uZyBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBmbG9hdCBw
cmVzc3VyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRp
b25hbD1EZWZhdWx0SXNVbmRlZmluZWRdIGxvbmcgdGlsdFgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBsb25n
IHRpbHRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlv
bmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gRE9NU3RyaW5nIHBvaW50ZXJUeXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVm
aW5lZF0gYm9vbGVhbiBpc1ByaW1hcnkpOworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0
cmlidXRlTmFtZXMuaW4KaW5kZXggMTU0YzAzMy4uNmM5M2EyNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4KKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4KQEAgLTIyMyw2ICsyMjMsMTYgQEAgb25wYXN0ZQog
b25wYXVzZQogb25wbGF5CiBvbnBsYXlpbmcKK29ucG9pbnRlcmRvd24KK29ucG9pbnRlcnVwCitv
bnBvaW50ZXJjYW5jZWwKK29ucG9pbnRlcm1vdmUKK29ucG9pbnRlcm92ZXIKK29ucG9pbnRlcm91
dAorb25wb2ludGVyZW50ZXIKK29ucG9pbnRlcmxlYXZlCitvbmdvdHBvaW50ZXJjYXB0dXJlCitv
bmxvc3Rwb2ludGVyY2FwdHVyZQogb25wb3BzdGF0ZQogb25wcm9ncmVzcwogb25yYXRlY2hhbmdl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCmluZGV4IGFjODgyMTMuLmEwMjIzYTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJp
Z2h0IChDKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzIE1pY3Jvc29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMjYsNiArMzI3LDE4IEBA
IHZvaWQgSFRNTEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUsIGNvbnN0IEF0b21pY1N0cmluZyYKICAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5l
cihldmVudE5hbWVzKCkudG91Y2hlbmRFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5l
cih0aGlzLCBuYW1lLCB2YWx1ZSkpOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBvbnRvdWNoY2Fu
Y2VsQXR0cikgewogICAgICAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMo
KS50b3VjaGNhbmNlbEV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRoaXMsIG5h
bWUsIHZhbHVlKSk7CisgICAgfSBlbHNlIGlmIChuYW1lID09IG9ucG9pbnRlcmRvd25BdHRyKSB7
CisgICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnBvaW50ZXJk
b3duRXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIodGhpcywgbmFtZSwgdmFsdWUp
KTsKKyAgICB9IGVsc2UgaWYgKG5hbWUgPT0gb25wb2ludGVydXBBdHRyKSB7CisgICAgICAgIHNl
dEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnBvaW50ZXJ1cEV2ZW50LCBjcmVh
dGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRoaXMsIG5hbWUsIHZhbHVlKSk7CisgICAgfSBlbHNl
IGlmIChuYW1lID09IG9ucG9pbnRlcm1vdmVBdHRyKSB7CisgICAgICAgIHNldEF0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnBvaW50ZXJtb3ZlRXZlbnQsIGNyZWF0ZUF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIodGhpcywgbmFtZSwgdmFsdWUpKTsKKyAgICB9IGVsc2UgaWYgKG5hbWUg
PT0gb25wb2ludGVyb3ZlckF0dHIpIHsKKyAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5l
cihldmVudE5hbWVzKCkucG9pbnRlcm92ZXJFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0
ZW5lcih0aGlzLCBuYW1lLCB2YWx1ZSkpOworICAgIH0gZWxzZSBpZiAobmFtZSA9PSBvbnBvaW50
ZXJvdXRBdHRyKSB7CisgICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1l
cygpLnBvaW50ZXJvdXRFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlzLCBu
YW1lLCB2YWx1ZSkpOworICAgIH0gZWxzZSBpZiAobmFtZSA9PSBvbnBvaW50ZXJjYW5jZWxBdHRy
KSB7CisgICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnBvaW50
ZXJjYW5jZWxFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlzLCBuYW1lLCB2
YWx1ZSkpOwogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICB9IGVsc2UgaWYgKG5hbWUg
PT0gb253ZWJraXRmdWxsc2NyZWVuY2hhbmdlQXR0cikgewogICAgICAgICBzZXRBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS53ZWJraXRmdWxsc2NyZWVuY2hhbmdlRXZlbnQsIGNy
ZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIodGhpcywgbmFtZSwgdmFsdWUpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5oCmluZGV4IDRiNzY0MzguLmViOWYzNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5k
b3cuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIw
MDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICog
Q29weXJpZ2h0IChDKSAyMDEzIE1pY3Jvc29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zODgs
NiArMzg5LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgREVGSU5FX0FUVFJJQlVU
RV9FVkVOVF9MSVNURU5FUihvcmllbnRhdGlvbmNoYW5nZSk7CiAjZW5kaWYKIAorI2lmIEVOQUJM
RShQT0lOVEVSX0VWRU5UUykKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHBv
aW50ZXJkb3duKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHBvaW50ZXJ1
cCk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihwb2ludGVyY2FuY2VsKTsK
KyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHBvaW50ZXJtb3ZlKTsKKyAgICBE
RUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHBvaW50ZXJvdmVyKTsKKyAgICBERUZJTkVf
QVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHBvaW50ZXJvdXQpOworICAgIERFRklORV9BVFRSSUJV
VEVfRVZFTlRfTElTVEVORVIoZ290cG9pbnRlcmNhcHR1cmUpOworICAgIERFRklORV9BVFRSSUJV
VEVfRVZFTlRfTElTVEVORVIobG9zdHBvaW50ZXJjYXB0dXJlKTsKKyNlbmRpZgorCiAjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKICAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5F
Uih0b3VjaHN0YXJ0KTsKICAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUih0
b3VjaG1vdmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRs
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCmluZGV4IDk4Mzc0Y2MuLmY3NzFi
OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKQEAgLTEsNiArMSw3IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIE1pY3Jvc29mdCBPcGVuIFRlY2hub2xv
Z2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNzgsNiArMjc5LDE1IEBACiAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIg
b252b2x1bWVjaGFuZ2U7CiAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb253YWl0aW5nOwog
CisgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25wb2ludGVyZG93bjsKKyAgICBhdHRyaWJ1
dGUgRXZlbnRMaXN0ZW5lciBvbnBvaW50ZXJ1cDsKKyAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5l
ciBvbnBvaW50ZXJjYW5jZWw7CisgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25wb2ludGVy
bW92ZTsKKyAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbnBvaW50ZXJvdmVyOworICAgIGF0
dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ucG9pbnRlcm91dDsKKyAgICBhdHRyaWJ1dGUgRXZlbnRM
aXN0ZW5lciBvbmdvdHBvaW50ZXJjYXB0dXJlOworICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVy
IG9ubG9zdHBvaW50ZXJjYXB0dXJlOworCiAgICAgLy8gTm90IGltcGxlbWVudGVkIHlldC4KICAg
ICAvLyBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmFmdGVycHJpbnQ7CiAgICAgLy8gYXR0cmli
dXRlIEV2ZW50TGlzdGVuZXIgb25iZWZvcmVwcmludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcAppbmRleCBmZjE0NDk3Li45MzY3ZDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAy
MDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQog
ICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYy4gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTWljcm9zb2Z0IE9wZW4gVGVjaG5vbG9naWVzLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTExNiw2ICsxMTcsMTAgQEAKICNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlU2V0LmgiCiAj
ZW5kaWYKIAorI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKKyNpbmNsdWRlICJQbGF0Zm9ybVBv
aW50ZXJFdmVudC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKQEAgLTYzOSw2ICs2NDQsMTAgQEAgYm9vbCBFdmVudEhhbmRsZXI6
OmhhbmRsZU1vdXNlUHJlc3NFdmVudChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRz
JiBldmUKIAogICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRp
bmdTdHlsZXNoZWV0cygpOwogCisjaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQorICAgIGhhbmRs
ZVBvaW50ZXJFdmVudHMoUGxhdGZvcm1Qb2ludGVyRXZlbnRDb2xsZWN0aW9uKGV2ZW50LmV2ZW50
KCkpKTsKKyNlbmRpZgorCiAgICAgaWYgKFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcgPSBtX2ZyYW1l
LT52aWV3KCkpIHsKICAgICAgICAgaWYgKHNjcm9sbFZpZXctPmlzUG9pbnRJblNjcm9sbGJhckNv
cm5lcihldmVudC5ldmVudCgpLnBvc2l0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMTYzOCw2ICsxNjQ3LDE3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCiAgICAgUmVmUHRyPEZyYW1lVmlldz4gcHJv
dGVjdG9yKG1fZnJhbWUtPnZpZXcoKSk7CiAgICAgTWF4aW11bUR1cmF0aW9uVHJhY2tlciBtYXhE
dXJhdGlvblRyYWNrZXIoJm1fbWF4TW91c2VNb3ZlZER1cmF0aW9uKTsKIAorI2lmIEVOQUJMRShQ
T0lOVEVSX0VWRU5UUykKKyAgICBoYW5kbGVQb2ludGVyRXZlbnRzKFBsYXRmb3JtUG9pbnRlckV2
ZW50Q29sbGVjdGlvbihldmVudCkpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQorICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBtb3ZlZCBlbHNld2hlcmUgdG8gYWxzbyBi
ZSBhYmxlIHRvIGRpc3BhdGNoIHRvdWNoY2FuY2VsIGV2ZW50cy4KKyAgICBib29sIGRlZmF1bHRQ
cmV2ZW50ZWQgPSBkaXNwYXRjaFN5bnRoZXRpY1RvdWNoRXZlbnRJZkVuYWJsZWQoZXZlbnQpOwor
ICAgIGlmIChkZWZhdWx0UHJldmVudGVkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgor
CiAgICAgSGl0VGVzdFJlc3VsdCBob3ZlcmVkTm9kZSA9IEhpdFRlc3RSZXN1bHQoTGF5b3V0UG9p
bnQoKSk7CiAgICAgYm9vbCByZXN1bHQgPSBoYW5kbGVNb3VzZU1vdmVFdmVudChldmVudCwgJmhv
dmVyZWROb2RlKTsKIApAQCAtMTgyMCw2ICsxODQwLDEwIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpo
YW5kbGVNb3VzZVJlbGVhc2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZl
bnQpCiAKICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0Q2FyZXRCbGlua2luZ1N1c3BlbmRl
ZChmYWxzZSk7CiAKKyNpZiBFTkFCTEUoUE9JTlRFUl9FVkVOVFMpCisgICAgaGFuZGxlUG9pbnRl
ckV2ZW50cyhQbGF0Zm9ybVBvaW50ZXJFdmVudENvbGxlY3Rpb24obW91c2VFdmVudCkpOworI2Vu
ZGlmCisKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIGJvb2wgZGVmYXVsdFByZXZlbnRl
ZCA9IGRpc3BhdGNoU3ludGhldGljVG91Y2hFdmVudElmRW5hYmxlZChtb3VzZUV2ZW50KTsKICAg
ICBpZiAoZGVmYXVsdFByZXZlbnRlZCkKQEAgLTM4MzAsNiArMzg1NCwxMCBAQCBIaXRUZXN0UmVz
dWx0IEV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3VsdEluRnJhbWUoRnJhbWUqIGZyYW1lLCBjb25z
dCBMYXlvdXRQb2ludAogCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudChjb25z
dCBQbGF0Zm9ybVRvdWNoRXZlbnQmIGV2ZW50KQogeworI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5U
UykKKyAgICBoYW5kbGVQb2ludGVyRXZlbnRzKFBsYXRmb3JtUG9pbnRlckV2ZW50Q29sbGVjdGlv
bihldmVudCkpOworI2VuZGlmCisKICAgICAvLyBGaXJzdCBidWlsZCB1cCB0aGUgbGlzdHMgdG8g
dXNlIGZvciB0aGUgJ3RvdWNoZXMnLCAndGFyZ2V0VG91Y2hlcycgYW5kICdjaGFuZ2VkVG91Y2hl
cycgYXR0cmlidXRlcwogICAgIC8vIGluIHRoZSBKUyBldmVudC4gU2VlIGh0dHA6Ly93d3cuc2l0
ZXBlbi5jb20vYmxvZy8yMDA4LzA3LzEwL3RvdWNoaW5nLWFuZC1nZXN0dXJpbmctb24tdGhlLWlw
aG9uZS8KICAgICAvLyBmb3IgYW4gb3ZlcnZpZXcgb2YgaG93IHRoZXNlIGxpc3RzIGZpdCB0b2dl
dGhlci4KQEAgLTQwNzEsNCArNDA5OSwxNDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnNldExhc3RL
bm93bk1vdXNlUG9zaXRpb24oY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKICAgICBt
X2xhc3RLbm93bk1vdXNlR2xvYmFsUG9zaXRpb24gPSBldmVudC5nbG9iYWxQb3NpdGlvbigpOwog
fQogCisjaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQorCitib29sIEV2ZW50SGFuZGxlcjo6aGFu
ZGxlUG9pbnRlckV2ZW50cyhjb25zdCBQbGF0Zm9ybVBvaW50ZXJFdmVudENvbGxlY3Rpb24mIGNv
bGxlY3Rpb24pCit7CisgICAgUGxhdGZvcm1Qb2ludGVyRXZlbnRDb2xsZWN0aW9uIGV2ZW50Q29s
bGVjdGlvbiA9IGNvbGxlY3Rpb247CisgICAgZm9yIChWZWN0b3I8UGxhdGZvcm1Qb2ludGVyRXZl
bnQ+OjppdGVyYXRvciBpdGVyID0gZXZlbnRDb2xsZWN0aW9uLmV2ZW50cy5iZWdpbigpOyBpdGVy
ICE9IGV2ZW50Q29sbGVjdGlvbi5ldmVudHMuZW5kKCk7IGl0ZXIrKykgeworICAgICAgICBQbGF0
Zm9ybVBvaW50ZXJFdmVudCYgZXZlbnQgPSAoKml0ZXIpOworICAgICAgICBpZiAoZXZlbnQuUG9p
bnRlclByb2Nlc3NlZCgpKSAvLyBwcm9jZXNzZWQgYXQgdGhlIGNvbnN0cnVjdGlvbiwgZG9uJ3Qg
ZGlzcGF0Y2ggaXQKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBzd2l0Y2ggKGV2ZW50
LnR5cGUoKSkgeworICAgICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6OlBvaW50ZXJEb3duOgorICAg
ICAgICAgICAgcmV0dXJuIGRpc3BhdGNoUG9pbnRlckV2ZW50KGV2ZW50TmFtZXMoKS5wb2ludGVy
ZG93bkV2ZW50LCBldmVudCk7CisgICAgICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6UG9pbnRlclVw
OgorICAgICAgICAgICAgcmV0dXJuIGRpc3BhdGNoUG9pbnRlckV2ZW50KGV2ZW50TmFtZXMoKS5w
b2ludGVydXBFdmVudCwgZXZlbnQpOworICAgICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6OlBvaW50
ZXJDYW5jZWw6CisgICAgICAgICAgICByZXR1cm4gZGlzcGF0Y2hQb2ludGVyRXZlbnQoZXZlbnRO
YW1lcygpLnBvaW50ZXJjYW5jZWxFdmVudCwgZXZlbnQpOworICAgICAgICBjYXNlIFBsYXRmb3Jt
RXZlbnQ6OlBvaW50ZXJNb3ZlOgorICAgICAgICAgICAgcmV0dXJuIGRpc3BhdGNoUG9pbnRlckV2
ZW50KGV2ZW50TmFtZXMoKS5wb2ludGVybW92ZUV2ZW50LCBldmVudCk7CisgICAgICAgIGNhc2Ug
UGxhdGZvcm1FdmVudDo6UG9pbnRlck92ZXI6CisgICAgICAgICAgICByZXR1cm4gZGlzcGF0Y2hQ
b2ludGVyRXZlbnQoZXZlbnROYW1lcygpLnBvaW50ZXJvdmVyRXZlbnQsIGV2ZW50KTsKKyAgICAg
ICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpQb2ludGVyT3V0OgorICAgICAgICAgICAgcmV0dXJuIGRp
c3BhdGNoUG9pbnRlckV2ZW50KGV2ZW50TmFtZXMoKS5wb2ludGVyb3V0RXZlbnQsIGV2ZW50KTsK
KyAgICAgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpQb2ludGVyRW50ZXI6CisgICAgICAgICAgICBy
ZXR1cm4gZGlzcGF0Y2hQb2ludGVyRXZlbnQoZXZlbnROYW1lcygpLnBvaW50ZXJlbnRlckV2ZW50
LCBldmVudCk7CisgICAgICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6UG9pbnRlckxlYXZlOgorICAg
ICAgICAgICAgcmV0dXJuIGRpc3BhdGNoUG9pbnRlckV2ZW50KGV2ZW50TmFtZXMoKS5wb2ludGVy
bGVhdmVFdmVudCwgZXZlbnQpOworICAgICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6OkdvdFBvaW50
ZXJDYXB0dXJlOgorICAgICAgICAgICAgcmV0dXJuIGRpc3BhdGNoUG9pbnRlckV2ZW50KGV2ZW50
TmFtZXMoKS5nb3Rwb2ludGVyY2FwdHVyZUV2ZW50LCBldmVudCk7CisgICAgICAgIGNhc2UgUGxh
dGZvcm1FdmVudDo6TG9zdFBvaW50ZXJDYXB0dXJlOgorICAgICAgICAgICAgcmV0dXJuIGRpc3Bh
dGNoUG9pbnRlckV2ZW50KGV2ZW50TmFtZXMoKS5sb3N0cG9pbnRlcmNhcHR1cmVFdmVudCwgZXZl
bnQpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEV2ZW50
SGFuZGxlcjo6c2VuZFBvaW50ZXJPdXRPdmVyKE5vZGUqIG5vZGVVbmRlclBvaW50ZXIsIGNvbnN0
IFBsYXRmb3JtUG9pbnRlckV2ZW50JiBldmVudCkKK3sKKyAgICBOb2RlKiBsYXN0Tm9kZVVuZGVy
UG9pbnRlciA9IG1fbGFzdE5vZGVVbmRlck1vdXNlLmdldCgpOworCisgICAgaWYgKGxhc3ROb2Rl
VW5kZXJQb2ludGVyICYmIGxhc3ROb2RlVW5kZXJQb2ludGVyLT5kb2N1bWVudCgpICE9IG1fZnJh
bWUtPmRvY3VtZW50KCkpCisgICAgICAgIGxhc3ROb2RlVW5kZXJQb2ludGVyID0gMDsKKyAgICBp
ZiAobGFzdE5vZGVVbmRlclBvaW50ZXIgIT0gbm9kZVVuZGVyUG9pbnRlcikgeworICAgICAgICAv
LyBzZW5kIHBvaW50ZXJvdXQgZXZlbnQgdG8gdGhlIG9sZCBub2RlCisgICAgICAgIGlmIChsYXN0
Tm9kZVVuZGVyUG9pbnRlcikKKyAgICAgICAgICAgIGxhc3ROb2RlVW5kZXJQb2ludGVyLT5kaXNw
YXRjaFBvaW50ZXJFdmVudChldmVudCwgZXZlbnROYW1lcygpLnBvaW50ZXJvdXRFdmVudCwgMCwg
bm9kZVVuZGVyUG9pbnRlcik7CisgICAgICAgIC8vIHNlbmQgcG9pbnRlcm92ZXIgZXZlbnQgdG8g
dGhlIG5ldyBub2RlCisgICAgICAgIGlmIChub2RlVW5kZXJQb2ludGVyKQorICAgICAgICAgICAg
bm9kZVVuZGVyUG9pbnRlci0+ZGlzcGF0Y2hQb2ludGVyRXZlbnQoZXZlbnQsIGV2ZW50TmFtZXMo
KS5wb2ludGVyb3ZlckV2ZW50LCAwLCBsYXN0Tm9kZVVuZGVyUG9pbnRlcik7CisgICAgfQorfQor
Citib29sIEV2ZW50SGFuZGxlcjo6cG9zdERpc3BhdGNoUG9pbnRlckV2ZW50KE5vZGUqIG5vZGVV
bmRlclBvaW50ZXIsIGJvb2wgc3dhbGxvd0V2ZW50KQoreworICAgIC8vIFRoZSBsYXlvdXQgbmVl
ZHMgdG8gYmUgdXAgdG8gZGF0ZSB0byBkZXRlcm1pbmUgaWYgYW4gZWxlbWVudCBpcyBmb2N1c2Fi
bGUuCisgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKCk7CisKKyAgICAvLyBCbHVyIGN1cnJlbnQgZm9jdXMgbm9kZSB3aGVuIGEgbGlu
ay9idXR0b24gaXMgY2xpY2tlZDsgdGhpcworICAgIC8vIGlzIGV4cGVjdGVkIGJ5IHNvbWUgc2l0
ZXMgdGhhdCByZWx5IG9uIG9uQ2hhbmdlIGhhbmRsZXJzIHJ1bm5pbmcKKyAgICAvLyBmcm9tIGZv
cm0gZmllbGRzIGJlZm9yZSB0aGUgYnV0dG9uIGNsaWNrIGlzIHByb2Nlc3NlZC4KKyAgICBOb2Rl
KiBub2RlID0gbm9kZVVuZGVyUG9pbnRlcjsKKworICAgIC8vIFdhbGsgdXAgdGhlIERPTSB0cmVl
IHRvIHNlYXJjaCBmb3IgYSBub2RlIHRvIGZvY3VzLgorICAgIHdoaWxlIChub2RlKSB7CisgICAg
ICAgIGlmIChub2RlLT5pc01vdXNlRm9jdXNhYmxlKCkpIHsKKyAgICAgICAgICAgIC8vIFRvIGZp
eCA8cmRhcjovL3Byb2JsZW0vNDg5NTQyOD4gQ2FuJ3QgZHJhZyBzZWxlY3RlZCBUb0RvLCB3ZSBk
b24ndCBmb2N1cyBhCisgICAgICAgICAgICAvLyBub2RlIG9uIG1vdXNlIGRvd24gaWYgaXQncyBz
ZWxlY3RlZCBhbmQgaW5zaWRlIGEgZm9jdXNlZCBub2RlLiBJdCB3aWxsIGJlCisgICAgICAgICAg
ICAvLyBmb2N1c2VkIGlmIHRoZSB1c2VyIGRvZXMgYSBtb3VzZXVwIG92ZXIgaXQsIGhvd2V2ZXIs
IGJlY2F1c2UgdGhlIG1vdXNldXAKKyAgICAgICAgICAgIC8vIHdpbGwgc2V0IGEgc2VsZWN0aW9u
IGluc2lkZSBpdCwgd2hpY2ggd2lsbCBjYWxsIHNldEZvY3VzZU5vZGVJZk5lZWRlZC4KKyAgICAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICAgICAgTm9kZSogbiA9IG5vZGUt
PmlzU2hhZG93Um9vdCgpID8gdG9TaGFkb3dSb290KG5vZGUpLT5ob3N0KCkgOiBub2RlOworICAg
ICAgICAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5pc1JhbmdlKCkKKyAgICAgICAgICAg
ICAgICAmJiBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS0+Y29tcGFy
ZU5vZGUobiwgZWMpID09IFJhbmdlOjpOT0RFX0lOU0lERQorICAgICAgICAgICAgICAgICYmIG4t
PmlzRGVzY2VuZGFudE9mKG1fZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50T3JTaGFkb3dIb3N0Tm9kZSgpOworICAg
IH0KKworICAgIC8vIElmIGZvY3VzIHNoaWZ0IGlzIGJsb2NrZWQsIHdlIGVhdCB0aGUgZXZlbnQu
IE5vdGUgd2Ugc2hvdWxkIG5ldmVyIGNsZWFyIHN3YWxsb3dFdmVudAorICAgIC8vIGlmIHRoZSBw
YWdlIGFscmVhZHkgc2V0IGl0IChlLmcuLCBieSBjYW5jZWxpbmcgZGVmYXVsdCBiZWhhdmlvciku
CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpIHsKKyAgICAgICAgaWYgKG5v
ZGUgJiYgbm9kZS0+aXNNb3VzZUZvY3VzYWJsZSgpKSB7CisgICAgICAgICAgICBpZiAoIXBhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkTm9kZShub2RlLCBtX2ZyYW1lKSkKKyAgICAg
ICAgICAgICAgICBzd2FsbG93RXZlbnQgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKCFub2Rl
IHx8ICFub2RlLT5mb2N1c2VkKCkpIHsKKyAgICAgICAgICAgIGlmICghcGFnZS0+Zm9jdXNDb250
cm9sbGVyKCktPnNldEZvY3VzZWROb2RlKDAsIG1fZnJhbWUpKQorICAgICAgICAgICAgICAgIHN3
YWxsb3dFdmVudCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN3YWxsb3dF
dmVudDsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoUG9pbnRlckV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25zdCBQbGF0Zm9ybVBvaW50ZXJFdmVudCYgZXZl
bnQpCit7CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBS
ZWZQdHI8RnJhbWVWaWV3PiBwcm90ZWN0b3IobV9mcmFtZS0+dmlldygpKTsKKyAgICBIaXRUZXN0
UmVxdWVzdDo6SGl0VGVzdFJlcXVlc3RUeXBlIGhpdFR5cGUgPSBIaXRUZXN0UmVxdWVzdDo6TW92
ZTsKKworICAgIGlmIChtX21vdXNlUHJlc3NlZCkKKyAgICAgICAgaGl0VHlwZSB8PSBIaXRUZXN0
UmVxdWVzdDo6QWN0aXZlOworCisgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChoaXRUeXBlKTsK
KyAgICBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzIG1ldiA9IHByZXBhcmVNb3VzZUV2ZW50
KHJlcXVlc3QsIGV2ZW50KTsKKworICAgIEhpdFRlc3RSZXN1bHQgaG92ZXJlZE5vZGUgPSBtZXYu
aGl0VGVzdFJlc3VsdCgpOworCisgICAgLy8gZ2VuZXJhdGUgcG9pbnRlcm91dCwgcG9pbnRlcm92
ZXIgZXZlbnRzIChjb3BpZWQgZnJvbSB1cGRhdGVNb3VzZUV2ZW50VGFyZ2V0Tm9kZSgpKQorICAg
IC8vCisgICAgTm9kZSogcmVzdWx0ID0gbWV2LnRhcmdldE5vZGUoKTsKKworICAgIC8vIElmIHdl
J3JlIGNhcHR1cmluZywgd2UgYWx3YXlzIGdvIHJpZ2h0IHRvIHRoYXQgbm9kZS4KKyAgICBpZiAo
bV9jYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUpCisgICAgICAgIHJlc3VsdCA9IG1fY2FwdHVyaW5n
TW91c2VFdmVudHNOb2RlLmdldCgpOworICAgIGVsc2UgeworICAgICAgICAvLyBJZiB0aGUgdGFy
Z2V0IG5vZGUgaXMgYSB0ZXh0IG5vZGUsIGRpc3BhdGNoIG9uIHRoZSBwYXJlbnQgbm9kZSAtIHJk
YXI6Ly80MTk2NjQ2CisgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LT5pc1RleHROb2RlKCkp
CisgICAgICAgICAgICByZXN1bHQgPSBFdmVudFBhdGhXYWxrZXI6OnBhcmVudChyZXN1bHQpOwor
ICAgIH0KKworICAgIE5vZGUqIG5vZGVVbmRlclBvaW50ZXIgPSByZXN1bHQ7CisgICAgc2VuZFBv
aW50ZXJPdXRPdmVyKG5vZGVVbmRlclBvaW50ZXIsIGV2ZW50KTsKKworICAgIGJvb2wgc3dhbGxv
d0V2ZW50ID0gZmFsc2U7CisKKyAgICAvLyBzZW5kIHdoYXRldmVyIHBvaW50ZXIgZXZlbnQgd2Ug
cGxhbm5lZCB0byBzZW5kIGluIHRoZSBmaXJzdCBwbGFjZQorICAgIGlmIChub2RlVW5kZXJQb2lu
dGVyKQorICAgICAgICBzd2FsbG93RXZlbnQgPSBub2RlVW5kZXJQb2ludGVyLT5kaXNwYXRjaFBv
aW50ZXJFdmVudChldmVudCwgZXZlbnRUeXBlKTsKKworICAgIGlmICghc3dhbGxvd0V2ZW50ICYm
IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkucG9pbnRlcmRvd25FdmVudCkgeworICAgICAgICAv
LyBJZiBjbGlja2luZyBvbiBhIGZyYW1lIHNjcm9sbGJhciwgZG8gbm90IG1lc3MgdXAgd2l0aCBj
b250ZW50IGZvY3VzLgorICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmll
dygpKQorICAgICAgICAgICAgaWYgKHZpZXctPnNjcm9sbGJhckF0UG9pbnQoZXZlbnQucG9zaXRp
b24oKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzd2FsbG93RXZl
bnQgPSBwb3N0RGlzcGF0Y2hQb2ludGVyRXZlbnQobm9kZVVuZGVyUG9pbnRlciwgc3dhbGxvd0V2
ZW50KTsKKyAgICB9CisgICAgcmV0dXJuICFzd2FsbG93RXZlbnQ7Cit9CisjZW5kaWYgLy8gRU5B
QkxFKFBPSU5URVJfRVZFTlRTKQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuaAppbmRleCAzYjVjMzFhLi4zMjhlYmNiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMyBNaWNyb3NvZnQgT3BlbiBUZWNobm9sb2dpZXMsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjksNiArNzAsOCBAQCBjbGFzcyBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzOwogY2xhc3Mg
Tm9kZTsKIGNsYXNzIE9wdGlvbmFsQ3Vyc29yOwogY2xhc3MgUGxhdGZvcm1LZXlib2FyZEV2ZW50
OworY2xhc3MgUGxhdGZvcm1Qb2ludGVyRXZlbnRDb2xsZWN0aW9uOworY2xhc3MgUGxhdGZvcm1Q
b2ludGVyRXZlbnQ7CiBjbGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiBjbGFzcyBQbGF0Zm9ybVdo
ZWVsRXZlbnQ7CiBjbGFzcyBSZW5kZXJMYXllcjsKQEAgLTI1Myw2ICsyNTYsMTAgQEAgcHVibGlj
OgogICAgIGJvb2wgaGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmKTsK
ICNlbmRpZgogCisjaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQorICAgIGJvb2wgaGFuZGxlUG9p
bnRlckV2ZW50cyhjb25zdCBQbGF0Zm9ybVBvaW50ZXJFdmVudENvbGxlY3Rpb24mKTsKKyNlbmRp
ZgorCiAgICAgYm9vbCB1c2VIYW5kQ3Vyc29yKE5vZGUqLCBib29sIGlzT3ZlckxpbmssIGJvb2wg
c2hpZnRLZXkpOwogCiBwcml2YXRlOgpAQCAtMzI3LDYgKzMzNCwxMSBAQCBwcml2YXRlOgogICAg
IGJvb2wgZHJhZ0h5c3RlcmVzaXNFeGNlZWRlZChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAg
ICAgYm9vbCBkcmFnSHlzdGVyZXNpc0V4Y2VlZGVkKGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAj
ZW5kaWYgLy8gRU5BQkxFKERSQUdfU1VQUE9SVCkKKyNpZiBFTkFCTEUoUE9JTlRFUl9FVkVOVFMp
CisgICAgdm9pZCBzZW5kUG9pbnRlck91dE92ZXIoTm9kZSosIGNvbnN0IFBsYXRmb3JtUG9pbnRl
ckV2ZW50Jik7CisgICAgYm9vbCBwb3N0RGlzcGF0Y2hQb2ludGVyRXZlbnQoTm9kZSosIGJvb2wp
OworICAgIGJvb2wgZGlzcGF0Y2hQb2ludGVyRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIGNvbnN0IFBsYXRmb3JtUG9pbnRlckV2ZW50Jik7CisjZW5kaWYgLy8gRU5BQkxFKFBP
SU5URVJfRVZFTlRTKQogCiAgICAgYm9vbCBwYXNzTW91c2VQcmVzc0V2ZW50VG9TdWJmcmFtZShN
b3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiwgRnJhbWUqIHN1YmZyYW1lKTsKICAgICBib29s
IHBhc3NNb3VzZU1vdmVFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0
cyYsIEZyYW1lKiBzdWJmcmFtZSwgSGl0VGVzdFJlc3VsdCogaG92ZXJlZE5vZGUgPSAwKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtRXZlbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtRXZlbnQuaAppbmRleCAyNTQ3YTJlLi5mYzY2NzA4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUV2ZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1FdmVudC5oCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTWljcm9zb2Z0IE9wZW4gVGVjaG5vbG9naWVzLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTcxLDYgKzcyLDE5IEBAIHB1YmxpYzoKICAgICAgICAgVG91Y2hFbmQsCiAgICAgICAgIFRv
dWNoQ2FuY2VsLAogI2VuZGlmCisjaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQorICAgICAgICAv
LyBQbGF0Zm9ybVBvaW50ZXJFdmVudAorICAgICAgICBQb2ludGVyRG93biwKKyAgICAgICAgUG9p
bnRlclVwLAorICAgICAgICBQb2ludGVyQ2FuY2VsLAorICAgICAgICBQb2ludGVyTW92ZSwKKyAg
ICAgICAgUG9pbnRlck92ZXIsCisgICAgICAgIFBvaW50ZXJPdXQsCisgICAgICAgIFBvaW50ZXJF
bnRlciwKKyAgICAgICAgUG9pbnRlckxlYXZlLAorICAgICAgICBHb3RQb2ludGVyQ2FwdHVyZSwK
KyAgICAgICAgTG9zdFBvaW50ZXJDYXB0dXJlLAorI2VuZGlmCiAgICAgfTsKIAogICAgIGVudW0g
TW9kaWZpZXJzIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3Jt
UG9pbnRlckV2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtUG9pbnRl
ckV2ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzU4NGJhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Qb2ludGVy
RXZlbnQuY3BwCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIE1p
Y3Jvc29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtUG9pbnRl
ckV2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGxvbmcgUG9p
bnRlck5vQnV0dG9uRGVmaW5lID0gMDsKK3N0YXRpYyBjb25zdCBsb25nIFBvaW50ZXJMZWZ0QnV0
dG9uRGVmaW5lID0gMTsKK3N0YXRpYyBjb25zdCBsb25nIFBvaW50ZXJNaWRkbGVCdXR0b25EZWZp
bmUgPSA0Oworc3RhdGljIGNvbnN0IGxvbmcgUG9pbnRlclJpZ2h0QnV0dG9uRGVmaW5lID0gMjsK
K3N0YXRpYyBjb25zdCBsb25nIFBvaW50ZXJYMUJ1dHRvbkRlZmluZSA9IDg7CitzdGF0aWMgY29u
c3QgbG9uZyBQb2ludGVyWDJCdXR0b25EZWZpbmUgPSAxNjsKK3N0YXRpYyBjb25zdCBsb25nIFBv
aW50ZXJQZW5FcmFzZUJ1dHRvbkRlZmluZSA9IDMyOworCitzdGF0aWMgbG9uZyBjb252ZXJ0QnV0
dG9uVG9DaG9yZGVkVmFsdWUoUG9pbnRlckJ1dHRvbiBidXR0b24pCit7CisgICAgc3dpdGNoIChi
dXR0b24pIHsKKyAgICBjYXNlIFBvaW50ZXJOb0J1dHRvbjoKKyAgICAgICAgcmV0dXJuIFBvaW50
ZXJOb0J1dHRvbkRlZmluZTsKKyAgICBjYXNlIFBvaW50ZXJMZWZ0QnV0dG9uOgorICAgICAgICBy
ZXR1cm4gUG9pbnRlckxlZnRCdXR0b25EZWZpbmU7CisgICAgY2FzZSBQb2ludGVyTWlkZGxlQnV0
dG9uOgorICAgICAgICByZXR1cm4gUG9pbnRlck1pZGRsZUJ1dHRvbkRlZmluZTsKKyAgICBjYXNl
IFBvaW50ZXJSaWdodEJ1dHRvbjoKKyAgICAgICAgcmV0dXJuIFBvaW50ZXJSaWdodEJ1dHRvbkRl
ZmluZTsKKyAgICBjYXNlIFBvaW50ZXJYMUJ1dHRvbjoKKyAgICAgICAgcmV0dXJuIFBvaW50ZXJY
MUJ1dHRvbkRlZmluZTsKKyAgICBjYXNlIFBvaW50ZXJYMkJ1dHRvbjoKKyAgICAgICAgcmV0dXJu
IFBvaW50ZXJYMkJ1dHRvbkRlZmluZTsKKyAgICBjYXNlIFBvaW50ZXJQZW5FcmFzZUJ1dHRvbjoK
KyAgICAgICAgcmV0dXJuIFBvaW50ZXJQZW5FcmFzZUJ1dHRvbkRlZmluZTsKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorfQorCitzdGF0aWMgbG9uZyBjb252ZXJ0TW91c2VCdXR0b25Ub0Nob3JkZWRWYWx1ZShNb3Vz
ZUJ1dHRvbiBidXR0b24pCit7CisgICAgc3dpdGNoIChidXR0b24pIHsKKyAgICBjYXNlIE5vQnV0
dG9uOgorICAgICAgICByZXR1cm4gUG9pbnRlck5vQnV0dG9uRGVmaW5lOworICAgIGNhc2UgTGVm
dEJ1dHRvbjoKKyAgICAgICAgcmV0dXJuIFBvaW50ZXJMZWZ0QnV0dG9uRGVmaW5lOworICAgIGNh
c2UgTWlkZGxlQnV0dG9uOgorICAgICAgICByZXR1cm4gUG9pbnRlck1pZGRsZUJ1dHRvbkRlZmlu
ZTsKKyAgICBjYXNlIFJpZ2h0QnV0dG9uOgorICAgICAgICByZXR1cm4gUG9pbnRlclJpZ2h0QnV0
dG9uRGVmaW5lOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3ZvaWQgUG9pbnRlckluZm86OkluaXQoUGxh
dGZvcm1FdmVudDo6VHlwZSBwbGF0Zm9ybVR5cGUsIFBvaW50ZXJUeXBlIHBvaW50ZXJUeXBlLCBs
b25nIHBvaW50ZXJJZCwgbG9uZyBjaG9yZGVkQnV0dG9ucykKK3sKKyAgICBpZiAocG9pbnRlclR5
cGUgPT0gUG9pbnRlclR5cGVNb3VzZSkgeworICAgICAgICBtX3BvaW50ZXJJZCA9IE1vdXNlUG9p
bnRlcklkOworICAgICAgICBtX3ByaW1hcnlQb2ludGVyID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYg
KHBvaW50ZXJUeXBlID09IFBvaW50ZXJUeXBlVG91Y2gpIHsKKyAgICAgICAgbV9wb2ludGVySWQg
PSBwb2ludGVySWQgKyAzOworICAgICAgICBtX3ByaW1hcnlQb2ludGVyID0gcG9pbnRlcklkOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIG1fcG9pbnRlcklkID0gUGVuUG9pbnRlcklkOworICAgICAg
ICBtX3ByaW1hcnlQb2ludGVyID0gdHJ1ZTsKKyAgICB9CisKKyAgICBtX3R5cGUgPSBwbGF0Zm9y
bVR5cGU7CisgICAgbV93aWR0aCA9IDA7CisgICAgbV9oZWlnaHQgPSAwOworICAgIG1fcHJlc3N1
cmUgPSAwOworICAgIG1fdGlsdFggPSAwOworICAgIG1fdGlsdFkgPSAwOworICAgIG1fcG9pbnRl
clR5cGUgPSBwb2ludGVyVHlwZTsKKyAgICBtX3Byb2Nlc3NlZCA9IGZhbHNlOworCisgICAgbV9j
aG9yZGVkQnV0dG9ucyA9IGNob3JkZWRCdXR0b25zOworfQorCitib29sIFBvaW50ZXJJbmZvOjpp
c0J1dHRvblByZXNzZWQoUG9pbnRlckJ1dHRvbiBidXR0b24pCit7CisgICAgbG9uZyBjaHJvZGVk
VmFsID0gY29udmVydEJ1dHRvblRvQ2hvcmRlZFZhbHVlKGJ1dHRvbik7CisgICAgcmV0dXJuICht
X2Nob3JkZWRCdXR0b25zICYgY2hyb2RlZFZhbCk7Cit9CisKK1BsYXRmb3JtUG9pbnRlckV2ZW50
OjpQbGF0Zm9ybVBvaW50ZXJFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQgJiBldmVudCkK
KyAgICA6IFBsYXRmb3JtTW91c2VFdmVudChldmVudCkKK3sKKyAgICBsb25nIGNob3JkZWRCdXR0
b25zID0gY29udmVydE1vdXNlQnV0dG9uVG9DaG9yZGVkVmFsdWUoZXZlbnQuYnV0dG9uKCkpOwor
CisgICAgbV9pbmZvLkluaXQoY29udmVydFRvUG9pbnRlclR5cGUoZXZlbnQudHlwZSgpKSwgUG9p
bnRlclR5cGVNb3VzZSwgUG9pbnRlckluZm86Ok1vdXNlUG9pbnRlcklkLCBjaG9yZGVkQnV0dG9u
cyk7Cit9CisKK1BsYXRmb3JtUG9pbnRlckV2ZW50OjpQbGF0Zm9ybVBvaW50ZXJFdmVudChjb25z
dCBQbGF0Zm9ybVRvdWNoUG9pbnQgJiB0b3VjaFBvaW50LCBpbnQgcGxhdGZvcm1UeXBlLCB1bnNp
Z25lZCBtb2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApCisgICAgOiBQbGF0Zm9ybU1vdXNlRXZl
bnQoKQoreworICAgIG1faW5mby5Jbml0KGNvbnZlcnRUb1BvaW50ZXJUeXBlKFBsYXRmb3JtRXZl
bnQ6OlR5cGUocGxhdGZvcm1UeXBlKSksIFBvaW50ZXJUeXBlVG91Y2gsIHRvdWNoUG9pbnQuaWQo
KSwgUG9pbnRlck5vQnV0dG9uRGVmaW5lKTsKKyAgICBtX21vZGlmaWVycyA9IG1vZGlmaWVyczsK
KyAgICBtX3RpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKyAgICBtX3Bvc2l0aW9uID0gdG91Y2hQb2lu
dC5wb3MoKTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0gdG91Y2hQb2ludC5zY3JlZW5Qb3MoKTsK
K30KKworLy8gZXhwZWN0cyBjb252ZXJzaW9uIGZyb20gUGxhdGZvcm1Nb3VzZUV2ZW50IG9yIFBs
YXRmb3JtVG91Y2hFdmVudCBvbmx5CisvLworUGxhdGZvcm1FdmVudDo6VHlwZSBQbGF0Zm9ybVBv
aW50ZXJFdmVudDo6Y29udmVydFRvUG9pbnRlclR5cGUoUGxhdGZvcm1FdmVudDo6VHlwZSBwbGF0
Zm9ybVR5cGUpCit7CisgICAgc3dpdGNoIChwbGF0Zm9ybVR5cGUpIHsKKyAgICBjYXNlIE1vdXNl
TW92ZWQ6CisgICAgICAgIHJldHVybiBQb2ludGVyTW92ZTsKKyAgICBjYXNlIE1vdXNlUHJlc3Nl
ZDoKKyAgICAgICAgcmV0dXJuIFBvaW50ZXJEb3duOworICAgIGNhc2UgTW91c2VSZWxlYXNlZDoK
KyAgICAgICAgcmV0dXJuIFBvaW50ZXJVcDsKKyAgICBjYXNlIFRvdWNoU3RhcnQ6CisgICAgICAg
IHJldHVybiBQb2ludGVyRG93bjsKKyAgICBjYXNlIFRvdWNoTW92ZToKKyAgICAgICAgcmV0dXJu
IFBvaW50ZXJNb3ZlOworICAgIGNhc2UgVG91Y2hFbmQ6CisgICAgICAgIHJldHVybiBQb2ludGVy
VXA7CisgICAgY2FzZSBUb3VjaENhbmNlbDoKKyAgICAgICAgcmV0dXJuIFBvaW50ZXJDYW5jZWw7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBOb1R5cGU7CisgICAgfQorfQorCitQbGF0Zm9ybVBvaW50ZXJFdmVudENvbGxlY3Rpb246
OlBsYXRmb3JtUG9pbnRlckV2ZW50Q29sbGVjdGlvbihjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
IGV2ZW50KQoreworICAgIGV2ZW50cy5hcHBlbmQoUGxhdGZvcm1Qb2ludGVyRXZlbnQoZXZlbnQp
KTsKK30KKworUGxhdGZvcm1Qb2ludGVyRXZlbnRDb2xsZWN0aW9uOjpQbGF0Zm9ybVBvaW50ZXJF
dmVudENvbGxlY3Rpb24oY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQorewor
ICAgIFBsYXRmb3JtVG91Y2hFdmVudCBldmVudCA9IHRvdWNoRXZlbnQ7CisgICAgZm9yIChWZWN0
b3I8UGxhdGZvcm1Ub3VjaFBvaW50Pjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV2ZW50LnRvdWNo
UG9pbnRzKCkuYmVnaW4oKTsgaXRlciAhPSBldmVudC50b3VjaFBvaW50cygpLmVuZCgpOyBpdGVy
KyspIHsKKyAgICAgICAgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiB0b3VjaFBvaW50ID0gKCpp
dGVyKTsKKyAgICAgICAgZXZlbnRzLmFwcGVuZChQbGF0Zm9ybVBvaW50ZXJFdmVudCh0b3VjaFBv
aW50LCBldmVudC50eXBlKCksIGV2ZW50Lm1vZGlmaWVycygpLCBldmVudC50aW1lc3RhbXAoKSkp
OworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Qb2ludGVyRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1BsYXRmb3JtUG9pbnRlckV2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uM2FiMjBlYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1BsYXRmb3JtUG9pbnRlckV2ZW50LmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgTWljcm9zb2Z0IE9wZW4gVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UKKyAqLworCisjaWZuZGVmIFBsYXRmb3JtUG9pbnRlckV2
ZW50X2gKKyNkZWZpbmUgUGxhdGZvcm1Qb2ludGVyRXZlbnRfaAorCisjaW5jbHVkZSAiUGxhdGZv
cm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Ub3VjaEV2ZW50LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGxhdGZvcm1Qb2ludGVyRXZlbnQ7CisKK2VudW0gUG9p
bnRlclR5cGUgeworICAgIFBvaW50ZXJUeXBlTWluID0gMCwKKyAgICBQb2ludGVyVHlwZVRvdWNo
ID0gMCwKKyAgICBQb2ludGVyVHlwZVBlbiA9IDEsCisgICAgUG9pbnRlclR5cGVNb3VzZSA9IDIs
CisgICAgUG9pbnRlclR5cGVNYXggPSAzCit9OworCitlbnVtIFBvaW50ZXJCdXR0b24geworICAg
IFBvaW50ZXJOb0J1dHRvbiA9IC0xLCAvLyBubyBidXR0b25zIHByZXNzZWQgb24gZGV2aWNlCisg
ICAgUG9pbnRlckxlZnRCdXR0b24sIC8vIExlZnQgbW91c2UgYnV0dG9uLCBUb3VjaCBjb250YWN0
LCBQZW4gY29udGFjdAorICAgIFBvaW50ZXJNaWRkbGVCdXR0b24sIC8vIE1pZGRsZSBtb3VzZSBi
dXR0b24KKyAgICBQb2ludGVyUmlnaHRCdXR0b24sIC8vIFJpZ2h0IG1vdXNlIGJ1dHRvbiwgUGVu
IGNvbnRhY3Qgd2l0aCBiYXJyZWwgYnV0dG9uIHByZXNzZWQKKyAgICBQb2ludGVyWDFCdXR0b24s
IC8vIEJhY2sgbW91c2UgYnV0dG9uCisgICAgUG9pbnRlclgyQnV0dG9uLCAvLyBGb3J3YXJkIG1v
dXNlIGJ1dHRvbgorICAgIFBvaW50ZXJQZW5FcmFzZUJ1dHRvbiAvLyBQZW4gY29udGFjdCB3aXRo
IGVyYXNlIGJ1dHRvbiBwcmVzc2VkCit9OworCit0eXBlZGVmIHN0cnVjdCBQb2ludGVySW5mbyB7
CisKKyAgICBzdGF0aWMgY29uc3QgbG9uZyBNb3VzZVBvaW50ZXJJZCA9IDE7CisgICAgc3RhdGlj
IGNvbnN0IGxvbmcgUGVuUG9pbnRlcklkID0gMjsKKworICAgIC8vIGNvcHkgb2YgUGxhdGZvcm1F
dmVudCBmaWVsZCBtX3R5cGUKKyAgICB1bnNpZ25lZCBtX3R5cGU7CisKKyAgICAvLyBzdGFydCBv
ZiBwb2ludGVyIGV2ZW50IHByb3BlcnRpZXMKKyAgICBsb25nIG1fcG9pbnRlcklkOyAvLyBJZCBv
ZiBwb2ludGVyIChtb3VzZSwgdG91Y2gxLCAuLi4sIHBlbjEsLi4uICkKKyAgICBsb25nIG1fd2lk
dGg7CisgICAgbG9uZyBtX2hlaWdodDsKKyAgICBkb3VibGUgbV9wcmVzc3VyZTsKKyAgICBsb25n
IG1fdGlsdFg7CisgICAgbG9uZyBtX3RpbHRZOworICAgIFBvaW50ZXJUeXBlIG1fcG9pbnRlclR5
cGU7IC8vIFR5cGUgb2YgcG9pbnRlciAobW91c2UsIHRvdWNoLCBwZW4pCisgICAgYm9vbCBtX3By
aW1hcnlQb2ludGVyOworICAgIGxvbmcgbV9jaG9yZGVkQnV0dG9uczsgLy8gQ29tYmluZWQgYnV0
dG9ucyBmb3IgdGhlIHBvaW50ZXIKKyAgICBib29sIG1fcHJvY2Vzc2VkOyAvLyBpZiB0cnVlLCBk
byBub3QgZGlzcGF0Y2ggdG8gc2NyaXB0aW5nIGVuZ2luZQorCisgICAgdm9pZCBJbml0KFBsYXRm
b3JtRXZlbnQ6OlR5cGUsIFBvaW50ZXJUeXBlLCBsb25nIHBvaW50ZXJJZCwgbG9uZyBjaG9yZGVk
QnV0dG9ucyk7CisgICAgYm9vbCBpc0J1dHRvblByZXNzZWQoUG9pbnRlckJ1dHRvbik7CisgICAg
dm9pZCBhZGRCdXR0b25zKGxvbmcgY2hvcmRlZEJ1dHRvbnMpIHsgbV9jaG9yZGVkQnV0dG9ucyA9
IG1fY2hvcmRlZEJ1dHRvbnMgfCBjaG9yZGVkQnV0dG9uczsgfQorCit9IFBvaW50ZXJJbmZvOwor
CitjbGFzcyBQbGF0Zm9ybVBvaW50ZXJFdmVudCA6IHB1YmxpYyBQbGF0Zm9ybU1vdXNlRXZlbnQg
eworCitwdWJsaWM6CisgICAgZXhwbGljaXQgUGxhdGZvcm1Qb2ludGVyRXZlbnQoY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50ICYpOworICAgIGV4cGxpY2l0IFBsYXRmb3JtUG9pbnRlckV2ZW50KGNv
bnN0IFBsYXRmb3JtVG91Y2hQb2ludCAmLCBpbnQsIHVuc2lnbmVkLCBkb3VibGUpOworCisgICAg
Ym9vbCBpc1ByaW1hcnkoKSB7IHJldHVybiBtX2luZm8ubV9wcmltYXJ5UG9pbnRlcjsgfQorICAg
IHZvaWQgc2V0UHJpbWFyeShib29sIHByaW1hcnkpIHsgbV9pbmZvLm1fcHJpbWFyeVBvaW50ZXIg
PSBwcmltYXJ5OyB9CisgICAgY29uc3QgUG9pbnRlckluZm8mIGdldFBvaW50ZXJJbmZvKCkgY29u
c3QgeyByZXR1cm4gbV9pbmZvOyB9CisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8VHlwZT4obV9pbmZvLm1fdHlwZSk7IH0KKyAgICBib29sIFBvaW50ZXJQcm9jZXNz
ZWQoKSBjb25zdCB7IHJldHVybiBtX2luZm8ubV9wcm9jZXNzZWQ7IH0KKworcHJvdGVjdGVkOgor
ICAgIFBsYXRmb3JtRXZlbnQ6OlR5cGUgY29udmVydFRvUG9pbnRlclR5cGUoUGxhdGZvcm1FdmVu
dDo6VHlwZSk7CisgICAgUG9pbnRlckluZm8gbV9pbmZvOworCitwcml2YXRlOgorICAgIFBsYXRm
b3JtUG9pbnRlckV2ZW50KCkgeyB9Cit9OworCitjbGFzcyBQbGF0Zm9ybVBvaW50ZXJFdmVudENv
bGxlY3Rpb24geworCitwdWJsaWM6CisKKyAgICBleHBsaWNpdCBQbGF0Zm9ybVBvaW50ZXJFdmVu
dENvbGxlY3Rpb24oY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50ICYpOworICAgIGV4cGxpY2l0IFBs
YXRmb3JtUG9pbnRlckV2ZW50Q29sbGVjdGlvbihjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQgJik7
CisgICAgVmVjdG9yPFBsYXRmb3JtUG9pbnRlckV2ZW50PiBldmVudHM7CisKK3ByaXZhdGU6Cisg
ICAgUGxhdGZvcm1Qb2ludGVyRXZlbnRDb2xsZWN0aW9uKCkgeyB9Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQbGF0Zm9ybVBvaW50ZXJFdmVudF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKaW5kZXggOWEyYWNjMi4uMDc5YWE1YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQpAQCAtMTAxLDYgKzEwMSw3IEBACiAgICAgICAnRU5B
QkxFX1BBR0VfVklTSUJJTElUWV9BUEk9MScsCiAgICAgICAnRU5BQkxFX1BFUkZPUk1BTkNFX1RJ
TUVMSU5FPTEnLAogICAgICAgJ0VOQUJMRV9QT0lOVEVSX0xPQ0s9MScsCisgICAgICAnRU5BQkxF
X1BPSU5URVJfRVZFTlRTPTEnLAogICAgICAgJ0VOQUJMRV9QUk9HUkVTU19FTEVNRU5UPTEnLAog
ICAgICAgJ0VOQUJMRV9QUk9YSU1JVFlfRVZFTlRTPTAnLAogICAgICAgJ0VOQUJMRV9RVU9UQT0x
JywK
</data>
<flag name="commit-queue"
          id="216173"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>199314</attachid>
            <date>2013-04-23 12:24:54 -0700</date>
            <delta_ts>2013-04-23 12:24:54 -0700</delta_ts>
            <desc>Updated pointer events implementation</desc>
            <filename>pointerevents-20130423.patch</filename>
            <type>text/plain</type>
            <size>59631</size>
            <attacher name="Scott Blomquist">sblom</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2Uv
V2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDBkN2E2NWQuLmYxYWI3MDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dl
YkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMSw2ICsxLDcgQEAKICMgQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICMgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29t
PgogIyBDb3B5cmlnaHQgKEMpIDIwMDkgQ2FtZXJvbiBNY0Nvcm1hY2sgPGNhbUBtY2MuaWQuYXU+
CisjIENvcHlyaWdodCAoQykgMjAxMyBNaWNyb3NvZnQgT3BlbiBUZWNobm9sb2dpZXMsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjY2
LDYgKzI2Nyw3IEBAIEJJTkRJTkdfSURMUyA9IFwKICAgICAkKFdlYkNvcmUpL2RvbS9Ob3RhdGlv
bi5pZGwgXAogICAgICQoV2ViQ29yZSkvZG9tL092ZXJmbG93RXZlbnQuaWRsIFwKICAgICAkKFdl
YkNvcmUpL2RvbS9QYWdlVHJhbnNpdGlvbkV2ZW50LmlkbCBcCisgICAgJChXZWJDb3JlKS9kb20v
UG9pbnRlckV2ZW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9kb20vUG9wU3RhdGVFdmVudC5pZGwg
XAogICAgICQoV2ViQ29yZSkvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5pZGwgXAogICAgICQo
V2ViQ29yZSkvZG9tL1Byb2dyZXNzRXZlbnQuaWRsIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0Rlcml2ZWRTb3VyY2VzLnByaSBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnBy
aQppbmRleCBkYmVjYTQ3Li5hZjNhYjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9EZXJp
dmVkU291cmNlcy5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCkBA
IC0yNzIsNiArMjcyLDcgQEAgSURMX0JJTkRJTkdTICs9IFwKICAgICAkJFBXRC9kb20vTm90YXRp
b24uaWRsIFwKICAgICAkJFBXRC9kb20vT3ZlcmZsb3dFdmVudC5pZGwgXAogICAgICQkUFdEL2Rv
bS9QYWdlVHJhbnNpdGlvbkV2ZW50LmlkbCBcCisgICAgJCRQV0QvZG9tL1BvaW50ZXJFdmVudC5p
ZGwgXAogICAgICQkUFdEL2RvbS9Qb3BTdGF0ZUV2ZW50LmlkbCBcCiAgICAgJCRQV0QvZG9tL1By
b2Nlc3NpbmdJbnN0cnVjdGlvbi5pZGwgXAogICAgICQkUFdEL2RvbS9Qcm9ncmVzc0V2ZW50Lmlk
bCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBiMDhkMDM1Li4zNTk4NjllIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTE0MjIsNiArMTQyMiw3IEBAIGRvbV9i
aW5kaW5nX2lkbHMgKz0gXAogCSQoV2ViQ29yZSkvZG9tL05vdGF0aW9uLmlkbCBcCiAJJChXZWJD
b3JlKS9kb20vT3ZlcmZsb3dFdmVudC5pZGwgXAogCSQoV2ViQ29yZSkvZG9tL1BhZ2VUcmFuc2l0
aW9uRXZlbnQuaWRsIFwKKwkkKFdlYkNvcmUpL2RvbS9Qb2ludGVyRXZlbnQuaWRsIFwKIAkkKFdl
YkNvcmUpL2RvbS9Qb3BTdGF0ZUV2ZW50LmlkbCBcCiAJJChXZWJDb3JlKS9kb20vUHJvY2Vzc2lu
Z0luc3RydWN0aW9uLmlkbCBcCiAJJChXZWJDb3JlKS9kb20vUHJvZ3Jlc3NFdmVudC5pZGwgXApA
QCAtNTk3Niw2ICs1OTc3LDcgQEAgd2ViY29yZV9wbGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtUG9pbnRlckV2ZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtU2NyZWVuLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2ll
cy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5oIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQppbmRleCBjM2QyOTI2Li5iODEwNGMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBA
IC0zMzIsNiArMzMyLDcgQEAKICAgICAgICAgICAgICdkb20vTm90YXRpb24uaWRsJywKICAgICAg
ICAgICAgICdkb20vT3ZlcmZsb3dFdmVudC5pZGwnLAogICAgICAgICAgICAgJ2RvbS9QYWdlVHJh
bnNpdGlvbkV2ZW50LmlkbCcsCisgICAgICAgICAgICAnZG9tL1BvaW50ZXJFdmVudC5pZGwnLAog
ICAgICAgICAgICAgJ2RvbS9Qb3BTdGF0ZUV2ZW50LmlkbCcsCiAgICAgICAgICAgICAnZG9tL1By
b2Nlc3NpbmdJbnN0cnVjdGlvbi5pZGwnLAogICAgICAgICAgICAgJ2RvbS9Qcm9ncmVzc0V2ZW50
LmlkbCcsCkBAIC0yOTk1LDYgKzI5OTYsNyBAQAogICAgICAgICAgICAgJ2RvbS9QYWdlVHJhbnNp
dGlvbkV2ZW50LmNwcCcsCiAgICAgICAgICAgICAnZG9tL1BhZ2VUcmFuc2l0aW9uRXZlbnQuaCcs
CiAgICAgICAgICAgICAnZG9tL1BlbmRpbmdTY3JpcHQuY3BwJywKKyAgICAgICAgICAgICdkb20v
UG9pbnRlckV2ZW50LmNwcCcsCiAgICAgICAgICAgICAnZG9tL1BvcFN0YXRlRXZlbnQuY3BwJywK
ICAgICAgICAgICAgICdkb20vUG9wU3RhdGVFdmVudC5oJywKICAgICAgICAgICAgICdkb20vUG9z
aXRpb24uY3BwJywKQEAgLTM2NTksNiArMzY2MSw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
UGxhdGZvcm1JbnN0cnVtZW50YXRpb24uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vUGxhdGZv
cm1NZW1vcnlJbnN0cnVtZW50YXRpb24uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0
Zm9ybU1lbW9yeUluc3RydW1lbnRhdGlvbi5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0
Zm9ybVBvaW50ZXJFdmVudC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtUG9p
bnRlckV2ZW50LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtU3BlZWNoU3ludGhl
c2lzVXR0ZXJhbmNlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vUGxhdGZvcm1TcGVlY2hT
eW50aGVzaXNVdHRlcmFuY2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vUGxhdGZvcm1TcGVl
Y2hTeW50aGVzaXNWb2ljZS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCBmODAwOTJiLi4x
NWRmYTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtNyw2ICs3LDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAo
aHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgTWljcm9zb2Z0IE9wZW4gVGVjaG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI3Myw3ICsyNzQsMTggQEAgcHVibGljOgogICAg
IERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoc2Nyb2xsKTsKICAgICBERUZJTkVfQVRU
UklCVVRFX0VWRU5UX0xJU1RFTkVSKHNlbGVjdCk7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVO
VF9MSVNURU5FUihzdWJtaXQpOwotCisjaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQorICAgIERF
RklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIocG9pbnRlcmRvd24pOworICAgIERFRklORV9B
VFRSSUJVVEVfRVZFTlRfTElTVEVORVIocG9pbnRlcnVwKTsKKyAgICBERUZJTkVfQVRUUklCVVRF
X0VWRU5UX0xJU1RFTkVSKHBvaW50ZXJjYW5jZWwpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZF
TlRfTElTVEVORVIocG9pbnRlcm1vdmUpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElT
VEVORVIocG9pbnRlcm92ZXIpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIo
cG9pbnRlcm91dCk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihwb2ludGVy
ZW50ZXIpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIocG9pbnRlcmxlYXZl
KTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGdvdHBvaW50ZXJjYXB0dXJl
KTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGxvc3Rwb2ludGVyY2FwdHVy
ZSk7CisjZW5kaWYKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGJsdXIpOwog
ICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZXJyb3IpOwogICAgIERFRklORV9B
VFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZm9jdXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKaW5k
ZXggMzkxYTVlZC4uM2E3YWMwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgU2FtdWVsIFdl
aW5pZyA8c2FtQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTWljcm9zb2Z0IE9w
ZW4gVGVjaG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTMyNSw2ICszMjYsMTYgQEAKICAgICAvLyBhdHRyaWJ1dGUgW05vdEVudW1lcmFi
bGVdIEV2ZW50TGlzdGVuZXIgb252b2x1bWVjaGFuZ2U7CiAgICAgLy8gYXR0cmlidXRlIFtOb3RF
bnVtZXJhYmxlXSBFdmVudExpc3RlbmVyIG9ud2FpdGluZzsKIAorICAgIC8vIFBvaW50ZXIgZXZl
bnRzCisgICAgW05vdEVudW1lcmFibGVdIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ucG9pbnRl
cmRvd247CisgICAgW05vdEVudW1lcmFibGVdIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ucG9p
bnRlcnVwOworICAgIFtOb3RFbnVtZXJhYmxlXSBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbnBv
aW50ZXJjYW5jZWw7CisgICAgW05vdEVudW1lcmFibGVdIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVy
IG9ucG9pbnRlcm1vdmU7CisgICAgW05vdEVudW1lcmFibGVdIGF0dHJpYnV0ZSBFdmVudExpc3Rl
bmVyIG9ucG9pbnRlcm92ZXI7CisgICAgW05vdEVudW1lcmFibGVdIGF0dHJpYnV0ZSBFdmVudExp
c3RlbmVyIG9ucG9pbnRlcm91dDsKKyAgICBbTm90RW51bWVyYWJsZV0gYXR0cmlidXRlIEV2ZW50
TGlzdGVuZXIgb25nb3Rwb2ludGVyY2FwdHVyZTsKKyAgICBbTm90RW51bWVyYWJsZV0gYXR0cmli
dXRlIEV2ZW50TGlzdGVuZXIgb25sb3N0cG9pbnRlcmNhcHR1cmU7CisKICAgICAvLyBXZWJLaXQg
ZXh0ZW5zaW9ucwogICAgIFtOb3RFbnVtZXJhYmxlXSBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBv
bmJlZm9yZWN1dDsKICAgICBbTm90RW51bWVyYWJsZV0gYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIg
b25jdXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuaAppbmRleCBkMmJiNWRiLi5hYjA3ZWU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmgKQEAgLTQsNiArNCw3IEBACiAgKiAgICAgICAgICAgKEMpIDIwMDEgUGV0ZXIgS2Vs
bHkgKHBta0Bwb3N0LmNvbSkKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11
ZWxsZXJAa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTWljcm9zb2Z0IE9wZW4gVGVjaG5vbG9n
aWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIw
Nyw2ICsyMDgsMTYgQEAgcHVibGljOgogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVO
RVIoc2Nyb2xsKTsKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHNlbGVjdCk7
CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihzdWJtaXQpOworI2lmIEVOQUJM
RShQT0lOVEVSX0VWRU5UUykKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHBv
aW50ZXJkb3duKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHBvaW50ZXJ1
cCk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihwb2ludGVyY2FuY2VsKTsK
KyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHBvaW50ZXJtb3ZlKTsKKyAgICBE
RUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHBvaW50ZXJvdmVyKTsKKyAgICBERUZJTkVf
QVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHBvaW50ZXJvdXQpOworICAgIERFRklORV9BVFRSSUJV
VEVfRVZFTlRfTElTVEVORVIoZ290cG9pbnRlcmNhcHR1cmUpOworICAgIERFRklORV9BVFRSSUJV
VEVfRVZFTlRfTElTVEVORVIobG9zdHBvaW50ZXJjYXB0dXJlKTsKKyNlbmRpZgogCiAgICAgLy8g
VGhlc2UgZm91ciBhdHRyaWJ1dGUgZXZlbnQgaGFuZGxlciBhdHRyaWJ1dGVzIGFyZSBvdmVycmlk
ZGVuIGJ5IEhUTUxCb2R5RWxlbWVudAogICAgIC8vIGFuZCBIVE1MRnJhbWVTZXRFbGVtZW50IHRv
IGZvcndhcmQgdG8gdGhlIERPTVdpbmRvdy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmlkbAppbmRleCAzODgw
NmRhLi5mODdkZTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaWRsCkBAIC0xLDYgKzEsNyBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5p
Z0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTWljcm9zb2Z0IE9wZW4gVGVjaG5v
bG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTIxNiw2ICsyMTcsMTYgQEAKICAgICAvLyBhdHRyaWJ1dGUgW05vdEVudW1lcmFibGVdIEV2ZW50
TGlzdGVuZXIgb252b2x1bWVjaGFuZ2U7CiAgICAgLy8gYXR0cmlidXRlIFtOb3RFbnVtZXJhYmxl
XSBFdmVudExpc3RlbmVyIG9ud2FpdGluZzsKIAorICAgIC8vIFBvaW50ZXIgZXZlbnRzCisgICAg
W05vdEVudW1lcmFibGVdIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ucG9pbnRlcmRvd247Cisg
ICAgW05vdEVudW1lcmFibGVdIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ucG9pbnRlcnVwOwor
ICAgIFtOb3RFbnVtZXJhYmxlXSBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbnBvaW50ZXJjYW5j
ZWw7CisgICAgW05vdEVudW1lcmFibGVdIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ucG9pbnRl
cm1vdmU7CisgICAgW05vdEVudW1lcmFibGVdIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ucG9p
bnRlcm92ZXI7CisgICAgW05vdEVudW1lcmFibGVdIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9u
cG9pbnRlcm91dDsKKyAgICBbTm90RW51bWVyYWJsZV0gYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIg
b25nb3Rwb2ludGVyY2FwdHVyZTsKKyAgICBbTm90RW51bWVyYWJsZV0gYXR0cmlidXRlIEV2ZW50
TGlzdGVuZXIgb25sb3N0cG9pbnRlcmNhcHR1cmU7CisKICAgICAvLyBXZWJLaXQgZXh0ZW5zaW9u
cwogICAgIFtOb3RFbnVtZXJhYmxlLCBWOFBlcldvcmxkQmluZGluZ3NdIGF0dHJpYnV0ZSBFdmVu
dExpc3RlbmVyIG9uYmVmb3JlY3V0OwogICAgIFtOb3RFbnVtZXJhYmxlLCBWOFBlcldvcmxkQmlu
ZGluZ3NdIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uY3V0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVz
LmgKaW5kZXggNjAxYzY4Mi4uNWRkNTVmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50TmFtZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCkBAIC0x
LDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSm9uIFNoaWVyIChqc2hp
ZXJAaWFzdGF0ZS5lZHUpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTWljcm9zb2Z0IE9wZW4gVGVj
aG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTI1Myw2ICsyNTQsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIG1hY3JvKGF1dG9j
b21wbGV0ZSkgXAogICAgIG1hY3JvKGF1dG9jb21wbGV0ZWVycm9yKSBcCiAgICAgXAorICAgIG1h
Y3JvKHBvaW50ZXJkb3duKSBcCisgICAgbWFjcm8ocG9pbnRlcnVwKSBcCisgICAgbWFjcm8ocG9p
bnRlcmNhbmNlbCkgXAorICAgIG1hY3JvKHBvaW50ZXJtb3ZlKSBcCisgICAgbWFjcm8ocG9pbnRl
cm92ZXIpIFwKKyAgICBtYWNybyhwb2ludGVyb3V0KSBcCisgICAgbWFjcm8ocG9pbnRlcmVudGVy
KSBcCisgICAgbWFjcm8ocG9pbnRlcmxlYXZlKSBcCisgICAgbWFjcm8oZ290cG9pbnRlcmNhcHR1
cmUpIFwKKyAgICBtYWNybyhsb3N0cG9pbnRlcmNhcHR1cmUpIFwKKyAgICBcCiAgICAgbWFjcm8o
d2Via2l0cHJlcmVuZGVyc3RhcnQpIFwKICAgICBtYWNybyh3ZWJraXRwcmVyZW5kZXJzdG9wKSBc
CiAgICAgbWFjcm8od2Via2l0cHJlcmVuZGVybG9hZCkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50TmFtZXMuaW4gYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5p
bgppbmRleCAxMjRlZjUzLi5lYjcwNDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnROYW1lcy5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5pbgpAQCAt
MTksNiArMTksOCBAQCBNdXRhdGlvbkV2ZW50CiBNdXRhdGlvbkV2ZW50cyBpbnRlcmZhY2VOYW1l
PU11dGF0aW9uRXZlbnQKIE92ZXJmbG93RXZlbnQKIFBhZ2VUcmFuc2l0aW9uRXZlbnQKK1BvaW50
ZXJFdmVudAorUG9pbnRlckV2ZW50cyBpbnRlcmZhY2VOYW1lPVBvaW50ZXJFdmVudAogUG9wU3Rh
dGVFdmVudAogUHJvZ3Jlc3NFdmVudAogVGV4dEV2ZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggZDJj
MGI1MC4uZjIyNzZiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtNSw2ICs1LDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAoQykgMjAxMyBNaWNyb3NvZnQgT3Bl
biBUZWNobm9sb2dpZXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMTI4LDYgKzEyOSwxMCBAQAogI2luY2x1ZGUgIkdlc3R1cmVFdmVudC5oIgogI2Vu
ZGlmCiAKKyNpZiBFTkFCTEUoUE9JTlRFUl9FVkVOVFMpCisjaW5jbHVkZSAiUG9pbnRlckV2ZW50
LmgiCisjZW5kaWYKKwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAjaW5jbHVkZSAiSW5zcGVjdG9y
Q29udHJvbGxlci5oIgogI2VuZGlmCkBAIC0yNDA4LDYgKzI0MTMsMTYgQEAgYm9vbCBOb2RlOjpk
aXNwYXRjaEdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZXZlbnQpCiB9
CiAjZW5kaWYKIAorI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKK2Jvb2wgTm9kZTo6ZGlzcGF0
Y2hQb2ludGVyRXZlbnQoY29uc3QgUGxhdGZvcm1Qb2ludGVyRXZlbnQmIGV2ZW50LAorICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBpbnQgZGV0YWlsLCBOb2RlKiByZWxhdGVkVGFy
Z2V0KQoreworICAgIHJldHVybiBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQodGhpcywK
KyAgICAgICAgUG9pbnRlckV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6Y3JlYXRlKFBvaW50ZXJFdmVu
dDo6Y3JlYXRlKGV2ZW50VHlwZSwKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmRlZmF1bHRWaWV3
KCksIGV2ZW50LCBkZXRhaWwsIHJlbGF0ZWRUYXJnZXQpKSk7Cit9CisjZW5kaWYKKwogI2lmIEVO
QUJMRShUT1VDSF9FVkVOVFMpCiBib29sIE5vZGU6OmRpc3BhdGNoVG91Y2hFdmVudChQYXNzUmVm
UHRyPFRvdWNoRXZlbnQ+IGV2ZW50KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggZWFlOTE0OS4uODE1MjVl
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5oCkBAIC00LDYgKzQsNyBAQAogICogICAgICAgICAgIChDKSAyMDAxIERp
cmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICog
Q29weXJpZ2h0IChDKSAyMDEzIE1pY3Jvc29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC03Niw2ICs3Nyw3IEBAIGNs
YXNzIE5vZGVSYXJlRGF0YTsKIGNsYXNzIE5vZGVSZW5kZXJpbmdDb250ZXh0OwogY2xhc3MgUGxh
dGZvcm1LZXlib2FyZEV2ZW50OwogY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50OworY2xhc3MgUGxh
dGZvcm1Qb2ludGVyRXZlbnQ7CiBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFzcyBRdWFs
aWZpZWROYW1lOwogY2xhc3MgUmFkaW9Ob2RlTGlzdDsKQEAgLTY0Nyw2ICs2NDksMTEgQEAgcHVi
bGljOgogI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKICAgICBib29sIGRpc3BhdGNoR2VzdHVy
ZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50Jik7CiAjZW5kaWYKKyNpZiBFTkFCTEUo
UE9JTlRFUl9FVkVOVFMpCisgICAgYm9vbCBkaXNwYXRjaFBvaW50ZXJFdmVudChjb25zdCBQbGF0
Zm9ybVBvaW50ZXJFdmVudCYsCisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBpbnQgY2xpY2tDb3VudCA9IDAsCisgICAgICAgIE5vZGUqIHJlbGF0ZWRUYXJnZXQgPSAwKTsK
KyNlbmRpZgogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgYm9vbCBkaXNwYXRjaFRvdWNo
RXZlbnQoUGFzc1JlZlB0cjxUb3VjaEV2ZW50Pik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Qb2ludGVyRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1BvaW50
ZXJFdmVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDliNGQ0OQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb2ludGVyRXZlbnQuY3BwCkBA
IC0wLDAgKzEsMjU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMyBNaWNyb3NvZnQgT3BlbiBUZWNobm9sb2dpZXMsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQb2lu
dGVyRXZlbnQuaCIKKworI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgor
I2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtUG9pbnRlckV2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUG9pbnRlckV2ZW50SW5pdDo6UG9pbnRlckV2ZW50SW5pdCgpCisgICAgOiBwb2ludGVySWQo
MCkKKyAgICAsIHdpZHRoKDApCisgICAgLCBoZWlnaHQoMCkKKyAgICAsIHByZXNzdXJlKDApCisg
ICAgLCB0aWx0WCgwKQorICAgICwgdGlsdFkoMCkKKyAgICAsIHBvaW50ZXJUeXBlKCIiKQorICAg
ICwgaXNQcmltYXJ5KGZhbHNlKQoreworfQorCisKK1Bhc3NSZWZQdHI8UG9pbnRlckV2ZW50PiBQ
b2ludGVyRXZlbnQ6OmNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsCisgICAgY29uc3Qg
UG9pbnRlckV2ZW50SW5pdCYgaW5pdGlhbGl6ZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBQb2ludGVyRXZlbnQodHlwZSwgaW5pdGlhbGl6ZXIpKTsKK30KKworUGFzc1JlZlB0cjxQb2lu
dGVyRXZlbnQ+IFBvaW50ZXJFdmVudDo6Y3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLAorICAgIFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3LCBjb25zdCBQbGF0Zm9ybVBv
aW50ZXJFdmVudCYgZXZlbnQsCisgICAgaW50IGRldGFpbCwgUGFzc1JlZlB0cjxOb2RlPiByZWxh
dGVkVGFyZ2V0KQoreworICAgIGJvb2wgaXNDYW5jZWxhYmxlID0gZXZlbnRUeXBlICE9IGV2ZW50
TmFtZXMoKS5wb2ludGVybW92ZUV2ZW50OworCisgICAgcmV0dXJuIFBvaW50ZXJFdmVudDo6Y3Jl
YXRlKGV2ZW50VHlwZSwgdHJ1ZSwgaXNDYW5jZWxhYmxlLCB2aWV3LAorICAgICAgICBkZXRhaWws
IGV2ZW50Lmdsb2JhbFBvc2l0aW9uKCkueCgpLCBldmVudC5nbG9iYWxQb3NpdGlvbigpLnkoKSwK
KyAgICAgICAgZXZlbnQucG9zaXRpb24oKS54KCksIGV2ZW50LnBvc2l0aW9uKCkueSgpLAorI2lm
IEVOQUJMRShQT0lOVEVSX0xPQ0spCisgICAgICAgIGV2ZW50Lm1vdmVtZW50RGVsdGEoKS54KCks
IGV2ZW50Lm1vdmVtZW50RGVsdGEoKS55KCksCisjZW5kaWYKKyAgICAgICAgZXZlbnQuY3RybEtl
eSgpLAorICAgICAgICBldmVudC5hbHRLZXkoKSwKKyAgICAgICAgZXZlbnQuc2hpZnRLZXkoKSwK
KyAgICAgICAgZXZlbnQubWV0YUtleSgpLAorICAgICAgICBldmVudC5idXR0b24oKSwKKyAgICAg
ICAgcmVsYXRlZFRhcmdldCwKKyAgICAgICAgMCwgLy8gIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBj
bGlwYm9hcmQKKyAgICAgICAgZmFsc2UsIC8vICBib29sIGlzU2ltdWxhdGVkCisgICAgICAgIGV2
ZW50LmdldFBvaW50ZXJJbmZvKCkpOworfQorCitQb2ludGVyRXZlbnQ6OlBvaW50ZXJFdmVudCgp
IDogTW91c2VFdmVudCgpCit7Cit9CisKK1BvaW50ZXJFdmVudDo6UG9pbnRlckV2ZW50KAorICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwKKyAgICBib29sIGNhbkJ1YmJsZSwKKyAgICBib29s
IGNhbmNlbGFibGUsCisgICAgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsCisgICAgaW50
IGRldGFpbCwKKyAgICBpbnQgc2NyZWVuWCwKKyAgICBpbnQgc2NyZWVuWSwKKyAgICBpbnQgcGFn
ZVgsCisgICAgaW50IHBhZ2VZLAorI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCisgICAgaW50IG1v
dmVtZW50WCwKKyAgICBpbnQgbW92ZW1lbnRZLAorI2VuZGlmCisgICAgYm9vbCBjdHJsS2V5LAor
ICAgIGJvb2wgYWx0S2V5LAorICAgIGJvb2wgc2hpZnRLZXksCisgICAgYm9vbCBtZXRhS2V5LAor
ICAgIHVuc2lnbmVkIHNob3J0IGJ1dHRvbiwKKyAgICBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBy
ZWxhdGVkVGFyZ2V0LAorICAgIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBjbGlwYm9hcmQsCisgICAg
Ym9vbCBpc1NpbXVsYXRlZCwKKyAgICBjb25zdCBQb2ludGVySW5mbyYgZXZlbnRJbmZvCisgICAg
KQorICAgIDogTW91c2VFdmVudCgKKyAgICAgICAgdHlwZSwKKyAgICAgICAgY2FuQnViYmxlLAor
ICAgICAgICBjYW5jZWxhYmxlLAorICAgICAgICB2aWV3LAorICAgICAgICBkZXRhaWwsCisgICAg
ICAgIHNjcmVlblgsCisgICAgICAgIHNjcmVlblksCisgICAgICAgIHBhZ2VYLAorICAgICAgICBw
YWdlWSwKKyNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQorICAgICAgICBtb3ZlbWVudFgsCisgICAg
ICAgIG1vdmVtZW50WSwKKyNlbmRpZgorICAgICAgICBjdHJsS2V5LAorICAgICAgICBhbHRLZXks
CisgICAgICAgIHNoaWZ0S2V5LAorICAgICAgICBtZXRhS2V5LAorICAgICAgICBidXR0b24sCisg
ICAgICAgIHJlbGF0ZWRUYXJnZXQsCisgICAgICAgIGNsaXBib2FyZCwKKyAgICAgICAgaXNTaW11
bGF0ZWQKKyAgICApCisgICAgLCBtX3BvaW50ZXJJZChldmVudEluZm8ubV9wb2ludGVySWQpCisg
ICAgLCBtX3dpZHRoKGV2ZW50SW5mby5tX3dpZHRoKQorICAgICwgbV9oZWlnaHQoZXZlbnRJbmZv
Lm1faGVpZ2h0KQorICAgICwgbV9wcmVzc3VyZShldmVudEluZm8ubV9wcmVzc3VyZSkKKyAgICAs
IG1fdGlsdFgoZXZlbnRJbmZvLm1fdGlsdFgpCisgICAgLCBtX3RpbHRZKGV2ZW50SW5mby5tX3Rp
bHRZKQorICAgICwgbV9wb2ludGVyVHlwZShldmVudEluZm8ubV9wb2ludGVyVHlwZSkKKyAgICAs
IG1fcHJpbWFyeVBvaW50ZXIoZXZlbnRJbmZvLm1fcHJpbWFyeVBvaW50ZXIpCit7Cit9CisKK1Bv
aW50ZXJFdmVudDo6UG9pbnRlckV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLAor
ICAgIGNvbnN0IFBvaW50ZXJFdmVudEluaXQmIGluaXRpYWxpemVyKQorICAgIDogTW91c2VFdmVu
dChldmVudFR5cGUsIGluaXRpYWxpemVyKQorICAgICwgbV9wb2ludGVySWQoaW5pdGlhbGl6ZXIu
cG9pbnRlcklkKQorICAgICwgbV93aWR0aChpbml0aWFsaXplci53aWR0aCkKKyAgICAsIG1faGVp
Z2h0KGluaXRpYWxpemVyLmhlaWdodCkKKyAgICAsIG1fcHJlc3N1cmUoaW5pdGlhbGl6ZXIucHJl
c3N1cmUpCisgICAgLCBtX3RpbHRYKGluaXRpYWxpemVyLnRpbHRYKQorICAgICwgbV90aWx0WShp
bml0aWFsaXplci50aWx0WSkKKyAgICAsIG1fcG9pbnRlclR5cGUoY29udmVydFBvaW50ZXJUeXBl
TmFtZVRvSW50KGluaXRpYWxpemVyLnBvaW50ZXJUeXBlKSkKKyAgICAsIG1fcHJpbWFyeVBvaW50
ZXIoaW5pdGlhbGl6ZXIuaXNQcmltYXJ5KQoreworfQorCitQb2ludGVyRXZlbnQ6On5Qb2ludGVy
RXZlbnQoKQoreworfQorCit2b2lkIFBvaW50ZXJFdmVudDo6aW5pdFBvaW50ZXJFdmVudChjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLAorICAgIGJvb2wgY2FuY2VsYWJs
ZSwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsCisgICAgaW50IGRldGFpbCwgaW50IHNj
cmVlblgsIGludCBzY3JlZW5ZLCBpbnQgY2xpZW50WCwgaW50IGNsaWVudFksCisgICAgYm9vbCBj
dHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBtZXRhS2V5LAorICAgIHVu
c2lnbmVkIHNob3J0IGJ1dHRvbiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcmVsYXRlZFRhcmdl
dCwKKyAgICBsb25nIHBvaW50ZXJJZCwKKyAgICBsb25nIHdpZHRoLAorICAgIGxvbmcgaGVpZ2h0
LAorICAgIGZsb2F0IHByZXNzdXJlLAorICAgIGxvbmcgdGlsdFgsCisgICAgbG9uZyB0aWx0WSwK
KyAgICBjb25zdCBTdHJpbmcmIHBvaW50ZXJUeXBlLAorICAgIGJvb2wgaXNQcmltYXJ5KQorewor
ICAgIE1vdXNlRXZlbnQ6OmluaXRNb3VzZUV2ZW50KHR5cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJs
ZSwgdmlldywKKyAgICAgICAgZGV0YWlsLCBzY3JlZW5YLCBzY3JlZW5ZLCBjbGllbnRYLCBjbGll
bnRZLAorICAgICAgICBjdHJsS2V5LCBhbHRLZXksIHNoaWZ0S2V5LCBtZXRhS2V5LAorICAgICAg
ICBidXR0b24sIHJlbGF0ZWRUYXJnZXQpOworICAgIG1fcG9pbnRlcklkID0gcG9pbnRlcklkOwor
ICAgIG1fd2lkdGggPSB3aWR0aDsKKyAgICBtX2hlaWdodCA9IGhlaWdodDsKKyAgICBtX3ByZXNz
dXJlID0gcHJlc3N1cmU7CisgICAgbV90aWx0WCA9ICB0aWx0WDsKKyAgICBtX3RpbHRZID0gdGls
dFk7CisgICAgbV9wb2ludGVyVHlwZSA9IGNvbnZlcnRQb2ludGVyVHlwZU5hbWVUb0ludChwb2lu
dGVyVHlwZSk7CisgICAgbV9wcmltYXJ5UG9pbnRlciA9IGlzUHJpbWFyeTsKK30KKworaW50IFBv
aW50ZXJFdmVudDo6Y29udmVydFBvaW50ZXJUeXBlTmFtZVRvSW50KGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSkKK3sKKyAgICBpZiAobmFtZSA9PSAibW91c2UiKQorICAgICAgICByZXR1cm4gUG9p
bnRlclR5cGVNb3VzZTsKKyAgICBpZiAobmFtZSA9PSAicGVuIikKKyAgICAgICAgcmV0dXJuIFBv
aW50ZXJUeXBlUGVuOworICAgIGlmIChuYW1lID09ICJ0b3VjaCIpCisgICAgICAgIHJldHVybiBQ
b2ludGVyVHlwZVRvdWNoOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAw
OworfQorCitBdG9taWNTdHJpbmcgUG9pbnRlckV2ZW50Ojpjb252ZXJ0UG9pbnRlclR5cGVJbnRU
b1N0cmluZyhpbnQgcG9pbnRlclR5cGUpIGNvbnN0Cit7CisgICAgc3dpdGNoIChwb2ludGVyVHlw
ZSkgeworICAgIGNhc2UgUG9pbnRlclR5cGVNb3VzZToKKyAgICAgICAgcmV0dXJuICJtb3VzZSI7
CisgICAgY2FzZSBQb2ludGVyVHlwZVBlbjoKKyAgICAgICAgcmV0dXJuICJwZW4iOworICAgIGNh
c2UgUG9pbnRlclR5cGVUb3VjaDoKKyAgICAgICAgcmV0dXJuICJ0b3VjaCI7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiAiIjsK
K30KKworUGFzc1JlZlB0cjxQb2ludGVyRXZlbnREaXNwYXRjaE1lZGlhdG9yPgorICAgIFBvaW50
ZXJFdmVudERpc3BhdGNoTWVkaWF0b3I6OmNyZWF0ZShQYXNzUmVmUHRyPFBvaW50ZXJFdmVudD4g
cG9pbnRlckV2ZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUG9pbnRlckV2ZW50RGlz
cGF0Y2hNZWRpYXRvcihwb2ludGVyRXZlbnQpKTsKK30KKworUG9pbnRlckV2ZW50RGlzcGF0Y2hN
ZWRpYXRvcjo6CisgICAgUG9pbnRlckV2ZW50RGlzcGF0Y2hNZWRpYXRvcihQYXNzUmVmUHRyPFBv
aW50ZXJFdmVudD4gcG9pbnRlckV2ZW50KQorICAgIDogRXZlbnREaXNwYXRjaE1lZGlhdG9yKHBv
aW50ZXJFdmVudCkKK3sKK30KKworUG9pbnRlckV2ZW50KiBQb2ludGVyRXZlbnREaXNwYXRjaE1l
ZGlhdG9yOjpldmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBvaW50ZXJF
dmVudCo+KEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZXZlbnQoKSk7Cit9CisKK2Jvb2wgUG9pbnRl
ckV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6CisgICAgZGlzcGF0Y2hFdmVudChFdmVudERpc3BhdGNo
ZXIqIGRpc3BhdGNoZXIpIGNvbnN0Cit7CisgICAgaWYgKGlzRGlzYWJsZWRGb3JtQ29udHJvbChk
aXNwYXRjaGVyLT5ub2RlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZXZl
bnQoKS0+dHlwZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNT
RVJUKCFldmVudCgpLT50YXJnZXQoKSB8fCBldmVudCgpLT50YXJnZXQoKSAhPSBldmVudCgpLT5y
ZWxhdGVkVGFyZ2V0KCkpOworCisgICAgZGlzcGF0Y2hlci0+ZGlzcGF0Y2goKTsKKyAgICBib29s
IHN3YWxsb3dFdmVudCA9CisgICAgICAgIGV2ZW50KCktPmRlZmF1bHRIYW5kbGVkKCkgfHwgZXZl
bnQoKS0+ZGVmYXVsdFByZXZlbnRlZCgpOworCisgICAgcmV0dXJuIHN3YWxsb3dFdmVudDsKK30K
KworY29uc3QgQXRvbWljU3RyaW5nJiBQb2ludGVyRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25z
dAoreworICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yUG9pbnRlckV2ZW50Owor
fQorCit9IC8vICBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1BvaW50ZXJFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1BvaW50ZXJFdmVudC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OTJhM2UKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9pbnRlckV2ZW50LmgKQEAgLTAsMCArMSwxODAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDEz
IE1pY3Jvc29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFCisgKi8KKworI2lmbmRlZiBQb2ludGVyRXZlbnRfaAorI2RlZmluZSBQb2ludGVyRXZl
bnRfaAorCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCisjaW5jbHVkZSAiRXZlbnREaXNwYXRjaE1l
ZGlhdG9yLmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEV2ZW50RGlzcGF0Y2hlcjsKK3N0cnVjdCBQb2ludGVySW5mbzsKK2NsYXNzIFBs
YXRmb3JtUG9pbnRlckV2ZW50OworCitzdHJ1Y3QgUG9pbnRlckV2ZW50SW5pdCA6IHB1YmxpYyBN
b3VzZUV2ZW50SW5pdCB7CisgICAgUG9pbnRlckV2ZW50SW5pdCgpOworCisgICAgaW50IHBvaW50
ZXJJZDsKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IGhlaWdodDsKKyAgICBkb3VibGUgcHJlc3N1
cmU7CisgICAgaW50IHRpbHRYOworICAgIGludCB0aWx0WTsKKyAgICBTdHJpbmcgcG9pbnRlclR5
cGU7CisgICAgYm9vbCBpc1ByaW1hcnk7Cit9OworCitjbGFzcyBQb2ludGVyRXZlbnQgOiBwdWJs
aWMgTW91c2VFdmVudCB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQ
b2ludGVyRXZlbnQ+IGNyZWF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgUG9pbnRlckV2ZW50KTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxQb2ludGVyRXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsCisgICAg
ICAgICAgICBib29sIGNhbkJ1YmJsZSwKKyAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZSwKKyAg
ICAgICAgICAgIFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3LAorICAgICAgICAgICAgaW50
IGRldGFpbCwKKyAgICAgICAgICAgIGludCBzY3JlZW5YLAorICAgICAgICAgICAgaW50IHNjcmVl
blksCisgICAgICAgICAgICBpbnQgcGFnZVgsCisgICAgICAgICAgICBpbnQgcGFnZVksCisjaWYg
RU5BQkxFKFBPSU5URVJfTE9DSykKKyAgICAgICAgICAgIGludCBtb3ZlbWVudFgsIGludCBtb3Zl
bWVudFksCisjZW5kaWYKKyAgICAgICAgICAgIGJvb2wgY3RybEtleSwKKyAgICAgICAgICAgIGJv
b2wgYWx0S2V5LAorICAgICAgICAgICAgYm9vbCBzaGlmdEtleSwKKyAgICAgICAgICAgIGJvb2wg
bWV0YUtleSwKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGJ1dHRvbiwKKyAgICAgICAgICAg
IFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHJlbGF0ZWRUYXJnZXQsCisgICAgICAgICAgICBQYXNz
UmVmUHRyPENsaXBib2FyZD4gY2xpcGJvYXJkLAorICAgICAgICAgICAgYm9vbCBpc1NpbXVsYXRl
ZCwKKyAgICAgICAgICAgIGNvbnN0IFBvaW50ZXJJbmZvJiBldmVudEluZm8KKyAgICAgICAgKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBvaW50ZXJFdmVudCh0
eXBlLCBjYW5CdWJibGUsIGNhbmNlbGFibGUsCisgICAgICAgICAgICAgICAgdmlldywgZGV0YWls
LCBzY3JlZW5YLCBzY3JlZW5ZLCBwYWdlWCwgcGFnZVksCisjaWYgRU5BQkxFKFBPSU5URVJfTE9D
SykKKyAgICAgICAgICAgICAgICBtb3ZlbWVudFgsIG1vdmVtZW50WSwKKyNlbmRpZgorICAgICAg
ICAgICAgICAgIGN0cmxLZXksIGFsdEtleSwgc2hpZnRLZXksIG1ldGFLZXksIGJ1dHRvbiwgcmVs
YXRlZFRhcmdldCwKKyAgICAgICAgICAgICAgICBjbGlwYm9hcmQsIGlzU2ltdWxhdGVkLCBldmVu
dEluZm8pKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQb2ludGVyRXZl
bnQ+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwKKyAgICAgICAgICAgIFBh
c3NSZWZQdHI8QWJzdHJhY3RWaWV3PiwgY29uc3QgUGxhdGZvcm1Qb2ludGVyRXZlbnQmLCBpbnQg
ZGV0YWlsLAorICAgICAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0KTsKKwor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQb2ludGVyRXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSwKKyAgICAgICAgICAgIGNvbnN0IFBvaW50ZXJFdmVudEluaXQm
KTsKKworICAgICAgICB2aXJ0dWFsIH5Qb2ludGVyRXZlbnQoKTsKKworICAgICAgICB2b2lkIGlu
aXRQb2ludGVyRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwK
KyAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZSwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+LAor
ICAgICAgICAgICAgaW50IGRldGFpbCwgaW50IHNjcmVlblgsIGludCBzY3JlZW5ZLCBpbnQgY2xp
ZW50WCwgaW50IGNsaWVudFksCisgICAgICAgICAgICBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5
LCBib29sIHNoaWZ0S2V5LCBib29sIG1ldGFLZXksCisgICAgICAgICAgICB1bnNpZ25lZCBzaG9y
dCBidXR0b24sIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHJlbGF0ZWRUYXJnZXQsCisgICAgICAg
ICAgICBsb25nIHBvaW50ZXJJZCwKKyAgICAgICAgICAgIGxvbmcgd2lkdGgsCisgICAgICAgICAg
ICBsb25nIGhlaWdodCwKKyAgICAgICAgICAgIGZsb2F0IHByZXNzdXJlLAorICAgICAgICAgICAg
bG9uZyB0aWx0WCwKKyAgICAgICAgICAgIGxvbmcgdGlsdFksCisgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIHBvaW50ZXJUeXBlLAorICAgICAgICAgICAgYm9vbCBpc1ByaW1hcnkpOworCisgICAg
ICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRXZlbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgICAgICBib29sIGlzUHJpbWFyeSgpIHsgcmV0dXJuIG1fcHJpbWFyeVBvaW50ZXI7IH0K
KyAgICAgICAgbG9uZyBwb2ludGVySWQoKSB7IHJldHVybiBtX3BvaW50ZXJJZDsgfQorICAgICAg
ICBsb25nIHdpZHRoKCkgeyByZXR1cm4gbV93aWR0aDsgfQorICAgICAgICBsb25nIGhlaWdodCgp
IHsgcmV0dXJuIG1faGVpZ2h0OyB9CisgICAgICAgIGRvdWJsZSBwcmVzc3VyZSgpIHsgcmV0dXJu
IG1fcHJlc3N1cmU7IH0KKyAgICAgICAgbG9uZyB0aWx0WCgpIHsgcmV0dXJuIG1fdGlsdFg7IH0K
KyAgICAgICAgbG9uZyB0aWx0WSgpIHsgcmV0dXJuIG1fdGlsdFk7IH0KKyAgICAgICAgQXRvbWlj
U3RyaW5nIHBvaW50ZXJUeXBlKCkgY29uc3QKKyAgICAgICAgICAgIHsgcmV0dXJuIGNvbnZlcnRQ
b2ludGVyVHlwZUludFRvU3RyaW5nKG1fcG9pbnRlclR5cGUpOyB9CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBQb2ludGVyRXZlbnQoCisgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHR5
cGUsCisgICAgICAgICAgICBib29sIGNhbkJ1YmJsZSwKKyAgICAgICAgICAgIGJvb2wgY2FuY2Vs
YWJsZSwKKyAgICAgICAgICAgIFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiwKKyAgICAgICAgICAg
IGludCBkZXRhaWwsCisgICAgICAgICAgICBpbnQgc2NyZWVuWCwKKyAgICAgICAgICAgIGludCBz
Y3JlZW5ZLAorICAgICAgICAgICAgaW50IHBhZ2VYLAorICAgICAgICAgICAgaW50IHBhZ2VZLAor
I2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCisgICAgICAgICAgICBpbnQgbW92ZW1lbnRYLAorICAg
ICAgICAgICAgaW50IG1vdmVtZW50WSwKKyNlbmRpZgorICAgICAgICAgICAgYm9vbCBjdHJsS2V5
LAorICAgICAgICAgICAgYm9vbCBhbHRLZXksCisgICAgICAgICAgICBib29sIHNoaWZ0S2V5LAor
ICAgICAgICAgICAgYm9vbCBtZXRhS2V5LAorICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYnV0
dG9uLAorICAgICAgICAgICAgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4sCisgICAgICAgICAgICBQ
YXNzUmVmUHRyPENsaXBib2FyZD4sCisgICAgICAgICAgICBib29sIGlzU2ltdWxhdGVkLAorICAg
ICAgICAgICAgY29uc3QgUG9pbnRlckluZm8mIGV2ZW50SW5mbyk7CisKKyAgICAgICAgUG9pbnRl
ckV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgUG9pbnRlckV2ZW50SW5pdCYp
OworICAgICAgICBQb2ludGVyRXZlbnQoKTsKKworICAgICAgICBpbnQgY29udmVydFBvaW50ZXJU
eXBlTmFtZVRvSW50KGNvbnN0IEF0b21pY1N0cmluZyAmKTsKKyAgICAgICAgQXRvbWljU3RyaW5n
IGNvbnZlcnRQb2ludGVyVHlwZUludFRvU3RyaW5nKGludCBwb2ludGVyVHlwZSkgY29uc3Q7CisK
KyAgICAgICAgbG9uZyBtX3BvaW50ZXJJZDsKKyAgICAgICAgbG9uZyBtX3dpZHRoOworICAgICAg
ICBsb25nIG1faGVpZ2h0OworICAgICAgICBkb3VibGUgbV9wcmVzc3VyZTsKKyAgICAgICAgbG9u
ZyBtX3RpbHRYOworICAgICAgICBsb25nIG1fdGlsdFk7CisgICAgICAgIGludCBtX3BvaW50ZXJU
eXBlOworICAgICAgICBib29sIG1fcHJpbWFyeVBvaW50ZXI7Cit9OworCitjbGFzcyBQb2ludGVy
RXZlbnREaXNwYXRjaE1lZGlhdG9yIDogcHVibGljIEV2ZW50RGlzcGF0Y2hNZWRpYXRvciB7Cisg
ICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQb2ludGVyRXZlbnREaXNwYXRj
aE1lZGlhdG9yPgorICAgICAgICAgICAgY3JlYXRlKFBhc3NSZWZQdHI8UG9pbnRlckV2ZW50Pik7
CisKKyAgICBwcml2YXRlOgorICAgICAgICBleHBsaWNpdCBQb2ludGVyRXZlbnREaXNwYXRjaE1l
ZGlhdG9yKFBhc3NSZWZQdHI8UG9pbnRlckV2ZW50Pik7CisgICAgICAgIFBvaW50ZXJFdmVudCog
ZXZlbnQoKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVu
dERpc3BhdGNoZXIqKSBjb25zdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFBvaW50ZXJFdmVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9p
bnRlckV2ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb2ludGVyRXZlbnQuaWRsCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZmE4N2MKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9pbnRlckV2ZW50LmlkbApAQCAtMCwwICsxLDQ3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBNaWNyb3NvZnQg
T3BlbiBUZWNobm9sb2dpZXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
IG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIHZlci4gMi4xIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbi4KKyAqLworCitbCisgICAgQ29uc3RydWN0b3JDb25kaXRpb25hbD1E
T000X0VWRU5UU19DT05TVFJVQ1RPUiwKKyAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPUV2ZW50LAor
XSBpbnRlcmZhY2UgUG9pbnRlckV2ZW50IDogTW91c2VFdmVudCB7CisKKyAgICBbSW5pdGlhbGl6
ZWRCeUV2ZW50Q29uc3RydWN0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIHBvaW50ZXJJZDsK
KyAgICBbSW5pdGlhbGl6ZWRCeUV2ZW50Q29uc3RydWN0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBs
b25nIHdpZHRoOworICAgIFtJbml0aWFsaXplZEJ5RXZlbnRDb25zdHJ1Y3Rvcl0gcmVhZG9ubHkg
YXR0cmlidXRlIGxvbmcgaGVpZ2h0OworICAgIFtJbml0aWFsaXplZEJ5RXZlbnRDb25zdHJ1Y3Rv
cl0gcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0IHByZXNzdXJlOworICAgIFtJbml0aWFsaXplZEJ5
RXZlbnRDb25zdHJ1Y3Rvcl0gcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgdGlsdFg7CisgICAgW0lu
aXRpYWxpemVkQnlFdmVudENvbnN0cnVjdG9yXSByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyB0aWx0
WTsKKyAgICBbSW5pdGlhbGl6ZWRCeUV2ZW50Q29uc3RydWN0b3JdIHJlYWRvbmx5IGF0dHJpYnV0
ZSBET01TdHJpbmcgcG9pbnRlclR5cGU7CisgICAgW0luaXRpYWxpemVkQnlFdmVudENvbnN0cnVj
dG9yXSByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBpc1ByaW1hcnk7CisKKyAgICBbT2JqQ0xl
Z2FjeVVubmFtZWRQYXJhbWV0ZXJzXSB2b2lkIGluaXRQb2ludGVyRXZlbnQoaW4gW09wdGlvbmFs
PURlZmF1bHRJc1VuZGVmaW5lZF0gRE9NU3RyaW5nIHR5cGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBib29s
ZWFuIGNhbkJ1YmJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IFtPcHRpb25hbD1EZWZhdWx0SXNVbmRlZmluZWRdIGJvb2xlYW4gY2FuY2VsYWJsZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbD1EZWZhdWx0SXNV
bmRlZmluZWRdIERPTVdpbmRvdyB2aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gbG9uZyBkZXRhaWwsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWw9RGVmYXVs
dElzVW5kZWZpbmVkXSBsb25nIHNjcmVlblgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBsb25nIHNjcmVlblks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWw9RGVm
YXVsdElzVW5kZWZpbmVkXSBsb25nIGNsaWVudFgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBsb25nIGNsaWVu
dFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWw9
RGVmYXVsdElzVW5kZWZpbmVkXSBib29sZWFuIGN0cmxLZXksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBib29s
ZWFuIGFsdEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtP
cHRpb25hbD1EZWZhdWx0SXNVbmRlZmluZWRdIGJvb2xlYW4gc2hpZnRLZXksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZp
bmVkXSBib29sZWFuIG1ldGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSB1bnNpZ25lZCBzaG9ydCBidXR0
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWw9
RGVmYXVsdElzVW5kZWZpbmVkXSBFdmVudFRhcmdldCByZWxhdGVkVGFyZ2V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVm
aW5lZF0gbG9uZyBwb2ludGVySWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBsb25nIHdpZHRoLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsPURlZmF1bHRJc1Vu
ZGVmaW5lZF0gbG9uZyBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBmbG9hdCBwcmVzc3VyZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbD1EZWZhdWx0
SXNVbmRlZmluZWRdIGxvbmcgdGlsdFgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBsb25nIHRpbHRZLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsPURlZmF1bHRJ
c1VuZGVmaW5lZF0gRE9NU3RyaW5nIHBvaW50ZXJUeXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gYm9vbGVh
biBpc1ByaW1hcnkpOworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0
dHJpYnV0ZU5hbWVzLmluIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMu
aW4KaW5kZXggNmM2NzU3ZC4uODdlNDU3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQXR0cmlidXRlTmFtZXMuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0
cmlidXRlTmFtZXMuaW4KQEAgLTIyNCw2ICsyMjQsMTYgQEAgb25wYXN0ZQogb25wYXVzZQogb25w
bGF5CiBvbnBsYXlpbmcKK29ucG9pbnRlcmRvd24KK29ucG9pbnRlcnVwCitvbnBvaW50ZXJjYW5j
ZWwKK29ucG9pbnRlcm1vdmUKK29ucG9pbnRlcm92ZXIKK29ucG9pbnRlcm91dAorb25wb2ludGVy
ZW50ZXIKK29ucG9pbnRlcmxlYXZlCitvbmdvdHBvaW50ZXJjYXB0dXJlCitvbmxvc3Rwb2ludGVy
Y2FwdHVyZQogb25wb3BzdGF0ZQogb25wcm9ncmVzcwogb25yYXRlY2hhbmdlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEVsZW1lbnQuY3BwCmluZGV4IGYyNWU1MGYuLmUyZjA0ODAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEVsZW1lbnQuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJpZ2h0IChDKSAyMDEx
IE1vdG9yb2xhIE1vYmlsaXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzIE1pY3Jvc29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNjUsNiArMjY2LDE2IEBAIEF0b21pY1N0cmlu
ZyBIVE1MRWxlbWVudDo6ZXZlbnROYW1lRm9yQXR0cmlidXRlTmFtZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtCiAgICAgICAgIGF0dHJpYnV0ZU5hbWVUb0V2ZW50TmFtZU1hcC5zZXQob250
b3VjaG1vdmVBdHRyLmxvY2FsTmFtZSgpLCBldmVudE5hbWVzKCkudG91Y2htb3ZlRXZlbnQpOwog
ICAgICAgICBhdHRyaWJ1dGVOYW1lVG9FdmVudE5hbWVNYXAuc2V0KG9udG91Y2hlbmRBdHRyLmxv
Y2FsTmFtZSgpLCBldmVudE5hbWVzKCkudG91Y2hlbmRFdmVudCk7CiAgICAgICAgIGF0dHJpYnV0
ZU5hbWVUb0V2ZW50TmFtZU1hcC5zZXQob250b3VjaGNhbmNlbEF0dHIubG9jYWxOYW1lKCksIGV2
ZW50TmFtZXMoKS50b3VjaGNhbmNlbEV2ZW50KTsKKyAgICAgICAgYXR0cmlidXRlTmFtZVRvRXZl
bnROYW1lTWFwLnNldChvbnBvaW50ZXJkb3duQXR0ci5sb2NhbE5hbWUoKSwgZXZlbnROYW1lcygp
LnBvaW50ZXJkb3duRXZlbnQpOworICAgICAgICBhdHRyaWJ1dGVOYW1lVG9FdmVudE5hbWVNYXAu
c2V0KG9ucG9pbnRlcnVwQXR0ci5sb2NhbE5hbWUoKSwgZXZlbnROYW1lcygpLnBvaW50ZXJ1cEV2
ZW50KTsKKyAgICAgICAgYXR0cmlidXRlTmFtZVRvRXZlbnROYW1lTWFwLnNldChvbnBvaW50ZXJj
YW5jZWxBdHRyLmxvY2FsTmFtZSgpLCBldmVudE5hbWVzKCkucG9pbnRlcmNhbmNlbEV2ZW50KTsK
KyAgICAgICAgYXR0cmlidXRlTmFtZVRvRXZlbnROYW1lTWFwLnNldChvbnBvaW50ZXJtb3ZlQXR0
ci5sb2NhbE5hbWUoKSwgZXZlbnROYW1lcygpLnBvaW50ZXJtb3ZlRXZlbnQpOworICAgICAgICBh
dHRyaWJ1dGVOYW1lVG9FdmVudE5hbWVNYXAuc2V0KG9ucG9pbnRlcm92ZXJBdHRyLmxvY2FsTmFt
ZSgpLCBldmVudE5hbWVzKCkucG9pbnRlcm92ZXJFdmVudCk7CisgICAgICAgIGF0dHJpYnV0ZU5h
bWVUb0V2ZW50TmFtZU1hcC5zZXQob25wb2ludGVyb3V0QXR0ci5sb2NhbE5hbWUoKSwgZXZlbnRO
YW1lcygpLnBvaW50ZXJvdXRFdmVudCk7CisgICAgICAgIGF0dHJpYnV0ZU5hbWVUb0V2ZW50TmFt
ZU1hcC5zZXQob25wb2ludGVyZW50ZXJBdHRyLmxvY2FsTmFtZSgpLCBldmVudE5hbWVzKCkucG9p
bnRlcmVudGVyRXZlbnQpOworICAgICAgICBhdHRyaWJ1dGVOYW1lVG9FdmVudE5hbWVNYXAuc2V0
KG9ucG9pbnRlcmxlYXZlQXR0ci5sb2NhbE5hbWUoKSwgZXZlbnROYW1lcygpLnBvaW50ZXJsZWF2
ZUV2ZW50KTsKKyAgICAgICAgYXR0cmlidXRlTmFtZVRvRXZlbnROYW1lTWFwLnNldChvbmdvdHBv
aW50ZXJjYXB0dXJlQXR0ci5sb2NhbE5hbWUoKSwgZXZlbnROYW1lcygpLmdvdHBvaW50ZXJjYXB0
dXJlRXZlbnQpOworICAgICAgICBhdHRyaWJ1dGVOYW1lVG9FdmVudE5hbWVNYXAuc2V0KG9ubG9z
dHBvaW50ZXJjYXB0dXJlQXR0ci5sb2NhbE5hbWUoKSwgZXZlbnROYW1lcygpLmxvc3Rwb2ludGVy
Y2FwdHVyZUV2ZW50KTsKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgICAgIGF0dHJp
YnV0ZU5hbWVUb0V2ZW50TmFtZU1hcC5zZXQob253ZWJraXRmdWxsc2NyZWVuY2hhbmdlQXR0ci5s
b2NhbE5hbWUoKSwgZXZlbnROYW1lcygpLndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2VFdmVudCk7CiAg
ICAgICAgIGF0dHJpYnV0ZU5hbWVUb0V2ZW50TmFtZU1hcC5zZXQob253ZWJraXRmdWxsc2NyZWVu
ZXJyb3JBdHRyLmxvY2FsTmFtZSgpLCBldmVudE5hbWVzKCkud2Via2l0ZnVsbHNjcmVlbmVycm9y
RXZlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKaW5kZXggNDljYjZlNi4uMjc1ZjkzOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTWljcm9zb2Z0IE9wZW4gVGVjaG5v
bG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM5MCw2ICszOTEsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKG9yaWVudGF0aW9uY2hhbmdlKTsKICNl
bmRpZgogCisjaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQorICAgICAgICBERUZJTkVfQVRUUklC
VVRFX0VWRU5UX0xJU1RFTkVSKHBvaW50ZXJkb3duKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVU
RV9FVkVOVF9MSVNURU5FUihwb2ludGVydXApOworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VW
RU5UX0xJU1RFTkVSKHBvaW50ZXJjYW5jZWwpOworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VW
RU5UX0xJU1RFTkVSKHBvaW50ZXJtb3ZlKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVO
VF9MSVNURU5FUihwb2ludGVyb3Zlcik7CisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRf
TElTVEVORVIocG9pbnRlcm91dCk7CisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElT
VEVORVIoZ290cG9pbnRlcmNhcHR1cmUpOworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5U
X0xJU1RFTkVSKGxvc3Rwb2ludGVyY2FwdHVyZSk7CisjZW5kaWYKKwogI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCiAgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIodG91Y2hz
dGFydCk7CiAgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIodG91Y2htb3Zl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAppbmRleCBkMDZhZmUwLi5kYjM1NjUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBNaWNyb3NvZnQgT3BlbiBUZWNobm9sb2dpZXMsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjc4LDYgKzI3OSwxNSBAQAogICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9udm9sdW1l
Y2hhbmdlOwogICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ud2FpdGluZzsKIAorICAgIGF0
dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ucG9pbnRlcmRvd247CisgICAgYXR0cmlidXRlIEV2ZW50
TGlzdGVuZXIgb25wb2ludGVydXA7CisgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25wb2lu
dGVyY2FuY2VsOworICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ucG9pbnRlcm1vdmU7Cisg
ICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25wb2ludGVyb3ZlcjsKKyAgICBhdHRyaWJ1dGUg
RXZlbnRMaXN0ZW5lciBvbnBvaW50ZXJvdXQ7CisgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIg
b25nb3Rwb2ludGVyY2FwdHVyZTsKKyAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmxvc3Rw
b2ludGVyY2FwdHVyZTsKKwogICAgIC8vIE5vdCBpbXBsZW1lbnRlZCB5ZXQuCiAgICAgLy8gYXR0
cmlidXRlIEV2ZW50TGlzdGVuZXIgb25hZnRlcnByaW50OwogICAgIC8vIGF0dHJpYnV0ZSBFdmVu
dExpc3RlbmVyIG9uYmVmb3JlcHJpbnQ7CkBAIC01NTAsNiArNTYwLDcgQEAKICAgICBhdHRyaWJ1
dGUgTW91c2VFdmVudENvbnN0cnVjdG9yIE1vdXNlRXZlbnQ7CiAgICAgYXR0cmlidXRlIE11dGF0
aW9uRXZlbnRDb25zdHJ1Y3RvciBNdXRhdGlvbkV2ZW50OwogICAgIGF0dHJpYnV0ZSBPdmVyZmxv
d0V2ZW50Q29uc3RydWN0b3IgT3ZlcmZsb3dFdmVudDsKKwlbQ29uZGl0aW9uYWw9UE9JTlRFUl9F
VkVOVFNdIGF0dHJpYnV0ZSBQb2ludGVyRXZlbnRDb25zdHJ1Y3RvciBQb2ludGVyRXZlbnQ7CiAg
ICAgYXR0cmlidXRlIFBvcFN0YXRlRXZlbnRDb25zdHJ1Y3RvciBQb3BTdGF0ZUV2ZW50OwogICAg
IGF0dHJpYnV0ZSBQYWdlVHJhbnNpdGlvbkV2ZW50Q29uc3RydWN0b3IgUGFnZVRyYW5zaXRpb25F
dmVudDsKICAgICBhdHRyaWJ1dGUgUHJvZ3Jlc3NFdmVudENvbnN0cnVjdG9yIFByb2dyZXNzRXZl
bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggMzBhNmE1Yy4uNDdmMTEw
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMiw2ICsyLDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFBy
b3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKICAqIENvcHlyaWdodCAoQykgMjAxMiBEaWdpYSBQ
bGMuIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDEzIE1p
Y3Jvc29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTYsNiArMTE3LDEwIEBACiAjaW5jbHVk
ZSAiU3R5bGVDYWNoZWRJbWFnZVNldC5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoUE9JTlRFUl9F
VkVOVFMpCisjaW5jbHVkZSAiUGxhdGZvcm1Qb2ludGVyRXZlbnQuaCIKKyNlbmRpZgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBAIC02NTcsNiAr
NjYyLDEwIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3Qg
TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlCiAKICAgICBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAorI2lmIEVOQUJM
RShQT0lOVEVSX0VWRU5UUykKKyAgICBoYW5kbGVQb2ludGVyRXZlbnRzKFBsYXRmb3JtUG9pbnRl
ckV2ZW50Q29sbGVjdGlvbihldmVudC5ldmVudCgpKSk7CisjZW5kaWYKKwogICAgIGlmIChTY3Jv
bGxWaWV3KiBzY3JvbGxWaWV3ID0gbV9mcmFtZS0+dmlldygpKSB7CiAgICAgICAgIGlmIChzY3Jv
bGxWaWV3LT5pc1BvaW50SW5TY3JvbGxiYXJDb3JuZXIoZXZlbnQuZXZlbnQoKS5wb3NpdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2NTQsNiArMTY2MywxNyBAQCBib29s
IEV2ZW50SGFuZGxlcjo6bW91c2VNb3ZlZChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50
KQogICAgIFJlZlB0cjxGcmFtZVZpZXc+IHByb3RlY3RvcihtX2ZyYW1lLT52aWV3KCkpOwogICAg
IE1heGltdW1EdXJhdGlvblRyYWNrZXIgbWF4RHVyYXRpb25UcmFja2VyKCZtX21heE1vdXNlTW92
ZWREdXJhdGlvbik7CiAKKyNpZiBFTkFCTEUoUE9JTlRFUl9FVkVOVFMpCisgICAgaGFuZGxlUG9p
bnRlckV2ZW50cyhQbGF0Zm9ybVBvaW50ZXJFdmVudENvbGxlY3Rpb24oZXZlbnQpKTsKKyNlbmRp
ZgorCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQg
YmUgbW92ZWQgZWxzZXdoZXJlIHRvIGFsc28gYmUgYWJsZSB0byBkaXNwYXRjaCB0b3VjaGNhbmNl
bCBldmVudHMuCisgICAgYm9vbCBkZWZhdWx0UHJldmVudGVkID0gZGlzcGF0Y2hTeW50aGV0aWNU
b3VjaEV2ZW50SWZFbmFibGVkKGV2ZW50KTsKKyAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKwogICAgIEhpdFRlc3RSZXN1bHQgaG92ZXJlZE5v
ZGUgPSBIaXRUZXN0UmVzdWx0KExheW91dFBvaW50KCkpOwogICAgIGJvb2wgcmVzdWx0ID0gaGFu
ZGxlTW91c2VNb3ZlRXZlbnQoZXZlbnQsICZob3ZlcmVkTm9kZSk7CiAKQEAgLTE4MzYsNiArMTg1
NiwxMCBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoY29uc3Qg
UGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQogCiAgICAgbV9mcmFtZS0+c2VsZWN0aW9u
KCktPnNldENhcmV0QmxpbmtpbmdTdXNwZW5kZWQoZmFsc2UpOwogCisjaWYgRU5BQkxFKFBPSU5U
RVJfRVZFTlRTKQorICAgIGhhbmRsZVBvaW50ZXJFdmVudHMoUGxhdGZvcm1Qb2ludGVyRXZlbnRD
b2xsZWN0aW9uKG1vdXNlRXZlbnQpKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5U
UykKICAgICBib29sIGRlZmF1bHRQcmV2ZW50ZWQgPSBkaXNwYXRjaFN5bnRoZXRpY1RvdWNoRXZl
bnRJZkVuYWJsZWQobW91c2VFdmVudCk7CiAgICAgaWYgKGRlZmF1bHRQcmV2ZW50ZWQpCkBAIC0z
ODQ1LDYgKzM4NjksMTAgQEAgSGl0VGVzdFJlc3VsdCBFdmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1
bHRJbkZyYW1lKEZyYW1lKiBmcmFtZSwgY29uc3QgTGF5b3V0UG9pbnQKIAogYm9vbCBFdmVudEhh
bmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCkK
IHsKKyNpZiBFTkFCTEUoUE9JTlRFUl9FVkVOVFMpCisgICAgaGFuZGxlUG9pbnRlckV2ZW50cyhQ
bGF0Zm9ybVBvaW50ZXJFdmVudENvbGxlY3Rpb24oZXZlbnQpKTsKKyNlbmRpZgorCiAgICAgLy8g
Rmlyc3QgYnVpbGQgdXAgdGhlIGxpc3RzIHRvIHVzZSBmb3IgdGhlICd0b3VjaGVzJywgJ3Rhcmdl
dFRvdWNoZXMnIGFuZCAnY2hhbmdlZFRvdWNoZXMnIGF0dHJpYnV0ZXMKICAgICAvLyBpbiB0aGUg
SlMgZXZlbnQuIFNlZSBodHRwOi8vd3d3LnNpdGVwZW4uY29tL2Jsb2cvMjAwOC8wNy8xMC90b3Vj
aGluZy1hbmQtZ2VzdHVyaW5nLW9uLXRoZS1pcGhvbmUvCiAgICAgLy8gZm9yIGFuIG92ZXJ2aWV3
IG9mIGhvdyB0aGVzZSBsaXN0cyBmaXQgdG9nZXRoZXIuCkBAIC00MDg2LDQgKzQxMTQsMTQ3IEBA
IHZvaWQgRXZlbnRIYW5kbGVyOjpzZXRMYXN0S25vd25Nb3VzZVBvc2l0aW9uKGNvbnN0IFBsYXRm
b3JtTW91c2VFdmVudCYgZXZlbnQpCiAgICAgbV9sYXN0S25vd25Nb3VzZUdsb2JhbFBvc2l0aW9u
ID0gZXZlbnQuZ2xvYmFsUG9zaXRpb24oKTsKIH0KIAorI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5U
UykKKworYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVBvaW50ZXJFdmVudHMoCisgICAgY29uc3Qg
UGxhdGZvcm1Qb2ludGVyRXZlbnRDb2xsZWN0aW9uJiBjb2xsZWN0aW9uKQoreworICAgIFBsYXRm
b3JtUG9pbnRlckV2ZW50Q29sbGVjdGlvbiBldmVudENvbGxlY3Rpb24gPSBjb2xsZWN0aW9uOwor
ICAgIGZvciAoVmVjdG9yPFBsYXRmb3JtUG9pbnRlckV2ZW50Pjo6aXRlcmF0b3IgaXRlciA9Cisg
ICAgICAgIGV2ZW50Q29sbGVjdGlvbi5ldmVudHMuYmVnaW4oKTsKKyAgICAgICAgaXRlciAhPSBl
dmVudENvbGxlY3Rpb24uZXZlbnRzLmVuZCgpOyBpdGVyKyspIHsKKyAgICAgICAgICAgIFBsYXRm
b3JtUG9pbnRlckV2ZW50JiBldmVudCA9ICgqaXRlcik7CisgICAgICAgICAgICBpZiAoZXZlbnQu
UG9pbnRlclByb2Nlc3NlZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpQb2ludGVyRG93bikKKyAgICAg
ICAgICAgICAgICBkaXNwYXRjaFBvaW50ZXJFdmVudChldmVudE5hbWVzKCkucG9pbnRlcmRvd25F
dmVudCwgZXZlbnQpOworICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQudHlwZSgpID09IFBsYXRm
b3JtRXZlbnQ6OlBvaW50ZXJVcCkKKyAgICAgICAgICAgICAgICBkaXNwYXRjaFBvaW50ZXJFdmVu
dChldmVudE5hbWVzKCkucG9pbnRlcnVwRXZlbnQsIGV2ZW50KTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKGV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpQb2ludGVyQ2FuY2VsKQorICAgICAg
ICAgICAgICAgIGRpc3BhdGNoUG9pbnRlckV2ZW50KGV2ZW50TmFtZXMoKS5wb2ludGVyY2FuY2Vs
RXZlbnQsIGV2ZW50KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50LnR5cGUoKSA9PSBQbGF0
Zm9ybUV2ZW50OjpQb2ludGVyTW92ZSkKKyAgICAgICAgICAgICAgICBkaXNwYXRjaFBvaW50ZXJF
dmVudChldmVudE5hbWVzKCkucG9pbnRlcm1vdmVFdmVudCwgZXZlbnQpOworICAgICAgICAgICAg
ZWxzZSBpZiAoZXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6OlBvaW50ZXJPdmVyKQorICAg
ICAgICAgICAgICAgIGRpc3BhdGNoUG9pbnRlckV2ZW50KGV2ZW50TmFtZXMoKS5wb2ludGVyb3Zl
ckV2ZW50LCBldmVudCk7CisgICAgICAgICAgICBlbHNlIGlmIChldmVudC50eXBlKCkgPT0gUGxh
dGZvcm1FdmVudDo6UG9pbnRlck91dCkKKyAgICAgICAgICAgICAgICBkaXNwYXRjaFBvaW50ZXJF
dmVudChldmVudE5hbWVzKCkucG9pbnRlcm91dEV2ZW50LCBldmVudCk7CisgICAgICAgICAgICBl
bHNlIGlmIChldmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6UG9pbnRlckVudGVyKQorICAg
ICAgICAgICAgICAgIGRpc3BhdGNoUG9pbnRlckV2ZW50KGV2ZW50TmFtZXMoKS5wb2ludGVyZW50
ZXJFdmVudCwgZXZlbnQpOworICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQudHlwZSgpID09IFBs
YXRmb3JtRXZlbnQ6OlBvaW50ZXJMZWF2ZSkKKyAgICAgICAgICAgICAgICBkaXNwYXRjaFBvaW50
ZXJFdmVudChldmVudE5hbWVzKCkucG9pbnRlcmxlYXZlRXZlbnQsIGV2ZW50KTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpHb3RQb2ludGVyQ2Fw
dHVyZSkKKyAgICAgICAgICAgICAgICBkaXNwYXRjaFBvaW50ZXJFdmVudChldmVudE5hbWVzKCku
Z290cG9pbnRlcmNhcHR1cmVFdmVudCwgZXZlbnQpOworICAgICAgICAgICAgZWxzZSBpZiAoZXZl
bnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Okxvc3RQb2ludGVyQ2FwdHVyZSkKKyAgICAgICAg
ICAgICAgICBkaXNwYXRjaFBvaW50ZXJFdmVudChldmVudE5hbWVzKCkubG9zdHBvaW50ZXJjYXB0
dXJlRXZlbnQsIGV2ZW50KTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRXZl
bnRIYW5kbGVyOjpzZW5kUG9pbnRlck91dE92ZXIoTm9kZSogbm9kZVVuZGVyUG9pbnRlciwKKyAg
ICBjb25zdCBQbGF0Zm9ybVBvaW50ZXJFdmVudCYgZXZlbnQpCit7CisgICAgTm9kZSogbGFzdE5v
ZGVVbmRlclBvaW50ZXIgPSBtX2xhc3ROb2RlVW5kZXJNb3VzZS5nZXQoKTsKKworICAgIGlmIChs
YXN0Tm9kZVVuZGVyUG9pbnRlcgorICAgICAgICAmJiBsYXN0Tm9kZVVuZGVyUG9pbnRlci0+ZG9j
dW1lbnQoKSAhPSBtX2ZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgbGFzdE5vZGVVbmRl
clBvaW50ZXIgPSAwOworICAgIGlmIChsYXN0Tm9kZVVuZGVyUG9pbnRlciAhPSBub2RlVW5kZXJQ
b2ludGVyKSB7CisgICAgICAgIC8vIHNlbmQgcG9pbnRlcm91dCBldmVudCB0byB0aGUgb2xkIG5v
ZGUKKyAgICAgICAgaWYgKGxhc3ROb2RlVW5kZXJQb2ludGVyKQorICAgICAgICAgICAgbGFzdE5v
ZGVVbmRlclBvaW50ZXItPmRpc3BhdGNoUG9pbnRlckV2ZW50KGV2ZW50LAorICAgICAgICAgICAg
ICAgIGV2ZW50TmFtZXMoKS5wb2ludGVyb3V0RXZlbnQsIDAsIG5vZGVVbmRlclBvaW50ZXIpOwor
ICAgICAgICAvLyBzZW5kIHBvaW50ZXJvdmVyIGV2ZW50IHRvIHRoZSBuZXcgbm9kZQorICAgICAg
ICBpZiAobm9kZVVuZGVyUG9pbnRlcikKKyAgICAgICAgICAgIG5vZGVVbmRlclBvaW50ZXItPmRp
c3BhdGNoUG9pbnRlckV2ZW50KGV2ZW50LAorICAgICAgICAgICAgICAgIGV2ZW50TmFtZXMoKS5w
b2ludGVyb3ZlckV2ZW50LCAwLCBsYXN0Tm9kZVVuZGVyUG9pbnRlcik7CisgICAgfQorfQorCiti
b29sIEV2ZW50SGFuZGxlcjo6cG9zdERpc3BhdGNoUG9pbnRlckV2ZW50KE5vZGUqIG5vZGVVbmRl
clBvaW50ZXIsCisgICAgYm9vbCBzd2FsbG93RXZlbnQpCit7CisgICAgLy8gVGhlIGxheW91dCBu
ZWVkcyB0byBiZSB1cCB0byBkYXRlIHRvIGRldGVybWluZSBpZiBhbiBlbGVtZW50IGlzIGZvY3Vz
YWJsZS4KKyAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5n
U3R5bGVzaGVldHMoKTsKKworICAgIC8vIEJsdXIgY3VycmVudCBmb2N1cyBub2RlIHdoZW4gYSBs
aW5rL2J1dHRvbiBpcyBjbGlja2VkOyB0aGlzCisgICAgLy8gaXMgZXhwZWN0ZWQgYnkgc29tZSBz
aXRlcyB0aGF0IHJlbHkgb24gb25DaGFuZ2UgaGFuZGxlcnMgcnVubmluZworICAgIC8vIGZyb20g
Zm9ybSBmaWVsZHMgYmVmb3JlIHRoZSBidXR0b24gY2xpY2sgaXMgcHJvY2Vzc2VkLgorICAgIE5v
ZGUqIG5vZGUgPSBub2RlVW5kZXJQb2ludGVyOworCisgICAgLy8gV2FsayB1cCB0aGUgRE9NIHRy
ZWUgdG8gc2VhcmNoIGZvciBhIG5vZGUgdG8gZm9jdXMuCisgICAgd2hpbGUgKG5vZGUpIHsKKyAg
ICAgICAgaWYgKG5vZGUtPmlzTW91c2VGb2N1c2FibGUoKSkgeworICAgICAgICAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgICAgICAgICBOb2RlKiBuID0gbm9kZS0+aXNTaGFkb3dSb290
KCkgPyB0b1NoYWRvd1Jvb3Qobm9kZSktPmhvc3QoKSA6IG5vZGU7CisgICAgICAgICAgICBpZiAo
bV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2UoKQorICAgICAgICAgICAgICAgICYmIG1fZnJh
bWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLT5jb21wYXJlTm9kZShuLCBlYykg
PT0gUmFuZ2U6Ok5PREVfSU5TSURFCisgICAgICAgICAgICAgICAgJiYgbi0+aXNEZXNjZW5kYW50
T2YobV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbm9k
ZSA9IG5vZGUtPnBhcmVudE9yU2hhZG93SG9zdE5vZGUoKTsKKyAgICB9CisKKyAgICAvLyBJZiBm
b2N1cyBzaGlmdCBpcyBibG9ja2VkLCB3ZSBlYXQgdGhlIGV2ZW50LiBOb3RlIHdlIHNob3VsZCBu
ZXZlciBjbGVhciBzd2FsbG93RXZlbnQKKyAgICAvLyBpZiB0aGUgcGFnZSBhbHJlYWR5IHNldCBp
dCAoZS5nLiwgYnkgY2FuY2VsaW5nIGRlZmF1bHQgYmVoYXZpb3IpLgorICAgIGlmIChQYWdlKiBw
YWdlID0gbV9mcmFtZS0+cGFnZSgpKSB7CisgICAgICAgIGlmIChub2RlICYmIG5vZGUtPmlzTW91
c2VGb2N1c2FibGUoKSkgeworICAgICAgICAgICAgaWYgKCFwYWdlLT5mb2N1c0NvbnRyb2xsZXIo
KS0+c2V0Rm9jdXNlZE5vZGUobm9kZSwgbV9mcmFtZSkpCisgICAgICAgICAgICAgICAgc3dhbGxv
d0V2ZW50ID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmICghbm9kZSB8fCAhbm9kZS0+Zm9jdXNl
ZCgpKSB7CisgICAgICAgICAgICBpZiAoIXBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1
c2VkTm9kZSgwLCBtX2ZyYW1lKSkKKyAgICAgICAgICAgICAgICBzd2FsbG93RXZlbnQgPSB0cnVl
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzd2FsbG93RXZlbnQ7Cit9CisKK2Jvb2wg
RXZlbnRIYW5kbGVyOjpkaXNwYXRjaFBvaW50ZXJFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSwKKyAgICBjb25zdCBQbGF0Zm9ybVBvaW50ZXJFdmVudCYgZXZlbnQpCit7CisgICAg
aWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8RnJhbWVW
aWV3PiBwcm90ZWN0b3IobV9mcmFtZS0+dmlldygpKTsKKyAgICBIaXRUZXN0UmVxdWVzdDo6SGl0
VGVzdFJlcXVlc3RUeXBlIGhpdFR5cGUgPSBIaXRUZXN0UmVxdWVzdDo6TW92ZTsKKworICAgIGlm
IChtX21vdXNlUHJlc3NlZCkKKyAgICAgICAgaGl0VHlwZSB8PSBIaXRUZXN0UmVxdWVzdDo6QWN0
aXZlOworCisgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChoaXRUeXBlKTsKKyAgICBNb3VzZUV2
ZW50V2l0aEhpdFRlc3RSZXN1bHRzIG1ldiA9IHByZXBhcmVNb3VzZUV2ZW50KHJlcXVlc3QsIGV2
ZW50KTsKKworICAgIEhpdFRlc3RSZXN1bHQgaG92ZXJlZE5vZGUgPSBtZXYuaGl0VGVzdFJlc3Vs
dCgpOworCisgICAgLy8gZ2VuZXJhdGUgcG9pbnRlcm91dCwgcG9pbnRlcm92ZXIgZXZlbnRzCisg
ICAgTm9kZSogcmVzdWx0ID0gbWV2LnRhcmdldE5vZGUoKTsKKworICAgIC8vIElmIHdlJ3JlIGNh
cHR1cmluZywgd2UgYWx3YXlzIGdvIHJpZ2h0IHRvIHRoYXQgbm9kZS4KKyAgICBpZiAobV9jYXB0
dXJpbmdNb3VzZUV2ZW50c05vZGUpCisgICAgICAgIHJlc3VsdCA9IG1fY2FwdHVyaW5nTW91c2VF
dmVudHNOb2RlLmdldCgpOworICAgIGVsc2UKKyAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBub2Rl
IGlzIGEgdGV4dCBub2RlLCBkaXNwYXRjaCBvbiB0aGUgcGFyZW50IG5vZGUKKyAgICAgICAgaWYg
KHJlc3VsdCAmJiByZXN1bHQtPmlzVGV4dE5vZGUoKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IEV2
ZW50UGF0aFdhbGtlcjo6cGFyZW50KHJlc3VsdCk7CisKKyAgICBOb2RlKiBub2RlVW5kZXJQb2lu
dGVyID0gcmVzdWx0OworICAgIHNlbmRQb2ludGVyT3V0T3Zlcihub2RlVW5kZXJQb2ludGVyLCBl
dmVudCk7CisKKyAgICBib29sIHN3YWxsb3dFdmVudCA9IGZhbHNlOworCisgICAgLy8gc2VuZCB3
aGF0ZXZlciBwb2ludGVyIGV2ZW50IHdlIHBsYW5uZWQgdG8gc2VuZCBpbiB0aGUgZmlyc3QgcGxh
Y2UKKyAgICBpZiAobm9kZVVuZGVyUG9pbnRlcikKKyAgICAgICAgc3dhbGxvd0V2ZW50ID0gbm9k
ZVVuZGVyUG9pbnRlci0+ZGlzcGF0Y2hQb2ludGVyRXZlbnQoZXZlbnQsIGV2ZW50VHlwZSk7CisK
KyAgICBpZiAoIXN3YWxsb3dFdmVudCAmJiBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnBvaW50
ZXJkb3duRXZlbnQpIHsKKyAgICAgICAgLy8gSWYgY2xpY2tpbmcgb24gYSBmcmFtZSBzY3JvbGxi
YXIsIGRvIG5vdCBtZXNzIHVwIHdpdGggY29udGVudCBmb2N1cy4KKyAgICAgICAgaWYgKEZyYW1l
VmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgICAgIGlmICh2aWV3LT5zY3Jv
bGxiYXJBdFBvaW50KGV2ZW50LnBvc2l0aW9uKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgc3dhbGxvd0V2ZW50ID0gcG9zdERpc3BhdGNoUG9pbnRlckV2ZW50KG5v
ZGVVbmRlclBvaW50ZXIsIHN3YWxsb3dFdmVudCk7CisgICAgfQorICAgIHJldHVybiAhc3dhbGxv
d0V2ZW50OworfQorI2VuZGlmIC8vIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggYzdlZDc5My4u
YzFlYTFmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTWljcm9zb2Z0
IE9wZW4gVGVjaG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5LDYgKzcwLDggQEAgY2xhc3MgTW91c2VFdmVudFdp
dGhIaXRUZXN0UmVzdWx0czsKIGNsYXNzIE5vZGU7CiBjbGFzcyBPcHRpb25hbEN1cnNvcjsKIGNs
YXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDsKK2NsYXNzIFBsYXRmb3JtUG9pbnRlckV2ZW50Q29s
bGVjdGlvbjsKK2NsYXNzIFBsYXRmb3JtUG9pbnRlckV2ZW50OwogY2xhc3MgUGxhdGZvcm1Ub3Vj
aEV2ZW50OwogY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OwogY2xhc3MgUmVuZGVyTGF5ZXI7CkBA
IC0yNTMsNiArMjU2LDEwIEBAIHB1YmxpYzoKICAgICBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29u
c3QgUGxhdGZvcm1Ub3VjaEV2ZW50Jik7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShQT0lOVEVSX0VW
RU5UUykKKyAgICBib29sIGhhbmRsZVBvaW50ZXJFdmVudHMoY29uc3QgUGxhdGZvcm1Qb2ludGVy
RXZlbnRDb2xsZWN0aW9uJik7CisjZW5kaWYKKwogICAgIGJvb2wgdXNlSGFuZEN1cnNvcihOb2Rl
KiwgYm9vbCBpc092ZXJMaW5rLCBib29sIHNoaWZ0S2V5KTsKIAogcHJpdmF0ZToKQEAgLTMyNyw2
ICszMzQsMTEgQEAgcHJpdmF0ZToKICAgICBib29sIGRyYWdIeXN0ZXJlc2lzRXhjZWVkZWQoY29u
c3QgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIGJvb2wgZHJhZ0h5c3RlcmVzaXNFeGNlZWRlZChj
b25zdCBJbnRQb2ludCYpIGNvbnN0OwogI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpCisj
aWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQorICAgIHZvaWQgc2VuZFBvaW50ZXJPdXRPdmVyKE5v
ZGUqLCBjb25zdCBQbGF0Zm9ybVBvaW50ZXJFdmVudCYpOworICAgIGJvb2wgcG9zdERpc3BhdGNo
UG9pbnRlckV2ZW50KE5vZGUqLCBib29sKTsKKyAgICBib29sIGRpc3BhdGNoUG9pbnRlckV2ZW50
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25zdCBQbGF0Zm9ybVBvaW50ZXJFdmVu
dCYpOworI2VuZGlmIC8vIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKIAogICAgIGJvb2wgcGFzc01v
dXNlUHJlc3NFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYsIEZy
YW1lKiBzdWJmcmFtZSk7CiAgICAgYm9vbCBwYXNzTW91c2VNb3ZlRXZlbnRUb1N1YmZyYW1lKE1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmLCBGcmFtZSogc3ViZnJhbWUsIEhpdFRlc3RSZXN1
bHQqIGhvdmVyZWROb2RlID0gMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9QbGF0Zm9ybUV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUV2ZW50
LmgKaW5kZXggMzFhZjA0MS4uNDA1MTU2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGxhdGZvcm1FdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtRXZlbnQuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIE1pY3Jv
c29mdCBPcGVuIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw2ICs3MSwxOSBAQCBwdWJsaWM6CiAgICAg
ICAgIFRvdWNoRW5kLAogICAgICAgICBUb3VjaENhbmNlbCwKICNlbmRpZgorI2lmIEVOQUJMRShQ
T0lOVEVSX0VWRU5UUykKKyAgICAgICAgLy8gUGxhdGZvcm1Qb2ludGVyRXZlbnQKKyAgICAgICAg
UG9pbnRlckRvd24sCisgICAgICAgIFBvaW50ZXJVcCwKKyAgICAgICAgUG9pbnRlckNhbmNlbCwK
KyAgICAgICAgUG9pbnRlck1vdmUsCisgICAgICAgIFBvaW50ZXJPdmVyLAorICAgICAgICBQb2lu
dGVyT3V0LAorICAgICAgICBQb2ludGVyRW50ZXIsCisgICAgICAgIFBvaW50ZXJMZWF2ZSwKKyAg
ICAgICAgR290UG9pbnRlckNhcHR1cmUsCisgICAgICAgIExvc3RQb2ludGVyQ2FwdHVyZSwKKyNl
bmRpZgogICAgIH07CiAKICAgICBlbnVtIE1vZGlmaWVycyB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVBvaW50ZXJFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QbGF0Zm9ybVBvaW50ZXJFdmVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMWJjZmY0ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1BsYXRmb3JtUG9pbnRlckV2ZW50LmNwcApAQCAtMCwwICsxLDE3OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBNaWNyb3NvZnQgT3BlbiBUZWNobm9sb2dpZXMsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybVBvaW50ZXJFdmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0YXRpYyBjb25zdCBsb25nIFBvaW50ZXJOb0J1dHRvbkRlZmluZSA9IDA7CitzdGF0aWMg
Y29uc3QgbG9uZyBQb2ludGVyTGVmdEJ1dHRvbkRlZmluZSA9IDE7CitzdGF0aWMgY29uc3QgbG9u
ZyBQb2ludGVyTWlkZGxlQnV0dG9uRGVmaW5lID0gNDsKK3N0YXRpYyBjb25zdCBsb25nIFBvaW50
ZXJSaWdodEJ1dHRvbkRlZmluZSA9IDI7CitzdGF0aWMgY29uc3QgbG9uZyBQb2ludGVyWDFCdXR0
b25EZWZpbmUgPSA4Oworc3RhdGljIGNvbnN0IGxvbmcgUG9pbnRlclgyQnV0dG9uRGVmaW5lID0g
MTY7CitzdGF0aWMgY29uc3QgbG9uZyBQb2ludGVyUGVuRXJhc2VCdXR0b25EZWZpbmUgPSAzMjsK
Kworc3RhdGljIGxvbmcgY29udmVydEJ1dHRvblRvQ2hvcmRlZFZhbHVlKFBvaW50ZXJCdXR0b24g
YnV0dG9uKQoreworICAgIHN3aXRjaCAoYnV0dG9uKSB7CisgICAgY2FzZSBQb2ludGVyTm9CdXR0
b246CisgICAgICAgIHJldHVybiBQb2ludGVyTm9CdXR0b25EZWZpbmU7CisgICAgY2FzZSBQb2lu
dGVyTGVmdEJ1dHRvbjoKKyAgICAgICAgcmV0dXJuIFBvaW50ZXJMZWZ0QnV0dG9uRGVmaW5lOwor
ICAgIGNhc2UgUG9pbnRlck1pZGRsZUJ1dHRvbjoKKyAgICAgICAgcmV0dXJuIFBvaW50ZXJNaWRk
bGVCdXR0b25EZWZpbmU7CisgICAgY2FzZSBQb2ludGVyUmlnaHRCdXR0b246CisgICAgICAgIHJl
dHVybiBQb2ludGVyUmlnaHRCdXR0b25EZWZpbmU7CisgICAgY2FzZSBQb2ludGVyWDFCdXR0b246
CisgICAgICAgIHJldHVybiBQb2ludGVyWDFCdXR0b25EZWZpbmU7CisgICAgY2FzZSBQb2ludGVy
WDJCdXR0b246CisgICAgICAgIHJldHVybiBQb2ludGVyWDJCdXR0b25EZWZpbmU7CisgICAgY2Fz
ZSBQb2ludGVyUGVuRXJhc2VCdXR0b246CisgICAgICAgIHJldHVybiBQb2ludGVyUGVuRXJhc2VC
dXR0b25EZWZpbmU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworc3RhdGljIGxvbmcgY29udmVydE1vdXNl
QnV0dG9uVG9DaG9yZGVkVmFsdWUoTW91c2VCdXR0b24gYnV0dG9uKQoreworICAgIHN3aXRjaCAo
YnV0dG9uKSB7CisgICAgY2FzZSBOb0J1dHRvbjoKKyAgICAgICAgcmV0dXJuIFBvaW50ZXJOb0J1
dHRvbkRlZmluZTsKKyAgICBjYXNlIExlZnRCdXR0b246CisgICAgICAgIHJldHVybiBQb2ludGVy
TGVmdEJ1dHRvbkRlZmluZTsKKyAgICBjYXNlIE1pZGRsZUJ1dHRvbjoKKyAgICAgICAgcmV0dXJu
IFBvaW50ZXJNaWRkbGVCdXR0b25EZWZpbmU7CisgICAgY2FzZSBSaWdodEJ1dHRvbjoKKyAgICAg
ICAgcmV0dXJuIFBvaW50ZXJSaWdodEJ1dHRvbkRlZmluZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit2
b2lkIFBvaW50ZXJJbmZvOjpJbml0KFBsYXRmb3JtRXZlbnQ6OlR5cGUgcGxhdGZvcm1UeXBlLAor
ICAgIFBvaW50ZXJUeXBlIHBvaW50ZXJUeXBlLCBsb25nIHBvaW50ZXJJZCwgbG9uZyBjaG9yZGVk
QnV0dG9ucykKK3sKKyAgICBpZiAocG9pbnRlclR5cGUgPT0gUG9pbnRlclR5cGVNb3VzZSkgewor
ICAgICAgICBtX3BvaW50ZXJJZCA9IE1vdXNlUG9pbnRlcklkOworICAgICAgICBtX3ByaW1hcnlQ
b2ludGVyID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKHBvaW50ZXJUeXBlID09IFBvaW50ZXJUeXBl
VG91Y2gpIHsKKyAgICAgICAgbV9wb2ludGVySWQgPSBwb2ludGVySWQgKyAzOworICAgICAgICBt
X3ByaW1hcnlQb2ludGVyID0gcG9pbnRlcklkOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcG9p
bnRlcklkID0gUGVuUG9pbnRlcklkOworICAgICAgICBtX3ByaW1hcnlQb2ludGVyID0gdHJ1ZTsK
KyAgICB9CisKKyAgICBtX3R5cGUgPSBwbGF0Zm9ybVR5cGU7CisgICAgbV93aWR0aCA9IDA7Cisg
ICAgbV9oZWlnaHQgPSAwOworICAgIG1fcHJlc3N1cmUgPSAwOworICAgIG1fdGlsdFggPSAwOwor
ICAgIG1fdGlsdFkgPSAwOworICAgIG1fcG9pbnRlclR5cGUgPSBwb2ludGVyVHlwZTsKKyAgICBt
X3Byb2Nlc3NlZCA9IGZhbHNlOworCisgICAgbV9jaG9yZGVkQnV0dG9ucyA9IGNob3JkZWRCdXR0
b25zOworfQorCitib29sIFBvaW50ZXJJbmZvOjppc0J1dHRvblByZXNzZWQoUG9pbnRlckJ1dHRv
biBidXR0b24pCit7CisgICAgbG9uZyBjaHJvZGVkVmFsID0gY29udmVydEJ1dHRvblRvQ2hvcmRl
ZFZhbHVlKGJ1dHRvbik7CisgICAgcmV0dXJuIChtX2Nob3JkZWRCdXR0b25zICYgY2hyb2RlZFZh
bCk7Cit9CisKK1BsYXRmb3JtUG9pbnRlckV2ZW50OjpQbGF0Zm9ybVBvaW50ZXJFdmVudChjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQgJiBldmVudCkKKyAgICA6IFBsYXRmb3JtTW91c2VFdmVudChl
dmVudCkKK3sKKyAgICBsb25nIGNob3JkZWRCdXR0b25zID0gY29udmVydE1vdXNlQnV0dG9uVG9D
aG9yZGVkVmFsdWUoZXZlbnQuYnV0dG9uKCkpOworCisgICAgbV9pbmZvLkluaXQoY29udmVydFRv
UG9pbnRlclR5cGUoZXZlbnQudHlwZSgpKSwgUG9pbnRlclR5cGVNb3VzZSwKKyAgICAgICAgUG9p
bnRlckluZm86Ok1vdXNlUG9pbnRlcklkLCBjaG9yZGVkQnV0dG9ucyk7Cit9CisKK1BsYXRmb3Jt
UG9pbnRlckV2ZW50OjpQbGF0Zm9ybVBvaW50ZXJFdmVudCgKKyAgICBjb25zdCBQbGF0Zm9ybVRv
dWNoUG9pbnQgJiB0b3VjaFBvaW50LAorICAgIGludCBwbGF0Zm9ybVR5cGUsIHVuc2lnbmVkIG1v
ZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCkKKyAgICA6IFBsYXRmb3JtTW91c2VFdmVudCgpCit7
CisgICAgbV9pbmZvLkluaXQoY29udmVydFRvUG9pbnRlclR5cGUoUGxhdGZvcm1FdmVudDo6VHlw
ZShwbGF0Zm9ybVR5cGUpKSwKKyAgICAgICAgUG9pbnRlclR5cGVUb3VjaCwgdG91Y2hQb2ludC5p
ZCgpLCBQb2ludGVyTm9CdXR0b25EZWZpbmUpOworICAgIG1fbW9kaWZpZXJzID0gbW9kaWZpZXJz
OworICAgIG1fdGltZXN0YW1wID0gdGltZXN0YW1wOworICAgIG1fcG9zaXRpb24gPSB0b3VjaFBv
aW50LnBvcygpOworICAgIG1fZ2xvYmFsUG9zaXRpb24gPSB0b3VjaFBvaW50LnNjcmVlblBvcygp
OworfQorCisvLyBleHBlY3RzIGNvbnZlcnNpb24gZnJvbSBQbGF0Zm9ybU1vdXNlRXZlbnQgb3Ig
UGxhdGZvcm1Ub3VjaEV2ZW50IG9ubHkKKy8vCitQbGF0Zm9ybUV2ZW50OjpUeXBlIFBsYXRmb3Jt
UG9pbnRlckV2ZW50OjoKKyAgICBjb252ZXJ0VG9Qb2ludGVyVHlwZShQbGF0Zm9ybUV2ZW50OjpU
eXBlIHBsYXRmb3JtVHlwZSkKK3sKKyAgICBzd2l0Y2ggKHBsYXRmb3JtVHlwZSkgeworICAgIGNh
c2UgTW91c2VNb3ZlZDoKKyAgICAgICAgcmV0dXJuIFBvaW50ZXJNb3ZlOworICAgIGNhc2UgTW91
c2VQcmVzc2VkOgorICAgICAgICByZXR1cm4gUG9pbnRlckRvd247CisgICAgY2FzZSBNb3VzZVJl
bGVhc2VkOgorICAgICAgICByZXR1cm4gUG9pbnRlclVwOworICAgIGNhc2UgVG91Y2hTdGFydDoK
KyAgICAgICAgcmV0dXJuIFBvaW50ZXJEb3duOworICAgIGNhc2UgVG91Y2hNb3ZlOgorICAgICAg
ICByZXR1cm4gUG9pbnRlck1vdmU7CisgICAgY2FzZSBUb3VjaEVuZDoKKyAgICAgICAgcmV0dXJu
IFBvaW50ZXJVcDsKKyAgICBjYXNlIFRvdWNoQ2FuY2VsOgorICAgICAgICByZXR1cm4gUG9pbnRl
ckNhbmNlbDsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIE5vVHlwZTsKKyAgICB9Cit9CisKK1BsYXRmb3JtUG9pbnRlckV2ZW50Q29s
bGVjdGlvbjo6UGxhdGZvcm1Qb2ludGVyRXZlbnRDb2xsZWN0aW9uKAorICAgIGNvbnN0IFBsYXRm
b3JtTW91c2VFdmVudCYgZXZlbnQpCit7CisgICAgZXZlbnRzLmFwcGVuZChQbGF0Zm9ybVBvaW50
ZXJFdmVudChldmVudCkpOworfQorCitQbGF0Zm9ybVBvaW50ZXJFdmVudENvbGxlY3Rpb246OlBs
YXRmb3JtUG9pbnRlckV2ZW50Q29sbGVjdGlvbigKKyAgICBjb25zdCBQbGF0Zm9ybVRvdWNoRXZl
bnQmIHRvdWNoRXZlbnQpCit7CisgICAgUGxhdGZvcm1Ub3VjaEV2ZW50IGV2ZW50ID0gdG91Y2hF
dmVudDsKKyAgICBmb3IgKFZlY3RvcjxQbGF0Zm9ybVRvdWNoUG9pbnQ+Ojpjb25zdF9pdGVyYXRv
ciBpdGVyID0KKyAgICAgICAgZXZlbnQudG91Y2hQb2ludHMoKS5iZWdpbigpOworICAgICAgICBp
dGVyICE9IGV2ZW50LnRvdWNoUG9pbnRzKCkuZW5kKCk7IGl0ZXIrKykgeworICAgICAgICAgICAg
Y29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiB0b3VjaFBvaW50ID0gKCppdGVyKTsKKyAgICAgICAg
ICAgIGV2ZW50cy5hcHBlbmQoUGxhdGZvcm1Qb2ludGVyRXZlbnQodG91Y2hQb2ludCwgZXZlbnQu
dHlwZSgpLAorICAgICAgICAgICAgICAgIGV2ZW50Lm1vZGlmaWVycygpLCBldmVudC50aW1lc3Rh
bXAoKSkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Qb2ludGVyRXZlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtUG9pbnRlckV2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMmY1NmY4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1BsYXRmb3JtUG9pbnRlckV2ZW50LmgKQEAgLTAsMCArMSwxMTIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTWljcm9zb2Z0IE9wZW4gVGVjaG5vbG9naWVzLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UKKyAqLworCisjaWZuZGVmIFBsYXRmb3JtUG9p
bnRlckV2ZW50X2gKKyNkZWZpbmUgUGxhdGZvcm1Qb2ludGVyRXZlbnRfaAorCisjaW5jbHVkZSAi
UGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Ub3VjaEV2ZW50LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGxhdGZvcm1Qb2ludGVyRXZlbnQ7CisKK2Vu
dW0gUG9pbnRlclR5cGUgeworICAgIFBvaW50ZXJUeXBlTWluID0gMCwKKyAgICBQb2ludGVyVHlw
ZVRvdWNoID0gMCwKKyAgICBQb2ludGVyVHlwZVBlbiA9IDEsCisgICAgUG9pbnRlclR5cGVNb3Vz
ZSA9IDIsCisgICAgUG9pbnRlclR5cGVNYXggPSAzCit9OworCitlbnVtIFBvaW50ZXJCdXR0b24g
eworICAgIFBvaW50ZXJOb0J1dHRvbiA9IC0xLCAvLyBubyBidXR0b25zIHByZXNzZWQgb24gZGV2
aWNlCisgICAgUG9pbnRlckxlZnRCdXR0b24sIC8vIExlZnQgbW91c2UgYnV0dG9uLCBUb3VjaCBj
b250YWN0LCBQZW4gY29udGFjdAorICAgIFBvaW50ZXJNaWRkbGVCdXR0b24sIC8vIE1pZGRsZSBt
b3VzZSBidXR0b24KKyAgICBQb2ludGVyUmlnaHRCdXR0b24sIC8vIFJpZ2h0IG1vdXNlIGJ1dHRv
bgorICAgIFBvaW50ZXJYMUJ1dHRvbiwgLy8gQmFjayBtb3VzZSBidXR0b24KKyAgICBQb2ludGVy
WDJCdXR0b24sIC8vIEZvcndhcmQgbW91c2UgYnV0dG9uCisgICAgUG9pbnRlclBlbkVyYXNlQnV0
dG9uIC8vIFBlbiBjb250YWN0IHdpdGggZXJhc2UgYnV0dG9uIHByZXNzZWQKK307CisKK3R5cGVk
ZWYgc3RydWN0IFBvaW50ZXJJbmZvIHsKKyAgICBzdGF0aWMgY29uc3QgbG9uZyBNb3VzZVBvaW50
ZXJJZCA9IDE7CisgICAgc3RhdGljIGNvbnN0IGxvbmcgUGVuUG9pbnRlcklkID0gMjsKKworICAg
IC8vIGNvcHkgb2YgUGxhdGZvcm1FdmVudCBmaWVsZCBtX3R5cGUKKyAgICB1bnNpZ25lZCBtX3R5
cGU7CisKKyAgICAvLyBzdGFydCBvZiBwb2ludGVyIGV2ZW50IHByb3BlcnRpZXMKKyAgICBsb25n
IG1fcG9pbnRlcklkOyAvLyBJZCBvZiBwb2ludGVyIChtb3VzZSwgdG91Y2gxLCAuLi4sIHBlbjEs
Li4uICkKKyAgICBsb25nIG1fd2lkdGg7CisgICAgbG9uZyBtX2hlaWdodDsKKyAgICBkb3VibGUg
bV9wcmVzc3VyZTsKKyAgICBsb25nIG1fdGlsdFg7CisgICAgbG9uZyBtX3RpbHRZOworICAgIFBv
aW50ZXJUeXBlIG1fcG9pbnRlclR5cGU7IC8vIFR5cGUgb2YgcG9pbnRlciAobW91c2UsIHRvdWNo
LCBwZW4pCisgICAgYm9vbCBtX3ByaW1hcnlQb2ludGVyOworICAgIGxvbmcgbV9jaG9yZGVkQnV0
dG9uczsgLy8gQ29tYmluZWQgYnV0dG9ucyBmb3IgdGhlIHBvaW50ZXIKKyAgICBib29sIG1fcHJv
Y2Vzc2VkOyAvLyBpZiB0cnVlLCBkbyBub3QgZGlzcGF0Y2ggdG8gc2NyaXB0aW5nIGVuZ2luZQor
CisgICAgdm9pZCBJbml0KFBsYXRmb3JtRXZlbnQ6OlR5cGUsIFBvaW50ZXJUeXBlLCBsb25nIHBv
aW50ZXJJZCwKKyAgICAgICAgbG9uZyBjaG9yZGVkQnV0dG9ucyk7CisgICAgYm9vbCBpc0J1dHRv
blByZXNzZWQoUG9pbnRlckJ1dHRvbik7CisgICAgdm9pZCBhZGRCdXR0b25zKGxvbmcgY2hvcmRl
ZEJ1dHRvbnMpCisgICAgICAgIHsgbV9jaG9yZGVkQnV0dG9ucyA9IG1fY2hvcmRlZEJ1dHRvbnMg
fCBjaG9yZGVkQnV0dG9uczsgfQorfSBQb2ludGVySW5mbzsKKworY2xhc3MgUGxhdGZvcm1Qb2lu
dGVyRXZlbnQgOiBwdWJsaWMgUGxhdGZvcm1Nb3VzZUV2ZW50IHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIGV4cGxpY2l0IFBsYXRmb3JtUG9pbnRlckV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCAmKTsKKyAgICAgICAgZXhwbGljaXQgUGxhdGZvcm1Qb2ludGVyRXZlbnQoY29uc3QgUGxhdGZv
cm1Ub3VjaFBvaW50ICYsCisgICAgICAgICAgICBpbnQsIHVuc2lnbmVkLCBkb3VibGUpOworCisg
ICAgICAgIGJvb2wgaXNQcmltYXJ5KCkgeyByZXR1cm4gbV9pbmZvLm1fcHJpbWFyeVBvaW50ZXI7
IH0KKyAgICAgICAgdm9pZCBzZXRQcmltYXJ5KGJvb2wgcHJpbWFyeSkgeyBtX2luZm8ubV9wcmlt
YXJ5UG9pbnRlciA9IHByaW1hcnk7IH0KKyAgICAgICAgY29uc3QgUG9pbnRlckluZm8mIGdldFBv
aW50ZXJJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvOyB9CisgICAgICAgIFR5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1faW5mby5tX3R5cGUpOyB9CisgICAg
ICAgIGJvb2wgUG9pbnRlclByb2Nlc3NlZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5mby5tX3Byb2Nl
c3NlZDsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICBQbGF0Zm9ybUV2ZW50OjpUeXBlIGNv
bnZlcnRUb1BvaW50ZXJUeXBlKFBsYXRmb3JtRXZlbnQ6OlR5cGUpOworICAgICAgICBQb2ludGVy
SW5mbyBtX2luZm87CisKKyAgICBwcml2YXRlOgorICAgICAgICBQbGF0Zm9ybVBvaW50ZXJFdmVu
dCgpIHsgfQorfTsKKworY2xhc3MgUGxhdGZvcm1Qb2ludGVyRXZlbnRDb2xsZWN0aW9uIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIGV4cGxpY2l0IFBsYXRmb3JtUG9pbnRlckV2ZW50Q29sbGVjdGlv
bihjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQgJik7CisgICAgICAgIGV4cGxpY2l0IFBsYXRmb3Jt
UG9pbnRlckV2ZW50Q29sbGVjdGlvbihjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQgJik7CisgICAg
ICAgIFZlY3RvcjxQbGF0Zm9ybVBvaW50ZXJFdmVudD4gZXZlbnRzOworCisgICAgcHJpdmF0ZToK
KyAgICAgICAgUGxhdGZvcm1Qb2ludGVyRXZlbnRDb2xsZWN0aW9uKCkgeyB9Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQbGF0Zm9ybVBvaW50ZXJFdmVudF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKaW5kZXggYzU3MjI3YS4uNGM5YWEyMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQpAQCAtMTAxLDYgKzEwMSw3IEBACiAgICAg
ICAnRU5BQkxFX1BBR0VfVklTSUJJTElUWV9BUEk9MScsCiAgICAgICAnRU5BQkxFX1BFUkZPUk1B
TkNFX1RJTUVMSU5FPTEnLAogICAgICAgJ0VOQUJMRV9QT0lOVEVSX0xPQ0s9MScsCisgICAgICAn
RU5BQkxFX1BPSU5URVJfRVZFTlRTPTEnLAogICAgICAgJ0VOQUJMRV9QUk9HUkVTU19FTEVNRU5U
PTEnLAogICAgICAgJ0VOQUJMRV9QUk9YSU1JVFlfRVZFTlRTPTAnLAogICAgICAgJ0VOQUJMRV9R
VU9UQT0xJywK
</data>

          </attachment>
      

    </bug>

</bugzilla>