<?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>121784</bug_id>
          
          <creation_ts>2013-09-23 05:13:39 -0700</creation_ts>
          <short_desc>Rename RenderObject::first/lastChild to RenderObject::first/lastChildSlow</short_desc>
          <delta_ts>2013-09-23 12:31:37 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>philn</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>932112</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-23 05:13:39 -0700</bug_when>
    <thetext>This will make it obvious in code where typing should be tightened.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932194</commentid>
    <comment_count>1</comment_count>
      <attachid>212366</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-23 10:53:27 -0700</bug_when>
    <thetext>Created attachment 212366
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932199</commentid>
    <comment_count>2</comment_count>
      <attachid>212366</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-23 10:59:55 -0700</bug_when>
    <thetext>Comment on attachment 212366
patch

Attachment 212366 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/2053161</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932200</commentid>
    <comment_count>3</comment_count>
      <attachid>212366</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-09-23 11:04:08 -0700</bug_when>
    <thetext>Comment on attachment 212366
patch

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

I guess we can and should tighten all these things, but here&apos;s some whining anyway:

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:328
&gt; -    return renderer-&gt;firstChild() &amp;&amp; renderer-&gt;firstChild()-&gt;isInlineElementContinuation();
&gt; +    return renderer-&gt;firstChildSlow() &amp;&amp; renderer-&gt;firstChildSlow()-&gt;isInlineElementContinuation();

Should we cache it in a local here to avoid double virtual dispatch?

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:370
&gt; -    return renderer-&gt;lastChild() &amp;&amp; isInlineWithContinuation(renderer-&gt;lastChild());
&gt; +    return renderer-&gt;lastChildSlow() &amp;&amp; isInlineWithContinuation(renderer-&gt;lastChildSlow());

And here.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:464
&gt; -            if (firstChild == parent-&gt;firstChild())
&gt; +            if (firstChild == parent-&gt;firstChildSlow())
&gt;                  break;
&gt; -            firstChild = parent-&gt;firstChild();
&gt; +            firstChild = parent-&gt;firstChildSlow();

Also here.

&gt; Source/WebCore/dom/ContainerNode.cpp:898
&gt; -        if (o-&gt;firstChild())
&gt; -            o = o-&gt;firstChild();
&gt; +        if (o-&gt;firstChildSlow())
&gt; +            o = o-&gt;firstChildSlow();

etc.

&gt; Source/WebCore/dom/ContainerNode.cpp:958
&gt; -        if (o-&gt;lastChild())
&gt; -            o = o-&gt;lastChild();
&gt; +        if (o-&gt;lastChildSlow())
&gt; +            o = o-&gt;lastChildSlow();

etc.

&gt; Source/WebCore/rendering/RenderBlock.cpp:1081
&gt; -    if (prev &amp;&amp; prev-&gt;firstChild() &amp;&amp; prev-&gt;firstChild()-&gt;isInline() &amp;&amp; prev-&gt;firstChild()-&gt;isRunIn())
&gt; +    if (prev &amp;&amp; prev-&gt;firstChildSlow() &amp;&amp; prev-&gt;firstChildSlow()-&gt;isInline() &amp;&amp; prev-&gt;firstChildSlow()-&gt;isRunIn())

Oh here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932201</commentid>
    <comment_count>4</comment_count>
      <attachid>212366</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-23 11:05:24 -0700</bug_when>
    <thetext>Comment on attachment 212366
patch

Attachment 212366 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/2053164</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932202</commentid>
    <comment_count>5</comment_count>
      <attachid>212368</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-23 11:06:07 -0700</bug_when>
    <thetext>Created attachment 212368
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932203</commentid>
    <comment_count>6</comment_count>
      <attachid>212368</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-09-23 11:07:20 -0700</bug_when>
    <thetext>Comment on attachment 212368
another

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932205</commentid>
    <comment_count>7</comment_count>
      <attachid>212368</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-23 11:12:43 -0700</bug_when>
    <thetext>Comment on attachment 212368
another

Attachment 212368 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/2118005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932206</commentid>
    <comment_count>8</comment_count>
      <attachid>212368</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-23 11:13:29 -0700</bug_when>
    <thetext>Comment on attachment 212368
another

Attachment 212368 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/2114008</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932209</commentid>
    <comment_count>9</comment_count>
      <attachid>212370</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-23 11:24:04 -0700</bug_when>
    <thetext>Created attachment 212370
yet another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932213</commentid>
    <comment_count>10</comment_count>
      <attachid>212370</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-23 11:33:45 -0700</bug_when>
    <thetext>Comment on attachment 212370
yet another

Attachment 212370 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/2123008</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932215</commentid>
    <comment_count>11</comment_count>
      <attachid>212370</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-23 11:35:42 -0700</bug_when>
    <thetext>Comment on attachment 212370
yet another

Attachment 212370 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1903241</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932219</commentid>
    <comment_count>12</comment_count>
      <attachid>212374</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-23 11:41:16 -0700</bug_when>
    <thetext>Created attachment 212374
yet yet another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932244</commentid>
    <comment_count>13</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-23 12:31:37 -0700</bug_when>
    <thetext>https://trac.webkit.org/r156285 (accessibility tests and gtk build fixed)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212366</attachid>
            <date>2013-09-23 10:53:27 -0700</date>
            <delta_ts>2013-09-23 11:06:07 -0700</delta_ts>
            <desc>patch</desc>
            <filename>renderobject-slow.patch</filename>
            <type>text/plain</type>
            <size>50454</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEzLTA5LTIzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgUmVuZGVyT2JqZWN0
OjpmaXJzdC9sYXN0Q2hpbGQgdG8gUmVuZGVyT2JqZWN0OjpmaXJzdC9sYXN0Q2hpbGRTbG93Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE3ODQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHdpbGwg
bWFrZSBpdCBvYnZpb3VzIGluIGNvZGUgd2hlcmUgdHlwaW5nIHNob3VsZCBiZSB0aWdodGVuZWQu
CisgICAgICAgIEhhbmRsZWQgc29tZSBzaW1wbGUgY2FzZXMgYnkgdGlnaHRlbmluZyB0aGUgY29k
ZSBpbnN0ZWFkIG9mIHJlbmFtaW5nLgorCiAyMDEzLTA5LTIzICBBbnR0aSBLb2l2aXN0byAgPGFu
dHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAJKHJldmlzaW9uIDE1NjI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1OCw3ICs3
NTgsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTdHlsZVJhbmdlCiAgICAgLy8g
dHJhdmVyc2UgYmFja3dhcmQgYnkgcmVuZGVyZXIgdG8gbG9vayBmb3Igc3R5bGUgY2hhbmdlCiAg
ICAgZm9yIChSZW5kZXJPYmplY3QqIHIgPSByZW5kZXJlci0+cHJldmlvdXNJblByZU9yZGVyKCk7
IHI7IHIgPSByLT5wcmV2aW91c0luUHJlT3JkZXIoKSkgewogICAgICAgICAvLyBza2lwIG5vbi1s
ZWFmIG5vZGVzCi0gICAgICAgIGlmIChyLT5maXJzdENoaWxkKCkpCisgICAgICAgIGlmIChyLT5m
aXJzdENoaWxkU2xvdygpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgLy8gc3Rv
cCBhdCBzdHlsZSBjaGFuZ2UKQEAgLTc4MSw3ICs3ODEsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0
aW9uIGVuZE9mU3R5bGVSYW5nZShjCiAgICAgLy8gdHJhdmVyc2UgZm9yd2FyZCBieSByZW5kZXJl
ciB0byBsb29rIGZvciBzdHlsZSBjaGFuZ2UKICAgICBmb3IgKFJlbmRlck9iamVjdCogciA9IHJl
bmRlcmVyLT5uZXh0SW5QcmVPcmRlcigpOyByOyByID0gci0+bmV4dEluUHJlT3JkZXIoKSkgewog
ICAgICAgICAvLyBza2lwIG5vbi1sZWFmIG5vZGVzCi0gICAgICAgIGlmIChyLT5maXJzdENoaWxk
KCkpCisgICAgICAgIGlmIChyLT5maXJzdENoaWxkU2xvdygpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKICAgICAgICAgLy8gc3RvcCBhdCBzdHlsZSBjaGFuZ2UKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcg
KzE3Niw3IEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkSW4KICAgICB3
aGlsZSAocikgewogICAgICAgICBpZiAoci0+aXNSZW5kZXJCbG9jaygpKQogICAgICAgICAgICAg
cmV0dXJuIHI7Ci0gICAgICAgIGlmIChSZW5kZXJPYmplY3QqIGNoaWxkID0gci0+Zmlyc3RDaGls
ZCgpKQorICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHItPmZpcnN0Q2hpbGRTbG93
KCkpCiAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7CiAgICAgICAgIHIgPSB0b1JlbmRlcklubGlu
ZShyKS0+Y29udGludWF0aW9uKCk7IAogICAgIH0KQEAgLTE4Niw3ICsxODYsNyBAQCBzdGF0aWMg
aW5saW5lIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZEluCiAKIHN0YXRpYyBpbmxpbmUgUmVuZGVy
T2JqZWN0KiBmaXJzdENoaWxkQ29uc2lkZXJpbmdDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcikKIHsKLSAgICBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQgPSByZW5kZXJlci0+Zmly
c3RDaGlsZCgpOworICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCA9IHJlbmRlcmVyLT5maXJz
dENoaWxkU2xvdygpOwogCiAgICAgaWYgKCFmaXJzdENoaWxkICYmIGlzSW5saW5lV2l0aENvbnRp
bnVhdGlvbihyZW5kZXJlcikpCiAgICAgICAgIGZpcnN0Q2hpbGQgPSBmaXJzdENoaWxkSW5Db250
aW51YXRpb24ocmVuZGVyZXIpOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgUmVu
ZGVyT2JqZWN0KiBmaXJzdENoaWxkQ28KIAogc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGxh
c3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7
Ci0gICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQgPSByZW5kZXJlci0+bGFzdENoaWxkKCk7Cisg
ICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQgPSByZW5kZXJlci0+bGFzdENoaWxkU2xvdygpOwog
ICAgIFJlbmRlck9iamVjdCogcHJldjsKICAgICBSZW5kZXJPYmplY3QqIGN1ciA9IHJlbmRlcmVy
OwogCkBAIC0yMDcsNyArMjA3LDcgQEAgc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGxhc3RD
aGlsZENvbgogICAgIHdoaWxlIChjdXIpIHsKICAgICAgICAgcHJldiA9IGN1cjsKIAotICAgICAg
ICBpZiAoUmVuZGVyT2JqZWN0KiBsYyA9IGN1ci0+bGFzdENoaWxkKCkpCisgICAgICAgIGlmIChS
ZW5kZXJPYmplY3QqIGxjID0gY3VyLT5sYXN0Q2hpbGRTbG93KCkpCiAgICAgICAgICAgICBsYXN0
Q2hpbGQgPSBsYzsKIAogICAgICAgICBpZiAoY3VyLT5pc1JlbmRlcklubGluZSgpKSB7CkBAIC0z
MjUsNyArMzI1LDcgQEAgc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGNoaWxkQmVmb3JlQwog
CiBzdGF0aWMgaW5saW5lIGJvb2wgZmlyc3RDaGlsZElzSW5saW5lQ29udGludWF0aW9uKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5maXJzdENoaWxkKCkg
JiYgcmVuZGVyZXItPmZpcnN0Q2hpbGQoKS0+aXNJbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7
CisgICAgcmV0dXJuIHJlbmRlcmVyLT5maXJzdENoaWxkU2xvdygpICYmIHJlbmRlcmVyLT5maXJz
dENoaWxkU2xvdygpLT5pc0lubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsKIH0KIAogQWNjZXNz
aWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6cHJldmlvdXNTaWJsaW5n
KCkgY29uc3QKQEAgLTM0NCw5ICszNDQsOSBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3Np
YmlsaXR5UmVuZGVyCiAgICAgLy8gQ2FzZSAyOiBBbm9ueW1vdXMgYmxvY2sgcGFyZW50IG9mIHRo
ZSBlbmQgb2YgYSBjb250aW51YXRpb24gLSBza2lwIGFsbCB0aGUgd2F5IHRvIGJlZm9yZQogICAg
IC8vIHRoZSBwYXJlbnQgb2YgdGhlIHN0YXJ0LCBzaW5jZSBldmVyeXRoaW5nIGluIGJldHdlZW4g
d2lsbCBiZSBsaW5rZWQgdXAgdmlhIHRoZSBjb250aW51YXRpb24uCiAgICAgZWxzZSBpZiAobV9y
ZW5kZXJlci0+aXNBbm9ueW1vdXNCbG9jaygpICYmIGZpcnN0Q2hpbGRJc0lubGluZUNvbnRpbnVh
dGlvbihtX3JlbmRlcmVyKSkgewotICAgICAgICBSZW5kZXJPYmplY3QqIGZpcnN0UGFyZW50ID0g
c3RhcnRPZkNvbnRpbnVhdGlvbnMobV9yZW5kZXJlci0+Zmlyc3RDaGlsZCgpKS0+cGFyZW50KCk7
CisgICAgICAgIFJlbmRlck9iamVjdCogZmlyc3RQYXJlbnQgPSBzdGFydE9mQ29udGludWF0aW9u
cyhtX3JlbmRlcmVyLT5maXJzdENoaWxkU2xvdygpKS0+cGFyZW50KCk7CiAgICAgICAgIHdoaWxl
IChmaXJzdENoaWxkSXNJbmxpbmVDb250aW51YXRpb24oZmlyc3RQYXJlbnQpKQotICAgICAgICAg
ICAgZmlyc3RQYXJlbnQgPSBzdGFydE9mQ29udGludWF0aW9ucyhmaXJzdFBhcmVudC0+Zmlyc3RD
aGlsZCgpKS0+cGFyZW50KCk7CisgICAgICAgICAgICBmaXJzdFBhcmVudCA9IHN0YXJ0T2ZDb250
aW51YXRpb25zKGZpcnN0UGFyZW50LT5maXJzdENoaWxkU2xvdygpKS0+cGFyZW50KCk7CiAgICAg
ICAgIHByZXZpb3VzU2libGluZyA9IGZpcnN0UGFyZW50LT5wcmV2aW91c1NpYmxpbmcoKTsKICAg
ICB9CiAKQEAgLTM2Nyw3ICszNjcsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmls
aXR5UmVuZGVyCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBsYXN0Q2hpbGRIYXNDb250aW51YXRpb24o
UmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gcmVuZGVyZXItPmxhc3RDaGls
ZCgpICYmIGlzSW5saW5lV2l0aENvbnRpbnVhdGlvbihyZW5kZXJlci0+bGFzdENoaWxkKCkpOwor
ICAgIHJldHVybiByZW5kZXJlci0+bGFzdENoaWxkU2xvdygpICYmIGlzSW5saW5lV2l0aENvbnRp
bnVhdGlvbihyZW5kZXJlci0+bGFzdENoaWxkU2xvdygpKTsKIH0KIAogQWNjZXNzaWJpbGl0eU9i
amVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bmV4dFNpYmxpbmcoKSBjb25zdApAQCAt
Mzg2LDkgKzM4Niw5IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXIK
ICAgICAvLyBDYXNlIDI6IEFub255bW91cyBibG9jayBwYXJlbnQgb2YgdGhlIHN0YXJ0IG9mIGEg
Y29udGludWF0aW9uIC0gc2tpcCBhbGwgdGhlIHdheSB0bwogICAgIC8vIGFmdGVyIHRoZSBwYXJl
bnQgb2YgdGhlIGVuZCwgc2luY2UgZXZlcnl0aGluZyBpbiBiZXR3ZWVuIHdpbGwgYmUgbGlua2Vk
IHVwIHZpYSB0aGUgY29udGludWF0aW9uLgogICAgIGVsc2UgaWYgKG1fcmVuZGVyZXItPmlzQW5v
bnltb3VzQmxvY2soKSAmJiBsYXN0Q2hpbGRIYXNDb250aW51YXRpb24obV9yZW5kZXJlcikpIHsK
LSAgICAgICAgUmVuZGVyT2JqZWN0KiBsYXN0UGFyZW50ID0gZW5kT2ZDb250aW51YXRpb25zKG1f
cmVuZGVyZXItPmxhc3RDaGlsZCgpKS0+cGFyZW50KCk7CisgICAgICAgIFJlbmRlck9iamVjdCog
bGFzdFBhcmVudCA9IGVuZE9mQ29udGludWF0aW9ucyhtX3JlbmRlcmVyLT5sYXN0Q2hpbGRTbG93
KCkpLT5wYXJlbnQoKTsKICAgICAgICAgd2hpbGUgKGxhc3RDaGlsZEhhc0NvbnRpbnVhdGlvbihs
YXN0UGFyZW50KSkKLSAgICAgICAgICAgIGxhc3RQYXJlbnQgPSBlbmRPZkNvbnRpbnVhdGlvbnMo
bGFzdFBhcmVudC0+bGFzdENoaWxkKCkpLT5wYXJlbnQoKTsKKyAgICAgICAgICAgIGxhc3RQYXJl
bnQgPSBlbmRPZkNvbnRpbnVhdGlvbnMobGFzdFBhcmVudC0+bGFzdENoaWxkU2xvdygpKS0+cGFy
ZW50KCk7CiAgICAgICAgIG5leHRTaWJsaW5nID0gbGFzdFBhcmVudC0+bmV4dFNpYmxpbmcoKTsK
ICAgICB9CiAKQEAgLTQ0OSw3ICs0NDksNyBAQCBSZW5kZXJPYmplY3QqIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6CiAgICAgICAgIHBhcmVudCA9IHN0YXJ0T2ZDb250czsKICAgICAKICAgICAv
LyBDYXNlIDM6IFRoZSBmaXJzdCBzaWJsaW5nIGlzIHRoZSBiZWdpbm5pbmcgb2YgYSBjb250aW51
YXRpb24gY2hhaW4uIEZpbmQgdGhlIG9yaWdpbiBvZiB0aGF0IGNvbnRpbnVhdGlvbi4KLSAgICBl
bHNlIGlmIChwYXJlbnQgJiYgKGZpcnN0Q2hpbGQgPSBwYXJlbnQtPmZpcnN0Q2hpbGQoKSkgJiYg
Zmlyc3RDaGlsZC0+bm9kZSgpKSB7CisgICAgZWxzZSBpZiAocGFyZW50ICYmIChmaXJzdENoaWxk
ID0gcGFyZW50LT5maXJzdENoaWxkU2xvdygpKSAmJiBmaXJzdENoaWxkLT5ub2RlKCkpIHsKICAg
ICAgICAgLy8gR2V0IHRoZSBub2RlJ3MgcmVuZGVyZXIgYW5kIGZvbGxvdyB0aGF0IGNvbnRpbnVh
dGlvbiBjaGFpbiB1bnRpbCB0aGUgZmlyc3QgY2hpbGQgaXMgZm91bmQKICAgICAgICAgUmVuZGVy
T2JqZWN0KiBub2RlUmVuZGVyRmlyc3RDaGlsZCA9IGZpcnN0Q2hpbGQtPm5vZGUoKS0+cmVuZGVy
ZXIoKTsKICAgICAgICAgd2hpbGUgKG5vZGVSZW5kZXJGaXJzdENoaWxkICE9IGZpcnN0Q2hpbGQp
IHsKQEAgLTQ1OSw5ICs0NTksOSBAQCBSZW5kZXJPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmaXJzdENoaWxkID09IHBhcmVudC0+Zmlyc3RD
aGlsZCgpKQorICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQgPT0gcGFyZW50LT5maXJzdENoaWxk
U2xvdygpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZmlyc3RDaGlsZCA9
IHBhcmVudC0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgZmlyc3RDaGlsZCA9IHBhcmVudC0+
Zmlyc3RDaGlsZFNsb3coKTsKICAgICAgICAgICAgIGlmICghZmlyc3RDaGlsZC0+bm9kZSgpKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgbm9kZVJlbmRlckZpcnN0Q2hpbGQg
PSBmaXJzdENoaWxkLT5ub2RlKCktPnJlbmRlcmVyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
Q29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5NCw4ICs4OTQsOCBAQCBib29s
IENvbnRhaW5lck5vZGU6OmdldFVwcGVyTGVmdENvcm5lcihGCiAgICAgLy8gZmluZCB0aGUgbmV4
dCB0ZXh0L2ltYWdlIGNoaWxkLCB0byBnZXQgYSBwb3NpdGlvbgogICAgIHdoaWxlIChvKSB7CiAg
ICAgICAgIHAgPSBvOwotICAgICAgICBpZiAoby0+Zmlyc3RDaGlsZCgpKQotICAgICAgICAgICAg
byA9IG8tPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgaWYgKG8tPmZpcnN0Q2hpbGRTbG93KCkpCisg
ICAgICAgICAgICBvID0gby0+Zmlyc3RDaGlsZFNsb3coKTsKICAgICAgICAgZWxzZSBpZiAoby0+
bmV4dFNpYmxpbmcoKSkKICAgICAgICAgICAgIG8gPSBvLT5uZXh0U2libGluZygpOwogICAgICAg
ICBlbHNlIHsKQEAgLTk1NCw4ICs5NTQsOCBAQCBib29sIENvbnRhaW5lck5vZGU6OmdldExvd2Vy
UmlnaHRDb3JuZXIoCiAKICAgICAvLyBmaW5kIHRoZSBsYXN0IHRleHQvaW1hZ2UgY2hpbGQsIHRv
IGdldCBhIHBvc2l0aW9uCiAgICAgd2hpbGUgKG8pIHsKLSAgICAgICAgaWYgKG8tPmxhc3RDaGls
ZCgpKQotICAgICAgICAgICAgbyA9IG8tPmxhc3RDaGlsZCgpOworICAgICAgICBpZiAoby0+bGFz
dENoaWxkU2xvdygpKQorICAgICAgICAgICAgbyA9IG8tPmxhc3RDaGlsZFNsb3coKTsKICAgICAg
ICAgZWxzZSBpZiAoby0+cHJldmlvdXNTaWJsaW5nKCkpCiAgICAgICAgICAgICBvID0gby0+cHJl
dmlvdXNTaWJsaW5nKCk7CiAgICAgICAgIGVsc2UgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L1Bvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24u
Y3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NTQsNyArODU0LDcgQEAgc3RhdGljIGludCBib3VuZGluZ0Jv
eExvZ2ljYWxIZWlnaHQoUmVuZAogYm9vbCBQb3NpdGlvbjo6aGFzUmVuZGVyZWROb25Bbm9ueW1v
dXNEZXNjZW5kYW50c1dpdGhIZWlnaHQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBS
ZW5kZXJPYmplY3QqIHN0b3AgPSByZW5kZXJlci0+bmV4dEluUHJlT3JkZXJBZnRlckNoaWxkcmVu
KCk7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QgKm8gPSByZW5kZXJlci0+Zmlyc3RDaGlsZCgpOyBv
ICYmIG8gIT0gc3RvcDsgbyA9IG8tPm5leHRJblByZU9yZGVyKCkpCisgICAgZm9yIChSZW5kZXJP
YmplY3QgKm8gPSByZW5kZXJlci0+Zmlyc3RDaGlsZFNsb3coKTsgbyAmJiBvICE9IHN0b3A7IG8g
PSBvLT5uZXh0SW5QcmVPcmRlcigpKQogICAgICAgICBpZiAoby0+bm9uUHNldWRvTm9kZSgpKSB7
CiAgICAgICAgICAgICBpZiAoKG8tPmlzVGV4dCgpICYmIGJvdW5kaW5nQm94TG9naWNhbEhlaWdo
dChvLCB0b1JlbmRlclRleHQobyktPmxpbmVzQm91bmRpbmdCb3goKSkpCiAgICAgICAgICAgICAg
ICAgfHwgKG8tPmlzTGluZUJyZWFrKCkgJiYgYm91bmRpbmdCb3hMb2dpY2FsSGVpZ2h0KG8sIHRv
UmVuZGVyTGluZUJyZWFrKG8pLT5saW5lc0JvdW5kaW5nQm94KCkpKQpAQCAtMTEzNCwxMCArMTEz
NCwxMCBAQCB2b2lkIFBvc2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmCiAKIHN0YXRp
YyBib29sIGlzTm9uVGV4dExlYWZDaGlsZChSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKLSAgICBp
ZiAob2JqZWN0LT5maXJzdENoaWxkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAo
b2JqZWN0LT5pc1RleHQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICh0b1JlbmRl
ckVsZW1lbnQob2JqZWN0KS0+Zmlyc3RDaGlsZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVy
YXRvci5jcHAJKHJldmlzaW9uIDE1NjI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQyLDcgKzY0Miw3IEBAIHN0YXRpYyBp
bmxpbmUgUmVuZGVyVGV4dCogZmlyc3RSZW5kZXJUZXgKICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgY2hlY2sgZGVzY2VuZGVudCBvYmplY3RzPwotICAgIGZv
ciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RMZXR0ZXItPmZpcnN0Q2hpbGQoKTsgY3Vy
cmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICBmb3IgKFJlbmRl
ck9iamVjdCogY3VycmVudCA9IGZpcnN0TGV0dGVyLT5maXJzdENoaWxkU2xvdygpOyBjdXJyZW50
OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoY3VycmVu
dC0+aXNUZXh0KCkpCiAgICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJUZXh0KGN1cnJlbnQpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCShyZXZpc2lv
biAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODk2LDcgKzg5Niw3IEBAIGJvb2wgaXNFbXB0eVRhYmxlQ2VsbChjb25z
dCBOb2RlKiBub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBDaGVjayB0aGF0
IHRoZSB0YWJsZSBjZWxsIGNvbnRhaW5zIG5vIGNoaWxkIHJlbmRlcmVycyBleGNlcHQgZm9yIHBl
cmhhcHMgYSBzaW5nbGUgPGJyPi4KLSAgICBSZW5kZXJPYmplY3QqIGNoaWxkUmVuZGVyZXIgPSBy
ZW5kZXJlci0+Zmlyc3RDaGlsZCgpOworICAgIFJlbmRlck9iamVjdCogY2hpbGRSZW5kZXJlciA9
IHRvUmVuZGVyRWxlbWVudChyZW5kZXJlciktPmZpcnN0Q2hpbGQoKTsKICAgICBpZiAoIWNoaWxk
UmVuZGVyZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmICghY2hpbGRSZW5kZXJlci0+
aXNCUigpKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJl
ZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQuY3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6Z2F0aGVyTGF5
ZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChyZW5kZXJlciA9IHJlbmRlcmVy
LT5maXJzdENoaWxkKCk7IHJlbmRlcmVyOyByZW5kZXJlciA9IHJlbmRlcmVyLT5uZXh0U2libGlu
ZygpKQorICAgIGZvciAocmVuZGVyZXIgPSByZW5kZXJlci0+Zmlyc3RDaGlsZFNsb3coKTsgcmVu
ZGVyZXI7IHJlbmRlcmVyID0gcmVuZGVyZXItPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGdhdGhl
ckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KGVycm9yU3RyaW5nLCByZW5kZXJlciwg
bGF5ZXJzKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVM
YXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRh
YmxlTGF5b3V0LmNwcAkocmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDcg
QEAgaW50IEZpeGVkVGFibGVMYXlvdXQ6OmNhbGNXaWR0aEFycmF5KCkKICAgICB1bnNpZ25lZCBj
dXJyZW50Q29sdW1uID0gMDsKIAogICAgIFJlbmRlck9iamVjdCogZmlyc3RSb3cgPSBzZWN0aW9u
LT5maXJzdENoaWxkKCk7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RSb3ct
PmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAg
ICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdFJvdy0+Zmlyc3RDaGlsZFNsb3coKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKCFjaGls
ZC0+aXNUYWJsZUNlbGwoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxNTYyNzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2OCw3ICsyNjgsNyBAQCBSZW5kZXJMaW5lQm94TGlzdCYgSW5saW5lRmxvd0JveDo6
cmVuZGVyCiAgICAgcmV0dXJuIHRvUmVuZGVySW5saW5lKHJlbmRlcmVyKCkpLmxpbmVCb3hlcygp
OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNMYXN0Q2hpbGRGb3JSZW5kZXJlcihSZW5kZXJP
YmplY3QqIGFuY2VzdG9yLCBSZW5kZXJPYmplY3QqIGNoaWxkKQorc3RhdGljIGlubGluZSBib29s
IGlzTGFzdENoaWxkRm9yUmVuZGVyZXIoUmVuZGVyRWxlbWVudCogYW5jZXN0b3IsIFJlbmRlck9i
amVjdCogY2hpbGQpCiB7CiAgICAgaWYgKCFjaGlsZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMjc3LDcgKzI3Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0xhc3RDaGlsZEZvclJlbmRl
cmUKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBSZW5kZXJPYmplY3QqIGN1cnIgPSBjaGls
ZDsKLSAgICBSZW5kZXJPYmplY3QqIHBhcmVudCA9IGN1cnItPnBhcmVudCgpOworICAgIFJlbmRl
ckVsZW1lbnQqIHBhcmVudCA9IGN1cnItPnBhcmVudCgpOwogICAgIHdoaWxlIChwYXJlbnQgJiYg
KCFwYXJlbnQtPmlzUmVuZGVyQmxvY2soKSB8fCBwYXJlbnQtPmlzSW5saW5lKCkpKSB7CiAgICAg
ICAgIGlmIChwYXJlbnQtPmxhc3RDaGlsZCgpICE9IGN1cnIpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lSXRlcmF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lSXRlcmF0b3IuaAko
cmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUl0ZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw3ICsxODAsNyBAQCBzdGF0aWMgYm9vbCBpc0Vt
cHR5SW5saW5lKFJlbmRlck9iamVjdCogCiAgICAgaWYgKCFvYmplY3QtPmlzUmVuZGVySW5saW5l
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJy
ID0gb2JqZWN0LT5maXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygp
KSB7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSB0b1JlbmRlckVsZW1lbnQob2JqZWN0
KS0+Zmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgewogICAg
ICAgICBpZiAoY3Vyci0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChjdXJyLT5pc1RleHQoKSAmJiB0b1JlbmRlclRl
eHQoY3VyciktPmlzQWxsQ29sbGFwc2libGVXaGl0ZXNwYWNlKCkpCkBAIC0yMDYsNyArMjA2LDcg
QEAgc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGJpZGlOZXh0U2hhcgogICAgIHdoaWxlIChj
dXJyZW50KSB7CiAgICAgICAgIG5leHQgPSAwOwogICAgICAgICBpZiAoIW9sZEVuZE9mSW5saW5l
ICYmICFpc0l0ZXJhdG9yVGFyZ2V0KGN1cnJlbnQpKSB7Ci0gICAgICAgICAgICBuZXh0ID0gY3Vy
cmVudC0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgbmV4dCA9IHRvUmVuZGVyRWxlbWVudChj
dXJyZW50KS0+Zmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgbm90aWZ5T2JzZXJ2ZXJFbnRlcmVk
T2JqZWN0KG9ic2VydmVyLCBuZXh0KTsKICAgICAgICAgfQogCkBAIC0yNzMsNyArMjczLDcgQEAg
c3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGJpZGlOZXh0SW5jbAogICAgIHJldHVybiBiaWRp
TmV4dFNoYXJlZChyb290LCBjdXJyZW50LCBvYnNlcnZlciwgSW5jbHVkZUVtcHR5SW5saW5lcywg
ZW5kT2ZJbmxpbmVQdHIpOwogfQogCi1zdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogYmlkaUZp
cnN0U2tpcHBpbmdFbXB0eUlubGluZXMoUmVuZGVyT2JqZWN0KiByb290LCBJbmxpbmVCaWRpUmVz
b2x2ZXIqIHJlc29sdmVyID0gMCkKK3N0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBiaWRpRmly
c3RTa2lwcGluZ0VtcHR5SW5saW5lcyhSZW5kZXJFbGVtZW50KiByb290LCBJbmxpbmVCaWRpUmVz
b2x2ZXIqIHJlc29sdmVyID0gMCkKIHsKICAgICBSZW5kZXJPYmplY3QqIG8gPSByb290LT5maXJz
dENoaWxkKCk7CiAgICAgaWYgKCFvKQpAQCAtMzAxLDcgKzMwMSw3IEBAIHN0YXRpYyBpbmxpbmUg
UmVuZGVyT2JqZWN0KiBiaWRpRmlyc3RTa2kKIH0KIAogLy8gRklYTUU6IFRoaXMgbWV0aG9kIG5l
ZWRzIHRvIGJlIHJlbmFtZWQgd2hlbiBiaWRpTmV4dCBmaW5kcyBhIGdvb2QgbmFtZS4KLXN0YXRp
YyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBiaWRpRmlyc3RJbmNsdWRpbmdFbXB0eUlubGluZXMoUmVu
ZGVyT2JqZWN0KiByb290KQorc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGJpZGlGaXJzdElu
Y2x1ZGluZ0VtcHR5SW5saW5lcyhSZW5kZXJFbGVtZW50KiByb290KQogewogICAgIFJlbmRlck9i
amVjdCogbyA9IHJvb3QtPmZpcnN0Q2hpbGQoKTsKICAgICAvLyBJZiBlaXRoZXIgdGhlcmUgYXJl
IG5vIGNoaWxkcmVuIHRvIHdhbGssIG9yIHRoZSBmaXJzdCBvbmUgaXMgY29ycmVjdApAQCAtMzI0
LDcgKzMyNCw3IEBAIGlubGluZSB2b2lkIElubGluZUl0ZXJhdG9yOjpmYXN0SW5jcmVtZW4KIC8v
IGl0IHNob3VsZG4ndCB1c2UgZnVuY3Rpb25zIGNhbGxlZCBiaWRpRmlyc3QgYW5kIGJpZGlOZXh0
LgogY2xhc3MgSW5saW5lV2Fsa2VyIHsKIHB1YmxpYzoKLSAgICBJbmxpbmVXYWxrZXIoUmVuZGVy
T2JqZWN0KiByb290KQorICAgIElubGluZVdhbGtlcihSZW5kZXJFbGVtZW50KiByb290KQogICAg
ICAgICA6IG1fcm9vdChyb290KQogICAgICAgICAsIG1fY3VycmVudCgwKQogICAgICAgICAsIG1f
YXRFbmRPZklubGluZShmYWxzZSkKQEAgLTMzMyw3ICszMzMsNyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fY3VycmVudCA9IGJpZGlGaXJzdEluY2x1ZGluZ0VtcHR5SW5saW5lcyhtX3Jvb3QpOwogICAg
IH0KIAotICAgIFJlbmRlck9iamVjdCogcm9vdCgpIHsgcmV0dXJuIG1fcm9vdDsgfQorICAgIFJl
bmRlckVsZW1lbnQqIHJvb3QoKSB7IHJldHVybiBtX3Jvb3Q7IH0KICAgICBSZW5kZXJPYmplY3Qq
IGN1cnJlbnQoKSB7IHJldHVybiBtX2N1cnJlbnQ7IH0KIAogICAgIGJvb2wgYXRFbmRPZklubGlu
ZSgpIHsgcmV0dXJuIG1fYXRFbmRPZklubGluZTsgfQpAQCAtMzQ2LDcgKzM0Niw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG1fY3VycmVudDsKICAgICB9CiBwcml2YXRlOgotICAgIFJlbmRl
ck9iamVjdCogbV9yb290OworICAgIFJlbmRlckVsZW1lbnQqIG1fcm9vdDsKICAgICBSZW5kZXJP
YmplY3QqIG1fY3VycmVudDsKICAgICBib29sIG1fYXRFbmRPZklubGluZTsKIH07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDE1NjI3OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNzgsNyArMTA3OCw3IEBAIHN0YXRpYyBib29sIGNhbk1lcmdlQ29udGlndW91c0Fu
b255bW91c0IKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRklYTUU6IFRoaXMgY2hl
Y2sgaXNuJ3QgcmVxdWlyZWQgd2hlbiBpbmxpbmUgcnVuLWlucyBjYW4ndCBiZSBzcGxpdCBpbnRv
IGNvbnRpbnVhdGlvbnMuCi0gICAgaWYgKHByZXYgJiYgcHJldi0+Zmlyc3RDaGlsZCgpICYmIHBy
ZXYtPmZpcnN0Q2hpbGQoKS0+aXNJbmxpbmUoKSAmJiBwcmV2LT5maXJzdENoaWxkKCktPmlzUnVu
SW4oKSkKKyAgICBpZiAocHJldiAmJiBwcmV2LT5maXJzdENoaWxkU2xvdygpICYmIHByZXYtPmZp
cnN0Q2hpbGRTbG93KCktPmlzSW5saW5lKCkgJiYgcHJldi0+Zmlyc3RDaGlsZFNsb3coKS0+aXNS
dW5JbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoKHByZXYgJiYgKHByZXYt
PmlzUnVieVJ1bigpIHx8IHByZXYtPmlzUnVieUJhc2UoKSkpCkBAIC01MDgwLDcgKzUwODAsNyBA
QCBSZW5kZXJPYmplY3QqIElubGluZU1pbk1heEl0ZXJhdG9yOjpuZXh0CiAgICAgICAgIGlmICgh
b2xkRW5kT2ZJbmxpbmUgJiYKICAgICAgICAgICAgIChjdXJyZW50ID09IHBhcmVudCB8fAogICAg
ICAgICAgICAgICghY3VycmVudC0+aXNGbG9hdGluZygpICYmICFjdXJyZW50LT5pc1JlcGxhY2Vk
KCkgJiYgIWN1cnJlbnQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKSkpCi0gICAgICAgICAgICBy
ZXN1bHQgPSBjdXJyZW50LT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICByZXN1bHQgPSBjdXJy
ZW50LT5maXJzdENoaWxkU2xvdygpOwogICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAg
ICAgLy8gV2UgaGl0IHRoZSBlbmQgb2Ygb3VyIGlubGluZS4gKEl0IHdhcyBlbXB0eSwgZS5nLiwg
PHNwYW4+PC9zcGFuPi4pCiAgICAgICAgICAgICBpZiAoIW9sZEVuZE9mSW5saW5lICYmIGN1cnJl
bnQtPmlzUmVuZGVySW5saW5lKCkpIHsKQEAgLTU3NDUsNyArNTc0NSw3IEBAIFJlbmRlckJsb2Nr
KiBSZW5kZXJCbG9jazo6Zmlyc3RMaW5lQmxvY2sKICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB3
aGVuIGJ1dHRvbnMgYXJlIGltcGxlbWVudGVkIHdpdGggYWxpZ24taXRlbXMgaW5zdGVhZAogICAg
ICAgICAvLyBvZiBmbGV4Ym94LgogICAgICAgICBpZiAoZmlyc3RMaW5lQmxvY2stPmlzUmVwbGFj
ZWQoKSB8fCBmaXJzdExpbmVCbG9jay0+aXNGbG9hdGluZygpCi0gICAgICAgICAgICB8fCAhcGFy
ZW50QmxvY2sgfHwgcGFyZW50QmxvY2stPmZpcnN0Q2hpbGQoKSAhPSBmaXJzdExpbmVCbG9jayB8
fCAoIXBhcmVudEJsb2NrLT5pc1JlbmRlckJsb2NrRmxvdygpICYmICFwYXJlbnRCbG9jay0+aXNS
ZW5kZXJCdXR0b24oKSkpCisgICAgICAgICAgICB8fCAhcGFyZW50QmxvY2sgfHwgcGFyZW50Qmxv
Y2stPmZpcnN0Q2hpbGRTbG93KCkgIT0gZmlyc3RMaW5lQmxvY2sgfHwgKCFwYXJlbnRCbG9jay0+
aXNSZW5kZXJCbG9ja0Zsb3coKSAmJiAhcGFyZW50QmxvY2stPmlzUmVuZGVyQnV0dG9uKCkpKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKHBhcmVudEJsb2NrLT5pc1JlbmRlckJsb2NrKCkpOwogICAgICAgICBmaXJzdExpbmVCbG9j
ayA9IHRvUmVuZGVyQmxvY2socGFyZW50QmxvY2spOwpAQCAtNTc4NSw5ICs1Nzg1LDkgQEAgc3Rh
dGljIGlubGluZSBib29sIHNob3VsZFNraXBGb3JGaXJzdExldAogICAgIHJldHVybiBpc1NwYWNl
T3JOZXdsaW5lKGMpIHx8IGMgPT0gbm9CcmVha1NwYWNlIHx8IGlzUHVuY3R1YXRpb25Gb3JGaXJz
dExldHRlcihjKTsKIH0KIAotc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGZpbmRGaXJzdExl
dHRlckJsb2NrKFJlbmRlckJsb2NrKiBzdGFydCkKK3N0YXRpYyBpbmxpbmUgUmVuZGVyRWxlbWVu
dCogZmluZEZpcnN0TGV0dGVyQmxvY2soUmVuZGVyQmxvY2sqIHN0YXJ0KQogewotICAgIFJlbmRl
ck9iamVjdCogZmlyc3RMZXR0ZXJCbG9jayA9IHN0YXJ0OworICAgIFJlbmRlckVsZW1lbnQqIGZp
cnN0TGV0dGVyQmxvY2sgPSBzdGFydDsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAvLyBX
ZSBpbmNsdWRlIGlzUmVuZGVyQnV0dG9uIGluIHRoZXNlIHR3byBjaGVja3MgYmVjYXVzZSBidXR0
b25zIGFyZQogICAgICAgICAvLyBpbXBsZW1lbnRlZCB1c2luZyBmbGV4IGJveCBidXQgc2hvdWxk
IHN0aWxsIHN1cHBvcnQgZmlyc3QtbGV0dGVyLgpAQCAtNTgwMSw5ICs1ODAxLDkgQEAgc3RhdGlj
IGlubGluZSBSZW5kZXJPYmplY3QqIGZpbmRGaXJzdExldAogICAgICAgICBpZiAoY2FuSGF2ZUZp
cnN0TGV0dGVyUmVuZGVyZXIpCiAgICAgICAgICAgICByZXR1cm4gZmlyc3RMZXR0ZXJCbG9jazsK
IAotICAgICAgICBSZW5kZXJPYmplY3QqIHBhcmVudEJsb2NrID0gZmlyc3RMZXR0ZXJCbG9jay0+
cGFyZW50KCk7Ci0gICAgICAgIGlmIChmaXJzdExldHRlckJsb2NrLT5pc1JlcGxhY2VkKCkgfHwg
IXBhcmVudEJsb2NrIHx8IHBhcmVudEJsb2NrLT5maXJzdENoaWxkKCkgIT0gZmlyc3RMZXR0ZXJC
bG9jayB8fCAKLSAgICAgICAgICAgICghcGFyZW50QmxvY2stPmlzUmVuZGVyQmxvY2tGbG93KCkg
JiYgIXBhcmVudEJsb2NrLT5pc1JlbmRlckJ1dHRvbigpKSkKKyAgICAgICAgUmVuZGVyRWxlbWVu
dCogcGFyZW50QmxvY2sgPSBmaXJzdExldHRlckJsb2NrLT5wYXJlbnQoKTsKKyAgICAgICAgaWYg
KGZpcnN0TGV0dGVyQmxvY2stPmlzUmVwbGFjZWQoKSB8fCAhcGFyZW50QmxvY2sgfHwgcGFyZW50
QmxvY2stPmZpcnN0Q2hpbGQoKSAhPSBmaXJzdExldHRlckJsb2NrCisgICAgICAgICAgICB8fCAo
IXBhcmVudEJsb2NrLT5pc1JlbmRlckJsb2NrRmxvdygpICYmICFwYXJlbnRCbG9jay0+aXNSZW5k
ZXJCdXR0b24oKSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgZmlyc3RMZXR0ZXJC
bG9jayA9IHBhcmVudEJsb2NrOwogICAgIH0gCkBAIC01OTQ0LDcgKzU5NDQsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjp1cGRhdGVGaXJzdExldHRlcigpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IERyaWxsIGludG8gaW5saW5lcyBsb29raW5nIGZvciBvdXIgZmlyc3QgdGV4dCBjaGlsZC4KLSAg
ICBSZW5kZXJPYmplY3QqIGN1cnJDaGlsZCA9IGZpcnN0TGV0dGVyQmxvY2stPmZpcnN0Q2hpbGQo
KTsKKyAgICBSZW5kZXJPYmplY3QqIGN1cnJDaGlsZCA9IGZpcnN0TGV0dGVyQmxvY2stPmZpcnN0
Q2hpbGRTbG93KCk7CiAgICAgd2hpbGUgKGN1cnJDaGlsZCkgewogICAgICAgICBpZiAoY3VyckNo
aWxkLT5pc1RleHQoKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTk1Miw3ICs1OTUyLDcgQEAg
dm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlRmlyc3RMZXR0ZXIoKQogICAgICAgICAgICAgY3VyckNo
aWxkID0gY3VyckNoaWxkLT5uZXh0U2libGluZygpOwogICAgICAgICBlbHNlIGlmIChjdXJyQ2hp
bGQtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewogICAgICAgICAgICAgaWYg
KGN1cnJDaGlsZC0+c3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gRklSU1RfTEVUVEVSKSB7Ci0gICAg
ICAgICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5maXJzdENoaWxkKCk7CisgICAgICAg
ICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5maXJzdENoaWxkU2xvdygpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY3VyckNoaWxkID0g
Y3VyckNoaWxkLT5uZXh0U2libGluZygpOwpAQCAtNTk2MSw5ICs1OTYxLDkgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6dXBkYXRlRmlyc3RMZXR0ZXIoKQogICAgICAgICBlbHNlIGlmIChjdXJyQ2hpbGQt
PnN0eWxlKCktPmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikgJiYgY3VyckNoaWxkLT5jYW5I
YXZlR2VuZXJhdGVkQ2hpbGRyZW4oKSkgIHsKICAgICAgICAgICAgIC8vIFdlIGZvdW5kIGEgbG93
ZXItbGV2ZWwgbm9kZSB3aXRoIGZpcnN0LWxldHRlciwgd2hpY2ggc3VwZXJzZWRlcyB0aGUgaGln
aGVyLWxldmVsIHN0eWxlCiAgICAgICAgICAgICBmaXJzdExldHRlckJsb2NrID0gY3VyckNoaWxk
OwotICAgICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5maXJzdENoaWxkKCk7CisgICAg
ICAgICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPmZpcnN0Q2hpbGRTbG93KCk7CiAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5maXJzdENoaWxkKCk7
CisgICAgICAgICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPmZpcnN0Q2hpbGRTbG93KCk7CiAg
ICAgfQogCiAgICAgaWYgKCFjdXJyQ2hpbGQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcAkocmV2aXNpb24gMTU2Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwODIsMTUgKzQwODIsMTQgQEAg
VmlzaWJsZVBvc2l0aW9uIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQbwogICAgICAgICBhZGp1c3Rl
ZFBvaW50Lm1vdmVCeShsb2NhdGlvbigpKTsKIAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiByZW5k
ZXJPYmplY3QgPSBmaXJzdENoaWxkKCk7IHJlbmRlck9iamVjdDsgcmVuZGVyT2JqZWN0ID0gcmVu
ZGVyT2JqZWN0LT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmICgoIXJlbmRlck9iamVjdC0+
Zmlyc3RDaGlsZCgpICYmICFyZW5kZXJPYmplY3QtPmlzSW5saW5lKCkgJiYgIXJlbmRlck9iamVj
dC0+aXNSZW5kZXJCbG9ja0Zsb3coKSApCi0gICAgICAgICAgICB8fCByZW5kZXJPYmplY3QtPnN0
eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIAogICAgICAgICBpZiAoIXJlbmRlck9iamVjdC0+aXNCb3goKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAKICAgICAgICAgUmVuZGVyQm94KiByZW5kZXJlciA9IHRvUmVu
ZGVyQm94KHJlbmRlck9iamVjdCk7CiAKKyAgICAgICAgaWYgKCghcmVuZGVyZXItPmZpcnN0Q2hp
bGQoKSAmJiAhcmVuZGVyZXItPmlzSW5saW5lKCkgJiYgIXJlbmRlcmVyLT5pc1JlbmRlckJsb2Nr
RmxvdygpICkKKyAgICAgICAgICAgIHx8IHJlbmRlcmVyLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkg
IT0gVklTSUJMRSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIExheW91dFVuaXQg
dG9wID0gcmVuZGVyZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBhZGRpbmdUb3AoKSArIChp
c1RhYmxlUm93KCkgPyBMYXlvdXRVbml0KCkgOiByZW5kZXJlci0+eSgpKTsKICAgICAgICAgTGF5
b3V0VW5pdCBib3R0b20gPSB0b3AgKyByZW5kZXJlci0+Y29udGVudEhlaWdodCgpOwogICAgICAg
ICBMYXlvdXRVbml0IGxlZnQgPSByZW5kZXJlci0+Ym9yZGVyTGVmdCgpICsgcmVuZGVyZXItPnBh
ZGRpbmdMZWZ0KCkgKyAoaXNUYWJsZVJvdygpID8gTGF5b3V0VW5pdCgpIDogcmVuZGVyZXItPngo
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNTYyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNiw3ICszMjYsNyBAQCB2b2lkIFJlbmRlckVsZW1l
bnQ6OnJlbW92ZUNoaWxkSW50ZXJuYWwoCiAgICAgICAgIGNhY2hlLT5jaGlsZHJlbkNoYW5nZWQo
dGhpcyk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZExheWVycyhSZW5kZXJPYmplY3QqIG9iaiwgUmVu
ZGVyTGF5ZXIqIHBhcmVudExheWVyLCBSZW5kZXJFbGVtZW50KiYgbmV3T2JqZWN0LCBSZW5kZXJM
YXllciomIGJlZm9yZUNoaWxkKQorc3RhdGljIHZvaWQgYWRkTGF5ZXJzKFJlbmRlckVsZW1lbnQq
IG9iaiwgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyLCBSZW5kZXJFbGVtZW50KiYgbmV3T2JqZWN0
LCBSZW5kZXJMYXllciomIGJlZm9yZUNoaWxkKQogewogICAgIGlmIChvYmotPmhhc0xheWVyKCkp
IHsKICAgICAgICAgaWYgKCFiZWZvcmVDaGlsZCAmJiBuZXdPYmplY3QpIHsKQEAgLTM0MCw4ICsz
NDAsMTAgQEAgc3RhdGljIHZvaWQgYWRkTGF5ZXJzKFJlbmRlck9iamVjdCogb2JqLAogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBvYmotPmZp
cnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGFk
ZExheWVycyhjdXJyLCBwYXJlbnRMYXllciwgbmV3T2JqZWN0LCBiZWZvcmVDaGlsZCk7CisgICAg
Zm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBvYmotPmZpcnN0Q2hpbGQoKTsgY3VycmVudDsg
Y3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQt
PmlzUmVuZGVyRWxlbWVudCgpKQorICAgICAgICAgICAgYWRkTGF5ZXJzKHRvUmVuZGVyRWxlbWVu
dChjdXJyZW50KSwgcGFyZW50TGF5ZXIsIG5ld09iamVjdCwgYmVmb3JlQ2hpbGQpOworICAgIH0K
IH0KIAogdm9pZCBSZW5kZXJFbGVtZW50OjphZGRMYXllcnMoUmVuZGVyTGF5ZXIqIHBhcmVudExh
eWVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCShyZXZp
c2lvbiAxNTYyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBAIHB1YmxpYzoKICAgICBFbGVtZW50KiBu
b25Qc2V1ZG9FbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9FbGVtZW50KFJlbmRlck9iamVjdDo6
bm9uUHNldWRvTm9kZSgpKTsgfQogICAgIEVsZW1lbnQqIGdlbmVyYXRpbmdFbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gdG9FbGVtZW50KFJlbmRlck9iamVjdDo6Z2VuZXJhdGluZ05vZGUoKSk7IH0K
IAotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkKCkgY29uc3QgRklOQUwgeyBy
ZXR1cm4gbV9maXJzdENoaWxkOyB9Ci0gICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGxhc3RDaGls
ZCgpIGNvbnN0IEZJTkFMIHsgcmV0dXJuIG1fbGFzdENoaWxkOyB9CisgICAgUmVuZGVyT2JqZWN0
KiBmaXJzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdENoaWxkOyB9CisgICAgUmVuZGVy
T2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RDaGlsZDsgfQogCiAgICAg
dmlydHVhbCBib29sIGlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKikg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJP
YmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CkBAIC03OSw2
ICs3OSwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgbm9uUHNldWRvTm9kZSgpIGNvbnN0IFdURl9E
RUxFVEVEX0ZVTkNUSU9OOwogICAgIHZvaWQgZ2VuZXJhdGluZ05vZGUoKSBjb25zdCBXVEZfREVM
RVRFRF9GVU5DVElPTjsKICAgICB2b2lkIGlzVGV4dCgpIGNvbnN0IFdURl9ERUxFVEVEX0ZVTkNU
SU9OOworICAgIHZvaWQgaXNSZW5kZXJFbGVtZW50KCkgY29uc3QgV1RGX0RFTEVURURfRlVOQ1RJ
T047CisKKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZFNsb3coKSBjb25zdCB7
IHJldHVybiBmaXJzdENoaWxkKCk7IH0KKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogbGFzdENo
aWxkU2xvdygpIGNvbnN0IHsgcmV0dXJuIGxhc3RDaGlsZCgpOyB9CiAKICAgICBSZW5kZXJPYmpl
Y3QqIG1fZmlyc3RDaGlsZDsKICAgICBSZW5kZXJPYmplY3QqIG1fbGFzdENoaWxkOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lQmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lQmFzZS5jcHAJKHJldmlzaW9u
IDE1NjI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZUJhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHZvaWQgUmVuZGVyRnJhbWVCYXNlOjps
YXlvdXRXaXRoRmxhdHRlbmkKIAogICAgIEFTU0VSVCghY2hpbGRGcmFtZVZpZXctPmxheW91dFBl
bmRpbmcoKSk7CiAgICAgQVNTRVJUKCFjaGlsZFJvb3QtPm5lZWRzTGF5b3V0KCkpOwotICAgIEFT
U0VSVCghY2hpbGRSb290LT5maXJzdENoaWxkKCkgfHwgIWNoaWxkUm9vdC0+Zmlyc3RDaGlsZCgp
LT5maXJzdENoaWxkKCkgfHwgIWNoaWxkUm9vdC0+Zmlyc3RDaGlsZCgpLT5maXJzdENoaWxkKCkt
Pm5lZWRzTGF5b3V0KCkpOworICAgIEFTU0VSVCghY2hpbGRSb290LT5maXJzdENoaWxkKCkgfHwg
IWNoaWxkUm9vdC0+Zmlyc3RDaGlsZCgpLT5maXJzdENoaWxkU2xvdygpIHx8ICFjaGlsZFJvb3Qt
PmZpcnN0Q2hpbGQoKS0+Zmlyc3RDaGlsZFNsb3coKS0+bmVlZHNMYXlvdXQoKSk7CiAKICAgICBz
ZXROZWVkc0xheW91dChmYWxzZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDE1NjI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMzgsOCArMTEzOCw5IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZURlc2NlbmRhbnREZXBlbmQKICAgICAgICAgICAgICAg
ICAgICAgbV9oYXNWaXNpYmxlQ29udGVudCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoci0+Zmlyc3RDaGls
ZCgpICYmICFyLT5oYXNMYXllcigpKQotICAgICAgICAgICAgICAgICAgICByID0gci0+Zmlyc3RD
aGlsZCgpOworICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogY2hpbGQ7CisgICAgICAgICAg
ICAgICAgaWYgKCFyLT5oYXNMYXllcigpICYmIChjaGlsZCA9IHItPmZpcnN0Q2hpbGRTbG93KCkp
KQorICAgICAgICAgICAgICAgICAgICByID0gY2hpbGQ7CiAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoci0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgICAgICAgICAgICAgciA9IHItPm5leHRTaWJs
aW5nKCk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHJldmlzaW9uIDE1NjI3NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
MCw3ICsyNjAsNyBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjp1cGRhdGVWYWx1ZSgpCiAgICAgfQog
fQogCi1zdGF0aWMgUmVuZGVyT2JqZWN0KiBmaXJzdE5vbk1hcmtlckNoaWxkKFJlbmRlck9iamVj
dCogcGFyZW50KQorc3RhdGljIFJlbmRlck9iamVjdCogZmlyc3ROb25NYXJrZXJDaGlsZChSZW5k
ZXJCbG9jayogcGFyZW50KQogewogICAgIFJlbmRlck9iamVjdCogcmVzdWx0ID0gcGFyZW50LT5m
aXJzdENoaWxkKCk7CiAgICAgd2hpbGUgKHJlc3VsdCAmJiByZXN1bHQtPmlzTGlzdE1hcmtlcigp
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlz
aW9uIDE1NjI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNyArMjE1LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnNl
dEZsb3dUaHJlYWRTdGF0ZUluYwogewogICAgIHNldEZsb3dUaHJlYWRTdGF0ZShzdGF0ZSk7CiAK
LSAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxk
ID0gZmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkp
IHsKICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGEgZnJhZ21lbnRhdGlvbiBjb250ZXh0IGl0
IGFscmVhZHkgdXBkYXRlZCB0aGUgZGVzY2VuZGFudHMgZmxhZyBhY2NvcmRpbmdseS4KICAgICAg
ICAgaWYgKGNoaWxkLT5pc1JlbmRlckZsb3dUaHJlYWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwpAQCAtMjQ0LDcgKzI0NCw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpyZW1vdmVGcm9tUGFyZW50
KCkKIAogUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6Om5leHRJblByZU9yZGVyKCkgY29uc3QK
IHsKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiBvID0gZmlyc3RDaGlsZCgpKQorICAgIGlmIChSZW5k
ZXJPYmplY3QqIG8gPSBmaXJzdENoaWxkU2xvdygpKQogICAgICAgICByZXR1cm4gbzsKIAogICAg
IHJldHVybiBuZXh0SW5QcmVPcmRlckFmdGVyQ2hpbGRyZW4oKTsKQEAgLTI2Niw3ICsyNjYsNyBA
QCBSZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6bmV4dEluUHJlT3JkCiAKIFJlbmRlck9iamVj
dCogUmVuZGVyT2JqZWN0OjpuZXh0SW5QcmVPcmRlcihjb25zdCBSZW5kZXJPYmplY3QqIHN0YXlX
aXRoaW4pIGNvbnN0CiB7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogbyA9IGZpcnN0Q2hpbGQoKSkK
KyAgICBpZiAoUmVuZGVyT2JqZWN0KiBvID0gZmlyc3RDaGlsZFNsb3coKSkKICAgICAgICAgcmV0
dXJuIG87CiAKICAgICByZXR1cm4gbmV4dEluUHJlT3JkZXJBZnRlckNoaWxkcmVuKHN0YXlXaXRo
aW4pOwpAQCAtMjkwLDggKzI5MCw4IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0OjpuZXh0
SW5QcmVPcmQKIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0OjpwcmV2aW91c0luUHJlT3JkZXIo
KSBjb25zdAogewogICAgIGlmIChSZW5kZXJPYmplY3QqIG8gPSBwcmV2aW91c1NpYmxpbmcoKSkg
ewotICAgICAgICB3aGlsZSAoby0+bGFzdENoaWxkKCkpCi0gICAgICAgICAgICBvID0gby0+bGFz
dENoaWxkKCk7CisgICAgICAgIHdoaWxlIChSZW5kZXJPYmplY3QqIGxhc3QgPSBvLT5sYXN0Q2hp
bGRTbG93KCkpCisgICAgICAgICAgICBvID0gbGFzdDsKICAgICAgICAgcmV0dXJuIG87CiAgICAg
fQogCkBAIC0zMDgsNyArMzA4LDcgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6OnByZXZp
b3VzSW5QcgogCiBSZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6Y2hpbGRBdCh1bnNpZ25lZCBp
bmRleCkgY29uc3QKIHsKLSAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOwor
ICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkU2xvdygpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGNoaWxkICYmIGkgPCBpbmRleDsgaSsrKQogICAgICAgICBjaGlsZCA9IGNo
aWxkLT5uZXh0U2libGluZygpOwogICAgIHJldHVybiBjaGlsZDsKQEAgLTMxNiwxMCArMzE2LDEw
IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0OjpjaGlsZEF0KHVuc2kKIAogUmVuZGVyT2Jq
ZWN0KiBSZW5kZXJPYmplY3Q6OmZpcnN0TGVhZkNoaWxkKCkgY29uc3QKIHsKLSAgICBSZW5kZXJP
YmplY3QqIHIgPSBmaXJzdENoaWxkKCk7CisgICAgUmVuZGVyT2JqZWN0KiByID0gZmlyc3RDaGls
ZFNsb3coKTsKICAgICB3aGlsZSAocikgewogICAgICAgICBSZW5kZXJPYmplY3QqIG4gPSAwOwot
ICAgICAgICBuID0gci0+Zmlyc3RDaGlsZCgpOworICAgICAgICBuID0gci0+Zmlyc3RDaGlsZFNs
b3coKTsKICAgICAgICAgaWYgKCFuKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIHIgPSBu
OwpAQCAtMzI5LDEwICszMjksMTAgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6OmZpcnN0
TGVhZkNoaQogCiBSZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6bGFzdExlYWZDaGlsZCgpIGNv
bnN0CiB7Ci0gICAgUmVuZGVyT2JqZWN0KiByID0gbGFzdENoaWxkKCk7CisgICAgUmVuZGVyT2Jq
ZWN0KiByID0gbGFzdENoaWxkU2xvdygpOwogICAgIHdoaWxlIChyKSB7CiAgICAgICAgIFJlbmRl
ck9iamVjdCogbiA9IDA7Ci0gICAgICAgIG4gPSByLT5sYXN0Q2hpbGQoKTsKKyAgICAgICAgbiA9
IHItPmxhc3RDaGlsZFNsb3coKTsKICAgICAgICAgaWYgKCFuKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIHIgPSBuOwpAQCAtMTIyOCw3ICsxMjI4LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6
OmFkZEFic29sdXRlUmVjdEZvckxheQogewogICAgIGlmIChoYXNMYXllcigpKQogICAgICAgICBy
ZXN1bHQudW5pdGUoYWJzb2x1dGVCb3VuZGluZ0JveFJlY3RJZ25vcmluZ1RyYW5zZm9ybXMoKSk7
Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBmaXJzdENoaWxkKCk7IGN1cnJlbnQ7
IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKQorICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBjdXJyZW50ID0gZmlyc3RDaGlsZFNsb3coKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQt
Pm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGN1cnJlbnQtPmFkZEFic29sdXRlUmVjdEZvckxheWVy
KHJlc3VsdCk7CiB9CiAKQEAgLTEyMzcsNyArMTIzNyw3IEBAIExheW91dFJlY3QgUmVuZGVyT2Jq
ZWN0OjpwYWludGluZ1Jvb3RSZWMKIHsKICAgICBMYXlvdXRSZWN0IHJlc3VsdCA9IGFic29sdXRl
Qm91bmRpbmdCb3hSZWN0SWdub3JpbmdUcmFuc2Zvcm1zKCk7CiAgICAgdG9wTGV2ZWxSZWN0ID0g
cmVzdWx0OwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOyBj
dXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkKKyAgICBmb3IgKFJlbmRl
ck9iamVjdCogY3VycmVudCA9IGZpcnN0Q2hpbGRTbG93KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBj
dXJyZW50LT5uZXh0U2libGluZygpKQogICAgICAgICBjdXJyZW50LT5hZGRBYnNvbHV0ZVJlY3RG
b3JMYXllcihyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xNTkxLDcgKzE1OTEs
NyBAQCB2b2lkIFJlbmRlck9iamVjdDo6c2hvd1JlbmRlclRyZWVBbmRNYXJrCiAgICAgaWYgKCF0
aGlzKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGNvbnN0IFJlbmRlck9iamVjdCogY2hp
bGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQor
ICAgIGZvciAoY29uc3QgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGRTbG93KCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAgICBjaGlsZC0+c2hvd1Jl
bmRlclRyZWVBbmRNYXJrKG1hcmtlZE9iamVjdDEsIG1hcmtlZExhYmVsMSwgbWFya2VkT2JqZWN0
MiwgbWFya2VkTGFiZWwyLCBkZXB0aCArIDEpOwogfQogCkBAIC0xNzc5LDcgKzE3NzksOSBAQCB2
b2lkIFJlbmRlck9iamVjdDo6c2V0UHNldWRvU3R5bGUoUGFzc1JlCiAKIGlubGluZSBib29sIFJl
bmRlck9iamVjdDo6aGFzSW1tZWRpYXRlTm9uV2hpdGVzcGFjZVRleHRDaGlsZCgpIGNvbnN0CiB7
Ci0gICAgZm9yIChjb25zdCBSZW5kZXJPYmplY3QqIHIgPSBmaXJzdENoaWxkKCk7IHI7IHIgPSBy
LT5uZXh0U2libGluZygpKSB7CisgICAgaWYgKGlzVGV4dCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgZm9yIChjb25zdCBSZW5kZXJPYmplY3QqIHIgPSB0b1JlbmRlckVsZW1lbnQodGhp
cyktPmZpcnN0Q2hpbGQoKTsgcjsgciA9IHItPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYg
KHItPmlzVGV4dCgpICYmICF0b1JlbmRlclRleHQociktPmlzQWxsQ29sbGFwc2libGVXaGl0ZXNw
YWNlKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yMDE1LDcgKzIwMTcs
NyBAQCB2b2lkIFJlbmRlck9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVECiB2b2lkIFJlbmRl
ck9iamVjdDo6cHJvcGFnYXRlU3R5bGVUb0Fub255bW91c0NoaWxkcmVuKGJvb2wgYmxvY2tDaGls
ZHJlbk9ubHkpCiB7CiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHNhdmUgdGhpcyBjYWxsIHdoZW4g
dGhlIGNoYW5nZSBvbmx5IGFmZmVjdGVkIG5vbi1pbmhlcml0ZWQgcHJvcGVydGllcy4KLSAgICBm
b3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmly
c3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAg
ICAgICAgaWYgKCFjaGlsZC0+aXNBbm9ueW1vdXMoKSB8fCBjaGlsZC0+c3R5bGUoKS0+c3R5bGVU
eXBlKCkgIT0gTk9QU0VVRE8pCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMjUxNSw3ICsy
NTE3LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnJlbW92ZUZyb21SZW5kZXJGbG93VAogCiB2b2lk
IFJlbmRlck9iamVjdDo6cmVtb3ZlRnJvbVJlbmRlckZsb3dUaHJlYWRSZWN1cnNpdmUoUmVuZGVy
Rmxvd1RocmVhZCogcmVuZGVyRmxvd1RocmVhZCkKIHsKLSAgICBmb3IgKFJlbmRlck9iamVjdCog
Y2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
KQorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGRTbG93KCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAgICBjaGlsZC0+cmVtb3ZlRnJv
bVJlbmRlckZsb3dUaHJlYWRSZWN1cnNpdmUocmVuZGVyRmxvd1RocmVhZCk7CiAKICAgICBSZW5k
ZXJGbG93VGhyZWFkKiBsb2NhbEZsb3dUaHJlYWQgPSByZW5kZXJGbG93VGhyZWFkOwpAQCAtMjUz
NSw3ICsyNTM3LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmRlc3Ryb3lBbmRDbGVhbnVwQW5vbgog
ICAgIH0KIAogICAgIFJlbmRlck9iamVjdCogZGVzdHJveVJvb3QgPSB0aGlzOwotICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBkZXN0cm95Um9vdFBhcmVudCA9IGRlc3Ryb3lSb290LT5wYXJlbnQoKTsg
ZGVzdHJveVJvb3RQYXJlbnQgJiYgZGVzdHJveVJvb3RQYXJlbnQtPmlzQW5vbnltb3VzKCk7IGRl
c3Ryb3lSb290ID0gZGVzdHJveVJvb3RQYXJlbnQsIGRlc3Ryb3lSb290UGFyZW50ID0gZGVzdHJv
eVJvb3RQYXJlbnQtPnBhcmVudCgpKSB7CisgICAgZm9yIChSZW5kZXJFbGVtZW50KiBkZXN0cm95
Um9vdFBhcmVudCA9IGRlc3Ryb3lSb290LT5wYXJlbnQoKTsgZGVzdHJveVJvb3RQYXJlbnQgJiYg
ZGVzdHJveVJvb3RQYXJlbnQtPmlzQW5vbnltb3VzKCk7IGRlc3Ryb3lSb290ID0gZGVzdHJveVJv
b3RQYXJlbnQsIGRlc3Ryb3lSb290UGFyZW50ID0gZGVzdHJveVJvb3RQYXJlbnQtPnBhcmVudCgp
KSB7CiAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IHJlbW92ZSBhbm9ueW1vdXMgY2VsbHMn
IGFuZCB0YWJsZSBzZWN0aW9ucycgd3JhcHBlcnMgYnV0IHdlIHNob3VsZCByZW1vdmUgYWxsIHVu
bmVlZGVkCiAgICAgICAgIC8vIHdyYXBwZXJzLiBTZWUgaHR0cDovL3dlYmtpdC5vcmcvYi81MjEy
MyBhcyBhbiBleGFtcGxlIHdoZXJlIHRoaXMgaXMgbmVlZGVkLgogICAgICAgICBpZiAoIWRlc3Ry
b3lSb290UGFyZW50LT5pc1RhYmxlQ2VsbCgpICYmICFkZXN0cm95Um9vdFBhcmVudC0+aXNUYWJs
ZVNlY3Rpb24oKSkKQEAgLTI2MTQsNyArMjYxNiw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojp1cGRh
dGVEcmFnU3RhdGUoYm9vbCAKICAgICBzZXRJc0RyYWdnaW5nKGRyYWdPbik7CiAgICAgaWYgKHZh
bHVlQ2hhbmdlZCAmJiBub2RlKCkgJiYgKHN0eWxlKCktPmFmZmVjdGVkQnlEcmFnKCkgfHwgKG5v
ZGUoKS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKCkpLT5jaGlsZHJlbkFmZmVj
dGVkQnlEcmFnKCkpKSkKICAgICAgICAgbm9kZSgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0g
ICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBj
dXJyLT5uZXh0U2libGluZygpKQorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RD
aGlsZFNsb3coKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGN1
cnItPnVwZGF0ZURyYWdTdGF0ZShkcmFnT24pOwogfQogCkBAIC0yNjg3LDcgKzI2ODksNyBAQCB2
b2lkIFJlbmRlck9iamVjdDo6bGF5b3V0KCkKIHsKICAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVj
a1BvaW50IGxheW91dENoZWNrUG9pbnQ7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwotICAg
IFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7CisgICAgUmVuZGVyT2JqZWN0KiBj
aGlsZCA9IGZpcnN0Q2hpbGRTbG93KCk7CiAgICAgd2hpbGUgKGNoaWxkKSB7CiAgICAgICAgIGNo
aWxkLT5sYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICBBU1NFUlQoIWNoaWxkLT5uZWVkc0xheW91
dCgpKTsKQEAgLTI5MTIsNyArMjkxNCw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojpjb2xsZWN0QW5u
b3RhdGVkUmVnaW8KICAgICAgICAgcmV0dXJuOwogCiAgICAgYWRkQW5ub3RhdGVkUmVnaW9ucyhy
ZWdpb25zKTsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3Vy
cjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpCisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1
cnIgPSB0b1JlbmRlckVsZW1lbnQodGhpcyktPmZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1
cnItPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGN1cnItPmNvbGxlY3RBbm5vdGF0ZWRSZWdpb25z
KHJlZ2lvbnMpOwogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oCShyZXZpc2lvbiAxNTYyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NCwxMCArMTY0LDkgQEAgcHVibGlj
OgogICAgIFJlbmRlck9iamVjdCogcHJldmlvdXNTaWJsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9w
cmV2aW91czsgfQogICAgIFJlbmRlck9iamVjdCogbmV4dFNpYmxpbmcoKSBjb25zdCB7IHJldHVy
biBtX25leHQ7IH0KIAotICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgcmVuYW1lZCBzbG93
Rmlyc3RDaGlsZCwgc2xvd0xhc3RDaGlsZCwgZXRjLgotICAgIC8vIHRvIGRpc2NvdXJhZ2UgdGhl
aXIgdXNlLgotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkKCkgY29uc3QgeyBy
ZXR1cm4gbnVsbHB0cjsgfQotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQoKSBj
b25zdCB7IHJldHVybiBudWxscHRyOyB9CisgICAgLy8gVXNlIFJlbmRlckVsZW1lbnQgdmVyc2lv
bnMgaW5zdGVhZC4KKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZFNsb3coKSBj
b25zdCB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGxhc3RD
aGlsZFNsb3coKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAKICAgICBSZW5kZXJPYmplY3Qq
IG5leHRJblByZU9yZGVyKCkgY29uc3Q7CiAgICAgUmVuZGVyT2JqZWN0KiBuZXh0SW5QcmVPcmRl
cihjb25zdCBSZW5kZXJPYmplY3QqIHN0YXlXaXRoaW4pIGNvbnN0OwpAQCAtMjI0LDcgKzIyMyw4
IEBAIHB1YmxpYzoKIAogICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCogcmVuZGVyTmFtZWRGbG93
VGhyZWFkV3JhcHBlcigpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25z
dCB7IHJldHVybiBmaXJzdENoaWxkKCkgPT0gMDsgfQorICAgIC8vIEZJWE1FOiBUaGUgbWVhbmlu
ZyBvZiB0aGlzIGZ1bmN0aW9uIGlzIHVuY2xlYXIuCisgICAgdmlydHVhbCBib29sIGlzRW1wdHko
KSBjb25zdCB7IHJldHVybiAhZmlyc3RDaGlsZFNsb3coKTsgfQogCiAjaWZuZGVmIE5ERUJVRwog
ICAgIHZvaWQgc2V0SGFzQVhPYmplY3QoYm9vbCBmbGFnKSB7IG1faGFzQVhPYmplY3QgPSBmbGFn
OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAkocmV2
aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU4MCw3ICs1ODAsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBSZW5kZXJSZWdpb246OmNvCiAKIHZvaWQgUmVuZGVyUmVnaW9uOjpjb21wdXRlQ2hpbGRy
ZW5TdHlsZUluUmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQogewotICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjaGlsZCA9IG9iamVjdC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9
IG9iamVjdC0+Zmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCkpIHsKIAogICAgICAgICBSZW5kZXJPYmplY3RSZWdpb25TdHlsZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmZpbmQoY2hpbGQpOwogCkBAIC02MzIsNyAr
NjMyLDcgQEAgdm9pZCBSZW5kZXJSZWdpb246OmNsZWFyT2JqZWN0U3R5bGVJblJlZwogICAgIG1f
cmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUucmVtb3ZlKG9iamVjdCk7CiAKICAgICAvLyBDbGVhciB0
aGUgc3R5bGUgZm9yIHRoZSBjaGlsZHJlbiBvZiB0aGlzIG9iamVjdC4KLSAgICBmb3IgKFJlbmRl
ck9iamVjdCogY2hpbGQgPSBvYmplY3QtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPm5leHRTaWJsaW5nKCkpCisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gb2JqZWN0
LT5maXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkK
ICAgICAgICAgY2xlYXJPYmplY3RTdHlsZUluUmVnaW9uKGNoaWxkKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcAkocmV2aXNpb24gMTU2Mjc0KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OSwyNyArNTksMjcgQEAgc3RhdGljIGlubGluZSBib29sIGlzUnVieUJlZm9yZUJsb2NrKGNv
bgogewogICAgIHJldHVybiBpc0Fub255bW91c1J1YnlJbmxpbmVCbG9jayhvYmplY3QpCiAgICAg
ICAgICYmICFvYmplY3QtPnByZXZpb3VzU2libGluZygpCi0gICAgICAgICYmIG9iamVjdC0+Zmly
c3RDaGlsZCgpCi0gICAgICAgICYmIG9iamVjdC0+Zmlyc3RDaGlsZCgpLT5zdHlsZSgpLT5zdHls
ZVR5cGUoKSA9PSBCRUZPUkU7CisgICAgICAgICYmIG9iamVjdC0+Zmlyc3RDaGlsZFNsb3coKQor
ICAgICAgICAmJiBvYmplY3QtPmZpcnN0Q2hpbGRTbG93KCktPnN0eWxlKCktPnN0eWxlVHlwZSgp
ID09IEJFRk9SRTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGlzUnVieUFmdGVyQmxvY2soY29u
c3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgcmV0dXJuIGlzQW5vbnltb3VzUnVieUlu
bGluZUJsb2NrKG9iamVjdCkKICAgICAgICAgJiYgIW9iamVjdC0+bmV4dFNpYmxpbmcoKQotICAg
ICAgICAmJiBvYmplY3QtPmZpcnN0Q2hpbGQoKQotICAgICAgICAmJiBvYmplY3QtPmZpcnN0Q2hp
bGQoKS0+c3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gQUZURVI7CisgICAgICAgICYmIG9iamVjdC0+
Zmlyc3RDaGlsZFNsb3coKQorICAgICAgICAmJiBvYmplY3QtPmZpcnN0Q2hpbGRTbG93KCktPnN0
eWxlKCktPnN0eWxlVHlwZSgpID09IEFGVEVSOwogfQogCiBzdGF0aWMgaW5saW5lIFJlbmRlckJs
b2NrKiBydWJ5QmVmb3JlQmxvY2soY29uc3QgUmVuZGVyT2JqZWN0KiBydWJ5KQogewotICAgIFJl
bmRlck9iamVjdCogY2hpbGQgPSBydWJ5LT5maXJzdENoaWxkKCk7CisgICAgUmVuZGVyT2JqZWN0
KiBjaGlsZCA9IHJ1YnktPmZpcnN0Q2hpbGRTbG93KCk7CiAgICAgcmV0dXJuIGlzUnVieUJlZm9y
ZUJsb2NrKGNoaWxkKSA/IHRvUmVuZGVyQmxvY2soY2hpbGQpIDogMDsKIH0KIAogc3RhdGljIGlu
bGluZSBSZW5kZXJCbG9jayogcnVieUFmdGVyQmxvY2soY29uc3QgUmVuZGVyT2JqZWN0KiBydWJ5
KQogewotICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBydWJ5LT5sYXN0Q2hpbGQoKTsKKyAgICBS
ZW5kZXJPYmplY3QqIGNoaWxkID0gcnVieS0+bGFzdENoaWxkU2xvdygpOwogICAgIHJldHVybiBp
c1J1YnlBZnRlckJsb2NrKGNoaWxkKSA/IHRvUmVuZGVyQmxvY2soY2hpbGQpIDogMDsKIH0KIApA
QCAtOTMsNyArOTMsNyBAQCBzdGF0aWMgUmVuZGVyQmxvY2sqIGNyZWF0ZUFub255bW91c1J1YnlJ
CiAKIHN0YXRpYyBSZW5kZXJSdWJ5UnVuKiBsYXN0UnVieVJ1bihjb25zdCBSZW5kZXJPYmplY3Qq
IHJ1YnkpCiB7Ci0gICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJ1YnktPmxhc3RDaGlsZCgpOwor
ICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBydWJ5LT5sYXN0Q2hpbGRTbG93KCk7CiAgICAgaWYg
KGNoaWxkICYmICFjaGlsZC0+aXNSdWJ5UnVuKCkpCiAgICAgICAgIGNoaWxkID0gY2hpbGQtPnBy
ZXZpb3VzU2libGluZygpOwogICAgIEFTU0VSVCghY2hpbGQgfHwgY2hpbGQtPmlzUnVieVJ1bigp
IHx8IGNoaWxkLT5pc0JlZm9yZUNvbnRlbnQoKSB8fCBjaGlsZCA9PSBydWJ5QmVmb3JlQmxvY2so
cnVieSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShy
ZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsOSArMTg0LDEwIEBAIHZvaWQgUmVuZGVyVGFibGU6
OmFkZENoaWxkKFJlbmRlck9iamVjdCoKICAgICB3aGlsZSAobGFzdEJveCAmJiBsYXN0Qm94LT5w
YXJlbnQoKS0+aXNBbm9ueW1vdXMoKSAmJiAhbGFzdEJveC0+aXNUYWJsZVNlY3Rpb24oKSAmJiBs
YXN0Qm94LT5zdHlsZSgpLT5kaXNwbGF5KCkgIT0gVEFCTEVfQ0FQVElPTiAmJiBsYXN0Qm94LT5z
dHlsZSgpLT5kaXNwbGF5KCkgIT0gVEFCTEVfQ09MVU1OX0dST1VQKQogICAgICAgICBsYXN0Qm94
ID0gbGFzdEJveC0+cGFyZW50KCk7CiAgICAgaWYgKGxhc3RCb3ggJiYgbGFzdEJveC0+aXNBbm9u
eW1vdXMoKSAmJiAhaXNBZnRlckNvbnRlbnQobGFzdEJveCkpIHsKLSAgICAgICAgaWYgKGJlZm9y
ZUNoaWxkID09IGxhc3RCb3gpCi0gICAgICAgICAgICBiZWZvcmVDaGlsZCA9IGxhc3RCb3gtPmZp
cnN0Q2hpbGQoKTsKLSAgICAgICAgdG9SZW5kZXJUYWJsZVNlY3Rpb24obGFzdEJveCktPmFkZENo
aWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2Vj
dGlvbiA9IHRvUmVuZGVyVGFibGVTZWN0aW9uKGxhc3RCb3gpOworICAgICAgICBpZiAoYmVmb3Jl
Q2hpbGQgPT0gc2VjdGlvbikKKyAgICAgICAgICAgIGJlZm9yZUNoaWxkID0gc2VjdGlvbi0+Zmly
c3RDaGlsZCgpOworICAgICAgICBzZWN0aW9uLT5hZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01NjgsMTAgKzU2OSwxMCBAQCB2b2lkIFJl
bmRlclRhYmxlOjpyZWNhbGNDb2xsYXBzZWRCb3JkZXJzCiAgICAgZm9yIChSZW5kZXJPYmplY3Qq
IHNlY3Rpb24gPSBmaXJzdENoaWxkKCk7IHNlY3Rpb247IHNlY3Rpb24gPSBzZWN0aW9uLT5uZXh0
U2libGluZygpKSB7CiAgICAgICAgIGlmICghc2VjdGlvbi0+aXNUYWJsZVNlY3Rpb24oKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogcm93ID0gc2Vj
dGlvbi0+Zmlyc3RDaGlsZCgpOyByb3c7IHJvdyA9IHJvdy0+bmV4dFNpYmxpbmcoKSkgeworICAg
ICAgICBmb3IgKFJlbmRlck9iamVjdCogcm93ID0gdG9SZW5kZXJUYWJsZVNlY3Rpb24oc2VjdGlv
biktPmZpcnN0Q2hpbGQoKTsgcm93OyByb3cgPSByb3ctPm5leHRTaWJsaW5nKCkpIHsKICAgICAg
ICAgICAgIGlmICghcm93LT5pc1RhYmxlUm93KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2VsbCA9IHJvdy0+Zmlyc3RDaGlsZCgp
OyBjZWxsOyBjZWxsID0gY2VsbC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgZm9yIChS
ZW5kZXJPYmplY3QqIGNlbGwgPSB0b1JlbmRlclRhYmxlUm93KHJvdyktPmZpcnN0Q2hpbGQoKTsg
Y2VsbDsgY2VsbCA9IGNlbGwtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgICAgICBpZiAo
IWNlbGwtPmlzVGFibGVDZWxsKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgIEFTU0VSVCh0b1JlbmRlclRhYmxlQ2VsbChjZWxsKS0+dGFibGUoKSA9PSB0
aGlzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNw
cAkocmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlUm93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDkgKzExMSwxMCBAQCB2b2lkIFJlbmRl
clRhYmxlUm93OjphZGRDaGlsZChSZW5kZXJPYmplCiAgICAgICAgIGlmICghbGFzdCkKICAgICAg
ICAgICAgIGxhc3QgPSBsYXN0Q2hpbGQoKTsKICAgICAgICAgaWYgKGxhc3QgJiYgbGFzdC0+aXNB
bm9ueW1vdXMoKSAmJiBsYXN0LT5pc1RhYmxlQ2VsbCgpICYmICFsYXN0LT5pc0JlZm9yZU9yQWZ0
ZXJDb250ZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChiZWZvcmVDaGlsZCA9PSBsYXN0KQotICAg
ICAgICAgICAgICAgIGJlZm9yZUNoaWxkID0gbGFzdC0+Zmlyc3RDaGlsZCgpOwotICAgICAgICAg
ICAgdG9SZW5kZXJUYWJsZUNlbGwobGFzdCktPmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7
CisgICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSB0b1JlbmRlclRhYmxlQ2VsbChs
YXN0KTsKKyAgICAgICAgICAgIGlmIChiZWZvcmVDaGlsZCA9PSBjZWxsKQorICAgICAgICAgICAg
ICAgIGJlZm9yZUNoaWxkID0gY2VsbC0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgY2VsbC0+
YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVT
ZWN0aW9uLmNwcAkocmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw5ICsxMzAsMTAg
QEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENoaWxkKFJlbmRlcgogICAgICAgICBpZiAo
IWxhc3QpCiAgICAgICAgICAgICBsYXN0ID0gbGFzdENoaWxkKCk7CiAgICAgICAgIGlmIChsYXN0
ICYmIGxhc3QtPmlzQW5vbnltb3VzKCkgJiYgIWxhc3QtPmlzQmVmb3JlT3JBZnRlckNvbnRlbnQo
KSkgewotICAgICAgICAgICAgaWYgKGJlZm9yZUNoaWxkID09IGxhc3QpCi0gICAgICAgICAgICAg
ICAgYmVmb3JlQ2hpbGQgPSBsYXN0LT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICB0b1JlbmRl
clRhYmxlUm93KGxhc3QpLT5hZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICAg
ICAgUmVuZGVyVGFibGVSb3cqIHJvdyA9IHRvUmVuZGVyVGFibGVSb3cobGFzdCk7CisgICAgICAg
ICAgICBpZiAoYmVmb3JlQ2hpbGQgPT0gcm93KQorICAgICAgICAgICAgICAgIGJlZm9yZUNoaWxk
ID0gcm93LT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICByb3ctPmFkZENoaWxkKGNoaWxkLCBi
ZWZvcmVDaGlsZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTIzNCw3
ICsxMjM1LDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnJlY2FsY0NlbGxzKCkKICAgICAg
ICAgICAgIHRhYmxlUm93LT5zZXRSb3dJbmRleChpbnNlcnRpb25Sb3cpOwogICAgICAgICAgICAg
c2V0Um93TG9naWNhbEhlaWdodFRvUm93U3R5bGVMb2dpY2FsSGVpZ2h0SWZOb3RSZWxhdGl2ZSht
X2dyaWRbaW5zZXJ0aW9uUm93XSk7CiAKLSAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBj
ZWxsID0gcm93LT5maXJzdENoaWxkKCk7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0U2libGluZygp
KSB7CisgICAgICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2VsbCA9IHRhYmxlUm93LT5maXJz
dENoaWxkKCk7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKCFjZWxsLT5pc1RhYmxlQ2VsbCgpKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNU
ZXh0LmNwcAkocmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTcsNyArNTk3LDcgQEAgdm9p
ZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyTwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gby5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNo
aWxkID0gby5maXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmhhc0xheWVyKCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgd3JpdGUodHMsICpjaGlsZCwgaW5kZW50ICsgMSwgYmVoYXZpb3IpOwpA
QCAtOTE4LDcgKzkxOCw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlQ291bnRlclZhbHVlc0Zyb21DaGls
ZHIKIHsKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuOwotICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjaGlsZCA9IHBhcmVudC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKSkgeworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHBhcmVu
dC0+Zmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkp
IHsKICAgICAgICAgaWYgKGNoaWxkLT5pc0NvdW50ZXIoKSkgewogICAgICAgICAgICAgaWYgKCFp
c0ZpcnN0Q291bnRlcikKICAgICAgICAgICAgICAgICBzdHJlYW0gPDwgIiAiOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxG
cmFjdGlvbi5jcHAJKHJldmlzaW9uIDE1NjI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMs
NyArMTIzLDcgQEAgUmVuZGVyTWF0aE1MT3BlcmF0b3IqIFJlbmRlck1hdGhNTEZyYWN0aQogICAg
IFJlbmRlck9iamVjdCogbnVtZXJhdG9yV3JhcHBlciA9IGZpcnN0Q2hpbGQoKTsKICAgICBpZiAo
IW51bWVyYXRvcldyYXBwZXIpCiAgICAgICAgIHJldHVybiAwOwotICAgIFJlbmRlck9iamVjdCog
bnVtZXJhdG9yID0gbnVtZXJhdG9yV3JhcHBlci0+Zmlyc3RDaGlsZCgpOworICAgIFJlbmRlck9i
amVjdCogbnVtZXJhdG9yID0gbnVtZXJhdG9yV3JhcHBlci0+Zmlyc3RDaGlsZFNsb3coKTsKICAg
ICBpZiAoIW51bWVyYXRvciB8fCAhbnVtZXJhdG9yLT5pc1JlbmRlck1hdGhNTEJsb2NrKCkpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiB0b1JlbmRlck1hdGhNTEJsb2NrKG51bWVyYXRv
ciktPnVuZW1iZWxsaXNoZWRPcGVyYXRvcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDAsNyArMTQwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGZpbmRQcmV2aW91c0FuZE5l
eHRBdAogICAgIEFTU0VSVChzdGFydCk7CiAgICAgQVNTRVJUKGxvY2F0ZUVsZW1lbnQpOwogICAg
IC8vIEZJWE1FOiBNYWtlIHRoaXMgaXRlcmF0aXZlLgotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBj
aGlsZCA9IHN0YXJ0LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZygpKSB7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gc3RhcnQtPmZpcnN0Q2hp
bGRTbG93KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAg
IGlmIChjaGlsZC0+aXNTVkdJbmxpbmVUZXh0KCkpIHsKICAgICAgICAgICAgIFJlbmRlclNWR0lu
bGluZVRleHQqIHRleHQgPSB0b1JlbmRlclNWR0lubGluZVRleHQoY2hpbGQpOwogICAgICAgICAg
ICAgaWYgKGxvY2F0ZUVsZW1lbnQgIT0gdGV4dCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCShyZXZpc2lvbiAxNTYyNzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0
ZU9iamVjdEJvdW5kaW5nQgogICAgIG9iamVjdEJvdW5kaW5nQm94LnVuaXRlRXZlbklmRW1wdHko
b3RoZXJCb3VuZGluZ0JveCk7CiB9CiAKLXZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUNv
bnRhaW5lckJvdW5kaW5nQm94ZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIsIEZsb2F0
UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsIGJvb2wmIG9iamVjdEJvdW5kaW5nQm94VmFsaWQsIEZs
b2F0UmVjdCYgc3Ryb2tlQm91bmRpbmdCb3gsIEZsb2F0UmVjdCYgcmVwYWludEJvdW5kaW5nQm94
KQordm9pZCBTVkdSZW5kZXJTdXBwb3J0Ojpjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyhj
b25zdCBSZW5kZXJFbGVtZW50KiBjb250YWluZXIsIEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdC
b3gsIGJvb2wmIG9iamVjdEJvdW5kaW5nQm94VmFsaWQsIEZsb2F0UmVjdCYgc3Ryb2tlQm91bmRp
bmdCb3gsIEZsb2F0UmVjdCYgcmVwYWludEJvdW5kaW5nQm94KQogewogICAgIG9iamVjdEJvdW5k
aW5nQm94ID0gRmxvYXRSZWN0KCk7CiAgICAgb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCA9IGZhbHNl
OwpAQCAtMTk1LDcgKzE5NSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnZhbGlkYXRlUmVzb3Vy
Y2VzT2YKICAgICBpZiAoU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNo
ZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KHN0YXJ0KSkKICAgICAgICAgcmVzb3Vy
Y2VzLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUoc3RhcnQsIGZhbHNlKTsKIAotICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjaGlsZCA9IHN0YXJ0LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0U2libGluZygpKQorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHN0YXJ0
LT5maXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkK
ICAgICAgICAgaW52YWxpZGF0ZVJlc291cmNlc09mQ2hpbGRyZW4oY2hpbGQpOwogfQogCkBAIC0y
MzMsNyArMjMzLDcgQEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbihSZQog
ICAgIGJvb2wgbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gc3RhcnQtPm5lZWRzQm91bmRhcmllc1Vw
ZGF0ZSgpOwogICAgIEhhc2hTZXQ8UmVuZGVyT2JqZWN0Kj4gbm90bGF5b3V0ZWRPYmplY3RzOwog
Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gc3RhcnQtPmZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICBmb3IgKFJlbmRlck9iamVj
dCogY2hpbGQgPSBzdGFydC0+Zmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgYm9vbCBuZWVkc0xheW91dCA9IHNlbGZOZWVkc0xh
eW91dDsKICAgICAgICAgYm9vbCBjaGlsZEV2ZXJIYWRMYXlvdXQgPSBjaGlsZC0+ZXZlckhhZExh
eW91dCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1
cHBvcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclN1cHBvcnQuaAkocmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcg
QEAgcHVibGljOgogICAgIC8vIERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc2VkIHBvaW50IGxp
ZXMgaW4gYSBjbGlwcGluZyBhcmVhCiAgICAgc3RhdGljIGJvb2wgcG9pbnRJbkNsaXBwaW5nQXJl
YShSZW5kZXJPYmplY3QqLCBjb25zdCBGbG9hdFBvaW50Jik7CiAKLSAgICBzdGF0aWMgdm9pZCBj
b21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyhjb25zdCBSZW5kZXJPYmplY3QqIGNvbnRhaW5l
ciwgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCwgYm9vbCYgb2JqZWN0Qm91bmRpbmdCb3hW
YWxpZCwgRmxvYXRSZWN0JiBzdHJva2VCb3VuZGluZ0JveCwgRmxvYXRSZWN0JiByZXBhaW50Qm91
bmRpbmdCb3gpOworICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveGVz
KGNvbnN0IFJlbmRlckVsZW1lbnQqIGNvbnRhaW5lciwgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGlu
Z0JveCwgYm9vbCYgb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCwgRmxvYXRSZWN0JiBzdHJva2VCb3Vu
ZGluZ0JveCwgRmxvYXRSZWN0JiByZXBhaW50Qm91bmRpbmdCb3gpOwogICAgIHN0YXRpYyBib29s
IHBhaW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdChjb25zdCBGbG9hdFJlY3QmIGxvY2FsUmVw
YWludFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUcmFuc2Zvcm0sIGNvbnN0IFBh
aW50SW5mbyYpOwogCiAgICAgLy8gSW1wb3J0YW50IGZ1bmN0aW9ucyB1c2VkIGJ5IG5lYXJseSBh
bGwgU1ZHIHJlbmRlcmVycyBjZW50cmFsaXppbmcgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbnMg
LyByZXBhaW50IHJlY3QgY2FsY3VsYXRpb25zCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDE1NjI3
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2Niw3ICs0NjYsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZVN0
YW5kYXJkUHJlZml4KFRleHRTdHJlCiAKIHN0YXRpYyB2b2lkIHdyaXRlQ2hpbGRyZW4oVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBpbnQgaW5kZW50KQogewotICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IG9iamVjdC5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGls
ZCA9IG9iamVjdC5maXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKSkKICAgICAgICAgd3JpdGUodHMsICpjaGlsZCwgaW5kZW50ICsgMSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3Vy
Y2VzQ3ljbGVTb2x2ZXIuY3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzAsNyArNzAsNyBAQCBib29sIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyOjpyZXNvdXJjZUNv
CiAgICAgLy8gVGhlbiBvcGVyYXRlIG9uIHRoZSBjaGlsZCByZXNvdXJjZXMgb2YgdGhlIGdpdmVu
IHJlbmRlcmVyLgogICAgIC8vIDxtYXJrZXIgaWQ9ImEiPiA8cGF0aCBtYXJrZXItc3RhcnQ9InVy
bCgjYikiLz4gLi4uCiAgICAgLy8gPG1hcmtlciBpZD0iYiI+IDxwYXRoIG1hcmtlci1zdGFydD0i
dXJsKCNhKSIvPiAuLi4KLSAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSByZW5kZXJlci0+
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJlbmRlcmVyLT5maXJzdENoaWxkU2xvdygpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBTVkdSZXNvdXJj
ZXMqIGNoaWxkUmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0Zv
clJlbmRlck9iamVjdChjaGlsZCk7CiAgICAgICAgIGlmICghY2hpbGRSZXNvdXJjZXMpCiAgICAg
ICAgICAgICBjb250aW51ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAJKHJl
dmlzaW9uIDE1NjI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3
IEBAIHZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpjb2wKIHsKICAgICBBU1NF
UlQoIXN0YXJ0LT5pc1NWR1RleHQoKSB8fCBtX3RleHRQb3NpdGlvbnMuaXNFbXB0eSgpKTsKIAot
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHN0YXJ0LT5maXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7IAorICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBjaGlsZCA9IHN0YXJ0LT5maXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmlzU1ZHSW5saW5lVGV4dCgpKSB7
CiAgICAgICAgICAgICBwcm9jZXNzUmVuZGVyU1ZHSW5saW5lVGV4dCh0b1JlbmRlclNWR0lubGlu
ZVRleHQoY2hpbGQpLCBtX3RleHRMZW5ndGgsIGxhc3RDaGFyYWN0ZXIpOwogICAgICAgICAgICAg
Y29udGludWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRy
aWNzQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3OSw3ICsxNzksNyBAQCB2b2lkIFNWR1RleHRNZXRyaWNzQnVpbGRlcjo6bWVh
c3VyZVRleHRSCiAKIHZvaWQgU1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjp3YWxrVHJlZShSZW5kZXJP
YmplY3QqIHN0YXJ0LCBSZW5kZXJTVkdJbmxpbmVUZXh0KiBzdG9wQXRMZWFmLCBNZWFzdXJlVGV4
dERhdGEqIGRhdGEpCiB7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gc3RhcnQtPmZp
cnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICBm
b3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBzdGFydC0+Zmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc1NW
R0lubGluZVRleHQoKSkgewogICAgICAgICAgICAgUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dCA9
IHRvUmVuZGVyU1ZHSW5saW5lVGV4dChjaGlsZCk7CiAgICAgICAgICAgICBpZiAoc3RvcEF0TGVh
ZiAmJiBzdG9wQXRMZWFmICE9IHRleHQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlUmVzb2x2ZVRyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlUmVzb2x2ZVRyZWUuY3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQwLDcgKzM0MCw3
IEBAIHN0YXRpYyBib29sIHRleHRSZW5kZXJlcklzTmVlZGVkKGNvbnN0IFQKICAgICAgICAgaWYg
KHBhcmVudFJlbmRlcmVyLmlzUmVuZGVyQmxvY2soKSAmJiAhcGFyZW50UmVuZGVyZXIuY2hpbGRy
ZW5JbmxpbmUoKSAmJiAoIXByZXZpb3VzUmVuZGVyZXIgfHwgIXByZXZpb3VzUmVuZGVyZXItPmlz
SW5saW5lKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAg
UmVuZGVyT2JqZWN0KiBmaXJzdCA9IHBhcmVudFJlbmRlcmVyLmZpcnN0Q2hpbGQoKTsKKyAgICAg
ICAgUmVuZGVyT2JqZWN0KiBmaXJzdCA9IHBhcmVudFJlbmRlcmVyLmZpcnN0Q2hpbGRTbG93KCk7
CiAgICAgICAgIHdoaWxlIChmaXJzdCAmJiBmaXJzdC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9z
aXRpb25lZCgpKQogICAgICAgICAgICAgZmlyc3QgPSBmaXJzdC0+bmV4dFNpYmxpbmcoKTsKICAg
ICAgICAgUmVuZGVyT2JqZWN0KiBuZXh0UmVuZGVyZXIgPSBuZXh0U2libGluZ1JlbmRlcmVyKHRl
eHROb2RlKTsK
</data>
<flag name="commit-queue"
          id="234572"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212368</attachid>
            <date>2013-09-23 11:06:07 -0700</date>
            <delta_ts>2013-09-23 11:24:04 -0700</delta_ts>
            <desc>another</desc>
            <filename>renderobject-slow-2.patch</filename>
            <type>text/plain</type>
            <size>50454</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEzLTA5LTIzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgUmVuZGVyT2JqZWN0
OjpmaXJzdC9sYXN0Q2hpbGQgdG8gUmVuZGVyT2JqZWN0OjpmaXJzdC9sYXN0Q2hpbGRTbG93Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE3ODQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHdpbGwg
bWFrZSBpdCBvYnZpb3VzIGluIGNvZGUgd2hlcmUgdHlwaW5nIHNob3VsZCBiZSB0aWdodGVuZWQu
CisgICAgICAgIEhhbmRsZWQgc29tZSBzaW1wbGUgY2FzZXMgYnkgdGlnaHRlbmluZyB0aGUgY29k
ZSBpbnN0ZWFkIG9mIHJlbmFtaW5nLgorCiAyMDEzLTA5LTIzICBBbnR0aSBLb2l2aXN0byAgPGFu
dHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAJKHJldmlzaW9uIDE1NjI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1OCw3ICs3
NTgsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTdHlsZVJhbmdlCiAgICAgLy8g
dHJhdmVyc2UgYmFja3dhcmQgYnkgcmVuZGVyZXIgdG8gbG9vayBmb3Igc3R5bGUgY2hhbmdlCiAg
ICAgZm9yIChSZW5kZXJPYmplY3QqIHIgPSByZW5kZXJlci0+cHJldmlvdXNJblByZU9yZGVyKCk7
IHI7IHIgPSByLT5wcmV2aW91c0luUHJlT3JkZXIoKSkgewogICAgICAgICAvLyBza2lwIG5vbi1s
ZWFmIG5vZGVzCi0gICAgICAgIGlmIChyLT5maXJzdENoaWxkKCkpCisgICAgICAgIGlmIChyLT5m
aXJzdENoaWxkU2xvdygpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgLy8gc3Rv
cCBhdCBzdHlsZSBjaGFuZ2UKQEAgLTc4MSw3ICs3ODEsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0
aW9uIGVuZE9mU3R5bGVSYW5nZShjCiAgICAgLy8gdHJhdmVyc2UgZm9yd2FyZCBieSByZW5kZXJl
ciB0byBsb29rIGZvciBzdHlsZSBjaGFuZ2UKICAgICBmb3IgKFJlbmRlck9iamVjdCogciA9IHJl
bmRlcmVyLT5uZXh0SW5QcmVPcmRlcigpOyByOyByID0gci0+bmV4dEluUHJlT3JkZXIoKSkgewog
ICAgICAgICAvLyBza2lwIG5vbi1sZWFmIG5vZGVzCi0gICAgICAgIGlmIChyLT5maXJzdENoaWxk
KCkpCisgICAgICAgIGlmIChyLT5maXJzdENoaWxkU2xvdygpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKICAgICAgICAgLy8gc3RvcCBhdCBzdHlsZSBjaGFuZ2UKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcg
KzE3Niw3IEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkSW4KICAgICB3
aGlsZSAocikgewogICAgICAgICBpZiAoci0+aXNSZW5kZXJCbG9jaygpKQogICAgICAgICAgICAg
cmV0dXJuIHI7Ci0gICAgICAgIGlmIChSZW5kZXJPYmplY3QqIGNoaWxkID0gci0+Zmlyc3RDaGls
ZCgpKQorICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHItPmZpcnN0Q2hpbGRTbG93
KCkpCiAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7CiAgICAgICAgIHIgPSB0b1JlbmRlcklubGlu
ZShyKS0+Y29udGludWF0aW9uKCk7IAogICAgIH0KQEAgLTE4Niw3ICsxODYsNyBAQCBzdGF0aWMg
aW5saW5lIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZEluCiAKIHN0YXRpYyBpbmxpbmUgUmVuZGVy
T2JqZWN0KiBmaXJzdENoaWxkQ29uc2lkZXJpbmdDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcikKIHsKLSAgICBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQgPSByZW5kZXJlci0+Zmly
c3RDaGlsZCgpOworICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCA9IHJlbmRlcmVyLT5maXJz
dENoaWxkU2xvdygpOwogCiAgICAgaWYgKCFmaXJzdENoaWxkICYmIGlzSW5saW5lV2l0aENvbnRp
bnVhdGlvbihyZW5kZXJlcikpCiAgICAgICAgIGZpcnN0Q2hpbGQgPSBmaXJzdENoaWxkSW5Db250
aW51YXRpb24ocmVuZGVyZXIpOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgUmVu
ZGVyT2JqZWN0KiBmaXJzdENoaWxkQ28KIAogc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGxh
c3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7
Ci0gICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQgPSByZW5kZXJlci0+bGFzdENoaWxkKCk7Cisg
ICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQgPSByZW5kZXJlci0+bGFzdENoaWxkU2xvdygpOwog
ICAgIFJlbmRlck9iamVjdCogcHJldjsKICAgICBSZW5kZXJPYmplY3QqIGN1ciA9IHJlbmRlcmVy
OwogCkBAIC0yMDcsNyArMjA3LDcgQEAgc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGxhc3RD
aGlsZENvbgogICAgIHdoaWxlIChjdXIpIHsKICAgICAgICAgcHJldiA9IGN1cjsKIAotICAgICAg
ICBpZiAoUmVuZGVyT2JqZWN0KiBsYyA9IGN1ci0+bGFzdENoaWxkKCkpCisgICAgICAgIGlmIChS
ZW5kZXJPYmplY3QqIGxjID0gY3VyLT5sYXN0Q2hpbGRTbG93KCkpCiAgICAgICAgICAgICBsYXN0
Q2hpbGQgPSBsYzsKIAogICAgICAgICBpZiAoY3VyLT5pc1JlbmRlcklubGluZSgpKSB7CkBAIC0z
MjUsNyArMzI1LDcgQEAgc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGNoaWxkQmVmb3JlQwog
CiBzdGF0aWMgaW5saW5lIGJvb2wgZmlyc3RDaGlsZElzSW5saW5lQ29udGludWF0aW9uKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5maXJzdENoaWxkKCkg
JiYgcmVuZGVyZXItPmZpcnN0Q2hpbGQoKS0+aXNJbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7
CisgICAgcmV0dXJuIHJlbmRlcmVyLT5maXJzdENoaWxkU2xvdygpICYmIHJlbmRlcmVyLT5maXJz
dENoaWxkU2xvdygpLT5pc0lubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsKIH0KIAogQWNjZXNz
aWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6cHJldmlvdXNTaWJsaW5n
KCkgY29uc3QKQEAgLTM0NCw5ICszNDQsOSBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3Np
YmlsaXR5UmVuZGVyCiAgICAgLy8gQ2FzZSAyOiBBbm9ueW1vdXMgYmxvY2sgcGFyZW50IG9mIHRo
ZSBlbmQgb2YgYSBjb250aW51YXRpb24gLSBza2lwIGFsbCB0aGUgd2F5IHRvIGJlZm9yZQogICAg
IC8vIHRoZSBwYXJlbnQgb2YgdGhlIHN0YXJ0LCBzaW5jZSBldmVyeXRoaW5nIGluIGJldHdlZW4g
d2lsbCBiZSBsaW5rZWQgdXAgdmlhIHRoZSBjb250aW51YXRpb24uCiAgICAgZWxzZSBpZiAobV9y
ZW5kZXJlci0+aXNBbm9ueW1vdXNCbG9jaygpICYmIGZpcnN0Q2hpbGRJc0lubGluZUNvbnRpbnVh
dGlvbihtX3JlbmRlcmVyKSkgewotICAgICAgICBSZW5kZXJPYmplY3QqIGZpcnN0UGFyZW50ID0g
c3RhcnRPZkNvbnRpbnVhdGlvbnMobV9yZW5kZXJlci0+Zmlyc3RDaGlsZCgpKS0+cGFyZW50KCk7
CisgICAgICAgIFJlbmRlck9iamVjdCogZmlyc3RQYXJlbnQgPSBzdGFydE9mQ29udGludWF0aW9u
cyhtX3JlbmRlcmVyLT5maXJzdENoaWxkU2xvdygpKS0+cGFyZW50KCk7CiAgICAgICAgIHdoaWxl
IChmaXJzdENoaWxkSXNJbmxpbmVDb250aW51YXRpb24oZmlyc3RQYXJlbnQpKQotICAgICAgICAg
ICAgZmlyc3RQYXJlbnQgPSBzdGFydE9mQ29udGludWF0aW9ucyhmaXJzdFBhcmVudC0+Zmlyc3RD
aGlsZCgpKS0+cGFyZW50KCk7CisgICAgICAgICAgICBmaXJzdFBhcmVudCA9IHN0YXJ0T2ZDb250
aW51YXRpb25zKGZpcnN0UGFyZW50LT5maXJzdENoaWxkU2xvdygpKS0+cGFyZW50KCk7CiAgICAg
ICAgIHByZXZpb3VzU2libGluZyA9IGZpcnN0UGFyZW50LT5wcmV2aW91c1NpYmxpbmcoKTsKICAg
ICB9CiAKQEAgLTM2Nyw3ICszNjcsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmls
aXR5UmVuZGVyCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBsYXN0Q2hpbGRIYXNDb250aW51YXRpb24o
UmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gcmVuZGVyZXItPmxhc3RDaGls
ZCgpICYmIGlzSW5saW5lV2l0aENvbnRpbnVhdGlvbihyZW5kZXJlci0+bGFzdENoaWxkKCkpOwor
ICAgIHJldHVybiByZW5kZXJlci0+bGFzdENoaWxkU2xvdygpICYmIGlzSW5saW5lV2l0aENvbnRp
bnVhdGlvbihyZW5kZXJlci0+bGFzdENoaWxkU2xvdygpKTsKIH0KIAogQWNjZXNzaWJpbGl0eU9i
amVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bmV4dFNpYmxpbmcoKSBjb25zdApAQCAt
Mzg2LDkgKzM4Niw5IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXIK
ICAgICAvLyBDYXNlIDI6IEFub255bW91cyBibG9jayBwYXJlbnQgb2YgdGhlIHN0YXJ0IG9mIGEg
Y29udGludWF0aW9uIC0gc2tpcCBhbGwgdGhlIHdheSB0bwogICAgIC8vIGFmdGVyIHRoZSBwYXJl
bnQgb2YgdGhlIGVuZCwgc2luY2UgZXZlcnl0aGluZyBpbiBiZXR3ZWVuIHdpbGwgYmUgbGlua2Vk
IHVwIHZpYSB0aGUgY29udGludWF0aW9uLgogICAgIGVsc2UgaWYgKG1fcmVuZGVyZXItPmlzQW5v
bnltb3VzQmxvY2soKSAmJiBsYXN0Q2hpbGRIYXNDb250aW51YXRpb24obV9yZW5kZXJlcikpIHsK
LSAgICAgICAgUmVuZGVyT2JqZWN0KiBsYXN0UGFyZW50ID0gZW5kT2ZDb250aW51YXRpb25zKG1f
cmVuZGVyZXItPmxhc3RDaGlsZCgpKS0+cGFyZW50KCk7CisgICAgICAgIFJlbmRlck9iamVjdCog
bGFzdFBhcmVudCA9IGVuZE9mQ29udGludWF0aW9ucyhtX3JlbmRlcmVyLT5sYXN0Q2hpbGRTbG93
KCkpLT5wYXJlbnQoKTsKICAgICAgICAgd2hpbGUgKGxhc3RDaGlsZEhhc0NvbnRpbnVhdGlvbihs
YXN0UGFyZW50KSkKLSAgICAgICAgICAgIGxhc3RQYXJlbnQgPSBlbmRPZkNvbnRpbnVhdGlvbnMo
bGFzdFBhcmVudC0+bGFzdENoaWxkKCkpLT5wYXJlbnQoKTsKKyAgICAgICAgICAgIGxhc3RQYXJl
bnQgPSBlbmRPZkNvbnRpbnVhdGlvbnMobGFzdFBhcmVudC0+bGFzdENoaWxkU2xvdygpKS0+cGFy
ZW50KCk7CiAgICAgICAgIG5leHRTaWJsaW5nID0gbGFzdFBhcmVudC0+bmV4dFNpYmxpbmcoKTsK
ICAgICB9CiAKQEAgLTQ0OSw3ICs0NDksNyBAQCBSZW5kZXJPYmplY3QqIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6CiAgICAgICAgIHBhcmVudCA9IHN0YXJ0T2ZDb250czsKICAgICAKICAgICAv
LyBDYXNlIDM6IFRoZSBmaXJzdCBzaWJsaW5nIGlzIHRoZSBiZWdpbm5pbmcgb2YgYSBjb250aW51
YXRpb24gY2hhaW4uIEZpbmQgdGhlIG9yaWdpbiBvZiB0aGF0IGNvbnRpbnVhdGlvbi4KLSAgICBl
bHNlIGlmIChwYXJlbnQgJiYgKGZpcnN0Q2hpbGQgPSBwYXJlbnQtPmZpcnN0Q2hpbGQoKSkgJiYg
Zmlyc3RDaGlsZC0+bm9kZSgpKSB7CisgICAgZWxzZSBpZiAocGFyZW50ICYmIChmaXJzdENoaWxk
ID0gcGFyZW50LT5maXJzdENoaWxkU2xvdygpKSAmJiBmaXJzdENoaWxkLT5ub2RlKCkpIHsKICAg
ICAgICAgLy8gR2V0IHRoZSBub2RlJ3MgcmVuZGVyZXIgYW5kIGZvbGxvdyB0aGF0IGNvbnRpbnVh
dGlvbiBjaGFpbiB1bnRpbCB0aGUgZmlyc3QgY2hpbGQgaXMgZm91bmQKICAgICAgICAgUmVuZGVy
T2JqZWN0KiBub2RlUmVuZGVyRmlyc3RDaGlsZCA9IGZpcnN0Q2hpbGQtPm5vZGUoKS0+cmVuZGVy
ZXIoKTsKICAgICAgICAgd2hpbGUgKG5vZGVSZW5kZXJGaXJzdENoaWxkICE9IGZpcnN0Q2hpbGQp
IHsKQEAgLTQ1OSw5ICs0NTksOSBAQCBSZW5kZXJPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmaXJzdENoaWxkID09IHBhcmVudC0+Zmlyc3RD
aGlsZCgpKQorICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQgPT0gcGFyZW50LT5maXJzdENoaWxk
U2xvdygpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZmlyc3RDaGlsZCA9
IHBhcmVudC0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgZmlyc3RDaGlsZCA9IHBhcmVudC0+
Zmlyc3RDaGlsZFNsb3coKTsKICAgICAgICAgICAgIGlmICghZmlyc3RDaGlsZC0+bm9kZSgpKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgbm9kZVJlbmRlckZpcnN0Q2hpbGQg
PSBmaXJzdENoaWxkLT5ub2RlKCktPnJlbmRlcmVyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
Q29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5NCw4ICs4OTQsOCBAQCBib29s
IENvbnRhaW5lck5vZGU6OmdldFVwcGVyTGVmdENvcm5lcihGCiAgICAgLy8gZmluZCB0aGUgbmV4
dCB0ZXh0L2ltYWdlIGNoaWxkLCB0byBnZXQgYSBwb3NpdGlvbgogICAgIHdoaWxlIChvKSB7CiAg
ICAgICAgIHAgPSBvOwotICAgICAgICBpZiAoby0+Zmlyc3RDaGlsZCgpKQotICAgICAgICAgICAg
byA9IG8tPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgaWYgKG8tPmZpcnN0Q2hpbGRTbG93KCkpCisg
ICAgICAgICAgICBvID0gby0+Zmlyc3RDaGlsZFNsb3coKTsKICAgICAgICAgZWxzZSBpZiAoby0+
bmV4dFNpYmxpbmcoKSkKICAgICAgICAgICAgIG8gPSBvLT5uZXh0U2libGluZygpOwogICAgICAg
ICBlbHNlIHsKQEAgLTk1NCw4ICs5NTQsOCBAQCBib29sIENvbnRhaW5lck5vZGU6OmdldExvd2Vy
UmlnaHRDb3JuZXIoCiAKICAgICAvLyBmaW5kIHRoZSBsYXN0IHRleHQvaW1hZ2UgY2hpbGQsIHRv
IGdldCBhIHBvc2l0aW9uCiAgICAgd2hpbGUgKG8pIHsKLSAgICAgICAgaWYgKG8tPmxhc3RDaGls
ZCgpKQotICAgICAgICAgICAgbyA9IG8tPmxhc3RDaGlsZCgpOworICAgICAgICBpZiAoby0+bGFz
dENoaWxkU2xvdygpKQorICAgICAgICAgICAgbyA9IG8tPmxhc3RDaGlsZFNsb3coKTsKICAgICAg
ICAgZWxzZSBpZiAoby0+cHJldmlvdXNTaWJsaW5nKCkpCiAgICAgICAgICAgICBvID0gby0+cHJl
dmlvdXNTaWJsaW5nKCk7CiAgICAgICAgIGVsc2UgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L1Bvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24u
Y3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NTQsNyArODU0LDcgQEAgc3RhdGljIGludCBib3VuZGluZ0Jv
eExvZ2ljYWxIZWlnaHQoUmVuZAogYm9vbCBQb3NpdGlvbjo6aGFzUmVuZGVyZWROb25Bbm9ueW1v
dXNEZXNjZW5kYW50c1dpdGhIZWlnaHQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBS
ZW5kZXJPYmplY3QqIHN0b3AgPSByZW5kZXJlci0+bmV4dEluUHJlT3JkZXJBZnRlckNoaWxkcmVu
KCk7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QgKm8gPSByZW5kZXJlci0+Zmlyc3RDaGlsZCgpOyBv
ICYmIG8gIT0gc3RvcDsgbyA9IG8tPm5leHRJblByZU9yZGVyKCkpCisgICAgZm9yIChSZW5kZXJP
YmplY3QgKm8gPSByZW5kZXJlci0+Zmlyc3RDaGlsZFNsb3coKTsgbyAmJiBvICE9IHN0b3A7IG8g
PSBvLT5uZXh0SW5QcmVPcmRlcigpKQogICAgICAgICBpZiAoby0+bm9uUHNldWRvTm9kZSgpKSB7
CiAgICAgICAgICAgICBpZiAoKG8tPmlzVGV4dCgpICYmIGJvdW5kaW5nQm94TG9naWNhbEhlaWdo
dChvLCB0b1JlbmRlclRleHQobyktPmxpbmVzQm91bmRpbmdCb3goKSkpCiAgICAgICAgICAgICAg
ICAgfHwgKG8tPmlzTGluZUJyZWFrKCkgJiYgYm91bmRpbmdCb3hMb2dpY2FsSGVpZ2h0KG8sIHRv
UmVuZGVyTGluZUJyZWFrKG8pLT5saW5lc0JvdW5kaW5nQm94KCkpKQpAQCAtMTEzNCwxMCArMTEz
NCwxMCBAQCB2b2lkIFBvc2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmCiAKIHN0YXRp
YyBib29sIGlzTm9uVGV4dExlYWZDaGlsZChSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKLSAgICBp
ZiAob2JqZWN0LT5maXJzdENoaWxkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAo
b2JqZWN0LT5pc1RleHQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICh0b1JlbmRl
ckVsZW1lbnQob2JqZWN0KS0+Zmlyc3RDaGlsZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVy
YXRvci5jcHAJKHJldmlzaW9uIDE1NjI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQyLDcgKzY0Miw3IEBAIHN0YXRpYyBp
bmxpbmUgUmVuZGVyVGV4dCogZmlyc3RSZW5kZXJUZXgKICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgY2hlY2sgZGVzY2VuZGVudCBvYmplY3RzPwotICAgIGZv
ciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RMZXR0ZXItPmZpcnN0Q2hpbGQoKTsgY3Vy
cmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICBmb3IgKFJlbmRl
ck9iamVjdCogY3VycmVudCA9IGZpcnN0TGV0dGVyLT5maXJzdENoaWxkU2xvdygpOyBjdXJyZW50
OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoY3VycmVu
dC0+aXNUZXh0KCkpCiAgICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJUZXh0KGN1cnJlbnQpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCShyZXZpc2lv
biAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODk2LDcgKzg5Niw3IEBAIGJvb2wgaXNFbXB0eVRhYmxlQ2VsbChjb25z
dCBOb2RlKiBub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBDaGVjayB0aGF0
IHRoZSB0YWJsZSBjZWxsIGNvbnRhaW5zIG5vIGNoaWxkIHJlbmRlcmVycyBleGNlcHQgZm9yIHBl
cmhhcHMgYSBzaW5nbGUgPGJyPi4KLSAgICBSZW5kZXJPYmplY3QqIGNoaWxkUmVuZGVyZXIgPSBy
ZW5kZXJlci0+Zmlyc3RDaGlsZCgpOworICAgIFJlbmRlck9iamVjdCogY2hpbGRSZW5kZXJlciA9
IHRvUmVuZGVyRWxlbWVudChyZW5kZXJlciktPmZpcnN0Q2hpbGQoKTsKICAgICBpZiAoIWNoaWxk
UmVuZGVyZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmICghY2hpbGRSZW5kZXJlci0+
aXNCUigpKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJl
ZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQuY3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6Z2F0aGVyTGF5
ZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChyZW5kZXJlciA9IHJlbmRlcmVy
LT5maXJzdENoaWxkKCk7IHJlbmRlcmVyOyByZW5kZXJlciA9IHJlbmRlcmVyLT5uZXh0U2libGlu
ZygpKQorICAgIGZvciAocmVuZGVyZXIgPSByZW5kZXJlci0+Zmlyc3RDaGlsZFNsb3coKTsgcmVu
ZGVyZXI7IHJlbmRlcmVyID0gcmVuZGVyZXItPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGdhdGhl
ckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KGVycm9yU3RyaW5nLCByZW5kZXJlciwg
bGF5ZXJzKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVM
YXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRh
YmxlTGF5b3V0LmNwcAkocmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDcg
QEAgaW50IEZpeGVkVGFibGVMYXlvdXQ6OmNhbGNXaWR0aEFycmF5KCkKICAgICB1bnNpZ25lZCBj
dXJyZW50Q29sdW1uID0gMDsKIAogICAgIFJlbmRlck9iamVjdCogZmlyc3RSb3cgPSBzZWN0aW9u
LT5maXJzdENoaWxkKCk7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RSb3ct
PmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAg
ICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdFJvdy0+Zmlyc3RDaGlsZFNsb3coKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKCFjaGls
ZC0+aXNUYWJsZUNlbGwoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxNTYyNzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2OCw3ICsyNjgsNyBAQCBSZW5kZXJMaW5lQm94TGlzdCYgSW5saW5lRmxvd0JveDo6
cmVuZGVyCiAgICAgcmV0dXJuIHRvUmVuZGVySW5saW5lKHJlbmRlcmVyKCkpLmxpbmVCb3hlcygp
OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNMYXN0Q2hpbGRGb3JSZW5kZXJlcihSZW5kZXJP
YmplY3QqIGFuY2VzdG9yLCBSZW5kZXJPYmplY3QqIGNoaWxkKQorc3RhdGljIGlubGluZSBib29s
IGlzTGFzdENoaWxkRm9yUmVuZGVyZXIoUmVuZGVyRWxlbWVudCogYW5jZXN0b3IsIFJlbmRlck9i
amVjdCogY2hpbGQpCiB7CiAgICAgaWYgKCFjaGlsZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMjc3LDcgKzI3Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0xhc3RDaGlsZEZvclJlbmRl
cmUKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBSZW5kZXJPYmplY3QqIGN1cnIgPSBjaGls
ZDsKLSAgICBSZW5kZXJPYmplY3QqIHBhcmVudCA9IGN1cnItPnBhcmVudCgpOworICAgIFJlbmRl
ckVsZW1lbnQqIHBhcmVudCA9IGN1cnItPnBhcmVudCgpOwogICAgIHdoaWxlIChwYXJlbnQgJiYg
KCFwYXJlbnQtPmlzUmVuZGVyQmxvY2soKSB8fCBwYXJlbnQtPmlzSW5saW5lKCkpKSB7CiAgICAg
ICAgIGlmIChwYXJlbnQtPmxhc3RDaGlsZCgpICE9IGN1cnIpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lSXRlcmF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lSXRlcmF0b3IuaAko
cmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUl0ZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw3ICsxODAsNyBAQCBzdGF0aWMgYm9vbCBpc0Vt
cHR5SW5saW5lKFJlbmRlck9iamVjdCogCiAgICAgaWYgKCFvYmplY3QtPmlzUmVuZGVySW5saW5l
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJy
ID0gb2JqZWN0LT5maXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygp
KSB7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSB0b1JlbmRlckVsZW1lbnQob2JqZWN0
KS0+Zmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgewogICAg
ICAgICBpZiAoY3Vyci0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChjdXJyLT5pc1RleHQoKSAmJiB0b1JlbmRlclRl
eHQoY3VyciktPmlzQWxsQ29sbGFwc2libGVXaGl0ZXNwYWNlKCkpCkBAIC0yMDYsNyArMjA2LDcg
QEAgc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGJpZGlOZXh0U2hhcgogICAgIHdoaWxlIChj
dXJyZW50KSB7CiAgICAgICAgIG5leHQgPSAwOwogICAgICAgICBpZiAoIW9sZEVuZE9mSW5saW5l
ICYmICFpc0l0ZXJhdG9yVGFyZ2V0KGN1cnJlbnQpKSB7Ci0gICAgICAgICAgICBuZXh0ID0gY3Vy
cmVudC0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgbmV4dCA9IHRvUmVuZGVyRWxlbWVudChj
dXJyZW50KS0+Zmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgbm90aWZ5T2JzZXJ2ZXJFbnRlcmVk
T2JqZWN0KG9ic2VydmVyLCBuZXh0KTsKICAgICAgICAgfQogCkBAIC0yNzMsNyArMjczLDcgQEAg
c3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGJpZGlOZXh0SW5jbAogICAgIHJldHVybiBiaWRp
TmV4dFNoYXJlZChyb290LCBjdXJyZW50LCBvYnNlcnZlciwgSW5jbHVkZUVtcHR5SW5saW5lcywg
ZW5kT2ZJbmxpbmVQdHIpOwogfQogCi1zdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogYmlkaUZp
cnN0U2tpcHBpbmdFbXB0eUlubGluZXMoUmVuZGVyT2JqZWN0KiByb290LCBJbmxpbmVCaWRpUmVz
b2x2ZXIqIHJlc29sdmVyID0gMCkKK3N0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBiaWRpRmly
c3RTa2lwcGluZ0VtcHR5SW5saW5lcyhSZW5kZXJFbGVtZW50KiByb290LCBJbmxpbmVCaWRpUmVz
b2x2ZXIqIHJlc29sdmVyID0gMCkKIHsKICAgICBSZW5kZXJPYmplY3QqIG8gPSByb290LT5maXJz
dENoaWxkKCk7CiAgICAgaWYgKCFvKQpAQCAtMzAxLDcgKzMwMSw3IEBAIHN0YXRpYyBpbmxpbmUg
UmVuZGVyT2JqZWN0KiBiaWRpRmlyc3RTa2kKIH0KIAogLy8gRklYTUU6IFRoaXMgbWV0aG9kIG5l
ZWRzIHRvIGJlIHJlbmFtZWQgd2hlbiBiaWRpTmV4dCBmaW5kcyBhIGdvb2QgbmFtZS4KLXN0YXRp
YyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBiaWRpRmlyc3RJbmNsdWRpbmdFbXB0eUlubGluZXMoUmVu
ZGVyT2JqZWN0KiByb290KQorc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGJpZGlGaXJzdElu
Y2x1ZGluZ0VtcHR5SW5saW5lcyhSZW5kZXJFbGVtZW50KiByb290KQogewogICAgIFJlbmRlck9i
amVjdCogbyA9IHJvb3QtPmZpcnN0Q2hpbGQoKTsKICAgICAvLyBJZiBlaXRoZXIgdGhlcmUgYXJl
IG5vIGNoaWxkcmVuIHRvIHdhbGssIG9yIHRoZSBmaXJzdCBvbmUgaXMgY29ycmVjdApAQCAtMzI0
LDcgKzMyNCw3IEBAIGlubGluZSB2b2lkIElubGluZUl0ZXJhdG9yOjpmYXN0SW5jcmVtZW4KIC8v
IGl0IHNob3VsZG4ndCB1c2UgZnVuY3Rpb25zIGNhbGxlZCBiaWRpRmlyc3QgYW5kIGJpZGlOZXh0
LgogY2xhc3MgSW5saW5lV2Fsa2VyIHsKIHB1YmxpYzoKLSAgICBJbmxpbmVXYWxrZXIoUmVuZGVy
T2JqZWN0KiByb290KQorICAgIElubGluZVdhbGtlcihSZW5kZXJFbGVtZW50KiByb290KQogICAg
ICAgICA6IG1fcm9vdChyb290KQogICAgICAgICAsIG1fY3VycmVudCgwKQogICAgICAgICAsIG1f
YXRFbmRPZklubGluZShmYWxzZSkKQEAgLTMzMyw3ICszMzMsNyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fY3VycmVudCA9IGJpZGlGaXJzdEluY2x1ZGluZ0VtcHR5SW5saW5lcyhtX3Jvb3QpOwogICAg
IH0KIAotICAgIFJlbmRlck9iamVjdCogcm9vdCgpIHsgcmV0dXJuIG1fcm9vdDsgfQorICAgIFJl
bmRlckVsZW1lbnQqIHJvb3QoKSB7IHJldHVybiBtX3Jvb3Q7IH0KICAgICBSZW5kZXJPYmplY3Qq
IGN1cnJlbnQoKSB7IHJldHVybiBtX2N1cnJlbnQ7IH0KIAogICAgIGJvb2wgYXRFbmRPZklubGlu
ZSgpIHsgcmV0dXJuIG1fYXRFbmRPZklubGluZTsgfQpAQCAtMzQ2LDcgKzM0Niw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG1fY3VycmVudDsKICAgICB9CiBwcml2YXRlOgotICAgIFJlbmRl
ck9iamVjdCogbV9yb290OworICAgIFJlbmRlckVsZW1lbnQqIG1fcm9vdDsKICAgICBSZW5kZXJP
YmplY3QqIG1fY3VycmVudDsKICAgICBib29sIG1fYXRFbmRPZklubGluZTsKIH07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDE1NjI3OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNzgsNyArMTA3OCw3IEBAIHN0YXRpYyBib29sIGNhbk1lcmdlQ29udGlndW91c0Fu
b255bW91c0IKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRklYTUU6IFRoaXMgY2hl
Y2sgaXNuJ3QgcmVxdWlyZWQgd2hlbiBpbmxpbmUgcnVuLWlucyBjYW4ndCBiZSBzcGxpdCBpbnRv
IGNvbnRpbnVhdGlvbnMuCi0gICAgaWYgKHByZXYgJiYgcHJldi0+Zmlyc3RDaGlsZCgpICYmIHBy
ZXYtPmZpcnN0Q2hpbGQoKS0+aXNJbmxpbmUoKSAmJiBwcmV2LT5maXJzdENoaWxkKCktPmlzUnVu
SW4oKSkKKyAgICBpZiAocHJldiAmJiBwcmV2LT5maXJzdENoaWxkU2xvdygpICYmIHByZXYtPmZp
cnN0Q2hpbGRTbG93KCktPmlzSW5saW5lKCkgJiYgcHJldi0+Zmlyc3RDaGlsZFNsb3coKS0+aXNS
dW5JbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoKHByZXYgJiYgKHByZXYt
PmlzUnVieVJ1bigpIHx8IHByZXYtPmlzUnVieUJhc2UoKSkpCkBAIC01MDgwLDcgKzUwODAsNyBA
QCBSZW5kZXJPYmplY3QqIElubGluZU1pbk1heEl0ZXJhdG9yOjpuZXh0CiAgICAgICAgIGlmICgh
b2xkRW5kT2ZJbmxpbmUgJiYKICAgICAgICAgICAgIChjdXJyZW50ID09IHBhcmVudCB8fAogICAg
ICAgICAgICAgICghY3VycmVudC0+aXNGbG9hdGluZygpICYmICFjdXJyZW50LT5pc1JlcGxhY2Vk
KCkgJiYgIWN1cnJlbnQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKSkpCi0gICAgICAgICAgICBy
ZXN1bHQgPSBjdXJyZW50LT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICByZXN1bHQgPSBjdXJy
ZW50LT5maXJzdENoaWxkU2xvdygpOwogICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAg
ICAgLy8gV2UgaGl0IHRoZSBlbmQgb2Ygb3VyIGlubGluZS4gKEl0IHdhcyBlbXB0eSwgZS5nLiwg
PHNwYW4+PC9zcGFuPi4pCiAgICAgICAgICAgICBpZiAoIW9sZEVuZE9mSW5saW5lICYmIGN1cnJl
bnQtPmlzUmVuZGVySW5saW5lKCkpIHsKQEAgLTU3NDUsNyArNTc0NSw3IEBAIFJlbmRlckJsb2Nr
KiBSZW5kZXJCbG9jazo6Zmlyc3RMaW5lQmxvY2sKICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB3
aGVuIGJ1dHRvbnMgYXJlIGltcGxlbWVudGVkIHdpdGggYWxpZ24taXRlbXMgaW5zdGVhZAogICAg
ICAgICAvLyBvZiBmbGV4Ym94LgogICAgICAgICBpZiAoZmlyc3RMaW5lQmxvY2stPmlzUmVwbGFj
ZWQoKSB8fCBmaXJzdExpbmVCbG9jay0+aXNGbG9hdGluZygpCi0gICAgICAgICAgICB8fCAhcGFy
ZW50QmxvY2sgfHwgcGFyZW50QmxvY2stPmZpcnN0Q2hpbGQoKSAhPSBmaXJzdExpbmVCbG9jayB8
fCAoIXBhcmVudEJsb2NrLT5pc1JlbmRlckJsb2NrRmxvdygpICYmICFwYXJlbnRCbG9jay0+aXNS
ZW5kZXJCdXR0b24oKSkpCisgICAgICAgICAgICB8fCAhcGFyZW50QmxvY2sgfHwgcGFyZW50Qmxv
Y2stPmZpcnN0Q2hpbGRTbG93KCkgIT0gZmlyc3RMaW5lQmxvY2sgfHwgKCFwYXJlbnRCbG9jay0+
aXNSZW5kZXJCbG9ja0Zsb3coKSAmJiAhcGFyZW50QmxvY2stPmlzUmVuZGVyQnV0dG9uKCkpKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKHBhcmVudEJsb2NrLT5pc1JlbmRlckJsb2NrKCkpOwogICAgICAgICBmaXJzdExpbmVCbG9j
ayA9IHRvUmVuZGVyQmxvY2socGFyZW50QmxvY2spOwpAQCAtNTc4NSw5ICs1Nzg1LDkgQEAgc3Rh
dGljIGlubGluZSBib29sIHNob3VsZFNraXBGb3JGaXJzdExldAogICAgIHJldHVybiBpc1NwYWNl
T3JOZXdsaW5lKGMpIHx8IGMgPT0gbm9CcmVha1NwYWNlIHx8IGlzUHVuY3R1YXRpb25Gb3JGaXJz
dExldHRlcihjKTsKIH0KIAotc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGZpbmRGaXJzdExl
dHRlckJsb2NrKFJlbmRlckJsb2NrKiBzdGFydCkKK3N0YXRpYyBpbmxpbmUgUmVuZGVyRWxlbWVu
dCogZmluZEZpcnN0TGV0dGVyQmxvY2soUmVuZGVyQmxvY2sqIHN0YXJ0KQogewotICAgIFJlbmRl
ck9iamVjdCogZmlyc3RMZXR0ZXJCbG9jayA9IHN0YXJ0OworICAgIFJlbmRlckVsZW1lbnQqIGZp
cnN0TGV0dGVyQmxvY2sgPSBzdGFydDsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAvLyBX
ZSBpbmNsdWRlIGlzUmVuZGVyQnV0dG9uIGluIHRoZXNlIHR3byBjaGVja3MgYmVjYXVzZSBidXR0
b25zIGFyZQogICAgICAgICAvLyBpbXBsZW1lbnRlZCB1c2luZyBmbGV4IGJveCBidXQgc2hvdWxk
IHN0aWxsIHN1cHBvcnQgZmlyc3QtbGV0dGVyLgpAQCAtNTgwMSw5ICs1ODAxLDkgQEAgc3RhdGlj
IGlubGluZSBSZW5kZXJPYmplY3QqIGZpbmRGaXJzdExldAogICAgICAgICBpZiAoY2FuSGF2ZUZp
cnN0TGV0dGVyUmVuZGVyZXIpCiAgICAgICAgICAgICByZXR1cm4gZmlyc3RMZXR0ZXJCbG9jazsK
IAotICAgICAgICBSZW5kZXJPYmplY3QqIHBhcmVudEJsb2NrID0gZmlyc3RMZXR0ZXJCbG9jay0+
cGFyZW50KCk7Ci0gICAgICAgIGlmIChmaXJzdExldHRlckJsb2NrLT5pc1JlcGxhY2VkKCkgfHwg
IXBhcmVudEJsb2NrIHx8IHBhcmVudEJsb2NrLT5maXJzdENoaWxkKCkgIT0gZmlyc3RMZXR0ZXJC
bG9jayB8fCAKLSAgICAgICAgICAgICghcGFyZW50QmxvY2stPmlzUmVuZGVyQmxvY2tGbG93KCkg
JiYgIXBhcmVudEJsb2NrLT5pc1JlbmRlckJ1dHRvbigpKSkKKyAgICAgICAgUmVuZGVyRWxlbWVu
dCogcGFyZW50QmxvY2sgPSBmaXJzdExldHRlckJsb2NrLT5wYXJlbnQoKTsKKyAgICAgICAgaWYg
KGZpcnN0TGV0dGVyQmxvY2stPmlzUmVwbGFjZWQoKSB8fCAhcGFyZW50QmxvY2sgfHwgcGFyZW50
QmxvY2stPmZpcnN0Q2hpbGQoKSAhPSBmaXJzdExldHRlckJsb2NrCisgICAgICAgICAgICB8fCAo
IXBhcmVudEJsb2NrLT5pc1JlbmRlckJsb2NrRmxvdygpICYmICFwYXJlbnRCbG9jay0+aXNSZW5k
ZXJCdXR0b24oKSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgZmlyc3RMZXR0ZXJC
bG9jayA9IHBhcmVudEJsb2NrOwogICAgIH0gCkBAIC01OTQ0LDcgKzU5NDQsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjp1cGRhdGVGaXJzdExldHRlcigpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IERyaWxsIGludG8gaW5saW5lcyBsb29raW5nIGZvciBvdXIgZmlyc3QgdGV4dCBjaGlsZC4KLSAg
ICBSZW5kZXJPYmplY3QqIGN1cnJDaGlsZCA9IGZpcnN0TGV0dGVyQmxvY2stPmZpcnN0Q2hpbGQo
KTsKKyAgICBSZW5kZXJPYmplY3QqIGN1cnJDaGlsZCA9IGZpcnN0TGV0dGVyQmxvY2stPmZpcnN0
Q2hpbGRTbG93KCk7CiAgICAgd2hpbGUgKGN1cnJDaGlsZCkgewogICAgICAgICBpZiAoY3VyckNo
aWxkLT5pc1RleHQoKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTk1Miw3ICs1OTUyLDcgQEAg
dm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlRmlyc3RMZXR0ZXIoKQogICAgICAgICAgICAgY3VyckNo
aWxkID0gY3VyckNoaWxkLT5uZXh0U2libGluZygpOwogICAgICAgICBlbHNlIGlmIChjdXJyQ2hp
bGQtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewogICAgICAgICAgICAgaWYg
KGN1cnJDaGlsZC0+c3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gRklSU1RfTEVUVEVSKSB7Ci0gICAg
ICAgICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5maXJzdENoaWxkKCk7CisgICAgICAg
ICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5maXJzdENoaWxkU2xvdygpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY3VyckNoaWxkID0g
Y3VyckNoaWxkLT5uZXh0U2libGluZygpOwpAQCAtNTk2MSw5ICs1OTYxLDkgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6dXBkYXRlRmlyc3RMZXR0ZXIoKQogICAgICAgICBlbHNlIGlmIChjdXJyQ2hpbGQt
PnN0eWxlKCktPmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikgJiYgY3VyckNoaWxkLT5jYW5I
YXZlR2VuZXJhdGVkQ2hpbGRyZW4oKSkgIHsKICAgICAgICAgICAgIC8vIFdlIGZvdW5kIGEgbG93
ZXItbGV2ZWwgbm9kZSB3aXRoIGZpcnN0LWxldHRlciwgd2hpY2ggc3VwZXJzZWRlcyB0aGUgaGln
aGVyLWxldmVsIHN0eWxlCiAgICAgICAgICAgICBmaXJzdExldHRlckJsb2NrID0gY3VyckNoaWxk
OwotICAgICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5maXJzdENoaWxkKCk7CisgICAg
ICAgICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPmZpcnN0Q2hpbGRTbG93KCk7CiAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5maXJzdENoaWxkKCk7
CisgICAgICAgICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPmZpcnN0Q2hpbGRTbG93KCk7CiAg
ICAgfQogCiAgICAgaWYgKCFjdXJyQ2hpbGQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcAkocmV2aXNpb24gMTU2Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwODIsMTUgKzQwODIsMTQgQEAg
VmlzaWJsZVBvc2l0aW9uIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQbwogICAgICAgICBhZGp1c3Rl
ZFBvaW50Lm1vdmVCeShsb2NhdGlvbigpKTsKIAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiByZW5k
ZXJPYmplY3QgPSBmaXJzdENoaWxkKCk7IHJlbmRlck9iamVjdDsgcmVuZGVyT2JqZWN0ID0gcmVu
ZGVyT2JqZWN0LT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmICgoIXJlbmRlck9iamVjdC0+
Zmlyc3RDaGlsZCgpICYmICFyZW5kZXJPYmplY3QtPmlzSW5saW5lKCkgJiYgIXJlbmRlck9iamVj
dC0+aXNSZW5kZXJCbG9ja0Zsb3coKSApCi0gICAgICAgICAgICB8fCByZW5kZXJPYmplY3QtPnN0
eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIAogICAgICAgICBpZiAoIXJlbmRlck9iamVjdC0+aXNCb3goKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAKICAgICAgICAgUmVuZGVyQm94KiByZW5kZXJlciA9IHRvUmVu
ZGVyQm94KHJlbmRlck9iamVjdCk7CiAKKyAgICAgICAgaWYgKCghcmVuZGVyZXItPmZpcnN0Q2hp
bGQoKSAmJiAhcmVuZGVyZXItPmlzSW5saW5lKCkgJiYgIXJlbmRlcmVyLT5pc1JlbmRlckJsb2Nr
RmxvdygpICkKKyAgICAgICAgICAgIHx8IHJlbmRlcmVyLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkg
IT0gVklTSUJMRSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIExheW91dFVuaXQg
dG9wID0gcmVuZGVyZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBhZGRpbmdUb3AoKSArIChp
c1RhYmxlUm93KCkgPyBMYXlvdXRVbml0KCkgOiByZW5kZXJlci0+eSgpKTsKICAgICAgICAgTGF5
b3V0VW5pdCBib3R0b20gPSB0b3AgKyByZW5kZXJlci0+Y29udGVudEhlaWdodCgpOwogICAgICAg
ICBMYXlvdXRVbml0IGxlZnQgPSByZW5kZXJlci0+Ym9yZGVyTGVmdCgpICsgcmVuZGVyZXItPnBh
ZGRpbmdMZWZ0KCkgKyAoaXNUYWJsZVJvdygpID8gTGF5b3V0VW5pdCgpIDogcmVuZGVyZXItPngo
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNTYyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNiw3ICszMjYsNyBAQCB2b2lkIFJlbmRlckVsZW1l
bnQ6OnJlbW92ZUNoaWxkSW50ZXJuYWwoCiAgICAgICAgIGNhY2hlLT5jaGlsZHJlbkNoYW5nZWQo
dGhpcyk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZExheWVycyhSZW5kZXJPYmplY3QqIG9iaiwgUmVu
ZGVyTGF5ZXIqIHBhcmVudExheWVyLCBSZW5kZXJFbGVtZW50KiYgbmV3T2JqZWN0LCBSZW5kZXJM
YXllciomIGJlZm9yZUNoaWxkKQorc3RhdGljIHZvaWQgYWRkTGF5ZXJzKFJlbmRlckVsZW1lbnQq
IG9iaiwgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyLCBSZW5kZXJFbGVtZW50KiYgbmV3T2JqZWN0
LCBSZW5kZXJMYXllciomIGJlZm9yZUNoaWxkKQogewogICAgIGlmIChvYmotPmhhc0xheWVyKCkp
IHsKICAgICAgICAgaWYgKCFiZWZvcmVDaGlsZCAmJiBuZXdPYmplY3QpIHsKQEAgLTM0MCw4ICsz
NDAsMTAgQEAgc3RhdGljIHZvaWQgYWRkTGF5ZXJzKFJlbmRlck9iamVjdCogb2JqLAogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBvYmotPmZp
cnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGFk
ZExheWVycyhjdXJyLCBwYXJlbnRMYXllciwgbmV3T2JqZWN0LCBiZWZvcmVDaGlsZCk7CisgICAg
Zm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBvYmotPmZpcnN0Q2hpbGQoKTsgY3VycmVudDsg
Y3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQt
PmlzUmVuZGVyRWxlbWVudCgpKQorICAgICAgICAgICAgYWRkTGF5ZXJzKHRvUmVuZGVyRWxlbWVu
dChjdXJyZW50KSwgcGFyZW50TGF5ZXIsIG5ld09iamVjdCwgYmVmb3JlQ2hpbGQpOworICAgIH0K
IH0KIAogdm9pZCBSZW5kZXJFbGVtZW50OjphZGRMYXllcnMoUmVuZGVyTGF5ZXIqIHBhcmVudExh
eWVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCShyZXZp
c2lvbiAxNTYyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBAIHB1YmxpYzoKICAgICBFbGVtZW50KiBu
b25Qc2V1ZG9FbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9FbGVtZW50KFJlbmRlck9iamVjdDo6
bm9uUHNldWRvTm9kZSgpKTsgfQogICAgIEVsZW1lbnQqIGdlbmVyYXRpbmdFbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gdG9FbGVtZW50KFJlbmRlck9iamVjdDo6Z2VuZXJhdGluZ05vZGUoKSk7IH0K
IAotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkKCkgY29uc3QgRklOQUwgeyBy
ZXR1cm4gbV9maXJzdENoaWxkOyB9Ci0gICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGxhc3RDaGls
ZCgpIGNvbnN0IEZJTkFMIHsgcmV0dXJuIG1fbGFzdENoaWxkOyB9CisgICAgUmVuZGVyT2JqZWN0
KiBmaXJzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdENoaWxkOyB9CisgICAgUmVuZGVy
T2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RDaGlsZDsgfQogCiAgICAg
dmlydHVhbCBib29sIGlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKikg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJP
YmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CkBAIC03OSw2
ICs3OSwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgbm9uUHNldWRvTm9kZSgpIGNvbnN0IFdURl9E
RUxFVEVEX0ZVTkNUSU9OOwogICAgIHZvaWQgZ2VuZXJhdGluZ05vZGUoKSBjb25zdCBXVEZfREVM
RVRFRF9GVU5DVElPTjsKICAgICB2b2lkIGlzVGV4dCgpIGNvbnN0IFdURl9ERUxFVEVEX0ZVTkNU
SU9OOworICAgIHZvaWQgaXNSZW5kZXJFbGVtZW50KCkgY29uc3QgV1RGX0RFTEVURURfRlVOQ1RJ
T047CisKKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZFNsb3coKSBjb25zdCB7
IHJldHVybiBmaXJzdENoaWxkKCk7IH0KKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogbGFzdENo
aWxkU2xvdygpIGNvbnN0IHsgcmV0dXJuIGxhc3RDaGlsZCgpOyB9CiAKICAgICBSZW5kZXJPYmpl
Y3QqIG1fZmlyc3RDaGlsZDsKICAgICBSZW5kZXJPYmplY3QqIG1fbGFzdENoaWxkOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lQmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lQmFzZS5jcHAJKHJldmlzaW9u
IDE1NjI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZUJhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHZvaWQgUmVuZGVyRnJhbWVCYXNlOjps
YXlvdXRXaXRoRmxhdHRlbmkKIAogICAgIEFTU0VSVCghY2hpbGRGcmFtZVZpZXctPmxheW91dFBl
bmRpbmcoKSk7CiAgICAgQVNTRVJUKCFjaGlsZFJvb3QtPm5lZWRzTGF5b3V0KCkpOwotICAgIEFT
U0VSVCghY2hpbGRSb290LT5maXJzdENoaWxkKCkgfHwgIWNoaWxkUm9vdC0+Zmlyc3RDaGlsZCgp
LT5maXJzdENoaWxkKCkgfHwgIWNoaWxkUm9vdC0+Zmlyc3RDaGlsZCgpLT5maXJzdENoaWxkKCkt
Pm5lZWRzTGF5b3V0KCkpOworICAgIEFTU0VSVCghY2hpbGRSb290LT5maXJzdENoaWxkKCkgfHwg
IWNoaWxkUm9vdC0+Zmlyc3RDaGlsZCgpLT5maXJzdENoaWxkU2xvdygpIHx8ICFjaGlsZFJvb3Qt
PmZpcnN0Q2hpbGQoKS0+Zmlyc3RDaGlsZFNsb3coKS0+bmVlZHNMYXlvdXQoKSk7CiAKICAgICBz
ZXROZWVkc0xheW91dChmYWxzZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDE1NjI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMzgsOCArMTEzOCw5IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZURlc2NlbmRhbnREZXBlbmQKICAgICAgICAgICAgICAg
ICAgICAgbV9oYXNWaXNpYmxlQ29udGVudCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoci0+Zmlyc3RDaGls
ZCgpICYmICFyLT5oYXNMYXllcigpKQotICAgICAgICAgICAgICAgICAgICByID0gci0+Zmlyc3RD
aGlsZCgpOworICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogY2hpbGQ7CisgICAgICAgICAg
ICAgICAgaWYgKCFyLT5oYXNMYXllcigpICYmIChjaGlsZCA9IHItPmZpcnN0Q2hpbGRTbG93KCkp
KQorICAgICAgICAgICAgICAgICAgICByID0gY2hpbGQ7CiAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoci0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgICAgICAgICAgICAgciA9IHItPm5leHRTaWJs
aW5nKCk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHJldmlzaW9uIDE1NjI3NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
MCw3ICsyNjAsNyBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjp1cGRhdGVWYWx1ZSgpCiAgICAgfQog
fQogCi1zdGF0aWMgUmVuZGVyT2JqZWN0KiBmaXJzdE5vbk1hcmtlckNoaWxkKFJlbmRlck9iamVj
dCogcGFyZW50KQorc3RhdGljIFJlbmRlck9iamVjdCogZmlyc3ROb25NYXJrZXJDaGlsZChSZW5k
ZXJCbG9jayogcGFyZW50KQogewogICAgIFJlbmRlck9iamVjdCogcmVzdWx0ID0gcGFyZW50LT5m
aXJzdENoaWxkKCk7CiAgICAgd2hpbGUgKHJlc3VsdCAmJiByZXN1bHQtPmlzTGlzdE1hcmtlcigp
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlz
aW9uIDE1NjI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNyArMjE1LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnNl
dEZsb3dUaHJlYWRTdGF0ZUluYwogewogICAgIHNldEZsb3dUaHJlYWRTdGF0ZShzdGF0ZSk7CiAK
LSAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxk
ID0gZmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkp
IHsKICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGEgZnJhZ21lbnRhdGlvbiBjb250ZXh0IGl0
IGFscmVhZHkgdXBkYXRlZCB0aGUgZGVzY2VuZGFudHMgZmxhZyBhY2NvcmRpbmdseS4KICAgICAg
ICAgaWYgKGNoaWxkLT5pc1JlbmRlckZsb3dUaHJlYWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwpAQCAtMjQ0LDcgKzI0NCw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpyZW1vdmVGcm9tUGFyZW50
KCkKIAogUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6Om5leHRJblByZU9yZGVyKCkgY29uc3QK
IHsKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiBvID0gZmlyc3RDaGlsZCgpKQorICAgIGlmIChSZW5k
ZXJPYmplY3QqIG8gPSBmaXJzdENoaWxkU2xvdygpKQogICAgICAgICByZXR1cm4gbzsKIAogICAg
IHJldHVybiBuZXh0SW5QcmVPcmRlckFmdGVyQ2hpbGRyZW4oKTsKQEAgLTI2Niw3ICsyNjYsNyBA
QCBSZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6bmV4dEluUHJlT3JkCiAKIFJlbmRlck9iamVj
dCogUmVuZGVyT2JqZWN0OjpuZXh0SW5QcmVPcmRlcihjb25zdCBSZW5kZXJPYmplY3QqIHN0YXlX
aXRoaW4pIGNvbnN0CiB7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogbyA9IGZpcnN0Q2hpbGQoKSkK
KyAgICBpZiAoUmVuZGVyT2JqZWN0KiBvID0gZmlyc3RDaGlsZFNsb3coKSkKICAgICAgICAgcmV0
dXJuIG87CiAKICAgICByZXR1cm4gbmV4dEluUHJlT3JkZXJBZnRlckNoaWxkcmVuKHN0YXlXaXRo
aW4pOwpAQCAtMjkwLDggKzI5MCw4IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0OjpuZXh0
SW5QcmVPcmQKIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0OjpwcmV2aW91c0luUHJlT3JkZXIo
KSBjb25zdAogewogICAgIGlmIChSZW5kZXJPYmplY3QqIG8gPSBwcmV2aW91c1NpYmxpbmcoKSkg
ewotICAgICAgICB3aGlsZSAoby0+bGFzdENoaWxkKCkpCi0gICAgICAgICAgICBvID0gby0+bGFz
dENoaWxkKCk7CisgICAgICAgIHdoaWxlIChSZW5kZXJPYmplY3QqIGxhc3QgPSBvLT5sYXN0Q2hp
bGRTbG93KCkpCisgICAgICAgICAgICBvID0gbGFzdDsKICAgICAgICAgcmV0dXJuIG87CiAgICAg
fQogCkBAIC0zMDgsNyArMzA4LDcgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6OnByZXZp
b3VzSW5QcgogCiBSZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6Y2hpbGRBdCh1bnNpZ25lZCBp
bmRleCkgY29uc3QKIHsKLSAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOwor
ICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkU2xvdygpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGNoaWxkICYmIGkgPCBpbmRleDsgaSsrKQogICAgICAgICBjaGlsZCA9IGNo
aWxkLT5uZXh0U2libGluZygpOwogICAgIHJldHVybiBjaGlsZDsKQEAgLTMxNiwxMCArMzE2LDEw
IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0OjpjaGlsZEF0KHVuc2kKIAogUmVuZGVyT2Jq
ZWN0KiBSZW5kZXJPYmplY3Q6OmZpcnN0TGVhZkNoaWxkKCkgY29uc3QKIHsKLSAgICBSZW5kZXJP
YmplY3QqIHIgPSBmaXJzdENoaWxkKCk7CisgICAgUmVuZGVyT2JqZWN0KiByID0gZmlyc3RDaGls
ZFNsb3coKTsKICAgICB3aGlsZSAocikgewogICAgICAgICBSZW5kZXJPYmplY3QqIG4gPSAwOwot
ICAgICAgICBuID0gci0+Zmlyc3RDaGlsZCgpOworICAgICAgICBuID0gci0+Zmlyc3RDaGlsZFNs
b3coKTsKICAgICAgICAgaWYgKCFuKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIHIgPSBu
OwpAQCAtMzI5LDEwICszMjksMTAgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6OmZpcnN0
TGVhZkNoaQogCiBSZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6bGFzdExlYWZDaGlsZCgpIGNv
bnN0CiB7Ci0gICAgUmVuZGVyT2JqZWN0KiByID0gbGFzdENoaWxkKCk7CisgICAgUmVuZGVyT2Jq
ZWN0KiByID0gbGFzdENoaWxkU2xvdygpOwogICAgIHdoaWxlIChyKSB7CiAgICAgICAgIFJlbmRl
ck9iamVjdCogbiA9IDA7Ci0gICAgICAgIG4gPSByLT5sYXN0Q2hpbGQoKTsKKyAgICAgICAgbiA9
IHItPmxhc3RDaGlsZFNsb3coKTsKICAgICAgICAgaWYgKCFuKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIHIgPSBuOwpAQCAtMTIyOCw3ICsxMjI4LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6
OmFkZEFic29sdXRlUmVjdEZvckxheQogewogICAgIGlmIChoYXNMYXllcigpKQogICAgICAgICBy
ZXN1bHQudW5pdGUoYWJzb2x1dGVCb3VuZGluZ0JveFJlY3RJZ25vcmluZ1RyYW5zZm9ybXMoKSk7
Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBmaXJzdENoaWxkKCk7IGN1cnJlbnQ7
IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKQorICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBjdXJyZW50ID0gZmlyc3RDaGlsZFNsb3coKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQt
Pm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGN1cnJlbnQtPmFkZEFic29sdXRlUmVjdEZvckxheWVy
KHJlc3VsdCk7CiB9CiAKQEAgLTEyMzcsNyArMTIzNyw3IEBAIExheW91dFJlY3QgUmVuZGVyT2Jq
ZWN0OjpwYWludGluZ1Jvb3RSZWMKIHsKICAgICBMYXlvdXRSZWN0IHJlc3VsdCA9IGFic29sdXRl
Qm91bmRpbmdCb3hSZWN0SWdub3JpbmdUcmFuc2Zvcm1zKCk7CiAgICAgdG9wTGV2ZWxSZWN0ID0g
cmVzdWx0OwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOyBj
dXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkKKyAgICBmb3IgKFJlbmRl
ck9iamVjdCogY3VycmVudCA9IGZpcnN0Q2hpbGRTbG93KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBj
dXJyZW50LT5uZXh0U2libGluZygpKQogICAgICAgICBjdXJyZW50LT5hZGRBYnNvbHV0ZVJlY3RG
b3JMYXllcihyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xNTkxLDcgKzE1OTEs
NyBAQCB2b2lkIFJlbmRlck9iamVjdDo6c2hvd1JlbmRlclRyZWVBbmRNYXJrCiAgICAgaWYgKCF0
aGlzKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGNvbnN0IFJlbmRlck9iamVjdCogY2hp
bGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQor
ICAgIGZvciAoY29uc3QgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGRTbG93KCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAgICBjaGlsZC0+c2hvd1Jl
bmRlclRyZWVBbmRNYXJrKG1hcmtlZE9iamVjdDEsIG1hcmtlZExhYmVsMSwgbWFya2VkT2JqZWN0
MiwgbWFya2VkTGFiZWwyLCBkZXB0aCArIDEpOwogfQogCkBAIC0xNzc5LDcgKzE3NzksOSBAQCB2
b2lkIFJlbmRlck9iamVjdDo6c2V0UHNldWRvU3R5bGUoUGFzc1JlCiAKIGlubGluZSBib29sIFJl
bmRlck9iamVjdDo6aGFzSW1tZWRpYXRlTm9uV2hpdGVzcGFjZVRleHRDaGlsZCgpIGNvbnN0CiB7
Ci0gICAgZm9yIChjb25zdCBSZW5kZXJPYmplY3QqIHIgPSBmaXJzdENoaWxkKCk7IHI7IHIgPSBy
LT5uZXh0U2libGluZygpKSB7CisgICAgaWYgKGlzVGV4dCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgZm9yIChjb25zdCBSZW5kZXJPYmplY3QqIHIgPSB0b1JlbmRlckVsZW1lbnQodGhp
cyktPmZpcnN0Q2hpbGQoKTsgcjsgciA9IHItPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYg
KHItPmlzVGV4dCgpICYmICF0b1JlbmRlclRleHQociktPmlzQWxsQ29sbGFwc2libGVXaGl0ZXNw
YWNlKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yMDE1LDcgKzIwMTcs
NyBAQCB2b2lkIFJlbmRlck9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVECiB2b2lkIFJlbmRl
ck9iamVjdDo6cHJvcGFnYXRlU3R5bGVUb0Fub255bW91c0NoaWxkcmVuKGJvb2wgYmxvY2tDaGls
ZHJlbk9ubHkpCiB7CiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHNhdmUgdGhpcyBjYWxsIHdoZW4g
dGhlIGNoYW5nZSBvbmx5IGFmZmVjdGVkIG5vbi1pbmhlcml0ZWQgcHJvcGVydGllcy4KLSAgICBm
b3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmly
c3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAg
ICAgICAgaWYgKCFjaGlsZC0+aXNBbm9ueW1vdXMoKSB8fCBjaGlsZC0+c3R5bGUoKS0+c3R5bGVU
eXBlKCkgIT0gTk9QU0VVRE8pCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMjUxNSw3ICsy
NTE3LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnJlbW92ZUZyb21SZW5kZXJGbG93VAogCiB2b2lk
IFJlbmRlck9iamVjdDo6cmVtb3ZlRnJvbVJlbmRlckZsb3dUaHJlYWRSZWN1cnNpdmUoUmVuZGVy
Rmxvd1RocmVhZCogcmVuZGVyRmxvd1RocmVhZCkKIHsKLSAgICBmb3IgKFJlbmRlck9iamVjdCog
Y2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
KQorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGRTbG93KCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAgICBjaGlsZC0+cmVtb3ZlRnJv
bVJlbmRlckZsb3dUaHJlYWRSZWN1cnNpdmUocmVuZGVyRmxvd1RocmVhZCk7CiAKICAgICBSZW5k
ZXJGbG93VGhyZWFkKiBsb2NhbEZsb3dUaHJlYWQgPSByZW5kZXJGbG93VGhyZWFkOwpAQCAtMjUz
NSw3ICsyNTM3LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmRlc3Ryb3lBbmRDbGVhbnVwQW5vbgog
ICAgIH0KIAogICAgIFJlbmRlck9iamVjdCogZGVzdHJveVJvb3QgPSB0aGlzOwotICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBkZXN0cm95Um9vdFBhcmVudCA9IGRlc3Ryb3lSb290LT5wYXJlbnQoKTsg
ZGVzdHJveVJvb3RQYXJlbnQgJiYgZGVzdHJveVJvb3RQYXJlbnQtPmlzQW5vbnltb3VzKCk7IGRl
c3Ryb3lSb290ID0gZGVzdHJveVJvb3RQYXJlbnQsIGRlc3Ryb3lSb290UGFyZW50ID0gZGVzdHJv
eVJvb3RQYXJlbnQtPnBhcmVudCgpKSB7CisgICAgZm9yIChSZW5kZXJFbGVtZW50KiBkZXN0cm95
Um9vdFBhcmVudCA9IGRlc3Ryb3lSb290LT5wYXJlbnQoKTsgZGVzdHJveVJvb3RQYXJlbnQgJiYg
ZGVzdHJveVJvb3RQYXJlbnQtPmlzQW5vbnltb3VzKCk7IGRlc3Ryb3lSb290ID0gZGVzdHJveVJv
b3RQYXJlbnQsIGRlc3Ryb3lSb290UGFyZW50ID0gZGVzdHJveVJvb3RQYXJlbnQtPnBhcmVudCgp
KSB7CiAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IHJlbW92ZSBhbm9ueW1vdXMgY2VsbHMn
IGFuZCB0YWJsZSBzZWN0aW9ucycgd3JhcHBlcnMgYnV0IHdlIHNob3VsZCByZW1vdmUgYWxsIHVu
bmVlZGVkCiAgICAgICAgIC8vIHdyYXBwZXJzLiBTZWUgaHR0cDovL3dlYmtpdC5vcmcvYi81MjEy
MyBhcyBhbiBleGFtcGxlIHdoZXJlIHRoaXMgaXMgbmVlZGVkLgogICAgICAgICBpZiAoIWRlc3Ry
b3lSb290UGFyZW50LT5pc1RhYmxlQ2VsbCgpICYmICFkZXN0cm95Um9vdFBhcmVudC0+aXNUYWJs
ZVNlY3Rpb24oKSkKQEAgLTI2MTQsNyArMjYxNiw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojp1cGRh
dGVEcmFnU3RhdGUoYm9vbCAKICAgICBzZXRJc0RyYWdnaW5nKGRyYWdPbik7CiAgICAgaWYgKHZh
bHVlQ2hhbmdlZCAmJiBub2RlKCkgJiYgKHN0eWxlKCktPmFmZmVjdGVkQnlEcmFnKCkgfHwgKG5v
ZGUoKS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKCkpLT5jaGlsZHJlbkFmZmVj
dGVkQnlEcmFnKCkpKSkKICAgICAgICAgbm9kZSgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0g
ICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBj
dXJyLT5uZXh0U2libGluZygpKQorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RD
aGlsZFNsb3coKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGN1
cnItPnVwZGF0ZURyYWdTdGF0ZShkcmFnT24pOwogfQogCkBAIC0yNjg3LDcgKzI2ODksNyBAQCB2
b2lkIFJlbmRlck9iamVjdDo6bGF5b3V0KCkKIHsKICAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVj
a1BvaW50IGxheW91dENoZWNrUG9pbnQ7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwotICAg
IFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7CisgICAgUmVuZGVyT2JqZWN0KiBj
aGlsZCA9IGZpcnN0Q2hpbGRTbG93KCk7CiAgICAgd2hpbGUgKGNoaWxkKSB7CiAgICAgICAgIGNo
aWxkLT5sYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICBBU1NFUlQoIWNoaWxkLT5uZWVkc0xheW91
dCgpKTsKQEAgLTI5MTIsNyArMjkxNCw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojpjb2xsZWN0QW5u
b3RhdGVkUmVnaW8KICAgICAgICAgcmV0dXJuOwogCiAgICAgYWRkQW5ub3RhdGVkUmVnaW9ucyhy
ZWdpb25zKTsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3Vy
cjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpCisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1
cnIgPSB0b1JlbmRlckVsZW1lbnQodGhpcyktPmZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1
cnItPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGN1cnItPmNvbGxlY3RBbm5vdGF0ZWRSZWdpb25z
KHJlZ2lvbnMpOwogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oCShyZXZpc2lvbiAxNTYyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NCwxMCArMTY0LDkgQEAgcHVibGlj
OgogICAgIFJlbmRlck9iamVjdCogcHJldmlvdXNTaWJsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9w
cmV2aW91czsgfQogICAgIFJlbmRlck9iamVjdCogbmV4dFNpYmxpbmcoKSBjb25zdCB7IHJldHVy
biBtX25leHQ7IH0KIAotICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgcmVuYW1lZCBzbG93
Rmlyc3RDaGlsZCwgc2xvd0xhc3RDaGlsZCwgZXRjLgotICAgIC8vIHRvIGRpc2NvdXJhZ2UgdGhl
aXIgdXNlLgotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkKCkgY29uc3QgeyBy
ZXR1cm4gbnVsbHB0cjsgfQotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQoKSBj
b25zdCB7IHJldHVybiBudWxscHRyOyB9CisgICAgLy8gVXNlIFJlbmRlckVsZW1lbnQgdmVyc2lv
bnMgaW5zdGVhZC4KKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZFNsb3coKSBj
b25zdCB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGxhc3RD
aGlsZFNsb3coKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAKICAgICBSZW5kZXJPYmplY3Qq
IG5leHRJblByZU9yZGVyKCkgY29uc3Q7CiAgICAgUmVuZGVyT2JqZWN0KiBuZXh0SW5QcmVPcmRl
cihjb25zdCBSZW5kZXJPYmplY3QqIHN0YXlXaXRoaW4pIGNvbnN0OwpAQCAtMjI0LDcgKzIyMyw4
IEBAIHB1YmxpYzoKIAogICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCogcmVuZGVyTmFtZWRGbG93
VGhyZWFkV3JhcHBlcigpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25z
dCB7IHJldHVybiBmaXJzdENoaWxkKCkgPT0gMDsgfQorICAgIC8vIEZJWE1FOiBUaGUgbWVhbmlu
ZyBvZiB0aGlzIGZ1bmN0aW9uIGlzIHVuY2xlYXIuCisgICAgdmlydHVhbCBib29sIGlzRW1wdHko
KSBjb25zdCB7IHJldHVybiAhZmlyc3RDaGlsZFNsb3coKTsgfQogCiAjaWZuZGVmIE5ERUJVRwog
ICAgIHZvaWQgc2V0SGFzQVhPYmplY3QoYm9vbCBmbGFnKSB7IG1faGFzQVhPYmplY3QgPSBmbGFn
OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAkocmV2
aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU4MCw3ICs1ODAsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBSZW5kZXJSZWdpb246OmNvCiAKIHZvaWQgUmVuZGVyUmVnaW9uOjpjb21wdXRlQ2hpbGRy
ZW5TdHlsZUluUmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQogewotICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjaGlsZCA9IG9iamVjdC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9
IG9iamVjdC0+Zmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCkpIHsKIAogICAgICAgICBSZW5kZXJPYmplY3RSZWdpb25TdHlsZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmZpbmQoY2hpbGQpOwogCkBAIC02MzIsNyAr
NjMyLDcgQEAgdm9pZCBSZW5kZXJSZWdpb246OmNsZWFyT2JqZWN0U3R5bGVJblJlZwogICAgIG1f
cmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUucmVtb3ZlKG9iamVjdCk7CiAKICAgICAvLyBDbGVhciB0
aGUgc3R5bGUgZm9yIHRoZSBjaGlsZHJlbiBvZiB0aGlzIG9iamVjdC4KLSAgICBmb3IgKFJlbmRl
ck9iamVjdCogY2hpbGQgPSBvYmplY3QtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPm5leHRTaWJsaW5nKCkpCisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gb2JqZWN0
LT5maXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkK
ICAgICAgICAgY2xlYXJPYmplY3RTdHlsZUluUmVnaW9uKGNoaWxkKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcAkocmV2aXNpb24gMTU2Mjc0KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OSwyNyArNTksMjcgQEAgc3RhdGljIGlubGluZSBib29sIGlzUnVieUJlZm9yZUJsb2NrKGNv
bgogewogICAgIHJldHVybiBpc0Fub255bW91c1J1YnlJbmxpbmVCbG9jayhvYmplY3QpCiAgICAg
ICAgICYmICFvYmplY3QtPnByZXZpb3VzU2libGluZygpCi0gICAgICAgICYmIG9iamVjdC0+Zmly
c3RDaGlsZCgpCi0gICAgICAgICYmIG9iamVjdC0+Zmlyc3RDaGlsZCgpLT5zdHlsZSgpLT5zdHls
ZVR5cGUoKSA9PSBCRUZPUkU7CisgICAgICAgICYmIG9iamVjdC0+Zmlyc3RDaGlsZFNsb3coKQor
ICAgICAgICAmJiBvYmplY3QtPmZpcnN0Q2hpbGRTbG93KCktPnN0eWxlKCktPnN0eWxlVHlwZSgp
ID09IEJFRk9SRTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGlzUnVieUFmdGVyQmxvY2soY29u
c3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgcmV0dXJuIGlzQW5vbnltb3VzUnVieUlu
bGluZUJsb2NrKG9iamVjdCkKICAgICAgICAgJiYgIW9iamVjdC0+bmV4dFNpYmxpbmcoKQotICAg
ICAgICAmJiBvYmplY3QtPmZpcnN0Q2hpbGQoKQotICAgICAgICAmJiBvYmplY3QtPmZpcnN0Q2hp
bGQoKS0+c3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gQUZURVI7CisgICAgICAgICYmIG9iamVjdC0+
Zmlyc3RDaGlsZFNsb3coKQorICAgICAgICAmJiBvYmplY3QtPmZpcnN0Q2hpbGRTbG93KCktPnN0
eWxlKCktPnN0eWxlVHlwZSgpID09IEFGVEVSOwogfQogCiBzdGF0aWMgaW5saW5lIFJlbmRlckJs
b2NrKiBydWJ5QmVmb3JlQmxvY2soY29uc3QgUmVuZGVyT2JqZWN0KiBydWJ5KQogewotICAgIFJl
bmRlck9iamVjdCogY2hpbGQgPSBydWJ5LT5maXJzdENoaWxkKCk7CisgICAgUmVuZGVyT2JqZWN0
KiBjaGlsZCA9IHJ1YnktPmZpcnN0Q2hpbGRTbG93KCk7CiAgICAgcmV0dXJuIGlzUnVieUJlZm9y
ZUJsb2NrKGNoaWxkKSA/IHRvUmVuZGVyQmxvY2soY2hpbGQpIDogMDsKIH0KIAogc3RhdGljIGlu
bGluZSBSZW5kZXJCbG9jayogcnVieUFmdGVyQmxvY2soY29uc3QgUmVuZGVyT2JqZWN0KiBydWJ5
KQogewotICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBydWJ5LT5sYXN0Q2hpbGQoKTsKKyAgICBS
ZW5kZXJPYmplY3QqIGNoaWxkID0gcnVieS0+bGFzdENoaWxkU2xvdygpOwogICAgIHJldHVybiBp
c1J1YnlBZnRlckJsb2NrKGNoaWxkKSA/IHRvUmVuZGVyQmxvY2soY2hpbGQpIDogMDsKIH0KIApA
QCAtOTMsNyArOTMsNyBAQCBzdGF0aWMgUmVuZGVyQmxvY2sqIGNyZWF0ZUFub255bW91c1J1YnlJ
CiAKIHN0YXRpYyBSZW5kZXJSdWJ5UnVuKiBsYXN0UnVieVJ1bihjb25zdCBSZW5kZXJPYmplY3Qq
IHJ1YnkpCiB7Ci0gICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJ1YnktPmxhc3RDaGlsZCgpOwor
ICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBydWJ5LT5sYXN0Q2hpbGRTbG93KCk7CiAgICAgaWYg
KGNoaWxkICYmICFjaGlsZC0+aXNSdWJ5UnVuKCkpCiAgICAgICAgIGNoaWxkID0gY2hpbGQtPnBy
ZXZpb3VzU2libGluZygpOwogICAgIEFTU0VSVCghY2hpbGQgfHwgY2hpbGQtPmlzUnVieVJ1bigp
IHx8IGNoaWxkLT5pc0JlZm9yZUNvbnRlbnQoKSB8fCBjaGlsZCA9PSBydWJ5QmVmb3JlQmxvY2so
cnVieSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShy
ZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsOSArMTg0LDEwIEBAIHZvaWQgUmVuZGVyVGFibGU6
OmFkZENoaWxkKFJlbmRlck9iamVjdCoKICAgICB3aGlsZSAobGFzdEJveCAmJiBsYXN0Qm94LT5w
YXJlbnQoKS0+aXNBbm9ueW1vdXMoKSAmJiAhbGFzdEJveC0+aXNUYWJsZVNlY3Rpb24oKSAmJiBs
YXN0Qm94LT5zdHlsZSgpLT5kaXNwbGF5KCkgIT0gVEFCTEVfQ0FQVElPTiAmJiBsYXN0Qm94LT5z
dHlsZSgpLT5kaXNwbGF5KCkgIT0gVEFCTEVfQ09MVU1OX0dST1VQKQogICAgICAgICBsYXN0Qm94
ID0gbGFzdEJveC0+cGFyZW50KCk7CiAgICAgaWYgKGxhc3RCb3ggJiYgbGFzdEJveC0+aXNBbm9u
eW1vdXMoKSAmJiAhaXNBZnRlckNvbnRlbnQobGFzdEJveCkpIHsKLSAgICAgICAgaWYgKGJlZm9y
ZUNoaWxkID09IGxhc3RCb3gpCi0gICAgICAgICAgICBiZWZvcmVDaGlsZCA9IGxhc3RCb3gtPmZp
cnN0Q2hpbGQoKTsKLSAgICAgICAgdG9SZW5kZXJUYWJsZVNlY3Rpb24obGFzdEJveCktPmFkZENo
aWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2Vj
dGlvbiA9IHRvUmVuZGVyVGFibGVTZWN0aW9uKGxhc3RCb3gpOworICAgICAgICBpZiAoYmVmb3Jl
Q2hpbGQgPT0gc2VjdGlvbikKKyAgICAgICAgICAgIGJlZm9yZUNoaWxkID0gc2VjdGlvbi0+Zmly
c3RDaGlsZCgpOworICAgICAgICBzZWN0aW9uLT5hZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01NjgsMTAgKzU2OSwxMCBAQCB2b2lkIFJl
bmRlclRhYmxlOjpyZWNhbGNDb2xsYXBzZWRCb3JkZXJzCiAgICAgZm9yIChSZW5kZXJPYmplY3Qq
IHNlY3Rpb24gPSBmaXJzdENoaWxkKCk7IHNlY3Rpb247IHNlY3Rpb24gPSBzZWN0aW9uLT5uZXh0
U2libGluZygpKSB7CiAgICAgICAgIGlmICghc2VjdGlvbi0+aXNUYWJsZVNlY3Rpb24oKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogcm93ID0gc2Vj
dGlvbi0+Zmlyc3RDaGlsZCgpOyByb3c7IHJvdyA9IHJvdy0+bmV4dFNpYmxpbmcoKSkgeworICAg
ICAgICBmb3IgKFJlbmRlck9iamVjdCogcm93ID0gdG9SZW5kZXJUYWJsZVNlY3Rpb24oc2VjdGlv
biktPmZpcnN0Q2hpbGQoKTsgcm93OyByb3cgPSByb3ctPm5leHRTaWJsaW5nKCkpIHsKICAgICAg
ICAgICAgIGlmICghcm93LT5pc1RhYmxlUm93KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2VsbCA9IHJvdy0+Zmlyc3RDaGlsZCgp
OyBjZWxsOyBjZWxsID0gY2VsbC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgZm9yIChS
ZW5kZXJPYmplY3QqIGNlbGwgPSB0b1JlbmRlclRhYmxlUm93KHJvdyktPmZpcnN0Q2hpbGQoKTsg
Y2VsbDsgY2VsbCA9IGNlbGwtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgICAgICBpZiAo
IWNlbGwtPmlzVGFibGVDZWxsKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgIEFTU0VSVCh0b1JlbmRlclRhYmxlQ2VsbChjZWxsKS0+dGFibGUoKSA9PSB0
aGlzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNw
cAkocmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlUm93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDkgKzExMSwxMCBAQCB2b2lkIFJlbmRl
clRhYmxlUm93OjphZGRDaGlsZChSZW5kZXJPYmplCiAgICAgICAgIGlmICghbGFzdCkKICAgICAg
ICAgICAgIGxhc3QgPSBsYXN0Q2hpbGQoKTsKICAgICAgICAgaWYgKGxhc3QgJiYgbGFzdC0+aXNB
bm9ueW1vdXMoKSAmJiBsYXN0LT5pc1RhYmxlQ2VsbCgpICYmICFsYXN0LT5pc0JlZm9yZU9yQWZ0
ZXJDb250ZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChiZWZvcmVDaGlsZCA9PSBsYXN0KQotICAg
ICAgICAgICAgICAgIGJlZm9yZUNoaWxkID0gbGFzdC0+Zmlyc3RDaGlsZCgpOwotICAgICAgICAg
ICAgdG9SZW5kZXJUYWJsZUNlbGwobGFzdCktPmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7
CisgICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSB0b1JlbmRlclRhYmxlQ2VsbChs
YXN0KTsKKyAgICAgICAgICAgIGlmIChiZWZvcmVDaGlsZCA9PSBjZWxsKQorICAgICAgICAgICAg
ICAgIGJlZm9yZUNoaWxkID0gY2VsbC0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgY2VsbC0+
YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVT
ZWN0aW9uLmNwcAkocmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw5ICsxMzAsMTAg
QEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENoaWxkKFJlbmRlcgogICAgICAgICBpZiAo
IWxhc3QpCiAgICAgICAgICAgICBsYXN0ID0gbGFzdENoaWxkKCk7CiAgICAgICAgIGlmIChsYXN0
ICYmIGxhc3QtPmlzQW5vbnltb3VzKCkgJiYgIWxhc3QtPmlzQmVmb3JlT3JBZnRlckNvbnRlbnQo
KSkgewotICAgICAgICAgICAgaWYgKGJlZm9yZUNoaWxkID09IGxhc3QpCi0gICAgICAgICAgICAg
ICAgYmVmb3JlQ2hpbGQgPSBsYXN0LT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICB0b1JlbmRl
clRhYmxlUm93KGxhc3QpLT5hZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICAg
ICAgUmVuZGVyVGFibGVSb3cqIHJvdyA9IHRvUmVuZGVyVGFibGVSb3cobGFzdCk7CisgICAgICAg
ICAgICBpZiAoYmVmb3JlQ2hpbGQgPT0gcm93KQorICAgICAgICAgICAgICAgIGJlZm9yZUNoaWxk
ID0gcm93LT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICByb3ctPmFkZENoaWxkKGNoaWxkLCBi
ZWZvcmVDaGlsZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTIzNCw3
ICsxMjM1LDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnJlY2FsY0NlbGxzKCkKICAgICAg
ICAgICAgIHRhYmxlUm93LT5zZXRSb3dJbmRleChpbnNlcnRpb25Sb3cpOwogICAgICAgICAgICAg
c2V0Um93TG9naWNhbEhlaWdodFRvUm93U3R5bGVMb2dpY2FsSGVpZ2h0SWZOb3RSZWxhdGl2ZSht
X2dyaWRbaW5zZXJ0aW9uUm93XSk7CiAKLSAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBj
ZWxsID0gcm93LT5maXJzdENoaWxkKCk7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0U2libGluZygp
KSB7CisgICAgICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2VsbCA9IHRhYmxlUm93LT5maXJz
dENoaWxkKCk7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKCFjZWxsLT5pc1RhYmxlQ2VsbCgpKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNU
ZXh0LmNwcAkocmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTcsNyArNTk3LDcgQEAgdm9p
ZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyTwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gby5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNo
aWxkID0gby5maXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmhhc0xheWVyKCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgd3JpdGUodHMsICpjaGlsZCwgaW5kZW50ICsgMSwgYmVoYXZpb3IpOwpA
QCAtOTE4LDcgKzkxOCw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlQ291bnRlclZhbHVlc0Zyb21DaGls
ZHIKIHsKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuOwotICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjaGlsZCA9IHBhcmVudC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKSkgeworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHBhcmVu
dC0+Zmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkp
IHsKICAgICAgICAgaWYgKGNoaWxkLT5pc0NvdW50ZXIoKSkgewogICAgICAgICAgICAgaWYgKCFp
c0ZpcnN0Q291bnRlcikKICAgICAgICAgICAgICAgICBzdHJlYW0gPDwgIiAiOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxG
cmFjdGlvbi5jcHAJKHJldmlzaW9uIDE1NjI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMs
NyArMTIzLDcgQEAgUmVuZGVyTWF0aE1MT3BlcmF0b3IqIFJlbmRlck1hdGhNTEZyYWN0aQogICAg
IFJlbmRlck9iamVjdCogbnVtZXJhdG9yV3JhcHBlciA9IGZpcnN0Q2hpbGQoKTsKICAgICBpZiAo
IW51bWVyYXRvcldyYXBwZXIpCiAgICAgICAgIHJldHVybiAwOwotICAgIFJlbmRlck9iamVjdCog
bnVtZXJhdG9yID0gbnVtZXJhdG9yV3JhcHBlci0+Zmlyc3RDaGlsZCgpOworICAgIFJlbmRlck9i
amVjdCogbnVtZXJhdG9yID0gbnVtZXJhdG9yV3JhcHBlci0+Zmlyc3RDaGlsZFNsb3coKTsKICAg
ICBpZiAoIW51bWVyYXRvciB8fCAhbnVtZXJhdG9yLT5pc1JlbmRlck1hdGhNTEJsb2NrKCkpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiB0b1JlbmRlck1hdGhNTEJsb2NrKG51bWVyYXRv
ciktPnVuZW1iZWxsaXNoZWRPcGVyYXRvcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDAsNyArMTQwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGZpbmRQcmV2aW91c0FuZE5l
eHRBdAogICAgIEFTU0VSVChzdGFydCk7CiAgICAgQVNTRVJUKGxvY2F0ZUVsZW1lbnQpOwogICAg
IC8vIEZJWE1FOiBNYWtlIHRoaXMgaXRlcmF0aXZlLgotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBj
aGlsZCA9IHN0YXJ0LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZygpKSB7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gc3RhcnQtPmZpcnN0Q2hp
bGRTbG93KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAg
IGlmIChjaGlsZC0+aXNTVkdJbmxpbmVUZXh0KCkpIHsKICAgICAgICAgICAgIFJlbmRlclNWR0lu
bGluZVRleHQqIHRleHQgPSB0b1JlbmRlclNWR0lubGluZVRleHQoY2hpbGQpOwogICAgICAgICAg
ICAgaWYgKGxvY2F0ZUVsZW1lbnQgIT0gdGV4dCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCShyZXZpc2lvbiAxNTYyNzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0
ZU9iamVjdEJvdW5kaW5nQgogICAgIG9iamVjdEJvdW5kaW5nQm94LnVuaXRlRXZlbklmRW1wdHko
b3RoZXJCb3VuZGluZ0JveCk7CiB9CiAKLXZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUNv
bnRhaW5lckJvdW5kaW5nQm94ZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIsIEZsb2F0
UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsIGJvb2wmIG9iamVjdEJvdW5kaW5nQm94VmFsaWQsIEZs
b2F0UmVjdCYgc3Ryb2tlQm91bmRpbmdCb3gsIEZsb2F0UmVjdCYgcmVwYWludEJvdW5kaW5nQm94
KQordm9pZCBTVkdSZW5kZXJTdXBwb3J0Ojpjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyhj
b25zdCBSZW5kZXJFbGVtZW50KiBjb250YWluZXIsIEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdC
b3gsIGJvb2wmIG9iamVjdEJvdW5kaW5nQm94VmFsaWQsIEZsb2F0UmVjdCYgc3Ryb2tlQm91bmRp
bmdCb3gsIEZsb2F0UmVjdCYgcmVwYWludEJvdW5kaW5nQm94KQogewogICAgIG9iamVjdEJvdW5k
aW5nQm94ID0gRmxvYXRSZWN0KCk7CiAgICAgb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCA9IGZhbHNl
OwpAQCAtMTk1LDcgKzE5NSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnZhbGlkYXRlUmVzb3Vy
Y2VzT2YKICAgICBpZiAoU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNo
ZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KHN0YXJ0KSkKICAgICAgICAgcmVzb3Vy
Y2VzLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUoc3RhcnQsIGZhbHNlKTsKIAotICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjaGlsZCA9IHN0YXJ0LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0U2libGluZygpKQorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHN0YXJ0
LT5maXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkK
ICAgICAgICAgaW52YWxpZGF0ZVJlc291cmNlc09mQ2hpbGRyZW4oY2hpbGQpOwogfQogCkBAIC0y
MzMsNyArMjMzLDcgQEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbihSZQog
ICAgIGJvb2wgbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gc3RhcnQtPm5lZWRzQm91bmRhcmllc1Vw
ZGF0ZSgpOwogICAgIEhhc2hTZXQ8UmVuZGVyT2JqZWN0Kj4gbm90bGF5b3V0ZWRPYmplY3RzOwog
Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gc3RhcnQtPmZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICBmb3IgKFJlbmRlck9iamVj
dCogY2hpbGQgPSBzdGFydC0+Zmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgYm9vbCBuZWVkc0xheW91dCA9IHNlbGZOZWVkc0xh
eW91dDsKICAgICAgICAgYm9vbCBjaGlsZEV2ZXJIYWRMYXlvdXQgPSBjaGlsZC0+ZXZlckhhZExh
eW91dCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1
cHBvcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclN1cHBvcnQuaAkocmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcg
QEAgcHVibGljOgogICAgIC8vIERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc2VkIHBvaW50IGxp
ZXMgaW4gYSBjbGlwcGluZyBhcmVhCiAgICAgc3RhdGljIGJvb2wgcG9pbnRJbkNsaXBwaW5nQXJl
YShSZW5kZXJPYmplY3QqLCBjb25zdCBGbG9hdFBvaW50Jik7CiAKLSAgICBzdGF0aWMgdm9pZCBj
b21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyhjb25zdCBSZW5kZXJPYmplY3QqIGNvbnRhaW5l
ciwgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCwgYm9vbCYgb2JqZWN0Qm91bmRpbmdCb3hW
YWxpZCwgRmxvYXRSZWN0JiBzdHJva2VCb3VuZGluZ0JveCwgRmxvYXRSZWN0JiByZXBhaW50Qm91
bmRpbmdCb3gpOworICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveGVz
KGNvbnN0IFJlbmRlckVsZW1lbnQqIGNvbnRhaW5lciwgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGlu
Z0JveCwgYm9vbCYgb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCwgRmxvYXRSZWN0JiBzdHJva2VCb3Vu
ZGluZ0JveCwgRmxvYXRSZWN0JiByZXBhaW50Qm91bmRpbmdCb3gpOwogICAgIHN0YXRpYyBib29s
IHBhaW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdChjb25zdCBGbG9hdFJlY3QmIGxvY2FsUmVw
YWludFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUcmFuc2Zvcm0sIGNvbnN0IFBh
aW50SW5mbyYpOwogCiAgICAgLy8gSW1wb3J0YW50IGZ1bmN0aW9ucyB1c2VkIGJ5IG5lYXJseSBh
bGwgU1ZHIHJlbmRlcmVycyBjZW50cmFsaXppbmcgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbnMg
LyByZXBhaW50IHJlY3QgY2FsY3VsYXRpb25zCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDE1NjI3
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2Niw3ICs0NjYsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZVN0
YW5kYXJkUHJlZml4KFRleHRTdHJlCiAKIHN0YXRpYyB2b2lkIHdyaXRlQ2hpbGRyZW4oVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBpbnQgaW5kZW50KQogewotICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IG9iamVjdC5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGls
ZCA9IG9iamVjdC5maXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKSkKICAgICAgICAgd3JpdGUodHMsICpjaGlsZCwgaW5kZW50ICsgMSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3Vy
Y2VzQ3ljbGVTb2x2ZXIuY3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzAsNyArNzAsNyBAQCBib29sIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyOjpyZXNvdXJjZUNv
CiAgICAgLy8gVGhlbiBvcGVyYXRlIG9uIHRoZSBjaGlsZCByZXNvdXJjZXMgb2YgdGhlIGdpdmVu
IHJlbmRlcmVyLgogICAgIC8vIDxtYXJrZXIgaWQ9ImEiPiA8cGF0aCBtYXJrZXItc3RhcnQ9InVy
bCgjYikiLz4gLi4uCiAgICAgLy8gPG1hcmtlciBpZD0iYiI+IDxwYXRoIG1hcmtlci1zdGFydD0i
dXJsKCNhKSIvPiAuLi4KLSAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSByZW5kZXJlci0+
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJlbmRlcmVyLT5maXJzdENoaWxkU2xvdygpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBTVkdSZXNvdXJj
ZXMqIGNoaWxkUmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0Zv
clJlbmRlck9iamVjdChjaGlsZCk7CiAgICAgICAgIGlmICghY2hpbGRSZXNvdXJjZXMpCiAgICAg
ICAgICAgICBjb250aW51ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAJKHJl
dmlzaW9uIDE1NjI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3
IEBAIHZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpjb2wKIHsKICAgICBBU1NF
UlQoIXN0YXJ0LT5pc1NWR1RleHQoKSB8fCBtX3RleHRQb3NpdGlvbnMuaXNFbXB0eSgpKTsKIAot
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHN0YXJ0LT5maXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7IAorICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBjaGlsZCA9IHN0YXJ0LT5maXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmlzU1ZHSW5saW5lVGV4dCgpKSB7
CiAgICAgICAgICAgICBwcm9jZXNzUmVuZGVyU1ZHSW5saW5lVGV4dCh0b1JlbmRlclNWR0lubGlu
ZVRleHQoY2hpbGQpLCBtX3RleHRMZW5ndGgsIGxhc3RDaGFyYWN0ZXIpOwogICAgICAgICAgICAg
Y29udGludWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRy
aWNzQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3OSw3ICsxNzksNyBAQCB2b2lkIFNWR1RleHRNZXRyaWNzQnVpbGRlcjo6bWVh
c3VyZVRleHRSCiAKIHZvaWQgU1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjp3YWxrVHJlZShSZW5kZXJP
YmplY3QqIHN0YXJ0LCBSZW5kZXJTVkdJbmxpbmVUZXh0KiBzdG9wQXRMZWFmLCBNZWFzdXJlVGV4
dERhdGEqIGRhdGEpCiB7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gc3RhcnQtPmZp
cnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICBm
b3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBzdGFydC0+Zmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc1NW
R0lubGluZVRleHQoKSkgewogICAgICAgICAgICAgUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dCA9
IHRvUmVuZGVyU1ZHSW5saW5lVGV4dChjaGlsZCk7CiAgICAgICAgICAgICBpZiAoc3RvcEF0TGVh
ZiAmJiBzdG9wQXRMZWFmICE9IHRleHQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlUmVzb2x2ZVRyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlUmVzb2x2ZVRyZWUuY3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQwLDcgKzM0MCw3
IEBAIHN0YXRpYyBib29sIHRleHRSZW5kZXJlcklzTmVlZGVkKGNvbnN0IFQKICAgICAgICAgaWYg
KHBhcmVudFJlbmRlcmVyLmlzUmVuZGVyQmxvY2soKSAmJiAhcGFyZW50UmVuZGVyZXIuY2hpbGRy
ZW5JbmxpbmUoKSAmJiAoIXByZXZpb3VzUmVuZGVyZXIgfHwgIXByZXZpb3VzUmVuZGVyZXItPmlz
SW5saW5lKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAg
UmVuZGVyT2JqZWN0KiBmaXJzdCA9IHBhcmVudFJlbmRlcmVyLmZpcnN0Q2hpbGQoKTsKKyAgICAg
ICAgUmVuZGVyT2JqZWN0KiBmaXJzdCA9IHBhcmVudFJlbmRlcmVyLmZpcnN0Q2hpbGRTbG93KCk7
CiAgICAgICAgIHdoaWxlIChmaXJzdCAmJiBmaXJzdC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9z
aXRpb25lZCgpKQogICAgICAgICAgICAgZmlyc3QgPSBmaXJzdC0+bmV4dFNpYmxpbmcoKTsKICAg
ICAgICAgUmVuZGVyT2JqZWN0KiBuZXh0UmVuZGVyZXIgPSBuZXh0U2libGluZ1JlbmRlcmVyKHRl
eHROb2RlKTsK
</data>
<flag name="review"
          id="234573"
          type_id="1"
          status="+"
          setter="kling"
    />
    <flag name="commit-queue"
          id="234575"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212370</attachid>
            <date>2013-09-23 11:24:04 -0700</date>
            <delta_ts>2013-09-23 11:41:16 -0700</delta_ts>
            <desc>yet another</desc>
            <filename>renderobject-slow-3.patch</filename>
            <type>text/plain</type>
            <size>52055</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEzLTA5LTIzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgUmVuZGVyT2JqZWN0
OjpmaXJzdC9sYXN0Q2hpbGQgdG8gUmVuZGVyT2JqZWN0OjpmaXJzdC9sYXN0Q2hpbGRTbG93Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE3ODQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHdpbGwg
bWFrZSBpdCBvYnZpb3VzIGluIGNvZGUgd2hlcmUgdHlwaW5nIHNob3VsZCBiZSB0aWdodGVuZWQu
CisgICAgICAgIEhhbmRsZWQgc29tZSBzaW1wbGUgY2FzZXMgYnkgdGlnaHRlbmluZyB0aGUgY29k
ZSBpbnN0ZWFkIG9mIHJlbmFtaW5nLgorCiAyMDEzLTA5LTIzICBBbnR0aSBLb2l2aXN0byAgPGFu
dHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAJKHJldmlzaW9uIDE1NjI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1OCw3ICs3
NTgsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTdHlsZVJhbmdlCiAgICAgLy8g
dHJhdmVyc2UgYmFja3dhcmQgYnkgcmVuZGVyZXIgdG8gbG9vayBmb3Igc3R5bGUgY2hhbmdlCiAg
ICAgZm9yIChSZW5kZXJPYmplY3QqIHIgPSByZW5kZXJlci0+cHJldmlvdXNJblByZU9yZGVyKCk7
IHI7IHIgPSByLT5wcmV2aW91c0luUHJlT3JkZXIoKSkgewogICAgICAgICAvLyBza2lwIG5vbi1s
ZWFmIG5vZGVzCi0gICAgICAgIGlmIChyLT5maXJzdENoaWxkKCkpCisgICAgICAgIGlmIChyLT5m
aXJzdENoaWxkU2xvdygpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgLy8gc3Rv
cCBhdCBzdHlsZSBjaGFuZ2UKQEAgLTc4MSw3ICs3ODEsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0
aW9uIGVuZE9mU3R5bGVSYW5nZShjCiAgICAgLy8gdHJhdmVyc2UgZm9yd2FyZCBieSByZW5kZXJl
ciB0byBsb29rIGZvciBzdHlsZSBjaGFuZ2UKICAgICBmb3IgKFJlbmRlck9iamVjdCogciA9IHJl
bmRlcmVyLT5uZXh0SW5QcmVPcmRlcigpOyByOyByID0gci0+bmV4dEluUHJlT3JkZXIoKSkgewog
ICAgICAgICAvLyBza2lwIG5vbi1sZWFmIG5vZGVzCi0gICAgICAgIGlmIChyLT5maXJzdENoaWxk
KCkpCisgICAgICAgIGlmIChyLT5maXJzdENoaWxkU2xvdygpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKICAgICAgICAgLy8gc3RvcCBhdCBzdHlsZSBjaGFuZ2UKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcg
KzE3Niw3IEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkSW4KICAgICB3
aGlsZSAocikgewogICAgICAgICBpZiAoci0+aXNSZW5kZXJCbG9jaygpKQogICAgICAgICAgICAg
cmV0dXJuIHI7Ci0gICAgICAgIGlmIChSZW5kZXJPYmplY3QqIGNoaWxkID0gci0+Zmlyc3RDaGls
ZCgpKQorICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHItPmZpcnN0Q2hpbGRTbG93
KCkpCiAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7CiAgICAgICAgIHIgPSB0b1JlbmRlcklubGlu
ZShyKS0+Y29udGludWF0aW9uKCk7IAogICAgIH0KQEAgLTE4Niw3ICsxODYsNyBAQCBzdGF0aWMg
aW5saW5lIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZEluCiAKIHN0YXRpYyBpbmxpbmUgUmVuZGVy
T2JqZWN0KiBmaXJzdENoaWxkQ29uc2lkZXJpbmdDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcikKIHsKLSAgICBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQgPSByZW5kZXJlci0+Zmly
c3RDaGlsZCgpOworICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCA9IHJlbmRlcmVyLT5maXJz
dENoaWxkU2xvdygpOwogCiAgICAgaWYgKCFmaXJzdENoaWxkICYmIGlzSW5saW5lV2l0aENvbnRp
bnVhdGlvbihyZW5kZXJlcikpCiAgICAgICAgIGZpcnN0Q2hpbGQgPSBmaXJzdENoaWxkSW5Db250
aW51YXRpb24ocmVuZGVyZXIpOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgUmVu
ZGVyT2JqZWN0KiBmaXJzdENoaWxkQ28KIAogc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGxh
c3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7
Ci0gICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQgPSByZW5kZXJlci0+bGFzdENoaWxkKCk7Cisg
ICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQgPSByZW5kZXJlci0+bGFzdENoaWxkU2xvdygpOwog
ICAgIFJlbmRlck9iamVjdCogcHJldjsKICAgICBSZW5kZXJPYmplY3QqIGN1ciA9IHJlbmRlcmVy
OwogCkBAIC0yMDcsNyArMjA3LDcgQEAgc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGxhc3RD
aGlsZENvbgogICAgIHdoaWxlIChjdXIpIHsKICAgICAgICAgcHJldiA9IGN1cjsKIAotICAgICAg
ICBpZiAoUmVuZGVyT2JqZWN0KiBsYyA9IGN1ci0+bGFzdENoaWxkKCkpCisgICAgICAgIGlmIChS
ZW5kZXJPYmplY3QqIGxjID0gY3VyLT5sYXN0Q2hpbGRTbG93KCkpCiAgICAgICAgICAgICBsYXN0
Q2hpbGQgPSBsYzsKIAogICAgICAgICBpZiAoY3VyLT5pc1JlbmRlcklubGluZSgpKSB7CkBAIC0z
MjUsNyArMzI1LDggQEAgc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGNoaWxkQmVmb3JlQwog
CiBzdGF0aWMgaW5saW5lIGJvb2wgZmlyc3RDaGlsZElzSW5saW5lQ29udGludWF0aW9uKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5maXJzdENoaWxkKCkg
JiYgcmVuZGVyZXItPmZpcnN0Q2hpbGQoKS0+aXNJbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7
CisgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJlbmRlcmVyLT5maXJzdENoaWxkU2xvdygpOwor
ICAgIHJldHVybiBjaGlsZCAmJiBjaGlsZC0+aXNJbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCk7
CiB9CiAKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnBy
ZXZpb3VzU2libGluZygpIGNvbnN0CkBAIC0zNDQsOSArMzQ1LDkgQEAgQWNjZXNzaWJpbGl0eU9i
amVjdCogQWNjZXNzaWJpbGl0eVJlbmRlcgogICAgIC8vIENhc2UgMjogQW5vbnltb3VzIGJsb2Nr
IHBhcmVudCBvZiB0aGUgZW5kIG9mIGEgY29udGludWF0aW9uIC0gc2tpcCBhbGwgdGhlIHdheSB0
byBiZWZvcmUKICAgICAvLyB0aGUgcGFyZW50IG9mIHRoZSBzdGFydCwgc2luY2UgZXZlcnl0aGlu
ZyBpbiBiZXR3ZWVuIHdpbGwgYmUgbGlua2VkIHVwIHZpYSB0aGUgY29udGludWF0aW9uLgogICAg
IGVsc2UgaWYgKG1fcmVuZGVyZXItPmlzQW5vbnltb3VzQmxvY2soKSAmJiBmaXJzdENoaWxkSXNJ
bmxpbmVDb250aW51YXRpb24obV9yZW5kZXJlcikpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBm
aXJzdFBhcmVudCA9IHN0YXJ0T2ZDb250aW51YXRpb25zKG1fcmVuZGVyZXItPmZpcnN0Q2hpbGQo
KSktPnBhcmVudCgpOworICAgICAgICBSZW5kZXJPYmplY3QqIGZpcnN0UGFyZW50ID0gc3RhcnRP
ZkNvbnRpbnVhdGlvbnMobV9yZW5kZXJlci0+Zmlyc3RDaGlsZFNsb3coKSktPnBhcmVudCgpOwog
ICAgICAgICB3aGlsZSAoZmlyc3RDaGlsZElzSW5saW5lQ29udGludWF0aW9uKGZpcnN0UGFyZW50
KSkKLSAgICAgICAgICAgIGZpcnN0UGFyZW50ID0gc3RhcnRPZkNvbnRpbnVhdGlvbnMoZmlyc3RQ
YXJlbnQtPmZpcnN0Q2hpbGQoKSktPnBhcmVudCgpOworICAgICAgICAgICAgZmlyc3RQYXJlbnQg
PSBzdGFydE9mQ29udGludWF0aW9ucyhmaXJzdFBhcmVudC0+Zmlyc3RDaGlsZFNsb3coKSktPnBh
cmVudCgpOwogICAgICAgICBwcmV2aW91c1NpYmxpbmcgPSBmaXJzdFBhcmVudC0+cHJldmlvdXNT
aWJsaW5nKCk7CiAgICAgfQogCkBAIC0zNjcsNyArMzY4LDggQEAgQWNjZXNzaWJpbGl0eU9iamVj
dCogQWNjZXNzaWJpbGl0eVJlbmRlcgogCiBzdGF0aWMgaW5saW5lIGJvb2wgbGFzdENoaWxkSGFz
Q29udGludWF0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIHJlbmRl
cmVyLT5sYXN0Q2hpbGQoKSAmJiBpc0lubGluZVdpdGhDb250aW51YXRpb24ocmVuZGVyZXItPmxh
c3RDaGlsZCgpKTsKKyAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gcmVuZGVyZXItPmZpcnN0Q2hp
bGRTbG93KCk7CisgICAgcmV0dXJuIGNoaWxkICYmIGlzSW5saW5lV2l0aENvbnRpbnVhdGlvbihj
aGlsZCk7CiB9CiAKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6Om5leHRTaWJsaW5nKCkgY29uc3QKQEAgLTM4Niw5ICszODgsOSBAQCBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyCiAgICAgLy8gQ2FzZSAyOiBBbm9ueW1vdXMgYmxv
Y2sgcGFyZW50IG9mIHRoZSBzdGFydCBvZiBhIGNvbnRpbnVhdGlvbiAtIHNraXAgYWxsIHRoZSB3
YXkgdG8KICAgICAvLyBhZnRlciB0aGUgcGFyZW50IG9mIHRoZSBlbmQsIHNpbmNlIGV2ZXJ5dGhp
bmcgaW4gYmV0d2VlbiB3aWxsIGJlIGxpbmtlZCB1cCB2aWEgdGhlIGNvbnRpbnVhdGlvbi4KICAg
ICBlbHNlIGlmIChtX3JlbmRlcmVyLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgbGFzdENoaWxkSGFz
Q29udGludWF0aW9uKG1fcmVuZGVyZXIpKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogbGFzdFBh
cmVudCA9IGVuZE9mQ29udGludWF0aW9ucyhtX3JlbmRlcmVyLT5sYXN0Q2hpbGQoKSktPnBhcmVu
dCgpOworICAgICAgICBSZW5kZXJPYmplY3QqIGxhc3RQYXJlbnQgPSBlbmRPZkNvbnRpbnVhdGlv
bnMobV9yZW5kZXJlci0+bGFzdENoaWxkU2xvdygpKS0+cGFyZW50KCk7CiAgICAgICAgIHdoaWxl
IChsYXN0Q2hpbGRIYXNDb250aW51YXRpb24obGFzdFBhcmVudCkpCi0gICAgICAgICAgICBsYXN0
UGFyZW50ID0gZW5kT2ZDb250aW51YXRpb25zKGxhc3RQYXJlbnQtPmxhc3RDaGlsZCgpKS0+cGFy
ZW50KCk7CisgICAgICAgICAgICBsYXN0UGFyZW50ID0gZW5kT2ZDb250aW51YXRpb25zKGxhc3RQ
YXJlbnQtPmxhc3RDaGlsZFNsb3coKSktPnBhcmVudCgpOwogICAgICAgICBuZXh0U2libGluZyA9
IGxhc3RQYXJlbnQtPm5leHRTaWJsaW5nKCk7CiAgICAgfQogCkBAIC00NDksNyArNDUxLDcgQEAg
UmVuZGVyT2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OgogICAgICAgICBwYXJlbnQg
PSBzdGFydE9mQ29udHM7CiAgICAgCiAgICAgLy8gQ2FzZSAzOiBUaGUgZmlyc3Qgc2libGluZyBp
cyB0aGUgYmVnaW5uaW5nIG9mIGEgY29udGludWF0aW9uIGNoYWluLiBGaW5kIHRoZSBvcmlnaW4g
b2YgdGhhdCBjb250aW51YXRpb24uCi0gICAgZWxzZSBpZiAocGFyZW50ICYmIChmaXJzdENoaWxk
ID0gcGFyZW50LT5maXJzdENoaWxkKCkpICYmIGZpcnN0Q2hpbGQtPm5vZGUoKSkgeworICAgIGVs
c2UgaWYgKHBhcmVudCAmJiAoZmlyc3RDaGlsZCA9IHBhcmVudC0+Zmlyc3RDaGlsZFNsb3coKSkg
JiYgZmlyc3RDaGlsZC0+bm9kZSgpKSB7CiAgICAgICAgIC8vIEdldCB0aGUgbm9kZSdzIHJlbmRl
cmVyIGFuZCBmb2xsb3cgdGhhdCBjb250aW51YXRpb24gY2hhaW4gdW50aWwgdGhlIGZpcnN0IGNo
aWxkIGlzIGZvdW5kCiAgICAgICAgIFJlbmRlck9iamVjdCogbm9kZVJlbmRlckZpcnN0Q2hpbGQg
PSBmaXJzdENoaWxkLT5ub2RlKCktPnJlbmRlcmVyKCk7CiAgICAgICAgIHdoaWxlIChub2RlUmVu
ZGVyRmlyc3RDaGlsZCAhPSBmaXJzdENoaWxkKSB7CkBAIC00NTksOSArNDYxLDEwIEBAIFJlbmRl
ck9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDoKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGZpcnN0Q2hpbGQgPT0gcGFyZW50LT5maXJzdENoaWxkKCkpCisgICAgICAgICAgICBSZW5kZXJP
YmplY3QqIHBhcmVudEZpcnN0Q2hpbGQgPSBwYXJlbnQtPmZpcnN0Q2hpbGRTbG93KCk7CisgICAg
ICAgICAgICBpZiAoZmlyc3RDaGlsZCA9PSBwYXJlbnRGaXJzdENoaWxkKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgZmlyc3RDaGlsZCA9IHBhcmVudC0+Zmlyc3RDaGlsZCgp
OworICAgICAgICAgICAgZmlyc3RDaGlsZCA9IHBhcmVudEZpcnN0Q2hpbGQ7CiAgICAgICAgICAg
ICBpZiAoIWZpcnN0Q2hpbGQtPm5vZGUoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIG5vZGVSZW5kZXJGaXJzdENoaWxkID0gZmlyc3RDaGlsZC0+bm9kZSgpLT5yZW5kZXJl
cigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNpb24gMTU2
Mjc0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04OTQsOCArODk0LDggQEAgYm9vbCBDb250YWluZXJOb2RlOjpnZXRVcHBlckxlZnRD
b3JuZXIoRgogICAgIC8vIGZpbmQgdGhlIG5leHQgdGV4dC9pbWFnZSBjaGlsZCwgdG8gZ2V0IGEg
cG9zaXRpb24KICAgICB3aGlsZSAobykgewogICAgICAgICBwID0gbzsKLSAgICAgICAgaWYgKG8t
PmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgICAgIG8gPSBvLT5maXJzdENoaWxkKCk7CisgICAgICAg
IGlmIChSZW5kZXJPYmplY3QqIGNoaWxkID0gby0+Zmlyc3RDaGlsZFNsb3coKSkKKyAgICAgICAg
ICAgIG8gPSBjaGlsZDsKICAgICAgICAgZWxzZSBpZiAoby0+bmV4dFNpYmxpbmcoKSkKICAgICAg
ICAgICAgIG8gPSBvLT5uZXh0U2libGluZygpOwogICAgICAgICBlbHNlIHsKQEAgLTk1NCw4ICs5
NTQsOCBAQCBib29sIENvbnRhaW5lck5vZGU6OmdldExvd2VyUmlnaHRDb3JuZXIoCiAKICAgICAv
LyBmaW5kIHRoZSBsYXN0IHRleHQvaW1hZ2UgY2hpbGQsIHRvIGdldCBhIHBvc2l0aW9uCiAgICAg
d2hpbGUgKG8pIHsKLSAgICAgICAgaWYgKG8tPmxhc3RDaGlsZCgpKQotICAgICAgICAgICAgbyA9
IG8tPmxhc3RDaGlsZCgpOworICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IG8tPmxh
c3RDaGlsZFNsb3coKSkKKyAgICAgICAgICAgIG8gPSBjaGlsZDsKICAgICAgICAgZWxzZSBpZiAo
by0+cHJldmlvdXNTaWJsaW5nKCkpCiAgICAgICAgICAgICBvID0gby0+cHJldmlvdXNTaWJsaW5n
KCk7CiAgICAgICAgIGVsc2UgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCShyZXZpc2lv
biAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NTQsNyArODU0LDcgQEAgc3RhdGljIGludCBib3VuZGluZ0JveExvZ2ljYWxIZWln
aHQoUmVuZAogYm9vbCBQb3NpdGlvbjo6aGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50
c1dpdGhIZWlnaHQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBSZW5kZXJPYmplY3Qq
IHN0b3AgPSByZW5kZXJlci0+bmV4dEluUHJlT3JkZXJBZnRlckNoaWxkcmVuKCk7Ci0gICAgZm9y
IChSZW5kZXJPYmplY3QgKm8gPSByZW5kZXJlci0+Zmlyc3RDaGlsZCgpOyBvICYmIG8gIT0gc3Rv
cDsgbyA9IG8tPm5leHRJblByZU9yZGVyKCkpCisgICAgZm9yIChSZW5kZXJPYmplY3QgKm8gPSBy
ZW5kZXJlci0+Zmlyc3RDaGlsZFNsb3coKTsgbyAmJiBvICE9IHN0b3A7IG8gPSBvLT5uZXh0SW5Q
cmVPcmRlcigpKQogICAgICAgICBpZiAoby0+bm9uUHNldWRvTm9kZSgpKSB7CiAgICAgICAgICAg
ICBpZiAoKG8tPmlzVGV4dCgpICYmIGJvdW5kaW5nQm94TG9naWNhbEhlaWdodChvLCB0b1JlbmRl
clRleHQobyktPmxpbmVzQm91bmRpbmdCb3goKSkpCiAgICAgICAgICAgICAgICAgfHwgKG8tPmlz
TGluZUJyZWFrKCkgJiYgYm91bmRpbmdCb3hMb2dpY2FsSGVpZ2h0KG8sIHRvUmVuZGVyTGluZUJy
ZWFrKG8pLT5saW5lc0JvdW5kaW5nQm94KCkpKQpAQCAtMTEzNCwxMCArMTEzNCwxMCBAQCB2b2lk
IFBvc2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmCiAKIHN0YXRpYyBib29sIGlzTm9u
VGV4dExlYWZDaGlsZChSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKLSAgICBpZiAob2JqZWN0LT5m
aXJzdENoaWxkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAob2JqZWN0LT5pc1Rl
eHQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICh0b1JlbmRlckVsZW1lbnQob2Jq
ZWN0KS0+Zmlyc3RDaGlsZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHJl
dmlzaW9uIDE1NjI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjQyLDcgKzY0Miw3IEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVy
VGV4dCogZmlyc3RSZW5kZXJUZXgKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBGSVhNRTog
U2hvdWxkIHRoaXMgY2hlY2sgZGVzY2VuZGVudCBvYmplY3RzPwotICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjdXJyZW50ID0gZmlyc3RMZXR0ZXItPmZpcnN0Q2hpbGQoKTsgY3VycmVudDsgY3VycmVu
dCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY3Vy
cmVudCA9IGZpcnN0TGV0dGVyLT5maXJzdENoaWxkU2xvdygpOyBjdXJyZW50OyBjdXJyZW50ID0g
Y3VycmVudC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoY3VycmVudC0+aXNUZXh0KCkp
CiAgICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJUZXh0KGN1cnJlbnQpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCShyZXZpc2lvbiAxNTYyNzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODk2LDcgKzg5Niw3IEBAIGJvb2wgaXNFbXB0eVRhYmxlQ2VsbChjb25zdCBOb2RlKiBub2Rl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBDaGVjayB0aGF0IHRoZSB0YWJsZSBj
ZWxsIGNvbnRhaW5zIG5vIGNoaWxkIHJlbmRlcmVycyBleGNlcHQgZm9yIHBlcmhhcHMgYSBzaW5n
bGUgPGJyPi4KLSAgICBSZW5kZXJPYmplY3QqIGNoaWxkUmVuZGVyZXIgPSByZW5kZXJlci0+Zmly
c3RDaGlsZCgpOworICAgIFJlbmRlck9iamVjdCogY2hpbGRSZW5kZXJlciA9IHRvUmVuZGVyRWxl
bWVudChyZW5kZXJlciktPmZpcnN0Q2hpbGQoKTsKICAgICBpZiAoIWNoaWxkUmVuZGVyZXIpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmICghY2hpbGRSZW5kZXJlci0+aXNCUigpKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVl
QWdlbnQuY3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0
LDcgQEAgdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6Z2F0aGVyTGF5ZQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChyZW5kZXJlciA9IHJlbmRlcmVyLT5maXJzdENoaWxk
KCk7IHJlbmRlcmVyOyByZW5kZXJlciA9IHJlbmRlcmVyLT5uZXh0U2libGluZygpKQorICAgIGZv
ciAocmVuZGVyZXIgPSByZW5kZXJlci0+Zmlyc3RDaGlsZFNsb3coKTsgcmVuZGVyZXI7IHJlbmRl
cmVyID0gcmVuZGVyZXItPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGdhdGhlckxheWVyc1VzaW5n
UmVuZGVyT2JqZWN0SGllcmFyY2h5KGVycm9yU3RyaW5nLCByZW5kZXJlciwgbGF5ZXJzKTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNw
cAkocmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFi
bGVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDcgQEAgaW50IEZpeGVk
VGFibGVMYXlvdXQ6OmNhbGNXaWR0aEFycmF5KCkKICAgICB1bnNpZ25lZCBjdXJyZW50Q29sdW1u
ID0gMDsKIAogICAgIFJlbmRlck9iamVjdCogZmlyc3RSb3cgPSBzZWN0aW9uLT5maXJzdENoaWxk
KCk7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RSb3ctPmZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICBmb3IgKFJlbmRl
ck9iamVjdCogY2hpbGQgPSBmaXJzdFJvdy0+Zmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKCFjaGlsZC0+aXNUYWJsZUNl
bGwoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2OCw3
ICsyNjgsNyBAQCBSZW5kZXJMaW5lQm94TGlzdCYgSW5saW5lRmxvd0JveDo6cmVuZGVyCiAgICAg
cmV0dXJuIHRvUmVuZGVySW5saW5lKHJlbmRlcmVyKCkpLmxpbmVCb3hlcygpOwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgaXNMYXN0Q2hpbGRGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIGFuY2Vz
dG9yLCBSZW5kZXJPYmplY3QqIGNoaWxkKQorc3RhdGljIGlubGluZSBib29sIGlzTGFzdENoaWxk
Rm9yUmVuZGVyZXIoUmVuZGVyRWxlbWVudCogYW5jZXN0b3IsIFJlbmRlck9iamVjdCogY2hpbGQp
CiB7CiAgICAgaWYgKCFjaGlsZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjc3LDcgKzI3
Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0xhc3RDaGlsZEZvclJlbmRlcmUKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICBSZW5kZXJPYmplY3QqIGN1cnIgPSBjaGlsZDsKLSAgICBSZW5k
ZXJPYmplY3QqIHBhcmVudCA9IGN1cnItPnBhcmVudCgpOworICAgIFJlbmRlckVsZW1lbnQqIHBh
cmVudCA9IGN1cnItPnBhcmVudCgpOwogICAgIHdoaWxlIChwYXJlbnQgJiYgKCFwYXJlbnQtPmlz
UmVuZGVyQmxvY2soKSB8fCBwYXJlbnQtPmlzSW5saW5lKCkpKSB7CiAgICAgICAgIGlmIChwYXJl
bnQtPmxhc3RDaGlsZCgpICE9IGN1cnIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lSXRlcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lSXRlcmF0b3IuaAkocmV2aXNpb24gMTU2
Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUl0ZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE4MCw3ICsxODAsNyBAQCBzdGF0aWMgYm9vbCBpc0VtcHR5SW5saW5lKFJl
bmRlck9iamVjdCogCiAgICAgaWYgKCFvYmplY3QtPmlzUmVuZGVySW5saW5lKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gb2JqZWN0LT5m
aXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CisgICAgZm9y
IChSZW5kZXJPYmplY3QqIGN1cnIgPSB0b1JlbmRlckVsZW1lbnQob2JqZWN0KS0+Zmlyc3RDaGls
ZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoY3Vy
ci0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIGlmIChjdXJyLT5pc1RleHQoKSAmJiB0b1JlbmRlclRleHQoY3VyciktPmlz
QWxsQ29sbGFwc2libGVXaGl0ZXNwYWNlKCkpCkBAIC0yMDYsNyArMjA2LDcgQEAgc3RhdGljIGlu
bGluZSBSZW5kZXJPYmplY3QqIGJpZGlOZXh0U2hhcgogICAgIHdoaWxlIChjdXJyZW50KSB7CiAg
ICAgICAgIG5leHQgPSAwOwogICAgICAgICBpZiAoIW9sZEVuZE9mSW5saW5lICYmICFpc0l0ZXJh
dG9yVGFyZ2V0KGN1cnJlbnQpKSB7Ci0gICAgICAgICAgICBuZXh0ID0gY3VycmVudC0+Zmlyc3RD
aGlsZCgpOworICAgICAgICAgICAgbmV4dCA9IHRvUmVuZGVyRWxlbWVudChjdXJyZW50KS0+Zmly
c3RDaGlsZCgpOwogICAgICAgICAgICAgbm90aWZ5T2JzZXJ2ZXJFbnRlcmVkT2JqZWN0KG9ic2Vy
dmVyLCBuZXh0KTsKICAgICAgICAgfQogCkBAIC0yNzMsNyArMjczLDcgQEAgc3RhdGljIGlubGlu
ZSBSZW5kZXJPYmplY3QqIGJpZGlOZXh0SW5jbAogICAgIHJldHVybiBiaWRpTmV4dFNoYXJlZChy
b290LCBjdXJyZW50LCBvYnNlcnZlciwgSW5jbHVkZUVtcHR5SW5saW5lcywgZW5kT2ZJbmxpbmVQ
dHIpOwogfQogCi1zdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogYmlkaUZpcnN0U2tpcHBpbmdF
bXB0eUlubGluZXMoUmVuZGVyT2JqZWN0KiByb290LCBJbmxpbmVCaWRpUmVzb2x2ZXIqIHJlc29s
dmVyID0gMCkKK3N0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBiaWRpRmlyc3RTa2lwcGluZ0Vt
cHR5SW5saW5lcyhSZW5kZXJFbGVtZW50KiByb290LCBJbmxpbmVCaWRpUmVzb2x2ZXIqIHJlc29s
dmVyID0gMCkKIHsKICAgICBSZW5kZXJPYmplY3QqIG8gPSByb290LT5maXJzdENoaWxkKCk7CiAg
ICAgaWYgKCFvKQpAQCAtMzAxLDcgKzMwMSw3IEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0
KiBiaWRpRmlyc3RTa2kKIH0KIAogLy8gRklYTUU6IFRoaXMgbWV0aG9kIG5lZWRzIHRvIGJlIHJl
bmFtZWQgd2hlbiBiaWRpTmV4dCBmaW5kcyBhIGdvb2QgbmFtZS4KLXN0YXRpYyBpbmxpbmUgUmVu
ZGVyT2JqZWN0KiBiaWRpRmlyc3RJbmNsdWRpbmdFbXB0eUlubGluZXMoUmVuZGVyT2JqZWN0KiBy
b290KQorc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGJpZGlGaXJzdEluY2x1ZGluZ0VtcHR5
SW5saW5lcyhSZW5kZXJFbGVtZW50KiByb290KQogewogICAgIFJlbmRlck9iamVjdCogbyA9IHJv
b3QtPmZpcnN0Q2hpbGQoKTsKICAgICAvLyBJZiBlaXRoZXIgdGhlcmUgYXJlIG5vIGNoaWxkcmVu
IHRvIHdhbGssIG9yIHRoZSBmaXJzdCBvbmUgaXMgY29ycmVjdApAQCAtMzI0LDcgKzMyNCw3IEBA
IGlubGluZSB2b2lkIElubGluZUl0ZXJhdG9yOjpmYXN0SW5jcmVtZW4KIC8vIGl0IHNob3VsZG4n
dCB1c2UgZnVuY3Rpb25zIGNhbGxlZCBiaWRpRmlyc3QgYW5kIGJpZGlOZXh0LgogY2xhc3MgSW5s
aW5lV2Fsa2VyIHsKIHB1YmxpYzoKLSAgICBJbmxpbmVXYWxrZXIoUmVuZGVyT2JqZWN0KiByb290
KQorICAgIElubGluZVdhbGtlcihSZW5kZXJFbGVtZW50KiByb290KQogICAgICAgICA6IG1fcm9v
dChyb290KQogICAgICAgICAsIG1fY3VycmVudCgwKQogICAgICAgICAsIG1fYXRFbmRPZklubGlu
ZShmYWxzZSkKQEAgLTMzMyw3ICszMzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fY3VycmVudCA9
IGJpZGlGaXJzdEluY2x1ZGluZ0VtcHR5SW5saW5lcyhtX3Jvb3QpOwogICAgIH0KIAotICAgIFJl
bmRlck9iamVjdCogcm9vdCgpIHsgcmV0dXJuIG1fcm9vdDsgfQorICAgIFJlbmRlckVsZW1lbnQq
IHJvb3QoKSB7IHJldHVybiBtX3Jvb3Q7IH0KICAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQoKSB7
IHJldHVybiBtX2N1cnJlbnQ7IH0KIAogICAgIGJvb2wgYXRFbmRPZklubGluZSgpIHsgcmV0dXJu
IG1fYXRFbmRPZklubGluZTsgfQpAQCAtMzQ2LDcgKzM0Niw3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIG1fY3VycmVudDsKICAgICB9CiBwcml2YXRlOgotICAgIFJlbmRlck9iamVjdCogbV9y
b290OworICAgIFJlbmRlckVsZW1lbnQqIG1fcm9vdDsKICAgICBSZW5kZXJPYmplY3QqIG1fY3Vy
cmVudDsKICAgICBib29sIG1fYXRFbmRPZklubGluZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDE1NjI3OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNzgs
NyArMTA3OCw4IEBAIHN0YXRpYyBib29sIGNhbk1lcmdlQ29udGlndW91c0Fub255bW91c0IKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRklYTUU6IFRoaXMgY2hlY2sgaXNuJ3QgcmVx
dWlyZWQgd2hlbiBpbmxpbmUgcnVuLWlucyBjYW4ndCBiZSBzcGxpdCBpbnRvIGNvbnRpbnVhdGlv
bnMuCi0gICAgaWYgKHByZXYgJiYgcHJldi0+Zmlyc3RDaGlsZCgpICYmIHByZXYtPmZpcnN0Q2hp
bGQoKS0+aXNJbmxpbmUoKSAmJiBwcmV2LT5maXJzdENoaWxkKCktPmlzUnVuSW4oKSkKKyAgICBS
ZW5kZXJPYmplY3QqIGNoaWxkID0gcHJldiA/IHByZXYtPmZpcnN0Q2hpbGRTbG93KCkgOiBudWxs
cHRyOworICAgIGlmIChjaGlsZCAmJiBjaGlsZC0+aXNJbmxpbmUoKSAmJiBjaGlsZC0+aXNSdW5J
bigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoKHByZXYgJiYgKHByZXYtPmlz
UnVieVJ1bigpIHx8IHByZXYtPmlzUnVieUJhc2UoKSkpCkBAIC01MDgwLDcgKzUwODEsNyBAQCBS
ZW5kZXJPYmplY3QqIElubGluZU1pbk1heEl0ZXJhdG9yOjpuZXh0CiAgICAgICAgIGlmICghb2xk
RW5kT2ZJbmxpbmUgJiYKICAgICAgICAgICAgIChjdXJyZW50ID09IHBhcmVudCB8fAogICAgICAg
ICAgICAgICghY3VycmVudC0+aXNGbG9hdGluZygpICYmICFjdXJyZW50LT5pc1JlcGxhY2VkKCkg
JiYgIWN1cnJlbnQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKSkpCi0gICAgICAgICAgICByZXN1
bHQgPSBjdXJyZW50LT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICByZXN1bHQgPSBjdXJyZW50
LT5maXJzdENoaWxkU2xvdygpOwogICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAgICAg
Ly8gV2UgaGl0IHRoZSBlbmQgb2Ygb3VyIGlubGluZS4gKEl0IHdhcyBlbXB0eSwgZS5nLiwgPHNw
YW4+PC9zcGFuPi4pCiAgICAgICAgICAgICBpZiAoIW9sZEVuZE9mSW5saW5lICYmIGN1cnJlbnQt
PmlzUmVuZGVySW5saW5lKCkpIHsKQEAgLTU3NDUsNyArNTc0Niw3IEBAIFJlbmRlckJsb2NrKiBS
ZW5kZXJCbG9jazo6Zmlyc3RMaW5lQmxvY2sKICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB3aGVu
IGJ1dHRvbnMgYXJlIGltcGxlbWVudGVkIHdpdGggYWxpZ24taXRlbXMgaW5zdGVhZAogICAgICAg
ICAvLyBvZiBmbGV4Ym94LgogICAgICAgICBpZiAoZmlyc3RMaW5lQmxvY2stPmlzUmVwbGFjZWQo
KSB8fCBmaXJzdExpbmVCbG9jay0+aXNGbG9hdGluZygpCi0gICAgICAgICAgICB8fCAhcGFyZW50
QmxvY2sgfHwgcGFyZW50QmxvY2stPmZpcnN0Q2hpbGQoKSAhPSBmaXJzdExpbmVCbG9jayB8fCAo
IXBhcmVudEJsb2NrLT5pc1JlbmRlckJsb2NrRmxvdygpICYmICFwYXJlbnRCbG9jay0+aXNSZW5k
ZXJCdXR0b24oKSkpCisgICAgICAgICAgICB8fCAhcGFyZW50QmxvY2sgfHwgcGFyZW50QmxvY2st
PmZpcnN0Q2hpbGRTbG93KCkgIT0gZmlyc3RMaW5lQmxvY2sgfHwgKCFwYXJlbnRCbG9jay0+aXNS
ZW5kZXJCbG9ja0Zsb3coKSAmJiAhcGFyZW50QmxvY2stPmlzUmVuZGVyQnV0dG9uKCkpKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KHBhcmVudEJsb2NrLT5pc1JlbmRlckJsb2NrKCkpOwogICAgICAgICBmaXJzdExpbmVCbG9jayA9
IHRvUmVuZGVyQmxvY2socGFyZW50QmxvY2spOwpAQCAtNTc4NSw5ICs1Nzg2LDkgQEAgc3RhdGlj
IGlubGluZSBib29sIHNob3VsZFNraXBGb3JGaXJzdExldAogICAgIHJldHVybiBpc1NwYWNlT3JO
ZXdsaW5lKGMpIHx8IGMgPT0gbm9CcmVha1NwYWNlIHx8IGlzUHVuY3R1YXRpb25Gb3JGaXJzdExl
dHRlcihjKTsKIH0KIAotc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGZpbmRGaXJzdExldHRl
ckJsb2NrKFJlbmRlckJsb2NrKiBzdGFydCkKK3N0YXRpYyBpbmxpbmUgUmVuZGVyRWxlbWVudCog
ZmluZEZpcnN0TGV0dGVyQmxvY2soUmVuZGVyQmxvY2sqIHN0YXJ0KQogewotICAgIFJlbmRlck9i
amVjdCogZmlyc3RMZXR0ZXJCbG9jayA9IHN0YXJ0OworICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0
TGV0dGVyQmxvY2sgPSBzdGFydDsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAvLyBXZSBp
bmNsdWRlIGlzUmVuZGVyQnV0dG9uIGluIHRoZXNlIHR3byBjaGVja3MgYmVjYXVzZSBidXR0b25z
IGFyZQogICAgICAgICAvLyBpbXBsZW1lbnRlZCB1c2luZyBmbGV4IGJveCBidXQgc2hvdWxkIHN0
aWxsIHN1cHBvcnQgZmlyc3QtbGV0dGVyLgpAQCAtNTgwMSw5ICs1ODAyLDkgQEAgc3RhdGljIGlu
bGluZSBSZW5kZXJPYmplY3QqIGZpbmRGaXJzdExldAogICAgICAgICBpZiAoY2FuSGF2ZUZpcnN0
TGV0dGVyUmVuZGVyZXIpCiAgICAgICAgICAgICByZXR1cm4gZmlyc3RMZXR0ZXJCbG9jazsKIAot
ICAgICAgICBSZW5kZXJPYmplY3QqIHBhcmVudEJsb2NrID0gZmlyc3RMZXR0ZXJCbG9jay0+cGFy
ZW50KCk7Ci0gICAgICAgIGlmIChmaXJzdExldHRlckJsb2NrLT5pc1JlcGxhY2VkKCkgfHwgIXBh
cmVudEJsb2NrIHx8IHBhcmVudEJsb2NrLT5maXJzdENoaWxkKCkgIT0gZmlyc3RMZXR0ZXJCbG9j
ayB8fCAKLSAgICAgICAgICAgICghcGFyZW50QmxvY2stPmlzUmVuZGVyQmxvY2tGbG93KCkgJiYg
IXBhcmVudEJsb2NrLT5pc1JlbmRlckJ1dHRvbigpKSkKKyAgICAgICAgUmVuZGVyRWxlbWVudCog
cGFyZW50QmxvY2sgPSBmaXJzdExldHRlckJsb2NrLT5wYXJlbnQoKTsKKyAgICAgICAgaWYgKGZp
cnN0TGV0dGVyQmxvY2stPmlzUmVwbGFjZWQoKSB8fCAhcGFyZW50QmxvY2sgfHwgcGFyZW50Qmxv
Y2stPmZpcnN0Q2hpbGQoKSAhPSBmaXJzdExldHRlckJsb2NrCisgICAgICAgICAgICB8fCAoIXBh
cmVudEJsb2NrLT5pc1JlbmRlckJsb2NrRmxvdygpICYmICFwYXJlbnRCbG9jay0+aXNSZW5kZXJC
dXR0b24oKSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgZmlyc3RMZXR0ZXJCbG9j
ayA9IHBhcmVudEJsb2NrOwogICAgIH0gCkBAIC01OTQ0LDcgKzU5NDUsNyBAQCB2b2lkIFJlbmRl
ckJsb2NrOjp1cGRhdGVGaXJzdExldHRlcigpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIERy
aWxsIGludG8gaW5saW5lcyBsb29raW5nIGZvciBvdXIgZmlyc3QgdGV4dCBjaGlsZC4KLSAgICBS
ZW5kZXJPYmplY3QqIGN1cnJDaGlsZCA9IGZpcnN0TGV0dGVyQmxvY2stPmZpcnN0Q2hpbGQoKTsK
KyAgICBSZW5kZXJPYmplY3QqIGN1cnJDaGlsZCA9IGZpcnN0TGV0dGVyQmxvY2stPmZpcnN0Q2hp
bGRTbG93KCk7CiAgICAgd2hpbGUgKGN1cnJDaGlsZCkgewogICAgICAgICBpZiAoY3VyckNoaWxk
LT5pc1RleHQoKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTk1Miw3ICs1OTUzLDcgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6dXBkYXRlRmlyc3RMZXR0ZXIoKQogICAgICAgICAgICAgY3VyckNoaWxk
ID0gY3VyckNoaWxkLT5uZXh0U2libGluZygpOwogICAgICAgICBlbHNlIGlmIChjdXJyQ2hpbGQt
PmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewogICAgICAgICAgICAgaWYgKGN1
cnJDaGlsZC0+c3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gRklSU1RfTEVUVEVSKSB7Ci0gICAgICAg
ICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5maXJzdENoaWxkKCk7CisgICAgICAgICAg
ICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5maXJzdENoaWxkU2xvdygpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY3VyckNoaWxkID0gY3Vy
ckNoaWxkLT5uZXh0U2libGluZygpOwpAQCAtNTk2MSw5ICs1OTYyLDkgQEAgdm9pZCBSZW5kZXJC
bG9jazo6dXBkYXRlRmlyc3RMZXR0ZXIoKQogICAgICAgICBlbHNlIGlmIChjdXJyQ2hpbGQtPnN0
eWxlKCktPmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikgJiYgY3VyckNoaWxkLT5jYW5IYXZl
R2VuZXJhdGVkQ2hpbGRyZW4oKSkgIHsKICAgICAgICAgICAgIC8vIFdlIGZvdW5kIGEgbG93ZXIt
bGV2ZWwgbm9kZSB3aXRoIGZpcnN0LWxldHRlciwgd2hpY2ggc3VwZXJzZWRlcyB0aGUgaGlnaGVy
LWxldmVsIHN0eWxlCiAgICAgICAgICAgICBmaXJzdExldHRlckJsb2NrID0gY3VyckNoaWxkOwot
ICAgICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5maXJzdENoaWxkKCk7CisgICAgICAg
ICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPmZpcnN0Q2hpbGRTbG93KCk7CiAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5maXJzdENoaWxkKCk7Cisg
ICAgICAgICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPmZpcnN0Q2hpbGRTbG93KCk7CiAgICAg
fQogCiAgICAgaWYgKCFjdXJyQ2hpbGQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcAkocmV2aXNpb24gMTU2Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwODIsMTUgKzQwODIsMTQgQEAgVmlz
aWJsZVBvc2l0aW9uIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQbwogICAgICAgICBhZGp1c3RlZFBv
aW50Lm1vdmVCeShsb2NhdGlvbigpKTsKIAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiByZW5kZXJP
YmplY3QgPSBmaXJzdENoaWxkKCk7IHJlbmRlck9iamVjdDsgcmVuZGVyT2JqZWN0ID0gcmVuZGVy
T2JqZWN0LT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmICgoIXJlbmRlck9iamVjdC0+Zmly
c3RDaGlsZCgpICYmICFyZW5kZXJPYmplY3QtPmlzSW5saW5lKCkgJiYgIXJlbmRlck9iamVjdC0+
aXNSZW5kZXJCbG9ja0Zsb3coKSApCi0gICAgICAgICAgICB8fCByZW5kZXJPYmplY3QtPnN0eWxl
KCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIAogICAgICAgICBpZiAoIXJlbmRlck9iamVjdC0+aXNCb3goKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAKICAgICAgICAgUmVuZGVyQm94KiByZW5kZXJlciA9IHRvUmVuZGVy
Qm94KHJlbmRlck9iamVjdCk7CiAKKyAgICAgICAgaWYgKCghcmVuZGVyZXItPmZpcnN0Q2hpbGQo
KSAmJiAhcmVuZGVyZXItPmlzSW5saW5lKCkgJiYgIXJlbmRlcmVyLT5pc1JlbmRlckJsb2NrRmxv
dygpICkKKyAgICAgICAgICAgIHx8IHJlbmRlcmVyLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0g
VklTSUJMRSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIExheW91dFVuaXQgdG9w
ID0gcmVuZGVyZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBhZGRpbmdUb3AoKSArIChpc1Rh
YmxlUm93KCkgPyBMYXlvdXRVbml0KCkgOiByZW5kZXJlci0+eSgpKTsKICAgICAgICAgTGF5b3V0
VW5pdCBib3R0b20gPSB0b3AgKyByZW5kZXJlci0+Y29udGVudEhlaWdodCgpOwogICAgICAgICBM
YXlvdXRVbml0IGxlZnQgPSByZW5kZXJlci0+Ym9yZGVyTGVmdCgpICsgcmVuZGVyZXItPnBhZGRp
bmdMZWZ0KCkgKyAoaXNUYWJsZVJvdygpID8gTGF5b3V0VW5pdCgpIDogcmVuZGVyZXItPngoKSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxNTYyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNiw3ICszMjYsNyBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6
OnJlbW92ZUNoaWxkSW50ZXJuYWwoCiAgICAgICAgIGNhY2hlLT5jaGlsZHJlbkNoYW5nZWQodGhp
cyk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZExheWVycyhSZW5kZXJPYmplY3QqIG9iaiwgUmVuZGVy
TGF5ZXIqIHBhcmVudExheWVyLCBSZW5kZXJFbGVtZW50KiYgbmV3T2JqZWN0LCBSZW5kZXJMYXll
ciomIGJlZm9yZUNoaWxkKQorc3RhdGljIHZvaWQgYWRkTGF5ZXJzKFJlbmRlckVsZW1lbnQqIG9i
aiwgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyLCBSZW5kZXJFbGVtZW50KiYgbmV3T2JqZWN0LCBS
ZW5kZXJMYXllciomIGJlZm9yZUNoaWxkKQogewogICAgIGlmIChvYmotPmhhc0xheWVyKCkpIHsK
ICAgICAgICAgaWYgKCFiZWZvcmVDaGlsZCAmJiBuZXdPYmplY3QpIHsKQEAgLTM0MCw4ICszNDAs
MTAgQEAgc3RhdGljIHZvaWQgYWRkTGF5ZXJzKFJlbmRlck9iamVjdCogb2JqLAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBvYmotPmZpcnN0
Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGFkZExh
eWVycyhjdXJyLCBwYXJlbnRMYXllciwgbmV3T2JqZWN0LCBiZWZvcmVDaGlsZCk7CisgICAgZm9y
IChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBvYmotPmZpcnN0Q2hpbGQoKTsgY3VycmVudDsgY3Vy
cmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQtPmlz
UmVuZGVyRWxlbWVudCgpKQorICAgICAgICAgICAgYWRkTGF5ZXJzKHRvUmVuZGVyRWxlbWVudChj
dXJyZW50KSwgcGFyZW50TGF5ZXIsIG5ld09iamVjdCwgYmVmb3JlQ2hpbGQpOworICAgIH0KIH0K
IAogdm9pZCBSZW5kZXJFbGVtZW50OjphZGRMYXllcnMoUmVuZGVyTGF5ZXIqIHBhcmVudExheWVy
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCShyZXZpc2lv
biAxNTYyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBAIHB1YmxpYzoKICAgICBFbGVtZW50KiBub25Q
c2V1ZG9FbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9FbGVtZW50KFJlbmRlck9iamVjdDo6bm9u
UHNldWRvTm9kZSgpKTsgfQogICAgIEVsZW1lbnQqIGdlbmVyYXRpbmdFbGVtZW50KCkgY29uc3Qg
eyByZXR1cm4gdG9FbGVtZW50KFJlbmRlck9iamVjdDo6Z2VuZXJhdGluZ05vZGUoKSk7IH0KIAot
ICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkKCkgY29uc3QgRklOQUwgeyByZXR1
cm4gbV9maXJzdENoaWxkOyB9Ci0gICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGxhc3RDaGlsZCgp
IGNvbnN0IEZJTkFMIHsgcmV0dXJuIG1fbGFzdENoaWxkOyB9CisgICAgUmVuZGVyT2JqZWN0KiBm
aXJzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdENoaWxkOyB9CisgICAgUmVuZGVyT2Jq
ZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RDaGlsZDsgfQogCiAgICAgdmly
dHVhbCBib29sIGlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKikgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmpl
Y3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CkBAIC03OSw2ICs3
OSwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgbm9uUHNldWRvTm9kZSgpIGNvbnN0IFdURl9ERUxF
VEVEX0ZVTkNUSU9OOwogICAgIHZvaWQgZ2VuZXJhdGluZ05vZGUoKSBjb25zdCBXVEZfREVMRVRF
RF9GVU5DVElPTjsKICAgICB2b2lkIGlzVGV4dCgpIGNvbnN0IFdURl9ERUxFVEVEX0ZVTkNUSU9O
OworICAgIHZvaWQgaXNSZW5kZXJFbGVtZW50KCkgY29uc3QgV1RGX0RFTEVURURfRlVOQ1RJT047
CisKKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZFNsb3coKSBjb25zdCB7IHJl
dHVybiBmaXJzdENoaWxkKCk7IH0KKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogbGFzdENoaWxk
U2xvdygpIGNvbnN0IHsgcmV0dXJuIGxhc3RDaGlsZCgpOyB9CiAKICAgICBSZW5kZXJPYmplY3Qq
IG1fZmlyc3RDaGlsZDsKICAgICBSZW5kZXJPYmplY3QqIG1fbGFzdENoaWxkOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lQmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lQmFzZS5jcHAJKHJldmlzaW9uIDE1
NjI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZUJhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHZvaWQgUmVuZGVyRnJhbWVCYXNlOjpsYXlv
dXRXaXRoRmxhdHRlbmkKIAogICAgIEFTU0VSVCghY2hpbGRGcmFtZVZpZXctPmxheW91dFBlbmRp
bmcoKSk7CiAgICAgQVNTRVJUKCFjaGlsZFJvb3QtPm5lZWRzTGF5b3V0KCkpOwotICAgIEFTU0VS
VCghY2hpbGRSb290LT5maXJzdENoaWxkKCkgfHwgIWNoaWxkUm9vdC0+Zmlyc3RDaGlsZCgpLT5m
aXJzdENoaWxkKCkgfHwgIWNoaWxkUm9vdC0+Zmlyc3RDaGlsZCgpLT5maXJzdENoaWxkKCktPm5l
ZWRzTGF5b3V0KCkpOworICAgIEFTU0VSVCghY2hpbGRSb290LT5maXJzdENoaWxkKCkgfHwgIWNo
aWxkUm9vdC0+Zmlyc3RDaGlsZCgpLT5maXJzdENoaWxkU2xvdygpIHx8ICFjaGlsZFJvb3QtPmZp
cnN0Q2hpbGQoKS0+Zmlyc3RDaGlsZFNsb3coKS0+bmVlZHNMYXlvdXQoKSk7CiAKICAgICBzZXRO
ZWVkc0xheW91dChmYWxzZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAJKHJldmlzaW9uIDE1NjI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMzgsOCArMTEzOCw5IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZURlc2NlbmRhbnREZXBlbmQKICAgICAgICAgICAgICAgICAg
ICAgbV9oYXNWaXNpYmxlQ29udGVudCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoci0+Zmlyc3RDaGlsZCgp
ICYmICFyLT5oYXNMYXllcigpKQotICAgICAgICAgICAgICAgICAgICByID0gci0+Zmlyc3RDaGls
ZCgpOworICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogY2hpbGQ7CisgICAgICAgICAgICAg
ICAgaWYgKCFyLT5oYXNMYXllcigpICYmIChjaGlsZCA9IHItPmZpcnN0Q2hpbGRTbG93KCkpKQor
ICAgICAgICAgICAgICAgICAgICByID0gY2hpbGQ7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
ci0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgICAgICAgICAgICAgciA9IHItPm5leHRTaWJsaW5n
KCk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHJldmlzaW9uIDE1NjI3NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MCw3
ICsyNjAsNyBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjp1cGRhdGVWYWx1ZSgpCiAgICAgfQogfQog
Ci1zdGF0aWMgUmVuZGVyT2JqZWN0KiBmaXJzdE5vbk1hcmtlckNoaWxkKFJlbmRlck9iamVjdCog
cGFyZW50KQorc3RhdGljIFJlbmRlck9iamVjdCogZmlyc3ROb25NYXJrZXJDaGlsZChSZW5kZXJC
bG9jayogcGFyZW50KQogewogICAgIFJlbmRlck9iamVjdCogcmVzdWx0ID0gcGFyZW50LT5maXJz
dENoaWxkKCk7CiAgICAgd2hpbGUgKHJlc3VsdCAmJiByZXN1bHQtPmlzTGlzdE1hcmtlcigpKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9u
IDE1NjI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTUsNyArMjE1LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnNldEZs
b3dUaHJlYWRTdGF0ZUluYwogewogICAgIHNldEZsb3dUaHJlYWRTdGF0ZShzdGF0ZSk7CiAKLSAg
ICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0g
Zmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsK
ICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGEgZnJhZ21lbnRhdGlvbiBjb250ZXh0IGl0IGFs
cmVhZHkgdXBkYXRlZCB0aGUgZGVzY2VuZGFudHMgZmxhZyBhY2NvcmRpbmdseS4KICAgICAgICAg
aWYgKGNoaWxkLT5pc1JlbmRlckZsb3dUaHJlYWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtMjQ0LDcgKzI0NCw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpyZW1vdmVGcm9tUGFyZW50KCkK
IAogUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6Om5leHRJblByZU9yZGVyKCkgY29uc3QKIHsK
LSAgICBpZiAoUmVuZGVyT2JqZWN0KiBvID0gZmlyc3RDaGlsZCgpKQorICAgIGlmIChSZW5kZXJP
YmplY3QqIG8gPSBmaXJzdENoaWxkU2xvdygpKQogICAgICAgICByZXR1cm4gbzsKIAogICAgIHJl
dHVybiBuZXh0SW5QcmVPcmRlckFmdGVyQ2hpbGRyZW4oKTsKQEAgLTI2Niw3ICsyNjYsNyBAQCBS
ZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6bmV4dEluUHJlT3JkCiAKIFJlbmRlck9iamVjdCog
UmVuZGVyT2JqZWN0OjpuZXh0SW5QcmVPcmRlcihjb25zdCBSZW5kZXJPYmplY3QqIHN0YXlXaXRo
aW4pIGNvbnN0CiB7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogbyA9IGZpcnN0Q2hpbGQoKSkKKyAg
ICBpZiAoUmVuZGVyT2JqZWN0KiBvID0gZmlyc3RDaGlsZFNsb3coKSkKICAgICAgICAgcmV0dXJu
IG87CiAKICAgICByZXR1cm4gbmV4dEluUHJlT3JkZXJBZnRlckNoaWxkcmVuKHN0YXlXaXRoaW4p
OwpAQCAtMjkwLDggKzI5MCw4IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0OjpuZXh0SW5Q
cmVPcmQKIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0OjpwcmV2aW91c0luUHJlT3JkZXIoKSBj
b25zdAogewogICAgIGlmIChSZW5kZXJPYmplY3QqIG8gPSBwcmV2aW91c1NpYmxpbmcoKSkgewot
ICAgICAgICB3aGlsZSAoby0+bGFzdENoaWxkKCkpCi0gICAgICAgICAgICBvID0gby0+bGFzdENo
aWxkKCk7CisgICAgICAgIHdoaWxlIChSZW5kZXJPYmplY3QqIGxhc3QgPSBvLT5sYXN0Q2hpbGRT
bG93KCkpCisgICAgICAgICAgICBvID0gbGFzdDsKICAgICAgICAgcmV0dXJuIG87CiAgICAgfQog
CkBAIC0zMDgsNyArMzA4LDcgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6OnByZXZpb3Vz
SW5QcgogCiBSZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6Y2hpbGRBdCh1bnNpZ25lZCBpbmRl
eCkgY29uc3QKIHsKLSAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOworICAg
IFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkU2xvdygpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGNoaWxkICYmIGkgPCBpbmRleDsgaSsrKQogICAgICAgICBjaGlsZCA9IGNoaWxk
LT5uZXh0U2libGluZygpOwogICAgIHJldHVybiBjaGlsZDsKQEAgLTMxNiwxMCArMzE2LDEwIEBA
IFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0OjpjaGlsZEF0KHVuc2kKIAogUmVuZGVyT2JqZWN0
KiBSZW5kZXJPYmplY3Q6OmZpcnN0TGVhZkNoaWxkKCkgY29uc3QKIHsKLSAgICBSZW5kZXJPYmpl
Y3QqIHIgPSBmaXJzdENoaWxkKCk7CisgICAgUmVuZGVyT2JqZWN0KiByID0gZmlyc3RDaGlsZFNs
b3coKTsKICAgICB3aGlsZSAocikgewogICAgICAgICBSZW5kZXJPYmplY3QqIG4gPSAwOwotICAg
ICAgICBuID0gci0+Zmlyc3RDaGlsZCgpOworICAgICAgICBuID0gci0+Zmlyc3RDaGlsZFNsb3co
KTsKICAgICAgICAgaWYgKCFuKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIHIgPSBuOwpA
QCAtMzI5LDEwICszMjksMTAgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6OmZpcnN0TGVh
ZkNoaQogCiBSZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6bGFzdExlYWZDaGlsZCgpIGNvbnN0
CiB7Ci0gICAgUmVuZGVyT2JqZWN0KiByID0gbGFzdENoaWxkKCk7CisgICAgUmVuZGVyT2JqZWN0
KiByID0gbGFzdENoaWxkU2xvdygpOwogICAgIHdoaWxlIChyKSB7CiAgICAgICAgIFJlbmRlck9i
amVjdCogbiA9IDA7Ci0gICAgICAgIG4gPSByLT5sYXN0Q2hpbGQoKTsKKyAgICAgICAgbiA9IHIt
Pmxhc3RDaGlsZFNsb3coKTsKICAgICAgICAgaWYgKCFuKQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIHIgPSBuOwpAQCAtMTIyOCw3ICsxMjI4LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFk
ZEFic29sdXRlUmVjdEZvckxheQogewogICAgIGlmIChoYXNMYXllcigpKQogICAgICAgICByZXN1
bHQudW5pdGUoYWJzb2x1dGVCb3VuZGluZ0JveFJlY3RJZ25vcmluZ1RyYW5zZm9ybXMoKSk7Ci0g
ICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBmaXJzdENoaWxkKCk7IGN1cnJlbnQ7IGN1
cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKQorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBj
dXJyZW50ID0gZmlyc3RDaGlsZFNsb3coKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5l
eHRTaWJsaW5nKCkpCiAgICAgICAgIGN1cnJlbnQtPmFkZEFic29sdXRlUmVjdEZvckxheWVyKHJl
c3VsdCk7CiB9CiAKQEAgLTEyMzcsNyArMTIzNyw3IEBAIExheW91dFJlY3QgUmVuZGVyT2JqZWN0
OjpwYWludGluZ1Jvb3RSZWMKIHsKICAgICBMYXlvdXRSZWN0IHJlc3VsdCA9IGFic29sdXRlQm91
bmRpbmdCb3hSZWN0SWdub3JpbmdUcmFuc2Zvcm1zKCk7CiAgICAgdG9wTGV2ZWxSZWN0ID0gcmVz
dWx0OwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOyBjdXJy
ZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkKKyAgICBmb3IgKFJlbmRlck9i
amVjdCogY3VycmVudCA9IGZpcnN0Q2hpbGRTbG93KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJy
ZW50LT5uZXh0U2libGluZygpKQogICAgICAgICBjdXJyZW50LT5hZGRBYnNvbHV0ZVJlY3RGb3JM
YXllcihyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xNTkxLDcgKzE1OTEsNyBA
QCB2b2lkIFJlbmRlck9iamVjdDo6c2hvd1JlbmRlclRyZWVBbmRNYXJrCiAgICAgaWYgKCF0aGlz
KQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGNvbnN0IFJlbmRlck9iamVjdCogY2hpbGQg
PSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAg
IGZvciAoY29uc3QgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGRTbG93KCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAgICBjaGlsZC0+c2hvd1JlbmRl
clRyZWVBbmRNYXJrKG1hcmtlZE9iamVjdDEsIG1hcmtlZExhYmVsMSwgbWFya2VkT2JqZWN0Miwg
bWFya2VkTGFiZWwyLCBkZXB0aCArIDEpOwogfQogCkBAIC0xNzc5LDcgKzE3NzksOSBAQCB2b2lk
IFJlbmRlck9iamVjdDo6c2V0UHNldWRvU3R5bGUoUGFzc1JlCiAKIGlubGluZSBib29sIFJlbmRl
ck9iamVjdDo6aGFzSW1tZWRpYXRlTm9uV2hpdGVzcGFjZVRleHRDaGlsZCgpIGNvbnN0CiB7Ci0g
ICAgZm9yIChjb25zdCBSZW5kZXJPYmplY3QqIHIgPSBmaXJzdENoaWxkKCk7IHI7IHIgPSByLT5u
ZXh0U2libGluZygpKSB7CisgICAgaWYgKGlzVGV4dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgZm9yIChjb25zdCBSZW5kZXJPYmplY3QqIHIgPSB0b1JlbmRlckVsZW1lbnQodGhpcykt
PmZpcnN0Q2hpbGQoKTsgcjsgciA9IHItPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKHIt
PmlzVGV4dCgpICYmICF0b1JlbmRlclRleHQociktPmlzQWxsQ29sbGFwc2libGVXaGl0ZXNwYWNl
KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yMDE1LDcgKzIwMTcsNyBA
QCB2b2lkIFJlbmRlck9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVECiB2b2lkIFJlbmRlck9i
amVjdDo6cHJvcGFnYXRlU3R5bGVUb0Fub255bW91c0NoaWxkcmVuKGJvb2wgYmxvY2tDaGlsZHJl
bk9ubHkpCiB7CiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHNhdmUgdGhpcyBjYWxsIHdoZW4gdGhl
IGNoYW5nZSBvbmx5IGFmZmVjdGVkIG5vbi1pbmhlcml0ZWQgcHJvcGVydGllcy4KLSAgICBmb3Ig
KFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxk
LT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RD
aGlsZFNsb3coKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAg
ICAgaWYgKCFjaGlsZC0+aXNBbm9ueW1vdXMoKSB8fCBjaGlsZC0+c3R5bGUoKS0+c3R5bGVUeXBl
KCkgIT0gTk9QU0VVRE8pCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMjUxNSw3ICsyNTE3
LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnJlbW92ZUZyb21SZW5kZXJGbG93VAogCiB2b2lkIFJl
bmRlck9iamVjdDo6cmVtb3ZlRnJvbVJlbmRlckZsb3dUaHJlYWRSZWN1cnNpdmUoUmVuZGVyRmxv
d1RocmVhZCogcmVuZGVyRmxvd1RocmVhZCkKIHsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY2hp
bGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQor
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGRTbG93KCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAgICBjaGlsZC0+cmVtb3ZlRnJvbVJl
bmRlckZsb3dUaHJlYWRSZWN1cnNpdmUocmVuZGVyRmxvd1RocmVhZCk7CiAKICAgICBSZW5kZXJG
bG93VGhyZWFkKiBsb2NhbEZsb3dUaHJlYWQgPSByZW5kZXJGbG93VGhyZWFkOwpAQCAtMjUzNSw3
ICsyNTM3LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmRlc3Ryb3lBbmRDbGVhbnVwQW5vbgogICAg
IH0KIAogICAgIFJlbmRlck9iamVjdCogZGVzdHJveVJvb3QgPSB0aGlzOwotICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBkZXN0cm95Um9vdFBhcmVudCA9IGRlc3Ryb3lSb290LT5wYXJlbnQoKTsgZGVz
dHJveVJvb3RQYXJlbnQgJiYgZGVzdHJveVJvb3RQYXJlbnQtPmlzQW5vbnltb3VzKCk7IGRlc3Ry
b3lSb290ID0gZGVzdHJveVJvb3RQYXJlbnQsIGRlc3Ryb3lSb290UGFyZW50ID0gZGVzdHJveVJv
b3RQYXJlbnQtPnBhcmVudCgpKSB7CisgICAgZm9yIChSZW5kZXJFbGVtZW50KiBkZXN0cm95Um9v
dFBhcmVudCA9IGRlc3Ryb3lSb290LT5wYXJlbnQoKTsgZGVzdHJveVJvb3RQYXJlbnQgJiYgZGVz
dHJveVJvb3RQYXJlbnQtPmlzQW5vbnltb3VzKCk7IGRlc3Ryb3lSb290ID0gZGVzdHJveVJvb3RQ
YXJlbnQsIGRlc3Ryb3lSb290UGFyZW50ID0gZGVzdHJveVJvb3RQYXJlbnQtPnBhcmVudCgpKSB7
CiAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IHJlbW92ZSBhbm9ueW1vdXMgY2VsbHMnIGFu
ZCB0YWJsZSBzZWN0aW9ucycgd3JhcHBlcnMgYnV0IHdlIHNob3VsZCByZW1vdmUgYWxsIHVubmVl
ZGVkCiAgICAgICAgIC8vIHdyYXBwZXJzLiBTZWUgaHR0cDovL3dlYmtpdC5vcmcvYi81MjEyMyBh
cyBhbiBleGFtcGxlIHdoZXJlIHRoaXMgaXMgbmVlZGVkLgogICAgICAgICBpZiAoIWRlc3Ryb3lS
b290UGFyZW50LT5pc1RhYmxlQ2VsbCgpICYmICFkZXN0cm95Um9vdFBhcmVudC0+aXNUYWJsZVNl
Y3Rpb24oKSkKQEAgLTI2MTQsNyArMjYxNiw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojp1cGRhdGVE
cmFnU3RhdGUoYm9vbCAKICAgICBzZXRJc0RyYWdnaW5nKGRyYWdPbik7CiAgICAgaWYgKHZhbHVl
Q2hhbmdlZCAmJiBub2RlKCkgJiYgKHN0eWxlKCktPmFmZmVjdGVkQnlEcmFnKCkgfHwgKG5vZGUo
KS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKCkpLT5jaGlsZHJlbkFmZmVjdGVk
QnlEcmFnKCkpKSkKICAgICAgICAgbm9kZSgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAg
Zm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJy
LT5uZXh0U2libGluZygpKQorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGls
ZFNsb3coKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGN1cnIt
PnVwZGF0ZURyYWdTdGF0ZShkcmFnT24pOwogfQogCkBAIC0yNjg3LDcgKzI2ODksNyBAQCB2b2lk
IFJlbmRlck9iamVjdDo6bGF5b3V0KCkKIHsKICAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1Bv
aW50IGxheW91dENoZWNrUG9pbnQ7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwotICAgIFJl
bmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7CisgICAgUmVuZGVyT2JqZWN0KiBjaGls
ZCA9IGZpcnN0Q2hpbGRTbG93KCk7CiAgICAgd2hpbGUgKGNoaWxkKSB7CiAgICAgICAgIGNoaWxk
LT5sYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICBBU1NFUlQoIWNoaWxkLT5uZWVkc0xheW91dCgp
KTsKQEAgLTI5MTIsNyArMjkxNCw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojpjb2xsZWN0QW5ub3Rh
dGVkUmVnaW8KICAgICAgICAgcmV0dXJuOwogCiAgICAgYWRkQW5ub3RhdGVkUmVnaW9ucyhyZWdp
b25zKTsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3Vycjsg
Y3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpCisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIg
PSB0b1JlbmRlckVsZW1lbnQodGhpcyktPmZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnIt
Pm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGN1cnItPmNvbGxlY3RBbm5vdGF0ZWRSZWdpb25zKHJl
Z2lvbnMpOwogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oCShyZXZpc2lvbiAxNTYyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NCwxMCArMTY0LDkgQEAgcHVibGljOgog
ICAgIFJlbmRlck9iamVjdCogcHJldmlvdXNTaWJsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9wcmV2
aW91czsgfQogICAgIFJlbmRlck9iamVjdCogbmV4dFNpYmxpbmcoKSBjb25zdCB7IHJldHVybiBt
X25leHQ7IH0KIAotICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgcmVuYW1lZCBzbG93Rmly
c3RDaGlsZCwgc2xvd0xhc3RDaGlsZCwgZXRjLgotICAgIC8vIHRvIGRpc2NvdXJhZ2UgdGhlaXIg
dXNlLgotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkKCkgY29uc3QgeyByZXR1
cm4gbnVsbHB0cjsgfQotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25z
dCB7IHJldHVybiBudWxscHRyOyB9CisgICAgLy8gVXNlIFJlbmRlckVsZW1lbnQgdmVyc2lvbnMg
aW5zdGVhZC4KKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZFNsb3coKSBjb25z
dCB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGxhc3RDaGls
ZFNsb3coKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAKICAgICBSZW5kZXJPYmplY3QqIG5l
eHRJblByZU9yZGVyKCkgY29uc3Q7CiAgICAgUmVuZGVyT2JqZWN0KiBuZXh0SW5QcmVPcmRlcihj
b25zdCBSZW5kZXJPYmplY3QqIHN0YXlXaXRoaW4pIGNvbnN0OwpAQCAtMjI0LDcgKzIyMyw4IEBA
IHB1YmxpYzoKIAogICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCogcmVuZGVyTmFtZWRGbG93VGhy
ZWFkV3JhcHBlcigpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiBmaXJzdENoaWxkKCkgPT0gMDsgfQorICAgIC8vIEZJWE1FOiBUaGUgbWVhbmluZyBv
ZiB0aGlzIGZ1bmN0aW9uIGlzIHVuY2xlYXIuCisgICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiAhZmlyc3RDaGlsZFNsb3coKTsgfQogCiAjaWZuZGVmIE5ERUJVRwogICAg
IHZvaWQgc2V0SGFzQVhPYmplY3QoYm9vbCBmbGFnKSB7IG1faGFzQVhPYmplY3QgPSBmbGFnOyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAkocmV2aXNp
b24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU4MCw3ICs1ODAsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBSZW5kZXJSZWdpb246OmNvCiAKIHZvaWQgUmVuZGVyUmVnaW9uOjpjb21wdXRlQ2hpbGRyZW5T
dHlsZUluUmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQogewotICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjaGlsZCA9IG9iamVjdC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IG9i
amVjdC0+Zmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCkpIHsKIAogICAgICAgICBSZW5kZXJPYmplY3RSZWdpb25TdHlsZU1hcDo6aXRlcmF0b3IgaXQg
PSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmZpbmQoY2hpbGQpOwogCkBAIC02MzIsNyArNjMy
LDcgQEAgdm9pZCBSZW5kZXJSZWdpb246OmNsZWFyT2JqZWN0U3R5bGVJblJlZwogICAgIG1fcmVu
ZGVyT2JqZWN0UmVnaW9uU3R5bGUucmVtb3ZlKG9iamVjdCk7CiAKICAgICAvLyBDbGVhciB0aGUg
c3R5bGUgZm9yIHRoZSBjaGlsZHJlbiBvZiB0aGlzIG9iamVjdC4KLSAgICBmb3IgKFJlbmRlck9i
amVjdCogY2hpbGQgPSBvYmplY3QtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpCisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gb2JqZWN0LT5m
aXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKICAg
ICAgICAgY2xlYXJPYmplY3RTdHlsZUluUmVnaW9uKGNoaWxkKTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcAkocmV2aXNpb24gMTU2Mjc0KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
OSwyNyArNTksMjcgQEAgc3RhdGljIGlubGluZSBib29sIGlzUnVieUJlZm9yZUJsb2NrKGNvbgog
ewogICAgIHJldHVybiBpc0Fub255bW91c1J1YnlJbmxpbmVCbG9jayhvYmplY3QpCiAgICAgICAg
ICYmICFvYmplY3QtPnByZXZpb3VzU2libGluZygpCi0gICAgICAgICYmIG9iamVjdC0+Zmlyc3RD
aGlsZCgpCi0gICAgICAgICYmIG9iamVjdC0+Zmlyc3RDaGlsZCgpLT5zdHlsZSgpLT5zdHlsZVR5
cGUoKSA9PSBCRUZPUkU7CisgICAgICAgICYmIG9iamVjdC0+Zmlyc3RDaGlsZFNsb3coKQorICAg
ICAgICAmJiBvYmplY3QtPmZpcnN0Q2hpbGRTbG93KCktPnN0eWxlKCktPnN0eWxlVHlwZSgpID09
IEJFRk9SRTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGlzUnVieUFmdGVyQmxvY2soY29uc3Qg
UmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgcmV0dXJuIGlzQW5vbnltb3VzUnVieUlubGlu
ZUJsb2NrKG9iamVjdCkKICAgICAgICAgJiYgIW9iamVjdC0+bmV4dFNpYmxpbmcoKQotICAgICAg
ICAmJiBvYmplY3QtPmZpcnN0Q2hpbGQoKQotICAgICAgICAmJiBvYmplY3QtPmZpcnN0Q2hpbGQo
KS0+c3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gQUZURVI7CisgICAgICAgICYmIG9iamVjdC0+Zmly
c3RDaGlsZFNsb3coKQorICAgICAgICAmJiBvYmplY3QtPmZpcnN0Q2hpbGRTbG93KCktPnN0eWxl
KCktPnN0eWxlVHlwZSgpID09IEFGVEVSOwogfQogCiBzdGF0aWMgaW5saW5lIFJlbmRlckJsb2Nr
KiBydWJ5QmVmb3JlQmxvY2soY29uc3QgUmVuZGVyT2JqZWN0KiBydWJ5KQogewotICAgIFJlbmRl
ck9iamVjdCogY2hpbGQgPSBydWJ5LT5maXJzdENoaWxkKCk7CisgICAgUmVuZGVyT2JqZWN0KiBj
aGlsZCA9IHJ1YnktPmZpcnN0Q2hpbGRTbG93KCk7CiAgICAgcmV0dXJuIGlzUnVieUJlZm9yZUJs
b2NrKGNoaWxkKSA/IHRvUmVuZGVyQmxvY2soY2hpbGQpIDogMDsKIH0KIAogc3RhdGljIGlubGlu
ZSBSZW5kZXJCbG9jayogcnVieUFmdGVyQmxvY2soY29uc3QgUmVuZGVyT2JqZWN0KiBydWJ5KQog
ewotICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBydWJ5LT5sYXN0Q2hpbGQoKTsKKyAgICBSZW5k
ZXJPYmplY3QqIGNoaWxkID0gcnVieS0+bGFzdENoaWxkU2xvdygpOwogICAgIHJldHVybiBpc1J1
YnlBZnRlckJsb2NrKGNoaWxkKSA/IHRvUmVuZGVyQmxvY2soY2hpbGQpIDogMDsKIH0KIApAQCAt
OTMsNyArOTMsNyBAQCBzdGF0aWMgUmVuZGVyQmxvY2sqIGNyZWF0ZUFub255bW91c1J1YnlJCiAK
IHN0YXRpYyBSZW5kZXJSdWJ5UnVuKiBsYXN0UnVieVJ1bihjb25zdCBSZW5kZXJPYmplY3QqIHJ1
YnkpCiB7Ci0gICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJ1YnktPmxhc3RDaGlsZCgpOworICAg
IFJlbmRlck9iamVjdCogY2hpbGQgPSBydWJ5LT5sYXN0Q2hpbGRTbG93KCk7CiAgICAgaWYgKGNo
aWxkICYmICFjaGlsZC0+aXNSdWJ5UnVuKCkpCiAgICAgICAgIGNoaWxkID0gY2hpbGQtPnByZXZp
b3VzU2libGluZygpOwogICAgIEFTU0VSVCghY2hpbGQgfHwgY2hpbGQtPmlzUnVieVJ1bigpIHx8
IGNoaWxkLT5pc0JlZm9yZUNvbnRlbnQoKSB8fCBjaGlsZCA9PSBydWJ5QmVmb3JlQmxvY2socnVi
eSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZp
c2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODQsOSArMTg0LDEwIEBAIHZvaWQgUmVuZGVyVGFibGU6OmFk
ZENoaWxkKFJlbmRlck9iamVjdCoKICAgICB3aGlsZSAobGFzdEJveCAmJiBsYXN0Qm94LT5wYXJl
bnQoKS0+aXNBbm9ueW1vdXMoKSAmJiAhbGFzdEJveC0+aXNUYWJsZVNlY3Rpb24oKSAmJiBsYXN0
Qm94LT5zdHlsZSgpLT5kaXNwbGF5KCkgIT0gVEFCTEVfQ0FQVElPTiAmJiBsYXN0Qm94LT5zdHls
ZSgpLT5kaXNwbGF5KCkgIT0gVEFCTEVfQ09MVU1OX0dST1VQKQogICAgICAgICBsYXN0Qm94ID0g
bGFzdEJveC0+cGFyZW50KCk7CiAgICAgaWYgKGxhc3RCb3ggJiYgbGFzdEJveC0+aXNBbm9ueW1v
dXMoKSAmJiAhaXNBZnRlckNvbnRlbnQobGFzdEJveCkpIHsKLSAgICAgICAgaWYgKGJlZm9yZUNo
aWxkID09IGxhc3RCb3gpCi0gICAgICAgICAgICBiZWZvcmVDaGlsZCA9IGxhc3RCb3gtPmZpcnN0
Q2hpbGQoKTsKLSAgICAgICAgdG9SZW5kZXJUYWJsZVNlY3Rpb24obGFzdEJveCktPmFkZENoaWxk
KGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlv
biA9IHRvUmVuZGVyVGFibGVTZWN0aW9uKGxhc3RCb3gpOworICAgICAgICBpZiAoYmVmb3JlQ2hp
bGQgPT0gc2VjdGlvbikKKyAgICAgICAgICAgIGJlZm9yZUNoaWxkID0gc2VjdGlvbi0+Zmlyc3RD
aGlsZCgpOworICAgICAgICBzZWN0aW9uLT5hZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01NjgsMTAgKzU2OSwxMCBAQCB2b2lkIFJlbmRl
clRhYmxlOjpyZWNhbGNDb2xsYXBzZWRCb3JkZXJzCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIHNl
Y3Rpb24gPSBmaXJzdENoaWxkKCk7IHNlY3Rpb247IHNlY3Rpb24gPSBzZWN0aW9uLT5uZXh0U2li
bGluZygpKSB7CiAgICAgICAgIGlmICghc2VjdGlvbi0+aXNUYWJsZVNlY3Rpb24oKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogcm93ID0gc2VjdGlv
bi0+Zmlyc3RDaGlsZCgpOyByb3c7IHJvdyA9IHJvdy0+bmV4dFNpYmxpbmcoKSkgeworICAgICAg
ICBmb3IgKFJlbmRlck9iamVjdCogcm93ID0gdG9SZW5kZXJUYWJsZVNlY3Rpb24oc2VjdGlvbikt
PmZpcnN0Q2hpbGQoKTsgcm93OyByb3cgPSByb3ctPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAg
ICAgIGlmICghcm93LT5pc1RhYmxlUm93KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2VsbCA9IHJvdy0+Zmlyc3RDaGlsZCgpOyBj
ZWxsOyBjZWxsID0gY2VsbC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgZm9yIChSZW5k
ZXJPYmplY3QqIGNlbGwgPSB0b1JlbmRlclRhYmxlUm93KHJvdyktPmZpcnN0Q2hpbGQoKTsgY2Vs
bDsgY2VsbCA9IGNlbGwtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIWNl
bGwtPmlzVGFibGVDZWxsKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgIEFTU0VSVCh0b1JlbmRlclRhYmxlQ2VsbChjZWxsKS0+dGFibGUoKSA9PSB0aGlz
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAko
cmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
Um93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDkgKzExMSwxMCBAQCB2b2lkIFJlbmRlclRh
YmxlUm93OjphZGRDaGlsZChSZW5kZXJPYmplCiAgICAgICAgIGlmICghbGFzdCkKICAgICAgICAg
ICAgIGxhc3QgPSBsYXN0Q2hpbGQoKTsKICAgICAgICAgaWYgKGxhc3QgJiYgbGFzdC0+aXNBbm9u
eW1vdXMoKSAmJiBsYXN0LT5pc1RhYmxlQ2VsbCgpICYmICFsYXN0LT5pc0JlZm9yZU9yQWZ0ZXJD
b250ZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChiZWZvcmVDaGlsZCA9PSBsYXN0KQotICAgICAg
ICAgICAgICAgIGJlZm9yZUNoaWxkID0gbGFzdC0+Zmlyc3RDaGlsZCgpOwotICAgICAgICAgICAg
dG9SZW5kZXJUYWJsZUNlbGwobGFzdCktPmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7Cisg
ICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSB0b1JlbmRlclRhYmxlQ2VsbChsYXN0
KTsKKyAgICAgICAgICAgIGlmIChiZWZvcmVDaGlsZCA9PSBjZWxsKQorICAgICAgICAgICAgICAg
IGJlZm9yZUNoaWxkID0gY2VsbC0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgY2VsbC0+YWRk
Q2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0
aW9uLmNwcAkocmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw5ICsxMzAsMTAgQEAg
dm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENoaWxkKFJlbmRlcgogICAgICAgICBpZiAoIWxh
c3QpCiAgICAgICAgICAgICBsYXN0ID0gbGFzdENoaWxkKCk7CiAgICAgICAgIGlmIChsYXN0ICYm
IGxhc3QtPmlzQW5vbnltb3VzKCkgJiYgIWxhc3QtPmlzQmVmb3JlT3JBZnRlckNvbnRlbnQoKSkg
ewotICAgICAgICAgICAgaWYgKGJlZm9yZUNoaWxkID09IGxhc3QpCi0gICAgICAgICAgICAgICAg
YmVmb3JlQ2hpbGQgPSBsYXN0LT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICB0b1JlbmRlclRh
YmxlUm93KGxhc3QpLT5hZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICAgICAg
UmVuZGVyVGFibGVSb3cqIHJvdyA9IHRvUmVuZGVyVGFibGVSb3cobGFzdCk7CisgICAgICAgICAg
ICBpZiAoYmVmb3JlQ2hpbGQgPT0gcm93KQorICAgICAgICAgICAgICAgIGJlZm9yZUNoaWxkID0g
cm93LT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICByb3ctPmFkZENoaWxkKGNoaWxkLCBiZWZv
cmVDaGlsZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTIzNCw3ICsx
MjM1LDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnJlY2FsY0NlbGxzKCkKICAgICAgICAg
ICAgIHRhYmxlUm93LT5zZXRSb3dJbmRleChpbnNlcnRpb25Sb3cpOwogICAgICAgICAgICAgc2V0
Um93TG9naWNhbEhlaWdodFRvUm93U3R5bGVMb2dpY2FsSGVpZ2h0SWZOb3RSZWxhdGl2ZShtX2dy
aWRbaW5zZXJ0aW9uUm93XSk7CiAKLSAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjZWxs
ID0gcm93LT5maXJzdENoaWxkKCk7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0U2libGluZygpKSB7
CisgICAgICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2VsbCA9IHRhYmxlUm93LT5maXJzdENo
aWxkKCk7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKCFjZWxsLT5pc1RhYmxlQ2VsbCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcAkocmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTcsNyArNTk3LDcgQEAgdm9pZCB3
cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyTwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gby5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxk
ID0gby5maXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KSkgewogICAgICAgICBpZiAoY2hpbGQtPmhhc0xheWVyKCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgd3JpdGUodHMsICpjaGlsZCwgaW5kZW50ICsgMSwgYmVoYXZpb3IpOwpAQCAt
OTE4LDcgKzkxOCw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlQ291bnRlclZhbHVlc0Zyb21DaGlsZHIK
IHsKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuOwotICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCA9IHBhcmVudC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKSkgeworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHBhcmVudC0+
Zmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsK
ICAgICAgICAgaWYgKGNoaWxkLT5pc0NvdW50ZXIoKSkgewogICAgICAgICAgICAgaWYgKCFpc0Zp
cnN0Q291bnRlcikKICAgICAgICAgICAgICAgICBzdHJlYW0gPDwgIiAiOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFj
dGlvbi5jcHAJKHJldmlzaW9uIDE1NjI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNyAr
MTIzLDcgQEAgUmVuZGVyTWF0aE1MT3BlcmF0b3IqIFJlbmRlck1hdGhNTEZyYWN0aQogICAgIFJl
bmRlck9iamVjdCogbnVtZXJhdG9yV3JhcHBlciA9IGZpcnN0Q2hpbGQoKTsKICAgICBpZiAoIW51
bWVyYXRvcldyYXBwZXIpCiAgICAgICAgIHJldHVybiAwOwotICAgIFJlbmRlck9iamVjdCogbnVt
ZXJhdG9yID0gbnVtZXJhdG9yV3JhcHBlci0+Zmlyc3RDaGlsZCgpOworICAgIFJlbmRlck9iamVj
dCogbnVtZXJhdG9yID0gbnVtZXJhdG9yV3JhcHBlci0+Zmlyc3RDaGlsZFNsb3coKTsKICAgICBp
ZiAoIW51bWVyYXRvciB8fCAhbnVtZXJhdG9yLT5pc1JlbmRlck1hdGhNTEJsb2NrKCkpCiAgICAg
ICAgIHJldHVybiAwOwogICAgIHJldHVybiB0b1JlbmRlck1hdGhNTEJsb2NrKG51bWVyYXRvcikt
PnVuZW1iZWxsaXNoZWRPcGVyYXRvcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDAsNyArMTQwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGZpbmRQcmV2aW91c0FuZE5leHRB
dAogICAgIEFTU0VSVChzdGFydCk7CiAgICAgQVNTRVJUKGxvY2F0ZUVsZW1lbnQpOwogICAgIC8v
IEZJWE1FOiBNYWtlIHRoaXMgaXRlcmF0aXZlLgotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGls
ZCA9IHN0YXJ0LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
ZygpKSB7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gc3RhcnQtPmZpcnN0Q2hpbGRT
bG93KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlm
IChjaGlsZC0+aXNTVkdJbmxpbmVUZXh0KCkpIHsKICAgICAgICAgICAgIFJlbmRlclNWR0lubGlu
ZVRleHQqIHRleHQgPSB0b1JlbmRlclNWR0lubGluZVRleHQoY2hpbGQpOwogICAgICAgICAgICAg
aWYgKGxvY2F0ZUVsZW1lbnQgIT0gdGV4dCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCShyZXZpc2lvbiAxNTYyNzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZU9i
amVjdEJvdW5kaW5nQgogICAgIG9iamVjdEJvdW5kaW5nQm94LnVuaXRlRXZlbklmRW1wdHkob3Ro
ZXJCb3VuZGluZ0JveCk7CiB9CiAKLXZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUNvbnRh
aW5lckJvdW5kaW5nQm94ZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIsIEZsb2F0UmVj
dCYgb2JqZWN0Qm91bmRpbmdCb3gsIGJvb2wmIG9iamVjdEJvdW5kaW5nQm94VmFsaWQsIEZsb2F0
UmVjdCYgc3Ryb2tlQm91bmRpbmdCb3gsIEZsb2F0UmVjdCYgcmVwYWludEJvdW5kaW5nQm94KQor
dm9pZCBTVkdSZW5kZXJTdXBwb3J0Ojpjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyhjb25z
dCBSZW5kZXJFbGVtZW50KiBjb250YWluZXIsIEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gs
IGJvb2wmIG9iamVjdEJvdW5kaW5nQm94VmFsaWQsIEZsb2F0UmVjdCYgc3Ryb2tlQm91bmRpbmdC
b3gsIEZsb2F0UmVjdCYgcmVwYWludEJvdW5kaW5nQm94KQogewogICAgIG9iamVjdEJvdW5kaW5n
Qm94ID0gRmxvYXRSZWN0KCk7CiAgICAgb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCA9IGZhbHNlOwpA
QCAtMTk1LDcgKzE5NSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnZhbGlkYXRlUmVzb3VyY2Vz
T2YKICAgICBpZiAoU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6
Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KHN0YXJ0KSkKICAgICAgICAgcmVzb3VyY2Vz
LT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUoc3RhcnQsIGZhbHNlKTsKIAotICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjaGlsZCA9IHN0YXJ0LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxk
LT5uZXh0U2libGluZygpKQorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHN0YXJ0LT5m
aXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKICAg
ICAgICAgaW52YWxpZGF0ZVJlc291cmNlc09mQ2hpbGRyZW4oY2hpbGQpOwogfQogCkBAIC0yMzMs
NyArMjMzLDcgQEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbihSZQogICAg
IGJvb2wgbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gc3RhcnQtPm5lZWRzQm91bmRhcmllc1VwZGF0
ZSgpOwogICAgIEhhc2hTZXQ8UmVuZGVyT2JqZWN0Kj4gbm90bGF5b3V0ZWRPYmplY3RzOwogCi0g
ICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gc3RhcnQtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICBmb3IgKFJlbmRlck9iamVjdCog
Y2hpbGQgPSBzdGFydC0+Zmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpIHsKICAgICAgICAgYm9vbCBuZWVkc0xheW91dCA9IHNlbGZOZWVkc0xheW91
dDsKICAgICAgICAgYm9vbCBjaGlsZEV2ZXJIYWRMYXlvdXQgPSBjaGlsZC0+ZXZlckhhZExheW91
dCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBv
cnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clN1cHBvcnQuaAkocmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAg
cHVibGljOgogICAgIC8vIERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc2VkIHBvaW50IGxpZXMg
aW4gYSBjbGlwcGluZyBhcmVhCiAgICAgc3RhdGljIGJvb2wgcG9pbnRJbkNsaXBwaW5nQXJlYShS
ZW5kZXJPYmplY3QqLCBjb25zdCBGbG9hdFBvaW50Jik7CiAKLSAgICBzdGF0aWMgdm9pZCBjb21w
dXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyhjb25zdCBSZW5kZXJPYmplY3QqIGNvbnRhaW5lciwg
RmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCwgYm9vbCYgb2JqZWN0Qm91bmRpbmdCb3hWYWxp
ZCwgRmxvYXRSZWN0JiBzdHJva2VCb3VuZGluZ0JveCwgRmxvYXRSZWN0JiByZXBhaW50Qm91bmRp
bmdCb3gpOworICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveGVzKGNv
bnN0IFJlbmRlckVsZW1lbnQqIGNvbnRhaW5lciwgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0Jv
eCwgYm9vbCYgb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCwgRmxvYXRSZWN0JiBzdHJva2VCb3VuZGlu
Z0JveCwgRmxvYXRSZWN0JiByZXBhaW50Qm91bmRpbmdCb3gpOwogICAgIHN0YXRpYyBib29sIHBh
aW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdChjb25zdCBGbG9hdFJlY3QmIGxvY2FsUmVwYWlu
dFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUcmFuc2Zvcm0sIGNvbnN0IFBhaW50
SW5mbyYpOwogCiAgICAgLy8gSW1wb3J0YW50IGZ1bmN0aW9ucyB1c2VkIGJ5IG5lYXJseSBhbGwg
U1ZHIHJlbmRlcmVycyBjZW50cmFsaXppbmcgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbnMgLyBy
ZXBhaW50IHJlY3QgY2FsY3VsYXRpb25zCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDE1NjI3NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2Niw3ICs0NjYsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZVN0YW5k
YXJkUHJlZml4KFRleHRTdHJlCiAKIHN0YXRpYyB2b2lkIHdyaXRlQ2hpbGRyZW4oVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBpbnQgaW5kZW50KQogewotICAgIGZv
ciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IG9iamVjdC5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9
IG9iamVjdC5maXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkKICAgICAgICAgd3JpdGUodHMsICpjaGlsZCwgaW5kZW50ICsgMSk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2Vz
Q3ljbGVTb2x2ZXIuY3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzAsNyArNzAsNyBAQCBib29sIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyOjpyZXNvdXJjZUNvCiAg
ICAgLy8gVGhlbiBvcGVyYXRlIG9uIHRoZSBjaGlsZCByZXNvdXJjZXMgb2YgdGhlIGdpdmVuIHJl
bmRlcmVyLgogICAgIC8vIDxtYXJrZXIgaWQ9ImEiPiA8cGF0aCBtYXJrZXItc3RhcnQ9InVybCgj
YikiLz4gLi4uCiAgICAgLy8gPG1hcmtlciBpZD0iYiI+IDxwYXRoIG1hcmtlci1zdGFydD0idXJs
KCNhKSIvPiAuLi4KLSAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSByZW5kZXJlci0+Zmly
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgIGZv
ciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJlbmRlcmVyLT5maXJzdENoaWxkU2xvdygpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBTVkdSZXNvdXJjZXMq
IGNoaWxkUmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJl
bmRlck9iamVjdChjaGlsZCk7CiAgICAgICAgIGlmICghY2hpbGRSZXNvdXJjZXMpCiAgICAgICAg
ICAgICBjb250aW51ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4
dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAJKHJldmlz
aW9uIDE1NjI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91
dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBA
IHZvaWQgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyOjpjb2wKIHsKICAgICBBU1NFUlQo
IXN0YXJ0LT5pc1NWR1RleHQoKSB8fCBtX3RleHRQb3NpdGlvbnMuaXNFbXB0eSgpKTsKIAotICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHN0YXJ0LT5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7IAorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBj
aGlsZCA9IHN0YXJ0LT5maXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmlzU1ZHSW5saW5lVGV4dCgpKSB7CiAg
ICAgICAgICAgICBwcm9jZXNzUmVuZGVyU1ZHSW5saW5lVGV4dCh0b1JlbmRlclNWR0lubGluZVRl
eHQoY2hpbGQpLCBtX3RleHRMZW5ndGgsIGxhc3RDaGFyYWN0ZXIpOwogICAgICAgICAgICAgY29u
dGludWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNz
QnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3OSw3ICsxNzksNyBAQCB2b2lkIFNWR1RleHRNZXRyaWNzQnVpbGRlcjo6bWVhc3Vy
ZVRleHRSCiAKIHZvaWQgU1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjp3YWxrVHJlZShSZW5kZXJPYmpl
Y3QqIHN0YXJ0LCBSZW5kZXJTVkdJbmxpbmVUZXh0KiBzdG9wQXRMZWFmLCBNZWFzdXJlVGV4dERh
dGEqIGRhdGEpCiB7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gc3RhcnQtPmZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICBmb3Ig
KFJlbmRlck9iamVjdCogY2hpbGQgPSBzdGFydC0+Zmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc1NWR0lu
bGluZVRleHQoKSkgewogICAgICAgICAgICAgUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dCA9IHRv
UmVuZGVyU1ZHSW5saW5lVGV4dChjaGlsZCk7CiAgICAgICAgICAgICBpZiAoc3RvcEF0TGVhZiAm
JiBzdG9wQXRMZWFmICE9IHRleHQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
UmVzb2x2ZVRyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
UmVzb2x2ZVRyZWUuY3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZVJlc29sdmVUcmVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQwLDcgKzM0MCw3IEBA
IHN0YXRpYyBib29sIHRleHRSZW5kZXJlcklzTmVlZGVkKGNvbnN0IFQKICAgICAgICAgaWYgKHBh
cmVudFJlbmRlcmVyLmlzUmVuZGVyQmxvY2soKSAmJiAhcGFyZW50UmVuZGVyZXIuY2hpbGRyZW5J
bmxpbmUoKSAmJiAoIXByZXZpb3VzUmVuZGVyZXIgfHwgIXByZXZpb3VzUmVuZGVyZXItPmlzSW5s
aW5lKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgUmVu
ZGVyT2JqZWN0KiBmaXJzdCA9IHBhcmVudFJlbmRlcmVyLmZpcnN0Q2hpbGQoKTsKKyAgICAgICAg
UmVuZGVyT2JqZWN0KiBmaXJzdCA9IHBhcmVudFJlbmRlcmVyLmZpcnN0Q2hpbGRTbG93KCk7CiAg
ICAgICAgIHdoaWxlIChmaXJzdCAmJiBmaXJzdC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRp
b25lZCgpKQogICAgICAgICAgICAgZmlyc3QgPSBmaXJzdC0+bmV4dFNpYmxpbmcoKTsKICAgICAg
ICAgUmVuZGVyT2JqZWN0KiBuZXh0UmVuZGVyZXIgPSBuZXh0U2libGluZ1JlbmRlcmVyKHRleHRO
b2RlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJSZW5kZXJPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJSZW5kZXJPYmplY3QuY3BwCShy
ZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUmVuZGVyT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCBXZWJSZW5kZXJPYmplY3Q6Oldl
YlJlbmRlck9iamVjdChSZW5kZXJPCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY2hpbGRyZW4g
PSBNdXRhYmxlQXJyYXk6OmNyZWF0ZSgpOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjb3JlQ2hp
bGQgPSByZW5kZXJlci0+Zmlyc3RDaGlsZCgpOyBjb3JlQ2hpbGQ7IGNvcmVDaGlsZCA9IGNvcmVD
aGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjb3JlQ2hpbGQg
PSByZW5kZXJlci0+Zmlyc3RDaGlsZFNsb3coKTsgY29yZUNoaWxkOyBjb3JlQ2hpbGQgPSBjb3Jl
Q2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgUmVmUHRyPFdlYlJlbmRlck9iamVjdD4g
Y2hpbGQgPSBhZG9wdFJlZihuZXcgV2ViUmVuZGVyT2JqZWN0KGNvcmVDaGlsZCwgc2hvdWxkSW5j
bHVkZURlc2NlbmRhbnRzKSk7CiAgICAgICAgIG1fY2hpbGRyZW4tPmFwcGVuZChjaGlsZC5nZXQo
KSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJSZW5kZXJOb2Rl
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUmVuZGVyTm9k
ZS5tbQkocmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJS
ZW5kZXJOb2RlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIC0gKGlkKV9pbml0
V2l0aE5hbWU6KE5TU3RyaW5nICopbiBwb3NpdGkKIHN0YXRpYyBXZWJSZW5kZXJOb2RlICpjb3B5
UmVuZGVyTm9kZShSZW5kZXJPYmplY3QqIG5vZGUpCiB7CiAgICAgTlNNdXRhYmxlQXJyYXkgKmNo
aWxkcmVuID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0gICAgZm9yIChSZW5kZXJP
YmplY3QqIGNoaWxkID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKSkgeworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IG5vZGUtPmZp
cnN0Q2hpbGRTbG93KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAg
ICAgICAgIFdlYlJlbmRlck5vZGUgKmNoaWxkQ29weSA9IGNvcHlSZW5kZXJOb2RlKGNoaWxkKTsK
ICAgICAgICAgW2NoaWxkcmVuIGFkZE9iamVjdDpjaGlsZENvcHldOwogICAgICAgICBbY2hpbGRD
b3B5IHJlbGVhc2VdOwo=
</data>
<flag name="commit-queue"
          id="234578"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212374</attachid>
            <date>2013-09-23 11:41:16 -0700</date>
            <delta_ts>2013-09-23 11:41:16 -0700</delta_ts>
            <desc>yet yet another</desc>
            <filename>renderobject-slow-4.patch</filename>
            <type>text/plain</type>
            <size>52941</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEzLTA5LTIzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgUmVuZGVyT2JqZWN0
OjpmaXJzdC9sYXN0Q2hpbGQgdG8gUmVuZGVyT2JqZWN0OjpmaXJzdC9sYXN0Q2hpbGRTbG93Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE3ODQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgorCisgICAgICAgIFRoaXMgd2lsbCBt
YWtlIGl0IG9idmlvdXMgaW4gY29kZSB3aGVyZSB0eXBpbmcgc2hvdWxkIGJlIHRpZ2h0ZW5lZC4K
KyAgICAgICAgSGFuZGxlZCBzb21lIHNpbXBsZSBjYXNlcyBieSB0aWdodGVuaW5nIHRoZSBjb2Rl
IGluc3RlYWQgb2YgcmVuYW1pbmcuCisKIDIwMTMtMDktMjMgIEFudHRpIEtvaXZpc3RvICA8YW50
dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBSZW5kZXJPYmplY3RDaGlsZExpc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmNwcAkocmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzU4LDcgKzc1
OCw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlN0eWxlUmFuZ2UKICAgICAvLyB0
cmF2ZXJzZSBiYWNrd2FyZCBieSByZW5kZXJlciB0byBsb29rIGZvciBzdHlsZSBjaGFuZ2UKICAg
ICBmb3IgKFJlbmRlck9iamVjdCogciA9IHJlbmRlcmVyLT5wcmV2aW91c0luUHJlT3JkZXIoKTsg
cjsgciA9IHItPnByZXZpb3VzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgIC8vIHNraXAgbm9uLWxl
YWYgbm9kZXMKLSAgICAgICAgaWYgKHItPmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgaWYgKHItPmZp
cnN0Q2hpbGRTbG93KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBzdG9w
IGF0IHN0eWxlIGNoYW5nZQpAQCAtNzgxLDcgKzc4MSw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRp
b24gZW5kT2ZTdHlsZVJhbmdlKGMKICAgICAvLyB0cmF2ZXJzZSBmb3J3YXJkIGJ5IHJlbmRlcmVy
IHRvIGxvb2sgZm9yIHN0eWxlIGNoYW5nZQogICAgIGZvciAoUmVuZGVyT2JqZWN0KiByID0gcmVu
ZGVyZXItPm5leHRJblByZU9yZGVyKCk7IHI7IHIgPSByLT5uZXh0SW5QcmVPcmRlcigpKSB7CiAg
ICAgICAgIC8vIHNraXAgbm9uLWxlYWYgbm9kZXMKLSAgICAgICAgaWYgKHItPmZpcnN0Q2hpbGQo
KSkKKyAgICAgICAgaWYgKHItPmZpcnN0Q2hpbGRTbG93KCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICAvLyBzdG9wIGF0IHN0eWxlIGNoYW5nZQpJbmRleDogU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNyAr
MTc2LDcgQEAgc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGRJbgogICAgIHdo
aWxlIChyKSB7CiAgICAgICAgIGlmIChyLT5pc1JlbmRlckJsb2NrKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gcjsKLSAgICAgICAgaWYgKFJlbmRlck9iamVjdCogY2hpbGQgPSByLT5maXJzdENoaWxk
KCkpCisgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIGNoaWxkID0gci0+Zmlyc3RDaGlsZFNsb3co
KSkKICAgICAgICAgICAgIHJldHVybiBjaGlsZDsKICAgICAgICAgciA9IHRvUmVuZGVySW5saW5l
KHIpLT5jb250aW51YXRpb24oKTsgCiAgICAgfQpAQCAtMTg2LDcgKzE4Niw3IEBAIHN0YXRpYyBp
bmxpbmUgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkSW4KIAogc3RhdGljIGlubGluZSBSZW5kZXJP
YmplY3QqIGZpcnN0Q2hpbGRDb25zaWRlcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIHJl
bmRlcmVyKQogewotICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCA9IHJlbmRlcmVyLT5maXJz
dENoaWxkKCk7CisgICAgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkID0gcmVuZGVyZXItPmZpcnN0
Q2hpbGRTbG93KCk7CiAKICAgICBpZiAoIWZpcnN0Q2hpbGQgJiYgaXNJbmxpbmVXaXRoQ29udGlu
dWF0aW9uKHJlbmRlcmVyKSkKICAgICAgICAgZmlyc3RDaGlsZCA9IGZpcnN0Q2hpbGRJbkNvbnRp
bnVhdGlvbihyZW5kZXJlcik7CkBAIC0xOTcsNyArMTk3LDcgQEAgc3RhdGljIGlubGluZSBSZW5k
ZXJPYmplY3QqIGZpcnN0Q2hpbGRDbwogCiBzdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogbGFz
dENoaWxkQ29uc2lkZXJpbmdDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsK
LSAgICBSZW5kZXJPYmplY3QqIGxhc3RDaGlsZCA9IHJlbmRlcmVyLT5sYXN0Q2hpbGQoKTsKKyAg
ICBSZW5kZXJPYmplY3QqIGxhc3RDaGlsZCA9IHJlbmRlcmVyLT5sYXN0Q2hpbGRTbG93KCk7CiAg
ICAgUmVuZGVyT2JqZWN0KiBwcmV2OwogICAgIFJlbmRlck9iamVjdCogY3VyID0gcmVuZGVyZXI7
CiAKQEAgLTIwNyw3ICsyMDcsNyBAQCBzdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogbGFzdENo
aWxkQ29uCiAgICAgd2hpbGUgKGN1cikgewogICAgICAgICBwcmV2ID0gY3VyOwogCi0gICAgICAg
IGlmIChSZW5kZXJPYmplY3QqIGxjID0gY3VyLT5sYXN0Q2hpbGQoKSkKKyAgICAgICAgaWYgKFJl
bmRlck9iamVjdCogbGMgPSBjdXItPmxhc3RDaGlsZFNsb3coKSkKICAgICAgICAgICAgIGxhc3RD
aGlsZCA9IGxjOwogCiAgICAgICAgIGlmIChjdXItPmlzUmVuZGVySW5saW5lKCkpIHsKQEAgLTMy
NSw3ICszMjUsOCBAQCBzdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogY2hpbGRCZWZvcmVDCiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBmaXJzdENoaWxkSXNJbmxpbmVDb250aW51YXRpb24oUmVuZGVy
T2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gcmVuZGVyZXItPmZpcnN0Q2hpbGQoKSAm
JiByZW5kZXJlci0+Zmlyc3RDaGlsZCgpLT5pc0lubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsK
KyAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gcmVuZGVyZXItPmZpcnN0Q2hpbGRTbG93KCk7Cisg
ICAgcmV0dXJuIGNoaWxkICYmIGNoaWxkLT5pc0lubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsK
IH0KIAogQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6cHJl
dmlvdXNTaWJsaW5nKCkgY29uc3QKQEAgLTM0NCw5ICszNDUsOSBAQCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyCiAgICAgLy8gQ2FzZSAyOiBBbm9ueW1vdXMgYmxvY2sg
cGFyZW50IG9mIHRoZSBlbmQgb2YgYSBjb250aW51YXRpb24gLSBza2lwIGFsbCB0aGUgd2F5IHRv
IGJlZm9yZQogICAgIC8vIHRoZSBwYXJlbnQgb2YgdGhlIHN0YXJ0LCBzaW5jZSBldmVyeXRoaW5n
IGluIGJldHdlZW4gd2lsbCBiZSBsaW5rZWQgdXAgdmlhIHRoZSBjb250aW51YXRpb24uCiAgICAg
ZWxzZSBpZiAobV9yZW5kZXJlci0+aXNBbm9ueW1vdXNCbG9jaygpICYmIGZpcnN0Q2hpbGRJc0lu
bGluZUNvbnRpbnVhdGlvbihtX3JlbmRlcmVyKSkgewotICAgICAgICBSZW5kZXJPYmplY3QqIGZp
cnN0UGFyZW50ID0gc3RhcnRPZkNvbnRpbnVhdGlvbnMobV9yZW5kZXJlci0+Zmlyc3RDaGlsZCgp
KS0+cGFyZW50KCk7CisgICAgICAgIFJlbmRlck9iamVjdCogZmlyc3RQYXJlbnQgPSBzdGFydE9m
Q29udGludWF0aW9ucyhtX3JlbmRlcmVyLT5maXJzdENoaWxkU2xvdygpKS0+cGFyZW50KCk7CiAg
ICAgICAgIHdoaWxlIChmaXJzdENoaWxkSXNJbmxpbmVDb250aW51YXRpb24oZmlyc3RQYXJlbnQp
KQotICAgICAgICAgICAgZmlyc3RQYXJlbnQgPSBzdGFydE9mQ29udGludWF0aW9ucyhmaXJzdFBh
cmVudC0+Zmlyc3RDaGlsZCgpKS0+cGFyZW50KCk7CisgICAgICAgICAgICBmaXJzdFBhcmVudCA9
IHN0YXJ0T2ZDb250aW51YXRpb25zKGZpcnN0UGFyZW50LT5maXJzdENoaWxkU2xvdygpKS0+cGFy
ZW50KCk7CiAgICAgICAgIHByZXZpb3VzU2libGluZyA9IGZpcnN0UGFyZW50LT5wcmV2aW91c1Np
YmxpbmcoKTsKICAgICB9CiAKQEAgLTM2Nyw3ICszNjgsOCBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBBY2Nlc3NpYmlsaXR5UmVuZGVyCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBsYXN0Q2hpbGRIYXND
b250aW51YXRpb24oUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gcmVuZGVy
ZXItPmxhc3RDaGlsZCgpICYmIGlzSW5saW5lV2l0aENvbnRpbnVhdGlvbihyZW5kZXJlci0+bGFz
dENoaWxkKCkpOworICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSByZW5kZXJlci0+Zmlyc3RDaGls
ZFNsb3coKTsKKyAgICByZXR1cm4gY2hpbGQgJiYgaXNJbmxpbmVXaXRoQ29udGludWF0aW9uKGNo
aWxkKTsKIH0KIAogQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6bmV4dFNpYmxpbmcoKSBjb25zdApAQCAtMzg2LDkgKzM4OCw5IEBAIEFjY2Vzc2liaWxpdHlP
YmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXIKICAgICAvLyBDYXNlIDI6IEFub255bW91cyBibG9j
ayBwYXJlbnQgb2YgdGhlIHN0YXJ0IG9mIGEgY29udGludWF0aW9uIC0gc2tpcCBhbGwgdGhlIHdh
eSB0bwogICAgIC8vIGFmdGVyIHRoZSBwYXJlbnQgb2YgdGhlIGVuZCwgc2luY2UgZXZlcnl0aGlu
ZyBpbiBiZXR3ZWVuIHdpbGwgYmUgbGlua2VkIHVwIHZpYSB0aGUgY29udGludWF0aW9uLgogICAg
IGVsc2UgaWYgKG1fcmVuZGVyZXItPmlzQW5vbnltb3VzQmxvY2soKSAmJiBsYXN0Q2hpbGRIYXND
b250aW51YXRpb24obV9yZW5kZXJlcikpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBsYXN0UGFy
ZW50ID0gZW5kT2ZDb250aW51YXRpb25zKG1fcmVuZGVyZXItPmxhc3RDaGlsZCgpKS0+cGFyZW50
KCk7CisgICAgICAgIFJlbmRlck9iamVjdCogbGFzdFBhcmVudCA9IGVuZE9mQ29udGludWF0aW9u
cyhtX3JlbmRlcmVyLT5sYXN0Q2hpbGRTbG93KCkpLT5wYXJlbnQoKTsKICAgICAgICAgd2hpbGUg
KGxhc3RDaGlsZEhhc0NvbnRpbnVhdGlvbihsYXN0UGFyZW50KSkKLSAgICAgICAgICAgIGxhc3RQ
YXJlbnQgPSBlbmRPZkNvbnRpbnVhdGlvbnMobGFzdFBhcmVudC0+bGFzdENoaWxkKCkpLT5wYXJl
bnQoKTsKKyAgICAgICAgICAgIGxhc3RQYXJlbnQgPSBlbmRPZkNvbnRpbnVhdGlvbnMobGFzdFBh
cmVudC0+bGFzdENoaWxkU2xvdygpKS0+cGFyZW50KCk7CiAgICAgICAgIG5leHRTaWJsaW5nID0g
bGFzdFBhcmVudC0+bmV4dFNpYmxpbmcoKTsKICAgICB9CiAKQEAgLTQ0OSw3ICs0NTEsNyBAQCBS
ZW5kZXJPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6CiAgICAgICAgIHBhcmVudCA9
IHN0YXJ0T2ZDb250czsKICAgICAKICAgICAvLyBDYXNlIDM6IFRoZSBmaXJzdCBzaWJsaW5nIGlz
IHRoZSBiZWdpbm5pbmcgb2YgYSBjb250aW51YXRpb24gY2hhaW4uIEZpbmQgdGhlIG9yaWdpbiBv
ZiB0aGF0IGNvbnRpbnVhdGlvbi4KLSAgICBlbHNlIGlmIChwYXJlbnQgJiYgKGZpcnN0Q2hpbGQg
PSBwYXJlbnQtPmZpcnN0Q2hpbGQoKSkgJiYgZmlyc3RDaGlsZC0+bm9kZSgpKSB7CisgICAgZWxz
ZSBpZiAocGFyZW50ICYmIChmaXJzdENoaWxkID0gcGFyZW50LT5maXJzdENoaWxkU2xvdygpKSAm
JiBmaXJzdENoaWxkLT5ub2RlKCkpIHsKICAgICAgICAgLy8gR2V0IHRoZSBub2RlJ3MgcmVuZGVy
ZXIgYW5kIGZvbGxvdyB0aGF0IGNvbnRpbnVhdGlvbiBjaGFpbiB1bnRpbCB0aGUgZmlyc3QgY2hp
bGQgaXMgZm91bmQKICAgICAgICAgUmVuZGVyT2JqZWN0KiBub2RlUmVuZGVyRmlyc3RDaGlsZCA9
IGZpcnN0Q2hpbGQtPm5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICAgICAgd2hpbGUgKG5vZGVSZW5k
ZXJGaXJzdENoaWxkICE9IGZpcnN0Q2hpbGQpIHsKQEAgLTQ1OSw5ICs0NjEsMTAgQEAgUmVuZGVy
T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OgogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
Zmlyc3RDaGlsZCA9PSBwYXJlbnQtPmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgICAgIFJlbmRlck9i
amVjdCogcGFyZW50Rmlyc3RDaGlsZCA9IHBhcmVudC0+Zmlyc3RDaGlsZFNsb3coKTsKKyAgICAg
ICAgICAgIGlmIChmaXJzdENoaWxkID09IHBhcmVudEZpcnN0Q2hpbGQpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXJzdENoaWxkID0gcGFyZW50LT5maXJzdENoaWxkKCk7
CisgICAgICAgICAgICBmaXJzdENoaWxkID0gcGFyZW50Rmlyc3RDaGlsZDsKICAgICAgICAgICAg
IGlmICghZmlyc3RDaGlsZC0+bm9kZSgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgbm9kZVJlbmRlckZpcnN0Q2hpbGQgPSBmaXJzdENoaWxkLT5ub2RlKCktPnJlbmRlcmVy
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiAxNTYy
NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg5NCw4ICs4OTQsOCBAQCBib29sIENvbnRhaW5lck5vZGU6OmdldFVwcGVyTGVmdENv
cm5lcihGCiAgICAgLy8gZmluZCB0aGUgbmV4dCB0ZXh0L2ltYWdlIGNoaWxkLCB0byBnZXQgYSBw
b3NpdGlvbgogICAgIHdoaWxlIChvKSB7CiAgICAgICAgIHAgPSBvOwotICAgICAgICBpZiAoby0+
Zmlyc3RDaGlsZCgpKQotICAgICAgICAgICAgbyA9IG8tPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAg
aWYgKFJlbmRlck9iamVjdCogY2hpbGQgPSBvLT5maXJzdENoaWxkU2xvdygpKQorICAgICAgICAg
ICAgbyA9IGNoaWxkOwogICAgICAgICBlbHNlIGlmIChvLT5uZXh0U2libGluZygpKQogICAgICAg
ICAgICAgbyA9IG8tPm5leHRTaWJsaW5nKCk7CiAgICAgICAgIGVsc2UgewpAQCAtOTU0LDggKzk1
NCw4IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6Z2V0TG93ZXJSaWdodENvcm5lcigKIAogICAgIC8v
IGZpbmQgdGhlIGxhc3QgdGV4dC9pbWFnZSBjaGlsZCwgdG8gZ2V0IGEgcG9zaXRpb24KICAgICB3
aGlsZSAobykgewotICAgICAgICBpZiAoby0+bGFzdENoaWxkKCkpCi0gICAgICAgICAgICBvID0g
by0+bGFzdENoaWxkKCk7CisgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIGNoaWxkID0gby0+bGFz
dENoaWxkU2xvdygpKQorICAgICAgICAgICAgbyA9IGNoaWxkOwogICAgICAgICBlbHNlIGlmIChv
LT5wcmV2aW91c1NpYmxpbmcoKSkKICAgICAgICAgICAgIG8gPSBvLT5wcmV2aW91c1NpYmxpbmco
KTsKICAgICAgICAgZWxzZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHJldmlzaW9u
IDE1NjI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg1NCw3ICs4NTQsNyBAQCBzdGF0aWMgaW50IGJvdW5kaW5nQm94TG9naWNhbEhlaWdo
dChSZW5kCiBib29sIFBvc2l0aW9uOjpoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRz
V2l0aEhlaWdodChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewogICAgIFJlbmRlck9iamVjdCog
c3RvcCA9IHJlbmRlcmVyLT5uZXh0SW5QcmVPcmRlckFmdGVyQ2hpbGRyZW4oKTsKLSAgICBmb3Ig
KFJlbmRlck9iamVjdCAqbyA9IHJlbmRlcmVyLT5maXJzdENoaWxkKCk7IG8gJiYgbyAhPSBzdG9w
OyBvID0gby0+bmV4dEluUHJlT3JkZXIoKSkKKyAgICBmb3IgKFJlbmRlck9iamVjdCAqbyA9IHJl
bmRlcmVyLT5maXJzdENoaWxkU2xvdygpOyBvICYmIG8gIT0gc3RvcDsgbyA9IG8tPm5leHRJblBy
ZU9yZGVyKCkpCiAgICAgICAgIGlmIChvLT5ub25Qc2V1ZG9Ob2RlKCkpIHsKICAgICAgICAgICAg
IGlmICgoby0+aXNUZXh0KCkgJiYgYm91bmRpbmdCb3hMb2dpY2FsSGVpZ2h0KG8sIHRvUmVuZGVy
VGV4dChvKS0+bGluZXNCb3VuZGluZ0JveCgpKSkKICAgICAgICAgICAgICAgICB8fCAoby0+aXNM
aW5lQnJlYWsoKSAmJiBib3VuZGluZ0JveExvZ2ljYWxIZWlnaHQobywgdG9SZW5kZXJMaW5lQnJl
YWsobyktPmxpbmVzQm91bmRpbmdCb3goKSkpCkBAIC0xMTM0LDEwICsxMTM0LDEwIEBAIHZvaWQg
UG9zaXRpb246OmdldElubGluZUJveEFuZE9mZnNldChFQWYKIAogc3RhdGljIGJvb2wgaXNOb25U
ZXh0TGVhZkNoaWxkKFJlbmRlck9iamVjdCogb2JqZWN0KQogewotICAgIGlmIChvYmplY3QtPmZp
cnN0Q2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChvYmplY3QtPmlzVGV4
dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHRvUmVuZGVyRWxlbWVudChvYmpl
Y3QpLT5maXJzdENoaWxkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkocmV2
aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NDIsNyArNjQyLDcgQEAgc3RhdGljIGlubGluZSBSZW5kZXJU
ZXh0KiBmaXJzdFJlbmRlclRleAogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIEZJWE1FOiBT
aG91bGQgdGhpcyBjaGVjayBkZXNjZW5kZW50IG9iamVjdHM/Ci0gICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGN1cnJlbnQgPSBmaXJzdExldHRlci0+Zmlyc3RDaGlsZCgpOyBjdXJyZW50OyBjdXJyZW50
ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkgeworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJy
ZW50ID0gZmlyc3RMZXR0ZXItPmZpcnN0Q2hpbGRTbG93KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBj
dXJyZW50LT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChjdXJyZW50LT5pc1RleHQoKSkK
ICAgICAgICAgICAgIHJldHVybiB0b1JlbmRlclRleHQoY3VycmVudCk7CiAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDE1NjI3NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04OTYsNyArODk2LDcgQEAgYm9vbCBpc0VtcHR5VGFibGVDZWxsKGNvbnN0IE5vZGUqIG5vZGUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIENoZWNrIHRoYXQgdGhlIHRhYmxlIGNl
bGwgY29udGFpbnMgbm8gY2hpbGQgcmVuZGVyZXJzIGV4Y2VwdCBmb3IgcGVyaGFwcyBhIHNpbmds
ZSA8YnI+LgotICAgIFJlbmRlck9iamVjdCogY2hpbGRSZW5kZXJlciA9IHJlbmRlcmVyLT5maXJz
dENoaWxkKCk7CisgICAgUmVuZGVyT2JqZWN0KiBjaGlsZFJlbmRlcmVyID0gdG9SZW5kZXJFbGVt
ZW50KHJlbmRlcmVyKS0+Zmlyc3RDaGlsZCgpOwogICAgIGlmICghY2hpbGRSZW5kZXJlcikKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKCFjaGlsZFJlbmRlcmVyLT5pc0JSKCkpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVB
Z2VudC5jcHAJKHJldmlzaW9uIDE1NjI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQs
NyBAQCB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpnYXRoZXJMYXllCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBmb3IgKHJlbmRlcmVyID0gcmVuZGVyZXItPmZpcnN0Q2hpbGQo
KTsgcmVuZGVyZXI7IHJlbmRlcmVyID0gcmVuZGVyZXItPm5leHRTaWJsaW5nKCkpCisgICAgZm9y
IChyZW5kZXJlciA9IHJlbmRlcmVyLT5maXJzdENoaWxkU2xvdygpOyByZW5kZXJlcjsgcmVuZGVy
ZXIgPSByZW5kZXJlci0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdS
ZW5kZXJPYmplY3RIaWVyYXJjaHkoZXJyb3JTdHJpbmcsIHJlbmRlcmVyLCBsYXllcnMpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0lGcmFtZVNoaW1TdXBwb3J0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0lGcmFtZVNoaW1TdXBwb3J0LmNwcAko
cmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9JRnJhbWVTaGltU3Vw
cG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBzdGF0aWMgYm9vbCBp
ZnJhbWVJc0Fib3ZlUGx1Z2luKGNvbnN0IFZlCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgQVNTRVJUKHBhcmVudCA9PSBybzItPnBhcmVudCgpKTsKIAotICAgICAg
ICAgICAgZm9yIChjb25zdCBSZW5kZXJPYmplY3QqIHJvID0gcGFyZW50LT5maXJzdENoaWxkKCk7
IHJvOyBybyA9IHJvLT5uZXh0U2libGluZygpKSB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IFJl
bmRlck9iamVjdCogcm8gPSBwYXJlbnQtPmZpcnN0Q2hpbGRTbG93KCk7IHJvOyBybyA9IHJvLT5u
ZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHJvID09IHJvMSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGlmIChybyA9PSBybzIp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3Bw
CShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJs
ZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBAQCBpbnQgRml4ZWRU
YWJsZUxheW91dDo6Y2FsY1dpZHRoQXJyYXkoKQogICAgIHVuc2lnbmVkIGN1cnJlbnRDb2x1bW4g
PSAwOwogCiAgICAgUmVuZGVyT2JqZWN0KiBmaXJzdFJvdyA9IHNlY3Rpb24tPmZpcnN0Q2hpbGQo
KTsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdFJvdy0+Zmlyc3RDaGlsZCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjaGlsZCA9IGZpcnN0Um93LT5maXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoIWNoaWxkLT5pc1RhYmxlQ2Vs
bCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDE1NjI3NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY4LDcg
KzI2OCw3IEBAIFJlbmRlckxpbmVCb3hMaXN0JiBJbmxpbmVGbG93Qm94OjpyZW5kZXIKICAgICBy
ZXR1cm4gdG9SZW5kZXJJbmxpbmUocmVuZGVyZXIoKSkubGluZUJveGVzKCk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgYm9vbCBpc0xhc3RDaGlsZEZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogYW5jZXN0
b3IsIFJlbmRlck9iamVjdCogY2hpbGQpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNMYXN0Q2hpbGRG
b3JSZW5kZXJlcihSZW5kZXJFbGVtZW50KiBhbmNlc3RvciwgUmVuZGVyT2JqZWN0KiBjaGlsZCkK
IHsKICAgICBpZiAoIWNoaWxkKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNzcsNyArMjc3
LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzTGFzdENoaWxkRm9yUmVuZGVyZQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIFJlbmRlck9iamVjdCogY3VyciA9IGNoaWxkOwotICAgIFJlbmRl
ck9iamVjdCogcGFyZW50ID0gY3Vyci0+cGFyZW50KCk7CisgICAgUmVuZGVyRWxlbWVudCogcGFy
ZW50ID0gY3Vyci0+cGFyZW50KCk7CiAgICAgd2hpbGUgKHBhcmVudCAmJiAoIXBhcmVudC0+aXNS
ZW5kZXJCbG9jaygpIHx8IHBhcmVudC0+aXNJbmxpbmUoKSkpIHsKICAgICAgICAgaWYgKHBhcmVu
dC0+bGFzdENoaWxkKCkgIT0gY3VycikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVJdGVyYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVJdGVyYXRvci5oCShyZXZpc2lvbiAxNTYy
NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lSXRlcmF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTgwLDcgKzE4MCw3IEBAIHN0YXRpYyBib29sIGlzRW1wdHlJbmxpbmUoUmVu
ZGVyT2JqZWN0KiAKICAgICBpZiAoIW9iamVjdC0+aXNSZW5kZXJJbmxpbmUoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBvYmplY3QtPmZp
cnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpIHsKKyAgICBmb3Ig
KFJlbmRlck9iamVjdCogY3VyciA9IHRvUmVuZGVyRWxlbWVudChvYmplY3QpLT5maXJzdENoaWxk
KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChjdXJy
LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgaWYgKGN1cnItPmlzVGV4dCgpICYmIHRvUmVuZGVyVGV4dChjdXJyKS0+aXNB
bGxDb2xsYXBzaWJsZVdoaXRlc3BhY2UoKSkKQEAgLTIwNiw3ICsyMDYsNyBAQCBzdGF0aWMgaW5s
aW5lIFJlbmRlck9iamVjdCogYmlkaU5leHRTaGFyCiAgICAgd2hpbGUgKGN1cnJlbnQpIHsKICAg
ICAgICAgbmV4dCA9IDA7CiAgICAgICAgIGlmICghb2xkRW5kT2ZJbmxpbmUgJiYgIWlzSXRlcmF0
b3JUYXJnZXQoY3VycmVudCkpIHsKLSAgICAgICAgICAgIG5leHQgPSBjdXJyZW50LT5maXJzdENo
aWxkKCk7CisgICAgICAgICAgICBuZXh0ID0gdG9SZW5kZXJFbGVtZW50KGN1cnJlbnQpLT5maXJz
dENoaWxkKCk7CiAgICAgICAgICAgICBub3RpZnlPYnNlcnZlckVudGVyZWRPYmplY3Qob2JzZXJ2
ZXIsIG5leHQpOwogICAgICAgICB9CiAKQEAgLTI3Myw3ICsyNzMsNyBAQCBzdGF0aWMgaW5saW5l
IFJlbmRlck9iamVjdCogYmlkaU5leHRJbmNsCiAgICAgcmV0dXJuIGJpZGlOZXh0U2hhcmVkKHJv
b3QsIGN1cnJlbnQsIG9ic2VydmVyLCBJbmNsdWRlRW1wdHlJbmxpbmVzLCBlbmRPZklubGluZVB0
cik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBiaWRpRmlyc3RTa2lwcGluZ0Vt
cHR5SW5saW5lcyhSZW5kZXJPYmplY3QqIHJvb3QsIElubGluZUJpZGlSZXNvbHZlciogcmVzb2x2
ZXIgPSAwKQorc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGJpZGlGaXJzdFNraXBwaW5nRW1w
dHlJbmxpbmVzKFJlbmRlckVsZW1lbnQqIHJvb3QsIElubGluZUJpZGlSZXNvbHZlciogcmVzb2x2
ZXIgPSAwKQogewogICAgIFJlbmRlck9iamVjdCogbyA9IHJvb3QtPmZpcnN0Q2hpbGQoKTsKICAg
ICBpZiAoIW8pCkBAIC0zMDEsNyArMzAxLDcgQEAgc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3Qq
IGJpZGlGaXJzdFNraQogfQogCiAvLyBGSVhNRTogVGhpcyBtZXRob2QgbmVlZHMgdG8gYmUgcmVu
YW1lZCB3aGVuIGJpZGlOZXh0IGZpbmRzIGEgZ29vZCBuYW1lLgotc3RhdGljIGlubGluZSBSZW5k
ZXJPYmplY3QqIGJpZGlGaXJzdEluY2x1ZGluZ0VtcHR5SW5saW5lcyhSZW5kZXJPYmplY3QqIHJv
b3QpCitzdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogYmlkaUZpcnN0SW5jbHVkaW5nRW1wdHlJ
bmxpbmVzKFJlbmRlckVsZW1lbnQqIHJvb3QpCiB7CiAgICAgUmVuZGVyT2JqZWN0KiBvID0gcm9v
dC0+Zmlyc3RDaGlsZCgpOwogICAgIC8vIElmIGVpdGhlciB0aGVyZSBhcmUgbm8gY2hpbGRyZW4g
dG8gd2Fsaywgb3IgdGhlIGZpcnN0IG9uZSBpcyBjb3JyZWN0CkBAIC0zMjQsNyArMzI0LDcgQEAg
aW5saW5lIHZvaWQgSW5saW5lSXRlcmF0b3I6OmZhc3RJbmNyZW1lbgogLy8gaXQgc2hvdWxkbid0
IHVzZSBmdW5jdGlvbnMgY2FsbGVkIGJpZGlGaXJzdCBhbmQgYmlkaU5leHQuCiBjbGFzcyBJbmxp
bmVXYWxrZXIgewogcHVibGljOgotICAgIElubGluZVdhbGtlcihSZW5kZXJPYmplY3QqIHJvb3Qp
CisgICAgSW5saW5lV2Fsa2VyKFJlbmRlckVsZW1lbnQqIHJvb3QpCiAgICAgICAgIDogbV9yb290
KHJvb3QpCiAgICAgICAgICwgbV9jdXJyZW50KDApCiAgICAgICAgICwgbV9hdEVuZE9mSW5saW5l
KGZhbHNlKQpAQCAtMzMzLDcgKzMzMyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9jdXJyZW50ID0g
YmlkaUZpcnN0SW5jbHVkaW5nRW1wdHlJbmxpbmVzKG1fcm9vdCk7CiAgICAgfQogCi0gICAgUmVu
ZGVyT2JqZWN0KiByb290KCkgeyByZXR1cm4gbV9yb290OyB9CisgICAgUmVuZGVyRWxlbWVudCog
cm9vdCgpIHsgcmV0dXJuIG1fcm9vdDsgfQogICAgIFJlbmRlck9iamVjdCogY3VycmVudCgpIHsg
cmV0dXJuIG1fY3VycmVudDsgfQogCiAgICAgYm9vbCBhdEVuZE9mSW5saW5lKCkgeyByZXR1cm4g
bV9hdEVuZE9mSW5saW5lOyB9CkBAIC0zNDYsNyArMzQ2LDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50OwogICAgIH0KIHByaXZhdGU6Ci0gICAgUmVuZGVyT2JqZWN0KiBtX3Jv
b3Q7CisgICAgUmVuZGVyRWxlbWVudCogbV9yb290OwogICAgIFJlbmRlck9iamVjdCogbV9jdXJy
ZW50OwogICAgIGJvb2wgbV9hdEVuZE9mSW5saW5lOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTU2Mjc4KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3OCw3
ICsxMDc4LDggQEAgc3RhdGljIGJvb2wgY2FuTWVyZ2VDb250aWd1b3VzQW5vbnltb3VzQgogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBpc24ndCByZXF1
aXJlZCB3aGVuIGlubGluZSBydW4taW5zIGNhbid0IGJlIHNwbGl0IGludG8gY29udGludWF0aW9u
cy4KLSAgICBpZiAocHJldiAmJiBwcmV2LT5maXJzdENoaWxkKCkgJiYgcHJldi0+Zmlyc3RDaGls
ZCgpLT5pc0lubGluZSgpICYmIHByZXYtPmZpcnN0Q2hpbGQoKS0+aXNSdW5JbigpKQorICAgIFJl
bmRlck9iamVjdCogY2hpbGQgPSBwcmV2ID8gcHJldi0+Zmlyc3RDaGlsZFNsb3coKSA6IG51bGxw
dHI7CisgICAgaWYgKGNoaWxkICYmIGNoaWxkLT5pc0lubGluZSgpICYmIGNoaWxkLT5pc1J1bklu
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICgocHJldiAmJiAocHJldi0+aXNS
dWJ5UnVuKCkgfHwgcHJldi0+aXNSdWJ5QmFzZSgpKSkKQEAgLTUwODAsNyArNTA4MSw3IEBAIFJl
bmRlck9iamVjdCogSW5saW5lTWluTWF4SXRlcmF0b3I6Om5leHQKICAgICAgICAgaWYgKCFvbGRF
bmRPZklubGluZSAmJgogICAgICAgICAgICAgKGN1cnJlbnQgPT0gcGFyZW50IHx8CiAgICAgICAg
ICAgICAgKCFjdXJyZW50LT5pc0Zsb2F0aW5nKCkgJiYgIWN1cnJlbnQtPmlzUmVwbGFjZWQoKSAm
JiAhY3VycmVudC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpKSkKLSAgICAgICAgICAgIHJlc3Vs
dCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGN1cnJlbnQt
PmZpcnN0Q2hpbGRTbG93KCk7CiAgICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICAgICAv
LyBXZSBoaXQgdGhlIGVuZCBvZiBvdXIgaW5saW5lLiAoSXQgd2FzIGVtcHR5LCBlLmcuLCA8c3Bh
bj48L3NwYW4+LikKICAgICAgICAgICAgIGlmICghb2xkRW5kT2ZJbmxpbmUgJiYgY3VycmVudC0+
aXNSZW5kZXJJbmxpbmUoKSkgewpAQCAtNTc0NSw3ICs1NzQ2LDcgQEAgUmVuZGVyQmxvY2sqIFJl
bmRlckJsb2NrOjpmaXJzdExpbmVCbG9jawogICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHdoZW4g
YnV0dG9ucyBhcmUgaW1wbGVtZW50ZWQgd2l0aCBhbGlnbi1pdGVtcyBpbnN0ZWFkCiAgICAgICAg
IC8vIG9mIGZsZXhib3guCiAgICAgICAgIGlmIChmaXJzdExpbmVCbG9jay0+aXNSZXBsYWNlZCgp
IHx8IGZpcnN0TGluZUJsb2NrLT5pc0Zsb2F0aW5nKCkKLSAgICAgICAgICAgIHx8ICFwYXJlbnRC
bG9jayB8fCBwYXJlbnRCbG9jay0+Zmlyc3RDaGlsZCgpICE9IGZpcnN0TGluZUJsb2NrIHx8ICgh
cGFyZW50QmxvY2stPmlzUmVuZGVyQmxvY2tGbG93KCkgJiYgIXBhcmVudEJsb2NrLT5pc1JlbmRl
ckJ1dHRvbigpKSkKKyAgICAgICAgICAgIHx8ICFwYXJlbnRCbG9jayB8fCBwYXJlbnRCbG9jay0+
Zmlyc3RDaGlsZFNsb3coKSAhPSBmaXJzdExpbmVCbG9jayB8fCAoIXBhcmVudEJsb2NrLT5pc1Jl
bmRlckJsb2NrRmxvdygpICYmICFwYXJlbnRCbG9jay0+aXNSZW5kZXJCdXR0b24oKSkpCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
cGFyZW50QmxvY2stPmlzUmVuZGVyQmxvY2soKSk7CiAgICAgICAgIGZpcnN0TGluZUJsb2NrID0g
dG9SZW5kZXJCbG9jayhwYXJlbnRCbG9jayk7CkBAIC01Nzg1LDkgKzU3ODYsOSBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2hvdWxkU2tpcEZvckZpcnN0TGV0CiAgICAgcmV0dXJuIGlzU3BhY2VPck5l
d2xpbmUoYykgfHwgYyA9PSBub0JyZWFrU3BhY2UgfHwgaXNQdW5jdHVhdGlvbkZvckZpcnN0TGV0
dGVyKGMpOwogfQogCi1zdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogZmluZEZpcnN0TGV0dGVy
QmxvY2soUmVuZGVyQmxvY2sqIHN0YXJ0KQorc3RhdGljIGlubGluZSBSZW5kZXJFbGVtZW50KiBm
aW5kRmlyc3RMZXR0ZXJCbG9jayhSZW5kZXJCbG9jayogc3RhcnQpCiB7Ci0gICAgUmVuZGVyT2Jq
ZWN0KiBmaXJzdExldHRlckJsb2NrID0gc3RhcnQ7CisgICAgUmVuZGVyRWxlbWVudCogZmlyc3RM
ZXR0ZXJCbG9jayA9IHN0YXJ0OwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIC8vIFdlIGlu
Y2x1ZGUgaXNSZW5kZXJCdXR0b24gaW4gdGhlc2UgdHdvIGNoZWNrcyBiZWNhdXNlIGJ1dHRvbnMg
YXJlCiAgICAgICAgIC8vIGltcGxlbWVudGVkIHVzaW5nIGZsZXggYm94IGJ1dCBzaG91bGQgc3Rp
bGwgc3VwcG9ydCBmaXJzdC1sZXR0ZXIuCkBAIC01ODAxLDkgKzU4MDIsOSBAQCBzdGF0aWMgaW5s
aW5lIFJlbmRlck9iamVjdCogZmluZEZpcnN0TGV0CiAgICAgICAgIGlmIChjYW5IYXZlRmlyc3RM
ZXR0ZXJSZW5kZXJlcikKICAgICAgICAgICAgIHJldHVybiBmaXJzdExldHRlckJsb2NrOwogCi0g
ICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50QmxvY2sgPSBmaXJzdExldHRlckJsb2NrLT5wYXJl
bnQoKTsKLSAgICAgICAgaWYgKGZpcnN0TGV0dGVyQmxvY2stPmlzUmVwbGFjZWQoKSB8fCAhcGFy
ZW50QmxvY2sgfHwgcGFyZW50QmxvY2stPmZpcnN0Q2hpbGQoKSAhPSBmaXJzdExldHRlckJsb2Nr
IHx8IAotICAgICAgICAgICAgKCFwYXJlbnRCbG9jay0+aXNSZW5kZXJCbG9ja0Zsb3coKSAmJiAh
cGFyZW50QmxvY2stPmlzUmVuZGVyQnV0dG9uKCkpKQorICAgICAgICBSZW5kZXJFbGVtZW50KiBw
YXJlbnRCbG9jayA9IGZpcnN0TGV0dGVyQmxvY2stPnBhcmVudCgpOworICAgICAgICBpZiAoZmly
c3RMZXR0ZXJCbG9jay0+aXNSZXBsYWNlZCgpIHx8ICFwYXJlbnRCbG9jayB8fCBwYXJlbnRCbG9j
ay0+Zmlyc3RDaGlsZCgpICE9IGZpcnN0TGV0dGVyQmxvY2sKKyAgICAgICAgICAgIHx8ICghcGFy
ZW50QmxvY2stPmlzUmVuZGVyQmxvY2tGbG93KCkgJiYgIXBhcmVudEJsb2NrLT5pc1JlbmRlckJ1
dHRvbigpKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBmaXJzdExldHRlckJsb2Nr
ID0gcGFyZW50QmxvY2s7CiAgICAgfSAKQEAgLTU5NDQsNyArNTk0NSw3IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OnVwZGF0ZUZpcnN0TGV0dGVyKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRHJp
bGwgaW50byBpbmxpbmVzIGxvb2tpbmcgZm9yIG91ciBmaXJzdCB0ZXh0IGNoaWxkLgotICAgIFJl
bmRlck9iamVjdCogY3VyckNoaWxkID0gZmlyc3RMZXR0ZXJCbG9jay0+Zmlyc3RDaGlsZCgpOwor
ICAgIFJlbmRlck9iamVjdCogY3VyckNoaWxkID0gZmlyc3RMZXR0ZXJCbG9jay0+Zmlyc3RDaGls
ZFNsb3coKTsKICAgICB3aGlsZSAoY3VyckNoaWxkKSB7CiAgICAgICAgIGlmIChjdXJyQ2hpbGQt
PmlzVGV4dCgpKQogICAgICAgICAgICAgYnJlYWs7CkBAIC01OTUyLDcgKzU5NTMsNyBAQCB2b2lk
IFJlbmRlckJsb2NrOjp1cGRhdGVGaXJzdExldHRlcigpCiAgICAgICAgICAgICBjdXJyQ2hpbGQg
PSBjdXJyQ2hpbGQtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgIGVsc2UgaWYgKGN1cnJDaGlsZC0+
aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7CiAgICAgICAgICAgICBpZiAoY3Vy
ckNoaWxkLT5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBGSVJTVF9MRVRURVIpIHsKLSAgICAgICAg
ICAgICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAg
ICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPmZpcnN0Q2hpbGRTbG93KCk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjdXJyQ2hpbGQgPSBjdXJy
Q2hpbGQtPm5leHRTaWJsaW5nKCk7CkBAIC01OTYxLDkgKzU5NjIsOSBAQCB2b2lkIFJlbmRlckJs
b2NrOjp1cGRhdGVGaXJzdExldHRlcigpCiAgICAgICAgIGVsc2UgaWYgKGN1cnJDaGlsZC0+c3R5
bGUoKS0+aGFzUHNldWRvU3R5bGUoRklSU1RfTEVUVEVSKSAmJiBjdXJyQ2hpbGQtPmNhbkhhdmVH
ZW5lcmF0ZWRDaGlsZHJlbigpKSAgewogICAgICAgICAgICAgLy8gV2UgZm91bmQgYSBsb3dlci1s
ZXZlbCBub2RlIHdpdGggZmlyc3QtbGV0dGVyLCB3aGljaCBzdXBlcnNlZGVzIHRoZSBoaWdoZXIt
bGV2ZWwgc3R5bGUKICAgICAgICAgICAgIGZpcnN0TGV0dGVyQmxvY2sgPSBjdXJyQ2hpbGQ7Ci0g
ICAgICAgICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAg
ICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+Zmlyc3RDaGlsZFNsb3coKTsKICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPmZpcnN0Q2hpbGQoKTsKKyAg
ICAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+Zmlyc3RDaGlsZFNsb3coKTsKICAgICB9
CiAKICAgICBpZiAoIWN1cnJDaGlsZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCShyZXZpc2lvbiAxNTYyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA4MiwxNSArNDA4MiwxNCBAQCBWaXNp
YmxlUG9zaXRpb24gUmVuZGVyQm94Ojpwb3NpdGlvbkZvclBvCiAgICAgICAgIGFkanVzdGVkUG9p
bnQubW92ZUJ5KGxvY2F0aW9uKCkpOwogCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIHJlbmRlck9i
amVjdCA9IGZpcnN0Q2hpbGQoKTsgcmVuZGVyT2JqZWN0OyByZW5kZXJPYmplY3QgPSByZW5kZXJP
YmplY3QtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKCghcmVuZGVyT2JqZWN0LT5maXJz
dENoaWxkKCkgJiYgIXJlbmRlck9iamVjdC0+aXNJbmxpbmUoKSAmJiAhcmVuZGVyT2JqZWN0LT5p
c1JlbmRlckJsb2NrRmxvdygpICkKLSAgICAgICAgICAgIHx8IHJlbmRlck9iamVjdC0+c3R5bGUo
KS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgCiAgICAgICAgIGlmICghcmVuZGVyT2JqZWN0LT5pc0JveCgpKQogICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIAogICAgICAgICBSZW5kZXJCb3gqIHJlbmRlcmVyID0gdG9SZW5kZXJC
b3gocmVuZGVyT2JqZWN0KTsKIAorICAgICAgICBpZiAoKCFyZW5kZXJlci0+Zmlyc3RDaGlsZCgp
ICYmICFyZW5kZXJlci0+aXNJbmxpbmUoKSAmJiAhcmVuZGVyZXItPmlzUmVuZGVyQmxvY2tGbG93
KCkgKQorICAgICAgICAgICAgfHwgcmVuZGVyZXItPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBW
SVNJQkxFKQorICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAgTGF5b3V0VW5pdCB0b3Ag
PSByZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyByZW5kZXJlci0+cGFkZGluZ1RvcCgpICsgKGlzVGFi
bGVSb3coKSA/IExheW91dFVuaXQoKSA6IHJlbmRlcmVyLT55KCkpOwogICAgICAgICBMYXlvdXRV
bml0IGJvdHRvbSA9IHRvcCArIHJlbmRlcmVyLT5jb250ZW50SGVpZ2h0KCk7CiAgICAgICAgIExh
eW91dFVuaXQgbGVmdCA9IHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5kZXJlci0+cGFkZGlu
Z0xlZnQoKSArIChpc1RhYmxlUm93KCkgPyBMYXlvdXRVbml0KCkgOiByZW5kZXJlci0+eCgpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAJKHJldmlz
aW9uIDE1NjI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzI2LDcgKzMyNiw3IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6
cmVtb3ZlQ2hpbGRJbnRlcm5hbCgKICAgICAgICAgY2FjaGUtPmNoaWxkcmVuQ2hhbmdlZCh0aGlz
KTsKIH0KIAotc3RhdGljIHZvaWQgYWRkTGF5ZXJzKFJlbmRlck9iamVjdCogb2JqLCBSZW5kZXJM
YXllciogcGFyZW50TGF5ZXIsIFJlbmRlckVsZW1lbnQqJiBuZXdPYmplY3QsIFJlbmRlckxheWVy
KiYgYmVmb3JlQ2hpbGQpCitzdGF0aWMgdm9pZCBhZGRMYXllcnMoUmVuZGVyRWxlbWVudCogb2Jq
LCBSZW5kZXJMYXllciogcGFyZW50TGF5ZXIsIFJlbmRlckVsZW1lbnQqJiBuZXdPYmplY3QsIFJl
bmRlckxheWVyKiYgYmVmb3JlQ2hpbGQpCiB7CiAgICAgaWYgKG9iai0+aGFzTGF5ZXIoKSkgewog
ICAgICAgICBpZiAoIWJlZm9yZUNoaWxkICYmIG5ld09iamVjdCkgewpAQCAtMzQwLDggKzM0MCwx
MCBAQCBzdGF0aWMgdm9pZCBhZGRMYXllcnMoUmVuZGVyT2JqZWN0KiBvYmosCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IG9iai0+Zmlyc3RD
aGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgYWRkTGF5
ZXJzKGN1cnIsIHBhcmVudExheWVyLCBuZXdPYmplY3QsIGJlZm9yZUNoaWxkKTsKKyAgICBmb3Ig
KFJlbmRlck9iamVjdCogY3VycmVudCA9IG9iai0+Zmlyc3RDaGlsZCgpOyBjdXJyZW50OyBjdXJy
ZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoY3VycmVudC0+aXNS
ZW5kZXJFbGVtZW50KCkpCisgICAgICAgICAgICBhZGRMYXllcnModG9SZW5kZXJFbGVtZW50KGN1
cnJlbnQpLCBwYXJlbnRMYXllciwgbmV3T2JqZWN0LCBiZWZvcmVDaGlsZCk7CisgICAgfQogfQog
CiB2b2lkIFJlbmRlckVsZW1lbnQ6OmFkZExheWVycyhSZW5kZXJMYXllciogcGFyZW50TGF5ZXIp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgJKHJldmlzaW9u
IDE1NjI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDggQEAgcHVibGljOgogICAgIEVsZW1lbnQqIG5vblBz
ZXVkb0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0b0VsZW1lbnQoUmVuZGVyT2JqZWN0Ojpub25Q
c2V1ZG9Ob2RlKCkpOyB9CiAgICAgRWxlbWVudCogZ2VuZXJhdGluZ0VsZW1lbnQoKSBjb25zdCB7
IHJldHVybiB0b0VsZW1lbnQoUmVuZGVyT2JqZWN0OjpnZW5lcmF0aW5nTm9kZSgpKTsgfQogCi0g
ICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQoKSBjb25zdCBGSU5BTCB7IHJldHVy
biBtX2ZpcnN0Q2hpbGQ7IH0KLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogbGFzdENoaWxkKCkg
Y29uc3QgRklOQUwgeyByZXR1cm4gbV9sYXN0Q2hpbGQ7IH0KKyAgICBSZW5kZXJPYmplY3QqIGZp
cnN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0Q2hpbGQ7IH0KKyAgICBSZW5kZXJPYmpl
Y3QqIGxhc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdENoaWxkOyB9CiAKICAgICB2aXJ0
dWFsIGJvb2wgaXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVj
dCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKQEAgLTc5LDYgKzc5
LDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBub25Qc2V1ZG9Ob2RlKCkgY29uc3QgV1RGX0RFTEVU
RURfRlVOQ1RJT047CiAgICAgdm9pZCBnZW5lcmF0aW5nTm9kZSgpIGNvbnN0IFdURl9ERUxFVEVE
X0ZVTkNUSU9OOwogICAgIHZvaWQgaXNUZXh0KCkgY29uc3QgV1RGX0RFTEVURURfRlVOQ1RJT047
CisgICAgdm9pZCBpc1JlbmRlckVsZW1lbnQoKSBjb25zdCBXVEZfREVMRVRFRF9GVU5DVElPTjsK
KworICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkU2xvdygpIGNvbnN0IHsgcmV0
dXJuIGZpcnN0Q2hpbGQoKTsgfQorICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGRT
bG93KCkgY29uc3QgeyByZXR1cm4gbGFzdENoaWxkKCk7IH0KIAogICAgIFJlbmRlck9iamVjdCog
bV9maXJzdENoaWxkOwogICAgIFJlbmRlck9iamVjdCogbV9sYXN0Q2hpbGQ7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVCYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVCYXNlLmNwcAkocmV2aXNpb24gMTU2
Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lQmFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBSZW5kZXJGcmFtZUJhc2U6OmxheW91
dFdpdGhGbGF0dGVuaQogCiAgICAgQVNTRVJUKCFjaGlsZEZyYW1lVmlldy0+bGF5b3V0UGVuZGlu
ZygpKTsKICAgICBBU1NFUlQoIWNoaWxkUm9vdC0+bmVlZHNMYXlvdXQoKSk7Ci0gICAgQVNTRVJU
KCFjaGlsZFJvb3QtPmZpcnN0Q2hpbGQoKSB8fCAhY2hpbGRSb290LT5maXJzdENoaWxkKCktPmZp
cnN0Q2hpbGQoKSB8fCAhY2hpbGRSb290LT5maXJzdENoaWxkKCktPmZpcnN0Q2hpbGQoKS0+bmVl
ZHNMYXlvdXQoKSk7CisgICAgQVNTRVJUKCFjaGlsZFJvb3QtPmZpcnN0Q2hpbGQoKSB8fCAhY2hp
bGRSb290LT5maXJzdENoaWxkKCktPmZpcnN0Q2hpbGRTbG93KCkgfHwgIWNoaWxkUm9vdC0+Zmly
c3RDaGlsZCgpLT5maXJzdENoaWxkU2xvdygpLT5uZWVkc0xheW91dCgpKTsKIAogICAgIHNldE5l
ZWRzTGF5b3V0KGZhbHNlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAkocmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzOCw4ICsxMTM4LDkgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6dXBkYXRlRGVzY2VuZGFudERlcGVuZAogICAgICAgICAgICAgICAgICAg
ICBtX2hhc1Zpc2libGVDb250ZW50ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChyLT5maXJzdENoaWxkKCkg
JiYgIXItPmhhc0xheWVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHIgPSByLT5maXJzdENoaWxk
KCk7CisgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBjaGlsZDsKKyAgICAgICAgICAgICAg
ICBpZiAoIXItPmhhc0xheWVyKCkgJiYgKGNoaWxkID0gci0+Zmlyc3RDaGlsZFNsb3coKSkpCisg
ICAgICAgICAgICAgICAgICAgIHIgPSBjaGlsZDsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChy
LT5uZXh0U2libGluZygpKQogICAgICAgICAgICAgICAgICAgICByID0gci0+bmV4dFNpYmxpbmco
KTsKICAgICAgICAgICAgICAgICBlbHNlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0SXRlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RJdGVtLmNwcAkocmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDcg
KzI2MCw3IEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06OnVwZGF0ZVZhbHVlKCkKICAgICB9CiB9CiAK
LXN0YXRpYyBSZW5kZXJPYmplY3QqIGZpcnN0Tm9uTWFya2VyQ2hpbGQoUmVuZGVyT2JqZWN0KiBw
YXJlbnQpCitzdGF0aWMgUmVuZGVyT2JqZWN0KiBmaXJzdE5vbk1hcmtlckNoaWxkKFJlbmRlckJs
b2NrKiBwYXJlbnQpCiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZXN1bHQgPSBwYXJlbnQtPmZpcnN0
Q2hpbGQoKTsKICAgICB3aGlsZSAocmVzdWx0ICYmIHJlc3VsdC0+aXNMaXN0TWFya2VyKCkpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24g
MTU2Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxNSw3ICsyMTUsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6c2V0Rmxv
d1RocmVhZFN0YXRlSW5jCiB7CiAgICAgc2V0Rmxvd1RocmVhZFN0YXRlKHN0YXRlKTsKIAotICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBm
aXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewog
ICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgYSBmcmFnbWVudGF0aW9uIGNvbnRleHQgaXQgYWxy
ZWFkeSB1cGRhdGVkIHRoZSBkZXNjZW5kYW50cyBmbGFnIGFjY29yZGluZ2x5LgogICAgICAgICBp
ZiAoY2hpbGQtPmlzUmVuZGVyRmxvd1RocmVhZCgpKQogICAgICAgICAgICAgY29udGludWU7CkBA
IC0yNDQsNyArMjQ0LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnJlbW92ZUZyb21QYXJlbnQoKQog
CiBSZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6bmV4dEluUHJlT3JkZXIoKSBjb25zdAogewot
ICAgIGlmIChSZW5kZXJPYmplY3QqIG8gPSBmaXJzdENoaWxkKCkpCisgICAgaWYgKFJlbmRlck9i
amVjdCogbyA9IGZpcnN0Q2hpbGRTbG93KCkpCiAgICAgICAgIHJldHVybiBvOwogCiAgICAgcmV0
dXJuIG5leHRJblByZU9yZGVyQWZ0ZXJDaGlsZHJlbigpOwpAQCAtMjY2LDcgKzI2Niw3IEBAIFJl
bmRlck9iamVjdCogUmVuZGVyT2JqZWN0OjpuZXh0SW5QcmVPcmQKIAogUmVuZGVyT2JqZWN0KiBS
ZW5kZXJPYmplY3Q6Om5leHRJblByZU9yZGVyKGNvbnN0IFJlbmRlck9iamVjdCogc3RheVdpdGhp
bikgY29uc3QKIHsKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiBvID0gZmlyc3RDaGlsZCgpKQorICAg
IGlmIChSZW5kZXJPYmplY3QqIG8gPSBmaXJzdENoaWxkU2xvdygpKQogICAgICAgICByZXR1cm4g
bzsKIAogICAgIHJldHVybiBuZXh0SW5QcmVPcmRlckFmdGVyQ2hpbGRyZW4oc3RheVdpdGhpbik7
CkBAIC0yOTAsOCArMjkwLDggQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6Om5leHRJblBy
ZU9yZAogUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6OnByZXZpb3VzSW5QcmVPcmRlcigpIGNv
bnN0CiB7CiAgICAgaWYgKFJlbmRlck9iamVjdCogbyA9IHByZXZpb3VzU2libGluZygpKSB7Ci0g
ICAgICAgIHdoaWxlIChvLT5sYXN0Q2hpbGQoKSkKLSAgICAgICAgICAgIG8gPSBvLT5sYXN0Q2hp
bGQoKTsKKyAgICAgICAgd2hpbGUgKFJlbmRlck9iamVjdCogbGFzdCA9IG8tPmxhc3RDaGlsZFNs
b3coKSkKKyAgICAgICAgICAgIG8gPSBsYXN0OwogICAgICAgICByZXR1cm4gbzsKICAgICB9CiAK
QEAgLTMwOCw3ICszMDgsNyBAQCBSZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6cHJldmlvdXNJ
blByCiAKIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0OjpjaGlsZEF0KHVuc2lnbmVkIGluZGV4
KSBjb25zdAogewotICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7CisgICAg
UmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGRTbG93KCk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgY2hpbGQgJiYgaSA8IGluZGV4OyBpKyspCiAgICAgICAgIGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCk7CiAgICAgcmV0dXJuIGNoaWxkOwpAQCAtMzE2LDEwICszMTYsMTAgQEAg
UmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6OmNoaWxkQXQodW5zaQogCiBSZW5kZXJPYmplY3Qq
IFJlbmRlck9iamVjdDo6Zmlyc3RMZWFmQ2hpbGQoKSBjb25zdAogewotICAgIFJlbmRlck9iamVj
dCogciA9IGZpcnN0Q2hpbGQoKTsKKyAgICBSZW5kZXJPYmplY3QqIHIgPSBmaXJzdENoaWxkU2xv
dygpOwogICAgIHdoaWxlIChyKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogbiA9IDA7Ci0gICAg
ICAgIG4gPSByLT5maXJzdENoaWxkKCk7CisgICAgICAgIG4gPSByLT5maXJzdENoaWxkU2xvdygp
OwogICAgICAgICBpZiAoIW4pCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgciA9IG47CkBA
IC0zMjksMTAgKzMyOSwxMCBAQCBSZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6Zmlyc3RMZWFm
Q2hpCiAKIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0OjpsYXN0TGVhZkNoaWxkKCkgY29uc3QK
IHsKLSAgICBSZW5kZXJPYmplY3QqIHIgPSBsYXN0Q2hpbGQoKTsKKyAgICBSZW5kZXJPYmplY3Qq
IHIgPSBsYXN0Q2hpbGRTbG93KCk7CiAgICAgd2hpbGUgKHIpIHsKICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBuID0gMDsKLSAgICAgICAgbiA9IHItPmxhc3RDaGlsZCgpOworICAgICAgICBuID0gci0+
bGFzdENoaWxkU2xvdygpOwogICAgICAgICBpZiAoIW4pCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgciA9IG47CkBAIC0xMjI4LDcgKzEyMjgsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6YWRk
QWJzb2x1dGVSZWN0Rm9yTGF5CiB7CiAgICAgaWYgKGhhc0xheWVyKCkpCiAgICAgICAgIHJlc3Vs
dC51bml0ZShhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdElnbm9yaW5nVHJhbnNmb3JtcygpKTsKLSAg
ICBmb3IgKFJlbmRlck9iamVjdCogY3VycmVudCA9IGZpcnN0Q2hpbGQoKTsgY3VycmVudDsgY3Vy
cmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpCisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1
cnJlbnQgPSBmaXJzdENoaWxkU2xvdygpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4
dFNpYmxpbmcoKSkKICAgICAgICAgY3VycmVudC0+YWRkQWJzb2x1dGVSZWN0Rm9yTGF5ZXIocmVz
dWx0KTsKIH0KIApAQCAtMTIzNyw3ICsxMjM3LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJPYmplY3Q6
OnBhaW50aW5nUm9vdFJlYwogewogICAgIExheW91dFJlY3QgcmVzdWx0ID0gYWJzb2x1dGVCb3Vu
ZGluZ0JveFJlY3RJZ25vcmluZ1RyYW5zZm9ybXMoKTsKICAgICB0b3BMZXZlbFJlY3QgPSByZXN1
bHQ7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBmaXJzdENoaWxkKCk7IGN1cnJl
bnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKQorICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZFNsb3coKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJl
bnQtPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGN1cnJlbnQtPmFkZEFic29sdXRlUmVjdEZvckxh
eWVyKHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE1OTEsNyArMTU5MSw3IEBA
IHZvaWQgUmVuZGVyT2JqZWN0OjpzaG93UmVuZGVyVHJlZUFuZE1hcmsKICAgICBpZiAoIXRoaXMp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoY29uc3QgUmVuZGVyT2JqZWN0KiBjaGlsZCA9
IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAg
Zm9yIChjb25zdCBSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGNoaWxkLT5zaG93UmVuZGVy
VHJlZUFuZE1hcmsobWFya2VkT2JqZWN0MSwgbWFya2VkTGFiZWwxLCBtYXJrZWRPYmplY3QyLCBt
YXJrZWRMYWJlbDIsIGRlcHRoICsgMSk7CiB9CiAKQEAgLTE3NzksNyArMTc3OSw5IEBAIHZvaWQg
UmVuZGVyT2JqZWN0OjpzZXRQc2V1ZG9TdHlsZShQYXNzUmUKIAogaW5saW5lIGJvb2wgUmVuZGVy
T2JqZWN0OjpoYXNJbW1lZGlhdGVOb25XaGl0ZXNwYWNlVGV4dENoaWxkKCkgY29uc3QKIHsKLSAg
ICBmb3IgKGNvbnN0IFJlbmRlck9iamVjdCogciA9IGZpcnN0Q2hpbGQoKTsgcjsgciA9IHItPm5l
eHRTaWJsaW5nKCkpIHsKKyAgICBpZiAoaXNUZXh0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBmb3IgKGNvbnN0IFJlbmRlck9iamVjdCogciA9IHRvUmVuZGVyRWxlbWVudCh0aGlzKS0+
Zmlyc3RDaGlsZCgpOyByOyByID0gci0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoci0+
aXNUZXh0KCkgJiYgIXRvUmVuZGVyVGV4dChyKS0+aXNBbGxDb2xsYXBzaWJsZVdoaXRlc3BhY2Uo
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTIwMTUsNyArMjAxNyw3IEBA
IHZvaWQgUmVuZGVyT2JqZWN0OjpzdHlsZURpZENoYW5nZShTdHlsZUQKIHZvaWQgUmVuZGVyT2Jq
ZWN0Ojpwcm9wYWdhdGVTdHlsZVRvQW5vbnltb3VzQ2hpbGRyZW4oYm9vbCBibG9ja0NoaWxkcmVu
T25seSkKIHsKICAgICAvLyBGSVhNRTogV2UgY291bGQgc2F2ZSB0aGlzIGNhbGwgd2hlbiB0aGUg
Y2hhbmdlIG9ubHkgYWZmZWN0ZWQgbm9uLWluaGVyaXRlZCBwcm9wZXJ0aWVzLgotICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpIHsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENo
aWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAg
ICBpZiAoIWNoaWxkLT5pc0Fub255bW91cygpIHx8IGNoaWxkLT5zdHlsZSgpLT5zdHlsZVR5cGUo
KSAhPSBOT1BTRVVETykKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0yNTE1LDcgKzI1MTcs
NyBAQCB2b2lkIFJlbmRlck9iamVjdDo6cmVtb3ZlRnJvbVJlbmRlckZsb3dUCiAKIHZvaWQgUmVu
ZGVyT2JqZWN0OjpyZW1vdmVGcm9tUmVuZGVyRmxvd1RocmVhZFJlY3Vyc2l2ZShSZW5kZXJGbG93
VGhyZWFkKiByZW5kZXJGbG93VGhyZWFkKQogewotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGls
ZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisg
ICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGNoaWxkLT5yZW1vdmVGcm9tUmVu
ZGVyRmxvd1RocmVhZFJlY3Vyc2l2ZShyZW5kZXJGbG93VGhyZWFkKTsKIAogICAgIFJlbmRlckZs
b3dUaHJlYWQqIGxvY2FsRmxvd1RocmVhZCA9IHJlbmRlckZsb3dUaHJlYWQ7CkBAIC0yNTM1LDcg
KzI1MzcsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6ZGVzdHJveUFuZENsZWFudXBBbm9uCiAgICAg
fQogCiAgICAgUmVuZGVyT2JqZWN0KiBkZXN0cm95Um9vdCA9IHRoaXM7Ci0gICAgZm9yIChSZW5k
ZXJPYmplY3QqIGRlc3Ryb3lSb290UGFyZW50ID0gZGVzdHJveVJvb3QtPnBhcmVudCgpOyBkZXN0
cm95Um9vdFBhcmVudCAmJiBkZXN0cm95Um9vdFBhcmVudC0+aXNBbm9ueW1vdXMoKTsgZGVzdHJv
eVJvb3QgPSBkZXN0cm95Um9vdFBhcmVudCwgZGVzdHJveVJvb3RQYXJlbnQgPSBkZXN0cm95Um9v
dFBhcmVudC0+cGFyZW50KCkpIHsKKyAgICBmb3IgKFJlbmRlckVsZW1lbnQqIGRlc3Ryb3lSb290
UGFyZW50ID0gZGVzdHJveVJvb3QtPnBhcmVudCgpOyBkZXN0cm95Um9vdFBhcmVudCAmJiBkZXN0
cm95Um9vdFBhcmVudC0+aXNBbm9ueW1vdXMoKTsgZGVzdHJveVJvb3QgPSBkZXN0cm95Um9vdFBh
cmVudCwgZGVzdHJveVJvb3RQYXJlbnQgPSBkZXN0cm95Um9vdFBhcmVudC0+cGFyZW50KCkpIHsK
ICAgICAgICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgcmVtb3ZlIGFub255bW91cyBjZWxscycgYW5k
IHRhYmxlIHNlY3Rpb25zJyB3cmFwcGVycyBidXQgd2Ugc2hvdWxkIHJlbW92ZSBhbGwgdW5uZWVk
ZWQKICAgICAgICAgLy8gd3JhcHBlcnMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzUyMTIzIGFz
IGFuIGV4YW1wbGUgd2hlcmUgdGhpcyBpcyBuZWVkZWQuCiAgICAgICAgIGlmICghZGVzdHJveVJv
b3RQYXJlbnQtPmlzVGFibGVDZWxsKCkgJiYgIWRlc3Ryb3lSb290UGFyZW50LT5pc1RhYmxlU2Vj
dGlvbigpKQpAQCAtMjYxNCw3ICsyNjE2LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnVwZGF0ZURy
YWdTdGF0ZShib29sIAogICAgIHNldElzRHJhZ2dpbmcoZHJhZ09uKTsKICAgICBpZiAodmFsdWVD
aGFuZ2VkICYmIG5vZGUoKSAmJiAoc3R5bGUoKS0+YWZmZWN0ZWRCeURyYWcoKSB8fCAobm9kZSgp
LT5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KG5vZGUoKSktPmNoaWxkcmVuQWZmZWN0ZWRC
eURyYWcoKSkpKQogICAgICAgICBub2RlKCktPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICBm
b3IgKFJlbmRlck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnIt
Pm5leHRTaWJsaW5nKCkpCisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxk
U2xvdygpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgY3Vyci0+
dXBkYXRlRHJhZ1N0YXRlKGRyYWdPbik7CiB9CiAKQEAgLTI2ODcsNyArMjY4OSw3IEBAIHZvaWQg
UmVuZGVyT2JqZWN0OjpsYXlvdXQoKQogewogICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9p
bnQgbGF5b3V0Q2hlY2tQb2ludDsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7Ci0gICAgUmVu
ZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKKyAgICBSZW5kZXJPYmplY3QqIGNoaWxk
ID0gZmlyc3RDaGlsZFNsb3coKTsKICAgICB3aGlsZSAoY2hpbGQpIHsKICAgICAgICAgY2hpbGQt
PmxheW91dElmTmVlZGVkKCk7CiAgICAgICAgIEFTU0VSVCghY2hpbGQtPm5lZWRzTGF5b3V0KCkp
OwpAQCAtMjkxMiw3ICsyOTE0LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmNvbGxlY3RBbm5vdGF0
ZWRSZWdpbwogICAgICAgICByZXR1cm47CiAKICAgICBhZGRBbm5vdGF0ZWRSZWdpb25zKHJlZ2lv
bnMpOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBj
dXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9
IHRvUmVuZGVyRWxlbWVudCh0aGlzKS0+Zmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+
bmV4dFNpYmxpbmcoKSkKICAgICAgICAgY3Vyci0+Y29sbGVjdEFubm90YXRlZFJlZ2lvbnMocmVn
aW9ucyk7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgJKHJldmlzaW9uIDE1NjI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDEwICsxNjQsOSBAQCBwdWJsaWM6CiAg
ICAgUmVuZGVyT2JqZWN0KiBwcmV2aW91c1NpYmxpbmcoKSBjb25zdCB7IHJldHVybiBtX3ByZXZp
b3VzOyB9CiAgICAgUmVuZGVyT2JqZWN0KiBuZXh0U2libGluZygpIGNvbnN0IHsgcmV0dXJuIG1f
bmV4dDsgfQogCi0gICAgLy8gRklYTUU6IFRoZXNlIHNob3VsZCBiZSByZW5hbWVkIHNsb3dGaXJz
dENoaWxkLCBzbG93TGFzdENoaWxkLCBldGMuCi0gICAgLy8gdG8gZGlzY291cmFnZSB0aGVpciB1
c2UuCi0gICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IHJldHVy
biBudWxscHRyOyB9Ci0gICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGxhc3RDaGlsZCgpIGNvbnN0
IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICAvLyBVc2UgUmVuZGVyRWxlbWVudCB2ZXJzaW9ucyBp
bnN0ZWFkLgorICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkU2xvdygpIGNvbnN0
IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogbGFzdENoaWxk
U2xvdygpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAgIFJlbmRlck9iamVjdCogbmV4
dEluUHJlT3JkZXIoKSBjb25zdDsKICAgICBSZW5kZXJPYmplY3QqIG5leHRJblByZU9yZGVyKGNv
bnN0IFJlbmRlck9iamVjdCogc3RheVdpdGhpbikgY29uc3Q7CkBAIC0yMjQsNyArMjIzLDggQEAg
cHVibGljOgogCiAgICAgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiByZW5kZXJOYW1lZEZsb3dUaHJl
YWRXcmFwcGVyKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIGZpcnN0Q2hpbGQoKSA9PSAwOyB9CisgICAgLy8gRklYTUU6IFRoZSBtZWFuaW5nIG9m
IHRoaXMgZnVuY3Rpb24gaXMgdW5jbGVhci4KKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IHsgcmV0dXJuICFmaXJzdENoaWxkU2xvdygpOyB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAg
dm9pZCBzZXRIYXNBWE9iamVjdChib29sIGZsYWcpIHsgbV9oYXNBWE9iamVjdCA9IGZsYWc7IH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCShyZXZpc2lv
biAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTgwLDcgKzU4MCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IFJlbmRlclJlZ2lvbjo6Y28KIAogdm9pZCBSZW5kZXJSZWdpb246OmNvbXB1dGVDaGlsZHJlblN0
eWxlSW5SZWdpb24oY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgZm9yIChSZW5k
ZXJPYmplY3QqIGNoaWxkID0gb2JqZWN0LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gb2Jq
ZWN0LT5maXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KSkgewogCiAgICAgICAgIFJlbmRlck9iamVjdFJlZ2lvblN0eWxlTWFwOjppdGVyYXRvciBpdCA9
IG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUuZmluZChjaGlsZCk7CiAKQEAgLTYzMiw3ICs2MzIs
NyBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6Y2xlYXJPYmplY3RTdHlsZUluUmVnCiAgICAgbV9yZW5k
ZXJPYmplY3RSZWdpb25TdHlsZS5yZW1vdmUob2JqZWN0KTsKIAogICAgIC8vIENsZWFyIHRoZSBz
dHlsZSBmb3IgdGhlIGNoaWxkcmVuIG9mIHRoaXMgb2JqZWN0LgotICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCA9IG9iamVjdC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKSkKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBvYmplY3QtPmZp
cnN0Q2hpbGRTbG93KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAg
ICAgICBjbGVhck9iamVjdFN0eWxlSW5SZWdpb24oY2hpbGQpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5
LDI3ICs1OSwyNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNSdWJ5QmVmb3JlQmxvY2soY29uCiB7
CiAgICAgcmV0dXJuIGlzQW5vbnltb3VzUnVieUlubGluZUJsb2NrKG9iamVjdCkKICAgICAgICAg
JiYgIW9iamVjdC0+cHJldmlvdXNTaWJsaW5nKCkKLSAgICAgICAgJiYgb2JqZWN0LT5maXJzdENo
aWxkKCkKLSAgICAgICAgJiYgb2JqZWN0LT5maXJzdENoaWxkKCktPnN0eWxlKCktPnN0eWxlVHlw
ZSgpID09IEJFRk9SRTsKKyAgICAgICAgJiYgb2JqZWN0LT5maXJzdENoaWxkU2xvdygpCisgICAg
ICAgICYmIG9iamVjdC0+Zmlyc3RDaGlsZFNsb3coKS0+c3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0g
QkVGT1JFOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNSdWJ5QWZ0ZXJCbG9jayhjb25zdCBS
ZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKICAgICByZXR1cm4gaXNBbm9ueW1vdXNSdWJ5SW5saW5l
QmxvY2sob2JqZWN0KQogICAgICAgICAmJiAhb2JqZWN0LT5uZXh0U2libGluZygpCi0gICAgICAg
ICYmIG9iamVjdC0+Zmlyc3RDaGlsZCgpCi0gICAgICAgICYmIG9iamVjdC0+Zmlyc3RDaGlsZCgp
LT5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBBRlRFUjsKKyAgICAgICAgJiYgb2JqZWN0LT5maXJz
dENoaWxkU2xvdygpCisgICAgICAgICYmIG9iamVjdC0+Zmlyc3RDaGlsZFNsb3coKS0+c3R5bGUo
KS0+c3R5bGVUeXBlKCkgPT0gQUZURVI7CiB9CiAKIHN0YXRpYyBpbmxpbmUgUmVuZGVyQmxvY2sq
IHJ1YnlCZWZvcmVCbG9jayhjb25zdCBSZW5kZXJPYmplY3QqIHJ1YnkpCiB7Ci0gICAgUmVuZGVy
T2JqZWN0KiBjaGlsZCA9IHJ1YnktPmZpcnN0Q2hpbGQoKTsKKyAgICBSZW5kZXJPYmplY3QqIGNo
aWxkID0gcnVieS0+Zmlyc3RDaGlsZFNsb3coKTsKICAgICByZXR1cm4gaXNSdWJ5QmVmb3JlQmxv
Y2soY2hpbGQpID8gdG9SZW5kZXJCbG9jayhjaGlsZCkgOiAwOwogfQogCiBzdGF0aWMgaW5saW5l
IFJlbmRlckJsb2NrKiBydWJ5QWZ0ZXJCbG9jayhjb25zdCBSZW5kZXJPYmplY3QqIHJ1YnkpCiB7
Ci0gICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJ1YnktPmxhc3RDaGlsZCgpOworICAgIFJlbmRl
ck9iamVjdCogY2hpbGQgPSBydWJ5LT5sYXN0Q2hpbGRTbG93KCk7CiAgICAgcmV0dXJuIGlzUnVi
eUFmdGVyQmxvY2soY2hpbGQpID8gdG9SZW5kZXJCbG9jayhjaGlsZCkgOiAwOwogfQogCkBAIC05
Myw3ICs5Myw3IEBAIHN0YXRpYyBSZW5kZXJCbG9jayogY3JlYXRlQW5vbnltb3VzUnVieUkKIAog
c3RhdGljIFJlbmRlclJ1YnlSdW4qIGxhc3RSdWJ5UnVuKGNvbnN0IFJlbmRlck9iamVjdCogcnVi
eSkKIHsKLSAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gcnVieS0+bGFzdENoaWxkKCk7CisgICAg
UmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJ1YnktPmxhc3RDaGlsZFNsb3coKTsKICAgICBpZiAoY2hp
bGQgJiYgIWNoaWxkLT5pc1J1YnlSdW4oKSkKICAgICAgICAgY2hpbGQgPSBjaGlsZC0+cHJldmlv
dXNTaWJsaW5nKCk7CiAgICAgQVNTRVJUKCFjaGlsZCB8fCBjaGlsZC0+aXNSdWJ5UnVuKCkgfHwg
Y2hpbGQtPmlzQmVmb3JlQ29udGVudCgpIHx8IGNoaWxkID09IHJ1YnlCZWZvcmVCbG9jayhydWJ5
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHJldmlz
aW9uIDE1NjI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4NCw5ICsxODQsMTAgQEAgdm9pZCBSZW5kZXJUYWJsZTo6YWRk
Q2hpbGQoUmVuZGVyT2JqZWN0KgogICAgIHdoaWxlIChsYXN0Qm94ICYmIGxhc3RCb3gtPnBhcmVu
dCgpLT5pc0Fub255bW91cygpICYmICFsYXN0Qm94LT5pc1RhYmxlU2VjdGlvbigpICYmIGxhc3RC
b3gtPnN0eWxlKCktPmRpc3BsYXkoKSAhPSBUQUJMRV9DQVBUSU9OICYmIGxhc3RCb3gtPnN0eWxl
KCktPmRpc3BsYXkoKSAhPSBUQUJMRV9DT0xVTU5fR1JPVVApCiAgICAgICAgIGxhc3RCb3ggPSBs
YXN0Qm94LT5wYXJlbnQoKTsKICAgICBpZiAobGFzdEJveCAmJiBsYXN0Qm94LT5pc0Fub255bW91
cygpICYmICFpc0FmdGVyQ29udGVudChsYXN0Qm94KSkgewotICAgICAgICBpZiAoYmVmb3JlQ2hp
bGQgPT0gbGFzdEJveCkKLSAgICAgICAgICAgIGJlZm9yZUNoaWxkID0gbGFzdEJveC0+Zmlyc3RD
aGlsZCgpOwotICAgICAgICB0b1JlbmRlclRhYmxlU2VjdGlvbihsYXN0Qm94KS0+YWRkQ2hpbGQo
Y2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9u
ID0gdG9SZW5kZXJUYWJsZVNlY3Rpb24obGFzdEJveCk7CisgICAgICAgIGlmIChiZWZvcmVDaGls
ZCA9PSBzZWN0aW9uKQorICAgICAgICAgICAgYmVmb3JlQ2hpbGQgPSBzZWN0aW9uLT5maXJzdENo
aWxkKCk7CisgICAgICAgIHNlY3Rpb24tPmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU2OCwxMCArNTY5LDEwIEBAIHZvaWQgUmVuZGVy
VGFibGU6OnJlY2FsY0NvbGxhcHNlZEJvcmRlcnMKICAgICBmb3IgKFJlbmRlck9iamVjdCogc2Vj
dGlvbiA9IGZpcnN0Q2hpbGQoKTsgc2VjdGlvbjsgc2VjdGlvbiA9IHNlY3Rpb24tPm5leHRTaWJs
aW5nKCkpIHsKICAgICAgICAgaWYgKCFzZWN0aW9uLT5pc1RhYmxlU2VjdGlvbigpKQogICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiByb3cgPSBzZWN0aW9u
LT5maXJzdENoaWxkKCk7IHJvdzsgcm93ID0gcm93LT5uZXh0U2libGluZygpKSB7CisgICAgICAg
IGZvciAoUmVuZGVyT2JqZWN0KiByb3cgPSB0b1JlbmRlclRhYmxlU2VjdGlvbihzZWN0aW9uKS0+
Zmlyc3RDaGlsZCgpOyByb3c7IHJvdyA9IHJvdy0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAg
ICAgaWYgKCFyb3ctPmlzVGFibGVSb3coKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjZWxsID0gcm93LT5maXJzdENoaWxkKCk7IGNl
bGw7IGNlbGwgPSBjZWxsLT5uZXh0U2libGluZygpKSB7CisgICAgICAgICAgICBmb3IgKFJlbmRl
ck9iamVjdCogY2VsbCA9IHRvUmVuZGVyVGFibGVSb3cocm93KS0+Zmlyc3RDaGlsZCgpOyBjZWxs
OyBjZWxsID0gY2VsbC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgICAgIGlmICghY2Vs
bC0+aXNUYWJsZUNlbGwoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKHRvUmVuZGVyVGFibGVDZWxsKGNlbGwpLT50YWJsZSgpID09IHRoaXMp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCShy
ZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVS
b3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsOSArMTExLDEwIEBAIHZvaWQgUmVuZGVyVGFi
bGVSb3c6OmFkZENoaWxkKFJlbmRlck9iamUKICAgICAgICAgaWYgKCFsYXN0KQogICAgICAgICAg
ICAgbGFzdCA9IGxhc3RDaGlsZCgpOwogICAgICAgICBpZiAobGFzdCAmJiBsYXN0LT5pc0Fub255
bW91cygpICYmIGxhc3QtPmlzVGFibGVDZWxsKCkgJiYgIWxhc3QtPmlzQmVmb3JlT3JBZnRlckNv
bnRlbnQoKSkgewotICAgICAgICAgICAgaWYgKGJlZm9yZUNoaWxkID09IGxhc3QpCi0gICAgICAg
ICAgICAgICAgYmVmb3JlQ2hpbGQgPSBsYXN0LT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICB0
b1JlbmRlclRhYmxlQ2VsbChsYXN0KS0+YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAg
ICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IHRvUmVuZGVyVGFibGVDZWxsKGxhc3Qp
OworICAgICAgICAgICAgaWYgKGJlZm9yZUNoaWxkID09IGNlbGwpCisgICAgICAgICAgICAgICAg
YmVmb3JlQ2hpbGQgPSBjZWxsLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICBjZWxsLT5hZGRD
aGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rp
b24uY3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDkgKzEzMCwxMCBAQCB2
b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2hpbGQoUmVuZGVyCiAgICAgICAgIGlmICghbGFz
dCkKICAgICAgICAgICAgIGxhc3QgPSBsYXN0Q2hpbGQoKTsKICAgICAgICAgaWYgKGxhc3QgJiYg
bGFzdC0+aXNBbm9ueW1vdXMoKSAmJiAhbGFzdC0+aXNCZWZvcmVPckFmdGVyQ29udGVudCgpKSB7
Ci0gICAgICAgICAgICBpZiAoYmVmb3JlQ2hpbGQgPT0gbGFzdCkKLSAgICAgICAgICAgICAgICBi
ZWZvcmVDaGlsZCA9IGxhc3QtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgIHRvUmVuZGVyVGFi
bGVSb3cobGFzdCktPmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAgICBS
ZW5kZXJUYWJsZVJvdyogcm93ID0gdG9SZW5kZXJUYWJsZVJvdyhsYXN0KTsKKyAgICAgICAgICAg
IGlmIChiZWZvcmVDaGlsZCA9PSByb3cpCisgICAgICAgICAgICAgICAgYmVmb3JlQ2hpbGQgPSBy
b3ctPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgIHJvdy0+YWRkQ2hpbGQoY2hpbGQsIGJlZm9y
ZUNoaWxkKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0xMjM0LDcgKzEy
MzUsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cmVjYWxjQ2VsbHMoKQogICAgICAgICAg
ICAgdGFibGVSb3ctPnNldFJvd0luZGV4KGluc2VydGlvblJvdyk7CiAgICAgICAgICAgICBzZXRS
b3dMb2dpY2FsSGVpZ2h0VG9Sb3dTdHlsZUxvZ2ljYWxIZWlnaHRJZk5vdFJlbGF0aXZlKG1fZ3Jp
ZFtpbnNlcnRpb25Sb3ddKTsKIAotICAgICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNlbGwg
PSByb3ctPmZpcnN0Q2hpbGQoKTsgY2VsbDsgY2VsbCA9IGNlbGwtPm5leHRTaWJsaW5nKCkpIHsK
KyAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjZWxsID0gdGFibGVSb3ctPmZpcnN0Q2hp
bGQoKTsgY2VsbDsgY2VsbCA9IGNlbGwtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgICAg
ICBpZiAoIWNlbGwtPmlzVGFibGVDZWxsKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQu
Y3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5Nyw3ICs1OTcsNyBAQCB2b2lkIHdy
aXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBvLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQg
PSBvLmZpcnN0Q2hpbGRTbG93KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
KSB7CiAgICAgICAgIGlmIChjaGlsZC0+aGFzTGF5ZXIoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB3cml0ZSh0cywgKmNoaWxkLCBpbmRlbnQgKyAxLCBiZWhhdmlvcik7CkBAIC05
MTgsNyArOTE4LDcgQEAgc3RhdGljIHZvaWQgd3JpdGVDb3VudGVyVmFsdWVzRnJvbUNoaWxkcgog
ewogICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm47Ci0gICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGNoaWxkID0gcGFyZW50LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpKSB7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gcGFyZW50LT5m
aXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewog
ICAgICAgICBpZiAoY2hpbGQtPmlzQ291bnRlcigpKSB7CiAgICAgICAgICAgICBpZiAoIWlzRmly
c3RDb3VudGVyKQogICAgICAgICAgICAgICAgIHN0cmVhbSA8PCAiICI7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0
aW9uLmNwcAkocmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsx
MjMsNyBAQCBSZW5kZXJNYXRoTUxPcGVyYXRvciogUmVuZGVyTWF0aE1MRnJhY3RpCiAgICAgUmVu
ZGVyT2JqZWN0KiBudW1lcmF0b3JXcmFwcGVyID0gZmlyc3RDaGlsZCgpOwogICAgIGlmICghbnVt
ZXJhdG9yV3JhcHBlcikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVuZGVyT2JqZWN0KiBudW1l
cmF0b3IgPSBudW1lcmF0b3JXcmFwcGVyLT5maXJzdENoaWxkKCk7CisgICAgUmVuZGVyT2JqZWN0
KiBudW1lcmF0b3IgPSBudW1lcmF0b3JXcmFwcGVyLT5maXJzdENoaWxkU2xvdygpOwogICAgIGlm
ICghbnVtZXJhdG9yIHx8ICFudW1lcmF0b3ItPmlzUmVuZGVyTWF0aE1MQmxvY2soKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHRvUmVuZGVyTWF0aE1MQmxvY2sobnVtZXJhdG9yKS0+
dW5lbWJlbGxpc2hlZE9wZXJhdG9yKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDE1NjI3NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0MCw3ICsxNDAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZmluZFByZXZpb3VzQW5kTmV4dEF0
CiAgICAgQVNTRVJUKHN0YXJ0KTsKICAgICBBU1NFUlQobG9jYXRlRWxlbWVudCk7CiAgICAgLy8g
RklYTUU6IE1ha2UgdGhpcyBpdGVyYXRpdmUuCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxk
ID0gc3RhcnQtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCkpIHsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBzdGFydC0+Zmlyc3RDaGlsZFNs
b3coKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYg
KGNoaWxkLT5pc1NWR0lubGluZVRleHQoKSkgewogICAgICAgICAgICAgUmVuZGVyU1ZHSW5saW5l
VGV4dCogdGV4dCA9IHRvUmVuZGVyU1ZHSW5saW5lVGV4dChjaGlsZCk7CiAgICAgICAgICAgICBp
ZiAobG9jYXRlRWxlbWVudCAhPSB0ZXh0KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAJKHJldmlzaW9uIDE1NjI3NCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlT2Jq
ZWN0Qm91bmRpbmdCCiAgICAgb2JqZWN0Qm91bmRpbmdCb3gudW5pdGVFdmVuSWZFbXB0eShvdGhl
ckJvdW5kaW5nQm94KTsKIH0KIAotdm9pZCBTVkdSZW5kZXJTdXBwb3J0Ojpjb21wdXRlQ29udGFp
bmVyQm91bmRpbmdCb3hlcyhjb25zdCBSZW5kZXJPYmplY3QqIGNvbnRhaW5lciwgRmxvYXRSZWN0
JiBvYmplY3RCb3VuZGluZ0JveCwgYm9vbCYgb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCwgRmxvYXRS
ZWN0JiBzdHJva2VCb3VuZGluZ0JveCwgRmxvYXRSZWN0JiByZXBhaW50Qm91bmRpbmdCb3gpCit2
b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveGVzKGNvbnN0
IFJlbmRlckVsZW1lbnQqIGNvbnRhaW5lciwgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCwg
Ym9vbCYgb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCwgRmxvYXRSZWN0JiBzdHJva2VCb3VuZGluZ0Jv
eCwgRmxvYXRSZWN0JiByZXBhaW50Qm91bmRpbmdCb3gpCiB7CiAgICAgb2JqZWN0Qm91bmRpbmdC
b3ggPSBGbG9hdFJlY3QoKTsKICAgICBvYmplY3RCb3VuZGluZ0JveFZhbGlkID0gZmFsc2U7CkBA
IC0xOTUsNyArMTk1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGludmFsaWRhdGVSZXNvdXJjZXNP
ZgogICAgIGlmIChTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpj
YWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3Qoc3RhcnQpKQogICAgICAgICByZXNvdXJjZXMt
PnJlbW92ZUNsaWVudEZyb21DYWNoZShzdGFydCwgZmFsc2UpOwogCi0gICAgZm9yIChSZW5kZXJP
YmplY3QqIGNoaWxkID0gc3RhcnQtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpCisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gc3RhcnQtPmZp
cnN0Q2hpbGRTbG93KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAg
ICAgICBpbnZhbGlkYXRlUmVzb3VyY2VzT2ZDaGlsZHJlbihjaGlsZCk7CiB9CiAKQEAgLTIzMyw3
ICsyMzMsNyBAQCB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmxheW91dENoaWxkcmVuKFJlCiAgICAg
Ym9vbCBuZWVkc0JvdW5kYXJpZXNVcGRhdGUgPSBzdGFydC0+bmVlZHNCb3VuZGFyaWVzVXBkYXRl
KCk7CiAgICAgSGFzaFNldDxSZW5kZXJPYmplY3QqPiBub3RsYXlvdXRlZE9iamVjdHM7CiAKLSAg
ICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBzdGFydC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBj
aGlsZCA9IHN0YXJ0LT5maXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkgewogICAgICAgICBib29sIG5lZWRzTGF5b3V0ID0gc2VsZk5lZWRzTGF5b3V0
OwogICAgICAgICBib29sIGNoaWxkRXZlckhhZExheW91dCA9IGNoaWxkLT5ldmVySGFkTGF5b3V0
KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9y
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
U3VwcG9ydC5oCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclN1cHBvcnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBj
bGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKIGNsYXNzIExheW91dFJlY3Q7CiBj
bGFzcyBSZW5kZXJCb3hNb2RlbE9iamVjdDsKK2NsYXNzIFJlbmRlckVsZW1lbnQ7CiBjbGFzcyBS
ZW5kZXJHZW9tZXRyeU1hcDsKIGNsYXNzIFJlbmRlckxheWVyTW9kZWxPYmplY3Q7CiBjbGFzcyBS
ZW5kZXJPYmplY3Q7CkBAIC02MSw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICAvLyBEZXRlcm1pbmVz
IHdoZXRoZXIgdGhlIHBhc3NlZCBwb2ludCBsaWVzIGluIGEgY2xpcHBpbmcgYXJlYQogICAgIHN0
YXRpYyBib29sIHBvaW50SW5DbGlwcGluZ0FyZWEoUmVuZGVyT2JqZWN0KiwgY29uc3QgRmxvYXRQ
b2ludCYpOwogCi0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94ZXMo
Y29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIsIEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdC
b3gsIGJvb2wmIG9iamVjdEJvdW5kaW5nQm94VmFsaWQsIEZsb2F0UmVjdCYgc3Ryb2tlQm91bmRp
bmdCb3gsIEZsb2F0UmVjdCYgcmVwYWludEJvdW5kaW5nQm94KTsKKyAgICBzdGF0aWMgdm9pZCBj
b21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyhjb25zdCBSZW5kZXJFbGVtZW50KiBjb250YWlu
ZXIsIEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsIGJvb2wmIG9iamVjdEJvdW5kaW5nQm94
VmFsaWQsIEZsb2F0UmVjdCYgc3Ryb2tlQm91bmRpbmdCb3gsIEZsb2F0UmVjdCYgcmVwYWludEJv
dW5kaW5nQm94KTsKICAgICBzdGF0aWMgYm9vbCBwYWludEluZm9JbnRlcnNlY3RzUmVwYWludFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiBsb2NhbFJlcGFpbnRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGxvY2FsVHJhbnNmb3JtLCBjb25zdCBQYWludEluZm8mKTsKIAogICAgIC8vIEltcG9ydGFu
dCBmdW5jdGlvbnMgdXNlZCBieSBuZWFybHkgYWxsIFNWRyByZW5kZXJlcnMgY2VudHJhbGl6aW5n
IGNvb3JkaW5hdGUgdHJhbnNmb3JtYXRpb25zIC8gcmVwYWludCByZWN0IGNhbGN1bGF0aW9ucwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRy
ZWVBc1RleHQuY3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjYsNyAr
NDY2LDcgQEAgc3RhdGljIHZvaWQgd3JpdGVTdGFuZGFyZFByZWZpeChUZXh0U3RyZQogCiBzdGF0
aWMgdm9pZCB3cml0ZUNoaWxkcmVuKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3Qm
IG9iamVjdCwgaW50IGluZGVudCkKIHsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBv
YmplY3QuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkK
KyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBvYmplY3QuZmlyc3RDaGlsZFNsb3coKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIHdyaXRlKHRzLCAq
Y2hpbGQsIGluZGVudCArIDEpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcAkocmV2aXNpb24g
MTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDeWNs
ZVNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgYm9vbCBTVkdSZXNv
dXJjZXNDeWNsZVNvbHZlcjo6cmVzb3VyY2VDbwogICAgIC8vIFRoZW4gb3BlcmF0ZSBvbiB0aGUg
Y2hpbGQgcmVzb3VyY2VzIG9mIHRoZSBnaXZlbiByZW5kZXJlci4KICAgICAvLyA8bWFya2VyIGlk
PSJhIj4gPHBhdGggbWFya2VyLXN0YXJ0PSJ1cmwoI2IpIi8+IC4uLgogICAgIC8vIDxtYXJrZXIg
aWQ9ImIiPiA8cGF0aCBtYXJrZXItc3RhcnQ9InVybCgjYSkiLz4gLi4uCi0gICAgZm9yIChSZW5k
ZXJPYmplY3QqIGNoaWxkID0gcmVuZGVyZXItPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBy
ZW5kZXJlci0+Zmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCkpIHsKICAgICAgICAgU1ZHUmVzb3VyY2VzKiBjaGlsZFJlc291cmNlcyA9IFNWR1Jlc291
cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QoY2hpbGQpOwogICAgICAg
ICBpZiAoIWNoaWxkUmVzb3VyY2VzKQogICAgICAgICAgICAgY29udGludWU7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5
b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwCShyZXZpc2lvbiAxNTYyNzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIFNWR1RleHRMYXlvdXRBdHRyaWJ1
dGVzQnVpbGRlcjo6Y29sCiB7CiAgICAgQVNTRVJUKCFzdGFydC0+aXNTVkdUZXh0KCkgfHwgbV90
ZXh0UG9zaXRpb25zLmlzRW1wdHkoKSk7CiAKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQg
PSBzdGFydC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KSkgeyAKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBzdGFydC0+Zmlyc3RDaGlsZFNs
b3coKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYg
KGNoaWxkLT5pc1NWR0lubGluZVRleHQoKSkgewogICAgICAgICAgICAgcHJvY2Vzc1JlbmRlclNW
R0lubGluZVRleHQodG9SZW5kZXJTVkdJbmxpbmVUZXh0KGNoaWxkKSwgbV90ZXh0TGVuZ3RoLCBs
YXN0Q2hhcmFjdGVyKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAko
cmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
TWV0cmljc0J1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNyArMTc5LDcgQEAgdm9p
ZCBTVkdUZXh0TWV0cmljc0J1aWxkZXI6Om1lYXN1cmVUZXh0UgogCiB2b2lkIFNWR1RleHRNZXRy
aWNzQnVpbGRlcjo6d2Fsa1RyZWUoUmVuZGVyT2JqZWN0KiBzdGFydCwgUmVuZGVyU1ZHSW5saW5l
VGV4dCogc3RvcEF0TGVhZiwgTWVhc3VyZVRleHREYXRhKiBkYXRhKQogewotICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjaGlsZCA9IHN0YXJ0LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gc3Rh
cnQtPmZpcnN0Q2hpbGRTbG93KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
KSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNTVkdJbmxpbmVUZXh0KCkpIHsKICAgICAgICAgICAg
IFJlbmRlclNWR0lubGluZVRleHQqIHRleHQgPSB0b1JlbmRlclNWR0lubGluZVRleHQoY2hpbGQp
OwogICAgICAgICAgICAgaWYgKHN0b3BBdExlYWYgJiYgc3RvcEF0TGVhZiAhPSB0ZXh0KSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcAkocmV2aXNpb24g
MTU2Mjc0KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0MCw3ICszNDAsNyBAQCBzdGF0aWMgYm9vbCB0ZXh0UmVuZGVyZXJJ
c05lZWRlZChjb25zdCBUCiAgICAgICAgIGlmIChwYXJlbnRSZW5kZXJlci5pc1JlbmRlckJsb2Nr
KCkgJiYgIXBhcmVudFJlbmRlcmVyLmNoaWxkcmVuSW5saW5lKCkgJiYgKCFwcmV2aW91c1JlbmRl
cmVyIHx8ICFwcmV2aW91c1JlbmRlcmVyLT5pc0lubGluZSgpKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIFJlbmRlck9iamVjdCogZmlyc3QgPSBwYXJlbnRS
ZW5kZXJlci5maXJzdENoaWxkKCk7CisgICAgICAgIFJlbmRlck9iamVjdCogZmlyc3QgPSBwYXJl
bnRSZW5kZXJlci5maXJzdENoaWxkU2xvdygpOwogICAgICAgICB3aGlsZSAoZmlyc3QgJiYgZmly
c3QtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGZpcnN0
ID0gZmlyc3QtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgIFJlbmRlck9iamVjdCogbmV4dFJlbmRl
cmVyID0gbmV4dFNpYmxpbmdSZW5kZXJlcih0ZXh0Tm9kZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTU2Mjc0KQorKysgU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYlJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkw
LDcgKzkwLDcgQEAgV2ViUmVuZGVyT2JqZWN0OjpXZWJSZW5kZXJPYmplY3QoUmVuZGVyTwogICAg
ICAgICByZXR1cm47CiAKICAgICBtX2NoaWxkcmVuID0gTXV0YWJsZUFycmF5OjpjcmVhdGUoKTsK
LSAgICBmb3IgKFJlbmRlck9iamVjdCogY29yZUNoaWxkID0gcmVuZGVyZXItPmZpcnN0Q2hpbGQo
KTsgY29yZUNoaWxkOyBjb3JlQ2hpbGQgPSBjb3JlQ2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAg
ICBmb3IgKFJlbmRlck9iamVjdCogY29yZUNoaWxkID0gcmVuZGVyZXItPmZpcnN0Q2hpbGRTbG93
KCk7IGNvcmVDaGlsZDsgY29yZUNoaWxkID0gY29yZUNoaWxkLT5uZXh0U2libGluZygpKSB7CiAg
ICAgICAgIFJlZlB0cjxXZWJSZW5kZXJPYmplY3Q+IGNoaWxkID0gYWRvcHRSZWYobmV3IFdlYlJl
bmRlck9iamVjdChjb3JlQ2hpbGQsIHNob3VsZEluY2x1ZGVEZXNjZW5kYW50cykpOwogICAgICAg
ICBtX2NoaWxkcmVuLT5hcHBlbmQoY2hpbGQuZ2V0KCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViUmVuZGVyTm9kZS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlJlbmRlck5vZGUubW0JKHJldmlzaW9uIDE1NjI3NCkKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUmVuZGVyTm9kZS5tbQkod29ya2luZyBjb3B5
KQpAQCAtODYsNyArODYsNyBAQCAtIChpZClfaW5pdFdpdGhOYW1lOihOU1N0cmluZyAqKW4gcG9z
aXRpCiBzdGF0aWMgV2ViUmVuZGVyTm9kZSAqY29weVJlbmRlck5vZGUoUmVuZGVyT2JqZWN0KiBu
b2RlKQogewogICAgIE5TTXV0YWJsZUFycmF5ICpjaGlsZHJlbiA9IFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRdOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IG5vZGUtPmZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICBmb3Ig
KFJlbmRlck9iamVjdCogY2hpbGQgPSBub2RlLT5maXJzdENoaWxkU2xvdygpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBXZWJSZW5kZXJOb2RlICpjaGls
ZENvcHkgPSBjb3B5UmVuZGVyTm9kZShjaGlsZCk7CiAgICAgICAgIFtjaGlsZHJlbiBhZGRPYmpl
Y3Q6Y2hpbGRDb3B5XTsKICAgICAgICAgW2NoaWxkQ29weSByZWxlYXNlXTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>