<?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>98787</bug_id>
          
          <creation_ts>2012-10-09 09:23:06 -0700</creation_ts>
          <short_desc>AX: aria-hidden=false does not work as expected</short_desc>
          <delta_ts>2013-12-03 09:38:03 -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>Accessibility</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="chris fleizach">cfleizach</reporter>
          <assigned_to name="chris fleizach">cfleizach</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>737855</commentid>
    <comment_count>0</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-10-09 09:23:06 -0700</bug_when>
    <thetext>* SUMMARY
aria-hidden=false does not work as expected

* NOTES
For example, a heading only perceivable to AT. HTML @hidden attribute means unrendered, but aria-hidden=&quot;false&quot; should reverse this for the APIs. It currently does not.

&lt;h1 hidden aria-hidden=&quot;false&quot;&gt;Foo&lt;/h1&gt;

http://www.w3.org/WAI/PF/aria/complete#aria-hidden</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737857</commentid>
    <comment_count>1</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-10-09 09:23:21 -0700</bug_when>
    <thetext>rdar://12359052</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737863</commentid>
    <comment_count>2</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-09 09:28:22 -0700</bug_when>
    <thetext>Hopefully AccessibilityNodeObject should make it possible for us to support this case now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737865</commentid>
    <comment_count>3</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-10-09 09:28:59 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Hopefully AccessibilityNodeObject should make it possible for us to support this case now.

Yes it does. I have it just about working correctly now using Node object</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739397</commentid>
    <comment_count>4</comment_count>
      <attachid>168093</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-10-10 16:47:53 -0700</bug_when>
    <thetext>Created attachment 168093
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739400</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-10 16:49:52 -0700</bug_when>
    <thetext>Attachment 168093 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/acce...&quot; exit_code: 1
Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1100:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/accessibility/AccessibilityNodeObject.cpp:321:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Total errors found: 2 in 13 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>739404</commentid>
    <comment_count>6</comment_count>
      <attachid>168096</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-10-10 16:54:45 -0700</bug_when>
    <thetext>Created attachment 168096
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739596</commentid>
    <comment_count>7</comment_count>
      <attachid>168096</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-10 21:40:41 -0700</bug_when>
    <thetext>Comment on attachment 168096
patch 

Attachment 168096 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14262009

New failing tests:
accessibility/aria-hidden-negates-no-visibility.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739624</commentid>
    <comment_count>8</comment_count>
      <attachid>168096</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-10 22:40:41 -0700</bug_when>
    <thetext>Comment on attachment 168096
patch 

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

Unofficial review.

I&apos;m concerned about a few details, but once those are fixed I think this is a great change!

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2726
&gt; +        if (child-&gt;renderer()) {

It looks like this adds an extra O(n^2) calculation even when none of the children have aria-hidden=false. You should avoid searching for the last render sibling is unless one of the children actually has aria-hidden=false, otherwise it&apos;s just wasted work.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2727
&gt; +            

Nit: extra blank line

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:326
&gt; +    if (!inCanvasSubtree &amp;&amp; !isHidden)

Won&apos;t this start creating accessibility objects for things that are hidden but NOT aria-hidden=false? I don&apos;t think we want to do that.

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:228
&gt; +    // So for now, let&apos;s return the position of the ancestor that does have a position,

I like this idea, but I think it&apos;d be better to give it the size of the ancestor, too. I think that&apos;s more likely to be correct for a screen magnifier.

For example, if an element within a canvas has focus, then in the absence of any other information I think the magnifier should zoom to the whole canvas, not the upper-left corner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739626</commentid>
    <comment_count>9</comment_count>
      <attachid>168096</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-10-10 22:49:12 -0700</bug_when>
    <thetext>Comment on attachment 168096
patch 

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

thanks for the review

&gt;&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2726
&gt;&gt; +        if (child-&gt;renderer()) {
&gt; 
&gt; It looks like this adds an extra O(n^2) calculation even when none of the children have aria-hidden=false. You should avoid searching for the last render sibling is unless one of the children actually has aria-hidden=false, otherwise it&apos;s just wasted work.

Why do you think it&apos;s an extra O(n^2). It should be an extra O(n).

I could scan through the node list first and check if there are hidden nodes, in which case, i could run this algorithm

or I could scan through the node list and then if i found a hidden node, i could try to scan backwards in the sibling list to find the last renderer node that was inserted, but it gets tricky because I also have to account for other hidden nodes that were inserted.

&gt;&gt; Source/WebCore/accessibility/AXObjectCache.cpp:326
&gt;&gt; +    if (!inCanvasSubtree &amp;&amp; !isHidden)
&gt; 
&gt; Won&apos;t this start creating accessibility objects for things that are hidden but NOT aria-hidden=false? I don&apos;t think we want to do that.

This allows you to create hidden nodes. The call sites are already checking for aria-hidden, but I could put in another aria-hidden check here as well just to make sure

&gt;&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:228
&gt;&gt; +    // So for now, let&apos;s return the position of the ancestor that does have a position,
&gt; 
&gt; I like this idea, but I think it&apos;d be better to give it the size of the ancestor, too. I think that&apos;s more likely to be correct for a screen magnifier.
&gt; 
&gt; For example, if an element within a canvas has focus, then in the absence of any other information I think the magnifier should zoom to the whole canvas, not the upper-left corner.

So if the parent was the &lt;body&gt; element the size would be the same size of the whole webpage with that case.

We could conditionalize so that if the parent wasn&apos;t the body, we could take the parent&apos;s size. what do you think</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739634</commentid>
    <comment_count>10</comment_count>
      <attachid>168096</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-10 23:18:03 -0700</bug_when>
    <thetext>Comment on attachment 168096
patch 

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

&gt;&gt;&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2726
&gt;&gt;&gt; +        if (child-&gt;renderer()) {
&gt;&gt; 
&gt;&gt; It looks like this adds an extra O(n^2) calculation even when none of the children have aria-hidden=false. You should avoid searching for the last render sibling is unless one of the children actually has aria-hidden=false, otherwise it&apos;s just wasted work.
&gt; 
&gt; Why do you think it&apos;s an extra O(n^2). It should be an extra O(n).
&gt; 
&gt; I could scan through the node list first and check if there are hidden nodes, in which case, i could run this algorithm
&gt; 
&gt; or I could scan through the node list and then if i found a hidden node, i could try to scan backwards in the sibling list to find the last renderer node that was inserted, but it gets tricky because I also have to account for other hidden nodes that were inserted.

I think m_children.find(childRenderer) is O(n), so the whole loop is O(n^2). Let me know if that&apos;s wrong.

This will be rare. I don&apos;t think it matters much if it&apos;s slow for the few cases where it does apply. So I think that your first idea is fine - do a quick scan for hidden nodes and quit early if there aren&apos;t any.

&gt;&gt;&gt; Source/WebCore/accessibility/AXObjectCache.cpp:326
&gt;&gt;&gt; +    if (!inCanvasSubtree &amp;&amp; !isHidden)
&gt;&gt; 
&gt;&gt; Won&apos;t this start creating accessibility objects for things that are hidden but NOT aria-hidden=false? I don&apos;t think we want to do that.
&gt; 
&gt; This allows you to create hidden nodes. The call sites are already checking for aria-hidden, but I could put in another aria-hidden check here as well just to make sure

I couldn&apos;t recall. If it&apos;s up to the callers, let&apos;s make the check more explicit (check for aria-hidden), but put both checks (canvas and aria-hidden) inside a #define that only runs in debug mode

&gt;&gt;&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:228
&gt;&gt;&gt; +    // So for now, let&apos;s return the position of the ancestor that does have a position,
&gt;&gt; 
&gt;&gt; I like this idea, but I think it&apos;d be better to give it the size of the ancestor, too. I think that&apos;s more likely to be correct for a screen magnifier.
&gt;&gt; 
&gt;&gt; For example, if an element within a canvas has focus, then in the absence of any other information I think the magnifier should zoom to the whole canvas, not the upper-left corner.
&gt; 
&gt; So if the parent was the &lt;body&gt; element the size would be the same size of the whole webpage with that case.
&gt; 
&gt; We could conditionalize so that if the parent wasn&apos;t the body, we could take the parent&apos;s size. what do you think

Would it be so bad if the size was the whole webpage? In VoiceOver it&apos;d be the same as if you stop interacting with the html content. The visual representation of that &quot;hidden&quot; element could be anywhere in the document, so I think the whole document makes sense.

Alternative idea: what about making it the width of the parent, but only up to some maximum height? That&apos;d look visually like it&apos;s something at the top of the container.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739636</commentid>
    <comment_count>11</comment_count>
      <attachid>168096</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-10-10 23:27:56 -0700</bug_when>
    <thetext>Comment on attachment 168096
patch 

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

&gt;&gt;&gt;&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2726
&gt;&gt;&gt;&gt; +        if (child-&gt;renderer()) {
&gt;&gt;&gt; 
&gt;&gt;&gt; It looks like this adds an extra O(n^2) calculation even when none of the children have aria-hidden=false. You should avoid searching for the last render sibling is unless one of the children actually has aria-hidden=false, otherwise it&apos;s just wasted work.
&gt;&gt; 
&gt;&gt; Why do you think it&apos;s an extra O(n^2). It should be an extra O(n).
&gt;&gt; 
&gt;&gt; I could scan through the node list first and check if there are hidden nodes, in which case, i could run this algorithm
&gt;&gt; 
&gt;&gt; or I could scan through the node list and then if i found a hidden node, i could try to scan backwards in the sibling list to find the last renderer node that was inserted, but it gets tricky because I also have to account for other hidden nodes that were inserted.
&gt; 
&gt; I think m_children.find(childRenderer) is O(n), so the whole loop is O(n^2). Let me know if that&apos;s wrong.
&gt; 
&gt; This will be rare. I don&apos;t think it matters much if it&apos;s slow for the few cases where it does apply. So I think that your first idea is fine - do a quick scan for hidden nodes and quit early if there aren&apos;t any.

ah good call for the find method.

&gt;&gt;&gt;&gt; Source/WebCore/accessibility/AXObjectCache.cpp:326
&gt;&gt;&gt;&gt; +    if (!inCanvasSubtree &amp;&amp; !isHidden)
&gt;&gt;&gt; 
&gt;&gt;&gt; Won&apos;t this start creating accessibility objects for things that are hidden but NOT aria-hidden=false? I don&apos;t think we want to do that.
&gt;&gt; 
&gt;&gt; This allows you to create hidden nodes. The call sites are already checking for aria-hidden, but I could put in another aria-hidden check here as well just to make sure
&gt; 
&gt; I couldn&apos;t recall. If it&apos;s up to the callers, let&apos;s make the check more explicit (check for aria-hidden), but put both checks (canvas and aria-hidden) inside a #define that only runs in debug mode

we can add an ASSERT and put in both checks

&gt;&gt;&gt;&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:228
&gt;&gt;&gt;&gt; +    // So for now, let&apos;s return the position of the ancestor that does have a position,
&gt;&gt;&gt; 
&gt;&gt;&gt; I like this idea, but I think it&apos;d be better to give it the size of the ancestor, too. I think that&apos;s more likely to be correct for a screen magnifier.
&gt;&gt;&gt; 
&gt;&gt;&gt; For example, if an element within a canvas has focus, then in the absence of any other information I think the magnifier should zoom to the whole canvas, not the upper-left corner.
&gt;&gt; 
&gt;&gt; So if the parent was the &lt;body&gt; element the size would be the same size of the whole webpage with that case.
&gt;&gt; 
&gt;&gt; We could conditionalize so that if the parent wasn&apos;t the body, we could take the parent&apos;s size. what do you think
&gt; 
&gt; Would it be so bad if the size was the whole webpage? In VoiceOver it&apos;d be the same as if you stop interacting with the html content. The visual representation of that &quot;hidden&quot; element could be anywhere in the document, so I think the whole document makes sense.
&gt; 
&gt; Alternative idea: what about making it the width of the parent, but only up to some maximum height? That&apos;d look visually like it&apos;s something at the top of the container.

I like the idea of showing that they are a portion of the parent in size (rarely do children encompass the whole bounds of the parent). Were you thinking the height would change based on the size, or would it be more static</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739639</commentid>
    <comment_count>12</comment_count>
      <attachid>168096</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-10 23:36:38 -0700</bug_when>
    <thetext>Comment on attachment 168096
patch 

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:228
&gt;&gt;&gt;&gt;&gt; +    // So for now, let&apos;s return the position of the ancestor that does have a position,
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I like this idea, but I think it&apos;d be better to give it the size of the ancestor, too. I think that&apos;s more likely to be correct for a screen magnifier.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; For example, if an element within a canvas has focus, then in the absence of any other information I think the magnifier should zoom to the whole canvas, not the upper-left corner.
&gt;&gt;&gt; 
&gt;&gt;&gt; So if the parent was the &lt;body&gt; element the size would be the same size of the whole webpage with that case.
&gt;&gt;&gt; 
&gt;&gt;&gt; We could conditionalize so that if the parent wasn&apos;t the body, we could take the parent&apos;s size. what do you think
&gt;&gt; 
&gt;&gt; Would it be so bad if the size was the whole webpage? In VoiceOver it&apos;d be the same as if you stop interacting with the html content. The visual representation of that &quot;hidden&quot; element could be anywhere in the document, so I think the whole document makes sense.
&gt;&gt; 
&gt;&gt; Alternative idea: what about making it the width of the parent, but only up to some maximum height? That&apos;d look visually like it&apos;s something at the top of the container.
&gt; 
&gt; I like the idea of showing that they are a portion of the parent in size (rarely do children encompass the whole bounds of the parent). Were you thinking the height would change based on the size, or would it be more static

I don&apos;t think the height should change with size. I think it&apos;d make sense if the height was roughly the height of a line of text - but no more than the height of the parent.

Let&apos;s try something like that and see how it looks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741246</commentid>
    <comment_count>13</comment_count>
      <attachid>168490</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-10-12 15:01:32 -0700</bug_when>
    <thetext>Created attachment 168490
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741247</commentid>
    <comment_count>14</comment_count>
      <attachid>168491</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-10-12 15:01:58 -0700</bug_when>
    <thetext>Created attachment 168491
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741252</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-12 15:05:05 -0700</bug_when>
    <thetext>Attachment 168491 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/acce...&quot; exit_code: 1
Source/WebCore/accessibility/AccessibilityNodeObject.cpp:236:  Use std::min() or std::min&lt;type&gt;() instead of the MIN() macro.  [runtime/max_min_macros] [4]
Total errors found: 1 in 15 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>741255</commentid>
    <comment_count>16</comment_count>
      <attachid>168491</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-12 15:12:01 -0700</bug_when>
    <thetext>Comment on attachment 168491
patch 

Attachment 168491 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14294027</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741256</commentid>
    <comment_count>17</comment_count>
      <attachid>168491</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-12 15:15:04 -0700</bug_when>
    <thetext>Comment on attachment 168491
patch 

Attachment 168491 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14288032</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741257</commentid>
    <comment_count>18</comment_count>
      <attachid>168492</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-10-12 15:15:20 -0700</bug_when>
    <thetext>Created attachment 168492
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741261</commentid>
    <comment_count>19</comment_count>
      <attachid>168494</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-10-12 15:16:39 -0700</bug_when>
    <thetext>Created attachment 168494
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741263</commentid>
    <comment_count>20</comment_count>
      <attachid>168495</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-10-12 15:18:51 -0700</bug_when>
    <thetext>Created attachment 168495
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742839</commentid>
    <comment_count>21</comment_count>
      <attachid>168495</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-10-15 23:14:37 -0700</bug_when>
    <thetext>Comment on attachment 168495
patch 

Unofficial review - looks good, just one more possible technical issue and a few more stylistic suggestions.

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

&gt; LayoutTests/accessibility/aria-hidden-negates-no-visibility.html:24
&gt; +    description(&quot;This tests ensures that aria-hidden=false will allow a node to be in the AX hierarchy even if its not rendered or visible&quot;);

Nit: its -&gt; it&apos;s

&gt; LayoutTests/ChangeLog:-849
&gt; -2012-10-11  Emil A Eklund  &lt;eae@chromium.org&gt;

Accidental diff/merge error?

&gt; Source/WebCore/accessibility/AXObjectCache.h:211
&gt; +bool isNodeARIAHiddenFalse(Node*);

Maybe ARIA -&gt; Aria? It&apos;s not 100% consistent, but it looks like Aria uses title case in WebKit method names for the most part.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1090
&gt;      // Ignore invisible elements.

Maybe delete this comment now - it doesn&apos;t make sense anymore, and the comment below covers the non-obvious case.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2722
&gt; +    // First do a quick run through to determine if we have any hidden nodes (most often we will not), so that.

Finish comment

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2734
&gt; +    // Determine the index at which this item should be inserted. The goal is to place it as close to

Comment is confusing now after the refactoring. How about: iterate through all of the children, including those that may have already been added, and try to insert hidden nodes in the correct place in the DOM order.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2740
&gt; +            AccessibilityObject* childRenderer = axObjectCache()-&gt;get(child-&gt;renderer());

childRenderer is a confusing variable name because it&apos;s an axobj, not a renderobj. Maybe childObj, or childAXObj or axChildObj, etc.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2744
&gt; +                    childRenderer = children.last().get();

Isn&apos;t it possible that all of the elements of childRenderer-&gt;children() are ignored too? Maybe this should be a recursive helper function: getlastUnignoredAccessibilityObjectForRenderer. That name would make it more clear what you&apos;re trying to do here and you wouldn&apos;t need a comment.

(If I&apos;m wrong and there&apos;s no way you could have multiple unignored levels, I still think a helper along those lines would be more clear.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743293</commentid>
    <comment_count>22</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-10-16 10:48:36 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 168495 [details])
&gt; Unofficial review - looks good, just one more possible technical issue and a few more stylistic suggestions.
&gt; 
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=168495&amp;action=review
&gt; 
&gt; &gt; LayoutTests/accessibility/aria-hidden-negates-no-visibility.html:24
&gt; &gt; +    description(&quot;This tests ensures that aria-hidden=false will allow a node to be in the AX hierarchy even if its not rendered or visible&quot;);
&gt; 
&gt; Nit: its -&gt; it&apos;s
&gt; 
&gt; &gt; LayoutTests/ChangeLog:-849
&gt; &gt; -2012-10-11  Emil A Eklund  &lt;eae@chromium.org&gt;
&gt; 
&gt; Accidental diff/merge error?
&gt; 
&gt; &gt; Source/WebCore/accessibility/AXObjectCache.h:211
&gt; &gt; +bool isNodeARIAHiddenFalse(Node*);
&gt; 
&gt; Maybe ARIA -&gt; Aria? It&apos;s not 100% consistent, but it looks like Aria uses title case in WebKit method names for the most part.
&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1090
&gt; &gt;      // Ignore invisible elements.
&gt; 
&gt; Maybe delete this comment now - it doesn&apos;t make sense anymore, and the comment below covers the non-obvious case.
&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2722
&gt; &gt; +    // First do a quick run through to determine if we have any hidden nodes (most often we will not), so that.
&gt; 
&gt; Finish comment
&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2734
&gt; &gt; +    // Determine the index at which this item should be inserted. The goal is to place it as close to
&gt; 
&gt; Comment is confusing now after the refactoring. How about: iterate through all of the children, including those that may have already been added, and try to insert hidden nodes in the correct place in the DOM order.
&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2740
&gt; &gt; +            AccessibilityObject* childRenderer = axObjectCache()-&gt;get(child-&gt;renderer());
&gt; 
&gt; childRenderer is a confusing variable name because it&apos;s an axobj, not a renderobj. Maybe childObj, or childAXObj or axChildObj, etc.
&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2744
&gt; &gt; +                    childRenderer = children.last().get();
&gt; 
&gt; Isn&apos;t it possible that all of the elements of childRenderer-&gt;children() are ignored too? Maybe this should be a recursive helper function: getlastUnignoredAccessibilityObjectForRenderer. That name would make it more clear what you&apos;re trying to do here and you wouldn&apos;t need a comment.
&gt; 

In this case we&apos;re able to rely on the fact that children() contains only unignored descendants, so asking for the last one should always give you what you want. 

&gt; (If I&apos;m wrong and there&apos;s no way you could have multiple unignored levels, I still think a helper along those lines would be more clear.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743305</commentid>
    <comment_count>23</comment_count>
      <attachid>168975</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-10-16 10:55:21 -0700</bug_when>
    <thetext>Created attachment 168975
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743347</commentid>
    <comment_count>24</comment_count>
      <attachid>168975</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-16 11:32:39 -0700</bug_when>
    <thetext>Comment on attachment 168975
patch

Attachment 168975 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14396218

New failing tests:
accessibility/aria-hidden-negates-no-visibility.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743669</commentid>
    <comment_count>25</comment_count>
      <attachid>169049</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-10-16 16:13:40 -0700</bug_when>
    <thetext>Created attachment 169049
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745754</commentid>
    <comment_count>26</comment_count>
      <attachid>169049</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-18 16:58:25 -0700</bug_when>
    <thetext>Comment on attachment 169049
patch

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

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:793
&gt; +bool isNodeAriaHiddenFalse(Node* node)

It would be a bit nicer to name this isNodeAriaHidden() and then just test !isNodeAriaHidden() when you want to know if it is false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746388</commentid>
    <comment_count>27</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-10-19 09:57:19 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 169049 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=169049&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/AXObjectCache.cpp:793
&gt; &gt; +bool isNodeAriaHiddenFalse(Node* node)
&gt; 
&gt; It would be a bit nicer to name this isNodeAriaHidden() and then just test !isNodeAriaHidden() when you want to know if it is false.

Will do. Thanks for the review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746413</commentid>
    <comment_count>28</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-10-19 10:16:43 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/131915</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746673</commentid>
    <comment_count>29</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-10-19 14:59:34 -0700</bug_when>
    <thetext>Reverted r131915 for reason:

It broke the build on platforms with \!HAVE(ACCESSIBILITY)

Committed r131947: &lt;http://trac.webkit.org/changeset/131947&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746675</commentid>
    <comment_count>30</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-10-19 15:02:22 -0700</bug_when>
    <thetext>It broke the Qt build ( !HAVE(ACCESSIBILITY) platform), because
isNodeAriaVisible() is declared and used outside HAVE(ACCESSIBILITY)
ifdef guard, but its implementation is inside HAVE(ACCESSIBILITY) guard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746717</commentid>
    <comment_count>31</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-10-19 15:45:53 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; It broke the Qt build ( !HAVE(ACCESSIBILITY) platform), because
&gt; isNodeAriaVisible() is declared and used outside HAVE(ACCESSIBILITY)
&gt; ifdef guard, but its implementation is inside HAVE(ACCESSIBILITY) guard.

Seems like you could have fixed that rather than rolling out.
I also suggest putting your builder in the EWS system if you want to avoid this kind of problem</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746746</commentid>
    <comment_count>32</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-10-19 16:25:16 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/131957

Committed again with fix for !HAVE(Accessibility)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749161</commentid>
    <comment_count>33</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-10-23 17:39:19 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/131957</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955936</commentid>
    <comment_count>34</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-12-03 09:38:03 -0800</bug_when>
    <thetext>Re-added layout tests
https://trac.webkit.org/changeset/160011</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168093</attachid>
            <date>2012-10-10 16:47:53 -0700</date>
            <delta_ts>2012-10-10 16:54:45 -0700</delta_ts>
            <desc>patch </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>22949</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDk3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTEwLTEwICBDaHJpcyBG
bGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IGFyaWEtaGlkZGVu
PWZhbHNlIGRvZXMgbm90IHdvcmsgYXMgZXhwZWN0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4Nzg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQVJJQSByZXF1aXJlcyB0aGF0IGFyaWEtaGlkZGVuPWZh
bHNlIG92ZXJyaWRlIGFuIGVsZW1lbnQncyBuYXRpdmUgdmlzaWJpbGl0eSBhbmQgaW5jbHVkZSB0
aGF0CisgICAgICAgIG5vZGUgaW4gdGhlIEFYIGhpZXJhcmNoeS4KKyAKKyAgICAgICAgVG8gYWNj
b21wbGlzaCB0aGlzIHdlIGhhdmUgdG8gYWxsb3cgaW52aXNpYmxlIGl0ZW1zIHRvIGJlIGluY2x1
ZGVkLCBhcyB3ZWxsIGFzIGl0ZW1zIHRoYXQKKyAgICAgICAgaGF2ZSBubyByZW5kZXJlcnMgYXNz
b2NpYXRlZCB3aXRoIHRoZW0uCisKKyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0eS9hcmlhLWhp
ZGRlbi1uZWdhdGVzLW5vLXZpc2liaWxpdHkuaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Omdl
dE9yQ3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3Jp
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OmFkZFRhYmxl
Q2VsbENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZDo6YWRk
Q2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlk
Lmg6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5QVJJQUdyaWQpOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Ym91bmRpbmdCb3hSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjppbnNlcnRDaGls
ZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWRkQ2hpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFkZENoaWxkcmVu
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0ZXh0VW5kZXJF
bGVtZW50KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
Lmg6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3Q6OnRleHRJdGVyYXRvckJlaGF2aW9yRm9yVGV4dFJhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5oOgorICAgICAgICAoQWNjZXNzaWJpbGl0eU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjphZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0OjppbnNlcnRDaGlsZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3Jl
ZEJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRk
SGlkZGVuQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5oOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCk6CisK
IDIwMTItMTAtMTAgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSzJd
IEFjdGl2YXRlIHBsdWdpbnMgd2hlbiB1c2VyIGNsaWNrcyBvbiBzbmFwc2hvdApJbmRleDogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmgJKHJldmlzaW9uIDEzMDk2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgs
NiArMjQ4LDcgQEAKICAgICBib29sIGlzRGVzY2VuZGFudE9mRWxlbWVudFR5cGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSkgY29uc3Q7CiAgICAgLy8gVGhpcyByZXR1cm5zIHRydWUgaWYg
aXQncyBmb2N1c2FibGUgYnV0IGl0J3Mgbm90IGNvbnRlbnQgZWRpdGFibGUgYW5kIGl0J3Mgbm90
IGEgY29udHJvbCBvciBBUklBIGNvbnRyb2wuCiAKKyAgICB2b2lkIGFkZEhpZGRlbkNoaWxkcmVu
KCk7CiAgICAgdm9pZCBhZGRUZXh0RmllbGRDaGlsZHJlbigpOwogICAgIHZvaWQgYWRkSW1hZ2VN
YXBDaGlsZHJlbigpOwogICAgIHZvaWQgYWRkQ2FudmFzQ2hpbGRyZW4oKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCShy
ZXZpc2lvbiAxMzA5NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCiAjaW5jbHVk
ZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJW
aXNpYmxlUG9zaXRpb24uaCIKICNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCiAjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTUyMyw2ICs1MjQsNyBAQAogICAgIHZpcnR1YWwgSW50UG9p
bnQgY2xpY2tQb2ludCgpOwogICAgIHN0YXRpYyBJbnRSZWN0IGJvdW5kaW5nQm94Rm9yUXVhZHMo
UmVuZGVyT2JqZWN0KiwgY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mKTsKICAgICAKKyAgICBUZXh0
SXRlcmF0b3JCZWhhdmlvciB0ZXh0SXRlcmF0b3JCZWhhdmlvckZvclRleHRSYW5nZSgpIGNvbnN0
OwogICAgIHZpcnR1YWwgUGxhaW5UZXh0UmFuZ2Ugc2VsZWN0ZWRUZXh0UmFuZ2UoKSBjb25zdCB7
IHJldHVybiBQbGFpblRleHRSYW5nZSgpOyB9CiAgICAgdW5zaWduZWQgc2VsZWN0aW9uU3RhcnQo
KSBjb25zdCB7IHJldHVybiBzZWxlY3RlZFRleHRSYW5nZSgpLnN0YXJ0OyB9CiAgICAgdW5zaWdu
ZWQgc2VsZWN0aW9uRW5kKCkgY29uc3QgeyByZXR1cm4gc2VsZWN0ZWRUZXh0UmFuZ2UoKS5sZW5n
dGg7IH0KQEAgLTU2OSw2ICs1NzEsOSBAQAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVBY2Nlc3Np
YmlsaXR5Um9sZSgpIHsgfQogICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYg
Y2hpbGRyZW4oKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRyZW4oKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgYWRkQ2hpbGQoQWNjZXNzaWJpbGl0eU9iamVjdCopIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBpbnNlcnRDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgdW5zaWduZWQpIHsgfQorICAg
IAogICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CiAgICAgdmlydHVhbCBib29sIGhhc0NoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9oYXZl
Q2hpbGRyZW47IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuaAkocmV2aXNpb24gMTMwOTY5KQorKysgU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTgsNiArMTU4LDkgQEAKIAogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVJvbGUgZGV0ZXJt
aW5lQWNjZXNzaWJpbGl0eVJvbGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRyZW4oKTsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoQWNjZXNzaWJpbGl0eU9iamVjdCopOworICAgIHZp
cnR1YWwgdm9pZCBpbnNlcnRDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgdW5zaWduZWQgaW5k
ZXgpOworCiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3Q7CiAgICAgQWNjZXNzaWJp
bGl0eVJvbGUgYXJpYVJvbGVBdHRyaWJ1dGUoKSBjb25zdDsKQEAgLTE3NCw2ICsxNzcsNyBAQAog
ICAgIHZvaWQgYXJpYUxhYmVsZWRCeUVsZW1lbnRzKFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRz
KSBjb25zdDsKICAgICBTdHJpbmcgYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uRm9yRWxlbWVudHMo
VmVjdG9yPEVsZW1lbnQqPiAmZWxlbWVudHMpIGNvbnN0OwogICAgIHZvaWQgZWxlbWVudHNGcm9t
QXR0cmlidXRlKFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRzLCBjb25zdCBRdWFsaWZpZWROYW1l
JikgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGJvdW5kaW5nQm94UmVjdCgpIGNvbnN0
OwogCiAgICAgRWxlbWVudCogbWVudUVsZW1lbnRGb3JNZW51QnV0dG9uKCkgY29uc3Q7CiAgICAg
RWxlbWVudCogbWVudUl0ZW1FbGVtZW50Rm9yTWVudSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5oCShy
ZXZpc2lvbiAxMzA5NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlBUklBR3JpZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBACiAgICAgdmly
dHVhbCBib29sIHN1cHBvcnRzU2VsZWN0ZWRSb3dzKCkgeyByZXR1cm4gdHJ1ZTsgfSAgICAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CiAgICAgCi0gICAgYm9vbCBhZGRDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgSGFzaFNldDxB
Y2Nlc3NpYmlsaXR5T2JqZWN0Kj4mIGFwcGVuZGVkUm93cywgdW5zaWduZWQmIGNvbHVtbkNvdW50
KTsKKyAgICBib29sIGFkZFRhYmxlQ2VsbENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBIYXNo
U2V0PEFjY2Vzc2liaWxpdHlPYmplY3QqPiYgYXBwZW5kZWRSb3dzLCB1bnNpZ25lZCYgY29sdW1u
Q291bnQpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMTMwOTY5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyAr
NzksNiBAQAogI2luY2x1ZGUgIlJlbmRlcmVkUG9zaXRpb24uaCIKICNpbmNsdWRlICJUZXh0Lmgi
CiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCi0jaW5jbHVkZSAiVGV4dEl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3Vu
aXRzLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtNTk5LDE5ICs1OTgsNiBA
QAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotc3RhdGljIFRleHRJdGVyYXRvckJlaGF2aW9y
IHRleHRJdGVyYXRvckJlaGF2aW9yRm9yVGV4dFJhbmdlKCkKLXsKLSAgICBUZXh0SXRlcmF0b3JC
ZWhhdmlvciBiZWhhdmlvciA9IFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHk7Ci0K
LSNpZiBQTEFURk9STShHVEspCi0gICAgLy8gV2UgbmVlZCB0byBlbWl0IHJlcGxhY2VkIGVsZW1l
bnRzIGZvciBHVEssIGFuZCBwcmVzZW50Ci0gICAgLy8gdGhlbSB3aXRoIHRoZSAnb2JqZWN0IHJl
cGxhY2VtZW50IGNoYXJhY3RlcicgKDB4RkZGQykuCi0gICAgYmVoYXZpb3IgPSBzdGF0aWNfY2Fz
dDxUZXh0SXRlcmF0b3JCZWhhdmlvcj4oYmVoYXZpb3IgfCBUZXh0SXRlcmF0b3JFbWl0c09iamVj
dFJlcGxhY2VtZW50Q2hhcmFjdGVycyk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBiZWhhdmlvcjsK
LX0KLQogU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQo
KSBjb25zdAogewogICAgIGlmICghbV9yZW5kZXJlcikKQEAgLTExMDIsOSArMTA4OCwxNyBAQAog
ICAgIC8vIFRoZSBmb2xsb3dpbmcgY2FzZXMgY2FuIGFwcGx5IHRvIGFueSBlbGVtZW50IHRoYXQn
cyBhIHN1YmNsYXNzIG9mIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuCiAgICAgCiAgICAgLy8g
SWdub3JlIGludmlzaWJsZSBlbGVtZW50cy4KLSAgICBpZiAoIW1fcmVuZGVyZXIgfHwgbV9yZW5k
ZXJlci0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCisgICAgaWYgKCFtX3JlbmRl
cmVyKQogICAgICAgICByZXR1cm4gSWdub3JlT2JqZWN0OwogCisgICAgaWYgKG1fcmVuZGVyZXIt
PnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKSB7CisgICAgICAgIC8vIGFyaWEtaGlk
ZGVuIGlzIG1lYW50IHRvIG92ZXJyaWRlIHZpc2liaWxpdHkgYXMgdGhlIGRldGVybWluYW50IGlu
IEFYIGhpZXJhcmNoeSBpbmNsdXNpb24uCisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShn
ZXRBdHRyaWJ1dGUoYXJpYV9oaWRkZW5BdHRyKSwgImZhbHNlIikpCisgICAgICAgICAgICByZXR1
cm4gRGVmYXVsdEJlaGF2aW9yOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIElnbm9yZU9iamVj
dDsKKyAgICAgfQorICAgIAogICAgIC8vIEFueXRoaW5nIG1hcmtlZCBhcyBhcmlhLWhpZGRlbiBv
ciBhIGNoaWxkIG9mIHNvbWV0aGluZyBhcmlhLWhpZGRlbiBtdXN0IGJlIGhpZGRlbi4KICAgICBp
ZiAoYXJpYUlzSGlkZGVuKCkpCiAgICAgICAgIHJldHVybiBJZ25vcmVPYmplY3Q7CkBAIC0yNzE3
LDYgKzI3MTEsNTEgQEAKIH0KICNlbmRpZgogCisvLyBIaWRkZW4gY2hpbGRyZW4gYXJlIHRob3Nl
IHRoYXQgYXJlIG5vdCByZW5kZXJlZCBvciB2aXNpYmxlLCBidXQgYXJlIHNwZWNpZmljYWxseSBt
YXJrZWQgYXMgYXJpYS1oaWRkZW49ZmFsc2UsCisvLyBtZWFuaW5nIHRoYXQgdGhleSBzaG91bGQg
YmUgZXhwb3NlZCB0byB0aGUgQVggaGllcmFyY2h5Lgordm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0OjphZGRIaWRkZW5DaGlsZHJlbigpCit7CisgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5v
ZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBEZXRl
cm1pbmUgdGhlIGluZGV4IGF0IHdoaWNoIHRoaXMgaXRlbSBzaG91bGQgYmUgaW5zZXJ0ZWQuIFRo
ZSBnb2FsIGlzIHRvIHBsYWNlIGl0IGFzIGNsb3NlIHRvCisgICAgLy8gRE9NIG9yZGVyaW5nIGFz
IHBvc3NpYmxlIGJ5IGtlZXBpbmcgdHJhY2sgb2Ygd2hlcmUgdGhlIHNpYmxpbmdzIHdobyBoYWQg
cmVuZGVyZXJzIHdlcmUgaW5zZXJ0ZWQuCisgICAgdW5zaWduZWQgaW5zZXJ0aW9uSW5kZXggPSAw
OworICAgIGZvciAoTm9kZSogY2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChjaGlsZC0+cmVuZGVyZXIo
KSkgeworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGaW5kIG91dCB3aGVyZSB0aGUgbGFz
dCByZW5kZXIgc2libGluZyBpcyBsb2NhdGVkIHdpdGhpbiBtX2NoaWxkcmVuLgorICAgICAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY2hpbGRSZW5kZXJlciA9IGF4T2JqZWN0Q2FjaGUoKS0+
Z2V0KGNoaWxkLT5yZW5kZXJlcigpKTsKKyAgICAgICAgICAgIGlmIChjaGlsZFJlbmRlcmVyICYm
IGNoaWxkUmVuZGVyZXItPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkgeworICAgICAgICAgICAg
ICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IGNoaWxkUmVuZGVyZXIt
PmNoaWxkcmVuKCk7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgY2hpbGRSZW5kZXJlciA9IGNoaWxkcmVuLmxhc3QoKS5nZXQoKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNoaWxkUmVuZGVyZXIgPSAw
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY2hpbGRSZW5kZXJlcikKKyAgICAg
ICAgICAgICAgICBpbnNlcnRpb25JbmRleCA9IG1fY2hpbGRyZW4uZmluZChjaGlsZFJlbmRlcmVy
KSArIDE7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKCFjaGlsZC0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIAorICAgICAgICBFbGVtZW50KiBlbGVtZW50Q2hpbGQgPSB0b0VsZW1lbnQoY2hpbGQp
OworICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKGVsZW1lbnRDaGlsZC0+Z2V0QXR0cmli
dXRlKGFyaWFfaGlkZGVuQXR0ciksICJmYWxzZSIpKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgdW5zaWduZWQgcHJldmlvdXNTaXplID0gbV9jaGlsZHJlbi5zaXplKCk7CisgICAg
ICAgIGlmIChpbnNlcnRpb25JbmRleCA+IHByZXZpb3VzU2l6ZSkKKyAgICAgICAgICAgIGluc2Vy
dGlvbkluZGV4ID0gcHJldmlvdXNTaXplOworICAgICAgICAKKyAgICAgICAgaW5zZXJ0Q2hpbGQo
YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShjaGlsZCksIGluc2VydGlvbkluZGV4KTsKKyAg
ICAgICAgaW5zZXJ0aW9uSW5kZXggKz0gKG1fY2hpbGRyZW4uc2l6ZSgpIC0gcHJldmlvdXNTaXpl
KTsKKyAgICB9Cit9CisgICAgCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZENo
aWxkcmVuKCkKIHsKICAgICAvLyBJZiB0aGUgbmVlZCB0byBhZGQgbW9yZSBjaGlsZHJlbiBpbiBh
ZGRpdGlvbiB0byBleGlzdGluZyBjaGlsZHJlbiBhcmlzZXMsIApAQCAtMjcyOCwyNCArMjc2Nywx
MCBAQAogICAgIGlmICghY2FuSGF2ZUNoaWxkcmVuKCkpCiAgICAgICAgIHJldHVybjsKICAgICAK
LSAgICAvLyBhZGQgYWxsIHVuaWdub3JlZCBhY2MgY2hpbGRyZW4KLSAgICBmb3IgKFJlZlB0cjxB
Y2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmogPSBmaXJzdENoaWxkKCk7IG9iajsgb2JqID0gb2JqLT5u
ZXh0U2libGluZygpKSB7Ci0gICAgICAgIC8vIElmIHRoZSBwYXJlbnQgaXMgYXNraW5nIGZvciB0
aGlzIGNoaWxkJ3MgY2hpbGRyZW4sIHRoZW4gZWl0aGVyIGl0J3MgdGhlIGZpcnN0IHRpbWUgKGFu
ZCBjbGVhcmluZyBpcyBhIG5vLW9wKSwgCi0gICAgICAgIC8vIG9yIGl0cyB2aXNpYmlsaXR5IGhh
cyBjaGFuZ2VkLiBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoaXMgY2hpbGQgbWF5IGhhdmUgYSBzdGFs
ZSBjaGlsZCBjYWNoZWQuIAotICAgICAgICAvLyBUaGlzIGNhbiBwcmV2ZW50IGFyaWEtaGlkZGVu
IGNoYW5nZXMgZnJvbSB3b3JraW5nIGNvcnJlY3RseS4gSGVuY2UsIHdoZW5ldmVyIGEgcGFyZW50
IGlzIGdldHRpbmcgY2hpbGRyZW4sIGVuc3VyZSBkYXRhIGlzIG5vdCBzdGFsZS4KLSAgICAgICAg
b2JqLT5jbGVhckNoaWxkcmVuKCk7Ci0KLSAgICAgICAgaWYgKG9iai0+YWNjZXNzaWJpbGl0eUlz
SWdub3JlZCgpKSB7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hp
bGRyZW4gPSBvYmotPmNoaWxkcmVuKCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBj
aGlsZHJlbi5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpCi0gICAgICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoY2hpbGRyZW5baV0p
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKG9iai0+cGFyZW50T2JqZWN0
KCkgPT0gdGhpcyk7Ci0gICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChvYmopOwotICAgICAg
ICB9Ci0gICAgfQorICAgIGZvciAoUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG9iaiA9IGZp
cnN0Q2hpbGQoKTsgb2JqOyBvYmogPSBvYmotPm5leHRTaWJsaW5nKCkpCisgICAgICAgIGFkZENo
aWxkKG9iai5nZXQoKSk7CiAgICAgCisgICAgYWRkSGlkZGVuQ2hpbGRyZW4oKTsKICAgICBhZGRB
dHRhY2htZW50Q2hpbGRyZW4oKTsKICAgICBhZGRJbWFnZU1hcENoaWxkcmVuKCk7CiAgICAgYWRk
VGV4dEZpZWxkQ2hpbGRyZW4oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMTMwOTY5KQorKysg
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTc3Niw2ICsxNzc2LDE5IEBACiAgICAgcmV0dXJuICFnZXRBdHRyaWJ1
dGUoYXJpYV9wcmVzc2VkQXR0cikuaXNFbXB0eSgpOwogfQogCitUZXh0SXRlcmF0b3JCZWhhdmlv
ciBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp0ZXh0SXRlcmF0b3JCZWhhdmlvckZvclRleHRSYW5nZSgp
IGNvbnN0Cit7CisgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IgPSBUZXh0SXRlcmF0
b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5OworICAgIAorI2lmIFBMQVRGT1JNKEdUSykKKyAgICAv
LyBXZSBuZWVkIHRvIGVtaXQgcmVwbGFjZWQgZWxlbWVudHMgZm9yIEdUSywgYW5kIHByZXNlbnQK
KyAgICAvLyB0aGVtIHdpdGggdGhlICdvYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyJyAoMHhG
RkZDKS4KKyAgICBiZWhhdmlvciA9IHN0YXRpY19jYXN0PFRleHRJdGVyYXRvckJlaGF2aW9yPihi
ZWhhdmlvciB8IFRleHRJdGVyYXRvckVtaXRzT2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJzKTsK
KyNlbmRpZgorICAgIAorICAgIHJldHVybiBiZWhhdmlvcjsKK30KKyAgICAKIEFjY2Vzc2liaWxp
dHlSb2xlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmJ1dHRvblJvbGVUeXBlKCkgY29uc3QKIHsKICAg
ICAvLyBJZiBhcmlhLXByZXNzZWQgaXMgcHJlc2VudCwgdGhlbiBpdCBzaG91bGQgYmUgZXhwb3Nl
ZCBhcyBhIHRvZ2dsZSBidXR0b24uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJKHJldmlzaW9uIDEzMDk2OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
Niw4ICszMTYsMTQgQEAKICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJu
IGdldE9yQ3JlYXRlKG5vZGUtPnJlbmRlcmVyKCkpOwogCisgICAgaWYgKCFub2RlLT5wYXJlbnRF
bGVtZW50KCkpCisgICAgICAgIHJldHVybiAwOworICAgIAogICAgIC8vIEl0J3Mgb25seSBhbGxv
d2VkIHRvIGNyZWF0ZSBhbiBBY2Nlc3NpYmlsaXR5T2JqZWN0IGZyb20gYSBOb2RlIGlmIGl0J3Mg
aW4gYSBjYW52YXMgc3VidHJlZS4KLSAgICBpZiAoIW5vZGUtPnBhcmVudEVsZW1lbnQoKSB8fCAh
bm9kZS0+cGFyZW50RWxlbWVudCgpLT5pc0luQ2FudmFzU3VidHJlZSgpKQorICAgIC8vIE9yIGlm
IGl0J3MgYSBoaWRkZW4gZWxlbWVudCwgYnV0IHdlIHN0aWxsIHdhbnQgdG8gZXhwb3NlIGl0IGJl
Y2F1c2Ugb2Ygb3RoZXIgQVJJQSBhdHRyaWJ1dGVzLgorICAgIGJvb2wgaW5DYW52YXNTdWJ0cmVl
ID0gbm9kZS0+cGFyZW50RWxlbWVudCgpLT5pc0luQ2FudmFzU3VidHJlZSgpOworICAgIGJvb2wg
aXNIaWRkZW4gPSAhbm9kZS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIWluQ2FudmFzU3VidHJlZSAm
JiAhaXNIaWRkZW4pCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVmUHRyPEFjY2Vzc2liaWxp
dHlPYmplY3Q+IG5ld09iaiA9IGNyZWF0ZUZyb21Ob2RlKG5vZGUpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dC5jcHAJKHJldmlzaW9uIDEzMDk2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNiArMjIx
LDI1IEBACiB7CiAgICAgcmV0dXJuIGJvdW5kaW5nQm94UmVjdCgpOwogfQorICAgIAorTGF5b3V0
UmVjdCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Ym91bmRpbmdCb3hSZWN0KCkgY29uc3QKK3sK
KyAgICAvLyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdHMgaGF2ZSBubyBtZWNoYW5pc20geWV0IHRv
IHJldHVybiBhIHNpemUgb3IgcG9zaXRpb24uCisgICAgLy8gU28gZm9yIG5vdywgbGV0J3MgcmV0
dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgYW5jZXN0b3IgdGhhdCBkb2VzIGhhdmUgYSBwb3NpdGlv
biwKKyAgICAvLyBhbmQgZ2l2ZSBpdCBhIHNpemUgb2YgMSwxLgorICAgIAorICAgIExheW91dFJl
Y3QgYm91bmRpbmdCb3g7CisgICAgYm91bmRpbmdCb3guc2V0U2l6ZShMYXlvdXRTaXplKDEsIDEp
KTsKKyAgICAKKyAgICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBvc2l0aW9uUHJvdmlkZXIg
PSBwYXJlbnRPYmplY3QoKTsgcG9zaXRpb25Qcm92aWRlcjsgcG9zaXRpb25Qcm92aWRlciA9IHBv
c2l0aW9uUHJvdmlkZXItPnBhcmVudE9iamVjdCgpKSB7CisgICAgICAgIGlmIChwb3NpdGlvblBy
b3ZpZGVyLT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkgeworICAgICAgICAgICAgYm91
bmRpbmdCb3guc2V0TG9jYXRpb24ocG9zaXRpb25Qcm92aWRlci0+ZWxlbWVudFJlY3QoKS5sb2Nh
dGlvbigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHJldHVybiBib3VuZGluZ0JveDsKK30KIAogdm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6
c2V0Tm9kZShOb2RlKiBub2RlKQogewpAQCAtMjgzLDYgKzMwMiwzMyBAQAogICAgIHJldHVybiBV
bmtub3duUm9sZTsKIH0KIAordm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aW5zZXJ0Q2hp
bGQoQWNjZXNzaWJpbGl0eU9iamVjdCogY2hpbGQsIHVuc2lnbmVkIGluZGV4KQoreworICAgIGlm
ICghY2hpbGQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBJZiB0aGUgcGFyZW50IGlz
IGFza2luZyBmb3IgdGhpcyBjaGlsZCdzIGNoaWxkcmVuLCB0aGVuIGVpdGhlciBpdCdzIHRoZSBm
aXJzdCB0aW1lIChhbmQgY2xlYXJpbmcgaXMgYSBuby1vcCksCisgICAgLy8gb3IgaXRzIHZpc2li
aWxpdHkgaGFzIGNoYW5nZWQuIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhpcyBjaGlsZCBtYXkgaGF2
ZSBhIHN0YWxlIGNoaWxkIGNhY2hlZC4KKyAgICAvLyBUaGlzIGNhbiBwcmV2ZW50IGFyaWEtaGlk
ZGVuIGNoYW5nZXMgZnJvbSB3b3JraW5nIGNvcnJlY3RseS4gSGVuY2UsIHdoZW5ldmVyIGEgcGFy
ZW50IGlzIGdldHRpbmcgY2hpbGRyZW4sIGVuc3VyZSBkYXRhIGlzIG5vdCBzdGFsZS4KKyAgICBj
aGlsZC0+Y2xlYXJDaGlsZHJlbigpOworICAgIAorICAgIGlmIChjaGlsZC0+YWNjZXNzaWJpbGl0
eUlzSWdub3JlZCgpKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGls
ZHJlbiA9IGNoaWxkLT5jaGlsZHJlbigpOworICAgICAgICBzaXplX3QgbGVuZ3RoID0gY2hpbGRy
ZW4uc2l6ZSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQor
ICAgICAgICAgICAgbV9jaGlsZHJlbi5pbnNlcnQoaW5kZXggKyBpLCBjaGlsZHJlbltpXSk7Cisg
ICAgfQorICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoY2hpbGQtPnBhcmVudE9iamVjdCgpID09
IHRoaXMpOworICAgICAgICBtX2NoaWxkcmVuLmluc2VydChpbmRleCwgY2hpbGQpOworICAgIH0K
K30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWRkQ2hpbGQoQWNjZXNzaWJpbGl0
eU9iamVjdCogY2hpbGQpCit7CisgICAgaW5zZXJ0Q2hpbGQoY2hpbGQsIG1fY2hpbGRyZW4uc2l6
ZSgpKTsKK30KKwogdm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWRkQ2hpbGRyZW4oKQog
ewogICAgIC8vIElmIHRoZSBuZWVkIHRvIGFkZCBtb3JlIGNoaWxkcmVuIGluIGFkZGl0aW9uIHRv
IGV4aXN0aW5nIGNoaWxkcmVuIGFyaXNlcywgCkBAIC0yOTgsMTkgKzM0NCw4IEBACiAgICAgaWYg
KHJlbmRlcmVyKCkgJiYgIW1fbm9kZS0+aGFzVGFnTmFtZShjYW52YXNUYWcpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgZm9yIChOb2RlKiBjaGlsZCA9IG1fbm9kZS0+Zmlyc3RDaGlsZCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBSZWZQdHI8
QWNjZXNzaWJpbGl0eU9iamVjdD4gb2JqID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShj
aGlsZCk7Ci0gICAgICAgIG9iai0+Y2xlYXJDaGlsZHJlbigpOwotICAgICAgICBpZiAob2JqLT5h
Y2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciBjaGlsZHJlbiA9IG9iai0+Y2hpbGRyZW4oKTsKLSAgICAgICAgICAgIHNpemVf
dCBsZW5ndGggPSBjaGlsZHJlbi5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGNo
aWxkcmVuW2ldKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChvYmotPnBh
cmVudE9iamVjdCgpID09IHRoaXMpOwotICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQob2Jq
KTsKLSAgICAgICAgfQotICAgIH0KKyAgICBmb3IgKE5vZGUqIGNoaWxkID0gbV9ub2RlLT5maXJz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICBh
ZGRDaGlsZChheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGNoaWxkKSk7CiB9CiAKIGJvb2wg
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhbkhhdmVDaGlsZHJlbigpIGNvbnN0CkBAIC0xMTg2
LDcgKzEyMjEsOSBAQAogICAgIC8vIElmIHRoaXMgY291bGQgYmUgZml4ZWQsIGl0J2QgYmUgbW9y
ZSBhY2N1cmF0ZSB1c2UgVGV4dEl0ZXJhdG9yIGhlcmUuCiAgICAgaWYgKG5vZGUtPmlzRWxlbWVu
dE5vZGUoKSkKICAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKS0+aW5uZXJUZXh0KCk7Ci0K
KyAgICBlbHNlIGlmIChub2RlLT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybiB0b1RleHQo
bm9kZSktPndob2xlVGV4dCgpOworICAgIAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eUFSSUFHcmlkLmNwcAkocmV2aXNpb24gMTMwOTY5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3
ICs2Niw3IEBACiAgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7CiB9CiAKLWJvb2wgQWNjZXNzaWJp
bGl0eUFSSUFHcmlkOjphZGRDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjaGlsZCwgSGFzaFNl
dDxBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4mIGFwcGVuZGVkUm93cywgdW5zaWduZWQmIGNvbHVtbkNv
dW50KQorYm9vbCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OmFkZFRhYmxlQ2VsbENoaWxkKEFjY2Vz
c2liaWxpdHlPYmplY3QqIGNoaWxkLCBIYXNoU2V0PEFjY2Vzc2liaWxpdHlPYmplY3QqPiYgYXBw
ZW5kZWRSb3dzLCB1bnNpZ25lZCYgY29sdW1uQ291bnQpCiB7CiAgICAgaWYgKCFjaGlsZCB8fCAh
Y2hpbGQtPmlzVGFibGVSb3coKSB8fCBjaGlsZC0+YXJpYVJvbGVBdHRyaWJ1dGUoKSAhPSBSb3dS
b2xlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICB1bnNp
Z25lZCBjb2x1bW5Db3VudCA9IDA7CiAgICAgZm9yIChSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVj
dD4gY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
ZygpKSB7CiAKLSAgICAgICAgaWYgKCFhZGRDaGlsZChjaGlsZC5nZXQoKSwgYXBwZW5kZWRSb3dz
LCBjb2x1bW5Db3VudCkpIHsKKyAgICAgICAgaWYgKCFhZGRUYWJsZUNlbGxDaGlsZChjaGlsZC5n
ZXQoKSwgYXBwZW5kZWRSb3dzLCBjb2x1bW5Db3VudCkpIHsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgLy8gaW4gY2FzZSB0aGUgcmVuZGVyIHRyZWUgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0
ZWQgQVJJQSBoaWVyYXJjaHksIGxvb2sgYXQgdGhlIGNoaWxkcmVuCiAgICAgICAgICAgICBpZiAo
IWNoaWxkLT5oYXNDaGlsZHJlbigpKQpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgICAgICBB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBjaGlsZC0+Y2hpbGRyZW4oKTsK
ICAgICAgICAgICAgIHNpemVfdCBsZW5ndGggPSBjaGlsZHJlbi5zaXplKCk7CiAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIGFk
ZENoaWxkKGNoaWxkcmVuW2ldLmdldCgpLCBhcHBlbmRlZFJvd3MsIGNvbHVtbkNvdW50KTsKKyAg
ICAgICAgICAgICAgICBhZGRUYWJsZUNlbGxDaGlsZChjaGlsZHJlbltpXS5nZXQoKSwgYXBwZW5k
ZWRSb3dzLCBjb2x1bW5Db3VudCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkluZGV4OiBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWhpZGRlbi1uZWdhdGVzLW5v
LXZpc2liaWxpdHktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtaGlkZGVuLW5lZ2F0ZXMtbm8tdmlzaWJpbGl0eS1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNj
ZXNzaWJpbGl0eS9hcmlhLWhpZGRlbi1uZWdhdGVzLW5vLXZpc2liaWxpdHktZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzIEBACitoZWFkaW5nMS4yCisKKworCitUaGlzIHRl
c3RzIGVuc3VyZXMgdGhhdCBhcmlhLWhpZGRlbj1mYWxzZSB3aWxsIGFsbG93IGEgbm9kZSB0byBi
ZSBpbiB0aGUgQVggaGllcmFyY2h5IGV2ZW4gaWYgaXRzIG5vdCByZW5kZXJlZCBvciB2aXNpYmxl
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTICFoZWFkaW5nMV8xIHx8ICFo
ZWFkaW5nMV8xLmlzVmFsaWQgaXMgdHJ1ZQorUEFTUyAhaGVhZGluZzFfMiB8fCAhaGVhZGluZzFf
My5pc1ZhbGlkIGlzIHRydWUKK1BBU1MgIWhlYWRpbmcxXzMgfHwgIWhlYWRpbmcxXzMuaXNWYWxp
ZCBpcyB0cnVlCitQQVNTIGhlYWRpbmcyLnJvbGUgaXMgJ0FYUm9sZTogQVhIZWFkaW5nJworUEFT
UyBwYXJlbnQuY2hpbGRBdEluZGV4KDApLmlzRXF1YWwoaGVhZGluZzIpIGlzIHRydWUKK1BBU1Mg
aGVhZGluZzMucm9sZSBpcyAnQVhSb2xlOiBBWEhlYWRpbmcnCitQQVNTIHBhcmVudC5jaGlsZEF0
SW5kZXgoMSkuaXNFcXVhbChoZWFkaW5nMykgaXMgdHJ1ZQorUEFTUyBoZWFkaW5nNC5yb2xlIGlz
ICdBWFJvbGU6IEFYSGVhZGluZycKK1BBU1MgcGFyZW50LmNoaWxkQXRJbmRleCgyKS5pc0VxdWFs
KGhlYWRpbmc0KSBpcyB0cnVlCitUZXh0ZmllbGQgVGl0bGU6IEFYVGl0bGU6IAorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5Lmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLWhpZGRlbi1uZWdh
dGVzLW5vLXZpc2liaWxpdHkuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5Lmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNjMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFRE
IEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgaWQ9ImJvZHki
PgorCis8aDEgaGlkZGVuIGlkPSJoZWFkaW5nMV8xIj5oZWFkaW5nMS4xPC9oMT4KKzxoMSBhcmlh
LWhpZGRlbj0idHJ1ZSIgaWQ9ImhlYWRpbmcxXzIiPmhlYWRpbmcxLjI8L2gxPgorPGgxIGhpZGRl
biBhcmlhLWhpZGRlbj0idHJ1ZSIgaWQ9ImhlYWRpbmcxXzMiPmhlYWRpbmcxLjM8L2gxPgorCis8
aDEgaGlkZGVuIGFyaWEtaGlkZGVuPSJmYWxzZSIgaWQ9ImhlYWRpbmcyIj5oZWFkaW5nMjwvaDE+
Cis8aDEgc3R5bGU9ImRpc3BsYXk6bm9uZTsiIGFyaWEtaGlkZGVuPSJmYWxzZSIgaWQ9ImhlYWRp
bmczIj5oZWFkaW5nMzwvaDE+Cis8aDEgc3R5bGU9InZpc2liaWxpdHk6aGlkZGVuOyIgYXJpYS1o
aWRkZW49ImZhbHNlIiBpZD0iaGVhZGluZzQiPmhlYWRpbmc0PC9oMT4KKworPGRpdiBoaWRkZW4g
YXJpYS1oaWRkZW49ImZhbHNlIiBpZD0iaGlkZGVuRGl2Ij5IaWRkZW5UZXh0MTwvZGl2PgorPGlu
cHV0IHR5cGU9InRleHQiIGFyaWEtbGFiZWxsZWRieT0iaGlkZGVuRGl2IiBpZD0idGV4dEZpZWxk
V2l0aEhpZGRlbkxhYmVsbGVyIj4KKworPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KKworICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRl
c3RzIGVuc3VyZXMgdGhhdCBhcmlhLWhpZGRlbj1mYWxzZSB3aWxsIGFsbG93IGEgbm9kZSB0byBi
ZSBpbiB0aGUgQVggaGllcmFyY2h5IGV2ZW4gaWYgaXRzIG5vdCByZW5kZXJlZCBvciB2aXNpYmxl
Iik7CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisKKyAgICAg
ICAgLy8gRmlyc3QgZ3JvdXBzIG9mIGhlYWRpbmdzIGFyZSBhY3R1YWxseSBoaWRkZS5uCisgICAg
ICAgIHZhciBoZWFkaW5nMV8xID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVs
ZW1lbnRCeUlkKCJoZWFkaW5nMV8xIik7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgiIWhlYWRpbmcx
XzEgfHwgIWhlYWRpbmcxXzEuaXNWYWxpZCIpOworCisgICAgICAgIHZhciBoZWFkaW5nMV8yID0g
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJoZWFkaW5nMV8y
Iik7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgiIWhlYWRpbmcxXzIgfHwgIWhlYWRpbmcxXzMuaXNW
YWxpZCIpOworCisgICAgICAgIHZhciBoZWFkaW5nMV8zID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJoZWFkaW5nMV8zIik7CisgICAgICAgIHNob3VsZEJl
VHJ1ZSgiIWhlYWRpbmcxXzMgfHwgIWhlYWRpbmcxXzMuaXNWYWxpZCIpOworCisgICAgICAgIC8v
IFRoZXNlIGhlYWRpbmdzIHNob3VsZCBiZSBpbiBBWCB0cmVlIGRlc3BpdGUgYmVpbmcgaGlkZGVu
LgorICAgICAgICB2YXIgaGVhZGluZzIgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3Np
YmxlRWxlbWVudEJ5SWQoImhlYWRpbmcyIik7CisgICAgICAgIHNob3VsZEJlKCJoZWFkaW5nMi5y
b2xlIiwgIidBWFJvbGU6IEFYSGVhZGluZyciKTsKKworICAgICAgICAvLyBDaGVjayB0aGF0IHRo
ZSBvcmRlciBvZiB0aGVzZSBlbGVtZW50cyBpcyBjb3JyZWN0IGJhc2VkIG9uIERPTSBvcmRlci4K
KyAgICAgICAgdmFyIHBhcmVudCA9IGhlYWRpbmcyLnBhcmVudEVsZW1lbnQoKTsKKyAgICAgICAg
c2hvdWxkQmVUcnVlKCJwYXJlbnQuY2hpbGRBdEluZGV4KDApLmlzRXF1YWwoaGVhZGluZzIpIik7
CisKKyAgICAgICAgdmFyIGhlYWRpbmczID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNz
aWJsZUVsZW1lbnRCeUlkKCJoZWFkaW5nMyIpOworICAgICAgICBzaG91bGRCZSgiaGVhZGluZzMu
cm9sZSIsICInQVhSb2xlOiBBWEhlYWRpbmcnIik7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgicGFy
ZW50LmNoaWxkQXRJbmRleCgxKS5pc0VxdWFsKGhlYWRpbmczKSIpOworCisgICAgICAgIHZhciBo
ZWFkaW5nNCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgi
aGVhZGluZzQiKTsKKyAgICAgICAgc2hvdWxkQmUoImhlYWRpbmc0LnJvbGUiLCAiJ0FYUm9sZTog
QVhIZWFkaW5nJyIpOworICAgICAgICBzaG91bGRCZVRydWUoInBhcmVudC5jaGlsZEF0SW5kZXgo
MikuaXNFcXVhbChoZWFkaW5nNCkiKTsKKworICAgICAgICAvLyBUaGUgYXJpYS1sYWJlbGxlZGJ5
IGF0dHJpYnV0ZSBzaG91bGQgd29yayBldmVuIHRob3VnaCBoaWRkZW4uCisgICAgICAgIHZhciB0
ZXh0RmllbGQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQo
InRleHRGaWVsZFdpdGhIaWRkZW5MYWJlbGxlciIpOworICAgICAgICBkZWJ1ZygiVGV4dGZpZWxk
IFRpdGxlOiAiICsgdGV4dEZpZWxkLnRpdGxlKTsKKyAgICB9CisKKzwvc2NyaXB0PgorCis8c2Ny
aXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDk3OCkKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEyLTEwLTEw
ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IGFy
aWEtaGlkZGVuPWZhbHNlIGRvZXMgbm90IHdvcmsgYXMgZXhwZWN0ZWQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4Nzg3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2FyaWEtaGlk
ZGVuLW5lZ2F0ZXMtbm8tdmlzaWJpbGl0eS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWhpZGRlbi1uZWdhdGVzLW5vLXZpc2liaWxpdHktZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKwogMjAxMi0xMC0xMCAgSmVmZnJleSBQZmF1ICA8anBmYXVAYXBw
bGUuY29tPgogCiAgICAgICAgIFtNYWNdW1dLMl0gVW5yZXZpZXdlZCwgc2tpcHBpbmcgZmFzdC9w
YXJzZXIvZG9jdW1lbnQtb3Blbi1pbi11bmxvYWQuaHRtbAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168096</attachid>
            <date>2012-10-10 16:54:45 -0700</date>
            <delta_ts>2012-10-12 15:01:32 -0700</delta_ts>
            <desc>patch </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>22943</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDk3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTEwLTEwICBDaHJpcyBG
bGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IGFyaWEtaGlkZGVu
PWZhbHNlIGRvZXMgbm90IHdvcmsgYXMgZXhwZWN0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4Nzg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQVJJQSByZXF1aXJlcyB0aGF0IGFyaWEtaGlkZGVuPWZh
bHNlIG92ZXJyaWRlIGFuIGVsZW1lbnQncyBuYXRpdmUgdmlzaWJpbGl0eSBhbmQgaW5jbHVkZSB0
aGF0CisgICAgICAgIG5vZGUgaW4gdGhlIEFYIGhpZXJhcmNoeS4KKyAKKyAgICAgICAgVG8gYWNj
b21wbGlzaCB0aGlzIHdlIGhhdmUgdG8gYWxsb3cgaW52aXNpYmxlIGl0ZW1zIHRvIGJlIGluY2x1
ZGVkLCBhcyB3ZWxsIGFzIGl0ZW1zIHRoYXQKKyAgICAgICAgaGF2ZSBubyByZW5kZXJlcnMgYXNz
b2NpYXRlZCB3aXRoIHRoZW0uCisKKyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0eS9hcmlhLWhp
ZGRlbi1uZWdhdGVzLW5vLXZpc2liaWxpdHkuaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Omdl
dE9yQ3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3Jp
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OmFkZFRhYmxl
Q2VsbENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZDo6YWRk
Q2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlk
Lmg6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5QVJJQUdyaWQpOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Ym91bmRpbmdCb3hSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjppbnNlcnRDaGls
ZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWRkQ2hpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFkZENoaWxkcmVu
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0ZXh0VW5kZXJF
bGVtZW50KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
Lmg6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3Q6OnRleHRJdGVyYXRvckJlaGF2aW9yRm9yVGV4dFJhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5oOgorICAgICAgICAoQWNjZXNzaWJpbGl0eU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjphZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0OjppbnNlcnRDaGlsZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3Jl
ZEJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRk
SGlkZGVuQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5oOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCk6CisK
IDIwMTItMTAtMTAgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSzJd
IEFjdGl2YXRlIHBsdWdpbnMgd2hlbiB1c2VyIGNsaWNrcyBvbiBzbmFwc2hvdApJbmRleDogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmgJKHJldmlzaW9uIDEzMDk2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgs
NiArMjQ4LDcgQEAKICAgICBib29sIGlzRGVzY2VuZGFudE9mRWxlbWVudFR5cGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSkgY29uc3Q7CiAgICAgLy8gVGhpcyByZXR1cm5zIHRydWUgaWYg
aXQncyBmb2N1c2FibGUgYnV0IGl0J3Mgbm90IGNvbnRlbnQgZWRpdGFibGUgYW5kIGl0J3Mgbm90
IGEgY29udHJvbCBvciBBUklBIGNvbnRyb2wuCiAKKyAgICB2b2lkIGFkZEhpZGRlbkNoaWxkcmVu
KCk7CiAgICAgdm9pZCBhZGRUZXh0RmllbGRDaGlsZHJlbigpOwogICAgIHZvaWQgYWRkSW1hZ2VN
YXBDaGlsZHJlbigpOwogICAgIHZvaWQgYWRkQ2FudmFzQ2hpbGRyZW4oKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCShy
ZXZpc2lvbiAxMzA5NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCiAjaW5jbHVk
ZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJW
aXNpYmxlUG9zaXRpb24uaCIKICNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCiAjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTUyMyw2ICs1MjQsNyBAQAogICAgIHZpcnR1YWwgSW50UG9p
bnQgY2xpY2tQb2ludCgpOwogICAgIHN0YXRpYyBJbnRSZWN0IGJvdW5kaW5nQm94Rm9yUXVhZHMo
UmVuZGVyT2JqZWN0KiwgY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mKTsKICAgICAKKyAgICBUZXh0
SXRlcmF0b3JCZWhhdmlvciB0ZXh0SXRlcmF0b3JCZWhhdmlvckZvclRleHRSYW5nZSgpIGNvbnN0
OwogICAgIHZpcnR1YWwgUGxhaW5UZXh0UmFuZ2Ugc2VsZWN0ZWRUZXh0UmFuZ2UoKSBjb25zdCB7
IHJldHVybiBQbGFpblRleHRSYW5nZSgpOyB9CiAgICAgdW5zaWduZWQgc2VsZWN0aW9uU3RhcnQo
KSBjb25zdCB7IHJldHVybiBzZWxlY3RlZFRleHRSYW5nZSgpLnN0YXJ0OyB9CiAgICAgdW5zaWdu
ZWQgc2VsZWN0aW9uRW5kKCkgY29uc3QgeyByZXR1cm4gc2VsZWN0ZWRUZXh0UmFuZ2UoKS5sZW5n
dGg7IH0KQEAgLTU2OSw2ICs1NzEsOSBAQAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVBY2Nlc3Np
YmlsaXR5Um9sZSgpIHsgfQogICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYg
Y2hpbGRyZW4oKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRyZW4oKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgYWRkQ2hpbGQoQWNjZXNzaWJpbGl0eU9iamVjdCopIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBpbnNlcnRDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgdW5zaWduZWQpIHsgfQorICAg
IAogICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CiAgICAgdmlydHVhbCBib29sIGhhc0NoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9oYXZl
Q2hpbGRyZW47IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuaAkocmV2aXNpb24gMTMwOTY5KQorKysgU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTgsNiArMTU4LDkgQEAKIAogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVJvbGUgZGV0ZXJt
aW5lQWNjZXNzaWJpbGl0eVJvbGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRyZW4oKTsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoQWNjZXNzaWJpbGl0eU9iamVjdCopOworICAgIHZp
cnR1YWwgdm9pZCBpbnNlcnRDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgdW5zaWduZWQgaW5k
ZXgpOworCiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3Q7CiAgICAgQWNjZXNzaWJp
bGl0eVJvbGUgYXJpYVJvbGVBdHRyaWJ1dGUoKSBjb25zdDsKQEAgLTE3NCw2ICsxNzcsNyBAQAog
ICAgIHZvaWQgYXJpYUxhYmVsZWRCeUVsZW1lbnRzKFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRz
KSBjb25zdDsKICAgICBTdHJpbmcgYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uRm9yRWxlbWVudHMo
VmVjdG9yPEVsZW1lbnQqPiAmZWxlbWVudHMpIGNvbnN0OwogICAgIHZvaWQgZWxlbWVudHNGcm9t
QXR0cmlidXRlKFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRzLCBjb25zdCBRdWFsaWZpZWROYW1l
JikgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGJvdW5kaW5nQm94UmVjdCgpIGNvbnN0
OwogCiAgICAgRWxlbWVudCogbWVudUVsZW1lbnRGb3JNZW51QnV0dG9uKCkgY29uc3Q7CiAgICAg
RWxlbWVudCogbWVudUl0ZW1FbGVtZW50Rm9yTWVudSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5oCShy
ZXZpc2lvbiAxMzA5NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlBUklBR3JpZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBACiAgICAgdmly
dHVhbCBib29sIHN1cHBvcnRzU2VsZWN0ZWRSb3dzKCkgeyByZXR1cm4gdHJ1ZTsgfSAgICAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CiAgICAgCi0gICAgYm9vbCBhZGRDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgSGFzaFNldDxB
Y2Nlc3NpYmlsaXR5T2JqZWN0Kj4mIGFwcGVuZGVkUm93cywgdW5zaWduZWQmIGNvbHVtbkNvdW50
KTsKKyAgICBib29sIGFkZFRhYmxlQ2VsbENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBIYXNo
U2V0PEFjY2Vzc2liaWxpdHlPYmplY3QqPiYgYXBwZW5kZWRSb3dzLCB1bnNpZ25lZCYgY29sdW1u
Q291bnQpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMTMwOTY5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyAr
NzksNiBAQAogI2luY2x1ZGUgIlJlbmRlcmVkUG9zaXRpb24uaCIKICNpbmNsdWRlICJUZXh0Lmgi
CiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCi0jaW5jbHVkZSAiVGV4dEl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3Vu
aXRzLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtNTk5LDE5ICs1OTgsNiBA
QAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotc3RhdGljIFRleHRJdGVyYXRvckJlaGF2aW9y
IHRleHRJdGVyYXRvckJlaGF2aW9yRm9yVGV4dFJhbmdlKCkKLXsKLSAgICBUZXh0SXRlcmF0b3JC
ZWhhdmlvciBiZWhhdmlvciA9IFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHk7Ci0K
LSNpZiBQTEFURk9STShHVEspCi0gICAgLy8gV2UgbmVlZCB0byBlbWl0IHJlcGxhY2VkIGVsZW1l
bnRzIGZvciBHVEssIGFuZCBwcmVzZW50Ci0gICAgLy8gdGhlbSB3aXRoIHRoZSAnb2JqZWN0IHJl
cGxhY2VtZW50IGNoYXJhY3RlcicgKDB4RkZGQykuCi0gICAgYmVoYXZpb3IgPSBzdGF0aWNfY2Fz
dDxUZXh0SXRlcmF0b3JCZWhhdmlvcj4oYmVoYXZpb3IgfCBUZXh0SXRlcmF0b3JFbWl0c09iamVj
dFJlcGxhY2VtZW50Q2hhcmFjdGVycyk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBiZWhhdmlvcjsK
LX0KLQogU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQo
KSBjb25zdAogewogICAgIGlmICghbV9yZW5kZXJlcikKQEAgLTExMDIsOSArMTA4OCwxNyBAQAog
ICAgIC8vIFRoZSBmb2xsb3dpbmcgY2FzZXMgY2FuIGFwcGx5IHRvIGFueSBlbGVtZW50IHRoYXQn
cyBhIHN1YmNsYXNzIG9mIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuCiAgICAgCiAgICAgLy8g
SWdub3JlIGludmlzaWJsZSBlbGVtZW50cy4KLSAgICBpZiAoIW1fcmVuZGVyZXIgfHwgbV9yZW5k
ZXJlci0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCisgICAgaWYgKCFtX3JlbmRl
cmVyKQogICAgICAgICByZXR1cm4gSWdub3JlT2JqZWN0OwogCisgICAgaWYgKG1fcmVuZGVyZXIt
PnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKSB7CisgICAgICAgIC8vIGFyaWEtaGlk
ZGVuIGlzIG1lYW50IHRvIG92ZXJyaWRlIHZpc2liaWxpdHkgYXMgdGhlIGRldGVybWluYW50IGlu
IEFYIGhpZXJhcmNoeSBpbmNsdXNpb24uCisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShn
ZXRBdHRyaWJ1dGUoYXJpYV9oaWRkZW5BdHRyKSwgImZhbHNlIikpCisgICAgICAgICAgICByZXR1
cm4gRGVmYXVsdEJlaGF2aW9yOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIElnbm9yZU9iamVj
dDsKKyAgICB9CisgICAgCiAgICAgLy8gQW55dGhpbmcgbWFya2VkIGFzIGFyaWEtaGlkZGVuIG9y
IGEgY2hpbGQgb2Ygc29tZXRoaW5nIGFyaWEtaGlkZGVuIG11c3QgYmUgaGlkZGVuLgogICAgIGlm
IChhcmlhSXNIaWRkZW4oKSkKICAgICAgICAgcmV0dXJuIElnbm9yZU9iamVjdDsKQEAgLTI3MTcs
NiArMjcxMSw1MSBAQAogfQogI2VuZGlmCiAKKy8vIEhpZGRlbiBjaGlsZHJlbiBhcmUgdGhvc2Ug
dGhhdCBhcmUgbm90IHJlbmRlcmVkIG9yIHZpc2libGUsIGJ1dCBhcmUgc3BlY2lmaWNhbGx5IG1h
cmtlZCBhcyBhcmlhLWhpZGRlbj1mYWxzZSwKKy8vIG1lYW5pbmcgdGhhdCB0aGV5IHNob3VsZCBi
ZSBleHBvc2VkIHRvIHRoZSBBWCBoaWVyYXJjaHkuCit2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmFkZEhpZGRlbkNoaWxkcmVuKCkKK3sKKyAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9k
ZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIERldGVy
bWluZSB0aGUgaW5kZXggYXQgd2hpY2ggdGhpcyBpdGVtIHNob3VsZCBiZSBpbnNlcnRlZC4gVGhl
IGdvYWwgaXMgdG8gcGxhY2UgaXQgYXMgY2xvc2UgdG8KKyAgICAvLyBET00gb3JkZXJpbmcgYXMg
cG9zc2libGUgYnkga2VlcGluZyB0cmFjayBvZiB3aGVyZSB0aGUgc2libGluZ3Mgd2hvIGhhZCBy
ZW5kZXJlcnMgd2VyZSBpbnNlcnRlZC4KKyAgICB1bnNpZ25lZCBpbnNlcnRpb25JbmRleCA9IDA7
CisgICAgZm9yIChOb2RlKiBjaGlsZCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5yZW5kZXJlcigp
KSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZpbmQgb3V0IHdoZXJlIHRoZSBsYXN0
IHJlbmRlciBzaWJsaW5nIGlzIGxvY2F0ZWQgd2l0aGluIG1fY2hpbGRyZW4uCisgICAgICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjaGlsZFJlbmRlcmVyID0gYXhPYmplY3RDYWNoZSgpLT5n
ZXQoY2hpbGQtPnJlbmRlcmVyKCkpOworICAgICAgICAgICAgaWYgKGNoaWxkUmVuZGVyZXIgJiYg
Y2hpbGRSZW5kZXJlci0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKSB7CisgICAgICAgICAgICAg
ICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gY2hpbGRSZW5kZXJlci0+
Y2hpbGRyZW4oKTsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpKQorICAgICAg
ICAgICAgICAgICAgICBjaGlsZFJlbmRlcmVyID0gY2hpbGRyZW4ubGFzdCgpLmdldCgpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRSZW5kZXJlciA9IDA7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaGlsZFJlbmRlcmVyKQorICAgICAg
ICAgICAgICAgIGluc2VydGlvbkluZGV4ID0gbV9jaGlsZHJlbi5maW5kKGNoaWxkUmVuZGVyZXIp
ICsgMTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoIWNoaWxkLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgCisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnRDaGlsZCA9IHRvRWxlbWVudChjaGlsZCk7
CisgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UoZWxlbWVudENoaWxkLT5nZXRBdHRyaWJ1
dGUoYXJpYV9oaWRkZW5BdHRyKSwgImZhbHNlIikpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1NpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKKyAgICAg
ICAgaWYgKGluc2VydGlvbkluZGV4ID4gcHJldmlvdXNTaXplKQorICAgICAgICAgICAgaW5zZXJ0
aW9uSW5kZXggPSBwcmV2aW91c1NpemU7CisgICAgICAgIAorICAgICAgICBpbnNlcnRDaGlsZChh
eE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGNoaWxkKSwgaW5zZXJ0aW9uSW5kZXgpOworICAg
ICAgICBpbnNlcnRpb25JbmRleCArPSAobV9jaGlsZHJlbi5zaXplKCkgLSBwcmV2aW91c1NpemUp
OworICAgIH0KK30KKyAgICAKIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkQ2hp
bGRyZW4oKQogewogICAgIC8vIElmIHRoZSBuZWVkIHRvIGFkZCBtb3JlIGNoaWxkcmVuIGluIGFk
ZGl0aW9uIHRvIGV4aXN0aW5nIGNoaWxkcmVuIGFyaXNlcywgCkBAIC0yNzI4LDI0ICsyNzY3LDEw
IEBACiAgICAgaWYgKCFjYW5IYXZlQ2hpbGRyZW4oKSkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIC8vIGFkZCBhbGwgdW5pZ25vcmVkIGFjYyBjaGlsZHJlbgotICAgIGZvciAoUmVmUHRyPEFj
Y2Vzc2liaWxpdHlPYmplY3Q+IG9iaiA9IGZpcnN0Q2hpbGQoKTsgb2JqOyBvYmogPSBvYmotPm5l
eHRTaWJsaW5nKCkpIHsKLSAgICAgICAgLy8gSWYgdGhlIHBhcmVudCBpcyBhc2tpbmcgZm9yIHRo
aXMgY2hpbGQncyBjaGlsZHJlbiwgdGhlbiBlaXRoZXIgaXQncyB0aGUgZmlyc3QgdGltZSAoYW5k
IGNsZWFyaW5nIGlzIGEgbm8tb3ApLCAKLSAgICAgICAgLy8gb3IgaXRzIHZpc2liaWxpdHkgaGFz
IGNoYW5nZWQuIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhpcyBjaGlsZCBtYXkgaGF2ZSBhIHN0YWxl
IGNoaWxkIGNhY2hlZC4gCi0gICAgICAgIC8vIFRoaXMgY2FuIHByZXZlbnQgYXJpYS1oaWRkZW4g
Y2hhbmdlcyBmcm9tIHdvcmtpbmcgY29ycmVjdGx5LiBIZW5jZSwgd2hlbmV2ZXIgYSBwYXJlbnQg
aXMgZ2V0dGluZyBjaGlsZHJlbiwgZW5zdXJlIGRhdGEgaXMgbm90IHN0YWxlLgotICAgICAgICBv
YmotPmNsZWFyQ2hpbGRyZW4oKTsKLQotICAgICAgICBpZiAob2JqLT5hY2Nlc3NpYmlsaXR5SXNJ
Z25vcmVkKCkpIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGls
ZHJlbiA9IG9iai0+Y2hpbGRyZW4oKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGNo
aWxkcmVuLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkKLSAgICAgICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChjaGlsZHJlbltpXSk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQob2JqLT5wYXJlbnRPYmplY3Qo
KSA9PSB0aGlzKTsKLSAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKG9iaik7Ci0gICAgICAg
IH0KLSAgICB9CisgICAgZm9yIChSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gb2JqID0gZmly
c3RDaGlsZCgpOyBvYmo7IG9iaiA9IG9iai0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgYWRkQ2hp
bGQob2JqLmdldCgpKTsKICAgICAKKyAgICBhZGRIaWRkZW5DaGlsZHJlbigpOwogICAgIGFkZEF0
dGFjaG1lbnRDaGlsZHJlbigpOwogICAgIGFkZEltYWdlTWFwQ2hpbGRyZW4oKTsKICAgICBhZGRU
ZXh0RmllbGRDaGlsZHJlbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiAxMzA5NjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzc2LDYgKzE3NzYsMTkgQEAKICAgICByZXR1cm4gIWdldEF0dHJpYnV0
ZShhcmlhX3ByZXNzZWRBdHRyKS5pc0VtcHR5KCk7CiB9CiAKK1RleHRJdGVyYXRvckJlaGF2aW9y
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnRleHRJdGVyYXRvckJlaGF2aW9yRm9yVGV4dFJhbmdlKCkg
Y29uc3QKK3sKKyAgICBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvciA9IFRleHRJdGVyYXRv
cklnbm9yZXNTdHlsZVZpc2liaWxpdHk7CisgICAgCisjaWYgUExBVEZPUk0oR1RLKQorICAgIC8v
IFdlIG5lZWQgdG8gZW1pdCByZXBsYWNlZCBlbGVtZW50cyBmb3IgR1RLLCBhbmQgcHJlc2VudAor
ICAgIC8vIHRoZW0gd2l0aCB0aGUgJ29iamVjdCByZXBsYWNlbWVudCBjaGFyYWN0ZXInICgweEZG
RkMpLgorICAgIGJlaGF2aW9yID0gc3RhdGljX2Nhc3Q8VGV4dEl0ZXJhdG9yQmVoYXZpb3I+KGJl
aGF2aW9yIHwgVGV4dEl0ZXJhdG9yRW1pdHNPYmplY3RSZXBsYWNlbWVudENoYXJhY3RlcnMpOwor
I2VuZGlmCisgICAgCisgICAgcmV0dXJuIGJlaGF2aW9yOworfQorICAgIAogQWNjZXNzaWJpbGl0
eVJvbGUgQWNjZXNzaWJpbGl0eU9iamVjdDo6YnV0dG9uUm9sZVR5cGUoKSBjb25zdAogewogICAg
IC8vIElmIGFyaWEtcHJlc3NlZCBpcyBwcmVzZW50LCB0aGVuIGl0IHNob3VsZCBiZSBleHBvc2Vk
IGFzIGEgdG9nZ2xlIGJ1dHRvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmNwcAkocmV2aXNpb24gMTMwOTY5KQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE2
LDggKzMxNiwxNCBAQAogICAgIGlmIChub2RlLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4g
Z2V0T3JDcmVhdGUobm9kZS0+cmVuZGVyZXIoKSk7CiAKKyAgICBpZiAoIW5vZGUtPnBhcmVudEVs
ZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCiAgICAgLy8gSXQncyBvbmx5IGFsbG93
ZWQgdG8gY3JlYXRlIGFuIEFjY2Vzc2liaWxpdHlPYmplY3QgZnJvbSBhIE5vZGUgaWYgaXQncyBp
biBhIGNhbnZhcyBzdWJ0cmVlLgotICAgIGlmICghbm9kZS0+cGFyZW50RWxlbWVudCgpIHx8ICFu
b2RlLT5wYXJlbnRFbGVtZW50KCktPmlzSW5DYW52YXNTdWJ0cmVlKCkpCisgICAgLy8gT3IgaWYg
aXQncyBhIGhpZGRlbiBlbGVtZW50LCBidXQgd2Ugc3RpbGwgd2FudCB0byBleHBvc2UgaXQgYmVj
YXVzZSBvZiBvdGhlciBBUklBIGF0dHJpYnV0ZXMuCisgICAgYm9vbCBpbkNhbnZhc1N1YnRyZWUg
PSBub2RlLT5wYXJlbnRFbGVtZW50KCktPmlzSW5DYW52YXNTdWJ0cmVlKCk7CisgICAgYm9vbCBp
c0hpZGRlbiA9ICFub2RlLT5yZW5kZXJlcigpOworICAgIGlmICghaW5DYW52YXNTdWJ0cmVlICYm
ICFpc0hpZGRlbikKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0
eU9iamVjdD4gbmV3T2JqID0gY3JlYXRlRnJvbU5vZGUobm9kZSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
LmNwcAkocmV2aXNpb24gMTMwOTY5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw2ICsyMjEs
MjUgQEAKIHsKICAgICByZXR1cm4gYm91bmRpbmdCb3hSZWN0KCk7CiB9CisgICAgCitMYXlvdXRS
ZWN0IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpib3VuZGluZ0JveFJlY3QoKSBjb25zdAorewor
ICAgIC8vIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0cyBoYXZlIG5vIG1lY2hhbmlzbSB5ZXQgdG8g
cmV0dXJuIGEgc2l6ZSBvciBwb3NpdGlvbi4KKyAgICAvLyBTbyBmb3Igbm93LCBsZXQncyByZXR1
cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBhbmNlc3RvciB0aGF0IGRvZXMgaGF2ZSBhIHBvc2l0aW9u
LAorICAgIC8vIGFuZCBnaXZlIGl0IGEgc2l6ZSBvZiAxLDEuCisgICAgCisgICAgTGF5b3V0UmVj
dCBib3VuZGluZ0JveDsKKyAgICBib3VuZGluZ0JveC5zZXRTaXplKExheW91dFNpemUoMSwgMSkp
OworICAgIAorICAgIGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCogcG9zaXRpb25Qcm92aWRlciA9
IHBhcmVudE9iamVjdCgpOyBwb3NpdGlvblByb3ZpZGVyOyBwb3NpdGlvblByb3ZpZGVyID0gcG9z
aXRpb25Qcm92aWRlci0+cGFyZW50T2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKHBvc2l0aW9uUHJv
dmlkZXItPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKSB7CisgICAgICAgICAgICBib3Vu
ZGluZ0JveC5zZXRMb2NhdGlvbihwb3NpdGlvblByb3ZpZGVyLT5lbGVtZW50UmVjdCgpLmxvY2F0
aW9uKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
cmV0dXJuIGJvdW5kaW5nQm94OworfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpz
ZXROb2RlKE5vZGUqIG5vZGUpCiB7CkBAIC0yODMsNiArMzAyLDMyIEBACiAgICAgcmV0dXJuIFVu
a25vd25Sb2xlOwogfQogCit2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjppbnNlcnRDaGls
ZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjaGlsZCwgdW5zaWduZWQgaW5kZXgpCit7CisgICAgaWYg
KCFjaGlsZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIElmIHRoZSBwYXJlbnQgaXMg
YXNraW5nIGZvciB0aGlzIGNoaWxkJ3MgY2hpbGRyZW4sIHRoZW4gZWl0aGVyIGl0J3MgdGhlIGZp
cnN0IHRpbWUgKGFuZCBjbGVhcmluZyBpcyBhIG5vLW9wKSwKKyAgICAvLyBvciBpdHMgdmlzaWJp
bGl0eSBoYXMgY2hhbmdlZC4gSW4gdGhlIGxhdHRlciBjYXNlLCB0aGlzIGNoaWxkIG1heSBoYXZl
IGEgc3RhbGUgY2hpbGQgY2FjaGVkLgorICAgIC8vIFRoaXMgY2FuIHByZXZlbnQgYXJpYS1oaWRk
ZW4gY2hhbmdlcyBmcm9tIHdvcmtpbmcgY29ycmVjdGx5LiBIZW5jZSwgd2hlbmV2ZXIgYSBwYXJl
bnQgaXMgZ2V0dGluZyBjaGlsZHJlbiwgZW5zdXJlIGRhdGEgaXMgbm90IHN0YWxlLgorICAgIGNo
aWxkLT5jbGVhckNoaWxkcmVuKCk7CisgICAgCisgICAgaWYgKGNoaWxkLT5hY2Nlc3NpYmlsaXR5
SXNJZ25vcmVkKCkpIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxk
cmVuID0gY2hpbGQtPmNoaWxkcmVuKCk7CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBjaGlsZHJl
bi5zaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisg
ICAgICAgICAgICBtX2NoaWxkcmVuLmluc2VydChpbmRleCArIGksIGNoaWxkcmVuW2ldKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoY2hpbGQtPnBhcmVudE9iamVjdCgpID09IHRoaXMp
OworICAgICAgICBtX2NoaWxkcmVuLmluc2VydChpbmRleCwgY2hpbGQpOworICAgIH0KK30KKwor
dm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWRkQ2hpbGQoQWNjZXNzaWJpbGl0eU9iamVj
dCogY2hpbGQpCit7CisgICAgaW5zZXJ0Q2hpbGQoY2hpbGQsIG1fY2hpbGRyZW4uc2l6ZSgpKTsK
K30KKwogdm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWRkQ2hpbGRyZW4oKQogewogICAg
IC8vIElmIHRoZSBuZWVkIHRvIGFkZCBtb3JlIGNoaWxkcmVuIGluIGFkZGl0aW9uIHRvIGV4aXN0
aW5nIGNoaWxkcmVuIGFyaXNlcywgCkBAIC0yOTgsMTkgKzM0Myw4IEBACiAgICAgaWYgKHJlbmRl
cmVyKCkgJiYgIW1fbm9kZS0+aGFzVGFnTmFtZShjYW52YXNUYWcpKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgZm9yIChOb2RlKiBjaGlsZCA9IG1fbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBSZWZQdHI8QWNjZXNz
aWJpbGl0eU9iamVjdD4gb2JqID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShjaGlsZCk7
Ci0gICAgICAgIG9iai0+Y2xlYXJDaGlsZHJlbigpOwotICAgICAgICBpZiAob2JqLT5hY2Nlc3Np
YmlsaXR5SXNJZ25vcmVkKCkpIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciBjaGlsZHJlbiA9IG9iai0+Y2hpbGRyZW4oKTsKLSAgICAgICAgICAgIHNpemVfdCBsZW5n
dGggPSBjaGlsZHJlbi5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGNoaWxkcmVu
W2ldKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChvYmotPnBhcmVudE9i
amVjdCgpID09IHRoaXMpOwotICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQob2JqKTsKLSAg
ICAgICAgfQotICAgIH0KKyAgICBmb3IgKE5vZGUqIGNoaWxkID0gbV9ub2RlLT5maXJzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICBhZGRDaGls
ZChheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGNoaWxkKSk7CiB9CiAKIGJvb2wgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OmNhbkhhdmVDaGlsZHJlbigpIGNvbnN0CkBAIC0xMTg2LDcgKzEy
MjAsOSBAQAogICAgIC8vIElmIHRoaXMgY291bGQgYmUgZml4ZWQsIGl0J2QgYmUgbW9yZSBhY2N1
cmF0ZSB1c2UgVGV4dEl0ZXJhdG9yIGhlcmUuCiAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUo
KSkKICAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKS0+aW5uZXJUZXh0KCk7Ci0KKyAgICBl
bHNlIGlmIChub2RlLT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybiB0b1RleHQobm9kZSkt
Pndob2xlVGV4dCgpOworICAgIAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFH
cmlkLmNwcAkocmV2aXNpb24gMTMwOTY5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3
IEBACiAgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7CiB9CiAKLWJvb2wgQWNjZXNzaWJpbGl0eUFS
SUFHcmlkOjphZGRDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjaGlsZCwgSGFzaFNldDxBY2Nl
c3NpYmlsaXR5T2JqZWN0Kj4mIGFwcGVuZGVkUm93cywgdW5zaWduZWQmIGNvbHVtbkNvdW50KQor
Ym9vbCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OmFkZFRhYmxlQ2VsbENoaWxkKEFjY2Vzc2liaWxp
dHlPYmplY3QqIGNoaWxkLCBIYXNoU2V0PEFjY2Vzc2liaWxpdHlPYmplY3QqPiYgYXBwZW5kZWRS
b3dzLCB1bnNpZ25lZCYgY29sdW1uQ291bnQpCiB7CiAgICAgaWYgKCFjaGlsZCB8fCAhY2hpbGQt
PmlzVGFibGVSb3coKSB8fCBjaGlsZC0+YXJpYVJvbGVBdHRyaWJ1dGUoKSAhPSBSb3dSb2xlKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICB1bnNpZ25lZCBj
b2x1bW5Db3VudCA9IDA7CiAgICAgZm9yIChSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gY2hp
bGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7
CiAKLSAgICAgICAgaWYgKCFhZGRDaGlsZChjaGlsZC5nZXQoKSwgYXBwZW5kZWRSb3dzLCBjb2x1
bW5Db3VudCkpIHsKKyAgICAgICAgaWYgKCFhZGRUYWJsZUNlbGxDaGlsZChjaGlsZC5nZXQoKSwg
YXBwZW5kZWRSb3dzLCBjb2x1bW5Db3VudCkpIHsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
Ly8gaW4gY2FzZSB0aGUgcmVuZGVyIHRyZWUgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQgQVJJ
QSBoaWVyYXJjaHksIGxvb2sgYXQgdGhlIGNoaWxkcmVuCiAgICAgICAgICAgICBpZiAoIWNoaWxk
LT5oYXNDaGlsZHJlbigpKQpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgICAgICBBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBjaGlsZC0+Y2hpbGRyZW4oKTsKICAgICAg
ICAgICAgIHNpemVfdCBsZW5ndGggPSBjaGlsZHJlbi5zaXplKCk7CiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIGFkZENoaWxk
KGNoaWxkcmVuW2ldLmdldCgpLCBhcHBlbmRlZFJvd3MsIGNvbHVtbkNvdW50KTsKKyAgICAgICAg
ICAgICAgICBhZGRUYWJsZUNlbGxDaGlsZChjaGlsZHJlbltpXS5nZXQoKSwgYXBwZW5kZWRSb3dz
LCBjb2x1bW5Db3VudCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkluZGV4OiBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWhpZGRlbi1uZWdhdGVzLW5vLXZpc2li
aWxpdHktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9hY2Nlc3NpYmlsaXR5L2FyaWEtaGlkZGVuLW5lZ2F0ZXMtbm8tdmlzaWJpbGl0eS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJp
bGl0eS9hcmlhLWhpZGRlbi1uZWdhdGVzLW5vLXZpc2liaWxpdHktZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDIzIEBACitoZWFkaW5nMS4yCisKKworCitUaGlzIHRlc3RzIGVu
c3VyZXMgdGhhdCBhcmlhLWhpZGRlbj1mYWxzZSB3aWxsIGFsbG93IGEgbm9kZSB0byBiZSBpbiB0
aGUgQVggaGllcmFyY2h5IGV2ZW4gaWYgaXRzIG5vdCByZW5kZXJlZCBvciB2aXNpYmxlCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTICFoZWFkaW5nMV8xIHx8ICFoZWFkaW5n
MV8xLmlzVmFsaWQgaXMgdHJ1ZQorUEFTUyAhaGVhZGluZzFfMiB8fCAhaGVhZGluZzFfMy5pc1Zh
bGlkIGlzIHRydWUKK1BBU1MgIWhlYWRpbmcxXzMgfHwgIWhlYWRpbmcxXzMuaXNWYWxpZCBpcyB0
cnVlCitQQVNTIGhlYWRpbmcyLnJvbGUgaXMgJ0FYUm9sZTogQVhIZWFkaW5nJworUEFTUyBwYXJl
bnQuY2hpbGRBdEluZGV4KDApLmlzRXF1YWwoaGVhZGluZzIpIGlzIHRydWUKK1BBU1MgaGVhZGlu
ZzMucm9sZSBpcyAnQVhSb2xlOiBBWEhlYWRpbmcnCitQQVNTIHBhcmVudC5jaGlsZEF0SW5kZXgo
MSkuaXNFcXVhbChoZWFkaW5nMykgaXMgdHJ1ZQorUEFTUyBoZWFkaW5nNC5yb2xlIGlzICdBWFJv
bGU6IEFYSGVhZGluZycKK1BBU1MgcGFyZW50LmNoaWxkQXRJbmRleCgyKS5pc0VxdWFsKGhlYWRp
bmc0KSBpcyB0cnVlCitUZXh0ZmllbGQgVGl0bGU6IEFYVGl0bGU6IAorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5Lmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLWhpZGRlbi1uZWdhdGVzLW5v
LXZpc2liaWxpdHkuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxp
dHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5Lmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNjMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwv
L0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgaWQ9ImJvZHkiPgorCis8
aDEgaGlkZGVuIGlkPSJoZWFkaW5nMV8xIj5oZWFkaW5nMS4xPC9oMT4KKzxoMSBhcmlhLWhpZGRl
bj0idHJ1ZSIgaWQ9ImhlYWRpbmcxXzIiPmhlYWRpbmcxLjI8L2gxPgorPGgxIGhpZGRlbiBhcmlh
LWhpZGRlbj0idHJ1ZSIgaWQ9ImhlYWRpbmcxXzMiPmhlYWRpbmcxLjM8L2gxPgorCis8aDEgaGlk
ZGVuIGFyaWEtaGlkZGVuPSJmYWxzZSIgaWQ9ImhlYWRpbmcyIj5oZWFkaW5nMjwvaDE+Cis8aDEg
c3R5bGU9ImRpc3BsYXk6bm9uZTsiIGFyaWEtaGlkZGVuPSJmYWxzZSIgaWQ9ImhlYWRpbmczIj5o
ZWFkaW5nMzwvaDE+Cis8aDEgc3R5bGU9InZpc2liaWxpdHk6aGlkZGVuOyIgYXJpYS1oaWRkZW49
ImZhbHNlIiBpZD0iaGVhZGluZzQiPmhlYWRpbmc0PC9oMT4KKworPGRpdiBoaWRkZW4gYXJpYS1o
aWRkZW49ImZhbHNlIiBpZD0iaGlkZGVuRGl2Ij5IaWRkZW5UZXh0MTwvZGl2PgorPGlucHV0IHR5
cGU9InRleHQiIGFyaWEtbGFiZWxsZWRieT0iaGlkZGVuRGl2IiBpZD0idGV4dEZpZWxkV2l0aEhp
ZGRlbkxhYmVsbGVyIj4KKworPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKworPHNjcmlwdD4KKworICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIGVu
c3VyZXMgdGhhdCBhcmlhLWhpZGRlbj1mYWxzZSB3aWxsIGFsbG93IGEgbm9kZSB0byBiZSBpbiB0
aGUgQVggaGllcmFyY2h5IGV2ZW4gaWYgaXRzIG5vdCByZW5kZXJlZCBvciB2aXNpYmxlIik7CisK
KyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisKKyAgICAgICAgLy8g
Rmlyc3QgZ3JvdXBzIG9mIGhlYWRpbmdzIGFyZSBhY3R1YWxseSBoaWRkZS5uCisgICAgICAgIHZh
ciBoZWFkaW5nMV8xID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRC
eUlkKCJoZWFkaW5nMV8xIik7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgiIWhlYWRpbmcxXzEgfHwg
IWhlYWRpbmcxXzEuaXNWYWxpZCIpOworCisgICAgICAgIHZhciBoZWFkaW5nMV8yID0gYWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJoZWFkaW5nMV8yIik7Cisg
ICAgICAgIHNob3VsZEJlVHJ1ZSgiIWhlYWRpbmcxXzIgfHwgIWhlYWRpbmcxXzMuaXNWYWxpZCIp
OworCisgICAgICAgIHZhciBoZWFkaW5nMV8zID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNj
ZXNzaWJsZUVsZW1lbnRCeUlkKCJoZWFkaW5nMV8zIik7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgi
IWhlYWRpbmcxXzMgfHwgIWhlYWRpbmcxXzMuaXNWYWxpZCIpOworCisgICAgICAgIC8vIFRoZXNl
IGhlYWRpbmdzIHNob3VsZCBiZSBpbiBBWCB0cmVlIGRlc3BpdGUgYmVpbmcgaGlkZGVuLgorICAg
ICAgICB2YXIgaGVhZGluZzIgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxl
bWVudEJ5SWQoImhlYWRpbmcyIik7CisgICAgICAgIHNob3VsZEJlKCJoZWFkaW5nMi5yb2xlIiwg
IidBWFJvbGU6IEFYSGVhZGluZyciKTsKKworICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBvcmRl
ciBvZiB0aGVzZSBlbGVtZW50cyBpcyBjb3JyZWN0IGJhc2VkIG9uIERPTSBvcmRlci4KKyAgICAg
ICAgdmFyIHBhcmVudCA9IGhlYWRpbmcyLnBhcmVudEVsZW1lbnQoKTsKKyAgICAgICAgc2hvdWxk
QmVUcnVlKCJwYXJlbnQuY2hpbGRBdEluZGV4KDApLmlzRXF1YWwoaGVhZGluZzIpIik7CisKKyAg
ICAgICAgdmFyIGhlYWRpbmczID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVs
ZW1lbnRCeUlkKCJoZWFkaW5nMyIpOworICAgICAgICBzaG91bGRCZSgiaGVhZGluZzMucm9sZSIs
ICInQVhSb2xlOiBBWEhlYWRpbmcnIik7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgicGFyZW50LmNo
aWxkQXRJbmRleCgxKS5pc0VxdWFsKGhlYWRpbmczKSIpOworCisgICAgICAgIHZhciBoZWFkaW5n
NCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiaGVhZGlu
ZzQiKTsKKyAgICAgICAgc2hvdWxkQmUoImhlYWRpbmc0LnJvbGUiLCAiJ0FYUm9sZTogQVhIZWFk
aW5nJyIpOworICAgICAgICBzaG91bGRCZVRydWUoInBhcmVudC5jaGlsZEF0SW5kZXgoMikuaXNF
cXVhbChoZWFkaW5nNCkiKTsKKworICAgICAgICAvLyBUaGUgYXJpYS1sYWJlbGxlZGJ5IGF0dHJp
YnV0ZSBzaG91bGQgd29yayBldmVuIHRob3VnaCBoaWRkZW4uCisgICAgICAgIHZhciB0ZXh0Rmll
bGQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInRleHRG
aWVsZFdpdGhIaWRkZW5MYWJlbGxlciIpOworICAgICAgICBkZWJ1ZygiVGV4dGZpZWxkIFRpdGxl
OiAiICsgdGV4dEZpZWxkLnRpdGxlKTsKKyAgICB9CisKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNy
Yz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDk3OCkKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEyLTEwLTEwICBDaHJp
cyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IGFyaWEtaGlk
ZGVuPWZhbHNlIGRvZXMgbm90IHdvcmsgYXMgZXhwZWN0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4Nzg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2FyaWEtaGlkZGVuLW5l
Z2F0ZXMtbm8tdmlzaWJpbGl0eS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
YWNjZXNzaWJpbGl0eS9hcmlhLWhpZGRlbi1uZWdhdGVzLW5vLXZpc2liaWxpdHktZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKwogMjAxMi0xMC0xMCAgSmVmZnJleSBQZmF1ICA8anBmYXVAYXBwbGUuY29t
PgogCiAgICAgICAgIFtNYWNdW1dLMl0gVW5yZXZpZXdlZCwgc2tpcHBpbmcgZmFzdC9wYXJzZXIv
ZG9jdW1lbnQtb3Blbi1pbi11bmxvYWQuaHRtbAo=
</data>
<flag name="commit-queue"
          id="181051"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168490</attachid>
            <date>2012-10-12 15:01:32 -0700</date>
            <delta_ts>2012-10-12 15:01:58 -0700</delta_ts>
            <desc>patch </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>4720</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9u
cwkocmV2aXNpb24gMTMxMjI3KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVz
dEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtMTQyNSw2ICsxNDI1LDcgQEAKIHdlYmtp
dC5vcmcvYi83MzkxMiBhY2Nlc3NpYmlsaXR5L2FyaWEtY2hlY2tib3gtdGV4dC5odG1sIFsgU2tp
cCBdCiAKIHdlYmtpdC5vcmcvYi83MzkxMiBhY2Nlc3NpYmlsaXR5L2FyaWEtY2hlY2tib3gtc2Vu
ZHMtbm90aWZpY2F0aW9uLmh0bWwgWyBGYWlsdXJlIFBhc3MgXQord2Via2l0Lm9yZy9iLzk4Nzg3
IGFjY2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5Lmh0bWwgWyBT
a2lwIF0KIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogIyBUZXN0IGZhaWx1cmVzIHdpdGggU2tpYSBHUFUgcmVuZGVy
aW5nIG9mIGNhbnZhcyAyRApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2li
aWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5LWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWhp
ZGRlbi1uZWdhdGVzLW5vLXZpc2liaWxpdHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRl
cy1uby12aXNpYmlsaXR5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBA
QAoraGVhZGluZzEuMgorCisKKworVGhpcyB0ZXN0cyBlbnN1cmVzIHRoYXQgYXJpYS1oaWRkZW49
ZmFsc2Ugd2lsbCBhbGxvdyBhIG5vZGUgdG8gYmUgaW4gdGhlIEFYIGhpZXJhcmNoeSBldmVuIGlm
IGl0cyBub3QgcmVuZGVyZWQgb3IgdmlzaWJsZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyAhaGVhZGluZzFfMSB8fCAhaGVhZGluZzFfMS5pc1ZhbGlkIGlzIHRydWUKK1BB
U1MgIWhlYWRpbmcxXzIgfHwgIWhlYWRpbmcxXzMuaXNWYWxpZCBpcyB0cnVlCitQQVNTICFoZWFk
aW5nMV8zIHx8ICFoZWFkaW5nMV8zLmlzVmFsaWQgaXMgdHJ1ZQorUEFTUyBoZWFkaW5nMi5yb2xl
IGlzICdBWFJvbGU6IEFYSGVhZGluZycKK1BBU1MgcGFyZW50LmNoaWxkQXRJbmRleCgwKS5pc0Vx
dWFsKGhlYWRpbmcyKSBpcyB0cnVlCitQQVNTIGhlYWRpbmczLnJvbGUgaXMgJ0FYUm9sZTogQVhI
ZWFkaW5nJworUEFTUyBwYXJlbnQuY2hpbGRBdEluZGV4KDEpLmlzRXF1YWwoaGVhZGluZzMpIGlz
IHRydWUKK1BBU1MgaGVhZGluZzQucm9sZSBpcyAnQVhSb2xlOiBBWEhlYWRpbmcnCitQQVNTIHBh
cmVudC5jaGlsZEF0SW5kZXgoMikuaXNFcXVhbChoZWFkaW5nNCkgaXMgdHJ1ZQorVGV4dGZpZWxk
IFRpdGxlOiBBWFRpdGxlOiAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtaGlkZGVu
LW5lZ2F0ZXMtbm8tdmlzaWJpbGl0eS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5Lmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtaGlkZGVuLW5lZ2F0ZXMt
bm8tdmlzaWJpbGl0eS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYzIEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5IGlkPSJib2R5Ij4KKworPGgxIGhpZGRlbiBpZD0iaGVhZGluZzFf
MSI+aGVhZGluZzEuMTwvaDE+Cis8aDEgYXJpYS1oaWRkZW49InRydWUiIGlkPSJoZWFkaW5nMV8y
Ij5oZWFkaW5nMS4yPC9oMT4KKzxoMSBoaWRkZW4gYXJpYS1oaWRkZW49InRydWUiIGlkPSJoZWFk
aW5nMV8zIj5oZWFkaW5nMS4zPC9oMT4KKworPGgxIGhpZGRlbiBhcmlhLWhpZGRlbj0iZmFsc2Ui
IGlkPSJoZWFkaW5nMiI+aGVhZGluZzI8L2gxPgorPGgxIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBh
cmlhLWhpZGRlbj0iZmFsc2UiIGlkPSJoZWFkaW5nMyI+aGVhZGluZzM8L2gxPgorPGgxIHN0eWxl
PSJ2aXNpYmlsaXR5OmhpZGRlbjsiIGFyaWEtaGlkZGVuPSJmYWxzZSIgaWQ9ImhlYWRpbmc0Ij5o
ZWFkaW5nNDwvaDE+CisKKzxkaXYgaGlkZGVuIGFyaWEtaGlkZGVuPSJmYWxzZSIgaWQ9ImhpZGRl
bkRpdiI+SGlkZGVuVGV4dDE8L2Rpdj4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBhcmlhLWxhYmVsbGVk
Ynk9ImhpZGRlbkRpdiIgaWQ9InRleHRGaWVsZFdpdGhIaWRkZW5MYWJlbGxlciI+CisKKzxwIGlk
PSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+
CisKKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyBlbnN1cmVzIHRoYXQgYXJpYS1oaWRkZW49
ZmFsc2Ugd2lsbCBhbGxvdyBhIG5vZGUgdG8gYmUgaW4gdGhlIEFYIGhpZXJhcmNoeSBldmVuIGlm
IGl0cyBub3QgcmVuZGVyZWQgb3IgdmlzaWJsZSIpOworCisgICAgaWYgKHdpbmRvdy5hY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcikgeworCisgICAgICAgIC8vIEZpcnN0IGdyb3VwcyBvZiBoZWFkaW5n
cyBhcmUgYWN0dWFsbHkgaGlkZGUubgorICAgICAgICB2YXIgaGVhZGluZzFfMSA9IGFjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiaGVhZGluZzFfMSIpOworICAg
ICAgICBzaG91bGRCZVRydWUoIiFoZWFkaW5nMV8xIHx8ICFoZWFkaW5nMV8xLmlzVmFsaWQiKTsK
KworICAgICAgICB2YXIgaGVhZGluZzFfMiA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vz
c2libGVFbGVtZW50QnlJZCgiaGVhZGluZzFfMiIpOworICAgICAgICBzaG91bGRCZVRydWUoIiFo
ZWFkaW5nMV8yIHx8ICFoZWFkaW5nMV8zLmlzVmFsaWQiKTsKKworICAgICAgICB2YXIgaGVhZGlu
ZzFfMyA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiaGVh
ZGluZzFfMyIpOworICAgICAgICBzaG91bGRCZVRydWUoIiFoZWFkaW5nMV8zIHx8ICFoZWFkaW5n
MV8zLmlzVmFsaWQiKTsKKworICAgICAgICAvLyBUaGVzZSBoZWFkaW5ncyBzaG91bGQgYmUgaW4g
QVggdHJlZSBkZXNwaXRlIGJlaW5nIGhpZGRlbi4KKyAgICAgICAgdmFyIGhlYWRpbmcyID0gYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJoZWFkaW5nMiIpOwor
ICAgICAgICBzaG91bGRCZSgiaGVhZGluZzIucm9sZSIsICInQVhSb2xlOiBBWEhlYWRpbmcnIik7
CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgb3JkZXIgb2YgdGhlc2UgZWxlbWVudHMgaXMg
Y29ycmVjdCBiYXNlZCBvbiBET00gb3JkZXIuCisgICAgICAgIHZhciBwYXJlbnQgPSBoZWFkaW5n
Mi5wYXJlbnRFbGVtZW50KCk7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgicGFyZW50LmNoaWxkQXRJ
bmRleCgwKS5pc0VxdWFsKGhlYWRpbmcyKSIpOworCisgICAgICAgIHZhciBoZWFkaW5nMyA9IGFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiaGVhZGluZzMiKTsK
KyAgICAgICAgc2hvdWxkQmUoImhlYWRpbmczLnJvbGUiLCAiJ0FYUm9sZTogQVhIZWFkaW5nJyIp
OworICAgICAgICBzaG91bGRCZVRydWUoInBhcmVudC5jaGlsZEF0SW5kZXgoMSkuaXNFcXVhbCho
ZWFkaW5nMykiKTsKKworICAgICAgICB2YXIgaGVhZGluZzQgPSBhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImhlYWRpbmc0Iik7CisgICAgICAgIHNob3VsZEJl
KCJoZWFkaW5nNC5yb2xlIiwgIidBWFJvbGU6IEFYSGVhZGluZyciKTsKKyAgICAgICAgc2hvdWxk
QmVUcnVlKCJwYXJlbnQuY2hpbGRBdEluZGV4KDIpLmlzRXF1YWwoaGVhZGluZzQpIik7CisKKyAg
ICAgICAgLy8gVGhlIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGUgc2hvdWxkIHdvcmsgZXZlbiB0
aG91Z2ggaGlkZGVuLgorICAgICAgICB2YXIgdGV4dEZpZWxkID0gYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0RmllbGRXaXRoSGlkZGVuTGFiZWxsZXIi
KTsKKyAgICAgICAgZGVidWcoIlRleHRmaWVsZCBUaXRsZTogIiArIHRleHRGaWVsZC50aXRsZSk7
CisgICAgfQorCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168491</attachid>
            <date>2012-10-12 15:01:58 -0700</date>
            <delta_ts>2012-10-12 15:15:20 -0700</delta_ts>
            <desc>patch </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>25573</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9u
cwkocmV2aXNpb24gMTMxMjI3KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVz
dEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtMTQyNSw2ICsxNDI1LDcgQEAKIHdlYmtp
dC5vcmcvYi83MzkxMiBhY2Nlc3NpYmlsaXR5L2FyaWEtY2hlY2tib3gtdGV4dC5odG1sIFsgU2tp
cCBdCiAKIHdlYmtpdC5vcmcvYi83MzkxMiBhY2Nlc3NpYmlsaXR5L2FyaWEtY2hlY2tib3gtc2Vu
ZHMtbm90aWZpY2F0aW9uLmh0bWwgWyBGYWlsdXJlIFBhc3MgXQord2Via2l0Lm9yZy9iLzk4Nzg3
IGFjY2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5Lmh0bWwgWyBT
a2lwIF0KIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogIyBUZXN0IGZhaWx1cmVzIHdpdGggU2tpYSBHUFUgcmVuZGVy
aW5nIG9mIGNhbnZhcyAyRApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2li
aWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5LWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWhp
ZGRlbi1uZWdhdGVzLW5vLXZpc2liaWxpdHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRl
cy1uby12aXNpYmlsaXR5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBA
QAoraGVhZGluZzEuMgorCisKKworVGhpcyB0ZXN0cyBlbnN1cmVzIHRoYXQgYXJpYS1oaWRkZW49
ZmFsc2Ugd2lsbCBhbGxvdyBhIG5vZGUgdG8gYmUgaW4gdGhlIEFYIGhpZXJhcmNoeSBldmVuIGlm
IGl0cyBub3QgcmVuZGVyZWQgb3IgdmlzaWJsZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyAhaGVhZGluZzFfMSB8fCAhaGVhZGluZzFfMS5pc1ZhbGlkIGlzIHRydWUKK1BB
U1MgIWhlYWRpbmcxXzIgfHwgIWhlYWRpbmcxXzMuaXNWYWxpZCBpcyB0cnVlCitQQVNTICFoZWFk
aW5nMV8zIHx8ICFoZWFkaW5nMV8zLmlzVmFsaWQgaXMgdHJ1ZQorUEFTUyBoZWFkaW5nMi5yb2xl
IGlzICdBWFJvbGU6IEFYSGVhZGluZycKK1BBU1MgcGFyZW50LmNoaWxkQXRJbmRleCgwKS5pc0Vx
dWFsKGhlYWRpbmcyKSBpcyB0cnVlCitQQVNTIGhlYWRpbmczLnJvbGUgaXMgJ0FYUm9sZTogQVhI
ZWFkaW5nJworUEFTUyBwYXJlbnQuY2hpbGRBdEluZGV4KDEpLmlzRXF1YWwoaGVhZGluZzMpIGlz
IHRydWUKK1BBU1MgaGVhZGluZzQucm9sZSBpcyAnQVhSb2xlOiBBWEhlYWRpbmcnCitQQVNTIHBh
cmVudC5jaGlsZEF0SW5kZXgoMikuaXNFcXVhbChoZWFkaW5nNCkgaXMgdHJ1ZQorVGV4dGZpZWxk
IFRpdGxlOiBBWFRpdGxlOiAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtaGlkZGVu
LW5lZ2F0ZXMtbm8tdmlzaWJpbGl0eS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5Lmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtaGlkZGVuLW5lZ2F0ZXMt
bm8tdmlzaWJpbGl0eS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYzIEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5IGlkPSJib2R5Ij4KKworPGgxIGhpZGRlbiBpZD0iaGVhZGluZzFf
MSI+aGVhZGluZzEuMTwvaDE+Cis8aDEgYXJpYS1oaWRkZW49InRydWUiIGlkPSJoZWFkaW5nMV8y
Ij5oZWFkaW5nMS4yPC9oMT4KKzxoMSBoaWRkZW4gYXJpYS1oaWRkZW49InRydWUiIGlkPSJoZWFk
aW5nMV8zIj5oZWFkaW5nMS4zPC9oMT4KKworPGgxIGhpZGRlbiBhcmlhLWhpZGRlbj0iZmFsc2Ui
IGlkPSJoZWFkaW5nMiI+aGVhZGluZzI8L2gxPgorPGgxIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBh
cmlhLWhpZGRlbj0iZmFsc2UiIGlkPSJoZWFkaW5nMyI+aGVhZGluZzM8L2gxPgorPGgxIHN0eWxl
PSJ2aXNpYmlsaXR5OmhpZGRlbjsiIGFyaWEtaGlkZGVuPSJmYWxzZSIgaWQ9ImhlYWRpbmc0Ij5o
ZWFkaW5nNDwvaDE+CisKKzxkaXYgaGlkZGVuIGFyaWEtaGlkZGVuPSJmYWxzZSIgaWQ9ImhpZGRl
bkRpdiI+SGlkZGVuVGV4dDE8L2Rpdj4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBhcmlhLWxhYmVsbGVk
Ynk9ImhpZGRlbkRpdiIgaWQ9InRleHRGaWVsZFdpdGhIaWRkZW5MYWJlbGxlciI+CisKKzxwIGlk
PSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+
CisKKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyBlbnN1cmVzIHRoYXQgYXJpYS1oaWRkZW49
ZmFsc2Ugd2lsbCBhbGxvdyBhIG5vZGUgdG8gYmUgaW4gdGhlIEFYIGhpZXJhcmNoeSBldmVuIGlm
IGl0cyBub3QgcmVuZGVyZWQgb3IgdmlzaWJsZSIpOworCisgICAgaWYgKHdpbmRvdy5hY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcikgeworCisgICAgICAgIC8vIEZpcnN0IGdyb3VwcyBvZiBoZWFkaW5n
cyBhcmUgYWN0dWFsbHkgaGlkZGUubgorICAgICAgICB2YXIgaGVhZGluZzFfMSA9IGFjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiaGVhZGluZzFfMSIpOworICAg
ICAgICBzaG91bGRCZVRydWUoIiFoZWFkaW5nMV8xIHx8ICFoZWFkaW5nMV8xLmlzVmFsaWQiKTsK
KworICAgICAgICB2YXIgaGVhZGluZzFfMiA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vz
c2libGVFbGVtZW50QnlJZCgiaGVhZGluZzFfMiIpOworICAgICAgICBzaG91bGRCZVRydWUoIiFo
ZWFkaW5nMV8yIHx8ICFoZWFkaW5nMV8zLmlzVmFsaWQiKTsKKworICAgICAgICB2YXIgaGVhZGlu
ZzFfMyA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiaGVh
ZGluZzFfMyIpOworICAgICAgICBzaG91bGRCZVRydWUoIiFoZWFkaW5nMV8zIHx8ICFoZWFkaW5n
MV8zLmlzVmFsaWQiKTsKKworICAgICAgICAvLyBUaGVzZSBoZWFkaW5ncyBzaG91bGQgYmUgaW4g
QVggdHJlZSBkZXNwaXRlIGJlaW5nIGhpZGRlbi4KKyAgICAgICAgdmFyIGhlYWRpbmcyID0gYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJoZWFkaW5nMiIpOwor
ICAgICAgICBzaG91bGRCZSgiaGVhZGluZzIucm9sZSIsICInQVhSb2xlOiBBWEhlYWRpbmcnIik7
CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgb3JkZXIgb2YgdGhlc2UgZWxlbWVudHMgaXMg
Y29ycmVjdCBiYXNlZCBvbiBET00gb3JkZXIuCisgICAgICAgIHZhciBwYXJlbnQgPSBoZWFkaW5n
Mi5wYXJlbnRFbGVtZW50KCk7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgicGFyZW50LmNoaWxkQXRJ
bmRleCgwKS5pc0VxdWFsKGhlYWRpbmcyKSIpOworCisgICAgICAgIHZhciBoZWFkaW5nMyA9IGFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiaGVhZGluZzMiKTsK
KyAgICAgICAgc2hvdWxkQmUoImhlYWRpbmczLnJvbGUiLCAiJ0FYUm9sZTogQVhIZWFkaW5nJyIp
OworICAgICAgICBzaG91bGRCZVRydWUoInBhcmVudC5jaGlsZEF0SW5kZXgoMSkuaXNFcXVhbCho
ZWFkaW5nMykiKTsKKworICAgICAgICB2YXIgaGVhZGluZzQgPSBhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImhlYWRpbmc0Iik7CisgICAgICAgIHNob3VsZEJl
KCJoZWFkaW5nNC5yb2xlIiwgIidBWFJvbGU6IEFYSGVhZGluZyciKTsKKyAgICAgICAgc2hvdWxk
QmVUcnVlKCJwYXJlbnQuY2hpbGRBdEluZGV4KDIpLmlzRXF1YWwoaGVhZGluZzQpIik7CisKKyAg
ICAgICAgLy8gVGhlIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGUgc2hvdWxkIHdvcmsgZXZlbiB0
aG91Z2ggaGlkZGVuLgorICAgICAgICB2YXIgdGV4dEZpZWxkID0gYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0RmllbGRXaXRoSGlkZGVuTGFiZWxsZXIi
KTsKKyAgICAgICAgZGVidWcoIlRleHRmaWVsZCBUaXRsZTogIiArIHRleHRGaWVsZC50aXRsZSk7
CisgICAgfQorCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxMzEyMjcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMyBAQAorMjAxMi0xMC0xMCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hA
YXBwbGUuY29tPgorCisgICAgICAgIEFYOiBhcmlhLWhpZGRlbj1mYWxzZSBkb2VzIG5vdCB3b3Jr
IGFzIGV4cGVjdGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05ODc4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9hcmlhLWhpZGRlbi1uZWdhdGVzLW5vLXZpc2liaWxpdHkuaHRt
bDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1oaWRk
ZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisKIDIwMTItMTAt
MTIgIEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQgY2hyb21pdW0gd2luZG93cyByZWJhc2VsaW5lIGZvciByMTMxMjAyLgpAQCAtODQ2LDcgKzg1
Niw3IEBACiAgICAgICAgICogcGxhdGZvcm0vYmxhY2tiZXJyeS9odHRwL3Rlc3RzL3dlYnNvY2tl
dC90ZXN0cy9lbmFibGUtZGlzYWJsZS1zZXR0aW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCiAgICAg
ICAgICogcGxhdGZvcm0vYmxhY2tiZXJyeS9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9lbmFi
bGUtZGlzYWJsZS1zZXR0aW5nLmh0bWw6IEFkZGVkLgogCi0yMDEyLTEwLTExICBFbWlsIEEgRWts
dW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKzIwMTItMTAtMTEgRW1pbCBBIEVrbHVuZCA8ZWFlQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBbU3ViIHBpeGVsIGxheW91dF0gQ2hhbmdlIFJlbmRlckJv
eCB0byBub3Qgcm91bmQgbG9naWNhbFRvcC9MZWZ0IGZvciBSZW5kZXJSZXBsYWNlZAogICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkxMDgKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDEzMTIyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTEwLTEwICBDaHJpcyBGbGVpemFjaCAg
PGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IGFyaWEtaGlkZGVuPWZhbHNlIGRv
ZXMgbm90IHdvcmsgYXMgZXhwZWN0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTk4Nzg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQVJJQSByZXF1aXJlcyB0aGF0IGFyaWEtaGlkZGVuPWZhbHNlIG92ZXJy
aWRlIGFuIGVsZW1lbnQncyBuYXRpdmUgdmlzaWJpbGl0eSBhbmQgaW5jbHVkZSB0aGF0CisgICAg
ICAgIG5vZGUgaW4gdGhlIEFYIGhpZXJhcmNoeS4KKyAKKyAgICAgICAgVG8gYWNjb21wbGlzaCB0
aGlzIHdlIGhhdmUgdG8gYWxsb3cgaW52aXNpYmxlIGl0ZW1zIHRvIGJlIGluY2x1ZGVkLCBhcyB3
ZWxsIGFzIGl0ZW1zIHRoYXQKKyAgICAgICAgaGF2ZSBubyByZW5kZXJlcnMgYXNzb2NpYXRlZCB3
aXRoIHRoZW0uCisKKyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0eS9hcmlhLWhpZGRlbi1uZWdh
dGVzLW5vLXZpc2liaWxpdHkuaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRl
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OmFkZFRhYmxlQ2VsbENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZDo6YWRkQ2hpbGRyZW4p
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmg6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5QVJJQUdyaWQpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Ym91bmRpbmdCb3hSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjppbnNlcnRDaGlsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWRkQ2hpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFkZENoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0ZXh0VW5kZXJFbGVtZW50KToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Lmg6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6OnRleHRJdGVyYXRvckJlaGF2aW9yRm9yVGV4dFJhbmdlKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0OjphZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjppbnNlcnRDaGlsZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZEJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkSGlkZGVuQ2hp
bGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRk
Q2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5oOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCk6CisKIDIwMTItMTAt
MTIgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzEyMjQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkocmV2aXNpb24gMTMx
MjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGbG9hdFF1YWQu
aCIKICNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkxheW91dFR5
cGVzLmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0
aW9uLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CkBAIC01MjMsNiArNTI0LDcgQEAKICAgICB2aXJ0dWFsIEludFBvaW50IGNsaWNrUG9p
bnQoKTsKICAgICBzdGF0aWMgSW50UmVjdCBib3VuZGluZ0JveEZvclF1YWRzKFJlbmRlck9iamVj
dCosIGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+Jik7CiAgICAgCisgICAgVGV4dEl0ZXJhdG9yQmVo
YXZpb3IgdGV4dEl0ZXJhdG9yQmVoYXZpb3JGb3JUZXh0UmFuZ2UoKSBjb25zdDsKICAgICB2aXJ0
dWFsIFBsYWluVGV4dFJhbmdlIHNlbGVjdGVkVGV4dFJhbmdlKCkgY29uc3QgeyByZXR1cm4gUGxh
aW5UZXh0UmFuZ2UoKTsgfQogICAgIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0KCkgY29uc3QgeyBy
ZXR1cm4gc2VsZWN0ZWRUZXh0UmFuZ2UoKS5zdGFydDsgfQogICAgIHVuc2lnbmVkIHNlbGVjdGlv
bkVuZCgpIGNvbnN0IHsgcmV0dXJuIHNlbGVjdGVkVGV4dFJhbmdlKCkubGVuZ3RoOyB9CkBAIC01
NjksNiArNTcxLDkgQEAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQWNjZXNzaWJpbGl0eVJvbGUo
KSB7IH0KICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuKCk7
CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkcmVuKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGFk
ZENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0
Q2hpbGQoQWNjZXNzaWJpbGl0eU9iamVjdCosIHVuc2lnbmVkKSB7IH0KKyAgICAKICAgICB2aXJ0
dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBoYXNDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1faGF2ZUNoaWxkcmVuOyB9
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5oCShyZXZpc2lvbiAxMzEyMjcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ4
LDYgKzI0OCw3IEBACiAgICAgYm9vbCBpc0Rlc2NlbmRhbnRPZkVsZW1lbnRUeXBlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUpIGNvbnN0OwogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlm
IGl0J3MgZm9jdXNhYmxlIGJ1dCBpdCdzIG5vdCBjb250ZW50IGVkaXRhYmxlIGFuZCBpdCdzIG5v
dCBhIGNvbnRyb2wgb3IgQVJJQSBjb250cm9sLgogCisgICAgdm9pZCBhZGRIaWRkZW5DaGlsZHJl
bigpOwogICAgIHZvaWQgYWRkVGV4dEZpZWxkQ2hpbGRyZW4oKTsKICAgICB2b2lkIGFkZEltYWdl
TWFwQ2hpbGRyZW4oKTsKICAgICB2b2lkIGFkZENhbnZhc0NoaWxkcmVuKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAkocmV2aXNpb24gMTMx
MjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwOCw3ICsyMDgsOCBAQAogfTsKIAogYm9vbCBub2RlSGFzUm9sZShO
b2RlKiwgY29uc3QgU3RyaW5nJiByb2xlKTsKLQorYm9vbCBpc05vZGVBUklBSGlkZGVuRmFsc2Uo
Tm9kZSopOworICAgIAogI2lmICFIQVZFKEFDQ0VTU0lCSUxJVFkpCiBpbmxpbmUgQVhPYmplY3RD
YWNoZTo6QVhPYmplY3RDYWNoZShjb25zdCBEb2N1bWVudCogZG9jKSA6IG1fZG9jdW1lbnQoY29u
c3RfY2FzdDxEb2N1bWVudCo+KGRvYykpLCBtX25vdGlmaWNhdGlvblBvc3RUaW1lcih0aGlzLCAw
KSB7IH0KIGlubGluZSBBWE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSgpIHsgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3QuaAkocmV2aXNpb24gMTMxMjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNiAr
MTU4LDkgQEAKIAogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVJvbGUgZGV0ZXJtaW5lQWNjZXNz
aWJpbGl0eVJvbGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRyZW4oKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRkQ2hpbGQoQWNjZXNzaWJpbGl0eU9iamVjdCopOworICAgIHZpcnR1YWwgdm9p
ZCBpbnNlcnRDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgdW5zaWduZWQgaW5kZXgpOworCiAg
ICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3Q7CiAgICAgQWNjZXNzaWJpbGl0eVJvbGUg
YXJpYVJvbGVBdHRyaWJ1dGUoKSBjb25zdDsKQEAgLTE3NCw2ICsxNzcsNyBAQAogICAgIHZvaWQg
YXJpYUxhYmVsZWRCeUVsZW1lbnRzKFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRzKSBjb25zdDsK
ICAgICBTdHJpbmcgYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uRm9yRWxlbWVudHMoVmVjdG9yPEVs
ZW1lbnQqPiAmZWxlbWVudHMpIGNvbnN0OwogICAgIHZvaWQgZWxlbWVudHNGcm9tQXR0cmlidXRl
KFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRzLCBjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7
CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGJvdW5kaW5nQm94UmVjdCgpIGNvbnN0OwogCiAgICAg
RWxlbWVudCogbWVudUVsZW1lbnRGb3JNZW51QnV0dG9uKCkgY29uc3Q7CiAgICAgRWxlbWVudCog
bWVudUl0ZW1FbGVtZW50Rm9yTWVudSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5oCShyZXZpc2lvbiAx
MzEyMjcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklB
R3JpZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBACiAgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzU2VsZWN0ZWRSb3dzKCkgeyByZXR1cm4gdHJ1ZTsgfSAgICAKICAgICB2aXJ0dWFs
IGJvb2wgaXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgCi0g
ICAgYm9vbCBhZGRDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgSGFzaFNldDxBY2Nlc3NpYmls
aXR5T2JqZWN0Kj4mIGFwcGVuZGVkUm93cywgdW5zaWduZWQmIGNvbHVtbkNvdW50KTsKKyAgICBi
b29sIGFkZFRhYmxlQ2VsbENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBIYXNoU2V0PEFjY2Vz
c2liaWxpdHlPYmplY3QqPiYgYXBwZW5kZWRSb3dzLCB1bnNpZ25lZCYgY29sdW1uQ291bnQpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAko
cmV2aXNpb24gMTMxMjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNiBAQAog
I2luY2x1ZGUgIlJlbmRlcmVkUG9zaXRpb24uaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVk
ZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCi0jaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCiAj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtNTk5LDE5ICs1OTgsNiBAQAogICAgIHJl
dHVybiBTdHJpbmcoKTsKIH0KIAotc3RhdGljIFRleHRJdGVyYXRvckJlaGF2aW9yIHRleHRJdGVy
YXRvckJlaGF2aW9yRm9yVGV4dFJhbmdlKCkKLXsKLSAgICBUZXh0SXRlcmF0b3JCZWhhdmlvciBi
ZWhhdmlvciA9IFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHk7Ci0KLSNpZiBQTEFU
Rk9STShHVEspCi0gICAgLy8gV2UgbmVlZCB0byBlbWl0IHJlcGxhY2VkIGVsZW1lbnRzIGZvciBH
VEssIGFuZCBwcmVzZW50Ci0gICAgLy8gdGhlbSB3aXRoIHRoZSAnb2JqZWN0IHJlcGxhY2VtZW50
IGNoYXJhY3RlcicgKDB4RkZGQykuCi0gICAgYmVoYXZpb3IgPSBzdGF0aWNfY2FzdDxUZXh0SXRl
cmF0b3JCZWhhdmlvcj4oYmVoYXZpb3IgfCBUZXh0SXRlcmF0b3JFbWl0c09iamVjdFJlcGxhY2Vt
ZW50Q2hhcmFjdGVycyk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBiZWhhdmlvcjsKLX0KLQogU3Ry
aW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQoKSBjb25zdAog
ewogICAgIGlmICghbV9yZW5kZXJlcikKQEAgLTExMDIsOSArMTA4OCwxNyBAQAogICAgIC8vIFRo
ZSBmb2xsb3dpbmcgY2FzZXMgY2FuIGFwcGx5IHRvIGFueSBlbGVtZW50IHRoYXQncyBhIHN1YmNs
YXNzIG9mIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuCiAgICAgCiAgICAgLy8gSWdub3JlIGlu
dmlzaWJsZSBlbGVtZW50cy4KLSAgICBpZiAoIW1fcmVuZGVyZXIgfHwgbV9yZW5kZXJlci0+c3R5
bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCisgICAgaWYgKCFtX3JlbmRlcmVyKQogICAg
ICAgICByZXR1cm4gSWdub3JlT2JqZWN0OwogCisgICAgaWYgKG1fcmVuZGVyZXItPnN0eWxlKCkt
PnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKSB7CisgICAgICAgIC8vIGFyaWEtaGlkZGVuIGlzIG1l
YW50IHRvIG92ZXJyaWRlIHZpc2liaWxpdHkgYXMgdGhlIGRldGVybWluYW50IGluIEFYIGhpZXJh
cmNoeSBpbmNsdXNpb24uCisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShnZXRBdHRyaWJ1
dGUoYXJpYV9oaWRkZW5BdHRyKSwgImZhbHNlIikpCisgICAgICAgICAgICByZXR1cm4gRGVmYXVs
dEJlaGF2aW9yOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIElnbm9yZU9iamVjdDsKKyAgICB9
CisgICAgCiAgICAgLy8gQW55dGhpbmcgbWFya2VkIGFzIGFyaWEtaGlkZGVuIG9yIGEgY2hpbGQg
b2Ygc29tZXRoaW5nIGFyaWEtaGlkZGVuIG11c3QgYmUgaGlkZGVuLgogICAgIGlmIChhcmlhSXNI
aWRkZW4oKSkKICAgICAgICAgcmV0dXJuIElnbm9yZU9iamVjdDsKQEAgLTI3MTcsNiArMjcxMSw1
OCBAQAogfQogI2VuZGlmCiAKKy8vIEhpZGRlbiBjaGlsZHJlbiBhcmUgdGhvc2UgdGhhdCBhcmUg
bm90IHJlbmRlcmVkIG9yIHZpc2libGUsIGJ1dCBhcmUgc3BlY2lmaWNhbGx5IG1hcmtlZCBhcyBh
cmlhLWhpZGRlbj1mYWxzZSwKKy8vIG1lYW5pbmcgdGhhdCB0aGV5IHNob3VsZCBiZSBleHBvc2Vk
IHRvIHRoZSBBWCBoaWVyYXJjaHkuCit2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFk
ZEhpZGRlbkNoaWxkcmVuKCkKK3sKKyAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOworICAg
IGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIEZpcnN0IGRvIGEgcXVp
Y2sgcnVuIHRocm91Z2ggdG8gZGV0ZXJtaW5lIGlmIHdlIGhhdmUgYW55IGhpZGRlbiBub2RlcyAo
bW9zdCBvZnRlbiB3ZSB3aWxsIG5vdCksIHNvIHRoYXQuCisgICAgYm9vbCBzaG91bGRJbnNlcnRI
aWRkZW5Ob2RlcyA9IGZhbHNlOworICAgIGZvciAoTm9kZSogY2hpbGQgPSBub2RlLT5maXJzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlm
ICghY2hpbGQtPnJlbmRlcmVyKCkgJiYgaXNOb2RlQVJJQUhpZGRlbkZhbHNlKGNoaWxkKSkgewor
ICAgICAgICAgICAgc2hvdWxkSW5zZXJ0SGlkZGVuTm9kZXMgPSB0cnVlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKCFzaG91bGRJbnNlcnRIaWRk
ZW5Ob2RlcykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIERldGVybWluZSB0aGUgaW5k
ZXggYXQgd2hpY2ggdGhpcyBpdGVtIHNob3VsZCBiZSBpbnNlcnRlZC4gVGhlIGdvYWwgaXMgdG8g
cGxhY2UgaXQgYXMgY2xvc2UgdG8KKyAgICAvLyBET00gb3JkZXJpbmcgYXMgcG9zc2libGUgYnkg
a2VlcGluZyB0cmFjayBvZiB3aGVyZSB0aGUgc2libGluZ3Mgd2hvIGhhZCByZW5kZXJlcnMgd2Vy
ZSBpbnNlcnRlZC4KKyAgICB1bnNpZ25lZCBpbnNlcnRpb25JbmRleCA9IDA7CisgICAgZm9yIChO
b2RlKiBjaGlsZCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5yZW5kZXJlcigpKSB7CisgICAgICAg
ICAgICAvLyBGaW5kIG91dCB3aGVyZSB0aGUgbGFzdCByZW5kZXIgc2libGluZyBpcyBsb2NhdGVk
IHdpdGhpbiBtX2NoaWxkcmVuLgorICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY2hp
bGRSZW5kZXJlciA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0KGNoaWxkLT5yZW5kZXJlcigpKTsKKyAg
ICAgICAgICAgIGlmIChjaGlsZFJlbmRlcmVyICYmIGNoaWxkUmVuZGVyZXItPmFjY2Vzc2liaWxp
dHlJc0lnbm9yZWQoKSkgeworICAgICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciBjaGlsZHJlbiA9IGNoaWxkUmVuZGVyZXItPmNoaWxkcmVuKCk7CisgICAgICAgICAgICAg
ICAgaWYgKGNoaWxkcmVuLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRSZW5kZXJl
ciA9IGNoaWxkcmVuLmxhc3QoKS5nZXQoKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIGNoaWxkUmVuZGVyZXIgPSAwOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoY2hpbGRSZW5kZXJlcikKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25JbmRleCA9
IG1fY2hpbGRyZW4uZmluZChjaGlsZFJlbmRlcmVyKSArIDE7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghaXNOb2RlQVJJQUhpZGRlbkZhbHNlKGNoaWxk
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgcHJl
dmlvdXNTaXplID0gbV9jaGlsZHJlbi5zaXplKCk7CisgICAgICAgIGlmIChpbnNlcnRpb25JbmRl
eCA+IHByZXZpb3VzU2l6ZSkKKyAgICAgICAgICAgIGluc2VydGlvbkluZGV4ID0gcHJldmlvdXNT
aXplOworICAgICAgICAKKyAgICAgICAgaW5zZXJ0Q2hpbGQoYXhPYmplY3RDYWNoZSgpLT5nZXRP
ckNyZWF0ZShjaGlsZCksIGluc2VydGlvbkluZGV4KTsKKyAgICAgICAgaW5zZXJ0aW9uSW5kZXgg
Kz0gKG1fY2hpbGRyZW4uc2l6ZSgpIC0gcHJldmlvdXNTaXplKTsKKyAgICB9Cit9CisgICAgCiB2
b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZENoaWxkcmVuKCkKIHsKICAgICAvLyBJ
ZiB0aGUgbmVlZCB0byBhZGQgbW9yZSBjaGlsZHJlbiBpbiBhZGRpdGlvbiB0byBleGlzdGluZyBj
aGlsZHJlbiBhcmlzZXMsIApAQCAtMjcyOCwyNCArMjc3NCwxMCBAQAogICAgIGlmICghY2FuSGF2
ZUNoaWxkcmVuKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICAvLyBhZGQgYWxsIHVuaWdu
b3JlZCBhY2MgY2hpbGRyZW4KLSAgICBmb3IgKFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBv
YmogPSBmaXJzdENoaWxkKCk7IG9iajsgb2JqID0gb2JqLT5uZXh0U2libGluZygpKSB7Ci0gICAg
ICAgIC8vIElmIHRoZSBwYXJlbnQgaXMgYXNraW5nIGZvciB0aGlzIGNoaWxkJ3MgY2hpbGRyZW4s
IHRoZW4gZWl0aGVyIGl0J3MgdGhlIGZpcnN0IHRpbWUgKGFuZCBjbGVhcmluZyBpcyBhIG5vLW9w
KSwgCi0gICAgICAgIC8vIG9yIGl0cyB2aXNpYmlsaXR5IGhhcyBjaGFuZ2VkLiBJbiB0aGUgbGF0
dGVyIGNhc2UsIHRoaXMgY2hpbGQgbWF5IGhhdmUgYSBzdGFsZSBjaGlsZCBjYWNoZWQuIAotICAg
ICAgICAvLyBUaGlzIGNhbiBwcmV2ZW50IGFyaWEtaGlkZGVuIGNoYW5nZXMgZnJvbSB3b3JraW5n
IGNvcnJlY3RseS4gSGVuY2UsIHdoZW5ldmVyIGEgcGFyZW50IGlzIGdldHRpbmcgY2hpbGRyZW4s
IGVuc3VyZSBkYXRhIGlzIG5vdCBzdGFsZS4KLSAgICAgICAgb2JqLT5jbGVhckNoaWxkcmVuKCk7
Ci0KLSAgICAgICAgaWYgKG9iai0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKSB7Ci0gICAgICAg
ICAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBvYmotPmNoaWxkcmVu
KCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBjaGlsZHJlbi5zaXplKCk7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAg
ICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoY2hpbGRyZW5baV0pOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgQVNTRVJUKG9iai0+cGFyZW50T2JqZWN0KCkgPT0gdGhpcyk7Ci0gICAgICAg
ICAgICBtX2NoaWxkcmVuLmFwcGVuZChvYmopOwotICAgICAgICB9Ci0gICAgfQorICAgIGZvciAo
UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG9iaiA9IGZpcnN0Q2hpbGQoKTsgb2JqOyBvYmog
PSBvYmotPm5leHRTaWJsaW5nKCkpCisgICAgICAgIGFkZENoaWxkKG9iai5nZXQoKSk7CiAgICAg
CisgICAgYWRkSGlkZGVuQ2hpbGRyZW4oKTsKICAgICBhZGRBdHRhY2htZW50Q2hpbGRyZW4oKTsK
ICAgICBhZGRJbWFnZU1hcENoaWxkcmVuKCk7CiAgICAgYWRkVGV4dEZpZWxkQ2hpbGRyZW4oKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMTMxMjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3Niw2
ICsxNzc2LDE5IEBACiAgICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoYXJpYV9wcmVzc2VkQXR0ciku
aXNFbXB0eSgpOwogfQogCitUZXh0SXRlcmF0b3JCZWhhdmlvciBBY2Nlc3NpYmlsaXR5T2JqZWN0
Ojp0ZXh0SXRlcmF0b3JCZWhhdmlvckZvclRleHRSYW5nZSgpIGNvbnN0Cit7CisgICAgVGV4dEl0
ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmls
aXR5OworICAgIAorI2lmIFBMQVRGT1JNKEdUSykKKyAgICAvLyBXZSBuZWVkIHRvIGVtaXQgcmVw
bGFjZWQgZWxlbWVudHMgZm9yIEdUSywgYW5kIHByZXNlbnQKKyAgICAvLyB0aGVtIHdpdGggdGhl
ICdvYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyJyAoMHhGRkZDKS4KKyAgICBiZWhhdmlvciA9
IHN0YXRpY19jYXN0PFRleHRJdGVyYXRvckJlaGF2aW9yPihiZWhhdmlvciB8IFRleHRJdGVyYXRv
ckVtaXRzT2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJzKTsKKyNlbmRpZgorICAgIAorICAgIHJl
dHVybiBiZWhhdmlvcjsKK30KKyAgICAKIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OmJ1dHRvblJvbGVUeXBlKCkgY29uc3QKIHsKICAgICAvLyBJZiBhcmlhLXByZXNzZWQg
aXMgcHJlc2VudCwgdGhlbiBpdCBzaG91bGQgYmUgZXhwb3NlZCBhcyBhIHRvZ2dsZSBidXR0b24u
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHAJKHJldmlzaW9uIDEzMTIyNykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNiw4ICszMTYsMTQgQEAKICAgICBp
ZiAobm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGdldE9yQ3JlYXRlKG5vZGUtPnJl
bmRlcmVyKCkpOwogCisgICAgaWYgKCFub2RlLT5wYXJlbnRFbGVtZW50KCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIAogICAgIC8vIEl0J3Mgb25seSBhbGxvd2VkIHRvIGNyZWF0ZSBhbiBBY2Nl
c3NpYmlsaXR5T2JqZWN0IGZyb20gYSBOb2RlIGlmIGl0J3MgaW4gYSBjYW52YXMgc3VidHJlZS4K
LSAgICBpZiAoIW5vZGUtPnBhcmVudEVsZW1lbnQoKSB8fCAhbm9kZS0+cGFyZW50RWxlbWVudCgp
LT5pc0luQ2FudmFzU3VidHJlZSgpKQorICAgIC8vIE9yIGlmIGl0J3MgYSBoaWRkZW4gZWxlbWVu
dCwgYnV0IHdlIHN0aWxsIHdhbnQgdG8gZXhwb3NlIGl0IGJlY2F1c2Ugb2Ygb3RoZXIgQVJJQSBh
dHRyaWJ1dGVzLgorICAgIGJvb2wgaW5DYW52YXNTdWJ0cmVlID0gbm9kZS0+cGFyZW50RWxlbWVu
dCgpLT5pc0luQ2FudmFzU3VidHJlZSgpOworICAgIGJvb2wgaXNIaWRkZW4gPSAhbm9kZS0+cmVu
ZGVyZXIoKSAmJiBpc05vZGVBUklBSGlkZGVuRmFsc2Uobm9kZSk7CisgICAgaWYgKCFpbkNhbnZh
c1N1YnRyZWUgJiYgIWlzSGlkZGVuKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFJlZlB0cjxB
Y2Nlc3NpYmlsaXR5T2JqZWN0PiBuZXdPYmogPSBjcmVhdGVGcm9tTm9kZShub2RlKTsKQEAgLTc4
Myw2ICs3ODksMTcgQEAKICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iamVjdCA9
IGdldE9yQ3JlYXRlKGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpKTsKICAgICByZXR1cm4gYXhPYmpl
Y3QgJiYgYXhPYmplY3QtPmlzVGV4dENvbnRyb2woKTsKIH0KKyAgICAKK2Jvb2wgaXNOb2RlQVJJ
QUhpZGRlbkZhbHNlKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UodG9FbGVt
ZW50KG5vZGUpLT5nZXRBdHRyaWJ1dGUoYXJpYV9oaWRkZW5BdHRyKSwgImZhbHNlIik7Cit9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9u
IDEzMTIyNykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNiArMjIxLDI2IEBACiB7CiAgICAg
cmV0dXJuIGJvdW5kaW5nQm94UmVjdCgpOwogfQorICAgIAorTGF5b3V0UmVjdCBBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6Ym91bmRpbmdCb3hSZWN0KCkgY29uc3QKK3sKKyAgICAvLyBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdHMgaGF2ZSBubyBtZWNoYW5pc20geWV0IHRvIHJldHVybiBhIHNpemUg
b3IgcG9zaXRpb24uCisgICAgLy8gRm9yIG5vdywgbGV0J3MgcmV0dXJuIHRoZSBwb3NpdGlvbiBv
ZiB0aGUgYW5jZXN0b3IgdGhhdCBkb2VzIGhhdmUgYSBwb3NpdGlvbiwKKyAgICAvLyBhbmQgbWFr
ZSBpdCB0aGUgd2lkdGggb2YgdGhhdCBwYXJlbnQsIGFuZCBhYm91dCB0aGUgaGVpZ2h0IG9mIGEg
bGluZSBvZiB0ZXh0LCBzbyB0aGF0IGl0J3MgY2xlYXIgdGhlIG9iamVjdCBpcyBhIGNoaWxkIG9m
IHRoZSBwYXJlbnQuCisgICAgCisgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveDsKKyAgICAKKyAg
ICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBvc2l0aW9uUHJvdmlkZXIgPSBwYXJlbnRPYmpl
Y3QoKTsgcG9zaXRpb25Qcm92aWRlcjsgcG9zaXRpb25Qcm92aWRlciA9IHBvc2l0aW9uUHJvdmlk
ZXItPnBhcmVudE9iamVjdCgpKSB7CisgICAgICAgIGlmIChwb3NpdGlvblByb3ZpZGVyLT5pc0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkgeworICAgICAgICAgICAgTGF5b3V0UmVjdCBwYXJl
bnRSZWN0ID0gcG9zaXRpb25Qcm92aWRlci0+ZWxlbWVudFJlY3QoKTsKKyAgICAgICAgICAgIGJv
dW5kaW5nQm94LnNldFNpemUoTGF5b3V0U2l6ZShwYXJlbnRSZWN0LndpZHRoKCksIEZyYWN0aW9u
YWxMYXlvdXRVbml0KE1JTigxMC4wLCBwYXJlbnRSZWN0LmhlaWdodCgpLnRvRmxvYXQoKSkpKSk7
CisgICAgICAgICAgICBib3VuZGluZ0JveC5zZXRMb2NhdGlvbihwYXJlbnRSZWN0LmxvY2F0aW9u
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0
dXJuIGJvdW5kaW5nQm94OworfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpzZXRO
b2RlKE5vZGUqIG5vZGUpCiB7CkBAIC0yODMsNiArMzAzLDMyIEBACiAgICAgcmV0dXJuIFVua25v
d25Sb2xlOwogfQogCit2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjppbnNlcnRDaGlsZChB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBjaGlsZCwgdW5zaWduZWQgaW5kZXgpCit7CisgICAgaWYgKCFj
aGlsZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIElmIHRoZSBwYXJlbnQgaXMgYXNr
aW5nIGZvciB0aGlzIGNoaWxkJ3MgY2hpbGRyZW4sIHRoZW4gZWl0aGVyIGl0J3MgdGhlIGZpcnN0
IHRpbWUgKGFuZCBjbGVhcmluZyBpcyBhIG5vLW9wKSwKKyAgICAvLyBvciBpdHMgdmlzaWJpbGl0
eSBoYXMgY2hhbmdlZC4gSW4gdGhlIGxhdHRlciBjYXNlLCB0aGlzIGNoaWxkIG1heSBoYXZlIGEg
c3RhbGUgY2hpbGQgY2FjaGVkLgorICAgIC8vIFRoaXMgY2FuIHByZXZlbnQgYXJpYS1oaWRkZW4g
Y2hhbmdlcyBmcm9tIHdvcmtpbmcgY29ycmVjdGx5LiBIZW5jZSwgd2hlbmV2ZXIgYSBwYXJlbnQg
aXMgZ2V0dGluZyBjaGlsZHJlbiwgZW5zdXJlIGRhdGEgaXMgbm90IHN0YWxlLgorICAgIGNoaWxk
LT5jbGVhckNoaWxkcmVuKCk7CisgICAgCisgICAgaWYgKGNoaWxkLT5hY2Nlc3NpYmlsaXR5SXNJ
Z25vcmVkKCkpIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVu
ID0gY2hpbGQtPmNoaWxkcmVuKCk7CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBjaGlsZHJlbi5z
aXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAg
ICAgICAgICBtX2NoaWxkcmVuLmluc2VydChpbmRleCArIGksIGNoaWxkcmVuW2ldKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBBU1NFUlQoY2hpbGQtPnBhcmVudE9iamVjdCgpID09IHRoaXMpOwor
ICAgICAgICBtX2NoaWxkcmVuLmluc2VydChpbmRleCwgY2hpbGQpOworICAgIH0KK30KKwordm9p
ZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWRkQ2hpbGQoQWNjZXNzaWJpbGl0eU9iamVjdCog
Y2hpbGQpCit7CisgICAgaW5zZXJ0Q2hpbGQoY2hpbGQsIG1fY2hpbGRyZW4uc2l6ZSgpKTsKK30K
Kwogdm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWRkQ2hpbGRyZW4oKQogewogICAgIC8v
IElmIHRoZSBuZWVkIHRvIGFkZCBtb3JlIGNoaWxkcmVuIGluIGFkZGl0aW9uIHRvIGV4aXN0aW5n
IGNoaWxkcmVuIGFyaXNlcywgCkBAIC0yOTgsMTkgKzM0NCw4IEBACiAgICAgaWYgKHJlbmRlcmVy
KCkgJiYgIW1fbm9kZS0+aGFzVGFnTmFtZShjYW52YXNUYWcpKQogICAgICAgICByZXR1cm47CiAg
ICAgCi0gICAgZm9yIChOb2RlKiBjaGlsZCA9IG1fbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBSZWZQdHI8QWNjZXNzaWJp
bGl0eU9iamVjdD4gb2JqID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShjaGlsZCk7Ci0g
ICAgICAgIG9iai0+Y2xlYXJDaGlsZHJlbigpOwotICAgICAgICBpZiAob2JqLT5hY2Nlc3NpYmls
aXR5SXNJZ25vcmVkKCkpIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciBjaGlsZHJlbiA9IG9iai0+Y2hpbGRyZW4oKTsKLSAgICAgICAgICAgIHNpemVfdCBsZW5ndGgg
PSBjaGlsZHJlbi5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKQotICAgICAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGNoaWxkcmVuW2ld
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChvYmotPnBhcmVudE9iamVj
dCgpID09IHRoaXMpOwotICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQob2JqKTsKLSAgICAg
ICAgfQotICAgIH0KKyAgICBmb3IgKE5vZGUqIGNoaWxkID0gbV9ub2RlLT5maXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICBhZGRDaGlsZChh
eE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGNoaWxkKSk7CiB9CiAKIGJvb2wgQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmNhbkhhdmVDaGlsZHJlbigpIGNvbnN0CkBAIC0xMTg2LDcgKzEyMjEs
OSBAQAogICAgIC8vIElmIHRoaXMgY291bGQgYmUgZml4ZWQsIGl0J2QgYmUgbW9yZSBhY2N1cmF0
ZSB1c2UgVGV4dEl0ZXJhdG9yIGhlcmUuCiAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkK
ICAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKS0+aW5uZXJUZXh0KCk7Ci0KKyAgICBlbHNl
IGlmIChub2RlLT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybiB0b1RleHQobm9kZSktPndo
b2xlVGV4dCgpOworICAgIAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlk
LmNwcAkocmV2aXNpb24gMTMxMjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBA
CiAgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7CiB9CiAKLWJvb2wgQWNjZXNzaWJpbGl0eUFSSUFH
cmlkOjphZGRDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjaGlsZCwgSGFzaFNldDxBY2Nlc3Np
YmlsaXR5T2JqZWN0Kj4mIGFwcGVuZGVkUm93cywgdW5zaWduZWQmIGNvbHVtbkNvdW50KQorYm9v
bCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OmFkZFRhYmxlQ2VsbENoaWxkKEFjY2Vzc2liaWxpdHlP
YmplY3QqIGNoaWxkLCBIYXNoU2V0PEFjY2Vzc2liaWxpdHlPYmplY3QqPiYgYXBwZW5kZWRSb3dz
LCB1bnNpZ25lZCYgY29sdW1uQ291bnQpCiB7CiAgICAgaWYgKCFjaGlsZCB8fCAhY2hpbGQtPmlz
VGFibGVSb3coKSB8fCBjaGlsZC0+YXJpYVJvbGVBdHRyaWJ1dGUoKSAhPSBSb3dSb2xlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICB1bnNpZ25lZCBjb2x1
bW5Db3VudCA9IDA7CiAgICAgZm9yIChSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gY2hpbGQg
PSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAK
LSAgICAgICAgaWYgKCFhZGRDaGlsZChjaGlsZC5nZXQoKSwgYXBwZW5kZWRSb3dzLCBjb2x1bW5D
b3VudCkpIHsKKyAgICAgICAgaWYgKCFhZGRUYWJsZUNlbGxDaGlsZChjaGlsZC5nZXQoKSwgYXBw
ZW5kZWRSb3dzLCBjb2x1bW5Db3VudCkpIHsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8g
aW4gY2FzZSB0aGUgcmVuZGVyIHRyZWUgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQgQVJJQSBo
aWVyYXJjaHksIGxvb2sgYXQgdGhlIGNoaWxkcmVuCiAgICAgICAgICAgICBpZiAoIWNoaWxkLT5o
YXNDaGlsZHJlbigpKQpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgICAgICBBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBjaGlsZC0+Y2hpbGRyZW4oKTsKICAgICAgICAg
ICAgIHNpemVfdCBsZW5ndGggPSBjaGlsZHJlbi5zaXplKCk7CiAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIGFkZENoaWxkKGNo
aWxkcmVuW2ldLmdldCgpLCBhcHBlbmRlZFJvd3MsIGNvbHVtbkNvdW50KTsKKyAgICAgICAgICAg
ICAgICBhZGRUYWJsZUNlbGxDaGlsZChjaGlsZHJlbltpXS5nZXQoKSwgYXBwZW5kZWRSb3dzLCBj
b2x1bW5Db3VudCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCg==
</data>
<flag name="commit-queue"
          id="181484"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168492</attachid>
            <date>2012-10-12 15:15:20 -0700</date>
            <delta_ts>2012-10-12 15:16:39 -0700</delta_ts>
            <desc>patch </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>25573</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9u
cwkocmV2aXNpb24gMTMxMjI3KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVz
dEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtMTQyNSw2ICsxNDI1LDcgQEAKIHdlYmtp
dC5vcmcvYi83MzkxMiBhY2Nlc3NpYmlsaXR5L2FyaWEtY2hlY2tib3gtdGV4dC5odG1sIFsgU2tp
cCBdCiAKIHdlYmtpdC5vcmcvYi83MzkxMiBhY2Nlc3NpYmlsaXR5L2FyaWEtY2hlY2tib3gtc2Vu
ZHMtbm90aWZpY2F0aW9uLmh0bWwgWyBGYWlsdXJlIFBhc3MgXQord2Via2l0Lm9yZy9iLzk4Nzg3
IGFjY2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5Lmh0bWwgWyBT
a2lwIF0KIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogIyBUZXN0IGZhaWx1cmVzIHdpdGggU2tpYSBHUFUgcmVuZGVy
aW5nIG9mIGNhbnZhcyAyRApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2li
aWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5LWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWhp
ZGRlbi1uZWdhdGVzLW5vLXZpc2liaWxpdHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRl
cy1uby12aXNpYmlsaXR5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBA
QAoraGVhZGluZzEuMgorCisKKworVGhpcyB0ZXN0cyBlbnN1cmVzIHRoYXQgYXJpYS1oaWRkZW49
ZmFsc2Ugd2lsbCBhbGxvdyBhIG5vZGUgdG8gYmUgaW4gdGhlIEFYIGhpZXJhcmNoeSBldmVuIGlm
IGl0cyBub3QgcmVuZGVyZWQgb3IgdmlzaWJsZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyAhaGVhZGluZzFfMSB8fCAhaGVhZGluZzFfMS5pc1ZhbGlkIGlzIHRydWUKK1BB
U1MgIWhlYWRpbmcxXzIgfHwgIWhlYWRpbmcxXzMuaXNWYWxpZCBpcyB0cnVlCitQQVNTICFoZWFk
aW5nMV8zIHx8ICFoZWFkaW5nMV8zLmlzVmFsaWQgaXMgdHJ1ZQorUEFTUyBoZWFkaW5nMi5yb2xl
IGlzICdBWFJvbGU6IEFYSGVhZGluZycKK1BBU1MgcGFyZW50LmNoaWxkQXRJbmRleCgwKS5pc0Vx
dWFsKGhlYWRpbmcyKSBpcyB0cnVlCitQQVNTIGhlYWRpbmczLnJvbGUgaXMgJ0FYUm9sZTogQVhI
ZWFkaW5nJworUEFTUyBwYXJlbnQuY2hpbGRBdEluZGV4KDEpLmlzRXF1YWwoaGVhZGluZzMpIGlz
IHRydWUKK1BBU1MgaGVhZGluZzQucm9sZSBpcyAnQVhSb2xlOiBBWEhlYWRpbmcnCitQQVNTIHBh
cmVudC5jaGlsZEF0SW5kZXgoMikuaXNFcXVhbChoZWFkaW5nNCkgaXMgdHJ1ZQorVGV4dGZpZWxk
IFRpdGxlOiBBWFRpdGxlOiAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtaGlkZGVu
LW5lZ2F0ZXMtbm8tdmlzaWJpbGl0eS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5Lmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtaGlkZGVuLW5lZ2F0ZXMt
bm8tdmlzaWJpbGl0eS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYzIEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5IGlkPSJib2R5Ij4KKworPGgxIGhpZGRlbiBpZD0iaGVhZGluZzFf
MSI+aGVhZGluZzEuMTwvaDE+Cis8aDEgYXJpYS1oaWRkZW49InRydWUiIGlkPSJoZWFkaW5nMV8y
Ij5oZWFkaW5nMS4yPC9oMT4KKzxoMSBoaWRkZW4gYXJpYS1oaWRkZW49InRydWUiIGlkPSJoZWFk
aW5nMV8zIj5oZWFkaW5nMS4zPC9oMT4KKworPGgxIGhpZGRlbiBhcmlhLWhpZGRlbj0iZmFsc2Ui
IGlkPSJoZWFkaW5nMiI+aGVhZGluZzI8L2gxPgorPGgxIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBh
cmlhLWhpZGRlbj0iZmFsc2UiIGlkPSJoZWFkaW5nMyI+aGVhZGluZzM8L2gxPgorPGgxIHN0eWxl
PSJ2aXNpYmlsaXR5OmhpZGRlbjsiIGFyaWEtaGlkZGVuPSJmYWxzZSIgaWQ9ImhlYWRpbmc0Ij5o
ZWFkaW5nNDwvaDE+CisKKzxkaXYgaGlkZGVuIGFyaWEtaGlkZGVuPSJmYWxzZSIgaWQ9ImhpZGRl
bkRpdiI+SGlkZGVuVGV4dDE8L2Rpdj4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBhcmlhLWxhYmVsbGVk
Ynk9ImhpZGRlbkRpdiIgaWQ9InRleHRGaWVsZFdpdGhIaWRkZW5MYWJlbGxlciI+CisKKzxwIGlk
PSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+
CisKKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyBlbnN1cmVzIHRoYXQgYXJpYS1oaWRkZW49
ZmFsc2Ugd2lsbCBhbGxvdyBhIG5vZGUgdG8gYmUgaW4gdGhlIEFYIGhpZXJhcmNoeSBldmVuIGlm
IGl0cyBub3QgcmVuZGVyZWQgb3IgdmlzaWJsZSIpOworCisgICAgaWYgKHdpbmRvdy5hY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcikgeworCisgICAgICAgIC8vIEZpcnN0IGdyb3VwcyBvZiBoZWFkaW5n
cyBhcmUgYWN0dWFsbHkgaGlkZGUubgorICAgICAgICB2YXIgaGVhZGluZzFfMSA9IGFjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiaGVhZGluZzFfMSIpOworICAg
ICAgICBzaG91bGRCZVRydWUoIiFoZWFkaW5nMV8xIHx8ICFoZWFkaW5nMV8xLmlzVmFsaWQiKTsK
KworICAgICAgICB2YXIgaGVhZGluZzFfMiA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vz
c2libGVFbGVtZW50QnlJZCgiaGVhZGluZzFfMiIpOworICAgICAgICBzaG91bGRCZVRydWUoIiFo
ZWFkaW5nMV8yIHx8ICFoZWFkaW5nMV8zLmlzVmFsaWQiKTsKKworICAgICAgICB2YXIgaGVhZGlu
ZzFfMyA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiaGVh
ZGluZzFfMyIpOworICAgICAgICBzaG91bGRCZVRydWUoIiFoZWFkaW5nMV8zIHx8ICFoZWFkaW5n
MV8zLmlzVmFsaWQiKTsKKworICAgICAgICAvLyBUaGVzZSBoZWFkaW5ncyBzaG91bGQgYmUgaW4g
QVggdHJlZSBkZXNwaXRlIGJlaW5nIGhpZGRlbi4KKyAgICAgICAgdmFyIGhlYWRpbmcyID0gYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJoZWFkaW5nMiIpOwor
ICAgICAgICBzaG91bGRCZSgiaGVhZGluZzIucm9sZSIsICInQVhSb2xlOiBBWEhlYWRpbmcnIik7
CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgb3JkZXIgb2YgdGhlc2UgZWxlbWVudHMgaXMg
Y29ycmVjdCBiYXNlZCBvbiBET00gb3JkZXIuCisgICAgICAgIHZhciBwYXJlbnQgPSBoZWFkaW5n
Mi5wYXJlbnRFbGVtZW50KCk7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgicGFyZW50LmNoaWxkQXRJ
bmRleCgwKS5pc0VxdWFsKGhlYWRpbmcyKSIpOworCisgICAgICAgIHZhciBoZWFkaW5nMyA9IGFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiaGVhZGluZzMiKTsK
KyAgICAgICAgc2hvdWxkQmUoImhlYWRpbmczLnJvbGUiLCAiJ0FYUm9sZTogQVhIZWFkaW5nJyIp
OworICAgICAgICBzaG91bGRCZVRydWUoInBhcmVudC5jaGlsZEF0SW5kZXgoMSkuaXNFcXVhbCho
ZWFkaW5nMykiKTsKKworICAgICAgICB2YXIgaGVhZGluZzQgPSBhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImhlYWRpbmc0Iik7CisgICAgICAgIHNob3VsZEJl
KCJoZWFkaW5nNC5yb2xlIiwgIidBWFJvbGU6IEFYSGVhZGluZyciKTsKKyAgICAgICAgc2hvdWxk
QmVUcnVlKCJwYXJlbnQuY2hpbGRBdEluZGV4KDIpLmlzRXF1YWwoaGVhZGluZzQpIik7CisKKyAg
ICAgICAgLy8gVGhlIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGUgc2hvdWxkIHdvcmsgZXZlbiB0
aG91Z2ggaGlkZGVuLgorICAgICAgICB2YXIgdGV4dEZpZWxkID0gYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0RmllbGRXaXRoSGlkZGVuTGFiZWxsZXIi
KTsKKyAgICAgICAgZGVidWcoIlRleHRmaWVsZCBUaXRsZTogIiArIHRleHRGaWVsZC50aXRsZSk7
CisgICAgfQorCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxMzEyMjcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMyBAQAorMjAxMi0xMC0xMCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hA
YXBwbGUuY29tPgorCisgICAgICAgIEFYOiBhcmlhLWhpZGRlbj1mYWxzZSBkb2VzIG5vdCB3b3Jr
IGFzIGV4cGVjdGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05ODc4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9hcmlhLWhpZGRlbi1uZWdhdGVzLW5vLXZpc2liaWxpdHkuaHRt
bDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1oaWRk
ZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisKIDIwMTItMTAt
MTIgIEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQgY2hyb21pdW0gd2luZG93cyByZWJhc2VsaW5lIGZvciByMTMxMjAyLgpAQCAtODQ2LDcgKzg1
Niw3IEBACiAgICAgICAgICogcGxhdGZvcm0vYmxhY2tiZXJyeS9odHRwL3Rlc3RzL3dlYnNvY2tl
dC90ZXN0cy9lbmFibGUtZGlzYWJsZS1zZXR0aW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCiAgICAg
ICAgICogcGxhdGZvcm0vYmxhY2tiZXJyeS9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9lbmFi
bGUtZGlzYWJsZS1zZXR0aW5nLmh0bWw6IEFkZGVkLgogCi0yMDEyLTEwLTExICBFbWlsIEEgRWts
dW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKzIwMTItMTAtMTEgRW1pbCBBIEVrbHVuZCA8ZWFlQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBbU3ViIHBpeGVsIGxheW91dF0gQ2hhbmdlIFJlbmRlckJv
eCB0byBub3Qgcm91bmQgbG9naWNhbFRvcC9MZWZ0IGZvciBSZW5kZXJSZXBsYWNlZAogICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkxMDgKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDEzMTIyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTEwLTEwICBDaHJpcyBGbGVpemFjaCAg
PGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IGFyaWEtaGlkZGVuPWZhbHNlIGRv
ZXMgbm90IHdvcmsgYXMgZXhwZWN0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTk4Nzg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQVJJQSByZXF1aXJlcyB0aGF0IGFyaWEtaGlkZGVuPWZhbHNlIG92ZXJy
aWRlIGFuIGVsZW1lbnQncyBuYXRpdmUgdmlzaWJpbGl0eSBhbmQgaW5jbHVkZSB0aGF0CisgICAg
ICAgIG5vZGUgaW4gdGhlIEFYIGhpZXJhcmNoeS4KKyAKKyAgICAgICAgVG8gYWNjb21wbGlzaCB0
aGlzIHdlIGhhdmUgdG8gYWxsb3cgaW52aXNpYmxlIGl0ZW1zIHRvIGJlIGluY2x1ZGVkLCBhcyB3
ZWxsIGFzIGl0ZW1zIHRoYXQKKyAgICAgICAgaGF2ZSBubyByZW5kZXJlcnMgYXNzb2NpYXRlZCB3
aXRoIHRoZW0uCisKKyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0eS9hcmlhLWhpZGRlbi1uZWdh
dGVzLW5vLXZpc2liaWxpdHkuaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRl
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OmFkZFRhYmxlQ2VsbENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZDo6YWRkQ2hpbGRyZW4p
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmg6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5QVJJQUdyaWQpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Ym91bmRpbmdCb3hSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjppbnNlcnRDaGlsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWRkQ2hpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFkZENoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0ZXh0VW5kZXJFbGVtZW50KToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Lmg6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6OnRleHRJdGVyYXRvckJlaGF2aW9yRm9yVGV4dFJhbmdlKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0OjphZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjppbnNlcnRDaGlsZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZEJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkSGlkZGVuQ2hp
bGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRk
Q2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5oOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCk6CisKIDIwMTItMTAt
MTIgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzEyMjQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkocmV2aXNpb24gMTMx
MjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGbG9hdFF1YWQu
aCIKICNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkxheW91dFR5
cGVzLmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0
aW9uLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CkBAIC01MjMsNiArNTI0LDcgQEAKICAgICB2aXJ0dWFsIEludFBvaW50IGNsaWNrUG9p
bnQoKTsKICAgICBzdGF0aWMgSW50UmVjdCBib3VuZGluZ0JveEZvclF1YWRzKFJlbmRlck9iamVj
dCosIGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+Jik7CiAgICAgCisgICAgVGV4dEl0ZXJhdG9yQmVo
YXZpb3IgdGV4dEl0ZXJhdG9yQmVoYXZpb3JGb3JUZXh0UmFuZ2UoKSBjb25zdDsKICAgICB2aXJ0
dWFsIFBsYWluVGV4dFJhbmdlIHNlbGVjdGVkVGV4dFJhbmdlKCkgY29uc3QgeyByZXR1cm4gUGxh
aW5UZXh0UmFuZ2UoKTsgfQogICAgIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0KCkgY29uc3QgeyBy
ZXR1cm4gc2VsZWN0ZWRUZXh0UmFuZ2UoKS5zdGFydDsgfQogICAgIHVuc2lnbmVkIHNlbGVjdGlv
bkVuZCgpIGNvbnN0IHsgcmV0dXJuIHNlbGVjdGVkVGV4dFJhbmdlKCkubGVuZ3RoOyB9CkBAIC01
NjksNiArNTcxLDkgQEAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQWNjZXNzaWJpbGl0eVJvbGUo
KSB7IH0KICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuKCk7
CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkcmVuKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGFk
ZENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0
Q2hpbGQoQWNjZXNzaWJpbGl0eU9iamVjdCosIHVuc2lnbmVkKSB7IH0KKyAgICAKICAgICB2aXJ0
dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBoYXNDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1faGF2ZUNoaWxkcmVuOyB9
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5oCShyZXZpc2lvbiAxMzEyMjcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ4
LDYgKzI0OCw3IEBACiAgICAgYm9vbCBpc0Rlc2NlbmRhbnRPZkVsZW1lbnRUeXBlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUpIGNvbnN0OwogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlm
IGl0J3MgZm9jdXNhYmxlIGJ1dCBpdCdzIG5vdCBjb250ZW50IGVkaXRhYmxlIGFuZCBpdCdzIG5v
dCBhIGNvbnRyb2wgb3IgQVJJQSBjb250cm9sLgogCisgICAgdm9pZCBhZGRIaWRkZW5DaGlsZHJl
bigpOwogICAgIHZvaWQgYWRkVGV4dEZpZWxkQ2hpbGRyZW4oKTsKICAgICB2b2lkIGFkZEltYWdl
TWFwQ2hpbGRyZW4oKTsKICAgICB2b2lkIGFkZENhbnZhc0NoaWxkcmVuKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAkocmV2aXNpb24gMTMx
MjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwOCw3ICsyMDgsOCBAQAogfTsKIAogYm9vbCBub2RlSGFzUm9sZShO
b2RlKiwgY29uc3QgU3RyaW5nJiByb2xlKTsKLQorYm9vbCBpc05vZGVBUklBSGlkZGVuRmFsc2Uo
Tm9kZSopOworICAgIAogI2lmICFIQVZFKEFDQ0VTU0lCSUxJVFkpCiBpbmxpbmUgQVhPYmplY3RD
YWNoZTo6QVhPYmplY3RDYWNoZShjb25zdCBEb2N1bWVudCogZG9jKSA6IG1fZG9jdW1lbnQoY29u
c3RfY2FzdDxEb2N1bWVudCo+KGRvYykpLCBtX25vdGlmaWNhdGlvblBvc3RUaW1lcih0aGlzLCAw
KSB7IH0KIGlubGluZSBBWE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSgpIHsgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3QuaAkocmV2aXNpb24gMTMxMjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNiAr
MTU4LDkgQEAKIAogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVJvbGUgZGV0ZXJtaW5lQWNjZXNz
aWJpbGl0eVJvbGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRyZW4oKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRkQ2hpbGQoQWNjZXNzaWJpbGl0eU9iamVjdCopOworICAgIHZpcnR1YWwgdm9p
ZCBpbnNlcnRDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgdW5zaWduZWQgaW5kZXgpOworCiAg
ICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3Q7CiAgICAgQWNjZXNzaWJpbGl0eVJvbGUg
YXJpYVJvbGVBdHRyaWJ1dGUoKSBjb25zdDsKQEAgLTE3NCw2ICsxNzcsNyBAQAogICAgIHZvaWQg
YXJpYUxhYmVsZWRCeUVsZW1lbnRzKFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRzKSBjb25zdDsK
ICAgICBTdHJpbmcgYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uRm9yRWxlbWVudHMoVmVjdG9yPEVs
ZW1lbnQqPiAmZWxlbWVudHMpIGNvbnN0OwogICAgIHZvaWQgZWxlbWVudHNGcm9tQXR0cmlidXRl
KFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRzLCBjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7
CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGJvdW5kaW5nQm94UmVjdCgpIGNvbnN0OwogCiAgICAg
RWxlbWVudCogbWVudUVsZW1lbnRGb3JNZW51QnV0dG9uKCkgY29uc3Q7CiAgICAgRWxlbWVudCog
bWVudUl0ZW1FbGVtZW50Rm9yTWVudSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5oCShyZXZpc2lvbiAx
MzEyMjcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklB
R3JpZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBACiAgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzU2VsZWN0ZWRSb3dzKCkgeyByZXR1cm4gdHJ1ZTsgfSAgICAKICAgICB2aXJ0dWFs
IGJvb2wgaXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgCi0g
ICAgYm9vbCBhZGRDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgSGFzaFNldDxBY2Nlc3NpYmls
aXR5T2JqZWN0Kj4mIGFwcGVuZGVkUm93cywgdW5zaWduZWQmIGNvbHVtbkNvdW50KTsKKyAgICBi
b29sIGFkZFRhYmxlQ2VsbENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBIYXNoU2V0PEFjY2Vz
c2liaWxpdHlPYmplY3QqPiYgYXBwZW5kZWRSb3dzLCB1bnNpZ25lZCYgY29sdW1uQ291bnQpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAko
cmV2aXNpb24gMTMxMjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNiBAQAog
I2luY2x1ZGUgIlJlbmRlcmVkUG9zaXRpb24uaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVk
ZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCi0jaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCiAj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtNTk5LDE5ICs1OTgsNiBAQAogICAgIHJl
dHVybiBTdHJpbmcoKTsKIH0KIAotc3RhdGljIFRleHRJdGVyYXRvckJlaGF2aW9yIHRleHRJdGVy
YXRvckJlaGF2aW9yRm9yVGV4dFJhbmdlKCkKLXsKLSAgICBUZXh0SXRlcmF0b3JCZWhhdmlvciBi
ZWhhdmlvciA9IFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHk7Ci0KLSNpZiBQTEFU
Rk9STShHVEspCi0gICAgLy8gV2UgbmVlZCB0byBlbWl0IHJlcGxhY2VkIGVsZW1lbnRzIGZvciBH
VEssIGFuZCBwcmVzZW50Ci0gICAgLy8gdGhlbSB3aXRoIHRoZSAnb2JqZWN0IHJlcGxhY2VtZW50
IGNoYXJhY3RlcicgKDB4RkZGQykuCi0gICAgYmVoYXZpb3IgPSBzdGF0aWNfY2FzdDxUZXh0SXRl
cmF0b3JCZWhhdmlvcj4oYmVoYXZpb3IgfCBUZXh0SXRlcmF0b3JFbWl0c09iamVjdFJlcGxhY2Vt
ZW50Q2hhcmFjdGVycyk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBiZWhhdmlvcjsKLX0KLQogU3Ry
aW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQoKSBjb25zdAog
ewogICAgIGlmICghbV9yZW5kZXJlcikKQEAgLTExMDIsOSArMTA4OCwxNyBAQAogICAgIC8vIFRo
ZSBmb2xsb3dpbmcgY2FzZXMgY2FuIGFwcGx5IHRvIGFueSBlbGVtZW50IHRoYXQncyBhIHN1YmNs
YXNzIG9mIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuCiAgICAgCiAgICAgLy8gSWdub3JlIGlu
dmlzaWJsZSBlbGVtZW50cy4KLSAgICBpZiAoIW1fcmVuZGVyZXIgfHwgbV9yZW5kZXJlci0+c3R5
bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCisgICAgaWYgKCFtX3JlbmRlcmVyKQogICAg
ICAgICByZXR1cm4gSWdub3JlT2JqZWN0OwogCisgICAgaWYgKG1fcmVuZGVyZXItPnN0eWxlKCkt
PnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKSB7CisgICAgICAgIC8vIGFyaWEtaGlkZGVuIGlzIG1l
YW50IHRvIG92ZXJyaWRlIHZpc2liaWxpdHkgYXMgdGhlIGRldGVybWluYW50IGluIEFYIGhpZXJh
cmNoeSBpbmNsdXNpb24uCisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShnZXRBdHRyaWJ1
dGUoYXJpYV9oaWRkZW5BdHRyKSwgImZhbHNlIikpCisgICAgICAgICAgICByZXR1cm4gRGVmYXVs
dEJlaGF2aW9yOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIElnbm9yZU9iamVjdDsKKyAgICB9
CisgICAgCiAgICAgLy8gQW55dGhpbmcgbWFya2VkIGFzIGFyaWEtaGlkZGVuIG9yIGEgY2hpbGQg
b2Ygc29tZXRoaW5nIGFyaWEtaGlkZGVuIG11c3QgYmUgaGlkZGVuLgogICAgIGlmIChhcmlhSXNI
aWRkZW4oKSkKICAgICAgICAgcmV0dXJuIElnbm9yZU9iamVjdDsKQEAgLTI3MTcsNiArMjcxMSw1
OCBAQAogfQogI2VuZGlmCiAKKy8vIEhpZGRlbiBjaGlsZHJlbiBhcmUgdGhvc2UgdGhhdCBhcmUg
bm90IHJlbmRlcmVkIG9yIHZpc2libGUsIGJ1dCBhcmUgc3BlY2lmaWNhbGx5IG1hcmtlZCBhcyBh
cmlhLWhpZGRlbj1mYWxzZSwKKy8vIG1lYW5pbmcgdGhhdCB0aGV5IHNob3VsZCBiZSBleHBvc2Vk
IHRvIHRoZSBBWCBoaWVyYXJjaHkuCit2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFk
ZEhpZGRlbkNoaWxkcmVuKCkKK3sKKyAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOworICAg
IGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIEZpcnN0IGRvIGEgcXVp
Y2sgcnVuIHRocm91Z2ggdG8gZGV0ZXJtaW5lIGlmIHdlIGhhdmUgYW55IGhpZGRlbiBub2RlcyAo
bW9zdCBvZnRlbiB3ZSB3aWxsIG5vdCksIHNvIHRoYXQuCisgICAgYm9vbCBzaG91bGRJbnNlcnRI
aWRkZW5Ob2RlcyA9IGZhbHNlOworICAgIGZvciAoTm9kZSogY2hpbGQgPSBub2RlLT5maXJzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlm
ICghY2hpbGQtPnJlbmRlcmVyKCkgJiYgaXNOb2RlQVJJQUhpZGRlbkZhbHNlKGNoaWxkKSkgewor
ICAgICAgICAgICAgc2hvdWxkSW5zZXJ0SGlkZGVuTm9kZXMgPSB0cnVlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKCFzaG91bGRJbnNlcnRIaWRk
ZW5Ob2RlcykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIERldGVybWluZSB0aGUgaW5k
ZXggYXQgd2hpY2ggdGhpcyBpdGVtIHNob3VsZCBiZSBpbnNlcnRlZC4gVGhlIGdvYWwgaXMgdG8g
cGxhY2UgaXQgYXMgY2xvc2UgdG8KKyAgICAvLyBET00gb3JkZXJpbmcgYXMgcG9zc2libGUgYnkg
a2VlcGluZyB0cmFjayBvZiB3aGVyZSB0aGUgc2libGluZ3Mgd2hvIGhhZCByZW5kZXJlcnMgd2Vy
ZSBpbnNlcnRlZC4KKyAgICB1bnNpZ25lZCBpbnNlcnRpb25JbmRleCA9IDA7CisgICAgZm9yIChO
b2RlKiBjaGlsZCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5yZW5kZXJlcigpKSB7CisgICAgICAg
ICAgICAvLyBGaW5kIG91dCB3aGVyZSB0aGUgbGFzdCByZW5kZXIgc2libGluZyBpcyBsb2NhdGVk
IHdpdGhpbiBtX2NoaWxkcmVuLgorICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY2hp
bGRSZW5kZXJlciA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0KGNoaWxkLT5yZW5kZXJlcigpKTsKKyAg
ICAgICAgICAgIGlmIChjaGlsZFJlbmRlcmVyICYmIGNoaWxkUmVuZGVyZXItPmFjY2Vzc2liaWxp
dHlJc0lnbm9yZWQoKSkgeworICAgICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciBjaGlsZHJlbiA9IGNoaWxkUmVuZGVyZXItPmNoaWxkcmVuKCk7CisgICAgICAgICAgICAg
ICAgaWYgKGNoaWxkcmVuLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRSZW5kZXJl
ciA9IGNoaWxkcmVuLmxhc3QoKS5nZXQoKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIGNoaWxkUmVuZGVyZXIgPSAwOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoY2hpbGRSZW5kZXJlcikKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25JbmRleCA9
IG1fY2hpbGRyZW4uZmluZChjaGlsZFJlbmRlcmVyKSArIDE7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghaXNOb2RlQVJJQUhpZGRlbkZhbHNlKGNoaWxk
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgcHJl
dmlvdXNTaXplID0gbV9jaGlsZHJlbi5zaXplKCk7CisgICAgICAgIGlmIChpbnNlcnRpb25JbmRl
eCA+IHByZXZpb3VzU2l6ZSkKKyAgICAgICAgICAgIGluc2VydGlvbkluZGV4ID0gcHJldmlvdXNT
aXplOworICAgICAgICAKKyAgICAgICAgaW5zZXJ0Q2hpbGQoYXhPYmplY3RDYWNoZSgpLT5nZXRP
ckNyZWF0ZShjaGlsZCksIGluc2VydGlvbkluZGV4KTsKKyAgICAgICAgaW5zZXJ0aW9uSW5kZXgg
Kz0gKG1fY2hpbGRyZW4uc2l6ZSgpIC0gcHJldmlvdXNTaXplKTsKKyAgICB9Cit9CisgICAgCiB2
b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZENoaWxkcmVuKCkKIHsKICAgICAvLyBJ
ZiB0aGUgbmVlZCB0byBhZGQgbW9yZSBjaGlsZHJlbiBpbiBhZGRpdGlvbiB0byBleGlzdGluZyBj
aGlsZHJlbiBhcmlzZXMsIApAQCAtMjcyOCwyNCArMjc3NCwxMCBAQAogICAgIGlmICghY2FuSGF2
ZUNoaWxkcmVuKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICAvLyBhZGQgYWxsIHVuaWdu
b3JlZCBhY2MgY2hpbGRyZW4KLSAgICBmb3IgKFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBv
YmogPSBmaXJzdENoaWxkKCk7IG9iajsgb2JqID0gb2JqLT5uZXh0U2libGluZygpKSB7Ci0gICAg
ICAgIC8vIElmIHRoZSBwYXJlbnQgaXMgYXNraW5nIGZvciB0aGlzIGNoaWxkJ3MgY2hpbGRyZW4s
IHRoZW4gZWl0aGVyIGl0J3MgdGhlIGZpcnN0IHRpbWUgKGFuZCBjbGVhcmluZyBpcyBhIG5vLW9w
KSwgCi0gICAgICAgIC8vIG9yIGl0cyB2aXNpYmlsaXR5IGhhcyBjaGFuZ2VkLiBJbiB0aGUgbGF0
dGVyIGNhc2UsIHRoaXMgY2hpbGQgbWF5IGhhdmUgYSBzdGFsZSBjaGlsZCBjYWNoZWQuIAotICAg
ICAgICAvLyBUaGlzIGNhbiBwcmV2ZW50IGFyaWEtaGlkZGVuIGNoYW5nZXMgZnJvbSB3b3JraW5n
IGNvcnJlY3RseS4gSGVuY2UsIHdoZW5ldmVyIGEgcGFyZW50IGlzIGdldHRpbmcgY2hpbGRyZW4s
IGVuc3VyZSBkYXRhIGlzIG5vdCBzdGFsZS4KLSAgICAgICAgb2JqLT5jbGVhckNoaWxkcmVuKCk7
Ci0KLSAgICAgICAgaWYgKG9iai0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKSB7Ci0gICAgICAg
ICAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBvYmotPmNoaWxkcmVu
KCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBjaGlsZHJlbi5zaXplKCk7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAg
ICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoY2hpbGRyZW5baV0pOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgQVNTRVJUKG9iai0+cGFyZW50T2JqZWN0KCkgPT0gdGhpcyk7Ci0gICAgICAg
ICAgICBtX2NoaWxkcmVuLmFwcGVuZChvYmopOwotICAgICAgICB9Ci0gICAgfQorICAgIGZvciAo
UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG9iaiA9IGZpcnN0Q2hpbGQoKTsgb2JqOyBvYmog
PSBvYmotPm5leHRTaWJsaW5nKCkpCisgICAgICAgIGFkZENoaWxkKG9iai5nZXQoKSk7CiAgICAg
CisgICAgYWRkSGlkZGVuQ2hpbGRyZW4oKTsKICAgICBhZGRBdHRhY2htZW50Q2hpbGRyZW4oKTsK
ICAgICBhZGRJbWFnZU1hcENoaWxkcmVuKCk7CiAgICAgYWRkVGV4dEZpZWxkQ2hpbGRyZW4oKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMTMxMjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3Niw2
ICsxNzc2LDE5IEBACiAgICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoYXJpYV9wcmVzc2VkQXR0ciku
aXNFbXB0eSgpOwogfQogCitUZXh0SXRlcmF0b3JCZWhhdmlvciBBY2Nlc3NpYmlsaXR5T2JqZWN0
Ojp0ZXh0SXRlcmF0b3JCZWhhdmlvckZvclRleHRSYW5nZSgpIGNvbnN0Cit7CisgICAgVGV4dEl0
ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmls
aXR5OworICAgIAorI2lmIFBMQVRGT1JNKEdUSykKKyAgICAvLyBXZSBuZWVkIHRvIGVtaXQgcmVw
bGFjZWQgZWxlbWVudHMgZm9yIEdUSywgYW5kIHByZXNlbnQKKyAgICAvLyB0aGVtIHdpdGggdGhl
ICdvYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyJyAoMHhGRkZDKS4KKyAgICBiZWhhdmlvciA9
IHN0YXRpY19jYXN0PFRleHRJdGVyYXRvckJlaGF2aW9yPihiZWhhdmlvciB8IFRleHRJdGVyYXRv
ckVtaXRzT2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJzKTsKKyNlbmRpZgorICAgIAorICAgIHJl
dHVybiBiZWhhdmlvcjsKK30KKyAgICAKIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OmJ1dHRvblJvbGVUeXBlKCkgY29uc3QKIHsKICAgICAvLyBJZiBhcmlhLXByZXNzZWQg
aXMgcHJlc2VudCwgdGhlbiBpdCBzaG91bGQgYmUgZXhwb3NlZCBhcyBhIHRvZ2dsZSBidXR0b24u
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHAJKHJldmlzaW9uIDEzMTIyNykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNiw4ICszMTYsMTQgQEAKICAgICBp
ZiAobm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGdldE9yQ3JlYXRlKG5vZGUtPnJl
bmRlcmVyKCkpOwogCisgICAgaWYgKCFub2RlLT5wYXJlbnRFbGVtZW50KCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIAogICAgIC8vIEl0J3Mgb25seSBhbGxvd2VkIHRvIGNyZWF0ZSBhbiBBY2Nl
c3NpYmlsaXR5T2JqZWN0IGZyb20gYSBOb2RlIGlmIGl0J3MgaW4gYSBjYW52YXMgc3VidHJlZS4K
LSAgICBpZiAoIW5vZGUtPnBhcmVudEVsZW1lbnQoKSB8fCAhbm9kZS0+cGFyZW50RWxlbWVudCgp
LT5pc0luQ2FudmFzU3VidHJlZSgpKQorICAgIC8vIE9yIGlmIGl0J3MgYSBoaWRkZW4gZWxlbWVu
dCwgYnV0IHdlIHN0aWxsIHdhbnQgdG8gZXhwb3NlIGl0IGJlY2F1c2Ugb2Ygb3RoZXIgQVJJQSBh
dHRyaWJ1dGVzLgorICAgIGJvb2wgaW5DYW52YXNTdWJ0cmVlID0gbm9kZS0+cGFyZW50RWxlbWVu
dCgpLT5pc0luQ2FudmFzU3VidHJlZSgpOworICAgIGJvb2wgaXNIaWRkZW4gPSAhbm9kZS0+cmVu
ZGVyZXIoKSAmJiBpc05vZGVBUklBSGlkZGVuRmFsc2Uobm9kZSk7CisgICAgaWYgKCFpbkNhbnZh
c1N1YnRyZWUgJiYgIWlzSGlkZGVuKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFJlZlB0cjxB
Y2Nlc3NpYmlsaXR5T2JqZWN0PiBuZXdPYmogPSBjcmVhdGVGcm9tTm9kZShub2RlKTsKQEAgLTc4
Myw2ICs3ODksMTcgQEAKICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iamVjdCA9
IGdldE9yQ3JlYXRlKGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpKTsKICAgICByZXR1cm4gYXhPYmpl
Y3QgJiYgYXhPYmplY3QtPmlzVGV4dENvbnRyb2woKTsKIH0KKyAgICAKK2Jvb2wgaXNOb2RlQVJJ
QUhpZGRlbkZhbHNlKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UodG9FbGVt
ZW50KG5vZGUpLT5nZXRBdHRyaWJ1dGUoYXJpYV9oaWRkZW5BdHRyKSwgImZhbHNlIik7Cit9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9u
IDEzMTIyNykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNiArMjIxLDI2IEBACiB7CiAgICAg
cmV0dXJuIGJvdW5kaW5nQm94UmVjdCgpOwogfQorICAgIAorTGF5b3V0UmVjdCBBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6Ym91bmRpbmdCb3hSZWN0KCkgY29uc3QKK3sKKyAgICAvLyBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdHMgaGF2ZSBubyBtZWNoYW5pc20geWV0IHRvIHJldHVybiBhIHNpemUg
b3IgcG9zaXRpb24uCisgICAgLy8gRm9yIG5vdywgbGV0J3MgcmV0dXJuIHRoZSBwb3NpdGlvbiBv
ZiB0aGUgYW5jZXN0b3IgdGhhdCBkb2VzIGhhdmUgYSBwb3NpdGlvbiwKKyAgICAvLyBhbmQgbWFr
ZSBpdCB0aGUgd2lkdGggb2YgdGhhdCBwYXJlbnQsIGFuZCBhYm91dCB0aGUgaGVpZ2h0IG9mIGEg
bGluZSBvZiB0ZXh0LCBzbyB0aGF0IGl0J3MgY2xlYXIgdGhlIG9iamVjdCBpcyBhIGNoaWxkIG9m
IHRoZSBwYXJlbnQuCisgICAgCisgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveDsKKyAgICAKKyAg
ICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBvc2l0aW9uUHJvdmlkZXIgPSBwYXJlbnRPYmpl
Y3QoKTsgcG9zaXRpb25Qcm92aWRlcjsgcG9zaXRpb25Qcm92aWRlciA9IHBvc2l0aW9uUHJvdmlk
ZXItPnBhcmVudE9iamVjdCgpKSB7CisgICAgICAgIGlmIChwb3NpdGlvblByb3ZpZGVyLT5pc0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkgeworICAgICAgICAgICAgTGF5b3V0UmVjdCBwYXJl
bnRSZWN0ID0gcG9zaXRpb25Qcm92aWRlci0+ZWxlbWVudFJlY3QoKTsKKyAgICAgICAgICAgIGJv
dW5kaW5nQm94LnNldFNpemUoTGF5b3V0U2l6ZShwYXJlbnRSZWN0LndpZHRoKCksIEZyYWN0aW9u
YWxMYXlvdXRVbml0KG1pbigxMC4wLCBwYXJlbnRSZWN0LmhlaWdodCgpLnRvRmxvYXQoKSkpKSk7
CisgICAgICAgICAgICBib3VuZGluZ0JveC5zZXRMb2NhdGlvbihwYXJlbnRSZWN0LmxvY2F0aW9u
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0
dXJuIGJvdW5kaW5nQm94OworfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpzZXRO
b2RlKE5vZGUqIG5vZGUpCiB7CkBAIC0yODMsNiArMzAzLDMyIEBACiAgICAgcmV0dXJuIFVua25v
d25Sb2xlOwogfQogCit2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjppbnNlcnRDaGlsZChB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBjaGlsZCwgdW5zaWduZWQgaW5kZXgpCit7CisgICAgaWYgKCFj
aGlsZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIElmIHRoZSBwYXJlbnQgaXMgYXNr
aW5nIGZvciB0aGlzIGNoaWxkJ3MgY2hpbGRyZW4sIHRoZW4gZWl0aGVyIGl0J3MgdGhlIGZpcnN0
IHRpbWUgKGFuZCBjbGVhcmluZyBpcyBhIG5vLW9wKSwKKyAgICAvLyBvciBpdHMgdmlzaWJpbGl0
eSBoYXMgY2hhbmdlZC4gSW4gdGhlIGxhdHRlciBjYXNlLCB0aGlzIGNoaWxkIG1heSBoYXZlIGEg
c3RhbGUgY2hpbGQgY2FjaGVkLgorICAgIC8vIFRoaXMgY2FuIHByZXZlbnQgYXJpYS1oaWRkZW4g
Y2hhbmdlcyBmcm9tIHdvcmtpbmcgY29ycmVjdGx5LiBIZW5jZSwgd2hlbmV2ZXIgYSBwYXJlbnQg
aXMgZ2V0dGluZyBjaGlsZHJlbiwgZW5zdXJlIGRhdGEgaXMgbm90IHN0YWxlLgorICAgIGNoaWxk
LT5jbGVhckNoaWxkcmVuKCk7CisgICAgCisgICAgaWYgKGNoaWxkLT5hY2Nlc3NpYmlsaXR5SXNJ
Z25vcmVkKCkpIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVu
ID0gY2hpbGQtPmNoaWxkcmVuKCk7CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBjaGlsZHJlbi5z
aXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAg
ICAgICAgICBtX2NoaWxkcmVuLmluc2VydChpbmRleCArIGksIGNoaWxkcmVuW2ldKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBBU1NFUlQoY2hpbGQtPnBhcmVudE9iamVjdCgpID09IHRoaXMpOwor
ICAgICAgICBtX2NoaWxkcmVuLmluc2VydChpbmRleCwgY2hpbGQpOworICAgIH0KK30KKwordm9p
ZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWRkQ2hpbGQoQWNjZXNzaWJpbGl0eU9iamVjdCog
Y2hpbGQpCit7CisgICAgaW5zZXJ0Q2hpbGQoY2hpbGQsIG1fY2hpbGRyZW4uc2l6ZSgpKTsKK30K
Kwogdm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWRkQ2hpbGRyZW4oKQogewogICAgIC8v
IElmIHRoZSBuZWVkIHRvIGFkZCBtb3JlIGNoaWxkcmVuIGluIGFkZGl0aW9uIHRvIGV4aXN0aW5n
IGNoaWxkcmVuIGFyaXNlcywgCkBAIC0yOTgsMTkgKzM0NCw4IEBACiAgICAgaWYgKHJlbmRlcmVy
KCkgJiYgIW1fbm9kZS0+aGFzVGFnTmFtZShjYW52YXNUYWcpKQogICAgICAgICByZXR1cm47CiAg
ICAgCi0gICAgZm9yIChOb2RlKiBjaGlsZCA9IG1fbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBSZWZQdHI8QWNjZXNzaWJp
bGl0eU9iamVjdD4gb2JqID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShjaGlsZCk7Ci0g
ICAgICAgIG9iai0+Y2xlYXJDaGlsZHJlbigpOwotICAgICAgICBpZiAob2JqLT5hY2Nlc3NpYmls
aXR5SXNJZ25vcmVkKCkpIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciBjaGlsZHJlbiA9IG9iai0+Y2hpbGRyZW4oKTsKLSAgICAgICAgICAgIHNpemVfdCBsZW5ndGgg
PSBjaGlsZHJlbi5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKQotICAgICAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGNoaWxkcmVuW2ld
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChvYmotPnBhcmVudE9iamVj
dCgpID09IHRoaXMpOwotICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQob2JqKTsKLSAgICAg
ICAgfQotICAgIH0KKyAgICBmb3IgKE5vZGUqIGNoaWxkID0gbV9ub2RlLT5maXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICBhZGRDaGlsZChh
eE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGNoaWxkKSk7CiB9CiAKIGJvb2wgQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmNhbkhhdmVDaGlsZHJlbigpIGNvbnN0CkBAIC0xMTg2LDcgKzEyMjEs
OSBAQAogICAgIC8vIElmIHRoaXMgY291bGQgYmUgZml4ZWQsIGl0J2QgYmUgbW9yZSBhY2N1cmF0
ZSB1c2UgVGV4dEl0ZXJhdG9yIGhlcmUuCiAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkK
ICAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKS0+aW5uZXJUZXh0KCk7Ci0KKyAgICBlbHNl
IGlmIChub2RlLT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybiB0b1RleHQobm9kZSktPndo
b2xlVGV4dCgpOworICAgIAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlk
LmNwcAkocmV2aXNpb24gMTMxMjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBA
CiAgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7CiB9CiAKLWJvb2wgQWNjZXNzaWJpbGl0eUFSSUFH
cmlkOjphZGRDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjaGlsZCwgSGFzaFNldDxBY2Nlc3Np
YmlsaXR5T2JqZWN0Kj4mIGFwcGVuZGVkUm93cywgdW5zaWduZWQmIGNvbHVtbkNvdW50KQorYm9v
bCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OmFkZFRhYmxlQ2VsbENoaWxkKEFjY2Vzc2liaWxpdHlP
YmplY3QqIGNoaWxkLCBIYXNoU2V0PEFjY2Vzc2liaWxpdHlPYmplY3QqPiYgYXBwZW5kZWRSb3dz
LCB1bnNpZ25lZCYgY29sdW1uQ291bnQpCiB7CiAgICAgaWYgKCFjaGlsZCB8fCAhY2hpbGQtPmlz
VGFibGVSb3coKSB8fCBjaGlsZC0+YXJpYVJvbGVBdHRyaWJ1dGUoKSAhPSBSb3dSb2xlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICB1bnNpZ25lZCBjb2x1
bW5Db3VudCA9IDA7CiAgICAgZm9yIChSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gY2hpbGQg
PSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAK
LSAgICAgICAgaWYgKCFhZGRDaGlsZChjaGlsZC5nZXQoKSwgYXBwZW5kZWRSb3dzLCBjb2x1bW5D
b3VudCkpIHsKKyAgICAgICAgaWYgKCFhZGRUYWJsZUNlbGxDaGlsZChjaGlsZC5nZXQoKSwgYXBw
ZW5kZWRSb3dzLCBjb2x1bW5Db3VudCkpIHsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8g
aW4gY2FzZSB0aGUgcmVuZGVyIHRyZWUgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQgQVJJQSBo
aWVyYXJjaHksIGxvb2sgYXQgdGhlIGNoaWxkcmVuCiAgICAgICAgICAgICBpZiAoIWNoaWxkLT5o
YXNDaGlsZHJlbigpKQpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgICAgICBBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBjaGlsZC0+Y2hpbGRyZW4oKTsKICAgICAgICAg
ICAgIHNpemVfdCBsZW5ndGggPSBjaGlsZHJlbi5zaXplKCk7CiAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIGFkZENoaWxkKGNo
aWxkcmVuW2ldLmdldCgpLCBhcHBlbmRlZFJvd3MsIGNvbHVtbkNvdW50KTsKKyAgICAgICAgICAg
ICAgICBhZGRUYWJsZUNlbGxDaGlsZChjaGlsZHJlbltpXS5nZXQoKSwgYXBwZW5kZWRSb3dzLCBj
b2x1bW5Db3VudCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168494</attachid>
            <date>2012-10-12 15:16:39 -0700</date>
            <delta_ts>2012-10-12 15:18:51 -0700</delta_ts>
            <desc>patch </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>25578</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9u
cwkocmV2aXNpb24gMTMxMjI3KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVz
dEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtMTQyNSw2ICsxNDI1LDcgQEAKIHdlYmtp
dC5vcmcvYi83MzkxMiBhY2Nlc3NpYmlsaXR5L2FyaWEtY2hlY2tib3gtdGV4dC5odG1sIFsgU2tp
cCBdCiAKIHdlYmtpdC5vcmcvYi83MzkxMiBhY2Nlc3NpYmlsaXR5L2FyaWEtY2hlY2tib3gtc2Vu
ZHMtbm90aWZpY2F0aW9uLmh0bWwgWyBGYWlsdXJlIFBhc3MgXQord2Via2l0Lm9yZy9iLzk4Nzg3
IGFjY2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5Lmh0bWwgWyBT
a2lwIF0KIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogIyBUZXN0IGZhaWx1cmVzIHdpdGggU2tpYSBHUFUgcmVuZGVy
aW5nIG9mIGNhbnZhcyAyRApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2li
aWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5LWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWhp
ZGRlbi1uZWdhdGVzLW5vLXZpc2liaWxpdHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRl
cy1uby12aXNpYmlsaXR5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBA
QAoraGVhZGluZzEuMgorCisKKworVGhpcyB0ZXN0cyBlbnN1cmVzIHRoYXQgYXJpYS1oaWRkZW49
ZmFsc2Ugd2lsbCBhbGxvdyBhIG5vZGUgdG8gYmUgaW4gdGhlIEFYIGhpZXJhcmNoeSBldmVuIGlm
IGl0cyBub3QgcmVuZGVyZWQgb3IgdmlzaWJsZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyAhaGVhZGluZzFfMSB8fCAhaGVhZGluZzFfMS5pc1ZhbGlkIGlzIHRydWUKK1BB
U1MgIWhlYWRpbmcxXzIgfHwgIWhlYWRpbmcxXzMuaXNWYWxpZCBpcyB0cnVlCitQQVNTICFoZWFk
aW5nMV8zIHx8ICFoZWFkaW5nMV8zLmlzVmFsaWQgaXMgdHJ1ZQorUEFTUyBoZWFkaW5nMi5yb2xl
IGlzICdBWFJvbGU6IEFYSGVhZGluZycKK1BBU1MgcGFyZW50LmNoaWxkQXRJbmRleCgwKS5pc0Vx
dWFsKGhlYWRpbmcyKSBpcyB0cnVlCitQQVNTIGhlYWRpbmczLnJvbGUgaXMgJ0FYUm9sZTogQVhI
ZWFkaW5nJworUEFTUyBwYXJlbnQuY2hpbGRBdEluZGV4KDEpLmlzRXF1YWwoaGVhZGluZzMpIGlz
IHRydWUKK1BBU1MgaGVhZGluZzQucm9sZSBpcyAnQVhSb2xlOiBBWEhlYWRpbmcnCitQQVNTIHBh
cmVudC5jaGlsZEF0SW5kZXgoMikuaXNFcXVhbChoZWFkaW5nNCkgaXMgdHJ1ZQorVGV4dGZpZWxk
IFRpdGxlOiBBWFRpdGxlOiAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtaGlkZGVu
LW5lZ2F0ZXMtbm8tdmlzaWJpbGl0eS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5Lmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtaGlkZGVuLW5lZ2F0ZXMt
bm8tdmlzaWJpbGl0eS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYzIEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5IGlkPSJib2R5Ij4KKworPGgxIGhpZGRlbiBpZD0iaGVhZGluZzFf
MSI+aGVhZGluZzEuMTwvaDE+Cis8aDEgYXJpYS1oaWRkZW49InRydWUiIGlkPSJoZWFkaW5nMV8y
Ij5oZWFkaW5nMS4yPC9oMT4KKzxoMSBoaWRkZW4gYXJpYS1oaWRkZW49InRydWUiIGlkPSJoZWFk
aW5nMV8zIj5oZWFkaW5nMS4zPC9oMT4KKworPGgxIGhpZGRlbiBhcmlhLWhpZGRlbj0iZmFsc2Ui
IGlkPSJoZWFkaW5nMiI+aGVhZGluZzI8L2gxPgorPGgxIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBh
cmlhLWhpZGRlbj0iZmFsc2UiIGlkPSJoZWFkaW5nMyI+aGVhZGluZzM8L2gxPgorPGgxIHN0eWxl
PSJ2aXNpYmlsaXR5OmhpZGRlbjsiIGFyaWEtaGlkZGVuPSJmYWxzZSIgaWQ9ImhlYWRpbmc0Ij5o
ZWFkaW5nNDwvaDE+CisKKzxkaXYgaGlkZGVuIGFyaWEtaGlkZGVuPSJmYWxzZSIgaWQ9ImhpZGRl
bkRpdiI+SGlkZGVuVGV4dDE8L2Rpdj4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBhcmlhLWxhYmVsbGVk
Ynk9ImhpZGRlbkRpdiIgaWQ9InRleHRGaWVsZFdpdGhIaWRkZW5MYWJlbGxlciI+CisKKzxwIGlk
PSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+
CisKKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyBlbnN1cmVzIHRoYXQgYXJpYS1oaWRkZW49
ZmFsc2Ugd2lsbCBhbGxvdyBhIG5vZGUgdG8gYmUgaW4gdGhlIEFYIGhpZXJhcmNoeSBldmVuIGlm
IGl0cyBub3QgcmVuZGVyZWQgb3IgdmlzaWJsZSIpOworCisgICAgaWYgKHdpbmRvdy5hY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcikgeworCisgICAgICAgIC8vIEZpcnN0IGdyb3VwcyBvZiBoZWFkaW5n
cyBhcmUgYWN0dWFsbHkgaGlkZGUubgorICAgICAgICB2YXIgaGVhZGluZzFfMSA9IGFjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiaGVhZGluZzFfMSIpOworICAg
ICAgICBzaG91bGRCZVRydWUoIiFoZWFkaW5nMV8xIHx8ICFoZWFkaW5nMV8xLmlzVmFsaWQiKTsK
KworICAgICAgICB2YXIgaGVhZGluZzFfMiA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vz
c2libGVFbGVtZW50QnlJZCgiaGVhZGluZzFfMiIpOworICAgICAgICBzaG91bGRCZVRydWUoIiFo
ZWFkaW5nMV8yIHx8ICFoZWFkaW5nMV8zLmlzVmFsaWQiKTsKKworICAgICAgICB2YXIgaGVhZGlu
ZzFfMyA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiaGVh
ZGluZzFfMyIpOworICAgICAgICBzaG91bGRCZVRydWUoIiFoZWFkaW5nMV8zIHx8ICFoZWFkaW5n
MV8zLmlzVmFsaWQiKTsKKworICAgICAgICAvLyBUaGVzZSBoZWFkaW5ncyBzaG91bGQgYmUgaW4g
QVggdHJlZSBkZXNwaXRlIGJlaW5nIGhpZGRlbi4KKyAgICAgICAgdmFyIGhlYWRpbmcyID0gYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJoZWFkaW5nMiIpOwor
ICAgICAgICBzaG91bGRCZSgiaGVhZGluZzIucm9sZSIsICInQVhSb2xlOiBBWEhlYWRpbmcnIik7
CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgb3JkZXIgb2YgdGhlc2UgZWxlbWVudHMgaXMg
Y29ycmVjdCBiYXNlZCBvbiBET00gb3JkZXIuCisgICAgICAgIHZhciBwYXJlbnQgPSBoZWFkaW5n
Mi5wYXJlbnRFbGVtZW50KCk7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgicGFyZW50LmNoaWxkQXRJ
bmRleCgwKS5pc0VxdWFsKGhlYWRpbmcyKSIpOworCisgICAgICAgIHZhciBoZWFkaW5nMyA9IGFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiaGVhZGluZzMiKTsK
KyAgICAgICAgc2hvdWxkQmUoImhlYWRpbmczLnJvbGUiLCAiJ0FYUm9sZTogQVhIZWFkaW5nJyIp
OworICAgICAgICBzaG91bGRCZVRydWUoInBhcmVudC5jaGlsZEF0SW5kZXgoMSkuaXNFcXVhbCho
ZWFkaW5nMykiKTsKKworICAgICAgICB2YXIgaGVhZGluZzQgPSBhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImhlYWRpbmc0Iik7CisgICAgICAgIHNob3VsZEJl
KCJoZWFkaW5nNC5yb2xlIiwgIidBWFJvbGU6IEFYSGVhZGluZyciKTsKKyAgICAgICAgc2hvdWxk
QmVUcnVlKCJwYXJlbnQuY2hpbGRBdEluZGV4KDIpLmlzRXF1YWwoaGVhZGluZzQpIik7CisKKyAg
ICAgICAgLy8gVGhlIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGUgc2hvdWxkIHdvcmsgZXZlbiB0
aG91Z2ggaGlkZGVuLgorICAgICAgICB2YXIgdGV4dEZpZWxkID0gYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0RmllbGRXaXRoSGlkZGVuTGFiZWxsZXIi
KTsKKyAgICAgICAgZGVidWcoIlRleHRmaWVsZCBUaXRsZTogIiArIHRleHRGaWVsZC50aXRsZSk7
CisgICAgfQorCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxMzEyMjcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMyBAQAorMjAxMi0xMC0xMCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hA
YXBwbGUuY29tPgorCisgICAgICAgIEFYOiBhcmlhLWhpZGRlbj1mYWxzZSBkb2VzIG5vdCB3b3Jr
IGFzIGV4cGVjdGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05ODc4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9hcmlhLWhpZGRlbi1uZWdhdGVzLW5vLXZpc2liaWxpdHkuaHRt
bDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1oaWRk
ZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisKIDIwMTItMTAt
MTIgIEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQgY2hyb21pdW0gd2luZG93cyByZWJhc2VsaW5lIGZvciByMTMxMjAyLgpAQCAtODQ2LDcgKzg1
Niw3IEBACiAgICAgICAgICogcGxhdGZvcm0vYmxhY2tiZXJyeS9odHRwL3Rlc3RzL3dlYnNvY2tl
dC90ZXN0cy9lbmFibGUtZGlzYWJsZS1zZXR0aW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCiAgICAg
ICAgICogcGxhdGZvcm0vYmxhY2tiZXJyeS9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9lbmFi
bGUtZGlzYWJsZS1zZXR0aW5nLmh0bWw6IEFkZGVkLgogCi0yMDEyLTEwLTExICBFbWlsIEEgRWts
dW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKzIwMTItMTAtMTEgRW1pbCBBIEVrbHVuZCA8ZWFlQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBbU3ViIHBpeGVsIGxheW91dF0gQ2hhbmdlIFJlbmRlckJv
eCB0byBub3Qgcm91bmQgbG9naWNhbFRvcC9MZWZ0IGZvciBSZW5kZXJSZXBsYWNlZAogICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkxMDgKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDEzMTIyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTEwLTEwICBDaHJpcyBGbGVpemFjaCAg
PGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IGFyaWEtaGlkZGVuPWZhbHNlIGRv
ZXMgbm90IHdvcmsgYXMgZXhwZWN0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTk4Nzg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQVJJQSByZXF1aXJlcyB0aGF0IGFyaWEtaGlkZGVuPWZhbHNlIG92ZXJy
aWRlIGFuIGVsZW1lbnQncyBuYXRpdmUgdmlzaWJpbGl0eSBhbmQgaW5jbHVkZSB0aGF0CisgICAg
ICAgIG5vZGUgaW4gdGhlIEFYIGhpZXJhcmNoeS4KKyAKKyAgICAgICAgVG8gYWNjb21wbGlzaCB0
aGlzIHdlIGhhdmUgdG8gYWxsb3cgaW52aXNpYmxlIGl0ZW1zIHRvIGJlIGluY2x1ZGVkLCBhcyB3
ZWxsIGFzIGl0ZW1zIHRoYXQKKyAgICAgICAgaGF2ZSBubyByZW5kZXJlcnMgYXNzb2NpYXRlZCB3
aXRoIHRoZW0uCisKKyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0eS9hcmlhLWhpZGRlbi1uZWdh
dGVzLW5vLXZpc2liaWxpdHkuaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRl
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OmFkZFRhYmxlQ2VsbENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZDo6YWRkQ2hpbGRyZW4p
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmg6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5QVJJQUdyaWQpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Ym91bmRpbmdCb3hSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjppbnNlcnRDaGlsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWRkQ2hpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFkZENoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0ZXh0VW5kZXJFbGVtZW50KToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Lmg6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6OnRleHRJdGVyYXRvckJlaGF2aW9yRm9yVGV4dFJhbmdlKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0OjphZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjppbnNlcnRDaGlsZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZEJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkSGlkZGVuQ2hp
bGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRk
Q2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5oOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCk6CisKIDIwMTItMTAt
MTIgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzEyMjQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkocmV2aXNpb24gMTMx
MjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGbG9hdFF1YWQu
aCIKICNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkxheW91dFR5
cGVzLmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0
aW9uLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CkBAIC01MjMsNiArNTI0LDcgQEAKICAgICB2aXJ0dWFsIEludFBvaW50IGNsaWNrUG9p
bnQoKTsKICAgICBzdGF0aWMgSW50UmVjdCBib3VuZGluZ0JveEZvclF1YWRzKFJlbmRlck9iamVj
dCosIGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+Jik7CiAgICAgCisgICAgVGV4dEl0ZXJhdG9yQmVo
YXZpb3IgdGV4dEl0ZXJhdG9yQmVoYXZpb3JGb3JUZXh0UmFuZ2UoKSBjb25zdDsKICAgICB2aXJ0
dWFsIFBsYWluVGV4dFJhbmdlIHNlbGVjdGVkVGV4dFJhbmdlKCkgY29uc3QgeyByZXR1cm4gUGxh
aW5UZXh0UmFuZ2UoKTsgfQogICAgIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0KCkgY29uc3QgeyBy
ZXR1cm4gc2VsZWN0ZWRUZXh0UmFuZ2UoKS5zdGFydDsgfQogICAgIHVuc2lnbmVkIHNlbGVjdGlv
bkVuZCgpIGNvbnN0IHsgcmV0dXJuIHNlbGVjdGVkVGV4dFJhbmdlKCkubGVuZ3RoOyB9CkBAIC01
NjksNiArNTcxLDkgQEAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQWNjZXNzaWJpbGl0eVJvbGUo
KSB7IH0KICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuKCk7
CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkcmVuKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGFk
ZENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0
Q2hpbGQoQWNjZXNzaWJpbGl0eU9iamVjdCosIHVuc2lnbmVkKSB7IH0KKyAgICAKICAgICB2aXJ0
dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBoYXNDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1faGF2ZUNoaWxkcmVuOyB9
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5oCShyZXZpc2lvbiAxMzEyMjcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ4
LDYgKzI0OCw3IEBACiAgICAgYm9vbCBpc0Rlc2NlbmRhbnRPZkVsZW1lbnRUeXBlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUpIGNvbnN0OwogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlm
IGl0J3MgZm9jdXNhYmxlIGJ1dCBpdCdzIG5vdCBjb250ZW50IGVkaXRhYmxlIGFuZCBpdCdzIG5v
dCBhIGNvbnRyb2wgb3IgQVJJQSBjb250cm9sLgogCisgICAgdm9pZCBhZGRIaWRkZW5DaGlsZHJl
bigpOwogICAgIHZvaWQgYWRkVGV4dEZpZWxkQ2hpbGRyZW4oKTsKICAgICB2b2lkIGFkZEltYWdl
TWFwQ2hpbGRyZW4oKTsKICAgICB2b2lkIGFkZENhbnZhc0NoaWxkcmVuKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAkocmV2aXNpb24gMTMx
MjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwOCw3ICsyMDgsOCBAQAogfTsKIAogYm9vbCBub2RlSGFzUm9sZShO
b2RlKiwgY29uc3QgU3RyaW5nJiByb2xlKTsKLQorYm9vbCBpc05vZGVBUklBSGlkZGVuRmFsc2Uo
Tm9kZSopOworICAgIAogI2lmICFIQVZFKEFDQ0VTU0lCSUxJVFkpCiBpbmxpbmUgQVhPYmplY3RD
YWNoZTo6QVhPYmplY3RDYWNoZShjb25zdCBEb2N1bWVudCogZG9jKSA6IG1fZG9jdW1lbnQoY29u
c3RfY2FzdDxEb2N1bWVudCo+KGRvYykpLCBtX25vdGlmaWNhdGlvblBvc3RUaW1lcih0aGlzLCAw
KSB7IH0KIGlubGluZSBBWE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSgpIHsgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3QuaAkocmV2aXNpb24gMTMxMjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNiAr
MTU4LDkgQEAKIAogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVJvbGUgZGV0ZXJtaW5lQWNjZXNz
aWJpbGl0eVJvbGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRyZW4oKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRkQ2hpbGQoQWNjZXNzaWJpbGl0eU9iamVjdCopOworICAgIHZpcnR1YWwgdm9p
ZCBpbnNlcnRDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgdW5zaWduZWQgaW5kZXgpOworCiAg
ICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3Q7CiAgICAgQWNjZXNzaWJpbGl0eVJvbGUg
YXJpYVJvbGVBdHRyaWJ1dGUoKSBjb25zdDsKQEAgLTE3NCw2ICsxNzcsNyBAQAogICAgIHZvaWQg
YXJpYUxhYmVsZWRCeUVsZW1lbnRzKFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRzKSBjb25zdDsK
ICAgICBTdHJpbmcgYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uRm9yRWxlbWVudHMoVmVjdG9yPEVs
ZW1lbnQqPiAmZWxlbWVudHMpIGNvbnN0OwogICAgIHZvaWQgZWxlbWVudHNGcm9tQXR0cmlidXRl
KFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRzLCBjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7
CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGJvdW5kaW5nQm94UmVjdCgpIGNvbnN0OwogCiAgICAg
RWxlbWVudCogbWVudUVsZW1lbnRGb3JNZW51QnV0dG9uKCkgY29uc3Q7CiAgICAgRWxlbWVudCog
bWVudUl0ZW1FbGVtZW50Rm9yTWVudSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5oCShyZXZpc2lvbiAx
MzEyMjcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklB
R3JpZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBACiAgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzU2VsZWN0ZWRSb3dzKCkgeyByZXR1cm4gdHJ1ZTsgfSAgICAKICAgICB2aXJ0dWFs
IGJvb2wgaXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgCi0g
ICAgYm9vbCBhZGRDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgSGFzaFNldDxBY2Nlc3NpYmls
aXR5T2JqZWN0Kj4mIGFwcGVuZGVkUm93cywgdW5zaWduZWQmIGNvbHVtbkNvdW50KTsKKyAgICBi
b29sIGFkZFRhYmxlQ2VsbENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBIYXNoU2V0PEFjY2Vz
c2liaWxpdHlPYmplY3QqPiYgYXBwZW5kZWRSb3dzLCB1bnNpZ25lZCYgY29sdW1uQ291bnQpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAko
cmV2aXNpb24gMTMxMjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNiBAQAog
I2luY2x1ZGUgIlJlbmRlcmVkUG9zaXRpb24uaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVk
ZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCi0jaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCiAj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtNTk5LDE5ICs1OTgsNiBAQAogICAgIHJl
dHVybiBTdHJpbmcoKTsKIH0KIAotc3RhdGljIFRleHRJdGVyYXRvckJlaGF2aW9yIHRleHRJdGVy
YXRvckJlaGF2aW9yRm9yVGV4dFJhbmdlKCkKLXsKLSAgICBUZXh0SXRlcmF0b3JCZWhhdmlvciBi
ZWhhdmlvciA9IFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHk7Ci0KLSNpZiBQTEFU
Rk9STShHVEspCi0gICAgLy8gV2UgbmVlZCB0byBlbWl0IHJlcGxhY2VkIGVsZW1lbnRzIGZvciBH
VEssIGFuZCBwcmVzZW50Ci0gICAgLy8gdGhlbSB3aXRoIHRoZSAnb2JqZWN0IHJlcGxhY2VtZW50
IGNoYXJhY3RlcicgKDB4RkZGQykuCi0gICAgYmVoYXZpb3IgPSBzdGF0aWNfY2FzdDxUZXh0SXRl
cmF0b3JCZWhhdmlvcj4oYmVoYXZpb3IgfCBUZXh0SXRlcmF0b3JFbWl0c09iamVjdFJlcGxhY2Vt
ZW50Q2hhcmFjdGVycyk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBiZWhhdmlvcjsKLX0KLQogU3Ry
aW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQoKSBjb25zdAog
ewogICAgIGlmICghbV9yZW5kZXJlcikKQEAgLTExMDIsOSArMTA4OCwxNyBAQAogICAgIC8vIFRo
ZSBmb2xsb3dpbmcgY2FzZXMgY2FuIGFwcGx5IHRvIGFueSBlbGVtZW50IHRoYXQncyBhIHN1YmNs
YXNzIG9mIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuCiAgICAgCiAgICAgLy8gSWdub3JlIGlu
dmlzaWJsZSBlbGVtZW50cy4KLSAgICBpZiAoIW1fcmVuZGVyZXIgfHwgbV9yZW5kZXJlci0+c3R5
bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCisgICAgaWYgKCFtX3JlbmRlcmVyKQogICAg
ICAgICByZXR1cm4gSWdub3JlT2JqZWN0OwogCisgICAgaWYgKG1fcmVuZGVyZXItPnN0eWxlKCkt
PnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKSB7CisgICAgICAgIC8vIGFyaWEtaGlkZGVuIGlzIG1l
YW50IHRvIG92ZXJyaWRlIHZpc2liaWxpdHkgYXMgdGhlIGRldGVybWluYW50IGluIEFYIGhpZXJh
cmNoeSBpbmNsdXNpb24uCisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShnZXRBdHRyaWJ1
dGUoYXJpYV9oaWRkZW5BdHRyKSwgImZhbHNlIikpCisgICAgICAgICAgICByZXR1cm4gRGVmYXVs
dEJlaGF2aW9yOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIElnbm9yZU9iamVjdDsKKyAgICB9
CisgICAgCiAgICAgLy8gQW55dGhpbmcgbWFya2VkIGFzIGFyaWEtaGlkZGVuIG9yIGEgY2hpbGQg
b2Ygc29tZXRoaW5nIGFyaWEtaGlkZGVuIG11c3QgYmUgaGlkZGVuLgogICAgIGlmIChhcmlhSXNI
aWRkZW4oKSkKICAgICAgICAgcmV0dXJuIElnbm9yZU9iamVjdDsKQEAgLTI3MTcsNiArMjcxMSw1
OCBAQAogfQogI2VuZGlmCiAKKy8vIEhpZGRlbiBjaGlsZHJlbiBhcmUgdGhvc2UgdGhhdCBhcmUg
bm90IHJlbmRlcmVkIG9yIHZpc2libGUsIGJ1dCBhcmUgc3BlY2lmaWNhbGx5IG1hcmtlZCBhcyBh
cmlhLWhpZGRlbj1mYWxzZSwKKy8vIG1lYW5pbmcgdGhhdCB0aGV5IHNob3VsZCBiZSBleHBvc2Vk
IHRvIHRoZSBBWCBoaWVyYXJjaHkuCit2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFk
ZEhpZGRlbkNoaWxkcmVuKCkKK3sKKyAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOworICAg
IGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIEZpcnN0IGRvIGEgcXVp
Y2sgcnVuIHRocm91Z2ggdG8gZGV0ZXJtaW5lIGlmIHdlIGhhdmUgYW55IGhpZGRlbiBub2RlcyAo
bW9zdCBvZnRlbiB3ZSB3aWxsIG5vdCksIHNvIHRoYXQuCisgICAgYm9vbCBzaG91bGRJbnNlcnRI
aWRkZW5Ob2RlcyA9IGZhbHNlOworICAgIGZvciAoTm9kZSogY2hpbGQgPSBub2RlLT5maXJzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlm
ICghY2hpbGQtPnJlbmRlcmVyKCkgJiYgaXNOb2RlQVJJQUhpZGRlbkZhbHNlKGNoaWxkKSkgewor
ICAgICAgICAgICAgc2hvdWxkSW5zZXJ0SGlkZGVuTm9kZXMgPSB0cnVlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKCFzaG91bGRJbnNlcnRIaWRk
ZW5Ob2RlcykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIERldGVybWluZSB0aGUgaW5k
ZXggYXQgd2hpY2ggdGhpcyBpdGVtIHNob3VsZCBiZSBpbnNlcnRlZC4gVGhlIGdvYWwgaXMgdG8g
cGxhY2UgaXQgYXMgY2xvc2UgdG8KKyAgICAvLyBET00gb3JkZXJpbmcgYXMgcG9zc2libGUgYnkg
a2VlcGluZyB0cmFjayBvZiB3aGVyZSB0aGUgc2libGluZ3Mgd2hvIGhhZCByZW5kZXJlcnMgd2Vy
ZSBpbnNlcnRlZC4KKyAgICB1bnNpZ25lZCBpbnNlcnRpb25JbmRleCA9IDA7CisgICAgZm9yIChO
b2RlKiBjaGlsZCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5yZW5kZXJlcigpKSB7CisgICAgICAg
ICAgICAvLyBGaW5kIG91dCB3aGVyZSB0aGUgbGFzdCByZW5kZXIgc2libGluZyBpcyBsb2NhdGVk
IHdpdGhpbiBtX2NoaWxkcmVuLgorICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY2hp
bGRSZW5kZXJlciA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0KGNoaWxkLT5yZW5kZXJlcigpKTsKKyAg
ICAgICAgICAgIGlmIChjaGlsZFJlbmRlcmVyICYmIGNoaWxkUmVuZGVyZXItPmFjY2Vzc2liaWxp
dHlJc0lnbm9yZWQoKSkgeworICAgICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciBjaGlsZHJlbiA9IGNoaWxkUmVuZGVyZXItPmNoaWxkcmVuKCk7CisgICAgICAgICAgICAg
ICAgaWYgKGNoaWxkcmVuLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRSZW5kZXJl
ciA9IGNoaWxkcmVuLmxhc3QoKS5nZXQoKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIGNoaWxkUmVuZGVyZXIgPSAwOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoY2hpbGRSZW5kZXJlcikKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25JbmRleCA9
IG1fY2hpbGRyZW4uZmluZChjaGlsZFJlbmRlcmVyKSArIDE7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghaXNOb2RlQVJJQUhpZGRlbkZhbHNlKGNoaWxk
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgcHJl
dmlvdXNTaXplID0gbV9jaGlsZHJlbi5zaXplKCk7CisgICAgICAgIGlmIChpbnNlcnRpb25JbmRl
eCA+IHByZXZpb3VzU2l6ZSkKKyAgICAgICAgICAgIGluc2VydGlvbkluZGV4ID0gcHJldmlvdXNT
aXplOworICAgICAgICAKKyAgICAgICAgaW5zZXJ0Q2hpbGQoYXhPYmplY3RDYWNoZSgpLT5nZXRP
ckNyZWF0ZShjaGlsZCksIGluc2VydGlvbkluZGV4KTsKKyAgICAgICAgaW5zZXJ0aW9uSW5kZXgg
Kz0gKG1fY2hpbGRyZW4uc2l6ZSgpIC0gcHJldmlvdXNTaXplKTsKKyAgICB9Cit9CisgICAgCiB2
b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZENoaWxkcmVuKCkKIHsKICAgICAvLyBJ
ZiB0aGUgbmVlZCB0byBhZGQgbW9yZSBjaGlsZHJlbiBpbiBhZGRpdGlvbiB0byBleGlzdGluZyBj
aGlsZHJlbiBhcmlzZXMsIApAQCAtMjcyOCwyNCArMjc3NCwxMCBAQAogICAgIGlmICghY2FuSGF2
ZUNoaWxkcmVuKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICAvLyBhZGQgYWxsIHVuaWdu
b3JlZCBhY2MgY2hpbGRyZW4KLSAgICBmb3IgKFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBv
YmogPSBmaXJzdENoaWxkKCk7IG9iajsgb2JqID0gb2JqLT5uZXh0U2libGluZygpKSB7Ci0gICAg
ICAgIC8vIElmIHRoZSBwYXJlbnQgaXMgYXNraW5nIGZvciB0aGlzIGNoaWxkJ3MgY2hpbGRyZW4s
IHRoZW4gZWl0aGVyIGl0J3MgdGhlIGZpcnN0IHRpbWUgKGFuZCBjbGVhcmluZyBpcyBhIG5vLW9w
KSwgCi0gICAgICAgIC8vIG9yIGl0cyB2aXNpYmlsaXR5IGhhcyBjaGFuZ2VkLiBJbiB0aGUgbGF0
dGVyIGNhc2UsIHRoaXMgY2hpbGQgbWF5IGhhdmUgYSBzdGFsZSBjaGlsZCBjYWNoZWQuIAotICAg
ICAgICAvLyBUaGlzIGNhbiBwcmV2ZW50IGFyaWEtaGlkZGVuIGNoYW5nZXMgZnJvbSB3b3JraW5n
IGNvcnJlY3RseS4gSGVuY2UsIHdoZW5ldmVyIGEgcGFyZW50IGlzIGdldHRpbmcgY2hpbGRyZW4s
IGVuc3VyZSBkYXRhIGlzIG5vdCBzdGFsZS4KLSAgICAgICAgb2JqLT5jbGVhckNoaWxkcmVuKCk7
Ci0KLSAgICAgICAgaWYgKG9iai0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKSB7Ci0gICAgICAg
ICAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBvYmotPmNoaWxkcmVu
KCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBjaGlsZHJlbi5zaXplKCk7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAg
ICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoY2hpbGRyZW5baV0pOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgQVNTRVJUKG9iai0+cGFyZW50T2JqZWN0KCkgPT0gdGhpcyk7Ci0gICAgICAg
ICAgICBtX2NoaWxkcmVuLmFwcGVuZChvYmopOwotICAgICAgICB9Ci0gICAgfQorICAgIGZvciAo
UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG9iaiA9IGZpcnN0Q2hpbGQoKTsgb2JqOyBvYmog
PSBvYmotPm5leHRTaWJsaW5nKCkpCisgICAgICAgIGFkZENoaWxkKG9iai5nZXQoKSk7CiAgICAg
CisgICAgYWRkSGlkZGVuQ2hpbGRyZW4oKTsKICAgICBhZGRBdHRhY2htZW50Q2hpbGRyZW4oKTsK
ICAgICBhZGRJbWFnZU1hcENoaWxkcmVuKCk7CiAgICAgYWRkVGV4dEZpZWxkQ2hpbGRyZW4oKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMTMxMjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3Niw2
ICsxNzc2LDE5IEBACiAgICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoYXJpYV9wcmVzc2VkQXR0ciku
aXNFbXB0eSgpOwogfQogCitUZXh0SXRlcmF0b3JCZWhhdmlvciBBY2Nlc3NpYmlsaXR5T2JqZWN0
Ojp0ZXh0SXRlcmF0b3JCZWhhdmlvckZvclRleHRSYW5nZSgpIGNvbnN0Cit7CisgICAgVGV4dEl0
ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmls
aXR5OworICAgIAorI2lmIFBMQVRGT1JNKEdUSykKKyAgICAvLyBXZSBuZWVkIHRvIGVtaXQgcmVw
bGFjZWQgZWxlbWVudHMgZm9yIEdUSywgYW5kIHByZXNlbnQKKyAgICAvLyB0aGVtIHdpdGggdGhl
ICdvYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyJyAoMHhGRkZDKS4KKyAgICBiZWhhdmlvciA9
IHN0YXRpY19jYXN0PFRleHRJdGVyYXRvckJlaGF2aW9yPihiZWhhdmlvciB8IFRleHRJdGVyYXRv
ckVtaXRzT2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJzKTsKKyNlbmRpZgorICAgIAorICAgIHJl
dHVybiBiZWhhdmlvcjsKK30KKyAgICAKIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OmJ1dHRvblJvbGVUeXBlKCkgY29uc3QKIHsKICAgICAvLyBJZiBhcmlhLXByZXNzZWQg
aXMgcHJlc2VudCwgdGhlbiBpdCBzaG91bGQgYmUgZXhwb3NlZCBhcyBhIHRvZ2dsZSBidXR0b24u
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHAJKHJldmlzaW9uIDEzMTIyNykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNiw4ICszMTYsMTQgQEAKICAgICBp
ZiAobm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGdldE9yQ3JlYXRlKG5vZGUtPnJl
bmRlcmVyKCkpOwogCisgICAgaWYgKCFub2RlLT5wYXJlbnRFbGVtZW50KCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIAogICAgIC8vIEl0J3Mgb25seSBhbGxvd2VkIHRvIGNyZWF0ZSBhbiBBY2Nl
c3NpYmlsaXR5T2JqZWN0IGZyb20gYSBOb2RlIGlmIGl0J3MgaW4gYSBjYW52YXMgc3VidHJlZS4K
LSAgICBpZiAoIW5vZGUtPnBhcmVudEVsZW1lbnQoKSB8fCAhbm9kZS0+cGFyZW50RWxlbWVudCgp
LT5pc0luQ2FudmFzU3VidHJlZSgpKQorICAgIC8vIE9yIGlmIGl0J3MgYSBoaWRkZW4gZWxlbWVu
dCwgYnV0IHdlIHN0aWxsIHdhbnQgdG8gZXhwb3NlIGl0IGJlY2F1c2Ugb2Ygb3RoZXIgQVJJQSBh
dHRyaWJ1dGVzLgorICAgIGJvb2wgaW5DYW52YXNTdWJ0cmVlID0gbm9kZS0+cGFyZW50RWxlbWVu
dCgpLT5pc0luQ2FudmFzU3VidHJlZSgpOworICAgIGJvb2wgaXNIaWRkZW4gPSAhbm9kZS0+cmVu
ZGVyZXIoKSAmJiBpc05vZGVBUklBSGlkZGVuRmFsc2Uobm9kZSk7CisgICAgaWYgKCFpbkNhbnZh
c1N1YnRyZWUgJiYgIWlzSGlkZGVuKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFJlZlB0cjxB
Y2Nlc3NpYmlsaXR5T2JqZWN0PiBuZXdPYmogPSBjcmVhdGVGcm9tTm9kZShub2RlKTsKQEAgLTc4
Myw2ICs3ODksMTcgQEAKICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iamVjdCA9
IGdldE9yQ3JlYXRlKGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpKTsKICAgICByZXR1cm4gYXhPYmpl
Y3QgJiYgYXhPYmplY3QtPmlzVGV4dENvbnRyb2woKTsKIH0KKyAgICAKK2Jvb2wgaXNOb2RlQVJJ
QUhpZGRlbkZhbHNlKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UodG9FbGVt
ZW50KG5vZGUpLT5nZXRBdHRyaWJ1dGUoYXJpYV9oaWRkZW5BdHRyKSwgImZhbHNlIik7Cit9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9u
IDEzMTIyNykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNiArMjIxLDI2IEBACiB7CiAgICAg
cmV0dXJuIGJvdW5kaW5nQm94UmVjdCgpOwogfQorICAgIAorTGF5b3V0UmVjdCBBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6Ym91bmRpbmdCb3hSZWN0KCkgY29uc3QKK3sKKyAgICAvLyBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdHMgaGF2ZSBubyBtZWNoYW5pc20geWV0IHRvIHJldHVybiBhIHNpemUg
b3IgcG9zaXRpb24uCisgICAgLy8gRm9yIG5vdywgbGV0J3MgcmV0dXJuIHRoZSBwb3NpdGlvbiBv
ZiB0aGUgYW5jZXN0b3IgdGhhdCBkb2VzIGhhdmUgYSBwb3NpdGlvbiwKKyAgICAvLyBhbmQgbWFr
ZSBpdCB0aGUgd2lkdGggb2YgdGhhdCBwYXJlbnQsIGFuZCBhYm91dCB0aGUgaGVpZ2h0IG9mIGEg
bGluZSBvZiB0ZXh0LCBzbyB0aGF0IGl0J3MgY2xlYXIgdGhlIG9iamVjdCBpcyBhIGNoaWxkIG9m
IHRoZSBwYXJlbnQuCisgICAgCisgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveDsKKyAgICAKKyAg
ICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBvc2l0aW9uUHJvdmlkZXIgPSBwYXJlbnRPYmpl
Y3QoKTsgcG9zaXRpb25Qcm92aWRlcjsgcG9zaXRpb25Qcm92aWRlciA9IHBvc2l0aW9uUHJvdmlk
ZXItPnBhcmVudE9iamVjdCgpKSB7CisgICAgICAgIGlmIChwb3NpdGlvblByb3ZpZGVyLT5pc0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkgeworICAgICAgICAgICAgTGF5b3V0UmVjdCBwYXJl
bnRSZWN0ID0gcG9zaXRpb25Qcm92aWRlci0+ZWxlbWVudFJlY3QoKTsKKyAgICAgICAgICAgIGJv
dW5kaW5nQm94LnNldFNpemUoTGF5b3V0U2l6ZShwYXJlbnRSZWN0LndpZHRoKCksIEZyYWN0aW9u
YWxMYXlvdXRVbml0KHN0ZDo6bWluKDEwLjAsIHBhcmVudFJlY3QuaGVpZ2h0KCkudG9GbG9hdCgp
KSkpKTsKKyAgICAgICAgICAgIGJvdW5kaW5nQm94LnNldExvY2F0aW9uKHBhcmVudFJlY3QubG9j
YXRpb24oKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gYm91bmRpbmdCb3g7Cit9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
OnNldE5vZGUoTm9kZSogbm9kZSkKIHsKQEAgLTI4Myw2ICszMDMsMzIgQEAKICAgICByZXR1cm4g
VW5rbm93blJvbGU7CiB9CiAKK3ZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Omluc2VydENo
aWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNoaWxkLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBp
ZiAoIWNoaWxkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gSWYgdGhlIHBhcmVudCBp
cyBhc2tpbmcgZm9yIHRoaXMgY2hpbGQncyBjaGlsZHJlbiwgdGhlbiBlaXRoZXIgaXQncyB0aGUg
Zmlyc3QgdGltZSAoYW5kIGNsZWFyaW5nIGlzIGEgbm8tb3ApLAorICAgIC8vIG9yIGl0cyB2aXNp
YmlsaXR5IGhhcyBjaGFuZ2VkLiBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoaXMgY2hpbGQgbWF5IGhh
dmUgYSBzdGFsZSBjaGlsZCBjYWNoZWQuCisgICAgLy8gVGhpcyBjYW4gcHJldmVudCBhcmlhLWhp
ZGRlbiBjaGFuZ2VzIGZyb20gd29ya2luZyBjb3JyZWN0bHkuIEhlbmNlLCB3aGVuZXZlciBhIHBh
cmVudCBpcyBnZXR0aW5nIGNoaWxkcmVuLCBlbnN1cmUgZGF0YSBpcyBub3Qgc3RhbGUuCisgICAg
Y2hpbGQtPmNsZWFyQ2hpbGRyZW4oKTsKKyAgICAKKyAgICBpZiAoY2hpbGQtPmFjY2Vzc2liaWxp
dHlJc0lnbm9yZWQoKSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hp
bGRyZW4gPSBjaGlsZC0+Y2hpbGRyZW4oKTsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IGNoaWxk
cmVuLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkK
KyAgICAgICAgICAgIG1fY2hpbGRyZW4uaW5zZXJ0KGluZGV4ICsgaSwgY2hpbGRyZW5baV0pOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChjaGlsZC0+cGFyZW50T2JqZWN0KCkgPT0gdGhp
cyk7CisgICAgICAgIG1fY2hpbGRyZW4uaW5zZXJ0KGluZGV4LCBjaGlsZCk7CisgICAgfQorfQor
Cit2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphZGRDaGlsZChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBjaGlsZCkKK3sKKyAgICBpbnNlcnRDaGlsZChjaGlsZCwgbV9jaGlsZHJlbi5zaXplKCkp
OworfQorCiB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphZGRDaGlsZHJlbigpCiB7CiAg
ICAgLy8gSWYgdGhlIG5lZWQgdG8gYWRkIG1vcmUgY2hpbGRyZW4gaW4gYWRkaXRpb24gdG8gZXhp
c3RpbmcgY2hpbGRyZW4gYXJpc2VzLCAKQEAgLTI5OCwxOSArMzQ0LDggQEAKICAgICBpZiAocmVu
ZGVyZXIoKSAmJiAhbV9ub2RlLT5oYXNUYWdOYW1lKGNhbnZhc1RhZykpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBmb3IgKE5vZGUqIGNoaWxkID0gbV9ub2RlLT5maXJzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIFJlZlB0cjxBY2Nl
c3NpYmlsaXR5T2JqZWN0PiBvYmogPSBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGNoaWxk
KTsKLSAgICAgICAgb2JqLT5jbGVhckNoaWxkcmVuKCk7Ci0gICAgICAgIGlmIChvYmotPmFjY2Vz
c2liaWxpdHlJc0lnbm9yZWQoKSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yIGNoaWxkcmVuID0gb2JqLT5jaGlsZHJlbigpOwotICAgICAgICAgICAgc2l6ZV90IGxl
bmd0aCA9IGNoaWxkcmVuLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoY2hpbGRy
ZW5baV0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKG9iai0+cGFyZW50
T2JqZWN0KCkgPT0gdGhpcyk7Ci0gICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChvYmopOwot
ICAgICAgICB9Ci0gICAgfQorICAgIGZvciAoTm9kZSogY2hpbGQgPSBtX25vZGUtPmZpcnN0Q2hp
bGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIGFkZENo
aWxkKGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoY2hpbGQpKTsKIH0KIAogYm9vbCBBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QKQEAgLTExODYsNyAr
MTIyMSw5IEBACiAgICAgLy8gSWYgdGhpcyBjb3VsZCBiZSBmaXhlZCwgaXQnZCBiZSBtb3JlIGFj
Y3VyYXRlIHVzZSBUZXh0SXRlcmF0b3IgaGVyZS4KICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9k
ZSgpKQogICAgICAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpLT5pbm5lclRleHQoKTsKLQorICAg
IGVsc2UgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIHRvVGV4dChub2Rl
KS0+d2hvbGVUZXh0KCk7CisgICAgCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJ
QUdyaWQuY3BwCShyZXZpc2lvbiAxMzEyMjcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2
LDcgQEAKICAgICByZXR1cm4gYWRvcHRSZWYob2JqKTsKIH0KIAotYm9vbCBBY2Nlc3NpYmlsaXR5
QVJJQUdyaWQ6OmFkZENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNoaWxkLCBIYXNoU2V0PEFj
Y2Vzc2liaWxpdHlPYmplY3QqPiYgYXBwZW5kZWRSb3dzLCB1bnNpZ25lZCYgY29sdW1uQ291bnQp
Citib29sIEFjY2Vzc2liaWxpdHlBUklBR3JpZDo6YWRkVGFibGVDZWxsQ2hpbGQoQWNjZXNzaWJp
bGl0eU9iamVjdCogY2hpbGQsIEhhc2hTZXQ8QWNjZXNzaWJpbGl0eU9iamVjdCo+JiBhcHBlbmRl
ZFJvd3MsIHVuc2lnbmVkJiBjb2x1bW5Db3VudCkKIHsKICAgICBpZiAoIWNoaWxkIHx8ICFjaGls
ZC0+aXNUYWJsZVJvdygpIHx8IGNoaWxkLT5hcmlhUm9sZUF0dHJpYnV0ZSgpICE9IFJvd1JvbGUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgIHVuc2lnbmVk
IGNvbHVtbkNvdW50ID0gMDsKICAgICBmb3IgKFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBj
aGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkp
IHsKIAotICAgICAgICBpZiAoIWFkZENoaWxkKGNoaWxkLmdldCgpLCBhcHBlbmRlZFJvd3MsIGNv
bHVtbkNvdW50KSkgeworICAgICAgICBpZiAoIWFkZFRhYmxlQ2VsbENoaWxkKGNoaWxkLmdldCgp
LCBhcHBlbmRlZFJvd3MsIGNvbHVtbkNvdW50KSkgewogICAgICAgICAgICAgCiAgICAgICAgICAg
ICAvLyBpbiBjYXNlIHRoZSByZW5kZXIgdHJlZSBkb2Vzbid0IG1hdGNoIHRoZSBleHBlY3RlZCBB
UklBIGhpZXJhcmNoeSwgbG9vayBhdCB0aGUgY2hpbGRyZW4KICAgICAgICAgICAgIGlmICghY2hp
bGQtPmhhc0NoaWxkcmVuKCkpCkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICAgICAgICAgIEFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IGNoaWxkLT5jaGlsZHJlbigpOwogICAg
ICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IGNoaWxkcmVuLnNpemUoKTsKICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgYWRkQ2hp
bGQoY2hpbGRyZW5baV0uZ2V0KCksIGFwcGVuZGVkUm93cywgY29sdW1uQ291bnQpOworICAgICAg
ICAgICAgICAgIGFkZFRhYmxlQ2VsbENoaWxkKGNoaWxkcmVuW2ldLmdldCgpLCBhcHBlbmRlZFJv
d3MsIGNvbHVtbkNvdW50KTsKICAgICAgICAgfQogICAgIH0KICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168495</attachid>
            <date>2012-10-12 15:18:51 -0700</date>
            <delta_ts>2012-10-16 10:55:21 -0700</delta_ts>
            <desc>patch </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>25579</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9u
cwkocmV2aXNpb24gMTMxMjI3KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVz
dEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtMTQyNSw2ICsxNDI1LDcgQEAKIHdlYmtp
dC5vcmcvYi83MzkxMiBhY2Nlc3NpYmlsaXR5L2FyaWEtY2hlY2tib3gtdGV4dC5odG1sIFsgU2tp
cCBdCiAKIHdlYmtpdC5vcmcvYi83MzkxMiBhY2Nlc3NpYmlsaXR5L2FyaWEtY2hlY2tib3gtc2Vu
ZHMtbm90aWZpY2F0aW9uLmh0bWwgWyBGYWlsdXJlIFBhc3MgXQord2Via2l0Lm9yZy9iLzk4Nzg3
IGFjY2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5Lmh0bWwgWyBT
a2lwIF0KIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogIyBUZXN0IGZhaWx1cmVzIHdpdGggU2tpYSBHUFUgcmVuZGVy
aW5nIG9mIGNhbnZhcyAyRApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2li
aWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5LWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWhp
ZGRlbi1uZWdhdGVzLW5vLXZpc2liaWxpdHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRl
cy1uby12aXNpYmlsaXR5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBA
QAoraGVhZGluZzEuMgorCisKKworVGhpcyB0ZXN0cyBlbnN1cmVzIHRoYXQgYXJpYS1oaWRkZW49
ZmFsc2Ugd2lsbCBhbGxvdyBhIG5vZGUgdG8gYmUgaW4gdGhlIEFYIGhpZXJhcmNoeSBldmVuIGlm
IGl0cyBub3QgcmVuZGVyZWQgb3IgdmlzaWJsZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyAhaGVhZGluZzFfMSB8fCAhaGVhZGluZzFfMS5pc1ZhbGlkIGlzIHRydWUKK1BB
U1MgIWhlYWRpbmcxXzIgfHwgIWhlYWRpbmcxXzMuaXNWYWxpZCBpcyB0cnVlCitQQVNTICFoZWFk
aW5nMV8zIHx8ICFoZWFkaW5nMV8zLmlzVmFsaWQgaXMgdHJ1ZQorUEFTUyBoZWFkaW5nMi5yb2xl
IGlzICdBWFJvbGU6IEFYSGVhZGluZycKK1BBU1MgcGFyZW50LmNoaWxkQXRJbmRleCgwKS5pc0Vx
dWFsKGhlYWRpbmcyKSBpcyB0cnVlCitQQVNTIGhlYWRpbmczLnJvbGUgaXMgJ0FYUm9sZTogQVhI
ZWFkaW5nJworUEFTUyBwYXJlbnQuY2hpbGRBdEluZGV4KDEpLmlzRXF1YWwoaGVhZGluZzMpIGlz
IHRydWUKK1BBU1MgaGVhZGluZzQucm9sZSBpcyAnQVhSb2xlOiBBWEhlYWRpbmcnCitQQVNTIHBh
cmVudC5jaGlsZEF0SW5kZXgoMikuaXNFcXVhbChoZWFkaW5nNCkgaXMgdHJ1ZQorVGV4dGZpZWxk
IFRpdGxlOiBBWFRpdGxlOiAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtaGlkZGVu
LW5lZ2F0ZXMtbm8tdmlzaWJpbGl0eS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5Lmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtaGlkZGVuLW5lZ2F0ZXMt
bm8tdmlzaWJpbGl0eS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYzIEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5IGlkPSJib2R5Ij4KKworPGgxIGhpZGRlbiBpZD0iaGVhZGluZzFf
MSI+aGVhZGluZzEuMTwvaDE+Cis8aDEgYXJpYS1oaWRkZW49InRydWUiIGlkPSJoZWFkaW5nMV8y
Ij5oZWFkaW5nMS4yPC9oMT4KKzxoMSBoaWRkZW4gYXJpYS1oaWRkZW49InRydWUiIGlkPSJoZWFk
aW5nMV8zIj5oZWFkaW5nMS4zPC9oMT4KKworPGgxIGhpZGRlbiBhcmlhLWhpZGRlbj0iZmFsc2Ui
IGlkPSJoZWFkaW5nMiI+aGVhZGluZzI8L2gxPgorPGgxIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBh
cmlhLWhpZGRlbj0iZmFsc2UiIGlkPSJoZWFkaW5nMyI+aGVhZGluZzM8L2gxPgorPGgxIHN0eWxl
PSJ2aXNpYmlsaXR5OmhpZGRlbjsiIGFyaWEtaGlkZGVuPSJmYWxzZSIgaWQ9ImhlYWRpbmc0Ij5o
ZWFkaW5nNDwvaDE+CisKKzxkaXYgaGlkZGVuIGFyaWEtaGlkZGVuPSJmYWxzZSIgaWQ9ImhpZGRl
bkRpdiI+SGlkZGVuVGV4dDE8L2Rpdj4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBhcmlhLWxhYmVsbGVk
Ynk9ImhpZGRlbkRpdiIgaWQ9InRleHRGaWVsZFdpdGhIaWRkZW5MYWJlbGxlciI+CisKKzxwIGlk
PSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+
CisKKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyBlbnN1cmVzIHRoYXQgYXJpYS1oaWRkZW49
ZmFsc2Ugd2lsbCBhbGxvdyBhIG5vZGUgdG8gYmUgaW4gdGhlIEFYIGhpZXJhcmNoeSBldmVuIGlm
IGl0cyBub3QgcmVuZGVyZWQgb3IgdmlzaWJsZSIpOworCisgICAgaWYgKHdpbmRvdy5hY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcikgeworCisgICAgICAgIC8vIEZpcnN0IGdyb3VwcyBvZiBoZWFkaW5n
cyBhcmUgYWN0dWFsbHkgaGlkZGUubgorICAgICAgICB2YXIgaGVhZGluZzFfMSA9IGFjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiaGVhZGluZzFfMSIpOworICAg
ICAgICBzaG91bGRCZVRydWUoIiFoZWFkaW5nMV8xIHx8ICFoZWFkaW5nMV8xLmlzVmFsaWQiKTsK
KworICAgICAgICB2YXIgaGVhZGluZzFfMiA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vz
c2libGVFbGVtZW50QnlJZCgiaGVhZGluZzFfMiIpOworICAgICAgICBzaG91bGRCZVRydWUoIiFo
ZWFkaW5nMV8yIHx8ICFoZWFkaW5nMV8zLmlzVmFsaWQiKTsKKworICAgICAgICB2YXIgaGVhZGlu
ZzFfMyA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiaGVh
ZGluZzFfMyIpOworICAgICAgICBzaG91bGRCZVRydWUoIiFoZWFkaW5nMV8zIHx8ICFoZWFkaW5n
MV8zLmlzVmFsaWQiKTsKKworICAgICAgICAvLyBUaGVzZSBoZWFkaW5ncyBzaG91bGQgYmUgaW4g
QVggdHJlZSBkZXNwaXRlIGJlaW5nIGhpZGRlbi4KKyAgICAgICAgdmFyIGhlYWRpbmcyID0gYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJoZWFkaW5nMiIpOwor
ICAgICAgICBzaG91bGRCZSgiaGVhZGluZzIucm9sZSIsICInQVhSb2xlOiBBWEhlYWRpbmcnIik7
CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgb3JkZXIgb2YgdGhlc2UgZWxlbWVudHMgaXMg
Y29ycmVjdCBiYXNlZCBvbiBET00gb3JkZXIuCisgICAgICAgIHZhciBwYXJlbnQgPSBoZWFkaW5n
Mi5wYXJlbnRFbGVtZW50KCk7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgicGFyZW50LmNoaWxkQXRJ
bmRleCgwKS5pc0VxdWFsKGhlYWRpbmcyKSIpOworCisgICAgICAgIHZhciBoZWFkaW5nMyA9IGFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiaGVhZGluZzMiKTsK
KyAgICAgICAgc2hvdWxkQmUoImhlYWRpbmczLnJvbGUiLCAiJ0FYUm9sZTogQVhIZWFkaW5nJyIp
OworICAgICAgICBzaG91bGRCZVRydWUoInBhcmVudC5jaGlsZEF0SW5kZXgoMSkuaXNFcXVhbCho
ZWFkaW5nMykiKTsKKworICAgICAgICB2YXIgaGVhZGluZzQgPSBhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImhlYWRpbmc0Iik7CisgICAgICAgIHNob3VsZEJl
KCJoZWFkaW5nNC5yb2xlIiwgIidBWFJvbGU6IEFYSGVhZGluZyciKTsKKyAgICAgICAgc2hvdWxk
QmVUcnVlKCJwYXJlbnQuY2hpbGRBdEluZGV4KDIpLmlzRXF1YWwoaGVhZGluZzQpIik7CisKKyAg
ICAgICAgLy8gVGhlIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGUgc2hvdWxkIHdvcmsgZXZlbiB0
aG91Z2ggaGlkZGVuLgorICAgICAgICB2YXIgdGV4dEZpZWxkID0gYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0RmllbGRXaXRoSGlkZGVuTGFiZWxsZXIi
KTsKKyAgICAgICAgZGVidWcoIlRleHRmaWVsZCBUaXRsZTogIiArIHRleHRGaWVsZC50aXRsZSk7
CisgICAgfQorCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxMzEyMjcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMyBAQAorMjAxMi0xMC0xMCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hA
YXBwbGUuY29tPgorCisgICAgICAgIEFYOiBhcmlhLWhpZGRlbj1mYWxzZSBkb2VzIG5vdCB3b3Jr
IGFzIGV4cGVjdGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05ODc4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9hcmlhLWhpZGRlbi1uZWdhdGVzLW5vLXZpc2liaWxpdHkuaHRt
bDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1oaWRk
ZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisKIDIwMTItMTAt
MTIgIEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQgY2hyb21pdW0gd2luZG93cyByZWJhc2VsaW5lIGZvciByMTMxMjAyLgpAQCAtODQ2LDcgKzg1
Niw3IEBACiAgICAgICAgICogcGxhdGZvcm0vYmxhY2tiZXJyeS9odHRwL3Rlc3RzL3dlYnNvY2tl
dC90ZXN0cy9lbmFibGUtZGlzYWJsZS1zZXR0aW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCiAgICAg
ICAgICogcGxhdGZvcm0vYmxhY2tiZXJyeS9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9lbmFi
bGUtZGlzYWJsZS1zZXR0aW5nLmh0bWw6IEFkZGVkLgogCi0yMDEyLTEwLTExICBFbWlsIEEgRWts
dW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKzIwMTItMTAtMTEgRW1pbCBBIEVrbHVuZCA8ZWFlQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBbU3ViIHBpeGVsIGxheW91dF0gQ2hhbmdlIFJlbmRlckJv
eCB0byBub3Qgcm91bmQgbG9naWNhbFRvcC9MZWZ0IGZvciBSZW5kZXJSZXBsYWNlZAogICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkxMDgKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDEzMTIyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTEwLTEwICBDaHJpcyBGbGVpemFjaCAg
PGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IGFyaWEtaGlkZGVuPWZhbHNlIGRv
ZXMgbm90IHdvcmsgYXMgZXhwZWN0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTk4Nzg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQVJJQSByZXF1aXJlcyB0aGF0IGFyaWEtaGlkZGVuPWZhbHNlIG92ZXJy
aWRlIGFuIGVsZW1lbnQncyBuYXRpdmUgdmlzaWJpbGl0eSBhbmQgaW5jbHVkZSB0aGF0CisgICAg
ICAgIG5vZGUgaW4gdGhlIEFYIGhpZXJhcmNoeS4KKyAKKyAgICAgICAgVG8gYWNjb21wbGlzaCB0
aGlzIHdlIGhhdmUgdG8gYWxsb3cgaW52aXNpYmxlIGl0ZW1zIHRvIGJlIGluY2x1ZGVkLCBhcyB3
ZWxsIGFzIGl0ZW1zIHRoYXQKKyAgICAgICAgaGF2ZSBubyByZW5kZXJlcnMgYXNzb2NpYXRlZCB3
aXRoIHRoZW0uCisKKyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0eS9hcmlhLWhpZGRlbi1uZWdh
dGVzLW5vLXZpc2liaWxpdHkuaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRl
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OmFkZFRhYmxlQ2VsbENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZDo6YWRkQ2hpbGRyZW4p
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmg6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5QVJJQUdyaWQpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Ym91bmRpbmdCb3hSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjppbnNlcnRDaGlsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWRkQ2hpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFkZENoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0ZXh0VW5kZXJFbGVtZW50KToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Lmg6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6OnRleHRJdGVyYXRvckJlaGF2aW9yRm9yVGV4dFJhbmdlKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0OjphZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjppbnNlcnRDaGlsZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZEJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkSGlkZGVuQ2hp
bGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRk
Q2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5oOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCk6CisKIDIwMTItMTAt
MTIgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzEyMjQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkocmV2aXNpb24gMTMx
MjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGbG9hdFF1YWQu
aCIKICNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkxheW91dFR5
cGVzLmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0
aW9uLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CkBAIC01MjMsNiArNTI0LDcgQEAKICAgICB2aXJ0dWFsIEludFBvaW50IGNsaWNrUG9p
bnQoKTsKICAgICBzdGF0aWMgSW50UmVjdCBib3VuZGluZ0JveEZvclF1YWRzKFJlbmRlck9iamVj
dCosIGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+Jik7CiAgICAgCisgICAgVGV4dEl0ZXJhdG9yQmVo
YXZpb3IgdGV4dEl0ZXJhdG9yQmVoYXZpb3JGb3JUZXh0UmFuZ2UoKSBjb25zdDsKICAgICB2aXJ0
dWFsIFBsYWluVGV4dFJhbmdlIHNlbGVjdGVkVGV4dFJhbmdlKCkgY29uc3QgeyByZXR1cm4gUGxh
aW5UZXh0UmFuZ2UoKTsgfQogICAgIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0KCkgY29uc3QgeyBy
ZXR1cm4gc2VsZWN0ZWRUZXh0UmFuZ2UoKS5zdGFydDsgfQogICAgIHVuc2lnbmVkIHNlbGVjdGlv
bkVuZCgpIGNvbnN0IHsgcmV0dXJuIHNlbGVjdGVkVGV4dFJhbmdlKCkubGVuZ3RoOyB9CkBAIC01
NjksNiArNTcxLDkgQEAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQWNjZXNzaWJpbGl0eVJvbGUo
KSB7IH0KICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuKCk7
CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkcmVuKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGFk
ZENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0
Q2hpbGQoQWNjZXNzaWJpbGl0eU9iamVjdCosIHVuc2lnbmVkKSB7IH0KKyAgICAKICAgICB2aXJ0
dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBoYXNDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1faGF2ZUNoaWxkcmVuOyB9
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5oCShyZXZpc2lvbiAxMzEyMjcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ4
LDYgKzI0OCw3IEBACiAgICAgYm9vbCBpc0Rlc2NlbmRhbnRPZkVsZW1lbnRUeXBlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUpIGNvbnN0OwogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlm
IGl0J3MgZm9jdXNhYmxlIGJ1dCBpdCdzIG5vdCBjb250ZW50IGVkaXRhYmxlIGFuZCBpdCdzIG5v
dCBhIGNvbnRyb2wgb3IgQVJJQSBjb250cm9sLgogCisgICAgdm9pZCBhZGRIaWRkZW5DaGlsZHJl
bigpOwogICAgIHZvaWQgYWRkVGV4dEZpZWxkQ2hpbGRyZW4oKTsKICAgICB2b2lkIGFkZEltYWdl
TWFwQ2hpbGRyZW4oKTsKICAgICB2b2lkIGFkZENhbnZhc0NoaWxkcmVuKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAkocmV2aXNpb24gMTMx
MjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwOCw3ICsyMDgsOCBAQAogfTsKIAogYm9vbCBub2RlSGFzUm9sZShO
b2RlKiwgY29uc3QgU3RyaW5nJiByb2xlKTsKLQorYm9vbCBpc05vZGVBUklBSGlkZGVuRmFsc2Uo
Tm9kZSopOworICAgIAogI2lmICFIQVZFKEFDQ0VTU0lCSUxJVFkpCiBpbmxpbmUgQVhPYmplY3RD
YWNoZTo6QVhPYmplY3RDYWNoZShjb25zdCBEb2N1bWVudCogZG9jKSA6IG1fZG9jdW1lbnQoY29u
c3RfY2FzdDxEb2N1bWVudCo+KGRvYykpLCBtX25vdGlmaWNhdGlvblBvc3RUaW1lcih0aGlzLCAw
KSB7IH0KIGlubGluZSBBWE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSgpIHsgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3QuaAkocmV2aXNpb24gMTMxMjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNiAr
MTU4LDkgQEAKIAogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVJvbGUgZGV0ZXJtaW5lQWNjZXNz
aWJpbGl0eVJvbGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRyZW4oKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRkQ2hpbGQoQWNjZXNzaWJpbGl0eU9iamVjdCopOworICAgIHZpcnR1YWwgdm9p
ZCBpbnNlcnRDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgdW5zaWduZWQgaW5kZXgpOworCiAg
ICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3Q7CiAgICAgQWNjZXNzaWJpbGl0eVJvbGUg
YXJpYVJvbGVBdHRyaWJ1dGUoKSBjb25zdDsKQEAgLTE3NCw2ICsxNzcsNyBAQAogICAgIHZvaWQg
YXJpYUxhYmVsZWRCeUVsZW1lbnRzKFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRzKSBjb25zdDsK
ICAgICBTdHJpbmcgYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uRm9yRWxlbWVudHMoVmVjdG9yPEVs
ZW1lbnQqPiAmZWxlbWVudHMpIGNvbnN0OwogICAgIHZvaWQgZWxlbWVudHNGcm9tQXR0cmlidXRl
KFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRzLCBjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7
CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGJvdW5kaW5nQm94UmVjdCgpIGNvbnN0OwogCiAgICAg
RWxlbWVudCogbWVudUVsZW1lbnRGb3JNZW51QnV0dG9uKCkgY29uc3Q7CiAgICAgRWxlbWVudCog
bWVudUl0ZW1FbGVtZW50Rm9yTWVudSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5oCShyZXZpc2lvbiAx
MzEyMjcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklB
R3JpZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBACiAgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzU2VsZWN0ZWRSb3dzKCkgeyByZXR1cm4gdHJ1ZTsgfSAgICAKICAgICB2aXJ0dWFs
IGJvb2wgaXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgCi0g
ICAgYm9vbCBhZGRDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgSGFzaFNldDxBY2Nlc3NpYmls
aXR5T2JqZWN0Kj4mIGFwcGVuZGVkUm93cywgdW5zaWduZWQmIGNvbHVtbkNvdW50KTsKKyAgICBi
b29sIGFkZFRhYmxlQ2VsbENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBIYXNoU2V0PEFjY2Vz
c2liaWxpdHlPYmplY3QqPiYgYXBwZW5kZWRSb3dzLCB1bnNpZ25lZCYgY29sdW1uQ291bnQpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAko
cmV2aXNpb24gMTMxMjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNiBAQAog
I2luY2x1ZGUgIlJlbmRlcmVkUG9zaXRpb24uaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVk
ZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCi0jaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCiAj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtNTk5LDE5ICs1OTgsNiBAQAogICAgIHJl
dHVybiBTdHJpbmcoKTsKIH0KIAotc3RhdGljIFRleHRJdGVyYXRvckJlaGF2aW9yIHRleHRJdGVy
YXRvckJlaGF2aW9yRm9yVGV4dFJhbmdlKCkKLXsKLSAgICBUZXh0SXRlcmF0b3JCZWhhdmlvciBi
ZWhhdmlvciA9IFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHk7Ci0KLSNpZiBQTEFU
Rk9STShHVEspCi0gICAgLy8gV2UgbmVlZCB0byBlbWl0IHJlcGxhY2VkIGVsZW1lbnRzIGZvciBH
VEssIGFuZCBwcmVzZW50Ci0gICAgLy8gdGhlbSB3aXRoIHRoZSAnb2JqZWN0IHJlcGxhY2VtZW50
IGNoYXJhY3RlcicgKDB4RkZGQykuCi0gICAgYmVoYXZpb3IgPSBzdGF0aWNfY2FzdDxUZXh0SXRl
cmF0b3JCZWhhdmlvcj4oYmVoYXZpb3IgfCBUZXh0SXRlcmF0b3JFbWl0c09iamVjdFJlcGxhY2Vt
ZW50Q2hhcmFjdGVycyk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBiZWhhdmlvcjsKLX0KLQogU3Ry
aW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQoKSBjb25zdAog
ewogICAgIGlmICghbV9yZW5kZXJlcikKQEAgLTExMDIsOSArMTA4OCwxNyBAQAogICAgIC8vIFRo
ZSBmb2xsb3dpbmcgY2FzZXMgY2FuIGFwcGx5IHRvIGFueSBlbGVtZW50IHRoYXQncyBhIHN1YmNs
YXNzIG9mIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuCiAgICAgCiAgICAgLy8gSWdub3JlIGlu
dmlzaWJsZSBlbGVtZW50cy4KLSAgICBpZiAoIW1fcmVuZGVyZXIgfHwgbV9yZW5kZXJlci0+c3R5
bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCisgICAgaWYgKCFtX3JlbmRlcmVyKQogICAg
ICAgICByZXR1cm4gSWdub3JlT2JqZWN0OwogCisgICAgaWYgKG1fcmVuZGVyZXItPnN0eWxlKCkt
PnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKSB7CisgICAgICAgIC8vIGFyaWEtaGlkZGVuIGlzIG1l
YW50IHRvIG92ZXJyaWRlIHZpc2liaWxpdHkgYXMgdGhlIGRldGVybWluYW50IGluIEFYIGhpZXJh
cmNoeSBpbmNsdXNpb24uCisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShnZXRBdHRyaWJ1
dGUoYXJpYV9oaWRkZW5BdHRyKSwgImZhbHNlIikpCisgICAgICAgICAgICByZXR1cm4gRGVmYXVs
dEJlaGF2aW9yOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIElnbm9yZU9iamVjdDsKKyAgICB9
CisgICAgCiAgICAgLy8gQW55dGhpbmcgbWFya2VkIGFzIGFyaWEtaGlkZGVuIG9yIGEgY2hpbGQg
b2Ygc29tZXRoaW5nIGFyaWEtaGlkZGVuIG11c3QgYmUgaGlkZGVuLgogICAgIGlmIChhcmlhSXNI
aWRkZW4oKSkKICAgICAgICAgcmV0dXJuIElnbm9yZU9iamVjdDsKQEAgLTI3MTcsNiArMjcxMSw1
OCBAQAogfQogI2VuZGlmCiAKKy8vIEhpZGRlbiBjaGlsZHJlbiBhcmUgdGhvc2UgdGhhdCBhcmUg
bm90IHJlbmRlcmVkIG9yIHZpc2libGUsIGJ1dCBhcmUgc3BlY2lmaWNhbGx5IG1hcmtlZCBhcyBh
cmlhLWhpZGRlbj1mYWxzZSwKKy8vIG1lYW5pbmcgdGhhdCB0aGV5IHNob3VsZCBiZSBleHBvc2Vk
IHRvIHRoZSBBWCBoaWVyYXJjaHkuCit2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFk
ZEhpZGRlbkNoaWxkcmVuKCkKK3sKKyAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOworICAg
IGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIEZpcnN0IGRvIGEgcXVp
Y2sgcnVuIHRocm91Z2ggdG8gZGV0ZXJtaW5lIGlmIHdlIGhhdmUgYW55IGhpZGRlbiBub2RlcyAo
bW9zdCBvZnRlbiB3ZSB3aWxsIG5vdCksIHNvIHRoYXQuCisgICAgYm9vbCBzaG91bGRJbnNlcnRI
aWRkZW5Ob2RlcyA9IGZhbHNlOworICAgIGZvciAoTm9kZSogY2hpbGQgPSBub2RlLT5maXJzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlm
ICghY2hpbGQtPnJlbmRlcmVyKCkgJiYgaXNOb2RlQVJJQUhpZGRlbkZhbHNlKGNoaWxkKSkgewor
ICAgICAgICAgICAgc2hvdWxkSW5zZXJ0SGlkZGVuTm9kZXMgPSB0cnVlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKCFzaG91bGRJbnNlcnRIaWRk
ZW5Ob2RlcykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIERldGVybWluZSB0aGUgaW5k
ZXggYXQgd2hpY2ggdGhpcyBpdGVtIHNob3VsZCBiZSBpbnNlcnRlZC4gVGhlIGdvYWwgaXMgdG8g
cGxhY2UgaXQgYXMgY2xvc2UgdG8KKyAgICAvLyBET00gb3JkZXJpbmcgYXMgcG9zc2libGUgYnkg
a2VlcGluZyB0cmFjayBvZiB3aGVyZSB0aGUgc2libGluZ3Mgd2hvIGhhZCByZW5kZXJlcnMgd2Vy
ZSBpbnNlcnRlZC4KKyAgICB1bnNpZ25lZCBpbnNlcnRpb25JbmRleCA9IDA7CisgICAgZm9yIChO
b2RlKiBjaGlsZCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5yZW5kZXJlcigpKSB7CisgICAgICAg
ICAgICAvLyBGaW5kIG91dCB3aGVyZSB0aGUgbGFzdCByZW5kZXIgc2libGluZyBpcyBsb2NhdGVk
IHdpdGhpbiBtX2NoaWxkcmVuLgorICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY2hp
bGRSZW5kZXJlciA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0KGNoaWxkLT5yZW5kZXJlcigpKTsKKyAg
ICAgICAgICAgIGlmIChjaGlsZFJlbmRlcmVyICYmIGNoaWxkUmVuZGVyZXItPmFjY2Vzc2liaWxp
dHlJc0lnbm9yZWQoKSkgeworICAgICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciBjaGlsZHJlbiA9IGNoaWxkUmVuZGVyZXItPmNoaWxkcmVuKCk7CisgICAgICAgICAgICAg
ICAgaWYgKGNoaWxkcmVuLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRSZW5kZXJl
ciA9IGNoaWxkcmVuLmxhc3QoKS5nZXQoKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIGNoaWxkUmVuZGVyZXIgPSAwOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoY2hpbGRSZW5kZXJlcikKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25JbmRleCA9
IG1fY2hpbGRyZW4uZmluZChjaGlsZFJlbmRlcmVyKSArIDE7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghaXNOb2RlQVJJQUhpZGRlbkZhbHNlKGNoaWxk
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgcHJl
dmlvdXNTaXplID0gbV9jaGlsZHJlbi5zaXplKCk7CisgICAgICAgIGlmIChpbnNlcnRpb25JbmRl
eCA+IHByZXZpb3VzU2l6ZSkKKyAgICAgICAgICAgIGluc2VydGlvbkluZGV4ID0gcHJldmlvdXNT
aXplOworICAgICAgICAKKyAgICAgICAgaW5zZXJ0Q2hpbGQoYXhPYmplY3RDYWNoZSgpLT5nZXRP
ckNyZWF0ZShjaGlsZCksIGluc2VydGlvbkluZGV4KTsKKyAgICAgICAgaW5zZXJ0aW9uSW5kZXgg
Kz0gKG1fY2hpbGRyZW4uc2l6ZSgpIC0gcHJldmlvdXNTaXplKTsKKyAgICB9Cit9CisgICAgCiB2
b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZENoaWxkcmVuKCkKIHsKICAgICAvLyBJ
ZiB0aGUgbmVlZCB0byBhZGQgbW9yZSBjaGlsZHJlbiBpbiBhZGRpdGlvbiB0byBleGlzdGluZyBj
aGlsZHJlbiBhcmlzZXMsIApAQCAtMjcyOCwyNCArMjc3NCwxMCBAQAogICAgIGlmICghY2FuSGF2
ZUNoaWxkcmVuKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICAvLyBhZGQgYWxsIHVuaWdu
b3JlZCBhY2MgY2hpbGRyZW4KLSAgICBmb3IgKFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBv
YmogPSBmaXJzdENoaWxkKCk7IG9iajsgb2JqID0gb2JqLT5uZXh0U2libGluZygpKSB7Ci0gICAg
ICAgIC8vIElmIHRoZSBwYXJlbnQgaXMgYXNraW5nIGZvciB0aGlzIGNoaWxkJ3MgY2hpbGRyZW4s
IHRoZW4gZWl0aGVyIGl0J3MgdGhlIGZpcnN0IHRpbWUgKGFuZCBjbGVhcmluZyBpcyBhIG5vLW9w
KSwgCi0gICAgICAgIC8vIG9yIGl0cyB2aXNpYmlsaXR5IGhhcyBjaGFuZ2VkLiBJbiB0aGUgbGF0
dGVyIGNhc2UsIHRoaXMgY2hpbGQgbWF5IGhhdmUgYSBzdGFsZSBjaGlsZCBjYWNoZWQuIAotICAg
ICAgICAvLyBUaGlzIGNhbiBwcmV2ZW50IGFyaWEtaGlkZGVuIGNoYW5nZXMgZnJvbSB3b3JraW5n
IGNvcnJlY3RseS4gSGVuY2UsIHdoZW5ldmVyIGEgcGFyZW50IGlzIGdldHRpbmcgY2hpbGRyZW4s
IGVuc3VyZSBkYXRhIGlzIG5vdCBzdGFsZS4KLSAgICAgICAgb2JqLT5jbGVhckNoaWxkcmVuKCk7
Ci0KLSAgICAgICAgaWYgKG9iai0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKSB7Ci0gICAgICAg
ICAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBvYmotPmNoaWxkcmVu
KCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBjaGlsZHJlbi5zaXplKCk7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAg
ICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoY2hpbGRyZW5baV0pOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgQVNTRVJUKG9iai0+cGFyZW50T2JqZWN0KCkgPT0gdGhpcyk7Ci0gICAgICAg
ICAgICBtX2NoaWxkcmVuLmFwcGVuZChvYmopOwotICAgICAgICB9Ci0gICAgfQorICAgIGZvciAo
UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG9iaiA9IGZpcnN0Q2hpbGQoKTsgb2JqOyBvYmog
PSBvYmotPm5leHRTaWJsaW5nKCkpCisgICAgICAgIGFkZENoaWxkKG9iai5nZXQoKSk7CiAgICAg
CisgICAgYWRkSGlkZGVuQ2hpbGRyZW4oKTsKICAgICBhZGRBdHRhY2htZW50Q2hpbGRyZW4oKTsK
ICAgICBhZGRJbWFnZU1hcENoaWxkcmVuKCk7CiAgICAgYWRkVGV4dEZpZWxkQ2hpbGRyZW4oKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMTMxMjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3Niw2
ICsxNzc2LDE5IEBACiAgICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoYXJpYV9wcmVzc2VkQXR0ciku
aXNFbXB0eSgpOwogfQogCitUZXh0SXRlcmF0b3JCZWhhdmlvciBBY2Nlc3NpYmlsaXR5T2JqZWN0
Ojp0ZXh0SXRlcmF0b3JCZWhhdmlvckZvclRleHRSYW5nZSgpIGNvbnN0Cit7CisgICAgVGV4dEl0
ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmls
aXR5OworICAgIAorI2lmIFBMQVRGT1JNKEdUSykKKyAgICAvLyBXZSBuZWVkIHRvIGVtaXQgcmVw
bGFjZWQgZWxlbWVudHMgZm9yIEdUSywgYW5kIHByZXNlbnQKKyAgICAvLyB0aGVtIHdpdGggdGhl
ICdvYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyJyAoMHhGRkZDKS4KKyAgICBiZWhhdmlvciA9
IHN0YXRpY19jYXN0PFRleHRJdGVyYXRvckJlaGF2aW9yPihiZWhhdmlvciB8IFRleHRJdGVyYXRv
ckVtaXRzT2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJzKTsKKyNlbmRpZgorICAgIAorICAgIHJl
dHVybiBiZWhhdmlvcjsKK30KKyAgICAKIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OmJ1dHRvblJvbGVUeXBlKCkgY29uc3QKIHsKICAgICAvLyBJZiBhcmlhLXByZXNzZWQg
aXMgcHJlc2VudCwgdGhlbiBpdCBzaG91bGQgYmUgZXhwb3NlZCBhcyBhIHRvZ2dsZSBidXR0b24u
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHAJKHJldmlzaW9uIDEzMTIyNykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNiw4ICszMTYsMTQgQEAKICAgICBp
ZiAobm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGdldE9yQ3JlYXRlKG5vZGUtPnJl
bmRlcmVyKCkpOwogCisgICAgaWYgKCFub2RlLT5wYXJlbnRFbGVtZW50KCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIAogICAgIC8vIEl0J3Mgb25seSBhbGxvd2VkIHRvIGNyZWF0ZSBhbiBBY2Nl
c3NpYmlsaXR5T2JqZWN0IGZyb20gYSBOb2RlIGlmIGl0J3MgaW4gYSBjYW52YXMgc3VidHJlZS4K
LSAgICBpZiAoIW5vZGUtPnBhcmVudEVsZW1lbnQoKSB8fCAhbm9kZS0+cGFyZW50RWxlbWVudCgp
LT5pc0luQ2FudmFzU3VidHJlZSgpKQorICAgIC8vIE9yIGlmIGl0J3MgYSBoaWRkZW4gZWxlbWVu
dCwgYnV0IHdlIHN0aWxsIHdhbnQgdG8gZXhwb3NlIGl0IGJlY2F1c2Ugb2Ygb3RoZXIgQVJJQSBh
dHRyaWJ1dGVzLgorICAgIGJvb2wgaW5DYW52YXNTdWJ0cmVlID0gbm9kZS0+cGFyZW50RWxlbWVu
dCgpLT5pc0luQ2FudmFzU3VidHJlZSgpOworICAgIGJvb2wgaXNIaWRkZW4gPSAhbm9kZS0+cmVu
ZGVyZXIoKSAmJiBpc05vZGVBUklBSGlkZGVuRmFsc2Uobm9kZSk7CisgICAgaWYgKCFpbkNhbnZh
c1N1YnRyZWUgJiYgIWlzSGlkZGVuKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFJlZlB0cjxB
Y2Nlc3NpYmlsaXR5T2JqZWN0PiBuZXdPYmogPSBjcmVhdGVGcm9tTm9kZShub2RlKTsKQEAgLTc4
Myw2ICs3ODksMTcgQEAKICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iamVjdCA9
IGdldE9yQ3JlYXRlKGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpKTsKICAgICByZXR1cm4gYXhPYmpl
Y3QgJiYgYXhPYmplY3QtPmlzVGV4dENvbnRyb2woKTsKIH0KKyAgICAKK2Jvb2wgaXNOb2RlQVJJ
QUhpZGRlbkZhbHNlKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UodG9FbGVt
ZW50KG5vZGUpLT5nZXRBdHRyaWJ1dGUoYXJpYV9oaWRkZW5BdHRyKSwgImZhbHNlIik7Cit9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9u
IDEzMTIyNykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNiArMjIxLDI2IEBACiB7CiAgICAg
cmV0dXJuIGJvdW5kaW5nQm94UmVjdCgpOwogfQorICAgIAorTGF5b3V0UmVjdCBBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6Ym91bmRpbmdCb3hSZWN0KCkgY29uc3QKK3sKKyAgICAvLyBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdHMgaGF2ZSBubyBtZWNoYW5pc20geWV0IHRvIHJldHVybiBhIHNpemUg
b3IgcG9zaXRpb24uCisgICAgLy8gRm9yIG5vdywgbGV0J3MgcmV0dXJuIHRoZSBwb3NpdGlvbiBv
ZiB0aGUgYW5jZXN0b3IgdGhhdCBkb2VzIGhhdmUgYSBwb3NpdGlvbiwKKyAgICAvLyBhbmQgbWFr
ZSBpdCB0aGUgd2lkdGggb2YgdGhhdCBwYXJlbnQsIGFuZCBhYm91dCB0aGUgaGVpZ2h0IG9mIGEg
bGluZSBvZiB0ZXh0LCBzbyB0aGF0IGl0J3MgY2xlYXIgdGhlIG9iamVjdCBpcyBhIGNoaWxkIG9m
IHRoZSBwYXJlbnQuCisgICAgCisgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveDsKKyAgICAKKyAg
ICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBvc2l0aW9uUHJvdmlkZXIgPSBwYXJlbnRPYmpl
Y3QoKTsgcG9zaXRpb25Qcm92aWRlcjsgcG9zaXRpb25Qcm92aWRlciA9IHBvc2l0aW9uUHJvdmlk
ZXItPnBhcmVudE9iamVjdCgpKSB7CisgICAgICAgIGlmIChwb3NpdGlvblByb3ZpZGVyLT5pc0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkgeworICAgICAgICAgICAgTGF5b3V0UmVjdCBwYXJl
bnRSZWN0ID0gcG9zaXRpb25Qcm92aWRlci0+ZWxlbWVudFJlY3QoKTsKKyAgICAgICAgICAgIGJv
dW5kaW5nQm94LnNldFNpemUoTGF5b3V0U2l6ZShwYXJlbnRSZWN0LndpZHRoKCksIEZyYWN0aW9u
YWxMYXlvdXRVbml0KHN0ZDo6bWluKDEwLjBmLCBwYXJlbnRSZWN0LmhlaWdodCgpLnRvRmxvYXQo
KSkpKSk7CisgICAgICAgICAgICBib3VuZGluZ0JveC5zZXRMb2NhdGlvbihwYXJlbnRSZWN0Lmxv
Y2F0aW9uKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIGJvdW5kaW5nQm94OworfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
OjpzZXROb2RlKE5vZGUqIG5vZGUpCiB7CkBAIC0yODMsNiArMzAzLDMyIEBACiAgICAgcmV0dXJu
IFVua25vd25Sb2xlOwogfQogCit2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjppbnNlcnRD
aGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjaGlsZCwgdW5zaWduZWQgaW5kZXgpCit7CisgICAg
aWYgKCFjaGlsZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIElmIHRoZSBwYXJlbnQg
aXMgYXNraW5nIGZvciB0aGlzIGNoaWxkJ3MgY2hpbGRyZW4sIHRoZW4gZWl0aGVyIGl0J3MgdGhl
IGZpcnN0IHRpbWUgKGFuZCBjbGVhcmluZyBpcyBhIG5vLW9wKSwKKyAgICAvLyBvciBpdHMgdmlz
aWJpbGl0eSBoYXMgY2hhbmdlZC4gSW4gdGhlIGxhdHRlciBjYXNlLCB0aGlzIGNoaWxkIG1heSBo
YXZlIGEgc3RhbGUgY2hpbGQgY2FjaGVkLgorICAgIC8vIFRoaXMgY2FuIHByZXZlbnQgYXJpYS1o
aWRkZW4gY2hhbmdlcyBmcm9tIHdvcmtpbmcgY29ycmVjdGx5LiBIZW5jZSwgd2hlbmV2ZXIgYSBw
YXJlbnQgaXMgZ2V0dGluZyBjaGlsZHJlbiwgZW5zdXJlIGRhdGEgaXMgbm90IHN0YWxlLgorICAg
IGNoaWxkLT5jbGVhckNoaWxkcmVuKCk7CisgICAgCisgICAgaWYgKGNoaWxkLT5hY2Nlc3NpYmls
aXR5SXNJZ25vcmVkKCkpIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNo
aWxkcmVuID0gY2hpbGQtPmNoaWxkcmVuKCk7CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBjaGls
ZHJlbi5zaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
CisgICAgICAgICAgICBtX2NoaWxkcmVuLmluc2VydChpbmRleCArIGksIGNoaWxkcmVuW2ldKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoY2hpbGQtPnBhcmVudE9iamVjdCgpID09IHRo
aXMpOworICAgICAgICBtX2NoaWxkcmVuLmluc2VydChpbmRleCwgY2hpbGQpOworICAgIH0KK30K
Kwordm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWRkQ2hpbGQoQWNjZXNzaWJpbGl0eU9i
amVjdCogY2hpbGQpCit7CisgICAgaW5zZXJ0Q2hpbGQoY2hpbGQsIG1fY2hpbGRyZW4uc2l6ZSgp
KTsKK30KKwogdm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWRkQ2hpbGRyZW4oKQogewog
ICAgIC8vIElmIHRoZSBuZWVkIHRvIGFkZCBtb3JlIGNoaWxkcmVuIGluIGFkZGl0aW9uIHRvIGV4
aXN0aW5nIGNoaWxkcmVuIGFyaXNlcywgCkBAIC0yOTgsMTkgKzM0NCw4IEBACiAgICAgaWYgKHJl
bmRlcmVyKCkgJiYgIW1fbm9kZS0+aGFzVGFnTmFtZShjYW52YXNUYWcpKQogICAgICAgICByZXR1
cm47CiAgICAgCi0gICAgZm9yIChOb2RlKiBjaGlsZCA9IG1fbm9kZS0+Zmlyc3RDaGlsZCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBSZWZQdHI8QWNj
ZXNzaWJpbGl0eU9iamVjdD4gb2JqID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShjaGls
ZCk7Ci0gICAgICAgIG9iai0+Y2xlYXJDaGlsZHJlbigpOwotICAgICAgICBpZiAob2JqLT5hY2Nl
c3NpYmlsaXR5SXNJZ25vcmVkKCkpIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciBjaGlsZHJlbiA9IG9iai0+Y2hpbGRyZW4oKTsKLSAgICAgICAgICAgIHNpemVfdCBs
ZW5ndGggPSBjaGlsZHJlbi5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGNoaWxk
cmVuW2ldKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChvYmotPnBhcmVu
dE9iamVjdCgpID09IHRoaXMpOwotICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQob2JqKTsK
LSAgICAgICAgfQotICAgIH0KKyAgICBmb3IgKE5vZGUqIGNoaWxkID0gbV9ub2RlLT5maXJzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICBhZGRD
aGlsZChheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGNoaWxkKSk7CiB9CiAKIGJvb2wgQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhbkhhdmVDaGlsZHJlbigpIGNvbnN0CkBAIC0xMTg2LDcg
KzEyMjEsOSBAQAogICAgIC8vIElmIHRoaXMgY291bGQgYmUgZml4ZWQsIGl0J2QgYmUgbW9yZSBh
Y2N1cmF0ZSB1c2UgVGV4dEl0ZXJhdG9yIGhlcmUuCiAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5v
ZGUoKSkKICAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKS0+aW5uZXJUZXh0KCk7Ci0KKyAg
ICBlbHNlIGlmIChub2RlLT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybiB0b1RleHQobm9k
ZSktPndob2xlVGV4dCgpOworICAgIAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFS
SUFHcmlkLmNwcAkocmV2aXNpb24gMTMxMjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2
Niw3IEBACiAgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7CiB9CiAKLWJvb2wgQWNjZXNzaWJpbGl0
eUFSSUFHcmlkOjphZGRDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjaGlsZCwgSGFzaFNldDxB
Y2Nlc3NpYmlsaXR5T2JqZWN0Kj4mIGFwcGVuZGVkUm93cywgdW5zaWduZWQmIGNvbHVtbkNvdW50
KQorYm9vbCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OmFkZFRhYmxlQ2VsbENoaWxkKEFjY2Vzc2li
aWxpdHlPYmplY3QqIGNoaWxkLCBIYXNoU2V0PEFjY2Vzc2liaWxpdHlPYmplY3QqPiYgYXBwZW5k
ZWRSb3dzLCB1bnNpZ25lZCYgY29sdW1uQ291bnQpCiB7CiAgICAgaWYgKCFjaGlsZCB8fCAhY2hp
bGQtPmlzVGFibGVSb3coKSB8fCBjaGlsZC0+YXJpYVJvbGVBdHRyaWJ1dGUoKSAhPSBSb3dSb2xl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICB1bnNpZ25l
ZCBjb2x1bW5Db3VudCA9IDA7CiAgICAgZm9yIChSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4g
Y2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
KSB7CiAKLSAgICAgICAgaWYgKCFhZGRDaGlsZChjaGlsZC5nZXQoKSwgYXBwZW5kZWRSb3dzLCBj
b2x1bW5Db3VudCkpIHsKKyAgICAgICAgaWYgKCFhZGRUYWJsZUNlbGxDaGlsZChjaGlsZC5nZXQo
KSwgYXBwZW5kZWRSb3dzLCBjb2x1bW5Db3VudCkpIHsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgLy8gaW4gY2FzZSB0aGUgcmVuZGVyIHRyZWUgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQg
QVJJQSBoaWVyYXJjaHksIGxvb2sgYXQgdGhlIGNoaWxkcmVuCiAgICAgICAgICAgICBpZiAoIWNo
aWxkLT5oYXNDaGlsZHJlbigpKQpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgICAgICBBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBjaGlsZC0+Y2hpbGRyZW4oKTsKICAg
ICAgICAgICAgIHNpemVfdCBsZW5ndGggPSBjaGlsZHJlbi5zaXplKCk7CiAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIGFkZENo
aWxkKGNoaWxkcmVuW2ldLmdldCgpLCBhcHBlbmRlZFJvd3MsIGNvbHVtbkNvdW50KTsKKyAgICAg
ICAgICAgICAgICBhZGRUYWJsZUNlbGxDaGlsZChjaGlsZHJlbltpXS5nZXQoKSwgYXBwZW5kZWRS
b3dzLCBjb2x1bW5Db3VudCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168975</attachid>
            <date>2012-10-16 10:55:21 -0700</date>
            <delta_ts>2012-10-16 16:13:40 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>25225</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9u
cwkocmV2aXNpb24gMTMxMjI3KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVz
dEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtMTQyNSw2ICsxNDI1LDcgQEAKIHdlYmtp
dC5vcmcvYi83MzkxMiBhY2Nlc3NpYmlsaXR5L2FyaWEtY2hlY2tib3gtdGV4dC5odG1sIFsgU2tp
cCBdCiAKIHdlYmtpdC5vcmcvYi83MzkxMiBhY2Nlc3NpYmlsaXR5L2FyaWEtY2hlY2tib3gtc2Vu
ZHMtbm90aWZpY2F0aW9uLmh0bWwgWyBGYWlsdXJlIFBhc3MgXQord2Via2l0Lm9yZy9iLzk4Nzg3
IGFjY2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5Lmh0bWwgWyBT
a2lwIF0KIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogIyBUZXN0IGZhaWx1cmVzIHdpdGggU2tpYSBHUFUgcmVuZGVy
aW5nIG9mIGNhbnZhcyAyRApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2li
aWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5LWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWhp
ZGRlbi1uZWdhdGVzLW5vLXZpc2liaWxpdHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRl
cy1uby12aXNpYmlsaXR5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBA
QAoraGVhZGluZzEuMgorCisKKworVGhpcyB0ZXN0cyBlbnN1cmVzIHRoYXQgYXJpYS1oaWRkZW49
ZmFsc2Ugd2lsbCBhbGxvdyBhIG5vZGUgdG8gYmUgaW4gdGhlIEFYIGhpZXJhcmNoeSBldmVuIGlm
IGl0cyBub3QgcmVuZGVyZWQgb3IgdmlzaWJsZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyAhaGVhZGluZzFfMSB8fCAhaGVhZGluZzFfMS5pc1ZhbGlkIGlzIHRydWUKK1BB
U1MgIWhlYWRpbmcxXzIgfHwgIWhlYWRpbmcxXzMuaXNWYWxpZCBpcyB0cnVlCitQQVNTICFoZWFk
aW5nMV8zIHx8ICFoZWFkaW5nMV8zLmlzVmFsaWQgaXMgdHJ1ZQorUEFTUyBoZWFkaW5nMi5yb2xl
IGlzICdBWFJvbGU6IEFYSGVhZGluZycKK1BBU1MgcGFyZW50LmNoaWxkQXRJbmRleCgwKS5pc0Vx
dWFsKGhlYWRpbmcyKSBpcyB0cnVlCitQQVNTIGhlYWRpbmczLnJvbGUgaXMgJ0FYUm9sZTogQVhI
ZWFkaW5nJworUEFTUyBwYXJlbnQuY2hpbGRBdEluZGV4KDEpLmlzRXF1YWwoaGVhZGluZzMpIGlz
IHRydWUKK1BBU1MgaGVhZGluZzQucm9sZSBpcyAnQVhSb2xlOiBBWEhlYWRpbmcnCitQQVNTIHBh
cmVudC5jaGlsZEF0SW5kZXgoMikuaXNFcXVhbChoZWFkaW5nNCkgaXMgdHJ1ZQorVGV4dGZpZWxk
IFRpdGxlOiBBWFRpdGxlOiAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtaGlkZGVu
LW5lZ2F0ZXMtbm8tdmlzaWJpbGl0eS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5Lmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtaGlkZGVuLW5lZ2F0ZXMt
bm8tdmlzaWJpbGl0eS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYzIEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5IGlkPSJib2R5Ij4KKworPGgxIGhpZGRlbiBpZD0iaGVhZGluZzFf
MSI+aGVhZGluZzEuMTwvaDE+Cis8aDEgYXJpYS1oaWRkZW49InRydWUiIGlkPSJoZWFkaW5nMV8y
Ij5oZWFkaW5nMS4yPC9oMT4KKzxoMSBoaWRkZW4gYXJpYS1oaWRkZW49InRydWUiIGlkPSJoZWFk
aW5nMV8zIj5oZWFkaW5nMS4zPC9oMT4KKworPGgxIGhpZGRlbiBhcmlhLWhpZGRlbj0iZmFsc2Ui
IGlkPSJoZWFkaW5nMiI+aGVhZGluZzI8L2gxPgorPGgxIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBh
cmlhLWhpZGRlbj0iZmFsc2UiIGlkPSJoZWFkaW5nMyI+aGVhZGluZzM8L2gxPgorPGgxIHN0eWxl
PSJ2aXNpYmlsaXR5OmhpZGRlbjsiIGFyaWEtaGlkZGVuPSJmYWxzZSIgaWQ9ImhlYWRpbmc0Ij5o
ZWFkaW5nNDwvaDE+CisKKzxkaXYgaGlkZGVuIGFyaWEtaGlkZGVuPSJmYWxzZSIgaWQ9ImhpZGRl
bkRpdiI+SGlkZGVuVGV4dDE8L2Rpdj4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBhcmlhLWxhYmVsbGVk
Ynk9ImhpZGRlbkRpdiIgaWQ9InRleHRGaWVsZFdpdGhIaWRkZW5MYWJlbGxlciI+CisKKzxwIGlk
PSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+
CisKKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyBlbnN1cmVzIHRoYXQgYXJpYS1oaWRkZW49
ZmFsc2Ugd2lsbCBhbGxvdyBhIG5vZGUgdG8gYmUgaW4gdGhlIEFYIGhpZXJhcmNoeSBldmVuIGlm
IGl0J3Mgbm90IHJlbmRlcmVkIG9yIHZpc2libGUiKTsKKworICAgIGlmICh3aW5kb3cuYWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIpIHsKKworICAgICAgICAvLyBGaXJzdCBncm91cHMgb2YgaGVhZGlu
Z3MgYXJlIGFjdHVhbGx5IGhpZGRlLm4KKyAgICAgICAgdmFyIGhlYWRpbmcxXzEgPSBhY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImhlYWRpbmcxXzEiKTsKKyAg
ICAgICAgc2hvdWxkQmVUcnVlKCIhaGVhZGluZzFfMSB8fCAhaGVhZGluZzFfMS5pc1ZhbGlkIik7
CisKKyAgICAgICAgdmFyIGhlYWRpbmcxXzIgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nl
c3NpYmxlRWxlbWVudEJ5SWQoImhlYWRpbmcxXzIiKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCIh
aGVhZGluZzFfMiB8fCAhaGVhZGluZzFfMy5pc1ZhbGlkIik7CisKKyAgICAgICAgdmFyIGhlYWRp
bmcxXzMgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImhl
YWRpbmcxXzMiKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCIhaGVhZGluZzFfMyB8fCAhaGVhZGlu
ZzFfMy5pc1ZhbGlkIik7CisKKyAgICAgICAgLy8gVGhlc2UgaGVhZGluZ3Mgc2hvdWxkIGJlIGlu
IEFYIHRyZWUgZGVzcGl0ZSBiZWluZyBoaWRkZW4uCisgICAgICAgIHZhciBoZWFkaW5nMiA9IGFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiaGVhZGluZzIiKTsK
KyAgICAgICAgc2hvdWxkQmUoImhlYWRpbmcyLnJvbGUiLCAiJ0FYUm9sZTogQVhIZWFkaW5nJyIp
OworCisgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIG9yZGVyIG9mIHRoZXNlIGVsZW1lbnRzIGlz
IGNvcnJlY3QgYmFzZWQgb24gRE9NIG9yZGVyLgorICAgICAgICB2YXIgcGFyZW50ID0gaGVhZGlu
ZzIucGFyZW50RWxlbWVudCgpOworICAgICAgICBzaG91bGRCZVRydWUoInBhcmVudC5jaGlsZEF0
SW5kZXgoMCkuaXNFcXVhbChoZWFkaW5nMikiKTsKKworICAgICAgICB2YXIgaGVhZGluZzMgPSBh
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImhlYWRpbmczIik7
CisgICAgICAgIHNob3VsZEJlKCJoZWFkaW5nMy5yb2xlIiwgIidBWFJvbGU6IEFYSGVhZGluZyci
KTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCJwYXJlbnQuY2hpbGRBdEluZGV4KDEpLmlzRXF1YWwo
aGVhZGluZzMpIik7CisKKyAgICAgICAgdmFyIGhlYWRpbmc0ID0gYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJoZWFkaW5nNCIpOworICAgICAgICBzaG91bGRC
ZSgiaGVhZGluZzQucm9sZSIsICInQVhSb2xlOiBBWEhlYWRpbmcnIik7CisgICAgICAgIHNob3Vs
ZEJlVHJ1ZSgicGFyZW50LmNoaWxkQXRJbmRleCgyKS5pc0VxdWFsKGhlYWRpbmc0KSIpOworCisg
ICAgICAgIC8vIFRoZSBhcmlhLWxhYmVsbGVkYnkgYXR0cmlidXRlIHNob3VsZCB3b3JrIGV2ZW4g
dGhvdWdoIGhpZGRlbi4KKyAgICAgICAgdmFyIHRleHRGaWVsZCA9IGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgidGV4dEZpZWxkV2l0aEhpZGRlbkxhYmVsbGVy
Iik7CisgICAgICAgIGRlYnVnKCJUZXh0ZmllbGQgVGl0bGU6ICIgKyB0ZXh0RmllbGQudGl0bGUp
OworICAgIH0KKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gMTMxNDc2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMTAtMTYgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNo
QGFwcGxlLmNvbT4KKworICAgICAgICBBWDogYXJpYS1oaWRkZW49ZmFsc2UgZG9lcyBub3Qgd29y
ayBhcyBleHBlY3RlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTg3ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5Lmh0
bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtaGlk
ZGVuLW5lZ2F0ZXMtbm8tdmlzaWJpbGl0eS1leHBlY3RlZC50eHQ6IEFkZGVkLgorCiAyMDEyLTEw
LTE2ICBNaWtlIFJlZWQgIDxyZWVkQGdvb2dsZS5jb20+CiAKICAgICAgICAgdXBkYXRlIGV4cGVj
dGF0aW9ucyBwcmVwYXJpbmcgZm9yIHNraWEgb3B0aW1pemF0aW9uCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxMzE0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSw0OSBAQAorMjAxMi0xMC0xNiAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXph
Y2hAYXBwbGUuY29tPgorCisgICAgICAgIEFYOiBhcmlhLWhpZGRlbj1mYWxzZSBkb2VzIG5vdCB3
b3JrIGFzIGV4cGVjdGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05ODc4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFSSUEgcmVxdWlyZXMgdGhhdCBhcmlhLWhpZGRlbj1mYWxzZSBvdmVycmlkZSBhbiBl
bGVtZW50J3MgbmF0aXZlIHZpc2liaWxpdHkgYW5kIGluY2x1ZGUgdGhhdAorICAgICAgICBub2Rl
IGluIHRoZSBBWCBoaWVyYXJjaHkuCisgCisgICAgICAgIFRvIGFjY29tcGxpc2ggdGhpcyB3ZSBo
YXZlIHRvIGFsbG93IGludmlzaWJsZSBpdGVtcyB0byBiZSBpbmNsdWRlZCwgYXMgd2VsbCBhcyBp
dGVtcyB0aGF0CisgICAgICAgIGhhdmUgbm8gcmVuZGVyZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGVt
LgorCisgICAgICAgIFRlc3Q6IGFjY2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12
aXNpYmlsaXR5Lmh0bWwKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZSk6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkOjphZGRUYWJsZUNlbGxDaGlsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OmFkZENoaWxkcmVuKToKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5oOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eUFSSUFHcmlkKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmJvdW5kaW5nQm94UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aW5zZXJ0Q2hpbGQpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphZGRDaGlsZHJlbik6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dGV4dFVuZGVyRWxlbWVudCk6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp0
ZXh0SXRlcmF0b3JCZWhhdmlvckZvclRleHRSYW5nZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dDo6YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aW5z
ZXJ0Q2hpbGQpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmFjY2Vzc2liaWxpdHlJc0lnbm9yZWRCYXNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZEhpZGRlbkNoaWxkcmVuKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZENoaWxkcmVu
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaDoK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QpOgorCiAyMDEyLTEwLTE2ICBSYXBo
YWVsIEt1Ym8gZGEgQ29zdGEgIDxyYXBoYWVsLmt1Ym8uZGEuY29zdGFAaW50ZWwuY29tPgogCiAg
ICAgICAgIEltcGxlbWVudCB0ZXN0UnVubmVyLmR1bXBTZWxlY3Rpb25SZWN0KCkgaW4gV2ViS2l0
VGVzdFJ1bm5lcgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmgJKHJldmlzaW9uIDEzMTIyNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw2ICszMyw3IEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiRnJhY3Rpb25h
bExheW91dFJlY3QuaCIKICNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIlRleHRJ
dGVyYXRvci5oIgogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgogI2luY2x1ZGUgIlZpc2li
bGVTZWxlY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNTIzLDYgKzUyNCw3
IEBACiAgICAgdmlydHVhbCBJbnRQb2ludCBjbGlja1BvaW50KCk7CiAgICAgc3RhdGljIEludFJl
Y3QgYm91bmRpbmdCb3hGb3JRdWFkcyhSZW5kZXJPYmplY3QqLCBjb25zdCBWZWN0b3I8RmxvYXRR
dWFkPiYpOwogICAgIAorICAgIFRleHRJdGVyYXRvckJlaGF2aW9yIHRleHRJdGVyYXRvckJlaGF2
aW9yRm9yVGV4dFJhbmdlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQbGFpblRleHRSYW5nZSBzZWxl
Y3RlZFRleHRSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7IH0KICAgICB1
bnNpZ25lZCBzZWxlY3Rpb25TdGFydCgpIGNvbnN0IHsgcmV0dXJuIHNlbGVjdGVkVGV4dFJhbmdl
KCkuc3RhcnQ7IH0KICAgICB1bnNpZ25lZCBzZWxlY3Rpb25FbmQoKSBjb25zdCB7IHJldHVybiBz
ZWxlY3RlZFRleHRSYW5nZSgpLmxlbmd0aDsgfQpAQCAtNTY5LDYgKzU3MSw5IEBACiAgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUFjY2Vzc2liaWxpdHlSb2xlKCkgeyB9CiAgICAgY29uc3QgQWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbigpOwogICAgIHZpcnR1YWwgdm9pZCBhZGRD
aGlsZHJlbigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KikgeyB9CisgICAgdmlydHVhbCB2b2lkIGluc2VydENoaWxkKEFjY2Vzc2liaWxpdHlPYmpl
Y3QqLCB1bnNpZ25lZCkgeyB9CisgICAgCiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJl
bigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFzQ2hpbGRyZW4o
KSBjb25zdCB7IHJldHVybiBtX2hhdmVDaGlsZHJlbjsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVDaGlsZHJlbklmTmVjZXNzYXJ5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAkocmV2aXNpb24g
MTMxMjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0OCw2ICsyNDgsNyBAQAogICAgIGJvb2wg
aXNEZXNjZW5kYW50T2ZFbGVtZW50VHlwZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKSBj
b25zdDsKICAgICAvLyBUaGlzIHJldHVybnMgdHJ1ZSBpZiBpdCdzIGZvY3VzYWJsZSBidXQgaXQn
cyBub3QgY29udGVudCBlZGl0YWJsZSBhbmQgaXQncyBub3QgYSBjb250cm9sIG9yIEFSSUEgY29u
dHJvbC4KIAorICAgIHZvaWQgYWRkSGlkZGVuQ2hpbGRyZW4oKTsKICAgICB2b2lkIGFkZFRleHRG
aWVsZENoaWxkcmVuKCk7CiAgICAgdm9pZCBhZGRJbWFnZU1hcENoaWxkcmVuKCk7CiAgICAgdm9p
ZCBhZGRDYW52YXNDaGlsZHJlbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmgJKHJldmlzaW9uIDEzMTIyNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNyAr
MjA4LDggQEAKIH07CiAKIGJvb2wgbm9kZUhhc1JvbGUoTm9kZSosIGNvbnN0IFN0cmluZyYgcm9s
ZSk7Ci0KK2Jvb2wgaXNOb2RlQXJpYUhpZGRlbkZhbHNlKE5vZGUqKTsKKyAgICAKICNpZiAhSEFW
RShBQ0NFU1NJQklMSVRZKQogaW5saW5lIEFYT2JqZWN0Q2FjaGU6OkFYT2JqZWN0Q2FjaGUoY29u
c3QgRG9jdW1lbnQqIGRvYykgOiBtX2RvY3VtZW50KGNvbnN0X2Nhc3Q8RG9jdW1lbnQqPihkb2Mp
KSwgbV9ub3RpZmljYXRpb25Qb3N0VGltZXIodGhpcywgMCkgeyB9CiBpbmxpbmUgQVhPYmplY3RD
YWNoZTo6fkFYT2JqZWN0Q2FjaGUoKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmgJKHJldmlzaW9uIDEz
MTIyNykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDYgKzE1OCw5IEBACiAKICAgICB2aXJ0dWFs
IEFjY2Vzc2liaWxpdHlSb2xlIGRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKCk7CiAgICAgdmly
dHVhbCB2b2lkIGFkZENoaWxkcmVuKCk7CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKEFjY2Vz
c2liaWxpdHlPYmplY3QqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0Q2hpbGQoQWNjZXNzaWJp
bGl0eU9iamVjdCosIHVuc2lnbmVkIGluZGV4KTsKKwogICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZl
Q2hpbGRyZW4oKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgYWNjZXNzaWJpbGl0eUlzSWdub3Jl
ZCgpIGNvbnN0OwogICAgIEFjY2Vzc2liaWxpdHlSb2xlIGFyaWFSb2xlQXR0cmlidXRlKCkgY29u
c3Q7CkBAIC0xNzQsNiArMTc3LDcgQEAKICAgICB2b2lkIGFyaWFMYWJlbGVkQnlFbGVtZW50cyhW
ZWN0b3I8RWxlbWVudCo+JiBlbGVtZW50cykgY29uc3Q7CiAgICAgU3RyaW5nIGFjY2Vzc2liaWxp
dHlEZXNjcmlwdGlvbkZvckVsZW1lbnRzKFZlY3RvcjxFbGVtZW50Kj4gJmVsZW1lbnRzKSBjb25z
dDsKICAgICB2b2lkIGVsZW1lbnRzRnJvbUF0dHJpYnV0ZShWZWN0b3I8RWxlbWVudCo+JiBlbGVt
ZW50cywgY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0UmVj
dCBib3VuZGluZ0JveFJlY3QoKSBjb25zdDsKIAogICAgIEVsZW1lbnQqIG1lbnVFbGVtZW50Rm9y
TWVudUJ1dHRvbigpIGNvbnN0OwogICAgIEVsZW1lbnQqIG1lbnVJdGVtRWxlbWVudEZvck1lbnUo
KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eUFSSUFHcmlkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5QVJJQUdyaWQuaAkocmV2aXNpb24gMTMxMjI3KQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuaAkod29ya2luZyBjb3B5KQpA
QCAtNTgsNyArNTgsNyBAQAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1NlbGVjdGVkUm93cygp
IHsgcmV0dXJuIHRydWU7IH0gICAgCiAgICAgdmlydHVhbCBib29sIGlzTXVsdGlTZWxlY3RhYmxl
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIAotICAgIGJvb2wgYWRkQ2hpbGQoQWNjZXNz
aWJpbGl0eU9iamVjdCosIEhhc2hTZXQ8QWNjZXNzaWJpbGl0eU9iamVjdCo+JiBhcHBlbmRlZFJv
d3MsIHVuc2lnbmVkJiBjb2x1bW5Db3VudCk7CisgICAgYm9vbCBhZGRUYWJsZUNlbGxDaGlsZChB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiwgSGFzaFNldDxBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4mIGFwcGVu
ZGVkUm93cywgdW5zaWduZWQmIGNvbHVtbkNvdW50KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDEzMTIyNykKKysrIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDYgQEAKICNpbmNsdWRlICJSZW5kZXJlZFBvc2l0
aW9uLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRDb250cm9sSW5uZXJFbGVt
ZW50cy5oIgotI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5n
LmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KQEAgLTU5OSwxOSArNTk4LDYgQEAKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXN0
YXRpYyBUZXh0SXRlcmF0b3JCZWhhdmlvciB0ZXh0SXRlcmF0b3JCZWhhdmlvckZvclRleHRSYW5n
ZSgpCi17Ci0gICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JJ
Z25vcmVzU3R5bGVWaXNpYmlsaXR5OwotCi0jaWYgUExBVEZPUk0oR1RLKQotICAgIC8vIFdlIG5l
ZWQgdG8gZW1pdCByZXBsYWNlZCBlbGVtZW50cyBmb3IgR1RLLCBhbmQgcHJlc2VudAotICAgIC8v
IHRoZW0gd2l0aCB0aGUgJ29iamVjdCByZXBsYWNlbWVudCBjaGFyYWN0ZXInICgweEZGRkMpLgot
ICAgIGJlaGF2aW9yID0gc3RhdGljX2Nhc3Q8VGV4dEl0ZXJhdG9yQmVoYXZpb3I+KGJlaGF2aW9y
IHwgVGV4dEl0ZXJhdG9yRW1pdHNPYmplY3RSZXBsYWNlbWVudENoYXJhY3RlcnMpOwotI2VuZGlm
Ci0KLSAgICByZXR1cm4gYmVoYXZpb3I7Ci19Ci0KIFN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0Ojp0ZXh0VW5kZXJFbGVtZW50KCkgY29uc3QKIHsKICAgICBpZiAoIW1fcmVuZGVyZXIp
CkBAIC0xMTAxLDEwICsxMDg3LDE3IEBACiB7CiAgICAgLy8gVGhlIGZvbGxvd2luZyBjYXNlcyBj
YW4gYXBwbHkgdG8gYW55IGVsZW1lbnQgdGhhdCdzIGEgc3ViY2xhc3Mgb2YgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC4KICAgICAKLSAgICAvLyBJZ25vcmUgaW52aXNpYmxlIGVsZW1lbnRzLgot
ICAgIGlmICghbV9yZW5kZXJlciB8fCBtX3JlbmRlcmVyLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkg
IT0gVklTSUJMRSkKKyAgICBpZiAoIW1fcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBJZ25vcmVP
YmplY3Q7CiAKKyAgICBpZiAobV9yZW5kZXJlci0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJ
U0lCTEUpIHsKKyAgICAgICAgLy8gYXJpYS1oaWRkZW4gaXMgbWVhbnQgdG8gb3ZlcnJpZGUgdmlz
aWJpbGl0eSBhcyB0aGUgZGV0ZXJtaW5hbnQgaW4gQVggaGllcmFyY2h5IGluY2x1c2lvbi4KKyAg
ICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGdldEF0dHJpYnV0ZShhcmlhX2hpZGRlbkF0dHIp
LCAiZmFsc2UiKSkKKyAgICAgICAgICAgIHJldHVybiBEZWZhdWx0QmVoYXZpb3I7CisgICAgICAg
IAorICAgICAgICByZXR1cm4gSWdub3JlT2JqZWN0OworICAgIH0KKyAgICAKICAgICAvLyBBbnl0
aGluZyBtYXJrZWQgYXMgYXJpYS1oaWRkZW4gb3IgYSBjaGlsZCBvZiBzb21ldGhpbmcgYXJpYS1o
aWRkZW4gbXVzdCBiZSBoaWRkZW4uCiAgICAgaWYgKGFyaWFJc0hpZGRlbigpKQogICAgICAgICBy
ZXR1cm4gSWdub3JlT2JqZWN0OwpAQCAtMjcxNyw2ICsyNzEwLDU5IEBACiB9CiAjZW5kaWYKIAor
Ly8gSGlkZGVuIGNoaWxkcmVuIGFyZSB0aG9zZSB0aGF0IGFyZSBub3QgcmVuZGVyZWQgb3Igdmlz
aWJsZSwgYnV0IGFyZSBzcGVjaWZpY2FsbHkgbWFya2VkIGFzIGFyaWEtaGlkZGVuPWZhbHNlLAor
Ly8gbWVhbmluZyB0aGF0IHRoZXkgc2hvdWxkIGJlIGV4cG9zZWQgdG8gdGhlIEFYIGhpZXJhcmNo
eS4KK3ZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkSGlkZGVuQ2hpbGRyZW4oKQor
eworICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgLy8gRmlyc3QgZG8gYSBxdWljayBydW4gdGhyb3VnaCB0byBk
ZXRlcm1pbmUgaWYgd2UgaGF2ZSBhbnkgaGlkZGVuIG5vZGVzIChtb3N0IG9mdGVuIHdlIHdpbGwg
bm90KS4KKyAgICAvLyBJZiB3ZSBkbyBoYXZlIGhpZGRlbiBub2Rlcywgd2UgbmVlZCB0byBkZXRl
cm1pbmUgd2hlcmUgdG8gaW5zZXJ0IHRoZW0gc28gdGhleSBtYXRjaCBET00gb3JkZXIgYXMgY2xv
c2UgYXMgcG9zc2libGUuCisgICAgYm9vbCBzaG91bGRJbnNlcnRIaWRkZW5Ob2RlcyA9IGZhbHNl
OworICAgIGZvciAoTm9kZSogY2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmICghY2hpbGQtPnJlbmRlcmVy
KCkgJiYgaXNOb2RlQXJpYUhpZGRlbkZhbHNlKGNoaWxkKSkgeworICAgICAgICAgICAgc2hvdWxk
SW5zZXJ0SGlkZGVuTm9kZXMgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgaWYgKCFzaG91bGRJbnNlcnRIaWRkZW5Ob2RlcykKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCBhbGwgb2YgdGhlIGNoaWxkcmVu
LCBpbmNsdWRpbmcgdGhvc2UgdGhhdCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gYWRkZWQsIGFuZAor
ICAgIC8vIHRyeSB0byBpbnNlcnQgaGlkZGVuIG5vZGVzIGluIHRoZSBjb3JyZWN0IHBsYWNlIGlu
IHRoZSBET00gb3JkZXIuCisgICAgdW5zaWduZWQgaW5zZXJ0aW9uSW5kZXggPSAwOworICAgIGZv
ciAoTm9kZSogY2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxk
LT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChjaGlsZC0+cmVuZGVyZXIoKSkgeworICAg
ICAgICAgICAgLy8gRmluZCBvdXQgd2hlcmUgdGhlIGxhc3QgcmVuZGVyIHNpYmxpbmcgaXMgbG9j
YXRlZCB3aXRoaW4gbV9jaGlsZHJlbi4KKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGNoaWxkT2JqZWN0ID0gYXhPYmplY3RDYWNoZSgpLT5nZXQoY2hpbGQtPnJlbmRlcmVyKCkpOwor
ICAgICAgICAgICAgaWYgKGNoaWxkT2JqZWN0ICYmIGNoaWxkT2JqZWN0LT5hY2Nlc3NpYmlsaXR5
SXNJZ25vcmVkKCkpIHsKKyAgICAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3IgY2hpbGRyZW4gPSBjaGlsZE9iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICAgICAgICAgICAgICBp
ZiAoY2hpbGRyZW4uc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBjaGlsZE9iamVjdCA9IGNo
aWxkcmVuLmxhc3QoKS5nZXQoKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIGNoaWxkT2JqZWN0ID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGNoaWxkT2JqZWN0KQorICAgICAgICAgICAgICAgIGluc2VydGlvbkluZGV4ID0gbV9jaGlsZHJl
bi5maW5kKGNoaWxkT2JqZWN0KSArIDE7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICghaXNOb2RlQXJpYUhpZGRlbkZhbHNlKGNoaWxkKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgcHJldmlvdXNTaXplID0g
bV9jaGlsZHJlbi5zaXplKCk7CisgICAgICAgIGlmIChpbnNlcnRpb25JbmRleCA+IHByZXZpb3Vz
U2l6ZSkKKyAgICAgICAgICAgIGluc2VydGlvbkluZGV4ID0gcHJldmlvdXNTaXplOworICAgICAg
ICAKKyAgICAgICAgaW5zZXJ0Q2hpbGQoYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShjaGls
ZCksIGluc2VydGlvbkluZGV4KTsKKyAgICAgICAgaW5zZXJ0aW9uSW5kZXggKz0gKG1fY2hpbGRy
ZW4uc2l6ZSgpIC0gcHJldmlvdXNTaXplKTsKKyAgICB9Cit9CisgICAgCiB2b2lkIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmFkZENoaWxkcmVuKCkKIHsKICAgICAvLyBJZiB0aGUgbmVlZCB0
byBhZGQgbW9yZSBjaGlsZHJlbiBpbiBhZGRpdGlvbiB0byBleGlzdGluZyBjaGlsZHJlbiBhcmlz
ZXMsIApAQCAtMjcyOCwyNCArMjc3NCwxMCBAQAogICAgIGlmICghY2FuSGF2ZUNoaWxkcmVuKCkp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICAvLyBhZGQgYWxsIHVuaWdub3JlZCBhY2MgY2hp
bGRyZW4KLSAgICBmb3IgKFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmogPSBmaXJzdENo
aWxkKCk7IG9iajsgb2JqID0gb2JqLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIC8vIElmIHRo
ZSBwYXJlbnQgaXMgYXNraW5nIGZvciB0aGlzIGNoaWxkJ3MgY2hpbGRyZW4sIHRoZW4gZWl0aGVy
IGl0J3MgdGhlIGZpcnN0IHRpbWUgKGFuZCBjbGVhcmluZyBpcyBhIG5vLW9wKSwgCi0gICAgICAg
IC8vIG9yIGl0cyB2aXNpYmlsaXR5IGhhcyBjaGFuZ2VkLiBJbiB0aGUgbGF0dGVyIGNhc2UsIHRo
aXMgY2hpbGQgbWF5IGhhdmUgYSBzdGFsZSBjaGlsZCBjYWNoZWQuIAotICAgICAgICAvLyBUaGlz
IGNhbiBwcmV2ZW50IGFyaWEtaGlkZGVuIGNoYW5nZXMgZnJvbSB3b3JraW5nIGNvcnJlY3RseS4g
SGVuY2UsIHdoZW5ldmVyIGEgcGFyZW50IGlzIGdldHRpbmcgY2hpbGRyZW4sIGVuc3VyZSBkYXRh
IGlzIG5vdCBzdGFsZS4KLSAgICAgICAgb2JqLT5jbGVhckNoaWxkcmVuKCk7Ci0KLSAgICAgICAg
aWYgKG9iai0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKSB7Ci0gICAgICAgICAgICBBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBvYmotPmNoaWxkcmVuKCk7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBjaGlsZHJlbi5zaXplKCk7Ci0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgbV9jaGls
ZHJlbi5hcHBlbmQoY2hpbGRyZW5baV0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
QVNTRVJUKG9iai0+cGFyZW50T2JqZWN0KCkgPT0gdGhpcyk7Ci0gICAgICAgICAgICBtX2NoaWxk
cmVuLmFwcGVuZChvYmopOwotICAgICAgICB9Ci0gICAgfQorICAgIGZvciAoUmVmUHRyPEFjY2Vz
c2liaWxpdHlPYmplY3Q+IG9iaiA9IGZpcnN0Q2hpbGQoKTsgb2JqOyBvYmogPSBvYmotPm5leHRT
aWJsaW5nKCkpCisgICAgICAgIGFkZENoaWxkKG9iai5nZXQoKSk7CiAgICAgCisgICAgYWRkSGlk
ZGVuQ2hpbGRyZW4oKTsKICAgICBhZGRBdHRhY2htZW50Q2hpbGRyZW4oKTsKICAgICBhZGRJbWFn
ZU1hcENoaWxkcmVuKCk7CiAgICAgYWRkVGV4dEZpZWxkQ2hpbGRyZW4oKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cAkocmV2aXNpb24gMTMxMjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3Niw2ICsxNzc2LDE5IEBA
CiAgICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoYXJpYV9wcmVzc2VkQXR0cikuaXNFbXB0eSgpOwog
fQogCitUZXh0SXRlcmF0b3JCZWhhdmlvciBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp0ZXh0SXRlcmF0
b3JCZWhhdmlvckZvclRleHRSYW5nZSgpIGNvbnN0Cit7CisgICAgVGV4dEl0ZXJhdG9yQmVoYXZp
b3IgYmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5OworICAgIAor
I2lmIFBMQVRGT1JNKEdUSykKKyAgICAvLyBXZSBuZWVkIHRvIGVtaXQgcmVwbGFjZWQgZWxlbWVu
dHMgZm9yIEdUSywgYW5kIHByZXNlbnQKKyAgICAvLyB0aGVtIHdpdGggdGhlICdvYmplY3QgcmVw
bGFjZW1lbnQgY2hhcmFjdGVyJyAoMHhGRkZDKS4KKyAgICBiZWhhdmlvciA9IHN0YXRpY19jYXN0
PFRleHRJdGVyYXRvckJlaGF2aW9yPihiZWhhdmlvciB8IFRleHRJdGVyYXRvckVtaXRzT2JqZWN0
UmVwbGFjZW1lbnRDaGFyYWN0ZXJzKTsKKyNlbmRpZgorICAgIAorICAgIHJldHVybiBiZWhhdmlv
cjsKK30KKyAgICAKIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmJ1dHRv
blJvbGVUeXBlKCkgY29uc3QKIHsKICAgICAvLyBJZiBhcmlhLXByZXNzZWQgaXMgcHJlc2VudCwg
dGhlbiBpdCBzaG91bGQgYmUgZXhwb3NlZCBhcyBhIHRvZ2dsZSBidXR0b24uCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJKHJldmlzaW9u
IDEzMTIyNykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNiw4ICszMTYsMTQgQEAKICAgICBpZiAobm9kZS0+cmVu
ZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGdldE9yQ3JlYXRlKG5vZGUtPnJlbmRlcmVyKCkpOwog
CisgICAgaWYgKCFub2RlLT5wYXJlbnRFbGVtZW50KCkpCisgICAgICAgIHJldHVybiAwOworICAg
IAogICAgIC8vIEl0J3Mgb25seSBhbGxvd2VkIHRvIGNyZWF0ZSBhbiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0IGZyb20gYSBOb2RlIGlmIGl0J3MgaW4gYSBjYW52YXMgc3VidHJlZS4KLSAgICBpZiAoIW5v
ZGUtPnBhcmVudEVsZW1lbnQoKSB8fCAhbm9kZS0+cGFyZW50RWxlbWVudCgpLT5pc0luQ2FudmFz
U3VidHJlZSgpKQorICAgIC8vIE9yIGlmIGl0J3MgYSBoaWRkZW4gZWxlbWVudCwgYnV0IHdlIHN0
aWxsIHdhbnQgdG8gZXhwb3NlIGl0IGJlY2F1c2Ugb2Ygb3RoZXIgQVJJQSBhdHRyaWJ1dGVzLgor
ICAgIGJvb2wgaW5DYW52YXNTdWJ0cmVlID0gbm9kZS0+cGFyZW50RWxlbWVudCgpLT5pc0luQ2Fu
dmFzU3VidHJlZSgpOworICAgIGJvb2wgaXNIaWRkZW4gPSAhbm9kZS0+cmVuZGVyZXIoKSAmJiBp
c05vZGVBcmlhSGlkZGVuRmFsc2Uobm9kZSk7CisgICAgaWYgKCFpbkNhbnZhc1N1YnRyZWUgJiYg
IWlzSGlkZGVuKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5
T2JqZWN0PiBuZXdPYmogPSBjcmVhdGVGcm9tTm9kZShub2RlKTsKQEAgLTc4Myw2ICs3ODksMTcg
QEAKICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iamVjdCA9IGdldE9yQ3JlYXRl
KGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpKTsKICAgICByZXR1cm4gYXhPYmplY3QgJiYgYXhPYmpl
Y3QtPmlzVGV4dENvbnRyb2woKTsKIH0KKyAgICAKK2Jvb2wgaXNOb2RlQXJpYUhpZGRlbkZhbHNl
KE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UodG9FbGVtZW50KG5vZGUpLT5n
ZXRBdHRyaWJ1dGUoYXJpYV9oaWRkZW5BdHRyKSwgImZhbHNlIik7Cit9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9uIDEzMTIyNykKKysr
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNiArMjIxLDI2IEBACiB7CiAgICAgcmV0dXJuIGJvdW5k
aW5nQm94UmVjdCgpOwogfQorICAgIAorTGF5b3V0UmVjdCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dDo6Ym91bmRpbmdCb3hSZWN0KCkgY29uc3QKK3sKKyAgICAvLyBBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdHMgaGF2ZSBubyBtZWNoYW5pc20geWV0IHRvIHJldHVybiBhIHNpemUgb3IgcG9zaXRpb24u
CisgICAgLy8gRm9yIG5vdywgbGV0J3MgcmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgYW5jZXN0
b3IgdGhhdCBkb2VzIGhhdmUgYSBwb3NpdGlvbiwKKyAgICAvLyBhbmQgbWFrZSBpdCB0aGUgd2lk
dGggb2YgdGhhdCBwYXJlbnQsIGFuZCBhYm91dCB0aGUgaGVpZ2h0IG9mIGEgbGluZSBvZiB0ZXh0
LCBzbyB0aGF0IGl0J3MgY2xlYXIgdGhlIG9iamVjdCBpcyBhIGNoaWxkIG9mIHRoZSBwYXJlbnQu
CisgICAgCisgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveDsKKyAgICAKKyAgICBmb3IgKEFjY2Vz
c2liaWxpdHlPYmplY3QqIHBvc2l0aW9uUHJvdmlkZXIgPSBwYXJlbnRPYmplY3QoKTsgcG9zaXRp
b25Qcm92aWRlcjsgcG9zaXRpb25Qcm92aWRlciA9IHBvc2l0aW9uUHJvdmlkZXItPnBhcmVudE9i
amVjdCgpKSB7CisgICAgICAgIGlmIChwb3NpdGlvblByb3ZpZGVyLT5pc0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QoKSkgeworICAgICAgICAgICAgTGF5b3V0UmVjdCBwYXJlbnRSZWN0ID0gcG9z
aXRpb25Qcm92aWRlci0+ZWxlbWVudFJlY3QoKTsKKyAgICAgICAgICAgIGJvdW5kaW5nQm94LnNl
dFNpemUoTGF5b3V0U2l6ZShwYXJlbnRSZWN0LndpZHRoKCksIEZyYWN0aW9uYWxMYXlvdXRVbml0
KHN0ZDo6bWluKDEwLjBmLCBwYXJlbnRSZWN0LmhlaWdodCgpLnRvRmxvYXQoKSkpKSk7CisgICAg
ICAgICAgICBib3VuZGluZ0JveC5zZXRMb2NhdGlvbihwYXJlbnRSZWN0LmxvY2F0aW9uKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIGJv
dW5kaW5nQm94OworfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpzZXROb2RlKE5v
ZGUqIG5vZGUpCiB7CkBAIC0yODMsNiArMzAzLDMyIEBACiAgICAgcmV0dXJuIFVua25vd25Sb2xl
OwogfQogCit2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjppbnNlcnRDaGlsZChBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBjaGlsZCwgdW5zaWduZWQgaW5kZXgpCit7CisgICAgaWYgKCFjaGlsZCkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIElmIHRoZSBwYXJlbnQgaXMgYXNraW5nIGZv
ciB0aGlzIGNoaWxkJ3MgY2hpbGRyZW4sIHRoZW4gZWl0aGVyIGl0J3MgdGhlIGZpcnN0IHRpbWUg
KGFuZCBjbGVhcmluZyBpcyBhIG5vLW9wKSwKKyAgICAvLyBvciBpdHMgdmlzaWJpbGl0eSBoYXMg
Y2hhbmdlZC4gSW4gdGhlIGxhdHRlciBjYXNlLCB0aGlzIGNoaWxkIG1heSBoYXZlIGEgc3RhbGUg
Y2hpbGQgY2FjaGVkLgorICAgIC8vIFRoaXMgY2FuIHByZXZlbnQgYXJpYS1oaWRkZW4gY2hhbmdl
cyBmcm9tIHdvcmtpbmcgY29ycmVjdGx5LiBIZW5jZSwgd2hlbmV2ZXIgYSBwYXJlbnQgaXMgZ2V0
dGluZyBjaGlsZHJlbiwgZW5zdXJlIGRhdGEgaXMgbm90IHN0YWxlLgorICAgIGNoaWxkLT5jbGVh
ckNoaWxkcmVuKCk7CisgICAgCisgICAgaWYgKGNoaWxkLT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVk
KCkpIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gY2hp
bGQtPmNoaWxkcmVuKCk7CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBjaGlsZHJlbi5zaXplKCk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAg
ICBtX2NoaWxkcmVuLmluc2VydChpbmRleCArIGksIGNoaWxkcmVuW2ldKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBBU1NFUlQoY2hpbGQtPnBhcmVudE9iamVjdCgpID09IHRoaXMpOworICAgICAg
ICBtX2NoaWxkcmVuLmluc2VydChpbmRleCwgY2hpbGQpOworICAgIH0KK30KKwordm9pZCBBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6YWRkQ2hpbGQoQWNjZXNzaWJpbGl0eU9iamVjdCogY2hpbGQp
Cit7CisgICAgaW5zZXJ0Q2hpbGQoY2hpbGQsIG1fY2hpbGRyZW4uc2l6ZSgpKTsKK30KKwogdm9p
ZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWRkQ2hpbGRyZW4oKQogewogICAgIC8vIElmIHRo
ZSBuZWVkIHRvIGFkZCBtb3JlIGNoaWxkcmVuIGluIGFkZGl0aW9uIHRvIGV4aXN0aW5nIGNoaWxk
cmVuIGFyaXNlcywgCkBAIC0yOTgsMTkgKzM0NCw4IEBACiAgICAgaWYgKHJlbmRlcmVyKCkgJiYg
IW1fbm9kZS0+aGFzVGFnTmFtZShjYW52YXNUYWcpKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgZm9yIChOb2RlKiBjaGlsZCA9IG1fbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9i
amVjdD4gb2JqID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShjaGlsZCk7Ci0gICAgICAg
IG9iai0+Y2xlYXJDaGlsZHJlbigpOwotICAgICAgICBpZiAob2JqLT5hY2Nlc3NpYmlsaXR5SXNJ
Z25vcmVkKCkpIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGls
ZHJlbiA9IG9iai0+Y2hpbGRyZW4oKTsKLSAgICAgICAgICAgIHNpemVfdCBsZW5ndGggPSBjaGls
ZHJlbi5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKQotICAgICAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGNoaWxkcmVuW2ldKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChvYmotPnBhcmVudE9iamVjdCgpID09
IHRoaXMpOwotICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQob2JqKTsKLSAgICAgICAgfQot
ICAgIH0KKyAgICBmb3IgKE5vZGUqIGNoaWxkID0gbV9ub2RlLT5maXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICBhZGRDaGlsZChheE9iamVj
dENhY2hlKCktPmdldE9yQ3JlYXRlKGNoaWxkKSk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmNhbkhhdmVDaGlsZHJlbigpIGNvbnN0CkBAIC0xMTg2LDcgKzEyMjEsOSBAQAog
ICAgIC8vIElmIHRoaXMgY291bGQgYmUgZml4ZWQsIGl0J2QgYmUgbW9yZSBhY2N1cmF0ZSB1c2Ug
VGV4dEl0ZXJhdG9yIGhlcmUuCiAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAg
ICAgcmV0dXJuIHRvRWxlbWVudChub2RlKS0+aW5uZXJUZXh0KCk7Ci0KKyAgICBlbHNlIGlmIChu
b2RlLT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybiB0b1RleHQobm9kZSktPndob2xlVGV4
dCgpOworICAgIAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcAko
cmV2aXNpb24gMTMxMjI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5QVJJQUdyaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBACiAgICAg
cmV0dXJuIGFkb3B0UmVmKG9iaik7CiB9CiAKLWJvb2wgQWNjZXNzaWJpbGl0eUFSSUFHcmlkOjph
ZGRDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjaGlsZCwgSGFzaFNldDxBY2Nlc3NpYmlsaXR5
T2JqZWN0Kj4mIGFwcGVuZGVkUm93cywgdW5zaWduZWQmIGNvbHVtbkNvdW50KQorYm9vbCBBY2Nl
c3NpYmlsaXR5QVJJQUdyaWQ6OmFkZFRhYmxlQ2VsbENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGNoaWxkLCBIYXNoU2V0PEFjY2Vzc2liaWxpdHlPYmplY3QqPiYgYXBwZW5kZWRSb3dzLCB1bnNp
Z25lZCYgY29sdW1uQ291bnQpCiB7CiAgICAgaWYgKCFjaGlsZCB8fCAhY2hpbGQtPmlzVGFibGVS
b3coKSB8fCBjaGlsZC0+YXJpYVJvbGVBdHRyaWJ1dGUoKSAhPSBSb3dSb2xlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICB1bnNpZ25lZCBjb2x1bW5Db3Vu
dCA9IDA7CiAgICAgZm9yIChSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gY2hpbGQgPSBmaXJz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAKLSAgICAg
ICAgaWYgKCFhZGRDaGlsZChjaGlsZC5nZXQoKSwgYXBwZW5kZWRSb3dzLCBjb2x1bW5Db3VudCkp
IHsKKyAgICAgICAgaWYgKCFhZGRUYWJsZUNlbGxDaGlsZChjaGlsZC5nZXQoKSwgYXBwZW5kZWRS
b3dzLCBjb2x1bW5Db3VudCkpIHsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gaW4gY2Fz
ZSB0aGUgcmVuZGVyIHRyZWUgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQgQVJJQSBoaWVyYXJj
aHksIGxvb2sgYXQgdGhlIGNoaWxkcmVuCiAgICAgICAgICAgICBpZiAoIWNoaWxkLT5oYXNDaGls
ZHJlbigpKQpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBjaGlsZC0+Y2hpbGRyZW4oKTsKICAgICAgICAgICAgIHNp
emVfdCBsZW5ndGggPSBjaGlsZHJlbi5zaXplKCk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIGFkZENoaWxkKGNoaWxkcmVu
W2ldLmdldCgpLCBhcHBlbmRlZFJvd3MsIGNvbHVtbkNvdW50KTsKKyAgICAgICAgICAgICAgICBh
ZGRUYWJsZUNlbGxDaGlsZChjaGlsZHJlbltpXS5nZXQoKSwgYXBwZW5kZWRSb3dzLCBjb2x1bW5D
b3VudCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCg==
</data>
<flag name="commit-queue"
          id="182119"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169049</attachid>
            <date>2012-10-16 16:13:40 -0700</date>
            <delta_ts>2012-10-18 16:58:25 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>25212</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTQ5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTEwLTE2ICBDaHJpcyBG
bGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IGFyaWEtaGlkZGVu
PWZhbHNlIGRvZXMgbm90IHdvcmsgYXMgZXhwZWN0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4Nzg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQVJJQSByZXF1aXJlcyB0aGF0IGFyaWEtaGlkZGVuPWZh
bHNlIG92ZXJyaWRlIGFuIGVsZW1lbnQncyBuYXRpdmUgdmlzaWJpbGl0eSBhbmQgaW5jbHVkZSB0
aGF0CisgICAgICAgIG5vZGUgaW4gdGhlIEFYIGhpZXJhcmNoeS4KKyAKKyAgICAgICAgVG8gYWNj
b21wbGlzaCB0aGlzIHdlIGhhdmUgdG8gYWxsb3cgaW52aXNpYmxlIGl0ZW1zIHRvIGJlIGluY2x1
ZGVkLCBhcyB3ZWxsIGFzIGl0ZW1zIHRoYXQKKyAgICAgICAgaGF2ZSBubyByZW5kZXJlcnMgYXNz
b2NpYXRlZCB3aXRoIHRoZW0uCisKKyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0eS9hcmlhLWhp
ZGRlbi1uZWdhdGVzLW5vLXZpc2liaWxpdHkuaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Omdl
dE9yQ3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3Jp
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OmFkZFRhYmxl
Q2VsbENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZDo6YWRk
Q2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlk
Lmg6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5QVJJQUdyaWQpOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Ym91bmRpbmdCb3hSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjppbnNlcnRDaGls
ZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWRkQ2hpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFkZENoaWxkcmVu
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0ZXh0VW5kZXJF
bGVtZW50KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
Lmg6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3Q6OnRleHRJdGVyYXRvckJlaGF2aW9yRm9yVGV4dFJhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5oOgorICAgICAgICAoQWNjZXNzaWJpbGl0eU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjphZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0OjppbnNlcnRDaGlsZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3Jl
ZEJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRk
SGlkZGVuQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5oOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCk6CisK
IDIwMTItMTAtMTYgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAg
IFVwZGF0ZSBpbmRlbnRhdGlvbiBpbiAqUmVzb3VyY2VMb2FkZXIgaGVhZGVycyB0byBtYXRjaCBt
b2Rlcm4gV2ViS2l0IHN0eWxlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAkocmV2aXNpb24gMTMxNDky
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0OCw2ICsyNDgsNyBAQAogICAgIGJvb2wgaXNEZXNj
ZW5kYW50T2ZFbGVtZW50VHlwZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKSBjb25zdDsK
ICAgICAvLyBUaGlzIHJldHVybnMgdHJ1ZSBpZiBpdCdzIGZvY3VzYWJsZSBidXQgaXQncyBub3Qg
Y29udGVudCBlZGl0YWJsZSBhbmQgaXQncyBub3QgYSBjb250cm9sIG9yIEFSSUEgY29udHJvbC4K
IAorICAgIHZvaWQgYWRkSGlkZGVuQ2hpbGRyZW4oKTsKICAgICB2b2lkIGFkZFRleHRGaWVsZENo
aWxkcmVuKCk7CiAgICAgdm9pZCBhZGRJbWFnZU1hcENoaWxkcmVuKCk7CiAgICAgdm9pZCBhZGRD
YW52YXNDaGlsZHJlbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgJKHJldmlzaW9uIDEzMTQ5MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiRnJh
Y3Rpb25hbExheW91dFJlY3QuaCIKICNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUg
IlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgogI2luY2x1ZGUg
IlZpc2libGVTZWxlY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNTIzLDYg
KzUyNCw3IEBACiAgICAgdmlydHVhbCBJbnRQb2ludCBjbGlja1BvaW50KCk7CiAgICAgc3RhdGlj
IEludFJlY3QgYm91bmRpbmdCb3hGb3JRdWFkcyhSZW5kZXJPYmplY3QqLCBjb25zdCBWZWN0b3I8
RmxvYXRRdWFkPiYpOwogICAgIAorICAgIFRleHRJdGVyYXRvckJlaGF2aW9yIHRleHRJdGVyYXRv
ckJlaGF2aW9yRm9yVGV4dFJhbmdlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQbGFpblRleHRSYW5n
ZSBzZWxlY3RlZFRleHRSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7IH0K
ICAgICB1bnNpZ25lZCBzZWxlY3Rpb25TdGFydCgpIGNvbnN0IHsgcmV0dXJuIHNlbGVjdGVkVGV4
dFJhbmdlKCkuc3RhcnQ7IH0KICAgICB1bnNpZ25lZCBzZWxlY3Rpb25FbmQoKSBjb25zdCB7IHJl
dHVybiBzZWxlY3RlZFRleHRSYW5nZSgpLmxlbmd0aDsgfQpAQCAtNTY5LDYgKzU3MSw5IEBACiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFjY2Vzc2liaWxpdHlSb2xlKCkgeyB9CiAgICAgY29uc3Qg
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbigpOwogICAgIHZpcnR1YWwgdm9p
ZCBhZGRDaGlsZHJlbigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChBY2Nlc3NpYmls
aXR5T2JqZWN0KikgeyB9CisgICAgdmlydHVhbCB2b2lkIGluc2VydENoaWxkKEFjY2Vzc2liaWxp
dHlPYmplY3QqLCB1bnNpZ25lZCkgeyB9CisgICAgCiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVD
aGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFzQ2hp
bGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2hhdmVDaGlsZHJlbjsgfQogICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVDaGlsZHJlbklmTmVjZXNzYXJ5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAkocmV2aXNpb24gMTMxNDkyKQorKysgU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIwOCw3ICsyMDgsOCBAQAogfTsKIAogYm9vbCBub2RlSGFzUm9sZShOb2RlKiwgY29uc3QgU3Ry
aW5nJiByb2xlKTsKLQorYm9vbCBpc05vZGVBcmlhSGlkZGVuRmFsc2UoTm9kZSopOworICAgIAog
I2lmICFIQVZFKEFDQ0VTU0lCSUxJVFkpCiBpbmxpbmUgQVhPYmplY3RDYWNoZTo6QVhPYmplY3RD
YWNoZShjb25zdCBEb2N1bWVudCogZG9jKSA6IG1fZG9jdW1lbnQoY29uc3RfY2FzdDxEb2N1bWVu
dCo+KGRvYykpLCBtX25vdGlmaWNhdGlvblBvc3RUaW1lcih0aGlzLCAwKSB7IH0KIGlubGluZSBB
WE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSgpIHsgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaAkocmV2
aXNpb24gMTMxNDkyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNiArMTU4LDkgQEAKIAogICAg
IHZpcnR1YWwgQWNjZXNzaWJpbGl0eVJvbGUgZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRyZW4oKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hp
bGQoQWNjZXNzaWJpbGl0eU9iamVjdCopOworICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRDaGlsZChB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiwgdW5zaWduZWQgaW5kZXgpOworCiAgICAgdmlydHVhbCBib29s
IGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBhY2Nlc3NpYmlsaXR5
SXNJZ25vcmVkKCkgY29uc3Q7CiAgICAgQWNjZXNzaWJpbGl0eVJvbGUgYXJpYVJvbGVBdHRyaWJ1
dGUoKSBjb25zdDsKQEAgLTE3NCw2ICsxNzcsNyBAQAogICAgIHZvaWQgYXJpYUxhYmVsZWRCeUVs
ZW1lbnRzKFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRzKSBjb25zdDsKICAgICBTdHJpbmcgYWNj
ZXNzaWJpbGl0eURlc2NyaXB0aW9uRm9yRWxlbWVudHMoVmVjdG9yPEVsZW1lbnQqPiAmZWxlbWVu
dHMpIGNvbnN0OwogICAgIHZvaWQgZWxlbWVudHNGcm9tQXR0cmlidXRlKFZlY3RvcjxFbGVtZW50
Kj4mIGVsZW1lbnRzLCBjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CisgICAgdmlydHVhbCBM
YXlvdXRSZWN0IGJvdW5kaW5nQm94UmVjdCgpIGNvbnN0OwogCiAgICAgRWxlbWVudCogbWVudUVs
ZW1lbnRGb3JNZW51QnV0dG9uKCkgY29uc3Q7CiAgICAgRWxlbWVudCogbWVudUl0ZW1FbGVtZW50
Rm9yTWVudSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5QVJJQUdyaWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5oCShyZXZpc2lvbiAxMzE0OTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01OCw3ICs1OCw3IEBACiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzU2VsZWN0
ZWRSb3dzKCkgeyByZXR1cm4gdHJ1ZTsgfSAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNNdWx0aVNl
bGVjdGFibGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgCi0gICAgYm9vbCBhZGRDaGls
ZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgSGFzaFNldDxBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4mIGFw
cGVuZGVkUm93cywgdW5zaWduZWQmIGNvbHVtbkNvdW50KTsKKyAgICBib29sIGFkZFRhYmxlQ2Vs
bENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBIYXNoU2V0PEFjY2Vzc2liaWxpdHlPYmplY3Qq
PiYgYXBwZW5kZWRSb3dzLCB1bnNpZ25lZCYgY29sdW1uQ291bnQpOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZSAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTMxNDky
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNiBAQAogI2luY2x1ZGUgIlJlbmRl
cmVkUG9zaXRpb24uaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJ
bm5lckVsZW1lbnRzLmgiCi0jaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiaHRt
bGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCiAjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgpAQCAtNTk5LDE5ICs1OTgsNiBAQAogICAgIHJldHVybiBTdHJpbmcoKTsK
IH0KIAotc3RhdGljIFRleHRJdGVyYXRvckJlaGF2aW9yIHRleHRJdGVyYXRvckJlaGF2aW9yRm9y
VGV4dFJhbmdlKCkKLXsKLSAgICBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvciA9IFRleHRJ
dGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHk7Ci0KLSNpZiBQTEFURk9STShHVEspCi0gICAg
Ly8gV2UgbmVlZCB0byBlbWl0IHJlcGxhY2VkIGVsZW1lbnRzIGZvciBHVEssIGFuZCBwcmVzZW50
Ci0gICAgLy8gdGhlbSB3aXRoIHRoZSAnb2JqZWN0IHJlcGxhY2VtZW50IGNoYXJhY3RlcicgKDB4
RkZGQykuCi0gICAgYmVoYXZpb3IgPSBzdGF0aWNfY2FzdDxUZXh0SXRlcmF0b3JCZWhhdmlvcj4o
YmVoYXZpb3IgfCBUZXh0SXRlcmF0b3JFbWl0c09iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVycyk7
Ci0jZW5kaWYKLQotICAgIHJldHVybiBiZWhhdmlvcjsKLX0KLQogU3RyaW5nIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQoKSBjb25zdAogewogICAgIGlmICghbV9y
ZW5kZXJlcikKQEAgLTExMDEsMTAgKzEwODcsMTcgQEAKIHsKICAgICAvLyBUaGUgZm9sbG93aW5n
IGNhc2VzIGNhbiBhcHBseSB0byBhbnkgZWxlbWVudCB0aGF0J3MgYSBzdWJjbGFzcyBvZiBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LgogICAgIAotICAgIC8vIElnbm9yZSBpbnZpc2libGUgZWxl
bWVudHMuCi0gICAgaWYgKCFtX3JlbmRlcmVyIHx8IG1fcmVuZGVyZXItPnN0eWxlKCktPnZpc2li
aWxpdHkoKSAhPSBWSVNJQkxFKQorICAgIGlmICghbV9yZW5kZXJlcikKICAgICAgICAgcmV0dXJu
IElnbm9yZU9iamVjdDsKIAorICAgIGlmIChtX3JlbmRlcmVyLT5zdHlsZSgpLT52aXNpYmlsaXR5
KCkgIT0gVklTSUJMRSkgeworICAgICAgICAvLyBhcmlhLWhpZGRlbiBpcyBtZWFudCB0byBvdmVy
cmlkZSB2aXNpYmlsaXR5IGFzIHRoZSBkZXRlcm1pbmFudCBpbiBBWCBoaWVyYXJjaHkgaW5jbHVz
aW9uLgorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlKGFyaWFfaGlk
ZGVuQXR0ciksICJmYWxzZSIpKQorICAgICAgICAgICAgcmV0dXJuIERlZmF1bHRCZWhhdmlvcjsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiBJZ25vcmVPYmplY3Q7CisgICAgfQorICAgIAogICAg
IC8vIEFueXRoaW5nIG1hcmtlZCBhcyBhcmlhLWhpZGRlbiBvciBhIGNoaWxkIG9mIHNvbWV0aGlu
ZyBhcmlhLWhpZGRlbiBtdXN0IGJlIGhpZGRlbi4KICAgICBpZiAoYXJpYUlzSGlkZGVuKCkpCiAg
ICAgICAgIHJldHVybiBJZ25vcmVPYmplY3Q7CkBAIC0yNzE3LDYgKzI3MTAsNTkgQEAKIH0KICNl
bmRpZgogCisvLyBIaWRkZW4gY2hpbGRyZW4gYXJlIHRob3NlIHRoYXQgYXJlIG5vdCByZW5kZXJl
ZCBvciB2aXNpYmxlLCBidXQgYXJlIHNwZWNpZmljYWxseSBtYXJrZWQgYXMgYXJpYS1oaWRkZW49
ZmFsc2UsCisvLyBtZWFuaW5nIHRoYXQgdGhleSBzaG91bGQgYmUgZXhwb3NlZCB0byB0aGUgQVgg
aGllcmFyY2h5Lgordm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphZGRIaWRkZW5DaGls
ZHJlbigpCit7CisgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBGaXJzdCBkbyBhIHF1aWNrIHJ1biB0aHJv
dWdoIHRvIGRldGVybWluZSBpZiB3ZSBoYXZlIGFueSBoaWRkZW4gbm9kZXMgKG1vc3Qgb2Z0ZW4g
d2Ugd2lsbCBub3QpLgorICAgIC8vIElmIHdlIGRvIGhhdmUgaGlkZGVuIG5vZGVzLCB3ZSBuZWVk
IHRvIGRldGVybWluZSB3aGVyZSB0byBpbnNlcnQgdGhlbSBzbyB0aGV5IG1hdGNoIERPTSBvcmRl
ciBhcyBjbG9zZSBhcyBwb3NzaWJsZS4KKyAgICBib29sIHNob3VsZEluc2VydEhpZGRlbk5vZGVz
ID0gZmFsc2U7CisgICAgZm9yIChOb2RlKiBjaGlsZCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKCFjaGlsZC0+
cmVuZGVyZXIoKSAmJiBpc05vZGVBcmlhSGlkZGVuRmFsc2UoY2hpbGQpKSB7CisgICAgICAgICAg
ICBzaG91bGRJbnNlcnRIaWRkZW5Ob2RlcyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoIXNob3VsZEluc2VydEhpZGRlbk5vZGVzKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUg
Y2hpbGRyZW4sIGluY2x1ZGluZyB0aG9zZSB0aGF0IG1heSBoYXZlIGFscmVhZHkgYmVlbiBhZGRl
ZCwgYW5kCisgICAgLy8gdHJ5IHRvIGluc2VydCBoaWRkZW4gbm9kZXMgaW4gdGhlIGNvcnJlY3Qg
cGxhY2UgaW4gdGhlIERPTSBvcmRlci4KKyAgICB1bnNpZ25lZCBpbnNlcnRpb25JbmRleCA9IDA7
CisgICAgZm9yIChOb2RlKiBjaGlsZCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5yZW5kZXJlcigp
KSB7CisgICAgICAgICAgICAvLyBGaW5kIG91dCB3aGVyZSB0aGUgbGFzdCByZW5kZXIgc2libGlu
ZyBpcyBsb2NhdGVkIHdpdGhpbiBtX2NoaWxkcmVuLgorICAgICAgICAgICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogY2hpbGRPYmplY3QgPSBheE9iamVjdENhY2hlKCktPmdldChjaGlsZC0+cmVuZGVy
ZXIoKSk7CisgICAgICAgICAgICBpZiAoY2hpbGRPYmplY3QgJiYgY2hpbGRPYmplY3QtPmFjY2Vz
c2liaWxpdHlJc0lnbm9yZWQoKSkgeworICAgICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciBjaGlsZHJlbiA9IGNoaWxkT2JqZWN0LT5jaGlsZHJlbigpOworICAgICAgICAg
ICAgICAgIGlmIChjaGlsZHJlbi5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGNoaWxkT2Jq
ZWN0ID0gY2hpbGRyZW4ubGFzdCgpLmdldCgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgY2hpbGRPYmplY3QgPSAwOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoY2hpbGRPYmplY3QpCisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uSW5kZXggPSBt
X2NoaWxkcmVuLmZpbmQoY2hpbGRPYmplY3QpICsgMTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCFpc05vZGVBcmlhSGlkZGVuRmFsc2UoY2hpbGQpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBwcmV2aW91
c1NpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKKyAgICAgICAgaWYgKGluc2VydGlvbkluZGV4ID4g
cHJldmlvdXNTaXplKQorICAgICAgICAgICAgaW5zZXJ0aW9uSW5kZXggPSBwcmV2aW91c1NpemU7
CisgICAgICAgIAorICAgICAgICBpbnNlcnRDaGlsZChheE9iamVjdENhY2hlKCktPmdldE9yQ3Jl
YXRlKGNoaWxkKSwgaW5zZXJ0aW9uSW5kZXgpOworICAgICAgICBpbnNlcnRpb25JbmRleCArPSAo
bV9jaGlsZHJlbi5zaXplKCkgLSBwcmV2aW91c1NpemUpOworICAgIH0KK30KKyAgICAKIHZvaWQg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkQ2hpbGRyZW4oKQogewogICAgIC8vIElmIHRo
ZSBuZWVkIHRvIGFkZCBtb3JlIGNoaWxkcmVuIGluIGFkZGl0aW9uIHRvIGV4aXN0aW5nIGNoaWxk
cmVuIGFyaXNlcywgCkBAIC0yNzI4LDI0ICsyNzc0LDEwIEBACiAgICAgaWYgKCFjYW5IYXZlQ2hp
bGRyZW4oKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIC8vIGFkZCBhbGwgdW5pZ25vcmVk
IGFjYyBjaGlsZHJlbgotICAgIGZvciAoUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG9iaiA9
IGZpcnN0Q2hpbGQoKTsgb2JqOyBvYmogPSBvYmotPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAg
Ly8gSWYgdGhlIHBhcmVudCBpcyBhc2tpbmcgZm9yIHRoaXMgY2hpbGQncyBjaGlsZHJlbiwgdGhl
biBlaXRoZXIgaXQncyB0aGUgZmlyc3QgdGltZSAoYW5kIGNsZWFyaW5nIGlzIGEgbm8tb3ApLCAK
LSAgICAgICAgLy8gb3IgaXRzIHZpc2liaWxpdHkgaGFzIGNoYW5nZWQuIEluIHRoZSBsYXR0ZXIg
Y2FzZSwgdGhpcyBjaGlsZCBtYXkgaGF2ZSBhIHN0YWxlIGNoaWxkIGNhY2hlZC4gCi0gICAgICAg
IC8vIFRoaXMgY2FuIHByZXZlbnQgYXJpYS1oaWRkZW4gY2hhbmdlcyBmcm9tIHdvcmtpbmcgY29y
cmVjdGx5LiBIZW5jZSwgd2hlbmV2ZXIgYSBwYXJlbnQgaXMgZ2V0dGluZyBjaGlsZHJlbiwgZW5z
dXJlIGRhdGEgaXMgbm90IHN0YWxlLgotICAgICAgICBvYmotPmNsZWFyQ2hpbGRyZW4oKTsKLQot
ICAgICAgICBpZiAob2JqLT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpIHsKLSAgICAgICAgICAg
IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IG9iai0+Y2hpbGRyZW4oKTsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGNoaWxkcmVuLnNpemUoKTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAg
ICBtX2NoaWxkcmVuLmFwcGVuZChjaGlsZHJlbltpXSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBBU1NFUlQob2JqLT5wYXJlbnRPYmplY3QoKSA9PSB0aGlzKTsKLSAgICAgICAgICAg
IG1fY2hpbGRyZW4uYXBwZW5kKG9iaik7Ci0gICAgICAgIH0KLSAgICB9CisgICAgZm9yIChSZWZQ
dHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gb2JqID0gZmlyc3RDaGlsZCgpOyBvYmo7IG9iaiA9IG9i
ai0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgYWRkQ2hpbGQob2JqLmdldCgpKTsKICAgICAKKyAg
ICBhZGRIaWRkZW5DaGlsZHJlbigpOwogICAgIGFkZEF0dGFjaG1lbnRDaGlsZHJlbigpOwogICAg
IGFkZEltYWdlTWFwQ2hpbGRyZW4oKTsKICAgICBhZGRUZXh0RmllbGRDaGlsZHJlbigpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlP
YmplY3QuY3BwCShyZXZpc2lvbiAxMzE0OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzc2LDYgKzE3
NzYsMTkgQEAKICAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShhcmlhX3ByZXNzZWRBdHRyKS5pc0Vt
cHR5KCk7CiB9CiAKK1RleHRJdGVyYXRvckJlaGF2aW9yIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnRl
eHRJdGVyYXRvckJlaGF2aW9yRm9yVGV4dFJhbmdlKCkgY29uc3QKK3sKKyAgICBUZXh0SXRlcmF0
b3JCZWhhdmlvciBiZWhhdmlvciA9IFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHk7
CisgICAgCisjaWYgUExBVEZPUk0oR1RLKQorICAgIC8vIFdlIG5lZWQgdG8gZW1pdCByZXBsYWNl
ZCBlbGVtZW50cyBmb3IgR1RLLCBhbmQgcHJlc2VudAorICAgIC8vIHRoZW0gd2l0aCB0aGUgJ29i
amVjdCByZXBsYWNlbWVudCBjaGFyYWN0ZXInICgweEZGRkMpLgorICAgIGJlaGF2aW9yID0gc3Rh
dGljX2Nhc3Q8VGV4dEl0ZXJhdG9yQmVoYXZpb3I+KGJlaGF2aW9yIHwgVGV4dEl0ZXJhdG9yRW1p
dHNPYmplY3RSZXBsYWNlbWVudENoYXJhY3RlcnMpOworI2VuZGlmCisgICAgCisgICAgcmV0dXJu
IGJlaGF2aW9yOworfQorICAgIAogQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNzaWJpbGl0eU9iamVj
dDo6YnV0dG9uUm9sZVR5cGUoKSBjb25zdAogewogICAgIC8vIElmIGFyaWEtcHJlc3NlZCBpcyBw
cmVzZW50LCB0aGVuIGl0IHNob3VsZCBiZSBleHBvc2VkIGFzIGEgdG9nZ2xlIGJ1dHRvbi4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAko
cmV2aXNpb24gMTMxNDkyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE2LDggKzMxNiwxNCBAQAogICAgIGlmIChu
b2RlLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gZ2V0T3JDcmVhdGUobm9kZS0+cmVuZGVy
ZXIoKSk7CiAKKyAgICBpZiAoIW5vZGUtPnBhcmVudEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgCiAgICAgLy8gSXQncyBvbmx5IGFsbG93ZWQgdG8gY3JlYXRlIGFuIEFjY2Vzc2li
aWxpdHlPYmplY3QgZnJvbSBhIE5vZGUgaWYgaXQncyBpbiBhIGNhbnZhcyBzdWJ0cmVlLgotICAg
IGlmICghbm9kZS0+cGFyZW50RWxlbWVudCgpIHx8ICFub2RlLT5wYXJlbnRFbGVtZW50KCktPmlz
SW5DYW52YXNTdWJ0cmVlKCkpCisgICAgLy8gT3IgaWYgaXQncyBhIGhpZGRlbiBlbGVtZW50LCBi
dXQgd2Ugc3RpbGwgd2FudCB0byBleHBvc2UgaXQgYmVjYXVzZSBvZiBvdGhlciBBUklBIGF0dHJp
YnV0ZXMuCisgICAgYm9vbCBpbkNhbnZhc1N1YnRyZWUgPSBub2RlLT5wYXJlbnRFbGVtZW50KCkt
PmlzSW5DYW52YXNTdWJ0cmVlKCk7CisgICAgYm9vbCBpc0hpZGRlbiA9ICFub2RlLT5yZW5kZXJl
cigpICYmIGlzTm9kZUFyaWFIaWRkZW5GYWxzZShub2RlKTsKKyAgICBpZiAoIWluQ2FudmFzU3Vi
dHJlZSAmJiAhaXNIaWRkZW4pCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVmUHRyPEFjY2Vz
c2liaWxpdHlPYmplY3Q+IG5ld09iaiA9IGNyZWF0ZUZyb21Ob2RlKG5vZGUpOwpAQCAtNzgzLDYg
Kzc4OSwxNyBAQAogICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIGF4T2JqZWN0ID0gZ2V0
T3JDcmVhdGUoY29uc3RfY2FzdDxOb2RlKj4obm9kZSkpOwogICAgIHJldHVybiBheE9iamVjdCAm
JiBheE9iamVjdC0+aXNUZXh0Q29udHJvbCgpOwogfQorICAgIAorYm9vbCBpc05vZGVBcmlhSGlk
ZGVuRmFsc2UoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZSh0b0VsZW1lbnQo
bm9kZSktPmdldEF0dHJpYnV0ZShhcmlhX2hpZGRlbkF0dHIpLCAiZmFsc2UiKTsKK30KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkocmV2aXNpb24gMTMx
NDkyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw2ICsyMjEsMjYgQEAKIHsKICAgICByZXR1
cm4gYm91bmRpbmdCb3hSZWN0KCk7CiB9CisgICAgCitMYXlvdXRSZWN0IEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0Ojpib3VuZGluZ0JveFJlY3QoKSBjb25zdAoreworICAgIC8vIEFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0cyBoYXZlIG5vIG1lY2hhbmlzbSB5ZXQgdG8gcmV0dXJuIGEgc2l6ZSBvciBw
b3NpdGlvbi4KKyAgICAvLyBGb3Igbm93LCBsZXQncyByZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRo
ZSBhbmNlc3RvciB0aGF0IGRvZXMgaGF2ZSBhIHBvc2l0aW9uLAorICAgIC8vIGFuZCBtYWtlIGl0
IHRoZSB3aWR0aCBvZiB0aGF0IHBhcmVudCwgYW5kIGFib3V0IHRoZSBoZWlnaHQgb2YgYSBsaW5l
IG9mIHRleHQsIHNvIHRoYXQgaXQncyBjbGVhciB0aGUgb2JqZWN0IGlzIGEgY2hpbGQgb2YgdGhl
IHBhcmVudC4KKyAgICAKKyAgICBMYXlvdXRSZWN0IGJvdW5kaW5nQm94OworICAgIAorICAgIGZv
ciAoQWNjZXNzaWJpbGl0eU9iamVjdCogcG9zaXRpb25Qcm92aWRlciA9IHBhcmVudE9iamVjdCgp
OyBwb3NpdGlvblByb3ZpZGVyOyBwb3NpdGlvblByb3ZpZGVyID0gcG9zaXRpb25Qcm92aWRlci0+
cGFyZW50T2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKHBvc2l0aW9uUHJvdmlkZXItPmlzQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdCgpKSB7CisgICAgICAgICAgICBMYXlvdXRSZWN0IHBhcmVudFJl
Y3QgPSBwb3NpdGlvblByb3ZpZGVyLT5lbGVtZW50UmVjdCgpOworICAgICAgICAgICAgYm91bmRp
bmdCb3guc2V0U2l6ZShMYXlvdXRTaXplKHBhcmVudFJlY3Qud2lkdGgoKSwgRnJhY3Rpb25hbExh
eW91dFVuaXQoc3RkOjptaW4oMTAuMGYsIHBhcmVudFJlY3QuaGVpZ2h0KCkudG9GbG9hdCgpKSkp
KTsKKyAgICAgICAgICAgIGJvdW5kaW5nQm94LnNldExvY2F0aW9uKHBhcmVudFJlY3QubG9jYXRp
b24oKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gYm91bmRpbmdCb3g7Cit9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnNl
dE5vZGUoTm9kZSogbm9kZSkKIHsKQEAgLTI4Myw2ICszMDMsMzIgQEAKICAgICByZXR1cm4gVW5r
bm93blJvbGU7CiB9CiAKK3ZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Omluc2VydENoaWxk
KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNoaWxkLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBpZiAo
IWNoaWxkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gSWYgdGhlIHBhcmVudCBpcyBh
c2tpbmcgZm9yIHRoaXMgY2hpbGQncyBjaGlsZHJlbiwgdGhlbiBlaXRoZXIgaXQncyB0aGUgZmly
c3QgdGltZSAoYW5kIGNsZWFyaW5nIGlzIGEgbm8tb3ApLAorICAgIC8vIG9yIGl0cyB2aXNpYmls
aXR5IGhhcyBjaGFuZ2VkLiBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoaXMgY2hpbGQgbWF5IGhhdmUg
YSBzdGFsZSBjaGlsZCBjYWNoZWQuCisgICAgLy8gVGhpcyBjYW4gcHJldmVudCBhcmlhLWhpZGRl
biBjaGFuZ2VzIGZyb20gd29ya2luZyBjb3JyZWN0bHkuIEhlbmNlLCB3aGVuZXZlciBhIHBhcmVu
dCBpcyBnZXR0aW5nIGNoaWxkcmVuLCBlbnN1cmUgZGF0YSBpcyBub3Qgc3RhbGUuCisgICAgY2hp
bGQtPmNsZWFyQ2hpbGRyZW4oKTsKKyAgICAKKyAgICBpZiAoY2hpbGQtPmFjY2Vzc2liaWxpdHlJ
c0lnbm9yZWQoKSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRy
ZW4gPSBjaGlsZC0+Y2hpbGRyZW4oKTsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IGNoaWxkcmVu
LnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAg
ICAgICAgICAgIG1fY2hpbGRyZW4uaW5zZXJ0KGluZGV4ICsgaSwgY2hpbGRyZW5baV0pOworICAg
IH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChjaGlsZC0+cGFyZW50T2JqZWN0KCkgPT0gdGhpcyk7
CisgICAgICAgIG1fY2hpbGRyZW4uaW5zZXJ0KGluZGV4LCBjaGlsZCk7CisgICAgfQorfQorCit2
b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphZGRDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBjaGlsZCkKK3sKKyAgICBpbnNlcnRDaGlsZChjaGlsZCwgbV9jaGlsZHJlbi5zaXplKCkpOwor
fQorCiB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphZGRDaGlsZHJlbigpCiB7CiAgICAg
Ly8gSWYgdGhlIG5lZWQgdG8gYWRkIG1vcmUgY2hpbGRyZW4gaW4gYWRkaXRpb24gdG8gZXhpc3Rp
bmcgY2hpbGRyZW4gYXJpc2VzLCAKQEAgLTI5OCwxOSArMzQ0LDggQEAKICAgICBpZiAocmVuZGVy
ZXIoKSAmJiAhbV9ub2RlLT5oYXNUYWdOYW1lKGNhbnZhc1RhZykpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBmb3IgKE5vZGUqIGNoaWxkID0gbV9ub2RlLT5maXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIFJlZlB0cjxBY2Nlc3Np
YmlsaXR5T2JqZWN0PiBvYmogPSBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGNoaWxkKTsK
LSAgICAgICAgb2JqLT5jbGVhckNoaWxkcmVuKCk7Ci0gICAgICAgIGlmIChvYmotPmFjY2Vzc2li
aWxpdHlJc0lnbm9yZWQoKSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yIGNoaWxkcmVuID0gb2JqLT5jaGlsZHJlbigpOwotICAgICAgICAgICAgc2l6ZV90IGxlbmd0
aCA9IGNoaWxkcmVuLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoY2hpbGRyZW5b
aV0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKG9iai0+cGFyZW50T2Jq
ZWN0KCkgPT0gdGhpcyk7Ci0gICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChvYmopOwotICAg
ICAgICB9Ci0gICAgfQorICAgIGZvciAoTm9kZSogY2hpbGQgPSBtX25vZGUtPmZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIGFkZENoaWxk
KGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoY2hpbGQpKTsKIH0KIAogYm9vbCBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6Y2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QKQEAgLTExODYsNyArMTIy
MSw5IEBACiAgICAgLy8gSWYgdGhpcyBjb3VsZCBiZSBmaXhlZCwgaXQnZCBiZSBtb3JlIGFjY3Vy
YXRlIHVzZSBUZXh0SXRlcmF0b3IgaGVyZS4KICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgp
KQogICAgICAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpLT5pbm5lclRleHQoKTsKLQorICAgIGVs
c2UgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIHRvVGV4dChub2RlKS0+
d2hvbGVUZXh0KCk7CisgICAgCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdy
aWQuY3BwCShyZXZpc2lvbiAxMzE0OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcg
QEAKICAgICByZXR1cm4gYWRvcHRSZWYob2JqKTsKIH0KIAotYm9vbCBBY2Nlc3NpYmlsaXR5QVJJ
QUdyaWQ6OmFkZENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNoaWxkLCBIYXNoU2V0PEFjY2Vz
c2liaWxpdHlPYmplY3QqPiYgYXBwZW5kZWRSb3dzLCB1bnNpZ25lZCYgY29sdW1uQ291bnQpCiti
b29sIEFjY2Vzc2liaWxpdHlBUklBR3JpZDo6YWRkVGFibGVDZWxsQ2hpbGQoQWNjZXNzaWJpbGl0
eU9iamVjdCogY2hpbGQsIEhhc2hTZXQ8QWNjZXNzaWJpbGl0eU9iamVjdCo+JiBhcHBlbmRlZFJv
d3MsIHVuc2lnbmVkJiBjb2x1bW5Db3VudCkKIHsKICAgICBpZiAoIWNoaWxkIHx8ICFjaGlsZC0+
aXNUYWJsZVJvdygpIHx8IGNoaWxkLT5hcmlhUm9sZUF0dHJpYnV0ZSgpICE9IFJvd1JvbGUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgIHVuc2lnbmVkIGNv
bHVtbkNvdW50ID0gMDsKICAgICBmb3IgKFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBjaGls
ZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsK
IAotICAgICAgICBpZiAoIWFkZENoaWxkKGNoaWxkLmdldCgpLCBhcHBlbmRlZFJvd3MsIGNvbHVt
bkNvdW50KSkgeworICAgICAgICBpZiAoIWFkZFRhYmxlQ2VsbENoaWxkKGNoaWxkLmdldCgpLCBh
cHBlbmRlZFJvd3MsIGNvbHVtbkNvdW50KSkgewogICAgICAgICAgICAgCiAgICAgICAgICAgICAv
LyBpbiBjYXNlIHRoZSByZW5kZXIgdHJlZSBkb2Vzbid0IG1hdGNoIHRoZSBleHBlY3RlZCBBUklB
IGhpZXJhcmNoeSwgbG9vayBhdCB0aGUgY2hpbGRyZW4KICAgICAgICAgICAgIGlmICghY2hpbGQt
Pmhhc0NoaWxkcmVuKCkpCkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICAgICAgICAgIEFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IGNoaWxkLT5jaGlsZHJlbigpOwogICAgICAg
ICAgICAgc2l6ZV90IGxlbmd0aCA9IGNoaWxkcmVuLnNpemUoKTsKICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgYWRkQ2hpbGQo
Y2hpbGRyZW5baV0uZ2V0KCksIGFwcGVuZGVkUm93cywgY29sdW1uQ291bnQpOworICAgICAgICAg
ICAgICAgIGFkZFRhYmxlQ2VsbENoaWxkKGNoaWxkcmVuW2ldLmdldCgpLCBhcHBlbmRlZFJvd3Ms
IGNvbHVtbkNvdW50KTsKICAgICAgICAgfQogICAgIH0KICAgICAKSW5kZXg6IExheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwkocmV2aXNpb24gMTMxNDky
KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwkod29y
a2luZyBjb3B5KQpAQCAtMTQzNSw2ICsxNDM1LDcgQEAKIHdlYmtpdC5vcmcvYi83MzkxMiBhY2Nl
c3NpYmlsaXR5L2FyaWEtY2hlY2tib3gtdGV4dC5odG1sIFsgU2tpcCBdCiAKIHdlYmtpdC5vcmcv
Yi83MzkxMiBhY2Nlc3NpYmlsaXR5L2FyaWEtY2hlY2tib3gtc2VuZHMtbm90aWZpY2F0aW9uLmh0
bWwgWyBGYWlsdXJlIFBhc3MgXQord2Via2l0Lm9yZy9iLzk4Nzg3IGFjY2Vzc2liaWxpdHkvYXJp
YS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5Lmh0bWwgWyBTa2lwIF0KIAogIyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogIyBUZXN0IGZhaWx1cmVzIHdpdGggU2tpYSBHUFUgcmVuZGVyaW5nIG9mIGNhbnZhcyAyRApJ
bmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4t
bmVnYXRlcy1uby12aXNpYmlsaXR5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWhpZGRlbi1uZWdhdGVzLW5vLXZp
c2liaWxpdHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4tbmVnYXRlcy1uby12aXNpYmlsaXR5LWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAoraGVhZGluZzEuMgorCisK
KworVGhpcyB0ZXN0cyBlbnN1cmVzIHRoYXQgYXJpYS1oaWRkZW49ZmFsc2Ugd2lsbCBhbGxvdyBh
IG5vZGUgdG8gYmUgaW4gdGhlIEFYIGhpZXJhcmNoeSBldmVuIGlmIGl0J3Mgbm90IHJlbmRlcmVk
IG9yIHZpc2libGUKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgIWhlYWRp
bmcxXzEgfHwgIWhlYWRpbmcxXzEuaXNWYWxpZCBpcyB0cnVlCitQQVNTICFoZWFkaW5nMV8yIHx8
ICFoZWFkaW5nMV8zLmlzVmFsaWQgaXMgdHJ1ZQorUEFTUyAhaGVhZGluZzFfMyB8fCAhaGVhZGlu
ZzFfMy5pc1ZhbGlkIGlzIHRydWUKK1BBU1MgaGVhZGluZzIucm9sZSBpcyAnQVhSb2xlOiBBWEhl
YWRpbmcnCitQQVNTIHBhcmVudC5jaGlsZEF0SW5kZXgoMCkuaXNFcXVhbChoZWFkaW5nMikgaXMg
dHJ1ZQorUEFTUyBoZWFkaW5nMy5yb2xlIGlzICdBWFJvbGU6IEFYSGVhZGluZycKK1BBU1MgcGFy
ZW50LmNoaWxkQXRJbmRleCgxKS5pc0VxdWFsKGhlYWRpbmczKSBpcyB0cnVlCitQQVNTIGhlYWRp
bmc0LnJvbGUgaXMgJ0FYUm9sZTogQVhIZWFkaW5nJworUEFTUyBwYXJlbnQuY2hpbGRBdEluZGV4
KDIpLmlzRXF1YWwoaGVhZGluZzQpIGlzIHRydWUKK1RleHRmaWVsZCBUaXRsZTogQVhUaXRsZTog
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRl
eDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLWhpZGRlbi1uZWdhdGVzLW5vLXZpc2li
aWxpdHkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEt
aGlkZGVuLW5lZ2F0ZXMtbm8tdmlzaWJpbGl0eS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLWhpZGRlbi1uZWdhdGVzLW5vLXZpc2liaWxpdHkuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICIt
Ly9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eSBpZD0iYm9keSI+CisKKzxoMSBoaWRkZW4gaWQ9ImhlYWRpbmcxXzEiPmhlYWRpbmcxLjE8L2gx
PgorPGgxIGFyaWEtaGlkZGVuPSJ0cnVlIiBpZD0iaGVhZGluZzFfMiI+aGVhZGluZzEuMjwvaDE+
Cis8aDEgaGlkZGVuIGFyaWEtaGlkZGVuPSJ0cnVlIiBpZD0iaGVhZGluZzFfMyI+aGVhZGluZzEu
MzwvaDE+CisKKzxoMSBoaWRkZW4gYXJpYS1oaWRkZW49ImZhbHNlIiBpZD0iaGVhZGluZzIiPmhl
YWRpbmcyPC9oMT4KKzxoMSBzdHlsZT0iZGlzcGxheTpub25lOyIgYXJpYS1oaWRkZW49ImZhbHNl
IiBpZD0iaGVhZGluZzMiPmhlYWRpbmczPC9oMT4KKzxoMSBzdHlsZT0idmlzaWJpbGl0eTpoaWRk
ZW47IiBhcmlhLWhpZGRlbj0iZmFsc2UiIGlkPSJoZWFkaW5nNCI+aGVhZGluZzQ8L2gxPgorCis8
ZGl2IGhpZGRlbiBhcmlhLWhpZGRlbj0iZmFsc2UiIGlkPSJoaWRkZW5EaXYiPkhpZGRlblRleHQx
PC9kaXY+Cis8aW5wdXQgdHlwZT0idGV4dCIgYXJpYS1sYWJlbGxlZGJ5PSJoaWRkZW5EaXYiIGlk
PSJ0ZXh0RmllbGRXaXRoSGlkZGVuTGFiZWxsZXIiPgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwv
cD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorCisgICAgZGVzY3JpcHRp
b24oIlRoaXMgdGVzdHMgZW5zdXJlcyB0aGF0IGFyaWEtaGlkZGVuPWZhbHNlIHdpbGwgYWxsb3cg
YSBub2RlIHRvIGJlIGluIHRoZSBBWCBoaWVyYXJjaHkgZXZlbiBpZiBpdCdzIG5vdCByZW5kZXJl
ZCBvciB2aXNpYmxlIik7CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVy
KSB7CisKKyAgICAgICAgLy8gRmlyc3QgZ3JvdXBzIG9mIGhlYWRpbmdzIGFyZSBhY3R1YWxseSBo
aWRkZS5uCisgICAgICAgIHZhciBoZWFkaW5nMV8xID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
YWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJoZWFkaW5nMV8xIik7CisgICAgICAgIHNob3VsZEJlVHJ1
ZSgiIWhlYWRpbmcxXzEgfHwgIWhlYWRpbmcxXzEuaXNWYWxpZCIpOworCisgICAgICAgIHZhciBo
ZWFkaW5nMV8yID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlk
KCJoZWFkaW5nMV8yIik7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgiIWhlYWRpbmcxXzIgfHwgIWhl
YWRpbmcxXzMuaXNWYWxpZCIpOworCisgICAgICAgIHZhciBoZWFkaW5nMV8zID0gYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJoZWFkaW5nMV8zIik7CisgICAg
ICAgIHNob3VsZEJlVHJ1ZSgiIWhlYWRpbmcxXzMgfHwgIWhlYWRpbmcxXzMuaXNWYWxpZCIpOwor
CisgICAgICAgIC8vIFRoZXNlIGhlYWRpbmdzIHNob3VsZCBiZSBpbiBBWCB0cmVlIGRlc3BpdGUg
YmVpbmcgaGlkZGVuLgorICAgICAgICB2YXIgaGVhZGluZzIgPSBhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImhlYWRpbmcyIik7CisgICAgICAgIHNob3VsZEJl
KCJoZWFkaW5nMi5yb2xlIiwgIidBWFJvbGU6IEFYSGVhZGluZyciKTsKKworICAgICAgICAvLyBD
aGVjayB0aGF0IHRoZSBvcmRlciBvZiB0aGVzZSBlbGVtZW50cyBpcyBjb3JyZWN0IGJhc2VkIG9u
IERPTSBvcmRlci4KKyAgICAgICAgdmFyIHBhcmVudCA9IGhlYWRpbmcyLnBhcmVudEVsZW1lbnQo
KTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCJwYXJlbnQuY2hpbGRBdEluZGV4KDApLmlzRXF1YWwo
aGVhZGluZzIpIik7CisKKyAgICAgICAgdmFyIGhlYWRpbmczID0gYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJoZWFkaW5nMyIpOworICAgICAgICBzaG91bGRC
ZSgiaGVhZGluZzMucm9sZSIsICInQVhSb2xlOiBBWEhlYWRpbmcnIik7CisgICAgICAgIHNob3Vs
ZEJlVHJ1ZSgicGFyZW50LmNoaWxkQXRJbmRleCgxKS5pc0VxdWFsKGhlYWRpbmczKSIpOworCisg
ICAgICAgIHZhciBoZWFkaW5nNCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVF
bGVtZW50QnlJZCgiaGVhZGluZzQiKTsKKyAgICAgICAgc2hvdWxkQmUoImhlYWRpbmc0LnJvbGUi
LCAiJ0FYUm9sZTogQVhIZWFkaW5nJyIpOworICAgICAgICBzaG91bGRCZVRydWUoInBhcmVudC5j
aGlsZEF0SW5kZXgoMikuaXNFcXVhbChoZWFkaW5nNCkiKTsKKworICAgICAgICAvLyBUaGUgYXJp
YS1sYWJlbGxlZGJ5IGF0dHJpYnV0ZSBzaG91bGQgd29yayBldmVuIHRob3VnaCBoaWRkZW4uCisg
ICAgICAgIHZhciB0ZXh0RmllbGQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxl
RWxlbWVudEJ5SWQoInRleHRGaWVsZFdpdGhIaWRkZW5MYWJlbGxlciIpOworICAgICAgICBkZWJ1
ZygiVGV4dGZpZWxkIFRpdGxlOiAiICsgdGV4dEZpZWxkLnRpdGxlKTsKKyAgICB9CisKKzwvc2Ny
aXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTQ5MikK
KysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBA
CisyMDEyLTEwLTE2ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAg
ICAgICAgQVg6IGFyaWEtaGlkZGVuPWZhbHNlIGRvZXMgbm90IHdvcmsgYXMgZXhwZWN0ZWQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4Nzg3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L2FyaWEtaGlkZGVuLW5lZ2F0ZXMtbm8tdmlzaWJpbGl0eS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWhpZGRlbi1uZWdhdGVzLW5vLXZp
c2liaWxpdHktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKwogMjAxMi0xMC0xNiAgVG9ueSBDaGFuZyAg
PHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJlYmFzZWxpbmUgMiBD
aHJvbWl1bSBNYWMgdGVzdC4K
</data>
<flag name="review"
          id="182209"
          type_id="1"
          status="+"
          setter="bdakin"
    />
          </attachment>
      

    </bug>

</bugzilla>