<?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>58807</bug_id>
          
          <creation_ts>2011-04-18 12:12:15 -0700</creation_ts>
          <short_desc>Create RIAA class for GraphicsContext::save() and restore()</short_desc>
          <delta_ts>2011-04-21 10:45:57 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>OS X 10.5</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="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>387914</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-04-18 12:12:15 -0700</bug_when>
    <thetext>Create RIAA class for GraphicsContext::save() and restore()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389306</commentid>
    <comment_count>1</comment_count>
      <attachid>90354</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-04-20 09:59:34 -0700</bug_when>
    <thetext>Created attachment 90354
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389330</commentid>
    <comment_count>2</comment_count>
      <attachid>90354</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-20 10:31:50 -0700</bug_when>
    <thetext>Comment on attachment 90354
Patch

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

Looks great.

&gt; Source/WebCore/platform/graphics/GraphicsContext.h:556
&gt; +    class GraphicsContextStateSaver {

Kinda a mouth-full, but I don&apos;t have better.

&gt; Source/WebCore/platform/graphics/GraphicsContext.h:560
&gt; +        : m_context(context)
&gt; +        , m_saveAndRestore(saveAndRestore)

I think we technically indent these on level (differnet from how xcode does things).

&gt; Source/WebCore/platform/graphics/GraphicsContext.h:576
&gt; +            ASSERT(!m_saveAndRestore);
&gt; +            m_context.save();
&gt; +            m_saveAndRestore = true;

We could make this a counter instead.  Not sure how useful that would be.

&gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:638
&gt; +    GraphicsContextStateSaver clipToBorderStateSaver(*context, clipToBorderRadius);
&gt; +    if (clipToBorderRadius) {

Oh, that&apos;s so sexy.

&gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:1525
&gt; +                ++outerBorderTopWidth;
&gt; +                ++outerBorderBottomWidth;
&gt; +                ++outerBorderLeftWidth;
&gt; +                ++outerBorderRightWidth;

Bleh.  (For another patch. :)

&gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:1553
&gt; +        GraphicsContextStateSaver graphicsStateSaver(*graphicsContext);

You call it &quot;stateSaver&quot; other places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389799</commentid>
    <comment_count>3</comment_count>
      <attachid>90354</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-04-20 20:42:19 -0700</bug_when>
    <thetext>Comment on attachment 90354
Patch

Landed in http://trac.webkit.org/changeset/84463

Will keep bug open for more usage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389835</commentid>
    <comment_count>4</comment_count>
      <attachid>90490</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-04-20 21:47:12 -0700</bug_when>
    <thetext>Created attachment 90490
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389845</commentid>
    <comment_count>5</comment_count>
      <attachid>90490</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-20 22:06:14 -0700</bug_when>
    <thetext>Comment on attachment 90490
Patch

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

LGTM.

&gt; Source/WebCore/rendering/RenderFileUploadControl.cpp:212
&gt; +    GraphicsContextStateSaver stateSaver(*paintInfo.context, false);

I think we should turn this bool into an Enum at some point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390064</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-04-21 08:56:18 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/84504</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390148</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-21 10:45:57 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/84504 might have broken GTK Linux 32-bit Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>90354</attachid>
            <date>2011-04-20 09:59:34 -0700</date>
            <delta_ts>2011-04-20 20:42:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58807-20110420095933.patch</filename>
            <type>text/plain</type>
            <size>28565</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQzNDMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkYjRiNGIwMGJkOTQ4Mjc3
ZTMwNzg2YWE0YmEyNGE2Yzg1ZTAzZmU2Li4zNTFlMDU5ZWYxNTRmNDg2ODQ3NDg1OWRjMmUyZjBi
Mzc2MWY5NmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMDQtMjAgIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRlIFJJQUEgY2xhc3MgZm9yIEdyYXBoaWNz
Q29udGV4dDo6c2F2ZSgpIGFuZCByZXN0b3JlKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU4ODA3CisgICAgICAgIAorICAgICAgICBNYWtlIGEgc3Rh
Y2stYmFzZWQgY2xhc3MgdGhhdCBjYW4gYmUgdXNlZCB0byBzYXZlIGFuZCByZXN0b3JlCisgICAg
ICAgIHRoZSBncmFwaGljcyBzdGF0ZS4gSXQgaGFzIGNvbmRpdGlvbmFsIGJlaGF2aW9yIHRvIGRl
YWwgd2l0aCB0aGUgbWFueSBjYXNlcworICAgICAgICB3aGVyZSB3ZSBkZWNpZGUgdG8gc2F2ZS9y
ZXN0b3JlIGJhc2VkIG9uIHNvbWUgcnVudGltZSBjb25kaXRpb24uCisKKyAgICAgICAgQ2hhbmdl
IFJlbmRlckJveE1vZGVsT2JqZWN0IHRvIHVzZSBpdCBmb3Igbm93OyBpdCBjYW4gYmUgdXNlZCBt
b3JlIHdpZGVseQorICAgICAgICBvbmNlIGNvbW1pdHRlZC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlcjo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjp+R3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpzYXZl
U3RhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRl
bmRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRPbmVC
b3JkZXJTaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWlu
dEJvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6ZHJhd0Jv
eFNpZGVGcm9tUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6
cGFpbnRCb3hTaGFkb3cpOgorCiAyMDExLTA0LTE5ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFz
ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCAzMi1iaXQgYnVpbGRzLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCA2NDg2
MGJjNmU3MGQ4OWVmOTQzMjZhMWJjZmRhYWVlZmM1OTZjMTVmLi5jMmVhNTA5OWE1NmRlNjM5NTc0
Yjc2NTBjNmIzZTQ3NDc4NDRmMTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtNTUzLDYgKzU1MywzNCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV91cGRhdGluZ0NvbnRyb2xUaW50czsKICAgICB9
OwogCisgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciB7CisgICAgcHVibGljOgor
ICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgYm9vbCBzYXZlQW5kUmVzdG9yZSA9IHRydWUpCisgICAgICAgIDogbV9jb250ZXh0KGNvbnRl
eHQpCisgICAgICAgICwgbV9zYXZlQW5kUmVzdG9yZShzYXZlQW5kUmVzdG9yZSkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCisgICAgICAgICAgICAgICAgbV9j
b250ZXh0LnNhdmUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgfkdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9zYXZlQW5kUmVz
dG9yZSkKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQucmVzdG9yZSgpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICB2b2lkIHNhdmVTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgICAgICBtX2NvbnRleHQuc2F2ZSgp
OworICAgICAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7Cisg
ICAgICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKKyAgICB9OworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBHcmFwaGljc0NvbnRleHRfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggNjE4N2VlZGMyZGE1
OTE3YjRiMDkwM2IxMDJmYzA1ZmZkZWFlOTJhNi4uZGFiN2JjYTBkMGE4YjM2OTQ4ZWYxOGQxODdh
YjA5NWJjYjE2OGQwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuY3BwCkBAIC02MzMsMTIgKzYzMywxMSBAQCB2b2lkIFJlbmRlckJveE1v
ZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYm9vbCBjbGlwcGVkVG9Cb3Jk
ZXJSYWRpdXMgPSBmYWxzZTsKLSAgICBpZiAoaGFzUm91bmRlZEJvcmRlciAmJiBibGVlZEF2b2lk
YW5jZSAhPSBCYWNrZ3JvdW5kQmxlZWRVc2VUcmFuc3BhcmVuY3lMYXllcikgewotICAgICAgICBj
b250ZXh0LT5zYXZlKCk7CisgICAgYm9vbCBjbGlwVG9Cb3JkZXJSYWRpdXMgPSBoYXNSb3VuZGVk
Qm9yZGVyICYmIGJsZWVkQXZvaWRhbmNlICE9IEJhY2tncm91bmRCbGVlZFVzZVRyYW5zcGFyZW5j
eUxheWVyOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgY2xpcFRvQm9yZGVyU3RhdGVT
YXZlcigqY29udGV4dCwgY2xpcFRvQm9yZGVyUmFkaXVzKTsKKyAgICBpZiAoY2xpcFRvQm9yZGVy
UmFkaXVzKSB7CiAgICAgICAgIFJvdW5kZWRJbnRSZWN0IGJvcmRlciA9IGdldEJhY2tncm91bmRS
b3VuZGVkUmVjdChib3JkZXJSZWN0LCBib3gsIGlubGluZUJveFdpZHRoLCBpbmxpbmVCb3hIZWln
aHQsIGluY2x1ZGVMZWZ0RWRnZSwgaW5jbHVkZVJpZ2h0RWRnZSk7CiAgICAgICAgIGNvbnRleHQt
PmFkZFJvdW5kZWRSZWN0Q2xpcChib3JkZXIpOwotICAgICAgICBjbGlwcGVkVG9Cb3JkZXJSYWRp
dXMgPSB0cnVlOwogICAgIH0KICAgICAKICAgICBpbnQgYkxlZnQgPSBpbmNsdWRlTGVmdEVkZ2Ug
PyBib3JkZXJMZWZ0KCkgOiAwOwpAQCAtNjQ2LDkgKzY0NSw5IEBAIHZvaWQgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQoY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvCiAgICAgaW50IHBMZWZ0ID0gaW5jbHVkZUxlZnRFZGdlID8gcGFkZGluZ0xlZnQoKSA6
IDA7CiAgICAgaW50IHBSaWdodCA9IGluY2x1ZGVSaWdodEVkZ2UgPyBwYWRkaW5nUmlnaHQoKSA6
IDA7CiAKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIGNsaXBXaXRoU2Nyb2xsaW5nU3Rh
dGVTYXZlcigqY29udGV4dCwgY2xpcHBlZFdpdGhMb2NhbFNjcm9sbGluZyk7CiAgICAgaWYgKGNs
aXBwZWRXaXRoTG9jYWxTY3JvbGxpbmcpIHsKICAgICAgICAgLy8gQ2xpcCB0byB0aGUgb3ZlcmZs
b3cgYXJlYS4KLSAgICAgICAgY29udGV4dC0+c2F2ZSgpOwogICAgICAgICBjb250ZXh0LT5jbGlw
KHRvUmVuZGVyQm94KHRoaXMpLT5vdmVyZmxvd0NsaXBSZWN0KHR4LCB0eSkpOwogICAgICAgICAK
ICAgICAgICAgLy8gTm93IGFkanVzdCBvdXIgdHgsIHR5LCB3LCBoIHRvIHJlZmxlY3QgYSBzY3Jv
bGxlZCBjb250ZW50IGJveCB3aXRoIGJvcmRlcnMgYXQgdGhlIGVuZHMuCkBAIC02NTksNiArNjU4
LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZChj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY28KICAgICAgICAgaCA9IGJvcmRlclRvcCgpICsg
bGF5ZXIoKS0+c2Nyb2xsSGVpZ2h0KCkgKyBib3JkZXJCb3R0b20oKTsKICAgICB9CiAgICAgCisg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBiYWNrZ3JvdW5kQ2xpcFN0YXRlU2F2ZXIoKmNv
bnRleHQsIGZhbHNlKTsKICAgICBpZiAoYmdMYXllci0+Y2xpcCgpID09IFBhZGRpbmdGaWxsQm94
IHx8IGJnTGF5ZXItPmNsaXAoKSA9PSBDb250ZW50RmlsbEJveCkgewogICAgICAgICAvLyBDbGlw
IHRvIHRoZSBwYWRkaW5nIG9yIGNvbnRlbnQgYm94ZXMgYXMgbmVjZXNzYXJ5LgogICAgICAgICBi
b29sIGluY2x1ZGVQYWRkaW5nID0gYmdMYXllci0+Y2xpcCgpID09IENvbnRlbnRGaWxsQm94OwpA
QCAtNjY2LDcgKzY2Niw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExh
eWVyRXh0ZW5kZWQoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvCiAgICAgICAgIGludCB5
ID0gdHkgKyBib3JkZXJUb3AoKSArIChpbmNsdWRlUGFkZGluZyA/IHBhZGRpbmdUb3AoKSA6IDAp
OwogICAgICAgICBpbnQgd2lkdGggPSB3IC0gYkxlZnQgLSBiUmlnaHQgLSAoaW5jbHVkZVBhZGRp
bmcgPyBwTGVmdCArIHBSaWdodCA6IDApOwogICAgICAgICBpbnQgaGVpZ2h0ID0gaCAtIGJvcmRl
clRvcCgpIC0gYm9yZGVyQm90dG9tKCkgLSAoaW5jbHVkZVBhZGRpbmcgPyBwYWRkaW5nVG9wKCkg
KyBwYWRkaW5nQm90dG9tKCkgOiAwKTsKLSAgICAgICAgY29udGV4dC0+c2F2ZSgpOworICAgICAg
ICBiYWNrZ3JvdW5kQ2xpcFN0YXRlU2F2ZXIuc2F2ZVN0YXRlKCk7CiAgICAgICAgIGNvbnRleHQt
PmNsaXAoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CiAgICAgfSBlbHNlIGlmIChiZ0xh
eWVyLT5jbGlwKCkgPT0gVGV4dEZpbGxCb3gpIHsKICAgICAgICAgLy8gV2UgaGF2ZSB0byBkcmF3
IG91ciB0ZXh0IGludG8gYSBtYXNrIHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjbGlwIGJhY2tn
cm91bmQgZHJhd2luZy4KQEAgLTY5Niw3ICs2OTYsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
bwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBUaGUgbWFzayBoYXMgYmVlbiBjcmVh
dGVkLiAgTm93IHdlIGp1c3QgbmVlZCB0byBjbGlwIHRvIGl0LgotICAgICAgICBjb250ZXh0LT5z
YXZlKCk7CisgICAgICAgIGJhY2tncm91bmRDbGlwU3RhdGVTYXZlci5zYXZlU3RhdGUoKTsKICAg
ICAgICAgY29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIobWFza0ltYWdlLmdldCgpLCBtYXNrUmVj
dCk7CiAgICAgfQogICAgIApAQCAtNzY5LDE1ICs3NjksNiBAQCB2b2lkIFJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjbwogICAgICAgICAgICAgY29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UuZ2V0KCksIHN0
eWxlKCktPmNvbG9yU3BhY2UoKSwgZGVzdFJlY3QsIHBoYXNlLCB0aWxlU2l6ZSwgY29tcG9zaXRl
T3AsIHVzZUxvd1F1YWxpdHlTY2FsaW5nKTsKICAgICAgICAgfQogICAgIH0KLQotICAgIGlmICgh
aXNCb3JkZXJGaWxsKSAvLyBVbmRvIHRoZSBiYWNrZ3JvdW5kIGNsaXAKLSAgICAgICAgY29udGV4
dC0+cmVzdG9yZSgpOwotCi0gICAgaWYgKGNsaXBwZWRUb0JvcmRlclJhZGl1cykgLy8gVW5kbyB0
aGUgYm9yZGVyIHJhZGl1cyBjbGlwCi0gICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICAg
ICAgCi0gICAgaWYgKGNsaXBwZWRXaXRoTG9jYWxTY3JvbGxpbmcpIC8vIFVuZG8gdGhlIGNsaXAg
Zm9yIGxvY2FsIGJhY2tncm91bmQgYXR0YWNobWVudHMuCi0gICAgICAgIGNvbnRleHQtPnJlc3Rv
cmUoKTsKIH0KIAogSW50U2l6ZSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3VsYXRlRmlsbFRp
bGVTaXplKGNvbnN0IEZpbGxMYXllciogZmlsbExheWVyLCBJbnRTaXplIHBvc2l0aW9uaW5nQXJl
YVNpemUpIGNvbnN0CkBAIC0xMjQ1LDE5ICsxMjM2LDE3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBhaW50T25lQm9yZGVyU2lkZShHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4
dCwKICAgICBjb25zdCBDb2xvciYgY29sb3JUb1BhaW50ID0gb3ZlcnJpZGVDb2xvciA/ICpvdmVy
cmlkZUNvbG9yIDogZWRnZVRvUmVuZGVyLmNvbG9yOwogCiAgICAgaWYgKHBhdGgpIHsKLSAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgZ3JhcGhpY3NTdGF0ZVNhdmVyKCpncmFwaGljc0NvbnRleHQpOwogICAgICAgICBjbGlw
Qm9yZGVyU2lkZVBvbHlnb24oZ3JhcGhpY3NDb250ZXh0LCBvdXRlckJvcmRlciwgaW5uZXJCb3Jk
ZXIsIHNpZGUsIGFkamFjZW50U2lkZTFTdHlsZXNNYXRjaCwgYWRqYWNlbnRTaWRlMlN0eWxlc01h
dGNoKTsKICAgICAgICAgZmxvYXQgdGhpY2tuZXNzID0gbWF4KG1heChlZGdlVG9SZW5kZXIud2lk
dGgsIGFkamFjZW50RWRnZTEud2lkdGgpLCBhZGphY2VudEVkZ2UyLndpZHRoKTsKICAgICAgICAg
ZHJhd0JveFNpZGVGcm9tUGF0aChncmFwaGljc0NvbnRleHQsIG91dGVyQm9yZGVyLnJlY3QoKSwg
KnBhdGgsIGVkZ2VzLCBlZGdlVG9SZW5kZXIud2lkdGgsIHRoaWNrbmVzcywgc2lkZSwgc3R5bGUs
CiAgICAgICAgICAgICBjb2xvclRvUGFpbnQsIGVkZ2VUb1JlbmRlci5zdHlsZSwgYmxlZWRBdm9p
ZGFuY2UsIGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UsIGluY2x1ZGVMb2dpY2FsUmlnaHRFZGdlKTsK
LSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgYm9vbCBkaWRDbGlwID0gZmFsc2U7CisgICAgICAgIGJvb2wgc2hvdWxkQ2xpcCA9IHN0eWxl
UmVxdWlyZXNDbGlwUG9seWdvbihlZGdlVG9SZW5kZXIuc3R5bGUpICYmIChtaXRyZUFkamFjZW50
U2lkZTEgfHwgbWl0cmVBZGphY2VudFNpZGUyKTsKICAgICAgICAgCi0gICAgICAgIGlmIChzdHls
ZVJlcXVpcmVzQ2xpcFBvbHlnb24oZWRnZVRvUmVuZGVyLnN0eWxlKSAmJiAobWl0cmVBZGphY2Vu
dFNpZGUxIHx8IG1pdHJlQWRqYWNlbnRTaWRlMikpIHsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+c2F2ZSgpOworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIGNsaXBTdGF0
ZVNhdmVyKCpncmFwaGljc0NvbnRleHQsIHNob3VsZENsaXApOworICAgICAgICBpZiAoc2hvdWxk
Q2xpcCkgewogICAgICAgICAgICAgY2xpcEJvcmRlclNpZGVQb2x5Z29uKGdyYXBoaWNzQ29udGV4
dCwgb3V0ZXJCb3JkZXIsIGlubmVyQm9yZGVyLCBzaWRlLCAhbWl0cmVBZGphY2VudFNpZGUxLCAh
bWl0cmVBZGphY2VudFNpZGUyKTsKLSAgICAgICAgICAgIGRpZENsaXAgPSB0cnVlOwogICAgICAg
ICAgICAgLy8gU2luY2Ugd2UgY2xpcHBlZCwgbm8gbmVlZCB0byBkcmF3IHdpdGggYSBtaXRyZS4K
ICAgICAgICAgICAgIG1pdHJlQWRqYWNlbnRTaWRlMSA9IGZhbHNlOwogICAgICAgICAgICAgbWl0
cmVBZGphY2VudFNpZGUyID0gZmFsc2U7CkBAIC0xMjY1LDkgKzEyNTQsNiBAQCB2b2lkIFJlbmRl
ckJveE1vZGVsT2JqZWN0OjpwYWludE9uZUJvcmRlclNpZGUoR3JhcGhpY3NDb250ZXh0KiBncmFw
aGljc0NvbnRleHQsCiAgICAgICAgIAogICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhp
Y3NDb250ZXh0LCBzaWRlUmVjdC54KCksIHNpZGVSZWN0LnkoKSwgc2lkZVJlY3QubWF4WCgpLCBz
aWRlUmVjdC5tYXhZKCksIHNpZGUsIGNvbG9yVG9QYWludCwgZWRnZVRvUmVuZGVyLnN0eWxlLAog
ICAgICAgICAgICAgICAgIG1pdHJlQWRqYWNlbnRTaWRlMSA/IGFkamFjZW50RWRnZTEud2lkdGgg
OiAwLCBtaXRyZUFkamFjZW50U2lkZTIgPyBhZGphY2VudEVkZ2UyLndpZHRoIDogMCwgYW50aWFs
aWFzKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChkaWRDbGlwKQotICAgICAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgfQogfQogCkBAIC0xNDI4LDkgKzE0MTQsMTAgQEAg
dm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXIoR3JhcGhpY3NDb250ZXh0KiBn
cmFwaGljc0NvbnRleHQsIGludCB0eCwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
IChvdXRlckJvcmRlci5pc1JvdW5kZWQoKSkgeworICAgIGJvb2wgY2xpcFRvT3V0ZXJCb3JkZXIg
PSBvdXRlckJvcmRlci5pc1JvdW5kZWQoKTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoKmdyYXBoaWNzQ29udGV4dCwgY2xpcFRvT3V0ZXJCb3JkZXIpOworICAgIGlm
IChjbGlwVG9PdXRlckJvcmRlcikgewogICAgICAgICAvLyBDbGlwIHRvIHRoZSBpbm5lciBhbmQg
b3V0ZXIgcmFkaWkgcmVjdHMuCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOwogICAg
ICAgICBpZiAoYmxlZWRBdm9pZGFuY2UgIT0gQmFja2dyb3VuZEJsZWVkVXNlVHJhbnNwYXJlbmN5
TGF5ZXIpCiAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChv
dXRlckJvcmRlcik7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcE91dFJvdW5kZWRSZWN0
KGlubmVyQm9yZGVyKTsKQEAgLTE0NDAsOSArMTQyNyw2IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBhaW50Qm9yZGVyKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBpbnQg
dHgsCiAgICAgICAgIHBhaW50VHJhbnNsdWNlbnRCb3JkZXJTaWRlcyhncmFwaGljc0NvbnRleHQs
IHN0eWxlLCBvdXRlckJvcmRlciwgaW5uZXJCb3JkZXIsIGVkZ2VzLCBibGVlZEF2b2lkYW5jZSwg
aW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UsIGFudGlhbGlh
cyk7CiAgICAgZWxzZQogICAgICAgICBwYWludEJvcmRlclNpZGVzKGdyYXBoaWNzQ29udGV4dCwg
c3R5bGUsIG91dGVyQm9yZGVyLCBpbm5lckJvcmRlciwgZWRnZXMsIEFsbEJvcmRlckVkZ2VzLCBi
bGVlZEF2b2lkYW5jZSwgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgaW5jbHVkZUxvZ2ljYWxSaWdo
dEVkZ2UsIGFudGlhbGlhcyk7Ci0KLSAgICBpZiAob3V0ZXJCb3JkZXIuaXNSb3VuZGVkKCkpIAot
ICAgICAgICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKIH0KIAogdm9pZCBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6ZHJhd0JveFNpZGVGcm9tUGF0aChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNz
Q29udGV4dCwgY29uc3QgSW50UmVjdCYgYm9yZGVyUmVjdCwgY29uc3QgUGF0aCYgYm9yZGVyUGF0
aCwgY29uc3QgQm9yZGVyRWRnZSBlZGdlc1tdLApAQCAtMTUxOSwzNCArMTUwMywzNCBAQCB2b2lk
IFJlbmRlckJveE1vZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKEdyYXBoaWNzQ29udGV4
dCogZ3JhcGhpY3NDb250ZXh0LAogICAgICAgICBlZGdlc1tCU0xlZnRdLmdldERvdWJsZUJvcmRl
clN0cmlwZVdpZHRocyhvdXRlckJvcmRlckxlZnRXaWR0aCwgaW5uZXJCb3JkZXJMZWZ0V2lkdGgp
OwogCiAgICAgICAgIC8vIERyYXcgaW5uZXIgYm9yZGVyIGxpbmUKLSAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LT5zYXZlKCk7Ci0gICAgICAgIAotICAgICAgICBSb3VuZGVkSW50UmVjdCBpbm5lckNs
aXAgPSBzdHlsZS0+Z2V0Um91bmRlZElubmVyQm9yZGVyRm9yKGJvcmRlclJlY3QsCi0gICAgICAg
ICAgICBpbm5lckJvcmRlclRvcFdpZHRoLCBpbm5lckJvcmRlckJvdHRvbVdpZHRoLCBpbm5lckJv
cmRlckxlZnRXaWR0aCwgaW5uZXJCb3JkZXJSaWdodFdpZHRoLAotICAgICAgICAgICAgaW5jbHVk
ZUxvZ2ljYWxMZWZ0RWRnZSwgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UpOwotICAgICAgICAKLSAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoaW5uZXJDbGlwKTsKLSAg
ICAgICAgZHJhd0JveFNpZGVGcm9tUGF0aChncmFwaGljc0NvbnRleHQsIGJvcmRlclJlY3QsIGJv
cmRlclBhdGgsIGVkZ2VzLCB0aGlja25lc3MsIGRyYXdUaGlja25lc3MsIHNpZGUsIHN0eWxlLCBj
b2xvciwgU09MSUQsIGJsZWVkQXZvaWRhbmNlLCBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBpbmNs
dWRlTG9naWNhbFJpZ2h0RWRnZSk7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgp
OworICAgICAgICB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIGdyYXBo
aWNzU3RhdGVTYXZlcigqZ3JhcGhpY3NDb250ZXh0KTsKKyAgICAgICAgICAgIFJvdW5kZWRJbnRS
ZWN0IGlubmVyQ2xpcCA9IHN0eWxlLT5nZXRSb3VuZGVkSW5uZXJCb3JkZXJGb3IoYm9yZGVyUmVj
dCwKKyAgICAgICAgICAgICAgICBpbm5lckJvcmRlclRvcFdpZHRoLCBpbm5lckJvcmRlckJvdHRv
bVdpZHRoLCBpbm5lckJvcmRlckxlZnRXaWR0aCwgaW5uZXJCb3JkZXJSaWdodFdpZHRoLAorICAg
ICAgICAgICAgICAgIGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UsIGluY2x1ZGVMb2dpY2FsUmlnaHRF
ZGdlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRSb3Vu
ZGVkUmVjdENsaXAoaW5uZXJDbGlwKTsKKyAgICAgICAgICAgIGRyYXdCb3hTaWRlRnJvbVBhdGgo
Z3JhcGhpY3NDb250ZXh0LCBib3JkZXJSZWN0LCBib3JkZXJQYXRoLCBlZGdlcywgdGhpY2tuZXNz
LCBkcmF3VGhpY2tuZXNzLCBzaWRlLCBzdHlsZSwgY29sb3IsIFNPTElELCBibGVlZEF2b2lkYW5j
ZSwgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UpOworICAg
ICAgICB9CiAKICAgICAgICAgLy8gRHJhdyBvdXRlciBib3JkZXIgbGluZQotICAgICAgICBncmFw
aGljc0NvbnRleHQtPnNhdmUoKTsKLQotICAgICAgICBJbnRSZWN0IG91dGVyUmVjdCA9IGJvcmRl
clJlY3Q7Ci0gICAgICAgIGlmIChibGVlZEF2b2lkYW5jZSA9PSBCYWNrZ3JvdW5kQmxlZWRVc2VU
cmFuc3BhcmVuY3lMYXllcikgewotICAgICAgICAgICAgb3V0ZXJSZWN0LmluZmxhdGUoMSk7Ci0g
ICAgICAgICAgICArK291dGVyQm9yZGVyVG9wV2lkdGg7Ci0gICAgICAgICAgICArK291dGVyQm9y
ZGVyQm90dG9tV2lkdGg7Ci0gICAgICAgICAgICArK291dGVyQm9yZGVyTGVmdFdpZHRoOwotICAg
ICAgICAgICAgKytvdXRlckJvcmRlclJpZ2h0V2lkdGg7CisgICAgICAgIHsKKyAgICAgICAgICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgZ3JhcGhpY3NTdGF0ZVNhdmVyKCpncmFwaGljc0Nv
bnRleHQpOworICAgICAgICAgICAgSW50UmVjdCBvdXRlclJlY3QgPSBib3JkZXJSZWN0OworICAg
ICAgICAgICAgaWYgKGJsZWVkQXZvaWRhbmNlID09IEJhY2tncm91bmRCbGVlZFVzZVRyYW5zcGFy
ZW5jeUxheWVyKSB7CisgICAgICAgICAgICAgICAgb3V0ZXJSZWN0LmluZmxhdGUoMSk7CisgICAg
ICAgICAgICAgICAgKytvdXRlckJvcmRlclRvcFdpZHRoOworICAgICAgICAgICAgICAgICsrb3V0
ZXJCb3JkZXJCb3R0b21XaWR0aDsKKyAgICAgICAgICAgICAgICArK291dGVyQm9yZGVyTGVmdFdp
ZHRoOworICAgICAgICAgICAgICAgICsrb3V0ZXJCb3JkZXJSaWdodFdpZHRoOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgUm91bmRlZEludFJlY3Qgb3V0ZXJD
bGlwID0gc3R5bGUtPmdldFJvdW5kZWRJbm5lckJvcmRlckZvcihvdXRlclJlY3QsCisgICAgICAg
ICAgICAgICAgb3V0ZXJCb3JkZXJUb3BXaWR0aCwgb3V0ZXJCb3JkZXJCb3R0b21XaWR0aCwgb3V0
ZXJCb3JkZXJMZWZ0V2lkdGgsIG91dGVyQm9yZGVyUmlnaHRXaWR0aCwKKyAgICAgICAgICAgICAg
ICBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSk7CisgICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQtPmNsaXBPdXRSb3VuZGVkUmVjdChvdXRlckNsaXApOwor
ICAgICAgICAgICAgZHJhd0JveFNpZGVGcm9tUGF0aChncmFwaGljc0NvbnRleHQsIGJvcmRlclJl
Y3QsIGJvcmRlclBhdGgsIGVkZ2VzLCB0aGlja25lc3MsIGRyYXdUaGlja25lc3MsIHNpZGUsIHN0
eWxlLCBjb2xvciwgU09MSUQsIGJsZWVkQXZvaWRhbmNlLCBpbmNsdWRlTG9naWNhbExlZnRFZGdl
LCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSk7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICBSb3VuZGVkSW50UmVjdCBvdXRlckNsaXAgPSBzdHlsZS0+Z2V0Um91bmRlZElubmVyQm9y
ZGVyRm9yKG91dGVyUmVjdCwKLSAgICAgICAgICAgIG91dGVyQm9yZGVyVG9wV2lkdGgsIG91dGVy
Qm9yZGVyQm90dG9tV2lkdGgsIG91dGVyQm9yZGVyTGVmdFdpZHRoLCBvdXRlckJvcmRlclJpZ2h0
V2lkdGgsCi0gICAgICAgICAgICBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBpbmNsdWRlTG9naWNh
bFJpZ2h0RWRnZSk7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcE91dFJvdW5kZWRSZWN0
KG91dGVyQ2xpcCk7Ci0gICAgICAgIGRyYXdCb3hTaWRlRnJvbVBhdGgoZ3JhcGhpY3NDb250ZXh0
LCBib3JkZXJSZWN0LCBib3JkZXJQYXRoLCBlZGdlcywgdGhpY2tuZXNzLCBkcmF3VGhpY2tuZXNz
LCBzaWRlLCBzdHlsZSwgY29sb3IsIFNPTElELCBibGVlZEF2b2lkYW5jZSwgaW5jbHVkZUxvZ2lj
YWxMZWZ0RWRnZSwgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UpOwotICAgICAgICBncmFwaGljc0Nv
bnRleHQtPnJlc3RvcmUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIFJJREdF
OgpAQCAtMTU2Niw4ICsxNTUwLDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6ZHJhd0Jv
eFNpZGVGcm9tUGF0aChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwKICAgICAgICAg
ZHJhd0JveFNpZGVGcm9tUGF0aChncmFwaGljc0NvbnRleHQsIGJvcmRlclJlY3QsIGJvcmRlclBh
dGgsIGVkZ2VzLCB0aGlja25lc3MsIGRyYXdUaGlja25lc3MsIHNpZGUsIHN0eWxlLCBjb2xvciwg
czEsIGJsZWVkQXZvaWRhbmNlLCBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBpbmNsdWRlTG9naWNh
bFJpZ2h0RWRnZSk7CiAKICAgICAgICAgLy8gUGFpbnQgaW5uZXIgb25seQotICAgICAgICBncmFw
aGljc0NvbnRleHQtPnNhdmUoKTsKLQorICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IGdyYXBoaWNzU3RhdGVTYXZlcigqZ3JhcGhpY3NDb250ZXh0KTsKICAgICAgICAgaW50IHRvcFdp
ZHRoID0gZWRnZXNbQlNUb3BdLnVzZWRXaWR0aCgpIC8gMjsKICAgICAgICAgaW50IGJvdHRvbVdp
ZHRoID0gZWRnZXNbQlNCb3R0b21dLnVzZWRXaWR0aCgpIC8gMjsKICAgICAgICAgaW50IGxlZnRX
aWR0aCA9IGVkZ2VzW0JTTGVmdF0udXNlZFdpZHRoKCkgLyAyOwpAQCAtMTU3OSw3ICsxNTYyLDYg
QEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6ZHJhd0JveFNpZGVGcm9tUGF0aChHcmFwaGlj
c0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwKIAogICAgICAgICBncmFwaGljc0NvbnRleHQtPmFk
ZFJvdW5kZWRSZWN0Q2xpcChjbGlwUmVjdCk7CiAgICAgICAgIGRyYXdCb3hTaWRlRnJvbVBhdGgo
Z3JhcGhpY3NDb250ZXh0LCBib3JkZXJSZWN0LCBib3JkZXJQYXRoLCBlZGdlcywgdGhpY2tuZXNz
LCBkcmF3VGhpY2tuZXNzLCBzaWRlLCBzdHlsZSwgY29sb3IsIHMyLCBibGVlZEF2b2lkYW5jZSwg
aW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UpOwotICAgICAg
ICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBjYXNlIElOU0VUOgpAQCAtMTYzMCwxMSArMTYxMiwxMyBAQCB2b2lkIFJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEJvcmRlcihHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgaW50
IHR4LAogCiAKICAgICBSb3VuZGVkSW50UmVjdCBib3JkZXIodHgsIHR5LCB3LCBoKTsKKyAgICAK
KyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmdyYXBoaWNzQ29udGV4
dCwgZmFsc2UpOwogICAgIGlmIChzdHlsZS0+aGFzQm9yZGVyUmFkaXVzKCkpIHsKICAgICAgICAg
Ym9yZGVyLmluY2x1ZGVMb2dpY2FsRWRnZXMoc3R5bGUtPmdldFJvdW5kZWRCb3JkZXJGb3IoYm9y
ZGVyLnJlY3QoKSkucmFkaWkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aG9yaXpvbnRhbCwgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgaW5jbHVkZUxvZ2ljYWxSaWdodEVk
Z2UpOwogICAgICAgICBpZiAoYm9yZGVyLmlzUm91bmRlZCgpKSB7Ci0gICAgICAgICAgICBncmFw
aGljc0NvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgICAgIHN0YXRlU2F2ZXIuc2F2ZVN0YXRlKCk7
CiAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChib3JkZXIp
OwogICAgICAgICB9CiAgICAgfQpAQCAtMTY4MCwxMSArMTY2NCwxMSBAQCB2b2lkIFJlbmRlckJv
eE1vZGVsT2JqZWN0OjpwYWludEJvcmRlcihHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4
dCwgaW50IHR4LAogICAgICAgICAgICAgICAgIGJvb2wgYXBwbHlMZWZ0SW5uZXJDbGlwID0gKHN0
eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSA8IGJvcmRlci5yYWRpaSgpLnRvcExlZnQoKS53aWR0aCgp
KQogICAgICAgICAgICAgICAgICAgICAmJiAoc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkgPCBib3Jk
ZXIucmFkaWkoKS50b3BMZWZ0KCkuaGVpZ2h0KCkpCiAgICAgICAgICAgICAgICAgICAgICYmICh0
b3BTdHlsZSAhPSBET1VCTEUgfHwgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkgPiA2KTsKLSAgICAg
ICAgICAgICAgICBpZiAoYXBwbHlMZWZ0SW5uZXJDbGlwKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhpY3NDb250ZXh0
LCBhcHBseUxlZnRJbm5lckNsaXApOworICAgICAgICAgICAgICAgIGlmIChhcHBseUxlZnRJbm5l
ckNsaXApCiAgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkSW5uZXJSb3Vu
ZGVkUmVjdENsaXAoSW50UmVjdChsZWZ0WCwgbGVmdFksIGJvcmRlci5yYWRpaSgpLnRvcExlZnQo
KS53aWR0aCgpICogMiwgYm9yZGVyLnJhZGlpKCkudG9wTGVmdCgpLmhlaWdodCgpICogMiksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkpOwotICAgICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgICAgIGZpcnN0QW5nbGVTdGFydCA9IDkwOwogICAgICAgICAgICAgICAgIGZpcnN0QW5n
bGVTcGFuID0gdXBwZXJMZWZ0Qm9yZGVyU3R5bGVzTWF0Y2ggPyA5MCA6IDQ1OwpAQCAtMTY5Miw4
ICsxNjc2LDYgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXIoR3JhcGhp
Y3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGludCB0eCwKICAgICAgICAgICAgICAgICAvLyBE
cmF3IHVwcGVyIGxlZnQgYXJjCiAgICAgICAgICAgICAgICAgZHJhd0FyY0ZvckJveFNpZGUoZ3Jh
cGhpY3NDb250ZXh0LCBsZWZ0WCwgbGVmdFksIHRoaWNrbmVzcywgYm9yZGVyLnJhZGlpKCkudG9w
TGVmdCgpLCBmaXJzdEFuZ2xlU3RhcnQsIGZpcnN0QW5nbGVTcGFuLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQlNUb3AsIHRvcENvbG9yLCB0b3BTdHlsZSwgdHJ1ZSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGFwcGx5TGVmdElubmVyQ2xpcCkKLSAgICAgICAgICAgICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlm
IChib3JkZXIucmFkaWkoKS50b3BSaWdodCgpLndpZHRoKCkpIHsKQEAgLTE3MDEsMTEgKzE2ODMs
MTEgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXIoR3JhcGhpY3NDb250
ZXh0KiBncmFwaGljc0NvbnRleHQsIGludCB0eCwKICAgICAgICAgICAgICAgICBib29sIGFwcGx5
UmlnaHRJbm5lckNsaXAgPSAoc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSA8IGJvcmRlci5yYWRp
aSgpLnRvcFJpZ2h0KCkud2lkdGgoKSkKICAgICAgICAgICAgICAgICAgICAgJiYgKHN0eWxlLT5i
b3JkZXJUb3BXaWR0aCgpIDwgYm9yZGVyLnJhZGlpKCkudG9wUmlnaHQoKS5oZWlnaHQoKSkKICAg
ICAgICAgICAgICAgICAgICAgJiYgKHRvcFN0eWxlICE9IERPVUJMRSB8fCBzdHlsZS0+Ym9yZGVy
VG9wV2lkdGgoKSA+IDYpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseVJpZ2h0SW5uZXJDbGlw
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOworCisgICAg
ICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpncmFwaGlj
c0NvbnRleHQsIGFwcGx5UmlnaHRJbm5lckNsaXApOworICAgICAgICAgICAgICAgIGlmIChhcHBs
eVJpZ2h0SW5uZXJDbGlwKQogICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmFk
ZElubmVyUm91bmRlZFJlY3RDbGlwKEludFJlY3QocmlnaHRYLCBsZWZ0WSwgYm9yZGVyLnJhZGlp
KCkudG9wUmlnaHQoKS53aWR0aCgpICogMiwgYm9yZGVyLnJhZGlpKCkudG9wUmlnaHQoKS5oZWln
aHQoKSAqIDIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpKTsKLSAgICAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgICAgICBpZiAodXBwZXJSaWdodEJvcmRlclN0eWxlc01hdGNoKSB7
CiAgICAgICAgICAgICAgICAgICAgIHNlY29uZEFuZ2xlU3RhcnQgPSAwOwpAQCAtMTcxOCw4ICsx
NzAwLDYgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXIoR3JhcGhpY3ND
b250ZXh0KiBncmFwaGljc0NvbnRleHQsIGludCB0eCwKICAgICAgICAgICAgICAgICAvLyBEcmF3
IHVwcGVyIHJpZ2h0IGFyYwogICAgICAgICAgICAgICAgIGRyYXdBcmNGb3JCb3hTaWRlKGdyYXBo
aWNzQ29udGV4dCwgcmlnaHRYLCBsZWZ0WSwgdGhpY2tuZXNzLCBib3JkZXIucmFkaWkoKS50b3BS
aWdodCgpLCBzZWNvbmRBbmdsZVN0YXJ0LCBzZWNvbmRBbmdsZVNwYW4sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBCU1RvcCwgdG9wQ29sb3IsIHRvcFN0eWxlLCBmYWxzZSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGFwcGx5UmlnaHRJbm5lckNsaXApCi0gICAgICAgICAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQpAQCAtMTc1MiwxMSArMTczMiwxMSBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpw
YWludEJvcmRlcihHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgaW50IHR4LAogICAg
ICAgICAgICAgICAgIGJvb2wgYXBwbHlMZWZ0SW5uZXJDbGlwID0gKHN0eWxlLT5ib3JkZXJMZWZ0
V2lkdGgoKSA8IGJvcmRlci5yYWRpaSgpLmJvdHRvbUxlZnQoKS53aWR0aCgpKQogICAgICAgICAg
ICAgICAgICAgICAmJiAoc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkgPCBib3JkZXIucmFkaWko
KS5ib3R0b21MZWZ0KCkuaGVpZ2h0KCkpCiAgICAgICAgICAgICAgICAgICAgICYmIChib3R0b21T
dHlsZSAhPSBET1VCTEUgfHwgc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkgPiA2KTsKLSAgICAg
ICAgICAgICAgICBpZiAoYXBwbHlMZWZ0SW5uZXJDbGlwKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOworCisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpncmFwaGljc0NvbnRleHQsIGFwcGx5TGVmdElubmVy
Q2xpcCk7CisgICAgICAgICAgICAgICAgaWYgKGFwcGx5TGVmdElubmVyQ2xpcCkKICAgICAgICAg
ICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChJbnRS
ZWN0KGxlZnRYLCBsZWZ0WSwgYm9yZGVyLnJhZGlpKCkuYm90dG9tTGVmdCgpLndpZHRoKCkgKiAy
LCBib3JkZXIucmFkaWkoKS5ib3R0b21MZWZ0KCkuaGVpZ2h0KCkgKiAyKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS0+
Ym9yZGVyQm90dG9tV2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAg
ICAgaWYgKGxvd2VyTGVmdEJvcmRlclN0eWxlc01hdGNoKSB7CiAgICAgICAgICAgICAgICAgICAg
IGZpcnN0QW5nbGVTdGFydCA9IDE4MDsKQEAgLTE3NjksOCArMTc0OSw2IEBAIHZvaWQgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250
ZXh0LCBpbnQgdHgsCiAgICAgICAgICAgICAgICAgLy8gRHJhdyBsb3dlciBsZWZ0IGFyYwogICAg
ICAgICAgICAgICAgIGRyYXdBcmNGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgbGVmdFgsIGxl
ZnRZLCB0aGlja25lc3MsIGJvcmRlci5yYWRpaSgpLmJvdHRvbUxlZnQoKSwgZmlyc3RBbmdsZVN0
YXJ0LCBmaXJzdEFuZ2xlU3BhbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJTQm90
dG9tLCBib3R0b21Db2xvciwgYm90dG9tU3R5bGUsIHRydWUpOwotICAgICAgICAgICAgICAgIGlm
IChhcHBseUxlZnRJbm5lckNsaXApCi0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC0+cmVzdG9yZSgpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoYm9yZGVyLnJh
ZGlpKCkuYm90dG9tUmlnaHQoKS53aWR0aCgpKSB7CkBAIC0xNzc5LDExICsxNzU3LDExIEBAIHZv
aWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyKEdyYXBoaWNzQ29udGV4dCogZ3Jh
cGhpY3NDb250ZXh0LCBpbnQgdHgsCiAgICAgICAgICAgICAgICAgYm9vbCBhcHBseVJpZ2h0SW5u
ZXJDbGlwID0gKHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkgPCBib3JkZXIucmFkaWkoKS5ib3R0
b21SaWdodCgpLndpZHRoKCkpCiAgICAgICAgICAgICAgICAgICAgICYmIChzdHlsZS0+Ym9yZGVy
Qm90dG9tV2lkdGgoKSA8IGJvcmRlci5yYWRpaSgpLmJvdHRvbVJpZ2h0KCkuaGVpZ2h0KCkpCiAg
ICAgICAgICAgICAgICAgICAgICYmIChib3R0b21TdHlsZSAhPSBET1VCTEUgfHwgc3R5bGUtPmJv
cmRlckJvdHRvbVdpZHRoKCkgPiA2KTsKLSAgICAgICAgICAgICAgICBpZiAoYXBwbHlSaWdodElu
bmVyQ2xpcCkgewotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsK
KworICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigq
Z3JhcGhpY3NDb250ZXh0LCBhcHBseVJpZ2h0SW5uZXJDbGlwKTsKKyAgICAgICAgICAgICAgICBp
ZiAoYXBwbHlSaWdodElubmVyQ2xpcCkKICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LT5hZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChJbnRSZWN0KHJpZ2h0WCwgcmlnaHRZLCBib3Jk
ZXIucmFkaWkoKS5ib3R0b21SaWdodCgpLndpZHRoKCkgKiAyLCBib3JkZXIucmFkaWkoKS5ib3R0
b21SaWdodCgpLmhlaWdodCgpICogMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkp
OwotICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIHNlY29uZEFuZ2xlU3RhcnQg
PSAyNzA7CiAgICAgICAgICAgICAgICAgc2Vjb25kQW5nbGVTcGFuID0gbG93ZXJSaWdodEJvcmRl
clN0eWxlc01hdGNoID8gOTAgOiA0NTsKQEAgLTE3OTEsOCArMTc2OSw2IEBAIHZvaWQgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250
ZXh0LCBpbnQgdHgsCiAgICAgICAgICAgICAgICAgLy8gRHJhdyBsb3dlciByaWdodCBhcmMKICAg
ICAgICAgICAgICAgICBkcmF3QXJjRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIHJpZ2h0WCwg
cmlnaHRZLCB0aGlja25lc3MsIGJvcmRlci5yYWRpaSgpLmJvdHRvbVJpZ2h0KCksIHNlY29uZEFu
Z2xlU3RhcnQsIHNlY29uZEFuZ2xlU3BhbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEJTQm90dG9tLCBib3R0b21Db2xvciwgYm90dG9tU3R5bGUsIGZhbHNlKTsKLSAgICAgICAgICAg
ICAgICBpZiAoYXBwbHlSaWdodElubmVyQ2xpcCkKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBA
IC0xODI1LDExICsxODAxLDExIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9y
ZGVyKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBpbnQgdHgsCiAgICAgICAgICAg
ICAgICAgYm9vbCBhcHBseVRvcElubmVyQ2xpcCA9IChzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkg
PCBib3JkZXIucmFkaWkoKS50b3BMZWZ0KCkud2lkdGgoKSkKICAgICAgICAgICAgICAgICAgICAg
JiYgKHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpIDwgYm9yZGVyLnJhZGlpKCkudG9wTGVmdCgpLmhl
aWdodCgpKQogICAgICAgICAgICAgICAgICAgICAmJiAobGVmdFN0eWxlICE9IERPVUJMRSB8fCBz
dHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkgPiA2KTsKLSAgICAgICAgICAgICAgICBpZiAoYXBwbHlU
b3BJbm5lckNsaXApIHsKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZl
KCk7CisKKyAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoKmdyYXBoaWNzQ29udGV4dCwgYXBwbHlUb3BJbm5lckNsaXApOworICAgICAgICAgICAgICAg
IGlmIChhcHBseVRvcElubmVyQ2xpcCkKICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LT5hZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChJbnRSZWN0KHRvcFgsIHRvcFksIGJvcmRlci5y
YWRpaSgpLnRvcExlZnQoKS53aWR0aCgpICogMiwgYm9yZGVyLnJhZGlpKCkudG9wTGVmdCgpLmhl
aWdodCgpICogMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpKTsKLSAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICBmaXJzdEFuZ2xlU3RhcnQgPSAxMzU7CiAgICAgICAg
ICAgICAgICAgZmlyc3RBbmdsZVNwYW4gPSA0NTsKQEAgLTE4MzcsOCArMTgxMyw2IEBAIHZvaWQg
UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250ZXh0LCBpbnQgdHgsCiAgICAgICAgICAgICAgICAgLy8gRHJhdyB0b3AgbGVmdCBhcmMK
ICAgICAgICAgICAgICAgICBkcmF3QXJjRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIHRvcFgs
IHRvcFksIHRoaWNrbmVzcywgYm9yZGVyLnJhZGlpKCkudG9wTGVmdCgpLCBmaXJzdEFuZ2xlU3Rh
cnQsIGZpcnN0QW5nbGVTcGFuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlNMZWZ0
LCBsZWZ0Q29sb3IsIGxlZnRTdHlsZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFwcGx5
VG9wSW5uZXJDbGlwKQotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnJlc3Rv
cmUoKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCFsb3dlckxlZnRCb3JkZXJT
dHlsZXNNYXRjaCAmJiBib3JkZXIucmFkaWkoKS5ib3R0b21MZWZ0KCkud2lkdGgoKSkgewpAQCAt
MTg0NiwxMSArMTgyMCwxMSBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJvcmRl
cihHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgaW50IHR4LAogICAgICAgICAgICAg
ICAgIGJvb2wgYXBwbHlCb3R0b21Jbm5lckNsaXAgPSAoc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgp
IDwgYm9yZGVyLnJhZGlpKCkuYm90dG9tTGVmdCgpLndpZHRoKCkpCiAgICAgICAgICAgICAgICAg
ICAgICYmIChzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSA8IGJvcmRlci5yYWRpaSgpLmJvdHRv
bUxlZnQoKS5oZWlnaHQoKSkKICAgICAgICAgICAgICAgICAgICAgJiYgKGxlZnRTdHlsZSAhPSBE
T1VCTEUgfHwgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpID4gNik7Ci0gICAgICAgICAgICAgICAg
aWYgKGFwcGx5Qm90dG9tSW5uZXJDbGlwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC0+c2F2ZSgpOworCisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKCpncmFwaGljc0NvbnRleHQsIGFwcGx5Qm90dG9tSW5uZXJDbGlwKTsK
KyAgICAgICAgICAgICAgICBpZiAoYXBwbHlCb3R0b21Jbm5lckNsaXApCiAgICAgICAgICAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoSW50UmVjdCh0
b3BYLCBib3R0b21ZLCBib3JkZXIucmFkaWkoKS5ib3R0b21MZWZ0KCkud2lkdGgoKSAqIDIsIGJv
cmRlci5yYWRpaSgpLmJvdHRvbUxlZnQoKS5oZWlnaHQoKSAqIDIpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5ib3Jk
ZXJMZWZ0V2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgc2Vj
b25kQW5nbGVTdGFydCA9IDE4MDsKICAgICAgICAgICAgICAgICBzZWNvbmRBbmdsZVNwYW4gPSA0
NTsKQEAgLTE4NTgsOCArMTgzMiw2IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50
Qm9yZGVyKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBpbnQgdHgsCiAgICAgICAg
ICAgICAgICAgLy8gRHJhdyBib3R0b20gbGVmdCBhcmMKICAgICAgICAgICAgICAgICBkcmF3QXJj
Rm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIHRvcFgsIGJvdHRvbVksIHRoaWNrbmVzcywgYm9y
ZGVyLnJhZGlpKCkuYm90dG9tTGVmdCgpLCBzZWNvbmRBbmdsZVN0YXJ0LCBzZWNvbmRBbmdsZVNw
YW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCU0xlZnQsIGxlZnRDb2xvciwgbGVm
dFN0eWxlLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFwcGx5Qm90dG9tSW5uZXJDbGlw
KQotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTE4OTQsMTEgKzE4NjYsMTEgQEAgdm9pZCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXIoR3JhcGhpY3NDb250ZXh0KiBncmFwaGlj
c0NvbnRleHQsIGludCB0eCwKICAgICAgICAgICAgICAgICBib29sIGFwcGx5VG9wSW5uZXJDbGlw
ID0gKHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkgPCBib3JkZXIucmFkaWkoKS50b3BSaWdodCgp
LndpZHRoKCkpCiAgICAgICAgICAgICAgICAgICAgICYmIChzdHlsZS0+Ym9yZGVyVG9wV2lkdGgo
KSA8IGJvcmRlci5yYWRpaSgpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkpCiAgICAgICAgICAgICAgICAg
ICAgICYmIChyaWdodFN0eWxlICE9IERPVUJMRSB8fCBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgp
ID4gNik7Ci0gICAgICAgICAgICAgICAgaWYgKGFwcGx5VG9wSW5uZXJDbGlwKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOworCisgICAgICAgICAgICAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpncmFwaGljc0NvbnRleHQsIGFw
cGx5VG9wSW5uZXJDbGlwKTsKKyAgICAgICAgICAgICAgICBpZiAoYXBwbHlUb3BJbm5lckNsaXAp
CiAgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkSW5uZXJSb3VuZGVkUmVj
dENsaXAoSW50UmVjdCh0b3BYLCB0b3BZLCBib3JkZXIucmFkaWkoKS50b3BSaWdodCgpLndpZHRo
KCkgKiAyLCBib3JkZXIucmFkaWkoKS50b3BSaWdodCgpLmhlaWdodCgpICogMiksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5
bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICAgICAgZmlyc3RBbmdsZVN0YXJ0ID0gMDsKICAgICAgICAgICAgICAgICBmaXJzdEFuZ2xlU3Bh
biA9IDQ1OwpAQCAtMTkwNiw4ICsxODc4LDYgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
cGFpbnRCb3JkZXIoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGludCB0eCwKICAg
ICAgICAgICAgICAgICAvLyBEcmF3IHRvcCByaWdodCBhcmMKICAgICAgICAgICAgICAgICBkcmF3
QXJjRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIHRvcFgsIHRvcFksIHRoaWNrbmVzcywgYm9y
ZGVyLnJhZGlpKCkudG9wUmlnaHQoKSwgZmlyc3RBbmdsZVN0YXJ0LCBmaXJzdEFuZ2xlU3BhbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJTUmlnaHQsIHJpZ2h0Q29sb3IsIHJpZ2h0
U3R5bGUsIHRydWUpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseVRvcElubmVyQ2xpcCkKLSAg
ICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGlmICghbG93ZXJSaWdodEJvcmRlclN0eWxlc01hdGNoICYmIGJv
cmRlci5yYWRpaSgpLmJvdHRvbVJpZ2h0KCkud2lkdGgoKSkgewpAQCAtMTkxNiwxMSArMTg4Niwx
MSBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJvcmRlcihHcmFwaGljc0NvbnRl
eHQqIGdyYXBoaWNzQ29udGV4dCwgaW50IHR4LAogICAgICAgICAgICAgICAgIGJvb2wgYXBwbHlC
b3R0b21Jbm5lckNsaXAgPSAoc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSA8IGJvcmRlci5yYWRp
aSgpLmJvdHRvbVJpZ2h0KCkud2lkdGgoKSkKICAgICAgICAgICAgICAgICAgICAgJiYgKHN0eWxl
LT5ib3JkZXJCb3R0b21XaWR0aCgpIDwgYm9yZGVyLnJhZGlpKCkuYm90dG9tUmlnaHQoKS5oZWln
aHQoKSkKICAgICAgICAgICAgICAgICAgICAgJiYgKHJpZ2h0U3R5bGUgIT0gRE9VQkxFIHx8IHN0
eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkgPiA2KTsKLSAgICAgICAgICAgICAgICBpZiAoYXBwbHlC
b3R0b21Jbm5lckNsaXApIHsKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5z
YXZlKCk7CisKKyAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoKmdyYXBoaWNzQ29udGV4dCwgYXBwbHlCb3R0b21Jbm5lckNsaXApOworICAgICAgICAg
ICAgICAgIGlmIChhcHBseUJvdHRvbUlubmVyQ2xpcCkKICAgICAgICAgICAgICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5hZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChJbnRSZWN0KGJvdHRvbVgsIGJv
dHRvbVksIGJvcmRlci5yYWRpaSgpLmJvdHRvbVJpZ2h0KCkud2lkdGgoKSAqIDIsIGJvcmRlci5y
YWRpaSgpLmJvdHRvbVJpZ2h0KCkuaGVpZ2h0KCkgKiAyKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS0+Ym9yZGVyUmln
aHRXaWR0aCgpKTsKLSAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBzZWNvbmRB
bmdsZVN0YXJ0ID0gMzE1OwogICAgICAgICAgICAgICAgIHNlY29uZEFuZ2xlU3BhbiA9IDQ1OwpA
QCAtMTkyOCwxNCArMTg5OCw5IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9y
ZGVyKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBpbnQgdHgsCiAgICAgICAgICAg
ICAgICAgLy8gRHJhdyBib3R0b20gcmlnaHQgYXJjCiAgICAgICAgICAgICAgICAgZHJhd0FyY0Zv
ckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCBib3R0b21YLCBib3R0b21ZLCB0aGlja25lc3MsIGJv
cmRlci5yYWRpaSgpLmJvdHRvbVJpZ2h0KCksIHNlY29uZEFuZ2xlU3RhcnQsIHNlY29uZEFuZ2xl
U3BhbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJTUmlnaHQsIHJpZ2h0Q29sb3Is
IHJpZ2h0U3R5bGUsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBpZiAoYXBwbHlCb3R0b21Jbm5l
ckNsaXApCi0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotCi0gICAgaWYgKHJlbmRlclJhZGlpKQot
ICAgICAgICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKIH0KICNlbmRpZgogCkBAIC0yMTUy
LDcgKzIxMTcsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50CiAgICAgICAgICAgICBzaGFkb3dS
ZWN0LmluZmxhdGUoc2hhZG93Qmx1ciArIHNoYWRvd1NwcmVhZCk7CiAgICAgICAgICAgICBzaGFk
b3dSZWN0Lm1vdmUoc2hhZG93T2Zmc2V0KTsKIAotICAgICAgICAgICAgY29udGV4dC0+c2F2ZSgp
OworICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250
ZXh0KTsKICAgICAgICAgICAgIGNvbnRleHQtPmNsaXAoc2hhZG93UmVjdCk7CiAKICAgICAgICAg
ICAgIC8vIE1vdmUgdGhlIGZpbGwganVzdCBvdXRzaWRlIHRoZSBjbGlwLCBhZGRpbmcgMSBwaXhl
bCBzZXBhcmF0aW9uIHNvIHRoYXQgdGhlIGZpbGwgZG9lcyBub3QKQEAgLTIxOTksOCArMjE2NCw2
IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgaW50IHR4LCBpbnQKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
Y2xpcE91dChyZWN0VG9DbGlwT3V0KTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5maWxsUmVj
dChmaWxsUmVjdC5yZWN0KCksIENvbG9yOjpibGFjaywgcy0+Y29sb3JTcGFjZSgpKTsKICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgLy8gSW5zZXQgc2hhZG93LgogICAgICAgICAgICAgSW50UmVjdCBo
b2xlUmVjdChib3JkZXIucmVjdCgpKTsKQEAgLTIyMzUsOCArMjE5OCw3IEBAIHZvaWQgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
aW50IHR4LCBpbnQKICAgICAgICAgICAgIEludFJlY3Qgb3V0ZXJSZWN0ID0gYXJlYUNhc3RpbmdT
aGFkb3dJbkhvbGUoYm9yZGVyLnJlY3QoKSwgc2hhZG93Qmx1ciwgc2hhZG93U3ByZWFkLCBzaGFk
b3dPZmZzZXQpOwogICAgICAgICAgICAgUm91bmRlZEludFJlY3Qgcm91bmRlZEhvbGUoaG9sZVJl
Y3QsIGJvcmRlci5yYWRpaSgpKTsKIAotICAgICAgICAgICAgY29udGV4dC0+c2F2ZSgpOwotCisg
ICAgICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQp
OwogICAgICAgICAgICAgaWYgKGhhc0JvcmRlclJhZGl1cykgewogICAgICAgICAgICAgICAgIFBh
dGggcGF0aDsKICAgICAgICAgICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KGJvcmRlcik7CkBA
IC0yMjU1LDggKzIyMTcsNiBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNo
YWRvdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50CiAgICAgICAgICAgICAg
ICAgY29udGV4dC0+c2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29s
b3IsIHMtPmNvbG9yU3BhY2UoKSk7CiAKICAgICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKG91dGVyUmVjdCwgcm91bmRlZEhvbGUsIGZpbGxDb2xvciwgcy0+Y29sb3JT
cGFjZSgpKTsKLQotICAgICAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogICAgICAgICB9CiAg
ICAgfQogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90490</attachid>
            <date>2011-04-20 21:47:12 -0700</date>
            <delta_ts>2011-04-20 22:06:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58807-20110420214710.patch</filename>
            <type>text/plain</type>
            <size>83726</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQ0NjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1ZGU2YjNlYzFkYjdlMmNl
NDI4MzQxM2Y5MzMxZTIzODNhNzFmZWI1Li5mMDZhZWIzODFmZjM5M2U4ZmYxYTBkOTU1MjljYTVi
OTI3ZTNlYjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTIyIEBACiAyMDExLTA0LTIwICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENyZWF0ZSBSSUFBIGNsYXNzIGZvciBHcmFwaGlj
c0NvbnRleHQ6OnNhdmUoKSBhbmQgcmVzdG9yZSgpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODgwNworCisgICAgICAgIFVzZSBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIGluIGEgbG90IG1vcmUgcGxhY2VzLgorCisgICAgICAgICogaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJbnRlcm5hbCk6CisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp3aGVlbEV2
ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW5lcmF0ZWRJbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVy
OjpkcmF3U2hhZG93QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdS
ZWN0U2hhZG93V2l0aG91dFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpk
cmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0Js
dXI6OmRyYXdJbnNldFNoYWRvd1dpdGhUaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93
Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRv
d0JsdXI6OmRyYXdMYXllclBpZWNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW06CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwYWludCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9zaXRlOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VBbHBoYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6YXBwbHkpOgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhclRoZW1lTWFjOjpwYWludCk6CisgICAgICAgICogcGxhdGZvcm0vbWFj
L1RoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRDaGVja2JveCk6CisgICAgICAg
IChXZWJDb3JlOjpwYWludFJhZGlvKToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50U3RlcHBlcik6
CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL0lubGlu
ZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGFpbnRGaWxs
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGFpbnRCb3hEZWNvcmF0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpwYWludE1hc2spOgorICAg
ICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZVRleHRCb3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBh
aW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50Q29t
cG9zaXRpb25CYWNrZ3JvdW5kKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50Q29sdW1uQ29udGVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50U2VsZWN0aW9uKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
cGFpbnRCb3hEZWNvcmF0aW9uc1dpdGhTaXplKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
RW1iZWRkZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmpl
Y3Q6OnBhaW50UmVwbGFjZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWVsZHNldDo6cGFpbnRCb3hEZWNvcmF0aW9u
cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludE9iamVjdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpwYWludFJlc2l6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnBhaW50TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50Q2hpbGRM
YXllckludG9Db2x1bW5zKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpwYWludCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTWVkaWFDb250cm9sczo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
YWJsZUNlbGw6OnBhaW50QmFja2dyb3VuZHNCZWhpbmRDZWxsKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENv
bnRyb2w6OnBhaW50UGxhY2Vob2xkZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1ldGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFByb2dyZXNzQmFyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNsaWRlclRyYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNsaWRlclRodW1iKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0
c0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVNs
aWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlh
Q3VycmVudFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVk
aWFUaW1lUmVtYWluaW5nKToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TEJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJsb2NrOjpwYWludCk6
CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxGcmFjdGlvbjo6cGFpbnQpOgorICAgICAgICAq
IHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJNYXRoTUxSb290OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhN
TFNxdWFyZVJvb3Q6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Nv
bnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OnBhaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHRm9yZWlnbk9iamVjdDo6cGFpbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHSW1hZ2U6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1BhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUGF0aDo6ZmlsbEFuZFN0cm9r
ZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUGF0aDo6cGFpbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4
dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6ZHJhdyk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1RleHQ6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGlu
ZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lRmxvd0JveDo6cGFpbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbkJhY2tncm91bmQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uV2l0aFN0eWxlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUm9vdElubGluZUJveDo6cGFpbnQpOgorICAgICAgICAqIHN2Zy9TVkdGb250LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdUZXh0VXNpbmdTVkdGb250KToKKworMjAxMS0w
NC0yMCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKwogICAgICAgICBS
ZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KIAogICAgICAgICBDcmVhdGUgUklBQSBjbGFzcyBmb3Ig
R3JhcGhpY3NDb250ZXh0OjpzYXZlKCkgYW5kIHJlc3RvcmUoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKaW5kZXgg
YWI2NDI3ZTdhYzljODk0MjlkOTdhN2ViNTA1N2IwM2Q3YjQwMjVkYi4uODE5MTAxNTIxMjIyMmIy
ZTg3Yjc1YjM4ZWY3OTAxYmY5MDIyOWYzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0xOTE3LDEyICsx
OTE3LDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4dEludGVybmFs
KGNvbnN0IFN0cmluZyYgdGV4dCwgZmxvYXQgeCwgZmxvCiAKICAgICAgICAgbWFza0ltYWdlQ29u
dGV4dC0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0aW9uKTsKIAotICAgICAgICBj
LT5zYXZlKCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigq
Yyk7CiAgICAgICAgIGMtPmNsaXBUb0ltYWdlQnVmZmVyKG1hc2tJbWFnZS5nZXQoKSwgbWFza1Jl
Y3QpOwogICAgICAgICBkcmF3U3R5bGUtPmFwcGx5RmlsbENvbG9yKGMpOwogICAgICAgICBjLT5m
aWxsUmVjdChtYXNrUmVjdCk7Ci0gICAgICAgIGMtPnJlc3RvcmUoKTsKLQogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCmlu
ZGV4IDdjYWY4MjBjYmU0MTJiYzljMGJiYTkzMWU5ZThiOGI0ODkxNTA2YzYuLmNhYjBlYWJjYTFi
ZTQzZTkwYTQwYWM0MGRmNmRjMjgwNzE5YjliZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbFZpZXcuY3BwCkBAIC05OTAsMjEgKzk5MCwyMSBAQCB2b2lkIFNjcm9sbFZpZXc6OnBhaW50
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBJbnRS
ZWN0IGRvY3VtZW50RGlydHlSZWN0ID0gcmVjdDsKICAgICBkb2N1bWVudERpcnR5UmVjdC5pbnRl
cnNlY3QoZnJhbWVSZWN0KCkpOwogCi0gICAgY29udGV4dC0+c2F2ZSgpOworICAgIHsKKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKIAotICAg
IGNvbnRleHQtPnRyYW5zbGF0ZSh4KCksIHkoKSk7Ci0gICAgZG9jdW1lbnREaXJ0eVJlY3QubW92
ZSgteCgpLCAteSgpKTsKLQotICAgIGlmICghcGFpbnRzRW50aXJlQ29udGVudHMoKSkgewotICAg
ICAgICBjb250ZXh0LT50cmFuc2xhdGUoLXNjcm9sbFgoKSwgLXNjcm9sbFkoKSk7Ci0gICAgICAg
IGRvY3VtZW50RGlydHlSZWN0Lm1vdmUoc2Nyb2xsWCgpLCBzY3JvbGxZKCkpOworICAgICAgICBj
b250ZXh0LT50cmFuc2xhdGUoeCgpLCB5KCkpOworICAgICAgICBkb2N1bWVudERpcnR5UmVjdC5t
b3ZlKC14KCksIC15KCkpOwogCi0gICAgICAgIGNvbnRleHQtPmNsaXAodmlzaWJsZUNvbnRlbnRS
ZWN0KCkpOwotICAgIH0KKyAgICAgICAgaWYgKCFwYWludHNFbnRpcmVDb250ZW50cygpKSB7Cisg
ICAgICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoLXNjcm9sbFgoKSwgLXNjcm9sbFkoKSk7Cisg
ICAgICAgICAgICBkb2N1bWVudERpcnR5UmVjdC5tb3ZlKHNjcm9sbFgoKSwgc2Nyb2xsWSgpKTsK
IAotICAgIHBhaW50Q29udGVudHMoY29udGV4dCwgZG9jdW1lbnREaXJ0eVJlY3QpOworICAgICAg
ICAgICAgY29udGV4dC0+Y2xpcCh2aXNpYmxlQ29udGVudFJlY3QoKSk7CisgICAgICAgIH0KIAot
ICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICAgICAgcGFpbnRDb250ZW50cyhjb250ZXh0LCBk
b2N1bWVudERpcnR5UmVjdCk7CisgICAgfQogCiAgICAgSW50UmVjdCBob3Jpem9udGFsT3Zlcmhh
bmdSZWN0OwogICAgIEludFJlY3QgdmVydGljYWxPdmVyaGFuZ1JlY3Q7CkBAIC0xMDE1LDE1ICsx
MDE1LDEzIEBAIHZvaWQgU2Nyb2xsVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiByZWN0KQogCiAgICAgLy8gTm93IHBhaW50IHRoZSBzY3JvbGxiYXJz
LgogICAgIGlmICghbV9zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiAobV9ob3Jpem9udGFsU2Nyb2xs
YmFyIHx8IG1fdmVydGljYWxTY3JvbGxiYXIpKSB7Ci0gICAgICAgIGNvbnRleHQtPnNhdmUoKTsK
KyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsK
ICAgICAgICAgSW50UmVjdCBzY3JvbGxWaWV3RGlydHlSZWN0ID0gcmVjdDsKICAgICAgICAgc2Ny
b2xsVmlld0RpcnR5UmVjdC5pbnRlcnNlY3QoZnJhbWVSZWN0KCkpOwogICAgICAgICBjb250ZXh0
LT50cmFuc2xhdGUoeCgpLCB5KCkpOwogICAgICAgICBzY3JvbGxWaWV3RGlydHlSZWN0Lm1vdmUo
LXgoKSwgLXkoKSk7CiAKICAgICAgICAgcGFpbnRTY3JvbGxiYXJzKGNvbnRleHQsIHNjcm9sbFZp
ZXdEaXJ0eVJlY3QpOwotCi0gICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKICAgICB9CiAKICAg
ICAvLyBQYWludCB0aGUgcGFuU2Nyb2xsIEljb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcAppbmRleCBmMmMxNzViOTUzMmY4Mzgz
NzliZmY2NjI3MzlkYWM2ZTVlYTc0NTdiLi4zZjBhNmZhYmY2MWE5YTkzZjEyZmQwYTg1YjEzOTYx
ODY3ODEyNDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
ZW5lcmF0ZWRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R2VuZXJhdGVkSW1hZ2UuY3BwCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogdm9pZCBHZW5lcmF0ZWRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKLSAgICBjb250ZXh0LT5zYXZl
KCk7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsK
ICAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3ApOwogICAgIGNv
bnRleHQtPmNsaXAoZHN0UmVjdCk7CiAgICAgY29udGV4dC0+dHJhbnNsYXRlKGRzdFJlY3QueCgp
LCBkc3RSZWN0LnkoKSk7CkBAIC00NCw3ICs0NCw2IEBAIHZvaWQgR2VuZXJhdGVkSW1hZ2U6OmRy
YXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNv
CiAgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShkc3RSZWN0LndpZHRoKCkgLyBzcmNS
ZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkgLyBzcmNSZWN0LmhlaWdodCgpKSk7CiAgICAg
Y29udGV4dC0+dHJhbnNsYXRlKC1zcmNSZWN0LngoKSwgLXNyY1JlY3QueSgpKTsKICAgICBjb250
ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX3NpemUpLCAqbV9nZW5lcmF0
b3IuZ2V0KCkpOwotICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKIH0KIAogdm9pZCBHZW5lcmF0ZWRJ
bWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKaW5kZXgg
OTJhMDQwNDlhM2ZkYTkyNGQ4MjU4Y2NjMzc4OTk1NjQ1NGFiZWYzYy4uMjE4ZWZlZjAxMjJkZTc1
OWM2OTRhOWNjM2JmMjlmZWFlZDU3ZmM0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAgLTQwOSw3ICs0MDksNyBAQCB2b2lkIFNoYWRv
d0JsdXI6OmRyYXdTaGFkb3dCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQp
CiAgICAgaWYgKCFtX2xheWVySW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGdyYXBoaWNz
Q29udGV4dC0+c2F2ZSgpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZl
cigqZ3JhcGhpY3NDb250ZXh0KTsKIAogICAgIEludFNpemUgYnVmZmVyU2l6ZSA9IG1fbGF5ZXJJ
bWFnZS0+c2l6ZSgpOwogICAgIGlmIChidWZmZXJTaXplICE9IG1fbGF5ZXJTaXplKSB7CkBAIC00
MjIsOCArNDIyLDYgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3U2hhZG93QnVmZmVyKEdyYXBoaWNz
Q29udGV4dCogZ3JhcGhpY3NDb250ZXh0KQogCiAgICAgZ3JhcGhpY3NDb250ZXh0LT5jbGVhclNo
YWRvdygpOwogICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KG1fbGF5ZXJP
cmlnaW4sIG1fc291cmNlUmVjdC5zaXplKCkpKTsKLSAgICAKLSAgICBncmFwaGljc0NvbnRleHQt
PnJlc3RvcmUoKTsKIH0KIAogc3RhdGljIHZvaWQgY29tcHV0ZVNsaWNlU2l6ZXNGcm9tUmFkaWko
Y29uc3QgSW50U2l6ZSYgdHdpY2VSYWRpdXMsIGNvbnN0IFJvdW5kZWRJbnRSZWN0OjpSYWRpaSYg
cmFkaWksIGludCYgbGVmdFNsaWNlLCBpbnQmIHJpZ2h0U2xpY2UsIGludCYgdG9wU2xpY2UsIGlu
dCYgYm90dG9tU2xpY2UpCkBAIC01MTQsNyArNTEyLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3
UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQs
IGMKICAgICBidWZmZXJSZWxhdGl2ZVNoYWRvd2VkUmVjdC5tb3ZlKG1fbGF5ZXJDb250ZXh0VHJh
bnNsYXRpb24pOwogICAgIGlmICghU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkubWF0Y2hlc0xhc3RT
aGFkb3cobV9ibHVyUmFkaXVzLCBDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IsIGJ1
ZmZlclJlbGF0aXZlU2hhZG93ZWRSZWN0LCByYWRpaSkpIHsKICAgICAgICAgR3JhcGhpY3NDb250
ZXh0KiBzaGFkb3dDb250ZXh0ID0gbV9sYXllckltYWdlLT5jb250ZXh0KCk7Ci0gICAgICAgIHNo
YWRvd0NvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKCpzaGFkb3dDb250ZXh0KTsKIAogICAgICAgICAvLyBBZGQgYSBwaXhlbCB0byBh
dm9pZCBsYXRlciBlZGdlIGFsaWFzaW5nIHdoZW4gcm90YXRlZC4KICAgICAgICAgc2hhZG93Q29u
dGV4dC0+Y2xlYXJSZWN0KEZsb2F0UmVjdCgwLCAwLCBtX2xheWVyU2l6ZS53aWR0aCgpICsgMSwg
bV9sYXllclNpemUuaGVpZ2h0KCkgKyAxKSk7CkBAIC01MjksOCArNTI3LDYgQEAgdm9pZCBTaGFk
b3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFw
aGljc0NvbnRleHQsIGMKICAgICAgICAgfQogCiAgICAgICAgIGJsdXJTaGFkb3dCdWZmZXIoZXhw
YW5kZWRJbnRTaXplKG1fbGF5ZXJTaXplKSk7Ci0KLSAgICAgICAgc2hhZG93Q29udGV4dC0+cmVz
dG9yZSgpOwogICAgICAgICAKICAgICAgICAgU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkuc2V0TGFz
dFNoYWRvd1ZhbHVlcyhtX2JsdXJSYWRpdXMsIENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmlj
ZVJHQiwgYnVmZmVyUmVsYXRpdmVTaGFkb3dlZFJlY3QsIHJhZGlpKTsKICAgICB9CkBAIC01NTQs
NyArNTUwLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5n
KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LAogCiAgICAgaWYgKCFTY3JhdGNoQnVm
ZmVyOjpzaGFyZWQoKS5tYXRjaGVzTGFzdEluc2V0U2hhZG93KG1fYmx1clJhZGl1cywgQ29sb3I6
OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBidWZmZXJSZWxhdGl2ZVJlY3QsIGJ1ZmZlclJl
bGF0aXZlSG9sZVJlY3QsIGhvbGVSYWRpaSkpIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBz
aGFkb3dDb250ZXh0ID0gbV9sYXllckltYWdlLT5jb250ZXh0KCk7Ci0gICAgICAgIHNoYWRvd0Nv
bnRleHQtPnNhdmUoKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKCpzaGFkb3dDb250ZXh0KTsKIAogICAgICAgICAvLyBBZGQgYSBwaXhlbCB0byBhdm9pZCBs
YXRlciBlZGdlIGFsaWFzaW5nIHdoZW4gcm90YXRlZC4KICAgICAgICAgc2hhZG93Q29udGV4dC0+
Y2xlYXJSZWN0KEZsb2F0UmVjdCgwLCAwLCBtX2xheWVyU2l6ZS53aWR0aCgpICsgMSwgbV9sYXll
clNpemUuaGVpZ2h0KCkgKyAxKSk7CkBAIC01NzMsOCArNTY5LDYgQEAgdm9pZCBTaGFkb3dCbHVy
OjpkcmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3ND
b250ZXh0LAogCiAgICAgICAgIGJsdXJTaGFkb3dCdWZmZXIoZXhwYW5kZWRJbnRTaXplKG1fbGF5
ZXJTaXplKSk7CiAKLSAgICAgICAgc2hhZG93Q29udGV4dC0+cmVzdG9yZSgpOwotCiAgICAgICAg
IFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLnNldExhc3RJbnNldFNoYWRvd1ZhbHVlcyhtX2JsdXJS
YWRpdXMsIENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQiwgYnVmZmVyUmVsYXRpdmVS
ZWN0LCBidWZmZXJSZWxhdGl2ZUhvbGVSZWN0LCBob2xlUmFkaWkpOwogICAgIH0KICAgICAKQEAg
LTYxNyw3ICs2MTEsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhvdXRU
aWxpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsCiAKIHZvaWQgU2hhZG93Qmx1
cjo6ZHJhd0luc2V0U2hhZG93V2l0aFRpbGluZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJlY3QmIGhvbGVSZWN0LCBj
b25zdCBSb3VuZGVkSW50UmVjdDo6UmFkaWkmIHJhZGlpLCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0
ZVNpemUpCiB7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7CisgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpncmFwaGljc0NvbnRleHQpOwogICAgIGdyYXBoaWNz
Q29udGV4dC0+Y2xlYXJTaGFkb3coKTsKIAogICAgIGNvbnN0IEludFNpemUgcm91bmRlZFJhZGl1
cyA9IGV4cGFuZGVkSW50U2l6ZShtX2JsdXJSYWRpdXMpOwpAQCAtNjM0LDcgKzYyOCw3IEBAIHZv
aWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aFRpbGluZyhHcmFwaGljc0NvbnRleHQq
IGdyYXBoaWNzQ29udGV4dCwgY29uCiAgICAgaWYgKCFTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5t
YXRjaGVzTGFzdEluc2V0U2hhZG93KG1fYmx1clJhZGl1cywgbV9jb2xvciwgbV9jb2xvclNwYWNl
LCB0ZW1wbGF0ZUJvdW5kcywgdGVtcGxhdGVIb2xlLCByYWRpaSkpIHsKICAgICAgICAgLy8gRHJh
dyBzaGFkb3cgaW50byBhIG5ldyBJbWFnZUJ1ZmZlci4KICAgICAgICAgR3JhcGhpY3NDb250ZXh0
KiBzaGFkb3dDb250ZXh0ID0gbV9sYXllckltYWdlLT5jb250ZXh0KCk7Ci0gICAgICAgIHNoYWRv
d0NvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzaGFk
b3dTdGF0ZVNhdmVyKCpzaGFkb3dDb250ZXh0KTsKICAgICAgICAgc2hhZG93Q29udGV4dC0+Y2xl
YXJSZWN0KHRlbXBsYXRlQm91bmRzKTsKICAgICAgICAgc2hhZG93Q29udGV4dC0+c2V0RmlsbFJ1
bGUoUlVMRV9FVkVOT0REKTsKICAgICAgICAgc2hhZG93Q29udGV4dC0+c2V0RmlsbENvbG9yKENv
bG9yOjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7CkBAIC02NDksNyArNjQzLDYgQEAgdm9p
ZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5nKEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0LCBjb24KICAgICAgICAgc2hhZG93Q29udGV4dC0+ZmlsbFBhdGgocGF0
aCk7CiAKICAgICAgICAgYmx1ckFuZENvbG9yU2hhZG93QnVmZmVyKHRlbXBsYXRlU2l6ZSk7Ci0g
ICAgICAgIHNoYWRvd0NvbnRleHQtPnJlc3RvcmUoKTsKICAgICAKICAgICAgICAgU2NyYXRjaEJ1
ZmZlcjo6c2hhcmVkKCkuc2V0TGFzdEluc2V0U2hhZG93VmFsdWVzKG1fYmx1clJhZGl1cywgbV9j
b2xvciwgbV9jb2xvclNwYWNlLCB0ZW1wbGF0ZUJvdW5kcywgdGVtcGxhdGVIb2xlLCByYWRpaSk7
CiAgICAgfQpAQCAtNjY4LDIzICs2NjEsMjIgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRT
aGFkb3dXaXRoVGlsaW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb24KICAg
ICBleHRlcmlvclBhdGguYWRkUmVjdChib3VuZGluZ1JlY3QpOwogICAgIGV4dGVyaW9yUGF0aC5h
ZGRSZWN0KGRlc3RIb2xlQm91bmRzKTsKIAotICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOwot
ICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0RmlsbFJ1bGUoUlVMRV9FVkVOT0REKTsKLSAgICBncmFw
aGljc0NvbnRleHQtPnNldEZpbGxDb2xvcihtX2NvbG9yLCBtX2NvbG9yU3BhY2UpOwotICAgIGdy
YXBoaWNzQ29udGV4dC0+ZmlsbFBhdGgoZXh0ZXJpb3JQYXRoKTsKLSAgICBncmFwaGljc0NvbnRl
eHQtPnJlc3RvcmUoKTsKKyAgICB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
ZmlsbFN0YXRlU2F2ZXIoKmdyYXBoaWNzQ29udGV4dCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4
dC0+c2V0RmlsbFJ1bGUoUlVMRV9FVkVOT0REKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5z
ZXRGaWxsQ29sb3IobV9jb2xvciwgbV9jb2xvclNwYWNlKTsKKyAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LT5maWxsUGF0aChleHRlcmlvclBhdGgpOworICAgIH0KICAgICAKICAgICBkcmF3TGF5ZXJQ
aWVjZXMoZ3JhcGhpY3NDb250ZXh0LCBkZXN0SG9sZUJvdW5kcywgcmFkaWksIHJvdW5kZWRSYWRp
dXMsIHRlbXBsYXRlU2l6ZSwgSW5uZXJTaGFkb3cpOwogCi0gICAgZ3JhcGhpY3NDb250ZXh0LT5y
ZXN0b3JlKCk7Ci0KICAgICBtX2xheWVySW1hZ2UgPSAwOwogICAgIFNjcmF0Y2hCdWZmZXI6OnNo
YXJlZCgpLnNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7CiB9CiAKIHZvaWQgU2hhZG93Qmx1
cjo6ZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNoYWRvd2VkUmVjdCwgY29uc3QgUm91bmRlZEludFJlY3Q6
OlJhZGlpJiByYWRpaSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplKQogewotICAgIGdyYXBo
aWNzQ29udGV4dC0+c2F2ZSgpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcigqZ3JhcGhpY3NDb250ZXh0KTsKICAgICBncmFwaGljc0NvbnRleHQtPmNsZWFyU2hhZG93
KCk7CiAKICAgICBjb25zdCBJbnRTaXplIHJvdW5kZWRSYWRpdXMgPSBleHBhbmRlZEludFNpemUo
bV9ibHVyUmFkaXVzKTsKQEAgLTY5OSw3ICs2OTEsOCBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdS
ZWN0U2hhZG93V2l0aFRpbGluZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29u
cwogICAgIGlmICghU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkubWF0Y2hlc0xhc3RTaGFkb3cobV9i
bHVyUmFkaXVzLCBtX2NvbG9yLCBtX2NvbG9yU3BhY2UsIHRlbXBsYXRlU2hhZG93LCByYWRpaSkp
IHsKICAgICAgICAgLy8gRHJhdyBzaGFkb3cgaW50byB0aGUgSW1hZ2VCdWZmZXIuCiAgICAgICAg
IEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IG1fbGF5ZXJJbWFnZS0+Y29udGV4dCgp
OwotICAgICAgICBzaGFkb3dDb250ZXh0LT5zYXZlKCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc2hhZG93U3RhdGVTYXZlcigqc2hhZG93Q29udGV4dCk7CisKICAgICAgICAg
c2hhZG93Q29udGV4dC0+Y2xlYXJSZWN0KEZsb2F0UmVjdCgwLCAwLCB0ZW1wbGF0ZVNpemUud2lk
dGgoKSwgdGVtcGxhdGVTaXplLmhlaWdodCgpKSk7CiAgICAgICAgIHNoYWRvd0NvbnRleHQtPnNl
dEZpbGxDb2xvcihDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgICAgICAK
QEAgLTcxMiw3ICs3MDUsNiBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aFRp
bGluZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29ucwogICAgICAgICB9CiAK
ICAgICAgICAgYmx1ckFuZENvbG9yU2hhZG93QnVmZmVyKHRlbXBsYXRlU2l6ZSk7Ci0gICAgICAg
IHNoYWRvd0NvbnRleHQtPnJlc3RvcmUoKTsKIAogICAgICAgICBTY3JhdGNoQnVmZmVyOjpzaGFy
ZWQoKS5zZXRMYXN0U2hhZG93VmFsdWVzKG1fYmx1clJhZGl1cywgbV9jb2xvciwgbV9jb2xvclNw
YWNlLCB0ZW1wbGF0ZVNoYWRvdywgcmFkaWkpOwogICAgIH0KQEAgLTcyNCw4ICs3MTYsNiBAQCB2
b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyhHcmFwaGljc0NvbnRleHQq
IGdyYXBoaWNzQ29udGV4dCwgY29ucwogCiAgICAgZHJhd0xheWVyUGllY2VzKGdyYXBoaWNzQ29u
dGV4dCwgc2hhZG93Qm91bmRzLCByYWRpaSwgcm91bmRlZFJhZGl1cywgdGVtcGxhdGVTaXplLCBP
dXRlclNoYWRvdyk7CiAKLSAgICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKLQogICAgIG1f
bGF5ZXJJbWFnZSA9IDA7CiAgICAgU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkuc2NoZWR1bGVTY3Jh
dGNoQnVmZmVyUHVyZ2UoKTsKIH0KQEAgLTc0NiwxMiArNzM2LDkgQEAgdm9pZCBTaGFkb3dCbHVy
OjpkcmF3TGF5ZXJQaWVjZXMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0
IEZsb2F0UmUKICAgICBpZiAoZGlyZWN0aW9uID09IE91dGVyU2hhZG93KSB7CiAgICAgICAgIEZs
b2F0UmVjdCBzaGFkb3dJbnRlcmlvcihzaGFkb3dCb3VuZHMueCgpICsgbGVmdFNsaWNlLCBzaGFk
b3dCb3VuZHMueSgpICsgdG9wU2xpY2UsIGNlbnRlcldpZHRoLCBjZW50ZXJIZWlnaHQpOwogICAg
ICAgICBpZiAoIXNoYWRvd0ludGVyaW9yLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhpY3NDb250ZXh0KTsKICAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+c2V0RmlsbENvbG9yKG1fY29sb3IsIG1fY29sb3JTcGFjZSk7CiAg
ICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmZpbGxSZWN0KHNoYWRvd0ludGVyaW9yKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7CiAgICAg
ICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KaW5kZXggYzRlZmI5Zjg3ZDBiNjM5MmNhOWI0ZjEw
YzYwNjU4OWI3ZTJjOTM4Ny4uZTVmYTQ4ZDRhYjBkZmFlMDE1MmUwMDM2MDc4MjU3YzRmMDc2YWEx
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakMubW0KQEAgLTU2NSwxMyArNTY1LDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBJCiAKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBjcmVhdGVJbWFnZUZv
clRpbWVJblJlY3QoY3VycmVudFRpbWUoKSwgcmVjdCk7CiAgICAgaWYgKGltYWdlKSB7Ci0gICAg
ICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKCpjb250ZXh0KTsKICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKHJlY3QueCgp
LCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpOwogICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9h
dFNpemUoMS4wZiwgLTEuMGYpKTsKICAgICAgICAgY29udGV4dC0+c2V0SW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uTG93KTsKICAgICAgICAgSW50UmVjdCBwYWludFJlY3Qo
SW50UG9pbnQoMCwgMCksIEludFNpemUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7CiAg
ICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgQ0dS
ZWN0TWFrZSgwLCAwLCBwYWludFJlY3Qud2lkdGgoKSwgcGFpbnRSZWN0LmhlaWdodCgpKSwgaW1h
Z2UuZ2V0KCkpOwotICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAgIGltYWdlID0g
MDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKaW5kZXggYTdkNDY1ZmE3Y2QzMzVkNGM5YzlkY2Fi
M2YzNDVhYTFiMWMxMjdlZi4uMjhiMDQ0NmQxMjcyNzFiMWMwM2EzYWNlYTU2N2ZiNzRkMjhlYWE1
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9j
dW1lbnRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UERGRG9jdW1lbnRJbWFnZS5jcHAKQEAgLTE1OCwyOSArMTU4LDI5IEBAIHZvaWQgUERGRG9jdW1l
bnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0UmVjdCwKICAgICBpZiAoIW1fZG9jdW1lbnQgfHwgbV9jdXJyZW50UGFnZSA9PSAtMSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgY29udGV4dC0+c2F2ZSgpOworICAgIHsKKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKIAotICAgIGNvbnRl
eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCk7CisgICAgICAgIGNvbnRleHQtPnNldENvbXBv
c2l0ZU9wZXJhdGlvbihvcCk7CiAKLSAgICBmbG9hdCBoU2NhbGUgPSBkc3RSZWN0LndpZHRoKCkg
LyBzcmNSZWN0LndpZHRoKCk7Ci0gICAgZmxvYXQgdlNjYWxlID0gZHN0UmVjdC5oZWlnaHQoKSAv
IHNyY1JlY3QuaGVpZ2h0KCk7CisgICAgICAgIGZsb2F0IGhTY2FsZSA9IGRzdFJlY3Qud2lkdGgo
KSAvIHNyY1JlY3Qud2lkdGgoKTsKKyAgICAgICAgZmxvYXQgdlNjYWxlID0gZHN0UmVjdC5oZWln
aHQoKSAvIHNyY1JlY3QuaGVpZ2h0KCk7CiAKLSAgICAvLyBTY2FsZSBhbmQgdHJhbnNsYXRlIHNv
IHRoZSBkb2N1bWVudCBpcyByZW5kZXJlZCBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbiwKLSAgICAv
LyBpbmNsdWRpbmcgYWNjb3VudGluZyBmb3IgdGhlIGZhY3QgdGhhdCBhIEdyYXBoaWNzQ29udGV4
dCBpcyBhbHdheXMgZmxpcHBlZAotICAgIC8vIGFuZCBkb2luZyBhcHByb3ByaWF0ZSBmbGlwcGlu
Zy4KLSAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCks
IGRzdFJlY3QueCgpIC0gc3JjUmVjdC54KCkgKiBoU2NhbGUsIGRzdFJlY3QueSgpIC0gc3JjUmVj
dC55KCkgKiB2U2NhbGUpOwotICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLCBoU2NhbGUsIHZTY2FsZSk7Ci0gICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCksIDEsIC0xKTsKLSAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0o
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIDAsIC1zcmNSZWN0LmhlaWdodCgpKTsKLSAgICBD
R0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBDR1JlY3RJbnRl
Z3JhbChzcmNSZWN0KSk7CisgICAgICAgIC8vIFNjYWxlIGFuZCB0cmFuc2xhdGUgc28gdGhlIGRv
Y3VtZW50IGlzIHJlbmRlcmVkIGluIHRoZSBjb3JyZWN0IGxvY2F0aW9uLAorICAgICAgICAvLyBp
bmNsdWRpbmcgYWNjb3VudGluZyBmb3IgdGhlIGZhY3QgdGhhdCBhIEdyYXBoaWNzQ29udGV4dCBp
cyBhbHdheXMgZmxpcHBlZAorICAgICAgICAvLyBhbmQgZG9pbmcgYXBwcm9wcmlhdGUgZmxpcHBp
bmcuCisgICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKSwgZHN0UmVjdC54KCkgLSBzcmNSZWN0LngoKSAqIGhTY2FsZSwgZHN0UmVjdC55KCkgLSBz
cmNSZWN0LnkoKSAqIHZTY2FsZSk7CisgICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpLCBoU2NhbGUsIHZTY2FsZSk7CisgICAgICAgIENHQ29udGV4dFNj
YWxlQ1RNKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCAxLCAtMSk7CisgICAgICAgIENHQ29u
dGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgMCwgLXNyY1JlY3Qu
aGVpZ2h0KCkpOworICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLCBDR1JlY3RJbnRlZ3JhbChzcmNSZWN0KSk7CiAKLSAgICAvLyBSb3RhdGUgdHJh
bnNsYXRlIGltYWdlIGludG8gcG9zaXRpb24gYWNjb3JkaW5nIHRvIGRvYyBwcm9wZXJ0aWVzLgot
ICAgIGFkanVzdENUTShjb250ZXh0KTsKKyAgICAgICAgLy8gUm90YXRlIHRyYW5zbGF0ZSBpbWFn
ZSBpbnRvIHBvc2l0aW9uIGFjY29yZGluZyB0byBkb2MgcHJvcGVydGllcy4KKyAgICAgICAgYWRq
dXN0Q1RNKGNvbnRleHQpOwogCi0gICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLCAtbV9tZWRpYUJveC54KCksIC1tX21lZGlhQm94LnkoKSk7Ci0gICAg
Q0dDb250ZXh0RHJhd1BERlBhZ2UoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIENHUERGRG9j
dW1lbnRHZXRQYWdlKG1fZG9jdW1lbnQsIG1fY3VycmVudFBhZ2UgKyAxKSk7Ci0KLSAgICBjb250
ZXh0LT5yZXN0b3JlKCk7CisgICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKSwgLW1fbWVkaWFCb3gueCgpLCAtbV9tZWRpYUJveC55KCkpOworICAg
ICAgICBDR0NvbnRleHREcmF3UERGUGFnZShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgQ0dQ
REZEb2N1bWVudEdldFBhZ2UobV9kb2N1bWVudCwgbV9jdXJyZW50UGFnZSArIDEpKTsKKyAgICB9
CiAKICAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQogICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRp
ZERyYXcodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IGVlYWQwMDA4ZTIwZTZiODljOWVlMmVm
MTcxOTQ2OWE4YWE0MDZlZjMuLmQ3MzQ5OGVkZjcwOTNlYzhmODIyZjQxYTAxYjFjZWJhNDhlZDY5
OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC0yMzMsMTIgKzIzMywxMiBAQCB2b2lkIEZFQ29tcG9z
aXRlOjphcHBseSgpCiAgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbjIt
PmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKICAgICAgICAgZmlsdGVyQ29udGV4
dC0+ZHJhd0ltYWdlQnVmZmVyKGluLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VS
R0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjoKLSAgICAg
ICAgZmlsdGVyQ29udGV4dC0+c2F2ZSgpOworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1Jf
SU46IHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpmaWx0
ZXJDb250ZXh0KTsKICAgICAgICAgZmlsdGVyQ29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIoaW4y
LT5hc0ltYWdlQnVmZmVyKCksIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKSk7CiAgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihp
bi0+YXNJbWFnZUJ1ZmZlcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRl
eHQtPnJlc3RvcmUoKTsKICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgRkVDT01QT1NJ
VEVfT1BFUkFUT1JfT1VUOgogICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIo
aW4tPmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogICAgICAgICBmaWx0ZXJDb250
ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4yLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZp
Y2VSR0IsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KSwgc3JjUmVjdCwgQ29tcG9zaXRlRGVzdGluYXRpb25PdXQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAppbmRl
eCA0NWQ3NGY1MGYxMzc0Y2M4N2JiZGJlN2NjMDU4ZTg1ZjdlZWJkNzE4Li43N2UyMTE1MGIxMDI2
NmM3NmYxZjI0NWZiZjE1ZjVkZGJmNWY2MGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcApAQCAtNjUsMTAg
KzY1LDkgQEAgdm9pZCBTb3VyY2VBbHBoYTo6YXBwbHkoKQogCiAgICAgRmxvYXRSZWN0IGltYWdl
UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKICAgICBHcmFw
aGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotICAg
IGZpbHRlckNvbnRleHQtPnNhdmUoKTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoKmZpbHRlckNvbnRleHQpOwogICAgIGZpbHRlckNvbnRleHQtPmNsaXBUb0ltYWdl
QnVmZmVyKGZpbHRlci0+c291cmNlSW1hZ2UoKSwgaW1hZ2VSZWN0KTsKICAgICBmaWx0ZXJDb250
ZXh0LT5maWxsUmVjdChpbWFnZVJlY3QsIENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmljZVJH
Qik7Ci0gICAgZmlsdGVyQ29udGV4dC0+cmVzdG9yZSgpOwogfQogCiB2b2lkIFNvdXJjZUFscGhh
OjpkdW1wKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxi
YXJUaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVt
ZU1hYy5tbQppbmRleCA1NTA0ZjVjN2E4ZTJjMGEyOTE2NmIyNjU0MTJjNTE1NTBmOWYxZWI3Li45
MzJhNmYwOTgxNWMwNmIxY2YyNDNiZGNjN2Q1OWIzNmVmYzdiOTFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCkBAIC00NTAsNyArNDUw
LDcgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZU1hYzo6cGFpbnQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIs
IEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY28KICAgICBTY3JvbGxBbmltYXRvck1hYyogc2Ny
b2xsQW5pbWF0b3IgPSBzdGF0aWNfY2FzdDxTY3JvbGxBbmltYXRvck1hYyo+KHNjcm9sbGJhci0+
c2Nyb2xsYWJsZUFyZWEoKS0+c2Nyb2xsQW5pbWF0b3IoKSk7CiAgICAgc2Nyb2xsQW5pbWF0b3It
PnNldElzRHJhd2luZ0ludG9MYXllcihjb250ZXh0LT5pc0NBTGF5ZXJDb250ZXh0KCkpOwogCi0g
ICAgY29udGV4dC0+c2F2ZSgpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcigqY29udGV4dCk7CiAgICAgY29udGV4dC0+Y2xpcChkYW1hZ2VSZWN0KTsKICAgICBjb250
ZXh0LT50cmFuc2xhdGUoc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS54KCksIHNjcm9sbGJhci0+ZnJh
bWVSZWN0KCkueSgpKTsKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250
ZXh0KGNvbnRleHQpOwpAQCAtNDYxLDggKzQ2MSw2IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVNYWM6
OnBhaW50KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7CiAK
ICAgICBzY3JvbGxBbmltYXRvci0+c2V0SXNEcmF3aW5nSW50b0xheWVyKGZhbHNlKTsKLQotICAg
IGNvbnRleHQtPnJlc3RvcmUoKTsKICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0KaW5kZXggOTE4YmMwN2M3OGJiMjFhNzllM2Vm
ODRlNGFkZDk2MzJjNzNiODRkYi4uYjE0NmNkMzRiODZhZjE3NzY2NWQyNzg2ODg5OTI4MTZkYjc1
NDgxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQpAQCAtMjYwLDcg
KzI2MCw3IEBAIHN0YXRpYyB2b2lkIHBhaW50Q2hlY2tib3goQ29udHJvbFN0YXRlcyBzdGF0ZXMs
IEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QKICAgICBOU0J1dHRvbkNlbGwgKmNoZWNr
Ym94Q2VsbCA9IGNoZWNrYm94KHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3Rvcik7CiAgICAg
TG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChjb250ZXh0KTsKIAotICAg
IGNvbnRleHQtPnNhdmUoKTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoKmNvbnRleHQpOwogCiAgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IFtjaGVja2Jv
eENlbGwgY29udHJvbFNpemVdOwogICAgIEludFNpemUgem9vbWVkU2l6ZSA9IGNoZWNrYm94U2l6
ZXMoKVtjb250cm9sU2l6ZV07CkBAIC0yNzgsOCArMjc4LDYgQEAgc3RhdGljIHZvaWQgcGFpbnRD
aGVja2JveChDb250cm9sU3RhdGVzIHN0YXRlcywgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdAogICAgIAogICAgIFtjaGVja2JveENlbGwgZHJhd1dpdGhGcmFtZTpOU1JlY3QoaW5mbGF0
ZWRSZWN0KSBpblZpZXc6VGhlbWVNYWM6OmVuc3VyZWRWaWV3KHNjcm9sbFZpZXcpXTsKICAgICBb
Y2hlY2tib3hDZWxsIHNldENvbnRyb2xWaWV3Om5pbF07Ci0KLSAgICBjb250ZXh0LT5yZXN0b3Jl
KCk7CiAgICAgCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQpAQCAtMzM4LDcgKzMz
Niw3IEBAIHN0YXRpYyB2b2lkIHBhaW50UmFkaW8oQ29udHJvbFN0YXRlcyBzdGF0ZXMsIEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50CiAgICAgTlNCdXR0b25DZWxsICpyYWRpb0Nl
bGwgPSByYWRpbyhzdGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IpOwogICAgIExvY2FsQ3Vy
cmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQoY29udGV4dCk7CiAKLSAgICBjb250ZXh0
LT5zYXZlKCk7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250
ZXh0KTsKIAogICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBbcmFkaW9DZWxsIGNvbnRy
b2xTaXplXTsKICAgICBJbnRTaXplIHpvb21lZFNpemUgPSByYWRpb1NpemVzKClbY29udHJvbFNp
emVdOwpAQCAtMzU4LDggKzM1Niw2IEBAIHN0YXRpYyB2b2lkIHBhaW50UmFkaW8oQ29udHJvbFN0
YXRlcyBzdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50CiAgICAgW3Jh
ZGlvQ2VsbCBkcmF3V2l0aEZyYW1lOk5TUmVjdChpbmZsYXRlZFJlY3QpIGluVmlldzpUaGVtZU1h
Yzo6ZW5zdXJlZFZpZXcoc2Nyb2xsVmlldyldOwogICAgIFtyYWRpb0NlbGwgc2V0Q29udHJvbFZp
ZXc6bmlsXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0KLSAgICBjb250ZXh0LT5y
ZXN0b3JlKCk7CiB9CiAKIC8vIEJ1dHRvbnMKQEAgLTUzMiw3ICs1MjgsNyBAQCBzdGF0aWMgdm9p
ZCBwYWludFN0ZXBwZXIoQ29udHJvbFN0YXRlcyBzdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgSQogICAgICAgICBkcmF3SW5mby5raW5kID0ga1RoZW1lSW5jRGVjQnV0dG9u
OwogCiAgICAgSW50UmVjdCByZWN0KHpvb21lZFJlY3QpOwotICAgIGNvbnRleHQtPnNhdmUoKTsK
KyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOwogICAg
IGlmICh6b29tRmFjdG9yICE9IDEuMGYpIHsKICAgICAgICAgcmVjdC5zZXRXaWR0aChyZWN0Lndp
ZHRoKCkgLyB6b29tRmFjdG9yKTsKICAgICAgICAgcmVjdC5zZXRIZWlnaHQocmVjdC5oZWlnaHQo
KSAvIHpvb21GYWN0b3IpOwpAQCAtNTQ5LDcgKzU0NSw2IEBAIHN0YXRpYyB2b2lkIHBhaW50U3Rl
cHBlcihDb250cm9sU3RhdGVzIHN0YXRlcywgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJCiAgICAgaWYgKGJvdW5kcy5vcmlnaW4ueSAhPSBiYWNrZ3JvdW5kQm91bmRzLm9yaWdpbi55
KQogICAgICAgICBib3VuZHMub3JpZ2luLnkgKz0gYm91bmRzLm9yaWdpbi55IC0gYmFja2dyb3Vu
ZEJvdW5kcy5vcmlnaW4ueTsKICAgICBISVRoZW1lRHJhd0J1dHRvbigmYm91bmRzLCAmZHJhd0lu
Zm8sIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBrSElUaGVtZU9yaWVudGF0aW9uTm9ybWFs
LCAwKTsKLSAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKIC8vIFRoaXMgd2lsbCBlbnN1cmUg
dGhhdCB3ZSBhbHdheXMgcmV0dXJuIGEgdmFsaWQgTlNWaWV3LCBldmVuIGlmIFNjcm9sbFZpZXcg
ZG9lc24ndCBoYXZlIGFuIGFzc29jaWF0ZWQgZG9jdW1lbnQgTlNWaWV3LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKaW5kZXggMTY0MWVlNWY3OGIxZGZiYjVlZjJjZTgw
Y2E5ZmJmYzFkYTBlYzA3Mi4uNTA2YTAzNmMwMTkzMTljN2U3YWI4MDk2MGQxMWUxNmI0MTc2ZTQ2
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCkBAIC05MCwxMyAr
OTAsMTIgQEAgdm9pZCBFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBpbnQgdHgsIGludCB0eSwgUmVuZGUKICAgICBpZiAodGV4dENvbG9yID09IGMp
CiAgICAgICAgIGMgPSBDb2xvcigweGZmIC0gYy5yZWQoKSwgMHhmZiAtIGMuZ3JlZW4oKSwgMHhm
ZiAtIGMuYmx1ZSgpKTsKIAotICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOwogICAgIGludCB5ID0gcm9vdCgpLT5z
ZWxlY3Rpb25Ub3AoKTsKICAgICBpbnQgaCA9IHJvb3QoKS0+c2VsZWN0aW9uSGVpZ2h0KCk7CiAg
ICAgY29udGV4dC0+Y2xpcChJbnRSZWN0KG1feCArIHR4LCB5ICsgdHksIG1fbG9naWNhbFdpZHRo
LCBoKSk7CiAgICAgY29udGV4dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9udCwgVGV4dFJ1biht
X3N0ci5jaGFyYWN0ZXJzKCksIG1fc3RyLmxlbmd0aCgpLCBmYWxzZSwgMCwgMCwgVGV4dFJ1bjo6
QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiwgZmFsc2UsIHN0eWxlLT52aXN1YWxseU9yZGVyZWQoKSks
CiAgICAgICAgIEludFBvaW50KG1feCArIHR4LCBtX3kgKyB0eSArIHkpLCBoLCBjLCBzdHlsZS0+
Y29sb3JTcGFjZSgpKTsKLSAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKIGJvb2wgRWxsaXBz
aXNCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIGludCBsaW5lVG9w
LCBpbnQgbGluZUJvdHRvbSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVGbG93Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94
LmNwcAppbmRleCAwOTAwY2U0OWU2YzI4YjMzNmNlNzFjMTE0NDRmMzRmMTNlMTc4Y2U0Li5iZWNj
YzllN2JjMzE1NmZlMWU5NmE4NDliZTQ3Njk0Y2ViMTkwM2VlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCkBAIC0xMDU2LDEwICsxMDU2LDEwIEBAIHZvaWQg
SW5saW5lRmxvd0JveDo6cGFpbnRGaWxsTGF5ZXIoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IENvbG9yJiBjLCBjCiAgICAgICAgIGludCBzdHJpcFkgPSB0eSAtIChpc0hvcml6b250
YWwoKSA/IDAgOiBsb2dpY2FsT2Zmc2V0T25MaW5lKTsKICAgICAgICAgaW50IHN0cmlwV2lkdGgg
PSBpc0hvcml6b250YWwoKSA/IHRvdGFsTG9naWNhbFdpZHRoIDogd2lkdGgoKTsKICAgICAgICAg
aW50IHN0cmlwSGVpZ2h0ID0gaXNIb3Jpem9udGFsKCkgPyBoZWlnaHQoKSA6IHRvdGFsTG9naWNh
bFdpZHRoOwotICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworCisgICAgICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwog
ICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcChJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwg
aGVpZ2h0KCkpKTsKICAgICAgICAgYm94TW9kZWxPYmplY3QoKS0+cGFpbnRGaWxsTGF5ZXJFeHRl
bmRlZChwYWludEluZm8sIGMsIGZpbGxMYXllciwgc3RyaXBYLCBzdHJpcFksIHN0cmlwV2lkdGgs
IHN0cmlwSGVpZ2h0LCBCYWNrZ3JvdW5kQmxlZWROb25lLCB0aGlzLCB3LCBoLCBvcCk7Ci0gICAg
ICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgfQogfQogCkBAIC0xMTQ3LDEw
ICsxMTQ3LDEwIEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWlu
dEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiAgICAgICAgICAgICAgICAgaW50IHN0
cmlwWSA9IHR5IC0gKGlzSG9yaXpvbnRhbCgpID8gMCA6IGxvZ2ljYWxPZmZzZXRPbkxpbmUpOwog
ICAgICAgICAgICAgICAgIGludCBzdHJpcFdpZHRoID0gaXNIb3Jpem9udGFsKCkgPyB0b3RhbExv
Z2ljYWxXaWR0aCA6IHc7CiAgICAgICAgICAgICAgICAgaW50IHN0cmlwSGVpZ2h0ID0gaXNIb3Jp
em9udGFsKCkgPyBoIDogdG90YWxMb2dpY2FsV2lkdGg7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC0+c2F2ZSgpOworCisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKCpjb250ZXh0KTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5jbGlwKEludFJl
Y3QodHgsIHR5LCB3LCBoKSk7CiAgICAgICAgICAgICAgICAgYm94TW9kZWxPYmplY3QoKS0+cGFp
bnRCb3JkZXIoY29udGV4dCwgc3RyaXBYLCBzdHJpcFksIHN0cmlwV2lkdGgsIHN0cmlwSGVpZ2h0
LCByZW5kZXJlcigpLT5zdHlsZSgpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZXN0b3Jl
KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjI3LDEwICsxMjI3LDEw
IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnRNYXNrKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBp
bnQgdHgsIGludCB0eSkKICAgICAgICAgaW50IHN0cmlwWSA9IHR5IC0gKGlzSG9yaXpvbnRhbCgp
ID8gMCA6IGxvZ2ljYWxPZmZzZXRPbkxpbmUpOwogICAgICAgICBpbnQgc3RyaXBXaWR0aCA9IGlz
SG9yaXpvbnRhbCgpID8gdG90YWxMb2dpY2FsV2lkdGggOiB3OwogICAgICAgICBpbnQgc3RyaXBI
ZWlnaHQgPSBpc0hvcml6b250YWwoKSA/IGggOiB0b3RhbExvZ2ljYWxXaWR0aDsKLSAgICAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKKworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKICAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPmNsaXAoSW50UmVjdCh0eCwgdHksIHcsIGgpKTsKICAgICAgICAgYm94TW9kZWxP
YmplY3QoKS0+cGFpbnROaW5lUGllY2VJbWFnZShwYWludEluZm8uY29udGV4dCwgc3RyaXBYLCBz
dHJpcFksIHN0cmlwV2lkdGgsIHN0cmlwSGVpZ2h0LCByZW5kZXJlcigpLT5zdHlsZSgpLCBtYXNr
TmluZVBpZWNlSW1hZ2UsIGNvbXBvc2l0ZU9wKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PnJlc3RvcmUoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKHB1c2hUcmFuc3BhcmVuY3lMYXllcikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCA1ODE1Yjhi
OTBlOTc4ODg5MjkwNGVkZTI2ZTI0NWFkMGU5YWY5YmYxLi5lOTlkMjE2ZTI1YzRiMjQyMTIzZWNl
MmRkMDllNWE1MjJhMmQ1MmViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guY3BwCkBAIC02NzIsOCArNjcyLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHksIGludCAvKmxpbmVUb3AqLywKICAg
ICBpZiAoIXBhaW50U2VsZWN0ZWRUZXh0T25seSkgewogICAgICAgICAvLyBGb3Igc3Ryb2tlZCBw
YWludGluZywgd2UgaGF2ZSB0byBjaGFuZ2UgdGhlIHRleHQgZHJhd2luZyBtb2RlLiAgSXQncyBw
cm9iYWJseSBkYW5nZXJvdXMgdG8gbGVhdmUgdGhhdCBtdXRhdGVkIGFzIGEgc2lkZQogICAgICAg
ICAvLyBlZmZlY3QsIHNvIG9ubHkgd2hlbiB3ZSBrbm93IHdlJ3JlIHN0cm9raW5nLCBkbyBhIHNh
dmUvcmVzdG9yZS4KLSAgICAgICAgaWYgKHRleHRTdHJva2VXaWR0aCA+IDApCi0gICAgICAgICAg
ICBjb250ZXh0LT5zYXZlKCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcigqY29udGV4dCwgdGV4dFN0cm9rZVdpZHRoID4gMCk7CiAKICAgICAgICAgdXBkYXRl
R3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIHRleHRGaWxsQ29sb3IsIHRleHRTdHJva2VDb2xvciwg
dGV4dFN0cm9rZVdpZHRoLCBzdHlsZVRvVXNlLT5jb2xvclNwYWNlKCkpOwogICAgICAgICBpZiAo
IXBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSB8fCBlUG9zIDw9IHNQb3MpIHsKQEAgLTcwMCwx
NSArNjk5LDExIEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGludCB0eCwgaW50IHR5LCBpbnQgLypsaW5lVG9wKi8sCiAgICAgICAgICAgICBpZiAoY29t
YmluZWRUZXh0KQogICAgICAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShyb3RhdGlvbihi
b3hSZWN0LCBDb3VudGVyY2xvY2t3aXNlKSk7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAodGV4
dFN0cm9rZVdpZHRoID4gMCkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKICAgICB9
CiAKICAgICBpZiAoKHBhaW50U2VsZWN0ZWRUZXh0T25seSB8fCBwYWludFNlbGVjdGVkVGV4dFNl
cGFyYXRlbHkpICYmIHNQb3MgPCBlUG9zKSB7CiAgICAgICAgIC8vIHBhaW50IG9ubHkgdGhlIHRl
eHQgdGhhdCBpcyBzZWxlY3RlZAotICAgICAgICBpZiAoc2VsZWN0aW9uU3Ryb2tlV2lkdGggPiAw
KQotICAgICAgICAgICAgY29udGV4dC0+c2F2ZSgpOworICAgICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQsIHNlbGVjdGlvblN0cm9rZVdpZHRoID4gMCk7
CiAKICAgICAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIHNlbGVjdGlvbkZpbGxD
b2xvciwgc2VsZWN0aW9uU3Ryb2tlQ29sb3IsIHNlbGVjdGlvblN0cm9rZVdpZHRoLCBzdHlsZVRv
VXNlLT5jb2xvclNwYWNlKCkpOwogICAgICAgICBwYWludFRleHRXaXRoU2hhZG93cyhjb250ZXh0
LCBmb250LCB0ZXh0UnVuLCBudWxsQXRvbSwgMCwgc1BvcywgZVBvcywgbGVuZ3RoLCB0ZXh0T3Jp
Z2luLCBib3hSZWN0LCBzZWxlY3Rpb25TaGFkb3csIHNlbGVjdGlvblN0cm9rZVdpZHRoID4gMCwg
aXNIb3Jpem9udGFsKCkpOwpAQCAtNzI2LDggKzcyMSw2IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6
cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5LCBpbnQgLypsaW5lVG9w
Ki8sCiAgICAgICAgICAgICBpZiAoY29tYmluZWRUZXh0KQogICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmNvbmNhdENUTShyb3RhdGlvbihib3hSZWN0LCBDb3VudGVyY2xvY2t3aXNlKSk7CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKHNlbGVjdGlvblN0cm9rZVdpZHRoID4gMCkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlc3RvcmUoKTsKICAgICB9CiAKICAgICAvLyBQYWludCBkZWNvcmF0aW9ucwpA
QCAtODA2LDcgKzc5OSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBiCiAgICAgaWYgKHRleHRD
b2xvciA9PSBjKQogICAgICAgICBjID0gQ29sb3IoMHhmZiAtIGMucmVkKCksIDB4ZmYgLSBjLmdy
ZWVuKCksIDB4ZmYgLSBjLmJsdWUoKSk7CiAKLSAgICBjb250ZXh0LT5zYXZlKCk7CisgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKICAgICB1cGRhdGVH
cmFwaGljc0NvbnRleHQoY29udGV4dCwgYywgYywgMCwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7ICAv
LyBEb24ndCBkcmF3IHRleHQgYXQgYWxsIQogICAgIAogICAgIC8vIElmIHRoZSB0ZXh0IGlzIHRy
dW5jYXRlZCwgbGV0IHRoZSB0aGluZyBiZWluZyBwYWludGVkIGluIHRoZSB0cnVuY2F0aW9uCkBA
IC04MjcsNyArODIwLDYgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGIKICAgICBjb250ZXh0LT5k
cmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBUZXh0UnVuKGNoYXJhY3RlcnMsIGxlbmd0aCwgdGV4
dFJlbmRlcmVyKCktPmFsbG93VGFicygpLCB0ZXh0UG9zKCksIG1fZXhwYW5zaW9uLCBleHBhbnNp
b25CZWhhdmlvcigpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpLCBtX2Rpck92ZXJyaWRlIHx8IHN0eWxlLT52aXN1YWxseU9yZGVy
ZWQoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxPcmlnaW4sIHNl
bEhlaWdodCwgYywgc3R5bGUtPmNvbG9yU3BhY2UoKSwgc1BvcywgZVBvcyk7Ci0gICAgY29udGV4
dC0+cmVzdG9yZSgpOwogfQogCiB2b2lkIElubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25C
YWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94
T3JpZ2luLCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIGludCBzdGFydFBv
cywgaW50IGVuZFBvcykKQEAgLTgzOSw3ICs4MzEsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBh
aW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
RgogICAgIGlmIChzUG9zID49IGVQb3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnRleHQt
PnNhdmUoKTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRl
eHQpOwogCiAgICAgQ29sb3IgYyA9IENvbG9yKDIyNSwgMjIxLCA4NSk7CiAgICAgCkBAIC04NTEs
NyArODQzLDYgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3Vu
ZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEYKICAgICBjb250ZXh0LT5kcmF3SGln
aGxpZ2h0Rm9yVGV4dChmb250LCBUZXh0UnVuKHRleHRSZW5kZXJlcigpLT50ZXh0KCktPmNoYXJh
Y3RlcnMoKSArIG1fc3RhcnQsIG1fbGVuLCB0ZXh0UmVuZGVyZXIoKS0+YWxsb3dUYWJzKCksIHRl
eHRQb3MoKSwgbV9leHBhbnNpb24sIGV4cGFuc2lvbkJlaGF2aW9yKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSwgbV9kaXJPdmVy
cmlkZSB8fCBzdHlsZS0+dmlzdWFsbHlPcmRlcmVkKCkpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvY2FsT3JpZ2luLCBzZWxIZWlnaHQsIGMsIHN0eWxlLT5jb2xvclNwYWNl
KCksIHNQb3MsIGVQb3MpOwotICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKIH0KIAogI2lmIFBMQVRG
T1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDAy
Yzk2MWQxN2E0YTNmZGQ3ZWZiYzBkNDk3YzhiNDNhMTRlMzg2YmYuLjgxMWM1M2E3ZDEwYWFhNWI3
MGE4OGVhNDZjZjU1ZTc0N2FhMTQ5NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcApAQCAtMjMyOCw3ICsyMzI4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRD
b2x1bW5Db250ZW50cyhQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHksIGJvb2wK
ICAgICAgICAgaW5mby5yZWN0LmludGVyc2VjdChjb2xSZWN0KTsKICAgICAgICAgCiAgICAgICAg
IGlmICghaW5mby5yZWN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgY29udGV4dC0+c2F2ZSgp
OworICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250
ZXh0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gRWFjaCBzdHJpcCBwdXNoZXMgYSBj
bGlwLCBzaW5jZSBjb2x1bW4gYm94ZXMgYXJlIHNwZWNpZmllZCBhcyBiZWluZwogICAgICAgICAg
ICAgLy8gbGlrZSBvdmVyZmxvdzpoaWRkZW4uCkBAIC0yMzQxLDggKzIzNDEsNiBAQCB2b2lkIFJl
bmRlckJsb2NrOjpwYWludENvbHVtbkNvbnRlbnRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQg
dHgsIGludCB0eSwgYm9vbAogICAgICAgICAgICAgICAgIHBhaW50RmxvYXRzKGluZm8sIGZpbmFs
WCwgZmluYWxZLCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbiB8fCBwYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVRleHRDbGlwKTsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICBwYWludENvbnRlbnRzKGluZm8sIGZpbmFsWCwgZmluYWxZKTsKLQotICAg
ICAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogICAgICAgICB9CiAKICAgICAgICAgaW50IGJs
b2NrRGVsdGEgPSAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNvbFJlY3QuaGVpZ2h0KCkg
OiBjb2xSZWN0LndpZHRoKCkpOwpAQCAtMjczMCw3ICsyNzI4LDggQEAgdm9pZCBSZW5kZXJCbG9j
azo6cGFpbnRTZWxlY3Rpb24oUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQog
ICAgICAgICBpbnQgbGFzdFRvcCA9IDA7CiAgICAgICAgIGludCBsYXN0TGVmdCA9IGxvZ2ljYWxM
ZWZ0U2VsZWN0aW9uT2Zmc2V0KHRoaXMsIGxhc3RUb3ApOwogICAgICAgICBpbnQgbGFzdFJpZ2h0
ID0gbG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHRoaXMsIGxhc3RUb3ApOwotICAgICAgICBw
YWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKKwogICAgICAgICBJbnRSZWN0IGdh
cFJlY3RzQm91bmRzID0gc2VsZWN0aW9uR2Fwcyh0aGlzLCBJbnRQb2ludCh0eCwgdHkpLCBJbnRT
aXplKCksIGxhc3RUb3AsIGxhc3RMZWZ0LCBsYXN0UmlnaHQsICZwYWludEluZm8pOwogICAgICAg
ICBpZiAoIWdhcFJlY3RzQm91bmRzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYgKFJlbmRl
ckxheWVyKiBsYXllciA9IGVuY2xvc2luZ0xheWVyKCkpIHsKQEAgLTI3NDQsNyArMjc0Myw2IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50U2VsZWN0aW9uKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBp
bnQgdHgsIGludCB0eSkKICAgICAgICAgICAgICAgICBsYXllci0+YWRkQmxvY2tTZWxlY3Rpb25H
YXBzQm91bmRzKGdhcFJlY3RzQm91bmRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAg
ICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCAwZWM3YzQyYjQxYTFjZmYwZGQ4YzhiMGVj
N2I3NmViYTIzNWRjZDI4Li41ODM3MDM1M2M4YTkwNGQxY2I4YzViYTA2ZDEwMzE4MzJlYTg1ZGIz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtODQ3LDEyICs4NDcs
MTQgQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnNXaXRoU2l6ZShQYWludElu
Zm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkKICAgICBwYWludEJveFNoYWRvdyhwYWludElu
Zm8uY29udGV4dCwgdHgsIHR5LCB3aWR0aCwgaGVpZ2h0LCBzdHlsZSgpLCBOb3JtYWwpOwogCiAg
ICAgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlIGJsZWVkQXZvaWRhbmNlID0gZGV0ZXJtaW5lQmFj
a2dyb3VuZEJsZWVkQXZvaWRhbmNlKHBhaW50SW5mby5jb250ZXh0KTsKKworICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQsIGZhbHNlKTsK
ICAgICBpZiAoYmxlZWRBdm9pZGFuY2UgPT0gQmFja2dyb3VuZEJsZWVkVXNlVHJhbnNwYXJlbmN5
TGF5ZXIpIHsKICAgICAgICAgLy8gVG8gYXZvaWQgdGhlIGJhY2tncm91bmQgY29sb3IgYmxlZWRp
bmcgb3V0IGJlaGluZCB0aGUgYm9yZGVyLCB3ZSdsbCByZW5kZXIgYmFja2dyb3VuZCBhbmQgYm9y
ZGVyCiAgICAgICAgIC8vIGludG8gYSB0cmFuc3BhcmVuY3kgbGF5ZXIsIGFuZCB0aGVuIGNsaXAg
dGhhdCBpbiBvbmUgZ28gKHdoaWNoIHJlcXVpcmVzIHNldHRpbmcgdXAgdGhlIGNsaXAgYmVmb3Jl
CiAgICAgICAgIC8vIGJlZ2lubmluZyB0aGUgbGF5ZXIpLgogICAgICAgICBSb3VuZGVkSW50UmVj
dCBib3JkZXIgPSBzdHlsZSgpLT5nZXRSb3VuZGVkQm9yZGVyRm9yKEludFJlY3QodHgsIHR5LCB3
aWR0aCwgaGVpZ2h0KSk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CisgICAg
ICAgIHN0YXRlU2F2ZXIuc2F2ZVN0YXRlKCk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5h
ZGRSb3VuZGVkUmVjdENsaXAoYm9yZGVyKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIoMSk7CiAgICAgfQpAQCAtODc3LDEwICs4NzksOCBAQCB2b2lk
IFJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9uc1dpdGhTaXplKFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBpbnQgdHgsIGludCB0eQogICAgIGlmICgoIXN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSB8
fCAoIXRoZW1lUGFpbnRlZCAmJiB0aGVtZSgpLT5wYWludEJvcmRlck9ubHkodGhpcywgcGFpbnRJ
bmZvLCBJbnRSZWN0KHR4LCB0eSwgd2lkdGgsIGhlaWdodCkpKSkgJiYgc3R5bGUoKS0+aGFzQm9y
ZGVyKCkpCiAgICAgICAgIHBhaW50Qm9yZGVyKHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksIHdp
ZHRoLCBoZWlnaHQsIHN0eWxlKCksIGJsZWVkQXZvaWRhbmNlKTsKIAotICAgIGlmIChibGVlZEF2
b2lkYW5jZSA9PSBCYWNrZ3JvdW5kQmxlZWRVc2VUcmFuc3BhcmVuY3lMYXllcikgeworICAgIGlm
IChibGVlZEF2b2lkYW5jZSA9PSBCYWNrZ3JvdW5kQmxlZWRVc2VUcmFuc3BhcmVuY3lMYXllcikK
ICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAg
ICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgfQogfQogCiB2b2lkIFJlbmRl
ckJveDo6cGFpbnRNYXNrKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCmlu
ZGV4IDM1NjFmZTA4Y2RjYTRkMjM0NTllNzBlMjJkMzQ4Njg3YmY0MTI0NTUuLjNjOWE2OTc5MDA4
M2NkY2VjZjRjODkyN2ZkNWY2M2UzYjhjNzMzYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcApAQCAtMTY2LDcgKzE2Niw3IEBAIHZv
aWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGludCB0eCwgaW50IHR5KQogICAgIGlmICghZ2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnko
dHgsIHR5LCBjb250ZW50UmVjdCwgcGF0aCwgcmVwbGFjZW1lbnRUZXh0UmVjdCwgZm9udCwgcnVu
LCB0ZXh0V2lkdGgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgY29udGV4dC0+c2F2ZSgp
OworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CiAg
ICAgY29udGV4dC0+Y2xpcChjb250ZW50UmVjdCk7CiAgICAgY29udGV4dC0+c2V0QWxwaGEobV9t
aXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkID8gcmVwbGFjZW1lbnRUZXh0UHJlc3NlZFJv
dW5kZWRSZWN0T3BhY2l0eSA6IHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0T3BhY2l0eSk7CiAg
ICAgY29udGV4dC0+c2V0RmlsbENvbG9yKG1fbWlzc2luZ1BsdWdpbkluZGljYXRvcklzUHJlc3Nl
ZCA/IHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UHJlc3NlZENvbG9yKCkgOiBDb2xvcjo6d2hp
dGUsIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CkBAIC0xNzgsNyArMTc4LDYgQEAgdm9pZCBSZW5k
ZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50SW5mbywgaW50
IHR4LCBpbnQgdHkpCiAgICAgY29udGV4dC0+c2V0QWxwaGEobV9taXNzaW5nUGx1Z2luSW5kaWNh
dG9ySXNQcmVzc2VkID8gcmVwbGFjZW1lbnRUZXh0UHJlc3NlZFRleHRPcGFjaXR5IDogcmVwbGFj
ZW1lbnRUZXh0VGV4dE9wYWNpdHkpOwogICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6
YmxhY2ssIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgY29udGV4dC0+ZHJhd0JpZGlUZXh0
KGZvbnQsIHJ1biwgRmxvYXRQb2ludChsYWJlbFgsIGxhYmVsWSkpOwotICAgIGNvbnRleHQtPnJl
c3RvcmUoKTsKIH0KIAogYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6Z2V0UmVwbGFjZW1lbnRU
ZXh0R2VvbWV0cnkoaW50IHR4LCBpbnQgdHksIEZsb2F0UmVjdCYgY29udGVudFJlY3QsIFBhdGgm
IHBhdGgsIEZsb2F0UmVjdCYgcmVwbGFjZW1lbnRUZXh0UmVjdCwgRm9udCYgZm9udCwgVGV4dFJ1
biYgcnVuLCBmbG9hdCYgdGV4dFdpZHRoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGaWVsZHNldC5jcHAKaW5kZXggZTEzZGEzZmJmYzA3YjFiOWYyNTVkMTA1MTQxZWMxZDBmYjg3
NGMzYi4uYjNiODRhZTUyMGE4NmE5Y2U4YTY5YzMzMTMzMmUwODczNTgyYzdkZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCkBAIC0xNjIsNyArMTYyLDcg
QEAgdm9pZCBSZW5kZXJGaWVsZHNldDo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mIHBh
aW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiAgICAgCiAgICAgLy8gQ3JlYXRlIGEgY2xpcHBpbmcg
cmVnaW9uIGFyb3VuZCB0aGUgbGVnZW5kIGFuZCBwYWludCB0aGUgYm9yZGVyIGFzIG5vcm1hbAog
ICAgIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7
Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKCpncmFwaGljc0NvbnRleHQpOwogCiAgICAgLy8gRklYTUU6IFdlIG5l
ZWQgdG8gd29yayB3aXRoICJybCIgYW5kICJidCIgYmxvY2sgZmxvdyBkaXJlY3Rpb25zLiAgSW4g
dGhvc2UKICAgICAvLyBjYXNlcyB0aGUgbGVnZW5kIGlzIGVtYmVkZGVkIGluIHRoZSByaWdodCBh
bmQgYm90dG9tIGJvcmRlcnMgcmVzcGVjdGl2ZWx5LgpAQCAtMTc4LDggKzE3OCw2IEBAIHZvaWQg
UmVuZGVyRmllbGRzZXQ6OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiBwYWludEluZm8s
IGludCB0eCwgaW50IHR5KQogICAgIH0KIAogICAgIHBhaW50Qm9yZGVyKHBhaW50SW5mby5jb250
ZXh0LCB0eCwgdHksIHcsIGgsIHN0eWxlKCkpOwotCi0gICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0
b3JlKCk7CiB9CiAKIHZvaWQgUmVuZGVyRmllbGRzZXQ6OnBhaW50TWFzayhQYWludEluZm8mIHBh
aW50SW5mbywgaW50IHR4LCBpbnQgdHkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAppbmRleCA4MDU2NjYyNGNkNzBjNmMzODBh
ODU2OWMzNTBkZDQxOTA0N2FjZDI2Li40MDNjMjJjM2FhYjU1OTM3ODU0ZWY4YTllNDU5NGUyMmFj
NmQ4YjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVw
bG9hZENvbnRyb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxl
VXBsb2FkQ29udHJvbC5jcHAKQEAgLTIwOSwxMiArMjA5LDEzIEBAIHZvaWQgUmVuZGVyRmlsZVVw
bG9hZENvbnRyb2w6OnBhaW50T2JqZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGlu
dCB0eSkKICAgICBBU1NFUlQobV9maWxlQ2hvb3Nlcik7CiAgICAgCiAgICAgLy8gUHVzaCBhIGNs
aXAuCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8u
Y29udGV4dCwgZmFsc2UpOwogICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZv
cmVncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dy
b3VuZHMpIHsKICAgICAgICAgSW50UmVjdCBjbGlwUmVjdCh0eCArIGJvcmRlckxlZnQoKSwgdHkg
KyBib3JkZXJUb3AoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpIC0gYm9yZGVy
TGVmdCgpIC0gYm9yZGVyUmlnaHQoKSwgaGVpZ2h0KCkgLSBib3JkZXJCb3R0b20oKSAtIGJvcmRl
clRvcCgpICsgYnV0dG9uU2hhZG93SGVpZ2h0KTsKICAgICAgICAgaWYgKGNsaXBSZWN0LmlzRW1w
dHkoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNh
dmUoKTsKKyAgICAgICAgc3RhdGVTYXZlci5zYXZlU3RhdGUoKTsKICAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPmNsaXAoY2xpcFJlY3QpOwogICAgIH0KIApAQCAtMjYwLDEwICsyNjEsNiBAQCB2
b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50
SW5mbywgaW50IHR4LCBpbnQgdHkpCiAKICAgICAvLyBQYWludCB0aGUgY2hpbGRyZW4uCiAgICAg
UmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KHBhaW50SW5mbywgdHgsIHR5KTsKLQotICAgIC8vIFBv
cCB0aGUgY2xpcC4KLSAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3Jv
dW5kIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRz
KQotICAgICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogfQogCiB2b2lkIFJlbmRl
ckZpbGVVcGxvYWRDb250cm9sOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCAzZTZhZmFhMGMzM2I3YmI3
YjgxZDNhYzVmNWQzNmJhMWUzY2RlZWI5Li5lNDkzZjNjMDUxYjdlM2NmNWFiZjhiMjFmMGYwZDAz
ODRmNWQ0YTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAg
LTIzNDUsNyArMjM0NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50UmVzaXplcihHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50IHR5LCBjb25zdCBJCiAgICAgLy8gRHJhdyBh
IGZyYW1lIGFyb3VuZCB0aGUgcmVzaXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhlcmUgYXJlIGFu
eSBzY3JvbGxiYXJzIHByZXNlbnQuCiAgICAgLy8gQ2xpcHBpbmcgd2lsbCBleGNsdWRlIHRoZSBy
aWdodCBhbmQgYm90dG9tIGVkZ2VzIG9mIHRoaXMgZnJhbWUuCiAgICAgaWYgKCFoYXNPdmVybGF5
U2Nyb2xsYmFycygpICYmIChtX3ZCYXIgfHwgbV9oQmFyKSkgewotICAgICAgICBjb250ZXh0LT5z
YXZlKCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29u
dGV4dCk7CiAgICAgICAgIGNvbnRleHQtPmNsaXAoYWJzUmVjdCk7CiAgICAgICAgIEludFJlY3Qg
bGFyZ2VyQ29ybmVyID0gYWJzUmVjdDsKICAgICAgICAgbGFyZ2VyQ29ybmVyLnNldFNpemUoSW50
U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSArIDEsIGxhcmdlckNvcm5lci5oZWlnaHQoKSArIDEp
KTsKQEAgLTIzNTMsNyArMjM1Myw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50UmVzaXplcihH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50IHR5LCBjb25zdCBJCiAgICAgICAg
IGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKICAgICAgICAgY29udGV4dC0+c2V0
RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAg
ICAgIGNvbnRleHQtPmRyYXdSZWN0KGxhcmdlckNvcm5lcik7Ci0gICAgICAgIGNvbnRleHQtPnJl
c3RvcmUoKTsKICAgICB9CiB9CiAKQEAgLTI1NDEsMTQgKzI1NDAsMTQgQEAgdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBHcmFwaGljc0NvbnRleHQq
IHAsCiAgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGVSaWdodCh4LCB5KTsKICAgICAgICAgCiAg
ICAgICAgIC8vIEFwcGx5IHRoZSB0cmFuc2Zvcm0uCi0gICAgICAgIHAtPnNhdmUoKTsKLSAgICAg
ICAgcC0+Y29uY2F0Q1RNKHRyYW5zZm9ybS50b0FmZmluZVRyYW5zZm9ybSgpKTsKKyAgICAgICAg
eworICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwKTsK
KyAgICAgICAgICAgIHAtPmNvbmNhdENUTSh0cmFuc2Zvcm0udG9BZmZpbmVUcmFuc2Zvcm0oKSk7
CiAKLSAgICAgICAgLy8gTm93IGRvIGEgcGFpbnQgd2l0aCB0aGUgcm9vdCBsYXllciBzaGlmdGVk
IHRvIGJlIHVzLgotICAgICAgICBwYWludExheWVyKHRoaXMsIHAsIHRyYW5zZm9ybS5pbnZlcnNl
KCkubWFwUmVjdChwYWludERpcnR5UmVjdCksIHBhaW50QmVoYXZpb3IsIHBhaW50aW5nUm9vdCwg
b3ZlcmxhcFRlc3RSZXF1ZXN0cywgcGFpbnRGbGFncyB8IFBhaW50TGF5ZXJBcHBsaWVkVHJhbnNm
b3JtKTsKKyAgICAgICAgICAgIC8vIE5vdyBkbyBhIHBhaW50IHdpdGggdGhlIHJvb3QgbGF5ZXIg
c2hpZnRlZCB0byBiZSB1cy4KKyAgICAgICAgICAgIHBhaW50TGF5ZXIodGhpcywgcCwgdHJhbnNm
b3JtLmludmVyc2UoKS5tYXBSZWN0KHBhaW50RGlydHlSZWN0KSwgcGFpbnRCZWhhdmlvciwgcGFp
bnRpbmdSb290LCBvdmVybGFwVGVzdFJlcXVlc3RzLCBwYWludEZsYWdzIHwgUGFpbnRMYXllckFw
cGxpZWRUcmFuc2Zvcm0pOworICAgICAgICB9ICAgICAgICAKIAotICAgICAgICBwLT5yZXN0b3Jl
KCk7Ci0gICAgICAgIAogICAgICAgICAvLyBSZXN0b3JlIHRoZSBjbGlwLgogICAgICAgICByZXN0
b3JlQ2xpcChwLCBwYWludERpcnR5UmVjdCwgY2xpcFJlY3QpOwogICAgICAgICAKQEAgLTI3NTAs
NyArMjc0OSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Q2hpbGRMYXllckludG9Db2x1bW5z
KFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBSZW5kZXJMYXllCiAgICAgICAgIGxvY2FsRGlydHlS
ZWN0LmludGVyc2VjdChjb2xSZWN0KTsKICAgICAgICAgCiAgICAgICAgIGlmICghbG9jYWxEaXJ0
eVJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zYXZlKCk7CisgICAgICAg
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICAvLyBFYWNoIHN0cmlwIHB1c2hlcyBhIGNsaXAsIHNpbmNl
IGNvbHVtbiBib3hlcyBhcmUgc3BlY2lmaWVkIGFzIGJlaW5nCiAgICAgICAgICAgICAvLyBsaWtl
IG92ZXJmbG93OmhpZGRlbi4KQEAgLTI3ODgsOCArMjc4Nyw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OnBhaW50Q2hpbGRMYXllckludG9Db2x1bW5zKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBSZW5k
ZXJMYXllCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpbnRp
bmdSb290LCBvdmVybGFwVGVzdFJlcXVlc3RzLCBwYWludEZsYWdzLCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5MYXllcnMsIGNvbEluZGV4IC0gMSk7
CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgcG9zaXRpb24uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKaW5kZXggYzFjNzI0NWFiNDk1
ZTBkMTAwNmMyMDk1N2ZlZmZlZWYwOGE4OGM5OC4uZjBjNjYyM2ZhOGZhOWE1ZGVlN2YwNDdlYzIz
ZWI2YWE0Y2QzNTNlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RNYXJrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
TWFya2VyLmNwcApAQCAtMTI1NSwxMSArMTI1NSwxMiBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6
OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIAogICAgIFRleHRS
dW4gdGV4dFJ1bihtX3RleHQpOwogCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0
ZVNhdmVyKCpjb250ZXh0LCBmYWxzZSk7CiAgICAgaWYgKCFzdHlsZSgpLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKSB7CiAgICAgICAgIG1hcmtlci5tb3ZlKC1ib3hPcmlnaW4ueCgpLCAtYm94
T3JpZ2luLnkoKSk7CiAgICAgICAgIG1hcmtlciA9IG1hcmtlci50cmFuc3Bvc2VkUmVjdCgpOwog
ICAgICAgICBtYXJrZXIubW92ZShib3gueCgpLCBib3gueSgpIC0gbG9naWNhbEhlaWdodCgpKTsK
LSAgICAgICAgY29udGV4dC0+c2F2ZSgpOworICAgICAgICBzdGF0ZVNhdmVyLnNhdmVTdGF0ZSgp
OwogICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUobWFya2VyLngoKSwgbWFya2VyLm1heFkoKSk7
CiAgICAgICAgIGNvbnRleHQtPnJvdGF0ZShzdGF0aWNfY2FzdDxmbG9hdD4oZGVnMnJhZCg5MC4p
KSk7CiAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtbWFya2VyLngoKSwgLW1hcmtlci5tYXhZ
KCkpOwpAQCAtMTI5Nyw5ICsxMjk4LDYgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiAgICAgICAgICAgICBjb250ZXh0
LT5kcmF3VGV4dChzdHlsZSgpLT5mb250KCksIHRleHRSdW4sIHRleHRPcmlnaW4gKyBJbnRTaXpl
KHdpZHRoLCAwKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgaWYgKCFzdHlsZSgpLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiB9
CiAKIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6bGF5b3V0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcAppbmRleCA5MjhiNWI4NTlhMDk2Mjdj
N2RkM2NmMWVkNzZiMWFmZTQxN2QwMjlkLi5lZWJhYTdkZGE4NzU3OTkwYWE3MzQ3NmE4MWUwNTA1
OTJiMjIzNmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVk
aWFDb250cm9scy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlh
Q29udHJvbHMuY3BwCkBAIC0xMDYsNyArMTA2LDggQEAgdm9pZCBSZW5kZXJNZWRpYUNvbnRyb2xz
OjphZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJPYmplY3QqIG8pCiBib29sIFJlbmRl
ck1lZGlhQ29udHJvbHM6OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFDb250cm9sRWxlbWVu
dFR5cGUgcGFydCwgUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcikKIHsKICAgICBzdGF0aWMgY29uc3QgaW50IHRoZW1lU3R5bGUgPSBX
S01lZGlhQ29udHJvbGxlclRoZW1lUXVpY2tUaW1lOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5z
YXZlKCk7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludElu
Zm8uY29udGV4dCk7CisKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBNZWRpYUZ1
bGxzY3JlZW5CdXR0b246CiAgICAgICAgICAgICB3a0RyYXdNZWRpYVVJUGFydChXS01lZGlhVUlQ
YXJ0RnVsbHNjcmVlbkJ1dHRvbiwgdGhlbWVTdHlsZSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpLCByLCBkZXRlcm1pbmVTdGF0ZShvKSk7CkBAIC0xNzMsNyArMTc0LDYgQEAg
Ym9vbCBSZW5kZXJNZWRpYUNvbnRyb2xzOjpwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlhQ29u
dHJvbEVsZW1lbnRUeXBlIHBhcnQsIFIKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0
b3JlKCk7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZUNlbGwuY3BwCmluZGV4IGY4YTM4OTkzMjhiMDJlZjU2MDQyMjA5NDFiY2Mz
MzdlYjc2NTg1YzEuLjQ2MzU2NDI2MTA1OWE1Y2M5ZDU3YTg2Mzk3NjU2YmFhMjNkYWZhMDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCkBAIC05ODgs
MTUgKzk4OCwxMyBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnRCYWNrZ3JvdW5kc0JlaGlu
ZENlbGwoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaQogICAgICAgICAvLyBXZSBoYXZl
IHRvIGNsaXAgaGVyZSBiZWNhdXNlIHRoZSBiYWNrZ3JvdW5kIHdvdWxkIHBhaW50CiAgICAgICAg
IC8vIG9uIHRvcCBvZiB0aGUgYm9yZGVycyBvdGhlcndpc2UuICBUaGlzIG9ubHkgbWF0dGVycyBm
b3IgY2VsbHMgYW5kIHJvd3MuCiAgICAgICAgIGJvb2wgc2hvdWxkQ2xpcCA9IGJhY2tncm91bmRP
YmplY3QtPmhhc0xheWVyKCkgJiYgKGJhY2tncm91bmRPYmplY3QgPT0gdGhpcyB8fCBiYWNrZ3Jv
dW5kT2JqZWN0ID09IHBhcmVudCgpKSAmJiB0YWJsZUVsdC0+Y29sbGFwc2VCb3JkZXJzKCk7Cisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNv
bnRleHQsIHNob3VsZENsaXApOwogICAgICAgICBpZiAoc2hvdWxkQ2xpcCkgewogICAgICAgICAg
ICAgSW50UmVjdCBjbGlwUmVjdCh0eCArIGJvcmRlckxlZnQoKSwgdHkgKyBib3JkZXJUb3AoKSwK
ICAgICAgICAgICAgICAgICB3IC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSwgaCAtIGJv
cmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCkpOwotICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnNhdmUoKTsKICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKGNsaXBSZWN0
KTsKICAgICAgICAgfQogICAgICAgICBwYWludEZpbGxMYXllcnMocGFpbnRJbmZvLCBjLCBiZ0xh
eWVyLCB0eCwgdHksIHcsIGgsIEJhY2tncm91bmRCbGVlZE5vbmUsIENvbXBvc2l0ZVNvdXJjZU92
ZXIsIGJhY2tncm91bmRPYmplY3QpOwotICAgICAgICBpZiAoc2hvdWxkQ2xpcCkKLSAgICAgICAg
ICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAppbmRleCA4MTQ5ZjZjYzY2
NDYxN2Q4YTFhMDhkNDhhYzUxOWU1NzI5YzEzNGZiLi4yMTJlNzFlNTYxYzhjYzVmYjU5YzBkYWFm
OGQwM2M3ZGY5MjI2ZWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbC5jcHAKQEAgLTYyNiw4ICs2MjYsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9s
OjpwYWludFBsYWNlaG9sZGVyKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkK
ICAgICBpZiAoY2xpcFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
cGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLSAgICAKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKICAgICBwYWludEluZm8uY29u
dGV4dC0+Y2xpcChjbGlwUmVjdCk7CiAgICAgCiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBwbGFj
ZWhvbGRlclN0eWxlID0gZ2V0Q2FjaGVkUHNldWRvU3R5bGUoSU5QVVRfUExBQ0VIT0xERVIpOwpA
QCAtNjUwLDcgKzY0OSw2IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnBhaW50UGxhY2Vob2xk
ZXIoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQogICAgICAgICAKICAgICAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdCaWRpVGV4dChwbGFjZWhvbGRlclN0eWxlLT5mb250
KCksIHRleHRSdW4sIHRleHRQb2ludCk7CiAgICAgfQotICAgIHBhaW50SW5mby5jb250ZXh0LT5y
ZXN0b3JlKCk7ICAgIAogfQogCiB2b2lkIFJlbmRlclRleHRDb250cm9sOjpwYWludE9iamVjdChQ
YWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KaW5kZXggYTZmOTk5YTA1MDQ3OGU0ZDg5NDVkMjYyM2Iz
NThhNGE3MDc1MTQ5NC4uZmI1YjkzMGZkYmYwZWYwMmNiZmFiZjBhMzczN2MxZTRlZDVkNjY1ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQpAQCAtNzg2LDcg
Kzc4Niw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywKICAgICBpZiAoci53aWR0aCgpID49IG1p
bmltdW1NZW51TGlzdFNpemUoby0+c3R5bGUoKSkpCiAgICAgICAgIGluZmxhdGVkUmVjdCA9IGlu
ZmxhdGVSZWN0KGluZmxhdGVkUmVjdCwgc2l6ZSwgcG9wdXBCdXR0b25NYXJnaW5zKCksIHpvb21M
ZXZlbCk7CiAKLSAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogICAgIAogI2lm
bmRlZiBCVUlMRElOR19PTl9USUdFUgogICAgIC8vIE9uIExlb3BhcmQsIHRoZSBjZWxsIHdpbGwg
ZHJhdyBvdXRzaWRlIG9mIHRoZSBnaXZlbiByZWN0LCBzbyB3ZSBoYXZlIHRvIGNsaXAgdG8gdGhl
IHJlY3QKQEAgLTgwNCw4ICs4MDQsNiBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVM
aXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sCiAgICAgW3Bv
cHVwQnV0dG9uIGRyYXdXaXRoRnJhbWU6aW5mbGF0ZWRSZWN0IGluVmlldzpkb2N1bWVudFZpZXdG
b3IobyldOwogICAgIFtwb3B1cEJ1dHRvbiBzZXRDb250cm9sVmlldzpuaWxdOwogCi0gICAgcGFp
bnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLQogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAt
ODMxLDExICs4MjksMTAgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZXRlcihSZW5kZXJP
YmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWkKICAgICBMb2NhbEN1cnJl
bnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKIAogICAg
IE5TTGV2ZWxJbmRpY2F0b3JDZWxsKiBjZWxsID0gbGV2ZWxJbmRpY2F0b3JGb3IodG9SZW5kZXJN
ZXRlcihyZW5kZXJPYmplY3QpKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQp
OworCiAgICAgW2NlbGwgZHJhd1dpdGhGcmFtZTpyZWN0IGluVmlldzpkb2N1bWVudFZpZXdGb3Io
cmVuZGVyT2JqZWN0KV07CiAgICAgW2NlbGwgc2V0Q29udHJvbFZpZXc6bmlsXTsKLSAgICBwYWlu
dEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC05
NTUsNyArOTUyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVzc0JhcihSZW5k
ZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmYKIAogICAgIEhJVGhlbWVEcmF3
VHJhY2soJnRyYWNrSW5mbywgMCwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250
ZXh0KCksIGtISVRoZW1lT3JpZW50YXRpb25Ob3JtYWwpOwogCi0gICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnNhdmUoKTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBh
aW50SW5mby5jb250ZXh0KTsKIAogICAgIGlmICghcmVuZGVyUHJvZ3Jlc3MtPnN0eWxlKCktPmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgewogICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJh
bnNsYXRlKDIgKiByZWN0LngoKSArIHJlY3Qud2lkdGgoKSwgMCk7CkBAIC05NjMsOCArOTYwLDYg
QEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIHJl
bmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmYKICAgICB9CiAgICAgCiAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5nZXQoKSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgcmVjdC5sb2NhdGlvbigpKTsKLQotICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3Jl
KCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfSAgICAKICNlbmRpZgpAQCAtMTAyOCw3ICsxMDIzLDcg
QEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50cyhSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW4KIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0g
cGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgcGFpbnRJbmZvLmNv
bnRleHQtPnNhdmUoKTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
KnBhaW50SW5mby5jb250ZXh0KTsKIAogICAgIFJvdW5kZWRJbnRSZWN0IGJvcmRlciA9IG8tPnN0
eWxlKCktPmdldFJvdW5kZWRCb3JkZXJGb3Iocik7CiAgICAgaW50IHJhZGl1cyA9IGJvcmRlci5y
YWRpaSgpLnRvcExlZnQoKS53aWR0aCgpOwpAQCAtMTA1MiwzNCArMTA0NywzNSBAQCB2b2lkIFJl
bmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbgogICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IGxlZnRTaGFkaW5n
KEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2Uoci54KCks
ICByLnkoKSksIENHUG9pbnRNYWtlKHIueCgpICsgcmFkaXVzLCByLnkoKSksIG1haW5GdW5jdGlv
bi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CiAKICAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiBy
aWdodFNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50
TWFrZShyLm1heFgoKSwgIHIueSgpKSwgQ0dQb2ludE1ha2Uoci5tYXhYKCkgLSByYWRpdXMsIHIu
eSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKLSAgICBwYWludEluZm8u
Y29udGV4dC0+c2F2ZSgpOwotICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgcik7Ci0g
ICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChib3JkZXIpOwotICAgIENH
Q29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIG1haW5TaGFkaW5nLmdldCgpKTsKLSAgICBwYWlu
dEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUo
KTsKLSAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIHRvcEdyYWRpZW50KTsKLSAgICBw
YWludEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKFJvdW5kZWRJbnRSZWN0KGVuY2xv
c2luZ0ludFJlY3QodG9wR3JhZGllbnQpLCBib3JkZXIucmFkaWkoKS50b3BMZWZ0KCksIGJvcmRl
ci5yYWRpaSgpLnRvcFJpZ2h0KCksIEludFNpemUoKSwgSW50U2l6ZSgpKSk7Ci0gICAgQ0dDb250
ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgdG9wU2hhZGluZy5nZXQoKSk7Ci0gICAgcGFpbnRJbmZv
LmNvbnRleHQtPnJlc3RvcmUoKTsKIAorICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CisgICAgICAgIENHQ29udGV4
dENsaXBUb1JlY3QoY29udGV4dCwgcik7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRS
b3VuZGVkUmVjdENsaXAoYm9yZGVyKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29u
dGV4dCwgbWFpblNoYWRpbmcuZ2V0KCkpOworICAgIH0KKyAgICAKKyAgICB7CisgICAgICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwor
ICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIHRvcEdyYWRpZW50KTsKKyAgICAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChSb3VuZGVkSW50UmVjdChl
bmNsb3NpbmdJbnRSZWN0KHRvcEdyYWRpZW50KSwgYm9yZGVyLnJhZGlpKCkudG9wTGVmdCgpLCBi
b3JkZXIucmFkaWkoKS50b3BSaWdodCgpLCBJbnRTaXplKCksIEludFNpemUoKSkpOworICAgICAg
ICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCB0b3BTaGFkaW5nLmdldCgpKTsKKyAgICB9
CisgICAgCiAgICAgaWYgKCFib3R0b21HcmFkaWVudC5pc0VtcHR5KCkpIHsKLSAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAgICAgICAgIENHQ29udGV4dENsaXBU
b1JlY3QoY29udGV4dCwgYm90dG9tR3JhZGllbnQpOwogICAgICAgICBwYWludEluZm8uY29udGV4
dC0+YWRkUm91bmRlZFJlY3RDbGlwKFJvdW5kZWRJbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYm90
dG9tR3JhZGllbnQpLCBJbnRTaXplKCksIEludFNpemUoKSwgYm9yZGVyLnJhZGlpKCkuYm90dG9t
TGVmdCgpLCBib3JkZXIucmFkaWkoKS5ib3R0b21SaWdodCgpKSk7CiAgICAgICAgIENHQ29udGV4
dERyYXdTaGFkaW5nKGNvbnRleHQsIGJvdHRvbVNoYWRpbmcuZ2V0KCkpOwotICAgICAgICBwYWlu
dEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogICAgIH0KIAotICAgIHBhaW50SW5mby5jb250ZXh0
LT5zYXZlKCk7Ci0gICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCByKTsKLSAgICBwYWlu
dEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKGJvcmRlcik7Ci0gICAgQ0dDb250ZXh0
RHJhd1NoYWRpbmcoY29udGV4dCwgbGVmdFNoYWRpbmcuZ2V0KCkpOwotICAgIENHQ29udGV4dERy
YXdTaGFkaW5nKGNvbnRleHQsIHJpZ2h0U2hhZGluZy5nZXQoKSk7Ci0gICAgcGFpbnRJbmZvLmNv
bnRleHQtPnJlc3RvcmUoKTsKLQotICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Cisg
ICAgeworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50
SW5mby5jb250ZXh0KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCByKTsK
KyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChib3JkZXIpOwor
ICAgICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBsZWZ0U2hhZGluZy5nZXQoKSk7
CisgICAgICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIHJpZ2h0U2hhZGluZy5nZXQo
KSk7CisgICAgfQogfQogCiBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9u
KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHIpCkBAIC0xMTAyLDcgKzEwOTgsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1l
bnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludAogICAg
IGlmIChib3VuZHMud2lkdGgoKSA8IGFycm93V2lkdGggKyBhcnJvd1BhZGRpbmdMZWZ0ICogby0+
c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0g
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKIAogICAgIHBhaW50SW5mby5jb250
ZXh0LT5zZXRGaWxsQ29sb3Ioby0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5Q29sb3IpLCBvLT5zdHlsZSgpLT5jb2xvclNwYWNlKCkpOwogICAgIHBhaW50SW5mby5j
b250ZXh0LT5zZXRTdHJva2VTdHlsZShOb1N0cm9rZSk7CkBAIC0xMTQwLDggKzExMzYsNiBAQCBi
b29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBwYWludAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VD
b2xvcihyaWdodFNlcGFyYXRvckNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICBwYWlu
dEluZm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciArIHNl
cGFyYXRvclNwYWNlLCBib3VuZHMueSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW50UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciArIHNlcGFyYXRvclNwYWNlLCBib3VuZHMu
bWF4WSgpKSk7Ci0KLSAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogICAgIHJldHVy
biBmYWxzZTsKIH0KIApAQCAtMTI4Myw3ICsxMjc3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6
cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmYKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKICAgICBDR0NvbG9yU3BhY2VSZWYgY3NwYWNlID0gZGV2aWNlUkdCQ29sb3JT
cGFjZVJlZigpOwogCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKKyAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKICAgICBD
R0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGJvdW5kcyk7CiAKICAgICBzdHJ1Y3QgQ0dGdW5j
dGlvbkNhbGxiYWNrcyBtYWluQ2FsbGJhY2tzID0geyAwLCBUcmFja0dyYWRpZW50SW50ZXJwb2xh
dGUsIE5VTEwgfTsKQEAgLTEyOTcsNyArMTI5MSw2IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
CiAgICAgSW50U2l6ZSByYWRpdXModHJhY2tSYWRpdXMsIHRyYWNrUmFkaXVzKTsKICAgICBwYWlu
dEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKFJvdW5kZWRJbnRSZWN0KGJvdW5kcywg
cmFkaXVzLCByYWRpdXMsIHJhZGl1cywgcmFkaXVzKSk7CiAgICAgQ0dDb250ZXh0RHJhd1NoYWRp
bmcoY29udGV4dCwgbWFpblNoYWRpbmcuZ2V0KCkpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5y
ZXN0b3JlKCk7CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMTM1MCw3ICsxMzQzLDcg
QEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmYKICAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5j
ZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQogICAgICAgICBib3VuZHMuc2V0SGVpZ2h0
KGJvdW5kcy5oZWlnaHQoKSArIHZlcnRpY2FsU2xpZGVySGVpZ2h0UGFkZGluZyAqIG8tPnN0eWxl
KCktPmVmZmVjdGl2ZVpvb20oKSk7CiAKLSAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwor
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRl
eHQpOwogICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsK
ICAgICAKICAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0ID0gYm91bmRzOwpAQCAtMTM2NSw4ICsx
MzU4LDYgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmYKICAgICBbc2xpZGVyVGh1bWJDZWxsIGRy
YXdXaXRoRnJhbWU6dW56b29tZWRSZWN0IGluVmlldzpkb2N1bWVudFZpZXdGb3IobyldOwogICAg
IFtzbGlkZXJUaHVtYkNlbGwgc2V0Q29udHJvbFZpZXc6bmlsXTsKIAotICAgIHBhaW50SW5mby5j
b250ZXh0LT5yZXN0b3JlKCk7Ci0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTEzNzcsNyAr
MTM2OCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mCiAKICAgICBzZXRTZWFyY2hDZWxsU3Rh
dGUobywgcik7CiAKLSAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogCiAgICAg
ZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwogCkBAIC0xNDAz
LDggKzEzOTQsNiBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZgogICAgIFtzZWFyY2ggc2V0Q29u
dHJvbFZpZXc6bmlsXTsKICAgICBbc2VhcmNoIHJlc2V0U2VhcmNoQnV0dG9uQ2VsbF07CiAKLSAg
ICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CkBAIC0xNDgxLDcgKzE0NzAsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZp
ZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbgogICAgIHVwZGF0
ZUFjdGl2ZVN0YXRlKFtzZWFyY2ggY2FuY2VsQnV0dG9uQ2VsbF0sIG8pOwogICAgIHVwZGF0ZVBy
ZXNzZWRTdGF0ZShbc2VhcmNoIGNhbmNlbEJ1dHRvbkNlbGxdLCBvKTsKIAotICAgIHBhaW50SW5m
by5jb250ZXh0LT5zYXZlKCk7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKCpwYWludEluZm8uY29udGV4dCk7CiAKICAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHls
ZSgpLT5lZmZlY3RpdmVab29tKCk7CiAKQEAgLTE1MDksOCArMTQ5OCw2IEBAIGJvb2wgUmVuZGVy
VGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBQYWludEluCiAKICAgICBbW3NlYXJjaCBjYW5jZWxCdXR0b25DZWxsXSBkcmF3V2l0aEZy
YW1lOnVuem9vbWVkUmVjdCBpblZpZXc6ZG9jdW1lbnRWaWV3Rm9yKG8pXTsKICAgICBbW3NlYXJj
aCBjYW5jZWxCdXR0b25DZWxsXSBzZXRDb250cm9sVmlldzpuaWxdOwotCi0gICAgcGFpbnRJbmZv
LmNvbnRleHQtPnJlc3RvcmUoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE2MDUsOCAr
MTU5Miw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJCiAgICAgaWYgKCFbc2VhcmNoIHNlYXJj
aE1lbnVUZW1wbGF0ZV0pCiAgICAgICAgIFtzZWFyY2ggc2V0U2VhcmNoTWVudVRlbXBsYXRlOnNl
YXJjaE1lbnVUZW1wbGF0ZSgpXTsKIAotICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0K
KyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250
ZXh0KTsKICAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7
CiAKICAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNoIHNlYXJjaEJ1dHRvblJlY3RG
b3JCb3VuZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdCgpKV07CkBA
IC0xNjI0LDggKzE2MTAsNiBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxk
UmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SQogICAgIFtbc2VhcmNo
IHNlYXJjaEJ1dHRvbkNlbGxdIGRyYXdXaXRoRnJhbWU6dW56b29tZWRSZWN0IGluVmlldzpkb2N1
bWVudFZpZXdGb3IobyldOwogICAgIFtbc2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxdIHNldENvbnRy
b2xWaWV3Om5pbF07CiAgICAgCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTgxNiwxMiArMTgwMCwxMCBAQCBib29sIFJlbmRl
clRoZW1lTWFjOjpwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQ
YWludEluZm8mIHBhaQogICAgIGlmIChpc25hbihkdXJhdGlvbikpCiAgICAgICAgIGR1cmF0aW9u
ID0gMDsKICAKLSAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogICAgIEZsb2F0
UmVjdCB1bnpvb21lZFJlY3QgPSBnZXRVbnpvb21lZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29udGV4
dChvLCBwYWludEluZm8sIHIpOwogICAgIHdrRHJhd01lZGlhU2xpZGVyVHJhY2sobWVkaWFDb250
cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCB1bnpv
b21lZFJlY3QsIAogICAgICAgICB0aW1lTG9hZGVkLCBjdXJyZW50VGltZSwgZHVyYXRpb24sIGdl
dE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7Ci0gICAgCi0gICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnJlc3RvcmUoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE4OTEsMTAgKzE4NzMs
OSBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhQ3VycmVudFRpbWUoUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKKyAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKICAgICBG
bG9hdFJlY3QgdW56b29tZWRSZWN0ID0gZ2V0VW56b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVudENv
bnRleHQobywgcGFpbnRJbmZvLCByKTsKICAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYUN1cnJl
bnRUaW1lRGlzcGxheSwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpLCB1bnpvb21lZFJlY3QsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFn
cyhub2RlKSk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKQEAgLTE5MDQsMTAgKzE4ODUsOSBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpw
YWludE1lZGlhVGltZVJlbWFpbmluZyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
cAogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcGFpbnRJbmZv
LmNvbnRleHQtPnNhdmUoKTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKICAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0ID0gZ2V0
VW56b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVudENvbnRleHQobywgcGFpbnRJbmZvLCByKTsKICAg
ICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVRpbWVSZW1haW5pbmdEaXNwbGF5LCBtZWRpYUNvbnRy
b2xsZXJUaGVtZSgpLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHVuem9v
bWVkUmVjdCwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKLSAgICBwYWludEluZm8u
Y29udGV4dC0+cmVzdG9yZSgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAppbmRl
eCAxNGU3NjU2MTI4NjUzOWU3MDE5ZDczM2MwMTg3NGIyNTU2OWI3NzQyLi4wNDQwZDdjZWVjZGZm
M2Y3YmFiMTBmNGFjNDk2ODU5MzYxOWFjOTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcApAQCAtODUsNyArODUsNyBA
QCB2b2lkIFJlbmRlck1hdGhNTEJsb2NrOjpwYWludChQYWludEluZm8mIGluZm8sIGludCB0eCwg
aW50IHR5KQogICAgIHR4ICs9IHgoKTsKICAgICB0eSArPSB5KCk7CiAgICAgCi0gICAgaW5mby5j
b250ZXh0LT5zYXZlKCk7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KCppbmZvLmNvbnRleHQpOwogICAgIAogICAgIGluZm8uY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tu
ZXNzKDEuMGYpOwogICAgIGluZm8uY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2Up
OwpAQCAtMTA3LDkgKzEwNyw2IEBAIHZvaWQgUmVuZGVyTWF0aE1MQmxvY2s6OnBhaW50KFBhaW50
SW5mbyYgaW5mbywgaW50IHR4LCBpbnQgdHkpCiAgICAgaW5mby5jb250ZXh0LT5zZXRTdHJva2VD
b2xvcihDb2xvcigyNTUsIDAsIDApLCBDb2xvclNwYWNlU1JHQik7CiAgICAgCiAgICAgaW5mby5j
b250ZXh0LT5kcmF3TGluZShJbnRQb2ludCh0eCwgdHkgKyBiYXNlbGluZSksIEludFBvaW50KHR4
ICsgb2Zmc2V0V2lkdGgoKSwgdHkgKyBiYXNlbGluZSkpOwotICAgIAotICAgIGluZm8uY29udGV4
dC0+cmVzdG9yZSgpOwotICAgIAogfQogI2VuZGlmIC8vIEVOQUJMRShERUJVR19NQVRIX0xBWU9V
VCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxGcmFjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTEZyYWN0aW9uLmNwcAppbmRleCA0OGQzZjM5MDEwNThkODA5ZmVhZDMxOTBlNTBhODNm
OGM1NWM3ZmNkLi4xZjUyYTEyYmU1YzgxMDNmYTgxZWRhMDBjN2EwMTNjMGQxYWEyZTkyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TEZyYWN0aW9uLmNwcApAQCAtMTU2LDE1ICsxNTYsMTMgQEAgdm9pZCBSZW5kZXJNYXRoTUxGcmFj
dGlvbjo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBpbnQgdHgsIGludCB0eSkKICAgICB0eCArPSB4
KCk7CiAgICAgdHkgKz0geSgpICsgdmVydGljYWxPZmZzZXQ7CiAgICAgCi0gICAgaW5mby5jb250
ZXh0LT5zYXZlKCk7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpp
bmZvLmNvbnRleHQpOwogICAgIAogICAgIGluZm8uY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNz
KG1fbGluZVRoaWNrbmVzcyk7CiAgICAgaW5mby5jb250ZXh0LT5zZXRTdHJva2VTdHlsZShTb2xp
ZFN0cm9rZSk7CiAgICAgaW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihzdHlsZSgpLT52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIENvbG9yU3BhY2VTUkdCKTsKICAg
ICAKICAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KHR4LCB0eSksIEludFBvaW50
KHR4ICsgb2Zmc2V0V2lkdGgoKSwgdHkpKTsKLSAgICAKLSAgICBpbmZvLmNvbnRleHQtPnJlc3Rv
cmUoKTsKIH0KIAogaW50IFJlbmRlck1hdGhNTEZyYWN0aW9uOjpiYXNlbGluZVBvc2l0aW9uKEZv
bnRCYXNlbGluZSwgYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGxpbmVEaXJlY3Rp
b24sIExpbmVQb3NpdGlvbk1vZGUgbGluZVBvc2l0aW9uTW9kZSkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCmluZGV4
IDUxMDQ2ZjgxMDM3MzA4Mzg3YjA3MWIwOGYyOWQ3YzdmZWI5M2FlNTAuLjYwYmQ2OWIyMTgzNDlk
MDc5YjQzZGZkZDU3MmJlZjIzOTA5ZDk2MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcApAQCAtMTQ4LDcgKzE0OCw3IEBA
IHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBpbnQgdHgsIGlu
dCB0eSkKICAgICBGbG9hdFBvaW50IHRvcExlZnQoc3RhcnQgLSBnUmFkaWNhbFRvcExlZnRQb2lu
dFhQb3MgKiBmcm9udFdpZHRoICwgdHkgKyBnUmFkaWNhbFRvcExlZnRQb2ludFlQb3MgKiBtYXhI
ZWlnaHQpOwogICAgIEZsb2F0UG9pbnQgbGVmdEVuZChzdGFydCAtIGZyb250V2lkdGggLCB0b3BM
ZWZ0LnkoKSArIGdSYWRpY2FsTGVmdEVuZFlTaGlmdCAqIHN0eWxlKCktPmZvbnRTaXplKCkpOwog
ICAgIAotICAgIGluZm8uY29udGV4dC0+c2F2ZSgpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcigqaW5mby5jb250ZXh0KTsKICAgICAKICAgICBpbmZvLmNvbnRleHQt
PnNldFN0cm9rZVRoaWNrbmVzcyhnUmFkaWNhbExpbmVUaGlja25lc3MgKiBzdHlsZSgpLT5mb250
U2l6ZSgpKTsKICAgICBpbmZvLmNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsK
QEAgLTE3MCw3ICsxNzAsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OnBhaW50KFBhaW50SW5m
byYgaW5mbywgaW50IHR4LCBpbnQgdHkpCiAgICAgCiAgICAgaW5mby5jb250ZXh0LT5zdHJva2VQ
YXRoKHJvb3QpOwogICAgIAotICAgIGluZm8uY29udGV4dC0+c2F2ZSgpOworICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIgbWFza1N0YXRlU2F2ZXIoKmluZm8uY29udGV4dCk7CiAgICAgCiAg
ICAgLy8gQnVpbGQgYSBtYXNrIHRvIGRyYXcgdGhlIHRoaWNrIHBhcnQgb2YgdGhlIHJvb3QuCiAg
ICAgUGF0aCBtYXNrOwpAQCAtMTkxLDExICsxOTEsNiBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6
OnBhaW50KFBhaW50SW5mbyYgaW5mbywgaW50IHR4LCBpbnQgdHkpCiAgICAgbGluZS5hZGRMaW5l
VG8odG9wTGVmdCk7CiAKICAgICBpbmZvLmNvbnRleHQtPnN0cm9rZVBhdGgobGluZSk7Ci0gICAg
Ci0gICAgaW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgCi0gICAgaW5mby5jb250ZXh0LT5y
ZXN0b3JlKCk7Ci0KIH0KIAogdm9pZCBSZW5kZXJNYXRoTUxSb290OjpsYXlvdXQoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVS
b290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3F1
YXJlUm9vdC5jcHAKaW5kZXggM2Y5OWU2ZDBhMzhjYWNiMTg4MGQ3ZDg2ZDJmOGUyZTI1ZGRhNzA3
Yi4uOGY2OTAxOWVlMjYzM2RiMmJkYjBkOTVlMTQzZWMwYzVhMzFhYzQ3YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFy
ZVJvb3QuY3BwCkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxTcXVhcmVSb290
OjpwYWludChQYWludEluZm8mIGluZm8sIGludCB0eCwgaW50IHR5KQogICAgIEZsb2F0UG9pbnQg
dG9wTGVmdCh0eCArIGZyb250V2lkdGggKiBnUmFkaWNhbFRvcExlZnRQb2ludFhQb3MgLCB0eSAr
IGdSYWRpY2FsVG9wTGVmdFBvaW50WVBvcyAqIG1heEhlaWdodCk7CiAgICAgRmxvYXRQb2ludCBs
ZWZ0RW5kKHR4ICwgdG9wTGVmdC55KCkgKyBnUmFkaWNhbExlZnRFbmRZU2hpZnQgKiBzdHlsZSgp
LT5mb250U2l6ZSgpKTsKICAgICAKLSAgICBpbmZvLmNvbnRleHQtPnNhdmUoKTsKKyAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmluZm8uY29udGV4dCk7CiAgICAgCiAg
ICAgaW5mby5jb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoZ1JhZGljYWxMaW5lVGhpY2tuZXNz
ICogc3R5bGUoKS0+Zm9udFNpemUoKSk7CiAgICAgaW5mby5jb250ZXh0LT5zZXRTdHJva2VTdHls
ZShTb2xpZFN0cm9rZSk7CkBAIC0xMzYsNyArMTM2LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxTcXVh
cmVSb290OjpwYWludChQYWludEluZm8mIGluZm8sIGludCB0eCwgaW50IHR5KQogCiAgICAgaW5m
by5jb250ZXh0LT5zdHJva2VQYXRoKHJvb3QpOwogICAgIAotICAgIGluZm8uY29udGV4dC0+c2F2
ZSgpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgbWFza1N0YXRlU2F2ZXIoKmluZm8u
Y29udGV4dCk7CiAgICAgCiAgICAgLy8gQnVpbGQgYSBtYXNrIHRvIGRyYXcgdGhlIHRoaWNrIHBh
cnQgb2YgdGhlIHJvb3QuCiAgICAgUGF0aCBtYXNrOwpAQCAtMTU3LDEwICsxNTcsNiBAQCB2b2lk
IFJlbmRlck1hdGhNTFNxdWFyZVJvb3Q6OnBhaW50KFBhaW50SW5mbyYgaW5mbywgaW50IHR4LCBp
bnQgdHkpCiAgICAgbGluZS5hZGRMaW5lVG8odG9wTGVmdCk7CiAgICAgCiAgICAgaW5mby5jb250
ZXh0LT5zdHJva2VQYXRoKGxpbmUpOwotICAgIAotICAgIGluZm8uY29udGV4dC0+cmVzdG9yZSgp
OwotICAgIAotICAgIGluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogfQogCiB2b2lkIFJlbmRlck1h
dGhNTFNxdWFyZVJvb3Q6OmxheW91dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKaW5kZXggMTg5N2Y1M2ZkZjg1MTZiYjA3NDYz
ZjYyMWFhYzE5ZTQ0OWQ4ODM4Mi4uZDNjNDgxZTgxMDg2ZmE5ZTkyYjcyYjczNTQyNzI2ZTgxMmNk
ZDFjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdD
b250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Q29udGFpbmVyLmNwcApAQCAtMTA1LDI4ICsxMDUsMjggQEAgdm9pZCBSZW5kZXJTVkdDb250YWlu
ZXI6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQsIGludCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7Ci0gICAgY2hpbGRQ
YWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjaGlsZFBhaW50SW5mby5jb250ZXh0KTsKIAotICAgIC8v
IExldCB0aGUgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIgc3ViY2xhc3MgY2xpcCBpZiBuZWNl
c3NhcnkKLSAgICBhcHBseVZpZXdwb3J0Q2xpcChjaGlsZFBhaW50SW5mbyk7CisgICAgICAgIC8v
IExldCB0aGUgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIgc3ViY2xhc3MgY2xpcCBpZiBuZWNl
c3NhcnkKKyAgICAgICAgYXBwbHlWaWV3cG9ydENsaXAoY2hpbGRQYWludEluZm8pOwogCi0gICAg
Y2hpbGRQYWludEluZm8uYXBwbHlUcmFuc2Zvcm0obG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpKTsK
KyAgICAgICAgY2hpbGRQYWludEluZm8uYXBwbHlUcmFuc2Zvcm0obG9jYWxUb1BhcmVudFRyYW5z
Zm9ybSgpKTsKIAotICAgIGJvb2wgY29udGludWVSZW5kZXJpbmcgPSB0cnVlOwotICAgIGlmIChj
aGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKLSAgICAgICAgY29u
dGludWVSZW5kZXJpbmcgPSBTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250
ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvKTsKKyAgICAgICAgYm9vbCBjb250aW51ZVJlbmRlcmlu
ZyA9IHRydWU7CisgICAgICAgIGlmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNl
Rm9yZWdyb3VuZCkKKyAgICAgICAgICAgIGNvbnRpbnVlUmVuZGVyaW5nID0gU1ZHUmVuZGVyU3Vw
cG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbyk7CiAK
LSAgICBpZiAoY29udGludWVSZW5kZXJpbmcpIHsKLSAgICAgICAgY2hpbGRQYWludEluZm8udXBk
YXRlUGFpbnRpbmdSb290Rm9yQ2hpbGRyZW4odGhpcyk7Ci0gICAgICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCkpCi0gICAgICAgICAgICBjaGlsZC0+cGFpbnQoY2hpbGRQYWludEluZm8sIDAsIDApOwot
ICAgIH0KLQotICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQp
Ci0gICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQodGhpcywg
Y2hpbGRQYWludEluZm8sIHBhaW50SW5mby5jb250ZXh0KTsKLQotICAgIGNoaWxkUGFpbnRJbmZv
LmNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICAgICAgaWYgKGNvbnRpbnVlUmVuZGVyaW5nKSB7Cisg
ICAgICAgICAgICBjaGlsZFBhaW50SW5mby51cGRhdGVQYWludGluZ1Jvb3RGb3JDaGlsZHJlbih0
aGlzKTsKKyAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgICAgICAgICAg
Y2hpbGQtPnBhaW50KGNoaWxkUGFpbnRJbmZvLCAwLCAwKTsKKyAgICAgICAgfQogCisgICAgICAg
IGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCisgICAgICAgICAg
ICBTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFp
bnRJbmZvLCBwYWludEluZm8uY29udGV4dCk7CisgICAgfQorICAgIAogICAgIC8vIEZJWE1FOiBU
aGlzIHJlYWxseSBzaG91bGQgYmUgZHJhd24gZnJvbSBsb2NhbCBjb29yZGluYXRlcywgYnV0IGN1
cnJlbnRseSB3ZSBoYWNrIGl0CiAgICAgLy8gdG8gYXZvaWQgb3VyIGNsaXAga2lsbGluZyBvdXIg
b3V0bGluZSByZWN0LiAgVGh1cyB3ZSB0cmFuc2xhdGUgb3VyCiAgICAgLy8gb3V0bGluZSByZWN0
IGludG8gcGFyZW50IGNvb3JkcyBiZWZvcmUgZHJhd2luZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwCmluZGV4IDIw
MGZhYjJhMGRjYzcwYzllM2RiNTBjYWNmMWQ2YTBjM2U0NTAzNmUuLjZmMzJiZDQxZWUyOWM3ZDlk
NjkyZmJkMjEzODRhZTY2ZjViMGI2Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcApAQCAtNTAsNyArNTAsNyBA
QCB2b2lkIFJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBpbnQsIGludCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJ
bmZvKHBhaW50SW5mbyk7Ci0gICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY2hpbGRQYWludEluZm8uY29u
dGV4dCk7CiAgICAgY2hpbGRQYWludEluZm8uYXBwbHlUcmFuc2Zvcm0obG9jYWxUcmFuc2Zvcm0o
KSk7CiAKICAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRlbih0aGlzKSkK
QEAgLTY0LDggKzY0LDYgQEAgdm9pZCBSZW5kZXJTVkdGb3JlaWduT2JqZWN0OjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgaW50LCBpbnQpCiAKICAgICBpZiAob3BhY2l0eSA8IDEuMGYpCiAg
ICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0K
LSAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKIEludFJlY3QgUmVu
ZGVyU1ZHRm9yZWlnbk9iamVjdDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVy
Qm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCmluZGV4IDgxYTVjZWFiMTM4MmU1Y2M2ZGQx
ZTViZTUwMzRmMmIzNzQzZDFkMWMuLjVmZmY3Zjc3NDU4Y2RmNjcxYjI3ZWE3NzAwZTA4OWMxMWIx
MzViZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1h
Z2UuY3BwCkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBSZW5kZXJTVkdJbWFnZTo6cGFpbnQoUGFp
bnRJbmZvJiBwYWludEluZm8sIGludCwgaW50KQogICAgIFBhaW50SW5mbyBjaGlsZFBhaW50SW5m
byhwYWludEluZm8pOwogICAgIGJvb2wgZHJhd3NPdXRsaW5lID0gc3R5bGUoKS0+b3V0bGluZVdp
ZHRoKCkgJiYgKGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IGNo
aWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSk7CiAgICAgaWYgKGRy
YXdzT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3Vu
ZCkgewotICAgICAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CisgICAgICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY2hpbGRQYWludEluZm8uY29udGV4
dCk7CiAgICAgICAgIGNoaWxkUGFpbnRJbmZvLmFwcGx5VHJhbnNmb3JtKG1fbG9jYWxUcmFuc2Zv
cm0pOwogCiAgICAgICAgIGlmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9y
ZWdyb3VuZCkgewpAQCAtMTM5LDggKzEzOSw2IEBAIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQsIGludCkKICAgICAgICAgaWYgKGRyYXdzT3V0bGlu
ZSkKICAgICAgICAgICAgIHBhaW50T3V0bGluZShjaGlsZFBhaW50SW5mby5jb250ZXh0LCBzdGF0
aWNfY2FzdDxpbnQ+KGJvdW5kaW5nQm94LngoKSksIHN0YXRpY19jYXN0PGludD4oYm91bmRpbmdC
b3gueSgpKSwKICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGJvdW5kaW5nQm94Lndp
ZHRoKCkpLCBzdGF0aWNfY2FzdDxpbnQ+KGJvdW5kaW5nQm94LmhlaWdodCgpKSk7Ci0gICAgICAg
IAotICAgICAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgfQogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGgu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAppbmRl
eCBjYzdjODZlOGY0ODM4N2NmZmNlOWFkZDNkYjYzODU1ODEwNWVkZTVmLi43NDdkMjdjOWM0NDZm
ZWE5YzZmM2JlODFiNGNhNGViNWE3ZDUyYmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKQEAgLTE3Miw3ICsxNzIsOCBAQCB2b2lkIFJlbmRl
clNWR1BhdGg6OmZpbGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKICAg
ICBQYXRoIHBhdGg7CiAKICAgICBib29sIG5vblNjYWxpbmdTdHJva2UgPSBzdHlsZS0+c3ZnU3R5
bGUoKS0+dmVjdG9yRWZmZWN0KCkgPT0gVkVfTk9OX1NDQUxJTkdfU1RST0tFOwotICAgIGJvb2wg
cmVzdG9yZUNvbnRleHQgPSBmYWxzZTsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcigqY29udGV4dCwgZmFsc2UpOwogICAgIGlmIChub25TY2FsaW5nU3Ryb2tlKSB7
CiAgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihub2RlKCkpOwogICAgICAgICBB
ZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSA9IGVsZW1lbnQtPmdldFNj
cmVlbkNUTShTVkdMb2NhdGFibGU6OkRpc2FsbG93U3R5bGVVcGRhdGUpOwpAQCAtMTgyLDkgKzE4
Myw4IEBAIHZvaWQgUmVuZGVyU1ZHUGF0aDo6ZmlsbEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0KQogICAgICAgICBwYXRoID0gbV9wYXRoOwogICAgICAgICBwYXRoLnRyYW5z
Zm9ybShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKTsKIAotICAgICAgICBjb250ZXh0LT5zYXZl
KCk7CisgICAgICAgIHN0YXRlU2F2ZXIuc2F2ZVN0YXRlKCk7CiAgICAgICAgIGNvbnRleHQtPmNv
bmNhdENUTShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtLmludmVyc2UoKSk7Ci0gICAgICAgIHJl
c3RvcmVDb250ZXh0ID0gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAoc3Ryb2tlUGFpbnRpbmdSZXNv
dXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb1N0cm9rZU1v
ZGUpKQpAQCAtMTk1LDkgKzE5NSw2IEBAIHZvaWQgUmVuZGVyU1ZHUGF0aDo6ZmlsbEFuZFN0cm9r
ZVBhdGgoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogICAgICAgICBpZiAoZmFsbGJhY2tSZXNv
dXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb1N0cm9rZU1v
ZGUpKQogICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhp
cywgY29udGV4dCwgQXBwbHlUb1N0cm9rZU1vZGUsIG5vblNjYWxpbmdTdHJva2UgPyAmcGF0aCA6
ICZtX3BhdGgpOwogICAgIH0KLQotICAgIGlmIChyZXN0b3JlQ29udGV4dCkKLSAgICAgICAgY29u
dGV4dC0+cmVzdG9yZSgpOwogfQogCiB2b2lkIFJlbmRlclNWR1BhdGg6OnBhaW50KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBpbnQsIGludCkKQEAgLTIxMiw3ICsyMDksNyBAQCB2b2lkIFJlbmRlclNW
R1BhdGg6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQsIGludCkKICAgICBQYWludElu
Zm8gY2hpbGRQYWludEluZm8ocGFpbnRJbmZvKTsKICAgICBib29sIGRyYXdzT3V0bGluZSA9IHN0
eWxlKCktPm91dGxpbmVXaWR0aCgpICYmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBo
YXNlT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxp
bmUpOwogICAgIGlmIChkcmF3c091dGxpbmUgfHwgY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFp
bnRQaGFzZUZvcmVncm91bmQpIHsKLSAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+c2F2
ZSgpOworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNoaWxk
UGFpbnRJbmZvLmNvbnRleHQpOwogICAgICAgICBjaGlsZFBhaW50SW5mby5hcHBseVRyYW5zZm9y
bShtX2xvY2FsVHJhbnNmb3JtKTsKIAogICAgICAgICBpZiAoY2hpbGRQYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKQEAgLTIzNSw4ICsyMzIsNiBAQCB2b2lkIFJlbmRl
clNWR1BhdGg6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQsIGludCkKICAgICAgICAg
aWYgKGRyYXdzT3V0bGluZSkKICAgICAgICAgICAgIHBhaW50T3V0bGluZShjaGlsZFBhaW50SW5m
by5jb250ZXh0LCBzdGF0aWNfY2FzdDxpbnQ+KGJvdW5kaW5nQm94LngoKSksIHN0YXRpY19jYXN0
PGludD4oYm91bmRpbmdCb3gueSgpKSwKICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+
KGJvdW5kaW5nQm94LndpZHRoKCkpLCBzdGF0aWNfY2FzdDxpbnQ+KGJvdW5kaW5nQm94LmhlaWdo
dCgpKSk7Ci0gICAgICAgIAotICAgICAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5yZXN0b3Jl
KCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKaW5kZXggMjQ1YTg1OTJiMTk1OTI0MzM1
ODkwODZkY2RmNDczMjk3NTQ2NzFjZi4uMzc4ZWJhZDM3NzVjNTNhN2U5NTE0NTc1NDNjM2RmNDkz
MjY4ZGVmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcApAQCAtMTgzLDcgKzE4Myw3IEBAIGJvb2wgUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5nVG9Db250ZXh0KFJlbmRlck9iamVj
dCogb2JqZWN0LCBjb25zCiAgICAgICAgIEFTU0VSVChtYXNrQ29udGV4dCk7CiAKICAgICAgICAg
Ly8gVGhlIHNhdmUvcmVzdG9yZSBwYWlyIGlzIG5lZWRlZCBmb3IgY2xpcFRvSW1hZ2VCdWZmZXIg
LSBpdCBkb2Vzbid0IHdvcmsgd2l0aG91dCBpdCBvbiBub24tQ2cgcGxhdGZvcm1zLgotICAgICAg
ICBtYXNrQ29udGV4dC0+c2F2ZSgpOworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoKm1hc2tDb250ZXh0KTsKICAgICAgICAgbWFza0NvbnRleHQtPnRyYW5zbGF0
ZSgtY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdC54KCksIC1jbGFtcGVkQWJzb2x1dGVUYXJnZXRS
ZWN0LnkoKSk7CiAgICAgICAgIG1hc2tDb250ZXh0LT5jb25jYXRDVE0oYWJzb2x1dGVUcmFuc2Zv
cm0pOwogCkBAIC0xOTgsNyArMTk4LDYgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6
OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnMKICAgICAg
ICAgfQogCiAgICAgICAgIGRyYXdDb250ZW50SW50b01hc2tJbWFnZShjbGlwcGVyRGF0YSwgb2Jq
ZWN0Qm91bmRpbmdCb3gpOwotICAgICAgICBtYXNrQ29udGV4dC0+cmVzdG9yZSgpOwogICAgIH0K
IAogICAgIGlmICghY2xpcHBlckRhdGEtPmNsaXBNYXNrSW1hZ2UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwCmlu
ZGV4IGZjYWQyN2YwODdiMjY0MWM5NDZmMGQ4NGRjZmE1YmE0Mzk0MmYzMmIuLjU3ZjhlM2MyYzY4
ODNhZDk5ODk2NzQ1MDBiZGI4ZTk5Y2Q3MWNlYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwCkBAIC0xMzAs
MTAgKzEzMCw5IEBAIEFmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6bWFy
a2VyVHJhbnNmb3JtYXRpb24oY29uc3QgRmxvYXRQb2ludCYKIHZvaWQgUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXJrZXI6OmRyYXcoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtKQogewogICAgIFBhaW50SW5mbyBpbmZvKHBhaW50SW5mbyk7Ci0gICAgaW5m
by5jb250ZXh0LT5zYXZlKCk7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKCppbmZvLmNvbnRleHQpOwogICAgIGluZm8uYXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtKTsK
ICAgICBSZW5kZXJTVkdDb250YWluZXI6OnBhaW50KGluZm8sIDAsIDApOwotICAgIGluZm8uY29u
dGV4dC0+cmVzdG9yZSgpOwogfQogCiBBZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXI6Om1hcmtlckNvbnRlbnRUcmFuc2Zvcm1hdGlvbihjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCBz
dHJva2VXaWR0aCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1RleHQuY3BwCmluZGV4IDdhZjZjYzZkODRlZmU1YjAxN2FiODExNWY5MmI4YmM0NzI3MGI3
YzQuLjFiOGNiZTM5YThiMDA4NTc1MDk3ZGQwMjFjZjRlM2QxNGNkMjhjYzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcApAQCAtMjQwLDEwICsy
NDAsOSBAQCB2b2lkIFJlbmRlclNWR1RleHQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBp
bnQsIGludCkKICAgICAgICAgIHJldHVybjsKIAogICAgIFBhaW50SW5mbyBibG9ja0luZm8ocGFp
bnRJbmZvKTsKLSAgICBibG9ja0luZm8uY29udGV4dC0+c2F2ZSgpOworICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqYmxvY2tJbmZvLmNvbnRleHQpOwogICAgIGJsb2Nr
SW5mby5hcHBseVRyYW5zZm9ybShsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkpOwogICAgIFJlbmRl
ckJsb2NrOjpwYWludChibG9ja0luZm8sIDAsIDApOwotICAgIGJsb2NrSW5mby5jb250ZXh0LT5y
ZXN0b3JlKCk7CiB9CiAKIEZsb2F0UmVjdCBSZW5kZXJTVkdUZXh0OjpzdHJva2VCb3VuZGluZ0Jv
eCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lu
bGluZUZsb3dCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVG
bG93Qm94LmNwcAppbmRleCA4NTcwN2RhZDhjMmNmN2UxYzhkZWNjNjQwNzlhODdmNWFmODAzYmQy
Li4xZDAwNDNiYmU1NWVjYjZjNmE0OGQ5MTAyMjc3NGFlYWRmODhmYTI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0JveC5jcHAKQEAgLTU3LDcg
KzU3LDcgQEAgdm9pZCBTVkdJbmxpbmVGbG93Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5m
bywgaW50LCBpbnQsIGludCwgaW50KQogICAgIEFTU0VSVChib3hSZW5kZXJlcik7CiAKICAgICBQ
YWludEluZm8gY2hpbGRQYWludEluZm8ocGFpbnRJbmZvKTsKLSAgICBjaGlsZFBhaW50SW5mby5j
b250ZXh0LT5zYXZlKCk7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KCpjaGlsZFBhaW50SW5mby5jb250ZXh0KTsKIAogICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0Ojpw
cmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KGJveFJlbmRlcmVyLCBjaGlsZFBhaW50SW5mbykpIHsK
ICAgICAgICAgZm9yIChJbmxpbmVCb3gqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dE9uTGluZSgpKSB7CkBAIC02OSw3ICs2OSw2IEBAIHZvaWQgU1ZHSW5s
aW5lRmxvd0JveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCwgaW50LCBpbnQsIGlu
dCkKICAgICB9CiAKICAgICBTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50
KGJveFJlbmRlcmVyLCBjaGlsZFBhaW50SW5mbywgcGFpbnRJbmZvLmNvbnRleHQpOwotICAgIGNo
aWxkUGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKIH0KIAogSW50UmVjdCBTVkdJbmxpbmVG
bG93Qm94OjpjYWxjdWxhdGVCb3VuZGFyaWVzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCmluZGV4IGJjNTUwYTZjMDRlYTUx
ZjNhOTE0YzI3NmY0ZDJiODg3NzQ4N2JhYWQuLmRiZGVmMDc4ODBiNTU0MDQwYmMzOTI5YzNlMmU5
ZTAxMDYxZTAyMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
SW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJ
bmxpbmVUZXh0Qm94LmNwcApAQCAtMjI2LDcgKzIyNiw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJv
eDo6cGFpbnRTZWxlY3Rpb25CYWNrZ3JvdW5kKFBhaW50SW5mbyYgcGFpbnRJbmZvKQogICAgICAg
ICBpZiAoIW1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoZnJhZ21l
bnQsIGZyYWdtZW50U3RhcnRQb3NpdGlvbiwgZnJhZ21lbnRFbmRQb3NpdGlvbikpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAg
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250
ZXh0KTsKICAgICAgICAgZnJhZ21lbnQuYnVpbGRGcmFnbWVudFRyYW5zZm9ybShmcmFnbWVudFRy
YW5zZm9ybSk7CiAgICAgICAgIGlmICghZnJhZ21lbnRUcmFuc2Zvcm0uaXNJZGVudGl0eSgpKQog
ICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNvbmNhdENUTShmcmFnbWVudFRyYW5zZm9y
bSk7CkBAIC0yMzUsNyArMjM1LDYgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVj
dGlvbkJhY2tncm91bmQoUGFpbnRJbmZvJiBwYWludEluZm8pCiAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT5maWxsUmVjdChzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGZyYWdtZW50LCBm
cmFnbWVudFN0YXJ0UG9zaXRpb24sIGZyYWdtZW50RW5kUG9zaXRpb24sIHN0eWxlKSwgYmFja2dy
b3VuZENvbG9yLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKIAogICAgICAgICBtX3BhaW50aW5nUmVz
b3VyY2VNb2RlID0gQXBwbHlUb0RlZmF1bHRNb2RlOwotICAgICAgICBwYWludEluZm8uY29udGV4
dC0+cmVzdG9yZSgpOwogICAgIH0KIAogICAgIEFTU0VSVCghbV9wYWludGluZ1Jlc291cmNlKTsK
QEAgLTI5Niw3ICsyOTUsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBpbnQsIGludCwgaW50LCBpbnQpCiAgICAgICAgIFNWR1RleHRGcmFnbWVu
dCYgZnJhZ21lbnQgPSBtX3RleHRGcmFnbWVudHMuYXQoaSk7CiAgICAgICAgIEFTU0VSVCghbV9w
YWludGluZ1Jlc291cmNlKTsKIAotICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwor
ICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5j
b250ZXh0KTsKICAgICAgICAgZnJhZ21lbnQuYnVpbGRGcmFnbWVudFRyYW5zZm9ybShmcmFnbWVu
dFRyYW5zZm9ybSk7CiAgICAgICAgIGlmICghZnJhZ21lbnRUcmFuc2Zvcm0uaXNJZGVudGl0eSgp
KQogICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNvbmNhdENUTShmcmFnbWVudFRyYW5z
Zm9ybSk7CkBAIC0zMjUsNyArMzI0LDYgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgaW50LCBpbnQsIGludCwgaW50KQogICAgICAgICAgICAgcGFp
bnREZWNvcmF0aW9uKHBhaW50SW5mby5jb250ZXh0LCBMSU5FX1RIUk9VR0gsIGZyYWdtZW50KTsK
IAogICAgICAgICBtX3BhaW50aW5nUmVzb3VyY2VNb2RlID0gQXBwbHlUb0RlZmF1bHRNb2RlOwot
ICAgICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogICAgIH0KIAogICAgIEFTU0VS
VCghbV9wYWludGluZ1Jlc291cmNlKTsKQEAgLTU2OCw3ICs1NjYsNyBAQCB2b2lkIFNWR0lubGlu
ZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbldpdGhTdHlsZShHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIEVUZXh0RAogICAgIGZsb2F0IHdpZHRoID0gZnJhZ21lbnQud2lkdGg7CiAgICAgY29uc3Qg
Rm9udE1ldHJpY3MmIHNjYWxlZEZvbnRNZXRyaWNzID0gc2NhbGVkRm9udC5mb250TWV0cmljcygp
OwogCi0gICAgY29udGV4dC0+c2F2ZSgpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcigqY29udGV4dCk7CiAgICAgaWYgKHNjYWxpbmdGYWN0b3IgIT0gMSkgewogICAg
ICAgICB3aWR0aCAqPSBzY2FsaW5nRmFjdG9yOwogICAgICAgICBkZWNvcmF0aW9uT3JpZ2luLnNj
YWxlKHNjYWxpbmdGYWN0b3IsIHNjYWxpbmdGYWN0b3IpOwpAQCAtNTg3LDggKzU4NSw2IEBAIHZv
aWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uV2l0aFN0eWxlKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgRVRleHRECiAKICAgICBpZiAoYWNxdWlyZVBhaW50aW5nUmVzb3VyY2Uo
Y29udGV4dCwgc2NhbGluZ0ZhY3RvciwgZGVjb3JhdGlvblJlbmRlcmVyLCBkZWNvcmF0aW9uU3R5
bGUpKQogICAgICAgICByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0LCAmcGF0aCk7Ci0K
LSAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFp
bnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJTdHlsZSog
c3R5bGUsIFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQs
IGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAppbmRleCBjYzZjYjc1ODc0NzNl
NjBhYTAwNzM0MzIyNjA1NmEzZWNjZWQxYjQwLi41NzI3NTExYjljNTIzY2E2YTJlMTQyZGY5MGQ0
MTVhMDIyNTcwZWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1Jvb3RJbmxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
Um9vdElubGluZUJveC5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBTVkdSb290SW5saW5lQm94
OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50LCBpbnQsIGludCwgaW50KQogICAgICAg
ICB9CiAgICAgfQogCi0gICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY2hpbGRQYWludEluZm8uY29udGV4
dCk7CiAKICAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVu
dChib3hSZW5kZXJlciwgY2hpbGRQYWludEluZm8pKSB7CiAgICAgICAgIGZvciAoSW5saW5lQm94
KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUo
KSkgewpAQCAtNjgsNyArNjgsNiBAQCB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBpbnQsIGludCwgaW50LCBpbnQpCiAgICAgfQogCiAgICAgU1ZHUmVu
ZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudChib3hSZW5kZXJlciwgY2hpbGRQYWlu
dEluZm8sIHBhaW50SW5mby5jb250ZXh0KTsKLSAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5y
ZXN0b3JlKCk7CiB9CiAKIHZvaWQgU1ZHUm9vdElubGluZUJveDo6Y29tcHV0ZVBlckNoYXJhY3Rl
ckxheW91dEluZm9ybWF0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
b250LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250LmNwcAppbmRleCBlMDJmY2VkNzRm
OWFhZGE2NzM3ODRlYjMyZTYwNjBkMDg3MTllYTgyLi4zMTQ0ZWRkODgwZjRlNzZlZjczNjY1ZWMy
MmJmMmI2MWM5YWYyMTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnQuY3BwCkBAIC01MzIsNyArNTMyLDcg
QEAgdm9pZCBGb250OjpkcmF3VGV4dFVzaW5nU1ZHRm9udChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzVmFs
aWQpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBhcmJpdGFyeSBTVkcgY29u
dGVudCBhcyBnbHlwaCAoY3VycmVudGx5IGxpbWl0ZWQgdG8gPGdseXBoIGQ9Ii4uLiI+IHNpdHVh
dGlvbnMpLgogICAgICAgICAgICAgICAgIGlmICghaWRlbnRpZmllci5wYXRoRGF0YS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2F2ZSgpOworICAgICAgICAgICAg
ICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOwog
CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgZ2x5cGhPcmlnaW4uc2V0WChpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWCAq
IHNjYWxlKTsKQEAgLTU1Myw4ICs1NTMsNiBAQCB2b2lkIEZvbnQ6OmRyYXdUZXh0VXNpbmdTVkdG
b250KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLAogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlUGFpbnRp
bmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UocmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQYXJl
bnQsIGNvbnRleHQsIHJlc291cmNlTW9kZSwgJmdseXBoUGF0aCk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQo=
</data>
<flag name="review"
          id="83250"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>