<?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>115570</bug_id>
          
          <creation_ts>2013-05-03 12:22:46 -0700</creation_ts>
          <short_desc>Remove concept of younger and older shadow trees</short_desc>
          <delta_ts>2013-05-03 20:46:24 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
    
    <cc>philn</cc>
    
    <cc>rego+ews</cc>
    
    <cc>rniwa</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>884282</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-03 12:22:46 -0700</bug_when>
    <thetext>This confusing concept is not used for anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884338</commentid>
    <comment_count>1</comment_count>
      <attachid>200470</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-03 14:49:43 -0700</bug_when>
    <thetext>Created attachment 200470
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884339</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-05-03 14:51:14 -0700</bug_when>
    <thetext>Attachment 200470 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/dom/ComposedShadowTreeWalker.cpp&apos;, u&apos;Source/WebCore/dom/ComposedShadowTreeWalker.h&apos;, u&apos;Source/WebCore/dom/ContainerNodeAlgorithms.cpp&apos;, u&apos;Source/WebCore/dom/Document.cpp&apos;, u&apos;Source/WebCore/dom/Element.cpp&apos;, u&apos;Source/WebCore/dom/Element.h&apos;, u&apos;Source/WebCore/dom/Element.idl&apos;, u&apos;Source/WebCore/dom/ElementShadow.cpp&apos;, u&apos;Source/WebCore/dom/ElementShadow.h&apos;, u&apos;Source/WebCore/dom/Node.cpp&apos;, u&apos;Source/WebCore/dom/Node.h&apos;, u&apos;Source/WebCore/dom/ShadowRoot.cpp&apos;, u&apos;Source/WebCore/dom/ShadowRoot.h&apos;, u&apos;Source/WebCore/dom/TreeScopeAdopter.cpp&apos;, u&apos;Source/WebCore/html/shadow/ContentDistributor.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorDOMAgent.cpp&apos;, u&apos;Source/WebCore/page/FocusController.cpp&apos;, u&apos;Source/WebCore/rendering/RenderFileUploadControl.cpp&apos;, u&apos;Source/WebCore/svg/SVGTRefElement.cpp&apos;, u&apos;Source/WebCore/svg/SVGUseElement.cpp&apos;, u&apos;Source/WebCore/testing/Internals.cpp&apos;, u&apos;Source/WebCore/testing/Internals.h&apos;, u&apos;Source/WebCore/testing/Internals.idl&apos;]&quot; exit_code: 1
Source/WebCore/dom/Node.cpp:2069:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/dom/Node.cpp:2072:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/dom/Node.cpp:2073:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 3 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884364</commentid>
    <comment_count>3</comment_count>
      <attachid>200470</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-05-03 14:59:19 -0700</bug_when>
    <thetext>Comment on attachment 200470
patch

Attachment 200470 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/388577</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884377</commentid>
    <comment_count>4</comment_count>
      <attachid>200470</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-05-03 15:01:00 -0700</bug_when>
    <thetext>Comment on attachment 200470
patch

Attachment 200470 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/308578</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884409</commentid>
    <comment_count>5</comment_count>
      <attachid>200501</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-03 15:28:54 -0700</bug_when>
    <thetext>Created attachment 200501
build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884412</commentid>
    <comment_count>6</comment_count>
      <attachid>200501</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-05-03 15:36:14 -0700</bug_when>
    <thetext>Comment on attachment 200501
build fix

Attachment 200501 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/391580</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884414</commentid>
    <comment_count>7</comment_count>
      <attachid>200501</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-05-03 15:38:38 -0700</bug_when>
    <thetext>Comment on attachment 200501
build fix

Attachment 200501 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/337587</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884427</commentid>
    <comment_count>8</comment_count>
      <attachid>200501</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-05-03 16:00:38 -0700</bug_when>
    <thetext>Comment on attachment 200501
build fix

Attachment 200501 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/388586</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884440</commentid>
    <comment_count>9</comment_count>
      <attachid>200508</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-03 16:48:55 -0700</bug_when>
    <thetext>Created attachment 200508
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884445</commentid>
    <comment_count>10</comment_count>
      <attachid>200508</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-05-03 17:14:26 -0700</bug_when>
    <thetext>Comment on attachment 200508
another

Attachment 200508 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/337609</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884446</commentid>
    <comment_count>11</comment_count>
      <attachid>200508</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-05-03 17:19:17 -0700</bug_when>
    <thetext>Comment on attachment 200508
another

Attachment 200508 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/391596</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884463</commentid>
    <comment_count>12</comment_count>
      <attachid>200512</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-03 19:36:43 -0700</bug_when>
    <thetext>Created attachment 200512
yet another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884464</commentid>
    <comment_count>13</comment_count>
      <attachid>200513</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-03 20:03:56 -0700</bug_when>
    <thetext>Created attachment 200513
with test updates</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884465</commentid>
    <comment_count>14</comment_count>
      <attachid>200513</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-05-03 20:20:55 -0700</bug_when>
    <thetext>Comment on attachment 200513
with test updates

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

r=meh

&gt; Source/WebCore/dom/ContainerNodeAlgorithms.cpp:86
&gt; +        if (ShadowRoot* root = shadow-&gt;shadowRoot()) {

This code no longer holds a ref on the ShadowRoot.

&gt; Source/WebCore/dom/ContainerNodeAlgorithms.cpp:104
&gt; +        if (ShadowRoot* root = shadow-&gt;shadowRoot())

Ditto.

&gt; Source/WebCore/dom/ElementShadow.cpp:101
&gt; +    ASSERT(shadowRoot());
&gt; +    if (ShadowRoot* root = shadowRoot()) {

Yuck.

&gt; Source/WebCore/dom/ElementShadow.cpp:111
&gt; +    ASSERT(shadowRoot());
&gt; +    if (ShadowRoot* root = shadowRoot()) {

Bleh.

&gt; Source/WebCore/svg/SVGUseElement.cpp:397
&gt; -    if (ShadowRoot* shadowTreeRootElement =  shadow()-&gt;oldestShadowRoot())
&gt; +    if (ShadowRoot* shadowTreeRootElement =  shadow()-&gt;shadowRoot())

Please fix the whitespace here. Then re-run performance tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884467</commentid>
    <comment_count>15</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-03 20:42:38 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/149549</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884470</commentid>
    <comment_count>16</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-03 20:46:24 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Please fix the whitespace here. Then re-run performance tests.

23% faster in Methanol.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200470</attachid>
            <date>2013-05-03 14:49:43 -0700</date>
            <delta_ts>2013-05-03 15:28:54 -0700</delta_ts>
            <desc>patch</desc>
            <filename>remove-older-young.patch</filename>
            <type>text/plain</type>
            <size>41033</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0OTUzOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMyBAQAorMjAxMy0wNS0wMyAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGNvbmNlcHQgb2Yg
eW91bmdlciBhbmQgb2xkZXIgc2hhZG93IHRyZWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTU1NzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBZb3VuZ2VyIGFuZCBvbGRlciBzaGFkb3cgdHJlZXMgYXJl
IGFuIG9ic2N1cmUgY29ybmVyIG9mIHRoZSBTaGFkb3cgRE9NIHNwZWMuCisgICAgICAgIAorICAg
ICAgICBTdXBwb3J0IG9ubHkgb25lIHNoYWRvdyB0cmVlIHBlciBlbGVtZW50LiBUaGlzIHNpbXBs
aWZpZXMgbWFueSB0aGluZ3MuIAorCisgICAgICAgICogZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdh
bGtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRy
YXZlcnNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2Vy
Ojp0cmF2ZXJzZVNpYmxpbmdJbkN1cnJlbnRUcmVlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZVBhcmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlUGFy
ZW50SW5DdXJyZW50VHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVX
YWxrZXI6OnRyYXZlcnNlUGFyZW50QmFja1RvU2hhZG93Um9vdE9ySG9zdCk6CisgICAgICAgICog
ZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
ZWRTaGFkb3dUcmVlV2Fsa2VyOjphc3NlcnRQcmVjb25kaXRpb24pOgorICAgICAgICAoQ29tcG9z
ZWRTaGFkb3dUcmVlV2Fsa2VyKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZUFsZ29yaXRo
bXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlSW5zZXJ0aW9uTm90aWZpZXI6Om5v
dGlmeURlc2NlbmRhbnRJbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
aGlsZE5vZGVJbnNlcnRpb25Ob3RpZmllcjo6bm90aWZ5RGVzY2VuZGFudEluc2VydGVkSW50b1Ry
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlUmVtb3ZhbE5vdGlmaWVyOjpub3RpZnlE
ZXNjZW5kYW50UmVtb3ZlZEZyb21Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5v
ZGVSZW1vdmFsTm90aWZpZXI6Om5vdGlmeURlc2NlbmRhbnRSZW1vdmVkRnJvbVRyZWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6Y29sbGVjdEZyYW1lT3duZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OmFzc2VydENvbm5lY3RlZFN1YnJhbWVDb3VudElzQ29uc2lz
dGVudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpidWlsZEFjY2Vzc0tleU1hcCk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YXV0aG9yU2hhZG93Um9vdCk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50Ojp1c2VyQWdlbnRTaGFkb3dSb290KToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QpOgorICAgICAgICAqIGRvbS9FbGVt
ZW50Lmg6CisgICAgICAgIChFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omhh
c0F1dGhvclNoYWRvd1Jvb3QpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmlkbDoKKyAgICAgICAg
KiBkb20vRWxlbWVudFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93
OjphZGRTaGFkb3dSb290KToKKyAgICAgICAgCisgICAgICAgIEFsbG93IG9ubHkgb25lIFNoYWRv
d1Jvb3QgcGVyIEVsZW1lbnRTaGFkb3cuIFJlbW92ZSBsaW5rZWQgbGlzdCBoYW5kbGluZy4KKyAg
ICAgICAgCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjpyZW1vdmVBbGxTaGFkb3dS
b290cyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjphdHRhY2gpOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnRTaGFkb3c6OmNoaWxkTmVlZHNTdHlsZVJlY2FsYyk6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50U2hhZG93OjpuZWVkc1N0eWxlUmVjYWxjKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnRTaGFkb3c6OnJlY2FsY1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6
OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKToKKyAgICAgICAgKiBkb20vRWxlbWVudFNoYWRvdy5o
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6c2hhZG93Um9vdCk6CisgICAgICAg
IChFbGVtZW50U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6Omhvc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6OnNob3dOb2RlUGF0aEZvclRoaXMpOgorICAgICAgICAoV2ViQ29yZTo6
dHJhdmVyc2VUcmVlQW5kTWFyayk6CisgICAgICAgIChXZWJDb3JlOjpzaG93U3ViVHJlZUFjcm9z
c0ZyYW1lKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoTm9kZSk6CisgICAgICAg
ICogZG9tL1NoYWRvd1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6aW5z
ZXJ0ZWRJbnRvKToKKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5oOgorICAgICAgICAoU2hhZG93
Um9vdCk6CisgICAgICAgIAorICAgICAgICAgICAgUmVtb3ZlIExpbmtlZExpc3QgYmFzZS4KKyAg
ICAgICAgCisgICAgICAgICogZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVUb05ld1Njb3BlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRyZWVTY29wZUFkb3B0ZXI6Om1vdmVUcmVlVG9OZXdEb2N1bWVudCk6CisgICAgICAg
ICogaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnREaXN0cmlidXRvcjo6ZGlzdHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RGlzdHJpYnV0b3I6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudERp
c3RyaWJ1dG9yOjplbnN1cmVTZWxlY3RGZWF0dXJlU2V0KToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdl
bnQ6OnVuYmluZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRP
YmplY3RGb3JOb2RlKToKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGb2N1c05hdmlnYXRpb25TY29wZTo6Rm9jdXNOYXZpZ2F0aW9uU2NvcGUp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNOYXZpZ2F0aW9uU2NvcGU6OmZvY3VzTmF2aWdhdGlv
blNjb3BlT3duZWRCeVNoYWRvd0hvc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxl
VXBsb2FkQ29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbDo6dXBsb2FkQnV0dG9uKToKKyAgICAgICAgKiBzdmcvU1ZHVFJlZkVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHVFJlZkVsZW1lbnQ6OnVwZGF0ZVJlZmVyZW5jZWRUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RSZWZFbGVtZW50OjpkZXRhY2hUYXJnZXQpOgorICAgICAg
ICAqIHN2Zy9TVkdVc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1l
bnQ6OmNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVs
ZW1lbnQ6OmJ1aWxkU2hhZG93QW5kSW5zdGFuY2VUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1VzZUVsZW1lbnQ6OmJ1aWxkU2hhZG93VHJlZSk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5h
bHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjplbnN1cmVTaGFkb3dSb290KToK
KyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2hhZG93Um9vdCk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAoSW50ZXJuYWxz
KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisKIDIwMTMtMDUtMDMgIEFsZXhl
eSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gc2V0TWV0YWRh
dGFVUkwgaW5jb3JyZWN0bHkgdHJlYXRzIHBhdGggYnl0ZXMgYXMgTGF0aW4tMQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5jcHAJKHJldmlz
aW9uIDE0OTUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxr
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIE5vZGUqIENvbXBvc2VkU2hh
ZG93VHJlZVdhbGtlcjo6dHJhdmVyc2UKICAgICBBU1NFUlQobm9kZSk7CiAgICAgaWYgKGNhbkNy
b3NzVXBwZXJCb3VuZGFyeSgpKSB7CiAgICAgICAgIEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IHNo
YWRvd0Zvcihub2RlKTsKLSAgICAgICAgcmV0dXJuIHNoYWRvdyA/IHRyYXZlcnNlTGlnaHRDaGls
ZHJlbihzaGFkb3ctPnlvdW5nZXN0U2hhZG93Um9vdCgpLCBkaXJlY3Rpb24pCisgICAgICAgIHJl
dHVybiBzaGFkb3cgPyB0cmF2ZXJzZUxpZ2h0Q2hpbGRyZW4oc2hhZG93LT5zaGFkb3dSb290KCks
IGRpcmVjdGlvbikKICAgICAgICAgICAgIDogdHJhdmVyc2VMaWdodENoaWxkcmVuKG5vZGUsIGRp
cmVjdGlvbik7CiAgICAgfQogICAgIGlmIChpc1NoYWRvd0hvc3Qobm9kZSkpCkBAIC0xNzYsMjUg
KzE3Niw5IEBAIE5vZGUqIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6dHJhdmVyc2UKICAgICBB
U1NFUlQobm9kZSk7CiAgICAgaWYgKE5vZGUqIGZvdW5kID0gdHJhdmVyc2VTaWJsaW5ncyhkaXJl
Y3Rpb24gPT0gVHJhdmVyc2FsRGlyZWN0aW9uRm9yd2FyZCA/IG5vZGUtPm5leHRTaWJsaW5nKCkg
OiBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSwgZGlyZWN0aW9uKSkKICAgICAgICAgcmV0dXJuIGZv
dW5kOwotICAgIGlmIChOb2RlKiBuZXh0ID0gdHJhdmVyc2VCYWNrVG9Zb3VuZ2VyU2hhZG93Um9v
dChub2RlLCBkaXJlY3Rpb24pKQotICAgICAgICByZXR1cm4gbmV4dDsKICAgICByZXR1cm4gZXNj
YXBlRmFsbGJhY2tDb250ZW50RWxlbWVudChub2RlLCBkaXJlY3Rpb24pOwogfQogCi1Ob2RlKiBD
b21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlQmFja1RvWW91bmdlclNoYWRvd1Jvb3Qo
Y29uc3QgTm9kZSogbm9kZSwgVHJhdmVyc2FsRGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBB
U1NFUlQobm9kZSk7Ci0gICAgaWYgKG5vZGUtPnBhcmVudE5vZGUoKSAmJiBub2RlLT5wYXJlbnRO
b2RlKCktPmlzU2hhZG93Um9vdCgpKSB7Ci0gICAgICAgIFNoYWRvd1Jvb3QqIHBhcmVudFNoYWRv
d1Jvb3QgPSB0b1NoYWRvd1Jvb3Qobm9kZS0+cGFyZW50Tm9kZSgpKTsKLSAgICAgICAgaWYgKCFw
YXJlbnRTaGFkb3dSb290LT5pc1lvdW5nZXN0KCkpIHsKLSAgICAgICAgICAgIEluc2VydGlvblBv
aW50KiBhc3NpZ25lZEluc2VydGlvblBvaW50ID0gU2NvcGVDb250ZW50RGlzdHJpYnV0aW9uOjph
c3NpZ25lZFRvKHBhcmVudFNoYWRvd1Jvb3QpOwotICAgICAgICAgICAgQVNTRVJUKGFzc2lnbmVk
SW5zZXJ0aW9uUG9pbnQpOwotICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlU2libGluZ0luQ3Vy
cmVudFRyZWUoYXNzaWduZWRJbnNlcnRpb25Qb2ludCwgZGlyZWN0aW9uKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQogaW5saW5lIE5vZGUqIENvbXBvc2VkU2hhZG93VHJl
ZVdhbGtlcjo6ZXNjYXBlRmFsbGJhY2tDb250ZW50RWxlbWVudChjb25zdCBOb2RlKiBub2RlLCBU
cmF2ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIEFTU0VSVChub2RlKTsKQEAgLTIy
NywxMCArMjExLDggQEAgTm9kZSogQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZQog
ICAgIGlmIChub2RlLT5pc1BzZXVkb0VsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIG5vZGUtPnBh
cmVudE9yU2hhZG93SG9zdE5vZGUoKTsKIAotICAgIGlmICghY2FuQ3Jvc3NVcHBlckJvdW5kYXJ5
KCkgJiYgbm9kZS0+aXNTaGFkb3dSb290KCkpIHsKLSAgICAgICAgQVNTRVJUKHRvU2hhZG93Um9v
dChub2RlKS0+aXNZb3VuZ2VzdCgpKTsKKyAgICBpZiAoIWNhbkNyb3NzVXBwZXJCb3VuZGFyeSgp
ICYmIG5vZGUtPmlzU2hhZG93Um9vdCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAKICAg
ICBpZiAobm9kZUNhbkJlRGlzdHJpYnV0ZWQobm9kZSkpIHsKICAgICAgICAgaWYgKEluc2VydGlv
blBvaW50KiBpbnNlcnRpb25Qb2ludCA9IHJlc29sdmVSZXByb2plY3Rpb24obm9kZSkpIHsKQEAg
LTI0OSwyNiArMjMxLDIyIEBAIE5vZGUqIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6dHJhdmVy
c2UKIGlubGluZSBOb2RlKiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlUGFyZW50
SW5DdXJyZW50VHJlZShjb25zdCBOb2RlKiBub2RlLCBQYXJlbnRUcmF2ZXJzYWxEZXRhaWxzKiBk
ZXRhaWxzKSBjb25zdAogewogICAgIGlmIChOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnROb2Rl
KCkpCi0gICAgICAgIHJldHVybiBwYXJlbnQtPmlzU2hhZG93Um9vdCgpID8gdHJhdmVyc2VQYXJl
bnRCYWNrVG9Zb3VuZ2VyU2hhZG93Um9vdE9ySG9zdCh0b1NoYWRvd1Jvb3QocGFyZW50KSwgZGV0
YWlscykgOiB0cmF2ZXJzZU5vZGVFc2NhcGluZ0ZhbGxiYWNrQ29udGVudHMocGFyZW50LCBkZXRh
aWxzKTsKKyAgICAgICAgcmV0dXJuIHBhcmVudC0+aXNTaGFkb3dSb290KCkgPyB0cmF2ZXJzZVBh
cmVudEJhY2tUb1NoYWRvd1Jvb3RPckhvc3QodG9TaGFkb3dSb290KHBhcmVudCksIGRldGFpbHMp
IDogdHJhdmVyc2VOb2RlRXNjYXBpbmdGYWxsYmFja0NvbnRlbnRzKHBhcmVudCwgZGV0YWlscyk7
CiAgICAgcmV0dXJuIDA7CiB9CiAKLU5vZGUqIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6dHJh
dmVyc2VQYXJlbnRCYWNrVG9Zb3VuZ2VyU2hhZG93Um9vdE9ySG9zdChjb25zdCBTaGFkb3dSb290
KiBzaGFkb3dSb290LCBQYXJlbnRUcmF2ZXJzYWxEZXRhaWxzKiBkZXRhaWxzKSBjb25zdAorTm9k
ZSogQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZVBhcmVudEJhY2tUb1NoYWRvd1Jv
b3RPckhvc3QoY29uc3QgU2hhZG93Um9vdCogc2hhZG93Um9vdCwgUGFyZW50VHJhdmVyc2FsRGV0
YWlscyogZGV0YWlscykgY29uc3QKIHsKICAgICBBU1NFUlQoc2hhZG93Um9vdCk7CiAgICAgQVNT
RVJUKCFTY29wZUNvbnRlbnREaXN0cmlidXRpb246OmFzc2lnbmVkVG8oc2hhZG93Um9vdCkpOwog
Ci0gICAgaWYgKHNoYWRvd1Jvb3QtPmlzWW91bmdlc3QoKSkgewotICAgICAgICBpZiAoY2FuQ3Jv
c3NVcHBlckJvdW5kYXJ5KCkpIHsKLSAgICAgICAgICAgIGlmIChkZXRhaWxzKQotICAgICAgICAg
ICAgICAgIGRldGFpbHMtPmRpZFRyYXZlcnNlU2hhZG93Um9vdChzaGFkb3dSb290KTsKLSAgICAg
ICAgICAgIHJldHVybiBzaGFkb3dSb290LT5ob3N0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gY29uc3RfY2FzdDxTaGFkb3dSb290Kj4oc2hhZG93Um9vdCk7CisgICAgaWYgKGNhbkNy
b3NzVXBwZXJCb3VuZGFyeSgpKSB7CisgICAgICAgIGlmIChkZXRhaWxzKQorICAgICAgICAgICAg
ZGV0YWlscy0+ZGlkVHJhdmVyc2VTaGFkb3dSb290KHNoYWRvd1Jvb3QpOworICAgICAgICByZXR1
cm4gc2hhZG93Um9vdC0+aG9zdCgpOwogICAgIH0KIAotICAgIHJldHVybiAwOworICAgIHJldHVy
biBjb25zdF9jYXN0PFNoYWRvd1Jvb3QqPihzaGFkb3dSb290KTsKIH0KIAogTm9kZSogQ29tcG9z
ZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZU5leHRTaWJsaW5nKGNvbnN0IE5vZGUqIG5vZGUp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5o
CShyZXZpc2lvbiAxNDk1MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dU
cmVlV2Fsa2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDggKzg5LDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgQVNTRVJUKG1fbm9kZSk7CiAgICAgICAgIGlmIChjYW5Dcm9zc1VwcGVyQm91bmRhcnko
KSkKICAgICAgICAgICAgIEFTU0VSVCghbV9ub2RlLT5pc1NoYWRvd1Jvb3QoKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIEFTU0VSVCghbV9ub2RlLT5pc1NoYWRvd1Jvb3QoKSB8fCB0b1No
YWRvd1Jvb3QobV9ub2RlKS0+aXNZb3VuZ2VzdCgpKTsKICAgICAgICAgQVNTRVJUKCFpc0FjdGl2
ZUluc2VydGlvblBvaW50KG1fbm9kZSkpOwogI2VuZGlmCiAgICAgfQpAQCAtMTE5LDEyICsxMTcs
MTEgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgTm9kZSogdHJhdmVyc2VTaWJsaW5ncyhjb25zdCBO
b2RlKiwgVHJhdmVyc2FsRGlyZWN0aW9uKTsKICAgICBzdGF0aWMgTm9kZSogdHJhdmVyc2VEaXN0
cmlidXRlZE5vZGVzKGNvbnN0IE5vZGUqLCBjb25zdCBJbnNlcnRpb25Qb2ludCosIFRyYXZlcnNh
bERpcmVjdGlvbik7CiAKLSAgICBzdGF0aWMgTm9kZSogdHJhdmVyc2VCYWNrVG9Zb3VuZ2VyU2hh
ZG93Um9vdChjb25zdCBOb2RlKiwgVHJhdmVyc2FsRGlyZWN0aW9uKTsKICAgICBzdGF0aWMgTm9k
ZSogZXNjYXBlRmFsbGJhY2tDb250ZW50RWxlbWVudChjb25zdCBOb2RlKiwgVHJhdmVyc2FsRGly
ZWN0aW9uKTsKIAogICAgIE5vZGUqIHRyYXZlcnNlTm9kZUVzY2FwaW5nRmFsbGJhY2tDb250ZW50
cyhjb25zdCBOb2RlKiwgUGFyZW50VHJhdmVyc2FsRGV0YWlscyogPSAwKSBjb25zdDsKICAgICBO
b2RlKiB0cmF2ZXJzZVBhcmVudEluQ3VycmVudFRyZWUoY29uc3QgTm9kZSosIFBhcmVudFRyYXZl
cnNhbERldGFpbHMqID0gMCkgY29uc3Q7Ci0gICAgTm9kZSogdHJhdmVyc2VQYXJlbnRCYWNrVG9Z
b3VuZ2VyU2hhZG93Um9vdE9ySG9zdChjb25zdCBTaGFkb3dSb290KiwgUGFyZW50VHJhdmVyc2Fs
RGV0YWlscyogPSAwKSBjb25zdDsKKyAgICBOb2RlKiB0cmF2ZXJzZVBhcmVudEJhY2tUb1NoYWRv
d1Jvb3RPckhvc3QoY29uc3QgU2hhZG93Um9vdCosIFBhcmVudFRyYXZlcnNhbERldGFpbHMqID0g
MCkgY29uc3Q7CiAKICAgICBjb25zdCBOb2RlKiBtX25vZGU7CiAgICAgUG9saWN5IG1fcG9saWN5
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMu
Y3BwCShyZXZpc2lvbiAxNDk1MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9k
ZUFsZ29yaXRobXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMCArNDcsOSBAQCB2b2lkIENo
aWxkTm9kZUluc2VydGlvbk5vdGlmaWVyOjpub3RpZnlECiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChFbGVtZW50U2hhZG93KiBzaGFkb3cgPSB0b0VsZW1lbnQobm9kZSktPnNoYWRvdygpKSB7
Ci0gICAgICAgIFNoYWRvd1Jvb3RWZWN0b3Igcm9vdHMoc2hhZG93KTsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCByb290cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKG5v
ZGUtPmluRG9jdW1lbnQoKSAmJiByb290c1tpXS0+aG9zdCgpID09IG5vZGUpCi0gICAgICAgICAg
ICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50b0RvY3VtZW50KHJvb3RzW2ldLmdldCgpKTsKKyAg
ICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3ctPnNoYWRvd1Jvb3QoKSkgeworICAg
ICAgICAgICAgaWYgKG5vZGUtPmluRG9jdW1lbnQoKSAmJiByb290LT5ob3N0KCkgPT0gbm9kZSkK
KyAgICAgICAgICAgICAgICBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQocm9vdCk7CiAg
ICAgICAgIH0KICAgICB9CiB9CkBAIC02Miw3ICs2MSw3IEBAIHZvaWQgQ2hpbGROb2RlSW5zZXJ0
aW9uTm90aWZpZXI6Om5vdGlmeUQKICAgICAgICAgICAgIG5vdGlmeU5vZGVJbnNlcnRlZEludG9U
cmVlKHRvQ29udGFpbmVyTm9kZShjaGlsZCkpOwogICAgIH0KIAotICAgIGZvciAoU2hhZG93Um9v
dCogcm9vdCA9IG5vZGUtPnlvdW5nZXN0U2hhZG93Um9vdCgpOyByb290OyByb290ID0gcm9vdC0+
b2xkZXJTaGFkb3dSb290KCkpCisgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBub2RlLT5zaGFk
b3dSb290KCkpCiAgICAgICAgIG5vdGlmeU5vZGVJbnNlcnRlZEludG9UcmVlKHJvb3QpOwogfQog
CkBAIC04NCwxMCArODMsOSBAQCB2b2lkIENoaWxkTm9kZVJlbW92YWxOb3RpZmllcjo6bm90aWZ5
RGVzCiAgICAgICAgIG5vZGUtPmRvY3VtZW50KCktPnNldENTU1RhcmdldCgwKTsKIAogICAgIGlm
IChFbGVtZW50U2hhZG93KiBzaGFkb3cgPSB0b0VsZW1lbnQobm9kZSktPnNoYWRvdygpKSB7Ci0g
ICAgICAgIFNoYWRvd1Jvb3RWZWN0b3Igcm9vdHMoc2hhZG93KTsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCByb290cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKCFub2Rl
LT5pbkRvY3VtZW50KCkgJiYgcm9vdHNbaV0tPmhvc3QoKSA9PSBub2RlKQotICAgICAgICAgICAg
ICAgIG5vdGlmeU5vZGVSZW1vdmVkRnJvbURvY3VtZW50KHJvb3RzW2ldLmdldCgpKTsKKyAgICAg
ICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3ctPnNoYWRvd1Jvb3QoKSkgeworICAgICAg
ICAgICAgaWYgKCFub2RlLT5pbkRvY3VtZW50KCkgJiYgcm9vdC0+aG9zdCgpID09IG5vZGUpCisg
ICAgICAgICAgICAgICAgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQocm9vdCk7CiAgICAg
ICAgIH0KICAgICB9CiB9CkBAIC0xMDMsMTUgKzEwMSwxNCBAQCB2b2lkIENoaWxkTm9kZVJlbW92
YWxOb3RpZmllcjo6bm90aWZ5RGVzCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChFbGVtZW50
U2hhZG93KiBzaGFkb3cgPSB0b0VsZW1lbnQobm9kZSktPnNoYWRvdygpKSB7Ci0gICAgICAgIFNo
YWRvd1Jvb3RWZWN0b3Igcm9vdHMoc2hhZG93KTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCByb290cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG5vdGlmeU5vZGVSZW1vdmVkRnJv
bVRyZWUocm9vdHNbaV0uZ2V0KCkpOworICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNo
YWRvdy0+c2hhZG93Um9vdCgpKQorICAgICAgICAgICAgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tVHJl
ZShyb290KTsKICAgICB9CiB9CiAKIHZvaWQgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6Y29sbGVj
dEZyYW1lT3duZXJzKEVsZW1lbnRTaGFkb3cqIHNoYWRvdykKIHsKLSAgICBmb3IgKFNoYWRvd1Jv
b3QqIHJvb3QgPSBzaGFkb3ctPnlvdW5nZXN0U2hhZG93Um9vdCgpOyByb290OyByb290ID0gcm9v
dC0+b2xkZXJTaGFkb3dSb290KCkpCisgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3ct
PnNoYWRvd1Jvb3QoKSkKICAgICAgICAgY29sbGVjdEZyYW1lT3duZXJzKHJvb3QpOwogfQogCkBA
IC0xMjUsNyArMTIyLDcgQEAgdW5zaWduZWQgYXNzZXJ0Q29ubmVjdGVkU3VicmFtZUNvdW50SXND
bwogICAgICAgICAgICAgY291bnQrKzsKIAogICAgICAgICBpZiAoRWxlbWVudFNoYWRvdyogc2hh
ZG93ID0gdG9FbGVtZW50KG5vZGUpLT5zaGFkb3coKSkgewotICAgICAgICAgICAgZm9yIChTaGFk
b3dSb290KiByb290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgcm9vdDsgcm9vdCA9
IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKQorICAgICAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJv
b3QgPSBzaGFkb3ctPnNoYWRvd1Jvb3QoKSkKICAgICAgICAgICAgICAgICBjb3VudCArPSBhc3Nl
cnRDb25uZWN0ZWRTdWJyYW1lQ291bnRJc0NvbnNpc3RlbnQocm9vdCk7CiAgICAgICAgIH0KICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDE0OTUwNikKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxOCw3ICs3
MTgsNyBAQCB2b2lkIERvY3VtZW50OjpidWlsZEFjY2Vzc0tleU1hcChUcmVlU2NvCiAgICAgICAg
IGlmICghYWNjZXNzS2V5LmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fZWxlbWVudHNCeUFjY2Vz
c0tleS5zZXQoYWNjZXNzS2V5LmltcGwoKSwgZWxlbWVudCk7CiAKLSAgICAgICAgZm9yIChTaGFk
b3dSb290KiByb290ID0gZWxlbWVudC0+eW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3Qg
PSByb290LT5vbGRlclNoYWRvd1Jvb3QoKSkKKyAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3Qg
PSBlbGVtZW50LT5zaGFkb3dSb290KCkpCiAgICAgICAgICAgICBidWlsZEFjY2Vzc0tleU1hcChy
b290KTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNDk1
MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1MzQsMTIgKzE1MzQsMTIgQEAgUGFzc1JlZlB0cjxTaGFkb3dSb290PiBFbGVtZW50OjpjcmVh
dGVTaAogICAgIHJldHVybiBlbnN1cmVTaGFkb3coKS0+YWRkU2hhZG93Um9vdCh0aGlzLCBTaGFk
b3dSb290OjpBdXRob3JTaGFkb3dSb290KTsKIH0KIAotU2hhZG93Um9vdCogRWxlbWVudDo6c2hh
ZG93Um9vdCgpIGNvbnN0CitTaGFkb3dSb290KiBFbGVtZW50OjphdXRob3JTaGFkb3dSb290KCkg
Y29uc3QKIHsKICAgICBFbGVtZW50U2hhZG93KiBlbGVtZW50U2hhZG93ID0gc2hhZG93KCk7CiAg
ICAgaWYgKCFlbGVtZW50U2hhZG93KQogICAgICAgICByZXR1cm4gMDsKLSAgICBTaGFkb3dSb290
KiBzaGFkb3dSb290ID0gZWxlbWVudFNoYWRvdy0+eW91bmdlc3RTaGFkb3dSb290KCk7CisgICAg
U2hhZG93Um9vdCogc2hhZG93Um9vdCA9IGVsZW1lbnRTaGFkb3ctPnNoYWRvd1Jvb3QoKTsKICAg
ICBpZiAoc2hhZG93Um9vdC0+dHlwZSgpID09IFNoYWRvd1Jvb3Q6OkF1dGhvclNoYWRvd1Jvb3Qp
CiAgICAgICAgIHJldHVybiBzaGFkb3dSb290OwogICAgIHJldHVybiAwOwpAQCAtMTU0OCw3ICsx
NTQ4LDcgQEAgU2hhZG93Um9vdCogRWxlbWVudDo6c2hhZG93Um9vdCgpIGNvbnN0CiBTaGFkb3dS
b290KiBFbGVtZW50Ojp1c2VyQWdlbnRTaGFkb3dSb290KCkgY29uc3QKIHsKICAgICBpZiAoRWxl
bWVudFNoYWRvdyogZWxlbWVudFNoYWRvdyA9IHNoYWRvdygpKSB7Ci0gICAgICAgIGlmIChTaGFk
b3dSb290KiBzaGFkb3dSb290ID0gZWxlbWVudFNoYWRvdy0+b2xkZXN0U2hhZG93Um9vdCgpKSB7
CisgICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gZWxlbWVudFNoYWRvdy0+c2hh
ZG93Um9vdCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoc2hhZG93Um9vdC0+dHlwZSgpID09IFNo
YWRvd1Jvb3Q6OlVzZXJBZ2VudFNoYWRvd1Jvb3QpOwogICAgICAgICAgICAgcmV0dXJuIHNoYWRv
d1Jvb3Q7CiAgICAgICAgIH0KQEAgLTE1NTksMTAgKzE1NTksMTEgQEAgU2hhZG93Um9vdCogRWxl
bWVudDo6dXNlckFnZW50U2hhZG93Um9vdAogCiBTaGFkb3dSb290KiBFbGVtZW50OjplbnN1cmVV
c2VyQWdlbnRTaGFkb3dSb290KCkKIHsKLSAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9
IHVzZXJBZ2VudFNoYWRvd1Jvb3QoKSkKLSAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3Q7Ci0gICAg
U2hhZG93Um9vdCogc2hhZG93Um9vdCA9IGVuc3VyZVNoYWRvdygpLT5hZGRTaGFkb3dSb290KHRo
aXMsIFNoYWRvd1Jvb3Q6OlVzZXJBZ2VudFNoYWRvd1Jvb3QpOwotICAgIGRpZEFkZFVzZXJBZ2Vu
dFNoYWRvd1Jvb3Qoc2hhZG93Um9vdCk7CisgICAgU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IHVz
ZXJBZ2VudFNoYWRvd1Jvb3QoKTsKKyAgICBpZiAoIXNoYWRvd1Jvb3QpIHsKKyAgICAgICAgc2hh
ZG93Um9vdCA9IGVuc3VyZVNoYWRvdygpLT5hZGRTaGFkb3dSb290KHRoaXMsIFNoYWRvd1Jvb3Q6
OlVzZXJBZ2VudFNoYWRvd1Jvb3QpOworICAgICAgICBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290
KHNoYWRvd1Jvb3QpOworICAgIH0KICAgICByZXR1cm4gc2hhZG93Um9vdDsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiAxNDk1MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTUsOSArNDE1LDkgQEAgcHVibGljOgogICAg
IEVsZW1lbnRTaGFkb3cqIHNoYWRvdygpIGNvbnN0OwogICAgIEVsZW1lbnRTaGFkb3cqIGVuc3Vy
ZVNoYWRvdygpOwogICAgIFBhc3NSZWZQdHI8U2hhZG93Um9vdD4gY3JlYXRlU2hhZG93Um9vdChF
eGNlcHRpb25Db2RlJik7Ci0gICAgU2hhZG93Um9vdCogc2hhZG93Um9vdCgpIGNvbnN0OworICAg
IFNoYWRvd1Jvb3QqIGF1dGhvclNoYWRvd1Jvb3QoKSBjb25zdDsKIAotICAgIGJvb2wgaGFzQXV0
aG9yU2hhZG93Um9vdCgpIGNvbnN0IHsgcmV0dXJuIHNoYWRvd1Jvb3QoKTsgfQorICAgIGJvb2wg
aGFzQXV0aG9yU2hhZG93Um9vdCgpIGNvbnN0IHsgcmV0dXJuIGF1dGhvclNoYWRvd1Jvb3QoKTsg
fQogICAgIHZpcnR1YWwgdm9pZCB3aWxsQWRkQXV0aG9yU2hhZG93Um9vdCgpIHsgfQogCiAgICAg
U2hhZG93Um9vdCogdXNlckFnZW50U2hhZG93Um9vdCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmlkbAkocmV2aXNpb24gMTQ5NTA2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDcgQEAKICNpZiBkZWZpbmVkKEVO
QUJMRV9TSEFET1dfRE9NKSAmJiBFTkFCTEVfU0hBRE9XX0RPTSAmJiBkZWZpbmVkKExBTkdVQUdF
X0pBVkFTQ1JJUFQpICYmIExBTkdVQUdFX0pBVkFTQ1JJUFQKICAgICBbUmVmbGVjdD1wc2V1ZG8s
IEltcGxlbWVudGVkQXM9cHNldWRvXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHdlYmtpdFBzZXVkbzsK
ICAgICBbSW1wbGVtZW50ZWRBcz1jcmVhdGVTaGFkb3dSb290XSBTaGFkb3dSb290IHdlYmtpdENy
ZWF0ZVNoYWRvd1Jvb3QoKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICBbSW1wbGVtZW50ZWRB
cz1zaGFkb3dSb290XSByZWFkb25seSBhdHRyaWJ1dGUgU2hhZG93Um9vdCB3ZWJraXRTaGFkb3dS
b290OworICAgIFtJbXBsZW1lbnRlZEFzPWF1dGhvclNoYWRvd1Jvb3RdIHJlYWRvbmx5IGF0dHJp
YnV0ZSBTaGFkb3dSb290IHdlYmtpdFNoYWRvd1Jvb3Q7CiAgICAgW0ltcGxlbWVudGVkQXM9aW5z
ZXJ0aW9uUGFyZW50Rm9yQmluZGluZ10gcmVhZG9ubHkgYXR0cmlidXRlIE5vZGUgd2Via2l0SW5z
ZXJ0aW9uUGFyZW50OwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
U2hhZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRv
dy5jcHAJKHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hh
ZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTMgKzM0LDEzIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogU2hhZG93Um9vdCogRWxlbWVudFNoYWRvdzo6YWRkU2hhZG93Um9vdChFbGVtZW50
KiBzaGFkb3dIb3N0LCBTaGFkb3dSb290OjpTaGFkb3dSb290VHlwZSB0eXBlKQogewotICAgIFJl
ZlB0cjxTaGFkb3dSb290PiBzaGFkb3dSb290ID0gU2hhZG93Um9vdDo6Y3JlYXRlKHNoYWRvd0hv
c3QtPmRvY3VtZW50KCksIHR5cGUpOworICAgIEFTU0VSVCghbV9zaGFkb3dSb290KTsKKyAgICBt
X3NoYWRvd1Jvb3QgPSBTaGFkb3dSb290OjpjcmVhdGUoc2hhZG93SG9zdC0+ZG9jdW1lbnQoKSwg
dHlwZSk7CiAKLSAgICBzaGFkb3dSb290LT5zZXRQYXJlbnRPclNoYWRvd0hvc3ROb2RlKHNoYWRv
d0hvc3QpOwotICAgIHNoYWRvd1Jvb3QtPnNldFBhcmVudFRyZWVTY29wZShzaGFkb3dIb3N0LT50
cmVlU2NvcGUoKSk7Ci0gICAgbV9zaGFkb3dSb290cy5wdXNoKHNoYWRvd1Jvb3QuZ2V0KCkpOwor
ICAgIG1fc2hhZG93Um9vdC0+c2V0UGFyZW50T3JTaGFkb3dIb3N0Tm9kZShzaGFkb3dIb3N0KTsK
KyAgICBtX3NoYWRvd1Jvb3QtPnNldFBhcmVudFRyZWVTY29wZShzaGFkb3dIb3N0LT50cmVlU2Nv
cGUoKSk7CiAgICAgbV9kaXN0cmlidXRvci5kaWRTaGFkb3dCb3VuZGFyeUNoYW5nZShzaGFkb3dI
b3N0KTsKLSAgICBDaGlsZE5vZGVJbnNlcnRpb25Ob3RpZmllcihzaGFkb3dIb3N0KS5ub3RpZnko
c2hhZG93Um9vdC5nZXQoKSk7CisgICAgQ2hpbGROb2RlSW5zZXJ0aW9uTm90aWZpZXIoc2hhZG93
SG9zdCkubm90aWZ5KG1fc2hhZG93Um9vdC5nZXQoKSk7CiAKICAgICAvLyBFeGlzdGVuY2Ugb2Yg
c2hhZG93IHJvb3RzIHJlcXVpcmVzIHRoZSBob3N0IGFuZCBpdHMgY2hpbGRyZW4gdG8gZG8gdHJh
dmVyc2FsIHVzaW5nIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlci4KICAgICBzaGFkb3dIb3N0LT5z
ZXROZWVkc1NoYWRvd1RyZWVXYWxrZXIoKTsKQEAgLTUxLDI4ICs1MSwyNiBAQCBTaGFkb3dSb290
KiBFbGVtZW50U2hhZG93OjphZGRTaGFkb3dSb290CiAgICAgaWYgKHNoYWRvd0hvc3QtPmF0dGFj
aGVkKCkpCiAgICAgICAgIHNoYWRvd0hvc3QtPmxhenlSZWF0dGFjaCgpOwogCi0gICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRQdXNoU2hhZG93Um9vdChzaGFkb3dIb3N0LCBzaGFkb3dS
b290LmdldCgpKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFB1c2hTaGFkb3dS
b290KHNoYWRvd0hvc3QsIG1fc2hhZG93Um9vdC5nZXQoKSk7CiAKLSAgICByZXR1cm4gc2hhZG93
Um9vdC5nZXQoKTsKKyAgICByZXR1cm4gbV9zaGFkb3dSb290LmdldCgpOwogfQogCi12b2lkIEVs
ZW1lbnRTaGFkb3c6OnJlbW92ZUFsbFNoYWRvd1Jvb3RzKCkKK3ZvaWQgRWxlbWVudFNoYWRvdzo6
cmVtb3ZlU2hhZG93Um9vdCgpCiB7CiAgICAgLy8gRG9udCBwcm90ZWN0IHRoaXMgcmVmIGNvdW50
LgogICAgIEVsZW1lbnQqIHNoYWRvd0hvc3QgPSBob3N0KCk7CiAKLSAgICB3aGlsZSAoUmVmUHRy
PFNoYWRvd1Jvb3Q+IG9sZFJvb3QgPSBtX3NoYWRvd1Jvb3RzLmhlYWQoKSkgeworICAgIGlmIChS
ZWZQdHI8U2hhZG93Um9vdD4gb2xkUm9vdCA9IG1fc2hhZG93Um9vdCkgewogICAgICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxQb3BTaGFkb3dSb290KHNoYWRvd0hvc3QsIG9sZFJv
b3QuZ2V0KCkpOwogICAgICAgICBzaGFkb3dIb3N0LT5kb2N1bWVudCgpLT5yZW1vdmVGb2N1c2Vk
Tm9kZU9mU3VidHJlZShvbGRSb290LmdldCgpKTsKIAogICAgICAgICBpZiAob2xkUm9vdC0+YXR0
YWNoZWQoKSkKICAgICAgICAgICAgIG9sZFJvb3QtPmRldGFjaCgpOwogCi0gICAgICAgIG1fc2hh
ZG93Um9vdHMucmVtb3ZlSGVhZCgpOworICAgICAgICBtX3NoYWRvd1Jvb3QgPSAwOwogICAgICAg
ICBvbGRSb290LT5zZXRQYXJlbnRPclNoYWRvd0hvc3ROb2RlKDApOwogICAgICAgICBvbGRSb290
LT5zZXRQYXJlbnRUcmVlU2NvcGUoc2hhZG93SG9zdC0+ZG9jdW1lbnQoKSk7Ci0gICAgICAgIG9s
ZFJvb3QtPnNldFByZXYoMCk7Ci0gICAgICAgIG9sZFJvb3QtPnNldE5leHQoMCk7CiAgICAgICAg
IENoaWxkTm9kZVJlbW92YWxOb3RpZmllcihzaGFkb3dIb3N0KS5ub3RpZnkob2xkUm9vdC5nZXQo
KSk7CiAgICAgfQogCkBAIC04MSw5ICs3OSw5IEBAIHZvaWQgRWxlbWVudFNoYWRvdzo6cmVtb3Zl
QWxsU2hhZG93Um9vdHMKIAogdm9pZCBFbGVtZW50U2hhZG93OjphdHRhY2goKQogewotICAgIENv
bnRlbnREaXN0cmlidXRvcjo6ZW5zdXJlRGlzdHJpYnV0aW9uKHlvdW5nZXN0U2hhZG93Um9vdCgp
KTsKKyAgICBDb250ZW50RGlzdHJpYnV0b3I6OmVuc3VyZURpc3RyaWJ1dGlvbihzaGFkb3dSb290
KCkpOwogCi0gICAgZm9yIChTaGFkb3dSb290KiByb290ID0geW91bmdlc3RTaGFkb3dSb290KCk7
IHJvb3Q7IHJvb3QgPSByb290LT5vbGRlclNoYWRvd1Jvb3QoKSkgeworICAgIGlmIChTaGFkb3dS
b290KiByb290ID0gc2hhZG93Um9vdCgpKSB7CiAgICAgICAgIGlmICghcm9vdC0+YXR0YWNoZWQo
KSkKICAgICAgICAgICAgIHJvb3QtPmF0dGFjaCgpOwogICAgIH0KQEAgLTkxLDcgKzg5LDcgQEAg
dm9pZCBFbGVtZW50U2hhZG93OjphdHRhY2goKQogCiB2b2lkIEVsZW1lbnRTaGFkb3c6OmRldGFj
aCgpCiB7Ci0gICAgZm9yIChTaGFkb3dSb290KiByb290ID0geW91bmdlc3RTaGFkb3dSb290KCk7
IHJvb3Q7IHJvb3QgPSByb290LT5vbGRlclNoYWRvd1Jvb3QoKSkgeworICAgIGlmIChTaGFkb3dS
b290KiByb290ID0gc2hhZG93Um9vdCgpKSB7CiAgICAgICAgIGlmIChyb290LT5hdHRhY2hlZCgp
KQogICAgICAgICAgICAgcm9vdC0+ZGV0YWNoKCk7CiAgICAgfQpAQCAtOTksMzMgKzk3LDMzIEBA
IHZvaWQgRWxlbWVudFNoYWRvdzo6ZGV0YWNoKCkKIAogYm9vbCBFbGVtZW50U2hhZG93OjpjaGls
ZE5lZWRzU3R5bGVSZWNhbGMoKSBjb25zdAogewotICAgIEFTU0VSVCh5b3VuZ2VzdFNoYWRvd1Jv
b3QoKSk7Ci0gICAgZm9yIChTaGFkb3dSb290KiByb290ID0geW91bmdlc3RTaGFkb3dSb290KCk7
IHJvb3Q7IHJvb3QgPSByb290LT5vbGRlclNoYWRvd1Jvb3QoKSkKKyAgICBBU1NFUlQoc2hhZG93
Um9vdCgpKTsKKyAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvd1Jvb3QoKSkgewogICAg
ICAgICBpZiAocm9vdC0+Y2hpbGROZWVkc1N0eWxlUmVjYWxjKCkpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLQorICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgRWxlbWVudFNo
YWRvdzo6bmVlZHNTdHlsZVJlY2FsYygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHlvdW5nZXN0U2hh
ZG93Um9vdCgpKTsKLSAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSB5b3VuZ2VzdFNoYWRvd1Jv
b3QoKTsgcm9vdDsgcm9vdCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKQorICAgIEFTU0VSVChz
aGFkb3dSb290KCkpOworICAgIGlmIChTaGFkb3dSb290KiByb290ID0gc2hhZG93Um9vdCgpKSB7
CiAgICAgICAgIGlmIChyb290LT5uZWVkc1N0eWxlUmVjYWxjKCkpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLQorICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgRWxlbWVudFNo
YWRvdzo6cmVjYWxjU3R5bGUoTm9kZTo6U3R5bGVDaGFuZ2UgY2hhbmdlKQogewotICAgIGZvciAo
U2hhZG93Um9vdCogcm9vdCA9IHlvdW5nZXN0U2hhZG93Um9vdCgpOyByb290OyByb290ID0gcm9v
dC0+b2xkZXJTaGFkb3dSb290KCkpCisgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3dS
b290KCkpCiAgICAgICAgIHJvb3QtPnJlY2FsY1N0eWxlKGNoYW5nZSk7CiB9CiAKIHZvaWQgRWxl
bWVudFNoYWRvdzo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKQogewotICAgIGZvciAoU2hhZG93
Um9vdCogcm9vdCA9IHlvdW5nZXN0U2hhZG93Um9vdCgpOyByb290OyByb290ID0gcm9vdC0+b2xk
ZXJTaGFkb3dSb290KCkpIHsKKyAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvd1Jvb3Qo
KSkgewogICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSByb290OyBub2RlOyBub2RlID0gTm9kZVRy
YXZlcnNhbDo6bmV4dChub2RlKSkKICAgICAgICAgICAgIG5vZGUtPnJlbW92ZUFsbEV2ZW50TGlz
dGVuZXJzKCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5oCShyZXZp
c2lvbiAxNDk1MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCwxMiArNDgsMTEgQEAgcHVibGljOgogCiAgICAgfkVsZW1lbnRTaGFk
b3coKQogICAgIHsKLSAgICAgICAgcmVtb3ZlQWxsU2hhZG93Um9vdHMoKTsKKyAgICAgICAgcmVt
b3ZlU2hhZG93Um9vdCgpOwogICAgIH0KIAogICAgIEVsZW1lbnQqIGhvc3QoKSBjb25zdDsKLSAg
ICBTaGFkb3dSb290KiB5b3VuZ2VzdFNoYWRvd1Jvb3QoKSBjb25zdCB7IHJldHVybiBtX3NoYWRv
d1Jvb3RzLmhlYWQoKTsgfQotICAgIFNoYWRvd1Jvb3QqIG9sZGVzdFNoYWRvd1Jvb3QoKSBjb25z
dCB7IHJldHVybiBtX3NoYWRvd1Jvb3RzLnRhaWwoKTsgfQorICAgIFNoYWRvd1Jvb3QqIHNoYWRv
d1Jvb3QoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd1Jvb3QuZ2V0KCk7IH0KICAgICBFbGVtZW50
U2hhZG93KiBjb250YWluaW5nU2hhZG93KCkgY29uc3Q7CiAKICAgICBTaGFkb3dSb290KiBhZGRT
aGFkb3dSb290KEVsZW1lbnQqIHNoYWRvd0hvc3QsIFNoYWRvd1Jvb3Q6OlNoYWRvd1Jvb3RUeXBl
KTsKQEAgLTc2LDI0ICs3NSwyNCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEVsZW1lbnRTaGFk
b3coKSB7IH0KIAotICAgIHZvaWQgcmVtb3ZlQWxsU2hhZG93Um9vdHMoKTsKKyAgICB2b2lkIHJl
bW92ZVNoYWRvd1Jvb3QoKTsKIAotICAgIERvdWJseUxpbmtlZExpc3Q8U2hhZG93Um9vdD4gbV9z
aGFkb3dSb290czsKKyAgICBSZWZQdHI8U2hhZG93Um9vdD4gbV9zaGFkb3dSb290OwogICAgIENv
bnRlbnREaXN0cmlidXRvciBtX2Rpc3RyaWJ1dG9yOwogfTsKIAogaW5saW5lIEVsZW1lbnQqIEVs
ZW1lbnRTaGFkb3c6Omhvc3QoKSBjb25zdAogewotICAgIEFTU0VSVCghbV9zaGFkb3dSb290cy5p
c0VtcHR5KCkpOwotICAgIHJldHVybiB5b3VuZ2VzdFNoYWRvd1Jvb3QoKS0+aG9zdCgpOworICAg
IEFTU0VSVChtX3NoYWRvd1Jvb3QpOworICAgIHJldHVybiBtX3NoYWRvd1Jvb3QtPmhvc3QoKTsK
IH0KIAotaW5saW5lIFNoYWRvd1Jvb3QqIE5vZGU6OnlvdW5nZXN0U2hhZG93Um9vdCgpIGNvbnN0
CitpbmxpbmUgU2hhZG93Um9vdCogTm9kZTo6c2hhZG93Um9vdCgpIGNvbnN0CiB7CiAgICAgaWYg
KCF0aGlzLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChFbGVt
ZW50U2hhZG93KiBzaGFkb3cgPSB0b0VsZW1lbnQodGhpcyktPnNoYWRvdygpKQotICAgICAgICBy
ZXR1cm4gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsKKyAgICAgICAgcmV0dXJuIHNoYWRv
dy0+c2hhZG93Um9vdCgpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xMDQsMTUgKzEwMyw2IEBA
IGlubGluZSBFbGVtZW50U2hhZG93KiBFbGVtZW50U2hhZG93Ojpjb24KICAgICByZXR1cm4gMDsK
IH0KIAotY2xhc3MgU2hhZG93Um9vdFZlY3RvciA6IHB1YmxpYyBWZWN0b3I8UmVmUHRyPFNoYWRv
d1Jvb3Q+ID4gewotcHVibGljOgotICAgIGV4cGxpY2l0IFNoYWRvd1Jvb3RWZWN0b3IoRWxlbWVu
dFNoYWRvdyogdHJlZSkKLSAgICB7Ci0gICAgICAgIGZvciAoU2hhZG93Um9vdCogcm9vdCA9IHRy
ZWUtPnlvdW5nZXN0U2hhZG93Um9vdCgpOyByb290OyByb290ID0gcm9vdC0+b2xkZXJTaGFkb3dS
b290KCkpCi0gICAgICAgICAgICBhcHBlbmQocm9vdCk7Ci0gICAgfQotfTsKLQogaW5saW5lIEVs
ZW1lbnRTaGFkb3cqIHNoYWRvd09mUGFyZW50KGNvbnN0IE5vZGUqIG5vZGUpCiB7CiAgICAgaWYg
KCFub2RlKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTQ5NTA2KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDEsMTUgKzgwMSw2IEBA
IGJvb2wgTm9kZTo6aGFzTm9uRW1wdHlCb3VuZGluZ0JveCgpIGNvbnMKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWlubGluZSBzdGF0aWMgU2hhZG93Um9vdCogb2xkZXN0U2hhZG93Um9vdEZvcihj
b25zdCBOb2RlKiBub2RlKQotewotICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBpZiAoRWxlbWVudFNoYWRvdyogc2hhZG93ID0gdG9FbGVtZW50
KG5vZGUpLT5zaGFkb3coKSkKLSAgICAgICAgcmV0dXJuIHNoYWRvdy0+b2xkZXN0U2hhZG93Um9v
dCgpOwotICAgIHJldHVybiAwOwotfQotCiBpbmxpbmUgdm9pZCBOb2RlOjpzZXRTdHlsZUNoYW5n
ZShTdHlsZUNoYW5nZVR5cGUgY2hhbmdlVHlwZSkKIHsKICAgICBtX25vZGVGbGFncyA9IChtX25v
ZGVGbGFncyAmIH5TdHlsZUNoYW5nZU1hc2spIHwgY2hhbmdlVHlwZTsKQEAgLTE5NzQsNyArMTk2
NSw3IEBAIHZvaWQgTm9kZTo6c2hvd05vZGVQYXRoRm9yVGhpcygpIGNvbnN0CiAgICAgICAgIGNv
bnN0IE5vZGUqIG5vZGUgPSBjaGFpbltpbmRleCAtIDFdOwogICAgICAgICBpZiAobm9kZS0+aXNT
aGFkb3dSb290KCkpIHsKICAgICAgICAgICAgIGludCBjb3VudCA9IDA7Ci0gICAgICAgICAgICBm
b3IgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBvbGRlc3RTaGFkb3dSb290Rm9yKHRvU2hhZG93
Um9vdChub2RlKS0+aG9zdCgpKTsgc2hhZG93Um9vdCAmJiBzaGFkb3dSb290ICE9IG5vZGU7IHNo
YWRvd1Jvb3QgPSBzaGFkb3dSb290LT55b3VuZ2VyU2hhZG93Um9vdCgpKQorICAgICAgICAgICAg
Zm9yIChjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290ID0gdG9TaGFkb3dSb290KG5vZGUpOyBz
aGFkb3dSb290ICYmIHNoYWRvd1Jvb3QgIT0gbm9kZTsgc2hhZG93Um9vdCA9IHNoYWRvd1Jvb3Qt
PnNoYWRvd1Jvb3QoKSkKICAgICAgICAgICAgICAgICArK2NvdW50OwogICAgICAgICAgICAgZnBy
aW50ZihzdGRlcnIsICIvI3NoYWRvdy1yb290WyVkXSIsIGNvdW50KTsKICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtMjAyOCwxMSArMjAxOSwxMCBAQCBzdGF0aWMgdm9pZCB0cmF2ZXJzZVRyZWVB
bmRNYXJrKGNvbnN0IFN0CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCBpbmRlbnQudG9T
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgbm9kZS0+c2hvd05vZGUoKTsKICAgICAg
ICAgaW5kZW50LmFwcGVuZCgnXHQnKTsKLSAgICAgICAgaWYgKG5vZGUtPmlzU2hhZG93Um9vdCgp
KSB7Ci0gICAgICAgICAgICBpZiAoU2hhZG93Um9vdCogeW91bmdlclNoYWRvd1Jvb3QgPSB0b1No
YWRvd1Jvb3Qobm9kZSktPnlvdW5nZXJTaGFkb3dSb290KCkpCi0gICAgICAgICAgICAgICAgdHJh
dmVyc2VUcmVlQW5kTWFyayhpbmRlbnQudG9TdHJpbmcoKSwgeW91bmdlclNoYWRvd1Jvb3QsIG1h
cmtlZE5vZGUxLCBtYXJrZWRMYWJlbDEsIG1hcmtlZE5vZGUyLCBtYXJrZWRMYWJlbDIpOwotICAg
ICAgICB9IGVsc2UgaWYgKFNoYWRvd1Jvb3QqIG9sZGVzdFNoYWRvd1Jvb3QgPSBvbGRlc3RTaGFk
b3dSb290Rm9yKG5vZGUpKQotICAgICAgICAgICAgdHJhdmVyc2VUcmVlQW5kTWFyayhpbmRlbnQu
dG9TdHJpbmcoKSwgb2xkZXN0U2hhZG93Um9vdCwgbWFya2VkTm9kZTEsIG1hcmtlZExhYmVsMSwg
bWFya2VkTm9kZTIsIG1hcmtlZExhYmVsMik7CisgICAgICAgIGlmICghbm9kZS0+aXNTaGFkb3dS
b290KCkpIHsKKyAgICAgICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gbm9kZS0+
c2hhZG93Um9vdCgpKQorICAgICAgICAgICAgICAgIHRyYXZlcnNlVHJlZUFuZE1hcmsoaW5kZW50
LnRvU3RyaW5nKCksIHNoYWRvd1Jvb3QsIG1hcmtlZE5vZGUxLCBtYXJrZWRMYWJlbDEsIG1hcmtl
ZE5vZGUyLCBtYXJrZWRMYWJlbDIpOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC0yMDc2LDE0
ICsyMDY2LDExIEBAIHN0YXRpYyB2b2lkIHNob3dTdWJUcmVlQWNyb3NzRnJhbWUoY29uc3QKICAg
ICAgICAgZnB1dHMoIioiLCBzdGRlcnIpOwogICAgIGZwdXRzKGluZGVudC51dGY4KCkuZGF0YSgp
LCBzdGRlcnIpOwogICAgIG5vZGUtPnNob3dOb2RlKCk7Ci0gICAgIGlmIChub2RlLT5pc1NoYWRv
d1Jvb3QoKSkgewotICAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHlvdW5nZXJTaGFkb3dSb290ID0g
dG9TaGFkb3dSb290KG5vZGUpLT55b3VuZ2VyU2hhZG93Um9vdCgpKQotICAgICAgICAgICAgIHNo
b3dTdWJUcmVlQWNyb3NzRnJhbWUoeW91bmdlclNoYWRvd1Jvb3QsIG1hcmtlZE5vZGUsIGluZGVu
dCArICJcdCIpOwotICAgICB9IGVsc2UgeworICAgICBpZiAoIW5vZGUtPmlzU2hhZG93Um9vdCgp
KSB7CiAgICAgICAgICBpZiAobm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpKQogICAgICAgICAg
ICAgIHNob3dTdWJUcmVlQWNyb3NzRnJhbWUoc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEZyYW1lT3du
ZXJFbGVtZW50Kj4obm9kZSktPmNvbnRlbnREb2N1bWVudCgpLCBtYXJrZWROb2RlLCBpbmRlbnQg
KyAiXHQiKTsKLSAgICAgICAgIGlmIChTaGFkb3dSb290KiBvbGRlc3RTaGFkb3dSb290ID0gb2xk
ZXN0U2hhZG93Um9vdEZvcihub2RlKSkKLSAgICAgICAgICAgICBzaG93U3ViVHJlZUFjcm9zc0Zy
YW1lKG9sZGVzdFNoYWRvd1Jvb3QsIG1hcmtlZE5vZGUsIGluZGVudCArICJcdCIpOworICAgICAg
ICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBub2RlLT5zaGFkb3dSb290KCkpCisgICAg
ICAgICAgICAgc2hvd1N1YlRyZWVBY3Jvc3NGcmFtZShzaGFkb3dSb290LCBtYXJrZWROb2RlLCBp
bmRlbnQgKyAiXHQiKTsKICAgICAgfQogICAgIGZvciAoTm9kZSogY2hpbGQgPSBub2RlLT5maXJz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAgICBz
aG93U3ViVHJlZUFjcm9zc0ZyYW1lKGNoaWxkLCBtYXJrZWROb2RlLCBpbmRlbnQgKyAiXHQiKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMTQ5NTA2KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgyLDcgKzI4Miw3IEBAIHB1YmxpYzoKICAgICAv
LyBEZXByZWNhdGVkLiBTaG91bGQgdXNlIHNoYWRvd0hvc3QoKSBhbmQgY2hlY2sgdGhlIHJldHVy
biB2YWx1ZS4KICAgICBOb2RlKiBkZXByZWNhdGVkU2hhZG93QW5jZXN0b3JOb2RlKCkgY29uc3Q7
CiAgICAgU2hhZG93Um9vdCogY29udGFpbmluZ1NoYWRvd1Jvb3QoKSBjb25zdDsKLSAgICBTaGFk
b3dSb290KiB5b3VuZ2VzdFNoYWRvd1Jvb3QoKSBjb25zdDsKKyAgICBTaGFkb3dSb290KiBzaGFk
b3dSb290KCkgY29uc3Q7CiAKICAgICAvLyBSZXR1cm5zIDAsIGEgY2hpbGQgb2YgU2hhZG93Um9v
dCwgb3IgYSBsZWdhY3kgc2hhZG93IHJvb3QuCiAgICAgTm9kZSogbm9uQm91bmRhcnlTaGFkb3dU
cmVlUm9vdE5vZGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAJKHJldmlzaW9u
IDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTg0LDcgKzE4NCw3IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVl
c3QgU2hhZG8KIHsKICAgICBEb2N1bWVudEZyYWdtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9u
UG9pbnQpOwogCi0gICAgaWYgKCFpbnNlcnRpb25Qb2ludC0+aW5Eb2N1bWVudCgpIHx8ICFpc09s
ZGVzdCgpKQorICAgIGlmICghaW5zZXJ0aW9uUG9pbnQtPmluRG9jdW1lbnQoKSkKICAgICAgICAg
cmV0dXJuIEluc2VydGlvbkRvbmU7CiAKICAgICAvLyBGSVhNRTogV2hlbiBwYXJzaW5nIDx2aWRl
byBjb250cm9scz4sIGluc2VydGVkSW50bygpIGlzIGNhbGxlZCBtYW55IHRpbWVzIHdpdGhvdXQg
aW52b2tpbmcgcmVtb3ZlZEZyb20uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9v
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgJKHJldmlz
aW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDggKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRWxlbWVu
dFNoYWRvdzsKIGNsYXNzIFNjb3BlQ29udGVudERpc3RyaWJ1dGlvbjsKIAotY2xhc3MgU2hhZG93
Um9vdCA6IHB1YmxpYyBEb2N1bWVudEZyYWdtZW50LCBwdWJsaWMgVHJlZVNjb3BlLCBwdWJsaWMg
RG91Ymx5TGlua2VkTGlzdE5vZGU8U2hhZG93Um9vdD4gewotICAgIGZyaWVuZCBjbGFzcyBXVEY6
OkRvdWJseUxpbmtlZExpc3ROb2RlPFNoYWRvd1Jvb3Q+OworY2xhc3MgU2hhZG93Um9vdCA6IHB1
YmxpYyBEb2N1bWVudEZyYWdtZW50LCBwdWJsaWMgVHJlZVNjb3BlIHsKIHB1YmxpYzoKICAgICAv
LyBGSVhNRTogV2Ugd2lsbCBzdXBwb3J0IG11bHRpcGxlIHNoYWRvdyBzdWJ0cmVlcywgaG93ZXZl
ciBjdXJyZW50IGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHdvcmsgd2VsbAogICAgIC8vIGlmIGEg
c2hhZG93IHJvb3QgaXMgZHluYW1pY2FsbHkgY3JlYXRlZC4gU28gd2UgcHJvaGliaXQgbXVsdGlw
bGUgc2hhZG93IHN1YnRyZWVzCkBAIC03NCwxMiArNzMsNiBAQCBwdWJsaWM6CiAKICAgICBFbGVt
ZW50KiBhY3RpdmVFbGVtZW50KCkgY29uc3Q7CiAKLSAgICBTaGFkb3dSb290KiB5b3VuZ2VyU2hh
ZG93Um9vdCgpIGNvbnN0IHsgcmV0dXJuIHByZXYoKTsgfQotICAgIFNoYWRvd1Jvb3QqIG9sZGVy
U2hhZG93Um9vdCgpIGNvbnN0IHsgcmV0dXJuIG5leHQoKTsgfQotCi0gICAgYm9vbCBpc1lvdW5n
ZXN0KCkgY29uc3QgeyByZXR1cm4gIXlvdW5nZXJTaGFkb3dSb290KCk7IH0KLSAgICBib29sIGlz
T2xkZXN0KCkgY29uc3QgeyByZXR1cm4gIW9sZGVyU2hhZG93Um9vdCgpOyB9Ci0KICAgICB2aXJ0
dWFsIHZvaWQgYXR0YWNoKCk7CiAKICAgICB2aXJ0dWFsIEluc2VydGlvbk5vdGlmaWNhdGlvblJl
cXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUqKSBPVkVSUklERTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5jcHAJKHJldmlzaW9uIDE0OTUwNikKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzIsNyArNzIsNyBAQCB2b2lkIFRyZWVTY29wZUFkb3B0ZXI6Om1vdmVUcmVlVG9OZXdTY29wCiAg
ICAgICAgICAgICAgICAgbW92ZVRyZWVUb05ld1Njb3BlKGF0dHJzW2ldLmdldCgpKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGZvciAoU2hhZG93Um9vdCogc2hhZG93ID0gbm9kZS0+eW91bmdlc3RT
aGFkb3dSb290KCk7IHNoYWRvdzsgc2hhZG93ID0gc2hhZG93LT5vbGRlclNoYWRvd1Jvb3QoKSkg
eworICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93ID0gbm9kZS0+c2hhZG93Um9vdCgpKSB7
CiAgICAgICAgICAgICBzaGFkb3ctPnNldFBhcmVudFRyZWVTY29wZShtX25ld1Njb3BlKTsKICAg
ICAgICAgICAgIGlmICh3aWxsTW92ZVRvTmV3RG9jdW1lbnQpCiAgICAgICAgICAgICAgICAgbW92
ZVRyZWVUb05ld0RvY3VtZW50KHNoYWRvdywgb2xkRG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKQEAg
LTg2LDcgKzg2LDcgQEAgdm9pZCBUcmVlU2NvcGVBZG9wdGVyOjptb3ZlVHJlZVRvTmV3RG9jdQog
ewogICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0KG5vZGUsIHJvb3QpKSB7CiAgICAgICAgIG1vdmVOb2RlVG9OZXdEb2N1bWVudChub2Rl
LCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOwotICAgICAgICBmb3IgKFNoYWRvd1Jvb3QqIHNo
YWRvdyA9IG5vZGUtPnlvdW5nZXN0U2hhZG93Um9vdCgpOyBzaGFkb3c7IHNoYWRvdyA9IHNoYWRv
dy0+b2xkZXJTaGFkb3dSb290KCkpCisgICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3cgPSBu
b2RlLT5zaGFkb3dSb290KCkpCiAgICAgICAgICAgICBtb3ZlVHJlZVRvTmV3RG9jdW1lbnQoc2hh
ZG93LCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcAkocmV2aXNp
b24gMTQ5NTI1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDggKzIyMiw3IEBAIHZvaWQgQ29udGVudERp
c3RyaWJ1dG9yOjpkaXN0cmlidXRlKEVsZW0KICAgICBWZWN0b3I8Ym9vbD4gZGlzdHJpYnV0ZWQo
cG9vbC5zaXplKCkpOwogICAgIGRpc3RyaWJ1dGVkLmZpbGwoZmFsc2UpOwogCi0gICAgZm9yIChT
aGFkb3dSb290KiByb290ID0gaG9zdC0+eW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3Qg
PSByb290LT5vbGRlclNoYWRvd1Jvb3QoKSkgewotCisgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3Qg
PSBob3N0LT5zaGFkb3dSb290KCkpIHsKICAgICAgICAgaWYgKFNjb3BlQ29udGVudERpc3RyaWJ1
dGlvbiogc2NvcGUgPSByb290LT5zY29wZURpc3RyaWJ1dGlvbigpKSB7CiAgICAgICAgICAgICBj
b25zdCBWZWN0b3I8UmVmUHRyPEluc2VydGlvblBvaW50PiA+JiBpbnNlcnRpb25Qb2ludHMgPSBz
Y29wZS0+ZW5zdXJlSW5zZXJ0aW9uUG9pbnRMaXN0KHJvb3QpOwogICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBpbnNlcnRpb25Qb2ludHMuc2l6ZSgpOyArK2kpIHsKQEAgLTI0NCw3
ICsyNDMsNyBAQCBib29sIENvbnRlbnREaXN0cmlidXRvcjo6aW52YWxpZGF0ZShFbGVtCiAgICAg
QVNTRVJUKG5lZWRzSW52YWxpZGF0aW9uKCkpOwogICAgIGJvb2wgbmVlZHNSZWF0dGFjaCA9ICht
X3ZhbGlkaXR5ID09IFVuZGV0ZXJtaW5lZCkgfHwgIW1fbm9kZVRvSW5zZXJ0aW9uUG9pbnQuaXNF
bXB0eSgpOwogCi0gICAgZm9yIChTaGFkb3dSb290KiByb290ID0gaG9zdC0+eW91bmdlc3RTaGFk
b3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290LT5vbGRlclNoYWRvd1Jvb3QoKSkgeworICAgIGlm
IChTaGFkb3dSb290KiByb290ID0gaG9zdC0+c2hhZG93Um9vdCgpKSB7CiAgICAgICAgIGlmIChT
Y29wZUNvbnRlbnREaXN0cmlidXRpb24qIHNjb3BlID0gcm9vdC0+c2NvcGVEaXN0cmlidXRpb24o
KSkgewogICAgICAgICAgICAgc2NvcGUtPnNldEluc2VydGlvblBvaW50QXNzaWduZWRUbygwKTsK
ICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8SW5zZXJ0aW9uUG9pbnQ+ID4mIGluc2Vy
dGlvblBvaW50cyA9IHNjb3BlLT5lbnN1cmVJbnNlcnRpb25Qb2ludExpc3Qocm9vdCk7CkBAIC0z
NTgsNyArMzU3LDcgQEAgY29uc3QgU2VsZWN0UnVsZUZlYXR1cmVTZXQmIENvbnRlbnREaXN0cgog
ICAgICAgICByZXR1cm4gbV9zZWxlY3RGZWF0dXJlczsKIAogICAgIG1fc2VsZWN0RmVhdHVyZXMu
Y2xlYXIoKTsKLSAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3ctPm9sZGVzdFNoYWRv
d1Jvb3QoKTsgcm9vdDsgcm9vdCA9IHJvb3QtPnlvdW5nZXJTaGFkb3dSb290KCkpCisgICAgaWYg
KFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3ctPnNoYWRvd1Jvb3QoKSkKICAgICAgICAgY29sbGVj
dFNlbGVjdEZlYXR1cmVTZXRGcm9tKHJvb3QpOwogICAgIG1fbmVlZHNTZWxlY3RGZWF0dXJlU2V0
ID0gZmFsc2U7CiAgICAgcmV0dXJuIG1fc2VsZWN0RmVhdHVyZXM7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHJldmlzaW9uIDE0OTUw
NikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1OCw3ICszNTgsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp1
bmJpbmQoTm9kZSogbm9kCiAKICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAg
ICAgIGlmIChFbGVtZW50U2hhZG93KiBzaGFkb3cgPSB0b0VsZW1lbnQobm9kZSktPnNoYWRvdygp
KSB7Ci0gICAgICAgICAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3ctPnlvdW5nZXN0
U2hhZG93Um9vdCgpOyByb290OyByb290ID0gcm9vdC0+b2xkZXJTaGFkb3dSb290KCkpCisgICAg
ICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvdy0+c2hhZG93Um9vdCgpKQogICAg
ICAgICAgICAgICAgIHVuYmluZChyb290LCBub2Rlc01hcCk7CiAgICAgICAgIH0KICAgICB9CkBA
IC0xNDE4LDcgKzE0MTgsNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006Ok5vZGU+IElu
c3BlCiAgICAgICAgIEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IGVsZW1lbnQtPnNoYWRvdygpOwog
ICAgICAgICBpZiAoc2hhZG93KSB7CiAgICAgICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFy
cmF5PFR5cGVCdWlsZGVyOjpET006Ok5vZGU+ID4gc2hhZG93Um9vdHMgPSBUeXBlQnVpbGRlcjo6
QXJyYXk8VHlwZUJ1aWxkZXI6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOwotICAgICAgICAgICAgZm9y
IChTaGFkb3dSb290KiByb290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgcm9vdDsg
cm9vdCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKQorICAgICAgICAgICAgaWYgKFNoYWRvd1Jv
b3QqIHJvb3QgPSBzaGFkb3ctPnNoYWRvd1Jvb3QoKSkKICAgICAgICAgICAgICAgICBzaGFkb3dS
b290cy0+YWRkSXRlbShidWlsZE9iamVjdEZvck5vZGUocm9vdCwgMCwgbm9kZXNNYXApKTsKICAg
ICAgICAgICAgIHZhbHVlLT5zZXRTaGFkb3dSb290cyhzaGFkb3dSb290cyk7CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE0
OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsNyArNzAsNiBAQCBGb2N1c05hdmlnYXRpb25TY29wZTo6Rm9jdXNOYXZp
Z2F0aW9uU2NvCiAgICAgOiBtX3Jvb3RUcmVlU2NvcGUodHJlZVNjb3BlKQogewogICAgIEFTU0VS
VCh0cmVlU2NvcGUpOwotICAgIEFTU0VSVCghdHJlZVNjb3BlLT5yb290Tm9kZSgpLT5pc1NoYWRv
d1Jvb3QoKSB8fCB0b1NoYWRvd1Jvb3QodHJlZVNjb3BlLT5yb290Tm9kZSgpKS0+aXNZb3VuZ2Vz
dCgpKTsKIH0KIAogTm9kZSogRm9jdXNOYXZpZ2F0aW9uU2NvcGU6OnJvb3ROb2RlKCkgY29uc3QK
QEAgLTEwMiw3ICsxMDEsNyBAQCBGb2N1c05hdmlnYXRpb25TY29wZSBGb2N1c05hdmlnYXRpb25T
Y29wCiBGb2N1c05hdmlnYXRpb25TY29wZSBGb2N1c05hdmlnYXRpb25TY29wZTo6Zm9jdXNOYXZp
Z2F0aW9uU2NvcGVPd25lZEJ5U2hhZG93SG9zdChOb2RlKiBub2RlKQogewogICAgIEFTU0VSVChp
c1NoYWRvd0hvc3Qobm9kZSkpOwotICAgIHJldHVybiBGb2N1c05hdmlnYXRpb25TY29wZSh0b0Vs
ZW1lbnQobm9kZSktPnNoYWRvdygpLT55b3VuZ2VzdFNoYWRvd1Jvb3QoKSk7CisgICAgcmV0dXJu
IEZvY3VzTmF2aWdhdGlvblNjb3BlKHRvRWxlbWVudChub2RlKS0+c2hhZG93KCktPnNoYWRvd1Jv
b3QoKSk7CiB9CiAKIEZvY3VzTmF2aWdhdGlvblNjb3BlIEZvY3VzTmF2aWdhdGlvblNjb3BlOjpm
b2N1c05hdmlnYXRpb25TY29wZU93bmVkQnlJRnJhbWUoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBm
cmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZp
bGVVcGxvYWRDb250cm9sLmNwcAkocmV2aXNpb24gMTQ5NTA2KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjMwLDcgKzIzMCw3IEBAIEhUTUxJbnB1dEVsZW1lbnQqIFJlbmRlckZpbGVVcGxvYWRDb250cm8K
IAogICAgIEFTU0VSVChpbnB1dC0+c2hhZG93KCkpOwogCi0gICAgTm9kZSogYnV0dG9uTm9kZSA9
IGlucHV0LT5zaGFkb3coKS0+b2xkZXN0U2hhZG93Um9vdCgpLT5maXJzdENoaWxkKCk7CisgICAg
Tm9kZSogYnV0dG9uTm9kZSA9IGlucHV0LT5zaGFkb3coKS0+c2hhZG93Um9vdCgpLT5maXJzdENo
aWxkKCk7CiAgICAgcmV0dXJuIGJ1dHRvbk5vZGUgJiYgYnV0dG9uTm9kZS0+aXNIVE1MRWxlbWVu
dCgpICYmIGJ1dHRvbk5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpID8gc3RhdGljX2Nhc3Q8SFRN
TElucHV0RWxlbWVudCo+KGJ1dHRvbk5vZGUpIDogMDsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVFJlZkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNDk1MDYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNyArMTUxLDcg
QEAgdm9pZCBTVkdUUmVmRWxlbWVudDo6dXBkYXRlUmVmZXJlbmNlZFRleAogICAgICAgICB0ZXh0
Q29udGVudCA9IHRhcmdldC0+dGV4dENvbnRlbnQoKTsKIAogICAgIEFTU0VSVChzaGFkb3coKSk7
Ci0gICAgU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvdygpLT5vbGRlc3RTaGFkb3dSb290KCk7Cisg
ICAgU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvdygpLT5zaGFkb3dSb290KCk7CiAgICAgaWYgKCFy
b290LT5maXJzdENoaWxkKCkpCiAgICAgICAgIHJvb3QtPmFwcGVuZENoaWxkKFRleHQ6OmNyZWF0
ZShkb2N1bWVudCgpLCB0ZXh0Q29udGVudCksIEFTU0VSVF9OT19FWENFUFRJT04pOwogICAgIGVs
c2UgewpAQCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6OmRldGFjaFRhcmdl
dCgpCiAgICAgU3RyaW5nIGVtcHR5Q29udGVudDsKIAogICAgIEFTU0VSVChzaGFkb3coKSk7Ci0g
ICAgTm9kZSogY29udGFpbmVyID0gc2hhZG93KCktPm9sZGVzdFNoYWRvd1Jvb3QoKS0+Zmlyc3RD
aGlsZCgpOworICAgIE5vZGUqIGNvbnRhaW5lciA9IHNoYWRvdygpLT5zaGFkb3dSb290KCktPmZp
cnN0Q2hpbGQoKTsKICAgICBpZiAoY29udGFpbmVyKQogICAgICAgICBjb250YWluZXItPnNldFRl
eHRDb250ZW50KGVtcHR5Q29udGVudCwgSUdOT1JFX0VYQ0VQVElPTik7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk0LDcgKzM5
NCw3IEBAIHN0YXRpYyBib29sIHN1YnRyZWVDb250YWluc0Rpc2FsbG93ZWRFbGUKIHZvaWQgU1ZH
VXNlRWxlbWVudDo6Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKQogewogICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgdHJ5IHRvIG9wdGltaXplIHRoaXMsIHRvIGF0IGxlYXN0IGFsbG93IHBhcnRpYWwg
cmVjbG9uZXMuCi0gICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1RyZWVSb290RWxlbWVudCA9ICBz
aGFkb3coKS0+b2xkZXN0U2hhZG93Um9vdCgpKQorICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dU
cmVlUm9vdEVsZW1lbnQgPSAgc2hhZG93KCktPnNoYWRvd1Jvb3QoKSkKICAgICAgICAgc2hhZG93
VHJlZVJvb3RFbGVtZW50LT5yZW1vdmVDaGlsZHJlbigpOwogCiAgICAgaWYgKG1fdGFyZ2V0RWxl
bWVudEluc3RhbmNlKSB7CkBAIC00ODYsNyArNDg2LDcgQEAgdm9pZCBTVkdVc2VFbGVtZW50Ojpi
dWlsZFNoYWRvd0FuZEluc3RhbgogICAgIEFTU0VSVChtX3RhcmdldEVsZW1lbnRJbnN0YW5jZS0+
ZGlyZWN0VXNlRWxlbWVudCgpID09IHRoaXMpOwogICAgIEFTU0VSVChtX3RhcmdldEVsZW1lbnRJ
bnN0YW5jZS0+Y29ycmVzcG9uZGluZ0VsZW1lbnQoKSA9PSB0YXJnZXQpOwogCi0gICAgU2hhZG93
Um9vdCogc2hhZG93VHJlZVJvb3RFbGVtZW50ID0gc2hhZG93KCktPm9sZGVzdFNoYWRvd1Jvb3Qo
KTsKKyAgICBTaGFkb3dSb290KiBzaGFkb3dUcmVlUm9vdEVsZW1lbnQgPSBzaGFkb3coKS0+c2hh
ZG93Um9vdCgpOwogICAgIEFTU0VSVChzaGFkb3dUcmVlUm9vdEVsZW1lbnQpOwogCiAgICAgLy8g
QnVpbGQgc2hhZG93IHRyZWUgZnJvbSBpbnN0YW5jZSB0cmVlCkBAIC03MDgsNyArNzA4LDcgQEAg
dm9pZCBTVkdVc2VFbGVtZW50OjpidWlsZFNoYWRvd1RyZWUoU1ZHRQogICAgIGlmIChzdWJ0cmVl
Q29udGFpbnNEaXNhbGxvd2VkRWxlbWVudChuZXdDaGlsZC5nZXQoKSkpCiAgICAgICAgIHJlbW92
ZURpc2FsbG93ZWRFbGVtZW50c0Zyb21TdWJ0cmVlKG5ld0NoaWxkLmdldCgpKTsKIAotICAgIHNo
YWRvdygpLT5vbGRlc3RTaGFkb3dSb290KCktPmFwcGVuZENoaWxkKG5ld0NoaWxkLnJlbGVhc2Uo
KSk7CisgICAgc2hhZG93KCktPnNoYWRvd1Jvb3QoKS0+YXBwZW5kQ2hpbGQobmV3Q2hpbGQucmVs
ZWFzZSgpKTsKIH0KIAogdm9pZCBTVkdVc2VFbGVtZW50OjpleHBhbmRVc2VFbGVtZW50c0luU2hh
ZG93VHJlZShOb2RlKiBlbGVtZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAkocmV2aXNpb24gMTQ5NTA2KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTgsNyArNjk4LDcgQEAgSW50ZXJuYWxzOjpTaGFk
b3dSb290SWZTaGFkb3dET01FbmFibGVkTwogICAgIH0KIAogICAgIGlmIChFbGVtZW50U2hhZG93
KiBzaGFkb3cgPSBob3N0LT5zaGFkb3coKSkKLSAgICAgICAgcmV0dXJuIHNoYWRvdy0+eW91bmdl
c3RTaGFkb3dSb290KCk7CisgICAgICAgIHJldHVybiBzaGFkb3ctPnNoYWRvd1Jvb3QoKTsKIAog
ICAgIHJldHVybiBob3N0LT5jcmVhdGVTaGFkb3dSb290KGVjKS5nZXQoKTsKIH0KQEAgLTcxNCw1
NSArNzE0LDE1IEBAIEludGVybmFsczo6U2hhZG93Um9vdElmU2hhZG93RE9NRW5hYmxlZE8KIAog
SW50ZXJuYWxzOjpTaGFkb3dSb290SWZTaGFkb3dET01FbmFibGVkT3JOb2RlKiBJbnRlcm5hbHM6
OnNoYWRvd1Jvb3QoRWxlbWVudCogaG9zdCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgLy8g
RklYTUU6IEludGVybmFsczo6c2hhZG93Um9vdCgpIGluIHRlc3RzIHNob3VsZCBiZSBjb252ZXJ0
ZWQgdG8geW91bmdlc3RTaGFkb3dSb290KCkgb3Igb2xkZXN0U2hhZG93Um9vdCgpLgotICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODQ2NQotICAgIHJldHVy
biB5b3VuZ2VzdFNoYWRvd1Jvb3QoaG9zdCwgZWMpOwotfQotCi1JbnRlcm5hbHM6OlNoYWRvd1Jv
b3RJZlNoYWRvd0RPTUVuYWJsZWRPck5vZGUqIEludGVybmFsczo6eW91bmdlc3RTaGFkb3dSb290
KEVsZW1lbnQqIGhvc3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghaG9zdCkgewot
ICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotCi0gICAgaWYgKEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IGhvc3QtPnNoYWRvdygpKQotICAg
ICAgICByZXR1cm4gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsKLSAgICByZXR1cm4gMDsK
LX0KLQotSW50ZXJuYWxzOjpTaGFkb3dSb290SWZTaGFkb3dET01FbmFibGVkT3JOb2RlKiBJbnRl
cm5hbHM6Om9sZGVzdFNoYWRvd1Jvb3QoRWxlbWVudCogaG9zdCwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17CiAgICAgaWYgKCFob3N0KSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KICAgICBpZiAoRWxlbWVudFNoYWRvdyogc2hhZG93
ID0gaG9zdC0+c2hhZG93KCkpCi0gICAgICAgIHJldHVybiBzaGFkb3ctPm9sZGVzdFNoYWRvd1Jv
b3QoKTsKKyAgICAgICAgcmV0dXJuIHNoYWRvdy0+c2hhZG93Um9vdCgpOwogICAgIHJldHVybiAw
OwogfQogCi1JbnRlcm5hbHM6OlNoYWRvd1Jvb3RJZlNoYWRvd0RPTUVuYWJsZWRPck5vZGUqIElu
dGVybmFsczo6eW91bmdlclNoYWRvd1Jvb3QoTm9kZSogc2hhZG93LCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBpZiAoIXNoYWRvdyB8fCAhc2hhZG93LT5pc1NoYWRvd1Jvb3QoKSkgewotICAg
ICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRvU2hhZG93Um9vdChzaGFkb3cpLT55b3VuZ2VyU2hhZG93Um9vdCgpOwot
fQotCi1JbnRlcm5hbHM6OlNoYWRvd1Jvb3RJZlNoYWRvd0RPTUVuYWJsZWRPck5vZGUqIEludGVy
bmFsczo6b2xkZXJTaGFkb3dSb290KE5vZGUqIHNoYWRvdywgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgaWYgKCFzaGFkb3cgfHwgIXNoYWRvdy0+aXNTaGFkb3dSb290KCkpIHsKLSAgICAgICAg
ZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg
IHJldHVybiB0b1NoYWRvd1Jvb3Qoc2hhZG93KS0+b2xkZXJTaGFkb3dSb290KCk7Ci19Ci0KIFN0
cmluZyBJbnRlcm5hbHM6OnNoYWRvd1Jvb3RUeXBlKGNvbnN0IE5vZGUqIHJvb3QsIEV4Y2VwdGlv
bkNvZGUmIGVjKSBjb25zdAogewogICAgIGlmICghcm9vdCB8fCAhcm9vdC0+aXNTaGFkb3dSb290
KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkocmV2aXNpb24gMTQ5NTA2
KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkod29ya2luZyBjb3B5KQpA
QCAtODksMTAgKzg5LDYgQEAgcHVibGljOgogICAgIFNoYWRvd1Jvb3RJZlNoYWRvd0RPTUVuYWJs
ZWRPck5vZGUqIGVuc3VyZVNoYWRvd1Jvb3QoRWxlbWVudCogaG9zdCwgRXhjZXB0aW9uQ29kZSYp
OwogICAgIFNoYWRvd1Jvb3RJZlNoYWRvd0RPTUVuYWJsZWRPck5vZGUqIGNyZWF0ZVNoYWRvd1Jv
b3QoRWxlbWVudCogaG9zdCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFNoYWRvd1Jvb3RJZlNoYWRv
d0RPTUVuYWJsZWRPck5vZGUqIHNoYWRvd1Jvb3QoRWxlbWVudCogaG9zdCwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIFNoYWRvd1Jvb3RJZlNoYWRvd0RPTUVuYWJsZWRPck5vZGUqIHlvdW5nZXN0U2hh
ZG93Um9vdChFbGVtZW50KiBob3N0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU2hhZG93Um9vdElm
U2hhZG93RE9NRW5hYmxlZE9yTm9kZSogb2xkZXN0U2hhZG93Um9vdChFbGVtZW50KiBob3N0LCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgU2hhZG93Um9vdElmU2hhZG93RE9NRW5hYmxlZE9yTm9kZSog
eW91bmdlclNoYWRvd1Jvb3QoTm9kZSogc2hhZG93LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU2hh
ZG93Um9vdElmU2hhZG93RE9NRW5hYmxlZE9yTm9kZSogb2xkZXJTaGFkb3dSb290KE5vZGUqIHNo
YWRvdywgRXhjZXB0aW9uQ29kZSYpOwogICAgIFN0cmluZyBzaGFkb3dSb290VHlwZShjb25zdCBO
b2RlKiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIGJvb2wgaGFzU2hhZG93SW5zZXJ0aW9u
UG9pbnQoY29uc3QgTm9kZSosIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICBib29sIGhhc0Nv
bnRlbnRFbGVtZW50KGNvbnN0IE5vZGUqLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCShyZXZpc2lvbiAxNDk1MDYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE3
ICs0MCwxMSBAQAogICAgIFNoYWRvd1Jvb3QgZW5zdXJlU2hhZG93Um9vdChFbGVtZW50IGhvc3Qp
IHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICAgICBTaGFkb3dSb290IGNyZWF0ZVNoYWRvd1Jvb3Qo
RWxlbWVudCBob3N0KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAgICAgU2hhZG93Um9vdCBzaGFk
b3dSb290KEVsZW1lbnQgaG9zdCkgcmFpc2VzIChET01FeGNlcHRpb24pOwotICAgIFNoYWRvd1Jv
b3QgeW91bmdlc3RTaGFkb3dSb290KEVsZW1lbnQgaG9zdCkgcmFpc2VzIChET01FeGNlcHRpb24p
OwotICAgIFNoYWRvd1Jvb3Qgb2xkZXN0U2hhZG93Um9vdChFbGVtZW50IGhvc3QpIHJhaXNlcyAo
RE9NRXhjZXB0aW9uKTsKLSAgICBTaGFkb3dSb290IHlvdW5nZXJTaGFkb3dSb290KE5vZGUgcm9v
dCkgcmFpc2VzIChET01FeGNlcHRpb24pOwogICAgIFNoYWRvd1Jvb3Qgb2xkZXJTaGFkb3dSb290
KE5vZGUgcm9vdCkgcmFpc2VzIChET01FeGNlcHRpb24pOwogI2Vsc2UKICAgICBOb2RlIGVuc3Vy
ZVNoYWRvd1Jvb3QoRWxlbWVudCBob3N0KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAgICAgTm9k
ZSBjcmVhdGVTaGFkb3dSb290KEVsZW1lbnQgaG9zdCkgcmFpc2VzIChET01FeGNlcHRpb24pOwog
ICAgIE5vZGUgc2hhZG93Um9vdChFbGVtZW50IGhvc3QpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsK
LSAgICBOb2RlIHlvdW5nZXN0U2hhZG93Um9vdChFbGVtZW50IGhvc3QpIHJhaXNlcyAoRE9NRXhj
ZXB0aW9uKTsKLSAgICBOb2RlIG9sZGVzdFNoYWRvd1Jvb3QoRWxlbWVudCBob3N0KSByYWlzZXMg
KERPTUV4Y2VwdGlvbik7Ci0gICAgTm9kZSB5b3VuZ2VyU2hhZG93Um9vdChOb2RlIHJvb3QpIHJh
aXNlcyAoRE9NRXhjZXB0aW9uKTsKICNlbmRpZgogICAgIERPTVN0cmluZyBzaGFkb3dSb290VHlw
ZShOb2RlIHJvb3QpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICAgICBib29sZWFuIGhhc1NoYWRv
d0luc2VydGlvblBvaW50KE5vZGUgcm9vdCkgcmFpc2VzIChET01FeGNlcHRpb24pOwo=
</data>
<flag name="commit-queue"
          id="221928"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200501</attachid>
            <date>2013-05-03 15:28:54 -0700</date>
            <delta_ts>2013-05-03 16:48:55 -0700</delta_ts>
            <desc>build fix</desc>
            <filename>remove-older-young-2.patch</filename>
            <type>text/plain</type>
            <size>42542</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0OTUzOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMyBAQAorMjAxMy0wNS0wMyAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGNvbmNlcHQgb2Yg
eW91bmdlciBhbmQgb2xkZXIgc2hhZG93IHRyZWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTU1NzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBZb3VuZ2VyIGFuZCBvbGRlciBzaGFkb3cgdHJlZXMgYXJl
IGFuIG9ic2N1cmUgY29ybmVyIG9mIHRoZSBTaGFkb3cgRE9NIHNwZWMuCisgICAgICAgIAorICAg
ICAgICBTdXBwb3J0IG9ubHkgb25lIHNoYWRvdyB0cmVlIHBlciBlbGVtZW50LiBUaGlzIHNpbXBs
aWZpZXMgbWFueSB0aGluZ3MuIAorCisgICAgICAgICogZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdh
bGtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRy
YXZlcnNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2Vy
Ojp0cmF2ZXJzZVNpYmxpbmdJbkN1cnJlbnRUcmVlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZVBhcmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlUGFy
ZW50SW5DdXJyZW50VHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVX
YWxrZXI6OnRyYXZlcnNlUGFyZW50QmFja1RvU2hhZG93Um9vdE9ySG9zdCk6CisgICAgICAgICog
ZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
ZWRTaGFkb3dUcmVlV2Fsa2VyOjphc3NlcnRQcmVjb25kaXRpb24pOgorICAgICAgICAoQ29tcG9z
ZWRTaGFkb3dUcmVlV2Fsa2VyKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZUFsZ29yaXRo
bXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlSW5zZXJ0aW9uTm90aWZpZXI6Om5v
dGlmeURlc2NlbmRhbnRJbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
aGlsZE5vZGVJbnNlcnRpb25Ob3RpZmllcjo6bm90aWZ5RGVzY2VuZGFudEluc2VydGVkSW50b1Ry
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlUmVtb3ZhbE5vdGlmaWVyOjpub3RpZnlE
ZXNjZW5kYW50UmVtb3ZlZEZyb21Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5v
ZGVSZW1vdmFsTm90aWZpZXI6Om5vdGlmeURlc2NlbmRhbnRSZW1vdmVkRnJvbVRyZWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6Y29sbGVjdEZyYW1lT3duZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OmFzc2VydENvbm5lY3RlZFN1YnJhbWVDb3VudElzQ29uc2lz
dGVudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpidWlsZEFjY2Vzc0tleU1hcCk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YXV0aG9yU2hhZG93Um9vdCk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50Ojp1c2VyQWdlbnRTaGFkb3dSb290KToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QpOgorICAgICAgICAqIGRvbS9FbGVt
ZW50Lmg6CisgICAgICAgIChFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omhh
c0F1dGhvclNoYWRvd1Jvb3QpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmlkbDoKKyAgICAgICAg
KiBkb20vRWxlbWVudFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93
OjphZGRTaGFkb3dSb290KToKKyAgICAgICAgCisgICAgICAgIEFsbG93IG9ubHkgb25lIFNoYWRv
d1Jvb3QgcGVyIEVsZW1lbnRTaGFkb3cuIFJlbW92ZSBsaW5rZWQgbGlzdCBoYW5kbGluZy4KKyAg
ICAgICAgCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjpyZW1vdmVBbGxTaGFkb3dS
b290cyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjphdHRhY2gpOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnRTaGFkb3c6OmNoaWxkTmVlZHNTdHlsZVJlY2FsYyk6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50U2hhZG93OjpuZWVkc1N0eWxlUmVjYWxjKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnRTaGFkb3c6OnJlY2FsY1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6
OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKToKKyAgICAgICAgKiBkb20vRWxlbWVudFNoYWRvdy5o
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6c2hhZG93Um9vdCk6CisgICAgICAg
IChFbGVtZW50U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6Omhvc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6OnNob3dOb2RlUGF0aEZvclRoaXMpOgorICAgICAgICAoV2ViQ29yZTo6
dHJhdmVyc2VUcmVlQW5kTWFyayk6CisgICAgICAgIChXZWJDb3JlOjpzaG93U3ViVHJlZUFjcm9z
c0ZyYW1lKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoTm9kZSk6CisgICAgICAg
ICogZG9tL1NoYWRvd1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6aW5z
ZXJ0ZWRJbnRvKToKKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5oOgorICAgICAgICAoU2hhZG93
Um9vdCk6CisgICAgICAgIAorICAgICAgICAgICAgUmVtb3ZlIExpbmtlZExpc3QgYmFzZS4KKyAg
ICAgICAgCisgICAgICAgICogZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVUb05ld1Njb3BlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRyZWVTY29wZUFkb3B0ZXI6Om1vdmVUcmVlVG9OZXdEb2N1bWVudCk6CisgICAgICAg
ICogaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnREaXN0cmlidXRvcjo6ZGlzdHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RGlzdHJpYnV0b3I6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudERp
c3RyaWJ1dG9yOjplbnN1cmVTZWxlY3RGZWF0dXJlU2V0KToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdl
bnQ6OnVuYmluZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRP
YmplY3RGb3JOb2RlKToKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGb2N1c05hdmlnYXRpb25TY29wZTo6Rm9jdXNOYXZpZ2F0aW9uU2NvcGUp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNOYXZpZ2F0aW9uU2NvcGU6OmZvY3VzTmF2aWdhdGlv
blNjb3BlT3duZWRCeVNoYWRvd0hvc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxl
VXBsb2FkQ29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbDo6dXBsb2FkQnV0dG9uKToKKyAgICAgICAgKiBzdmcvU1ZHVFJlZkVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHVFJlZkVsZW1lbnQ6OnVwZGF0ZVJlZmVyZW5jZWRUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RSZWZFbGVtZW50OjpkZXRhY2hUYXJnZXQpOgorICAgICAg
ICAqIHN2Zy9TVkdVc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1l
bnQ6OmNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVs
ZW1lbnQ6OmJ1aWxkU2hhZG93QW5kSW5zdGFuY2VUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1VzZUVsZW1lbnQ6OmJ1aWxkU2hhZG93VHJlZSk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5h
bHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjplbnN1cmVTaGFkb3dSb290KToK
KyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2hhZG93Um9vdCk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAoSW50ZXJuYWxz
KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisKIDIwMTMtMDUtMDMgIEFsZXhl
eSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gc2V0TWV0YWRh
dGFVUkwgaW5jb3JyZWN0bHkgdHJlYXRzIHBhdGggYnl0ZXMgYXMgTGF0aW4tMQpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDE0OTUwNikK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDcsNyArMjA3LDcgQEAgYm9vbCBTdHlsZVNjb3BlUmVzb2x2ZXI6OnN0eWxlU2hh
cmluZ0NhbgogICAgIC8vIGFkZCBhIG5ldyBmbGFnIHRvIEVsZW1lbnRTaGFkb3cgYW5kIGNhY2hl
IHdoZXRoZXIgYW55QGhvc3QgQC1ydWxlcyBhcmUKICAgICAvLyBhcHBsaWVkIHRvIHRoZSBlbGVt
ZW50IG9yIG5vdC4gU28gd2UgY2FuIGF2b2lkIGFsd2F5cyB0cmF2ZXJzaW5nCiAgICAgLy8gc2hh
ZG93IHJvb3RzLgotICAgIGZvciAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IHNoYWRvdy0+eW91
bmdlc3RTaGFkb3dSb290KCk7IHNoYWRvd1Jvb3Q7IHNoYWRvd1Jvb3QgPSBzaGFkb3dSb290LT5v
bGRlclNoYWRvd1Jvb3QoKSkgeworICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gc2hh
ZG93LT5zaGFkb3dSb290KCkpIHsKICAgICAgICAgaWYgKGF0SG9zdFJ1bGVTZXRGb3Ioc2hhZG93
Um9vdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtMjMwLDcgKzIzMCw3IEBAIHZv
aWQgU3R5bGVTY29wZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcygKICAgICAvLyBhZGQgYSBuZXcg
ZmxhZyB0byBFbGVtZW50U2hhZG93IGFuZCBjYWNoZSB3aGV0aGVyIGFueSBAaG9zdCBALXJ1bGVz
IGFyZQogICAgIC8vIGFwcGxpZWQgdG8gdGhlIGVsZW1lbnQgb3Igbm90LiBTbyB3ZSBjYW4gcXVp
Y2tseSBleGl0IHRoaXMgbWV0aG9kCiAgICAgLy8gYnkgdXNpbmcgdGhlIGZsYWcuCi0gICAgZm9y
IChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsg
c2hhZG93Um9vdDsgc2hhZG93Um9vdCA9IHNoYWRvd1Jvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7
IAorICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gc2hhZG93LT5zaGFkb3dSb290KCkp
IHsKICAgICAgICAgaWYgKFJ1bGVTZXQqIHJ1bGVTZXQgPSBhdEhvc3RSdWxlU2V0Rm9yKHNoYWRv
d1Jvb3QpKQogICAgICAgICAgICAgbWF0Y2hlZFJ1bGVzLmFwcGVuZChydWxlU2V0KTsKICAgICAg
ICAgaWYgKCFTY29wZUNvbnRlbnREaXN0cmlidXRpb246Omhhc1NoYWRvd0VsZW1lbnQoc2hhZG93
Um9vdCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVl
V2Fsa2VyLmNwcAkocmV2aXNpb24gMTQ5NTI1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbXBv
c2VkU2hhZG93VHJlZVdhbGtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDcgQEAg
Tm9kZSogQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZQogICAgIEFTU0VSVChub2Rl
KTsKICAgICBpZiAoY2FuQ3Jvc3NVcHBlckJvdW5kYXJ5KCkpIHsKICAgICAgICAgRWxlbWVudFNo
YWRvdyogc2hhZG93ID0gc2hhZG93Rm9yKG5vZGUpOwotICAgICAgICByZXR1cm4gc2hhZG93ID8g
dHJhdmVyc2VMaWdodENoaWxkcmVuKHNoYWRvdy0+eW91bmdlc3RTaGFkb3dSb290KCksIGRpcmVj
dGlvbikKKyAgICAgICAgcmV0dXJuIHNoYWRvdyA/IHRyYXZlcnNlTGlnaHRDaGlsZHJlbihzaGFk
b3ctPnNoYWRvd1Jvb3QoKSwgZGlyZWN0aW9uKQogICAgICAgICAgICAgOiB0cmF2ZXJzZUxpZ2h0
Q2hpbGRyZW4obm9kZSwgZGlyZWN0aW9uKTsKICAgICB9CiAgICAgaWYgKGlzU2hhZG93SG9zdChu
b2RlKSkKQEAgLTE3NiwyNSArMTc2LDkgQEAgTm9kZSogQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2Vy
Ojp0cmF2ZXJzZQogICAgIEFTU0VSVChub2RlKTsKICAgICBpZiAoTm9kZSogZm91bmQgPSB0cmF2
ZXJzZVNpYmxpbmdzKGRpcmVjdGlvbiA9PSBUcmF2ZXJzYWxEaXJlY3Rpb25Gb3J3YXJkID8gbm9k
ZS0+bmV4dFNpYmxpbmcoKSA6IG5vZGUtPnByZXZpb3VzU2libGluZygpLCBkaXJlY3Rpb24pKQog
ICAgICAgICByZXR1cm4gZm91bmQ7Ci0gICAgaWYgKE5vZGUqIG5leHQgPSB0cmF2ZXJzZUJhY2tU
b1lvdW5nZXJTaGFkb3dSb290KG5vZGUsIGRpcmVjdGlvbikpCi0gICAgICAgIHJldHVybiBuZXh0
OwogICAgIHJldHVybiBlc2NhcGVGYWxsYmFja0NvbnRlbnRFbGVtZW50KG5vZGUsIGRpcmVjdGlv
bik7CiB9CiAKLU5vZGUqIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6dHJhdmVyc2VCYWNrVG9Z
b3VuZ2VyU2hhZG93Um9vdChjb25zdCBOb2RlKiBub2RlLCBUcmF2ZXJzYWxEaXJlY3Rpb24gZGly
ZWN0aW9uKQotewotICAgIEFTU0VSVChub2RlKTsKLSAgICBpZiAobm9kZS0+cGFyZW50Tm9kZSgp
ICYmIG5vZGUtPnBhcmVudE5vZGUoKS0+aXNTaGFkb3dSb290KCkpIHsKLSAgICAgICAgU2hhZG93
Um9vdCogcGFyZW50U2hhZG93Um9vdCA9IHRvU2hhZG93Um9vdChub2RlLT5wYXJlbnROb2RlKCkp
OwotICAgICAgICBpZiAoIXBhcmVudFNoYWRvd1Jvb3QtPmlzWW91bmdlc3QoKSkgewotICAgICAg
ICAgICAgSW5zZXJ0aW9uUG9pbnQqIGFzc2lnbmVkSW5zZXJ0aW9uUG9pbnQgPSBTY29wZUNvbnRl
bnREaXN0cmlidXRpb246OmFzc2lnbmVkVG8ocGFyZW50U2hhZG93Um9vdCk7Ci0gICAgICAgICAg
ICBBU1NFUlQoYXNzaWduZWRJbnNlcnRpb25Qb2ludCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJh
dmVyc2VTaWJsaW5nSW5DdXJyZW50VHJlZShhc3NpZ25lZEluc2VydGlvblBvaW50LCBkaXJlY3Rp
b24pOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCiBpbmxpbmUgTm9kZSog
Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjplc2NhcGVGYWxsYmFja0NvbnRlbnRFbGVtZW50KGNv
bnN0IE5vZGUqIG5vZGUsIFRyYXZlcnNhbERpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgQVNT
RVJUKG5vZGUpOwpAQCAtMjI3LDEwICsyMTEsOCBAQCBOb2RlKiBDb21wb3NlZFNoYWRvd1RyZWVX
YWxrZXI6OnRyYXZlcnNlCiAgICAgaWYgKG5vZGUtPmlzUHNldWRvRWxlbWVudCgpKQogICAgICAg
ICByZXR1cm4gbm9kZS0+cGFyZW50T3JTaGFkb3dIb3N0Tm9kZSgpOwogCi0gICAgaWYgKCFjYW5D
cm9zc1VwcGVyQm91bmRhcnkoKSAmJiBub2RlLT5pc1NoYWRvd1Jvb3QoKSkgewotICAgICAgICBB
U1NFUlQodG9TaGFkb3dSb290KG5vZGUpLT5pc1lvdW5nZXN0KCkpOworICAgIGlmICghY2FuQ3Jv
c3NVcHBlckJvdW5kYXJ5KCkgJiYgbm9kZS0+aXNTaGFkb3dSb290KCkpCiAgICAgICAgIHJldHVy
biAwOwotICAgIH0KIAogICAgIGlmIChub2RlQ2FuQmVEaXN0cmlidXRlZChub2RlKSkgewogICAg
ICAgICBpZiAoSW5zZXJ0aW9uUG9pbnQqIGluc2VydGlvblBvaW50ID0gcmVzb2x2ZVJlcHJvamVj
dGlvbihub2RlKSkgewpAQCAtMjQ5LDI2ICsyMzEsMjIgQEAgTm9kZSogQ29tcG9zZWRTaGFkb3dU
cmVlV2Fsa2VyOjp0cmF2ZXJzZQogaW5saW5lIE5vZGUqIENvbXBvc2VkU2hhZG93VHJlZVdhbGtl
cjo6dHJhdmVyc2VQYXJlbnRJbkN1cnJlbnRUcmVlKGNvbnN0IE5vZGUqIG5vZGUsIFBhcmVudFRy
YXZlcnNhbERldGFpbHMqIGRldGFpbHMpIGNvbnN0CiB7CiAgICAgaWYgKE5vZGUqIHBhcmVudCA9
IG5vZGUtPnBhcmVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIHBhcmVudC0+aXNTaGFkb3dSb290
KCkgPyB0cmF2ZXJzZVBhcmVudEJhY2tUb1lvdW5nZXJTaGFkb3dSb290T3JIb3N0KHRvU2hhZG93
Um9vdChwYXJlbnQpLCBkZXRhaWxzKSA6IHRyYXZlcnNlTm9kZUVzY2FwaW5nRmFsbGJhY2tDb250
ZW50cyhwYXJlbnQsIGRldGFpbHMpOworICAgICAgICByZXR1cm4gcGFyZW50LT5pc1NoYWRvd1Jv
b3QoKSA/IHRyYXZlcnNlUGFyZW50QmFja1RvU2hhZG93Um9vdE9ySG9zdCh0b1NoYWRvd1Jvb3Qo
cGFyZW50KSwgZGV0YWlscykgOiB0cmF2ZXJzZU5vZGVFc2NhcGluZ0ZhbGxiYWNrQ29udGVudHMo
cGFyZW50LCBkZXRhaWxzKTsKICAgICByZXR1cm4gMDsKIH0KIAotTm9kZSogQ29tcG9zZWRTaGFk
b3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZVBhcmVudEJhY2tUb1lvdW5nZXJTaGFkb3dSb290T3JIb3N0
KGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QsIFBhcmVudFRyYXZlcnNhbERldGFpbHMqIGRl
dGFpbHMpIGNvbnN0CitOb2RlKiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlUGFy
ZW50QmFja1RvU2hhZG93Um9vdE9ySG9zdChjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290LCBQ
YXJlbnRUcmF2ZXJzYWxEZXRhaWxzKiBkZXRhaWxzKSBjb25zdAogewogICAgIEFTU0VSVChzaGFk
b3dSb290KTsKICAgICBBU1NFUlQoIVNjb3BlQ29udGVudERpc3RyaWJ1dGlvbjo6YXNzaWduZWRU
byhzaGFkb3dSb290KSk7CiAKLSAgICBpZiAoc2hhZG93Um9vdC0+aXNZb3VuZ2VzdCgpKSB7Ci0g
ICAgICAgIGlmIChjYW5Dcm9zc1VwcGVyQm91bmRhcnkoKSkgewotICAgICAgICAgICAgaWYgKGRl
dGFpbHMpCi0gICAgICAgICAgICAgICAgZGV0YWlscy0+ZGlkVHJhdmVyc2VTaGFkb3dSb290KHNo
YWRvd1Jvb3QpOwotICAgICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PFNoYWRvd1Jvb3QqPihzaGFkb3dSb290
KTsKKyAgICBpZiAoY2FuQ3Jvc3NVcHBlckJvdW5kYXJ5KCkpIHsKKyAgICAgICAgaWYgKGRldGFp
bHMpCisgICAgICAgICAgICBkZXRhaWxzLT5kaWRUcmF2ZXJzZVNoYWRvd1Jvb3Qoc2hhZG93Um9v
dCk7CisgICAgICAgIHJldHVybiBzaGFkb3dSb290LT5ob3N0KCk7CiAgICAgfQogCi0gICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U2hhZG93Um9vdCo+KHNoYWRvd1Jvb3QpOwog
fQogCiBOb2RlKiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlTmV4dFNpYmxpbmco
Y29uc3QgTm9kZSogbm9kZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRv
d1RyZWVXYWxrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRT
aGFkb3dUcmVlV2Fsa2VyLmgJKHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODksOCArODks
NiBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQobV9ub2RlKTsKICAgICAgICAgaWYgKGNhbkNy
b3NzVXBwZXJCb3VuZGFyeSgpKQogICAgICAgICAgICAgQVNTRVJUKCFtX25vZGUtPmlzU2hhZG93
Um9vdCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJUKCFtX25vZGUtPmlzU2hh
ZG93Um9vdCgpIHx8IHRvU2hhZG93Um9vdChtX25vZGUpLT5pc1lvdW5nZXN0KCkpOwogICAgICAg
ICBBU1NFUlQoIWlzQWN0aXZlSW5zZXJ0aW9uUG9pbnQobV9ub2RlKSk7CiAjZW5kaWYKICAgICB9
CkBAIC0xMTksMTIgKzExNywxMSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBOb2RlKiB0cmF2ZXJz
ZVNpYmxpbmdzKGNvbnN0IE5vZGUqLCBUcmF2ZXJzYWxEaXJlY3Rpb24pOwogICAgIHN0YXRpYyBO
b2RlKiB0cmF2ZXJzZURpc3RyaWJ1dGVkTm9kZXMoY29uc3QgTm9kZSosIGNvbnN0IEluc2VydGlv
blBvaW50KiwgVHJhdmVyc2FsRGlyZWN0aW9uKTsKIAotICAgIHN0YXRpYyBOb2RlKiB0cmF2ZXJz
ZUJhY2tUb1lvdW5nZXJTaGFkb3dSb290KGNvbnN0IE5vZGUqLCBUcmF2ZXJzYWxEaXJlY3Rpb24p
OwogICAgIHN0YXRpYyBOb2RlKiBlc2NhcGVGYWxsYmFja0NvbnRlbnRFbGVtZW50KGNvbnN0IE5v
ZGUqLCBUcmF2ZXJzYWxEaXJlY3Rpb24pOwogCiAgICAgTm9kZSogdHJhdmVyc2VOb2RlRXNjYXBp
bmdGYWxsYmFja0NvbnRlbnRzKGNvbnN0IE5vZGUqLCBQYXJlbnRUcmF2ZXJzYWxEZXRhaWxzKiA9
IDApIGNvbnN0OwogICAgIE5vZGUqIHRyYXZlcnNlUGFyZW50SW5DdXJyZW50VHJlZShjb25zdCBO
b2RlKiwgUGFyZW50VHJhdmVyc2FsRGV0YWlscyogPSAwKSBjb25zdDsKLSAgICBOb2RlKiB0cmF2
ZXJzZVBhcmVudEJhY2tUb1lvdW5nZXJTaGFkb3dSb290T3JIb3N0KGNvbnN0IFNoYWRvd1Jvb3Qq
LCBQYXJlbnRUcmF2ZXJzYWxEZXRhaWxzKiA9IDApIGNvbnN0OworICAgIE5vZGUqIHRyYXZlcnNl
UGFyZW50QmFja1RvU2hhZG93Um9vdE9ySG9zdChjb25zdCBTaGFkb3dSb290KiwgUGFyZW50VHJh
dmVyc2FsRGV0YWlscyogPSAwKSBjb25zdDsKIAogICAgIGNvbnN0IE5vZGUqIG1fbm9kZTsKICAg
ICBQb2xpY3kgbV9wb2xpY3k7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9k
ZUFsZ29yaXRobXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWlu
ZXJOb2RlQWxnb3JpdGhtcy5jcHAJKHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEw
ICs0Nyw5IEBAIHZvaWQgQ2hpbGROb2RlSW5zZXJ0aW9uTm90aWZpZXI6Om5vdGlmeUQKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IHRvRWxlbWVudChu
b2RlKS0+c2hhZG93KCkpIHsKLSAgICAgICAgU2hhZG93Um9vdFZlY3RvciByb290cyhzaGFkb3cp
OwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJvb3RzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgICAgICBpZiAobm9kZS0+aW5Eb2N1bWVudCgpICYmIHJvb3RzW2ldLT5ob3N0KCkgPT0g
bm9kZSkKLSAgICAgICAgICAgICAgICBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQocm9v
dHNbaV0uZ2V0KCkpOworICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvdy0+c2hh
ZG93Um9vdCgpKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+aW5Eb2N1bWVudCgpICYmIHJvb3Qt
Pmhvc3QoKSA9PSBub2RlKQorICAgICAgICAgICAgICAgIG5vdGlmeU5vZGVJbnNlcnRlZEludG9E
b2N1bWVudChyb290KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTYyLDcgKzYxLDcgQEAgdm9p
ZCBDaGlsZE5vZGVJbnNlcnRpb25Ob3RpZmllcjo6bm90aWZ5RAogICAgICAgICAgICAgbm90aWZ5
Tm9kZUluc2VydGVkSW50b1RyZWUodG9Db250YWluZXJOb2RlKGNoaWxkKSk7CiAgICAgfQogCi0g
ICAgZm9yIChTaGFkb3dSb290KiByb290ID0gbm9kZS0+eW91bmdlc3RTaGFkb3dSb290KCk7IHJv
b3Q7IHJvb3QgPSByb290LT5vbGRlclNoYWRvd1Jvb3QoKSkKKyAgICBpZiAoU2hhZG93Um9vdCog
cm9vdCA9IG5vZGUtPnNoYWRvd1Jvb3QoKSkKICAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50
b1RyZWUocm9vdCk7CiB9CiAKQEAgLTg0LDEwICs4Myw5IEBAIHZvaWQgQ2hpbGROb2RlUmVtb3Zh
bE5vdGlmaWVyOjpub3RpZnlEZXMKICAgICAgICAgbm9kZS0+ZG9jdW1lbnQoKS0+c2V0Q1NTVGFy
Z2V0KDApOwogCiAgICAgaWYgKEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IHRvRWxlbWVudChub2Rl
KS0+c2hhZG93KCkpIHsKLSAgICAgICAgU2hhZG93Um9vdFZlY3RvciByb290cyhzaGFkb3cpOwot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJvb3RzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoIW5vZGUtPmluRG9jdW1lbnQoKSAmJiByb290c1tpXS0+aG9zdCgpID09IG5v
ZGUpCi0gICAgICAgICAgICAgICAgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQocm9vdHNb
aV0uZ2V0KCkpOworICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvdy0+c2hhZG93
Um9vdCgpKSB7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmluRG9jdW1lbnQoKSAmJiByb290LT5o
b3N0KCkgPT0gbm9kZSkKKyAgICAgICAgICAgICAgICBub3RpZnlOb2RlUmVtb3ZlZEZyb21Eb2N1
bWVudChyb290KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTEwMywxNSArMTAxLDE0IEBAIHZv
aWQgQ2hpbGROb2RlUmVtb3ZhbE5vdGlmaWVyOjpub3RpZnlEZXMKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IHRvRWxlbWVudChub2RlKS0+c2hhZG93
KCkpIHsKLSAgICAgICAgU2hhZG93Um9vdFZlY3RvciByb290cyhzaGFkb3cpOwotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHJvb3RzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbm90
aWZ5Tm9kZVJlbW92ZWRGcm9tVHJlZShyb290c1tpXS5nZXQoKSk7CisgICAgICAgIGlmIChTaGFk
b3dSb290KiByb290ID0gc2hhZG93LT5zaGFkb3dSb290KCkpCisgICAgICAgICAgICBub3RpZnlO
b2RlUmVtb3ZlZEZyb21UcmVlKHJvb3QpOwogICAgIH0KIH0KIAogdm9pZCBDaGlsZEZyYW1lRGlz
Y29ubmVjdG9yOjpjb2xsZWN0RnJhbWVPd25lcnMoRWxlbWVudFNoYWRvdyogc2hhZG93KQogewot
ICAgIGZvciAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvdy0+eW91bmdlc3RTaGFkb3dSb290KCk7
IHJvb3Q7IHJvb3QgPSByb290LT5vbGRlclNoYWRvd1Jvb3QoKSkKKyAgICBpZiAoU2hhZG93Um9v
dCogcm9vdCA9IHNoYWRvdy0+c2hhZG93Um9vdCgpKQogICAgICAgICBjb2xsZWN0RnJhbWVPd25l
cnMocm9vdCk7CiB9CiAKQEAgLTEyNSw3ICsxMjIsNyBAQCB1bnNpZ25lZCBhc3NlcnRDb25uZWN0
ZWRTdWJyYW1lQ291bnRJc0NvCiAgICAgICAgICAgICBjb3VudCsrOwogCiAgICAgICAgIGlmIChF
bGVtZW50U2hhZG93KiBzaGFkb3cgPSB0b0VsZW1lbnQobm9kZSktPnNoYWRvdygpKSB7Ci0gICAg
ICAgICAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3ctPnlvdW5nZXN0U2hhZG93Um9v
dCgpOyByb290OyByb290ID0gcm9vdC0+b2xkZXJTaGFkb3dSb290KCkpCisgICAgICAgICAgICBp
ZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvdy0+c2hhZG93Um9vdCgpKQogICAgICAgICAgICAg
ICAgIGNvdW50ICs9IGFzc2VydENvbm5lY3RlZFN1YnJhbWVDb3VudElzQ29uc2lzdGVudChyb290
KTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNp
b24gMTQ5NTA2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzE4LDcgKzcxOCw3IEBAIHZvaWQgRG9jdW1lbnQ6OmJ1aWxkQWNjZXNzS2V5TWFw
KFRyZWVTY28KICAgICAgICAgaWYgKCFhY2Nlc3NLZXkuaXNFbXB0eSgpKQogICAgICAgICAgICAg
bV9lbGVtZW50c0J5QWNjZXNzS2V5LnNldChhY2Nlc3NLZXkuaW1wbCgpLCBlbGVtZW50KTsKIAot
ICAgICAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSBlbGVtZW50LT55b3VuZ2VzdFNoYWRvd1Jv
b3QoKTsgcm9vdDsgcm9vdCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKQorICAgICAgICBpZiAo
U2hhZG93Um9vdCogcm9vdCA9IGVsZW1lbnQtPnNoYWRvd1Jvb3QoKSkKICAgICAgICAgICAgIGJ1
aWxkQWNjZXNzS2V5TWFwKHJvb3QpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAJKHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTUzNCwxMiArMTUzNCwxMiBAQCBQYXNzUmVmUHRyPFNoYWRvd1Jv
b3Q+IEVsZW1lbnQ6OmNyZWF0ZVNoCiAgICAgcmV0dXJuIGVuc3VyZVNoYWRvdygpLT5hZGRTaGFk
b3dSb290KHRoaXMsIFNoYWRvd1Jvb3Q6OkF1dGhvclNoYWRvd1Jvb3QpOwogfQogCi1TaGFkb3dS
b290KiBFbGVtZW50OjpzaGFkb3dSb290KCkgY29uc3QKK1NoYWRvd1Jvb3QqIEVsZW1lbnQ6OmF1
dGhvclNoYWRvd1Jvb3QoKSBjb25zdAogewogICAgIEVsZW1lbnRTaGFkb3cqIGVsZW1lbnRTaGFk
b3cgPSBzaGFkb3coKTsKICAgICBpZiAoIWVsZW1lbnRTaGFkb3cpCiAgICAgICAgIHJldHVybiAw
OwotICAgIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBlbGVtZW50U2hhZG93LT55b3VuZ2VzdFNo
YWRvd1Jvb3QoKTsKKyAgICBTaGFkb3dSb290KiBzaGFkb3dSb290ID0gZWxlbWVudFNoYWRvdy0+
c2hhZG93Um9vdCgpOwogICAgIGlmIChzaGFkb3dSb290LT50eXBlKCkgPT0gU2hhZG93Um9vdDo6
QXV0aG9yU2hhZG93Um9vdCkKICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3Q7CiAgICAgcmV0dXJu
IDA7CkBAIC0xNTQ4LDcgKzE1NDgsNyBAQCBTaGFkb3dSb290KiBFbGVtZW50OjpzaGFkb3dSb290
KCkgY29uc3QKIFNoYWRvd1Jvb3QqIEVsZW1lbnQ6OnVzZXJBZ2VudFNoYWRvd1Jvb3QoKSBjb25z
dAogewogICAgIGlmIChFbGVtZW50U2hhZG93KiBlbGVtZW50U2hhZG93ID0gc2hhZG93KCkpIHsK
LSAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBlbGVtZW50U2hhZG93LT5vbGRl
c3RTaGFkb3dSb290KCkpIHsKKyAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBl
bGVtZW50U2hhZG93LT5zaGFkb3dSb290KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChzaGFkb3dS
b290LT50eXBlKCkgPT0gU2hhZG93Um9vdDo6VXNlckFnZW50U2hhZG93Um9vdCk7CiAgICAgICAg
ICAgICByZXR1cm4gc2hhZG93Um9vdDsKICAgICAgICAgfQpAQCAtMTU1OSwxMCArMTU1OSwxMSBA
QCBTaGFkb3dSb290KiBFbGVtZW50Ojp1c2VyQWdlbnRTaGFkb3dSb290CiAKIFNoYWRvd1Jvb3Qq
IEVsZW1lbnQ6OmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKQogewotICAgIGlmIChTaGFkb3dS
b290KiBzaGFkb3dSb290ID0gdXNlckFnZW50U2hhZG93Um9vdCgpKQotICAgICAgICByZXR1cm4g
c2hhZG93Um9vdDsKLSAgICBTaGFkb3dSb290KiBzaGFkb3dSb290ID0gZW5zdXJlU2hhZG93KCkt
PmFkZFNoYWRvd1Jvb3QodGhpcywgU2hhZG93Um9vdDo6VXNlckFnZW50U2hhZG93Um9vdCk7Ci0g
ICAgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChzaGFkb3dSb290KTsKKyAgICBTaGFkb3dSb290
KiBzaGFkb3dSb290ID0gdXNlckFnZW50U2hhZG93Um9vdCgpOworICAgIGlmICghc2hhZG93Um9v
dCkgeworICAgICAgICBzaGFkb3dSb290ID0gZW5zdXJlU2hhZG93KCktPmFkZFNoYWRvd1Jvb3Qo
dGhpcywgU2hhZG93Um9vdDo6VXNlckFnZW50U2hhZG93Um9vdCk7CisgICAgICAgIGRpZEFkZFVz
ZXJBZ2VudFNoYWRvd1Jvb3Qoc2hhZG93Um9vdCk7CisgICAgfQogICAgIHJldHVybiBzaGFkb3dS
b290OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHJldmlzaW9uIDE0OTUwNikKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxNSw5ICs0MTUs
OSBAQCBwdWJsaWM6CiAgICAgRWxlbWVudFNoYWRvdyogc2hhZG93KCkgY29uc3Q7CiAgICAgRWxl
bWVudFNoYWRvdyogZW5zdXJlU2hhZG93KCk7CiAgICAgUGFzc1JlZlB0cjxTaGFkb3dSb290PiBj
cmVhdGVTaGFkb3dSb290KEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTaGFkb3dSb290KiBzaGFkb3dS
b290KCkgY29uc3Q7CisgICAgU2hhZG93Um9vdCogYXV0aG9yU2hhZG93Um9vdCgpIGNvbnN0Owog
Ci0gICAgYm9vbCBoYXNBdXRob3JTaGFkb3dSb290KCkgY29uc3QgeyByZXR1cm4gc2hhZG93Um9v
dCgpOyB9CisgICAgYm9vbCBoYXNBdXRob3JTaGFkb3dSb290KCkgY29uc3QgeyByZXR1cm4gYXV0
aG9yU2hhZG93Um9vdCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHdpbGxBZGRBdXRob3JTaGFkb3dS
b290KCkgeyB9CiAKICAgICBTaGFkb3dSb290KiB1c2VyQWdlbnRTaGFkb3dSb290KCkgY29uc3Q7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaWRsCShyZXZpc2lvbiAxNDk1MDYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsNyBA
QAogI2lmIGRlZmluZWQoRU5BQkxFX1NIQURPV19ET00pICYmIEVOQUJMRV9TSEFET1dfRE9NICYm
IGRlZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQVCkgJiYgTEFOR1VBR0VfSkFWQVNDUklQVAogICAg
IFtSZWZsZWN0PXBzZXVkbywgSW1wbGVtZW50ZWRBcz1wc2V1ZG9dIGF0dHJpYnV0ZSBET01TdHJp
bmcgd2Via2l0UHNldWRvOwogICAgIFtJbXBsZW1lbnRlZEFzPWNyZWF0ZVNoYWRvd1Jvb3RdIFNo
YWRvd1Jvb3Qgd2Via2l0Q3JlYXRlU2hhZG93Um9vdCgpIHJhaXNlcyhET01FeGNlcHRpb24pOwot
ICAgIFtJbXBsZW1lbnRlZEFzPXNoYWRvd1Jvb3RdIHJlYWRvbmx5IGF0dHJpYnV0ZSBTaGFkb3dS
b290IHdlYmtpdFNoYWRvd1Jvb3Q7CisgICAgW0ltcGxlbWVudGVkQXM9YXV0aG9yU2hhZG93Um9v
dF0gcmVhZG9ubHkgYXR0cmlidXRlIFNoYWRvd1Jvb3Qgd2Via2l0U2hhZG93Um9vdDsKICAgICBb
SW1wbGVtZW50ZWRBcz1pbnNlcnRpb25QYXJlbnRGb3JCaW5kaW5nXSByZWFkb25seSBhdHRyaWJ1
dGUgTm9kZSB3ZWJraXRJbnNlcnRpb25QYXJlbnQ7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50U2hhZG93LmNwcAkocmV2aXNpb24gMTQ5NTA2KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnRTaGFkb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMyArMzQsMTMg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTaGFkb3dSb290KiBFbGVtZW50U2hhZG93OjphZGRT
aGFkb3dSb290KEVsZW1lbnQqIHNoYWRvd0hvc3QsIFNoYWRvd1Jvb3Q6OlNoYWRvd1Jvb3RUeXBl
IHR5cGUpCiB7Ci0gICAgUmVmUHRyPFNoYWRvd1Jvb3Q+IHNoYWRvd1Jvb3QgPSBTaGFkb3dSb290
OjpjcmVhdGUoc2hhZG93SG9zdC0+ZG9jdW1lbnQoKSwgdHlwZSk7CisgICAgQVNTRVJUKCFtX3No
YWRvd1Jvb3QpOworICAgIG1fc2hhZG93Um9vdCA9IFNoYWRvd1Jvb3Q6OmNyZWF0ZShzaGFkb3dI
b3N0LT5kb2N1bWVudCgpLCB0eXBlKTsKIAotICAgIHNoYWRvd1Jvb3QtPnNldFBhcmVudE9yU2hh
ZG93SG9zdE5vZGUoc2hhZG93SG9zdCk7Ci0gICAgc2hhZG93Um9vdC0+c2V0UGFyZW50VHJlZVNj
b3BlKHNoYWRvd0hvc3QtPnRyZWVTY29wZSgpKTsKLSAgICBtX3NoYWRvd1Jvb3RzLnB1c2goc2hh
ZG93Um9vdC5nZXQoKSk7CisgICAgbV9zaGFkb3dSb290LT5zZXRQYXJlbnRPclNoYWRvd0hvc3RO
b2RlKHNoYWRvd0hvc3QpOworICAgIG1fc2hhZG93Um9vdC0+c2V0UGFyZW50VHJlZVNjb3BlKHNo
YWRvd0hvc3QtPnRyZWVTY29wZSgpKTsKICAgICBtX2Rpc3RyaWJ1dG9yLmRpZFNoYWRvd0JvdW5k
YXJ5Q2hhbmdlKHNoYWRvd0hvc3QpOwotICAgIENoaWxkTm9kZUluc2VydGlvbk5vdGlmaWVyKHNo
YWRvd0hvc3QpLm5vdGlmeShzaGFkb3dSb290LmdldCgpKTsKKyAgICBDaGlsZE5vZGVJbnNlcnRp
b25Ob3RpZmllcihzaGFkb3dIb3N0KS5ub3RpZnkobV9zaGFkb3dSb290LmdldCgpKTsKIAogICAg
IC8vIEV4aXN0ZW5jZSBvZiBzaGFkb3cgcm9vdHMgcmVxdWlyZXMgdGhlIGhvc3QgYW5kIGl0cyBj
aGlsZHJlbiB0byBkbyB0cmF2ZXJzYWwgdXNpbmcgQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLgog
ICAgIHNoYWRvd0hvc3QtPnNldE5lZWRzU2hhZG93VHJlZVdhbGtlcigpOwpAQCAtNTEsMjggKzUx
LDI2IEBAIFNoYWRvd1Jvb3QqIEVsZW1lbnRTaGFkb3c6OmFkZFNoYWRvd1Jvb3QKICAgICBpZiAo
c2hhZG93SG9zdC0+YXR0YWNoZWQoKSkKICAgICAgICAgc2hhZG93SG9zdC0+bGF6eVJlYXR0YWNo
KCk7CiAKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFB1c2hTaGFkb3dSb290KHNo
YWRvd0hvc3QsIHNoYWRvd1Jvb3QuZ2V0KCkpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkUHVzaFNoYWRvd1Jvb3Qoc2hhZG93SG9zdCwgbV9zaGFkb3dSb290LmdldCgpKTsKIAot
ICAgIHJldHVybiBzaGFkb3dSb290LmdldCgpOworICAgIHJldHVybiBtX3NoYWRvd1Jvb3QuZ2V0
KCk7CiB9CiAKLXZvaWQgRWxlbWVudFNoYWRvdzo6cmVtb3ZlQWxsU2hhZG93Um9vdHMoKQordm9p
ZCBFbGVtZW50U2hhZG93OjpyZW1vdmVTaGFkb3dSb290KCkKIHsKICAgICAvLyBEb250IHByb3Rl
Y3QgdGhpcyByZWYgY291bnQuCiAgICAgRWxlbWVudCogc2hhZG93SG9zdCA9IGhvc3QoKTsKIAot
ICAgIHdoaWxlIChSZWZQdHI8U2hhZG93Um9vdD4gb2xkUm9vdCA9IG1fc2hhZG93Um9vdHMuaGVh
ZCgpKSB7CisgICAgaWYgKFJlZlB0cjxTaGFkb3dSb290PiBvbGRSb290ID0gbV9zaGFkb3dSb290
KSB7CiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFBvcFNoYWRvd1Jvb3Qo
c2hhZG93SG9zdCwgb2xkUm9vdC5nZXQoKSk7CiAgICAgICAgIHNoYWRvd0hvc3QtPmRvY3VtZW50
KCktPnJlbW92ZUZvY3VzZWROb2RlT2ZTdWJ0cmVlKG9sZFJvb3QuZ2V0KCkpOwogCiAgICAgICAg
IGlmIChvbGRSb290LT5hdHRhY2hlZCgpKQogICAgICAgICAgICAgb2xkUm9vdC0+ZGV0YWNoKCk7
CiAKLSAgICAgICAgbV9zaGFkb3dSb290cy5yZW1vdmVIZWFkKCk7CisgICAgICAgIG1fc2hhZG93
Um9vdCA9IDA7CiAgICAgICAgIG9sZFJvb3QtPnNldFBhcmVudE9yU2hhZG93SG9zdE5vZGUoMCk7
CiAgICAgICAgIG9sZFJvb3QtPnNldFBhcmVudFRyZWVTY29wZShzaGFkb3dIb3N0LT5kb2N1bWVu
dCgpKTsKLSAgICAgICAgb2xkUm9vdC0+c2V0UHJldigwKTsKLSAgICAgICAgb2xkUm9vdC0+c2V0
TmV4dCgwKTsKICAgICAgICAgQ2hpbGROb2RlUmVtb3ZhbE5vdGlmaWVyKHNoYWRvd0hvc3QpLm5v
dGlmeShvbGRSb290LmdldCgpKTsKICAgICB9CiAKQEAgLTgxLDkgKzc5LDkgQEAgdm9pZCBFbGVt
ZW50U2hhZG93OjpyZW1vdmVBbGxTaGFkb3dSb290cwogCiB2b2lkIEVsZW1lbnRTaGFkb3c6OmF0
dGFjaCgpCiB7Ci0gICAgQ29udGVudERpc3RyaWJ1dG9yOjplbnN1cmVEaXN0cmlidXRpb24oeW91
bmdlc3RTaGFkb3dSb290KCkpOworICAgIENvbnRlbnREaXN0cmlidXRvcjo6ZW5zdXJlRGlzdHJp
YnV0aW9uKHNoYWRvd1Jvb3QoKSk7CiAKLSAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSB5b3Vu
Z2VzdFNoYWRvd1Jvb3QoKTsgcm9vdDsgcm9vdCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7
CisgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3dSb290KCkpIHsKICAgICAgICAgaWYg
KCFyb290LT5hdHRhY2hlZCgpKQogICAgICAgICAgICAgcm9vdC0+YXR0YWNoKCk7CiAgICAgfQpA
QCAtOTEsNyArODksNyBAQCB2b2lkIEVsZW1lbnRTaGFkb3c6OmF0dGFjaCgpCiAKIHZvaWQgRWxl
bWVudFNoYWRvdzo6ZGV0YWNoKCkKIHsKLSAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSB5b3Vu
Z2VzdFNoYWRvd1Jvb3QoKTsgcm9vdDsgcm9vdCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7
CisgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3dSb290KCkpIHsKICAgICAgICAgaWYg
KHJvb3QtPmF0dGFjaGVkKCkpCiAgICAgICAgICAgICByb290LT5kZXRhY2goKTsKICAgICB9CkBA
IC05OSwzMyArOTcsMzMgQEAgdm9pZCBFbGVtZW50U2hhZG93OjpkZXRhY2goKQogCiBib29sIEVs
ZW1lbnRTaGFkb3c6OmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpIGNvbnN0CiB7Ci0gICAgQVNTRVJU
KHlvdW5nZXN0U2hhZG93Um9vdCgpKTsKLSAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSB5b3Vu
Z2VzdFNoYWRvd1Jvb3QoKTsgcm9vdDsgcm9vdCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKQor
ICAgIEFTU0VSVChzaGFkb3dSb290KCkpOworICAgIGlmIChTaGFkb3dSb290KiByb290ID0gc2hh
ZG93Um9vdCgpKSB7CiAgICAgICAgIGlmIChyb290LT5jaGlsZE5lZWRzU3R5bGVSZWNhbGMoKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotCisgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAogYm9vbCBFbGVtZW50U2hhZG93OjpuZWVkc1N0eWxlUmVjYWxjKCkgY29uc3QKIHsKLSAgICBB
U1NFUlQoeW91bmdlc3RTaGFkb3dSb290KCkpOwotICAgIGZvciAoU2hhZG93Um9vdCogcm9vdCA9
IHlvdW5nZXN0U2hhZG93Um9vdCgpOyByb290OyByb290ID0gcm9vdC0+b2xkZXJTaGFkb3dSb290
KCkpCisgICAgQVNTRVJUKHNoYWRvd1Jvb3QoKSk7CisgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3Qg
PSBzaGFkb3dSb290KCkpIHsKICAgICAgICAgaWYgKHJvb3QtPm5lZWRzU3R5bGVSZWNhbGMoKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotCisgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAogdm9pZCBFbGVtZW50U2hhZG93OjpyZWNhbGNTdHlsZShOb2RlOjpTdHlsZUNoYW5nZSBjaGFu
Z2UpCiB7Ci0gICAgZm9yIChTaGFkb3dSb290KiByb290ID0geW91bmdlc3RTaGFkb3dSb290KCk7
IHJvb3Q7IHJvb3QgPSByb290LT5vbGRlclNoYWRvd1Jvb3QoKSkKKyAgICBpZiAoU2hhZG93Um9v
dCogcm9vdCA9IHNoYWRvd1Jvb3QoKSkKICAgICAgICAgcm9vdC0+cmVjYWxjU3R5bGUoY2hhbmdl
KTsKIH0KIAogdm9pZCBFbGVtZW50U2hhZG93OjpyZW1vdmVBbGxFdmVudExpc3RlbmVycygpCiB7
Ci0gICAgZm9yIChTaGFkb3dSb290KiByb290ID0geW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7
IHJvb3QgPSByb290LT5vbGRlclNoYWRvd1Jvb3QoKSkgeworICAgIGlmIChTaGFkb3dSb290KiBy
b290ID0gc2hhZG93Um9vdCgpKSB7CiAgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3Q7IG5v
ZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKQogICAgICAgICAgICAgbm9kZS0+
cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudFNoYWRvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50U2hhZG93LmgJKHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50U2hhZG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEyICs0OCwxMSBAQCBwdWJsaWM6CiAK
ICAgICB+RWxlbWVudFNoYWRvdygpCiAgICAgewotICAgICAgICByZW1vdmVBbGxTaGFkb3dSb290
cygpOworICAgICAgICByZW1vdmVTaGFkb3dSb290KCk7CiAgICAgfQogCiAgICAgRWxlbWVudCog
aG9zdCgpIGNvbnN0OwotICAgIFNoYWRvd1Jvb3QqIHlvdW5nZXN0U2hhZG93Um9vdCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hhZG93Um9vdHMuaGVhZCgpOyB9Ci0gICAgU2hhZG93Um9vdCogb2xkZXN0
U2hhZG93Um9vdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93Um9vdHMudGFpbCgpOyB9CisgICAg
U2hhZG93Um9vdCogc2hhZG93Um9vdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93Um9vdC5nZXQo
KTsgfQogICAgIEVsZW1lbnRTaGFkb3cqIGNvbnRhaW5pbmdTaGFkb3coKSBjb25zdDsKIAogICAg
IFNoYWRvd1Jvb3QqIGFkZFNoYWRvd1Jvb3QoRWxlbWVudCogc2hhZG93SG9zdCwgU2hhZG93Um9v
dDo6U2hhZG93Um9vdFR5cGUpOwpAQCAtNzYsMjQgKzc1LDI0IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgRWxlbWVudFNoYWRvdygpIHsgfQogCi0gICAgdm9pZCByZW1vdmVBbGxTaGFkb3dSb290
cygpOworICAgIHZvaWQgcmVtb3ZlU2hhZG93Um9vdCgpOwogCi0gICAgRG91Ymx5TGlua2VkTGlz
dDxTaGFkb3dSb290PiBtX3NoYWRvd1Jvb3RzOworICAgIFJlZlB0cjxTaGFkb3dSb290PiBtX3No
YWRvd1Jvb3Q7CiAgICAgQ29udGVudERpc3RyaWJ1dG9yIG1fZGlzdHJpYnV0b3I7CiB9OwogCiBp
bmxpbmUgRWxlbWVudCogRWxlbWVudFNoYWRvdzo6aG9zdCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJU
KCFtX3NoYWRvd1Jvb3RzLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIHlvdW5nZXN0U2hhZG93Um9v
dCgpLT5ob3N0KCk7CisgICAgQVNTRVJUKG1fc2hhZG93Um9vdCk7CisgICAgcmV0dXJuIG1fc2hh
ZG93Um9vdC0+aG9zdCgpOwogfQogCi1pbmxpbmUgU2hhZG93Um9vdCogTm9kZTo6eW91bmdlc3RT
aGFkb3dSb290KCkgY29uc3QKK2lubGluZSBTaGFkb3dSb290KiBOb2RlOjpzaGFkb3dSb290KCkg
Y29uc3QKIHsKICAgICBpZiAoIXRoaXMtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgaWYgKEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IHRvRWxlbWVudCh0aGlzKS0+c2hh
ZG93KCkpCi0gICAgICAgIHJldHVybiBzaGFkb3ctPnlvdW5nZXN0U2hhZG93Um9vdCgpOworICAg
ICAgICByZXR1cm4gc2hhZG93LT5zaGFkb3dSb290KCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAg
LTEwNCwxNSArMTAzLDYgQEAgaW5saW5lIEVsZW1lbnRTaGFkb3cqIEVsZW1lbnRTaGFkb3c6OmNv
bgogICAgIHJldHVybiAwOwogfQogCi1jbGFzcyBTaGFkb3dSb290VmVjdG9yIDogcHVibGljIFZl
Y3RvcjxSZWZQdHI8U2hhZG93Um9vdD4gPiB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgU2hhZG93
Um9vdFZlY3RvcihFbGVtZW50U2hhZG93KiB0cmVlKQotICAgIHsKLSAgICAgICAgZm9yIChTaGFk
b3dSb290KiByb290ID0gdHJlZS0+eW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSBy
b290LT5vbGRlclNoYWRvd1Jvb3QoKSkKLSAgICAgICAgICAgIGFwcGVuZChyb290KTsKLSAgICB9
Ci19OwotCiBpbmxpbmUgRWxlbWVudFNoYWRvdyogc2hhZG93T2ZQYXJlbnQoY29uc3QgTm9kZSog
bm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAx
NDk1MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgwMSwxNSArODAxLDYgQEAgYm9vbCBOb2RlOjpoYXNOb25FbXB0eUJvdW5kaW5nQm94KCkgY29u
cwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW5saW5lIHN0YXRpYyBTaGFkb3dSb290KiBvbGRl
c3RTaGFkb3dSb290Rm9yKGNvbnN0IE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFub2RlLT5pc0Vs
ZW1lbnROb2RlKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChFbGVtZW50U2hhZG93KiBz
aGFkb3cgPSB0b0VsZW1lbnQobm9kZSktPnNoYWRvdygpKQotICAgICAgICByZXR1cm4gc2hhZG93
LT5vbGRlc3RTaGFkb3dSb290KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIGlubGluZSB2b2lkIE5v
ZGU6OnNldFN0eWxlQ2hhbmdlKFN0eWxlQ2hhbmdlVHlwZSBjaGFuZ2VUeXBlKQogewogICAgIG1f
bm9kZUZsYWdzID0gKG1fbm9kZUZsYWdzICYgflN0eWxlQ2hhbmdlTWFzaykgfCBjaGFuZ2VUeXBl
OwpAQCAtMTk3NCw3ICsxOTY1LDcgQEAgdm9pZCBOb2RlOjpzaG93Tm9kZVBhdGhGb3JUaGlzKCkg
Y29uc3QKICAgICAgICAgY29uc3QgTm9kZSogbm9kZSA9IGNoYWluW2luZGV4IC0gMV07CiAgICAg
ICAgIGlmIChub2RlLT5pc1NoYWRvd1Jvb3QoKSkgewogICAgICAgICAgICAgaW50IGNvdW50ID0g
MDsKLSAgICAgICAgICAgIGZvciAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IG9sZGVzdFNoYWRv
d1Jvb3RGb3IodG9TaGFkb3dSb290KG5vZGUpLT5ob3N0KCkpOyBzaGFkb3dSb290ICYmIHNoYWRv
d1Jvb3QgIT0gbm9kZTsgc2hhZG93Um9vdCA9IHNoYWRvd1Jvb3QtPnlvdW5nZXJTaGFkb3dSb290
KCkpCisgICAgICAgICAgICBmb3IgKGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSB0b1No
YWRvd1Jvb3Qobm9kZSk7IHNoYWRvd1Jvb3QgJiYgc2hhZG93Um9vdCAhPSBub2RlOyBzaGFkb3dS
b290ID0gc2hhZG93Um9vdC0+c2hhZG93Um9vdCgpKQogICAgICAgICAgICAgICAgICsrY291bnQ7
CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIi8jc2hhZG93LXJvb3RbJWRdIiwgY291bnQp
OwogICAgICAgICAgICAgY29udGludWU7CkBAIC0yMDI4LDExICsyMDE5LDEwIEBAIHN0YXRpYyB2
b2lkIHRyYXZlcnNlVHJlZUFuZE1hcmsoY29uc3QgU3QKICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICIlcyIsIGluZGVudC50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBub2RlLT5z
aG93Tm9kZSgpOwogICAgICAgICBpbmRlbnQuYXBwZW5kKCdcdCcpOwotICAgICAgICBpZiAobm9k
ZS0+aXNTaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgIGlmIChTaGFkb3dSb290KiB5b3VuZ2Vy
U2hhZG93Um9vdCA9IHRvU2hhZG93Um9vdChub2RlKS0+eW91bmdlclNoYWRvd1Jvb3QoKSkKLSAg
ICAgICAgICAgICAgICB0cmF2ZXJzZVRyZWVBbmRNYXJrKGluZGVudC50b1N0cmluZygpLCB5b3Vu
Z2VyU2hhZG93Um9vdCwgbWFya2VkTm9kZTEsIG1hcmtlZExhYmVsMSwgbWFya2VkTm9kZTIsIG1h
cmtlZExhYmVsMik7Ci0gICAgICAgIH0gZWxzZSBpZiAoU2hhZG93Um9vdCogb2xkZXN0U2hhZG93
Um9vdCA9IG9sZGVzdFNoYWRvd1Jvb3RGb3Iobm9kZSkpCi0gICAgICAgICAgICB0cmF2ZXJzZVRy
ZWVBbmRNYXJrKGluZGVudC50b1N0cmluZygpLCBvbGRlc3RTaGFkb3dSb290LCBtYXJrZWROb2Rl
MSwgbWFya2VkTGFiZWwxLCBtYXJrZWROb2RlMiwgbWFya2VkTGFiZWwyKTsKKyAgICAgICAgaWYg
KCFub2RlLT5pc1NoYWRvd1Jvb3QoKSkgeworICAgICAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNo
YWRvd1Jvb3QgPSBub2RlLT5zaGFkb3dSb290KCkpCisgICAgICAgICAgICAgICAgdHJhdmVyc2VU
cmVlQW5kTWFyayhpbmRlbnQudG9TdHJpbmcoKSwgc2hhZG93Um9vdCwgbWFya2VkTm9kZTEsIG1h
cmtlZExhYmVsMSwgbWFya2VkTm9kZTIsIG1hcmtlZExhYmVsMik7CisgICAgICAgIH0KICAgICB9
CiB9CiAKQEAgLTIwNzYsMTUgKzIwNjYsMTIgQEAgc3RhdGljIHZvaWQgc2hvd1N1YlRyZWVBY3Jv
c3NGcmFtZShjb25zdAogICAgICAgICBmcHV0cygiKiIsIHN0ZGVycik7CiAgICAgZnB1dHMoaW5k
ZW50LnV0ZjgoKS5kYXRhKCksIHN0ZGVycik7CiAgICAgbm9kZS0+c2hvd05vZGUoKTsKLSAgICAg
aWYgKG5vZGUtPmlzU2hhZG93Um9vdCgpKSB7Ci0gICAgICAgICBpZiAoU2hhZG93Um9vdCogeW91
bmdlclNoYWRvd1Jvb3QgPSB0b1NoYWRvd1Jvb3Qobm9kZSktPnlvdW5nZXJTaGFkb3dSb290KCkp
Ci0gICAgICAgICAgICAgc2hvd1N1YlRyZWVBY3Jvc3NGcmFtZSh5b3VuZ2VyU2hhZG93Um9vdCwg
bWFya2VkTm9kZSwgaW5kZW50ICsgIlx0Iik7Ci0gICAgIH0gZWxzZSB7Ci0gICAgICAgICBpZiAo
bm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpKQotICAgICAgICAgICAgIHNob3dTdWJUcmVlQWNy
b3NzRnJhbWUoc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEZyYW1lT3duZXJFbGVtZW50Kj4obm9kZSkt
PmNvbnRlbnREb2N1bWVudCgpLCBtYXJrZWROb2RlLCBpbmRlbnQgKyAiXHQiKTsKLSAgICAgICAg
IGlmIChTaGFkb3dSb290KiBvbGRlc3RTaGFkb3dSb290ID0gb2xkZXN0U2hhZG93Um9vdEZvcihu
b2RlKSkKLSAgICAgICAgICAgICBzaG93U3ViVHJlZUFjcm9zc0ZyYW1lKG9sZGVzdFNoYWRvd1Jv
b3QsIG1hcmtlZE5vZGUsIGluZGVudCArICJcdCIpOwotICAgICB9CisgICAgaWYgKCFub2RlLT5p
c1NoYWRvd1Jvb3QoKSkgeworICAgICAgICBpZiAobm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgp
KQorICAgICAgICAgICAgc2hvd1N1YlRyZWVBY3Jvc3NGcmFtZShzdGF0aWNfY2FzdDxjb25zdCBI
VE1MRnJhbWVPd25lckVsZW1lbnQqPihub2RlKS0+Y29udGVudERvY3VtZW50KCksIG1hcmtlZE5v
ZGUsIGluZGVudCArICJcdCIpOworICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9
IG5vZGUtPnNoYWRvd1Jvb3QoKSkKKyAgICAgICAgICAgIHNob3dTdWJUcmVlQWNyb3NzRnJhbWUo
c2hhZG93Um9vdCwgbWFya2VkTm9kZSwgaW5kZW50ICsgIlx0Iik7CisgICAgfQogICAgIGZvciAo
Tm9kZSogY2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpKQogICAgICAgICBzaG93U3ViVHJlZUFjcm9zc0ZyYW1lKGNoaWxkLCBtYXJr
ZWROb2RlLCBpbmRlbnQgKyAiXHQiKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMTQ5
NTA2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgy
LDcgKzI4Miw3IEBAIHB1YmxpYzoKICAgICAvLyBEZXByZWNhdGVkLiBTaG91bGQgdXNlIHNoYWRv
d0hvc3QoKSBhbmQgY2hlY2sgdGhlIHJldHVybiB2YWx1ZS4KICAgICBOb2RlKiBkZXByZWNhdGVk
U2hhZG93QW5jZXN0b3JOb2RlKCkgY29uc3Q7CiAgICAgU2hhZG93Um9vdCogY29udGFpbmluZ1No
YWRvd1Jvb3QoKSBjb25zdDsKLSAgICBTaGFkb3dSb290KiB5b3VuZ2VzdFNoYWRvd1Jvb3QoKSBj
b25zdDsKKyAgICBTaGFkb3dSb290KiBzaGFkb3dSb290KCkgY29uc3Q7CiAKICAgICAvLyBSZXR1
cm5zIDAsIGEgY2hpbGQgb2YgU2hhZG93Um9vdCwgb3IgYSBsZWdhY3kgc2hhZG93IHJvb3QuCiAg
ICAgTm9kZSogbm9uQm91bmRhcnlTaGFkb3dUcmVlUm9vdE5vZGUoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vU2hhZG93Um9vdC5jcHAJKHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9TaGFkb3dSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDcgKzE4NCw3IEBAIE5vZGU6
Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU2hhZG8KIHsKICAgICBEb2N1bWVudEZyYWdt
ZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOwogCi0gICAgaWYgKCFpbnNlcnRpb25Q
b2ludC0+aW5Eb2N1bWVudCgpIHx8ICFpc09sZGVzdCgpKQorICAgIGlmICghaW5zZXJ0aW9uUG9p
bnQtPmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CiAKICAgICAv
LyBGSVhNRTogV2hlbiBwYXJzaW5nIDx2aWRlbyBjb250cm9scz4sIGluc2VydGVkSW50bygpIGlz
IGNhbGxlZCBtYW55IHRpbWVzIHdpdGhvdXQgaW52b2tpbmcgcmVtb3ZlZEZyb20uCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9TaGFkb3dSb290LmgJKHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9TaGFkb3dSb290LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgRWxlbWVudFNoYWRvdzsKIGNsYXNzIFNjb3BlQ29udGVudERp
c3RyaWJ1dGlvbjsKIAotY2xhc3MgU2hhZG93Um9vdCA6IHB1YmxpYyBEb2N1bWVudEZyYWdtZW50
LCBwdWJsaWMgVHJlZVNjb3BlLCBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8U2hhZG93Um9v
dD4gewotICAgIGZyaWVuZCBjbGFzcyBXVEY6OkRvdWJseUxpbmtlZExpc3ROb2RlPFNoYWRvd1Jv
b3Q+OworY2xhc3MgU2hhZG93Um9vdCA6IHB1YmxpYyBEb2N1bWVudEZyYWdtZW50LCBwdWJsaWMg
VHJlZVNjb3BlIHsKIHB1YmxpYzoKICAgICAvLyBGSVhNRTogV2Ugd2lsbCBzdXBwb3J0IG11bHRp
cGxlIHNoYWRvdyBzdWJ0cmVlcywgaG93ZXZlciBjdXJyZW50IGltcGxlbWVudGF0aW9uIGRvZXMg
bm90IHdvcmsgd2VsbAogICAgIC8vIGlmIGEgc2hhZG93IHJvb3QgaXMgZHluYW1pY2FsbHkgY3Jl
YXRlZC4gU28gd2UgcHJvaGliaXQgbXVsdGlwbGUgc2hhZG93IHN1YnRyZWVzCkBAIC03NCwxMiAr
NzMsNiBAQCBwdWJsaWM6CiAKICAgICBFbGVtZW50KiBhY3RpdmVFbGVtZW50KCkgY29uc3Q7CiAK
LSAgICBTaGFkb3dSb290KiB5b3VuZ2VyU2hhZG93Um9vdCgpIGNvbnN0IHsgcmV0dXJuIHByZXYo
KTsgfQotICAgIFNoYWRvd1Jvb3QqIG9sZGVyU2hhZG93Um9vdCgpIGNvbnN0IHsgcmV0dXJuIG5l
eHQoKTsgfQotCi0gICAgYm9vbCBpc1lvdW5nZXN0KCkgY29uc3QgeyByZXR1cm4gIXlvdW5nZXJT
aGFkb3dSb290KCk7IH0KLSAgICBib29sIGlzT2xkZXN0KCkgY29uc3QgeyByZXR1cm4gIW9sZGVy
U2hhZG93Um9vdCgpOyB9Ci0KICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CiAKICAgICB2aXJ0
dWFsIEluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5v
ZGUqKSBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5j
cHAJKHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9w
dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIFRyZWVTY29wZUFk
b3B0ZXI6Om1vdmVUcmVlVG9OZXdTY29wCiAgICAgICAgICAgICAgICAgbW92ZVRyZWVUb05ld1Nj
b3BlKGF0dHJzW2ldLmdldCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGZvciAoU2hhZG93Um9v
dCogc2hhZG93ID0gbm9kZS0+eW91bmdlc3RTaGFkb3dSb290KCk7IHNoYWRvdzsgc2hhZG93ID0g
c2hhZG93LT5vbGRlclNoYWRvd1Jvb3QoKSkgeworICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hh
ZG93ID0gbm9kZS0+c2hhZG93Um9vdCgpKSB7CiAgICAgICAgICAgICBzaGFkb3ctPnNldFBhcmVu
dFRyZWVTY29wZShtX25ld1Njb3BlKTsKICAgICAgICAgICAgIGlmICh3aWxsTW92ZVRvTmV3RG9j
dW1lbnQpCiAgICAgICAgICAgICAgICAgbW92ZVRyZWVUb05ld0RvY3VtZW50KHNoYWRvdywgb2xk
RG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBUcmVlU2NvcGVB
ZG9wdGVyOjptb3ZlVHJlZVRvTmV3RG9jdQogewogICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3Q7
IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIHJvb3QpKSB7CiAgICAgICAg
IG1vdmVOb2RlVG9OZXdEb2N1bWVudChub2RlLCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOwot
ICAgICAgICBmb3IgKFNoYWRvd1Jvb3QqIHNoYWRvdyA9IG5vZGUtPnlvdW5nZXN0U2hhZG93Um9v
dCgpOyBzaGFkb3c7IHNoYWRvdyA9IHNoYWRvdy0+b2xkZXJTaGFkb3dSb290KCkpCisgICAgICAg
IGlmIChTaGFkb3dSb290KiBzaGFkb3cgPSBub2RlLT5zaGFkb3dSb290KCkpCiAgICAgICAgICAg
ICBtb3ZlVHJlZVRvTmV3RG9jdW1lbnQoc2hhZG93LCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQp
OwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0
cmlidXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29u
dGVudERpc3RyaWJ1dG9yLmNwcAkocmV2aXNpb24gMTQ5NTI1KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIy
LDggKzIyMiw3IEBAIHZvaWQgQ29udGVudERpc3RyaWJ1dG9yOjpkaXN0cmlidXRlKEVsZW0KICAg
ICBWZWN0b3I8Ym9vbD4gZGlzdHJpYnV0ZWQocG9vbC5zaXplKCkpOwogICAgIGRpc3RyaWJ1dGVk
LmZpbGwoZmFsc2UpOwogCi0gICAgZm9yIChTaGFkb3dSb290KiByb290ID0gaG9zdC0+eW91bmdl
c3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290LT5vbGRlclNoYWRvd1Jvb3QoKSkgewot
CisgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBob3N0LT5zaGFkb3dSb290KCkpIHsKICAgICAg
ICAgaWYgKFNjb3BlQ29udGVudERpc3RyaWJ1dGlvbiogc2NvcGUgPSByb290LT5zY29wZURpc3Ry
aWJ1dGlvbigpKSB7CiAgICAgICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEluc2VydGlvblBv
aW50PiA+JiBpbnNlcnRpb25Qb2ludHMgPSBzY29wZS0+ZW5zdXJlSW5zZXJ0aW9uUG9pbnRMaXN0
KHJvb3QpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnNlcnRpb25Qb2lu
dHMuc2l6ZSgpOyArK2kpIHsKQEAgLTI0NCw3ICsyNDMsNyBAQCBib29sIENvbnRlbnREaXN0cmli
dXRvcjo6aW52YWxpZGF0ZShFbGVtCiAgICAgQVNTRVJUKG5lZWRzSW52YWxpZGF0aW9uKCkpOwog
ICAgIGJvb2wgbmVlZHNSZWF0dGFjaCA9IChtX3ZhbGlkaXR5ID09IFVuZGV0ZXJtaW5lZCkgfHwg
IW1fbm9kZVRvSW5zZXJ0aW9uUG9pbnQuaXNFbXB0eSgpOwogCi0gICAgZm9yIChTaGFkb3dSb290
KiByb290ID0gaG9zdC0+eW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290LT5v
bGRlclNoYWRvd1Jvb3QoKSkgeworICAgIGlmIChTaGFkb3dSb290KiByb290ID0gaG9zdC0+c2hh
ZG93Um9vdCgpKSB7CiAgICAgICAgIGlmIChTY29wZUNvbnRlbnREaXN0cmlidXRpb24qIHNjb3Bl
ID0gcm9vdC0+c2NvcGVEaXN0cmlidXRpb24oKSkgewogICAgICAgICAgICAgc2NvcGUtPnNldElu
c2VydGlvblBvaW50QXNzaWduZWRUbygwKTsKICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8SW5zZXJ0aW9uUG9pbnQ+ID4mIGluc2VydGlvblBvaW50cyA9IHNjb3BlLT5lbnN1cmVJbnNl
cnRpb25Qb2ludExpc3Qocm9vdCk7CkBAIC0zNTgsNyArMzU3LDcgQEAgY29uc3QgU2VsZWN0UnVs
ZUZlYXR1cmVTZXQmIENvbnRlbnREaXN0cgogICAgICAgICByZXR1cm4gbV9zZWxlY3RGZWF0dXJl
czsKIAogICAgIG1fc2VsZWN0RmVhdHVyZXMuY2xlYXIoKTsKLSAgICBmb3IgKFNoYWRvd1Jvb3Qq
IHJvb3QgPSBzaGFkb3ctPm9sZGVzdFNoYWRvd1Jvb3QoKTsgcm9vdDsgcm9vdCA9IHJvb3QtPnlv
dW5nZXJTaGFkb3dSb290KCkpCisgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3ctPnNo
YWRvd1Jvb3QoKSkKICAgICAgICAgY29sbGVjdFNlbGVjdEZlYXR1cmVTZXRGcm9tKHJvb3QpOwog
ICAgIG1fbmVlZHNTZWxlY3RGZWF0dXJlU2V0ID0gZmFsc2U7CiAgICAgcmV0dXJuIG1fc2VsZWN0
RmVhdHVyZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5jcHAJKHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw3ICszNTgsNyBA
QCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp1bmJpbmQoTm9kZSogbm9kCiAKICAgICBpZiAobm9k
ZS0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgIGlmIChFbGVtZW50U2hhZG93KiBzaGFkb3cg
PSB0b0VsZW1lbnQobm9kZSktPnNoYWRvdygpKSB7Ci0gICAgICAgICAgICBmb3IgKFNoYWRvd1Jv
b3QqIHJvb3QgPSBzaGFkb3ctPnlvdW5nZXN0U2hhZG93Um9vdCgpOyByb290OyByb290ID0gcm9v
dC0+b2xkZXJTaGFkb3dSb290KCkpCisgICAgICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9
IHNoYWRvdy0+c2hhZG93Um9vdCgpKQogICAgICAgICAgICAgICAgIHVuYmluZChyb290LCBub2Rl
c01hcCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDE4LDcgKzE0MTgsNyBAQCBQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpET006Ok5vZGU+IEluc3BlCiAgICAgICAgIEVsZW1lbnRTaGFkb3cqIHNo
YWRvdyA9IGVsZW1lbnQtPnNoYWRvdygpOwogICAgICAgICBpZiAoc2hhZG93KSB7CiAgICAgICAg
ICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpET006Ok5vZGU+ID4g
c2hhZG93Um9vdHMgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkRPTTo6Tm9kZT46
OmNyZWF0ZSgpOwotICAgICAgICAgICAgZm9yIChTaGFkb3dSb290KiByb290ID0gc2hhZG93LT55
b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgcm9vdDsgcm9vdCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgp
KQorICAgICAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3ctPnNoYWRvd1Jvb3Qo
KSkKICAgICAgICAgICAgICAgICBzaGFkb3dSb290cy0+YWRkSXRlbShidWlsZE9iamVjdEZvck5v
ZGUocm9vdCwgMCwgbm9kZXNNYXApKTsKICAgICAgICAgICAgIHZhbHVlLT5zZXRTaGFkb3dSb290
cyhzaGFkb3dSb290cyk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9j
dXNDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3Vz
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
Rm9jdXNDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNiBAQCBGb2N1
c05hdmlnYXRpb25TY29wZTo6Rm9jdXNOYXZpZ2F0aW9uU2NvCiAgICAgOiBtX3Jvb3RUcmVlU2Nv
cGUodHJlZVNjb3BlKQogewogICAgIEFTU0VSVCh0cmVlU2NvcGUpOwotICAgIEFTU0VSVCghdHJl
ZVNjb3BlLT5yb290Tm9kZSgpLT5pc1NoYWRvd1Jvb3QoKSB8fCB0b1NoYWRvd1Jvb3QodHJlZVNj
b3BlLT5yb290Tm9kZSgpKS0+aXNZb3VuZ2VzdCgpKTsKIH0KIAogTm9kZSogRm9jdXNOYXZpZ2F0
aW9uU2NvcGU6OnJvb3ROb2RlKCkgY29uc3QKQEAgLTEwMiw3ICsxMDEsNyBAQCBGb2N1c05hdmln
YXRpb25TY29wZSBGb2N1c05hdmlnYXRpb25TY29wCiBGb2N1c05hdmlnYXRpb25TY29wZSBGb2N1
c05hdmlnYXRpb25TY29wZTo6Zm9jdXNOYXZpZ2F0aW9uU2NvcGVPd25lZEJ5U2hhZG93SG9zdChO
b2RlKiBub2RlKQogewogICAgIEFTU0VSVChpc1NoYWRvd0hvc3Qobm9kZSkpOwotICAgIHJldHVy
biBGb2N1c05hdmlnYXRpb25TY29wZSh0b0VsZW1lbnQobm9kZSktPnNoYWRvdygpLT55b3VuZ2Vz
dFNoYWRvd1Jvb3QoKSk7CisgICAgcmV0dXJuIEZvY3VzTmF2aWdhdGlvblNjb3BlKHRvRWxlbWVu
dChub2RlKS0+c2hhZG93KCktPnNoYWRvd1Jvb3QoKSk7CiB9CiAKIEZvY3VzTmF2aWdhdGlvblNj
b3BlIEZvY3VzTmF2aWdhdGlvblNjb3BlOjpmb2N1c05hdmlnYXRpb25TY29wZU93bmVkQnlJRnJh
bWUoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBmcmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkocmV2aXNpb24g
MTQ5NTA2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250
cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDcgKzIzMCw3IEBAIEhUTUxJbnB1dEVsZW1l
bnQqIFJlbmRlckZpbGVVcGxvYWRDb250cm8KIAogICAgIEFTU0VSVChpbnB1dC0+c2hhZG93KCkp
OwogCi0gICAgTm9kZSogYnV0dG9uTm9kZSA9IGlucHV0LT5zaGFkb3coKS0+b2xkZXN0U2hhZG93
Um9vdCgpLT5maXJzdENoaWxkKCk7CisgICAgTm9kZSogYnV0dG9uTm9kZSA9IGlucHV0LT5zaGFk
b3coKS0+c2hhZG93Um9vdCgpLT5maXJzdENoaWxkKCk7CiAgICAgcmV0dXJuIGJ1dHRvbk5vZGUg
JiYgYnV0dG9uTm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIGJ1dHRvbk5vZGUtPmhhc1RhZ05hbWUo
aW5wdXRUYWcpID8gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGJ1dHRvbk5vZGUpIDog
MDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCShyZXZpc2lv
biAxNDk1MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBTVkdUUmVmRWxlbWVudDo6dXBkYXRl
UmVmZXJlbmNlZFRleAogICAgICAgICB0ZXh0Q29udGVudCA9IHRhcmdldC0+dGV4dENvbnRlbnQo
KTsKIAogICAgIEFTU0VSVChzaGFkb3coKSk7Ci0gICAgU2hhZG93Um9vdCogcm9vdCA9IHNoYWRv
dygpLT5vbGRlc3RTaGFkb3dSb290KCk7CisgICAgU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvdygp
LT5zaGFkb3dSb290KCk7CiAgICAgaWYgKCFyb290LT5maXJzdENoaWxkKCkpCiAgICAgICAgIHJv
b3QtPmFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZShkb2N1bWVudCgpLCB0ZXh0Q29udGVudCksIEFT
U0VSVF9OT19FWENFUFRJT04pOwogICAgIGVsc2UgewpAQCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQg
U1ZHVFJlZkVsZW1lbnQ6OmRldGFjaFRhcmdldCgpCiAgICAgU3RyaW5nIGVtcHR5Q29udGVudDsK
IAogICAgIEFTU0VSVChzaGFkb3coKSk7Ci0gICAgTm9kZSogY29udGFpbmVyID0gc2hhZG93KCkt
Pm9sZGVzdFNoYWRvd1Jvb3QoKS0+Zmlyc3RDaGlsZCgpOworICAgIE5vZGUqIGNvbnRhaW5lciA9
IHNoYWRvdygpLT5zaGFkb3dSb290KCktPmZpcnN0Q2hpbGQoKTsKICAgICBpZiAoY29udGFpbmVy
KQogICAgICAgICBjb250YWluZXItPnNldFRleHRDb250ZW50KGVtcHR5Q29udGVudCwgSUdOT1JF
X0VYQ0VQVElPTik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzk0LDcgKzM5NCw3IEBAIHN0YXRpYyBib29sIHN1YnRyZWVDb250
YWluc0Rpc2FsbG93ZWRFbGUKIHZvaWQgU1ZHVXNlRWxlbWVudDo6Y2xlYXJSZXNvdXJjZVJlZmVy
ZW5jZXMoKQogewogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdHJ5IHRvIG9wdGltaXplIHRoaXMs
IHRvIGF0IGxlYXN0IGFsbG93IHBhcnRpYWwgcmVjbG9uZXMuCi0gICAgaWYgKFNoYWRvd1Jvb3Qq
IHNoYWRvd1RyZWVSb290RWxlbWVudCA9ICBzaGFkb3coKS0+b2xkZXN0U2hhZG93Um9vdCgpKQor
ICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dUcmVlUm9vdEVsZW1lbnQgPSAgc2hhZG93KCktPnNo
YWRvd1Jvb3QoKSkKICAgICAgICAgc2hhZG93VHJlZVJvb3RFbGVtZW50LT5yZW1vdmVDaGlsZHJl
bigpOwogCiAgICAgaWYgKG1fdGFyZ2V0RWxlbWVudEluc3RhbmNlKSB7CkBAIC00ODYsNyArNDg2
LDcgQEAgdm9pZCBTVkdVc2VFbGVtZW50OjpidWlsZFNoYWRvd0FuZEluc3RhbgogICAgIEFTU0VS
VChtX3RhcmdldEVsZW1lbnRJbnN0YW5jZS0+ZGlyZWN0VXNlRWxlbWVudCgpID09IHRoaXMpOwog
ICAgIEFTU0VSVChtX3RhcmdldEVsZW1lbnRJbnN0YW5jZS0+Y29ycmVzcG9uZGluZ0VsZW1lbnQo
KSA9PSB0YXJnZXQpOwogCi0gICAgU2hhZG93Um9vdCogc2hhZG93VHJlZVJvb3RFbGVtZW50ID0g
c2hhZG93KCktPm9sZGVzdFNoYWRvd1Jvb3QoKTsKKyAgICBTaGFkb3dSb290KiBzaGFkb3dUcmVl
Um9vdEVsZW1lbnQgPSBzaGFkb3coKS0+c2hhZG93Um9vdCgpOwogICAgIEFTU0VSVChzaGFkb3dU
cmVlUm9vdEVsZW1lbnQpOwogCiAgICAgLy8gQnVpbGQgc2hhZG93IHRyZWUgZnJvbSBpbnN0YW5j
ZSB0cmVlCkBAIC03MDgsNyArNzA4LDcgQEAgdm9pZCBTVkdVc2VFbGVtZW50OjpidWlsZFNoYWRv
d1RyZWUoU1ZHRQogICAgIGlmIChzdWJ0cmVlQ29udGFpbnNEaXNhbGxvd2VkRWxlbWVudChuZXdD
aGlsZC5nZXQoKSkpCiAgICAgICAgIHJlbW92ZURpc2FsbG93ZWRFbGVtZW50c0Zyb21TdWJ0cmVl
KG5ld0NoaWxkLmdldCgpKTsKIAotICAgIHNoYWRvdygpLT5vbGRlc3RTaGFkb3dSb290KCktPmFw
cGVuZENoaWxkKG5ld0NoaWxkLnJlbGVhc2UoKSk7CisgICAgc2hhZG93KCktPnNoYWRvd1Jvb3Qo
KS0+YXBwZW5kQ2hpbGQobmV3Q2hpbGQucmVsZWFzZSgpKTsKIH0KIAogdm9pZCBTVkdVc2VFbGVt
ZW50OjpleHBhbmRVc2VFbGVtZW50c0luU2hhZG93VHJlZShOb2RlKiBlbGVtZW50KQpJbmRleDog
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkocmV2aXNpb24gMTQ5NTA2KQorKysgU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTgs
NyArNjk4LDcgQEAgSW50ZXJuYWxzOjpTaGFkb3dSb290SWZTaGFkb3dET01FbmFibGVkTwogICAg
IH0KIAogICAgIGlmIChFbGVtZW50U2hhZG93KiBzaGFkb3cgPSBob3N0LT5zaGFkb3coKSkKLSAg
ICAgICAgcmV0dXJuIHNoYWRvdy0+eW91bmdlc3RTaGFkb3dSb290KCk7CisgICAgICAgIHJldHVy
biBzaGFkb3ctPnNoYWRvd1Jvb3QoKTsKIAogICAgIHJldHVybiBob3N0LT5jcmVhdGVTaGFkb3dS
b290KGVjKS5nZXQoKTsKIH0KQEAgLTcxNCw1NSArNzE0LDE1IEBAIEludGVybmFsczo6U2hhZG93
Um9vdElmU2hhZG93RE9NRW5hYmxlZE8KIAogSW50ZXJuYWxzOjpTaGFkb3dSb290SWZTaGFkb3dE
T01FbmFibGVkT3JOb2RlKiBJbnRlcm5hbHM6OnNoYWRvd1Jvb3QoRWxlbWVudCogaG9zdCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgLy8gRklYTUU6IEludGVybmFsczo6c2hhZG93Um9vdCgp
IGluIHRlc3RzIHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8geW91bmdlc3RTaGFkb3dSb290KCkgb3Ig
b2xkZXN0U2hhZG93Um9vdCgpLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03ODQ2NQotICAgIHJldHVybiB5b3VuZ2VzdFNoYWRvd1Jvb3QoaG9zdCwgZWMp
OwotfQotCi1JbnRlcm5hbHM6OlNoYWRvd1Jvb3RJZlNoYWRvd0RPTUVuYWJsZWRPck5vZGUqIElu
dGVybmFsczo6eW91bmdlc3RTaGFkb3dSb290KEVsZW1lbnQqIGhvc3QsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIGlmICghaG9zdCkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VS
UjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKEVsZW1lbnRTaGFkb3cqIHNo
YWRvdyA9IGhvc3QtPnNoYWRvdygpKQotICAgICAgICByZXR1cm4gc2hhZG93LT55b3VuZ2VzdFNo
YWRvd1Jvb3QoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotSW50ZXJuYWxzOjpTaGFkb3dSb290SWZT
aGFkb3dET01FbmFibGVkT3JOb2RlKiBJbnRlcm5hbHM6Om9sZGVzdFNoYWRvd1Jvb3QoRWxlbWVu
dCogaG9zdCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17CiAgICAgaWYgKCFob3N0KSB7CiAgICAgICAg
IGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KICAg
ICBpZiAoRWxlbWVudFNoYWRvdyogc2hhZG93ID0gaG9zdC0+c2hhZG93KCkpCi0gICAgICAgIHJl
dHVybiBzaGFkb3ctPm9sZGVzdFNoYWRvd1Jvb3QoKTsKKyAgICAgICAgcmV0dXJuIHNoYWRvdy0+
c2hhZG93Um9vdCgpOwogICAgIHJldHVybiAwOwogfQogCi1JbnRlcm5hbHM6OlNoYWRvd1Jvb3RJ
ZlNoYWRvd0RPTUVuYWJsZWRPck5vZGUqIEludGVybmFsczo6eW91bmdlclNoYWRvd1Jvb3QoTm9k
ZSogc2hhZG93LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoIXNoYWRvdyB8fCAhc2hh
ZG93LT5pc1NoYWRvd1Jvb3QoKSkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvU2hhZG93Um9vdChzaGFk
b3cpLT55b3VuZ2VyU2hhZG93Um9vdCgpOwotfQotCi1JbnRlcm5hbHM6OlNoYWRvd1Jvb3RJZlNo
YWRvd0RPTUVuYWJsZWRPck5vZGUqIEludGVybmFsczo6b2xkZXJTaGFkb3dSb290KE5vZGUqIHNo
YWRvdywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFzaGFkb3cgfHwgIXNoYWRvdy0+
aXNTaGFkb3dSb290KCkpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiB0b1NoYWRvd1Jvb3Qoc2hhZG93KS0+
b2xkZXJTaGFkb3dSb290KCk7Ci19Ci0KIFN0cmluZyBJbnRlcm5hbHM6OnNoYWRvd1Jvb3RUeXBl
KGNvbnN0IE5vZGUqIHJvb3QsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewogICAgIGlmICgh
cm9vdCB8fCAhcm9vdC0+aXNTaGFkb3dSb290KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuaAkocmV2aXNpb24gMTQ5NTA2KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuaAkod29ya2luZyBjb3B5KQpAQCAtODksMTAgKzg5LDYgQEAgcHVibGljOgogICAg
IFNoYWRvd1Jvb3RJZlNoYWRvd0RPTUVuYWJsZWRPck5vZGUqIGVuc3VyZVNoYWRvd1Jvb3QoRWxl
bWVudCogaG9zdCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFNoYWRvd1Jvb3RJZlNoYWRvd0RPTUVu
YWJsZWRPck5vZGUqIGNyZWF0ZVNoYWRvd1Jvb3QoRWxlbWVudCogaG9zdCwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIFNoYWRvd1Jvb3RJZlNoYWRvd0RPTUVuYWJsZWRPck5vZGUqIHNoYWRvd1Jvb3Qo
RWxlbWVudCogaG9zdCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFNoYWRvd1Jvb3RJZlNoYWRvd0RP
TUVuYWJsZWRPck5vZGUqIHlvdW5nZXN0U2hhZG93Um9vdChFbGVtZW50KiBob3N0LCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgU2hhZG93Um9vdElmU2hhZG93RE9NRW5hYmxlZE9yTm9kZSogb2xkZXN0
U2hhZG93Um9vdChFbGVtZW50KiBob3N0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU2hhZG93Um9v
dElmU2hhZG93RE9NRW5hYmxlZE9yTm9kZSogeW91bmdlclNoYWRvd1Jvb3QoTm9kZSogc2hhZG93
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU2hhZG93Um9vdElmU2hhZG93RE9NRW5hYmxlZE9yTm9k
ZSogb2xkZXJTaGFkb3dSb290KE5vZGUqIHNoYWRvdywgRXhjZXB0aW9uQ29kZSYpOwogICAgIFN0
cmluZyBzaGFkb3dSb290VHlwZShjb25zdCBOb2RlKiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0Owog
ICAgIGJvb2wgaGFzU2hhZG93SW5zZXJ0aW9uUG9pbnQoY29uc3QgTm9kZSosIEV4Y2VwdGlvbkNv
ZGUmKSBjb25zdDsKICAgICBib29sIGhhc0NvbnRlbnRFbGVtZW50KGNvbnN0IE5vZGUqLCBFeGNl
cHRpb25Db2RlJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRs
CShyZXZpc2lvbiAxNDk1MDYpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE3ICs0MCwxMSBAQAogICAgIFNoYWRvd1Jvb3QgZW5z
dXJlU2hhZG93Um9vdChFbGVtZW50IGhvc3QpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICAgICBT
aGFkb3dSb290IGNyZWF0ZVNoYWRvd1Jvb3QoRWxlbWVudCBob3N0KSByYWlzZXMgKERPTUV4Y2Vw
dGlvbik7CiAgICAgU2hhZG93Um9vdCBzaGFkb3dSb290KEVsZW1lbnQgaG9zdCkgcmFpc2VzIChE
T01FeGNlcHRpb24pOwotICAgIFNoYWRvd1Jvb3QgeW91bmdlc3RTaGFkb3dSb290KEVsZW1lbnQg
aG9zdCkgcmFpc2VzIChET01FeGNlcHRpb24pOwotICAgIFNoYWRvd1Jvb3Qgb2xkZXN0U2hhZG93
Um9vdChFbGVtZW50IGhvc3QpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKLSAgICBTaGFkb3dSb290
IHlvdW5nZXJTaGFkb3dSb290KE5vZGUgcm9vdCkgcmFpc2VzIChET01FeGNlcHRpb24pOwogICAg
IFNoYWRvd1Jvb3Qgb2xkZXJTaGFkb3dSb290KE5vZGUgcm9vdCkgcmFpc2VzIChET01FeGNlcHRp
b24pOwogI2Vsc2UKICAgICBOb2RlIGVuc3VyZVNoYWRvd1Jvb3QoRWxlbWVudCBob3N0KSByYWlz
ZXMgKERPTUV4Y2VwdGlvbik7CiAgICAgTm9kZSBjcmVhdGVTaGFkb3dSb290KEVsZW1lbnQgaG9z
dCkgcmFpc2VzIChET01FeGNlcHRpb24pOwogICAgIE5vZGUgc2hhZG93Um9vdChFbGVtZW50IGhv
c3QpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKLSAgICBOb2RlIHlvdW5nZXN0U2hhZG93Um9vdChF
bGVtZW50IGhvc3QpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKLSAgICBOb2RlIG9sZGVzdFNoYWRv
d1Jvb3QoRWxlbWVudCBob3N0KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7Ci0gICAgTm9kZSB5b3Vu
Z2VyU2hhZG93Um9vdChOb2RlIHJvb3QpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICNlbmRpZgog
ICAgIERPTVN0cmluZyBzaGFkb3dSb290VHlwZShOb2RlIHJvb3QpIHJhaXNlcyAoRE9NRXhjZXB0
aW9uKTsKICAgICBib29sZWFuIGhhc1NoYWRvd0luc2VydGlvblBvaW50KE5vZGUgcm9vdCkgcmFp
c2VzIChET01FeGNlcHRpb24pOwo=
</data>
<flag name="commit-queue"
          id="221930"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200508</attachid>
            <date>2013-05-03 16:48:55 -0700</date>
            <delta_ts>2013-05-03 19:36:43 -0700</delta_ts>
            <desc>another</desc>
            <filename>remove-older-young-3.patch</filename>
            <type>text/plain</type>
            <size>42695</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0OTUzOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMyBAQAorMjAxMy0wNS0wMyAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGNvbmNlcHQgb2Yg
eW91bmdlciBhbmQgb2xkZXIgc2hhZG93IHRyZWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTU1NzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBZb3VuZ2VyIGFuZCBvbGRlciBzaGFkb3cgdHJlZXMgYXJl
IGFuIG9ic2N1cmUgY29ybmVyIG9mIHRoZSBTaGFkb3cgRE9NIHNwZWMuCisgICAgICAgIAorICAg
ICAgICBTdXBwb3J0IG9ubHkgb25lIHNoYWRvdyB0cmVlIHBlciBlbGVtZW50LiBUaGlzIHNpbXBs
aWZpZXMgbWFueSB0aGluZ3MuIAorCisgICAgICAgICogZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdh
bGtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRy
YXZlcnNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2Vy
Ojp0cmF2ZXJzZVNpYmxpbmdJbkN1cnJlbnRUcmVlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZVBhcmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlUGFy
ZW50SW5DdXJyZW50VHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVX
YWxrZXI6OnRyYXZlcnNlUGFyZW50QmFja1RvU2hhZG93Um9vdE9ySG9zdCk6CisgICAgICAgICog
ZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
ZWRTaGFkb3dUcmVlV2Fsa2VyOjphc3NlcnRQcmVjb25kaXRpb24pOgorICAgICAgICAoQ29tcG9z
ZWRTaGFkb3dUcmVlV2Fsa2VyKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZUFsZ29yaXRo
bXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlSW5zZXJ0aW9uTm90aWZpZXI6Om5v
dGlmeURlc2NlbmRhbnRJbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
aGlsZE5vZGVJbnNlcnRpb25Ob3RpZmllcjo6bm90aWZ5RGVzY2VuZGFudEluc2VydGVkSW50b1Ry
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlUmVtb3ZhbE5vdGlmaWVyOjpub3RpZnlE
ZXNjZW5kYW50UmVtb3ZlZEZyb21Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5v
ZGVSZW1vdmFsTm90aWZpZXI6Om5vdGlmeURlc2NlbmRhbnRSZW1vdmVkRnJvbVRyZWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6Y29sbGVjdEZyYW1lT3duZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OmFzc2VydENvbm5lY3RlZFN1YnJhbWVDb3VudElzQ29uc2lz
dGVudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpidWlsZEFjY2Vzc0tleU1hcCk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YXV0aG9yU2hhZG93Um9vdCk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50Ojp1c2VyQWdlbnRTaGFkb3dSb290KToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QpOgorICAgICAgICAqIGRvbS9FbGVt
ZW50Lmg6CisgICAgICAgIChFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omhh
c0F1dGhvclNoYWRvd1Jvb3QpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmlkbDoKKyAgICAgICAg
KiBkb20vRWxlbWVudFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93
OjphZGRTaGFkb3dSb290KToKKyAgICAgICAgCisgICAgICAgIEFsbG93IG9ubHkgb25lIFNoYWRv
d1Jvb3QgcGVyIEVsZW1lbnRTaGFkb3cuIFJlbW92ZSBsaW5rZWQgbGlzdCBoYW5kbGluZy4KKyAg
ICAgICAgCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjpyZW1vdmVBbGxTaGFkb3dS
b290cyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjphdHRhY2gpOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnRTaGFkb3c6OmNoaWxkTmVlZHNTdHlsZVJlY2FsYyk6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50U2hhZG93OjpuZWVkc1N0eWxlUmVjYWxjKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnRTaGFkb3c6OnJlY2FsY1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6
OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKToKKyAgICAgICAgKiBkb20vRWxlbWVudFNoYWRvdy5o
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6c2hhZG93Um9vdCk6CisgICAgICAg
IChFbGVtZW50U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6Omhvc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6OnNob3dOb2RlUGF0aEZvclRoaXMpOgorICAgICAgICAoV2ViQ29yZTo6
dHJhdmVyc2VUcmVlQW5kTWFyayk6CisgICAgICAgIChXZWJDb3JlOjpzaG93U3ViVHJlZUFjcm9z
c0ZyYW1lKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoTm9kZSk6CisgICAgICAg
ICogZG9tL1NoYWRvd1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6aW5z
ZXJ0ZWRJbnRvKToKKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5oOgorICAgICAgICAoU2hhZG93
Um9vdCk6CisgICAgICAgIAorICAgICAgICAgICAgUmVtb3ZlIExpbmtlZExpc3QgYmFzZS4KKyAg
ICAgICAgCisgICAgICAgICogZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVUb05ld1Njb3BlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRyZWVTY29wZUFkb3B0ZXI6Om1vdmVUcmVlVG9OZXdEb2N1bWVudCk6CisgICAgICAg
ICogaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnREaXN0cmlidXRvcjo6ZGlzdHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RGlzdHJpYnV0b3I6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudERp
c3RyaWJ1dG9yOjplbnN1cmVTZWxlY3RGZWF0dXJlU2V0KToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdl
bnQ6OnVuYmluZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRP
YmplY3RGb3JOb2RlKToKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGb2N1c05hdmlnYXRpb25TY29wZTo6Rm9jdXNOYXZpZ2F0aW9uU2NvcGUp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNOYXZpZ2F0aW9uU2NvcGU6OmZvY3VzTmF2aWdhdGlv
blNjb3BlT3duZWRCeVNoYWRvd0hvc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxl
VXBsb2FkQ29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbDo6dXBsb2FkQnV0dG9uKToKKyAgICAgICAgKiBzdmcvU1ZHVFJlZkVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHVFJlZkVsZW1lbnQ6OnVwZGF0ZVJlZmVyZW5jZWRUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RSZWZFbGVtZW50OjpkZXRhY2hUYXJnZXQpOgorICAgICAg
ICAqIHN2Zy9TVkdVc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1l
bnQ6OmNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVs
ZW1lbnQ6OmJ1aWxkU2hhZG93QW5kSW5zdGFuY2VUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1VzZUVsZW1lbnQ6OmJ1aWxkU2hhZG93VHJlZSk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5h
bHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjplbnN1cmVTaGFkb3dSb290KToK
KyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2hhZG93Um9vdCk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAoSW50ZXJuYWxz
KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisKIDIwMTMtMDUtMDMgIEFsZXhl
eSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gc2V0TWV0YWRh
dGFVUkwgaW5jb3JyZWN0bHkgdHJlYXRzIHBhdGggYnl0ZXMgYXMgTGF0aW4tMQpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDE0OTUwNikK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDcsMTIgKzIwNyw5IEBAIGJvb2wgU3R5bGVTY29wZVJlc29sdmVyOjpzdHlsZVNo
YXJpbmdDYW4KICAgICAvLyBhZGQgYSBuZXcgZmxhZyB0byBFbGVtZW50U2hhZG93IGFuZCBjYWNo
ZSB3aGV0aGVyIGFueUBob3N0IEAtcnVsZXMgYXJlCiAgICAgLy8gYXBwbGllZCB0byB0aGUgZWxl
bWVudCBvciBub3QuIFNvIHdlIGNhbiBhdm9pZCBhbHdheXMgdHJhdmVyc2luZwogICAgIC8vIHNo
YWRvdyByb290cy4KLSAgICBmb3IgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBzaGFkb3ctPnlv
dW5nZXN0U2hhZG93Um9vdCgpOyBzaGFkb3dSb290OyBzaGFkb3dSb290ID0gc2hhZG93Um9vdC0+
b2xkZXJTaGFkb3dSb290KCkpIHsKKyAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IHNo
YWRvdy0+c2hhZG93Um9vdCgpKSB7CiAgICAgICAgIGlmIChhdEhvc3RSdWxlU2V0Rm9yKHNoYWRv
d1Jvb3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgaWYgKCFTY29wZUNv
bnRlbnREaXN0cmlidXRpb246Omhhc1NoYWRvd0VsZW1lbnQoc2hhZG93Um9vdCkpCi0gICAgICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjMwLDExICsyMjcs
OSBAQCB2b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVsZXMoCiAgICAgLy8gYWRk
IGEgbmV3IGZsYWcgdG8gRWxlbWVudFNoYWRvdyBhbmQgY2FjaGUgd2hldGhlciBhbnkgQGhvc3Qg
QC1ydWxlcyBhcmUKICAgICAvLyBhcHBsaWVkIHRvIHRoZSBlbGVtZW50IG9yIG5vdC4gU28gd2Ug
Y2FuIHF1aWNrbHkgZXhpdCB0aGlzIG1ldGhvZAogICAgIC8vIGJ5IHVzaW5nIHRoZSBmbGFnLgot
ICAgIGZvciAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IHNoYWRvdy0+eW91bmdlc3RTaGFkb3dS
b290KCk7IHNoYWRvd1Jvb3Q7IHNoYWRvd1Jvb3QgPSBzaGFkb3dSb290LT5vbGRlclNoYWRvd1Jv
b3QoKSkgeyAKKyAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IHNoYWRvdy0+c2hhZG93
Um9vdCgpKSB7CiAgICAgICAgIGlmIChSdWxlU2V0KiBydWxlU2V0ID0gYXRIb3N0UnVsZVNldEZv
cihzaGFkb3dSb290KSkKICAgICAgICAgICAgIG1hdGNoZWRSdWxlcy5hcHBlbmQocnVsZVNldCk7
Ci0gICAgICAgIGlmICghU2NvcGVDb250ZW50RGlzdHJpYnV0aW9uOjpoYXNTaGFkb3dFbGVtZW50
KHNoYWRvd1Jvb3QpKQotICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcAkocmV2aXNp
b24gMTQ5NTI1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDcgQEAgTm9kZSogQ29tcG9zZWRTaGFk
b3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZQogICAgIEFTU0VSVChub2RlKTsKICAgICBpZiAoY2FuQ3Jv
c3NVcHBlckJvdW5kYXJ5KCkpIHsKICAgICAgICAgRWxlbWVudFNoYWRvdyogc2hhZG93ID0gc2hh
ZG93Rm9yKG5vZGUpOwotICAgICAgICByZXR1cm4gc2hhZG93ID8gdHJhdmVyc2VMaWdodENoaWxk
cmVuKHNoYWRvdy0+eW91bmdlc3RTaGFkb3dSb290KCksIGRpcmVjdGlvbikKKyAgICAgICAgcmV0
dXJuIHNoYWRvdyA/IHRyYXZlcnNlTGlnaHRDaGlsZHJlbihzaGFkb3ctPnNoYWRvd1Jvb3QoKSwg
ZGlyZWN0aW9uKQogICAgICAgICAgICAgOiB0cmF2ZXJzZUxpZ2h0Q2hpbGRyZW4obm9kZSwgZGly
ZWN0aW9uKTsKICAgICB9CiAgICAgaWYgKGlzU2hhZG93SG9zdChub2RlKSkKQEAgLTE3NiwyNSAr
MTc2LDkgQEAgTm9kZSogQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZQogICAgIEFT
U0VSVChub2RlKTsKICAgICBpZiAoTm9kZSogZm91bmQgPSB0cmF2ZXJzZVNpYmxpbmdzKGRpcmVj
dGlvbiA9PSBUcmF2ZXJzYWxEaXJlY3Rpb25Gb3J3YXJkID8gbm9kZS0+bmV4dFNpYmxpbmcoKSA6
IG5vZGUtPnByZXZpb3VzU2libGluZygpLCBkaXJlY3Rpb24pKQogICAgICAgICByZXR1cm4gZm91
bmQ7Ci0gICAgaWYgKE5vZGUqIG5leHQgPSB0cmF2ZXJzZUJhY2tUb1lvdW5nZXJTaGFkb3dSb290
KG5vZGUsIGRpcmVjdGlvbikpCi0gICAgICAgIHJldHVybiBuZXh0OwogICAgIHJldHVybiBlc2Nh
cGVGYWxsYmFja0NvbnRlbnRFbGVtZW50KG5vZGUsIGRpcmVjdGlvbik7CiB9CiAKLU5vZGUqIENv
bXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6dHJhdmVyc2VCYWNrVG9Zb3VuZ2VyU2hhZG93Um9vdChj
b25zdCBOb2RlKiBub2RlLCBUcmF2ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uKQotewotICAgIEFT
U0VSVChub2RlKTsKLSAgICBpZiAobm9kZS0+cGFyZW50Tm9kZSgpICYmIG5vZGUtPnBhcmVudE5v
ZGUoKS0+aXNTaGFkb3dSb290KCkpIHsKLSAgICAgICAgU2hhZG93Um9vdCogcGFyZW50U2hhZG93
Um9vdCA9IHRvU2hhZG93Um9vdChub2RlLT5wYXJlbnROb2RlKCkpOwotICAgICAgICBpZiAoIXBh
cmVudFNoYWRvd1Jvb3QtPmlzWW91bmdlc3QoKSkgewotICAgICAgICAgICAgSW5zZXJ0aW9uUG9p
bnQqIGFzc2lnbmVkSW5zZXJ0aW9uUG9pbnQgPSBTY29wZUNvbnRlbnREaXN0cmlidXRpb246OmFz
c2lnbmVkVG8ocGFyZW50U2hhZG93Um9vdCk7Ci0gICAgICAgICAgICBBU1NFUlQoYXNzaWduZWRJ
bnNlcnRpb25Qb2ludCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VTaWJsaW5nSW5DdXJy
ZW50VHJlZShhc3NpZ25lZEluc2VydGlvblBvaW50LCBkaXJlY3Rpb24pOwotICAgICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiAwOwotfQotCiBpbmxpbmUgTm9kZSogQ29tcG9zZWRTaGFkb3dUcmVl
V2Fsa2VyOjplc2NhcGVGYWxsYmFja0NvbnRlbnRFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUsIFRy
YXZlcnNhbERpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgQVNTRVJUKG5vZGUpOwpAQCAtMjI3
LDEwICsyMTEsOCBAQCBOb2RlKiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlCiAg
ICAgaWYgKG5vZGUtPmlzUHNldWRvRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gbm9kZS0+cGFy
ZW50T3JTaGFkb3dIb3N0Tm9kZSgpOwogCi0gICAgaWYgKCFjYW5Dcm9zc1VwcGVyQm91bmRhcnko
KSAmJiBub2RlLT5pc1NoYWRvd1Jvb3QoKSkgewotICAgICAgICBBU1NFUlQodG9TaGFkb3dSb290
KG5vZGUpLT5pc1lvdW5nZXN0KCkpOworICAgIGlmICghY2FuQ3Jvc3NVcHBlckJvdW5kYXJ5KCkg
JiYgbm9kZS0+aXNTaGFkb3dSb290KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIH0KIAogICAg
IGlmIChub2RlQ2FuQmVEaXN0cmlidXRlZChub2RlKSkgewogICAgICAgICBpZiAoSW5zZXJ0aW9u
UG9pbnQqIGluc2VydGlvblBvaW50ID0gcmVzb2x2ZVJlcHJvamVjdGlvbihub2RlKSkgewpAQCAt
MjQ5LDI2ICsyMzEsMjIgQEAgTm9kZSogQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJz
ZQogaW5saW5lIE5vZGUqIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6dHJhdmVyc2VQYXJlbnRJ
bkN1cnJlbnRUcmVlKGNvbnN0IE5vZGUqIG5vZGUsIFBhcmVudFRyYXZlcnNhbERldGFpbHMqIGRl
dGFpbHMpIGNvbnN0CiB7CiAgICAgaWYgKE5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUo
KSkKLSAgICAgICAgcmV0dXJuIHBhcmVudC0+aXNTaGFkb3dSb290KCkgPyB0cmF2ZXJzZVBhcmVu
dEJhY2tUb1lvdW5nZXJTaGFkb3dSb290T3JIb3N0KHRvU2hhZG93Um9vdChwYXJlbnQpLCBkZXRh
aWxzKSA6IHRyYXZlcnNlTm9kZUVzY2FwaW5nRmFsbGJhY2tDb250ZW50cyhwYXJlbnQsIGRldGFp
bHMpOworICAgICAgICByZXR1cm4gcGFyZW50LT5pc1NoYWRvd1Jvb3QoKSA/IHRyYXZlcnNlUGFy
ZW50QmFja1RvU2hhZG93Um9vdE9ySG9zdCh0b1NoYWRvd1Jvb3QocGFyZW50KSwgZGV0YWlscykg
OiB0cmF2ZXJzZU5vZGVFc2NhcGluZ0ZhbGxiYWNrQ29udGVudHMocGFyZW50LCBkZXRhaWxzKTsK
ICAgICByZXR1cm4gMDsKIH0KIAotTm9kZSogQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2
ZXJzZVBhcmVudEJhY2tUb1lvdW5nZXJTaGFkb3dSb290T3JIb3N0KGNvbnN0IFNoYWRvd1Jvb3Qq
IHNoYWRvd1Jvb3QsIFBhcmVudFRyYXZlcnNhbERldGFpbHMqIGRldGFpbHMpIGNvbnN0CitOb2Rl
KiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlUGFyZW50QmFja1RvU2hhZG93Um9v
dE9ySG9zdChjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290LCBQYXJlbnRUcmF2ZXJzYWxEZXRh
aWxzKiBkZXRhaWxzKSBjb25zdAogewogICAgIEFTU0VSVChzaGFkb3dSb290KTsKICAgICBBU1NF
UlQoIVNjb3BlQ29udGVudERpc3RyaWJ1dGlvbjo6YXNzaWduZWRUbyhzaGFkb3dSb290KSk7CiAK
LSAgICBpZiAoc2hhZG93Um9vdC0+aXNZb3VuZ2VzdCgpKSB7Ci0gICAgICAgIGlmIChjYW5Dcm9z
c1VwcGVyQm91bmRhcnkoKSkgewotICAgICAgICAgICAgaWYgKGRldGFpbHMpCi0gICAgICAgICAg
ICAgICAgZGV0YWlscy0+ZGlkVHJhdmVyc2VTaGFkb3dSb290KHNoYWRvd1Jvb3QpOwotICAgICAg
ICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybiBjb25zdF9jYXN0PFNoYWRvd1Jvb3QqPihzaGFkb3dSb290KTsKKyAgICBpZiAoY2FuQ3Jv
c3NVcHBlckJvdW5kYXJ5KCkpIHsKKyAgICAgICAgaWYgKGRldGFpbHMpCisgICAgICAgICAgICBk
ZXRhaWxzLT5kaWRUcmF2ZXJzZVNoYWRvd1Jvb3Qoc2hhZG93Um9vdCk7CisgICAgICAgIHJldHVy
biBzaGFkb3dSb290LT5ob3N0KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IGNvbnN0X2Nhc3Q8U2hhZG93Um9vdCo+KHNoYWRvd1Jvb3QpOwogfQogCiBOb2RlKiBDb21wb3Nl
ZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlTmV4dFNpYmxpbmcoY29uc3QgTm9kZSogbm9kZSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmgJ
KHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1Ry
ZWVXYWxrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODksOCArODksNiBAQCBwcml2YXRlOgogICAg
ICAgICBBU1NFUlQobV9ub2RlKTsKICAgICAgICAgaWYgKGNhbkNyb3NzVXBwZXJCb3VuZGFyeSgp
KQogICAgICAgICAgICAgQVNTRVJUKCFtX25vZGUtPmlzU2hhZG93Um9vdCgpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgQVNTRVJUKCFtX25vZGUtPmlzU2hhZG93Um9vdCgpIHx8IHRvU2hh
ZG93Um9vdChtX25vZGUpLT5pc1lvdW5nZXN0KCkpOwogICAgICAgICBBU1NFUlQoIWlzQWN0aXZl
SW5zZXJ0aW9uUG9pbnQobV9ub2RlKSk7CiAjZW5kaWYKICAgICB9CkBAIC0xMTksMTIgKzExNywx
MSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBOb2RlKiB0cmF2ZXJzZVNpYmxpbmdzKGNvbnN0IE5v
ZGUqLCBUcmF2ZXJzYWxEaXJlY3Rpb24pOwogICAgIHN0YXRpYyBOb2RlKiB0cmF2ZXJzZURpc3Ry
aWJ1dGVkTm9kZXMoY29uc3QgTm9kZSosIGNvbnN0IEluc2VydGlvblBvaW50KiwgVHJhdmVyc2Fs
RGlyZWN0aW9uKTsKIAotICAgIHN0YXRpYyBOb2RlKiB0cmF2ZXJzZUJhY2tUb1lvdW5nZXJTaGFk
b3dSb290KGNvbnN0IE5vZGUqLCBUcmF2ZXJzYWxEaXJlY3Rpb24pOwogICAgIHN0YXRpYyBOb2Rl
KiBlc2NhcGVGYWxsYmFja0NvbnRlbnRFbGVtZW50KGNvbnN0IE5vZGUqLCBUcmF2ZXJzYWxEaXJl
Y3Rpb24pOwogCiAgICAgTm9kZSogdHJhdmVyc2VOb2RlRXNjYXBpbmdGYWxsYmFja0NvbnRlbnRz
KGNvbnN0IE5vZGUqLCBQYXJlbnRUcmF2ZXJzYWxEZXRhaWxzKiA9IDApIGNvbnN0OwogICAgIE5v
ZGUqIHRyYXZlcnNlUGFyZW50SW5DdXJyZW50VHJlZShjb25zdCBOb2RlKiwgUGFyZW50VHJhdmVy
c2FsRGV0YWlscyogPSAwKSBjb25zdDsKLSAgICBOb2RlKiB0cmF2ZXJzZVBhcmVudEJhY2tUb1lv
dW5nZXJTaGFkb3dSb290T3JIb3N0KGNvbnN0IFNoYWRvd1Jvb3QqLCBQYXJlbnRUcmF2ZXJzYWxE
ZXRhaWxzKiA9IDApIGNvbnN0OworICAgIE5vZGUqIHRyYXZlcnNlUGFyZW50QmFja1RvU2hhZG93
Um9vdE9ySG9zdChjb25zdCBTaGFkb3dSb290KiwgUGFyZW50VHJhdmVyc2FsRGV0YWlscyogPSAw
KSBjb25zdDsKIAogICAgIGNvbnN0IE5vZGUqIG1fbm9kZTsKICAgICBQb2xpY3kgbV9wb2xpY3k7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5j
cHAJKHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2Rl
QWxnb3JpdGhtcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0Nyw5IEBAIHZvaWQgQ2hp
bGROb2RlSW5zZXJ0aW9uTm90aWZpZXI6Om5vdGlmeUQKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IHRvRWxlbWVudChub2RlKS0+c2hhZG93KCkpIHsK
LSAgICAgICAgU2hhZG93Um9vdFZlY3RvciByb290cyhzaGFkb3cpOwotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHJvb3RzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobm9k
ZS0+aW5Eb2N1bWVudCgpICYmIHJvb3RzW2ldLT5ob3N0KCkgPT0gbm9kZSkKLSAgICAgICAgICAg
ICAgICBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQocm9vdHNbaV0uZ2V0KCkpOworICAg
ICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvdy0+c2hhZG93Um9vdCgpKSB7CisgICAg
ICAgICAgICBpZiAobm9kZS0+aW5Eb2N1bWVudCgpICYmIHJvb3QtPmhvc3QoKSA9PSBub2RlKQor
ICAgICAgICAgICAgICAgIG5vdGlmeU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudChyb290KTsKICAg
ICAgICAgfQogICAgIH0KIH0KQEAgLTYyLDcgKzYxLDcgQEAgdm9pZCBDaGlsZE5vZGVJbnNlcnRp
b25Ob3RpZmllcjo6bm90aWZ5RAogICAgICAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50b1Ry
ZWUodG9Db250YWluZXJOb2RlKGNoaWxkKSk7CiAgICAgfQogCi0gICAgZm9yIChTaGFkb3dSb290
KiByb290ID0gbm9kZS0+eW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290LT5v
bGRlclNoYWRvd1Jvb3QoKSkKKyAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IG5vZGUtPnNoYWRv
d1Jvb3QoKSkKICAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50b1RyZWUocm9vdCk7CiB9CiAK
QEAgLTg0LDEwICs4Myw5IEBAIHZvaWQgQ2hpbGROb2RlUmVtb3ZhbE5vdGlmaWVyOjpub3RpZnlE
ZXMKICAgICAgICAgbm9kZS0+ZG9jdW1lbnQoKS0+c2V0Q1NTVGFyZ2V0KDApOwogCiAgICAgaWYg
KEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IHRvRWxlbWVudChub2RlKS0+c2hhZG93KCkpIHsKLSAg
ICAgICAgU2hhZG93Um9vdFZlY3RvciByb290cyhzaGFkb3cpOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHJvb3RzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIW5vZGUt
PmluRG9jdW1lbnQoKSAmJiByb290c1tpXS0+aG9zdCgpID09IG5vZGUpCi0gICAgICAgICAgICAg
ICAgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQocm9vdHNbaV0uZ2V0KCkpOworICAgICAg
ICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvdy0+c2hhZG93Um9vdCgpKSB7CisgICAgICAg
ICAgICBpZiAoIW5vZGUtPmluRG9jdW1lbnQoKSAmJiByb290LT5ob3N0KCkgPT0gbm9kZSkKKyAg
ICAgICAgICAgICAgICBub3RpZnlOb2RlUmVtb3ZlZEZyb21Eb2N1bWVudChyb290KTsKICAgICAg
ICAgfQogICAgIH0KIH0KQEAgLTEwMywxNSArMTAxLDE0IEBAIHZvaWQgQ2hpbGROb2RlUmVtb3Zh
bE5vdGlmaWVyOjpub3RpZnlEZXMKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKEVsZW1lbnRT
aGFkb3cqIHNoYWRvdyA9IHRvRWxlbWVudChub2RlKS0+c2hhZG93KCkpIHsKLSAgICAgICAgU2hh
ZG93Um9vdFZlY3RvciByb290cyhzaGFkb3cpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHJvb3RzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbm90aWZ5Tm9kZVJlbW92ZWRGcm9t
VHJlZShyb290c1tpXS5nZXQoKSk7CisgICAgICAgIGlmIChTaGFkb3dSb290KiByb290ID0gc2hh
ZG93LT5zaGFkb3dSb290KCkpCisgICAgICAgICAgICBub3RpZnlOb2RlUmVtb3ZlZEZyb21UcmVl
KHJvb3QpOwogICAgIH0KIH0KIAogdm9pZCBDaGlsZEZyYW1lRGlzY29ubmVjdG9yOjpjb2xsZWN0
RnJhbWVPd25lcnMoRWxlbWVudFNoYWRvdyogc2hhZG93KQogewotICAgIGZvciAoU2hhZG93Um9v
dCogcm9vdCA9IHNoYWRvdy0+eW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290
LT5vbGRlclNoYWRvd1Jvb3QoKSkKKyAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvdy0+
c2hhZG93Um9vdCgpKQogICAgICAgICBjb2xsZWN0RnJhbWVPd25lcnMocm9vdCk7CiB9CiAKQEAg
LTEyNSw3ICsxMjIsNyBAQCB1bnNpZ25lZCBhc3NlcnRDb25uZWN0ZWRTdWJyYW1lQ291bnRJc0Nv
CiAgICAgICAgICAgICBjb3VudCsrOwogCiAgICAgICAgIGlmIChFbGVtZW50U2hhZG93KiBzaGFk
b3cgPSB0b0VsZW1lbnQobm9kZSktPnNoYWRvdygpKSB7Ci0gICAgICAgICAgICBmb3IgKFNoYWRv
d1Jvb3QqIHJvb3QgPSBzaGFkb3ctPnlvdW5nZXN0U2hhZG93Um9vdCgpOyByb290OyByb290ID0g
cm9vdC0+b2xkZXJTaGFkb3dSb290KCkpCisgICAgICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9v
dCA9IHNoYWRvdy0+c2hhZG93Um9vdCgpKQogICAgICAgICAgICAgICAgIGNvdW50ICs9IGFzc2Vy
dENvbm5lY3RlZFN1YnJhbWVDb3VudElzQ29uc2lzdGVudChyb290KTsKICAgICAgICAgfQogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTQ5NTA2KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzE4LDcgKzcx
OCw3IEBAIHZvaWQgRG9jdW1lbnQ6OmJ1aWxkQWNjZXNzS2V5TWFwKFRyZWVTY28KICAgICAgICAg
aWYgKCFhY2Nlc3NLZXkuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9lbGVtZW50c0J5QWNjZXNz
S2V5LnNldChhY2Nlc3NLZXkuaW1wbCgpLCBlbGVtZW50KTsKIAotICAgICAgICBmb3IgKFNoYWRv
d1Jvb3QqIHJvb3QgPSBlbGVtZW50LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgcm9vdDsgcm9vdCA9
IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKQorICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9
IGVsZW1lbnQtPnNoYWRvd1Jvb3QoKSkKICAgICAgICAgICAgIGJ1aWxkQWNjZXNzS2V5TWFwKHJv
b3QpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDE0OTUw
NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTUzNCwxMiArMTUzNCwxMiBAQCBQYXNzUmVmUHRyPFNoYWRvd1Jvb3Q+IEVsZW1lbnQ6OmNyZWF0
ZVNoCiAgICAgcmV0dXJuIGVuc3VyZVNoYWRvdygpLT5hZGRTaGFkb3dSb290KHRoaXMsIFNoYWRv
d1Jvb3Q6OkF1dGhvclNoYWRvd1Jvb3QpOwogfQogCi1TaGFkb3dSb290KiBFbGVtZW50OjpzaGFk
b3dSb290KCkgY29uc3QKK1NoYWRvd1Jvb3QqIEVsZW1lbnQ6OmF1dGhvclNoYWRvd1Jvb3QoKSBj
b25zdAogewogICAgIEVsZW1lbnRTaGFkb3cqIGVsZW1lbnRTaGFkb3cgPSBzaGFkb3coKTsKICAg
ICBpZiAoIWVsZW1lbnRTaGFkb3cpCiAgICAgICAgIHJldHVybiAwOwotICAgIFNoYWRvd1Jvb3Qq
IHNoYWRvd1Jvb3QgPSBlbGVtZW50U2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsKKyAgICBT
aGFkb3dSb290KiBzaGFkb3dSb290ID0gZWxlbWVudFNoYWRvdy0+c2hhZG93Um9vdCgpOwogICAg
IGlmIChzaGFkb3dSb290LT50eXBlKCkgPT0gU2hhZG93Um9vdDo6QXV0aG9yU2hhZG93Um9vdCkK
ICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3Q7CiAgICAgcmV0dXJuIDA7CkBAIC0xNTQ4LDcgKzE1
NDgsNyBAQCBTaGFkb3dSb290KiBFbGVtZW50OjpzaGFkb3dSb290KCkgY29uc3QKIFNoYWRvd1Jv
b3QqIEVsZW1lbnQ6OnVzZXJBZ2VudFNoYWRvd1Jvb3QoKSBjb25zdAogewogICAgIGlmIChFbGVt
ZW50U2hhZG93KiBlbGVtZW50U2hhZG93ID0gc2hhZG93KCkpIHsKLSAgICAgICAgaWYgKFNoYWRv
d1Jvb3QqIHNoYWRvd1Jvb3QgPSBlbGVtZW50U2hhZG93LT5vbGRlc3RTaGFkb3dSb290KCkpIHsK
KyAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBlbGVtZW50U2hhZG93LT5zaGFk
b3dSb290KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChzaGFkb3dSb290LT50eXBlKCkgPT0gU2hh
ZG93Um9vdDo6VXNlckFnZW50U2hhZG93Um9vdCk7CiAgICAgICAgICAgICByZXR1cm4gc2hhZG93
Um9vdDsKICAgICAgICAgfQpAQCAtMTU1OSwxMCArMTU1OSwxMSBAQCBTaGFkb3dSb290KiBFbGVt
ZW50Ojp1c2VyQWdlbnRTaGFkb3dSb290CiAKIFNoYWRvd1Jvb3QqIEVsZW1lbnQ6OmVuc3VyZVVz
ZXJBZ2VudFNoYWRvd1Jvb3QoKQogewotICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0g
dXNlckFnZW50U2hhZG93Um9vdCgpKQotICAgICAgICByZXR1cm4gc2hhZG93Um9vdDsKLSAgICBT
aGFkb3dSb290KiBzaGFkb3dSb290ID0gZW5zdXJlU2hhZG93KCktPmFkZFNoYWRvd1Jvb3QodGhp
cywgU2hhZG93Um9vdDo6VXNlckFnZW50U2hhZG93Um9vdCk7Ci0gICAgZGlkQWRkVXNlckFnZW50
U2hhZG93Um9vdChzaGFkb3dSb290KTsKKyAgICBTaGFkb3dSb290KiBzaGFkb3dSb290ID0gdXNl
ckFnZW50U2hhZG93Um9vdCgpOworICAgIGlmICghc2hhZG93Um9vdCkgeworICAgICAgICBzaGFk
b3dSb290ID0gZW5zdXJlU2hhZG93KCktPmFkZFNoYWRvd1Jvb3QodGhpcywgU2hhZG93Um9vdDo6
VXNlckFnZW50U2hhZG93Um9vdCk7CisgICAgICAgIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3Qo
c2hhZG93Um9vdCk7CisgICAgfQogICAgIHJldHVybiBzaGFkb3dSb290OwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmgJKHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxNSw5ICs0MTUsOSBAQCBwdWJsaWM6CiAgICAg
RWxlbWVudFNoYWRvdyogc2hhZG93KCkgY29uc3Q7CiAgICAgRWxlbWVudFNoYWRvdyogZW5zdXJl
U2hhZG93KCk7CiAgICAgUGFzc1JlZlB0cjxTaGFkb3dSb290PiBjcmVhdGVTaGFkb3dSb290KEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICBTaGFkb3dSb290KiBzaGFkb3dSb290KCkgY29uc3Q7CisgICAg
U2hhZG93Um9vdCogYXV0aG9yU2hhZG93Um9vdCgpIGNvbnN0OwogCi0gICAgYm9vbCBoYXNBdXRo
b3JTaGFkb3dSb290KCkgY29uc3QgeyByZXR1cm4gc2hhZG93Um9vdCgpOyB9CisgICAgYm9vbCBo
YXNBdXRob3JTaGFkb3dSb290KCkgY29uc3QgeyByZXR1cm4gYXV0aG9yU2hhZG93Um9vdCgpOyB9
CiAgICAgdmlydHVhbCB2b2lkIHdpbGxBZGRBdXRob3JTaGFkb3dSb290KCkgeyB9CiAKICAgICBT
aGFkb3dSb290KiB1c2VyQWdlbnRTaGFkb3dSb290KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuaWRsCShyZXZpc2lvbiAxNDk1MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsNyBAQAogI2lmIGRlZmluZWQoRU5B
QkxFX1NIQURPV19ET00pICYmIEVOQUJMRV9TSEFET1dfRE9NICYmIGRlZmluZWQoTEFOR1VBR0Vf
SkFWQVNDUklQVCkgJiYgTEFOR1VBR0VfSkFWQVNDUklQVAogICAgIFtSZWZsZWN0PXBzZXVkbywg
SW1wbGVtZW50ZWRBcz1wc2V1ZG9dIGF0dHJpYnV0ZSBET01TdHJpbmcgd2Via2l0UHNldWRvOwog
ICAgIFtJbXBsZW1lbnRlZEFzPWNyZWF0ZVNoYWRvd1Jvb3RdIFNoYWRvd1Jvb3Qgd2Via2l0Q3Jl
YXRlU2hhZG93Um9vdCgpIHJhaXNlcyhET01FeGNlcHRpb24pOwotICAgIFtJbXBsZW1lbnRlZEFz
PXNoYWRvd1Jvb3RdIHJlYWRvbmx5IGF0dHJpYnV0ZSBTaGFkb3dSb290IHdlYmtpdFNoYWRvd1Jv
b3Q7CisgICAgW0ltcGxlbWVudGVkQXM9YXV0aG9yU2hhZG93Um9vdF0gcmVhZG9ubHkgYXR0cmli
dXRlIFNoYWRvd1Jvb3Qgd2Via2l0U2hhZG93Um9vdDsKICAgICBbSW1wbGVtZW50ZWRBcz1pbnNl
cnRpb25QYXJlbnRGb3JCaW5kaW5nXSByZWFkb25seSBhdHRyaWJ1dGUgTm9kZSB3ZWJraXRJbnNl
cnRpb25QYXJlbnQ7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRT
aGFkb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93
LmNwcAkocmV2aXNpb24gMTQ5NTA2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFk
b3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMyArMzQsMTMgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBTaGFkb3dSb290KiBFbGVtZW50U2hhZG93OjphZGRTaGFkb3dSb290KEVsZW1lbnQq
IHNoYWRvd0hvc3QsIFNoYWRvd1Jvb3Q6OlNoYWRvd1Jvb3RUeXBlIHR5cGUpCiB7Ci0gICAgUmVm
UHRyPFNoYWRvd1Jvb3Q+IHNoYWRvd1Jvb3QgPSBTaGFkb3dSb290OjpjcmVhdGUoc2hhZG93SG9z
dC0+ZG9jdW1lbnQoKSwgdHlwZSk7CisgICAgQVNTRVJUKCFtX3NoYWRvd1Jvb3QpOworICAgIG1f
c2hhZG93Um9vdCA9IFNoYWRvd1Jvb3Q6OmNyZWF0ZShzaGFkb3dIb3N0LT5kb2N1bWVudCgpLCB0
eXBlKTsKIAotICAgIHNoYWRvd1Jvb3QtPnNldFBhcmVudE9yU2hhZG93SG9zdE5vZGUoc2hhZG93
SG9zdCk7Ci0gICAgc2hhZG93Um9vdC0+c2V0UGFyZW50VHJlZVNjb3BlKHNoYWRvd0hvc3QtPnRy
ZWVTY29wZSgpKTsKLSAgICBtX3NoYWRvd1Jvb3RzLnB1c2goc2hhZG93Um9vdC5nZXQoKSk7Cisg
ICAgbV9zaGFkb3dSb290LT5zZXRQYXJlbnRPclNoYWRvd0hvc3ROb2RlKHNoYWRvd0hvc3QpOwor
ICAgIG1fc2hhZG93Um9vdC0+c2V0UGFyZW50VHJlZVNjb3BlKHNoYWRvd0hvc3QtPnRyZWVTY29w
ZSgpKTsKICAgICBtX2Rpc3RyaWJ1dG9yLmRpZFNoYWRvd0JvdW5kYXJ5Q2hhbmdlKHNoYWRvd0hv
c3QpOwotICAgIENoaWxkTm9kZUluc2VydGlvbk5vdGlmaWVyKHNoYWRvd0hvc3QpLm5vdGlmeShz
aGFkb3dSb290LmdldCgpKTsKKyAgICBDaGlsZE5vZGVJbnNlcnRpb25Ob3RpZmllcihzaGFkb3dI
b3N0KS5ub3RpZnkobV9zaGFkb3dSb290LmdldCgpKTsKIAogICAgIC8vIEV4aXN0ZW5jZSBvZiBz
aGFkb3cgcm9vdHMgcmVxdWlyZXMgdGhlIGhvc3QgYW5kIGl0cyBjaGlsZHJlbiB0byBkbyB0cmF2
ZXJzYWwgdXNpbmcgQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLgogICAgIHNoYWRvd0hvc3QtPnNl
dE5lZWRzU2hhZG93VHJlZVdhbGtlcigpOwpAQCAtNTEsMjggKzUxLDI2IEBAIFNoYWRvd1Jvb3Qq
IEVsZW1lbnRTaGFkb3c6OmFkZFNoYWRvd1Jvb3QKICAgICBpZiAoc2hhZG93SG9zdC0+YXR0YWNo
ZWQoKSkKICAgICAgICAgc2hhZG93SG9zdC0+bGF6eVJlYXR0YWNoKCk7CiAKLSAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZFB1c2hTaGFkb3dSb290KHNoYWRvd0hvc3QsIHNoYWRvd1Jv
b3QuZ2V0KCkpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUHVzaFNoYWRvd1Jv
b3Qoc2hhZG93SG9zdCwgbV9zaGFkb3dSb290LmdldCgpKTsKIAotICAgIHJldHVybiBzaGFkb3dS
b290LmdldCgpOworICAgIHJldHVybiBtX3NoYWRvd1Jvb3QuZ2V0KCk7CiB9CiAKLXZvaWQgRWxl
bWVudFNoYWRvdzo6cmVtb3ZlQWxsU2hhZG93Um9vdHMoKQordm9pZCBFbGVtZW50U2hhZG93Ojpy
ZW1vdmVTaGFkb3dSb290KCkKIHsKICAgICAvLyBEb250IHByb3RlY3QgdGhpcyByZWYgY291bnQu
CiAgICAgRWxlbWVudCogc2hhZG93SG9zdCA9IGhvc3QoKTsKIAotICAgIHdoaWxlIChSZWZQdHI8
U2hhZG93Um9vdD4gb2xkUm9vdCA9IG1fc2hhZG93Um9vdHMuaGVhZCgpKSB7CisgICAgaWYgKFJl
ZlB0cjxTaGFkb3dSb290PiBvbGRSb290ID0gbV9zaGFkb3dSb290KSB7CiAgICAgICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFBvcFNoYWRvd1Jvb3Qoc2hhZG93SG9zdCwgb2xkUm9v
dC5nZXQoKSk7CiAgICAgICAgIHNoYWRvd0hvc3QtPmRvY3VtZW50KCktPnJlbW92ZUZvY3VzZWRO
b2RlT2ZTdWJ0cmVlKG9sZFJvb3QuZ2V0KCkpOwogCiAgICAgICAgIGlmIChvbGRSb290LT5hdHRh
Y2hlZCgpKQogICAgICAgICAgICAgb2xkUm9vdC0+ZGV0YWNoKCk7CiAKLSAgICAgICAgbV9zaGFk
b3dSb290cy5yZW1vdmVIZWFkKCk7CisgICAgICAgIG1fc2hhZG93Um9vdCA9IDA7CiAgICAgICAg
IG9sZFJvb3QtPnNldFBhcmVudE9yU2hhZG93SG9zdE5vZGUoMCk7CiAgICAgICAgIG9sZFJvb3Qt
PnNldFBhcmVudFRyZWVTY29wZShzaGFkb3dIb3N0LT5kb2N1bWVudCgpKTsKLSAgICAgICAgb2xk
Um9vdC0+c2V0UHJldigwKTsKLSAgICAgICAgb2xkUm9vdC0+c2V0TmV4dCgwKTsKICAgICAgICAg
Q2hpbGROb2RlUmVtb3ZhbE5vdGlmaWVyKHNoYWRvd0hvc3QpLm5vdGlmeShvbGRSb290LmdldCgp
KTsKICAgICB9CiAKQEAgLTgxLDkgKzc5LDkgQEAgdm9pZCBFbGVtZW50U2hhZG93OjpyZW1vdmVB
bGxTaGFkb3dSb290cwogCiB2b2lkIEVsZW1lbnRTaGFkb3c6OmF0dGFjaCgpCiB7Ci0gICAgQ29u
dGVudERpc3RyaWJ1dG9yOjplbnN1cmVEaXN0cmlidXRpb24oeW91bmdlc3RTaGFkb3dSb290KCkp
OworICAgIENvbnRlbnREaXN0cmlidXRvcjo6ZW5zdXJlRGlzdHJpYnV0aW9uKHNoYWRvd1Jvb3Qo
KSk7CiAKLSAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSB5b3VuZ2VzdFNoYWRvd1Jvb3QoKTsg
cm9vdDsgcm9vdCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7CisgICAgaWYgKFNoYWRvd1Jv
b3QqIHJvb3QgPSBzaGFkb3dSb290KCkpIHsKICAgICAgICAgaWYgKCFyb290LT5hdHRhY2hlZCgp
KQogICAgICAgICAgICAgcm9vdC0+YXR0YWNoKCk7CiAgICAgfQpAQCAtOTEsNyArODksNyBAQCB2
b2lkIEVsZW1lbnRTaGFkb3c6OmF0dGFjaCgpCiAKIHZvaWQgRWxlbWVudFNoYWRvdzo6ZGV0YWNo
KCkKIHsKLSAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSB5b3VuZ2VzdFNoYWRvd1Jvb3QoKTsg
cm9vdDsgcm9vdCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7CisgICAgaWYgKFNoYWRvd1Jv
b3QqIHJvb3QgPSBzaGFkb3dSb290KCkpIHsKICAgICAgICAgaWYgKHJvb3QtPmF0dGFjaGVkKCkp
CiAgICAgICAgICAgICByb290LT5kZXRhY2goKTsKICAgICB9CkBAIC05OSwzMyArOTcsMzMgQEAg
dm9pZCBFbGVtZW50U2hhZG93OjpkZXRhY2goKQogCiBib29sIEVsZW1lbnRTaGFkb3c6OmNoaWxk
TmVlZHNTdHlsZVJlY2FsYygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHlvdW5nZXN0U2hhZG93Um9v
dCgpKTsKLSAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSB5b3VuZ2VzdFNoYWRvd1Jvb3QoKTsg
cm9vdDsgcm9vdCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKQorICAgIEFTU0VSVChzaGFkb3dS
b290KCkpOworICAgIGlmIChTaGFkb3dSb290KiByb290ID0gc2hhZG93Um9vdCgpKSB7CiAgICAg
ICAgIGlmIChyb290LT5jaGlsZE5lZWRzU3R5bGVSZWNhbGMoKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotCisgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBFbGVtZW50U2hh
ZG93OjpuZWVkc1N0eWxlUmVjYWxjKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoeW91bmdlc3RTaGFk
b3dSb290KCkpOwotICAgIGZvciAoU2hhZG93Um9vdCogcm9vdCA9IHlvdW5nZXN0U2hhZG93Um9v
dCgpOyByb290OyByb290ID0gcm9vdC0+b2xkZXJTaGFkb3dSb290KCkpCisgICAgQVNTRVJUKHNo
YWRvd1Jvb3QoKSk7CisgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3dSb290KCkpIHsK
ICAgICAgICAgaWYgKHJvb3QtPm5lZWRzU3R5bGVSZWNhbGMoKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotCisgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBFbGVtZW50U2hh
ZG93OjpyZWNhbGNTdHlsZShOb2RlOjpTdHlsZUNoYW5nZSBjaGFuZ2UpCiB7Ci0gICAgZm9yIChT
aGFkb3dSb290KiByb290ID0geW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290
LT5vbGRlclNoYWRvd1Jvb3QoKSkKKyAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvd1Jv
b3QoKSkKICAgICAgICAgcm9vdC0+cmVjYWxjU3R5bGUoY2hhbmdlKTsKIH0KIAogdm9pZCBFbGVt
ZW50U2hhZG93OjpyZW1vdmVBbGxFdmVudExpc3RlbmVycygpCiB7Ci0gICAgZm9yIChTaGFkb3dS
b290KiByb290ID0geW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290LT5vbGRl
clNoYWRvd1Jvb3QoKSkgeworICAgIGlmIChTaGFkb3dSb290KiByb290ID0gc2hhZG93Um9vdCgp
KSB7CiAgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KG5vZGUpKQogICAgICAgICAgICAgbm9kZS0+cmVtb3ZlQWxsRXZlbnRMaXN0
ZW5lcnMoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmgJKHJldmlz
aW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDEyICs0OCwxMSBAQCBwdWJsaWM6CiAKICAgICB+RWxlbWVudFNoYWRv
dygpCiAgICAgewotICAgICAgICByZW1vdmVBbGxTaGFkb3dSb290cygpOworICAgICAgICByZW1v
dmVTaGFkb3dSb290KCk7CiAgICAgfQogCiAgICAgRWxlbWVudCogaG9zdCgpIGNvbnN0OwotICAg
IFNoYWRvd1Jvb3QqIHlvdW5nZXN0U2hhZG93Um9vdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93
Um9vdHMuaGVhZCgpOyB9Ci0gICAgU2hhZG93Um9vdCogb2xkZXN0U2hhZG93Um9vdCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hhZG93Um9vdHMudGFpbCgpOyB9CisgICAgU2hhZG93Um9vdCogc2hhZG93
Um9vdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93Um9vdC5nZXQoKTsgfQogICAgIEVsZW1lbnRT
aGFkb3cqIGNvbnRhaW5pbmdTaGFkb3coKSBjb25zdDsKIAogICAgIFNoYWRvd1Jvb3QqIGFkZFNo
YWRvd1Jvb3QoRWxlbWVudCogc2hhZG93SG9zdCwgU2hhZG93Um9vdDo6U2hhZG93Um9vdFR5cGUp
OwpAQCAtNzYsMjQgKzc1LDI0IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRWxlbWVudFNoYWRv
dygpIHsgfQogCi0gICAgdm9pZCByZW1vdmVBbGxTaGFkb3dSb290cygpOworICAgIHZvaWQgcmVt
b3ZlU2hhZG93Um9vdCgpOwogCi0gICAgRG91Ymx5TGlua2VkTGlzdDxTaGFkb3dSb290PiBtX3No
YWRvd1Jvb3RzOworICAgIFJlZlB0cjxTaGFkb3dSb290PiBtX3NoYWRvd1Jvb3Q7CiAgICAgQ29u
dGVudERpc3RyaWJ1dG9yIG1fZGlzdHJpYnV0b3I7CiB9OwogCiBpbmxpbmUgRWxlbWVudCogRWxl
bWVudFNoYWRvdzo6aG9zdCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFtX3NoYWRvd1Jvb3RzLmlz
RW1wdHkoKSk7Ci0gICAgcmV0dXJuIHlvdW5nZXN0U2hhZG93Um9vdCgpLT5ob3N0KCk7CisgICAg
QVNTRVJUKG1fc2hhZG93Um9vdCk7CisgICAgcmV0dXJuIG1fc2hhZG93Um9vdC0+aG9zdCgpOwog
fQogCi1pbmxpbmUgU2hhZG93Um9vdCogTm9kZTo6eW91bmdlc3RTaGFkb3dSb290KCkgY29uc3QK
K2lubGluZSBTaGFkb3dSb290KiBOb2RlOjpzaGFkb3dSb290KCkgY29uc3QKIHsKICAgICBpZiAo
IXRoaXMtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKEVsZW1l
bnRTaGFkb3cqIHNoYWRvdyA9IHRvRWxlbWVudCh0aGlzKS0+c2hhZG93KCkpCi0gICAgICAgIHJl
dHVybiBzaGFkb3ctPnlvdW5nZXN0U2hhZG93Um9vdCgpOworICAgICAgICByZXR1cm4gc2hhZG93
LT5zaGFkb3dSb290KCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTEwNCwxNSArMTAzLDYgQEAg
aW5saW5lIEVsZW1lbnRTaGFkb3cqIEVsZW1lbnRTaGFkb3c6OmNvbgogICAgIHJldHVybiAwOwog
fQogCi1jbGFzcyBTaGFkb3dSb290VmVjdG9yIDogcHVibGljIFZlY3RvcjxSZWZQdHI8U2hhZG93
Um9vdD4gPiB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgU2hhZG93Um9vdFZlY3RvcihFbGVtZW50
U2hhZG93KiB0cmVlKQotICAgIHsKLSAgICAgICAgZm9yIChTaGFkb3dSb290KiByb290ID0gdHJl
ZS0+eW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290LT5vbGRlclNoYWRvd1Jv
b3QoKSkKLSAgICAgICAgICAgIGFwcGVuZChyb290KTsKLSAgICB9Ci19OwotCiBpbmxpbmUgRWxl
bWVudFNoYWRvdyogc2hhZG93T2ZQYXJlbnQoY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICBpZiAo
IW5vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAxNDk1MDYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwMSwxNSArODAxLDYgQEAg
Ym9vbCBOb2RlOjpoYXNOb25FbXB0eUJvdW5kaW5nQm94KCkgY29ucwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotaW5saW5lIHN0YXRpYyBTaGFkb3dSb290KiBvbGRlc3RTaGFkb3dSb290Rm9yKGNv
bnN0IE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIGlmIChFbGVtZW50U2hhZG93KiBzaGFkb3cgPSB0b0VsZW1lbnQo
bm9kZSktPnNoYWRvdygpKQotICAgICAgICByZXR1cm4gc2hhZG93LT5vbGRlc3RTaGFkb3dSb290
KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIGlubGluZSB2b2lkIE5vZGU6OnNldFN0eWxlQ2hhbmdl
KFN0eWxlQ2hhbmdlVHlwZSBjaGFuZ2VUeXBlKQogewogICAgIG1fbm9kZUZsYWdzID0gKG1fbm9k
ZUZsYWdzICYgflN0eWxlQ2hhbmdlTWFzaykgfCBjaGFuZ2VUeXBlOwpAQCAtMTk3NCw3ICsxOTY1
LDcgQEAgdm9pZCBOb2RlOjpzaG93Tm9kZVBhdGhGb3JUaGlzKCkgY29uc3QKICAgICAgICAgY29u
c3QgTm9kZSogbm9kZSA9IGNoYWluW2luZGV4IC0gMV07CiAgICAgICAgIGlmIChub2RlLT5pc1No
YWRvd1Jvb3QoKSkgewogICAgICAgICAgICAgaW50IGNvdW50ID0gMDsKLSAgICAgICAgICAgIGZv
ciAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IG9sZGVzdFNoYWRvd1Jvb3RGb3IodG9TaGFkb3dS
b290KG5vZGUpLT5ob3N0KCkpOyBzaGFkb3dSb290ICYmIHNoYWRvd1Jvb3QgIT0gbm9kZTsgc2hh
ZG93Um9vdCA9IHNoYWRvd1Jvb3QtPnlvdW5nZXJTaGFkb3dSb290KCkpCisgICAgICAgICAgICBm
b3IgKGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSB0b1NoYWRvd1Jvb3Qobm9kZSk7IHNo
YWRvd1Jvb3QgJiYgc2hhZG93Um9vdCAhPSBub2RlOyBzaGFkb3dSb290ID0gc2hhZG93Um9vdC0+
c2hhZG93Um9vdCgpKQogICAgICAgICAgICAgICAgICsrY291bnQ7CiAgICAgICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIi8jc2hhZG93LXJvb3RbJWRdIiwgY291bnQpOwogICAgICAgICAgICAgY29u
dGludWU7CkBAIC0yMDI4LDExICsyMDE5LDEwIEBAIHN0YXRpYyB2b2lkIHRyYXZlcnNlVHJlZUFu
ZE1hcmsoY29uc3QgU3QKICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyIsIGluZGVudC50b1N0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBub2RlLT5zaG93Tm9kZSgpOwogICAgICAg
ICBpbmRlbnQuYXBwZW5kKCdcdCcpOwotICAgICAgICBpZiAobm9kZS0+aXNTaGFkb3dSb290KCkp
IHsKLSAgICAgICAgICAgIGlmIChTaGFkb3dSb290KiB5b3VuZ2VyU2hhZG93Um9vdCA9IHRvU2hh
ZG93Um9vdChub2RlKS0+eW91bmdlclNoYWRvd1Jvb3QoKSkKLSAgICAgICAgICAgICAgICB0cmF2
ZXJzZVRyZWVBbmRNYXJrKGluZGVudC50b1N0cmluZygpLCB5b3VuZ2VyU2hhZG93Um9vdCwgbWFy
a2VkTm9kZTEsIG1hcmtlZExhYmVsMSwgbWFya2VkTm9kZTIsIG1hcmtlZExhYmVsMik7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoU2hhZG93Um9vdCogb2xkZXN0U2hhZG93Um9vdCA9IG9sZGVzdFNoYWRv
d1Jvb3RGb3Iobm9kZSkpCi0gICAgICAgICAgICB0cmF2ZXJzZVRyZWVBbmRNYXJrKGluZGVudC50
b1N0cmluZygpLCBvbGRlc3RTaGFkb3dSb290LCBtYXJrZWROb2RlMSwgbWFya2VkTGFiZWwxLCBt
YXJrZWROb2RlMiwgbWFya2VkTGFiZWwyKTsKKyAgICAgICAgaWYgKCFub2RlLT5pc1NoYWRvd1Jv
b3QoKSkgeworICAgICAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBub2RlLT5z
aGFkb3dSb290KCkpCisgICAgICAgICAgICAgICAgdHJhdmVyc2VUcmVlQW5kTWFyayhpbmRlbnQu
dG9TdHJpbmcoKSwgc2hhZG93Um9vdCwgbWFya2VkTm9kZTEsIG1hcmtlZExhYmVsMSwgbWFya2Vk
Tm9kZTIsIG1hcmtlZExhYmVsMik7CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTIwNzYsMTUg
KzIwNjYsMTIgQEAgc3RhdGljIHZvaWQgc2hvd1N1YlRyZWVBY3Jvc3NGcmFtZShjb25zdAogICAg
ICAgICBmcHV0cygiKiIsIHN0ZGVycik7CiAgICAgZnB1dHMoaW5kZW50LnV0ZjgoKS5kYXRhKCks
IHN0ZGVycik7CiAgICAgbm9kZS0+c2hvd05vZGUoKTsKLSAgICAgaWYgKG5vZGUtPmlzU2hhZG93
Um9vdCgpKSB7Ci0gICAgICAgICBpZiAoU2hhZG93Um9vdCogeW91bmdlclNoYWRvd1Jvb3QgPSB0
b1NoYWRvd1Jvb3Qobm9kZSktPnlvdW5nZXJTaGFkb3dSb290KCkpCi0gICAgICAgICAgICAgc2hv
d1N1YlRyZWVBY3Jvc3NGcmFtZSh5b3VuZ2VyU2hhZG93Um9vdCwgbWFya2VkTm9kZSwgaW5kZW50
ICsgIlx0Iik7Ci0gICAgIH0gZWxzZSB7Ci0gICAgICAgICBpZiAobm9kZS0+aXNGcmFtZU93bmVy
RWxlbWVudCgpKQotICAgICAgICAgICAgIHNob3dTdWJUcmVlQWNyb3NzRnJhbWUoc3RhdGljX2Nh
c3Q8Y29uc3QgSFRNTEZyYW1lT3duZXJFbGVtZW50Kj4obm9kZSktPmNvbnRlbnREb2N1bWVudCgp
LCBtYXJrZWROb2RlLCBpbmRlbnQgKyAiXHQiKTsKLSAgICAgICAgIGlmIChTaGFkb3dSb290KiBv
bGRlc3RTaGFkb3dSb290ID0gb2xkZXN0U2hhZG93Um9vdEZvcihub2RlKSkKLSAgICAgICAgICAg
ICBzaG93U3ViVHJlZUFjcm9zc0ZyYW1lKG9sZGVzdFNoYWRvd1Jvb3QsIG1hcmtlZE5vZGUsIGlu
ZGVudCArICJcdCIpOwotICAgICB9CisgICAgaWYgKCFub2RlLT5pc1NoYWRvd1Jvb3QoKSkgewor
ICAgICAgICBpZiAobm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpKQorICAgICAgICAgICAgc2hv
d1N1YlRyZWVBY3Jvc3NGcmFtZShzdGF0aWNfY2FzdDxjb25zdCBIVE1MRnJhbWVPd25lckVsZW1l
bnQqPihub2RlKS0+Y29udGVudERvY3VtZW50KCksIG1hcmtlZE5vZGUsIGluZGVudCArICJcdCIp
OworICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IG5vZGUtPnNoYWRvd1Jvb3Qo
KSkKKyAgICAgICAgICAgIHNob3dTdWJUcmVlQWNyb3NzRnJhbWUoc2hhZG93Um9vdCwgbWFya2Vk
Tm9kZSwgaW5kZW50ICsgIlx0Iik7CisgICAgfQogICAgIGZvciAoTm9kZSogY2hpbGQgPSBub2Rl
LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAg
ICAgICBzaG93U3ViVHJlZUFjcm9zc0ZyYW1lKGNoaWxkLCBtYXJrZWROb2RlLCBpbmRlbnQgKyAi
XHQiKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMTQ5NTA2KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgyLDcgKzI4Miw3IEBAIHB1Ymxp
YzoKICAgICAvLyBEZXByZWNhdGVkLiBTaG91bGQgdXNlIHNoYWRvd0hvc3QoKSBhbmQgY2hlY2sg
dGhlIHJldHVybiB2YWx1ZS4KICAgICBOb2RlKiBkZXByZWNhdGVkU2hhZG93QW5jZXN0b3JOb2Rl
KCkgY29uc3Q7CiAgICAgU2hhZG93Um9vdCogY29udGFpbmluZ1NoYWRvd1Jvb3QoKSBjb25zdDsK
LSAgICBTaGFkb3dSb290KiB5b3VuZ2VzdFNoYWRvd1Jvb3QoKSBjb25zdDsKKyAgICBTaGFkb3dS
b290KiBzaGFkb3dSb290KCkgY29uc3Q7CiAKICAgICAvLyBSZXR1cm5zIDAsIGEgY2hpbGQgb2Yg
U2hhZG93Um9vdCwgb3IgYSBsZWdhY3kgc2hhZG93IHJvb3QuCiAgICAgTm9kZSogbm9uQm91bmRh
cnlTaGFkb3dUcmVlUm9vdE5vZGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dS
b290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAJ
KHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTg0LDcgKzE4NCw3IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNh
dGlvblJlcXVlc3QgU2hhZG8KIHsKICAgICBEb2N1bWVudEZyYWdtZW50OjppbnNlcnRlZEludG8o
aW5zZXJ0aW9uUG9pbnQpOwogCi0gICAgaWYgKCFpbnNlcnRpb25Qb2ludC0+aW5Eb2N1bWVudCgp
IHx8ICFpc09sZGVzdCgpKQorICAgIGlmICghaW5zZXJ0aW9uUG9pbnQtPmluRG9jdW1lbnQoKSkK
ICAgICAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CiAKICAgICAvLyBGSVhNRTogV2hlbiBwYXJz
aW5nIDx2aWRlbyBjb250cm9scz4sIGluc2VydGVkSW50bygpIGlzIGNhbGxlZCBtYW55IHRpbWVz
IHdpdGhvdXQgaW52b2tpbmcgcmVtb3ZlZEZyb20uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
U2hhZG93Um9vdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290
LmgJKHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgRWxlbWVudFNoYWRvdzsKIGNsYXNzIFNjb3BlQ29udGVudERpc3RyaWJ1dGlvbjsKIAotY2xh
c3MgU2hhZG93Um9vdCA6IHB1YmxpYyBEb2N1bWVudEZyYWdtZW50LCBwdWJsaWMgVHJlZVNjb3Bl
LCBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8U2hhZG93Um9vdD4gewotICAgIGZyaWVuZCBj
bGFzcyBXVEY6OkRvdWJseUxpbmtlZExpc3ROb2RlPFNoYWRvd1Jvb3Q+OworY2xhc3MgU2hhZG93
Um9vdCA6IHB1YmxpYyBEb2N1bWVudEZyYWdtZW50LCBwdWJsaWMgVHJlZVNjb3BlIHsKIHB1Ymxp
YzoKICAgICAvLyBGSVhNRTogV2Ugd2lsbCBzdXBwb3J0IG11bHRpcGxlIHNoYWRvdyBzdWJ0cmVl
cywgaG93ZXZlciBjdXJyZW50IGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHdvcmsgd2VsbAogICAg
IC8vIGlmIGEgc2hhZG93IHJvb3QgaXMgZHluYW1pY2FsbHkgY3JlYXRlZC4gU28gd2UgcHJvaGli
aXQgbXVsdGlwbGUgc2hhZG93IHN1YnRyZWVzCkBAIC03NCwxMiArNzMsNiBAQCBwdWJsaWM6CiAK
ICAgICBFbGVtZW50KiBhY3RpdmVFbGVtZW50KCkgY29uc3Q7CiAKLSAgICBTaGFkb3dSb290KiB5
b3VuZ2VyU2hhZG93Um9vdCgpIGNvbnN0IHsgcmV0dXJuIHByZXYoKTsgfQotICAgIFNoYWRvd1Jv
b3QqIG9sZGVyU2hhZG93Um9vdCgpIGNvbnN0IHsgcmV0dXJuIG5leHQoKTsgfQotCi0gICAgYm9v
bCBpc1lvdW5nZXN0KCkgY29uc3QgeyByZXR1cm4gIXlvdW5nZXJTaGFkb3dSb290KCk7IH0KLSAg
ICBib29sIGlzT2xkZXN0KCkgY29uc3QgeyByZXR1cm4gIW9sZGVyU2hhZG93Um9vdCgpOyB9Ci0K
ICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CiAKICAgICB2aXJ0dWFsIEluc2VydGlvbk5vdGlm
aWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUqKSBPVkVSUklERTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5jcHAJKHJldmlzaW9uIDE0OTUw
NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIFRyZWVTY29wZUFkb3B0ZXI6Om1vdmVUcmVlVG9O
ZXdTY29wCiAgICAgICAgICAgICAgICAgbW92ZVRyZWVUb05ld1Njb3BlKGF0dHJzW2ldLmdldCgp
KTsKICAgICAgICAgfQogCi0gICAgICAgIGZvciAoU2hhZG93Um9vdCogc2hhZG93ID0gbm9kZS0+
eW91bmdlc3RTaGFkb3dSb290KCk7IHNoYWRvdzsgc2hhZG93ID0gc2hhZG93LT5vbGRlclNoYWRv
d1Jvb3QoKSkgeworICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93ID0gbm9kZS0+c2hhZG93
Um9vdCgpKSB7CiAgICAgICAgICAgICBzaGFkb3ctPnNldFBhcmVudFRyZWVTY29wZShtX25ld1Nj
b3BlKTsKICAgICAgICAgICAgIGlmICh3aWxsTW92ZVRvTmV3RG9jdW1lbnQpCiAgICAgICAgICAg
ICAgICAgbW92ZVRyZWVUb05ld0RvY3VtZW50KHNoYWRvdywgb2xkRG9jdW1lbnQsIG5ld0RvY3Vt
ZW50KTsKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBUcmVlU2NvcGVBZG9wdGVyOjptb3ZlVHJlZVRv
TmV3RG9jdQogewogICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0KG5vZGUsIHJvb3QpKSB7CiAgICAgICAgIG1vdmVOb2RlVG9OZXdEb2N1
bWVudChub2RlLCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOwotICAgICAgICBmb3IgKFNoYWRv
d1Jvb3QqIHNoYWRvdyA9IG5vZGUtPnlvdW5nZXN0U2hhZG93Um9vdCgpOyBzaGFkb3c7IHNoYWRv
dyA9IHNoYWRvdy0+b2xkZXJTaGFkb3dSb290KCkpCisgICAgICAgIGlmIChTaGFkb3dSb290KiBz
aGFkb3cgPSBub2RlLT5zaGFkb3dSb290KCkpCiAgICAgICAgICAgICBtb3ZlVHJlZVRvTmV3RG9j
dW1lbnQoc2hhZG93LCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOwogICAgIH0KIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNw
cAkocmV2aXNpb24gMTQ5NTI1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVu
dERpc3RyaWJ1dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDggKzIyMiw3IEBAIHZvaWQg
Q29udGVudERpc3RyaWJ1dG9yOjpkaXN0cmlidXRlKEVsZW0KICAgICBWZWN0b3I8Ym9vbD4gZGlz
dHJpYnV0ZWQocG9vbC5zaXplKCkpOwogICAgIGRpc3RyaWJ1dGVkLmZpbGwoZmFsc2UpOwogCi0g
ICAgZm9yIChTaGFkb3dSb290KiByb290ID0gaG9zdC0+eW91bmdlc3RTaGFkb3dSb290KCk7IHJv
b3Q7IHJvb3QgPSByb290LT5vbGRlclNoYWRvd1Jvb3QoKSkgewotCisgICAgaWYgKFNoYWRvd1Jv
b3QqIHJvb3QgPSBob3N0LT5zaGFkb3dSb290KCkpIHsKICAgICAgICAgaWYgKFNjb3BlQ29udGVu
dERpc3RyaWJ1dGlvbiogc2NvcGUgPSByb290LT5zY29wZURpc3RyaWJ1dGlvbigpKSB7CiAgICAg
ICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEluc2VydGlvblBvaW50PiA+JiBpbnNlcnRpb25Q
b2ludHMgPSBzY29wZS0+ZW5zdXJlSW5zZXJ0aW9uUG9pbnRMaXN0KHJvb3QpOwogICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnNlcnRpb25Qb2ludHMuc2l6ZSgpOyArK2kpIHsK
QEAgLTI0NCw3ICsyNDMsNyBAQCBib29sIENvbnRlbnREaXN0cmlidXRvcjo6aW52YWxpZGF0ZShF
bGVtCiAgICAgQVNTRVJUKG5lZWRzSW52YWxpZGF0aW9uKCkpOwogICAgIGJvb2wgbmVlZHNSZWF0
dGFjaCA9IChtX3ZhbGlkaXR5ID09IFVuZGV0ZXJtaW5lZCkgfHwgIW1fbm9kZVRvSW5zZXJ0aW9u
UG9pbnQuaXNFbXB0eSgpOwogCi0gICAgZm9yIChTaGFkb3dSb290KiByb290ID0gaG9zdC0+eW91
bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290LT5vbGRlclNoYWRvd1Jvb3QoKSkg
eworICAgIGlmIChTaGFkb3dSb290KiByb290ID0gaG9zdC0+c2hhZG93Um9vdCgpKSB7CiAgICAg
ICAgIGlmIChTY29wZUNvbnRlbnREaXN0cmlidXRpb24qIHNjb3BlID0gcm9vdC0+c2NvcGVEaXN0
cmlidXRpb24oKSkgewogICAgICAgICAgICAgc2NvcGUtPnNldEluc2VydGlvblBvaW50QXNzaWdu
ZWRUbygwKTsKICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8SW5zZXJ0aW9uUG9pbnQ+
ID4mIGluc2VydGlvblBvaW50cyA9IHNjb3BlLT5lbnN1cmVJbnNlcnRpb25Qb2ludExpc3Qocm9v
dCk7CkBAIC0zNTgsNyArMzU3LDcgQEAgY29uc3QgU2VsZWN0UnVsZUZlYXR1cmVTZXQmIENvbnRl
bnREaXN0cgogICAgICAgICByZXR1cm4gbV9zZWxlY3RGZWF0dXJlczsKIAogICAgIG1fc2VsZWN0
RmVhdHVyZXMuY2xlYXIoKTsKLSAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3ctPm9s
ZGVzdFNoYWRvd1Jvb3QoKTsgcm9vdDsgcm9vdCA9IHJvb3QtPnlvdW5nZXJTaGFkb3dSb290KCkp
CisgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3ctPnNoYWRvd1Jvb3QoKSkKICAgICAg
ICAgY29sbGVjdFNlbGVjdEZlYXR1cmVTZXRGcm9tKHJvb3QpOwogICAgIG1fbmVlZHNTZWxlY3RG
ZWF0dXJlU2V0ID0gZmFsc2U7CiAgICAgcmV0dXJuIG1fc2VsZWN0RmVhdHVyZXM7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHJldmlz
aW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw3ICszNTgsNyBAQCB2b2lkIEluc3BlY3RvckRP
TUFnZW50Ojp1bmJpbmQoTm9kZSogbm9kCiAKICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgp
KSB7CiAgICAgICAgIGlmIChFbGVtZW50U2hhZG93KiBzaGFkb3cgPSB0b0VsZW1lbnQobm9kZSkt
PnNoYWRvdygpKSB7Ci0gICAgICAgICAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3ct
PnlvdW5nZXN0U2hhZG93Um9vdCgpOyByb290OyByb290ID0gcm9vdC0+b2xkZXJTaGFkb3dSb290
KCkpCisgICAgICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvdy0+c2hhZG93Um9v
dCgpKQogICAgICAgICAgICAgICAgIHVuYmluZChyb290LCBub2Rlc01hcCk7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0xNDE4LDcgKzE0MTgsNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006
Ok5vZGU+IEluc3BlCiAgICAgICAgIEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IGVsZW1lbnQtPnNo
YWRvdygpOwogICAgICAgICBpZiAoc2hhZG93KSB7CiAgICAgICAgICAgICBSZWZQdHI8VHlwZUJ1
aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpET006Ok5vZGU+ID4gc2hhZG93Um9vdHMgPSBUeXBl
QnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOwotICAgICAg
ICAgICAgZm9yIChTaGFkb3dSb290KiByb290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3Qo
KTsgcm9vdDsgcm9vdCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKQorICAgICAgICAgICAgaWYg
KFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3ctPnNoYWRvd1Jvb3QoKSkKICAgICAgICAgICAgICAg
ICBzaGFkb3dSb290cy0+YWRkSXRlbShidWlsZE9iamVjdEZvck5vZGUocm9vdCwgMCwgbm9kZXNN
YXApKTsKICAgICAgICAgICAgIHZhbHVlLT5zZXRTaGFkb3dSb290cyhzaGFkb3dSb290cyk7CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNiBAQCBGb2N1c05hdmlnYXRpb25TY29wZTo6
Rm9jdXNOYXZpZ2F0aW9uU2NvCiAgICAgOiBtX3Jvb3RUcmVlU2NvcGUodHJlZVNjb3BlKQogewog
ICAgIEFTU0VSVCh0cmVlU2NvcGUpOwotICAgIEFTU0VSVCghdHJlZVNjb3BlLT5yb290Tm9kZSgp
LT5pc1NoYWRvd1Jvb3QoKSB8fCB0b1NoYWRvd1Jvb3QodHJlZVNjb3BlLT5yb290Tm9kZSgpKS0+
aXNZb3VuZ2VzdCgpKTsKIH0KIAogTm9kZSogRm9jdXNOYXZpZ2F0aW9uU2NvcGU6OnJvb3ROb2Rl
KCkgY29uc3QKQEAgLTEwMiw3ICsxMDEsNyBAQCBGb2N1c05hdmlnYXRpb25TY29wZSBGb2N1c05h
dmlnYXRpb25TY29wCiBGb2N1c05hdmlnYXRpb25TY29wZSBGb2N1c05hdmlnYXRpb25TY29wZTo6
Zm9jdXNOYXZpZ2F0aW9uU2NvcGVPd25lZEJ5U2hhZG93SG9zdChOb2RlKiBub2RlKQogewogICAg
IEFTU0VSVChpc1NoYWRvd0hvc3Qobm9kZSkpOwotICAgIHJldHVybiBGb2N1c05hdmlnYXRpb25T
Y29wZSh0b0VsZW1lbnQobm9kZSktPnNoYWRvdygpLT55b3VuZ2VzdFNoYWRvd1Jvb3QoKSk7Cisg
ICAgcmV0dXJuIEZvY3VzTmF2aWdhdGlvblNjb3BlKHRvRWxlbWVudChub2RlKS0+c2hhZG93KCkt
PnNoYWRvd1Jvb3QoKSk7CiB9CiAKIEZvY3VzTmF2aWdhdGlvblNjb3BlIEZvY3VzTmF2aWdhdGlv
blNjb3BlOjpmb2N1c05hdmlnYXRpb25TY29wZU93bmVkQnlJRnJhbWUoSFRNTEZyYW1lT3duZXJF
bGVtZW50KiBmcmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxl
VXBsb2FkQ29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkocmV2aXNpb24gMTQ5NTA2KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjMwLDcgKzIzMCw3IEBAIEhUTUxJbnB1dEVsZW1lbnQqIFJlbmRlckZpbGVVcGxv
YWRDb250cm8KIAogICAgIEFTU0VSVChpbnB1dC0+c2hhZG93KCkpOwogCi0gICAgTm9kZSogYnV0
dG9uTm9kZSA9IGlucHV0LT5zaGFkb3coKS0+b2xkZXN0U2hhZG93Um9vdCgpLT5maXJzdENoaWxk
KCk7CisgICAgTm9kZSogYnV0dG9uTm9kZSA9IGlucHV0LT5zaGFkb3coKS0+c2hhZG93Um9vdCgp
LT5maXJzdENoaWxkKCk7CiAgICAgcmV0dXJuIGJ1dHRvbk5vZGUgJiYgYnV0dG9uTm9kZS0+aXNI
VE1MRWxlbWVudCgpICYmIGJ1dHRvbk5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpID8gc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGJ1dHRvbk5vZGUpIDogMDsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNDk1MDYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEs
NyArMTUxLDcgQEAgdm9pZCBTVkdUUmVmRWxlbWVudDo6dXBkYXRlUmVmZXJlbmNlZFRleAogICAg
ICAgICB0ZXh0Q29udGVudCA9IHRhcmdldC0+dGV4dENvbnRlbnQoKTsKIAogICAgIEFTU0VSVChz
aGFkb3coKSk7Ci0gICAgU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvdygpLT5vbGRlc3RTaGFkb3dS
b290KCk7CisgICAgU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvdygpLT5zaGFkb3dSb290KCk7CiAg
ICAgaWYgKCFyb290LT5maXJzdENoaWxkKCkpCiAgICAgICAgIHJvb3QtPmFwcGVuZENoaWxkKFRl
eHQ6OmNyZWF0ZShkb2N1bWVudCgpLCB0ZXh0Q29udGVudCksIEFTU0VSVF9OT19FWENFUFRJT04p
OwogICAgIGVsc2UgewpAQCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6OmRl
dGFjaFRhcmdldCgpCiAgICAgU3RyaW5nIGVtcHR5Q29udGVudDsKIAogICAgIEFTU0VSVChzaGFk
b3coKSk7Ci0gICAgTm9kZSogY29udGFpbmVyID0gc2hhZG93KCktPm9sZGVzdFNoYWRvd1Jvb3Qo
KS0+Zmlyc3RDaGlsZCgpOworICAgIE5vZGUqIGNvbnRhaW5lciA9IHNoYWRvdygpLT5zaGFkb3dS
b290KCktPmZpcnN0Q2hpbGQoKTsKICAgICBpZiAoY29udGFpbmVyKQogICAgICAgICBjb250YWlu
ZXItPnNldFRleHRDb250ZW50KGVtcHR5Q29udGVudCwgSUdOT1JFX0VYQ0VQVElPTik7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE0OTUwNikKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzk0LDcgKzM5NCw3IEBAIHN0YXRpYyBib29sIHN1YnRyZWVDb250YWluc0Rpc2FsbG93ZWRFbGUK
IHZvaWQgU1ZHVXNlRWxlbWVudDo6Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKQogewogICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgdHJ5IHRvIG9wdGltaXplIHRoaXMsIHRvIGF0IGxlYXN0IGFsbG93
IHBhcnRpYWwgcmVjbG9uZXMuCi0gICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1RyZWVSb290RWxl
bWVudCA9ICBzaGFkb3coKS0+b2xkZXN0U2hhZG93Um9vdCgpKQorICAgIGlmIChTaGFkb3dSb290
KiBzaGFkb3dUcmVlUm9vdEVsZW1lbnQgPSAgc2hhZG93KCktPnNoYWRvd1Jvb3QoKSkKICAgICAg
ICAgc2hhZG93VHJlZVJvb3RFbGVtZW50LT5yZW1vdmVDaGlsZHJlbigpOwogCiAgICAgaWYgKG1f
dGFyZ2V0RWxlbWVudEluc3RhbmNlKSB7CkBAIC00ODYsNyArNDg2LDcgQEAgdm9pZCBTVkdVc2VF
bGVtZW50OjpidWlsZFNoYWRvd0FuZEluc3RhbgogICAgIEFTU0VSVChtX3RhcmdldEVsZW1lbnRJ
bnN0YW5jZS0+ZGlyZWN0VXNlRWxlbWVudCgpID09IHRoaXMpOwogICAgIEFTU0VSVChtX3Rhcmdl
dEVsZW1lbnRJbnN0YW5jZS0+Y29ycmVzcG9uZGluZ0VsZW1lbnQoKSA9PSB0YXJnZXQpOwogCi0g
ICAgU2hhZG93Um9vdCogc2hhZG93VHJlZVJvb3RFbGVtZW50ID0gc2hhZG93KCktPm9sZGVzdFNo
YWRvd1Jvb3QoKTsKKyAgICBTaGFkb3dSb290KiBzaGFkb3dUcmVlUm9vdEVsZW1lbnQgPSBzaGFk
b3coKS0+c2hhZG93Um9vdCgpOwogICAgIEFTU0VSVChzaGFkb3dUcmVlUm9vdEVsZW1lbnQpOwog
CiAgICAgLy8gQnVpbGQgc2hhZG93IHRyZWUgZnJvbSBpbnN0YW5jZSB0cmVlCkBAIC03MDgsNyAr
NzA4LDcgQEAgdm9pZCBTVkdVc2VFbGVtZW50OjpidWlsZFNoYWRvd1RyZWUoU1ZHRQogICAgIGlm
IChzdWJ0cmVlQ29udGFpbnNEaXNhbGxvd2VkRWxlbWVudChuZXdDaGlsZC5nZXQoKSkpCiAgICAg
ICAgIHJlbW92ZURpc2FsbG93ZWRFbGVtZW50c0Zyb21TdWJ0cmVlKG5ld0NoaWxkLmdldCgpKTsK
IAotICAgIHNoYWRvdygpLT5vbGRlc3RTaGFkb3dSb290KCktPmFwcGVuZENoaWxkKG5ld0NoaWxk
LnJlbGVhc2UoKSk7CisgICAgc2hhZG93KCktPnNoYWRvd1Jvb3QoKS0+YXBwZW5kQ2hpbGQobmV3
Q2hpbGQucmVsZWFzZSgpKTsKIH0KIAogdm9pZCBTVkdVc2VFbGVtZW50OjpleHBhbmRVc2VFbGVt
ZW50c0luU2hhZG93VHJlZShOb2RlKiBlbGVtZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcAkocmV2aXNpb24gMTQ5NTA2KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTgsNyArNjk4LDcgQEAgSW50ZXJu
YWxzOjpTaGFkb3dSb290SWZTaGFkb3dET01FbmFibGVkTwogICAgIH0KIAogICAgIGlmIChFbGVt
ZW50U2hhZG93KiBzaGFkb3cgPSBob3N0LT5zaGFkb3coKSkKLSAgICAgICAgcmV0dXJuIHNoYWRv
dy0+eW91bmdlc3RTaGFkb3dSb290KCk7CisgICAgICAgIHJldHVybiBzaGFkb3ctPnNoYWRvd1Jv
b3QoKTsKIAogICAgIHJldHVybiBob3N0LT5jcmVhdGVTaGFkb3dSb290KGVjKS5nZXQoKTsKIH0K
QEAgLTcxNCw1NSArNzE0LDE1IEBAIEludGVybmFsczo6U2hhZG93Um9vdElmU2hhZG93RE9NRW5h
YmxlZE8KIAogSW50ZXJuYWxzOjpTaGFkb3dSb290SWZTaGFkb3dET01FbmFibGVkT3JOb2RlKiBJ
bnRlcm5hbHM6OnNoYWRvd1Jvb3QoRWxlbWVudCogaG9zdCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
Ci0gICAgLy8gRklYTUU6IEludGVybmFsczo6c2hhZG93Um9vdCgpIGluIHRlc3RzIHNob3VsZCBi
ZSBjb252ZXJ0ZWQgdG8geW91bmdlc3RTaGFkb3dSb290KCkgb3Igb2xkZXN0U2hhZG93Um9vdCgp
LgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODQ2NQot
ICAgIHJldHVybiB5b3VuZ2VzdFNoYWRvd1Jvb3QoaG9zdCwgZWMpOwotfQotCi1JbnRlcm5hbHM6
OlNoYWRvd1Jvb3RJZlNoYWRvd0RPTUVuYWJsZWRPck5vZGUqIEludGVybmFsczo6eW91bmdlc3RT
aGFkb3dSb290KEVsZW1lbnQqIGhvc3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICgh
aG9zdCkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgaWYgKEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IGhvc3QtPnNoYWRv
dygpKQotICAgICAgICByZXR1cm4gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotSW50ZXJuYWxzOjpTaGFkb3dSb290SWZTaGFkb3dET01FbmFibGVkT3JO
b2RlKiBJbnRlcm5hbHM6Om9sZGVzdFNoYWRvd1Jvb3QoRWxlbWVudCogaG9zdCwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17CiAgICAgaWYgKCFob3N0KSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NF
U1NfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KICAgICBpZiAoRWxlbWVudFNoYWRv
dyogc2hhZG93ID0gaG9zdC0+c2hhZG93KCkpCi0gICAgICAgIHJldHVybiBzaGFkb3ctPm9sZGVz
dFNoYWRvd1Jvb3QoKTsKKyAgICAgICAgcmV0dXJuIHNoYWRvdy0+c2hhZG93Um9vdCgpOwogICAg
IHJldHVybiAwOwogfQogCi1JbnRlcm5hbHM6OlNoYWRvd1Jvb3RJZlNoYWRvd0RPTUVuYWJsZWRP
ck5vZGUqIEludGVybmFsczo6eW91bmdlclNoYWRvd1Jvb3QoTm9kZSogc2hhZG93LCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBpZiAoIXNoYWRvdyB8fCAhc2hhZG93LT5pc1NoYWRvd1Jvb3Qo
KSkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvU2hhZG93Um9vdChzaGFkb3cpLT55b3VuZ2VyU2hhZG93
Um9vdCgpOwotfQotCi1JbnRlcm5hbHM6OlNoYWRvd1Jvb3RJZlNoYWRvd0RPTUVuYWJsZWRPck5v
ZGUqIEludGVybmFsczo6b2xkZXJTaGFkb3dSb290KE5vZGUqIHNoYWRvdywgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgaWYgKCFzaGFkb3cgfHwgIXNoYWRvdy0+aXNTaGFkb3dSb290KCkpIHsK
LSAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLQotICAgIHJldHVybiB0b1NoYWRvd1Jvb3Qoc2hhZG93KS0+b2xkZXJTaGFkb3dSb290KCk7
Ci19Ci0KIFN0cmluZyBJbnRlcm5hbHM6OnNoYWRvd1Jvb3RUeXBlKGNvbnN0IE5vZGUqIHJvb3Qs
IEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewogICAgIGlmICghcm9vdCB8fCAhcm9vdC0+aXNT
aGFkb3dSb290KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkocmV2aXNp
b24gMTQ5NTA2KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODksMTAgKzg5LDYgQEAgcHVibGljOgogICAgIFNoYWRvd1Jvb3RJZlNoYWRv
d0RPTUVuYWJsZWRPck5vZGUqIGVuc3VyZVNoYWRvd1Jvb3QoRWxlbWVudCogaG9zdCwgRXhjZXB0
aW9uQ29kZSYpOwogICAgIFNoYWRvd1Jvb3RJZlNoYWRvd0RPTUVuYWJsZWRPck5vZGUqIGNyZWF0
ZVNoYWRvd1Jvb3QoRWxlbWVudCogaG9zdCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFNoYWRvd1Jv
b3RJZlNoYWRvd0RPTUVuYWJsZWRPck5vZGUqIHNoYWRvd1Jvb3QoRWxlbWVudCogaG9zdCwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIFNoYWRvd1Jvb3RJZlNoYWRvd0RPTUVuYWJsZWRPck5vZGUqIHlv
dW5nZXN0U2hhZG93Um9vdChFbGVtZW50KiBob3N0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU2hh
ZG93Um9vdElmU2hhZG93RE9NRW5hYmxlZE9yTm9kZSogb2xkZXN0U2hhZG93Um9vdChFbGVtZW50
KiBob3N0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU2hhZG93Um9vdElmU2hhZG93RE9NRW5hYmxl
ZE9yTm9kZSogeW91bmdlclNoYWRvd1Jvb3QoTm9kZSogc2hhZG93LCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgU2hhZG93Um9vdElmU2hhZG93RE9NRW5hYmxlZE9yTm9kZSogb2xkZXJTaGFkb3dSb290
KE5vZGUqIHNoYWRvdywgRXhjZXB0aW9uQ29kZSYpOwogICAgIFN0cmluZyBzaGFkb3dSb290VHlw
ZShjb25zdCBOb2RlKiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIGJvb2wgaGFzU2hhZG93
SW5zZXJ0aW9uUG9pbnQoY29uc3QgTm9kZSosIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICBi
b29sIGhhc0NvbnRlbnRFbGVtZW50KGNvbnN0IE5vZGUqLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCShyZXZpc2lvbiAxNDk1MDYp
CisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDE3ICs0MCwxMSBAQAogICAgIFNoYWRvd1Jvb3QgZW5zdXJlU2hhZG93Um9vdChFbGVt
ZW50IGhvc3QpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICAgICBTaGFkb3dSb290IGNyZWF0ZVNo
YWRvd1Jvb3QoRWxlbWVudCBob3N0KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAgICAgU2hhZG93
Um9vdCBzaGFkb3dSb290KEVsZW1lbnQgaG9zdCkgcmFpc2VzIChET01FeGNlcHRpb24pOwotICAg
IFNoYWRvd1Jvb3QgeW91bmdlc3RTaGFkb3dSb290KEVsZW1lbnQgaG9zdCkgcmFpc2VzIChET01F
eGNlcHRpb24pOwotICAgIFNoYWRvd1Jvb3Qgb2xkZXN0U2hhZG93Um9vdChFbGVtZW50IGhvc3Qp
IHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKLSAgICBTaGFkb3dSb290IHlvdW5nZXJTaGFkb3dSb290
KE5vZGUgcm9vdCkgcmFpc2VzIChET01FeGNlcHRpb24pOwogICAgIFNoYWRvd1Jvb3Qgb2xkZXJT
aGFkb3dSb290KE5vZGUgcm9vdCkgcmFpc2VzIChET01FeGNlcHRpb24pOwogI2Vsc2UKICAgICBO
b2RlIGVuc3VyZVNoYWRvd1Jvb3QoRWxlbWVudCBob3N0KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7
CiAgICAgTm9kZSBjcmVhdGVTaGFkb3dSb290KEVsZW1lbnQgaG9zdCkgcmFpc2VzIChET01FeGNl
cHRpb24pOwogICAgIE5vZGUgc2hhZG93Um9vdChFbGVtZW50IGhvc3QpIHJhaXNlcyAoRE9NRXhj
ZXB0aW9uKTsKLSAgICBOb2RlIHlvdW5nZXN0U2hhZG93Um9vdChFbGVtZW50IGhvc3QpIHJhaXNl
cyAoRE9NRXhjZXB0aW9uKTsKLSAgICBOb2RlIG9sZGVzdFNoYWRvd1Jvb3QoRWxlbWVudCBob3N0
KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7Ci0gICAgTm9kZSB5b3VuZ2VyU2hhZG93Um9vdChOb2Rl
IHJvb3QpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICNlbmRpZgogICAgIERPTVN0cmluZyBzaGFk
b3dSb290VHlwZShOb2RlIHJvb3QpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICAgICBib29sZWFu
IGhhc1NoYWRvd0luc2VydGlvblBvaW50KE5vZGUgcm9vdCkgcmFpc2VzIChET01FeGNlcHRpb24p
Owo=
</data>
<flag name="commit-queue"
          id="221940"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200512</attachid>
            <date>2013-05-03 19:36:43 -0700</date>
            <delta_ts>2013-05-03 20:03:56 -0700</delta_ts>
            <desc>yet another</desc>
            <filename>remove-older-young-4.patch</filename>
            <type>text/plain</type>
            <size>42695</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0OTUzOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMyBAQAorMjAxMy0wNS0wMyAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGNvbmNlcHQgb2Yg
eW91bmdlciBhbmQgb2xkZXIgc2hhZG93IHRyZWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTU1NzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBZb3VuZ2VyIGFuZCBvbGRlciBzaGFkb3cgdHJlZXMgYXJl
IGFuIG9ic2N1cmUgY29ybmVyIG9mIHRoZSBTaGFkb3cgRE9NIHNwZWMuCisgICAgICAgIAorICAg
ICAgICBTdXBwb3J0IG9ubHkgb25lIHNoYWRvdyB0cmVlIHBlciBlbGVtZW50LiBUaGlzIHNpbXBs
aWZpZXMgbWFueSB0aGluZ3MuIAorCisgICAgICAgICogZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdh
bGtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRy
YXZlcnNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2Vy
Ojp0cmF2ZXJzZVNpYmxpbmdJbkN1cnJlbnRUcmVlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZVBhcmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlUGFy
ZW50SW5DdXJyZW50VHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVX
YWxrZXI6OnRyYXZlcnNlUGFyZW50QmFja1RvU2hhZG93Um9vdE9ySG9zdCk6CisgICAgICAgICog
ZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
ZWRTaGFkb3dUcmVlV2Fsa2VyOjphc3NlcnRQcmVjb25kaXRpb24pOgorICAgICAgICAoQ29tcG9z
ZWRTaGFkb3dUcmVlV2Fsa2VyKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZUFsZ29yaXRo
bXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlSW5zZXJ0aW9uTm90aWZpZXI6Om5v
dGlmeURlc2NlbmRhbnRJbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
aGlsZE5vZGVJbnNlcnRpb25Ob3RpZmllcjo6bm90aWZ5RGVzY2VuZGFudEluc2VydGVkSW50b1Ry
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlUmVtb3ZhbE5vdGlmaWVyOjpub3RpZnlE
ZXNjZW5kYW50UmVtb3ZlZEZyb21Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5v
ZGVSZW1vdmFsTm90aWZpZXI6Om5vdGlmeURlc2NlbmRhbnRSZW1vdmVkRnJvbVRyZWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6Y29sbGVjdEZyYW1lT3duZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OmFzc2VydENvbm5lY3RlZFN1YnJhbWVDb3VudElzQ29uc2lz
dGVudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpidWlsZEFjY2Vzc0tleU1hcCk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YXV0aG9yU2hhZG93Um9vdCk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50Ojp1c2VyQWdlbnRTaGFkb3dSb290KToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QpOgorICAgICAgICAqIGRvbS9FbGVt
ZW50Lmg6CisgICAgICAgIChFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omhh
c0F1dGhvclNoYWRvd1Jvb3QpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmlkbDoKKyAgICAgICAg
KiBkb20vRWxlbWVudFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93
OjphZGRTaGFkb3dSb290KToKKyAgICAgICAgCisgICAgICAgIEFsbG93IG9ubHkgb25lIFNoYWRv
d1Jvb3QgcGVyIEVsZW1lbnRTaGFkb3cuIFJlbW92ZSBsaW5rZWQgbGlzdCBoYW5kbGluZy4KKyAg
ICAgICAgCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjpyZW1vdmVBbGxTaGFkb3dS
b290cyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjphdHRhY2gpOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnRTaGFkb3c6OmNoaWxkTmVlZHNTdHlsZVJlY2FsYyk6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50U2hhZG93OjpuZWVkc1N0eWxlUmVjYWxjKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnRTaGFkb3c6OnJlY2FsY1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6
OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKToKKyAgICAgICAgKiBkb20vRWxlbWVudFNoYWRvdy5o
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6c2hhZG93Um9vdCk6CisgICAgICAg
IChFbGVtZW50U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6Omhvc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6OnNob3dOb2RlUGF0aEZvclRoaXMpOgorICAgICAgICAoV2ViQ29yZTo6
dHJhdmVyc2VUcmVlQW5kTWFyayk6CisgICAgICAgIChXZWJDb3JlOjpzaG93U3ViVHJlZUFjcm9z
c0ZyYW1lKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoTm9kZSk6CisgICAgICAg
ICogZG9tL1NoYWRvd1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6aW5z
ZXJ0ZWRJbnRvKToKKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5oOgorICAgICAgICAoU2hhZG93
Um9vdCk6CisgICAgICAgIAorICAgICAgICAgICAgUmVtb3ZlIExpbmtlZExpc3QgYmFzZS4KKyAg
ICAgICAgCisgICAgICAgICogZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVUb05ld1Njb3BlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRyZWVTY29wZUFkb3B0ZXI6Om1vdmVUcmVlVG9OZXdEb2N1bWVudCk6CisgICAgICAg
ICogaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnREaXN0cmlidXRvcjo6ZGlzdHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RGlzdHJpYnV0b3I6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudERp
c3RyaWJ1dG9yOjplbnN1cmVTZWxlY3RGZWF0dXJlU2V0KToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdl
bnQ6OnVuYmluZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRP
YmplY3RGb3JOb2RlKToKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGb2N1c05hdmlnYXRpb25TY29wZTo6Rm9jdXNOYXZpZ2F0aW9uU2NvcGUp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNOYXZpZ2F0aW9uU2NvcGU6OmZvY3VzTmF2aWdhdGlv
blNjb3BlT3duZWRCeVNoYWRvd0hvc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxl
VXBsb2FkQ29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbDo6dXBsb2FkQnV0dG9uKToKKyAgICAgICAgKiBzdmcvU1ZHVFJlZkVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHVFJlZkVsZW1lbnQ6OnVwZGF0ZVJlZmVyZW5jZWRUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RSZWZFbGVtZW50OjpkZXRhY2hUYXJnZXQpOgorICAgICAg
ICAqIHN2Zy9TVkdVc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1l
bnQ6OmNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVs
ZW1lbnQ6OmJ1aWxkU2hhZG93QW5kSW5zdGFuY2VUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1VzZUVsZW1lbnQ6OmJ1aWxkU2hhZG93VHJlZSk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5h
bHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjplbnN1cmVTaGFkb3dSb290KToK
KyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2hhZG93Um9vdCk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAoSW50ZXJuYWxz
KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisKIDIwMTMtMDUtMDMgIEFsZXhl
eSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gc2V0TWV0YWRh
dGFVUkwgaW5jb3JyZWN0bHkgdHJlYXRzIHBhdGggYnl0ZXMgYXMgTGF0aW4tMQpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDE0OTUwNikK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDcsMTIgKzIwNyw5IEBAIGJvb2wgU3R5bGVTY29wZVJlc29sdmVyOjpzdHlsZVNo
YXJpbmdDYW4KICAgICAvLyBhZGQgYSBuZXcgZmxhZyB0byBFbGVtZW50U2hhZG93IGFuZCBjYWNo
ZSB3aGV0aGVyIGFueUBob3N0IEAtcnVsZXMgYXJlCiAgICAgLy8gYXBwbGllZCB0byB0aGUgZWxl
bWVudCBvciBub3QuIFNvIHdlIGNhbiBhdm9pZCBhbHdheXMgdHJhdmVyc2luZwogICAgIC8vIHNo
YWRvdyByb290cy4KLSAgICBmb3IgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBzaGFkb3ctPnlv
dW5nZXN0U2hhZG93Um9vdCgpOyBzaGFkb3dSb290OyBzaGFkb3dSb290ID0gc2hhZG93Um9vdC0+
b2xkZXJTaGFkb3dSb290KCkpIHsKKyAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IHNo
YWRvdy0+c2hhZG93Um9vdCgpKSB7CiAgICAgICAgIGlmIChhdEhvc3RSdWxlU2V0Rm9yKHNoYWRv
d1Jvb3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgaWYgKCFTY29wZUNv
bnRlbnREaXN0cmlidXRpb246Omhhc1NoYWRvd0VsZW1lbnQoc2hhZG93Um9vdCkpCi0gICAgICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjMwLDExICsyMjcs
OSBAQCB2b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVsZXMoCiAgICAgLy8gYWRk
IGEgbmV3IGZsYWcgdG8gRWxlbWVudFNoYWRvdyBhbmQgY2FjaGUgd2hldGhlciBhbnkgQGhvc3Qg
QC1ydWxlcyBhcmUKICAgICAvLyBhcHBsaWVkIHRvIHRoZSBlbGVtZW50IG9yIG5vdC4gU28gd2Ug
Y2FuIHF1aWNrbHkgZXhpdCB0aGlzIG1ldGhvZAogICAgIC8vIGJ5IHVzaW5nIHRoZSBmbGFnLgot
ICAgIGZvciAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IHNoYWRvdy0+eW91bmdlc3RTaGFkb3dS
b290KCk7IHNoYWRvd1Jvb3Q7IHNoYWRvd1Jvb3QgPSBzaGFkb3dSb290LT5vbGRlclNoYWRvd1Jv
b3QoKSkgeyAKKyAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IHNoYWRvdy0+c2hhZG93
Um9vdCgpKSB7CiAgICAgICAgIGlmIChSdWxlU2V0KiBydWxlU2V0ID0gYXRIb3N0UnVsZVNldEZv
cihzaGFkb3dSb290KSkKICAgICAgICAgICAgIG1hdGNoZWRSdWxlcy5hcHBlbmQocnVsZVNldCk7
Ci0gICAgICAgIGlmICghU2NvcGVDb250ZW50RGlzdHJpYnV0aW9uOjpoYXNTaGFkb3dFbGVtZW50
KHNoYWRvd1Jvb3QpKQotICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcAkocmV2aXNp
b24gMTQ5NTI1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDcgQEAgTm9kZSogQ29tcG9zZWRTaGFk
b3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZQogICAgIEFTU0VSVChub2RlKTsKICAgICBpZiAoY2FuQ3Jv
c3NVcHBlckJvdW5kYXJ5KCkpIHsKICAgICAgICAgRWxlbWVudFNoYWRvdyogc2hhZG93ID0gc2hh
ZG93Rm9yKG5vZGUpOwotICAgICAgICByZXR1cm4gc2hhZG93ID8gdHJhdmVyc2VMaWdodENoaWxk
cmVuKHNoYWRvdy0+eW91bmdlc3RTaGFkb3dSb290KCksIGRpcmVjdGlvbikKKyAgICAgICAgcmV0
dXJuIHNoYWRvdyA/IHRyYXZlcnNlTGlnaHRDaGlsZHJlbihzaGFkb3ctPnNoYWRvd1Jvb3QoKSwg
ZGlyZWN0aW9uKQogICAgICAgICAgICAgOiB0cmF2ZXJzZUxpZ2h0Q2hpbGRyZW4obm9kZSwgZGly
ZWN0aW9uKTsKICAgICB9CiAgICAgaWYgKGlzU2hhZG93SG9zdChub2RlKSkKQEAgLTE3NiwyNSAr
MTc2LDkgQEAgTm9kZSogQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZQogICAgIEFT
U0VSVChub2RlKTsKICAgICBpZiAoTm9kZSogZm91bmQgPSB0cmF2ZXJzZVNpYmxpbmdzKGRpcmVj
dGlvbiA9PSBUcmF2ZXJzYWxEaXJlY3Rpb25Gb3J3YXJkID8gbm9kZS0+bmV4dFNpYmxpbmcoKSA6
IG5vZGUtPnByZXZpb3VzU2libGluZygpLCBkaXJlY3Rpb24pKQogICAgICAgICByZXR1cm4gZm91
bmQ7Ci0gICAgaWYgKE5vZGUqIG5leHQgPSB0cmF2ZXJzZUJhY2tUb1lvdW5nZXJTaGFkb3dSb290
KG5vZGUsIGRpcmVjdGlvbikpCi0gICAgICAgIHJldHVybiBuZXh0OwogICAgIHJldHVybiBlc2Nh
cGVGYWxsYmFja0NvbnRlbnRFbGVtZW50KG5vZGUsIGRpcmVjdGlvbik7CiB9CiAKLU5vZGUqIENv
bXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6dHJhdmVyc2VCYWNrVG9Zb3VuZ2VyU2hhZG93Um9vdChj
b25zdCBOb2RlKiBub2RlLCBUcmF2ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uKQotewotICAgIEFT
U0VSVChub2RlKTsKLSAgICBpZiAobm9kZS0+cGFyZW50Tm9kZSgpICYmIG5vZGUtPnBhcmVudE5v
ZGUoKS0+aXNTaGFkb3dSb290KCkpIHsKLSAgICAgICAgU2hhZG93Um9vdCogcGFyZW50U2hhZG93
Um9vdCA9IHRvU2hhZG93Um9vdChub2RlLT5wYXJlbnROb2RlKCkpOwotICAgICAgICBpZiAoIXBh
cmVudFNoYWRvd1Jvb3QtPmlzWW91bmdlc3QoKSkgewotICAgICAgICAgICAgSW5zZXJ0aW9uUG9p
bnQqIGFzc2lnbmVkSW5zZXJ0aW9uUG9pbnQgPSBTY29wZUNvbnRlbnREaXN0cmlidXRpb246OmFz
c2lnbmVkVG8ocGFyZW50U2hhZG93Um9vdCk7Ci0gICAgICAgICAgICBBU1NFUlQoYXNzaWduZWRJ
bnNlcnRpb25Qb2ludCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VTaWJsaW5nSW5DdXJy
ZW50VHJlZShhc3NpZ25lZEluc2VydGlvblBvaW50LCBkaXJlY3Rpb24pOwotICAgICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiAwOwotfQotCiBpbmxpbmUgTm9kZSogQ29tcG9zZWRTaGFkb3dUcmVl
V2Fsa2VyOjplc2NhcGVGYWxsYmFja0NvbnRlbnRFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUsIFRy
YXZlcnNhbERpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgQVNTRVJUKG5vZGUpOwpAQCAtMjI3
LDEwICsyMTEsOCBAQCBOb2RlKiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlCiAg
ICAgaWYgKG5vZGUtPmlzUHNldWRvRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gbm9kZS0+cGFy
ZW50T3JTaGFkb3dIb3N0Tm9kZSgpOwogCi0gICAgaWYgKCFjYW5Dcm9zc1VwcGVyQm91bmRhcnko
KSAmJiBub2RlLT5pc1NoYWRvd1Jvb3QoKSkgewotICAgICAgICBBU1NFUlQodG9TaGFkb3dSb290
KG5vZGUpLT5pc1lvdW5nZXN0KCkpOworICAgIGlmICghY2FuQ3Jvc3NVcHBlckJvdW5kYXJ5KCkg
JiYgbm9kZS0+aXNTaGFkb3dSb290KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIH0KIAogICAg
IGlmIChub2RlQ2FuQmVEaXN0cmlidXRlZChub2RlKSkgewogICAgICAgICBpZiAoSW5zZXJ0aW9u
UG9pbnQqIGluc2VydGlvblBvaW50ID0gcmVzb2x2ZVJlcHJvamVjdGlvbihub2RlKSkgewpAQCAt
MjQ5LDI2ICsyMzEsMjIgQEAgTm9kZSogQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJz
ZQogaW5saW5lIE5vZGUqIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6dHJhdmVyc2VQYXJlbnRJ
bkN1cnJlbnRUcmVlKGNvbnN0IE5vZGUqIG5vZGUsIFBhcmVudFRyYXZlcnNhbERldGFpbHMqIGRl
dGFpbHMpIGNvbnN0CiB7CiAgICAgaWYgKE5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUo
KSkKLSAgICAgICAgcmV0dXJuIHBhcmVudC0+aXNTaGFkb3dSb290KCkgPyB0cmF2ZXJzZVBhcmVu
dEJhY2tUb1lvdW5nZXJTaGFkb3dSb290T3JIb3N0KHRvU2hhZG93Um9vdChwYXJlbnQpLCBkZXRh
aWxzKSA6IHRyYXZlcnNlTm9kZUVzY2FwaW5nRmFsbGJhY2tDb250ZW50cyhwYXJlbnQsIGRldGFp
bHMpOworICAgICAgICByZXR1cm4gcGFyZW50LT5pc1NoYWRvd1Jvb3QoKSA/IHRyYXZlcnNlUGFy
ZW50QmFja1RvU2hhZG93Um9vdE9ySG9zdCh0b1NoYWRvd1Jvb3QocGFyZW50KSwgZGV0YWlscykg
OiB0cmF2ZXJzZU5vZGVFc2NhcGluZ0ZhbGxiYWNrQ29udGVudHMocGFyZW50LCBkZXRhaWxzKTsK
ICAgICByZXR1cm4gMDsKIH0KIAotTm9kZSogQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2
ZXJzZVBhcmVudEJhY2tUb1lvdW5nZXJTaGFkb3dSb290T3JIb3N0KGNvbnN0IFNoYWRvd1Jvb3Qq
IHNoYWRvd1Jvb3QsIFBhcmVudFRyYXZlcnNhbERldGFpbHMqIGRldGFpbHMpIGNvbnN0CitOb2Rl
KiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlUGFyZW50QmFja1RvU2hhZG93Um9v
dE9ySG9zdChjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290LCBQYXJlbnRUcmF2ZXJzYWxEZXRh
aWxzKiBkZXRhaWxzKSBjb25zdAogewogICAgIEFTU0VSVChzaGFkb3dSb290KTsKICAgICBBU1NF
UlQoIVNjb3BlQ29udGVudERpc3RyaWJ1dGlvbjo6YXNzaWduZWRUbyhzaGFkb3dSb290KSk7CiAK
LSAgICBpZiAoc2hhZG93Um9vdC0+aXNZb3VuZ2VzdCgpKSB7Ci0gICAgICAgIGlmIChjYW5Dcm9z
c1VwcGVyQm91bmRhcnkoKSkgewotICAgICAgICAgICAgaWYgKGRldGFpbHMpCi0gICAgICAgICAg
ICAgICAgZGV0YWlscy0+ZGlkVHJhdmVyc2VTaGFkb3dSb290KHNoYWRvd1Jvb3QpOwotICAgICAg
ICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybiBjb25zdF9jYXN0PFNoYWRvd1Jvb3QqPihzaGFkb3dSb290KTsKKyAgICBpZiAoY2FuQ3Jv
c3NVcHBlckJvdW5kYXJ5KCkpIHsKKyAgICAgICAgaWYgKGRldGFpbHMpCisgICAgICAgICAgICBk
ZXRhaWxzLT5kaWRUcmF2ZXJzZVNoYWRvd1Jvb3Qoc2hhZG93Um9vdCk7CisgICAgICAgIHJldHVy
biBzaGFkb3dSb290LT5ob3N0KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IGNvbnN0X2Nhc3Q8U2hhZG93Um9vdCo+KHNoYWRvd1Jvb3QpOwogfQogCiBOb2RlKiBDb21wb3Nl
ZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlTmV4dFNpYmxpbmcoY29uc3QgTm9kZSogbm9kZSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmgJ
KHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1Ry
ZWVXYWxrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODksOCArODksNiBAQCBwcml2YXRlOgogICAg
ICAgICBBU1NFUlQobV9ub2RlKTsKICAgICAgICAgaWYgKGNhbkNyb3NzVXBwZXJCb3VuZGFyeSgp
KQogICAgICAgICAgICAgQVNTRVJUKCFtX25vZGUtPmlzU2hhZG93Um9vdCgpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgQVNTRVJUKCFtX25vZGUtPmlzU2hhZG93Um9vdCgpIHx8IHRvU2hh
ZG93Um9vdChtX25vZGUpLT5pc1lvdW5nZXN0KCkpOwogICAgICAgICBBU1NFUlQoIWlzQWN0aXZl
SW5zZXJ0aW9uUG9pbnQobV9ub2RlKSk7CiAjZW5kaWYKICAgICB9CkBAIC0xMTksMTIgKzExNywx
MSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBOb2RlKiB0cmF2ZXJzZVNpYmxpbmdzKGNvbnN0IE5v
ZGUqLCBUcmF2ZXJzYWxEaXJlY3Rpb24pOwogICAgIHN0YXRpYyBOb2RlKiB0cmF2ZXJzZURpc3Ry
aWJ1dGVkTm9kZXMoY29uc3QgTm9kZSosIGNvbnN0IEluc2VydGlvblBvaW50KiwgVHJhdmVyc2Fs
RGlyZWN0aW9uKTsKIAotICAgIHN0YXRpYyBOb2RlKiB0cmF2ZXJzZUJhY2tUb1lvdW5nZXJTaGFk
b3dSb290KGNvbnN0IE5vZGUqLCBUcmF2ZXJzYWxEaXJlY3Rpb24pOwogICAgIHN0YXRpYyBOb2Rl
KiBlc2NhcGVGYWxsYmFja0NvbnRlbnRFbGVtZW50KGNvbnN0IE5vZGUqLCBUcmF2ZXJzYWxEaXJl
Y3Rpb24pOwogCiAgICAgTm9kZSogdHJhdmVyc2VOb2RlRXNjYXBpbmdGYWxsYmFja0NvbnRlbnRz
KGNvbnN0IE5vZGUqLCBQYXJlbnRUcmF2ZXJzYWxEZXRhaWxzKiA9IDApIGNvbnN0OwogICAgIE5v
ZGUqIHRyYXZlcnNlUGFyZW50SW5DdXJyZW50VHJlZShjb25zdCBOb2RlKiwgUGFyZW50VHJhdmVy
c2FsRGV0YWlscyogPSAwKSBjb25zdDsKLSAgICBOb2RlKiB0cmF2ZXJzZVBhcmVudEJhY2tUb1lv
dW5nZXJTaGFkb3dSb290T3JIb3N0KGNvbnN0IFNoYWRvd1Jvb3QqLCBQYXJlbnRUcmF2ZXJzYWxE
ZXRhaWxzKiA9IDApIGNvbnN0OworICAgIE5vZGUqIHRyYXZlcnNlUGFyZW50QmFja1RvU2hhZG93
Um9vdE9ySG9zdChjb25zdCBTaGFkb3dSb290KiwgUGFyZW50VHJhdmVyc2FsRGV0YWlscyogPSAw
KSBjb25zdDsKIAogICAgIGNvbnN0IE5vZGUqIG1fbm9kZTsKICAgICBQb2xpY3kgbV9wb2xpY3k7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5j
cHAJKHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2Rl
QWxnb3JpdGhtcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0Nyw5IEBAIHZvaWQgQ2hp
bGROb2RlSW5zZXJ0aW9uTm90aWZpZXI6Om5vdGlmeUQKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IHRvRWxlbWVudChub2RlKS0+c2hhZG93KCkpIHsK
LSAgICAgICAgU2hhZG93Um9vdFZlY3RvciByb290cyhzaGFkb3cpOwotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHJvb3RzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobm9k
ZS0+aW5Eb2N1bWVudCgpICYmIHJvb3RzW2ldLT5ob3N0KCkgPT0gbm9kZSkKLSAgICAgICAgICAg
ICAgICBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQocm9vdHNbaV0uZ2V0KCkpOworICAg
ICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvdy0+c2hhZG93Um9vdCgpKSB7CisgICAg
ICAgICAgICBpZiAobm9kZS0+aW5Eb2N1bWVudCgpICYmIHJvb3QtPmhvc3QoKSA9PSBub2RlKQor
ICAgICAgICAgICAgICAgIG5vdGlmeU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudChyb290KTsKICAg
ICAgICAgfQogICAgIH0KIH0KQEAgLTYyLDcgKzYxLDcgQEAgdm9pZCBDaGlsZE5vZGVJbnNlcnRp
b25Ob3RpZmllcjo6bm90aWZ5RAogICAgICAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50b1Ry
ZWUodG9Db250YWluZXJOb2RlKGNoaWxkKSk7CiAgICAgfQogCi0gICAgZm9yIChTaGFkb3dSb290
KiByb290ID0gbm9kZS0+eW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290LT5v
bGRlclNoYWRvd1Jvb3QoKSkKKyAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IG5vZGUtPnNoYWRv
d1Jvb3QoKSkKICAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50b1RyZWUocm9vdCk7CiB9CiAK
QEAgLTg0LDEwICs4Myw5IEBAIHZvaWQgQ2hpbGROb2RlUmVtb3ZhbE5vdGlmaWVyOjpub3RpZnlE
ZXMKICAgICAgICAgbm9kZS0+ZG9jdW1lbnQoKS0+c2V0Q1NTVGFyZ2V0KDApOwogCiAgICAgaWYg
KEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IHRvRWxlbWVudChub2RlKS0+c2hhZG93KCkpIHsKLSAg
ICAgICAgU2hhZG93Um9vdFZlY3RvciByb290cyhzaGFkb3cpOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHJvb3RzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIW5vZGUt
PmluRG9jdW1lbnQoKSAmJiByb290c1tpXS0+aG9zdCgpID09IG5vZGUpCi0gICAgICAgICAgICAg
ICAgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQocm9vdHNbaV0uZ2V0KCkpOworICAgICAg
ICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvdy0+c2hhZG93Um9vdCgpKSB7CisgICAgICAg
ICAgICBpZiAoIW5vZGUtPmluRG9jdW1lbnQoKSAmJiByb290LT5ob3N0KCkgPT0gbm9kZSkKKyAg
ICAgICAgICAgICAgICBub3RpZnlOb2RlUmVtb3ZlZEZyb21Eb2N1bWVudChyb290KTsKICAgICAg
ICAgfQogICAgIH0KIH0KQEAgLTEwMywxNSArMTAxLDE0IEBAIHZvaWQgQ2hpbGROb2RlUmVtb3Zh
bE5vdGlmaWVyOjpub3RpZnlEZXMKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKEVsZW1lbnRT
aGFkb3cqIHNoYWRvdyA9IHRvRWxlbWVudChub2RlKS0+c2hhZG93KCkpIHsKLSAgICAgICAgU2hh
ZG93Um9vdFZlY3RvciByb290cyhzaGFkb3cpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHJvb3RzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbm90aWZ5Tm9kZVJlbW92ZWRGcm9t
VHJlZShyb290c1tpXS5nZXQoKSk7CisgICAgICAgIGlmIChTaGFkb3dSb290KiByb290ID0gc2hh
ZG93LT5zaGFkb3dSb290KCkpCisgICAgICAgICAgICBub3RpZnlOb2RlUmVtb3ZlZEZyb21UcmVl
KHJvb3QpOwogICAgIH0KIH0KIAogdm9pZCBDaGlsZEZyYW1lRGlzY29ubmVjdG9yOjpjb2xsZWN0
RnJhbWVPd25lcnMoRWxlbWVudFNoYWRvdyogc2hhZG93KQogewotICAgIGZvciAoU2hhZG93Um9v
dCogcm9vdCA9IHNoYWRvdy0+eW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290
LT5vbGRlclNoYWRvd1Jvb3QoKSkKKyAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvdy0+
c2hhZG93Um9vdCgpKQogICAgICAgICBjb2xsZWN0RnJhbWVPd25lcnMocm9vdCk7CiB9CiAKQEAg
LTEyNSw3ICsxMjIsNyBAQCB1bnNpZ25lZCBhc3NlcnRDb25uZWN0ZWRTdWJyYW1lQ291bnRJc0Nv
CiAgICAgICAgICAgICBjb3VudCsrOwogCiAgICAgICAgIGlmIChFbGVtZW50U2hhZG93KiBzaGFk
b3cgPSB0b0VsZW1lbnQobm9kZSktPnNoYWRvdygpKSB7Ci0gICAgICAgICAgICBmb3IgKFNoYWRv
d1Jvb3QqIHJvb3QgPSBzaGFkb3ctPnlvdW5nZXN0U2hhZG93Um9vdCgpOyByb290OyByb290ID0g
cm9vdC0+b2xkZXJTaGFkb3dSb290KCkpCisgICAgICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9v
dCA9IHNoYWRvdy0+c2hhZG93Um9vdCgpKQogICAgICAgICAgICAgICAgIGNvdW50ICs9IGFzc2Vy
dENvbm5lY3RlZFN1YnJhbWVDb3VudElzQ29uc2lzdGVudChyb290KTsKICAgICAgICAgfQogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTQ5NTA2KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzE4LDcgKzcx
OCw3IEBAIHZvaWQgRG9jdW1lbnQ6OmJ1aWxkQWNjZXNzS2V5TWFwKFRyZWVTY28KICAgICAgICAg
aWYgKCFhY2Nlc3NLZXkuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9lbGVtZW50c0J5QWNjZXNz
S2V5LnNldChhY2Nlc3NLZXkuaW1wbCgpLCBlbGVtZW50KTsKIAotICAgICAgICBmb3IgKFNoYWRv
d1Jvb3QqIHJvb3QgPSBlbGVtZW50LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgcm9vdDsgcm9vdCA9
IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKQorICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9
IGVsZW1lbnQtPnNoYWRvd1Jvb3QoKSkKICAgICAgICAgICAgIGJ1aWxkQWNjZXNzS2V5TWFwKHJv
b3QpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDE0OTUw
NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTUzNCwxMiArMTUzNCwxMiBAQCBQYXNzUmVmUHRyPFNoYWRvd1Jvb3Q+IEVsZW1lbnQ6OmNyZWF0
ZVNoCiAgICAgcmV0dXJuIGVuc3VyZVNoYWRvdygpLT5hZGRTaGFkb3dSb290KHRoaXMsIFNoYWRv
d1Jvb3Q6OkF1dGhvclNoYWRvd1Jvb3QpOwogfQogCi1TaGFkb3dSb290KiBFbGVtZW50OjpzaGFk
b3dSb290KCkgY29uc3QKK1NoYWRvd1Jvb3QqIEVsZW1lbnQ6OmF1dGhvclNoYWRvd1Jvb3QoKSBj
b25zdAogewogICAgIEVsZW1lbnRTaGFkb3cqIGVsZW1lbnRTaGFkb3cgPSBzaGFkb3coKTsKICAg
ICBpZiAoIWVsZW1lbnRTaGFkb3cpCiAgICAgICAgIHJldHVybiAwOwotICAgIFNoYWRvd1Jvb3Qq
IHNoYWRvd1Jvb3QgPSBlbGVtZW50U2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsKKyAgICBT
aGFkb3dSb290KiBzaGFkb3dSb290ID0gZWxlbWVudFNoYWRvdy0+c2hhZG93Um9vdCgpOwogICAg
IGlmIChzaGFkb3dSb290LT50eXBlKCkgPT0gU2hhZG93Um9vdDo6QXV0aG9yU2hhZG93Um9vdCkK
ICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3Q7CiAgICAgcmV0dXJuIDA7CkBAIC0xNTQ4LDcgKzE1
NDgsNyBAQCBTaGFkb3dSb290KiBFbGVtZW50OjpzaGFkb3dSb290KCkgY29uc3QKIFNoYWRvd1Jv
b3QqIEVsZW1lbnQ6OnVzZXJBZ2VudFNoYWRvd1Jvb3QoKSBjb25zdAogewogICAgIGlmIChFbGVt
ZW50U2hhZG93KiBlbGVtZW50U2hhZG93ID0gc2hhZG93KCkpIHsKLSAgICAgICAgaWYgKFNoYWRv
d1Jvb3QqIHNoYWRvd1Jvb3QgPSBlbGVtZW50U2hhZG93LT5vbGRlc3RTaGFkb3dSb290KCkpIHsK
KyAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBlbGVtZW50U2hhZG93LT5zaGFk
b3dSb290KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChzaGFkb3dSb290LT50eXBlKCkgPT0gU2hh
ZG93Um9vdDo6VXNlckFnZW50U2hhZG93Um9vdCk7CiAgICAgICAgICAgICByZXR1cm4gc2hhZG93
Um9vdDsKICAgICAgICAgfQpAQCAtMTU1OSwxMCArMTU1OSwxMSBAQCBTaGFkb3dSb290KiBFbGVt
ZW50Ojp1c2VyQWdlbnRTaGFkb3dSb290CiAKIFNoYWRvd1Jvb3QqIEVsZW1lbnQ6OmVuc3VyZVVz
ZXJBZ2VudFNoYWRvd1Jvb3QoKQogewotICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0g
dXNlckFnZW50U2hhZG93Um9vdCgpKQotICAgICAgICByZXR1cm4gc2hhZG93Um9vdDsKLSAgICBT
aGFkb3dSb290KiBzaGFkb3dSb290ID0gZW5zdXJlU2hhZG93KCktPmFkZFNoYWRvd1Jvb3QodGhp
cywgU2hhZG93Um9vdDo6VXNlckFnZW50U2hhZG93Um9vdCk7Ci0gICAgZGlkQWRkVXNlckFnZW50
U2hhZG93Um9vdChzaGFkb3dSb290KTsKKyAgICBTaGFkb3dSb290KiBzaGFkb3dSb290ID0gdXNl
ckFnZW50U2hhZG93Um9vdCgpOworICAgIGlmICghc2hhZG93Um9vdCkgeworICAgICAgICBzaGFk
b3dSb290ID0gZW5zdXJlU2hhZG93KCktPmFkZFNoYWRvd1Jvb3QodGhpcywgU2hhZG93Um9vdDo6
VXNlckFnZW50U2hhZG93Um9vdCk7CisgICAgICAgIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3Qo
c2hhZG93Um9vdCk7CisgICAgfQogICAgIHJldHVybiBzaGFkb3dSb290OwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmgJKHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxNSw5ICs0MTUsOSBAQCBwdWJsaWM6CiAgICAg
RWxlbWVudFNoYWRvdyogc2hhZG93KCkgY29uc3Q7CiAgICAgRWxlbWVudFNoYWRvdyogZW5zdXJl
U2hhZG93KCk7CiAgICAgUGFzc1JlZlB0cjxTaGFkb3dSb290PiBjcmVhdGVTaGFkb3dSb290KEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICBTaGFkb3dSb290KiBzaGFkb3dSb290KCkgY29uc3Q7CisgICAg
U2hhZG93Um9vdCogYXV0aG9yU2hhZG93Um9vdCgpIGNvbnN0OwogCi0gICAgYm9vbCBoYXNBdXRo
b3JTaGFkb3dSb290KCkgY29uc3QgeyByZXR1cm4gc2hhZG93Um9vdCgpOyB9CisgICAgYm9vbCBo
YXNBdXRob3JTaGFkb3dSb290KCkgY29uc3QgeyByZXR1cm4gYXV0aG9yU2hhZG93Um9vdCgpOyB9
CiAgICAgdmlydHVhbCB2b2lkIHdpbGxBZGRBdXRob3JTaGFkb3dSb290KCkgeyB9CiAKICAgICBT
aGFkb3dSb290KiB1c2VyQWdlbnRTaGFkb3dSb290KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuaWRsCShyZXZpc2lvbiAxNDk1MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsNyBAQAogI2lmIGRlZmluZWQoRU5B
QkxFX1NIQURPV19ET00pICYmIEVOQUJMRV9TSEFET1dfRE9NICYmIGRlZmluZWQoTEFOR1VBR0Vf
SkFWQVNDUklQVCkgJiYgTEFOR1VBR0VfSkFWQVNDUklQVAogICAgIFtSZWZsZWN0PXBzZXVkbywg
SW1wbGVtZW50ZWRBcz1wc2V1ZG9dIGF0dHJpYnV0ZSBET01TdHJpbmcgd2Via2l0UHNldWRvOwog
ICAgIFtJbXBsZW1lbnRlZEFzPWNyZWF0ZVNoYWRvd1Jvb3RdIFNoYWRvd1Jvb3Qgd2Via2l0Q3Jl
YXRlU2hhZG93Um9vdCgpIHJhaXNlcyhET01FeGNlcHRpb24pOwotICAgIFtJbXBsZW1lbnRlZEFz
PXNoYWRvd1Jvb3RdIHJlYWRvbmx5IGF0dHJpYnV0ZSBTaGFkb3dSb290IHdlYmtpdFNoYWRvd1Jv
b3Q7CisgICAgW0ltcGxlbWVudGVkQXM9YXV0aG9yU2hhZG93Um9vdF0gcmVhZG9ubHkgYXR0cmli
dXRlIFNoYWRvd1Jvb3Qgd2Via2l0U2hhZG93Um9vdDsKICAgICBbSW1wbGVtZW50ZWRBcz1pbnNl
cnRpb25QYXJlbnRGb3JCaW5kaW5nXSByZWFkb25seSBhdHRyaWJ1dGUgTm9kZSB3ZWJraXRJbnNl
cnRpb25QYXJlbnQ7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRT
aGFkb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93
LmNwcAkocmV2aXNpb24gMTQ5NTA2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFk
b3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMyArMzQsMTMgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBTaGFkb3dSb290KiBFbGVtZW50U2hhZG93OjphZGRTaGFkb3dSb290KEVsZW1lbnQq
IHNoYWRvd0hvc3QsIFNoYWRvd1Jvb3Q6OlNoYWRvd1Jvb3RUeXBlIHR5cGUpCiB7Ci0gICAgUmVm
UHRyPFNoYWRvd1Jvb3Q+IHNoYWRvd1Jvb3QgPSBTaGFkb3dSb290OjpjcmVhdGUoc2hhZG93SG9z
dC0+ZG9jdW1lbnQoKSwgdHlwZSk7CisgICAgQVNTRVJUKCFtX3NoYWRvd1Jvb3QpOworICAgIG1f
c2hhZG93Um9vdCA9IFNoYWRvd1Jvb3Q6OmNyZWF0ZShzaGFkb3dIb3N0LT5kb2N1bWVudCgpLCB0
eXBlKTsKIAotICAgIHNoYWRvd1Jvb3QtPnNldFBhcmVudE9yU2hhZG93SG9zdE5vZGUoc2hhZG93
SG9zdCk7Ci0gICAgc2hhZG93Um9vdC0+c2V0UGFyZW50VHJlZVNjb3BlKHNoYWRvd0hvc3QtPnRy
ZWVTY29wZSgpKTsKLSAgICBtX3NoYWRvd1Jvb3RzLnB1c2goc2hhZG93Um9vdC5nZXQoKSk7Cisg
ICAgbV9zaGFkb3dSb290LT5zZXRQYXJlbnRPclNoYWRvd0hvc3ROb2RlKHNoYWRvd0hvc3QpOwor
ICAgIG1fc2hhZG93Um9vdC0+c2V0UGFyZW50VHJlZVNjb3BlKHNoYWRvd0hvc3QtPnRyZWVTY29w
ZSgpKTsKICAgICBtX2Rpc3RyaWJ1dG9yLmRpZFNoYWRvd0JvdW5kYXJ5Q2hhbmdlKHNoYWRvd0hv
c3QpOwotICAgIENoaWxkTm9kZUluc2VydGlvbk5vdGlmaWVyKHNoYWRvd0hvc3QpLm5vdGlmeShz
aGFkb3dSb290LmdldCgpKTsKKyAgICBDaGlsZE5vZGVJbnNlcnRpb25Ob3RpZmllcihzaGFkb3dI
b3N0KS5ub3RpZnkobV9zaGFkb3dSb290LmdldCgpKTsKIAogICAgIC8vIEV4aXN0ZW5jZSBvZiBz
aGFkb3cgcm9vdHMgcmVxdWlyZXMgdGhlIGhvc3QgYW5kIGl0cyBjaGlsZHJlbiB0byBkbyB0cmF2
ZXJzYWwgdXNpbmcgQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLgogICAgIHNoYWRvd0hvc3QtPnNl
dE5lZWRzU2hhZG93VHJlZVdhbGtlcigpOwpAQCAtNTEsMjggKzUxLDI2IEBAIFNoYWRvd1Jvb3Qq
IEVsZW1lbnRTaGFkb3c6OmFkZFNoYWRvd1Jvb3QKICAgICBpZiAoc2hhZG93SG9zdC0+YXR0YWNo
ZWQoKSkKICAgICAgICAgc2hhZG93SG9zdC0+bGF6eVJlYXR0YWNoKCk7CiAKLSAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZFB1c2hTaGFkb3dSb290KHNoYWRvd0hvc3QsIHNoYWRvd1Jv
b3QuZ2V0KCkpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUHVzaFNoYWRvd1Jv
b3Qoc2hhZG93SG9zdCwgbV9zaGFkb3dSb290LmdldCgpKTsKIAotICAgIHJldHVybiBzaGFkb3dS
b290LmdldCgpOworICAgIHJldHVybiBtX3NoYWRvd1Jvb3QuZ2V0KCk7CiB9CiAKLXZvaWQgRWxl
bWVudFNoYWRvdzo6cmVtb3ZlQWxsU2hhZG93Um9vdHMoKQordm9pZCBFbGVtZW50U2hhZG93Ojpy
ZW1vdmVTaGFkb3dSb290KCkKIHsKICAgICAvLyBEb250IHByb3RlY3QgdGhpcyByZWYgY291bnQu
CiAgICAgRWxlbWVudCogc2hhZG93SG9zdCA9IGhvc3QoKTsKIAotICAgIHdoaWxlIChSZWZQdHI8
U2hhZG93Um9vdD4gb2xkUm9vdCA9IG1fc2hhZG93Um9vdHMuaGVhZCgpKSB7CisgICAgaWYgKFJl
ZlB0cjxTaGFkb3dSb290PiBvbGRSb290ID0gbV9zaGFkb3dSb290KSB7CiAgICAgICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFBvcFNoYWRvd1Jvb3Qoc2hhZG93SG9zdCwgb2xkUm9v
dC5nZXQoKSk7CiAgICAgICAgIHNoYWRvd0hvc3QtPmRvY3VtZW50KCktPnJlbW92ZUZvY3VzZWRO
b2RlT2ZTdWJ0cmVlKG9sZFJvb3QuZ2V0KCkpOwogCiAgICAgICAgIGlmIChvbGRSb290LT5hdHRh
Y2hlZCgpKQogICAgICAgICAgICAgb2xkUm9vdC0+ZGV0YWNoKCk7CiAKLSAgICAgICAgbV9zaGFk
b3dSb290cy5yZW1vdmVIZWFkKCk7CisgICAgICAgIG1fc2hhZG93Um9vdCA9IDA7CiAgICAgICAg
IG9sZFJvb3QtPnNldFBhcmVudE9yU2hhZG93SG9zdE5vZGUoMCk7CiAgICAgICAgIG9sZFJvb3Qt
PnNldFBhcmVudFRyZWVTY29wZShzaGFkb3dIb3N0LT5kb2N1bWVudCgpKTsKLSAgICAgICAgb2xk
Um9vdC0+c2V0UHJldigwKTsKLSAgICAgICAgb2xkUm9vdC0+c2V0TmV4dCgwKTsKICAgICAgICAg
Q2hpbGROb2RlUmVtb3ZhbE5vdGlmaWVyKHNoYWRvd0hvc3QpLm5vdGlmeShvbGRSb290LmdldCgp
KTsKICAgICB9CiAKQEAgLTgxLDkgKzc5LDkgQEAgdm9pZCBFbGVtZW50U2hhZG93OjpyZW1vdmVB
bGxTaGFkb3dSb290cwogCiB2b2lkIEVsZW1lbnRTaGFkb3c6OmF0dGFjaCgpCiB7Ci0gICAgQ29u
dGVudERpc3RyaWJ1dG9yOjplbnN1cmVEaXN0cmlidXRpb24oeW91bmdlc3RTaGFkb3dSb290KCkp
OworICAgIENvbnRlbnREaXN0cmlidXRvcjo6ZW5zdXJlRGlzdHJpYnV0aW9uKHNoYWRvd1Jvb3Qo
KSk7CiAKLSAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSB5b3VuZ2VzdFNoYWRvd1Jvb3QoKTsg
cm9vdDsgcm9vdCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7CisgICAgaWYgKFNoYWRvd1Jv
b3QqIHJvb3QgPSBzaGFkb3dSb290KCkpIHsKICAgICAgICAgaWYgKCFyb290LT5hdHRhY2hlZCgp
KQogICAgICAgICAgICAgcm9vdC0+YXR0YWNoKCk7CiAgICAgfQpAQCAtOTEsNyArODksNyBAQCB2
b2lkIEVsZW1lbnRTaGFkb3c6OmF0dGFjaCgpCiAKIHZvaWQgRWxlbWVudFNoYWRvdzo6ZGV0YWNo
KCkKIHsKLSAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSB5b3VuZ2VzdFNoYWRvd1Jvb3QoKTsg
cm9vdDsgcm9vdCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7CisgICAgaWYgKFNoYWRvd1Jv
b3QqIHJvb3QgPSBzaGFkb3dSb290KCkpIHsKICAgICAgICAgaWYgKHJvb3QtPmF0dGFjaGVkKCkp
CiAgICAgICAgICAgICByb290LT5kZXRhY2goKTsKICAgICB9CkBAIC05OSwzMyArOTcsMzMgQEAg
dm9pZCBFbGVtZW50U2hhZG93OjpkZXRhY2goKQogCiBib29sIEVsZW1lbnRTaGFkb3c6OmNoaWxk
TmVlZHNTdHlsZVJlY2FsYygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHlvdW5nZXN0U2hhZG93Um9v
dCgpKTsKLSAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSB5b3VuZ2VzdFNoYWRvd1Jvb3QoKTsg
cm9vdDsgcm9vdCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKQorICAgIEFTU0VSVChzaGFkb3dS
b290KCkpOworICAgIGlmIChTaGFkb3dSb290KiByb290ID0gc2hhZG93Um9vdCgpKSB7CiAgICAg
ICAgIGlmIChyb290LT5jaGlsZE5lZWRzU3R5bGVSZWNhbGMoKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotCisgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBFbGVtZW50U2hh
ZG93OjpuZWVkc1N0eWxlUmVjYWxjKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoeW91bmdlc3RTaGFk
b3dSb290KCkpOwotICAgIGZvciAoU2hhZG93Um9vdCogcm9vdCA9IHlvdW5nZXN0U2hhZG93Um9v
dCgpOyByb290OyByb290ID0gcm9vdC0+b2xkZXJTaGFkb3dSb290KCkpCisgICAgQVNTRVJUKHNo
YWRvd1Jvb3QoKSk7CisgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3dSb290KCkpIHsK
ICAgICAgICAgaWYgKHJvb3QtPm5lZWRzU3R5bGVSZWNhbGMoKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotCisgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBFbGVtZW50U2hh
ZG93OjpyZWNhbGNTdHlsZShOb2RlOjpTdHlsZUNoYW5nZSBjaGFuZ2UpCiB7Ci0gICAgZm9yIChT
aGFkb3dSb290KiByb290ID0geW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290
LT5vbGRlclNoYWRvd1Jvb3QoKSkKKyAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvd1Jv
b3QoKSkKICAgICAgICAgcm9vdC0+cmVjYWxjU3R5bGUoY2hhbmdlKTsKIH0KIAogdm9pZCBFbGVt
ZW50U2hhZG93OjpyZW1vdmVBbGxFdmVudExpc3RlbmVycygpCiB7Ci0gICAgZm9yIChTaGFkb3dS
b290KiByb290ID0geW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290LT5vbGRl
clNoYWRvd1Jvb3QoKSkgeworICAgIGlmIChTaGFkb3dSb290KiByb290ID0gc2hhZG93Um9vdCgp
KSB7CiAgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KG5vZGUpKQogICAgICAgICAgICAgbm9kZS0+cmVtb3ZlQWxsRXZlbnRMaXN0
ZW5lcnMoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmgJKHJldmlz
aW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDEyICs0OCwxMSBAQCBwdWJsaWM6CiAKICAgICB+RWxlbWVudFNoYWRv
dygpCiAgICAgewotICAgICAgICByZW1vdmVBbGxTaGFkb3dSb290cygpOworICAgICAgICByZW1v
dmVTaGFkb3dSb290KCk7CiAgICAgfQogCiAgICAgRWxlbWVudCogaG9zdCgpIGNvbnN0OwotICAg
IFNoYWRvd1Jvb3QqIHlvdW5nZXN0U2hhZG93Um9vdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93
Um9vdHMuaGVhZCgpOyB9Ci0gICAgU2hhZG93Um9vdCogb2xkZXN0U2hhZG93Um9vdCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hhZG93Um9vdHMudGFpbCgpOyB9CisgICAgU2hhZG93Um9vdCogc2hhZG93
Um9vdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93Um9vdC5nZXQoKTsgfQogICAgIEVsZW1lbnRT
aGFkb3cqIGNvbnRhaW5pbmdTaGFkb3coKSBjb25zdDsKIAogICAgIFNoYWRvd1Jvb3QqIGFkZFNo
YWRvd1Jvb3QoRWxlbWVudCogc2hhZG93SG9zdCwgU2hhZG93Um9vdDo6U2hhZG93Um9vdFR5cGUp
OwpAQCAtNzYsMjQgKzc1LDI0IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRWxlbWVudFNoYWRv
dygpIHsgfQogCi0gICAgdm9pZCByZW1vdmVBbGxTaGFkb3dSb290cygpOworICAgIHZvaWQgcmVt
b3ZlU2hhZG93Um9vdCgpOwogCi0gICAgRG91Ymx5TGlua2VkTGlzdDxTaGFkb3dSb290PiBtX3No
YWRvd1Jvb3RzOworICAgIFJlZlB0cjxTaGFkb3dSb290PiBtX3NoYWRvd1Jvb3Q7CiAgICAgQ29u
dGVudERpc3RyaWJ1dG9yIG1fZGlzdHJpYnV0b3I7CiB9OwogCiBpbmxpbmUgRWxlbWVudCogRWxl
bWVudFNoYWRvdzo6aG9zdCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFtX3NoYWRvd1Jvb3RzLmlz
RW1wdHkoKSk7Ci0gICAgcmV0dXJuIHlvdW5nZXN0U2hhZG93Um9vdCgpLT5ob3N0KCk7CisgICAg
QVNTRVJUKG1fc2hhZG93Um9vdCk7CisgICAgcmV0dXJuIG1fc2hhZG93Um9vdC0+aG9zdCgpOwog
fQogCi1pbmxpbmUgU2hhZG93Um9vdCogTm9kZTo6eW91bmdlc3RTaGFkb3dSb290KCkgY29uc3QK
K2lubGluZSBTaGFkb3dSb290KiBOb2RlOjpzaGFkb3dSb290KCkgY29uc3QKIHsKICAgICBpZiAo
IXRoaXMtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKEVsZW1l
bnRTaGFkb3cqIHNoYWRvdyA9IHRvRWxlbWVudCh0aGlzKS0+c2hhZG93KCkpCi0gICAgICAgIHJl
dHVybiBzaGFkb3ctPnlvdW5nZXN0U2hhZG93Um9vdCgpOworICAgICAgICByZXR1cm4gc2hhZG93
LT5zaGFkb3dSb290KCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTEwNCwxNSArMTAzLDYgQEAg
aW5saW5lIEVsZW1lbnRTaGFkb3cqIEVsZW1lbnRTaGFkb3c6OmNvbgogICAgIHJldHVybiAwOwog
fQogCi1jbGFzcyBTaGFkb3dSb290VmVjdG9yIDogcHVibGljIFZlY3RvcjxSZWZQdHI8U2hhZG93
Um9vdD4gPiB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgU2hhZG93Um9vdFZlY3RvcihFbGVtZW50
U2hhZG93KiB0cmVlKQotICAgIHsKLSAgICAgICAgZm9yIChTaGFkb3dSb290KiByb290ID0gdHJl
ZS0+eW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290LT5vbGRlclNoYWRvd1Jv
b3QoKSkKLSAgICAgICAgICAgIGFwcGVuZChyb290KTsKLSAgICB9Ci19OwotCiBpbmxpbmUgRWxl
bWVudFNoYWRvdyogc2hhZG93T2ZQYXJlbnQoY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICBpZiAo
IW5vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAxNDk1MDYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwMSwxNSArODAxLDYgQEAg
Ym9vbCBOb2RlOjpoYXNOb25FbXB0eUJvdW5kaW5nQm94KCkgY29ucwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotaW5saW5lIHN0YXRpYyBTaGFkb3dSb290KiBvbGRlc3RTaGFkb3dSb290Rm9yKGNv
bnN0IE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIGlmIChFbGVtZW50U2hhZG93KiBzaGFkb3cgPSB0b0VsZW1lbnQo
bm9kZSktPnNoYWRvdygpKQotICAgICAgICByZXR1cm4gc2hhZG93LT5vbGRlc3RTaGFkb3dSb290
KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIGlubGluZSB2b2lkIE5vZGU6OnNldFN0eWxlQ2hhbmdl
KFN0eWxlQ2hhbmdlVHlwZSBjaGFuZ2VUeXBlKQogewogICAgIG1fbm9kZUZsYWdzID0gKG1fbm9k
ZUZsYWdzICYgflN0eWxlQ2hhbmdlTWFzaykgfCBjaGFuZ2VUeXBlOwpAQCAtMTk3NCw3ICsxOTY1
LDcgQEAgdm9pZCBOb2RlOjpzaG93Tm9kZVBhdGhGb3JUaGlzKCkgY29uc3QKICAgICAgICAgY29u
c3QgTm9kZSogbm9kZSA9IGNoYWluW2luZGV4IC0gMV07CiAgICAgICAgIGlmIChub2RlLT5pc1No
YWRvd1Jvb3QoKSkgewogICAgICAgICAgICAgaW50IGNvdW50ID0gMDsKLSAgICAgICAgICAgIGZv
ciAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IG9sZGVzdFNoYWRvd1Jvb3RGb3IodG9TaGFkb3dS
b290KG5vZGUpLT5ob3N0KCkpOyBzaGFkb3dSb290ICYmIHNoYWRvd1Jvb3QgIT0gbm9kZTsgc2hh
ZG93Um9vdCA9IHNoYWRvd1Jvb3QtPnlvdW5nZXJTaGFkb3dSb290KCkpCisgICAgICAgICAgICBm
b3IgKGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSB0b1NoYWRvd1Jvb3Qobm9kZSk7IHNo
YWRvd1Jvb3QgJiYgc2hhZG93Um9vdCAhPSBub2RlOyBzaGFkb3dSb290ID0gc2hhZG93Um9vdC0+
c2hhZG93Um9vdCgpKQogICAgICAgICAgICAgICAgICsrY291bnQ7CiAgICAgICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIi8jc2hhZG93LXJvb3RbJWRdIiwgY291bnQpOwogICAgICAgICAgICAgY29u
dGludWU7CkBAIC0yMDI4LDExICsyMDE5LDEwIEBAIHN0YXRpYyB2b2lkIHRyYXZlcnNlVHJlZUFu
ZE1hcmsoY29uc3QgU3QKICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyIsIGluZGVudC50b1N0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBub2RlLT5zaG93Tm9kZSgpOwogICAgICAg
ICBpbmRlbnQuYXBwZW5kKCdcdCcpOwotICAgICAgICBpZiAobm9kZS0+aXNTaGFkb3dSb290KCkp
IHsKLSAgICAgICAgICAgIGlmIChTaGFkb3dSb290KiB5b3VuZ2VyU2hhZG93Um9vdCA9IHRvU2hh
ZG93Um9vdChub2RlKS0+eW91bmdlclNoYWRvd1Jvb3QoKSkKLSAgICAgICAgICAgICAgICB0cmF2
ZXJzZVRyZWVBbmRNYXJrKGluZGVudC50b1N0cmluZygpLCB5b3VuZ2VyU2hhZG93Um9vdCwgbWFy
a2VkTm9kZTEsIG1hcmtlZExhYmVsMSwgbWFya2VkTm9kZTIsIG1hcmtlZExhYmVsMik7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoU2hhZG93Um9vdCogb2xkZXN0U2hhZG93Um9vdCA9IG9sZGVzdFNoYWRv
d1Jvb3RGb3Iobm9kZSkpCi0gICAgICAgICAgICB0cmF2ZXJzZVRyZWVBbmRNYXJrKGluZGVudC50
b1N0cmluZygpLCBvbGRlc3RTaGFkb3dSb290LCBtYXJrZWROb2RlMSwgbWFya2VkTGFiZWwxLCBt
YXJrZWROb2RlMiwgbWFya2VkTGFiZWwyKTsKKyAgICAgICAgaWYgKCFub2RlLT5pc1NoYWRvd1Jv
b3QoKSkgeworICAgICAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBub2RlLT5z
aGFkb3dSb290KCkpCisgICAgICAgICAgICAgICAgdHJhdmVyc2VUcmVlQW5kTWFyayhpbmRlbnQu
dG9TdHJpbmcoKSwgc2hhZG93Um9vdCwgbWFya2VkTm9kZTEsIG1hcmtlZExhYmVsMSwgbWFya2Vk
Tm9kZTIsIG1hcmtlZExhYmVsMik7CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTIwNzYsMTUg
KzIwNjYsMTIgQEAgc3RhdGljIHZvaWQgc2hvd1N1YlRyZWVBY3Jvc3NGcmFtZShjb25zdAogICAg
ICAgICBmcHV0cygiKiIsIHN0ZGVycik7CiAgICAgZnB1dHMoaW5kZW50LnV0ZjgoKS5kYXRhKCks
IHN0ZGVycik7CiAgICAgbm9kZS0+c2hvd05vZGUoKTsKLSAgICAgaWYgKG5vZGUtPmlzU2hhZG93
Um9vdCgpKSB7Ci0gICAgICAgICBpZiAoU2hhZG93Um9vdCogeW91bmdlclNoYWRvd1Jvb3QgPSB0
b1NoYWRvd1Jvb3Qobm9kZSktPnlvdW5nZXJTaGFkb3dSb290KCkpCi0gICAgICAgICAgICAgc2hv
d1N1YlRyZWVBY3Jvc3NGcmFtZSh5b3VuZ2VyU2hhZG93Um9vdCwgbWFya2VkTm9kZSwgaW5kZW50
ICsgIlx0Iik7Ci0gICAgIH0gZWxzZSB7Ci0gICAgICAgICBpZiAobm9kZS0+aXNGcmFtZU93bmVy
RWxlbWVudCgpKQotICAgICAgICAgICAgIHNob3dTdWJUcmVlQWNyb3NzRnJhbWUoc3RhdGljX2Nh
c3Q8Y29uc3QgSFRNTEZyYW1lT3duZXJFbGVtZW50Kj4obm9kZSktPmNvbnRlbnREb2N1bWVudCgp
LCBtYXJrZWROb2RlLCBpbmRlbnQgKyAiXHQiKTsKLSAgICAgICAgIGlmIChTaGFkb3dSb290KiBv
bGRlc3RTaGFkb3dSb290ID0gb2xkZXN0U2hhZG93Um9vdEZvcihub2RlKSkKLSAgICAgICAgICAg
ICBzaG93U3ViVHJlZUFjcm9zc0ZyYW1lKG9sZGVzdFNoYWRvd1Jvb3QsIG1hcmtlZE5vZGUsIGlu
ZGVudCArICJcdCIpOwotICAgICB9CisgICAgaWYgKCFub2RlLT5pc1NoYWRvd1Jvb3QoKSkgewor
ICAgICAgICBpZiAobm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpKQorICAgICAgICAgICAgc2hv
d1N1YlRyZWVBY3Jvc3NGcmFtZShzdGF0aWNfY2FzdDxjb25zdCBIVE1MRnJhbWVPd25lckVsZW1l
bnQqPihub2RlKS0+Y29udGVudERvY3VtZW50KCksIG1hcmtlZE5vZGUsIGluZGVudCArICJcdCIp
OworICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IG5vZGUtPnNoYWRvd1Jvb3Qo
KSkKKyAgICAgICAgICAgIHNob3dTdWJUcmVlQWNyb3NzRnJhbWUoc2hhZG93Um9vdCwgbWFya2Vk
Tm9kZSwgaW5kZW50ICsgIlx0Iik7CisgICAgfQogICAgIGZvciAoTm9kZSogY2hpbGQgPSBub2Rl
LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAg
ICAgICBzaG93U3ViVHJlZUFjcm9zc0ZyYW1lKGNoaWxkLCBtYXJrZWROb2RlLCBpbmRlbnQgKyAi
XHQiKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMTQ5NTA2KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgyLDcgKzI4Miw3IEBAIHB1Ymxp
YzoKICAgICAvLyBEZXByZWNhdGVkLiBTaG91bGQgdXNlIHNoYWRvd0hvc3QoKSBhbmQgY2hlY2sg
dGhlIHJldHVybiB2YWx1ZS4KICAgICBOb2RlKiBkZXByZWNhdGVkU2hhZG93QW5jZXN0b3JOb2Rl
KCkgY29uc3Q7CiAgICAgU2hhZG93Um9vdCogY29udGFpbmluZ1NoYWRvd1Jvb3QoKSBjb25zdDsK
LSAgICBTaGFkb3dSb290KiB5b3VuZ2VzdFNoYWRvd1Jvb3QoKSBjb25zdDsKKyAgICBTaGFkb3dS
b290KiBzaGFkb3dSb290KCkgY29uc3Q7CiAKICAgICAvLyBSZXR1cm5zIDAsIGEgY2hpbGQgb2Yg
U2hhZG93Um9vdCwgb3IgYSBsZWdhY3kgc2hhZG93IHJvb3QuCiAgICAgTm9kZSogbm9uQm91bmRh
cnlTaGFkb3dUcmVlUm9vdE5vZGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dS
b290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAJ
KHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTg0LDcgKzE4NCw3IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNh
dGlvblJlcXVlc3QgU2hhZG8KIHsKICAgICBEb2N1bWVudEZyYWdtZW50OjppbnNlcnRlZEludG8o
aW5zZXJ0aW9uUG9pbnQpOwogCi0gICAgaWYgKCFpbnNlcnRpb25Qb2ludC0+aW5Eb2N1bWVudCgp
IHx8ICFpc09sZGVzdCgpKQorICAgIGlmICghaW5zZXJ0aW9uUG9pbnQtPmluRG9jdW1lbnQoKSkK
ICAgICAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CiAKICAgICAvLyBGSVhNRTogV2hlbiBwYXJz
aW5nIDx2aWRlbyBjb250cm9scz4sIGluc2VydGVkSW50bygpIGlzIGNhbGxlZCBtYW55IHRpbWVz
IHdpdGhvdXQgaW52b2tpbmcgcmVtb3ZlZEZyb20uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
U2hhZG93Um9vdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290
LmgJKHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgRWxlbWVudFNoYWRvdzsKIGNsYXNzIFNjb3BlQ29udGVudERpc3RyaWJ1dGlvbjsKIAotY2xh
c3MgU2hhZG93Um9vdCA6IHB1YmxpYyBEb2N1bWVudEZyYWdtZW50LCBwdWJsaWMgVHJlZVNjb3Bl
LCBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8U2hhZG93Um9vdD4gewotICAgIGZyaWVuZCBj
bGFzcyBXVEY6OkRvdWJseUxpbmtlZExpc3ROb2RlPFNoYWRvd1Jvb3Q+OworY2xhc3MgU2hhZG93
Um9vdCA6IHB1YmxpYyBEb2N1bWVudEZyYWdtZW50LCBwdWJsaWMgVHJlZVNjb3BlIHsKIHB1Ymxp
YzoKICAgICAvLyBGSVhNRTogV2Ugd2lsbCBzdXBwb3J0IG11bHRpcGxlIHNoYWRvdyBzdWJ0cmVl
cywgaG93ZXZlciBjdXJyZW50IGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHdvcmsgd2VsbAogICAg
IC8vIGlmIGEgc2hhZG93IHJvb3QgaXMgZHluYW1pY2FsbHkgY3JlYXRlZC4gU28gd2UgcHJvaGli
aXQgbXVsdGlwbGUgc2hhZG93IHN1YnRyZWVzCkBAIC03NCwxMiArNzMsNiBAQCBwdWJsaWM6CiAK
ICAgICBFbGVtZW50KiBhY3RpdmVFbGVtZW50KCkgY29uc3Q7CiAKLSAgICBTaGFkb3dSb290KiB5
b3VuZ2VyU2hhZG93Um9vdCgpIGNvbnN0IHsgcmV0dXJuIHByZXYoKTsgfQotICAgIFNoYWRvd1Jv
b3QqIG9sZGVyU2hhZG93Um9vdCgpIGNvbnN0IHsgcmV0dXJuIG5leHQoKTsgfQotCi0gICAgYm9v
bCBpc1lvdW5nZXN0KCkgY29uc3QgeyByZXR1cm4gIXlvdW5nZXJTaGFkb3dSb290KCk7IH0KLSAg
ICBib29sIGlzT2xkZXN0KCkgY29uc3QgeyByZXR1cm4gIW9sZGVyU2hhZG93Um9vdCgpOyB9Ci0K
ICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CiAKICAgICB2aXJ0dWFsIEluc2VydGlvbk5vdGlm
aWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUqKSBPVkVSUklERTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5jcHAJKHJldmlzaW9uIDE0OTUw
NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIFRyZWVTY29wZUFkb3B0ZXI6Om1vdmVUcmVlVG9O
ZXdTY29wCiAgICAgICAgICAgICAgICAgbW92ZVRyZWVUb05ld1Njb3BlKGF0dHJzW2ldLmdldCgp
KTsKICAgICAgICAgfQogCi0gICAgICAgIGZvciAoU2hhZG93Um9vdCogc2hhZG93ID0gbm9kZS0+
eW91bmdlc3RTaGFkb3dSb290KCk7IHNoYWRvdzsgc2hhZG93ID0gc2hhZG93LT5vbGRlclNoYWRv
d1Jvb3QoKSkgeworICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93ID0gbm9kZS0+c2hhZG93
Um9vdCgpKSB7CiAgICAgICAgICAgICBzaGFkb3ctPnNldFBhcmVudFRyZWVTY29wZShtX25ld1Nj
b3BlKTsKICAgICAgICAgICAgIGlmICh3aWxsTW92ZVRvTmV3RG9jdW1lbnQpCiAgICAgICAgICAg
ICAgICAgbW92ZVRyZWVUb05ld0RvY3VtZW50KHNoYWRvdywgb2xkRG9jdW1lbnQsIG5ld0RvY3Vt
ZW50KTsKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBUcmVlU2NvcGVBZG9wdGVyOjptb3ZlVHJlZVRv
TmV3RG9jdQogewogICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0KG5vZGUsIHJvb3QpKSB7CiAgICAgICAgIG1vdmVOb2RlVG9OZXdEb2N1
bWVudChub2RlLCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOwotICAgICAgICBmb3IgKFNoYWRv
d1Jvb3QqIHNoYWRvdyA9IG5vZGUtPnlvdW5nZXN0U2hhZG93Um9vdCgpOyBzaGFkb3c7IHNoYWRv
dyA9IHNoYWRvdy0+b2xkZXJTaGFkb3dSb290KCkpCisgICAgICAgIGlmIChTaGFkb3dSb290KiBz
aGFkb3cgPSBub2RlLT5zaGFkb3dSb290KCkpCiAgICAgICAgICAgICBtb3ZlVHJlZVRvTmV3RG9j
dW1lbnQoc2hhZG93LCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOwogICAgIH0KIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNw
cAkocmV2aXNpb24gMTQ5NTI1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVu
dERpc3RyaWJ1dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDggKzIyMiw3IEBAIHZvaWQg
Q29udGVudERpc3RyaWJ1dG9yOjpkaXN0cmlidXRlKEVsZW0KICAgICBWZWN0b3I8Ym9vbD4gZGlz
dHJpYnV0ZWQocG9vbC5zaXplKCkpOwogICAgIGRpc3RyaWJ1dGVkLmZpbGwoZmFsc2UpOwogCi0g
ICAgZm9yIChTaGFkb3dSb290KiByb290ID0gaG9zdC0+eW91bmdlc3RTaGFkb3dSb290KCk7IHJv
b3Q7IHJvb3QgPSByb290LT5vbGRlclNoYWRvd1Jvb3QoKSkgewotCisgICAgaWYgKFNoYWRvd1Jv
b3QqIHJvb3QgPSBob3N0LT5zaGFkb3dSb290KCkpIHsKICAgICAgICAgaWYgKFNjb3BlQ29udGVu
dERpc3RyaWJ1dGlvbiogc2NvcGUgPSByb290LT5zY29wZURpc3RyaWJ1dGlvbigpKSB7CiAgICAg
ICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEluc2VydGlvblBvaW50PiA+JiBpbnNlcnRpb25Q
b2ludHMgPSBzY29wZS0+ZW5zdXJlSW5zZXJ0aW9uUG9pbnRMaXN0KHJvb3QpOwogICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnNlcnRpb25Qb2ludHMuc2l6ZSgpOyArK2kpIHsK
QEAgLTI0NCw3ICsyNDMsNyBAQCBib29sIENvbnRlbnREaXN0cmlidXRvcjo6aW52YWxpZGF0ZShF
bGVtCiAgICAgQVNTRVJUKG5lZWRzSW52YWxpZGF0aW9uKCkpOwogICAgIGJvb2wgbmVlZHNSZWF0
dGFjaCA9IChtX3ZhbGlkaXR5ID09IFVuZGV0ZXJtaW5lZCkgfHwgIW1fbm9kZVRvSW5zZXJ0aW9u
UG9pbnQuaXNFbXB0eSgpOwogCi0gICAgZm9yIChTaGFkb3dSb290KiByb290ID0gaG9zdC0+eW91
bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290LT5vbGRlclNoYWRvd1Jvb3QoKSkg
eworICAgIGlmIChTaGFkb3dSb290KiByb290ID0gaG9zdC0+c2hhZG93Um9vdCgpKSB7CiAgICAg
ICAgIGlmIChTY29wZUNvbnRlbnREaXN0cmlidXRpb24qIHNjb3BlID0gcm9vdC0+c2NvcGVEaXN0
cmlidXRpb24oKSkgewogICAgICAgICAgICAgc2NvcGUtPnNldEluc2VydGlvblBvaW50QXNzaWdu
ZWRUbygwKTsKICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8SW5zZXJ0aW9uUG9pbnQ+
ID4mIGluc2VydGlvblBvaW50cyA9IHNjb3BlLT5lbnN1cmVJbnNlcnRpb25Qb2ludExpc3Qocm9v
dCk7CkBAIC0zNTgsNyArMzU3LDcgQEAgY29uc3QgU2VsZWN0UnVsZUZlYXR1cmVTZXQmIENvbnRl
bnREaXN0cgogICAgICAgICByZXR1cm4gbV9zZWxlY3RGZWF0dXJlczsKIAogICAgIG1fc2VsZWN0
RmVhdHVyZXMuY2xlYXIoKTsKLSAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3ctPm9s
ZGVzdFNoYWRvd1Jvb3QoKTsgcm9vdDsgcm9vdCA9IHJvb3QtPnlvdW5nZXJTaGFkb3dSb290KCkp
CisgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3ctPnNoYWRvd1Jvb3QoKSkKICAgICAg
ICAgY29sbGVjdFNlbGVjdEZlYXR1cmVTZXRGcm9tKHJvb3QpOwogICAgIG1fbmVlZHNTZWxlY3RG
ZWF0dXJlU2V0ID0gZmFsc2U7CiAgICAgcmV0dXJuIG1fc2VsZWN0RmVhdHVyZXM7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHJldmlz
aW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw3ICszNTgsNyBAQCB2b2lkIEluc3BlY3RvckRP
TUFnZW50Ojp1bmJpbmQoTm9kZSogbm9kCiAKICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgp
KSB7CiAgICAgICAgIGlmIChFbGVtZW50U2hhZG93KiBzaGFkb3cgPSB0b0VsZW1lbnQobm9kZSkt
PnNoYWRvdygpKSB7Ci0gICAgICAgICAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3ct
PnlvdW5nZXN0U2hhZG93Um9vdCgpOyByb290OyByb290ID0gcm9vdC0+b2xkZXJTaGFkb3dSb290
KCkpCisgICAgICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvdy0+c2hhZG93Um9v
dCgpKQogICAgICAgICAgICAgICAgIHVuYmluZChyb290LCBub2Rlc01hcCk7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0xNDE4LDcgKzE0MTgsNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006
Ok5vZGU+IEluc3BlCiAgICAgICAgIEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IGVsZW1lbnQtPnNo
YWRvdygpOwogICAgICAgICBpZiAoc2hhZG93KSB7CiAgICAgICAgICAgICBSZWZQdHI8VHlwZUJ1
aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpET006Ok5vZGU+ID4gc2hhZG93Um9vdHMgPSBUeXBl
QnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOwotICAgICAg
ICAgICAgZm9yIChTaGFkb3dSb290KiByb290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3Qo
KTsgcm9vdDsgcm9vdCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKQorICAgICAgICAgICAgaWYg
KFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3ctPnNoYWRvd1Jvb3QoKSkKICAgICAgICAgICAgICAg
ICBzaGFkb3dSb290cy0+YWRkSXRlbShidWlsZE9iamVjdEZvck5vZGUocm9vdCwgMCwgbm9kZXNN
YXApKTsKICAgICAgICAgICAgIHZhbHVlLT5zZXRTaGFkb3dSb290cyhzaGFkb3dSb290cyk7CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNiBAQCBGb2N1c05hdmlnYXRpb25TY29wZTo6
Rm9jdXNOYXZpZ2F0aW9uU2NvCiAgICAgOiBtX3Jvb3RUcmVlU2NvcGUodHJlZVNjb3BlKQogewog
ICAgIEFTU0VSVCh0cmVlU2NvcGUpOwotICAgIEFTU0VSVCghdHJlZVNjb3BlLT5yb290Tm9kZSgp
LT5pc1NoYWRvd1Jvb3QoKSB8fCB0b1NoYWRvd1Jvb3QodHJlZVNjb3BlLT5yb290Tm9kZSgpKS0+
aXNZb3VuZ2VzdCgpKTsKIH0KIAogTm9kZSogRm9jdXNOYXZpZ2F0aW9uU2NvcGU6OnJvb3ROb2Rl
KCkgY29uc3QKQEAgLTEwMiw3ICsxMDEsNyBAQCBGb2N1c05hdmlnYXRpb25TY29wZSBGb2N1c05h
dmlnYXRpb25TY29wCiBGb2N1c05hdmlnYXRpb25TY29wZSBGb2N1c05hdmlnYXRpb25TY29wZTo6
Zm9jdXNOYXZpZ2F0aW9uU2NvcGVPd25lZEJ5U2hhZG93SG9zdChOb2RlKiBub2RlKQogewogICAg
IEFTU0VSVChpc1NoYWRvd0hvc3Qobm9kZSkpOwotICAgIHJldHVybiBGb2N1c05hdmlnYXRpb25T
Y29wZSh0b0VsZW1lbnQobm9kZSktPnNoYWRvdygpLT55b3VuZ2VzdFNoYWRvd1Jvb3QoKSk7Cisg
ICAgcmV0dXJuIEZvY3VzTmF2aWdhdGlvblNjb3BlKHRvRWxlbWVudChub2RlKS0+c2hhZG93KCkt
PnNoYWRvd1Jvb3QoKSk7CiB9CiAKIEZvY3VzTmF2aWdhdGlvblNjb3BlIEZvY3VzTmF2aWdhdGlv
blNjb3BlOjpmb2N1c05hdmlnYXRpb25TY29wZU93bmVkQnlJRnJhbWUoSFRNTEZyYW1lT3duZXJF
bGVtZW50KiBmcmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxl
VXBsb2FkQ29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkocmV2aXNpb24gMTQ5NTA2KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjMwLDcgKzIzMCw3IEBAIEhUTUxJbnB1dEVsZW1lbnQqIFJlbmRlckZpbGVVcGxv
YWRDb250cm8KIAogICAgIEFTU0VSVChpbnB1dC0+c2hhZG93KCkpOwogCi0gICAgTm9kZSogYnV0
dG9uTm9kZSA9IGlucHV0LT5zaGFkb3coKS0+b2xkZXN0U2hhZG93Um9vdCgpLT5maXJzdENoaWxk
KCk7CisgICAgTm9kZSogYnV0dG9uTm9kZSA9IGlucHV0LT5zaGFkb3coKS0+c2hhZG93Um9vdCgp
LT5maXJzdENoaWxkKCk7CiAgICAgcmV0dXJuIGJ1dHRvbk5vZGUgJiYgYnV0dG9uTm9kZS0+aXNI
VE1MRWxlbWVudCgpICYmIGJ1dHRvbk5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpID8gc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGJ1dHRvbk5vZGUpIDogMDsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNDk1MDYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEs
NyArMTUxLDcgQEAgdm9pZCBTVkdUUmVmRWxlbWVudDo6dXBkYXRlUmVmZXJlbmNlZFRleAogICAg
ICAgICB0ZXh0Q29udGVudCA9IHRhcmdldC0+dGV4dENvbnRlbnQoKTsKIAogICAgIEFTU0VSVChz
aGFkb3coKSk7Ci0gICAgU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvdygpLT5vbGRlc3RTaGFkb3dS
b290KCk7CisgICAgU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvdygpLT5zaGFkb3dSb290KCk7CiAg
ICAgaWYgKCFyb290LT5maXJzdENoaWxkKCkpCiAgICAgICAgIHJvb3QtPmFwcGVuZENoaWxkKFRl
eHQ6OmNyZWF0ZShkb2N1bWVudCgpLCB0ZXh0Q29udGVudCksIEFTU0VSVF9OT19FWENFUFRJT04p
OwogICAgIGVsc2UgewpAQCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6OmRl
dGFjaFRhcmdldCgpCiAgICAgU3RyaW5nIGVtcHR5Q29udGVudDsKIAogICAgIEFTU0VSVChzaGFk
b3coKSk7Ci0gICAgTm9kZSogY29udGFpbmVyID0gc2hhZG93KCktPm9sZGVzdFNoYWRvd1Jvb3Qo
KS0+Zmlyc3RDaGlsZCgpOworICAgIE5vZGUqIGNvbnRhaW5lciA9IHNoYWRvdygpLT5zaGFkb3dS
b290KCktPmZpcnN0Q2hpbGQoKTsKICAgICBpZiAoY29udGFpbmVyKQogICAgICAgICBjb250YWlu
ZXItPnNldFRleHRDb250ZW50KGVtcHR5Q29udGVudCwgSUdOT1JFX0VYQ0VQVElPTik7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE0OTUwNikKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzk0LDcgKzM5NCw3IEBAIHN0YXRpYyBib29sIHN1YnRyZWVDb250YWluc0Rpc2FsbG93ZWRFbGUK
IHZvaWQgU1ZHVXNlRWxlbWVudDo6Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKQogewogICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgdHJ5IHRvIG9wdGltaXplIHRoaXMsIHRvIGF0IGxlYXN0IGFsbG93
IHBhcnRpYWwgcmVjbG9uZXMuCi0gICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1RyZWVSb290RWxl
bWVudCA9ICBzaGFkb3coKS0+b2xkZXN0U2hhZG93Um9vdCgpKQorICAgIGlmIChTaGFkb3dSb290
KiBzaGFkb3dUcmVlUm9vdEVsZW1lbnQgPSAgc2hhZG93KCktPnNoYWRvd1Jvb3QoKSkKICAgICAg
ICAgc2hhZG93VHJlZVJvb3RFbGVtZW50LT5yZW1vdmVDaGlsZHJlbigpOwogCiAgICAgaWYgKG1f
dGFyZ2V0RWxlbWVudEluc3RhbmNlKSB7CkBAIC00ODYsNyArNDg2LDcgQEAgdm9pZCBTVkdVc2VF
bGVtZW50OjpidWlsZFNoYWRvd0FuZEluc3RhbgogICAgIEFTU0VSVChtX3RhcmdldEVsZW1lbnRJ
bnN0YW5jZS0+ZGlyZWN0VXNlRWxlbWVudCgpID09IHRoaXMpOwogICAgIEFTU0VSVChtX3Rhcmdl
dEVsZW1lbnRJbnN0YW5jZS0+Y29ycmVzcG9uZGluZ0VsZW1lbnQoKSA9PSB0YXJnZXQpOwogCi0g
ICAgU2hhZG93Um9vdCogc2hhZG93VHJlZVJvb3RFbGVtZW50ID0gc2hhZG93KCktPm9sZGVzdFNo
YWRvd1Jvb3QoKTsKKyAgICBTaGFkb3dSb290KiBzaGFkb3dUcmVlUm9vdEVsZW1lbnQgPSBzaGFk
b3coKS0+c2hhZG93Um9vdCgpOwogICAgIEFTU0VSVChzaGFkb3dUcmVlUm9vdEVsZW1lbnQpOwog
CiAgICAgLy8gQnVpbGQgc2hhZG93IHRyZWUgZnJvbSBpbnN0YW5jZSB0cmVlCkBAIC03MDgsNyAr
NzA4LDcgQEAgdm9pZCBTVkdVc2VFbGVtZW50OjpidWlsZFNoYWRvd1RyZWUoU1ZHRQogICAgIGlm
IChzdWJ0cmVlQ29udGFpbnNEaXNhbGxvd2VkRWxlbWVudChuZXdDaGlsZC5nZXQoKSkpCiAgICAg
ICAgIHJlbW92ZURpc2FsbG93ZWRFbGVtZW50c0Zyb21TdWJ0cmVlKG5ld0NoaWxkLmdldCgpKTsK
IAotICAgIHNoYWRvdygpLT5vbGRlc3RTaGFkb3dSb290KCktPmFwcGVuZENoaWxkKG5ld0NoaWxk
LnJlbGVhc2UoKSk7CisgICAgc2hhZG93KCktPnNoYWRvd1Jvb3QoKS0+YXBwZW5kQ2hpbGQobmV3
Q2hpbGQucmVsZWFzZSgpKTsKIH0KIAogdm9pZCBTVkdVc2VFbGVtZW50OjpleHBhbmRVc2VFbGVt
ZW50c0luU2hhZG93VHJlZShOb2RlKiBlbGVtZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcAkocmV2aXNpb24gMTQ5NTA2KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTgsNyArNjk4LDcgQEAgSW50ZXJu
YWxzOjpTaGFkb3dSb290SWZTaGFkb3dET01FbmFibGVkTwogICAgIH0KIAogICAgIGlmIChFbGVt
ZW50U2hhZG93KiBzaGFkb3cgPSBob3N0LT5zaGFkb3coKSkKLSAgICAgICAgcmV0dXJuIHNoYWRv
dy0+eW91bmdlc3RTaGFkb3dSb290KCk7CisgICAgICAgIHJldHVybiBzaGFkb3ctPnNoYWRvd1Jv
b3QoKTsKIAogICAgIHJldHVybiBob3N0LT5jcmVhdGVTaGFkb3dSb290KGVjKS5nZXQoKTsKIH0K
QEAgLTcxNCw1NSArNzE0LDE1IEBAIEludGVybmFsczo6U2hhZG93Um9vdElmU2hhZG93RE9NRW5h
YmxlZE8KIAogSW50ZXJuYWxzOjpTaGFkb3dSb290SWZTaGFkb3dET01FbmFibGVkT3JOb2RlKiBJ
bnRlcm5hbHM6OnNoYWRvd1Jvb3QoRWxlbWVudCogaG9zdCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
Ci0gICAgLy8gRklYTUU6IEludGVybmFsczo6c2hhZG93Um9vdCgpIGluIHRlc3RzIHNob3VsZCBi
ZSBjb252ZXJ0ZWQgdG8geW91bmdlc3RTaGFkb3dSb290KCkgb3Igb2xkZXN0U2hhZG93Um9vdCgp
LgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODQ2NQot
ICAgIHJldHVybiB5b3VuZ2VzdFNoYWRvd1Jvb3QoaG9zdCwgZWMpOwotfQotCi1JbnRlcm5hbHM6
OlNoYWRvd1Jvb3RJZlNoYWRvd0RPTUVuYWJsZWRPck5vZGUqIEludGVybmFsczo6eW91bmdlc3RT
aGFkb3dSb290KEVsZW1lbnQqIGhvc3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICgh
aG9zdCkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgaWYgKEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IGhvc3QtPnNoYWRv
dygpKQotICAgICAgICByZXR1cm4gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotSW50ZXJuYWxzOjpTaGFkb3dSb290SWZTaGFkb3dET01FbmFibGVkT3JO
b2RlKiBJbnRlcm5hbHM6Om9sZGVzdFNoYWRvd1Jvb3QoRWxlbWVudCogaG9zdCwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17CiAgICAgaWYgKCFob3N0KSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NF
U1NfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KICAgICBpZiAoRWxlbWVudFNoYWRv
dyogc2hhZG93ID0gaG9zdC0+c2hhZG93KCkpCi0gICAgICAgIHJldHVybiBzaGFkb3ctPm9sZGVz
dFNoYWRvd1Jvb3QoKTsKKyAgICAgICAgcmV0dXJuIHNoYWRvdy0+c2hhZG93Um9vdCgpOwogICAg
IHJldHVybiAwOwogfQogCi1JbnRlcm5hbHM6OlNoYWRvd1Jvb3RJZlNoYWRvd0RPTUVuYWJsZWRP
ck5vZGUqIEludGVybmFsczo6eW91bmdlclNoYWRvd1Jvb3QoTm9kZSogc2hhZG93LCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBpZiAoIXNoYWRvdyB8fCAhc2hhZG93LT5pc1NoYWRvd1Jvb3Qo
KSkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvU2hhZG93Um9vdChzaGFkb3cpLT55b3VuZ2VyU2hhZG93
Um9vdCgpOwotfQotCi1JbnRlcm5hbHM6OlNoYWRvd1Jvb3RJZlNoYWRvd0RPTUVuYWJsZWRPck5v
ZGUqIEludGVybmFsczo6b2xkZXJTaGFkb3dSb290KE5vZGUqIHNoYWRvdywgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgaWYgKCFzaGFkb3cgfHwgIXNoYWRvdy0+aXNTaGFkb3dSb290KCkpIHsK
LSAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLQotICAgIHJldHVybiB0b1NoYWRvd1Jvb3Qoc2hhZG93KS0+b2xkZXJTaGFkb3dSb290KCk7
Ci19Ci0KIFN0cmluZyBJbnRlcm5hbHM6OnNoYWRvd1Jvb3RUeXBlKGNvbnN0IE5vZGUqIHJvb3Qs
IEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewogICAgIGlmICghcm9vdCB8fCAhcm9vdC0+aXNT
aGFkb3dSb290KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkocmV2aXNp
b24gMTQ5NTA2KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODksMTAgKzg5LDYgQEAgcHVibGljOgogICAgIFNoYWRvd1Jvb3RJZlNoYWRv
d0RPTUVuYWJsZWRPck5vZGUqIGVuc3VyZVNoYWRvd1Jvb3QoRWxlbWVudCogaG9zdCwgRXhjZXB0
aW9uQ29kZSYpOwogICAgIFNoYWRvd1Jvb3RJZlNoYWRvd0RPTUVuYWJsZWRPck5vZGUqIGNyZWF0
ZVNoYWRvd1Jvb3QoRWxlbWVudCogaG9zdCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFNoYWRvd1Jv
b3RJZlNoYWRvd0RPTUVuYWJsZWRPck5vZGUqIHNoYWRvd1Jvb3QoRWxlbWVudCogaG9zdCwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIFNoYWRvd1Jvb3RJZlNoYWRvd0RPTUVuYWJsZWRPck5vZGUqIHlv
dW5nZXN0U2hhZG93Um9vdChFbGVtZW50KiBob3N0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU2hh
ZG93Um9vdElmU2hhZG93RE9NRW5hYmxlZE9yTm9kZSogb2xkZXN0U2hhZG93Um9vdChFbGVtZW50
KiBob3N0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU2hhZG93Um9vdElmU2hhZG93RE9NRW5hYmxl
ZE9yTm9kZSogeW91bmdlclNoYWRvd1Jvb3QoTm9kZSogc2hhZG93LCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgU2hhZG93Um9vdElmU2hhZG93RE9NRW5hYmxlZE9yTm9kZSogb2xkZXJTaGFkb3dSb290
KE5vZGUqIHNoYWRvdywgRXhjZXB0aW9uQ29kZSYpOwogICAgIFN0cmluZyBzaGFkb3dSb290VHlw
ZShjb25zdCBOb2RlKiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIGJvb2wgaGFzU2hhZG93
SW5zZXJ0aW9uUG9pbnQoY29uc3QgTm9kZSosIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICBi
b29sIGhhc0NvbnRlbnRFbGVtZW50KGNvbnN0IE5vZGUqLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCShyZXZpc2lvbiAxNDk1MDYp
CisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDE3ICs0MCwxMCBAQAogICAgIFNoYWRvd1Jvb3QgZW5zdXJlU2hhZG93Um9vdChFbGVt
ZW50IGhvc3QpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICAgICBTaGFkb3dSb290IGNyZWF0ZVNo
YWRvd1Jvb3QoRWxlbWVudCBob3N0KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAgICAgU2hhZG93
Um9vdCBzaGFkb3dSb290KEVsZW1lbnQgaG9zdCkgcmFpc2VzIChET01FeGNlcHRpb24pOwotICAg
IFNoYWRvd1Jvb3QgeW91bmdlc3RTaGFkb3dSb290KEVsZW1lbnQgaG9zdCkgcmFpc2VzIChET01F
eGNlcHRpb24pOwotICAgIFNoYWRvd1Jvb3Qgb2xkZXN0U2hhZG93Um9vdChFbGVtZW50IGhvc3Qp
IHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKLSAgICBTaGFkb3dSb290IHlvdW5nZXJTaGFkb3dSb290
KE5vZGUgcm9vdCkgcmFpc2VzIChET01FeGNlcHRpb24pOwotICAgIFNoYWRvd1Jvb3Qgb2xkZXJT
aGFkb3dSb290KE5vZGUgcm9vdCkgcmFpc2VzIChET01FeGNlcHRpb24pOwogI2Vsc2UKICAgICBO
b2RlIGVuc3VyZVNoYWRvd1Jvb3QoRWxlbWVudCBob3N0KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7
CiAgICAgTm9kZSBjcmVhdGVTaGFkb3dSb290KEVsZW1lbnQgaG9zdCkgcmFpc2VzIChET01FeGNl
cHRpb24pOwogICAgIE5vZGUgc2hhZG93Um9vdChFbGVtZW50IGhvc3QpIHJhaXNlcyAoRE9NRXhj
ZXB0aW9uKTsKLSAgICBOb2RlIHlvdW5nZXN0U2hhZG93Um9vdChFbGVtZW50IGhvc3QpIHJhaXNl
cyAoRE9NRXhjZXB0aW9uKTsKLSAgICBOb2RlIG9sZGVzdFNoYWRvd1Jvb3QoRWxlbWVudCBob3N0
KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7Ci0gICAgTm9kZSB5b3VuZ2VyU2hhZG93Um9vdChOb2Rl
IHJvb3QpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICNlbmRpZgogICAgIERPTVN0cmluZyBzaGFk
b3dSb290VHlwZShOb2RlIHJvb3QpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICAgICBib29sZWFu
IGhhc1NoYWRvd0luc2VydGlvblBvaW50KE5vZGUgcm9vdCkgcmFpc2VzIChET01FeGNlcHRpb24p
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200513</attachid>
            <date>2013-05-03 20:03:56 -0700</date>
            <delta_ts>2013-05-03 20:20:53 -0700</delta_ts>
            <desc>with test updates</desc>
            <filename>remove-older-young-5.patch</filename>
            <type>text/plain</type>
            <size>47705</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0OTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMyBAQAorMjAxMy0wNS0wMyAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGNvbmNlcHQgb2Yg
eW91bmdlciBhbmQgb2xkZXIgc2hhZG93IHRyZWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTU1NzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBZb3VuZ2VyIGFuZCBvbGRlciBzaGFkb3cgdHJlZXMgYXJl
IGFuIG9ic2N1cmUgY29ybmVyIG9mIHRoZSBTaGFkb3cgRE9NIHNwZWMuCisgICAgICAgIAorICAg
ICAgICBTdXBwb3J0IG9ubHkgb25lIHNoYWRvdyB0cmVlIHBlciBlbGVtZW50LiBUaGlzIHNpbXBs
aWZpZXMgbWFueSB0aGluZ3MuIAorCisgICAgICAgICogZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdh
bGtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRy
YXZlcnNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2Vy
Ojp0cmF2ZXJzZVNpYmxpbmdJbkN1cnJlbnRUcmVlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZVBhcmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlUGFy
ZW50SW5DdXJyZW50VHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NlZFNoYWRvd1RyZWVX
YWxrZXI6OnRyYXZlcnNlUGFyZW50QmFja1RvU2hhZG93Um9vdE9ySG9zdCk6CisgICAgICAgICog
ZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
ZWRTaGFkb3dUcmVlV2Fsa2VyOjphc3NlcnRQcmVjb25kaXRpb24pOgorICAgICAgICAoQ29tcG9z
ZWRTaGFkb3dUcmVlV2Fsa2VyKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZUFsZ29yaXRo
bXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlSW5zZXJ0aW9uTm90aWZpZXI6Om5v
dGlmeURlc2NlbmRhbnRJbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
aGlsZE5vZGVJbnNlcnRpb25Ob3RpZmllcjo6bm90aWZ5RGVzY2VuZGFudEluc2VydGVkSW50b1Ry
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlUmVtb3ZhbE5vdGlmaWVyOjpub3RpZnlE
ZXNjZW5kYW50UmVtb3ZlZEZyb21Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5v
ZGVSZW1vdmFsTm90aWZpZXI6Om5vdGlmeURlc2NlbmRhbnRSZW1vdmVkRnJvbVRyZWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6Y29sbGVjdEZyYW1lT3duZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OmFzc2VydENvbm5lY3RlZFN1YnJhbWVDb3VudElzQ29uc2lz
dGVudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpidWlsZEFjY2Vzc0tleU1hcCk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YXV0aG9yU2hhZG93Um9vdCk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50Ojp1c2VyQWdlbnRTaGFkb3dSb290KToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OmVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QpOgorICAgICAgICAqIGRvbS9FbGVt
ZW50Lmg6CisgICAgICAgIChFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omhh
c0F1dGhvclNoYWRvd1Jvb3QpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmlkbDoKKyAgICAgICAg
KiBkb20vRWxlbWVudFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93
OjphZGRTaGFkb3dSb290KToKKyAgICAgICAgCisgICAgICAgIEFsbG93IG9ubHkgb25lIFNoYWRv
d1Jvb3QgcGVyIEVsZW1lbnRTaGFkb3cuIFJlbW92ZSBsaW5rZWQgbGlzdCBoYW5kbGluZy4KKyAg
ICAgICAgCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjpyZW1vdmVBbGxTaGFkb3dS
b290cyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjphdHRhY2gpOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnRTaGFkb3c6OmNoaWxkTmVlZHNTdHlsZVJlY2FsYyk6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50U2hhZG93OjpuZWVkc1N0eWxlUmVjYWxjKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnRTaGFkb3c6OnJlY2FsY1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6
OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKToKKyAgICAgICAgKiBkb20vRWxlbWVudFNoYWRvdy5o
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6c2hhZG93Um9vdCk6CisgICAgICAg
IChFbGVtZW50U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6Omhvc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6OnNob3dOb2RlUGF0aEZvclRoaXMpOgorICAgICAgICAoV2ViQ29yZTo6
dHJhdmVyc2VUcmVlQW5kTWFyayk6CisgICAgICAgIChXZWJDb3JlOjpzaG93U3ViVHJlZUFjcm9z
c0ZyYW1lKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoTm9kZSk6CisgICAgICAg
ICogZG9tL1NoYWRvd1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6aW5z
ZXJ0ZWRJbnRvKToKKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5oOgorICAgICAgICAoU2hhZG93
Um9vdCk6CisgICAgICAgIAorICAgICAgICAgICAgUmVtb3ZlIExpbmtlZExpc3QgYmFzZS4KKyAg
ICAgICAgCisgICAgICAgICogZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVUb05ld1Njb3BlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRyZWVTY29wZUFkb3B0ZXI6Om1vdmVUcmVlVG9OZXdEb2N1bWVudCk6CisgICAgICAg
ICogaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnREaXN0cmlidXRvcjo6ZGlzdHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RGlzdHJpYnV0b3I6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudERp
c3RyaWJ1dG9yOjplbnN1cmVTZWxlY3RGZWF0dXJlU2V0KToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdl
bnQ6OnVuYmluZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRP
YmplY3RGb3JOb2RlKToKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGb2N1c05hdmlnYXRpb25TY29wZTo6Rm9jdXNOYXZpZ2F0aW9uU2NvcGUp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNOYXZpZ2F0aW9uU2NvcGU6OmZvY3VzTmF2aWdhdGlv
blNjb3BlT3duZWRCeVNoYWRvd0hvc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxl
VXBsb2FkQ29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbDo6dXBsb2FkQnV0dG9uKToKKyAgICAgICAgKiBzdmcvU1ZHVFJlZkVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHVFJlZkVsZW1lbnQ6OnVwZGF0ZVJlZmVyZW5jZWRUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RSZWZFbGVtZW50OjpkZXRhY2hUYXJnZXQpOgorICAgICAg
ICAqIHN2Zy9TVkdVc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1l
bnQ6OmNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVs
ZW1lbnQ6OmJ1aWxkU2hhZG93QW5kSW5zdGFuY2VUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1VzZUVsZW1lbnQ6OmJ1aWxkU2hhZG93VHJlZSk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5h
bHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjplbnN1cmVTaGFkb3dSb290KToK
KyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2hhZG93Um9vdCk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAoSW50ZXJuYWxz
KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisKIDIwMTMtMDUtMDMgIE1hcnRp
biBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFNpbXBsaWZ5IHRo
ZSAjaWZkZWZzIGluIEdyYXBoaWNzQ29udGV4dDNELmgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAxNDk1MDYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDEy
ICsyMDcsOSBAQCBib29sIFN0eWxlU2NvcGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuCiAgICAg
Ly8gYWRkIGEgbmV3IGZsYWcgdG8gRWxlbWVudFNoYWRvdyBhbmQgY2FjaGUgd2hldGhlciBhbnlA
aG9zdCBALXJ1bGVzIGFyZQogICAgIC8vIGFwcGxpZWQgdG8gdGhlIGVsZW1lbnQgb3Igbm90LiBT
byB3ZSBjYW4gYXZvaWQgYWx3YXlzIHRyYXZlcnNpbmcKICAgICAvLyBzaGFkb3cgcm9vdHMuCi0g
ICAgZm9yIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jv
b3QoKTsgc2hhZG93Um9vdDsgc2hhZG93Um9vdCA9IHNoYWRvd1Jvb3QtPm9sZGVyU2hhZG93Um9v
dCgpKSB7CisgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBzaGFkb3ctPnNoYWRvd1Jv
b3QoKSkgewogICAgICAgICBpZiAoYXRIb3N0UnVsZVNldEZvcihzaGFkb3dSb290KSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlmICghU2NvcGVDb250ZW50RGlzdHJpYnV0
aW9uOjpoYXNTaGFkb3dFbGVtZW50KHNoYWRvd1Jvb3QpKQotICAgICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTIzMCwxMSArMjI3LDkgQEAgdm9pZCBTdHls
ZVNjb3BlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKAogICAgIC8vIGFkZCBhIG5ldyBmbGFnIHRv
IEVsZW1lbnRTaGFkb3cgYW5kIGNhY2hlIHdoZXRoZXIgYW55IEBob3N0IEAtcnVsZXMgYXJlCiAg
ICAgLy8gYXBwbGllZCB0byB0aGUgZWxlbWVudCBvciBub3QuIFNvIHdlIGNhbiBxdWlja2x5IGV4
aXQgdGhpcyBtZXRob2QKICAgICAvLyBieSB1c2luZyB0aGUgZmxhZy4KLSAgICBmb3IgKFNoYWRv
d1Jvb3QqIHNoYWRvd1Jvb3QgPSBzaGFkb3ctPnlvdW5nZXN0U2hhZG93Um9vdCgpOyBzaGFkb3dS
b290OyBzaGFkb3dSb290ID0gc2hhZG93Um9vdC0+b2xkZXJTaGFkb3dSb290KCkpIHsgCisgICAg
aWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBzaGFkb3ctPnNoYWRvd1Jvb3QoKSkgewogICAg
ICAgICBpZiAoUnVsZVNldCogcnVsZVNldCA9IGF0SG9zdFJ1bGVTZXRGb3Ioc2hhZG93Um9vdCkp
CiAgICAgICAgICAgICBtYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGVTZXQpOwotICAgICAgICBpZiAo
IVNjb3BlQ29udGVudERpc3RyaWJ1dGlvbjo6aGFzU2hhZG93RWxlbWVudChzaGFkb3dSb290KSkK
LSAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5jcHAJKHJldmlzaW9uIDE0OTUyNSkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIE5vZGUqIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6
dHJhdmVyc2UKICAgICBBU1NFUlQobm9kZSk7CiAgICAgaWYgKGNhbkNyb3NzVXBwZXJCb3VuZGFy
eSgpKSB7CiAgICAgICAgIEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IHNoYWRvd0Zvcihub2RlKTsK
LSAgICAgICAgcmV0dXJuIHNoYWRvdyA/IHRyYXZlcnNlTGlnaHRDaGlsZHJlbihzaGFkb3ctPnlv
dW5nZXN0U2hhZG93Um9vdCgpLCBkaXJlY3Rpb24pCisgICAgICAgIHJldHVybiBzaGFkb3cgPyB0
cmF2ZXJzZUxpZ2h0Q2hpbGRyZW4oc2hhZG93LT5zaGFkb3dSb290KCksIGRpcmVjdGlvbikKICAg
ICAgICAgICAgIDogdHJhdmVyc2VMaWdodENoaWxkcmVuKG5vZGUsIGRpcmVjdGlvbik7CiAgICAg
fQogICAgIGlmIChpc1NoYWRvd0hvc3Qobm9kZSkpCkBAIC0xNzYsMjUgKzE3Niw5IEBAIE5vZGUq
IENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6dHJhdmVyc2UKICAgICBBU1NFUlQobm9kZSk7CiAg
ICAgaWYgKE5vZGUqIGZvdW5kID0gdHJhdmVyc2VTaWJsaW5ncyhkaXJlY3Rpb24gPT0gVHJhdmVy
c2FsRGlyZWN0aW9uRm9yd2FyZCA/IG5vZGUtPm5leHRTaWJsaW5nKCkgOiBub2RlLT5wcmV2aW91
c1NpYmxpbmcoKSwgZGlyZWN0aW9uKSkKICAgICAgICAgcmV0dXJuIGZvdW5kOwotICAgIGlmIChO
b2RlKiBuZXh0ID0gdHJhdmVyc2VCYWNrVG9Zb3VuZ2VyU2hhZG93Um9vdChub2RlLCBkaXJlY3Rp
b24pKQotICAgICAgICByZXR1cm4gbmV4dDsKICAgICByZXR1cm4gZXNjYXBlRmFsbGJhY2tDb250
ZW50RWxlbWVudChub2RlLCBkaXJlY3Rpb24pOwogfQogCi1Ob2RlKiBDb21wb3NlZFNoYWRvd1Ry
ZWVXYWxrZXI6OnRyYXZlcnNlQmFja1RvWW91bmdlclNoYWRvd1Jvb3QoY29uc3QgTm9kZSogbm9k
ZSwgVHJhdmVyc2FsRGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBBU1NFUlQobm9kZSk7Ci0g
ICAgaWYgKG5vZGUtPnBhcmVudE5vZGUoKSAmJiBub2RlLT5wYXJlbnROb2RlKCktPmlzU2hhZG93
Um9vdCgpKSB7Ci0gICAgICAgIFNoYWRvd1Jvb3QqIHBhcmVudFNoYWRvd1Jvb3QgPSB0b1NoYWRv
d1Jvb3Qobm9kZS0+cGFyZW50Tm9kZSgpKTsKLSAgICAgICAgaWYgKCFwYXJlbnRTaGFkb3dSb290
LT5pc1lvdW5nZXN0KCkpIHsKLSAgICAgICAgICAgIEluc2VydGlvblBvaW50KiBhc3NpZ25lZElu
c2VydGlvblBvaW50ID0gU2NvcGVDb250ZW50RGlzdHJpYnV0aW9uOjphc3NpZ25lZFRvKHBhcmVu
dFNoYWRvd1Jvb3QpOwotICAgICAgICAgICAgQVNTRVJUKGFzc2lnbmVkSW5zZXJ0aW9uUG9pbnQp
OwotICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlU2libGluZ0luQ3VycmVudFRyZWUoYXNzaWdu
ZWRJbnNlcnRpb25Qb2ludCwgZGlyZWN0aW9uKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4gMDsKLX0KLQogaW5saW5lIE5vZGUqIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6ZXNjYXBl
RmFsbGJhY2tDb250ZW50RWxlbWVudChjb25zdCBOb2RlKiBub2RlLCBUcmF2ZXJzYWxEaXJlY3Rp
b24gZGlyZWN0aW9uKQogewogICAgIEFTU0VSVChub2RlKTsKQEAgLTIyNywxMCArMjExLDggQEAg
Tm9kZSogQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZQogICAgIGlmIChub2RlLT5p
c1BzZXVkb0VsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIG5vZGUtPnBhcmVudE9yU2hhZG93SG9z
dE5vZGUoKTsKIAotICAgIGlmICghY2FuQ3Jvc3NVcHBlckJvdW5kYXJ5KCkgJiYgbm9kZS0+aXNT
aGFkb3dSb290KCkpIHsKLSAgICAgICAgQVNTRVJUKHRvU2hhZG93Um9vdChub2RlKS0+aXNZb3Vu
Z2VzdCgpKTsKKyAgICBpZiAoIWNhbkNyb3NzVXBwZXJCb3VuZGFyeSgpICYmIG5vZGUtPmlzU2hh
ZG93Um9vdCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAKICAgICBpZiAobm9kZUNhbkJl
RGlzdHJpYnV0ZWQobm9kZSkpIHsKICAgICAgICAgaWYgKEluc2VydGlvblBvaW50KiBpbnNlcnRp
b25Qb2ludCA9IHJlc29sdmVSZXByb2plY3Rpb24obm9kZSkpIHsKQEAgLTI0OSwyNiArMjMxLDIy
IEBAIE5vZGUqIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6dHJhdmVyc2UKIGlubGluZSBOb2Rl
KiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlUGFyZW50SW5DdXJyZW50VHJlZShj
b25zdCBOb2RlKiBub2RlLCBQYXJlbnRUcmF2ZXJzYWxEZXRhaWxzKiBkZXRhaWxzKSBjb25zdAog
ewogICAgIGlmIChOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCkpCi0gICAgICAgIHJl
dHVybiBwYXJlbnQtPmlzU2hhZG93Um9vdCgpID8gdHJhdmVyc2VQYXJlbnRCYWNrVG9Zb3VuZ2Vy
U2hhZG93Um9vdE9ySG9zdCh0b1NoYWRvd1Jvb3QocGFyZW50KSwgZGV0YWlscykgOiB0cmF2ZXJz
ZU5vZGVFc2NhcGluZ0ZhbGxiYWNrQ29udGVudHMocGFyZW50LCBkZXRhaWxzKTsKKyAgICAgICAg
cmV0dXJuIHBhcmVudC0+aXNTaGFkb3dSb290KCkgPyB0cmF2ZXJzZVBhcmVudEJhY2tUb1NoYWRv
d1Jvb3RPckhvc3QodG9TaGFkb3dSb290KHBhcmVudCksIGRldGFpbHMpIDogdHJhdmVyc2VOb2Rl
RXNjYXBpbmdGYWxsYmFja0NvbnRlbnRzKHBhcmVudCwgZGV0YWlscyk7CiAgICAgcmV0dXJuIDA7
CiB9CiAKLU5vZGUqIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjo6dHJhdmVyc2VQYXJlbnRCYWNr
VG9Zb3VuZ2VyU2hhZG93Um9vdE9ySG9zdChjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290LCBQ
YXJlbnRUcmF2ZXJzYWxEZXRhaWxzKiBkZXRhaWxzKSBjb25zdAorTm9kZSogQ29tcG9zZWRTaGFk
b3dUcmVlV2Fsa2VyOjp0cmF2ZXJzZVBhcmVudEJhY2tUb1NoYWRvd1Jvb3RPckhvc3QoY29uc3Qg
U2hhZG93Um9vdCogc2hhZG93Um9vdCwgUGFyZW50VHJhdmVyc2FsRGV0YWlscyogZGV0YWlscykg
Y29uc3QKIHsKICAgICBBU1NFUlQoc2hhZG93Um9vdCk7CiAgICAgQVNTRVJUKCFTY29wZUNvbnRl
bnREaXN0cmlidXRpb246OmFzc2lnbmVkVG8oc2hhZG93Um9vdCkpOwogCi0gICAgaWYgKHNoYWRv
d1Jvb3QtPmlzWW91bmdlc3QoKSkgewotICAgICAgICBpZiAoY2FuQ3Jvc3NVcHBlckJvdW5kYXJ5
KCkpIHsKLSAgICAgICAgICAgIGlmIChkZXRhaWxzKQotICAgICAgICAgICAgICAgIGRldGFpbHMt
PmRpZFRyYXZlcnNlU2hhZG93Um9vdChzaGFkb3dSb290KTsKLSAgICAgICAgICAgIHJldHVybiBz
aGFkb3dSb290LT5ob3N0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY29uc3RfY2Fz
dDxTaGFkb3dSb290Kj4oc2hhZG93Um9vdCk7CisgICAgaWYgKGNhbkNyb3NzVXBwZXJCb3VuZGFy
eSgpKSB7CisgICAgICAgIGlmIChkZXRhaWxzKQorICAgICAgICAgICAgZGV0YWlscy0+ZGlkVHJh
dmVyc2VTaGFkb3dSb290KHNoYWRvd1Jvb3QpOworICAgICAgICByZXR1cm4gc2hhZG93Um9vdC0+
aG9zdCgpOwogICAgIH0KIAotICAgIHJldHVybiAwOworICAgIHJldHVybiBjb25zdF9jYXN0PFNo
YWRvd1Jvb3QqPihzaGFkb3dSb290KTsKIH0KIAogTm9kZSogQ29tcG9zZWRTaGFkb3dUcmVlV2Fs
a2VyOjp0cmF2ZXJzZU5leHRTaWJsaW5nKGNvbnN0IE5vZGUqIG5vZGUpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5oCShyZXZpc2lvbiAxNDk1
MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTg5LDggKzg5LDYgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKG1f
bm9kZSk7CiAgICAgICAgIGlmIChjYW5Dcm9zc1VwcGVyQm91bmRhcnkoKSkKICAgICAgICAgICAg
IEFTU0VSVCghbV9ub2RlLT5pc1NoYWRvd1Jvb3QoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIEFTU0VSVCghbV9ub2RlLT5pc1NoYWRvd1Jvb3QoKSB8fCB0b1NoYWRvd1Jvb3QobV9ub2Rl
KS0+aXNZb3VuZ2VzdCgpKTsKICAgICAgICAgQVNTRVJUKCFpc0FjdGl2ZUluc2VydGlvblBvaW50
KG1fbm9kZSkpOwogI2VuZGlmCiAgICAgfQpAQCAtMTE5LDEyICsxMTcsMTEgQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgTm9kZSogdHJhdmVyc2VTaWJsaW5ncyhjb25zdCBOb2RlKiwgVHJhdmVyc2Fs
RGlyZWN0aW9uKTsKICAgICBzdGF0aWMgTm9kZSogdHJhdmVyc2VEaXN0cmlidXRlZE5vZGVzKGNv
bnN0IE5vZGUqLCBjb25zdCBJbnNlcnRpb25Qb2ludCosIFRyYXZlcnNhbERpcmVjdGlvbik7CiAK
LSAgICBzdGF0aWMgTm9kZSogdHJhdmVyc2VCYWNrVG9Zb3VuZ2VyU2hhZG93Um9vdChjb25zdCBO
b2RlKiwgVHJhdmVyc2FsRGlyZWN0aW9uKTsKICAgICBzdGF0aWMgTm9kZSogZXNjYXBlRmFsbGJh
Y2tDb250ZW50RWxlbWVudChjb25zdCBOb2RlKiwgVHJhdmVyc2FsRGlyZWN0aW9uKTsKIAogICAg
IE5vZGUqIHRyYXZlcnNlTm9kZUVzY2FwaW5nRmFsbGJhY2tDb250ZW50cyhjb25zdCBOb2RlKiwg
UGFyZW50VHJhdmVyc2FsRGV0YWlscyogPSAwKSBjb25zdDsKICAgICBOb2RlKiB0cmF2ZXJzZVBh
cmVudEluQ3VycmVudFRyZWUoY29uc3QgTm9kZSosIFBhcmVudFRyYXZlcnNhbERldGFpbHMqID0g
MCkgY29uc3Q7Ci0gICAgTm9kZSogdHJhdmVyc2VQYXJlbnRCYWNrVG9Zb3VuZ2VyU2hhZG93Um9v
dE9ySG9zdChjb25zdCBTaGFkb3dSb290KiwgUGFyZW50VHJhdmVyc2FsRGV0YWlscyogPSAwKSBj
b25zdDsKKyAgICBOb2RlKiB0cmF2ZXJzZVBhcmVudEJhY2tUb1NoYWRvd1Jvb3RPckhvc3QoY29u
c3QgU2hhZG93Um9vdCosIFBhcmVudFRyYXZlcnNhbERldGFpbHMqID0gMCkgY29uc3Q7CiAKICAg
ICBjb25zdCBOb2RlKiBtX25vZGU7CiAgICAgUG9saWN5IG1fcG9saWN5OwpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCShyZXZpc2lvbiAx
NDk1MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NywxMCArNDcsOSBAQCB2b2lkIENoaWxkTm9kZUluc2VydGlv
bk5vdGlmaWVyOjpub3RpZnlECiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChFbGVtZW50U2hh
ZG93KiBzaGFkb3cgPSB0b0VsZW1lbnQobm9kZSktPnNoYWRvdygpKSB7Ci0gICAgICAgIFNoYWRv
d1Jvb3RWZWN0b3Igcm9vdHMoc2hhZG93KTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCByb290cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKG5vZGUtPmluRG9jdW1lbnQo
KSAmJiByb290c1tpXS0+aG9zdCgpID09IG5vZGUpCi0gICAgICAgICAgICAgICAgbm90aWZ5Tm9k
ZUluc2VydGVkSW50b0RvY3VtZW50KHJvb3RzW2ldLmdldCgpKTsKKyAgICAgICAgaWYgKFNoYWRv
d1Jvb3QqIHJvb3QgPSBzaGFkb3ctPnNoYWRvd1Jvb3QoKSkgeworICAgICAgICAgICAgaWYgKG5v
ZGUtPmluRG9jdW1lbnQoKSAmJiByb290LT5ob3N0KCkgPT0gbm9kZSkKKyAgICAgICAgICAgICAg
ICBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQocm9vdCk7CiAgICAgICAgIH0KICAgICB9
CiB9CkBAIC02Miw3ICs2MSw3IEBAIHZvaWQgQ2hpbGROb2RlSW5zZXJ0aW9uTm90aWZpZXI6Om5v
dGlmeUQKICAgICAgICAgICAgIG5vdGlmeU5vZGVJbnNlcnRlZEludG9UcmVlKHRvQ29udGFpbmVy
Tm9kZShjaGlsZCkpOwogICAgIH0KIAotICAgIGZvciAoU2hhZG93Um9vdCogcm9vdCA9IG5vZGUt
PnlvdW5nZXN0U2hhZG93Um9vdCgpOyByb290OyByb290ID0gcm9vdC0+b2xkZXJTaGFkb3dSb290
KCkpCisgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBub2RlLT5zaGFkb3dSb290KCkpCiAgICAg
ICAgIG5vdGlmeU5vZGVJbnNlcnRlZEludG9UcmVlKHJvb3QpOwogfQogCkBAIC04NCwxMCArODMs
OSBAQCB2b2lkIENoaWxkTm9kZVJlbW92YWxOb3RpZmllcjo6bm90aWZ5RGVzCiAgICAgICAgIG5v
ZGUtPmRvY3VtZW50KCktPnNldENTU1RhcmdldCgwKTsKIAogICAgIGlmIChFbGVtZW50U2hhZG93
KiBzaGFkb3cgPSB0b0VsZW1lbnQobm9kZSktPnNoYWRvdygpKSB7Ci0gICAgICAgIFNoYWRvd1Jv
b3RWZWN0b3Igcm9vdHMoc2hhZG93KTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBy
b290cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKCFub2RlLT5pbkRvY3VtZW50KCkg
JiYgcm9vdHNbaV0tPmhvc3QoKSA9PSBub2RlKQotICAgICAgICAgICAgICAgIG5vdGlmeU5vZGVS
ZW1vdmVkRnJvbURvY3VtZW50KHJvb3RzW2ldLmdldCgpKTsKKyAgICAgICAgaWYgKFNoYWRvd1Jv
b3QqIHJvb3QgPSBzaGFkb3ctPnNoYWRvd1Jvb3QoKSkgeworICAgICAgICAgICAgaWYgKCFub2Rl
LT5pbkRvY3VtZW50KCkgJiYgcm9vdC0+aG9zdCgpID09IG5vZGUpCisgICAgICAgICAgICAgICAg
bm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQocm9vdCk7CiAgICAgICAgIH0KICAgICB9CiB9
CkBAIC0xMDMsMTUgKzEwMSwxNCBAQCB2b2lkIENoaWxkTm9kZVJlbW92YWxOb3RpZmllcjo6bm90
aWZ5RGVzCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChFbGVtZW50U2hhZG93KiBzaGFkb3cg
PSB0b0VsZW1lbnQobm9kZSktPnNoYWRvdygpKSB7Ci0gICAgICAgIFNoYWRvd1Jvb3RWZWN0b3Ig
cm9vdHMoc2hhZG93KTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290cy5zaXpl
KCk7ICsraSkKLSAgICAgICAgICAgIG5vdGlmeU5vZGVSZW1vdmVkRnJvbVRyZWUocm9vdHNbaV0u
Z2V0KCkpOworICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvdy0+c2hhZG93Um9v
dCgpKQorICAgICAgICAgICAgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tVHJlZShyb290KTsKICAgICB9
CiB9CiAKIHZvaWQgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6Y29sbGVjdEZyYW1lT3duZXJzKEVs
ZW1lbnRTaGFkb3cqIHNoYWRvdykKIHsKLSAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFk
b3ctPnlvdW5nZXN0U2hhZG93Um9vdCgpOyByb290OyByb290ID0gcm9vdC0+b2xkZXJTaGFkb3dS
b290KCkpCisgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3ctPnNoYWRvd1Jvb3QoKSkK
ICAgICAgICAgY29sbGVjdEZyYW1lT3duZXJzKHJvb3QpOwogfQogCkBAIC0xMjUsNyArMTIyLDcg
QEAgdW5zaWduZWQgYXNzZXJ0Q29ubmVjdGVkU3VicmFtZUNvdW50SXNDbwogICAgICAgICAgICAg
Y291bnQrKzsKIAogICAgICAgICBpZiAoRWxlbWVudFNoYWRvdyogc2hhZG93ID0gdG9FbGVtZW50
KG5vZGUpLT5zaGFkb3coKSkgewotICAgICAgICAgICAgZm9yIChTaGFkb3dSb290KiByb290ID0g
c2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgcm9vdDsgcm9vdCA9IHJvb3QtPm9sZGVyU2hh
ZG93Um9vdCgpKQorICAgICAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3ctPnNo
YWRvd1Jvb3QoKSkKICAgICAgICAgICAgICAgICBjb3VudCArPSBhc3NlcnRDb25uZWN0ZWRTdWJy
YW1lQ291bnRJc0NvbnNpc3RlbnQocm9vdCk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxOCw3ICs3MTgsNyBAQCB2b2lkIERv
Y3VtZW50OjpidWlsZEFjY2Vzc0tleU1hcChUcmVlU2NvCiAgICAgICAgIGlmICghYWNjZXNzS2V5
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fZWxlbWVudHNCeUFjY2Vzc0tleS5zZXQoYWNjZXNz
S2V5LmltcGwoKSwgZWxlbWVudCk7CiAKLSAgICAgICAgZm9yIChTaGFkb3dSb290KiByb290ID0g
ZWxlbWVudC0+eW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290LT5vbGRlclNo
YWRvd1Jvb3QoKSkKKyAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBlbGVtZW50LT5zaGFk
b3dSb290KCkpCiAgICAgICAgICAgICBidWlsZEFjY2Vzc0tleU1hcChyb290KTsKICAgICB9CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNDk1MDYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MzQsMTIgKzE1MzQs
MTIgQEAgUGFzc1JlZlB0cjxTaGFkb3dSb290PiBFbGVtZW50OjpjcmVhdGVTaAogICAgIHJldHVy
biBlbnN1cmVTaGFkb3coKS0+YWRkU2hhZG93Um9vdCh0aGlzLCBTaGFkb3dSb290OjpBdXRob3JT
aGFkb3dSb290KTsKIH0KIAotU2hhZG93Um9vdCogRWxlbWVudDo6c2hhZG93Um9vdCgpIGNvbnN0
CitTaGFkb3dSb290KiBFbGVtZW50OjphdXRob3JTaGFkb3dSb290KCkgY29uc3QKIHsKICAgICBF
bGVtZW50U2hhZG93KiBlbGVtZW50U2hhZG93ID0gc2hhZG93KCk7CiAgICAgaWYgKCFlbGVtZW50
U2hhZG93KQogICAgICAgICByZXR1cm4gMDsKLSAgICBTaGFkb3dSb290KiBzaGFkb3dSb290ID0g
ZWxlbWVudFNoYWRvdy0+eW91bmdlc3RTaGFkb3dSb290KCk7CisgICAgU2hhZG93Um9vdCogc2hh
ZG93Um9vdCA9IGVsZW1lbnRTaGFkb3ctPnNoYWRvd1Jvb3QoKTsKICAgICBpZiAoc2hhZG93Um9v
dC0+dHlwZSgpID09IFNoYWRvd1Jvb3Q6OkF1dGhvclNoYWRvd1Jvb3QpCiAgICAgICAgIHJldHVy
biBzaGFkb3dSb290OwogICAgIHJldHVybiAwOwpAQCAtMTU0OCw3ICsxNTQ4LDcgQEAgU2hhZG93
Um9vdCogRWxlbWVudDo6c2hhZG93Um9vdCgpIGNvbnN0CiBTaGFkb3dSb290KiBFbGVtZW50Ojp1
c2VyQWdlbnRTaGFkb3dSb290KCkgY29uc3QKIHsKICAgICBpZiAoRWxlbWVudFNoYWRvdyogZWxl
bWVudFNoYWRvdyA9IHNoYWRvdygpKSB7Ci0gICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dS
b290ID0gZWxlbWVudFNoYWRvdy0+b2xkZXN0U2hhZG93Um9vdCgpKSB7CisgICAgICAgIGlmIChT
aGFkb3dSb290KiBzaGFkb3dSb290ID0gZWxlbWVudFNoYWRvdy0+c2hhZG93Um9vdCgpKSB7CiAg
ICAgICAgICAgICBBU1NFUlQoc2hhZG93Um9vdC0+dHlwZSgpID09IFNoYWRvd1Jvb3Q6OlVzZXJB
Z2VudFNoYWRvd1Jvb3QpOwogICAgICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3Q7CiAgICAgICAg
IH0KQEAgLTE1NTksMTAgKzE1NTksMTEgQEAgU2hhZG93Um9vdCogRWxlbWVudDo6dXNlckFnZW50
U2hhZG93Um9vdAogCiBTaGFkb3dSb290KiBFbGVtZW50OjplbnN1cmVVc2VyQWdlbnRTaGFkb3dS
b290KCkKIHsKLSAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IHVzZXJBZ2VudFNoYWRv
d1Jvb3QoKSkKLSAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3Q7Ci0gICAgU2hhZG93Um9vdCogc2hh
ZG93Um9vdCA9IGVuc3VyZVNoYWRvdygpLT5hZGRTaGFkb3dSb290KHRoaXMsIFNoYWRvd1Jvb3Q6
OlVzZXJBZ2VudFNoYWRvd1Jvb3QpOwotICAgIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3Qoc2hh
ZG93Um9vdCk7CisgICAgU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IHVzZXJBZ2VudFNoYWRvd1Jv
b3QoKTsKKyAgICBpZiAoIXNoYWRvd1Jvb3QpIHsKKyAgICAgICAgc2hhZG93Um9vdCA9IGVuc3Vy
ZVNoYWRvdygpLT5hZGRTaGFkb3dSb290KHRoaXMsIFNoYWRvd1Jvb3Q6OlVzZXJBZ2VudFNoYWRv
d1Jvb3QpOworICAgICAgICBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KHNoYWRvd1Jvb3QpOwor
ICAgIH0KICAgICByZXR1cm4gc2hhZG93Um9vdDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5o
CShyZXZpc2lvbiAxNDk1MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MTUsOSArNDE1LDkgQEAgcHVibGljOgogICAgIEVsZW1lbnRTaGFkb3cq
IHNoYWRvdygpIGNvbnN0OwogICAgIEVsZW1lbnRTaGFkb3cqIGVuc3VyZVNoYWRvdygpOwogICAg
IFBhc3NSZWZQdHI8U2hhZG93Um9vdD4gY3JlYXRlU2hhZG93Um9vdChFeGNlcHRpb25Db2RlJik7
Ci0gICAgU2hhZG93Um9vdCogc2hhZG93Um9vdCgpIGNvbnN0OworICAgIFNoYWRvd1Jvb3QqIGF1
dGhvclNoYWRvd1Jvb3QoKSBjb25zdDsKIAotICAgIGJvb2wgaGFzQXV0aG9yU2hhZG93Um9vdCgp
IGNvbnN0IHsgcmV0dXJuIHNoYWRvd1Jvb3QoKTsgfQorICAgIGJvb2wgaGFzQXV0aG9yU2hhZG93
Um9vdCgpIGNvbnN0IHsgcmV0dXJuIGF1dGhvclNoYWRvd1Jvb3QoKTsgfQogICAgIHZpcnR1YWwg
dm9pZCB3aWxsQWRkQXV0aG9yU2hhZG93Um9vdCgpIHsgfQogCiAgICAgU2hhZG93Um9vdCogdXNl
ckFnZW50U2hhZG93Um9vdCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmlkbAkocmV2
aXNpb24gMTQ5NTA2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjQsNyArMTI0LDcgQEAKICNpZiBkZWZpbmVkKEVOQUJMRV9TSEFET1dfRE9N
KSAmJiBFTkFCTEVfU0hBRE9XX0RPTSAmJiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpICYm
IExBTkdVQUdFX0pBVkFTQ1JJUFQKICAgICBbUmVmbGVjdD1wc2V1ZG8sIEltcGxlbWVudGVkQXM9
cHNldWRvXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHdlYmtpdFBzZXVkbzsKICAgICBbSW1wbGVtZW50
ZWRBcz1jcmVhdGVTaGFkb3dSb290XSBTaGFkb3dSb290IHdlYmtpdENyZWF0ZVNoYWRvd1Jvb3Qo
KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICBbSW1wbGVtZW50ZWRBcz1zaGFkb3dSb290XSBy
ZWFkb25seSBhdHRyaWJ1dGUgU2hhZG93Um9vdCB3ZWJraXRTaGFkb3dSb290OworICAgIFtJbXBs
ZW1lbnRlZEFzPWF1dGhvclNoYWRvd1Jvb3RdIHJlYWRvbmx5IGF0dHJpYnV0ZSBTaGFkb3dSb290
IHdlYmtpdFNoYWRvd1Jvb3Q7CiAgICAgW0ltcGxlbWVudGVkQXM9aW5zZXJ0aW9uUGFyZW50Rm9y
QmluZGluZ10gcmVhZG9ubHkgYXR0cmlidXRlIE5vZGUgd2Via2l0SW5zZXJ0aW9uUGFyZW50Owog
I2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5jcHAJKHJldmlzaW9u
IDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsMTMgKzM0LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2hhZG93
Um9vdCogRWxlbWVudFNoYWRvdzo6YWRkU2hhZG93Um9vdChFbGVtZW50KiBzaGFkb3dIb3N0LCBT
aGFkb3dSb290OjpTaGFkb3dSb290VHlwZSB0eXBlKQogewotICAgIFJlZlB0cjxTaGFkb3dSb290
PiBzaGFkb3dSb290ID0gU2hhZG93Um9vdDo6Y3JlYXRlKHNoYWRvd0hvc3QtPmRvY3VtZW50KCks
IHR5cGUpOworICAgIEFTU0VSVCghbV9zaGFkb3dSb290KTsKKyAgICBtX3NoYWRvd1Jvb3QgPSBT
aGFkb3dSb290OjpjcmVhdGUoc2hhZG93SG9zdC0+ZG9jdW1lbnQoKSwgdHlwZSk7CiAKLSAgICBz
aGFkb3dSb290LT5zZXRQYXJlbnRPclNoYWRvd0hvc3ROb2RlKHNoYWRvd0hvc3QpOwotICAgIHNo
YWRvd1Jvb3QtPnNldFBhcmVudFRyZWVTY29wZShzaGFkb3dIb3N0LT50cmVlU2NvcGUoKSk7Ci0g
ICAgbV9zaGFkb3dSb290cy5wdXNoKHNoYWRvd1Jvb3QuZ2V0KCkpOworICAgIG1fc2hhZG93Um9v
dC0+c2V0UGFyZW50T3JTaGFkb3dIb3N0Tm9kZShzaGFkb3dIb3N0KTsKKyAgICBtX3NoYWRvd1Jv
b3QtPnNldFBhcmVudFRyZWVTY29wZShzaGFkb3dIb3N0LT50cmVlU2NvcGUoKSk7CiAgICAgbV9k
aXN0cmlidXRvci5kaWRTaGFkb3dCb3VuZGFyeUNoYW5nZShzaGFkb3dIb3N0KTsKLSAgICBDaGls
ZE5vZGVJbnNlcnRpb25Ob3RpZmllcihzaGFkb3dIb3N0KS5ub3RpZnkoc2hhZG93Um9vdC5nZXQo
KSk7CisgICAgQ2hpbGROb2RlSW5zZXJ0aW9uTm90aWZpZXIoc2hhZG93SG9zdCkubm90aWZ5KG1f
c2hhZG93Um9vdC5nZXQoKSk7CiAKICAgICAvLyBFeGlzdGVuY2Ugb2Ygc2hhZG93IHJvb3RzIHJl
cXVpcmVzIHRoZSBob3N0IGFuZCBpdHMgY2hpbGRyZW4gdG8gZG8gdHJhdmVyc2FsIHVzaW5nIENv
bXBvc2VkU2hhZG93VHJlZVdhbGtlci4KICAgICBzaGFkb3dIb3N0LT5zZXROZWVkc1NoYWRvd1Ry
ZWVXYWxrZXIoKTsKQEAgLTUxLDI4ICs1MSwyNiBAQCBTaGFkb3dSb290KiBFbGVtZW50U2hhZG93
OjphZGRTaGFkb3dSb290CiAgICAgaWYgKHNoYWRvd0hvc3QtPmF0dGFjaGVkKCkpCiAgICAgICAg
IHNoYWRvd0hvc3QtPmxhenlSZWF0dGFjaCgpOwogCi0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRQdXNoU2hhZG93Um9vdChzaGFkb3dIb3N0LCBzaGFkb3dSb290LmdldCgpKTsKKyAg
ICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFB1c2hTaGFkb3dSb290KHNoYWRvd0hvc3Qs
IG1fc2hhZG93Um9vdC5nZXQoKSk7CiAKLSAgICByZXR1cm4gc2hhZG93Um9vdC5nZXQoKTsKKyAg
ICByZXR1cm4gbV9zaGFkb3dSb290LmdldCgpOwogfQogCi12b2lkIEVsZW1lbnRTaGFkb3c6OnJl
bW92ZUFsbFNoYWRvd1Jvb3RzKCkKK3ZvaWQgRWxlbWVudFNoYWRvdzo6cmVtb3ZlU2hhZG93Um9v
dCgpCiB7CiAgICAgLy8gRG9udCBwcm90ZWN0IHRoaXMgcmVmIGNvdW50LgogICAgIEVsZW1lbnQq
IHNoYWRvd0hvc3QgPSBob3N0KCk7CiAKLSAgICB3aGlsZSAoUmVmUHRyPFNoYWRvd1Jvb3Q+IG9s
ZFJvb3QgPSBtX3NoYWRvd1Jvb3RzLmhlYWQoKSkgeworICAgIGlmIChSZWZQdHI8U2hhZG93Um9v
dD4gb2xkUm9vdCA9IG1fc2hhZG93Um9vdCkgewogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxQb3BTaGFkb3dSb290KHNoYWRvd0hvc3QsIG9sZFJvb3QuZ2V0KCkpOwogICAg
ICAgICBzaGFkb3dIb3N0LT5kb2N1bWVudCgpLT5yZW1vdmVGb2N1c2VkTm9kZU9mU3VidHJlZShv
bGRSb290LmdldCgpKTsKIAogICAgICAgICBpZiAob2xkUm9vdC0+YXR0YWNoZWQoKSkKICAgICAg
ICAgICAgIG9sZFJvb3QtPmRldGFjaCgpOwogCi0gICAgICAgIG1fc2hhZG93Um9vdHMucmVtb3Zl
SGVhZCgpOworICAgICAgICBtX3NoYWRvd1Jvb3QgPSAwOwogICAgICAgICBvbGRSb290LT5zZXRQ
YXJlbnRPclNoYWRvd0hvc3ROb2RlKDApOwogICAgICAgICBvbGRSb290LT5zZXRQYXJlbnRUcmVl
U2NvcGUoc2hhZG93SG9zdC0+ZG9jdW1lbnQoKSk7Ci0gICAgICAgIG9sZFJvb3QtPnNldFByZXYo
MCk7Ci0gICAgICAgIG9sZFJvb3QtPnNldE5leHQoMCk7CiAgICAgICAgIENoaWxkTm9kZVJlbW92
YWxOb3RpZmllcihzaGFkb3dIb3N0KS5ub3RpZnkob2xkUm9vdC5nZXQoKSk7CiAgICAgfQogCkBA
IC04MSw5ICs3OSw5IEBAIHZvaWQgRWxlbWVudFNoYWRvdzo6cmVtb3ZlQWxsU2hhZG93Um9vdHMK
IAogdm9pZCBFbGVtZW50U2hhZG93OjphdHRhY2goKQogewotICAgIENvbnRlbnREaXN0cmlidXRv
cjo6ZW5zdXJlRGlzdHJpYnV0aW9uKHlvdW5nZXN0U2hhZG93Um9vdCgpKTsKKyAgICBDb250ZW50
RGlzdHJpYnV0b3I6OmVuc3VyZURpc3RyaWJ1dGlvbihzaGFkb3dSb290KCkpOwogCi0gICAgZm9y
IChTaGFkb3dSb290KiByb290ID0geW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSBy
b290LT5vbGRlclNoYWRvd1Jvb3QoKSkgeworICAgIGlmIChTaGFkb3dSb290KiByb290ID0gc2hh
ZG93Um9vdCgpKSB7CiAgICAgICAgIGlmICghcm9vdC0+YXR0YWNoZWQoKSkKICAgICAgICAgICAg
IHJvb3QtPmF0dGFjaCgpOwogICAgIH0KQEAgLTkxLDcgKzg5LDcgQEAgdm9pZCBFbGVtZW50U2hh
ZG93OjphdHRhY2goKQogCiB2b2lkIEVsZW1lbnRTaGFkb3c6OmRldGFjaCgpCiB7Ci0gICAgZm9y
IChTaGFkb3dSb290KiByb290ID0geW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSBy
b290LT5vbGRlclNoYWRvd1Jvb3QoKSkgeworICAgIGlmIChTaGFkb3dSb290KiByb290ID0gc2hh
ZG93Um9vdCgpKSB7CiAgICAgICAgIGlmIChyb290LT5hdHRhY2hlZCgpKQogICAgICAgICAgICAg
cm9vdC0+ZGV0YWNoKCk7CiAgICAgfQpAQCAtOTksMzMgKzk3LDMzIEBAIHZvaWQgRWxlbWVudFNo
YWRvdzo6ZGV0YWNoKCkKIAogYm9vbCBFbGVtZW50U2hhZG93OjpjaGlsZE5lZWRzU3R5bGVSZWNh
bGMoKSBjb25zdAogewotICAgIEFTU0VSVCh5b3VuZ2VzdFNoYWRvd1Jvb3QoKSk7Ci0gICAgZm9y
IChTaGFkb3dSb290KiByb290ID0geW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSBy
b290LT5vbGRlclNoYWRvd1Jvb3QoKSkKKyAgICBBU1NFUlQoc2hhZG93Um9vdCgpKTsKKyAgICBp
ZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvd1Jvb3QoKSkgewogICAgICAgICBpZiAocm9vdC0+
Y2hpbGROZWVkc1N0eWxlUmVjYWxjKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQorICAg
IH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgRWxlbWVudFNoYWRvdzo6bmVlZHNTdHls
ZVJlY2FsYygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHlvdW5nZXN0U2hhZG93Um9vdCgpKTsKLSAg
ICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSB5b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgcm9vdDsgcm9v
dCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKQorICAgIEFTU0VSVChzaGFkb3dSb290KCkpOwor
ICAgIGlmIChTaGFkb3dSb290KiByb290ID0gc2hhZG93Um9vdCgpKSB7CiAgICAgICAgIGlmIChy
b290LT5uZWVkc1N0eWxlUmVjYWxjKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQorICAg
IH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgRWxlbWVudFNoYWRvdzo6cmVjYWxjU3R5
bGUoTm9kZTo6U3R5bGVDaGFuZ2UgY2hhbmdlKQogewotICAgIGZvciAoU2hhZG93Um9vdCogcm9v
dCA9IHlvdW5nZXN0U2hhZG93Um9vdCgpOyByb290OyByb290ID0gcm9vdC0+b2xkZXJTaGFkb3dS
b290KCkpCisgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3dSb290KCkpCiAgICAgICAg
IHJvb3QtPnJlY2FsY1N0eWxlKGNoYW5nZSk7CiB9CiAKIHZvaWQgRWxlbWVudFNoYWRvdzo6cmVt
b3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKQogewotICAgIGZvciAoU2hhZG93Um9vdCogcm9vdCA9IHlv
dW5nZXN0U2hhZG93Um9vdCgpOyByb290OyByb290ID0gcm9vdC0+b2xkZXJTaGFkb3dSb290KCkp
IHsKKyAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvd1Jvb3QoKSkgewogICAgICAgICBm
b3IgKE5vZGUqIG5vZGUgPSByb290OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChu
b2RlKSkKICAgICAgICAgICAgIG5vZGUtPnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5oCShyZXZpc2lvbiAxNDk1MDYpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OCwxMiArNDgsMTEgQEAgcHVibGljOgogCiAgICAgfkVsZW1lbnRTaGFkb3coKQogICAgIHsKLSAg
ICAgICAgcmVtb3ZlQWxsU2hhZG93Um9vdHMoKTsKKyAgICAgICAgcmVtb3ZlU2hhZG93Um9vdCgp
OwogICAgIH0KIAogICAgIEVsZW1lbnQqIGhvc3QoKSBjb25zdDsKLSAgICBTaGFkb3dSb290KiB5
b3VuZ2VzdFNoYWRvd1Jvb3QoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd1Jvb3RzLmhlYWQoKTsg
fQotICAgIFNoYWRvd1Jvb3QqIG9sZGVzdFNoYWRvd1Jvb3QoKSBjb25zdCB7IHJldHVybiBtX3No
YWRvd1Jvb3RzLnRhaWwoKTsgfQorICAgIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QoKSBjb25zdCB7
IHJldHVybiBtX3NoYWRvd1Jvb3QuZ2V0KCk7IH0KICAgICBFbGVtZW50U2hhZG93KiBjb250YWlu
aW5nU2hhZG93KCkgY29uc3Q7CiAKICAgICBTaGFkb3dSb290KiBhZGRTaGFkb3dSb290KEVsZW1l
bnQqIHNoYWRvd0hvc3QsIFNoYWRvd1Jvb3Q6OlNoYWRvd1Jvb3RUeXBlKTsKQEAgLTc2LDI0ICs3
NSwyNCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEVsZW1lbnRTaGFkb3coKSB7IH0KIAotICAg
IHZvaWQgcmVtb3ZlQWxsU2hhZG93Um9vdHMoKTsKKyAgICB2b2lkIHJlbW92ZVNoYWRvd1Jvb3Qo
KTsKIAotICAgIERvdWJseUxpbmtlZExpc3Q8U2hhZG93Um9vdD4gbV9zaGFkb3dSb290czsKKyAg
ICBSZWZQdHI8U2hhZG93Um9vdD4gbV9zaGFkb3dSb290OwogICAgIENvbnRlbnREaXN0cmlidXRv
ciBtX2Rpc3RyaWJ1dG9yOwogfTsKIAogaW5saW5lIEVsZW1lbnQqIEVsZW1lbnRTaGFkb3c6Omhv
c3QoKSBjb25zdAogewotICAgIEFTU0VSVCghbV9zaGFkb3dSb290cy5pc0VtcHR5KCkpOwotICAg
IHJldHVybiB5b3VuZ2VzdFNoYWRvd1Jvb3QoKS0+aG9zdCgpOworICAgIEFTU0VSVChtX3NoYWRv
d1Jvb3QpOworICAgIHJldHVybiBtX3NoYWRvd1Jvb3QtPmhvc3QoKTsKIH0KIAotaW5saW5lIFNo
YWRvd1Jvb3QqIE5vZGU6OnlvdW5nZXN0U2hhZG93Um9vdCgpIGNvbnN0CitpbmxpbmUgU2hhZG93
Um9vdCogTm9kZTo6c2hhZG93Um9vdCgpIGNvbnN0CiB7CiAgICAgaWYgKCF0aGlzLT5pc0VsZW1l
bnROb2RlKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChFbGVtZW50U2hhZG93KiBzaGFk
b3cgPSB0b0VsZW1lbnQodGhpcyktPnNoYWRvdygpKQotICAgICAgICByZXR1cm4gc2hhZG93LT55
b3VuZ2VzdFNoYWRvd1Jvb3QoKTsKKyAgICAgICAgcmV0dXJuIHNoYWRvdy0+c2hhZG93Um9vdCgp
OwogICAgIHJldHVybiAwOwogfQogCkBAIC0xMDQsMTUgKzEwMyw2IEBAIGlubGluZSBFbGVtZW50
U2hhZG93KiBFbGVtZW50U2hhZG93Ojpjb24KICAgICByZXR1cm4gMDsKIH0KIAotY2xhc3MgU2hh
ZG93Um9vdFZlY3RvciA6IHB1YmxpYyBWZWN0b3I8UmVmUHRyPFNoYWRvd1Jvb3Q+ID4gewotcHVi
bGljOgotICAgIGV4cGxpY2l0IFNoYWRvd1Jvb3RWZWN0b3IoRWxlbWVudFNoYWRvdyogdHJlZSkK
LSAgICB7Ci0gICAgICAgIGZvciAoU2hhZG93Um9vdCogcm9vdCA9IHRyZWUtPnlvdW5nZXN0U2hh
ZG93Um9vdCgpOyByb290OyByb290ID0gcm9vdC0+b2xkZXJTaGFkb3dSb290KCkpCi0gICAgICAg
ICAgICBhcHBlbmQocm9vdCk7Ci0gICAgfQotfTsKLQogaW5saW5lIEVsZW1lbnRTaGFkb3cqIHNo
YWRvd09mUGFyZW50KGNvbnN0IE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTQ5NTA2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDEsMTUgKzgwMSw2IEBAIGJvb2wgTm9kZTo6aGFz
Tm9uRW1wdHlCb3VuZGluZ0JveCgpIGNvbnMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWlubGlu
ZSBzdGF0aWMgU2hhZG93Um9vdCogb2xkZXN0U2hhZG93Um9vdEZvcihjb25zdCBOb2RlKiBub2Rl
KQotewotICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICByZXR1cm4gMDsK
LSAgICBpZiAoRWxlbWVudFNoYWRvdyogc2hhZG93ID0gdG9FbGVtZW50KG5vZGUpLT5zaGFkb3co
KSkKLSAgICAgICAgcmV0dXJuIHNoYWRvdy0+b2xkZXN0U2hhZG93Um9vdCgpOwotICAgIHJldHVy
biAwOwotfQotCiBpbmxpbmUgdm9pZCBOb2RlOjpzZXRTdHlsZUNoYW5nZShTdHlsZUNoYW5nZVR5
cGUgY2hhbmdlVHlwZSkKIHsKICAgICBtX25vZGVGbGFncyA9IChtX25vZGVGbGFncyAmIH5TdHls
ZUNoYW5nZU1hc2spIHwgY2hhbmdlVHlwZTsKQEAgLTE5NzQsNyArMTk2NSw3IEBAIHZvaWQgTm9k
ZTo6c2hvd05vZGVQYXRoRm9yVGhpcygpIGNvbnN0CiAgICAgICAgIGNvbnN0IE5vZGUqIG5vZGUg
PSBjaGFpbltpbmRleCAtIDFdOwogICAgICAgICBpZiAobm9kZS0+aXNTaGFkb3dSb290KCkpIHsK
ICAgICAgICAgICAgIGludCBjb3VudCA9IDA7Ci0gICAgICAgICAgICBmb3IgKFNoYWRvd1Jvb3Qq
IHNoYWRvd1Jvb3QgPSBvbGRlc3RTaGFkb3dSb290Rm9yKHRvU2hhZG93Um9vdChub2RlKS0+aG9z
dCgpKTsgc2hhZG93Um9vdCAmJiBzaGFkb3dSb290ICE9IG5vZGU7IHNoYWRvd1Jvb3QgPSBzaGFk
b3dSb290LT55b3VuZ2VyU2hhZG93Um9vdCgpKQorICAgICAgICAgICAgZm9yIChjb25zdCBTaGFk
b3dSb290KiBzaGFkb3dSb290ID0gdG9TaGFkb3dSb290KG5vZGUpOyBzaGFkb3dSb290ICYmIHNo
YWRvd1Jvb3QgIT0gbm9kZTsgc2hhZG93Um9vdCA9IHNoYWRvd1Jvb3QtPnNoYWRvd1Jvb3QoKSkK
ICAgICAgICAgICAgICAgICArK2NvdW50OwogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIv
I3NoYWRvdy1yb290WyVkXSIsIGNvdW50KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjAy
OCwxMSArMjAxOSwxMCBAQCBzdGF0aWMgdm9pZCB0cmF2ZXJzZVRyZWVBbmRNYXJrKGNvbnN0IFN0
CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCBpbmRlbnQudG9TdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKICAgICAgICAgbm9kZS0+c2hvd05vZGUoKTsKICAgICAgICAgaW5kZW50LmFwcGVu
ZCgnXHQnKTsKLSAgICAgICAgaWYgKG5vZGUtPmlzU2hhZG93Um9vdCgpKSB7Ci0gICAgICAgICAg
ICBpZiAoU2hhZG93Um9vdCogeW91bmdlclNoYWRvd1Jvb3QgPSB0b1NoYWRvd1Jvb3Qobm9kZSkt
PnlvdW5nZXJTaGFkb3dSb290KCkpCi0gICAgICAgICAgICAgICAgdHJhdmVyc2VUcmVlQW5kTWFy
ayhpbmRlbnQudG9TdHJpbmcoKSwgeW91bmdlclNoYWRvd1Jvb3QsIG1hcmtlZE5vZGUxLCBtYXJr
ZWRMYWJlbDEsIG1hcmtlZE5vZGUyLCBtYXJrZWRMYWJlbDIpOwotICAgICAgICB9IGVsc2UgaWYg
KFNoYWRvd1Jvb3QqIG9sZGVzdFNoYWRvd1Jvb3QgPSBvbGRlc3RTaGFkb3dSb290Rm9yKG5vZGUp
KQotICAgICAgICAgICAgdHJhdmVyc2VUcmVlQW5kTWFyayhpbmRlbnQudG9TdHJpbmcoKSwgb2xk
ZXN0U2hhZG93Um9vdCwgbWFya2VkTm9kZTEsIG1hcmtlZExhYmVsMSwgbWFya2VkTm9kZTIsIG1h
cmtlZExhYmVsMik7CisgICAgICAgIGlmICghbm9kZS0+aXNTaGFkb3dSb290KCkpIHsKKyAgICAg
ICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gbm9kZS0+c2hhZG93Um9vdCgpKQor
ICAgICAgICAgICAgICAgIHRyYXZlcnNlVHJlZUFuZE1hcmsoaW5kZW50LnRvU3RyaW5nKCksIHNo
YWRvd1Jvb3QsIG1hcmtlZE5vZGUxLCBtYXJrZWRMYWJlbDEsIG1hcmtlZE5vZGUyLCBtYXJrZWRM
YWJlbDIpOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC0yMDc2LDE1ICsyMDY2LDEyIEBAIHN0
YXRpYyB2b2lkIHNob3dTdWJUcmVlQWNyb3NzRnJhbWUoY29uc3QKICAgICAgICAgZnB1dHMoIioi
LCBzdGRlcnIpOwogICAgIGZwdXRzKGluZGVudC51dGY4KCkuZGF0YSgpLCBzdGRlcnIpOwogICAg
IG5vZGUtPnNob3dOb2RlKCk7Ci0gICAgIGlmIChub2RlLT5pc1NoYWRvd1Jvb3QoKSkgewotICAg
ICAgICAgaWYgKFNoYWRvd1Jvb3QqIHlvdW5nZXJTaGFkb3dSb290ID0gdG9TaGFkb3dSb290KG5v
ZGUpLT55b3VuZ2VyU2hhZG93Um9vdCgpKQotICAgICAgICAgICAgIHNob3dTdWJUcmVlQWNyb3Nz
RnJhbWUoeW91bmdlclNoYWRvd1Jvb3QsIG1hcmtlZE5vZGUsIGluZGVudCArICJcdCIpOwotICAg
ICB9IGVsc2UgewotICAgICAgICAgaWYgKG5vZGUtPmlzRnJhbWVPd25lckVsZW1lbnQoKSkKLSAg
ICAgICAgICAgICBzaG93U3ViVHJlZUFjcm9zc0ZyYW1lKHN0YXRpY19jYXN0PGNvbnN0IEhUTUxG
cmFtZU93bmVyRWxlbWVudCo+KG5vZGUpLT5jb250ZW50RG9jdW1lbnQoKSwgbWFya2VkTm9kZSwg
aW5kZW50ICsgIlx0Iik7Ci0gICAgICAgICBpZiAoU2hhZG93Um9vdCogb2xkZXN0U2hhZG93Um9v
dCA9IG9sZGVzdFNoYWRvd1Jvb3RGb3Iobm9kZSkpCi0gICAgICAgICAgICAgc2hvd1N1YlRyZWVB
Y3Jvc3NGcmFtZShvbGRlc3RTaGFkb3dSb290LCBtYXJrZWROb2RlLCBpbmRlbnQgKyAiXHQiKTsK
LSAgICAgfQorICAgIGlmICghbm9kZS0+aXNTaGFkb3dSb290KCkpIHsKKyAgICAgICAgaWYgKG5v
ZGUtPmlzRnJhbWVPd25lckVsZW1lbnQoKSkKKyAgICAgICAgICAgIHNob3dTdWJUcmVlQWNyb3Nz
RnJhbWUoc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEZyYW1lT3duZXJFbGVtZW50Kj4obm9kZSktPmNv
bnRlbnREb2N1bWVudCgpLCBtYXJrZWROb2RlLCBpbmRlbnQgKyAiXHQiKTsKKyAgICAgICAgaWYg
KFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBub2RlLT5zaGFkb3dSb290KCkpCisgICAgICAgICAg
ICBzaG93U3ViVHJlZUFjcm9zc0ZyYW1lKHNoYWRvd1Jvb3QsIG1hcmtlZE5vZGUsIGluZGVudCAr
ICJcdCIpOworICAgIH0KICAgICBmb3IgKE5vZGUqIGNoaWxkID0gbm9kZS0+Zmlyc3RDaGlsZCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgc2hvd1N1YlRy
ZWVBY3Jvc3NGcmFtZShjaGlsZCwgbWFya2VkTm9kZSwgaW5kZW50ICsgIlx0Iik7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmgJKHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Miw3ICsyODIsNyBAQCBwdWJsaWM6CiAgICAgLy8gRGVw
cmVjYXRlZC4gU2hvdWxkIHVzZSBzaGFkb3dIb3N0KCkgYW5kIGNoZWNrIHRoZSByZXR1cm4gdmFs
dWUuCiAgICAgTm9kZSogZGVwcmVjYXRlZFNoYWRvd0FuY2VzdG9yTm9kZSgpIGNvbnN0OwogICAg
IFNoYWRvd1Jvb3QqIGNvbnRhaW5pbmdTaGFkb3dSb290KCkgY29uc3Q7Ci0gICAgU2hhZG93Um9v
dCogeW91bmdlc3RTaGFkb3dSb290KCkgY29uc3Q7CisgICAgU2hhZG93Um9vdCogc2hhZG93Um9v
dCgpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJucyAwLCBhIGNoaWxkIG9mIFNoYWRvd1Jvb3QsIG9y
IGEgbGVnYWN5IHNoYWRvdyByb290LgogICAgIE5vZGUqIG5vbkJvdW5kYXJ5U2hhZG93VHJlZVJv
b3ROb2RlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCShyZXZpc2lvbiAxNDk1
MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4NCw3ICsxODQsNyBAQCBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IFNo
YWRvCiB7CiAgICAgRG9jdW1lbnRGcmFnbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblBvaW50
KTsKIAotICAgIGlmICghaW5zZXJ0aW9uUG9pbnQtPmluRG9jdW1lbnQoKSB8fCAhaXNPbGRlc3Qo
KSkKKyAgICBpZiAoIWluc2VydGlvblBvaW50LT5pbkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVy
biBJbnNlcnRpb25Eb25lOwogCiAgICAgLy8gRklYTUU6IFdoZW4gcGFyc2luZyA8dmlkZW8gY29u
dHJvbHM+LCBpbnNlcnRlZEludG8oKSBpcyBjYWxsZWQgbWFueSB0aW1lcyB3aXRob3V0IGludm9r
aW5nIHJlbW92ZWRGcm9tLgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCShyZXZpc2lvbiAx
NDk1MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw4ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEVsZW1lbnRTaGFk
b3c7CiBjbGFzcyBTY29wZUNvbnRlbnREaXN0cmlidXRpb247CiAKLWNsYXNzIFNoYWRvd1Jvb3Qg
OiBwdWJsaWMgRG9jdW1lbnRGcmFnbWVudCwgcHVibGljIFRyZWVTY29wZSwgcHVibGljIERvdWJs
eUxpbmtlZExpc3ROb2RlPFNoYWRvd1Jvb3Q+IHsKLSAgICBmcmllbmQgY2xhc3MgV1RGOjpEb3Vi
bHlMaW5rZWRMaXN0Tm9kZTxTaGFkb3dSb290PjsKK2NsYXNzIFNoYWRvd1Jvb3QgOiBwdWJsaWMg
RG9jdW1lbnRGcmFnbWVudCwgcHVibGljIFRyZWVTY29wZSB7CiBwdWJsaWM6CiAgICAgLy8gRklY
TUU6IFdlIHdpbGwgc3VwcG9ydCBtdWx0aXBsZSBzaGFkb3cgc3VidHJlZXMsIGhvd2V2ZXIgY3Vy
cmVudCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCB3b3JrIHdlbGwKICAgICAvLyBpZiBhIHNoYWRv
dyByb290IGlzIGR5bmFtaWNhbGx5IGNyZWF0ZWQuIFNvIHdlIHByb2hpYml0IG11bHRpcGxlIHNo
YWRvdyBzdWJ0cmVlcwpAQCAtNzQsMTIgKzczLDYgQEAgcHVibGljOgogCiAgICAgRWxlbWVudCog
YWN0aXZlRWxlbWVudCgpIGNvbnN0OwogCi0gICAgU2hhZG93Um9vdCogeW91bmdlclNoYWRvd1Jv
b3QoKSBjb25zdCB7IHJldHVybiBwcmV2KCk7IH0KLSAgICBTaGFkb3dSb290KiBvbGRlclNoYWRv
d1Jvb3QoKSBjb25zdCB7IHJldHVybiBuZXh0KCk7IH0KLQotICAgIGJvb2wgaXNZb3VuZ2VzdCgp
IGNvbnN0IHsgcmV0dXJuICF5b3VuZ2VyU2hhZG93Um9vdCgpOyB9Ci0gICAgYm9vbCBpc09sZGVz
dCgpIGNvbnN0IHsgcmV0dXJuICFvbGRlclNoYWRvd1Jvb3QoKTsgfQotCiAgICAgdmlydHVhbCB2
b2lkIGF0dGFjaCgpOwogCiAgICAgdmlydHVhbCBJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0
IGluc2VydGVkSW50byhDb250YWluZXJOb2RlKikgT1ZFUlJJREU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwCShyZXZpc2lvbiAxNDk1MDYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcg
KzcyLDcgQEAgdm9pZCBUcmVlU2NvcGVBZG9wdGVyOjptb3ZlVHJlZVRvTmV3U2NvcAogICAgICAg
ICAgICAgICAgIG1vdmVUcmVlVG9OZXdTY29wZShhdHRyc1tpXS5nZXQoKSk7CiAgICAgICAgIH0K
IAotICAgICAgICBmb3IgKFNoYWRvd1Jvb3QqIHNoYWRvdyA9IG5vZGUtPnlvdW5nZXN0U2hhZG93
Um9vdCgpOyBzaGFkb3c7IHNoYWRvdyA9IHNoYWRvdy0+b2xkZXJTaGFkb3dSb290KCkpIHsKKyAg
ICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvdyA9IG5vZGUtPnNoYWRvd1Jvb3QoKSkgewogICAg
ICAgICAgICAgc2hhZG93LT5zZXRQYXJlbnRUcmVlU2NvcGUobV9uZXdTY29wZSk7CiAgICAgICAg
ICAgICBpZiAod2lsbE1vdmVUb05ld0RvY3VtZW50KQogICAgICAgICAgICAgICAgIG1vdmVUcmVl
VG9OZXdEb2N1bWVudChzaGFkb3csIG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7CkBAIC04Niw3
ICs4Niw3IEBAIHZvaWQgVHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVUb05ld0RvY3UKIHsKICAg
ICBmb3IgKE5vZGUqIG5vZGUgPSByb290OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4
dChub2RlLCByb290KSkgewogICAgICAgICBtb3ZlTm9kZVRvTmV3RG9jdW1lbnQobm9kZSwgb2xk
RG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKLSAgICAgICAgZm9yIChTaGFkb3dSb290KiBzaGFkb3cg
PSBub2RlLT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgc2hhZG93OyBzaGFkb3cgPSBzaGFkb3ctPm9s
ZGVyU2hhZG93Um9vdCgpKQorICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93ID0gbm9kZS0+
c2hhZG93Um9vdCgpKQogICAgICAgICAgICAgbW92ZVRyZWVUb05ld0RvY3VtZW50KHNoYWRvdywg
b2xkRG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHAJKHJldmlzaW9uIDE0
OTUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMiw4ICsyMjIsNyBAQCB2b2lkIENvbnRlbnREaXN0cmli
dXRvcjo6ZGlzdHJpYnV0ZShFbGVtCiAgICAgVmVjdG9yPGJvb2w+IGRpc3RyaWJ1dGVkKHBvb2wu
c2l6ZSgpKTsKICAgICBkaXN0cmlidXRlZC5maWxsKGZhbHNlKTsKIAotICAgIGZvciAoU2hhZG93
Um9vdCogcm9vdCA9IGhvc3QtPnlvdW5nZXN0U2hhZG93Um9vdCgpOyByb290OyByb290ID0gcm9v
dC0+b2xkZXJTaGFkb3dSb290KCkpIHsKLQorICAgIGlmIChTaGFkb3dSb290KiByb290ID0gaG9z
dC0+c2hhZG93Um9vdCgpKSB7CiAgICAgICAgIGlmIChTY29wZUNvbnRlbnREaXN0cmlidXRpb24q
IHNjb3BlID0gcm9vdC0+c2NvcGVEaXN0cmlidXRpb24oKSkgewogICAgICAgICAgICAgY29uc3Qg
VmVjdG9yPFJlZlB0cjxJbnNlcnRpb25Qb2ludD4gPiYgaW5zZXJ0aW9uUG9pbnRzID0gc2NvcGUt
PmVuc3VyZUluc2VydGlvblBvaW50TGlzdChyb290KTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgaW5zZXJ0aW9uUG9pbnRzLnNpemUoKTsgKytpKSB7CkBAIC0yNDQsNyArMjQz
LDcgQEAgYm9vbCBDb250ZW50RGlzdHJpYnV0b3I6OmludmFsaWRhdGUoRWxlbQogICAgIEFTU0VS
VChuZWVkc0ludmFsaWRhdGlvbigpKTsKICAgICBib29sIG5lZWRzUmVhdHRhY2ggPSAobV92YWxp
ZGl0eSA9PSBVbmRldGVybWluZWQpIHx8ICFtX25vZGVUb0luc2VydGlvblBvaW50LmlzRW1wdHko
KTsKIAotICAgIGZvciAoU2hhZG93Um9vdCogcm9vdCA9IGhvc3QtPnlvdW5nZXN0U2hhZG93Um9v
dCgpOyByb290OyByb290ID0gcm9vdC0+b2xkZXJTaGFkb3dSb290KCkpIHsKKyAgICBpZiAoU2hh
ZG93Um9vdCogcm9vdCA9IGhvc3QtPnNoYWRvd1Jvb3QoKSkgewogICAgICAgICBpZiAoU2NvcGVD
b250ZW50RGlzdHJpYnV0aW9uKiBzY29wZSA9IHJvb3QtPnNjb3BlRGlzdHJpYnV0aW9uKCkpIHsK
ICAgICAgICAgICAgIHNjb3BlLT5zZXRJbnNlcnRpb25Qb2ludEFzc2lnbmVkVG8oMCk7CiAgICAg
ICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEluc2VydGlvblBvaW50PiA+JiBpbnNlcnRpb25Q
b2ludHMgPSBzY29wZS0+ZW5zdXJlSW5zZXJ0aW9uUG9pbnRMaXN0KHJvb3QpOwpAQCAtMzU4LDcg
KzM1Nyw3IEBAIGNvbnN0IFNlbGVjdFJ1bGVGZWF0dXJlU2V0JiBDb250ZW50RGlzdHIKICAgICAg
ICAgcmV0dXJuIG1fc2VsZWN0RmVhdHVyZXM7CiAKICAgICBtX3NlbGVjdEZlYXR1cmVzLmNsZWFy
KCk7Ci0gICAgZm9yIChTaGFkb3dSb290KiByb290ID0gc2hhZG93LT5vbGRlc3RTaGFkb3dSb290
KCk7IHJvb3Q7IHJvb3QgPSByb290LT55b3VuZ2VyU2hhZG93Um9vdCgpKQorICAgIGlmIChTaGFk
b3dSb290KiByb290ID0gc2hhZG93LT5zaGFkb3dSb290KCkpCiAgICAgICAgIGNvbGxlY3RTZWxl
Y3RGZWF0dXJlU2V0RnJvbShyb290KTsKICAgICBtX25lZWRzU2VsZWN0RmVhdHVyZVNldCA9IGZh
bHNlOwogICAgIHJldHVybiBtX3NlbGVjdEZlYXR1cmVzOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZpc2lvbiAxNDk1MDYpCisr
KyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNTgsNyArMzU4LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dW5iaW5k
KE5vZGUqIG5vZAogCiAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkgewogICAgICAgICBp
ZiAoRWxlbWVudFNoYWRvdyogc2hhZG93ID0gdG9FbGVtZW50KG5vZGUpLT5zaGFkb3coKSkgewot
ICAgICAgICAgICAgZm9yIChTaGFkb3dSb290KiByb290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRv
d1Jvb3QoKTsgcm9vdDsgcm9vdCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKQorICAgICAgICAg
ICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3ctPnNoYWRvd1Jvb3QoKSkKICAgICAgICAg
ICAgICAgICB1bmJpbmQocm9vdCwgbm9kZXNNYXApOwogICAgICAgICB9CiAgICAgfQpAQCAtMTQx
OCw3ICsxNDE4LDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpOb2RlPiBJbnNwZQog
ICAgICAgICBFbGVtZW50U2hhZG93KiBzaGFkb3cgPSBlbGVtZW50LT5zaGFkb3coKTsKICAgICAg
ICAgaWYgKHNoYWRvdykgewogICAgICAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxU
eXBlQnVpbGRlcjo6RE9NOjpOb2RlPiA+IHNoYWRvd1Jvb3RzID0gVHlwZUJ1aWxkZXI6OkFycmF5
PFR5cGVCdWlsZGVyOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGZvciAoU2hh
ZG93Um9vdCogcm9vdCA9IHNoYWRvdy0+eW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3Qg
PSByb290LT5vbGRlclNoYWRvd1Jvb3QoKSkKKyAgICAgICAgICAgIGlmIChTaGFkb3dSb290KiBy
b290ID0gc2hhZG93LT5zaGFkb3dSb290KCkpCiAgICAgICAgICAgICAgICAgc2hhZG93Um9vdHMt
PmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JOb2RlKHJvb3QsIDAsIG5vZGVzTWFwKSk7CiAgICAgICAg
ICAgICB2YWx1ZS0+c2V0U2hhZG93Um9vdHMoc2hhZG93Um9vdHMpOwogICAgICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxNDk1MDYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcwLDcgKzcwLDYgQEAgRm9jdXNOYXZpZ2F0aW9uU2NvcGU6OkZvY3VzTmF2aWdhdGlv
blNjbwogICAgIDogbV9yb290VHJlZVNjb3BlKHRyZWVTY29wZSkKIHsKICAgICBBU1NFUlQodHJl
ZVNjb3BlKTsKLSAgICBBU1NFUlQoIXRyZWVTY29wZS0+cm9vdE5vZGUoKS0+aXNTaGFkb3dSb290
KCkgfHwgdG9TaGFkb3dSb290KHRyZWVTY29wZS0+cm9vdE5vZGUoKSktPmlzWW91bmdlc3QoKSk7
CiB9CiAKIE5vZGUqIEZvY3VzTmF2aWdhdGlvblNjb3BlOjpyb290Tm9kZSgpIGNvbnN0CkBAIC0x
MDIsNyArMTAxLDcgQEAgRm9jdXNOYXZpZ2F0aW9uU2NvcGUgRm9jdXNOYXZpZ2F0aW9uU2NvcAog
Rm9jdXNOYXZpZ2F0aW9uU2NvcGUgRm9jdXNOYXZpZ2F0aW9uU2NvcGU6OmZvY3VzTmF2aWdhdGlv
blNjb3BlT3duZWRCeVNoYWRvd0hvc3QoTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQoaXNTaGFk
b3dIb3N0KG5vZGUpKTsKLSAgICByZXR1cm4gRm9jdXNOYXZpZ2F0aW9uU2NvcGUodG9FbGVtZW50
KG5vZGUpLT5zaGFkb3coKS0+eW91bmdlc3RTaGFkb3dSb290KCkpOworICAgIHJldHVybiBGb2N1
c05hdmlnYXRpb25TY29wZSh0b0VsZW1lbnQobm9kZSktPnNoYWRvdygpLT5zaGFkb3dSb290KCkp
OwogfQogCiBGb2N1c05hdmlnYXRpb25TY29wZSBGb2N1c05hdmlnYXRpb25TY29wZTo6Zm9jdXNO
YXZpZ2F0aW9uU2NvcGVPd25lZEJ5SUZyYW1lKEhUTUxGcmFtZU93bmVyRWxlbWVudCogZnJhbWUp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBs
b2FkQ29udHJvbC5jcHAJKHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw3
ICsyMzAsNyBAQCBIVE1MSW5wdXRFbGVtZW50KiBSZW5kZXJGaWxlVXBsb2FkQ29udHJvCiAKICAg
ICBBU1NFUlQoaW5wdXQtPnNoYWRvdygpKTsKIAotICAgIE5vZGUqIGJ1dHRvbk5vZGUgPSBpbnB1
dC0+c2hhZG93KCktPm9sZGVzdFNoYWRvd1Jvb3QoKS0+Zmlyc3RDaGlsZCgpOworICAgIE5vZGUq
IGJ1dHRvbk5vZGUgPSBpbnB1dC0+c2hhZG93KCktPnNoYWRvd1Jvb3QoKS0+Zmlyc3RDaGlsZCgp
OwogICAgIHJldHVybiBidXR0b25Ob2RlICYmIGJ1dHRvbk5vZGUtPmlzSFRNTEVsZW1lbnQoKSAm
JiBidXR0b25Ob2RlLT5oYXNUYWdOYW1lKGlucHV0VGFnKSA/IHN0YXRpY19jYXN0PEhUTUxJbnB1
dEVsZW1lbnQqPihidXR0b25Ob2RlKSA6IDA7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdUUmVmRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RSZWZFbGVtZW50LmNwcAkocmV2aXNpb24gMTQ5NTA2KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1RSZWZFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDcgKzE1MSw3IEBAIHZv
aWQgU1ZHVFJlZkVsZW1lbnQ6OnVwZGF0ZVJlZmVyZW5jZWRUZXgKICAgICAgICAgdGV4dENvbnRl
bnQgPSB0YXJnZXQtPnRleHRDb250ZW50KCk7CiAKICAgICBBU1NFUlQoc2hhZG93KCkpOwotICAg
IFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3coKS0+b2xkZXN0U2hhZG93Um9vdCgpOworICAgIFNo
YWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3coKS0+c2hhZG93Um9vdCgpOwogICAgIGlmICghcm9vdC0+
Zmlyc3RDaGlsZCgpKQogICAgICAgICByb290LT5hcHBlbmRDaGlsZChUZXh0OjpjcmVhdGUoZG9j
dW1lbnQoKSwgdGV4dENvbnRlbnQpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKICAgICBlbHNlIHsK
QEAgLTE2OCw3ICsxNjgsNyBAQCB2b2lkIFNWR1RSZWZFbGVtZW50OjpkZXRhY2hUYXJnZXQoKQog
ICAgIFN0cmluZyBlbXB0eUNvbnRlbnQ7CiAKICAgICBBU1NFUlQoc2hhZG93KCkpOwotICAgIE5v
ZGUqIGNvbnRhaW5lciA9IHNoYWRvdygpLT5vbGRlc3RTaGFkb3dSb290KCktPmZpcnN0Q2hpbGQo
KTsKKyAgICBOb2RlKiBjb250YWluZXIgPSBzaGFkb3coKS0+c2hhZG93Um9vdCgpLT5maXJzdENo
aWxkKCk7CiAgICAgaWYgKGNvbnRhaW5lcikKICAgICAgICAgY29udGFpbmVyLT5zZXRUZXh0Q29u
dGVudChlbXB0eUNvbnRlbnQsIElHTk9SRV9FWENFUFRJT04pOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1VzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNDk1MDYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NCw3ICszOTQsNyBA
QCBzdGF0aWMgYm9vbCBzdWJ0cmVlQ29udGFpbnNEaXNhbGxvd2VkRWxlCiB2b2lkIFNWR1VzZUVs
ZW1lbnQ6OmNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCkKIHsKICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIHRyeSB0byBvcHRpbWl6ZSB0aGlzLCB0byBhdCBsZWFzdCBhbGxvdyBwYXJ0aWFsIHJlY2xv
bmVzLgotICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dUcmVlUm9vdEVsZW1lbnQgPSAgc2hhZG93
KCktPm9sZGVzdFNoYWRvd1Jvb3QoKSkKKyAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93VHJlZVJv
b3RFbGVtZW50ID0gIHNoYWRvdygpLT5zaGFkb3dSb290KCkpCiAgICAgICAgIHNoYWRvd1RyZWVS
b290RWxlbWVudC0+cmVtb3ZlQ2hpbGRyZW4oKTsKIAogICAgIGlmIChtX3RhcmdldEVsZW1lbnRJ
bnN0YW5jZSkgewpAQCAtNDg2LDcgKzQ4Niw3IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6YnVpbGRT
aGFkb3dBbmRJbnN0YW4KICAgICBBU1NFUlQobV90YXJnZXRFbGVtZW50SW5zdGFuY2UtPmRpcmVj
dFVzZUVsZW1lbnQoKSA9PSB0aGlzKTsKICAgICBBU1NFUlQobV90YXJnZXRFbGVtZW50SW5zdGFu
Y2UtPmNvcnJlc3BvbmRpbmdFbGVtZW50KCkgPT0gdGFyZ2V0KTsKIAotICAgIFNoYWRvd1Jvb3Qq
IHNoYWRvd1RyZWVSb290RWxlbWVudCA9IHNoYWRvdygpLT5vbGRlc3RTaGFkb3dSb290KCk7Cisg
ICAgU2hhZG93Um9vdCogc2hhZG93VHJlZVJvb3RFbGVtZW50ID0gc2hhZG93KCktPnNoYWRvd1Jv
b3QoKTsKICAgICBBU1NFUlQoc2hhZG93VHJlZVJvb3RFbGVtZW50KTsKIAogICAgIC8vIEJ1aWxk
IHNoYWRvdyB0cmVlIGZyb20gaW5zdGFuY2UgdHJlZQpAQCAtNzA4LDcgKzcwOCw3IEBAIHZvaWQg
U1ZHVXNlRWxlbWVudDo6YnVpbGRTaGFkb3dUcmVlKFNWR0UKICAgICBpZiAoc3VidHJlZUNvbnRh
aW5zRGlzYWxsb3dlZEVsZW1lbnQobmV3Q2hpbGQuZ2V0KCkpKQogICAgICAgICByZW1vdmVEaXNh
bGxvd2VkRWxlbWVudHNGcm9tU3VidHJlZShuZXdDaGlsZC5nZXQoKSk7CiAKLSAgICBzaGFkb3co
KS0+b2xkZXN0U2hhZG93Um9vdCgpLT5hcHBlbmRDaGlsZChuZXdDaGlsZC5yZWxlYXNlKCkpOwor
ICAgIHNoYWRvdygpLT5zaGFkb3dSb290KCktPmFwcGVuZENoaWxkKG5ld0NoaWxkLnJlbGVhc2Uo
KSk7CiB9CiAKIHZvaWQgU1ZHVXNlRWxlbWVudDo6ZXhwYW5kVXNlRWxlbWVudHNJblNoYWRvd1Ry
ZWUoTm9kZSogZWxlbWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJ
KHJldmlzaW9uIDE0OTUwNikKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjk4LDcgKzY5OCw3IEBAIEludGVybmFsczo6U2hhZG93Um9v
dElmU2hhZG93RE9NRW5hYmxlZE8KICAgICB9CiAKICAgICBpZiAoRWxlbWVudFNoYWRvdyogc2hh
ZG93ID0gaG9zdC0+c2hhZG93KCkpCi0gICAgICAgIHJldHVybiBzaGFkb3ctPnlvdW5nZXN0U2hh
ZG93Um9vdCgpOworICAgICAgICByZXR1cm4gc2hhZG93LT5zaGFkb3dSb290KCk7CiAKICAgICBy
ZXR1cm4gaG9zdC0+Y3JlYXRlU2hhZG93Um9vdChlYykuZ2V0KCk7CiB9CkBAIC03MTQsNTUgKzcx
NCwxNSBAQCBJbnRlcm5hbHM6OlNoYWRvd1Jvb3RJZlNoYWRvd0RPTUVuYWJsZWRPCiAKIEludGVy
bmFsczo6U2hhZG93Um9vdElmU2hhZG93RE9NRW5hYmxlZE9yTm9kZSogSW50ZXJuYWxzOjpzaGFk
b3dSb290KEVsZW1lbnQqIGhvc3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIC8vIEZJWE1F
OiBJbnRlcm5hbHM6OnNoYWRvd1Jvb3QoKSBpbiB0ZXN0cyBzaG91bGQgYmUgY29udmVydGVkIHRv
IHlvdW5nZXN0U2hhZG93Um9vdCgpIG9yIG9sZGVzdFNoYWRvd1Jvb3QoKS4KLSAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg0NjUKLSAgICByZXR1cm4geW91
bmdlc3RTaGFkb3dSb290KGhvc3QsIGVjKTsKLX0KLQotSW50ZXJuYWxzOjpTaGFkb3dSb290SWZT
aGFkb3dET01FbmFibGVkT3JOb2RlKiBJbnRlcm5hbHM6OnlvdW5nZXN0U2hhZG93Um9vdChFbGVt
ZW50KiBob3N0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoIWhvc3QpIHsKLSAgICAg
ICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIGlmIChFbGVtZW50U2hhZG93KiBzaGFkb3cgPSBob3N0LT5zaGFkb3coKSkKLSAgICAgICAg
cmV0dXJuIHNoYWRvdy0+eW91bmdlc3RTaGFkb3dSb290KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LUludGVybmFsczo6U2hhZG93Um9vdElmU2hhZG93RE9NRW5hYmxlZE9yTm9kZSogSW50ZXJuYWxz
OjpvbGRlc3RTaGFkb3dSb290KEVsZW1lbnQqIGhvc3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewog
ICAgIGlmICghaG9zdCkgewogICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQotCiAgICAgaWYgKEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IGhv
c3QtPnNoYWRvdygpKQotICAgICAgICByZXR1cm4gc2hhZG93LT5vbGRlc3RTaGFkb3dSb290KCk7
CisgICAgICAgIHJldHVybiBzaGFkb3ctPnNoYWRvd1Jvb3QoKTsKICAgICByZXR1cm4gMDsKIH0K
IAotSW50ZXJuYWxzOjpTaGFkb3dSb290SWZTaGFkb3dET01FbmFibGVkT3JOb2RlKiBJbnRlcm5h
bHM6OnlvdW5nZXJTaGFkb3dSb290KE5vZGUqIHNoYWRvdywgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgaWYgKCFzaGFkb3cgfHwgIXNoYWRvdy0+aXNTaGFkb3dSb290KCkpIHsKLSAgICAgICAg
ZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg
IHJldHVybiB0b1NoYWRvd1Jvb3Qoc2hhZG93KS0+eW91bmdlclNoYWRvd1Jvb3QoKTsKLX0KLQot
SW50ZXJuYWxzOjpTaGFkb3dSb290SWZTaGFkb3dET01FbmFibGVkT3JOb2RlKiBJbnRlcm5hbHM6
Om9sZGVyU2hhZG93Um9vdChOb2RlKiBzaGFkb3csIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IGlmICghc2hhZG93IHx8ICFzaGFkb3ctPmlzU2hhZG93Um9vdCgpKSB7Ci0gICAgICAgIGVjID0g
SU5WQUxJRF9BQ0NFU1NfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdG9TaGFkb3dSb290KHNoYWRvdyktPm9sZGVyU2hhZG93Um9vdCgpOwotfQotCiBTdHJpbmcg
SW50ZXJuYWxzOjpzaGFkb3dSb290VHlwZShjb25zdCBOb2RlKiByb290LCBFeGNlcHRpb25Db2Rl
JiBlYykgY29uc3QKIHsKICAgICBpZiAoIXJvb3QgfHwgIXJvb3QtPmlzU2hhZG93Um9vdCgpKSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgJKHJldmlzaW9uIDE0OTUwNikKKysr
IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5
LDEwICs4OSw2IEBAIHB1YmxpYzoKICAgICBTaGFkb3dSb290SWZTaGFkb3dET01FbmFibGVkT3JO
b2RlKiBlbnN1cmVTaGFkb3dSb290KEVsZW1lbnQqIGhvc3QsIEV4Y2VwdGlvbkNvZGUmKTsKICAg
ICBTaGFkb3dSb290SWZTaGFkb3dET01FbmFibGVkT3JOb2RlKiBjcmVhdGVTaGFkb3dSb290KEVs
ZW1lbnQqIGhvc3QsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBTaGFkb3dSb290SWZTaGFkb3dET01F
bmFibGVkT3JOb2RlKiBzaGFkb3dSb290KEVsZW1lbnQqIGhvc3QsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICBTaGFkb3dSb290SWZTaGFkb3dET01FbmFibGVkT3JOb2RlKiB5b3VuZ2VzdFNoYWRvd1Jv
b3QoRWxlbWVudCogaG9zdCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFNoYWRvd1Jvb3RJZlNoYWRv
d0RPTUVuYWJsZWRPck5vZGUqIG9sZGVzdFNoYWRvd1Jvb3QoRWxlbWVudCogaG9zdCwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIFNoYWRvd1Jvb3RJZlNoYWRvd0RPTUVuYWJsZWRPck5vZGUqIHlvdW5n
ZXJTaGFkb3dSb290KE5vZGUqIHNoYWRvdywgRXhjZXB0aW9uQ29kZSYpOwotICAgIFNoYWRvd1Jv
b3RJZlNoYWRvd0RPTUVuYWJsZWRPck5vZGUqIG9sZGVyU2hhZG93Um9vdChOb2RlKiBzaGFkb3cs
IEV4Y2VwdGlvbkNvZGUmKTsKICAgICBTdHJpbmcgc2hhZG93Um9vdFR5cGUoY29uc3QgTm9kZSos
IEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICBib29sIGhhc1NoYWRvd0luc2VydGlvblBvaW50
KGNvbnN0IE5vZGUqLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CiAgICAgYm9vbCBoYXNDb250ZW50
RWxlbWVudChjb25zdCBOb2RlKiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwpJbmRleDogU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAkocmV2aXNpb24gMTQ5NTA2KQorKysgU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxNyArNDAs
MTAgQEAKICAgICBTaGFkb3dSb290IGVuc3VyZVNoYWRvd1Jvb3QoRWxlbWVudCBob3N0KSByYWlz
ZXMgKERPTUV4Y2VwdGlvbik7CiAgICAgU2hhZG93Um9vdCBjcmVhdGVTaGFkb3dSb290KEVsZW1l
bnQgaG9zdCkgcmFpc2VzIChET01FeGNlcHRpb24pOwogICAgIFNoYWRvd1Jvb3Qgc2hhZG93Um9v
dChFbGVtZW50IGhvc3QpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKLSAgICBTaGFkb3dSb290IHlv
dW5nZXN0U2hhZG93Um9vdChFbGVtZW50IGhvc3QpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKLSAg
ICBTaGFkb3dSb290IG9sZGVzdFNoYWRvd1Jvb3QoRWxlbWVudCBob3N0KSByYWlzZXMgKERPTUV4
Y2VwdGlvbik7Ci0gICAgU2hhZG93Um9vdCB5b3VuZ2VyU2hhZG93Um9vdChOb2RlIHJvb3QpIHJh
aXNlcyAoRE9NRXhjZXB0aW9uKTsKLSAgICBTaGFkb3dSb290IG9sZGVyU2hhZG93Um9vdChOb2Rl
IHJvb3QpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICNlbHNlCiAgICAgTm9kZSBlbnN1cmVTaGFk
b3dSb290KEVsZW1lbnQgaG9zdCkgcmFpc2VzIChET01FeGNlcHRpb24pOwogICAgIE5vZGUgY3Jl
YXRlU2hhZG93Um9vdChFbGVtZW50IGhvc3QpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICAgICBO
b2RlIHNoYWRvd1Jvb3QoRWxlbWVudCBob3N0KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7Ci0gICAg
Tm9kZSB5b3VuZ2VzdFNoYWRvd1Jvb3QoRWxlbWVudCBob3N0KSByYWlzZXMgKERPTUV4Y2VwdGlv
bik7Ci0gICAgTm9kZSBvbGRlc3RTaGFkb3dSb290KEVsZW1lbnQgaG9zdCkgcmFpc2VzIChET01F
eGNlcHRpb24pOwotICAgIE5vZGUgeW91bmdlclNoYWRvd1Jvb3QoTm9kZSByb290KSByYWlzZXMg
KERPTUV4Y2VwdGlvbik7CiAjZW5kaWYKICAgICBET01TdHJpbmcgc2hhZG93Um9vdFR5cGUoTm9k
ZSByb290KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAgICAgYm9vbGVhbiBoYXNTaGFkb3dJbnNl
cnRpb25Qb2ludChOb2RlIHJvb3QpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE0OTU0OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDEzLTA1LTAzICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxl
LmNvbT4KKworICAgICAgICBSZW1vdmUgY29uY2VwdCBvZiB5b3VuZ2VyIGFuZCBvbGRlciBzaGFk
b3cgdHJlZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExNTU3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogZWRpdGluZy90ZXh0LWl0ZXJhdG9yL2Jhc2ljLWl0ZXJhdGlvbi1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogZWRpdGluZy90ZXh0LWl0ZXJhdG9yL3NjcmlwdC10ZXN0cy9iYXNpYy1pdGVyYXRp
b24uanM6CisgICAgICAgIChhZGRTaGFkb3dUcmVlV2l0aERpdkVsZW1lbnQpOgorICAgICAgICAq
IGZhc3QvZm9ybXMvcmVzb3VyY2VzL2NvbW1vbi1zcGluYnV0dG9uLWNoYW5nZS1hbmQtaW5wdXQt
ZXZlbnRzLmpzOgorICAgICAgICAodGVzdFNwaW5CdXR0b25DaGFuZ2VBbmRJbnB1dEV2ZW50cyk6
CisgICAgICAgICogZmFzdC9mb3Jtcy9yZXNvdXJjZXMvY29tbW9uLXNwaW5idXR0b24tY2xpY2st
aW4taWZyYW1lLmpzOgorICAgICAgICAoZ2V0U3BpbkJ1dHRvbik6CisKIDIwMTMtMDUtMDMgIFZp
YXRjaGVzbGF2IE9zdGFwZW5rbyAgPHZpYXRjaHNsYXYub0BzYW1zdW5nLmNvbT4KIAogICAgICAg
ICBbQ2Fpcm9dIEFudGktYWxpYXNpbmcgc2hvdWxkIG5vdCBiZSBhbHdheXMgZGlzYWJsZWQgZm9y
IGxpbmVzCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3RleHQtaXRlcmF0b3IvYmFzaWMtaXRl
cmF0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3Rl
eHQtaXRlcmF0b3IvYmFzaWMtaXRlcmF0aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTQ5NTA2
KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy90ZXh0LWl0ZXJhdG9yL2Jhc2ljLWl0ZXJhdGlvbi1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE0LDggKzE0LDggQEAgRkFJTCByYW5nZS5z
ZWxlY3ROb2RlQ29udGVudHModGVzdERvY3VtZQogLgogUEFTUyByYW5nZS5zZWxlY3ROb2RlQ29u
dGVudHModGVzdERvY3VtZW50LmJvZHkpOyBpbnRlcm5hbHMucmFuZ2VBc1RleHQocmFuZ2UpIGlz
ICJoZXkiCiBQQVNTIHJhbmdlLnNldFN0YXJ0QmVmb3JlKHRlc3REb2N1bWVudC5ib2R5KTsgcmFu
Z2Uuc2V0RW5kQWZ0ZXIodGVzdERvY3VtZW50LmJvZHkpOyBpbnRlcm5hbHMucmFuZ2VBc1RleHQo
cmFuZ2UpIGlzICJoZXkiCi1QQVNTIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhpbnRlcm5hbHMu
b2xkZXN0U2hhZG93Um9vdChpbnB1dCkpOyBpbnRlcm5hbHMucmFuZ2VBc1RleHQocmFuZ2UpIGlz
ICJiIgotUEFTUyBhcHBlbmRCckVsZW1lbnQoaW50ZXJuYWxzLm9sZGVzdFNoYWRvd1Jvb3QoaW5w
dXQpLmNoaWxkTm9kZXNbMF0pOyByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoaW50ZXJuYWxzLm9s
ZGVzdFNoYWRvd1Jvb3QoaW5wdXQpKTsgaW50ZXJuYWxzLnJhbmdlQXNUZXh0KHJhbmdlKSBpcyAi
YiIKK1BBU1MgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGludGVybmFscy5zaGFkb3dSb290KGlu
cHV0KSk7IGludGVybmFscy5yYW5nZUFzVGV4dChyYW5nZSkgaXMgImIiCitQQVNTIGFwcGVuZEJy
RWxlbWVudChpbnRlcm5hbHMuc2hhZG93Um9vdChpbnB1dCkuY2hpbGROb2Rlc1swXSk7IHJhbmdl
LnNlbGVjdE5vZGVDb250ZW50cyhpbnRlcm5hbHMuc2hhZG93Um9vdChpbnB1dCkpOyBpbnRlcm5h
bHMucmFuZ2VBc1RleHQocmFuZ2UpIGlzICJiIgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3RleHQtaXRl
cmF0b3Ivc2NyaXB0LXRlc3RzL2Jhc2ljLWl0ZXJhdGlvbi5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9lZGl0aW5nL3RleHQtaXRlcmF0b3Ivc2NyaXB0LXRlc3RzL2Jhc2ljLWl0ZXJhdGlv
bi5qcwkocmV2aXNpb24gMTQ5NTA2KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy90ZXh0LWl0ZXJh
dG9yL3NjcmlwdC10ZXN0cy9iYXNpYy1pdGVyYXRpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTgs
NyArOCw3IEBAIGZ1bmN0aW9uIGFwcGVuZEJyRWxlbWVudChub2RlKQogZnVuY3Rpb24gYWRkU2hh
ZG93VHJlZVdpdGhEaXZFbGVtZW50KG5vZGUpCiB7CiAgICAgbm9kZS53ZWJraXRDcmVhdGVTaGFk
b3dSb290KCk7Ci0gICAgaW50ZXJuYWxzLm9sZGVzdFNoYWRvd1Jvb3Qobm9kZSkuaW5uZXJIVE1M
ID0gJzxkaXY+YjwvZGl2Pic7CisgICAgaW50ZXJuYWxzLnNoYWRvd1Jvb3Qobm9kZSkuaW5uZXJI
VE1MID0gJzxkaXY+YjwvZGl2Pic7CiB9CiAKIHZhciBzdWJmcmFtZSA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2lmcmFtZScpOwpAQCAtNDQsOSArNDQsOSBAQCBzaG91bGRCZSgncmFuZ2Uuc2V0
U3RhcnRCZWZvcmUodGVzdERvY3VtCiAKIHRlc3REb2N1bWVudC5ib2R5LmlubmVySFRNTCA9ICc8
aW5wdXQgaWQ9ImEiIHZhbHVlPSJiIiAvPic7CiB2YXIgaW5wdXQgPSB0ZXN0RG9jdW1lbnQucXVl
cnlTZWxlY3RvcignaW5wdXQnKTsKLXNob3VsZEJlKCdyYW5nZS5zZWxlY3ROb2RlQ29udGVudHMo
aW50ZXJuYWxzLm9sZGVzdFNoYWRvd1Jvb3QoaW5wdXQpKTsgaW50ZXJuYWxzLnJhbmdlQXNUZXh0
KHJhbmdlKScsICciYiInKTsKK3Nob3VsZEJlKCdyYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoaW50
ZXJuYWxzLnNoYWRvd1Jvb3QoaW5wdXQpKTsgaW50ZXJuYWxzLnJhbmdlQXNUZXh0KHJhbmdlKScs
ICciYiInKTsKIAotc2hvdWxkQmUoJ2FwcGVuZEJyRWxlbWVudChpbnRlcm5hbHMub2xkZXN0U2hh
ZG93Um9vdChpbnB1dCkuY2hpbGROb2Rlc1swXSk7IHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhp
bnRlcm5hbHMub2xkZXN0U2hhZG93Um9vdChpbnB1dCkpOyBpbnRlcm5hbHMucmFuZ2VBc1RleHQo
cmFuZ2UpJywgJyJiIicpOworc2hvdWxkQmUoJ2FwcGVuZEJyRWxlbWVudChpbnRlcm5hbHMuc2hh
ZG93Um9vdChpbnB1dCkuY2hpbGROb2Rlc1swXSk7IHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhp
bnRlcm5hbHMuc2hhZG93Um9vdChpbnB1dCkpOyBpbnRlcm5hbHMucmFuZ2VBc1RleHQocmFuZ2Up
JywgJyJiIicpOwogCiBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHN1YmZyYW1lKTsKIApJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9yZXNvdXJjZXMvY29tbW9uLXNwaW5idXR0b24tY2hh
bmdlLWFuZC1pbnB1dC1ldmVudHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9m
b3Jtcy9yZXNvdXJjZXMvY29tbW9uLXNwaW5idXR0b24tY2hhbmdlLWFuZC1pbnB1dC1ldmVudHMu
anMJKHJldmlzaW9uIDE0OTUwNikKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvcmVzb3VyY2Vz
L2NvbW1vbi1zcGluYnV0dG9uLWNoYW5nZS1hbmQtaW5wdXQtZXZlbnRzLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw3ICszMCw3IEBAIGZ1bmN0aW9uIHRlc3RTcGluQnV0dG9uQ2hhbmdlQW5kSW5w
dXRFdmUKIAogICAgIGRlYnVnKCdDbGljayB0aGUgdXBwZXIgYnV0dG9uJyk7CiAgICAgLy8gTW92
ZSB0aGUgY3Vyc29yIG9uIHRoZSB1cHBlciBidXR0b24uCi0gICAgdmFyIHNwaW5CdXR0b24gPSBn
ZXRFbGVtZW50QnlQc2V1ZG9JZChpbnRlcm5hbHMub2xkZXN0U2hhZG93Um9vdCh0ZXN0SW5wdXQp
LCAiLXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiIpOworICAgIHZhciBzcGluQnV0dG9uID0gZ2V0
RWxlbWVudEJ5UHNldWRvSWQoaW50ZXJuYWxzLnNoYWRvd1Jvb3QodGVzdElucHV0KSwgIi13ZWJr
aXQtaW5uZXItc3Bpbi1idXR0b24iKTsKICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh0ZXN0
SW5wdXQub2Zmc2V0TGVmdCArIHNwaW5CdXR0b24ub2Zmc2V0TGVmdCwgdGVzdElucHV0Lm9mZnNl
dFRvcCArIHRlc3RJbnB1dC5vZmZzZXRIZWlnaHQgLyA0KTsKICAgICBldmVudFNlbmRlci5tb3Vz
ZURvd24oKTsKICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL3Jlc291cmNlcy9jb21tb24tc3BpbmJ1dHRvbi1jbGljay1pbi1pZnJhbWUuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9yZXNvdXJjZXMvY29tbW9uLXNw
aW5idXR0b24tY2xpY2staW4taWZyYW1lLmpzCShyZXZpc2lvbiAxNDk1MDYpCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL3Jlc291cmNlcy9jb21tb24tc3BpbmJ1dHRvbi1jbGljay1pbi1pZnJh
bWUuanMJKHdvcmtpbmcgY29weSkKQEAgLTcsNyArNyw3IEBAIGZ1bmN0aW9uIGdldFNwaW5CdXR0
b24oaW5wdXQpCiB7CiAgICAgaWYgKCF3aW5kb3cuaW50ZXJuYWxzKQogICAgICAgICByZXR1cm4g
bnVsbDsKLSAgICByZXR1cm4gZ2V0RWxlbWVudEJ5UHNldWRvSWQoaW50ZXJuYWxzLm9sZGVzdFNo
YWRvd1Jvb3QoaW5wdXQpLCAiLXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiIpOworICAgIHJldHVy
biBnZXRFbGVtZW50QnlQc2V1ZG9JZChpbnRlcm5hbHMuc2hhZG93Um9vdChpbnB1dCksICItd2Vi
a2l0LWlubmVyLXNwaW4tYnV0dG9uIik7CiB9CiAKIGZ1bmN0aW9uIG1vdXNlQ2xpY2soKQo=
</data>
<flag name="review"
          id="221948"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>