<?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>107800</bug_id>
          
          <creation_ts>2013-01-24 00:57:47 -0800</creation_ts>
          <short_desc>[Shadow] Implements event re-targeting for Touch Events.</short_desc>
          <delta_ts>2013-03-05 23:32:35 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>109156</dependson>
          <blocked>107796</blocked>
    
    <blocked>108908</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hayato Ito">hayato</reporter>
          <assigned_to name="Hayato Ito">hayato</assigned_to>
          <cc>buildbot</cc>
    
    <cc>dfreedm</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dominicc</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rego+ews</cc>
    
    <cc>rniwa</cc>
    
    <cc>shinyak</cc>
    
    <cc>syoichi</cc>
    
    <cc>webcomponents-bugzilla</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>815208</commentid>
    <comment_count>0</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-01-24 00:57:47 -0800</bug_when>
    <thetext>I&apos;ve filed a bug for the Shadow DOM Spec here: https://www.w3.org/Bugs/Public/show_bug.cgi?id=20746.

We have to re-target Touch.target for multiple touches if each touch point is in different shadow trees.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815373</commentid>
    <comment_count>1</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-01-24 05:45:24 -0800</bug_when>
    <thetext>At first glance, we have to:

- Introduces TouchEventDispatchMediator
- Refactor EventContext so that it has additional fields, such as touches, targetTouches and changedTouches. Another ides is to have another class which inherites EventContext.
- Refactor EventRelatedTargetAdjuster so that it can be re-used from TouchEventDispatchMediator.

More importantly, we should be careful to the performance. In naive implementation, it takes O(n^2) times than simple MouseEvent relatedTarget-retargeting.
TouchEvent retargeting will involve N events times N retargetings (N is the number of touch points).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817713</commentid>
    <comment_count>2</comment_count>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2013-01-28 06:02:41 -0800</bug_when>
    <thetext>Actually not O(n^2) but O(nm) where n is number of targets and m number of touches, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818550</commentid>
    <comment_count>3</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2013-01-28 22:38:44 -0800</bug_when>
    <thetext>Actually we have to run event retargeting algorithm with single touch :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839457</commentid>
    <comment_count>4</comment_count>
      <attachid>189745</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-22 04:27:03 -0800</bug_when>
    <thetext>Created attachment 189745
WIP. flaky. Not ready for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839626</commentid>
    <comment_count>5</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2013-02-22 08:54:17 -0800</bug_when>
    <thetext>Thank you for working on this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847247</commentid>
    <comment_count>6</comment_count>
      <attachid>191397</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-03-04 21:23:21 -0800</bug_when>
    <thetext>Created attachment 191397
Ready for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847250</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-04 21:29:03 -0800</bug_when>
    <thetext>Attachment 191397 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast/dom/shadow/resources/event-dispatching.js&apos;, u&apos;LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-distributed-text-node-expected.txt&apos;, u&apos;LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-distributed-text-node.html&apos;, u&apos;LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-text-node-in-shadow-root-expected.txt&apos;, u&apos;LayoutTests/fast/dom/shadow/touch-event-retargeting-expected.txt&apos;, u&apos;LayoutTests/fast/dom/shadow/touch-event-retargeting.html&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/dom/EventContext.cpp&apos;, u&apos;Source/WebCore/dom/EventContext.h&apos;, u&apos;Source/WebCore/dom/EventRetargeter.cpp&apos;, u&apos;Source/WebCore/dom/EventRetargeter.h&apos;, u&apos;Source/WebCore/dom/Node.cpp&apos;, u&apos;Source/WebCore/dom/Node.h&apos;, u&apos;Source/WebCore/dom/Touch.cpp&apos;, u&apos;Source/WebCore/dom/Touch.h&apos;, u&apos;Source/WebCore/dom/TouchEvent.cpp&apos;, u&apos;Source/WebCore/dom/TouchEvent.h&apos;, u&apos;Source/WebCore/dom/TouchList.cpp&apos;, u&apos;Source/WebCore/dom/TouchList.h&apos;, u&apos;Source/WebCore/page/EventHandler.cpp&apos;]&quot; exit_code: 1
Source/WebCore/dom/EventContext.h:80:  The parameter name &quot;target&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 21 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>847252</commentid>
    <comment_count>8</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-03-04 21:31:47 -0800</bug_when>
    <thetext>This is an expected style error. We should file a bug against check-webkit-style...

(In reply to comment #7)
&gt; Attachment 191397 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast/dom/shadow/resources/event-dispatching.js&apos;, u&apos;LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-distributed-text-node-expected.txt&apos;, u&apos;LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-distributed-text-node.html&apos;, u&apos;LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-text-node-in-shadow-root-expected.txt&apos;, u&apos;LayoutTests/fast/dom/shadow/touch-event-retargeting-expected.txt&apos;, u&apos;LayoutTests/fast/dom/shadow/touch-event-retargeting.html&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/dom/EventContext.cpp&apos;, u&apos;Source/WebCore/dom/EventContext.h&apos;, u&apos;Source/WebCore/dom/EventRetargeter.cpp&apos;, u&apos;Source/WebCore/dom/EventRetargeter.h&apos;, u&apos;Source/WebCore/dom/Node.cpp&apos;, u&apos;Source/WebCore/dom/Node.h&apos;, u&apos;Source/WebCore/dom/Touch.cpp&apos;, u&apos;Source/WebCore/dom/Touch.h&apos;, u&apos;Source/WebCore/dom/TouchEvent.cpp&apos;, u&apos;Source/WebCore/dom/TouchEvent.h&apos;, u&apos;Source/WebCore/dom/TouchList.cpp&apos;, u&apos;Source/WebCore/dom/TouchList.h&apos;, u&apos;Source/WebCore/page/EventHandler.cpp&apos;]&quot; exit_code: 1
&gt; Source/WebCore/dom/EventContext.h:80:  The parameter name &quot;target&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Total errors found: 1 in 21 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847280</commentid>
    <comment_count>9</comment_count>
      <attachid>191397</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-04 22:27:27 -0800</bug_when>
    <thetext>Comment on attachment 191397
Ready for review

Attachment 191397 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-commit-queue.appspot.com/results/16988081</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847289</commentid>
    <comment_count>10</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-03-04 22:40:34 -0800</bug_when>
    <thetext>Mac bot seems unhappy. Let me take a look.

(In reply to comment #9)
&gt; (From update of attachment 191397 [details])
&gt; Attachment 191397 [details] did not pass mac-wk2-ews (mac-wk2):
&gt; Output: http://webkit-commit-queue.appspot.com/results/16988081</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847291</commentid>
    <comment_count>11</comment_count>
      <attachid>191397</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-04 22:44:04 -0800</bug_when>
    <thetext>Comment on attachment 191397
Ready for review

Attachment 191397 did not pass mac-ews (mac):
Output: http://webkit-commit-queue.appspot.com/results/16999059</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847299</commentid>
    <comment_count>12</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-03-04 22:58:32 -0800</bug_when>
    <thetext>It seems I have to update the patch to support the port where TOUCH_EVENTS flag is disabled.

(In reply to comment #10)
&gt; Mac bot seems unhappy. Let me take a look.
&gt; 
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 191397 [details] [details])
&gt; &gt; Attachment 191397 [details] [details] did not pass mac-wk2-ews (mac-wk2):
&gt; &gt; Output: http://webkit-commit-queue.appspot.com/results/16988081</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847491</commentid>
    <comment_count>13</comment_count>
      <attachid>191447</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-03-05 02:46:09 -0800</bug_when>
    <thetext>Created attachment 191447
Fix a build hopefully</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847494</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-05 02:53:00 -0800</bug_when>
    <thetext>Attachment 191447 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast/dom/shadow/resources/event-dispatching.js&apos;, u&apos;LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-distributed-text-node-expected.txt&apos;, u&apos;LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-distributed-text-node.html&apos;, u&apos;LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-text-node-in-shadow-root-expected.txt&apos;, u&apos;LayoutTests/fast/dom/shadow/touch-event-retargeting-expected.txt&apos;, u&apos;LayoutTests/fast/dom/shadow/touch-event-retargeting.html&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/dom/EventContext.cpp&apos;, u&apos;Source/WebCore/dom/EventContext.h&apos;, u&apos;Source/WebCore/dom/EventRetargeter.cpp&apos;, u&apos;Source/WebCore/dom/EventRetargeter.h&apos;, u&apos;Source/WebCore/dom/Node.cpp&apos;, u&apos;Source/WebCore/dom/Node.h&apos;, u&apos;Source/WebCore/dom/Touch.cpp&apos;, u&apos;Source/WebCore/dom/Touch.h&apos;, u&apos;Source/WebCore/dom/TouchEvent.cpp&apos;, u&apos;Source/WebCore/dom/TouchEvent.h&apos;, u&apos;Source/WebCore/dom/TouchList.cpp&apos;, u&apos;Source/WebCore/dom/TouchList.h&apos;, u&apos;Source/WebCore/page/EventHandler.cpp&apos;]&quot; exit_code: 1
Source/WebCore/dom/EventContext.h:82:  The parameter name &quot;target&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 21 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>847758</commentid>
    <comment_count>15</comment_count>
      <attachid>191447</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2013-03-05 09:45:51 -0800</bug_when>
    <thetext>Comment on attachment 191447
Fix a build hopefully

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

This looks great, I only have two quibbles below: the loop avoidance and the cloning of touches. If the latter is not important (I don&apos;t know), we can land this and improve on it.

&gt; Source/WebCore/dom/EventRetargeter.cpp:135
&gt; +        TouchEventContext* touchEventContext = static_cast&lt;TouchEventContext*&gt;(eventPath[i].get());

Sounds like we need a toTouchEventContext helper?

&gt; Source/WebCore/dom/EventRetargeter.cpp:150
&gt; +    for (size_t i = 0; i&lt; touchList.length(); ++i) {

&quot;i&lt;&quot; to &quot;i &lt;&quot;

Also, I wonder if we could check to see if adjustment is going to be needed at a given node in event path and eliminate this loop in those cases?

&gt; Source/WebCore/dom/EventRetargeter.cpp:156
&gt; +            touchListPath[j]-&gt;append(touch.cloneWithNewTarget(adjustedNodes[j].get()));

Wait.. this is interesting. Are we supposed to return the same object from .touches each time? If so, this code is not doing the right thing -- we should be only adjusting the target on touch.

&gt; Source/WebCore/dom/EventRetargeter.h:54
&gt; +    typedef Vector&lt;RefPtr&lt;TouchList&gt; &gt; TouchListPath;

EventPathTouchLists?

&gt; Source/WebCore/dom/EventRetargeter.h:69
&gt; +    static void calculateAdjustedNodes(const Node*, const Node* relatedNode, bool stopEventAtBoundaryIfNeeded, EventPath&amp;, AdjustedNodes&amp;);

Turn stopEventAtBoundaryIfNeeded into an enum?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847916</commentid>
    <comment_count>16</comment_count>
    <who name="Daniel Freedman">dfreedm</who>
    <bug_when>2013-03-05 12:32:31 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 191447 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=191447&amp;action=review
&gt; 
&gt; This looks great, I only have two quibbles below: the loop avoidance and the cloning of touches. If the latter is not important (I don&apos;t know), we can land this and improve on it.
&gt; 
&gt; &gt; Source/WebCore/dom/EventRetargeter.cpp:135
&gt; &gt; +        TouchEventContext* touchEventContext = static_cast&lt;TouchEventContext*&gt;(eventPath[i].get());
&gt; 
&gt; Sounds like we need a toTouchEventContext helper?
&gt; 
&gt; &gt; Source/WebCore/dom/EventRetargeter.cpp:150
&gt; &gt; +    for (size_t i = 0; i&lt; touchList.length(); ++i) {
&gt; 
&gt; &quot;i&lt;&quot; to &quot;i &lt;&quot;
&gt; 
&gt; Also, I wonder if we could check to see if adjustment is going to be needed at a given node in event path and eliminate this loop in those cases?
&gt; 
&gt; &gt; Source/WebCore/dom/EventRetargeter.cpp:156
&gt; &gt; +            touchListPath[j]-&gt;append(touch.cloneWithNewTarget(adjustedNodes[j].get()));
&gt; 
&gt; Wait.. this is interesting. Are we supposed to return the same object from .touches each time? If so, this code is not doing the right thing -- we should be only adjusting the target on touch.

Chrome and Safari seem to diverge here. In Chrome, each touch object is created anew for each touch event. In iOS safari, the touch objects are reused between touch events.

Technically, the spec states that Touch objects are immutable, and it&apos;s attributes must not change: http://www.w3.org/TR/touch-events/#touch-interface

However, neither the safari documentation, nor the touch event specs state if the Touch object should or should not be reused between touch events.

&gt; 
&gt; &gt; Source/WebCore/dom/EventRetargeter.h:54
&gt; &gt; +    typedef Vector&lt;RefPtr&lt;TouchList&gt; &gt; TouchListPath;
&gt; 
&gt; EventPathTouchLists?
&gt; 
&gt; &gt; Source/WebCore/dom/EventRetargeter.h:69
&gt; &gt; +    static void calculateAdjustedNodes(const Node*, const Node* relatedNode, bool stopEventAtBoundaryIfNeeded, EventPath&amp;, AdjustedNodes&amp;);
&gt; 
&gt; Turn stopEventAtBoundaryIfNeeded into an enum?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848237</commentid>
    <comment_count>17</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-03-05 16:35:32 -0800</bug_when>
    <thetext>Thank you for the review. Let me upload a new patch soon. But I am WebKit gardener from today... :)

(In reply to comment #15)
&gt; (From update of attachment 191447 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=191447&amp;action=review
&gt; 
&gt; This looks great, I only have two quibbles below: the loop avoidance and the cloning of touches. If the latter is not important (I don&apos;t know), we can land this and improve on it.
&gt; 
&gt; &gt; Source/WebCore/dom/EventRetargeter.cpp:135
&gt; &gt; +        TouchEventContext* touchEventContext = static_cast&lt;TouchEventContext*&gt;(eventPath[i].get());
&gt; 
&gt; Sounds like we need a toTouchEventContext helper?

Sure. Let me add the helper.

&gt; 
&gt; &gt; Source/WebCore/dom/EventRetargeter.cpp:150
&gt; &gt; +    for (size_t i = 0; i&lt; touchList.length(); ++i) {
&gt; 
&gt; &quot;i&lt;&quot; to &quot;i &lt;&quot;

Ops. Let me fix.

&gt; 
&gt; Also, I wonder if we could check to see if adjustment is going to be needed at a given node in event path and eliminate this loop in those cases?

Yay, we can.  I have to admit that this patch is naive in terms of the performance, but this is the safest and easy-to-understand approach as the first wave.

I have a vague plan that I&apos;ll introduce per-treescope EventContext rather than current per-node EventContext. Touch Events dispatching will get a benefit from that, I think. So instead of making this first patch complex, I&apos;d like to delay such an optimization and work on per-treescope EventContext in another bug.

Are you happy with this? If so, I&apos;ll file a bug for per-treescope EventContext.

&gt; 
&gt; &gt; Source/WebCore/dom/EventRetargeter.cpp:156
&gt; &gt; +            touchListPath[j]-&gt;append(touch.cloneWithNewTarget(adjustedNodes[j].get()));
&gt; 
&gt; Wait.. this is interesting. Are we supposed to return the same object from .touches each time? If so, this code is not doing the right thing -- we should be only adjusting the target on touch.

That&apos;s exactly what I did in the first WIP patch. https://bugs.webkit.org/attachment.cgi?id=189745
I have encountered the strange aliasing problem. The reason is what Daniel pointed out. Touch object may be re-used between multiple Touch event dispatchings. EventHandler keeps Touch objects between multiple Touch Events dispatching. So we have to clone it.

&gt; 
&gt; &gt; Source/WebCore/dom/EventRetargeter.h:54
&gt; &gt; +    typedef Vector&lt;RefPtr&lt;TouchList&gt; &gt; TouchListPath;
&gt; 
&gt; EventPathTouchLists?

Okay.

&gt; 
&gt; &gt; Source/WebCore/dom/EventRetargeter.h:69
&gt; &gt; +    static void calculateAdjustedNodes(const Node*, const Node* relatedNode, bool stopEventAtBoundaryIfNeeded, EventPath&amp;, AdjustedNodes&amp;);
&gt; 
&gt; Turn stopEventAtBoundaryIfNeeded into an enum?

Okay. Let me do it.
(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; (From update of attachment 191447 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=191447&amp;action=review
&gt; &gt; 
&gt; &gt; This looks great, I only have two quibbles below: the loop avoidance and the cloning of touches. If the latter is not important (I don&apos;t know), we can land this and improve on it.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/dom/EventRetargeter.cpp:135
&gt; &gt; &gt; +        TouchEventContext* touchEventContext = static_cast&lt;TouchEventContext*&gt;(eventPath[i].get());
&gt; &gt; 
&gt; &gt; Sounds like we need a toTouchEventContext helper?
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/dom/EventRetargeter.cpp:150
&gt; &gt; &gt; +    for (size_t i = 0; i&lt; touchList.length(); ++i) {
&gt; &gt; 
&gt; &gt; &quot;i&lt;&quot; to &quot;i &lt;&quot;
&gt; &gt; 
&gt; &gt; Also, I wonder if we could check to see if adjustment is going to be needed at a given node in event path and eliminate this loop in those cases?
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/dom/EventRetargeter.cpp:156
&gt; &gt; &gt; +            touchListPath[j]-&gt;append(touch.cloneWithNewTarget(adjustedNodes[j].get()));
&gt; &gt; 
&gt; &gt; Wait.. this is interesting. Are we supposed to return the same object from .touches each time? If so, this code is not doing the right thing -- we should be only adjusting the target on touch.
&gt; 
&gt; Chrome and Safari seem to diverge here. In Chrome, each touch object is created anew for each touch event. In iOS safari, the touch objects are reused between touch events.
&gt; 
&gt; Technically, the spec states that Touch objects are immutable, and it&apos;s attributes must not change: http://www.w3.org/TR/touch-events/#touch-interface
&gt; 
&gt; However, neither the safari documentation, nor the touch event specs state if the Touch object should or should not be reused between touch events.

Yay. I thought the fact, Touch is immutable, can justify the cloning of Touch object since users cannot notice Touch is the same instance or not in their event listeners. Therefore, in practical, it does not matter for users wheter Touch object is cloned or not as long as Touch is immutable.

As for the performance, I tried to re-use Touch object if there is an available Touch objects which has the same target. But I don&apos;t think it is worth that maintaing such Touch objects pool and looking for existing re-usable Touch objects. It might be an expensive operation.

&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/dom/EventRetargeter.h:54
&gt; &gt; &gt; +    typedef Vector&lt;RefPtr&lt;TouchList&gt; &gt; TouchListPath;
&gt; &gt; 
&gt; &gt; EventPathTouchLists?
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/dom/EventRetargeter.h:69
&gt; &gt; &gt; +    static void calculateAdjustedNodes(const Node*, const Node* relatedNode, bool stopEventAtBoundaryIfNeeded, EventPath&amp;, AdjustedNodes&amp;);
&gt; &gt; 
&gt; &gt; Turn stopEventAtBoundaryIfNeeded into an enum?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848301</commentid>
    <comment_count>18</comment_count>
      <attachid>191617</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-03-05 17:25:42 -0800</bug_when>
    <thetext>Created attachment 191617
comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848306</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-05 17:36:18 -0800</bug_when>
    <thetext>Attachment 191617 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast/dom/shadow/resources/event-dispatching.js&apos;, u&apos;LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-distributed-text-node-expected.txt&apos;, u&apos;LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-distributed-text-node.html&apos;, u&apos;LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-text-node-in-shadow-root-expected.txt&apos;, u&apos;LayoutTests/fast/dom/shadow/touch-event-retargeting-expected.txt&apos;, u&apos;LayoutTests/fast/dom/shadow/touch-event-retargeting.html&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/dom/EventContext.cpp&apos;, u&apos;Source/WebCore/dom/EventContext.h&apos;, u&apos;Source/WebCore/dom/EventRetargeter.cpp&apos;, u&apos;Source/WebCore/dom/EventRetargeter.h&apos;, u&apos;Source/WebCore/dom/Node.cpp&apos;, u&apos;Source/WebCore/dom/Node.h&apos;, u&apos;Source/WebCore/dom/Touch.cpp&apos;, u&apos;Source/WebCore/dom/Touch.h&apos;, u&apos;Source/WebCore/dom/TouchEvent.cpp&apos;, u&apos;Source/WebCore/dom/TouchEvent.h&apos;, u&apos;Source/WebCore/dom/TouchList.cpp&apos;, u&apos;Source/WebCore/dom/TouchList.h&apos;, u&apos;Source/WebCore/page/EventHandler.cpp&apos;]&quot; exit_code: 1
Source/WebCore/dom/EventContext.h:84:  The parameter name &quot;target&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 21 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>848431</commentid>
    <comment_count>20</comment_count>
      <attachid>191617</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-05 21:18:19 -0800</bug_when>
    <thetext>Comment on attachment 191617
comments addressed.

Clearing flags on attachment: 191617

Committed r144877: &lt;http://trac.webkit.org/changeset/144877&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848432</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-05 21:18:24 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848508</commentid>
    <comment_count>22</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-03-05 23:32:35 -0800</bug_when>
    <thetext>I&apos;ve filed a bug for per-scope (Touch)EventContext for future improvement.
https://bugs.webkit.org/show_bug.cgi?id=111527.

(In reply to comment #21)
&gt; All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189745</attachid>
            <date>2013-02-22 04:27:03 -0800</date>
            <delta_ts>2013-03-04 21:23:18 -0800</delta_ts>
            <desc>WIP. flaky. Not ready for review</desc>
            <filename>bug-107800-20130222212322.patch</filename>
            <type>text/plain</type>
            <size>34466</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzNjc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzFmYzFkYTc4YjM3Y2M3
OTNlM2E3MjgwZWEzY2ZjNTZiNjRhZjIwYS4uNDc3ZjYwNTJiYWVjODMwNTQ3Zjg0MjA2MTg0OTg4
NTQyMzc4ZGZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDEzLTAyLTIyICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBbU2hhZG93XSBSZXRhcmdl
dCBUb3VjaC50YXJnZXQgZm9yIFRvdWNoRXZlbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdJUC4gVG91Y2ggZXZlbnRzIHNlZW1zIGZsYWt5Li4uLgor
CisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy90b3VjaC1ldmVudC1yZXRhcmdldGluZy5o
dG1sCisKKyAgICAgICAgKiBkb20vRXZlbnRDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50Q29udGV4dDo6aXNUb3VjaEV2ZW50Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlRvdWNoRXZlbnRDb250ZXh0OjpUb3VjaEV2ZW50Q29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50Q29udGV4dDo6flRvdWNoRXZlbnRDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoRXZlbnRDb250ZXh0OjpoYW5kbGVMb2NhbEV2ZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50Q29udGV4dDo6cmV0YXJnZXRUb3VjaExp
c3QpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hFdmVudENvbnRleHQ6OmlzVG91Y2hFdmVudENv
bnRleHQpOgorICAgICAgICAqIGRvbS9FdmVudENvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoRXZlbnRDb250ZXh0KToKKyAgICAgICAgKFRvdWNoRXZlbnRDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRvdWNoRXZlbnRDb250ZXh0OjpzZXRUb3VjaGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRvdWNoRXZlbnRDb250ZXh0OjpzZXRUYXJnZXRUb3VjaGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRvdWNoRXZlbnRDb250ZXh0OjpzZXRDaGFuZ2VkVG91Y2hlcyk6CisgICAg
ICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHA6CisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0
Y2hlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogZG9tL0V2ZW50UmV0YXJnZXRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UmV0YXJn
ZXRlcjo6Y2FsY3VsYXRlRXZlbnRQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UmV0YXJn
ZXRlcjo6YWRqdXN0Rm9yVG91Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFJldGFy
Z2V0ZXI6OmFkanVzdFRvdWNoTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFJldGFyZ2V0
ZXI6OmFkanVzdFRvdWNoUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRSZXRhcmdldGVy
OjpjYWxjdWxhdGVBZGp1c3RlZE5vZGVzV2l0aG91dFNocmluayk6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudFJldGFyZ2V0ZXI6OmJ1aWxkUmVsYXRlZE5vZGVNYXApOgorICAgICAgICAqIGRvbS9F
dmVudFJldGFyZ2V0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRXZlbnRSZXRh
cmdldGVyKToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2Rl
OjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6ZGlzcGF0Y2hUb3VjaEV2ZW50KToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChOb2RlKToKKyAgICAgICAgKiBkb20vVG91Y2guaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRvdWNoOjpzZXRUYXJnZXQpOgorICAgICAgICAoVG91Y2gpOgorICAg
ICAgICAqIGRvbS9Ub3VjaEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoRXZlbnRE
aXNwYXRjaE1lZGlhdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUb3VjaEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6VG91Y2hFdmVudERpc3BhdGNoTWVk
aWF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hFdmVudERpc3BhdGNoTWVkaWF0b3I6OmV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNw
YXRjaEV2ZW50KToKKyAgICAgICAgKiBkb20vVG91Y2hFdmVudC5oOgorICAgICAgICAoVG91Y2hF
dmVudERpc3BhdGNoTWVkaWF0b3IpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjp0b1RvdWNoRXZlbnQpOgorICAgICAgICAqIGRvbS9Ub3VjaExpc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaExpc3Q6Oml0ZW0pOgorICAgICAg
ICAqIGRvbS9Ub3VjaExpc3QuaDoKKyAgICAgICAgKFRvdWNoTGlzdCk6CisgICAgICAgICogcGFn
ZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoaXRU
ZXN0UmVzdWx0SW5GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRs
ZVRvdWNoRXZlbnQpOgorCiAyMDEzLTAyLTIxICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5A
d2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggdGhlIGJ1aWxkIGFmdGVyIHIxNDM2NjQuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudENvbnRleHQuY3BwCmluZGV4IDI4OTdjN2Q4OWFjNjgzY2IxZjlkNDM4YTI5
ZmNlYWZlNTFmM2VkYmIuLjFmYTFhNjIzN2UwMWJhZTM3MzA0ZWY0ZmM5NmM5OTZiYmEzZjM1NTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3BwCkBAIC0zMyw2ICszMyw4IEBACiAjaW5j
bHVkZSAiRm9jdXNFdmVudC5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJO
b2RlLmgiCisjaW5jbHVkZSAiVG91Y2hFdmVudC5oIgorI2luY2x1ZGUgIlRvdWNoTGlzdC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYxLDYgKzYzLDExIEBAIGJvb2wgRXZlbnRDb250
ZXh0Ojppc01vdXNlT3JGb2N1c0V2ZW50Q29udGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCitib29sIEV2ZW50Q29udGV4dDo6aXNUb3VjaEV2ZW50Q29udGV4dCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBNb3VzZU9yRm9jdXNFdmVudENvbnRleHQ6Ok1vdXNl
T3JGb2N1c0V2ZW50Q29udGV4dChQYXNzUmVmUHRyPE5vZGU+IG5vZGUsIFBhc3NSZWZQdHI8RXZl
bnRUYXJnZXQ+IGN1cnJlbnRUYXJnZXQsIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHRhcmdldCkK
ICAgICA6IEV2ZW50Q29udGV4dChub2RlLCBjdXJyZW50VGFyZ2V0LCB0YXJnZXQpCiAgICAgLCBt
X3JlbGF0ZWRUYXJnZXQoMCkKQEAgLTg2LDQgKzkzLDM1IEBAIGJvb2wgTW91c2VPckZvY3VzRXZl
bnRDb250ZXh0Ojppc01vdXNlT3JGb2N1c0V2ZW50Q29udGV4dCgpIGNvbnN0CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKK1RvdWNoRXZlbnRDb250ZXh0OjpUb3VjaEV2ZW50Q29udGV4dChQYXNzUmVm
UHRyPE5vZGU+IG5vZGUsIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IGN1cnJlbnRUYXJnZXQsIFBh
c3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHRhcmdldCkKKyAgICA6IEV2ZW50Q29udGV4dChub2RlLCBj
dXJyZW50VGFyZ2V0LCB0YXJnZXQpCit7Cit9CisKK1RvdWNoRXZlbnRDb250ZXh0Ojp+VG91Y2hF
dmVudENvbnRleHQoKQoreworfQorCit2b2lkIFRvdWNoRXZlbnRDb250ZXh0OjpoYW5kbGVMb2Nh
bEV2ZW50cyhFdmVudCogZXZlbnQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGV2ZW50LT5pc1RvdWNo
RXZlbnQoKSk7CisgICAgVG91Y2hFdmVudCogdG91Y2hFdmVudCA9IHRvVG91Y2hFdmVudChldmVu
dCk7CisgICAgcmV0YXJnZXRUb3VjaExpc3QodG91Y2hFdmVudC0+dG91Y2hlcygpLCBtX3RvdWNo
ZXMpOworICAgIHJldGFyZ2V0VG91Y2hMaXN0KHRvdWNoRXZlbnQtPnRhcmdldFRvdWNoZXMoKSwg
bV90YXJnZXRUb3VjaGVzKTsKKyAgICByZXRhcmdldFRvdWNoTGlzdCh0b3VjaEV2ZW50LT5jaGFu
Z2VkVG91Y2hlcygpLCBtX2NoYW5nZWRUb3VjaGVzKTsKKyAgICBFdmVudENvbnRleHQ6OmhhbmRs
ZUxvY2FsRXZlbnRzKGV2ZW50KTsKK30KKwordm9pZCBUb3VjaEV2ZW50Q29udGV4dDo6cmV0YXJn
ZXRUb3VjaExpc3QoVG91Y2hMaXN0KiB0b3VjaExpc3QsIGNvbnN0IFJldGFyZ2V0ZWRUYXJnZXRM
aXN0JiByZXRhcmdldGVkVGFyZ2V0TGlzdCkgY29uc3QKK3sKKyAgICBBU1NFUlQodG91Y2hMaXN0
LT5sZW5ndGgoKSA9PSByZXRhcmdldGVkVGFyZ2V0TGlzdC5zaXplKCkpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdG91Y2hMaXN0LT5sZW5ndGgoKTsgKytpKQorICAgICAgICB0b3VjaExp
c3QtPml0ZW0oaSktPnNldFRhcmdldChyZXRhcmdldGVkVGFyZ2V0TGlzdFtpXS5nZXQoKSk7Cit9
CisKK2Jvb2wgVG91Y2hFdmVudENvbnRleHQ6OmlzVG91Y2hFdmVudENvbnRleHQoKSBjb25zdAor
eworICAgIHJldHVybiB0cnVlOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmgKaW5k
ZXggZmUxY2YwMjU1NjRkZWUzOGZmMWZlZGRhZmIzNGMyYTExNzBiNTNlMC4uNzhlZTZkM2YyNTdi
NjUzMjA1YjE4ZmExOTUxZDU4YTM5YjA2N2YwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQu
aApAQCAtMzUsNiArMzUsOSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFdmVudDsK
K2NsYXNzIFRvdWNoTGlzdDsKKwordHlwZWRlZiBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gUmV0YXJn
ZXRlZFRhcmdldExpc3Q7CiAKIGNsYXNzIEV2ZW50Q29udGV4dCB7CiBwdWJsaWM6CkBAIC00Nyw2
ICs1MCw3IEBAIHB1YmxpYzoKICAgICBib29sIGN1cnJlbnRUYXJnZXRTYW1lQXNUYXJnZXQoKSBj
b25zdCB7IHJldHVybiBtX2N1cnJlbnRUYXJnZXQuZ2V0KCkgPT0gbV90YXJnZXQuZ2V0KCk7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlTG9jYWxFdmVudHMoRXZlbnQqKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgaXNNb3VzZU9yRm9jdXNFdmVudENvbnRleHQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNUb3VjaEV2ZW50Q29udGV4dCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAjaWZu
ZGVmIE5ERUJVRwpAQCAtNzMsNiArNzcsMjUgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RXZlbnRU
YXJnZXQ+IG1fcmVsYXRlZFRhcmdldDsKIH07CiAKK2NsYXNzIFRvdWNoRXZlbnRDb250ZXh0IDog
cHVibGljIEV2ZW50Q29udGV4dCB7CitwdWJsaWM6CisgICAgVG91Y2hFdmVudENvbnRleHQoUGFz
c1JlZlB0cjxOb2RlPiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gY3VycmVudFRhcmdldCwgUGFz
c1JlZlB0cjxFdmVudFRhcmdldD4gdGFyZ2V0KTsKKyAgICB2aXJ0dWFsIH5Ub3VjaEV2ZW50Q29u
dGV4dCgpOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50KikgY29u
c3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGlzVG91Y2hFdmVudENvbnRleHQoKSBjb25z
dCBPVkVSUklERTsKKworICAgIHZvaWQgc2V0VG91Y2hlcyhjb25zdCBSZXRhcmdldGVkVGFyZ2V0
TGlzdCYgcmV0YXJnZXRlZFRhcmdldExpc3QpIHsgbV90b3VjaGVzID0gcmV0YXJnZXRlZFRhcmdl
dExpc3Q7IH0KKyAgICB2b2lkIHNldFRhcmdldFRvdWNoZXMoY29uc3QgUmV0YXJnZXRlZFRhcmdl
dExpc3QmIHJldGFyZ2V0ZWRUYXJnZXRMaXN0KSB7IG1fdGFyZ2V0VG91Y2hlcyA9IHJldGFyZ2V0
ZWRUYXJnZXRMaXN0OyB9CisgICAgdm9pZCBzZXRDaGFuZ2VkVG91Y2hlcyhjb25zdCBSZXRhcmdl
dGVkVGFyZ2V0TGlzdCYgcmV0YXJnZXRlZFRhcmdldExpc3QpIHsgbV9jaGFuZ2VkVG91Y2hlcyA9
IHJldGFyZ2V0ZWRUYXJnZXRMaXN0OyB9CisKK3ByaXZhdGU6CisgICAgUmV0YXJnZXRlZFRhcmdl
dExpc3QgbV90b3VjaGVzOworICAgIFJldGFyZ2V0ZWRUYXJnZXRMaXN0IG1fdGFyZ2V0VG91Y2hl
czsKKyAgICBSZXRhcmdldGVkVGFyZ2V0TGlzdCBtX2NoYW5nZWRUb3VjaGVzOworICAgIHZvaWQg
cmV0YXJnZXRUb3VjaExpc3QoVG91Y2hMaXN0KiwgY29uc3QgUmV0YXJnZXRlZFRhcmdldExpc3Qm
KSBjb25zdDsKK307CisKICNpZm5kZWYgTkRFQlVHCiBpbmxpbmUgYm9vbCBFdmVudENvbnRleHQ6
OmlzVW5yZWFjaGFibGVOb2RlKEV2ZW50VGFyZ2V0KiB0YXJnZXQpCiB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudERpc3BhdGNoZXIuY3BwCmluZGV4IGMzM2YwNmVjYjlhNTI1YzMyYjEwOWI1YTk1OWFh
YjA1YjI4NDgyNWYuLmU0OTc1MDIzNjhjYzk0ODAzMzJjMWQzMzc0MDVlNjIxNjNiNDY3YmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCkBAIC0zOSw2ICszOSw4IEBACiAj
aW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlNjb3BlZEV2ZW50UXVldWUuaCIKICNp
bmNsdWRlICJTaGFkb3dSb290LmgiCisjaW5jbHVkZSAiVG91Y2hFdmVudC5oIgorI2luY2x1ZGUg
IlRvdWNoTGlzdC5oIgogI2luY2x1ZGUgIldpbmRvd0V2ZW50Q29udGV4dC5oIgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudERpc3BhdGNoZXIuaAppbmRleCA3OTU0OTI5NGIzMzIxMjMxMGU2NjNjMGRkZTVmZmFk
Y2FjNzlhNzgwLi5lMDcyYTA4MjQ2MzY3YTkzMzBmNDcwMzg0ZmRmZjRiMTEzMjgzYzE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCkBAIC00Myw2ICs0Myw5IEBAIGNsYXNzIE5v
ZGU7CiBjbGFzcyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ7CiBjbGFzcyBQbGF0Zm9ybU1vdXNlRXZl
bnQ7CiBjbGFzcyBTaGFkb3dSb290OworY2xhc3MgVG91Y2g7CitjbGFzcyBUb3VjaEV2ZW50Owor
Y2xhc3MgVG91Y2hMaXN0OwogY2xhc3MgVHJlZVNjb3BlOwogY2xhc3MgV2luZG93RXZlbnRDb250
ZXh0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRSZXRhcmdldGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFJldGFyZ2V0ZXIuY3BwCmluZGV4IDkxNWRhNDcx
MjBiMGU4MjY1Njc1ZjJhZGE2YWRhYzkyZTVhNWNiYzIuLjY1NmM1MTA2MmM3ZDllZjBkNzAyYTc4
OTFjN2VjNGRhMzY5YzA3NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFJl
dGFyZ2V0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFJldGFyZ2V0ZXIuY3Bw
CkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiRm9jdXNFdmVudC5oIgogI2luY2x1ZGUgIk1v
dXNlRXZlbnQuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCisjaW5jbHVkZSAiVG91Y2hFdmVu
dC5oIgorI2luY2x1ZGUgIlRvdWNoTGlzdC5oIgogI2luY2x1ZGUgIlRyZWVTY29wZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMzMs
NiArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKwogc3RhdGljIGlubGluZSBib29s
IGluVGhlU2FtZVNjb3BlKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QsIEV2ZW50VGFyZ2V0KiB0YXJn
ZXQpCiB7CiAgICAgcmV0dXJuIHRhcmdldC0+dG9Ob2RlKCkgJiYgdGFyZ2V0LT50b05vZGUoKS0+
dHJlZVNjb3BlKCktPnJvb3ROb2RlKCkgPT0gc2hhZG93Um9vdDsKQEAgLTc3LDYgKzgwLDcgQEAg
dm9pZCBFdmVudFJldGFyZ2V0ZXI6OmNhbGN1bGF0ZUV2ZW50UGF0aChOb2RlKiBub2RlLCBFdmVu
dCogZXZlbnQsIEV2ZW50UGF0aCYgZXYKICAgICBib29sIGluRG9jdW1lbnQgPSBub2RlLT5pbkRv
Y3VtZW50KCk7CiAgICAgYm9vbCBpc1NWR0VsZW1lbnQgPSBub2RlLT5pc1NWR0VsZW1lbnQoKTsK
ICAgICBib29sIGlzTW91c2VPckZvY3VzRXZlbnQgPSBldmVudC0+aXNNb3VzZUV2ZW50KCkgfHwg
ZXZlbnQtPmlzRm9jdXNFdmVudCgpOworICAgIGJvb2wgaXNUb3VjaEV2ZW50ID0gZXZlbnQtPmlz
VG91Y2hFdmVudCgpOwogICAgIFZlY3RvcjxFdmVudFRhcmdldCosIDMyPiB0YXJnZXRTdGFjazsK
ICAgICBmb3IgKEV2ZW50UGF0aFdhbGtlciB3YWxrZXIobm9kZSk7IHdhbGtlci5ub2RlKCk7IHdh
bGtlci5tb3ZlVG9QYXJlbnQoKSkgewogICAgICAgICBOb2RlKiBub2RlID0gd2Fsa2VyLm5vZGUo
KTsKQEAgLTg2LDYgKzkwLDggQEAgdm9pZCBFdmVudFJldGFyZ2V0ZXI6OmNhbGN1bGF0ZUV2ZW50
UGF0aChOb2RlKiBub2RlLCBFdmVudCogZXZlbnQsIEV2ZW50UGF0aCYgZXYKICAgICAgICAgICAg
IHRhcmdldFN0YWNrLmFwcGVuZCh0YXJnZXRTdGFjay5sYXN0KCkpOwogICAgICAgICBpZiAoaXNN
b3VzZU9yRm9jdXNFdmVudCkKICAgICAgICAgICAgIGV2ZW50UGF0aC5hcHBlbmQoYWRvcHRQdHIo
bmV3IE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dChub2RlLCBldmVudFRhcmdldFJlc3BlY3RpbmdU
YXJnZXRSdWxlcyhub2RlKSwgdGFyZ2V0U3RhY2subGFzdCgpKSkpOworICAgICAgICBlbHNlIGlm
IChpc1RvdWNoRXZlbnQpCisgICAgICAgICAgICBldmVudFBhdGguYXBwZW5kKGFkb3B0UHRyKG5l
dyBUb3VjaEV2ZW50Q29udGV4dChub2RlLCBldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxl
cyhub2RlKSwgdGFyZ2V0U3RhY2subGFzdCgpKSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBldmVudFBhdGguYXBwZW5kKGFkb3B0UHRyKG5ldyBFdmVudENvbnRleHQobm9kZSwgZXZlbnRU
YXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMobm9kZSksIHRhcmdldFN0YWNrLmxhc3QoKSkpKTsK
ICAgICAgICAgaWYgKCFpbkRvY3VtZW50KQpAQCAtMTExLDYgKzExNyw2MiBAQCB2b2lkIEV2ZW50
UmV0YXJnZXRlcjo6YWRqdXN0Rm9yRm9jdXNFdmVudChOb2RlKiBub2RlLCBjb25zdCBGb2N1c0V2
ZW50JiBmb2N1c0V2ZQogICAgIGFkanVzdEZvclJlbGF0ZWRUYXJnZXQobm9kZSwgZm9jdXNFdmVu
dC5yZWxhdGVkVGFyZ2V0KCksIGV2ZW50UGF0aCk7CiB9CiAKK3ZvaWQgRXZlbnRSZXRhcmdldGVy
OjphZGp1c3RGb3JUb3VjaEV2ZW50KE5vZGUqIG5vZGUsIGNvbnN0IFRvdWNoRXZlbnQmIHRvdWNo
RXZlbnQsIEV2ZW50UGF0aCYgZXZlbnRQYXRoKQoreworICAgIFJldGFyZ2V0ZWRUYXJnZXRMaXN0
UGF0aCBhZGp1c3RlZFRvdWNoZXNBbmNlc3RvcnMgPSBhZGp1c3RUb3VjaExpc3Qobm9kZSwgKnRv
dWNoRXZlbnQudG91Y2hlcygpLCBldmVudFBhdGgpOworICAgIFJldGFyZ2V0ZWRUYXJnZXRMaXN0
UGF0aCBhZGp1c3RlZFRhcmdldFRvdWNoZXNBbmNlc3RvcnMgPSBhZGp1c3RUb3VjaExpc3Qobm9k
ZSwgKnRvdWNoRXZlbnQudGFyZ2V0VG91Y2hlcygpLCBldmVudFBhdGgpOworICAgIFJldGFyZ2V0
ZWRUYXJnZXRMaXN0UGF0aCBhZGp1c3RlZENoYW5nZWRUb3VjaGVzQW5jZXN0b3JzID0gYWRqdXN0
VG91Y2hMaXN0KG5vZGUsICp0b3VjaEV2ZW50LmNoYW5nZWRUb3VjaGVzKCksIGV2ZW50UGF0aCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBldmVudFBhdGguc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgQVNTRVJUKGV2ZW50UGF0aFtpXS0+aXNUb3VjaEV2ZW50Q29udGV4dCgpKTsKKyAgICAg
ICAgVG91Y2hFdmVudENvbnRleHQqIHRvdWNoRXZlbnRDb250ZXh0ID0gc3RhdGljX2Nhc3Q8VG91
Y2hFdmVudENvbnRleHQqPihldmVudFBhdGhbaV0uZ2V0KCkpOworICAgICAgICB0b3VjaEV2ZW50
Q29udGV4dC0+c2V0VG91Y2hlcyhhZGp1c3RlZFRvdWNoZXNBbmNlc3RvcnNbaV0pOworICAgICAg
ICB0b3VjaEV2ZW50Q29udGV4dC0+c2V0VGFyZ2V0VG91Y2hlcyhhZGp1c3RlZFRhcmdldFRvdWNo
ZXNBbmNlc3RvcnNbaV0pOworICAgICAgICB0b3VjaEV2ZW50Q29udGV4dC0+c2V0Q2hhbmdlZFRv
dWNoZXMoYWRqdXN0ZWRDaGFuZ2VkVG91Y2hlc0FuY2VzdG9yc1tpXSk7CisgICAgfQorfQorCitF
dmVudFJldGFyZ2V0ZXI6OlJldGFyZ2V0ZWRUYXJnZXRMaXN0UGF0aCBFdmVudFJldGFyZ2V0ZXI6
OmFkanVzdFRvdWNoTGlzdChjb25zdCBOb2RlKiBub2RlLCBjb25zdCBUb3VjaExpc3QmIHRvdWNo
TGlzdCwgY29uc3QgRXZlbnRQYXRoJiBldmVudFBhdGgpCit7CisgICAgUmV0YXJnZXRlZFRhcmdl
dExpc3RQYXRoIGFkanVzdGVkVG91Y2hMaXN0QW5jZXN0b3JzKGV2ZW50UGF0aC5zaXplKCkpOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGk8IHRvdWNoTGlzdC5sZW5ndGgoKTsgKytpKSB7Cisg
ICAgICAgIEFkanVzdGVkTm9kZXMgYWRqdXN0ZWROb2RlcyA9IGFkanVzdFRvdWNoUG9pbnQobm9k
ZSwgKnRvdWNoTGlzdC5pdGVtKGkpLCBldmVudFBhdGgpOworICAgICAgICBBU1NFUlQoYWRqdXN0
ZWROb2Rlcy5zaXplKCkgPT0gZXZlbnRQYXRoLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90
IGogPSAwOyBqIDwgYWRqdXN0ZWROb2Rlcy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgYWRq
dXN0ZWRUb3VjaExpc3RBbmNlc3RvcnNbal0uYXBwZW5kKGFkanVzdGVkTm9kZXNbal0uZ2V0KCkp
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBhZGp1c3RlZFRvdWNoTGlzdEFuY2VzdG9y
czsKK30KKworRXZlbnRSZXRhcmdldGVyOjpBZGp1c3RlZE5vZGVzIEV2ZW50UmV0YXJnZXRlcjo6
YWRqdXN0VG91Y2hQb2ludChjb25zdCBOb2RlKiBub2RlLCBjb25zdCBUb3VjaCYgdG91Y2gsIGNv
bnN0IEV2ZW50UGF0aCYgZXZlbnRQYXRoKQoreworICAgIEFkanVzdGVkTm9kZXMgYWRqdXN0ZWRO
b2RlczsKKyAgICBjYWxjdWxhdGVBZGp1c3RlZE5vZGVzV2l0aG91dFNocmluayhub2RlLCB0b3Vj
aC50YXJnZXQoKS0+dG9Ob2RlKCksIGV2ZW50UGF0aCwgYWRqdXN0ZWROb2Rlcyk7CisgICAgcmV0
dXJuIGFkanVzdGVkTm9kZXM7Cit9CisKKy8vIEZJWE1FOiBTaGFyZSBjb2RlIHdpdGggY2FsY3Vs
YXRlQWRqdXN0ZWROb2RlcygpLgordm9pZCBFdmVudFJldGFyZ2V0ZXI6OmNhbGN1bGF0ZUFkanVz
dGVkTm9kZXNXaXRob3V0U2hyaW5rKGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IE5vZGUqIHJlbGF0
ZWROb2RlLCBjb25zdCBFdmVudFBhdGgmIGV2ZW50UGF0aCwgQWRqdXN0ZWROb2RlcyYgYWRqdXN0
ZWROb2RlcykKK3sKKyAgICBSZWxhdGVkTm9kZU1hcCByZWxhdGVkTm9kZU1hcDsKKyAgICBidWls
ZFJlbGF0ZWROb2RlTWFwKHJlbGF0ZWROb2RlLCByZWxhdGVkTm9kZU1hcCk7CisKKyAgICBUcmVl
U2NvcGUqIGxhc3RUcmVlU2NvcGUgPSAwOworICAgIE5vZGUqIGFkanVzdGVkTm9kZSA9IDA7Cisg
ICAgZm9yIChFdmVudFBhdGg6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBldmVudFBhdGguYmVnaW4o
KTsgaXRlciA8IGV2ZW50UGF0aC5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFRyZWVTY29wZSog
c2NvcGUgPSAoKml0ZXIpLT5ub2RlKCktPnRyZWVTY29wZSgpOworICAgICAgICBpZiAoc2NvcGUg
PT0gbGFzdFRyZWVTY29wZSkgeworICAgICAgICAgICAgLy8gUmUtdXNlIHRoZSBwcmV2aW91cyBh
ZGp1c3RlZFJlbGF0ZWRUYXJnZXQgaWYgdHJlZVNjb3BlIGRvZXMgbm90IGNoYW5nZS4gSnVzdCBm
b3IgdGhlIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4KKyAgICAgICAgICAgIGFkanVzdGVkTm9k
ZXMuYXBwZW5kKGFkanVzdGVkTm9kZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBh
ZGp1c3RlZE5vZGUgPSBmaW5kUmVsYXRlZE5vZGUoc2NvcGUsIHJlbGF0ZWROb2RlTWFwKTsKKyAg
ICAgICAgICAgIGFkanVzdGVkTm9kZXMuYXBwZW5kKGFkanVzdGVkTm9kZSk7CisgICAgICAgIH0K
KyAgICAgICAgbGFzdFRyZWVTY29wZSA9IHNjb3BlOworICAgIH0KK30KKwogdm9pZCBFdmVudFJl
dGFyZ2V0ZXI6OmFkanVzdEZvclJlbGF0ZWRUYXJnZXQoTm9kZSogbm9kZSwgRXZlbnRUYXJnZXQq
IHJlbGF0ZWRUYXJnZXQsIEV2ZW50UGF0aCYgZXZlbnRQYXRoKQogewogICAgIGlmICghbm9kZSkK
QEAgLTE2NCw3ICsyMjYsNyBAQCB2b2lkIEV2ZW50UmV0YXJnZXRlcjo6Y2FsY3VsYXRlQWRqdXN0
ZWROb2RlcyhOb2RlKiBub2RlLCBOb2RlKiByZWxhdGVkTm9kZSwgRXZlbgogICAgIH0KIH0KIAot
dm9pZCBFdmVudFJldGFyZ2V0ZXI6OmJ1aWxkUmVsYXRlZE5vZGVNYXAoTm9kZSogcmVsYXRlZE5v
ZGUsIFJlbGF0ZWROb2RlTWFwJiByZWxhdGVkTm9kZU1hcCkKK3ZvaWQgRXZlbnRSZXRhcmdldGVy
OjpidWlsZFJlbGF0ZWROb2RlTWFwKGNvbnN0IE5vZGUqIHJlbGF0ZWROb2RlLCBSZWxhdGVkTm9k
ZU1hcCYgcmVsYXRlZE5vZGVNYXApCiB7CiAgICAgVmVjdG9yPE5vZGUqLCAzMj4gcmVsYXRlZE5v
ZGVTdGFjazsKICAgICBUcmVlU2NvcGUqIGxhc3RUcmVlU2NvcGUgPSAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UmV0YXJnZXRlci5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50UmV0YXJnZXRlci5oCmluZGV4IGM3MTFhOTZlODMyNmJlNTAzNjFlNjFkMzhjNTM2YWQ4
NzgzMTgxMzYuLmNhZTdlZjA3YjI5OWJiY2JiNDRiNDM1NGY0ZTM5YTBmMGNjY2QyMWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFJldGFyZ2V0ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRSZXRhcmdldGVyLmgKQEAgLTM5LDYgKzM5LDcgQEAgY2xhc3MgRXZl
bnRUYXJnZXQ7CiBjbGFzcyBGb2N1c0V2ZW50OwogY2xhc3MgTW91c2VFdmVudDsKIGNsYXNzIE5v
ZGU7CitjbGFzcyBUb3VjaEV2ZW50OwogY2xhc3MgVHJlZVNjb3BlOwogCiBlbnVtIEV2ZW50RGlz
cGF0Y2hCZWhhdmlvciB7CkBAIC00OCw5ICs0OSwxNCBAQCBlbnVtIEV2ZW50RGlzcGF0Y2hCZWhh
dmlvciB7CiAKIGNsYXNzIEV2ZW50UmV0YXJnZXRlciB7CiBwdWJsaWM6CisgICAgdHlwZWRlZiBW
ZWN0b3I8UmV0YXJnZXRlZFRhcmdldExpc3Q+IFJldGFyZ2V0ZWRUYXJnZXRMaXN0UGF0aDsKKwog
ICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZUV2ZW50UGF0aChOb2RlKiwgRXZlbnQqLCBFdmVudFBh
dGgmKTsKICAgICBzdGF0aWMgdm9pZCBhZGp1c3RGb3JNb3VzZUV2ZW50KE5vZGUqLCBjb25zdCBN
b3VzZUV2ZW50JiwgRXZlbnRQYXRoJik7CiAgICAgc3RhdGljIHZvaWQgYWRqdXN0Rm9yRm9jdXNF
dmVudChOb2RlKiwgY29uc3QgRm9jdXNFdmVudCYsIEV2ZW50UGF0aCYpOworCisgICAgc3RhdGlj
IHZvaWQgYWRqdXN0Rm9yVG91Y2hFdmVudChOb2RlKiwgY29uc3QgVG91Y2hFdmVudCYsIEV2ZW50
UGF0aCYpOworCiAgICAgc3RhdGljIEV2ZW50VGFyZ2V0KiBldmVudFRhcmdldFJlc3BlY3RpbmdU
YXJnZXRSdWxlcyhOb2RlKiByZWZlcmVuY2VOb2RlKTsKIAogcHJpdmF0ZToKQEAgLTU5LDggKzY1
LDEzIEBAIHByaXZhdGU6CiAKICAgICBzdGF0aWMgdm9pZCBhZGp1c3RGb3JSZWxhdGVkVGFyZ2V0
KE5vZGUqLCBFdmVudFRhcmdldCogcmVsYXRlZFRhcmdldCwgRXZlbnRQYXRoJik7CiAgICAgc3Rh
dGljIHZvaWQgY2FsY3VsYXRlQWRqdXN0ZWROb2RlcyhOb2RlKiwgTm9kZSogcmVsYXRlZE5vZGUs
IEV2ZW50UGF0aCYsIEFkanVzdGVkTm9kZXMmKTsKLSAgICBzdGF0aWMgdm9pZCBidWlsZFJlbGF0
ZWROb2RlTWFwKE5vZGUqLCBSZWxhdGVkTm9kZU1hcCYpOworICAgIHN0YXRpYyB2b2lkIGJ1aWxk
UmVsYXRlZE5vZGVNYXAoY29uc3QgTm9kZSosIFJlbGF0ZWROb2RlTWFwJik7CiAgICAgc3RhdGlj
IE5vZGUqIGZpbmRSZWxhdGVkTm9kZShUcmVlU2NvcGUqLCBSZWxhdGVkTm9kZU1hcCYpOworCisg
ICAgc3RhdGljIFJldGFyZ2V0ZWRUYXJnZXRMaXN0UGF0aCBhZGp1c3RUb3VjaExpc3QoY29uc3Qg
Tm9kZSosIGNvbnN0IFRvdWNoTGlzdCYsIGNvbnN0IEV2ZW50UGF0aCYpOworICAgIHN0YXRpYyBB
ZGp1c3RlZE5vZGVzIGFkanVzdFRvdWNoUG9pbnQoY29uc3QgTm9kZSosIGNvbnN0IFRvdWNoJiwg
Y29uc3QgRXZlbnRQYXRoJik7CisKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVBZGp1c3RlZE5v
ZGVzV2l0aG91dFNocmluayhjb25zdCBOb2RlKiwgY29uc3QgTm9kZSogcmVsYXRlZE5vZGUsIGNv
bnN0IEV2ZW50UGF0aCYsIEFkanVzdGVkTm9kZXMmKTsKIH07CiAKIGlubGluZSBFdmVudFRhcmdl
dCogRXZlbnRSZXRhcmdldGVyOjpldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcyhOb2Rl
KiByZWZlcmVuY2VOb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGVjMDljNTkzYzRhNjhiMzlmMWJk
Yzg3ZWM4NDFlYTlhZDQ4MjQ4NGIuLmJmNzQ5NzEyMmJhYTM3YjE2OGUyY2EzMjExZDM3YTVlODAz
YTdkYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTEwMSw2ICsxMDEsNyBAQAogI2luY2x1ZGUgIlRl
bXBsYXRlQ29udGVudERvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5j
bHVkZSAiVGV4dEV2ZW50LmgiCisjaW5jbHVkZSAiVG91Y2hFdmVudC5oIgogI2luY2x1ZGUgIlRy
ZWVTY29wZUFkb3B0ZXIuaCIKICNpbmNsdWRlICJVSUV2ZW50LmgiCiAjaW5jbHVkZSAiVUlFdmVu
dFdpdGhLZXlTdGF0ZS5oIgpAQCAtMjM2OSw2ICsyMzcwLDkgQEAgYm9vbCBOb2RlOjpkaXNwYXRj
aEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogewogICAgIGlmIChldmVudC0+aXNNb3Vz
ZUV2ZW50KCkpCiAgICAgICAgIHJldHVybiBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQo
dGhpcywgTW91c2VFdmVudERpc3BhdGNoTWVkaWF0b3I6OmNyZWF0ZShhZG9wdFJlZih0b01vdXNl
RXZlbnQoZXZlbnQubGVha1JlZigpKSksIE1vdXNlRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpTeW50
aGV0aWNNb3VzZUV2ZW50KSk7CisgICAgIGlmIChldmVudC0+aXNUb3VjaEV2ZW50KCkpCisgICAg
ICAgICByZXR1cm4gZGlzcGF0Y2hUb3VjaEV2ZW50KGFkb3B0UmVmKHRvVG91Y2hFdmVudChldmVu
dC5sZWFrUmVmKCkpKSk7CisKICAgICByZXR1cm4gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2
ZW50KHRoaXMsIEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6Y3JlYXRlKGV2ZW50KSk7CiB9CiAKQEAg
LTI0MjksNiArMjQzMywxMyBAQCBib29sIE5vZGU6OmRpc3BhdGNoR2VzdHVyZUV2ZW50KGNvbnN0
IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBldmVudCkKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFRP
VUNIX0VWRU5UUykKK2Jvb2wgTm9kZTo6ZGlzcGF0Y2hUb3VjaEV2ZW50KFBhc3NSZWZQdHI8VG91
Y2hFdmVudD4gZXZlbnQpCit7CisgICAgcmV0dXJuIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hF
dmVudCh0aGlzLCBUb3VjaEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6Y3JlYXRlKGV2ZW50KSk7Cit9
CisjZW5kaWYKKwogdm9pZCBOb2RlOjpkaXNwYXRjaFNpbXVsYXRlZENsaWNrKEV2ZW50KiB1bmRl
cmx5aW5nRXZlbnQsIFNpbXVsYXRlZENsaWNrTW91c2VFdmVudE9wdGlvbnMgZXZlbnRPcHRpb25z
LCBTaW11bGF0ZWRDbGlja1Zpc3VhbE9wdGlvbnMgdmlzdWFsT3B0aW9ucykKIHsKICAgICBFdmVu
dERpc3BhdGNoZXI6OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2sodGhpcywgdW5kZXJseWluZ0V2ZW50
LCBldmVudE9wdGlvbnMsIHZpc3VhbE9wdGlvbnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggYzkxNzdiYTkz
YjQxNWY2NjkzY2JiZGUzNjQxZmE1NjA3ZDNmOTRlOS4uODkwYWY3MzQ0ODkzNjViYWVjNjlhMGVi
NWZiNDA2ZTI4NjhhZjUwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC05Miw2ICs5MiwxMSBAQCBjbGFzcyBU
YWdOb2RlTGlzdDsKIGNsYXNzIFBsYXRmb3JtR2VzdHVyZUV2ZW50OwogI2VuZGlmCiAKKyNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQorY2xhc3MgVG91Y2hFdmVudDsKKyNlbmRpZgorCisKICNpZiBF
TkFCTEUoTUlDUk9EQVRBKQogY2xhc3MgSFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uOwogY2xhc3Mg
UHJvcGVydHlOb2RlTGlzdDsKQEAgLTYzOCw2ICs2NDMsMTAgQEAgcHVibGljOgogI2lmIEVOQUJM
RShHRVNUVVJFX0VWRU5UUykKICAgICBib29sIGRpc3BhdGNoR2VzdHVyZUV2ZW50KGNvbnN0IFBs
YXRmb3JtR2VzdHVyZUV2ZW50Jik7CiAjZW5kaWYKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQor
ICAgIGJvb2wgZGlzcGF0Y2hUb3VjaEV2ZW50KFBhc3NSZWZQdHI8VG91Y2hFdmVudD4pOworI2Vu
ZGlmCisKICAgICB2b2lkIGRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soRXZlbnQqIHVuZGVybHlpbmdF
dmVudCwgU2ltdWxhdGVkQ2xpY2tNb3VzZUV2ZW50T3B0aW9ucyA9IFNlbmROb0V2ZW50cywgU2lt
dWxhdGVkQ2xpY2tWaXN1YWxPcHRpb25zID0gU2hvd1ByZXNzZWRMb29rKTsKICAgICBib29sIGRp
c3BhdGNoQmVmb3JlTG9hZEV2ZW50KGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vVG91
Y2guaAppbmRleCA2NjgyNWY1ZTM4M2YzNDA1ZTk3ZmYyZmIwMWFhZGU4ZDJhY2EwY2E4Li45ZjA4
YmFhODQwMmMxMzYxMmQxYmJmYWM0OGE1NGMxZWJmODc5NGIwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vVG91Y2guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2guaApAQCAt
NjIsNiArNjIsOCBAQCBwdWJsaWM6CiAgICAgZmxvYXQgd2Via2l0Rm9yY2UoKSBjb25zdCB7IHJl
dHVybiBtX2ZvcmNlOyB9CiAgICAgY29uc3QgTGF5b3V0UG9pbnQmIGFic29sdXRlTG9jYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlTG9jYXRpb247IH0KIAorICAgIHZvaWQgc2V0VGFy
Z2V0KEV2ZW50VGFyZ2V0KiB0YXJnZXQpIHsgbV90YXJnZXQgPSB0YXJnZXQ7IH0KKwogcHJpdmF0
ZToKICAgICBUb3VjaChGcmFtZSogZnJhbWUsIEV2ZW50VGFyZ2V0KiB0YXJnZXQsIHVuc2lnbmVk
IGlkZW50aWZpZXIsCiAgICAgICAgICAgICBpbnQgc2NyZWVuWCwgaW50IHNjcmVlblksIGludCBw
YWdlWCwgaW50IHBhZ2VZLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoRXZl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoRXZlbnQuY3BwCmluZGV4IGE1OGYxZGNj
OWUyMzhlYmVhNDYyY2ZhNWI2NTk0NzZlMWI2MDM2YjMuLjVmNWM2NTE2MGQ5MjNmZTNkZWVjZTNi
NDMyMmQ0NjQxYzMyZGY1MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaEV2
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2hFdmVudC5jcHAKQEAgLTMwLDYg
KzMwLDEwIEBACiAKICNpbmNsdWRlICJUb3VjaEV2ZW50LmgiCiAKKyNpbmNsdWRlICJNeURlYnVn
V2ViS2l0LmgiCisKKyNpbmNsdWRlICJFdmVudERpc3BhdGNoZXIuaCIKKyNpbmNsdWRlICJFdmVu
dFJldGFyZ2V0ZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiVG91Y2hM
aXN0LmgiCiAKQEAgLTk5LDYgKzEwMywzMCBAQCBib29sIFRvdWNoRXZlbnQ6OmlzVG91Y2hFdmVu
dCgpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK1Bhc3NSZWZQdHI8VG91Y2hFdmVudERp
c3BhdGNoTWVkaWF0b3I+IFRvdWNoRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpjcmVhdGUoUGFzc1Jl
ZlB0cjxUb3VjaEV2ZW50PiB0b3VjaEV2ZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
VG91Y2hFdmVudERpc3BhdGNoTWVkaWF0b3IodG91Y2hFdmVudCkpOworfQorCitUb3VjaEV2ZW50
RGlzcGF0Y2hNZWRpYXRvcjo6VG91Y2hFdmVudERpc3BhdGNoTWVkaWF0b3IoUGFzc1JlZlB0cjxU
b3VjaEV2ZW50PiB0b3VjaEV2ZW50KQorICAgIDogRXZlbnREaXNwYXRjaE1lZGlhdG9yKHRvdWNo
RXZlbnQpCit7Cit9CisKK1RvdWNoRXZlbnQqIFRvdWNoRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpl
dmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRvdWNoRXZlbnQqPihFdmVu
dERpc3BhdGNoTWVkaWF0b3I6OmV2ZW50KCkpOworfQorCitib29sIFRvdWNoRXZlbnREaXNwYXRj
aE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KEV2ZW50RGlzcGF0Y2hlciogZGlzcGF0Y2hlcikgY29u
c3QKK3sKKy8vICAgIEdMT0dfRU5URVI7CisvLyAgICBHTE9HIDw8ICJCZWZvcmUgYWRqdXN0ICIg
PDwgZGlzcGF0Y2hlci0+ZXZlbnRQYXRoKCk7CisgICAgRXZlbnRSZXRhcmdldGVyOjphZGp1c3RG
b3JUb3VjaEV2ZW50KGRpc3BhdGNoZXItPm5vZGUoKSwgKmV2ZW50KCksIGRpc3BhdGNoZXItPmV2
ZW50UGF0aCgpKTsKKyAgICAvLyBHTE9HIDw8ICJBZnRlciBhZGp1c3QgIiA8PCBkaXNwYXRjaGVy
LT5ldmVudFBhdGgoKTsKKyAgICByZXR1cm4gZGlzcGF0Y2hlci0+ZGlzcGF0Y2goKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFRPVUNIX0VWRU5UUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaEV2ZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vVG91Y2hFdmVudC5oCmluZGV4IGIyZTViMmVlMzQ2YmQ4MDA3NTJkYjE5ZDZlODI4
MTQ1MDNjODRjNzcuLjI0ODE3YWI1OTY5MzNkZDliNjliZTQ4ZjQ4OGQ0NGE4ZTQyNDE3NjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaEV2ZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL1RvdWNoRXZlbnQuaApAQCAtMjksNiArMjksNyBAQAogCiAjaWYgRU5BQkxFKFRP
VUNIX0VWRU5UUykKIAorI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hNZWRpYXRvci5oIgogI2luY2x1
ZGUgIk1vdXNlUmVsYXRlZEV2ZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTkwLDYg
KzkxLDIyIEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKK2NsYXNzIFRvdWNoRXZlbnREaXNwYXRj
aE1lZGlhdG9yIDogcHVibGljIEV2ZW50RGlzcGF0Y2hNZWRpYXRvciB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8VG91Y2hFdmVudERpc3BhdGNoTWVkaWF0b3I+IGNyZWF0ZShQYXNz
UmVmUHRyPFRvdWNoRXZlbnQ+KTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBUb3VjaEV2ZW50
RGlzcGF0Y2hNZWRpYXRvcihQYXNzUmVmUHRyPFRvdWNoRXZlbnQ+KTsKKyAgICBUb3VjaEV2ZW50
KiBldmVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50RGlz
cGF0Y2hlciopIGNvbnN0IE9WRVJSSURFOworfTsKKworaW5saW5lIFRvdWNoRXZlbnQqIHRvVG91
Y2hFdmVudChFdmVudCogZXZlbnQpCit7CisgICAgQVNTRVJUKGV2ZW50ICYmIGV2ZW50LT5pc1Rv
dWNoRXZlbnQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRvdWNoRXZlbnQqPihldmVudCk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShUT1VDSF9F
VkVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2hMaXN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ub3VjaExpc3QuY3BwCmluZGV4IDQxNjdlNDJlNmRmZDBmY2M4ZGIy
N2NiODlkM2RkZThkOGVlNGE5ZjkuLjVlNDJiN2Y3ZjczYTQ0OWY3MGIzZTJlMjRmMjc3MzU4YjEw
YTc3YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaExpc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaExpc3QuY3BwCkBAIC0zOCw2ICszOCwxNCBAQCBUb3Vj
aCogVG91Y2hMaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4KQogICAgIHJldHVybiBtX3ZhbHVlc1tp
bmRleF0uZ2V0KCk7CiB9CiAKKy8vIEZJWE1FKGhheWF0byk6IG1lcmdlIG5vbi1jb25zdCBhbmQg
Y29uc3QKK2NvbnN0IFRvdWNoKiBUb3VjaExpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0
Cit7CisgICAgaWYgKGluZGV4ID49IG1fdmFsdWVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIG1fdmFsdWVzW2luZGV4XS5nZXQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaExp
c3QuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaExpc3QuaAppbmRleCAyNTQ2OTU1NzFlZTA4
YmIxNGM1N2JmZTk1ZWFkZGM3OGZmOTU2YWM2Li42MzliNzNjZTYzOTcxM2VhMTI0OTA1YTI2ODJi
MjdmNGVkNDVkYjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2hMaXN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoTGlzdC5oCkBAIC00NCw2ICs0NCw3IEBAIHB1
YmxpYzoKICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXpl
KCk7IH0KIAogICAgIFRvdWNoKiBpdGVtKHVuc2lnbmVkKTsKKyAgICBjb25zdCBUb3VjaCogaXRl
bSh1bnNpZ25lZCkgY29uc3Q7CiAKICAgICB2b2lkIGFwcGVuZChjb25zdCBQYXNzUmVmUHRyPFRv
dWNoPiB0b3VjaCkgeyBtX3ZhbHVlcy5hcHBlbmQodG91Y2gpOyB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcAppbmRleCBiMTI3YWU3YzIyNzA5NWUyOTViYTRmNzdmYTBmNzRjMjQ5
MzI1ODViLi42MzVmN2Y5ODEwODc3NTFkMjk3ZmYwODk1ZWJkZDJlZTMyMGI1NWU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0zNzgwLDcgKzM3ODAsNiBAQCBIaXRUZXN0
UmVzdWx0IEV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3VsdEluRnJhbWUoRnJhbWUqIGZyYW1lLCBj
b25zdCBMYXlvdXRQb2ludAogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAg
ZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpLT5oaXRUZXN0KEhpdFRlc3RSZXF1ZXN0KGhpdFR5cGUp
LCByZXN1bHQpOwotICAgIHJlc3VsdC5zZXRUb05vblNoYWRvd0FuY2VzdG9yKCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIApAQCAtMzkzMSwxMCArMzkzMCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVy
OjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgZXZlbnQpCiAgICAg
ICAgIGludCBhZGp1c3RlZFBhZ2VYID0gbHJvdW5kZihwYWdlUG9pbnQueCgpIC8gc2NhbGVGYWN0
b3IpOwogICAgICAgICBpbnQgYWRqdXN0ZWRQYWdlWSA9IGxyb3VuZGYocGFnZVBvaW50LnkoKSAv
IHNjYWxlRmFjdG9yKTsKIAotICAgICAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiB0YWtpbmcgc2hh
ZG93IGFuY2VzdG9yLCBldmVudCByZXRhcmdldHRpbmcgYWxnb3JpdGhtIHNob3VsZCBydW4uCi0g
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc4MDAK
LSAgICAgICAgRXZlbnRUYXJnZXQqIGFkanVzdGVkVG91Y2hUYXJnZXQgPSBkb2MtPmFuY2VzdG9y
SW5UaGlzU2NvcGUodG91Y2hUYXJnZXQuZ2V0KCktPnRvTm9kZSgpKTsKLSAgICAgICAgUmVmUHRy
PFRvdWNoPiB0b3VjaCA9IFRvdWNoOjpjcmVhdGUodGFyZ2V0RnJhbWUsIGFkanVzdGVkVG91Y2hU
YXJnZXQsIHBvaW50LmlkKCksCisgICAgICAgIFJlZlB0cjxUb3VjaD4gdG91Y2ggPSBUb3VjaDo6
Y3JlYXRlKHRhcmdldEZyYW1lLCB0b3VjaFRhcmdldC5nZXQoKSwgcG9pbnQuaWQoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQuc2NyZWVuUG9zKCku
eCgpLCBwb2ludC5zY3JlZW5Qb3MoKS55KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFkanVzdGVkUGFnZVgsIGFkanVzdGVkUGFnZVksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50LnJhZGl1c1goKSwgcG9pbnQu
cmFkaXVzWSgpLCBwb2ludC5yb3RhdGlvbkFuZ2xlKCksIHBvaW50LmZvcmNlKCkpOwpAQCAtMzk5
MSw3ICszOTg3LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3Qg
UGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCkKICAgICAgICAgICAgICAgICBUb3VjaEV2ZW50Ojpj
cmVhdGUoZWZmZWN0aXZlVG91Y2hlcy5nZXQoKSwgdGFyZ2V0VG91Y2hlcy5nZXQoKSwgY2hhbmdl
ZFRvdWNoZXNbc3RhdGVdLm1fdG91Y2hlcy5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGVOYW1lLCB0b3VjaEV2ZW50VGFyZ2V0LT50b05vZGUoKS0+ZG9jdW1l
bnQoKS0+ZGVmYXVsdFZpZXcoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwgMCwgMCwgMCwgZXZlbnQuY3RybEtleSgpLCBldmVudC5hbHRLZXkoKSwgZXZlbnQuc2hpZnRL
ZXkoKSwgZXZlbnQubWV0YUtleSgpKTsKLSAgICAgICAgICAgIHRvdWNoRXZlbnRUYXJnZXQtPmRp
c3BhdGNoRXZlbnQodG91Y2hFdmVudC5nZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAg
ICAgICB0b3VjaEV2ZW50VGFyZ2V0LT50b05vZGUoKS0+ZGlzcGF0Y2hUb3VjaEV2ZW50KHRvdWNo
RXZlbnQuZ2V0KCkpOwogICAgICAgICAgICAgc3dhbGxvd2VkRXZlbnQgPSBzd2FsbG93ZWRFdmVu
dCB8fCB0b3VjaEV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkgfHwgdG91Y2hFdmVudC0+ZGVmYXVs
dEhhbmRsZWQoKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0No
YW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBmNDIwM2EwZmNlMjc4OTA2NTJh
OTY3MzY5OGM3ZDZhMzdmMzg2YWYxLi4zMDdiODE2MjNjMDBkN2M1MzQyMWE4MjZhZGVlMjY4Y2Y2
YTBmNzk4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTMtMDItMjIgIEhheWF0byBJdG8gIDxo
YXlhdG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtTaGFkb3ddIFJldGFyZ2V0IFRvdWNoLnRh
cmdldCBmb3IgVG91Y2hFdmVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA3ODAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvcmVzb3VyY2VzL2V2ZW50LWRpc3BhdGNoaW5n
LmpzOgorICAgICAgICAocmVjb3JkRXZlbnQpOgorICAgICAgICAoZHVtcFRvdWNoTGlzdCk6Cisg
ICAgICAgIChzb3J0RGlzcGF0Y2hlZEV2ZW50KToKKyAgICAgICAgKHNob3dTYW5kYm94VHJlZSk6
CisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hpbmct
ZGlzdHJpYnV0ZWQtdGV4dC1ub2RlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2RvbS9z
aGFkb3cvc2hhZG93LWRvbS1ldmVudC1kaXNwYXRjaGluZy1kaXN0cmlidXRlZC10ZXh0LW5vZGUu
aHRtbDoKKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LWRvbS1ldmVudC1kaXNwYXRj
aGluZy10ZXh0LW5vZGUtaW4tc2hhZG93LXJvb3QtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZh
c3QvZG9tL3NoYWRvdy90b3VjaC1ldmVudC1yZXRhcmdldGluZy1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy90b3VjaC1ldmVudC1yZXRhcmdldGluZy5odG1s
OiBBZGRlZC4KKwogMjAxMy0wMi0yMSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgog
CiAgICAgICAgIFRocmVhZGVkIEhUTUwgUGFyc2VyIGZhaWxzIGZhc3QvZG9tL0RvY3VtZW50L3Jl
YWR5c3RhdGUuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3Jl
c291cmNlcy9ldmVudC1kaXNwYXRjaGluZy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRv
dy9yZXNvdXJjZXMvZXZlbnQtZGlzcGF0Y2hpbmcuanMKaW5kZXggYmVkM2YwNjNmMzMzZWJhYTA4
ZTg5MjFiZmU3NTVhOTIzMjk5NzEzNy4uYTNiNzgyZmQwMGZmYzBhNGE4MTUwOTExZTUwMTQ2NjAy
ZTMyZjZjZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3Jlc291cmNl
cy9ldmVudC1kaXNwYXRjaGluZy5qcworKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cv
cmVzb3VyY2VzL2V2ZW50LWRpc3BhdGNoaW5nLmpzCkBAIC02OCw5ICs2OCw5IEBAIGZ1bmN0aW9u
IGRpc3BhdGNoZWRFdmVudChldmVudFR5cGUpCiAKIGZ1bmN0aW9uIHJlY29yZEV2ZW50KGV2ZW50
KQogewotICAgIHZhciBldmVudFR5cGUgPSBldmVudC50eXBlCisgICAgdmFyIGV2ZW50VHlwZSA9
IGV2ZW50LnR5cGU7CiAgICAgaWYgKCFldmVudFJlY29yZHNbZXZlbnRUeXBlXSkgewotICAgICAg
ICBldmVudFJlY29yZHNbZXZlbnRUeXBlXSA9IFtdCisgICAgICAgIGV2ZW50UmVjb3Jkc1tldmVu
dFR5cGVdID0gW107CiAgICAgfQogICAgIHZhciBldmVudFN0cmluZyA9ICcnOwogICAgIGlmIChl
dmVudC5jdXJyZW50VGFyZ2V0KQpAQCAtNzksNiArNzksMTIgQEAgZnVuY3Rpb24gcmVjb3JkRXZl
bnQoZXZlbnQpCiAgICAgICAgIGV2ZW50U3RyaW5nICs9ICcgKHRhcmdldDogJyArIGV2ZW50LnRh
cmdldC5pZCArICcpJzsKICAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCkKICAgICAgICAgZXZl
bnRTdHJpbmcgKz0gJyAocmVsYXRlZDogJyArIGV2ZW50LnJlbGF0ZWRUYXJnZXQuaWQgKyAnKSc7
CisgICAgaWYgKGV2ZW50LnRvdWNoZXMpCisgICAgICAgIGV2ZW50U3RyaW5nICs9ICcgKHRvdWNo
ZXM6ICcgKyBkdW1wVG91Y2hMaXN0KGV2ZW50LnRvdWNoZXMpICsgJyknOworICAgIGlmIChldmVu
dC50YXJnZXRUb3VjaGVzKQorICAgICAgICBldmVudFN0cmluZyArPSAnICh0YXJnZXRUb3VjaGVz
OiAnICsgZHVtcFRvdWNoTGlzdChldmVudC50YXJnZXRUb3VjaGVzKSArICcpJzsKKyAgICBpZiAo
ZXZlbnQuY2hhbmdlZFRvdWNoZXMpCisgICAgICAgIGV2ZW50U3RyaW5nICs9ICcgKGNoYW5nZWRU
b3VjaGVzOiAnICsgZHVtcFRvdWNoTGlzdChldmVudC5jaGFuZ2VkVG91Y2hlcykgKyAnKSc7CiAg
ICAgaWYgKGV2ZW50LmV2ZW50UGhhc2UgPT0gMSkKICAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyhj
YXB0dXJpbmcgcGhhc2UpJzsKICAgICBpZiAoZXZlbnQudGFyZ2V0ICYmIGV2ZW50LmN1cnJlbnRU
YXJnZXQgJiYgZXZlbnQudGFyZ2V0LmlkID09IGV2ZW50LmN1cnJlbnRUYXJnZXQuaWQpCkBAIC05
Niw2ICsxMDIsMjIgQEAgZnVuY3Rpb24gZHVtcE5vZGUobm9kZSkKICAgICByZXR1cm4gb3V0cHV0
OwogfQogCitmdW5jdGlvbiBkdW1wVG91Y2hMaXN0KHRvdWNoZXMpIHsKKyAgICB2YXIgaWRzID0g
W107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3VjaGVzLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgIGlmICh0b3VjaGVzLml0ZW0oaSkudGFyZ2V0ICYmIHRvdWNoZXMuaXRlbShpKS50YXJnZXQu
aWQpCisgICAgICAgICAgICBpZHMucHVzaCh0b3VjaGVzLml0ZW0oaSkudGFyZ2V0LmlkKTsKKyAg
ICB9CisgICAgaWRzLnNvcnQoKTsKKyAgICB2YXIgcmVzdWx0ID0gJyc7CisgICAgZm9yIChpID0g
MDsgaSA8IGlkcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgcmVzdWx0ICs9IGlkc1tpXTsKKyAg
ICAgICAgIGlmIChpICE9IGlkcy5sZW5ndGggLSAxKQorICAgICAgICAgICAgIHJlc3VsdCArPSAn
LCAnOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBmdW5jdGlvbiBkdW1wQ29tcG9z
ZWRTaGFkb3dUcmVlKG5vZGUsIGluZGVudCkKIHsKICAgICBpbmRlbnQgPSBpbmRlbnQgfHwgIiI7
CkBAIC0xMzAsNiArMTUyLDExIEBAIGZ1bmN0aW9uIGRlYnVnRGlzcGF0Y2hlZEV2ZW50KGV2ZW50
VHlwZSkKICAgICAgICAgZGVidWcoJyAgICAnICsgZXZlbnRzW2ldKQogfQogCitmdW5jdGlvbiBz
b3J0RGlzcGF0Y2hlZEV2ZW50KGV2ZW50VHlwZSkKK3sKKyAgICBkaXNwYXRjaGVkRXZlbnQoZXZl
bnRUeXBlKS5zb3J0KCk7Cit9CisKIGZ1bmN0aW9uIG1vdmVNb3VzZShvbGRFbGVtZW50SWQsIG5l
d0VsZW1lbnRJZCkKIHsKICAgICBjbGVhckV2ZW50UmVjb3JkcygpOwpAQCAtMTQ5LDQgKzE3Niwz
IEBAIGZ1bmN0aW9uIHNob3dTYW5kYm94VHJlZSgpCiAgICAgc2FuZGJveC5vZmZzZXRMZWZ0Owog
ICAgIGRlYnVnKCdcblxuQ29tcG9zZWQgU2hhZG93IFRyZWUgd2lsbCBiZTpcbicgKyBkdW1wQ29t
cG9zZWRTaGFkb3dUcmVlKHNhbmRib3gpKTsKIH0KLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hpbmctZGlzdHJpYnV0ZWQt
dGV4dC1ub2RlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFk
b3ctZG9tLWV2ZW50LWRpc3BhdGNoaW5nLWRpc3RyaWJ1dGVkLXRleHQtbm9kZS1leHBlY3RlZC50
eHQKaW5kZXggOWEwNzY0MDJkMjk1ODg1ODVhMGIwZGU0NTlhNTM5NDMxZTE5MGUxMC4uMzg4ZTJk
YWVlZTIyYzU1M2NhNzMyMWIyOTBhNWU1NjM4MzUyNzFhMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hpbmctZGlzdHJpYnV0
ZWQtdGV4dC1ub2RlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFk
b3cvc2hhZG93LWRvbS1ldmVudC1kaXNwYXRjaGluZy1kaXN0cmlidXRlZC10ZXh0LW5vZGUtZXhw
ZWN0ZWQudHh0CkBAIC0yMiwxMCArMjIsMTAgQEAgTW92aW5nIG1vdXNlIGZyb20gYSBkaXN0cmli
dXRlZCB0ZXh0IG5vZGUgdG8gdG9wCiAgICAgIEB0b3AgKHRhcmdldDogdG9wKSAocmVsYXRlZDog
c2hhZG93LWhvc3QpCiAKICAgdG91Y2hzdGFydAotICAgICBAY29udGVudCAodGFyZ2V0OiBjb250
ZW50KQotICAgICBAc2hhZG93LXJvb3QgKHRhcmdldDogY29udGVudCkKLSAgICAgQHNoYWRvdy1o
b3N0ICh0YXJnZXQ6IHNoYWRvdy1ob3N0KQotICAgICBAdG9wICh0YXJnZXQ6IHNoYWRvdy1ob3N0
KQorICAgICBAY29udGVudCAodGFyZ2V0OiBjb250ZW50KSAodG91Y2hlczogY29udGVudCkgKHRh
cmdldFRvdWNoZXM6IGNvbnRlbnQpIChjaGFuZ2VkVG91Y2hlczogY29udGVudCkKKyAgICAgQHNo
YWRvdy1yb290ICh0YXJnZXQ6IGNvbnRlbnQpICh0b3VjaGVzOiBjb250ZW50KSAodGFyZ2V0VG91
Y2hlczogY29udGVudCkgKGNoYW5nZWRUb3VjaGVzOiBjb250ZW50KQorICAgICBAc2hhZG93LWhv
c3QgKHRhcmdldDogc2hhZG93LWhvc3QpICh0b3VjaGVzOiBzaGFkb3ctaG9zdCkgKHRhcmdldFRv
dWNoZXM6IHNoYWRvdy1ob3N0KSAoY2hhbmdlZFRvdWNoZXM6IHNoYWRvdy1ob3N0KQorICAgICBA
dG9wICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAodG91Y2hlczogc2hhZG93LWhvc3QpICh0YXJnZXRU
b3VjaGVzOiBzaGFkb3ctaG9zdCkgKGNoYW5nZWRUb3VjaGVzOiBzaGFkb3ctaG9zdCkKIAogICBt
b3VzZXdoZWVsCiAgICAgIEBjb250ZW50ICh0YXJnZXQ6IGNvbnRlbnQpCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWRvbS1ldmVudC1kaXNwYXRjaGluZy1k
aXN0cmlidXRlZC10ZXh0LW5vZGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9z
aGFkb3ctZG9tLWV2ZW50LWRpc3BhdGNoaW5nLWRpc3RyaWJ1dGVkLXRleHQtbm9kZS5odG1sCmlu
ZGV4IDI3NWFkODc0YmVmZjJjODg4ZTMwMzA5NjgxNjBjYzg2MmM3YTM1NGEuLjJiMTA4N2Y0OGRh
YjYzNDRkYTA3NGU0ODlkM2VmNGYzOThiYjkyOTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zh
c3QvZG9tL3NoYWRvdy9zaGFkb3ctZG9tLWV2ZW50LWRpc3BhdGNoaW5nLWRpc3RyaWJ1dGVkLXRl
eHQtbm9kZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZG9t
LWV2ZW50LWRpc3BhdGNoaW5nLWRpc3RyaWJ1dGVkLXRleHQtbm9kZS5odG1sCkBAIC04LDcgKzgs
NyBAQAogPGJvZHk+CiAgICAgPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+CiAgICAgPGRpdiBpZD0i
c2FuZGJveCI+PC9kaXY+Ci0gICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+CisgICAgPHByZSBp
ZD0iY29uc29sZSIgc3R5bGU9J2ZvbnQtc2l6ZTogMXB4Jz48L3ByZT4KICAgICA8c2NyaXB0Pgog
ICAgICAgICB2YXIgc2FuZGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYW5kYm94Jyk7
CiAKQEAgLTM1LDEzICszNSwxMiBAQAogICAgICAgICBkZWJ1Z0Rpc3BhdGNoZWRFdmVudCgnbW91
c2VvdXQnKTsKICAgICAgICAgZGVidWdEaXNwYXRjaGVkRXZlbnQoJ21vdXNlb3ZlcicpOwogCisg
ICAgICAgIGNsZWFyRXZlbnRSZWNvcmRzKCk7CiAgICAgICAgIHRvdWNoTG9jYXRpb24oaG9zdCk7
Ci0gICAgICAgIGRlYnVnRGlzcGF0Y2hlZEV2ZW50KCd0b3VjaHN0YXJ0Jyk7Ci0KICAgICAgICAg
c2Nyb2xsTW91c2VXaGVlbChob3N0KTsKKyAgICAgICAgZGVidWdEaXNwYXRjaGVkRXZlbnQoJ3Rv
dWNoc3RhcnQnKTsKICAgICAgICAgZGVidWdEaXNwYXRjaGVkRXZlbnQoJ21vdXNld2hlZWwnKTsK
ICAgICA8L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+CiA8L2JvZHk+CiA8L2h0bWw+Ci0KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZG9tLWV2ZW50LWRpc3BhdGNoaW5nLXRl
eHQtbm9kZS1pbi1zaGFkb3ctcm9vdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9zaGFkb3cvc2hhZG93LWRvbS1ldmVudC1kaXNwYXRjaGluZy10ZXh0LW5vZGUtaW4tc2hhZG93
LXJvb3QtZXhwZWN0ZWQudHh0CmluZGV4IDc3M2NlOWJjOGQ2MjNjMTU1ZWZhNmVlMDMwY2Y3Yzk3
OGE2YjZmNDguLjFjZWUwYjA2YzI5M2NlOGFlNGIyMjlhMTBhMGYxMDlmZjdkZjM0ODAgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZG9tLWV2ZW50LWRpc3Bh
dGNoaW5nLXRleHQtbm9kZS1pbi1zaGFkb3ctcm9vdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hpbmctdGV4dC1u
b2RlLWluLXNoYWRvdy1yb290LWV4cGVjdGVkLnR4dApAQCAtMjIsOSArMjIsOSBAQCBNb3Zpbmcg
bW91c2UgZnJvbSBhIGRpcmVjdCBjaGlsZCB0ZXh0IG5vZGUgb2YgdGhlIHNoYWRvdyByb290IHRv
IHRvcAogICAgICBAdG9wICh0YXJnZXQ6IHRvcCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQogCiAg
IHRvdWNoc3RhcnQKLSAgICAgQHNoYWRvdy1yb290ICh0YXJnZXQ6IHNoYWRvdy1yb290KQotICAg
ICBAc2hhZG93LWhvc3QgKHRhcmdldDogc2hhZG93LWhvc3QpCi0gICAgIEB0b3AgKHRhcmdldDog
c2hhZG93LWhvc3QpCisgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBzaGFkb3ctcm9vdCkgKHRv
dWNoZXM6IHNoYWRvdy1yb290KSAodGFyZ2V0VG91Y2hlczogc2hhZG93LXJvb3QpIChjaGFuZ2Vk
VG91Y2hlczogc2hhZG93LXJvb3QpCisgICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBzaGFkb3ct
aG9zdCkgKHRvdWNoZXM6IHNoYWRvdy1ob3N0KSAodGFyZ2V0VG91Y2hlczogc2hhZG93LWhvc3Qp
IChjaGFuZ2VkVG91Y2hlczogc2hhZG93LWhvc3QpCisgICAgIEB0b3AgKHRhcmdldDogc2hhZG93
LWhvc3QpICh0b3VjaGVzOiBzaGFkb3ctaG9zdCkgKHRhcmdldFRvdWNoZXM6IHNoYWRvdy1ob3N0
KSAoY2hhbmdlZFRvdWNoZXM6IHNoYWRvdy1ob3N0KQogCiAgIG1vdXNld2hlZWwKICAgICAgQHNo
YWRvdy1yb290ICh0YXJnZXQ6IHNoYWRvdy1yb290KQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vc2hhZG93L3RvdWNoLWV2ZW50LXJldGFyZ2V0aW5nLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy90b3VjaC1ldmVudC1yZXRhcmdldGluZy1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMDkwNzAyZDMxNDVlNWRhMzU3NDg1OTViYmUzODMzZTU2NzkwZTkw
YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy90b3VjaC1l
dmVudC1yZXRhcmdldGluZy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxOSBAQAorVGVzdHMgdG8g
ZW5zdXJlIHRoYXQgZXZlbnQgZGlzcGF0Y2hpbmcgYmVoYXZlcyBhcyB0aGUgU2hhZG93IERPTSBz
cGVjIGRlc2NyaWJlcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKKworICB0b3Vj
aHN0YXJ0CisgICAgIEBkaXYxICh0YXJnZXQ6IGRpdjEpICh0b3VjaGVzOiBkaXYxLCBkaXYyLCBk
aXYzKSAodGFyZ2V0VG91Y2hlczogZGl2MSkgKGNoYW5nZWRUb3VjaGVzOiBkaXYxLCBkaXYyLCBk
aXYzKQorICAgICBAZGl2MiAodGFyZ2V0OiBkaXYyKSAodG91Y2hlczogZGl2MSwgZGl2MiwgZGl2
MykgKHRhcmdldFRvdWNoZXM6IGRpdjIpIChjaGFuZ2VkVG91Y2hlczogZGl2MSwgZGl2MiwgZGl2
MykKKyAgICAgQGRpdjItc2hhZG93LXJvb3QtY2hpbGQgKHRhcmdldDogZGl2Mi1zaGFkb3ctcm9v
dC1jaGlsZCkgKHRvdWNoZXM6IGRpdjEsIGRpdjIsIGRpdjMpICh0YXJnZXRUb3VjaGVzOiBkaXYy
KSAoY2hhbmdlZFRvdWNoZXM6IGRpdjEsIGRpdjIsIGRpdjMpCisgICAgIEBkaXYzICh0YXJnZXQ6
IGRpdjMpICh0b3VjaGVzOiBkaXYxLCBkaXYyLCBkaXYzKSAodGFyZ2V0VG91Y2hlczogZGl2Mykg
KGNoYW5nZWRUb3VjaGVzOiBkaXYxLCBkaXYyLCBkaXYzKQorICAgICBAZGl2My1zaGFkb3ctcm9v
dC1jaGlsZCAodGFyZ2V0OiBkaXYzLXNoYWRvdy1yb290LWNoaWxkKSAodG91Y2hlczogZGl2MSwg
ZGl2MiwgZGl2My1zaGFkb3ctcm9vdC1jaGlsZCkgKHRhcmdldFRvdWNoZXM6IGRpdjMtc2hhZG93
LXJvb3QtY2hpbGQpIChjaGFuZ2VkVG91Y2hlczogZGl2MSwgZGl2MiwgZGl2My1zaGFkb3ctcm9v
dC1jaGlsZCkKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorVG91Y2ggZXZlbnQgcmV0YXJnZXRpbmcuCisKK2ZvbworCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9zaGFkb3cvdG91Y2gtZXZlbnQtcmV0YXJnZXRpbmcuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy90b3VjaC1ldmVudC1yZXRhcmdldGluZy5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjg0OTEyYmU2MjFiNjk0ZDExMDA4Yzk4ZTc0MzhhN2Q2NDE1NWE1NzcKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdG91Y2gtZXZlbnQtcmV0YXJn
ZXRpbmcuaHRtbApAQCAtMCwwICsxLDYwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFkb3ctZG9tLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2V2ZW50LWRpc3BhdGNoaW5nLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHA+VG91Y2ggZXZlbnQgcmV0YXJnZXRpbmcuPC9w
PgorPGRpdiBpZD0ic2FuZGJveCI+Cis8L2Rpdj4KKzxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgor
Cis8c2NyaXB0Pgorc2FuZGJveC5hcHBlbmRDaGlsZCgKKyAgICBjcmVhdGVET00oJ2RpdicsIHsn
aWQnOiAnY29udGFpbmVyJ30sCisgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6
ICdkaXYxJ30sCisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZSgnZm9vJykpLAorICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnZGl2Mid9
LAorICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHt9LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnZm9vJykpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdkaXYyLXNo
YWRvdy1yb290LWNoaWxkJ30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdmb28nKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ2ZvbycpKSkpLAorICAgICAgICAgICAg
ICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnZGl2Myd9LAorICAgICAgICAgICAgICAgICAgICAg
ICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVE
T00oJ2RpdicsIHt9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZSgnZm9vJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdkaXYzLXNoYWRvdy1yb290LWNoaWxkJ30sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KCdmb28nKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7
fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUoJ2ZvbycpKSkpKSk7CisKK3NhbmRib3gub2Zmc2V0TGVmdDsKKworZnVuY3Rpb24g
YWRkVG91Y2hQb2ludCh0YXJnZXQpCit7CisgICAgZXZlbnRTZW5kZXIuYWRkVG91Y2hQb2ludCh0
YXJnZXQub2Zmc2V0TGVmdCArIHRhcmdldC5vZmZzZXRXaWR0aCAvIDIsIHRhcmdldC5vZmZzZXRU
b3AgKyB0YXJnZXQub2Zmc2V0SGVpZ2h0IC8gMik7Cit9CisKK2Z1bmN0aW9uIHNlbmRUb3VjaEV2
ZW50KGVsZW1lbnRzKQoreworICAgIGV2ZW50U2VuZGVyLmNsZWFyVG91Y2hQb2ludHMoKTsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgKytpKQorICAgICAgICBhZGRU
b3VjaFBvaW50KGdldE5vZGVJblNoYWRvd1RyZWVTdGFjayhlbGVtZW50c1tpXSkpOworICAgIGV2
ZW50U2VuZGVyLnRvdWNoU3RhcnQoKTsKKyAgICBldmVudFNlbmRlci50b3VjaEVuZCgpOworfQor
CithZGRFdmVudExpc3RlbmVycyhbJ2RpdjEnLCAnZGl2MicsICdkaXYzJywKKyAgICAgICAgICAg
ICAgICAgICAnZGl2Mi9kaXYyLXNoYWRvdy1yb290LWNoaWxkJywgJ2RpdjMvZGl2My1zaGFkb3ct
cm9vdC1jaGlsZCddKTsKK3NlbmRUb3VjaEV2ZW50KFsnZGl2MScsICdkaXYyL2RpdjItc2hhZG93
LXJvb3QtY2hpbGQnLCAnZGl2My9kaXYzLXNoYWRvdy1yb290LWNoaWxkJ10pOworc29ydERpc3Bh
dGNoZWRFdmVudCgndG91Y2hzdGFydCcpOworZGVidWdEaXNwYXRjaGVkRXZlbnQoJ3RvdWNoc3Rh
cnQnKTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191397</attachid>
            <date>2013-03-04 21:23:21 -0800</date>
            <delta_ts>2013-03-05 02:46:05 -0800</delta_ts>
            <desc>Ready for review</desc>
            <filename>bug-107800-20130305141928.patch</filename>
            <type>text/plain</type>
            <size>38019</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NTgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWNlOTk3ZWVkYTZkZjI2
NzQ5Mjg1YTQ3OThmOTAzZGM1NjRkM2I0Zi4uZTAyMTU4NDYzMmIyOWFmNDg0OGZhNjI1Y2EzOTQ5
OTU4NDk5ZmZjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkzIEBACisyMDEzLTAzLTA1ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBbU2hhZG93XSBJbXBsZW1l
bnRzIGV2ZW50IHJlLXRhcmdldGluZyBmb3IgVG91Y2ggRXZlbnRzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3ODAwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU28gZmFyLCBUb3VjaCBFdmVudHMgaGF2
ZSBiZWVuIGludGVudGlvbmFsbHkgZGlzYWJsZWQgaW4gc2hhZG93CisgICAgICAgIHRyZWUgc2lu
Y2UgaXQgYWxsb3dzIHVzZXJzIHRvIGFjY2VzcyBpbnRlcm5hbCBub2RlcyBpbiBzaGFkb3cgdHJl
ZQorICAgICAgICBieSBhY2Nlc3NpbmcgVG91Y2ggRXZlbnQncyBpbmZvcm1hdGlvbi4KKworICAg
ICAgICBUaGlzIHBhdGNoIHJlLXRhcmdldHMgYWxsIGluZGl2aWR1YWwgdG91Y2ggcG9pbnQncyB0
YXJnZXQgaW4KKyAgICAgICAgVG91Y2hMaXN0ICh0b3VjaGVzLCB0YXJnZXRUb3VjaGVzIGFuZCBj
aGFuZ2VkVG91Y2hlcykgb3duZWQgYnkgYSBUb3VjaCBFdmVudAorICAgICAgICBiZWZvcmUgdGhl
IFRvdWNoIEV2ZW50IGlzIGRpc3BhdGNoZWQgc28gdGhhdCB3ZSB3b24ndCBicmVhayBhbgorICAg
ICAgICB1cHBlciBib3VuZGFyeSBvZiBzaGFkb3cgRE9NLgorCisgICAgICAgIFRvdWNoIEV2ZW50
cyByZS10YXJnZXRpbmcgaXMgc2ltaWxhciB0byB0aGF0IG9mIE1vdXNlIEV2ZW50cworICAgICAg
ICByZS10YXJnZXRpbmcuIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgYSBUb3VjaCBFdmVudCBjYW4g
aGF2ZSBtb3JlCisgICAgICAgIHRoYW4gb25lIHJlbGF0ZWQgdGFyZ2V0IGJlY2F1c2Ugb2YgbXVs
dGlwbGUgdG91Y2hlcy4gV2UgbXVzdAorICAgICAgICByZS10YXJnZXQgYWxsIGluZGl2aWR1YWwg
dG91Y2ggcG9pbnRzIHdoaWNoIGNhbiBiZSByZWZlcnJlZCBmcm9tCisgICAgICAgIHRoZSBUb3Vj
aCBFdmVudC4KKworICAgICAgICBOb3csIFRvdWNoIEV2ZW50cyBjYW4gYmUgZmlyZWQgaW4gc2hh
ZG93IHRyZWUuIEkndmUgcmVtb3ZlZCB0aGUKKyAgICAgICAgZXhpc3RpbmcgbGltaXRhdGlvbi4K
KworICAgICAgICBUZXN0OiBmYXN0L2RvbS9zaGFkb3cvdG91Y2gtZXZlbnQtcmV0YXJnZXRpbmcu
aHRtbAorCisgICAgICAgICogZG9tL0V2ZW50Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudENvbnRleHQ6OmlzVG91Y2hFdmVudENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50Q29udGV4dDo6VG91Y2hFdmVudENvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hFdmVudENvbnRleHQ6On5Ub3VjaEV2ZW50Q29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hFdmVudENvbnRleHQ6OmlzVG91Y2hFdmVudENv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hFdmVudENvbnRleHQ6OmNoZWNrUmVhY2hh
YmlsaXR5KTogIFVzZWQgZm9yIGFzc2VydGlvbiBvZiByZWFjaGFiaWxpdHkgZm9yIGVhY2ggVG91
Y2ggcG9pbnQuCisgICAgICAgICogZG9tL0V2ZW50Q29udGV4dC5oOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChFdmVudENvbnRleHQpOgorICAgICAgICAoVG91Y2hFdmVudENvbnRleHQp
OiBJbnRyb2R1Y2VkIHRvIGhvbGQgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZvciByZS10YXJnZXRp
bmcgVG91Y2ggZXZlbnQuCisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50Q29udGV4dDo6dG91
Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50Q29udGV4dDo6dGFyZ2V0VG91Y2hl
cyk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50Q29udGV4dDo6Y2hhbmdlZFRvdWNoZXMp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0Ojppc1JlYWNoYWJsZSk6CisgICAgICAg
ICogZG9tL0V2ZW50UmV0YXJnZXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFJldGFy
Z2V0ZXI6OmNhbGN1bGF0ZUV2ZW50UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFJldGFy
Z2V0ZXI6OmFkanVzdEZvclRvdWNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudFJldGFyZ2V0ZXI6OmFkanVzdFRvdWNoTGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvclJlbGF0ZWRUYXJnZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRSZXRhcmdldGVyOjpjYWxjdWxhdGVBZGp1c3RlZE5vZGVzKTogVXBk
YXRlZCBzbyB0aGF0IHRoaXMgY2FuIGJlIHVzZWQgZm9yIFRvdWNoIHBvaW50IHJlLXRhcmdldGlu
Zy4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UmV0YXJnZXRlcjo6YnVpbGRSZWxhdGVkTm9kZU1h
cCk6CisgICAgICAgICogZG9tL0V2ZW50UmV0YXJnZXRlci5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChFdmVudFJldGFyZ2V0ZXIpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkaXNwYXRjaFRvdWNoRXZlbnQpOgorICAgICAgICAq
IGRvbS9Ob2RlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKE5vZGUpOgorICAgICAg
ICAqIGRvbS9Ub3VjaC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaDo6VG91Y2gpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaDo6Y2xvbmVXaXRoTmV3VGFy
Z2V0KToKKyAgICAgICAgKiBkb20vVG91Y2guaDoKKyAgICAgICAgKFRvdWNoKToKKyAgICAgICAg
KiBkb20vVG91Y2hFdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50RGlzcGF0
Y2hNZWRpYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6VG91Y2hFdmVudERpc3BhdGNoTWVkaWF0b3I6OlRvdWNoRXZlbnREaXNwYXRjaE1lZGlhdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpldmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hF
dmVudCk6CisgICAgICAgICogZG9tL1RvdWNoRXZlbnQuaDoKKyAgICAgICAgKFRvdWNoRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hFdmVudDo6c2V0VG91Y2hlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpUb3VjaEV2ZW50OjpzZXRUYXJnZXRUb3VjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlRvdWNoRXZlbnQ6OnNldENoYW5nZWRUb3VjaGVzKToKKyAgICAgICAgKFRvdWNoRXZlbnREaXNw
YXRjaE1lZGlhdG9yKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6dG9U
b3VjaEV2ZW50KToKKyAgICAgICAgKiBkb20vVG91Y2hMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRvdWNoTGlzdDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBkb20v
VG91Y2hMaXN0Lmg6CisgICAgICAgIChUb3VjaExpc3QpOgorICAgICAgICAqIHBhZ2UvRXZlbnRI
YW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3Vs
dEluRnJhbWUpOiBSZW1vdmVkIHRoZSBsaW1pdGF0aW9uLiBBZGp1c3RpbmcgaXMgbm8gbG9uZ2Vy
IGRvbmUgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hF
dmVudCk6CisKIDIwMTMtMDMtMDMgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBCdWlsZCBmaXggYWZ0ZXIgcjE0NDU2NS4gUmV2ZXJ0ZWQgcjE0NDUzMy4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKaW5kZXggMjg5N2M3ZDg5YWM2ODNjYjFmOWQ0MzhhMjlm
Y2VhZmU1MWYzZWRiYi4uM2RjNTc2NTRlOGYyMjY3MmM4MGQ0NWRhNGUzYTA5NmVlZjMyMmM2MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNs
dWRlICJGb2N1c0V2ZW50LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5v
ZGUuaCIKKyNpbmNsdWRlICJUb3VjaEV2ZW50LmgiCisjaW5jbHVkZSAiVG91Y2hMaXN0LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjEsNiArNjMsMTEgQEAgYm9vbCBFdmVudENvbnRl
eHQ6OmlzTW91c2VPckZvY3VzRXZlbnRDb250ZXh0KCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKK2Jvb2wgRXZlbnRDb250ZXh0Ojppc1RvdWNoRXZlbnRDb250ZXh0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKIE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dDo6TW91c2VP
ckZvY3VzRXZlbnRDb250ZXh0KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgUGFzc1JlZlB0cjxFdmVu
dFRhcmdldD4gY3VycmVudFRhcmdldCwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gdGFyZ2V0KQog
ICAgIDogRXZlbnRDb250ZXh0KG5vZGUsIGN1cnJlbnRUYXJnZXQsIHRhcmdldCkKICAgICAsIG1f
cmVsYXRlZFRhcmdldCgwKQpAQCAtODYsNCArOTMsNDQgQEAgYm9vbCBNb3VzZU9yRm9jdXNFdmVu
dENvbnRleHQ6OmlzTW91c2VPckZvY3VzRXZlbnRDb250ZXh0KCkgY29uc3QKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAorVG91Y2hFdmVudENvbnRleHQ6OlRvdWNoRXZlbnRDb250ZXh0KFBhc3NSZWZQ
dHI8Tm9kZT4gbm9kZSwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gY3VycmVudFRhcmdldCwgUGFz
c1JlZlB0cjxFdmVudFRhcmdldD4gdGFyZ2V0KQorICAgIDogRXZlbnRDb250ZXh0KG5vZGUsIGN1
cnJlbnRUYXJnZXQsIHRhcmdldCkKKyAgICAsIG1fdG91Y2hlcyhUb3VjaExpc3Q6OmNyZWF0ZSgp
KQorICAgICwgbV90YXJnZXRUb3VjaGVzKFRvdWNoTGlzdDo6Y3JlYXRlKCkpCisgICAgLCBtX2No
YW5nZWRUb3VjaGVzKFRvdWNoTGlzdDo6Y3JlYXRlKCkpCit7Cit9CisKK1RvdWNoRXZlbnRDb250
ZXh0Ojp+VG91Y2hFdmVudENvbnRleHQoKQoreworfQorCit2b2lkIFRvdWNoRXZlbnRDb250ZXh0
OjpoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCogZXZlbnQpIGNvbnN0Cit7CisjaWZuZGVmIE5ERUJV
RworICAgIGNoZWNrUmVhY2hhYmlsaXR5KG1fdG91Y2hlcy5nZXQoKSk7CisgICAgY2hlY2tSZWFj
aGFiaWxpdHkobV90YXJnZXRUb3VjaGVzLmdldCgpKTsKKyAgICBjaGVja1JlYWNoYWJpbGl0eSht
X2NoYW5nZWRUb3VjaGVzLmdldCgpKTsKKyNlbmRpZgorICAgIEFTU0VSVChldmVudC0+aXNUb3Vj
aEV2ZW50KCkpOworICAgIFRvdWNoRXZlbnQqIHRvdWNoRXZlbnQgPSB0b1RvdWNoRXZlbnQoZXZl
bnQpOworICAgIHRvdWNoRXZlbnQtPnNldFRvdWNoZXMobV90b3VjaGVzKTsKKyAgICB0b3VjaEV2
ZW50LT5zZXRUYXJnZXRUb3VjaGVzKG1fdGFyZ2V0VG91Y2hlcyk7CisgICAgdG91Y2hFdmVudC0+
c2V0Q2hhbmdlZFRvdWNoZXMobV9jaGFuZ2VkVG91Y2hlcyk7CisgICAgRXZlbnRDb250ZXh0Ojpo
YW5kbGVMb2NhbEV2ZW50cyhldmVudCk7Cit9CisKK2Jvb2wgVG91Y2hFdmVudENvbnRleHQ6Omlz
VG91Y2hFdmVudENvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCisjaWZu
ZGVmIE5ERUJVRwordm9pZCBUb3VjaEV2ZW50Q29udGV4dDo6Y2hlY2tSZWFjaGFiaWxpdHkoVG91
Y2hMaXN0KiB0b3VjaExpc3QpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0
b3VjaExpc3QtPmxlbmd0aCgpOyArK2kpCisgICAgICAgIEFTU0VSVChpc1JlYWNoYWJsZSh0b3Vj
aExpc3QtPml0ZW0oaSktPnRhcmdldCgpLT50b05vZGUoKSkpOworfQorI2VuZGlmCisKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudENvbnRleHQuaAppbmRleCBmZTFjZjAyNTU2NGRlZTM4ZmYxZmVkZGFmYjM0
YzJhMTE3MGI1M2UwLi45Nzg5MzA4MTkzZDcyMjliMGVkYmY2MTMxMGMxMTI4ZmVhMWU5YzNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5oCkBAIC0zNSw2ICszNSw3IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEV2ZW50OworY2xhc3MgVG91Y2hMaXN0OwogCiBjbGFzcyBFdmVu
dENvbnRleHQgewogcHVibGljOgpAQCAtNDcsMTEgKzQ4LDEyIEBAIHB1YmxpYzoKICAgICBib29s
IGN1cnJlbnRUYXJnZXRTYW1lQXNUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRUYXJn
ZXQuZ2V0KCkgPT0gbV90YXJnZXQuZ2V0KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlTG9j
YWxFdmVudHMoRXZlbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZU9yRm9jdXNF
dmVudENvbnRleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNUb3VjaEV2ZW50Q29udGV4
dCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAjaWZuZGVmIE5ERUJVRwogICAgIGJvb2wgaXNVbnJl
YWNoYWJsZU5vZGUoRXZlbnRUYXJnZXQqKTsKLSAgICBib29sIGlzUmVhY2hhYmxlKE5vZGUqKTsK
KyAgICBib29sIGlzUmVhY2hhYmxlKE5vZGUqKSBjb25zdDsKICNlbmRpZgogICAgIFJlZlB0cjxO
b2RlPiBtX25vZGU7CiAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBtX2N1cnJlbnRUYXJnZXQ7CkBA
IC03Myw2ICs3NSwyOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxFdmVudFRhcmdldD4gbV9yZWxh
dGVkVGFyZ2V0OwogfTsKIAorY2xhc3MgVG91Y2hFdmVudENvbnRleHQgOiBwdWJsaWMgRXZlbnRD
b250ZXh0IHsKK3B1YmxpYzoKKyAgICBUb3VjaEV2ZW50Q29udGV4dChQYXNzUmVmUHRyPE5vZGU+
LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBjdXJyZW50VGFyZ2V0LCBQYXNzUmVmUHRyPEV2ZW50
VGFyZ2V0PiB0YXJnZXQpOworICAgIHZpcnR1YWwgflRvdWNoRXZlbnRDb250ZXh0KCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlTG9jYWxFdmVudHMoRXZlbnQqKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNUb3VjaEV2ZW50Q29udGV4dCgpIGNvbnN0IE9WRVJSSURFOwor
CisgICAgVG91Y2hMaXN0KiB0b3VjaGVzKCkgeyByZXR1cm4gbV90b3VjaGVzLmdldCgpOyB9Cisg
ICAgVG91Y2hMaXN0KiB0YXJnZXRUb3VjaGVzKCkgeyByZXR1cm4gbV90YXJnZXRUb3VjaGVzLmdl
dCgpOyB9CisgICAgVG91Y2hMaXN0KiBjaGFuZ2VkVG91Y2hlcygpIHsgcmV0dXJuIG1fY2hhbmdl
ZFRvdWNoZXMuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8VG91Y2hMaXN0PiBtX3Rv
dWNoZXM7CisgICAgUmVmUHRyPFRvdWNoTGlzdD4gbV90YXJnZXRUb3VjaGVzOworICAgIFJlZlB0
cjxUb3VjaExpc3Q+IG1fY2hhbmdlZFRvdWNoZXM7CisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQg
Y2hlY2tSZWFjaGFiaWxpdHkoVG91Y2hMaXN0KikgY29uc3Q7CisjZW5kaWYKKworfTsKKwogI2lm
bmRlZiBOREVCVUcKIGlubGluZSBib29sIEV2ZW50Q29udGV4dDo6aXNVbnJlYWNoYWJsZU5vZGUo
RXZlbnRUYXJnZXQqIHRhcmdldCkKIHsKQEAgLTgwLDcgKzEwNCw3IEBAIGlubGluZSBib29sIEV2
ZW50Q29udGV4dDo6aXNVbnJlYWNoYWJsZU5vZGUoRXZlbnRUYXJnZXQqIHRhcmdldCkKICAgICBy
ZXR1cm4gdGFyZ2V0ICYmIHRhcmdldC0+dG9Ob2RlKCkgJiYgIXRhcmdldC0+dG9Ob2RlKCktPmlz
U1ZHRWxlbWVudCgpICYmICFpc1JlYWNoYWJsZSh0YXJnZXQtPnRvTm9kZSgpKTsKIH0KIAotaW5s
aW5lIGJvb2wgRXZlbnRDb250ZXh0Ojppc1JlYWNoYWJsZShOb2RlKiB0YXJnZXQpCitpbmxpbmUg
Ym9vbCBFdmVudENvbnRleHQ6OmlzUmVhY2hhYmxlKE5vZGUqIHRhcmdldCkgY29uc3QKIHsKICAg
ICBBU1NFUlQodGFyZ2V0KTsKICAgICBUcmVlU2NvcGUqIHRhcmdldFNjb3BlID0gdGFyZ2V0LT50
cmVlU2NvcGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFJldGFyZ2V0
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UmV0YXJnZXRlci5jcHAKaW5kZXggOTE1
ZGE0NzEyMGIwZTgyNjU2NzVmMmFkYTZhZGFjOTJlNWE1Y2JjMi4uN2Y4Yjg0NGQ3MDkzMGM5ODc2
MDMwZThhMDgyOTNhM2MzN2E3MWVjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50UmV0YXJnZXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UmV0YXJnZXRl
ci5jcHAKQEAgLTI2LDYgKzI2LDkgQEAKICNpbmNsdWRlICJGb2N1c0V2ZW50LmgiCiAjaW5jbHVk
ZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJUb3Vj
aC5oIgorI2luY2x1ZGUgIlRvdWNoRXZlbnQuaCIKKyNpbmNsdWRlICJUb3VjaExpc3QuaCIKICNp
bmNsdWRlICJUcmVlU2NvcGUuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTc3LDYgKzgwLDcgQEAgdm9pZCBFdmVudFJldGFyZ2V0ZXI6
OmNhbGN1bGF0ZUV2ZW50UGF0aChOb2RlKiBub2RlLCBFdmVudCogZXZlbnQsIEV2ZW50UGF0aCYg
ZXYKICAgICBib29sIGluRG9jdW1lbnQgPSBub2RlLT5pbkRvY3VtZW50KCk7CiAgICAgYm9vbCBp
c1NWR0VsZW1lbnQgPSBub2RlLT5pc1NWR0VsZW1lbnQoKTsKICAgICBib29sIGlzTW91c2VPckZv
Y3VzRXZlbnQgPSBldmVudC0+aXNNb3VzZUV2ZW50KCkgfHwgZXZlbnQtPmlzRm9jdXNFdmVudCgp
OworICAgIGJvb2wgaXNUb3VjaEV2ZW50ID0gZXZlbnQtPmlzVG91Y2hFdmVudCgpOwogICAgIFZl
Y3RvcjxFdmVudFRhcmdldCosIDMyPiB0YXJnZXRTdGFjazsKICAgICBmb3IgKEV2ZW50UGF0aFdh
bGtlciB3YWxrZXIobm9kZSk7IHdhbGtlci5ub2RlKCk7IHdhbGtlci5tb3ZlVG9QYXJlbnQoKSkg
ewogICAgICAgICBOb2RlKiBub2RlID0gd2Fsa2VyLm5vZGUoKTsKQEAgLTg2LDYgKzkwLDggQEAg
dm9pZCBFdmVudFJldGFyZ2V0ZXI6OmNhbGN1bGF0ZUV2ZW50UGF0aChOb2RlKiBub2RlLCBFdmVu
dCogZXZlbnQsIEV2ZW50UGF0aCYgZXYKICAgICAgICAgICAgIHRhcmdldFN0YWNrLmFwcGVuZCh0
YXJnZXRTdGFjay5sYXN0KCkpOwogICAgICAgICBpZiAoaXNNb3VzZU9yRm9jdXNFdmVudCkKICAg
ICAgICAgICAgIGV2ZW50UGF0aC5hcHBlbmQoYWRvcHRQdHIobmV3IE1vdXNlT3JGb2N1c0V2ZW50
Q29udGV4dChub2RlLCBldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcyhub2RlKSwgdGFy
Z2V0U3RhY2subGFzdCgpKSkpOworICAgICAgICBlbHNlIGlmIChpc1RvdWNoRXZlbnQpCisgICAg
ICAgICAgICBldmVudFBhdGguYXBwZW5kKGFkb3B0UHRyKG5ldyBUb3VjaEV2ZW50Q29udGV4dChu
b2RlLCBldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcyhub2RlKSwgdGFyZ2V0U3RhY2su
bGFzdCgpKSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBldmVudFBhdGguYXBwZW5kKGFk
b3B0UHRyKG5ldyBFdmVudENvbnRleHQobm9kZSwgZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0
UnVsZXMobm9kZSksIHRhcmdldFN0YWNrLmxhc3QoKSkpKTsKICAgICAgICAgaWYgKCFpbkRvY3Vt
ZW50KQpAQCAtMTExLDcgKzExNyw0MiBAQCB2b2lkIEV2ZW50UmV0YXJnZXRlcjo6YWRqdXN0Rm9y
Rm9jdXNFdmVudChOb2RlKiBub2RlLCBjb25zdCBGb2N1c0V2ZW50JiBmb2N1c0V2ZQogICAgIGFk
anVzdEZvclJlbGF0ZWRUYXJnZXQobm9kZSwgZm9jdXNFdmVudC5yZWxhdGVkVGFyZ2V0KCksIGV2
ZW50UGF0aCk7CiB9CiAKLXZvaWQgRXZlbnRSZXRhcmdldGVyOjphZGp1c3RGb3JSZWxhdGVkVGFy
Z2V0KE5vZGUqIG5vZGUsIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0LCBFdmVudFBhdGgmIGV2
ZW50UGF0aCkKK3ZvaWQgRXZlbnRSZXRhcmdldGVyOjphZGp1c3RGb3JUb3VjaEV2ZW50KE5vZGUq
IG5vZGUsIGNvbnN0IFRvdWNoRXZlbnQmIHRvdWNoRXZlbnQsIEV2ZW50UGF0aCYgZXZlbnRQYXRo
KQoreworICAgIHNpemVfdCBldmVudFBhdGhTaXplID0gZXZlbnRQYXRoLnNpemUoKTsKKworICAg
IFRvdWNoTGlzdFBhdGggdG91Y2hlc1BhdGgoZXZlbnRQYXRoU2l6ZSk7CisgICAgVG91Y2hMaXN0
UGF0aCB0YXJnZXRUb3VjaGVzUGF0aChldmVudFBhdGhTaXplKTsKKyAgICBUb3VjaExpc3RQYXRo
IGNoYW5nZWRUb3VjaGVzUGF0aChldmVudFBhdGhTaXplKTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZXZlbnRQYXRoU2l6ZTsgKytpKSB7CisgICAgICAgIEFTU0VSVChldmVudFBhdGhb
aV0tPmlzVG91Y2hFdmVudENvbnRleHQoKSk7CisgICAgICAgIFRvdWNoRXZlbnRDb250ZXh0KiB0
b3VjaEV2ZW50Q29udGV4dCA9IHN0YXRpY19jYXN0PFRvdWNoRXZlbnRDb250ZXh0Kj4oZXZlbnRQ
YXRoW2ldLmdldCgpKTsKKyAgICAgICAgdG91Y2hlc1BhdGhbaV0gPSB0b3VjaEV2ZW50Q29udGV4
dC0+dG91Y2hlcygpOworICAgICAgICB0YXJnZXRUb3VjaGVzUGF0aFtpXSA9IHRvdWNoRXZlbnRD
b250ZXh0LT50YXJnZXRUb3VjaGVzKCk7CisgICAgICAgIGNoYW5nZWRUb3VjaGVzUGF0aFtpXSA9
IHRvdWNoRXZlbnRDb250ZXh0LT5jaGFuZ2VkVG91Y2hlcygpOworICAgIH0KKworICAgIGFkanVz
dFRvdWNoTGlzdChub2RlLCAqdG91Y2hFdmVudC50b3VjaGVzKCksIGV2ZW50UGF0aCwgdG91Y2hl
c1BhdGgpOworICAgIGFkanVzdFRvdWNoTGlzdChub2RlLCAqdG91Y2hFdmVudC50YXJnZXRUb3Vj
aGVzKCksIGV2ZW50UGF0aCwgdGFyZ2V0VG91Y2hlc1BhdGgpOworICAgIGFkanVzdFRvdWNoTGlz
dChub2RlLCAqdG91Y2hFdmVudC5jaGFuZ2VkVG91Y2hlcygpLCBldmVudFBhdGgsIGNoYW5nZWRU
b3VjaGVzUGF0aCk7Cit9CisKK3ZvaWQgRXZlbnRSZXRhcmdldGVyOjphZGp1c3RUb3VjaExpc3Qo
Y29uc3QgTm9kZSogbm9kZSwgY29uc3QgVG91Y2hMaXN0JiB0b3VjaExpc3QsIGNvbnN0IEV2ZW50
UGF0aCYgZXZlbnRQYXRoLCBUb3VjaExpc3RQYXRoJiB0b3VjaExpc3RQYXRoKQoreworICAgIHNp
emVfdCBldmVudFBhdGhTaXplID0gZXZlbnRQYXRoLnNpemUoKTsKKyAgICBBU1NFUlQodG91Y2hM
aXN0UGF0aC5zaXplKCkgPT0gZXZlbnRQYXRoU2l6ZSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGk8IHRvdWNoTGlzdC5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFRvdWNoJiB0b3Vj
aCA9ICp0b3VjaExpc3QuaXRlbShpKTsKKyAgICAgICAgQWRqdXN0ZWROb2RlcyBhZGp1c3RlZE5v
ZGVzOworICAgICAgICBjYWxjdWxhdGVBZGp1c3RlZE5vZGVzKG5vZGUsIHRvdWNoLnRhcmdldCgp
LT50b05vZGUoKSwgZmFsc2UsIGNvbnN0X2Nhc3Q8RXZlbnRQYXRoJj4oZXZlbnRQYXRoKSwgYWRq
dXN0ZWROb2Rlcyk7CisgICAgICAgIEFTU0VSVChhZGp1c3RlZE5vZGVzLnNpemUoKSA9PSBldmVu
dFBhdGhTaXplKTsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBldmVudFBhdGhTaXpl
OyArK2opCisgICAgICAgICAgICB0b3VjaExpc3RQYXRoW2pdLT5hcHBlbmQodG91Y2guY2xvbmVX
aXRoTmV3VGFyZ2V0KGFkanVzdGVkTm9kZXNbal0uZ2V0KCkpKTsKKyAgICB9Cit9CisKK3ZvaWQg
RXZlbnRSZXRhcmdldGVyOjphZGp1c3RGb3JSZWxhdGVkVGFyZ2V0KGNvbnN0IE5vZGUqIG5vZGUs
IEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0LCBFdmVudFBhdGgmIGV2ZW50UGF0aCkKIHsKICAg
ICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsKQEAgLTEyMSw3ICsxNjIsNyBAQCB2b2lkIEV2
ZW50UmV0YXJnZXRlcjo6YWRqdXN0Rm9yUmVsYXRlZFRhcmdldChOb2RlKiBub2RlLCBFdmVudFRh
cmdldCogcmVsYXRlZFRhcgogICAgIGlmICghcmVsYXRlZE5vZGUpCiAgICAgICAgIHJldHVybjsK
ICAgICBBZGp1c3RlZE5vZGVzIGFkanVzdGVkTm9kZXM7Ci0gICAgY2FsY3VsYXRlQWRqdXN0ZWRO
b2Rlcyhub2RlLCByZWxhdGVkTm9kZSwgZXZlbnRQYXRoLCBhZGp1c3RlZE5vZGVzKTsKKyAgICBj
YWxjdWxhdGVBZGp1c3RlZE5vZGVzKG5vZGUsIHJlbGF0ZWROb2RlLCB0cnVlLCBldmVudFBhdGgs
IGFkanVzdGVkTm9kZXMpOwogICAgIEFTU0VSVChhZGp1c3RlZE5vZGVzLnNpemUoKSA8PSBldmVu
dFBhdGguc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFkanVzdGVkTm9kZXMu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgQVNTRVJUKGV2ZW50UGF0aFtpXS0+aXNNb3VzZU9yRm9j
dXNFdmVudENvbnRleHQoKSk7CkBAIC0xMzAsNyArMTcxLDcgQEAgdm9pZCBFdmVudFJldGFyZ2V0
ZXI6OmFkanVzdEZvclJlbGF0ZWRUYXJnZXQoTm9kZSogbm9kZSwgRXZlbnRUYXJnZXQqIHJlbGF0
ZWRUYXIKICAgICB9CiB9CiAKLXZvaWQgRXZlbnRSZXRhcmdldGVyOjpjYWxjdWxhdGVBZGp1c3Rl
ZE5vZGVzKE5vZGUqIG5vZGUsIE5vZGUqIHJlbGF0ZWROb2RlLCBFdmVudFBhdGgmIGV2ZW50UGF0
aCwgQWRqdXN0ZWROb2RlcyYgYWRqdXN0ZWROb2RlcykKK3ZvaWQgRXZlbnRSZXRhcmdldGVyOjpj
YWxjdWxhdGVBZGp1c3RlZE5vZGVzKGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IE5vZGUqIHJlbGF0
ZWROb2RlLCBib29sIHN0b3BFdmVudEF0Qm91bmRhcnlJZk5lZWRlZCwgRXZlbnRQYXRoJiBldmVu
dFBhdGgsIEFkanVzdGVkTm9kZXMmIGFkanVzdGVkTm9kZXMpCiB7CiAgICAgUmVsYXRlZE5vZGVN
YXAgcmVsYXRlZE5vZGVNYXA7CiAgICAgYnVpbGRSZWxhdGVkTm9kZU1hcChyZWxhdGVkTm9kZSwg
cmVsYXRlZE5vZGVNYXApOwpAQCAtMTUwLDYgKzE5MSw4IEBAIHZvaWQgRXZlbnRSZXRhcmdldGVy
OjpjYWxjdWxhdGVBZGp1c3RlZE5vZGVzKE5vZGUqIG5vZGUsIE5vZGUqIHJlbGF0ZWROb2RlLCBF
dmVuCiAgICAgICAgICAgICBhZGp1c3RlZE5vZGVzLmFwcGVuZChhZGp1c3RlZE5vZGUpOwogICAg
ICAgICB9CiAgICAgICAgIGxhc3RUcmVlU2NvcGUgPSBzY29wZTsKKyAgICAgICAgaWYgKCFzdG9w
RXZlbnRBdEJvdW5kYXJ5SWZOZWVkZWQpCisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
aWYgKHRhcmdldElzSWRlbnRpY2FsVG9Ub1JlbGF0ZWRUYXJnZXQpIHsKICAgICAgICAgICAgIGlm
IChub2RlLT50cmVlU2NvcGUoKS0+cm9vdE5vZGUoKSA9PSAoKml0ZXIpLT5ub2RlKCkpIHsKICAg
ICAgICAgICAgICAgICBldmVudFBhdGguc2hyaW5rKGl0ZXIgKyAxIC0gZXZlbnRQYXRoLmJlZ2lu
KCkpOwpAQCAtMTY0LDcgKzIwNyw3IEBAIHZvaWQgRXZlbnRSZXRhcmdldGVyOjpjYWxjdWxhdGVB
ZGp1c3RlZE5vZGVzKE5vZGUqIG5vZGUsIE5vZGUqIHJlbGF0ZWROb2RlLCBFdmVuCiAgICAgfQog
fQogCi12b2lkIEV2ZW50UmV0YXJnZXRlcjo6YnVpbGRSZWxhdGVkTm9kZU1hcChOb2RlKiByZWxh
dGVkTm9kZSwgUmVsYXRlZE5vZGVNYXAmIHJlbGF0ZWROb2RlTWFwKQordm9pZCBFdmVudFJldGFy
Z2V0ZXI6OmJ1aWxkUmVsYXRlZE5vZGVNYXAoY29uc3QgTm9kZSogcmVsYXRlZE5vZGUsIFJlbGF0
ZWROb2RlTWFwJiByZWxhdGVkTm9kZU1hcCkKIHsKICAgICBWZWN0b3I8Tm9kZSosIDMyPiByZWxh
dGVkTm9kZVN0YWNrOwogICAgIFRyZWVTY29wZSogbGFzdFRyZWVTY29wZSA9IDA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRSZXRhcmdldGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnRSZXRhcmdldGVyLmgKaW5kZXggYzcxMWE5NmU4MzI2YmU1MDM2MWU2MWQzOGM1
MzZhZDg3ODMxODEzNi4uZWQxZWRlZDlhOWI3MGRlYjRjY2QzYzFhNWI1NDdkNTBhNGM1ZGI0YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UmV0YXJnZXRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFJldGFyZ2V0ZXIuaApAQCAtMzksNiArMzksNyBAQCBjbGFz
cyBFdmVudFRhcmdldDsKIGNsYXNzIEZvY3VzRXZlbnQ7CiBjbGFzcyBNb3VzZUV2ZW50OwogY2xh
c3MgTm9kZTsKK2NsYXNzIFRvdWNoRXZlbnQ7CiBjbGFzcyBUcmVlU2NvcGU7CiAKIGVudW0gRXZl
bnREaXNwYXRjaEJlaGF2aW9yIHsKQEAgLTQ4LDE5ICs0OSwyNSBAQCBlbnVtIEV2ZW50RGlzcGF0
Y2hCZWhhdmlvciB7CiAKIGNsYXNzIEV2ZW50UmV0YXJnZXRlciB7CiBwdWJsaWM6CisgICAgdHlw
ZWRlZiBWZWN0b3I8UmVmUHRyPFRvdWNoTGlzdD4gPiBUb3VjaExpc3RQYXRoOworCiAgICAgc3Rh
dGljIHZvaWQgY2FsY3VsYXRlRXZlbnRQYXRoKE5vZGUqLCBFdmVudCosIEV2ZW50UGF0aCYpOwog
ICAgIHN0YXRpYyB2b2lkIGFkanVzdEZvck1vdXNlRXZlbnQoTm9kZSosIGNvbnN0IE1vdXNlRXZl
bnQmLCBFdmVudFBhdGgmKTsKICAgICBzdGF0aWMgdm9pZCBhZGp1c3RGb3JGb2N1c0V2ZW50KE5v
ZGUqLCBjb25zdCBGb2N1c0V2ZW50JiwgRXZlbnRQYXRoJik7CisgICAgc3RhdGljIHZvaWQgYWRq
dXN0Rm9yVG91Y2hFdmVudChOb2RlKiwgY29uc3QgVG91Y2hFdmVudCYsIEV2ZW50UGF0aCYpOwor
CiAgICAgc3RhdGljIEV2ZW50VGFyZ2V0KiBldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxl
cyhOb2RlKiByZWZlcmVuY2VOb2RlKTsKIAogcHJpdmF0ZToKICAgICB0eXBlZGVmIFZlY3RvcjxS
ZWZQdHI8Tm9kZT4gPiBBZGp1c3RlZE5vZGVzOwogICAgIHR5cGVkZWYgSGFzaE1hcDxUcmVlU2Nv
cGUqLCBOb2RlKj4gUmVsYXRlZE5vZGVNYXA7CiAKLSAgICBzdGF0aWMgdm9pZCBhZGp1c3RGb3JS
ZWxhdGVkVGFyZ2V0KE5vZGUqLCBFdmVudFRhcmdldCogcmVsYXRlZFRhcmdldCwgRXZlbnRQYXRo
Jik7Ci0gICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlQWRqdXN0ZWROb2RlcyhOb2RlKiwgTm9kZSog
cmVsYXRlZE5vZGUsIEV2ZW50UGF0aCYsIEFkanVzdGVkTm9kZXMmKTsKLSAgICBzdGF0aWMgdm9p
ZCBidWlsZFJlbGF0ZWROb2RlTWFwKE5vZGUqLCBSZWxhdGVkTm9kZU1hcCYpOworICAgIHN0YXRp
YyB2b2lkIGFkanVzdEZvclJlbGF0ZWRUYXJnZXQoY29uc3QgTm9kZSosIEV2ZW50VGFyZ2V0KiBy
ZWxhdGVkVGFyZ2V0LCBFdmVudFBhdGgmKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVBZGp1
c3RlZE5vZGVzKGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiByZWxhdGVkTm9kZSwgYm9vbCBzdG9w
RXZlbnRBdEJvdW5kYXJ5SWZOZWVkZWQsIEV2ZW50UGF0aCYsIEFkanVzdGVkTm9kZXMmKTsKKyAg
ICBzdGF0aWMgdm9pZCBidWlsZFJlbGF0ZWROb2RlTWFwKGNvbnN0IE5vZGUqLCBSZWxhdGVkTm9k
ZU1hcCYpOwogICAgIHN0YXRpYyBOb2RlKiBmaW5kUmVsYXRlZE5vZGUoVHJlZVNjb3BlKiwgUmVs
YXRlZE5vZGVNYXAmKTsKKworICAgIHN0YXRpYyB2b2lkIGFkanVzdFRvdWNoTGlzdChjb25zdCBO
b2RlKiwgY29uc3QgVG91Y2hMaXN0JiwgY29uc3QgRXZlbnRQYXRoJiwgVG91Y2hMaXN0UGF0aCYp
OwogfTsKIAogaW5saW5lIEV2ZW50VGFyZ2V0KiBFdmVudFJldGFyZ2V0ZXI6OmV2ZW50VGFyZ2V0
UmVzcGVjdGluZ1RhcmdldFJ1bGVzKE5vZGUqIHJlZmVyZW5jZU5vZGUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAK
aW5kZXggOWVkOGE4YmVkMDY0ZTlmZTdjMjAyYWUxYzZiZjA5YTRmYzEzMjdmYS4uMzY1YTE2ZjUz
MTZjZGYxZWQwNTQ3N2M2Yzc3NmJmNmFmN2RhYmU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMTAx
LDYgKzEwMSw3IEBACiAjaW5jbHVkZSAiVGVtcGxhdGVDb250ZW50RG9jdW1lbnRGcmFnbWVudC5o
IgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0RXZlbnQuaCIKKyNpbmNsdWRlICJU
b3VjaEV2ZW50LmgiCiAjaW5jbHVkZSAiVHJlZVNjb3BlQWRvcHRlci5oIgogI2luY2x1ZGUgIlVJ
RXZlbnQuaCIKICNpbmNsdWRlICJVSUV2ZW50V2l0aEtleVN0YXRlLmgiCkBAIC0yMzc1LDYgKzIz
NzYsOSBAQCBib29sIE5vZGU6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQp
CiB7CiAgICAgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSkKICAgICAgICAgcmV0dXJuIEV2ZW50
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCh0aGlzLCBNb3VzZUV2ZW50RGlzcGF0Y2hNZWRpYXRv
cjo6Y3JlYXRlKGFkb3B0UmVmKHRvTW91c2VFdmVudChldmVudC5sZWFrUmVmKCkpKSwgTW91c2VF
dmVudERpc3BhdGNoTWVkaWF0b3I6OlN5bnRoZXRpY01vdXNlRXZlbnQpKTsKKyAgICBpZiAoZXZl
bnQtPmlzVG91Y2hFdmVudCgpKQorICAgICAgICByZXR1cm4gZGlzcGF0Y2hUb3VjaEV2ZW50KGFk
b3B0UmVmKHRvVG91Y2hFdmVudChldmVudC5sZWFrUmVmKCkpKSk7CisKICAgICByZXR1cm4gRXZl
bnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KHRoaXMsIEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6
Y3JlYXRlKGV2ZW50KSk7CiB9CiAKQEAgLTI0MzUsNiArMjQzOSwxMyBAQCBib29sIE5vZGU6OmRp
c3BhdGNoR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBldmVudCkKIH0K
ICNlbmRpZgogCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKK2Jvb2wgTm9kZTo6ZGlzcGF0Y2hU
b3VjaEV2ZW50KFBhc3NSZWZQdHI8VG91Y2hFdmVudD4gZXZlbnQpCit7CisgICAgcmV0dXJuIEV2
ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCh0aGlzLCBUb3VjaEV2ZW50RGlzcGF0Y2hNZWRp
YXRvcjo6Y3JlYXRlKGV2ZW50KSk7Cit9CisjZW5kaWYKKwogdm9pZCBOb2RlOjpkaXNwYXRjaFNp
bXVsYXRlZENsaWNrKEV2ZW50KiB1bmRlcmx5aW5nRXZlbnQsIFNpbXVsYXRlZENsaWNrTW91c2VF
dmVudE9wdGlvbnMgZXZlbnRPcHRpb25zLCBTaW11bGF0ZWRDbGlja1Zpc3VhbE9wdGlvbnMgdmlz
dWFsT3B0aW9ucykKIHsKICAgICBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2ltdWxhdGVkQ2xp
Y2sodGhpcywgdW5kZXJseWluZ0V2ZW50LCBldmVudE9wdGlvbnMsIHZpc3VhbE9wdGlvbnMpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmgKaW5kZXggYzkxNzdiYTkzYjQxNWY2NjkzY2JiZGUzNjQxZmE1NjA3ZDNmOTRlOS4u
ZmUwNTk2NjQ0MjQ0MmEyN2Q5NmFhNThlZWJmODc1ZDY4NTkzNmUxMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBA
IC05Miw2ICs5MiwxMCBAQCBjbGFzcyBUYWdOb2RlTGlzdDsKIGNsYXNzIFBsYXRmb3JtR2VzdHVy
ZUV2ZW50OwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorY2xhc3MgVG91Y2hF
dmVudDsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKE1JQ1JPREFUQSkKIGNsYXNzIEhUTUxQcm9wZXJ0
aWVzQ29sbGVjdGlvbjsKIGNsYXNzIFByb3BlcnR5Tm9kZUxpc3Q7CkBAIC02MzgsNiArNjQyLDEw
IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCiAgICAgYm9vbCBkaXNwYXRj
aEdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYpOwogI2VuZGlmCisjaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBib29sIGRpc3BhdGNoVG91Y2hFdmVudChQYXNzUmVm
UHRyPFRvdWNoRXZlbnQ+KTsKKyNlbmRpZgorCiAgICAgdm9pZCBkaXNwYXRjaFNpbXVsYXRlZENs
aWNrKEV2ZW50KiB1bmRlcmx5aW5nRXZlbnQsIFNpbXVsYXRlZENsaWNrTW91c2VFdmVudE9wdGlv
bnMgPSBTZW5kTm9FdmVudHMsIFNpbXVsYXRlZENsaWNrVmlzdWFsT3B0aW9ucyA9IFNob3dQcmVz
c2VkTG9vayk7CiAgICAgYm9vbCBkaXNwYXRjaEJlZm9yZUxvYWRFdmVudChjb25zdCBTdHJpbmcm
IHNvdXJjZVVSTCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2guY3BwCmluZGV4IDdmMzYyZmM3NWI1MTg3MjM2M2Vm
YTE1MzhmMzI2MWU3ZDM3Y2FkYjQuLjVlYmI3OTE2YTA5ODZjOTJhY2VkOTQwMDlhZmIyYmNmMTA4
NWZkZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1RvdWNoLmNwcApAQCAtNzUsNiArNzUsMjggQEAgVG91Y2g6OlRvdWNo
KEZyYW1lKiBmcmFtZSwgRXZlbnRUYXJnZXQqIHRhcmdldCwgdW5zaWduZWQgaWRlbnRpZmllciwg
aW50IHNjcmVlblgKICAgICBtX2Fic29sdXRlTG9jYXRpb24gPSByb3VuZGVkTGF5b3V0UG9pbnQo
RmxvYXRQb2ludCh4LCB5KSk7CiB9CiAKK1RvdWNoOjpUb3VjaChFdmVudFRhcmdldCogdGFyZ2V0
LCB1bnNpZ25lZCBpZGVudGlmaWVyLCBpbnQgY2xpZW50WCwgaW50IGNsaWVudFksIGludCBzY3Jl
ZW5YLCBpbnQgc2NyZWVuWSwgaW50IHBhZ2VYLCBpbnQgcGFnZVksIGludCByYWRpdXNYLCBpbnQg
cmFkaXVzWSwgZmxvYXQgcm90YXRpb25BbmdsZSwgZmxvYXQgZm9yY2UsIExheW91dFBvaW50IGFi
c29sdXRlTG9jYXRpb24pCisgICAgOiBtX3RhcmdldCh0YXJnZXQpCisgICAgLCBtX2lkZW50aWZp
ZXIoaWRlbnRpZmllcikKKyAgICAsIG1fY2xpZW50WChjbGllbnRYKQorICAgICwgbV9jbGllbnRZ
KGNsaWVudFkpCisgICAgLCBtX3NjcmVlblgoc2NyZWVuWCkKKyAgICAsIG1fc2NyZWVuWShzY3Jl
ZW5ZKQorICAgICwgbV9wYWdlWChwYWdlWCkKKyAgICAsIG1fcGFnZVkocGFnZVkpCisgICAgLCBt
X3JhZGl1c1gocmFkaXVzWCkKKyAgICAsIG1fcmFkaXVzWShyYWRpdXNZKQorICAgICwgbV9yb3Rh
dGlvbkFuZ2xlKHJvdGF0aW9uQW5nbGUpCisgICAgLCBtX2ZvcmNlKGZvcmNlKQorICAgICwgbV9h
YnNvbHV0ZUxvY2F0aW9uKGFic29sdXRlTG9jYXRpb24pCit7Cit9CisKK1Bhc3NSZWZQdHI8VG91
Y2g+IFRvdWNoOjpjbG9uZVdpdGhOZXdUYXJnZXQoRXZlbnRUYXJnZXQqIGV2ZW50VGFyZ2V0KSBj
b25zdAoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVG91Y2goZXZlbnRUYXJnZXQsIG1faWRl
bnRpZmllciwgbV9jbGllbnRYLCBtX2NsaWVudFksIG1fc2NyZWVuWCwgbV9zY3JlZW5ZLCBtX3Bh
Z2VYLCBtX3BhZ2VZLCBtX3JhZGl1c1gsIG1fcmFkaXVzWSwgbV9yb3RhdGlvbkFuZ2xlLCBtX2Zv
cmNlLCBtX2Fic29sdXRlTG9jYXRpb24pKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaC5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL1RvdWNoLmgKaW5kZXggNjY4MjVmNWUzODNmMzQwNWU5N2ZmMmZiMDFhYWRl
OGQyYWNhMGNhOC4uYjg5NzlhNjUyZDZmOGM0YjQ5YjliODA4MmQwNjJmZjEzMjdlYmI2YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1RvdWNoLmgKQEAgLTYxLDEyICs2MSwxNyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgd2Via2l0
Um90YXRpb25BbmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm90YXRpb25BbmdsZTsgfQogICAgIGZs
b2F0IHdlYmtpdEZvcmNlKCkgY29uc3QgeyByZXR1cm4gbV9mb3JjZTsgfQogICAgIGNvbnN0IExh
eW91dFBvaW50JiBhYnNvbHV0ZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZUxv
Y2F0aW9uOyB9CisgICAgUGFzc1JlZlB0cjxUb3VjaD4gY2xvbmVXaXRoTmV3VGFyZ2V0KEV2ZW50
VGFyZ2V0KikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgVG91Y2goRnJhbWUqIGZyYW1lLCBFdmVu
dFRhcmdldCogdGFyZ2V0LCB1bnNpZ25lZCBpZGVudGlmaWVyLAogICAgICAgICAgICAgaW50IHNj
cmVlblgsIGludCBzY3JlZW5ZLCBpbnQgcGFnZVgsIGludCBwYWdlWSwKICAgICAgICAgICAgIGlu
dCByYWRpdXNYLCBpbnQgcmFkaXVzWSwgZmxvYXQgcm90YXRpb25BbmdsZSwgZmxvYXQgZm9yY2Up
OwogCisgICAgVG91Y2goRXZlbnRUYXJnZXQqLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBpbnQgY2xp
ZW50WCwgaW50IGNsaWVudFksCisgICAgICAgIGludCBzY3JlZW5YLCBpbnQgc2NyZWVuWSwgaW50
IHBhZ2VYLCBpbnQgcGFnZVksCisgICAgICAgIGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSwgZmxv
YXQgcm90YXRpb25BbmdsZSwgZmxvYXQgZm9yY2UsIExheW91dFBvaW50IGFic29sdXRlTG9jYXRp
b24pOworCiAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBtX3RhcmdldDsKICAgICB1bnNpZ25lZCBt
X2lkZW50aWZpZXI7CiAgICAgaW50IG1fY2xpZW50WDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ub3VjaEV2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaEV2ZW50LmNw
cAppbmRleCBhNThmMWRjYzllMjM4ZWJlYTQ2MmNmYTViNjU5NDc2ZTFiNjAzNmIzLi4yMzg5MTZh
ZjUxZmQ5OTMxMTA1NWI3OGFkZDk2MTE0MzgyNDQ2N2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vVG91Y2hFdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoRXZl
bnQuY3BwCkBAIC0zMCw3ICszMCw5IEBACiAKICNpbmNsdWRlICJUb3VjaEV2ZW50LmgiCiAKKyNp
bmNsdWRlICJFdmVudERpc3BhdGNoZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5j
bHVkZSAiRXZlbnRSZXRhcmdldGVyLmgiCiAjaW5jbHVkZSAiVG91Y2hMaXN0LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTk5LDYgKzEwMSwyNyBAQCBib29sIFRvdWNoRXZlbnQ6OmlzVG91
Y2hFdmVudCgpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK1Bhc3NSZWZQdHI8VG91Y2hF
dmVudERpc3BhdGNoTWVkaWF0b3I+IFRvdWNoRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpjcmVhdGUo
UGFzc1JlZlB0cjxUb3VjaEV2ZW50PiB0b3VjaEV2ZW50KQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgVG91Y2hFdmVudERpc3BhdGNoTWVkaWF0b3IodG91Y2hFdmVudCkpOworfQorCitUb3Vj
aEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6VG91Y2hFdmVudERpc3BhdGNoTWVkaWF0b3IoUGFzc1Jl
ZlB0cjxUb3VjaEV2ZW50PiB0b3VjaEV2ZW50KQorICAgIDogRXZlbnREaXNwYXRjaE1lZGlhdG9y
KHRvdWNoRXZlbnQpCit7Cit9CisKK1RvdWNoRXZlbnQqIFRvdWNoRXZlbnREaXNwYXRjaE1lZGlh
dG9yOjpldmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRvdWNoRXZlbnQq
PihFdmVudERpc3BhdGNoTWVkaWF0b3I6OmV2ZW50KCkpOworfQorCitib29sIFRvdWNoRXZlbnRE
aXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KEV2ZW50RGlzcGF0Y2hlciogZGlzcGF0Y2hl
cikgY29uc3QKK3sKKyAgICBFdmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvclRvdWNoRXZlbnQoZGlz
cGF0Y2hlci0+bm9kZSgpLCAqZXZlbnQoKSwgZGlzcGF0Y2hlci0+ZXZlbnRQYXRoKCkpOworICAg
IHJldHVybiBkaXNwYXRjaGVyLT5kaXNwYXRjaCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL1RvdWNoRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaEV2ZW50
LmgKaW5kZXggYjJlNWIyZWUzNDZiZDgwMDc1MmRiMTlkNmU4MjgxNDUwM2M4NGM3Ny4uNmMxMzlh
ODkzYmZhNzczOTM3ZmVjMzc4ZmQ0YTE2NTgzZDhlMDA2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1RvdWNoRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2hFdmVu
dC5oCkBAIC0yOSwxMiArMjksMTIgQEAKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAKKyNp
bmNsdWRlICJFdmVudERpc3BhdGNoTWVkaWF0b3IuaCIKICNpbmNsdWRlICJNb3VzZVJlbGF0ZWRF
dmVudC5oIgorI2luY2x1ZGUgIlRvdWNoTGlzdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIFRvdWNoTGlzdDsKLQogY2xhc3MgVG91Y2hFdmVudCA6IHB1YmxpYyBNb3VzZVJlbGF0
ZWRFdmVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+VG91Y2hFdmVudCgpOwpAQCAtNjMsNiAr
NjMsMTEgQEAgcHVibGljOgogICAgIFRvdWNoTGlzdCogdG91Y2hlcygpIGNvbnN0IHsgcmV0dXJu
IG1fdG91Y2hlcy5nZXQoKTsgfQogICAgIFRvdWNoTGlzdCogdGFyZ2V0VG91Y2hlcygpIGNvbnN0
IHsgcmV0dXJuIG1fdGFyZ2V0VG91Y2hlcy5nZXQoKTsgfQogICAgIFRvdWNoTGlzdCogY2hhbmdl
ZFRvdWNoZXMoKSBjb25zdCB7IHJldHVybiBtX2NoYW5nZWRUb3VjaGVzLmdldCgpOyB9CisKKyAg
ICB2b2lkIHNldFRvdWNoZXMoUGFzc1JlZlB0cjxUb3VjaExpc3Q+IHRvdWNoZXMpIHsgbV90b3Vj
aGVzID0gdG91Y2hlczsgfQorICAgIHZvaWQgc2V0VGFyZ2V0VG91Y2hlcyhQYXNzUmVmUHRyPFRv
dWNoTGlzdD4gdGFyZ2V0VG91Y2hlcykgeyBtX3RhcmdldFRvdWNoZXMgPSB0YXJnZXRUb3VjaGVz
OyB9CisgICAgdm9pZCBzZXRDaGFuZ2VkVG91Y2hlcyhQYXNzUmVmUHRyPFRvdWNoTGlzdD4gY2hh
bmdlZFRvdWNoZXMpIHsgbV9jaGFuZ2VkVG91Y2hlcyA9IGNoYW5nZWRUb3VjaGVzOyB9CisKICNp
ZiBQTEFURk9STShCTEFDS0JFUlJZKQogICAgIHZvaWQgc2V0RG91YmxlVGFwKGJvb2wgZG91Ymxl
VGFwKSB7IG1fZG91YmxlVGFwID0gZG91YmxlVGFwOyB9CiAgICAgYm9vbCBpc0RvdWJsZVRhcCgp
IGNvbnN0IHsgcmV0dXJuIG1fZG91YmxlVGFwOyB9CkBAIC05MCw2ICs5NSwyMiBAQCBwcml2YXRl
OgogI2VuZGlmCiB9OwogCitjbGFzcyBUb3VjaEV2ZW50RGlzcGF0Y2hNZWRpYXRvciA6IHB1Ymxp
YyBFdmVudERpc3BhdGNoTWVkaWF0b3IgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFRvdWNoRXZlbnREaXNwYXRjaE1lZGlhdG9yPiBjcmVhdGUoUGFzc1JlZlB0cjxUb3VjaEV2ZW50
Pik7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgVG91Y2hFdmVudERpc3BhdGNoTWVkaWF0b3Io
UGFzc1JlZlB0cjxUb3VjaEV2ZW50Pik7CisgICAgVG91Y2hFdmVudCogZXZlbnQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudERpc3BhdGNoZXIqKSBjb25zdCBP
VkVSUklERTsKK307CisKK2lubGluZSBUb3VjaEV2ZW50KiB0b1RvdWNoRXZlbnQoRXZlbnQqIGV2
ZW50KQoreworICAgIEFTU0VSVChldmVudCAmJiBldmVudC0+aXNUb3VjaEV2ZW50KCkpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUb3VjaEV2ZW50Kj4oZXZlbnQpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
VG91Y2hMaXN0LmNwcAppbmRleCA0MTY3ZTQyZTZkZmQwZmNjOGRiMjdjYjg5ZDNkZGU4ZDhlZTRh
OWY5Li45YWRkMjI4YTFkYmY4Mjg4NDQwZmFkZDdiNDU1YTkwM2E4NTJjYTdiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2hMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vVG91Y2hMaXN0LmNwcApAQCAtMzgsNiArMzgsMTEgQEAgVG91Y2gqIFRvdWNoTGlzdDo6aXRl
bSh1bnNpZ25lZCBpbmRleCkKICAgICByZXR1cm4gbV92YWx1ZXNbaW5kZXhdLmdldCgpOwogfQog
Citjb25zdCBUb3VjaCogVG91Y2hMaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAorewor
ICAgIHJldHVybiBjb25zdF9jYXN0PFRvdWNoTGlzdCo+KHRoaXMpLT5pdGVtKGluZGV4KTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ub3VjaExpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaExpc3QuaApp
bmRleCAyNTQ2OTU1NzFlZTA4YmIxNGM1N2JmZTk1ZWFkZGM3OGZmOTU2YWM2Li42MzliNzNjZTYz
OTcxM2VhMTI0OTA1YTI2ODJiMjdmNGVkNDVkYjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vVG91Y2hMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoTGlzdC5oCkBA
IC00NCw2ICs0NCw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KIAogICAgIFRvdWNoKiBpdGVtKHVuc2lnbmVkKTsKKyAg
ICBjb25zdCBUb3VjaCogaXRlbSh1bnNpZ25lZCkgY29uc3Q7CiAKICAgICB2b2lkIGFwcGVuZChj
b25zdCBQYXNzUmVmUHRyPFRvdWNoPiB0b3VjaCkgeyBtX3ZhbHVlcy5hcHBlbmQodG91Y2gpOyB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCAwZmZjYmE4NzFmNTE1M2E0
NGQyOTUxNGE5MGY4NTg1MTI5ODEwYTczLi44NTE1MGQ1NThkODRiNzEzNTFkMTI5MDdlMjY1YmRj
ZDY5YjNiODU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0zNzc3LDcg
KzM3NzcsNiBAQCBIaXRUZXN0UmVzdWx0IEV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3VsdEluRnJh
bWUoRnJhbWUqIGZyYW1lLCBjb25zdCBMYXlvdXRQb2ludAogICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAgICAgZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpLT5oaXRUZXN0KEhpdFRl
c3RSZXF1ZXN0KGhpdFR5cGUpLCByZXN1bHQpOwotICAgIHJlc3VsdC5zZXRUb05vblNoYWRvd0Fu
Y2VzdG9yKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzkyOCwxMCArMzkyNyw3IEBA
IGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hF
dmVudCYgZXZlbnQpCiAgICAgICAgIGludCBhZGp1c3RlZFBhZ2VYID0gbHJvdW5kZihwYWdlUG9p
bnQueCgpIC8gc2NhbGVGYWN0b3IpOwogICAgICAgICBpbnQgYWRqdXN0ZWRQYWdlWSA9IGxyb3Vu
ZGYocGFnZVBvaW50LnkoKSAvIHNjYWxlRmFjdG9yKTsKIAotICAgICAgICAvLyBGSVhNRTogSW5z
dGVhZCBvZiB0YWtpbmcgc2hhZG93IGFuY2VzdG9yLCBldmVudCByZXRhcmdldHRpbmcgYWxnb3Jp
dGhtIHNob3VsZCBydW4uCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDc4MDAKLSAgICAgICAgRXZlbnRUYXJnZXQqIGFkanVzdGVkVG91Y2hUYXJn
ZXQgPSBkb2MtPmFuY2VzdG9ySW5UaGlzU2NvcGUodG91Y2hUYXJnZXQuZ2V0KCktPnRvTm9kZSgp
KTsKLSAgICAgICAgUmVmUHRyPFRvdWNoPiB0b3VjaCA9IFRvdWNoOjpjcmVhdGUodGFyZ2V0RnJh
bWUsIGFkanVzdGVkVG91Y2hUYXJnZXQsIHBvaW50LmlkKCksCisgICAgICAgIFJlZlB0cjxUb3Vj
aD4gdG91Y2ggPSBUb3VjaDo6Y3JlYXRlKHRhcmdldEZyYW1lLCB0b3VjaFRhcmdldC5nZXQoKSwg
cG9pbnQuaWQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cG9pbnQuc2NyZWVuUG9zKCkueCgpLCBwb2ludC5zY3JlZW5Qb3MoKS55KCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdGVkUGFnZVgsIGFkanVzdGVk
UGFnZVksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50
LnJhZGl1c1goKSwgcG9pbnQucmFkaXVzWSgpLCBwb2ludC5yb3RhdGlvbkFuZ2xlKCksIHBvaW50
LmZvcmNlKCkpOwpAQCAtMzk4OCw3ICszOTg0LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRs
ZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCkKICAgICAgICAgICAg
ICAgICBUb3VjaEV2ZW50OjpjcmVhdGUoZWZmZWN0aXZlVG91Y2hlcy5nZXQoKSwgdGFyZ2V0VG91
Y2hlcy5nZXQoKSwgY2hhbmdlZFRvdWNoZXNbc3RhdGVdLm1fdG91Y2hlcy5nZXQoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVOYW1lLCB0b3VjaEV2ZW50VGFyZ2V0
LT50b05vZGUoKS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgZXZlbnQuY3RybEtleSgpLCBldmVudC5hbHRL
ZXkoKSwgZXZlbnQuc2hpZnRLZXkoKSwgZXZlbnQubWV0YUtleSgpKTsKLSAgICAgICAgICAgIHRv
dWNoRXZlbnRUYXJnZXQtPmRpc3BhdGNoRXZlbnQodG91Y2hFdmVudC5nZXQoKSwgSUdOT1JFX0VY
Q0VQVElPTik7CisgICAgICAgICAgICB0b3VjaEV2ZW50VGFyZ2V0LT50b05vZGUoKS0+ZGlzcGF0
Y2hUb3VjaEV2ZW50KHRvdWNoRXZlbnQuZ2V0KCkpOwogICAgICAgICAgICAgc3dhbGxvd2VkRXZl
bnQgPSBzd2FsbG93ZWRFdmVudCB8fCB0b3VjaEV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkgfHwg
dG91Y2hFdmVudC0+ZGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAy
NTM0ODE4ZTI4MDMwZTk0NGQwMjBhY2U4ZjU0MWRkNDA3N2M5NzcyLi4yNzgwNmRiMDVkMjk1N2E1
ZGFmMWQxOTM1Nzc3Mzg2OTRiNjJkMjZiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTMtMDMt
MDUgIEhheWF0byBJdG8gIDxoYXlhdG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtTaGFkb3dd
IEltcGxlbWVudHMgZXZlbnQgcmUtdGFyZ2V0aW5nIGZvciBUb3VjaCBFdmVudHMuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc4MDAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZG9tL3NoYWRv
dy9yZXNvdXJjZXMvZXZlbnQtZGlzcGF0Y2hpbmcuanM6CisgICAgICAgIChyZWNvcmRFdmVudCk6
CisgICAgICAgIChkdW1wVG91Y2hMaXN0KToKKyAgICAgICAgKHNvcnREaXNwYXRjaGVkRXZlbnQp
OgorICAgICAgICAoc2hvd1NhbmRib3hUcmVlKToKKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cv
c2hhZG93LWRvbS1ldmVudC1kaXNwYXRjaGluZy1kaXN0cmlidXRlZC10ZXh0LW5vZGUtZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZG9tLWV2ZW50LWRpc3Bh
dGNoaW5nLWRpc3RyaWJ1dGVkLXRleHQtbm9kZS5odG1sOgorICAgICAgICAqIGZhc3QvZG9tL3No
YWRvdy9zaGFkb3ctZG9tLWV2ZW50LWRpc3BhdGNoaW5nLXRleHQtbm9kZS1pbi1zaGFkb3ctcm9v
dC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3RvdWNoLWV2ZW50LXJl
dGFyZ2V0aW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2hhZG93
L3RvdWNoLWV2ZW50LXJldGFyZ2V0aW5nLmh0bWw6IEFkZGVkLgorCiAyMDEzLTAzLTAzICBTaGVy
aWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByMTQ0NTY3LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9k
b20vc2hhZG93L3Jlc291cmNlcy9ldmVudC1kaXNwYXRjaGluZy5qcyBiL0xheW91dFRlc3RzL2Zh
c3QvZG9tL3NoYWRvdy9yZXNvdXJjZXMvZXZlbnQtZGlzcGF0Y2hpbmcuanMKaW5kZXggYmVkM2Yw
NjNmMzMzZWJhYTA4ZTg5MjFiZmU3NTVhOTIzMjk5NzEzNy4uYTNiNzgyZmQwMGZmYzBhNGE4MTUw
OTExZTUwMTQ2NjAyZTMyZjZjZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hh
ZG93L3Jlc291cmNlcy9ldmVudC1kaXNwYXRjaGluZy5qcworKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9zaGFkb3cvcmVzb3VyY2VzL2V2ZW50LWRpc3BhdGNoaW5nLmpzCkBAIC02OCw5ICs2OCw5
IEBAIGZ1bmN0aW9uIGRpc3BhdGNoZWRFdmVudChldmVudFR5cGUpCiAKIGZ1bmN0aW9uIHJlY29y
ZEV2ZW50KGV2ZW50KQogewotICAgIHZhciBldmVudFR5cGUgPSBldmVudC50eXBlCisgICAgdmFy
IGV2ZW50VHlwZSA9IGV2ZW50LnR5cGU7CiAgICAgaWYgKCFldmVudFJlY29yZHNbZXZlbnRUeXBl
XSkgewotICAgICAgICBldmVudFJlY29yZHNbZXZlbnRUeXBlXSA9IFtdCisgICAgICAgIGV2ZW50
UmVjb3Jkc1tldmVudFR5cGVdID0gW107CiAgICAgfQogICAgIHZhciBldmVudFN0cmluZyA9ICcn
OwogICAgIGlmIChldmVudC5jdXJyZW50VGFyZ2V0KQpAQCAtNzksNiArNzksMTIgQEAgZnVuY3Rp
b24gcmVjb3JkRXZlbnQoZXZlbnQpCiAgICAgICAgIGV2ZW50U3RyaW5nICs9ICcgKHRhcmdldDog
JyArIGV2ZW50LnRhcmdldC5pZCArICcpJzsKICAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCkK
ICAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyAocmVsYXRlZDogJyArIGV2ZW50LnJlbGF0ZWRUYXJn
ZXQuaWQgKyAnKSc7CisgICAgaWYgKGV2ZW50LnRvdWNoZXMpCisgICAgICAgIGV2ZW50U3RyaW5n
ICs9ICcgKHRvdWNoZXM6ICcgKyBkdW1wVG91Y2hMaXN0KGV2ZW50LnRvdWNoZXMpICsgJyknOwor
ICAgIGlmIChldmVudC50YXJnZXRUb3VjaGVzKQorICAgICAgICBldmVudFN0cmluZyArPSAnICh0
YXJnZXRUb3VjaGVzOiAnICsgZHVtcFRvdWNoTGlzdChldmVudC50YXJnZXRUb3VjaGVzKSArICcp
JzsKKyAgICBpZiAoZXZlbnQuY2hhbmdlZFRvdWNoZXMpCisgICAgICAgIGV2ZW50U3RyaW5nICs9
ICcgKGNoYW5nZWRUb3VjaGVzOiAnICsgZHVtcFRvdWNoTGlzdChldmVudC5jaGFuZ2VkVG91Y2hl
cykgKyAnKSc7CiAgICAgaWYgKGV2ZW50LmV2ZW50UGhhc2UgPT0gMSkKICAgICAgICAgZXZlbnRT
dHJpbmcgKz0gJyhjYXB0dXJpbmcgcGhhc2UpJzsKICAgICBpZiAoZXZlbnQudGFyZ2V0ICYmIGV2
ZW50LmN1cnJlbnRUYXJnZXQgJiYgZXZlbnQudGFyZ2V0LmlkID09IGV2ZW50LmN1cnJlbnRUYXJn
ZXQuaWQpCkBAIC05Niw2ICsxMDIsMjIgQEAgZnVuY3Rpb24gZHVtcE5vZGUobm9kZSkKICAgICBy
ZXR1cm4gb3V0cHV0OwogfQogCitmdW5jdGlvbiBkdW1wVG91Y2hMaXN0KHRvdWNoZXMpIHsKKyAg
ICB2YXIgaWRzID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3VjaGVzLmxlbmd0aDsg
KytpKSB7CisgICAgICAgIGlmICh0b3VjaGVzLml0ZW0oaSkudGFyZ2V0ICYmIHRvdWNoZXMuaXRl
bShpKS50YXJnZXQuaWQpCisgICAgICAgICAgICBpZHMucHVzaCh0b3VjaGVzLml0ZW0oaSkudGFy
Z2V0LmlkKTsKKyAgICB9CisgICAgaWRzLnNvcnQoKTsKKyAgICB2YXIgcmVzdWx0ID0gJyc7Cisg
ICAgZm9yIChpID0gMDsgaSA8IGlkcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgcmVzdWx0ICs9
IGlkc1tpXTsKKyAgICAgICAgIGlmIChpICE9IGlkcy5sZW5ndGggLSAxKQorICAgICAgICAgICAg
IHJlc3VsdCArPSAnLCAnOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBmdW5jdGlv
biBkdW1wQ29tcG9zZWRTaGFkb3dUcmVlKG5vZGUsIGluZGVudCkKIHsKICAgICBpbmRlbnQgPSBp
bmRlbnQgfHwgIiI7CkBAIC0xMzAsNiArMTUyLDExIEBAIGZ1bmN0aW9uIGRlYnVnRGlzcGF0Y2hl
ZEV2ZW50KGV2ZW50VHlwZSkKICAgICAgICAgZGVidWcoJyAgICAnICsgZXZlbnRzW2ldKQogfQog
CitmdW5jdGlvbiBzb3J0RGlzcGF0Y2hlZEV2ZW50KGV2ZW50VHlwZSkKK3sKKyAgICBkaXNwYXRj
aGVkRXZlbnQoZXZlbnRUeXBlKS5zb3J0KCk7Cit9CisKIGZ1bmN0aW9uIG1vdmVNb3VzZShvbGRF
bGVtZW50SWQsIG5ld0VsZW1lbnRJZCkKIHsKICAgICBjbGVhckV2ZW50UmVjb3JkcygpOwpAQCAt
MTQ5LDQgKzE3NiwzIEBAIGZ1bmN0aW9uIHNob3dTYW5kYm94VHJlZSgpCiAgICAgc2FuZGJveC5v
ZmZzZXRMZWZ0OwogICAgIGRlYnVnKCdcblxuQ29tcG9zZWQgU2hhZG93IFRyZWUgd2lsbCBiZTpc
bicgKyBkdW1wQ29tcG9zZWRTaGFkb3dUcmVlKHNhbmRib3gpKTsKIH0KLQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hpbmct
ZGlzdHJpYnV0ZWQtdGV4dC1ub2RlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3NoYWRvdy9zaGFkb3ctZG9tLWV2ZW50LWRpc3BhdGNoaW5nLWRpc3RyaWJ1dGVkLXRleHQtbm9k
ZS1leHBlY3RlZC50eHQKaW5kZXggOWEwNzY0MDJkMjk1ODg1ODVhMGIwZGU0NTlhNTM5NDMxZTE5
MGUxMC4uMzI5N2YyZjFiYTQ5NTQ4MTU5NDJiNTljZGZiNDI0ZTM5N2RlNWRiZSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hp
bmctZGlzdHJpYnV0ZWQtdGV4dC1ub2RlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9zaGFkb3cvc2hhZG93LWRvbS1ldmVudC1kaXNwYXRjaGluZy1kaXN0cmlidXRlZC10
ZXh0LW5vZGUtZXhwZWN0ZWQudHh0CkBAIC0yMSwxNyArMjEsMTcgQEAgTW92aW5nIG1vdXNlIGZy
b20gYSBkaXN0cmlidXRlZCB0ZXh0IG5vZGUgdG8gdG9wCiAgIG1vdXNlb3ZlcgogICAgICBAdG9w
ICh0YXJnZXQ6IHRvcCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQogCi0gIHRvdWNoc3RhcnQKLSAg
ICAgQGNvbnRlbnQgKHRhcmdldDogY29udGVudCkKLSAgICAgQHNoYWRvdy1yb290ICh0YXJnZXQ6
IGNvbnRlbnQpCi0gICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkKLSAgICAg
QHRvcCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkKLQogICBtb3VzZXdoZWVsCiAgICAgIEBjb250ZW50
ICh0YXJnZXQ6IGNvbnRlbnQpCiAgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBjb250ZW50KQog
ICAgICBAc2hhZG93LWhvc3QgKHRhcmdldDogc2hhZG93LWhvc3QpCiAgICAgIEB0b3AgKHRhcmdl
dDogc2hhZG93LWhvc3QpCisKKyAgdG91Y2hzdGFydAorICAgICBAY29udGVudCAodGFyZ2V0OiBj
b250ZW50KSAodG91Y2hlczogY29udGVudCkgKHRhcmdldFRvdWNoZXM6IGNvbnRlbnQpIChjaGFu
Z2VkVG91Y2hlczogY29udGVudCkKKyAgICAgQHNoYWRvdy1yb290ICh0YXJnZXQ6IGNvbnRlbnQp
ICh0b3VjaGVzOiBjb250ZW50KSAodGFyZ2V0VG91Y2hlczogY29udGVudCkgKGNoYW5nZWRUb3Vj
aGVzOiBjb250ZW50KQorICAgICBAc2hhZG93LWhvc3QgKHRhcmdldDogc2hhZG93LWhvc3QpICh0
b3VjaGVzOiBzaGFkb3ctaG9zdCkgKHRhcmdldFRvdWNoZXM6IHNoYWRvdy1ob3N0KSAoY2hhbmdl
ZFRvdWNoZXM6IHNoYWRvdy1ob3N0KQorICAgICBAdG9wICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAo
dG91Y2hlczogc2hhZG93LWhvc3QpICh0YXJnZXRUb3VjaGVzOiBzaGFkb3ctaG9zdCkgKGNoYW5n
ZWRUb3VjaGVzOiBzaGFkb3ctaG9zdCkKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
IAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93
L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hpbmctZGlzdHJpYnV0ZWQtdGV4dC1ub2RlLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWRvbS1ldmVudC1kaXNwYXRjaGlu
Zy1kaXN0cmlidXRlZC10ZXh0LW5vZGUuaHRtbAppbmRleCAyNzVhZDg3NGJlZmYyYzg4OGUzMDMw
OTY4MTYwY2M4NjJjN2EzNTRhLi5lMjIxMjFkZWVlZDVkYzY3NmM2MTRlNDdkMDg5ZTI0Mzg2ZDFj
NDY3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWRvbS1l
dmVudC1kaXNwYXRjaGluZy1kaXN0cmlidXRlZC10ZXh0LW5vZGUuaHRtbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWRvbS1ldmVudC1kaXNwYXRjaGluZy1kaXN0cmli
dXRlZC10ZXh0LW5vZGUuaHRtbApAQCAtMzUsMTMgKzM1LDE0IEBACiAgICAgICAgIGRlYnVnRGlz
cGF0Y2hlZEV2ZW50KCdtb3VzZW91dCcpOwogICAgICAgICBkZWJ1Z0Rpc3BhdGNoZWRFdmVudCgn
bW91c2VvdmVyJyk7CiAKLSAgICAgICAgdG91Y2hMb2NhdGlvbihob3N0KTsKLSAgICAgICAgZGVi
dWdEaXNwYXRjaGVkRXZlbnQoJ3RvdWNoc3RhcnQnKTsKLQorICAgICAgICBjbGVhckV2ZW50UmVj
b3JkcygpOwogICAgICAgICBzY3JvbGxNb3VzZVdoZWVsKGhvc3QpOwogICAgICAgICBkZWJ1Z0Rp
c3BhdGNoZWRFdmVudCgnbW91c2V3aGVlbCcpOworCisgICAgICAgIGNsZWFyRXZlbnRSZWNvcmRz
KCk7CisgICAgICAgIHRvdWNoTG9jYXRpb24oaG9zdCk7CisgICAgICAgIGRlYnVnRGlzcGF0Y2hl
ZEV2ZW50KCd0b3VjaHN0YXJ0Jyk7CiAgICAgPC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ii4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgogPC9ib2R5PgogPC9o
dG1sPgotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWRv
bS1ldmVudC1kaXNwYXRjaGluZy10ZXh0LW5vZGUtaW4tc2hhZG93LXJvb3QtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hp
bmctdGV4dC1ub2RlLWluLXNoYWRvdy1yb290LWV4cGVjdGVkLnR4dAppbmRleCA3NzNjZTliYzhk
NjIzYzE1NWVmYTZlZTAzMGNmN2M5NzhhNmI2ZjQ4Li4xY2VlMGIwNmMyOTNjZThhZTRiMjI5YTEw
YTBmMTA5ZmY3ZGYzNDgwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cv
c2hhZG93LWRvbS1ldmVudC1kaXNwYXRjaGluZy10ZXh0LW5vZGUtaW4tc2hhZG93LXJvb3QtZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZG9tLWV2
ZW50LWRpc3BhdGNoaW5nLXRleHQtbm9kZS1pbi1zaGFkb3ctcm9vdC1leHBlY3RlZC50eHQKQEAg
LTIyLDkgKzIyLDkgQEAgTW92aW5nIG1vdXNlIGZyb20gYSBkaXJlY3QgY2hpbGQgdGV4dCBub2Rl
IG9mIHRoZSBzaGFkb3cgcm9vdCB0byB0b3AKICAgICAgQHRvcCAodGFyZ2V0OiB0b3ApIChyZWxh
dGVkOiBzaGFkb3ctaG9zdCkKIAogICB0b3VjaHN0YXJ0Ci0gICAgIEBzaGFkb3ctcm9vdCAodGFy
Z2V0OiBzaGFkb3ctcm9vdCkKLSAgICAgQHNoYWRvdy1ob3N0ICh0YXJnZXQ6IHNoYWRvdy1ob3N0
KQotICAgICBAdG9wICh0YXJnZXQ6IHNoYWRvdy1ob3N0KQorICAgICBAc2hhZG93LXJvb3QgKHRh
cmdldDogc2hhZG93LXJvb3QpICh0b3VjaGVzOiBzaGFkb3ctcm9vdCkgKHRhcmdldFRvdWNoZXM6
IHNoYWRvdy1yb290KSAoY2hhbmdlZFRvdWNoZXM6IHNoYWRvdy1yb290KQorICAgICBAc2hhZG93
LWhvc3QgKHRhcmdldDogc2hhZG93LWhvc3QpICh0b3VjaGVzOiBzaGFkb3ctaG9zdCkgKHRhcmdl
dFRvdWNoZXM6IHNoYWRvdy1ob3N0KSAoY2hhbmdlZFRvdWNoZXM6IHNoYWRvdy1ob3N0KQorICAg
ICBAdG9wICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAodG91Y2hlczogc2hhZG93LWhvc3QpICh0YXJn
ZXRUb3VjaGVzOiBzaGFkb3ctaG9zdCkgKGNoYW5nZWRUb3VjaGVzOiBzaGFkb3ctaG9zdCkKIAog
ICBtb3VzZXdoZWVsCiAgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBzaGFkb3ctcm9vdCkKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy90b3VjaC1ldmVudC1yZXRhcmdl
dGluZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdG91Y2gtZXZl
bnQtcmV0YXJnZXRpbmctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjMzkyYzNhZjZmMDI5ZGI3
NTFhZmRhNTk0MTZkMGE1Zjk4ZTQ1NGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9zaGFkb3cvdG91Y2gtZXZlbnQtcmV0YXJnZXRpbmctZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsMTkgQEAKK1Rlc3RzIHRvIGVuc3VyZSB0aGF0IGV2ZW50IGRpc3BhdGNoaW5nIGJlaGF2
ZXMgYXMgdGhlIFNoYWRvdyBET00gc3BlYyBkZXNjcmliZXMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCisKKyAgdG91Y2hzdGFydAorICAgICBAZGl2MSAodGFyZ2V0OiBkaXYxKSAo
dG91Y2hlczogZGl2MSwgZGl2MiwgZGl2MykgKHRhcmdldFRvdWNoZXM6IGRpdjEpIChjaGFuZ2Vk
VG91Y2hlczogZGl2MSwgZGl2MiwgZGl2MykKKyAgICAgQGRpdjIgKHRhcmdldDogZGl2MikgKHRv
dWNoZXM6IGRpdjEsIGRpdjIsIGRpdjMpICh0YXJnZXRUb3VjaGVzOiBkaXYyKSAoY2hhbmdlZFRv
dWNoZXM6IGRpdjEsIGRpdjIsIGRpdjMpCisgICAgIEBkaXYyLXNoYWRvdy1yb290LWNoaWxkICh0
YXJnZXQ6IGRpdjItc2hhZG93LXJvb3QtY2hpbGQpICh0b3VjaGVzOiBkaXYxLCBkaXYyLXNoYWRv
dy1yb290LWNoaWxkLCBkaXYzKSAodGFyZ2V0VG91Y2hlczogZGl2Mi1zaGFkb3ctcm9vdC1jaGls
ZCkgKGNoYW5nZWRUb3VjaGVzOiBkaXYxLCBkaXYyLXNoYWRvdy1yb290LWNoaWxkLCBkaXYzKQor
ICAgICBAZGl2MyAodGFyZ2V0OiBkaXYzKSAodG91Y2hlczogZGl2MSwgZGl2MiwgZGl2MykgKHRh
cmdldFRvdWNoZXM6IGRpdjMpIChjaGFuZ2VkVG91Y2hlczogZGl2MSwgZGl2MiwgZGl2MykKKyAg
ICAgQGRpdjMtc2hhZG93LXJvb3QtY2hpbGQgKHRhcmdldDogZGl2My1zaGFkb3ctcm9vdC1jaGls
ZCkgKHRvdWNoZXM6IGRpdjEsIGRpdjIsIGRpdjMtc2hhZG93LXJvb3QtY2hpbGQpICh0YXJnZXRU
b3VjaGVzOiBkaXYzLXNoYWRvdy1yb290LWNoaWxkKSAoY2hhbmdlZFRvdWNoZXM6IGRpdjEsIGRp
djIsIGRpdjMtc2hhZG93LXJvb3QtY2hpbGQpCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKK1RvdWNoIGV2ZW50IHJldGFyZ2V0aW5nLgorCitmb28KKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3RvdWNoLWV2ZW50LXJldGFy
Z2V0aW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdG91Y2gtZXZlbnQtcmV0
YXJnZXRpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NDkxMmJlNjIxYjY5NGQxMTAwOGM5OGU3NDM4YTdk
NjQxNTVhNTc3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93
L3RvdWNoLWV2ZW50LXJldGFyZ2V0aW5nLmh0bWwKQEAgLTAsMCArMSw2MCBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
c2hhZG93LWRvbS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9ldmVu
dC1kaXNwYXRjaGluZy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRvdWNoIGV2
ZW50IHJldGFyZ2V0aW5nLjwvcD4KKzxkaXYgaWQ9InNhbmRib3giPgorPC9kaXY+Cis8cHJlIGlk
PSJjb25zb2xlIj48L3ByZT4KKworPHNjcmlwdD4KK3NhbmRib3guYXBwZW5kQ2hpbGQoCisgICAg
Y3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ2NvbnRhaW5lcid9LAorICAgICAgICAgICAgICBjcmVh
dGVET00oJ2RpdicsIHsnaWQnOiAnZGl2MSd9LAorICAgICAgICAgICAgICAgICAgICAgICAgZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUoJ2ZvbycpKSwKKyAgICAgICAgICAgICAgY3JlYXRlRE9NKCdk
aXYnLCB7J2lkJzogJ2RpdjInfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVNoYWRv
d1Jvb3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7fSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoJ2ZvbycpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2Rp
dicsIHsnaWQnOiAnZGl2Mi1zaGFkb3ctcm9vdC1jaGlsZCd9LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnZm9vJykpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2Jywge30sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdmb28n
KSkpKSwKKyAgICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ2RpdjMnfSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVNoYWRvd1Jvb3QoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7fSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ2ZvbycpKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnZGl2My1zaGFkb3ct
cm9vdC1jaGlsZCd9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZSgnZm9vJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNyZWF0ZURPTSgnZGl2Jywge30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdmb28nKSkpKSkpOworCitzYW5kYm94Lm9mZnNl
dExlZnQ7CisKK2Z1bmN0aW9uIGFkZFRvdWNoUG9pbnQodGFyZ2V0KQoreworICAgIGV2ZW50U2Vu
ZGVyLmFkZFRvdWNoUG9pbnQodGFyZ2V0Lm9mZnNldExlZnQgKyB0YXJnZXQub2Zmc2V0V2lkdGgg
LyAyLCB0YXJnZXQub2Zmc2V0VG9wICsgdGFyZ2V0Lm9mZnNldEhlaWdodCAvIDIpOworfQorCitm
dW5jdGlvbiBzZW5kVG91Y2hFdmVudChlbGVtZW50cykKK3sKKyAgICBldmVudFNlbmRlci5jbGVh
clRvdWNoUG9pbnRzKCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7
ICsraSkKKyAgICAgICAgYWRkVG91Y2hQb2ludChnZXROb2RlSW5TaGFkb3dUcmVlU3RhY2soZWxl
bWVudHNbaV0pKTsKKyAgICBldmVudFNlbmRlci50b3VjaFN0YXJ0KCk7CisgICAgZXZlbnRTZW5k
ZXIudG91Y2hFbmQoKTsKK30KKworYWRkRXZlbnRMaXN0ZW5lcnMoWydkaXYxJywgJ2RpdjInLCAn
ZGl2MycsCisgICAgICAgICAgICAgICAgICAgJ2RpdjIvZGl2Mi1zaGFkb3ctcm9vdC1jaGlsZCcs
ICdkaXYzL2RpdjMtc2hhZG93LXJvb3QtY2hpbGQnXSk7CitzZW5kVG91Y2hFdmVudChbJ2RpdjEn
LCAnZGl2Mi9kaXYyLXNoYWRvdy1yb290LWNoaWxkJywgJ2RpdjMvZGl2My1zaGFkb3ctcm9vdC1j
aGlsZCddKTsKK3NvcnREaXNwYXRjaGVkRXZlbnQoJ3RvdWNoc3RhcnQnKTsKK2RlYnVnRGlzcGF0
Y2hlZEV2ZW50KCd0b3VjaHN0YXJ0Jyk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191447</attachid>
            <date>2013-03-05 02:46:09 -0800</date>
            <delta_ts>2013-03-05 17:25:38 -0800</delta_ts>
            <desc>Fix a build hopefully</desc>
            <filename>bug-107800-20130305194216.patch</filename>
            <type>text/plain</type>
            <size>38430</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0Njc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzE4ZjcyZDQ2OTU0ZTBm
NTMwN2I0MjEyNTYyZTc3MTYzYWQ1YjZmYi4uY2YyYWJlNjQ4YzUzNzFmZjcwNmNmZjJmZGFiNjEy
MmZkZDhhYTE4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkzIEBACisyMDEzLTAzLTA1ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBbU2hhZG93XSBJbXBsZW1l
bnRzIGV2ZW50IHJlLXRhcmdldGluZyBmb3IgVG91Y2ggRXZlbnRzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3ODAwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU28gZmFyLCBUb3VjaCBFdmVudHMgaGF2
ZSBiZWVuIGludGVudGlvbmFsbHkgZGlzYWJsZWQgaW4gc2hhZG93CisgICAgICAgIHRyZWUgc2lu
Y2UgaXQgYWxsb3dzIHVzZXJzIHRvIGFjY2VzcyBpbnRlcm5hbCBub2RlcyBpbiBzaGFkb3cgdHJl
ZQorICAgICAgICBieSBhY2Nlc3NpbmcgVG91Y2ggRXZlbnQncyBpbmZvcm1hdGlvbi4KKworICAg
ICAgICBUaGlzIHBhdGNoIHJlLXRhcmdldHMgYWxsIGluZGl2aWR1YWwgdG91Y2ggcG9pbnQncyB0
YXJnZXQgaW4KKyAgICAgICAgVG91Y2hMaXN0ICh0b3VjaGVzLCB0YXJnZXRUb3VjaGVzIGFuZCBj
aGFuZ2VkVG91Y2hlcykgb3duZWQgYnkgYSBUb3VjaCBFdmVudAorICAgICAgICBiZWZvcmUgdGhl
IFRvdWNoIEV2ZW50IGlzIGRpc3BhdGNoZWQgc28gdGhhdCB3ZSB3b24ndCBicmVhayBhbgorICAg
ICAgICB1cHBlciBib3VuZGFyeSBvZiBzaGFkb3cgRE9NLgorCisgICAgICAgIFRvdWNoIEV2ZW50
cyByZS10YXJnZXRpbmcgaXMgc2ltaWxhciB0byB0aGF0IG9mIE1vdXNlIEV2ZW50cworICAgICAg
ICByZS10YXJnZXRpbmcuIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgYSBUb3VjaCBFdmVudCBjYW4g
aGF2ZSBtb3JlCisgICAgICAgIHRoYW4gb25lIHJlbGF0ZWQgdGFyZ2V0IGJlY2F1c2Ugb2YgbXVs
dGlwbGUgdG91Y2hlcy4gV2UgbXVzdAorICAgICAgICByZS10YXJnZXQgYWxsIGluZGl2aWR1YWwg
dG91Y2ggcG9pbnRzIHdoaWNoIGNhbiBiZSByZWZlcnJlZCBmcm9tCisgICAgICAgIHRoZSBUb3Vj
aCBFdmVudC4KKworICAgICAgICBOb3csIFRvdWNoIEV2ZW50cyBjYW4gYmUgZmlyZWQgaW4gc2hh
ZG93IHRyZWUuIEkndmUgcmVtb3ZlZCB0aGUKKyAgICAgICAgZXhpc3RpbmcgbGltaXRhdGlvbi4K
KworICAgICAgICBUZXN0OiBmYXN0L2RvbS9zaGFkb3cvdG91Y2gtZXZlbnQtcmV0YXJnZXRpbmcu
aHRtbAorCisgICAgICAgICogZG9tL0V2ZW50Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudENvbnRleHQ6OmlzVG91Y2hFdmVudENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50Q29udGV4dDo6VG91Y2hFdmVudENvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hFdmVudENvbnRleHQ6On5Ub3VjaEV2ZW50Q29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hFdmVudENvbnRleHQ6OmlzVG91Y2hFdmVudENv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hFdmVudENvbnRleHQ6OmNoZWNrUmVhY2hh
YmlsaXR5KTogIFVzZWQgZm9yIGFzc2VydGlvbiBvZiByZWFjaGFiaWxpdHkgZm9yIGVhY2ggVG91
Y2ggcG9pbnQuCisgICAgICAgICogZG9tL0V2ZW50Q29udGV4dC5oOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChFdmVudENvbnRleHQpOgorICAgICAgICAoVG91Y2hFdmVudENvbnRleHQp
OiBJbnRyb2R1Y2VkIHRvIGhvbGQgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZvciByZS10YXJnZXRp
bmcgVG91Y2ggZXZlbnQuCisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50Q29udGV4dDo6dG91
Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50Q29udGV4dDo6dGFyZ2V0VG91Y2hl
cyk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50Q29udGV4dDo6Y2hhbmdlZFRvdWNoZXMp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0Ojppc1JlYWNoYWJsZSk6CisgICAgICAg
ICogZG9tL0V2ZW50UmV0YXJnZXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFJldGFy
Z2V0ZXI6OmNhbGN1bGF0ZUV2ZW50UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFJldGFy
Z2V0ZXI6OmFkanVzdEZvclRvdWNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudFJldGFyZ2V0ZXI6OmFkanVzdFRvdWNoTGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvclJlbGF0ZWRUYXJnZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRSZXRhcmdldGVyOjpjYWxjdWxhdGVBZGp1c3RlZE5vZGVzKTogVXBk
YXRlZCBzbyB0aGF0IHRoaXMgY2FuIGJlIHVzZWQgZm9yIFRvdWNoIHBvaW50IHJlLXRhcmdldGlu
Zy4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UmV0YXJnZXRlcjo6YnVpbGRSZWxhdGVkTm9kZU1h
cCk6CisgICAgICAgICogZG9tL0V2ZW50UmV0YXJnZXRlci5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChFdmVudFJldGFyZ2V0ZXIpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkaXNwYXRjaFRvdWNoRXZlbnQpOgorICAgICAgICAq
IGRvbS9Ob2RlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKE5vZGUpOgorICAgICAg
ICAqIGRvbS9Ub3VjaC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaDo6VG91Y2gpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaDo6Y2xvbmVXaXRoTmV3VGFy
Z2V0KToKKyAgICAgICAgKiBkb20vVG91Y2guaDoKKyAgICAgICAgKFRvdWNoKToKKyAgICAgICAg
KiBkb20vVG91Y2hFdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50RGlzcGF0
Y2hNZWRpYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6VG91Y2hFdmVudERpc3BhdGNoTWVkaWF0b3I6OlRvdWNoRXZlbnREaXNwYXRjaE1lZGlhdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpldmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hF
dmVudCk6CisgICAgICAgICogZG9tL1RvdWNoRXZlbnQuaDoKKyAgICAgICAgKFRvdWNoRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hFdmVudDo6c2V0VG91Y2hlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpUb3VjaEV2ZW50OjpzZXRUYXJnZXRUb3VjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlRvdWNoRXZlbnQ6OnNldENoYW5nZWRUb3VjaGVzKToKKyAgICAgICAgKFRvdWNoRXZlbnREaXNw
YXRjaE1lZGlhdG9yKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6dG9U
b3VjaEV2ZW50KToKKyAgICAgICAgKiBkb20vVG91Y2hMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRvdWNoTGlzdDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBkb20v
VG91Y2hMaXN0Lmg6CisgICAgICAgIChUb3VjaExpc3QpOgorICAgICAgICAqIHBhZ2UvRXZlbnRI
YW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3Vs
dEluRnJhbWUpOiBSZW1vdmVkIHRoZSBsaW1pdGF0aW9uLiBBZGp1c3RpbmcgaXMgbm8gbG9uZ2Vy
IGRvbmUgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hF
dmVudCk6CisKIDIwMTMtMDMtMDQgIFZpY3RvciBDb3N0YW4gPGNvc3RhbkBnbWFpbC5jb20+CiAK
ICAgICAgICAgRmlsZW5hbWUgcGFzc2VkIHRvIEZvcm1EYXRhLmFwcGVuZCgpIHRha2VzIHByZWNl
ZGVuY2Ugb3ZlciBmaWxlbmFtZSBpbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmNwcAppbmRl
eCAyODk3YzdkODlhYzY4M2NiMWY5ZDQzOGEyOWZjZWFmZTUxZjNlZGJiLi41NjU0M2E3NmVjYjYw
MWQ5ZDg3YzZkMzZkOWFiNTE2ZjI4NzUzNDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0
LmNwcApAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgIkZvY3VzRXZlbnQuaCIKICNpbmNsdWRl
ICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlRvdWNoRXZlbnQu
aCIKKyNpbmNsdWRlICJUb3VjaExpc3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02
MSw2ICs2MywxMSBAQCBib29sIEV2ZW50Q29udGV4dDo6aXNNb3VzZU9yRm9jdXNFdmVudENvbnRl
eHQoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBFdmVudENvbnRleHQ6Omlz
VG91Y2hFdmVudENvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwogTW91
c2VPckZvY3VzRXZlbnRDb250ZXh0OjpNb3VzZU9yRm9jdXNFdmVudENvbnRleHQoUGFzc1JlZlB0
cjxOb2RlPiBub2RlLCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBjdXJyZW50VGFyZ2V0LCBQYXNz
UmVmUHRyPEV2ZW50VGFyZ2V0PiB0YXJnZXQpCiAgICAgOiBFdmVudENvbnRleHQobm9kZSwgY3Vy
cmVudFRhcmdldCwgdGFyZ2V0KQogICAgICwgbV9yZWxhdGVkVGFyZ2V0KDApCkBAIC04Niw0ICs5
Myw0NyBAQCBib29sIE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dDo6aXNNb3VzZU9yRm9jdXNFdmVu
dENvbnRleHQoKSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCisjaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKK1RvdWNoRXZlbnRDb250ZXh0OjpUb3VjaEV2ZW50Q29udGV4dChQYXNzUmVmUHRy
PE5vZGU+IG5vZGUsIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IGN1cnJlbnRUYXJnZXQsIFBhc3NS
ZWZQdHI8RXZlbnRUYXJnZXQ+IHRhcmdldCkKKyAgICA6IEV2ZW50Q29udGV4dChub2RlLCBjdXJy
ZW50VGFyZ2V0LCB0YXJnZXQpCisgICAgLCBtX3RvdWNoZXMoVG91Y2hMaXN0OjpjcmVhdGUoKSkK
KyAgICAsIG1fdGFyZ2V0VG91Y2hlcyhUb3VjaExpc3Q6OmNyZWF0ZSgpKQorICAgICwgbV9jaGFu
Z2VkVG91Y2hlcyhUb3VjaExpc3Q6OmNyZWF0ZSgpKQoreworfQorCitUb3VjaEV2ZW50Q29udGV4
dDo6flRvdWNoRXZlbnRDb250ZXh0KCkKK3sKK30KKwordm9pZCBUb3VjaEV2ZW50Q29udGV4dDo6
aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQqIGV2ZW50KSBjb25zdAoreworI2lmbmRlZiBOREVCVUcK
KyAgICBjaGVja1JlYWNoYWJpbGl0eShtX3RvdWNoZXMuZ2V0KCkpOworICAgIGNoZWNrUmVhY2hh
YmlsaXR5KG1fdGFyZ2V0VG91Y2hlcy5nZXQoKSk7CisgICAgY2hlY2tSZWFjaGFiaWxpdHkobV9j
aGFuZ2VkVG91Y2hlcy5nZXQoKSk7CisjZW5kaWYKKyAgICBBU1NFUlQoZXZlbnQtPmlzVG91Y2hF
dmVudCgpKTsKKyAgICBUb3VjaEV2ZW50KiB0b3VjaEV2ZW50ID0gdG9Ub3VjaEV2ZW50KGV2ZW50
KTsKKyAgICB0b3VjaEV2ZW50LT5zZXRUb3VjaGVzKG1fdG91Y2hlcyk7CisgICAgdG91Y2hFdmVu
dC0+c2V0VGFyZ2V0VG91Y2hlcyhtX3RhcmdldFRvdWNoZXMpOworICAgIHRvdWNoRXZlbnQtPnNl
dENoYW5nZWRUb3VjaGVzKG1fY2hhbmdlZFRvdWNoZXMpOworICAgIEV2ZW50Q29udGV4dDo6aGFu
ZGxlTG9jYWxFdmVudHMoZXZlbnQpOworfQorCitib29sIFRvdWNoRXZlbnRDb250ZXh0Ojppc1Rv
dWNoRXZlbnRDb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmbmRl
ZiBOREVCVUcKK3ZvaWQgVG91Y2hFdmVudENvbnRleHQ6OmNoZWNrUmVhY2hhYmlsaXR5KFRvdWNo
TGlzdCogdG91Y2hMaXN0KSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdG91
Y2hMaXN0LT5sZW5ndGgoKTsgKytpKQorICAgICAgICBBU1NFUlQoaXNSZWFjaGFibGUodG91Y2hM
aXN0LT5pdGVtKGkpLT50YXJnZXQoKS0+dG9Ob2RlKCkpKTsKK30KKyNlbmRpZgorCisjZW5kaWYg
Ly8gRU5BQkxFKFRPVUNIX0VWRU5UUykKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5oCmlu
ZGV4IGZlMWNmMDI1NTY0ZGVlMzhmZjFmZWRkYWZiMzRjMmExMTcwYjUzZTAuLmE1NzczZjE3OGM3
Zjk1ODdlZTU0YzhiYWEyNDM3MGQ3ZDlhOGExYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudENvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0
LmgKQEAgLTM1LDYgKzM1LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRXZlbnQ7
CitjbGFzcyBUb3VjaExpc3Q7CiAKIGNsYXNzIEV2ZW50Q29udGV4dCB7CiBwdWJsaWM6CkBAIC00
NywxMSArNDgsMTIgQEAgcHVibGljOgogICAgIGJvb2wgY3VycmVudFRhcmdldFNhbWVBc1Rhcmdl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFRhcmdldC5nZXQoKSA9PSBtX3RhcmdldC5nZXQo
KTsgfQogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCopIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlT3JGb2N1c0V2ZW50Q29udGV4dCgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBpc1RvdWNoRXZlbnRDb250ZXh0KCkgY29uc3Q7CiAKIHByb3RlY3RlZDoK
ICNpZm5kZWYgTkRFQlVHCiAgICAgYm9vbCBpc1VucmVhY2hhYmxlTm9kZShFdmVudFRhcmdldCop
OwotICAgIGJvb2wgaXNSZWFjaGFibGUoTm9kZSopOworICAgIGJvb2wgaXNSZWFjaGFibGUoTm9k
ZSopIGNvbnN0OwogI2VuZGlmCiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKICAgICBSZWZQdHI8
RXZlbnRUYXJnZXQ+IG1fY3VycmVudFRhcmdldDsKQEAgLTczLDYgKzc1LDMxIEBAIHByaXZhdGU6
CiAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBtX3JlbGF0ZWRUYXJnZXQ7CiB9OwogCisKKyNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQorY2xhc3MgVG91Y2hFdmVudENvbnRleHQgOiBwdWJsaWMgRXZl
bnRDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBUb3VjaEV2ZW50Q29udGV4dChQYXNzUmVmUHRyPE5v
ZGU+LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBjdXJyZW50VGFyZ2V0LCBQYXNzUmVmUHRyPEV2
ZW50VGFyZ2V0PiB0YXJnZXQpOworICAgIHZpcnR1YWwgflRvdWNoRXZlbnRDb250ZXh0KCk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlTG9jYWxFdmVudHMoRXZlbnQqKSBjb25zdCBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNUb3VjaEV2ZW50Q29udGV4dCgpIGNvbnN0IE9WRVJSSURF
OworCisgICAgVG91Y2hMaXN0KiB0b3VjaGVzKCkgeyByZXR1cm4gbV90b3VjaGVzLmdldCgpOyB9
CisgICAgVG91Y2hMaXN0KiB0YXJnZXRUb3VjaGVzKCkgeyByZXR1cm4gbV90YXJnZXRUb3VjaGVz
LmdldCgpOyB9CisgICAgVG91Y2hMaXN0KiBjaGFuZ2VkVG91Y2hlcygpIHsgcmV0dXJuIG1fY2hh
bmdlZFRvdWNoZXMuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8VG91Y2hMaXN0PiBt
X3RvdWNoZXM7CisgICAgUmVmUHRyPFRvdWNoTGlzdD4gbV90YXJnZXRUb3VjaGVzOworICAgIFJl
ZlB0cjxUb3VjaExpc3Q+IG1fY2hhbmdlZFRvdWNoZXM7CisjaWZuZGVmIE5ERUJVRworICAgIHZv
aWQgY2hlY2tSZWFjaGFiaWxpdHkoVG91Y2hMaXN0KikgY29uc3Q7CisjZW5kaWYKK307CisjZW5k
aWYgLy8gRU5BQkxFKFRPVUNIX0VWRU5UUykKKworCiAjaWZuZGVmIE5ERUJVRwogaW5saW5lIGJv
b2wgRXZlbnRDb250ZXh0Ojppc1VucmVhY2hhYmxlTm9kZShFdmVudFRhcmdldCogdGFyZ2V0KQog
ewpAQCAtODAsNyArMTA3LDcgQEAgaW5saW5lIGJvb2wgRXZlbnRDb250ZXh0Ojppc1VucmVhY2hh
YmxlTm9kZShFdmVudFRhcmdldCogdGFyZ2V0KQogICAgIHJldHVybiB0YXJnZXQgJiYgdGFyZ2V0
LT50b05vZGUoKSAmJiAhdGFyZ2V0LT50b05vZGUoKS0+aXNTVkdFbGVtZW50KCkgJiYgIWlzUmVh
Y2hhYmxlKHRhcmdldC0+dG9Ob2RlKCkpOwogfQogCi1pbmxpbmUgYm9vbCBFdmVudENvbnRleHQ6
OmlzUmVhY2hhYmxlKE5vZGUqIHRhcmdldCkKK2lubGluZSBib29sIEV2ZW50Q29udGV4dDo6aXNS
ZWFjaGFibGUoTm9kZSogdGFyZ2V0KSBjb25zdAogewogICAgIEFTU0VSVCh0YXJnZXQpOwogICAg
IFRyZWVTY29wZSogdGFyZ2V0U2NvcGUgPSB0YXJnZXQtPnRyZWVTY29wZSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UmV0YXJnZXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnRSZXRhcmdldGVyLmNwcAppbmRleCA5MTVkYTQ3MTIwYjBlODI2NTY3NWYyYWRh
NmFkYWM5MmU1YTVjYmMyLi41NjdlMmYzMTk4MWY4Mzk2MmE2ZWYzNzhmZThmYjdiMjY5NDJmNTI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRSZXRhcmdldGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRSZXRhcmdldGVyLmNwcApAQCAtMjYsNiArMjYsOSBA
QAogI2luY2x1ZGUgIkZvY3VzRXZlbnQuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5j
bHVkZSAiU2hhZG93Um9vdC5oIgorI2luY2x1ZGUgIlRvdWNoLmgiCisjaW5jbHVkZSAiVG91Y2hF
dmVudC5oIgorI2luY2x1ZGUgIlRvdWNoTGlzdC5oIgogI2luY2x1ZGUgIlRyZWVTY29wZS5oIgog
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAt
NzcsNiArODAsOSBAQCB2b2lkIEV2ZW50UmV0YXJnZXRlcjo6Y2FsY3VsYXRlRXZlbnRQYXRoKE5v
ZGUqIG5vZGUsIEV2ZW50KiBldmVudCwgRXZlbnRQYXRoJiBldgogICAgIGJvb2wgaW5Eb2N1bWVu
dCA9IG5vZGUtPmluRG9jdW1lbnQoKTsKICAgICBib29sIGlzU1ZHRWxlbWVudCA9IG5vZGUtPmlz
U1ZHRWxlbWVudCgpOwogICAgIGJvb2wgaXNNb3VzZU9yRm9jdXNFdmVudCA9IGV2ZW50LT5pc01v
dXNlRXZlbnQoKSB8fCBldmVudC0+aXNGb2N1c0V2ZW50KCk7CisjaWYgRU5BQkxFKFRPVUNIX0VW
RU5UUykKKyAgICBib29sIGlzVG91Y2hFdmVudCA9IGV2ZW50LT5pc1RvdWNoRXZlbnQoKTsKKyNl
bmRpZgogICAgIFZlY3RvcjxFdmVudFRhcmdldCosIDMyPiB0YXJnZXRTdGFjazsKICAgICBmb3Ig
KEV2ZW50UGF0aFdhbGtlciB3YWxrZXIobm9kZSk7IHdhbGtlci5ub2RlKCk7IHdhbGtlci5tb3Zl
VG9QYXJlbnQoKSkgewogICAgICAgICBOb2RlKiBub2RlID0gd2Fsa2VyLm5vZGUoKTsKQEAgLTg2
LDYgKzkyLDEwIEBAIHZvaWQgRXZlbnRSZXRhcmdldGVyOjpjYWxjdWxhdGVFdmVudFBhdGgoTm9k
ZSogbm9kZSwgRXZlbnQqIGV2ZW50LCBFdmVudFBhdGgmIGV2CiAgICAgICAgICAgICB0YXJnZXRT
dGFjay5hcHBlbmQodGFyZ2V0U3RhY2subGFzdCgpKTsKICAgICAgICAgaWYgKGlzTW91c2VPckZv
Y3VzRXZlbnQpCiAgICAgICAgICAgICBldmVudFBhdGguYXBwZW5kKGFkb3B0UHRyKG5ldyBNb3Vz
ZU9yRm9jdXNFdmVudENvbnRleHQobm9kZSwgZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVs
ZXMobm9kZSksIHRhcmdldFN0YWNrLmxhc3QoKSkpKTsKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQorICAgICAgICBlbHNlIGlmIChpc1RvdWNoRXZlbnQpCisgICAgICAgICAgICBldmVudFBhdGgu
YXBwZW5kKGFkb3B0UHRyKG5ldyBUb3VjaEV2ZW50Q29udGV4dChub2RlLCBldmVudFRhcmdldFJl
c3BlY3RpbmdUYXJnZXRSdWxlcyhub2RlKSwgdGFyZ2V0U3RhY2subGFzdCgpKSkpOworI2VuZGlm
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGV2ZW50UGF0aC5hcHBlbmQoYWRvcHRQdHIobmV3
IEV2ZW50Q29udGV4dChub2RlLCBldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcyhub2Rl
KSwgdGFyZ2V0U3RhY2subGFzdCgpKSkpOwogICAgICAgICBpZiAoIWluRG9jdW1lbnQpCkBAIC0x
MTEsNyArMTIxLDQ0IEBAIHZvaWQgRXZlbnRSZXRhcmdldGVyOjphZGp1c3RGb3JGb2N1c0V2ZW50
KE5vZGUqIG5vZGUsIGNvbnN0IEZvY3VzRXZlbnQmIGZvY3VzRXZlCiAgICAgYWRqdXN0Rm9yUmVs
YXRlZFRhcmdldChub2RlLCBmb2N1c0V2ZW50LnJlbGF0ZWRUYXJnZXQoKSwgZXZlbnRQYXRoKTsK
IH0KIAotdm9pZCBFdmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvclJlbGF0ZWRUYXJnZXQoTm9kZSog
bm9kZSwgRXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXJnZXQsIEV2ZW50UGF0aCYgZXZlbnRQYXRoKQor
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCit2b2lkIEV2ZW50UmV0YXJnZXRlcjo6YWRqdXN0Rm9y
VG91Y2hFdmVudChOb2RlKiBub2RlLCBjb25zdCBUb3VjaEV2ZW50JiB0b3VjaEV2ZW50LCBFdmVu
dFBhdGgmIGV2ZW50UGF0aCkKK3sKKyAgICBzaXplX3QgZXZlbnRQYXRoU2l6ZSA9IGV2ZW50UGF0
aC5zaXplKCk7CisKKyAgICBUb3VjaExpc3RQYXRoIHRvdWNoZXNQYXRoKGV2ZW50UGF0aFNpemUp
OworICAgIFRvdWNoTGlzdFBhdGggdGFyZ2V0VG91Y2hlc1BhdGgoZXZlbnRQYXRoU2l6ZSk7Cisg
ICAgVG91Y2hMaXN0UGF0aCBjaGFuZ2VkVG91Y2hlc1BhdGgoZXZlbnRQYXRoU2l6ZSk7CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGV2ZW50UGF0aFNpemU7ICsraSkgeworICAgICAgICBB
U1NFUlQoZXZlbnRQYXRoW2ldLT5pc1RvdWNoRXZlbnRDb250ZXh0KCkpOworICAgICAgICBUb3Vj
aEV2ZW50Q29udGV4dCogdG91Y2hFdmVudENvbnRleHQgPSBzdGF0aWNfY2FzdDxUb3VjaEV2ZW50
Q29udGV4dCo+KGV2ZW50UGF0aFtpXS5nZXQoKSk7CisgICAgICAgIHRvdWNoZXNQYXRoW2ldID0g
dG91Y2hFdmVudENvbnRleHQtPnRvdWNoZXMoKTsKKyAgICAgICAgdGFyZ2V0VG91Y2hlc1BhdGhb
aV0gPSB0b3VjaEV2ZW50Q29udGV4dC0+dGFyZ2V0VG91Y2hlcygpOworICAgICAgICBjaGFuZ2Vk
VG91Y2hlc1BhdGhbaV0gPSB0b3VjaEV2ZW50Q29udGV4dC0+Y2hhbmdlZFRvdWNoZXMoKTsKKyAg
ICB9CisKKyAgICBhZGp1c3RUb3VjaExpc3Qobm9kZSwgKnRvdWNoRXZlbnQudG91Y2hlcygpLCBl
dmVudFBhdGgsIHRvdWNoZXNQYXRoKTsKKyAgICBhZGp1c3RUb3VjaExpc3Qobm9kZSwgKnRvdWNo
RXZlbnQudGFyZ2V0VG91Y2hlcygpLCBldmVudFBhdGgsIHRhcmdldFRvdWNoZXNQYXRoKTsKKyAg
ICBhZGp1c3RUb3VjaExpc3Qobm9kZSwgKnRvdWNoRXZlbnQuY2hhbmdlZFRvdWNoZXMoKSwgZXZl
bnRQYXRoLCBjaGFuZ2VkVG91Y2hlc1BhdGgpOworfQorCit2b2lkIEV2ZW50UmV0YXJnZXRlcjo6
YWRqdXN0VG91Y2hMaXN0KGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IFRvdWNoTGlzdCYgdG91Y2hM
aXN0LCBjb25zdCBFdmVudFBhdGgmIGV2ZW50UGF0aCwgVG91Y2hMaXN0UGF0aCYgdG91Y2hMaXN0
UGF0aCkKK3sKKyAgICBzaXplX3QgZXZlbnRQYXRoU2l6ZSA9IGV2ZW50UGF0aC5zaXplKCk7Cisg
ICAgQVNTRVJUKHRvdWNoTGlzdFBhdGguc2l6ZSgpID09IGV2ZW50UGF0aFNpemUpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpPCB0b3VjaExpc3QubGVuZ3RoKCk7ICsraSkgeworICAgICAgICBj
b25zdCBUb3VjaCYgdG91Y2ggPSAqdG91Y2hMaXN0Lml0ZW0oaSk7CisgICAgICAgIEFkanVzdGVk
Tm9kZXMgYWRqdXN0ZWROb2RlczsKKyAgICAgICAgY2FsY3VsYXRlQWRqdXN0ZWROb2Rlcyhub2Rl
LCB0b3VjaC50YXJnZXQoKS0+dG9Ob2RlKCksIGZhbHNlLCBjb25zdF9jYXN0PEV2ZW50UGF0aCY+
KGV2ZW50UGF0aCksIGFkanVzdGVkTm9kZXMpOworICAgICAgICBBU1NFUlQoYWRqdXN0ZWROb2Rl
cy5zaXplKCkgPT0gZXZlbnRQYXRoU2l6ZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBq
IDwgZXZlbnRQYXRoU2l6ZTsgKytqKQorICAgICAgICAgICAgdG91Y2hMaXN0UGF0aFtqXS0+YXBw
ZW5kKHRvdWNoLmNsb25lV2l0aE5ld1RhcmdldChhZGp1c3RlZE5vZGVzW2pdLmdldCgpKSk7Cisg
ICAgfQorfQorI2VuZGlmCisKK3ZvaWQgRXZlbnRSZXRhcmdldGVyOjphZGp1c3RGb3JSZWxhdGVk
VGFyZ2V0KGNvbnN0IE5vZGUqIG5vZGUsIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0LCBFdmVu
dFBhdGgmIGV2ZW50UGF0aCkKIHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsKQEAg
LTEyMSw3ICsxNjgsNyBAQCB2b2lkIEV2ZW50UmV0YXJnZXRlcjo6YWRqdXN0Rm9yUmVsYXRlZFRh
cmdldChOb2RlKiBub2RlLCBFdmVudFRhcmdldCogcmVsYXRlZFRhcgogICAgIGlmICghcmVsYXRl
ZE5vZGUpCiAgICAgICAgIHJldHVybjsKICAgICBBZGp1c3RlZE5vZGVzIGFkanVzdGVkTm9kZXM7
Ci0gICAgY2FsY3VsYXRlQWRqdXN0ZWROb2Rlcyhub2RlLCByZWxhdGVkTm9kZSwgZXZlbnRQYXRo
LCBhZGp1c3RlZE5vZGVzKTsKKyAgICBjYWxjdWxhdGVBZGp1c3RlZE5vZGVzKG5vZGUsIHJlbGF0
ZWROb2RlLCB0cnVlLCBldmVudFBhdGgsIGFkanVzdGVkTm9kZXMpOwogICAgIEFTU0VSVChhZGp1
c3RlZE5vZGVzLnNpemUoKSA8PSBldmVudFBhdGguc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGFkanVzdGVkTm9kZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgQVNTRVJUKGV2
ZW50UGF0aFtpXS0+aXNNb3VzZU9yRm9jdXNFdmVudENvbnRleHQoKSk7CkBAIC0xMzAsNyArMTc3
LDcgQEAgdm9pZCBFdmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvclJlbGF0ZWRUYXJnZXQoTm9kZSog
bm9kZSwgRXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXIKICAgICB9CiB9CiAKLXZvaWQgRXZlbnRSZXRh
cmdldGVyOjpjYWxjdWxhdGVBZGp1c3RlZE5vZGVzKE5vZGUqIG5vZGUsIE5vZGUqIHJlbGF0ZWRO
b2RlLCBFdmVudFBhdGgmIGV2ZW50UGF0aCwgQWRqdXN0ZWROb2RlcyYgYWRqdXN0ZWROb2RlcykK
K3ZvaWQgRXZlbnRSZXRhcmdldGVyOjpjYWxjdWxhdGVBZGp1c3RlZE5vZGVzKGNvbnN0IE5vZGUq
IG5vZGUsIGNvbnN0IE5vZGUqIHJlbGF0ZWROb2RlLCBib29sIHN0b3BFdmVudEF0Qm91bmRhcnlJ
Zk5lZWRlZCwgRXZlbnRQYXRoJiBldmVudFBhdGgsIEFkanVzdGVkTm9kZXMmIGFkanVzdGVkTm9k
ZXMpCiB7CiAgICAgUmVsYXRlZE5vZGVNYXAgcmVsYXRlZE5vZGVNYXA7CiAgICAgYnVpbGRSZWxh
dGVkTm9kZU1hcChyZWxhdGVkTm9kZSwgcmVsYXRlZE5vZGVNYXApOwpAQCAtMTUwLDYgKzE5Nyw4
IEBAIHZvaWQgRXZlbnRSZXRhcmdldGVyOjpjYWxjdWxhdGVBZGp1c3RlZE5vZGVzKE5vZGUqIG5v
ZGUsIE5vZGUqIHJlbGF0ZWROb2RlLCBFdmVuCiAgICAgICAgICAgICBhZGp1c3RlZE5vZGVzLmFw
cGVuZChhZGp1c3RlZE5vZGUpOwogICAgICAgICB9CiAgICAgICAgIGxhc3RUcmVlU2NvcGUgPSBz
Y29wZTsKKyAgICAgICAgaWYgKCFzdG9wRXZlbnRBdEJvdW5kYXJ5SWZOZWVkZWQpCisgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHRhcmdldElzSWRlbnRpY2FsVG9Ub1JlbGF0ZWRU
YXJnZXQpIHsKICAgICAgICAgICAgIGlmIChub2RlLT50cmVlU2NvcGUoKS0+cm9vdE5vZGUoKSA9
PSAoKml0ZXIpLT5ub2RlKCkpIHsKICAgICAgICAgICAgICAgICBldmVudFBhdGguc2hyaW5rKGl0
ZXIgKyAxIC0gZXZlbnRQYXRoLmJlZ2luKCkpOwpAQCAtMTY0LDcgKzIxMyw3IEBAIHZvaWQgRXZl
bnRSZXRhcmdldGVyOjpjYWxjdWxhdGVBZGp1c3RlZE5vZGVzKE5vZGUqIG5vZGUsIE5vZGUqIHJl
bGF0ZWROb2RlLCBFdmVuCiAgICAgfQogfQogCi12b2lkIEV2ZW50UmV0YXJnZXRlcjo6YnVpbGRS
ZWxhdGVkTm9kZU1hcChOb2RlKiByZWxhdGVkTm9kZSwgUmVsYXRlZE5vZGVNYXAmIHJlbGF0ZWRO
b2RlTWFwKQordm9pZCBFdmVudFJldGFyZ2V0ZXI6OmJ1aWxkUmVsYXRlZE5vZGVNYXAoY29uc3Qg
Tm9kZSogcmVsYXRlZE5vZGUsIFJlbGF0ZWROb2RlTWFwJiByZWxhdGVkTm9kZU1hcCkKIHsKICAg
ICBWZWN0b3I8Tm9kZSosIDMyPiByZWxhdGVkTm9kZVN0YWNrOwogICAgIFRyZWVTY29wZSogbGFz
dFRyZWVTY29wZSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRSZXRh
cmdldGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRSZXRhcmdldGVyLmgKaW5kZXggYzcx
MWE5NmU4MzI2YmU1MDM2MWU2MWQzOGM1MzZhZDg3ODMxODEzNi4uYjE1ZjY0MWNjOTExMmE0MDIy
ZDdhODgzOThiZTFmZDA4YmRjYWYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50UmV0YXJnZXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFJldGFyZ2V0ZXIu
aApAQCAtMzksNiArMzksOSBAQCBjbGFzcyBFdmVudFRhcmdldDsKIGNsYXNzIEZvY3VzRXZlbnQ7
CiBjbGFzcyBNb3VzZUV2ZW50OwogY2xhc3MgTm9kZTsKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQorY2xhc3MgVG91Y2hFdmVudDsKKyNlbmRpZgogY2xhc3MgVHJlZVNjb3BlOwogCiBlbnVtIEV2
ZW50RGlzcGF0Y2hCZWhhdmlvciB7CkBAIC00OCwxOSArNTEsMjcgQEAgZW51bSBFdmVudERpc3Bh
dGNoQmVoYXZpb3IgewogCiBjbGFzcyBFdmVudFJldGFyZ2V0ZXIgewogcHVibGljOgorICAgIHR5
cGVkZWYgVmVjdG9yPFJlZlB0cjxUb3VjaExpc3Q+ID4gVG91Y2hMaXN0UGF0aDsKKwogICAgIHN0
YXRpYyB2b2lkIGNhbGN1bGF0ZUV2ZW50UGF0aChOb2RlKiwgRXZlbnQqLCBFdmVudFBhdGgmKTsK
ICAgICBzdGF0aWMgdm9pZCBhZGp1c3RGb3JNb3VzZUV2ZW50KE5vZGUqLCBjb25zdCBNb3VzZUV2
ZW50JiwgRXZlbnRQYXRoJik7CiAgICAgc3RhdGljIHZvaWQgYWRqdXN0Rm9yRm9jdXNFdmVudChO
b2RlKiwgY29uc3QgRm9jdXNFdmVudCYsIEV2ZW50UGF0aCYpOworI2lmIEVOQUJMRShUT1VDSF9F
VkVOVFMpCisgICAgc3RhdGljIHZvaWQgYWRqdXN0Rm9yVG91Y2hFdmVudChOb2RlKiwgY29uc3Qg
VG91Y2hFdmVudCYsIEV2ZW50UGF0aCYpOworI2VuZGlmCiAgICAgc3RhdGljIEV2ZW50VGFyZ2V0
KiBldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcyhOb2RlKiByZWZlcmVuY2VOb2RlKTsK
IAogcHJpdmF0ZToKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBBZGp1c3RlZE5v
ZGVzOwogICAgIHR5cGVkZWYgSGFzaE1hcDxUcmVlU2NvcGUqLCBOb2RlKj4gUmVsYXRlZE5vZGVN
YXA7CiAKLSAgICBzdGF0aWMgdm9pZCBhZGp1c3RGb3JSZWxhdGVkVGFyZ2V0KE5vZGUqLCBFdmVu
dFRhcmdldCogcmVsYXRlZFRhcmdldCwgRXZlbnRQYXRoJik7Ci0gICAgc3RhdGljIHZvaWQgY2Fs
Y3VsYXRlQWRqdXN0ZWROb2RlcyhOb2RlKiwgTm9kZSogcmVsYXRlZE5vZGUsIEV2ZW50UGF0aCYs
IEFkanVzdGVkTm9kZXMmKTsKLSAgICBzdGF0aWMgdm9pZCBidWlsZFJlbGF0ZWROb2RlTWFwKE5v
ZGUqLCBSZWxhdGVkTm9kZU1hcCYpOworICAgIHN0YXRpYyB2b2lkIGFkanVzdEZvclJlbGF0ZWRU
YXJnZXQoY29uc3QgTm9kZSosIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0LCBFdmVudFBhdGgm
KTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVBZGp1c3RlZE5vZGVzKGNvbnN0IE5vZGUqLCBj
b25zdCBOb2RlKiByZWxhdGVkTm9kZSwgYm9vbCBzdG9wRXZlbnRBdEJvdW5kYXJ5SWZOZWVkZWQs
IEV2ZW50UGF0aCYsIEFkanVzdGVkTm9kZXMmKTsKKyAgICBzdGF0aWMgdm9pZCBidWlsZFJlbGF0
ZWROb2RlTWFwKGNvbnN0IE5vZGUqLCBSZWxhdGVkTm9kZU1hcCYpOwogICAgIHN0YXRpYyBOb2Rl
KiBmaW5kUmVsYXRlZE5vZGUoVHJlZVNjb3BlKiwgUmVsYXRlZE5vZGVNYXAmKTsKKyNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQorICAgIHN0YXRpYyB2b2lkIGFkanVzdFRvdWNoTGlzdChjb25zdCBO
b2RlKiwgY29uc3QgVG91Y2hMaXN0JiwgY29uc3QgRXZlbnRQYXRoJiwgVG91Y2hMaXN0UGF0aCYp
OworI2VuZGlmCiB9OwogCiBpbmxpbmUgRXZlbnRUYXJnZXQqIEV2ZW50UmV0YXJnZXRlcjo6ZXZl
bnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMoTm9kZSogcmVmZXJlbmNlTm9kZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcAppbmRleCA5ZWQ4YThiZWQwNjRlOWZlN2MyMDJhZTFjNmJmMDlhNGZjMTMyN2ZhLi5m
Y2ZiZmE3YTNiNGJlM2RjMjgwOGI5ZmUxMTdlYzZmYWJkNDViMzY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
CkBAIC0xMDEsNiArMTAxLDcgQEAKICNpbmNsdWRlICJUZW1wbGF0ZUNvbnRlbnREb2N1bWVudEZy
YWdtZW50LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRFdmVudC5oIgorI2lu
Y2x1ZGUgIlRvdWNoRXZlbnQuaCIKICNpbmNsdWRlICJUcmVlU2NvcGVBZG9wdGVyLmgiCiAjaW5j
bHVkZSAiVUlFdmVudC5oIgogI2luY2x1ZGUgIlVJRXZlbnRXaXRoS2V5U3RhdGUuaCIKQEAgLTIz
NzUsNiArMjM3NiwxMCBAQCBib29sIE5vZGU6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4gZXZlbnQpCiB7CiAgICAgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSkKICAgICAgICAgcmV0
dXJuIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCh0aGlzLCBNb3VzZUV2ZW50RGlzcGF0
Y2hNZWRpYXRvcjo6Y3JlYXRlKGFkb3B0UmVmKHRvTW91c2VFdmVudChldmVudC5sZWFrUmVmKCkp
KSwgTW91c2VFdmVudERpc3BhdGNoTWVkaWF0b3I6OlN5bnRoZXRpY01vdXNlRXZlbnQpKTsKKyNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIGlmIChldmVudC0+aXNUb3VjaEV2ZW50KCkpCisg
ICAgICAgIHJldHVybiBkaXNwYXRjaFRvdWNoRXZlbnQoYWRvcHRSZWYodG9Ub3VjaEV2ZW50KGV2
ZW50LmxlYWtSZWYoKSkpKTsKKyNlbmRpZgogICAgIHJldHVybiBFdmVudERpc3BhdGNoZXI6OmRp
c3BhdGNoRXZlbnQodGhpcywgRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpjcmVhdGUoZXZlbnQpKTsK
IH0KIApAQCAtMjQzNSw2ICsyNDQwLDEzIEBAIGJvb2wgTm9kZTo6ZGlzcGF0Y2hHZXN0dXJlRXZl
bnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGV2ZW50KQogfQogI2VuZGlmCiAKKyNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQorYm9vbCBOb2RlOjpkaXNwYXRjaFRvdWNoRXZlbnQoUGFzc1Jl
ZlB0cjxUb3VjaEV2ZW50PiBldmVudCkKK3sKKyAgICByZXR1cm4gRXZlbnREaXNwYXRjaGVyOjpk
aXNwYXRjaEV2ZW50KHRoaXMsIFRvdWNoRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpjcmVhdGUoZXZl
bnQpKTsKK30KKyNlbmRpZgorCiB2b2lkIE5vZGU6OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soRXZl
bnQqIHVuZGVybHlpbmdFdmVudCwgU2ltdWxhdGVkQ2xpY2tNb3VzZUV2ZW50T3B0aW9ucyBldmVu
dE9wdGlvbnMsIFNpbXVsYXRlZENsaWNrVmlzdWFsT3B0aW9ucyB2aXN1YWxPcHRpb25zKQogewog
ICAgIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTaW11bGF0ZWRDbGljayh0aGlzLCB1bmRlcmx5
aW5nRXZlbnQsIGV2ZW50T3B0aW9ucywgdmlzdWFsT3B0aW9ucyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCBj
OTE3N2JhOTNiNDE1ZjY2OTNjYmJkZTM2NDFmYTU2MDdkM2Y5NGU5Li5mZTA1OTY2NDQyNDQyYTI3
ZDk2YWE1OGVlYmY4NzVkNjg1OTM2ZTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTkyLDYgKzkyLDEwIEBA
IGNsYXNzIFRhZ05vZGVMaXN0OwogY2xhc3MgUGxhdGZvcm1HZXN0dXJlRXZlbnQ7CiAjZW5kaWYK
IAorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCitjbGFzcyBUb3VjaEV2ZW50OworI2VuZGlmCisK
ICNpZiBFTkFCTEUoTUlDUk9EQVRBKQogY2xhc3MgSFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uOwog
Y2xhc3MgUHJvcGVydHlOb2RlTGlzdDsKQEAgLTYzOCw2ICs2NDIsMTAgQEAgcHVibGljOgogI2lm
IEVOQUJMRShHRVNUVVJFX0VWRU5UUykKICAgICBib29sIGRpc3BhdGNoR2VzdHVyZUV2ZW50KGNv
bnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50Jik7CiAjZW5kaWYKKyNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQorICAgIGJvb2wgZGlzcGF0Y2hUb3VjaEV2ZW50KFBhc3NSZWZQdHI8VG91Y2hFdmVudD4p
OworI2VuZGlmCisKICAgICB2b2lkIGRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soRXZlbnQqIHVuZGVy
bHlpbmdFdmVudCwgU2ltdWxhdGVkQ2xpY2tNb3VzZUV2ZW50T3B0aW9ucyA9IFNlbmROb0V2ZW50
cywgU2ltdWxhdGVkQ2xpY2tWaXN1YWxPcHRpb25zID0gU2hvd1ByZXNzZWRMb29rKTsKICAgICBi
b29sIGRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ub3VjaC5jcHAKaW5kZXggN2YzNjJmYzc1YjUxODcyMzYzZWZhMTUzOGYzMjYxZTdkMzdj
YWRiNC4uNWViYjc5MTZhMDk4NmM5MmFjZWQ5NDAwOWFmYjJiY2YxMDg1ZmRmNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
VG91Y2guY3BwCkBAIC03NSw2ICs3NSwyOCBAQCBUb3VjaDo6VG91Y2goRnJhbWUqIGZyYW1lLCBF
dmVudFRhcmdldCogdGFyZ2V0LCB1bnNpZ25lZCBpZGVudGlmaWVyLCBpbnQgc2NyZWVuWAogICAg
IG1fYWJzb2x1dGVMb2NhdGlvbiA9IHJvdW5kZWRMYXlvdXRQb2ludChGbG9hdFBvaW50KHgsIHkp
KTsKIH0KIAorVG91Y2g6OlRvdWNoKEV2ZW50VGFyZ2V0KiB0YXJnZXQsIHVuc2lnbmVkIGlkZW50
aWZpZXIsIGludCBjbGllbnRYLCBpbnQgY2xpZW50WSwgaW50IHNjcmVlblgsIGludCBzY3JlZW5Z
LCBpbnQgcGFnZVgsIGludCBwYWdlWSwgaW50IHJhZGl1c1gsIGludCByYWRpdXNZLCBmbG9hdCBy
b3RhdGlvbkFuZ2xlLCBmbG9hdCBmb3JjZSwgTGF5b3V0UG9pbnQgYWJzb2x1dGVMb2NhdGlvbikK
KyAgICA6IG1fdGFyZ2V0KHRhcmdldCkKKyAgICAsIG1faWRlbnRpZmllcihpZGVudGlmaWVyKQor
ICAgICwgbV9jbGllbnRYKGNsaWVudFgpCisgICAgLCBtX2NsaWVudFkoY2xpZW50WSkKKyAgICAs
IG1fc2NyZWVuWChzY3JlZW5YKQorICAgICwgbV9zY3JlZW5ZKHNjcmVlblkpCisgICAgLCBtX3Bh
Z2VYKHBhZ2VYKQorICAgICwgbV9wYWdlWShwYWdlWSkKKyAgICAsIG1fcmFkaXVzWChyYWRpdXNY
KQorICAgICwgbV9yYWRpdXNZKHJhZGl1c1kpCisgICAgLCBtX3JvdGF0aW9uQW5nbGUocm90YXRp
b25BbmdsZSkKKyAgICAsIG1fZm9yY2UoZm9yY2UpCisgICAgLCBtX2Fic29sdXRlTG9jYXRpb24o
YWJzb2x1dGVMb2NhdGlvbikKK3sKK30KKworUGFzc1JlZlB0cjxUb3VjaD4gVG91Y2g6OmNsb25l
V2l0aE5ld1RhcmdldChFdmVudFRhcmdldCogZXZlbnRUYXJnZXQpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBUb3VjaChldmVudFRhcmdldCwgbV9pZGVudGlmaWVyLCBtX2NsaWVu
dFgsIG1fY2xpZW50WSwgbV9zY3JlZW5YLCBtX3NjcmVlblksIG1fcGFnZVgsIG1fcGFnZVksIG1f
cmFkaXVzWCwgbV9yYWRpdXNZLCBtX3JvdGF0aW9uQW5nbGUsIG1fZm9yY2UsIG1fYWJzb2x1dGVM
b2NhdGlvbikpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vVG91
Y2guaAppbmRleCA2NjgyNWY1ZTM4M2YzNDA1ZTk3ZmYyZmIwMWFhZGU4ZDJhY2EwY2E4Li5iODk3
OWE2NTJkNmY4YzRiNDliOWI4MDgyZDA2MmZmMTMyN2ViYjZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vVG91Y2guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2guaApAQCAt
NjEsMTIgKzYxLDE3IEBAIHB1YmxpYzoKICAgICBmbG9hdCB3ZWJraXRSb3RhdGlvbkFuZ2xlKCkg
Y29uc3QgeyByZXR1cm4gbV9yb3RhdGlvbkFuZ2xlOyB9CiAgICAgZmxvYXQgd2Via2l0Rm9yY2Uo
KSBjb25zdCB7IHJldHVybiBtX2ZvcmNlOyB9CiAgICAgY29uc3QgTGF5b3V0UG9pbnQmIGFic29s
dXRlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlTG9jYXRpb247IH0KKyAgICBQ
YXNzUmVmUHRyPFRvdWNoPiBjbG9uZVdpdGhOZXdUYXJnZXQoRXZlbnRUYXJnZXQqKSBjb25zdDsK
IAogcHJpdmF0ZToKICAgICBUb3VjaChGcmFtZSogZnJhbWUsIEV2ZW50VGFyZ2V0KiB0YXJnZXQs
IHVuc2lnbmVkIGlkZW50aWZpZXIsCiAgICAgICAgICAgICBpbnQgc2NyZWVuWCwgaW50IHNjcmVl
blksIGludCBwYWdlWCwgaW50IHBhZ2VZLAogICAgICAgICAgICAgaW50IHJhZGl1c1gsIGludCBy
YWRpdXNZLCBmbG9hdCByb3RhdGlvbkFuZ2xlLCBmbG9hdCBmb3JjZSk7CiAKKyAgICBUb3VjaChF
dmVudFRhcmdldCosIHVuc2lnbmVkIGlkZW50aWZpZXIsIGludCBjbGllbnRYLCBpbnQgY2xpZW50
WSwKKyAgICAgICAgaW50IHNjcmVlblgsIGludCBzY3JlZW5ZLCBpbnQgcGFnZVgsIGludCBwYWdl
WSwKKyAgICAgICAgaW50IHJhZGl1c1gsIGludCByYWRpdXNZLCBmbG9hdCByb3RhdGlvbkFuZ2xl
LCBmbG9hdCBmb3JjZSwgTGF5b3V0UG9pbnQgYWJzb2x1dGVMb2NhdGlvbik7CisKICAgICBSZWZQ
dHI8RXZlbnRUYXJnZXQ+IG1fdGFyZ2V0OwogICAgIHVuc2lnbmVkIG1faWRlbnRpZmllcjsKICAg
ICBpbnQgbV9jbGllbnRYOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoRXZl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoRXZlbnQuY3BwCmluZGV4IGE1OGYxZGNj
OWUyMzhlYmVhNDYyY2ZhNWI2NTk0NzZlMWI2MDM2YjMuLjIzODkxNmFmNTFmZDk5MzExMDU1Yjc4
YWRkOTYxMTQzODI0NDY3ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaEV2
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2hFdmVudC5jcHAKQEAgLTMwLDcg
KzMwLDkgQEAKIAogI2luY2x1ZGUgIlRvdWNoRXZlbnQuaCIKIAorI2luY2x1ZGUgIkV2ZW50RGlz
cGF0Y2hlci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFdmVudFJldGFy
Z2V0ZXIuaCIKICNpbmNsdWRlICJUb3VjaExpc3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtOTksNiArMTAxLDI3IEBAIGJvb2wgVG91Y2hFdmVudDo6aXNUb3VjaEV2ZW50KCkgY29uc3QK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorUGFzc1JlZlB0cjxUb3VjaEV2ZW50RGlzcGF0Y2hNZWRp
YXRvcj4gVG91Y2hFdmVudERpc3BhdGNoTWVkaWF0b3I6OmNyZWF0ZShQYXNzUmVmUHRyPFRvdWNo
RXZlbnQ+IHRvdWNoRXZlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUb3VjaEV2ZW50
RGlzcGF0Y2hNZWRpYXRvcih0b3VjaEV2ZW50KSk7Cit9CisKK1RvdWNoRXZlbnREaXNwYXRjaE1l
ZGlhdG9yOjpUb3VjaEV2ZW50RGlzcGF0Y2hNZWRpYXRvcihQYXNzUmVmUHRyPFRvdWNoRXZlbnQ+
IHRvdWNoRXZlbnQpCisgICAgOiBFdmVudERpc3BhdGNoTWVkaWF0b3IodG91Y2hFdmVudCkKK3sK
K30KKworVG91Y2hFdmVudCogVG91Y2hFdmVudERpc3BhdGNoTWVkaWF0b3I6OmV2ZW50KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VG91Y2hFdmVudCo+KEV2ZW50RGlzcGF0Y2hN
ZWRpYXRvcjo6ZXZlbnQoKSk7Cit9CisKK2Jvb2wgVG91Y2hFdmVudERpc3BhdGNoTWVkaWF0b3I6
OmRpc3BhdGNoRXZlbnQoRXZlbnREaXNwYXRjaGVyKiBkaXNwYXRjaGVyKSBjb25zdAoreworICAg
IEV2ZW50UmV0YXJnZXRlcjo6YWRqdXN0Rm9yVG91Y2hFdmVudChkaXNwYXRjaGVyLT5ub2RlKCks
ICpldmVudCgpLCBkaXNwYXRjaGVyLT5ldmVudFBhdGgoKSk7CisgICAgcmV0dXJuIGRpc3BhdGNo
ZXItPmRpc3BhdGNoKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IEVOQUJMRShUT1VDSF9FVkVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVG91
Y2hFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoRXZlbnQuaAppbmRleCBiMmU1YjJl
ZTM0NmJkODAwNzUyZGIxOWQ2ZTgyODE0NTAzYzg0Yzc3Li42YzEzOWE4OTNiZmE3NzM5MzdmZWMz
NzhmZDRhMTY1ODNkOGUwMDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2hF
dmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaEV2ZW50LmgKQEAgLTI5LDEyICsy
OSwxMiBAQAogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKIAorI2luY2x1ZGUgIkV2ZW50RGlz
cGF0Y2hNZWRpYXRvci5oIgogI2luY2x1ZGUgIk1vdXNlUmVsYXRlZEV2ZW50LmgiCisjaW5jbHVk
ZSAiVG91Y2hMaXN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgVG91Y2hMaXN0
OwotCiBjbGFzcyBUb3VjaEV2ZW50IDogcHVibGljIE1vdXNlUmVsYXRlZEV2ZW50IHsKIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5Ub3VjaEV2ZW50KCk7CkBAIC02Myw2ICs2MywxMSBAQCBwdWJsaWM6
CiAgICAgVG91Y2hMaXN0KiB0b3VjaGVzKCkgY29uc3QgeyByZXR1cm4gbV90b3VjaGVzLmdldCgp
OyB9CiAgICAgVG91Y2hMaXN0KiB0YXJnZXRUb3VjaGVzKCkgY29uc3QgeyByZXR1cm4gbV90YXJn
ZXRUb3VjaGVzLmdldCgpOyB9CiAgICAgVG91Y2hMaXN0KiBjaGFuZ2VkVG91Y2hlcygpIGNvbnN0
IHsgcmV0dXJuIG1fY2hhbmdlZFRvdWNoZXMuZ2V0KCk7IH0KKworICAgIHZvaWQgc2V0VG91Y2hl
cyhQYXNzUmVmUHRyPFRvdWNoTGlzdD4gdG91Y2hlcykgeyBtX3RvdWNoZXMgPSB0b3VjaGVzOyB9
CisgICAgdm9pZCBzZXRUYXJnZXRUb3VjaGVzKFBhc3NSZWZQdHI8VG91Y2hMaXN0PiB0YXJnZXRU
b3VjaGVzKSB7IG1fdGFyZ2V0VG91Y2hlcyA9IHRhcmdldFRvdWNoZXM7IH0KKyAgICB2b2lkIHNl
dENoYW5nZWRUb3VjaGVzKFBhc3NSZWZQdHI8VG91Y2hMaXN0PiBjaGFuZ2VkVG91Y2hlcykgeyBt
X2NoYW5nZWRUb3VjaGVzID0gY2hhbmdlZFRvdWNoZXM7IH0KKwogI2lmIFBMQVRGT1JNKEJMQUNL
QkVSUlkpCiAgICAgdm9pZCBzZXREb3VibGVUYXAoYm9vbCBkb3VibGVUYXApIHsgbV9kb3VibGVU
YXAgPSBkb3VibGVUYXA7IH0KICAgICBib29sIGlzRG91YmxlVGFwKCkgY29uc3QgeyByZXR1cm4g
bV9kb3VibGVUYXA7IH0KQEAgLTkwLDYgKzk1LDIyIEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAK
K2NsYXNzIFRvdWNoRXZlbnREaXNwYXRjaE1lZGlhdG9yIDogcHVibGljIEV2ZW50RGlzcGF0Y2hN
ZWRpYXRvciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VG91Y2hFdmVudERpc3Bh
dGNoTWVkaWF0b3I+IGNyZWF0ZShQYXNzUmVmUHRyPFRvdWNoRXZlbnQ+KTsKKworcHJpdmF0ZToK
KyAgICBleHBsaWNpdCBUb3VjaEV2ZW50RGlzcGF0Y2hNZWRpYXRvcihQYXNzUmVmUHRyPFRvdWNo
RXZlbnQ+KTsKKyAgICBUb3VjaEV2ZW50KiBldmVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBkaXNwYXRjaEV2ZW50KEV2ZW50RGlzcGF0Y2hlciopIGNvbnN0IE9WRVJSSURFOworfTsKKwor
aW5saW5lIFRvdWNoRXZlbnQqIHRvVG91Y2hFdmVudChFdmVudCogZXZlbnQpCit7CisgICAgQVNT
RVJUKGV2ZW50ICYmIGV2ZW50LT5pc1RvdWNoRXZlbnQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFRvdWNoRXZlbnQqPihldmVudCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVOQUJMRShUT1VDSF9FVkVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vVG91Y2hMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaExpc3QuY3BwCmlu
ZGV4IDQxNjdlNDJlNmRmZDBmY2M4ZGIyN2NiODlkM2RkZThkOGVlNGE5ZjkuLjlhZGQyMjhhMWRi
ZjgyODg0NDBmYWRkN2I0NTVhOTAzYTg1MmNhN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ub3VjaExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaExpc3QuY3Bw
CkBAIC0zOCw2ICszOCwxMSBAQCBUb3VjaCogVG91Y2hMaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4
KQogICAgIHJldHVybiBtX3ZhbHVlc1tpbmRleF0uZ2V0KCk7CiB9CiAKK2NvbnN0IFRvdWNoKiBU
b3VjaExpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0
X2Nhc3Q8VG91Y2hMaXN0Kj4odGhpcyktPml0ZW0oaW5kZXgpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNo
TGlzdC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoTGlzdC5oCmluZGV4IDI1NDY5NTU3MWVl
MDhiYjE0YzU3YmZlOTVlYWRkYzc4ZmY5NTZhYzYuLjYzOWI3M2NlNjM5NzEzZWExMjQ5MDVhMjY4
MmIyN2Y0ZWQ0NWRiOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaExpc3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2hMaXN0LmgKQEAgLTQ0LDYgKzQ0LDcgQEAg
cHVibGljOgogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNp
emUoKTsgfQogCiAgICAgVG91Y2gqIGl0ZW0odW5zaWduZWQpOworICAgIGNvbnN0IFRvdWNoKiBp
dGVtKHVuc2lnbmVkKSBjb25zdDsKIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFBhc3NSZWZQdHI8
VG91Y2g+IHRvdWNoKSB7IG1fdmFsdWVzLmFwcGVuZCh0b3VjaCk7IH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDQzNmJiMzUyMDYxNDgxN2NkMTdiMjJlMmFhZjdlNjk5
N2JiZjM0OTIuLjRlMDQxZjRiN2UyM2FlZWI3MGE1NWE2OTRmZGE0OWYwNGZhNDRmYjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTM3NzUsNyArMzc3NSw2IEBAIEhpdFRl
c3RSZXN1bHQgRXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWx0SW5GcmFtZShGcmFtZSogZnJhbWUs
IGNvbnN0IExheW91dFBvaW50CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAg
ICBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCktPmhpdFRlc3QoSGl0VGVzdFJlcXVlc3QoaGl0VHlw
ZSksIHJlc3VsdCk7Ci0gICAgcmVzdWx0LnNldFRvTm9uU2hhZG93QW5jZXN0b3IoKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zOTI2LDEwICszOTI1LDcgQEAgYm9vbCBFdmVudEhhbmRs
ZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCkKICAg
ICAgICAgaW50IGFkanVzdGVkUGFnZVggPSBscm91bmRmKHBhZ2VQb2ludC54KCkgLyBzY2FsZUZh
Y3Rvcik7CiAgICAgICAgIGludCBhZGp1c3RlZFBhZ2VZID0gbHJvdW5kZihwYWdlUG9pbnQueSgp
IC8gc2NhbGVGYWN0b3IpOwogCi0gICAgICAgIC8vIEZJWE1FOiBJbnN0ZWFkIG9mIHRha2luZyBz
aGFkb3cgYW5jZXN0b3IsIGV2ZW50IHJldGFyZ2V0dGluZyBhbGdvcml0aG0gc2hvdWxkIHJ1bi4K
LSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzgw
MAotICAgICAgICBFdmVudFRhcmdldCogYWRqdXN0ZWRUb3VjaFRhcmdldCA9IGRvYy0+YW5jZXN0
b3JJblRoaXNTY29wZSh0b3VjaFRhcmdldC5nZXQoKS0+dG9Ob2RlKCkpOwotICAgICAgICBSZWZQ
dHI8VG91Y2g+IHRvdWNoID0gVG91Y2g6OmNyZWF0ZSh0YXJnZXRGcmFtZSwgYWRqdXN0ZWRUb3Vj
aFRhcmdldCwgcG9pbnQuaWQoKSwKKyAgICAgICAgUmVmUHRyPFRvdWNoPiB0b3VjaCA9IFRvdWNo
OjpjcmVhdGUodGFyZ2V0RnJhbWUsIHRvdWNoVGFyZ2V0LmdldCgpLCBwb2ludC5pZCgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludC5zY3JlZW5Qb3Mo
KS54KCksIHBvaW50LnNjcmVlblBvcygpLnkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWRqdXN0ZWRQYWdlWCwgYWRqdXN0ZWRQYWdlWSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQucmFkaXVzWCgpLCBwb2lu
dC5yYWRpdXNZKCksIHBvaW50LnJvdGF0aW9uQW5nbGUoKSwgcG9pbnQuZm9yY2UoKSk7CkBAIC0z
OTg2LDcgKzM5ODIsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudChjb25z
dCBQbGF0Zm9ybVRvdWNoRXZlbnQmIGV2ZW50KQogICAgICAgICAgICAgICAgIFRvdWNoRXZlbnQ6
OmNyZWF0ZShlZmZlY3RpdmVUb3VjaGVzLmdldCgpLCB0YXJnZXRUb3VjaGVzLmdldCgpLCBjaGFu
Z2VkVG91Y2hlc1tzdGF0ZV0ubV90b3VjaGVzLmdldCgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZU5hbWUsIHRvdWNoRXZlbnRUYXJnZXQtPnRvTm9kZSgpLT5kb2N1
bWVudCgpLT5kZWZhdWx0VmlldygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCAwLCAwLCAwLCBldmVudC5jdHJsS2V5KCksIGV2ZW50LmFsdEtleSgpLCBldmVudC5zaGlm
dEtleSgpLCBldmVudC5tZXRhS2V5KCkpOwotICAgICAgICAgICAgdG91Y2hFdmVudFRhcmdldC0+
ZGlzcGF0Y2hFdmVudCh0b3VjaEV2ZW50LmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAg
ICAgICAgIHRvdWNoRXZlbnRUYXJnZXQtPnRvTm9kZSgpLT5kaXNwYXRjaFRvdWNoRXZlbnQodG91
Y2hFdmVudC5nZXQoKSk7CiAgICAgICAgICAgICBzd2FsbG93ZWRFdmVudCA9IHN3YWxsb3dlZEV2
ZW50IHx8IHRvdWNoRXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSB8fCB0b3VjaEV2ZW50LT5kZWZh
dWx0SGFuZGxlZCgpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGVlZWIzMWM4ODQ2NmEwZTU4
ZWViZjRiMzU0MWU1YWFjNzliOGNiZDUuLmNkNGRmNzc2MmYwNTQwMGY0MjUwYjY3MzBkNmMzN2Uz
MzIxYzU0NGEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMy0wMy0wNSAgSGF5YXRvIEl0byAg
PGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW1NoYWRvd10gSW1wbGVtZW50cyBldmVu
dCByZS10YXJnZXRpbmcgZm9yIFRvdWNoIEV2ZW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3Jlc291cmNlcy9ldmVu
dC1kaXNwYXRjaGluZy5qczoKKyAgICAgICAgKHJlY29yZEV2ZW50KToKKyAgICAgICAgKGR1bXBU
b3VjaExpc3QpOgorICAgICAgICAoc29ydERpc3BhdGNoZWRFdmVudCk6CisgICAgICAgIChzaG93
U2FuZGJveFRyZWUpOgorICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZG9tLWV2ZW50
LWRpc3BhdGNoaW5nLWRpc3RyaWJ1dGVkLXRleHQtbm9kZS1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hpbmctZGlzdHJpYnV0
ZWQtdGV4dC1ub2RlLmh0bWw6CisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kb20t
ZXZlbnQtZGlzcGF0Y2hpbmctdGV4dC1ub2RlLWluLXNoYWRvdy1yb290LWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvdG91Y2gtZXZlbnQtcmV0YXJnZXRpbmctZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvdG91Y2gtZXZlbnQtcmV0
YXJnZXRpbmcuaHRtbDogQWRkZWQuCisKIDIwMTMtMDMtMDQgIFZpY3RvciBDb3N0YW4gPGNvc3Rh
bkBnbWFpbC5jb20+CiAKICAgICAgICAgRmlsZW5hbWUgcGFzc2VkIHRvIEZvcm1EYXRhLmFwcGVu
ZCgpIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBmaWxlbmFtZSBpbgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9kb20vc2hhZG93L3Jlc291cmNlcy9ldmVudC1kaXNwYXRjaGluZy5qcyBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9yZXNvdXJjZXMvZXZlbnQtZGlzcGF0Y2hpbmcuanMK
aW5kZXggYmVkM2YwNjNmMzMzZWJhYTA4ZTg5MjFiZmU3NTVhOTIzMjk5NzEzNy4uYTNiNzgyZmQw
MGZmYzBhNGE4MTUwOTExZTUwMTQ2NjAyZTMyZjZjZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vc2hhZG93L3Jlc291cmNlcy9ldmVudC1kaXNwYXRjaGluZy5qcworKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvcmVzb3VyY2VzL2V2ZW50LWRpc3BhdGNoaW5nLmpzCkBA
IC02OCw5ICs2OCw5IEBAIGZ1bmN0aW9uIGRpc3BhdGNoZWRFdmVudChldmVudFR5cGUpCiAKIGZ1
bmN0aW9uIHJlY29yZEV2ZW50KGV2ZW50KQogewotICAgIHZhciBldmVudFR5cGUgPSBldmVudC50
eXBlCisgICAgdmFyIGV2ZW50VHlwZSA9IGV2ZW50LnR5cGU7CiAgICAgaWYgKCFldmVudFJlY29y
ZHNbZXZlbnRUeXBlXSkgewotICAgICAgICBldmVudFJlY29yZHNbZXZlbnRUeXBlXSA9IFtdCisg
ICAgICAgIGV2ZW50UmVjb3Jkc1tldmVudFR5cGVdID0gW107CiAgICAgfQogICAgIHZhciBldmVu
dFN0cmluZyA9ICcnOwogICAgIGlmIChldmVudC5jdXJyZW50VGFyZ2V0KQpAQCAtNzksNiArNzks
MTIgQEAgZnVuY3Rpb24gcmVjb3JkRXZlbnQoZXZlbnQpCiAgICAgICAgIGV2ZW50U3RyaW5nICs9
ICcgKHRhcmdldDogJyArIGV2ZW50LnRhcmdldC5pZCArICcpJzsKICAgICBpZiAoZXZlbnQucmVs
YXRlZFRhcmdldCkKICAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyAocmVsYXRlZDogJyArIGV2ZW50
LnJlbGF0ZWRUYXJnZXQuaWQgKyAnKSc7CisgICAgaWYgKGV2ZW50LnRvdWNoZXMpCisgICAgICAg
IGV2ZW50U3RyaW5nICs9ICcgKHRvdWNoZXM6ICcgKyBkdW1wVG91Y2hMaXN0KGV2ZW50LnRvdWNo
ZXMpICsgJyknOworICAgIGlmIChldmVudC50YXJnZXRUb3VjaGVzKQorICAgICAgICBldmVudFN0
cmluZyArPSAnICh0YXJnZXRUb3VjaGVzOiAnICsgZHVtcFRvdWNoTGlzdChldmVudC50YXJnZXRU
b3VjaGVzKSArICcpJzsKKyAgICBpZiAoZXZlbnQuY2hhbmdlZFRvdWNoZXMpCisgICAgICAgIGV2
ZW50U3RyaW5nICs9ICcgKGNoYW5nZWRUb3VjaGVzOiAnICsgZHVtcFRvdWNoTGlzdChldmVudC5j
aGFuZ2VkVG91Y2hlcykgKyAnKSc7CiAgICAgaWYgKGV2ZW50LmV2ZW50UGhhc2UgPT0gMSkKICAg
ICAgICAgZXZlbnRTdHJpbmcgKz0gJyhjYXB0dXJpbmcgcGhhc2UpJzsKICAgICBpZiAoZXZlbnQu
dGFyZ2V0ICYmIGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYgZXZlbnQudGFyZ2V0LmlkID09IGV2ZW50
LmN1cnJlbnRUYXJnZXQuaWQpCkBAIC05Niw2ICsxMDIsMjIgQEAgZnVuY3Rpb24gZHVtcE5vZGUo
bm9kZSkKICAgICByZXR1cm4gb3V0cHV0OwogfQogCitmdW5jdGlvbiBkdW1wVG91Y2hMaXN0KHRv
dWNoZXMpIHsKKyAgICB2YXIgaWRzID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3Vj
aGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmICh0b3VjaGVzLml0ZW0oaSkudGFyZ2V0ICYm
IHRvdWNoZXMuaXRlbShpKS50YXJnZXQuaWQpCisgICAgICAgICAgICBpZHMucHVzaCh0b3VjaGVz
Lml0ZW0oaSkudGFyZ2V0LmlkKTsKKyAgICB9CisgICAgaWRzLnNvcnQoKTsKKyAgICB2YXIgcmVz
dWx0ID0gJyc7CisgICAgZm9yIChpID0gMDsgaSA8IGlkcy5sZW5ndGg7ICsraSkgeworICAgICAg
ICAgcmVzdWx0ICs9IGlkc1tpXTsKKyAgICAgICAgIGlmIChpICE9IGlkcy5sZW5ndGggLSAxKQor
ICAgICAgICAgICAgIHJlc3VsdCArPSAnLCAnOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCiBmdW5jdGlvbiBkdW1wQ29tcG9zZWRTaGFkb3dUcmVlKG5vZGUsIGluZGVudCkKIHsKICAg
ICBpbmRlbnQgPSBpbmRlbnQgfHwgIiI7CkBAIC0xMzAsNiArMTUyLDExIEBAIGZ1bmN0aW9uIGRl
YnVnRGlzcGF0Y2hlZEV2ZW50KGV2ZW50VHlwZSkKICAgICAgICAgZGVidWcoJyAgICAnICsgZXZl
bnRzW2ldKQogfQogCitmdW5jdGlvbiBzb3J0RGlzcGF0Y2hlZEV2ZW50KGV2ZW50VHlwZSkKK3sK
KyAgICBkaXNwYXRjaGVkRXZlbnQoZXZlbnRUeXBlKS5zb3J0KCk7Cit9CisKIGZ1bmN0aW9uIG1v
dmVNb3VzZShvbGRFbGVtZW50SWQsIG5ld0VsZW1lbnRJZCkKIHsKICAgICBjbGVhckV2ZW50UmVj
b3JkcygpOwpAQCAtMTQ5LDQgKzE3NiwzIEBAIGZ1bmN0aW9uIHNob3dTYW5kYm94VHJlZSgpCiAg
ICAgc2FuZGJveC5vZmZzZXRMZWZ0OwogICAgIGRlYnVnKCdcblxuQ29tcG9zZWQgU2hhZG93IFRy
ZWUgd2lsbCBiZTpcbicgKyBkdW1wQ29tcG9zZWRTaGFkb3dUcmVlKHNhbmRib3gpKTsKIH0KLQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQt
ZGlzcGF0Y2hpbmctZGlzdHJpYnV0ZWQtdGV4dC1ub2RlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZG9tLWV2ZW50LWRpc3BhdGNoaW5nLWRpc3RyaWJ1
dGVkLXRleHQtbm9kZS1leHBlY3RlZC50eHQKaW5kZXggOWEwNzY0MDJkMjk1ODg1ODVhMGIwZGU0
NTlhNTM5NDMxZTE5MGUxMC4uMzI5N2YyZjFiYTQ5NTQ4MTU5NDJiNTljZGZiNDI0ZTM5N2RlNWRi
ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZl
bnQtZGlzcGF0Y2hpbmctZGlzdHJpYnV0ZWQtdGV4dC1ub2RlLWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWRvbS1ldmVudC1kaXNwYXRjaGluZy1k
aXN0cmlidXRlZC10ZXh0LW5vZGUtZXhwZWN0ZWQudHh0CkBAIC0yMSwxNyArMjEsMTcgQEAgTW92
aW5nIG1vdXNlIGZyb20gYSBkaXN0cmlidXRlZCB0ZXh0IG5vZGUgdG8gdG9wCiAgIG1vdXNlb3Zl
cgogICAgICBAdG9wICh0YXJnZXQ6IHRvcCkgKHJlbGF0ZWQ6IHNoYWRvdy1ob3N0KQogCi0gIHRv
dWNoc3RhcnQKLSAgICAgQGNvbnRlbnQgKHRhcmdldDogY29udGVudCkKLSAgICAgQHNoYWRvdy1y
b290ICh0YXJnZXQ6IGNvbnRlbnQpCi0gICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBzaGFkb3ct
aG9zdCkKLSAgICAgQHRvcCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkKLQogICBtb3VzZXdoZWVsCiAg
ICAgIEBjb250ZW50ICh0YXJnZXQ6IGNvbnRlbnQpCiAgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0
OiBjb250ZW50KQogICAgICBAc2hhZG93LWhvc3QgKHRhcmdldDogc2hhZG93LWhvc3QpCiAgICAg
IEB0b3AgKHRhcmdldDogc2hhZG93LWhvc3QpCisKKyAgdG91Y2hzdGFydAorICAgICBAY29udGVu
dCAodGFyZ2V0OiBjb250ZW50KSAodG91Y2hlczogY29udGVudCkgKHRhcmdldFRvdWNoZXM6IGNv
bnRlbnQpIChjaGFuZ2VkVG91Y2hlczogY29udGVudCkKKyAgICAgQHNoYWRvdy1yb290ICh0YXJn
ZXQ6IGNvbnRlbnQpICh0b3VjaGVzOiBjb250ZW50KSAodGFyZ2V0VG91Y2hlczogY29udGVudCkg
KGNoYW5nZWRUb3VjaGVzOiBjb250ZW50KQorICAgICBAc2hhZG93LWhvc3QgKHRhcmdldDogc2hh
ZG93LWhvc3QpICh0b3VjaGVzOiBzaGFkb3ctaG9zdCkgKHRhcmdldFRvdWNoZXM6IHNoYWRvdy1o
b3N0KSAoY2hhbmdlZFRvdWNoZXM6IHNoYWRvdy1ob3N0KQorICAgICBAdG9wICh0YXJnZXQ6IHNo
YWRvdy1ob3N0KSAodG91Y2hlczogc2hhZG93LWhvc3QpICh0YXJnZXRUb3VjaGVzOiBzaGFkb3ct
aG9zdCkgKGNoYW5nZWRUb3VjaGVzOiBzaGFkb3ctaG9zdCkKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hpbmctZGlzdHJpYnV0ZWQtdGV4
dC1ub2RlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWRvbS1ldmVu
dC1kaXNwYXRjaGluZy1kaXN0cmlidXRlZC10ZXh0LW5vZGUuaHRtbAppbmRleCAyNzVhZDg3NGJl
ZmYyYzg4OGUzMDMwOTY4MTYwY2M4NjJjN2EzNTRhLi5lMjIxMjFkZWVlZDVkYzY3NmM2MTRlNDdk
MDg5ZTI0Mzg2ZDFjNDY3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cv
c2hhZG93LWRvbS1ldmVudC1kaXNwYXRjaGluZy1kaXN0cmlidXRlZC10ZXh0LW5vZGUuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWRvbS1ldmVudC1kaXNwYXRj
aGluZy1kaXN0cmlidXRlZC10ZXh0LW5vZGUuaHRtbApAQCAtMzUsMTMgKzM1LDE0IEBACiAgICAg
ICAgIGRlYnVnRGlzcGF0Y2hlZEV2ZW50KCdtb3VzZW91dCcpOwogICAgICAgICBkZWJ1Z0Rpc3Bh
dGNoZWRFdmVudCgnbW91c2VvdmVyJyk7CiAKLSAgICAgICAgdG91Y2hMb2NhdGlvbihob3N0KTsK
LSAgICAgICAgZGVidWdEaXNwYXRjaGVkRXZlbnQoJ3RvdWNoc3RhcnQnKTsKLQorICAgICAgICBj
bGVhckV2ZW50UmVjb3JkcygpOwogICAgICAgICBzY3JvbGxNb3VzZVdoZWVsKGhvc3QpOwogICAg
ICAgICBkZWJ1Z0Rpc3BhdGNoZWRFdmVudCgnbW91c2V3aGVlbCcpOworCisgICAgICAgIGNsZWFy
RXZlbnRSZWNvcmRzKCk7CisgICAgICAgIHRvdWNoTG9jYXRpb24oaG9zdCk7CisgICAgICAgIGRl
YnVnRGlzcGF0Y2hlZEV2ZW50KCd0b3VjaHN0YXJ0Jyk7CiAgICAgPC9zY3JpcHQ+CiAgICAgPHNj
cmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgog
PC9ib2R5PgogPC9odG1sPgotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFk
b3cvc2hhZG93LWRvbS1ldmVudC1kaXNwYXRjaGluZy10ZXh0LW5vZGUtaW4tc2hhZG93LXJvb3Qt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZl
bnQtZGlzcGF0Y2hpbmctdGV4dC1ub2RlLWluLXNoYWRvdy1yb290LWV4cGVjdGVkLnR4dAppbmRl
eCA3NzNjZTliYzhkNjIzYzE1NWVmYTZlZTAzMGNmN2M5NzhhNmI2ZjQ4Li4xY2VlMGIwNmMyOTNj
ZThhZTRiMjI5YTEwYTBmMTA5ZmY3ZGYzNDgwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9zaGFkb3cvc2hhZG93LWRvbS1ldmVudC1kaXNwYXRjaGluZy10ZXh0LW5vZGUtaW4tc2hh
ZG93LXJvb3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9z
aGFkb3ctZG9tLWV2ZW50LWRpc3BhdGNoaW5nLXRleHQtbm9kZS1pbi1zaGFkb3ctcm9vdC1leHBl
Y3RlZC50eHQKQEAgLTIyLDkgKzIyLDkgQEAgTW92aW5nIG1vdXNlIGZyb20gYSBkaXJlY3QgY2hp
bGQgdGV4dCBub2RlIG9mIHRoZSBzaGFkb3cgcm9vdCB0byB0b3AKICAgICAgQHRvcCAodGFyZ2V0
OiB0b3ApIChyZWxhdGVkOiBzaGFkb3ctaG9zdCkKIAogICB0b3VjaHN0YXJ0Ci0gICAgIEBzaGFk
b3ctcm9vdCAodGFyZ2V0OiBzaGFkb3ctcm9vdCkKLSAgICAgQHNoYWRvdy1ob3N0ICh0YXJnZXQ6
IHNoYWRvdy1ob3N0KQotICAgICBAdG9wICh0YXJnZXQ6IHNoYWRvdy1ob3N0KQorICAgICBAc2hh
ZG93LXJvb3QgKHRhcmdldDogc2hhZG93LXJvb3QpICh0b3VjaGVzOiBzaGFkb3ctcm9vdCkgKHRh
cmdldFRvdWNoZXM6IHNoYWRvdy1yb290KSAoY2hhbmdlZFRvdWNoZXM6IHNoYWRvdy1yb290KQor
ICAgICBAc2hhZG93LWhvc3QgKHRhcmdldDogc2hhZG93LWhvc3QpICh0b3VjaGVzOiBzaGFkb3ct
aG9zdCkgKHRhcmdldFRvdWNoZXM6IHNoYWRvdy1ob3N0KSAoY2hhbmdlZFRvdWNoZXM6IHNoYWRv
dy1ob3N0KQorICAgICBAdG9wICh0YXJnZXQ6IHNoYWRvdy1ob3N0KSAodG91Y2hlczogc2hhZG93
LWhvc3QpICh0YXJnZXRUb3VjaGVzOiBzaGFkb3ctaG9zdCkgKGNoYW5nZWRUb3VjaGVzOiBzaGFk
b3ctaG9zdCkKIAogICBtb3VzZXdoZWVsCiAgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBzaGFk
b3ctcm9vdCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy90b3VjaC1l
dmVudC1yZXRhcmdldGluZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFk
b3cvdG91Y2gtZXZlbnQtcmV0YXJnZXRpbmctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjMzky
YzNhZjZmMDI5ZGI3NTFhZmRhNTk0MTZkMGE1Zjk4ZTQ1NGMKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdG91Y2gtZXZlbnQtcmV0YXJnZXRpbmctZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsMTkgQEAKK1Rlc3RzIHRvIGVuc3VyZSB0aGF0IGV2ZW50IGRpc3Bh
dGNoaW5nIGJlaGF2ZXMgYXMgdGhlIFNoYWRvdyBET00gc3BlYyBkZXNjcmliZXMuCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisKKyAgdG91Y2hzdGFydAorICAgICBAZGl2MSAodGFy
Z2V0OiBkaXYxKSAodG91Y2hlczogZGl2MSwgZGl2MiwgZGl2MykgKHRhcmdldFRvdWNoZXM6IGRp
djEpIChjaGFuZ2VkVG91Y2hlczogZGl2MSwgZGl2MiwgZGl2MykKKyAgICAgQGRpdjIgKHRhcmdl
dDogZGl2MikgKHRvdWNoZXM6IGRpdjEsIGRpdjIsIGRpdjMpICh0YXJnZXRUb3VjaGVzOiBkaXYy
KSAoY2hhbmdlZFRvdWNoZXM6IGRpdjEsIGRpdjIsIGRpdjMpCisgICAgIEBkaXYyLXNoYWRvdy1y
b290LWNoaWxkICh0YXJnZXQ6IGRpdjItc2hhZG93LXJvb3QtY2hpbGQpICh0b3VjaGVzOiBkaXYx
LCBkaXYyLXNoYWRvdy1yb290LWNoaWxkLCBkaXYzKSAodGFyZ2V0VG91Y2hlczogZGl2Mi1zaGFk
b3ctcm9vdC1jaGlsZCkgKGNoYW5nZWRUb3VjaGVzOiBkaXYxLCBkaXYyLXNoYWRvdy1yb290LWNo
aWxkLCBkaXYzKQorICAgICBAZGl2MyAodGFyZ2V0OiBkaXYzKSAodG91Y2hlczogZGl2MSwgZGl2
MiwgZGl2MykgKHRhcmdldFRvdWNoZXM6IGRpdjMpIChjaGFuZ2VkVG91Y2hlczogZGl2MSwgZGl2
MiwgZGl2MykKKyAgICAgQGRpdjMtc2hhZG93LXJvb3QtY2hpbGQgKHRhcmdldDogZGl2My1zaGFk
b3ctcm9vdC1jaGlsZCkgKHRvdWNoZXM6IGRpdjEsIGRpdjIsIGRpdjMtc2hhZG93LXJvb3QtY2hp
bGQpICh0YXJnZXRUb3VjaGVzOiBkaXYzLXNoYWRvdy1yb290LWNoaWxkKSAoY2hhbmdlZFRvdWNo
ZXM6IGRpdjEsIGRpdjIsIGRpdjMtc2hhZG93LXJvb3QtY2hpbGQpCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK1RvdWNoIGV2ZW50IHJldGFyZ2V0aW5n
LgorCitmb28KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3RvdWNo
LWV2ZW50LXJldGFyZ2V0aW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdG91
Y2gtZXZlbnQtcmV0YXJnZXRpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NDkxMmJlNjIxYjY5NGQxMTAw
OGM5OGU3NDM4YTdkNjQxNTVhNTc3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vc2hhZG93L3RvdWNoLWV2ZW50LXJldGFyZ2V0aW5nLmh0bWwKQEAgLTAsMCArMSw2MCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSIuLi8u
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvc2hhZG93LWRvbS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJl
c291cmNlcy9ldmVudC1kaXNwYXRjaGluZy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxwPlRvdWNoIGV2ZW50IHJldGFyZ2V0aW5nLjwvcD4KKzxkaXYgaWQ9InNhbmRib3giPgorPC9k
aXY+Cis8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKworPHNjcmlwdD4KK3NhbmRib3guYXBwZW5k
Q2hpbGQoCisgICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ2NvbnRhaW5lcid9LAorICAgICAg
ICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnZGl2MSd9LAorICAgICAgICAgICAgICAg
ICAgICAgICAgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ2ZvbycpKSwKKyAgICAgICAgICAgICAg
Y3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ2RpdjInfSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNyZWF0ZVNoYWRvd1Jvb3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9N
KCdkaXYnLCB7fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUoJ2ZvbycpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
cmVhdGVET00oJ2RpdicsIHsnaWQnOiAnZGl2Mi1zaGFkb3ctcm9vdC1jaGlsZCd9LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgn
Zm9vJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2Jywge30s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKCdmb28nKSkpKSwKKyAgICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lkJzog
J2RpdjMnfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVNoYWRvd1Jvb3QoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7fSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ2Zvbycp
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAn
ZGl2My1zaGFkb3ctcm9vdC1jaGlsZCd9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnZm9vJykpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2Jywge30sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdmb28nKSkpKSkpOworCitz
YW5kYm94Lm9mZnNldExlZnQ7CisKK2Z1bmN0aW9uIGFkZFRvdWNoUG9pbnQodGFyZ2V0KQorewor
ICAgIGV2ZW50U2VuZGVyLmFkZFRvdWNoUG9pbnQodGFyZ2V0Lm9mZnNldExlZnQgKyB0YXJnZXQu
b2Zmc2V0V2lkdGggLyAyLCB0YXJnZXQub2Zmc2V0VG9wICsgdGFyZ2V0Lm9mZnNldEhlaWdodCAv
IDIpOworfQorCitmdW5jdGlvbiBzZW5kVG91Y2hFdmVudChlbGVtZW50cykKK3sKKyAgICBldmVu
dFNlbmRlci5jbGVhclRvdWNoUG9pbnRzKCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVt
ZW50cy5sZW5ndGg7ICsraSkKKyAgICAgICAgYWRkVG91Y2hQb2ludChnZXROb2RlSW5TaGFkb3dU
cmVlU3RhY2soZWxlbWVudHNbaV0pKTsKKyAgICBldmVudFNlbmRlci50b3VjaFN0YXJ0KCk7Cisg
ICAgZXZlbnRTZW5kZXIudG91Y2hFbmQoKTsKK30KKworYWRkRXZlbnRMaXN0ZW5lcnMoWydkaXYx
JywgJ2RpdjInLCAnZGl2MycsCisgICAgICAgICAgICAgICAgICAgJ2RpdjIvZGl2Mi1zaGFkb3ct
cm9vdC1jaGlsZCcsICdkaXYzL2RpdjMtc2hhZG93LXJvb3QtY2hpbGQnXSk7CitzZW5kVG91Y2hF
dmVudChbJ2RpdjEnLCAnZGl2Mi9kaXYyLXNoYWRvdy1yb290LWNoaWxkJywgJ2RpdjMvZGl2My1z
aGFkb3ctcm9vdC1jaGlsZCddKTsKK3NvcnREaXNwYXRjaGVkRXZlbnQoJ3RvdWNoc3RhcnQnKTsK
K2RlYnVnRGlzcGF0Y2hlZEV2ZW50KCd0b3VjaHN0YXJ0Jyk7Cis8L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191617</attachid>
            <date>2013-03-05 17:25:42 -0800</date>
            <delta_ts>2013-03-05 21:18:19 -0800</delta_ts>
            <desc>comments addressed.</desc>
            <filename>bug-107800-20130306102148.patch</filename>
            <type>text/plain</type>
            <size>38918</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0ODE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjhjNjI1NjU1ZDU2MWEx
MjhjYzRmYzIwOTk3YzEwZTBhNjViOTllNC4uZDM0MDkwN2Y5MDZhYTA2YTMyYWNjM2E2NmNlMzU5
NjNhN2FkYjEzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkzIEBACisyMDEzLTAzLTA1ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBbU2hhZG93XSBJbXBsZW1l
bnRzIGV2ZW50IHJlLXRhcmdldGluZyBmb3IgVG91Y2ggRXZlbnRzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3ODAwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU28gZmFyLCBUb3VjaCBFdmVudHMgaGF2
ZSBiZWVuIGludGVudGlvbmFsbHkgZGlzYWJsZWQgaW4gc2hhZG93CisgICAgICAgIHRyZWUgc2lu
Y2UgaXQgYWxsb3dzIHVzZXJzIHRvIGFjY2VzcyBpbnRlcm5hbCBub2RlcyBpbiBzaGFkb3cgdHJl
ZQorICAgICAgICBieSBhY2Nlc3NpbmcgVG91Y2ggRXZlbnQncyBpbmZvcm1hdGlvbi4KKworICAg
ICAgICBUaGlzIHBhdGNoIHJlLXRhcmdldHMgYWxsIGluZGl2aWR1YWwgdG91Y2ggcG9pbnQncyB0
YXJnZXQgaW4KKyAgICAgICAgVG91Y2hMaXN0ICh0b3VjaGVzLCB0YXJnZXRUb3VjaGVzIGFuZCBj
aGFuZ2VkVG91Y2hlcykgb3duZWQgYnkgYSBUb3VjaCBFdmVudAorICAgICAgICBiZWZvcmUgdGhl
IFRvdWNoIEV2ZW50IGlzIGRpc3BhdGNoZWQgc28gdGhhdCB3ZSB3b24ndCBicmVhayBhbgorICAg
ICAgICB1cHBlciBib3VuZGFyeSBvZiBzaGFkb3cgRE9NLgorCisgICAgICAgIFRvdWNoIEV2ZW50
cyByZS10YXJnZXRpbmcgaXMgc2ltaWxhciB0byB0aGF0IG9mIE1vdXNlIEV2ZW50cworICAgICAg
ICByZS10YXJnZXRpbmcuIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgYSBUb3VjaCBFdmVudCBjYW4g
aGF2ZSBtb3JlCisgICAgICAgIHRoYW4gb25lIHJlbGF0ZWQgdGFyZ2V0IGJlY2F1c2Ugb2YgbXVs
dGlwbGUgdG91Y2hlcy4gV2UgbXVzdAorICAgICAgICByZS10YXJnZXQgYWxsIGluZGl2aWR1YWwg
dG91Y2ggcG9pbnRzIHdoaWNoIGNhbiBiZSByZWZlcnJlZCBmcm9tCisgICAgICAgIHRoZSBUb3Vj
aCBFdmVudC4KKworICAgICAgICBOb3csIFRvdWNoIEV2ZW50cyBjYW4gYmUgZmlyZWQgaW4gc2hh
ZG93IHRyZWUuIEkndmUgcmVtb3ZlZCB0aGUKKyAgICAgICAgZXhpc3RpbmcgbGltaXRhdGlvbi4K
KworICAgICAgICBUZXN0OiBmYXN0L2RvbS9zaGFkb3cvdG91Y2gtZXZlbnQtcmV0YXJnZXRpbmcu
aHRtbAorCisgICAgICAgICogZG9tL0V2ZW50Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudENvbnRleHQ6OmlzVG91Y2hFdmVudENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50Q29udGV4dDo6VG91Y2hFdmVudENvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hFdmVudENvbnRleHQ6On5Ub3VjaEV2ZW50Q29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hFdmVudENvbnRleHQ6OmlzVG91Y2hFdmVudENv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hFdmVudENvbnRleHQ6OmNoZWNrUmVhY2hh
YmlsaXR5KTogIFVzZWQgZm9yIGFzc2VydGlvbiBvZiByZWFjaGFiaWxpdHkgZm9yIGVhY2ggVG91
Y2ggcG9pbnQuCisgICAgICAgICogZG9tL0V2ZW50Q29udGV4dC5oOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChFdmVudENvbnRleHQpOgorICAgICAgICAoVG91Y2hFdmVudENvbnRleHQp
OiBJbnRyb2R1Y2VkIHRvIGhvbGQgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZvciByZS10YXJnZXRp
bmcgVG91Y2ggZXZlbnQuCisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50Q29udGV4dDo6dG91
Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50Q29udGV4dDo6dGFyZ2V0VG91Y2hl
cyk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50Q29udGV4dDo6Y2hhbmdlZFRvdWNoZXMp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0Ojppc1JlYWNoYWJsZSk6CisgICAgICAg
ICogZG9tL0V2ZW50UmV0YXJnZXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFJldGFy
Z2V0ZXI6OmNhbGN1bGF0ZUV2ZW50UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFJldGFy
Z2V0ZXI6OmFkanVzdEZvclRvdWNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudFJldGFyZ2V0ZXI6OmFkanVzdFRvdWNoTGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvclJlbGF0ZWRUYXJnZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRSZXRhcmdldGVyOjpjYWxjdWxhdGVBZGp1c3RlZE5vZGVzKTogVXBk
YXRlZCBzbyB0aGF0IHRoaXMgY2FuIGJlIHVzZWQgZm9yIFRvdWNoIHBvaW50IHJlLXRhcmdldGlu
Zy4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UmV0YXJnZXRlcjo6YnVpbGRSZWxhdGVkTm9kZU1h
cCk6CisgICAgICAgICogZG9tL0V2ZW50UmV0YXJnZXRlci5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChFdmVudFJldGFyZ2V0ZXIpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkaXNwYXRjaFRvdWNoRXZlbnQpOgorICAgICAgICAq
IGRvbS9Ob2RlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKE5vZGUpOgorICAgICAg
ICAqIGRvbS9Ub3VjaC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaDo6VG91Y2gpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaDo6Y2xvbmVXaXRoTmV3VGFy
Z2V0KToKKyAgICAgICAgKiBkb20vVG91Y2guaDoKKyAgICAgICAgKFRvdWNoKToKKyAgICAgICAg
KiBkb20vVG91Y2hFdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50RGlzcGF0
Y2hNZWRpYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6VG91Y2hFdmVudERpc3BhdGNoTWVkaWF0b3I6OlRvdWNoRXZlbnREaXNwYXRjaE1lZGlhdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpldmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hF
dmVudCk6CisgICAgICAgICogZG9tL1RvdWNoRXZlbnQuaDoKKyAgICAgICAgKFRvdWNoRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hFdmVudDo6c2V0VG91Y2hlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpUb3VjaEV2ZW50OjpzZXRUYXJnZXRUb3VjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlRvdWNoRXZlbnQ6OnNldENoYW5nZWRUb3VjaGVzKToKKyAgICAgICAgKFRvdWNoRXZlbnREaXNw
YXRjaE1lZGlhdG9yKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6dG9U
b3VjaEV2ZW50KToKKyAgICAgICAgKiBkb20vVG91Y2hMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRvdWNoTGlzdDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBkb20v
VG91Y2hMaXN0Lmg6CisgICAgICAgIChUb3VjaExpc3QpOgorICAgICAgICAqIHBhZ2UvRXZlbnRI
YW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3Vs
dEluRnJhbWUpOiBSZW1vdmVkIHRoZSBsaW1pdGF0aW9uLiBBZGp1c3RpbmcgaXMgbm8gbG9uZ2Vy
IGRvbmUgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hF
dmVudCk6CisKIDIwMTMtMDMtMDUgIEplZmZyZXkgUGZhdSAgPGpwZmF1QGFwcGxlLmNvbT4KIAog
ICAgICAgICBDbGVhciBhc3NvY2lhdGVkIGNhY2hlIHBhcnRpdGlvbnMgd2hlbiBkZWxldGluZyBv
cmlnaW5zJyBjYWNoZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmNwcAppbmRleCAyODk3Yzdk
ODlhYzY4M2NiMWY5ZDQzOGEyOWZjZWFmZTUxZjNlZGJiLi41NjU0M2E3NmVjYjYwMWQ5ZDg3YzZk
MzZkOWFiNTE2ZjI4NzUzNDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRD
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmNwcApAQCAt
MzMsNiArMzMsOCBAQAogI2luY2x1ZGUgIkZvY3VzRXZlbnQuaCIKICNpbmNsdWRlICJNb3VzZUV2
ZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlRvdWNoRXZlbnQuaCIKKyNpbmNs
dWRlICJUb3VjaExpc3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02MSw2ICs2Mywx
MSBAQCBib29sIEV2ZW50Q29udGV4dDo6aXNNb3VzZU9yRm9jdXNFdmVudENvbnRleHQoKSBjb25z
dAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBFdmVudENvbnRleHQ6OmlzVG91Y2hFdmVu
dENvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwogTW91c2VPckZvY3Vz
RXZlbnRDb250ZXh0OjpNb3VzZU9yRm9jdXNFdmVudENvbnRleHQoUGFzc1JlZlB0cjxOb2RlPiBu
b2RlLCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBjdXJyZW50VGFyZ2V0LCBQYXNzUmVmUHRyPEV2
ZW50VGFyZ2V0PiB0YXJnZXQpCiAgICAgOiBFdmVudENvbnRleHQobm9kZSwgY3VycmVudFRhcmdl
dCwgdGFyZ2V0KQogICAgICwgbV9yZWxhdGVkVGFyZ2V0KDApCkBAIC04Niw0ICs5Myw0NyBAQCBi
b29sIE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dDo6aXNNb3VzZU9yRm9jdXNFdmVudENvbnRleHQo
KSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykK
K1RvdWNoRXZlbnRDb250ZXh0OjpUb3VjaEV2ZW50Q29udGV4dChQYXNzUmVmUHRyPE5vZGU+IG5v
ZGUsIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IGN1cnJlbnRUYXJnZXQsIFBhc3NSZWZQdHI8RXZl
bnRUYXJnZXQ+IHRhcmdldCkKKyAgICA6IEV2ZW50Q29udGV4dChub2RlLCBjdXJyZW50VGFyZ2V0
LCB0YXJnZXQpCisgICAgLCBtX3RvdWNoZXMoVG91Y2hMaXN0OjpjcmVhdGUoKSkKKyAgICAsIG1f
dGFyZ2V0VG91Y2hlcyhUb3VjaExpc3Q6OmNyZWF0ZSgpKQorICAgICwgbV9jaGFuZ2VkVG91Y2hl
cyhUb3VjaExpc3Q6OmNyZWF0ZSgpKQoreworfQorCitUb3VjaEV2ZW50Q29udGV4dDo6flRvdWNo
RXZlbnRDb250ZXh0KCkKK3sKK30KKwordm9pZCBUb3VjaEV2ZW50Q29udGV4dDo6aGFuZGxlTG9j
YWxFdmVudHMoRXZlbnQqIGV2ZW50KSBjb25zdAoreworI2lmbmRlZiBOREVCVUcKKyAgICBjaGVj
a1JlYWNoYWJpbGl0eShtX3RvdWNoZXMuZ2V0KCkpOworICAgIGNoZWNrUmVhY2hhYmlsaXR5KG1f
dGFyZ2V0VG91Y2hlcy5nZXQoKSk7CisgICAgY2hlY2tSZWFjaGFiaWxpdHkobV9jaGFuZ2VkVG91
Y2hlcy5nZXQoKSk7CisjZW5kaWYKKyAgICBBU1NFUlQoZXZlbnQtPmlzVG91Y2hFdmVudCgpKTsK
KyAgICBUb3VjaEV2ZW50KiB0b3VjaEV2ZW50ID0gdG9Ub3VjaEV2ZW50KGV2ZW50KTsKKyAgICB0
b3VjaEV2ZW50LT5zZXRUb3VjaGVzKG1fdG91Y2hlcyk7CisgICAgdG91Y2hFdmVudC0+c2V0VGFy
Z2V0VG91Y2hlcyhtX3RhcmdldFRvdWNoZXMpOworICAgIHRvdWNoRXZlbnQtPnNldENoYW5nZWRU
b3VjaGVzKG1fY2hhbmdlZFRvdWNoZXMpOworICAgIEV2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxF
dmVudHMoZXZlbnQpOworfQorCitib29sIFRvdWNoRXZlbnRDb250ZXh0Ojppc1RvdWNoRXZlbnRD
b250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmbmRlZiBOREVCVUcK
K3ZvaWQgVG91Y2hFdmVudENvbnRleHQ6OmNoZWNrUmVhY2hhYmlsaXR5KFRvdWNoTGlzdCogdG91
Y2hMaXN0KSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdG91Y2hMaXN0LT5s
ZW5ndGgoKTsgKytpKQorICAgICAgICBBU1NFUlQoaXNSZWFjaGFibGUodG91Y2hMaXN0LT5pdGVt
KGkpLT50YXJnZXQoKS0+dG9Ob2RlKCkpKTsKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gRU5BQkxF
KFRPVUNIX0VWRU5UUykKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5oCmluZGV4IGZlMWNm
MDI1NTY0ZGVlMzhmZjFmZWRkYWZiMzRjMmExMTcwYjUzZTAuLmM5YTQ0N2NhOTgzYTc3YzUyMGFi
ODkzNDg3Y2JlMDQ4NmE4Mzg2MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dENvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmgKQEAgLTM1
LDYgKzM1LDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRXZlbnQ7CisjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKK2NsYXNzIFRvdWNoTGlzdDsKKyNlbmRpZgogCiBjbGFzcyBFdmVu
dENvbnRleHQgewogcHVibGljOgpAQCAtNDcsMTEgKzUwLDEyIEBAIHB1YmxpYzoKICAgICBib29s
IGN1cnJlbnRUYXJnZXRTYW1lQXNUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRUYXJn
ZXQuZ2V0KCkgPT0gbV90YXJnZXQuZ2V0KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlTG9j
YWxFdmVudHMoRXZlbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZU9yRm9jdXNF
dmVudENvbnRleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNUb3VjaEV2ZW50Q29udGV4
dCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAjaWZuZGVmIE5ERUJVRwogICAgIGJvb2wgaXNVbnJl
YWNoYWJsZU5vZGUoRXZlbnRUYXJnZXQqKTsKLSAgICBib29sIGlzUmVhY2hhYmxlKE5vZGUqKTsK
KyAgICBib29sIGlzUmVhY2hhYmxlKE5vZGUqKSBjb25zdDsKICNlbmRpZgogICAgIFJlZlB0cjxO
b2RlPiBtX25vZGU7CiAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBtX2N1cnJlbnRUYXJnZXQ7CkBA
IC03Myw2ICs3NywzNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxFdmVudFRhcmdldD4gbV9yZWxh
dGVkVGFyZ2V0OwogfTsKIAorCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKK2NsYXNzIFRvdWNo
RXZlbnRDb250ZXh0IDogcHVibGljIEV2ZW50Q29udGV4dCB7CitwdWJsaWM6CisgICAgVG91Y2hF
dmVudENvbnRleHQoUGFzc1JlZlB0cjxOb2RlPiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gY3Vy
cmVudFRhcmdldCwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gdGFyZ2V0KTsKKyAgICB2aXJ0dWFs
IH5Ub3VjaEV2ZW50Q29udGV4dCgpOworCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUxvY2FsRXZl
bnRzKEV2ZW50KikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGlzVG91Y2hFdmVu
dENvbnRleHQoKSBjb25zdCBPVkVSUklERTsKKworICAgIFRvdWNoTGlzdCogdG91Y2hlcygpIHsg
cmV0dXJuIG1fdG91Y2hlcy5nZXQoKTsgfQorICAgIFRvdWNoTGlzdCogdGFyZ2V0VG91Y2hlcygp
IHsgcmV0dXJuIG1fdGFyZ2V0VG91Y2hlcy5nZXQoKTsgfQorICAgIFRvdWNoTGlzdCogY2hhbmdl
ZFRvdWNoZXMoKSB7IHJldHVybiBtX2NoYW5nZWRUb3VjaGVzLmdldCgpOyB9CisKK3ByaXZhdGU6
CisgICAgUmVmUHRyPFRvdWNoTGlzdD4gbV90b3VjaGVzOworICAgIFJlZlB0cjxUb3VjaExpc3Q+
IG1fdGFyZ2V0VG91Y2hlczsKKyAgICBSZWZQdHI8VG91Y2hMaXN0PiBtX2NoYW5nZWRUb3VjaGVz
OworI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGNoZWNrUmVhY2hhYmlsaXR5KFRvdWNoTGlzdCop
IGNvbnN0OworI2VuZGlmCit9OworCitpbmxpbmUgVG91Y2hFdmVudENvbnRleHQqIHRvVG91Y2hF
dmVudENvbnRleHQoRXZlbnRDb250ZXh0KiBldmVudENvbnRleHQpCit7CisgICAgQVNTRVJUKCFl
dmVudENvbnRleHQgfHwgZXZlbnRDb250ZXh0LT5pc1RvdWNoRXZlbnRDb250ZXh0KCkpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUb3VjaEV2ZW50Q29udGV4dCo+KGV2ZW50Q29udGV4dCk7Cit9
CisjZW5kaWYgLy8gRU5BQkxFKFRPVUNIX0VWRU5UUykKKwogI2lmbmRlZiBOREVCVUcKIGlubGlu
ZSBib29sIEV2ZW50Q29udGV4dDo6aXNVbnJlYWNoYWJsZU5vZGUoRXZlbnRUYXJnZXQqIHRhcmdl
dCkKIHsKQEAgLTgwLDcgKzExNCw3IEBAIGlubGluZSBib29sIEV2ZW50Q29udGV4dDo6aXNVbnJl
YWNoYWJsZU5vZGUoRXZlbnRUYXJnZXQqIHRhcmdldCkKICAgICByZXR1cm4gdGFyZ2V0ICYmIHRh
cmdldC0+dG9Ob2RlKCkgJiYgIXRhcmdldC0+dG9Ob2RlKCktPmlzU1ZHRWxlbWVudCgpICYmICFp
c1JlYWNoYWJsZSh0YXJnZXQtPnRvTm9kZSgpKTsKIH0KIAotaW5saW5lIGJvb2wgRXZlbnRDb250
ZXh0Ojppc1JlYWNoYWJsZShOb2RlKiB0YXJnZXQpCitpbmxpbmUgYm9vbCBFdmVudENvbnRleHQ6
OmlzUmVhY2hhYmxlKE5vZGUqIHRhcmdldCkgY29uc3QKIHsKICAgICBBU1NFUlQodGFyZ2V0KTsK
ICAgICBUcmVlU2NvcGUqIHRhcmdldFNjb3BlID0gdGFyZ2V0LT50cmVlU2NvcGUoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFJldGFyZ2V0ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50UmV0YXJnZXRlci5jcHAKaW5kZXggOTE1ZGE0NzEyMGIwZTgyNjU2NzVm
MmFkYTZhZGFjOTJlNWE1Y2JjMi4uYThjY2U0NTY4OWJiZDI3YmEzYWRmNDg5NWYyODE3YWRjNjQz
ZmY4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UmV0YXJnZXRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UmV0YXJnZXRlci5jcHAKQEAgLTI2LDYgKzI2
LDkgQEAKICNpbmNsdWRlICJGb2N1c0V2ZW50LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgog
I2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJUb3VjaC5oIgorI2luY2x1ZGUgIlRv
dWNoRXZlbnQuaCIKKyNpbmNsdWRlICJUb3VjaExpc3QuaCIKICNpbmNsdWRlICJUcmVlU2NvcGUu
aCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
QEAgLTc3LDYgKzgwLDkgQEAgdm9pZCBFdmVudFJldGFyZ2V0ZXI6OmNhbGN1bGF0ZUV2ZW50UGF0
aChOb2RlKiBub2RlLCBFdmVudCogZXZlbnQsIEV2ZW50UGF0aCYgZXYKICAgICBib29sIGluRG9j
dW1lbnQgPSBub2RlLT5pbkRvY3VtZW50KCk7CiAgICAgYm9vbCBpc1NWR0VsZW1lbnQgPSBub2Rl
LT5pc1NWR0VsZW1lbnQoKTsKICAgICBib29sIGlzTW91c2VPckZvY3VzRXZlbnQgPSBldmVudC0+
aXNNb3VzZUV2ZW50KCkgfHwgZXZlbnQtPmlzRm9jdXNFdmVudCgpOworI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCisgICAgYm9vbCBpc1RvdWNoRXZlbnQgPSBldmVudC0+aXNUb3VjaEV2ZW50KCk7
CisjZW5kaWYKICAgICBWZWN0b3I8RXZlbnRUYXJnZXQqLCAzMj4gdGFyZ2V0U3RhY2s7CiAgICAg
Zm9yIChFdmVudFBhdGhXYWxrZXIgd2Fsa2VyKG5vZGUpOyB3YWxrZXIubm9kZSgpOyB3YWxrZXIu
bW92ZVRvUGFyZW50KCkpIHsKICAgICAgICAgTm9kZSogbm9kZSA9IHdhbGtlci5ub2RlKCk7CkBA
IC04Niw2ICs5MiwxMCBAQCB2b2lkIEV2ZW50UmV0YXJnZXRlcjo6Y2FsY3VsYXRlRXZlbnRQYXRo
KE5vZGUqIG5vZGUsIEV2ZW50KiBldmVudCwgRXZlbnRQYXRoJiBldgogICAgICAgICAgICAgdGFy
Z2V0U3RhY2suYXBwZW5kKHRhcmdldFN0YWNrLmxhc3QoKSk7CiAgICAgICAgIGlmIChpc01vdXNl
T3JGb2N1c0V2ZW50KQogICAgICAgICAgICAgZXZlbnRQYXRoLmFwcGVuZChhZG9wdFB0cihuZXcg
TW91c2VPckZvY3VzRXZlbnRDb250ZXh0KG5vZGUsIGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1Rhcmdl
dFJ1bGVzKG5vZGUpLCB0YXJnZXRTdGFjay5sYXN0KCkpKSk7CisjaWYgRU5BQkxFKFRPVUNIX0VW
RU5UUykKKyAgICAgICAgZWxzZSBpZiAoaXNUb3VjaEV2ZW50KQorICAgICAgICAgICAgZXZlbnRQ
YXRoLmFwcGVuZChhZG9wdFB0cihuZXcgVG91Y2hFdmVudENvbnRleHQobm9kZSwgZXZlbnRUYXJn
ZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMobm9kZSksIHRhcmdldFN0YWNrLmxhc3QoKSkpKTsKKyNl
bmRpZgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBldmVudFBhdGguYXBwZW5kKGFkb3B0UHRy
KG5ldyBFdmVudENvbnRleHQobm9kZSwgZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMo
bm9kZSksIHRhcmdldFN0YWNrLmxhc3QoKSkpKTsKICAgICAgICAgaWYgKCFpbkRvY3VtZW50KQpA
QCAtMTExLDcgKzEyMSw0NCBAQCB2b2lkIEV2ZW50UmV0YXJnZXRlcjo6YWRqdXN0Rm9yRm9jdXNF
dmVudChOb2RlKiBub2RlLCBjb25zdCBGb2N1c0V2ZW50JiBmb2N1c0V2ZQogICAgIGFkanVzdEZv
clJlbGF0ZWRUYXJnZXQobm9kZSwgZm9jdXNFdmVudC5yZWxhdGVkVGFyZ2V0KCksIGV2ZW50UGF0
aCk7CiB9CiAKLXZvaWQgRXZlbnRSZXRhcmdldGVyOjphZGp1c3RGb3JSZWxhdGVkVGFyZ2V0KE5v
ZGUqIG5vZGUsIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0LCBFdmVudFBhdGgmIGV2ZW50UGF0
aCkKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQordm9pZCBFdmVudFJldGFyZ2V0ZXI6OmFkanVz
dEZvclRvdWNoRXZlbnQoTm9kZSogbm9kZSwgY29uc3QgVG91Y2hFdmVudCYgdG91Y2hFdmVudCwg
RXZlbnRQYXRoJiBldmVudFBhdGgpCit7CisgICAgc2l6ZV90IGV2ZW50UGF0aFNpemUgPSBldmVu
dFBhdGguc2l6ZSgpOworCisgICAgRXZlbnRQYXRoVG91Y2hMaXN0cyBldmVudFBhdGhUb3VjaGVz
KGV2ZW50UGF0aFNpemUpOworICAgIEV2ZW50UGF0aFRvdWNoTGlzdHMgZXZlbnRQYXRoVGFyZ2V0
VG91Y2hlcyhldmVudFBhdGhTaXplKTsKKyAgICBFdmVudFBhdGhUb3VjaExpc3RzIGV2ZW50UGF0
aENoYW5nZWRUb3VjaGVzKGV2ZW50UGF0aFNpemUpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBldmVudFBhdGhTaXplOyArK2kpIHsKKyAgICAgICAgQVNTRVJUKGV2ZW50UGF0aFtpXS0+
aXNUb3VjaEV2ZW50Q29udGV4dCgpKTsKKyAgICAgICAgVG91Y2hFdmVudENvbnRleHQqIHRvdWNo
RXZlbnRDb250ZXh0ID0gdG9Ub3VjaEV2ZW50Q29udGV4dChldmVudFBhdGhbaV0uZ2V0KCkpOwor
ICAgICAgICBldmVudFBhdGhUb3VjaGVzW2ldID0gdG91Y2hFdmVudENvbnRleHQtPnRvdWNoZXMo
KTsKKyAgICAgICAgZXZlbnRQYXRoVGFyZ2V0VG91Y2hlc1tpXSA9IHRvdWNoRXZlbnRDb250ZXh0
LT50YXJnZXRUb3VjaGVzKCk7CisgICAgICAgIGV2ZW50UGF0aENoYW5nZWRUb3VjaGVzW2ldID0g
dG91Y2hFdmVudENvbnRleHQtPmNoYW5nZWRUb3VjaGVzKCk7CisgICAgfQorCisgICAgYWRqdXN0
VG91Y2hMaXN0KG5vZGUsICp0b3VjaEV2ZW50LnRvdWNoZXMoKSwgZXZlbnRQYXRoLCBldmVudFBh
dGhUb3VjaGVzKTsKKyAgICBhZGp1c3RUb3VjaExpc3Qobm9kZSwgKnRvdWNoRXZlbnQudGFyZ2V0
VG91Y2hlcygpLCBldmVudFBhdGgsIGV2ZW50UGF0aFRhcmdldFRvdWNoZXMpOworICAgIGFkanVz
dFRvdWNoTGlzdChub2RlLCAqdG91Y2hFdmVudC5jaGFuZ2VkVG91Y2hlcygpLCBldmVudFBhdGgs
IGV2ZW50UGF0aENoYW5nZWRUb3VjaGVzKTsKK30KKwordm9pZCBFdmVudFJldGFyZ2V0ZXI6OmFk
anVzdFRvdWNoTGlzdChjb25zdCBOb2RlKiBub2RlLCBjb25zdCBUb3VjaExpc3QmIHRvdWNoTGlz
dCwgY29uc3QgRXZlbnRQYXRoJiBldmVudFBhdGgsIEV2ZW50UGF0aFRvdWNoTGlzdHMmIGV2ZW50
UGF0aFRvdWNoTGlzdHMpCit7CisgICAgc2l6ZV90IGV2ZW50UGF0aFNpemUgPSBldmVudFBhdGgu
c2l6ZSgpOworICAgIEFTU0VSVChldmVudFBhdGhUb3VjaExpc3RzLnNpemUoKSA9PSBldmVudFBh
dGhTaXplKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRvdWNoTGlzdC5sZW5ndGgoKTsg
KytpKSB7CisgICAgICAgIGNvbnN0IFRvdWNoJiB0b3VjaCA9ICp0b3VjaExpc3QuaXRlbShpKTsK
KyAgICAgICAgQWRqdXN0ZWROb2RlcyBhZGp1c3RlZE5vZGVzOworICAgICAgICBjYWxjdWxhdGVB
ZGp1c3RlZE5vZGVzKG5vZGUsIHRvdWNoLnRhcmdldCgpLT50b05vZGUoKSwgRG9lc05vdFN0b3BB
dEJvdW5kYXJ5LCBjb25zdF9jYXN0PEV2ZW50UGF0aCY+KGV2ZW50UGF0aCksIGFkanVzdGVkTm9k
ZXMpOworICAgICAgICBBU1NFUlQoYWRqdXN0ZWROb2Rlcy5zaXplKCkgPT0gZXZlbnRQYXRoU2l6
ZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgZXZlbnRQYXRoU2l6ZTsgKytqKQor
ICAgICAgICAgICAgZXZlbnRQYXRoVG91Y2hMaXN0c1tqXS0+YXBwZW5kKHRvdWNoLmNsb25lV2l0
aE5ld1RhcmdldChhZGp1c3RlZE5vZGVzW2pdLmdldCgpKSk7CisgICAgfQorfQorI2VuZGlmCisK
K3ZvaWQgRXZlbnRSZXRhcmdldGVyOjphZGp1c3RGb3JSZWxhdGVkVGFyZ2V0KGNvbnN0IE5vZGUq
IG5vZGUsIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0LCBFdmVudFBhdGgmIGV2ZW50UGF0aCkK
IHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsKQEAgLTEyMSw3ICsxNjgsNyBAQCB2
b2lkIEV2ZW50UmV0YXJnZXRlcjo6YWRqdXN0Rm9yUmVsYXRlZFRhcmdldChOb2RlKiBub2RlLCBF
dmVudFRhcmdldCogcmVsYXRlZFRhcgogICAgIGlmICghcmVsYXRlZE5vZGUpCiAgICAgICAgIHJl
dHVybjsKICAgICBBZGp1c3RlZE5vZGVzIGFkanVzdGVkTm9kZXM7Ci0gICAgY2FsY3VsYXRlQWRq
dXN0ZWROb2Rlcyhub2RlLCByZWxhdGVkTm9kZSwgZXZlbnRQYXRoLCBhZGp1c3RlZE5vZGVzKTsK
KyAgICBjYWxjdWxhdGVBZGp1c3RlZE5vZGVzKG5vZGUsIHJlbGF0ZWROb2RlLCBTdG9wQXRCb3Vu
ZGFyeUlmTmVlZGVkLCBldmVudFBhdGgsIGFkanVzdGVkTm9kZXMpOwogICAgIEFTU0VSVChhZGp1
c3RlZE5vZGVzLnNpemUoKSA8PSBldmVudFBhdGguc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGFkanVzdGVkTm9kZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgQVNTRVJUKGV2
ZW50UGF0aFtpXS0+aXNNb3VzZU9yRm9jdXNFdmVudENvbnRleHQoKSk7CkBAIC0xMzAsNyArMTc3
LDcgQEAgdm9pZCBFdmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvclJlbGF0ZWRUYXJnZXQoTm9kZSog
bm9kZSwgRXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXIKICAgICB9CiB9CiAKLXZvaWQgRXZlbnRSZXRh
cmdldGVyOjpjYWxjdWxhdGVBZGp1c3RlZE5vZGVzKE5vZGUqIG5vZGUsIE5vZGUqIHJlbGF0ZWRO
b2RlLCBFdmVudFBhdGgmIGV2ZW50UGF0aCwgQWRqdXN0ZWROb2RlcyYgYWRqdXN0ZWROb2RlcykK
K3ZvaWQgRXZlbnRSZXRhcmdldGVyOjpjYWxjdWxhdGVBZGp1c3RlZE5vZGVzKGNvbnN0IE5vZGUq
IG5vZGUsIGNvbnN0IE5vZGUqIHJlbGF0ZWROb2RlLCBFdmVudFdpdGhSZWxhdGVkVGFyZ2V0RGlz
cGF0Y2hCZWhhdmlvciBldmVudFdpdGhSZWxhdGVkVGFyZ2V0RGlzcGF0Y2hCZWhhdmlvciwgRXZl
bnRQYXRoJiBldmVudFBhdGgsIEFkanVzdGVkTm9kZXMmIGFkanVzdGVkTm9kZXMpCiB7CiAgICAg
UmVsYXRlZE5vZGVNYXAgcmVsYXRlZE5vZGVNYXA7CiAgICAgYnVpbGRSZWxhdGVkTm9kZU1hcChy
ZWxhdGVkTm9kZSwgcmVsYXRlZE5vZGVNYXApOwpAQCAtMTUwLDYgKzE5Nyw4IEBAIHZvaWQgRXZl
bnRSZXRhcmdldGVyOjpjYWxjdWxhdGVBZGp1c3RlZE5vZGVzKE5vZGUqIG5vZGUsIE5vZGUqIHJl
bGF0ZWROb2RlLCBFdmVuCiAgICAgICAgICAgICBhZGp1c3RlZE5vZGVzLmFwcGVuZChhZGp1c3Rl
ZE5vZGUpOwogICAgICAgICB9CiAgICAgICAgIGxhc3RUcmVlU2NvcGUgPSBzY29wZTsKKyAgICAg
ICAgaWYgKGV2ZW50V2l0aFJlbGF0ZWRUYXJnZXREaXNwYXRjaEJlaGF2aW9yID09IERvZXNOb3RT
dG9wQXRCb3VuZGFyeSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAodGFyZ2V0
SXNJZGVudGljYWxUb1RvUmVsYXRlZFRhcmdldCkgewogICAgICAgICAgICAgaWYgKG5vZGUtPnRy
ZWVTY29wZSgpLT5yb290Tm9kZSgpID09ICgqaXRlciktPm5vZGUoKSkgewogICAgICAgICAgICAg
ICAgIGV2ZW50UGF0aC5zaHJpbmsoaXRlciArIDEgLSBldmVudFBhdGguYmVnaW4oKSk7CkBAIC0x
NjQsNyArMjEzLDcgQEAgdm9pZCBFdmVudFJldGFyZ2V0ZXI6OmNhbGN1bGF0ZUFkanVzdGVkTm9k
ZXMoTm9kZSogbm9kZSwgTm9kZSogcmVsYXRlZE5vZGUsIEV2ZW4KICAgICB9CiB9CiAKLXZvaWQg
RXZlbnRSZXRhcmdldGVyOjpidWlsZFJlbGF0ZWROb2RlTWFwKE5vZGUqIHJlbGF0ZWROb2RlLCBS
ZWxhdGVkTm9kZU1hcCYgcmVsYXRlZE5vZGVNYXApCit2b2lkIEV2ZW50UmV0YXJnZXRlcjo6YnVp
bGRSZWxhdGVkTm9kZU1hcChjb25zdCBOb2RlKiByZWxhdGVkTm9kZSwgUmVsYXRlZE5vZGVNYXAm
IHJlbGF0ZWROb2RlTWFwKQogewogICAgIFZlY3RvcjxOb2RlKiwgMzI+IHJlbGF0ZWROb2RlU3Rh
Y2s7CiAgICAgVHJlZVNjb3BlKiBsYXN0VHJlZVNjb3BlID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudFJldGFyZ2V0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dFJldGFyZ2V0ZXIuaAppbmRleCBjNzExYTk2ZTgzMjZiZTUwMzYxZTYxZDM4YzUzNmFkODc4MzE4
MTM2Li5mMmVhMDU5Mzg2YmI2MTU2MzE1ZWViNTFjNzZjMDQ2ZTE1ZTBjYzVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRSZXRhcmdldGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50UmV0YXJnZXRlci5oCkBAIC0zOSw2ICszOSw5IEBAIGNsYXNzIEV2ZW50VGFy
Z2V0OwogY2xhc3MgRm9jdXNFdmVudDsKIGNsYXNzIE1vdXNlRXZlbnQ7CiBjbGFzcyBOb2RlOwor
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCitjbGFzcyBUb3VjaEV2ZW50OworI2VuZGlmCiBjbGFz
cyBUcmVlU2NvcGU7CiAKIGVudW0gRXZlbnREaXNwYXRjaEJlaGF2aW9yIHsKQEAgLTUxLDE2ICs1
NCwyNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlRXZlbnRQYXRoKE5vZGUq
LCBFdmVudCosIEV2ZW50UGF0aCYpOwogICAgIHN0YXRpYyB2b2lkIGFkanVzdEZvck1vdXNlRXZl
bnQoTm9kZSosIGNvbnN0IE1vdXNlRXZlbnQmLCBFdmVudFBhdGgmKTsKICAgICBzdGF0aWMgdm9p
ZCBhZGp1c3RGb3JGb2N1c0V2ZW50KE5vZGUqLCBjb25zdCBGb2N1c0V2ZW50JiwgRXZlbnRQYXRo
Jik7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8
VG91Y2hMaXN0PiA+IEV2ZW50UGF0aFRvdWNoTGlzdHM7CisgICAgc3RhdGljIHZvaWQgYWRqdXN0
Rm9yVG91Y2hFdmVudChOb2RlKiwgY29uc3QgVG91Y2hFdmVudCYsIEV2ZW50UGF0aCYpOworI2Vu
ZGlmCiAgICAgc3RhdGljIEV2ZW50VGFyZ2V0KiBldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRS
dWxlcyhOb2RlKiByZWZlcmVuY2VOb2RlKTsKIAogcHJpdmF0ZToKICAgICB0eXBlZGVmIFZlY3Rv
cjxSZWZQdHI8Tm9kZT4gPiBBZGp1c3RlZE5vZGVzOwogICAgIHR5cGVkZWYgSGFzaE1hcDxUcmVl
U2NvcGUqLCBOb2RlKj4gUmVsYXRlZE5vZGVNYXA7Ci0KLSAgICBzdGF0aWMgdm9pZCBhZGp1c3RG
b3JSZWxhdGVkVGFyZ2V0KE5vZGUqLCBFdmVudFRhcmdldCogcmVsYXRlZFRhcmdldCwgRXZlbnRQ
YXRoJik7Ci0gICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlQWRqdXN0ZWROb2RlcyhOb2RlKiwgTm9k
ZSogcmVsYXRlZE5vZGUsIEV2ZW50UGF0aCYsIEFkanVzdGVkTm9kZXMmKTsKLSAgICBzdGF0aWMg
dm9pZCBidWlsZFJlbGF0ZWROb2RlTWFwKE5vZGUqLCBSZWxhdGVkTm9kZU1hcCYpOworICAgIGVu
dW0gRXZlbnRXaXRoUmVsYXRlZFRhcmdldERpc3BhdGNoQmVoYXZpb3IgeworICAgICAgICBTdG9w
QXRCb3VuZGFyeUlmTmVlZGVkLAorICAgICAgICBEb2VzTm90U3RvcEF0Qm91bmRhcnkKKyAgICB9
OworICAgIHN0YXRpYyB2b2lkIGFkanVzdEZvclJlbGF0ZWRUYXJnZXQoY29uc3QgTm9kZSosIEV2
ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0LCBFdmVudFBhdGgmKTsKKyAgICBzdGF0aWMgdm9pZCBj
YWxjdWxhdGVBZGp1c3RlZE5vZGVzKGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiByZWxhdGVkTm9k
ZSwgRXZlbnRXaXRoUmVsYXRlZFRhcmdldERpc3BhdGNoQmVoYXZpb3IsIEV2ZW50UGF0aCYsIEFk
anVzdGVkTm9kZXMmKTsKKyAgICBzdGF0aWMgdm9pZCBidWlsZFJlbGF0ZWROb2RlTWFwKGNvbnN0
IE5vZGUqLCBSZWxhdGVkTm9kZU1hcCYpOwogICAgIHN0YXRpYyBOb2RlKiBmaW5kUmVsYXRlZE5v
ZGUoVHJlZVNjb3BlKiwgUmVsYXRlZE5vZGVNYXAmKTsKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQorICAgIHN0YXRpYyB2b2lkIGFkanVzdFRvdWNoTGlzdChjb25zdCBOb2RlKiwgY29uc3QgVG91
Y2hMaXN0JiwgY29uc3QgRXZlbnRQYXRoJiwgRXZlbnRQYXRoVG91Y2hMaXN0cyYpOworI2VuZGlm
CiB9OwogCiBpbmxpbmUgRXZlbnRUYXJnZXQqIEV2ZW50UmV0YXJnZXRlcjo6ZXZlbnRUYXJnZXRS
ZXNwZWN0aW5nVGFyZ2V0UnVsZXMoTm9kZSogcmVmZXJlbmNlTm9kZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApp
bmRleCBhNDMxZWEyYTA5N2FmNjYyMWYzOWZjNGE2ZTVkYmM0ZDk0ODcwZTIzLi5kOGIzMzE1NGU4
ZjliNTk1MGRmMzhlZmEzNjY2MzU3ZmE5NDRmYWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0xMDEs
NiArMTAxLDcgQEAKICNpbmNsdWRlICJUZW1wbGF0ZUNvbnRlbnREb2N1bWVudEZyYWdtZW50Lmgi
CiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRFdmVudC5oIgorI2luY2x1ZGUgIlRv
dWNoRXZlbnQuaCIKICNpbmNsdWRlICJUcmVlU2NvcGVBZG9wdGVyLmgiCiAjaW5jbHVkZSAiVUlF
dmVudC5oIgogI2luY2x1ZGUgIlVJRXZlbnRXaXRoS2V5U3RhdGUuaCIKQEAgLTIzNjksNiArMjM3
MCwxMCBAQCBib29sIE5vZGU6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQp
CiB7CiAgICAgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSkKICAgICAgICAgcmV0dXJuIEV2ZW50
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCh0aGlzLCBNb3VzZUV2ZW50RGlzcGF0Y2hNZWRpYXRv
cjo6Y3JlYXRlKGFkb3B0UmVmKHRvTW91c2VFdmVudChldmVudC5sZWFrUmVmKCkpKSwgTW91c2VF
dmVudERpc3BhdGNoTWVkaWF0b3I6OlN5bnRoZXRpY01vdXNlRXZlbnQpKTsKKyNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQorICAgIGlmIChldmVudC0+aXNUb3VjaEV2ZW50KCkpCisgICAgICAgIHJl
dHVybiBkaXNwYXRjaFRvdWNoRXZlbnQoYWRvcHRSZWYodG9Ub3VjaEV2ZW50KGV2ZW50LmxlYWtS
ZWYoKSkpKTsKKyNlbmRpZgogICAgIHJldHVybiBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZl
bnQodGhpcywgRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpjcmVhdGUoZXZlbnQpKTsKIH0KIApAQCAt
MjQyOSw2ICsyNDM0LDEzIEBAIGJvb2wgTm9kZTo6ZGlzcGF0Y2hHZXN0dXJlRXZlbnQoY29uc3Qg
UGxhdGZvcm1HZXN0dXJlRXZlbnQmIGV2ZW50KQogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVE9V
Q0hfRVZFTlRTKQorYm9vbCBOb2RlOjpkaXNwYXRjaFRvdWNoRXZlbnQoUGFzc1JlZlB0cjxUb3Vj
aEV2ZW50PiBldmVudCkKK3sKKyAgICByZXR1cm4gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2
ZW50KHRoaXMsIFRvdWNoRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpjcmVhdGUoZXZlbnQpKTsKK30K
KyNlbmRpZgorCiB2b2lkIE5vZGU6OmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soRXZlbnQqIHVuZGVy
bHlpbmdFdmVudCwgU2ltdWxhdGVkQ2xpY2tNb3VzZUV2ZW50T3B0aW9ucyBldmVudE9wdGlvbnMs
IFNpbXVsYXRlZENsaWNrVmlzdWFsT3B0aW9ucyB2aXN1YWxPcHRpb25zKQogewogICAgIEV2ZW50
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTaW11bGF0ZWRDbGljayh0aGlzLCB1bmRlcmx5aW5nRXZlbnQs
IGV2ZW50T3B0aW9ucywgdmlzdWFsT3B0aW9ucyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCAzZTEwYmJlNDZk
MDI0MTRmYTFkMGFiYmU3ZjJhOWFlM2UxMDkyMGQ2Li42Y2VmOWIwOWU2NjZmZjgwMGIyM2JhNDU1
OWUzZGQ4ZWUyNTJkYzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTkyLDYgKzkyLDEwIEBAIGNsYXNzIFRh
Z05vZGVMaXN0OwogY2xhc3MgUGxhdGZvcm1HZXN0dXJlRXZlbnQ7CiAjZW5kaWYKIAorI2lmIEVO
QUJMRShUT1VDSF9FVkVOVFMpCitjbGFzcyBUb3VjaEV2ZW50OworI2VuZGlmCisKICNpZiBFTkFC
TEUoTUlDUk9EQVRBKQogY2xhc3MgSFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uOwogY2xhc3MgUHJv
cGVydHlOb2RlTGlzdDsKQEAgLTYzOCw2ICs2NDIsMTAgQEAgcHVibGljOgogI2lmIEVOQUJMRShH
RVNUVVJFX0VWRU5UUykKICAgICBib29sIGRpc3BhdGNoR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRm
b3JtR2VzdHVyZUV2ZW50Jik7CiAjZW5kaWYKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAg
IGJvb2wgZGlzcGF0Y2hUb3VjaEV2ZW50KFBhc3NSZWZQdHI8VG91Y2hFdmVudD4pOworI2VuZGlm
CisKICAgICB2b2lkIGRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soRXZlbnQqIHVuZGVybHlpbmdFdmVu
dCwgU2ltdWxhdGVkQ2xpY2tNb3VzZUV2ZW50T3B0aW9ucyA9IFNlbmROb0V2ZW50cywgU2ltdWxh
dGVkQ2xpY2tWaXN1YWxPcHRpb25zID0gU2hvd1ByZXNzZWRMb29rKTsKICAgICBib29sIGRpc3Bh
dGNoQmVmb3JlTG9hZEV2ZW50KGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3Vj
aC5jcHAKaW5kZXggN2YzNjJmYzc1YjUxODcyMzYzZWZhMTUzOGYzMjYxZTdkMzdjYWRiNC4uNWVi
Yjc5MTZhMDk4NmM5MmFjZWQ5NDAwOWFmYjJiY2YxMDg1ZmRmNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL1RvdWNoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2guY3Bw
CkBAIC03NSw2ICs3NSwyOCBAQCBUb3VjaDo6VG91Y2goRnJhbWUqIGZyYW1lLCBFdmVudFRhcmdl
dCogdGFyZ2V0LCB1bnNpZ25lZCBpZGVudGlmaWVyLCBpbnQgc2NyZWVuWAogICAgIG1fYWJzb2x1
dGVMb2NhdGlvbiA9IHJvdW5kZWRMYXlvdXRQb2ludChGbG9hdFBvaW50KHgsIHkpKTsKIH0KIAor
VG91Y2g6OlRvdWNoKEV2ZW50VGFyZ2V0KiB0YXJnZXQsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGlu
dCBjbGllbnRYLCBpbnQgY2xpZW50WSwgaW50IHNjcmVlblgsIGludCBzY3JlZW5ZLCBpbnQgcGFn
ZVgsIGludCBwYWdlWSwgaW50IHJhZGl1c1gsIGludCByYWRpdXNZLCBmbG9hdCByb3RhdGlvbkFu
Z2xlLCBmbG9hdCBmb3JjZSwgTGF5b3V0UG9pbnQgYWJzb2x1dGVMb2NhdGlvbikKKyAgICA6IG1f
dGFyZ2V0KHRhcmdldCkKKyAgICAsIG1faWRlbnRpZmllcihpZGVudGlmaWVyKQorICAgICwgbV9j
bGllbnRYKGNsaWVudFgpCisgICAgLCBtX2NsaWVudFkoY2xpZW50WSkKKyAgICAsIG1fc2NyZWVu
WChzY3JlZW5YKQorICAgICwgbV9zY3JlZW5ZKHNjcmVlblkpCisgICAgLCBtX3BhZ2VYKHBhZ2VY
KQorICAgICwgbV9wYWdlWShwYWdlWSkKKyAgICAsIG1fcmFkaXVzWChyYWRpdXNYKQorICAgICwg
bV9yYWRpdXNZKHJhZGl1c1kpCisgICAgLCBtX3JvdGF0aW9uQW5nbGUocm90YXRpb25BbmdsZSkK
KyAgICAsIG1fZm9yY2UoZm9yY2UpCisgICAgLCBtX2Fic29sdXRlTG9jYXRpb24oYWJzb2x1dGVM
b2NhdGlvbikKK3sKK30KKworUGFzc1JlZlB0cjxUb3VjaD4gVG91Y2g6OmNsb25lV2l0aE5ld1Rh
cmdldChFdmVudFRhcmdldCogZXZlbnRUYXJnZXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBUb3VjaChldmVudFRhcmdldCwgbV9pZGVudGlmaWVyLCBtX2NsaWVudFgsIG1fY2xp
ZW50WSwgbV9zY3JlZW5YLCBtX3NjcmVlblksIG1fcGFnZVgsIG1fcGFnZVksIG1fcmFkaXVzWCwg
bV9yYWRpdXNZLCBtX3JvdGF0aW9uQW5nbGUsIG1fZm9yY2UsIG1fYWJzb2x1dGVMb2NhdGlvbikp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL1RvdWNoLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2guaAppbmRl
eCA2NjgyNWY1ZTM4M2YzNDA1ZTk3ZmYyZmIwMWFhZGU4ZDJhY2EwY2E4Li5iODk3OWE2NTJkNmY4
YzRiNDliOWI4MDgyZDA2MmZmMTMyN2ViYjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vVG91Y2guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2guaApAQCAtNjEsMTIgKzYx
LDE3IEBAIHB1YmxpYzoKICAgICBmbG9hdCB3ZWJraXRSb3RhdGlvbkFuZ2xlKCkgY29uc3QgeyBy
ZXR1cm4gbV9yb3RhdGlvbkFuZ2xlOyB9CiAgICAgZmxvYXQgd2Via2l0Rm9yY2UoKSBjb25zdCB7
IHJldHVybiBtX2ZvcmNlOyB9CiAgICAgY29uc3QgTGF5b3V0UG9pbnQmIGFic29sdXRlTG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlTG9jYXRpb247IH0KKyAgICBQYXNzUmVmUHRy
PFRvdWNoPiBjbG9uZVdpdGhOZXdUYXJnZXQoRXZlbnRUYXJnZXQqKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICBUb3VjaChGcmFtZSogZnJhbWUsIEV2ZW50VGFyZ2V0KiB0YXJnZXQsIHVuc2lnbmVk
IGlkZW50aWZpZXIsCiAgICAgICAgICAgICBpbnQgc2NyZWVuWCwgaW50IHNjcmVlblksIGludCBw
YWdlWCwgaW50IHBhZ2VZLAogICAgICAgICAgICAgaW50IHJhZGl1c1gsIGludCByYWRpdXNZLCBm
bG9hdCByb3RhdGlvbkFuZ2xlLCBmbG9hdCBmb3JjZSk7CiAKKyAgICBUb3VjaChFdmVudFRhcmdl
dCosIHVuc2lnbmVkIGlkZW50aWZpZXIsIGludCBjbGllbnRYLCBpbnQgY2xpZW50WSwKKyAgICAg
ICAgaW50IHNjcmVlblgsIGludCBzY3JlZW5ZLCBpbnQgcGFnZVgsIGludCBwYWdlWSwKKyAgICAg
ICAgaW50IHJhZGl1c1gsIGludCByYWRpdXNZLCBmbG9hdCByb3RhdGlvbkFuZ2xlLCBmbG9hdCBm
b3JjZSwgTGF5b3V0UG9pbnQgYWJzb2x1dGVMb2NhdGlvbik7CisKICAgICBSZWZQdHI8RXZlbnRU
YXJnZXQ+IG1fdGFyZ2V0OwogICAgIHVuc2lnbmVkIG1faWRlbnRpZmllcjsKICAgICBpbnQgbV9j
bGllbnRYOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoRXZlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL1RvdWNoRXZlbnQuY3BwCmluZGV4IGE1OGYxZGNjOWUyMzhlYmVh
NDYyY2ZhNWI2NTk0NzZlMWI2MDM2YjMuLjIzODkxNmFmNTFmZDk5MzExMDU1Yjc4YWRkOTYxMTQz
ODI0NDY3ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaEV2ZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2hFdmVudC5jcHAKQEAgLTMwLDcgKzMwLDkgQEAK
IAogI2luY2x1ZGUgIlRvdWNoRXZlbnQuaCIKIAorI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hlci5o
IgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFdmVudFJldGFyZ2V0ZXIuaCIK
ICNpbmNsdWRlICJUb3VjaExpc3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTksNiAr
MTAxLDI3IEBAIGJvb2wgVG91Y2hFdmVudDo6aXNUb3VjaEV2ZW50KCkgY29uc3QKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorUGFzc1JlZlB0cjxUb3VjaEV2ZW50RGlzcGF0Y2hNZWRpYXRvcj4gVG91
Y2hFdmVudERpc3BhdGNoTWVkaWF0b3I6OmNyZWF0ZShQYXNzUmVmUHRyPFRvdWNoRXZlbnQ+IHRv
dWNoRXZlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUb3VjaEV2ZW50RGlzcGF0Y2hN
ZWRpYXRvcih0b3VjaEV2ZW50KSk7Cit9CisKK1RvdWNoRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpU
b3VjaEV2ZW50RGlzcGF0Y2hNZWRpYXRvcihQYXNzUmVmUHRyPFRvdWNoRXZlbnQ+IHRvdWNoRXZl
bnQpCisgICAgOiBFdmVudERpc3BhdGNoTWVkaWF0b3IodG91Y2hFdmVudCkKK3sKK30KKworVG91
Y2hFdmVudCogVG91Y2hFdmVudERpc3BhdGNoTWVkaWF0b3I6OmV2ZW50KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VG91Y2hFdmVudCo+KEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6
ZXZlbnQoKSk7Cit9CisKK2Jvb2wgVG91Y2hFdmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNo
RXZlbnQoRXZlbnREaXNwYXRjaGVyKiBkaXNwYXRjaGVyKSBjb25zdAoreworICAgIEV2ZW50UmV0
YXJnZXRlcjo6YWRqdXN0Rm9yVG91Y2hFdmVudChkaXNwYXRjaGVyLT5ub2RlKCksICpldmVudCgp
LCBkaXNwYXRjaGVyLT5ldmVudFBhdGgoKSk7CisgICAgcmV0dXJuIGRpc3BhdGNoZXItPmRpc3Bh
dGNoKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShU
T1VDSF9FVkVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2hFdmVudC5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoRXZlbnQuaAppbmRleCBiMmU1YjJlZTM0NmJkODAw
NzUyZGIxOWQ2ZTgyODE0NTAzYzg0Yzc3Li42YzEzOWE4OTNiZmE3NzM5MzdmZWMzNzhmZDRhMTY1
ODNkOGUwMDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2hFdmVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaEV2ZW50LmgKQEAgLTI5LDEyICsyOSwxMiBAQAog
CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKIAorI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hNZWRp
YXRvci5oIgogI2luY2x1ZGUgIk1vdXNlUmVsYXRlZEV2ZW50LmgiCisjaW5jbHVkZSAiVG91Y2hM
aXN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgVG91Y2hMaXN0OwotCiBjbGFz
cyBUb3VjaEV2ZW50IDogcHVibGljIE1vdXNlUmVsYXRlZEV2ZW50IHsKIHB1YmxpYzoKICAgICB2
aXJ0dWFsIH5Ub3VjaEV2ZW50KCk7CkBAIC02Myw2ICs2MywxMSBAQCBwdWJsaWM6CiAgICAgVG91
Y2hMaXN0KiB0b3VjaGVzKCkgY29uc3QgeyByZXR1cm4gbV90b3VjaGVzLmdldCgpOyB9CiAgICAg
VG91Y2hMaXN0KiB0YXJnZXRUb3VjaGVzKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRUb3VjaGVz
LmdldCgpOyB9CiAgICAgVG91Y2hMaXN0KiBjaGFuZ2VkVG91Y2hlcygpIGNvbnN0IHsgcmV0dXJu
IG1fY2hhbmdlZFRvdWNoZXMuZ2V0KCk7IH0KKworICAgIHZvaWQgc2V0VG91Y2hlcyhQYXNzUmVm
UHRyPFRvdWNoTGlzdD4gdG91Y2hlcykgeyBtX3RvdWNoZXMgPSB0b3VjaGVzOyB9CisgICAgdm9p
ZCBzZXRUYXJnZXRUb3VjaGVzKFBhc3NSZWZQdHI8VG91Y2hMaXN0PiB0YXJnZXRUb3VjaGVzKSB7
IG1fdGFyZ2V0VG91Y2hlcyA9IHRhcmdldFRvdWNoZXM7IH0KKyAgICB2b2lkIHNldENoYW5nZWRU
b3VjaGVzKFBhc3NSZWZQdHI8VG91Y2hMaXN0PiBjaGFuZ2VkVG91Y2hlcykgeyBtX2NoYW5nZWRU
b3VjaGVzID0gY2hhbmdlZFRvdWNoZXM7IH0KKwogI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCiAg
ICAgdm9pZCBzZXREb3VibGVUYXAoYm9vbCBkb3VibGVUYXApIHsgbV9kb3VibGVUYXAgPSBkb3Vi
bGVUYXA7IH0KICAgICBib29sIGlzRG91YmxlVGFwKCkgY29uc3QgeyByZXR1cm4gbV9kb3VibGVU
YXA7IH0KQEAgLTkwLDYgKzk1LDIyIEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKK2NsYXNzIFRv
dWNoRXZlbnREaXNwYXRjaE1lZGlhdG9yIDogcHVibGljIEV2ZW50RGlzcGF0Y2hNZWRpYXRvciB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VG91Y2hFdmVudERpc3BhdGNoTWVkaWF0
b3I+IGNyZWF0ZShQYXNzUmVmUHRyPFRvdWNoRXZlbnQ+KTsKKworcHJpdmF0ZToKKyAgICBleHBs
aWNpdCBUb3VjaEV2ZW50RGlzcGF0Y2hNZWRpYXRvcihQYXNzUmVmUHRyPFRvdWNoRXZlbnQ+KTsK
KyAgICBUb3VjaEV2ZW50KiBldmVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRj
aEV2ZW50KEV2ZW50RGlzcGF0Y2hlciopIGNvbnN0IE9WRVJSSURFOworfTsKKworaW5saW5lIFRv
dWNoRXZlbnQqIHRvVG91Y2hFdmVudChFdmVudCogZXZlbnQpCit7CisgICAgQVNTRVJUKGV2ZW50
ICYmIGV2ZW50LT5pc1RvdWNoRXZlbnQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRvdWNo
RXZlbnQqPihldmVudCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IEVOQUJMRShUT1VDSF9FVkVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVG91
Y2hMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaExpc3QuY3BwCmluZGV4IDQxNjdl
NDJlNmRmZDBmY2M4ZGIyN2NiODlkM2RkZThkOGVlNGE5ZjkuLjlhZGQyMjhhMWRiZjgyODg0NDBm
YWRkN2I0NTVhOTAzYTg1MmNhN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3Vj
aExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaExpc3QuY3BwCkBAIC0zOCw2
ICszOCwxMSBAQCBUb3VjaCogVG91Y2hMaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4KQogICAgIHJl
dHVybiBtX3ZhbHVlc1tpbmRleF0uZ2V0KCk7CiB9CiAKK2NvbnN0IFRvdWNoKiBUb3VjaExpc3Q6
Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8VG91
Y2hMaXN0Kj4odGhpcyktPml0ZW0oaW5kZXgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoTGlzdC5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL1RvdWNoTGlzdC5oCmluZGV4IDI1NDY5NTU3MWVlMDhiYjE0YzU3
YmZlOTVlYWRkYzc4ZmY5NTZhYzYuLjYzOWI3M2NlNjM5NzEzZWExMjQ5MDVhMjY4MmIyN2Y0ZWQ0
NWRiOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaExpc3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vVG91Y2hMaXN0LmgKQEAgLTQ0LDYgKzQ0LDcgQEAgcHVibGljOgog
ICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQog
CiAgICAgVG91Y2gqIGl0ZW0odW5zaWduZWQpOworICAgIGNvbnN0IFRvdWNoKiBpdGVtKHVuc2ln
bmVkKSBjb25zdDsKIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFBhc3NSZWZQdHI8VG91Y2g+IHRv
dWNoKSB7IG1fdmFsdWVzLmFwcGVuZCh0b3VjaCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCmluZGV4IDQzNmJiMzUyMDYxNDgxN2NkMTdiMjJlMmFhZjdlNjk5N2JiZjM0OTIu
LjRlMDQxZjRiN2UyM2FlZWI3MGE1NWE2OTRmZGE0OWYwNGZhNDRmYjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTM3NzUsNyArMzc3NSw2IEBAIEhpdFRlc3RSZXN1bHQg
RXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWx0SW5GcmFtZShGcmFtZSogZnJhbWUsIGNvbnN0IExh
eW91dFBvaW50CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICBmcmFtZS0+
Y29udGVudFJlbmRlcmVyKCktPmhpdFRlc3QoSGl0VGVzdFJlcXVlc3QoaGl0VHlwZSksIHJlc3Vs
dCk7Ci0gICAgcmVzdWx0LnNldFRvTm9uU2hhZG93QW5jZXN0b3IoKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCkBAIC0zOTI2LDEwICszOTI1LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRs
ZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCkKICAgICAgICAgaW50
IGFkanVzdGVkUGFnZVggPSBscm91bmRmKHBhZ2VQb2ludC54KCkgLyBzY2FsZUZhY3Rvcik7CiAg
ICAgICAgIGludCBhZGp1c3RlZFBhZ2VZID0gbHJvdW5kZihwYWdlUG9pbnQueSgpIC8gc2NhbGVG
YWN0b3IpOwogCi0gICAgICAgIC8vIEZJWE1FOiBJbnN0ZWFkIG9mIHRha2luZyBzaGFkb3cgYW5j
ZXN0b3IsIGV2ZW50IHJldGFyZ2V0dGluZyBhbGdvcml0aG0gc2hvdWxkIHJ1bi4KLSAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzgwMAotICAgICAg
ICBFdmVudFRhcmdldCogYWRqdXN0ZWRUb3VjaFRhcmdldCA9IGRvYy0+YW5jZXN0b3JJblRoaXNT
Y29wZSh0b3VjaFRhcmdldC5nZXQoKS0+dG9Ob2RlKCkpOwotICAgICAgICBSZWZQdHI8VG91Y2g+
IHRvdWNoID0gVG91Y2g6OmNyZWF0ZSh0YXJnZXRGcmFtZSwgYWRqdXN0ZWRUb3VjaFRhcmdldCwg
cG9pbnQuaWQoKSwKKyAgICAgICAgUmVmUHRyPFRvdWNoPiB0b3VjaCA9IFRvdWNoOjpjcmVhdGUo
dGFyZ2V0RnJhbWUsIHRvdWNoVGFyZ2V0LmdldCgpLCBwb2ludC5pZCgpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludC5zY3JlZW5Qb3MoKS54KCksIHBv
aW50LnNjcmVlblBvcygpLnkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYWRqdXN0ZWRQYWdlWCwgYWRqdXN0ZWRQYWdlWSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQucmFkaXVzWCgpLCBwb2ludC5yYWRpdXNZ
KCksIHBvaW50LnJvdGF0aW9uQW5nbGUoKSwgcG9pbnQuZm9yY2UoKSk7CkBAIC0zOTg2LDcgKzM5
ODIsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9y
bVRvdWNoRXZlbnQmIGV2ZW50KQogICAgICAgICAgICAgICAgIFRvdWNoRXZlbnQ6OmNyZWF0ZShl
ZmZlY3RpdmVUb3VjaGVzLmdldCgpLCB0YXJnZXRUb3VjaGVzLmdldCgpLCBjaGFuZ2VkVG91Y2hl
c1tzdGF0ZV0ubV90b3VjaGVzLmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZU5hbWUsIHRvdWNoRXZlbnRUYXJnZXQtPnRvTm9kZSgpLT5kb2N1bWVudCgpLT5k
ZWZhdWx0VmlldygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAw
LCAwLCBldmVudC5jdHJsS2V5KCksIGV2ZW50LmFsdEtleSgpLCBldmVudC5zaGlmdEtleSgpLCBl
dmVudC5tZXRhS2V5KCkpOwotICAgICAgICAgICAgdG91Y2hFdmVudFRhcmdldC0+ZGlzcGF0Y2hF
dmVudCh0b3VjaEV2ZW50LmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIHRv
dWNoRXZlbnRUYXJnZXQtPnRvTm9kZSgpLT5kaXNwYXRjaFRvdWNoRXZlbnQodG91Y2hFdmVudC5n
ZXQoKSk7CiAgICAgICAgICAgICBzd2FsbG93ZWRFdmVudCA9IHN3YWxsb3dlZEV2ZW50IHx8IHRv
dWNoRXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSB8fCB0b3VjaEV2ZW50LT5kZWZhdWx0SGFuZGxl
ZCgpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDVlYjE4MDNlMjMzZDFiYzkzZmEyOTJkMTM4
NmYwNWYyYjRlNzNiNzMuLmM1ZmQxZTg1Y2NhNjgxNjNhMmRlOTM4YzFlMWRiZDc0Mzc5Njc1ZTAg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMy0wMy0wNSAgSGF5YXRvIEl0byAgPGhheWF0b0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW1NoYWRvd10gSW1wbGVtZW50cyBldmVudCByZS10YXJn
ZXRpbmcgZm9yIFRvdWNoIEV2ZW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwNzgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3Jlc291cmNlcy9ldmVudC1kaXNwYXRj
aGluZy5qczoKKyAgICAgICAgKHJlY29yZEV2ZW50KToKKyAgICAgICAgKGR1bXBUb3VjaExpc3Qp
OgorICAgICAgICAoc29ydERpc3BhdGNoZWRFdmVudCk6CisgICAgICAgIChzaG93U2FuZGJveFRy
ZWUpOgorICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZG9tLWV2ZW50LWRpc3BhdGNo
aW5nLWRpc3RyaWJ1dGVkLXRleHQtbm9kZS1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9k
b20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hpbmctZGlzdHJpYnV0ZWQtdGV4dC1u
b2RlLmh0bWw6CisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlz
cGF0Y2hpbmctdGV4dC1ub2RlLWluLXNoYWRvdy1yb290LWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBmYXN0L2RvbS9zaGFkb3cvdG91Y2gtZXZlbnQtcmV0YXJnZXRpbmctZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvdG91Y2gtZXZlbnQtcmV0YXJnZXRpbmcu
aHRtbDogQWRkZWQuCisKIDIwMTMtMDMtMDUgIEFsb2sgUHJpeWFkYXJzaGkgIDxhbG9rcEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmViYXNlbGluZSB0ZXh0IG91dHB1dCBmb3Igb3BhcXVlIEdy
YXBoaWNzTGF5ZXJzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvcmVz
b3VyY2VzL2V2ZW50LWRpc3BhdGNoaW5nLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93
L3Jlc291cmNlcy9ldmVudC1kaXNwYXRjaGluZy5qcwppbmRleCBiZWQzZjA2M2YzMzNlYmFhMDhl
ODkyMWJmZTc1NWE5MjMyOTk3MTM3Li5hM2I3ODJmZDAwZmZjMGE0YTgxNTA5MTFlNTAxNDY2MDJl
MzJmNmNlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvcmVzb3VyY2Vz
L2V2ZW50LWRpc3BhdGNoaW5nLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9y
ZXNvdXJjZXMvZXZlbnQtZGlzcGF0Y2hpbmcuanMKQEAgLTY4LDkgKzY4LDkgQEAgZnVuY3Rpb24g
ZGlzcGF0Y2hlZEV2ZW50KGV2ZW50VHlwZSkKIAogZnVuY3Rpb24gcmVjb3JkRXZlbnQoZXZlbnQp
CiB7Ci0gICAgdmFyIGV2ZW50VHlwZSA9IGV2ZW50LnR5cGUKKyAgICB2YXIgZXZlbnRUeXBlID0g
ZXZlbnQudHlwZTsKICAgICBpZiAoIWV2ZW50UmVjb3Jkc1tldmVudFR5cGVdKSB7Ci0gICAgICAg
IGV2ZW50UmVjb3Jkc1tldmVudFR5cGVdID0gW10KKyAgICAgICAgZXZlbnRSZWNvcmRzW2V2ZW50
VHlwZV0gPSBbXTsKICAgICB9CiAgICAgdmFyIGV2ZW50U3RyaW5nID0gJyc7CiAgICAgaWYgKGV2
ZW50LmN1cnJlbnRUYXJnZXQpCkBAIC03OSw2ICs3OSwxMiBAQCBmdW5jdGlvbiByZWNvcmRFdmVu
dChldmVudCkKICAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyAodGFyZ2V0OiAnICsgZXZlbnQudGFy
Z2V0LmlkICsgJyknOwogICAgIGlmIChldmVudC5yZWxhdGVkVGFyZ2V0KQogICAgICAgICBldmVu
dFN0cmluZyArPSAnIChyZWxhdGVkOiAnICsgZXZlbnQucmVsYXRlZFRhcmdldC5pZCArICcpJzsK
KyAgICBpZiAoZXZlbnQudG91Y2hlcykKKyAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyAodG91Y2hl
czogJyArIGR1bXBUb3VjaExpc3QoZXZlbnQudG91Y2hlcykgKyAnKSc7CisgICAgaWYgKGV2ZW50
LnRhcmdldFRvdWNoZXMpCisgICAgICAgIGV2ZW50U3RyaW5nICs9ICcgKHRhcmdldFRvdWNoZXM6
ICcgKyBkdW1wVG91Y2hMaXN0KGV2ZW50LnRhcmdldFRvdWNoZXMpICsgJyknOworICAgIGlmIChl
dmVudC5jaGFuZ2VkVG91Y2hlcykKKyAgICAgICAgZXZlbnRTdHJpbmcgKz0gJyAoY2hhbmdlZFRv
dWNoZXM6ICcgKyBkdW1wVG91Y2hMaXN0KGV2ZW50LmNoYW5nZWRUb3VjaGVzKSArICcpJzsKICAg
ICBpZiAoZXZlbnQuZXZlbnRQaGFzZSA9PSAxKQogICAgICAgICBldmVudFN0cmluZyArPSAnKGNh
cHR1cmluZyBwaGFzZSknOwogICAgIGlmIChldmVudC50YXJnZXQgJiYgZXZlbnQuY3VycmVudFRh
cmdldCAmJiBldmVudC50YXJnZXQuaWQgPT0gZXZlbnQuY3VycmVudFRhcmdldC5pZCkKQEAgLTk2
LDYgKzEwMiwyMiBAQCBmdW5jdGlvbiBkdW1wTm9kZShub2RlKQogICAgIHJldHVybiBvdXRwdXQ7
CiB9CiAKK2Z1bmN0aW9uIGR1bXBUb3VjaExpc3QodG91Y2hlcykgeworICAgIHZhciBpZHMgPSBb
XTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdWNoZXMubGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgaWYgKHRvdWNoZXMuaXRlbShpKS50YXJnZXQgJiYgdG91Y2hlcy5pdGVtKGkpLnRhcmdldC5p
ZCkKKyAgICAgICAgICAgIGlkcy5wdXNoKHRvdWNoZXMuaXRlbShpKS50YXJnZXQuaWQpOworICAg
IH0KKyAgICBpZHMuc29ydCgpOworICAgIHZhciByZXN1bHQgPSAnJzsKKyAgICBmb3IgKGkgPSAw
OyBpIDwgaWRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICByZXN1bHQgKz0gaWRzW2ldOworICAg
ICAgICAgaWYgKGkgIT0gaWRzLmxlbmd0aCAtIDEpCisgICAgICAgICAgICAgcmVzdWx0ICs9ICcs
ICc7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIGZ1bmN0aW9uIGR1bXBDb21wb3Nl
ZFNoYWRvd1RyZWUobm9kZSwgaW5kZW50KQogewogICAgIGluZGVudCA9IGluZGVudCB8fCAiIjsK
QEAgLTEzMCw2ICsxNTIsMTEgQEAgZnVuY3Rpb24gZGVidWdEaXNwYXRjaGVkRXZlbnQoZXZlbnRU
eXBlKQogICAgICAgICBkZWJ1ZygnICAgICcgKyBldmVudHNbaV0pCiB9CiAKK2Z1bmN0aW9uIHNv
cnREaXNwYXRjaGVkRXZlbnQoZXZlbnRUeXBlKQoreworICAgIGRpc3BhdGNoZWRFdmVudChldmVu
dFR5cGUpLnNvcnQoKTsKK30KKwogZnVuY3Rpb24gbW92ZU1vdXNlKG9sZEVsZW1lbnRJZCwgbmV3
RWxlbWVudElkKQogewogICAgIGNsZWFyRXZlbnRSZWNvcmRzKCk7CkBAIC0xNDksNCArMTc2LDMg
QEAgZnVuY3Rpb24gc2hvd1NhbmRib3hUcmVlKCkKICAgICBzYW5kYm94Lm9mZnNldExlZnQ7CiAg
ICAgZGVidWcoJ1xuXG5Db21wb3NlZCBTaGFkb3cgVHJlZSB3aWxsIGJlOlxuJyArIGR1bXBDb21w
b3NlZFNoYWRvd1RyZWUoc2FuZGJveCkpOwogfQotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9zaGFkb3cvc2hhZG93LWRvbS1ldmVudC1kaXNwYXRjaGluZy1kaXN0cmlidXRlZC10
ZXh0LW5vZGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRv
dy1kb20tZXZlbnQtZGlzcGF0Y2hpbmctZGlzdHJpYnV0ZWQtdGV4dC1ub2RlLWV4cGVjdGVkLnR4
dAppbmRleCA5YTA3NjQwMmQyOTU4ODU4NWEwYjBkZTQ1OWE1Mzk0MzFlMTkwZTEwLi4zMjk3ZjJm
MWJhNDk1NDgxNTk0MmI1OWNkZmI0MjRlMzk3ZGU1ZGJlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWRvbS1ldmVudC1kaXNwYXRjaGluZy1kaXN0cmlidXRl
ZC10ZXh0LW5vZGUtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRv
dy9zaGFkb3ctZG9tLWV2ZW50LWRpc3BhdGNoaW5nLWRpc3RyaWJ1dGVkLXRleHQtbm9kZS1leHBl
Y3RlZC50eHQKQEAgLTIxLDE3ICsyMSwxNyBAQCBNb3ZpbmcgbW91c2UgZnJvbSBhIGRpc3RyaWJ1
dGVkIHRleHQgbm9kZSB0byB0b3AKICAgbW91c2VvdmVyCiAgICAgIEB0b3AgKHRhcmdldDogdG9w
KSAocmVsYXRlZDogc2hhZG93LWhvc3QpCiAKLSAgdG91Y2hzdGFydAotICAgICBAY29udGVudCAo
dGFyZ2V0OiBjb250ZW50KQotICAgICBAc2hhZG93LXJvb3QgKHRhcmdldDogY29udGVudCkKLSAg
ICAgQHNoYWRvdy1ob3N0ICh0YXJnZXQ6IHNoYWRvdy1ob3N0KQotICAgICBAdG9wICh0YXJnZXQ6
IHNoYWRvdy1ob3N0KQotCiAgIG1vdXNld2hlZWwKICAgICAgQGNvbnRlbnQgKHRhcmdldDogY29u
dGVudCkKICAgICAgQHNoYWRvdy1yb290ICh0YXJnZXQ6IGNvbnRlbnQpCiAgICAgIEBzaGFkb3ct
aG9zdCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkKICAgICAgQHRvcCAodGFyZ2V0OiBzaGFkb3ctaG9z
dCkKKworICB0b3VjaHN0YXJ0CisgICAgIEBjb250ZW50ICh0YXJnZXQ6IGNvbnRlbnQpICh0b3Vj
aGVzOiBjb250ZW50KSAodGFyZ2V0VG91Y2hlczogY29udGVudCkgKGNoYW5nZWRUb3VjaGVzOiBj
b250ZW50KQorICAgICBAc2hhZG93LXJvb3QgKHRhcmdldDogY29udGVudCkgKHRvdWNoZXM6IGNv
bnRlbnQpICh0YXJnZXRUb3VjaGVzOiBjb250ZW50KSAoY2hhbmdlZFRvdWNoZXM6IGNvbnRlbnQp
CisgICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0OiBzaGFkb3ctaG9zdCkgKHRvdWNoZXM6IHNoYWRv
dy1ob3N0KSAodGFyZ2V0VG91Y2hlczogc2hhZG93LWhvc3QpIChjaGFuZ2VkVG91Y2hlczogc2hh
ZG93LWhvc3QpCisgICAgIEB0b3AgKHRhcmdldDogc2hhZG93LWhvc3QpICh0b3VjaGVzOiBzaGFk
b3ctaG9zdCkgKHRhcmdldFRvdWNoZXM6IHNoYWRvdy1ob3N0KSAoY2hhbmdlZFRvdWNoZXM6IHNo
YWRvdy1ob3N0KQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBM
RVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWRvbS1l
dmVudC1kaXNwYXRjaGluZy1kaXN0cmlidXRlZC10ZXh0LW5vZGUuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZG9tLWV2ZW50LWRpc3BhdGNoaW5nLWRpc3RyaWJ1dGVk
LXRleHQtbm9kZS5odG1sCmluZGV4IDI3NWFkODc0YmVmZjJjODg4ZTMwMzA5NjgxNjBjYzg2MmM3
YTM1NGEuLmUyMjEyMWRlZWVkNWRjNjc2YzYxNGU0N2QwODllMjQzODZkMWM0NjcgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZG9tLWV2ZW50LWRpc3BhdGNo
aW5nLWRpc3RyaWJ1dGVkLXRleHQtbm9kZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3NoYWRvdy9zaGFkb3ctZG9tLWV2ZW50LWRpc3BhdGNoaW5nLWRpc3RyaWJ1dGVkLXRleHQtbm9k
ZS5odG1sCkBAIC0zNSwxMyArMzUsMTQgQEAKICAgICAgICAgZGVidWdEaXNwYXRjaGVkRXZlbnQo
J21vdXNlb3V0Jyk7CiAgICAgICAgIGRlYnVnRGlzcGF0Y2hlZEV2ZW50KCdtb3VzZW92ZXInKTsK
IAotICAgICAgICB0b3VjaExvY2F0aW9uKGhvc3QpOwotICAgICAgICBkZWJ1Z0Rpc3BhdGNoZWRF
dmVudCgndG91Y2hzdGFydCcpOwotCisgICAgICAgIGNsZWFyRXZlbnRSZWNvcmRzKCk7CiAgICAg
ICAgIHNjcm9sbE1vdXNlV2hlZWwoaG9zdCk7CiAgICAgICAgIGRlYnVnRGlzcGF0Y2hlZEV2ZW50
KCdtb3VzZXdoZWVsJyk7CisKKyAgICAgICAgY2xlYXJFdmVudFJlY29yZHMoKTsKKyAgICAgICAg
dG91Y2hMb2NhdGlvbihob3N0KTsKKyAgICAgICAgZGVidWdEaXNwYXRjaGVkRXZlbnQoJ3RvdWNo
c3RhcnQnKTsKICAgICA8L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CiA8L2JvZHk+CiA8L2h0bWw+Ci0KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZG9tLWV2ZW50LWRpc3Bh
dGNoaW5nLXRleHQtbm9kZS1pbi1zaGFkb3ctcm9vdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWRvbS1ldmVudC1kaXNwYXRjaGluZy10ZXh0LW5vZGUt
aW4tc2hhZG93LXJvb3QtZXhwZWN0ZWQudHh0CmluZGV4IDc3M2NlOWJjOGQ2MjNjMTU1ZWZhNmVl
MDMwY2Y3Yzk3OGE2YjZmNDguLjFjZWUwYjA2YzI5M2NlOGFlNGIyMjlhMTBhMGYxMDlmZjdkZjM0
ODAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctZG9tLWV2
ZW50LWRpc3BhdGNoaW5nLXRleHQtbm9kZS1pbi1zaGFkb3ctcm9vdC1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1kb20tZXZlbnQtZGlzcGF0Y2hp
bmctdGV4dC1ub2RlLWluLXNoYWRvdy1yb290LWV4cGVjdGVkLnR4dApAQCAtMjIsOSArMjIsOSBA
QCBNb3ZpbmcgbW91c2UgZnJvbSBhIGRpcmVjdCBjaGlsZCB0ZXh0IG5vZGUgb2YgdGhlIHNoYWRv
dyByb290IHRvIHRvcAogICAgICBAdG9wICh0YXJnZXQ6IHRvcCkgKHJlbGF0ZWQ6IHNoYWRvdy1o
b3N0KQogCiAgIHRvdWNoc3RhcnQKLSAgICAgQHNoYWRvdy1yb290ICh0YXJnZXQ6IHNoYWRvdy1y
b290KQotICAgICBAc2hhZG93LWhvc3QgKHRhcmdldDogc2hhZG93LWhvc3QpCi0gICAgIEB0b3Ag
KHRhcmdldDogc2hhZG93LWhvc3QpCisgICAgIEBzaGFkb3ctcm9vdCAodGFyZ2V0OiBzaGFkb3ct
cm9vdCkgKHRvdWNoZXM6IHNoYWRvdy1yb290KSAodGFyZ2V0VG91Y2hlczogc2hhZG93LXJvb3Qp
IChjaGFuZ2VkVG91Y2hlczogc2hhZG93LXJvb3QpCisgICAgIEBzaGFkb3ctaG9zdCAodGFyZ2V0
OiBzaGFkb3ctaG9zdCkgKHRvdWNoZXM6IHNoYWRvdy1ob3N0KSAodGFyZ2V0VG91Y2hlczogc2hh
ZG93LWhvc3QpIChjaGFuZ2VkVG91Y2hlczogc2hhZG93LWhvc3QpCisgICAgIEB0b3AgKHRhcmdl
dDogc2hhZG93LWhvc3QpICh0b3VjaGVzOiBzaGFkb3ctaG9zdCkgKHRhcmdldFRvdWNoZXM6IHNo
YWRvdy1ob3N0KSAoY2hhbmdlZFRvdWNoZXM6IHNoYWRvdy1ob3N0KQogCiAgIG1vdXNld2hlZWwK
ICAgICAgQHNoYWRvdy1yb290ICh0YXJnZXQ6IHNoYWRvdy1yb290KQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3RvdWNoLWV2ZW50LXJldGFyZ2V0aW5nLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy90b3VjaC1ldmVudC1yZXRhcmdldGlu
Zy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmMzOTJjM2FmNmYwMjlkYjc1MWFmZGE1OTQxNmQw
YTVmOThlNDU0YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRv
dy90b3VjaC1ldmVudC1yZXRhcmdldGluZy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxOSBAQAor
VGVzdHMgdG8gZW5zdXJlIHRoYXQgZXZlbnQgZGlzcGF0Y2hpbmcgYmVoYXZlcyBhcyB0aGUgU2hh
ZG93IERPTSBzcGVjIGRlc2NyaWJlcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
KworICB0b3VjaHN0YXJ0CisgICAgIEBkaXYxICh0YXJnZXQ6IGRpdjEpICh0b3VjaGVzOiBkaXYx
LCBkaXYyLCBkaXYzKSAodGFyZ2V0VG91Y2hlczogZGl2MSkgKGNoYW5nZWRUb3VjaGVzOiBkaXYx
LCBkaXYyLCBkaXYzKQorICAgICBAZGl2MiAodGFyZ2V0OiBkaXYyKSAodG91Y2hlczogZGl2MSwg
ZGl2MiwgZGl2MykgKHRhcmdldFRvdWNoZXM6IGRpdjIpIChjaGFuZ2VkVG91Y2hlczogZGl2MSwg
ZGl2MiwgZGl2MykKKyAgICAgQGRpdjItc2hhZG93LXJvb3QtY2hpbGQgKHRhcmdldDogZGl2Mi1z
aGFkb3ctcm9vdC1jaGlsZCkgKHRvdWNoZXM6IGRpdjEsIGRpdjItc2hhZG93LXJvb3QtY2hpbGQs
IGRpdjMpICh0YXJnZXRUb3VjaGVzOiBkaXYyLXNoYWRvdy1yb290LWNoaWxkKSAoY2hhbmdlZFRv
dWNoZXM6IGRpdjEsIGRpdjItc2hhZG93LXJvb3QtY2hpbGQsIGRpdjMpCisgICAgIEBkaXYzICh0
YXJnZXQ6IGRpdjMpICh0b3VjaGVzOiBkaXYxLCBkaXYyLCBkaXYzKSAodGFyZ2V0VG91Y2hlczog
ZGl2MykgKGNoYW5nZWRUb3VjaGVzOiBkaXYxLCBkaXYyLCBkaXYzKQorICAgICBAZGl2My1zaGFk
b3ctcm9vdC1jaGlsZCAodGFyZ2V0OiBkaXYzLXNoYWRvdy1yb290LWNoaWxkKSAodG91Y2hlczog
ZGl2MSwgZGl2MiwgZGl2My1zaGFkb3ctcm9vdC1jaGlsZCkgKHRhcmdldFRvdWNoZXM6IGRpdjMt
c2hhZG93LXJvb3QtY2hpbGQpIChjaGFuZ2VkVG91Y2hlczogZGl2MSwgZGl2MiwgZGl2My1zaGFk
b3ctcm9vdC1jaGlsZCkKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorVG91Y2ggZXZlbnQgcmV0YXJnZXRpbmcuCisKK2ZvbworCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdG91Y2gtZXZlbnQtcmV0YXJnZXRpbmcuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy90b3VjaC1ldmVudC1yZXRhcmdldGluZy5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjg0OTEyYmU2MjFiNjk0ZDExMDA4Yzk4ZTc0MzhhN2Q2NDE1NWE1NzcKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdG91Y2gtZXZlbnQt
cmV0YXJnZXRpbmcuaHRtbApAQCAtMCwwICsxLDYwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFkb3ctZG9tLmpz
Ij48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2V2ZW50LWRpc3BhdGNoaW5n
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHA+VG91Y2ggZXZlbnQgcmV0YXJnZXRp
bmcuPC9wPgorPGRpdiBpZD0ic2FuZGJveCI+Cis8L2Rpdj4KKzxwcmUgaWQ9ImNvbnNvbGUiPjwv
cHJlPgorCis8c2NyaXB0Pgorc2FuZGJveC5hcHBlbmRDaGlsZCgKKyAgICBjcmVhdGVET00oJ2Rp
dicsIHsnaWQnOiAnY29udGFpbmVyJ30sCisgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2Jywg
eydpZCc6ICdkaXYxJ30sCisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZSgnZm9vJykpLAorICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAn
ZGl2Mid9LAorICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHt9LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnZm9vJykp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdk
aXYyLXNoYWRvdy1yb290LWNoaWxkJ30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdmb28nKSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7fSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ2ZvbycpKSkpLAorICAgICAg
ICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnZGl2Myd9LAorICAgICAgICAgICAgICAg
ICAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
cmVhdGVET00oJ2RpdicsIHt9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnZm9vJykpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdkaXYzLXNoYWRvdy1yb290LWNoaWxkJ30s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKCdmb28nKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdk
aXYnLCB7fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUoJ2ZvbycpKSkpKSk7CisKK3NhbmRib3gub2Zmc2V0TGVmdDsKKworZnVu
Y3Rpb24gYWRkVG91Y2hQb2ludCh0YXJnZXQpCit7CisgICAgZXZlbnRTZW5kZXIuYWRkVG91Y2hQ
b2ludCh0YXJnZXQub2Zmc2V0TGVmdCArIHRhcmdldC5vZmZzZXRXaWR0aCAvIDIsIHRhcmdldC5v
ZmZzZXRUb3AgKyB0YXJnZXQub2Zmc2V0SGVpZ2h0IC8gMik7Cit9CisKK2Z1bmN0aW9uIHNlbmRU
b3VjaEV2ZW50KGVsZW1lbnRzKQoreworICAgIGV2ZW50U2VuZGVyLmNsZWFyVG91Y2hQb2ludHMo
KTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgKytpKQorICAgICAg
ICBhZGRUb3VjaFBvaW50KGdldE5vZGVJblNoYWRvd1RyZWVTdGFjayhlbGVtZW50c1tpXSkpOwor
ICAgIGV2ZW50U2VuZGVyLnRvdWNoU3RhcnQoKTsKKyAgICBldmVudFNlbmRlci50b3VjaEVuZCgp
OworfQorCithZGRFdmVudExpc3RlbmVycyhbJ2RpdjEnLCAnZGl2MicsICdkaXYzJywKKyAgICAg
ICAgICAgICAgICAgICAnZGl2Mi9kaXYyLXNoYWRvdy1yb290LWNoaWxkJywgJ2RpdjMvZGl2My1z
aGFkb3ctcm9vdC1jaGlsZCddKTsKK3NlbmRUb3VjaEV2ZW50KFsnZGl2MScsICdkaXYyL2RpdjIt
c2hhZG93LXJvb3QtY2hpbGQnLCAnZGl2My9kaXYzLXNoYWRvdy1yb290LWNoaWxkJ10pOworc29y
dERpc3BhdGNoZWRFdmVudCgndG91Y2hzdGFydCcpOworZGVidWdEaXNwYXRjaGVkRXZlbnQoJ3Rv
dWNoc3RhcnQnKTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>