<?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>3240</bug_id>
          
          <creation_ts>2005-06-01 16:04:39 -0700</creation_ts>
          <short_desc>Support the frame and rules attributes on HTML tables</short_desc>
          <delta_ts>2006-09-17 08:22:43 -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>Tables</component>
          <version>412</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>browserbugs2</cc>
    
    <cc>cgriego</cc>
    
    <cc>fantasai.bugs</cc>
    
    <cc>ian</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>10433</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-06-01 16:04:39 -0700</bug_when>
    <thetext>The &apos;frame&apos; and &apos;rules&apos; attributes need to be supported on HTML tables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>10434</commentid>
    <comment_count>1</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-06-01 16:05:15 -0700</bug_when>
    <thetext>Apple Bug: rdar://3481327/
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38228</commentid>
    <comment_count>2</comment_count>
    <who name="Gérard Talbot (no longer involved)">browserbugs2</who>
    <bug_when>2006-04-01 17:05:25 -0800</bug_when>
    <thetext>This week-end, I went into an Internet Cafe and check my own website with Safari 2.02 (416.13).

http://www.gtalbot.org/DHTMLSection/DynamicTableFormatting.html

will indicate that frame attribute is supported. 

Regarding the rules attribute,

In border-collapse: separate
----------------------------
Safari only needs to support rules=&quot;all&quot; and rules=&quot;none&quot;.

In border-collapse: collapse
----------------------------
Safari must support rules=&quot;all&quot;, rules=&quot;none&quot;, rules=&quot;groups&quot;, rules=&quot;cols&quot; and rules=&quot;rows&quot;.

The rationale behind this is given at section 17.6.1 of CSS 2.x:
&quot;In this model [border-collapse: separate model], (...) Rows, columns, row groups, and column groups cannot have borders (i.e., user agents must ignore the border properties for those elements). (...) In the collapsing border model, it is possible to specify borders that surround all or part of a cell, row, row group, column, and column group. Borders for HTML&apos;s &apos;rules&apos; attribute can be specified this way.&quot;
CSS 2, Section 17.6.1 The separated borders model (border-collapse)
http://www.w3.org/TR/CSS2/tables.html#separated-borders
CSS 2.1, Section 17.6.1 The separated borders model (border-collapse)
http://www.w3.org/TR/CSS21/tables.html#separated-borders</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55489</commentid>
    <comment_count>3</comment_count>
    <who name="fantasai">fantasai.bugs</who>
    <bug_when>2006-09-14 03:05:51 -0700</bug_when>
    <thetext>See also https://bugzilla.mozilla.org/show_bug.cgi?id=43178
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55646</commentid>
    <comment_count>4</comment_count>
      <attachid>10585</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-09-16 02:36:55 -0700</bug_when>
    <thetext>Created attachment 10585
Patch that implements support for the frame and rules attributes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55647</commentid>
    <comment_count>5</comment_count>
      <attachid>10585</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-16 02:51:27 -0700</bug_when>
    <thetext>Comment on attachment 10585
Patch that implements support for the frame and rules attributes

A few comments:

Glad to see all the m_ changes.

IMO this is unnecessarily verbose:
+    if (p) {
+        HTMLTableElement* table = static_cast&lt;HTMLTableElement*&gt;(p);
+        return table-&gt;getSharedRowGroupDecl();
+    }

return static_cast&lt;HTMLTableElement*&gt;(p)-&gt;getSharedRowGroupDecl();  works just as well (two places)

It looks like m_firstBody should be a RefPtr

m_head should also be a RefPtr.

and m_foot.

and m_caption


These could all be one line if you wanted:
+            m_frameAttr = true;
+            borders[cTop] = true;
m_frameAttr = borders[cTop] = true;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55681</commentid>
    <comment_count>6</comment_count>
      <attachid>10593</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-09-16 16:41:56 -0700</bug_when>
    <thetext>Created attachment 10593
Address some of Eric&apos;s concerns

Ok, I cleaned up the static casts and compacted that code.

I did not convert the member variables to RefPtrs.  I started to do so and realized that the code surrounding the caching of these variables is (right now) completely buggy (only the body member is actually being ref&apos;ed right now).  Because the problem is more complicated (and not relevant at all to this patch),  I&apos;m filing a followup bug about making the management of those pointers better (both RefPtr conversion and then making them update properly as well).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55683</commentid>
    <comment_count>7</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-09-16 16:44:39 -0700</bug_when>
    <thetext>Filed 

http://bugzilla.opendarwin.org/show_bug.cgi?id=10892

to track the head/body/foot/caption issues.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55685</commentid>
    <comment_count>8</comment_count>
      <attachid>10593</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-16 18:22:03 -0700</bug_when>
    <thetext>Comment on attachment 10593
Address some of Eric&apos;s concerns

html/HTMLTableRowElement.h has no substantial changes.

I don&apos;t understand why the hasLocalName is necessary?
I guess HTMLTableColElement us both table columns and column groups?

I&apos;m not sure why this is right?

+    if (attrName == borderAttr || attrName == frameAttr || attrName == rulesAttr || attrName == alignAttr) {
         result = eTable;
         return true;
     }
-    
-    if (attrName == alignAttr) {
-        result = eTable;
-        return false;
-    } 

(but then again, I&apos;m not sure what it does...)

Mitz pointed this out at a possible typo:
+                                         (m_rulesAttr == ColsRules ? &quot;solid&apos;cols&quot; : 

did you mean solid-cols?

This comment isn&apos;t really clear to me what it means:+        decl-&gt;setStrictParsing(false); // Mapped attributes are just always quirky.

Is that a comment on the behavior of the code? or the use of quirks mode?

It looks like:
+CSSMutableStyleDeclaration* HTMLTableElement::getSharedRowGroupDecl()
+CSSMutableStyleDeclaration* HTMLTableElement::getSharedColGroupDecl()

could be simplified to share a single helper function.  One which just took &quot;colgroups&quot; vs &quot;rowgroups&quot;

All and all this change looks fine. I&apos;m not sure I fully understand it, but the code looks sane.  We could chat a bit more in IRC then I can r+ (or someone else who feels they understand better could do so before me.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55687</commentid>
    <comment_count>9</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-09-16 21:29:28 -0700</bug_when>
    <thetext>Regarding the align change.... I hadn&apos;t noticed the different return values.  Nice catch.  I need to keep it in a separate block.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55688</commentid>
    <comment_count>10</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-09-16 21:30:27 -0700</bug_when>
    <thetext>Yeah, I meant solid-cols.  The value doesn&apos;t really matter as long as it&apos;s unique.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55689</commentid>
    <comment_count>11</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-09-16 21:31:36 -0700</bug_when>
    <thetext>Yes, HTMLTableColElement is used for both column groups and columns.  Blame the DOM spec designers. :)
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55690</commentid>
    <comment_count>12</comment_count>
      <attachid>10594</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-09-16 22:15:56 -0700</bug_when>
    <thetext>Created attachment 10594
Round Three

Here we go.  Fixes the alignAttr problem (nice catch) and the typo for solid-cols.  Also combines rows and cols into the same common function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55692</commentid>
    <comment_count>13</comment_count>
      <attachid>10594</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2006-09-17 00:19:05 -0700</bug_when>
    <thetext>Comment on attachment 10594
Round Three

Got all of Eric&apos;s comments, I couldn&apos;t see anything else to comment on myself.  r+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55700</commentid>
    <comment_count>14</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-09-17 00:51:50 -0700</bug_when>
    <thetext>Fixed.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55750</commentid>
    <comment_count>15</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2006-09-17 08:22:43 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Fixed.

See r16399 and r16400-r16402.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10585</attachid>
            <date>2006-09-16 02:36:55 -0700</date>
            <delta_ts>2006-09-16 16:41:56 -0700</delta_ts>
            <desc>Patch that implements support for the frame and rules attributes</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>29454</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IGh0bWwvSFRNTFRhYmxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTFRh
YmxlRWxlbWVudC5oCShyZXZpc2lvbiAxNjM0MSkKKysrIGh0bWwvSFRNTFRhYmxlRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMyArNjYsMTMgQEAKICAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDk7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQo
Y29uc3QgTm9kZSopOwogCi0gICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIGNhcHRpb24oKSBj
b25zdCB7IHJldHVybiB0Q2FwdGlvbjsgfQorICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBj
YXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jYXB0aW9uOyB9CiAgICAgTm9kZSogc2V0Q2FwdGlv
bihIVE1MVGFibGVDYXB0aW9uRWxlbWVudCopOwogCi0gICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnQqIHRIZWFkKCkgY29uc3QgeyByZXR1cm4gaGVhZDsgfQorICAgIEhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50KiB0SGVhZCgpIGNvbnN0IHsgcmV0dXJuIG1faGVhZDsgfQogICAgIE5vZGUqIHNldFRI
ZWFkKEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Kik7CiAKLSAgICBIVE1MVGFibGVTZWN0aW9uRWxl
bWVudCogdEZvb3QoKSBjb25zdCB7IHJldHVybiBmb290OyB9CisgICAgSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnQqIHRGb290KCkgY29uc3QgeyByZXR1cm4gbV9mb290OyB9CiAgICAgTm9kZSogc2V0
VEZvb3QoSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqKTsKIAogICAgIE5vZGUqIHNldFRCb2R5KEhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50Kik7CkBAIC0xMjMsMjQgKzEyMywzMiBAQAogICAgIHZpcnR1
YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBNYXBwZWRBdHRyaWJ1dGVF
bnRyeSYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUqKTsKIAotICAgIC8vIFVzZWQgdG8gb2J0YWluIGVpdGhlciBhIHNvbGlkIG9y
IG91dHNldCBib3JkZXIgZGVjbC4KKyAgICAvLyBVc2VkIHRvIG9idGFpbiBlaXRoZXIgYSBzb2xp
ZCBvciBvdXRzZXQgYm9yZGVyIGRlY2wgYW5kIHRvIGRlYWwgd2l0aCB0aGUgZnJhbWUKKyAgICAv
LyBhbmQgcnVsZXMgYXR0cmlidXRlcy4KICAgICB2aXJ0dWFsIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsKCk7CiAgICAgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24qIGdldFNoYXJlZENlbGxEZWNsKCk7CisgICAgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qIGdldFNoYXJlZFJvd0dyb3VwRGVjbCgpOworICAgIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKiBnZXRTaGFyZWRDb2xHcm91cERlY2woKTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBhdHRhY2goKTsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmli
dXRlKikgY29uc3Q7CiAKKyAgICBlbnVtIFRhYmxlUnVsZXMgeyBVbnNldFJ1bGVzLCBOb25lUnVs
ZXMsIEdyb3Vwc1J1bGVzLCBSb3dzUnVsZXMsIENvbHNSdWxlcywgQWxsUnVsZXMgfTsKKwogcHJv
dGVjdGVkOgotICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBoZWFkOwotICAgIEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50KiBmb290OwotICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBmaXJz
dEJvZHk7Ci0gICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIHRDYXB0aW9uOworICAgIEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50KiBtX2hlYWQ7CisgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQq
IG1fZm9vdDsKKyAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudCogbV9maXJzdEJvZHk7CisgICAg
SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIG1fY2FwdGlvbjsKIAotICAgIGJvb2wgbV9ub0JvcmRl
ciAgICAgOiAxOwotICAgIGJvb2wgbV9zb2xpZCAgICAgICAgOiAxOwotICAgIC8vIDE0IGJpdHMg
dW51c2VkCi0gICAgdW5zaWduZWQgc2hvcnQgcGFkZGluZzsKKyAgICBib29sIG1fYm9yZGVyQXR0
cjsgICAgICAgICAgLy8gU2V0cyBhIHByZWNpc2UgYm9yZGVyIHdpZHRoIGFuZCBjcmVhdGVzIGFu
IG91dHNldCBib3JkZXIgZm9yIHRoZSB0YWJsZSBhbmQgZm9yIGl0cyBjZWxscy4KKyAgICBib29s
IG1fYm9yZGVyQ29sb3JBdHRyOyAgICAgLy8gT3ZlcnJpZGVzIHRoZSBvdXRzZXQgYm9yZGVyIGFu
ZCBtYWtlcyBpdCBzb2xpZCBmb3IgdGhlIHRhYmxlIGFuZCBjZWxscyBpbnN0ZWFkLgorICAgIGJv
b2wgbV9mcmFtZUF0dHI7ICAgICAgICAgICAvLyBJbXBsaWVzIGEgdGhpbiBib3JkZXIgd2lkdGgg
aWYgbm8gYm9yZGVyIGlzIHNldCBhbmQgdGhlbiBhIGNlcnRhaW4gc2V0IG9mIHNvbGlkL2hpZGRl
biBib3JkZXJzIGJhc2VkIG9mZiB0aGUgdmFsdWUuCisgICAgVGFibGVSdWxlcyBtX3J1bGVzQXR0
cjsgICAgIC8vIEltcGxpZXMgYSB0aGluIGJvcmRlciB3aWR0aCwgYSBjb2xsYXBzaW5nIGJvcmRl
ciBtb2RlbCwgYW5kIGFsbCBib3JkZXJzIG9uIHRoZSB0YWJsZSBiZWNvbWluZyBzZXQgdG8gaGlk
ZGVuIChpZiBmcmFtZS9ib3JkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
YXJlIHByZXNlbnQsIHRvIG5vbmUgb3RoZXJ3aXNlKS4KKyAgIAorICAgIHVuc2lnbmVkIHNob3J0
IG1fcGFkZGluZzsKICAgICBmcmllbmQgY2xhc3MgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ7CiB9Owog
CkluZGV4OiBodG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRt
bC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5oCShyZXZpc2lvbiAxNjM0MSkKKysrIGh0bWwvSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsOCBAQAog
ICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gODsgfQogICAgIHZp
cnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKik7CiAgICAgdmlydHVhbCBDb250YWluZXJO
b2RlKiBhZGRDaGlsZChQYXNzUmVmUHRyPE5vZGU+KTsKLSAgICAKKyAgICB2aXJ0dWFsIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsKCk7CisK
ICAgICBIVE1MRWxlbWVudCogaW5zZXJ0Um93KGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIHZvaWQgZGVsZXRlUm93KGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwogCkluZGV4OiBo
dG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxUYWJsZUNv
bEVsZW1lbnQuaAkocmV2aXNpb24gMTYzNDEpCisrKyBodG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTIgKzQyLDEyIEBACiAgICAgdmlydHVhbCBIVE1MVGFn
U3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgdGFnUHJp
b3JpdHkoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSopOwot
ICAgIHZvaWQgc2V0VGFibGUoSFRNTFRhYmxlRWxlbWVudCogdCkgeyB0YWJsZSA9IHQ7IH0KIAog
ICAgIC8vIG92ZXJyaWRlcwogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLQorICAgIHZpcnR1YWwg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2wo
KTsKKyAgIAogICAgIGludCBzcGFuKCkgY29uc3QgeyByZXR1cm4gX3NwYW47IH0KIAogICAgIFN0
cmluZyBhbGlnbigpIGNvbnN0OwpAQCAtNjksNyArNjksNiBAQAogCiBwcm90ZWN0ZWQ6CiAgICAg
aW50IF9zcGFuOwotICAgIEhUTUxUYWJsZUVsZW1lbnQgKnRhYmxlOwogfTsKIAogfSAvL25hbWVz
cGFjZQpJbmRleDogaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MzQxKQorKysg
aHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDcgQEAKICNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgogI2luY2x1ZGUgIkhUTUxUYWJsZVJvd0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVGFi
bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNjIsNiArNjMsMjEgQEAKICAgICByZXR1cm4gSFRNTFRhYmxlUGFydEVsZW1lbnQ6OmFk
ZENoaWxkKGNoaWxkKTsKIH0KIAorLy8gdXNlZCBieSB0YWJsZSByb3cgZ3JvdXBzIHRvIHNoYXJl
IHN0eWxlIGRlY2xzIGNyZWF0ZWQgYnkgdGhlIGVuY2xvc2luZyB0YWJsZS4KK0NTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6YWRkaXRpb25hbEF0dHJp
YnV0ZVN0eWxlRGVjbCgpCit7CisgICAgTm9kZSogcCA9IHBhcmVudE5vZGUoKTsKKyAgICB3aGls
ZSAocCAmJiAhcC0+aGFzVGFnTmFtZSh0YWJsZVRhZykpCisgICAgICAgIHAgPSBwLT5wYXJlbnRO
b2RlKCk7CisKKyAgICBpZiAocCkgeworICAgICAgICBIVE1MVGFibGVFbGVtZW50KiB0YWJsZSA9
IHN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnQqPihwKTsKKyAgICAgICAgcmV0dXJuIHRhYmxl
LT5nZXRTaGFyZWRSb3dHcm91cERlY2woKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwog
Ly8gdGhlc2UgZnVuY3Rpb25zIGFyZSByYXRoZXIgc2xvdywgc2luY2Ugd2UgbmVlZCB0byBnZXQg
dGhlIHJvdyBhdAogLy8gdGhlIGluZGV4Li4uIGJ1dCB0aGV5IGFyZW4ndCB1c2VkIGR1cmluZyB1
c3VhbCBIVE1MIHBhcnNpbmcgYW55d2F5CiBIVE1MRWxlbWVudCogSFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnQ6Omluc2VydFJvdyhpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQpJbmRleDogaHRt
bC9IVE1MVGFibGVSb3dFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MVGFibGVSb3dF
bGVtZW50LmgJKHJldmlzaW9uIDE2MzQxKQorKysgaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAKICAgICB2aXJ0dWFsIGludCB0YWdQcmlv
cml0eSgpIGNvbnN0IHsgcmV0dXJuIDc7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29u
c3QgTm9kZSopOwogICAgIHZpcnR1YWwgQ29udGFpbmVyTm9kZSogYWRkQ2hpbGQoUGFzc1JlZlB0
cjxOb2RlPik7Ci0gICAgCisKICAgICBpbnQgcm93SW5kZXgoKSBjb25zdDsKICAgICBpbnQgc2Vj
dGlvblJvd0luZGV4KCkgY29uc3Q7CiAKSW5kZXg6IGh0bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmNwcAkocmV2aXNpb24g
MTYzNDEpCisrKyBodG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ29sLmgiCisjaW5jbHVkZSAiSFRN
TFRhYmxlRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc4LDYgKzc5LDIx
IEBACiAgICAgICAgIEhUTUxUYWJsZVBhcnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKTsKIH0KIAorLy8gdXNlZCBieSB0YWJsZSBjb2x1bW5zIGFuZCBjb2x1bW4gZ3JvdXBzIHRv
IHNoYXJlIHN0eWxlIGRlY2xzIGNyZWF0ZWQgYnkgdGhlIGVuY2xvc2luZyB0YWJsZS4KK0NTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBIVE1MVGFibGVDb2xFbGVtZW50OjphZGRpdGlvbmFsQXR0
cmlidXRlU3R5bGVEZWNsKCkKK3sKKyAgICBOb2RlKiBwID0gcGFyZW50Tm9kZSgpOworICAgIHdo
aWxlIChwICYmICFwLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkKKyAgICAgICAgcCA9IHAtPnBhcmVu
dE5vZGUoKTsKKworICAgIGlmIChwKSB7CisgICAgICAgIEhUTUxUYWJsZUVsZW1lbnQqIHRhYmxl
ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudCo+KHApOworICAgICAgICByZXR1cm4gaGFz
TG9jYWxOYW1lKGNvbGdyb3VwVGFnKSA/IHRhYmxlLT5nZXRTaGFyZWRDb2xHcm91cERlY2woKSA6
IDA7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKIFN0cmluZyBIVE1MVGFibGVDb2xFbGVt
ZW50OjphbGlnbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbGlnbkF0dHIp
OwpJbmRleDogaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hU
TUxUYWJsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjM0MSkKKysrIGh0bWwvSFRNTFRhYmxlRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDIwICs0NCwyMiBAQAogCiBIVE1MVGFibGVF
bGVtZW50OjpIVE1MVGFibGVFbGVtZW50KERvY3VtZW50ICpkb2MpCiAgICAgOiBIVE1MRWxlbWVu
dCh0YWJsZVRhZywgZG9jKQotICAgICwgaGVhZCgwKQotICAgICwgZm9vdCgwKQotICAgICwgZmly
c3RCb2R5KDApCi0gICAgLCB0Q2FwdGlvbigwKQotICAgICwgbV9ub0JvcmRlcih0cnVlKQotICAg
ICwgbV9zb2xpZChmYWxzZSkKLSAgICAsIHBhZGRpbmcoMSkKKyAgICAsIG1faGVhZCgwKQorICAg
ICwgbV9mb290KDApCisgICAgLCBtX2ZpcnN0Qm9keSgwKQorICAgICwgbV9jYXB0aW9uKDApCisg
ICAgLCBtX2JvcmRlckF0dHIoZmFsc2UpCisgICAgLCBtX2JvcmRlckNvbG9yQXR0cihmYWxzZSkK
KyAgICAsIG1fZnJhbWVBdHRyKGZhbHNlKQorICAgICwgbV9ydWxlc0F0dHIoVW5zZXRSdWxlcykK
KyAgICAsIG1fcGFkZGluZygxKQogewogfQogCiBIVE1MVGFibGVFbGVtZW50Ojp+SFRNTFRhYmxl
RWxlbWVudCgpCiB7Ci0gICAgaWYgKGZpcnN0Qm9keSkKLSAgICAgICAgZmlyc3RCb2R5LT5kZXJl
ZigpOworICAgIGlmIChtX2ZpcnN0Qm9keSkKKyAgICAgICAgbV9maXJzdEJvZHktPmRlcmVmKCk7
CiB9CiAKIGJvb2wgSFRNTFRhYmxlRWxlbWVudDo6Y2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hp
bGQpCkBAIC03Miw0MCArNzQsNDAgQEAKIE5vZGUqIEhUTUxUYWJsZUVsZW1lbnQ6OnNldENhcHRp
b24oSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIGMpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgaWYgKE5vZGUqIG9jID0gdENhcHRpb24pCisgICAgaWYgKE5vZGUqIG9jID0gbV9j
YXB0aW9uKQogICAgICAgICByZXBsYWNlQ2hpbGQoYywgb2MsIGVjKTsKICAgICBlbHNlCiAgICAg
ICAgIGluc2VydEJlZm9yZShjLCBmaXJzdENoaWxkKCksIGVjKTsKLSAgICB0Q2FwdGlvbiA9IGM7
Ci0gICAgcmV0dXJuIHRDYXB0aW9uOworICAgIG1fY2FwdGlvbiA9IGM7CisgICAgcmV0dXJuIG1f
Y2FwdGlvbjsKIH0KIAogTm9kZSogSFRNTFRhYmxlRWxlbWVudDo6c2V0VEhlYWQoSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQqIHMpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaWYg
KE5vZGUqIGggPSBoZWFkKQorICAgIGlmIChOb2RlKiBoID0gbV9oZWFkKQogICAgICAgICByZXBs
YWNlQ2hpbGQocywgaCwgZWMpOwotICAgIGVsc2UgaWYgKGZvb3QpCi0gICAgICAgIGluc2VydEJl
Zm9yZShzLCBmb290LCBlYyk7Ci0gICAgZWxzZSBpZiAoZmlyc3RCb2R5KQotICAgICAgICBpbnNl
cnRCZWZvcmUocywgZmlyc3RCb2R5LCBlYyk7CisgICAgZWxzZSBpZiAobV9mb290KQorICAgICAg
ICBpbnNlcnRCZWZvcmUocywgbV9mb290LCBlYyk7CisgICAgZWxzZSBpZiAobV9maXJzdEJvZHkp
CisgICAgICAgIGluc2VydEJlZm9yZShzLCBtX2ZpcnN0Qm9keSwgZWMpOwogICAgIGVsc2UKICAg
ICAgICAgYXBwZW5kQ2hpbGQocywgZWMpOwotICAgIGhlYWQgPSBzOwotICAgIHJldHVybiBoZWFk
OworICAgIG1faGVhZCA9IHM7CisgICAgcmV0dXJuIG1faGVhZDsKIH0KIAogTm9kZSogSFRNTFRh
YmxlRWxlbWVudDo6c2V0VEZvb3QoSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQgKnMpCiB7CiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaWYgKE5vZGUgKmYgPSBmb290KQorICAgIGlmIChO
b2RlICpmID0gbV9mb290KQogICAgICAgICByZXBsYWNlQ2hpbGQocywgZiwgZWMpOwotICAgIGVs
c2UgaWYgKGZpcnN0Qm9keSkKLSAgICAgICAgaW5zZXJ0QmVmb3JlKHMsIGZpcnN0Qm9keSwgZWMp
OworICAgIGVsc2UgaWYgKG1fZmlyc3RCb2R5KQorICAgICAgICBpbnNlcnRCZWZvcmUocywgbV9m
aXJzdEJvZHksIGVjKTsKICAgICBlbHNlCiAgICAgICAgIGFwcGVuZENoaWxkKHMsIGVjKTsKLSAg
ICBmb290ID0gczsKLSAgICByZXR1cm4gZm9vdDsKKyAgICBtX2Zvb3QgPSBzOworICAgIHJldHVy
biBtX2Zvb3Q7CiB9CiAKIE5vZGUqIEhUTUxUYWJsZUVsZW1lbnQ6OnNldFRCb2R5KEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50ICpzKQpAQCAtMTEzLDg1ICsxMTUsODUgQEAKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKICAgICBOb2RlKiByOwogICAgIHMtPnJlZigpOwotICAgIGlmIChOb2RlICpm
YiA9IGZpcnN0Qm9keSkgeworICAgIGlmIChOb2RlICpmYiA9IG1fZmlyc3RCb2R5KSB7CiAgICAg
ICAgIHJlcGxhY2VDaGlsZChzLCBmYiwgZWMpOwogICAgICAgICBmYi0+ZGVyZWYoKTsKICAgICAg
ICAgciA9IHM7CiAgICAgfSBlbHNlCiAgICAgICAgIGFwcGVuZENoaWxkKHMsIGVjKTsKLSAgICBm
aXJzdEJvZHkgPSBzOwotICAgIHJldHVybiBmaXJzdEJvZHk7CisgICAgbV9maXJzdEJvZHkgPSBz
OworICAgIHJldHVybiBtX2ZpcnN0Qm9keTsKIH0KIAogSFRNTEVsZW1lbnQgKkhUTUxUYWJsZUVs
ZW1lbnQ6OmNyZWF0ZVRIZWFkKCkKIHsKLSAgICBpZiAoIWhlYWQpIHsKKyAgICBpZiAoIW1faGVh
ZCkgewogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgaGVhZCA9IG5ldyBI
VE1MVGFibGVTZWN0aW9uRWxlbWVudCh0aGVhZFRhZywgZG9jdW1lbnQoKSwgdHJ1ZSAvKiBpbXBs
aWNpdCAqLyk7Ci0gICAgICAgIGlmIChmb290KQotICAgICAgICAgICAgaW5zZXJ0QmVmb3JlKGhl
YWQsIGZvb3QsIGVjKTsKLSAgICAgICAgZWxzZSBpZiAoZmlyc3RCb2R5KQotICAgICAgICAgICAg
aW5zZXJ0QmVmb3JlKGhlYWQsIGZpcnN0Qm9keSwgZWMpOworICAgICAgICBtX2hlYWQgPSBuZXcg
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQodGhlYWRUYWcsIGRvY3VtZW50KCksIHRydWUgLyogaW1w
bGljaXQgKi8pOworICAgICAgICBpZiAobV9mb290KQorICAgICAgICAgICAgaW5zZXJ0QmVmb3Jl
KG1faGVhZCwgbV9mb290LCBlYyk7CisgICAgICAgIGVsc2UgaWYgKG1fZmlyc3RCb2R5KQorICAg
ICAgICAgICAgaW5zZXJ0QmVmb3JlKG1faGVhZCwgbV9maXJzdEJvZHksIGVjKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgYXBwZW5kQ2hpbGQoaGVhZCwgZWMpOworICAgICAgICAgICAgYXBw
ZW5kQ2hpbGQobV9oZWFkLCBlYyk7CiAgICAgfQotICAgIHJldHVybiBoZWFkOworICAgIHJldHVy
biBtX2hlYWQ7CiB9CiAKIHZvaWQgSFRNTFRhYmxlRWxlbWVudDo6ZGVsZXRlVEhlYWQoKQogewot
ICAgIGlmIChoZWFkKSB7CisgICAgaWYgKG1faGVhZCkgewogICAgICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICAgICAgaGVhZC0+cmVmKCk7Ci0gICAgICAgIEhUTUxFbGVtZW50OjpyZW1v
dmVDaGlsZChoZWFkLCBlYyk7Ci0gICAgICAgIGhlYWQtPmRlcmVmKCk7CisgICAgICAgIG1faGVh
ZC0+cmVmKCk7CisgICAgICAgIEhUTUxFbGVtZW50OjpyZW1vdmVDaGlsZChtX2hlYWQsIGVjKTsK
KyAgICAgICAgbV9oZWFkLT5kZXJlZigpOwogICAgIH0KLSAgICBoZWFkID0gMDsKKyAgICBtX2hl
YWQgPSAwOwogfQogCiBIVE1MRWxlbWVudCAqSFRNTFRhYmxlRWxlbWVudDo6Y3JlYXRlVEZvb3Qo
KQogewotICAgIGlmICghZm9vdCkgeworICAgIGlmICghbV9mb290KSB7CiAgICAgICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBmb290ID0gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50KHRmb290VGFnLCBkb2N1bWVudCgpLCB0cnVlIC8qaW1wbGljaXQgKi8pOwotICAgICAgICBp
ZiAoZmlyc3RCb2R5KQotICAgICAgICAgICAgaW5zZXJ0QmVmb3JlKGZvb3QsIGZpcnN0Qm9keSwg
ZWMpOworICAgICAgICBtX2Zvb3QgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQodGZvb3RU
YWcsIGRvY3VtZW50KCksIHRydWUgLyppbXBsaWNpdCAqLyk7CisgICAgICAgIGlmIChtX2ZpcnN0
Qm9keSkKKyAgICAgICAgICAgIGluc2VydEJlZm9yZShtX2Zvb3QsIG1fZmlyc3RCb2R5LCBlYyk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFwcGVuZENoaWxkKGZvb3QsIGVjKTsKKyAgICAg
ICAgICAgIGFwcGVuZENoaWxkKG1fZm9vdCwgZWMpOwogICAgIH0KLSAgICByZXR1cm4gZm9vdDsK
KyAgICByZXR1cm4gbV9mb290OwogfQogCiB2b2lkIEhUTUxUYWJsZUVsZW1lbnQ6OmRlbGV0ZVRG
b290KCkKIHsKLSAgICBpZiAoZm9vdCkgeworICAgIGlmIChtX2Zvb3QpIHsKICAgICAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIGZvb3QtPnJlZigpOwotICAgICAgICBIVE1MRWxl
bWVudDo6cmVtb3ZlQ2hpbGQoZm9vdCwgZWMpOwotICAgICAgICBmb290LT5kZXJlZigpOworICAg
ICAgICBtX2Zvb3QtPnJlZigpOworICAgICAgICBIVE1MRWxlbWVudDo6cmVtb3ZlQ2hpbGQobV9m
b290LCBlYyk7CisgICAgICAgIG1fZm9vdC0+ZGVyZWYoKTsKICAgICB9Ci0gICAgZm9vdCA9IDA7
CisgICAgbV9mb290ID0gMDsKIH0KIAogSFRNTEVsZW1lbnQgKkhUTUxUYWJsZUVsZW1lbnQ6OmNy
ZWF0ZUNhcHRpb24oKQogewotICAgIGlmICghdENhcHRpb24pIHsKKyAgICBpZiAoIW1fY2FwdGlv
bikgewogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgdENhcHRpb24gPSBu
ZXcgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQoZG9jdW1lbnQoKSk7Ci0gICAgICAgIGluc2VydEJl
Zm9yZSh0Q2FwdGlvbiwgZmlyc3RDaGlsZCgpLCBlYyk7CisgICAgICAgIG1fY2FwdGlvbiA9IG5l
dyBIVE1MVGFibGVDYXB0aW9uRWxlbWVudChkb2N1bWVudCgpKTsKKyAgICAgICAgaW5zZXJ0QmVm
b3JlKG1fY2FwdGlvbiwgZmlyc3RDaGlsZCgpLCBlYyk7CiAgICAgfQotICAgIHJldHVybiB0Q2Fw
dGlvbjsKKyAgICByZXR1cm4gbV9jYXB0aW9uOwogfQogCiB2b2lkIEhUTUxUYWJsZUVsZW1lbnQ6
OmRlbGV0ZUNhcHRpb24oKQogewotICAgIGlmICh0Q2FwdGlvbikgeworICAgIGlmIChtX2NhcHRp
b24pIHsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIHRDYXB0aW9uLT5y
ZWYoKTsKLSAgICAgICAgSFRNTEVsZW1lbnQ6OnJlbW92ZUNoaWxkKHRDYXB0aW9uLCBlYyk7Ci0g
ICAgICAgIHRDYXB0aW9uLT5kZXJlZigpOworICAgICAgICBtX2NhcHRpb24tPnJlZigpOworICAg
ICAgICBIVE1MRWxlbWVudDo6cmVtb3ZlQ2hpbGQobV9jYXB0aW9uLCBlYyk7CisgICAgICAgIG1f
Y2FwdGlvbi0+ZGVyZWYoKTsKICAgICB9Ci0gICAgdENhcHRpb24gPSAwOworICAgIG1fY2FwdGlv
biA9IDA7CiB9CiAKIEhUTUxFbGVtZW50ICpIVE1MVGFibGVFbGVtZW50OjppbnNlcnRSb3coaW50
IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTIwMCw3ICsyMDIsNyBAQAogICAgIC8vIChj
ZiBET00yVFMgSFRNTFRhYmxlRWxlbWVudDMxIHRlc3QpCiAgICAgLy8gKG5vdGU6IHRoaXMgaXMg
ZGlmZmVyZW50IGZyb20gImlmIHRoZSB0YWJsZSBoYXMgbm8gc2VjdGlvbnMiLCBzaW5jZSB3ZSBj
YW4gaGF2ZQogICAgIC8vIDxUQUJMRT48VFI+KQotICAgIGlmICghZmlyc3RCb2R5ICYmICFoZWFk
ICYmICFmb290KQorICAgIGlmICghbV9maXJzdEJvZHkgJiYgIW1faGVhZCAmJiAhbV9mb290KQog
ICAgICAgICBzZXRUQm9keShuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQodGJvZHlUYWcsIGRv
Y3VtZW50KCksIHRydWUgLyogaW1wbGljaXQgKi8pKTsKIAogICAgIC8vIElFIHRyZWF0cyBpbmRl
eD0tMSBhcyBkZWZhdWx0IHZhbHVlIG1lYW5pbmcgJ2FwcGVuZCBhZnRlciBsYXN0JwpAQCAtMjE0
LDggKzIxNiw3IEBACiAgICAgewogICAgICAgICAvLyB0aGVyZSBjb3VsZCBiZSAyIHRmb290IGVs
ZW1lbnRzIGluIHRoZSB0YWJsZS4gT25seSB0aGUgZmlyc3Qgb25lIGlzIHRoZSAiZm9vdCIsIHRo
YXQncyB3aHkgd2UgaGF2ZSB0aGUgbW9yZQogICAgICAgICAvLyBjb21wbGljYXRlZCBpZiBzdGF0
ZW1lbnQgYmVsb3cuCi0gICAgICAgIGlmIChub2RlICE9IGZvb3QgJiYgKG5vZGUtPmhhc1RhZ05h
bWUodGhlYWRUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUodGZvb3RUYWcpIHx8IG5vZGUtPmhhc1Rh
Z05hbWUodGJvZHlUYWcpKSkKLSAgICAgICAgeworICAgICAgICBpZiAobm9kZSAhPSBtX2Zvb3Qg
JiYgKG5vZGUtPmhhc1RhZ05hbWUodGhlYWRUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUodGZvb3RU
YWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUodGJvZHlUYWcpKSkgewogICAgICAgICAgICAgc2VjdGlv
biA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Kj4obm9kZSk7CiAgICAgICAg
ICAgICBsYXN0U2VjdGlvbiA9IHNlY3Rpb247CiAgICAgICAgICAgICBpZiAoIWFwcGVuZCkgewpA
QCAtMjI4LDggKzIyOSw4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAg
aWYgKCFmb3VuZCAmJiBmb290KQotICAgICAgICBzZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnQqPihmb290KTsKKyAgICBpZiAoIWZvdW5kICYmIG1fZm9vdCkKKyAg
ICAgICAgc2VjdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Kj4obV9m
b290KTsKIAogICAgIC8vIEluZGV4ID09IDAgbWVhbnMgImluc2VydCBiZWZvcmUgZmlyc3Qgcm93
IGluIGN1cnJlbnQgc2VjdGlvbiIKICAgICAvLyBvciAiYXBwZW5kIGFmdGVyIGxhc3Qgcm93IiAo
aWYgdGhlcmUncyBubyBjdXJyZW50IHNlY3Rpb24gYW55bW9yZSkKQEAgLTI1NSwxMyArMjU2LDEy
IEBACiAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgIGZvciAoOyBub2RlIDsgbm9kZSA9IG5v
ZGUtPm5leHRTaWJsaW5nKCkpCiAgICAgewotICAgICAgICBpZiAobm9kZSAhPSBmb290ICYmIChu
b2RlLT5oYXNUYWdOYW1lKHRoZWFkVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKHRmb290VGFnKSB8
fCAKKyAgICAgICAgaWYgKG5vZGUgIT0gbV9mb290ICYmIChub2RlLT5oYXNUYWdOYW1lKHRoZWFk
VGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKHRmb290VGFnKSB8fCAKICAgICAgICAgICAgIG5vZGUt
Pmhhc1RhZ05hbWUodGJvZHlUYWcpKSkgewogICAgICAgICAgICAgc2VjdGlvbiA9IHN0YXRpY19j
YXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Kj4obm9kZSk7CiAgICAgICAgICAgICBsYXN0U2Vj
dGlvbiA9IHNlY3Rpb247CiAgICAgICAgICAgICBpbnQgcm93cyA9IHNlY3Rpb24tPm51bVJvd3Mo
KTsKLSAgICAgICAgICAgIGlmICghbGFzdFJvdykKLSAgICAgICAgICAgIHsKKyAgICAgICAgICAg
IGlmICghbGFzdFJvdykgewogICAgICAgICAgICAgICAgIGlmIChyb3dzID4gaW5kZXgpIHsKICAg
ICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKQEAgLTI3MSw4ICsyNzEsOCBAQAogICAgICAgICB9CiAgICAgICAgIHNlY3Rpb24gPSAwTDsK
ICAgICB9Ci0gICAgaWYgKCFmb3VuZCAmJiBmb290KQotICAgICAgICBzZWN0aW9uID0gc3RhdGlj
X2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqPihmb290KTsKKyAgICBpZiAoIWZvdW5kICYm
IG1fZm9vdCkKKyAgICAgICAgc2VjdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50Kj4obV9mb290KTsKIAogICAgIGlmIChsYXN0Um93KQogICAgICAgICBsYXN0U2VjdGlv
bi0+ZGVsZXRlUm93KC0xLCBlYyk7CkBAIC0zMDEsMTUgKzMwMSwxNSBAQAogCiAgICAgQ29udGFp
bmVyTm9kZSogY29udGFpbmVyID0gSFRNTEVsZW1lbnQ6OmFkZENoaWxkKGNoaWxkLmdldCgpKTsK
ICAgICBpZiAoY29udGFpbmVyKSB7Ci0gICAgICAgIGlmICghdENhcHRpb24gJiYgY2hpbGQtPmhh
c1RhZ05hbWUoY2FwdGlvblRhZykpCi0gICAgICAgICAgICB0Q2FwdGlvbiA9IHN0YXRpY19jYXN0
PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50Kj4oY2hpbGQuZ2V0KCkpOwotICAgICAgICBlbHNlIGlm
ICghaGVhZCAmJiBjaGlsZC0+aGFzVGFnTmFtZSh0aGVhZFRhZykpCi0gICAgICAgICAgICBoZWFk
ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqPihjaGlsZC5nZXQoKSk7Ci0g
ICAgICAgIGVsc2UgaWYgKCFmb290ICYmIGNoaWxkLT5oYXNUYWdOYW1lKHRmb290VGFnKSkKLSAg
ICAgICAgICAgIGZvb3QgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudCo+KGNo
aWxkLmdldCgpKTsKLSAgICAgICAgZWxzZSBpZiAoIWZpcnN0Qm9keSAmJiBjaGlsZC0+aGFzVGFn
TmFtZSh0Ym9keVRhZykpIHsKLSAgICAgICAgICAgIGZpcnN0Qm9keSA9IHN0YXRpY19jYXN0PEhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50Kj4oY2hpbGQuZ2V0KCkpOwotICAgICAgICAgICAgZmlyc3RC
b2R5LT5yZWYoKTsKKyAgICAgICAgaWYgKCFtX2NhcHRpb24gJiYgY2hpbGQtPmhhc1RhZ05hbWUo
Y2FwdGlvblRhZykpCisgICAgICAgICAgICBtX2NhcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFi
bGVDYXB0aW9uRWxlbWVudCo+KGNoaWxkLmdldCgpKTsKKyAgICAgICAgZWxzZSBpZiAoIW1faGVh
ZCAmJiBjaGlsZC0+aGFzVGFnTmFtZSh0aGVhZFRhZykpCisgICAgICAgICAgICBtX2hlYWQgPSBz
dGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudCo+KGNoaWxkLmdldCgpKTsKKyAgICAg
ICAgZWxzZSBpZiAoIW1fZm9vdCAmJiBjaGlsZC0+aGFzVGFnTmFtZSh0Zm9vdFRhZykpCisgICAg
ICAgICAgICBtX2Zvb3QgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudCo+KGNo
aWxkLmdldCgpKTsKKyAgICAgICAgZWxzZSBpZiAoIW1fZmlyc3RCb2R5ICYmIGNoaWxkLT5oYXNU
YWdOYW1lKHRib2R5VGFnKSkgeworICAgICAgICAgICAgbV9maXJzdEJvZHkgPSBzdGF0aWNfY2Fz
dDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudCo+KGNoaWxkLmdldCgpKTsKKyAgICAgICAgICAgIG1f
Zmlyc3RCb2R5LT5yZWYoKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gY29udGFpbmVy
OwpAQCAtMzE5LDkgKzMxOSw5IEBACiB7CiAgICAgSFRNTEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdl
ZCgpOwogICAgIAotICAgIGlmIChmaXJzdEJvZHkgJiYgZmlyc3RCb2R5LT5wYXJlbnROb2RlKCkg
IT0gdGhpcykgewotICAgICAgICBmaXJzdEJvZHktPmRlcmVmKCk7Ci0gICAgICAgIGZpcnN0Qm9k
eSA9IDA7CisgICAgaWYgKG1fZmlyc3RCb2R5ICYmIG1fZmlyc3RCb2R5LT5wYXJlbnROb2RlKCkg
IT0gdGhpcykgeworICAgICAgICBtX2ZpcnN0Qm9keS0+ZGVyZWYoKTsKKyAgICAgICAgbV9maXJz
dEJvZHkgPSAwOwogICAgIH0KIH0gCiAKQEAgLTM0OCwxNiArMzQ4LDExIEBACiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICAKLSAgICBpZiAoYXR0ck5hbWUgPT0gYm9yZGVyQXR0cikg
eworICAgIGlmIChhdHRyTmFtZSA9PSBib3JkZXJBdHRyIHx8IGF0dHJOYW1lID09IGZyYW1lQXR0
ciB8fCBhdHRyTmFtZSA9PSBydWxlc0F0dHIgfHwgYXR0ck5hbWUgPT0gYWxpZ25BdHRyKSB7CiAg
ICAgICAgIHJlc3VsdCA9IGVUYWJsZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAg
IAotICAgIGlmIChhdHRyTmFtZSA9PSBhbGlnbkF0dHIpIHsKLSAgICAgICAgcmVzdWx0ID0gZVRh
YmxlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSAKLSAgICAKKwogICAgIHJldHVybiBI
VE1MRWxlbWVudDo6bWFwVG9FbnRyeShhdHRyTmFtZSwgcmVzdWx0KTsKIH0KIApAQCAtMzY4LDU1
ICszNjMsMTEwIEBACiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGhlaWdodEF0dHIpCiAg
ICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9IRUlHSFQsIGF0dHItPnZhbHVlKCkp
OwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBib3JkZXJBdHRyKSAgewotICAgICAgICBt
X25vQm9yZGVyID0gdHJ1ZTsKKyAgICAgICAgbV9ib3JkZXJBdHRyID0gdHJ1ZTsKICAgICAgICAg
aWYgKGF0dHItPmRlY2woKSkgewogICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWwgPSBh
dHRyLT5kZWNsKCktPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTX1BST1BfQk9SREVSX0xFRlRfV0lE
VEgpOwogICAgICAgICAgICAgaWYgKHZhbCAmJiB2YWwtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewog
ICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltVmFsID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwuZ2V0KCkpOwotICAgICAgICAgICAgICAgIG1fbm9Cb3Jk
ZXIgPSAhcHJpbVZhbC0+Z2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJF
Uik7CisgICAgICAgICAgICAgICAgbV9ib3JkZXJBdHRyID0gcHJpbVZhbC0+Z2V0RmxvYXRWYWx1
ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZSBpZiAoIWF0dHItPmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAvLyAjIyMgdGhpcyBu
ZWVkcyBtb3JlIHdvcmssIGFzIHRoZSBib3JkZXIgdmFsdWUgaXMgbm90IG9ubHkKLSAgICAgICAg
ICAgIC8vICAgICB0aGUgYm9yZGVyIG9mIHRoZSBib3gsIGJ1dCBhbHNvIGJldHdlZW4gdGhlIGNl
bGxzCiAgICAgICAgICAgICBpbnQgYm9yZGVyID0gMDsKICAgICAgICAgICAgIGlmIChhdHRyLT5p
c0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgYm9yZGVyID0gMTsKICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICBib3JkZXIgPSBhdHRyLT52YWx1ZSgpLnRvSW50KCk7Ci0jaWZkZWYg
REVCVUdfRFJBV19CT1JERVIKLSAgICAgICAgICAgIGJvcmRlcj0xOwotI2VuZGlmCi0gICAgICAg
ICAgICBtX25vQm9yZGVyID0gIWJvcmRlcjsKKyAgICAgICAgICAgIG1fYm9yZGVyQXR0ciA9IGJv
cmRlcjsKICAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9CT1JERVJfV0lE
VEgsIFN0cmluZzo6bnVtYmVyKGJvcmRlcikpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gYmdjb2xvckF0dHIpCiAgICAgICAgIGFkZENTU0NvbG9yKGF0dHIsIENT
U19QUk9QX0JBQ0tHUk9VTkRfQ09MT1IsIGF0dHItPnZhbHVlKCkpOwogICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBib3JkZXJjb2xvckF0dHIpIHsKLSAgICAgICAgbV9zb2xpZCA9IGF0dHIt
PmRlY2woKTsKKyAgICAgICAgbV9ib3JkZXJDb2xvckF0dHIgPSBhdHRyLT5kZWNsKCk7CiAgICAg
ICAgIGlmICghYXR0ci0+ZGVjbCgpICYmICFhdHRyLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
IGFkZENTU0NvbG9yKGF0dHIsIENTU19QUk9QX0JPUkRFUl9DT0xPUiwgYXR0ci0+dmFsdWUoKSk7
Ci0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfVE9QX1NU
WUxFLCBDU1NfVkFMX1NPTElEKTsKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENT
U19QUk9QX0JPUkRFUl9CT1RUT01fU1RZTEUsIENTU19WQUxfU09MSUQpOwotICAgICAgICAgICAg
YWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQk9SREVSX0xFRlRfU1RZTEUsIENTU19WQUxf
U09MSUQpOwotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQk9SREVS
X1JJR0hUX1NUWUxFLCBDU1NfVkFMX1NPTElEKTsKLSAgICAgICAgICAgIG1fc29saWQgPSB0cnVl
OworICAgICAgICAgICAgbV9ib3JkZXJDb2xvckF0dHIgPSB0cnVlOwogICAgICAgICB9CiAgICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYmFja2dyb3VuZEF0dHIpIHsKICAgICAgICAgU3Ry
aW5nIHVybCA9IHBhcnNlVVJMKGF0dHItPnZhbHVlKCkpOwogICAgICAgICBpZiAoIXVybC5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICBhZGRDU1NJbWFnZVByb3BlcnR5KGF0dHIsIENTU19QUk9QX0JB
Q0tHUk9VTkRfSU1BR0UsIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCkpOwogICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IGZyYW1lQXR0cikgeworICAgICAgICAvLyBDYWNoZSB0aGUg
dmFsdWUgb2YgImZyYW1lIiBzbyB0aGF0IHRoZSB0YWJsZSBjYW4gZXhhbWluZSBpdCBsYXRlci4K
KyAgICAgICAgbV9mcmFtZUF0dHIgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIFdoZXRo
ZXIgb3Igbm90IHRvIGhpZGUgdGhlIHRvcC9yaWdodC9ib3R0b20vbGVmdCBib3JkZXJzLgorICAg
ICAgICBjb25zdCBpbnQgY1RvcCA9IDA7CisgICAgICAgIGNvbnN0IGludCBjUmlnaHQgPSAxOwor
ICAgICAgICBjb25zdCBpbnQgY0JvdHRvbSA9IDI7CisgICAgICAgIGNvbnN0IGludCBjTGVmdCA9
IDM7CisgICAgICAgIGJvb2wgYm9yZGVyc1s0XSA9IHsgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs
c2UgfTsKKyAgICAgICAgCisgICAgICAgIC8vIHZvaWQsIGFib3ZlLCBiZWxvdywgaHNpZGVzLCB2
c2lkZXMsIGxocywgcmhzLCBib3gsIGJvcmRlcgorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UoYXR0ci0+dmFsdWUoKSwgInZvaWQiKSkKKyAgICAgICAgICAgIG1fZnJhbWVBdHRyID0gdHJ1
ZTsKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImFi
b3ZlIikpIHsKKyAgICAgICAgICAgIG1fZnJhbWVBdHRyID0gdHJ1ZTsKKyAgICAgICAgICAgIGJv
cmRlcnNbY1RvcF0gPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KGF0dHItPnZhbHVlKCksICJiZWxvdyIpKSB7CisgICAgICAgICAgICBtX2ZyYW1lQXR0ciA9IHRy
dWU7CisgICAgICAgICAgICBib3JkZXJzW2NCb3R0b21dID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNl
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiaHNpZGVzIikpIHsKKyAgICAg
ICAgICAgIG1fZnJhbWVBdHRyID0gdHJ1ZTsKKyAgICAgICAgICAgIGJvcmRlcnNbY1RvcF0gPSBi
b3JkZXJzW2NCb3R0b21dID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShhdHRyLT52YWx1ZSgpLCAidnNpZGVzIikpIHsKKyAgICAgICAgICAgIG1fZnJhbWVBdHRy
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJvcmRlcnNbY0xlZnRdID0gYm9yZGVyc1tjUmlnaHRdID0g
dHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgp
LCAibGhzIikpIHsKKyAgICAgICAgICAgIG1fZnJhbWVBdHRyID0gdHJ1ZTsKKyAgICAgICAgICAg
IGJvcmRlcnNbY0xlZnRdID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShhdHRyLT52YWx1ZSgpLCAicmhzIikpIHsKKyAgICAgICAgICAgIG1fZnJhbWVBdHRyID0g
dHJ1ZTsKKyAgICAgICAgICAgIGJvcmRlcnNbY1JpZ2h0XSA9IHRydWU7CisgICAgICAgIH0gZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImJveCIpIHx8CisgICAgICAg
ICAgICAgICAgICAgZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImJvcmRlciIpKSB7
CisgICAgICAgICAgICBtX2ZyYW1lQXR0ciA9IHRydWU7CisgICAgICAgICAgICBib3JkZXJzW2NU
b3BdID0gYm9yZGVyc1tjQm90dG9tXSA9IGJvcmRlcnNbY0xlZnRdID0gYm9yZGVyc1tjUmlnaHRd
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gTm93IG1hcCBpbiB0aGUg
Ym9yZGVyIHN0eWxlcyBvZiBzb2xpZCBhbmQgaGlkZGVuIHJlc3BlY3RpdmVseS4KKyAgICAgICAg
aWYgKG1fZnJhbWVBdHRyKSB7CisgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1Nf
UFJPUF9CT1JERVJfVE9QX1dJRFRILCBDU1NfVkFMX1RISU4pOworICAgICAgICAgICAgYWRkQ1NT
UHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQk9SREVSX0JPVFRPTV9XSURUSCwgQ1NTX1ZBTF9USElO
KTsKKyAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9MRUZU
X1dJRFRILCBDU1NfVkFMX1RISU4pOworICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwg
Q1NTX1BST1BfQk9SREVSX1JJR0hUX1dJRFRILCBDU1NfVkFMX1RISU4pOworICAgICAgICAgICAg
YWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQk9SREVSX1RPUF9TVFlMRSwgYm9yZGVyc1tj
VG9wXSA/IENTU19WQUxfU09MSUQgOiBDU1NfVkFMX0hJRERFTik7CisgICAgICAgICAgICBhZGRD
U1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfQk9UVE9NX1NUWUxFLCBib3JkZXJzW2NC
b3R0b21dID8gQ1NTX1ZBTF9TT0xJRCA6IENTU19WQUxfSElEREVOKTsKKyAgICAgICAgICAgIGFk
ZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9MRUZUX1NUWUxFLCBib3JkZXJzW2NM
ZWZ0XSA/IENTU19WQUxfU09MSUQgOiBDU1NfVkFMX0hJRERFTik7CisgICAgICAgICAgICBhZGRD
U1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfUklHSFRfU1RZTEUsIGJvcmRlcnNbY1Jp
Z2h0XSA/IENTU19WQUxfU09MSUQgOiBDU1NfVkFMX0hJRERFTik7CisgICAgICAgIH0KICAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBydWxlc0F0dHIpIHsKKyAgICAgICAgLy8gQ2FjaGUg
dGhlIHZhbHVlIG9mICJydWxlcyIgc28gdGhhdCB0aGUgcGllY2VzIG9mIHRoZSB0YWJsZSBjYW4g
ZXhhbWluZSBpdCBsYXRlci4KKyAgICAgICAgbV9ydWxlc0F0dHIgPSBVbnNldFJ1bGVzOworICAg
ICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgIm5vbmUiKSkKKyAgICAg
ICAgICAgIG1fcnVsZXNBdHRyID0gTm9uZVJ1bGVzOworICAgICAgICBlbHNlIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiZ3JvdXBzIikpCisgICAgICAgICAgICBtX3J1bGVz
QXR0ciA9IEdyb3Vwc1J1bGVzOworICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShh
dHRyLT52YWx1ZSgpLCAicm93cyIpKQorICAgICAgICAgICAgbV9ydWxlc0F0dHIgPSBSb3dzUnVs
ZXM7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiY29scyIp
KQorICAgICAgICAgICAgbV9ydWxlc0F0dHIgPSBDb2xzUnVsZXM7CisgICAgICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiYWxsIikpCisgICAgICAgICAgICBtX3J1bGVz
QXR0ciA9IEFsbFJ1bGVzOworICAgICAgICAKKyAgICAgICAgLy8gVGhlIHByZXNlbmNlIG9mIGEg
dmFsaWQgcnVsZXMgYXR0cmlidXRlIGNhdXNlcyBib3JkZXIgY29sbGFwc2luZyB0byBiZSBlbmFi
bGVkLgorICAgICAgICBpZiAobV9ydWxlc0F0dHIgIT0gVW5zZXRSdWxlcykKKyAgICAgICAgICAg
IGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9DT0xMQVBTRSwgQ1NTX1ZBTF9D
T0xMQVBTRSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gY2VsbHNwYWNpbmdBdHRy
KSB7CiAgICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBh
ZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfQk9SREVSX1NQQUNJTkcsIGF0dHItPnZhbHVlKCkp
OwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGNlbGxwYWRkaW5nQXR0cikgewogICAg
ICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgcGFkZGluZyA9
IG1heCgwLCBhdHRyLT52YWx1ZSgpLnRvSW50KCkpOworICAgICAgICAgICAgbV9wYWRkaW5nID0g
bWF4KDAsIGF0dHItPnZhbHVlKCkudG9JbnQoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHBhZGRpbmcgPSAxOworICAgICAgICAgICAgbV9wYWRkaW5nID0gMTsKICAgICAgICAgaWYgKHJl
bmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNUYWJsZSgpKSB7Ci0gICAgICAgICAgICBzdGF0aWNf
Y2FzdDxSZW5kZXJUYWJsZSo+KHJlbmRlcmVyKCkpLT5zZXRDZWxsUGFkZGluZyhwYWRkaW5nKTsK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlKj4ocmVuZGVyZXIoKSktPnNldENl
bGxQYWRkaW5nKG1fcGFkZGluZyk7CiAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyKCktPm5lZWRz
TGF5b3V0KCkpCiAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXQodHJ1
ZSk7CiAgICAgICAgIH0KQEAgLTQ0MCw5ICs0OTAsMTAgQEAKIAogQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qIEhUTUxUYWJsZUVsZW1lbnQ6OmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2wo
KQogewotICAgIGlmIChtX25vQm9yZGVyKQorICAgIGlmICgoIW1fYm9yZGVyQXR0ciAmJiAhbV9i
b3JkZXJDb2xvckF0dHIpIHx8IG1fZnJhbWVBdHRyKQogICAgICAgICByZXR1cm4gMDsKLSAgICBN
YXBwZWRBdHRyaWJ1dGUgYXR0cih0YWJsZWJvcmRlckF0dHIsIG1fc29saWQgPyAic29saWQiIDog
Im91dHNldCIpOworICAgICAgICAKKyAgICBNYXBwZWRBdHRyaWJ1dGUgYXR0cih0YWJsZWJvcmRl
ckF0dHIsIG1fYm9yZGVyQ29sb3JBdHRyID8gInNvbGlkIiA6ICJvdXRzZXQiKTsKICAgICBDU1NN
YXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbiogZGVjbCA9IGdldE1hcHBlZEF0dHJpYnV0ZURlY2wo
ZVBlcnNpc3RlbnQsICZhdHRyKTsKICAgICBpZiAoIWRlY2wpIHsKICAgICAgICAgZGVjbCA9IG5l
dyBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbigwKTsKQEAgLTQ1Miw3ICs1MDMsNyBAQAog
ICAgICAgICAKICAgICAgICAgZGVjbC0+cmVmKCk7IC8vIFRoaXMgc2luZ2xlIHJlZiBwaW5zIHVz
IGluIHRoZSB0YWJsZSB1bnRpbCB0aGUgZG9jdW1lbnQgZGllcy4KIAotICAgICAgICBpbnQgdiA9
IG1fc29saWQgPyBDU1NfVkFMX1NPTElEIDogQ1NTX1ZBTF9PVVRTRVQ7CisgICAgICAgIGludCB2
ID0gbV9ib3JkZXJDb2xvckF0dHIgPyBDU1NfVkFMX1NPTElEIDogQ1NTX1ZBTF9PVVRTRVQ7CiAg
ICAgICAgIGRlY2wtPnNldFByb3BlcnR5KENTU19QUk9QX0JPUkRFUl9UT1BfU1RZTEUsIHYsIGZh
bHNlKTsKICAgICAgICAgZGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9SREVSX0JPVFRPTV9T
VFlMRSwgdiwgZmFsc2UpOwogICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9CT1JE
RVJfTEVGVF9TVFlMRSwgdiwgZmFsc2UpOwpAQCAtNDY4LDcgKzUxOSwxMCBAQAogCiBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiogSFRNTFRhYmxlRWxlbWVudDo6Z2V0U2hhcmVkQ2VsbERlY2wo
KQogewotICAgIE1hcHBlZEF0dHJpYnV0ZSBhdHRyKGNlbGxib3JkZXJBdHRyLCBtX25vQm9yZGVy
ID8gIm5vbmUiIDogKG1fc29saWQgPyAic29saWQiIDogImluc2V0IikpOworICAgIE1hcHBlZEF0
dHJpYnV0ZSBhdHRyKGNlbGxib3JkZXJBdHRyLCBtX3J1bGVzQXR0ciA9PSBBbGxSdWxlcyA/ICJz
b2xpZC1hbGwiIDogCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICht
X3J1bGVzQXR0ciA9PSBDb2xzUnVsZXMgPyAic29saWQnY29scyIgOiAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1fcnVsZXNBdHRyID09IFJvd3NSdWxlcyA/ICJz
b2xpZC1yb3dzIiA6ICghbV9ib3JkZXJBdHRyID8gIm5vbmUiIDogKG1fYm9yZGVyQ29sb3JBdHRy
ID8gInNvbGlkIiA6ICJpbnNldCIpKSkpKTsKKwogICAgIENTU01hcHBlZEF0dHJpYnV0ZURlY2xh
cmF0aW9uKiBkZWNsID0gZ2V0TWFwcGVkQXR0cmlidXRlRGVjbChlUGVyc2lzdGVudCwgJmF0dHIp
OwogICAgIGlmICghZGVjbCkgewogICAgICAgICBkZWNsID0gbmV3IENTU01hcHBlZEF0dHJpYnV0
ZURlY2xhcmF0aW9uKDApOwpAQCAtNDc2LDE5ICs1MzAsMzEgQEAKICAgICAgICAgZGVjbC0+c2V0
Tm9kZSh0aGlzKTsKICAgICAgICAgZGVjbC0+c2V0U3RyaWN0UGFyc2luZyhmYWxzZSk7IC8vIE1h
cHBlZCBhdHRyaWJ1dGVzIGFyZSBqdXN0IGFsd2F5cyBxdWlya3kuCiAgICAgICAgIAotICAgICAg
ICBkZWNsLT5yZWYoKTsgLy8gVGhpcyBzaW5nbGUgcmVmIHBpbnMgdXMgaW4gdGhlIHRhYmxlIHVu
dGlsIHRoZSB0YWJsZSBkaWVzLgorICAgICAgICBkZWNsLT5yZWYoKTsgLy8gVGhpcyBzaW5nbGUg
cmVmIHBpbnMgdXMgaW4gdGhlIHRhYmxlIHVudGlsIHRoZSBkb2N1bWVudCBkaWVzLgogICAgICAg
ICAKLSAgICAgICAgaWYgKG1fbm9Cb3JkZXIpCi0gICAgICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0
eShDU1NfUFJPUF9CT1JERVJfV0lEVEgsICIwIiwgZmFsc2UpOwotICAgICAgICBlbHNlIHsKKyAg
ICAgICAgaWYgKG1fcnVsZXNBdHRyID09IENvbHNSdWxlcykgeworICAgICAgICAgICAgZGVjbC0+
c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9SREVSX0xFRlRfV0lEVEgsIENTU19WQUxfVEhJTiwgZmFs
c2UpOworICAgICAgICAgICAgZGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9SREVSX1JJR0hU
X1dJRFRILCBDU1NfVkFMX1RISU4sIGZhbHNlKTsKKyAgICAgICAgICAgIGRlY2wtPnNldFByb3Bl
cnR5KENTU19QUk9QX0JPUkRFUl9MRUZUX1NUWUxFLCBDU1NfVkFMX1NPTElELCBmYWxzZSk7Cisg
ICAgICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9CT1JERVJfUklHSFRfU1RZTEUs
IENTU19WQUxfU09MSUQsIGZhbHNlKTsKKyAgICAgICAgICAgIGRlY2wtPnNldFByb3BlcnR5KENT
U19QUk9QX0JPUkRFUl9DT0xPUiwgImluaGVyaXQiLCBmYWxzZSk7CisgICAgICAgIH0gZWxzZSBp
ZiAobV9ydWxlc0F0dHIgPT0gUm93c1J1bGVzKSB7CisgICAgICAgICAgICBkZWNsLT5zZXRQcm9w
ZXJ0eShDU1NfUFJPUF9CT1JERVJfVE9QX1dJRFRILCBDU1NfVkFMX1RISU4sIGZhbHNlKTsKKyAg
ICAgICAgICAgIGRlY2wtPnNldFByb3BlcnR5KENTU19QUk9QX0JPUkRFUl9CT1RUT01fV0lEVEgs
IENTU19WQUxfVEhJTiwgZmFsc2UpOworICAgICAgICAgICAgZGVjbC0+c2V0UHJvcGVydHkoQ1NT
X1BST1BfQk9SREVSX1RPUF9TVFlMRSwgQ1NTX1ZBTF9TT0xJRCwgZmFsc2UpOworICAgICAgICAg
ICAgZGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9SREVSX0JPVFRPTV9TVFlMRSwgQ1NTX1ZB
TF9TT0xJRCwgZmFsc2UpOworICAgICAgICAgICAgZGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1Bf
Qk9SREVSX0NPTE9SLCAiaW5oZXJpdCIsIGZhbHNlKTsKKyAgICAgICAgfSBlbHNlIGlmIChtX2Jv
cmRlckF0dHIgfHwgbV9ydWxlc0F0dHIgPT0gQWxsUnVsZXMpIHsKICAgICAgICAgICAgIGRlY2wt
PnNldFByb3BlcnR5KENTU19QUk9QX0JPUkRFUl9XSURUSCwgIjFweCIsIGZhbHNlKTsKLSAgICAg
ICAgICAgIGludCB2ID0gbV9zb2xpZCA/IENTU19WQUxfU09MSUQgOiBDU1NfVkFMX0lOU0VUOwor
ICAgICAgICAgICAgIGludCB2ID0gKG1fYm9yZGVyQ29sb3JBdHRyIHx8IG1fcnVsZXNBdHRyID09
IEFsbFJ1bGVzKSA/IENTU19WQUxfU09MSUQgOiBDU1NfVkFMX0lOU0VUOwogICAgICAgICAgICAg
ZGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9SREVSX1RPUF9TVFlMRSwgdiwgZmFsc2UpOwog
ICAgICAgICAgICAgZGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9SREVSX0JPVFRPTV9TVFlM
RSwgdiwgZmFsc2UpOwogICAgICAgICAgICAgZGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9S
REVSX0xFRlRfU1RZTEUsIHYsIGZhbHNlKTsKICAgICAgICAgICAgIGRlY2wtPnNldFByb3BlcnR5
KENTU19QUk9QX0JPUkRFUl9SSUdIVF9TVFlMRSwgdiwgZmFsc2UpOwogICAgICAgICAgICAgZGVj
bC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9SREVSX0NPTE9SLCAiaW5oZXJpdCIsIGZhbHNlKTsK
ICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0eShD
U1NfUFJPUF9CT1JERVJfV0lEVEgsICIwIiwgZmFsc2UpOwogCiAgICAgICAgIHNldE1hcHBlZEF0
dHJpYnV0ZURlY2woZVBlcnNpc3RlbnQsICZhdHRyLCBkZWNsKTsKICAgICAgICAgZGVjbC0+c2V0
UGFyZW50KDApOwpAQCAtNDk4LDEyICs1NjQsNzAgQEAKICAgICByZXR1cm4gZGVjbDsKIH0KIAor
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIEhUTUxUYWJsZUVsZW1lbnQ6OmdldFNoYXJlZFJv
d0dyb3VwRGVjbCgpCit7CisgICAgaWYgKG1fcnVsZXNBdHRyICE9IEdyb3Vwc1J1bGVzKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIE1hcHBlZEF0dHJpYnV0ZSBhdHRyKHJ1bGVzQXR0ciwgInJv
d2dyb3VwcyIpOworICAgIENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKiBkZWNsID0gZ2V0
TWFwcGVkQXR0cmlidXRlRGVjbChlUGVyc2lzdGVudCwgJmF0dHIpOworICAgIGlmICghZGVjbCkg
eworICAgICAgICBkZWNsID0gbmV3IENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKDApOwor
ICAgICAgICBkZWNsLT5zZXRQYXJlbnQoZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCkpOworICAg
ICAgICBkZWNsLT5zZXROb2RlKHRoaXMpOworICAgICAgICBkZWNsLT5zZXRTdHJpY3RQYXJzaW5n
KGZhbHNlKTsgLy8gTWFwcGVkIGF0dHJpYnV0ZXMgYXJlIGp1c3QgYWx3YXlzIHF1aXJreS4KKyAg
ICAgICAgCisgICAgICAgIGRlY2wtPnJlZigpOyAvLyBUaGlzIHNpbmdsZSByZWYgcGlucyB1cyBp
biB0aGUgdGFibGUgdW50aWwgdGhlIGRvY3VtZW50IGRpZXMuCisgICAgICAgIAorICAgICAgICBk
ZWNsLT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9CT1JERVJfVE9QX1dJRFRILCBDU1NfVkFMX1RISU4s
IGZhbHNlKTsKKyAgICAgICAgZGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9SREVSX0JPVFRP
TV9XSURUSCwgQ1NTX1ZBTF9USElOLCBmYWxzZSk7CisgICAgICAgIGRlY2wtPnNldFByb3BlcnR5
KENTU19QUk9QX0JPUkRFUl9UT1BfU1RZTEUsIENTU19WQUxfU09MSUQsIGZhbHNlKTsKKyAgICAg
ICAgZGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9SREVSX0JPVFRPTV9TVFlMRSwgQ1NTX1ZB
TF9TT0xJRCwgZmFsc2UpOworICAgICAgIAorICAgICAgICBzZXRNYXBwZWRBdHRyaWJ1dGVEZWNs
KGVQZXJzaXN0ZW50LCAmYXR0ciwgZGVjbCk7CisgICAgICAgIGRlY2wtPnNldFBhcmVudCgwKTsK
KyAgICAgICAgZGVjbC0+c2V0Tm9kZSgwKTsKKyAgICAgICAgZGVjbC0+c2V0TWFwcGVkU3RhdGUo
ZVBlcnNpc3RlbnQsIGF0dHIubmFtZSgpLCBhdHRyLnZhbHVlKCkpOworICAgIH0KKworICAgIHJl
dHVybiBkZWNsOworfQorCitDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogSFRNTFRhYmxlRWxl
bWVudDo6Z2V0U2hhcmVkQ29sR3JvdXBEZWNsKCkKK3sKKyAgICBpZiAobV9ydWxlc0F0dHIgIT0g
R3JvdXBzUnVsZXMpCisgICAgICAgIHJldHVybiAwOworCisgICAgTWFwcGVkQXR0cmlidXRlIGF0
dHIocnVsZXNBdHRyLCAiY29sZ3JvdXBzIik7CisgICAgQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFy
YXRpb24qIGRlY2wgPSBnZXRNYXBwZWRBdHRyaWJ1dGVEZWNsKGVQZXJzaXN0ZW50LCAmYXR0cik7
CisgICAgaWYgKCFkZWNsKSB7CisgICAgICAgIGRlY2wgPSBuZXcgQ1NTTWFwcGVkQXR0cmlidXRl
RGVjbGFyYXRpb24oMCk7CisgICAgICAgIGRlY2wtPnNldFBhcmVudChkb2N1bWVudCgpLT5lbGVt
ZW50U2hlZXQoKSk7CisgICAgICAgIGRlY2wtPnNldE5vZGUodGhpcyk7CisgICAgICAgIGRlY2wt
PnNldFN0cmljdFBhcnNpbmcoZmFsc2UpOyAvLyBNYXBwZWQgYXR0cmlidXRlcyBhcmUganVzdCBh
bHdheXMgcXVpcmt5LgorICAgICAgICAKKyAgICAgICAgZGVjbC0+cmVmKCk7IC8vIFRoaXMgc2lu
Z2xlIHJlZiBwaW5zIHVzIGluIHRoZSB0YWJsZSB1bnRpbCB0aGUgZG9jdW1lbnQgZGllcy4KKyAg
ICAgICAgCisgICAgICAgIGRlY2wtPnNldFByb3BlcnR5KENTU19QUk9QX0JPUkRFUl9MRUZUX1dJ
RFRILCBDU1NfVkFMX1RISU4sIGZhbHNlKTsKKyAgICAgICAgZGVjbC0+c2V0UHJvcGVydHkoQ1NT
X1BST1BfQk9SREVSX1JJR0hUX1dJRFRILCBDU1NfVkFMX1RISU4sIGZhbHNlKTsKKyAgICAgICAg
ZGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9SREVSX0xFRlRfU1RZTEUsIENTU19WQUxfU09M
SUQsIGZhbHNlKTsKKyAgICAgICAgZGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9SREVSX1JJ
R0hUX1NUWUxFLCBDU1NfVkFMX1NPTElELCBmYWxzZSk7CisgICAgICAgCisgICAgICAgIHNldE1h
cHBlZEF0dHJpYnV0ZURlY2woZVBlcnNpc3RlbnQsICZhdHRyLCBkZWNsKTsKKyAgICAgICAgZGVj
bC0+c2V0UGFyZW50KDApOworICAgICAgICBkZWNsLT5zZXROb2RlKDApOworICAgICAgICBkZWNs
LT5zZXRNYXBwZWRTdGF0ZShlUGVyc2lzdGVudCwgYXR0ci5uYW1lKCksIGF0dHIudmFsdWUoKSk7
CisgICAgfQorCisgICAgcmV0dXJuIGRlY2w7Cit9CisKIHZvaWQgSFRNTFRhYmxlRWxlbWVudDo6
YXR0YWNoKCkKIHsKICAgICBhc3NlcnQoIW1fYXR0YWNoZWQpOwogICAgIEhUTUxFbGVtZW50Ojph
dHRhY2goKTsKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1RhYmxlKCkpCi0g
ICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlKj4ocmVuZGVyZXIoKSktPnNldENlbGxQYWRk
aW5nKHBhZGRpbmcpOworICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZSo+KHJlbmRlcmVy
KCkpLT5zZXRDZWxsUGFkZGluZyhtX3BhZGRpbmcpOwogfQogCiBib29sIEhUTUxUYWJsZUVsZW1l
bnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSAqYXR0cikgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10593</attachid>
            <date>2006-09-16 16:41:56 -0700</date>
            <delta_ts>2006-09-16 22:15:56 -0700</delta_ts>
            <desc>Address some of Eric&apos;s concerns</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>31306</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IGh0bWwvSFRNTFRhYmxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTFRh
YmxlRWxlbWVudC5oCShyZXZpc2lvbiAxNjM0MSkKKysrIGh0bWwvSFRNTFRhYmxlRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMyArNjYsMTMgQEAKICAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDk7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQo
Y29uc3QgTm9kZSopOwogCi0gICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIGNhcHRpb24oKSBj
b25zdCB7IHJldHVybiB0Q2FwdGlvbjsgfQorICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBj
YXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jYXB0aW9uOyB9CiAgICAgTm9kZSogc2V0Q2FwdGlv
bihIVE1MVGFibGVDYXB0aW9uRWxlbWVudCopOwogCi0gICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnQqIHRIZWFkKCkgY29uc3QgeyByZXR1cm4gaGVhZDsgfQorICAgIEhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50KiB0SGVhZCgpIGNvbnN0IHsgcmV0dXJuIG1faGVhZDsgfQogICAgIE5vZGUqIHNldFRI
ZWFkKEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Kik7CiAKLSAgICBIVE1MVGFibGVTZWN0aW9uRWxl
bWVudCogdEZvb3QoKSBjb25zdCB7IHJldHVybiBmb290OyB9CisgICAgSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnQqIHRGb290KCkgY29uc3QgeyByZXR1cm4gbV9mb290OyB9CiAgICAgTm9kZSogc2V0
VEZvb3QoSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqKTsKIAogICAgIE5vZGUqIHNldFRCb2R5KEhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50Kik7CkBAIC0xMjMsMjQgKzEyMywzMiBAQAogICAgIHZpcnR1
YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBNYXBwZWRBdHRyaWJ1dGVF
bnRyeSYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUqKTsKIAotICAgIC8vIFVzZWQgdG8gb2J0YWluIGVpdGhlciBhIHNvbGlkIG9y
IG91dHNldCBib3JkZXIgZGVjbC4KKyAgICAvLyBVc2VkIHRvIG9idGFpbiBlaXRoZXIgYSBzb2xp
ZCBvciBvdXRzZXQgYm9yZGVyIGRlY2wgYW5kIHRvIGRlYWwgd2l0aCB0aGUgZnJhbWUKKyAgICAv
LyBhbmQgcnVsZXMgYXR0cmlidXRlcy4KICAgICB2aXJ0dWFsIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsKCk7CiAgICAgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24qIGdldFNoYXJlZENlbGxEZWNsKCk7CisgICAgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qIGdldFNoYXJlZFJvd0dyb3VwRGVjbCgpOworICAgIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKiBnZXRTaGFyZWRDb2xHcm91cERlY2woKTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBhdHRhY2goKTsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmli
dXRlKikgY29uc3Q7CiAKKyAgICBlbnVtIFRhYmxlUnVsZXMgeyBVbnNldFJ1bGVzLCBOb25lUnVs
ZXMsIEdyb3Vwc1J1bGVzLCBSb3dzUnVsZXMsIENvbHNSdWxlcywgQWxsUnVsZXMgfTsKKwogcHJv
dGVjdGVkOgotICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBoZWFkOwotICAgIEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50KiBmb290OwotICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBmaXJz
dEJvZHk7Ci0gICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIHRDYXB0aW9uOworICAgIEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50KiBtX2hlYWQ7CisgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQq
IG1fZm9vdDsKKyAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudCogbV9maXJzdEJvZHk7CisgICAg
SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIG1fY2FwdGlvbjsKIAotICAgIGJvb2wgbV9ub0JvcmRl
ciAgICAgOiAxOwotICAgIGJvb2wgbV9zb2xpZCAgICAgICAgOiAxOwotICAgIC8vIDE0IGJpdHMg
dW51c2VkCi0gICAgdW5zaWduZWQgc2hvcnQgcGFkZGluZzsKKyAgICBib29sIG1fYm9yZGVyQXR0
cjsgICAgICAgICAgLy8gU2V0cyBhIHByZWNpc2UgYm9yZGVyIHdpZHRoIGFuZCBjcmVhdGVzIGFu
IG91dHNldCBib3JkZXIgZm9yIHRoZSB0YWJsZSBhbmQgZm9yIGl0cyBjZWxscy4KKyAgICBib29s
IG1fYm9yZGVyQ29sb3JBdHRyOyAgICAgLy8gT3ZlcnJpZGVzIHRoZSBvdXRzZXQgYm9yZGVyIGFu
ZCBtYWtlcyBpdCBzb2xpZCBmb3IgdGhlIHRhYmxlIGFuZCBjZWxscyBpbnN0ZWFkLgorICAgIGJv
b2wgbV9mcmFtZUF0dHI7ICAgICAgICAgICAvLyBJbXBsaWVzIGEgdGhpbiBib3JkZXIgd2lkdGgg
aWYgbm8gYm9yZGVyIGlzIHNldCBhbmQgdGhlbiBhIGNlcnRhaW4gc2V0IG9mIHNvbGlkL2hpZGRl
biBib3JkZXJzIGJhc2VkIG9mZiB0aGUgdmFsdWUuCisgICAgVGFibGVSdWxlcyBtX3J1bGVzQXR0
cjsgICAgIC8vIEltcGxpZXMgYSB0aGluIGJvcmRlciB3aWR0aCwgYSBjb2xsYXBzaW5nIGJvcmRl
ciBtb2RlbCwgYW5kIGFsbCBib3JkZXJzIG9uIHRoZSB0YWJsZSBiZWNvbWluZyBzZXQgdG8gaGlk
ZGVuIChpZiBmcmFtZS9ib3JkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
YXJlIHByZXNlbnQsIHRvIG5vbmUgb3RoZXJ3aXNlKS4KKyAgIAorICAgIHVuc2lnbmVkIHNob3J0
IG1fcGFkZGluZzsKICAgICBmcmllbmQgY2xhc3MgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ7CiB9Owog
CkluZGV4OiBodG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRt
bC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5oCShyZXZpc2lvbiAxNjM0MSkKKysrIGh0bWwvSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsOCBAQAog
ICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gODsgfQogICAgIHZp
cnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKik7CiAgICAgdmlydHVhbCBDb250YWluZXJO
b2RlKiBhZGRDaGlsZChQYXNzUmVmUHRyPE5vZGU+KTsKLSAgICAKKyAgICB2aXJ0dWFsIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsKCk7CisK
ICAgICBIVE1MRWxlbWVudCogaW5zZXJ0Um93KGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIHZvaWQgZGVsZXRlUm93KGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwogCkluZGV4OiBo
dG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxUYWJsZUNv
bEVsZW1lbnQuaAkocmV2aXNpb24gMTYzNDEpCisrKyBodG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTIgKzQyLDEyIEBACiAgICAgdmlydHVhbCBIVE1MVGFn
U3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgdGFnUHJp
b3JpdHkoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSopOwot
ICAgIHZvaWQgc2V0VGFibGUoSFRNTFRhYmxlRWxlbWVudCogdCkgeyB0YWJsZSA9IHQ7IH0KIAog
ICAgIC8vIG92ZXJyaWRlcwogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLQorICAgIHZpcnR1YWwg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2wo
KTsKKyAgIAogICAgIGludCBzcGFuKCkgY29uc3QgeyByZXR1cm4gX3NwYW47IH0KIAogICAgIFN0
cmluZyBhbGlnbigpIGNvbnN0OwpAQCAtNjksNyArNjksNiBAQAogCiBwcm90ZWN0ZWQ6CiAgICAg
aW50IF9zcGFuOwotICAgIEhUTUxUYWJsZUVsZW1lbnQgKnRhYmxlOwogfTsKIAogfSAvL25hbWVz
cGFjZQpJbmRleDogaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MzQxKQorKysg
aHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDcgQEAKICNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgogI2luY2x1ZGUgIkhUTUxUYWJsZVJvd0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVGFi
bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNjIsNiArNjMsMTYgQEAKICAgICByZXR1cm4gSFRNTFRhYmxlUGFydEVsZW1lbnQ6OmFk
ZENoaWxkKGNoaWxkKTsKIH0KIAorLy8gdXNlZCBieSB0YWJsZSByb3cgZ3JvdXBzIHRvIHNoYXJl
IHN0eWxlIGRlY2xzIGNyZWF0ZWQgYnkgdGhlIGVuY2xvc2luZyB0YWJsZS4KK0NTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6YWRkaXRpb25hbEF0dHJp
YnV0ZVN0eWxlRGVjbCgpCit7CisgICAgTm9kZSogcCA9IHBhcmVudE5vZGUoKTsKKyAgICB3aGls
ZSAocCAmJiAhcC0+aGFzVGFnTmFtZSh0YWJsZVRhZykpCisgICAgICAgIHAgPSBwLT5wYXJlbnRO
b2RlKCk7CisKKyAgICByZXR1cm4gcCA/ICBzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50Kj4o
cCktPmdldFNoYXJlZFJvd0dyb3VwRGVjbCgpIDogMDsKK30KKwogLy8gdGhlc2UgZnVuY3Rpb25z
IGFyZSByYXRoZXIgc2xvdywgc2luY2Ugd2UgbmVlZCB0byBnZXQgdGhlIHJvdyBhdAogLy8gdGhl
IGluZGV4Li4uIGJ1dCB0aGV5IGFyZW4ndCB1c2VkIGR1cmluZyB1c3VhbCBIVE1MIHBhcnNpbmcg
YW55d2F5CiBIVE1MRWxlbWVudCogSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6Omluc2VydFJvdyhp
bnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQpJbmRleDogaHRtbC9IVE1MVGFibGVSb3dFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmgJKHJldmlzaW9u
IDE2MzQxKQorKysgaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDcgKzQxLDcgQEAKICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0
dXJuIDc7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSopOwogICAgIHZp
cnR1YWwgQ29udGFpbmVyTm9kZSogYWRkQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPik7Ci0gICAgCisK
ICAgICBpbnQgcm93SW5kZXgoKSBjb25zdDsKICAgICBpbnQgc2VjdGlvblJvd0luZGV4KCkgY29u
c3Q7CiAKSW5kZXg6IGh0bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
aHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmNwcAkocmV2aXNpb24gMTYzNDEpCisrKyBodG1sL0hU
TUxUYWJsZUNvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAj
aW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRhYmxlQ29sLmgiCisjaW5jbHVkZSAiSFRNTFRhYmxlRWxlbWVudC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc4LDYgKzc5LDE1IEBACiAgICAgICAgIEhUTUxU
YWJsZVBhcnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KIAorLy8gdXNl
ZCBieSB0YWJsZSBjb2x1bW5zIGFuZCBjb2x1bW4gZ3JvdXBzIHRvIHNoYXJlIHN0eWxlIGRlY2xz
IGNyZWF0ZWQgYnkgdGhlIGVuY2xvc2luZyB0YWJsZS4KK0NTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiBIVE1MVGFibGVDb2xFbGVtZW50OjphZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsKCkK
K3sKKyAgICBOb2RlKiBwID0gcGFyZW50Tm9kZSgpOworICAgIHdoaWxlIChwICYmICFwLT5oYXNU
YWdOYW1lKHRhYmxlVGFnKSkKKyAgICAgICAgcCA9IHAtPnBhcmVudE5vZGUoKTsKKyAgICByZXR1
cm4gaGFzTG9jYWxOYW1lKGNvbGdyb3VwVGFnKSAmJiBwID8gc3RhdGljX2Nhc3Q8SFRNTFRhYmxl
RWxlbWVudCo+KHApLT5nZXRTaGFyZWRDb2xHcm91cERlY2woKSA6IDA7Cit9CisKIFN0cmluZyBI
VE1MVGFibGVDb2xFbGVtZW50OjphbGlnbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJp
YnV0ZShhbGlnbkF0dHIpOwpJbmRleDogaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MzQx
KQorKysgaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
NSwxMyArMTE1LDcgQEAKICAgICBOb2RlKiBwID0gcGFyZW50Tm9kZSgpOwogICAgIHdoaWxlIChw
ICYmICFwLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkKICAgICAgICAgcCA9IHAtPnBhcmVudE5vZGUo
KTsKLQotICAgIGlmIChwKSB7Ci0gICAgICAgIEhUTUxUYWJsZUVsZW1lbnQqIHRhYmxlID0gc3Rh
dGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudCo+KHApOwotICAgICAgICByZXR1cm4gdGFibGUtPmdl
dFNoYXJlZENlbGxEZWNsKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHAg
PyBzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50Kj4ocCktPmdldFNoYXJlZENlbGxEZWNsKCkg
OiAwOwogfQogCiBib29sIEhUTUxUYWJsZUNlbGxFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRy
aWJ1dGUgKmF0dHIpIGNvbnN0CkluZGV4OiBodG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGh0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MzQxKQorKysg
aHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMjAgKzQ0LDIy
IEBACiAKIEhUTUxUYWJsZUVsZW1lbnQ6OkhUTUxUYWJsZUVsZW1lbnQoRG9jdW1lbnQgKmRvYykK
ICAgICA6IEhUTUxFbGVtZW50KHRhYmxlVGFnLCBkb2MpCi0gICAgLCBoZWFkKDApCi0gICAgLCBm
b290KDApCi0gICAgLCBmaXJzdEJvZHkoMCkKLSAgICAsIHRDYXB0aW9uKDApCi0gICAgLCBtX25v
Qm9yZGVyKHRydWUpCi0gICAgLCBtX3NvbGlkKGZhbHNlKQotICAgICwgcGFkZGluZygxKQorICAg
ICwgbV9oZWFkKDApCisgICAgLCBtX2Zvb3QoMCkKKyAgICAsIG1fZmlyc3RCb2R5KDApCisgICAg
LCBtX2NhcHRpb24oMCkKKyAgICAsIG1fYm9yZGVyQXR0cihmYWxzZSkKKyAgICAsIG1fYm9yZGVy
Q29sb3JBdHRyKGZhbHNlKQorICAgICwgbV9mcmFtZUF0dHIoZmFsc2UpCisgICAgLCBtX3J1bGVz
QXR0cihVbnNldFJ1bGVzKQorICAgICwgbV9wYWRkaW5nKDEpCiB7CiB9CiAKIEhUTUxUYWJsZUVs
ZW1lbnQ6On5IVE1MVGFibGVFbGVtZW50KCkKIHsKLSAgICBpZiAoZmlyc3RCb2R5KQotICAgICAg
ICBmaXJzdEJvZHktPmRlcmVmKCk7CisgICAgaWYgKG1fZmlyc3RCb2R5KQorICAgICAgICBtX2Zp
cnN0Qm9keS0+ZGVyZWYoKTsKIH0KIAogYm9vbCBIVE1MVGFibGVFbGVtZW50OjpjaGVja0RURChj
b25zdCBOb2RlKiBuZXdDaGlsZCkKQEAgLTcyLDQwICs3NCw0MCBAQAogTm9kZSogSFRNTFRhYmxl
RWxlbWVudDo6c2V0Q2FwdGlvbihIVE1MVGFibGVDYXB0aW9uRWxlbWVudCogYykKIHsKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpZiAoTm9kZSogb2MgPSB0Q2FwdGlvbikKKyAgICBp
ZiAoTm9kZSogb2MgPSBtX2NhcHRpb24pCiAgICAgICAgIHJlcGxhY2VDaGlsZChjLCBvYywgZWMp
OwogICAgIGVsc2UKICAgICAgICAgaW5zZXJ0QmVmb3JlKGMsIGZpcnN0Q2hpbGQoKSwgZWMpOwot
ICAgIHRDYXB0aW9uID0gYzsKLSAgICByZXR1cm4gdENhcHRpb247CisgICAgbV9jYXB0aW9uID0g
YzsKKyAgICByZXR1cm4gbV9jYXB0aW9uOwogfQogCiBOb2RlKiBIVE1MVGFibGVFbGVtZW50Ojpz
ZXRUSGVhZChIVE1MVGFibGVTZWN0aW9uRWxlbWVudCogcykKIHsKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICBpZiAoTm9kZSogaCA9IGhlYWQpCisgICAgaWYgKE5vZGUqIGggPSBtX2hl
YWQpCiAgICAgICAgIHJlcGxhY2VDaGlsZChzLCBoLCBlYyk7Ci0gICAgZWxzZSBpZiAoZm9vdCkK
LSAgICAgICAgaW5zZXJ0QmVmb3JlKHMsIGZvb3QsIGVjKTsKLSAgICBlbHNlIGlmIChmaXJzdEJv
ZHkpCi0gICAgICAgIGluc2VydEJlZm9yZShzLCBmaXJzdEJvZHksIGVjKTsKKyAgICBlbHNlIGlm
IChtX2Zvb3QpCisgICAgICAgIGluc2VydEJlZm9yZShzLCBtX2Zvb3QsIGVjKTsKKyAgICBlbHNl
IGlmIChtX2ZpcnN0Qm9keSkKKyAgICAgICAgaW5zZXJ0QmVmb3JlKHMsIG1fZmlyc3RCb2R5LCBl
Yyk7CiAgICAgZWxzZQogICAgICAgICBhcHBlbmRDaGlsZChzLCBlYyk7Ci0gICAgaGVhZCA9IHM7
Ci0gICAgcmV0dXJuIGhlYWQ7CisgICAgbV9oZWFkID0gczsKKyAgICByZXR1cm4gbV9oZWFkOwog
fQogCiBOb2RlKiBIVE1MVGFibGVFbGVtZW50OjpzZXRURm9vdChIVE1MVGFibGVTZWN0aW9uRWxl
bWVudCAqcykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpZiAoTm9kZSAqZiA9
IGZvb3QpCisgICAgaWYgKE5vZGUgKmYgPSBtX2Zvb3QpCiAgICAgICAgIHJlcGxhY2VDaGlsZChz
LCBmLCBlYyk7Ci0gICAgZWxzZSBpZiAoZmlyc3RCb2R5KQotICAgICAgICBpbnNlcnRCZWZvcmUo
cywgZmlyc3RCb2R5LCBlYyk7CisgICAgZWxzZSBpZiAobV9maXJzdEJvZHkpCisgICAgICAgIGlu
c2VydEJlZm9yZShzLCBtX2ZpcnN0Qm9keSwgZWMpOwogICAgIGVsc2UKICAgICAgICAgYXBwZW5k
Q2hpbGQocywgZWMpOwotICAgIGZvb3QgPSBzOwotICAgIHJldHVybiBmb290OworICAgIG1fZm9v
dCA9IHM7CisgICAgcmV0dXJuIG1fZm9vdDsKIH0KIAogTm9kZSogSFRNTFRhYmxlRWxlbWVudDo6
c2V0VEJvZHkoSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQgKnMpCkBAIC0xMTMsODUgKzExNSw4NSBA
QAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIE5vZGUqIHI7CiAgICAgcy0+cmVmKCk7
Ci0gICAgaWYgKE5vZGUgKmZiID0gZmlyc3RCb2R5KSB7CisgICAgaWYgKE5vZGUgKmZiID0gbV9m
aXJzdEJvZHkpIHsKICAgICAgICAgcmVwbGFjZUNoaWxkKHMsIGZiLCBlYyk7CiAgICAgICAgIGZi
LT5kZXJlZigpOwogICAgICAgICByID0gczsKICAgICB9IGVsc2UKICAgICAgICAgYXBwZW5kQ2hp
bGQocywgZWMpOwotICAgIGZpcnN0Qm9keSA9IHM7Ci0gICAgcmV0dXJuIGZpcnN0Qm9keTsKKyAg
ICBtX2ZpcnN0Qm9keSA9IHM7CisgICAgcmV0dXJuIG1fZmlyc3RCb2R5OwogfQogCiBIVE1MRWxl
bWVudCAqSFRNTFRhYmxlRWxlbWVudDo6Y3JlYXRlVEhlYWQoKQogewotICAgIGlmICghaGVhZCkg
eworICAgIGlmICghbV9oZWFkKSB7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
ICAgICBoZWFkID0gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KHRoZWFkVGFnLCBkb2N1bWVu
dCgpLCB0cnVlIC8qIGltcGxpY2l0ICovKTsKLSAgICAgICAgaWYgKGZvb3QpCi0gICAgICAgICAg
ICBpbnNlcnRCZWZvcmUoaGVhZCwgZm9vdCwgZWMpOwotICAgICAgICBlbHNlIGlmIChmaXJzdEJv
ZHkpCi0gICAgICAgICAgICBpbnNlcnRCZWZvcmUoaGVhZCwgZmlyc3RCb2R5LCBlYyk7CisgICAg
ICAgIG1faGVhZCA9IG5ldyBIVE1MVGFibGVTZWN0aW9uRWxlbWVudCh0aGVhZFRhZywgZG9jdW1l
bnQoKSwgdHJ1ZSAvKiBpbXBsaWNpdCAqLyk7CisgICAgICAgIGlmIChtX2Zvb3QpCisgICAgICAg
ICAgICBpbnNlcnRCZWZvcmUobV9oZWFkLCBtX2Zvb3QsIGVjKTsKKyAgICAgICAgZWxzZSBpZiAo
bV9maXJzdEJvZHkpCisgICAgICAgICAgICBpbnNlcnRCZWZvcmUobV9oZWFkLCBtX2ZpcnN0Qm9k
eSwgZWMpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcHBlbmRDaGlsZChoZWFkLCBlYyk7
CisgICAgICAgICAgICBhcHBlbmRDaGlsZChtX2hlYWQsIGVjKTsKICAgICB9Ci0gICAgcmV0dXJu
IGhlYWQ7CisgICAgcmV0dXJuIG1faGVhZDsKIH0KIAogdm9pZCBIVE1MVGFibGVFbGVtZW50Ojpk
ZWxldGVUSGVhZCgpCiB7Ci0gICAgaWYgKGhlYWQpIHsKKyAgICBpZiAobV9oZWFkKSB7CiAgICAg
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBoZWFkLT5yZWYoKTsKLSAgICAgICAg
SFRNTEVsZW1lbnQ6OnJlbW92ZUNoaWxkKGhlYWQsIGVjKTsKLSAgICAgICAgaGVhZC0+ZGVyZWYo
KTsKKyAgICAgICAgbV9oZWFkLT5yZWYoKTsKKyAgICAgICAgSFRNTEVsZW1lbnQ6OnJlbW92ZUNo
aWxkKG1faGVhZCwgZWMpOworICAgICAgICBtX2hlYWQtPmRlcmVmKCk7CiAgICAgfQotICAgIGhl
YWQgPSAwOworICAgIG1faGVhZCA9IDA7CiB9CiAKIEhUTUxFbGVtZW50ICpIVE1MVGFibGVFbGVt
ZW50OjpjcmVhdGVURm9vdCgpCiB7Ci0gICAgaWYgKCFmb290KSB7CisgICAgaWYgKCFtX2Zvb3Qp
IHsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIGZvb3QgPSBuZXcgSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQodGZvb3RUYWcsIGRvY3VtZW50KCksIHRydWUgLyppbXBsaWNp
dCAqLyk7Ci0gICAgICAgIGlmIChmaXJzdEJvZHkpCi0gICAgICAgICAgICBpbnNlcnRCZWZvcmUo
Zm9vdCwgZmlyc3RCb2R5LCBlYyk7CisgICAgICAgIG1fZm9vdCA9IG5ldyBIVE1MVGFibGVTZWN0
aW9uRWxlbWVudCh0Zm9vdFRhZywgZG9jdW1lbnQoKSwgdHJ1ZSAvKmltcGxpY2l0ICovKTsKKyAg
ICAgICAgaWYgKG1fZmlyc3RCb2R5KQorICAgICAgICAgICAgaW5zZXJ0QmVmb3JlKG1fZm9vdCwg
bV9maXJzdEJvZHksIGVjKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYXBwZW5kQ2hpbGQo
Zm9vdCwgZWMpOworICAgICAgICAgICAgYXBwZW5kQ2hpbGQobV9mb290LCBlYyk7CiAgICAgfQot
ICAgIHJldHVybiBmb290OworICAgIHJldHVybiBtX2Zvb3Q7CiB9CiAKIHZvaWQgSFRNTFRhYmxl
RWxlbWVudDo6ZGVsZXRlVEZvb3QoKQogewotICAgIGlmIChmb290KSB7CisgICAgaWYgKG1fZm9v
dCkgewogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgZm9vdC0+cmVmKCk7
Ci0gICAgICAgIEhUTUxFbGVtZW50OjpyZW1vdmVDaGlsZChmb290LCBlYyk7Ci0gICAgICAgIGZv
b3QtPmRlcmVmKCk7CisgICAgICAgIG1fZm9vdC0+cmVmKCk7CisgICAgICAgIEhUTUxFbGVtZW50
OjpyZW1vdmVDaGlsZChtX2Zvb3QsIGVjKTsKKyAgICAgICAgbV9mb290LT5kZXJlZigpOwogICAg
IH0KLSAgICBmb290ID0gMDsKKyAgICBtX2Zvb3QgPSAwOwogfQogCiBIVE1MRWxlbWVudCAqSFRN
TFRhYmxlRWxlbWVudDo6Y3JlYXRlQ2FwdGlvbigpCiB7Ci0gICAgaWYgKCF0Q2FwdGlvbikgewor
ICAgIGlmICghbV9jYXB0aW9uKSB7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
ICAgICB0Q2FwdGlvbiA9IG5ldyBIVE1MVGFibGVDYXB0aW9uRWxlbWVudChkb2N1bWVudCgpKTsK
LSAgICAgICAgaW5zZXJ0QmVmb3JlKHRDYXB0aW9uLCBmaXJzdENoaWxkKCksIGVjKTsKKyAgICAg
ICAgbV9jYXB0aW9uID0gbmV3IEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KGRvY3VtZW50KCkpOwor
ICAgICAgICBpbnNlcnRCZWZvcmUobV9jYXB0aW9uLCBmaXJzdENoaWxkKCksIGVjKTsKICAgICB9
Ci0gICAgcmV0dXJuIHRDYXB0aW9uOworICAgIHJldHVybiBtX2NhcHRpb247CiB9CiAKIHZvaWQg
SFRNTFRhYmxlRWxlbWVudDo6ZGVsZXRlQ2FwdGlvbigpCiB7Ci0gICAgaWYgKHRDYXB0aW9uKSB7
CisgICAgaWYgKG1fY2FwdGlvbikgewogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICAgICAgdENhcHRpb24tPnJlZigpOwotICAgICAgICBIVE1MRWxlbWVudDo6cmVtb3ZlQ2hpbGQo
dENhcHRpb24sIGVjKTsKLSAgICAgICAgdENhcHRpb24tPmRlcmVmKCk7CisgICAgICAgIG1fY2Fw
dGlvbi0+cmVmKCk7CisgICAgICAgIEhUTUxFbGVtZW50OjpyZW1vdmVDaGlsZChtX2NhcHRpb24s
IGVjKTsKKyAgICAgICAgbV9jYXB0aW9uLT5kZXJlZigpOwogICAgIH0KLSAgICB0Q2FwdGlvbiA9
IDA7CisgICAgbV9jYXB0aW9uID0gMDsKIH0KIAogSFRNTEVsZW1lbnQgKkhUTUxUYWJsZUVsZW1l
bnQ6Omluc2VydFJvdyhpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMjAwLDcgKzIw
Miw3IEBACiAgICAgLy8gKGNmIERPTTJUUyBIVE1MVGFibGVFbGVtZW50MzEgdGVzdCkKICAgICAv
LyAobm90ZTogdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSAiaWYgdGhlIHRhYmxlIGhhcyBubyBzZWN0
aW9ucyIsIHNpbmNlIHdlIGNhbiBoYXZlCiAgICAgLy8gPFRBQkxFPjxUUj4pCi0gICAgaWYgKCFm
aXJzdEJvZHkgJiYgIWhlYWQgJiYgIWZvb3QpCisgICAgaWYgKCFtX2ZpcnN0Qm9keSAmJiAhbV9o
ZWFkICYmICFtX2Zvb3QpCiAgICAgICAgIHNldFRCb2R5KG5ldyBIVE1MVGFibGVTZWN0aW9uRWxl
bWVudCh0Ym9keVRhZywgZG9jdW1lbnQoKSwgdHJ1ZSAvKiBpbXBsaWNpdCAqLykpOwogCiAgICAg
Ly8gSUUgdHJlYXRzIGluZGV4PS0xIGFzIGRlZmF1bHQgdmFsdWUgbWVhbmluZyAnYXBwZW5kIGFm
dGVyIGxhc3QnCkBAIC0yMTQsOCArMjE2LDcgQEAKICAgICB7CiAgICAgICAgIC8vIHRoZXJlIGNv
dWxkIGJlIDIgdGZvb3QgZWxlbWVudHMgaW4gdGhlIHRhYmxlLiBPbmx5IHRoZSBmaXJzdCBvbmUg
aXMgdGhlICJmb290IiwgdGhhdCdzIHdoeSB3ZSBoYXZlIHRoZSBtb3JlCiAgICAgICAgIC8vIGNv
bXBsaWNhdGVkIGlmIHN0YXRlbWVudCBiZWxvdy4KLSAgICAgICAgaWYgKG5vZGUgIT0gZm9vdCAm
JiAobm9kZS0+aGFzVGFnTmFtZSh0aGVhZFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZSh0Zm9vdFRh
ZykgfHwgbm9kZS0+aGFzVGFnTmFtZSh0Ym9keVRhZykpKQotICAgICAgICB7CisgICAgICAgIGlm
IChub2RlICE9IG1fZm9vdCAmJiAobm9kZS0+aGFzVGFnTmFtZSh0aGVhZFRhZykgfHwgbm9kZS0+
aGFzVGFnTmFtZSh0Zm9vdFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZSh0Ym9keVRhZykpKSB7CiAg
ICAgICAgICAgICBzZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQq
Pihub2RlKTsKICAgICAgICAgICAgIGxhc3RTZWN0aW9uID0gc2VjdGlvbjsKICAgICAgICAgICAg
IGlmICghYXBwZW5kKSB7CkBAIC0yMjgsOCArMjI5LDggQEAKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KLSAgICBpZiAoIWZvdW5kICYmIGZvb3QpCi0gICAgICAgIHNlY3Rpb24gPSBz
dGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudCo+KGZvb3QpOworICAgIGlmICghZm91
bmQgJiYgbV9mb290KQorICAgICAgICBzZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnQqPihtX2Zvb3QpOwogCiAgICAgLy8gSW5kZXggPT0gMCBtZWFucyAiaW5zZXJ0
IGJlZm9yZSBmaXJzdCByb3cgaW4gY3VycmVudCBzZWN0aW9uIgogICAgIC8vIG9yICJhcHBlbmQg
YWZ0ZXIgbGFzdCByb3ciIChpZiB0aGVyZSdzIG5vIGN1cnJlbnQgc2VjdGlvbiBhbnltb3JlKQpA
QCAtMjU1LDEzICsyNTYsMTIgQEAKICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgZm9yICg7
IG5vZGUgOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkKICAgICB7Ci0gICAgICAgIGlmIChu
b2RlICE9IGZvb3QgJiYgKG5vZGUtPmhhc1RhZ05hbWUodGhlYWRUYWcpIHx8IG5vZGUtPmhhc1Rh
Z05hbWUodGZvb3RUYWcpIHx8IAorICAgICAgICBpZiAobm9kZSAhPSBtX2Zvb3QgJiYgKG5vZGUt
Pmhhc1RhZ05hbWUodGhlYWRUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUodGZvb3RUYWcpIHx8IAog
ICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZSh0Ym9keVRhZykpKSB7CiAgICAgICAgICAgICBz
ZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqPihub2RlKTsKICAg
ICAgICAgICAgIGxhc3RTZWN0aW9uID0gc2VjdGlvbjsKICAgICAgICAgICAgIGludCByb3dzID0g
c2VjdGlvbi0+bnVtUm93cygpOwotICAgICAgICAgICAgaWYgKCFsYXN0Um93KQotICAgICAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCFsYXN0Um93KSB7CiAgICAgICAgICAgICAgICAgaWYgKHJv
d3MgPiBpbmRleCkgewogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjcxLDggKzI3MSw4IEBACiAgICAgICAgIH0KICAgICAg
ICAgc2VjdGlvbiA9IDBMOwogICAgIH0KLSAgICBpZiAoIWZvdW5kICYmIGZvb3QpCi0gICAgICAg
IHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudCo+KGZvb3QpOwor
ICAgIGlmICghZm91bmQgJiYgbV9mb290KQorICAgICAgICBzZWN0aW9uID0gc3RhdGljX2Nhc3Q8
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqPihtX2Zvb3QpOwogCiAgICAgaWYgKGxhc3RSb3cpCiAg
ICAgICAgIGxhc3RTZWN0aW9uLT5kZWxldGVSb3coLTEsIGVjKTsKQEAgLTMwMSwxNSArMzAxLDE1
IEBACiAKICAgICBDb250YWluZXJOb2RlKiBjb250YWluZXIgPSBIVE1MRWxlbWVudDo6YWRkQ2hp
bGQoY2hpbGQuZ2V0KCkpOwogICAgIGlmIChjb250YWluZXIpIHsKLSAgICAgICAgaWYgKCF0Q2Fw
dGlvbiAmJiBjaGlsZC0+aGFzVGFnTmFtZShjYXB0aW9uVGFnKSkKLSAgICAgICAgICAgIHRDYXB0
aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqPihjaGlsZC5nZXQoKSk7
Ci0gICAgICAgIGVsc2UgaWYgKCFoZWFkICYmIGNoaWxkLT5oYXNUYWdOYW1lKHRoZWFkVGFnKSkK
LSAgICAgICAgICAgIGhlYWQgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudCo+
KGNoaWxkLmdldCgpKTsKLSAgICAgICAgZWxzZSBpZiAoIWZvb3QgJiYgY2hpbGQtPmhhc1RhZ05h
bWUodGZvb3RUYWcpKQotICAgICAgICAgICAgZm9vdCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50Kj4oY2hpbGQuZ2V0KCkpOwotICAgICAgICBlbHNlIGlmICghZmlyc3RCb2R5
ICYmIGNoaWxkLT5oYXNUYWdOYW1lKHRib2R5VGFnKSkgewotICAgICAgICAgICAgZmlyc3RCb2R5
ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqPihjaGlsZC5nZXQoKSk7Ci0g
ICAgICAgICAgICBmaXJzdEJvZHktPnJlZigpOworICAgICAgICBpZiAoIW1fY2FwdGlvbiAmJiBj
aGlsZC0+aGFzVGFnTmFtZShjYXB0aW9uVGFnKSkKKyAgICAgICAgICAgIG1fY2FwdGlvbiA9IHN0
YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50Kj4oY2hpbGQuZ2V0KCkpOworICAgICAg
ICBlbHNlIGlmICghbV9oZWFkICYmIGNoaWxkLT5oYXNUYWdOYW1lKHRoZWFkVGFnKSkKKyAgICAg
ICAgICAgIG1faGVhZCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Kj4oY2hp
bGQuZ2V0KCkpOworICAgICAgICBlbHNlIGlmICghbV9mb290ICYmIGNoaWxkLT5oYXNUYWdOYW1l
KHRmb290VGFnKSkKKyAgICAgICAgICAgIG1fZm9vdCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50Kj4oY2hpbGQuZ2V0KCkpOworICAgICAgICBlbHNlIGlmICghbV9maXJzdEJv
ZHkgJiYgY2hpbGQtPmhhc1RhZ05hbWUodGJvZHlUYWcpKSB7CisgICAgICAgICAgICBtX2ZpcnN0
Qm9keSA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Kj4oY2hpbGQuZ2V0KCkp
OworICAgICAgICAgICAgbV9maXJzdEJvZHktPnJlZigpOwogICAgICAgICB9CiAgICAgfQogICAg
IHJldHVybiBjb250YWluZXI7CkBAIC0zMTksOSArMzE5LDkgQEAKIHsKICAgICBIVE1MRWxlbWVu
dDo6Y2hpbGRyZW5DaGFuZ2VkKCk7CiAgICAgCi0gICAgaWYgKGZpcnN0Qm9keSAmJiBmaXJzdEJv
ZHktPnBhcmVudE5vZGUoKSAhPSB0aGlzKSB7Ci0gICAgICAgIGZpcnN0Qm9keS0+ZGVyZWYoKTsK
LSAgICAgICAgZmlyc3RCb2R5ID0gMDsKKyAgICBpZiAobV9maXJzdEJvZHkgJiYgbV9maXJzdEJv
ZHktPnBhcmVudE5vZGUoKSAhPSB0aGlzKSB7CisgICAgICAgIG1fZmlyc3RCb2R5LT5kZXJlZigp
OworICAgICAgICBtX2ZpcnN0Qm9keSA9IDA7CiAgICAgfQogfSAKIApAQCAtMzQ4LDE2ICszNDgs
MTEgQEAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAotICAgIGlmIChhdHRyTmFt
ZSA9PSBib3JkZXJBdHRyKSB7CisgICAgaWYgKGF0dHJOYW1lID09IGJvcmRlckF0dHIgfHwgYXR0
ck5hbWUgPT0gZnJhbWVBdHRyIHx8IGF0dHJOYW1lID09IHJ1bGVzQXR0ciB8fCBhdHRyTmFtZSA9
PSBhbGlnbkF0dHIpIHsKICAgICAgICAgcmVzdWx0ID0gZVRhYmxlOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9Ci0gICAgCi0gICAgaWYgKGF0dHJOYW1lID09IGFsaWduQXR0cikgewotICAg
ICAgICByZXN1bHQgPSBlVGFibGU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IAotICAg
IAorCiAgICAgcmV0dXJuIEhUTUxFbGVtZW50OjptYXBUb0VudHJ5KGF0dHJOYW1lLCByZXN1bHQp
OwogfQogCkBAIC0zNjgsNTUgKzM2MywxMTAgQEAKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gaGVpZ2h0QXR0cikKICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX0hFSUdI
VCwgYXR0ci0+dmFsdWUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGJvcmRlckF0
dHIpICB7Ci0gICAgICAgIG1fbm9Cb3JkZXIgPSB0cnVlOworICAgICAgICBtX2JvcmRlckF0dHIg
PSB0cnVlOwogICAgICAgICBpZiAoYXR0ci0+ZGVjbCgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8
Q1NTVmFsdWU+IHZhbCA9IGF0dHItPmRlY2woKS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NfUFJP
UF9CT1JERVJfTEVGVF9XSURUSCk7CiAgICAgICAgICAgICBpZiAodmFsICYmIHZhbC0+aXNQcmlt
aXRpdmVWYWx1ZSgpKSB7CiAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1W
YWwgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC5nZXQoKSk7Ci0gICAgICAg
ICAgICAgICAgbV9ub0JvcmRlciA9ICFwcmltVmFsLT5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgICAgICBtX2JvcmRlckF0dHIgPSBwcmlt
VmFsLT5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmICghYXR0ci0+aXNOdWxsKCkpIHsKLSAgICAgICAg
ICAgIC8vICMjIyB0aGlzIG5lZWRzIG1vcmUgd29yaywgYXMgdGhlIGJvcmRlciB2YWx1ZSBpcyBu
b3Qgb25seQotICAgICAgICAgICAgLy8gICAgIHRoZSBib3JkZXIgb2YgdGhlIGJveCwgYnV0IGFs
c28gYmV0d2VlbiB0aGUgY2VsbHMKICAgICAgICAgICAgIGludCBib3JkZXIgPSAwOwogICAgICAg
ICAgICAgaWYgKGF0dHItPmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBib3JkZXIgPSAxOwog
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGJvcmRlciA9IGF0dHItPnZhbHVlKCku
dG9JbnQoKTsKLSNpZmRlZiBERUJVR19EUkFXX0JPUkRFUgotICAgICAgICAgICAgYm9yZGVyPTE7
Ci0jZW5kaWYKLSAgICAgICAgICAgIG1fbm9Cb3JkZXIgPSAhYm9yZGVyOworICAgICAgICAgICAg
bV9ib3JkZXJBdHRyID0gYm9yZGVyOwogICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENT
U19QUk9QX0JPUkRFUl9XSURUSCwgU3RyaW5nOjpudW1iZXIoYm9yZGVyKSk7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBiZ2NvbG9yQXR0cikKICAgICAgICAgYWRk
Q1NTQ29sb3IoYXR0ciwgQ1NTX1BST1BfQkFDS0dST1VORF9DT0xPUiwgYXR0ci0+dmFsdWUoKSk7
CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGJvcmRlcmNvbG9yQXR0cikgewotICAgICAg
ICBtX3NvbGlkID0gYXR0ci0+ZGVjbCgpOworICAgICAgICBtX2JvcmRlckNvbG9yQXR0ciA9IGF0
dHItPmRlY2woKTsKICAgICAgICAgaWYgKCFhdHRyLT5kZWNsKCkgJiYgIWF0dHItPmlzRW1wdHko
KSkgewogICAgICAgICAgICAgYWRkQ1NTQ29sb3IoYXR0ciwgQ1NTX1BST1BfQk9SREVSX0NPTE9S
LCBhdHRyLT52YWx1ZSgpKTsKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19Q
Uk9QX0JPUkRFUl9UT1BfU1RZTEUsIENTU19WQUxfU09MSUQpOwotICAgICAgICAgICAgYWRkQ1NT
UHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQk9SREVSX0JPVFRPTV9TVFlMRSwgQ1NTX1ZBTF9TT0xJ
RCk7Ci0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfTEVG
VF9TVFlMRSwgQ1NTX1ZBTF9TT0xJRCk7Ci0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRy
LCBDU1NfUFJPUF9CT1JERVJfUklHSFRfU1RZTEUsIENTU19WQUxfU09MSUQpOwotICAgICAgICAg
ICAgbV9zb2xpZCA9IHRydWU7CisgICAgICAgICAgICBtX2JvcmRlckNvbG9yQXR0ciA9IHRydWU7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBiYWNrZ3JvdW5kQXR0
cikgewogICAgICAgICBTdHJpbmcgdXJsID0gcGFyc2VVUkwoYXR0ci0+dmFsdWUoKSk7CiAgICAg
ICAgIGlmICghdXJsLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGFkZENTU0ltYWdlUHJvcGVydHko
YXR0ciwgQ1NTX1BST1BfQkFDS0dST1VORF9JTUFHRSwgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwo
dXJsKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gZnJhbWVBdHRyKSB7CisgICAg
ICAgIC8vIENhY2hlIHRoZSB2YWx1ZSBvZiAiZnJhbWUiIHNvIHRoYXQgdGhlIHRhYmxlIGNhbiBl
eGFtaW5lIGl0IGxhdGVyLgorICAgICAgICBtX2ZyYW1lQXR0ciA9IGZhbHNlOworICAgICAgICAK
KyAgICAgICAgLy8gV2hldGhlciBvciBub3QgdG8gaGlkZSB0aGUgdG9wL3JpZ2h0L2JvdHRvbS9s
ZWZ0IGJvcmRlcnMuCisgICAgICAgIGNvbnN0IGludCBjVG9wID0gMDsKKyAgICAgICAgY29uc3Qg
aW50IGNSaWdodCA9IDE7CisgICAgICAgIGNvbnN0IGludCBjQm90dG9tID0gMjsKKyAgICAgICAg
Y29uc3QgaW50IGNMZWZ0ID0gMzsKKyAgICAgICAgYm9vbCBib3JkZXJzWzRdID0geyBmYWxzZSwg
ZmFsc2UsIGZhbHNlLCBmYWxzZSB9OworICAgICAgICAKKyAgICAgICAgLy8gdm9pZCwgYWJvdmUs
IGJlbG93LCBoc2lkZXMsIHZzaWRlcywgbGhzLCByaHMsIGJveCwgYm9yZGVyCisgICAgICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAidm9pZCIpKQorICAgICAgICAgICAg
bV9mcmFtZUF0dHIgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShh
dHRyLT52YWx1ZSgpLCAiYWJvdmUiKSkgeworICAgICAgICAgICAgbV9mcmFtZUF0dHIgPSB0cnVl
OworICAgICAgICAgICAgYm9yZGVyc1tjVG9wXSA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImJlbG93IikpIHsKKyAgICAgICAgICAg
IG1fZnJhbWVBdHRyID0gdHJ1ZTsKKyAgICAgICAgICAgIGJvcmRlcnNbY0JvdHRvbV0gPSB0cnVl
OworICAgICAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJo
c2lkZXMiKSkgeworICAgICAgICAgICAgbV9mcmFtZUF0dHIgPSB0cnVlOworICAgICAgICAgICAg
Ym9yZGVyc1tjVG9wXSA9IGJvcmRlcnNbY0JvdHRvbV0gPSB0cnVlOworICAgICAgICB9IGVsc2Ug
aWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJ2c2lkZXMiKSkgeworICAgICAg
ICAgICAgbV9mcmFtZUF0dHIgPSB0cnVlOworICAgICAgICAgICAgYm9yZGVyc1tjTGVmdF0gPSBi
b3JkZXJzW2NSaWdodF0gPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKGF0dHItPnZhbHVlKCksICJsaHMiKSkgeworICAgICAgICAgICAgbV9mcmFtZUF0dHIgPSB0
cnVlOworICAgICAgICAgICAgYm9yZGVyc1tjTGVmdF0gPSB0cnVlOworICAgICAgICB9IGVsc2Ug
aWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJyaHMiKSkgeworICAgICAgICAg
ICAgbV9mcmFtZUF0dHIgPSB0cnVlOworICAgICAgICAgICAgYm9yZGVyc1tjUmlnaHRdID0gdHJ1
ZTsKKyAgICAgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAi
Ym94IikgfHwKKyAgICAgICAgICAgICAgICAgICBlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1
ZSgpLCAiYm9yZGVyIikpIHsKKyAgICAgICAgICAgIG1fZnJhbWVBdHRyID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGJvcmRlcnNbY1RvcF0gPSBib3JkZXJzW2NCb3R0b21dID0gYm9yZGVyc1tjTGVmdF0g
PSBib3JkZXJzW2NSaWdodF0gPSB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBOb3cgbWFwIGluIHRoZSBib3JkZXIgc3R5bGVzIG9mIHNvbGlkIGFuZCBoaWRkZW4gcmVzcGVj
dGl2ZWx5LgorICAgICAgICBpZiAobV9mcmFtZUF0dHIpIHsKKyAgICAgICAgICAgIGFkZENTU1By
b3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9UT1BfV0lEVEgsIENTU19WQUxfVEhJTik7Cisg
ICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfQk9UVE9NX1dJ
RFRILCBDU1NfVkFMX1RISU4pOworICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NT
X1BST1BfQk9SREVSX0xFRlRfV0lEVEgsIENTU19WQUxfVEhJTik7CisgICAgICAgICAgICBhZGRD
U1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfUklHSFRfV0lEVEgsIENTU19WQUxfVEhJ
Tik7CisgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfVE9Q
X1NUWUxFLCBib3JkZXJzW2NUb3BdID8gQ1NTX1ZBTF9TT0xJRCA6IENTU19WQUxfSElEREVOKTsK
KyAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9CT1RUT01f
U1RZTEUsIGJvcmRlcnNbY0JvdHRvbV0gPyBDU1NfVkFMX1NPTElEIDogQ1NTX1ZBTF9ISURERU4p
OworICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQk9SREVSX0xFRlRf
U1RZTEUsIGJvcmRlcnNbY0xlZnRdID8gQ1NTX1ZBTF9TT0xJRCA6IENTU19WQUxfSElEREVOKTsK
KyAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9T
VFlMRSwgYm9yZGVyc1tjUmlnaHRdID8gQ1NTX1ZBTF9TT0xJRCA6IENTU19WQUxfSElEREVOKTsK
KyAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHJ1bGVzQXR0cikgewor
ICAgICAgICAvLyBDYWNoZSB0aGUgdmFsdWUgb2YgInJ1bGVzIiBzbyB0aGF0IHRoZSBwaWVjZXMg
b2YgdGhlIHRhYmxlIGNhbiBleGFtaW5lIGl0IGxhdGVyLgorICAgICAgICBtX3J1bGVzQXR0ciA9
IFVuc2V0UnVsZXM7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgp
LCAibm9uZSIpKQorICAgICAgICAgICAgbV9ydWxlc0F0dHIgPSBOb25lUnVsZXM7CisgICAgICAg
IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJncm91cHMiKSkKKyAg
ICAgICAgICAgIG1fcnVsZXNBdHRyID0gR3JvdXBzUnVsZXM7CisgICAgICAgIGVsc2UgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJyb3dzIikpCisgICAgICAgICAgICBtX3J1
bGVzQXR0ciA9IFJvd3NSdWxlczsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHIt
PnZhbHVlKCksICJjb2xzIikpCisgICAgICAgICAgICBtX3J1bGVzQXR0ciA9IENvbHNSdWxlczsK
KyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJhbGwiKSkKKyAg
ICAgICAgICAgIG1fcnVsZXNBdHRyID0gQWxsUnVsZXM7CisgICAgICAgIAorICAgICAgICAvLyBU
aGUgcHJlc2VuY2Ugb2YgYSB2YWxpZCBydWxlcyBhdHRyaWJ1dGUgY2F1c2VzIGJvcmRlciBjb2xs
YXBzaW5nIHRvIGJlIGVuYWJsZWQuCisgICAgICAgIGlmIChtX3J1bGVzQXR0ciAhPSBVbnNldFJ1
bGVzKQorICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQk9SREVSX0NP
TExBUFNFLCBDU1NfVkFMX0NPTExBUFNFKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBjZWxsc3BhY2luZ0F0dHIpIHsKICAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlzRW1wdHko
KSkKICAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9CT1JERVJfU1BBQ0lO
RywgYXR0ci0+dmFsdWUoKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gY2VsbHBh
ZGRpbmdBdHRyKSB7CiAgICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBwYWRkaW5nID0gbWF4KDAsIGF0dHItPnZhbHVlKCkudG9JbnQoKSk7CisgICAgICAg
ICAgICBtX3BhZGRpbmcgPSBtYXgoMCwgYXR0ci0+dmFsdWUoKS50b0ludCgpKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgcGFkZGluZyA9IDE7CisgICAgICAgICAgICBtX3BhZGRpbmcgPSAx
OwogICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1RhYmxlKCkpIHsKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlKj4ocmVuZGVyZXIoKSktPnNldENlbGxQ
YWRkaW5nKHBhZGRpbmcpOworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGUqPihy
ZW5kZXJlcigpKS0+c2V0Q2VsbFBhZGRpbmcobV9wYWRkaW5nKTsKICAgICAgICAgICAgIGlmICgh
cmVuZGVyZXIoKS0+bmVlZHNMYXlvdXQoKSkKICAgICAgICAgICAgICAgICByZW5kZXJlcigpLT5z
ZXROZWVkc0xheW91dCh0cnVlKTsKICAgICAgICAgfQpAQCAtNDQwLDkgKzQ5MCwxMCBAQAogCiBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogSFRNTFRhYmxlRWxlbWVudDo6YWRkaXRpb25hbEF0
dHJpYnV0ZVN0eWxlRGVjbCgpCiB7Ci0gICAgaWYgKG1fbm9Cb3JkZXIpCisgICAgaWYgKCghbV9i
b3JkZXJBdHRyICYmICFtX2JvcmRlckNvbG9yQXR0cikgfHwgbV9mcmFtZUF0dHIpCiAgICAgICAg
IHJldHVybiAwOwotICAgIE1hcHBlZEF0dHJpYnV0ZSBhdHRyKHRhYmxlYm9yZGVyQXR0ciwgbV9z
b2xpZCA/ICJzb2xpZCIgOiAib3V0c2V0Iik7CisgICAgICAgIAorICAgIE1hcHBlZEF0dHJpYnV0
ZSBhdHRyKHRhYmxlYm9yZGVyQXR0ciwgbV9ib3JkZXJDb2xvckF0dHIgPyAic29saWQiIDogIm91
dHNldCIpOwogICAgIENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKiBkZWNsID0gZ2V0TWFw
cGVkQXR0cmlidXRlRGVjbChlUGVyc2lzdGVudCwgJmF0dHIpOwogICAgIGlmICghZGVjbCkgewog
ICAgICAgICBkZWNsID0gbmV3IENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKDApOwpAQCAt
NDUyLDcgKzUwMyw3IEBACiAgICAgICAgIAogICAgICAgICBkZWNsLT5yZWYoKTsgLy8gVGhpcyBz
aW5nbGUgcmVmIHBpbnMgdXMgaW4gdGhlIHRhYmxlIHVudGlsIHRoZSBkb2N1bWVudCBkaWVzLgog
Ci0gICAgICAgIGludCB2ID0gbV9zb2xpZCA/IENTU19WQUxfU09MSUQgOiBDU1NfVkFMX09VVFNF
VDsKKyAgICAgICAgaW50IHYgPSBtX2JvcmRlckNvbG9yQXR0ciA/IENTU19WQUxfU09MSUQgOiBD
U1NfVkFMX09VVFNFVDsKICAgICAgICAgZGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9SREVS
X1RPUF9TVFlMRSwgdiwgZmFsc2UpOwogICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0eShDU1NfUFJP
UF9CT1JERVJfQk9UVE9NX1NUWUxFLCB2LCBmYWxzZSk7CiAgICAgICAgIGRlY2wtPnNldFByb3Bl
cnR5KENTU19QUk9QX0JPUkRFUl9MRUZUX1NUWUxFLCB2LCBmYWxzZSk7CkBAIC00NjgsNyArNTE5
LDEwIEBACiAKIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBIVE1MVGFibGVFbGVtZW50Ojpn
ZXRTaGFyZWRDZWxsRGVjbCgpCiB7Ci0gICAgTWFwcGVkQXR0cmlidXRlIGF0dHIoY2VsbGJvcmRl
ckF0dHIsIG1fbm9Cb3JkZXIgPyAibm9uZSIgOiAobV9zb2xpZCA/ICJzb2xpZCIgOiAiaW5zZXQi
KSk7CisgICAgTWFwcGVkQXR0cmlidXRlIGF0dHIoY2VsbGJvcmRlckF0dHIsIG1fcnVsZXNBdHRy
ID09IEFsbFJ1bGVzID8gInNvbGlkLWFsbCIgOiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKG1fcnVsZXNBdHRyID09IENvbHNSdWxlcyA/ICJzb2xpZCdjb2xzIiA6
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobV9ydWxlc0F0dHIg
PT0gUm93c1J1bGVzID8gInNvbGlkLXJvd3MiIDogKCFtX2JvcmRlckF0dHIgPyAibm9uZSIgOiAo
bV9ib3JkZXJDb2xvckF0dHIgPyAic29saWQiIDogImluc2V0IikpKSkpOworCiAgICAgQ1NTTWFw
cGVkQXR0cmlidXRlRGVjbGFyYXRpb24qIGRlY2wgPSBnZXRNYXBwZWRBdHRyaWJ1dGVEZWNsKGVQ
ZXJzaXN0ZW50LCAmYXR0cik7CiAgICAgaWYgKCFkZWNsKSB7CiAgICAgICAgIGRlY2wgPSBuZXcg
Q1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24oMCk7CkBAIC00NzYsMTkgKzUzMCwzMSBAQAog
ICAgICAgICBkZWNsLT5zZXROb2RlKHRoaXMpOwogICAgICAgICBkZWNsLT5zZXRTdHJpY3RQYXJz
aW5nKGZhbHNlKTsgLy8gTWFwcGVkIGF0dHJpYnV0ZXMgYXJlIGp1c3QgYWx3YXlzIHF1aXJreS4K
ICAgICAgICAgCi0gICAgICAgIGRlY2wtPnJlZigpOyAvLyBUaGlzIHNpbmdsZSByZWYgcGlucyB1
cyBpbiB0aGUgdGFibGUgdW50aWwgdGhlIHRhYmxlIGRpZXMuCisgICAgICAgIGRlY2wtPnJlZigp
OyAvLyBUaGlzIHNpbmdsZSByZWYgcGlucyB1cyBpbiB0aGUgdGFibGUgdW50aWwgdGhlIGRvY3Vt
ZW50IGRpZXMuCiAgICAgICAgIAotICAgICAgICBpZiAobV9ub0JvcmRlcikKLSAgICAgICAgICAg
IGRlY2wtPnNldFByb3BlcnR5KENTU19QUk9QX0JPUkRFUl9XSURUSCwgIjAiLCBmYWxzZSk7Ci0g
ICAgICAgIGVsc2UgeworICAgICAgICBpZiAobV9ydWxlc0F0dHIgPT0gQ29sc1J1bGVzKSB7Cisg
ICAgICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9CT1JERVJfTEVGVF9XSURUSCwg
Q1NTX1ZBTF9USElOLCBmYWxzZSk7CisgICAgICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0eShDU1Nf
UFJPUF9CT1JERVJfUklHSFRfV0lEVEgsIENTU19WQUxfVEhJTiwgZmFsc2UpOworICAgICAgICAg
ICAgZGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9SREVSX0xFRlRfU1RZTEUsIENTU19WQUxf
U09MSUQsIGZhbHNlKTsKKyAgICAgICAgICAgIGRlY2wtPnNldFByb3BlcnR5KENTU19QUk9QX0JP
UkRFUl9SSUdIVF9TVFlMRSwgQ1NTX1ZBTF9TT0xJRCwgZmFsc2UpOworICAgICAgICAgICAgZGVj
bC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9SREVSX0NPTE9SLCAiaW5oZXJpdCIsIGZhbHNlKTsK
KyAgICAgICAgfSBlbHNlIGlmIChtX3J1bGVzQXR0ciA9PSBSb3dzUnVsZXMpIHsKKyAgICAgICAg
ICAgIGRlY2wtPnNldFByb3BlcnR5KENTU19QUk9QX0JPUkRFUl9UT1BfV0lEVEgsIENTU19WQUxf
VEhJTiwgZmFsc2UpOworICAgICAgICAgICAgZGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9S
REVSX0JPVFRPTV9XSURUSCwgQ1NTX1ZBTF9USElOLCBmYWxzZSk7CisgICAgICAgICAgICBkZWNs
LT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9CT1JERVJfVE9QX1NUWUxFLCBDU1NfVkFMX1NPTElELCBm
YWxzZSk7CisgICAgICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9CT1JERVJfQk9U
VE9NX1NUWUxFLCBDU1NfVkFMX1NPTElELCBmYWxzZSk7CisgICAgICAgICAgICBkZWNsLT5zZXRQ
cm9wZXJ0eShDU1NfUFJPUF9CT1JERVJfQ09MT1IsICJpbmhlcml0IiwgZmFsc2UpOworICAgICAg
ICB9IGVsc2UgaWYgKG1fYm9yZGVyQXR0ciB8fCBtX3J1bGVzQXR0ciA9PSBBbGxSdWxlcykgewog
ICAgICAgICAgICAgZGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9SREVSX1dJRFRILCAiMXB4
IiwgZmFsc2UpOwotICAgICAgICAgICAgaW50IHYgPSBtX3NvbGlkID8gQ1NTX1ZBTF9TT0xJRCA6
IENTU19WQUxfSU5TRVQ7CisgICAgICAgICAgICAgaW50IHYgPSAobV9ib3JkZXJDb2xvckF0dHIg
fHwgbV9ydWxlc0F0dHIgPT0gQWxsUnVsZXMpID8gQ1NTX1ZBTF9TT0xJRCA6IENTU19WQUxfSU5T
RVQ7CiAgICAgICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9CT1JERVJfVE9QX1NU
WUxFLCB2LCBmYWxzZSk7CiAgICAgICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9C
T1JERVJfQk9UVE9NX1NUWUxFLCB2LCBmYWxzZSk7CiAgICAgICAgICAgICBkZWNsLT5zZXRQcm9w
ZXJ0eShDU1NfUFJPUF9CT1JERVJfTEVGVF9TVFlMRSwgdiwgZmFsc2UpOwogICAgICAgICAgICAg
ZGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9SREVSX1JJR0hUX1NUWUxFLCB2LCBmYWxzZSk7
CiAgICAgICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9CT1JERVJfQ09MT1IsICJp
bmhlcml0IiwgZmFsc2UpOwogICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRl
Y2wtPnNldFByb3BlcnR5KENTU19QUk9QX0JPUkRFUl9XSURUSCwgIjAiLCBmYWxzZSk7CiAKICAg
ICAgICAgc2V0TWFwcGVkQXR0cmlidXRlRGVjbChlUGVyc2lzdGVudCwgJmF0dHIsIGRlY2wpOwog
ICAgICAgICBkZWNsLT5zZXRQYXJlbnQoMCk7CkBAIC00OTgsMTIgKzU2NCw3MCBAQAogICAgIHJl
dHVybiBkZWNsOwogfQogCitDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogSFRNTFRhYmxlRWxl
bWVudDo6Z2V0U2hhcmVkUm93R3JvdXBEZWNsKCkKK3sKKyAgICBpZiAobV9ydWxlc0F0dHIgIT0g
R3JvdXBzUnVsZXMpCisgICAgICAgIHJldHVybiAwOworCisgICAgTWFwcGVkQXR0cmlidXRlIGF0
dHIocnVsZXNBdHRyLCAicm93Z3JvdXBzIik7CisgICAgQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFy
YXRpb24qIGRlY2wgPSBnZXRNYXBwZWRBdHRyaWJ1dGVEZWNsKGVQZXJzaXN0ZW50LCAmYXR0cik7
CisgICAgaWYgKCFkZWNsKSB7CisgICAgICAgIGRlY2wgPSBuZXcgQ1NTTWFwcGVkQXR0cmlidXRl
RGVjbGFyYXRpb24oMCk7CisgICAgICAgIGRlY2wtPnNldFBhcmVudChkb2N1bWVudCgpLT5lbGVt
ZW50U2hlZXQoKSk7CisgICAgICAgIGRlY2wtPnNldE5vZGUodGhpcyk7CisgICAgICAgIGRlY2wt
PnNldFN0cmljdFBhcnNpbmcoZmFsc2UpOyAvLyBNYXBwZWQgYXR0cmlidXRlcyBhcmUganVzdCBh
bHdheXMgcXVpcmt5LgorICAgICAgICAKKyAgICAgICAgZGVjbC0+cmVmKCk7IC8vIFRoaXMgc2lu
Z2xlIHJlZiBwaW5zIHVzIGluIHRoZSB0YWJsZSB1bnRpbCB0aGUgZG9jdW1lbnQgZGllcy4KKyAg
ICAgICAgCisgICAgICAgIGRlY2wtPnNldFByb3BlcnR5KENTU19QUk9QX0JPUkRFUl9UT1BfV0lE
VEgsIENTU19WQUxfVEhJTiwgZmFsc2UpOworICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0eShDU1Nf
UFJPUF9CT1JERVJfQk9UVE9NX1dJRFRILCBDU1NfVkFMX1RISU4sIGZhbHNlKTsKKyAgICAgICAg
ZGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9SREVSX1RPUF9TVFlMRSwgQ1NTX1ZBTF9TT0xJ
RCwgZmFsc2UpOworICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9CT1JERVJfQk9U
VE9NX1NUWUxFLCBDU1NfVkFMX1NPTElELCBmYWxzZSk7CisgICAgICAgCisgICAgICAgIHNldE1h
cHBlZEF0dHJpYnV0ZURlY2woZVBlcnNpc3RlbnQsICZhdHRyLCBkZWNsKTsKKyAgICAgICAgZGVj
bC0+c2V0UGFyZW50KDApOworICAgICAgICBkZWNsLT5zZXROb2RlKDApOworICAgICAgICBkZWNs
LT5zZXRNYXBwZWRTdGF0ZShlUGVyc2lzdGVudCwgYXR0ci5uYW1lKCksIGF0dHIudmFsdWUoKSk7
CisgICAgfQorCisgICAgcmV0dXJuIGRlY2w7Cit9CisKK0NTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiBIVE1MVGFibGVFbGVtZW50OjpnZXRTaGFyZWRDb2xHcm91cERlY2woKQoreworICAgIGlm
IChtX3J1bGVzQXR0ciAhPSBHcm91cHNSdWxlcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBN
YXBwZWRBdHRyaWJ1dGUgYXR0cihydWxlc0F0dHIsICJjb2xncm91cHMiKTsKKyAgICBDU1NNYXBw
ZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbiogZGVjbCA9IGdldE1hcHBlZEF0dHJpYnV0ZURlY2woZVBl
cnNpc3RlbnQsICZhdHRyKTsKKyAgICBpZiAoIWRlY2wpIHsKKyAgICAgICAgZGVjbCA9IG5ldyBD
U1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbigwKTsKKyAgICAgICAgZGVjbC0+c2V0UGFyZW50
KGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpKTsKKyAgICAgICAgZGVjbC0+c2V0Tm9kZSh0aGlz
KTsKKyAgICAgICAgZGVjbC0+c2V0U3RyaWN0UGFyc2luZyhmYWxzZSk7IC8vIE1hcHBlZCBhdHRy
aWJ1dGVzIGFyZSBqdXN0IGFsd2F5cyBxdWlya3kuCisgICAgICAgIAorICAgICAgICBkZWNsLT5y
ZWYoKTsgLy8gVGhpcyBzaW5nbGUgcmVmIHBpbnMgdXMgaW4gdGhlIHRhYmxlIHVudGlsIHRoZSBk
b2N1bWVudCBkaWVzLgorICAgICAgICAKKyAgICAgICAgZGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BS
T1BfQk9SREVSX0xFRlRfV0lEVEgsIENTU19WQUxfVEhJTiwgZmFsc2UpOworICAgICAgICBkZWNs
LT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9CT1JERVJfUklHSFRfV0lEVEgsIENTU19WQUxfVEhJTiwg
ZmFsc2UpOworICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9CT1JERVJfTEVGVF9T
VFlMRSwgQ1NTX1ZBTF9TT0xJRCwgZmFsc2UpOworICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0eShD
U1NfUFJPUF9CT1JERVJfUklHSFRfU1RZTEUsIENTU19WQUxfU09MSUQsIGZhbHNlKTsKKyAgICAg
ICAKKyAgICAgICAgc2V0TWFwcGVkQXR0cmlidXRlRGVjbChlUGVyc2lzdGVudCwgJmF0dHIsIGRl
Y2wpOworICAgICAgICBkZWNsLT5zZXRQYXJlbnQoMCk7CisgICAgICAgIGRlY2wtPnNldE5vZGUo
MCk7CisgICAgICAgIGRlY2wtPnNldE1hcHBlZFN0YXRlKGVQZXJzaXN0ZW50LCBhdHRyLm5hbWUo
KSwgYXR0ci52YWx1ZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGVjbDsKK30KKwogdm9pZCBI
VE1MVGFibGVFbGVtZW50OjphdHRhY2goKQogewogICAgIGFzc2VydCghbV9hdHRhY2hlZCk7CiAg
ICAgSFRNTEVsZW1lbnQ6OmF0dGFjaCgpOwogICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVy
KCktPmlzVGFibGUoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGUqPihyZW5kZXJl
cigpKS0+c2V0Q2VsbFBhZGRpbmcocGFkZGluZyk7CisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRl
clRhYmxlKj4ocmVuZGVyZXIoKSktPnNldENlbGxQYWRkaW5nKG1fcGFkZGluZyk7CiB9CiAKIGJv
b2wgSFRNTFRhYmxlRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlICphdHRyKSBjb25z
dApJbmRleDogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTYzNDEpCisrKyBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIyNzcs
NiArMjI3NywyMyBAQAogCQlGQUUwNDE5MDA5NzU5NkM5MDAwNTQwQkUgLyogU1ZHSW1hZ2VMb2Fk
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZBRTA0
MThFMDk3NTk2QzkwMDA1NDBCRSAvKiBTVkdJbWFnZUxvYWRlci5oICovOyB9OwogLyogRW5kIFBC
WEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKKy8qIEJlZ2luIFBCWEJ1aWxkU3R5bGUgc2VjdGlvbiAq
LworCQlCQ0RCMkE3NDBBQjkzNEUxMDBEODIyMTYgLyogRGV2ZWxvcG1lbnQgKi8gPSB7CisJCQlp
c2EgPSBQQlhCdWlsZFN0eWxlOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlDT1BZX1BIQVNF
X1NUUklQID0gTk87CisJCQl9OworCQkJbmFtZSA9IERldmVsb3BtZW50OworCQl9OworCQlCQ0RC
MkE3NTBBQjkzNEUxMDBEODIyMTYgLyogRGVwbG95bWVudCAqLyA9IHsKKwkJCWlzYSA9IFBCWEJ1
aWxkU3R5bGU7CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBZ
RVM7CisJCQl9OworCQkJbmFtZSA9IERlcGxveW1lbnQ7CisJCX07CisvKiBFbmQgUEJYQnVpbGRT
dHlsZSBzZWN0aW9uICovCisKIC8qIEJlZ2luIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9u
ICovCiAJCUREMDQxRkYwMDlEOUUzMjUwMDEwQUYyQSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7CkBAIC04NTcwLDYgKzg1ODcs
MTIgQEAKIAkJMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovID0g
ewogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlD
Mjg0MzA4OTAyQjExMDA4QTlFRkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQ
cm9qZWN0ICJXZWJDb3JlIiAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQl9OworCQkJYnVp
bGRTdHlsZXMgPSAoCisJCQkJQkNEQjJBNzQwQUI5MzRFMTAwRDgyMjE2IC8qIERldmVsb3BtZW50
ICovLAorCQkJCUJDREIyQTc1MEFCOTM0RTEwMEQ4MjIxNiAvKiBEZXBsb3ltZW50ICovLAorCQkJ
KTsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25SZWdpb25zID0gKAog
CQkJCUVuZ2xpc2gsCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10594</attachid>
            <date>2006-09-16 22:15:56 -0700</date>
            <delta_ts>2006-09-17 00:19:05 -0700</delta_ts>
            <desc>Round Three</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>29144</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IGh0bWwvSFRNTFRhYmxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTFRh
YmxlRWxlbWVudC5oCShyZXZpc2lvbiAxNjM0MSkKKysrIGh0bWwvSFRNTFRhYmxlRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMyArNjYsMTMgQEAKICAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDk7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQo
Y29uc3QgTm9kZSopOwogCi0gICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIGNhcHRpb24oKSBj
b25zdCB7IHJldHVybiB0Q2FwdGlvbjsgfQorICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBj
YXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jYXB0aW9uOyB9CiAgICAgTm9kZSogc2V0Q2FwdGlv
bihIVE1MVGFibGVDYXB0aW9uRWxlbWVudCopOwogCi0gICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnQqIHRIZWFkKCkgY29uc3QgeyByZXR1cm4gaGVhZDsgfQorICAgIEhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50KiB0SGVhZCgpIGNvbnN0IHsgcmV0dXJuIG1faGVhZDsgfQogICAgIE5vZGUqIHNldFRI
ZWFkKEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Kik7CiAKLSAgICBIVE1MVGFibGVTZWN0aW9uRWxl
bWVudCogdEZvb3QoKSBjb25zdCB7IHJldHVybiBmb290OyB9CisgICAgSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnQqIHRGb290KCkgY29uc3QgeyByZXR1cm4gbV9mb290OyB9CiAgICAgTm9kZSogc2V0
VEZvb3QoSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqKTsKIAogICAgIE5vZGUqIHNldFRCb2R5KEhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50Kik7CkBAIC0xMjMsMjQgKzEyMywzMSBAQAogICAgIHZpcnR1
YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBNYXBwZWRBdHRyaWJ1dGVF
bnRyeSYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUqKTsKIAotICAgIC8vIFVzZWQgdG8gb2J0YWluIGVpdGhlciBhIHNvbGlkIG9y
IG91dHNldCBib3JkZXIgZGVjbC4KKyAgICAvLyBVc2VkIHRvIG9idGFpbiBlaXRoZXIgYSBzb2xp
ZCBvciBvdXRzZXQgYm9yZGVyIGRlY2wgYW5kIHRvIGRlYWwgd2l0aCB0aGUgZnJhbWUKKyAgICAv
LyBhbmQgcnVsZXMgYXR0cmlidXRlcy4KICAgICB2aXJ0dWFsIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsKCk7CiAgICAgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24qIGdldFNoYXJlZENlbGxEZWNsKCk7CisgICAgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qIGdldFNoYXJlZEdyb3VwRGVjbChib29sIHJvd3MpOwogCiAgICAgdmlydHVh
bCB2b2lkIGF0dGFjaCgpOwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShB
dHRyaWJ1dGUqKSBjb25zdDsKIAorICAgIGVudW0gVGFibGVSdWxlcyB7IFVuc2V0UnVsZXMsIE5v
bmVSdWxlcywgR3JvdXBzUnVsZXMsIFJvd3NSdWxlcywgQ29sc1J1bGVzLCBBbGxSdWxlcyB9Owor
CiBwcm90ZWN0ZWQ6Ci0gICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIGhlYWQ7Ci0gICAgSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQqIGZvb3Q7Ci0gICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQq
IGZpcnN0Qm9keTsKLSAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVudCogdENhcHRpb247CisgICAg
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIG1faGVhZDsKKyAgICBIVE1MVGFibGVTZWN0aW9uRWxl
bWVudCogbV9mb290OworICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBtX2ZpcnN0Qm9keTsK
KyAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVudCogbV9jYXB0aW9uOwogCi0gICAgYm9vbCBtX25v
Qm9yZGVyICAgICA6IDE7Ci0gICAgYm9vbCBtX3NvbGlkICAgICAgICA6IDE7Ci0gICAgLy8gMTQg
Yml0cyB1bnVzZWQKLSAgICB1bnNpZ25lZCBzaG9ydCBwYWRkaW5nOworICAgIGJvb2wgbV9ib3Jk
ZXJBdHRyOyAgICAgICAgICAvLyBTZXRzIGEgcHJlY2lzZSBib3JkZXIgd2lkdGggYW5kIGNyZWF0
ZXMgYW4gb3V0c2V0IGJvcmRlciBmb3IgdGhlIHRhYmxlIGFuZCBmb3IgaXRzIGNlbGxzLgorICAg
IGJvb2wgbV9ib3JkZXJDb2xvckF0dHI7ICAgICAvLyBPdmVycmlkZXMgdGhlIG91dHNldCBib3Jk
ZXIgYW5kIG1ha2VzIGl0IHNvbGlkIGZvciB0aGUgdGFibGUgYW5kIGNlbGxzIGluc3RlYWQuCisg
ICAgYm9vbCBtX2ZyYW1lQXR0cjsgICAgICAgICAgIC8vIEltcGxpZXMgYSB0aGluIGJvcmRlciB3
aWR0aCBpZiBubyBib3JkZXIgaXMgc2V0IGFuZCB0aGVuIGEgY2VydGFpbiBzZXQgb2Ygc29saWQv
aGlkZGVuIGJvcmRlcnMgYmFzZWQgb2ZmIHRoZSB2YWx1ZS4KKyAgICBUYWJsZVJ1bGVzIG1fcnVs
ZXNBdHRyOyAgICAgLy8gSW1wbGllcyBhIHRoaW4gYm9yZGVyIHdpZHRoLCBhIGNvbGxhcHNpbmcg
Ym9yZGVyIG1vZGVsLCBhbmQgYWxsIGJvcmRlcnMgb24gdGhlIHRhYmxlIGJlY29taW5nIHNldCB0
byBoaWRkZW4gKGlmIGZyYW1lL2JvcmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBhcmUgcHJlc2VudCwgdG8gbm9uZSBvdGhlcndpc2UpLgorICAgCisgICAgdW5zaWduZWQg
c2hvcnQgbV9wYWRkaW5nOwogICAgIGZyaWVuZCBjbGFzcyBIVE1MVGFibGVDZWxsRWxlbWVudDsK
IH07CiAKSW5kZXg6IGh0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBodG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmgJKHJldmlzaW9uIDE2MzQxKQorKysgaHRt
bC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw4
IEBACiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA4OyB9CiAg
ICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqKTsKICAgICB2aXJ0dWFsIENvbnRh
aW5lck5vZGUqIGFkZENoaWxkKFBhc3NSZWZQdHI8Tm9kZT4pOwotICAgIAorICAgIHZpcnR1YWwg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2wo
KTsKKwogICAgIEhUTUxFbGVtZW50KiBpbnNlcnRSb3coaW50IGluZGV4LCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgdm9pZCBkZWxldGVSb3coaW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7CiAKSW5k
ZXg6IGh0bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTFRh
YmxlQ29sRWxlbWVudC5oCShyZXZpc2lvbiAxNjM0MSkKKysrIGh0bWwvSFRNTFRhYmxlQ29sRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMiArNDIsMTIgQEAKICAgICB2aXJ0dWFsIEhU
TUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCB0
YWdQcmlvcml0eSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2Rl
Kik7Ci0gICAgdm9pZCBzZXRUYWJsZShIVE1MVGFibGVFbGVtZW50KiB0KSB7IHRhYmxlID0gdDsg
fQogCiAgICAgLy8gb3ZlcnJpZGVzCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JikgY29uc3Q7CiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwotCisgICAgdmly
dHVhbCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxl
RGVjbCgpOworICAgCiAgICAgaW50IHNwYW4oKSBjb25zdCB7IHJldHVybiBfc3BhbjsgfQogCiAg
ICAgU3RyaW5nIGFsaWduKCkgY29uc3Q7CkBAIC02OSw3ICs2OSw2IEBACiAKIHByb3RlY3RlZDoK
ICAgICBpbnQgX3NwYW47Ci0gICAgSFRNTFRhYmxlRWxlbWVudCAqdGFibGU7CiB9OwogCiB9IC8v
bmFtZXNwYWNlCkluZGV4OiBodG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBodG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMTYzNDEp
CisrKyBodG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFRhYmxlUm93RWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
TUxUYWJsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC02Miw2ICs2MywxNiBAQAogICAgIHJldHVybiBIVE1MVGFibGVQYXJ0RWxlbWVu
dDo6YWRkQ2hpbGQoY2hpbGQpOwogfQogCisvLyB1c2VkIGJ5IHRhYmxlIHJvdyBncm91cHMgdG8g
c2hhcmUgc3R5bGUgZGVjbHMgY3JlYXRlZCBieSB0aGUgZW5jbG9zaW5nIHRhYmxlLgorQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjphZGRpdGlvbmFs
QXR0cmlidXRlU3R5bGVEZWNsKCkKK3sKKyAgICBOb2RlKiBwID0gcGFyZW50Tm9kZSgpOworICAg
IHdoaWxlIChwICYmICFwLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkKKyAgICAgICAgcCA9IHAtPnBh
cmVudE5vZGUoKTsKKworICAgIHJldHVybiBwID8gIHN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1l
bnQqPihwKS0+Z2V0U2hhcmVkR3JvdXBEZWNsKHRydWUpIDogMDsKK30KKwogLy8gdGhlc2UgZnVu
Y3Rpb25zIGFyZSByYXRoZXIgc2xvdywgc2luY2Ugd2UgbmVlZCB0byBnZXQgdGhlIHJvdyBhdAog
Ly8gdGhlIGluZGV4Li4uIGJ1dCB0aGV5IGFyZW4ndCB1c2VkIGR1cmluZyB1c3VhbCBIVE1MIHBh
cnNpbmcgYW55d2F5CiBIVE1MRWxlbWVudCogSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6Omluc2Vy
dFJvdyhpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQpJbmRleDogaHRtbC9IVE1MVGFibGVS
b3dFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmgJKHJl
dmlzaW9uIDE2MzQxKQorKysgaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDcgQEAKICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0
IHsgcmV0dXJuIDc7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSopOwog
ICAgIHZpcnR1YWwgQ29udGFpbmVyTm9kZSogYWRkQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPik7Ci0g
ICAgCisKICAgICBpbnQgcm93SW5kZXgoKSBjb25zdDsKICAgICBpbnQgc2VjdGlvblJvd0luZGV4
KCkgY29uc3Q7CiAKSW5kZXg6IGh0bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmNwcAkocmV2aXNpb24gMTYzNDEpCisrKyBo
dG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ29sLmgiCisjaW5jbHVkZSAiSFRNTFRhYmxlRWxlbWVu
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc4LDYgKzc5LDE1IEBACiAgICAgICAg
IEhUTUxUYWJsZVBhcnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KIAor
Ly8gdXNlZCBieSB0YWJsZSBjb2x1bW5zIGFuZCBjb2x1bW4gZ3JvdXBzIHRvIHNoYXJlIHN0eWxl
IGRlY2xzIGNyZWF0ZWQgYnkgdGhlIGVuY2xvc2luZyB0YWJsZS4KK0NTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKiBIVE1MVGFibGVDb2xFbGVtZW50OjphZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVE
ZWNsKCkKK3sKKyAgICBOb2RlKiBwID0gcGFyZW50Tm9kZSgpOworICAgIHdoaWxlIChwICYmICFw
LT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkKKyAgICAgICAgcCA9IHAtPnBhcmVudE5vZGUoKTsKKyAg
ICByZXR1cm4gaGFzTG9jYWxOYW1lKGNvbGdyb3VwVGFnKSAmJiBwID8gc3RhdGljX2Nhc3Q8SFRN
TFRhYmxlRWxlbWVudCo+KHApLT5nZXRTaGFyZWRHcm91cERlY2woZmFsc2UpIDogMDsKK30KKwog
U3RyaW5nIEhUTUxUYWJsZUNvbEVsZW1lbnQ6OmFsaWduKCkgY29uc3QKIHsKICAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKGFsaWduQXR0cik7CkluZGV4OiBodG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmNwcAkocmV2aXNp
b24gMTYzNDEpCisrKyBodG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE1LDEzICsxMTUsNyBAQAogICAgIE5vZGUqIHAgPSBwYXJlbnROb2RlKCk7CiAgICAg
d2hpbGUgKHAgJiYgIXAtPmhhc1RhZ05hbWUodGFibGVUYWcpKQogICAgICAgICBwID0gcC0+cGFy
ZW50Tm9kZSgpOwotCi0gICAgaWYgKHApIHsKLSAgICAgICAgSFRNTFRhYmxlRWxlbWVudCogdGFi
bGUgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50Kj4ocCk7Ci0gICAgICAgIHJldHVybiB0
YWJsZS0+Z2V0U2hhcmVkQ2VsbERlY2woKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gcCA/IHN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnQqPihwKS0+Z2V0U2hhcmVkQ2Vs
bERlY2woKSA6IDA7CiB9CiAKIGJvb2wgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmlzVVJMQXR0cmli
dXRlKEF0dHJpYnV0ZSAqYXR0cikgY29uc3QKSW5kZXg6IGh0bWwvSFRNTFRhYmxlRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gMTYz
NDEpCisrKyBodG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwy
MCArNDQsMjIgQEAKIAogSFRNTFRhYmxlRWxlbWVudDo6SFRNTFRhYmxlRWxlbWVudChEb2N1bWVu
dCAqZG9jKQogICAgIDogSFRNTEVsZW1lbnQodGFibGVUYWcsIGRvYykKLSAgICAsIGhlYWQoMCkK
LSAgICAsIGZvb3QoMCkKLSAgICAsIGZpcnN0Qm9keSgwKQotICAgICwgdENhcHRpb24oMCkKLSAg
ICAsIG1fbm9Cb3JkZXIodHJ1ZSkKLSAgICAsIG1fc29saWQoZmFsc2UpCi0gICAgLCBwYWRkaW5n
KDEpCisgICAgLCBtX2hlYWQoMCkKKyAgICAsIG1fZm9vdCgwKQorICAgICwgbV9maXJzdEJvZHko
MCkKKyAgICAsIG1fY2FwdGlvbigwKQorICAgICwgbV9ib3JkZXJBdHRyKGZhbHNlKQorICAgICwg
bV9ib3JkZXJDb2xvckF0dHIoZmFsc2UpCisgICAgLCBtX2ZyYW1lQXR0cihmYWxzZSkKKyAgICAs
IG1fcnVsZXNBdHRyKFVuc2V0UnVsZXMpCisgICAgLCBtX3BhZGRpbmcoMSkKIHsKIH0KIAogSFRN
TFRhYmxlRWxlbWVudDo6fkhUTUxUYWJsZUVsZW1lbnQoKQogewotICAgIGlmIChmaXJzdEJvZHkp
Ci0gICAgICAgIGZpcnN0Qm9keS0+ZGVyZWYoKTsKKyAgICBpZiAobV9maXJzdEJvZHkpCisgICAg
ICAgIG1fZmlyc3RCb2R5LT5kZXJlZigpOwogfQogCiBib29sIEhUTUxUYWJsZUVsZW1lbnQ6OmNo
ZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKQpAQCAtNzIsNDAgKzc0LDQwIEBACiBOb2RlKiBI
VE1MVGFibGVFbGVtZW50OjpzZXRDYXB0aW9uKEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBjKQog
ewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGlmIChOb2RlKiBvYyA9IHRDYXB0aW9u
KQorICAgIGlmIChOb2RlKiBvYyA9IG1fY2FwdGlvbikKICAgICAgICAgcmVwbGFjZUNoaWxkKGMs
IG9jLCBlYyk7CiAgICAgZWxzZQogICAgICAgICBpbnNlcnRCZWZvcmUoYywgZmlyc3RDaGlsZCgp
LCBlYyk7Ci0gICAgdENhcHRpb24gPSBjOwotICAgIHJldHVybiB0Q2FwdGlvbjsKKyAgICBtX2Nh
cHRpb24gPSBjOworICAgIHJldHVybiBtX2NhcHRpb247CiB9CiAKIE5vZGUqIEhUTUxUYWJsZUVs
ZW1lbnQ6OnNldFRIZWFkKEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBzKQogewogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotICAgIGlmIChOb2RlKiBoID0gaGVhZCkKKyAgICBpZiAoTm9kZSog
aCA9IG1faGVhZCkKICAgICAgICAgcmVwbGFjZUNoaWxkKHMsIGgsIGVjKTsKLSAgICBlbHNlIGlm
IChmb290KQotICAgICAgICBpbnNlcnRCZWZvcmUocywgZm9vdCwgZWMpOwotICAgIGVsc2UgaWYg
KGZpcnN0Qm9keSkKLSAgICAgICAgaW5zZXJ0QmVmb3JlKHMsIGZpcnN0Qm9keSwgZWMpOworICAg
IGVsc2UgaWYgKG1fZm9vdCkKKyAgICAgICAgaW5zZXJ0QmVmb3JlKHMsIG1fZm9vdCwgZWMpOwor
ICAgIGVsc2UgaWYgKG1fZmlyc3RCb2R5KQorICAgICAgICBpbnNlcnRCZWZvcmUocywgbV9maXJz
dEJvZHksIGVjKTsKICAgICBlbHNlCiAgICAgICAgIGFwcGVuZENoaWxkKHMsIGVjKTsKLSAgICBo
ZWFkID0gczsKLSAgICByZXR1cm4gaGVhZDsKKyAgICBtX2hlYWQgPSBzOworICAgIHJldHVybiBt
X2hlYWQ7CiB9CiAKIE5vZGUqIEhUTUxUYWJsZUVsZW1lbnQ6OnNldFRGb290KEhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50ICpzKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGlmIChO
b2RlICpmID0gZm9vdCkKKyAgICBpZiAoTm9kZSAqZiA9IG1fZm9vdCkKICAgICAgICAgcmVwbGFj
ZUNoaWxkKHMsIGYsIGVjKTsKLSAgICBlbHNlIGlmIChmaXJzdEJvZHkpCi0gICAgICAgIGluc2Vy
dEJlZm9yZShzLCBmaXJzdEJvZHksIGVjKTsKKyAgICBlbHNlIGlmIChtX2ZpcnN0Qm9keSkKKyAg
ICAgICAgaW5zZXJ0QmVmb3JlKHMsIG1fZmlyc3RCb2R5LCBlYyk7CiAgICAgZWxzZQogICAgICAg
ICBhcHBlbmRDaGlsZChzLCBlYyk7Ci0gICAgZm9vdCA9IHM7Ci0gICAgcmV0dXJuIGZvb3Q7Cisg
ICAgbV9mb290ID0gczsKKyAgICByZXR1cm4gbV9mb290OwogfQogCiBOb2RlKiBIVE1MVGFibGVF
bGVtZW50OjpzZXRUQm9keShIVE1MVGFibGVTZWN0aW9uRWxlbWVudCAqcykKQEAgLTExMyw4NSAr
MTE1LDg1IEBACiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgTm9kZSogcjsKICAgICBz
LT5yZWYoKTsKLSAgICBpZiAoTm9kZSAqZmIgPSBmaXJzdEJvZHkpIHsKKyAgICBpZiAoTm9kZSAq
ZmIgPSBtX2ZpcnN0Qm9keSkgewogICAgICAgICByZXBsYWNlQ2hpbGQocywgZmIsIGVjKTsKICAg
ICAgICAgZmItPmRlcmVmKCk7CiAgICAgICAgIHIgPSBzOwogICAgIH0gZWxzZQogICAgICAgICBh
cHBlbmRDaGlsZChzLCBlYyk7Ci0gICAgZmlyc3RCb2R5ID0gczsKLSAgICByZXR1cm4gZmlyc3RC
b2R5OworICAgIG1fZmlyc3RCb2R5ID0gczsKKyAgICByZXR1cm4gbV9maXJzdEJvZHk7CiB9CiAK
IEhUTUxFbGVtZW50ICpIVE1MVGFibGVFbGVtZW50OjpjcmVhdGVUSGVhZCgpCiB7Ci0gICAgaWYg
KCFoZWFkKSB7CisgICAgaWYgKCFtX2hlYWQpIHsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgICAgIGhlYWQgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQodGhlYWRUYWcs
IGRvY3VtZW50KCksIHRydWUgLyogaW1wbGljaXQgKi8pOwotICAgICAgICBpZiAoZm9vdCkKLSAg
ICAgICAgICAgIGluc2VydEJlZm9yZShoZWFkLCBmb290LCBlYyk7Ci0gICAgICAgIGVsc2UgaWYg
KGZpcnN0Qm9keSkKLSAgICAgICAgICAgIGluc2VydEJlZm9yZShoZWFkLCBmaXJzdEJvZHksIGVj
KTsKKyAgICAgICAgbV9oZWFkID0gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KHRoZWFkVGFn
LCBkb2N1bWVudCgpLCB0cnVlIC8qIGltcGxpY2l0ICovKTsKKyAgICAgICAgaWYgKG1fZm9vdCkK
KyAgICAgICAgICAgIGluc2VydEJlZm9yZShtX2hlYWQsIG1fZm9vdCwgZWMpOworICAgICAgICBl
bHNlIGlmIChtX2ZpcnN0Qm9keSkKKyAgICAgICAgICAgIGluc2VydEJlZm9yZShtX2hlYWQsIG1f
Zmlyc3RCb2R5LCBlYyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFwcGVuZENoaWxkKGhl
YWQsIGVjKTsKKyAgICAgICAgICAgIGFwcGVuZENoaWxkKG1faGVhZCwgZWMpOwogICAgIH0KLSAg
ICByZXR1cm4gaGVhZDsKKyAgICByZXR1cm4gbV9oZWFkOwogfQogCiB2b2lkIEhUTUxUYWJsZUVs
ZW1lbnQ6OmRlbGV0ZVRIZWFkKCkKIHsKLSAgICBpZiAoaGVhZCkgeworICAgIGlmIChtX2hlYWQp
IHsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIGhlYWQtPnJlZigpOwot
ICAgICAgICBIVE1MRWxlbWVudDo6cmVtb3ZlQ2hpbGQoaGVhZCwgZWMpOwotICAgICAgICBoZWFk
LT5kZXJlZigpOworICAgICAgICBtX2hlYWQtPnJlZigpOworICAgICAgICBIVE1MRWxlbWVudDo6
cmVtb3ZlQ2hpbGQobV9oZWFkLCBlYyk7CisgICAgICAgIG1faGVhZC0+ZGVyZWYoKTsKICAgICB9
Ci0gICAgaGVhZCA9IDA7CisgICAgbV9oZWFkID0gMDsKIH0KIAogSFRNTEVsZW1lbnQgKkhUTUxU
YWJsZUVsZW1lbnQ6OmNyZWF0ZVRGb290KCkKIHsKLSAgICBpZiAoIWZvb3QpIHsKKyAgICBpZiAo
IW1fZm9vdCkgewogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgZm9vdCA9
IG5ldyBIVE1MVGFibGVTZWN0aW9uRWxlbWVudCh0Zm9vdFRhZywgZG9jdW1lbnQoKSwgdHJ1ZSAv
KmltcGxpY2l0ICovKTsKLSAgICAgICAgaWYgKGZpcnN0Qm9keSkKLSAgICAgICAgICAgIGluc2Vy
dEJlZm9yZShmb290LCBmaXJzdEJvZHksIGVjKTsKKyAgICAgICAgbV9mb290ID0gbmV3IEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50KHRmb290VGFnLCBkb2N1bWVudCgpLCB0cnVlIC8qaW1wbGljaXQg
Ki8pOworICAgICAgICBpZiAobV9maXJzdEJvZHkpCisgICAgICAgICAgICBpbnNlcnRCZWZvcmUo
bV9mb290LCBtX2ZpcnN0Qm9keSwgZWMpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcHBl
bmRDaGlsZChmb290LCBlYyk7CisgICAgICAgICAgICBhcHBlbmRDaGlsZChtX2Zvb3QsIGVjKTsK
ICAgICB9Ci0gICAgcmV0dXJuIGZvb3Q7CisgICAgcmV0dXJuIG1fZm9vdDsKIH0KIAogdm9pZCBI
VE1MVGFibGVFbGVtZW50OjpkZWxldGVURm9vdCgpCiB7Ci0gICAgaWYgKGZvb3QpIHsKKyAgICBp
ZiAobV9mb290KSB7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBmb290
LT5yZWYoKTsKLSAgICAgICAgSFRNTEVsZW1lbnQ6OnJlbW92ZUNoaWxkKGZvb3QsIGVjKTsKLSAg
ICAgICAgZm9vdC0+ZGVyZWYoKTsKKyAgICAgICAgbV9mb290LT5yZWYoKTsKKyAgICAgICAgSFRN
TEVsZW1lbnQ6OnJlbW92ZUNoaWxkKG1fZm9vdCwgZWMpOworICAgICAgICBtX2Zvb3QtPmRlcmVm
KCk7CiAgICAgfQotICAgIGZvb3QgPSAwOworICAgIG1fZm9vdCA9IDA7CiB9CiAKIEhUTUxFbGVt
ZW50ICpIVE1MVGFibGVFbGVtZW50OjpjcmVhdGVDYXB0aW9uKCkKIHsKLSAgICBpZiAoIXRDYXB0
aW9uKSB7CisgICAgaWYgKCFtX2NhcHRpb24pIHsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgICAgIHRDYXB0aW9uID0gbmV3IEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KGRvY3Vt
ZW50KCkpOwotICAgICAgICBpbnNlcnRCZWZvcmUodENhcHRpb24sIGZpcnN0Q2hpbGQoKSwgZWMp
OworICAgICAgICBtX2NhcHRpb24gPSBuZXcgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQoZG9jdW1l
bnQoKSk7CisgICAgICAgIGluc2VydEJlZm9yZShtX2NhcHRpb24sIGZpcnN0Q2hpbGQoKSwgZWMp
OwogICAgIH0KLSAgICByZXR1cm4gdENhcHRpb247CisgICAgcmV0dXJuIG1fY2FwdGlvbjsKIH0K
IAogdm9pZCBIVE1MVGFibGVFbGVtZW50OjpkZWxldGVDYXB0aW9uKCkKIHsKLSAgICBpZiAodENh
cHRpb24pIHsKKyAgICBpZiAobV9jYXB0aW9uKSB7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgICAgICB0Q2FwdGlvbi0+cmVmKCk7Ci0gICAgICAgIEhUTUxFbGVtZW50OjpyZW1v
dmVDaGlsZCh0Q2FwdGlvbiwgZWMpOwotICAgICAgICB0Q2FwdGlvbi0+ZGVyZWYoKTsKKyAgICAg
ICAgbV9jYXB0aW9uLT5yZWYoKTsKKyAgICAgICAgSFRNTEVsZW1lbnQ6OnJlbW92ZUNoaWxkKG1f
Y2FwdGlvbiwgZWMpOworICAgICAgICBtX2NhcHRpb24tPmRlcmVmKCk7CiAgICAgfQotICAgIHRD
YXB0aW9uID0gMDsKKyAgICBtX2NhcHRpb24gPSAwOwogfQogCiBIVE1MRWxlbWVudCAqSFRNTFRh
YmxlRWxlbWVudDo6aW5zZXJ0Um93KGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0y
MDAsNyArMjAyLDcgQEAKICAgICAvLyAoY2YgRE9NMlRTIEhUTUxUYWJsZUVsZW1lbnQzMSB0ZXN0
KQogICAgIC8vIChub3RlOiB0aGlzIGlzIGRpZmZlcmVudCBmcm9tICJpZiB0aGUgdGFibGUgaGFz
IG5vIHNlY3Rpb25zIiwgc2luY2Ugd2UgY2FuIGhhdmUKICAgICAvLyA8VEFCTEU+PFRSPikKLSAg
ICBpZiAoIWZpcnN0Qm9keSAmJiAhaGVhZCAmJiAhZm9vdCkKKyAgICBpZiAoIW1fZmlyc3RCb2R5
ICYmICFtX2hlYWQgJiYgIW1fZm9vdCkKICAgICAgICAgc2V0VEJvZHkobmV3IEhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50KHRib2R5VGFnLCBkb2N1bWVudCgpLCB0cnVlIC8qIGltcGxpY2l0ICovKSk7
CiAKICAgICAvLyBJRSB0cmVhdHMgaW5kZXg9LTEgYXMgZGVmYXVsdCB2YWx1ZSBtZWFuaW5nICdh
cHBlbmQgYWZ0ZXIgbGFzdCcKQEAgLTIxNCw4ICsyMTYsNyBAQAogICAgIHsKICAgICAgICAgLy8g
dGhlcmUgY291bGQgYmUgMiB0Zm9vdCBlbGVtZW50cyBpbiB0aGUgdGFibGUuIE9ubHkgdGhlIGZp
cnN0IG9uZSBpcyB0aGUgImZvb3QiLCB0aGF0J3Mgd2h5IHdlIGhhdmUgdGhlIG1vcmUKICAgICAg
ICAgLy8gY29tcGxpY2F0ZWQgaWYgc3RhdGVtZW50IGJlbG93LgotICAgICAgICBpZiAobm9kZSAh
PSBmb290ICYmIChub2RlLT5oYXNUYWdOYW1lKHRoZWFkVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1l
KHRmb290VGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKHRib2R5VGFnKSkpCi0gICAgICAgIHsKKyAg
ICAgICAgaWYgKG5vZGUgIT0gbV9mb290ICYmIChub2RlLT5oYXNUYWdOYW1lKHRoZWFkVGFnKSB8
fCBub2RlLT5oYXNUYWdOYW1lKHRmb290VGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKHRib2R5VGFn
KSkpIHsKICAgICAgICAgICAgIHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9u
RWxlbWVudCo+KG5vZGUpOwogICAgICAgICAgICAgbGFzdFNlY3Rpb24gPSBzZWN0aW9uOwogICAg
ICAgICAgICAgaWYgKCFhcHBlbmQpIHsKQEAgLTIyOCw4ICsyMjksOCBAQAogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQotICAgIGlmICghZm91bmQgJiYgZm9vdCkKLSAgICAgICAgc2Vj
dGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Kj4oZm9vdCk7CisgICAg
aWYgKCFmb3VuZCAmJiBtX2Zvb3QpCisgICAgICAgIHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxIVE1M
VGFibGVTZWN0aW9uRWxlbWVudCo+KG1fZm9vdCk7CiAKICAgICAvLyBJbmRleCA9PSAwIG1lYW5z
ICJpbnNlcnQgYmVmb3JlIGZpcnN0IHJvdyBpbiBjdXJyZW50IHNlY3Rpb24iCiAgICAgLy8gb3Ig
ImFwcGVuZCBhZnRlciBsYXN0IHJvdyIgKGlmIHRoZXJlJ3Mgbm8gY3VycmVudCBzZWN0aW9uIGFu
eW1vcmUpCkBAIC0yNTUsMTMgKzI1NiwxMiBAQAogICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKICAg
ICBmb3IgKDsgbm9kZSA7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpKQogICAgIHsKLSAgICAg
ICAgaWYgKG5vZGUgIT0gZm9vdCAmJiAobm9kZS0+aGFzVGFnTmFtZSh0aGVhZFRhZykgfHwgbm9k
ZS0+aGFzVGFnTmFtZSh0Zm9vdFRhZykgfHwgCisgICAgICAgIGlmIChub2RlICE9IG1fZm9vdCAm
JiAobm9kZS0+aGFzVGFnTmFtZSh0aGVhZFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZSh0Zm9vdFRh
ZykgfHwgCiAgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKHRib2R5VGFnKSkpIHsKICAgICAg
ICAgICAgIHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudCo+KG5v
ZGUpOwogICAgICAgICAgICAgbGFzdFNlY3Rpb24gPSBzZWN0aW9uOwogICAgICAgICAgICAgaW50
IHJvd3MgPSBzZWN0aW9uLT5udW1Sb3dzKCk7Ci0gICAgICAgICAgICBpZiAoIWxhc3RSb3cpCi0g
ICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWxhc3RSb3cpIHsKICAgICAgICAgICAgICAg
ICBpZiAocm93cyA+IGluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yNzEsOCArMjcxLDggQEAKICAgICAgICAg
fQogICAgICAgICBzZWN0aW9uID0gMEw7CiAgICAgfQotICAgIGlmICghZm91bmQgJiYgZm9vdCkK
LSAgICAgICAgc2VjdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Kj4o
Zm9vdCk7CisgICAgaWYgKCFmb3VuZCAmJiBtX2Zvb3QpCisgICAgICAgIHNlY3Rpb24gPSBzdGF0
aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudCo+KG1fZm9vdCk7CiAKICAgICBpZiAobGFz
dFJvdykKICAgICAgICAgbGFzdFNlY3Rpb24tPmRlbGV0ZVJvdygtMSwgZWMpOwpAQCAtMzAxLDE1
ICszMDEsMTUgQEAKIAogICAgIENvbnRhaW5lck5vZGUqIGNvbnRhaW5lciA9IEhUTUxFbGVtZW50
OjphZGRDaGlsZChjaGlsZC5nZXQoKSk7CiAgICAgaWYgKGNvbnRhaW5lcikgewotICAgICAgICBp
ZiAoIXRDYXB0aW9uICYmIGNoaWxkLT5oYXNUYWdOYW1lKGNhcHRpb25UYWcpKQotICAgICAgICAg
ICAgdENhcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDYXB0aW9uRWxlbWVudCo+KGNoaWxk
LmdldCgpKTsKLSAgICAgICAgZWxzZSBpZiAoIWhlYWQgJiYgY2hpbGQtPmhhc1RhZ05hbWUodGhl
YWRUYWcpKQotICAgICAgICAgICAgaGVhZCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50Kj4oY2hpbGQuZ2V0KCkpOwotICAgICAgICBlbHNlIGlmICghZm9vdCAmJiBjaGlsZC0+
aGFzVGFnTmFtZSh0Zm9vdFRhZykpCi0gICAgICAgICAgICBmb290ID0gc3RhdGljX2Nhc3Q8SFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQqPihjaGlsZC5nZXQoKSk7Ci0gICAgICAgIGVsc2UgaWYgKCFm
aXJzdEJvZHkgJiYgY2hpbGQtPmhhc1RhZ05hbWUodGJvZHlUYWcpKSB7Ci0gICAgICAgICAgICBm
aXJzdEJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudCo+KGNoaWxkLmdl
dCgpKTsKLSAgICAgICAgICAgIGZpcnN0Qm9keS0+cmVmKCk7CisgICAgICAgIGlmICghbV9jYXB0
aW9uICYmIGNoaWxkLT5oYXNUYWdOYW1lKGNhcHRpb25UYWcpKQorICAgICAgICAgICAgbV9jYXB0
aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqPihjaGlsZC5nZXQoKSk7
CisgICAgICAgIGVsc2UgaWYgKCFtX2hlYWQgJiYgY2hpbGQtPmhhc1RhZ05hbWUodGhlYWRUYWcp
KQorICAgICAgICAgICAgbV9oZWFkID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnQqPihjaGlsZC5nZXQoKSk7CisgICAgICAgIGVsc2UgaWYgKCFtX2Zvb3QgJiYgY2hpbGQtPmhh
c1RhZ05hbWUodGZvb3RUYWcpKQorICAgICAgICAgICAgbV9mb290ID0gc3RhdGljX2Nhc3Q8SFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQqPihjaGlsZC5nZXQoKSk7CisgICAgICAgIGVsc2UgaWYgKCFt
X2ZpcnN0Qm9keSAmJiBjaGlsZC0+aGFzVGFnTmFtZSh0Ym9keVRhZykpIHsKKyAgICAgICAgICAg
IG1fZmlyc3RCb2R5ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqPihjaGls
ZC5nZXQoKSk7CisgICAgICAgICAgICBtX2ZpcnN0Qm9keS0+cmVmKCk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgcmV0dXJuIGNvbnRhaW5lcjsKQEAgLTMxOSw5ICszMTksOSBAQAogewogICAgIEhU
TUxFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoKTsKICAgICAKLSAgICBpZiAoZmlyc3RCb2R5ICYm
IGZpcnN0Qm9keS0+cGFyZW50Tm9kZSgpICE9IHRoaXMpIHsKLSAgICAgICAgZmlyc3RCb2R5LT5k
ZXJlZigpOwotICAgICAgICBmaXJzdEJvZHkgPSAwOworICAgIGlmIChtX2ZpcnN0Qm9keSAmJiBt
X2ZpcnN0Qm9keS0+cGFyZW50Tm9kZSgpICE9IHRoaXMpIHsKKyAgICAgICAgbV9maXJzdEJvZHkt
PmRlcmVmKCk7CisgICAgICAgIG1fZmlyc3RCb2R5ID0gMDsKICAgICB9CiB9IAogCkBAIC0zNDMs
NyArMzQzLDcgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBpZiAo
YXR0ck5hbWUgPT0gYm9yZGVyY29sb3JBdHRyKSB7CisgICAgaWYgKGF0dHJOYW1lID09IGJvcmRl
cmNvbG9yQXR0ciB8fCBhdHRyTmFtZSA9PSBmcmFtZUF0dHIgfHwgYXR0ck5hbWUgPT0gcnVsZXNB
dHRyKSB7CiAgICAgICAgIHJlc3VsdCA9IGVVbml2ZXJzYWw7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KQEAgLTM1Niw4ICszNTYsOCBAQAogICAgIGlmIChhdHRyTmFtZSA9PSBhbGlnbkF0
dHIpIHsKICAgICAgICAgcmVzdWx0ID0gZVRhYmxlOwogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfSAKLSAgICAKKyAgICB9CisKICAgICByZXR1cm4gSFRNTEVsZW1lbnQ6Om1hcFRvRW50cnko
YXR0ck5hbWUsIHJlc3VsdCk7CiB9CiAKQEAgLTM2OCw1NSArMzY4LDExMCBAQAogICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBoZWlnaHRBdHRyKQogICAgICAgICBhZGRDU1NMZW5ndGgoYXR0
ciwgQ1NTX1BST1BfSEVJR0hULCBhdHRyLT52YWx1ZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gYm9yZGVyQXR0cikgIHsKLSAgICAgICAgbV9ub0JvcmRlciA9IHRydWU7CisgICAg
ICAgIG1fYm9yZGVyQXR0ciA9IHRydWU7CiAgICAgICAgIGlmIChhdHRyLT5kZWNsKCkpIHsKICAg
ICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsID0gYXR0ci0+ZGVjbCgpLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKENTU19QUk9QX0JPUkRFUl9MRUZUX1dJRFRIKTsKICAgICAgICAgICAgIGlmICh2
YWwgJiYgdmFsLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbVZhbCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
LmdldCgpKTsKLSAgICAgICAgICAgICAgICBtX25vQm9yZGVyID0gIXByaW1WYWwtPmdldEZsb2F0
VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICAgICAgICAgIG1f
Ym9yZGVyQXR0ciA9IHByaW1WYWwtPmdldEZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKCFhdHRyLT5pc051
bGwoKSkgewotICAgICAgICAgICAgLy8gIyMjIHRoaXMgbmVlZHMgbW9yZSB3b3JrLCBhcyB0aGUg
Ym9yZGVyIHZhbHVlIGlzIG5vdCBvbmx5Ci0gICAgICAgICAgICAvLyAgICAgdGhlIGJvcmRlciBv
ZiB0aGUgYm94LCBidXQgYWxzbyBiZXR3ZWVuIHRoZSBjZWxscwogICAgICAgICAgICAgaW50IGJv
cmRlciA9IDA7CiAgICAgICAgICAgICBpZiAoYXR0ci0+aXNFbXB0eSgpKQogICAgICAgICAgICAg
ICAgIGJvcmRlciA9IDE7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgYm9yZGVy
ID0gYXR0ci0+dmFsdWUoKS50b0ludCgpOwotI2lmZGVmIERFQlVHX0RSQVdfQk9SREVSCi0gICAg
ICAgICAgICBib3JkZXI9MTsKLSNlbmRpZgotICAgICAgICAgICAgbV9ub0JvcmRlciA9ICFib3Jk
ZXI7CisgICAgICAgICAgICBtX2JvcmRlckF0dHIgPSBib3JkZXI7CiAgICAgICAgICAgICBhZGRD
U1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfQk9SREVSX1dJRFRILCBTdHJpbmc6Om51bWJlcihib3Jk
ZXIpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGJnY29sb3JB
dHRyKQogICAgICAgICBhZGRDU1NDb2xvcihhdHRyLCBDU1NfUFJPUF9CQUNLR1JPVU5EX0NPTE9S
LCBhdHRyLT52YWx1ZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYm9yZGVyY29s
b3JBdHRyKSB7Ci0gICAgICAgIG1fc29saWQgPSBhdHRyLT5kZWNsKCk7CisgICAgICAgIG1fYm9y
ZGVyQ29sb3JBdHRyID0gYXR0ci0+ZGVjbCgpOwogICAgICAgICBpZiAoIWF0dHItPmRlY2woKSAm
JiAhYXR0ci0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBhZGRDU1NDb2xvcihhdHRyLCBDU1Nf
UFJPUF9CT1JERVJfQ09MT1IsIGF0dHItPnZhbHVlKCkpOwotICAgICAgICAgICAgYWRkQ1NTUHJv
cGVydHkoYXR0ciwgQ1NTX1BST1BfQk9SREVSX1RPUF9TVFlMRSwgQ1NTX1ZBTF9TT0xJRCk7Ci0g
ICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfQk9UVE9NX1NU
WUxFLCBDU1NfVkFMX1NPTElEKTsKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENT
U19QUk9QX0JPUkRFUl9MRUZUX1NUWUxFLCBDU1NfVkFMX1NPTElEKTsKLSAgICAgICAgICAgIGFk
ZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9TVFlMRSwgQ1NTX1ZBTF9T
T0xJRCk7Ci0gICAgICAgICAgICBtX3NvbGlkID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fYm9yZGVy
Q29sb3JBdHRyID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IGJhY2tncm91bmRBdHRyKSB7CiAgICAgICAgIFN0cmluZyB1cmwgPSBwYXJzZVVSTChhdHRy
LT52YWx1ZSgpKTsKICAgICAgICAgaWYgKCF1cmwuaXNFbXB0eSgpKQogICAgICAgICAgICAgYWRk
Q1NTSW1hZ2VQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CQUNLR1JPVU5EX0lNQUdFLCBkb2N1bWVu
dCgpLT5jb21wbGV0ZVVSTCh1cmwpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBm
cmFtZUF0dHIpIHsKKyAgICAgICAgLy8gQ2FjaGUgdGhlIHZhbHVlIG9mICJmcmFtZSIgc28gdGhh
dCB0aGUgdGFibGUgY2FuIGV4YW1pbmUgaXQgbGF0ZXIuCisgICAgICAgIG1fZnJhbWVBdHRyID0g
ZmFsc2U7CisgICAgICAgIAorICAgICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0byBoaWRlIHRoZSB0
b3AvcmlnaHQvYm90dG9tL2xlZnQgYm9yZGVycy4KKyAgICAgICAgY29uc3QgaW50IGNUb3AgPSAw
OworICAgICAgICBjb25zdCBpbnQgY1JpZ2h0ID0gMTsKKyAgICAgICAgY29uc3QgaW50IGNCb3R0
b20gPSAyOworICAgICAgICBjb25zdCBpbnQgY0xlZnQgPSAzOworICAgICAgICBib29sIGJvcmRl
cnNbNF0gPSB7IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlIH07CisgICAgICAgIAorICAgICAg
ICAvLyB2b2lkLCBhYm92ZSwgYmVsb3csIGhzaWRlcywgdnNpZGVzLCBsaHMsIHJocywgYm94LCBi
b3JkZXIKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJ2b2lk
IikpCisgICAgICAgICAgICBtX2ZyYW1lQXR0ciA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJhYm92ZSIpKSB7CisgICAgICAgICAgICBt
X2ZyYW1lQXR0ciA9IHRydWU7CisgICAgICAgICAgICBib3JkZXJzW2NUb3BdID0gdHJ1ZTsKKyAg
ICAgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiYmVsb3ci
KSkgeworICAgICAgICAgICAgbV9mcmFtZUF0dHIgPSB0cnVlOworICAgICAgICAgICAgYm9yZGVy
c1tjQm90dG9tXSA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
YXR0ci0+dmFsdWUoKSwgImhzaWRlcyIpKSB7CisgICAgICAgICAgICBtX2ZyYW1lQXR0ciA9IHRy
dWU7CisgICAgICAgICAgICBib3JkZXJzW2NUb3BdID0gYm9yZGVyc1tjQm90dG9tXSA9IHRydWU7
CisgICAgICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgInZz
aWRlcyIpKSB7CisgICAgICAgICAgICBtX2ZyYW1lQXR0ciA9IHRydWU7CisgICAgICAgICAgICBi
b3JkZXJzW2NMZWZ0XSA9IGJvcmRlcnNbY1JpZ2h0XSA9IHRydWU7CisgICAgICAgIH0gZWxzZSBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImxocyIpKSB7CisgICAgICAgICAg
ICBtX2ZyYW1lQXR0ciA9IHRydWU7CisgICAgICAgICAgICBib3JkZXJzW2NMZWZ0XSA9IHRydWU7
CisgICAgICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgInJo
cyIpKSB7CisgICAgICAgICAgICBtX2ZyYW1lQXR0ciA9IHRydWU7CisgICAgICAgICAgICBib3Jk
ZXJzW2NSaWdodF0gPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KGF0dHItPnZhbHVlKCksICJib3giKSB8fAorICAgICAgICAgICAgICAgICAgIGVxdWFsSWdub3Jp
bmdDYXNlKGF0dHItPnZhbHVlKCksICJib3JkZXIiKSkgeworICAgICAgICAgICAgbV9mcmFtZUF0
dHIgPSB0cnVlOworICAgICAgICAgICAgYm9yZGVyc1tjVG9wXSA9IGJvcmRlcnNbY0JvdHRvbV0g
PSBib3JkZXJzW2NMZWZ0XSA9IGJvcmRlcnNbY1JpZ2h0XSA9IHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIE5vdyBtYXAgaW4gdGhlIGJvcmRlciBzdHlsZXMgb2Ygc29saWQg
YW5kIGhpZGRlbiByZXNwZWN0aXZlbHkuCisgICAgICAgIGlmIChtX2ZyYW1lQXR0cikgeworICAg
ICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQk9SREVSX1RPUF9XSURUSCwg
Q1NTX1ZBTF9USElOKTsKKyAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9Q
X0JPUkRFUl9CT1RUT01fV0lEVEgsIENTU19WQUxfVEhJTik7CisgICAgICAgICAgICBhZGRDU1NQ
cm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfTEVGVF9XSURUSCwgQ1NTX1ZBTF9USElOKTsK
KyAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9X
SURUSCwgQ1NTX1ZBTF9USElOKTsKKyAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENT
U19QUk9QX0JPUkRFUl9UT1BfU1RZTEUsIGJvcmRlcnNbY1RvcF0gPyBDU1NfVkFMX1NPTElEIDog
Q1NTX1ZBTF9ISURERU4pOworICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BS
T1BfQk9SREVSX0JPVFRPTV9TVFlMRSwgYm9yZGVyc1tjQm90dG9tXSA/IENTU19WQUxfU09MSUQg
OiBDU1NfVkFMX0hJRERFTik7CisgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1Nf
UFJPUF9CT1JERVJfTEVGVF9TVFlMRSwgYm9yZGVyc1tjTGVmdF0gPyBDU1NfVkFMX1NPTElEIDog
Q1NTX1ZBTF9ISURERU4pOworICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BS
T1BfQk9SREVSX1JJR0hUX1NUWUxFLCBib3JkZXJzW2NSaWdodF0gPyBDU1NfVkFMX1NPTElEIDog
Q1NTX1ZBTF9ISURERU4pOworICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gcnVsZXNBdHRyKSB7CisgICAgICAgIC8vIENhY2hlIHRoZSB2YWx1ZSBvZiAicnVsZXMiIHNv
IHRoYXQgdGhlIHBpZWNlcyBvZiB0aGUgdGFibGUgY2FuIGV4YW1pbmUgaXQgbGF0ZXIuCisgICAg
ICAgIG1fcnVsZXNBdHRyID0gVW5zZXRSdWxlczsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKGF0dHItPnZhbHVlKCksICJub25lIikpCisgICAgICAgICAgICBtX3J1bGVzQXR0ciA9IE5v
bmVSdWxlczsKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUo
KSwgImdyb3VwcyIpKQorICAgICAgICAgICAgbV9ydWxlc0F0dHIgPSBHcm91cHNSdWxlczsKKyAg
ICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgInJvd3MiKSkK
KyAgICAgICAgICAgIG1fcnVsZXNBdHRyID0gUm93c1J1bGVzOworICAgICAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImNvbHMiKSkKKyAgICAgICAgICAgIG1fcnVsZXNB
dHRyID0gQ29sc1J1bGVzOworICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFs
dWUoKSwgImFsbCIpKQorICAgICAgICAgICAgbV9ydWxlc0F0dHIgPSBBbGxSdWxlczsKKyAgICAg
ICAgCisgICAgICAgIC8vIFRoZSBwcmVzZW5jZSBvZiBhIHZhbGlkIHJ1bGVzIGF0dHJpYnV0ZSBj
YXVzZXMgYm9yZGVyIGNvbGxhcHNpbmcgdG8gYmUgZW5hYmxlZC4KKyAgICAgICAgaWYgKG1fcnVs
ZXNBdHRyICE9IFVuc2V0UnVsZXMpCisgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBD
U1NfUFJPUF9CT1JERVJfQ09MTEFQU0UsIENTU19WQUxfQ09MTEFQU0UpOwogICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IGNlbGxzcGFjaW5nQXR0cikgewogICAgICAgICBpZiAoIWF0dHIt
PnZhbHVlKCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19Q
Uk9QX0JPUkRFUl9TUEFDSU5HLCBhdHRyLT52YWx1ZSgpKTsKICAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBjZWxscGFkZGluZ0F0dHIpIHsKICAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgp
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHBhZGRpbmcgPSBtYXgoMCwgYXR0ci0+dmFsdWUoKS50
b0ludCgpKTsKKyAgICAgICAgICAgIG1fcGFkZGluZyA9IG1heCgwLCBhdHRyLT52YWx1ZSgpLnRv
SW50KCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYWRkaW5nID0gMTsKKyAgICAgICAg
ICAgIG1fcGFkZGluZyA9IDE7CiAgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCkt
PmlzVGFibGUoKSkgewotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGUqPihyZW5k
ZXJlcigpKS0+c2V0Q2VsbFBhZGRpbmcocGFkZGluZyk7CisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxSZW5kZXJUYWJsZSo+KHJlbmRlcmVyKCkpLT5zZXRDZWxsUGFkZGluZyhtX3BhZGRpbmcpOwog
ICAgICAgICAgICAgaWYgKCFyZW5kZXJlcigpLT5uZWVkc0xheW91dCgpKQogICAgICAgICAgICAg
ICAgIHJlbmRlcmVyKCktPnNldE5lZWRzTGF5b3V0KHRydWUpOwogICAgICAgICB9CkBAIC00NDAs
OSArNDk1LDEwIEBACiAKIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBIVE1MVGFibGVFbGVt
ZW50OjphZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsKCkKIHsKLSAgICBpZiAobV9ub0JvcmRl
cikKKyAgICBpZiAoKCFtX2JvcmRlckF0dHIgJiYgIW1fYm9yZGVyQ29sb3JBdHRyKSB8fCBtX2Zy
YW1lQXR0cikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgTWFwcGVkQXR0cmlidXRlIGF0dHIodGFi
bGVib3JkZXJBdHRyLCBtX3NvbGlkID8gInNvbGlkIiA6ICJvdXRzZXQiKTsKKyAgICAgICAgCisg
ICAgTWFwcGVkQXR0cmlidXRlIGF0dHIodGFibGVib3JkZXJBdHRyLCBtX2JvcmRlckNvbG9yQXR0
ciA/ICJzb2xpZCIgOiAib3V0c2V0Iik7CiAgICAgQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRp
b24qIGRlY2wgPSBnZXRNYXBwZWRBdHRyaWJ1dGVEZWNsKGVQZXJzaXN0ZW50LCAmYXR0cik7CiAg
ICAgaWYgKCFkZWNsKSB7CiAgICAgICAgIGRlY2wgPSBuZXcgQ1NTTWFwcGVkQXR0cmlidXRlRGVj
bGFyYXRpb24oMCk7CkBAIC00NTIsNyArNTA4LDcgQEAKICAgICAgICAgCiAgICAgICAgIGRlY2wt
PnJlZigpOyAvLyBUaGlzIHNpbmdsZSByZWYgcGlucyB1cyBpbiB0aGUgdGFibGUgdW50aWwgdGhl
IGRvY3VtZW50IGRpZXMuCiAKLSAgICAgICAgaW50IHYgPSBtX3NvbGlkID8gQ1NTX1ZBTF9TT0xJ
RCA6IENTU19WQUxfT1VUU0VUOworICAgICAgICBpbnQgdiA9IG1fYm9yZGVyQ29sb3JBdHRyID8g
Q1NTX1ZBTF9TT0xJRCA6IENTU19WQUxfT1VUU0VUOwogICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0
eShDU1NfUFJPUF9CT1JERVJfVE9QX1NUWUxFLCB2LCBmYWxzZSk7CiAgICAgICAgIGRlY2wtPnNl
dFByb3BlcnR5KENTU19QUk9QX0JPUkRFUl9CT1RUT01fU1RZTEUsIHYsIGZhbHNlKTsKICAgICAg
ICAgZGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9SREVSX0xFRlRfU1RZTEUsIHYsIGZhbHNl
KTsKQEAgLTQ2OCw3ICs1MjQsMTAgQEAKIAogQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIEhU
TUxUYWJsZUVsZW1lbnQ6OmdldFNoYXJlZENlbGxEZWNsKCkKIHsKLSAgICBNYXBwZWRBdHRyaWJ1
dGUgYXR0cihjZWxsYm9yZGVyQXR0ciwgbV9ub0JvcmRlciA/ICJub25lIiA6IChtX3NvbGlkID8g
InNvbGlkIiA6ICJpbnNldCIpKTsKKyAgICBNYXBwZWRBdHRyaWJ1dGUgYXR0cihjZWxsYm9yZGVy
QXR0ciwgbV9ydWxlc0F0dHIgPT0gQWxsUnVsZXMgPyAic29saWQtYWxsIiA6IAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobV9ydWxlc0F0dHIgPT0gQ29sc1J1bGVz
ID8gInNvbGlkLWNvbHMiIDogCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChtX3J1bGVzQXR0ciA9PSBSb3dzUnVsZXMgPyAic29saWQtcm93cyIgOiAoIW1fYm9yZGVy
QXR0ciA/ICJub25lIiA6IChtX2JvcmRlckNvbG9yQXR0ciA/ICJzb2xpZCIgOiAiaW5zZXQiKSkp
KSk7CisKICAgICBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbiogZGVjbCA9IGdldE1hcHBl
ZEF0dHJpYnV0ZURlY2woZVBlcnNpc3RlbnQsICZhdHRyKTsKICAgICBpZiAoIWRlY2wpIHsKICAg
ICAgICAgZGVjbCA9IG5ldyBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbigwKTsKQEAgLTQ3
NiwxOSArNTM1LDMxIEBACiAgICAgICAgIGRlY2wtPnNldE5vZGUodGhpcyk7CiAgICAgICAgIGRl
Y2wtPnNldFN0cmljdFBhcnNpbmcoZmFsc2UpOyAvLyBNYXBwZWQgYXR0cmlidXRlcyBhcmUganVz
dCBhbHdheXMgcXVpcmt5LgogICAgICAgICAKLSAgICAgICAgZGVjbC0+cmVmKCk7IC8vIFRoaXMg
c2luZ2xlIHJlZiBwaW5zIHVzIGluIHRoZSB0YWJsZSB1bnRpbCB0aGUgdGFibGUgZGllcy4KKyAg
ICAgICAgZGVjbC0+cmVmKCk7IC8vIFRoaXMgc2luZ2xlIHJlZiBwaW5zIHVzIGluIHRoZSB0YWJs
ZSB1bnRpbCB0aGUgZG9jdW1lbnQgZGllcy4KICAgICAgICAgCi0gICAgICAgIGlmIChtX25vQm9y
ZGVyKQotICAgICAgICAgICAgZGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9SREVSX1dJRFRI
LCAiMCIsIGZhbHNlKTsKLSAgICAgICAgZWxzZSB7CisgICAgICAgIGlmIChtX3J1bGVzQXR0ciA9
PSBDb2xzUnVsZXMpIHsKKyAgICAgICAgICAgIGRlY2wtPnNldFByb3BlcnR5KENTU19QUk9QX0JP
UkRFUl9MRUZUX1dJRFRILCBDU1NfVkFMX1RISU4sIGZhbHNlKTsKKyAgICAgICAgICAgIGRlY2wt
PnNldFByb3BlcnR5KENTU19QUk9QX0JPUkRFUl9SSUdIVF9XSURUSCwgQ1NTX1ZBTF9USElOLCBm
YWxzZSk7CisgICAgICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9CT1JERVJfTEVG
VF9TVFlMRSwgQ1NTX1ZBTF9TT0xJRCwgZmFsc2UpOworICAgICAgICAgICAgZGVjbC0+c2V0UHJv
cGVydHkoQ1NTX1BST1BfQk9SREVSX1JJR0hUX1NUWUxFLCBDU1NfVkFMX1NPTElELCBmYWxzZSk7
CisgICAgICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9CT1JERVJfQ09MT1IsICJp
bmhlcml0IiwgZmFsc2UpOworICAgICAgICB9IGVsc2UgaWYgKG1fcnVsZXNBdHRyID09IFJvd3NS
dWxlcykgeworICAgICAgICAgICAgZGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9SREVSX1RP
UF9XSURUSCwgQ1NTX1ZBTF9USElOLCBmYWxzZSk7CisgICAgICAgICAgICBkZWNsLT5zZXRQcm9w
ZXJ0eShDU1NfUFJPUF9CT1JERVJfQk9UVE9NX1dJRFRILCBDU1NfVkFMX1RISU4sIGZhbHNlKTsK
KyAgICAgICAgICAgIGRlY2wtPnNldFByb3BlcnR5KENTU19QUk9QX0JPUkRFUl9UT1BfU1RZTEUs
IENTU19WQUxfU09MSUQsIGZhbHNlKTsKKyAgICAgICAgICAgIGRlY2wtPnNldFByb3BlcnR5KENT
U19QUk9QX0JPUkRFUl9CT1RUT01fU1RZTEUsIENTU19WQUxfU09MSUQsIGZhbHNlKTsKKyAgICAg
ICAgICAgIGRlY2wtPnNldFByb3BlcnR5KENTU19QUk9QX0JPUkRFUl9DT0xPUiwgImluaGVyaXQi
LCBmYWxzZSk7CisgICAgICAgIH0gZWxzZSBpZiAobV9ib3JkZXJBdHRyIHx8IG1fcnVsZXNBdHRy
ID09IEFsbFJ1bGVzKSB7CiAgICAgICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9C
T1JERVJfV0lEVEgsICIxcHgiLCBmYWxzZSk7Ci0gICAgICAgICAgICBpbnQgdiA9IG1fc29saWQg
PyBDU1NfVkFMX1NPTElEIDogQ1NTX1ZBTF9JTlNFVDsKKyAgICAgICAgICAgICBpbnQgdiA9ICht
X2JvcmRlckNvbG9yQXR0ciB8fCBtX3J1bGVzQXR0ciA9PSBBbGxSdWxlcykgPyBDU1NfVkFMX1NP
TElEIDogQ1NTX1ZBTF9JTlNFVDsKICAgICAgICAgICAgIGRlY2wtPnNldFByb3BlcnR5KENTU19Q
Uk9QX0JPUkRFUl9UT1BfU1RZTEUsIHYsIGZhbHNlKTsKICAgICAgICAgICAgIGRlY2wtPnNldFBy
b3BlcnR5KENTU19QUk9QX0JPUkRFUl9CT1RUT01fU1RZTEUsIHYsIGZhbHNlKTsKICAgICAgICAg
ICAgIGRlY2wtPnNldFByb3BlcnR5KENTU19QUk9QX0JPUkRFUl9MRUZUX1NUWUxFLCB2LCBmYWxz
ZSk7CiAgICAgICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9CT1JERVJfUklHSFRf
U1RZTEUsIHYsIGZhbHNlKTsKICAgICAgICAgICAgIGRlY2wtPnNldFByb3BlcnR5KENTU19QUk9Q
X0JPUkRFUl9DT0xPUiwgImluaGVyaXQiLCBmYWxzZSk7CiAgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9SREVSX1dJRFRILCAi
MCIsIGZhbHNlKTsKIAogICAgICAgICBzZXRNYXBwZWRBdHRyaWJ1dGVEZWNsKGVQZXJzaXN0ZW50
LCAmYXR0ciwgZGVjbCk7CiAgICAgICAgIGRlY2wtPnNldFBhcmVudCgwKTsKQEAgLTQ5OCwxMiAr
NTY5LDQ4IEBACiAgICAgcmV0dXJuIGRlY2w7CiB9CiAKK0NTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiBIVE1MVGFibGVFbGVtZW50OjpnZXRTaGFyZWRHcm91cERlY2woYm9vbCByb3dzKQorewor
ICAgIGlmIChtX3J1bGVzQXR0ciAhPSBHcm91cHNSdWxlcykKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBNYXBwZWRBdHRyaWJ1dGUgYXR0cihydWxlc0F0dHIsIHJvd3MgPyAicm93Z3JvdXBzIiA6
ICJjb2xncm91cHMiKTsKKyAgICBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbiogZGVjbCA9
IGdldE1hcHBlZEF0dHJpYnV0ZURlY2woZVBlcnNpc3RlbnQsICZhdHRyKTsKKyAgICBpZiAoIWRl
Y2wpIHsKKyAgICAgICAgZGVjbCA9IG5ldyBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbigw
KTsKKyAgICAgICAgZGVjbC0+c2V0UGFyZW50KGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpKTsK
KyAgICAgICAgZGVjbC0+c2V0Tm9kZSh0aGlzKTsKKyAgICAgICAgZGVjbC0+c2V0U3RyaWN0UGFy
c2luZyhmYWxzZSk7IC8vIE1hcHBlZCBhdHRyaWJ1dGVzIGFyZSBqdXN0IGFsd2F5cyBxdWlya3ku
CisgICAgICAgIAorICAgICAgICBkZWNsLT5yZWYoKTsgLy8gVGhpcyBzaW5nbGUgcmVmIHBpbnMg
dXMgaW4gdGhlIHRhYmxlIHVudGlsIHRoZSBkb2N1bWVudCBkaWVzLgorICAgICAgICAKKyAgICAg
ICAgaWYgKHJvd3MpIHsKKyAgICAgICAgICAgIGRlY2wtPnNldFByb3BlcnR5KENTU19QUk9QX0JP
UkRFUl9UT1BfV0lEVEgsIENTU19WQUxfVEhJTiwgZmFsc2UpOworICAgICAgICAgICAgZGVjbC0+
c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9SREVSX0JPVFRPTV9XSURUSCwgQ1NTX1ZBTF9USElOLCBm
YWxzZSk7CisgICAgICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9CT1JERVJfVE9Q
X1NUWUxFLCBDU1NfVkFMX1NPTElELCBmYWxzZSk7CisgICAgICAgICAgICBkZWNsLT5zZXRQcm9w
ZXJ0eShDU1NfUFJPUF9CT1JERVJfQk9UVE9NX1NUWUxFLCBDU1NfVkFMX1NPTElELCBmYWxzZSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0eShDU1NfUFJP
UF9CT1JERVJfTEVGVF9XSURUSCwgQ1NTX1ZBTF9USElOLCBmYWxzZSk7CisgICAgICAgICAgICBk
ZWNsLT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9CT1JERVJfUklHSFRfV0lEVEgsIENTU19WQUxfVEhJ
TiwgZmFsc2UpOworICAgICAgICAgICAgZGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQk9SREVS
X0xFRlRfU1RZTEUsIENTU19WQUxfU09MSUQsIGZhbHNlKTsKKyAgICAgICAgICAgIGRlY2wtPnNl
dFByb3BlcnR5KENTU19QUk9QX0JPUkRFUl9SSUdIVF9TVFlMRSwgQ1NTX1ZBTF9TT0xJRCwgZmFs
c2UpOworICAgICAgICB9CisKKyAgICAgICAgc2V0TWFwcGVkQXR0cmlidXRlRGVjbChlUGVyc2lz
dGVudCwgJmF0dHIsIGRlY2wpOworICAgICAgICBkZWNsLT5zZXRQYXJlbnQoMCk7CisgICAgICAg
IGRlY2wtPnNldE5vZGUoMCk7CisgICAgICAgIGRlY2wtPnNldE1hcHBlZFN0YXRlKGVQZXJzaXN0
ZW50LCBhdHRyLm5hbWUoKSwgYXR0ci52YWx1ZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGVj
bDsKK30KKwogdm9pZCBIVE1MVGFibGVFbGVtZW50OjphdHRhY2goKQogewogICAgIGFzc2VydCgh
bV9hdHRhY2hlZCk7CiAgICAgSFRNTEVsZW1lbnQ6OmF0dGFjaCgpOwogICAgIGlmIChyZW5kZXJl
cigpICYmIHJlbmRlcmVyKCktPmlzVGFibGUoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVy
VGFibGUqPihyZW5kZXJlcigpKS0+c2V0Q2VsbFBhZGRpbmcocGFkZGluZyk7CisgICAgICAgIHN0
YXRpY19jYXN0PFJlbmRlclRhYmxlKj4ocmVuZGVyZXIoKSktPnNldENlbGxQYWRkaW5nKG1fcGFk
ZGluZyk7CiB9CiAKIGJvb2wgSFRNTFRhYmxlRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmli
dXRlICphdHRyKSBjb25zdAo=
</data>
<flag name="review"
          id="3445"
          type_id="1"
          status="+"
          setter="beidson"
    />
          </attachment>
      

    </bug>

</bugzilla>