<?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>43348</bug_id>
          
          <creation_ts>2010-08-02 07:42:24 -0700</creation_ts>
          <short_desc>Introduce more explicit types into the rendering tree</short_desc>
          <delta_ts>2011-06-06 10:54:41 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>
          <dependson>43632</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>eae</cc>
    
    <cc>hyatt</cc>
    
    <cc>jamesr</cc>
    
    <cc>leviw</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>258863</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-02 07:42:24 -0700</bug_when>
    <thetext>Introduce more explicit types into the rendering tree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258864</commentid>
    <comment_count>1</comment_count>
      <attachid>63216</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-02 07:42:46 -0700</bug_when>
    <thetext>Created attachment 63216
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258867</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-02 07:46:56 -0700</bug_when>
    <thetext>I am very interested in Darin and Hyatt&apos;s comments on this approach.

The goal was to start moving the code towards stronger typed pointers (RenderBoxModelObject* instead of RenderObject*) so we could move more code down into RenderBoxModelObject (and eventually RenderBox and RenderBlock) instead of it all being on RenderObject.

I chose this approach to try and leverage the compiler as much as possible.  Moving &quot;is-a&quot; functions onto RenderBoxModelObject makes the compiler point out to me places where we have a RenderObject but secretly know it&apos;s a RenderBoxModelObject.  Moving the &quot;is-a&quot; functions first also prevents further creep of RenderObject pointers.

I also learned from this exercise that our Accessibility code is poor shape, wrt the rest of WebKit.  It&apos;s especially abusive of the Render tree and I expect we could find a bunch of bad static_cast-turn-security bug holes as a result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259148</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-02 15:28:15 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; The goal was to start moving the code towards stronger typed pointers (RenderBoxModelObject* instead of RenderObject*) so we could move more code down into RenderBoxModelObject (and eventually RenderBox and RenderBlock) instead of it all being on RenderObject.

Seems OK. But functions that walk the tree still end up returning RenderObject* since that&apos;s the type of parent and firstChild.

&gt; I chose this approach to try and leverage the compiler as much as possible. Moving &quot;is-a&quot; functions onto RenderBoxModelObject makes the compiler point out to me places where we have a RenderObject but secretly know it&apos;s a RenderBoxModelObject.

I have often done this myself, but you don’t have to check in such changes for them to do their thing.

&gt; Moving the &quot;is-a&quot; functions first also prevents further creep of RenderObject pointers.

As long as it doesn&apos;t make common operations awkward, more specific types are good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260183</commentid>
    <comment_count>4</comment_count>
      <attachid>63486</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-04 13:23:19 -0700</bug_when>
    <thetext>Created attachment 63486
wip renderer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260184</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-04 13:24:01 -0700</bug_when>
    <thetext>The patch compiles now.  I&apos;m going to need to run the layout tests and then split it up into pieces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405163</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-17 10:55:07 -0700</bug_when>
    <thetext>I should come back to this at some point.  This effort helped me find a couple bad-casts in the AX code iirc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415622</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-05 10:46:45 -0700</bug_when>
    <thetext>I actually didn&apos;t mean to close this bug, I meant to close another one... but this should probably be closed too.  This patch is too old to be useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415892</commentid>
    <comment_count>8</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-06 10:50:17 -0700</bug_when>
    <thetext>This is awesome, but just way too *big*! It&apos;d be great if we could pair it down to something more manageable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415895</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-06 10:54:41 -0700</bug_when>
    <thetext>Feel free to knock yourself out. :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63216</attachid>
            <date>2010-08-02 07:42:46 -0700</date>
            <delta_ts>2010-08-04 13:23:15 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>bug-43348-20100802074244.patch</filename>
            <type>text/plain</type>
            <size>84557</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCA3NTBjNjExZmRmN2Jj
YjNjZDc0OThkOGVlYzY1MTk0MDEzY2Y5ZjI3Li43NWNmNjlhNWQzYWM1ZDlhODA3NTU3MzU0MWZl
NDY4YzRjYjc3MTA1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5jcHAKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBA
IC01OSw4ICs1OSwxMyBAQAogI2VuZGlmCiAjaW5jbHVkZSAiSW5wdXRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRl
ckxpc3RCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgorI2luY2x1ZGUgIlJlbmRl
clRhYmxlLmgiCisjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCisjaW5jbHVkZSAiUmVuZGVy
VGFibGVSb3cuaCIKICNpbmNsdWRlICJSZW5kZXJQcm9ncmVzcy5oIgorI2luY2x1ZGUgIlJlbmRl
clNsaWRlci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKIAogI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CkBAIC0xNjAsODAgKzE2NSw4MiBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9i
amVjdENhY2hlOjpnZXQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICAKICAgICByZXR1cm4g
b2JqOwogfQotICAgIAotYm9vbCBBWE9iamVjdENhY2hlOjpub2RlSGFzUm9sZShOb2RlKiBub2Rl
LCBjb25zdCBBdG9taWNTdHJpbmcmIHJvbGUpCisKKy8vIEZJWE1FOiBUaGlzIHNob3VsZCB0YWtl
IGEgY29uc3QgY2hhciosIGJ1dCBvbmUgY2FsbGVyIHBhc3NlcyBudWxsQXRvbS4KK3N0YXRpYyBi
b29sIG5vZGVIYXNSb2xlKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgcm9sZSkKIHsKICAgICBp
ZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAorCiAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKHN0YXRpY19jYXN0PEVsZW1l
bnQqPihub2RlKS0+Z2V0QXR0cmlidXRlKHJvbGVBdHRyKSwgcm9sZSk7CiB9CiAKLUFjY2Vzc2li
aWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIpCitzdGF0aWMgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBjcmVhdGVGcm9t
UmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICBpZiAoIXJlbmRlcmVyKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBn
ZXQocmVuZGVyZXIpOwotCi0gICAgaWYgKCFvYmopIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IHJl
bmRlcmVyLT5ub2RlKCk7Ci0gICAgICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBuZXdP
YmogPSAwOwotICAgICAgICBpZiAocmVuZGVyZXItPmlzTGlzdEJveCgpKQotICAgICAgICAgICAg
bmV3T2JqID0gQWNjZXNzaWJpbGl0eUxpc3RCb3g6OmNyZWF0ZShyZW5kZXJlcik7Ci0gICAgICAg
IGVsc2UgaWYgKHJlbmRlcmVyLT5pc01lbnVMaXN0KCkpCi0gICAgICAgICAgICBuZXdPYmogPSBB
Y2Nlc3NpYmlsaXR5TWVudUxpc3Q6OmNyZWF0ZShyZW5kZXJlcik7Ci0KLSAgICAgICAgLy8gSWYg
dGhlIG5vZGUgaXMgYXJpYSByb2xlPSJsaXN0IiBvciB0aGUgYXJpYSByb2xlIGlzIGVtcHR5IGFu
ZCBpdHMgYSB1bC9vbC9kbCB0eXBlIChpdCBzaG91bGRuJ3QgYmUgYSBsaXN0IGlmIGFyaWEgc2F5
cyBvdGhlcndpc2UpLiAKLSAgICAgICAgZWxzZSBpZiAobm9kZSAmJiAoKG5vZGVIYXNSb2xlKG5v
ZGUsICJsaXN0IikgfHwgbm9kZUhhc1JvbGUobm9kZSwgImRpcmVjdG9yeSIpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICB8fCAobm9kZUhhc1JvbGUobm9kZSwgbnVsbEF0b20pICYmIChub2Rl
LT5oYXNUYWdOYW1lKHVsVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKG9sVGFnKSB8fCBub2RlLT5o
YXNUYWdOYW1lKGRsVGFnKSkpKSkKLSAgICAgICAgICAgIG5ld09iaiA9IEFjY2Vzc2liaWxpdHlM
aXN0OjpjcmVhdGUocmVuZGVyZXIpOwotICAgICAgICAKLSAgICAgICAgLy8gYXJpYSB0YWJsZXMK
LSAgICAgICAgZWxzZSBpZiAobm9kZUhhc1JvbGUobm9kZSwgImdyaWQiKSB8fCBub2RlSGFzUm9s
ZShub2RlLCAidHJlZWdyaWQiKSkKLSAgICAgICAgICAgIG5ld09iaiA9IEFjY2Vzc2liaWxpdHlB
UklBR3JpZDo6Y3JlYXRlKHJlbmRlcmVyKTsKLSAgICAgICAgZWxzZSBpZiAobm9kZUhhc1JvbGUo
bm9kZSwgInJvdyIpKQotICAgICAgICAgICAgbmV3T2JqID0gQWNjZXNzaWJpbGl0eUFSSUFHcmlk
Um93OjpjcmVhdGUocmVuZGVyZXIpOwotICAgICAgICBlbHNlIGlmIChub2RlSGFzUm9sZShub2Rl
LCAiZ3JpZGNlbGwiKSB8fCBub2RlSGFzUm9sZShub2RlLCAiY29sdW1uaGVhZGVyIikgfHwgbm9k
ZUhhc1JvbGUobm9kZSwgInJvd2hlYWRlciIpKQotICAgICAgICAgICAgbmV3T2JqID0gQWNjZXNz
aWJpbGl0eUFSSUFHcmlkQ2VsbDo6Y3JlYXRlKHJlbmRlcmVyKTsKLQotICAgICAgICAvLyBzdGFu
ZGFyZCB0YWJsZXMKLSAgICAgICAgZWxzZSBpZiAocmVuZGVyZXItPmlzVGFibGUoKSkKLSAgICAg
ICAgICAgIG5ld09iaiA9IEFjY2Vzc2liaWxpdHlUYWJsZTo6Y3JlYXRlKHJlbmRlcmVyKTsKLSAg
ICAgICAgZWxzZSBpZiAocmVuZGVyZXItPmlzVGFibGVSb3coKSkKLSAgICAgICAgICAgIG5ld09i
aiA9IEFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6Y3JlYXRlKHJlbmRlcmVyKTsKLSAgICAgICAgZWxz
ZSBpZiAocmVuZGVyZXItPmlzVGFibGVDZWxsKCkpCi0gICAgICAgICAgICBuZXdPYmogPSBBY2Nl
c3NpYmlsaXR5VGFibGVDZWxsOjpjcmVhdGUocmVuZGVyZXIpOworICAgIC8vIEZJWE1FOiBIb3cg
Y291bGQgcmVuZGVyZXItPm5vZGUoKSBldmVyIG5vdCBiZSBhbiBFbGVtZW50PworICAgIE5vZGUq
IG5vZGUgPSByZW5kZXJlci0+bm9kZSgpOworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBjc3NC
b3ggPSByZW5kZXJlci0+aXNCb3hNb2RlbE9iamVjdCgpID8gdG9SZW5kZXJCb3hNb2RlbE9iamVj
dChyZW5kZXJlcikgOiAwOworICAgIGlmIChjc3NCb3gtPmlzTGlzdEJveCgpKQorICAgICAgICBy
ZXR1cm4gQWNjZXNzaWJpbGl0eUxpc3RCb3g6OmNyZWF0ZSh0b1JlbmRlckxpc3RCb3goY3NzQm94
KSk7CisgICAgaWYgKGNzc0JveC0+aXNNZW51TGlzdCgpKQorICAgICAgICByZXR1cm4gQWNjZXNz
aWJpbGl0eU1lbnVMaXN0OjpjcmVhdGUodG9SZW5kZXJNZW51TGlzdChjc3NCb3gpKTsKKworICAg
IC8vIElmIHRoZSBub2RlIGlzIGFyaWEgcm9sZT0ibGlzdCIgb3IgdGhlIGFyaWEgcm9sZSBpcyBl
bXB0eSBhbmQgaXRzIGEgdWwvb2wvZGwgdHlwZSAoaXQgc2hvdWxkbid0IGJlIGEgbGlzdCBpZiBh
cmlhIHNheXMgb3RoZXJ3aXNlKS4gCisgICAgaWYgKG5vZGUgJiYgKChub2RlSGFzUm9sZShub2Rl
LCAibGlzdCIpIHx8IG5vZGVIYXNSb2xlKG5vZGUsICJkaXJlY3RvcnkiKSkKKyAgICAgICAgICAg
ICAgICAgICAgICB8fCAobm9kZUhhc1JvbGUobm9kZSwgbnVsbEF0b20pICYmIChub2RlLT5oYXNU
YWdOYW1lKHVsVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKG9sVGFnKSB8fCBub2RlLT5oYXNUYWdO
YW1lKGRsVGFnKSkpKSkKKyAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlMaXN0OjpjcmVhdGUo
cmVuZGVyZXIpOworCisgICAgLy8gYXJpYSB0YWJsZXMKKyAgICBpZiAobm9kZUhhc1JvbGUobm9k
ZSwgImdyaWQiKSB8fCBub2RlSGFzUm9sZShub2RlLCAidHJlZWdyaWQiKSkKKyAgICAgICAgcmV0
dXJuIEFjY2Vzc2liaWxpdHlBUklBR3JpZDo6Y3JlYXRlKHJlbmRlcmVyKTsKKyAgICBpZiAobm9k
ZUhhc1JvbGUobm9kZSwgInJvdyIpKQorICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eUFSSUFH
cmlkUm93OjpjcmVhdGUocmVuZGVyZXIpOworICAgIGlmIChub2RlSGFzUm9sZShub2RlLCAiZ3Jp
ZGNlbGwiKSB8fCBub2RlSGFzUm9sZShub2RlLCAiY29sdW1uaGVhZGVyIikgfHwgbm9kZUhhc1Jv
bGUobm9kZSwgInJvd2hlYWRlciIpKQorICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eUFSSUFH
cmlkQ2VsbDo6Y3JlYXRlKHJlbmRlcmVyKTsKKworICAgIC8vIHN0YW5kYXJkIHRhYmxlcworICAg
IGlmIChjc3NCb3gtPmlzVGFibGUoKSkKKyAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlUYWJs
ZTo6Y3JlYXRlKHRvUmVuZGVyVGFibGUoY3NzQm94KSk7CisgICAgaWYgKGNzc0JveC0+aXNUYWJs
ZVJvdygpKQorICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVRhYmxlUm93OjpjcmVhdGUodG9S
ZW5kZXJUYWJsZVJvdyhjc3NCb3gpKTsKKyAgICBpZiAoY3NzQm94LT5pc1RhYmxlQ2VsbCgpKQor
ICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6Y3JlYXRlKHRvUmVuZGVyVGFi
bGVDZWxsKGNzc0JveCkpOwogCiAjaWYgRU5BQkxFKFZJREVPKQotICAgICAgICAvLyBtZWRpYSBj
b250cm9scwotICAgICAgICBlbHNlIGlmIChyZW5kZXJlci0+bm9kZSgpICYmIHJlbmRlcmVyLT5u
b2RlKCktPmlzTWVkaWFDb250cm9sRWxlbWVudCgpKQotICAgICAgICAgICAgbmV3T2JqID0gQWNj
ZXNzaWJpbGl0eU1lZGlhQ29udHJvbDo6Y3JlYXRlKHJlbmRlcmVyKTsKKyAgICAvLyBtZWRpYSBj
b250cm9scworICAgIGlmIChub2RlICYmIG5vZGUtPmlzTWVkaWFDb250cm9sRWxlbWVudCgpKQor
ICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbDo6Y3JlYXRlKHJlbmRlcmVy
KTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKLSAgICAgICAgLy8gcHJvZ3Jl
c3MgYmFyCi0gICAgICAgIGVsc2UgaWYgKHJlbmRlcmVyLT5pc1Byb2dyZXNzKCkpCi0gICAgICAg
ICAgICBuZXdPYmogPSBBY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3I6OmNyZWF0ZSh0b1Jl
bmRlclByb2dyZXNzKHJlbmRlcmVyKSk7CisgICAgLy8gcHJvZ3Jlc3MgYmFyCisgICAgaWYgKGNz
c0JveC0+aXNQcm9ncmVzcygpKQorICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVByb2dyZXNz
SW5kaWNhdG9yOjpjcmVhdGUodG9SZW5kZXJQcm9ncmVzcyhjc3NCb3gpKTsKICNlbmRpZgogCi0g
ICAgICAgIC8vIGlucHV0IHR5cGU9cmFuZ2UKLSAgICAgICAgZWxzZSBpZiAocmVuZGVyZXItPmlz
U2xpZGVyKCkpCi0gICAgICAgICAgICBuZXdPYmogPSBBY2Nlc3NpYmlsaXR5U2xpZGVyOjpjcmVh
dGUocmVuZGVyZXIpOworICAgIC8vIGlucHV0IHR5cGU9cmFuZ2UKKyAgICBpZiAoY3NzQm94LT5p
c1NsaWRlcigpKQorICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVNsaWRlcjo6Y3JlYXRlKHRv
UmVuZGVyU2xpZGVyKGNzc0JveCkpOwogCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ld09i
aiA9IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNyZWF0ZShyZW5kZXJlcik7Ci0gICAgICAg
IAotICAgICAgICBvYmogPSBuZXdPYmouZ2V0KCk7Ci0gICAgICAgIAotICAgICAgICBnZXRBWElE
KG9iaik7Ci0gICAgICAgIAotICAgICAgICBtX3JlbmRlck9iamVjdE1hcHBpbmcuc2V0KHJlbmRl
cmVyLCBvYmotPmF4T2JqZWN0SUQoKSk7Ci0gICAgICAgIG1fb2JqZWN0cy5zZXQob2JqLT5heE9i
amVjdElEKCksIG9iaik7ICAgIAotICAgICAgICBhdHRhY2hXcmFwcGVyKG9iaik7Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiBvYmo7CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmNyZWF0ZShyZW5kZXJlcik7Cit9CisKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0
Q2FjaGU6OmdldE9yQ3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgaWYgKCFy
ZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVj
dCogb2JqID0gZ2V0KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIG9iajsKKworICAgIFJlZlB0
cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBuZXdPYmogPSBjcmVhdGVGcm9tUmVuZGVyZXIocmVuZGVy
ZXIpOworCisgICAgZ2V0QVhJRChuZXdPYmouZ2V0KCkpOworCisgICAgbV9yZW5kZXJPYmplY3RN
YXBwaW5nLnNldChyZW5kZXJlciwgbmV3T2JqLT5heE9iamVjdElEKCkpOworICAgIG1fb2JqZWN0
cy5zZXQobmV3T2JqLT5heE9iamVjdElEKCksIG5ld09iaik7ICAgIAorICAgIGF0dGFjaFdyYXBw
ZXIobmV3T2JqLmdldCgpKTsKKyAgICByZXR1cm4gbmV3T2JqLmdldCgpOwogfQogCiBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZShBY2Nlc3NpYmlsaXR5Um9s
ZSByb2xlKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUu
aCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKaW5kZXggZjE4ZDA4YWNi
MTEzMTI2ZjRlZjU1YzNmY2YyODg5NjU1YmY5ZjdkZi4uNWQyMTA5MDVkZDUzMjJhZGU5MzNjZWVi
YjgwOTFiZDdlM2MwNzMxNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuaAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCkBA
IC0xMjQsOCArMTI0LDYgQEAgcHVibGljOgogICAgIHZvaWQgcG9zdE5vdGlmaWNhdGlvbihSZW5k
ZXJPYmplY3QqLCBBWE5vdGlmaWNhdGlvbiwgYm9vbCBwb3N0VG9FbGVtZW50LCBQb3N0VHlwZSA9
IFBvc3RBc3luY2hyb25vdXNseSk7CiAgICAgdm9pZCBwb3N0Tm90aWZpY2F0aW9uKEFjY2Vzc2li
aWxpdHlPYmplY3QqLCBEb2N1bWVudCosIEFYTm90aWZpY2F0aW9uLCBib29sIHBvc3RUb0VsZW1l
bnQsIFBvc3RUeXBlID0gUG9zdEFzeW5jaHJvbm91c2x5KTsKIAotICAgIGJvb2wgbm9kZUhhc1Jv
bGUoTm9kZSosIGNvbnN0IEF0b21pY1N0cmluZyYgcm9sZSk7Ci0KIHByb3RlY3RlZDoKICAgICB2
b2lkIHBvc3RQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgQVhOb3Rp
ZmljYXRpb24pOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUltYWdlTWFwTGluay5jcHAgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eUltYWdlTWFwTGluay5jcHAKaW5kZXggOTI0YmEyMWE3Zjg0NTM5NGEwOTZlYmQ0MDZmOWY2ZTQ4
NjQ5ZjVmOC4uOWI3NzQwMGQyY2JhNGZiODk5MmJkM2FlOWIyNWYyOGRhMmM2M2Q5NyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsuY3Bw
CisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rLmNw
cApAQCAtMzMsMTggKzMzLDE1IEBACiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5j
bHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotCi11c2luZyBuYW1l
c3BhY2Ugc3RkOworI2luY2x1ZGUgIlJlbmRlckJveE1vZGVsT2JqZWN0LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIEFjY2Vzc2li
aWxpdHlJbWFnZU1hcExpbms6OkFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsoKQotICAgIDogbV9h
cmVhRWxlbWVudCgwKSwgCi0gICAgICBtX21hcEVsZW1lbnQoMCkKKyAgICA6IG1fYXJlYUVsZW1l
bnQoMCkKKyAgICAsIG1fbWFwRWxlbWVudCgwKQogewogfQogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmNwcCBiL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwCmluZGV4IDA1Y2RmOTc3ZmJlMjEyZjMz
NDQ1MGIxMDhmYWRhYjVlYmMzNjAyMTEuLmJkZTRjZDQ0ZGE0MWMwMTNhNmM1NDA0ZTgxMGVlOGNm
NGMwOTdmMzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TWVudUxpc3QuY3BwCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVu
dUxpc3QuY3BwCkBAIC0zMiwxMCArMzIsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1B
Y2Nlc3NpYmlsaXR5TWVudUxpc3Q6OkFjY2Vzc2liaWxpdHlNZW51TGlzdChSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKQorQWNjZXNzaWJpbGl0eU1lbnVMaXN0OjpBY2Nlc3NpYmlsaXR5TWVudUxpc3Qo
UmVuZGVyTWVudUxpc3QqIHJlbmRlcmVyKQogICAgIDogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dChyZW5kZXJlcikKIHsKLSAgICBBU1NFUlRfQVJHKHJlbmRlcmVyLCByZW5kZXJlci0+aXNNZW51
TGlzdCgpKTsKK30KKworUmVuZGVyTWVudUxpc3QqIEFjY2Vzc2liaWxpdHlNZW51TGlzdDo6cmVu
ZGVyZXIoKSBjb25zdAoreworICAgIHJldHVybiB0b1JlbmRlck1lbnVMaXN0KEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OnJlbmRlcmVyKCkpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlNZW51
TGlzdDo6cHJlc3MoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlNZW51TGlzdC5oIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlNZW51TGlzdC5oCmluZGV4IDM3Njk1OGZiNGZjYTZhODRkYTM0OTJiMDViOWNhYTI2YzA1MDFk
ZGIuLjQwODJmMGFkOWYzNTdiN2E5NTJmNzZjMjRmZjQyMjUwNTc4NDE5NTcgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3QuaAorKysgYi9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmgKQEAgLTMzLDE2ICszMywx
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBY2Nlc3NpYmlsaXR5TWVudUxpc3Q7CiBj
bGFzcyBBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cDsKIGNsYXNzIEhUTUxPcHRpb25FbGVtZW50
OworY2xhc3MgUmVuZGVyTWVudUxpc3Q7CiAKIGNsYXNzIEFjY2Vzc2liaWxpdHlNZW51TGlzdCA6
IHB1YmxpYyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5TWVudUxpc3Q+IGNyZWF0ZShSZW5kZXJPYmplY3QqIHJl
bmRlcmVyKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQWNjZXNzaWJpbGl0eU1lbnVMaXN0KHJlbmRl
cmVyKSk7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5TWVudUxpc3Q+IGNy
ZWF0ZShSZW5kZXJNZW51TGlzdCogcmVuZGVyZXIpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBBY2Nl
c3NpYmlsaXR5TWVudUxpc3QocmVuZGVyZXIpKTsgfQogCiAgICAgdmlydHVhbCBib29sIGlzQ29s
bGFwc2VkKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHByZXNzKCkgY29uc3Q7CiAKKyAgICBS
ZW5kZXJNZW51TGlzdCogcmVuZGVyZXIoKSBjb25zdDsKKwogcHJpdmF0ZToKLSAgICBBY2Nlc3Np
YmlsaXR5TWVudUxpc3QoUmVuZGVyT2JqZWN0Kik7CisgICAgQWNjZXNzaWJpbGl0eU1lbnVMaXN0
KFJlbmRlck1lbnVMaXN0Kik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNNZW51TGlzdCgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGVWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIFBvcFVwQnV0dG9uUm9sZTsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcCBiL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHAKaW5kZXggNDhjMmZh
YmIyZjU4ODE2YmYzOThhNmU5ZWViZWQzYWVhYTU0ZDdmYy4uNTE1ZTAyZjIxYWI0MDY0NmE0ZTA5
YjM5NmFiMmE1YWMyZjM2N2Y0MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVk
ZSAiQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CiAjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3Qu
aCIKKyNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCBh
MDk1OWU2Mjc2MDFkYTk2YWIyMTg1MmNiNjMxODVmMjI3MGM4MTY2Li5hZmQ3ZjlmZTgyYmMxODE0
OTM1OTU5MDZmYTdhNmYyNTBhZGE4OTExIDEwMDY0NAotLS0gYS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC00MDAsMTQgKzQwMCwxMSBAQCBzdGF0aWMgYm9vbCBy
ZXBsYWNlZE5vZGVOZWVkc0NoYXJhY3RlcihOb2RlKiByZXBsYWNlZE5vZGUpCiAvLyBGaW5kcyBh
IFJlbmRlckxpc3RJdGVtIHBhcmVudCBnaXZlIGEgbm9kZS4KIHN0YXRpYyBSZW5kZXJMaXN0SXRl
bSogcmVuZGVyTGlzdEl0ZW1Db250YWluZXJGb3JOb2RlKE5vZGUqIG5vZGUpCiB7Ci0gICAgZm9y
IChOb2RlKiBzdHJpbmdOb2RlID0gbm9kZTsgc3RyaW5nTm9kZTsgc3RyaW5nTm9kZSA9IHN0cmlu
Z05vZGUtPnBhcmVudCgpKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0ID0g
c3RyaW5nTm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFyZW5kZXJPYmplY3QgfHwgIXJl
bmRlck9iamVjdC0+aXNMaXN0SXRlbSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IAotICAgICAgICByZXR1cm4gdG9SZW5kZXJMaXN0SXRlbShyZW5kZXJPYmplY3QpOworICAgIGZv
ciAoOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50KCkpIHsKKyAgICAgICAgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyQm94TW9kZWxPYmplY3QoKTsKKyAgICAg
ICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpCisgICAgICAgICAgICBy
ZXR1cm4gdG9SZW5kZXJMaXN0SXRlbShyZW5kZXJlcik7CiAgICAgfQotICAgIAogICAgIHJldHVy
biAwOwogfQogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDUxNDQ5NTBmZDkxNWY4NzIxYTIzZmUyYjAwMWY4NDAy
N2Q2ZjU1MWYuLmNiYmI0NGQ3OTYyZDliMzAwZjkzNjZmYzg2OTBlZjQ5MzJiZjNjZGIgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHAKQEAgLTEyMCw4ICsxMjAsMTIgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpk
ZXRhY2goKQogICAgIG1fcmVuZGVyZXIgPSAwOyAgICAKIH0KIAotc3RhdGljIGlubGluZSBib29s
IGlzSW5saW5lV2l0aENvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorc3RhdGlj
IGlubGluZSBib29sIGlzSW5saW5lV2l0aENvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG9iamVj
dCkKIHsKKyAgICBpZiAoIW9iamVjdC0+aXNCb3hNb2RlbE9iamVjdCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIgPSB0b1JlbmRl
ckJveE1vZGVsT2JqZWN0KG9iamVjdCk7CiAgICAgaWYgKCFyZW5kZXJlci0+aXNSZW5kZXJJbmxp
bmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC00MjksNyArNDMzLDcgQEAgYm9vbCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1RleHRDb250cm9sKCkgY29uc3QKIAogYm9vbCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc05hdGl2ZUltYWdlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV9yZW5kZXJlci0+aXNJbWFnZSgpOworICAgIHJldHVybiBtX3JlbmRlcmVyLT5pc0Jv
eE1vZGVsT2JqZWN0KCkgJiYgdG9SZW5kZXJCb3hNb2RlbE9iamVjdChtX3JlbmRlcmVyKS0+aXNJ
bWFnZSgpOwogfSAgICAKICAgICAKIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNJ
bWFnZSgpIGNvbnN0CkBAIC00MzksMTIgKzQ0MywxMyBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmlzSW1hZ2UoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmlzQXR0YWNobWVudCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3JlbmRlcmVyKQorICAgIGlm
ICghbV9yZW5kZXJlciB8fCAhbV9yZW5kZXJlci0+aXNCb3hNb2RlbE9iamVjdCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVy
ZXIgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG1fcmVuZGVyZXIpOwogICAgIC8vIFdpZGdldHMg
YXJlIHRoZSByZXBsYWNlZCBlbGVtZW50cyB0aGF0IHdlIHJlcHJlc2VudCB0byBBWCBhcyBhdHRh
Y2htZW50cwotICAgIGJvb2wgaXNXaWRnZXQgPSBtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXItPmlz
V2lkZ2V0KCk7Ci0gICAgQVNTRVJUKCFpc1dpZGdldCB8fCAobV9yZW5kZXJlci0+aXNSZXBsYWNl
ZCgpICYmICFpc0ltYWdlKCkpKTsKKyAgICBib29sIGlzV2lkZ2V0ID0gcmVuZGVyZXItPmlzV2lk
Z2V0KCk7CisgICAgQVNTRVJUKCFpc1dpZGdldCB8fCAocmVuZGVyZXItPmlzUmVwbGFjZWQoKSAm
JiAhaXNJbWFnZSgpKSk7CiAgICAgcmV0dXJuIGlzV2lkZ2V0ICYmIGFyaWFSb2xlQXR0cmlidXRl
KCkgPT0gVW5rbm93blJvbGU7CiB9CiAKQEAgLTYwMyw3ICs2MDgsNyBAQCBib29sIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmlzTXVsdGlTZWxlY3RhYmxlKCkgY29uc3QKICAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UoYXJpYU11bHRpU2VsZWN0YWJsZSwgImZhbHNlIikpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoIW1fcmVuZGVyZXItPmlzTGlzdEJveCgpKQorICAg
IGlmICghbV9yZW5kZXJlci0+aXNCb3hNb2RlbE9iamVjdCgpIHx8ICF0b1JlbmRlckJveE1vZGVs
T2JqZWN0KG1fcmVuZGVyZXIpLT5pc0xpc3RCb3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJldHVybiBtX3JlbmRlcmVyLT5ub2RlKCkgJiYgc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVs
ZW1lbnQqPihtX3JlbmRlcmVyLT5ub2RlKCkpLT5tdWx0aXBsZSgpOwogfQpAQCAtNjI4LDExICs2
MzMsMTQgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1JlYWRPbmx5KCkgY29u
c3QKICAgICAgICAgcmV0dXJuICFmcmFtZS0+aXNDb250ZW50RWRpdGFibGUoKTsKICAgICB9CiAK
LSAgICBpZiAobV9yZW5kZXJlci0+aXNUZXh0RmllbGQoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX3JlbmRlcmVyLT5ub2RlKCkpLT5yZWFkT25seSgp
OwotICAgIGlmIChtX3JlbmRlcmVyLT5pc1RleHRBcmVhKCkpCi0gICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50Kj4obV9yZW5kZXJlci0+bm9kZSgpKS0+cmVhZE9u
bHkoKTsKLSAgICAKKyAgICBpZiAobV9yZW5kZXJlci0+aXNCb3hNb2RlbE9iamVjdCgpKSB7Cisg
ICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0
KG1fcmVuZGVyZXIpOworICAgICAgICBpZiAoYm94LT5pc1RleHRGaWVsZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihib3gtPm5vZGUoKSktPnJl
YWRPbmx5KCk7CisgICAgICAgIGlmIChib3gtPmlzVGV4dEFyZWEoKSkKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50Kj4oYm94LT5ub2RlKCkpLT5yZWFk
T25seSgpOworICAgIH0KKwogICAgIHJldHVybiAhbV9yZW5kZXJlci0+bm9kZSgpIHx8ICFtX3Jl
bmRlcmVyLT5ub2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCk7CiB9CiAKQEAgLTY5OSwxMCArNzA3
LDEwIEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNDb250cm9sKCkgY29uc3QK
IAogYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0ZpZWxkc2V0KCkgY29uc3QKIHsK
LSAgICBpZiAoIW1fcmVuZGVyZXIpCisgICAgaWYgKCFtX3JlbmRlcmVyIHx8ICFtX3JlbmRlcmVy
LT5pc0JveE1vZGVsT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBy
ZXR1cm4gbV9yZW5kZXJlci0+aXNGaWVsZHNldCgpOworCisgICAgcmV0dXJuIHRvUmVuZGVyQm94
TW9kZWxPYmplY3QobV9yZW5kZXJlciktPmlzRmllbGRzZXQoKTsKIH0KICAgCiBib29sIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzR3JvdXAoKSBjb25zdApAQCAtNzg5LDcgKzc5Nyw3IEBA
IEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjdGlvbkVsZW1lbnQoKSBjb25z
dAogICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmhhc1RhZ05hbWUoYnV0dG9uVGFnKSkKICAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CiAgICAgfQotICAgICAg
ICAgICAgCisKICAgICBpZiAoaXNGaWxlVXBsb2FkQnV0dG9uKCkpCiAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obV9yZW5kZXJlci0+bm9kZSgpKTsKICAgICAgICAgICAgIApA
QCAtNzk5LDcgKzgwNyw3IEBAIEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFj
dGlvbkVsZW1lbnQoKSBjb25zdAogICAgIGlmIChpc0ltYWdlQnV0dG9uKCkpCiAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9yZW5kZXJlci0+bm9kZSgpKTsKICAgICAKLSAg
ICBpZiAobV9yZW5kZXJlci0+aXNNZW51TGlzdCgpKQorICAgIGlmIChtX3JlbmRlcmVyLT5pc0Jv
eE1vZGVsT2JqZWN0KCkgJiYgdG9SZW5kZXJCb3hNb2RlbE9iamVjdChtX3JlbmRlcmVyKS0+aXNN
ZW51TGlzdCgpKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1fcmVuZGVy
ZXItPm5vZGUoKSk7CiAKICAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gcm9sZVZhbHVlKCk7
CkBAIC0xNzAxLDEzICsxNzA5LDEzIEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0CiAgICAgLy8gQW4gQVJJQSB0cmVlIGNhbiBv
bmx5IGhhdmUgdHJlZSBpdGVtcyBhbmQgc3RhdGljIHRleHQgYXMgY2hpbGRyZW4uCiAgICAgaWYg
KCFpc0FsbG93ZWRDaGlsZE9mVHJlZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKKwog
ICAgIC8vIGlnbm9yZSBwb3B1cCBtZW51IGl0ZW1zIGJlY2F1c2UgQXBwS2l0IGRvZXMKICAgICBm
b3IgKFJlbmRlck9iamVjdCogcGFyZW50ID0gbV9yZW5kZXJlci0+cGFyZW50KCk7IHBhcmVudDsg
cGFyZW50ID0gcGFyZW50LT5wYXJlbnQoKSkgewotICAgICAgICBpZiAocGFyZW50LT5pc01lbnVM
aXN0KCkpCisgICAgICAgIGlmIChwYXJlbnQtPmlzQm94TW9kZWxPYmplY3QoKSAmJiB0b1JlbmRl
ckJveE1vZGVsT2JqZWN0KHBhcmVudCktPmlzTWVudUxpc3QoKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIC8vIGZpbmQgb3V0IGlmIHRoaXMgZWxlbWVudCBp
cyBpbnNpZGUgb2YgYSBsYWJlbCBlbGVtZW50LgogICAgIC8vIGlmIHNvLCBpdCBtYXkgYmUgaWdu
b3JlZCBiZWNhdXNlIGl0J3MgdGhlIGxhYmVsIGZvciBhIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRv
bgogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvbnRyb2xPYmplY3QgPSBjb3JyZXNwb25kaW5n
Q29udHJvbEZvckxhYmVsRWxlbWVudCgpOwpAQCAtMjI1NSw3ICsyMjYzLDcgQEAgRnJhbWVWaWV3
KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0b3BEb2N1bWVudEZyYW1lVmlldygpIGNvbnN0
CiAKIFdpZGdldCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6d2lkZ2V0KCkgY29uc3QKIHsK
LSAgICBpZiAoIW1fcmVuZGVyZXItPmlzV2lkZ2V0KCkpCisgICAgaWYgKCFtX3JlbmRlcmVyLT5p
c0JveE1vZGVsT2JqZWN0KCkgfHwgIXRvUmVuZGVyQm94TW9kZWxPYmplY3QobV9yZW5kZXJlcikt
PmlzV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiB0b1JlbmRlcldpZGdl
dChtX3JlbmRlcmVyKS0+d2lkZ2V0KCk7CiB9CkBAIC0yNTE2LDEyICsyNTI0LDEyIEBAIFZpc2li
bGVQb3NpdGlvbiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25Gb3JQ
b2ludChjb25zdCBJbnRQb2luCiAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7
CiAgICAgICAgIAogICAgICAgICBwb2ludFJlc3VsdCA9IHJlc3VsdC5sb2NhbFBvaW50KCk7Ci0g
ICAgICAgIAorCiAgICAgICAgIC8vIGRvbmUgaWYgaGl0IHNvbWV0aGluZyBvdGhlciB0aGFuIGEg
d2lkZ2V0Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpbm5lck5vZGUtPnJlbmRl
cmVyKCk7CisgICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciA9IGlubmVyTm9k
ZS0+cmVuZGVyQm94TW9kZWxPYmplY3QoKTsKICAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNXaWRn
ZXQoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAKKwogICAgICAgICAvLyBkZXNjZW5k
IGludG8gd2lkZ2V0IChGUkFNRSwgSUZSQU1FLCBPQkpFQ1QuLi4pCiAgICAgICAgIFdpZGdldCog
d2lkZ2V0ID0gdG9SZW5kZXJXaWRnZXQocmVuZGVyZXIpLT53aWRnZXQoKTsKICAgICAgICAgaWYg
KCF3aWRnZXQgfHwgIXdpZGdldC0+aXNGcmFtZVZpZXcoKSkKQEAgLTI3MDYsMTMgKzI3MTQsMTMg
QEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZG9BY2Nl
c3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnQKICAgICAKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiByZXN1bHQgPSBvYmotPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUo
b2JqKTsKIAotICAgIGlmIChvYmotPmlzTGlzdEJveCgpKSB7CisgICAgaWYgKG9iai0+aXNCb3hN
b2RlbE9iamVjdCgpICYmIHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob2JqKS0+aXNMaXN0Qm94KCkp
IHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjaGlsZHJlbiBhcmUgaW5pdGlhbGl6ZWQgc28g
dGhhdCBoaXQgdGVzdGluZyBmaW5kcyB0aGUgcmlnaHQgZWxlbWVudC4KICAgICAgICAgQWNjZXNz
aWJpbGl0eUxpc3RCb3gqIGxpc3RCb3ggPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5TGlzdEJv
eCo+KHJlc3VsdCk7CiAgICAgICAgIGxpc3RCb3gtPnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3Nhcnko
KTsKICAgICAgICAgcmV0dXJuIGxpc3RCb3gtPmRvQWNjZXNzaWJpbGl0eUhpdFRlc3QocG9pbnQp
OwogICAgIH0KLSAgICAgICAgCisKICAgICBpZiAocmVzdWx0LT5hY2Nlc3NpYmlsaXR5SXNJZ25v
cmVkKCkpIHsKICAgICAgICAgLy8gSWYgdGhpcyBlbGVtZW50IGlzIHRoZSBsYWJlbCBvZiBhIGNv
bnRyb2wsIGEgaGl0IHRlc3Qgc2hvdWxkIHJldHVybiB0aGUgY29udHJvbC4KICAgICAgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogY29udHJvbE9iamVjdCA9IHJlc3VsdC0+Y29ycmVzcG9uZGluZ0Nv
bnRyb2xGb3JMYWJlbEVsZW1lbnQoKTsKQEAgLTI4NzQsNyArMjg4Miw3IEBAIGJvb2wgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6cmVuZGVyT2JqZWN0SXNPYnNlcnZhYmxlKFJlbmRlck9iamVj
dCogcmVuZGVyZXIpCiAgICAgTm9kZSogbm9kZSA9IHJlbmRlcmVyLT5ub2RlKCk7CiAgICAgaWYg
KHJlbmRlcmVyLT5pc0xpc3RCb3goKSB8fCBjYWNoZS0+bm9kZUhhc1JvbGUobm9kZSwgImxpc3Ri
b3giKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCisKICAgICAvLyBUZXh0Ym94ZXMgc2hv
dWxkIHNlbmQgb3V0IG5vdGlmaWNhdGlvbnMuCiAgICAgaWYgKGNhY2hlLT5ub2RlSGFzUm9sZShu
b2RlLCAidGV4dGJveCIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI5NTAsNyArMjk1OCw3
IEBAIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRldGVybWlu
ZUFjY2Vzc2liaWxpdHlSb2xlKCkKICAgICBBY2Nlc3NpYmlsaXR5Um9sZSBhcmlhUm9sZSA9IGFy
aWFSb2xlQXR0cmlidXRlKCk7CiAgICAgaWYgKGFyaWFSb2xlICE9IFVua25vd25Sb2xlKQogICAg
ICAgICByZXR1cm4gYXJpYVJvbGU7Ci0gICAgCisKICAgICBpZiAobm9kZSAmJiBub2RlLT5pc0xp
bmsoKSkgewogICAgICAgICBpZiAobV9yZW5kZXJlci0+aXNJbWFnZSgpKQogICAgICAgICAgICAg
cmV0dXJuIEltYWdlTWFwUm9sZTsKQEAgLTM2MDUsNyArMzYxMyw3IEBAIHN0YXRpYyBBY2Nlc3Np
YmlsaXR5Um9sZSBtc2FhUm9sZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVy
ZXIpCiAgICAgaWYgKHJlbmRlcmVyLT5pc1RleHQoKSkKICAgICAgICAgcmV0dXJuIEVkaXRhYmxl
VGV4dFJvbGU7CiAKLSAgICBpZiAocmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkKKyAgICBpZiAocmVu
ZGVyZXItPmlzQm94TW9kZWxPYmplY3QoKSAmJiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRl
cmVyKS0+aXNMaXN0SXRlbSgpKQogICAgICAgICByZXR1cm4gTGlzdEl0ZW1Sb2xlOwogCiAgICAg
cmV0dXJuIFVua25vd25Sb2xlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlUYWJsZS5jcHAgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVRhYmxlLmNwcAppbmRleCAwNGVjYWMzM2UwNDUwZTU0YzI4OGM1NmJhZjg4Zjc5YjUwZDNkNTcy
Li43ZjdiNmYyZDExODllMTNmODZkZGZjYTYxNjFmZjBlOWI5Mjc1NWQzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcAorKysgYi9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcApAQCAtNDMsOCArNDMsNiBAQAog
I2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlU2VjdGlv
bi5oIgogCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBAIC03NSw3ICs3Myw3IEBAIGJvb2wgQWNjZXNzaWJp
bGl0eVRhYmxlOjppc1RhYmxlRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKQogICAgIC8v
IDx0YWJsZT4gc2hvdWxkIGJlIGV4cG9zZWQgYXMgYW4gQVhUYWJsZS4gVGhlIGdvYWwKICAgICAv
LyBpcyB0byBvbmx5IHNob3cgImRhdGEiIHRhYmxlcwogICAgIAotICAgIGlmICghbV9yZW5kZXJl
ciB8fCAhbV9yZW5kZXJlci0+aXNUYWJsZSgpKQorICAgIGlmICghcmVuZGVyZXIoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIGlmIHRoZSBkZXZlbG9wZXIgYXNzaWduZWQg
YW4gYXJpYSByb2xlIHRvIHRoaXMsIHRoZW4gd2Ugc2hvdWxkbid0IApAQCAtMTk2LDcgKzE5NCw3
IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc1RhYmxlRXhwb3NhYmxlVGhyb3VnaEFjY2Vz
c2liaWxpdHkoKQogICAgICAgICAgICAgLy8gRm9yIHRoZSBmaXJzdCA1IHJvd3MsIGNhY2hlIHRo
ZSBiYWNrZ3JvdW5kIGNvbG9yIHNvIHdlIGNhbiBjaGVjayBpZiB0aGlzIHRhYmxlIGhhcyB6ZWJy
YS1zdHJpcGVkIHJvd3MuCiAgICAgICAgICAgICBpZiAocm93IDwgNSAmJiByb3cgPT0gYWx0ZXJu
YXRpbmdSb3dDb2xvckNvdW50KSB7CiAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJSb3cgPSBjZWxsLT5wYXJlbnQoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJlbmRlclJvdyB8
fCAhcmVuZGVyUm93LT5pc1RhYmxlUm93KCkpCisgICAgICAgICAgICAgICAgaWYgKCFyZW5kZXJS
b3cgfHwgIXJlbmRlclJvdy0+aXNCb3hNb2RlbE9iamVjdCgpIHx8ICF0b1JlbmRlckJveE1vZGVs
T2JqZWN0KHJlbmRlclJvdyktPmlzVGFibGVSb3coKSkKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHJvd1JlbmRlclN0eWxlID0gcmVu
ZGVyUm93LT5zdHlsZSgpOwogICAgICAgICAgICAgICAgIGlmICghcm93UmVuZGVyU3R5bGUpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmggYi9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmgKaW5kZXggNDJlZGYyYTE4
YmZjMmViZjhmMTlhMWY1ZDA5NGMxZTI2NzlmMGIzNi4uYzgyMzU2MTRjOTQ3NjEzYThmOGIzZTQ4
ODNlNjExOWRmZjA5MmEwMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlUYWJsZS5oCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
VGFibGUuaApAQCAtNTAsNyArNTAsNyBAQCBwcm90ZWN0ZWQ6CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVRhYmxlPiBjcmVhdGUoUmVuZGVyT2JqZWN0Kik7CiAg
ICAgdmlydHVhbCB+QWNjZXNzaWJpbGl0eVRhYmxlKCk7Ci0gICAgCisKICAgICB2aXJ0dWFsIGJv
b2wgaXNEYXRhVGFibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlSb2xlIHJv
bGVWYWx1ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0FyaWFUYWJsZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CkBAIC03OCwxNyArNzgsMTcgQEAgcHVibGljOgogCiAgICAgLy8gYW4g
b2JqZWN0IHRoYXQgY29udGFpbnMsIGFzIGNoaWxkcmVuLCBhbGwgdGhlIG9iamVjdHMgdGhhdCBh
Y3QgYXMgaGVhZGVycwogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGhlYWRlckNvbnRhaW5lcigp
OwotICAgIAotcHJvdGVjdGVkOiAgICAKKworcHJvdGVjdGVkOgogICAgIEFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciBtX3Jvd3M7CiAgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIG1f
Y29sdW1uczsKLSAgICAKKwogICAgIEFjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRhaW5lciog
bV9oZWFkZXJDb250YWluZXI7CiAgICAgbXV0YWJsZSBib29sIG1faXNBY2Nlc3NpYmlsaXR5VGFi
bGU7Ci0gICAgCisKICAgICBib29sIGlzVGFibGVFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0
eSgpOwogfTsKLSAgICAKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKIAogI2VuZGlmIC8vIEFj
Y2Vzc2liaWxpdHlUYWJsZV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9N
Lm1tIGIvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQppbmRleCAwMDhhY2VjZTFjOWM4Mzg0
MWYwYTMxZWU5OThjMDI4YzY3OTc5ZmI3Li5iMDJkZDFmNjVkODg1NThkY2QxZjU5MzdhODllZDE2
MmEyNWFmZDBlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCisrKyBi
L1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KQEAgLTQyOSw3ICs0MjksNyBAQCBpZCA8RE9N
RXZlbnRUYXJnZXQ+IGtpdChXZWJDb3JlOjpFdmVudFRhcmdldCogZXZlbnRUYXJnZXQpCiAtIChO
U0ltYWdlKilpbWFnZQogewogICAgIC8vIEZJWE1FOiBDb3VsZCB3ZSBtb3ZlIHRoaXMgZnVuY3Rp
b24gdG8gV2ViQ29yZTo6Tm9kZSBhbmQgYXV0b2dlbmVyYXRlPwotICAgIFdlYkNvcmU6OlJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSBjb3JlKHNlbGYpLT5yZW5kZXJlcigpOworICAgIFdlYkNvcmU6
OlJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlckJveE1v
ZGVsT2JqZWN0KCk7CiAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzSW1hZ2UoKSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKICAgICBXZWJDb3JlOjpDYWNoZWRJbWFnZSogY2FjaGVkSW1h
Z2UgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpSZW5kZXJJbWFnZSo+KHJlbmRlcmVyKS0+Y2FjaGVk
SW1hZ2UoKTsKQEAgLTQ1NCw3ICs0NTQsNyBAQCBpZCA8RE9NRXZlbnRUYXJnZXQ+IGtpdChXZWJD
b3JlOjpFdmVudFRhcmdldCogZXZlbnRUYXJnZXQpCiAtIChOU0RhdGEgKilfaW1hZ2VUSUZGUmVw
cmVzZW50YXRpb24KIHsKICAgICAvLyBGSVhNRTogQ291bGQgd2UgbW92ZSB0aGlzIGZ1bmN0aW9u
IHRvIFdlYkNvcmU6OkVsZW1lbnQgYW5kIGF1dG9nZW5lcmF0ZT8KLSAgICBXZWJDb3JlOjpSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gY29yZShzZWxmKS0+cmVuZGVyZXIoKTsKKyAgICBXZWJDb3Jl
OjpSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIgPSBjb3JlKHNlbGYpLT5yZW5kZXJCb3hN
b2RlbE9iamVjdCgpOwogICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0ltYWdlKCkp
CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgV2ViQ29yZTo6Q2FjaGVkSW1hZ2UqIGNhY2hlZElt
YWdlID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UmVuZGVySW1hZ2UqPihyZW5kZXJlciktPmNhY2hl
ZEltYWdlKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggOTFlZmU5ZWRlM2NkNWY0MWJjZjdkNzQ0OWU0NDI4ZjFh
NjA5NzY2Zi4uMDQ2ZDJjMDk2MzhmODhhMDgxZGE1NDZkNTViMTgxMjc2OWViYWVmYiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcApAQCAtMjk1LDcgKzI5NSw3IEBAIHN0YXRpYyBXaWRnZXQqIHdpZGdldEZvck5vZGUoTm9k
ZSogZm9jdXNlZE5vZGUpCiB7CiAgICAgaWYgKCFmb2N1c2VkTm9kZSkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGZvY3VzZWROb2RlLT5yZW5kZXJlcigp
OworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciA9IGZvY3VzZWROb2RlLT5yZW5k
ZXJCb3hNb2RlbE9iamVjdCgpOwogICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc1dp
ZGdldCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gdG9SZW5kZXJXaWRnZXQocmVu
ZGVyZXIpLT53aWRnZXQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1RleHQuY3BwIGIvV2Vi
Q29yZS9kb20vVGV4dC5jcHAKaW5kZXggOTI4Yjk3NTk2ZTU2OTliNTc5ZjkzYWE4NTNlNWJlNWJl
YjE4ZjAzOC4uZjA1ZmY5MGU1Y2I4ZGY1NGU1NTQyYzM3YTM0YTllNDBmYmQwNzVjMSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9kb20vVGV4dC5jcHAKKysrIGIvV2ViQ29yZS9kb20vVGV4dC5jcHAKQEAg
LTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJUZXh0LmgiCiAKICNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94TW9kZWxPYmplY3QuaCIKICNpbmNsdWRlICJSZW5k
ZXJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CkBAIC0yMDIsOSArMjAzLDEwIEBAIGJvb2wgVGV4dDo6cmVuZGVyZXJJ
c05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUpCiAgICAgaWYgKCFvbmx5V1MpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgUmVuZGVyT2JqZWN0ICpwYXIgPSBwYXJlbnROb2RlKCktPnJlbmRl
cmVyKCk7CisgICAgUmVuZGVyT2JqZWN0KiBwYXIgPSBwYXJlbnROb2RlKCktPnJlbmRlcmVyKCk7
CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHBhcmVudE5vZGUoKS0+cmVuZGVyQm94
TW9kZWxPYmplY3QoKTsKICAgICAKLSAgICBpZiAocGFyLT5pc1RhYmxlKCkgfHwgcGFyLT5pc1Rh
YmxlUm93KCkgfHwgcGFyLT5pc1RhYmxlU2VjdGlvbigpIHx8IHBhci0+aXNUYWJsZUNvbCgpIHx8
IHBhci0+aXNGcmFtZVNldCgpKQorICAgIGlmIChib3gtPmlzVGFibGUoKSB8fCBib3gtPmlzVGFi
bGVSb3coKSB8fCBib3gtPmlzVGFibGVTZWN0aW9uKCkgfHwgYm94LT5pc1RhYmxlQ29sKCkgfHwg
Ym94LT5pc0ZyYW1lU2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBpZiAo
c3R5bGUtPnByZXNlcnZlTmV3bGluZSgpKSAvLyBwcmUvcHJlLXdyYXAvcHJlLWxpbmUgYWx3YXlz
IG1ha2UgcmVuZGVyZXJzLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVk
aXRDb21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAK
aW5kZXggYzVhODk1OTNlM2RiMDJjNDBkNjhiNGU1ODQxMDdkMzE4NzY1OWUyZS4uZDhjMGIzNmFk
OGU2Zjg5ZDZkNzI3ZWVhNTQ4OWFkMzg0Mjk4Y2YxOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0
aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuY3BwCkBAIC02MDUsNyArNjA1LDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6YWRkQmxvY2tQbGFjZWhvbGRlcklmTmVlZGVkKEVsZW1lbnQq
IGNvbnQKIAogICAgIHVwZGF0ZUxheW91dCgpOwogCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IGNvbnRhaW5lci0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVu
ZGVyZXIgPSBjb250YWluZXItPnJlbmRlckJveE1vZGVsT2JqZWN0KCk7CiAgICAgaWYgKCFyZW5k
ZXJlciB8fCAhcmVuZGVyZXItPmlzQmxvY2tGbG93KCkpCiAgICAgICAgIHJldHVybiAwOwogICAg
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3Bw
IGIvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCmluZGV4IDhiMjNl
YWEwNDIwYzYyOGEwOGNhYmI0Y2E5NTBjZWFhMDlkNTEyMGQuLjdlYzE4YTU3OGZmZDgzZTZlMjhj
NWY3MjZlOTc2YTY3YzA5YTViYWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9EZWxldGVC
dXR0b25Db250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29u
dHJvbGxlci5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgc3RhdGljIGJvb2wgaXNEZWxldGFibGVFbGVt
ZW50KGNvbnN0IE5vZGUqIG5vZGUpCiAgICAgaWYgKChib3JkZXJCb3VuZGluZ0JveC53aWR0aCgp
ICogYm9yZGVyQm91bmRpbmdCb3guaGVpZ2h0KCkpIDwgbWluaW11bUFyZWEpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGlmIChyZW5kZXJlci0+aXNUYWJsZSgpKQorICAgIGlmIChib3gt
PmlzVGFibGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAobm9kZS0+aGFzVGFn
TmFtZSh1bFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShvbFRhZykgfHwgbm9kZS0+aGFzVGFnTmFt
ZShpZnJhbWVUYWcpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5j
cHAgYi9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCBmM2JkOWRmNmI5Zjk1
YmYzMGRkYTJhMzBlNzI2ZDczNWYxOGY4YjFmLi40OWM5Y2UxZjJlYTdkYzUzNWIzNDdjYTNhMzgy
NjBjNjU0ZmFiZWNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNw
cAorKysgYi9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtNzM4LDkgKzczOCwx
MCBAQCBzdGF0aWMgaW50IG1heE9mZnNldEluY2x1ZGluZ0NvbGxhcHNlZFNwYWNlcyhOb2RlKiBu
b2RlKQogLy8gV2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIGVtaXQgYSBjaGFyYWN0ZXIgYXMgd2Ug
ZW50ZXIgbV9ub2RlIChpZiBpdCdzIGEgY29udGFpbmVyKSBvciBhcyB3ZSBoaXQgaXQgKGlmIGl0
J3MgYXRvbWljKS4KIGJvb2wgVGV4dEl0ZXJhdG9yOjpzaG91bGRSZXByZXNlbnROb2RlT2Zmc2V0
WmVybygpCiB7Ci0gICAgaWYgKG1fZW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3Np
dGlvbnMgJiYgbV9ub2RlLT5yZW5kZXJlcigpICYmIG1fbm9kZS0+cmVuZGVyZXIoKS0+aXNUYWJs
ZSgpKQorICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBjc3NCb3ggPSBtX25vZGUtPnJlbmRlckJv
eE1vZGVsT2JqZWN0KCk7CisgICAgaWYgKG1fZW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2li
bGVQb3NpdGlvbnMgJiYgY3NzQm94ICYmIGNzc0JveC0+aXNUYWJsZSgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgCisKICAgICAvLyBMZWF2ZSBlbGVtZW50IHBvc2l0aW9uZWQgZmx1
c2ggd2l0aCBzdGFydCBvZiBhIHBhcmFncmFwaAogICAgIC8vIChlLmcuIGRvIG5vdCBpbnNlcnQg
dGFiIGJlZm9yZSBhIHRhYmxlIGNlbGwgYXQgdGhlIHN0YXJ0IG9mIGEgcGFyYWdyYXBoKQogICAg
IGlmIChtX2xhc3RDaGFyYWN0ZXIgPT0gJ1xuJykKQEAgLTc5Myw3ICs3OTQsOCBAQCBib29sIFRl
eHRJdGVyYXRvcjo6c2hvdWxkUmVwcmVzZW50Tm9kZU9mZnNldFplcm8oKQogCiBib29sIFRleHRJ
dGVyYXRvcjo6c2hvdWxkRW1pdFNwYWNlQmVmb3JlQW5kQWZ0ZXJOb2RlKE5vZGUqIG5vZGUpCiB7
Ci0gICAgcmV0dXJuIG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNUYWJs
ZSgpICYmIChub2RlLT5yZW5kZXJlcigpLT5pc0lubGluZSgpIHx8IG1fZW1pdHNDaGFyYWN0ZXJz
QmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBy
ZW5kZXJlciA9IG5vZGUtPnJlbmRlckJveE1vZGVsT2JqZWN0KCk7CisgICAgcmV0dXJuIHJlbmRl
cmVyICYmIHJlbmRlcmVyLT5pc1RhYmxlKCkgJiYgKHJlbmRlcmVyLT5pc0lubGluZSgpIHx8IG1f
ZW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOwogfQogCiB2b2lkIFRl
eHRJdGVyYXRvcjo6cmVwcmVzZW50Tm9kZU9mZnNldFplcm8oKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1h
bmQuY3BwCmluZGV4IDc2ODAwODQ4ZGFiZWIwZjFhYjBkMjEzOWI5YTZlMTIzMTAyMDg0ZjMuLmU5
NTlkZjAzMDNkODYwNWRjZTc2OTIzM2IzODY1NWJjNDgxYTczNmYgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvVHlwaW5n
Q29tbWFuZC5jcHAKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJJbnNlcnRMaW5lQnJlYWtD
b21tYW5kLmgiCiAjaW5jbHVkZSAiSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5oIgog
I2luY2x1ZGUgIkluc2VydFRleHRDb21tYW5kLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0Lmgi
CisjaW5jbHVkZSAiUmVuZGVyQm94TW9kZWxPYmplY3QuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25D
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiaHRt
bGVkaXRpbmcuaCIKQEAgLTM5OCw3ICszOTgsOCBAQCBib29sIFR5cGluZ0NvbW1hbmQ6Om1ha2VF
ZGl0YWJsZVJvb3RFbXB0eSgpCiAKICAgICBpZiAocm9vdC0+Zmlyc3RDaGlsZCgpID09IHJvb3Qt
Pmxhc3RDaGlsZCgpICYmIHJvb3QtPmZpcnN0RWxlbWVudENoaWxkKCkgJiYgcm9vdC0+Zmlyc3RF
bGVtZW50Q2hpbGQoKS0+aGFzVGFnTmFtZShiclRhZykpIHsKICAgICAgICAgLy8gSWYgdGhlcmUg
aXMgYSBzaW5nbGUgY2hpbGQgYW5kIGl0IGNvdWxkIGJlIGEgcGxhY2Vob2xkZXIsIGxlYXZlIGl0
IGFsb25lLgotICAgICAgICBpZiAocm9vdC0+cmVuZGVyZXIoKSAmJiByb290LT5yZW5kZXJlcigp
LT5pc0Jsb2NrRmxvdygpKQorICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogcm9vdFJlbmRl
cmVyID0gcm9vdC0+cmVuZGVyQm94TW9kZWxPYmplY3QoKTsKKyAgICAgICAgaWYgKHJvb3RSZW5k
ZXJlciAmJiByb290UmVuZGVyZXItPmlzQmxvY2tGbG93KCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcu
Y3BwIGIvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAppbmRleCA1M2I1ZDdlNjg5OTBh
NDg3NTE3MGZiZjMxZDdjNzBjYjhjOWM4ZmMzLi40M2UxODcxOTQ3MzEzMTlhMTg5M2QyYjViNGU1
MmUzZmRjYTAxYjAxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3Bw
CisrKyBiL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKQEAgLTE3MSwxNiArMTcxLDI1
IEBAIE5vZGUqIGxvd2VzdEVkaXRhYmxlQW5jZXN0b3IoTm9kZSogbm9kZSkKICAgICByZXR1cm4g
bG93ZXN0Um9vdDsKIH0KIAorc3RhdGljIE5vZGUqIG5vZGVPclBhcmVudE5vZGVJZlRhYmxlKE5v
ZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUpOworICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhp
cyBjb3JyZWN0PyAgV2UncmUgZGVhbGluZyB3aXRoIHBvc2l0aW9ucyB3aGljaCBtYXkKKyAgICAv
LyBub3QgYmUgcmVuZGVyZWQuICBXaHkgaXMgaXQgcmlnaHQgdG8gY2hlY2sgdGhlIHJlbmRlcmVy
IGhlcmU/CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVy
Qm94TW9kZWxPYmplY3QoKTsKKyAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzVGFibGUo
KSkKKyAgICAgICAgcmV0dXJuIG5vZGUtPnBhcmVudE5vZGUoKTsKKworICAgIHJldHVybiBub2Rl
OworfQorCiBib29sIGlzRWRpdGFibGVQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcCkKIHsKICAg
ICBOb2RlKiBub2RlID0gcC5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIAotICAgIGlmIChub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRl
cmVyKCktPmlzVGFibGUoKSkKLSAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKICAg
ICAKLSAgICByZXR1cm4gbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKTsKKyAgICByZXR1cm4gbm9k
ZU9yUGFyZW50Tm9kZUlmVGFibGUobm9kZSktPmlzQ29udGVudEVkaXRhYmxlKCk7CiB9CiAKIGJv
b2wgaXNBdFVuc3BsaXR0YWJsZUVsZW1lbnQoY29uc3QgUG9zaXRpb24mIHBvcykKQEAgLTE5NSwx
MSArMjA0LDggQEAgYm9vbCBpc1JpY2hseUVkaXRhYmxlUG9zaXRpb24oY29uc3QgUG9zaXRpb24m
IHApCiAgICAgTm9kZSogbm9kZSA9IHAubm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICBpZiAobm9kZS0+cmVuZGVyZXIoKSAmJiBub2Rl
LT5yZW5kZXJlcigpLT5pc1RhYmxlKCkpCi0gICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2Rl
KCk7Ci0gICAgCi0gICAgcmV0dXJuIG5vZGUtPmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7CisK
KyAgICByZXR1cm4gbm9kZU9yUGFyZW50Tm9kZUlmVGFibGUobm9kZSktPmlzQ29udGVudFJpY2hs
eUVkaXRhYmxlKCk7CiB9CiAKIEVsZW1lbnQqIGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKGNvbnN0
IFBvc2l0aW9uJiBwKQpAQCAtMjA3LDExICsyMTMsOCBAQCBFbGVtZW50KiBlZGl0YWJsZVJvb3RG
b3JQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcCkKICAgICBOb2RlKiBub2RlID0gcC5ub2RlKCk7
CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgCi0gICAgaWYgKG5v
ZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpKQotICAgICAgICBu
b2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwotICAgIAotICAgIHJldHVybiBub2RlLT5yb290RWRp
dGFibGVFbGVtZW50KCk7CisKKyAgICByZXR1cm4gbm9kZU9yUGFyZW50Tm9kZUlmVGFibGUobm9k
ZSktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIAogLy8gRmluZHMgdGhlIGVuY2xvc2luZyBl
bGVtZW50IHVudGlsIHdoaWNoIHRoZSB0cmVlIGNhbiBiZSBzcGxpdC4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxl
bWVudC5jcHAKaW5kZXggMmQ3MTRiYWNjZTQ0NzhiNDNkNWQ3OTIzNjg3ZDUzYjJjMjk2ZDc4MS4u
ZDFiOTc4MmE1ZWU0NGE4ZmVlYzBhNWM2MjlhNjM4ZjVmNDdjYmZmNiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxBcmVh
RWxlbWVudC5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNp
bmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiUGF0aC5oIgotI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlckJveE1vZGVsT2JqZWN0LmgiCiAKIHVzaW5n
IG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTIwMyw3ICsyMDMsNyBAQCB2b2lkIEhUTUxBcmVhRWxlbWVu
dDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKGJvb2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKQog
ICAgIC8vIFRoaXMgd2lsbCBoYW5kbGUgc2Nyb2xsaW5nIHRvIHRoZSBpbWFnZSBpZiBuZWNlc3Nh
cnkuCiAgICAgaW1hZ2VFbGVtZW50LT51cGRhdGVGb2N1c0FwcGVhcmFuY2UocmVzdG9yZVByZXZp
b3VzU2VsZWN0aW9uKTsKICAgICAKLSAgICBSZW5kZXJPYmplY3QqIGltYWdlUmVuZGVyZXIgPSBp
bWFnZUVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGltYWdl
UmVuZGVyZXIgPSBpbWFnZUVsZW1lbnQtPnJlbmRlcmVyKCk7CiAgICAgaWYgKGltYWdlUmVuZGVy
ZXIpCiAgICAgICAgIGltYWdlUmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KHRydWUpOwogfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcCBiL1dlYkNvcmUv
aHRtbC9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKaW5kZXggMGIxNzA4NmZlZDNiYjQ3MGEzYjI3
ZDkwYmRhY2U3YWJiZmMwZjM0ZS4uNDJjYmQ0ZWNiNDVlM2RkYjM5MDM0ZDc3ZmEyNTBjYzZhYjRi
ZTY3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAor
KysgYi9XZWJDb3JlL2h0bWwvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCkBAIC00MiwxMyArNDIs
OSBAQAogI2luY2x1ZGUgIkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUgIkxl
Z2FjeUhUTUxUcmVlQnVpbGRlci5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKLSNp
ZiBFTkFCTEUoTUFUSE1MKQogI2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgiCi0jZW5kaWYKICNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKLSNlbmRpZgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHQuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9I
VE1MRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCmluZGV4IGZiMWJj
YzIyMGNlNTg3YTk1OTI3ZDQ0ZjBjZDJiNzI4NTU3M2U0MGQuLmQwZDhiZjhjODNjMzQxODEzNjZk
N2RhYzFiNzY5MzU3NjEzNmJjY2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVu
dC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApAQCAtMTAwNiw2ICsxMDA2
LDExIEBAIFJlbmRlck9iamVjdCogSFRNTEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFy
ZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqIHN0eWxlCiAgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6
Y3JlYXRlT2JqZWN0KHRoaXMsIHN0eWxlKTsKIH0KIAorUmVuZGVyQm94TW9kZWxPYmplY3QqIEhU
TUxFbGVtZW50OjpyZW5kZXJlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRvUmVuZGVyQm94TW9k
ZWxPYmplY3QoU3R5bGVkRWxlbWVudDo6cmVuZGVyZXIoKSk7Cit9CisKIEhUTUxGb3JtRWxlbWVu
dCogSFRNTEVsZW1lbnQ6OmZpbmRGb3JtQW5jZXN0b3IoKSBjb25zdAogewogICAgIGZvciAoTm9k
ZSogYW5jZXN0b3IgPSBwYXJlbnROb2RlKCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9y
LT5wYXJlbnROb2RlKCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaCBi
L1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCmluZGV4IDAzNDQ5Yzk4NWFlMDQyNzU1NTFkNzgx
ZGQyMGZkZGM2NDlhZWMxNzIuLmFkMWUxZDFlNTgzNDY3NzBiNzlhMGE2Yjk0YjQ1N2Y2YWQ0Njg0
YjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCisrKyBiL1dlYkNvcmUv
aHRtbC9IVE1MRWxlbWVudC5oCkBAIC03Nyw2ICs3Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOwogICAgIHZpcnR1YWwgUmVuZGVy
T2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CiAKKyAg
ICBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIoKSBjb25zdDsKKwogICAgIEhUTUxGb3Jt
RWxlbWVudCogZm9ybSgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxGb3JtKCk7IH0KIAogICAgIHN0
YXRpYyB2b2lkIGFkZEhUTUxBbGlnbm1lbnRUb1N0eWxlZEVsZW1lbnQoU3R5bGVkRWxlbWVudCos
IEF0dHJpYnV0ZSopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQu
Y3BwIGIvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCmluZGV4IDNmNzAwZWZjNDg2
MzcyMDBjNjRmYWU2MWMxMjFmZWYxMTAwYjU3ODkuLmE5YmI2OWQ2ZTUxMjk2YzNjNTcwYjc4ZDYy
NTRiMmI3ZDc4MDBjZmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAKQEAgLTU2LDE1ICs1
NiwyMCBAQCBQYXNzUmVmUHRyPEhUTUxFbWJlZEVsZW1lbnQ+IEhUTUxFbWJlZEVsZW1lbnQ6OmNy
ZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYQogCiBzdGF0aWMgaW5saW5lIFJlbmRlcldp
ZGdldCogZmluZFdpZGdldFJlbmRlcmVyKGNvbnN0IE5vZGUqIG4pIAogewotICAgIGlmICghbi0+
cmVuZGVyZXIoKSkKKyAgICBpZiAoIW4tPnJlbmRlcmVyKCkpIHsKICAgICAgICAgZG8KICAgICAg
ICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7CiAgICAgICAgIHdoaWxlIChuICYmICFuLT5oYXNU
YWdOYW1lKG9iamVjdFRhZykpOwogCi0gICAgaWYgKG4gJiYgbi0+cmVuZGVyZXIoKSAmJiBuLT5y
ZW5kZXJlcigpLT5pc1dpZGdldCgpKQotICAgICAgICByZXR1cm4gdG9SZW5kZXJXaWRnZXQobi0+
cmVuZGVyZXIoKSk7CisgICAgICAgIGlmICghbikKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciA9IG4tPnJlbmRlckJveE1v
ZGVsT2JqZWN0KCk7CisgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzV2lkZ2V0KCkp
CisgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHRvUmVuZGVy
V2lkZ2V0KHJlbmRlcmVyKTsKIH0KIAogUmVuZGVyV2lkZ2V0KiBIVE1MRW1iZWRFbGVtZW50Ojpy
ZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRt
bC9IVE1MRm9ybUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAK
aW5kZXggZDc1ZGUwMWIzNDc3YWE2Yzc2M2ZkZDM2Yzg4Yjc3MThmN2RlZTYyOC4uMmVhODI4MjZl
YWU2YTM2MTg0MmFjMWE0ZWRlZDVjMjliNTZjZWViYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1s
L0hUTUxGb3JtRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5j
cHAKQEAgLTEwMiwyMCArMTAyLDI2IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50Ojpmb3JtV291bGRI
YXZlU2VjdXJlU3VibWlzc2lvbihjb25zdCBTdHJpbmcmIHVybCkKICAgICByZXR1cm4gZG9jdW1l
bnQoKS0+Y29tcGxldGVVUkwodXJsKS5wcm90b2NvbElzKCJodHRwcyIpOwogfQogCi1ib29sIEhU
TUxGb3JtRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUpCisvLyBG
SVhNRTogSXMgdGhpcyBuZWVkZWQgd2l0aCB0aGUgbmV3IEhUTUw1IHBhcnNlcj8gIEkgZG9uJ3Qg
dGhpbmsgc28uCitzdGF0aWMgYm9vbCBwYXJlbnRJc1RhYmxlRWxlbWVudFBhcnQoSFRNTEZvcm1F
bGVtZW50KiBmb3JtKQogewotICAgIGlmICghaXNEZW1vdGVkKCkpCi0gICAgICAgIHJldHVybiBI
VE1MRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7Ci0gICAgCi0gICAgTm9kZSogbm9k
ZSA9IHBhcmVudE5vZGUoKTsKLSAgICBSZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyID0gbm9k
ZS0+cmVuZGVyZXIoKTsKLSAgICBib29sIHBhcmVudElzVGFibGVFbGVtZW50UGFydCA9IChwYXJl
bnRSZW5kZXJlci0+aXNUYWJsZSgpICYmIG5vZGUtPmhhc1RhZ05hbWUodGFibGVUYWcpKQorICAg
IE5vZGUqIG5vZGUgPSBmb3JtLT5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFub2RlLT5yZW5kZXJl
cigpLT5pc0JveE1vZGVsT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBSZW5k
ZXJCb3hNb2RlbE9iamVjdCogcGFyZW50UmVuZGVyZXIgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0
KG5vZGUtPnJlbmRlcmVyKCkpOworICAgIHJldHVybiAocGFyZW50UmVuZGVyZXItPmlzVGFibGUo
KSAmJiBub2RlLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkKICAgICAgICAgfHwgKHBhcmVudFJlbmRl
cmVyLT5pc1RhYmxlUm93KCkgJiYgbm9kZS0+aGFzVGFnTmFtZSh0clRhZykpCiAgICAgICAgIHx8
IChwYXJlbnRSZW5kZXJlci0+aXNUYWJsZVNlY3Rpb24oKSAmJiBub2RlLT5oYXNUYWdOYW1lKHRi
b2R5VGFnKSkKICAgICAgICAgfHwgKHBhcmVudFJlbmRlcmVyLT5pc1RhYmxlQ29sKCkgJiYgbm9k
ZS0+aGFzVGFnTmFtZShjb2xUYWcpKSAKICAgICAgICAgfHwgKHBhcmVudFJlbmRlcmVyLT5pc1Rh
YmxlQ2VsbCgpICYmIG5vZGUtPmhhc1RhZ05hbWUodHJUYWcpKTsKK30KKworYm9vbCBIVE1MRm9y
bUVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqIHN0eWxlKQoreworICAgIGlm
ICghaXNEZW1vdGVkKCkpCisgICAgICAgIHJldHVybiBIVE1MRWxlbWVudDo6cmVuZGVyZXJJc05l
ZWRlZChzdHlsZSk7CiAKLSAgICBpZiAoIXBhcmVudElzVGFibGVFbGVtZW50UGFydCkKKyAgICBp
ZiAoIXBhcmVudElzVGFibGVFbGVtZW50UGFydCh0aGlzKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKICAgICBFRGlzcGxheSBkaXNwbGF5ID0gc3R5bGUtPmRpc3BsYXkoKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTFBs
dWdJbkVsZW1lbnQuY3BwCmluZGV4IDZiMTE5NjFmMDYzYTc0NjZmYTdhYzMwMzMyMDhkNzhlY2Zm
ZmMyYzkuLjQzZjhmNGEyODA0ODliMTMyNzY0MTQwOWI1MDFmNTM0MzIzMjhhNjUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1s
L0hUTUxQbHVnSW5FbGVtZW50LmNwcApAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgSFRNTFBsdWdJ
bkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogCiAgICAgLy8gRklY
TUU6IE1vdXNlIGRvd24gYW5kIHNjcm9sbCBldmVudHMgYXJlIHBhc3NlZCBkb3duIHRvIHBsdWct
aW4gdmlhIGN1c3RvbSBjb2RlIGluIEV2ZW50SGFuZGxlcjsgdGhlc2UgY29kZSBwYXRocyBzaG91
bGQgYmUgdW5pdGVkLgogCi0gICAgUmVuZGVyT2JqZWN0KiByID0gcmVuZGVyZXIoKTsKKyAgICBS
ZW5kZXJCb3hNb2RlbE9iamVjdCogciA9IHJlbmRlcmVyKCk7CiAgICAgaWYgKHIgJiYgci0+aXNF
bWJlZGRlZE9iamVjdCgpICYmIHRvUmVuZGVyRW1iZWRkZWRPYmplY3QociktPnNob3dzTWlzc2lu
Z1BsdWdpbkluZGljYXRvcigpKSB7CiAgICAgICAgIHRvUmVuZGVyRW1iZWRkZWRPYmplY3Qocikt
PmhhbmRsZU1pc3NpbmdQbHVnaW5JbmRpY2F0b3JFdmVudChldmVudCk7CiAgICAgICAgIHJldHVy
bjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcCBiL1dlYkNvcmUv
bG9hZGVyL0ltYWdlTG9hZGVyLmNwcAppbmRleCBkMTY5ZDNlNjdhZWFmZTI5NTczZjM1ODk0YThk
YzhmYmJhMTdkMDBkLi4wZTJkZjFiODI2ODVhNjA3ZWEwZjkwYWE0ZWZmNGQ5ZGJiZmU2ZDRiIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5jcHAKKysrIGIvV2ViQ29yZS9s
b2FkZXIvSW1hZ2VMb2FkZXIuY3BwCkBAIC0xMzAsNyArMTMwLDcgQEAgdm9pZCBJbWFnZUxvYWRl
cjo6c2V0SW1hZ2UoQ2FjaGVkSW1hZ2UqIG5ld0ltYWdlKQogICAgICAgICAgICAgb2xkSW1hZ2Ut
PnJlbW92ZUNsaWVudCh0aGlzKTsKICAgICB9CiAKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IG1fZWxlbWVudC0+cmVuZGVyZXIoKSkgeworICAgIGlmIChSZW5kZXJCb3hNb2RlbE9i
amVjdCogcmVuZGVyZXIgPSBtX2VsZW1lbnQtPnJlbmRlckJveE1vZGVsT2JqZWN0KCkpIHsKICAg
ICAgICAgaWYgKCFyZW5kZXJlci0+aXNJbWFnZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB0b1JlbmRlckltYWdlKHJlbmRlcmVyKS0+cmVzZXRBbmltYXRpb24oKTsKQEAgLTE5NSw3
ICsxOTUsNyBAQCB2b2lkIEltYWdlTG9hZGVyOjp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAg
ICAgICBvbGRJbWFnZS0+cmVtb3ZlQ2xpZW50KHRoaXMpOwogICAgIH0KIAotICAgIGlmIChSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gbV9lbGVtZW50LT5yZW5kZXJlcigpKSB7CisgICAgaWYgKFJl
bmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciA9IG1fZWxlbWVudC0+cmVuZGVyQm94TW9kZWxP
YmplY3QoKSkgewogICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc0ltYWdlKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIHRvUmVuZGVySW1hZ2UocmVuZGVyZXIpLT5yZXNldEFuaW1hdGlv
bigpOwpAQCAtMjI1LDcgKzIyNSw3IEBAIHZvaWQgSW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVk
KENhY2hlZFJlc291cmNlKikKIAogdm9pZCBJbWFnZUxvYWRlcjo6dXBkYXRlUmVuZGVyZXIoKQog
ewotICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9lbGVtZW50LT5yZW5kZXJlcigp
KSB7CisgICAgaWYgKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciA9IG1fZWxlbWVudC0+
cmVuZGVyQm94TW9kZWxPYmplY3QoKSkgewogICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc0ltYWdl
KCkgJiYgIXJlbmRlcmVyLT5pc1ZpZGVvKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IFJlbmRlckltYWdlKiBpbWFnZVJlbmRlcmVyID0gdG9SZW5kZXJJbWFnZShyZW5kZXJlcik7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcCBiL1dlYkNvcmUvcGFnZS9DaHJvbWUu
Y3BwCmluZGV4IGJmZjAxMDAyNTdiMThmZjNmNGVmYWRmZDk2Y2YwMWE0ODViMWU5ODIuLjhlZDE4
ZDkxNWRjOGQ3MzdhOWQ2ZTYwYjg2ZjUzOWI4MzIxYTRiNzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGFnZS9DaHJvbWUuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCkBAIC0zNiw3ICsz
Niw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJP
YmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJCb3hNb2RlbE9iamVjdC5oIgogI2luY2x1ZGUgIlJl
c291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xs
ZXIuY3BwIGIvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCBkOTNhMjU2ZTk2
ZTUwYjQ5NGE4NDVjZTJjMjljZDRiNDI5YWQ1OWRiLi5hNjg2ZDdkNDNmZmQwYjhkMmY4ODFiZWZm
ZTkwOThhYmNlZTNhMjYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIu
Y3BwCisrKyBiL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKQEAgLTU4Miw3ICs1ODIs
NyBAQCBib29sIERyYWdDb250cm9sbGVyOjptYXlTdGFydERyYWdBdEV2ZW50TG9jYXRpb24oY29u
c3QgRnJhbWUqIGZyYW1lLCBjb25zdCBJbnRQbwogc3RhdGljIENhY2hlZEltYWdlKiBnZXRDYWNo
ZWRJbWFnZShFbGVtZW50KiBlbGVtZW50KQogewogICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJC
b3hNb2RlbE9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJCb3hNb2RlbE9iamVjdCgp
OwogICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0ltYWdlKCkpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIFJlbmRlckltYWdlKiBpbWFnZSA9IHRvUmVuZGVySW1hZ2UocmVuZGVyZXIp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBlMTBhM2ExYzZkODRmNWMzYTFhYTA0ZTEzZWRjZDMy
ZjAwMDhhMWFjLi4zNzJjMjIzZmQ0NjI2NDU0ZDJkZTMwNjZmMDMyNTNlMTZhMGI4ZWZmIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcApAQCAtODc0LDkgKzg3NCwxMiBAQCBIaXRUZXN0UmVzdWx0IEV2ZW50
SGFuZGxlcjo6aGl0VGVzdFJlc3VsdEF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50LCBib29s
IGFsbAogCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgTm9kZSogbiA9IHJlc3VsdC5pbm5l
ck5vZGUoKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuaXNPdmVyV2lkZ2V0KCkgfHwgIW4gfHwgIW4t
PnJlbmRlcmVyKCkgfHwgIW4tPnJlbmRlcmVyKCktPmlzV2lkZ2V0KCkpCisgICAgICAgIGlmICgh
cmVzdWx0LmlzT3ZlcldpZGdldCgpIHx8ICFuKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0ID0gdG9SZW5kZXJXaWRnZXQobi0+cmVuZGVyZXIo
KSk7CisgICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBjc3NCb3ggPSBuLT5yZW5kZXJCb3hN
b2RlbE9iamVjdCgpOworICAgICAgICBpZiAoIWNzc0JveCB8fCAhY3NzQm94LT5pc1dpZGdldCgp
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0
ID0gdG9SZW5kZXJXaWRnZXQoY3NzQm94KTsKICAgICAgICAgV2lkZ2V0KiB3aWRnZXQgPSByZW5k
ZXJXaWRnZXQtPndpZGdldCgpOwogICAgICAgICBpZiAoIXdpZGdldCB8fCAhd2lkZ2V0LT5pc0Zy
YW1lVmlldygpKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDMxLDcgKzEwMzQsNyBAQCBGcmFt
ZSogRXZlbnRIYW5kbGVyOjpzdWJmcmFtZUZvclRhcmdldE5vZGUoTm9kZSogbm9kZSkKICAgICBp
ZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVy
ID0gbm9kZS0+cmVuZGVyQm94TW9kZWxPYmplY3QoKTsKICAgICBpZiAoIXJlbmRlcmVyIHx8ICFy
ZW5kZXJlci0+aXNXaWRnZXQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTEwNjUsNyArMTA2
OCw3IEBAIEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50
V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCwgU2NyCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IG5vZGUgPyBub2RlLT5yZW5kZXJlcigpIDogMDsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSByZW5kZXJlciA/IHJlbmRlcmVyLT5zdHlsZSgpIDogMDsKIAotICAgIGlmIChyZW5kZXJlciAm
JiByZW5kZXJlci0+aXNGcmFtZVNldCgpKSB7CisgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVy
LT5pc0JveE1vZGVsT2JqZWN0KCkgJiYgdG9SZW5kZXJCb3hNb2RlbE9iamVjdChyZW5kZXJlcikt
PmlzRnJhbWVTZXQoKSkgewogICAgICAgICBSZW5kZXJGcmFtZVNldCogZnJhbWVTZXRSZW5kZXJl
ciA9IHRvUmVuZGVyRnJhbWVTZXQocmVuZGVyZXIpOwogICAgICAgICBpZiAoZnJhbWVTZXRSZW5k
ZXJlci0+Y2FuUmVzaXplUm93KGV2ZW50LmxvY2FsUG9pbnQoKSkpCiAgICAgICAgICAgICByZXR1
cm4gcm93UmVzaXplQ3Vyc29yKCk7CkBAIC0yNzY2LDcgKzI3NjksNyBAQCB2b2lkIEV2ZW50SGFu
ZGxlcjo6Y2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCkKIHsKICAgICBEb2N1bWVudCogZCA9
IG1fZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgaWYgKE5vZGUqIG5vZGUgPSBkLT5mb2N1c2VkTm9k
ZSgpKSB7Ci0gICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHIgPSBub2RlLT5yZW5kZXJlcigpKSB7
CisgICAgICAgIGlmIChSZW5kZXJCb3hNb2RlbE9iamVjdCogciA9IG5vZGUtPnJlbmRlckJveE1v
ZGVsT2JqZWN0KCkpIHsKICAgICAgICAgICAgIGlmIChyLT5pc1RleHRGaWVsZCgpKQogICAgICAg
ICAgICAgICAgIHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKHIpLT5jYXBzTG9ja1N0YXRl
TWF5SGF2ZUNoYW5nZWQoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0Zy
YW1lLmNwcCBiL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggMDZjZGRiMWYwMDMzM2MwMmJl
YmExOWY1N2JmMTUwNGI2ZGZmYWJhNy4uOTg3ODU2ZWE0ZTU3NjU0ZTQwODM5NTJjNDUxMDk2NWEz
MTdkNDgyYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9XZWJDb3Jl
L3BhZ2UvRnJhbWUuY3BwCkBAIC01NTYsNyArNTU2LDcgQEAgc3RhdGljIGJvb2wgaXNGcmFtZUVs
ZW1lbnQoY29uc3QgTm9kZSAqbikKIHsKICAgICBpZiAoIW4pCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gbi0+cmVuZGVyZXIoKTsKKyAgICBSZW5k
ZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIgPSBuLT5yZW5kZXJCb3hNb2RlbE9iamVjdCgpOwog
ICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc1dpZGdldCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgV2lkZ2V0KiB3aWRnZXQgPSB0b1JlbmRlcldpZGdldChyZW5kZXJlcikt
PndpZGdldCgpOwpAQCAtOTYxLDcgKzk2MSw3IEBAIFJlbmRlclBhcnQqIEZyYW1lOjpvd25lclJl
bmRlcmVyKCkgY29uc3QKICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCA9
IG1fb3duZXJFbGVtZW50OwogICAgIGlmICghb3duZXJFbGVtZW50KQogICAgICAgICByZXR1cm4g
MDsKLSAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IG93bmVyRWxlbWVudC0+cmVuZGVyZXIoKTsK
KyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogb2JqZWN0ID0gb3duZXJFbGVtZW50LT5yZW5kZXJC
b3hNb2RlbE9iamVjdCgpOwogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4gMDsKICAg
ICAvLyBGSVhNRTogSWYgPG9iamVjdD4gaXMgZXZlciBmaXhlZCB0byBkaXNhc3NvY2lhdGUgaXRz
ZWxmIGZyb20gZnJhbWVzCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxl
ck1hYy5tbSBiL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCmluZGV4IGJiNDY2
ZGIxMWE2ZjRjZDdmM2MxMWM0NjdlNDI2OTZmYmFkMGFjMDMuLmJmNDRjOWFiNmU4ZDYzZGRkMTYy
ODcxZjU3OTVlZjM2MWI5MzZiYjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRI
YW5kbGVyTWFjLm1tCisrKyBiL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCkBA
IC0xNjgsMTEgKzE2OCwxMyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6Zm9jdXNEb2N1bWVudFZpZXco
KQogCiBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQo
Y29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQpCiB7CisgICAgaWYgKCFl
dmVudC50YXJnZXROb2RlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAvLyBGaWd1cmUg
b3V0IHdoaWNoIHZpZXcgdG8gc2VuZCB0aGUgZXZlbnQgdG8uCi0gICAgUmVuZGVyT2JqZWN0KiB0
YXJnZXQgPSBldmVudC50YXJnZXROb2RlKCkgPyBldmVudC50YXJnZXROb2RlKCktPnJlbmRlcmVy
KCkgOiAwOworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiB0YXJnZXQgPSAgZXZlbnQudGFyZ2V0
Tm9kZSgpLT5yZW5kZXJCb3hNb2RlbE9iamVjdCgpOwogICAgIGlmICghdGFyZ2V0IHx8ICF0YXJn
ZXQtPmlzV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIC8vIERv
dWJsZS1jbGljayBldmVudHMgZG9uJ3QgZXhpc3QgaW4gQ29jb2EuIFNpbmNlIHBhc3NXaWRnZXRN
b3VzZURvd25FdmVudFRvV2lkZ2V0IHdpbGwKICAgICAvLyBqdXN0IHBhc3MgY3VycmVudEV2ZW50
IGRvd24gdG8gdGhlIHdpZGdldCwgd2UgZG9uJ3Qgd2FudCB0byBjYWxsIGl0IGZvciBldmVudHMg
dGhhdAogICAgIC8vIGRvbid0IGNvcnJlc3BvbmQgdG8gQ29jb2EgZXZlbnRzLiAgVGhlIG1vdXNl
ZG93bi91cHMgd2lsbCBoYXZlIGFscmVhZHkgYmVlbiBwYXNzZWQgb24gYXMKQEAgLTM4NSw3ICsz
ODcsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKE1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2ZQogICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGV2ZW50LnRhcmdldE5vZGUoKTsKICAgICAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
bm9kZS0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5k
ZXJlciA9IG5vZGUtPnJlbmRlckJveE1vZGVsT2JqZWN0KCk7CiAgICAgICAgICAgICBpZiAoIXJl
bmRlcmVyIHx8ICFyZW5kZXJlci0+aXNXaWRnZXQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICBXaWRnZXQqIHdpZGdldCA9IHRvUmVuZGVyV2lkZ2V0KHJlbmRl
cmVyKS0+d2lkZ2V0KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1t
IGIvV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQppbmRleCBiYjExYWM5MGFlMjhmNjI4MjVm
MmJlY2UwZWU1NDgzNzZhMWI5MDZlLi4yMmZhYjE0NzU1YmNhMzEwMjQ2NjQyNjQzZTY5OGIxNGRm
MDkzYzg4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCisrKyBiL1dl
YkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KQEAgLTQ3NSw3ICs0NzUsNyBAQCBOU1dyaXRpbmdE
aXJlY3Rpb24gRnJhbWU6OmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQoKSBj
b25zdAogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBp
ZiAoIXJlbmRlcmVyLT5pc0Jsb2NrRmxvdygpKSB7CisgICAgaWYgKCFyZW5kZXJlci0+aXNCb3hN
b2RlbE9iamVjdCgpIHx8ICF0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVyKS0+aXNCbG9j
a0Zsb3coKSkgewogICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2so
KTsKICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcCBiL1dlYkNvcmUv
cmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCmluZGV4IGRkOTZlMGVhMWJkNTYzZDQwMGE1ZWVi
MGU5MmI2YjM0ZWFhNzUzYzcuLjQ5NTZjMmRiNTI4NDkxZjM2OWYwNWYzN2MzODUzODA0M2U2NTZh
ZWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCisrKyBi
L1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCkBAIC0yNDQsOSArMjQ0LDkgQEAg
SW1hZ2UqIEhpdFRlc3RSZXN1bHQ6OmltYWdlKCkgY29uc3QKICAgICBpZiAoIW1faW5uZXJOb25T
aGFyZWROb2RlKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gbV9pbm5lck5vblNoYXJlZE5vZGUtPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyQm94
TW9kZWxPYmplY3QqIHJlbmRlcmVyID0gbV9pbm5lck5vblNoYXJlZE5vZGUtPnJlbmRlckJveE1v
ZGVsT2JqZWN0KCk7CiAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0ltYWdlKCkpIHsK
LSAgICAgICAgUmVuZGVySW1hZ2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UmVuZGVy
SW1hZ2UqPihyZW5kZXJlcik7CisgICAgICAgIFJlbmRlckltYWdlKiBpbWFnZSA9IHRvUmVuZGVy
SW1hZ2UocmVuZGVyZXIpOwogICAgICAgICBpZiAoaW1hZ2UtPmNhY2hlZEltYWdlKCkgJiYgIWlt
YWdlLT5jYWNoZWRJbWFnZSgpLT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAgICAgICByZXR1cm4g
aW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlKCk7CiAgICAgfQpAQCAtMjY2LDcgKzI2Niw4IEBA
IEtVUkwgSGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVJbWFnZVVSTCgpIGNvbnN0CiAgICAgaWYgKCEo
bV9pbm5lck5vblNoYXJlZE5vZGUgJiYgbV9pbm5lck5vblNoYXJlZE5vZGUtPmRvY3VtZW50KCkp
KQogICAgICAgICByZXR1cm4gS1VSTCgpOwogCi0gICAgaWYgKCEobV9pbm5lck5vblNoYXJlZE5v
ZGUtPnJlbmRlcmVyKCkgJiYgbV9pbm5lck5vblNoYXJlZE5vZGUtPnJlbmRlcmVyKCktPmlzSW1h
Z2UoKSkpCisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyID0gbV9pbm5lck5vblNo
YXJlZE5vZGUtPnJlbmRlckJveE1vZGVsT2JqZWN0KCk7CisgICAgaWYgKCFyZW5kZXJlciB8fCAh
cmVuZGVyZXItPmlzSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIEtVUkwoKTsKIAogICAgIEF0b21p
Y1N0cmluZyB1cmxTdHJpbmc7CkBAIC0yOTUsNyArMjk2LDggQEAgS1VSTCBIaXRUZXN0UmVzdWx0
OjphYnNvbHV0ZU1lZGlhVVJMKCkgY29uc3QKICAgICBpZiAoIShtX2lubmVyTm9uU2hhcmVkTm9k
ZSAmJiBtX2lubmVyTm9uU2hhcmVkTm9kZS0+ZG9jdW1lbnQoKSkpCiAgICAgICAgIHJldHVybiBL
VVJMKCk7CiAKLSAgICBpZiAoIShtX2lubmVyTm9uU2hhcmVkTm9kZS0+cmVuZGVyZXIoKSAmJiBt
X2lubmVyTm9uU2hhcmVkTm9kZS0+cmVuZGVyZXIoKS0+aXNNZWRpYSgpKSkKKyAgICBSZW5kZXJC
b3hNb2RlbE9iamVjdCogcmVuZGVyZXIgPSBtX2lubmVyTm9uU2hhcmVkTm9kZS0+cmVuZGVyQm94
TW9kZWxPYmplY3QoKTsKKyAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNNZWRpYSgp
KQogICAgICAgICByZXR1cm4gS1VSTCgpOwogCiAgICAgQXRvbWljU3RyaW5nIHVybFN0cmluZzsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckFwcGxldC5oIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQXBwbGV0LmgKaW5kZXggMzQzNDIxZWIwZjE1MTljYzRhN2M0NTYwNjJj
Yjg1M2EzMGEwMTU5NC4uMTIwZGZiYTkxNGM5NGE5OTcxYzgyZTYwNzAwMmE5MmNjZmNhYTY1MiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQXBwbGV0LmgKKysrIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQXBwbGV0LmgKQEAgLTQ4LDggKzQ4LDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgaW5saW5lIFJlbmRlckFwcGxldCogdG9SZW5kZXJBcHBsZXQoUmVuZGVy
T2JqZWN0KiBvYmplY3QpCiAgICAgewotICAgICAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3Qt
PmlzQXBwbGV0KCkpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyQXBwbGV0Kj4o
b2JqZWN0KTsKKyAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHRvUmVuZGVyQm94
TW9kZWxPYmplY3Qob2JqZWN0KTsKKyAgICAgICAgQVNTRVJUKCFib3ggfHwgYm94LT5pc0FwcGxl
dCgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckFwcGxldCo+KGJveCk7CiAg
ICAgfQogCiAgICAgLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2Fy
eSBjYXN0LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5kZXggOTVkMGMyOWEwYjg5MzVjNzBhMDFj
Yjg4ZmQyNDcyODk1ZmE1YmRiMS4uN2QyZDEzMmM0MmQxMjM1MmJlNGU3MDU4MWExODU3MTI5NDFi
N2NhMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC01ODMsMTQgKzU4MywxNiBAQCBwcml2
YXRlOgogCiBpbmxpbmUgUmVuZGVyQmxvY2sqIHRvUmVuZGVyQmxvY2soUmVuZGVyT2JqZWN0KiBv
YmplY3QpCiB7IAotICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNSZW5kZXJCbG9jaygp
KTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihvYmplY3QpOworICAgIFJl
bmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG9iamVjdCk7
CisgICAgQVNTRVJUKCFib3ggfHwgYm94LT5pc1JlbmRlckJsb2NrKCkpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KGJveCk7CiB9CiAKIGlubGluZSBjb25zdCBSZW5kZXJC
bG9jayogdG9SZW5kZXJCbG9jayhjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsgCi0gICAg
QVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1JlbmRlckJsb2NrKCkpOwotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBSZW5kZXJCbG9jayo+KG9iamVjdCk7CisgICAgY29uc3QgUmVuZGVy
Qm94TW9kZWxPYmplY3QqIGJveCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0KTsKKyAg
ICBBU1NFUlQoIWJveCB8fCBib3gtPmlzUmVuZGVyQmxvY2soKSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IFJlbmRlckJsb2NrKj4oYm94KTsKIH0KIAogLy8gVGhpcyB3aWxsIGNhdGNo
IGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmgKaW5kZXggNDlkNWYzZGQzNzI0ZTE4OTRhYjM4YWFmNmYyZDUwM2Yz
NWZiYmM0YS4uZDNiMDEyNmI1NzkyMGUwYjRhMmRmZmU0YTY2NGJhZWI0NGVkZmE1NCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAorKysgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCkBAIC00MCw3ICs0MCwzNyBAQCBj
bGFzcyBSZW5kZXJCb3hNb2RlbE9iamVjdCA6IHB1YmxpYyBSZW5kZXJPYmplY3QgewogcHVibGlj
OgogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KE5vZGUqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJC
b3hNb2RlbE9iamVjdCgpOwotICAgIAorCisgICAgdmlydHVhbCBib29sIGlzQXBwbGV0KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFbWJlZGRlZE9iamVjdCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzRmllbGRzZXQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGVVcGxvYWRDb250
cm9sKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNGcmFtZSgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzRnJhbWVTZXQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0ltYWdlKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmVCbG9ja09ySW5saW5l
VGFibGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0xpc3RC
b3goKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0xpc3RJdGVt
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNNZWRpYSgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzTWVudUxpc3QoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorI2lmIEVOQUJMRShNRVRFUl9UQUcpCisgICAgdmlydHVhbCBi
b29sIGlzTWV0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCisjaWYgRU5BQkxF
KFBST0dSRVNTX1RBRykKKyAgICB2aXJ0dWFsIGJvb2wgaXNQcm9ncmVzcygpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisjZW5kaWYKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJCdXR0b24oKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcklGcmFtZSgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUmVuZGVySW1hZ2Uo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclBhcnQo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1JlcGxpY2EoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NsaWRlcigpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzVGV4dEFyZWEoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1RleHRGaWVsZCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzVmlkZW8oKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1dpZGdldCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQ2FudmFzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKwogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CiAKICAgICBpbnQgcmVsYXRpdmVQb3Np
dGlvbk9mZnNldFgoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJ1dHRvbi5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmgKaW5kZXggMWZjNWVi
NjIwMWE2NWE1ODlkODM0NzI4ZjI5MGI5YWY5N2VlNzk5NC4uYWM2Zjg5NGJkMTllMWRiOGYwYTEz
YTdiZmQ2MjZlODk5M2Q1NjE3OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QnV0dG9uLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmgKQEAgLTc1LDE1
ICs3NSwxNyBAQCBwcml2YXRlOgogfTsKIAogaW5saW5lIFJlbmRlckJ1dHRvbiogdG9SZW5kZXJC
dXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17IAotICAgIEFTU0VSVCghb2JqZWN0IHx8IG9i
amVjdC0+aXNSZW5kZXJCdXR0b24oKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckJ1
dHRvbio+KG9iamVjdCk7Cit7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHRvUmVu
ZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlQoIWJveCB8fCBib3gtPmlzUmVu
ZGVyQnV0dG9uKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJCdXR0b24qPihib3gp
OwogfQogCiBpbmxpbmUgY29uc3QgUmVuZGVyQnV0dG9uKiB0b1JlbmRlckJ1dHRvbihjb25zdCBS
ZW5kZXJPYmplY3QqIG9iamVjdCkKLXsgCi0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5p
c1JlbmRlckJ1dHRvbigpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyQnV0
dG9uKj4ob2JqZWN0KTsKK3sKKyAgICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0g
dG9SZW5kZXJCb3hNb2RlbE9iamVjdChvYmplY3QpOworICAgIEFTU0VSVCghYm94IHx8IGJveC0+
aXNSZW5kZXJCdXR0b24oKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlckJ1
dHRvbio+KGJveCk7CiB9CiAKIC8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5u
ZWNlc3NhcnkgY2FzdC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50
ZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKaW5kZXggM2NiOWEw
NzhmMDcyNDE0ZDMyMjJhYWZlZjlmN2NjMjc5MTZmNTBiZC4uOTlkZmIwMzI2NjczZDFiNGY0ODY4
MTRiOGExMjA2MDYwNjhmMzkyOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Q291bnRlci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKQEAg
LTgyLDcgKzgyLDcgQEAgc3RhdGljIGJvb2wgcGxhbkNvdW50ZXIoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmllciwgYm8KICAgICB9CiAKICAgICBpZiAo
aWRlbnRpZmllciA9PSAibGlzdC1pdGVtIikgewotICAgICAgICBpZiAob2JqZWN0LT5pc0xpc3RJ
dGVtKCkpIHsKKyAgICAgICAgaWYgKG9iamVjdC0+aXNCb3hNb2RlbE9iamVjdCgpICYmIHRvUmVu
ZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0KS0+aXNMaXN0SXRlbSgpKSB7CiAgICAgICAgICAgICBp
ZiAodG9SZW5kZXJMaXN0SXRlbShvYmplY3QpLT5oYXNFeHBsaWNpdFZhbHVlKCkpIHsKICAgICAg
ICAgICAgICAgICB2YWx1ZSA9IHRvUmVuZGVyTGlzdEl0ZW0ob2JqZWN0KS0+ZXhwbGljaXRWYWx1
ZSgpOwogICAgICAgICAgICAgICAgIGlzUmVzZXQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZp
ZWxkc2V0LmgKaW5kZXggZGY2YTFkYWYzNDliODk0ZWI5ZjI1NjdiOWI5ODAwNDQ1NzkwMWNjOS4u
ZGVjYWM2YjAxZGUxYWJmNmU3NmZhNjA3MWE5NWE1MDI1ZmI1ODBiYyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGaWVsZHNldC5oCkBAIC01NCw4ICs1NCw5IEBAIHByaXZhdGU6CiAKIGlubGluZSBSZW5k
ZXJGaWVsZHNldCogdG9SZW5kZXJGaWVsZHNldChSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKLSAg
ICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzRmllbGRzZXQoKSk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PFJlbmRlckZpZWxkc2V0Kj4ob2JqZWN0KTsKKyAgICBSZW5kZXJCb3hNb2RlbE9i
amVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChvYmplY3QpOworICAgIEFTU0VSVCgh
Ym94IHx8IGJveC0+aXNGaWVsZHNldCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVy
RmllbGRzZXQqPihib3gpOwogfQogCiAvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFu
IHVubmVjZXNzYXJ5IGNhc3QuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
aWxlVXBsb2FkQ29udHJvbC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2wuaAppbmRleCAyMDViYTQ3YjEwYTk1NjJhNmVjOThjMDA4ZDBmMDg0YTRmM2ZkNTJjLi5i
OTVhOGI0ODkyYTEwMjc1Njk3MTcxZmI1Njk0NDlmMGJlNTJiMzFiIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmgKQEAgLTc4LDE0ICs3OCwxNiBAQCBwcml2
YXRlOgogCiBpbmxpbmUgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wqIHRvUmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2woUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwg
b2JqZWN0LT5pc0ZpbGVVcGxvYWRDb250cm9sKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxS
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbCo+KG9iamVjdCk7CisgICAgUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIGJveCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlQoIWJv
eCB8fCBib3gtPmlzRmlsZVVwbG9hZENvbnRyb2woKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFJlbmRlckZpbGVVcGxvYWRDb250cm9sKj4oYm94KTsKIH0KIAogaW5saW5lIGNvbnN0IFJlbmRl
ckZpbGVVcGxvYWRDb250cm9sKiB0b1JlbmRlckZpbGVVcGxvYWRDb250cm9sKGNvbnN0IFJlbmRl
ck9iamVjdCogb2JqZWN0KQogewotICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNGaWxl
VXBsb2FkQ29udHJvbCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2wqPihvYmplY3QpOworICAgIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0
KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG9iamVjdCk7CisgICAgQVNTRVJUKCFib3gg
fHwgYm94LT5pc0ZpbGVVcGxvYWRDb250cm9sKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCo+KGJveCk7CiB9CiAKIC8vIFRoaXMgd2lsbCBj
YXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFt
ZS5oCmluZGV4IGM4OTVhMGMzMDExNWIxYTJiZjU2NmIwODc4OTcxOThlZGJhODllOGYuLmFjYTJk
MjA4MTkyNDNlNzczMzllN2E5MjBiYzMxODdlZmVlMTdmOTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZyYW1lLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJh
bWUuaApAQCAtNDUsOCArNDUsOSBAQCBwcml2YXRlOgogCiBpbmxpbmUgUmVuZGVyRnJhbWUqIHRv
UmVuZGVyRnJhbWUoUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgQVNTRVJUKCFvYmplY3Qg
fHwgb2JqZWN0LT5pc0ZyYW1lKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJGcmFt
ZSo+KG9iamVjdCk7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHRvUmVuZGVyQm94
TW9kZWxPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlQoIWJveCB8fCBib3gtPmlzRnJhbWUoKSk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckZyYW1lKj4oYm94KTsKIH0KIAogLy8gVGhp
cyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0LgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRnJhbWVTZXQuY3BwCmluZGV4IDUyYzRjZGQyY2M1MTMxYmRlYTU1M2FhYzA0NzE0
YWM1NzVlM2QyZmMuLmU4ODcxMDYyMWI5MTdkZWRjOGYxNWM3ZDg3ZTU1OGVkMGQzYjc1MjIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAorKysgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKQEAgLTQwNiw4ICs0MDYsOCBAQCB2b2lk
IFJlbmRlckZyYW1lU2V0Ojpjb21wdXRlRWRnZUluZm8oKQogICAgIG1fcm93cy5tX2FsbG93Qm9y
ZGVyLmZpbGwoZmFsc2UpOwogICAgIG1fY29scy5tX3ByZXZlbnRSZXNpemUuZmlsbChmcmFtZVNl
dCgpLT5ub1Jlc2l6ZSgpKTsgICAgCiAgICAgbV9jb2xzLm1fYWxsb3dCb3JkZXIuZmlsbChmYWxz
ZSk7Ci0gICAgCi0gICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKKworICAg
IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjaGlsZCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QoZmly
c3RDaGlsZCgpKTsKICAgICBpZiAoIWNoaWxkKQogICAgICAgICByZXR1cm47CiAKQEAgLTQyMSw3
ICs0MjEsNyBAQCB2b2lkIFJlbmRlckZyYW1lU2V0Ojpjb21wdXRlRWRnZUluZm8oKQogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGVkZ2VJbmZvID0gdG9SZW5kZXJGcmFtZShjaGls
ZCktPmVkZ2VJbmZvKCk7CiAgICAgICAgICAgICBmaWxsRnJvbUVkZ2VJbmZvKGVkZ2VJbmZvLCBy
LCBjKTsKLSAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAg
ICAgICBjaGlsZCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QoY2hpbGQtPm5leHRTaWJsaW5nKCkp
OwogICAgICAgICAgICAgaWYgKCFjaGlsZCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KQEAgLTcxMSw3ICs3MTEsNyBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpzZXRJc1Jlc2l6
aW5nKGJvb2wgaXNSZXNpemluZykKIHsKICAgICBtX2lzUmVzaXppbmcgPSBpc1Jlc2l6aW5nOwog
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBhbmNlc3RvciA9IHBhcmVudCgpOyBhbmNlc3RvcjsgYW5j
ZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50KCkpIHsKLSAgICAgICAgaWYgKGFuY2VzdG9yLT5pc0Zy
YW1lU2V0KCkpCisgICAgICAgIGlmIChhbmNlc3Rvci0+aXNCb3hNb2RlbE9iamVjdCgpICYmIHRv
UmVuZGVyQm94TW9kZWxPYmplY3QoYW5jZXN0b3IpLT5pc0ZyYW1lU2V0KCkpCiAgICAgICAgICAg
ICB0b1JlbmRlckZyYW1lU2V0KGFuY2VzdG9yKS0+bV9pc0NoaWxkUmVzaXppbmcgPSBpc1Jlc2l6
aW5nOwogICAgIH0KICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkKQEAgLTc4
MSw3ICs3ODEsMTAgQEAgaW50IFJlbmRlckZyYW1lU2V0OjpoaXRUZXN0U3BsaXQoY29uc3QgR3Jp
ZEF4aXMmIGF4aXMsIGludCBwb3NpdGlvbikgY29uc3QKIAogYm9vbCBSZW5kZXJGcmFtZVNldDo6
aXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyU3R5bGUqKSBjb25zdAog
ewotICAgIHJldHVybiBjaGlsZC0+aXNGcmFtZSgpIHx8IGNoaWxkLT5pc0ZyYW1lU2V0KCk7Cisg
ICAgaWYgKCFjaGlsZC0+aXNCb3hNb2RlbE9iamVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qo
Y2hpbGQpOworICAgIHJldHVybiBib3gtPmlzRnJhbWUoKSB8fCBib3gtPmlzRnJhbWVTZXQoKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRnJhbWVTZXQuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmgK
aW5kZXggZDBhYjM0NmJlOTAyMzZiMTgwMTIwOTA4YzZmODAwMTZhMjdhZTYyZS4uMjBjNDkxMGU3
YWNmZGRlYTViNWI4Zjk4ZjdiZmE1Njc3NWIzZTVmOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRnJhbWVTZXQuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFt
ZVNldC5oCkBAIC0xMjksOCArMTI5LDkgQEAgcHJpdmF0ZToKIAogaW5saW5lIFJlbmRlckZyYW1l
U2V0KiB0b1JlbmRlckZyYW1lU2V0KFJlbmRlck9iamVjdCogb2JqZWN0KQogewotICAgIEFTU0VS
VCghb2JqZWN0IHx8IG9iamVjdC0+aXNGcmFtZVNldCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8UmVuZGVyRnJhbWVTZXQqPihvYmplY3QpOworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBi
b3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG9iamVjdCk7CisgICAgQVNTRVJUKCFib3ggfHwg
Ym94LT5pc0ZyYW1lU2V0KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJGcmFtZVNl
dCo+KGJveCk7CiB9CiAKIC8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNl
c3NhcnkgY2FzdC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklGcmFtZS5o
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySUZyYW1lLmgKaW5kZXggYWI2NTlhNGNlYzM4ZDY3
YTU2YTE1MmU4MzQwMjgyMWNlOGE1MTA1Mi4uOGM2YTk0OTU3Mzg1MGM0MTA3ZGQ1NDNlMjJkZmNk
YTdhNWY5OGM1NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySUZyYW1lLmgK
KysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySUZyYW1lLmgKQEAgLTU3LDE0ICs1NywxNiBA
QCBwcml2YXRlOgogCiBpbmxpbmUgUmVuZGVySUZyYW1lKiB0b1JlbmRlcklGcmFtZShSZW5kZXJP
YmplY3QqIG9iamVjdCkKIHsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzUmVuZGVy
SUZyYW1lKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJJRnJhbWUqPihvYmplY3Qp
OworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0
KG9iamVjdCk7CisgICAgQVNTRVJUKCFib3ggfHwgYm94LT5pc1JlbmRlcklGcmFtZSgpKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVySUZyYW1lKj4oYm94KTsKIH0KIAogaW5saW5lIGNv
bnN0IFJlbmRlcklGcmFtZSogdG9SZW5kZXJJRnJhbWUoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmpl
Y3QpCiB7Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1JlbmRlcklGcmFtZSgpKTsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVySUZyYW1lKj4ob2JqZWN0KTsKKyAg
ICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVj
dChvYmplY3QpOworICAgIEFTU0VSVCghYm94IHx8IGJveC0+aXNSZW5kZXJJRnJhbWUoKSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlcklGcmFtZSo+KGJveCk7CiB9CiAKIC8v
IFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmggYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbWFnZS5oCmluZGV4IGI4OWE2NTI0OWQ5MGQ0MWM3MGMyNjU1ZjM0MzhlNGVmNmQw
ZDVlOTEuLjc2YjM5M2Q5YTA4ZWYyYzNhMTJlM2Q2YWQwZTM2ZDgzZGU4YWVhYTIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW1hZ2UuaApAQCAtMTA5LDE0ICsxMDksMTYgQEAgcHJpdmF0ZToKIAogaW5saW5l
IFJlbmRlckltYWdlKiB0b1JlbmRlckltYWdlKFJlbmRlck9iamVjdCogb2JqZWN0KQogeyAKLSAg
ICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzUmVuZGVySW1hZ2UoKSk7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PFJlbmRlckltYWdlKj4ob2JqZWN0KTsKKyAgICBSZW5kZXJCb3hNb2RlbE9i
amVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChvYmplY3QpOworICAgIEFTU0VSVCgh
Ym94IHx8IGJveC0+aXNSZW5kZXJJbWFnZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVu
ZGVySW1hZ2UqPihib3gpOwogfQogCiBpbmxpbmUgY29uc3QgUmVuZGVySW1hZ2UqIHRvUmVuZGVy
SW1hZ2UoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7IAotICAgIEFTU0VSVCghb2JqZWN0
IHx8IG9iamVjdC0+aXNSZW5kZXJJbWFnZSgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgUmVuZGVySW1hZ2UqPihvYmplY3QpOworICAgIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0
KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG9iamVjdCk7CisgICAgQVNTRVJUKCFib3gg
fHwgYm94LT5pc1JlbmRlckltYWdlKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBS
ZW5kZXJJbWFnZSo+KGJveCk7CiB9CiAKIC8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcg
YW4gdW5uZWNlc3NhcnkgY2FzdC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cklubGluZS5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKaW5kZXggNzFhOGE4
OTFiMTAyODlhMDc0NmI5YjJhNmRiNzFkMWMxOTVmOGVmYi4uNjA1ZmYwMzQ1NGY5MmM4ZmJmMWRl
NmI1NTEwMGIxYjk3NzA2YmM4NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW5saW5lLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKQEAgLTE1OSwx
NSArMTU5LDE3IEBAIHByaXZhdGU6CiB9OwogCiBpbmxpbmUgUmVuZGVySW5saW5lKiB0b1JlbmRl
cklubGluZShSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsgCi0gICAgQVNTRVJUKCFvYmplY3QgfHwg
b2JqZWN0LT5pc1JlbmRlcklubGluZSgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVy
SW5saW5lKj4ob2JqZWN0KTsKK3sKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9S
ZW5kZXJCb3hNb2RlbE9iamVjdChvYmplY3QpOworICAgIEFTU0VSVCghYm94IHx8IGJveC0+aXNS
ZW5kZXJJbmxpbmUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlcklubGluZSo+KGJv
eCk7CiB9CiAKIGlubGluZSBjb25zdCBSZW5kZXJJbmxpbmUqIHRvUmVuZGVySW5saW5lKGNvbnN0
IFJlbmRlck9iamVjdCogb2JqZWN0KQoteyAKLSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3Qt
PmlzUmVuZGVySW5saW5lKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJJ
bmxpbmUqPihvYmplY3QpOworeworICAgIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3gg
PSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG9iamVjdCk7CisgICAgQVNTRVJUKCFib3ggfHwgYm94
LT5pc1JlbmRlcklubGluZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVy
SW5saW5lKj4oYm94KTsKIH0KIAogLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1
bm5lY2Vzc2FyeSBjYXN0LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAK
aW5kZXggMGU1OTMzZTQ1YTgzOTY1MWIxMzhjNTA2OGY1NGU0ZGM4ZmE5Y2ZlNy4uNzlmYTQ2ZTEx
MjUwYTg2N2Y0NTU0YjYxZDAyY2I4YTQ0MjVmOGY0NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCkBAIC02Niw3ICs2Niw3IEBAIHN0YXRpYyBib29sIGhhc0JveERl
Y29yYXRpb25zT3JCYWNrZ3JvdW5kKGNvbnN0IFJlbmRlck9iamVjdCopOwogc3RhdGljIGJvb2wg
aGFzQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmRJbWFnZShjb25zdCBSZW5kZXJTdHlsZSopOwog
c3RhdGljIEludFJlY3QgY2xpcEJveChSZW5kZXJCb3gqIHJlbmRlcmVyKTsKIAotc3RhdGljIGlu
bGluZSBib29sIGlzM0RDYW52YXMoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3N0YXRpYyBpbmxp
bmUgYm9vbCBpczNEQ2FudmFzKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlcikKIHsKICNp
ZiBFTkFCTEUoM0RfQ0FOVkFTKSAgICAKICAgICBpZiAocmVuZGVyZXItPmlzQ2FudmFzKCkpCkBA
IC03NjYsNyArNzY2LDcgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbnRhaW5zUGFpbnRl
ZENvbnRlbnQoKSBjb25zdAogLy8gdGhhdCByZXF1aXJlIHBhaW50aW5nLiBEaXJlY3QgY29tcG9z
aXRpbmcgc2F2ZXMgYmFja2luZyBzdG9yZS4KIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjppc0Rp
cmVjdGx5Q29tcG9zaXRlZEltYWdlKCkgY29uc3QKIHsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRl
ck9iamVjdCA9IHJlbmRlcmVyKCk7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlck9i
amVjdCA9IHJlbmRlcmVyKCk7CiAgICAgcmV0dXJuIHJlbmRlck9iamVjdC0+aXNJbWFnZSgpICYm
ICFoYXNCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZChyZW5kZXJPYmplY3QpICYmICFyZW5kZXJP
YmplY3QtPmhhc0NsaXAoKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCmluZGV4IGFh
ZmI4N2U5NTc2YTk0ODVkMTQyNTAxODMxMTU0NzhhODRiY2VlNWMuLmE3NjMzZmM3ZTVkYWY1OGFi
NGY3YjNhNDhiNWZmN2NiNjA4ZTM1MjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKQEAg
LTEzMSw4ICsxMzEsOSBAQCBwcml2YXRlOgogCiBpbmxpbmUgUmVuZGVyTGlzdEJveCogdG9SZW5k
ZXJMaXN0Qm94KFJlbmRlck9iamVjdCogb2JqZWN0KQogeyAKLSAgICBBU1NFUlQoIW9iamVjdCB8
fCBvYmplY3QtPmlzTGlzdEJveCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyTGlz
dEJveCo+KG9iamVjdCk7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHRvUmVuZGVy
Qm94TW9kZWxPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlQoIWJveCB8fCBib3gtPmlzTGlzdEJv
eCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdEJveCo+KGJveCk7CiB9CiAK
IC8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmggYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0SXRlbS5oCmluZGV4IDEzZDgxZjIxZGEzYjZjMzRmOTA1MTBkNWQx
NzE0NWE0NzlkMTg0ZmMuLmY4ZjIwMmQzMDgwNWJiM2Q0MmMxNTQzMWUyODNmOWY3MzUzNjgyOWUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmgKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaApAQCAtODMsOCArODMsOSBAQCBwcml2YXRl
OgogCiBpbmxpbmUgUmVuZGVyTGlzdEl0ZW0qIHRvUmVuZGVyTGlzdEl0ZW0oUmVuZGVyT2JqZWN0
KiBvYmplY3QpCiB7Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc0xpc3RJdGVtKCkp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJMaXN0SXRlbSo+KG9iamVjdCk7CisgICAg
UmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0
KTsKKyAgICBBU1NFUlQoIWJveCB8fCBib3gtPmlzTGlzdEl0ZW0oKSk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFJlbmRlckxpc3RJdGVtKj4oYm94KTsKIH0KIAogLy8gVGhpcyB3aWxsIGNhdGNo
IGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVkaWEuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhLmgK
aW5kZXggNGM5ODBiNThlYjdhZjZkNTIzMzk2MTIwNjg5YWJmMzBmMDhmNjk5OC4uNGRiMjYzZDM2
NDQ1YmRiMDliNGRmMzFjNmM5N2IxNjAxMTAxMmU0MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWVkaWEuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5o
CkBAIC0xNTQsOCArMTU0LDkgQEAgcHJpdmF0ZToKIAogaW5saW5lIFJlbmRlck1lZGlhKiB0b1Jl
bmRlck1lZGlhKFJlbmRlck9iamVjdCogb2JqZWN0KQogewotICAgIEFTU0VSVCghb2JqZWN0IHx8
IG9iamVjdC0+aXNNZWRpYSgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyTWVkaWEq
PihvYmplY3QpOworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1v
ZGVsT2JqZWN0KG9iamVjdCk7CisgICAgQVNTRVJUKCFib3ggfHwgYm94LT5pc01lZGlhKCkpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJNZWRpYSo+KGJveCk7CiB9CiAKIC8vIFRoaXMg
d2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmggYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZW51TGlzdC5oCmluZGV4IDUxMmZhOWI1NzlhZmZhM2IxNjFhOTgxY2IzMjIwYWFjMTlh
NTg5NTkuLmFlMDExM2M0MDBhZGNkMTE4MmU5MGI1MTdlMDdhNmUxNGJmNDJmNjcgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWVudUxpc3QuaApAQCAtMTM4LDggKzEzOCw5IEBAIHByaXZhdGU6CiAKIGlu
bGluZSBSZW5kZXJNZW51TGlzdCogdG9SZW5kZXJNZW51TGlzdChSZW5kZXJPYmplY3QqIG9iamVj
dCkKIHsgCi0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc01lbnVMaXN0KCkpOwotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJNZW51TGlzdCo+KG9iamVjdCk7CisgICAgUmVuZGVy
Qm94TW9kZWxPYmplY3QqIGJveCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0KTsKKyAg
ICBBU1NFUlQoIWJveCB8fCBib3gtPmlzTWVudUxpc3QoKSk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFJlbmRlck1lbnVMaXN0Kj4oYm94KTsKIH0KIAogLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9u
ZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWV0ZXIuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1ldGVyLmgKaW5kZXgg
MGU3M2U0MGE4MmNjMzViYzA4NzMxNzcwYzlmZGUyNzA5YzYxNWZmMy4uM2E2YjRhMzg3ODk1MjZm
ZDJkMjVlODBlZDZmYTBmY2Y2YjI3ZDRlNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWV0ZXIuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZXRlci5oCkBAIC02
MCw4ICs2MCw5IEBAIHByaXZhdGU6CiAKIGlubGluZSBSZW5kZXJNZXRlciogdG9SZW5kZXJNZXRl
cihSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3Qt
PmlzTWV0ZXIoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlck1ldGVyKj4ob2JqZWN0
KTsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVj
dChvYmplY3QpOworICAgIEFTU0VSVCghYm94IHx8IGJveC0+aXNNZXRlcigpKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UmVuZGVyTWV0ZXIqPihib3gpOwogfQogCiAvLyBUaGlzIHdpbGwgY2F0
Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCmluZGV4IDQ2MTY5ZDA0MWM4OGZiODhlYTFmNThhYWZjYTY2YjMyZGE2NzQ4NjMuLmY3ZDFl
Y2YzZGI3Zjk2ZmQyMTk5OTI0NDI1NmQ1Mjk1YzIwNWFkMDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oCkBAIC0yMzQsNTUgKzIzNCwzMyBAQCBwcml2YXRlOgogcHVibGljOgogICAgIFJlbmRl
ckFyZW5hKiByZW5kZXJBcmVuYSgpIGNvbnN0IHsgcmV0dXJuIGRvY3VtZW50KCktPnJlbmRlckFy
ZW5hKCk7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc0FwcGxldCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzQlIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQot
ICAgIHZpcnR1YWwgYm9vbCBpc0Jsb2NrRmxvdygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIGlzQm94TW9kZWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorCisgICAgLy8gRklYTUU6IFRoZXNlIHNob3VsZCBtb3ZlIG9udG8gUmVuZGVyVGV4dC4KKyAg
ICB2aXJ0dWFsIGJvb2wgaXNCUigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGlzQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBi
b29sIGlzRW1iZWRkZWRPYmplY3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1
YWwgYm9vbCBpc0ZpZWxkc2V0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNGaWxlVXBsb2FkQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dmlydHVhbCBib29sIGlzRnJhbWUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1
YWwgYm9vbCBpc0ZyYW1lU2V0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29s
IGlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNMaXN0Qm94KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNMaXN0SXRlbSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmly
dHVhbCBib29sIGlzTGlzdE1hcmtlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmly
dHVhbCBib29sIGlzTWVkaWEoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBpc01lbnVMaXN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSNpZiBFTkFCTEUoTUVU
RVJfVEFHKQotICAgIHZpcnR1YWwgYm9vbCBpc01ldGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLSNlbmRpZgotI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi0gICAgdmlydHVhbCBib29sIGlz
UHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlmCi0gICAgdmlydHVhbCBi
b29sIGlzUmVuZGVyQmxvY2soKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBpc1JlbmRlckJ1dHRvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVh
bCBib29sIGlzUmVuZGVySUZyYW1lKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgaXNSZW5kZXJJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmly
dHVhbCBib29sIGlzUmVuZGVySW5saW5lKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNSZW5kZXJQYXJ0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNSZW5kZXJWaWV3KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNSZXBsaWNhKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwogI2lmIEVO
QUJMRShSVUJZKQotICAgIHZpcnR1YWwgYm9vbCBpc1J1YnkoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1J1YnlCYXNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKworICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgbW92ZSB0byBSdWJ5QmFzZS4KKyAgICB2
aXJ0dWFsIGJvb2wgaXNSdWJ5KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNSdWJ5UnVuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgaXNSdWJ5VGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKLSAgICB2aXJ0
dWFsIGJvb2wgaXNTbGlkZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgLy8gRklY
TUU6IFRoZXNlIHNob3VsZCBtb3ZlIG9udG8gUmVuZGVyQm94TW9kZWxPYmplY3QuCisgICAgdmly
dHVhbCBib29sIGlzQmxvY2tGbG93KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaXNMaXN0TWFya2VyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaXNSZW5kZXJCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBib29sIGlzUmVuZGVySW5saW5lKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgaXNSZW5kZXJWaWV3KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIGJvb2wgaXNUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGlzVGFibGVDZWxsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNUYWJsZUNvbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBi
b29sIGlzVGFibGVSb3coKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBpc1RhYmxlU2VjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBi
b29sIGlzVGV4dENvbnRyb2woKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBpc1RleHRBcmVhKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgaXNUZXh0RmllbGQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9v
bCBpc1ZpZGVvKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNX
aWRnZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0NhbnZh
cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBib29sIGlzUm9vdCgpIGNvbnN0IHsg
cmV0dXJuIGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpID09IG1fbm9kZTsgfQogICAgIGJv
b2wgaXNCb2R5KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQ
YXJ0LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0LmgKaW5kZXggMThmMjM0Njc4ZTg1
NTY5NzE1ZGNkMWFjZDNiODU4YjZhN2IxZjhkYS4uNmJiODcyMmI1MTBmZjgzYzk5ZDg0OTFlOTRm
NmE5YmRiZDVjYmEwMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydC5o
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnQuaApAQCAtNDMsOCArNDMsOSBAQCBw
cml2YXRlOgogCiBpbmxpbmUgUmVuZGVyUGFydCogdG9SZW5kZXJQYXJ0KFJlbmRlck9iamVjdCog
b2JqZWN0KQogewotICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNSZW5kZXJQYXJ0KCkp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJQYXJ0Kj4ob2JqZWN0KTsKKyAgICBSZW5k
ZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChvYmplY3QpOwor
ICAgIEFTU0VSVCghYm94IHx8IGJveC0+aXNSZW5kZXJQYXJ0KCkpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxSZW5kZXJQYXJ0Kj4oYm94KTsKIH0KIAogLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9u
ZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUHJvZ3Jlc3MuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmgK
aW5kZXggYmQ5NzllODQ3ZmFjMGEwNmU1ZTg5ZWVmNTlhNzk4YTdlMjU4ZjYxZS4uMzJlMzc1ODFl
YjRjYTQ0OWQ0MTI1NmU0NjhjODk5ODI0MjZhYmI0NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9n
cmVzcy5oCkBAIC02OSw4ICs2OSw5IEBAIHByaXZhdGU6CiAKIGlubGluZSBSZW5kZXJQcm9ncmVz
cyogdG9SZW5kZXJQcm9ncmVzcyhSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKLSAgICBBU1NFUlQo
IW9iamVjdCB8fCBvYmplY3QtPmlzUHJvZ3Jlc3MoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PFJlbmRlclByb2dyZXNzKj4ob2JqZWN0KTsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94
ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChvYmplY3QpOworICAgIEFTU0VSVCghYm94IHx8IGJv
eC0+aXNQcm9ncmVzcygpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyUHJvZ3Jlc3Mq
Pihib3gpOwogfQogCiAvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNz
YXJ5IGNhc3QuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuaCBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oCmluZGV4IGZjOGNlMjQ1NWEzZjBmNmJk
ODc2OTFlOWE2NGMyZmQ3OTMyYTQ4Y2UuLmNkMzdiNzZmNzVkM2Q2NmZiMDQ3MTFmZGE0NTQ1ZjYy
NDdhZTdlM2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oCisr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oCkBAIC03MSw4ICs3MSw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGlubGluZSBSZW5kZXJTbGlkZXIqIHRvUmVuZGVyU2xp
ZGVyKFJlbmRlck9iamVjdCogb2JqZWN0KQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFvYmplY3Qg
fHwgb2JqZWN0LT5pc1NsaWRlcigpKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRl
clNsaWRlcio+KG9iamVjdCk7CisgICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSB0
b1JlbmRlckJveE1vZGVsT2JqZWN0KG9iamVjdCk7CisgICAgICAgIEFTU0VSVCghYm94IHx8IGJv
eC0+aXNTbGlkZXIoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJTbGlkZXIq
Pihib3gpOwogICAgIH0KIAogICAgIC8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4g
dW5uZWNlc3NhcnkgY2FzdC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCmluZGV4IGYxMzE5MTZkMzEw
NjI5OTkyNDg3ZGM3Nzg5Yjk4MzYyYjE3NDcwMDcuLjI5ZDAwYTc2N2JhZjkyMDY2ODJkY2YxNTU3
NzI0MzY2NzU2ZDYwYjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaApAQCAtMTk5LDE0ICsxOTks
MTYgQEAgcHJpdmF0ZToKIAogaW5saW5lIFJlbmRlclRhYmxlKiB0b1JlbmRlclRhYmxlKFJlbmRl
ck9iamVjdCogb2JqZWN0KQogewotICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNUYWJs
ZSgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGUqPihvYmplY3QpOworICAg
IFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG9iamVj
dCk7CisgICAgQVNTRVJUKCFib3ggfHwgYm94LT5pc1RhYmxlKCkpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxSZW5kZXJUYWJsZSo+KGJveCk7CiB9CiAKIGlubGluZSBjb25zdCBSZW5kZXJUYWJs
ZSogdG9SZW5kZXJUYWJsZShjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKLSAgICBBU1NF
UlQoIW9iamVjdCB8fCBvYmplY3QtPmlzVGFibGUoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IFJlbmRlclRhYmxlKj4ob2JqZWN0KTsKKyAgICBjb25zdCBSZW5kZXJCb3hNb2RlbE9i
amVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChvYmplY3QpOworICAgIEFTU0VSVCgh
Ym94IHx8IGJveC0+aXNUYWJsZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVu
ZGVyVGFibGUqPihib3gpOwogfQogCiAvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFu
IHVubmVjZXNzYXJ5IGNhc3QuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZUNvbC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuaAppbmRleCA4NzIw
OWExNGUyYmMwZTA4NTgwZWY2MWVkNDdiMmMwOTRlNDRkMTIzLi4xZWExYjg2NzBhZTlmYWMzYjFi
NjhkMTVmYjgxN2YzODJjMDRmMDBjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNvbC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmgKQEAg
LTY4LDE0ICs2OCwxNiBAQCBwcml2YXRlOgogCiBpbmxpbmUgUmVuZGVyVGFibGVDb2wqIHRvUmVu
ZGVyVGFibGVDb2woUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgQVNTRVJUKCFvYmplY3Qg
fHwgb2JqZWN0LT5pc1RhYmxlQ29sKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJU
YWJsZUNvbCo+KG9iamVjdCk7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHRvUmVu
ZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlQoIWJveCB8fCBib3gtPmlzVGFi
bGVDb2woKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlQ29sKj4oYm94KTsK
IH0KIAogaW5saW5lIGNvbnN0IFJlbmRlclRhYmxlQ29sKiB0b1JlbmRlclRhYmxlQ29sKGNvbnN0
IFJlbmRlck9iamVjdCogb2JqZWN0KQogewotICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+
aXNUYWJsZUNvbCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyVGFibGVD
b2wqPihvYmplY3QpOworICAgIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSB0b1Jl
bmRlckJveE1vZGVsT2JqZWN0KG9iamVjdCk7CisgICAgQVNTRVJUKCFib3ggfHwgYm94LT5pc1Rh
YmxlQ29sKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJUYWJsZUNvbCo+
KGJveCk7CiB9CiAKIC8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3Nh
cnkgY2FzdC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93Lmgg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCmluZGV4IDU4ODI1MmJjODRiMjFm
ZDg1ZjNiMTdkNzA1OGQ5NDE4NjgwYWJmMzYuLmQ1N2Q4ZWQ3YjBkMmY1NjhhM2M3Yjc2YWI0MzFm
YTZmYmFlMjYzODggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93
LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaApAQCAtNjksMTQgKzY5
LDE2IEBAIHByaXZhdGU6CiAKIGlubGluZSBSZW5kZXJUYWJsZVJvdyogdG9SZW5kZXJUYWJsZVJv
dyhSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3Qt
PmlzVGFibGVSb3coKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlUm93Kj4o
b2JqZWN0KTsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2Rl
bE9iamVjdChvYmplY3QpOworICAgIEFTU0VSVCghYm94IHx8IGJveC0+aXNUYWJsZVJvdygpKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVSb3cqPihib3gpOwogfQogCiBpbmxp
bmUgY29uc3QgUmVuZGVyVGFibGVSb3cqIHRvUmVuZGVyVGFibGVSb3coY29uc3QgUmVuZGVyT2Jq
ZWN0KiBvYmplY3QpCiB7Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1RhYmxlUm93
KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJUYWJsZVJvdyo+KG9iamVj
dCk7CisgICAgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHRvUmVuZGVyQm94TW9k
ZWxPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlQoIWJveCB8fCBib3gtPmlzVGFibGVSb3coKSk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclRhYmxlUm93Kj4oYm94KTsKIH0K
IAogLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmggYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAppbmRleCA2ZDJmNzUyZTAzNmE3YmNk
YjgwMDE4MGJmNzY3MTk2ZjE0YzZmMWVkLi44YzAxMDM5NTM3MTcxYjgzNzBhMDExZTU5ZjYxZWE0
ZGQxNTAzNzY3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rp
b24uaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaApAQCAtMTc3
LDE0ICsxNzcsMTYgQEAgcHJpdmF0ZToKIAogaW5saW5lIFJlbmRlclRhYmxlU2VjdGlvbiogdG9S
ZW5kZXJUYWJsZVNlY3Rpb24oUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgQVNTRVJUKCFv
YmplY3QgfHwgb2JqZWN0LT5pc1RhYmxlU2VjdGlvbigpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4ob2JqZWN0KTsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVj
dCogYm94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChvYmplY3QpOworICAgIEFTU0VSVCghYm94
IHx8IGJveC0+aXNUYWJsZVNlY3Rpb24oKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRl
clRhYmxlU2VjdGlvbio+KGJveCk7CiB9CiAKIGlubGluZSBjb25zdCBSZW5kZXJUYWJsZVNlY3Rp
b24qIHRvUmVuZGVyVGFibGVTZWN0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQogewot
ICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNUYWJsZVNlY3Rpb24oKSk7Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclRhYmxlU2VjdGlvbio+KG9iamVjdCk7CisgICAg
Y29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qo
b2JqZWN0KTsKKyAgICBBU1NFUlQoIWJveCB8fCBib3gtPmlzVGFibGVTZWN0aW9uKCkpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJUYWJsZVNlY3Rpb24qPihib3gpOwogfQog
CiAvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5o
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaAppbmRleCBm
YmNhMzA4MTQ1OGM4ZDc5NWZiYzFjOTA1ZWIyNmJhOGFlYmVmNzA5Li45OGQzM2Y1MGI4MzZhOTE3
ZDJjOWViY2FhZjczYWI4Y2E4OWRmODZmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sTXVsdGlMaW5lLmgKQEAgLTUzLDkgKzUzLDEwIEBAIHByaXZhdGU6CiB9Owog
CiBpbmxpbmUgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUqIHRvUmVuZGVyVGV4dENvbnRyb2xN
dWx0aUxpbmUoUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17IAotICAgIEFTU0VSVCghb2JqZWN0IHx8
IG9iamVjdC0+aXNUZXh0QXJlYSgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4
dENvbnRyb2xNdWx0aUxpbmUqPihvYmplY3QpOworeworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0
KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG9iamVjdCk7CisgICAgQVNTRVJUKCFib3gg
fHwgYm94LT5pc1RleHRBcmVhKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0
Q29udHJvbE11bHRpTGluZSo+KGJveCk7CiB9CiAKIC8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUg
ZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKaW5kZXggNGJjODBjZjM2ZTBmY2M5NGU5MDE2YjYxNzNk
ZjAwNjExNGMxZjhlYi4uNmZiMzE1NDg0ODliMTU0MmYzNTNkOTZlYTcwMDE4ZWYzMTRiNjlhMyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgK
QEAgLTE2MSw5ICsxNjEsMTAgQEAgcHJpdmF0ZToKIH07CiAKIGlubGluZSBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUqIHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKFJlbmRlck9iamVj
dCogb2JqZWN0KQoteyAKLSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzVGV4dEZpZWxk
KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUq
PihvYmplY3QpOworeworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJv
eE1vZGVsT2JqZWN0KG9iamVjdCk7CisgICAgQVNTRVJUKCFib3ggfHwgYm94LT5pc1RleHRGaWVs
ZCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
Kj4oYm94KTsKIH0KIAogLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vz
c2FyeSBjYXN0LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMu
bW0gYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCBjYzJmZjFmZTNk
MmU0ZTE2OTk0NzhiYjg4M2FmNWUxNDIzMGYyNzk5Li5lOWZjYjQ0NTJjZTAwMDdmYTk1MGVhZTc1
MjU3OGE5Njg4OThlZThiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbQorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQpAQCAtODIz
LDcgKzgyMyw3IEBAIEludFNpemUgUmVuZGVyVGhlbWVNYWM6Om1ldGVyU2l6ZUZvckJvdW5kcyhj
b25zdCBSZW5kZXJNZXRlciogcmVuZGVyTWV0ZXIsIGNvbnN0CiAKIGJvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50TWV0ZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmICghcmVuZGVyT2Jq
ZWN0LT5pc01ldGVyKCkpCisgICAgaWYgKCFyZW5kZXJPYmplY3QtPmlzQm94TW9kZWxPYmplY3Qo
KSB8fCAhdG9SZW5kZXJCb3hNb2RlbE9iamVjdChyZW5kZXJPYmplY3QpLT5pc01ldGVyKCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxv
Y2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7CkBAIC05MzQsNyArOTM0LDcgQEAgdm9pZCBS
ZW5kZXJUaGVtZU1hYzo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwg
UmVuZGVyU3R5bGUqLCBFbGUKIAogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVzc0Jh
cihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKCFyZW5kZXJPYmplY3QtPmlzUHJvZ3Jl
c3MoKSkKKyAgICBpZiAoIXJlbmRlck9iamVjdC0+aXNCb3hNb2RlbE9iamVjdCgpIHx8ICF0b1Jl
bmRlckJveE1vZGVsT2JqZWN0KHJlbmRlck9iamVjdCktPmlzUHJvZ3Jlc3MoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICBSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MgPSB0b1Jl
bmRlclByb2dyZXNzKHJlbmRlck9iamVjdCk7CkBAIC0xMzIwLDcgKzEzMjAsNyBAQCBjb25zdCBm
bG9hdCB2ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgPSAwLjFmOwogCiBib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgQVNTRVJUKG8tPnBhcmVudCgp
LT5pc1NsaWRlcigpKTsKKyAgICBBU1NFUlQoby0+cGFyZW50KCktPmlzQm94TW9kZWxPYmplY3Qo
KSAmJiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG8tPnBhcmVudCgpKS0+aXNTbGlkZXIoKSk7CiAK
ICAgICBOU1NsaWRlckNlbGwqIHNsaWRlclRodW1iQ2VsbCA9IG8tPnN0eWxlKCktPmFwcGVhcmFu
Y2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydAogICAgICAgICA/IHNsaWRlclRodW1iVmVy
dGljYWwoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5j
cHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCA0MDgwMTVj
YmEzNTk0Njc0NGQxZTYzMTEzOTEzZjY0NDZkNzVmYTJjLi4xYWIxZTBlMzNiNzhiYTkyMzliOTBj
NTViZGI2N2E0MTNmYzM5MDY5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cApAQCAtNzAzLDcgKzcwMyw3IEBAIFN0cmluZyBtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oRWxlbWVu
dCogZWxlbWVudCkKICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudFJlZihlbGVtZW50KTsKICAg
ICBlbGVtZW50LT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKIAotICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOworICAgIFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlckJveE1vZGVsT2JqZWN0KCk7CiAgICAgaWYg
KCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkKICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5oIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uaAppbmRleCBiYjJiMDVjY2NiYTUyNTNhODcw
YmZmODE4ZDU3MDI4NmQxNDViMjczLi4yMDU4Nzk0Nzg1NzI1YWE1NjU0MDUxYWEyZDcyMzU1NzM5
NDNhMGQwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5oCisrKyBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmgKQEAgLTgwLDggKzgwLDkgQEAgcHJpdmF0
ZToKIAogaW5saW5lIFJlbmRlclZpZGVvKiB0b1JlbmRlclZpZGVvKFJlbmRlck9iamVjdCogb2Jq
ZWN0KQogewotICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNWaWRlbygpKTsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVmlkZW8qPihvYmplY3QpOworICAgIFJlbmRlckJveE1v
ZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG9iamVjdCk7CisgICAgQVNT
RVJUKCFib3ggfHwgYm94LT5pc1ZpZGVvKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5k
ZXJWaWRlbyo+KGJveCk7CiB9CiAKIC8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4g
dW5uZWNlc3NhcnkgY2FzdC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldp
ZGdldC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgKaW5kZXggYjg1Yjk1MTZl
YTllOGY1MTE2ZGY5ZDhkYmM5ZDJhN2I3MmEwM2NlMi4uZGU0N2RlOWJjODJiYmM5NWZlOWQ5MGE3
NGI5YmU4NTUwODlhNGE0YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lk
Z2V0LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgKQEAgLTgwLDE0ICs4
MCwxNiBAQCBwcml2YXRlOgogCiBpbmxpbmUgUmVuZGVyV2lkZ2V0KiB0b1JlbmRlcldpZGdldChS
ZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlz
V2lkZ2V0KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQqPihvYmplY3Qp
OworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0
KG9iamVjdCk7CisgICAgQVNTRVJUKCFib3ggfHwgYm94LT5pc1dpZGdldCgpKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4oYm94KTsKIH0KIAogaW5saW5lIGNvbnN0IFJl
bmRlcldpZGdldCogdG9SZW5kZXJXaWRnZXQoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7
Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1dpZGdldCgpKTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyV2lkZ2V0Kj4ob2JqZWN0KTsKKyAgICBjb25zdCBSZW5k
ZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChvYmplY3QpOwor
ICAgIEFTU0VSVCghYm94IHx8IGJveC0+aXNXaWRnZXQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IFJlbmRlcldpZGdldCo+KGJveCk7CiB9CiAKIC8vIFRoaXMgd2lsbCBjYXRjaCBh
bnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1NWR1RleHRRdWVyeS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0UXVlcnku
Y3BwCmluZGV4IDM1Y2E2OTBlNDcwODU4YTgwZmEzZGE4ZGVlZGFiZTdkOGE3ODQwZDMuLjc1MDM5
YjhjNmEwNzk2MjdiOGI0NTcxMTFmNmNhNTgzYjIzMTZjMGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cmVuZGVyaW5nL1NWR1RleHRRdWVyeS5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHVGV4
dFF1ZXJ5LmNwcApAQCAtNDAsNyArNDAsNyBAQCBzdHJ1Y3QgU1ZHVGV4dFF1ZXJ5OjpEYXRhIHsK
ICAgICB1bnNpZ25lZCBwcm9jZXNzZWRDaHVua0NoYXJhY3RlcnM7CiB9OwogCi1zdGF0aWMgaW5s
aW5lIElubGluZUZsb3dCb3gqIGZsb3dCb3hGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQorc3RhdGljIGlubGluZSBJbmxpbmVGbG93Qm94KiBmbG93Qm94Rm9yUmVuZGVyZXIoUmVu
ZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyKQogewogICAgIGlmICghcmVuZGVyZXIpCiAgICAg
ICAgIHJldHVybiAwOwpAQCAtNzksNyArNzksNyBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IG1hcExl
bmd0aFRocm91Z2hDaHVua1RyYW5zZm9ybWF0aW9uKGNvbnN0IFNWR0lubGluZVRleHRCb3gqCiAg
ICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoc3RhdGljX2Nhc3Q8ZG91YmxlPihsZW5n
dGgpICogKGlzVmVydGljYWxUZXh0ID8gdHJhbnNmb3JtLmQoKSA6IHRyYW5zZm9ybS5hKCkpKTsK
IH0KIAotU1ZHVGV4dFF1ZXJ5OjpTVkdUZXh0UXVlcnkoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
K1NWR1RleHRRdWVyeTo6U1ZHVGV4dFF1ZXJ5KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJl
cikKIHsKICAgICBjb2xsZWN0VGV4dEJveGVzSW5GbG93Qm94KGZsb3dCb3hGb3JSZW5kZXJlcihy
ZW5kZXJlcikpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHVGV4dFF1ZXJ5
LmggYi9XZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0UXVlcnkuaAppbmRleCBmMTljNzJlOGU2OTYw
MjNkNzhhYmJjZjczOTM3MzFhYmMwNmNlMmIzLi45OWZiZGJlMWI2YTdhZWRlYjNlOGM4NjkxYmM3
NGNhZjU2MTkwNjA4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0UXVlcnku
aAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0UXVlcnkuaApAQCAtMjcsMTQgKzI3LDE0
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElubGluZUZsb3dCb3g7Ci1jbGFzcyBS
ZW5kZXJPYmplY3Q7CitjbGFzcyBSZW5kZXJCb3hNb2RlbE9iamVjdDsKIGNsYXNzIFJlbmRlclN0
eWxlOwogY2xhc3MgU1ZHSW5saW5lVGV4dEJveDsKIHN0cnVjdCBTVkdUZXh0Q2h1bmtQYXJ0Owog
CiBjbGFzcyBTVkdUZXh0UXVlcnkgewogcHVibGljOgotICAgIFNWR1RleHRRdWVyeShSZW5kZXJP
YmplY3QqKTsKKyAgICBTVkdUZXh0UXVlcnkoUmVuZGVyQm94TW9kZWxPYmplY3QqKTsKIAogICAg
IHVuc2lnbmVkIG51bWJlck9mQ2hhcmFjdGVycygpIGNvbnN0OwogICAgIGZsb2F0IHRleHRMZW5n
dGgoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRDb250cm9sSW5u
ZXJFbGVtZW50cy5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVu
dHMuY3BwCmluZGV4IGIyOTg3NmFmMGViZGNlOGVkNzg0YTc4YjlhZGE1MDQwYTg3Y2RmN2IuLmRh
OWIyMDY1ZjQ2ZWQ1YWM0NzZiNWUzZmM5ZmQzNzRiNGMyMmJjN2YgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAKKysrIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcApAQCAtNTgsMTEgKzU4LDExIEBA
IHByaXZhdGU6CiAKIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrOjpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBp
bnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24p
CiB7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUoKS0+c2hhZG93QW5jZXN0b3JO
b2RlKCktPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNzc0JveCA9IG5v
ZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCktPnJlbmRlckJveE1vZGVsT2JqZWN0KCk7CiAKICAg
ICBib29sIHBsYWNlaG9sZGVySXNWaXNpYmxlID0gZmFsc2U7Ci0gICAgaWYgKHJlbmRlcmVyLT5p
c1RleHRGaWVsZCgpKQotICAgICAgICBwbGFjZWhvbGRlcklzVmlzaWJsZSA9IHRvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lKHJlbmRlcmVyKS0+cGxhY2Vob2xkZXJJc1Zpc2libGUoKTsKKyAg
ICBpZiAoY3NzQm94LT5pc1RleHRGaWVsZCgpKQorICAgICAgICBwbGFjZWhvbGRlcklzVmlzaWJs
ZSA9IHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKGNzc0JveCktPnBsYWNlaG9sZGVySXNW
aXNpYmxlKCk7CiAKICAgICByZXR1cm4gUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3Qs
IHJlc3VsdCwgeCwgeSwgdHgsIHR5LCBwbGFjZWhvbGRlcklzVmlzaWJsZSA/IEhpdFRlc3RCbG9j
a0JhY2tncm91bmQgOiBoaXRUZXN0QWN0aW9uKTsKIH0KQEAgLTE0NSwxNSArMTQ1LDIyIEBAIHZv
aWQgVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50
KiBldmVudCkKICAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZl
bnQpOwogfQogCitzdGF0aWMgYm9vbCBzaG91bGRVc2VNdWx0aUxpbmUoTm9kZSogc2hhZG93QW5j
ZXN0b3IpCit7CisgICAgaWYgKCFzaGFkb3dBbmNlc3RvcikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNzc0JveCA9IHNoYWRvd0FuY2VzdG9yLT5y
ZW5kZXJCb3hNb2RlbE9iamVjdCgpOworICAgIGlmICghY3NzQm94KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBBU1NFUlQoY3NzQm94LT5pc1RleHRGaWVsZCgpIHx8IGNzc0JveC0+aXNU
ZXh0QXJlYSgpKTsKKyAgICByZXR1cm4gY3NzQm94LT5pc1RleHRBcmVhKCk7Cit9CisKIFJlbmRl
ck9iamVjdCogVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5k
ZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikKIHsKLSAgICBib29sIG11bHRpTGluZSA9IGZh
bHNlOwotICAgIE5vZGUqIHNoYWRvd0FuY2VzdG9yID0gc2hhZG93QW5jZXN0b3JOb2RlKCk7Ci0g
ICAgaWYgKHNoYWRvd0FuY2VzdG9yICYmIHNoYWRvd0FuY2VzdG9yLT5yZW5kZXJlcigpKSB7Ci0g
ICAgICAgIEFTU0VSVChzaGFkb3dBbmNlc3Rvci0+cmVuZGVyZXIoKS0+aXNUZXh0RmllbGQoKSB8
fCBzaGFkb3dBbmNlc3Rvci0+cmVuZGVyZXIoKS0+aXNUZXh0QXJlYSgpKTsKLSAgICAgICAgbXVs
dGlMaW5lID0gc2hhZG93QW5jZXN0b3ItPnJlbmRlcmVyKCktPmlzVGV4dEFyZWEoKTsKLSAgICB9
Ci0gICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayh0aGlz
LCBtdWx0aUxpbmUpOworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJUZXh0Q29udHJvbElu
bmVyQmxvY2sodGhpcywgc2hvdWxkVXNlTXVsdGlMaW5lKHNoYWRvd0FuY2VzdG9yTm9kZSgpKSk7
CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29u
dGVudEVsZW1lbnQuY3BwCmluZGV4IDIzNGMwM2FmMTNlZTZlNjBhOWIyNGYxYjRkNTNkMTBmNDhm
ZTdjZmUuLjM1OTNmNGNhMTc1YjUwODVmN2M4OWJkZmViZDdiYzVlZTMzYWUyOGQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9z
dmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
IkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJSZW5kZXJCb3hNb2RlbE9iamVjdC5oIgogI2luY2x1
ZGUgIlNWR1RleHRRdWVyeS5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJYTUxOYW1lcy5oIgpAQCAtNDYsNiArNDcsMTEgQEAgU1ZHVGV4dENvbnRlbnRFbGVt
ZW50Ojp+U1ZHVGV4dENvbnRlbnRFbGVtZW50KCkKIHsKIH0KIAorUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIFNWR1RleHRDb250ZW50RWxlbWVudDo6cmVuZGVyZXIoKSBjb25zdAoreworICAgIHJldHVy
biB0b1JlbmRlckJveE1vZGVsT2JqZWN0KFNWR1N0eWxlZEVsZW1lbnQ6OnJlbmRlcmVyKCkpOwor
fQorCiB1bnNpZ25lZCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldE51bWJlck9mQ2hhcnMoKSBj
b25zdAogewogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0cygpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50Lmgg
Yi9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaAppbmRleCA0NDIyMGI5MWVhOGQw
Yzk1ZmY5YTYwZTQyYWJhNmY4YzJiYzgzNjk2Li4wYjI2MzQ2MGJjM2VkMzVlZTMyN2U3ZTFiMzYw
NjZiZWUzZTZmZjlhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1l
bnQuaAorKysgYi9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaApAQCAtNDQsNyAr
NDQsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIFNWR1RleHRDb250ZW50RWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICAgICAgdmlydHVhbCB+
U1ZHVGV4dENvbnRlbnRFbGVtZW50KCk7Ci0gICAgICAgIAorCisgICAgICAgIC8vIEFsbCByZW5k
ZXJlcnMgY3JlYXRlZCBieSBzdmcgdGV4dCBlbGVtZW50cyBhcmUgQ1NTIEJveCBNb2RlbAorICAg
ICAgICAvLyByZW5kZXJlcnMgc28gdGhhdCB0aGV5IHBsYXkgbmljZSB3aXRoIHRoZSB0ZXh0IHN5
c3RlbS4KKyAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyKCkgY29uc3Q7CisK
ICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6
aXNWYWxpZCgpOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1RleHRDb250ZW50KCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdUZXh0UG9zaXRp
b25pbmdFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQu
Y3BwCmluZGV4IDE5ZjFmYmNiNTUwMzY1ZjJkNmM3YjZiZjZlZGY5OGE3M2M1ODRjYjkuLjI1NTlk
MmQ4NDY2OTJmYzk5MGI2ZWI1ZWY1OWYwZmE1ZGFjYzdhZjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
c3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR1Rl
eHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSAiU1ZH
VGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCi0jaW5j
bHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyQm94TW9kZWxPYmplY3QuaCIK
ICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aExpc3Qu
aCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63486</attachid>
            <date>2010-08-04 13:23:19 -0700</date>
            <delta_ts>2010-08-04 13:23:19 -0700</delta_ts>
            <desc>wip renderer</desc>
            <filename>bug-43348-20100804132317.patch</filename>
            <type>text/plain</type>
            <size>142543</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWZjNWQ2YmQ3ZDUwMzBkNzgwODM3ZmZiYTA3NDQ2OWZhZWFjNGU2NS4uZDFlOTkzNjM0NzJjMDk1
YTUyYmUzZThiNTI4ODNiOTcxMTBiOGI2MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMTcgQEAKKzIwMTAtMDgtMDIgIEVy
aWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBtb3JlIGV4cGxpY2l0IHR5cGVzIGludG8g
dGhlIHJlbmRlcmluZyB0cmVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00MzM0OAorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Om5vZGVIYXNSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZyb21SZW5kZXJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZSk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlJbWFnZU1hcExpbms6OkFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmspOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlNZW51TGlzdDo6QWNjZXNzaWJpbGl0eU1lbnVMaXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZW51TGlzdDo6cmVuZGVyZXIpOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5TWVudUxpc3Q6OmNyZWF0ZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlckxpc3RJ
dGVtQ29udGFpbmVyRm9yTm9kZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzSW5saW5lV2l0aENvbnRp
bnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpp
c05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmlzQXR0YWNobWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0Ojppc011bHRpU2VsZWN0YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0Ojppc1JlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmlzRmllbGRzZXQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6YWN0aW9uRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OndpZGdldCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25Gb3JQ
b2ludCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb0Fj
Y2Vzc2liaWxpdHlIaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OnJlbmRlck9iamVjdElzT2JzZXJ2YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSk6Cisg
ICAgICAgIChXZWJDb3JlOjptc2FhUm9sZUZvclJlbmRlcmVyKToKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5VGFibGU6OmlzVGFibGVFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSk6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuaDoKKyAgICAgICAgKiBiaW5k
aW5ncy9vYmpjL0RPTS5tbToKKyAgICAgICAgKC1bRE9NRWxlbWVudCBpbWFnZV0pOgorICAgICAg
ICAoLVtET01FbGVtZW50IF9pbWFnZVRJRkZSZXByZXNlbnRhdGlvbl0pOgorICAgICAgICAqIGRv
bS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3aWRnZXRGb3JOb2RlKToKKyAgICAg
ICAgKiBkb20vVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0OjpyZW5kZXJlcklzTmVl
ZGVkKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjphZGRCbG9ja1BsYWNlaG9sZGVySWZO
ZWVkZWQpOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjppc0RlbGV0YWJsZUVsZW1lbnQpOgorICAgICAgICAqIGVkaXRpbmcv
VGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6c2hvdWxk
UmVwcmVzZW50Tm9kZU9mZnNldFplcm8pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9y
OjpzaG91bGRFbWl0U3BhY2VCZWZvcmVBbmRBZnRlck5vZGUpOgorICAgICAgICAqIGVkaXRpbmcv
VHlwaW5nQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjptYWtl
RWRpdGFibGVSb290RW1wdHkpOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bm9kZU9yUGFyZW50Tm9kZUlmVGFibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6aXNFZGl0YWJsZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmlzUmljaGx5RWRp
dGFibGVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjplZGl0YWJsZVJvb3RGb3JQb3NpdGlv
bik6CisgICAgICAgICogaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEFyZWFFbGVtZW50Ojp1cGRhdGVGb2N1c0FwcGVhcmFuY2UpOgorICAgICAgICAqIGh0
bWwvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OnJlbmRlcmVyKToKKyAgICAgICAg
KiBodG1sL0hUTUxFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRXaWRnZXRSZW5kZXJlcik6CisgICAgICAgICogaHRt
bC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyZW50SXNUYWJsZUVs
ZW1lbnRQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cmVuZGVyZXJJ
c05lZWRlZCk6CisgICAgICAgICogaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAg
ICAgICogbG9hZGVyL0ltYWdlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTG9h
ZGVyOjpzZXRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxvYWRlcjo6dXBkYXRlRnJv
bUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMb2FkZXI6OnVwZGF0ZVJlbmRlcmVy
KToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgICogcGFnZS9EcmFnQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRDYWNoZWRJbWFnZSk6CisgICAgICAgICog
cGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpo
aXRUZXN0UmVzdWx0QXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnN1
YmZyYW1lRm9yVGFyZ2V0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNl
bGVjdEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNhcHNMb2NrU3Rh
dGVNYXlIYXZlQ2hhbmdlZCk6CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjppc0ZyYW1lRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6b3duZXJS
ZW5kZXJlcik6CisgICAgICAgICogcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NTdWJmcmFtZUV2ZW50VG9T
dWJmcmFtZSk6CisgICAgICAgICogcGFnZS9tYWMvRnJhbWVNYWMubW06CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZTo6YmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCk6CisgICAg
ICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGl0
VGVzdFJlc3VsdDo6aW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6YWJz
b2x1dGVJbWFnZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjphYnNvbHV0
ZU1lZGlhVVJMKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQXBwbGV0Lmg6CisgICAgICAg
IChXZWJDb3JlOjp0b1JlbmRlckFwcGxldCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmg6CisgICAgICAgIChXZWJDb3JlOjp0b1JlbmRlckJsb2NrKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eE1vZGVsT2JqZWN0Ojppc0FwcGxldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6aXNFbWJlZGRlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hN
b2RlbE9iamVjdDo6aXNGaWVsZHNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6aXNGaWxlVXBsb2FkQ29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3hNb2RlbE9iamVjdDo6aXNGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6aXNGcmFtZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9i
amVjdDo6aXNJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6
aXNJbmxpbmVCbG9ja09ySW5saW5lVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
TW9kZWxPYmplY3Q6OmlzTGlzdEJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6aXNMaXN0SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9i
amVjdDo6aXNNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6
aXNNZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6aXNN
ZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6aXNQcm9ncmVz
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6aXNSZW5kZXJCdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmlzUmVuZGVySUZy
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojppc1JlbmRlcklt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojppc1JlbmRlclBh
cnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmlzUmVwbGljYSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6aXNTbGlkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmlzVGV4dEFyZWEpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmlzVGV4dEZpZWxkKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojppc1ZpZGVvKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojppc1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6aXNDYW52YXMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCdXR0b24uaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvUmVuZGVyQnV0dG9uKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwbGFuQ291
bnRlcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjp0b1JlbmRlckZpZWxkc2V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2wuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2wpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGcmFtZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6dG9SZW5kZXJGcmFtZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYW1lU2V0Ojpjb21wdXRlRWRnZUluZm8p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhbWVTZXQ6OnNldElzUmVzaXppbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhbWVTZXQ6OmlzQ2hpbGRBbGxvd2VkKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvUmVuZGVy
RnJhbWVTZXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJRnJhbWUuaDoKKyAgICAgICAg
KFdlYkNvcmU6OnRvUmVuZGVySUZyYW1lKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1h
Z2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvUmVuZGVySW1hZ2UpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvUmVuZGVySW5saW5lKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmlzM0RDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
Ojppc0RpcmVjdGx5Q29tcG9zaXRlZEltYWdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5oOgorICAgICAgICAoV2ViQ29yZTo6dG9SZW5kZXJMaXN0Qm94KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvUmVuZGVy
TGlzdEl0ZW0pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZWRpYS5oOgorICAgICAgICAo
V2ViQ29yZTo6dG9SZW5kZXJNZWRpYSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVM
aXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6dG9SZW5kZXJNZW51TGlz
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1ldGVyLmg6CisgICAgICAgIChXZWJDb3Jl
Ojp0b1JlbmRlck1ldGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzQlIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0Ojppc1J1YnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpp
c0Jsb2NrRmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzTGlzdE1hcmtl
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzUmVuZGVyQmxvY2spOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc1JlbmRlcklubGluZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzUmVuZGVyVmlldyk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclBhcnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvUmVuZGVyUGFydCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmg6CisgICAgICAgIChXZWJDb3JlOjp0b1JlbmRl
clByb2dyZXNzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjp0b1JlbmRlclNsaWRlcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRh
YmxlLmg6CisgICAgICAgIChXZWJDb3JlOjp0b1JlbmRlclRhYmxlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGFibGVDb2wuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvUmVuZGVyVGFibGVD
b2wpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oOgorICAgICAgICAoV2Vi
Q29yZTo6dG9SZW5kZXJUYWJsZVJvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxl
U2VjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6dG9SZW5kZXJUYWJsZVNlY3Rpb24pOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oOgorICAgICAgICAo
V2ViQ29yZTo6dG9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZSk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oOgorICAgICAgICAoV2ViQ29yZTo6dG9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1ldGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFByb2dyZXNzQmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNsaWRlclRodW1iKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWRl
by5oOgorICAgICAgICAoV2ViQ29yZTo6dG9SZW5kZXJWaWRlbyk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlcldpZGdldC5oOgorICAgICAgICAoV2ViQ29yZTo6dG9SZW5kZXJXaWRnZXQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9TVkdUZXh0UXVlcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Zmxvd0JveEZvclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6U1ZH
VGV4dFF1ZXJ5KToKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHVGV4dFF1ZXJ5Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2s6Om5vZGVBdFBvaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OnNob3VsZFVzZU11bHRpTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29u
dHJvbElubmVyVGV4dEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKiBzdmcvU1ZH
VGV4dENvbnRlbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDb250ZW50
RWxlbWVudDo6cmVuZGVyZXIpOgorICAgICAgICAqIHN2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5jcHA6CisKIDIwMTAt
MDctMzEgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuY3BwIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3Bw
CmluZGV4IDc1MGM2MTFmZGY3YmNiM2NkNzQ5OGQ4ZWVjNjUxOTQwMTNjZjlmMjcuLmQxNmIzMGYw
NDJhOTc1NDc1MmJlMGE0YTEwNmNiYmI2N2M2ODBhYTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5jcHAKQEAgLTU5LDggKzU5LDEzIEBACiAjZW5kaWYKICNpbmNsdWRlICJJ
bnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgorI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0
LmgiCisjaW5jbHVkZSAiUmVuZGVyVGFibGUuaCIKKyNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwu
aCIKKyNpbmNsdWRlICJSZW5kZXJUYWJsZVJvdy5oIgogI2luY2x1ZGUgIlJlbmRlclByb2dyZXNz
LmgiCisjaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgog
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTE2MCw4MCArMTY1LDgzIEBAIEFjY2Vz
c2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldChSZW5kZXJPYmplY3QqIHJlbmRlcmVy
KQogICAgIAogICAgIHJldHVybiBvYmo7CiB9Ci0gICAgCi1ib29sIEFYT2JqZWN0Q2FjaGU6Om5v
ZGVIYXNSb2xlKE5vZGUqIG5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgcm9sZSkKKworLy8gRklY
TUU6IFRoaXMgcHJvYmFibHkgYmVsb25ncyBvbiBOb2RlLgorLy8gRklYTUU6IFRoaXMgc2hvdWxk
IHRha2UgYSBjb25zdCBjaGFyKiwgYnV0IG9uZSBjYWxsZXIgcGFzc2VzIG51bGxBdG9tLgorYm9v
bCBub2RlSGFzUm9sZShOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIHJvbGUpCiB7CiAgICAgaWYg
KCFub2RlIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKKwogICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obm9kZSktPmdldEF0dHJpYnV0ZShyb2xlQXR0ciksIHJvbGUpOwogfQogCi1BY2Nlc3NpYmls
aXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQorc3RhdGljIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gY3JlYXRlRnJvbVJl
bmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gZ2V0
KHJlbmRlcmVyKTsKLQotICAgIGlmICghb2JqKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSByZW5k
ZXJlci0+bm9kZSgpOwotICAgICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gbmV3T2Jq
ID0gMDsKLSAgICAgICAgaWYgKHJlbmRlcmVyLT5pc0xpc3RCb3goKSkKLSAgICAgICAgICAgIG5l
d09iaiA9IEFjY2Vzc2liaWxpdHlMaXN0Qm94OjpjcmVhdGUocmVuZGVyZXIpOwotICAgICAgICBl
bHNlIGlmIChyZW5kZXJlci0+aXNNZW51TGlzdCgpKQotICAgICAgICAgICAgbmV3T2JqID0gQWNj
ZXNzaWJpbGl0eU1lbnVMaXN0OjpjcmVhdGUocmVuZGVyZXIpOwotCi0gICAgICAgIC8vIElmIHRo
ZSBub2RlIGlzIGFyaWEgcm9sZT0ibGlzdCIgb3IgdGhlIGFyaWEgcm9sZSBpcyBlbXB0eSBhbmQg
aXRzIGEgdWwvb2wvZGwgdHlwZSAoaXQgc2hvdWxkbid0IGJlIGEgbGlzdCBpZiBhcmlhIHNheXMg
b3RoZXJ3aXNlKS4gCi0gICAgICAgIGVsc2UgaWYgKG5vZGUgJiYgKChub2RlSGFzUm9sZShub2Rl
LCAibGlzdCIpIHx8IG5vZGVIYXNSb2xlKG5vZGUsICJkaXJlY3RvcnkiKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgKG5vZGVIYXNSb2xlKG5vZGUsIG51bGxBdG9tKSAmJiAobm9kZS0+
aGFzVGFnTmFtZSh1bFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShvbFRhZykgfHwgbm9kZS0+aGFz
VGFnTmFtZShkbFRhZykpKSkpCi0gICAgICAgICAgICBuZXdPYmogPSBBY2Nlc3NpYmlsaXR5TGlz
dDo6Y3JlYXRlKHJlbmRlcmVyKTsKLSAgICAgICAgCi0gICAgICAgIC8vIGFyaWEgdGFibGVzCi0g
ICAgICAgIGVsc2UgaWYgKG5vZGVIYXNSb2xlKG5vZGUsICJncmlkIikgfHwgbm9kZUhhc1JvbGUo
bm9kZSwgInRyZWVncmlkIikpCi0gICAgICAgICAgICBuZXdPYmogPSBBY2Nlc3NpYmlsaXR5QVJJ
QUdyaWQ6OmNyZWF0ZShyZW5kZXJlcik7Ci0gICAgICAgIGVsc2UgaWYgKG5vZGVIYXNSb2xlKG5v
ZGUsICJyb3ciKSkKLSAgICAgICAgICAgIG5ld09iaiA9IEFjY2Vzc2liaWxpdHlBUklBR3JpZFJv
dzo6Y3JlYXRlKHJlbmRlcmVyKTsKLSAgICAgICAgZWxzZSBpZiAobm9kZUhhc1JvbGUobm9kZSwg
ImdyaWRjZWxsIikgfHwgbm9kZUhhc1JvbGUobm9kZSwgImNvbHVtbmhlYWRlciIpIHx8IG5vZGVI
YXNSb2xlKG5vZGUsICJyb3doZWFkZXIiKSkKLSAgICAgICAgICAgIG5ld09iaiA9IEFjY2Vzc2li
aWxpdHlBUklBR3JpZENlbGw6OmNyZWF0ZShyZW5kZXJlcik7Ci0KLSAgICAgICAgLy8gc3RhbmRh
cmQgdGFibGVzCi0gICAgICAgIGVsc2UgaWYgKHJlbmRlcmVyLT5pc1RhYmxlKCkpCi0gICAgICAg
ICAgICBuZXdPYmogPSBBY2Nlc3NpYmlsaXR5VGFibGU6OmNyZWF0ZShyZW5kZXJlcik7Ci0gICAg
ICAgIGVsc2UgaWYgKHJlbmRlcmVyLT5pc1RhYmxlUm93KCkpCi0gICAgICAgICAgICBuZXdPYmog
PSBBY2Nlc3NpYmlsaXR5VGFibGVSb3c6OmNyZWF0ZShyZW5kZXJlcik7Ci0gICAgICAgIGVsc2Ug
aWYgKHJlbmRlcmVyLT5pc1RhYmxlQ2VsbCgpKQotICAgICAgICAgICAgbmV3T2JqID0gQWNjZXNz
aWJpbGl0eVRhYmxlQ2VsbDo6Y3JlYXRlKHJlbmRlcmVyKTsKKyAgICAvLyBGSVhNRTogSG93IGNv
dWxkIHJlbmRlcmVyLT5ub2RlKCkgZXZlciBub3QgYmUgYW4gRWxlbWVudD8KKyAgICBOb2RlKiBu
b2RlID0gcmVuZGVyZXItPm5vZGUoKTsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY3NzQm94
ID0gcmVuZGVyZXItPmlzQm94TW9kZWxPYmplY3QoKSA/IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qo
cmVuZGVyZXIpIDogMDsKKyAgICBpZiAoY3NzQm94LT5pc0xpc3RCb3goKSkKKyAgICAgICAgcmV0
dXJuIEFjY2Vzc2liaWxpdHlMaXN0Qm94OjpjcmVhdGUodG9SZW5kZXJMaXN0Qm94KGNzc0JveCkp
OworICAgIGlmIChjc3NCb3gtPmlzTWVudUxpc3QoKSkKKyAgICAgICAgcmV0dXJuIEFjY2Vzc2li
aWxpdHlNZW51TGlzdDo6Y3JlYXRlKHRvUmVuZGVyTWVudUxpc3QoY3NzQm94KSk7CisKKyAgICAv
LyBJZiB0aGUgbm9kZSBpcyBhcmlhIHJvbGU9Imxpc3QiIG9yIHRoZSBhcmlhIHJvbGUgaXMgZW1w
dHkgYW5kIGl0cyBhIHVsL29sL2RsIHR5cGUgKGl0IHNob3VsZG4ndCBiZSBhIGxpc3QgaWYgYXJp
YSBzYXlzIG90aGVyd2lzZSkuIAorICAgIGlmIChub2RlICYmICgobm9kZUhhc1JvbGUobm9kZSwg
Imxpc3QiKSB8fCBub2RlSGFzUm9sZShub2RlLCAiZGlyZWN0b3J5IikpCisgICAgICAgICAgICAg
ICAgICAgICAgfHwgKG5vZGVIYXNSb2xlKG5vZGUsIG51bGxBdG9tKSAmJiAobm9kZS0+aGFzVGFn
TmFtZSh1bFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShvbFRhZykgfHwgbm9kZS0+aGFzVGFnTmFt
ZShkbFRhZykpKSkpCisgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5TGlzdDo6Y3JlYXRlKHJl
bmRlcmVyKTsKKworICAgIC8vIGFyaWEgdGFibGVzCisgICAgaWYgKG5vZGVIYXNSb2xlKG5vZGUs
ICJncmlkIikgfHwgbm9kZUhhc1JvbGUobm9kZSwgInRyZWVncmlkIikpCisgICAgICAgIHJldHVy
biBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OmNyZWF0ZShyZW5kZXJlcik7CisgICAgaWYgKG5vZGVI
YXNSb2xlKG5vZGUsICJyb3ciKSkKKyAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlBUklBR3Jp
ZFJvdzo6Y3JlYXRlKHJlbmRlcmVyKTsKKyAgICBpZiAobm9kZUhhc1JvbGUobm9kZSwgImdyaWRj
ZWxsIikgfHwgbm9kZUhhc1JvbGUobm9kZSwgImNvbHVtbmhlYWRlciIpIHx8IG5vZGVIYXNSb2xl
KG5vZGUsICJyb3doZWFkZXIiKSkKKyAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlBUklBR3Jp
ZENlbGw6OmNyZWF0ZShyZW5kZXJlcik7CisKKyAgICAvLyBzdGFuZGFyZCB0YWJsZXMKKyAgICBp
ZiAoY3NzQm94LT5pc1RhYmxlKCkpCisgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VGFibGU6
OmNyZWF0ZSh0b1JlbmRlclRhYmxlKGNzc0JveCkpOworICAgIGlmIChjc3NCb3gtPmlzVGFibGVS
b3coKSkKKyAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6Y3JlYXRlKHRvUmVu
ZGVyVGFibGVSb3coY3NzQm94KSk7CisgICAgaWYgKGNzc0JveC0+aXNUYWJsZUNlbGwoKSkKKyAg
ICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmNyZWF0ZSh0b1JlbmRlclRhYmxl
Q2VsbChjc3NCb3gpKTsKIAogI2lmIEVOQUJMRShWSURFTykKLSAgICAgICAgLy8gbWVkaWEgY29u
dHJvbHMKLSAgICAgICAgZWxzZSBpZiAocmVuZGVyZXItPm5vZGUoKSAmJiByZW5kZXJlci0+bm9k
ZSgpLT5pc01lZGlhQ29udHJvbEVsZW1lbnQoKSkKLSAgICAgICAgICAgIG5ld09iaiA9IEFjY2Vz
c2liaWxpdHlNZWRpYUNvbnRyb2w6OmNyZWF0ZShyZW5kZXJlcik7CisgICAgLy8gbWVkaWEgY29u
dHJvbHMKKyAgICBpZiAobm9kZSAmJiBub2RlLT5pc01lZGlhQ29udHJvbEVsZW1lbnQoKSkKKyAg
ICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2w6OmNyZWF0ZShyZW5kZXJlcik7
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi0gICAgICAgIC8vIHByb2dyZXNz
IGJhcgotICAgICAgICBlbHNlIGlmIChyZW5kZXJlci0+aXNQcm9ncmVzcygpKQotICAgICAgICAg
ICAgbmV3T2JqID0gQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yOjpjcmVhdGUodG9SZW5k
ZXJQcm9ncmVzcyhyZW5kZXJlcikpOworICAgIC8vIHByb2dyZXNzIGJhcgorICAgIGlmIChjc3NC
b3gtPmlzUHJvZ3Jlc3MoKSkKKyAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlQcm9ncmVzc0lu
ZGljYXRvcjo6Y3JlYXRlKHRvUmVuZGVyUHJvZ3Jlc3MoY3NzQm94KSk7CiAjZW5kaWYKIAotICAg
ICAgICAvLyBpbnB1dCB0eXBlPXJhbmdlCi0gICAgICAgIGVsc2UgaWYgKHJlbmRlcmVyLT5pc1Ns
aWRlcigpKQotICAgICAgICAgICAgbmV3T2JqID0gQWNjZXNzaWJpbGl0eVNsaWRlcjo6Y3JlYXRl
KHJlbmRlcmVyKTsKKyAgICAvLyBpbnB1dCB0eXBlPXJhbmdlCisgICAgaWYgKGNzc0JveC0+aXNT
bGlkZXIoKSkKKyAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlTbGlkZXI6OmNyZWF0ZSh0b1Jl
bmRlclNsaWRlcihjc3NCb3gpKTsKIAotICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXdPYmog
PSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjcmVhdGUocmVuZGVyZXIpOwotICAgICAgICAK
LSAgICAgICAgb2JqID0gbmV3T2JqLmdldCgpOwotICAgICAgICAKLSAgICAgICAgZ2V0QVhJRChv
YmopOwotICAgICAgICAKLSAgICAgICAgbV9yZW5kZXJPYmplY3RNYXBwaW5nLnNldChyZW5kZXJl
ciwgb2JqLT5heE9iamVjdElEKCkpOwotICAgICAgICBtX29iamVjdHMuc2V0KG9iai0+YXhPYmpl
Y3RJRCgpLCBvYmopOyAgICAKLSAgICAgICAgYXR0YWNoV3JhcHBlcihvYmopOwotICAgIH0KLSAg
ICAKLSAgICByZXR1cm4gb2JqOworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjpjcmVhdGUocmVuZGVyZXIpOworfQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENh
Y2hlOjpnZXRPckNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIGlmICghcmVu
ZGVyZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3Qq
IG9iaiA9IGdldChyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBvYmo7CisKKyAgICBSZWZQdHI8
QWNjZXNzaWJpbGl0eU9iamVjdD4gbmV3T2JqID0gY3JlYXRlRnJvbVJlbmRlcmVyKHJlbmRlcmVy
KTsKKworICAgIGdldEFYSUQobmV3T2JqLmdldCgpKTsKKworICAgIG1fcmVuZGVyT2JqZWN0TWFw
cGluZy5zZXQocmVuZGVyZXIsIG5ld09iai0+YXhPYmplY3RJRCgpKTsKKyAgICBtX29iamVjdHMu
c2V0KG5ld09iai0+YXhPYmplY3RJRCgpLCBuZXdPYmopOyAgICAKKyAgICBhdHRhY2hXcmFwcGVy
KG5ld09iai5nZXQoKSk7CisgICAgcmV0dXJuIG5ld09iai5nZXQoKTsKIH0KIAogQWNjZXNzaWJp
bGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Z2V0T3JDcmVhdGUoQWNjZXNzaWJpbGl0eVJvbGUg
cm9sZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgg
Yi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCmluZGV4IGYxOGQwOGFjYjEx
MzEyNmY0ZWY1NWMzZmNmMjg4OTY1NWJmOWY3ZGYuLmQ2NDNjYmMzOTU5MzFlMDFhMWQ3ODhkYTdi
YzZhNmMxNTZmZGUyYTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmgKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaApAQCAt
MTI0LDggKzEyNCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHBvc3ROb3RpZmljYXRpb24oUmVuZGVy
T2JqZWN0KiwgQVhOb3RpZmljYXRpb24sIGJvb2wgcG9zdFRvRWxlbWVudCwgUG9zdFR5cGUgPSBQ
b3N0QXN5bmNocm9ub3VzbHkpOwogICAgIHZvaWQgcG9zdE5vdGlmaWNhdGlvbihBY2Nlc3NpYmls
aXR5T2JqZWN0KiwgRG9jdW1lbnQqLCBBWE5vdGlmaWNhdGlvbiwgYm9vbCBwb3N0VG9FbGVtZW50
LCBQb3N0VHlwZSA9IFBvc3RBc3luY2hyb25vdXNseSk7CiAKLSAgICBib29sIG5vZGVIYXNSb2xl
KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIHJvbGUpOwotCiBwcm90ZWN0ZWQ6CiAgICAgdm9p
ZCBwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIEFYTm90aWZp
Y2F0aW9uKTsKIApAQCAtMTQ2LDYgKzE0NCw4IEBAIHByaXZhdGU6CiAgICAgQVhJRCBnZXRBWElE
KEFjY2Vzc2liaWxpdHlPYmplY3QqKTsKIH07CiAKK2Jvb2wgbm9kZUhhc1JvbGUoTm9kZSosIGNv
bnN0IFN0cmluZyYgcm9sZSk7CisKICNpZiAhSEFWRShBQ0NFU1NJQklMSVRZKQogaW5saW5lIHZv
aWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlQWN0aXZlRGVzY2VuZGFudENoYW5nZWQoUmVuZGVyT2Jq
ZWN0KikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVBcmlhUm9sZUNoYW5n
ZWQoUmVuZGVyT2JqZWN0KikgeyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eUltYWdlTWFwTGluay5jcHAgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eUltYWdlTWFwTGluay5jcHAKaW5kZXggOTI0YmEyMWE3Zjg0NTM5NGEwOTZlYmQ0
MDZmOWY2ZTQ4NjQ5ZjVmOC4uOWI3NzQwMGQyY2JhNGZiODk5MmJkM2FlOWIyNWYyOGRhMmM2M2Q5
NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbWFnZU1h
cExpbmsuY3BwCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5SW1hZ2VN
YXBMaW5rLmNwcApAQCAtMzMsMTggKzMzLDE1IEBACiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotCi11
c2luZyBuYW1lc3BhY2Ugc3RkOworI2luY2x1ZGUgIlJlbmRlckJveE1vZGVsT2JqZWN0LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAK
IEFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbms6OkFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsoKQot
ICAgIDogbV9hcmVhRWxlbWVudCgwKSwgCi0gICAgICBtX21hcEVsZW1lbnQoMCkKKyAgICA6IG1f
YXJlYUVsZW1lbnQoMCkKKyAgICAsIG1fbWFwRWxlbWVudCgwKQogewogfQogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmNwcCBiL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwCmluZGV4IDA1Y2RmOTc3
ZmJlMjEyZjMzNDQ1MGIxMDhmYWRhYjVlYmMzNjAyMTEuLmJkZTRjZDQ0ZGE0MWMwMTNhNmM1NDA0
ZTgxMGVlOGNmNGMwOTdmMzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5TWVudUxpc3QuY3BwCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5TWVudUxpc3QuY3BwCkBAIC0zMiwxMCArMzIsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1BY2Nlc3NpYmlsaXR5TWVudUxpc3Q6OkFjY2Vzc2liaWxpdHlNZW51TGlzdChSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyKQorQWNjZXNzaWJpbGl0eU1lbnVMaXN0OjpBY2Nlc3NpYmlsaXR5
TWVudUxpc3QoUmVuZGVyTWVudUxpc3QqIHJlbmRlcmVyKQogICAgIDogQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdChyZW5kZXJlcikKIHsKLSAgICBBU1NFUlRfQVJHKHJlbmRlcmVyLCByZW5kZXJl
ci0+aXNNZW51TGlzdCgpKTsKK30KKworUmVuZGVyTWVudUxpc3QqIEFjY2Vzc2liaWxpdHlNZW51
TGlzdDo6cmVuZGVyZXIoKSBjb25zdAoreworICAgIHJldHVybiB0b1JlbmRlck1lbnVMaXN0KEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnJlbmRlcmVyKCkpOwogfQogCiBib29sIEFjY2Vzc2li
aWxpdHlNZW51TGlzdDo6cHJlc3MoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5oIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlNZW51TGlzdC5oCmluZGV4IDM3Njk1OGZiNGZjYTZhODRkYTM0OTJiMDViOWNh
YTI2YzA1MDFkZGIuLjQwODJmMGFkOWYzNTdiN2E5NTJmNzZjMjRmZjQyMjUwNTc4NDE5NTcgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3QuaAor
KysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmgKQEAgLTMz
LDE2ICszMywxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBY2Nlc3NpYmlsaXR5TWVu
dUxpc3Q7CiBjbGFzcyBBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cDsKIGNsYXNzIEhUTUxPcHRp
b25FbGVtZW50OworY2xhc3MgUmVuZGVyTWVudUxpc3Q7CiAKIGNsYXNzIEFjY2Vzc2liaWxpdHlN
ZW51TGlzdCA6IHB1YmxpYyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5TWVudUxpc3Q+IGNyZWF0ZShSZW5kZXJP
YmplY3QqIHJlbmRlcmVyKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQWNjZXNzaWJpbGl0eU1lbnVM
aXN0KHJlbmRlcmVyKSk7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5TWVu
dUxpc3Q+IGNyZWF0ZShSZW5kZXJNZW51TGlzdCogcmVuZGVyZXIpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBBY2Nlc3NpYmlsaXR5TWVudUxpc3QocmVuZGVyZXIpKTsgfQogCiAgICAgdmlydHVhbCBi
b29sIGlzQ29sbGFwc2VkKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHByZXNzKCkgY29uc3Q7
CiAKKyAgICBSZW5kZXJNZW51TGlzdCogcmVuZGVyZXIoKSBjb25zdDsKKwogcHJpdmF0ZToKLSAg
ICBBY2Nlc3NpYmlsaXR5TWVudUxpc3QoUmVuZGVyT2JqZWN0Kik7CisgICAgQWNjZXNzaWJpbGl0
eU1lbnVMaXN0KFJlbmRlck1lbnVMaXN0Kik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNNZW51TGlz
dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlSb2xl
IHJvbGVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIFBvcFVwQnV0dG9uUm9sZTsgfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcCBi
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHAKaW5k
ZXggNDhjMmZhYmIyZjU4ODE2YmYzOThhNmU5ZWViZWQzYWVhYTU0ZDdmYy4uNTE1ZTAyZjIxYWI0
MDY0NmE0ZTA5YjM5NmFiMmE1YWMyZjM2N2Y0MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcAorKysgYi9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuY3BwCkBAIC0zMSw3ICszMSw3IEBA
CiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKLSNpbmNsdWRlICJSZW5k
ZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmNwcCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cAppbmRleCBiMGFlODZiMGFiM2ZmMzAzMmIzNjM0NDg1NjZiMTg0YzhiOTVlYTQ5Li4yY2Q1ZTc3
YTBkMGQ3MzJmM2IxYzhiMGI0MTc0YzMzYjUwMDYzMmQzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC00MTcsMTQgKzQxNywxMSBAQCBzdGF0
aWMgYm9vbCByZXBsYWNlZE5vZGVOZWVkc0NoYXJhY3RlcihOb2RlKiByZXBsYWNlZE5vZGUpCiAv
LyBGaW5kcyBhIFJlbmRlckxpc3RJdGVtIHBhcmVudCBnaXZlIGEgbm9kZS4KIHN0YXRpYyBSZW5k
ZXJMaXN0SXRlbSogcmVuZGVyTGlzdEl0ZW1Db250YWluZXJGb3JOb2RlKE5vZGUqIG5vZGUpCiB7
Ci0gICAgZm9yIChOb2RlKiBzdHJpbmdOb2RlID0gbm9kZTsgc3RyaW5nTm9kZTsgc3RyaW5nTm9k
ZSA9IHN0cmluZ05vZGUtPnBhcmVudCgpKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVy
T2JqZWN0ID0gc3RyaW5nTm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFyZW5kZXJPYmpl
Y3QgfHwgIXJlbmRlck9iamVjdC0+aXNMaXN0SXRlbSgpKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdG9SZW5kZXJMaXN0SXRlbShyZW5kZXJPYmplY3Qp
OworICAgIGZvciAoOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50KCkpIHsKKyAgICAgICAgUmVu
ZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyQm94TW9kZWxPYmplY3Qo
KTsKKyAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpCisgICAg
ICAgICAgICByZXR1cm4gdG9SZW5kZXJMaXN0SXRlbShyZW5kZXJlcik7CiAgICAgfQotICAgIAog
ICAgIHJldHVybiAwOwogfQogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IGE1ZTFjYzMwMjE3ZTQ3MjBkODZkMmZh
Njg0YzhjY2IyMThmZmMyNmMuLjkyNjc0MTBhZTQzZTQwNjBhNTBkNTdiMTI1ZDQ0ZTUzNzhjODIy
NTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAKQEAgLTEyMCw4ICsxMjAsMTkgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0OjpkZXRhY2goKQogICAgIG1fcmVuZGVyZXIgPSAwOyAgICAKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIGlzSW5saW5lV2l0aENvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIHJlbmRlcmVy
KQorUmVuZGVyQm94TW9kZWxPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnJlbmRl
ckJveE1vZGVsT2JqZWN0KCkgY29uc3QKIHsKKyAgICBpZiAoIW1fcmVuZGVyZXIgfHwgIW1fcmVu
ZGVyZXItPmlzQm94TW9kZWxPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IHRvUmVuZGVyQm94TW9kZWxPYmplY3QobV9yZW5kZXJlcik7Cit9CisKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBpc0lubGluZVdpdGhDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgaWYgKCFvYmplY3QtPmlzQm94TW9kZWxPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyID0gdG9SZW5kZXJCb3hNb2Rl
bE9iamVjdChvYmplY3QpOwogICAgIGlmICghcmVuZGVyZXItPmlzUmVuZGVySW5saW5lKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDI5LDcgKzQ0MCw3IEBAIGJvb2wgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6aXNUZXh0Q29udHJvbCgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6aXNOYXRpdmVJbWFnZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
cmVuZGVyZXItPmlzSW1hZ2UoKTsKKyAgICByZXR1cm4gbV9yZW5kZXJlci0+aXNCb3hNb2RlbE9i
amVjdCgpICYmIHRvUmVuZGVyQm94TW9kZWxPYmplY3QobV9yZW5kZXJlciktPmlzSW1hZ2UoKTsK
IH0gICAgCiAgICAgCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzSW1hZ2UoKSBj
b25zdApAQCAtNDM5LDEyICs0NTAsMTIgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
Ojppc0ltYWdlKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0F0
dGFjaG1lbnQoKSBjb25zdAogewotICAgIGlmICghbV9yZW5kZXJlcikKKyAgICBSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVuZGVyZXIgPSByZW5kZXJCb3hNb2RlbE9iamVjdCgpOworICAgIGlmIChy
ZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAogICAgIC8vIFdpZGdldHMgYXJl
IHRoZSByZXBsYWNlZCBlbGVtZW50cyB0aGF0IHdlIHJlcHJlc2VudCB0byBBWCBhcyBhdHRhY2ht
ZW50cwotICAgIGJvb2wgaXNXaWRnZXQgPSBtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXItPmlzV2lk
Z2V0KCk7Ci0gICAgQVNTRVJUKCFpc1dpZGdldCB8fCAobV9yZW5kZXJlci0+aXNSZXBsYWNlZCgp
ICYmICFpc0ltYWdlKCkpKTsKKyAgICBib29sIGlzV2lkZ2V0ID0gcmVuZGVyZXItPmlzV2lkZ2V0
KCk7CisgICAgQVNTRVJUKCFpc1dpZGdldCB8fCAocmVuZGVyZXItPmlzUmVwbGFjZWQoKSAmJiAh
aXNJbWFnZSgpKSk7CiAgICAgcmV0dXJuIGlzV2lkZ2V0ICYmIGFyaWFSb2xlQXR0cmlidXRlKCkg
PT0gVW5rbm93blJvbGU7CiB9CiAKQEAgLTYwMyw3ICs2MTQsNyBAQCBib29sIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OmlzTXVsdGlTZWxlY3RhYmxlKCkgY29uc3QKICAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UoYXJpYU11bHRpU2VsZWN0YWJsZSwgImZhbHNlIikpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKLSAgICBpZiAoIW1fcmVuZGVyZXItPmlzTGlzdEJveCgpKQorICAgIGlm
ICghbV9yZW5kZXJlci0+aXNCb3hNb2RlbE9iamVjdCgpIHx8ICF0b1JlbmRlckJveE1vZGVsT2Jq
ZWN0KG1fcmVuZGVyZXIpLT5pc0xpc3RCb3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IHJldHVybiBtX3JlbmRlcmVyLT5ub2RlKCkgJiYgc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1l
bnQqPihtX3JlbmRlcmVyLT5ub2RlKCkpLT5tdWx0aXBsZSgpOwogfQpAQCAtNjI4LDExICs2Mzks
MTQgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1JlYWRPbmx5KCkgY29uc3QK
ICAgICAgICAgcmV0dXJuICFmcmFtZS0+aXNDb250ZW50RWRpdGFibGUoKTsKICAgICB9CiAKLSAg
ICBpZiAobV9yZW5kZXJlci0+aXNUZXh0RmllbGQoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX3JlbmRlcmVyLT5ub2RlKCkpLT5yZWFkT25seSgpOwot
ICAgIGlmIChtX3JlbmRlcmVyLT5pc1RleHRBcmVhKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50Kj4obV9yZW5kZXJlci0+bm9kZSgpKS0+cmVhZE9ubHko
KTsKLSAgICAKKyAgICBpZiAobV9yZW5kZXJlci0+aXNCb3hNb2RlbE9iamVjdCgpKSB7CisgICAg
ICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG1f
cmVuZGVyZXIpOworICAgICAgICBpZiAoYm94LT5pc1RleHRGaWVsZCgpKQorICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihib3gtPm5vZGUoKSktPnJlYWRP
bmx5KCk7CisgICAgICAgIGlmIChib3gtPmlzVGV4dEFyZWEoKSkKKyAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50Kj4oYm94LT5ub2RlKCkpLT5yZWFkT25s
eSgpOworICAgIH0KKwogICAgIHJldHVybiAhbV9yZW5kZXJlci0+bm9kZSgpIHx8ICFtX3JlbmRl
cmVyLT5ub2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCk7CiB9CiAKQEAgLTY5OSwxMCArNzEzLDEw
IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNDb250cm9sKCkgY29uc3QKIAog
Ym9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0ZpZWxkc2V0KCkgY29uc3QKIHsKLSAg
ICBpZiAoIW1fcmVuZGVyZXIpCisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyID0g
cmVuZGVyQm94TW9kZWxPYmplY3QoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIG1fcmVuZGVyZXItPmlzRmllbGRzZXQoKTsKKyAg
ICByZXR1cm4gcmVuZGVyZXItPmlzRmllbGRzZXQoKTsKIH0KICAgCiBib29sIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OmlzR3JvdXAoKSBjb25zdApAQCAtNzg5LDcgKzgwMyw3IEBAIEVsZW1l
bnQqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjdGlvbkVsZW1lbnQoKSBjb25zdAogICAg
ICAgICB9IGVsc2UgaWYgKG5vZGUtPmhhc1RhZ05hbWUoYnV0dG9uVGFnKSkKICAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CiAgICAgfQotICAgICAgICAgICAg
CisKICAgICBpZiAoaXNGaWxlVXBsb2FkQnV0dG9uKCkpCiAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4obV9yZW5kZXJlci0+bm9kZSgpKTsKICAgICAgICAgICAgIApAQCAtNzk5
LDcgKzgxMyw3IEBAIEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjdGlvbkVs
ZW1lbnQoKSBjb25zdAogICAgIGlmIChpc0ltYWdlQnV0dG9uKCkpCiAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obV9yZW5kZXJlci0+bm9kZSgpKTsKICAgICAKLSAgICBpZiAo
bV9yZW5kZXJlci0+aXNNZW51TGlzdCgpKQorICAgIGlmIChtX3JlbmRlcmVyLT5pc0JveE1vZGVs
T2JqZWN0KCkgJiYgdG9SZW5kZXJCb3hNb2RlbE9iamVjdChtX3JlbmRlcmVyKS0+aXNNZW51TGlz
dCgpKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1fcmVuZGVyZXItPm5v
ZGUoKSk7CiAKICAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gcm9sZVZhbHVlKCk7CkBAIC0x
MDQ5LDcgKzEwNjMsOSBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c3RyaW5n
VmFsdWUoKSBjb25zdAogewogICAgIGlmICghbV9yZW5kZXJlciB8fCBpc1Bhc3N3b3JkRmllbGQo
KSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIAorCisgICAgUmVuZGVyQm94TW9kZWxP
YmplY3QqIGNzc0JveCA9IHJlbmRlckJveE1vZGVsT2JqZWN0KCk7CisKICAgICBpZiAoYXJpYVJv
bGVBdHRyaWJ1dGUoKSA9PSBTdGF0aWNUZXh0Um9sZSkgewogICAgICAgICBTdHJpbmcgc3RhdGlj
VGV4dCA9IHRleHQoKTsKICAgICAgICAgaWYgKCFzdGF0aWNUZXh0Lmxlbmd0aCgpKQpAQCAtMTA2
MCw3ICsxMDc2LDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnN0cmluZ1Zh
bHVlKCkgY29uc3QKICAgICBpZiAobV9yZW5kZXJlci0+aXNUZXh0KCkpCiAgICAgICAgIHJldHVy
biB0ZXh0VW5kZXJFbGVtZW50KCk7CiAgICAgCi0gICAgaWYgKG1fcmVuZGVyZXItPmlzTWVudUxp
c3QoKSkgeworICAgIGlmIChjc3NCb3ggJiYgY3NzQm94LT5pc01lbnVMaXN0KCkpIHsKICAgICAg
ICAgLy8gUmVuZGVyTWVudUxpc3Qgd2lsbCBnbyBzdHJhaWdodCB0byB0aGUgdGV4dCgpIG9mIGl0
cyBzZWxlY3RlZCBpdGVtLgogICAgICAgICAvLyBUaGlzIGhhcyB0byBiZSBvdmVycmlkZW4gaW4g
dGhlIGNhc2Ugd2hlcmUgdGhlIHNlbGVjdGVkIGl0ZW0gaGFzIGFuIGFyaWEgbGFiZWwKICAgICAg
ICAgU2VsZWN0RWxlbWVudCogc2VsZWN0Tm9kZSA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4obV9yZW5kZXJlci0+bm9kZSgpKSk7CkBAIC0xMDgyLDcgKzEwOTgsNyBAQCBT
dHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c3RyaW5nVmFsdWUoKSBjb25zdAogICAg
IGlmIChtX3JlbmRlcmVyLT5pc0xpc3RNYXJrZXIoKSkKICAgICAgICAgcmV0dXJuIHRvUmVuZGVy
TGlzdE1hcmtlcihtX3JlbmRlcmVyKS0+dGV4dCgpOwogICAgIAotICAgIGlmIChtX3JlbmRlcmVy
LT5pc1JlbmRlckJ1dHRvbigpKQorICAgIGlmIChjc3NCb3ggJiYgY3NzQm94LT5pc1JlbmRlckJ1
dHRvbigpKQogICAgICAgICByZXR1cm4gdG9SZW5kZXJCdXR0b24obV9yZW5kZXJlciktPnRleHQo
KTsKIAogICAgIGlmIChpc1dlYkFyZWEoKSkgewpAQCAtMTcwMSwxMyArMTcxNywxMyBAQCBib29s
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25z
dAogICAgIC8vIEFuIEFSSUEgdHJlZSBjYW4gb25seSBoYXZlIHRyZWUgaXRlbXMgYW5kIHN0YXRp
YyB0ZXh0IGFzIGNoaWxkcmVuLgogICAgIGlmICghaXNBbGxvd2VkQ2hpbGRPZlRyZWUoKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCisKICAgICAvLyBpZ25vcmUgcG9wdXAgbWVudSBpdGVt
cyBiZWNhdXNlIEFwcEtpdCBkb2VzCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIHBhcmVudCA9IG1f
cmVuZGVyZXItPnBhcmVudCgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50KCkpIHsK
LSAgICAgICAgaWYgKHBhcmVudC0+aXNNZW51TGlzdCgpKQorICAgICAgICBpZiAocGFyZW50LT5p
c0JveE1vZGVsT2JqZWN0KCkgJiYgdG9SZW5kZXJCb3hNb2RlbE9iamVjdChwYXJlbnQpLT5pc01l
bnVMaXN0KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICAv
LyBmaW5kIG91dCBpZiB0aGlzIGVsZW1lbnQgaXMgaW5zaWRlIG9mIGEgbGFiZWwgZWxlbWVudC4K
ICAgICAvLyBpZiBzbywgaXQgbWF5IGJlIGlnbm9yZWQgYmVjYXVzZSBpdCdzIHRoZSBsYWJlbCBm
b3IgYSBjaGVja2JveCBvciByYWRpbyBidXR0b24KICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b250cm9sT2JqZWN0ID0gY29ycmVzcG9uZGluZ0NvbnRyb2xGb3JMYWJlbEVsZW1lbnQoKTsKQEAg
LTIxODIsMjAgKzIxOTgsMjQgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRT
ZWxlY3RlZFJvd3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBzZWwKICAgICAKIHZvaWQg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBzdHJpbmcp
CiB7Ci0gICAgaWYgKCFtX3JlbmRlcmVyKQorICAgIGlmICghbV9yZW5kZXJlciB8fCAhbV9yZW5k
ZXJlci0+bm9kZSgpIHx8ICFtX3JlbmRlcmVyLT5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIAorICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obV9yZW5kZXJlci0+bm9kZSgpKTsKKworICAgIGlmIChyb2xlVmFsdWUoKSA9PSBT
bGlkZXJSb2xlKQorICAgICAgICBlbGVtZW50LT5zZXRBdHRyaWJ1dGUoYXJpYV92YWx1ZW5vd0F0
dHIsIHN0cmluZyk7CisKKyAgICBpZiAoIW1fcmVuZGVyZXItPmlzQm94TW9kZWxPYmplY3QoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciA9IHRv
UmVuZGVyQm94TW9kZWxPYmplY3QobV9yZW5kZXJlcik7CisKICAgICAvLyBGSVhNRTogRG8gd2Ug
d2FudCB0byBkbyBhbnl0aGluZyBoZXJlIGZvciBBUklBIHRleHRib3hlcz8KLSAgICBpZiAobV9y
ZW5kZXJlci0+aXNUZXh0RmllbGQoKSkgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX3JlbmRlcmVyLT5ub2RlKCkpOwot
ICAgICAgICBpbnB1dC0+c2V0VmFsdWUoc3RyaW5nKTsKLSAgICB9IGVsc2UgaWYgKG1fcmVuZGVy
ZXItPmlzVGV4dEFyZWEoKSkgewotICAgICAgICBIVE1MVGV4dEFyZWFFbGVtZW50KiB0ZXh0QXJl
YSA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQqPihtX3JlbmRlcmVyLT5ub2RlKCkp
OwotICAgICAgICB0ZXh0QXJlYS0+c2V0VmFsdWUoc3RyaW5nKTsKLSAgICB9IGVsc2UgaWYgKHJv
bGVWYWx1ZSgpID09IFNsaWRlclJvbGUpIHsKLSAgICAgICAgTm9kZSogZWxlbWVudCA9IG1fcmVu
ZGVyZXItPm5vZGUoKTsKLSAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aXNFbGVtZW50
Tm9kZSgpKQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGVsZW1lbnQpLT5zZXRB
dHRyaWJ1dGUoYXJpYV92YWx1ZW5vd0F0dHIsIHN0cmluZyk7CisgICAgaWYgKHJlbmRlcmVyLT5p
c1RleHRGaWVsZCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBzYWZlISAgT3Ro
ZXIgZWxlbWVudHMgY291bGQgaGF2ZSBhIFRleHRGaWVsZCByZW5kZXJlci4KKyAgICAgICAgc3Rh
dGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGVsZW1lbnQpLT5zZXRWYWx1ZShzdHJpbmcpOwor
ICAgIH0gZWxzZSBpZiAocmVuZGVyZXItPmlzVGV4dEFyZWEoKSkgeworICAgICAgICAvLyBGSVhN
RTogVGhpcyBpcyBub3Qgc2FmZSEgIE90aGVyIGVsZW1lbnRzIGNvdWxkIGhhdmUgYSBUZXh0QXJl
YSByZW5kZXJlci4KKyAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudCo+KGVs
ZW1lbnQpLT5zZXRWYWx1ZShzdHJpbmcpOwogICAgIH0KIH0KIApAQCAtMjI1NSw3ICsyMjc1LDcg
QEAgRnJhbWVWaWV3KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0b3BEb2N1bWVudEZyYW1l
VmlldygpIGNvbnN0CiAKIFdpZGdldCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6d2lkZ2V0
KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcmVuZGVyZXItPmlzV2lkZ2V0KCkpCisgICAgaWYgKCFt
X3JlbmRlcmVyLT5pc0JveE1vZGVsT2JqZWN0KCkgfHwgIXRvUmVuZGVyQm94TW9kZWxPYmplY3Qo
bV9yZW5kZXJlciktPmlzV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiB0
b1JlbmRlcldpZGdldChtX3JlbmRlcmVyKS0+d2lkZ2V0KCk7CiB9CkBAIC0yNTE2LDEyICsyNTM2
LDEyIEBAIFZpc2libGVQb3NpdGlvbiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxl
UG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2luCiAgICAgICAgICAgICByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKCk7CiAgICAgICAgIAogICAgICAgICBwb2ludFJlc3VsdCA9IHJlc3VsdC5sb2Nh
bFBvaW50KCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIGRvbmUgaWYgaGl0IHNvbWV0aGluZyBv
dGhlciB0aGFuIGEgd2lkZ2V0Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpbm5l
ck5vZGUtPnJlbmRlcmVyKCk7CisgICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJl
ciA9IGlubmVyTm9kZS0+cmVuZGVyQm94TW9kZWxPYmplY3QoKTsKICAgICAgICAgaWYgKCFyZW5k
ZXJlci0+aXNXaWRnZXQoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAKKwogICAgICAg
ICAvLyBkZXNjZW5kIGludG8gd2lkZ2V0IChGUkFNRSwgSUZSQU1FLCBPQkpFQ1QuLi4pCiAgICAg
ICAgIFdpZGdldCogd2lkZ2V0ID0gdG9SZW5kZXJXaWRnZXQocmVuZGVyZXIpLT53aWRnZXQoKTsK
ICAgICAgICAgaWYgKCF3aWRnZXQgfHwgIXdpZGdldC0+aXNGcmFtZVZpZXcoKSkKQEAgLTI3MDYs
MTMgKzI3MjYsMTMgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6ZG9BY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnQKICAgICAKICAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiByZXN1bHQgPSBvYmotPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+
Z2V0T3JDcmVhdGUob2JqKTsKIAotICAgIGlmIChvYmotPmlzTGlzdEJveCgpKSB7CisgICAgaWYg
KG9iai0+aXNCb3hNb2RlbE9iamVjdCgpICYmIHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob2JqKS0+
aXNMaXN0Qm94KCkpIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjaGlsZHJlbiBhcmUgaW5p
dGlhbGl6ZWQgc28gdGhhdCBoaXQgdGVzdGluZyBmaW5kcyB0aGUgcmlnaHQgZWxlbWVudC4KICAg
ICAgICAgQWNjZXNzaWJpbGl0eUxpc3RCb3gqIGxpc3RCb3ggPSBzdGF0aWNfY2FzdDxBY2Nlc3Np
YmlsaXR5TGlzdEJveCo+KHJlc3VsdCk7CiAgICAgICAgIGxpc3RCb3gtPnVwZGF0ZUNoaWxkcmVu
SWZOZWNlc3NhcnkoKTsKICAgICAgICAgcmV0dXJuIGxpc3RCb3gtPmRvQWNjZXNzaWJpbGl0eUhp
dFRlc3QocG9pbnQpOwogICAgIH0KLSAgICAgICAgCisKICAgICBpZiAocmVzdWx0LT5hY2Nlc3Np
YmlsaXR5SXNJZ25vcmVkKCkpIHsKICAgICAgICAgLy8gSWYgdGhpcyBlbGVtZW50IGlzIHRoZSBs
YWJlbCBvZiBhIGNvbnRyb2wsIGEgaGl0IHRlc3Qgc2hvdWxkIHJldHVybiB0aGUgY29udHJvbC4K
ICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29udHJvbE9iamVjdCA9IHJlc3VsdC0+Y29y
cmVzcG9uZGluZ0NvbnRyb2xGb3JMYWJlbEVsZW1lbnQoKTsKQEAgLTI4NzAsMTMgKzI4OTAsMTIg
QEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpyZW5kZXJPYmplY3RJc09ic2VydmFi
bGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAg
ICAgLy8gQVggY2xpZW50cyB3aWxsIGxpc3RlbiBmb3IgQVhTZWxlY3RlZENoaWxkcmVuQ2hhbmdl
ZCBvbiBsaXN0Ym94ZXMuCi0gICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBheE9iamVjdENhY2hl
KCk7CiAgICAgTm9kZSogbm9kZSA9IHJlbmRlcmVyLT5ub2RlKCk7Ci0gICAgaWYgKHJlbmRlcmVy
LT5pc0xpc3RCb3goKSB8fCBjYWNoZS0+bm9kZUhhc1JvbGUobm9kZSwgImxpc3Rib3giKSkKKyAg
ICBpZiAobm9kZUhhc1JvbGUobm9kZSwgImxpc3Rib3giKSB8fCAocmVuZGVyZXItPmlzQm94TW9k
ZWxPYmplY3QoKSAmJiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVyKS0+aXNMaXN0Qm94
KCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKKwogICAgIC8vIFRleHRib3hlcyBzaG91
bGQgc2VuZCBvdXQgbm90aWZpY2F0aW9ucy4KLSAgICBpZiAoY2FjaGUtPm5vZGVIYXNSb2xlKG5v
ZGUsICJ0ZXh0Ym94IikpCisgICAgaWYgKG5vZGVIYXNSb2xlKG5vZGUsICJ0ZXh0Ym94IikpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTI5NTAsMTMg
KzI5NjksMTUgQEAgQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKQogICAgIEFjY2Vzc2liaWxpdHlSb2xlIGFyaWFS
b2xlID0gYXJpYVJvbGVBdHRyaWJ1dGUoKTsKICAgICBpZiAoYXJpYVJvbGUgIT0gVW5rbm93blJv
bGUpCiAgICAgICAgIHJldHVybiBhcmlhUm9sZTsKLSAgICAKKworICAgIFJlbmRlckJveE1vZGVs
T2JqZWN0KiBjc3NCb3ggPSByZW5kZXJCb3hNb2RlbE9iamVjdCgpOworCiAgICAgaWYgKG5vZGUg
JiYgbm9kZS0+aXNMaW5rKCkpIHsKLSAgICAgICAgaWYgKG1fcmVuZGVyZXItPmlzSW1hZ2UoKSkK
KyAgICAgICAgaWYgKGNzc0JveCAmJiBjc3NCb3gtPmlzSW1hZ2UoKSkKICAgICAgICAgICAgIHJl
dHVybiBJbWFnZU1hcFJvbGU7CiAgICAgICAgIHJldHVybiBXZWJDb3JlTGlua1JvbGU7CiAgICAg
fQotICAgIGlmIChtX3JlbmRlcmVyLT5pc0xpc3RJdGVtKCkpCisgICAgaWYgKGNzc0JveCAmJiBj
c3NCb3gtPmlzTGlzdEl0ZW0oKSkKICAgICAgICAgcmV0dXJuIExpc3RJdGVtUm9sZTsKICAgICBp
ZiAobV9yZW5kZXJlci0+aXNMaXN0TWFya2VyKCkpCiAgICAgICAgIHJldHVybiBMaXN0TWFya2Vy
Um9sZTsKQEAgLTI5NjQsMjMgKzI5ODUsMjMgQEAgQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKQogICAgICAgICBy
ZXR1cm4gQnV0dG9uUm9sZTsKICAgICBpZiAobV9yZW5kZXJlci0+aXNUZXh0KCkpCiAgICAgICAg
IHJldHVybiBTdGF0aWNUZXh0Um9sZTsKLSAgICBpZiAobV9yZW5kZXJlci0+aXNJbWFnZSgpKSB7
CisgICAgaWYgKGNzc0JveCAmJiBjc3NCb3gtPmlzSW1hZ2UoKSkgewogICAgICAgICBpZiAobm9k
ZSAmJiBub2RlLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkKICAgICAgICAgICAgIHJldHVybiBCdXR0
b25Sb2xlOwogICAgICAgICByZXR1cm4gSW1hZ2VSb2xlOwogICAgIH0KICAgICBpZiAobm9kZSAm
JiBub2RlLT5oYXNUYWdOYW1lKGNhbnZhc1RhZykpCiAgICAgICAgIHJldHVybiBJbWFnZVJvbGU7
Ci0gICAgCi0gICAgaWYgKG1fcmVuZGVyZXItPmlzUmVuZGVyVmlldygpKQorCisgICAgaWYgKGNz
c0JveCAmJiBjc3NCb3gtPmlzUmVuZGVyVmlldygpKQogICAgICAgICByZXR1cm4gV2ViQXJlYVJv
bGU7CiAgICAgCi0gICAgaWYgKG1fcmVuZGVyZXItPmlzVGV4dEZpZWxkKCkpCisgICAgaWYgKGNz
c0JveCAmJiBjc3NCb3gtPmlzVGV4dEZpZWxkKCkpCiAgICAgICAgIHJldHVybiBUZXh0RmllbGRS
b2xlOwogICAgIAotICAgIGlmIChtX3JlbmRlcmVyLT5pc1RleHRBcmVhKCkpCisgICAgaWYgKGNz
c0JveCAmJiBjc3NCb3gtPmlzVGV4dEFyZWEoKSkKICAgICAgICAgcmV0dXJuIFRleHRBcmVhUm9s
ZTsKLSAgICAKKwogICAgIGlmIChub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7
CiAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0
RWxlbWVudCo+KG5vZGUpOwogICAgICAgICBpZiAoaW5wdXQtPmlucHV0VHlwZSgpID09IEhUTUxJ
bnB1dEVsZW1lbnQ6OkNIRUNLQk9YKQpAQCAtMjk5Nyw3ICszMDE4LDcgQEAgQWNjZXNzaWJpbGl0
eVJvbGUgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJv
bGUoKQogICAgIGlmIChpc0ZpbGVVcGxvYWRCdXR0b24oKSkKICAgICAgICAgcmV0dXJuIEJ1dHRv
blJvbGU7CiAgICAgCi0gICAgaWYgKG1fcmVuZGVyZXItPmlzTWVudUxpc3QoKSkKKyAgICBpZiAo
Y3NzQm94ICYmIGNzc0JveC0+aXNNZW51TGlzdCgpKQogICAgICAgICByZXR1cm4gUG9wVXBCdXR0
b25Sb2xlOwogICAgIAogICAgIGlmIChoZWFkaW5nTGV2ZWwoKSkKQEAgLTMyODcsOCArMzMwOCw5
IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkQ2hpbGRyZW4oKQogICAgIH0K
ICAgICAKICAgICAvLyBmb3IgYSBSZW5kZXJJbWFnZSwgYWRkIHRoZSA8YXJlYT4gZWxlbWVudHMg
YXMgaW5kaXZpZHVhbCBhY2Nlc3NpYmlsaXR5IG9iamVjdHMKLSAgICBpZiAobV9yZW5kZXJlci0+
aXNSZW5kZXJJbWFnZSgpKSB7Ci0gICAgICAgIEhUTUxNYXBFbGVtZW50KiBtYXAgPSB0b1JlbmRl
ckltYWdlKG1fcmVuZGVyZXIpLT5pbWFnZU1hcCgpOworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0
KiBjc3NCb3ggPSByZW5kZXJCb3hNb2RlbE9iamVjdCgpOworICAgIGlmIChjc3NCb3ggJiYgY3Nz
Qm94LT5pc1JlbmRlckltYWdlKCkpIHsKKyAgICAgICAgSFRNTE1hcEVsZW1lbnQqIG1hcCA9IHRv
UmVuZGVySW1hZ2UoY3NzQm94KS0+aW1hZ2VNYXAoKTsKICAgICAgICAgaWYgKG1hcCkgewogICAg
ICAgICAgICAgZm9yIChOb2RlKiBjdXJyZW50ID0gbWFwLT5maXJzdENoaWxkKCk7IGN1cnJlbnQ7
IGN1cnJlbnQgPSBjdXJyZW50LT50cmF2ZXJzZU5leHROb2RlKG1hcCkpIHsKIApAQCAtMzYwNSw3
ICszNjI3LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlSb2xlIG1zYWFSb2xlRm9yUmVuZGVyZXIo
Y29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICBpZiAocmVuZGVyZXItPmlzVGV4dCgp
KQogICAgICAgICByZXR1cm4gRWRpdGFibGVUZXh0Um9sZTsKIAotICAgIGlmIChyZW5kZXJlci0+
aXNMaXN0SXRlbSgpKQorICAgIGlmIChyZW5kZXJlci0+aXNCb3hNb2RlbE9iamVjdCgpICYmIHRv
UmVuZGVyQm94TW9kZWxPYmplY3QocmVuZGVyZXIpLT5pc0xpc3RJdGVtKCkpCiAgICAgICAgIHJl
dHVybiBMaXN0SXRlbVJvbGU7CiAKICAgICByZXR1cm4gVW5rbm93blJvbGU7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oIGIvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAppbmRleCBjMDVi
YzJkY2Y1NjA3NDI5OWNlYjBkNDNiNWQzN2I1ZDQ0ZjI0YzE4Li41NWQ2Mjg0MTkzYjJiNDY0MTk5
N2IwODEyYzU1NzU4MTU1ZGFhYjMzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgKQEAgLTMwLDcgKzMwLDYgQEAKICNkZWZpbmUgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdF9oCiAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0
LmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAKQEAgLTE2NSw2ICsxNjQsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBzZXRSZW5kZXJl
cihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSB7IG1fcmVuZGVyZXIgPSByZW5kZXJlcjsgfQogICAg
IFJlbmRlck9iamVjdCogcmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyOyB9Cisg
ICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlckJveE1vZGVsT2JqZWN0KCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBOb2RlKiBub2RlKCkgY29uc3Q7CiAKICAgICBSZW5kZXJWaWV3KiB0b3BSZW5k
ZXJlcigpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlUYWJsZS5jcHAgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxl
LmNwcAppbmRleCAwNGVjYWMzM2UwNDUwZTU0YzI4OGM1NmJhZjg4Zjc5YjUwZDNkNTcyLi43Zjdi
NmYyZDExODllMTNmODZkZGZjYTYxNjFmZjBlOWI5Mjc1NWQzIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcAorKysgYi9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcApAQCAtNDMsOCArNDMsNiBAQAogI2luY2x1
ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlU2VjdGlvbi5oIgog
Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CkBAIC03NSw3ICs3Myw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVRh
YmxlOjppc1RhYmxlRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKQogICAgIC8vIDx0YWJs
ZT4gc2hvdWxkIGJlIGV4cG9zZWQgYXMgYW4gQVhUYWJsZS4gVGhlIGdvYWwKICAgICAvLyBpcyB0
byBvbmx5IHNob3cgImRhdGEiIHRhYmxlcwogICAgIAotICAgIGlmICghbV9yZW5kZXJlciB8fCAh
bV9yZW5kZXJlci0+aXNUYWJsZSgpKQorICAgIGlmICghcmVuZGVyZXIoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAogICAgIC8vIGlmIHRoZSBkZXZlbG9wZXIgYXNzaWduZWQgYW4gYXJp
YSByb2xlIHRvIHRoaXMsIHRoZW4gd2Ugc2hvdWxkbid0IApAQCAtMTk2LDcgKzE5NCw3IEBAIGJv
b2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc1RhYmxlRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxp
dHkoKQogICAgICAgICAgICAgLy8gRm9yIHRoZSBmaXJzdCA1IHJvd3MsIGNhY2hlIHRoZSBiYWNr
Z3JvdW5kIGNvbG9yIHNvIHdlIGNhbiBjaGVjayBpZiB0aGlzIHRhYmxlIGhhcyB6ZWJyYS1zdHJp
cGVkIHJvd3MuCiAgICAgICAgICAgICBpZiAocm93IDwgNSAmJiByb3cgPT0gYWx0ZXJuYXRpbmdS
b3dDb2xvckNvdW50KSB7CiAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJSb3cg
PSBjZWxsLT5wYXJlbnQoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJlbmRlclJvdyB8fCAhcmVu
ZGVyUm93LT5pc1RhYmxlUm93KCkpCisgICAgICAgICAgICAgICAgaWYgKCFyZW5kZXJSb3cgfHwg
IXJlbmRlclJvdy0+aXNCb3hNb2RlbE9iamVjdCgpIHx8ICF0b1JlbmRlckJveE1vZGVsT2JqZWN0
KHJlbmRlclJvdyktPmlzVGFibGVSb3coKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHJvd1JlbmRlclN0eWxlID0gcmVuZGVyUm93
LT5zdHlsZSgpOwogICAgICAgICAgICAgICAgIGlmICghcm93UmVuZGVyU3R5bGUpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmggYi9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmgKaW5kZXggNDJlZGYyYTE4YmZjMmVi
ZjhmMTlhMWY1ZDA5NGMxZTI2NzlmMGIzNi4uYzgyMzU2MTRjOTQ3NjEzYThmOGIzZTQ4ODNlNjEx
OWRmZjA5MmEwMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlUYWJsZS5oCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUu
aApAQCAtNTAsNyArNTAsNyBAQCBwcm90ZWN0ZWQ6CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8QWNjZXNzaWJpbGl0eVRhYmxlPiBjcmVhdGUoUmVuZGVyT2JqZWN0Kik7CiAgICAgdmly
dHVhbCB+QWNjZXNzaWJpbGl0eVRhYmxlKCk7Ci0gICAgCisKICAgICB2aXJ0dWFsIGJvb2wgaXNE
YXRhVGFibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGVWYWx1
ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0FyaWFUYWJsZSgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CkBAIC03OCwxNyArNzgsMTcgQEAgcHVibGljOgogCiAgICAgLy8gYW4gb2JqZWN0
IHRoYXQgY29udGFpbnMsIGFzIGNoaWxkcmVuLCBhbGwgdGhlIG9iamVjdHMgdGhhdCBhY3QgYXMg
aGVhZGVycwogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGhlYWRlckNvbnRhaW5lcigpOwotICAg
IAotcHJvdGVjdGVkOiAgICAKKworcHJvdGVjdGVkOgogICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciBtX3Jvd3M7CiAgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIG1fY29sdW1u
czsKLSAgICAKKwogICAgIEFjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRhaW5lciogbV9oZWFk
ZXJDb250YWluZXI7CiAgICAgbXV0YWJsZSBib29sIG1faXNBY2Nlc3NpYmlsaXR5VGFibGU7Ci0g
ICAgCisKICAgICBib29sIGlzVGFibGVFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpOwog
fTsKLSAgICAKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKIAogI2VuZGlmIC8vIEFjY2Vzc2li
aWxpdHlUYWJsZV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tIGIv
V2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQppbmRleCAwMDhhY2VjZTFjOWM4Mzg0MWYwYTMx
ZWU5OThjMDI4YzY3OTc5ZmI3Li5iMDJkZDFmNjVkODg1NThkY2QxZjU5MzdhODllZDE2MmEyNWFm
ZDBlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCisrKyBiL1dlYkNv
cmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KQEAgLTQyOSw3ICs0MjksNyBAQCBpZCA8RE9NRXZlbnRU
YXJnZXQ+IGtpdChXZWJDb3JlOjpFdmVudFRhcmdldCogZXZlbnRUYXJnZXQpCiAtIChOU0ltYWdl
KilpbWFnZQogewogICAgIC8vIEZJWE1FOiBDb3VsZCB3ZSBtb3ZlIHRoaXMgZnVuY3Rpb24gdG8g
V2ViQ29yZTo6Tm9kZSBhbmQgYXV0b2dlbmVyYXRlPwotICAgIFdlYkNvcmU6OlJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBjb3JlKHNlbGYpLT5yZW5kZXJlcigpOworICAgIFdlYkNvcmU6OlJlbmRl
ckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlckJveE1vZGVsT2Jq
ZWN0KCk7CiAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzSW1hZ2UoKSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKICAgICBXZWJDb3JlOjpDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpSZW5kZXJJbWFnZSo+KHJlbmRlcmVyKS0+Y2FjaGVkSW1hZ2Uo
KTsKQEAgLTQ1NCw3ICs0NTQsNyBAQCBpZCA8RE9NRXZlbnRUYXJnZXQ+IGtpdChXZWJDb3JlOjpF
dmVudFRhcmdldCogZXZlbnRUYXJnZXQpCiAtIChOU0RhdGEgKilfaW1hZ2VUSUZGUmVwcmVzZW50
YXRpb24KIHsKICAgICAvLyBGSVhNRTogQ291bGQgd2UgbW92ZSB0aGlzIGZ1bmN0aW9uIHRvIFdl
YkNvcmU6OkVsZW1lbnQgYW5kIGF1dG9nZW5lcmF0ZT8KLSAgICBXZWJDb3JlOjpSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gY29yZShzZWxmKS0+cmVuZGVyZXIoKTsKKyAgICBXZWJDb3JlOjpSZW5k
ZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIgPSBjb3JlKHNlbGYpLT5yZW5kZXJCb3hNb2RlbE9i
amVjdCgpOwogICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0ltYWdlKCkpCiAgICAg
ICAgIHJldHVybiBuaWw7CiAgICAgV2ViQ29yZTo6Q2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6UmVuZGVySW1hZ2UqPihyZW5kZXJlciktPmNhY2hlZEltYWdl
KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9i
akMucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9iakMucG0KaW5k
ZXggOTFjYmQwYjBlNjcyN2M5MTZkNGY3MDU2YWM0N2ZmZTc2ODA2MGFjNS4uMWQwN2YyNmU1MDA3
ODVjMGUwM2Y2NWRiYjFjNjU1Yjk0MjA2ZDg0MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBtCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yT2JqQy5wbQpAQCAtMTIzNSw5ICsxMjM1LDkgQEAgc3ViIEdlbmVy
YXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICRnZXR0ZXJDb250ZW50
VGFpbCA9ICJcQFwic3JjXCJdIjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICB1bmxlc3MgKCRpbnRlcmZhY2VOYW1lIGVxICJIVE1MSW1hZ2VFbGVtZW50Iikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAY3VzdG9tR2V0dGVyQ29udGVudCwgIiAgICBp
ZiAoIUlNUEwtPnJlbmRlcmVyKCkgfHwgIUlNUEwtPnJlbmRlcmVyKCktPmlzSW1hZ2UoKSlcbiIp
OworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAY3VzdG9tR2V0dGVyQ29udGVudCwgIiAg
ICBpZiAoIUlNUEwtPnJlbmRlckJveE1vZGVsT2JqZWN0KCkgfHwgIUlNUEwtPnJlbmRlckJveE1v
ZGVsT2JqZWN0KCktPmlzSW1hZ2UoKSlcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aChAY3VzdG9tR2V0dGVyQ29udGVudCwgIiAgICAgICAgcmV0dXJuIG5pbDtcbiIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siUmVuZGVyT2JqZWN0LmgifSA9IDE7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJSZW5kZXJCb3hNb2RlbE9iamVj
dC5oIn0gPSAxOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkRPTVByaXZhdGUuaCJ9ID0gMTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApp
bmRleCA5MWVmZTllZGUzY2Q1ZjQxYmNmN2Q3NDQ5ZTQ0MjhmMWE2MDk3NjZmLi4wNDZkMmMwOTYz
OGY4OGEwODFkYTU0NmQ1NWIxODEyNzY5ZWJhZWZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0yOTUsNyArMjk1
LDcgQEAgc3RhdGljIFdpZGdldCogd2lkZ2V0Rm9yTm9kZShOb2RlKiBmb2N1c2VkTm9kZSkKIHsK
ICAgICBpZiAoIWZvY3VzZWROb2RlKQogICAgICAgICByZXR1cm4gMDsKLSAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gZm9jdXNlZE5vZGUtPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIHJlbmRlcmVyID0gZm9jdXNlZE5vZGUtPnJlbmRlckJveE1vZGVsT2JqZWN0KCk7
CiAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzV2lkZ2V0KCkpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIHJldHVybiB0b1JlbmRlcldpZGdldChyZW5kZXJlciktPndpZGdldCgpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAppbmRleCAyZmE3NWNlNzY2NWRiMGQwYmViNDliYzM4MWJmMmFkMzg3ODFiMDQ5Li4xYTAy
ZjcwNDg4MTk3NjIxNTViMjliY2U5MWI4ZTBiMmM4ZWI2NzVhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMTM0Miw4
ICsxMzQyLDExIEBAIHZvaWQgRWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKGJvb2wgLypy
ZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24qLykKICAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24o
KS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7CiAgICAgICAgICAgICBmcmFtZS0+cmV2ZWFs
U2VsZWN0aW9uKCk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHJlbmRlcmVyKCkgJiYgIXJl
bmRlcmVyKCktPmlzV2lkZ2V0KCkpCi0gICAgICAgIHJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVy
KCktPnNjcm9sbFJlY3RUb1Zpc2libGUoZ2V0UmVjdCgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY3NzQm94ID0gcmVuZGVyQm94TW9kZWxPYmpl
Y3QoKTsKKyAgICBpZiAoY3NzQm94ICYmIGNzc0JveC0+aXNXaWRnZXQoKSkKKyAgICAgICAgY3Nz
Qm94LT5lbmNsb3NpbmdMYXllcigpLT5zY3JvbGxSZWN0VG9WaXNpYmxlKGdldFJlY3QoKSk7CiB9
CiAKIHZvaWQgRWxlbWVudDo6Ymx1cigpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cCBiL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGUwZjA0ZGVmYjU0MDVmN2ZiMzA4NjY5Nzk0
MTA1ZmNhZGUwYjNmZDcuLjYwYjMwZDNjZWUwZDFlZjlhMzVmOTE0YzkzZGQ0MmUxNDkzZWYwMjEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCkBAIC02ODIsMjAgKzY4MiwyMyBAQCBJbnRSZWN0IE5vZGU6OmdldFJlY3QoKSBjb25zdAog
ICAgICAgICByZXR1cm4gcmVuZGVyZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QodHJ1ZSk7
CiAgICAgcmV0dXJuIEludFJlY3QoKTsKIH0KLSAgICAKKwogSW50UmVjdCBOb2RlOjpyZW5kZXJS
ZWN0KGJvb2wqIGlzUmVwbGFjZWQpCiB7ICAgIAotICAgIFJlbmRlck9iamVjdCogaGl0UmVuZGVy
ZXIgPSB0aGlzLT5yZW5kZXJlcigpOwotICAgIEFTU0VSVChoaXRSZW5kZXJlcik7Ci0gICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IGhpdFJlbmRlcmVyOwotICAgIHdoaWxlIChyZW5kZXJlciAm
JiAhcmVuZGVyZXItPmlzQm9keSgpICYmICFyZW5kZXJlci0+aXNSb290KCkpIHsKLSAgICAgICAg
aWYgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgfHwgcmVuZGVyZXItPmlzSW5saW5lQmxvY2tP
cklubGluZVRhYmxlKCkgfHwgcmVuZGVyZXItPmlzUmVwbGFjZWQoKSkgewotICAgICAgICAgICAg
KmlzUmVwbGFjZWQgPSByZW5kZXJlci0+aXNSZXBsYWNlZCgpOwotICAgICAgICAgICAgcmV0dXJu
IHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCh0cnVlKTsKKyAgICBSZW5kZXJPYmpl
Y3QqIG9iamVjdCA9IHJlbmRlcmVyKCk7CisgICAgQVNTRVJUKG9iamVjdCk7CisgICAgZm9yICg7
b2JqZWN0OyBvYmplY3QgPSBvYmplY3QtPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChvYmplY3Qt
PmlzQm9keSgpIHx8IG9iamVjdC0+aXNSb290KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgaWYgKCFvYmplY3QtPmlzQm94TW9kZWxPYmplY3QoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY3NzQm94ID0gdG9SZW5kZXJCb3hNb2Rl
bE9iamVjdChvYmplY3QpOworICAgICAgICBpZiAoY3NzQm94LT5pc1JlbmRlckJsb2NrKCkgfHwg
Y3NzQm94LT5pc0lubGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpIHx8IGNzc0JveC0+aXNSZXBsYWNl
ZCgpKSB7CisgICAgICAgICAgICAqaXNSZXBsYWNlZCA9IGNzc0JveC0+aXNSZXBsYWNlZCgpOwor
ICAgICAgICAgICAgcmV0dXJuIGNzc0JveC0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QodHJ1ZSk7
CiAgICAgICAgIH0KLSAgICAgICAgcmVuZGVyZXIgPSByZW5kZXJlci0+cGFyZW50KCk7CiAgICAg
fQotICAgIHJldHVybiBJbnRSZWN0KCk7ICAgIAorICAgIHJldHVybiBJbnRSZWN0KCk7CiB9CiAK
IGJvb2wgTm9kZTo6aGFzTm9uRW1wdHlCb3VuZGluZ0JveCgpIGNvbnN0CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2RvbS9TZWxlY3RFbGVtZW50LmNwcCBiL1dlYkNvcmUvZG9tL1NlbGVjdEVsZW1lbnQu
Y3BwCmluZGV4IGU5OTU4YTI0NmVkMmU1MjFlOTFjMzhhODZmODU2NGJkYjUzZjExZDEuLjc0OWE5
MDQyMzRiZWY3NWJlMzI4NWM2MDg3MGMxNGM4MTg1ZDlkMzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
ZG9tL1NlbGVjdEVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1NlbGVjdEVsZW1lbnQuY3Bw
CkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCBTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rp
b25FbmRJbmRleChTZWxlY3RFbGVtZW50RGF0YSYgZGF0YSwgaW50IGluZGUKIAogdm9pZCBTZWxl
Y3RFbGVtZW50Ojp1cGRhdGVMaXN0Qm94U2VsZWN0aW9uKFNlbGVjdEVsZW1lbnREYXRhJiBkYXRh
LCBFbGVtZW50KiBlbGVtZW50LCBib29sIGRlc2VsZWN0T3RoZXJPcHRpb25zKQogewotICAgIEFT
U0VSVChlbGVtZW50LT5yZW5kZXJlcigpICYmIChlbGVtZW50LT5yZW5kZXJlcigpLT5pc0xpc3RC
b3goKSB8fCBkYXRhLm11bHRpcGxlKCkpKTsKKyAgICBBU1NFUlQoZWxlbWVudC0+cmVuZGVyZXIo
KSAmJiAoZGF0YS5tdWx0aXBsZSgpIHx8IGVsZW1lbnQtPnJlbmRlckJveE1vZGVsT2JqZWN0KCkt
PmlzTGlzdEJveCgpKSk7CiAgICAgQVNTRVJUKGRhdGEuYWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5k
ZXgoKSA+PSAwKTsKIAogICAgIHVuc2lnbmVkIHN0YXJ0ID0gbWluKGRhdGEuYWN0aXZlU2VsZWN0
aW9uQW5jaG9ySW5kZXgoKSwgZGF0YS5hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCgpKTsKQEAgLTM0
Miw3ICszNDIsNyBAQCB2b2lkIFNlbGVjdEVsZW1lbnQ6OnNldFNlbGVjdGVkSW5kZXgoU2VsZWN0
RWxlbWVudERhdGEmIGRhdGEsIEVsZW1lbnQqIGVsZW1lbnQsCiAgICAgICAgIGRhdGEuc2V0VXNl
ckRyaXZlbkNoYW5nZSh1c2VyRHJpdmVuQ2hhbmdlKTsKICAgICAgICAgaWYgKGZpcmVPbkNoYW5n
ZU5vdykKICAgICAgICAgICAgIG1lbnVMaXN0T25DaGFuZ2UoZGF0YSwgZWxlbWVudCk7Ci0gICAg
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOworICAgICAg
ICBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJCb3hNb2Rl
bE9iamVjdCgpOwogICAgICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAgICAgICAgIGlmIChkYXRh
LnVzZXNNZW51TGlzdCgpKQogICAgICAgICAgICAgICAgIHRvUmVuZGVyTWVudUxpc3QocmVuZGVy
ZXIpLT5kaWRTZXRTZWxlY3RlZEluZGV4KCk7CkBAIC02MzIsOCArNjMyLDkgQEAgdm9pZCBTZWxl
Y3RFbGVtZW50OjptZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIoU2VsZWN0RWxlbWVudERhdGEm
IGRhdGEsIEVsZW1lbnQKIAogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZWRvd25FdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91
c2VFdmVudCo+KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewogICAgICAgICBlbGVt
ZW50LT5mb2N1cygpOwotICAgICAgICBpZiAoZWxlbWVudC0+cmVuZGVyZXIoKSAmJiBlbGVtZW50
LT5yZW5kZXJlcigpLT5pc01lbnVMaXN0KCkpIHsKLSAgICAgICAgICAgIGlmIChSZW5kZXJNZW51
TGlzdCogbWVudUxpc3QgPSB0b1JlbmRlck1lbnVMaXN0KGVsZW1lbnQtPnJlbmRlcmVyKCkpKSB7
CisgICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRl
ckJveE1vZGVsT2JqZWN0KCk7CisgICAgICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNN
ZW51TGlzdCgpKSB7CisgICAgICAgICAgICBpZiAoUmVuZGVyTWVudUxpc3QqIG1lbnVMaXN0ID0g
dG9SZW5kZXJNZW51TGlzdChyZW5kZXJlcikpIHsKICAgICAgICAgICAgICAgICBpZiAobWVudUxp
c3QtPnBvcHVwSXNWaXNpYmxlKCkpCiAgICAgICAgICAgICAgICAgICAgIG1lbnVMaXN0LT5oaWRl
UG9wdXAoKTsKICAgICAgICAgICAgICAgICBlbHNlIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9t
L1RleHQuY3BwIGIvV2ViQ29yZS9kb20vVGV4dC5jcHAKaW5kZXggOTI4Yjk3NTk2ZTU2OTliNTc5
ZjkzYWE4NTNlNWJlNWJlYjE4ZjAzOC4uZjA1ZmY5MGU1Y2I4ZGY1NGU1NTQyYzM3YTM0YTllNDBm
YmQwNzVjMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVGV4dC5jcHAKKysrIGIvV2ViQ29yZS9k
b20vVGV4dC5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJUZXh0LmgiCiAKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94TW9kZWxPYmplY3QuaCIK
ICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIK
ICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC0yMDIsOSArMjAzLDEwIEBAIGJvb2wg
VGV4dDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUpCiAgICAgaWYgKCFvbmx5
V1MpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgUmVuZGVyT2JqZWN0ICpwYXIgPSBwYXJl
bnROb2RlKCktPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyT2JqZWN0KiBwYXIgPSBwYXJlbnROb2Rl
KCktPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHBhcmVudE5v
ZGUoKS0+cmVuZGVyQm94TW9kZWxPYmplY3QoKTsKICAgICAKLSAgICBpZiAocGFyLT5pc1RhYmxl
KCkgfHwgcGFyLT5pc1RhYmxlUm93KCkgfHwgcGFyLT5pc1RhYmxlU2VjdGlvbigpIHx8IHBhci0+
aXNUYWJsZUNvbCgpIHx8IHBhci0+aXNGcmFtZVNldCgpKQorICAgIGlmIChib3gtPmlzVGFibGUo
KSB8fCBib3gtPmlzVGFibGVSb3coKSB8fCBib3gtPmlzVGFibGVTZWN0aW9uKCkgfHwgYm94LT5p
c1RhYmxlQ29sKCkgfHwgYm94LT5pc0ZyYW1lU2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKICAgICBpZiAoc3R5bGUtPnByZXNlcnZlTmV3bGluZSgpKSAvLyBwcmUvcHJlLXdyYXAv
cHJlLWxpbmUgYWx3YXlzIG1ha2UgcmVuZGVyZXJzLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0
aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVF
ZGl0Q29tbWFuZC5jcHAKaW5kZXggYzVhODk1OTNlM2RiMDJjNDBkNjhiNGU1ODQxMDdkMzE4NzY1
OWUyZS4uZDhjMGIzNmFkOGU2Zjg5ZDZkNzI3ZWVhNTQ4OWFkMzg0Mjk4Y2YxOCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAorKysgYi9XZWJDb3Jl
L2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC02MDUsNyArNjA1LDcgQEAgUGFz
c1JlZlB0cjxOb2RlPiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YWRkQmxvY2tQbGFjZWhvbGRlcklm
TmVlZGVkKEVsZW1lbnQqIGNvbnQKIAogICAgIHVwZGF0ZUxheW91dCgpOwogCi0gICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IGNvbnRhaW5lci0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVuZGVyZXIgPSBjb250YWluZXItPnJlbmRlckJveE1vZGVsT2JqZWN0KCk7
CiAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzQmxvY2tGbG93KCkpCiAgICAgICAg
IHJldHVybiAwOwogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRv
bkNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIu
Y3BwCmluZGV4IDhiMjNlYWEwNDIwYzYyOGEwOGNhYmI0Y2E5NTBjZWFhMDlkNTEyMGQuLjdlYzE4
YTU3OGZmZDgzZTZlMjhjNWY3MjZlOTc2YTY3YzA5YTViYWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
ZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcv
RGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgc3RhdGljIGJvb2wg
aXNEZWxldGFibGVFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCiAgICAgaWYgKChib3JkZXJCb3Vu
ZGluZ0JveC53aWR0aCgpICogYm9yZGVyQm91bmRpbmdCb3guaGVpZ2h0KCkpIDwgbWluaW11bUFy
ZWEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChyZW5kZXJlci0+aXNUYWJsZSgp
KQorICAgIGlmIChib3gtPmlzVGFibGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBp
ZiAobm9kZS0+aGFzVGFnTmFtZSh1bFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShvbFRhZykgfHwg
bm9kZS0+aGFzVGFnTmFtZShpZnJhbWVUYWcpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5n
L01vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2Vs
ZWN0aW9uTGlzdExldmVsLmNwcAppbmRleCAzZTY3NTRlYmY1ZjZmYjkyMGI2YzVkYzlmYzBkM2Iy
ZDNmNzgyOTEzLi5mYzhiMjUzZWQ0MTBjM2ZiMzMzOWYzMmJjMGE5YmY2NzI5NGNhNTk5IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcAorKysg
Yi9XZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcApAQCAtMjksNyAr
MjksNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUg
IlJlbmRlckJveE1vZGVsT2JqZWN0LmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5o
IgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAKQEAgLTc1LDEwICs3NSwxMSBAQCBzdGF0aWMg
Ym9vbCBnZXRTdGFydEVuZExpc3RDaGlsZHJlbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb24sIE5vZGUqJiBzdAogICAgICAgICBpZiAoIWVuZExpc3RDaGlsZCkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvLyBpZiB0aGUgc2VsZWN0aW9uIGVu
ZHMgb24gYSBsaXN0IGl0ZW0gd2l0aCBhIHN1Ymxpc3QsIGluY2x1ZGUgdGhlIGVudGlyZSBzdWJs
aXN0Ci0gICAgaWYgKGVuZExpc3RDaGlsZC0+cmVuZGVyZXIoKS0+aXNMaXN0SXRlbSgpKSB7Ci0g
ICAgICAgIFJlbmRlck9iamVjdCogciA9IGVuZExpc3RDaGlsZC0+cmVuZGVyZXIoKS0+bmV4dFNp
YmxpbmcoKTsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogZW5kTGlzdENoaWxkUmVuZGVyZXIg
PSBlbmRMaXN0Q2hpbGQtPnJlbmRlckJveE1vZGVsT2JqZWN0KCk7CisgICAgaWYgKGVuZExpc3RD
aGlsZFJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByID0g
ZW5kTGlzdENoaWxkUmVuZGVyZXItPm5leHRTaWJsaW5nKCk7CiAgICAgICAgIGlmIChyICYmIGlz
TGlzdEVsZW1lbnQoci0+bm9kZSgpKSkKICAgICAgICAgICAgIGVuZExpc3RDaGlsZCA9IHItPm5v
ZGUoKTsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNw
cAppbmRleCAyZjBiZGRmZDZkYWUyZTRjYjdmNGY4NjJjODY5MGJiZmFmNjIxNDcyLi5lNzhmMjQy
NTY4NDEzZmExYTllOTE4MzA5NWU1ODNiYTQzY2VkZjVmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTkzMiw4ICs5MzIsOSBAQCB2b2lkIFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBmcmFnbWVudC5yZW1vdmVOb2RlKHJl
Zk5vZGUpOwogCiAgICAgTm9kZSogYmxvY2tTdGFydCA9IGVuY2xvc2luZ0Jsb2NrKGluc2VydGlv
blBvcy5ub2RlKCkpOworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBibG9ja1N0YXJ0UmVuZGVy
ZXIgPSBibG9ja1N0YXJ0LT5yZW5kZXJCb3hNb2RlbE9iamVjdCgpOwogICAgIGlmICgoaXNMaXN0
RWxlbWVudChyZWZOb2RlLmdldCgpKSB8fCAoaXNTdHlsZVNwYW4ocmVmTm9kZS5nZXQoKSkgJiYg
aXNMaXN0RWxlbWVudChyZWZOb2RlLT5maXJzdENoaWxkKCkpKSkKLSAgICAgICAgJiYgYmxvY2tT
dGFydC0+cmVuZGVyZXIoKS0+aXNMaXN0SXRlbSgpKQorICAgICAgICAmJiAoYmxvY2tTdGFydFJl
bmRlcmVyICYmIGJsb2NrU3RhcnRSZW5kZXJlci0+aXNMaXN0SXRlbSgpKSkKICAgICAgICAgcmVm
Tm9kZSA9IGluc2VydEFzTGlzdEl0ZW1zKHJlZk5vZGUsIGJsb2NrU3RhcnQsIGluc2VydGlvblBv
cyk7CiAgICAgZWxzZQogICAgICAgICBpbnNlcnROb2RlQXRBbmRVcGRhdGVOb2Rlc0luc2VydGVk
KHJlZk5vZGUsIGluc2VydGlvblBvcyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvVGV4
dEl0ZXJhdG9yLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IGYz
YmQ5ZGY2YjlmOTViZjMwZGRhMmEzMGU3MjZkNzM1ZjE4ZjhiMWYuLmY0YzAxZmMwZGVjZTJjYTU5
ZjE0MThmNjkzMjFhNTQ2NWVjOWExZTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9UZXh0
SXRlcmF0b3IuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBAIC0z
MjQsNiArMzI0LDE5IEBAIFRleHRJdGVyYXRvcjo6VGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiBy
LCBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikKICAgICBhZHZhbmNlKCk7CiB9CiAKK3N0
YXRpYyBib29sIHNob3VsZEhhbmRsZUFzUmVwbGFjZWRFbGVtZW50KFJlbmRlck9iamVjdCogcmVu
ZGVyZXIpCit7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChyZW5kZXJlci0+aXNCb3hNb2RlbE9iamVjdCgpKSB7CisgICAgICAgIFJlbmRlckJveE1v
ZGVsT2JqZWN0KiBjc3NCb3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVyKTsKKyAg
ICAgICAgaWYgKGNzc0JveC0+aXNJbWFnZSgpIHx8IGNzc0JveC0+aXNXaWRnZXQoKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBOb2RlKiBub2RlID0gcmVuZGVyZXItPm5v
ZGUoKTsKKyAgICByZXR1cm4gKG5vZGUgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihub2RlKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSk7Cit9CisKIHZv
aWQgVGV4dEl0ZXJhdG9yOjphZHZhbmNlKCkKIHsKICAgICAvLyByZXNldCB0aGUgcnVuIGluZm9y
bWF0aW9uCkBAIC0zNzEsOSArMzg0LDcgQEAgdm9pZCBUZXh0SXRlcmF0b3I6OmFkdmFuY2UoKQog
ICAgICAgICAgICAgaWYgKCFtX2hhbmRsZWROb2RlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHJl
bmRlcmVyLT5pc1RleHQoKSAmJiBtX25vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RF
KSAvLyBGSVhNRTogV2hhdCBhYm91dCBDREFUQV9TRUNUSU9OX05PREU/CiAgICAgICAgICAgICAg
ICAgICAgIG1faGFuZGxlZE5vZGUgPSBoYW5kbGVUZXh0Tm9kZSgpOwotICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHJlbmRlcmVyICYmIChyZW5kZXJlci0+aXNJbWFnZSgpIHx8IHJlbmRlcmVyLT5p
c1dpZGdldCgpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKHJlbmRlcmVyLT5ub2RlKCkg
JiYgcmVuZGVyZXItPm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpICYmCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PEVsZW1lbnQqPihyZW5kZXJlci0+bm9kZSgpKS0+aXNGb3Jt
Q29udHJvbEVsZW1lbnQoKSkpKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNob3VsZEhhbmRs
ZUFzUmVwbGFjZWRFbGVtZW50KHJlbmRlcmVyKSkKICAgICAgICAgICAgICAgICAgICAgbV9oYW5k
bGVkTm9kZSA9IGhhbmRsZVJlcGxhY2VkRWxlbWVudCgpOwogICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgbV9oYW5kbGVkTm9kZSA9IGhhbmRsZU5vblRleHROb2RlKCk7
CkBAIC03MzgsOSArNzQ5LDEwIEBAIHN0YXRpYyBpbnQgbWF4T2Zmc2V0SW5jbHVkaW5nQ29sbGFw
c2VkU3BhY2VzKE5vZGUqIG5vZGUpCiAvLyBXaGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgZW1pdCBh
IGNoYXJhY3RlciBhcyB3ZSBlbnRlciBtX25vZGUgKGlmIGl0J3MgYSBjb250YWluZXIpIG9yIGFz
IHdlIGhpdCBpdCAoaWYgaXQncyBhdG9taWMpLgogYm9vbCBUZXh0SXRlcmF0b3I6OnNob3VsZFJl
cHJlc2VudE5vZGVPZmZzZXRaZXJvKCkKIHsKLSAgICBpZiAobV9lbWl0c0NoYXJhY3RlcnNCZXR3
ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyAmJiBtX25vZGUtPnJlbmRlcmVyKCkgJiYgbV9ub2RlLT5y
ZW5kZXJlcigpLT5pc1RhYmxlKCkpCisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNzc0JveCA9
IG1fbm9kZS0+cmVuZGVyQm94TW9kZWxPYmplY3QoKTsKKyAgICBpZiAobV9lbWl0c0NoYXJhY3Rl
cnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyAmJiBjc3NCb3ggJiYgY3NzQm94LT5pc1RhYmxl
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAKKwogICAgIC8vIExlYXZlIGVsZW1l
bnQgcG9zaXRpb25lZCBmbHVzaCB3aXRoIHN0YXJ0IG9mIGEgcGFyYWdyYXBoCiAgICAgLy8gKGUu
Zy4gZG8gbm90IGluc2VydCB0YWIgYmVmb3JlIGEgdGFibGUgY2VsbCBhdCB0aGUgc3RhcnQgb2Yg
YSBwYXJhZ3JhcGgpCiAgICAgaWYgKG1fbGFzdENoYXJhY3RlciA9PSAnXG4nKQpAQCAtNzkzLDcg
KzgwNSw4IEBAIGJvb2wgVGV4dEl0ZXJhdG9yOjpzaG91bGRSZXByZXNlbnROb2RlT2Zmc2V0WmVy
bygpCiAKIGJvb2wgVGV4dEl0ZXJhdG9yOjpzaG91bGRFbWl0U3BhY2VCZWZvcmVBbmRBZnRlck5v
ZGUoTm9kZSogbm9kZSkKIHsKLSAgICByZXR1cm4gbm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5y
ZW5kZXJlcigpLT5pc1RhYmxlKCkgJiYgKG5vZGUtPnJlbmRlcmVyKCktPmlzSW5saW5lKCkgfHwg
bV9lbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CisgICAgUmVuZGVy
Qm94TW9kZWxPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyQm94TW9kZWxPYmplY3QoKTsK
KyAgICByZXR1cm4gcmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzVGFibGUoKSAmJiAocmVuZGVyZXIt
PmlzSW5saW5lKCkgfHwgbV9lbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9u
cyk7CiB9CiAKIHZvaWQgVGV4dEl0ZXJhdG9yOjpyZXByZXNlbnROb2RlT2Zmc2V0WmVybygpCkBA
IC0xMDA5LDEyICsxMDIyLDEzIEBAIHZvaWQgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRv
cjo6YWR2YW5jZSgpCiAgICAgICAgIC8vIERvbid0IGhhbmRsZSBub2RlIGlmIHdlIHN0YXJ0IGl0
ZXJhdGluZyBhdCBbbm9kZSwgMF0uCiAgICAgICAgIGlmICghbV9oYW5kbGVkTm9kZSAmJiAhKG1f
bm9kZSA9PSBtX2VuZE5vZGUgJiYgbV9lbmRPZmZzZXQgPT0gMCkpIHsKICAgICAgICAgICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBtX25vZGUtPnJlbmRlcmVyKCk7CisgICAgICAgICAgICBS
ZW5kZXJCb3hNb2RlbE9iamVjdCogY3NzQm94ID0gbV9ub2RlLT5yZW5kZXJCb3hNb2RlbE9iamVj
dCgpOwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc1RleHQoKSAmJiBt
X25vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RFKSB7CiAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFdoYXQgYWJvdXQgQ0RBVEFfU0VDVElPTl9OT0RFPwogICAgICAgICAgICAgICAg
IGlmIChyZW5kZXJlci0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUgJiYgbV9vZmZz
ZXQgPiAwKQogICAgICAgICAgICAgICAgICAgICBtX2hhbmRsZWROb2RlID0gaGFuZGxlVGV4dE5v
ZGUoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocmVuZGVyZXIgJiYgKHJlbmRlcmVyLT5pc0lt
YWdlKCkgfHwgcmVuZGVyZXItPmlzV2lkZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJl
bmRlcmVyLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSAmJiBtX29mZnNldCA+IDAp
CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNzc0JveCAmJiAoY3NzQm94LT5pc0ltYWdlKCkgfHwg
Y3NzQm94LT5pc1dpZGdldCgpKSkgeworICAgICAgICAgICAgICAgIGlmIChjc3NCb3gtPnN0eWxl
KCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFICYmIG1fb2Zmc2V0ID4gMCkKICAgICAgICAgICAg
ICAgICAgICAgbV9oYW5kbGVkTm9kZSA9IGhhbmRsZVJlcGxhY2VkRWxlbWVudCgpOwogICAgICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbV9oYW5kbGVkTm9kZSA9IGhhbmRsZU5vblRl
eHROb2RlKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAg
Yi9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggNzY4MDA4NDhkYWJlYjBm
MWFiMGQyMTM5YjlhNmUxMjMxMDIwODRmMy4uZTk1OWRmMDMwM2Q4NjA1ZGNlNzY5MjMzYjM4NjU1
YmM0ODFhNzM2ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3Bw
CisrKyBiL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtMzcsNyArMzcsNyBA
QAogI2luY2x1ZGUgIkluc2VydExpbmVCcmVha0NvbW1hbmQuaCIKICNpbmNsdWRlICJJbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmgiCiAjaW5jbHVkZSAiSW5zZXJ0VGV4dENvbW1hbmQu
aCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJCb3hNb2RlbE9i
amVjdC5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJWaXNp
YmxlUG9zaXRpb24uaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgpAQCAtMzk4LDcgKzM5OCw4
IEBAIGJvb2wgVHlwaW5nQ29tbWFuZDo6bWFrZUVkaXRhYmxlUm9vdEVtcHR5KCkKIAogICAgIGlm
IChyb290LT5maXJzdENoaWxkKCkgPT0gcm9vdC0+bGFzdENoaWxkKCkgJiYgcm9vdC0+Zmlyc3RF
bGVtZW50Q2hpbGQoKSAmJiByb290LT5maXJzdEVsZW1lbnRDaGlsZCgpLT5oYXNUYWdOYW1lKGJy
VGFnKSkgewogICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHNpbmdsZSBjaGlsZCBhbmQgaXQgY291
bGQgYmUgYSBwbGFjZWhvbGRlciwgbGVhdmUgaXQgYWxvbmUuCi0gICAgICAgIGlmIChyb290LT5y
ZW5kZXJlcigpICYmIHJvb3QtPnJlbmRlcmVyKCktPmlzQmxvY2tGbG93KCkpCisgICAgICAgIFJl
bmRlckJveE1vZGVsT2JqZWN0KiByb290UmVuZGVyZXIgPSByb290LT5yZW5kZXJCb3hNb2RlbE9i
amVjdCgpOworICAgICAgICBpZiAocm9vdFJlbmRlcmVyICYmIHJvb3RSZW5kZXJlci0+aXNCbG9j
a0Zsb3coKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvaHRtbGVk
aXRpbmcuY3BwCmluZGV4IDUzYjVkN2U2ODk5MGE0ODc1MTcwZmJmMzFkN2M3MGNiOGM5YzhmYzMu
LmRiNDE2OGRkMGNiZDZmMjVmOGUzMGFkMmY3MDdmNTgyNjExM2ViMGEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL2h0bWxl
ZGl0aW5nLmNwcApAQCAtMTcxLDE2ICsxNzEsMjUgQEAgTm9kZSogbG93ZXN0RWRpdGFibGVBbmNl
c3RvcihOb2RlKiBub2RlKQogICAgIHJldHVybiBsb3dlc3RSb290OwogfQogCitzdGF0aWMgTm9k
ZSogbm9kZU9yUGFyZW50Tm9kZUlmVGFibGUoTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobm9k
ZSk7CisgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGNvcnJlY3Q/ICBXZSdyZSBkZWFsaW5nIHdp
dGggcG9zaXRpb25zIHdoaWNoIG1heQorICAgIC8vIG5vdCBiZSByZW5kZXJlZC4gIFdoeSBpcyBp
dCByaWdodCB0byBjaGVjayB0aGUgcmVuZGVyZXIgaGVyZT8KKyAgICBSZW5kZXJCb3hNb2RlbE9i
amVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJCb3hNb2RlbE9iamVjdCgpOworICAgIGlmIChy
ZW5kZXJlciAmJiByZW5kZXJlci0+aXNUYWJsZSgpKQorICAgICAgICByZXR1cm4gbm9kZS0+cGFy
ZW50Tm9kZSgpOworCisgICAgcmV0dXJuIG5vZGU7Cit9CisKIGJvb2wgaXNFZGl0YWJsZVBvc2l0
aW9uKGNvbnN0IFBvc2l0aW9uJiBwKQogewogICAgIE5vZGUqIG5vZGUgPSBwLm5vZGUoKTsKICAg
ICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgaWYgKG5v
ZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpKQotICAgICAgICBu
b2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIAotICAgIHJldHVybiBub2RlLT5pc0NvbnRl
bnRFZGl0YWJsZSgpOworICAgIHJldHVybiBub2RlT3JQYXJlbnROb2RlSWZUYWJsZShub2RlKS0+
aXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAogYm9vbCBpc0F0VW5zcGxpdHRhYmxlRWxlbWVudChj
b25zdCBQb3NpdGlvbiYgcG9zKQpAQCAtMTk1LDExICsyMDQsOCBAQCBib29sIGlzUmljaGx5RWRp
dGFibGVQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcCkKICAgICBOb2RlKiBub2RlID0gcC5ub2Rl
KCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAg
IGlmIChub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzVGFibGUoKSkKLSAg
ICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICAKLSAgICByZXR1cm4gbm9kZS0+
aXNDb250ZW50UmljaGx5RWRpdGFibGUoKTsKKworICAgIHJldHVybiBub2RlT3JQYXJlbnROb2Rl
SWZUYWJsZShub2RlKS0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKTsKIH0KIAogRWxlbWVudCog
ZWRpdGFibGVSb290Rm9yUG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHApCkBAIC0yMDcsMTEgKzIx
Myw4IEBAIEVsZW1lbnQqIGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBw
KQogICAgIE5vZGUqIG5vZGUgPSBwLm5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICAKLSAgICBpZiAobm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5k
ZXJlcigpLT5pc1RhYmxlKCkpCi0gICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0g
ICAgCi0gICAgcmV0dXJuIG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKworICAgIHJldHVy
biBub2RlT3JQYXJlbnROb2RlSWZUYWJsZShub2RlKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwog
fQogCiAvLyBGaW5kcyB0aGUgZW5jbG9zaW5nIGVsZW1lbnQgdW50aWwgd2hpY2ggdGhlIHRyZWUg
Y2FuIGJlIHNwbGl0LgpAQCAtNjU5LDkgKzY2Miw5IEBAIGJvb2wgaXNMaXN0RWxlbWVudChOb2Rl
ICpuKQogICAgIHJldHVybiAobiAmJiAobi0+aGFzVGFnTmFtZSh1bFRhZykgfHwgbi0+aGFzVGFn
TmFtZShvbFRhZykgfHwgbi0+aGFzVGFnTmFtZShkbFRhZykpKTsKIH0KIAotYm9vbCBpc0xpc3RJ
dGVtKE5vZGUgKm4pCitib29sIGlzTGlzdEl0ZW0oTm9kZSogbikKIHsKLSAgICByZXR1cm4gbiAm
JiBuLT5yZW5kZXJlcigpICYmIG4tPnJlbmRlcmVyKCktPmlzTGlzdEl0ZW0oKTsKKyAgICByZXR1
cm4gbiAmJiBuLT5yZW5kZXJCb3hNb2RlbE9iamVjdCgpICYmIG4tPnJlbmRlckJveE1vZGVsT2Jq
ZWN0KCktPmlzTGlzdEl0ZW0oKTsKIH0KIAogTm9kZSogZW5jbG9zaW5nTm9kZVdpdGhUYWcoY29u
c3QgUG9zaXRpb24mIHAsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpCkBAIC0xMTQ2LDEw
ICsxMTQ5LDE0IEBAIGJvb2wgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihOb2RlKiBub2Rl
LCBjb25zdCBSYW5nZSogc2VsZWN0ZWRSYW5nZSkKIAogYm9vbCBpc1JlbmRlcmVkQXNOb25Jbmxp
bmVUYWJsZUltYWdlT3JIUihjb25zdCBOb2RlKiBub2RlKQogewotICAgIGlmICghbm9kZSkKKyAg
ICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICByZXR1
cm4gcmVuZGVyZXIgJiYgKChyZW5kZXJlci0+aXNUYWJsZSgpICYmICFyZW5kZXJlci0+aXNJbmxp
bmUoKSkgfHwgKHJlbmRlcmVyLT5pc0ltYWdlKCkgJiYgIXJlbmRlcmVyLT5pc0lubGluZSgpKSB8
fCByZW5kZXJlci0+aXNIUigpKTsKKyAgICBpZiAobm9kZS0+cmVuZGVyZXIoKS0+aXNIUigpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY3NzQm94ID0g
bm9kZS0+cmVuZGVyQm94TW9kZWxPYmplY3QoKTsKKyAgICBpZiAoY3NzQm94LT5pc0lubGluZSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGNzc0JveC0+aXNUYWJsZSgpIHx8
IGNzc0JveC0+aXNJbWFnZSgpOwogfQogCiBQYXNzUmVmUHRyPFJhbmdlPiBhdm9pZEludGVyc2Vj
dGlvbldpdGhOb2RlKGNvbnN0IFJhbmdlKiByYW5nZSwgTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxBcmVh
RWxlbWVudC5jcHAKaW5kZXggMmQ3MTRiYWNjZTQ0NzhiNDNkNWQ3OTIzNjg3ZDUzYjJjMjk2ZDc4
MS4uZDFiOTc4MmE1ZWU0NGE4ZmVlYzBhNWM2MjlhNjM4ZjVmNDdjYmZmNiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxB
cmVhRWxlbWVudC5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiUGF0aC5oIgotI2luY2x1ZGUg
IlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlckJveE1vZGVsT2JqZWN0LmgiCiAKIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTIwMyw3ICsyMDMsNyBAQCB2b2lkIEhUTUxBcmVhRWxl
bWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKGJvb2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9u
KQogICAgIC8vIFRoaXMgd2lsbCBoYW5kbGUgc2Nyb2xsaW5nIHRvIHRoZSBpbWFnZSBpZiBuZWNl
c3NhcnkuCiAgICAgaW1hZ2VFbGVtZW50LT51cGRhdGVGb2N1c0FwcGVhcmFuY2UocmVzdG9yZVBy
ZXZpb3VzU2VsZWN0aW9uKTsKICAgICAKLSAgICBSZW5kZXJPYmplY3QqIGltYWdlUmVuZGVyZXIg
PSBpbWFnZUVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGlt
YWdlUmVuZGVyZXIgPSBpbWFnZUVsZW1lbnQtPnJlbmRlcmVyKCk7CiAgICAgaWYgKGltYWdlUmVu
ZGVyZXIpCiAgICAgICAgIGltYWdlUmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KHRydWUpOwogfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcCBiL1dlYkNv
cmUvaHRtbC9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKaW5kZXggMGIxNzA4NmZlZDNiYjQ3MGEz
YjI3ZDkwYmRhY2U3YWJiZmMwZjM0ZS4uNDJjYmQ0ZWNiNDVlM2RkYjM5MDM0ZDc3ZmEyNTBjYzZh
YjRiZTY3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNw
cAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCkBAIC00MiwxMyAr
NDIsOSBAQAogI2luY2x1ZGUgIkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUg
IkxlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIK
LSNpZiBFTkFCTEUoTUFUSE1MKQogI2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgiCi0jZW5kaWYKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKLSNlbmRpZgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHQuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRt
bC9IVE1MRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCmluZGV4IGZi
MWJjYzIyMGNlNTg3YTk1OTI3ZDQ0ZjBjZDJiNzI4NTU3M2U0MGQuLmQwZDhiZjhjODNjMzQxODEz
NjZkN2RhYzFiNzY5MzU3NjEzNmJjY2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRWxl
bWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApAQCAtMTAwNiw2ICsx
MDA2LDExIEBAIFJlbmRlck9iamVjdCogSFRNTEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRl
ckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqIHN0eWxlCiAgICAgcmV0dXJuIFJlbmRlck9iamVj
dDo6Y3JlYXRlT2JqZWN0KHRoaXMsIHN0eWxlKTsKIH0KIAorUmVuZGVyQm94TW9kZWxPYmplY3Qq
IEhUTUxFbGVtZW50OjpyZW5kZXJlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRvUmVuZGVyQm94
TW9kZWxPYmplY3QoU3R5bGVkRWxlbWVudDo6cmVuZGVyZXIoKSk7Cit9CisKIEhUTUxGb3JtRWxl
bWVudCogSFRNTEVsZW1lbnQ6OmZpbmRGb3JtQW5jZXN0b3IoKSBjb25zdAogewogICAgIGZvciAo
Tm9kZSogYW5jZXN0b3IgPSBwYXJlbnROb2RlKCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2Vz
dG9yLT5wYXJlbnROb2RlKCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
aCBiL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCmluZGV4IDAzNDQ5Yzk4NWFlMDQyNzU1NTFk
NzgxZGQyMGZkZGM2NDlhZWMxNzIuLmFkMWUxZDFlNTgzNDY3NzBiNzlhMGE2Yjk0YjQ1N2Y2YWQ0
Njg0YjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCisrKyBiL1dlYkNv
cmUvaHRtbC9IVE1MRWxlbWVudC5oCkBAIC03Nyw2ICs3Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOwogICAgIHZpcnR1YWwgUmVu
ZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CiAK
KyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIoKSBjb25zdDsKKwogICAgIEhUTUxG
b3JtRWxlbWVudCogZm9ybSgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxGb3JtKCk7IH0KIAogICAg
IHN0YXRpYyB2b2lkIGFkZEhUTUxBbGlnbm1lbnRUb1N0eWxlZEVsZW1lbnQoU3R5bGVkRWxlbWVu
dCosIEF0dHJpYnV0ZSopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1l
bnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCmluZGV4IDNmNzAwZWZj
NDg2MzcyMDBjNjRmYWU2MWMxMjFmZWYxMTAwYjU3ODkuLmE5YmI2OWQ2ZTUxMjk2YzNjNTcwYjc4
ZDYyNTRiMmI3ZDc4MDBjZmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVt
ZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAKQEAgLTU2LDE1
ICs1NiwyMCBAQCBQYXNzUmVmUHRyPEhUTUxFbWJlZEVsZW1lbnQ+IEhUTUxFbWJlZEVsZW1lbnQ6
OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYQogCiBzdGF0aWMgaW5saW5lIFJlbmRl
cldpZGdldCogZmluZFdpZGdldFJlbmRlcmVyKGNvbnN0IE5vZGUqIG4pIAogewotICAgIGlmICgh
bi0+cmVuZGVyZXIoKSkKKyAgICBpZiAoIW4tPnJlbmRlcmVyKCkpIHsKICAgICAgICAgZG8KICAg
ICAgICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7CiAgICAgICAgIHdoaWxlIChuICYmICFuLT5o
YXNUYWdOYW1lKG9iamVjdFRhZykpOwogCi0gICAgaWYgKG4gJiYgbi0+cmVuZGVyZXIoKSAmJiBu
LT5yZW5kZXJlcigpLT5pc1dpZGdldCgpKQotICAgICAgICByZXR1cm4gdG9SZW5kZXJXaWRnZXQo
bi0+cmVuZGVyZXIoKSk7CisgICAgICAgIGlmICghbikKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciA9IG4tPnJlbmRlckJv
eE1vZGVsT2JqZWN0KCk7CisgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzV2lkZ2V0
KCkpCisgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHRvUmVu
ZGVyV2lkZ2V0KHJlbmRlcmVyKTsKIH0KIAogUmVuZGVyV2lkZ2V0KiBIVE1MRW1iZWRFbGVtZW50
OjpyZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5j
cHAKaW5kZXggZDc1ZGUwMWIzNDc3YWE2Yzc2M2ZkZDM2Yzg4Yjc3MThmN2RlZTYyOC4uMmVhODI4
MjZlYWU2YTM2MTg0MmFjMWE0ZWRlZDVjMjliNTZjZWViYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVu
dC5jcHAKQEAgLTEwMiwyMCArMTAyLDI2IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50Ojpmb3JtV291
bGRIYXZlU2VjdXJlU3VibWlzc2lvbihjb25zdCBTdHJpbmcmIHVybCkKICAgICByZXR1cm4gZG9j
dW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKS5wcm90b2NvbElzKCJodHRwcyIpOwogfQogCi1ib29s
IEhUTUxGb3JtRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUpCisv
LyBGSVhNRTogSXMgdGhpcyBuZWVkZWQgd2l0aCB0aGUgbmV3IEhUTUw1IHBhcnNlcj8gIEkgZG9u
J3QgdGhpbmsgc28uCitzdGF0aWMgYm9vbCBwYXJlbnRJc1RhYmxlRWxlbWVudFBhcnQoSFRNTEZv
cm1FbGVtZW50KiBmb3JtKQogewotICAgIGlmICghaXNEZW1vdGVkKCkpCi0gICAgICAgIHJldHVy
biBIVE1MRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7Ci0gICAgCi0gICAgTm9kZSog
bm9kZSA9IHBhcmVudE5vZGUoKTsKLSAgICBSZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyID0g
bm9kZS0+cmVuZGVyZXIoKTsKLSAgICBib29sIHBhcmVudElzVGFibGVFbGVtZW50UGFydCA9IChw
YXJlbnRSZW5kZXJlci0+aXNUYWJsZSgpICYmIG5vZGUtPmhhc1RhZ05hbWUodGFibGVUYWcpKQor
ICAgIE5vZGUqIG5vZGUgPSBmb3JtLT5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFub2RlLT5yZW5k
ZXJlcigpLT5pc0JveE1vZGVsT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBS
ZW5kZXJCb3hNb2RlbE9iamVjdCogcGFyZW50UmVuZGVyZXIgPSB0b1JlbmRlckJveE1vZGVsT2Jq
ZWN0KG5vZGUtPnJlbmRlcmVyKCkpOworICAgIHJldHVybiAocGFyZW50UmVuZGVyZXItPmlzVGFi
bGUoKSAmJiBub2RlLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkKICAgICAgICAgfHwgKHBhcmVudFJl
bmRlcmVyLT5pc1RhYmxlUm93KCkgJiYgbm9kZS0+aGFzVGFnTmFtZSh0clRhZykpCiAgICAgICAg
IHx8IChwYXJlbnRSZW5kZXJlci0+aXNUYWJsZVNlY3Rpb24oKSAmJiBub2RlLT5oYXNUYWdOYW1l
KHRib2R5VGFnKSkKICAgICAgICAgfHwgKHBhcmVudFJlbmRlcmVyLT5pc1RhYmxlQ29sKCkgJiYg
bm9kZS0+aGFzVGFnTmFtZShjb2xUYWcpKSAKICAgICAgICAgfHwgKHBhcmVudFJlbmRlcmVyLT5p
c1RhYmxlQ2VsbCgpICYmIG5vZGUtPmhhc1RhZ05hbWUodHJUYWcpKTsKK30KKworYm9vbCBIVE1M
Rm9ybUVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqIHN0eWxlKQoreworICAg
IGlmICghaXNEZW1vdGVkKCkpCisgICAgICAgIHJldHVybiBIVE1MRWxlbWVudDo6cmVuZGVyZXJJ
c05lZWRlZChzdHlsZSk7CiAKLSAgICBpZiAoIXBhcmVudElzVGFibGVFbGVtZW50UGFydCkKKyAg
ICBpZiAoIXBhcmVudElzVGFibGVFbGVtZW50UGFydCh0aGlzKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICBFRGlzcGxheSBkaXNwbGF5ID0gc3R5bGUtPmRpc3BsYXkoKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmNwcAppbmRleCBiNGU1NDUyM2IzODZlNTcxZTgxOWEyOGZiZjVmYTBiZmU4
ZDJjOTIyLi41OTFiZGY1MTkwMjM0MTIxNTFkNTIzZjgyZmM4Mzg5ODE5Zjc5MDBjIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC0yMzgzLDExICsyMzgzLDExIEBAIHZvaWQgSFRNTElu
cHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0KQogICAgICAgICAgICAg
b25TZWFyY2goKTsKICAgICAgICAgfQogICAgICAgICAvLyBGaXJlIG9uQ2hhbmdlIGZvciB0ZXh0
IGZpZWxkcy4KLSAgICAgICAgUmVuZGVyT2JqZWN0KiByID0gcmVuZGVyZXIoKTsKKyAgICAgICAg
UmVuZGVyQm94TW9kZWxPYmplY3QqIHIgPSByZW5kZXJCb3hNb2RlbE9iamVjdCgpOwogICAgICAg
ICBpZiAociAmJiByLT5pc1RleHRGaWVsZCgpICYmIHRvUmVuZGVyVGV4dENvbnRyb2wociktPndh
c0NoYW5nZWRTaW5jZUxhc3RDaGFuZ2VFdmVudCgpKSB7CiAgICAgICAgICAgICBkaXNwYXRjaEZv
cm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKICAgICAgICAgICAgIC8vIFJlZmV0Y2ggdGhlIHJlbmRl
cmVyIHNpbmNlIGFyYml0cmFyeSBKUyBjb2RlIHJ1biBkdXJpbmcgb25jaGFuZ2UgY2FuIGRvIGFu
eXRoaW5nLCBpbmNsdWRpbmcgZGVzdHJveWluZyBpdC4KLSAgICAgICAgICAgIHIgPSByZW5kZXJl
cigpOworICAgICAgICAgICAgciA9IHJlbmRlckJveE1vZGVsT2JqZWN0KCk7CiAgICAgICAgICAg
ICBpZiAociAmJiByLT5pc1RleHRGaWVsZCgpKQogICAgICAgICAgICAgICAgIHRvUmVuZGVyVGV4
dENvbnRyb2wociktPnNldENoYW5nZWRTaW5jZUxhc3RDaGFuZ2VFdmVudChmYWxzZSk7CiAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MT0xpc3RFbGVtZW50LmNwcCBiL1dl
YkNvcmUvaHRtbC9IVE1MT0xpc3RFbGVtZW50LmNwcAppbmRleCA0YzFkNWE3ODk4NzczNjYxZjY4
OWJjYmJhY2IzOTljMzI2M2VlYTBlLi5mMjRmMjllY2MwY2ZhYjJkZjM4Y2UwYmY1NGViOGE3ZjRk
Y2ZiY2QxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTE9MaXN0RWxlbWVudC5jcHAKKysr
IGIvV2ViQ29yZS9odG1sL0hUTUxPTGlzdEVsZW1lbnQuY3BwCkBAIC04Miw3ICs4Miw3IEBAIHZv
aWQgSFRNTE9MaXN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRy
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX3N0YXJ0ID0gc3RhcnQ7CiAgICAgICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJlbmRlcmVyKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0SW5QcmVPcmRlcihyZW5kZXJlcigpKSkgewotICAgICAgICAgICAgaWYgKGNoaWxk
LT5pc0xpc3RJdGVtKCkpCisgICAgICAgICAgICBpZiAoY2hpbGQtPmlzQm94TW9kZWxPYmplY3Qo
KSAmJiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNoaWxkKS0+aXNMaXN0SXRlbSgpKQogICAgICAg
ICAgICAgICAgIHRvUmVuZGVyTGlzdEl0ZW0oY2hpbGQpLT51cGRhdGVWYWx1ZSgpOwogICAgICAg
ICB9CiAgICAgfSBlbHNlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1l
bnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAppbmRleCA2YjExOTYx
ZjA2M2E3NDY2ZmE3YWMzMDMzMjA4ZDc4ZWNmZmZjMmM5Li40M2Y4ZjRhMjgwNDg5YjEzMjc2NDE0
MDliNTAxZjUzNDMyMzI4YTY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVs
ZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAKQEAgLTE1
Niw3ICsxNTYsNyBAQCB2b2lkIEhUTUxQbHVnSW5FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KEV2ZW50KiBldmVudCkKIAogICAgIC8vIEZJWE1FOiBNb3VzZSBkb3duIGFuZCBzY3JvbGwgZXZl
bnRzIGFyZSBwYXNzZWQgZG93biB0byBwbHVnLWluIHZpYSBjdXN0b20gY29kZSBpbiBFdmVudEhh
bmRsZXI7IHRoZXNlIGNvZGUgcGF0aHMgc2hvdWxkIGJlIHVuaXRlZC4KIAotICAgIFJlbmRlck9i
amVjdCogciA9IHJlbmRlcmVyKCk7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHIgPSByZW5k
ZXJlcigpOwogICAgIGlmIChyICYmIHItPmlzRW1iZWRkZWRPYmplY3QoKSAmJiB0b1JlbmRlckVt
YmVkZGVkT2JqZWN0KHIpLT5zaG93c01pc3NpbmdQbHVnaW5JbmRpY2F0b3IoKSkgewogICAgICAg
ICB0b1JlbmRlckVtYmVkZGVkT2JqZWN0KHIpLT5oYW5kbGVNaXNzaW5nUGx1Z2luSW5kaWNhdG9y
RXZlbnQoZXZlbnQpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRl
ci9JbWFnZUxvYWRlci5jcHAgYi9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5jcHAKaW5kZXgg
ZDE2OWQzZTY3YWVhZmUyOTU3M2YzNTg5NGE4ZGM4ZmJiYTE3ZDAwZC4uMGUyZGYxYjgyNjg1YTYw
N2VhMGY5MGFhNGVmZjRkOWRiYmZlNmQ0YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvSW1h
Z2VMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcApAQCAtMTMw
LDcgKzEzMCw3IEBAIHZvaWQgSW1hZ2VMb2FkZXI6OnNldEltYWdlKENhY2hlZEltYWdlKiBuZXdJ
bWFnZSkKICAgICAgICAgICAgIG9sZEltYWdlLT5yZW1vdmVDbGllbnQodGhpcyk7CiAgICAgfQog
Ci0gICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBtX2VsZW1lbnQtPnJlbmRlcmVyKCkp
IHsKKyAgICBpZiAoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyID0gbV9lbGVtZW50LT5y
ZW5kZXJCb3hNb2RlbE9iamVjdCgpKSB7CiAgICAgICAgIGlmICghcmVuZGVyZXItPmlzSW1hZ2Uo
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgdG9SZW5kZXJJbWFnZShyZW5kZXJlcikt
PnJlc2V0QW5pbWF0aW9uKCk7CkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBJbWFnZUxvYWRlcjo6
dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgICAgICAgICAgb2xkSW1hZ2UtPnJlbW92ZUNsaWVudCh0
aGlzKTsKICAgICB9CiAKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG1fZWxlbWVu
dC0+cmVuZGVyZXIoKSkgeworICAgIGlmIChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIg
PSBtX2VsZW1lbnQtPnJlbmRlckJveE1vZGVsT2JqZWN0KCkpIHsKICAgICAgICAgaWYgKCFyZW5k
ZXJlci0+aXNJbWFnZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB0b1JlbmRlcklt
YWdlKHJlbmRlcmVyKS0+cmVzZXRBbmltYXRpb24oKTsKQEAgLTIyNSw3ICsyMjUsNyBAQCB2b2lk
IEltYWdlTG9hZGVyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSopCiAKIHZvaWQgSW1h
Z2VMb2FkZXI6OnVwZGF0ZVJlbmRlcmVyKCkKIHsKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IG1fZWxlbWVudC0+cmVuZGVyZXIoKSkgeworICAgIGlmIChSZW5kZXJCb3hNb2RlbE9i
amVjdCogcmVuZGVyZXIgPSBtX2VsZW1lbnQtPnJlbmRlckJveE1vZGVsT2JqZWN0KCkpIHsKICAg
ICAgICAgaWYgKCFyZW5kZXJlci0+aXNJbWFnZSgpICYmICFyZW5kZXJlci0+aXNWaWRlbygpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBSZW5kZXJJbWFnZSogaW1hZ2VSZW5kZXJlciA9
IHRvUmVuZGVySW1hZ2UocmVuZGVyZXIpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvUGx1
Z2luRG9jdW1lbnQuY3BwIGIvV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwCmluZGV4
IGNjYTY4OTQ4OTllOWEwZDg3OGU0Yjc5ZmYxMDc0MjE5NTViZDk3MWQuLjc0ZTk0ZDU0MzFmNzZi
OWE0YTU0NGE1ZTJhNTI2MDE0NTc2MGJjYjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL1Bs
dWdpbkRvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1bWVudC5jcHAK
QEAgLTYzLDE0ICs2MywxNiBAQCBXaWRnZXQqIFBsdWdpbkRvY3VtZW50UGFyc2VyOjpwbHVnaW5X
aWRnZXRGcm9tRG9jdW1lbnQoRG9jdW1lbnQqIGRvYykKIHsKICAgICBBU1NFUlQoZG9jKTsKICAg
ICBSZWZQdHI8RWxlbWVudD4gYm9keSA9IGRvYy0+Ym9keSgpOwotICAgIGlmIChib2R5KSB7Ci0g
ICAgICAgIFJlZlB0cjxOb2RlPiBub2RlID0gYm9keS0+Zmlyc3RDaGlsZCgpOwotICAgICAgICBp
ZiAobm9kZSAmJiBub2RlLT5yZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+
cmVuZGVyZXIoKS0+aXNFbWJlZGRlZE9iamVjdCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0b1Jl
bmRlckVtYmVkZGVkT2JqZWN0KG5vZGUtPnJlbmRlcmVyKCkpLT53aWRnZXQoKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICBpZiAoIWJvZHkpCisgICAgICAgIHJldHVybiAw
OworICAgIFJlZlB0cjxOb2RlPiBub2RlID0gYm9keS0+Zmlyc3RDaGlsZCgpOworICAgIGlmICgh
bm9kZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRl
cmVyID0gbm9kZS0+cmVuZGVyQm94TW9kZWxPYmplY3QoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQocmVuZGVyZXItPmlzRW1iZWRkZWRPYmplY3Qo
KSk7CisgICAgcmV0dXJuIHRvUmVuZGVyRW1iZWRkZWRPYmplY3QocmVuZGVyZXIpLT53aWRnZXQo
KTsKIH0KIAogdm9pZCBQbHVnaW5Eb2N1bWVudFBhcnNlcjo6Y3JlYXRlRG9jdW1lbnRTdHJ1Y3R1
cmUoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwIGIvV2Vi
Q29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCmluZGV4IGU3ZGFmYTEwMGQxZjA5MDc2NGE3
MzE3Njg2YTBjNjBjNzU3MWViMTkuLjNmNjU5YTI4MzU3MWVmNGY3YTJmOWQ1YjRiNzdjZGU3Mjgw
OGU2ZDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcAorKysg
Yi9XZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAKQEAgLTI2OCwxMiArMjY4LDEyIEBA
IEZyYW1lKiBTdWJmcmFtZUxvYWRlcjo6bG9hZFN1YmZyYW1lKEhUTUxGcmFtZU93bmVyRWxlbWVu
dCogb3duZXJFbGVtZW50LCBjb25zdCBLCiAgICAgLy8gbG9hZHMsIHNvIHRoYXQgY2hlY2tDb21w
bGV0ZWQoKSBiZWxvdyB3b24ndCBiYWlsIGVhcmx5LikKICAgICAvLyBGSVhNRTogQ2FuIHdlIHJl
bW92ZSB0aGlzIGVudGlyZWx5PyBtX2lzQ29tcGxldGUgbm9ybWFsbHkgZ2V0cyBzZXQgdG8gZmFs
c2Ugd2hlbiBhIGxvYWQgaXMgY29tbWl0dGVkLgogICAgIGZyYW1lLT5sb2FkZXIoKS0+c3RhcnRl
ZCgpOwotICAgCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG93bmVyRWxlbWVudC0+cmVu
ZGVyZXIoKTsKKworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciA9IG93bmVyRWxl
bWVudC0+cmVuZGVyQm94TW9kZWxPYmplY3QoKTsKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFt
ZS0+dmlldygpOwogICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNXaWRnZXQoKSAmJiB2
aWV3KQogICAgICAgICB0b1JlbmRlcldpZGdldChyZW5kZXJlciktPnNldFdpZGdldCh2aWV3KTsK
LSAgICAKKwogICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jaGVja0NhbGxJbXBsaWNpdENsb3NlKCk7
CiAgICAgCiAgICAgLy8gU29tZSBsb2FkcyBhcmUgcGVyZm9ybWVkIHN5bmNocm9ub3VzbHkgKGUu
Zy4sIGFib3V0OmJsYW5rIGFuZCBsb2FkcwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0Nocm9t
ZS5jcHAgYi9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAppbmRleCBiZmYwMTAwMjU3YjE4ZmYzZjRl
ZmFkZmQ5NmNmMDFhNDg1YjFlOTgyLi44ZWQxOGQ5MTVkYzhkNzM3YTlkNmU2MGI4NmY1MzliODMy
MWE0YjcwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9XZWJDb3Jl
L3BhZ2UvQ2hyb21lLmNwcApAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwTG9hZERl
ZmVycmVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyQm94
TW9kZWxPYmplY3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlNj
cmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvcGFnZS9EcmFnQ29u
dHJvbGxlci5jcHAKaW5kZXggZDkzYTI1NmU5NmU1MGI0OTRhODQ1Y2UyYzI5Y2Q0YjQyOWFkNTlk
Yi4uYTY4NmQ3ZDQzZmZkMGI4ZDJmODgxYmVmZmU5MDk4YWJjZWUzYTI2MyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwCkBAIC01ODIsNyArNTgyLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6bWF5
U3RhcnREcmFnQXRFdmVudExvY2F0aW9uKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgSW50UG8K
IHN0YXRpYyBDYWNoZWRJbWFnZSogZ2V0Q2FjaGVkSW1hZ2UoRWxlbWVudCogZWxlbWVudCkKIHsK
ICAgICBBU1NFUlQoZWxlbWVudCk7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1l
bnQtPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyID0gZWxl
bWVudC0+cmVuZGVyQm94TW9kZWxPYmplY3QoKTsKICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5k
ZXJlci0+aXNJbWFnZSgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBSZW5kZXJJbWFnZSogaW1h
Z2UgPSB0b1JlbmRlckltYWdlKHJlbmRlcmVyKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwIGIvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggZTEw
YTNhMWM2ZDg0ZjVjM2ExYWEwNGUxM2VkY2QzMmYwMDA4YTFhYy4uZmM2OTc4ZDY3OGFiYjdmNWZh
MmM1OTkwN2U2NzkzYTMxMDE3ODhmZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTg3NCw5ICs4
NzQsMTIgQEAgSGl0VGVzdFJlc3VsdCBFdmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50
KGNvbnN0IEludFBvaW50JiBwb2ludCwgYm9vbCBhbGwKIAogICAgIHdoaWxlICh0cnVlKSB7CiAg
ICAgICAgIE5vZGUqIG4gPSByZXN1bHQuaW5uZXJOb2RlKCk7Ci0gICAgICAgIGlmICghcmVzdWx0
LmlzT3ZlcldpZGdldCgpIHx8ICFuIHx8ICFuLT5yZW5kZXJlcigpIHx8ICFuLT5yZW5kZXJlcigp
LT5pc1dpZGdldCgpKQorICAgICAgICBpZiAoIXJlc3VsdC5pc092ZXJXaWRnZXQoKSB8fCAhbikK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldCA9
IHRvUmVuZGVyV2lkZ2V0KG4tPnJlbmRlcmVyKCkpOworICAgICAgICBSZW5kZXJCb3hNb2RlbE9i
amVjdCogY3NzQm94ID0gbi0+cmVuZGVyQm94TW9kZWxPYmplY3QoKTsKKyAgICAgICAgaWYgKCFj
c3NCb3ggfHwgIWNzc0JveC0+aXNXaWRnZXQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldCA9IHRvUmVuZGVyV2lkZ2V0KGNzc0JveCk7CiAg
ICAgICAgIFdpZGdldCogd2lkZ2V0ID0gcmVuZGVyV2lkZ2V0LT53aWRnZXQoKTsKICAgICAgICAg
aWYgKCF3aWRnZXQgfHwgIXdpZGdldC0+aXNGcmFtZVZpZXcoKSkKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtOTc1LDIyICs5NzgsMjYgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnNldE1vdXNlUHJlc3NO
b2RlKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKICAgICBtX21vdXNlUHJlc3NOb2RlID0gbm9kZTsK
IH0KIAotYm9vbCBFdmVudEhhbmRsZXI6OnNjcm9sbE92ZXJmbG93KFNjcm9sbERpcmVjdGlvbiBk
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBOb2RlKiBzdGFydGluZ05v
ZGUpCitib29sIEV2ZW50SGFuZGxlcjo6c2Nyb2xsT3ZlcmZsb3coU2Nyb2xsRGlyZWN0aW9uIGRp
cmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIE5vZGUqIG5vZGUpCiB7Ci0g
ICAgTm9kZSogbm9kZSA9IHN0YXJ0aW5nTm9kZTsKLQotICAgIGlmICghbm9kZSkKKyAgICBpZiAo
IW5vZGUpIHsKICAgICAgICAgbm9kZSA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWROb2Rl
KCk7CisgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgIG5vZGUgPSBtX21vdXNlUHJlc3NO
b2RlLmdldCgpOworICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQogCi0gICAgaWYgKCFub2RlKQotICAgICAgICBub2RlID0gbV9tb3VzZVByZXNzTm9k
ZS5nZXQoKTsKLSAgICAKLSAgICBpZiAobm9kZSkgewotICAgICAgICBSZW5kZXJPYmplY3QqIHIg
PSBub2RlLT5yZW5kZXJlcigpOwotICAgICAgICBpZiAociAmJiAhci0+aXNMaXN0Qm94KCkgJiYg
ci0+ZW5jbG9zaW5nQm94KCktPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KSkgewotICAg
ICAgICAgICAgc2V0RnJhbWVXYXNTY3JvbGxlZEJ5VXNlcigpOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KKyAgICBSZW5kZXJPYmplY3QqIHIgPSBub2RlLT5yZW5kZXJlcigp
OworICAgIGlmICghcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHItPmlzQm94
TW9kZWxPYmplY3QoKSAmJiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHIpLT5pc0xpc3RCb3goKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHItPmVuY2xvc2luZ0JveCgpLT5zY3Jv
bGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSkpIHsKKyAgICAgICAgc2V0RnJhbWVXYXNTY3JvbGxl
ZEJ5VXNlcigpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gZmFs
c2U7CkBAIC0xMDMxLDcgKzEwMzgsNyBAQCBGcmFtZSogRXZlbnRIYW5kbGVyOjpzdWJmcmFtZUZv
clRhcmdldE5vZGUoTm9kZSogbm9kZSkKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAg
UmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyQm94TW9kZWxPYmpl
Y3QoKTsKICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNXaWRnZXQoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKQEAgLTEwNjUsNyArMTA3Miw3IEBAIEN1cnNvciBFdmVudEhhbmRsZXI6
OnNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCwg
U2NyCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUgPyBub2RlLT5yZW5kZXJlcigp
IDogMDsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlciA/IHJlbmRlcmVyLT5zdHls
ZSgpIDogMDsKIAotICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNGcmFtZVNldCgpKSB7
CisgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0JveE1vZGVsT2JqZWN0KCkgJiYgdG9S
ZW5kZXJCb3hNb2RlbE9iamVjdChyZW5kZXJlciktPmlzRnJhbWVTZXQoKSkgewogICAgICAgICBS
ZW5kZXJGcmFtZVNldCogZnJhbWVTZXRSZW5kZXJlciA9IHRvUmVuZGVyRnJhbWVTZXQocmVuZGVy
ZXIpOwogICAgICAgICBpZiAoZnJhbWVTZXRSZW5kZXJlci0+Y2FuUmVzaXplUm93KGV2ZW50Lmxv
Y2FsUG9pbnQoKSkpCiAgICAgICAgICAgICByZXR1cm4gcm93UmVzaXplQ3Vyc29yKCk7CkBAIC0x
OTUyLDggKzE5NTksOCBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVudChQbGF0
Zm9ybVdoZWVsRXZlbnQmIGUpCiAKICAgICBpZiAobm9kZSkgewogICAgICAgICAvLyBGaWd1cmUg
b3V0IHdoaWNoIHZpZXcgdG8gc2VuZCB0aGUgZXZlbnQgdG8uCi0gICAgICAgIFJlbmRlck9iamVj
dCogdGFyZ2V0ID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgCisgICAgICAgIFJlbmRlckJv
eE1vZGVsT2JqZWN0KiB0YXJnZXQgPSBub2RlLT5yZW5kZXJCb3hNb2RlbE9iamVjdCgpOworCiAg
ICAgICAgIGlmIChpc092ZXJXaWRnZXQgJiYgdGFyZ2V0ICYmIHRhcmdldC0+aXNXaWRnZXQoKSkg
ewogICAgICAgICAgICAgV2lkZ2V0KiB3aWRnZXQgPSB0b1JlbmRlcldpZGdldCh0YXJnZXQpLT53
aWRnZXQoKTsKICAgICAgICAgICAgIGlmICh3aWRnZXQgJiYgcGFzc1doZWVsRXZlbnRUb1dpZGdl
dChlLCB3aWRnZXQpKSB7CkBAIC0yNTI4LDcgKzI1MzUsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6
aGFuZGxlRHJhZyhjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCkKICAg
ICAgICAgICAgIGRyYWdTdGF0ZSgpLm1fZHJhZ1NyY0lzTGluayA9IG5vZGUgJiYgbm9kZS0+aXNM
aW5rKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG5vZGUgPSByZXN1bHQuaW5uZXJOb25T
aGFyZWROb2RlKCk7Ci0gICAgICAgICAgICBkcmFnU3RhdGUoKS5tX2RyYWdTcmNJc0ltYWdlID0g
bm9kZSAmJiBub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzSW1hZ2UoKTsK
KyAgICAgICAgICAgIGRyYWdTdGF0ZSgpLm1fZHJhZ1NyY0lzSW1hZ2UgPSBub2RlICYmIG5vZGUt
PnJlbmRlckJveE1vZGVsT2JqZWN0KCkgJiYgbm9kZS0+cmVuZGVyQm94TW9kZWxPYmplY3QoKS0+
aXNJbWFnZSgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBkcmFnU3RhdGUoKS5tX2RyYWdT
cmNJblNlbGVjdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5jb250YWlucyhtX21vdXNlRG93
blBvcyk7CiAgICAgICAgIH0gICAgICAgICAgICAgICAgCkBAIC0yNzY2LDcgKzI3NzMsNyBAQCB2
b2lkIEV2ZW50SGFuZGxlcjo6Y2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCkKIHsKICAgICBE
b2N1bWVudCogZCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgaWYgKE5vZGUqIG5vZGUgPSBk
LT5mb2N1c2VkTm9kZSgpKSB7Ci0gICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHIgPSBub2RlLT5y
ZW5kZXJlcigpKSB7CisgICAgICAgIGlmIChSZW5kZXJCb3hNb2RlbE9iamVjdCogciA9IG5vZGUt
PnJlbmRlckJveE1vZGVsT2JqZWN0KCkpIHsKICAgICAgICAgICAgIGlmIChyLT5pc1RleHRGaWVs
ZCgpKQogICAgICAgICAgICAgICAgIHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKHIpLT5j
YXBzTG9ja1N0YXRlTWF5SGF2ZUNoYW5nZWQoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wYWdlL0ZyYW1lLmNwcCBiL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggMDZjZGRi
MWYwMDMzM2MwMmJlYmExOWY1N2JmMTUwNGI2ZGZmYWJhNy4uOTg3ODU2ZWE0ZTU3NjU0ZTQwODM5
NTJjNDUxMDk2NWEzMTdkNDgyYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAor
KysgYi9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC01NTYsNyArNTU2LDcgQEAgc3RhdGljIGJv
b2wgaXNGcmFtZUVsZW1lbnQoY29uc3QgTm9kZSAqbikKIHsKICAgICBpZiAoIW4pCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gbi0+cmVuZGVyZXIo
KTsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIgPSBuLT5yZW5kZXJCb3hNb2Rl
bE9iamVjdCgpOwogICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc1dpZGdldCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgV2lkZ2V0KiB3aWRnZXQgPSB0b1JlbmRlcldpZGdl
dChyZW5kZXJlciktPndpZGdldCgpOwpAQCAtOTYxLDcgKzk2MSw3IEBAIFJlbmRlclBhcnQqIEZy
YW1lOjpvd25lclJlbmRlcmVyKCkgY29uc3QKICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93
bmVyRWxlbWVudCA9IG1fb3duZXJFbGVtZW50OwogICAgIGlmICghb3duZXJFbGVtZW50KQogICAg
ICAgICByZXR1cm4gMDsKLSAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IG93bmVyRWxlbWVudC0+
cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogb2JqZWN0ID0gb3duZXJFbGVt
ZW50LT5yZW5kZXJCb3hNb2RlbE9iamVjdCgpOwogICAgIGlmICghb2JqZWN0KQogICAgICAgICBy
ZXR1cm4gMDsKICAgICAvLyBGSVhNRTogSWYgPG9iamVjdD4gaXMgZXZlciBmaXhlZCB0byBkaXNh
c3NvY2lhdGUgaXRzZWxmIGZyb20gZnJhbWVzCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvbWFj
L0V2ZW50SGFuZGxlck1hYy5tbSBiL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1t
CmluZGV4IGJiNDY2ZGIxMWE2ZjRjZDdmM2MxMWM0NjdlNDI2OTZmYmFkMGFjMDMuLmJmNDRjOWFi
NmU4ZDYzZGRkMTYyODcxZjU3OTVlZjM2MWI5MzZiYjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFn
ZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCisrKyBiL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5k
bGVyTWFjLm1tCkBAIC0xNjgsMTEgKzE2OCwxMyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6Zm9jdXNE
b2N1bWVudFZpZXcoKQogCiBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2
ZW50VG9XaWRnZXQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQpCiB7
CisgICAgaWYgKCFldmVudC50YXJnZXROb2RlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAvLyBGaWd1cmUgb3V0IHdoaWNoIHZpZXcgdG8gc2VuZCB0aGUgZXZlbnQgdG8uCi0gICAgUmVu
ZGVyT2JqZWN0KiB0YXJnZXQgPSBldmVudC50YXJnZXROb2RlKCkgPyBldmVudC50YXJnZXROb2Rl
KCktPnJlbmRlcmVyKCkgOiAwOworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiB0YXJnZXQgPSAg
ZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJCb3hNb2RlbE9iamVjdCgpOwogICAgIGlmICghdGFy
Z2V0IHx8ICF0YXJnZXQtPmlzV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
KwogICAgIC8vIERvdWJsZS1jbGljayBldmVudHMgZG9uJ3QgZXhpc3QgaW4gQ29jb2EuIFNpbmNl
IHBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0IHdpbGwKICAgICAvLyBqdXN0IHBhc3Mg
Y3VycmVudEV2ZW50IGRvd24gdG8gdGhlIHdpZGdldCwgd2UgZG9uJ3Qgd2FudCB0byBjYWxsIGl0
IGZvciBldmVudHMgdGhhdAogICAgIC8vIGRvbid0IGNvcnJlc3BvbmQgdG8gQ29jb2EgZXZlbnRz
LiAgVGhlIG1vdXNlZG93bi91cHMgd2lsbCBoYXZlIGFscmVhZHkgYmVlbiBwYXNzZWQgb24gYXMK
QEAgLTM4NSw3ICszODcsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1N1YmZyYW1lRXZlbnRU
b1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2ZQogICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGV2ZW50LnRhcmdldE5vZGUoKTsKICAgICAgICAgICAgIGlmICghbm9kZSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAgIFJlbmRlckJveE1vZGVs
T2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlckJveE1vZGVsT2JqZWN0KCk7CiAgICAgICAg
ICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNXaWRnZXQoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBXaWRnZXQqIHdpZGdldCA9IHRvUmVuZGVy
V2lkZ2V0KHJlbmRlcmVyKS0+d2lkZ2V0KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvbWFj
L0ZyYW1lTWFjLm1tIGIvV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQppbmRleCBiYjExYWM5
MGFlMjhmNjI4MjVmMmJlY2UwZWU1NDgzNzZhMWI5MDZlLi4yMmZhYjE0NzU1YmNhMzEwMjQ2NjQy
NjQzZTY5OGIxNGRmMDkzYzg4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFj
Lm1tCisrKyBiL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KQEAgLTQ3NSw3ICs0NzUsNyBA
QCBOU1dyaXRpbmdEaXJlY3Rpb24gRnJhbWU6OmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0
aW9uU3RhcnQoKSBjb25zdAogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAKLSAgICBpZiAoIXJlbmRlcmVyLT5pc0Jsb2NrRmxvdygpKSB7CisgICAgaWYgKCFyZW5k
ZXJlci0+aXNCb3hNb2RlbE9iamVjdCgpIHx8ICF0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRl
cmVyKS0+aXNCbG9ja0Zsb3coKSkgewogICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5jb250
YWluaW5nQmxvY2soKTsKICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFj
Lm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQppbmRleCBiYmE3Y2Fj
NTI0ZGZmZjQ5MDc0N2JjZTEyY2NiNGZjYjg3OWRiMzkwLi42NWNlNjk1MjU4MDljYjZjZjE4ZTZh
OGEyZDViZmNjMGUzYWFlNjQ3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0
ZWJvYXJkTWFjLm1tCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0K
QEAgLTI5Nyw4ICsyOTcsOCBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9k
ZSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKQogICAgIE5TVVJMICpjb2Nv
YVVSTCA9IHVybDsKICAgICBBU1NFUlQoY29jb2FVUkwpOwogCi0gICAgQVNTRVJUKG5vZGUtPnJl
bmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNJbWFnZSgpKTsKLSAgICBSZW5kZXJJbWFn
ZSogcmVuZGVyZXIgPSB0b1JlbmRlckltYWdlKG5vZGUtPnJlbmRlcmVyKCkpOworICAgIEFTU0VS
VChub2RlLT5yZW5kZXJCb3hNb2RlbE9iamVjdCgpICYmIG5vZGUtPnJlbmRlckJveE1vZGVsT2Jq
ZWN0KCktPmlzSW1hZ2UoKSk7CisgICAgUmVuZGVySW1hZ2UqIHJlbmRlcmVyID0gdG9SZW5kZXJJ
bWFnZShub2RlLT5yZW5kZXJCb3hNb2RlbE9iamVjdCgpKTsKICAgICBDYWNoZWRJbWFnZSogY2Fj
aGVkSW1hZ2UgPSByZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKTsKICAgICBpZiAoIWNhY2hlZEltYWdl
IHx8IGNhY2hlZEltYWdlLT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXggZGQ5NmUwZWExYmQ1NjNkNDAwYTVlZWIwZTky
YjZiMzRlYWE3NTNjNy4uNDk1NmMyZGI1Mjg0OTFmMzY5ZjA1ZjM3YzM4NTM4MDQzZTY1NmFlYyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKQEAgLTI0NCw5ICsyNDQsOSBAQCBJbWFn
ZSogSGl0VGVzdFJlc3VsdDo6aW1hZ2UoKSBjb25zdAogICAgIGlmICghbV9pbm5lck5vblNoYXJl
ZE5vZGUpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBtX2lubmVyTm9uU2hhcmVkTm9kZS0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogcmVuZGVyZXIgPSBtX2lubmVyTm9uU2hhcmVkTm9kZS0+cmVuZGVyQm94TW9kZWxP
YmplY3QoKTsKICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzSW1hZ2UoKSkgewotICAg
ICAgICBSZW5kZXJJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpSZW5kZXJJbWFn
ZSo+KHJlbmRlcmVyKTsKKyAgICAgICAgUmVuZGVySW1hZ2UqIGltYWdlID0gdG9SZW5kZXJJbWFn
ZShyZW5kZXJlcik7CiAgICAgICAgIGlmIChpbWFnZS0+Y2FjaGVkSW1hZ2UoKSAmJiAhaW1hZ2Ut
PmNhY2hlZEltYWdlKCktPmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgICAgIHJldHVybiBpbWFn
ZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2UoKTsKICAgICB9CkBAIC0yNjYsNyArMjY2LDggQEAgS1VS
TCBIaXRUZXN0UmVzdWx0OjphYnNvbHV0ZUltYWdlVVJMKCkgY29uc3QKICAgICBpZiAoIShtX2lu
bmVyTm9uU2hhcmVkTm9kZSAmJiBtX2lubmVyTm9uU2hhcmVkTm9kZS0+ZG9jdW1lbnQoKSkpCiAg
ICAgICAgIHJldHVybiBLVVJMKCk7CiAKLSAgICBpZiAoIShtX2lubmVyTm9uU2hhcmVkTm9kZS0+
cmVuZGVyZXIoKSAmJiBtX2lubmVyTm9uU2hhcmVkTm9kZS0+cmVuZGVyZXIoKS0+aXNJbWFnZSgp
KSkKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIgPSBtX2lubmVyTm9uU2hhcmVk
Tm9kZS0+cmVuZGVyQm94TW9kZWxPYmplY3QoKTsKKyAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5k
ZXJlci0+aXNJbWFnZSgpKQogICAgICAgICByZXR1cm4gS1VSTCgpOwogCiAgICAgQXRvbWljU3Ry
aW5nIHVybFN0cmluZzsKQEAgLTI5NSw3ICsyOTYsOCBAQCBLVVJMIEhpdFRlc3RSZXN1bHQ6OmFi
c29sdXRlTWVkaWFVUkwoKSBjb25zdAogICAgIGlmICghKG1faW5uZXJOb25TaGFyZWROb2RlICYm
IG1faW5uZXJOb25TaGFyZWROb2RlLT5kb2N1bWVudCgpKSkKICAgICAgICAgcmV0dXJuIEtVUkwo
KTsKIAotICAgIGlmICghKG1faW5uZXJOb25TaGFyZWROb2RlLT5yZW5kZXJlcigpICYmIG1faW5u
ZXJOb25TaGFyZWROb2RlLT5yZW5kZXJlcigpLT5pc01lZGlhKCkpKQorICAgIFJlbmRlckJveE1v
ZGVsT2JqZWN0KiByZW5kZXJlciA9IG1faW5uZXJOb25TaGFyZWROb2RlLT5yZW5kZXJCb3hNb2Rl
bE9iamVjdCgpOworICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc01lZGlhKCkpCiAg
ICAgICAgIHJldHVybiBLVVJMKCk7CiAKICAgICBBdG9taWNTdHJpbmcgdXJsU3RyaW5nOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQXBwbGV0LmggYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJBcHBsZXQuaAppbmRleCAzNDM0MjFlYjBmMTUxOWNjNGE3YzQ1NjA2MmNiODUz
YTMwYTAxNTk0Li4xMjBkZmJhOTE0Yzk0YTk5NzFjODJlNjA3MDAyYTkyY2NmY2FhNjUyIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJBcHBsZXQuaAorKysgYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJBcHBsZXQuaApAQCAtNDgsOCArNDgsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICBpbmxpbmUgUmVuZGVyQXBwbGV0KiB0b1JlbmRlckFwcGxldChSZW5kZXJPYmpl
Y3QqIG9iamVjdCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNB
cHBsZXQoKSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJBcHBsZXQqPihvYmpl
Y3QpOworICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2Rl
bE9iamVjdChvYmplY3QpOworICAgICAgICBBU1NFUlQoIWJveCB8fCBib3gtPmlzQXBwbGV0KCkp
OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyQXBwbGV0Kj4oYm94KTsKICAgICB9
CiAKICAgICAvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNh
c3QuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggOTU1MGViZjY1NDA3M2Q2NTE1NjUw
MjZkZTEzMjgwZTFiMTA2NGUxYy4uZGZhMDI4NjIwMzg0Y2U5NGZhMDIyMTMxMzg1OTA5NjY0M2Fm
YThjZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMzg2LDE2ICszODYsMTkgQEAg
dm9pZCBSZW5kZXJCbG9jazo6YWRkQ2hpbGRUb0Fub255bW91c0NvbHVtbkJsb2NrcyhSZW5kZXJP
YmplY3QqIG5ld0NoaWxkLCBSZW5kZXIKIAogUmVuZGVyQmxvY2sqIFJlbmRlckJsb2NrOjpjb250
YWluaW5nQ29sdW1uc0Jsb2NrKGJvb2wgYWxsb3dBbm9ueW1vdXNDb2x1bW5CbG9jaykKIHsKLSAg
ICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IHRoaXM7IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJl
bnQoKSkgewotICAgICAgICBpZiAoIWN1cnItPmlzUmVuZGVyQmxvY2soKSB8fCBjdXJyLT5pc0Zs
b2F0aW5nT3JQb3NpdGlvbmVkKCkgfHwgY3Vyci0+aXNUYWJsZUNlbGwoKSB8fCBjdXJyLT5pc1Jv
b3QoKSB8fCBjdXJyLT5pc1JlbmRlclZpZXcoKSB8fCBjdXJyLT5oYXNPdmVyZmxvd0NsaXAoKQot
ICAgICAgICAgICAgfHwgY3Vyci0+aXNJbmxpbmVCbG9ja09ySW5saW5lVGFibGUoKSkKKyAgICBm
b3IgKFJlbmRlck9iamVjdCogb2JqZWN0ID0gdGhpczsgb2JqZWN0OyBvYmplY3QgPSBvYmplY3Qt
PnBhcmVudCgpKSB7CisgICAgICAgIGlmICghb2JqZWN0LT5pc1JlbmRlckJsb2NrKCkpCiAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgCi0gICAgICAgIFJlbmRlckJsb2NrKiBjdXJyQmxv
Y2sgPSB0b1JlbmRlckJsb2NrKGN1cnIpOwotICAgICAgICBpZiAoY3VyckJsb2NrLT5zdHlsZSgp
LT5zcGVjaWZpZXNDb2x1bW5zKCkgJiYgKGFsbG93QW5vbnltb3VzQ29sdW1uQmxvY2sgfHwgIWN1
cnJCbG9jay0+aXNBbm9ueW1vdXNDb2x1bW5zQmxvY2soKSkpCi0gICAgICAgICAgICByZXR1cm4g
Y3VyckJsb2NrOwotICAgICAgICAgICAgCi0gICAgICAgIGlmIChjdXJyQmxvY2stPmlzQW5vbnlt
b3VzQ29sdW1uU3BhbkJsb2NrKCkpCisgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHRvUmVu
ZGVyQmxvY2sob2JqZWN0KTsKKworICAgICAgICBpZiAoYmxvY2stPmlzRmxvYXRpbmdPclBvc2l0
aW9uZWQoKSB8fCBibG9jay0+aXNUYWJsZUNlbGwoKSB8fCBibG9jay0+aXNSb290KCkgfHwgYmxv
Y2stPmlzUmVuZGVyVmlldygpIHx8IGJsb2NrLT5oYXNPdmVyZmxvd0NsaXAoKQorICAgICAgICAg
ICAgfHwgYmxvY2stPmlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKworICAgICAgICBpZiAoYmxvY2stPnN0eWxlKCktPnNwZWNpZmllc0NvbHVtbnMo
KSAmJiAoYWxsb3dBbm9ueW1vdXNDb2x1bW5CbG9jayB8fCAhYmxvY2stPmlzQW5vbnltb3VzQ29s
dW1uc0Jsb2NrKCkpKQorICAgICAgICAgICAgcmV0dXJuIGJsb2NrOworCisgICAgICAgIGlmIChi
bG9jay0+aXNBbm9ueW1vdXNDb2x1bW5TcGFuQmxvY2soKSkKICAgICAgICAgICAgIHJldHVybiAw
OwogICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTQ2NzMsNyArNDY3Niw4IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OmNhbGNJbmxpbmVQcmVmV2lkdGhzKCkKICAgICAgICAgICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgY2xlYXJQcmV2aW91c0Zsb2F0ID0gZmFsc2U7CiAKLSAgICAgICAg
ICAgICAgICBib29sIGNhbkJyZWFrUmVwbGFjZWRFbGVtZW50ID0gIWNoaWxkLT5pc0ltYWdlKCkg
fHwgYWxsb3dJbWFnZXNUb0JyZWFrOworICAgICAgICAgICAgICAgIGJvb2wgY2hpbGRJc0ltYWdl
ID0gY2hpbGQtPmlzQm94TW9kZWxPYmplY3QoKSAmJiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNo
aWxkKS0+aXNJbWFnZSgpOworICAgICAgICAgICAgICAgIGJvb2wgY2FuQnJlYWtSZXBsYWNlZEVs
ZW1lbnQgPSAhY2hpbGRJc0ltYWdlIHx8IGFsbG93SW1hZ2VzVG9CcmVhazsKICAgICAgICAgICAg
ICAgICBpZiAoKGNhbkJyZWFrUmVwbGFjZWRFbGVtZW50ICYmIChhdXRvV3JhcCB8fCBvbGRBdXRv
V3JhcCkpIHx8IGNsZWFyUHJldmlvdXNGbG9hdCkgewogICAgICAgICAgICAgICAgICAgICBtX21p
blByZWZXaWR0aCA9IG1heChpbmxpbmVNaW4sIG1fbWluUHJlZldpZHRoKTsKICAgICAgICAgICAg
ICAgICAgICAgaW5saW5lTWluID0gMDsKQEAgLTUxMDUsMTUgKzUxMDksMjIgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6dXBkYXRlRmlyc3RMZXR0ZXIoKQogCiAgICAgLy8gRHJpbGwgaW50byBpbmxpbmVz
IGxvb2tpbmcgZm9yIG91ciBmaXJzdCB0ZXh0IGNoaWxkLgogICAgIFJlbmRlck9iamVjdCogY3Vy
ckNoaWxkID0gZmlyc3RMZXR0ZXJCbG9jay0+Zmlyc3RDaGlsZCgpOwotICAgIHdoaWxlIChjdXJy
Q2hpbGQgJiYgKCghY3VyckNoaWxkLT5pc1JlcGxhY2VkKCkgJiYgIWN1cnJDaGlsZC0+aXNSZW5k
ZXJCdXR0b24oKSAmJiAhY3VyckNoaWxkLT5pc01lbnVMaXN0KCkpIHx8IGN1cnJDaGlsZC0+aXNG
bG9hdGluZ09yUG9zaXRpb25lZCgpKSAmJiAhY3VyckNoaWxkLT5pc1RleHQoKSkgeworICAgIHdo
aWxlIChjdXJyQ2hpbGQgJiYgIWN1cnJDaGlsZC0+aXNUZXh0KCkpIHsKICAgICAgICAgaWYgKGN1
cnJDaGlsZC0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKSB7CiAgICAgICAgICAgICBpZiAoY3Vy
ckNoaWxkLT5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBGSVJTVF9MRVRURVIpIHsKICAgICAgICAg
ICAgICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICBjdXJyQ2hpbGQgPSBjdXJy
Q2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY3VyckNo
aWxkID0gY3VyckNoaWxkLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChjdXJyQ2hpbGQtPmlzQm94TW9kZWxPYmplY3QoKSkgewor
ICAgICAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNzc0JveCA9IHRvUmVuZGVyQm94TW9k
ZWxPYmplY3QoY3VyckNoaWxkKTsKKyAgICAgICAgICAgIGlmIChjc3NCb3gtPmlzUmVwbGFjZWQo
KSB8fCBjc3NCb3gtPmlzUmVuZGVyQnV0dG9uKCkgfHwgY3NzQm94LT5pc01lbnVMaXN0KCkpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY3VyckNoaWxkID0gY3Vy
ckNoaWxkLT5maXJzdENoaWxkKCk7CiAgICAgfQogCiAgICAgLy8gR2V0IGxpc3QgbWFya2VycyBv
dXQgb2YgdGhlIHdheS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCmluZGV4IDk1ZDBjMjlhMGI4OTM1
YzcwYTAxY2I4OGZkMjQ3Mjg5NWZhNWJkYjEuLjdkMmQxMzJjNDJkMTIzNTJiZTRlNzA1ODFhMTg1
NzEyOTQxYjdjYTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgK
KysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtNTgzLDE0ICs1ODMsMTYg
QEAgcHJpdmF0ZToKIAogaW5saW5lIFJlbmRlckJsb2NrKiB0b1JlbmRlckJsb2NrKFJlbmRlck9i
amVjdCogb2JqZWN0KQogeyAKLSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzUmVuZGVy
QmxvY2soKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4ob2JqZWN0KTsK
KyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChv
YmplY3QpOworICAgIEFTU0VSVCghYm94IHx8IGJveC0+aXNSZW5kZXJCbG9jaygpKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihib3gpOwogfQogCiBpbmxpbmUgY29uc3Qg
UmVuZGVyQmxvY2sqIHRvUmVuZGVyQmxvY2soY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7
IAotICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNSZW5kZXJCbG9jaygpKTsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyQmxvY2sqPihvYmplY3QpOworICAgIGNvbnN0
IFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG9iamVj
dCk7CisgICAgQVNTRVJUKCFib3ggfHwgYm94LT5pc1JlbmRlckJsb2NrKCkpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJCbG9jayo+KGJveCk7CiB9CiAKIC8vIFRoaXMgd2ls
bCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCmluZGV4IDJjZTNjNTQxMmY3MWFiY2UzZmZm
MTg5NjJkYTE5NTQ2MDBlNjg2MGIuLjBiNGQ1NDVmODkxYWUyZDg5NzVlOTFiNWZjZDBjNmNmODEy
ZTEzZDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91
dC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApA
QCAtNjYsMTEgKzY2LDE0IEBAIHN0YXRpYyBpbnQgaW5saW5lV2lkdGgoUmVuZGVyT2JqZWN0KiBj
aGlsZCwgYm9vbCBzdGFydCA9IHRydWUsIGJvb2wgZW5kID0gdHJ1ZSkKICAgICB1bnNpZ25lZCBs
aW5lRGVwdGggPSAxOwogICAgIGludCBleHRyYVdpZHRoID0gMDsKICAgICBSZW5kZXJPYmplY3Qq
IHBhcmVudCA9IGNoaWxkLT5wYXJlbnQoKTsKLSAgICB3aGlsZSAocGFyZW50LT5pc0lubGluZSgp
ICYmICFwYXJlbnQtPmlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkgJiYgbGluZURlcHRoKysg
PCBjTWF4TGluZURlcHRoKSB7CisgICAgd2hpbGUgKHBhcmVudC0+aXNJbmxpbmUoKSkgeworICAg
ICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogcGFyZW50Qm94ID0gdG9SZW5kZXJCb3hNb2RlbE9i
amVjdChwYXJlbnQpOworICAgICAgICBpZiAocGFyZW50Qm94LT5pc0lubGluZUJsb2NrT3JJbmxp
bmVUYWJsZSgpIHx8IGxpbmVEZXB0aCsrID49IGNNYXhMaW5lRGVwdGgpCisgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgaWYgKHN0YXJ0ICYmICFjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpCi0g
ICAgICAgICAgICBleHRyYVdpZHRoICs9IGdldEJvcmRlclBhZGRpbmdNYXJnaW4odG9SZW5kZXJC
b3hNb2RlbE9iamVjdChwYXJlbnQpLCBmYWxzZSk7CisgICAgICAgICAgICBleHRyYVdpZHRoICs9
IGdldEJvcmRlclBhZGRpbmdNYXJnaW4ocGFyZW50Qm94LCBmYWxzZSk7CiAgICAgICAgIGlmIChl
bmQgJiYgIWNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAgZXh0cmFXaWR0aCArPSBn
ZXRCb3JkZXJQYWRkaW5nTWFyZ2luKHRvUmVuZGVyQm94TW9kZWxPYmplY3QocGFyZW50KSwgdHJ1
ZSk7CisgICAgICAgICAgICBleHRyYVdpZHRoICs9IGdldEJvcmRlclBhZGRpbmdNYXJnaW4ocGFy
ZW50Qm94LCB0cnVlKTsKICAgICAgICAgY2hpbGQgPSBwYXJlbnQ7CiAgICAgICAgIHBhcmVudCA9
IGNoaWxkLT5wYXJlbnQoKTsKICAgICB9CkBAIC0xNTIxLDcgKzE1MjQsNyBAQCBJbmxpbmVJdGVy
YXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lQnJlYWsoSW5saW5lQmlkaVJlc29sdmVyJiBy
ZXNvbHZlciwgYm9vbAogICAgICAgICAgICAgUmVuZGVyQm94KiByZXBsYWNlZEJveCA9IHRvUmVu
ZGVyQm94KG8pOwogCiAgICAgICAgICAgICAvLyBCcmVhayBvbiByZXBsYWNlZCBlbGVtZW50cyBp
ZiBlaXRoZXIgaGFzIG5vcm1hbCB3aGl0ZS1zcGFjZS4KLSAgICAgICAgICAgIGlmICgoYXV0b1dy
YXAgfHwgUmVuZGVyU3R5bGU6OmF1dG9XcmFwKGxhc3RXUykpICYmICghby0+aXNJbWFnZSgpIHx8
IGFsbG93SW1hZ2VzVG9CcmVhaykpIHsKKyAgICAgICAgICAgIGlmICgoYXV0b1dyYXAgfHwgUmVu
ZGVyU3R5bGU6OmF1dG9XcmFwKGxhc3RXUykpICYmICghcmVwbGFjZWRCb3gtPmlzSW1hZ2UoKSB8
fCBhbGxvd0ltYWdlc1RvQnJlYWspKSB7CiAgICAgICAgICAgICAgICAgdyArPSB0bXBXOwogICAg
ICAgICAgICAgICAgIHRtcFcgPSAwOwogICAgICAgICAgICAgICAgIGxCcmVhay5vYmogPSBvOwpA
QCAtMTg4OCw3ICsxODkxLDcgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0
TGluZUJyZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGJvb2wKIAogICAgICAgICBp
ZiAoIW8tPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkgewogICAgICAgICAgICAgbGFzdCA9IG87
Ci0gICAgICAgICAgICBpZiAobGFzdC0+aXNSZXBsYWNlZCgpICYmIGF1dG9XcmFwICYmICghbGFz
dC0+aXNJbWFnZSgpIHx8IGFsbG93SW1hZ2VzVG9CcmVhaykgJiYgKCFsYXN0LT5pc0xpc3RNYXJr
ZXIoKSB8fCB0b1JlbmRlckxpc3RNYXJrZXIobGFzdCktPmlzSW5zaWRlKCkpKSB7CisgICAgICAg
ICAgICBpZiAobGFzdC0+aXNSZXBsYWNlZCgpICYmIGF1dG9XcmFwICYmICghdG9SZW5kZXJCb3hN
b2RlbE9iamVjdChsYXN0KS0+aXNJbWFnZSgpIHx8IGFsbG93SW1hZ2VzVG9CcmVhaykgJiYgKCFs
YXN0LT5pc0xpc3RNYXJrZXIoKSB8fCB0b1JlbmRlckxpc3RNYXJrZXIobGFzdCktPmlzSW5zaWRl
KCkpKSB7CiAgICAgICAgICAgICAgICAgdyArPSB0bXBXOwogICAgICAgICAgICAgICAgIHRtcFcg
PSAwOwogICAgICAgICAgICAgICAgIGxCcmVhay5vYmogPSBuZXh0OwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmgKaW5kZXggNDlkNWYzZGQzNzI0ZTE4OTRhYjM4YWFmNmYy
ZDUwM2YzNWZiYmM0YS4uZDNiMDEyNmI1NzkyMGUwYjRhMmRmZmU0YTY2NGJhZWI0NGVkZmE1NCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAorKysg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCkBAIC00MCw3ICs0MCwz
NyBAQCBjbGFzcyBSZW5kZXJCb3hNb2RlbE9iamVjdCA6IHB1YmxpYyBSZW5kZXJPYmplY3Qgewog
cHVibGljOgogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KE5vZGUqKTsKICAgICB2aXJ0dWFsIH5S
ZW5kZXJCb3hNb2RlbE9iamVjdCgpOwotICAgIAorCisgICAgdmlydHVhbCBib29sIGlzQXBwbGV0
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFbWJlZGRlZE9i
amVjdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzRmllbGRz
ZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGVVcGxv
YWRDb250cm9sKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNG
cmFtZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzRnJhbWVT
ZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0ltYWdlKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmVCbG9ja09y
SW5saW5lVGFibGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBp
c0xpc3RCb3goKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0xp
c3RJdGVtKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNNZWRp
YSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzTWVudUxpc3Qo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorI2lmIEVOQUJMRShNRVRFUl9UQUcpCisgICAgdmly
dHVhbCBib29sIGlzTWV0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCisjaWYg
RU5BQkxFKFBST0dSRVNTX1RBRykKKyAgICB2aXJ0dWFsIGJvb2wgaXNQcm9ncmVzcygpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJCdXR0
b24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcklG
cmFtZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUmVuZGVy
SW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRl
clBhcnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1JlcGxp
Y2EoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NsaWRlcigp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzVGV4dEFyZWEoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1RleHRGaWVsZCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzVmlkZW8oKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1dpZGdldCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQ2FudmFzKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKwogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CiAKICAgICBpbnQgcmVsYXRp
dmVQb3NpdGlvbk9mZnNldFgoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJ1dHRvbi5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmgKaW5kZXgg
MWZjNWViNjIwMWE2NWE1ODlkODM0NzI4ZjI5MGI5YWY5N2VlNzk5NC4uYWM2Zjg5NGJkMTllMWRi
OGYwYTEzYTdiZmQ2MjZlODk5M2Q1NjE3OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQnV0dG9uLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmgKQEAg
LTc1LDE1ICs3NSwxNyBAQCBwcml2YXRlOgogfTsKIAogaW5saW5lIFJlbmRlckJ1dHRvbiogdG9S
ZW5kZXJCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17IAotICAgIEFTU0VSVCghb2JqZWN0
IHx8IG9iamVjdC0+aXNSZW5kZXJCdXR0b24oKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJl
bmRlckJ1dHRvbio+KG9iamVjdCk7Cit7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9
IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlQoIWJveCB8fCBib3gt
PmlzUmVuZGVyQnV0dG9uKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJCdXR0b24q
Pihib3gpOwogfQogCiBpbmxpbmUgY29uc3QgUmVuZGVyQnV0dG9uKiB0b1JlbmRlckJ1dHRvbihj
b25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsgCi0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2Jq
ZWN0LT5pc1JlbmRlckJ1dHRvbigpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVu
ZGVyQnV0dG9uKj4ob2JqZWN0KTsKK3sKKyAgICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCog
Ym94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChvYmplY3QpOworICAgIEFTU0VSVCghYm94IHx8
IGJveC0+aXNSZW5kZXJCdXR0b24oKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJl
bmRlckJ1dHRvbio+KGJveCk7CiB9CiAKIC8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcg
YW4gdW5uZWNlc3NhcnkgY2FzdC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckNvdW50ZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKaW5kZXgg
M2NiOWEwNzhmMDcyNDE0ZDMyMjJhYWZlZjlmN2NjMjc5MTZmNTBiZC4uOTlkZmIwMzI2NjczZDFi
NGY0ODY4MTRiOGExMjA2MDYwNjhmMzkyOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQ291bnRlci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5j
cHAKQEAgLTgyLDcgKzgyLDcgQEAgc3RhdGljIGJvb2wgcGxhbkNvdW50ZXIoUmVuZGVyT2JqZWN0
KiBvYmplY3QsIGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmllciwgYm8KICAgICB9CiAKICAg
ICBpZiAoaWRlbnRpZmllciA9PSAibGlzdC1pdGVtIikgewotICAgICAgICBpZiAob2JqZWN0LT5p
c0xpc3RJdGVtKCkpIHsKKyAgICAgICAgaWYgKG9iamVjdC0+aXNCb3hNb2RlbE9iamVjdCgpICYm
IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0KS0+aXNMaXN0SXRlbSgpKSB7CiAgICAgICAg
ICAgICBpZiAodG9SZW5kZXJMaXN0SXRlbShvYmplY3QpLT5oYXNFeHBsaWNpdFZhbHVlKCkpIHsK
ICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvUmVuZGVyTGlzdEl0ZW0ob2JqZWN0KS0+ZXhwbGlj
aXRWYWx1ZSgpOwogICAgICAgICAgICAgICAgIGlzUmVzZXQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZpZWxkc2V0LmgKaW5kZXggZGY2YTFkYWYzNDliODk0ZWI5ZjI1NjdiOWI5ODAwNDQ1Nzkw
MWNjOS4uZGVjYWM2YjAxZGUxYWJmNmU3NmZhNjA3MWE5NWE1MDI1ZmI1ODBiYyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuaAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGaWVsZHNldC5oCkBAIC01NCw4ICs1NCw5IEBAIHByaXZhdGU6CiAKIGlubGlu
ZSBSZW5kZXJGaWVsZHNldCogdG9SZW5kZXJGaWVsZHNldChSZW5kZXJPYmplY3QqIG9iamVjdCkK
IHsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzRmllbGRzZXQoKSk7Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PFJlbmRlckZpZWxkc2V0Kj4ob2JqZWN0KTsKKyAgICBSZW5kZXJCb3hN
b2RlbE9iamVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChvYmplY3QpOworICAgIEFT
U0VSVCghYm94IHx8IGJveC0+aXNGaWVsZHNldCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UmVuZGVyRmllbGRzZXQqPihib3gpOwogfQogCiAvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRv
aW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVw
bG9hZENvbnRyb2wuaAppbmRleCAyMDViYTQ3YjEwYTk1NjJhNmVjOThjMDA4ZDBmMDg0YTRmM2Zk
NTJjLi5iOTVhOGI0ODkyYTEwMjc1Njk3MTcxZmI1Njk0NDlmMGJlNTJiMzFiIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCisrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmgKQEAgLTc4LDE0ICs3OCwxNiBA
QCBwcml2YXRlOgogCiBpbmxpbmUgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wqIHRvUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2woUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgQVNTRVJUKCFvYmpl
Y3QgfHwgb2JqZWN0LT5pc0ZpbGVVcGxvYWRDb250cm9sKCkpOwotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCo+KG9iamVjdCk7CisgICAgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIGJveCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NF
UlQoIWJveCB8fCBib3gtPmlzRmlsZVVwbG9hZENvbnRyb2woKSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFJlbmRlckZpbGVVcGxvYWRDb250cm9sKj4oYm94KTsKIH0KIAogaW5saW5lIGNvbnN0
IFJlbmRlckZpbGVVcGxvYWRDb250cm9sKiB0b1JlbmRlckZpbGVVcGxvYWRDb250cm9sKGNvbnN0
IFJlbmRlck9iamVjdCogb2JqZWN0KQogewotICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+
aXNGaWxlVXBsb2FkQ29udHJvbCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVu
ZGVyRmlsZVVwbG9hZENvbnRyb2wqPihvYmplY3QpOworICAgIGNvbnN0IFJlbmRlckJveE1vZGVs
T2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG9iamVjdCk7CisgICAgQVNTRVJU
KCFib3ggfHwgYm94LT5pc0ZpbGVVcGxvYWRDb250cm9sKCkpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxjb25zdCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCo+KGJveCk7CiB9CiAKIC8vIFRoaXMg
d2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGcmFtZS5oCmluZGV4IGM4OTVhMGMzMDExNWIxYTJiZjU2NmIwODc4OTcxOThlZGJhODllOGYu
LmFjYTJkMjA4MTkyNDNlNzczMzllN2E5MjBiYzMxODdlZmVlMTdmOTQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRnJhbWUuaApAQCAtNDUsOCArNDUsOSBAQCBwcml2YXRlOgogCiBpbmxpbmUgUmVuZGVyRnJh
bWUqIHRvUmVuZGVyRnJhbWUoUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgQVNTRVJUKCFv
YmplY3QgfHwgb2JqZWN0LT5pc0ZyYW1lKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5k
ZXJGcmFtZSo+KG9iamVjdCk7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHRvUmVu
ZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlQoIWJveCB8fCBib3gtPmlzRnJh
bWUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckZyYW1lKj4oYm94KTsKIH0KIAog
Ly8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0LgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCmluZGV4IDUyYzRjZGQyY2M1MTMxYmRlYTU1M2Fh
YzA0NzE0YWM1NzVlM2QyZmMuLjQyMGU4OWE3ODBlNTg5OTZkNmY1NWZhZTFkMGRkNjEwZjJmZTc2
MTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAorKysg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKQEAgLTQwNiw4ICs0MDYsOCBA
QCB2b2lkIFJlbmRlckZyYW1lU2V0Ojpjb21wdXRlRWRnZUluZm8oKQogICAgIG1fcm93cy5tX2Fs
bG93Qm9yZGVyLmZpbGwoZmFsc2UpOwogICAgIG1fY29scy5tX3ByZXZlbnRSZXNpemUuZmlsbChm
cmFtZVNldCgpLT5ub1Jlc2l6ZSgpKTsgICAgCiAgICAgbV9jb2xzLm1fYWxsb3dCb3JkZXIuZmls
bChmYWxzZSk7Ci0gICAgCi0gICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsK
KworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBjaGlsZCA9IHRvUmVuZGVyQm94TW9kZWxPYmpl
Y3QoZmlyc3RDaGlsZCgpKTsKICAgICBpZiAoIWNoaWxkKQogICAgICAgICByZXR1cm47CiAKQEAg
LTQyMSw3ICs0MjEsNyBAQCB2b2lkIFJlbmRlckZyYW1lU2V0Ojpjb21wdXRlRWRnZUluZm8oKQog
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGVkZ2VJbmZvID0gdG9SZW5kZXJGcmFt
ZShjaGlsZCktPmVkZ2VJbmZvKCk7CiAgICAgICAgICAgICBmaWxsRnJvbUVkZ2VJbmZvKGVkZ2VJ
bmZvLCByLCBjKTsKLSAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7Cisg
ICAgICAgICAgICBjaGlsZCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QoY2hpbGQtPm5leHRTaWJs
aW5nKCkpOwogICAgICAgICAgICAgaWYgKCFjaGlsZCkKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KQEAgLTQ1Nyw3ICs0NTcsNyBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpsYXlv
dXQoKQogICAgIGlmIChkb0Z1bGxSZXBhaW50KQogICAgICAgICBvbGRCb3VuZHMgPSBhYnNvbHV0
ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKIAotICAgIGlmICghcGFyZW50KCktPmlzRnJhbWVTZXQo
KSAmJiAhZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSkgeworICAgIGlmICghdG9SZW5kZXJCb3hNb2Rl
bE9iamVjdChwYXJlbnQoKSktPmlzRnJhbWVTZXQoKSAmJiAhZG9jdW1lbnQoKS0+cHJpbnRpbmco
KSkgewogICAgICAgICBzZXRXaWR0aCh2aWV3KCktPnZpZXdXaWR0aCgpKTsKICAgICAgICAgc2V0
SGVpZ2h0KHZpZXcoKS0+dmlld0hlaWdodCgpKTsKICAgICB9CkBAIC03MTEsNyArNzExLDcgQEAg
dm9pZCBSZW5kZXJGcmFtZVNldDo6c2V0SXNSZXNpemluZyhib29sIGlzUmVzaXppbmcpCiB7CiAg
ICAgbV9pc1Jlc2l6aW5nID0gaXNSZXNpemluZzsKICAgICBmb3IgKFJlbmRlck9iamVjdCogYW5j
ZXN0b3IgPSBwYXJlbnQoKTsgYW5jZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudCgp
KSB7Ci0gICAgICAgIGlmIChhbmNlc3Rvci0+aXNGcmFtZVNldCgpKQorICAgICAgICBpZiAoYW5j
ZXN0b3ItPmlzQm94TW9kZWxPYmplY3QoKSAmJiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGFuY2Vz
dG9yKS0+aXNGcmFtZVNldCgpKQogICAgICAgICAgICAgdG9SZW5kZXJGcmFtZVNldChhbmNlc3Rv
ciktPm1faXNDaGlsZFJlc2l6aW5nID0gaXNSZXNpemluZzsKICAgICB9CiAgICAgaWYgKEZyYW1l
KiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpCkBAIC03ODEsNyArNzgxLDEwIEBAIGludCBSZW5kZXJG
cmFtZVNldDo6aGl0VGVzdFNwbGl0KGNvbnN0IEdyaWRBeGlzJiBheGlzLCBpbnQgcG9zaXRpb24p
IGNvbnN0CiAKIGJvb2wgUmVuZGVyRnJhbWVTZXQ6OmlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVj
dCogY2hpbGQsIFJlbmRlclN0eWxlKikgY29uc3QKIHsKLSAgICByZXR1cm4gY2hpbGQtPmlzRnJh
bWUoKSB8fCBjaGlsZC0+aXNGcmFtZVNldCgpOworICAgIGlmICghY2hpbGQtPmlzQm94TW9kZWxP
YmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0
KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNoaWxkKTsKKyAgICByZXR1cm4gYm94LT5p
c0ZyYW1lKCkgfHwgYm94LT5pc0ZyYW1lU2V0KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmggYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5oCmluZGV4IGQwYWIzNDZiZTkwMjM2YjE4MDEy
MDkwOGM2ZjgwMDE2YTI3YWU2MmUuLjIwYzQ5MTBlN2FjZmRkZWE1YjViOGY5OGY3YmZhNTY3NzVi
M2U1ZjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmgKKysr
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuaApAQCAtMTI5LDggKzEyOSw5IEBA
IHByaXZhdGU6CiAKIGlubGluZSBSZW5kZXJGcmFtZVNldCogdG9SZW5kZXJGcmFtZVNldChSZW5k
ZXJPYmplY3QqIG9iamVjdCkKIHsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzRnJh
bWVTZXQoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckZyYW1lU2V0Kj4ob2JqZWN0
KTsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVj
dChvYmplY3QpOworICAgIEFTU0VSVCghYm94IHx8IGJveC0+aXNGcmFtZVNldCgpKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyRnJhbWVTZXQqPihib3gpOwogfQogCiAvLyBUaGlzIHdp
bGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJRnJhbWUuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cklGcmFtZS5oCmluZGV4IGFiNjU5YTRjZWMzOGQ2N2E1NmExNTJlODM0MDI4MjFjZThhNTEwNTIu
LjhjNmE5NDk1NzM4NTBjNDEwN2RkNTQzZTIyZGZjZGE3YTVmOThjNTUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklGcmFtZS5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlcklGcmFtZS5oCkBAIC01NywxNCArNTcsMTYgQEAgcHJpdmF0ZToKIAogaW5saW5lIFJlbmRl
cklGcmFtZSogdG9SZW5kZXJJRnJhbWUoUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgQVNT
RVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1JlbmRlcklGcmFtZSgpKTsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8UmVuZGVySUZyYW1lKj4ob2JqZWN0KTsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVj
dCogYm94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChvYmplY3QpOworICAgIEFTU0VSVCghYm94
IHx8IGJveC0+aXNSZW5kZXJJRnJhbWUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRl
cklGcmFtZSo+KGJveCk7CiB9CiAKIGlubGluZSBjb25zdCBSZW5kZXJJRnJhbWUqIHRvUmVuZGVy
SUZyYW1lKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQogewotICAgIEFTU0VSVCghb2JqZWN0
IHx8IG9iamVjdC0+aXNSZW5kZXJJRnJhbWUoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0IFJlbmRlcklGcmFtZSo+KG9iamVjdCk7CisgICAgY29uc3QgUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIGJveCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlQoIWJv
eCB8fCBib3gtPmlzUmVuZGVySUZyYW1lKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25z
dCBSZW5kZXJJRnJhbWUqPihib3gpOwogfQogCiAvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRv
aW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbWFnZS5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAppbmRleCBiODlh
NjUyNDlkOTBkNDFjNzBjMjY1NWYzNDM4ZTRlZjZkMGQ1ZTkxLi43NmIzOTNkOWEwOGVmMmMzYTEy
ZTNkNmFkMGUzNmQ4M2RlOGFlYWEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbWFnZS5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmgKQEAgLTEwOSwx
NCArMTA5LDE2IEBAIHByaXZhdGU6CiAKIGlubGluZSBSZW5kZXJJbWFnZSogdG9SZW5kZXJJbWFn
ZShSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsgCi0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0
LT5pc1JlbmRlckltYWdlKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+
KG9iamVjdCk7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHRvUmVuZGVyQm94TW9k
ZWxPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlQoIWJveCB8fCBib3gtPmlzUmVuZGVySW1hZ2Uo
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckltYWdlKj4oYm94KTsKIH0KIAogaW5s
aW5lIGNvbnN0IFJlbmRlckltYWdlKiB0b1JlbmRlckltYWdlKGNvbnN0IFJlbmRlck9iamVjdCog
b2JqZWN0KQogeyAKLSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzUmVuZGVySW1hZ2Uo
KSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlckltYWdlKj4ob2JqZWN0KTsK
KyAgICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2RlbE9i
amVjdChvYmplY3QpOworICAgIEFTU0VSVCghYm94IHx8IGJveC0+aXNSZW5kZXJJbWFnZSgpKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVySW1hZ2UqPihib3gpOwogfQogCiAv
LyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaCBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcklubGluZS5oCmluZGV4IDcxYThhODkxYjEwMjg5YTA3NDZiOWIyYTZkYjcxZDFj
MTk1ZjhlZmIuLjYwNWZmMDM0NTRmOTJjOGZiZjFkZTZiNTUxMDBiMWI5NzcwNmJjODYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcklubGluZS5oCkBAIC0xNTksMTUgKzE1OSwxNyBAQCBwcml2YXRlOgogfTsK
IAogaW5saW5lIFJlbmRlcklubGluZSogdG9SZW5kZXJJbmxpbmUoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QpCi17IAotICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNSZW5kZXJJbmxpbmUoKSk7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlcklubGluZSo+KG9iamVjdCk7Cit7CisgICAg
UmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0
KTsKKyAgICBBU1NFUlQoIWJveCB8fCBib3gtPmlzUmVuZGVySW5saW5lKCkpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxSZW5kZXJJbmxpbmUqPihib3gpOwogfQogCiBpbmxpbmUgY29uc3QgUmVu
ZGVySW5saW5lKiB0b1JlbmRlcklubGluZShjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsg
Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1JlbmRlcklubGluZSgpKTsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVySW5saW5lKj4ob2JqZWN0KTsKK3sKKyAgICBj
b25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChv
YmplY3QpOworICAgIEFTU0VSVCghYm94IHx8IGJveC0+aXNSZW5kZXJJbmxpbmUoKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlcklubGluZSo+KGJveCk7CiB9CiAKIC8vIFRo
aXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDBlNTkzM2U0NWE4Mzk2NTFiMTM4
YzUwNjhmNTRlNGRjOGZhOWNmZTcuLjc5ZmE0NmUxMTI1MGE4NjdmNDU1NGI2MWQwMmNiOGE0NDI1
ZjhmNDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtNjYs
NyArNjYsNyBAQCBzdGF0aWMgYm9vbCBoYXNCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZChjb25z
dCBSZW5kZXJPYmplY3QqKTsKIHN0YXRpYyBib29sIGhhc0JveERlY29yYXRpb25zT3JCYWNrZ3Jv
dW5kSW1hZ2UoY29uc3QgUmVuZGVyU3R5bGUqKTsKIHN0YXRpYyBJbnRSZWN0IGNsaXBCb3goUmVu
ZGVyQm94KiByZW5kZXJlcik7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpczNEQ2FudmFzKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIpCitzdGF0aWMgaW5saW5lIGJvb2wgaXMzRENhbnZhcyhSZW5kZXJC
b3hNb2RlbE9iamVjdCogcmVuZGVyZXIpCiB7CiAjaWYgRU5BQkxFKDNEX0NBTlZBUykgICAgCiAg
ICAgaWYgKHJlbmRlcmVyLT5pc0NhbnZhcygpKQpAQCAtNzY2LDcgKzc2Niw3IEBAIGJvb2wgUmVu
ZGVyTGF5ZXJCYWNraW5nOjpjb250YWluc1BhaW50ZWRDb250ZW50KCkgY29uc3QKIC8vIHRoYXQg
cmVxdWlyZSBwYWludGluZy4gRGlyZWN0IGNvbXBvc2l0aW5nIHNhdmVzIGJhY2tpbmcgc3RvcmUu
CiBib29sIFJlbmRlckxheWVyQmFja2luZzo6aXNEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZSgpIGNv
bnN0CiB7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QgPSByZW5kZXJlcigpOworICAg
IFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJPYmplY3QgPSByZW5kZXJlcigpOwogICAgIHJl
dHVybiByZW5kZXJPYmplY3QtPmlzSW1hZ2UoKSAmJiAhaGFzQm94RGVjb3JhdGlvbnNPckJhY2tn
cm91bmQocmVuZGVyT2JqZWN0KSAmJiAhcmVuZGVyT2JqZWN0LT5oYXNDbGlwKCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCmluZGV4IDc3OThkZmIz
OWI1M2Y4ZjQ4NzlhZGRkZTgzZmIwNWIyNWUzOTUzMTcuLjk2NjMxOWVjOTQwY2FhNGVkMDFiZjU1
OTlkZjdkN2ZlNzdjNWU4Y2MgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQ29tcG9zaXRvci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcApAQCAtMTAzMiw3ICsxMDMyLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnNob3VsZFByb3BhZ2F0ZUNvbXBvc2l0aW5nVG9FbmNsb3NpbmdJRnJhbWUoKSBjb25zdAog
ICAgIC8vIGlzIHRvIGhhdmUgdGhlIHBhcmVudCBkb2N1bWVudCBiZWNvbWUgY29tcG9zaXRlZCB0
b28uIEhvd2V2ZXIsIHRoaXMgY2FuIGNhdXNlIHByb2JsZW1zIG9uIHBsYXRmb3JtcyB0aGF0CiAg
ICAgLy8gdXNlIG5hdGl2ZSB2aWV3cyBmb3IgZnJhbWVzIChsaWtlIE1hYyksIHNvIGRpc2FibGUg
dGhhdCBiZWhhdmlvciBvbiB0aG9zZSBwbGF0Zm9ybXMgZm9yIG5vdy4KICAgICBIVE1MRnJhbWVP
d25lckVsZW1lbnQqIG93bmVyRWxlbWVudCA9IGVuY2xvc2luZ0lGcmFtZUVsZW1lbnQoKTsKLSAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gb3duZXJFbGVtZW50ID8gb3duZXJFbGVtZW50LT5y
ZW5kZXJlcigpIDogMDsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIgPSBvd25l
ckVsZW1lbnQgPyBvd25lckVsZW1lbnQtPnJlbmRlckJveE1vZGVsT2JqZWN0KCkgOiAwOwogICAg
IGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc1JlbmRlcklGcmFtZSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKQEAgLTEwODQsMTEgKzEwODQsMTEgQEAgYm9vbCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6Om5lZWRzVG9CZUNvbXBvc2l0ZWQoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKSBj
b25zdAogLy8gc3RhdGljCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21w
b3NpdGluZ0xheWVyKGNvbnN0IFJlbmRlckxheWVyKiBsYXllcikgY29uc3QKIHsKLSAgICBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gbGF5ZXItPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIHJlbmRlcmVyID0gbGF5ZXItPnJlbmRlcmVyKCk7CiAgICAgLy8gVGhlIGNvbXBv
c2l0aW5nIHN0YXRlIG9mIGEgcmVmbGVjdGlvbiBzaG91bGQgbWF0Y2ggdGhhdCBvZiBpdHMgcmVm
bGVjdGVkIGxheWVyLgogICAgIGlmIChsYXllci0+aXNSZWZsZWN0aW9uKCkpIHsKLSAgICAgICAg
cmVuZGVyZXIgPSByZW5kZXJlci0+cGFyZW50KCk7IC8vIFRoZSBSZW5kZXJSZXBsaWNhJ3MgcGFy
ZW50IGlzIHRoZSBvYmplY3QgYmVpbmcgcmVmbGVjdGVkLgotICAgICAgICBsYXllciA9IHRvUmVu
ZGVyQm94TW9kZWxPYmplY3QocmVuZGVyZXIpLT5sYXllcigpOworICAgICAgICByZW5kZXJlciA9
IHRvUmVuZGVyQm94TW9kZWxPYmplY3QocmVuZGVyZXItPnBhcmVudCgpKTsgLy8gVGhlIFJlbmRl
clJlcGxpY2EncyBwYXJlbnQgaXMgdGhlIG9iamVjdCBiZWluZyByZWZsZWN0ZWQuCisgICAgICAg
IGxheWVyID0gcmVuZGVyZXItPmxheWVyKCk7CiAgICAgfQogICAgIC8vIFRoZSByb290IGxheWVy
IGFsd2F5cyBoYXMgYSBjb21wb3NpdGluZyBsYXllciwgYnV0IGl0IG1heSBub3QgaGF2ZSBiYWNr
aW5nLgogICAgIHJldHVybiByZXF1aXJlc0NvbXBvc2l0aW5nRm9yVHJhbnNmb3JtKHJlbmRlcmVy
KQpAQCAtMTE1MCw3ICsxMTUwLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNsaXBz
Q29tcG9zaXRpbmdEZXNjZW5kYW50cyhjb25zdCBSZW5kZXJMYXllciogbGF5ZXIKICAgICAgICAg
ICAgKGxheWVyLT5yZW5kZXJlcigpLT5oYXNPdmVyZmxvd0NsaXAoKSB8fCBsYXllci0+cmVuZGVy
ZXIoKS0+aGFzQ2xpcCgpKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVp
cmVzQ29tcG9zaXRpbmdGb3JUcmFuc2Zvcm0oUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgY29uc3QK
K2Jvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yVHJhbnNm
b3JtKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlcikgY29uc3QKIHsKICAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICAvLyBOb3RlIHRoYXQgd2UgYXNr
IHRoZSByZW5kZXJlciBpZiBpdCBoYXMgYSB0cmFuc2Zvcm0sIGJlY2F1c2UgdGhlIHN0eWxlIG1h
eSBoYXZlIHRyYW5zZm9ybXMsCkBAIC0xMTU4LDcgKzExNTgsNyBAQCBib29sIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclRyYW5zZm9ybShSZW5kZXJPYmplY3Qq
IHJlbmRlcgogICAgIHJldHVybiByZW5kZXJlci0+aGFzVHJhbnNmb3JtKCkgJiYgKHN0eWxlLT50
cmFuc2Zvcm0oKS5oYXMzRE9wZXJhdGlvbigpIHx8IHN0eWxlLT50cmFuc2Zvcm1TdHlsZTNEKCkg
PT0gVHJhbnNmb3JtU3R5bGUzRFByZXNlcnZlM0QgfHwgc3R5bGUtPmhhc1BlcnNwZWN0aXZlKCkp
OwogfQogCi1ib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0Zv
clZpZGVvKFJlbmRlck9iamVjdCogcmVuZGVyZXIpIGNvbnN0Citib29sIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclZpZGVvKFJlbmRlckJveE1vZGVsT2JqZWN0
KiByZW5kZXJlcikgY29uc3QKIHsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgaWYgKHJlbmRlcmVy
LT5pc1ZpZGVvKCkpIHsKQEAgLTExODQsNyArMTE4NCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yVmlkZW8oUmVuZGVyT2JqZWN0KiByZW5kZXJl
cikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpy
ZXF1aXJlc0NvbXBvc2l0aW5nRm9yQ2FudmFzKFJlbmRlck9iamVjdCogcmVuZGVyZXIpIGNvbnN0
Citib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckNhbnZh
cyhSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIpIGNvbnN0CiB7CiAgICAgaWYgKHJlbmRl
cmVyLT5pc0NhbnZhcygpKSB7CiAgICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBz
dGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KHJlbmRlcmVyLT5ub2RlKCkpOwpAQCAtMTE5
Myw3ICsxMTkzLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9z
aXRpbmdGb3JDYW52YXMoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9y
UGx1Z2luKFJlbmRlck9iamVjdCogcmVuZGVyZXIpIGNvbnN0Citib29sIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBsdWdpbihSZW5kZXJCb3hNb2RlbE9iamVj
dCogcmVuZGVyZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFyZW5kZXJlci0+aXNFbWJlZGRlZE9iamVj
dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjEzLDcgKzEyMTMsNyBAQCBib29sIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBsdWdpbihSZW5kZXJP
YmplY3QqIHJlbmRlcmVyKQogICAgIHJldHVybiBjb250ZW50Qm94LmhlaWdodCgpICogY29udGVu
dEJveC53aWR0aCgpID4gMTsKIH0KIAotYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVp
cmVzQ29tcG9zaXRpbmdGb3JJRnJhbWUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgY29uc3QKK2Jv
b2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9ySUZyYW1lKFJl
bmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlcikgY29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVy
LT5pc1JlbmRlcklGcmFtZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjM4LDcgKzEy
MzgsNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0Zv
cklGcmFtZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgIHJldHVybiBjb250ZW50Qm94Lmhl
aWdodCgpICogY29udGVudEJveC53aWR0aCgpID4gMDsKIH0KIAotYm9vbCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JBbmltYXRpb24oUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcikgY29uc3QKK2Jvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBv
c2l0aW5nRm9yQW5pbWF0aW9uKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlcikgY29uc3QK
IHsKICAgICBpZiAoQW5pbWF0aW9uQ29udHJvbGxlciogYW5pbUNvbnRyb2xsZXIgPSByZW5kZXJl
ci0+YW5pbWF0aW9uKCkpIHsKICAgICAgICAgcmV0dXJuIChhbmltQ29udHJvbGxlci0+aXNSdW5u
aW5nQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJlciwgQ1NTUHJvcGVydHlPcGFjaXR5KSAmJiBp
bkNvbXBvc2l0aW5nTW9kZSgpKQpAQCAtMTI0Nyw3ICsxMjQ3LDcgQEAgYm9vbCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JBbmltYXRpb24oUmVuZGVyT2JqZWN0
KiByZW5kZXIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nV2hlbkRlc2NlbmRhbnRzQXJlQ29tcG9zaXRpbmcoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcikgY29uc3QKK2Jvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpy
ZXF1aXJlc0NvbXBvc2l0aW5nV2hlbkRlc2NlbmRhbnRzQXJlQ29tcG9zaXRpbmcoUmVuZGVyQm94
TW9kZWxPYmplY3QqIHJlbmRlcmVyKSBjb25zdAogewogICAgIHJldHVybiByZW5kZXJlci0+aGFz
VHJhbnNmb3JtKCkgfHwgcmVuZGVyZXItPmlzVHJhbnNwYXJlbnQoKSB8fCByZW5kZXJlci0+aGFz
TWFzaygpIHx8IHJlbmRlcmVyLT5oYXNSZWZsZWN0aW9uKCk7CiB9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5oCmluZGV4IDBjZTgwYTk4NmU1NjYzMzQ0MWIyZTcyNTU5
ZmMwMzNlZTU4ZDAxY2MuLjNiZGU2N2QyYjI0NmI1ZDhkYTM3MTFiYjI0YWE4YzZlYmVmOTc1ZmEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCisr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCkBAIC0yMDYsMTMg
KzIwNiwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgbm90aWZ5SUZyYW1lc09mQ29tcG9zaXRpbmdD
aGFuZ2UoKTsKIAogICAgIC8vIFdoZXRoZXIgYSBydW5uaW5nIHRyYW5zaXRpb24gb3IgYW5pbWF0
aW9uIGVuZm9yY2VzIHRoZSBuZWVkIGZvciBhIGNvbXBvc2l0aW5nIGxheWVyLgotICAgIGJvb2wg
cmVxdWlyZXNDb21wb3NpdGluZ0ZvckFuaW1hdGlvbihSZW5kZXJPYmplY3QqKSBjb25zdDsKLSAg
ICBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JUcmFuc2Zvcm0oUmVuZGVyT2JqZWN0KikgY29u
c3Q7Ci0gICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yVmlkZW8oUmVuZGVyT2JqZWN0Kikg
Y29uc3Q7Ci0gICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yQ2FudmFzKFJlbmRlck9iamVj
dCopIGNvbnN0OwotICAgIGJvb2wgcmVxdWlyZXNDb21wb3NpdGluZ0ZvclBsdWdpbihSZW5kZXJP
YmplY3QqKSBjb25zdDsKLSAgICBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JJRnJhbWUoUmVu
ZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5nV2hlbkRlc2Nl
bmRhbnRzQXJlQ29tcG9zaXRpbmcoUmVuZGVyT2JqZWN0KikgY29uc3Q7CisgICAgYm9vbCByZXF1
aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9uKFJlbmRlckJveE1vZGVsT2JqZWN0KikgY29uc3Q7
CisgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yVHJhbnNmb3JtKFJlbmRlckJveE1vZGVs
T2JqZWN0KikgY29uc3Q7CisgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yVmlkZW8oUmVu
ZGVyQm94TW9kZWxPYmplY3QqKSBjb25zdDsKKyAgICBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdG
b3JDYW52YXMoUmVuZGVyQm94TW9kZWxPYmplY3QqKSBjb25zdDsKKyAgICBib29sIHJlcXVpcmVz
Q29tcG9zaXRpbmdGb3JQbHVnaW4oUmVuZGVyQm94TW9kZWxPYmplY3QqKSBjb25zdDsKKyAgICBi
b29sIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JJRnJhbWUoUmVuZGVyQm94TW9kZWxPYmplY3QqKSBj
b25zdDsKKyAgICBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdXaGVuRGVzY2VuZGFudHNBcmVDb21w
b3NpdGluZyhSZW5kZXJCb3hNb2RlbE9iamVjdCopIGNvbnN0OwogCiAgICAgYm9vbCByZXF1aXJl
c1Njcm9sbExheWVyKFJvb3RMYXllckF0dGFjaG1lbnQpIGNvbnN0OwogICAgIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5oCmluZGV4IGFhZmI4N2U5NTc2YTk0ODVkMTQyNTAxODMxMTU0NzhhODRi
Y2VlNWMuLmE3NjMzZmM3ZTVkYWY1OGFiNGY3YjNhNDhiNWZmN2NiNjA4ZTM1MjQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmgKQEAgLTEzMSw4ICsxMzEsOSBAQCBwcml2YXRlOgogCiBpbmxp
bmUgUmVuZGVyTGlzdEJveCogdG9SZW5kZXJMaXN0Qm94KFJlbmRlck9iamVjdCogb2JqZWN0KQog
eyAKLSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzTGlzdEJveCgpKTsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdEJveCo+KG9iamVjdCk7CisgICAgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIGJveCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NF
UlQoIWJveCB8fCBib3gtPmlzTGlzdEJveCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVu
ZGVyTGlzdEJveCo+KGJveCk7CiB9CiAKIC8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcg
YW4gdW5uZWNlc3NhcnkgY2FzdC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RJdGVtLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAppbmRl
eCBmODYxNDY3NTQ2OGQwMjRmNmYyOWVhNDgyMTc3ZGJhNjAxY2VmMzU1Li43NGRhN2NlYjY0YmZl
MWYzOTQ4YTBkNjRkZTZlN2ExYzUxNmMzNDE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0SXRlbS5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0
ZW0uY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAgc3RhdGljIE5vZGUqIGVuY2xvc2luZ0xpc3QoY29u
c3QgUmVuZGVyTGlzdEl0ZW0qIGxpc3RJdGVtKQogc3RhdGljIFJlbmRlckxpc3RJdGVtKiBwcmV2
aW91c0xpc3RJdGVtKE5vZGUqIGxpc3QsIGNvbnN0IFJlbmRlckxpc3RJdGVtKiBpdGVtKQogewog
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0ZW0tPnByZXZpb3VzSW5QcmVPcmRl
cigpOyByZW5kZXJlciAhPSBsaXN0LT5yZW5kZXJlcigpOyByZW5kZXJlciA9IHJlbmRlcmVyLT5w
cmV2aW91c0luUHJlT3JkZXIoKSkgewotICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc0xpc3RJdGVt
KCkpCisgICAgICAgIGlmICghcmVuZGVyZXItPmlzQm94TW9kZWxPYmplY3QoKSB8fCAhdG9SZW5k
ZXJCb3hNb2RlbE9iamVjdChyZW5kZXJlciktPmlzTGlzdEl0ZW0oKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBOb2RlKiBvdGhlckxpc3QgPSBlbmNsb3NpbmdMaXN0KHRvUmVuZGVy
TGlzdEl0ZW0ocmVuZGVyZXIpKTsKICAgICAgICAgLy8gVGhpcyBpdGVtIGlzIHBhcnQgb2Ygb3Vy
IGN1cnJlbnQgbGlzdCwgc28gaXQncyB3aGF0IHdlJ3JlIGxvb2tpbmcgZm9yLgpAQCAtMzIxLDE1
ICszMjEsMTkgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6ZXhwbGljaXRWYWx1ZUNoYW5nZWQoKQog
ICAgIFJlbmRlck9iamVjdCogbGlzdFJlbmRlcmVyID0gMDsKICAgICBpZiAobGlzdE5vZGUpCiAg
ICAgICAgIGxpc3RSZW5kZXJlciA9IGxpc3ROb2RlLT5yZW5kZXJlcigpOwotICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXM7IHJlbmRlcmVyOyByZW5kZXJlciA9IHJlbmRlcmVy
LT5uZXh0SW5QcmVPcmRlcihsaXN0UmVuZGVyZXIpKQotICAgICAgICBpZiAocmVuZGVyZXItPmlz
TGlzdEl0ZW0oKSkgewotICAgICAgICAgICAgUmVuZGVyTGlzdEl0ZW0qIGl0ZW0gPSB0b1JlbmRl
ckxpc3RJdGVtKHJlbmRlcmVyKTsKLSAgICAgICAgICAgIGlmICghaXRlbS0+bV9oYXNFeHBsaWNp
dFZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgaXRlbS0+bV9pc1ZhbHVlVXBUb0RhdGUgPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICBpZiAoUmVuZGVyTGlzdE1hcmtlciogbWFya2VyID0gaXRlbS0+
bV9tYXJrZXIpCi0gICAgICAgICAgICAgICAgICAgIG1hcmtlci0+c2V0TmVlZHNMYXlvdXRBbmRQ
cmVmV2lkdGhzUmVjYWxjKCk7Ci0gICAgICAgICAgICB9CisgICAgZm9yIChSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gdGhpczsgcmVuZGVyZXI7IHJlbmRlcmVyID0gcmVuZGVyZXItPm5leHRJblBy
ZU9yZGVyKGxpc3RSZW5kZXJlcikpIHsKKyAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNCb3hNb2Rl
bE9iamVjdCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFJlbmRlckJveE1vZGVs
T2JqZWN0KiBjc3NCb3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVyKTsKKyAgICAg
ICAgaWYgKCFjc3NCb3gtPmlzTGlzdEl0ZW0oKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBSZW5kZXJMaXN0SXRlbSogaXRlbSA9IHRvUmVuZGVyTGlzdEl0ZW0oY3NzQm94KTsKKyAg
ICAgICAgaWYgKCFpdGVtLT5tX2hhc0V4cGxpY2l0VmFsdWUpIHsKKyAgICAgICAgICAgIGl0ZW0t
Pm1faXNWYWx1ZVVwVG9EYXRlID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoUmVuZGVyTGlzdE1h
cmtlciogbWFya2VyID0gaXRlbS0+bV9tYXJrZXIpCisgICAgICAgICAgICAgICAgbWFya2VyLT5z
ZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgfQorICAgIH0KIH0K
IAogdm9pZCBSZW5kZXJMaXN0SXRlbTo6c2V0RXhwbGljaXRWYWx1ZShpbnQgdmFsdWUpCkBAIC0z
NzEsNyArMzc1LDcgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6dXBkYXRlTGlzdE1hcmtlck51bWJl
cnMoKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoY2hp
bGQtPmlzTGlzdEl0ZW0oKSkgeworICAgICAgICBpZiAoY2hpbGQtPmlzQm94TW9kZWxPYmplY3Qo
KSAmJiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNoaWxkKS0+aXNMaXN0SXRlbSgpKSB7CiAgICAg
ICAgICAgICBSZW5kZXJMaXN0SXRlbSogaXRlbSA9IHRvUmVuZGVyTGlzdEl0ZW0oY2hpbGQpOwog
CiAgICAgICAgICAgICBpZiAoIWl0ZW0tPm1faXNWYWx1ZVVwVG9EYXRlKSB7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5oIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEl0ZW0uaAppbmRleCAxM2Q4MWYyMWRhM2I2YzM0ZjkwNTEwZDVkMTcxNDVhNDc5
ZDE4NGZjLi5mOGYyMDJkMzA4MDViYjNkNDJjMTU0MzFlMjgzZjlmNzM1MzY4MjllIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5oCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RJdGVtLmgKQEAgLTgzLDggKzgzLDkgQEAgcHJpdmF0ZToKIAogaW5s
aW5lIFJlbmRlckxpc3RJdGVtKiB0b1JlbmRlckxpc3RJdGVtKFJlbmRlck9iamVjdCogb2JqZWN0
KQogewotICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNMaXN0SXRlbSgpKTsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdEl0ZW0qPihvYmplY3QpOworICAgIFJlbmRlckJv
eE1vZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG9iamVjdCk7CisgICAg
QVNTRVJUKCFib3ggfHwgYm94LT5pc0xpc3RJdGVtKCkpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxSZW5kZXJMaXN0SXRlbSo+KGJveCk7CiB9CiAKIC8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUg
ZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1lZGlhLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5oCmluZGV4IDRj
OTgwYjU4ZWI3YWY2ZDUyMzM5NjEyMDY4OWFiZjMwZjA4ZjY5OTguLjRkYjI2M2QzNjQ0NWJkYjA5
YjRkZjMxYzZjOTdiMTYwMTEwMTJlNDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck1lZGlhLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuaApAQCAtMTU0
LDggKzE1NCw5IEBAIHByaXZhdGU6CiAKIGlubGluZSBSZW5kZXJNZWRpYSogdG9SZW5kZXJNZWRp
YShSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3Qt
PmlzTWVkaWEoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlck1lZGlhKj4ob2JqZWN0
KTsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVj
dChvYmplY3QpOworICAgIEFTU0VSVCghYm94IHx8IGJveC0+aXNNZWRpYSgpKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UmVuZGVyTWVkaWEqPihib3gpOwogfQogCiAvLyBUaGlzIHdpbGwgY2F0
Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVu
dUxpc3QuaAppbmRleCA1MTJmYTliNTc5YWZmYTNiMTYxYTk4MWNiMzIyMGFhYzE5YTU4OTU5Li5h
ZTAxMTNjNDAwYWRjZDExODJlOTBiNTE3ZTA3YTZlMTRiZjQyZjY3IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck1lbnVMaXN0LmgKQEAgLTEzOCw4ICsxMzgsOSBAQCBwcml2YXRlOgogCiBpbmxpbmUgUmVu
ZGVyTWVudUxpc3QqIHRvUmVuZGVyTWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7IAot
ICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNNZW51TGlzdCgpKTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8UmVuZGVyTWVudUxpc3QqPihvYmplY3QpOworICAgIFJlbmRlckJveE1vZGVs
T2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG9iamVjdCk7CisgICAgQVNTRVJU
KCFib3ggfHwgYm94LT5pc01lbnVMaXN0KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5k
ZXJNZW51TGlzdCo+KGJveCk7CiB9CiAKIC8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcg
YW4gdW5uZWNlc3NhcnkgY2FzdC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1ldGVyLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZXRlci5oCmluZGV4IDBlNzNlNDBh
ODJjYzM1YmMwODczMTc3MGM5ZmRlMjcwOWM2MTVmZjMuLjNhNmI0YTM4Nzg5NTI2ZmQyZDI1ZTgw
ZWQ2ZmEwZmNmNmIyN2Q0ZTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1l
dGVyLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWV0ZXIuaApAQCAtNjAsOCArNjAs
OSBAQCBwcml2YXRlOgogCiBpbmxpbmUgUmVuZGVyTWV0ZXIqIHRvUmVuZGVyTWV0ZXIoUmVuZGVy
T2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc01ldGVy
KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJNZXRlcio+KG9iamVjdCk7CisgICAg
UmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0
KTsKKyAgICBBU1NFUlQoIWJveCB8fCBib3gtPmlzTWV0ZXIoKSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFJlbmRlck1ldGVyKj4oYm94KTsKIH0KIAogLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9u
ZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAK
aW5kZXggMjdlYWJjZGYwZDU1ZmRhODU4MzIzMjEyYjc1ZWU0ZDFhMjY0NDlhYy4uN2JmNTYwZmUz
YTJkMDFkNDIwNjA5ODRjOThjYmE2ODA5YjFjNGM1MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCkBAIC0yNDksNiArMjQ5LDcgQEAgYm9vbCBSZW5kZXJPYmplY3Q6OmlzQm9keSgpIGNv
bnN0CiAgICAgcmV0dXJuIG5vZGUoKSAmJiBub2RlKCktPmhhc1RhZ05hbWUoYm9keVRhZyk7CiB9
CiAKKy8vIEZJWE1FOiBSZW5kZXJIUiBzaG91bGQgYmUgaXRzIG93biBjbGFzcy4KIGJvb2wgUmVu
ZGVyT2JqZWN0Ojppc0hSKCkgY29uc3QKIHsKICAgICByZXR1cm4gbm9kZSgpICYmIG5vZGUoKS0+
aGFzVGFnTmFtZShoclRhZyk7CkBAIC02MDUsNiArNjA2LDI5IEBAIHZvaWQgUmVuZGVyT2JqZWN0
OjpzZXRMYXllck5lZWRzRnVsbFJlcGFpbnQoKQogICAgIHRvUmVuZGVyQm94TW9kZWxPYmplY3Qo
dGhpcyktPmxheWVyKCktPnNldE5lZWRzRnVsbFJlcGFpbnQodHJ1ZSk7CiB9CiAKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzaG91bGRTa2lwSW5Db250YWluaW5nQmxvY2tTZWFyY2goUmVuZGVyT2JqZWN0
KiBvKQoreworICAgIEFTU0VSVChvKTsKKyAgICBpZiAoby0+aXNJbmxpbmUoKSAmJiAhby0+aXNS
ZXBsYWNlZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChvLT5pc0JveE1vZGVs
T2JqZWN0KCkpIHsKKyAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNzc0JveCA9IHRvUmVu
ZGVyQm94TW9kZWxPYmplY3Qobyk7CisgICAgICAgIGlmIChjc3NCb3gtPmlzVGFibGVSb3coKQor
ICAgICAgICAgICAgfHwgY3NzQm94LT5pc1RhYmxlU2VjdGlvbigpCisgICAgICAgICAgICB8fCBj
c3NCb3gtPmlzVGFibGVDb2woKQorICAgICAgICAgICAgfHwgY3NzQm94LT5pc0ZyYW1lU2V0KCkK
KyAgICAgICAgICAgIHx8IGNzc0JveC0+aXNNZWRpYSgpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisjaWYgRU5BQkxFKFNWRykKKyAgICBpZiAoby0+aXNTVkdDb250YWluZXIo
KSB8fCBvLT5pc1NWR1Jvb3QoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKIFJlbmRlckJsb2NrKiBSZW5kZXJPYmplY3Q6OmNvbnRhaW5pbmdC
bG9jaygpIGNvbnN0CiB7CiAgICAgaWYgKGlzVGFibGVDZWxsKCkpIHsKQEAgLTYzOCwxMiArNjYy
LDcgQEAgUmVuZGVyQmxvY2sqIFJlbmRlck9iamVjdDo6Y29udGFpbmluZ0Jsb2NrKCkgY29uc3QK
ICAgICAgICAgICAgIG8gPSBvLT5wYXJlbnQoKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHdoaWxlIChvICYmICgoby0+aXNJbmxpbmUoKSAmJiAhby0+aXNSZXBsYWNlZCgpKSB8
fCBvLT5pc1RhYmxlUm93KCkgfHwgby0+aXNUYWJsZVNlY3Rpb24oKQotICAgICAgICAgICAgICAg
ICAgICAgfHwgby0+aXNUYWJsZUNvbCgpIHx8IG8tPmlzRnJhbWVTZXQoKSB8fCBvLT5pc01lZGlh
KCkKLSNpZiBFTkFCTEUoU1ZHKQotICAgICAgICAgICAgICAgICAgICAgfHwgby0+aXNTVkdDb250
YWluZXIoKSB8fCBvLT5pc1NWR1Jvb3QoKQotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAp
KQorICAgICAgICB3aGlsZSAobyAmJiBzaG91bGRTa2lwSW5Db250YWluaW5nQmxvY2tTZWFyY2go
bykpCiAgICAgICAgICAgICBvID0gby0+cGFyZW50KCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oCmluZGV4IDQ2MTY5ZDA0MWM4OGZiODhlYTFmNThhYWZjYTY2YjMyZGE2NzQ4NjMu
LmY3ZDFlY2YzZGI3Zjk2ZmQyMTk5OTI0NDI1NmQ1Mjk1YzIwNWFkMDggMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCkBAIC0yMzQsNTUgKzIzNCwzMyBAQCBwcml2YXRlOgogcHVibGljOgogICAg
IFJlbmRlckFyZW5hKiByZW5kZXJBcmVuYSgpIGNvbnN0IHsgcmV0dXJuIGRvY3VtZW50KCktPnJl
bmRlckFyZW5hKCk7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc0FwcGxldCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzQlIoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0Jsb2NrRmxvdygpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBib29sIGlzQm94TW9kZWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorCisgICAgLy8gRklYTUU6IFRoZXNlIHNob3VsZCBtb3ZlIG9udG8gUmVuZGVyVGV4
dC4KKyAgICB2aXJ0dWFsIGJvb2wgaXNCUigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmly
dHVhbCBib29sIGlzRW1iZWRkZWRPYmplY3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAg
IHZpcnR1YWwgYm9vbCBpc0ZpZWxkc2V0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNGaWxlVXBsb2FkQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgdmlydHVhbCBib29sIGlzRnJhbWUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAg
IHZpcnR1YWwgYm9vbCBpc0ZyYW1lU2V0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVh
bCBib29sIGlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNMaXN0Qm94KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNMaXN0SXRlbSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCBib29sIGlzTGlzdE1hcmtlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCBib29sIGlzTWVkaWEoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZp
cnR1YWwgYm9vbCBpc01lbnVMaXN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSNpZiBFTkFC
TEUoTUVURVJfVEFHKQotICAgIHZpcnR1YWwgYm9vbCBpc01ldGVyKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KLSNlbmRpZgotI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi0gICAgdmlydHVhbCBi
b29sIGlzUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlmCi0gICAgdmly
dHVhbCBib29sIGlzUmVuZGVyQmxvY2soKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZp
cnR1YWwgYm9vbCBpc1JlbmRlckJ1dHRvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dmlydHVhbCBib29sIGlzUmVuZGVySUZyYW1lKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCBib29sIGlzUmVuZGVySW5saW5lKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJQYXJ0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJWaWV3KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNSZXBsaWNhKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwog
I2lmIEVOQUJMRShSVUJZKQotICAgIHZpcnR1YWwgYm9vbCBpc1J1YnkoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1J1YnlCYXNlKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKworICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgbW92ZSB0byBSdWJ5QmFzZS4K
KyAgICB2aXJ0dWFsIGJvb2wgaXNSdWJ5KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIGJvb2wgaXNSdWJ5UnVuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0
dWFsIGJvb2wgaXNSdWJ5VGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNTbGlkZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAg
Ly8gRklYTUU6IFRoZXNlIHNob3VsZCBtb3ZlIG9udG8gUmVuZGVyQm94TW9kZWxPYmplY3QuCisg
ICAgdmlydHVhbCBib29sIGlzQmxvY2tGbG93KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgaXNMaXN0TWFya2VyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCBib29sIGlzUmVuZGVySW5saW5lKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJWaWV3KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgaXNUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzVGFibGVDZWxsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIGJvb2wgaXNUYWJsZUNvbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmly
dHVhbCBib29sIGlzVGFibGVSb3coKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1
YWwgYm9vbCBpc1RhYmxlU2VjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmly
dHVhbCBib29sIGlzVGV4dENvbnRyb2woKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZp
cnR1YWwgYm9vbCBpc1RleHRBcmVhKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1
YWwgYm9vbCBpc1ZpZGVvKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgaXNXaWRnZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBp
c0NhbnZhcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBib29sIGlzUm9vdCgpIGNv
bnN0IHsgcmV0dXJuIGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpID09IG1fbm9kZTsgfQog
ICAgIGJvb2wgaXNCb2R5KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
Q2hpbGRMaXN0LmNwcAppbmRleCA2OGUzOTJjZWJkNmQyODVmMGZkZmU5ODViMzg2MGUxZWEyOGUw
M2RiLi4wOTFiMDg5NmE4Yjg4ODdlNjRmYjMwOTIxM2VkNjVhNzYwYWUwZDVjIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwCisrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdENoaWxkTGlzdC5jcHAKQEAgLTkyLDcgKzkyLDcgQEAg
UmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3RDaGlsZExpc3Q6OnJlbW92ZUNoaWxkTm9kZShSZW5k
ZXJPYmplY3QqIG93bmVyLCBSZW5kZXIKICAgICAgICAgICAgIG9sZENoaWxkLT5yZW1vdmVMYXll
cnMobGF5ZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG9sZENoaWxkLT5pc0xpc3RJdGVt
KCkpCisgICAgICAgIGlmIChvbGRDaGlsZC0+aXNCb3hNb2RlbE9iamVjdCgpICYmIHRvUmVuZGVy
Qm94TW9kZWxPYmplY3Qob2xkQ2hpbGQpLT5pc0xpc3RJdGVtKCkpCiAgICAgICAgICAgICB0b1Jl
bmRlckxpc3RJdGVtKG9sZENoaWxkKS0+dXBkYXRlTGlzdE1hcmtlck51bWJlcnMoKTsKIAogICAg
ICAgICBpZiAob2xkQ2hpbGQtPmlzUG9zaXRpb25lZCgpICYmIG93bmVyLT5jaGlsZHJlbklubGlu
ZSgpKQpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjphcHBl
bmRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyT2JqZWN0KiBuCiAgICAgICAg
ICAgICAgICAgbGF5ZXItPnNldEhhc1Zpc2libGVDb250ZW50KHRydWUpOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKG5ld0NoaWxkLT5pc0xpc3RJdGVtKCkpCisgICAgICAgIGlmIChuZXdDaGls
ZC0+aXNCb3hNb2RlbE9iamVjdCgpICYmIHRvUmVuZGVyQm94TW9kZWxPYmplY3QobmV3Q2hpbGQp
LT5pc0xpc3RJdGVtKCkpCiAgICAgICAgICAgICB0b1JlbmRlckxpc3RJdGVtKG5ld0NoaWxkKS0+
dXBkYXRlTGlzdE1hcmtlck51bWJlcnMoKTsKIAogICAgICAgICBpZiAoIW5ld0NoaWxkLT5pc0Zs
b2F0aW5nT3JQb3NpdGlvbmVkKCkgJiYgb3duZXItPmNoaWxkcmVuSW5saW5lKCkpCkBAIC0yMjAs
NyArMjIwLDcgQEAgdm9pZCBSZW5kZXJPYmplY3RDaGlsZExpc3Q6Omluc2VydENoaWxkTm9kZShS
ZW5kZXJPYmplY3QqIG93bmVyLCBSZW5kZXJPYmplY3QqIGMKICAgICAgICAgICAgICAgICBsYXll
ci0+c2V0SGFzVmlzaWJsZUNvbnRlbnQodHJ1ZSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
Y2hpbGQtPmlzTGlzdEl0ZW0oKSkKKyAgICAgICAgaWYgKGNoaWxkLT5pc0JveE1vZGVsT2JqZWN0
KCkgJiYgdG9SZW5kZXJCb3hNb2RlbE9iamVjdChjaGlsZCktPmlzTGlzdEl0ZW0oKSkKICAgICAg
ICAgICAgIHRvUmVuZGVyTGlzdEl0ZW0oY2hpbGQpLT51cGRhdGVMaXN0TWFya2VyTnVtYmVycygp
OwogCiAgICAgICAgIGlmICghY2hpbGQtPmlzRmxvYXRpbmcoKSAmJiBvd25lci0+Y2hpbGRyZW5J
bmxpbmUoKSkKQEAgLTI5NSw4ICsyOTUsMTMgQEAgc3RhdGljIFJlbmRlck9iamVjdCogZmluZEJl
Zm9yZUFmdGVyUGFyZW50KFJlbmRlck9iamVjdCogb2JqZWN0KQogICAgICAgICByZXR1cm4gb2Jq
ZWN0OwogCiAgICAgUmVuZGVyT2JqZWN0KiBiZWZvcmVBZnRlclBhcmVudCA9IG9iamVjdDsKLSAg
ICB3aGlsZSAoYmVmb3JlQWZ0ZXJQYXJlbnQgJiYgIShiZWZvcmVBZnRlclBhcmVudC0+aXNUZXh0
KCkgfHwgYmVmb3JlQWZ0ZXJQYXJlbnQtPmlzSW1hZ2UoKSkpCisgICAgd2hpbGUgKGJlZm9yZUFm
dGVyUGFyZW50KSB7CisgICAgICAgIGlmIChiZWZvcmVBZnRlclBhcmVudC0+aXNUZXh0KCkpCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGJlZm9yZUFmdGVyUGFyZW50LT5pc0JveE1v
ZGVsT2JqZWN0KCkgJiYgdG9SZW5kZXJCb3hNb2RlbE9iamVjdChiZWZvcmVBZnRlclBhcmVudCkt
PmlzSW1hZ2UoKSkKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBiZWZvcmVBZnRlclBhcmVu
dCA9IGJlZm9yZUFmdGVyUGFyZW50LT5maXJzdENoaWxkKCk7CisgICAgfQogICAgIHJldHVybiBi
ZWZvcmVBZnRlclBhcmVudDsKIH0KIApAQCAtMzk4LDcgKzQwMyw3IEBAIHZvaWQgUmVuZGVyT2Jq
ZWN0Q2hpbGRMaXN0Ojp1cGRhdGVCZWZvcmVBZnRlckNvbnRlbnQoUmVuZGVyT2JqZWN0KiBvd25l
ciwgUHNldWRvCiAgICAgICAgICAgICAgICAgaWYgKGdlbkNoaWxkLT5pc1RleHQoKSkKICAgICAg
ICAgICAgICAgICAgICAgLy8gR2VuZXJhdGVkIHRleHQgY29udGVudCBpcyBhIGNoaWxkIHdob3Nl
IHN0eWxlIGFsc28gbmVlZHMgdG8gYmUgc2V0IHRvIHRoZSBwc2V1ZG8tZWxlbWVudCBzdHlsZS4K
ICAgICAgICAgICAgICAgICAgICAgZ2VuQ2hpbGQtPnNldFN0eWxlKHBzZXVkb0VsZW1lbnRTdHls
ZSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZ2VuQ2hpbGQtPmlzSW1hZ2UoKSkgeworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGdlbkNoaWxkLT5pc0JveE1vZGVsT2JqZWN0KCkgJiYgdG9S
ZW5kZXJCb3hNb2RlbE9iamVjdChnZW5DaGlsZCktPmlzSW1hZ2UoKSkgewogICAgICAgICAgICAg
ICAgICAgICAvLyBJbWFnZXMgZ2V0IGFuIGVtcHR5IHN0eWxlIHRoYXQgaW5oZXJpdHMgZnJvbSB0
aGUgcHNldWRvLgogICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxl
ID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgICAgICBzdHlsZS0+aW5o
ZXJpdEZyb20ocHNldWRvRWxlbWVudFN0eWxlKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclBhcnQuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnQuaAppbmRleCAx
OGYyMzQ2NzhlODU1Njk3MTVkY2QxYWNkM2I4NThiNmE3YjFmOGRhLi42YmI4NzIyYjUxMGZmODNj
OTlkODQ5MWU5NGY2YTliZGJkNWNiYTAxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJQYXJ0LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydC5oCkBAIC00Myw4
ICs0Myw5IEBAIHByaXZhdGU6CiAKIGlubGluZSBSZW5kZXJQYXJ0KiB0b1JlbmRlclBhcnQoUmVu
ZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1Jl
bmRlclBhcnQoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclBhcnQqPihvYmplY3Qp
OworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0
KG9iamVjdCk7CisgICAgQVNTRVJUKCFib3ggfHwgYm94LT5pc1JlbmRlclBhcnQoKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclBhcnQqPihib3gpOwogfQogCiAvLyBUaGlzIHdpbGwg
Y2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UHJvZ3Jlc3MuaAppbmRleCBiZDk3OWU4NDdmYWMwYTA2ZTVlODllZWY1OWE3OThhN2UyNThmNjFl
Li4zMmUzNzU4MWViNGNhNDQ5ZDQxMjU2ZTQ2OGM4OTk4MjQyNmFiYjQ3IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclByb2dyZXNzLmgKQEAgLTY5LDggKzY5LDkgQEAgcHJpdmF0ZToKIAogaW5saW5lIFJl
bmRlclByb2dyZXNzKiB0b1JlbmRlclByb2dyZXNzKFJlbmRlck9iamVjdCogb2JqZWN0KQogewot
ICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNQcm9ncmVzcygpKTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8UmVuZGVyUHJvZ3Jlc3MqPihvYmplY3QpOworICAgIFJlbmRlckJveE1vZGVs
T2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG9iamVjdCk7CisgICAgQVNTRVJU
KCFib3ggfHwgYm94LT5pc1Byb2dyZXNzKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5k
ZXJQcm9ncmVzcyo+KGJveCk7CiB9CiAKIC8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcg
YW4gdW5uZWNlc3NhcnkgY2FzdC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNsaWRlci5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmgKaW5kZXggZmM4Y2Uy
NDU1YTNmMGY2YmQ4NzY5MWU5YTY0YzJmZDc5MzJhNDhjZS4uY2QzN2I3NmY3NWQzZDY2ZmIwNDcx
MWZkYTQ1NDVmNjI0N2FlN2UzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U2xpZGVyLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmgKQEAgLTcxLDgg
KzcxLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgaW5saW5lIFJlbmRlclNsaWRlciog
dG9SZW5kZXJTbGlkZXIoUmVuZGVyT2JqZWN0KiBvYmplY3QpCiAgICAgewotICAgICAgICBBU1NF
UlQoIW9iamVjdCB8fCBvYmplY3QtPmlzU2xpZGVyKCkpOwotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8UmVuZGVyU2xpZGVyKj4ob2JqZWN0KTsKKyAgICAgICAgUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIGJveCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0KTsKKyAgICAgICAgQVNTRVJU
KCFib3ggfHwgYm94LT5pc1NsaWRlcigpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJl
bmRlclNsaWRlcio+KGJveCk7CiAgICAgfQogCiAgICAgLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9u
ZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGUuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKaW5kZXgg
ZjEzMTkxNmQzMTA2Mjk5OTI0ODdkYzc3ODliOTgzNjJiMTc0NzAwNy4uMjlkMDBhNzY3YmFmOTIw
NjY4MmRjZjE1NTc3MjQzNjY3NTZkNjBiOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGUuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCkBAIC0x
OTksMTQgKzE5OSwxNiBAQCBwcml2YXRlOgogCiBpbmxpbmUgUmVuZGVyVGFibGUqIHRvUmVuZGVy
VGFibGUoUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2Jq
ZWN0LT5pc1RhYmxlKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZSo+KG9i
amVjdCk7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHRvUmVuZGVyQm94TW9kZWxP
YmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlQoIWJveCB8fCBib3gtPmlzVGFibGUoKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlKj4oYm94KTsKIH0KIAogaW5saW5lIGNvbnN0
IFJlbmRlclRhYmxlKiB0b1JlbmRlclRhYmxlKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQog
ewotICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNUYWJsZSgpKTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyVGFibGUqPihvYmplY3QpOworICAgIGNvbnN0IFJlbmRl
ckJveE1vZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG9iamVjdCk7Cisg
ICAgQVNTRVJUKCFib3ggfHwgYm94LT5pc1RhYmxlKCkpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBSZW5kZXJUYWJsZSo+KGJveCk7CiB9CiAKIC8vIFRoaXMgd2lsbCBjYXRjaCBhbnlv
bmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ29sLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5o
CmluZGV4IDg3MjA5YTE0ZTJiYzBlMDg1ODBlZjYxZWQ0N2IyYzA5NGU0NGQxMjMuLjFlYTFiODY3
MGFlOWZhYzNiMWI2OGQxNWZiODE3ZjM4MmMwNGYwMGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlQ29sLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVDb2wuaApAQCAtNjgsMTQgKzY4LDE2IEBAIHByaXZhdGU6CiAKIGlubGluZSBSZW5kZXJUYWJs
ZUNvbCogdG9SZW5kZXJUYWJsZUNvbChSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKLSAgICBBU1NF
UlQoIW9iamVjdCB8fCBvYmplY3QtPmlzVGFibGVDb2woKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PFJlbmRlclRhYmxlQ29sKj4ob2JqZWN0KTsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCog
Ym94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChvYmplY3QpOworICAgIEFTU0VSVCghYm94IHx8
IGJveC0+aXNUYWJsZUNvbCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVD
b2wqPihib3gpOwogfQogCiBpbmxpbmUgY29uc3QgUmVuZGVyVGFibGVDb2wqIHRvUmVuZGVyVGFi
bGVDb2woY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgQVNTRVJUKCFvYmplY3Qg
fHwgb2JqZWN0LT5pc1RhYmxlQ29sKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBS
ZW5kZXJUYWJsZUNvbCo+KG9iamVjdCk7CisgICAgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3Qq
IGJveCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlQoIWJveCB8
fCBib3gtPmlzVGFibGVDb2woKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRl
clRhYmxlQ29sKj4oYm94KTsKIH0KIAogLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBh
biB1bm5lY2Vzc2FyeSBjYXN0LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVSb3cuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgKaW5kZXggNTg4
MjUyYmM4NGIyMWZkODVmM2IxN2Q3MDU4ZDk0MTg2ODBhYmYzNi4uZDU3ZDhlZDdiMGQyZjU2OGEz
YzdiNzZhYjQzMWZhNmZiYWUyNjM4OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVSb3cuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCkBA
IC02OSwxNCArNjksMTYgQEAgcHJpdmF0ZToKIAogaW5saW5lIFJlbmRlclRhYmxlUm93KiB0b1Jl
bmRlclRhYmxlUm93KFJlbmRlck9iamVjdCogb2JqZWN0KQogewotICAgIEFTU0VSVCghb2JqZWN0
IHx8IG9iamVjdC0+aXNUYWJsZVJvdygpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVy
VGFibGVSb3cqPihvYmplY3QpOworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSB0b1Jl
bmRlckJveE1vZGVsT2JqZWN0KG9iamVjdCk7CisgICAgQVNTRVJUKCFib3ggfHwgYm94LT5pc1Rh
YmxlUm93KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVJvdyo+KGJveCk7
CiB9CiAKIGlubGluZSBjb25zdCBSZW5kZXJUYWJsZVJvdyogdG9SZW5kZXJUYWJsZVJvdyhjb25z
dCBSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3Qt
PmlzVGFibGVSb3coKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclRhYmxl
Um93Kj4ob2JqZWN0KTsKKyAgICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9S
ZW5kZXJCb3hNb2RlbE9iamVjdChvYmplY3QpOworICAgIEFTU0VSVCghYm94IHx8IGJveC0+aXNU
YWJsZVJvdygpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyVGFibGVSb3cq
Pihib3gpOwogfQogCiAvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNz
YXJ5IGNhc3QuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rp
b24uaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCmluZGV4IDZkMmY3
NTJlMDM2YTdiY2RiODAwMTgwYmY3NjcxOTZmMTRjNmYxZWQuLjhjMDEwMzk1MzcxNzFiODM3MGEw
MTFlNTlmNjFlYTRkZDE1MDM3NjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlv
bi5oCkBAIC0xNzcsMTQgKzE3NywxNiBAQCBwcml2YXRlOgogCiBpbmxpbmUgUmVuZGVyVGFibGVT
ZWN0aW9uKiB0b1JlbmRlclRhYmxlU2VjdGlvbihSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKLSAg
ICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzVGFibGVTZWN0aW9uKCkpOwotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24qPihvYmplY3QpOworICAgIFJlbmRlckJv
eE1vZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG9iamVjdCk7CisgICAg
QVNTRVJUKCFib3ggfHwgYm94LT5pc1RhYmxlU2VjdGlvbigpKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4oYm94KTsKIH0KIAogaW5saW5lIGNvbnN0IFJlbmRl
clRhYmxlU2VjdGlvbiogdG9SZW5kZXJUYWJsZVNlY3Rpb24oY29uc3QgUmVuZGVyT2JqZWN0KiBv
YmplY3QpCiB7Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1RhYmxlU2VjdGlvbigp
KTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyVGFibGVTZWN0aW9uKj4ob2Jq
ZWN0KTsKKyAgICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9SZW5kZXJCb3hN
b2RlbE9iamVjdChvYmplY3QpOworICAgIEFTU0VSVCghYm94IHx8IGJveC0+aXNUYWJsZVNlY3Rp
b24oKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclRhYmxlU2VjdGlvbio+
KGJveCk7CiB9CiAKIC8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3Nh
cnkgY2FzdC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
TXVsdGlMaW5lLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGlu
ZS5oCmluZGV4IGZiY2EzMDgxNDU4YzhkNzk1ZmJjMWM5MDVlYjI2YmE4YWViZWY3MDkuLjk4ZDMz
ZjUwYjgzNmE5MTdkMmM5ZWJjYWFmNzNhYjhjYTg5ZGY4NmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmgKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaApAQCAtNTMsOSArNTMsMTAgQEAgcHJp
dmF0ZToKIH07CiAKIGlubGluZSBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZSogdG9SZW5kZXJU
ZXh0Q29udHJvbE11bHRpTGluZShSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsgCi0gICAgQVNTRVJU
KCFvYmplY3QgfHwgb2JqZWN0LT5pc1RleHRBcmVhKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZSo+KG9iamVjdCk7Cit7CisgICAgUmVuZGVyQm94
TW9kZWxPYmplY3QqIGJveCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0KTsKKyAgICBB
U1NFUlQoIWJveCB8fCBib3gtPmlzVGV4dEFyZWEoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lKj4oYm94KTsKIH0KIAogLy8gVGhpcyB3aWxsIGNh
dGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0LgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmggYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAppbmRleCA0YmM4MGNmMzZlMGZjYzk0
ZTkwMTZiNjE3M2RmMDA2MTE0YzFmOGViLi42ZmIzMTU0ODQ4OWIxNTQyZjM1M2Q5NmVhNzAwMThl
ZjMxNGI2OWEzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUuaApAQCAtMTYxLDkgKzE2MSwxMCBAQCBwcml2YXRlOgogfTsKIAogaW5saW5lIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZSogdG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUo
UmVuZGVyT2JqZWN0KiBvYmplY3QpCi17IAotICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+
aXNUZXh0RmllbGQoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZSo+KG9iamVjdCk7Cit7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9
IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlQoIWJveCB8fCBib3gt
PmlzVGV4dEZpZWxkKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUqPihib3gpOwogfQogCiAvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5n
IGFuIHVubmVjZXNzYXJ5IGNhc3QuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKaW5kZXggNGQ5
ZjQ3YjVhMzBlYjFmNjQwNTYxZTExYWIyNjk2MDhiZjlmYmNhZS4uMjhmMzYzZDA3YTlhYjAxZmFh
MmUwOGQzNTEyNDlmYjMwNWQ5ODE3MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWUuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcApAQCAt
MzExLDcgKzMxMSw3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OnBhaW50KFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlCiAgICAgICAgICAgICByZXR1
cm4gcGFpbnRTbGlkZXJUcmFjayhvLCBwYWludEluZm8sIHIpOwogICAgICAgICBjYXNlIFNsaWRl
clRodW1iSG9yaXpvbnRhbFBhcnQ6CiAgICAgICAgIGNhc2UgU2xpZGVyVGh1bWJWZXJ0aWNhbFBh
cnQ6Ci0gICAgICAgICAgICBpZiAoby0+cGFyZW50KCktPmlzU2xpZGVyKCkpCisgICAgICAgICAg
ICBpZiAoby0+cGFyZW50KCktPmlzQm94TW9kZWxPYmplY3QoKSAmJiB0b1JlbmRlckJveE1vZGVs
T2JqZWN0KG8tPnBhcmVudCgpKS0+aXNTbGlkZXIoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
cGFpbnRTbGlkZXJUaHVtYihvLCBwYWludEluZm8sIHIpOwogICAgICAgICAgICAgLy8gV2UgZG9u
J3Qgc3VwcG9ydCBkcmF3aW5nIGEgc2xpZGVyIHRodW1iIHdpdGhvdXQgYSBwYXJlbnQgc2xpZGVy
CiAgICAgICAgICAgICBicmVhazsKQEAgLTMzNCw3ICszMzQsNyBAQCBib29sIFJlbmRlclRoZW1l
OjpwYWludChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZQogICAgICAgICBjYXNlIE1lZGlhU2xpZGVyUGFydDoKICAgICAgICAgICAgIHJldHVy
biBwYWludE1lZGlhU2xpZGVyVHJhY2sobywgcGFpbnRJbmZvLCByKTsKICAgICAgICAgY2FzZSBN
ZWRpYVNsaWRlclRodW1iUGFydDoKLSAgICAgICAgICAgIGlmIChvLT5wYXJlbnQoKS0+aXNTbGlk
ZXIoKSkKKyAgICAgICAgICAgIGlmIChvLT5wYXJlbnQoKS0+aXNCb3hNb2RlbE9iamVjdCgpICYm
IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qoby0+cGFyZW50KCkpLT5pc1NsaWRlcigpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBwYWludE1lZGlhU2xpZGVyVGh1bWIobywgcGFpbnRJbmZvLCByKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1lZGlhVm9sdW1lU2xpZGVyTXV0ZUJ1
dHRvblBhcnQ6CkBAIC0zNDQsNyArMzQ0LDcgQEAgYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnQoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmUKICAg
ICAgICAgY2FzZSBNZWRpYVZvbHVtZVNsaWRlclBhcnQ6CiAgICAgICAgICAgICByZXR1cm4gcGFp
bnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKG8sIHBhaW50SW5mbywgcik7CiAgICAgICAgIGNhc2Ug
TWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQ6Ci0gICAgICAgICAgICBpZiAoby0+cGFyZW50KCkt
PmlzU2xpZGVyKCkpCisgICAgICAgICAgICBpZiAoby0+cGFyZW50KCktPmlzQm94TW9kZWxPYmpl
Y3QoKSAmJiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG8tPnBhcmVudCgpKS0+aXNTbGlkZXIoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKG8sIHBh
aW50SW5mbywgcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNZWRpYVRpbWVS
ZW1haW5pbmdQYXJ0OgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW0gYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCBjYzJmZjFm
ZTNkMmU0ZTE2OTk0NzhiYjg4M2FmNWUxNDIzMGYyNzk5Li5lOWZjYjQ0NTJjZTAwMDdmYTk1MGVh
ZTc1MjU3OGE5Njg4OThlZThiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5tbQorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQpAQCAt
ODIzLDcgKzgyMyw3IEBAIEludFNpemUgUmVuZGVyVGhlbWVNYWM6Om1ldGVyU2l6ZUZvckJvdW5k
cyhjb25zdCBSZW5kZXJNZXRlciogcmVuZGVyTWV0ZXIsIGNvbnN0CiAKIGJvb2wgUmVuZGVyVGhl
bWVNYWM6OnBhaW50TWV0ZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmICghcmVuZGVy
T2JqZWN0LT5pc01ldGVyKCkpCisgICAgaWYgKCFyZW5kZXJPYmplY3QtPmlzQm94TW9kZWxPYmpl
Y3QoKSB8fCAhdG9SZW5kZXJCb3hNb2RlbE9iamVjdChyZW5kZXJPYmplY3QpLT5pc01ldGVyKCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0
IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7CkBAIC05MzQsNyArOTM0LDcgQEAgdm9p
ZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGUKIAogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVz
c0JhcihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKCFyZW5kZXJPYmplY3QtPmlzUHJv
Z3Jlc3MoKSkKKyAgICBpZiAoIXJlbmRlck9iamVjdC0+aXNCb3hNb2RlbE9iamVjdCgpIHx8ICF0
b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlck9iamVjdCktPmlzUHJvZ3Jlc3MoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICBSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MgPSB0
b1JlbmRlclByb2dyZXNzKHJlbmRlck9iamVjdCk7CkBAIC0xMzIwLDcgKzEzMjAsNyBAQCBjb25z
dCBmbG9hdCB2ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgPSAwLjFmOwogCiBib29sIFJlbmRl
clRoZW1lTWFjOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgQVNTRVJUKG8tPnBhcmVu
dCgpLT5pc1NsaWRlcigpKTsKKyAgICBBU1NFUlQoby0+cGFyZW50KCktPmlzQm94TW9kZWxPYmpl
Y3QoKSAmJiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG8tPnBhcmVudCgpKS0+aXNTbGlkZXIoKSk7
CiAKICAgICBOU1NsaWRlckNlbGwqIHNsaWRlclRodW1iQ2VsbCA9IG8tPnN0eWxlKCktPmFwcGVh
cmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydAogICAgICAgICA/IHNsaWRlclRodW1i
VmVydGljYWwoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCA0MDgw
MTVjYmEzNTk0Njc0NGQxZTYzMTEzOTEzZjY0NDZkNzVmYTJjLi4yZjgwNGQ0ZmMzNGRkMGZjOWQz
Nzg3MmM4MDQ2YjczNWU2Yzk1NjE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUcmVlQXNUZXh0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcApAQCAtMjM0LDkgKzIzNCw2IEBAIHZvaWQgUmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5k
ZXJPYmplY3QoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgbywKICAgICB0cyA8
PCAiICIgPDwgcjsKIAogICAgIGlmICghKG8uaXNUZXh0KCkgJiYgIW8uaXNCUigpKSkgewotICAg
ICAgICBpZiAoby5pc0ZpbGVVcGxvYWRDb250cm9sKCkpCi0gICAgICAgICAgICB0cyA8PCAiICIg
PDwgcXVvdGVBbmRFc2NhcGVOb25QcmludGFibGVzKHRvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wo
Jm8pLT5maWxlVGV4dFZhbHVlKCkpOwotCiAgICAgICAgIGlmIChvLnBhcmVudCgpICYmIChvLnBh
cmVudCgpLT5zdHlsZSgpLT5jb2xvcigpICE9IG8uc3R5bGUoKS0+Y29sb3IoKSkpCiAgICAgICAg
ICAgICB0cyA8PCAiIFtjb2xvcj0iIDw8IG8uc3R5bGUoKS0+Y29sb3IoKS5uYW1lKCkgPDwgIl0i
OwogCkBAIC0yNjMsNiArMjYwLDEwIEBAIHZvaWQgUmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5k
ZXJPYmplY3QoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgbywKICAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgYm94ID0g
KnRvUmVuZGVyQm94TW9kZWxPYmplY3QoJm8pOworCisgICAgICAgIGlmIChib3guaXNGaWxlVXBs
b2FkQ29udHJvbCgpKQorICAgICAgICAgICAgdHMgPDwgIiAiIDw8IHF1b3RlQW5kRXNjYXBlTm9u
UHJpbnRhYmxlcyh0b1JlbmRlckZpbGVVcGxvYWRDb250cm9sKCZvKS0+ZmlsZVRleHRWYWx1ZSgp
KTsKKwogICAgICAgICBpZiAoYm94LmJvcmRlclRvcCgpIHx8IGJveC5ib3JkZXJSaWdodCgpIHx8
IGJveC5ib3JkZXJCb3R0b20oKSB8fCBib3guYm9yZGVyTGVmdCgpKSB7CiAgICAgICAgICAgICB0
cyA8PCAiIFtib3JkZXI6IjsKIApAQCAtNDY2LDggKzQ2NywxMyBAQCB2b2lkIHdyaXRlKFRleHRT
dHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG8sIGludCBpbmRlbnQsIFJlbmRlckFzVGV4
dEJlaGF2aQogICAgICAgICB3cml0ZSh0cywgKmNoaWxkLCBpbmRlbnQgKyAxLCBiZWhhdmlvcik7
CiAgICAgfQogCi0gICAgaWYgKG8uaXNXaWRnZXQoKSkgewotICAgICAgICBXaWRnZXQqIHdpZGdl
dCA9IHRvUmVuZGVyV2lkZ2V0KCZvKS0+d2lkZ2V0KCk7CisgICAgaWYgKCFvLmlzQm94TW9kZWxP
YmplY3QoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgUmVuZGVyQm94TW9kZWxPYmpl
Y3QmIGJveCA9ICp0b1JlbmRlckJveE1vZGVsT2JqZWN0KCZvKTsKKworICAgIGlmIChib3guaXNX
aWRnZXQoKSkgeworICAgICAgICBXaWRnZXQqIHdpZGdldCA9IHRvUmVuZGVyV2lkZ2V0KCZib3gp
LT53aWRnZXQoKTsKICAgICAgICAgaWYgKHdpZGdldCAmJiB3aWRnZXQtPmlzRnJhbWVWaWV3KCkp
IHsKICAgICAgICAgICAgIEZyYW1lVmlldyogdmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+
KHdpZGdldCk7CiAgICAgICAgICAgICBSZW5kZXJWaWV3KiByb290ID0gdmlldy0+ZnJhbWUoKS0+
Y29udGVudFJlbmRlcmVyKCk7CkBAIC03MDMsNyArNzA5LDcgQEAgU3RyaW5nIG1hcmtlclRleHRG
b3JMaXN0SXRlbShFbGVtZW50KiBlbGVtZW50KQogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50
UmVmKGVsZW1lbnQpOwogICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwog
Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAg
UmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyQm94TW9kZWxP
YmplY3QoKTsKICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNMaXN0SXRlbSgpKQog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZGVvLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5oCmluZGV4IGJi
MmIwNWNjY2JhNTI1M2E4NzBiZmY4MThkNTcwMjg2ZDE0NWIyNzMuLjIwNTg3OTQ3ODU3MjVhYTU2
NTQwNTFhYTJkNzIzNTU3Mzk0M2EwZDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZGVvLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uaApAQCAtODAs
OCArODAsOSBAQCBwcml2YXRlOgogCiBpbmxpbmUgUmVuZGVyVmlkZW8qIHRvUmVuZGVyVmlkZW8o
UmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5p
c1ZpZGVvKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJWaWRlbyo+KG9iamVjdCk7
CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qo
b2JqZWN0KTsKKyAgICBBU1NFUlQoIWJveCB8fCBib3gtPmlzVmlkZW8oKSk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFJlbmRlclZpZGVvKj4oYm94KTsKIH0KIAogLy8gVGhpcyB3aWxsIGNhdGNo
IGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQu
aAppbmRleCBiODViOTUxNmVhOWU4ZjUxMTZkZjlkOGRiYzlkMmE3YjcyYTAzY2UyLi5kZTQ3ZGU5
YmM4MmJiYzk1ZmU5ZDkwYTc0YjliZTg1NTA4OWE0YTRjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJXaWRnZXQuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRn
ZXQuaApAQCAtODAsMTQgKzgwLDE2IEBAIHByaXZhdGU6CiAKIGlubGluZSBSZW5kZXJXaWRnZXQq
IHRvUmVuZGVyV2lkZ2V0KFJlbmRlck9iamVjdCogb2JqZWN0KQogewotICAgIEFTU0VSVCghb2Jq
ZWN0IHx8IG9iamVjdC0+aXNXaWRnZXQoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRl
cldpZGdldCo+KG9iamVjdCk7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHRvUmVu
ZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlQoIWJveCB8fCBib3gtPmlzV2lk
Z2V0KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQqPihib3gpOwogfQog
CiBpbmxpbmUgY29uc3QgUmVuZGVyV2lkZ2V0KiB0b1JlbmRlcldpZGdldChjb25zdCBSZW5kZXJP
YmplY3QqIG9iamVjdCkKIHsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzV2lkZ2V0
KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJXaWRnZXQqPihvYmplY3Qp
OworICAgIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVs
T2JqZWN0KG9iamVjdCk7CisgICAgQVNTRVJUKCFib3ggfHwgYm94LT5pc1dpZGdldCgpKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyV2lkZ2V0Kj4oYm94KTsKIH0KIAogLy8g
VGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0LgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHVGV4dFF1ZXJ5LmNwcCBiL1dlYkNvcmUvcmVuZGVy
aW5nL1NWR1RleHRRdWVyeS5jcHAKaW5kZXggMzVjYTY5MGU0NzA4NThhODBmYTNkYThkZWVkYWJl
N2Q4YTc4NDBkMy4uNzUwMzliOGM2YTA3OTYyN2I4YjQ1NzExMWY2Y2E1ODNiMjMxNmMwYiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHVGV4dFF1ZXJ5LmNwcAorKysgYi9XZWJDb3Jl
L3JlbmRlcmluZy9TVkdUZXh0UXVlcnkuY3BwCkBAIC00MCw3ICs0MCw3IEBAIHN0cnVjdCBTVkdU
ZXh0UXVlcnk6OkRhdGEgewogICAgIHVuc2lnbmVkIHByb2Nlc3NlZENodW5rQ2hhcmFjdGVyczsK
IH07CiAKLXN0YXRpYyBpbmxpbmUgSW5saW5lRmxvd0JveCogZmxvd0JveEZvclJlbmRlcmVyKFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCitzdGF0aWMgaW5saW5lIElubGluZUZsb3dCb3gqIGZsb3dC
b3hGb3JSZW5kZXJlcihSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIpCiB7CiAgICAgaWYg
KCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIDA7CkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyBp
bmxpbmUgZmxvYXQgbWFwTGVuZ3RoVGhyb3VnaENodW5rVHJhbnNmb3JtYXRpb24oY29uc3QgU1ZH
SW5saW5lVGV4dEJveCoKICAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uVG9GbG9hdChzdGF0aWNf
Y2FzdDxkb3VibGU+KGxlbmd0aCkgKiAoaXNWZXJ0aWNhbFRleHQgPyB0cmFuc2Zvcm0uZCgpIDog
dHJhbnNmb3JtLmEoKSkpOwogfQogCi1TVkdUZXh0UXVlcnk6OlNWR1RleHRRdWVyeShSZW5kZXJP
YmplY3QqIHJlbmRlcmVyKQorU1ZHVGV4dFF1ZXJ5OjpTVkdUZXh0UXVlcnkoUmVuZGVyQm94TW9k
ZWxPYmplY3QqIHJlbmRlcmVyKQogewogICAgIGNvbGxlY3RUZXh0Qm94ZXNJbkZsb3dCb3goZmxv
d0JveEZvclJlbmRlcmVyKHJlbmRlcmVyKSk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9TVkdUZXh0UXVlcnkuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1RleHRRdWVyeS5oCmlu
ZGV4IGYxOWM3MmU4ZTY5NjAyM2Q3OGFiYmNmNzM5MzczMWFiYzA2Y2UyYjMuLjk5ZmJkYmUxYjZh
N2FlZGViM2U4Yzg2OTFiYzc0Y2FmNTYxOTA2MDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVy
aW5nL1NWR1RleHRRdWVyeS5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1RleHRRdWVyeS5o
CkBAIC0yNywxNCArMjcsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW5saW5l
Rmxvd0JveDsKLWNsYXNzIFJlbmRlck9iamVjdDsKK2NsYXNzIFJlbmRlckJveE1vZGVsT2JqZWN0
OwogY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBTVkdJbmxpbmVUZXh0Qm94Owogc3RydWN0IFNW
R1RleHRDaHVua1BhcnQ7CiAKIGNsYXNzIFNWR1RleHRRdWVyeSB7CiBwdWJsaWM6Ci0gICAgU1ZH
VGV4dFF1ZXJ5KFJlbmRlck9iamVjdCopOworICAgIFNWR1RleHRRdWVyeShSZW5kZXJCb3hNb2Rl
bE9iamVjdCopOwogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFyYWN0ZXJzKCkgY29uc3Q7CiAg
ICAgZmxvYXQgdGV4dExlbmd0aCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRD
b250cm9sSW5uZXJFbGVtZW50cy5jcHAKaW5kZXggMzg0NmYwMzU1NGM2MTkwMjlkZTA1Y2EzZmY0
ODVjZWY0MWNiZmEwYy4uZDE0YThiOGM0OTU5YWZiMTk0NTZiYWY2MTU1OGU5MWY0Mzg1NjlkYyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNw
cAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCkBA
IC01OCwxMSArNTgsMTEgQEAgcHJpdmF0ZToKIAogYm9vbCBSZW5kZXJUZXh0Q29udHJvbElubmVy
QmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rp
b24gaGl0VGVzdEFjdGlvbikKIHsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZSgp
LT5zaGFkb3dBbmNlc3Rvck5vZGUoKS0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJCb3hNb2RlbE9i
amVjdCogY3NzQm94ID0gbm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKS0+cmVuZGVyQm94TW9k
ZWxPYmplY3QoKTsKIAogICAgIGJvb2wgcGxhY2Vob2xkZXJJc1Zpc2libGUgPSBmYWxzZTsKLSAg
ICBpZiAocmVuZGVyZXItPmlzVGV4dEZpZWxkKCkpCi0gICAgICAgIHBsYWNlaG9sZGVySXNWaXNp
YmxlID0gdG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUocmVuZGVyZXIpLT5wbGFjZWhvbGRl
cklzVmlzaWJsZSgpOworICAgIGlmIChjc3NCb3gtPmlzVGV4dEZpZWxkKCkpCisgICAgICAgIHBs
YWNlaG9sZGVySXNWaXNpYmxlID0gdG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoY3NzQm94
KS0+cGxhY2Vob2xkZXJJc1Zpc2libGUoKTsKIAogICAgIHJldHVybiBSZW5kZXJCbG9jazo6bm9k
ZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIHBsYWNlaG9sZGVySXNWaXNp
YmxlID8gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCA6IGhpdFRlc3RBY3Rpb24pOwogfQpAQCAtMTQ1
LDE1ICsxNDUsMjIgQEAgdm9pZCBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihldmVudCk7CiB9CiAKK3N0YXRpYyBib29sIHNob3VsZFVzZU11bHRpTGlu
ZShOb2RlKiBzaGFkb3dBbmNlc3RvcikKK3sKKyAgICBpZiAoIXNoYWRvd0FuY2VzdG9yKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY3NzQm94ID0g
c2hhZG93QW5jZXN0b3ItPnJlbmRlckJveE1vZGVsT2JqZWN0KCk7CisgICAgaWYgKCFjc3NCb3gp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChjc3NCb3gtPmlzVGV4dEZpZWxk
KCkgfHwgY3NzQm94LT5pc1RleHRBcmVhKCkpOworICAgIHJldHVybiBjc3NCb3gtPmlzVGV4dEFy
ZWEoKTsKK30KKwogUmVuZGVyT2JqZWN0KiBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OmNy
ZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQogewotICAgIGJv
b2wgbXVsdGlMaW5lID0gZmFsc2U7Ci0gICAgTm9kZSogc2hhZG93QW5jZXN0b3IgPSBzaGFkb3dB
bmNlc3Rvck5vZGUoKTsKLSAgICBpZiAoc2hhZG93QW5jZXN0b3IgJiYgc2hhZG93QW5jZXN0b3It
PnJlbmRlcmVyKCkpIHsKLSAgICAgICAgQVNTRVJUKHNoYWRvd0FuY2VzdG9yLT5yZW5kZXJlcigp
LT5pc1RleHRGaWVsZCgpIHx8IHNoYWRvd0FuY2VzdG9yLT5yZW5kZXJlcigpLT5pc1RleHRBcmVh
KCkpOwotICAgICAgICBtdWx0aUxpbmUgPSBzaGFkb3dBbmNlc3Rvci0+cmVuZGVyZXIoKS0+aXNU
ZXh0QXJlYSgpOwotICAgIH0KLSAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyVGV4dENvbnRy
b2xJbm5lckJsb2NrKHRoaXMsIG11bHRpTGluZSk7CisgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJl
bmRlclRleHRDb250cm9sSW5uZXJCbG9jayh0aGlzLCBzaG91bGRVc2VNdWx0aUxpbmUoc2hhZG93
QW5jZXN0b3JOb2RlKCkpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcCBiL1dlYkNv
cmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAKaW5kZXggYTk2Y2U2MzRhOGE5MzJiZTAy
MmVkNjkzZDQzMzdhMzk1OTIyZDljNy4uYzFiNTA5Mzc1ZjA2YjcxNTlkNDJkYzU0NjBjNmI3NDdl
NjA4ZDIwZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNw
cAorKysgYi9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCkBAIC0yNiw2ICsy
Niw3IEBACiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVl
S2V5d29yZHMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlJlbmRlckJveE1vZGVs
T2JqZWN0LmgiCiAjaW5jbHVkZSAiU1ZHVGV4dFF1ZXJ5LmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9u
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCkBAIC00Niw2ICs0NywxMSBAQCBT
VkdUZXh0Q29udGVudEVsZW1lbnQ6On5TVkdUZXh0Q29udGVudEVsZW1lbnQoKQogewogfQogCitS
ZW5kZXJCb3hNb2RlbE9iamVjdCogU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpyZW5kZXJlcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHRvUmVuZGVyQm94TW9kZWxPYmplY3QoU1ZHU3R5bGVkRWxlbWVu
dDo6cmVuZGVyZXIoKSk7Cit9CisKIHVuc2lnbmVkIFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0
TnVtYmVyT2ZDaGFycygpIGNvbnN0CiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdUZXh0
Q29udGVudEVsZW1lbnQuaCBiL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5oCmlu
ZGV4IGQwMDZhODk0OGFkODU4MDkyNGFhZjI3Zjg0MTgzYTc4ODZhNjI4MmMuLjQzNmE2MDIzMGE1
ZTZlNjAxNmMwMjM4Yjc1YzgyM2EwZmU2ZDBkOWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NW
R1RleHRDb250ZW50RWxlbWVudC5oCisrKyBiL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxl
bWVudC5oCkBAIC00NCw3ICs0NCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAg
U1ZHVGV4dENvbnRlbnRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwog
ICAgICAgICB2aXJ0dWFsIH5TVkdUZXh0Q29udGVudEVsZW1lbnQoKTsKLSAgICAgICAgCisKKyAg
ICAgICAgLy8gQWxsIHJlbmRlcmVycyBjcmVhdGVkIGJ5IHN2ZyB0ZXh0IGVsZW1lbnRzIGFyZSBD
U1MgQm94IE1vZGVsCisgICAgICAgIC8vIHJlbmRlcmVycyBzbyB0aGF0IHRoZXkgcGxheSBuaWNl
IHdpdGggdGhlIHRleHQgc3lzdGVtLgorICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVu
ZGVyZXIoKSBjb25zdDsKKwogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsg
cmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzVGV4
dENvbnRlbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
c3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcvU1ZHVGV4dFBv
c2l0aW9uaW5nRWxlbWVudC5jcHAKaW5kZXggODYyMzFmOGI0Mjg0YzZkN2ZlY2RlOWUyMDVjMmY2
NGQwNmY5ZTUwYy4uYTdiN2YzZmQxNzAwY2UzZjY1ZjEzNTM1NjhkMGIxZDJlYTZkZTIzZSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5jcHAKKysrIGIv
V2ViQ29yZS9zdmcvU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5jcHAKQEAgLTI0LDcgKzI0LDcg
QEAKICNpbmNsdWRlICJTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgiCiAKICNpbmNsdWRlICJB
dHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJC
b3hNb2RlbE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVk
ZSAiU1ZHTGVuZ3RoTGlzdC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>