<?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>24953</bug_id>
          
          <creation_ts>2009-03-30 17:07:28 -0700</creation_ts>
          <short_desc>Add automatic spell correction support in WebKit</short_desc>
          <delta_ts>2009-05-21 16:26:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Siddhartha Chattopadhyay">sidchat</reporter>
          <assigned_to name="Siddhartha Chattopadhyay">sidchat</assigned_to>
          <cc>ddavidso</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>sidchat</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>115940</commentid>
    <comment_count>0</comment_count>
    <who name="Siddhartha Chattopadhyay">sidchat</who>
    <bug_when>2009-03-30 17:07:28 -0700</bug_when>
    <thetext>Add support in WebKit for automatic spelling corrections, so that misspelled words typed in a text-box area get automatically correct if autocorrection word is provided.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115946</commentid>
    <comment_count>1</comment_count>
      <attachid>29100</attachid>
    <who name="Siddhartha Chattopadhyay">sidchat</who>
    <bug_when>2009-03-30 17:42:36 -0700</bug_when>
    <thetext>Created attachment 29100
Patch

This is a patch for automatic spell correction support in WebKit. This patch essentially replaces the previous (misspelled) word typed by a correct word only if an auto-correct word is provided - nothing happens if auto-correct word provided is empty. The method to actually compute the corrected word is NotImplemented in WebKit. This patch is a requirement for Chromium to add an auto spell correction feature (http://code.google.com/p/chromium/issues/detail?id=7624).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115956</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-30 18:26:24 -0700</bug_when>
    <thetext>Adding Justin who is much more familiar with this part of the editing code than I.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116839</commentid>
    <comment_count>3</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-04-07 22:13:11 -0700</bug_when>
    <thetext>-static String findFirstMisspellingInRange(EditorClient* client, Range* searchRange, int&amp; firstMisspellingOffset, bool markAll)
+static String findFirstMisspellingInRange(EditorClient* client, Range* searchRange, int&amp; firstMisspellingOffset, bool markAll, int&amp; firstMisspellingCharCount)
 {

Why do we need to introduce firstMisspellingCharCount?  Can&apos;t callers just check the length of the returned string?


+            Frame* frame = document()-&gt;frame();
+            if (frame)
+              frame-&gt;editor()-&gt;markMisspellingsAfterTypingToPosition(p1, firstMisspelledCharOffset, firstMisspelledCharCount);
+
+            // Autocorrect the misspelled word.
+            if (firstMisspelledCharCount &gt; 0 &amp;&amp; frame) {

Not sure what the surrounding code does but can frame really be null here?  If it really can and we need to check it it would be nice if you used early returns in the event that the frame is null, to avoid so many levels of if nesting.


+                WebCore::VisibleSelection selection = VisibleSelection(startOfWord(p1, LeftWordIfOnBoundary), endOfWord(p1, RightWordIfOnBoundary));

You&apos;re already inside the WebCore namespace, you don&apos;t need the WebCore::


+                // Find the exact selection of the misspelled word.
+                WebCore::VisibleSelection selection = VisibleSelection(startOfWord(p1, LeftWordIfOnBoundary), endOfWord(p1, RightWordIfOnBoundary));
+                RefPtr&lt;Range&gt; searchRange(selection.toNormalizedRange());
+                RefPtr&lt;Range&gt; misspellingRange = TextIterator::subrange(searchRange.get(), firstMisspelledCharOffset, firstMisspelledCharCount);
+                
+                // Get the misspelled word.
+                const String misspelledWord = plainText(misspellingRange.get());

This is work that we&apos;ve already done when we call markMisspellingsAfterTypingToPosition.  Inside findFirstMisspellingInRange we have a) the characters for the misspelled word and b) the misspelling range.


frame-&gt;editor()-&gt;client()-&gt;getAutoCorrectSuggestionForMisspelledWord(misspelledWord, autocorrectedString);

Why not have this function return the autocorrected string?


+                    frame-&gt;editor()-&gt;replaceSelectionWithText(autocorrectedString, true, true);

I don&apos;t think you want to select the autocorrected word.  The idea I think is that autocorrect should not be disruptive, the user should be able to continue typing without stopping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116840</commentid>
    <comment_count>4</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-04-07 22:15:01 -0700</bug_when>
    <thetext>Finally, where are the changes to mac/WebCoreSupport/WebEditorClient.mm?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117393</commentid>
    <comment_count>5</comment_count>
      <attachid>29450</attachid>
    <who name="Siddhartha Chattopadhyay">sidchat</who>
    <bug_when>2009-04-13 17:53:18 -0700</bug_when>
    <thetext>Created attachment 29450
Support for automatic spelling corrections

Thank you for your detailed reviews. I made changes as per your suggestions. Please have a look again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118390</commentid>
    <comment_count>6</comment_count>
      <attachid>29450</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-22 11:15:26 -0700</bug_when>
    <thetext>Comment on attachment 29450
Support for automatic spelling corrections

Drive-by nit:

1394                 // Remember first encountered misspelling range.
 1395                 if (!firstMisspelling) {
 1396                   firstMisspelling = String(chars + misspellingLocation, misspellingLength);
 1397                   firstMisspellingRange = misspellingRange;
 1398                 }

is indented incorrectly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118394</commentid>
    <comment_count>7</comment_count>
      <attachid>29450</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-04-22 11:42:24 -0700</bug_when>
    <thetext>Comment on attachment 29450
Support for automatic spelling corrections

 #endif // Editor_h
+
+
+
Index: WebCore/editing/TypingCommand.cpp
=======

Looks like you accidently added some unnecessary newlines to the end of this file.

-    // If the selection starts inside a table, just insert the paragraph separator normally
-    // Breaking the blockquote would also break apart the table, which is unecessary when inserting a newline
-    if (enclosingNodeOfType(endingSelection().start(), &amp;isTableStructureNode)) {
-        insertParagraphSeparator();
-        return;
-    }
-       

Please remove this before you check in.  If it&apos;s a workaround for a bug you&apos;re seeing please file it.

-        if (p1 != p2)
-            document()-&gt;frame()-&gt;editor()-&gt;markMisspellingsAfterTypingToPosition(p1);
+        if (p1 != p2) {
+            RefPtr&lt;Range&gt; misspellingRange;
+            Frame* frame = document()-&gt;frame();

Would be nice if you turned this into an early return to avoid the extra level of if-nesting.

+            // Autocorrect the misspelled word.
+            if (misspellingRange.get() != NULL) {
+                // Get the misspelled word.

In WebCore the convention is to use != 0, and you don&apos;t need the .get() here.  And again, you could turn this into an early return.

+                    frame-&gt;editor()-&gt;replaceSelectionWithText(autocorrectedString, false, true);

You actually don&apos;t need smart replace here, but it won&apos;t matter because smart replace will only do anything if the selection being replaced is between is flanked by non-whitespace, which isn&apos;t the case when replacing a word.  Your use of it makes me think that smart replace needs to be renamed or commented better.

Other than that r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118408</commentid>
    <comment_count>8</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-04-22 12:50:17 -0700</bug_when>
    <thetext>Hold off for now, we&apos;re about to post a patch that does generalized text checking.  Handles autocorrection of misspelled words, automatic URLification, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119179</commentid>
    <comment_count>9</comment_count>
      <attachid>29865</attachid>
    <who name="Siddhartha Chattopadhyay">sidchat</who>
    <bug_when>2009-04-28 15:09:41 -0700</bug_when>
    <thetext>Created attachment 29865
New Patch

Thanks for your reviews, Justin. I saw that the other patch (https://bugs.webkit.org/show_bug.cgi?id=25330) has been checked in. In this latest patch, I made the changes that you suggested. 

If this patch is alright with you, I will be obliged if you could please submit it, as I do not have commit access.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119324</commentid>
    <comment_count>10</comment_count>
      <attachid>29450</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-29 13:18:39 -0700</bug_when>
    <thetext>Comment on attachment 29450
Support for automatic spelling corrections

Marking this patch obsolete, since it seems this is not ready for commit (since there is a new version posted).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119367</commentid>
    <comment_count>11</comment_count>
      <attachid>29450</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-29 14:56:44 -0700</bug_when>
    <thetext>Comment on attachment 29450
Support for automatic spelling corrections

Clearing review flag to remove from commit queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119881</commentid>
    <comment_count>12</comment_count>
    <who name="Siddhartha Chattopadhyay">sidchat</who>
    <bug_when>2009-05-04 15:53:27 -0700</bug_when>
    <thetext>Hold off on this patch - please dont commit this yet. New changes to WebKit has introduced a new behavior when autocorrected word causes the caret to overlook the space typed after typing a word. I will upload a new patch for your review. Thank you very much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120032</commentid>
    <comment_count>13</comment_count>
      <attachid>30039</attachid>
    <who name="Siddhartha Chattopadhyay">sidchat</who>
    <bug_when>2009-05-05 16:02:29 -0700</bug_when>
    <thetext>Created attachment 30039
Updated patch to take care of the caret position

Updated the patch slightly to now place the caret in the correct position after the previous word formed has been auto-replaced (if required). If this patch is alright with you, I will be obliged if you could please commit it, since I do not have commit assess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120493</commentid>
    <comment_count>14</comment_count>
      <attachid>30148</attachid>
    <who name="Siddhartha Chattopadhyay">sidchat</who>
    <bug_when>2009-05-08 17:12:47 -0700</bug_when>
    <thetext>Created attachment 30148
New Patch according to Douglas&apos;s suggestions

Updated the patch as per Douglas&apos;s suggestions. If this patch is alright with you, I will be obliged if you could please commit it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120700</commentid>
    <comment_count>15</comment_count>
      <attachid>30196</attachid>
    <who name="Siddhartha Chattopadhyay">sidchat</who>
    <bug_when>2009-05-11 12:09:59 -0700</bug_when>
    <thetext>Created attachment 30196
New Patch

Removed the argument name &quot;misspelledWord&quot; from getAutoCorrectSuggestionForMisspelledWord in WebCore/loader/EmptyClients.h to enable compilation in Snow Leopard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121202</commentid>
    <comment_count>16</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-05-13 19:46:28 -0700</bug_when>
    <thetext>                 // Remember first-encountered misspelling and its offset
                 if (!firstMisspelling) {
-                    firstMisspellingOffset = currentChunkOffset + misspellingLocation;
-                    firstMisspelling = String(chars + misspellingLocation, misspellingLength);
+                    firstMisspellingOffset = currentChunkOffset + misspellingLocation;                  
                 }

I think you should move all of this...
                 
                 // Mark this instance if we&apos;re marking all instances. Otherwise bail out because we found the first one.
                 if (!markAll)
                     break;
                 
-                // Compute range of misspelled word
+                // Compute range of misspelled word                
+
                 RefPtr&lt;Range&gt; misspellingRange = TextIterator::subrange(searchRange, currentChunkOffset + misspellingLocation, misspellingLength);
-                
+
+                // Remember first encountered misspelling range.
+                if (!firstMisspelling) {
+                  firstMisspelling = String(chars + misspellingLocation, misspellingLength);
+                  firstMisspellingRange = misspellingRange;
+                }

to here.


Also, this is not new with your patch (but it&apos;s relevant)...I am perplexed by the placement of:

if (!markAll)
    break;

It seems to break before we mark the misspelling.  Shouldn&apos;t it break after?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121351</commentid>
    <comment_count>17</comment_count>
      <attachid>30349</attachid>
    <who name="Siddhartha Chattopadhyay">sidchat</who>
    <bug_when>2009-05-14 12:04:35 -0700</bug_when>
    <thetext>Created attachment 30349
Patch 6

Yes, the break seems early. I have moved it after the first misspelling is marked, and have also made changes as per your suggestions. Please have a look again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122196</commentid>
    <comment_count>18</comment_count>
      <attachid>30349</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-05-20 12:32:00 -0700</bug_when>
    <thetext>Comment on attachment 30349
Patch 6

+        Reviewed by Justin Garcia.
+        
+		 Add automatic spell correction support in WebKit

Looks like you&apos;ve got tabs here.

Moving the !markAll bailout definitely seems like the right thing to do, but maybe we&apos;re missing something subtle that is covered by a layout test.  Did you run the layout tests on a mac?

Other than that, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122413</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-05-21 13:43:18 -0700</bug_when>
    <thetext>I tested this patch out on my Mac, and I didn&apos;t observe any layout test regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122418</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-05-21 14:03:38 -0700</bug_when>
    <thetext>Landed as:  http://trac.webkit.org/changeset/43980</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122452</commentid>
    <comment_count>21</comment_count>
    <who name="">mitz</who>
    <bug_when>2009-05-21 16:26:42 -0700</bug_when>
    <thetext>I accidentally removed the review flag from the patch. It has been reviewed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29100</attachid>
            <date>2009-03-30 17:42:36 -0700</date>
            <delta_ts>2009-05-05 16:02:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>SpellCheckAutoCorrectionPatch.txt</filename>
            <type>text/plain</type>
            <size>16980</size>
            <attacher name="Siddhartha Chattopadhyay">sidchat</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MjExOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMDktMDMtMzAgIFNpZGRoYXJ0aGEgQ2hhdHRvcGFkaHlheSAgPHNp
ZGNoYXRAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBKdXN0aW4gR2FyY2lhLgor
ICAgICAgICAKKwkJaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0OTUz
OiBBZGQgc3VwcG9ydCBpbiBXZWJLaXQgCisJCWZvciBhdXRvbWF0aWMgc3BlbGxpbmcgY29ycmVj
dGlvbnMsIHNvIHRoYXQgbWlzc3BlbGxlZCB3b3JkcyB0eXBlZCBpbiAKKwkJYSB0ZXh0LWJveCBh
cmVhIGdldCBhdXRvbWF0aWNhbGx5IGNvcnJlY3RlZCBpZiBhdXRvY29ycmVjdGlvbiB3b3JkIGlz
IAorCQlwcm92aWRlZC4KKwkJCQkKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpmaW5kRmlyc3RNaXNzcGVsbGluZ0luUmFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1Bvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Om1hcmtBbGxNaXNzcGVsbGluZ3NJblJhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6Om1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjptYXJrTWlzc3BlbGxpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0Jh
ZEdyYW1tYXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hcik6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKiBlZGl0
aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGll
bnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6Z2V0QXV0b0NvcnJl
Y3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQpOgorICAgICAgICAqIHBhZ2UvRWRpdG9yQ2xp
ZW50Lmg6CisKIDIwMDktMDMtMzAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29t
PgogCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81ODM4ODcxPiBDcmFzaFRyYWNlcjogMTQ4MyBj
cmFzaGVzIFF1aWNrbG9va2luZwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDQyMTE3KQor
KysgV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNDQsNyAr
MTM0NCw3IEBAIHZvaWQgRWRpdG9yOjpsZWFyblNwZWxsaW5nKCkKICAgICBjbGllbnQoKS0+bGVh
cm5Xb3JkKHRleHQpOwogfQogCi1zdGF0aWMgU3RyaW5nIGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5S
YW5nZShFZGl0b3JDbGllbnQqIGNsaWVudCwgUmFuZ2UqIHNlYXJjaFJhbmdlLCBpbnQmIGZpcnN0
TWlzc3BlbGxpbmdPZmZzZXQsIGJvb2wgbWFya0FsbCkKK3N0YXRpYyBTdHJpbmcgZmluZEZpcnN0
TWlzc3BlbGxpbmdJblJhbmdlKEVkaXRvckNsaWVudCogY2xpZW50LCBSYW5nZSogc2VhcmNoUmFu
Z2UsIGludCYgZmlyc3RNaXNzcGVsbGluZ09mZnNldCwgYm9vbCBtYXJrQWxsLCBpbnQmIGZpcnN0
TWlzc3BlbGxpbmdDaGFyQ291bnQpCiB7CiAgICAgQVNTRVJUX0FSRyhjbGllbnQsIGNsaWVudCk7
CiAgICAgQVNTRVJUX0FSRyhzZWFyY2hSYW5nZSwgc2VhcmNoUmFuZ2UpOwpAQCAtMTM4MSw2ICsx
MzgxLDcgQEAgc3RhdGljIFN0cmluZyBmaW5kRmlyc3RNaXNzcGVsbGluZ0luUmFuZwogICAgICAg
ICAgICAgICAgIC8vIFJlbWVtYmVyIGZpcnN0LWVuY291bnRlcmVkIG1pc3NwZWxsaW5nIGFuZCBp
dHMgb2Zmc2V0CiAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdE1pc3NwZWxsaW5nKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQgPSBjdXJyZW50Q2h1bmtPZmZz
ZXQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uOworICAgICAgICAgICAgICAgICAgICBmaXJzdE1pc3Nw
ZWxsaW5nQ2hhckNvdW50ID0gbWlzc3BlbGxpbmdMZW5ndGg7CiAgICAgICAgICAgICAgICAgICAg
IGZpcnN0TWlzc3BlbGxpbmcgPSBTdHJpbmcoY2hhcnMgKyBtaXNzcGVsbGluZ0xvY2F0aW9uLCBt
aXNzcGVsbGluZ0xlbmd0aCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApA
QCAtMTc0NSw3ICsxNzQ2LDggQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGlu
ZyhibwogICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ID0gZm91bmRPZmZzZXQ7CiAgICAgfQog
I2Vsc2UKLSAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBmaW5kRmlyc3RNaXNzcGVsbGluZ0lu
UmFuZ2UoY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0KCksIG1pc3NwZWxsaW5nT2Zm
c2V0LCBmYWxzZSk7CisgICAgaW50IG1pc3NwZWxsaW5nQ2hhckNvdW50OworICAgIFN0cmluZyBt
aXNzcGVsbGVkV29yZCA9IGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5nZShjbGllbnQoKSwgc3Bl
bGxpbmdTZWFyY2hSYW5nZS5nZXQoKSwgbWlzc3BlbGxpbmdPZmZzZXQsIGZhbHNlLCBtaXNzcGVs
bGluZ0NoYXJDb3VudCk7CiAgICAgCiAgICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2U7CiAKQEAg
LTE3ODUsNyArMTc4Nyw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmco
Ym8KICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBmb3VuZE9mZnNldDsKICAgICAg
ICAgfQogI2Vsc2UKLSAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBmaW5kRmlyc3RNaXNzcGVsbGlu
Z0luUmFuZ2UoY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0KCksIG1pc3NwZWxsaW5n
T2Zmc2V0LCBmYWxzZSk7CisgICAgICAgIG1pc3NwZWxsZWRXb3JkID0gZmluZEZpcnN0TWlzc3Bl
bGxpbmdJblJhbmdlKGNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlLmdldCgpLCBtaXNzcGVs
bGluZ09mZnNldCwgZmFsc2UsIG1pc3NwZWxsaW5nQ2hhckNvdW50KTsKIAogI2lmbmRlZiBCVUlM
RElOR19PTl9USUdFUgogICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UgPSBzcGVsbGluZ1NlYXJj
aFJhbmdlLT5jbG9uZVJhbmdlKGVjKTsKQEAgLTIwNDcsNyArMjA0OSw3IEBAIGJvb2wgRWRpdG9y
OjpzcGVsbGluZ1BhbmVsSXNTaG93aW5nKCkKICAgICByZXR1cm4gY2xpZW50KCktPnNwZWxsaW5n
VUlJc1Nob3dpbmcoKTsKIH0KIAotdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5
cGluZ1RvUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwKQordm9pZCBFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICZwLCBpbnQmIGZpcnN0TWlzc3BlbGxlZENoYXJPZmZzZXQsIGludCYgZmlyc3RNaXNzcGVsbGVk
Q2hhckNvdW50KQogewogICAgIGlmICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjA2Miw3ICsyMDY0LDcgQEAgdm9pZCBFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZwogICAgIH0KICNlbHNlCiAgICAgLy8gQ2hlY2sgc3Bl
bGxpbmcgb2Ygb25lIHdvcmQKLSAgICBtYXJrTWlzc3BlbGxpbmdzKFZpc2libGVTZWxlY3Rpb24o
c3RhcnRPZldvcmQocCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQocCwgUmlnaHRX
b3JkSWZPbkJvdW5kYXJ5KSkpOworICAgIG1hcmtNaXNzcGVsbGluZ3MoVmlzaWJsZVNlbGVjdGlv
bihzdGFydE9mV29yZChwLCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChwLCBSaWdo
dFdvcmRJZk9uQm91bmRhcnkpKSwgZmlyc3RNaXNzcGVsbGVkQ2hhck9mZnNldCwgZmlyc3RNaXNz
cGVsbGVkQ2hhckNvdW50KTsKICAgICAKICAgICBpZiAoIWlzR3JhbW1hckNoZWNraW5nRW5hYmxl
ZCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMDcyLDEyICsyMDc0LDEwIEBAIHZvaWQgRWRpdG9y
OjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBt
YXJrQWxsTWlzc3BlbGxpbmdzSW5SYW5nZShFZGl0b3JDbGllbnQqIGNsaWVudCwgUmFuZ2UqIHNl
YXJjaFJhbmdlKQorc3RhdGljIHZvaWQgbWFya0FsbE1pc3NwZWxsaW5nc0luUmFuZ2UoRWRpdG9y
Q2xpZW50KiBjbGllbnQsIFJhbmdlKiBzZWFyY2hSYW5nZSwgaW50JiBmaXJzdE1pc3NwZWxsZWRD
aGFyT2Zmc2V0LCBpbnQmIGZpcnN0TWlzc3BlbGxlZENoYXJDb3VudCkKIHsKLSAgICAvLyBVc2Ug
dGhlICJtYXJrQWxsIiBmZWF0dXJlIG9mIGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5nZS4gSWdu
b3JlIHRoZSByZXR1cm4gdmFsdWUgYW5kIHRoZSAib3V0IHBhcmFtZXRlciI7Ci0gICAgLy8gYWxs
IHdlIG5lZWQgdG8gZG8gaXMgbWFyayBldmVyeSBpbnN0YW5jZS4KLSAgICBpbnQgaWdub3JlZE9m
ZnNldDsKLSAgICBmaW5kRmlyc3RNaXNzcGVsbGluZ0luUmFuZ2UoY2xpZW50LCBzZWFyY2hSYW5n
ZSwgaWdub3JlZE9mZnNldCwgdHJ1ZSk7CisgICAgLy8gVXNlIHRoZSAibWFya0FsbCIgZmVhdHVy
ZSBvZiBmaW5kRmlyc3RNaXNzcGVsbGluZ0luUmFuZ2UuCisgICAgZmluZEZpcnN0TWlzc3BlbGxp
bmdJblJhbmdlKGNsaWVudCwgc2VhcmNoUmFuZ2UsIGZpcnN0TWlzc3BlbGxlZENoYXJPZmZzZXQs
IHRydWUsIGZpcnN0TWlzc3BlbGxlZENoYXJDb3VudCk7CiB9CiAKICNpZm5kZWYgQlVJTERJTkdf
T05fVElHRVIKQEAgLTIwOTEsNyArMjA5MSw3IEBAIHN0YXRpYyB2b2lkIG1hcmtBbGxCYWRHcmFt
bWFySW5SYW5nZShFZGkKIH0KICNlbmRpZgogICAgIAotc3RhdGljIHZvaWQgbWFya01pc3NwZWxs
aW5nc09yQmFkR3JhbW1hcihFZGl0b3IqIGVkaXRvciwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uLCBib29sIGNoZWNrU3BlbGxpbmcpCitzdGF0aWMgdm9pZCBtYXJrTWlzc3BlbGxp
bmdzT3JCYWRHcmFtbWFyKEVkaXRvciogZWRpdG9yLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24sIGJvb2wgY2hlY2tTcGVsbGluZywgaW50JiBmaXJzdE1pc3NwZWxsZWRDaGFyT2Zm
c2V0LCBpbnQmIGZpcnN0TWlzc3BlbGxlZENoYXJDb3VudCkKIHsKICAgICAvLyBUaGlzIGZ1bmN0
aW9uIGlzIGNhbGxlZCB3aXRoIGEgc2VsZWN0aW9uIGFscmVhZHkgZXhwYW5kZWQgdG8gd29yZCBi
b3VuZGFyaWVzLgogICAgIC8vIE1pZ2h0IGJlIG5pY2UgdG8gYXNzZXJ0IHRoYXQgaGVyZS4KQEAg
LTIxMTUsNyArMjExNSw3IEBAIHN0YXRpYyB2b2lkIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1t
YXIKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChjaGVja1NwZWxsaW5nKQotICAgICAg
ICBtYXJrQWxsTWlzc3BlbGxpbmdzSW5SYW5nZShlZGl0b3ItPmNsaWVudCgpLCBzZWFyY2hSYW5n
ZS5nZXQoKSk7CisgICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NJblJhbmdlKGVkaXRvci0+Y2xp
ZW50KCksIHNlYXJjaFJhbmdlLmdldCgpLCBmaXJzdE1pc3NwZWxsZWRDaGFyT2Zmc2V0LCBmaXJz
dE1pc3NwZWxsZWRDaGFyQ291bnQpOwogICAgIGVsc2UgewogI2lmZGVmIEJVSUxESU5HX09OX1RJ
R0VSCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjEyNiwxNSArMjEyNiwxNiBA
QCBzdGF0aWMgdm9pZCBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyCiAgICAgfSAgICAKIH0K
IAotdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3MoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uKQordm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3MoY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uLCBpbnQmIGZpcnN0TWlzc3BlbGxlZENoYXJPZmZzZXQsIGludCYg
Zmlyc3RNaXNzcGVsbGVkQ2hhckNvdW50KQogewotICAgIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdy
YW1tYXIodGhpcywgc2VsZWN0aW9uLCB0cnVlKTsKKyAgICBtYXJrTWlzc3BlbGxpbmdzT3JCYWRH
cmFtbWFyKHRoaXMsIHNlbGVjdGlvbiwgdHJ1ZSwgZmlyc3RNaXNzcGVsbGVkQ2hhck9mZnNldCwg
Zmlyc3RNaXNzcGVsbGVkQ2hhckNvdW50KTsKIH0KICAgICAKIHZvaWQgRWRpdG9yOjptYXJrQmFk
R3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiB7CiAjaWZuZGVmIEJV
SUxESU5HX09OX1RJR0VSCi0gICAgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcih0aGlzLCBz
ZWxlY3Rpb24sIGZhbHNlKTsKKyAgICBpbnQgZmlyc3RNaXNzcGVsbGVkQ2hhck9mZnNldCwgZmly
c3RNaXNzcGVsbGVkQ2hhckNvdW50OworICAgIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIo
dGhpcywgc2VsZWN0aW9uLCBmYWxzZSwgZmlyc3RNaXNzcGVsbGVkQ2hhck9mZnNldCwgZmlyc3RN
aXNzcGVsbGVkQ2hhckNvdW50KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbik7
CiAjZW5kaWYKQEAgLTIyMDYsNyArMjIwNyw4IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW0KICAgICAgICAgcmV0dXJuOwogICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NB
bmRCYWRHcmFtbWFySW5SYW5nZXMoY2xpZW50KCksIHNwZWxsaW5nU2VsZWN0aW9uLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCksIG1hcmtHcmFtbWFyICYmIGlzR3JhbW1hckNoZWNraW5nRW5hYmxl
ZCgpLCBncmFtbWFyU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwogI2Vsc2UK
LSAgICBtYXJrTWlzc3BlbGxpbmdzKHNwZWxsaW5nU2VsZWN0aW9uKTsKKyAgICBpbnQgZmlyc3RN
aXNzcGVsbGVkQ2hhck9mZnNldCwgZmlyc3RNaXNzcGVsbGVkQ2hhckNvdW50OworICAgIG1hcmtN
aXNzcGVsbGluZ3Moc3BlbGxpbmdTZWxlY3Rpb24sIGZpcnN0TWlzc3BlbGxlZENoYXJPZmZzZXQs
IGZpcnN0TWlzc3BlbGxlZENoYXJDb3VudCk7CiAgICAgaWYgKG1hcmtHcmFtbWFyKQogICAgICAg
ICBtYXJrQmFkR3JhbW1hcihncmFtbWFyU2VsZWN0aW9uKTsKICNlbmRpZgpJbmRleDogV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
aAkocmV2aXNpb24gNDIxMTcpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE5Niw4ICsxOTYsOCBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vl
c3Nlc0Zvck1pc3NwZWxsZWRTZWxlY3Rpb24oKTsKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2Vz
Rm9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbigpOwogICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXNG
b3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKGJvb2wmIG1pc3NwZWxsZWQsIGJv
b2wmIHVuZ3JhbW1hdGljYWwpOwotICAgIHZvaWQgbWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5n
VG9Qb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKLSAgICB2b2lkIG1hcmtNaXNzcGVs
bGluZ3MoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOworICAgIHZvaWQgbWFya01pc3NwZWxsaW5n
c0FmdGVyVHlwaW5nVG9Qb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBpbnQmIGZpcnN0
TWlzc3BlbGxlZENoYXJPZmZzZXQsIGludCYgZmlyc3RNaXNzcGVsbGVkQ2hhckNvdW50KTsKKyAg
ICB2b2lkIG1hcmtNaXNzcGVsbGluZ3MoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGludCYgZmly
c3RNaXNzcGVsbGVkQ2hhck9mZnNldCwgaW50JiBmaXJzdE1pc3NwZWxsZWRDaGFyQ291bnQpOwog
ICAgIHZvaWQgbWFya0JhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogICAgIHZv
aWQgbWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c3BlbGxpbmdTZWxlY3Rpb24sIGJvb2wgbWFya0dyYW1tYXIsIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIGdyYW1tYXJTZWxlY3Rpb24pOwogICAgIHZvaWQgYWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5n
KGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24gPSBmYWxzZSk7CkBAIC0yNzEsNiArMjcxLDcgQEAg
cHVibGljOgogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IG5leHRWaXNpYmxlUmFuZ2UoUmFuZ2UqLCBj
b25zdCBTdHJpbmcmLCBib29sIGZvcndhcmQsIGJvb2wgY2FzZUZsYWcsIGJvb2wgd3JhcEZsYWcp
OwogICAgIAogICAgIHZvaWQgYWRkVG9LaWxsUmluZyhSYW5nZSosIGJvb2wgcHJlcGVuZCk7Cisg
ICAgdm9pZCByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoY29uc3QgU3RyaW5nJiwgYm9vbCBzZWxl
Y3RSZXBsYWNlbWVudCwgYm9vbCBzbWFydFJlcGxhY2UpOwogcHJpdmF0ZToKICAgICBGcmFtZSog
bV9mcmFtZTsKICAgICBPd25QdHI8RGVsZXRlQnV0dG9uQ29udHJvbGxlcj4gbV9kZWxldGVCdXR0
b25Db250cm9sbGVyOwpAQCAtMjkwLDggKzI5MSw3IEBAIHByaXZhdGU6CiAgICAgUGFzc1JlZlB0
cjxDbGlwYm9hcmQ+IG5ld0dlbmVyYWxDbGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5KTsK
ICAgICB2b2lkIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKik7CiAg
ICAgdm9pZCBwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqLCBib29sIGFsbG93UGxhaW5U
ZXh0KTsKLSAgICB2b2lkIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoUGFzc1JlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiwgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCwgYm9vbCBzbWFydFJlcGxh
Y2UsIGJvb2wgbWF0Y2hTdHlsZSk7Ci0gICAgdm9pZCByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQo
Y29uc3QgU3RyaW5nJiwgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCwgYm9vbCBzbWFydFJlcGxhY2Up
OworICAgIHZvaWQgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChQYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+LCBib29sIHNlbGVjdFJlcGxhY2VtZW50LCBib29sIHNtYXJ0UmVwbGFjZSwg
Ym9vbCBtYXRjaFN0eWxlKTsgICAgCiAgICAgdm9pZCB3cml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZChQYXN0ZWJvYXJkKik7CiAgICAgdm9pZCByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVy
YXRpb24oKTsKIApAQCAtMzEzLDMgKzMxMyw2IEBAIGlubGluZSB2b2lkIEVkaXRvcjo6c2V0U3Rh
cnROZXdLaWxsUmluZ1MKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVkaXRv
cl9oCisKKworCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCShyZXZpc2lvbiA0MjEx
NykKKysrIFdlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkVkaXRv
ckNsaWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkluc2VydExpbmVCcmVha0NvbW1hbmQuaCIKQEAgLTM4LDYgKzM5LDcgQEAKICNpbmNs
dWRlICJJbnNlcnRUZXh0Q29tbWFuZC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2lu
Y2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgog
I2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKQEAgLTI5Miw4ICsyOTQsNDAgQEAgdm9pZCBUeXBp
bmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZQogICAgIGlmIChwcmV2aW91cy5pc05vdE51
bGwoKSkgewogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcDEgPSBzdGFydE9mV29yZChwcmV2aW91
cywgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcDIgPSBz
dGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwotICAgICAgICBpZiAocDEg
IT0gcDIpCi0gICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+bWFya01p
c3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Qb3NpdGlvbihwMSk7CisgICAgICAgIGlmIChwMSAhPSBw
MikgeworICAgICAgICAgICAgaW50IGZpcnN0TWlzc3BlbGxlZENoYXJPZmZzZXQgPSAwOworICAg
ICAgICAgICAgaW50IGZpcnN0TWlzc3BlbGxlZENoYXJDb3VudCA9IDA7CisgICAgICAgICAgICBG
cmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOworICAgICAgICAgICAgaWYgKGZyYW1l
KQorICAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5
cGluZ1RvUG9zaXRpb24ocDEsIGZpcnN0TWlzc3BlbGxlZENoYXJPZmZzZXQsIGZpcnN0TWlzc3Bl
bGxlZENoYXJDb3VudCk7CisKKyAgICAgICAgICAgIC8vIEF1dG9jb3JyZWN0IHRoZSBtaXNzcGVs
bGVkIHdvcmQuCisgICAgICAgICAgICBpZiAoZmlyc3RNaXNzcGVsbGVkQ2hhckNvdW50ID4gMCAm
JiBmcmFtZSkgeworICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIGV4YWN0IHNlbGVjdGlvbiBv
ZiB0aGUgbWlzc3BlbGxlZCB3b3JkLgorICAgICAgICAgICAgICAgIFdlYkNvcmU6OlZpc2libGVT
ZWxlY3Rpb24gc2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZChwMSwgTGVm
dFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQocDEsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkp
OworICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2Uoc2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCkpOworICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gbWlzc3Bl
bGxpbmdSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2Uoc2VhcmNoUmFuZ2UuZ2V0KCksIGZp
cnN0TWlzc3BlbGxlZENoYXJPZmZzZXQsIGZpcnN0TWlzc3BlbGxlZENoYXJDb3VudCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBtaXNzcGVsbGVkIHdvcmQu
CisgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nIG1pc3NwZWxsZWRXb3JkID0gcGxhaW5UZXh0
KG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgICAgIFN0cmluZyBhdXRvY29y
cmVjdGVkU3RyaW5nOworICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y2xpZW50KCkt
PmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3Jk
LCBhdXRvY29ycmVjdGVkU3RyaW5nKTsKKyAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gaWYg
YXV0b2NvcnJlY3RlZCB3b3JkIGlzIG5vbiBlbXB0eSwgcmVwbGFjZSB0aGUgbWlzc3BlbGxlZCB3
b3JkIGJ5IHRoaXMgd29yZC4KKyAgICAgICAgICAgICAgICBpZiAoIWF1dG9jb3JyZWN0ZWRTdHJp
bmcuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3
U2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pOworICAgICAgICAg
ICAgICAgICAgICBpZiAobmV3U2VsZWN0aW9uICE9IGZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0
aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZnJhbWUtPnNob3VsZENoYW5n
ZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2Vs
ZWN0aW9uKG5ld1NlbGVjdGlvbik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS0+c2hvdWxkSW5zZXJ0VGV4dChhdXRvY29y
cmVjdGVkU3RyaW5nLCBtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25U
eXBlZCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgIGZyYW1lLT5lZGl0b3IoKS0+cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGF1dG9jb3JyZWN0
ZWRTdHJpbmcsIHRydWUsIHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlzaW9u
IDQyMTE3KQorKysgV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0NCw2ICszNDQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGlnbm9yZVdvcmRJ
blNwZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGxlYXJu
V29yZChjb25zdCBTdHJpbmcmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09m
U3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50LCBpbnQqLCBpbnQqKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5n
JiwgU3RyaW5nJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKGNv
bnN0IFVDaGFyKiwgaW50LCBWZWN0b3I8R3JhbW1hckRldGFpbD4mLCBpbnQqLCBpbnQqKSB7IH0K
ICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQogICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5n
QW5kR3JhbW1hck9mUGFyYWdyYXBoKGNvbnN0IFVDaGFyKiwgaW50LCBib29sLCBWZWN0b3I8VGV4
dENoZWNraW5nUmVzdWx0PiYpICB7IH0KSW5kZXg6IFdlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgJKHJldmlzaW9uIDQy
MTE3KQorKysgV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzYsNiArMTM2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5TcGVs
bERvY3VtZW50KGNvbnN0IFN0cmluZyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3Jk
KGNvbnN0IFN0cmluZyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3Ry
aW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBp
bnQqIG1pc3NwZWxsaW5nTGVuZ3RoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldEF1dG9Db3Jy
ZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYsIFN0cmluZyYpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBp
bnQgbGVuZ3RoLCBWZWN0b3I8R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlv
biwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKSA9IDA7CiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkK
ICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ0FuZEdyYW1tYXJPZlBhcmFncmFwaChjb25z
dCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwgYm9vbCBjaGVja0dyYW1tYXIsIFZlY3RvcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKSA9IDA7CkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gNDIxMTgpCisr
KyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisy
MDA5LTAzLTMwICBTaWRkaGFydGhhIENoYXR0b3BhZGh5YXkgIDxzaWRjaGF0QGdvb2dsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSnVzdGluIEdhcmNpYS4KKyAgICAgICAgCisJCWh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDk1MzogQWRkIHN1cHBvcnQgaW4g
V2ViS2l0IAorCQlmb3IgYXV0b21hdGljIHNwZWxsaW5nIGNvcnJlY3Rpb25zLCBzbyB0aGF0IG1p
c3NwZWxsZWQgd29yZHMgdHlwZWQgaW4gCisJCWEgdGV4dC1ib3ggYXJlYSBnZXQgYXV0b21hdGlj
YWxseSBjb3JyZWN0ZWQgaWYgYXV0b2NvcnJlY3Rpb24gd29yZCBpcyAKKwkJcHJvdmlkZWQuCisK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAo
V2ViRWRpdG9yQ2xpZW50OjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29y
ZCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisKIDIwMDkt
MDMtMzAgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGZp
eGVzIGFmdGVyIHJlY2VudCBGcmFtZUxvYWRlciBjaGFuZ2VzCkluZGV4OiBXZWJLaXQvd2luL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dp
bi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCShyZXZpc2lvbiA0MjExNykKKysr
IFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjQ2LDYgKzY0NiwxMiBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tTcGVs
bGluZ09mU3RyCiAgICAgZWQtPmNoZWNrU3BlbGxpbmdPZlN0cmluZyhtX3dlYlZpZXcsIHRleHQs
IGxlbmd0aCwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwogfQogCit2
b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxl
ZFdvcmQoY29uc3QgU3RyaW5nJiBpbnB1dF93b3JkLCBTdHJpbmcmIGF1dG9jb3JyZWN0X3dvcmQp
IHsKKyAgLy8gVGhpcyBtZXRob2QgY2FuIGJlIGltcGxlbWVudGVkIHVzaW5nIGN1c3RvbWl6ZWQg
YWxnb3JpdGhtcyBmb3IgdGhlIHBhcnRpY3VsYXIgYnJvd3Nlci4KKyAgLy8gQ3VycmVudGx5LCBp
dCBjb21wdXRlcyBhbiBlbXB0eSBzdHJpbmcuCisgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIHZv
aWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciogdGV4
dCwgaW50IGxlbmd0aCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBkZXRhaWxzLCBpbnQqIGJhZEdy
YW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKQogewogICAgIGRldGFpbHMuY2xl
YXIoKTsKSW5kZXg6IFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
aAkocmV2aXNpb24gNDIxMTcpCisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNiArMTAxLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFdlYkNvcmU6OlN0
cmluZyYpOwogICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQoY29uc3QgV2ViQ29yZTo6U3RyaW5n
Jik7CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBVQ2hhcios
IGludCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xl
bmd0aCk7CisgICAgdmlydHVhbCB2b2lkIGdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3Nw
ZWxsZWRXb3JkKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYsIFdlYkNvcmU6OlN0cmluZyYpOwogICAg
IHZpcnR1YWwgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5n
dGgsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0
aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVs
bGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiwgY29uc3QgV2Vi
Q29yZTo6R3JhbW1hckRldGFpbCYgZGV0YWlsKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3Bl
bGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsK
</data>
<flag name="review"
          id="14415"
          type_id="1"
          status="-"
          setter="justin.garcia"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29450</attachid>
            <date>2009-04-13 17:53:18 -0700</date>
            <delta_ts>2009-04-29 14:56:44 -0700</delta_ts>
            <desc>Support for automatic spelling corrections</desc>
            <filename>new_patch.txt</filename>
            <type>text/plain</type>
            <size>19840</size>
            <attacher name="Siddhartha Chattopadhyay">sidchat</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MjQ3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMDktMDQtMTMgIFNpZGRoYXJ0aGEgQ2hhdHRvcGFkaHlheSAgPHNp
ZGNoYXRAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBKdXN0aW4gR2FyY2lhLgor
CisgICAgICAgIEFkZCBhdXRvbWF0aWMgc3BlbGxpbmcgY29ycmVjdGlvbiBzdXBwb3J0LgorCisg
ICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEZpcnN0
TWlzc3BlbGxpbmdJblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRv
TmV4dE1pc3NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxs
aW5nc0FmdGVyVHlwaW5nVG9Qb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjptYXJrQWxsTWlz
c3BlbGxpbmdzSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjptYXJrTWlzc3BlbGxpbmdzT3JC
YWRHcmFtbWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxsaW5ncyk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtCYWRHcmFtbWFyKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIpOgorICAgICAgICAq
IGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5
cGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhT
ZXBhcmF0b3JJblF1b3RlZENvbnRlbnQpOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50OjpnZXRBdXRvQ29ycmVjdFN1
Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZCk6CisgICAgICAgICogcGFnZS9FZGl0b3JDbGllbnQu
aDoKKwogMjAwOS0wNC0xMyAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3VzdGF2by5ub3Jvbmhh
QGNvbGxhYm9yYS5jby51az4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBIeWF0dC4KSW5k
ZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiA0MjQ3MikKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQ0LDcgKzEzNDQsNyBAQCB2b2lkIEVkaXRvcjo6
bGVhcm5TcGVsbGluZygpCiAgICAgY2xpZW50KCktPmxlYXJuV29yZCh0ZXh0KTsKIH0KIAotc3Rh
dGljIFN0cmluZyBmaW5kRmlyc3RNaXNzcGVsbGluZ0luUmFuZ2UoRWRpdG9yQ2xpZW50KiBjbGll
bnQsIFJhbmdlKiBzZWFyY2hSYW5nZSwgaW50JiBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0LCBib29s
IG1hcmtBbGwpCitzdGF0aWMgU3RyaW5nIGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5nZShFZGl0
b3JDbGllbnQqIGNsaWVudCwgUmFuZ2UqIHNlYXJjaFJhbmdlLCBpbnQmIGZpcnN0TWlzc3BlbGxp
bmdPZmZzZXQsIGJvb2wgbWFya0FsbCwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1Jh
bmdlKQogewogICAgIEFTU0VSVF9BUkcoY2xpZW50LCBjbGllbnQpOwogICAgIEFTU0VSVF9BUkco
c2VhcmNoUmFuZ2UsIHNlYXJjaFJhbmdlKTsKQEAgLTEzODAsMTcgKzEzODAsMjMgQEAgc3RhdGlj
IFN0cmluZyBmaW5kRmlyc3RNaXNzcGVsbGluZ0luUmFuZwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIC8vIFJlbWVtYmVyIGZpcnN0LWVuY291bnRlcmVkIG1pc3NwZWxsaW5nIGFu
ZCBpdHMgb2Zmc2V0CiAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdE1pc3NwZWxsaW5nKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQgPSBjdXJyZW50Q2h1bmtP
ZmZzZXQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uOwotICAgICAgICAgICAgICAgICAgICBmaXJzdE1p
c3NwZWxsaW5nID0gU3RyaW5nKGNoYXJzICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxp
bmdMZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0ID0g
Y3VycmVudENodW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbjsgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Ly8gTWFyayB0aGlzIGluc3RhbmNlIGlmIHdlJ3JlIG1hcmtpbmcgYWxsIGluc3RhbmNlcy4gT3Ro
ZXJ3aXNlIGJhaWwgb3V0IGJlY2F1c2Ugd2UgZm91bmQgdGhlIGZpcnN0IG9uZS4KICAgICAgICAg
ICAgICAgICBpZiAoIW1hcmtBbGwpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgcmFuZ2Ugb2YgbWlzc3BlbGxl
ZCB3b3JkCisgICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSByYW5nZSBvZiBtaXNzcGVsbGVkIHdv
cmQgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IG1pc3Nw
ZWxsaW5nUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHNlYXJjaFJhbmdlLCBjdXJyZW50
Q2h1bmtPZmZzZXQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7Ci0g
ICAgICAgICAgICAgICAgCisKKyAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciBmaXJzdCBlbmNv
dW50ZXJlZCBtaXNzcGVsbGluZyByYW5nZS4KKyAgICAgICAgICAgICAgICBpZiAoIWZpcnN0TWlz
c3BlbGxpbmcpIHsKKyAgICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmcgPSBTdHJpbmco
Y2hhcnMgKyBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgICAg
ICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UgPSBtaXNzcGVsbGluZ1JhbmdlOworICAg
ICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIC8vIFN0b3JlIG1hcmtlciBmb3IgbWlz
c3BlbGxlZCB3b3JkCiAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
ICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVu
dCgpLT5hZGRNYXJrZXIobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsaW5nKTsKQEAgLTE3NDUsNyArMTc1MSw4IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0
TWlzc3BlbGxpbmcoYm8KICAgICAgICAgZ3JhbW1hclBocmFzZU9mZnNldCA9IGZvdW5kT2Zmc2V0
OwogICAgIH0KICNlbHNlCi0gICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkID0gZmluZEZpcnN0TWlz
c3BlbGxpbmdJblJhbmdlKGNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlLmdldCgpLCBtaXNz
cGVsbGluZ09mZnNldCwgZmFsc2UpOworICAgIFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGlu
Z1JhbmdlOworICAgIFN0cmluZyBtaXNzcGVsbGVkV29yZCA9IGZpbmRGaXJzdE1pc3NwZWxsaW5n
SW5SYW5nZShjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZS5nZXQoKSwgbWlzc3BlbGxpbmdP
ZmZzZXQsIGZhbHNlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogICAgIAogICAgIFN0cmluZyBi
YWRHcmFtbWFyUGhyYXNlOwogCkBAIC0xNzg1LDcgKzE3OTIsNyBAQCB2b2lkIEVkaXRvcjo6YWR2
YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvCiAgICAgICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0
ID0gZm91bmRPZmZzZXQ7CiAgICAgICAgIH0KICNlbHNlCi0gICAgICAgIG1pc3NwZWxsZWRXb3Jk
ID0gZmluZEZpcnN0TWlzc3BlbGxpbmdJblJhbmdlKGNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJh
bmdlLmdldCgpLCBtaXNzcGVsbGluZ09mZnNldCwgZmFsc2UpOworICAgICAgICBtaXNzcGVsbGVk
V29yZCA9IGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5nZShjbGllbnQoKSwgc3BlbGxpbmdTZWFy
Y2hSYW5nZS5nZXQoKSwgbWlzc3BlbGxpbmdPZmZzZXQsIGZhbHNlLCBmaXJzdE1pc3NwZWxsaW5n
UmFuZ2UpOwogCiAjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCiAgICAgICAgIGdyYW1tYXJTZWFy
Y2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2UoZWMpOwpAQCAtMjA0Nyw3
ICsyMDU0LDcgQEAgYm9vbCBFZGl0b3I6OnNwZWxsaW5nUGFuZWxJc1Nob3dpbmcoKQogICAgIHJl
dHVybiBjbGllbnQoKS0+c3BlbGxpbmdVSUlzU2hvd2luZygpOwogfQogCi12b2lkIEVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Qb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRp
b24gJnApCit2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Qb3NpdGlv
bihjb25zdCBWaXNpYmxlUG9zaXRpb24gJnAsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxp
bmdSYW5nZSkKIHsKICAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTIwNjIsNyArMjA2OSw3IEBAIHZvaWQgRWRpdG9yOjptYXJr
TWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcKICAgICB9CiAjZWxzZQogICAgIC8vIENoZWNrIHNwZWxs
aW5nIG9mIG9uZSB3b3JkCi0gICAgbWFya01pc3NwZWxsaW5ncyhWaXNpYmxlU2VsZWN0aW9uKHN0
YXJ0T2ZXb3JkKHAsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHAsIFJpZ2h0V29y
ZElmT25Cb3VuZGFyeSkpKTsKKyAgICBtYXJrTWlzc3BlbGxpbmdzKFZpc2libGVTZWxlY3Rpb24o
c3RhcnRPZldvcmQocCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQocCwgUmlnaHRX
b3JkSWZPbkJvdW5kYXJ5KSksIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAgICAgCiAgICAgaWYg
KCFpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjA3Miwx
MiArMjA3OSwxMiBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nCiAj
ZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgbWFya0FsbE1pc3NwZWxsaW5nc0luUmFuZ2UoRWRpdG9y
Q2xpZW50KiBjbGllbnQsIFJhbmdlKiBzZWFyY2hSYW5nZSkKK3N0YXRpYyB2b2lkIG1hcmtBbGxN
aXNzcGVsbGluZ3NJblJhbmdlKEVkaXRvckNsaWVudCogY2xpZW50LCBSYW5nZSogc2VhcmNoUmFu
Z2UsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKIHsKICAgICAvLyBVc2Ug
dGhlICJtYXJrQWxsIiBmZWF0dXJlIG9mIGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5nZS4gSWdu
b3JlIHRoZSByZXR1cm4gdmFsdWUgYW5kIHRoZSAib3V0IHBhcmFtZXRlciI7CiAgICAgLy8gYWxs
IHdlIG5lZWQgdG8gZG8gaXMgbWFyayBldmVyeSBpbnN0YW5jZS4KICAgICBpbnQgaWdub3JlZE9m
ZnNldDsKLSAgICBmaW5kRmlyc3RNaXNzcGVsbGluZ0luUmFuZ2UoY2xpZW50LCBzZWFyY2hSYW5n
ZSwgaWdub3JlZE9mZnNldCwgdHJ1ZSk7CisgICAgZmluZEZpcnN0TWlzc3BlbGxpbmdJblJhbmdl
KGNsaWVudCwgc2VhcmNoUmFuZ2UsIGlnbm9yZWRPZmZzZXQsIHRydWUsIGZpcnN0TWlzc3BlbGxp
bmdSYW5nZSk7CiB9CiAKICNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKQEAgLTIwOTEsNyArMjA5
OCw3IEBAIHN0YXRpYyB2b2lkIG1hcmtBbGxCYWRHcmFtbWFySW5SYW5nZShFZGkKIH0KICNlbmRp
ZgogICAgIAotc3RhdGljIHZvaWQgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihFZGl0b3Iq
IGVkaXRvciwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib29sIGNoZWNrU3Bl
bGxpbmcpCitzdGF0aWMgdm9pZCBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKEVkaXRvciog
ZWRpdG9yLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvb2wgY2hlY2tTcGVs
bGluZywgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQogewogICAgIC8vIFRo
aXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYSBzZWxlY3Rpb24gYWxyZWFkeSBleHBhbmRlZCB0
byB3b3JkIGJvdW5kYXJpZXMuCiAgICAgLy8gTWlnaHQgYmUgbmljZSB0byBhc3NlcnQgdGhhdCBo
ZXJlLgpAQCAtMjExNSw3ICsyMTIyLDcgQEAgc3RhdGljIHZvaWQgbWFya01pc3NwZWxsaW5nc09y
QmFkR3JhbW1hcgogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKGNoZWNrU3BlbGxpbmcp
Ci0gICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NJblJhbmdlKGVkaXRvci0+Y2xpZW50KCksIHNl
YXJjaFJhbmdlLmdldCgpKTsKKyAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0luUmFuZ2UoZWRp
dG9yLT5jbGllbnQoKSwgc2VhcmNoUmFuZ2UuZ2V0KCksIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7
CiAgICAgZWxzZSB7CiAjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC0yMTI2LDE1ICsyMTMzLDE2IEBAIHN0YXRpYyB2b2lkIG1hcmtNaXNz
cGVsbGluZ3NPckJhZEdyYW1tYXIKICAgICB9ICAgIAogfQogCi12b2lkIEVkaXRvcjo6bWFya01p
c3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCit2b2lkIEVkaXRv
cjo6bWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIFJl
ZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKIHsKLSAgICBtYXJrTWlzc3BlbGxp
bmdzT3JCYWRHcmFtbWFyKHRoaXMsIHNlbGVjdGlvbiwgdHJ1ZSk7CisgICAgbWFya01pc3NwZWxs
aW5nc09yQmFkR3JhbW1hcih0aGlzLCBzZWxlY3Rpb24sIHRydWUsIGZpcnN0TWlzc3BlbGxpbmdS
YW5nZSk7CiB9CiAgICAgCiB2b2lkIEVkaXRvcjo6bWFya0JhZEdyYW1tYXIoY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogewogI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgotICAg
IG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIodGhpcywgc2VsZWN0aW9uLCBmYWxzZSk7Cisg
ICAgUmVmUHRyPFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2U7CisgICAgbWFya01pc3NwZWxs
aW5nc09yQmFkR3JhbW1hcih0aGlzLCBzZWxlY3Rpb24sIGZhbHNlLCBmaXJzdE1pc3NwZWxsaW5n
UmFuZ2UpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uKTsKICNlbmRpZgpAQCAt
MjIwNiw3ICsyMjE0LDggQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFt
bQogICAgICAgICByZXR1cm47CiAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJ
blJhbmdlcyhjbGllbnQoKSwgc3BlbGxpbmdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5n
ZXQoKSwgbWFya0dyYW1tYXIgJiYgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIGdyYW1tYXJT
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CiAjZWxzZQotICAgIG1hcmtNaXNz
cGVsbGluZ3Moc3BlbGxpbmdTZWxlY3Rpb24pOworICAgIFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNz
cGVsbGluZ1JhbmdlOworICAgIG1hcmtNaXNzcGVsbGluZ3Moc3BlbGxpbmdTZWxlY3Rpb24sIGZp
cnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAgICAgaWYgKG1hcmtHcmFtbWFyKQogICAgICAgICBtYXJr
QmFkR3JhbW1hcihncmFtbWFyU2VsZWN0aW9uKTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2
aXNpb24gNDI0NzIpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE5Niw4ICsxOTYsOCBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3Nlc0Zv
ck1pc3NwZWxsZWRTZWxlY3Rpb24oKTsKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzRm9yVW5n
cmFtbWF0aWNhbFNlbGVjdGlvbigpOwogICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXNGb3JNaXNz
cGVsbGVkT3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKGJvb2wmIG1pc3NwZWxsZWQsIGJvb2wmIHVu
Z3JhbW1hdGljYWwpOwotICAgIHZvaWQgbWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Qb3Np
dGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKLSAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3Mo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOworICAgIHZvaWQgbWFya01pc3NwZWxsaW5nc0FmdGVy
VHlwaW5nVG9Qb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBSZWZQdHI8UmFuZ2U+JiBm
aXJzdE1pc3NwZWxsaW5nUmFuZ2UpOworICAgIHZvaWQgbWFya01pc3NwZWxsaW5ncyhjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsK
ICAgICB2b2lkIG1hcmtCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKICAgICB2
b2lkIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNwZWxsaW5nU2VsZWN0aW9uLCBib29sIG1hcmtHcmFtbWFyLCBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBncmFtbWFyU2VsZWN0aW9uKTsKICAgICB2b2lkIGFkdmFuY2VUb05leHRNaXNzcGVsbGlu
Zyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uID0gZmFsc2UpOwpAQCAtMjcxLDYgKzI3MSw3IEBA
IHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPFJhbmdlPiBuZXh0VmlzaWJsZVJhbmdlKFJhbmdlKiwg
Y29uc3QgU3RyaW5nJiwgYm9vbCBmb3J3YXJkLCBib29sIGNhc2VGbGFnLCBib29sIHdyYXBGbGFn
KTsKICAgICAKICAgICB2b2lkIGFkZFRvS2lsbFJpbmcoUmFuZ2UqLCBib29sIHByZXBlbmQpOwor
ICAgIHZvaWQgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGNvbnN0IFN0cmluZyYsIGJvb2wgc2Vs
ZWN0UmVwbGFjZW1lbnQsIGJvb2wgc21hcnRSZXBsYWNlKTsKIHByaXZhdGU6CiAgICAgRnJhbWUq
IG1fZnJhbWU7CiAgICAgT3duUHRyPERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI+IG1fZGVsZXRlQnV0
dG9uQ29udHJvbGxlcjsKQEAgLTI5MCw4ICsyOTEsNyBAQCBwcml2YXRlOgogICAgIFBhc3NSZWZQ
dHI8Q2xpcGJvYXJkPiBuZXdHZW5lcmFsQ2xpcGJvYXJkKENsaXBib2FyZEFjY2Vzc1BvbGljeSk7
CiAgICAgdm9pZCBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCopOwog
ICAgIHZvaWQgcGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiwgYm9vbCBhbGxvd1BsYWlu
VGV4dCk7Ci0gICAgdm9pZCByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KFBhc3NSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4sIGJvb2wgc2VsZWN0UmVwbGFjZW1lbnQsIGJvb2wgc21hcnRSZXBs
YWNlLCBib29sIG1hdGNoU3R5bGUpOwotICAgIHZvaWQgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0
KGNvbnN0IFN0cmluZyYsIGJvb2wgc2VsZWN0UmVwbGFjZW1lbnQsIGJvb2wgc21hcnRSZXBsYWNl
KTsKKyAgICB2b2lkIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiwgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCwgYm9vbCBzbWFydFJlcGxhY2Us
IGJvb2wgbWF0Y2hTdHlsZSk7ICAgIAogICAgIHZvaWQgd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9h
cmQoUGFzdGVib2FyZCopOwogICAgIHZvaWQgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3Bl
cmF0aW9uKCk7CiAKQEAgLTMxMywzICszMTMsNiBAQCBpbmxpbmUgdm9pZCBFZGl0b3I6OnNldFN0
YXJ0TmV3S2lsbFJpbmdTCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFZGl0
b3JfaAorCisKKwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAkocmV2aXNpb24gNDI0
NzIpCisrKyBXZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJEZWxldGVTZWxlY3Rpb25Db21tYW5kLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKKyNpbmNsdWRlICJFZGl0
b3JDbGllbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJJbnNlcnRMaW5lQnJlYWtDb21tYW5kLmgiCkBAIC0zOCw2ICszOSw3IEBACiAjaW5j
bHVkZSAiSW5zZXJ0VGV4dENvbW1hbmQuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNp
bmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIK
ICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCkBAIC0yOTIsOCArMjk0LDMyIEBAIHZvaWQgVHlw
aW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGUKICAgICBpZiAocHJldmlvdXMuaXNOb3RO
dWxsKCkpIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAxID0gc3RhcnRPZldvcmQocHJldmlv
dXMsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAyID0g
c3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKLSAgICAgICAgaWYgKHAx
ICE9IHAyKQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPm1hcmtN
aXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvUG9zaXRpb24ocDEpOworICAgICAgICBpZiAocDEgIT0g
cDIpIHsKKyAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZTsKKyAgICAg
ICAgICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgICAgICAgICBm
cmFtZS0+ZWRpdG9yKCktPm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvUG9zaXRpb24ocDEs
IG1pc3NwZWxsaW5nUmFuZ2UpOworCisgICAgICAgICAgICAvLyBBdXRvY29ycmVjdCB0aGUgbWlz
c3BlbGxlZCB3b3JkLgorICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCkgIT0g
TlVMTCkgeworICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgbWlzc3BlbGxlZCB3b3JkLgorICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyBtaXNzcGVsbGVkV29yZCA9IHBsYWluVGV4dChtaXNz
cGVsbGluZ1JhbmdlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgYXV0b2NvcnJlY3Rl
ZFN0cmluZyA9IGZyYW1lLT5lZGl0b3IoKS0+Y2xpZW50KCktPmdldEF1dG9Db3JyZWN0U3VnZ2Vz
dGlvbkZvck1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKKyAgICAgICAgCisgICAgICAg
ICAgICAgICAgLy8gaWYgYXV0b2NvcnJlY3RlZCB3b3JkIGlzIG5vbiBlbXB0eSwgcmVwbGFjZSB0
aGUgbWlzc3BlbGxlZCB3b3JkIGJ5IHRoaXMgd29yZC4KKyAgICAgICAgICAgICAgICBpZiAoIWF1
dG9jb3JyZWN0ZWRTdHJpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIFZpc2li
bGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERPV05TVFJF
QU0pOworICAgICAgICAgICAgICAgICAgICBpZiAobmV3U2VsZWN0aW9uICE9IGZyYW1lLT5zZWxl
Y3Rpb24oKS0+c2VsZWN0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZnJh
bWUtPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5zZWxl
Y3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS0+c2hvdWxkSW5z
ZXJ0VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb25UeXBlZCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+cmVwbGFjZVNlbGVjdGlvbldpdGhU
ZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTM1OCwxMyArMzg0LDYg
QEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcgogCiB2b2lkIFR5cGlu
Z0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCgpCiB7Ci0g
ICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBzdGFydHMgaW5zaWRlIGEgdGFibGUsIGp1c3QgaW5zZXJ0
IHRoZSBwYXJhZ3JhcGggc2VwYXJhdG9yIG5vcm1hbGx5Ci0gICAgLy8gQnJlYWtpbmcgdGhlIGJs
b2NrcXVvdGUgd291bGQgYWxzbyBicmVhayBhcGFydCB0aGUgdGFibGUsIHdoaWNoIGlzIHVuZWNl
c3Nhcnkgd2hlbiBpbnNlcnRpbmcgYSBuZXdsaW5lCi0gICAgaWYgKGVuY2xvc2luZ05vZGVPZlR5
cGUoZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgJmlzVGFibGVTdHJ1Y3R1cmVOb2RlKSkgewot
ICAgICAgICBpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICAgICAgCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoQnJlYWtCbG9ja3F1b3Rl
Q29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1h
bmQoKTsKIH0KQEAgLTU2NSwzICs1ODQsNCBAQCBib29sIFR5cGluZ0NvbW1hbmQ6OmlzVHlwaW5n
Q29tbWFuZCgpIGNvCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpJbmRleDogV2ViQ29y
ZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRW1w
dHlDbGllbnRzLmgJKHJldmlzaW9uIDQyNDcyKQorKysgV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGll
bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0NCw2ICszNDQsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJikgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChjb25zdCBTdHJpbmcmKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50LCBpbnQqLCBpbnQq
KSB7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNz
cGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKSB7IHJldHVybiBTdHJpbmco
KTsgfQogICAgIHZpcnR1YWwgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhcios
IGludCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50KiwgaW50KikgeyB9CiAjaWYgUExBVEZP
Uk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ0FuZEdyYW1tYXJP
ZlBhcmFncmFwaChjb25zdCBVQ2hhciosIGludCwgYm9vbCwgVmVjdG9yPFRleHRDaGVja2luZ1Jl
c3VsdD4mKSAgeyB9CkBAIC00MjIsMyArNDIzLDQgQEAgcHVibGljOgogfQogCiAjZW5kaWYgLy8g
RW1wdHlDbGllbnRzX2gKKwpJbmRleDogV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAkocmV2aXNpb24gNDI0NzIpCisr
KyBXZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw2ICsx
MzYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1l
bnQoY29uc3QgU3RyaW5nJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQoY29uc3Qg
U3RyaW5nJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29u
c3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlz
c3BlbGxpbmdMZW5ndGgpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1
Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwg
aW50IGxlbmd0aCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRp
b24sIGludCogYmFkR3JhbW1hckxlbmd0aCkgPSAwOwogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdBbmRHcmFtbWFyT2ZQYXJhZ3JhcGgoY29u
c3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIGJvb2wgY2hlY2tHcmFtbWFyLCBWZWN0b3I8VGV4
dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykgPSAwOwpAQCAtMTUxLDMgKzE1Miw0IEBAIHB1Ymxp
YzoKIH0KIAogI2VuZGlmIC8vIEVkaXRvckNsaWVudF9oCisKSW5kZXg6IFdlYktpdC9tYWMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0MjQ3
MykKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEg
QEAKKzIwMDktMDQtMTMgIFNpZGRoYXJ0aGEgQ2hhdHRvcGFkaHlheSAgPHNpZGNoYXRAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBKdXN0aW4gR2FyY2lhLgorCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpnZXRBdXRv
Q29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZCk6CisKIDIwMDktMDQtMTMgIEtldmlu
IERlY2tlciAgPGtkZWNrZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
LgpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCShy
ZXZpc2lvbiA0MjQ3MikKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xp
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgV2ViQ29yZTo6U3RyaW5n
Jik7CiAgICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50
IGxlbmd0aCwgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3Ro
KTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25G
b3JNaXNzcGVsbGVkV29yZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZv
aWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBXVEY6OlZl
Y3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBp
bnQqIGJhZEdyYW1tYXJMZW5ndGgpOwogICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nQW5k
R3JhbW1hck9mUGFyYWdyYXBoKGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCBib29sIGNo
ZWNrR3JhbW1hciwgV1RGOjpWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiYgcmVz
dWx0cyk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmlu
Zyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmLCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJik7
CkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQko
cmV2aXNpb24gNDI0NzIpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTY1LDYgKzU2NSwxMiBAQCB2b2lkIFdlYkVkaXRv
ckNsaWVudDo6Y2hlY2tTcGVsbGluZ09mU3RyCiAgICAgICAgICptaXNzcGVsbGluZ0xlbmd0aCA9
IHJhbmdlLmxlbmd0aDsKIH0KIAorU3RyaW5nIFdlYkVkaXRvckNsaWVudDo6Z2V0QXV0b0NvcnJl
Y3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBpbnB1dF93b3JkKSB7
CisgIC8vIFRoaXMgbWV0aG9kIGNhbiBiZSBpbXBsZW1lbnRlZCB1c2luZyBjdXN0b21pemVkIGFs
Z29yaXRobXMgZm9yIHRoZSBwYXJ0aWN1bGFyIGJyb3dzZXIuCisgIC8vIEN1cnJlbnRseSwgaXQg
Y29tcHV0ZXMgYW4gZW1wdHkgc3RyaW5nLgorICByZXR1cm4gU3RyaW5nKCk7Cit9CisKIHZvaWQg
V2ViRWRpdG9yQ2xpZW50OjpjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciogdGV4dCwg
aW50IGxlbmd0aCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBkZXRhaWxzLCBpbnQqIGJhZEdyYW1t
YXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKQogewogI2lmbmRlZiBCVUlMRElOR19P
Tl9USUdFUgpJbmRleDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDQyNDczKQorKysgV2ViS2l0L3dpbi9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMSBAQAorMjAwOS0wNC0xMyAgU2lkZGhhcnRoYSBD
aGF0dG9wYWRoeWF5ICA8c2lkY2hhdEBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IEp1c3RpbiBHYXJjaWEuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQuY3BwOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rp
b25Gb3JNaXNzcGVsbGVkV29yZCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50Lmg6CisKIDIwMDktMDQtMTMgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFdpbmRvd3MgcGFydCAyIG9mIDxyZGFyOi8vNTQzODA2Mz4gU2F2aW5nIGhpc3Rv
cnkgY29udGFpbmluZyAxMDAsMDAwCkluZGV4OiBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuY3BwCShyZXZpc2lvbiA0MjQ3MikKKysrIFdlYktpdC93aW4vV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ2LDYg
KzY0NiwxMiBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tTcGVsbGluZ09mU3RyCiAgICAg
ZWQtPmNoZWNrU3BlbGxpbmdPZlN0cmluZyhtX3dlYlZpZXcsIHRleHQsIGxlbmd0aCwgbWlzc3Bl
bGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwogfQogCitTdHJpbmcgV2ViRWRpdG9y
Q2xpZW50OjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBT
dHJpbmcmIGlucHV0X3dvcmQpIHsKKyAgLy8gVGhpcyBtZXRob2QgY2FuIGJlIGltcGxlbWVudGVk
IHVzaW5nIGN1c3RvbWl6ZWQgYWxnb3JpdGhtcyBmb3IgdGhlIHBhcnRpY3VsYXIgYnJvd3Nlci4K
KyAgLy8gQ3VycmVudGx5LCBpdCBjb21wdXRlcyBhbiBlbXB0eSBzdHJpbmcuCisgIHJldHVybiBT
dHJpbmcoKTsKK30KKwogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5n
KGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGRl
dGFpbHMsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpCiB7
CiAgICAgZGV0YWlscy5jbGVhcigpOwpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5oCShyZXZpc2lvbiA0MjQ3MikKKysrIFdlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw2ICsxMDEs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQo
Y29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChjb25z
dCBXZWJDb3JlOjpTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3Ry
aW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBp
bnQqIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBnZXRB
dXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBXZWJDb3JlOjpTdHJp
bmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIq
LCBpbnQgbGVuZ3RoLCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdy
YW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKTsKICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYs
IGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmIGRldGFpbCk7CiAgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgV2ViQ29yZTo6U3RyaW5n
Jik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29865</attachid>
            <date>2009-04-28 15:09:41 -0700</date>
            <delta_ts>2009-05-05 16:02:29 -0700</delta_ts>
            <desc>New Patch</desc>
            <filename>patch_justin_suggestions.txt</filename>
            <type>text/plain</type>
            <size>19592</size>
            <attacher name="Siddhartha Chattopadhyay">sidchat</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Mjk2MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMDktMDQtMjggIFNpZGRoYXJ0aGEgQ2hhdHRvcGFkaHlheSAgPHNp
ZGNoYXRAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBKdXN0aW4gR2FyY2lhLgor
CisgICAgICAgIEFkZCBhdXRvbWF0aWMgc3BlbGxpbmcgY29ycmVjdGlvbiBzdXBwb3J0LgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ5NTMKKworICAg
ICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRGaXJzdE1p
c3NwZWxsaW5nSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFkdmFuY2VUb05l
eHRNaXNzcGVsbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVsbGlu
Z3NBZnRlclR5cGluZ1RvUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6bWFya0FsbE1pc3Nw
ZWxsaW5nc0luUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6bWFya01pc3NwZWxsaW5nc09yQmFk
R3JhbW1hcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3MpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQmFkR3JhbW1hcik6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKToKKyAgICAgICAgKiBl
ZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9ySW5RdW90ZWRDb250ZW50KToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6
CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6Z2V0QXV0b0NvcnJlY3RTdWdn
ZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQpOgorICAgICAgICAqIHBhZ2UvRWRpdG9yQ2xpZW50Lmg6
CisKIDIwMDktMDQtMjggIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQ6IGZpeCBkaXN0Y2hlY2sgYnVpbGQsIGFkZCBtaXNzaW5nIGhlYWRlciB0byBm
aWxlIGxpc3QuCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gNDI5NjEpCisrKyBXZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0OSw3ICsxNDQ5LDcgQEAg
dm9pZCBFZGl0b3I6OmxlYXJuU3BlbGxpbmcoKQogICAgIGNsaWVudCgpLT5sZWFybldvcmQodGV4
dCk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgZmluZEZpcnN0TWlzc3BlbGxpbmdJblJhbmdlKEVkaXRv
ckNsaWVudCogY2xpZW50LCBSYW5nZSogc2VhcmNoUmFuZ2UsIGludCYgZmlyc3RNaXNzcGVsbGlu
Z09mZnNldCwgYm9vbCBtYXJrQWxsKQorc3RhdGljIFN0cmluZyBmaW5kRmlyc3RNaXNzcGVsbGlu
Z0luUmFuZ2UoRWRpdG9yQ2xpZW50KiBjbGllbnQsIFJhbmdlKiBzZWFyY2hSYW5nZSwgaW50JiBm
aXJzdE1pc3NwZWxsaW5nT2Zmc2V0LCBib29sIG1hcmtBbGwsIFJlZlB0cjxSYW5nZT4mIGZpcnN0
TWlzc3BlbGxpbmdSYW5nZSkKIHsKICAgICBBU1NFUlRfQVJHKGNsaWVudCwgY2xpZW50KTsKICAg
ICBBU1NFUlRfQVJHKHNlYXJjaFJhbmdlLCBzZWFyY2hSYW5nZSk7CkBAIC0xNDg1LDE3ICsxNDg1
LDIzIEBAIHN0YXRpYyBTdHJpbmcgZmluZEZpcnN0TWlzc3BlbGxpbmdJblJhbmcKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciBmaXJzdC1lbmNvdW50ZXJlZCBt
aXNzcGVsbGluZyBhbmQgaXRzIG9mZnNldAogICAgICAgICAgICAgICAgIGlmICghZmlyc3RNaXNz
cGVsbGluZykgewotICAgICAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0ID0g
Y3VycmVudENodW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbjsKLSAgICAgICAgICAgICAg
ICAgICAgZmlyc3RNaXNzcGVsbGluZyA9IFN0cmluZyhjaGFycyArIG1pc3NwZWxsaW5nTG9jYXRp
b24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RNaXNzcGVs
bGluZ09mZnNldCA9IGN1cnJlbnRDaHVua09mZnNldCArIG1pc3NwZWxsaW5nTG9jYXRpb247ICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIC8vIE1hcmsgdGhpcyBpbnN0YW5jZSBpZiB3ZSdyZSBtYXJraW5nIGFsbCBp
bnN0YW5jZXMuIE90aGVyd2lzZSBiYWlsIG91dCBiZWNhdXNlIHdlIGZvdW5kIHRoZSBmaXJzdCBv
bmUuCiAgICAgICAgICAgICAgICAgaWYgKCFtYXJrQWxsKQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBDb21wdXRlIHJhbmdl
IG9mIG1pc3NwZWxsZWQgd29yZAorICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgcmFuZ2Ugb2Yg
bWlzc3BlbGxlZCB3b3JkICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgUmVmUHRy
PFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShzZWFyY2hS
YW5nZSwgY3VycmVudENodW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxp
bmdMZW5ndGgpOwotICAgICAgICAgICAgICAgIAorCisgICAgICAgICAgICAgICAgLy8gUmVtZW1i
ZXIgZmlyc3QgZW5jb3VudGVyZWQgbWlzc3BlbGxpbmcgcmFuZ2UuCisgICAgICAgICAgICAgICAg
aWYgKCFmaXJzdE1pc3NwZWxsaW5nKSB7CisgICAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxs
aW5nID0gU3RyaW5nKGNoYXJzICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5n
dGgpOworICAgICAgICAgICAgICAgICAgZmlyc3RNaXNzcGVsbGluZ1JhbmdlID0gbWlzc3BlbGxp
bmdSYW5nZTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICAvLyBTdG9yZSBt
YXJrZXIgZm9yIG1pc3NwZWxsZWQgd29yZAogICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgICAgICAgICAgICAgIG1pc3NwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KGVjKS0+ZG9jdW1lbnQoKS0+YWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3Vt
ZW50TWFya2VyOjpTcGVsbGluZyk7CkBAIC0xODUxLDcgKzE4NTcsOCBAQCB2b2lkIEVkaXRvcjo6
YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvCiAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQg
PSBmb3VuZE9mZnNldDsKICAgICB9CiAjZWxzZQotICAgIFN0cmluZyBtaXNzcGVsbGVkV29yZCA9
IGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5nZShjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5n
ZS5nZXQoKSwgbWlzc3BlbGxpbmdPZmZzZXQsIGZhbHNlKTsKKyAgICBSZWZQdHI8UmFuZ2U+IGZp
cnN0TWlzc3BlbGxpbmdSYW5nZTsKKyAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBmaW5kRmly
c3RNaXNzcGVsbGluZ0luUmFuZ2UoY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0KCks
IG1pc3NwZWxsaW5nT2Zmc2V0LCBmYWxzZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKICAgICAK
ICAgICBTdHJpbmcgYmFkR3JhbW1hclBocmFzZTsKIApAQCAtMTg5MSw3ICsxODk4LDcgQEAgdm9p
ZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhibwogICAgICAgICAgICAgZ3JhbW1h
clBocmFzZU9mZnNldCA9IGZvdW5kT2Zmc2V0OwogICAgICAgICB9CiAjZWxzZQotICAgICAgICBt
aXNzcGVsbGVkV29yZCA9IGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5nZShjbGllbnQoKSwgc3Bl
bGxpbmdTZWFyY2hSYW5nZS5nZXQoKSwgbWlzc3BlbGxpbmdPZmZzZXQsIGZhbHNlKTsKKyAgICAg
ICAgbWlzc3BlbGxlZFdvcmQgPSBmaW5kRmlyc3RNaXNzcGVsbGluZ0luUmFuZ2UoY2xpZW50KCks
IHNwZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0KCksIG1pc3NwZWxsaW5nT2Zmc2V0LCBmYWxzZSwgZmly
c3RNaXNzcGVsbGluZ1JhbmdlKTsKIAogI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgogICAgICAg
ICBncmFtbWFyU2VhcmNoUmFuZ2UgPSBzcGVsbGluZ1NlYXJjaFJhbmdlLT5jbG9uZVJhbmdlKGVj
KTsKQEAgLTIxNTQsNyArMjE2MSw3IEBAIGJvb2wgRWRpdG9yOjpzcGVsbGluZ1BhbmVsSXNTaG93
aW5nKCkKICAgICByZXR1cm4gY2xpZW50KCktPnNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKIH0KIAot
dm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvUG9zaXRpb24oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uICZwKQordm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5
cGluZ1RvUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwLCBSZWZQdHI8UmFuZ2U+JiBm
aXJzdE1pc3NwZWxsaW5nUmFuZ2UpCiB7CiAgICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMTY5LDcgKzIxNzYsNyBAQCB2b2lk
IEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nCiAgICAgfQogI2Vsc2UKICAgICAv
LyBDaGVjayBzcGVsbGluZyBvZiBvbmUgd29yZAotICAgIG1hcmtNaXNzcGVsbGluZ3MoVmlzaWJs
ZVNlbGVjdGlvbihzdGFydE9mV29yZChwLCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29y
ZChwLCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKSk7CisgICAgbWFya01pc3NwZWxsaW5ncyhWaXNp
YmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHAsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZX
b3JkKHAsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwog
ICAgIAogICAgIGlmICghaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTIxNzksMTIgKzIxODYsMTIgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NB
ZnRlclR5cGluZwogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIG1hcmtBbGxNaXNzcGVsbGluZ3NJ
blJhbmdlKEVkaXRvckNsaWVudCogY2xpZW50LCBSYW5nZSogc2VhcmNoUmFuZ2UpCitzdGF0aWMg
dm9pZCBtYXJrQWxsTWlzc3BlbGxpbmdzSW5SYW5nZShFZGl0b3JDbGllbnQqIGNsaWVudCwgUmFu
Z2UqIHNlYXJjaFJhbmdlLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpCiB7
CiAgICAgLy8gVXNlIHRoZSAibWFya0FsbCIgZmVhdHVyZSBvZiBmaW5kRmlyc3RNaXNzcGVsbGlu
Z0luUmFuZ2UuIElnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIGFuZCB0aGUgIm91dCBwYXJhbWV0ZXIi
OwogICAgIC8vIGFsbCB3ZSBuZWVkIHRvIGRvIGlzIG1hcmsgZXZlcnkgaW5zdGFuY2UuCiAgICAg
aW50IGlnbm9yZWRPZmZzZXQ7Ci0gICAgZmluZEZpcnN0TWlzc3BlbGxpbmdJblJhbmdlKGNsaWVu
dCwgc2VhcmNoUmFuZ2UsIGlnbm9yZWRPZmZzZXQsIHRydWUpOworICAgIGZpbmRGaXJzdE1pc3Nw
ZWxsaW5nSW5SYW5nZShjbGllbnQsIHNlYXJjaFJhbmdlLCBpZ25vcmVkT2Zmc2V0LCB0cnVlLCBm
aXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogfQogCiAjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCkBA
IC0yMTk4LDcgKzIyMDUsNyBAQCBzdGF0aWMgdm9pZCBtYXJrQWxsQmFkR3JhbW1hckluUmFuZ2Uo
RWRpCiB9CiAjZW5kaWYKICAgICAKLXN0YXRpYyB2b2lkIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdy
YW1tYXIoRWRpdG9yKiBlZGl0b3IsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwg
Ym9vbCBjaGVja1NwZWxsaW5nKQorc3RhdGljIHZvaWQgbWFya01pc3NwZWxsaW5nc09yQmFkR3Jh
bW1hcihFZGl0b3IqIGVkaXRvciwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBi
b29sIGNoZWNrU3BlbGxpbmcsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkK
IHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgc2VsZWN0aW9uIGFscmVh
ZHkgZXhwYW5kZWQgdG8gd29yZCBib3VuZGFyaWVzLgogICAgIC8vIE1pZ2h0IGJlIG5pY2UgdG8g
YXNzZXJ0IHRoYXQgaGVyZS4KQEAgLTIyMjIsNyArMjIyOSw3IEBAIHN0YXRpYyB2b2lkIG1hcmtN
aXNzcGVsbGluZ3NPckJhZEdyYW1tYXIKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChj
aGVja1NwZWxsaW5nKQotICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzSW5SYW5nZShlZGl0b3It
PmNsaWVudCgpLCBzZWFyY2hSYW5nZS5nZXQoKSk7CisgICAgICAgIG1hcmtBbGxNaXNzcGVsbGlu
Z3NJblJhbmdlKGVkaXRvci0+Y2xpZW50KCksIHNlYXJjaFJhbmdlLmdldCgpLCBmaXJzdE1pc3Nw
ZWxsaW5nUmFuZ2UpOwogICAgIGVsc2UgewogI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjIzMywxNSArMjI0MCwxNiBAQCBzdGF0aWMg
dm9pZCBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyCiAgICAgfSAgICAKIH0KIAotdm9pZCBF
ZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3MoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
KQordm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3MoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpCiB7Ci0gICAg
bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcih0aGlzLCBzZWxlY3Rpb24sIHRydWUpOworICAg
IG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIodGhpcywgc2VsZWN0aW9uLCB0cnVlLCBmaXJz
dE1pc3NwZWxsaW5nUmFuZ2UpOwogfQogICAgIAogdm9pZCBFZGl0b3I6Om1hcmtCYWRHcmFtbWFy
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKICNpZm5kZWYgQlVJTERJTkdf
T05fVElHRVIKLSAgICBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKHRoaXMsIHNlbGVjdGlv
biwgZmFsc2UpOworICAgIFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ1JhbmdlOworICAg
IG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIodGhpcywgc2VsZWN0aW9uLCBmYWxzZSwgZmly
c3RNaXNzcGVsbGluZ1JhbmdlKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbik7
CiAjZW5kaWYKQEAgLTIzOTgsNyArMjQwNiw4IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW0KICAgICAgICAgcmV0dXJuOwogICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NB
bmRCYWRHcmFtbWFySW5SYW5nZXMoc3BlbGxpbmdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSwgbWFya0dyYW1tYXIgJiYgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIGdyYW1t
YXJTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgZmFsc2UpOwogI2Vsc2UKLSAg
ICBtYXJrTWlzc3BlbGxpbmdzKHNwZWxsaW5nU2VsZWN0aW9uKTsKKyAgICBSZWZQdHI8UmFuZ2U+
IGZpcnN0TWlzc3BlbGxpbmdSYW5nZTsKKyAgICBtYXJrTWlzc3BlbGxpbmdzKHNwZWxsaW5nU2Vs
ZWN0aW9uLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogICAgIGlmIChtYXJrR3JhbW1hcikKICAg
ICAgICAgbWFya0JhZEdyYW1tYXIoZ3JhbW1hclNlbGVjdGlvbik7CiAjZW5kaWYKSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmgJKHJldmlzaW9uIDQyOTYxKQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTYsOCArMTk2LDggQEAgcHVibGljOgogICAgIFZlY3RvcjxTdHJpbmc+
IGd1ZXNzZXNGb3JNaXNzcGVsbGVkU2VsZWN0aW9uKCk7CiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vl
c3Nlc0ZvclVuZ3JhbW1hdGljYWxTZWxlY3Rpb24oKTsKICAgICBWZWN0b3I8U3RyaW5nPiBndWVz
c2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbihib29sJiBtaXNzcGVsbGVk
LCBib29sJiB1bmdyYW1tYXRpY2FsKTsKLSAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5
cGluZ1RvUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Ci0gICAgdm9pZCBtYXJrTWlz
c3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKKyAgICB2b2lkIG1hcmtNaXNzcGVs
bGluZ3NBZnRlclR5cGluZ1RvUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgUmVmUHRy
PFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICB2b2lkIG1hcmtNaXNzcGVsbGlu
Z3MoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxp
bmdSYW5nZSk7CiAgICAgdm9pZCBtYXJrQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
Jik7CiAgICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzcGVsbGluZ1NlbGVjdGlvbiwgYm9vbCBtYXJrR3JhbW1hciwgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgZ3JhbW1hclNlbGVjdGlvbik7CiAjaWYgUExBVEZPUk0oTUFDKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFS
RCkKQEAgLTI5MCw2ICsyOTAsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gbmV4
dFZpc2libGVSYW5nZShSYW5nZSosIGNvbnN0IFN0cmluZyYsIGJvb2wgZm9yd2FyZCwgYm9vbCBj
YXNlRmxhZywgYm9vbCB3cmFwRmxhZyk7CiAgICAgCiAgICAgdm9pZCBhZGRUb0tpbGxSaW5nKFJh
bmdlKiwgYm9vbCBwcmVwZW5kKTsKKyAgICB2b2lkIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChj
b25zdCBTdHJpbmcmLCBib29sIHNlbGVjdFJlcGxhY2VtZW50LCBib29sIHNtYXJ0UmVwbGFjZSk7
CiBwcml2YXRlOgogICAgIEZyYW1lKiBtX2ZyYW1lOwogICAgIE93blB0cjxEZWxldGVCdXR0b25D
b250cm9sbGVyPiBtX2RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI7CkBAIC0zMDksOCArMzEwLDcgQEAg
cHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPENsaXBib2FyZD4gbmV3R2VuZXJhbENsaXBib2FyZChD
bGlwYm9hcmRBY2Nlc3NQb2xpY3kpOwogICAgIHZvaWQgcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0
ZWJvYXJkKFBhc3RlYm9hcmQqKTsKICAgICB2b2lkIHBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVi
b2FyZCosIGJvb2wgYWxsb3dQbGFpblRleHQpOwotICAgIHZvaWQgcmVwbGFjZVNlbGVjdGlvbldp
dGhGcmFnbWVudChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+LCBib29sIHNlbGVjdFJlcGxh
Y2VtZW50LCBib29sIHNtYXJ0UmVwbGFjZSwgYm9vbCBtYXRjaFN0eWxlKTsKLSAgICB2b2lkIHJl
cGxhY2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBTdHJpbmcmLCBib29sIHNlbGVjdFJlcGxhY2Vt
ZW50LCBib29sIHNtYXJ0UmVwbGFjZSk7CisgICAgdm9pZCByZXBsYWNlU2VsZWN0aW9uV2l0aEZy
YWdtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4sIGJvb2wgc2VsZWN0UmVwbGFjZW1l
bnQsIGJvb2wgc21hcnRSZXBsYWNlLCBib29sIG1hdGNoU3R5bGUpOyAgICAKICAgICB2b2lkIHdy
aXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQqKTsKICAgICB2b2lkIHJldmVhbFNl
bGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCkBAIC0zMzIsMyArMzMyLDYgQEAgaW5s
aW5lIHZvaWQgRWRpdG9yOjpzZXRTdGFydE5ld0tpbGxSaW5nUwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRWRpdG9yX2gKKworCisKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9U
eXBpbmdDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29t
bWFuZC5jcHAJKHJldmlzaW9uIDQyOTYxKQorKysgV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1h
bmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWRp
dG9yLmgiCisjaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5oIgpA
QCAtMzgsNiArMzksNyBAQAogI2luY2x1ZGUgIkluc2VydFRleHRDb21tYW5kLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgorI2lu
Y2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgogI2lu
Y2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgpAQCAtMjky
LDggKzI5NCwzNCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlCiAg
ICAgaWYgKHByZXZpb3VzLmlzTm90TnVsbCgpKSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBw
MSA9IHN0YXJ0T2ZXb3JkKHByZXZpb3VzLCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CiAgICAgICAg
IFZpc2libGVQb3NpdGlvbiBwMiA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3Vu
ZGFyeSk7Ci0gICAgICAgIGlmIChwMSAhPSBwMikKLSAgICAgICAgICAgIGRvY3VtZW50KCktPmZy
YW1lKCktPmVkaXRvcigpLT5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1Bvc2l0aW9uKHAx
KTsKKyAgICAgICAgaWYgKHAxID09IHAyKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlOworICAgICAgICBGcmFtZSog
ZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOworICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPm1h
cmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvUG9zaXRpb24ocDEsIG1pc3NwZWxsaW5nUmFuZ2Up
OworCisgICAgICAgIC8vIEF1dG9jb3JyZWN0IHRoZSBtaXNzcGVsbGVkIHdvcmQuCisgICAgICAg
IGlmIChtaXNzcGVsbGluZ1JhbmdlID09IDApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICAvLyBHZXQgdGhlIG1pc3NwZWxsZWQgd29yZC4KKyAgICAgICAgY29uc3QgU3Ry
aW5nIG1pc3NwZWxsZWRXb3JkID0gcGxhaW5UZXh0KG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCkpOwor
ICAgICAgICBTdHJpbmcgYXV0b2NvcnJlY3RlZFN0cmluZyA9IGZyYW1lLT5lZGl0b3IoKS0+Y2xp
ZW50KCktPmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKG1pc3NwZWxs
ZWRXb3JkKTsKKworICAgICAgICAvLyBJZiBhdXRvY29ycmVjdGVkIHdvcmQgaXMgbm9uIGVtcHR5
LCByZXBsYWNlIHRoZSBtaXNzcGVsbGVkIHdvcmQgYnkgdGhpcyB3b3JkLgorICAgICAgICBpZiAo
IWF1dG9jb3JyZWN0ZWRTdHJpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIG5ld1NlbGVjdGlvbihtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBET1dOU1RSRUFNKTsK
KyAgICAgICAgICAgIGlmIChuZXdTZWxlY3Rpb24gIT0gZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxl
Y3Rpb24oKSkgeworICAgICAgICAgICAgICAgIGlmICghZnJhbWUtPnNob3VsZENoYW5nZVNlbGVj
dGlvbihuZXdTZWxlY3Rpb24pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFmcmFtZS0+ZWRpdG9yKCktPnNob3Vs
ZEluc2VydFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgbWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwg
RWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGF1dG9jb3Jy
ZWN0ZWRTdHJpbmcsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMzY1
LDcgKzM5Myw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXIKICAg
ICAgICAgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgICAgIAorCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoQnJlYWtCbG9ja3F1b3Rl
Q29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1h
bmQoKTsKIH0KQEAgLTU2NiwzICs1OTQsNCBAQCBib29sIFR5cGluZ0NvbW1hbmQ6OmlzVHlwaW5n
Q29tbWFuZCgpIGNvCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpJbmRleDogV2ViQ29y
ZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRW1w
dHlDbGllbnRzLmgJKHJldmlzaW9uIDQyOTYxKQorKysgV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGll
bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2Miw2ICszNjIsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJikgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChjb25zdCBTdHJpbmcmKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50LCBpbnQqLCBpbnQq
KSB7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNz
cGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKSB7IHJldHVybiBTdHJpbmco
KTsgfQogICAgIHZpcnR1YWwgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhcios
IGludCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50KiwgaW50KikgeyB9CiAjaWYgUExBVEZP
Uk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY29u
c3QgVUNoYXIqLCBpbnQsIHVpbnQ2NF90LCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYpIHsg
fTsKQEAgLTQ0MCwzICs0NDEsNCBAQCBwdWJsaWM6CiB9CiAKICNlbmRpZiAvLyBFbXB0eUNsaWVu
dHNfaAorCkluZGV4OiBXZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCShyZXZpc2lvbiA0Mjk2MSkKKysrIFdlYkNvcmUv
cGFnZS9FZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDYgKzE2Niw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBT
dHJpbmcmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChjb25zdCBTdHJpbmcmKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBVQ2hhcios
IGludCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xl
bmd0aCkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZv
ck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3Ro
LCBWZWN0b3I8R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBi
YWRHcmFtbWFyTGVuZ3RoKSA9IDA7CiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlM
RElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKICAgICB2aXJ0
dWFsIHZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5n
dGgsIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiBy
ZXN1bHRzKSA9IDA7CkBAIC0xODEsMyArMTgyLDQgQEAgcHVibGljOgogfQogCiAjZW5kaWYgLy8g
RWRpdG9yQ2xpZW50X2gKKwpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQyOTYzKQorKysgV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAwOS0wNC0yOCAgU2lk
ZGhhcnRoYSBDaGF0dG9wYWRoeWF5ICA8c2lkY2hhdEBnb29nbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IEp1c3RpbiBHYXJjaWEuCisJCQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ5NTMKKwkJCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xp
ZW50Lm1tOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rp
b25Gb3JNaXNzcGVsbGVkV29yZCk6CisKIDIwMDktMDQtMjggIERhbiBCZXJuc3RlaW4gIDxtaXR6
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgpJbmRleDog
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCShyZXZpc2lvbiA0
Mjk2MSkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTExOSw2ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CiAgICAg
dmlydHVhbCB2b2lkIGxlYXJuV29yZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKICAgICB2aXJ0
dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwg
aW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVs
bGVkV29yZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tH
cmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBXVEY6OlZlY3RvcjxXZWJD
b3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdy
YW1tYXJMZW5ndGgpOwogICAgIHZpcnR1YWwgdm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChjb25z
dCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcywgV1RGOjpW
ZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cyk7CiAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBXZWJDb3JlOjpT
dHJpbmcmLCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJik7CkluZGV4OiBXZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQkocmV2aXNpb24gNDI5NjEpCisr
KyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQkod29ya2luZyBj
b3B5KQpAQCAtNjUxLDYgKzY1MSwxMiBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tTcGVs
bGluZ09mU3RyCiAgICAgICAgICptaXNzcGVsbGluZ0xlbmd0aCA9IHJhbmdlLmxlbmd0aDsKIH0K
IAorU3RyaW5nIFdlYkVkaXRvckNsaWVudDo6Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlz
c3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBpbnB1dF93b3JkKSB7CisgIC8vIFRoaXMgbWV0aG9k
IGNhbiBiZSBpbXBsZW1lbnRlZCB1c2luZyBjdXN0b21pemVkIGFsZ29yaXRobXMgZm9yIHRoZSBw
YXJ0aWN1bGFyIGJyb3dzZXIuCisgIC8vIEN1cnJlbnRseSwgaXQgY29tcHV0ZXMgYW4gZW1wdHkg
c3RyaW5nLgorICByZXR1cm4gU3RyaW5nKCk7Cit9CisKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojpj
aGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwgVmVjdG9y
PEdyYW1tYXJEZXRhaWw+JiBkZXRhaWxzLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBi
YWRHcmFtbWFyTGVuZ3RoKQogewogI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgpJbmRleDogV2Vi
S2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDQyOTYzKQorKysgV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxMyBAQAorMjAwOS0wNC0yOCAgU2lkZGhhcnRoYSBDaGF0dG9wYWRoeWF5ICA8c2lk
Y2hhdEBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IEp1c3RpbiBHYXJjaWEuCisJ
CQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ5NTMK
KwkJCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcDoKKyAgICAg
ICAgKFdlYkVkaXRvckNsaWVudDo6Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxl
ZFdvcmQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOgorCiAy
MDA5LTA0LTIyICBBZGEgQ2hhbiAgPGFkYWNoYW5AYXBwbGUuY29tPgogCiAgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS81MTE1Mjk4PiBEb24ndCBnZXQgZXJyb3IgbXNnIHdoZW4gZG93bmxvYWQgaXMg
aW50ZXJydXB0ZWQgYW5kIGNhbm5vdCByZXN1bWUgZHVlIHRvIHNlcnZlciB1bmF2YWlsYWJpbGl0
eQpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNw
cAkocmV2aXNpb24gNDI5NjEpCisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0Niw2ICs2NDYsMTIgQEAgdm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OmNoZWNrU3BlbGxpbmdPZlN0cgogICAgIGVkLT5jaGVja1NwZWxsaW5nT2ZT
dHJpbmcobV93ZWJWaWV3LCB0ZXh0LCBsZW5ndGgsIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3Nw
ZWxsaW5nTGVuZ3RoKTsKIH0KIAorU3RyaW5nIFdlYkVkaXRvckNsaWVudDo6Z2V0QXV0b0NvcnJl
Y3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBpbnB1dF93b3JkKSB7
CisgIC8vIFRoaXMgbWV0aG9kIGNhbiBiZSBpbXBsZW1lbnRlZCB1c2luZyBjdXN0b21pemVkIGFs
Z29yaXRobXMgZm9yIHRoZSBwYXJ0aWN1bGFyIGJyb3dzZXIuCisgIC8vIEN1cnJlbnRseSwgaXQg
Y29tcHV0ZXMgYW4gZW1wdHkgc3RyaW5nLgorICByZXR1cm4gU3RyaW5nKCk7Cit9CisKIHZvaWQg
V2ViRWRpdG9yQ2xpZW50OjpjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciogdGV4dCwg
aW50IGxlbmd0aCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBkZXRhaWxzLCBpbnQqIGJhZEdyYW1t
YXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKQogewogICAgIGRldGFpbHMuY2xlYXIo
KTsKSW5kZXg6IFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAko
cmV2aXNpb24gNDI5NjEpCisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNiArMTAxLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFdlYkNvcmU6OlN0cmlu
ZyYpOwogICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7
CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBVQ2hhciosIGlu
dCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0
aCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9u
Rm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CiAgICAgdmlydHVhbCB2
b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgVmVjdG9y
PFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCog
YmFkR3JhbW1hckxlbmd0aCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRo
R3JhbW1hclN0cmluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmLCBjb25zdCBXZWJDb3JlOjpHcmFt
bWFyRGV0YWlsJiBkZXRhaWwpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0
aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30039</attachid>
            <date>2009-05-05 16:02:29 -0700</date>
            <delta_ts>2009-05-11 12:09:59 -0700</delta_ts>
            <desc>Updated patch to take care of the caret position</desc>
            <filename>patch3.txt</filename>
            <type>text/plain</type>
            <size>19705</size>
            <attacher name="Siddhartha Chattopadhyay">sidchat</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MzI1NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMDktMDUtMDUgIFNpZGRoYXJ0aGEgQ2hhdHRvcGFkaHlheSAgPHNp
ZGNoYXRAZ29vZ2xlLmNvbT4KKworICAgICAgICBKdXN0aW4gR2FyY2lhLgorCQkKKyAgICAgICAg
QWRkIGF1dG9tYXRpYyBzcGVsbGluZyBjb3JyZWN0aW9uIHN1cHBvcnQgd2hpbGUgdHlwaW5nLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ5NTMKKwor
ICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRGaXJz
dE1pc3NwZWxsaW5nSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFkdmFuY2VU
b05leHRNaXNzcGVsbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVs
bGluZ3NBZnRlclR5cGluZ1RvUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6bWFya0FsbE1p
c3NwZWxsaW5nc0luUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6bWFya01pc3NwZWxsaW5nc09y
QmFkR3JhbW1hcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQmFkR3JhbW1hcik6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKToKKyAgICAgICAg
KiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJU
eXBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBo
U2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRz
Lmg6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6Z2V0QXV0b0NvcnJlY3RT
dWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQpOgorICAgICAgICAqIHBhZ2UvRWRpdG9yQ2xpZW50
Lmg6CisKIDIwMDktMDUtMDUgIEtldmluIE1jQ3VsbG91Z2ggIDxrbWNjdWxsb3VnaEBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IFdlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwCShyZXZpc2lvbiA0MzI1NCkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDUwLDcgKzE0NTAsNyBAQCB2b2lkIEVkaXRvcjo6bGVhcm5TcGVsbGlu
ZygpCiAgICAgY2xpZW50KCktPmxlYXJuV29yZCh0ZXh0KTsKIH0KIAotc3RhdGljIFN0cmluZyBm
aW5kRmlyc3RNaXNzcGVsbGluZ0luUmFuZ2UoRWRpdG9yQ2xpZW50KiBjbGllbnQsIFJhbmdlKiBz
ZWFyY2hSYW5nZSwgaW50JiBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0LCBib29sIG1hcmtBbGwpCitz
dGF0aWMgU3RyaW5nIGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5nZShFZGl0b3JDbGllbnQqIGNs
aWVudCwgUmFuZ2UqIHNlYXJjaFJhbmdlLCBpbnQmIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQsIGJv
b2wgbWFya0FsbCwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQogewogICAg
IEFTU0VSVF9BUkcoY2xpZW50LCBjbGllbnQpOwogICAgIEFTU0VSVF9BUkcoc2VhcmNoUmFuZ2Us
IHNlYXJjaFJhbmdlKTsKQEAgLTE0ODYsMTcgKzE0ODYsMjMgQEAgc3RhdGljIFN0cmluZyBmaW5k
Rmlyc3RNaXNzcGVsbGluZ0luUmFuZwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IC8vIFJlbWVtYmVyIGZpcnN0LWVuY291bnRlcmVkIG1pc3NwZWxsaW5nIGFuZCBpdHMgb2Zmc2V0
CiAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdE1pc3NwZWxsaW5nKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQgPSBjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNz
cGVsbGluZ0xvY2F0aW9uOwotICAgICAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nID0g
U3RyaW5nKGNoYXJzICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwor
ICAgICAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0ID0gY3VycmVudENodW5r
T2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbjsgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gTWFyayB0aGlz
IGluc3RhbmNlIGlmIHdlJ3JlIG1hcmtpbmcgYWxsIGluc3RhbmNlcy4gT3RoZXJ3aXNlIGJhaWwg
b3V0IGJlY2F1c2Ugd2UgZm91bmQgdGhlIGZpcnN0IG9uZS4KICAgICAgICAgICAgICAgICBpZiAo
IW1hcmtBbGwpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgcmFuZ2Ugb2YgbWlzc3BlbGxlZCB3b3JkCisgICAg
ICAgICAgICAgICAgLy8gQ29tcHV0ZSByYW5nZSBvZiBtaXNzcGVsbGVkIHdvcmQgICAgICAgICAg
ICAgICAgCisKICAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2Ug
PSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHNlYXJjaFJhbmdlLCBjdXJyZW50Q2h1bmtPZmZzZXQg
KyBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7Ci0gICAgICAgICAgICAg
ICAgCisKKyAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciBmaXJzdCBlbmNvdW50ZXJlZCBtaXNz
cGVsbGluZyByYW5nZS4KKyAgICAgICAgICAgICAgICBpZiAoIWZpcnN0TWlzc3BlbGxpbmcpIHsK
KyAgICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmcgPSBTdHJpbmcoY2hhcnMgKyBtaXNz
cGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgICAgICAgICAgICAgICBm
aXJzdE1pc3NwZWxsaW5nUmFuZ2UgPSBtaXNzcGVsbGluZ1JhbmdlOworICAgICAgICAgICAgICAg
IH0KKwogICAgICAgICAgICAgICAgIC8vIFN0b3JlIG1hcmtlciBmb3IgbWlzc3BlbGxlZCB3b3Jk
CiAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgICAgICAgICAg
bWlzc3BlbGxpbmdSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLT5hZGRNYXJr
ZXIobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKQEAg
LTE4NTIsNyArMTg1OCw4IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmco
Ym8KICAgICAgICAgZ3JhbW1hclBocmFzZU9mZnNldCA9IGZvdW5kT2Zmc2V0OwogICAgIH0KICNl
bHNlCi0gICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkID0gZmluZEZpcnN0TWlzc3BlbGxpbmdJblJh
bmdlKGNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlLmdldCgpLCBtaXNzcGVsbGluZ09mZnNl
dCwgZmFsc2UpOworICAgIFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ1JhbmdlOworICAg
IFN0cmluZyBtaXNzcGVsbGVkV29yZCA9IGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5nZShjbGll
bnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZS5nZXQoKSwgbWlzc3BlbGxpbmdPZmZzZXQsIGZhbHNl
LCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogICAgIAogICAgIFN0cmluZyBiYWRHcmFtbWFyUGhy
YXNlOwogCkBAIC0xODkyLDcgKzE4OTksNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nKGJvCiAgICAgICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ID0gZm91bmRPZmZz
ZXQ7CiAgICAgICAgIH0KICNlbHNlCi0gICAgICAgIG1pc3NwZWxsZWRXb3JkID0gZmluZEZpcnN0
TWlzc3BlbGxpbmdJblJhbmdlKGNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlLmdldCgpLCBt
aXNzcGVsbGluZ09mZnNldCwgZmFsc2UpOworICAgICAgICBtaXNzcGVsbGVkV29yZCA9IGZpbmRG
aXJzdE1pc3NwZWxsaW5nSW5SYW5nZShjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZS5nZXQo
KSwgbWlzc3BlbGxpbmdPZmZzZXQsIGZhbHNlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogCiAj
aWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCiAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNw
ZWxsaW5nU2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2UoZWMpOwpAQCAtMjE1NSw3ICsyMTYyLDcgQEAg
Ym9vbCBFZGl0b3I6OnNwZWxsaW5nUGFuZWxJc1Nob3dpbmcoKQogICAgIHJldHVybiBjbGllbnQo
KS0+c3BlbGxpbmdVSUlzU2hvd2luZygpOwogfQogCi12b2lkIEVkaXRvcjo6bWFya01pc3NwZWxs
aW5nc0FmdGVyVHlwaW5nVG9Qb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJnApCit2b2lk
IEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Qb3NpdGlvbihjb25zdCBWaXNp
YmxlUG9zaXRpb24gJnAsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKIHsK
ICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQogICAgIGJvb2wgbWFya1NwZWxsaW5nID0gaXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKQEAgLTIxODAsNyArMjE4Nyw3IEBAIHZvaWQg
RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIC8vIENoZWNrIHNwZWxsaW5nIG9mIG9uZSB3b3JkCi0gICAgbWFya01pc3NwZWxsaW5n
cyhWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHAsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwg
ZW5kT2ZXb3JkKHAsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpKTsKKyAgICBtYXJrTWlzc3BlbGxp
bmdzKFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQocCwgTGVmdFdvcmRJZk9uQm91bmRhcnkp
LCBlbmRPZldvcmQocCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSksIGZpcnN0TWlzc3BlbGxpbmdS
YW5nZSk7CiAgICAgCiAgICAgaWYgKCFpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjE5MCwxMiArMjE5NywxMiBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3Nw
ZWxsaW5nc0FmdGVyVHlwaW5nCiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgbWFya0FsbE1pc3Nw
ZWxsaW5nc0luUmFuZ2UoRWRpdG9yQ2xpZW50KiBjbGllbnQsIFJhbmdlKiBzZWFyY2hSYW5nZSkK
K3N0YXRpYyB2b2lkIG1hcmtBbGxNaXNzcGVsbGluZ3NJblJhbmdlKEVkaXRvckNsaWVudCogY2xp
ZW50LCBSYW5nZSogc2VhcmNoUmFuZ2UsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdS
YW5nZSkKIHsKICAgICAvLyBVc2UgdGhlICJtYXJrQWxsIiBmZWF0dXJlIG9mIGZpbmRGaXJzdE1p
c3NwZWxsaW5nSW5SYW5nZS4gSWdub3JlIHRoZSByZXR1cm4gdmFsdWUgYW5kIHRoZSAib3V0IHBh
cmFtZXRlciI7CiAgICAgLy8gYWxsIHdlIG5lZWQgdG8gZG8gaXMgbWFyayBldmVyeSBpbnN0YW5j
ZS4KICAgICBpbnQgaWdub3JlZE9mZnNldDsKLSAgICBmaW5kRmlyc3RNaXNzcGVsbGluZ0luUmFu
Z2UoY2xpZW50LCBzZWFyY2hSYW5nZSwgaWdub3JlZE9mZnNldCwgdHJ1ZSk7CisgICAgZmluZEZp
cnN0TWlzc3BlbGxpbmdJblJhbmdlKGNsaWVudCwgc2VhcmNoUmFuZ2UsIGlnbm9yZWRPZmZzZXQs
IHRydWUsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiB9CiAKICNpZm5kZWYgQlVJTERJTkdfT05f
VElHRVIKQEAgLTIyMDksNyArMjIxNiw3IEBAIHN0YXRpYyB2b2lkIG1hcmtBbGxCYWRHcmFtbWFy
SW5SYW5nZShFZGkKIH0KICNlbmRpZgogICAgIAotc3RhdGljIHZvaWQgbWFya01pc3NwZWxsaW5n
c09yQmFkR3JhbW1hcihFZGl0b3IqIGVkaXRvciwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uLCBib29sIGNoZWNrU3BlbGxpbmcpCitzdGF0aWMgdm9pZCBtYXJrTWlzc3BlbGxpbmdz
T3JCYWRHcmFtbWFyKEVkaXRvciogZWRpdG9yLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb24sIGJvb2wgY2hlY2tTcGVsbGluZywgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGlu
Z1JhbmdlKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYSBzZWxlY3Rp
b24gYWxyZWFkeSBleHBhbmRlZCB0byB3b3JkIGJvdW5kYXJpZXMuCiAgICAgLy8gTWlnaHQgYmUg
bmljZSB0byBhc3NlcnQgdGhhdCBoZXJlLgpAQCAtMjI0Nyw3ICsyMjU0LDcgQEAgc3RhdGljIHZv
aWQgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcgogICAgICAgICByZXR1cm47CiAgICAgCiAg
ICAgaWYgKGNoZWNrU3BlbGxpbmcpCi0gICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NJblJhbmdl
KGVkaXRvci0+Y2xpZW50KCksIHNlYXJjaFJhbmdlLmdldCgpKTsKKyAgICAgICAgbWFya0FsbE1p
c3NwZWxsaW5nc0luUmFuZ2UoZWRpdG9yLT5jbGllbnQoKSwgc2VhcmNoUmFuZ2UuZ2V0KCksIGZp
cnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAgICAgZWxzZSB7CiAjaWZkZWYgQlVJTERJTkdfT05fVElH
RVIKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMjU4LDE1ICsyMjY1LDE2IEBA
IHN0YXRpYyB2b2lkIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIKICAgICB9ICAgIAogfQog
Ci12b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24pCit2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24sIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkK
IHsKLSAgICBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKHRoaXMsIHNlbGVjdGlvbiwgdHJ1
ZSk7CisgICAgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcih0aGlzLCBzZWxlY3Rpb24sIHRy
dWUsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiB9CiAgICAgCiB2b2lkIEVkaXRvcjo6bWFya0Jh
ZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogewogI2lmbmRlZiBC
VUlMRElOR19PTl9USUdFUgotICAgIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIodGhpcywg
c2VsZWN0aW9uLCBmYWxzZSk7CisgICAgUmVmUHRyPFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5nUmFu
Z2U7CisgICAgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcih0aGlzLCBzZWxlY3Rpb24sIGZh
bHNlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2Vs
ZWN0aW9uKTsKICNlbmRpZgpAQCAtMjQyNyw3ICsyNDM1LDggQEAgdm9pZCBFZGl0b3I6Om1hcmtN
aXNzcGVsbGluZ3NBbmRCYWRHcmFtbQogICAgICAgICByZXR1cm47CiAgICAgbWFya0FsbE1pc3Nw
ZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0cnVlLCBzcGVsbGluZ1NlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBtYXJrR3JhbW1hciAmJiBpc0dyYW1tYXJDaGVja2luZ0Vu
YWJsZWQoKSwgZ3JhbW1hclNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBmYWxz
ZSk7CiAjZWxzZQotICAgIG1hcmtNaXNzcGVsbGluZ3Moc3BlbGxpbmdTZWxlY3Rpb24pOworICAg
IFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ1JhbmdlOworICAgIG1hcmtNaXNzcGVsbGlu
Z3Moc3BlbGxpbmdTZWxlY3Rpb24sIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAgICAgaWYgKG1h
cmtHcmFtbWFyKQogICAgICAgICBtYXJrQmFkR3JhbW1hcihncmFtbWFyU2VsZWN0aW9uKTsKICNl
bmRpZgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gNDMyNTQpCisrKyBXZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw4ICsxOTYsOCBAQCBwdWJsaWM6CiAgICAg
VmVjdG9yPFN0cmluZz4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRTZWxlY3Rpb24oKTsKICAgICBWZWN0
b3I8U3RyaW5nPiBndWVzc2VzRm9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbigpOwogICAgIFZlY3Rv
cjxTdHJpbmc+IGd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKGJv
b2wmIG1pc3NwZWxsZWQsIGJvb2wmIHVuZ3JhbW1hdGljYWwpOwotICAgIHZvaWQgbWFya01pc3Nw
ZWxsaW5nc0FmdGVyVHlwaW5nVG9Qb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKLSAg
ICB2b2lkIG1hcmtNaXNzcGVsbGluZ3MoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOworICAgIHZv
aWQgbWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Qb3NpdGlvbihjb25zdCBWaXNpYmxlUG9z
aXRpb24mLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOworICAgIHZvaWQg
bWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgUmVmUHRyPFJhbmdlPiYg
Zmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKICAgICB2b2lkIG1hcmtCYWRHcmFtbWFyKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mKTsKICAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNwZWxsaW5nU2VsZWN0aW9uLCBib29sIG1hcmtHcmFt
bWFyLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBncmFtbWFyU2VsZWN0aW9uKTsKICNpZiBQTEFU
Rk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlM
RElOR19PTl9MRU9QQVJEKQpAQCAtMjkwLDYgKzI5MCw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVm
UHRyPFJhbmdlPiBuZXh0VmlzaWJsZVJhbmdlKFJhbmdlKiwgY29uc3QgU3RyaW5nJiwgYm9vbCBm
b3J3YXJkLCBib29sIGNhc2VGbGFnLCBib29sIHdyYXBGbGFnKTsKICAgICAKICAgICB2b2lkIGFk
ZFRvS2lsbFJpbmcoUmFuZ2UqLCBib29sIHByZXBlbmQpOworICAgIHZvaWQgcmVwbGFjZVNlbGVj
dGlvbldpdGhUZXh0KGNvbnN0IFN0cmluZyYsIGJvb2wgc2VsZWN0UmVwbGFjZW1lbnQsIGJvb2wg
c21hcnRSZXBsYWNlKTsKIHByaXZhdGU6CiAgICAgRnJhbWUqIG1fZnJhbWU7CiAgICAgT3duUHRy
PERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI+IG1fZGVsZXRlQnV0dG9uQ29udHJvbGxlcjsKQEAgLTMw
OSw4ICszMTAsNyBAQCBwcml2YXRlOgogICAgIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBuZXdHZW5l
cmFsQ2xpcGJvYXJkKENsaXBib2FyZEFjY2Vzc1BvbGljeSk7CiAgICAgdm9pZCBwYXN0ZUFzUGxh
aW5UZXh0V2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCopOwogICAgIHZvaWQgcGFzdGVXaXRoUGFz
dGVib2FyZChQYXN0ZWJvYXJkKiwgYm9vbCBhbGxvd1BsYWluVGV4dCk7Ci0gICAgdm9pZCByZXBs
YWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4sIGJv
b2wgc2VsZWN0UmVwbGFjZW1lbnQsIGJvb2wgc21hcnRSZXBsYWNlLCBib29sIG1hdGNoU3R5bGUp
OwotICAgIHZvaWQgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGNvbnN0IFN0cmluZyYsIGJvb2wg
c2VsZWN0UmVwbGFjZW1lbnQsIGJvb2wgc21hcnRSZXBsYWNlKTsKKyAgICB2b2lkIHJlcGxhY2VT
ZWxlY3Rpb25XaXRoRnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiwgYm9vbCBz
ZWxlY3RSZXBsYWNlbWVudCwgYm9vbCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSk7ICAg
IAogICAgIHZvaWQgd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCopOwogICAg
IHZvaWQgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAKSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Vk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAJKHJldmlzaW9uIDQzMjU0KQorKysgV2ViQ29yZS9lZGl0
aW5nL1R5cGluZ0NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRWRpdG9yLmgiCisjaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CkBAIC0zOSw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSW5zZXJ0VGV4dENvbW1hbmQuaCIKICNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCisj
aW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAj
aW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCkBAIC0z
MDQsOCArMzA2LDM4IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGUK
ICAgICBpZiAocHJldmlvdXMuaXNOb3ROdWxsKCkpIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IHAxID0gc3RhcnRPZldvcmQocHJldmlvdXMsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKICAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHAyID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJv
dW5kYXJ5KTsKLSAgICAgICAgaWYgKHAxICE9IHAyKQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+
ZnJhbWUoKS0+ZWRpdG9yKCktPm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvUG9zaXRpb24o
cDEpOworICAgICAgICBpZiAocDEgPT0gcDIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICBSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2U7CisgICAgICAgIEZyYW1l
KiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Qb3NpdGlvbihwMSwgbWlzc3BlbGxpbmdSYW5n
ZSk7CisKKyAgICAgICAgLy8gQXV0b2NvcnJlY3QgdGhlIG1pc3NwZWxsZWQgd29yZC4KKyAgICAg
ICAgaWYgKG1pc3NwZWxsaW5nUmFuZ2UgPT0gMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgICAgIC8vIEdldCB0aGUgbWlzc3BlbGxlZCB3b3JkLgorICAgICAgICBjb25zdCBT
dHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBwbGFpblRleHQobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSk7
CisgICAgICAgIFN0cmluZyBhdXRvY29ycmVjdGVkU3RyaW5nID0gZnJhbWUtPmVkaXRvcigpLT5j
bGllbnQoKS0+Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQobWlzc3Bl
bGxlZFdvcmQpOworCisgICAgICAgIC8vIElmIGF1dG9jb3JyZWN0ZWQgd29yZCBpcyBub24gZW1w
dHksIHJlcGxhY2UgdGhlIG1pc3NwZWxsZWQgd29yZCBieSB0aGlzIHdvcmQuCisgICAgICAgIGlm
ICghYXV0b2NvcnJlY3RlZFN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFZpc2libGVT
ZWxlY3Rpb24gbmV3U2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0p
OworICAgICAgICAgICAgaWYgKG5ld1NlbGVjdGlvbiAhPSBmcmFtZS0+c2VsZWN0aW9uKCktPnNl
bGVjdGlvbigpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFmcmFtZS0+c2hvdWxkQ2hhbmdlU2Vs
ZWN0aW9uKG5ld1NlbGVjdGlvbikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS0+c2hv
dWxkSW5zZXJ0VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBtaXNzcGVsbGluZ1JhbmdlLmdldCgp
LCBFZGl0b3JJbnNlcnRBY3Rpb25UeXBlZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoYXV0b2Nv
cnJlY3RlZFN0cmluZywgZmFsc2UsIHRydWUpOworCisgICAgICAgICAgICAvLyBSZXNldCB0aGUg
Y2hhcmV0IG9uZSBjaGFyYWN0ZXIgZnVydGhlci4KKyAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rp
b24oKS0+bW92ZVRvKGZyYW1lLT5zZWxlY3Rpb24oKS0+ZW5kKCkpOworICAgICAgICAgICAgZnJh
bWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwgU2VsZWN0
aW9uQ29udHJvbGxlcjo6Rk9SV0FSRCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOworICAgICAgICB9
CiAgICAgfQogfQogCkBAIC0zNzcsNyArNDA5LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNl
cnRQYXJhZ3JhcGhTZXBhcgogICAgICAgICBpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAgICAgCisKICAgICBhcHBseUNvbW1hbmRUb0NvbXBv
c2l0ZShCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSkpOwogICAgIHR5
cGluZ0FkZGVkVG9PcGVuQ29tbWFuZCgpOwogfQpAQCAtNjA0LDMgKzYzNiw0IEBAIGJvb2wgVHlw
aW5nQ29tbWFuZDo6aXNUeXBpbmdDb21tYW5kKCkgY28KIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCkluZGV4OiBXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkocmV2aXNpb24gNDMyNTQpCisrKyBXZWJD
b3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDYgKzM2Nyw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChj
b25zdCBTdHJpbmcmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFN0cmlu
ZyYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgVUNo
YXIqLCBpbnQsIGludCosIGludCopIHsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGdldEF1dG9Db3Jy
ZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdv
cmQpIHsgcmV0dXJuIFN0cmluZygpOyB9CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrR3JhbW1hck9m
U3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50LCBWZWN0b3I8R3JhbW1hckRldGFpbD4mLCBpbnQqLCBp
bnQqKSB7IH0KICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VS
KSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQogICAgIHZpcnR1YWwgdm9pZCBjaGVj
a1RleHRPZlBhcmFncmFwaChjb25zdCBVQ2hhciosIGludCwgdWludDY0X3QsIFZlY3RvcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+JikgeyB9OwpAQCAtNDQ1LDMgKzQ0Niw0IEBAIHB1YmxpYzoKIH0KIAog
I2VuZGlmIC8vIEVtcHR5Q2xpZW50c19oCisKSW5kZXg6IFdlYkNvcmUvcGFnZS9FZGl0b3JDbGll
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgJKHJldmlzaW9u
IDQzMjU0KQorKysgV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjYsNiArMTY2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5T
cGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgbGVhcm5X
b3JkKGNvbnN0IFN0cmluZyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09m
U3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9u
LCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0QXV0
b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVs
bGVkV29yZCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25z
dCBVQ2hhciosIGludCBsZW5ndGgsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYsIGludCogYmFkR3Jh
bW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpID0gMDsKICNpZiBQTEFURk9STShN
QUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9MRU9QQVJEKQogICAgIHZpcnR1YWwgdm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChjb25zdCBV
Q2hhciogdGV4dCwgaW50IGxlbmd0aCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcywgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpID0gMDsKQEAgLTE4MSwzICsxODIsNCBAQCBwdWJs
aWM6CiB9CiAKICNlbmRpZiAvLyBFZGl0b3JDbGllbnRfaAorCkluZGV4OiBXZWJLaXQvbWFjL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNDMy
NTcpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEz
IEBACisyMDA5LTA1LTA1ICBTaWRkaGFydGhhIENoYXR0b3BhZGh5YXkgIDxzaWRjaGF0QGdvb2ds
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSnVzdGluIEdhcmNpYS4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ5NTMKKwkJCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpnZXRB
dXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZCk6CisKIDIwMDktMDUtMDQgIEFu
ZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBLZXZpbiBEZWNrZXIuCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50LmgJKHJldmlzaW9uIDQzMjU0KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDYgKzExOSw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBX
ZWJDb3JlOjpTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFdlYkNv
cmU6OlN0cmluZyYpOwogICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29u
c3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlz
c3BlbGxpbmdMZW5ndGgpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGdldEF1dG9Db3Jy
ZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpOwog
ICAgIHZpcnR1YWwgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBs
ZW5ndGgsIFdURjo6VmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50KiBiYWRHcmFt
bWFyTG9jYXRpb24sIGludCogYmFkR3JhbW1hckxlbmd0aCk7CiAgICAgdmlydHVhbCB2b2lkIGNo
ZWNrVGV4dE9mUGFyYWdyYXBoKGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCB1aW50NjRf
dCBjaGVja2luZ1R5cGVzLCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+
JiByZXN1bHRzKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFy
U3RyaW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRh
aWwmKTsKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
Lm1tCShyZXZpc2lvbiA0MzI1NCkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02NTEsNiArNjUxLDEyIEBAIHZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpjaGVja1NwZWxsaW5nT2ZTdHIKICAgICAgICAgKm1pc3NwZWxsaW5nTGVu
Z3RoID0gcmFuZ2UubGVuZ3RoOwogfQogCitTdHJpbmcgV2ViRWRpdG9yQ2xpZW50OjpnZXRBdXRv
Q29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIGlucHV0X3dv
cmQpIHsKKyAgLy8gVGhpcyBtZXRob2QgY2FuIGJlIGltcGxlbWVudGVkIHVzaW5nIGN1c3RvbWl6
ZWQgYWxnb3JpdGhtcyBmb3IgdGhlIHBhcnRpY3VsYXIgYnJvd3Nlci4KKyAgLy8gQ3VycmVudGx5
LCBpdCBjb21wdXRlcyBhbiBlbXB0eSBzdHJpbmcuCisgIHJldHVybiBTdHJpbmcoKTsKK30KKwog
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiB0
ZXh0LCBpbnQgbGVuZ3RoLCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGRldGFpbHMsIGludCogYmFk
R3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpCiB7CiAjaWZuZGVmIEJVSUxE
SU5HX09OX1RJR0VSCkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gNDMyNTcpCisrKyBXZWJLaXQvd2luL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDA5LTA1LTA1ICBTaWRkaGFy
dGhhIENoYXR0b3BhZGh5YXkgIDxzaWRjaGF0QGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgSnVzdGluIEdhcmNpYS4KKwkJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yNDk1MworCQkKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJF
ZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpnZXRBdXRvQ29ycmVj
dFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50Lmg6CisKIDIwMDktMDUtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIEZpcnN0IHRyeSBhdCBmaXhpbmcgdGhlIFdpbmRvd3MgYnVpbGQu
CkluZGV4OiBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3Bw
CShyZXZpc2lvbiA0MzI1NCkKKysrIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ2LDYgKzY0NiwxMiBAQCB2b2lkIFdlYkVk
aXRvckNsaWVudDo6Y2hlY2tTcGVsbGluZ09mU3RyCiAgICAgZWQtPmNoZWNrU3BlbGxpbmdPZlN0
cmluZyhtX3dlYlZpZXcsIHRleHQsIGxlbmd0aCwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3Bl
bGxpbmdMZW5ndGgpOwogfQogCitTdHJpbmcgV2ViRWRpdG9yQ2xpZW50OjpnZXRBdXRvQ29ycmVj
dFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIGlucHV0X3dvcmQpIHsK
KyAgLy8gVGhpcyBtZXRob2QgY2FuIGJlIGltcGxlbWVudGVkIHVzaW5nIGN1c3RvbWl6ZWQgYWxn
b3JpdGhtcyBmb3IgdGhlIHBhcnRpY3VsYXIgYnJvd3Nlci4KKyAgLy8gQ3VycmVudGx5LCBpdCBj
b21wdXRlcyBhbiBlbXB0eSBzdHJpbmcuCisgIHJldHVybiBTdHJpbmcoKTsKK30KKwogdm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiB0ZXh0LCBp
bnQgbGVuZ3RoLCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGRldGFpbHMsIGludCogYmFkR3JhbW1h
ckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpCiB7CiAgICAgZGV0YWlscy5jbGVhcigp
OwpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCShy
ZXZpc2lvbiA0MzI1NCkKKysrIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xp
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw2ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgV2ViQ29yZTo6U3RyaW5n
Jik7CiAgICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50
IGxlbmd0aCwgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3Ro
KTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25G
b3JNaXNzcGVsbGVkV29yZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZv
aWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBWZWN0b3I8
V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBi
YWRHcmFtbWFyTGVuZ3RoKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhH
cmFtbWFyU3RyaW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYsIGNvbnN0IFdlYkNvcmU6OkdyYW1t
YXJEZXRhaWwmIGRldGFpbCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRo
TWlzc3BlbGxlZFdvcmQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30148</attachid>
            <date>2009-05-08 17:12:47 -0700</date>
            <delta_ts>2009-05-11 12:09:59 -0700</delta_ts>
            <desc>New Patch according to Douglas&apos;s suggestions</desc>
            <filename>patch4.txt</filename>
            <type>text/plain</type>
            <size>16286</size>
            <attacher name="Siddhartha Chattopadhyay">sidchat</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MzQyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMDktMDUtMDggIFNpZGRoYXJ0aGEgQ2hhdHRvcGFkaHlheSAgPHNp
ZGNoYXRAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KyAgICAgICAgCisJCSBBZGQgYSBnZW5lcmljLCBwbGF0Zm9ybSBpbmRlcGVuZGVudCBhdXRvbWF0
aWMgc3BlbGwgY29ycmVjdGlvbiBzdXBwb3J0IGluIFdlYktpdC4KKwkJIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDk1MworCisgICAgICAgICogZWRpdGluZy9FZGl0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEZpcnN0TWlzc3BlbGxpbmdJblJhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Qb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjptYXJrQWxsTWlzc3BlbGxpbmdzSW5SYW5nZSk6Cisg
ICAgICAgIChXZWJDb3JlOjptYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxsaW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6Om1hcmtCYWRHcmFtbWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01p
c3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6Cisg
ICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlF
ZGl0b3JDbGllbnQ6OmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKToK
KyAgICAgICAgKiBwYWdlL0VkaXRvckNsaWVudC5oOgorCiAyMDA5LTA1LTA4ICBEYW4gQmVybnN0
ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gNDM0MjApCisrKyBXZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1MSw3ICsxNDUxLDcgQEAgdm9pZCBFZGl0
b3I6OmxlYXJuU3BlbGxpbmcoKQogICAgIGNsaWVudCgpLT5sZWFybldvcmQodGV4dCk7CiB9CiAK
LXN0YXRpYyBTdHJpbmcgZmluZEZpcnN0TWlzc3BlbGxpbmdJblJhbmdlKEVkaXRvckNsaWVudCog
Y2xpZW50LCBSYW5nZSogc2VhcmNoUmFuZ2UsIGludCYgZmlyc3RNaXNzcGVsbGluZ09mZnNldCwg
Ym9vbCBtYXJrQWxsKQorc3RhdGljIFN0cmluZyBmaW5kRmlyc3RNaXNzcGVsbGluZ0luUmFuZ2Uo
RWRpdG9yQ2xpZW50KiBjbGllbnQsIFJhbmdlKiBzZWFyY2hSYW5nZSwgaW50JiBmaXJzdE1pc3Nw
ZWxsaW5nT2Zmc2V0LCBib29sIG1hcmtBbGwsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxp
bmdSYW5nZSkKIHsKICAgICBBU1NFUlRfQVJHKGNsaWVudCwgY2xpZW50KTsKICAgICBBU1NFUlRf
QVJHKHNlYXJjaFJhbmdlLCBzZWFyY2hSYW5nZSk7CkBAIC0xNDg3LDE3ICsxNDg3LDIzIEBAIHN0
YXRpYyBTdHJpbmcgZmluZEZpcnN0TWlzc3BlbGxpbmdJblJhbmcKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciBmaXJzdC1lbmNvdW50ZXJlZCBtaXNzcGVsbGlu
ZyBhbmQgaXRzIG9mZnNldAogICAgICAgICAgICAgICAgIGlmICghZmlyc3RNaXNzcGVsbGluZykg
ewotICAgICAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0ID0gY3VycmVudENo
dW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgZmly
c3RNaXNzcGVsbGluZyA9IFN0cmluZyhjaGFycyArIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3Nw
ZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RNaXNzcGVsbGluZ09mZnNl
dCA9IGN1cnJlbnRDaHVua09mZnNldCArIG1pc3NwZWxsaW5nTG9jYXRpb247ICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIC8vIE1hcmsgdGhpcyBpbnN0YW5jZSBpZiB3ZSdyZSBtYXJraW5nIGFsbCBpbnN0YW5jZXMu
IE90aGVyd2lzZSBiYWlsIG91dCBiZWNhdXNlIHdlIGZvdW5kIHRoZSBmaXJzdCBvbmUuCiAgICAg
ICAgICAgICAgICAgaWYgKCFtYXJrQWxsKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBDb21wdXRlIHJhbmdlIG9mIG1pc3Nw
ZWxsZWQgd29yZAorICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgcmFuZ2Ugb2YgbWlzc3BlbGxl
ZCB3b3JkICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBt
aXNzcGVsbGluZ1JhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShzZWFyY2hSYW5nZSwgY3Vy
cmVudENodW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgp
OwotICAgICAgICAgICAgICAgIAorCisgICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgZmlyc3Qg
ZW5jb3VudGVyZWQgbWlzc3BlbGxpbmcgcmFuZ2UuCisgICAgICAgICAgICAgICAgaWYgKCFmaXJz
dE1pc3NwZWxsaW5nKSB7CisgICAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nID0gU3Ry
aW5nKGNoYXJzICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworICAg
ICAgICAgICAgICAgICAgZmlyc3RNaXNzcGVsbGluZ1JhbmdlID0gbWlzc3BlbGxpbmdSYW5nZTsK
KyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICAvLyBTdG9yZSBtYXJrZXIgZm9y
IG1pc3NwZWxsZWQgd29yZAogICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwog
ICAgICAgICAgICAgICAgIG1pc3NwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9j
dW1lbnQoKS0+YWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2Vy
OjpTcGVsbGluZyk7CkBAIC0xODUzLDggKzE4NTksOCBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRv
TmV4dE1pc3NwZWxsaW5nKGJvCiAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBmb3VuZE9m
ZnNldDsKICAgICB9CiAjZWxzZQotICAgIFN0cmluZyBtaXNzcGVsbGVkV29yZCA9IGZpbmRGaXJz
dE1pc3NwZWxsaW5nSW5SYW5nZShjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZS5nZXQoKSwg
bWlzc3BlbGxpbmdPZmZzZXQsIGZhbHNlKTsKLSAgICAKKyAgICBSZWZQdHI8UmFuZ2U+IGZpcnN0
TWlzc3BlbGxpbmdSYW5nZTsKKyAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBmaW5kRmlyc3RN
aXNzcGVsbGluZ0luUmFuZ2UoY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0KCksIG1p
c3NwZWxsaW5nT2Zmc2V0LCBmYWxzZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKICAgICBTdHJp
bmcgYmFkR3JhbW1hclBocmFzZTsKIAogI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgpAQCAtMTg5
Myw3ICsxODk5LDcgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhibwog
ICAgICAgICAgICAgZ3JhbW1hclBocmFzZU9mZnNldCA9IGZvdW5kT2Zmc2V0OwogICAgICAgICB9
CiAjZWxzZQotICAgICAgICBtaXNzcGVsbGVkV29yZCA9IGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5S
YW5nZShjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZS5nZXQoKSwgbWlzc3BlbGxpbmdPZmZz
ZXQsIGZhbHNlKTsKKyAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBmaW5kRmlyc3RNaXNzcGVsbGlu
Z0luUmFuZ2UoY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0KCksIG1pc3NwZWxsaW5n
T2Zmc2V0LCBmYWxzZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKIAogI2lmbmRlZiBCVUlMRElO
R19PTl9USUdFUgogICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UgPSBzcGVsbGluZ1NlYXJjaFJh
bmdlLT5jbG9uZVJhbmdlKGVjKTsKQEAgLTIxODEsOCArMjE4NywzNSBAQCB2b2lkIEVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAv
LyBDaGVjayBzcGVsbGluZyBvZiBvbmUgd29yZAotICAgIG1hcmtNaXNzcGVsbGluZ3MoVmlzaWJs
ZVNlbGVjdGlvbihzdGFydE9mV29yZChwLCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29y
ZChwLCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKSk7CisgICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVs
bGluZ1JhbmdlOworICAgIG1hcmtNaXNzcGVsbGluZ3MoVmlzaWJsZVNlbGVjdGlvbihzdGFydE9m
V29yZChwLCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChwLCBSaWdodFdvcmRJZk9u
Qm91bmRhcnkpKSwgbWlzc3BlbGxpbmdSYW5nZSk7CisKKyAgICAvLyBBdXRvY29ycmVjdCB0aGUg
bWlzc3BlbGxlZCB3b3JkLgorICAgIGlmIChtaXNzcGVsbGluZ1JhbmdlID09IDApCisgICAgICAg
IHJldHVybjsKICAgICAKKyAgICAvLyBHZXQgdGhlIG1pc3NwZWxsZWQgd29yZC4KKyAgICBjb25z
dCBTdHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBwbGFpblRleHQobWlzc3BlbGxpbmdSYW5nZS5nZXQo
KSk7CisgICAgU3RyaW5nIGF1dG9jb3JyZWN0ZWRTdHJpbmcgPSBjbGllbnQoKS0+Z2V0QXV0b0Nv
cnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQobWlzc3BlbGxlZFdvcmQpOworCisgICAg
Ly8gSWYgYXV0b2NvcnJlY3RlZCB3b3JkIGlzIG5vbiBlbXB0eSwgcmVwbGFjZSB0aGUgbWlzc3Bl
bGxlZCB3b3JkIGJ5IHRoaXMgd29yZC4KKyAgICBpZiAoIWF1dG9jb3JyZWN0ZWRTdHJpbmcuaXNF
bXB0eSgpKSB7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKG1pc3NwZWxs
aW5nUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pOworICAgICAgICBpZiAobmV3U2VsZWN0aW9uICE9
IGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSkgeworICAgICAgICAgICAgaWYgKCFm
cmFtZSgpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0
aW9uKG5ld1NlbGVjdGlvbik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZyYW1lKCktPmVk
aXRvcigpLT5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5n
UmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblR5cGVkKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgZnJhbWUoKS0+ZWRpdG9yKCktPnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChh
dXRvY29ycmVjdGVkU3RyaW5nLCBmYWxzZSwgdHJ1ZSk7CisKKyAgICAgICAgLy8gUmVzZXQgdGhl
IGNoYXJldCBvbmUgY2hhcmFjdGVyIGZ1cnRoZXIuCisgICAgICAgIGZyYW1lKCktPnNlbGVjdGlv
bigpLT5tb3ZlVG8oZnJhbWUoKS0+c2VsZWN0aW9uKCktPmVuZCgpKTsKKyAgICAgICAgZnJhbWUo
KS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLCBTZWxlY3Rp
b25Db250cm9sbGVyOjpGT1JXQVJELCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgfQorCiAg
ICAgaWYgKCFpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IApAQCAtMjE5MSwxMiArMjIyNCwxMiBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0Fm
dGVyVHlwaW5nCiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgbWFya0FsbE1pc3NwZWxsaW5nc0lu
UmFuZ2UoRWRpdG9yQ2xpZW50KiBjbGllbnQsIFJhbmdlKiBzZWFyY2hSYW5nZSkKK3N0YXRpYyB2
b2lkIG1hcmtBbGxNaXNzcGVsbGluZ3NJblJhbmdlKEVkaXRvckNsaWVudCogY2xpZW50LCBSYW5n
ZSogc2VhcmNoUmFuZ2UsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKIHsK
ICAgICAvLyBVc2UgdGhlICJtYXJrQWxsIiBmZWF0dXJlIG9mIGZpbmRGaXJzdE1pc3NwZWxsaW5n
SW5SYW5nZS4gSWdub3JlIHRoZSByZXR1cm4gdmFsdWUgYW5kIHRoZSAib3V0IHBhcmFtZXRlciI7
CiAgICAgLy8gYWxsIHdlIG5lZWQgdG8gZG8gaXMgbWFyayBldmVyeSBpbnN0YW5jZS4KICAgICBp
bnQgaWdub3JlZE9mZnNldDsKLSAgICBmaW5kRmlyc3RNaXNzcGVsbGluZ0luUmFuZ2UoY2xpZW50
LCBzZWFyY2hSYW5nZSwgaWdub3JlZE9mZnNldCwgdHJ1ZSk7CisgICAgZmluZEZpcnN0TWlzc3Bl
bGxpbmdJblJhbmdlKGNsaWVudCwgc2VhcmNoUmFuZ2UsIGlnbm9yZWRPZmZzZXQsIHRydWUsIGZp
cnN0TWlzc3BlbGxpbmdSYW5nZSk7CiB9CiAKICNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKQEAg
LTIyMTAsNyArMjI0Myw3IEBAIHN0YXRpYyB2b2lkIG1hcmtBbGxCYWRHcmFtbWFySW5SYW5nZShF
ZGkKIH0KICNlbmRpZgogICAgIAotc3RhdGljIHZvaWQgbWFya01pc3NwZWxsaW5nc09yQmFkR3Jh
bW1hcihFZGl0b3IqIGVkaXRvciwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBi
b29sIGNoZWNrU3BlbGxpbmcpCitzdGF0aWMgdm9pZCBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFt
bWFyKEVkaXRvciogZWRpdG9yLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJv
b2wgY2hlY2tTcGVsbGluZywgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQog
ewogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYSBzZWxlY3Rpb24gYWxyZWFk
eSBleHBhbmRlZCB0byB3b3JkIGJvdW5kYXJpZXMuCiAgICAgLy8gTWlnaHQgYmUgbmljZSB0byBh
c3NlcnQgdGhhdCBoZXJlLgpAQCAtMjI0OCw3ICsyMjgxLDcgQEAgc3RhdGljIHZvaWQgbWFya01p
c3NwZWxsaW5nc09yQmFkR3JhbW1hcgogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKGNo
ZWNrU3BlbGxpbmcpCi0gICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NJblJhbmdlKGVkaXRvci0+
Y2xpZW50KCksIHNlYXJjaFJhbmdlLmdldCgpKTsKKyAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5n
c0luUmFuZ2UoZWRpdG9yLT5jbGllbnQoKSwgc2VhcmNoUmFuZ2UuZ2V0KCksIGZpcnN0TWlzc3Bl
bGxpbmdSYW5nZSk7CiAgICAgZWxzZSB7CiAjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMjU5LDE1ICsyMjkyLDE2IEBAIHN0YXRpYyB2
b2lkIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIKICAgICB9ICAgIAogfQogCi12b2lkIEVk
aXRvcjo6bWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24p
Cit2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24sIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKIHsKLSAgICBt
YXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKHRoaXMsIHNlbGVjdGlvbiwgdHJ1ZSk7CisgICAg
bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcih0aGlzLCBzZWxlY3Rpb24sIHRydWUsIGZpcnN0
TWlzc3BlbGxpbmdSYW5nZSk7CiB9CiAgICAgCiB2b2lkIEVkaXRvcjo6bWFya0JhZEdyYW1tYXIo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogewogI2lmbmRlZiBCVUlMRElOR19P
Tl9USUdFUgotICAgIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIodGhpcywgc2VsZWN0aW9u
LCBmYWxzZSk7CisgICAgUmVmUHRyPFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2U7CisgICAg
bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcih0aGlzLCBzZWxlY3Rpb24sIGZhbHNlLCBmaXJz
dE1pc3NwZWxsaW5nUmFuZ2UpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uKTsK
ICNlbmRpZgpAQCAtMjQ1MSw3ICsyNDg1LDggQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGlu
Z3NBbmRCYWRHcmFtbQogICAgICAgICByZXR1cm47CiAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXJJblJhbmdlcyh0cnVlLCBzcGVsbGluZ1NlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpLCBtYXJrR3JhbW1hciAmJiBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwg
Z3JhbW1hclNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBmYWxzZSk7CiAjZWxz
ZQotICAgIG1hcmtNaXNzcGVsbGluZ3Moc3BlbGxpbmdTZWxlY3Rpb24pOworICAgIFJlZlB0cjxS
YW5nZT4gZmlyc3RNaXNzcGVsbGluZ1JhbmdlOworICAgIG1hcmtNaXNzcGVsbGluZ3Moc3BlbGxp
bmdTZWxlY3Rpb24sIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAgICAgaWYgKG1hcmtHcmFtbWFy
KQogICAgICAgICBtYXJrQmFkR3JhbW1hcihncmFtbWFyU2VsZWN0aW9uKTsKICNlbmRpZgpJbmRl
eDogV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuaAkocmV2aXNpb24gNDM0MjApCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFN0
cmluZz4gZ3Vlc3Nlc0ZvclVuZ3JhbW1hdGljYWxTZWxlY3Rpb24oKTsKICAgICBWZWN0b3I8U3Ry
aW5nPiBndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbihib29sJiBt
aXNzcGVsbGVkLCBib29sJiB1bmdyYW1tYXRpY2FsKTsKICAgICB2b2lkIG1hcmtNaXNzcGVsbGlu
Z3NBZnRlclR5cGluZ1RvUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Ci0gICAgdm9p
ZCBtYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKKyAgICB2b2lkIG1h
cmtNaXNzcGVsbGluZ3MoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIFJlZlB0cjxSYW5nZT4mIGZp
cnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAgICAgdm9pZCBtYXJrQmFkR3JhbW1hcihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJik7CiAgICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzcGVsbGluZ1NlbGVjdGlvbiwgYm9vbCBtYXJrR3JhbW1h
ciwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZ3JhbW1hclNlbGVjdGlvbik7CiAjaWYgUExBVEZP
Uk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiA0MzQyMCkK
KysrIFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjks
NiArMzY5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5TcGVsbERv
Y3VtZW50KGNvbnN0IFN0cmluZyYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQoY29u
c3QgU3RyaW5nJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhj
b25zdCBVQ2hhciosIGludCwgaW50KiwgaW50KikgeyB9CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0
QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNz
cGVsbGVkV29yZCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tH
cmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYs
IGludCosIGludCopIHsgfQogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCiAgICAgdmlydHVhbCB2
b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKGNvbnN0IFVDaGFyKiwgaW50LCB1aW50NjRfdCwgVmVj
dG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mKSB7IH07CkBAIC00NDcsMyArNDQ4LDQgQEAgcHVibGlj
OgogfQogCiAjZW5kaWYgLy8gRW1wdHlDbGllbnRzX2gKKwpJbmRleDogV2ViQ29yZS9wYWdlL0Vk
aXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAko
cmV2aXNpb24gNDM0MjApCisrKyBXZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE2Niw2ICsxNjYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGlnbm9y
ZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJikgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBsZWFybldvcmQoY29uc3QgU3RyaW5nJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjaGVja1Nw
ZWxsaW5nT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5n
TG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcm
IG1pc3NwZWxsZWRXb3JkKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrR3JhbW1hck9mU3Ry
aW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50
KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFkR3JhbW1hckxlbmd0aCkgPSAwOwogI2lmIFBM
QVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpCiAgICAgdmlydHVhbCB2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBo
KGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCB1aW50NjRfdCBjaGVja2luZ1R5cGVzLCBW
ZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykgPSAwOwpAQCAtMTgxLDMgKzE4Miw0
IEBAIHB1YmxpYzoKIH0KIAogI2VuZGlmIC8vIEVkaXRvckNsaWVudF9oCisKSW5kZXg6IFdlYktp
dC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA0MzQyMCkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMDktMDUtMDggIFNpZGRoYXJ0aGEgQ2hhdHRvcGFkaHlheSAgPHNpZGNo
YXRAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAg
ICAgICAgCisJCWh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDk1Mwor
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRWRpdG9yQ2xp
ZW50OjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZCk6CisKIDIwMDkt
MDUtMDggIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBLZXZpbiBEZWNrZXIuCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmgJKHJldmlzaW9uIDQzNDIwKQorKysgV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDYgKzEx
OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVu
dChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKGNv
bnN0IFdlYkNvcmU6OlN0cmluZyYpOwogICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZT
dHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24s
IGludCogbWlzc3BlbGxpbmdMZW5ndGgpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGdl
dEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFdlYkNvcmU6OlN0
cmluZyYpOwogICAgIHZpcnR1YWwgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hh
ciosIGludCBsZW5ndGgsIFdURjo6VmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50
KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFkR3JhbW1hckxlbmd0aCk7CiAgICAgdmlydHVh
bCB2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3Ro
LCB1aW50NjRfdCBjaGVja2luZ1R5cGVzLCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tp
bmdSZXN1bHQ+JiByZXN1bHRzKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdp
dGhHcmFtbWFyU3RyaW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYsIGNvbnN0IFdlYkNvcmU6Okdy
YW1tYXJEZXRhaWwmKTsKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50Lm1tCShyZXZpc2lvbiA0MzQyMCkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02NTEsNiArNjUxLDEyIEBA
IHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVja1NwZWxsaW5nT2ZTdHIKICAgICAgICAgKm1pc3Nw
ZWxsaW5nTGVuZ3RoID0gcmFuZ2UubGVuZ3RoOwogfQogCitTdHJpbmcgV2ViRWRpdG9yQ2xpZW50
OjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcm
IGlucHV0X3dvcmQpIHsKKyAgLy8gVGhpcyBtZXRob2QgY2FuIGJlIGltcGxlbWVudGVkIHVzaW5n
IGN1c3RvbWl6ZWQgYWxnb3JpdGhtcyBmb3IgdGhlIHBhcnRpY3VsYXIgYnJvd3Nlci4KKyAgLy8g
Q3VycmVudGx5LCBpdCBjb21wdXRlcyBhbiBlbXB0eSBzdHJpbmcuCisgIHJldHVybiBTdHJpbmco
KTsKK30KKwogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0
IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGRldGFpbHMs
IGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpCiB7CiAjaWZu
ZGVmIEJVSUxESU5HX09OX1RJR0VSCkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gNDM0MjApCisrKyBXZWJLaXQv
d2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDA5LTA1LTA4
ICBTaWRkaGFydGhhIENoYXR0b3BhZGh5YXkgIDxzaWRjaGF0QGdvb2dsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorCQkgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0OTUzCisJCQorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHA6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6Omdl
dEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKToKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDoKKwogMjAwOS0wNS0wNyAgTWFyayBSb3dlICA8
bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IE9saXZlciBIdW50
LgpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNw
cAkocmV2aXNpb24gNDM0MjApCisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0Niw2ICs2NDYsMTIgQEAgdm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OmNoZWNrU3BlbGxpbmdPZlN0cgogICAgIGVkLT5jaGVja1NwZWxsaW5nT2ZT
dHJpbmcobV93ZWJWaWV3LCB0ZXh0LCBsZW5ndGgsIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3Nw
ZWxsaW5nTGVuZ3RoKTsKIH0KIAorU3RyaW5nIFdlYkVkaXRvckNsaWVudDo6Z2V0QXV0b0NvcnJl
Y3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBpbnB1dF93b3JkKSB7
CisgIC8vIFRoaXMgbWV0aG9kIGNhbiBiZSBpbXBsZW1lbnRlZCB1c2luZyBjdXN0b21pemVkIGFs
Z29yaXRobXMgZm9yIHRoZSBwYXJ0aWN1bGFyIGJyb3dzZXIuCisgIC8vIEN1cnJlbnRseSwgaXQg
Y29tcHV0ZXMgYW4gZW1wdHkgc3RyaW5nLgorICByZXR1cm4gU3RyaW5nKCk7Cit9CisKIHZvaWQg
V2ViRWRpdG9yQ2xpZW50OjpjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciogdGV4dCwg
aW50IGxlbmd0aCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBkZXRhaWxzLCBpbnQqIGJhZEdyYW1t
YXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKQogewogICAgIGRldGFpbHMuY2xlYXIo
KTsKSW5kZXg6IFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAko
cmV2aXNpb24gNDM0MjApCisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNiArMTAxLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFdlYkNvcmU6OlN0cmlu
ZyYpOwogICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7
CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBVQ2hhciosIGlu
dCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0
aCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9u
Rm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CiAgICAgdmlydHVhbCB2
b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgVmVjdG9y
PFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCog
YmFkR3JhbW1hckxlbmd0aCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRo
R3JhbW1hclN0cmluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmLCBjb25zdCBXZWJDb3JlOjpHcmFt
bWFyRGV0YWlsJiBkZXRhaWwpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0
aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30196</attachid>
            <date>2009-05-11 12:09:59 -0700</date>
            <delta_ts>2009-05-14 12:04:35 -0700</delta_ts>
            <desc>New Patch</desc>
            <filename>patch5.txt</filename>
            <type>text/plain</type>
            <size>16249</size>
            <attacher name="Siddhartha Chattopadhyay">sidchat</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MzUwNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMDktMDUtMTEgIFNpZGRoYXJ0aGEgQ2hhdHRvcGFkaHlheSAgPHNp
ZGNoYXRAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgYXV0b21hdGljIHNwZWxsIGNvcnJlY3Rpb24gd2hp
bGUgdHlwaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjQ5NTMKKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmZpbmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6bWFya0FsbE1pc3NwZWxsaW5nc0luUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6bWFya01p
c3NwZWxsaW5nc09yQmFkR3JhbW1hcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtN
aXNzcGVsbGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQmFkR3JhbW1hcik6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNs
aWVudHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50OjpnZXRBdXRvQ29y
cmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZCk6CisgICAgICAgICogcGFnZS9FZGl0b3JD
bGllbnQuaDoKKwogMjAwOS0wNS0xMSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAko
cmV2aXNpb24gNDM1MDUpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ1MSw3ICsxNDUxLDcgQEAgdm9pZCBFZGl0b3I6OmxlYXJuU3BlbGxpbmcoKQog
ICAgIGNsaWVudCgpLT5sZWFybldvcmQodGV4dCk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgZmluZEZp
cnN0TWlzc3BlbGxpbmdJblJhbmdlKEVkaXRvckNsaWVudCogY2xpZW50LCBSYW5nZSogc2VhcmNo
UmFuZ2UsIGludCYgZmlyc3RNaXNzcGVsbGluZ09mZnNldCwgYm9vbCBtYXJrQWxsKQorc3RhdGlj
IFN0cmluZyBmaW5kRmlyc3RNaXNzcGVsbGluZ0luUmFuZ2UoRWRpdG9yQ2xpZW50KiBjbGllbnQs
IFJhbmdlKiBzZWFyY2hSYW5nZSwgaW50JiBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0LCBib29sIG1h
cmtBbGwsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKIHsKICAgICBBU1NF
UlRfQVJHKGNsaWVudCwgY2xpZW50KTsKICAgICBBU1NFUlRfQVJHKHNlYXJjaFJhbmdlLCBzZWFy
Y2hSYW5nZSk7CkBAIC0xNDg3LDE3ICsxNDg3LDIzIEBAIHN0YXRpYyBTdHJpbmcgZmluZEZpcnN0
TWlzc3BlbGxpbmdJblJhbmcKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBS
ZW1lbWJlciBmaXJzdC1lbmNvdW50ZXJlZCBtaXNzcGVsbGluZyBhbmQgaXRzIG9mZnNldAogICAg
ICAgICAgICAgICAgIGlmICghZmlyc3RNaXNzcGVsbGluZykgewotICAgICAgICAgICAgICAgICAg
ICBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0ID0gY3VycmVudENodW5rT2Zmc2V0ICsgbWlzc3BlbGxp
bmdMb2NhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgZmlyc3RNaXNzcGVsbGluZyA9IFN0cmlu
ZyhjaGFycyArIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAg
ICAgICAgICAgICAgICAgZmlyc3RNaXNzcGVsbGluZ09mZnNldCA9IGN1cnJlbnRDaHVua09mZnNl
dCArIG1pc3NwZWxsaW5nTG9jYXRpb247ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIE1hcmsgdGhpcyBpbnN0
YW5jZSBpZiB3ZSdyZSBtYXJraW5nIGFsbCBpbnN0YW5jZXMuIE90aGVyd2lzZSBiYWlsIG91dCBi
ZWNhdXNlIHdlIGZvdW5kIHRoZSBmaXJzdCBvbmUuCiAgICAgICAgICAgICAgICAgaWYgKCFtYXJr
QWxsKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAvLyBDb21wdXRlIHJhbmdlIG9mIG1pc3NwZWxsZWQgd29yZAorICAgICAgICAg
ICAgICAgIC8vIENvbXB1dGUgcmFuZ2Ugb2YgbWlzc3BlbGxlZCB3b3JkICAgICAgICAgICAgICAg
IAorCiAgICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlID0gVGV4
dEl0ZXJhdG9yOjpzdWJyYW5nZShzZWFyY2hSYW5nZSwgY3VycmVudENodW5rT2Zmc2V0ICsgbWlz
c3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwotICAgICAgICAgICAgICAgIAor
CisgICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgZmlyc3QgZW5jb3VudGVyZWQgbWlzc3BlbGxp
bmcgcmFuZ2UuCisgICAgICAgICAgICAgICAgaWYgKCFmaXJzdE1pc3NwZWxsaW5nKSB7CisgICAg
ICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nID0gU3RyaW5nKGNoYXJzICsgbWlzc3BlbGxp
bmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworICAgICAgICAgICAgICAgICAgZmlyc3RN
aXNzcGVsbGluZ1JhbmdlID0gbWlzc3BlbGxpbmdSYW5nZTsKKyAgICAgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgICAgICAvLyBTdG9yZSBtYXJrZXIgZm9yIG1pc3NwZWxsZWQgd29yZAogICAg
ICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgICAgICAgICAgICAgIG1pc3Nw
ZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKS0+YWRkTWFya2VyKG1p
c3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CkBAIC0xODUz
LDggKzE4NTksOCBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvCiAg
ICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBmb3VuZE9mZnNldDsKICAgICB9CiAjZWxzZQot
ICAgIFN0cmluZyBtaXNzcGVsbGVkV29yZCA9IGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5nZShj
bGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZS5nZXQoKSwgbWlzc3BlbGxpbmdPZmZzZXQsIGZh
bHNlKTsKLSAgICAKKyAgICBSZWZQdHI8UmFuZ2U+IGZpcnN0TWlzc3BlbGxpbmdSYW5nZTsKKyAg
ICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBmaW5kRmlyc3RNaXNzcGVsbGluZ0luUmFuZ2UoY2xp
ZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0KCksIG1pc3NwZWxsaW5nT2Zmc2V0LCBmYWxz
ZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKICAgICBTdHJpbmcgYmFkR3JhbW1hclBocmFzZTsK
IAogI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgpAQCAtMTg5Myw3ICsxODk5LDcgQEAgdm9pZCBF
ZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhibwogICAgICAgICAgICAgZ3JhbW1hclBo
cmFzZU9mZnNldCA9IGZvdW5kT2Zmc2V0OwogICAgICAgICB9CiAjZWxzZQotICAgICAgICBtaXNz
cGVsbGVkV29yZCA9IGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5nZShjbGllbnQoKSwgc3BlbGxp
bmdTZWFyY2hSYW5nZS5nZXQoKSwgbWlzc3BlbGxpbmdPZmZzZXQsIGZhbHNlKTsKKyAgICAgICAg
bWlzc3BlbGxlZFdvcmQgPSBmaW5kRmlyc3RNaXNzcGVsbGluZ0luUmFuZ2UoY2xpZW50KCksIHNw
ZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0KCksIG1pc3NwZWxsaW5nT2Zmc2V0LCBmYWxzZSwgZmlyc3RN
aXNzcGVsbGluZ1JhbmdlKTsKIAogI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgogICAgICAgICBn
cmFtbWFyU2VhcmNoUmFuZ2UgPSBzcGVsbGluZ1NlYXJjaFJhbmdlLT5jbG9uZVJhbmdlKGVjKTsK
QEAgLTIxODEsOCArMjE4NywzNSBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVy
VHlwaW5nCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBDaGVjayBzcGVsbGluZyBvZiBv
bmUgd29yZAotICAgIG1hcmtNaXNzcGVsbGluZ3MoVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29y
ZChwLCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChwLCBSaWdodFdvcmRJZk9uQm91
bmRhcnkpKSk7CisgICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlOworICAgIG1hcmtN
aXNzcGVsbGluZ3MoVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZChwLCBMZWZ0V29yZElmT25C
b3VuZGFyeSksIGVuZE9mV29yZChwLCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKSwgbWlzc3BlbGxp
bmdSYW5nZSk7CisKKyAgICAvLyBBdXRvY29ycmVjdCB0aGUgbWlzc3BlbGxlZCB3b3JkLgorICAg
IGlmIChtaXNzcGVsbGluZ1JhbmdlID09IDApCisgICAgICAgIHJldHVybjsKICAgICAKKyAgICAv
LyBHZXQgdGhlIG1pc3NwZWxsZWQgd29yZC4KKyAgICBjb25zdCBTdHJpbmcgbWlzc3BlbGxlZFdv
cmQgPSBwbGFpblRleHQobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSk7CisgICAgU3RyaW5nIGF1dG9j
b3JyZWN0ZWRTdHJpbmcgPSBjbGllbnQoKS0+Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlz
c3BlbGxlZFdvcmQobWlzc3BlbGxlZFdvcmQpOworCisgICAgLy8gSWYgYXV0b2NvcnJlY3RlZCB3
b3JkIGlzIG5vbiBlbXB0eSwgcmVwbGFjZSB0aGUgbWlzc3BlbGxlZCB3b3JkIGJ5IHRoaXMgd29y
ZC4KKyAgICBpZiAoIWF1dG9jb3JyZWN0ZWRTdHJpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgIFZp
c2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERPV05T
VFJFQU0pOworICAgICAgICBpZiAobmV3U2VsZWN0aW9uICE9IGZyYW1lKCktPnNlbGVjdGlvbigp
LT5zZWxlY3Rpb24oKSkgeworICAgICAgICAgICAgaWYgKCFmcmFtZSgpLT5zaG91bGRDaGFuZ2VT
ZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIWZyYW1lKCktPmVkaXRvcigpLT5zaG91bGRJbnNlcnRU
ZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIEVkaXRvcklu
c2VydEFjdGlvblR5cGVkKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZnJhbWUoKS0+
ZWRpdG9yKCktPnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBm
YWxzZSwgdHJ1ZSk7CisKKyAgICAgICAgLy8gUmVzZXQgdGhlIGNoYXJldCBvbmUgY2hhcmFjdGVy
IGZ1cnRoZXIuCisgICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5tb3ZlVG8oZnJhbWUoKS0+
c2VsZWN0aW9uKCktPmVuZCgpKTsKKyAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPm1vZGlm
eShTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLCBTZWxlY3Rpb25Db250cm9sbGVyOjpGT1JXQVJE
LCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgfQorCiAgICAgaWYgKCFpc0dyYW1tYXJDaGVj
a2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIApAQCAtMjE5MSwxMiArMjIyNCwx
MiBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nCiAjZW5kaWYKIH0K
IAotc3RhdGljIHZvaWQgbWFya0FsbE1pc3NwZWxsaW5nc0luUmFuZ2UoRWRpdG9yQ2xpZW50KiBj
bGllbnQsIFJhbmdlKiBzZWFyY2hSYW5nZSkKK3N0YXRpYyB2b2lkIG1hcmtBbGxNaXNzcGVsbGlu
Z3NJblJhbmdlKEVkaXRvckNsaWVudCogY2xpZW50LCBSYW5nZSogc2VhcmNoUmFuZ2UsIFJlZlB0
cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKIHsKICAgICAvLyBVc2UgdGhlICJtYXJr
QWxsIiBmZWF0dXJlIG9mIGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5nZS4gSWdub3JlIHRoZSBy
ZXR1cm4gdmFsdWUgYW5kIHRoZSAib3V0IHBhcmFtZXRlciI7CiAgICAgLy8gYWxsIHdlIG5lZWQg
dG8gZG8gaXMgbWFyayBldmVyeSBpbnN0YW5jZS4KICAgICBpbnQgaWdub3JlZE9mZnNldDsKLSAg
ICBmaW5kRmlyc3RNaXNzcGVsbGluZ0luUmFuZ2UoY2xpZW50LCBzZWFyY2hSYW5nZSwgaWdub3Jl
ZE9mZnNldCwgdHJ1ZSk7CisgICAgZmluZEZpcnN0TWlzc3BlbGxpbmdJblJhbmdlKGNsaWVudCwg
c2VhcmNoUmFuZ2UsIGlnbm9yZWRPZmZzZXQsIHRydWUsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7
CiB9CiAKICNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKQEAgLTIyMTAsNyArMjI0Myw3IEBAIHN0
YXRpYyB2b2lkIG1hcmtBbGxCYWRHcmFtbWFySW5SYW5nZShFZGkKIH0KICNlbmRpZgogICAgIAot
c3RhdGljIHZvaWQgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihFZGl0b3IqIGVkaXRvciwg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib29sIGNoZWNrU3BlbGxpbmcpCitz
dGF0aWMgdm9pZCBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKEVkaXRvciogZWRpdG9yLCBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvb2wgY2hlY2tTcGVsbGluZywgUmVm
UHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQogewogICAgIC8vIFRoaXMgZnVuY3Rp
b24gaXMgY2FsbGVkIHdpdGggYSBzZWxlY3Rpb24gYWxyZWFkeSBleHBhbmRlZCB0byB3b3JkIGJv
dW5kYXJpZXMuCiAgICAgLy8gTWlnaHQgYmUgbmljZSB0byBhc3NlcnQgdGhhdCBoZXJlLgpAQCAt
MjI0OCw3ICsyMjgxLDcgQEAgc3RhdGljIHZvaWQgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1h
cgogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKGNoZWNrU3BlbGxpbmcpCi0gICAgICAg
IG1hcmtBbGxNaXNzcGVsbGluZ3NJblJhbmdlKGVkaXRvci0+Y2xpZW50KCksIHNlYXJjaFJhbmdl
LmdldCgpKTsKKyAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0luUmFuZ2UoZWRpdG9yLT5jbGll
bnQoKSwgc2VhcmNoUmFuZ2UuZ2V0KCksIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAgICAgZWxz
ZSB7CiAjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC0yMjU5LDE1ICsyMjkyLDE2IEBAIHN0YXRpYyB2b2lkIG1hcmtNaXNzcGVsbGluZ3NP
ckJhZEdyYW1tYXIKICAgICB9ICAgIAogfQogCi12b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5n
cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCit2b2lkIEVkaXRvcjo6bWFya01p
c3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIFJlZlB0cjxSYW5n
ZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKIHsKLSAgICBtYXJrTWlzc3BlbGxpbmdzT3JCYWRH
cmFtbWFyKHRoaXMsIHNlbGVjdGlvbiwgdHJ1ZSk7CisgICAgbWFya01pc3NwZWxsaW5nc09yQmFk
R3JhbW1hcih0aGlzLCBzZWxlY3Rpb24sIHRydWUsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiB9
CiAgICAgCiB2b2lkIEVkaXRvcjo6bWFya0JhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgc2VsZWN0aW9uKQogewogI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgIG1hcmtNaXNz
cGVsbGluZ3NPckJhZEdyYW1tYXIodGhpcywgc2VsZWN0aW9uLCBmYWxzZSk7CisgICAgUmVmUHRy
PFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2U7CisgICAgbWFya01pc3NwZWxsaW5nc09yQmFk
R3JhbW1hcih0aGlzLCBzZWxlY3Rpb24sIGZhbHNlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwog
I2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uKTsKICNlbmRpZgpAQCAtMjQ1MSw3ICsy
NDg1LDggQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbQogICAgICAg
ICByZXR1cm47CiAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0
cnVlLCBzcGVsbGluZ1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBtYXJrR3Jh
bW1hciAmJiBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwgZ3JhbW1hclNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBmYWxzZSk7CiAjZWxzZQotICAgIG1hcmtNaXNzcGVsbGlu
Z3Moc3BlbGxpbmdTZWxlY3Rpb24pOworICAgIFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGlu
Z1JhbmdlOworICAgIG1hcmtNaXNzcGVsbGluZ3Moc3BlbGxpbmdTZWxlY3Rpb24sIGZpcnN0TWlz
c3BlbGxpbmdSYW5nZSk7CiAgICAgaWYgKG1hcmtHcmFtbWFyKQogICAgICAgICBtYXJrQmFkR3Jh
bW1hcihncmFtbWFyU2VsZWN0aW9uKTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24g
NDM1MDUpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5
Nyw3ICsxOTcsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3Nlc0ZvclVuZ3Jh
bW1hdGljYWxTZWxlY3Rpb24oKTsKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzRm9yTWlzc3Bl
bGxlZE9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbihib29sJiBtaXNzcGVsbGVkLCBib29sJiB1bmdy
YW1tYXRpY2FsKTsKICAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvUG9zaXRp
b24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Ci0gICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mKTsKKyAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3MoY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7
CiAgICAgdm9pZCBtYXJrQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAgICAg
dm9pZCBtYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzcGVsbGluZ1NlbGVjdGlvbiwgYm9vbCBtYXJrR3JhbW1hciwgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgZ3JhbW1hclNlbGVjdGlvbik7CiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChC
VUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKSW5kZXg6
IFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiA0MzUwNSkKKysrIFdlYkNvcmUvbG9hZGVyL0Vt
cHR5Q2xpZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjksNiArMzY5LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYp
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQoY29uc3QgU3RyaW5nJikgeyB9CiAgICAg
dmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCwgaW50
KiwgaW50KikgeyB9CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9u
Rm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikgeyByZXR1cm4gU3RyaW5nKCk7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQsIFZl
Y3RvcjxHcmFtbWFyRGV0YWlsPiYsIGludCosIGludCopIHsgfQogI2lmIFBMQVRGT1JNKE1BQykg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xF
T1BBUkQpCiAgICAgdmlydHVhbCB2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKGNvbnN0IFVDaGFy
KiwgaW50LCB1aW50NjRfdCwgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mKSB7IH07CkBAIC00
NDcsMyArNDQ4LDQgQEAgcHVibGljOgogfQogCiAjZW5kaWYgLy8gRW1wdHlDbGllbnRzX2gKKwpJ
bmRleDogV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9FZGl0b3JDbGllbnQuaAkocmV2aXNpb24gNDM1MDUpCisrKyBXZWJDb3JlL3BhZ2UvRWRp
dG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw2ICsxNjYsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQoY29uc3QgU3RyaW5nJikgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVu
Z3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpID0g
MDsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVs
bGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgVmVjdG9y
PEdyYW1tYXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFkR3JhbW1h
ckxlbmd0aCkgPSAwOwogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
VElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCiAgICAgdmlydHVhbCB2b2lk
IGNoZWNrVGV4dE9mUGFyYWdyYXBoKGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCB1aW50
NjRfdCBjaGVja2luZ1R5cGVzLCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykg
PSAwOwpAQCAtMTgxLDMgKzE4Miw0IEBAIHB1YmxpYzoKIH0KIAogI2VuZGlmIC8vIEVkaXRvckNs
aWVudF9oCisKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0MzUwNikKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDktMDUtMTEgIFNpZGRoYXJ0aGEg
Q2hhdHRvcGFkaHlheSAgPHNpZGNoYXRAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjQ5NTMKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbToKKyAg
ICAgICAgKFdlYkVkaXRvckNsaWVudDo6Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3Bl
bGxlZFdvcmQpOgorCiAyMDA5LTA1LTEwICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpJbmRleDogV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCShyZXZpc2lvbiA0MzUwNSkK
KysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExOSw2ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGlnbm9y
ZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CiAgICAgdmlydHVh
bCB2b2lkIGxlYXJuV29yZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZv
aWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgaW50KiBt
aXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OlN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29y
ZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFy
T2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpH
cmFtbWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJM
ZW5ndGgpOwogICAgIHZpcnR1YWwgdm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChjb25zdCBVQ2hh
ciogdGV4dCwgaW50IGxlbmd0aCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcywgV1RGOjpWZWN0b3I8
V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cyk7CiAgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcm
LCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJik7CkluZGV4OiBXZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQkocmV2aXNpb24gNDM1MDUpCisrKyBXZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQkod29ya2luZyBjb3B5KQpA
QCAtNjUxLDYgKzY1MSwxMiBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tTcGVsbGluZ09m
U3RyCiAgICAgICAgICptaXNzcGVsbGluZ0xlbmd0aCA9IHJhbmdlLmxlbmd0aDsKIH0KIAorU3Ry
aW5nIFdlYkVkaXRvckNsaWVudDo6Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxl
ZFdvcmQoY29uc3QgU3RyaW5nJiBpbnB1dF93b3JkKSB7CisgIC8vIFRoaXMgbWV0aG9kIGNhbiBi
ZSBpbXBsZW1lbnRlZCB1c2luZyBjdXN0b21pemVkIGFsZ29yaXRobXMgZm9yIHRoZSBwYXJ0aWN1
bGFyIGJyb3dzZXIuCisgIC8vIEN1cnJlbnRseSwgaXQgY29tcHV0ZXMgYW4gZW1wdHkgc3RyaW5n
LgorICByZXR1cm4gU3RyaW5nKCk7Cit9CisKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVja0dy
YW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwgVmVjdG9yPEdyYW1t
YXJEZXRhaWw+JiBkZXRhaWxzLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFt
bWFyTGVuZ3RoKQogewogI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgpJbmRleDogV2ViS2l0L3dp
bi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDQzNTA2KQorKysgV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxMyBAQAorMjAwOS0wNS0xMSAgU2lkZGhhcnRoYSBDaGF0dG9wYWRoeWF5ICA8c2lkY2hhdEBn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDk1MworCQkKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2Vi
RWRpdG9yQ2xpZW50OjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZCk6
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisKIDIwMDktMDUt
MTAgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhbiBCZXJuc3RlaW4uCkluZGV4OiBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuY3BwCShyZXZpc2lvbiA0MzUwNSkKKysrIFdlYktpdC93aW4vV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ2LDYg
KzY0NiwxMiBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tTcGVsbGluZ09mU3RyCiAgICAg
ZWQtPmNoZWNrU3BlbGxpbmdPZlN0cmluZyhtX3dlYlZpZXcsIHRleHQsIGxlbmd0aCwgbWlzc3Bl
bGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwogfQogCitTdHJpbmcgV2ViRWRpdG9y
Q2xpZW50OjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBT
dHJpbmcmIGlucHV0X3dvcmQpIHsKKyAgLy8gVGhpcyBtZXRob2QgY2FuIGJlIGltcGxlbWVudGVk
IHVzaW5nIGN1c3RvbWl6ZWQgYWxnb3JpdGhtcyBmb3IgdGhlIHBhcnRpY3VsYXIgYnJvd3Nlci4K
KyAgLy8gQ3VycmVudGx5LCBpdCBjb21wdXRlcyBhbiBlbXB0eSBzdHJpbmcuCisgIHJldHVybiBT
dHJpbmcoKTsKK30KKwogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5n
KGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGRl
dGFpbHMsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpCiB7
CiAgICAgZGV0YWlscy5jbGVhcigpOwpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5oCShyZXZpc2lvbiA0MzUwNSkKKysrIFdlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw2ICsxMDEs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQo
Y29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChjb25z
dCBXZWJDb3JlOjpTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3Ry
aW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBp
bnQqIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBnZXRB
dXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBXZWJDb3JlOjpTdHJp
bmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIq
LCBpbnQgbGVuZ3RoLCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdy
YW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKTsKICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYs
IGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmIGRldGFpbCk7CiAgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgV2ViQ29yZTo6U3RyaW5n
Jik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30349</attachid>
            <date>2009-05-14 12:04:35 -0700</date>
            <delta_ts>2009-05-21 16:24:58 -0700</delta_ts>
            <desc>Patch 6</desc>
            <filename>patch6.txt</filename>
            <type>text/plain</type>
            <size>16721</size>
            <attacher name="Siddhartha Chattopadhyay">sidchat</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MzcxNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMDktMDUtMTQgIFNpZGRoYXJ0aGEgQ2hhdHRvcGFkaHlheWEgIDxz
aWRjaGF0QGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSnVzdGluIEdhcmNpYS4K
KyAgICAgICAgCisJCSBBZGQgYXV0b21hdGljIHNwZWxsIGNvcnJlY3Rpb24gc3VwcG9ydCBpbiBX
ZWJLaXQKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjQ5NTMKKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmZpbmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
bWFya0FsbE1pc3NwZWxsaW5nc0luUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6bWFya01pc3Nw
ZWxsaW5nc09yQmFkR3JhbW1hcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNz
cGVsbGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQmFkR3JhbW1hcik6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKToK
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVu
dHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9yQ2xpZW50OjpnZXRBdXRvQ29ycmVj
dFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZCk6CisgICAgICAgICogcGFnZS9FZGl0b3JDbGll
bnQuaDoKKwogMjAwOS0wNS0xNCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
CShyZXZpc2lvbiA0MzcxNSkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDUxLDcgKzE0NTEsNyBAQCB2b2lkIEVkaXRvcjo6bGVhcm5TcGVsbGluZygp
CiAgICAgY2xpZW50KCktPmxlYXJuV29yZCh0ZXh0KTsKIH0KIAotc3RhdGljIFN0cmluZyBmaW5k
Rmlyc3RNaXNzcGVsbGluZ0luUmFuZ2UoRWRpdG9yQ2xpZW50KiBjbGllbnQsIFJhbmdlKiBzZWFy
Y2hSYW5nZSwgaW50JiBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0LCBib29sIG1hcmtBbGwpCitzdGF0
aWMgU3RyaW5nIGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5nZShFZGl0b3JDbGllbnQqIGNsaWVu
dCwgUmFuZ2UqIHNlYXJjaFJhbmdlLCBpbnQmIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQsIGJvb2wg
bWFya0FsbCwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQogewogICAgIEFT
U0VSVF9BUkcoY2xpZW50LCBjbGllbnQpOwogICAgIEFTU0VSVF9BUkcoc2VhcmNoUmFuZ2UsIHNl
YXJjaFJhbmdlKTsKQEAgLTE0ODUsMjMgKzE0ODUsMjQgQEAgc3RhdGljIFN0cmluZyBmaW5kRmly
c3RNaXNzcGVsbGluZ0luUmFuZwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobWlzc3Bl
bGxpbmdMb2NhdGlvbiA+PSAwICYmIG1pc3NwZWxsaW5nTGVuZ3RoID4gMCAmJiBtaXNzcGVsbGlu
Z0xvY2F0aW9uIDwgbGVuICYmIG1pc3NwZWxsaW5nTGVuZ3RoIDw9IGxlbiAmJiBtaXNzcGVsbGlu
Z0xvY2F0aW9uICsgbWlzc3BlbGxpbmdMZW5ndGggPD0gbGVuKSB7CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgZmlyc3QtZW5jb3VudGVyZWQgbWlzc3BlbGxp
bmcgYW5kIGl0cyBvZmZzZXQKKyAgICAgICAgICAgICAgICAvLyBDb21wdXRlIHJhbmdlIG9mIG1p
c3NwZWxsZWQgd29yZAorICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdS
YW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2Uoc2VhcmNoUmFuZ2UsIGN1cnJlbnRDaHVua09m
ZnNldCArIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKworICAgICAg
ICAgICAgICAgIC8vIFJlbWVtYmVyIGZpcnN0LWVuY291bnRlcmVkIG1pc3NwZWxsaW5nIGFuZCBp
dHMgb2Zmc2V0LgogICAgICAgICAgICAgICAgIGlmICghZmlyc3RNaXNzcGVsbGluZykgewogICAg
ICAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0ID0gY3VycmVudENodW5rT2Zm
c2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbjsKICAgICAgICAgICAgICAgICAgICAgZmlyc3RNaXNz
cGVsbGluZyA9IFN0cmluZyhjaGFycyArIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5n
TGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RNaXNzcGVsbGluZ1JhbmdlID0gbWlz
c3BlbGxpbmdSYW5nZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgLy8gTWFyayB0aGlzIGluc3RhbmNlIGlmIHdlJ3JlIG1hcmtpbmcgYWxsIGlu
c3RhbmNlcy4gT3RoZXJ3aXNlIGJhaWwgb3V0IGJlY2F1c2Ugd2UgZm91bmQgdGhlIGZpcnN0IG9u
ZS4KLSAgICAgICAgICAgICAgICBpZiAoIW1hcmtBbGwpCi0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgcmFuZ2Ug
b2YgbWlzc3BlbGxlZCB3b3JkCi0gICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVs
bGluZ1JhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShzZWFyY2hSYW5nZSwgY3VycmVudENo
dW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIFN0b3JlIG1hcmtlciBmb3IgbWlzc3Bl
bGxlZCB3b3JkCisKKyAgICAgICAgICAgICAgICAvLyBTdG9yZSBtYXJrZXIgZm9yIG1pc3NwZWxs
ZWQgd29yZC4KICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAgICAg
ICAgICAgICBtaXNzcGVsbGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCkt
PmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxp
bmcpOwogICAgICAgICAgICAgICAgIEFTU0VSVChlYyA9PSAwKTsKKworICAgICAgICAgICAgICAg
IC8vIEJhaWwgb3V0IGlmIHdlJ3JlIG1hcmtpbmcgb25seSB0aGUgZmlyc3QgbWlzc3BlbGxpbmcs
IGFuZCBub3QgYWxsIGluc3RhbmNlcy4KKyAgICAgICAgICAgICAgICBpZiAoIW1hcmtBbGwpCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIApAQCAtMTg1Myw4ICsxODU0LDggQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNz
cGVsbGluZyhibwogICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ID0gZm91bmRPZmZzZXQ7CiAg
ICAgfQogI2Vsc2UKLSAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBmaW5kRmlyc3RNaXNzcGVs
bGluZ0luUmFuZ2UoY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0KCksIG1pc3NwZWxs
aW5nT2Zmc2V0LCBmYWxzZSk7Ci0gICAgCisgICAgUmVmUHRyPFJhbmdlPiBmaXJzdE1pc3NwZWxs
aW5nUmFuZ2U7CisgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkID0gZmluZEZpcnN0TWlzc3BlbGxp
bmdJblJhbmdlKGNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlLmdldCgpLCBtaXNzcGVsbGlu
Z09mZnNldCwgZmFsc2UsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAgICAgU3RyaW5nIGJhZEdy
YW1tYXJQaHJhc2U7CiAKICNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKQEAgLTE4OTMsNyArMTg5
NCw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm8KICAgICAgICAg
ICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBmb3VuZE9mZnNldDsKICAgICAgICAgfQogI2Vsc2UK
LSAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBmaW5kRmlyc3RNaXNzcGVsbGluZ0luUmFuZ2UoY2xp
ZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0KCksIG1pc3NwZWxsaW5nT2Zmc2V0LCBmYWxz
ZSk7CisgICAgICAgIG1pc3NwZWxsZWRXb3JkID0gZmluZEZpcnN0TWlzc3BlbGxpbmdJblJhbmdl
KGNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlLmdldCgpLCBtaXNzcGVsbGluZ09mZnNldCwg
ZmFsc2UsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAKICNpZm5kZWYgQlVJTERJTkdfT05fVElH
RVIKICAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlID0gc3BlbGxpbmdTZWFyY2hSYW5nZS0+Y2xv
bmVSYW5nZShlYyk7CkBAIC0yMTgxLDggKzIxODIsMzUgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNz
cGVsbGluZ3NBZnRlclR5cGluZwogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gQ2hlY2sg
c3BlbGxpbmcgb2Ygb25lIHdvcmQKLSAgICBtYXJrTWlzc3BlbGxpbmdzKFZpc2libGVTZWxlY3Rp
b24oc3RhcnRPZldvcmQocCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQocCwgUmln
aHRXb3JkSWZPbkJvdW5kYXJ5KSkpOworICAgIFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5n
ZTsKKyAgICBtYXJrTWlzc3BlbGxpbmdzKFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQocCwg
TGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQocCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5
KSksIG1pc3NwZWxsaW5nUmFuZ2UpOworCisgICAgLy8gQXV0b2NvcnJlY3QgdGhlIG1pc3NwZWxs
ZWQgd29yZC4KKyAgICBpZiAobWlzc3BlbGxpbmdSYW5nZSA9PSAwKQorICAgICAgICByZXR1cm47
CiAgICAgCisgICAgLy8gR2V0IHRoZSBtaXNzcGVsbGVkIHdvcmQuCisgICAgY29uc3QgU3RyaW5n
IG1pc3NwZWxsZWRXb3JkID0gcGxhaW5UZXh0KG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCkpOworICAg
IFN0cmluZyBhdXRvY29ycmVjdGVkU3RyaW5nID0gY2xpZW50KCktPmdldEF1dG9Db3JyZWN0U3Vn
Z2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKKworICAgIC8vIElmIGF1
dG9jb3JyZWN0ZWQgd29yZCBpcyBub24gZW1wdHksIHJlcGxhY2UgdGhlIG1pc3NwZWxsZWQgd29y
ZCBieSB0aGlzIHdvcmQuCisgICAgaWYgKCFhdXRvY29ycmVjdGVkU3RyaW5nLmlzRW1wdHkoKSkg
eworICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbihtaXNzcGVsbGluZ1Jhbmdl
LmdldCgpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgaWYgKG5ld1NlbGVjdGlvbiAhPSBmcmFtZSgp
LT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpIHsKKyAgICAgICAgICAgIGlmICghZnJhbWUoKS0+
c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihuZXdT
ZWxlY3Rpb24pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmcmFtZSgpLT5lZGl0b3IoKS0+
c2hvdWxkSW5zZXJ0VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBtaXNzcGVsbGluZ1JhbmdlLmdl
dCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25UeXBlZCkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGZyYW1lKCktPmVkaXRvcigpLT5yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoYXV0b2NvcnJl
Y3RlZFN0cmluZywgZmFsc2UsIHRydWUpOworCisgICAgICAgIC8vIFJlc2V0IHRoZSBjaGFyZXQg
b25lIGNoYXJhY3RlciBmdXJ0aGVyLgorICAgICAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+bW92
ZVRvKGZyYW1lKCktPnNlbGVjdGlvbigpLT5lbmQoKSk7CisgICAgICAgIGZyYW1lKCktPnNlbGVj
dGlvbigpLT5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwgU2VsZWN0aW9uQ29udHJv
bGxlcjo6Rk9SV0FSRCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOworICAgIH0KKwogICAgIGlmICgh
aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKQEAgLTIx
OTEsMTIgKzIyMTksMTIgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGlu
ZwogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIG1hcmtBbGxNaXNzcGVsbGluZ3NJblJhbmdlKEVk
aXRvckNsaWVudCogY2xpZW50LCBSYW5nZSogc2VhcmNoUmFuZ2UpCitzdGF0aWMgdm9pZCBtYXJr
QWxsTWlzc3BlbGxpbmdzSW5SYW5nZShFZGl0b3JDbGllbnQqIGNsaWVudCwgUmFuZ2UqIHNlYXJj
aFJhbmdlLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpCiB7CiAgICAgLy8g
VXNlIHRoZSAibWFya0FsbCIgZmVhdHVyZSBvZiBmaW5kRmlyc3RNaXNzcGVsbGluZ0luUmFuZ2Uu
IElnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIGFuZCB0aGUgIm91dCBwYXJhbWV0ZXIiOwogICAgIC8v
IGFsbCB3ZSBuZWVkIHRvIGRvIGlzIG1hcmsgZXZlcnkgaW5zdGFuY2UuCiAgICAgaW50IGlnbm9y
ZWRPZmZzZXQ7Ci0gICAgZmluZEZpcnN0TWlzc3BlbGxpbmdJblJhbmdlKGNsaWVudCwgc2VhcmNo
UmFuZ2UsIGlnbm9yZWRPZmZzZXQsIHRydWUpOworICAgIGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5S
YW5nZShjbGllbnQsIHNlYXJjaFJhbmdlLCBpZ25vcmVkT2Zmc2V0LCB0cnVlLCBmaXJzdE1pc3Nw
ZWxsaW5nUmFuZ2UpOwogfQogCiAjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCkBAIC0yMjEwLDcg
KzIyMzgsNyBAQCBzdGF0aWMgdm9pZCBtYXJrQWxsQmFkR3JhbW1hckluUmFuZ2UoRWRpCiB9CiAj
ZW5kaWYKICAgICAKLXN0YXRpYyB2b2lkIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoRWRp
dG9yKiBlZGl0b3IsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgYm9vbCBjaGVj
a1NwZWxsaW5nKQorc3RhdGljIHZvaWQgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihFZGl0
b3IqIGVkaXRvciwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib29sIGNoZWNr
U3BlbGxpbmcsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKIHsKICAgICAv
LyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgc2VsZWN0aW9uIGFscmVhZHkgZXhwYW5k
ZWQgdG8gd29yZCBib3VuZGFyaWVzLgogICAgIC8vIE1pZ2h0IGJlIG5pY2UgdG8gYXNzZXJ0IHRo
YXQgaGVyZS4KQEAgLTIyNDgsNyArMjI3Niw3IEBAIHN0YXRpYyB2b2lkIG1hcmtNaXNzcGVsbGlu
Z3NPckJhZEdyYW1tYXIKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChjaGVja1NwZWxs
aW5nKQotICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzSW5SYW5nZShlZGl0b3ItPmNsaWVudCgp
LCBzZWFyY2hSYW5nZS5nZXQoKSk7CisgICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NJblJhbmdl
KGVkaXRvci0+Y2xpZW50KCksIHNlYXJjaFJhbmdlLmdldCgpLCBmaXJzdE1pc3NwZWxsaW5nUmFu
Z2UpOwogICAgIGVsc2UgewogI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjI1OSwxNSArMjI4NywxNiBAQCBzdGF0aWMgdm9pZCBtYXJr
TWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyCiAgICAgfSAgICAKIH0KIAotdm9pZCBFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3MoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQordm9pZCBF
ZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3MoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
LCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpCiB7Ci0gICAgbWFya01pc3Nw
ZWxsaW5nc09yQmFkR3JhbW1hcih0aGlzLCBzZWxlY3Rpb24sIHRydWUpOworICAgIG1hcmtNaXNz
cGVsbGluZ3NPckJhZEdyYW1tYXIodGhpcywgc2VsZWN0aW9uLCB0cnVlLCBmaXJzdE1pc3NwZWxs
aW5nUmFuZ2UpOwogfQogICAgIAogdm9pZCBFZGl0b3I6Om1hcmtCYWRHcmFtbWFyKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKICNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIK
LSAgICBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKHRoaXMsIHNlbGVjdGlvbiwgZmFsc2Up
OworICAgIFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ1JhbmdlOworICAgIG1hcmtNaXNz
cGVsbGluZ3NPckJhZEdyYW1tYXIodGhpcywgc2VsZWN0aW9uLCBmYWxzZSwgZmlyc3RNaXNzcGVs
bGluZ1JhbmdlKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbik7CiAjZW5kaWYK
QEAgLTI0OTMsNyArMjUyMiw4IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFk
R3JhbW0KICAgICAgICAgcmV0dXJuOwogICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFt
bWFySW5SYW5nZXModHJ1ZSwgc3BlbGxpbmdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5n
ZXQoKSwgbWFya0dyYW1tYXIgJiYgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIGdyYW1tYXJT
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgZmFsc2UpOwogI2Vsc2UKLSAgICBt
YXJrTWlzc3BlbGxpbmdzKHNwZWxsaW5nU2VsZWN0aW9uKTsKKyAgICBSZWZQdHI8UmFuZ2U+IGZp
cnN0TWlzc3BlbGxpbmdSYW5nZTsKKyAgICBtYXJrTWlzc3BlbGxpbmdzKHNwZWxsaW5nU2VsZWN0
aW9uLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogICAgIGlmIChtYXJrR3JhbW1hcikKICAgICAg
ICAgbWFya0JhZEdyYW1tYXIoZ3JhbW1hclNlbGVjdGlvbik7CiAjZW5kaWYKSW5kZXg6IFdlYkNv
cmUvZWRpdGluZy9FZGl0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmgJKHJldmlzaW9uIDQzNzE1KQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTcsNyArMTk3LDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxTdHJpbmc+IGd1
ZXNzZXNGb3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKCk7CiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vl
c3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxTZWxlY3Rpb24oYm9vbCYgbWlzc3BlbGxl
ZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCk7CiAgICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJU
eXBpbmdUb1Bvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwotICAgIHZvaWQgbWFya01p
c3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CisgICAgdm9pZCBtYXJrTWlzc3Bl
bGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3Nw
ZWxsaW5nUmFuZ2UpOwogICAgIHZvaWQgbWFya0JhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYpOwogICAgIHZvaWQgbWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc3BlbGxpbmdTZWxlY3Rpb24sIGJvb2wgbWFya0dyYW1tYXIsIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIGdyYW1tYXJTZWxlY3Rpb24pOwogI2lmIFBMQVRGT1JNKE1BQykg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xF
T1BBUkQpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkocmV2aXNpb24gNDM3MTUpCisrKyBXZWJD
b3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzY5LDYgKzM2OSw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChj
b25zdCBTdHJpbmcmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFN0cmlu
ZyYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgVUNo
YXIqLCBpbnQsIGludCosIGludCopIHsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGdldEF1dG9Db3Jy
ZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpIHsgcmV0dXJuIFN0
cmluZygpOyB9CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVD
aGFyKiwgaW50LCBWZWN0b3I8R3JhbW1hckRldGFpbD4mLCBpbnQqLCBpbnQqKSB7IH0KICNpZiBQ
TEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChC
VUlMRElOR19PTl9MRU9QQVJEKQogICAgIHZpcnR1YWwgdm9pZCBjaGVja1RleHRPZlBhcmFncmFw
aChjb25zdCBVQ2hhciosIGludCwgdWludDY0X3QsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+
JikgeyB9OwpAQCAtNDQ3LDMgKzQ0OCw0IEBAIHB1YmxpYzoKIH0KIAogI2VuZGlmIC8vIEVtcHR5
Q2xpZW50c19oCisKSW5kZXg6IFdlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgJKHJldmlzaW9uIDQzNzE1KQorKysgV2Vi
Q29yZS9wYWdlL0VkaXRvckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNiArMTY2LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNv
bnN0IFN0cmluZyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFN0cmlu
ZyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVD
aGFyKiwgaW50IGxlbmd0aCwgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxs
aW5nTGVuZ3RoKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0
aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBs
ZW5ndGgsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBp
bnQqIGJhZEdyYW1tYXJMZW5ndGgpID0gMDsKICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQogICAg
IHZpcnR1YWwgdm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChjb25zdCBVQ2hhciogdGV4dCwgaW50
IGxlbmd0aCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcywgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3Vs
dD4mIHJlc3VsdHMpID0gMDsKQEAgLTE4MSwzICsxODIsNCBAQCBwdWJsaWM6CiB9CiAKICNlbmRp
ZiAvLyBFZGl0b3JDbGllbnRfaAorCkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNDM3MTUpCisrKyBXZWJLaXQv
bWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDA5LTA1LTE0
ICBTaWRkaGFydGhhIENoYXR0b3BhZGh5YXlhICA8c2lkY2hhdEBnb29nbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IEp1c3RpbiBHYXJjaWEuCisgICAgICAgIAorCQkgQWRkIGF1dG9tYXRp
YyBzcGVsbCBjb3JyZWN0aW9uIHN1cHBvcnQgaW4gV2ViS2l0CisKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0OTUzCisJCQorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5tbToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6Z2V0QXV0b0NvcnJl
Y3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQpOgorCiAyMDA5LTA1LTE0ICBEYXJpbiBBZGxl
ciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpJ
bmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCShyZXZp
c2lvbiA0MzcxNSkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSw2ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7
CiAgICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50IGxl
bmd0aCwgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKTsK
KyAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JN
aXNzcGVsbGVkV29yZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZvaWQg
Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBXVEY6OlZlY3Rv
cjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQq
IGJhZEdyYW1tYXJMZW5ndGgpOwogICAgIHZpcnR1YWwgdm9pZCBjaGVja1RleHRPZlBhcmFncmFw
aChjb25zdCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcywg
V1RGOjpWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cyk7CiAgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBXZWJD
b3JlOjpTdHJpbmcmLCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJik7CkluZGV4OiBXZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQkocmV2aXNpb24gNDM3
MTUpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQkod29y
a2luZyBjb3B5KQpAQCAtNjUxLDYgKzY1MSwxMiBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hl
Y2tTcGVsbGluZ09mU3RyCiAgICAgICAgICptaXNzcGVsbGluZ0xlbmd0aCA9IHJhbmdlLmxlbmd0
aDsKIH0KIAorU3RyaW5nIFdlYkVkaXRvckNsaWVudDo6Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9u
Rm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBpbnB1dF93b3JkKSB7CisgIC8vIFRoaXMg
bWV0aG9kIGNhbiBiZSBpbXBsZW1lbnRlZCB1c2luZyBjdXN0b21pemVkIGFsZ29yaXRobXMgZm9y
IHRoZSBwYXJ0aWN1bGFyIGJyb3dzZXIuCisgIC8vIEN1cnJlbnRseSwgaXQgY29tcHV0ZXMgYW4g
ZW1wdHkgc3RyaW5nLgorICByZXR1cm4gU3RyaW5nKCk7Cit9CisKIHZvaWQgV2ViRWRpdG9yQ2xp
ZW50OjpjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwg
VmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBkZXRhaWxzLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwg
aW50KiBiYWRHcmFtbWFyTGVuZ3RoKQogewogI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgpJbmRl
eDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDQzNzE1KQorKysgV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNSBAQAorMjAwOS0wNS0xNCAgU2lkZGhhcnRoYSBDaGF0dG9wYWRoeWF5
ICA8c2lkY2hhdEBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IEp1c3RpbiBHYXJj
aWEuCisgICAgICAgIAorCQkgQWRkIGF1dG9tYXRpYyBzcGVsbCBjb3JyZWN0aW9uIHN1cHBvcnQg
aW4gV2ViS2l0CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTI0OTUzCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3Bw
OgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JN
aXNzcGVsbGVkV29yZCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
Lmg6CisKIDIwMDktMDUtMTMgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgTWFyayBSb3dlLgpJbmRleDogV2ViS2l0L3dpbi9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93
aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkocmV2aXNpb24gNDM3MTUpCisr
KyBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY0Niw2ICs2NDYsMTIgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrU3Bl
bGxpbmdPZlN0cgogICAgIGVkLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcobV93ZWJWaWV3LCB0ZXh0
LCBsZW5ndGgsIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKIH0KIAor
U3RyaW5nIFdlYkVkaXRvckNsaWVudDo6Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3Bl
bGxlZFdvcmQoY29uc3QgU3RyaW5nJiBpbnB1dF93b3JkKSB7CisgIC8vIFRoaXMgbWV0aG9kIGNh
biBiZSBpbXBsZW1lbnRlZCB1c2luZyBjdXN0b21pemVkIGFsZ29yaXRobXMgZm9yIHRoZSBwYXJ0
aWN1bGFyIGJyb3dzZXIuCisgIC8vIEN1cnJlbnRseSwgaXQgY29tcHV0ZXMgYW4gZW1wdHkgc3Ry
aW5nLgorICByZXR1cm4gU3RyaW5nKCk7Cit9CisKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVj
a0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwgVmVjdG9yPEdy
YW1tYXJEZXRhaWw+JiBkZXRhaWxzLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRH
cmFtbWFyTGVuZ3RoKQogewogICAgIGRldGFpbHMuY2xlYXIoKTsKSW5kZXg6IFdlYktpdC93aW4v
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dp
bi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkocmV2aXNpb24gNDM3MTUpCisrKyBX
ZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDEsNiArMTAxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3Jk
SW5TcGVsbERvY3VtZW50KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpOwogICAgIHZpcnR1YWwgdm9p
ZCBsZWFybldvcmQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lkIGNo
ZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIGludCogbWlzc3Bl
bGxpbmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgdmlydHVhbCBXZWJD
b3JlOjpTdHJpbmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29u
c3QgV2ViQ29yZTo6U3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrR3JhbW1hck9mU3Ry
aW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRh
aWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFkR3JhbW1hckxlbmd0aCk7CiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBX
ZWJDb3JlOjpTdHJpbmcmLCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJiBkZXRhaWwpOwog
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0
IFdlYkNvcmU6OlN0cmluZyYpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>