<?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>126118</bug_id>
          
          <creation_ts>2013-12-21 06:23:16 -0800</creation_ts>
          <short_desc>Figure out if node is focusable without requiring renderer</short_desc>
          <delta_ts>2014-06-06 14:04:09 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>126073</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>buildbot</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>962242</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-12-21 06:23:16 -0800</bug_when>
    <thetext>It only needs style not renderer. With increased laziness forcing render tree construction for this is getting troublesome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962251</commentid>
    <comment_count>1</comment_count>
      <attachid>219850</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-12-21 06:57:03 -0800</bug_when>
    <thetext>Created attachment 219850
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962252</commentid>
    <comment_count>2</comment_count>
      <attachid>219850</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-12-21 07:07:47 -0800</bug_when>
    <thetext>Comment on attachment 219850
patch

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

This seems like a pretty good solution. r=me.

&gt; Source/WebCore/dom/Node.cpp:566
&gt; +    if (!document().renderView())
&gt; +        return false;

How about checking !Document::hasLivingRenderTree() here instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962254</commentid>
    <comment_count>3</comment_count>
      <attachid>219850</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-12-21 07:47:40 -0800</bug_when>
    <thetext>Comment on attachment 219850
patch

Attachment 219850 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/49668183</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962255</commentid>
    <comment_count>4</comment_count>
      <attachid>219851</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-12-21 07:55:50 -0800</bug_when>
    <thetext>Created attachment 219851
fix release build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962259</commentid>
    <comment_count>5</comment_count>
      <attachid>219853</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-12-21 09:43:23 -0800</bug_when>
    <thetext>Created attachment 219853
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962260</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-12-21 10:48:55 -0800</bug_when>
    <thetext>https://trac.webkit.org/r160966</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013846</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-06-06 14:04:09 -0700</bug_when>
    <thetext>This patch also fixed https://bugs.webkit.org/show_bug.cgi?id=133371.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219850</attachid>
            <date>2013-12-21 06:57:03 -0800</date>
            <delta_ts>2013-12-21 07:55:50 -0800</delta_ts>
            <desc>patch</desc>
            <filename>has-editable-style.patch</filename>
            <type>text/plain</type>
            <size>67941</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MDk2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDEzLTEyLTIxICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBGaWd1cmUgb3V0IGlmIG5vZGUg
aXMgZm9jdXNhYmxlIHdpdGhvdXQgcmVxdWlyaW5nIHJlbmRlcmVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjYxMTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmNvbXB1dGVkU3R5bGUpOgorICAgICAgICAKKyAgICAgICAg
ICAgIFVzZSBpbkRvY3VtZW50KCkgdGVzdCBpbnN0ZWFkIG9mIHRoZSBhdHRhY2hlZCgpIHRlc3Qu
IFdlIGNhbiBjb21wdXRlIHN0eWxlIGZvciBhbnl0aGluZyB0aGF0CisgICAgICAgICAgICBpcyBp
biBkb2N1bWVudC4KKworICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OmlzQ29udGVudEVkaXRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzQ29u
dGVudFJpY2hseUVkaXRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omhhc0VkaXRhYmxl
U3R5bGUpOgorICAgICAgICAKKyAgICAgICAgICAgIFVzZSBjb21wdXRlZFN0eWxlIGluc3RlYWQg
b2YgZ2V0dGluZyB0aGUgc3R5bGUgZnJvbSByZW5kZXJlci4gQ29tcHV0ZWQgc3R5bGUgZ2V0cyBj
b25zdHJ1Y3RlZAorICAgICAgICAgICAgb24gZGVtYW5kIGlmIHJlbmRlcmVyIGRvZXMgbm90IGV4
aXN0LiBJZiBpdCBkb2VzIHRoZW4gdGhlIGV4aXN0aW5nIHN0eWxlIGlzIHVzZWQuCisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIFJlbW92ZSBsb29waW5nIGFzIGNvbXB1dGVkU3R5bGUgYWxyZWFk
eSBkb2VzIHRoZSByaWdodCB0aGluZy4KKworICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXNFZGl0
YWJsZVRvQWNjZXNzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjYW5TdGFydFNl
bGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc1Jvb3RFZGl0YWJsZUVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cm9vdEVkaXRhYmxlRWxlbWVudCk6CisgICAgICAg
ICogZG9tL05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omhhc0VkaXRhYmxlU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aGFzUmljaGx5RWRpdGFibGVTdHlsZSk6CisgICAg
ICAgIAorICAgICAgICAgICAgUmVuYW1lZCBmcm9tIHJlbmRlcmVySXNFZGl0YWJsZSBzaW5jZSB0
aGVzZSBubyBsb25nZXIgcmVxdWlyZSByZW5kZXJlci4KKworICAgICAgICAoV2ViQ29yZTo6SFRN
TEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorICAgICAgICAKKyAgICAgICAgICAgIFN0b3AgY2Fs
bGluZyB1cGRhdGVTdHlsZUlmTmVlZGVkKCkgYW5kIGZvcmNpbmcgcmVuZGVyIHRyZWUgY29uc3Ry
dWN0aW9uLgorCiAyMDEzLTEyLTIxICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KIAogICAgICAgICBbU09VUF0gUmVzb3VyY2VIYW5kbGVTb3VwIHNob3VsZCB1c2Ug
YXN5bmMgY2xpZW50IGNhbGxiYWNrcyB3aGVuIGNsaWVudCB1c2VzIGFzeW5jIGNhbGxiYWNrcwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2hpbGRy
ZW5DaAogICAgICAgICAgICAgYXhPYmplY3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uKHBhcmVu
dCwgcGFyZW50LT5kb2N1bWVudCgpLCBBWE9iamVjdENhY2hlOjpBWExpdmVSZWdpb25DaGFuZ2Vk
KTsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHRoaXMgZWxlbWVudCBpcyBhbiBBUklBIHRleHQg
Y29udHJvbCwgbm90aWZ5IHRoZSBBVCBvZiBjaGFuZ2VzLgotICAgICAgICBpZiAocGFyZW50LT5p
c0FSSUFUZXh0Q29udHJvbCgpICYmICFwYXJlbnQtPmlzTmF0aXZlVGV4dENvbnRyb2woKSAmJiAh
cGFyZW50LT5ub2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgICAgICBpZiAocGFyZW50
LT5pc0FSSUFUZXh0Q29udHJvbCgpICYmICFwYXJlbnQtPmlzTmF0aXZlVGV4dENvbnRyb2woKSAm
JiAhcGFyZW50LT5ub2RlKCktPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgICAgIGF4T2Jq
ZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvbihwYXJlbnQsIHBhcmVudC0+ZG9jdW1lbnQoKSwg
QVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNoYW5nZWQpOwogICAgIH0KIH0KQEAgLTczNyw3ICs3Mzcs
NyBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc1JlYWRPbmx5CiAgICAgICAgICAg
ICByZXR1cm4gaW5wdXQtPmlzUmVhZE9ubHkoKTsKICAgICB9CiAKLSAgICByZXR1cm4gIW5vZGUt
PnJlbmRlcmVySXNFZGl0YWJsZSgpOworICAgIHJldHVybiAhbm9kZS0+aGFzRWRpdGFibGVTdHls
ZSgpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc1JlcXVpcmVkKCkgY29u
c3QKQEAgLTIwNDgsNyArMjA0OCw3IEBAIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWMKICAgICByZXR1cm4gcm9sZTsKIH0gICAKIAotLy8gSWYgeW91IGNhbGwgbm9kZS0+
cmVuZGVyZXJJc0VkaXRhYmxlKCkgc2luY2UgdGhhdCB3aWxsIHJldHVybiB0cnVlIGlmIGFuIGFu
Y2VzdG9yIGlzIGVkaXRhYmxlLgorLy8gSWYgeW91IGNhbGwgbm9kZS0+aGFzRWRpdGFibGVTdHls
ZSgpIHNpbmNlIHRoYXQgd2lsbCByZXR1cm4gdHJ1ZSBpZiBhbiBhbmNlc3RvciBpcyBlZGl0YWJs
ZS4KIC8vIFRoaXMgb25seSByZXR1cm5zIHRydWUgaWYgdGhpcyBpcyB0aGUgZWxlbWVudCB0aGF0
IGFjdHVhbGx5IGhhcyB0aGUgY29udGVudEVkaXRhYmxlIGF0dHJpYnV0ZSBzZXQuCiBib29sIEFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpoYXNDb250ZW50RWRpdGFibGVBdHRyaWJ1dGVTZXQoKSBj
b25zdAogewpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAxNjA5MTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NDIsMTEgKzU0MiwxMSBAQCBib29sIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmlzUmVhZE9uCiAgICAgCiAgICAgaWYgKGlzV2ViQXJlYSgpKSB7CiAgICAg
ICAgIGlmIChIVE1MRWxlbWVudCogYm9keSA9IG1fcmVuZGVyZXItPmRvY3VtZW50KCkuYm9keSgp
KSB7Ci0gICAgICAgICAgICBpZiAoYm9keS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgICAg
ICAgICBpZiAoYm9keS0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiAhbV9yZW5kZXJlci0+ZG9jdW1l
bnQoKS5yZW5kZXJlcklzRWRpdGFibGUoKTsKKyAgICAgICAgcmV0dXJuICFtX3JlbmRlcmVyLT5k
b2N1bWVudCgpLmhhc0VkaXRhYmxlU3R5bGUoKTsKICAgICB9CiAKICAgICByZXR1cm4gQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OmlzUmVhZE9ubHkoKTsKQEAgLTEyNTUsNyArMTI1NSw3IEBAIGJv
b2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y29tcHV0ZUEKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAogICAgIC8vIEFueXRoaW5nIHRoYXQgaXMgY29udGVudCBlZGl0YWJsZSBzaG91
bGQgbm90IGJlIGlnbm9yZWQuCi0gICAgLy8gSG93ZXZlciwgb25lIGNhbm5vdCBqdXN0IGNhbGwg
bm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgc2luY2UgdGhhdCB3aWxsIGFzayBpZiBpdHMgcGFy
ZW50cworICAgIC8vIEhvd2V2ZXIsIG9uZSBjYW5ub3QganVzdCBjYWxsIG5vZGUtPmhhc0VkaXRh
YmxlU3R5bGUoKSBzaW5jZSB0aGF0IHdpbGwgYXNrIGlmIGl0cyBwYXJlbnRzCiAgICAgLy8gYXJl
IGFsc28gZWRpdGFibGUuIE9ubHkgdGhlIHRvcCBsZXZlbCBjb250ZW50IGVkaXRhYmxlIHJlZ2lv
biBzaG91bGQgYmUgZXhwb3NlZC4KICAgICBpZiAoaGFzQ29udGVudEVkaXRhYmxlQXR0cmlidXRl
U2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI3NDQsNyArMjc0NCw3IEBAIHZvaWQg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dGV4dENoYW4KICAgICAgICAgaWYgKHBhcmVudC0+
c3VwcG9ydHNBUklBTGl2ZVJlZ2lvbigpKQogICAgICAgICAgICAgY2FjaGUtPnBvc3ROb3RpZmlj
YXRpb24ocmVuZGVyUGFyZW50LCBBWE9iamVjdENhY2hlOjpBWExpdmVSZWdpb25DaGFuZ2VkKTsK
IAotICAgICAgICBpZiAocGFyZW50LT5pc0FSSUFUZXh0Q29udHJvbCgpICYmICFwYXJlbnQtPmlz
TmF0aXZlVGV4dENvbnRyb2woKSAmJiAhcGFyZW50LT5ub2RlKCktPnJlbmRlcmVySXNFZGl0YWJs
ZSgpKQorICAgICAgICBpZiAocGFyZW50LT5pc0FSSUFUZXh0Q29udHJvbCgpICYmICFwYXJlbnQt
PmlzTmF0aXZlVGV4dENvbnRyb2woKSAmJiAhcGFyZW50LT5ub2RlKCktPmhhc0VkaXRhYmxlU3R5
bGUoKSkKICAgICAgICAgICAgIGNhY2hlLT5wb3N0Tm90aWZpY2F0aW9uKHJlbmRlclBhcmVudCwg
QVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNoYW5nZWQpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAJKHJl
dmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eVRhYmxlOjppc0RhdGFUYWJsZSgpIGMKICAgICAvLyBXaGVuIGEgc2VjdGlvbiBv
ZiB0aGUgZG9jdW1lbnQgaXMgY29udGVudEVkaXRhYmxlLCBhbGwgdGFibGVzIHNob3VsZCBiZQog
ICAgIC8vIHRyZWF0ZWQgYXMgZGF0YSB0YWJsZXMsIG90aGVyd2lzZSB1c2VycyBtYXkgbm90IGJl
IGFibGUgdG8gd29yayB3aXRoIHJpY2gKICAgICAvLyB0ZXh0IGVkaXRvcnMgdGhhdCBhbGxvdyBj
cmVhdGluZyBhbmQgZWRpdGluZyB0YWJsZXMuCi0gICAgaWYgKG5vZGUoKSAmJiBub2RlKCktPnJl
bmRlcmVySXNFZGl0YWJsZSgpKQorICAgIGlmIChub2RlKCkgJiYgbm9kZSgpLT5oYXNFZGl0YWJs
ZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gVGhpcyBlbXBsb3lzIGEg
aGV1cmlzdGljIHRvIGRldGVybWluZSBpZiB0aGlzIHRhYmxlIHNob3VsZCBhcHBlYXIuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDE2MDkwOCkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw3ICszMjgsNyBAQCBz
dGF0aWMgV2lkZ2V0KiB3aWRnZXRGb3JFbGVtZW50KEVsZW1lbnQqCiBzdGF0aWMgYm9vbCBhY2Nl
cHRzRWRpdGluZ0ZvY3VzKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUpOwotICAgIEFT
U0VSVChub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSk7CisgICAgQVNTRVJUKG5vZGUtPmhhc0Vk
aXRhYmxlU3R5bGUoKSk7CiAKICAgICBOb2RlKiByb290ID0gbm9kZS0+cm9vdEVkaXRhYmxlRWxl
bWVudCgpOwogICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MDkwOCkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0OCw3ICsyMTQ4LDcgQEAg
UmVuZGVyU3R5bGUqIEVsZW1lbnQ6OmNvbXB1dGVkU3R5bGUoUHNldQogICAgICAgICByZXR1cm4g
dXNlZFN0eWxlOwogICAgIH0KIAotICAgIGlmICghYXR0YWNoZWQoKSkgeworICAgIGlmICghaW5E
b2N1bWVudCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUcnkgdG8gZG8gYmV0dGVyIHRoYW4gdGhp
cy4gRW5zdXJlIHRoYXQgc3R5bGVGb3JFbGVtZW50KCkgd29ya3MgZm9yIGVsZW1lbnRzIHRoYXQg
YXJlIG5vdCBpbiB0aGUKICAgICAgICAgLy8gZG9jdW1lbnQgdHJlZSBhbmQgZmlndXJlIG91dCB3
aGVuIHRvIGRlc3Ryb3kgdGhlIGNvbXB1dGVkIHN0eWxlIGZvciBzdWNoIGVsZW1lbnRzLgogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDE2MDkw
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQy
LDE0ICs1NDIsMTIgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBOb2RlOjpuYW1lc3BhY2VVUkkoKQog
CiBib29sIE5vZGU6OmlzQ29udGVudEVkaXRhYmxlKFVzZXJTZWxlY3RBbGxUcmVhdG1lbnQgdHJl
YXRtZW50KQogewotICAgIGRvY3VtZW50KCkudXBkYXRlU3R5bGVJZk5lZWRlZCgpOwotICAgIHJl
dHVybiByZW5kZXJlcklzRWRpdGFibGUoRWRpdGFibGUsIHRyZWF0bWVudCk7CisgICAgcmV0dXJu
IGhhc0VkaXRhYmxlU3R5bGUoRWRpdGFibGUsIHRyZWF0bWVudCk7CiB9CiAKIGJvb2wgTm9kZTo6
aXNDb250ZW50UmljaGx5RWRpdGFibGUoKQogewotICAgIGRvY3VtZW50KCkudXBkYXRlU3R5bGVJ
Zk5lZWRlZCgpOwotICAgIHJldHVybiByZW5kZXJlcklzRWRpdGFibGUoUmljaGx5RWRpdGFibGUs
IFVzZXJTZWxlY3RBbGxJc0Fsd2F5c05vbkVkaXRhYmxlKTsKKyAgICByZXR1cm4gaGFzRWRpdGFi
bGVTdHlsZShSaWNobHlFZGl0YWJsZSwgVXNlclNlbGVjdEFsbElzQWx3YXlzTm9uRWRpdGFibGUp
OwogfQogCiB2b2lkIE5vZGU6Omluc3BlY3QoKQpAQCAtNTYwLDEwICs1NTgsMTIgQEAgdm9pZCBO
b2RlOjppbnNwZWN0KCkKICNlbmRpZgogfQogCi1ib29sIE5vZGU6OnJlbmRlcmVySXNFZGl0YWJs
ZShFZGl0YWJsZUxldmVsIGVkaXRhYmxlTGV2ZWwsIFVzZXJTZWxlY3RBbGxUcmVhdG1lbnQgdHJl
YXRtZW50KSBjb25zdAorYm9vbCBOb2RlOjpoYXNFZGl0YWJsZVN0eWxlKEVkaXRhYmxlTGV2ZWwg
ZWRpdGFibGVMZXZlbCwgVXNlclNlbGVjdEFsbFRyZWF0bWVudCB0cmVhdG1lbnQpIGNvbnN0CiB7
CiAgICAgaWYgKGRvY3VtZW50KCkuZnJhbWUoKSAmJiBkb2N1bWVudCgpLmZyYW1lKCktPnBhZ2Uo
KSAmJiBkb2N1bWVudCgpLmZyYW1lKCktPnBhZ2UoKS0+aXNFZGl0YWJsZSgpICYmICFjb250YWlu
aW5nU2hhZG93Um9vdCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIWRvY3VtZW50
KCkucmVuZGVyVmlldygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaXNQc2V1
ZG9FbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU3MiwzNSArNTcyLDM0IEBA
IGJvb2wgTm9kZTo6cmVuZGVyZXJJc0VkaXRhYmxlKEVkaXRhYmxlTGUKICAgICAvLyBDb250YWlu
ZXJOb2RlOjpzZXRGb2N1cygpIGNhbGxzIHNldE5lZWRzU3R5bGVSZWNhbGMoKSwgc28gdGhlIGFz
c2VydGlvbgogICAgIC8vIHdvdWxkIGZpcmUgaW4gdGhlIG1pZGRsZSBvZiBEb2N1bWVudDo6c2V0
Rm9jdXNlZEVsZW1lbnQoKS4KIAotICAgIGZvciAoY29uc3QgTm9kZSogbm9kZSA9IHRoaXM7IG5v
ZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKChub2RlLT5pc0hU
TUxFbGVtZW50KCkgfHwgbm9kZS0+aXNEb2N1bWVudE5vZGUoKSkgJiYgbm9kZS0+cmVuZGVyZXIo
KSkgeworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGlzRG9jdW1lbnROb2RlKCkgPyByZW5kZXJT
dHlsZSgpIDogY29uc3RfY2FzdDxOb2RlKj4odGhpcyktPmNvbXB1dGVkU3R5bGUoKTsKKyAgICBp
ZiAoIXN0eWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHN0eWxlLT5kaXNwbGF5
KCkgPT0gTk9ORSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogI2lmIEVOQUJMRShVU0VSU0VMRUNU
X0FMTCkKLSAgICAgICAgICAgIC8vIEVsZW1lbnRzIHdpdGggdXNlci1zZWxlY3Q6IGFsbCBzdHls
ZSBhcmUgY29uc2lkZXJlZCBhdG9taWMKLSAgICAgICAgICAgIC8vIHRoZXJlZm9yZSBub24gZWRp
dGFibGUuCi0gICAgICAgICAgICBpZiAodHJlYXRtZW50ID09IFVzZXJTZWxlY3RBbGxJc0Fsd2F5
c05vbkVkaXRhYmxlICYmIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCkudXNlclNlbGVjdCgpID09
IFNFTEVDVF9BTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEVsZW1l
bnRzIHdpdGggdXNlci1zZWxlY3Q6IGFsbCBzdHlsZSBhcmUgY29uc2lkZXJlZCBhdG9taWMKKyAg
ICAvLyB0aGVyZWZvcmUgbm9uIGVkaXRhYmxlLgorICAgIGlmICh0cmVhdG1lbnQgPT0gVXNlclNl
bGVjdEFsbElzQWx3YXlzTm9uRWRpdGFibGUgJiYgc3R5bGUtPnVzZXJTZWxlY3QoKSA9PSBTRUxF
Q1RfQUxMKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAjZWxzZQotICAgICAgICAgICAgVU5VU0VE
X1BBUkFNKHRyZWF0bWVudCk7CisgICAgVU5VU0VEX1BBUkFNKHRyZWF0bWVudCk7CiAjZW5kaWYK
LSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS51c2VyTW9kaWZ5
KCkpIHsKLSAgICAgICAgICAgIGNhc2UgUkVBRF9PTkxZOgotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIGNhc2UgUkVBRF9XUklURToKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGNhc2UgUkVBRF9XUklURV9QTEFJTlRFWFRfT05MWToK
LSAgICAgICAgICAgICAgICByZXR1cm4gZWRpdGFibGVMZXZlbCAhPSBSaWNobHlFZGl0YWJsZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgc3dpdGNoIChzdHlsZS0+dXNlck1v
ZGlmeSgpKSB7CisgICAgY2FzZSBSRUFEX09OTFk6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBjYXNlIFJFQURfV1JJVEU6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgUkVBRF9X
UklURV9QTEFJTlRFWFRfT05MWToKKyAgICAgICAgcmV0dXJuIGVkaXRhYmxlTGV2ZWwgIT0gUmlj
aGx5RWRpdGFibGU7CiAgICAgfQotCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCiBib29sIE5vZGU6OmlzRWRpdGFibGVUb0FjY2Vzc2liaWxpdHkoRWRp
dGFibGVMZXZlbCBlZGl0YWJsZUxldmVsKSBjb25zdAogewotICAgIGlmIChyZW5kZXJlcklzRWRp
dGFibGUoZWRpdGFibGVMZXZlbCkpCisgICAgaWYgKGhhc0VkaXRhYmxlU3R5bGUoZWRpdGFibGVM
ZXZlbCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gRklYTUU6IFJlc3BlY3QgZWRp
dGFibGVMZXZlbCBmb3IgQVJJQSBlZGl0YWJsZSBlbGVtZW50cy4KQEAgLTkyMSw3ICs5MjAsNyBA
QCBpbnQgTm9kZTo6bWF4Q2hhcmFjdGVyT2Zmc2V0KCkgY29uc3QKIC8vIGlzIG9idmlvdXNseSBt
aXNwbGFjZWQuCiBib29sIE5vZGU6OmNhblN0YXJ0U2VsZWN0aW9uKCkgY29uc3QKIHsKLSAgICBp
ZiAocmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgaWYgKGhhc0VkaXRhYmxlU3R5bGUoKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAocmVuZGVyZXIoKSkgewpAQCAtMTAxNyw3ICsx
MDE2LDcgQEAgdm9pZCBOb2RlOjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiBpbgogCiBib29s
IE5vZGU6OmlzUm9vdEVkaXRhYmxlRWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHJlbmRl
cmVySXNFZGl0YWJsZSgpICYmIGlzRWxlbWVudE5vZGUoKSAmJiAoIXBhcmVudE5vZGUoKSB8fCAh
cGFyZW50Tm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKQorICAgIHJldHVybiBoYXNFZGl0YWJs
ZVN0eWxlKCkgJiYgaXNFbGVtZW50Tm9kZSgpICYmICghcGFyZW50Tm9kZSgpIHx8ICFwYXJlbnRO
b2RlKCktPmhhc0VkaXRhYmxlU3R5bGUoKQogICAgICAgICB8fCAhcGFyZW50Tm9kZSgpLT5pc0Vs
ZW1lbnROb2RlKCkgfHwgaGFzVGFnTmFtZShib2R5VGFnKSk7CiB9CiAKQEAgLTEwMzQsNyArMTAz
Myw3IEBAIEVsZW1lbnQqIE5vZGU6OnJvb3RFZGl0YWJsZUVsZW1lbnQoRWRpdGEKIEVsZW1lbnQq
IE5vZGU6OnJvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdAogewogICAgIEVsZW1lbnQqIHJlc3Vs
dCA9IDA7Ci0gICAgZm9yIChOb2RlKiBuID0gY29uc3RfY2FzdDxOb2RlKj4odGhpcyk7IG4gJiYg
bi0+cmVuZGVyZXJJc0VkaXRhYmxlKCk7IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKKyAgICBmb3Ig
KE5vZGUqIG4gPSBjb25zdF9jYXN0PE5vZGUqPih0aGlzKTsgbiAmJiBuLT5oYXNFZGl0YWJsZVN0
eWxlKCk7IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5v
ZGUoKSkKICAgICAgICAgICAgIHJlc3VsdCA9IHRvRWxlbWVudChuKTsKICAgICAgICAgaWYgKG4t
Pmhhc1RhZ05hbWUoYm9keVRhZykpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDE2MDkwOCkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0MiwxMSAr
MzQyLDExIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaW5zcGVjdCgpOwogCi0gICAgYm9vbCByZW5k
ZXJlcklzRWRpdGFibGUoRWRpdGFibGVUeXBlIGVkaXRhYmxlVHlwZSA9IENvbnRlbnRJc0VkaXRh
YmxlLCBVc2VyU2VsZWN0QWxsVHJlYXRtZW50IHRyZWF0bWVudCA9IFVzZXJTZWxlY3RBbGxJc0Fs
d2F5c05vbkVkaXRhYmxlKSBjb25zdAorICAgIGJvb2wgaGFzRWRpdGFibGVTdHlsZShFZGl0YWJs
ZVR5cGUgZWRpdGFibGVUeXBlID0gQ29udGVudElzRWRpdGFibGUsIFVzZXJTZWxlY3RBbGxUcmVh
dG1lbnQgdHJlYXRtZW50ID0gVXNlclNlbGVjdEFsbElzQWx3YXlzTm9uRWRpdGFibGUpIGNvbnN0
CiAgICAgewogICAgICAgICBzd2l0Y2ggKGVkaXRhYmxlVHlwZSkgewogICAgICAgICBjYXNlIENv
bnRlbnRJc0VkaXRhYmxlOgotICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVySXNFZGl0YWJsZShF
ZGl0YWJsZSwgdHJlYXRtZW50KTsKKyAgICAgICAgICAgIHJldHVybiBoYXNFZGl0YWJsZVN0eWxl
KEVkaXRhYmxlLCB0cmVhdG1lbnQpOwogICAgICAgICBjYXNlIEhhc0VkaXRhYmxlQVhSb2xlOgog
ICAgICAgICAgICAgcmV0dXJuIGlzRWRpdGFibGVUb0FjY2Vzc2liaWxpdHkoRWRpdGFibGUpOwog
ICAgICAgICB9CkBAIC0zNTQsMTEgKzM1NCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBib29sIHJlbmRlcmVySXNSaWNobHlFZGl0YWJsZShFZGl0YWJs
ZVR5cGUgZWRpdGFibGVUeXBlID0gQ29udGVudElzRWRpdGFibGUpIGNvbnN0CisgICAgYm9vbCBo
YXNSaWNobHlFZGl0YWJsZVN0eWxlKEVkaXRhYmxlVHlwZSBlZGl0YWJsZVR5cGUgPSBDb250ZW50
SXNFZGl0YWJsZSkgY29uc3QKICAgICB7CiAgICAgICAgIHN3aXRjaCAoZWRpdGFibGVUeXBlKSB7
CiAgICAgICAgIGNhc2UgQ29udGVudElzRWRpdGFibGU6Ci0gICAgICAgICAgICByZXR1cm4gcmVu
ZGVyZXJJc0VkaXRhYmxlKFJpY2hseUVkaXRhYmxlLCBVc2VyU2VsZWN0QWxsSXNBbHdheXNOb25F
ZGl0YWJsZSk7CisgICAgICAgICAgICByZXR1cm4gaGFzRWRpdGFibGVTdHlsZShSaWNobHlFZGl0
YWJsZSwgVXNlclNlbGVjdEFsbElzQWx3YXlzTm9uRWRpdGFibGUpOwogICAgICAgICBjYXNlIEhh
c0VkaXRhYmxlQVhSb2xlOgogICAgICAgICAgICAgcmV0dXJuIGlzRWRpdGFibGVUb0FjY2Vzc2li
aWxpdHkoUmljaGx5RWRpdGFibGUpOwogICAgICAgICB9CkBAIC02NTUsNyArNjU1LDcgQEAgcHJp
dmF0ZToKICAgICBib29sIGhhc1RyZWVTaGFyZWRQYXJlbnQoKSBjb25zdCB7IHJldHVybiAhIXBh
cmVudE5vZGUoKTsgfQogCiAgICAgZW51bSBFZGl0YWJsZUxldmVsIHsgRWRpdGFibGUsIFJpY2hs
eUVkaXRhYmxlIH07Ci0gICAgYm9vbCByZW5kZXJlcklzRWRpdGFibGUoRWRpdGFibGVMZXZlbCwg
VXNlclNlbGVjdEFsbFRyZWF0bWVudCA9IFVzZXJTZWxlY3RBbGxJc0Fsd2F5c05vbkVkaXRhYmxl
KSBjb25zdDsKKyAgICBib29sIGhhc0VkaXRhYmxlU3R5bGUoRWRpdGFibGVMZXZlbCwgVXNlclNl
bGVjdEFsbFRyZWF0bWVudCA9IFVzZXJTZWxlY3RBbGxJc0Fsd2F5c05vbkVkaXRhYmxlKSBjb25z
dDsKICAgICBib29sIGlzRWRpdGFibGVUb0FjY2Vzc2liaWxpdHkoRWRpdGFibGVMZXZlbCkgY29u
c3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBPVkVSUklERTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL1Bvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBzdGF0
aWMgTm9kZSogbmV4dFJlbmRlcmVkRWRpdGFibGUoTm9kZSogCiB7CiAgICAgd2hpbGUgKChub2Rl
ID0gbmV4dExlYWZOb2RlKG5vZGUpKSkgewogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFyZW5kZXJlciB8fCAhbm9kZS0+cmVu
ZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgICAgIGlmICghcmVuZGVyZXIgfHwgIW5vZGUtPmhhc0Vk
aXRhYmxlU3R5bGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoaGFzSW5s
aW5lQm94V3JhcHBlcigqcmVuZGVyZXIpKQogICAgICAgICAgICAgcmV0dXJuIG5vZGU7CkBAIC03
OSw3ICs3OSw3IEBAIHN0YXRpYyBOb2RlKiBwcmV2aW91c1JlbmRlcmVkRWRpdGFibGUoTm8KIHsK
ICAgICB3aGlsZSAoKG5vZGUgPSBwcmV2aW91c0xlYWZOb2RlKG5vZGUpKSkgewogICAgICAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFy
ZW5kZXJlciB8fCAhbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgICAgIGlmICghcmVu
ZGVyZXIgfHwgIW5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBpZiAoaGFzSW5saW5lQm94V3JhcHBlcigqcmVuZGVyZXIpKQogICAgICAgICAg
ICAgcmV0dXJuIG5vZGU7CkBAIC00MzQsMTUgKzQzNCwxNSBAQCBib29sIFBvc2l0aW9uOjphdExh
c3RFZGl0aW5nUG9zaXRpb25Gb3JOCiBib29sIFBvc2l0aW9uOjphdEVkaXRpbmdCb3VuZGFyeSgp
IGNvbnN0CiB7CiAgICAgUG9zaXRpb24gbmV4dFBvc2l0aW9uID0gZG93bnN0cmVhbShDYW5Dcm9z
c0VkaXRpbmdCb3VuZGFyeSk7Ci0gICAgaWYgKGF0Rmlyc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2Rl
KCkgJiYgbmV4dFBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFuZXh0UG9zaXRpb24uZGVwcmVjYXRl
ZE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgaWYgKGF0Rmlyc3RFZGl0aW5nUG9z
aXRpb25Gb3JOb2RlKCkgJiYgbmV4dFBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFuZXh0UG9zaXRp
b24uZGVwcmVjYXRlZE5vZGUoKS0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgCiAgICAgUG9zaXRpb24gcHJldlBvc2l0aW9uID0gdXBzdHJlYW0oQ2Fu
Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwotICAgIGlmIChhdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JO
b2RlKCkgJiYgcHJldlBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFwcmV2UG9zaXRpb24uZGVwcmVj
YXRlZE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgaWYgKGF0TGFzdEVkaXRpbmdQ
b3NpdGlvbkZvck5vZGUoKSAmJiBwcmV2UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIXByZXZQb3Np
dGlvbi5kZXByZWNhdGVkTm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAKLSAgICByZXR1cm4gbmV4dFBvc2l0aW9uLmlzTm90TnVsbCgpICYm
ICFuZXh0UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkKLSAg
ICAgICAgJiYgcHJldlBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFwcmV2UG9zaXRpb24uZGVwcmVj
YXRlZE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCk7CisgICAgcmV0dXJuIG5leHRQb3NpdGlv
bi5pc05vdE51bGwoKSAmJiAhbmV4dFBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPmhhc0VkaXRh
YmxlU3R5bGUoKQorICAgICAgICAmJiBwcmV2UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIXByZXZQ
b3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCk7CiB9CiAKIE5vZGUq
IFBvc2l0aW9uOjpwYXJlbnRFZGl0aW5nQm91bmRhcnkoKSBjb25zdApAQCAtNDU1LDcgKzQ1NSw3
IEBAIE5vZGUqIFBvc2l0aW9uOjpwYXJlbnRFZGl0aW5nQm91bmRhcnkoKSAKICAgICAgICAgcmV0
dXJuIDA7CiAKICAgICBOb2RlKiBib3VuZGFyeSA9IG1fYW5jaG9yTm9kZS5nZXQoKTsKLSAgICB3
aGlsZSAoYm91bmRhcnkgIT0gZG9jdW1lbnRFbGVtZW50ICYmIGJvdW5kYXJ5LT5ub25TaGFkb3dC
b3VuZGFyeVBhcmVudE5vZGUoKSAmJiBtX2FuY2hvck5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgp
ID09IGJvdW5kYXJ5LT5wYXJlbnROb2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgIHdo
aWxlIChib3VuZGFyeSAhPSBkb2N1bWVudEVsZW1lbnQgJiYgYm91bmRhcnktPm5vblNoYWRvd0Jv
dW5kYXJ5UGFyZW50Tm9kZSgpICYmIG1fYW5jaG9yTm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpID09
IGJvdW5kYXJ5LT5wYXJlbnROb2RlKCktPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgYm91
bmRhcnkgPSBib3VuZGFyeS0+bm9uU2hhZG93Qm91bmRhcnlQYXJlbnROb2RlKCk7CiAgICAgCiAg
ICAgcmV0dXJuIGJvdW5kYXJ5OwpAQCAtNTkwLDE3ICs1OTAsMTcgQEAgUG9zaXRpb24gUG9zaXRp
b246OnVwc3RyZWFtKEVkaXRpbmdCb3VuZAogICAgIC8vIEZJWE1FOiBQb3NpdGlvbkl0ZXJhdG9y
IHNob3VsZCByZXNwZWN0IEJlZm9yZSBhbmQgQWZ0ZXIgcG9zaXRpb25zLgogICAgIFBvc2l0aW9u
SXRlcmF0b3IgbGFzdFZpc2libGUgPSBtX2FuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0FmdGVyQW5j
aG9yID8gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fYW5jaG9yTm9kZS5nZXQoKSwgY2Fy
ZXRNYXhPZmZzZXQobV9hbmNob3JOb2RlLmdldCgpKSkgOiAqdGhpczsKICAgICBQb3NpdGlvbkl0
ZXJhdG9yIGN1cnJlbnRQb3MgPSBsYXN0VmlzaWJsZTsKLSAgICBib29sIHN0YXJ0RWRpdGFibGUg
PSBzdGFydE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpOworICAgIGJvb2wgc3RhcnRFZGl0YWJs
ZSA9IHN0YXJ0Tm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpOwogICAgIE5vZGUqIGxhc3ROb2RlID0g
c3RhcnROb2RlOwogICAgIGJvb2wgYm91bmRhcnlDcm9zc2VkID0gZmFsc2U7CiAgICAgZm9yICg7
ICFjdXJyZW50UG9zLmF0U3RhcnQoKTsgY3VycmVudFBvcy5kZWNyZW1lbnQoKSkgewogICAgICAg
ICBOb2RlKiBjdXJyZW50Tm9kZSA9IGN1cnJlbnRQb3Mubm9kZSgpOwogICAgICAgICAKICAgICAg
ICAgLy8gRG9uJ3QgY2hlY2sgZm9yIGFuIGVkaXRhYmlsaXR5IGNoYW5nZSBpZiB3ZSBoYXZlbid0
IG1vdmVkIHRvIGEgZGlmZmVyZW50IG5vZGUsCi0gICAgICAgIC8vIHRvIGF2b2lkIHRoZSBleHBl
bnNlIG9mIGNvbXB1dGluZyByZW5kZXJlcklzRWRpdGFibGUoKS4KKyAgICAgICAgLy8gdG8gYXZv
aWQgdGhlIGV4cGVuc2Ugb2YgY29tcHV0aW5nIGhhc0VkaXRhYmxlU3R5bGUoKS4KICAgICAgICAg
aWYgKGN1cnJlbnROb2RlICE9IGxhc3ROb2RlKSB7CiAgICAgICAgICAgICAvLyBEb24ndCBjaGFu
Z2UgZWRpdGFiaWxpdHkuCi0gICAgICAgICAgICBib29sIGN1cnJlbnRFZGl0YWJsZSA9IGN1cnJl
bnROb2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKTsKKyAgICAgICAgICAgIGJvb2wgY3VycmVudEVk
aXRhYmxlID0gY3VycmVudE5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKTsKICAgICAgICAgICAgIGlm
IChzdGFydEVkaXRhYmxlICE9IGN1cnJlbnRFZGl0YWJsZSkgewogICAgICAgICAgICAgICAgIGlm
IChydWxlID09IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTcxNywxNyArNzE3LDE3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpkb3duc3Ry
ZWFtKEVkaXRpbmdCb3UKICAgICAvLyBGSVhNRTogUG9zaXRpb25JdGVyYXRvciBzaG91bGQgcmVz
cGVjdCBCZWZvcmUgYW5kIEFmdGVyIHBvc2l0aW9ucy4KICAgICBQb3NpdGlvbkl0ZXJhdG9yIGxh
c3RWaXNpYmxlID0gbV9hbmNob3JUeXBlID09IFBvc2l0aW9uSXNBZnRlckFuY2hvciA/IGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX2FuY2hvck5vZGUuZ2V0KCksIGNhcmV0TWF4T2Zmc2V0
KG1fYW5jaG9yTm9kZS5nZXQoKSkpIDogKnRoaXM7CiAgICAgUG9zaXRpb25JdGVyYXRvciBjdXJy
ZW50UG9zID0gbGFzdFZpc2libGU7Ci0gICAgYm9vbCBzdGFydEVkaXRhYmxlID0gc3RhcnROb2Rl
LT5yZW5kZXJlcklzRWRpdGFibGUoKTsKKyAgICBib29sIHN0YXJ0RWRpdGFibGUgPSBzdGFydE5v
ZGUtPmhhc0VkaXRhYmxlU3R5bGUoKTsKICAgICBOb2RlKiBsYXN0Tm9kZSA9IHN0YXJ0Tm9kZTsK
ICAgICBib29sIGJvdW5kYXJ5Q3Jvc3NlZCA9IGZhbHNlOwogICAgIGZvciAoOyAhY3VycmVudFBv
cy5hdEVuZCgpOyBjdXJyZW50UG9zLmluY3JlbWVudCgpKSB7ICAgCiAgICAgICAgIE5vZGUqIGN1
cnJlbnROb2RlID0gY3VycmVudFBvcy5ub2RlKCk7CiAgICAgICAgIAogICAgICAgICAvLyBEb24n
dCBjaGVjayBmb3IgYW4gZWRpdGFiaWxpdHkgY2hhbmdlIGlmIHdlIGhhdmVuJ3QgbW92ZWQgdG8g
YSBkaWZmZXJlbnQgbm9kZSwKLSAgICAgICAgLy8gdG8gYXZvaWQgdGhlIGV4cGVuc2Ugb2YgY29t
cHV0aW5nIHJlbmRlcmVySXNFZGl0YWJsZSgpLgorICAgICAgICAvLyB0byBhdm9pZCB0aGUgZXhw
ZW5zZSBvZiBjb21wdXRpbmcgaGFzRWRpdGFibGVTdHlsZSgpLgogICAgICAgICBpZiAoY3VycmVu
dE5vZGUgIT0gbGFzdE5vZGUpIHsKICAgICAgICAgICAgIC8vIERvbid0IGNoYW5nZSBlZGl0YWJp
bGl0eS4KLSAgICAgICAgICAgIGJvb2wgY3VycmVudEVkaXRhYmxlID0gY3VycmVudE5vZGUtPnJl
bmRlcmVySXNFZGl0YWJsZSgpOworICAgICAgICAgICAgYm9vbCBjdXJyZW50RWRpdGFibGUgPSBj
dXJyZW50Tm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpOwogICAgICAgICAgICAgaWYgKHN0YXJ0RWRp
dGFibGUgIT0gY3VycmVudEVkaXRhYmxlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHJ1bGUgPT0g
Q2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpA
QCAtOTQyLDEwICs5NDIsMTAgQEAgYm9vbCBQb3NpdGlvbjo6aXNDYW5kaWRhdGUoKSBjb25zdAog
ICAgICAgICBpZiAoYmxvY2subG9naWNhbEhlaWdodCgpIHx8IG1fYW5jaG9yTm9kZS0+aGFzVGFn
TmFtZShib2R5VGFnKSkgewogICAgICAgICAgICAgaWYgKCFQb3NpdGlvbjo6aGFzUmVuZGVyZWRO
b25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQoYmxvY2spKQogICAgICAgICAgICAgICAg
IHJldHVybiBhdEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpICYmICFQb3NpdGlvbjo6bm9k
ZUlzVXNlclNlbGVjdE5vbmUoZGVwcmVjYXRlZE5vZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4g
bV9hbmNob3JOb2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSAmJiAhUG9zaXRpb246Om5vZGVJc1Vz
ZXJTZWxlY3ROb25lKGRlcHJlY2F0ZWROb2RlKCkpICYmIGF0RWRpdGluZ0JvdW5kYXJ5KCk7Cisg
ICAgICAgICAgICByZXR1cm4gbV9hbmNob3JOb2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkgJiYgIVBv
c2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgpKSAmJiBhdEVkaXRp
bmdCb3VuZGFyeSgpOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBtX2Fu
Y2hvck5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNl
bGVjdE5vbmUoZGVwcmVjYXRlZE5vZGUoKSkgJiYgYXRFZGl0aW5nQm91bmRhcnkoKTsKKyAgICAg
ICAgcmV0dXJuIG1fYW5jaG9yTm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpICYmICFQb3NpdGlvbjo6
bm9kZUlzVXNlclNlbGVjdE5vbmUoZGVwcmVjYXRlZE5vZGUoKSkgJiYgYXRFZGl0aW5nQm91bmRh
cnkoKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Q
b3NpdGlvbkl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUG9z
aXRpb25JdGVyYXRvci5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2NSw3IEBA
IGJvb2wgUG9zaXRpb25JdGVyYXRvcjo6aXNDYW5kaWRhdGUoKSBjb24KICAgICAgICAgaWYgKGJs
b2NrLmxvZ2ljYWxIZWlnaHQoKSB8fCBtX2FuY2hvck5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykp
IHsKICAgICAgICAgICAgIGlmICghUG9zaXRpb246Omhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVz
Y2VuZGFudHNXaXRoSGVpZ2h0KGJsb2NrKSkKICAgICAgICAgICAgICAgICByZXR1cm4gYXRTdGFy
dE9mTm9kZSgpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobV9hbmNob3JOb2Rl
KTsKLSAgICAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgp
ICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobV9hbmNob3JOb2RlKSAmJiBQb3Np
dGlvbigqdGhpcykuYXRFZGl0aW5nQm91bmRhcnkoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2Fu
Y2hvck5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxl
Y3ROb25lKG1fYW5jaG9yTm9kZSkgJiYgUG9zaXRpb24oKnRoaXMpLmF0RWRpdGluZ0JvdW5kYXJ5
KCk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBw
ZW5kTm9kZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QXBwZW5kTm9kZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxNjA5MDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyAr
NDIsNyBAQCBBcHBlbmROb2RlQ29tbWFuZDo6QXBwZW5kTm9kZUNvbW1hbmQoUGFzCiAgICAgQVNT
RVJUKG1fbm9kZSk7CiAgICAgQVNTRVJUKCFtX25vZGUtPnBhcmVudE5vZGUoKSk7CiAKLSAgICBB
U1NFUlQobV9wYXJlbnQtPnJlbmRlcmVySXNFZGl0YWJsZSgpIHx8ICFtX3BhcmVudC0+YXR0YWNo
ZWQoKSk7CisgICAgQVNTRVJUKG1fcGFyZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkgfHwgIW1fcGFy
ZW50LT5hdHRhY2hlZCgpKTsKIH0KIAogc3RhdGljIHZvaWQgc2VuZEFYVGV4dENoYW5nZWRJZ25v
cmluZ0xpbmVCcmVha3MoTm9kZSogbm9kZSwgQVhPYmplY3RDYWNoZTo6QVhUZXh0Q2hhbmdlIHRl
eHRDaGFuZ2UpCkBAIC01OCw3ICs1OCw3IEBAIHN0YXRpYyB2b2lkIHNlbmRBWFRleHRDaGFuZ2Vk
SWdub3JpbmdMaW4KIAogdm9pZCBBcHBlbmROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAg
aWYgKCFtX3BhcmVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgJiYgbV9wYXJlbnQtPmF0dGFjaGVk
KCkpCisgICAgaWYgKCFtX3BhcmVudC0+aGFzRWRpdGFibGVTdHlsZSgpICYmIG1fcGFyZW50LT5h
dHRhY2hlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3BhcmVudC0+YXBwZW5kQ2hpbGQo
bV9ub2RlLmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBB
cHBlbmROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiAKIHZvaWQgQXBwZW5kTm9kZUNvbW1hbmQ6OmRv
VW5hcHBseSgpCiB7Ci0gICAgaWYgKCFtX3BhcmVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisg
ICAgaWYgKCFtX3BhcmVudC0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1cm47CiAg
ICAgICAgIAogICAgIC8vIE5lZWQgdG8gbm90aWZ5IHRoaXMgYmVmb3JlIGFjdHVhbGx5IGRlbGV0
aW5nIHRoZSB0ZXh0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
cHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxMSwxMiArNzExLDEyIEBA
IHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmZpeFJhbmdlQW5kQXBwbHkKIAogc3RhdGljIGJvb2wg
Y29udGFpbnNOb25FZGl0YWJsZVJlZ2lvbihOb2RlKiBub2RlKQogewotICAgIGlmICghbm9kZS0+
cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgaWYgKCFub2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgTm9kZSogc2libGluZyA9IE5vZGVUcmF2ZXJz
YWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG5vZGUpOwogICAgIGZvciAoTm9kZSogZGVzY2VuZGVu
dCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgZGVzY2VuZGVudCAmJiBkZXNjZW5kZW50ICE9IHNpYmxp
bmc7IGRlc2NlbmRlbnQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KGRlc2NlbmRlbnQpKSB7Ci0gICAg
ICAgIGlmICghZGVzY2VuZGVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgICAgIGlmICgh
ZGVzY2VuZGVudC0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCkBAIC03NTcsMTAgKzc1NywxMCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjph
cHBseUlubGluZVN0eWxlCiAgICAgZm9yIChSZWZQdHI8Tm9kZT4gbmV4dDsgbm9kZSAmJiBub2Rl
ICE9IHBhc3RFbmROb2RlOyBub2RlID0gbmV4dCkgewogICAgICAgICBuZXh0ID0gTm9kZVRyYXZl
cnNhbDo6bmV4dChub2RlLmdldCgpKTsKIAotICAgICAgICBpZiAoIW5vZGUtPnJlbmRlcmVyKCkg
fHwgIW5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgICAgICBpZiAoIW5vZGUtPnJlbmRl
cmVyKCkgfHwgIW5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAKLSAgICAgICAgaWYgKCFub2RlLT5yZW5kZXJlcklzUmljaGx5RWRpdGFibGUo
KSAmJiBub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5oYXNSaWNo
bHlFZGl0YWJsZVN0eWxlKCkgJiYgbm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7CiAgICAgICAgICAg
ICAvLyBUaGlzIGlzIGEgcGxhaW50ZXh0LW9ubHkgcmVnaW9uLiBPbmx5IHByb2NlZWQgaWYgaXQn
cyBmdWxseSBzZWxlY3RlZC4KICAgICAgICAgICAgIC8vIHBhc3RFbmROb2RlIGlzIHRoZSBub2Rl
IGFmdGVyIHRoZSBsYXN0IGZ1bGx5IHNlbGVjdGVkIG5vZGUsIHNvIGlmIGl0J3MgaW5zaWRlIG5v
ZGUgdGhlbgogICAgICAgICAgICAgLy8gbm9kZSBpc24ndCBmdWxseSBzZWxlY3RlZC4KQEAgLTc4
MCw3ICs3ODAsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGlmIChub2RlLT5jaGlsZE5v
ZGVDb3VudCgpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y29udGFpbnMocGFzdEVuZE5vZGUu
Z2V0KCkpIHx8IGNvbnRhaW5zTm9uRWRpdGFibGVSZWdpb24obm9kZS5nZXQoKSkgfHwgIW5vZGUt
PnBhcmVudE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgICAgICAgICBpZiAobm9k
ZS0+Y29udGFpbnMocGFzdEVuZE5vZGUuZ2V0KCkpIHx8IGNvbnRhaW5zTm9uRWRpdGFibGVSZWdp
b24obm9kZS5nZXQoKSkgfHwgIW5vZGUtPnBhcmVudE5vZGUoKS0+aGFzRWRpdGFibGVTdHlsZSgp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKGVkaXRpbmdJZ25v
cmVzQ29udGVudChub2RlLmdldCgpKSkgewogICAgICAgICAgICAgICAgIG5leHQgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihub2RlLmdldCgpKTsKQEAgLTEzNjAsMTMgKzEz
NjAsMTMgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3Vycm91bmROb2RlUmFuZwogCiAgICAg
UmVmUHRyPE5vZGU+IG5leHRTaWJsaW5nID0gZWxlbWVudC0+bmV4dFNpYmxpbmcoKTsKICAgICBS
ZWZQdHI8Tm9kZT4gcHJldmlvdXNTaWJsaW5nID0gZWxlbWVudC0+cHJldmlvdXNTaWJsaW5nKCk7
Ci0gICAgaWYgKG5leHRTaWJsaW5nICYmIG5leHRTaWJsaW5nLT5pc0VsZW1lbnROb2RlKCkgJiYg
bmV4dFNpYmxpbmctPnJlbmRlcmVySXNFZGl0YWJsZSgpCisgICAgaWYgKG5leHRTaWJsaW5nICYm
IG5leHRTaWJsaW5nLT5pc0VsZW1lbnROb2RlKCkgJiYgbmV4dFNpYmxpbmctPmhhc0VkaXRhYmxl
U3R5bGUoKQogICAgICAgICAmJiBhcmVJZGVudGljYWxFbGVtZW50cyhlbGVtZW50LmdldCgpLCB0
b0VsZW1lbnQobmV4dFNpYmxpbmcuZ2V0KCkpKSkKICAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVt
ZW50cyhlbGVtZW50LmdldCgpLCB0b0VsZW1lbnQobmV4dFNpYmxpbmcuZ2V0KCkpKTsKIAotICAg
IGlmIChwcmV2aW91c1NpYmxpbmcgJiYgcHJldmlvdXNTaWJsaW5nLT5pc0VsZW1lbnROb2RlKCkg
JiYgcHJldmlvdXNTaWJsaW5nLT5yZW5kZXJlcklzRWRpdGFibGUoKSkgeworICAgIGlmIChwcmV2
aW91c1NpYmxpbmcgJiYgcHJldmlvdXNTaWJsaW5nLT5pc0VsZW1lbnROb2RlKCkgJiYgcHJldmlv
dXNTaWJsaW5nLT5oYXNFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgTm9kZSogbWVyZ2VkRWxl
bWVudCA9IHByZXZpb3VzU2libGluZy0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgaWYgKG1lcmdl
ZEVsZW1lbnQtPmlzRWxlbWVudE5vZGUoKSAmJiBtZXJnZWRFbGVtZW50LT5yZW5kZXJlcklzRWRp
dGFibGUoKQorICAgICAgICBpZiAobWVyZ2VkRWxlbWVudC0+aXNFbGVtZW50Tm9kZSgpICYmIG1l
cmdlZEVsZW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKQogICAgICAgICAgICAgJiYgYXJlSWRlbnRp
Y2FsRWxlbWVudHModG9FbGVtZW50KHByZXZpb3VzU2libGluZy5nZXQoKSksIHRvRWxlbWVudCht
ZXJnZWRFbGVtZW50KSkpCiAgICAgICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKHRvRWxl
bWVudChwcmV2aW91c1NpYmxpbmcuZ2V0KCkpLCB0b0VsZW1lbnQobWVyZ2VkRWxlbWVudCkpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuY3BwCShyZXZpc2lvbiAxNjA5MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Nv
bXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3OCw3ICsxMjc4LDcg
QEAgYm9vbCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YnJlYWtPdXRPZkVtcAogICAgIC8vIEZJWE1F
OiBDYW4ndCB3ZSBkbyBzb21ldGhpbmcgYmV0dGVyIHdoZW4gdGhlIGltbWVkaWF0ZSBwYXJlbnQg
d2Fzbid0IGEgbGlzdCBub2RlPwogICAgIGlmICghbGlzdE5vZGUKICAgICAgICAgfHwgKCFsaXN0
Tm9kZS0+aGFzVGFnTmFtZSh1bFRhZykgJiYgIWxpc3ROb2RlLT5oYXNUYWdOYW1lKG9sVGFnKSkK
LSAgICAgICAgfHwgIWxpc3ROb2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKQorICAgICAgICB8fCAh
bGlzdE5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKQogICAgICAgICB8fCBsaXN0Tm9kZSA9PSBlbXB0
eUxpc3RJdGVtLT5yb290RWRpdGFibGVFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAxNjA5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBA
IERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI6OkRlbGV0ZUJ1dHRvbkNvbnQKIAogc3RhdGljIGJvb2wg
aXNEZWxldGFibGVFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlIHx8
ICFub2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgIW5vZGUtPmluRG9jdW1lbnQoKSB8fCAhbm9kZS0+
cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0hUTUxFbGVt
ZW50KCkgfHwgIW5vZGUtPmluRG9jdW1lbnQoKSB8fCAhbm9kZS0+aGFzRWRpdGFibGVTdHlsZSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBJbiBnZW5lcmFsIHdlIHdhbnQgdG8g
b25seSBkcmF3IHRoZSBVSSBhcm91bmQgb2JqZWN0IG9mIGEgY2VydGFpbiBhcmVhLCBidXQgd2Ug
c3RpbGwga2VlcCB0aGUgbWluIHdpZHRoL2hlaWdodCB0bwpAQCAtMTUyLDcgKzE1Miw3IEBAIHN0
YXRpYyBIVE1MRWxlbWVudCogZW5jbG9zaW5nRGVsZXRhYmxlRWwKIAogICAgIC8vIFRoZSBlbmNs
b3NpbmdOb2RlT2ZUeXBlIGZ1bmN0aW9uIG9ubHkgd29ya3Mgb24gbm9kZXMgdGhhdCBhcmUgZWRp
dGFibGUKICAgICAvLyAod2hpY2ggaXMgc3RyYW5nZSwgZ2l2ZW4gaXRzIG5hbWUpLgotICAgIGlm
ICghY29udGFpbmVyLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICBpZiAoIWNvbnRhaW5lci0+
aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIE5vZGUqIGVsZW1l
bnQgPSBlbmNsb3NpbmdOb2RlT2ZUeXBlKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29udGFpbmVyKSwg
JmlzRGVsZXRhYmxlRWxlbWVudCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0
ZUZyb21UZXh0Tm9kZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgdm9pZCBEZWxldGVGcm9tVGV4dE5vZGVDb21t
YW5kOjpkb1VuYXBwbAogewogICAgIEFTU0VSVChtX25vZGUpOwogCi0gICAgaWYgKCFtX25vZGUt
PnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgIGlmICghbV9ub2RlLT5oYXNFZGl0YWJsZVN0eWxl
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fbm9kZS0+aW5zZXJ0RGF0YShtX29mZnNldCwg
bV90ZXh0LCBJR05PUkVfRVhDRVBUSU9OKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQwLDcgKzM0MCw3IEBAIHN0YXRpYyBQb3NpdGlvbiBmaXJzdEVkaXRhYmxl
UG9zaXRpb25Jbk4KIHsKICAgICBBU1NFUlQobm9kZSk7CiAgICAgTm9kZSogbmV4dCA9IG5vZGU7
Ci0gICAgd2hpbGUgKG5leHQgJiYgIW5leHQtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgIHdo
aWxlIChuZXh0ICYmICFuZXh0LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIG5leHQgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KG5leHQsIG5vZGUpOwogICAgIHJldHVybiBuZXh0ID8gZmlyc3RQ
b3NpdGlvbkluT3JCZWZvcmVOb2RlKG5leHQpIDogUG9zaXRpb24oKTsKIH0KQEAgLTM1Miw3ICsz
NTIsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZU5vZGUoCiAgICAgICAg
IAogICAgIGlmIChtX3N0YXJ0Um9vdCAhPSBtX2VuZFJvb3QgJiYgIShub2RlLT5pc0Rlc2NlbmRh
bnRPZihtX3N0YXJ0Um9vdC5nZXQoKSkgJiYgbm9kZS0+aXNEZXNjZW5kYW50T2YobV9lbmRSb290
LmdldCgpKSkpIHsKICAgICAgICAgLy8gSWYgYSBub2RlIGlzIG5vdCBpbiBib3RoIHRoZSBzdGFy
dCBhbmQgZW5kIGVkaXRhYmxlIHJvb3RzLCByZW1vdmUgaXQgb25seSBpZiBpdHMgaW5zaWRlIGFu
IGVkaXRhYmxlIHJlZ2lvbi4KLSAgICAgICAgaWYgKCFub2RlLT5wYXJlbnROb2RlKCktPnJlbmRl
cmVySXNFZGl0YWJsZSgpKSB7CisgICAgICAgIGlmICghbm9kZS0+cGFyZW50Tm9kZSgpLT5oYXNF
ZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgICAgIC8vIERvbid0IHJlbW92ZSBub24tZWRpdGFi
bGUgYXRvbWljIG5vZGVzLgogICAgICAgICAgICAgaWYgKCFub2RlLT5maXJzdENoaWxkKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
aW5nU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Z1N0eWxlLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODgsNyArNjg4LDcgQEAgVHJpU3Rh
dGUgRWRpdGluZ1N0eWxlOjp0cmlTdGF0ZU9mU3R5bGUoYwogICAgIFRyaVN0YXRlIHN0YXRlID0g
RmFsc2VUcmlTdGF0ZTsKICAgICBib29sIG5vZGVJc1N0YXJ0ID0gdHJ1ZTsKICAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpOyBub2RlOyBub2Rl
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewotICAgICAgICBpZiAobm9kZS0+cmVuZGVy
ZXIoKSAmJiBub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkgeworICAgICAgICBpZiAobm9kZS0+
cmVuZGVyZXIoKSAmJiBub2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgICAgIENv
bXB1dGVkU3R5bGVFeHRyYWN0b3IgY29tcHV0ZWRTdHlsZShub2RlKTsKICAgICAgICAgICAgIFRy
aVN0YXRlIG5vZGVTdGF0ZSA9IHRyaVN0YXRlT2ZTdHlsZSgmY29tcHV0ZWRTdHlsZSwgbm9kZS0+
aXNUZXh0Tm9kZSgpID8gRWRpdGluZ1N0eWxlOjpEb05vdElnbm9yZVRleHRPbmx5UHJvcGVydGll
cyA6IEVkaXRpbmdTdHlsZTo6SWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzKTsKICAgICAgICAgICAg
IGlmIChub2RlSXNTdGFydCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2
aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMTIsNyArMzEyLDcgQEAgYm9vbCBFZGl0b3I6OmNhbkRlbGV0ZVJhbmdl
KFJhbmdlKiByYW5nZQogICAgIGlmICghc3RhcnRDb250YWluZXIgfHwgIWVuZENvbnRhaW5lcikK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmICghc3RhcnRDb250YWluZXItPnJl
bmRlcmVySXNFZGl0YWJsZSgpIHx8ICFlbmRDb250YWluZXItPnJlbmRlcmVySXNFZGl0YWJsZSgp
KQorICAgIGlmICghc3RhcnRDb250YWluZXItPmhhc0VkaXRhYmxlU3R5bGUoKSB8fCAhZW5kQ29u
dGFpbmVyLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmIChyYW5nZS0+Y29sbGFwc2VkKElHTk9SRV9FWENFUFRJT04pKSB7CkBAIC0yMDc0LDcgKzIw
NzQsNyBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hCiAgICAgCiAg
ICAgLy8gSWYgd2UncmUgbm90IGluIGFuIGVkaXRhYmxlIG5vZGUsIGJhaWwuCiAgICAgTm9kZSog
ZWRpdGFibGVOb2RlID0gc2VhcmNoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgaWYgKCFl
ZGl0YWJsZU5vZGUgfHwgIWVkaXRhYmxlTm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAg
aWYgKCFlZGl0YWJsZU5vZGUgfHwgIWVkaXRhYmxlTm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoZWRp
dGFibGVOb2RlKSkKQEAgLTIxNDMsNyArMjE0Myw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlz
c3BlbGxpbmdzQW5kQmFkR3IKIAogICAgIC8vIElmIHdlJ3JlIG5vdCBpbiBhbiBlZGl0YWJsZSBu
b2RlLCBiYWlsLgogICAgIE5vZGUqIGVkaXRhYmxlTm9kZSA9IHNwZWxsaW5nUmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCk7Ci0gICAgaWYgKCFlZGl0YWJsZU5vZGUgfHwgIWVkaXRhYmxlTm9kZS0+cmVu
ZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgaWYgKCFlZGl0YWJsZU5vZGUgfHwgIWVkaXRhYmxlTm9k
ZS0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWlzU3Bl
bGxDaGVja2luZ0VuYWJsZWRGb3IoZWRpdGFibGVOb2RlKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU1LDcg
KzI1NSw3IEBAIHN0YXRpYyB1bnNpZ25lZCB2ZXJ0aWNhbFNjcm9sbERpc3RhbmNlKEYKICAgICBp
ZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNCb3goKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7Ci0gICAgaWYg
KCEoc3R5bGUub3ZlcmZsb3dZKCkgPT0gT1NDUk9MTCB8fCBzdHlsZS5vdmVyZmxvd1koKSA9PSBP
QVVUTyB8fCBmb2N1c2VkRWxlbWVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpKQorICAgIGlmICgh
KHN0eWxlLm92ZXJmbG93WSgpID09IE9TQ1JPTEwgfHwgc3R5bGUub3ZlcmZsb3dZKCkgPT0gT0FV
VE8gfHwgZm9jdXNlZEVsZW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSkpCiAgICAgICAgIHJldHVy
biAwOwogICAgIGludCBoZWlnaHQgPSBzdGQ6Om1pbjxpbnQ+KHRvUmVuZGVyQm94KHJlbmRlcmVy
KS0+Y2xpZW50SGVpZ2h0KCksIGZyYW1lLnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpKTsKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bWF4KHN0ZDo6bWF4PGludD4oaGVpZ2h0
ICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgaGVpZ2h0IC0gU2Ny
b2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpLCAxKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCShyZXZpc2lvbiAxNjA5MDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0OSwxNCArMTQ5LDE0IEBAIE5vZGUqIGVuY2xvc2luZ0Jsb2NrVG9TcGxp
dFRyZWVUbyhOb2RlKiAKIHsKICAgICBOb2RlKiBsYXN0QmxvY2sgPSBzdGFydE5vZGU7CiAgICAg
Zm9yIChOb2RlKiBuID0gc3RhcnROb2RlOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7Ci0gICAg
ICAgIGlmICghbi0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgICAgIGlmICghbi0+aGFzRWRp
dGFibGVTdHlsZSgpKQogICAgICAgICAgICAgcmV0dXJuIGxhc3RCbG9jazsKLSAgICAgICAgaWYg
KGlzVGFibGVDZWxsKG4pIHx8IG4tPmhhc1RhZ05hbWUoYm9keVRhZykgfHwgIW4tPnBhcmVudE5v
ZGUoKSB8fCAhbi0+cGFyZW50Tm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSB8fCBpc0VsZW1l
bnRGb3JGb3JtYXRCbG9jayhuKSkKKyAgICAgICAgaWYgKGlzVGFibGVDZWxsKG4pIHx8IG4tPmhh
c1RhZ05hbWUoYm9keVRhZykgfHwgIW4tPnBhcmVudE5vZGUoKSB8fCAhbi0+cGFyZW50Tm9kZSgp
LT5oYXNFZGl0YWJsZVN0eWxlKCkgfHwgaXNFbGVtZW50Rm9yRm9ybWF0QmxvY2sobikpCiAgICAg
ICAgICAgICByZXR1cm4gbjsKICAgICAgICAgaWYgKGlzQmxvY2sobikpCiAgICAgICAgICAgICBs
YXN0QmxvY2sgPSBuOwogICAgICAgICBpZiAoaXNMaXN0RWxlbWVudChuKSkKLSAgICAgICAgICAg
IHJldHVybiBuLT5wYXJlbnROb2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpID8gbi0+cGFyZW50
Tm9kZSgpIDogbjsKKyAgICAgICAgICAgIHJldHVybiBuLT5wYXJlbnROb2RlKCktPmhhc0VkaXRh
YmxlU3R5bGUoKSA/IG4tPnBhcmVudE5vZGUoKSA6IG47CiAgICAgfQogICAgIHJldHVybiBsYXN0
QmxvY2s7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1ODksNyArMTU4OSw3IEBAIHZvaWQgRnJhbWVT
ZWxlY3Rpb246OnNlbGVjdEZyYW1lRWxlbWVudEkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICAvLyBUaGlzIG1ldGhvZCdzIHB1cnBvc2UgaXMgaXQgdG8gbWFrZSBpdCBlYXNpZXIgdG8g
c2VsZWN0IGlmcmFtZXMgKGluIG9yZGVyIHRvIGRlbGV0ZSB0aGVtKS4gIERvbid0IGRvIGFueXRo
aW5nIGlmIHRoZSBpZnJhbWUgaXNuJ3QgZGVsZXRhYmxlLgotICAgIGlmICghb3duZXJFbGVtZW50
UGFyZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICBpZiAoIW93bmVyRWxlbWVudFBhcmVu
dC0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBDcmVhdGUg
Y29tcHV0ZSBwb3NpdGlvbnMgYmVmb3JlIGFuZCBhZnRlciB0aGUgZWxlbWVudC4KQEAgLTIwMjQs
NyArMjAyNCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkZyb21Ob24KIAog
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgYm9vbCBj
YXJldEJyb3dzaW5nID0gbV9mcmFtZS0+c2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgp
OwotICAgIGlmICghaXNOb25lKCkgfHwgIShkb2N1bWVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkg
fHwgY2FyZXRCcm93c2luZykpCisgICAgaWYgKCFpc05vbmUoKSB8fCAhKGRvY3VtZW50LT5oYXNF
ZGl0YWJsZVN0eWxlKCkgfHwgY2FyZXRCcm93c2luZykpCiAgICAgICAgIHJldHVybjsKIAogICAg
IE5vZGUqIG5vZGUgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCShyZXZpc2lvbiAxNjA5MDQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
Myw3ICsxMzMsNyBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsgfQogICAg
IEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0Owog
Ci0gICAgYm9vbCByZW5kZXJlcklzRWRpdGFibGUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlv
bi5yZW5kZXJlcklzRWRpdGFibGUoKTsgfQorICAgIGJvb2wgaGFzRWRpdGFibGVTdHlsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmhhc0VkaXRhYmxlU3R5bGUoKTsgfQogICAgIGJvb2wg
aXNDb250ZW50RWRpdGFibGUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5pc0NvbnRlbnRF
ZGl0YWJsZSgpOyB9CiAgICAgYm9vbCBpc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2VsZWN0aW9uLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7IH0KICAgICAgCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNw
cAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRk
ZW50Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw3ICsxMjUsNyBAQCB2b2lkIElu
ZGVudE91dGRlbnRDb21tYW5kOjpvdXRkZW50UGFyYWdyCiAgICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVFbmRPZlBhcmFncmFwaCA9IGVuZE9mUGFyYWdyYXBoKHZpc2libGVTdGFydE9mUGFyYWdy
YXBoKTsKIAogICAgIE5vZGUqIGVuY2xvc2luZ05vZGUgPSBlbmNsb3NpbmdOb2RlT2ZUeXBlKHZp
c2libGVTdGFydE9mUGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCksICZpc0xpc3RPckluZGVudEJs
b2NrcXVvdGUpOwotICAgIGlmICghZW5jbG9zaW5nTm9kZSB8fCAhZW5jbG9zaW5nTm9kZS0+cGFy
ZW50Tm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSkgLy8gV2UgY2FuJ3Qgb3V0ZGVudCBpZiB0
aGVyZSBpcyBubyBwbGFjZSB0byBnbyEKKyAgICBpZiAoIWVuY2xvc2luZ05vZGUgfHwgIWVuY2xv
c2luZ05vZGUtPnBhcmVudE5vZGUoKS0+aGFzRWRpdGFibGVTdHlsZSgpKSAvLyBXZSBjYW4ndCBv
dXRkZW50IGlmIHRoZXJlIGlzIG5vIHBsYWNlIHRvIGdvIQogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBVc2UgSW5zZXJ0TGlzdENvbW1hbmQgdG8gcmVtb3ZlIHRoZSBzZWxlY3Rpb24gZnJvbSB0
aGUgbGlzdApAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgSW5kZW50T3V0ZGVudENvbW1hbmQ6Om91
dGRlbnRQYXJhZ3IKICAgICAgICAgICAgIGlmIChDb250YWluZXJOb2RlKiBzcGxpdFBvaW50UGFy
ZW50ID0gc3BsaXRQb2ludC0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHNw
bGl0UG9pbnRQYXJlbnQtPmhhc1RhZ05hbWUoYmxvY2txdW90ZVRhZykKICAgICAgICAgICAgICAg
ICAgICAgJiYgIXNwbGl0UG9pbnQtPmhhc1RhZ05hbWUoYmxvY2txdW90ZVRhZykKLSAgICAgICAg
ICAgICAgICAgICAgJiYgc3BsaXRQb2ludFBhcmVudC0+cGFyZW50Tm9kZSgpLT5yZW5kZXJlcklz
RWRpdGFibGUoKSkgLy8gV2UgY2FuJ3Qgb3V0ZGVudCBpZiB0aGVyZSBpcyBubyBwbGFjZSB0byBn
byEKKyAgICAgICAgICAgICAgICAgICAgJiYgc3BsaXRQb2ludFBhcmVudC0+cGFyZW50Tm9kZSgp
LT5oYXNFZGl0YWJsZVN0eWxlKCkpIC8vIFdlIGNhbid0IG91dGRlbnQgaWYgdGhlcmUgaXMgbm8g
cGxhY2UgdG8gZ28hCiAgICAgICAgICAgICAgICAgICAgIHNwbGl0RWxlbWVudCh0b0VsZW1lbnQo
c3BsaXRQb2ludFBhcmVudCksIHNwbGl0UG9pbnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHRO
b2RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcg
KzUzLDcgQEAgdm9pZCBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KAogICAgIGlm
IChwYXNzd29yZEVjaG9FbmFibGVkKQogICAgICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgaWYgKCFtX25vZGUtPnJlbmRlcmVySXNF
ZGl0YWJsZSgpKQorICAgIGlmICghbV9ub2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmIChwYXNzd29yZEVjaG9FbmFibGVkKSB7CkBAIC03MCw3ICs3MCw3
IEBAIHZvaWQgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgKIAogdm9pZCBJbnNl
cnRJbnRvVGV4dE5vZGVDb21tYW5kOjpkb1VuYXBwbHkoKQogewotICAgIGlmICghbV9ub2RlLT5y
ZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICBpZiAoIW1fbm9kZS0+aGFzRWRpdGFibGVTdHlsZSgp
KQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIE5lZWQgdG8gbm90aWZ5IHRoaXMg
YmVmb3JlIGFjdHVhbGx5IGRlbGV0aW5nIHRoZSB0ZXh0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0luc2VydE5vZGVCZWZvcmVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0luc2VydE5vZGVCZWZvcmVDb21tYW5kLmNwcAkocmV2aXNpb24gMTYw
OTA4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnROb2RlQmVmb3JlQ29tbWFuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgSW5zZXJ0Tm9kZUJlZm9yZUNvbW1h
bmQ6Okluc2VydE5vZGVCZWZvcgogICAgIEFTU0VSVChtX3JlZkNoaWxkKTsKICAgICBBU1NFUlQo
bV9yZWZDaGlsZC0+cGFyZW50Tm9kZSgpKTsKIAotICAgIEFTU0VSVChtX3JlZkNoaWxkLT5wYXJl
bnROb2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpIHx8ICFtX3JlZkNoaWxkLT5wYXJlbnROb2Rl
KCktPmF0dGFjaGVkKCkpOworICAgIEFTU0VSVChtX3JlZkNoaWxkLT5wYXJlbnROb2RlKCktPmhh
c0VkaXRhYmxlU3R5bGUoKSB8fCAhbV9yZWZDaGlsZC0+cGFyZW50Tm9kZSgpLT5hdHRhY2hlZCgp
KTsKIH0KIAogdm9pZCBJbnNlcnROb2RlQmVmb3JlQ29tbWFuZDo6ZG9BcHBseSgpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVu
dHNDb21tYW5kLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDcgKzQyLDcgQEAgTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQ6Ok1lcmdlSWRlbgogCiB2
b2lkIE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBpZiAo
bV9lbGVtZW50MS0+bmV4dFNpYmxpbmcoKSAhPSBtX2VsZW1lbnQyIHx8ICFtX2VsZW1lbnQxLT5y
ZW5kZXJlcklzRWRpdGFibGUoKSB8fCAhbV9lbGVtZW50Mi0+cmVuZGVyZXJJc0VkaXRhYmxlKCkp
CisgICAgaWYgKG1fZWxlbWVudDEtPm5leHRTaWJsaW5nKCkgIT0gbV9lbGVtZW50MiB8fCAhbV9l
bGVtZW50MS0+aGFzRWRpdGFibGVTdHlsZSgpIHx8ICFtX2VsZW1lbnQyLT5oYXNFZGl0YWJsZVN0
eWxlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fYXRDaGlsZCA9IG1fZWxlbWVudDItPmZp
cnN0Q2hpbGQoKTsKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBNZXJnZUlkZW50aWNhbEVsZW1lbnRz
Q29tbWFuZDo6ZG9VbgogICAgIFJlZlB0cjxOb2RlPiBhdENoaWxkID0gbV9hdENoaWxkLnJlbGVh
c2UoKTsKIAogICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG1fZWxlbWVudDItPnBhcmVudE5v
ZGUoKTsKLSAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSkK
KyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgUmVtb3ZlTm9kZUNvbW1hbmQ6OmRvVW5hcHBseSgp
CiB7CiAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCA9IG1fcGFyZW50LnJlbGVhc2Uo
KTsKICAgICBSZWZQdHI8Tm9kZT4gcmVmQ2hpbGQgPSBtX3JlZkNoaWxkLnJlbGVhc2UoKTsKLSAg
ICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICBpZiAo
IXBhcmVudCB8fCAhcGFyZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIHBhcmVudC0+aW5zZXJ0QmVmb3JlKG1fbm9kZS5nZXQoKSwgcmVmQ2hpbGQuZ2V0KCks
IElHTk9SRV9FWENFUFRJT04pOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjAsNyArMTYwLDcgQEAgUmVwbGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRG
cmFnbWVudAogICAgIGlmICghZWRpdGFibGVSb290LT5nZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMoKS53ZWJraXRCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCkgJiYKICAgICAgICAg
Ly8gRklYTUU6IFJlbW92ZSB0aGVzZSBjaGVja3Mgb25jZSB0ZXh0YXJlYXMgYW5kIHRleHRmaWVs
ZHMgYWN0dWFsbHkgcmVnaXN0ZXIgYW4gZXZlbnQgaGFuZGxlci4KICAgICAgICAgIShzaGFkb3dB
bmNlc3Rvck5vZGUgJiYgc2hhZG93QW5jZXN0b3JOb2RlLT5yZW5kZXJlcigpICYmIHNoYWRvd0Fu
Y2VzdG9yTm9kZS0+cmVuZGVyZXIoKS0+aXNUZXh0Q29udHJvbCgpKSAmJgotICAgICAgICBlZGl0
YWJsZVJvb3QtPnJlbmRlcmVySXNSaWNobHlFZGl0YWJsZSgpKSB7CisgICAgICAgIGVkaXRhYmxl
Um9vdC0+aGFzUmljaGx5RWRpdGFibGVTdHlsZSgpKSB7CiAgICAgICAgIHJlbW92ZUludGVyY2hh
bmdlTm9kZXMobV9mcmFnbWVudC5nZXQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0x
ODEsNyArMTgxLDcgQEAgUmVwbGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudAog
ICAgIC8vIEdpdmUgdGhlIHJvb3QgYSBjaGFuY2UgdG8gY2hhbmdlIHRoZSB0ZXh0LgogICAgIFJl
ZlB0cjxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZ0ID0gQmVmb3JlVGV4dEluc2VydGVkRXZl
bnQ6OmNyZWF0ZSh0ZXh0KTsKICAgICBlZGl0YWJsZVJvb3QtPmRpc3BhdGNoRXZlbnQoZXZ0LCBB
U1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBpZiAodGV4dCAhPSBldnQtPnRleHQoKSB8fCAhZWRp
dGFibGVSb290LT5yZW5kZXJlcklzUmljaGx5RWRpdGFibGUoKSkgeworICAgIGlmICh0ZXh0ICE9
IGV2dC0+dGV4dCgpIHx8ICFlZGl0YWJsZVJvb3QtPmhhc1JpY2hseUVkaXRhYmxlU3R5bGUoKSkg
ewogICAgICAgICByZXN0b3JlQW5kUmVtb3ZlVGVzdFJlbmRlcmluZ05vZGVzVG9GcmFnbWVudCho
b2xkZXIuZ2V0KCkpOwogCiAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24u
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKQEAgLTUzMyw3ICs1MzMsNyBAQCB2b2lkIFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogCi0gICAgICAgIGlmIChlbGVtZW50LT5wYXJlbnROb2RlKCktPnJlbmRlcmVySXNSaWNobHlF
ZGl0YWJsZSgpKQorICAgICAgICBpZiAoZWxlbWVudC0+cGFyZW50Tm9kZSgpLT5oYXNSaWNobHlF
ZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGVsZW1lbnQs
IGNvbnRlbnRlZGl0YWJsZUF0dHIpOwogCiAgICAgICAgIC8vIFdlYktpdCB1c2VkIHRvIG5vdCBh
ZGQgZGlzcGxheTogaW5saW5lIGFuZCBmbG9hdDogbm9uZSBvbiBjb3B5LgpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwCShyZXZpc2lvbiAx
NjA5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgU3BsaXRFbGVtZW50Q29tbWFu
ZDo6ZXhlY3V0ZUFwcGx5KCkKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAKICAgICBD
b250YWluZXJOb2RlKiBwYXJlbnQgPSBtX2VsZW1lbnQyLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYg
KCFwYXJlbnQgfHwgIXBhcmVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgaWYgKCFwYXJl
bnQgfHwgIXBhcmVudC0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1cm47CiAgICAg
cGFyZW50LT5pbnNlcnRCZWZvcmUobV9lbGVtZW50MS5nZXQoKSwgbV9lbGVtZW50Mi5nZXQoKSwg
ZWMpOwogICAgIGlmIChlYykKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBTcGxpdEVsZW1lbnRDb21t
YW5kOjpkb0FwcGx5KCkKIAogdm9pZCBTcGxpdEVsZW1lbnRDb21tYW5kOjpkb1VuYXBwbHkoKQog
ewotICAgIGlmICghbV9lbGVtZW50MSB8fCAhbV9lbGVtZW50MS0+cmVuZGVyZXJJc0VkaXRhYmxl
KCkgfHwgIW1fZWxlbWVudDItPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgIGlmICghbV9lbGVt
ZW50MSB8fCAhbV9lbGVtZW50MS0+aGFzRWRpdGFibGVTdHlsZSgpIHx8ICFtX2VsZW1lbnQyLT5o
YXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFZlY3RvcjxSZWZQdHI8
Tm9kZT4+IGNoaWxkcmVuOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHRO
b2RlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxp
dFRleHROb2RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3
ICs1MSw3IEBAIFNwbGl0VGV4dE5vZGVDb21tYW5kOjpTcGxpdFRleHROb2RlQ29tbWEKIHZvaWQg
U3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQogewogICAgIENvbnRhaW5lck5vZGUqIHBh
cmVudCA9IG1fdGV4dDItPnBhcmVudE5vZGUoKTsKLSAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50
LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5oYXNF
ZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBwcmVmaXhUZXh0
ID0gbV90ZXh0Mi0+c3Vic3RyaW5nRGF0YSgwLCBtX29mZnNldCwgSUdOT1JFX0VYQ0VQVElPTik7
CkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQog
CiB2b2lkIFNwbGl0VGV4dE5vZGVDb21tYW5kOjpkb1VuYXBwbHkoKQogewotICAgIGlmICghbV90
ZXh0MSB8fCAhbV90ZXh0MS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgaWYgKCFtX3RleHQx
IHx8ICFtX3RleHQxLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IEFTU0VSVCgmbV90ZXh0MS0+ZG9jdW1lbnQoKSA9PSAmZG9jdW1lbnQoKSk7CkBAIC04Niw3ICs4
Niw3IEBAIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvUmVhcHBseSgpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG1fdGV4dDItPnBhcmVudE5vZGUo
KTsKLSAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAg
ICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGluc2VydFRleHQxQW5kVHJpbVRleHQyKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5p
bmdFbGVtZW50Q29tbWFuZC5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBTcGxpdFRleHROb2RlQ29udGFpbmluZ0Vs
ZW1lbnRDb21tYQogICAgIHNwbGl0VGV4dE5vZGUobV90ZXh0LmdldCgpLCBtX29mZnNldCk7CiAK
ICAgICBFbGVtZW50KiBwYXJlbnQgPSBtX3RleHQtPnBhcmVudEVsZW1lbnQoKTsKLSAgICBpZiAo
IXBhcmVudCB8fCAhcGFyZW50LT5wYXJlbnRFbGVtZW50KCkgfHwgIXBhcmVudC0+cGFyZW50RWxl
bWVudCgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50
LT5wYXJlbnRFbGVtZW50KCkgfHwgIXBhcmVudC0+cGFyZW50RWxlbWVudCgpLT5oYXNFZGl0YWJs
ZVN0eWxlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlbmRlckVsZW1lbnQqIHBhcmVudFJl
bmRlcmVyID0gcGFyZW50LT5yZW5kZXJlcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVBvc2l0aW9uLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzYsNyAr
NTM2LDcgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpjYW5vbmljYWxQb3NpdAogCiAgICAg
Ly8gVGhlIG5ldyBwb3NpdGlvbiBtdXN0IGJlIGluIHRoZSBzYW1lIGVkaXRhYmxlIGVsZW1lbnQu
IEVuZm9yY2UgdGhhdCBmaXJzdC4KICAgICAvLyBVbmxlc3MgdGhlIGRlc2NlbnQgaXMgZnJvbSBh
IG5vbi1lZGl0YWJsZSBodG1sIGVsZW1lbnQgdG8gYW4gZWRpdGFibGUgYm9keS4KLSAgICBpZiAo
bm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKGh0bWxUYWcpICYmICFub2RlLT5yZW5kZXJlcklzRWRp
dGFibGUoKSAmJiBub2RlLT5kb2N1bWVudCgpLmJvZHkoKSAmJiBub2RlLT5kb2N1bWVudCgpLmJv
ZHkoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgaWYgKG5vZGUgJiYgbm9kZS0+aGFzVGFn
TmFtZShodG1sVGFnKSAmJiAhbm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpICYmIG5vZGUtPmRvY3Vt
ZW50KCkuYm9keSgpICYmIG5vZGUtPmRvY3VtZW50KCkuYm9keSgpLT5oYXNFZGl0YWJsZVN0eWxl
KCkpCiAgICAgICAgIHJldHVybiBuZXh0LmlzTm90TnVsbCgpID8gbmV4dCA6IHByZXY7CiAKICAg
ICBOb2RlKiBlZGl0aW5nUm9vdCA9IGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKHBvc2l0aW9uKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAkocmV2
aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjI2LDcgKzYyNiw3IEBAIGJvb2wgVmlzaWJsZVNlbGVj
dGlvbjo6aXNDb250ZW50RWRpdGFibGUKICAgICByZXR1cm4gaXNFZGl0YWJsZVBvc2l0aW9uKHN0
YXJ0KCkpOwogfQogCi1ib29sIFZpc2libGVTZWxlY3Rpb246OnJlbmRlcmVySXNFZGl0YWJsZSgp
IGNvbnN0Citib29sIFZpc2libGVTZWxlY3Rpb246Omhhc0VkaXRhYmxlU3R5bGUoKSBjb25zdAog
ewogICAgIHJldHVybiBpc0VkaXRhYmxlUG9zaXRpb24oc3RhcnQoKSwgQ29udGVudElzRWRpdGFi
bGUsIERvTm90VXBkYXRlU3R5bGUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9W
aXNpYmxlU2VsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9W
aXNpYmxlU2VsZWN0aW9uLmgJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBA
IHB1YmxpYzoKICAgICAKICAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50KCkgY29uc3Q7
CiAgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OwotICAgIGJvb2wgcmVuZGVyZXJJ
c0VkaXRhYmxlKCkgY29uc3Q7CisgICAgYm9vbCBoYXNFZGl0YWJsZVN0eWxlKCkgY29uc3Q7CiAg
ICAgYm9vbCBpc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpIGNvbnN0OwogICAgIC8vIFJldHVybnMg
YSBzaGFkb3cgdHJlZSBub2RlIGZvciBsZWdhY3kgc2hhZG93IHRyZWVzLCBhIGNoaWxkIG9mIHRo
ZQogICAgIC8vIFNoYWRvd1Jvb3Qgbm9kZSBmb3IgbmV3IHNoYWRvdyB0cmVlcywgb3IgMCBmb3Ig
bm9uLXNoYWRvdyB0cmVlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVu
aXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0
cy5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVVuaXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTAgKzQ4LDEwIEBAIHVzaW5nIG5hbWVz
cGFjZSBXVEY6OlVuaWNvZGU7CiAKIHN0YXRpYyBOb2RlKiBwcmV2aW91c0xlYWZXaXRoU2FtZUVk
aXRhYmlsaXR5KE5vZGUqIG5vZGUsIEVkaXRhYmxlVHlwZSBlZGl0YWJsZVR5cGUpCiB7Ci0gICAg
Ym9vbCBlZGl0YWJsZSA9IG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZShlZGl0YWJsZVR5cGUpOwor
ICAgIGJvb2wgZWRpdGFibGUgPSBub2RlLT5oYXNFZGl0YWJsZVN0eWxlKGVkaXRhYmxlVHlwZSk7
CiAgICAgbm9kZSA9IHByZXZpb3VzTGVhZk5vZGUobm9kZSk7CiAgICAgd2hpbGUgKG5vZGUpIHsK
LSAgICAgICAgaWYgKGVkaXRhYmxlID09IG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZShlZGl0YWJs
ZVR5cGUpKQorICAgICAgICBpZiAoZWRpdGFibGUgPT0gbm9kZS0+aGFzRWRpdGFibGVTdHlsZShl
ZGl0YWJsZVR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgIG5vZGUgPSBw
cmV2aW91c0xlYWZOb2RlKG5vZGUpOwogICAgIH0KQEAgLTYzLDEwICs2MywxMCBAQCBzdGF0aWMg
Tm9kZSogbmV4dExlYWZXaXRoU2FtZUVkaXRhYmlsaXR5CiAgICAgaWYgKCFub2RlKQogICAgICAg
ICByZXR1cm4gMDsKICAgICAKLSAgICBib29sIGVkaXRhYmxlID0gbm9kZS0+cmVuZGVyZXJJc0Vk
aXRhYmxlKGVkaXRhYmxlVHlwZSk7CisgICAgYm9vbCBlZGl0YWJsZSA9IG5vZGUtPmhhc0VkaXRh
YmxlU3R5bGUoZWRpdGFibGVUeXBlKTsKICAgICBub2RlID0gbmV4dExlYWZOb2RlKG5vZGUpOwog
ICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgIGlmIChlZGl0YWJsZSA9PSBub2RlLT5yZW5kZXJl
cklzRWRpdGFibGUoZWRpdGFibGVUeXBlKSkKKyAgICAgICAgaWYgKGVkaXRhYmxlID09IG5vZGUt
Pmhhc0VkaXRhYmxlU3R5bGUoZWRpdGFibGVUeXBlKSkKICAgICAgICAgICAgIHJldHVybiBub2Rl
OwogICAgICAgICBub2RlID0gbmV4dExlYWZOb2RlKG5vZGUpOwogICAgIH0KQEAgLTk2NCw3ICs5
NjQsNyBAQCBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNMaW5lUG9zaXRpb24oY29uCiAgICAgLy8g
Q291bGQgbm90IGZpbmQgYSBwcmV2aW91cyBsaW5lLiBUaGlzIG1lYW5zIHdlIG11c3QgYWxyZWFk
eSBiZSBvbiB0aGUgZmlyc3QgbGluZS4KICAgICAvLyBNb3ZlIHRvIHRoZSBzdGFydCBvZiB0aGUg
Y29udGVudCBpbiB0aGlzIGJsb2NrLCB3aGljaCBlZmZlY3RpdmVseSBtb3ZlcyB1cwogICAgIC8v
IHRvIHRoZSBzdGFydCBvZiB0aGUgbGluZSB3ZSdyZSBvbi4KLSAgICBFbGVtZW50KiByb290RWxl
bWVudCA9IG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZShlZGl0YWJsZVR5cGUpID8gbm9kZS0+cm9v
dEVkaXRhYmxlRWxlbWVudChlZGl0YWJsZVR5cGUpIDogbm9kZS0+ZG9jdW1lbnQoKS5kb2N1bWVu
dEVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiByb290RWxlbWVudCA9IG5vZGUtPmhhc0VkaXRhYmxl
U3R5bGUoZWRpdGFibGVUeXBlKSA/IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoZWRpdGFibGVU
eXBlKSA6IG5vZGUtPmRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCk7CiAgICAgaWYgKCFyb290
RWxlbWVudCkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9kZShyb290RWxlbWVudCksIERPV05TVFJF
QU0pOwpAQCAtMTAyMiw3ICsxMDIyLDcgQEAgVmlzaWJsZVBvc2l0aW9uIG5leHRMaW5lUG9zaXRp
b24oY29uc3QgVgogICAgIC8vIENvdWxkIG5vdCBmaW5kIGEgbmV4dCBsaW5lLiBUaGlzIG1lYW5z
IHdlIG11c3QgYWxyZWFkeSBiZSBvbiB0aGUgbGFzdCBsaW5lLgogICAgIC8vIE1vdmUgdG8gdGhl
IGVuZCBvZiB0aGUgY29udGVudCBpbiB0aGlzIGJsb2NrLCB3aGljaCBlZmZlY3RpdmVseSBtb3Zl
cyB1cwogICAgIC8vIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUgd2UncmUgb24uCi0gICAgRWxlbWVu
dCogcm9vdEVsZW1lbnQgPSBub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoZWRpdGFibGVUeXBlKSA/
IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoZWRpdGFibGVUeXBlKSA6IG5vZGUtPmRvY3VtZW50
KCkuZG9jdW1lbnRFbGVtZW50KCk7CisgICAgRWxlbWVudCogcm9vdEVsZW1lbnQgPSBub2RlLT5o
YXNFZGl0YWJsZVN0eWxlKGVkaXRhYmxlVHlwZSkgPyBub2RlLT5yb290RWRpdGFibGVFbGVtZW50
KGVkaXRhYmxlVHlwZSkgOiBub2RlLT5kb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpOwogICAg
IGlmICghcm9vdEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGxhc3RQb3NpdGlvbkluTm9kZShyb290RWxlbWVudCks
IERPV05TVFJFQU0pOwpAQCAtMTEwMywxMyArMTEwMywxMyBAQCBWaXNpYmxlUG9zaXRpb24gc3Rh
cnRPZlBhcmFncmFwaChjb25zdCBWCiAgICAgTm9kZSogbiA9IHN0YXJ0Tm9kZTsKICAgICB3aGls
ZSAobikgewogI2lmIEVOQUJMRShVU0VSU0VMRUNUX0FMTCkKLSAgICAgICAgaWYgKGJvdW5kYXJ5
Q3Jvc3NpbmdSdWxlID09IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5ICYmICFQb3NpdGlvbjo6
bm9kZUlzVXNlclNlbGVjdEFsbChuKSAmJiBuLT5yZW5kZXJlcklzRWRpdGFibGUoKSAhPSBzdGFy
dE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgICAgICBpZiAoYm91bmRhcnlDcm9zc2lu
Z1J1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkgJiYgIVBvc2l0aW9uOjpub2RlSXNV
c2VyU2VsZWN0QWxsKG4pICYmIG4tPmhhc0VkaXRhYmxlU3R5bGUoKSAhPSBzdGFydE5vZGUtPmhh
c0VkaXRhYmxlU3R5bGUoKSkKICNlbHNlCi0gICAgICAgIGlmIChib3VuZGFyeUNyb3NzaW5nUnVs
ZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSAmJiBuLT5yZW5kZXJlcklzRWRpdGFibGUo
KSAhPSBzdGFydE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgICAgICBpZiAoYm91bmRh
cnlDcm9zc2luZ1J1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkgJiYgbi0+aGFzRWRp
dGFibGVTdHlsZSgpICE9IHN0YXJ0Tm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpKQogI2VuZGlmCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKGJvdW5kYXJ5Q3Jvc3NpbmdSdWxlID09IENh
blNraXBPdmVyRWRpdGluZ0JvdW5kYXJ5KSB7Ci0gICAgICAgICAgICB3aGlsZSAobiAmJiBuLT5y
ZW5kZXJlcklzRWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQor
ICAgICAgICAgICAgd2hpbGUgKG4gJiYgbi0+aGFzRWRpdGFibGVTdHlsZSgpICE9IHN0YXJ0Tm9k
ZS0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2Fs
OjpwcmV2aW91c1Bvc3RPcmRlcihuLCBzdGFydEJsb2NrKTsKICAgICAgICAgICAgIGlmICghbiB8
fCAhbi0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQogICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMTE4MywxMyArMTE4MywxMyBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZQYXJhZ3JhcGgo
Y29uc3QgVmlzCiAgICAgTm9kZSogbiA9IHN0YXJ0Tm9kZTsKICAgICB3aGlsZSAobikgewogI2lm
IEVOQUJMRShVU0VSU0VMRUNUX0FMTCkKLSAgICAgICAgaWYgKGJvdW5kYXJ5Q3Jvc3NpbmdSdWxl
ID09IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5ICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNl
bGVjdEFsbChuKSAmJiBuLT5yZW5kZXJlcklzRWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPnJlbmRl
cmVySXNFZGl0YWJsZSgpKQorICAgICAgICBpZiAoYm91bmRhcnlDcm9zc2luZ1J1bGUgPT0gQ2Fu
bm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0QWxs
KG4pICYmIG4tPmhhc0VkaXRhYmxlU3R5bGUoKSAhPSBzdGFydE5vZGUtPmhhc0VkaXRhYmxlU3R5
bGUoKSkKICNlbHNlCi0gICAgICAgIGlmIChib3VuZGFyeUNyb3NzaW5nUnVsZSA9PSBDYW5ub3RD
cm9zc0VkaXRpbmdCb3VuZGFyeSAmJiBuLT5yZW5kZXJlcklzRWRpdGFibGUoKSAhPSBzdGFydE5v
ZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgICAgICBpZiAoYm91bmRhcnlDcm9zc2luZ1J1
bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkgJiYgbi0+aGFzRWRpdGFibGVTdHlsZSgp
ICE9IHN0YXJ0Tm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpKQogI2VuZGlmCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgaWYgKGJvdW5kYXJ5Q3Jvc3NpbmdSdWxlID09IENhblNraXBPdmVyRWRp
dGluZ0JvdW5kYXJ5KSB7Ci0gICAgICAgICAgICB3aGlsZSAobiAmJiBuLT5yZW5kZXJlcklzRWRp
dGFibGUoKSAhPSBzdGFydE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgICAgICAgICAg
d2hpbGUgKG4gJiYgbi0+aGFzRWRpdGFibGVTdHlsZSgpICE9IHN0YXJ0Tm9kZS0+aGFzRWRpdGFi
bGVTdHlsZSgpKQogICAgICAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4sIHN0
YXlJbnNpZGVCbG9jayk7CiAgICAgICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRGVzY2VuZGFudE9m
KGhpZ2hlc3RSb290KSkKICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1dyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFu
ZC5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV3JhcENv
bnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIs
NyBAQCB2b2lkIFdyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZDo6ZG9VCiB7CiAgICAgQVNT
RVJUKG1fZWxlbWVudCk7CiAKLSAgICBpZiAoIW1fZHVtbXlTcGFuIHx8ICFtX2VsZW1lbnQtPnJl
bmRlcmVySXNFZGl0YWJsZSgpKQorICAgIGlmICghbV9kdW1teVNwYW4gfHwgIW1fZWxlbWVudC0+
aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8UmVmUHRy
PE5vZGU+PiBjaGlsZHJlbjsKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBXcmFwQ29udGVudHNJbkR1
bW15U3BhbkNvbW1hbmQ6OmRvUgogewogICAgIEFTU0VSVChtX2VsZW1lbnQpOwogICAgIAotICAg
IGlmICghbV9kdW1teVNwYW4gfHwgIW1fZWxlbWVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisg
ICAgaWYgKCFtX2R1bW15U3BhbiB8fCAhbV9lbGVtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGV4ZWN1dGVBcHBseSgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2
LDcgQEAgTm9kZSogaGlnaGVzdEVkaXRhYmxlUm9vdChjb25zdCBQb3NpdGlvbgogICAgICAgICBu
b2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgaWYgKG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZShlZGl0YWJsZVR5
cGUpKQorICAgICAgICBpZiAobm9kZS0+aGFzRWRpdGFibGVTdHlsZShlZGl0YWJsZVR5cGUpKQog
ICAgICAgICAgICAgaGlnaGVzdEVkaXRhYmxlUm9vdCA9IG5vZGU7CiAgICAgfQogCkBAIC0xMjks
NyArMTI5LDcgQEAgTm9kZSogbG93ZXN0RWRpdGFibGVBbmNlc3RvcihOb2RlKiBub2RlKQogICAg
ICAgICByZXR1cm4gMDsKICAgICAKICAgICB3aGlsZSAobm9kZSkgewotICAgICAgICBpZiAobm9k
ZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgICAgIGlmIChub2RlLT5oYXNFZGl0YWJsZVN0
eWxlKCkpCiAgICAgICAgICAgICByZXR1cm4gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwog
ICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShib2R5VGFnKSkKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMTUyLDcgKzE1Miw3IEBAIGJvb2wgaXNFZGl0YWJsZVBvc2l0aW9uKGNvbnN0IFBvc2l0
aW9uJiAKICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT5pc1Rh
YmxlKCkpCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAgCi0gICAgcmV0
dXJuIG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZShlZGl0YWJsZVR5cGUpOworICAgIHJldHVybiBu
b2RlLT5oYXNFZGl0YWJsZVN0eWxlKGVkaXRhYmxlVHlwZSk7CiB9CiAKIGJvb2wgaXNBdFVuc3Bs
aXR0YWJsZUVsZW1lbnQoY29uc3QgUG9zaXRpb24mIHBvcykKQEAgLTE3MSw3ICsxNzEsNyBAQCBi
b29sIGlzUmljaGx5RWRpdGFibGVQb3NpdGlvbihjb25zdCBQb3NpCiAgICAgaWYgKG5vZGUtPnJl
bmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpKQogICAgICAgICBub2RlID0g
bm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIAotICAgIHJldHVybiBub2RlLT5yZW5kZXJlcklzUmlj
aGx5RWRpdGFibGUoZWRpdGFibGVUeXBlKTsKKyAgICByZXR1cm4gbm9kZS0+aGFzUmljaGx5RWRp
dGFibGVTdHlsZShlZGl0YWJsZVR5cGUpOwogfQogCiBFbGVtZW50KiBlZGl0YWJsZVJvb3RGb3JQ
b3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcCwgRWRpdGFibGVUeXBlIGVkaXRhYmxlVHlwZSkKQEAg
LTI0OSw3ICsyNDksNyBAQCBQb3NpdGlvbiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRh
CiBWaXNpYmxlUG9zaXRpb24gZmlyc3RFZGl0YWJsZVBvc2l0aW9uQWZ0ZXJQb3NpdGlvbkluUm9v
dChjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIE5vZGUqIGhpZ2hlc3RSb290KQogewogICAgIC8v
IHBvc2l0aW9uIGZhbGxzIGJlZm9yZSBoaWdoZXN0Um9vdC4KLSAgICBpZiAoY29tcGFyZVBvc2l0
aW9ucyhwb3NpdGlvbiwgZmlyc3RQb3NpdGlvbkluTm9kZShoaWdoZXN0Um9vdCkpID09IC0xICYm
IGhpZ2hlc3RSb290LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICBpZiAoY29tcGFyZVBvc2l0
aW9ucyhwb3NpdGlvbiwgZmlyc3RQb3NpdGlvbkluTm9kZShoaWdoZXN0Um9vdCkpID09IC0xICYm
IGhpZ2hlc3RSb290LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmaXJzdFBv
c2l0aW9uSW5Ob2RlKGhpZ2hlc3RSb290KTsKIAogICAgIFBvc2l0aW9uIHAgPSBwb3NpdGlvbjsK
QEAgLTU0OCw3ICs1NDgsNyBAQCBOb2RlKiBlbmNsb3NpbmdOb2RlV2l0aFRhZyhjb25zdCBQb3Np
dGlvCiAgICAgICAgIAogICAgIE5vZGUqIHJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290KHApOwog
ICAgIGZvciAoTm9kZSogbiA9IHAuZGVwcmVjYXRlZE5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5v
ZGUoKSkgewotICAgICAgICBpZiAocm9vdCAmJiAhbi0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisg
ICAgICAgIGlmIChyb290ICYmICFuLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUodGFnTmFtZSkpCiAgICAgICAgICAg
ICByZXR1cm4gbjsKQEAgLTU3MCw3ICs1NzAsNyBAQCBOb2RlKiBlbmNsb3NpbmdOb2RlT2ZUeXBl
KGNvbnN0IFBvc2l0aW9uCiAgICAgZm9yIChOb2RlKiBuID0gcC5kZXByZWNhdGVkTm9kZSgpOyBu
OyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIC8vIERvbid0IHJldHVybiBhIG5vbi1l
ZGl0YWJsZSBub2RlIGlmIHRoZSBpbnB1dCBwb3NpdGlvbiB3YXMgZWRpdGFibGUsIHNpbmNlCiAg
ICAgICAgIC8vIHRoZSBjYWxsZXJzIGZyb20gZWRpdGluZyB3aWxsIG5vIGRvdWJ0IHdhbnQgdG8g
cGVyZm9ybSBlZGl0aW5nIGluc2lkZSB0aGUgcmV0dXJuZWQgbm9kZS4KLSAgICAgICAgaWYgKHJv
b3QgJiYgIW4tPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgICAgICBpZiAocm9vdCAmJiAhbi0+
aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChu
b2RlSXNPZlR5cGUobikpCiAgICAgICAgICAgICByZXR1cm4gbjsKQEAgLTU4Niw3ICs1ODYsNyBA
QCBOb2RlKiBoaWdoZXN0RW5jbG9zaW5nTm9kZU9mVHlwZShjb25zdCBQCiAgICAgTm9kZSogaGln
aGVzdCA9IDA7CiAgICAgTm9kZSogcm9vdCA9IHJ1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91
bmRhcnkgPyBoaWdoZXN0RWRpdGFibGVSb290KHApIDogMDsKICAgICBmb3IgKE5vZGUqIG4gPSBw
LmNvbnRhaW5lck5vZGUoKTsgbiAmJiBuICE9IHN0YXlXaXRoaW47IG4gPSBuLT5wYXJlbnROb2Rl
KCkpIHsKLSAgICAgICAgaWYgKHJvb3QgJiYgIW4tPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAg
ICAgICBpZiAocm9vdCAmJiAhbi0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIGlmIChub2RlSXNPZlR5cGUobikpCiAgICAgICAgICAgICBoaWdoZXN0
ID0gbjsKQEAgLTc0Myw3ICs3NDMsNyBAQCBib29sIGNhbk1lcmdlTGlzdHMoRWxlbWVudCogZmly
c3RMaXN0LCBFCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBmaXJzdExpc3Qt
Pmhhc1RhZ05hbWUoc2Vjb25kTGlzdC0+dGFnUU5hbWUoKSkgLy8gbWFrZSBzdXJlIHRoZSBsaXN0
IHR5cGVzIG1hdGNoIChvbCB2cy4gdWwpCi0gICAgJiYgZmlyc3RMaXN0LT5yZW5kZXJlcklzRWRp
dGFibGUoKSAmJiBzZWNvbmRMaXN0LT5yZW5kZXJlcklzRWRpdGFibGUoKSAvLyBib3RoIGxpc3Rz
IGFyZSBlZGl0YWJsZQorICAgICYmIGZpcnN0TGlzdC0+aGFzRWRpdGFibGVTdHlsZSgpICYmIHNl
Y29uZExpc3QtPmhhc0VkaXRhYmxlU3R5bGUoKSAvLyBib3RoIGxpc3RzIGFyZSBlZGl0YWJsZQog
ICAgICYmIGZpcnN0TGlzdC0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHNlY29uZExpc3QtPnJv
b3RFZGl0YWJsZUVsZW1lbnQoKSAvLyBkb24ndCBjcm9zcyBlZGl0aW5nIGJvdW5kYXJpZXMKICAg
ICAmJiBpc1Zpc2libHlBZGphY2VudChwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKGZpcnN0TGlz
dCksIHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKHNlY29uZExpc3QpKTsKICAgICAvLyBNYWtl
IHN1cmUgdGhlcmUgaXMgbm8gdmlzaWJsZSBjb250ZW50IGJldHdlZW4gdGhpcyBsaSBhbmQgdGhl
IHByZXZpb3VzIGxpc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1l
bnQuY3BwCShyZXZpc2lvbiAxNjA5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNo
b3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBzdGF0aWMgdW5z
aWduZWQgcGFyc2VQb3J0RnJvbVN0cmluZ1Bvc2l0CiAKIGJvb2wgSFRNTEFuY2hvckVsZW1lbnQ6
OnN1cHBvcnRzRm9jdXMoKSBjb25zdAogewotICAgIGlmIChyZW5kZXJlcklzRWRpdGFibGUoKSkK
KyAgICBpZiAoaGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1cm4gSFRNTEVsZW1lbnQ6
OnN1cHBvcnRzRm9jdXMoKTsKICAgICAvLyBJZiBub3QgYSBsaW5rIHdlIHNob3VsZCBzdGlsbCBi
ZSBhYmxlIHRvIGZvY3VzIHRoZSBlbGVtZW50IGlmIGl0IGhhcyB0YWJJbmRleC4KICAgICByZXR1
cm4gaXNMaW5rKCkgfHwgSFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKQEAgLTE5MSw3ICsx
OTEsNyBAQCB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAocmVuZGVyZXJJc0VkaXRhYmxl
KCkpIHsKKyAgICAgICAgaWYgKGhhc0VkaXRhYmxlU3R5bGUoKSkgewogICAgICAgICAgICAgLy8g
VGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGFibGUgYmxvY2sgdGhhdCB0aGUgc2VsZWN0aW9u
IHdhcyBpbiAoaWYgaXQgd2FzIGluIG9uZSkganVzdCBiZWZvcmUgdGhlIGxpbmsgd2FzIGNsaWNr
ZWQKICAgICAgICAgICAgIC8vIGZvciB0aGUgTGl2ZVdoZW5Ob3RGb2N1c2VkIGVkaXRhYmxlIGxp
bmsgYmVoYXZpb3IKICAgICAgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5tb3VzZWRvd25FdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8
TW91c2VFdmVudCo+KGV2ZW50KS0+YnV0dG9uKCkgIT0gUmlnaHRCdXR0b24gJiYgZG9jdW1lbnQo
KS5mcmFtZSgpKSB7CkBAIC0yMTEsNyArMjExLDcgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZAogCiB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpzZXRBY3RpdmUoYm9v
bCBkb3duLCBib29sIHBhdXNlKQogewotICAgIGlmIChyZW5kZXJlcklzRWRpdGFibGUoKSkgewor
ICAgIGlmIChoYXNFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgRWRpdGFibGVMaW5rQmVoYXZp
b3IgZWRpdGFibGVMaW5rQmVoYXZpb3IgPSBFZGl0YWJsZUxpbmtEZWZhdWx0QmVoYXZpb3I7CiAg
ICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudCgpLnNldHRpbmdzKCkpCiAg
ICAgICAgICAgICBlZGl0YWJsZUxpbmtCZWhhdmlvciA9IHNldHRpbmdzLT5lZGl0YWJsZUxpbmtC
ZWhhdmlvcigpOwpAQCAtMjc5LDcgKzI3OSw3IEBAIGJvb2wgSFRNTEFuY2hvckVsZW1lbnQ6OmNh
blN0YXJ0U2VsZWN0aW8KICAgICAvLyBGSVhNRTogV2UgcHJvYmFibHkgd2FudCB0aGlzIHNhbWUg
YmVoYXZpb3IgaW4gU1ZHQUVsZW1lbnQgdG9vCiAgICAgaWYgKCFpc0xpbmsoKSkKICAgICAgICAg
cmV0dXJuIEhUTUxFbGVtZW50OjpjYW5TdGFydFNlbGVjdGlvbigpOwotICAgIHJldHVybiByZW5k
ZXJlcklzRWRpdGFibGUoKTsKKyAgICByZXR1cm4gaGFzRWRpdGFibGVTdHlsZSgpOwogfQogCiBi
b29sIEhUTUxBbmNob3JFbGVtZW50OjpkcmFnZ2FibGUoKSBjb25zdApAQCAtNTYxLDcgKzU2MSw3
IEBAIEhUTUxBbmNob3JFbGVtZW50OjpFdmVudFR5cGUgSFRNTEFuY2hvckUKIAogYm9vbCBIVE1M
QW5jaG9yRWxlbWVudDo6dHJlYXRMaW5rQXNMaXZlRm9yRXZlbnRUeXBlKEV2ZW50VHlwZSBldmVu
dFR5cGUpIGNvbnN0CiB7Ci0gICAgaWYgKCFyZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICBpZiAo
IWhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBTZXR0aW5n
cyogc2V0dGluZ3MgPSBkb2N1bWVudCgpLnNldHRpbmdzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxCb2R5RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjA5MDQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw3ICsx
ODUsNyBAQCBib29sIEhUTUxCb2R5RWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoY29uCiAKIGJvb2wg
SFRNTEJvZHlFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVu
ZGVyZXJJc0VkaXRhYmxlKCkgfHwgSFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKKyAgICBy
ZXR1cm4gaGFzRWRpdGFibGVTdHlsZSgpIHx8IEhUTUxFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCk7
CiB9CiAKIHN0YXRpYyBpbnQgYWRqdXN0Rm9yWm9vbShpbnQgdmFsdWUsIEZyYW1lJiBmcmFtZSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjA5MTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjYyLDkgKzY2Miw3IEBAIGJvb2wgSFRNTEVsZW1lbnQ6Omhhc0N1c3RvbUZvY3VzTG9naWMoKSAK
IAogYm9vbCBIVE1MRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0CiB7Ci0gICAgaWYgKCFk
b2N1bWVudCgpLnZpZXcoKS0+aXNJbkxheW91dCgpICYmICFkb2N1bWVudCgpLnZpZXcoKS0+aXNQ
YWludGluZygpKQotICAgICAgICBkb2N1bWVudCgpLnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKLSAg
ICByZXR1cm4gRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIHx8IChyZW5kZXJlcklzRWRpdGFibGUo
KSAmJiBwYXJlbnROb2RlKCkgJiYgIXBhcmVudE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkp
OworICAgIHJldHVybiBFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgfHwgKGhhc0VkaXRhYmxlU3R5
bGUoKSAmJiBwYXJlbnROb2RlKCkgJiYgIXBhcmVudE5vZGUoKS0+aGFzRWRpdGFibGVTdHlsZSgp
KTsKIH0KIAogU3RyaW5nIEhUTUxFbGVtZW50Ojpjb250ZW50RWRpdGFibGUoKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE2MDkwNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MDUsNyArNDA1LDcgQEAgRHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6b3BlcmF0
aW9uRgogICAgICAgICAgICAgcGx1Z2luRG9jdW1lbnRBY2NlcHRzRHJhZ3MgPSBwbHVnaW5WaWV3
LT5zaG91bGRBbGxvd05hdmlnYXRpb25Gcm9tRHJhZ3MoKTsKICAgICB9CiAKLSAgICBpZiAoZG9j
ICYmIChtX2RpZEluaXRpYXRlRHJhZyB8fCAoZG9jLT5pc1BsdWdpbkRvY3VtZW50KCkgJiYgIXBs
dWdpbkRvY3VtZW50QWNjZXB0c0RyYWdzKSB8fCBkb2MtPnJlbmRlcmVySXNFZGl0YWJsZSgpKSkK
KyAgICBpZiAoZG9jICYmIChtX2RpZEluaXRpYXRlRHJhZyB8fCAoZG9jLT5pc1BsdWdpbkRvY3Vt
ZW50KCkgJiYgIXBsdWdpbkRvY3VtZW50QWNjZXB0c0RyYWdzKSB8fCBkb2MtPmhhc0VkaXRhYmxl
U3R5bGUoKSkpCiAgICAgICAgIHJldHVybiBEcmFnT3BlcmF0aW9uTm9uZTsKICAgICByZXR1cm4g
ZHJhZ09wZXJhdGlvbihkcmFnRGF0YSk7CiB9CkBAIC01NTMsOSArNTUzLDkgQEAgYm9vbCBEcmFn
Q29udHJvbGxlcjo6Y2FuUHJvY2Vzc0RyYWcoRHJhZwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIGlmIChyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmlzUGx1Z2luRWxlbWVudCgpKSB7
Ci0gICAgICAgIGlmICghdG9IVE1MUGx1Z0luRWxlbWVudChyZXN1bHQuaW5uZXJOb25TaGFyZWRO
b2RlKCkpLT5jYW5Qcm9jZXNzRHJhZygpICYmICFyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkt
PnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgICAgICBpZiAoIXRvSFRNTFBsdWdJbkVsZW1lbnQo
cmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpKS0+Y2FuUHJvY2Vzc0RyYWcoKSAmJiAhcmVzdWx0
LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIGlmICghcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgp
LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICB9IGVsc2UgaWYgKCFyZXN1bHQuaW5uZXJOb25T
aGFyZWROb2RlKCktPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgaWYgKG1fZGlkSW5pdGlhdGVEcmFnICYmIG1fZG9jdW1lbnRVbmRlck1vdXNlID09IG1f
ZHJhZ0luaXRpYXRvciAmJiByZXN1bHQuaXNTZWxlY3RlZCgpKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzcsNyArOTM3LDcgQEAg
Ym9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUmVsZWFzZUV2ZQogICAgICAgICBWaXNpYmxl
U2VsZWN0aW9uIG5ld1NlbGVjdGlvbjsKICAgICAgICAgTm9kZSogbm9kZSA9IGV2ZW50LnRhcmdl
dE5vZGUoKTsKICAgICAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9mcmFtZS5zZXR0aW5ncygp
LmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7Ci0gICAgICAgIGlmIChub2RlICYmIG5vZGUtPnJlbmRl
cmVyKCkgJiYgKGNhcmV0QnJvd3NpbmcgfHwgbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpKSB7
CisgICAgICAgIGlmIChub2RlICYmIG5vZGUtPnJlbmRlcmVyKCkgJiYgKGNhcmV0QnJvd3Npbmcg
fHwgbm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpKSkgewogICAgICAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIHBvcyA9IG5vZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQoZXZlbnQubG9jYWxQ
b2ludCgpKTsKICAgICAgICAgICAgIG5ld1NlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24ocG9z
KTsKICAgICAgICAgfQpAQCAtMTE5NCw3ICsxMTk0LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnVz
ZUhhbmRDdXJzb3IoTm9kZSogbgogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgYm9vbCBlZGl0YWJsZSA9IG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpOworICAg
IGJvb2wgZWRpdGFibGUgPSBub2RlLT5oYXNFZGl0YWJsZVN0eWxlKCk7CiAgICAgYm9vbCBlZGl0
YWJsZUxpbmtFbmFibGVkID0gZmFsc2U7CiAKICAgICAvLyBJZiB0aGUgbGluayBpcyBlZGl0YWJs
ZSwgdGhlbiB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBzZXR0aW5ncyB0byBzZWUgd2hldGhlciBvciBu
b3QgdGhlIGxpbmsgc2hvdWxkIGJlIGZvbGxvd2VkCkBAIC0xMzQzLDcgKzEzNDMsNyBAQCBPcHRp
b25hbEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvCiAKICAgICBzd2l0Y2ggKHN0eWxl
ID8gc3R5bGUtPmN1cnNvcigpIDogQ1VSU09SX0FVVE8pIHsKICAgICBjYXNlIENVUlNPUl9BVVRP
OiB7Ci0gICAgICAgIGJvb2wgZWRpdGFibGUgPSBub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKTsK
KyAgICAgICAgYm9vbCBlZGl0YWJsZSA9IG5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKTsKIAogICAg
ICAgICBpZiAodXNlSGFuZEN1cnNvcihub2RlLCByZXN1bHQuaXNPdmVyTGluaygpLCBzaGlmdEtl
eSkpCiAgICAgICAgICAgICByZXR1cm4gaGFuZEN1cnNvcigpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzYsNyAr
NTM2LDcgQEAgRWxlbWVudCogRm9jdXNDb250cm9sbGVyOjpwcmV2aW91c0ZvY3VzYQogc3RhdGlj
IGJvb2wgcmVsaW5xdWlzaGVzRWRpdGluZ0ZvY3VzKE5vZGUgKm5vZGUpCiB7CiAgICAgQVNTRVJU
KG5vZGUpOwotICAgIEFTU0VSVChub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSk7CisgICAgQVNT
RVJUKG5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSk7CiAKICAgICBOb2RlKiByb290ID0gbm9kZS0+
cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50
KCkuZnJhbWUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3Vs
dC5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRU
ZXN0UmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc4LDcgKzU3OCw3IEBAIGJvb2wgSGl0
VGVzdFJlc3VsdDo6aXNDb250ZW50RWRpdGFibGUoKSAKICAgICBpZiAoaXNIVE1MSW5wdXRFbGVt
ZW50KG1faW5uZXJOb25TaGFyZWROb2RlLmdldCgpKSkKICAgICAgICAgcmV0dXJuIHRvSFRNTElu
cHV0RWxlbWVudChtX2lubmVyTm9uU2hhcmVkTm9kZS5nZXQoKSktPmlzVGV4dEZpZWxkKCk7CiAK
LSAgICByZXR1cm4gbV9pbm5lck5vblNoYXJlZE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpOwor
ICAgIHJldHVybiBtX2lubmVyTm9uU2hhcmVkTm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpOwogfQog
CiBib29sIEhpdFRlc3RSZXN1bHQ6OmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSog
bm9kZSwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTYwOTA0KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjQ4Myw3ICsyNDgzLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDYXJldChQYWlu
dEluZm8mIAogICAgIGJvb2wgaXNDb250ZW50RWRpdGFibGU7CiAgICAgaWYgKHR5cGUgPT0gQ3Vy
c29yQ2FyZXQpIHsKICAgICAgICAgY2FyZXRQYWludGVyID0gZnJhbWUoKS5zZWxlY3Rpb24oKS5j
YXJldFJlbmRlcmVyKCk7Ci0gICAgICAgIGlzQ29udGVudEVkaXRhYmxlID0gZnJhbWUoKS5zZWxl
Y3Rpb24oKS5yZW5kZXJlcklzRWRpdGFibGUoKTsKKyAgICAgICAgaXNDb250ZW50RWRpdGFibGUg
PSBmcmFtZSgpLnNlbGVjdGlvbigpLmhhc0VkaXRhYmxlU3R5bGUoKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBjYXJldFBhaW50ZXIgPSBmcmFtZSgpLnBhZ2UoKS0+ZHJhZ0NhcmV0Q29udHJvbGxl
cigpLmNhcmV0UmVuZGVyZXIoKTsKICAgICAgICAgaXNDb250ZW50RWRpdGFibGUgPSBmcmFtZSgp
LnBhZ2UoKS0+ZHJhZ0NhcmV0Q29udHJvbGxlcigpLmlzQ29udGVudEVkaXRhYmxlKCk7CkBAIC0z
NTM4LDcgKzM1MzgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNFZGl0aW5nQm91bmRhcnkoUmVu
CiAgICAgQVNTRVJUKCFhbmNlc3RvciB8fCBhbmNlc3Rvci0+bm9uUHNldWRvRWxlbWVudCgpKTsK
ICAgICBBU1NFUlQoY2hpbGQubm9uUHNldWRvTm9kZSgpKTsKICAgICByZXR1cm4gIWFuY2VzdG9y
IHx8ICFhbmNlc3Rvci0+cGFyZW50KCkgfHwgKGFuY2VzdG9yLT5oYXNMYXllcigpICYmIGFuY2Vz
dG9yLT5wYXJlbnQoKS0+aXNSZW5kZXJWaWV3KCkpCi0gICAgICAgIHx8IGFuY2VzdG9yLT5ub25Q
c2V1ZG9FbGVtZW50KCktPnJlbmRlcmVySXNFZGl0YWJsZSgpID09IGNoaWxkLm5vblBzZXVkb05v
ZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCk7CisgICAgICAgIHx8IGFuY2VzdG9yLT5ub25Qc2V1
ZG9FbGVtZW50KCktPmhhc0VkaXRhYmxlU3R5bGUoKSA9PSBjaGlsZC5ub25Qc2V1ZG9Ob2RlKCkt
Pmhhc0VkaXRhYmxlU3R5bGUoKTsKIH0KIAogLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxk
IGdvIG9uIFJlbmRlck9iamVjdCBhcyBhbiBpbnN0YW5jZSBtZXRob2QuIFRoZW4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiAxNjA5MDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODIxLDcgKzgyMSw3IEBAIGJvb2wgUmVuZGVyQm94OjpjYW5CZVByb2dyYW1hdGljYWxseVNjcm8K
ICAgICBpZiAoc2Nyb2xsc092ZXJmbG93KCkgJiYgaGFzU2Nyb2xsYWJsZU92ZXJmbG93KQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiBlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5y
ZW5kZXJlcklzRWRpdGFibGUoKTsKKyAgICByZXR1cm4gZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+
aGFzRWRpdGFibGVTdHlsZSgpOwogfQogCiBib29sIFJlbmRlckJveDo6dXNlc0NvbXBvc2l0ZWRT
Y3JvbGxpbmcoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1
dHRvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1
dHRvbi5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCdXR0b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQmIFJlbmRlckJ1dHRvbjo6Zm8KIAogYm9vbCBSZW5kZXJCdXR0b246OmNh
bkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZvcm1Db250cm9sRWxlbWVu
dCgpLnJlbmRlcmVySXNFZGl0YWJsZSgpOworICAgIHJldHVybiBmb3JtQ29udHJvbEVsZW1lbnQo
KS5oYXNFZGl0YWJsZVN0eWxlKCk7CiB9CiAKIGJvb2wgUmVuZGVyQnV0dG9uOjpoYXNMaW5lSWZF
bXB0eSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNTQsMTQgKzIzNTQsMTQgQEAgVmlzaWJs
ZVBvc2l0aW9uIFJlbmRlck9iamVjdDo6Y3JlYXRlVmlzaQogewogICAgIC8vIElmIHRoaXMgaXMg
YSBub24tYW5vbnltb3VzIHJlbmRlcmVyIGluIGFuIGVkaXRhYmxlIGFyZWEsIHRoZW4gaXQncyBz
aW1wbGUuCiAgICAgaWYgKE5vZGUqIG5vZGUgPSBub25Qc2V1ZG9Ob2RlKCkpIHsKLSAgICAgICAg
aWYgKCFub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkgeworICAgICAgICBpZiAoIW5vZGUtPmhh
c0VkaXRhYmxlU3R5bGUoKSkgewogICAgICAgICAgICAgLy8gSWYgaXQgY2FuIGJlIGZvdW5kLCB3
ZSBwcmVmZXIgYSB2aXN1YWxseSBlcXVpdmFsZW50IHBvc2l0aW9uIHRoYXQgaXMgZWRpdGFibGUu
IAogICAgICAgICAgICAgUG9zaXRpb24gcG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9z
aXRpb24obm9kZSwgb2Zmc2V0KTsKICAgICAgICAgICAgIFBvc2l0aW9uIGNhbmRpZGF0ZSA9IHBv
c2l0aW9uLmRvd25zdHJlYW0oQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpOwotICAgICAgICAgICAg
aWYgKGNhbmRpZGF0ZS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAg
ICAgICAgICAgIGlmIChjYW5kaWRhdGUuZGVwcmVjYXRlZE5vZGUoKS0+aGFzRWRpdGFibGVTdHls
ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oY2FuZGlkYXRlLCBh
ZmZpbml0eSk7CiAgICAgICAgICAgICBjYW5kaWRhdGUgPSBwb3NpdGlvbi51cHN0cmVhbShDYW5D
cm9zc0VkaXRpbmdCb3VuZGFyeSk7Ci0gICAgICAgICAgICBpZiAoY2FuZGlkYXRlLmRlcHJlY2F0
ZWROb2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgICAgICAgICAgaWYgKGNhbmRpZGF0
ZS5kZXByZWNhdGVkTm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIFZpc2libGVQb3NpdGlvbihjYW5kaWRhdGUsIGFmZmluaXR5KTsKICAgICAgICAgfQog
ICAgICAgICAvLyBGSVhNRTogRWxpbWluYXRlIGxlZ2FjeSBlZGl0aW5nIHBvc2l0aW9ucwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAJ
KHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
RnJhZ21lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIFJlbmRlclRleHRG
cmFnbWVudDo6flJlbmRlclRleHRGcmFnbWVudCgKIAogYm9vbCBSZW5kZXJUZXh0RnJhZ21lbnQ6
OmNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRleHROb2RlKCkgJiYg
dGV4dE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCk7CisgICAgcmV0dXJuIHRleHROb2RlKCkg
JiYgdGV4dE5vZGUoKS0+aGFzRWRpdGFibGVTdHlsZSgpOwogfQogCiB2b2lkIFJlbmRlclRleHRG
cmFnbWVudDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRl
clN0eWxlKiBvbGRTdHlsZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5s
aW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElu
bGluZUJveC5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9Sb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkzLDcgKzY5Myw3IEBAIFJl
bmRlckJsb2NrRmxvdyYgUm9vdElubGluZUJveDo6YmxvY2tGbG8KIAogc3RhdGljIGJvb2wgaXNF
ZGl0YWJsZUxlYWYoSW5saW5lQm94KiBsZWFmKQogewotICAgIHJldHVybiBsZWFmICYmIGxlYWYt
PnJlbmRlcmVyKCkubm9kZSgpICYmIGxlYWYtPnJlbmRlcmVyKCkubm9kZSgpLT5yZW5kZXJlcklz
RWRpdGFibGUoKTsKKyAgICByZXR1cm4gbGVhZiAmJiBsZWFmLT5yZW5kZXJlcigpLm5vZGUoKSAm
JiBsZWFmLT5yZW5kZXJlcigpLm5vZGUoKS0+aGFzRWRpdGFibGVTdHlsZSgpOwogfQogCiBJbmxp
bmVCb3gqIFJvb3RJbmxpbmVCb3g6OmNsb3Nlc3RMZWFmQ2hpbGRGb3JQb2ludChjb25zdCBJbnRQ
b2ludCYgcG9pbnRJbkNvbnRlbnRzLCBib29sIG9ubHlFZGl0YWJsZUxlYXZlcykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDcgKzE4OSw3
IEBAIHZvaWQgU1ZHQUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXYKIAogYm9vbCBTVkdB
RWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0CiB7Ci0gICAgaWYgKHJlbmRlcmVySXNFZGl0
YWJsZSgpKQorICAgIGlmIChoYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBTVkdH
cmFwaGljc0VsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
</data>
<flag name="review"
          id="243518"
          type_id="1"
          status="+"
          setter="kling"
    />
    <flag name="commit-queue"
          id="243519"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219851</attachid>
            <date>2013-12-21 07:55:50 -0800</date>
            <delta_ts>2013-12-21 09:43:23 -0800</delta_ts>
            <desc>fix release build</desc>
            <filename>has-editable-style-2.patch</filename>
            <type>text/plain</type>
            <size>68178</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MDk2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDEzLTEyLTIxICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBGaWd1cmUgb3V0IGlmIG5vZGUg
aXMgZm9jdXNhYmxlIHdpdGhvdXQgcmVxdWlyaW5nIHJlbmRlcmVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjYxMTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmNvbXB1dGVkU3R5bGUpOgorICAgICAgICAKKyAgICAgICAg
ICAgIFVzZSBpbkRvY3VtZW50KCkgdGVzdCBpbnN0ZWFkIG9mIHRoZSBhdHRhY2hlZCgpIHRlc3Qu
IFdlIGNhbiBjb21wdXRlIHN0eWxlIGZvciBhbnl0aGluZyB0aGF0CisgICAgICAgICAgICBpcyBp
biBkb2N1bWVudC4KKworICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OmlzQ29udGVudEVkaXRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzQ29u
dGVudFJpY2hseUVkaXRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omhhc0VkaXRhYmxl
U3R5bGUpOgorICAgICAgICAKKyAgICAgICAgICAgIFVzZSBjb21wdXRlZFN0eWxlIGluc3RlYWQg
b2YgZ2V0dGluZyB0aGUgc3R5bGUgZnJvbSByZW5kZXJlci4gQ29tcHV0ZWQgc3R5bGUgZ2V0cyBj
b25zdHJ1Y3RlZAorICAgICAgICAgICAgb24gZGVtYW5kIGlmIHJlbmRlcmVyIGRvZXMgbm90IGV4
aXN0LiBJZiBpdCBkb2VzIHRoZW4gdGhlIGV4aXN0aW5nIHN0eWxlIGlzIHVzZWQuCisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIFJlbW92ZSBsb29waW5nIGFzIGNvbXB1dGVkU3R5bGUgYWxyZWFk
eSBkb2VzIHRoZSByaWdodCB0aGluZy4KKworICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXNFZGl0
YWJsZVRvQWNjZXNzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjYW5TdGFydFNl
bGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc1Jvb3RFZGl0YWJsZUVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cm9vdEVkaXRhYmxlRWxlbWVudCk6CisgICAgICAg
ICogZG9tL05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omhhc0VkaXRhYmxlU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aGFzUmljaGx5RWRpdGFibGVTdHlsZSk6CisgICAg
ICAgIAorICAgICAgICAgICAgUmVuYW1lZCBmcm9tIHJlbmRlcmVySXNFZGl0YWJsZSBzaW5jZSB0
aGVzZSBubyBsb25nZXIgcmVxdWlyZSByZW5kZXJlci4KKworICAgICAgICAoV2ViQ29yZTo6SFRN
TEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorICAgICAgICAKKyAgICAgICAgICAgIFN0b3AgY2Fs
bGluZyB1cGRhdGVTdHlsZUlmTmVlZGVkKCkgYW5kIGZvcmNpbmcgcmVuZGVyIHRyZWUgY29uc3Ry
dWN0aW9uLgorCiAyMDEzLTEyLTIxICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KIAogICAgICAgICBbU09VUF0gUmVzb3VyY2VIYW5kbGVTb3VwIHNob3VsZCB1c2Ug
YXN5bmMgY2xpZW50IGNhbGxiYWNrcyB3aGVuIGNsaWVudCB1c2VzIGFzeW5jIGNhbGxiYWNrcwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2hpbGRy
ZW5DaAogICAgICAgICAgICAgYXhPYmplY3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uKHBhcmVu
dCwgcGFyZW50LT5kb2N1bWVudCgpLCBBWE9iamVjdENhY2hlOjpBWExpdmVSZWdpb25DaGFuZ2Vk
KTsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHRoaXMgZWxlbWVudCBpcyBhbiBBUklBIHRleHQg
Y29udHJvbCwgbm90aWZ5IHRoZSBBVCBvZiBjaGFuZ2VzLgotICAgICAgICBpZiAocGFyZW50LT5p
c0FSSUFUZXh0Q29udHJvbCgpICYmICFwYXJlbnQtPmlzTmF0aXZlVGV4dENvbnRyb2woKSAmJiAh
cGFyZW50LT5ub2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgICAgICBpZiAocGFyZW50
LT5pc0FSSUFUZXh0Q29udHJvbCgpICYmICFwYXJlbnQtPmlzTmF0aXZlVGV4dENvbnRyb2woKSAm
JiAhcGFyZW50LT5ub2RlKCktPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgICAgIGF4T2Jq
ZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvbihwYXJlbnQsIHBhcmVudC0+ZG9jdW1lbnQoKSwg
QVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNoYW5nZWQpOwogICAgIH0KIH0KQEAgLTczNyw3ICs3Mzcs
NyBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc1JlYWRPbmx5CiAgICAgICAgICAg
ICByZXR1cm4gaW5wdXQtPmlzUmVhZE9ubHkoKTsKICAgICB9CiAKLSAgICByZXR1cm4gIW5vZGUt
PnJlbmRlcmVySXNFZGl0YWJsZSgpOworICAgIHJldHVybiAhbm9kZS0+aGFzRWRpdGFibGVTdHls
ZSgpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc1JlcXVpcmVkKCkgY29u
c3QKQEAgLTIwNDgsNyArMjA0OCw3IEBAIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWMKICAgICByZXR1cm4gcm9sZTsKIH0gICAKIAotLy8gSWYgeW91IGNhbGwgbm9kZS0+
cmVuZGVyZXJJc0VkaXRhYmxlKCkgc2luY2UgdGhhdCB3aWxsIHJldHVybiB0cnVlIGlmIGFuIGFu
Y2VzdG9yIGlzIGVkaXRhYmxlLgorLy8gSWYgeW91IGNhbGwgbm9kZS0+aGFzRWRpdGFibGVTdHls
ZSgpIHNpbmNlIHRoYXQgd2lsbCByZXR1cm4gdHJ1ZSBpZiBhbiBhbmNlc3RvciBpcyBlZGl0YWJs
ZS4KIC8vIFRoaXMgb25seSByZXR1cm5zIHRydWUgaWYgdGhpcyBpcyB0aGUgZWxlbWVudCB0aGF0
IGFjdHVhbGx5IGhhcyB0aGUgY29udGVudEVkaXRhYmxlIGF0dHJpYnV0ZSBzZXQuCiBib29sIEFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpoYXNDb250ZW50RWRpdGFibGVBdHRyaWJ1dGVTZXQoKSBj
b25zdAogewpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAxNjA5MTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NDIsMTEgKzU0MiwxMSBAQCBib29sIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmlzUmVhZE9uCiAgICAgCiAgICAgaWYgKGlzV2ViQXJlYSgpKSB7CiAgICAg
ICAgIGlmIChIVE1MRWxlbWVudCogYm9keSA9IG1fcmVuZGVyZXItPmRvY3VtZW50KCkuYm9keSgp
KSB7Ci0gICAgICAgICAgICBpZiAoYm9keS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgICAg
ICAgICBpZiAoYm9keS0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiAhbV9yZW5kZXJlci0+ZG9jdW1l
bnQoKS5yZW5kZXJlcklzRWRpdGFibGUoKTsKKyAgICAgICAgcmV0dXJuICFtX3JlbmRlcmVyLT5k
b2N1bWVudCgpLmhhc0VkaXRhYmxlU3R5bGUoKTsKICAgICB9CiAKICAgICByZXR1cm4gQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OmlzUmVhZE9ubHkoKTsKQEAgLTEyNTUsNyArMTI1NSw3IEBAIGJv
b2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y29tcHV0ZUEKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAogICAgIC8vIEFueXRoaW5nIHRoYXQgaXMgY29udGVudCBlZGl0YWJsZSBzaG91
bGQgbm90IGJlIGlnbm9yZWQuCi0gICAgLy8gSG93ZXZlciwgb25lIGNhbm5vdCBqdXN0IGNhbGwg
bm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgc2luY2UgdGhhdCB3aWxsIGFzayBpZiBpdHMgcGFy
ZW50cworICAgIC8vIEhvd2V2ZXIsIG9uZSBjYW5ub3QganVzdCBjYWxsIG5vZGUtPmhhc0VkaXRh
YmxlU3R5bGUoKSBzaW5jZSB0aGF0IHdpbGwgYXNrIGlmIGl0cyBwYXJlbnRzCiAgICAgLy8gYXJl
IGFsc28gZWRpdGFibGUuIE9ubHkgdGhlIHRvcCBsZXZlbCBjb250ZW50IGVkaXRhYmxlIHJlZ2lv
biBzaG91bGQgYmUgZXhwb3NlZC4KICAgICBpZiAoaGFzQ29udGVudEVkaXRhYmxlQXR0cmlidXRl
U2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI3NDQsNyArMjc0NCw3IEBAIHZvaWQg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dGV4dENoYW4KICAgICAgICAgaWYgKHBhcmVudC0+
c3VwcG9ydHNBUklBTGl2ZVJlZ2lvbigpKQogICAgICAgICAgICAgY2FjaGUtPnBvc3ROb3RpZmlj
YXRpb24ocmVuZGVyUGFyZW50LCBBWE9iamVjdENhY2hlOjpBWExpdmVSZWdpb25DaGFuZ2VkKTsK
IAotICAgICAgICBpZiAocGFyZW50LT5pc0FSSUFUZXh0Q29udHJvbCgpICYmICFwYXJlbnQtPmlz
TmF0aXZlVGV4dENvbnRyb2woKSAmJiAhcGFyZW50LT5ub2RlKCktPnJlbmRlcmVySXNFZGl0YWJs
ZSgpKQorICAgICAgICBpZiAocGFyZW50LT5pc0FSSUFUZXh0Q29udHJvbCgpICYmICFwYXJlbnQt
PmlzTmF0aXZlVGV4dENvbnRyb2woKSAmJiAhcGFyZW50LT5ub2RlKCktPmhhc0VkaXRhYmxlU3R5
bGUoKSkKICAgICAgICAgICAgIGNhY2hlLT5wb3N0Tm90aWZpY2F0aW9uKHJlbmRlclBhcmVudCwg
QVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNoYW5nZWQpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAJKHJl
dmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eVRhYmxlOjppc0RhdGFUYWJsZSgpIGMKICAgICAvLyBXaGVuIGEgc2VjdGlvbiBv
ZiB0aGUgZG9jdW1lbnQgaXMgY29udGVudEVkaXRhYmxlLCBhbGwgdGFibGVzIHNob3VsZCBiZQog
ICAgIC8vIHRyZWF0ZWQgYXMgZGF0YSB0YWJsZXMsIG90aGVyd2lzZSB1c2VycyBtYXkgbm90IGJl
IGFibGUgdG8gd29yayB3aXRoIHJpY2gKICAgICAvLyB0ZXh0IGVkaXRvcnMgdGhhdCBhbGxvdyBj
cmVhdGluZyBhbmQgZWRpdGluZyB0YWJsZXMuCi0gICAgaWYgKG5vZGUoKSAmJiBub2RlKCktPnJl
bmRlcmVySXNFZGl0YWJsZSgpKQorICAgIGlmIChub2RlKCkgJiYgbm9kZSgpLT5oYXNFZGl0YWJs
ZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gVGhpcyBlbXBsb3lzIGEg
aGV1cmlzdGljIHRvIGRldGVybWluZSBpZiB0aGlzIHRhYmxlIHNob3VsZCBhcHBlYXIuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDE2MDkwOCkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw3ICszMjgsNyBAQCBz
dGF0aWMgV2lkZ2V0KiB3aWRnZXRGb3JFbGVtZW50KEVsZW1lbnQqCiBzdGF0aWMgYm9vbCBhY2Nl
cHRzRWRpdGluZ0ZvY3VzKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUpOwotICAgIEFT
U0VSVChub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSk7CisgICAgQVNTRVJUKG5vZGUtPmhhc0Vk
aXRhYmxlU3R5bGUoKSk7CiAKICAgICBOb2RlKiByb290ID0gbm9kZS0+cm9vdEVkaXRhYmxlRWxl
bWVudCgpOwogICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MDkwOCkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0OCw3ICsyMTQ4LDcgQEAg
UmVuZGVyU3R5bGUqIEVsZW1lbnQ6OmNvbXB1dGVkU3R5bGUoUHNldQogICAgICAgICByZXR1cm4g
dXNlZFN0eWxlOwogICAgIH0KIAotICAgIGlmICghYXR0YWNoZWQoKSkgeworICAgIGlmICghaW5E
b2N1bWVudCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUcnkgdG8gZG8gYmV0dGVyIHRoYW4gdGhp
cy4gRW5zdXJlIHRoYXQgc3R5bGVGb3JFbGVtZW50KCkgd29ya3MgZm9yIGVsZW1lbnRzIHRoYXQg
YXJlIG5vdCBpbiB0aGUKICAgICAgICAgLy8gZG9jdW1lbnQgdHJlZSBhbmQgZmlndXJlIG91dCB3
aGVuIHRvIGRlc3Ryb3kgdGhlIGNvbXB1dGVkIHN0eWxlIGZvciBzdWNoIGVsZW1lbnRzLgogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDE2MDkw
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYs
NiArNTYsNyBAQAogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJMb2dnaW5n
LmgiCiAjaW5jbHVkZSAiTXV0YXRpb25FdmVudC5oIgorI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHls
ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
V2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgpAQCAtNTQy
LDE0ICs1NDMsMTIgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBOb2RlOjpuYW1lc3BhY2VVUkkoKQog
CiBib29sIE5vZGU6OmlzQ29udGVudEVkaXRhYmxlKFVzZXJTZWxlY3RBbGxUcmVhdG1lbnQgdHJl
YXRtZW50KQogewotICAgIGRvY3VtZW50KCkudXBkYXRlU3R5bGVJZk5lZWRlZCgpOwotICAgIHJl
dHVybiByZW5kZXJlcklzRWRpdGFibGUoRWRpdGFibGUsIHRyZWF0bWVudCk7CisgICAgcmV0dXJu
IGhhc0VkaXRhYmxlU3R5bGUoRWRpdGFibGUsIHRyZWF0bWVudCk7CiB9CiAKIGJvb2wgTm9kZTo6
aXNDb250ZW50UmljaGx5RWRpdGFibGUoKQogewotICAgIGRvY3VtZW50KCkudXBkYXRlU3R5bGVJ
Zk5lZWRlZCgpOwotICAgIHJldHVybiByZW5kZXJlcklzRWRpdGFibGUoUmljaGx5RWRpdGFibGUs
IFVzZXJTZWxlY3RBbGxJc0Fsd2F5c05vbkVkaXRhYmxlKTsKKyAgICByZXR1cm4gaGFzRWRpdGFi
bGVTdHlsZShSaWNobHlFZGl0YWJsZSwgVXNlclNlbGVjdEFsbElzQWx3YXlzTm9uRWRpdGFibGUp
OwogfQogCiB2b2lkIE5vZGU6Omluc3BlY3QoKQpAQCAtNTYwLDEwICs1NTksMTIgQEAgdm9pZCBO
b2RlOjppbnNwZWN0KCkKICNlbmRpZgogfQogCi1ib29sIE5vZGU6OnJlbmRlcmVySXNFZGl0YWJs
ZShFZGl0YWJsZUxldmVsIGVkaXRhYmxlTGV2ZWwsIFVzZXJTZWxlY3RBbGxUcmVhdG1lbnQgdHJl
YXRtZW50KSBjb25zdAorYm9vbCBOb2RlOjpoYXNFZGl0YWJsZVN0eWxlKEVkaXRhYmxlTGV2ZWwg
ZWRpdGFibGVMZXZlbCwgVXNlclNlbGVjdEFsbFRyZWF0bWVudCB0cmVhdG1lbnQpIGNvbnN0CiB7
CiAgICAgaWYgKGRvY3VtZW50KCkuZnJhbWUoKSAmJiBkb2N1bWVudCgpLmZyYW1lKCktPnBhZ2Uo
KSAmJiBkb2N1bWVudCgpLmZyYW1lKCktPnBhZ2UoKS0+aXNFZGl0YWJsZSgpICYmICFjb250YWlu
aW5nU2hhZG93Um9vdCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIWRvY3VtZW50
KCkuaGFzTGl2aW5nUmVuZGVyVHJlZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBp
ZiAoaXNQc2V1ZG9FbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU3MiwzNSAr
NTczLDM0IEBAIGJvb2wgTm9kZTo6cmVuZGVyZXJJc0VkaXRhYmxlKEVkaXRhYmxlTGUKICAgICAv
LyBDb250YWluZXJOb2RlOjpzZXRGb2N1cygpIGNhbGxzIHNldE5lZWRzU3R5bGVSZWNhbGMoKSwg
c28gdGhlIGFzc2VydGlvbgogICAgIC8vIHdvdWxkIGZpcmUgaW4gdGhlIG1pZGRsZSBvZiBEb2N1
bWVudDo6c2V0Rm9jdXNlZEVsZW1lbnQoKS4KIAotICAgIGZvciAoY29uc3QgTm9kZSogbm9kZSA9
IHRoaXM7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKChu
b2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgbm9kZS0+aXNEb2N1bWVudE5vZGUoKSkgJiYgbm9kZS0+
cmVuZGVyZXIoKSkgeworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGlzRG9jdW1lbnROb2RlKCkg
PyByZW5kZXJTdHlsZSgpIDogY29uc3RfY2FzdDxOb2RlKj4odGhpcyktPmNvbXB1dGVkU3R5bGUo
KTsKKyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHN0eWxl
LT5kaXNwbGF5KCkgPT0gTk9ORSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogI2lmIEVOQUJMRShV
U0VSU0VMRUNUX0FMTCkKLSAgICAgICAgICAgIC8vIEVsZW1lbnRzIHdpdGggdXNlci1zZWxlY3Q6
IGFsbCBzdHlsZSBhcmUgY29uc2lkZXJlZCBhdG9taWMKLSAgICAgICAgICAgIC8vIHRoZXJlZm9y
ZSBub24gZWRpdGFibGUuCi0gICAgICAgICAgICBpZiAodHJlYXRtZW50ID09IFVzZXJTZWxlY3RB
bGxJc0Fsd2F5c05vbkVkaXRhYmxlICYmIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCkudXNlclNl
bGVjdCgpID09IFNFTEVDVF9BTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IC8vIEVsZW1lbnRzIHdpdGggdXNlci1zZWxlY3Q6IGFsbCBzdHlsZSBhcmUgY29uc2lkZXJlZCBh
dG9taWMKKyAgICAvLyB0aGVyZWZvcmUgbm9uIGVkaXRhYmxlLgorICAgIGlmICh0cmVhdG1lbnQg
PT0gVXNlclNlbGVjdEFsbElzQWx3YXlzTm9uRWRpdGFibGUgJiYgc3R5bGUtPnVzZXJTZWxlY3Qo
KSA9PSBTRUxFQ1RfQUxMKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAjZWxzZQotICAgICAgICAg
ICAgVU5VU0VEX1BBUkFNKHRyZWF0bWVudCk7CisgICAgVU5VU0VEX1BBUkFNKHRyZWF0bWVudCk7
CiAjZW5kaWYKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS51
c2VyTW9kaWZ5KCkpIHsKLSAgICAgICAgICAgIGNhc2UgUkVBRF9PTkxZOgotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNhc2UgUkVBRF9XUklURToKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGNhc2UgUkVBRF9XUklURV9QTEFJTlRF
WFRfT05MWToKLSAgICAgICAgICAgICAgICByZXR1cm4gZWRpdGFibGVMZXZlbCAhPSBSaWNobHlF
ZGl0YWJsZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgc3dpdGNoIChzdHls
ZS0+dXNlck1vZGlmeSgpKSB7CisgICAgY2FzZSBSRUFEX09OTFk6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBjYXNlIFJFQURfV1JJVEU6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNh
c2UgUkVBRF9XUklURV9QTEFJTlRFWFRfT05MWToKKyAgICAgICAgcmV0dXJuIGVkaXRhYmxlTGV2
ZWwgIT0gUmljaGx5RWRpdGFibGU7CiAgICAgfQotCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIE5vZGU6OmlzRWRpdGFibGVUb0FjY2Vzc2li
aWxpdHkoRWRpdGFibGVMZXZlbCBlZGl0YWJsZUxldmVsKSBjb25zdAogewotICAgIGlmIChyZW5k
ZXJlcklzRWRpdGFibGUoZWRpdGFibGVMZXZlbCkpCisgICAgaWYgKGhhc0VkaXRhYmxlU3R5bGUo
ZWRpdGFibGVMZXZlbCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gRklYTUU6IFJl
c3BlY3QgZWRpdGFibGVMZXZlbCBmb3IgQVJJQSBlZGl0YWJsZSBlbGVtZW50cy4KQEAgLTkyMSw3
ICs5MjEsNyBAQCBpbnQgTm9kZTo6bWF4Q2hhcmFjdGVyT2Zmc2V0KCkgY29uc3QKIC8vIGlzIG9i
dmlvdXNseSBtaXNwbGFjZWQuCiBib29sIE5vZGU6OmNhblN0YXJ0U2VsZWN0aW9uKCkgY29uc3QK
IHsKLSAgICBpZiAocmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgaWYgKGhhc0VkaXRhYmxlU3R5
bGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAocmVuZGVyZXIoKSkgewpAQCAt
MTAxNyw3ICsxMDE3LDcgQEAgdm9pZCBOb2RlOjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiBp
bgogCiBib29sIE5vZGU6OmlzUm9vdEVkaXRhYmxlRWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHJlbmRlcmVySXNFZGl0YWJsZSgpICYmIGlzRWxlbWVudE5vZGUoKSAmJiAoIXBhcmVudE5v
ZGUoKSB8fCAhcGFyZW50Tm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKQorICAgIHJldHVybiBo
YXNFZGl0YWJsZVN0eWxlKCkgJiYgaXNFbGVtZW50Tm9kZSgpICYmICghcGFyZW50Tm9kZSgpIHx8
ICFwYXJlbnROb2RlKCktPmhhc0VkaXRhYmxlU3R5bGUoKQogICAgICAgICB8fCAhcGFyZW50Tm9k
ZSgpLT5pc0VsZW1lbnROb2RlKCkgfHwgaGFzVGFnTmFtZShib2R5VGFnKSk7CiB9CiAKQEAgLTEw
MzQsNyArMTAzNCw3IEBAIEVsZW1lbnQqIE5vZGU6OnJvb3RFZGl0YWJsZUVsZW1lbnQoRWRpdGEK
IEVsZW1lbnQqIE5vZGU6OnJvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdAogewogICAgIEVsZW1l
bnQqIHJlc3VsdCA9IDA7Ci0gICAgZm9yIChOb2RlKiBuID0gY29uc3RfY2FzdDxOb2RlKj4odGhp
cyk7IG4gJiYgbi0+cmVuZGVyZXJJc0VkaXRhYmxlKCk7IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsK
KyAgICBmb3IgKE5vZGUqIG4gPSBjb25zdF9jYXN0PE5vZGUqPih0aGlzKTsgbiAmJiBuLT5oYXNF
ZGl0YWJsZVN0eWxlKCk7IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgaWYgKG4tPmlz
RWxlbWVudE5vZGUoKSkKICAgICAgICAgICAgIHJlc3VsdCA9IHRvRWxlbWVudChuKTsKICAgICAg
ICAgaWYgKG4tPmhhc1RhZ05hbWUoYm9keVRhZykpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9u
IDE2MDkwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM0MiwxMSArMzQyLDExIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaW5zcGVjdCgpOwogCi0gICAg
Ym9vbCByZW5kZXJlcklzRWRpdGFibGUoRWRpdGFibGVUeXBlIGVkaXRhYmxlVHlwZSA9IENvbnRl
bnRJc0VkaXRhYmxlLCBVc2VyU2VsZWN0QWxsVHJlYXRtZW50IHRyZWF0bWVudCA9IFVzZXJTZWxl
Y3RBbGxJc0Fsd2F5c05vbkVkaXRhYmxlKSBjb25zdAorICAgIGJvb2wgaGFzRWRpdGFibGVTdHls
ZShFZGl0YWJsZVR5cGUgZWRpdGFibGVUeXBlID0gQ29udGVudElzRWRpdGFibGUsIFVzZXJTZWxl
Y3RBbGxUcmVhdG1lbnQgdHJlYXRtZW50ID0gVXNlclNlbGVjdEFsbElzQWx3YXlzTm9uRWRpdGFi
bGUpIGNvbnN0CiAgICAgewogICAgICAgICBzd2l0Y2ggKGVkaXRhYmxlVHlwZSkgewogICAgICAg
ICBjYXNlIENvbnRlbnRJc0VkaXRhYmxlOgotICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVySXNF
ZGl0YWJsZShFZGl0YWJsZSwgdHJlYXRtZW50KTsKKyAgICAgICAgICAgIHJldHVybiBoYXNFZGl0
YWJsZVN0eWxlKEVkaXRhYmxlLCB0cmVhdG1lbnQpOwogICAgICAgICBjYXNlIEhhc0VkaXRhYmxl
QVhSb2xlOgogICAgICAgICAgICAgcmV0dXJuIGlzRWRpdGFibGVUb0FjY2Vzc2liaWxpdHkoRWRp
dGFibGUpOwogICAgICAgICB9CkBAIC0zNTQsMTEgKzM1NCwxMSBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBib29sIHJlbmRlcmVySXNSaWNobHlFZGl0YWJs
ZShFZGl0YWJsZVR5cGUgZWRpdGFibGVUeXBlID0gQ29udGVudElzRWRpdGFibGUpIGNvbnN0Cisg
ICAgYm9vbCBoYXNSaWNobHlFZGl0YWJsZVN0eWxlKEVkaXRhYmxlVHlwZSBlZGl0YWJsZVR5cGUg
PSBDb250ZW50SXNFZGl0YWJsZSkgY29uc3QKICAgICB7CiAgICAgICAgIHN3aXRjaCAoZWRpdGFi
bGVUeXBlKSB7CiAgICAgICAgIGNhc2UgQ29udGVudElzRWRpdGFibGU6Ci0gICAgICAgICAgICBy
ZXR1cm4gcmVuZGVyZXJJc0VkaXRhYmxlKFJpY2hseUVkaXRhYmxlLCBVc2VyU2VsZWN0QWxsSXNB
bHdheXNOb25FZGl0YWJsZSk7CisgICAgICAgICAgICByZXR1cm4gaGFzRWRpdGFibGVTdHlsZShS
aWNobHlFZGl0YWJsZSwgVXNlclNlbGVjdEFsbElzQWx3YXlzTm9uRWRpdGFibGUpOwogICAgICAg
ICBjYXNlIEhhc0VkaXRhYmxlQVhSb2xlOgogICAgICAgICAgICAgcmV0dXJuIGlzRWRpdGFibGVU
b0FjY2Vzc2liaWxpdHkoUmljaGx5RWRpdGFibGUpOwogICAgICAgICB9CkBAIC02NTUsNyArNjU1
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGhhc1RyZWVTaGFyZWRQYXJlbnQoKSBjb25zdCB7IHJl
dHVybiAhIXBhcmVudE5vZGUoKTsgfQogCiAgICAgZW51bSBFZGl0YWJsZUxldmVsIHsgRWRpdGFi
bGUsIFJpY2hseUVkaXRhYmxlIH07Ci0gICAgYm9vbCByZW5kZXJlcklzRWRpdGFibGUoRWRpdGFi
bGVMZXZlbCwgVXNlclNlbGVjdEFsbFRyZWF0bWVudCA9IFVzZXJTZWxlY3RBbGxJc0Fsd2F5c05v
bkVkaXRhYmxlKSBjb25zdDsKKyAgICBib29sIGhhc0VkaXRhYmxlU3R5bGUoRWRpdGFibGVMZXZl
bCwgVXNlclNlbGVjdEFsbFRyZWF0bWVudCA9IFVzZXJTZWxlY3RBbGxJc0Fsd2F5c05vbkVkaXRh
YmxlKSBjb25zdDsKICAgICBib29sIGlzRWRpdGFibGVUb0FjY2Vzc2liaWxpdHkoRWRpdGFibGVM
ZXZlbCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBPVkVSUklE
RTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcs
NyBAQCBzdGF0aWMgTm9kZSogbmV4dFJlbmRlcmVkRWRpdGFibGUoTm9kZSogCiB7CiAgICAgd2hp
bGUgKChub2RlID0gbmV4dExlYWZOb2RlKG5vZGUpKSkgewogICAgICAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFyZW5kZXJlciB8fCAh
bm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgICAgIGlmICghcmVuZGVyZXIgfHwgIW5v
ZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBp
ZiAoaGFzSW5saW5lQm94V3JhcHBlcigqcmVuZGVyZXIpKQogICAgICAgICAgICAgcmV0dXJuIG5v
ZGU7CkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyBOb2RlKiBwcmV2aW91c1JlbmRlcmVkRWRpdGFi
bGUoTm8KIHsKICAgICB3aGlsZSAoKG5vZGUgPSBwcmV2aW91c0xlYWZOb2RlKG5vZGUpKSkgewog
ICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAg
ICAgaWYgKCFyZW5kZXJlciB8fCAhbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgICAg
IGlmICghcmVuZGVyZXIgfHwgIW5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBpZiAoaGFzSW5saW5lQm94V3JhcHBlcigqcmVuZGVyZXIpKQog
ICAgICAgICAgICAgcmV0dXJuIG5vZGU7CkBAIC00MzQsMTUgKzQzNCwxNSBAQCBib29sIFBvc2l0
aW9uOjphdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOCiBib29sIFBvc2l0aW9uOjphdEVkaXRpbmdC
b3VuZGFyeSgpIGNvbnN0CiB7CiAgICAgUG9zaXRpb24gbmV4dFBvc2l0aW9uID0gZG93bnN0cmVh
bShDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7Ci0gICAgaWYgKGF0Rmlyc3RFZGl0aW5nUG9zaXRp
b25Gb3JOb2RlKCkgJiYgbmV4dFBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFuZXh0UG9zaXRpb24u
ZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgaWYgKGF0Rmlyc3RF
ZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgJiYgbmV4dFBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFu
ZXh0UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgUG9zaXRpb24gcHJldlBvc2l0aW9uID0gdXBz
dHJlYW0oQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpOwotICAgIGlmIChhdExhc3RFZGl0aW5nUG9z
aXRpb25Gb3JOb2RlKCkgJiYgcHJldlBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFwcmV2UG9zaXRp
b24uZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgaWYgKGF0TGFz
dEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSAmJiBwcmV2UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYg
IXByZXZQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAKLSAgICByZXR1cm4gbmV4dFBvc2l0aW9uLmlzTm90
TnVsbCgpICYmICFuZXh0UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRh
YmxlKCkKLSAgICAgICAgJiYgcHJldlBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFwcmV2UG9zaXRp
b24uZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCk7CisgICAgcmV0dXJuIG5l
eHRQb3NpdGlvbi5pc05vdE51bGwoKSAmJiAhbmV4dFBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkt
Pmhhc0VkaXRhYmxlU3R5bGUoKQorICAgICAgICAmJiBwcmV2UG9zaXRpb24uaXNOb3ROdWxsKCkg
JiYgIXByZXZQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCk7CiB9
CiAKIE5vZGUqIFBvc2l0aW9uOjpwYXJlbnRFZGl0aW5nQm91bmRhcnkoKSBjb25zdApAQCAtNDU1
LDcgKzQ1NSw3IEBAIE5vZGUqIFBvc2l0aW9uOjpwYXJlbnRFZGl0aW5nQm91bmRhcnkoKSAKICAg
ICAgICAgcmV0dXJuIDA7CiAKICAgICBOb2RlKiBib3VuZGFyeSA9IG1fYW5jaG9yTm9kZS5nZXQo
KTsKLSAgICB3aGlsZSAoYm91bmRhcnkgIT0gZG9jdW1lbnRFbGVtZW50ICYmIGJvdW5kYXJ5LT5u
b25TaGFkb3dCb3VuZGFyeVBhcmVudE5vZGUoKSAmJiBtX2FuY2hvck5vZGUtPnJlbmRlcmVySXNF
ZGl0YWJsZSgpID09IGJvdW5kYXJ5LT5wYXJlbnROb2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgp
KQorICAgIHdoaWxlIChib3VuZGFyeSAhPSBkb2N1bWVudEVsZW1lbnQgJiYgYm91bmRhcnktPm5v
blNoYWRvd0JvdW5kYXJ5UGFyZW50Tm9kZSgpICYmIG1fYW5jaG9yTm9kZS0+aGFzRWRpdGFibGVT
dHlsZSgpID09IGJvdW5kYXJ5LT5wYXJlbnROb2RlKCktPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAg
ICAgICAgYm91bmRhcnkgPSBib3VuZGFyeS0+bm9uU2hhZG93Qm91bmRhcnlQYXJlbnROb2RlKCk7
CiAgICAgCiAgICAgcmV0dXJuIGJvdW5kYXJ5OwpAQCAtNTkwLDE3ICs1OTAsMTcgQEAgUG9zaXRp
b24gUG9zaXRpb246OnVwc3RyZWFtKEVkaXRpbmdCb3VuZAogICAgIC8vIEZJWE1FOiBQb3NpdGlv
bkl0ZXJhdG9yIHNob3VsZCByZXNwZWN0IEJlZm9yZSBhbmQgQWZ0ZXIgcG9zaXRpb25zLgogICAg
IFBvc2l0aW9uSXRlcmF0b3IgbGFzdFZpc2libGUgPSBtX2FuY2hvclR5cGUgPT0gUG9zaXRpb25J
c0FmdGVyQW5jaG9yID8gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fYW5jaG9yTm9kZS5n
ZXQoKSwgY2FyZXRNYXhPZmZzZXQobV9hbmNob3JOb2RlLmdldCgpKSkgOiAqdGhpczsKICAgICBQ
b3NpdGlvbkl0ZXJhdG9yIGN1cnJlbnRQb3MgPSBsYXN0VmlzaWJsZTsKLSAgICBib29sIHN0YXJ0
RWRpdGFibGUgPSBzdGFydE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpOworICAgIGJvb2wgc3Rh
cnRFZGl0YWJsZSA9IHN0YXJ0Tm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpOwogICAgIE5vZGUqIGxh
c3ROb2RlID0gc3RhcnROb2RlOwogICAgIGJvb2wgYm91bmRhcnlDcm9zc2VkID0gZmFsc2U7CiAg
ICAgZm9yICg7ICFjdXJyZW50UG9zLmF0U3RhcnQoKTsgY3VycmVudFBvcy5kZWNyZW1lbnQoKSkg
ewogICAgICAgICBOb2RlKiBjdXJyZW50Tm9kZSA9IGN1cnJlbnRQb3Mubm9kZSgpOwogICAgICAg
ICAKICAgICAgICAgLy8gRG9uJ3QgY2hlY2sgZm9yIGFuIGVkaXRhYmlsaXR5IGNoYW5nZSBpZiB3
ZSBoYXZlbid0IG1vdmVkIHRvIGEgZGlmZmVyZW50IG5vZGUsCi0gICAgICAgIC8vIHRvIGF2b2lk
IHRoZSBleHBlbnNlIG9mIGNvbXB1dGluZyByZW5kZXJlcklzRWRpdGFibGUoKS4KKyAgICAgICAg
Ly8gdG8gYXZvaWQgdGhlIGV4cGVuc2Ugb2YgY29tcHV0aW5nIGhhc0VkaXRhYmxlU3R5bGUoKS4K
ICAgICAgICAgaWYgKGN1cnJlbnROb2RlICE9IGxhc3ROb2RlKSB7CiAgICAgICAgICAgICAvLyBE
b24ndCBjaGFuZ2UgZWRpdGFiaWxpdHkuCi0gICAgICAgICAgICBib29sIGN1cnJlbnRFZGl0YWJs
ZSA9IGN1cnJlbnROb2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKTsKKyAgICAgICAgICAgIGJvb2wg
Y3VycmVudEVkaXRhYmxlID0gY3VycmVudE5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKTsKICAgICAg
ICAgICAgIGlmIChzdGFydEVkaXRhYmxlICE9IGN1cnJlbnRFZGl0YWJsZSkgewogICAgICAgICAg
ICAgICAgIGlmIChydWxlID09IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTcxNywxNyArNzE3LDE3IEBAIFBvc2l0aW9uIFBvc2l0aW9u
Ojpkb3duc3RyZWFtKEVkaXRpbmdCb3UKICAgICAvLyBGSVhNRTogUG9zaXRpb25JdGVyYXRvciBz
aG91bGQgcmVzcGVjdCBCZWZvcmUgYW5kIEFmdGVyIHBvc2l0aW9ucy4KICAgICBQb3NpdGlvbkl0
ZXJhdG9yIGxhc3RWaXNpYmxlID0gbV9hbmNob3JUeXBlID09IFBvc2l0aW9uSXNBZnRlckFuY2hv
ciA/IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX2FuY2hvck5vZGUuZ2V0KCksIGNhcmV0
TWF4T2Zmc2V0KG1fYW5jaG9yTm9kZS5nZXQoKSkpIDogKnRoaXM7CiAgICAgUG9zaXRpb25JdGVy
YXRvciBjdXJyZW50UG9zID0gbGFzdFZpc2libGU7Ci0gICAgYm9vbCBzdGFydEVkaXRhYmxlID0g
c3RhcnROb2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKTsKKyAgICBib29sIHN0YXJ0RWRpdGFibGUg
PSBzdGFydE5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKTsKICAgICBOb2RlKiBsYXN0Tm9kZSA9IHN0
YXJ0Tm9kZTsKICAgICBib29sIGJvdW5kYXJ5Q3Jvc3NlZCA9IGZhbHNlOwogICAgIGZvciAoOyAh
Y3VycmVudFBvcy5hdEVuZCgpOyBjdXJyZW50UG9zLmluY3JlbWVudCgpKSB7ICAgCiAgICAgICAg
IE5vZGUqIGN1cnJlbnROb2RlID0gY3VycmVudFBvcy5ub2RlKCk7CiAgICAgICAgIAogICAgICAg
ICAvLyBEb24ndCBjaGVjayBmb3IgYW4gZWRpdGFiaWxpdHkgY2hhbmdlIGlmIHdlIGhhdmVuJ3Qg
bW92ZWQgdG8gYSBkaWZmZXJlbnQgbm9kZSwKLSAgICAgICAgLy8gdG8gYXZvaWQgdGhlIGV4cGVu
c2Ugb2YgY29tcHV0aW5nIHJlbmRlcmVySXNFZGl0YWJsZSgpLgorICAgICAgICAvLyB0byBhdm9p
ZCB0aGUgZXhwZW5zZSBvZiBjb21wdXRpbmcgaGFzRWRpdGFibGVTdHlsZSgpLgogICAgICAgICBp
ZiAoY3VycmVudE5vZGUgIT0gbGFzdE5vZGUpIHsKICAgICAgICAgICAgIC8vIERvbid0IGNoYW5n
ZSBlZGl0YWJpbGl0eS4KLSAgICAgICAgICAgIGJvb2wgY3VycmVudEVkaXRhYmxlID0gY3VycmVu
dE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpOworICAgICAgICAgICAgYm9vbCBjdXJyZW50RWRp
dGFibGUgPSBjdXJyZW50Tm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpOwogICAgICAgICAgICAgaWYg
KHN0YXJ0RWRpdGFibGUgIT0gY3VycmVudEVkaXRhYmxlKSB7CiAgICAgICAgICAgICAgICAgaWYg
KHJ1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpCiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwpAQCAtOTQyLDEwICs5NDIsMTAgQEAgYm9vbCBQb3NpdGlvbjo6aXNDYW5kaWRhdGUo
KSBjb25zdAogICAgICAgICBpZiAoYmxvY2subG9naWNhbEhlaWdodCgpIHx8IG1fYW5jaG9yTm9k
ZS0+aGFzVGFnTmFtZShib2R5VGFnKSkgewogICAgICAgICAgICAgaWYgKCFQb3NpdGlvbjo6aGFz
UmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQoYmxvY2spKQogICAgICAg
ICAgICAgICAgIHJldHVybiBhdEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpICYmICFQb3Np
dGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUoZGVwcmVjYXRlZE5vZGUoKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gbV9hbmNob3JOb2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSAmJiAhUG9zaXRpb246
Om5vZGVJc1VzZXJTZWxlY3ROb25lKGRlcHJlY2F0ZWROb2RlKCkpICYmIGF0RWRpdGluZ0JvdW5k
YXJ5KCk7CisgICAgICAgICAgICByZXR1cm4gbV9hbmNob3JOb2RlLT5oYXNFZGl0YWJsZVN0eWxl
KCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgpKSAm
JiBhdEVkaXRpbmdCb3VuZGFyeSgpOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIHJl
dHVybiBtX2FuY2hvck5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpICYmICFQb3NpdGlvbjo6bm9k
ZUlzVXNlclNlbGVjdE5vbmUoZGVwcmVjYXRlZE5vZGUoKSkgJiYgYXRFZGl0aW5nQm91bmRhcnko
KTsKKyAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpICYmICFQ
b3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUoZGVwcmVjYXRlZE5vZGUoKSkgJiYgYXRFZGl0
aW5nQm91bmRhcnkoKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vUG9zaXRpb25JdGVyYXRvci5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDcg
KzE2NSw3IEBAIGJvb2wgUG9zaXRpb25JdGVyYXRvcjo6aXNDYW5kaWRhdGUoKSBjb24KICAgICAg
ICAgaWYgKGJsb2NrLmxvZ2ljYWxIZWlnaHQoKSB8fCBtX2FuY2hvck5vZGUtPmhhc1RhZ05hbWUo
Ym9keVRhZykpIHsKICAgICAgICAgICAgIGlmICghUG9zaXRpb246Omhhc1JlbmRlcmVkTm9uQW5v
bnltb3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KGJsb2NrKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gYXRTdGFydE9mTm9kZSgpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobV9h
bmNob3JOb2RlKTsKLSAgICAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPnJlbmRlcmVySXNF
ZGl0YWJsZSgpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobV9hbmNob3JOb2Rl
KSAmJiBQb3NpdGlvbigqdGhpcykuYXRFZGl0aW5nQm91bmRhcnkoKTsKKyAgICAgICAgICAgIHJl
dHVybiBtX2FuY2hvck5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSAmJiAhUG9zaXRpb246Om5vZGVJ
c1VzZXJTZWxlY3ROb25lKG1fYW5jaG9yTm9kZSkgJiYgUG9zaXRpb24oKnRoaXMpLmF0RWRpdGlu
Z0JvdW5kYXJ5KCk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxNjA5MDgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDIsNyArNDIsNyBAQCBBcHBlbmROb2RlQ29tbWFuZDo6QXBwZW5kTm9kZUNvbW1hbmQoUGFz
CiAgICAgQVNTRVJUKG1fbm9kZSk7CiAgICAgQVNTRVJUKCFtX25vZGUtPnBhcmVudE5vZGUoKSk7
CiAKLSAgICBBU1NFUlQobV9wYXJlbnQtPnJlbmRlcmVySXNFZGl0YWJsZSgpIHx8ICFtX3BhcmVu
dC0+YXR0YWNoZWQoKSk7CisgICAgQVNTRVJUKG1fcGFyZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkg
fHwgIW1fcGFyZW50LT5hdHRhY2hlZCgpKTsKIH0KIAogc3RhdGljIHZvaWQgc2VuZEFYVGV4dENo
YW5nZWRJZ25vcmluZ0xpbmVCcmVha3MoTm9kZSogbm9kZSwgQVhPYmplY3RDYWNoZTo6QVhUZXh0
Q2hhbmdlIHRleHRDaGFuZ2UpCkBAIC01OCw3ICs1OCw3IEBAIHN0YXRpYyB2b2lkIHNlbmRBWFRl
eHRDaGFuZ2VkSWdub3JpbmdMaW4KIAogdm9pZCBBcHBlbmROb2RlQ29tbWFuZDo6ZG9BcHBseSgp
CiB7Ci0gICAgaWYgKCFtX3BhcmVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgJiYgbV9wYXJlbnQt
PmF0dGFjaGVkKCkpCisgICAgaWYgKCFtX3BhcmVudC0+aGFzRWRpdGFibGVTdHlsZSgpICYmIG1f
cGFyZW50LT5hdHRhY2hlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3BhcmVudC0+YXBw
ZW5kQ2hpbGQobV9ub2RlLmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKQEAgLTY5LDcgKzY5LDcg
QEAgdm9pZCBBcHBlbmROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiAKIHZvaWQgQXBwZW5kTm9kZUNv
bW1hbmQ6OmRvVW5hcHBseSgpCiB7Ci0gICAgaWYgKCFtX3BhcmVudC0+cmVuZGVyZXJJc0VkaXRh
YmxlKCkpCisgICAgaWYgKCFtX3BhcmVudC0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAogICAgIC8vIE5lZWQgdG8gbm90aWZ5IHRoaXMgYmVmb3JlIGFjdHVh
bGx5IGRlbGV0aW5nIHRoZSB0ZXh0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5
U3R5bGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fw
cGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxMSwxMiAr
NzExLDEyIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmZpeFJhbmdlQW5kQXBwbHkKIAogc3Rh
dGljIGJvb2wgY29udGFpbnNOb25FZGl0YWJsZVJlZ2lvbihOb2RlKiBub2RlKQogewotICAgIGlm
ICghbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgaWYgKCFub2RlLT5oYXNFZGl0YWJs
ZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgTm9kZSogc2libGluZyA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG5vZGUpOwogICAgIGZvciAoTm9kZSog
ZGVzY2VuZGVudCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgZGVzY2VuZGVudCAmJiBkZXNjZW5kZW50
ICE9IHNpYmxpbmc7IGRlc2NlbmRlbnQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KGRlc2NlbmRlbnQp
KSB7Ci0gICAgICAgIGlmICghZGVzY2VuZGVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAg
ICAgIGlmICghZGVzY2VuZGVudC0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCkBAIC03NTcsMTAgKzc1NywxMCBAQCB2b2lkIEFwcGx5U3R5bGVD
b21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgZm9yIChSZWZQdHI8Tm9kZT4gbmV4dDsgbm9k
ZSAmJiBub2RlICE9IHBhc3RFbmROb2RlOyBub2RlID0gbmV4dCkgewogICAgICAgICBuZXh0ID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLmdldCgpKTsKIAotICAgICAgICBpZiAoIW5vZGUtPnJl
bmRlcmVyKCkgfHwgIW5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgICAgICBpZiAoIW5v
ZGUtPnJlbmRlcmVyKCkgfHwgIW5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgaWYgKCFub2RlLT5yZW5kZXJlcklzUmljaGx5
RWRpdGFibGUoKSAmJiBub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKCFub2Rl
LT5oYXNSaWNobHlFZGl0YWJsZVN0eWxlKCkgJiYgbm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7CiAg
ICAgICAgICAgICAvLyBUaGlzIGlzIGEgcGxhaW50ZXh0LW9ubHkgcmVnaW9uLiBPbmx5IHByb2Nl
ZWQgaWYgaXQncyBmdWxseSBzZWxlY3RlZC4KICAgICAgICAgICAgIC8vIHBhc3RFbmROb2RlIGlz
IHRoZSBub2RlIGFmdGVyIHRoZSBsYXN0IGZ1bGx5IHNlbGVjdGVkIG5vZGUsIHNvIGlmIGl0J3Mg
aW5zaWRlIG5vZGUgdGhlbgogICAgICAgICAgICAgLy8gbm9kZSBpc24ndCBmdWxseSBzZWxlY3Rl
ZC4KQEAgLTc4MCw3ICs3ODAsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGlu
ZVN0eWxlCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGlmIChub2Rl
LT5jaGlsZE5vZGVDb3VudCgpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y29udGFpbnMocGFz
dEVuZE5vZGUuZ2V0KCkpIHx8IGNvbnRhaW5zTm9uRWRpdGFibGVSZWdpb24obm9kZS5nZXQoKSkg
fHwgIW5vZGUtPnBhcmVudE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgICAgICAg
ICBpZiAobm9kZS0+Y29udGFpbnMocGFzdEVuZE5vZGUuZ2V0KCkpIHx8IGNvbnRhaW5zTm9uRWRp
dGFibGVSZWdpb24obm9kZS5nZXQoKSkgfHwgIW5vZGUtPnBhcmVudE5vZGUoKS0+aGFzRWRpdGFi
bGVTdHlsZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKGVk
aXRpbmdJZ25vcmVzQ29udGVudChub2RlLmdldCgpKSkgewogICAgICAgICAgICAgICAgIG5leHQg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihub2RlLmdldCgpKTsKQEAgLTEz
NjAsMTMgKzEzNjAsMTMgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3Vycm91bmROb2RlUmFu
ZwogCiAgICAgUmVmUHRyPE5vZGU+IG5leHRTaWJsaW5nID0gZWxlbWVudC0+bmV4dFNpYmxpbmco
KTsKICAgICBSZWZQdHI8Tm9kZT4gcHJldmlvdXNTaWJsaW5nID0gZWxlbWVudC0+cHJldmlvdXNT
aWJsaW5nKCk7Ci0gICAgaWYgKG5leHRTaWJsaW5nICYmIG5leHRTaWJsaW5nLT5pc0VsZW1lbnRO
b2RlKCkgJiYgbmV4dFNpYmxpbmctPnJlbmRlcmVySXNFZGl0YWJsZSgpCisgICAgaWYgKG5leHRT
aWJsaW5nICYmIG5leHRTaWJsaW5nLT5pc0VsZW1lbnROb2RlKCkgJiYgbmV4dFNpYmxpbmctPmhh
c0VkaXRhYmxlU3R5bGUoKQogICAgICAgICAmJiBhcmVJZGVudGljYWxFbGVtZW50cyhlbGVtZW50
LmdldCgpLCB0b0VsZW1lbnQobmV4dFNpYmxpbmcuZ2V0KCkpKSkKICAgICAgICAgbWVyZ2VJZGVu
dGljYWxFbGVtZW50cyhlbGVtZW50LmdldCgpLCB0b0VsZW1lbnQobmV4dFNpYmxpbmcuZ2V0KCkp
KTsKIAotICAgIGlmIChwcmV2aW91c1NpYmxpbmcgJiYgcHJldmlvdXNTaWJsaW5nLT5pc0VsZW1l
bnROb2RlKCkgJiYgcHJldmlvdXNTaWJsaW5nLT5yZW5kZXJlcklzRWRpdGFibGUoKSkgeworICAg
IGlmIChwcmV2aW91c1NpYmxpbmcgJiYgcHJldmlvdXNTaWJsaW5nLT5pc0VsZW1lbnROb2RlKCkg
JiYgcHJldmlvdXNTaWJsaW5nLT5oYXNFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgTm9kZSog
bWVyZ2VkRWxlbWVudCA9IHByZXZpb3VzU2libGluZy0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAg
aWYgKG1lcmdlZEVsZW1lbnQtPmlzRWxlbWVudE5vZGUoKSAmJiBtZXJnZWRFbGVtZW50LT5yZW5k
ZXJlcklzRWRpdGFibGUoKQorICAgICAgICBpZiAobWVyZ2VkRWxlbWVudC0+aXNFbGVtZW50Tm9k
ZSgpICYmIG1lcmdlZEVsZW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKQogICAgICAgICAgICAgJiYg
YXJlSWRlbnRpY2FsRWxlbWVudHModG9FbGVtZW50KHByZXZpb3VzU2libGluZy5nZXQoKSksIHRv
RWxlbWVudChtZXJnZWRFbGVtZW50KSkpCiAgICAgICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1l
bnRzKHRvRWxlbWVudChwcmV2aW91c1NpYmxpbmcuZ2V0KCkpLCB0b0VsZW1lbnQobWVyZ2VkRWxl
bWVudCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRp
dENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiAxNjA5MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3OCw3
ICsxMjc4LDcgQEAgYm9vbCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YnJlYWtPdXRPZkVtcAogICAg
IC8vIEZJWE1FOiBDYW4ndCB3ZSBkbyBzb21ldGhpbmcgYmV0dGVyIHdoZW4gdGhlIGltbWVkaWF0
ZSBwYXJlbnQgd2Fzbid0IGEgbGlzdCBub2RlPwogICAgIGlmICghbGlzdE5vZGUKICAgICAgICAg
fHwgKCFsaXN0Tm9kZS0+aGFzVGFnTmFtZSh1bFRhZykgJiYgIWxpc3ROb2RlLT5oYXNUYWdOYW1l
KG9sVGFnKSkKLSAgICAgICAgfHwgIWxpc3ROb2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKQorICAg
ICAgICB8fCAhbGlzdE5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKQogICAgICAgICB8fCBsaXN0Tm9k
ZSA9PSBlbXB0eUxpc3RJdGVtLT5yb290RWRpdGFibGVFbGVtZW50KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250
cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1
dHRvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxNjA5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3
ICs2MSw3IEBAIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI6OkRlbGV0ZUJ1dHRvbkNvbnQKIAogc3Rh
dGljIGJvb2wgaXNEZWxldGFibGVFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYg
KCFub2RlIHx8ICFub2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgIW5vZGUtPmluRG9jdW1lbnQoKSB8
fCAhbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5p
c0hUTUxFbGVtZW50KCkgfHwgIW5vZGUtPmluRG9jdW1lbnQoKSB8fCAhbm9kZS0+aGFzRWRpdGFi
bGVTdHlsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBJbiBnZW5lcmFsIHdl
IHdhbnQgdG8gb25seSBkcmF3IHRoZSBVSSBhcm91bmQgb2JqZWN0IG9mIGEgY2VydGFpbiBhcmVh
LCBidXQgd2Ugc3RpbGwga2VlcCB0aGUgbWluIHdpZHRoL2hlaWdodCB0bwpAQCAtMTUyLDcgKzE1
Miw3IEBAIHN0YXRpYyBIVE1MRWxlbWVudCogZW5jbG9zaW5nRGVsZXRhYmxlRWwKIAogICAgIC8v
IFRoZSBlbmNsb3NpbmdOb2RlT2ZUeXBlIGZ1bmN0aW9uIG9ubHkgd29ya3Mgb24gbm9kZXMgdGhh
dCBhcmUgZWRpdGFibGUKICAgICAvLyAod2hpY2ggaXMgc3RyYW5nZSwgZ2l2ZW4gaXRzIG5hbWUp
LgotICAgIGlmICghY29udGFpbmVyLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICBpZiAoIWNv
bnRhaW5lci0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIE5v
ZGUqIGVsZW1lbnQgPSBlbmNsb3NpbmdOb2RlT2ZUeXBlKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29u
dGFpbmVyKSwgJmlzRGVsZXRhYmxlRWxlbWVudCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE2
MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlRnJvbVRleHROb2RlQ29tbWFu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgdm9pZCBEZWxldGVGcm9tVGV4
dE5vZGVDb21tYW5kOjpkb1VuYXBwbAogewogICAgIEFTU0VSVChtX25vZGUpOwogCi0gICAgaWYg
KCFtX25vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgIGlmICghbV9ub2RlLT5oYXNFZGl0
YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fbm9kZS0+aW5zZXJ0RGF0YSht
X29mZnNldCwgbV90ZXh0LCBJR05PUkVfRVhDRVBUSU9OKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gMTYw
OTA0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQwLDcgKzM0MCw3IEBAIHN0YXRpYyBQb3NpdGlvbiBmaXJz
dEVkaXRhYmxlUG9zaXRpb25Jbk4KIHsKICAgICBBU1NFUlQobm9kZSk7CiAgICAgTm9kZSogbmV4
dCA9IG5vZGU7Ci0gICAgd2hpbGUgKG5leHQgJiYgIW5leHQtPnJlbmRlcmVySXNFZGl0YWJsZSgp
KQorICAgIHdoaWxlIChuZXh0ICYmICFuZXh0LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAg
IG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5leHQsIG5vZGUpOwogICAgIHJldHVybiBuZXh0
ID8gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5leHQpIDogUG9zaXRpb24oKTsKIH0KQEAg
LTM1Miw3ICszNTIsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZU5vZGUo
CiAgICAgICAgIAogICAgIGlmIChtX3N0YXJ0Um9vdCAhPSBtX2VuZFJvb3QgJiYgIShub2RlLT5p
c0Rlc2NlbmRhbnRPZihtX3N0YXJ0Um9vdC5nZXQoKSkgJiYgbm9kZS0+aXNEZXNjZW5kYW50T2Yo
bV9lbmRSb290LmdldCgpKSkpIHsKICAgICAgICAgLy8gSWYgYSBub2RlIGlzIG5vdCBpbiBib3Ro
IHRoZSBzdGFydCBhbmQgZW5kIGVkaXRhYmxlIHJvb3RzLCByZW1vdmUgaXQgb25seSBpZiBpdHMg
aW5zaWRlIGFuIGVkaXRhYmxlIHJlZ2lvbi4KLSAgICAgICAgaWYgKCFub2RlLT5wYXJlbnROb2Rl
KCktPnJlbmRlcmVySXNFZGl0YWJsZSgpKSB7CisgICAgICAgIGlmICghbm9kZS0+cGFyZW50Tm9k
ZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgICAgIC8vIERvbid0IHJlbW92ZSBu
b24tZWRpdGFibGUgYXRvbWljIG5vZGVzLgogICAgICAgICAgICAgaWYgKCFub2RlLT5maXJzdENo
aWxkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0aW5nU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZ1N0eWxlLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODgsNyArNjg4LDcg
QEAgVHJpU3RhdGUgRWRpdGluZ1N0eWxlOjp0cmlTdGF0ZU9mU3R5bGUoYwogICAgIFRyaVN0YXRl
IHN0YXRlID0gRmFsc2VUcmlTdGF0ZTsKICAgICBib29sIG5vZGVJc1N0YXJ0ID0gdHJ1ZTsKICAg
ICBmb3IgKE5vZGUqIG5vZGUgPSBzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpOyBu
b2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewotICAgICAgICBpZiAobm9k
ZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkgeworICAgICAgICBp
ZiAobm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAg
ICAgICAgIENvbXB1dGVkU3R5bGVFeHRyYWN0b3IgY29tcHV0ZWRTdHlsZShub2RlKTsKICAgICAg
ICAgICAgIFRyaVN0YXRlIG5vZGVTdGF0ZSA9IHRyaVN0YXRlT2ZTdHlsZSgmY29tcHV0ZWRTdHls
ZSwgbm9kZS0+aXNUZXh0Tm9kZSgpID8gRWRpdGluZ1N0eWxlOjpEb05vdElnbm9yZVRleHRPbmx5
UHJvcGVydGllcyA6IEVkaXRpbmdTdHlsZTo6SWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzKTsKICAg
ICAgICAgICAgIGlmIChub2RlSXNTdGFydCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTIsNyArMzEyLDcgQEAgYm9vbCBFZGl0b3I6OmNhbkRl
bGV0ZVJhbmdlKFJhbmdlKiByYW5nZQogICAgIGlmICghc3RhcnRDb250YWluZXIgfHwgIWVuZENv
bnRhaW5lcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmICghc3RhcnRDb250
YWluZXItPnJlbmRlcmVySXNFZGl0YWJsZSgpIHx8ICFlbmRDb250YWluZXItPnJlbmRlcmVySXNF
ZGl0YWJsZSgpKQorICAgIGlmICghc3RhcnRDb250YWluZXItPmhhc0VkaXRhYmxlU3R5bGUoKSB8
fCAhZW5kQ29udGFpbmVyLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGlmIChyYW5nZS0+Y29sbGFwc2VkKElHTk9SRV9FWENFUFRJT04pKSB7CkBAIC0y
MDc0LDcgKzIwNzQsNyBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1h
CiAgICAgCiAgICAgLy8gSWYgd2UncmUgbm90IGluIGFuIGVkaXRhYmxlIG5vZGUsIGJhaWwuCiAg
ICAgTm9kZSogZWRpdGFibGVOb2RlID0gc2VhcmNoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7Ci0g
ICAgaWYgKCFlZGl0YWJsZU5vZGUgfHwgIWVkaXRhYmxlTm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxl
KCkpCisgICAgaWYgKCFlZGl0YWJsZU5vZGUgfHwgIWVkaXRhYmxlTm9kZS0+aGFzRWRpdGFibGVT
dHlsZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWlzU3BlbGxDaGVja2luZ0VuYWJs
ZWRGb3IoZWRpdGFibGVOb2RlKSkKQEAgLTIxNDMsNyArMjE0Myw3IEBAIHZvaWQgRWRpdG9yOjpt
YXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKIAogICAgIC8vIElmIHdlJ3JlIG5vdCBpbiBhbiBl
ZGl0YWJsZSBub2RlLCBiYWlsLgogICAgIE5vZGUqIGVkaXRhYmxlTm9kZSA9IHNwZWxsaW5nUmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgaWYgKCFlZGl0YWJsZU5vZGUgfHwgIWVkaXRhYmxl
Tm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgaWYgKCFlZGl0YWJsZU5vZGUgfHwgIWVk
aXRhYmxlTm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBp
ZiAoIWlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoZWRpdGFibGVOb2RlKSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjU1LDcgKzI1NSw3IEBAIHN0YXRpYyB1bnNpZ25lZCB2ZXJ0aWNhbFNjcm9sbERpc3RhbmNl
KEYKICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNCb3goKSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7
Ci0gICAgaWYgKCEoc3R5bGUub3ZlcmZsb3dZKCkgPT0gT1NDUk9MTCB8fCBzdHlsZS5vdmVyZmxv
d1koKSA9PSBPQVVUTyB8fCBmb2N1c2VkRWxlbWVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpKQor
ICAgIGlmICghKHN0eWxlLm92ZXJmbG93WSgpID09IE9TQ1JPTEwgfHwgc3R5bGUub3ZlcmZsb3dZ
KCkgPT0gT0FVVE8gfHwgZm9jdXNlZEVsZW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSkpCiAgICAg
ICAgIHJldHVybiAwOwogICAgIGludCBoZWlnaHQgPSBzdGQ6Om1pbjxpbnQ+KHRvUmVuZGVyQm94
KHJlbmRlcmVyKS0+Y2xpZW50SGVpZ2h0KCksIGZyYW1lLnZpZXcoKS0+dmlzaWJsZUhlaWdodCgp
KTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bWF4KHN0ZDo6bWF4PGlu
dD4oaGVpZ2h0ICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgaGVp
Z2h0IC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpLCAxKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCShyZXZpc2lv
biAxNjA5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSwxNCArMTQ5LDE0IEBAIE5vZGUqIGVuY2xvc2luZ0Js
b2NrVG9TcGxpdFRyZWVUbyhOb2RlKiAKIHsKICAgICBOb2RlKiBsYXN0QmxvY2sgPSBzdGFydE5v
ZGU7CiAgICAgZm9yIChOb2RlKiBuID0gc3RhcnROb2RlOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgp
KSB7Ci0gICAgICAgIGlmICghbi0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgICAgIGlmICgh
bi0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICAgICAgcmV0dXJuIGxhc3RCbG9jazsKLSAg
ICAgICAgaWYgKGlzVGFibGVDZWxsKG4pIHx8IG4tPmhhc1RhZ05hbWUoYm9keVRhZykgfHwgIW4t
PnBhcmVudE5vZGUoKSB8fCAhbi0+cGFyZW50Tm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSB8
fCBpc0VsZW1lbnRGb3JGb3JtYXRCbG9jayhuKSkKKyAgICAgICAgaWYgKGlzVGFibGVDZWxsKG4p
IHx8IG4tPmhhc1RhZ05hbWUoYm9keVRhZykgfHwgIW4tPnBhcmVudE5vZGUoKSB8fCAhbi0+cGFy
ZW50Tm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkgfHwgaXNFbGVtZW50Rm9yRm9ybWF0QmxvY2so
bikpCiAgICAgICAgICAgICByZXR1cm4gbjsKICAgICAgICAgaWYgKGlzQmxvY2sobikpCiAgICAg
ICAgICAgICBsYXN0QmxvY2sgPSBuOwogICAgICAgICBpZiAoaXNMaXN0RWxlbWVudChuKSkKLSAg
ICAgICAgICAgIHJldHVybiBuLT5wYXJlbnROb2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpID8g
bi0+cGFyZW50Tm9kZSgpIDogbjsKKyAgICAgICAgICAgIHJldHVybiBuLT5wYXJlbnROb2RlKCkt
Pmhhc0VkaXRhYmxlU3R5bGUoKSA/IG4tPnBhcmVudE5vZGUoKSA6IG47CiAgICAgfQogICAgIHJl
dHVybiBsYXN0QmxvY2s7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1ODksNyArMTU4OSw3IEBAIHZv
aWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEZyYW1lRWxlbWVudEkKICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKICAgICAvLyBUaGlzIG1ldGhvZCdzIHB1cnBvc2UgaXMgaXQgdG8gbWFrZSBpdCBl
YXNpZXIgdG8gc2VsZWN0IGlmcmFtZXMgKGluIG9yZGVyIHRvIGRlbGV0ZSB0aGVtKS4gIERvbid0
IGRvIGFueXRoaW5nIGlmIHRoZSBpZnJhbWUgaXNuJ3QgZGVsZXRhYmxlLgotICAgIGlmICghb3du
ZXJFbGVtZW50UGFyZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICBpZiAoIW93bmVyRWxl
bWVudFBhcmVudC0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBDcmVhdGUgY29tcHV0ZSBwb3NpdGlvbnMgYmVmb3JlIGFuZCBhZnRlciB0aGUgZWxlbWVudC4K
QEAgLTIwMjQsNyArMjAyNCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkZy
b21Ob24KIAogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CiAg
ICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9mcmFtZS0+c2V0dGluZ3MoKS5jYXJldEJyb3dzaW5n
RW5hYmxlZCgpOwotICAgIGlmICghaXNOb25lKCkgfHwgIShkb2N1bWVudC0+cmVuZGVyZXJJc0Vk
aXRhYmxlKCkgfHwgY2FyZXRCcm93c2luZykpCisgICAgaWYgKCFpc05vbmUoKSB8fCAhKGRvY3Vt
ZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkgfHwgY2FyZXRCcm93c2luZykpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIE5vZGUqIG5vZGUgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCShyZXZpc2lvbiAxNjA5MDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMyw3ICsxMzMsNyBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogcm9vdEVkaXRhYmxl
RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQo
KTsgfQogICAgIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgp
IGNvbnN0OwogCi0gICAgYm9vbCByZW5kZXJlcklzRWRpdGFibGUoKSBjb25zdCB7IHJldHVybiBt
X3NlbGVjdGlvbi5yZW5kZXJlcklzRWRpdGFibGUoKTsgfQorICAgIGJvb2wgaGFzRWRpdGFibGVT
dHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmhhc0VkaXRhYmxlU3R5bGUoKTsgfQog
ICAgIGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5p
c0NvbnRlbnRFZGl0YWJsZSgpOyB9CiAgICAgYm9vbCBpc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7IH0K
ICAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRD
b21tYW5kLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9J
bmRlbnRPdXRkZW50Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw3ICsxMjUsNyBA
QCB2b2lkIEluZGVudE91dGRlbnRDb21tYW5kOjpvdXRkZW50UGFyYWdyCiAgICAgVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVFbmRPZlBhcmFncmFwaCA9IGVuZE9mUGFyYWdyYXBoKHZpc2libGVTdGFy
dE9mUGFyYWdyYXBoKTsKIAogICAgIE5vZGUqIGVuY2xvc2luZ05vZGUgPSBlbmNsb3NpbmdOb2Rl
T2ZUeXBlKHZpc2libGVTdGFydE9mUGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCksICZpc0xpc3RP
ckluZGVudEJsb2NrcXVvdGUpOwotICAgIGlmICghZW5jbG9zaW5nTm9kZSB8fCAhZW5jbG9zaW5n
Tm9kZS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSkgLy8gV2UgY2FuJ3Qgb3V0
ZGVudCBpZiB0aGVyZSBpcyBubyBwbGFjZSB0byBnbyEKKyAgICBpZiAoIWVuY2xvc2luZ05vZGUg
fHwgIWVuY2xvc2luZ05vZGUtPnBhcmVudE5vZGUoKS0+aGFzRWRpdGFibGVTdHlsZSgpKSAvLyBX
ZSBjYW4ndCBvdXRkZW50IGlmIHRoZXJlIGlzIG5vIHBsYWNlIHRvIGdvIQogICAgICAgICByZXR1
cm47CiAKICAgICAvLyBVc2UgSW5zZXJ0TGlzdENvbW1hbmQgdG8gcmVtb3ZlIHRoZSBzZWxlY3Rp
b24gZnJvbSB0aGUgbGlzdApAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgSW5kZW50T3V0ZGVudENv
bW1hbmQ6Om91dGRlbnRQYXJhZ3IKICAgICAgICAgICAgIGlmIChDb250YWluZXJOb2RlKiBzcGxp
dFBvaW50UGFyZW50ID0gc3BsaXRQb2ludC0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKHNwbGl0UG9pbnRQYXJlbnQtPmhhc1RhZ05hbWUoYmxvY2txdW90ZVRhZykKICAgICAg
ICAgICAgICAgICAgICAgJiYgIXNwbGl0UG9pbnQtPmhhc1RhZ05hbWUoYmxvY2txdW90ZVRhZykK
LSAgICAgICAgICAgICAgICAgICAgJiYgc3BsaXRQb2ludFBhcmVudC0+cGFyZW50Tm9kZSgpLT5y
ZW5kZXJlcklzRWRpdGFibGUoKSkgLy8gV2UgY2FuJ3Qgb3V0ZGVudCBpZiB0aGVyZSBpcyBubyBw
bGFjZSB0byBnbyEKKyAgICAgICAgICAgICAgICAgICAgJiYgc3BsaXRQb2ludFBhcmVudC0+cGFy
ZW50Tm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkpIC8vIFdlIGNhbid0IG91dGRlbnQgaWYgdGhl
cmUgaXMgbm8gcGxhY2UgdG8gZ28hCiAgICAgICAgICAgICAgICAgICAgIHNwbGl0RWxlbWVudCh0
b0VsZW1lbnQoc3BsaXRQb2ludFBhcmVudCksIHNwbGl0UG9pbnQpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9k
ZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0
SW50b1RleHROb2RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5
KAogICAgIGlmIChwYXNzd29yZEVjaG9FbmFibGVkKQogICAgICAgICBkb2N1bWVudCgpLnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgaWYgKCFtX25vZGUtPnJl
bmRlcmVySXNFZGl0YWJsZSgpKQorICAgIGlmICghbV9ub2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChwYXNzd29yZEVjaG9FbmFibGVkKSB7CkBAIC03
MCw3ICs3MCw3IEBAIHZvaWQgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgKIAog
dm9pZCBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpkb1VuYXBwbHkoKQogewotICAgIGlmICgh
bV9ub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICBpZiAoIW1fbm9kZS0+aGFzRWRpdGFi
bGVTdHlsZSgpKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIE5lZWQgdG8gbm90
aWZ5IHRoaXMgYmVmb3JlIGFjdHVhbGx5IGRlbGV0aW5nIHRoZSB0ZXh0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0luc2VydE5vZGVCZWZvcmVDb21tYW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydE5vZGVCZWZvcmVDb21tYW5kLmNwcAkocmV2
aXNpb24gMTYwOTA4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnROb2RlQmVmb3Jl
Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgSW5zZXJ0Tm9kZUJl
Zm9yZUNvbW1hbmQ6Okluc2VydE5vZGVCZWZvcgogICAgIEFTU0VSVChtX3JlZkNoaWxkKTsKICAg
ICBBU1NFUlQobV9yZWZDaGlsZC0+cGFyZW50Tm9kZSgpKTsKIAotICAgIEFTU0VSVChtX3JlZkNo
aWxkLT5wYXJlbnROb2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpIHx8ICFtX3JlZkNoaWxkLT5w
YXJlbnROb2RlKCktPmF0dGFjaGVkKCkpOworICAgIEFTU0VSVChtX3JlZkNoaWxkLT5wYXJlbnRO
b2RlKCktPmhhc0VkaXRhYmxlU3R5bGUoKSB8fCAhbV9yZWZDaGlsZC0+cGFyZW50Tm9kZSgpLT5h
dHRhY2hlZCgpKTsKIH0KIAogdm9pZCBJbnNlcnROb2RlQmVmb3JlQ29tbWFuZDo6ZG9BcHBseSgp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01lcmdlSWRlbnRp
Y2FsRWxlbWVudHNDb21tYW5kLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDcgKzQyLDcgQEAgTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQ6Ok1lcmdl
SWRlbgogCiB2b2lkIE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpkb0FwcGx5KCkKIHsK
LSAgICBpZiAobV9lbGVtZW50MS0+bmV4dFNpYmxpbmcoKSAhPSBtX2VsZW1lbnQyIHx8ICFtX2Vs
ZW1lbnQxLT5yZW5kZXJlcklzRWRpdGFibGUoKSB8fCAhbV9lbGVtZW50Mi0+cmVuZGVyZXJJc0Vk
aXRhYmxlKCkpCisgICAgaWYgKG1fZWxlbWVudDEtPm5leHRTaWJsaW5nKCkgIT0gbV9lbGVtZW50
MiB8fCAhbV9lbGVtZW50MS0+aGFzRWRpdGFibGVTdHlsZSgpIHx8ICFtX2VsZW1lbnQyLT5oYXNF
ZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fYXRDaGlsZCA9IG1fZWxl
bWVudDItPmZpcnN0Q2hpbGQoKTsKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBNZXJnZUlkZW50aWNh
bEVsZW1lbnRzQ29tbWFuZDo6ZG9VbgogICAgIFJlZlB0cjxOb2RlPiBhdENoaWxkID0gbV9hdENo
aWxkLnJlbGVhc2UoKTsKIAogICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG1fZWxlbWVudDIt
PnBhcmVudE5vZGUoKTsKLSAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5yZW5kZXJlcklzRWRp
dGFibGUoKSkKKyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE2
MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZUNvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgUmVtb3ZlTm9kZUNvbW1hbmQ6OmRv
VW5hcHBseSgpCiB7CiAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCA9IG1fcGFyZW50
LnJlbGVhc2UoKTsKICAgICBSZWZQdHI8Tm9kZT4gcmVmQ2hpbGQgPSBtX3JlZkNoaWxkLnJlbGVh
c2UoKTsKLSAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSkK
KyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIHBhcmVudC0+aW5zZXJ0QmVmb3JlKG1fbm9kZS5nZXQoKSwgcmVmQ2hp
bGQuZ2V0KCksIElHTk9SRV9FWENFUFRJT04pOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE2MDkwNCkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjAsNyArMTYwLDcgQEAgUmVwbGFjZW1lbnRGcmFnbWVudDo6UmVw
bGFjZW1lbnRGcmFnbWVudAogICAgIGlmICghZWRpdGFibGVSb290LT5nZXRBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZXMoKS53ZWJraXRCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCkgJiYK
ICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGVzZSBjaGVja3Mgb25jZSB0ZXh0YXJlYXMgYW5k
IHRleHRmaWVsZHMgYWN0dWFsbHkgcmVnaXN0ZXIgYW4gZXZlbnQgaGFuZGxlci4KICAgICAgICAg
IShzaGFkb3dBbmNlc3Rvck5vZGUgJiYgc2hhZG93QW5jZXN0b3JOb2RlLT5yZW5kZXJlcigpICYm
IHNoYWRvd0FuY2VzdG9yTm9kZS0+cmVuZGVyZXIoKS0+aXNUZXh0Q29udHJvbCgpKSAmJgotICAg
ICAgICBlZGl0YWJsZVJvb3QtPnJlbmRlcmVySXNSaWNobHlFZGl0YWJsZSgpKSB7CisgICAgICAg
IGVkaXRhYmxlUm9vdC0+aGFzUmljaGx5RWRpdGFibGVTdHlsZSgpKSB7CiAgICAgICAgIHJlbW92
ZUludGVyY2hhbmdlTm9kZXMobV9mcmFnbWVudC5nZXQoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0xODEsNyArMTgxLDcgQEAgUmVwbGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRG
cmFnbWVudAogICAgIC8vIEdpdmUgdGhlIHJvb3QgYSBjaGFuY2UgdG8gY2hhbmdlIHRoZSB0ZXh0
LgogICAgIFJlZlB0cjxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZ0ID0gQmVmb3JlVGV4dElu
c2VydGVkRXZlbnQ6OmNyZWF0ZSh0ZXh0KTsKICAgICBlZGl0YWJsZVJvb3QtPmRpc3BhdGNoRXZl
bnQoZXZ0LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBpZiAodGV4dCAhPSBldnQtPnRleHQo
KSB8fCAhZWRpdGFibGVSb290LT5yZW5kZXJlcklzUmljaGx5RWRpdGFibGUoKSkgeworICAgIGlm
ICh0ZXh0ICE9IGV2dC0+dGV4dCgpIHx8ICFlZGl0YWJsZVJvb3QtPmhhc1JpY2hseUVkaXRhYmxl
U3R5bGUoKSkgewogICAgICAgICByZXN0b3JlQW5kUmVtb3ZlVGVzdFJlbmRlcmluZ05vZGVzVG9G
cmFnbWVudChob2xkZXIuZ2V0KCkpOwogCiAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBz
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKQEAgLTUzMyw3ICs1MzMsNyBAQCB2b2lkIFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmIChlbGVtZW50LT5wYXJlbnROb2RlKCktPnJlbmRlcmVy
SXNSaWNobHlFZGl0YWJsZSgpKQorICAgICAgICBpZiAoZWxlbWVudC0+cGFyZW50Tm9kZSgpLT5o
YXNSaWNobHlFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRl
KGVsZW1lbnQsIGNvbnRlbnRlZGl0YWJsZUF0dHIpOwogCiAgICAgICAgIC8vIFdlYktpdCB1c2Vk
IHRvIG5vdCBhZGQgZGlzcGxheTogaW5saW5lIGFuZCBmbG9hdDogbm9uZSBvbiBjb3B5LgpJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwCShy
ZXZpc2lvbiAxNjA5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENv
bW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgU3BsaXRFbGVt
ZW50Q29tbWFuZDo6ZXhlY3V0ZUFwcGx5KCkKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAg
ICAKICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBtX2VsZW1lbnQyLT5wYXJlbnROb2RlKCk7
Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAg
aWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1
cm47CiAgICAgcGFyZW50LT5pbnNlcnRCZWZvcmUobV9lbGVtZW50MS5nZXQoKSwgbV9lbGVtZW50
Mi5nZXQoKSwgZWMpOwogICAgIGlmIChlYykKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBTcGxpdEVs
ZW1lbnRDb21tYW5kOjpkb0FwcGx5KCkKIAogdm9pZCBTcGxpdEVsZW1lbnRDb21tYW5kOjpkb1Vu
YXBwbHkoKQogewotICAgIGlmICghbV9lbGVtZW50MSB8fCAhbV9lbGVtZW50MS0+cmVuZGVyZXJJ
c0VkaXRhYmxlKCkgfHwgIW1fZWxlbWVudDItPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgIGlm
ICghbV9lbGVtZW50MSB8fCAhbV9lbGVtZW50MS0+aGFzRWRpdGFibGVTdHlsZSgpIHx8ICFtX2Vs
ZW1lbnQyLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFZlY3Rv
cjxSZWZQdHI8Tm9kZT4+IGNoaWxkcmVuOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGxpdFRleHROb2RlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MSw3ICs1MSw3IEBAIFNwbGl0VGV4dE5vZGVDb21tYW5kOjpTcGxpdFRleHROb2RlQ29t
bWEKIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQogewogICAgIENvbnRhaW5l
ck5vZGUqIHBhcmVudCA9IG1fdGV4dDItPnBhcmVudE5vZGUoKTsKLSAgICBpZiAoIXBhcmVudCB8
fCAhcGFyZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICBpZiAoIXBhcmVudCB8fCAhcGFy
ZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBw
cmVmaXhUZXh0ID0gbV90ZXh0Mi0+c3Vic3RyaW5nRGF0YSgwLCBtX29mZnNldCwgSUdOT1JFX0VY
Q0VQVElPTik7CkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRv
QXBwbHkoKQogCiB2b2lkIFNwbGl0VGV4dE5vZGVDb21tYW5kOjpkb1VuYXBwbHkoKQogewotICAg
IGlmICghbV90ZXh0MSB8fCAhbV90ZXh0MS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgaWYg
KCFtX3RleHQxIHx8ICFtX3RleHQxLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEFTU0VSVCgmbV90ZXh0MS0+ZG9jdW1lbnQoKSA9PSAmZG9jdW1lbnQoKSk7CkBA
IC04Niw3ICs4Niw3IEBAIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvUmVhcHBseSgpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG1fdGV4dDItPnBh
cmVudE5vZGUoKTsKLSAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5yZW5kZXJlcklzRWRpdGFi
bGUoKSkKKyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGluc2VydFRleHQxQW5kVHJpbVRleHQyKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9k
ZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBTcGxpdFRleHROb2RlQ29u
dGFpbmluZ0VsZW1lbnRDb21tYQogICAgIHNwbGl0VGV4dE5vZGUobV90ZXh0LmdldCgpLCBtX29m
ZnNldCk7CiAKICAgICBFbGVtZW50KiBwYXJlbnQgPSBtX3RleHQtPnBhcmVudEVsZW1lbnQoKTsK
LSAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5wYXJlbnRFbGVtZW50KCkgfHwgIXBhcmVudC0+
cGFyZW50RWxlbWVudCgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICBpZiAoIXBhcmVudCB8
fCAhcGFyZW50LT5wYXJlbnRFbGVtZW50KCkgfHwgIXBhcmVudC0+cGFyZW50RWxlbWVudCgpLT5o
YXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlbmRlckVsZW1lbnQq
IHBhcmVudFJlbmRlcmVyID0gcGFyZW50LT5yZW5kZXJlcigpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MzYsNyArNTM2LDcgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpjYW5vbmljYWxQb3Np
dAogCiAgICAgLy8gVGhlIG5ldyBwb3NpdGlvbiBtdXN0IGJlIGluIHRoZSBzYW1lIGVkaXRhYmxl
IGVsZW1lbnQuIEVuZm9yY2UgdGhhdCBmaXJzdC4KICAgICAvLyBVbmxlc3MgdGhlIGRlc2NlbnQg
aXMgZnJvbSBhIG5vbi1lZGl0YWJsZSBodG1sIGVsZW1lbnQgdG8gYW4gZWRpdGFibGUgYm9keS4K
LSAgICBpZiAobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKGh0bWxUYWcpICYmICFub2RlLT5yZW5k
ZXJlcklzRWRpdGFibGUoKSAmJiBub2RlLT5kb2N1bWVudCgpLmJvZHkoKSAmJiBub2RlLT5kb2N1
bWVudCgpLmJvZHkoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgaWYgKG5vZGUgJiYgbm9k
ZS0+aGFzVGFnTmFtZShodG1sVGFnKSAmJiAhbm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpICYmIG5v
ZGUtPmRvY3VtZW50KCkuYm9keSgpICYmIG5vZGUtPmRvY3VtZW50KCkuYm9keSgpLT5oYXNFZGl0
YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBuZXh0LmlzTm90TnVsbCgpID8gbmV4dCA6IHBy
ZXY7CiAKICAgICBOb2RlKiBlZGl0aW5nUm9vdCA9IGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKHBv
c2l0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9u
LmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
U2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjI2LDcgKzYyNiw3IEBAIGJvb2wgVmlz
aWJsZVNlbGVjdGlvbjo6aXNDb250ZW50RWRpdGFibGUKICAgICByZXR1cm4gaXNFZGl0YWJsZVBv
c2l0aW9uKHN0YXJ0KCkpOwogfQogCi1ib29sIFZpc2libGVTZWxlY3Rpb246OnJlbmRlcmVySXNF
ZGl0YWJsZSgpIGNvbnN0Citib29sIFZpc2libGVTZWxlY3Rpb246Omhhc0VkaXRhYmxlU3R5bGUo
KSBjb25zdAogewogICAgIHJldHVybiBpc0VkaXRhYmxlUG9zaXRpb24oc3RhcnQoKSwgQ29udGVu
dElzRWRpdGFibGUsIERvTm90VXBkYXRlU3R5bGUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3
ICs5OSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50
KCkgY29uc3Q7CiAgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OwotICAgIGJvb2wg
cmVuZGVyZXJJc0VkaXRhYmxlKCkgY29uc3Q7CisgICAgYm9vbCBoYXNFZGl0YWJsZVN0eWxlKCkg
Y29uc3Q7CiAgICAgYm9vbCBpc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpIGNvbnN0OwogICAgIC8v
IFJldHVybnMgYSBzaGFkb3cgdHJlZSBub2RlIGZvciBsZWdhY3kgc2hhZG93IHRyZWVzLCBhIGNo
aWxkIG9mIHRoZQogICAgIC8vIFNoYWRvd1Jvb3Qgbm9kZSBmb3IgbmV3IHNoYWRvdyB0cmVlcywg
b3IgMCBmb3Igbm9uLXNoYWRvdyB0cmVlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VmlzaWJsZVVuaXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVVbml0cy5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVVuaXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTAgKzQ4LDEwIEBAIHVz
aW5nIG5hbWVzcGFjZSBXVEY6OlVuaWNvZGU7CiAKIHN0YXRpYyBOb2RlKiBwcmV2aW91c0xlYWZX
aXRoU2FtZUVkaXRhYmlsaXR5KE5vZGUqIG5vZGUsIEVkaXRhYmxlVHlwZSBlZGl0YWJsZVR5cGUp
CiB7Ci0gICAgYm9vbCBlZGl0YWJsZSA9IG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZShlZGl0YWJs
ZVR5cGUpOworICAgIGJvb2wgZWRpdGFibGUgPSBub2RlLT5oYXNFZGl0YWJsZVN0eWxlKGVkaXRh
YmxlVHlwZSk7CiAgICAgbm9kZSA9IHByZXZpb3VzTGVhZk5vZGUobm9kZSk7CiAgICAgd2hpbGUg
KG5vZGUpIHsKLSAgICAgICAgaWYgKGVkaXRhYmxlID09IG5vZGUtPnJlbmRlcmVySXNFZGl0YWJs
ZShlZGl0YWJsZVR5cGUpKQorICAgICAgICBpZiAoZWRpdGFibGUgPT0gbm9kZS0+aGFzRWRpdGFi
bGVTdHlsZShlZGl0YWJsZVR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAg
IG5vZGUgPSBwcmV2aW91c0xlYWZOb2RlKG5vZGUpOwogICAgIH0KQEAgLTYzLDEwICs2MywxMCBA
QCBzdGF0aWMgTm9kZSogbmV4dExlYWZXaXRoU2FtZUVkaXRhYmlsaXR5CiAgICAgaWYgKCFub2Rl
KQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBib29sIGVkaXRhYmxlID0gbm9kZS0+cmVu
ZGVyZXJJc0VkaXRhYmxlKGVkaXRhYmxlVHlwZSk7CisgICAgYm9vbCBlZGl0YWJsZSA9IG5vZGUt
Pmhhc0VkaXRhYmxlU3R5bGUoZWRpdGFibGVUeXBlKTsKICAgICBub2RlID0gbmV4dExlYWZOb2Rl
KG5vZGUpOwogICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgIGlmIChlZGl0YWJsZSA9PSBub2Rl
LT5yZW5kZXJlcklzRWRpdGFibGUoZWRpdGFibGVUeXBlKSkKKyAgICAgICAgaWYgKGVkaXRhYmxl
ID09IG5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoZWRpdGFibGVUeXBlKSkKICAgICAgICAgICAgIHJl
dHVybiBub2RlOwogICAgICAgICBub2RlID0gbmV4dExlYWZOb2RlKG5vZGUpOwogICAgIH0KQEAg
LTk2NCw3ICs5NjQsNyBAQCBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNMaW5lUG9zaXRpb24oY29u
CiAgICAgLy8gQ291bGQgbm90IGZpbmQgYSBwcmV2aW91cyBsaW5lLiBUaGlzIG1lYW5zIHdlIG11
c3QgYWxyZWFkeSBiZSBvbiB0aGUgZmlyc3QgbGluZS4KICAgICAvLyBNb3ZlIHRvIHRoZSBzdGFy
dCBvZiB0aGUgY29udGVudCBpbiB0aGlzIGJsb2NrLCB3aGljaCBlZmZlY3RpdmVseSBtb3ZlcyB1
cwogICAgIC8vIHRvIHRoZSBzdGFydCBvZiB0aGUgbGluZSB3ZSdyZSBvbi4KLSAgICBFbGVtZW50
KiByb290RWxlbWVudCA9IG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZShlZGl0YWJsZVR5cGUpID8g
bm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudChlZGl0YWJsZVR5cGUpIDogbm9kZS0+ZG9jdW1lbnQo
KS5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiByb290RWxlbWVudCA9IG5vZGUtPmhh
c0VkaXRhYmxlU3R5bGUoZWRpdGFibGVUeXBlKSA/IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQo
ZWRpdGFibGVUeXBlKSA6IG5vZGUtPmRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCk7CiAgICAg
aWYgKCFyb290RWxlbWVudCkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9kZShyb290RWxlbWVudCks
IERPV05TVFJFQU0pOwpAQCAtMTAyMiw3ICsxMDIyLDcgQEAgVmlzaWJsZVBvc2l0aW9uIG5leHRM
aW5lUG9zaXRpb24oY29uc3QgVgogICAgIC8vIENvdWxkIG5vdCBmaW5kIGEgbmV4dCBsaW5lLiBU
aGlzIG1lYW5zIHdlIG11c3QgYWxyZWFkeSBiZSBvbiB0aGUgbGFzdCBsaW5lLgogICAgIC8vIE1v
dmUgdG8gdGhlIGVuZCBvZiB0aGUgY29udGVudCBpbiB0aGlzIGJsb2NrLCB3aGljaCBlZmZlY3Rp
dmVseSBtb3ZlcyB1cwogICAgIC8vIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUgd2UncmUgb24uCi0g
ICAgRWxlbWVudCogcm9vdEVsZW1lbnQgPSBub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoZWRpdGFi
bGVUeXBlKSA/IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoZWRpdGFibGVUeXBlKSA6IG5vZGUt
PmRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCk7CisgICAgRWxlbWVudCogcm9vdEVsZW1lbnQg
PSBub2RlLT5oYXNFZGl0YWJsZVN0eWxlKGVkaXRhYmxlVHlwZSkgPyBub2RlLT5yb290RWRpdGFi
bGVFbGVtZW50KGVkaXRhYmxlVHlwZSkgOiBub2RlLT5kb2N1bWVudCgpLmRvY3VtZW50RWxlbWVu
dCgpOwogICAgIGlmICghcm9vdEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRp
b24oKTsKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGxhc3RQb3NpdGlvbkluTm9kZShyb290
RWxlbWVudCksIERPV05TVFJFQU0pOwpAQCAtMTEwMywxMyArMTEwMywxMyBAQCBWaXNpYmxlUG9z
aXRpb24gc3RhcnRPZlBhcmFncmFwaChjb25zdCBWCiAgICAgTm9kZSogbiA9IHN0YXJ0Tm9kZTsK
ICAgICB3aGlsZSAobikgewogI2lmIEVOQUJMRShVU0VSU0VMRUNUX0FMTCkKLSAgICAgICAgaWYg
KGJvdW5kYXJ5Q3Jvc3NpbmdSdWxlID09IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5ICYmICFQ
b3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdEFsbChuKSAmJiBuLT5yZW5kZXJlcklzRWRpdGFibGUo
KSAhPSBzdGFydE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgICAgICBpZiAoYm91bmRh
cnlDcm9zc2luZ1J1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkgJiYgIVBvc2l0aW9u
Ojpub2RlSXNVc2VyU2VsZWN0QWxsKG4pICYmIG4tPmhhc0VkaXRhYmxlU3R5bGUoKSAhPSBzdGFy
dE5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSkKICNlbHNlCi0gICAgICAgIGlmIChib3VuZGFyeUNy
b3NzaW5nUnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSAmJiBuLT5yZW5kZXJlcklz
RWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgICAgICBp
ZiAoYm91bmRhcnlDcm9zc2luZ1J1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkgJiYg
bi0+aGFzRWRpdGFibGVTdHlsZSgpICE9IHN0YXJ0Tm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpKQog
I2VuZGlmCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKGJvdW5kYXJ5Q3Jvc3NpbmdS
dWxlID09IENhblNraXBPdmVyRWRpdGluZ0JvdW5kYXJ5KSB7Ci0gICAgICAgICAgICB3aGlsZSAo
biAmJiBuLT5yZW5kZXJlcklzRWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPnJlbmRlcmVySXNFZGl0
YWJsZSgpKQorICAgICAgICAgICAgd2hpbGUgKG4gJiYgbi0+aGFzRWRpdGFibGVTdHlsZSgpICE9
IHN0YXJ0Tm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICAgICAgICAgIG4gPSBOb2Rl
VHJhdmVyc2FsOjpwcmV2aW91c1Bvc3RPcmRlcihuLCBzdGFydEJsb2NrKTsKICAgICAgICAgICAg
IGlmICghbiB8fCAhbi0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMTE4MywxMyArMTE4MywxMyBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZQ
YXJhZ3JhcGgoY29uc3QgVmlzCiAgICAgTm9kZSogbiA9IHN0YXJ0Tm9kZTsKICAgICB3aGlsZSAo
bikgewogI2lmIEVOQUJMRShVU0VSU0VMRUNUX0FMTCkKLSAgICAgICAgaWYgKGJvdW5kYXJ5Q3Jv
c3NpbmdSdWxlID09IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5ICYmICFQb3NpdGlvbjo6bm9k
ZUlzVXNlclNlbGVjdEFsbChuKSAmJiBuLT5yZW5kZXJlcklzRWRpdGFibGUoKSAhPSBzdGFydE5v
ZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgICAgICBpZiAoYm91bmRhcnlDcm9zc2luZ1J1
bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2Vy
U2VsZWN0QWxsKG4pICYmIG4tPmhhc0VkaXRhYmxlU3R5bGUoKSAhPSBzdGFydE5vZGUtPmhhc0Vk
aXRhYmxlU3R5bGUoKSkKICNlbHNlCi0gICAgICAgIGlmIChib3VuZGFyeUNyb3NzaW5nUnVsZSA9
PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSAmJiBuLT5yZW5kZXJlcklzRWRpdGFibGUoKSAh
PSBzdGFydE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgICAgICBpZiAoYm91bmRhcnlD
cm9zc2luZ1J1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkgJiYgbi0+aGFzRWRpdGFi
bGVTdHlsZSgpICE9IHN0YXJ0Tm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpKQogI2VuZGlmCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgaWYgKGJvdW5kYXJ5Q3Jvc3NpbmdSdWxlID09IENhblNr
aXBPdmVyRWRpdGluZ0JvdW5kYXJ5KSB7Ci0gICAgICAgICAgICB3aGlsZSAobiAmJiBuLT5yZW5k
ZXJlcklzRWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAg
ICAgICAgICAgd2hpbGUgKG4gJiYgbi0+aGFzRWRpdGFibGVTdHlsZSgpICE9IHN0YXJ0Tm9kZS0+
aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0KG4sIHN0YXlJbnNpZGVCbG9jayk7CiAgICAgICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRGVz
Y2VuZGFudE9mKGhpZ2hlc3RSb290KSkKICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1dyYXBDb250ZW50c0luRHVtbXlT
cGFuQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjIsNyArNjIsNyBAQCB2b2lkIFdyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZDo6ZG9VCiB7
CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7CiAKLSAgICBpZiAoIW1fZHVtbXlTcGFuIHx8ICFtX2Vs
ZW1lbnQtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgIGlmICghbV9kdW1teVNwYW4gfHwgIW1f
ZWxlbWVudC0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0
b3I8UmVmUHRyPE5vZGU+PiBjaGlsZHJlbjsKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBXcmFwQ29u
dGVudHNJbkR1bW15U3BhbkNvbW1hbmQ6OmRvUgogewogICAgIEFTU0VSVChtX2VsZW1lbnQpOwog
ICAgIAotICAgIGlmICghbV9kdW1teVNwYW4gfHwgIW1fZWxlbWVudC0+cmVuZGVyZXJJc0VkaXRh
YmxlKCkpCisgICAgaWYgKCFtX2R1bW15U3BhbiB8fCAhbV9lbGVtZW50LT5oYXNFZGl0YWJsZVN0
eWxlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGV4ZWN1dGVBcHBseSgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTYsNyArMTE2LDcgQEAgTm9kZSogaGlnaGVzdEVkaXRhYmxlUm9vdChjb25zdCBQb3NpdGlvbgog
ICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgICAgICBpZiAoIW5vZGUpCiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZShl
ZGl0YWJsZVR5cGUpKQorICAgICAgICBpZiAobm9kZS0+aGFzRWRpdGFibGVTdHlsZShlZGl0YWJs
ZVR5cGUpKQogICAgICAgICAgICAgaGlnaGVzdEVkaXRhYmxlUm9vdCA9IG5vZGU7CiAgICAgfQog
CkBAIC0xMjksNyArMTI5LDcgQEAgTm9kZSogbG93ZXN0RWRpdGFibGVBbmNlc3RvcihOb2RlKiBu
b2RlKQogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICB3aGlsZSAobm9kZSkgewotICAgICAg
ICBpZiAobm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgICAgIGlmIChub2RlLT5oYXNF
ZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgICAgICByZXR1cm4gbm9kZS0+cm9vdEVkaXRhYmxlRWxl
bWVudCgpOwogICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShib2R5VGFnKSkKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMTUyLDcgKzE1Miw3IEBAIGJvb2wgaXNFZGl0YWJsZVBvc2l0aW9uKGNv
bnN0IFBvc2l0aW9uJiAKICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJl
cigpLT5pc1RhYmxlKCkpCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAg
Ci0gICAgcmV0dXJuIG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZShlZGl0YWJsZVR5cGUpOworICAg
IHJldHVybiBub2RlLT5oYXNFZGl0YWJsZVN0eWxlKGVkaXRhYmxlVHlwZSk7CiB9CiAKIGJvb2wg
aXNBdFVuc3BsaXR0YWJsZUVsZW1lbnQoY29uc3QgUG9zaXRpb24mIHBvcykKQEAgLTE3MSw3ICsx
NzEsNyBAQCBib29sIGlzUmljaGx5RWRpdGFibGVQb3NpdGlvbihjb25zdCBQb3NpCiAgICAgaWYg
KG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpKQogICAgICAg
ICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIAotICAgIHJldHVybiBub2RlLT5yZW5k
ZXJlcklzUmljaGx5RWRpdGFibGUoZWRpdGFibGVUeXBlKTsKKyAgICByZXR1cm4gbm9kZS0+aGFz
UmljaGx5RWRpdGFibGVTdHlsZShlZGl0YWJsZVR5cGUpOwogfQogCiBFbGVtZW50KiBlZGl0YWJs
ZVJvb3RGb3JQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcCwgRWRpdGFibGVUeXBlIGVkaXRhYmxl
VHlwZSkKQEAgLTI0OSw3ICsyNDksNyBAQCBQb3NpdGlvbiBwcmV2aW91c1Zpc3VhbGx5RGlzdGlu
Y3RDYW5kaWRhCiBWaXNpYmxlUG9zaXRpb24gZmlyc3RFZGl0YWJsZVBvc2l0aW9uQWZ0ZXJQb3Np
dGlvbkluUm9vdChjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIE5vZGUqIGhpZ2hlc3RSb290KQog
ewogICAgIC8vIHBvc2l0aW9uIGZhbGxzIGJlZm9yZSBoaWdoZXN0Um9vdC4KLSAgICBpZiAoY29t
cGFyZVBvc2l0aW9ucyhwb3NpdGlvbiwgZmlyc3RQb3NpdGlvbkluTm9kZShoaWdoZXN0Um9vdCkp
ID09IC0xICYmIGhpZ2hlc3RSb290LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICBpZiAoY29t
cGFyZVBvc2l0aW9ucyhwb3NpdGlvbiwgZmlyc3RQb3NpdGlvbkluTm9kZShoaWdoZXN0Um9vdCkp
ID09IC0xICYmIGhpZ2hlc3RSb290LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVy
biBmaXJzdFBvc2l0aW9uSW5Ob2RlKGhpZ2hlc3RSb290KTsKIAogICAgIFBvc2l0aW9uIHAgPSBw
b3NpdGlvbjsKQEAgLTU0OCw3ICs1NDgsNyBAQCBOb2RlKiBlbmNsb3NpbmdOb2RlV2l0aFRhZyhj
b25zdCBQb3NpdGlvCiAgICAgICAgIAogICAgIE5vZGUqIHJvb3QgPSBoaWdoZXN0RWRpdGFibGVS
b290KHApOwogICAgIGZvciAoTm9kZSogbiA9IHAuZGVwcmVjYXRlZE5vZGUoKTsgbjsgbiA9IG4t
PnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAocm9vdCAmJiAhbi0+cmVuZGVyZXJJc0VkaXRh
YmxlKCkpCisgICAgICAgIGlmIChyb290ICYmICFuLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUodGFnTmFtZSkpCiAg
ICAgICAgICAgICByZXR1cm4gbjsKQEAgLTU3MCw3ICs1NzAsNyBAQCBOb2RlKiBlbmNsb3NpbmdO
b2RlT2ZUeXBlKGNvbnN0IFBvc2l0aW9uCiAgICAgZm9yIChOb2RlKiBuID0gcC5kZXByZWNhdGVk
Tm9kZSgpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIC8vIERvbid0IHJldHVy
biBhIG5vbi1lZGl0YWJsZSBub2RlIGlmIHRoZSBpbnB1dCBwb3NpdGlvbiB3YXMgZWRpdGFibGUs
IHNpbmNlCiAgICAgICAgIC8vIHRoZSBjYWxsZXJzIGZyb20gZWRpdGluZyB3aWxsIG5vIGRvdWJ0
IHdhbnQgdG8gcGVyZm9ybSBlZGl0aW5nIGluc2lkZSB0aGUgcmV0dXJuZWQgbm9kZS4KLSAgICAg
ICAgaWYgKHJvb3QgJiYgIW4tPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgICAgICBpZiAocm9v
dCAmJiAhbi0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIGlmIChub2RlSXNPZlR5cGUobikpCiAgICAgICAgICAgICByZXR1cm4gbjsKQEAgLTU4Niw3
ICs1ODYsNyBAQCBOb2RlKiBoaWdoZXN0RW5jbG9zaW5nTm9kZU9mVHlwZShjb25zdCBQCiAgICAg
Tm9kZSogaGlnaGVzdCA9IDA7CiAgICAgTm9kZSogcm9vdCA9IHJ1bGUgPT0gQ2Fubm90Q3Jvc3NF
ZGl0aW5nQm91bmRhcnkgPyBoaWdoZXN0RWRpdGFibGVSb290KHApIDogMDsKICAgICBmb3IgKE5v
ZGUqIG4gPSBwLmNvbnRhaW5lck5vZGUoKTsgbiAmJiBuICE9IHN0YXlXaXRoaW47IG4gPSBuLT5w
YXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKHJvb3QgJiYgIW4tPnJlbmRlcmVySXNFZGl0YWJs
ZSgpKQorICAgICAgICBpZiAocm9vdCAmJiAhbi0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChub2RlSXNPZlR5cGUobikpCiAgICAgICAgICAg
ICBoaWdoZXN0ID0gbjsKQEAgLTc0Myw3ICs3NDMsNyBAQCBib29sIGNhbk1lcmdlTGlzdHMoRWxl
bWVudCogZmlyc3RMaXN0LCBFCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBm
aXJzdExpc3QtPmhhc1RhZ05hbWUoc2Vjb25kTGlzdC0+dGFnUU5hbWUoKSkgLy8gbWFrZSBzdXJl
IHRoZSBsaXN0IHR5cGVzIG1hdGNoIChvbCB2cy4gdWwpCi0gICAgJiYgZmlyc3RMaXN0LT5yZW5k
ZXJlcklzRWRpdGFibGUoKSAmJiBzZWNvbmRMaXN0LT5yZW5kZXJlcklzRWRpdGFibGUoKSAvLyBi
b3RoIGxpc3RzIGFyZSBlZGl0YWJsZQorICAgICYmIGZpcnN0TGlzdC0+aGFzRWRpdGFibGVTdHls
ZSgpICYmIHNlY29uZExpc3QtPmhhc0VkaXRhYmxlU3R5bGUoKSAvLyBib3RoIGxpc3RzIGFyZSBl
ZGl0YWJsZQogICAgICYmIGZpcnN0TGlzdC0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHNlY29u
ZExpc3QtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAvLyBkb24ndCBjcm9zcyBlZGl0aW5nIGJvdW5k
YXJpZXMKICAgICAmJiBpc1Zpc2libHlBZGphY2VudChwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2Rl
KGZpcnN0TGlzdCksIHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKHNlY29uZExpc3QpKTsKICAg
ICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgbm8gdmlzaWJsZSBjb250ZW50IGJldHdlZW4gdGhpcyBs
aSBhbmQgdGhlIHByZXZpb3VzIGxpc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFu
Y2hvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFu
Y2hvckVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjA5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxBbmNob3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBz
dGF0aWMgdW5zaWduZWQgcGFyc2VQb3J0RnJvbVN0cmluZ1Bvc2l0CiAKIGJvb2wgSFRNTEFuY2hv
ckVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25zdAogewotICAgIGlmIChyZW5kZXJlcklzRWRp
dGFibGUoKSkKKyAgICBpZiAoaGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1cm4gSFRN
TEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKICAgICAvLyBJZiBub3QgYSBsaW5rIHdlIHNob3Vs
ZCBzdGlsbCBiZSBhYmxlIHRvIGZvY3VzIHRoZSBlbGVtZW50IGlmIGl0IGhhcyB0YWJJbmRleC4K
ICAgICByZXR1cm4gaXNMaW5rKCkgfHwgSFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKQEAg
LTE5MSw3ICsxOTEsNyBAQCB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAocmVuZGVyZXJJ
c0VkaXRhYmxlKCkpIHsKKyAgICAgICAgaWYgKGhhc0VkaXRhYmxlU3R5bGUoKSkgewogICAgICAg
ICAgICAgLy8gVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGFibGUgYmxvY2sgdGhhdCB0aGUg
c2VsZWN0aW9uIHdhcyBpbiAoaWYgaXQgd2FzIGluIG9uZSkganVzdCBiZWZvcmUgdGhlIGxpbmsg
d2FzIGNsaWNrZWQKICAgICAgICAgICAgIC8vIGZvciB0aGUgTGl2ZVdoZW5Ob3RGb2N1c2VkIGVk
aXRhYmxlIGxpbmsgYmVoYXZpb3IKICAgICAgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgc3Rh
dGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+YnV0dG9uKCkgIT0gUmlnaHRCdXR0b24gJiYg
ZG9jdW1lbnQoKS5mcmFtZSgpKSB7CkBAIC0yMTEsNyArMjExLDcgQEAgdm9pZCBIVE1MQW5jaG9y
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZAogCiB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpzZXRB
Y3RpdmUoYm9vbCBkb3duLCBib29sIHBhdXNlKQogewotICAgIGlmIChyZW5kZXJlcklzRWRpdGFi
bGUoKSkgeworICAgIGlmIChoYXNFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgRWRpdGFibGVM
aW5rQmVoYXZpb3IgZWRpdGFibGVMaW5rQmVoYXZpb3IgPSBFZGl0YWJsZUxpbmtEZWZhdWx0QmVo
YXZpb3I7CiAgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudCgpLnNldHRp
bmdzKCkpCiAgICAgICAgICAgICBlZGl0YWJsZUxpbmtCZWhhdmlvciA9IHNldHRpbmdzLT5lZGl0
YWJsZUxpbmtCZWhhdmlvcigpOwpAQCAtMjc5LDcgKzI3OSw3IEBAIGJvb2wgSFRNTEFuY2hvckVs
ZW1lbnQ6OmNhblN0YXJ0U2VsZWN0aW8KICAgICAvLyBGSVhNRTogV2UgcHJvYmFibHkgd2FudCB0
aGlzIHNhbWUgYmVoYXZpb3IgaW4gU1ZHQUVsZW1lbnQgdG9vCiAgICAgaWYgKCFpc0xpbmsoKSkK
ICAgICAgICAgcmV0dXJuIEhUTUxFbGVtZW50OjpjYW5TdGFydFNlbGVjdGlvbigpOwotICAgIHJl
dHVybiByZW5kZXJlcklzRWRpdGFibGUoKTsKKyAgICByZXR1cm4gaGFzRWRpdGFibGVTdHlsZSgp
OwogfQogCiBib29sIEhUTUxBbmNob3JFbGVtZW50OjpkcmFnZ2FibGUoKSBjb25zdApAQCAtNTYx
LDcgKzU2MSw3IEBAIEhUTUxBbmNob3JFbGVtZW50OjpFdmVudFR5cGUgSFRNTEFuY2hvckUKIAog
Ym9vbCBIVE1MQW5jaG9yRWxlbWVudDo6dHJlYXRMaW5rQXNMaXZlRm9yRXZlbnRUeXBlKEV2ZW50
VHlwZSBldmVudFR5cGUpIGNvbnN0CiB7Ci0gICAgaWYgKCFyZW5kZXJlcklzRWRpdGFibGUoKSkK
KyAgICBpZiAoIWhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudCgpLnNldHRpbmdzKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjA5MDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4NSw3ICsxODUsNyBAQCBib29sIEhUTUxCb2R5RWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoY29u
CiAKIGJvb2wgSFRNTEJvZHlFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gcmVuZGVyZXJJc0VkaXRhYmxlKCkgfHwgSFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMo
KTsKKyAgICByZXR1cm4gaGFzRWRpdGFibGVTdHlsZSgpIHx8IEhUTUxFbGVtZW50OjpzdXBwb3J0
c0ZvY3VzKCk7CiB9CiAKIHN0YXRpYyBpbnQgYWRqdXN0Rm9yWm9vbShpbnQgdmFsdWUsIEZyYW1l
JiBmcmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
NjA5MTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjYyLDkgKzY2Miw3IEBAIGJvb2wgSFRNTEVsZW1lbnQ6Omhhc0N1c3RvbUZvY3Vz
TG9naWMoKSAKIAogYm9vbCBIVE1MRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0CiB7Ci0g
ICAgaWYgKCFkb2N1bWVudCgpLnZpZXcoKS0+aXNJbkxheW91dCgpICYmICFkb2N1bWVudCgpLnZp
ZXcoKS0+aXNQYWludGluZygpKQotICAgICAgICBkb2N1bWVudCgpLnVwZGF0ZVN0eWxlSWZOZWVk
ZWQoKTsKLSAgICByZXR1cm4gRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIHx8IChyZW5kZXJlcklz
RWRpdGFibGUoKSAmJiBwYXJlbnROb2RlKCkgJiYgIXBhcmVudE5vZGUoKS0+cmVuZGVyZXJJc0Vk
aXRhYmxlKCkpOworICAgIHJldHVybiBFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgfHwgKGhhc0Vk
aXRhYmxlU3R5bGUoKSAmJiBwYXJlbnROb2RlKCkgJiYgIXBhcmVudE5vZGUoKS0+aGFzRWRpdGFi
bGVTdHlsZSgpKTsKIH0KIAogU3RyaW5nIEhUTUxFbGVtZW50Ojpjb250ZW50RWRpdGFibGUoKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MDUsNyArNDA1LDcgQEAgRHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxl
cjo6b3BlcmF0aW9uRgogICAgICAgICAgICAgcGx1Z2luRG9jdW1lbnRBY2NlcHRzRHJhZ3MgPSBw
bHVnaW5WaWV3LT5zaG91bGRBbGxvd05hdmlnYXRpb25Gcm9tRHJhZ3MoKTsKICAgICB9CiAKLSAg
ICBpZiAoZG9jICYmIChtX2RpZEluaXRpYXRlRHJhZyB8fCAoZG9jLT5pc1BsdWdpbkRvY3VtZW50
KCkgJiYgIXBsdWdpbkRvY3VtZW50QWNjZXB0c0RyYWdzKSB8fCBkb2MtPnJlbmRlcmVySXNFZGl0
YWJsZSgpKSkKKyAgICBpZiAoZG9jICYmIChtX2RpZEluaXRpYXRlRHJhZyB8fCAoZG9jLT5pc1Bs
dWdpbkRvY3VtZW50KCkgJiYgIXBsdWdpbkRvY3VtZW50QWNjZXB0c0RyYWdzKSB8fCBkb2MtPmhh
c0VkaXRhYmxlU3R5bGUoKSkpCiAgICAgICAgIHJldHVybiBEcmFnT3BlcmF0aW9uTm9uZTsKICAg
ICByZXR1cm4gZHJhZ09wZXJhdGlvbihkcmFnRGF0YSk7CiB9CkBAIC01NTMsOSArNTUzLDkgQEAg
Ym9vbCBEcmFnQ29udHJvbGxlcjo6Y2FuUHJvY2Vzc0RyYWcoRHJhZwogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIGlmIChyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmlzUGx1Z2luRWxl
bWVudCgpKSB7Ci0gICAgICAgIGlmICghdG9IVE1MUGx1Z0luRWxlbWVudChyZXN1bHQuaW5uZXJO
b25TaGFyZWROb2RlKCkpLT5jYW5Qcm9jZXNzRHJhZygpICYmICFyZXN1bHQuaW5uZXJOb25TaGFy
ZWROb2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgICAgICBpZiAoIXRvSFRNTFBsdWdJ
bkVsZW1lbnQocmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpKS0+Y2FuUHJvY2Vzc0RyYWcoKSAm
JiAhcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIGlmICghcmVzdWx0LmlubmVyTm9uU2hh
cmVkTm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICB9IGVsc2UgaWYgKCFyZXN1bHQu
aW5uZXJOb25TaGFyZWROb2RlKCktPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgaWYgKG1fZGlkSW5pdGlhdGVEcmFnICYmIG1fZG9jdW1lbnRVbmRlck1v
dXNlID09IG1fZHJhZ0luaXRpYXRvciAmJiByZXN1bHQuaXNTZWxlY3RlZCgpKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzcsNyAr
OTM3LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUmVsZWFzZUV2ZQogICAgICAg
ICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbjsKICAgICAgICAgTm9kZSogbm9kZSA9IGV2
ZW50LnRhcmdldE5vZGUoKTsKICAgICAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9mcmFtZS5z
ZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7Ci0gICAgICAgIGlmIChub2RlICYmIG5v
ZGUtPnJlbmRlcmVyKCkgJiYgKGNhcmV0QnJvd3NpbmcgfHwgbm9kZS0+cmVuZGVyZXJJc0VkaXRh
YmxlKCkpKSB7CisgICAgICAgIGlmIChub2RlICYmIG5vZGUtPnJlbmRlcmVyKCkgJiYgKGNhcmV0
QnJvd3NpbmcgfHwgbm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpKSkgewogICAgICAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIHBvcyA9IG5vZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQoZXZl
bnQubG9jYWxQb2ludCgpKTsKICAgICAgICAgICAgIG5ld1NlbGVjdGlvbiA9IFZpc2libGVTZWxl
Y3Rpb24ocG9zKTsKICAgICAgICAgfQpAQCAtMTE5NCw3ICsxMTk0LDcgQEAgYm9vbCBFdmVudEhh
bmRsZXI6OnVzZUhhbmRDdXJzb3IoTm9kZSogbgogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgYm9vbCBlZGl0YWJsZSA9IG5vZGUtPnJlbmRlcmVySXNFZGl0YWJs
ZSgpOworICAgIGJvb2wgZWRpdGFibGUgPSBub2RlLT5oYXNFZGl0YWJsZVN0eWxlKCk7CiAgICAg
Ym9vbCBlZGl0YWJsZUxpbmtFbmFibGVkID0gZmFsc2U7CiAKICAgICAvLyBJZiB0aGUgbGluayBp
cyBlZGl0YWJsZSwgdGhlbiB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBzZXR0aW5ncyB0byBzZWUgd2hl
dGhlciBvciBub3QgdGhlIGxpbmsgc2hvdWxkIGJlIGZvbGxvd2VkCkBAIC0xMzQzLDcgKzEzNDMs
NyBAQCBPcHRpb25hbEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvCiAKICAgICBzd2l0
Y2ggKHN0eWxlID8gc3R5bGUtPmN1cnNvcigpIDogQ1VSU09SX0FVVE8pIHsKICAgICBjYXNlIENV
UlNPUl9BVVRPOiB7Ci0gICAgICAgIGJvb2wgZWRpdGFibGUgPSBub2RlLT5yZW5kZXJlcklzRWRp
dGFibGUoKTsKKyAgICAgICAgYm9vbCBlZGl0YWJsZSA9IG5vZGUtPmhhc0VkaXRhYmxlU3R5bGUo
KTsKIAogICAgICAgICBpZiAodXNlSGFuZEN1cnNvcihub2RlLCByZXN1bHQuaXNPdmVyTGluaygp
LCBzaGlmdEtleSkpCiAgICAgICAgICAgICByZXR1cm4gaGFuZEN1cnNvcigpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MzYsNyArNTM2LDcgQEAgRWxlbWVudCogRm9jdXNDb250cm9sbGVyOjpwcmV2aW91c0ZvY3Vz
YQogc3RhdGljIGJvb2wgcmVsaW5xdWlzaGVzRWRpdGluZ0ZvY3VzKE5vZGUgKm5vZGUpCiB7CiAg
ICAgQVNTRVJUKG5vZGUpOwotICAgIEFTU0VSVChub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSk7
CisgICAgQVNTRVJUKG5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSk7CiAKICAgICBOb2RlKiByb290
ID0gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUt
PmRvY3VtZW50KCkuZnJhbWUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRU
ZXN0UmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0
VGVzdFJlc3VsdC5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9IaXRUZXN0UmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc4LDcgKzU3OCw3IEBA
IGJvb2wgSGl0VGVzdFJlc3VsdDo6aXNDb250ZW50RWRpdGFibGUoKSAKICAgICBpZiAoaXNIVE1M
SW5wdXRFbGVtZW50KG1faW5uZXJOb25TaGFyZWROb2RlLmdldCgpKSkKICAgICAgICAgcmV0dXJu
IHRvSFRNTElucHV0RWxlbWVudChtX2lubmVyTm9uU2hhcmVkTm9kZS5nZXQoKSktPmlzVGV4dEZp
ZWxkKCk7CiAKLSAgICByZXR1cm4gbV9pbm5lck5vblNoYXJlZE5vZGUtPnJlbmRlcmVySXNFZGl0
YWJsZSgpOworICAgIHJldHVybiBtX2lubmVyTm9uU2hhcmVkTm9kZS0+aGFzRWRpdGFibGVTdHls
ZSgpOwogfQogCiBib29sIEhpdFRlc3RSZXN1bHQ6OmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1
bHQoTm9kZSogbm9kZSwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRl
c3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24g
MTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQ4Myw3ICsyNDgzLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRD
YXJldChQYWludEluZm8mIAogICAgIGJvb2wgaXNDb250ZW50RWRpdGFibGU7CiAgICAgaWYgKHR5
cGUgPT0gQ3Vyc29yQ2FyZXQpIHsKICAgICAgICAgY2FyZXRQYWludGVyID0gZnJhbWUoKS5zZWxl
Y3Rpb24oKS5jYXJldFJlbmRlcmVyKCk7Ci0gICAgICAgIGlzQ29udGVudEVkaXRhYmxlID0gZnJh
bWUoKS5zZWxlY3Rpb24oKS5yZW5kZXJlcklzRWRpdGFibGUoKTsKKyAgICAgICAgaXNDb250ZW50
RWRpdGFibGUgPSBmcmFtZSgpLnNlbGVjdGlvbigpLmhhc0VkaXRhYmxlU3R5bGUoKTsKICAgICB9
IGVsc2UgewogICAgICAgICBjYXJldFBhaW50ZXIgPSBmcmFtZSgpLnBhZ2UoKS0+ZHJhZ0NhcmV0
Q29udHJvbGxlcigpLmNhcmV0UmVuZGVyZXIoKTsKICAgICAgICAgaXNDb250ZW50RWRpdGFibGUg
PSBmcmFtZSgpLnBhZ2UoKS0+ZHJhZ0NhcmV0Q29udHJvbGxlcigpLmlzQ29udGVudEVkaXRhYmxl
KCk7CkBAIC0zNTM4LDcgKzM1MzgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNFZGl0aW5nQm91
bmRhcnkoUmVuCiAgICAgQVNTRVJUKCFhbmNlc3RvciB8fCBhbmNlc3Rvci0+bm9uUHNldWRvRWxl
bWVudCgpKTsKICAgICBBU1NFUlQoY2hpbGQubm9uUHNldWRvTm9kZSgpKTsKICAgICByZXR1cm4g
IWFuY2VzdG9yIHx8ICFhbmNlc3Rvci0+cGFyZW50KCkgfHwgKGFuY2VzdG9yLT5oYXNMYXllcigp
ICYmIGFuY2VzdG9yLT5wYXJlbnQoKS0+aXNSZW5kZXJWaWV3KCkpCi0gICAgICAgIHx8IGFuY2Vz
dG9yLT5ub25Qc2V1ZG9FbGVtZW50KCktPnJlbmRlcmVySXNFZGl0YWJsZSgpID09IGNoaWxkLm5v
blBzZXVkb05vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCk7CisgICAgICAgIHx8IGFuY2VzdG9y
LT5ub25Qc2V1ZG9FbGVtZW50KCktPmhhc0VkaXRhYmxlU3R5bGUoKSA9PSBjaGlsZC5ub25Qc2V1
ZG9Ob2RlKCktPmhhc0VkaXRhYmxlU3R5bGUoKTsKIH0KIAogLy8gRklYTUU6IFRoaXMgZnVuY3Rp
b24gc2hvdWxkIGdvIG9uIFJlbmRlck9iamVjdCBhcyBhbiBpbnN0YW5jZSBtZXRob2QuIFRoZW4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiAxNjA5
MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODIxLDcgKzgyMSw3IEBAIGJvb2wgUmVuZGVyQm94OjpjYW5CZVByb2dyYW1hdGlj
YWxseVNjcm8KICAgICBpZiAoc2Nyb2xsc092ZXJmbG93KCkgJiYgaGFzU2Nyb2xsYWJsZU92ZXJm
bG93KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiBlbGVtZW50KCkgJiYgZWxl
bWVudCgpLT5yZW5kZXJlcklzRWRpdGFibGUoKTsKKyAgICByZXR1cm4gZWxlbWVudCgpICYmIGVs
ZW1lbnQoKS0+aGFzRWRpdGFibGVTdHlsZSgpOwogfQogCiBib29sIFJlbmRlckJveDo6dXNlc0Nv
bXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJ1dHRvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJ1dHRvbi5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBA
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQmIFJlbmRlckJ1dHRvbjo6Zm8KIAogYm9vbCBSZW5kZXJC
dXR0b246OmNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZvcm1Db250
cm9sRWxlbWVudCgpLnJlbmRlcmVySXNFZGl0YWJsZSgpOworICAgIHJldHVybiBmb3JtQ29udHJv
bEVsZW1lbnQoKS5oYXNFZGl0YWJsZVN0eWxlKCk7CiB9CiAKIGJvb2wgUmVuZGVyQnV0dG9uOjpo
YXNMaW5lSWZFbXB0eSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNTQsMTQgKzIzNTQsMTQg
QEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlck9iamVjdDo6Y3JlYXRlVmlzaQogewogICAgIC8vIElm
IHRoaXMgaXMgYSBub24tYW5vbnltb3VzIHJlbmRlcmVyIGluIGFuIGVkaXRhYmxlIGFyZWEsIHRo
ZW4gaXQncyBzaW1wbGUuCiAgICAgaWYgKE5vZGUqIG5vZGUgPSBub25Qc2V1ZG9Ob2RlKCkpIHsK
LSAgICAgICAgaWYgKCFub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkgeworICAgICAgICBpZiAo
IW5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSkgewogICAgICAgICAgICAgLy8gSWYgaXQgY2FuIGJl
IGZvdW5kLCB3ZSBwcmVmZXIgYSB2aXN1YWxseSBlcXVpdmFsZW50IHBvc2l0aW9uIHRoYXQgaXMg
ZWRpdGFibGUuIAogICAgICAgICAgICAgUG9zaXRpb24gcG9zaXRpb24gPSBjcmVhdGVMZWdhY3lF
ZGl0aW5nUG9zaXRpb24obm9kZSwgb2Zmc2V0KTsKICAgICAgICAgICAgIFBvc2l0aW9uIGNhbmRp
ZGF0ZSA9IHBvc2l0aW9uLmRvd25zdHJlYW0oQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpOwotICAg
ICAgICAgICAgaWYgKGNhbmRpZGF0ZS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcklzRWRpdGFi
bGUoKSkKKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGUuZGVwcmVjYXRlZE5vZGUoKS0+aGFzRWRp
dGFibGVTdHlsZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oY2Fu
ZGlkYXRlLCBhZmZpbml0eSk7CiAgICAgICAgICAgICBjYW5kaWRhdGUgPSBwb3NpdGlvbi51cHN0
cmVhbShDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7Ci0gICAgICAgICAgICBpZiAoY2FuZGlkYXRl
LmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgICAgICAgICAgaWYg
KGNhbmRpZGF0ZS5kZXByZWNhdGVkTm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihjYW5kaWRhdGUsIGFmZmluaXR5KTsKICAg
ICAgICAgfQogICAgICAgICAvLyBGSVhNRTogRWxpbWluYXRlIGxlZ2FjeSBlZGl0aW5nIHBvc2l0
aW9ucwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFn
bWVudC5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0RnJhZ21lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIFJl
bmRlclRleHRGcmFnbWVudDo6flJlbmRlclRleHRGcmFnbWVudCgKIAogYm9vbCBSZW5kZXJUZXh0
RnJhZ21lbnQ6OmNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRleHRO
b2RlKCkgJiYgdGV4dE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCk7CisgICAgcmV0dXJuIHRl
eHROb2RlKCkgJiYgdGV4dE5vZGUoKS0+aGFzRWRpdGFibGVTdHlsZSgpOwogfQogCiB2b2lkIFJl
bmRlclRleHRGcmFnbWVudDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9Sb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUm9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkzLDcgKzY5
Myw3IEBAIFJlbmRlckJsb2NrRmxvdyYgUm9vdElubGluZUJveDo6YmxvY2tGbG8KIAogc3RhdGlj
IGJvb2wgaXNFZGl0YWJsZUxlYWYoSW5saW5lQm94KiBsZWFmKQogewotICAgIHJldHVybiBsZWFm
ICYmIGxlYWYtPnJlbmRlcmVyKCkubm9kZSgpICYmIGxlYWYtPnJlbmRlcmVyKCkubm9kZSgpLT5y
ZW5kZXJlcklzRWRpdGFibGUoKTsKKyAgICByZXR1cm4gbGVhZiAmJiBsZWFmLT5yZW5kZXJlcigp
Lm5vZGUoKSAmJiBsZWFmLT5yZW5kZXJlcigpLm5vZGUoKS0+aGFzRWRpdGFibGVTdHlsZSgpOwog
fQogCiBJbmxpbmVCb3gqIFJvb3RJbmxpbmVCb3g6OmNsb3Nlc3RMZWFmQ2hpbGRGb3JQb2ludChj
b25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRlbnRzLCBib29sIG9ubHlFZGl0YWJsZUxlYXZlcykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg5
LDcgKzE4OSw3IEBAIHZvaWQgU1ZHQUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXYKIAog
Ym9vbCBTVkdBRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0CiB7Ci0gICAgaWYgKHJlbmRl
cmVySXNFZGl0YWJsZSgpKQorICAgIGlmIChoYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJl
dHVybiBTVkdHcmFwaGljc0VsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219853</attachid>
            <date>2013-12-21 09:43:23 -0800</date>
            <delta_ts>2013-12-21 09:43:23 -0800</delta_ts>
            <desc>another</desc>
            <filename>has-editable-style-3.patch</filename>
            <type>text/plain</type>
            <size>68027</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MDk2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDEzLTEyLTIxICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBGaWd1cmUgb3V0IGlmIG5vZGUg
aXMgZm9jdXNhYmxlIHdpdGhvdXQgcmVxdWlyaW5nIHJlbmRlcmVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjYxMTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmNvbXB1dGVkU3R5bGUpOgorICAgICAgICAKKyAgICAgICAg
ICAgIFVzZSBpbkRvY3VtZW50KCkgdGVzdCBpbnN0ZWFkIG9mIHRoZSBhdHRhY2hlZCgpIHRlc3Qu
IFdlIGNhbiBjb21wdXRlIHN0eWxlIGZvciBhbnl0aGluZyB0aGF0CisgICAgICAgICAgICBpcyBp
biBkb2N1bWVudC4KKworICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OmlzQ29udGVudEVkaXRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzQ29u
dGVudFJpY2hseUVkaXRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omhhc0VkaXRhYmxl
U3R5bGUpOgorICAgICAgICAKKyAgICAgICAgICAgIFVzZSBjb21wdXRlZFN0eWxlIGluc3RlYWQg
b2YgZ2V0dGluZyB0aGUgc3R5bGUgZnJvbSByZW5kZXJlci4gQ29tcHV0ZWQgc3R5bGUgZ2V0cyBj
b25zdHJ1Y3RlZAorICAgICAgICAgICAgb24gZGVtYW5kIGlmIHJlbmRlcmVyIGRvZXMgbm90IGV4
aXN0LiBJZiBpdCBkb2VzIHRoZW4gdGhlIGV4aXN0aW5nIHN0eWxlIGlzIHVzZWQuCisKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGU6OmlzRWRpdGFibGVUb0FjY2Vzc2liaWxpdHkpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZTo6Y2FuU3RhcnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6aXNSb290RWRpdGFibGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJvb3RF
ZGl0YWJsZUVsZW1lbnQpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpoYXNFZGl0YWJsZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omhhc1Jp
Y2hseUVkaXRhYmxlU3R5bGUpOgorICAgICAgICAKKyAgICAgICAgICAgIFJlbmFtZWQgZnJvbSBy
ZW5kZXJlcklzRWRpdGFibGUgc2luY2UgdGhlc2Ugbm8gbG9uZ2VyIHJlcXVpcmUgcmVuZGVyZXIu
CisKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKToKKyAgICAg
ICAgCisgICAgICAgICAgICBTdG9wIGNhbGxpbmcgdXBkYXRlU3R5bGVJZk5lZWRlZCgpIGFuZCBm
b3JjaW5nIHJlbmRlciB0cmVlIGNvbnN0cnVjdGlvbi4KKwogMjAxMy0xMi0yMSAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1NPVVBdIFJlc291
cmNlSGFuZGxlU291cCBzaG91bGQgdXNlIGFzeW5jIGNsaWVudCBjYWxsYmFja3Mgd2hlbiBjbGll
bnQgdXNlcyBhc3luYyBjYWxsYmFja3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCShyZXZpc2lvbiAx
NjA5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDcgKzE1MCw3IEBAIHZvaWQgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OmNoaWxkcmVuQ2gKICAgICAgICAgICAgIGF4T2JqZWN0Q2FjaGUo
KS0+cG9zdE5vdGlmaWNhdGlvbihwYXJlbnQsIHBhcmVudC0+ZG9jdW1lbnQoKSwgQVhPYmplY3RD
YWNoZTo6QVhMaXZlUmVnaW9uQ2hhbmdlZCk7CiAgICAgICAgIAogICAgICAgICAvLyBJZiB0aGlz
IGVsZW1lbnQgaXMgYW4gQVJJQSB0ZXh0IGNvbnRyb2wsIG5vdGlmeSB0aGUgQVQgb2YgY2hhbmdl
cy4KLSAgICAgICAgaWYgKHBhcmVudC0+aXNBUklBVGV4dENvbnRyb2woKSAmJiAhcGFyZW50LT5p
c05hdGl2ZVRleHRDb250cm9sKCkgJiYgIXBhcmVudC0+bm9kZSgpLT5yZW5kZXJlcklzRWRpdGFi
bGUoKSkKKyAgICAgICAgaWYgKHBhcmVudC0+aXNBUklBVGV4dENvbnRyb2woKSAmJiAhcGFyZW50
LT5pc05hdGl2ZVRleHRDb250cm9sKCkgJiYgIXBhcmVudC0+bm9kZSgpLT5oYXNFZGl0YWJsZVN0
eWxlKCkpCiAgICAgICAgICAgICBheE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24ocGFy
ZW50LCBwYXJlbnQtPmRvY3VtZW50KCksIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkKTsK
ICAgICB9CiB9CkBAIC03MzcsNyArNzM3LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dDo6aXNSZWFkT25seQogICAgICAgICAgICAgcmV0dXJuIGlucHV0LT5pc1JlYWRPbmx5KCk7CiAg
ICAgfQogCi0gICAgcmV0dXJuICFub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKTsKKyAgICByZXR1
cm4gIW5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6aXNSZXF1aXJlZCgpIGNvbnN0CkBAIC0yMDQ4LDcgKzIwNDgsNyBAQCBBY2Nlc3Np
YmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjCiAgICAgcmV0dXJuIHJvbGU7CiB9ICAg
CiAKLS8vIElmIHlvdSBjYWxsIG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpIHNpbmNlIHRoYXQg
d2lsbCByZXR1cm4gdHJ1ZSBpZiBhbiBhbmNlc3RvciBpcyBlZGl0YWJsZS4KKy8vIElmIHlvdSBj
YWxsIG5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSBzaW5jZSB0aGF0IHdpbGwgcmV0dXJuIHRydWUg
aWYgYW4gYW5jZXN0b3IgaXMgZWRpdGFibGUuCiAvLyBUaGlzIG9ubHkgcmV0dXJucyB0cnVlIGlm
IHRoaXMgaXMgdGhlIGVsZW1lbnQgdGhhdCBhY3R1YWxseSBoYXMgdGhlIGNvbnRlbnRFZGl0YWJs
ZSBhdHRyaWJ1dGUgc2V0LgogYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aGFzQ29udGVu
dEVkaXRhYmxlQXR0cmlidXRlU2V0KCkgY29uc3QKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cAkocmV2aXNpb24gMTYwOTE2KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQyLDExICs1NDIs
MTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1JlYWRPbgogICAgIAogICAg
IGlmIChpc1dlYkFyZWEoKSkgewogICAgICAgICBpZiAoSFRNTEVsZW1lbnQqIGJvZHkgPSBtX3Jl
bmRlcmVyLT5kb2N1bWVudCgpLmJvZHkoKSkgewotICAgICAgICAgICAgaWYgKGJvZHktPnJlbmRl
cmVySXNFZGl0YWJsZSgpKQorICAgICAgICAgICAgaWYgKGJvZHktPmhhc0VkaXRhYmxlU3R5bGUo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBy
ZXR1cm4gIW1fcmVuZGVyZXItPmRvY3VtZW50KCkucmVuZGVyZXJJc0VkaXRhYmxlKCk7CisgICAg
ICAgIHJldHVybiAhbV9yZW5kZXJlci0+ZG9jdW1lbnQoKS5oYXNFZGl0YWJsZVN0eWxlKCk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc1JlYWRPbmx5KCk7
CkBAIC0xMjU1LDcgKzEyNTUsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNv
bXB1dGVBCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBBbnl0aGluZyB0aGF0
IGlzIGNvbnRlbnQgZWRpdGFibGUgc2hvdWxkIG5vdCBiZSBpZ25vcmVkLgotICAgIC8vIEhvd2V2
ZXIsIG9uZSBjYW5ub3QganVzdCBjYWxsIG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpIHNpbmNl
IHRoYXQgd2lsbCBhc2sgaWYgaXRzIHBhcmVudHMKKyAgICAvLyBIb3dldmVyLCBvbmUgY2Fubm90
IGp1c3QgY2FsbCBub2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkgc2luY2UgdGhhdCB3aWxsIGFzayBp
ZiBpdHMgcGFyZW50cwogICAgIC8vIGFyZSBhbHNvIGVkaXRhYmxlLiBPbmx5IHRoZSB0b3AgbGV2
ZWwgY29udGVudCBlZGl0YWJsZSByZWdpb24gc2hvdWxkIGJlIGV4cG9zZWQuCiAgICAgaWYgKGhh
c0NvbnRlbnRFZGl0YWJsZUF0dHJpYnV0ZVNldCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0yNzQ0LDcgKzI3NDQsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHRD
aGFuCiAgICAgICAgIGlmIChwYXJlbnQtPnN1cHBvcnRzQVJJQUxpdmVSZWdpb24oKSkKICAgICAg
ICAgICAgIGNhY2hlLT5wb3N0Tm90aWZpY2F0aW9uKHJlbmRlclBhcmVudCwgQVhPYmplY3RDYWNo
ZTo6QVhMaXZlUmVnaW9uQ2hhbmdlZCk7CiAKLSAgICAgICAgaWYgKHBhcmVudC0+aXNBUklBVGV4
dENvbnRyb2woKSAmJiAhcGFyZW50LT5pc05hdGl2ZVRleHRDb250cm9sKCkgJiYgIXBhcmVudC0+
bm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICAgICAgaWYgKHBhcmVudC0+aXNBUklB
VGV4dENvbnRyb2woKSAmJiAhcGFyZW50LT5pc05hdGl2ZVRleHRDb250cm9sKCkgJiYgIXBhcmVu
dC0+bm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgICAgICBjYWNoZS0+cG9zdE5v
dGlmaWNhdGlvbihyZW5kZXJQYXJlbnQsIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkKTsK
ICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5VGFibGUuY3BwCShyZXZpc2lvbiAxNjA5MDQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMiw3ICsxMDIsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6aXNEYXRhVGFibGUoKSBj
CiAgICAgLy8gV2hlbiBhIHNlY3Rpb24gb2YgdGhlIGRvY3VtZW50IGlzIGNvbnRlbnRFZGl0YWJs
ZSwgYWxsIHRhYmxlcyBzaG91bGQgYmUKICAgICAvLyB0cmVhdGVkIGFzIGRhdGEgdGFibGVzLCBv
dGhlcndpc2UgdXNlcnMgbWF5IG5vdCBiZSBhYmxlIHRvIHdvcmsgd2l0aCByaWNoCiAgICAgLy8g
dGV4dCBlZGl0b3JzIHRoYXQgYWxsb3cgY3JlYXRpbmcgYW5kIGVkaXRpbmcgdGFibGVzLgotICAg
IGlmIChub2RlKCkgJiYgbm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICBpZiAobm9k
ZSgpICYmIG5vZGUoKS0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIC8vIFRoaXMgZW1wbG95cyBhIGhldXJpc3RpYyB0byBkZXRlcm1pbmUgaWYgdGhpcyB0
YWJsZSBzaG91bGQgYXBwZWFyLgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lv
biAxNjA5MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMjgsNyArMzI4LDcgQEAgc3RhdGljIFdpZGdldCogd2lkZ2V0Rm9yRWxlbWVudChF
bGVtZW50Kgogc3RhdGljIGJvb2wgYWNjZXB0c0VkaXRpbmdGb2N1cyhOb2RlKiBub2RlKQogewog
ICAgIEFTU0VSVChub2RlKTsKLSAgICBBU1NFUlQobm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkp
OworICAgIEFTU0VSVChub2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkpOwogCiAgICAgTm9kZSogcm9v
dCA9IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBGcmFtZSogZnJhbWUgPSBub2Rl
LT5kb2N1bWVudCgpLmZyYW1lKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lv
biAxNjA5MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxNDgsNyArMjE0OCw3IEBAIFJlbmRlclN0eWxlKiBFbGVtZW50Ojpjb21wdXRlZFN0
eWxlKFBzZXUKICAgICAgICAgcmV0dXJuIHVzZWRTdHlsZTsKICAgICB9CiAKLSAgICBpZiAoIWF0
dGFjaGVkKCkpIHsKKyAgICBpZiAoIWluRG9jdW1lbnQoKSkgewogICAgICAgICAvLyBGSVhNRTog
VHJ5IHRvIGRvIGJldHRlciB0aGFuIHRoaXMuIEVuc3VyZSB0aGF0IHN0eWxlRm9yRWxlbWVudCgp
IHdvcmtzIGZvciBlbGVtZW50cyB0aGF0IGFyZSBub3QgaW4gdGhlCiAgICAgICAgIC8vIGRvY3Vt
ZW50IHRyZWUgYW5kIGZpZ3VyZSBvdXQgd2hlbiB0byBkZXN0cm95IHRoZSBjb21wdXRlZCBzdHls
ZSBmb3Igc3VjaCBlbGVtZW50cy4KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuY3BwCShyZXZpc2lvbiAxNjA5MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDcgQEAKICNpbmNsdWRlICJLZXlib2FyZEV2
ZW50LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIK
KyNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZl
bnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24uaCIKQEAgLTU0MywxMyArNTQ0LDEzIEBAIGNvbnN0IEF0b21pY1N0cmlu
ZyYgTm9kZTo6bmFtZXNwYWNlVVJJKCkKIGJvb2wgTm9kZTo6aXNDb250ZW50RWRpdGFibGUoVXNl
clNlbGVjdEFsbFRyZWF0bWVudCB0cmVhdG1lbnQpCiB7CiAgICAgZG9jdW1lbnQoKS51cGRhdGVT
dHlsZUlmTmVlZGVkKCk7Ci0gICAgcmV0dXJuIHJlbmRlcmVySXNFZGl0YWJsZShFZGl0YWJsZSwg
dHJlYXRtZW50KTsKKyAgICByZXR1cm4gaGFzRWRpdGFibGVTdHlsZShFZGl0YWJsZSwgdHJlYXRt
ZW50KTsKIH0KIAogYm9vbCBOb2RlOjppc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpCiB7CiAgICAg
ZG9jdW1lbnQoKS51cGRhdGVTdHlsZUlmTmVlZGVkKCk7Ci0gICAgcmV0dXJuIHJlbmRlcmVySXNF
ZGl0YWJsZShSaWNobHlFZGl0YWJsZSwgVXNlclNlbGVjdEFsbElzQWx3YXlzTm9uRWRpdGFibGUp
OworICAgIHJldHVybiBoYXNFZGl0YWJsZVN0eWxlKFJpY2hseUVkaXRhYmxlLCBVc2VyU2VsZWN0
QWxsSXNBbHdheXNOb25FZGl0YWJsZSk7CiB9CiAKIHZvaWQgTm9kZTo6aW5zcGVjdCgpCkBAIC01
NjAsOCArNTYxLDEwIEBAIHZvaWQgTm9kZTo6aW5zcGVjdCgpCiAjZW5kaWYKIH0KIAotYm9vbCBO
b2RlOjpyZW5kZXJlcklzRWRpdGFibGUoRWRpdGFibGVMZXZlbCBlZGl0YWJsZUxldmVsLCBVc2Vy
U2VsZWN0QWxsVHJlYXRtZW50IHRyZWF0bWVudCkgY29uc3QKK2Jvb2wgTm9kZTo6aGFzRWRpdGFi
bGVTdHlsZShFZGl0YWJsZUxldmVsIGVkaXRhYmxlTGV2ZWwsIFVzZXJTZWxlY3RBbGxUcmVhdG1l
bnQgdHJlYXRtZW50KSBjb25zdAogeworICAgIGlmICghZG9jdW1lbnQoKS5oYXNMaXZpbmdSZW5k
ZXJUcmVlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZG9jdW1lbnQoKS5mcmFt
ZSgpICYmIGRvY3VtZW50KCkuZnJhbWUoKS0+cGFnZSgpICYmIGRvY3VtZW50KCkuZnJhbWUoKS0+
cGFnZSgpLT5pc0VkaXRhYmxlKCkgJiYgIWNvbnRhaW5pbmdTaGFkb3dSb290KCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCkBAIC01NzMsMzQgKzU3NiwzNiBAQCBib29sIE5vZGU6OnJlbmRlcmVy
SXNFZGl0YWJsZShFZGl0YWJsZUxlCiAgICAgLy8gd291bGQgZmlyZSBpbiB0aGUgbWlkZGxlIG9m
IERvY3VtZW50OjpzZXRGb2N1c2VkRWxlbWVudCgpLgogCiAgICAgZm9yIChjb25zdCBOb2RlKiBu
b2RlID0gdGhpczsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBp
ZiAoKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCBub2RlLT5pc0RvY3VtZW50Tm9kZSgpKSAmJiBu
b2RlLT5yZW5kZXJlcigpKSB7CisgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG5vZGUtPmlz
RG9jdW1lbnROb2RlKCkgPyBub2RlLT5yZW5kZXJTdHlsZSgpIDogY29uc3RfY2FzdDxOb2RlKj4o
bm9kZSktPmNvbXB1dGVkU3R5bGUoKTsKKyAgICAgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05FKQorICAgICAg
ICAgICAgY29udGludWU7CiAjaWYgRU5BQkxFKFVTRVJTRUxFQ1RfQUxMKQotICAgICAgICAgICAg
Ly8gRWxlbWVudHMgd2l0aCB1c2VyLXNlbGVjdDogYWxsIHN0eWxlIGFyZSBjb25zaWRlcmVkIGF0
b21pYwotICAgICAgICAgICAgLy8gdGhlcmVmb3JlIG5vbiBlZGl0YWJsZS4KLSAgICAgICAgICAg
IGlmICh0cmVhdG1lbnQgPT0gVXNlclNlbGVjdEFsbElzQWx3YXlzTm9uRWRpdGFibGUgJiYgbm9k
ZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS51c2VyU2VsZWN0KCkgPT0gU0VMRUNUX0FMTCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEVsZW1lbnRzIHdpdGggdXNlci1z
ZWxlY3Q6IGFsbCBzdHlsZSBhcmUgY29uc2lkZXJlZCBhdG9taWMKKyAgICAgICAgLy8gdGhlcmVm
b3JlIG5vbiBlZGl0YWJsZS4KKyAgICAgICAgaWYgKHRyZWF0bWVudCA9PSBVc2VyU2VsZWN0QWxs
SXNBbHdheXNOb25FZGl0YWJsZSAmJiBzdHlsZS0+dXNlclNlbGVjdCgpID09IFNFTEVDVF9BTEwp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAjZWxzZQotICAgICAgICAgICAgVU5VU0VEX1BB
UkFNKHRyZWF0bWVudCk7CisgICAgICAgIFVOVVNFRF9QQVJBTSh0cmVhdG1lbnQpOwogI2VuZGlm
Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCkudXNlck1vZGlm
eSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFJFQURfT05MWToKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICBjYXNlIFJFQURfV1JJVEU6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBjYXNlIFJFQURfV1JJVEVfUExBSU5URVhUX09OTFk6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVkaXRhYmxlTGV2ZWwgIT0gUmljaGx5RWRpdGFibGU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgc3dpdGNoIChzdHlsZS0+dXNlck1vZGlmeSgpKSB7CisgICAgICAgIGNhc2UgUkVBRF9PTkxZ
OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIFJFQURfV1JJVEU6Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBSRUFEX1dSSVRFX1BMQUlOVEVY
VF9PTkxZOgorICAgICAgICAgICAgcmV0dXJuIGVkaXRhYmxlTGV2ZWwgIT0gUmljaGx5RWRpdGFi
bGU7CiAgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9Ci0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgTm9kZTo6
aXNFZGl0YWJsZVRvQWNjZXNzaWJpbGl0eShFZGl0YWJsZUxldmVsIGVkaXRhYmxlTGV2ZWwpIGNv
bnN0CiB7Ci0gICAgaWYgKHJlbmRlcmVySXNFZGl0YWJsZShlZGl0YWJsZUxldmVsKSkKKyAgICBp
ZiAoaGFzRWRpdGFibGVTdHlsZShlZGl0YWJsZUxldmVsKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKICAgICAvLyBGSVhNRTogUmVzcGVjdCBlZGl0YWJsZUxldmVsIGZvciBBUklBIGVkaXRhYmxl
IGVsZW1lbnRzLgpAQCAtOTIxLDcgKzkyNiw3IEBAIGludCBOb2RlOjptYXhDaGFyYWN0ZXJPZmZz
ZXQoKSBjb25zdAogLy8gaXMgb2J2aW91c2x5IG1pc3BsYWNlZC4KIGJvb2wgTm9kZTo6Y2FuU3Rh
cnRTZWxlY3Rpb24oKSBjb25zdAogewotICAgIGlmIChyZW5kZXJlcklzRWRpdGFibGUoKSkKKyAg
ICBpZiAoaGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlm
IChyZW5kZXJlcigpKSB7CkBAIC0xMDE3LDcgKzEwMjIsNyBAQCB2b2lkIE5vZGU6OnJlbW92ZWRG
cm9tKENvbnRhaW5lck5vZGUmIGluCiAKIGJvb2wgTm9kZTo6aXNSb290RWRpdGFibGVFbGVtZW50
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVuZGVyZXJJc0VkaXRhYmxlKCkgJiYgaXNFbGVtZW50
Tm9kZSgpICYmICghcGFyZW50Tm9kZSgpIHx8ICFwYXJlbnROb2RlKCktPnJlbmRlcmVySXNFZGl0
YWJsZSgpCisgICAgcmV0dXJuIGhhc0VkaXRhYmxlU3R5bGUoKSAmJiBpc0VsZW1lbnROb2RlKCkg
JiYgKCFwYXJlbnROb2RlKCkgfHwgIXBhcmVudE5vZGUoKS0+aGFzRWRpdGFibGVTdHlsZSgpCiAg
ICAgICAgIHx8ICFwYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSB8fCBoYXNUYWdOYW1lKGJv
ZHlUYWcpKTsKIH0KIApAQCAtMTAzNCw3ICsxMDM5LDcgQEAgRWxlbWVudCogTm9kZTo6cm9vdEVk
aXRhYmxlRWxlbWVudChFZGl0YQogRWxlbWVudCogTm9kZTo6cm9vdEVkaXRhYmxlRWxlbWVudCgp
IGNvbnN0CiB7CiAgICAgRWxlbWVudCogcmVzdWx0ID0gMDsKLSAgICBmb3IgKE5vZGUqIG4gPSBj
b25zdF9jYXN0PE5vZGUqPih0aGlzKTsgbiAmJiBuLT5yZW5kZXJlcklzRWRpdGFibGUoKTsgbiA9
IG4tPnBhcmVudE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbiA9IGNvbnN0X2Nhc3Q8Tm9kZSo+
KHRoaXMpOyBuICYmIG4tPmhhc0VkaXRhYmxlU3R5bGUoKTsgbiA9IG4tPnBhcmVudE5vZGUoKSkg
ewogICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAgICAgcmVzdWx0ID0g
dG9FbGVtZW50KG4pOwogICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShib2R5VGFnKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuaAkocmV2aXNpb24gMTYwOTA4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQyLDExICszNDIsMTEgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBpbnNwZWN0KCk7CiAKLSAgICBib29sIHJlbmRlcmVySXNFZGl0YWJsZShFZGl0YWJsZVR5cGUg
ZWRpdGFibGVUeXBlID0gQ29udGVudElzRWRpdGFibGUsIFVzZXJTZWxlY3RBbGxUcmVhdG1lbnQg
dHJlYXRtZW50ID0gVXNlclNlbGVjdEFsbElzQWx3YXlzTm9uRWRpdGFibGUpIGNvbnN0CisgICAg
Ym9vbCBoYXNFZGl0YWJsZVN0eWxlKEVkaXRhYmxlVHlwZSBlZGl0YWJsZVR5cGUgPSBDb250ZW50
SXNFZGl0YWJsZSwgVXNlclNlbGVjdEFsbFRyZWF0bWVudCB0cmVhdG1lbnQgPSBVc2VyU2VsZWN0
QWxsSXNBbHdheXNOb25FZGl0YWJsZSkgY29uc3QKICAgICB7CiAgICAgICAgIHN3aXRjaCAoZWRp
dGFibGVUeXBlKSB7CiAgICAgICAgIGNhc2UgQ29udGVudElzRWRpdGFibGU6Ci0gICAgICAgICAg
ICByZXR1cm4gcmVuZGVyZXJJc0VkaXRhYmxlKEVkaXRhYmxlLCB0cmVhdG1lbnQpOworICAgICAg
ICAgICAgcmV0dXJuIGhhc0VkaXRhYmxlU3R5bGUoRWRpdGFibGUsIHRyZWF0bWVudCk7CiAgICAg
ICAgIGNhc2UgSGFzRWRpdGFibGVBWFJvbGU6CiAgICAgICAgICAgICByZXR1cm4gaXNFZGl0YWJs
ZVRvQWNjZXNzaWJpbGl0eShFZGl0YWJsZSk7CiAgICAgICAgIH0KQEAgLTM1NCwxMSArMzU0LDEx
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGJvb2wgcmVu
ZGVyZXJJc1JpY2hseUVkaXRhYmxlKEVkaXRhYmxlVHlwZSBlZGl0YWJsZVR5cGUgPSBDb250ZW50
SXNFZGl0YWJsZSkgY29uc3QKKyAgICBib29sIGhhc1JpY2hseUVkaXRhYmxlU3R5bGUoRWRpdGFi
bGVUeXBlIGVkaXRhYmxlVHlwZSA9IENvbnRlbnRJc0VkaXRhYmxlKSBjb25zdAogICAgIHsKICAg
ICAgICAgc3dpdGNoIChlZGl0YWJsZVR5cGUpIHsKICAgICAgICAgY2FzZSBDb250ZW50SXNFZGl0
YWJsZToKLSAgICAgICAgICAgIHJldHVybiByZW5kZXJlcklzRWRpdGFibGUoUmljaGx5RWRpdGFi
bGUsIFVzZXJTZWxlY3RBbGxJc0Fsd2F5c05vbkVkaXRhYmxlKTsKKyAgICAgICAgICAgIHJldHVy
biBoYXNFZGl0YWJsZVN0eWxlKFJpY2hseUVkaXRhYmxlLCBVc2VyU2VsZWN0QWxsSXNBbHdheXNO
b25FZGl0YWJsZSk7CiAgICAgICAgIGNhc2UgSGFzRWRpdGFibGVBWFJvbGU6CiAgICAgICAgICAg
ICByZXR1cm4gaXNFZGl0YWJsZVRvQWNjZXNzaWJpbGl0eShSaWNobHlFZGl0YWJsZSk7CiAgICAg
ICAgIH0KQEAgLTY1NSw3ICs2NTUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFzVHJlZVNoYXJl
ZFBhcmVudCgpIGNvbnN0IHsgcmV0dXJuICEhcGFyZW50Tm9kZSgpOyB9CiAKICAgICBlbnVtIEVk
aXRhYmxlTGV2ZWwgeyBFZGl0YWJsZSwgUmljaGx5RWRpdGFibGUgfTsKLSAgICBib29sIHJlbmRl
cmVySXNFZGl0YWJsZShFZGl0YWJsZUxldmVsLCBVc2VyU2VsZWN0QWxsVHJlYXRtZW50ID0gVXNl
clNlbGVjdEFsbElzQWx3YXlzTm9uRWRpdGFibGUpIGNvbnN0OworICAgIGJvb2wgaGFzRWRpdGFi
bGVTdHlsZShFZGl0YWJsZUxldmVsLCBVc2VyU2VsZWN0QWxsVHJlYXRtZW50ID0gVXNlclNlbGVj
dEFsbElzQWx3YXlzTm9uRWRpdGFibGUpIGNvbnN0OwogICAgIGJvb2wgaXNFZGl0YWJsZVRvQWNj
ZXNzaWJpbGl0eShFZGl0YWJsZUxldmVsKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCByZWZF
dmVudFRhcmdldCgpIE9WRVJSSURFOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCShyZXZp
c2lvbiAxNjA5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHN0YXRpYyBOb2RlKiBuZXh0UmVuZGVyZWRFZGl0YWJs
ZShOb2RlKiAKIHsKICAgICB3aGlsZSAoKG5vZGUgPSBuZXh0TGVhZk5vZGUobm9kZSkpKSB7CiAg
ICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAgICAg
ICBpZiAoIXJlbmRlcmVyIHx8ICFub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICAgICAg
aWYgKCFyZW5kZXJlciB8fCAhbm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIGlmIChoYXNJbmxpbmVCb3hXcmFwcGVyKCpyZW5kZXJlcikpCiAg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKQEAgLTc5LDcgKzc5LDcgQEAgc3RhdGljIE5vZGUqIHBy
ZXZpb3VzUmVuZGVyZWRFZGl0YWJsZShObwogewogICAgIHdoaWxlICgobm9kZSA9IHByZXZpb3Vz
TGVhZk5vZGUobm9kZSkpKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2Rl
LT5yZW5kZXJlcigpOwotICAgICAgICBpZiAoIXJlbmRlcmVyIHx8ICFub2RlLT5yZW5kZXJlcklz
RWRpdGFibGUoKSkKKyAgICAgICAgaWYgKCFyZW5kZXJlciB8fCAhbm9kZS0+aGFzRWRpdGFibGVT
dHlsZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChoYXNJbmxpbmVCb3hX
cmFwcGVyKCpyZW5kZXJlcikpCiAgICAgICAgICAgICByZXR1cm4gbm9kZTsKQEAgLTQzNCwxNSAr
NDM0LDE1IEBAIGJvb2wgUG9zaXRpb246OmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck4KIGJvb2wg
UG9zaXRpb246OmF0RWRpdGluZ0JvdW5kYXJ5KCkgY29uc3QKIHsKICAgICBQb3NpdGlvbiBuZXh0
UG9zaXRpb24gPSBkb3duc3RyZWFtKENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKLSAgICBpZiAo
YXRGaXJzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSAmJiBuZXh0UG9zaXRpb24uaXNOb3ROdWxs
KCkgJiYgIW5leHRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUo
KSkKKyAgICBpZiAoYXRGaXJzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSAmJiBuZXh0UG9zaXRp
b24uaXNOb3ROdWxsKCkgJiYgIW5leHRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5oYXNFZGl0
YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAgICBQb3NpdGlv
biBwcmV2UG9zaXRpb24gPSB1cHN0cmVhbShDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7Ci0gICAg
aWYgKGF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSAmJiBwcmV2UG9zaXRpb24uaXNOb3RO
dWxsKCkgJiYgIXByZXZQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcklzRWRpdGFi
bGUoKSkKKyAgICBpZiAoYXRMYXN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpICYmIHByZXZQb3Np
dGlvbi5pc05vdE51bGwoKSAmJiAhcHJldlBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPmhhc0Vk
aXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAotICAgIHJldHVy
biBuZXh0UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIW5leHRQb3NpdGlvbi5kZXByZWNhdGVkTm9k
ZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKQotICAgICAgICAmJiBwcmV2UG9zaXRpb24uaXNOb3RO
dWxsKCkgJiYgIXByZXZQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcklzRWRpdGFi
bGUoKTsKKyAgICByZXR1cm4gbmV4dFBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFuZXh0UG9zaXRp
b24uZGVwcmVjYXRlZE5vZGUoKS0+aGFzRWRpdGFibGVTdHlsZSgpCisgICAgICAgICYmIHByZXZQ
b3NpdGlvbi5pc05vdE51bGwoKSAmJiAhcHJldlBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPmhh
c0VkaXRhYmxlU3R5bGUoKTsKIH0KIAogTm9kZSogUG9zaXRpb246OnBhcmVudEVkaXRpbmdCb3Vu
ZGFyeSgpIGNvbnN0CkBAIC00NTUsNyArNDU1LDcgQEAgTm9kZSogUG9zaXRpb246OnBhcmVudEVk
aXRpbmdCb3VuZGFyeSgpIAogICAgICAgICByZXR1cm4gMDsKIAogICAgIE5vZGUqIGJvdW5kYXJ5
ID0gbV9hbmNob3JOb2RlLmdldCgpOwotICAgIHdoaWxlIChib3VuZGFyeSAhPSBkb2N1bWVudEVs
ZW1lbnQgJiYgYm91bmRhcnktPm5vblNoYWRvd0JvdW5kYXJ5UGFyZW50Tm9kZSgpICYmIG1fYW5j
aG9yTm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgPT0gYm91bmRhcnktPnBhcmVudE5vZGUoKS0+
cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgd2hpbGUgKGJvdW5kYXJ5ICE9IGRvY3VtZW50RWxl
bWVudCAmJiBib3VuZGFyeS0+bm9uU2hhZG93Qm91bmRhcnlQYXJlbnROb2RlKCkgJiYgbV9hbmNo
b3JOb2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkgPT0gYm91bmRhcnktPnBhcmVudE5vZGUoKS0+aGFz
RWRpdGFibGVTdHlsZSgpKQogICAgICAgICBib3VuZGFyeSA9IGJvdW5kYXJ5LT5ub25TaGFkb3dC
b3VuZGFyeVBhcmVudE5vZGUoKTsKICAgICAKICAgICByZXR1cm4gYm91bmRhcnk7CkBAIC01OTAs
MTcgKzU5MCwxNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6dXBzdHJlYW0oRWRpdGluZ0JvdW5kCiAg
ICAgLy8gRklYTUU6IFBvc2l0aW9uSXRlcmF0b3Igc2hvdWxkIHJlc3BlY3QgQmVmb3JlIGFuZCBB
ZnRlciBwb3NpdGlvbnMuCiAgICAgUG9zaXRpb25JdGVyYXRvciBsYXN0VmlzaWJsZSA9IG1fYW5j
aG9yVHlwZSA9PSBQb3NpdGlvbklzQWZ0ZXJBbmNob3IgPyBjcmVhdGVMZWdhY3lFZGl0aW5nUG9z
aXRpb24obV9hbmNob3JOb2RlLmdldCgpLCBjYXJldE1heE9mZnNldChtX2FuY2hvck5vZGUuZ2V0
KCkpKSA6ICp0aGlzOwogICAgIFBvc2l0aW9uSXRlcmF0b3IgY3VycmVudFBvcyA9IGxhc3RWaXNp
YmxlOwotICAgIGJvb2wgc3RhcnRFZGl0YWJsZSA9IHN0YXJ0Tm9kZS0+cmVuZGVyZXJJc0VkaXRh
YmxlKCk7CisgICAgYm9vbCBzdGFydEVkaXRhYmxlID0gc3RhcnROb2RlLT5oYXNFZGl0YWJsZVN0
eWxlKCk7CiAgICAgTm9kZSogbGFzdE5vZGUgPSBzdGFydE5vZGU7CiAgICAgYm9vbCBib3VuZGFy
eUNyb3NzZWQgPSBmYWxzZTsKICAgICBmb3IgKDsgIWN1cnJlbnRQb3MuYXRTdGFydCgpOyBjdXJy
ZW50UG9zLmRlY3JlbWVudCgpKSB7CiAgICAgICAgIE5vZGUqIGN1cnJlbnROb2RlID0gY3VycmVu
dFBvcy5ub2RlKCk7CiAgICAgICAgIAogICAgICAgICAvLyBEb24ndCBjaGVjayBmb3IgYW4gZWRp
dGFiaWxpdHkgY2hhbmdlIGlmIHdlIGhhdmVuJ3QgbW92ZWQgdG8gYSBkaWZmZXJlbnQgbm9kZSwK
LSAgICAgICAgLy8gdG8gYXZvaWQgdGhlIGV4cGVuc2Ugb2YgY29tcHV0aW5nIHJlbmRlcmVySXNF
ZGl0YWJsZSgpLgorICAgICAgICAvLyB0byBhdm9pZCB0aGUgZXhwZW5zZSBvZiBjb21wdXRpbmcg
aGFzRWRpdGFibGVTdHlsZSgpLgogICAgICAgICBpZiAoY3VycmVudE5vZGUgIT0gbGFzdE5vZGUp
IHsKICAgICAgICAgICAgIC8vIERvbid0IGNoYW5nZSBlZGl0YWJpbGl0eS4KLSAgICAgICAgICAg
IGJvb2wgY3VycmVudEVkaXRhYmxlID0gY3VycmVudE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgp
OworICAgICAgICAgICAgYm9vbCBjdXJyZW50RWRpdGFibGUgPSBjdXJyZW50Tm9kZS0+aGFzRWRp
dGFibGVTdHlsZSgpOwogICAgICAgICAgICAgaWYgKHN0YXJ0RWRpdGFibGUgIT0gY3VycmVudEVk
aXRhYmxlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHJ1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5n
Qm91bmRhcnkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzE3LDE3ICs3MTcsMTcg
QEAgUG9zaXRpb24gUG9zaXRpb246OmRvd25zdHJlYW0oRWRpdGluZ0JvdQogICAgIC8vIEZJWE1F
OiBQb3NpdGlvbkl0ZXJhdG9yIHNob3VsZCByZXNwZWN0IEJlZm9yZSBhbmQgQWZ0ZXIgcG9zaXRp
b25zLgogICAgIFBvc2l0aW9uSXRlcmF0b3IgbGFzdFZpc2libGUgPSBtX2FuY2hvclR5cGUgPT0g
UG9zaXRpb25Jc0FmdGVyQW5jaG9yID8gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fYW5j
aG9yTm9kZS5nZXQoKSwgY2FyZXRNYXhPZmZzZXQobV9hbmNob3JOb2RlLmdldCgpKSkgOiAqdGhp
czsKICAgICBQb3NpdGlvbkl0ZXJhdG9yIGN1cnJlbnRQb3MgPSBsYXN0VmlzaWJsZTsKLSAgICBi
b29sIHN0YXJ0RWRpdGFibGUgPSBzdGFydE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpOworICAg
IGJvb2wgc3RhcnRFZGl0YWJsZSA9IHN0YXJ0Tm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpOwogICAg
IE5vZGUqIGxhc3ROb2RlID0gc3RhcnROb2RlOwogICAgIGJvb2wgYm91bmRhcnlDcm9zc2VkID0g
ZmFsc2U7CiAgICAgZm9yICg7ICFjdXJyZW50UG9zLmF0RW5kKCk7IGN1cnJlbnRQb3MuaW5jcmVt
ZW50KCkpIHsgICAKICAgICAgICAgTm9kZSogY3VycmVudE5vZGUgPSBjdXJyZW50UG9zLm5vZGUo
KTsKICAgICAgICAgCiAgICAgICAgIC8vIERvbid0IGNoZWNrIGZvciBhbiBlZGl0YWJpbGl0eSBj
aGFuZ2UgaWYgd2UgaGF2ZW4ndCBtb3ZlZCB0byBhIGRpZmZlcmVudCBub2RlLAotICAgICAgICAv
LyB0byBhdm9pZCB0aGUgZXhwZW5zZSBvZiBjb21wdXRpbmcgcmVuZGVyZXJJc0VkaXRhYmxlKCku
CisgICAgICAgIC8vIHRvIGF2b2lkIHRoZSBleHBlbnNlIG9mIGNvbXB1dGluZyBoYXNFZGl0YWJs
ZVN0eWxlKCkuCiAgICAgICAgIGlmIChjdXJyZW50Tm9kZSAhPSBsYXN0Tm9kZSkgewogICAgICAg
ICAgICAgLy8gRG9uJ3QgY2hhbmdlIGVkaXRhYmlsaXR5LgotICAgICAgICAgICAgYm9vbCBjdXJy
ZW50RWRpdGFibGUgPSBjdXJyZW50Tm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCk7CisgICAgICAg
ICAgICBib29sIGN1cnJlbnRFZGl0YWJsZSA9IGN1cnJlbnROb2RlLT5oYXNFZGl0YWJsZVN0eWxl
KCk7CiAgICAgICAgICAgICBpZiAoc3RhcnRFZGl0YWJsZSAhPSBjdXJyZW50RWRpdGFibGUpIHsK
ICAgICAgICAgICAgICAgICBpZiAocnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSkK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05NDIsMTAgKzk0MiwxMCBAQCBib29sIFBv
c2l0aW9uOjppc0NhbmRpZGF0ZSgpIGNvbnN0CiAgICAgICAgIGlmIChibG9jay5sb2dpY2FsSGVp
Z2h0KCkgfHwgbV9hbmNob3JOb2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKSB7CiAgICAgICAgICAg
ICBpZiAoIVBvc2l0aW9uOjpoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhl
aWdodChibG9jaykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGF0Rmlyc3RFZGl0aW5nUG9zaXRp
b25Gb3JOb2RlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNhdGVk
Tm9kZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPnJlbmRlcmVySXNFZGl0
YWJsZSgpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUoZGVwcmVjYXRlZE5vZGUo
KSkgJiYgYXRFZGl0aW5nQm91bmRhcnkoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2FuY2hvck5v
ZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25l
KGRlcHJlY2F0ZWROb2RlKCkpICYmIGF0RWRpdGluZ0JvdW5kYXJ5KCk7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UKLSAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxl
KCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgpKSAm
JiBhdEVkaXRpbmdCb3VuZGFyeSgpOworICAgICAgICByZXR1cm4gbV9hbmNob3JOb2RlLT5oYXNF
ZGl0YWJsZVN0eWxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNh
dGVkTm9kZSgpKSAmJiBhdEVkaXRpbmdCb3VuZGFyeSgpOwogCiAgICAgcmV0dXJuIGZhbHNlOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAkocmV2aXNpb24g
MTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcgQEAgYm9vbCBQb3NpdGlvbkl0ZXJhdG9yOjppc0Nh
bmRpZGF0ZSgpIGNvbgogICAgICAgICBpZiAoYmxvY2subG9naWNhbEhlaWdodCgpIHx8IG1fYW5j
aG9yTm9kZS0+aGFzVGFnTmFtZShib2R5VGFnKSkgewogICAgICAgICAgICAgaWYgKCFQb3NpdGlv
bjo6aGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQoYmxvY2spKQog
ICAgICAgICAgICAgICAgIHJldHVybiBhdFN0YXJ0T2ZOb2RlKCkgJiYgIVBvc2l0aW9uOjpub2Rl
SXNVc2VyU2VsZWN0Tm9uZShtX2FuY2hvck5vZGUpOwotICAgICAgICAgICAgcmV0dXJuIG1fYW5j
aG9yTm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2Vs
ZWN0Tm9uZShtX2FuY2hvck5vZGUpICYmIFBvc2l0aW9uKCp0aGlzKS5hdEVkaXRpbmdCb3VuZGFy
eSgpOworICAgICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZS0+aGFzRWRpdGFibGVTdHlsZSgp
ICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobV9hbmNob3JOb2RlKSAmJiBQb3Np
dGlvbigqdGhpcykuYXRFZGl0aW5nQm91bmRhcnkoKTsKICAgICAgICAgfQogICAgIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5jcHAJKHJldmlz
aW9uIDE2MDkwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIEFwcGVuZE5vZGVDb21tYW5kOjpB
cHBlbmROb2RlQ29tbWFuZChQYXMKICAgICBBU1NFUlQobV9ub2RlKTsKICAgICBBU1NFUlQoIW1f
bm9kZS0+cGFyZW50Tm9kZSgpKTsKIAotICAgIEFTU0VSVChtX3BhcmVudC0+cmVuZGVyZXJJc0Vk
aXRhYmxlKCkgfHwgIW1fcGFyZW50LT5hdHRhY2hlZCgpKTsKKyAgICBBU1NFUlQobV9wYXJlbnQt
Pmhhc0VkaXRhYmxlU3R5bGUoKSB8fCAhbV9wYXJlbnQtPmF0dGFjaGVkKCkpOwogfQogCiBzdGF0
aWMgdm9pZCBzZW5kQVhUZXh0Q2hhbmdlZElnbm9yaW5nTGluZUJyZWFrcyhOb2RlKiBub2RlLCBB
WE9iamVjdENhY2hlOjpBWFRleHRDaGFuZ2UgdGV4dENoYW5nZSkKQEAgLTU4LDcgKzU4LDcgQEAg
c3RhdGljIHZvaWQgc2VuZEFYVGV4dENoYW5nZWRJZ25vcmluZ0xpbgogCiB2b2lkIEFwcGVuZE5v
ZGVDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBpZiAoIW1fcGFyZW50LT5yZW5kZXJlcklzRWRp
dGFibGUoKSAmJiBtX3BhcmVudC0+YXR0YWNoZWQoKSkKKyAgICBpZiAoIW1fcGFyZW50LT5oYXNF
ZGl0YWJsZVN0eWxlKCkgJiYgbV9wYXJlbnQtPmF0dGFjaGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fcGFyZW50LT5hcHBlbmRDaGlsZChtX25vZGUuZ2V0KCksIElHTk9SRV9FWENFUFRJ
T04pOwpAQCAtNjksNyArNjksNyBAQCB2b2lkIEFwcGVuZE5vZGVDb21tYW5kOjpkb0FwcGx5KCkK
IAogdm9pZCBBcHBlbmROb2RlQ29tbWFuZDo6ZG9VbmFwcGx5KCkKIHsKLSAgICBpZiAoIW1fcGFy
ZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICBpZiAoIW1fcGFyZW50LT5oYXNFZGl0YWJs
ZVN0eWxlKCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gTmVlZCB0byBub3Rp
ZnkgdGhpcyBiZWZvcmUgYWN0dWFsbHkgZGVsZXRpbmcgdGhlIHRleHQKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxNjA5MDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzExLDEyICs3MTEsMTIgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6Zml4
UmFuZ2VBbmRBcHBseQogCiBzdGF0aWMgYm9vbCBjb250YWluc05vbkVkaXRhYmxlUmVnaW9uKE5v
ZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICBp
ZiAoIW5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICBOb2RlKiBzaWJsaW5nID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9k
ZSk7CiAgICAgZm9yIChOb2RlKiBkZXNjZW5kZW50ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBkZXNj
ZW5kZW50ICYmIGRlc2NlbmRlbnQgIT0gc2libGluZzsgZGVzY2VuZGVudCA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQoZGVzY2VuZGVudCkpIHsKLSAgICAgICAgaWYgKCFkZXNjZW5kZW50LT5yZW5kZXJl
cklzRWRpdGFibGUoKSkKKyAgICAgICAgaWYgKCFkZXNjZW5kZW50LT5oYXNFZGl0YWJsZVN0eWxl
KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTc1NywxMCArNzU3LDEw
IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKICAgICBmb3IgKFJl
ZlB0cjxOb2RlPiBuZXh0OyBub2RlICYmIG5vZGUgIT0gcGFzdEVuZE5vZGU7IG5vZGUgPSBuZXh0
KSB7CiAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUuZ2V0KCkpOwogCi0g
ICAgICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSB8fCAhbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxl
KCkpCisgICAgICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSB8fCAhbm9kZS0+aGFzRWRpdGFibGVT
dHlsZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICBpZiAoIW5v
ZGUtPnJlbmRlcmVySXNSaWNobHlFZGl0YWJsZSgpICYmIG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkg
eworICAgICAgICBpZiAoIW5vZGUtPmhhc1JpY2hseUVkaXRhYmxlU3R5bGUoKSAmJiBub2RlLT5p
c0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBwbGFpbnRleHQtb25s
eSByZWdpb24uIE9ubHkgcHJvY2VlZCBpZiBpdCdzIGZ1bGx5IHNlbGVjdGVkLgogICAgICAgICAg
ICAgLy8gcGFzdEVuZE5vZGUgaXMgdGhlIG5vZGUgYWZ0ZXIgdGhlIGxhc3QgZnVsbHkgc2VsZWN0
ZWQgbm9kZSwgc28gaWYgaXQncyBpbnNpZGUgbm9kZSB0aGVuCiAgICAgICAgICAgICAvLyBub2Rl
IGlzbid0IGZ1bGx5IHNlbGVjdGVkLgpAQCAtNzgwLDcgKzc4MCw3IEBAIHZvaWQgQXBwbHlTdHls
ZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAKICAgICAgICAgaWYgKG5vZGUtPmNoaWxkTm9kZUNvdW50KCkpIHsKLSAgICAgICAgICAgIGlm
IChub2RlLT5jb250YWlucyhwYXN0RW5kTm9kZS5nZXQoKSkgfHwgY29udGFpbnNOb25FZGl0YWJs
ZVJlZ2lvbihub2RlLmdldCgpKSB8fCAhbm9kZS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJlcklzRWRp
dGFibGUoKSkKKyAgICAgICAgICAgIGlmIChub2RlLT5jb250YWlucyhwYXN0RW5kTm9kZS5nZXQo
KSkgfHwgY29udGFpbnNOb25FZGl0YWJsZVJlZ2lvbihub2RlLmdldCgpKSB8fCAhbm9kZS0+cGFy
ZW50Tm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUuZ2V0KCkpKSB7CiAg
ICAgICAgICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVu
KG5vZGUuZ2V0KCkpOwpAQCAtMTM2MCwxMyArMTM2MCwxMyBAQCB2b2lkIEFwcGx5U3R5bGVDb21t
YW5kOjpzdXJyb3VuZE5vZGVSYW5nCiAKICAgICBSZWZQdHI8Tm9kZT4gbmV4dFNpYmxpbmcgPSBl
bGVtZW50LT5uZXh0U2libGluZygpOwogICAgIFJlZlB0cjxOb2RlPiBwcmV2aW91c1NpYmxpbmcg
PSBlbGVtZW50LT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICBpZiAobmV4dFNpYmxpbmcgJiYgbmV4
dFNpYmxpbmctPmlzRWxlbWVudE5vZGUoKSAmJiBuZXh0U2libGluZy0+cmVuZGVyZXJJc0VkaXRh
YmxlKCkKKyAgICBpZiAobmV4dFNpYmxpbmcgJiYgbmV4dFNpYmxpbmctPmlzRWxlbWVudE5vZGUo
KSAmJiBuZXh0U2libGluZy0+aGFzRWRpdGFibGVTdHlsZSgpCiAgICAgICAgICYmIGFyZUlkZW50
aWNhbEVsZW1lbnRzKGVsZW1lbnQuZ2V0KCksIHRvRWxlbWVudChuZXh0U2libGluZy5nZXQoKSkp
KQogICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKGVsZW1lbnQuZ2V0KCksIHRvRWxlbWVu
dChuZXh0U2libGluZy5nZXQoKSkpOwogCi0gICAgaWYgKHByZXZpb3VzU2libGluZyAmJiBwcmV2
aW91c1NpYmxpbmctPmlzRWxlbWVudE5vZGUoKSAmJiBwcmV2aW91c1NpYmxpbmctPnJlbmRlcmVy
SXNFZGl0YWJsZSgpKSB7CisgICAgaWYgKHByZXZpb3VzU2libGluZyAmJiBwcmV2aW91c1NpYmxp
bmctPmlzRWxlbWVudE5vZGUoKSAmJiBwcmV2aW91c1NpYmxpbmctPmhhc0VkaXRhYmxlU3R5bGUo
KSkgewogICAgICAgICBOb2RlKiBtZXJnZWRFbGVtZW50ID0gcHJldmlvdXNTaWJsaW5nLT5uZXh0
U2libGluZygpOwotICAgICAgICBpZiAobWVyZ2VkRWxlbWVudC0+aXNFbGVtZW50Tm9kZSgpICYm
IG1lcmdlZEVsZW1lbnQtPnJlbmRlcmVySXNFZGl0YWJsZSgpCisgICAgICAgIGlmIChtZXJnZWRF
bGVtZW50LT5pc0VsZW1lbnROb2RlKCkgJiYgbWVyZ2VkRWxlbWVudC0+aGFzRWRpdGFibGVTdHls
ZSgpCiAgICAgICAgICAgICAmJiBhcmVJZGVudGljYWxFbGVtZW50cyh0b0VsZW1lbnQocHJldmlv
dXNTaWJsaW5nLmdldCgpKSwgdG9FbGVtZW50KG1lcmdlZEVsZW1lbnQpKSkKICAgICAgICAgICAg
IG1lcmdlSWRlbnRpY2FsRWxlbWVudHModG9FbGVtZW50KHByZXZpb3VzU2libGluZy5nZXQoKSks
IHRvRWxlbWVudChtZXJnZWRFbGVtZW50KSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDE2MDkwOCkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjc4LDcgKzEyNzgsNyBAQCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5k
OjpicmVha091dE9mRW1wCiAgICAgLy8gRklYTUU6IENhbid0IHdlIGRvIHNvbWV0aGluZyBiZXR0
ZXIgd2hlbiB0aGUgaW1tZWRpYXRlIHBhcmVudCB3YXNuJ3QgYSBsaXN0IG5vZGU/CiAgICAgaWYg
KCFsaXN0Tm9kZQogICAgICAgICB8fCAoIWxpc3ROb2RlLT5oYXNUYWdOYW1lKHVsVGFnKSAmJiAh
bGlzdE5vZGUtPmhhc1RhZ05hbWUob2xUYWcpKQotICAgICAgICB8fCAhbGlzdE5vZGUtPnJlbmRl
cmVySXNFZGl0YWJsZSgpCisgICAgICAgIHx8ICFsaXN0Tm9kZS0+aGFzRWRpdGFibGVTdHlsZSgp
CiAgICAgICAgIHx8IGxpc3ROb2RlID09IGVtcHR5TGlzdEl0ZW0tPnJvb3RFZGl0YWJsZUVsZW1l
bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE2MDkwNCkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgRGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6RGVs
ZXRlQnV0dG9uQ29udAogCiBzdGF0aWMgYm9vbCBpc0RlbGV0YWJsZUVsZW1lbnQoY29uc3QgTm9k
ZSogbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCAh
bm9kZS0+aW5Eb2N1bWVudCgpIHx8ICFub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICBp
ZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCAhbm9kZS0+aW5Eb2N1bWVudCgp
IHx8ICFub2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIC8vIEluIGdlbmVyYWwgd2Ugd2FudCB0byBvbmx5IGRyYXcgdGhlIFVJIGFyb3VuZCBvYmpl
Y3Qgb2YgYSBjZXJ0YWluIGFyZWEsIGJ1dCB3ZSBzdGlsbCBrZWVwIHRoZSBtaW4gd2lkdGgvaGVp
Z2h0IHRvCkBAIC0xNTIsNyArMTUyLDcgQEAgc3RhdGljIEhUTUxFbGVtZW50KiBlbmNsb3NpbmdE
ZWxldGFibGVFbAogCiAgICAgLy8gVGhlIGVuY2xvc2luZ05vZGVPZlR5cGUgZnVuY3Rpb24gb25s
eSB3b3JrcyBvbiBub2RlcyB0aGF0IGFyZSBlZGl0YWJsZQogICAgIC8vICh3aGljaCBpcyBzdHJh
bmdlLCBnaXZlbiBpdHMgbmFtZSkuCi0gICAgaWYgKCFjb250YWluZXItPnJlbmRlcmVySXNFZGl0
YWJsZSgpKQorICAgIGlmICghY29udGFpbmVyLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAg
IHJldHVybiAwOwogCiAgICAgTm9kZSogZWxlbWVudCA9IGVuY2xvc2luZ05vZGVPZlR5cGUoZmly
c3RQb3NpdGlvbkluTm9kZShjb250YWluZXIpLCAmaXNEZWxldGFibGVFbGVtZW50KTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21t
YW5kLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxl
dGVGcm9tVGV4dE5vZGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBA
QCB2b2lkIERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmRvVW5hcHBsCiB7CiAgICAgQVNTRVJU
KG1fbm9kZSk7CiAKLSAgICBpZiAoIW1fbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAg
aWYgKCFtX25vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
bV9ub2RlLT5pbnNlcnREYXRhKG1fb2Zmc2V0LCBtX3RleHQsIElHTk9SRV9FWENFUFRJT04pOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQuY3BwCShyZXZpc2lvbiAxNjA5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDAsNyArMzQwLDcgQEAg
c3RhdGljIFBvc2l0aW9uIGZpcnN0RWRpdGFibGVQb3NpdGlvbkluTgogewogICAgIEFTU0VSVChu
b2RlKTsKICAgICBOb2RlKiBuZXh0ID0gbm9kZTsKLSAgICB3aGlsZSAobmV4dCAmJiAhbmV4dC0+
cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgd2hpbGUgKG5leHQgJiYgIW5leHQtPmhhc0VkaXRh
YmxlU3R5bGUoKSkKICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobmV4dCwgbm9k
ZSk7CiAgICAgcmV0dXJuIG5leHQgPyBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobmV4dCkg
OiBQb3NpdGlvbigpOwogfQpAQCAtMzUyLDcgKzM1Miw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZDo6cmVtb3ZlTm9kZSgKICAgICAgICAgCiAgICAgaWYgKG1fc3RhcnRSb290ICE9IG1f
ZW5kUm9vdCAmJiAhKG5vZGUtPmlzRGVzY2VuZGFudE9mKG1fc3RhcnRSb290LmdldCgpKSAmJiBu
b2RlLT5pc0Rlc2NlbmRhbnRPZihtX2VuZFJvb3QuZ2V0KCkpKSkgewogICAgICAgICAvLyBJZiBh
IG5vZGUgaXMgbm90IGluIGJvdGggdGhlIHN0YXJ0IGFuZCBlbmQgZWRpdGFibGUgcm9vdHMsIHJl
bW92ZSBpdCBvbmx5IGlmIGl0cyBpbnNpZGUgYW4gZWRpdGFibGUgcmVnaW9uLgotICAgICAgICBp
ZiAoIW5vZGUtPnBhcmVudE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpIHsKKyAgICAgICAg
aWYgKCFub2RlLT5wYXJlbnROb2RlKCktPmhhc0VkaXRhYmxlU3R5bGUoKSkgewogICAgICAgICAg
ICAgLy8gRG9uJ3QgcmVtb3ZlIG5vbi1lZGl0YWJsZSBhdG9taWMgbm9kZXMuCiAgICAgICAgICAg
ICBpZiAoIW5vZGUtPmZpcnN0Q2hpbGQoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCShyZXZpc2lvbiAxNjA5MDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY4OCw3ICs2ODgsNyBAQCBUcmlTdGF0ZSBFZGl0aW5nU3R5bGU6OnRyaVN0YXRlT2ZT
dHlsZShjCiAgICAgVHJpU3RhdGUgc3RhdGUgPSBGYWxzZVRyaVN0YXRlOwogICAgIGJvb2wgbm9k
ZUlzU3RhcnQgPSB0cnVlOwogICAgIGZvciAoTm9kZSogbm9kZSA9IHNlbGVjdGlvbi5zdGFydCgp
LmRlcHJlY2F0ZWROb2RlKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUp
KSB7Ci0gICAgICAgIGlmIChub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVySXNFZGl0
YWJsZSgpKSB7CisgICAgICAgIGlmIChub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPmhhc0VkaXRh
YmxlU3R5bGUoKSkgewogICAgICAgICAgICAgQ29tcHV0ZWRTdHlsZUV4dHJhY3RvciBjb21wdXRl
ZFN0eWxlKG5vZGUpOwogICAgICAgICAgICAgVHJpU3RhdGUgbm9kZVN0YXRlID0gdHJpU3RhdGVP
ZlN0eWxlKCZjb21wdXRlZFN0eWxlLCBub2RlLT5pc1RleHROb2RlKCkgPyBFZGl0aW5nU3R5bGU6
OkRvTm90SWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzIDogRWRpdGluZ1N0eWxlOjpJZ25vcmVUZXh0
T25seVByb3BlcnRpZXMpOwogICAgICAgICAgICAgaWYgKG5vZGVJc1N0YXJ0KSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiAxNjA5MDQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMiw3ICszMTIsNyBA
QCBib29sIEVkaXRvcjo6Y2FuRGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlCiAgICAgaWYgKCFzdGFy
dENvbnRhaW5lciB8fCAhZW5kQ29udGFpbmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
Ci0gICAgaWYgKCFzdGFydENvbnRhaW5lci0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgfHwgIWVuZENv
bnRhaW5lci0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgaWYgKCFzdGFydENvbnRhaW5lci0+
aGFzRWRpdGFibGVTdHlsZSgpIHx8ICFlbmRDb250YWluZXItPmhhc0VkaXRhYmxlU3R5bGUoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHJhbmdlLT5jb2xsYXBzZWQoSUdOT1JF
X0VYQ0VQVElPTikpIHsKQEAgLTIwNzQsNyArMjA3NCw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlz
c3BlbGxpbmdzT3JCYWRHcmFtbWEKICAgICAKICAgICAvLyBJZiB3ZSdyZSBub3QgaW4gYW4gZWRp
dGFibGUgbm9kZSwgYmFpbC4KICAgICBOb2RlKiBlZGl0YWJsZU5vZGUgPSBzZWFyY2hSYW5nZS0+
c3RhcnRDb250YWluZXIoKTsKLSAgICBpZiAoIWVkaXRhYmxlTm9kZSB8fCAhZWRpdGFibGVOb2Rl
LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICBpZiAoIWVkaXRhYmxlTm9kZSB8fCAhZWRpdGFi
bGVOb2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICgh
aXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihlZGl0YWJsZU5vZGUpKQpAQCAtMjE0Myw3ICsyMTQz
LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcgogCiAgICAgLy8g
SWYgd2UncmUgbm90IGluIGFuIGVkaXRhYmxlIG5vZGUsIGJhaWwuCiAgICAgTm9kZSogZWRpdGFi
bGVOb2RlID0gc3BlbGxpbmdSYW5nZS0+c3RhcnRDb250YWluZXIoKTsKLSAgICBpZiAoIWVkaXRh
YmxlTm9kZSB8fCAhZWRpdGFibGVOb2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICBpZiAo
IWVkaXRhYmxlTm9kZSB8fCAhZWRpdGFibGVOb2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmICghaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihlZGl0YWJs
ZU5vZGUpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCShy
ZXZpc2lvbiAxNjA5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsNyArMjU1LDcgQEAgc3RhdGljIHVuc2lnbmVkIHZl
cnRpY2FsU2Nyb2xsRGlzdGFuY2UoRgogICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5p
c0JveCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUg
PSByZW5kZXJlci0+c3R5bGUoKTsKLSAgICBpZiAoIShzdHlsZS5vdmVyZmxvd1koKSA9PSBPU0NS
T0xMIHx8IHN0eWxlLm92ZXJmbG93WSgpID09IE9BVVRPIHx8IGZvY3VzZWRFbGVtZW50LT5yZW5k
ZXJlcklzRWRpdGFibGUoKSkpCisgICAgaWYgKCEoc3R5bGUub3ZlcmZsb3dZKCkgPT0gT1NDUk9M
TCB8fCBzdHlsZS5vdmVyZmxvd1koKSA9PSBPQVVUTyB8fCBmb2N1c2VkRWxlbWVudC0+aGFzRWRp
dGFibGVTdHlsZSgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaW50IGhlaWdodCA9IHN0ZDo6
bWluPGludD4odG9SZW5kZXJCb3gocmVuZGVyZXIpLT5jbGllbnRIZWlnaHQoKSwgZnJhbWUudmll
dygpLT52aXNpYmxlSGVpZ2h0KCkpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
c3RkOjptYXgoc3RkOjptYXg8aW50PihoZWlnaHQgKiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9T
dGVwV2hlblBhZ2luZygpLCBoZWlnaHQgLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFn
ZXMoKSksIDEpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2Nr
Q29tbWFuZC5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Rm9ybWF0QmxvY2tDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDE0ICsxNDksMTQg
QEAgTm9kZSogZW5jbG9zaW5nQmxvY2tUb1NwbGl0VHJlZVRvKE5vZGUqIAogewogICAgIE5vZGUq
IGxhc3RCbG9jayA9IHN0YXJ0Tm9kZTsKICAgICBmb3IgKE5vZGUqIG4gPSBzdGFydE5vZGU7IG47
IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKCFuLT5yZW5kZXJlcklzRWRpdGFi
bGUoKSkKKyAgICAgICAgaWYgKCFuLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gbGFzdEJsb2NrOwotICAgICAgICBpZiAoaXNUYWJsZUNlbGwobikgfHwgbi0+aGFzVGFn
TmFtZShib2R5VGFnKSB8fCAhbi0+cGFyZW50Tm9kZSgpIHx8ICFuLT5wYXJlbnROb2RlKCktPnJl
bmRlcmVySXNFZGl0YWJsZSgpIHx8IGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKG4pKQorICAgICAg
ICBpZiAoaXNUYWJsZUNlbGwobikgfHwgbi0+aGFzVGFnTmFtZShib2R5VGFnKSB8fCAhbi0+cGFy
ZW50Tm9kZSgpIHx8ICFuLT5wYXJlbnROb2RlKCktPmhhc0VkaXRhYmxlU3R5bGUoKSB8fCBpc0Vs
ZW1lbnRGb3JGb3JtYXRCbG9jayhuKSkKICAgICAgICAgICAgIHJldHVybiBuOwogICAgICAgICBp
ZiAoaXNCbG9jayhuKSkKICAgICAgICAgICAgIGxhc3RCbG9jayA9IG47CiAgICAgICAgIGlmIChp
c0xpc3RFbGVtZW50KG4pKQotICAgICAgICAgICAgcmV0dXJuIG4tPnBhcmVudE5vZGUoKS0+cmVu
ZGVyZXJJc0VkaXRhYmxlKCkgPyBuLT5wYXJlbnROb2RlKCkgOiBuOworICAgICAgICAgICAgcmV0
dXJuIG4tPnBhcmVudE5vZGUoKS0+aGFzRWRpdGFibGVTdHlsZSgpID8gbi0+cGFyZW50Tm9kZSgp
IDogbjsKICAgICB9CiAgICAgcmV0dXJuIGxhc3RCbG9jazsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCShyZXZpc2lvbiAxNjA5MDQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU4OSw3ICsxNTg5LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0RnJhbWVFbGVtZW50
SQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIFRoaXMgbWV0aG9kJ3MgcHVycG9z
ZSBpcyBpdCB0byBtYWtlIGl0IGVhc2llciB0byBzZWxlY3QgaWZyYW1lcyAoaW4gb3JkZXIgdG8g
ZGVsZXRlIHRoZW0pLiAgRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIGlmcmFtZSBpc24ndCBkZWxl
dGFibGUuCi0gICAgaWYgKCFvd25lckVsZW1lbnRQYXJlbnQtPnJlbmRlcmVySXNFZGl0YWJsZSgp
KQorICAgIGlmICghb3duZXJFbGVtZW50UGFyZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIENyZWF0ZSBjb21wdXRlIHBvc2l0aW9ucyBiZWZvcmUgYW5k
IGFmdGVyIHRoZSBlbGVtZW50LgpAQCAtMjAyNCw3ICsyMDI0LDcgQEAgdm9pZCBGcmFtZVNlbGVj
dGlvbjo6c2V0U2VsZWN0aW9uRnJvbU5vbgogCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9m
cmFtZS0+ZG9jdW1lbnQoKTsKICAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2ZyYW1lLT5zZXR0
aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7Ci0gICAgaWYgKCFpc05vbmUoKSB8fCAhKGRv
Y3VtZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKSkKKyAgICBpZiAo
IWlzTm9uZSgpIHx8ICEoZG9jdW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSB8fCBjYXJldEJyb3dz
aW5nKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTm9kZSogbm9kZSA9IGRvY3VtZW50LT5kb2N1
bWVudEVsZW1lbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmgJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHB1YmxpYzoKICAgICBF
bGVtZW50KiByb290RWRpdGFibGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24u
cm9vdEVkaXRhYmxlRWxlbWVudCgpOyB9CiAgICAgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVu
dE9yRG9jdW1lbnRFbGVtZW50KCkgY29uc3Q7CiAKLSAgICBib29sIHJlbmRlcmVySXNFZGl0YWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLnJlbmRlcmVySXNFZGl0YWJsZSgpOyB9Cisg
ICAgYm9vbCBoYXNFZGl0YWJsZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaGFz
RWRpdGFibGVTdHlsZSgpOyB9CiAgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCk7IH0KICAgICBib29sIGlzQ29u
dGVudFJpY2hseUVkaXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNDb250ZW50
UmljaGx5RWRpdGFibGUoKTsgfQogICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
SW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCShyZXZpc2lvbiAxNjA5MDQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHZvaWQgSW5kZW50T3V0ZGVudENvbW1hbmQ6Om91dGRlbnRQ
YXJhZ3IKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZE9mUGFyYWdyYXBoID0gZW5kT2ZQ
YXJhZ3JhcGgodmlzaWJsZVN0YXJ0T2ZQYXJhZ3JhcGgpOwogCiAgICAgTm9kZSogZW5jbG9zaW5n
Tm9kZSA9IGVuY2xvc2luZ05vZGVPZlR5cGUodmlzaWJsZVN0YXJ0T2ZQYXJhZ3JhcGguZGVlcEVx
dWl2YWxlbnQoKSwgJmlzTGlzdE9ySW5kZW50QmxvY2txdW90ZSk7Ci0gICAgaWYgKCFlbmNsb3Np
bmdOb2RlIHx8ICFlbmNsb3NpbmdOb2RlLT5wYXJlbnROb2RlKCktPnJlbmRlcmVySXNFZGl0YWJs
ZSgpKSAvLyBXZSBjYW4ndCBvdXRkZW50IGlmIHRoZXJlIGlzIG5vIHBsYWNlIHRvIGdvIQorICAg
IGlmICghZW5jbG9zaW5nTm9kZSB8fCAhZW5jbG9zaW5nTm9kZS0+cGFyZW50Tm9kZSgpLT5oYXNF
ZGl0YWJsZVN0eWxlKCkpIC8vIFdlIGNhbid0IG91dGRlbnQgaWYgdGhlcmUgaXMgbm8gcGxhY2Ug
dG8gZ28hCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFVzZSBJbnNlcnRMaXN0Q29tbWFuZCB0
byByZW1vdmUgdGhlIHNlbGVjdGlvbiBmcm9tIHRoZSBsaXN0CkBAIC0xNTYsNyArMTU2LDcgQEAg
dm9pZCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6b3V0ZGVudFBhcmFncgogICAgICAgICAgICAgaWYg
KENvbnRhaW5lck5vZGUqIHNwbGl0UG9pbnRQYXJlbnQgPSBzcGxpdFBvaW50LT5wYXJlbnROb2Rl
KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc3BsaXRQb2ludFBhcmVudC0+aGFzVGFnTmFtZShi
bG9ja3F1b3RlVGFnKQogICAgICAgICAgICAgICAgICAgICAmJiAhc3BsaXRQb2ludC0+aGFzVGFn
TmFtZShibG9ja3F1b3RlVGFnKQotICAgICAgICAgICAgICAgICAgICAmJiBzcGxpdFBvaW50UGFy
ZW50LT5wYXJlbnROb2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpKSAvLyBXZSBjYW4ndCBvdXRk
ZW50IGlmIHRoZXJlIGlzIG5vIHBsYWNlIHRvIGdvIQorICAgICAgICAgICAgICAgICAgICAmJiBz
cGxpdFBvaW50UGFyZW50LT5wYXJlbnROb2RlKCktPmhhc0VkaXRhYmxlU3R5bGUoKSkgLy8gV2Ug
Y2FuJ3Qgb3V0ZGVudCBpZiB0aGVyZSBpcyBubyBwbGFjZSB0byBnbyEKICAgICAgICAgICAgICAg
ICAgICAgc3BsaXRFbGVtZW50KHRvRWxlbWVudChzcGxpdFBvaW50UGFyZW50KSwgc3BsaXRQb2lu
dCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcAkocmV2aXNpb24gMTYw
OTA0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIEluc2VydEludG9UZXh0
Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoCiAgICAgaWYgKHBhc3N3b3JkRWNob0VuYWJsZWQpCiAgICAg
ICAgIGRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAK
LSAgICBpZiAoIW1fbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgaWYgKCFtX25vZGUt
Pmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHBhc3N3b3Jk
RWNob0VuYWJsZWQpIHsKQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBJbnNlcnRJbnRvVGV4dE5vZGVD
b21tYW5kOjpkb0FwcGx5KAogCiB2b2lkIEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6OmRvVW5h
cHBseSgpCiB7Ci0gICAgaWYgKCFtX25vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgIGlm
ICghbV9ub2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgLy8gTmVlZCB0byBub3RpZnkgdGhpcyBiZWZvcmUgYWN0dWFsbHkgZGVsZXRpbmcgdGhl
IHRleHQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0Tm9kZUJlZm9yZUNvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0Tm9kZUJl
Zm9yZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxNjA5MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luc2VydE5vZGVCZWZvcmVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyAr
NDUsNyBAQCBJbnNlcnROb2RlQmVmb3JlQ29tbWFuZDo6SW5zZXJ0Tm9kZUJlZm9yCiAgICAgQVNT
RVJUKG1fcmVmQ2hpbGQpOwogICAgIEFTU0VSVChtX3JlZkNoaWxkLT5wYXJlbnROb2RlKCkpOwog
Ci0gICAgQVNTRVJUKG1fcmVmQ2hpbGQtPnBhcmVudE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxl
KCkgfHwgIW1fcmVmQ2hpbGQtPnBhcmVudE5vZGUoKS0+YXR0YWNoZWQoKSk7CisgICAgQVNTRVJU
KG1fcmVmQ2hpbGQtPnBhcmVudE5vZGUoKS0+aGFzRWRpdGFibGVTdHlsZSgpIHx8ICFtX3JlZkNo
aWxkLT5wYXJlbnROb2RlKCktPmF0dGFjaGVkKCkpOwogfQogCiB2b2lkIEluc2VydE5vZGVCZWZv
cmVDb21tYW5kOjpkb0FwcGx5KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWVyZ2VJ
ZGVudGljYWxFbGVtZW50c0NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuY3BwCShyZXZpc2lvbiAxNjA5
MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21t
YW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBNZXJnZUlkZW50aWNhbEVs
ZW1lbnRzQ29tbWFuZDo6TWVyZ2VJZGVuCiAKIHZvaWQgTWVyZ2VJZGVudGljYWxFbGVtZW50c0Nv
bW1hbmQ6OmRvQXBwbHkoKQogewotICAgIGlmIChtX2VsZW1lbnQxLT5uZXh0U2libGluZygpICE9
IG1fZWxlbWVudDIgfHwgIW1fZWxlbWVudDEtPnJlbmRlcmVySXNFZGl0YWJsZSgpIHx8ICFtX2Vs
ZW1lbnQyLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICBpZiAobV9lbGVtZW50MS0+bmV4dFNp
YmxpbmcoKSAhPSBtX2VsZW1lbnQyIHx8ICFtX2VsZW1lbnQxLT5oYXNFZGl0YWJsZVN0eWxlKCkg
fHwgIW1fZWxlbWVudDItPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbV9hdENoaWxkID0gbV9lbGVtZW50Mi0+Zmlyc3RDaGlsZCgpOwpAQCAtNjYsNyArNjYsNyBA
QCB2b2lkIE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpkb1VuCiAgICAgUmVmUHRyPE5v
ZGU+IGF0Q2hpbGQgPSBtX2F0Q2hpbGQucmVsZWFzZSgpOwogCiAgICAgQ29udGFpbmVyTm9kZSog
cGFyZW50ID0gbV9lbGVtZW50Mi0+cGFyZW50Tm9kZSgpOwotICAgIGlmICghcGFyZW50IHx8ICFw
YXJlbnQtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQt
Pmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVDb21t
YW5kLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1v
dmVOb2RlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBS
ZW1vdmVOb2RlQ29tbWFuZDo6ZG9VbmFwcGx5KCkKIHsKICAgICBSZWZQdHI8Q29udGFpbmVyTm9k
ZT4gcGFyZW50ID0gbV9wYXJlbnQucmVsZWFzZSgpOwogICAgIFJlZlB0cjxOb2RlPiByZWZDaGls
ZCA9IG1fcmVmQ2hpbGQucmVsZWFzZSgpOwotICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPnJl
bmRlcmVySXNFZGl0YWJsZSgpKQorICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmhhc0VkaXRh
YmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcGFyZW50LT5pbnNlcnRCZWZvcmUo
bV9ub2RlLmdldCgpLCByZWZDaGlsZC5nZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNw
cAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNyBAQCBSZXBs
YWNlbWVudEZyYWdtZW50OjpSZXBsYWNlbWVudEZyYWdtZW50CiAgICAgaWYgKCFlZGl0YWJsZVJv
b3QtPmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLndlYmtpdEJlZm9yZVRl
eHRJbnNlcnRlZEV2ZW50KSAmJgogICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZXNlIGNoZWNr
cyBvbmNlIHRleHRhcmVhcyBhbmQgdGV4dGZpZWxkcyBhY3R1YWxseSByZWdpc3RlciBhbiBldmVu
dCBoYW5kbGVyLgogICAgICAgICAhKHNoYWRvd0FuY2VzdG9yTm9kZSAmJiBzaGFkb3dBbmNlc3Rv
ck5vZGUtPnJlbmRlcmVyKCkgJiYgc2hhZG93QW5jZXN0b3JOb2RlLT5yZW5kZXJlcigpLT5pc1Rl
eHRDb250cm9sKCkpICYmCi0gICAgICAgIGVkaXRhYmxlUm9vdC0+cmVuZGVyZXJJc1JpY2hseUVk
aXRhYmxlKCkpIHsKKyAgICAgICAgZWRpdGFibGVSb290LT5oYXNSaWNobHlFZGl0YWJsZVN0eWxl
KCkpIHsKICAgICAgICAgcmVtb3ZlSW50ZXJjaGFuZ2VOb2RlcyhtX2ZyYWdtZW50LmdldCgpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE4MSw3ICsxODEsNyBAQCBSZXBsYWNlbWVudEZy
YWdtZW50OjpSZXBsYWNlbWVudEZyYWdtZW50CiAgICAgLy8gR2l2ZSB0aGUgcm9vdCBhIGNoYW5j
ZSB0byBjaGFuZ2UgdGhlIHRleHQuCiAgICAgUmVmUHRyPEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50
PiBldnQgPSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDo6Y3JlYXRlKHRleHQpOwogICAgIGVkaXRh
YmxlUm9vdC0+ZGlzcGF0Y2hFdmVudChldnQsIEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgIGlm
ICh0ZXh0ICE9IGV2dC0+dGV4dCgpIHx8ICFlZGl0YWJsZVJvb3QtPnJlbmRlcmVySXNSaWNobHlF
ZGl0YWJsZSgpKSB7CisgICAgaWYgKHRleHQgIT0gZXZ0LT50ZXh0KCkgfHwgIWVkaXRhYmxlUm9v
dC0+aGFzUmljaGx5RWRpdGFibGVTdHlsZSgpKSB7CiAgICAgICAgIHJlc3RvcmVBbmRSZW1vdmVU
ZXN0UmVuZGVyaW5nTm9kZXNUb0ZyYWdtZW50KGhvbGRlci5nZXQoKSk7CiAKICAgICAgICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwpAQCAtNTMz
LDcgKzUzMyw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHUKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGVsZW1lbnQtPnBh
cmVudE5vZGUoKS0+cmVuZGVyZXJJc1JpY2hseUVkaXRhYmxlKCkpCisgICAgICAgIGlmIChlbGVt
ZW50LT5wYXJlbnROb2RlKCktPmhhc1JpY2hseUVkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgICAg
IHJlbW92ZU5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgY29udGVudGVkaXRhYmxlQXR0cik7CiAKICAg
ICAgICAgLy8gV2ViS2l0IHVzZWQgdG8gbm90IGFkZCBkaXNwbGF5OiBpbmxpbmUgYW5kIGZsb2F0
OiBub25lIG9uIGNvcHkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVu
dENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRF
bGVtZW50Q29tbWFuZC5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0
LDcgQEAgdm9pZCBTcGxpdEVsZW1lbnRDb21tYW5kOjpleGVjdXRlQXBwbHkoKQogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwogICAgIAogICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG1fZWxl
bWVudDItPnBhcmVudE5vZGUoKTsKLSAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5yZW5kZXJl
cklzRWRpdGFibGUoKSkKKyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5oYXNFZGl0YWJsZVN0
eWxlKCkpCiAgICAgICAgIHJldHVybjsKICAgICBwYXJlbnQtPmluc2VydEJlZm9yZShtX2VsZW1l
bnQxLmdldCgpLCBtX2VsZW1lbnQyLmdldCgpLCBlYyk7CiAgICAgaWYgKGVjKQpAQCAtNzcsNyAr
NzcsNyBAQCB2b2lkIFNwbGl0RWxlbWVudENvbW1hbmQ6OmRvQXBwbHkoKQogCiB2b2lkIFNwbGl0
RWxlbWVudENvbW1hbmQ6OmRvVW5hcHBseSgpCiB7Ci0gICAgaWYgKCFtX2VsZW1lbnQxIHx8ICFt
X2VsZW1lbnQxLT5yZW5kZXJlcklzRWRpdGFibGUoKSB8fCAhbV9lbGVtZW50Mi0+cmVuZGVyZXJJ
c0VkaXRhYmxlKCkpCisgICAgaWYgKCFtX2VsZW1lbnQxIHx8ICFtX2VsZW1lbnQxLT5oYXNFZGl0
YWJsZVN0eWxlKCkgfHwgIW1fZWxlbWVudDItPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgVmVjdG9yPFJlZlB0cjxOb2RlPj4gY2hpbGRyZW47CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAkocmV2aXNp
b24gMTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgU3BsaXRUZXh0Tm9kZUNvbW1h
bmQ6OlNwbGl0VGV4dE5vZGVDb21tYQogdm9pZCBTcGxpdFRleHROb2RlQ29tbWFuZDo6ZG9BcHBs
eSgpCiB7CiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbV90ZXh0Mi0+cGFyZW50Tm9kZSgp
OwotICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAg
IGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgU3RyaW5nIHByZWZpeFRleHQgPSBtX3RleHQyLT5zdWJzdHJpbmdEYXRhKDAs
IG1fb2Zmc2V0LCBJR05PUkVfRVhDRVBUSU9OKTsKQEAgLTY3LDcgKzY3LDcgQEAgdm9pZCBTcGxp
dFRleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiAKIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6
OmRvVW5hcHBseSgpCiB7Ci0gICAgaWYgKCFtX3RleHQxIHx8ICFtX3RleHQxLT5yZW5kZXJlcklz
RWRpdGFibGUoKSkKKyAgICBpZiAoIW1fdGV4dDEgfHwgIW1fdGV4dDEtPmhhc0VkaXRhYmxlU3R5
bGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKCZtX3RleHQxLT5kb2N1bWVudCgp
ID09ICZkb2N1bWVudCgpKTsKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBTcGxpdFRleHROb2RlQ29t
bWFuZDo6ZG9SZWFwcGx5KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ29udGFpbmVyTm9kZSog
cGFyZW50ID0gbV90ZXh0Mi0+cGFyZW50Tm9kZSgpOwotICAgIGlmICghcGFyZW50IHx8ICFwYXJl
bnQtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmhh
c0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW5zZXJ0VGV4dDFBbmRU
cmltVGV4dDIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNv
bnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcAkocmV2aXNp
b24gMTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFp
bmluZ0VsZW1lbnRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCB2
b2lkIFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hCiAgICAgc3BsaXRUZXh0Tm9k
ZShtX3RleHQuZ2V0KCksIG1fb2Zmc2V0KTsKIAogICAgIEVsZW1lbnQqIHBhcmVudCA9IG1fdGV4
dC0+cGFyZW50RWxlbWVudCgpOwotICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPnBhcmVudEVs
ZW1lbnQoKSB8fCAhcGFyZW50LT5wYXJlbnRFbGVtZW50KCktPnJlbmRlcmVySXNFZGl0YWJsZSgp
KQorICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPnBhcmVudEVsZW1lbnQoKSB8fCAhcGFyZW50
LT5wYXJlbnRFbGVtZW50KCktPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgUmVuZGVyRWxlbWVudCogcGFyZW50UmVuZGVyZXIgPSBwYXJlbnQtPnJlbmRlcmVyKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCShyZXZp
c2lvbiAxNjA5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUzNiw3ICs1MzYsNyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9z
aXRpb246OmNhbm9uaWNhbFBvc2l0CiAKICAgICAvLyBUaGUgbmV3IHBvc2l0aW9uIG11c3QgYmUg
aW4gdGhlIHNhbWUgZWRpdGFibGUgZWxlbWVudC4gRW5mb3JjZSB0aGF0IGZpcnN0LgogICAgIC8v
IFVubGVzcyB0aGUgZGVzY2VudCBpcyBmcm9tIGEgbm9uLWVkaXRhYmxlIGh0bWwgZWxlbWVudCB0
byBhbiBlZGl0YWJsZSBib2R5LgotICAgIGlmIChub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoaHRt
bFRhZykgJiYgIW5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpICYmIG5vZGUtPmRvY3VtZW50KCku
Ym9keSgpICYmIG5vZGUtPmRvY3VtZW50KCkuYm9keSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSkK
KyAgICBpZiAobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKGh0bWxUYWcpICYmICFub2RlLT5oYXNF
ZGl0YWJsZVN0eWxlKCkgJiYgbm9kZS0+ZG9jdW1lbnQoKS5ib2R5KCkgJiYgbm9kZS0+ZG9jdW1l
bnQoKS5ib2R5KCktPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIG5leHQuaXNO
b3ROdWxsKCkgPyBuZXh0IDogcHJldjsKIAogICAgIE5vZGUqIGVkaXRpbmdSb290ID0gZWRpdGFi
bGVSb290Rm9yUG9zaXRpb24ocG9zaXRpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlU2VsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCShyZXZpc2lvbiAxNjA5MDQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjYs
NyArNjI2LDcgQEAgYm9vbCBWaXNpYmxlU2VsZWN0aW9uOjppc0NvbnRlbnRFZGl0YWJsZQogICAg
IHJldHVybiBpc0VkaXRhYmxlUG9zaXRpb24oc3RhcnQoKSk7CiB9CiAKLWJvb2wgVmlzaWJsZVNl
bGVjdGlvbjo6cmVuZGVyZXJJc0VkaXRhYmxlKCkgY29uc3QKK2Jvb2wgVmlzaWJsZVNlbGVjdGlv
bjo6aGFzRWRpdGFibGVTdHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGlzRWRpdGFibGVQb3Np
dGlvbihzdGFydCgpLCBDb250ZW50SXNFZGl0YWJsZSwgRG9Ob3RVcGRhdGVTdHlsZSk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaAkocmV2aXNpb24g
MTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgcHVibGljOgogICAgIAogICAgIEVsZW1lbnQq
IHJvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdDsKICAgICBib29sIGlzQ29udGVudEVkaXRhYmxl
KCkgY29uc3Q7Ci0gICAgYm9vbCByZW5kZXJlcklzRWRpdGFibGUoKSBjb25zdDsKKyAgICBib29s
IGhhc0VkaXRhYmxlU3R5bGUoKSBjb25zdDsKICAgICBib29sIGlzQ29udGVudFJpY2hseUVkaXRh
YmxlKCkgY29uc3Q7CiAgICAgLy8gUmV0dXJucyBhIHNoYWRvdyB0cmVlIG5vZGUgZm9yIGxlZ2Fj
eSBzaGFkb3cgdHJlZXMsIGEgY2hpbGQgb2YgdGhlCiAgICAgLy8gU2hhZG93Um9vdCBub2RlIGZv
ciBuZXcgc2hhZG93IHRyZWVzLCBvciAwIGZvciBub24tc2hhZG93IHRyZWVzLgpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OCwxMCArNDgsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5pY29kZTsKIAogc3RhdGlj
IE5vZGUqIHByZXZpb3VzTGVhZldpdGhTYW1lRWRpdGFiaWxpdHkoTm9kZSogbm9kZSwgRWRpdGFi
bGVUeXBlIGVkaXRhYmxlVHlwZSkKIHsKLSAgICBib29sIGVkaXRhYmxlID0gbm9kZS0+cmVuZGVy
ZXJJc0VkaXRhYmxlKGVkaXRhYmxlVHlwZSk7CisgICAgYm9vbCBlZGl0YWJsZSA9IG5vZGUtPmhh
c0VkaXRhYmxlU3R5bGUoZWRpdGFibGVUeXBlKTsKICAgICBub2RlID0gcHJldmlvdXNMZWFmTm9k
ZShub2RlKTsKICAgICB3aGlsZSAobm9kZSkgewotICAgICAgICBpZiAoZWRpdGFibGUgPT0gbm9k
ZS0+cmVuZGVyZXJJc0VkaXRhYmxlKGVkaXRhYmxlVHlwZSkpCisgICAgICAgIGlmIChlZGl0YWJs
ZSA9PSBub2RlLT5oYXNFZGl0YWJsZVN0eWxlKGVkaXRhYmxlVHlwZSkpCiAgICAgICAgICAgICBy
ZXR1cm4gbm9kZTsKICAgICAgICAgbm9kZSA9IHByZXZpb3VzTGVhZk5vZGUobm9kZSk7CiAgICAg
fQpAQCAtNjMsMTAgKzYzLDEwIEBAIHN0YXRpYyBOb2RlKiBuZXh0TGVhZldpdGhTYW1lRWRpdGFi
aWxpdHkKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIGJvb2wg
ZWRpdGFibGUgPSBub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoZWRpdGFibGVUeXBlKTsKKyAgICBi
b29sIGVkaXRhYmxlID0gbm9kZS0+aGFzRWRpdGFibGVTdHlsZShlZGl0YWJsZVR5cGUpOwogICAg
IG5vZGUgPSBuZXh0TGVhZk5vZGUobm9kZSk7CiAgICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAg
aWYgKGVkaXRhYmxlID09IG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZShlZGl0YWJsZVR5cGUpKQor
ICAgICAgICBpZiAoZWRpdGFibGUgPT0gbm9kZS0+aGFzRWRpdGFibGVTdHlsZShlZGl0YWJsZVR5
cGUpKQogICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgIG5vZGUgPSBuZXh0TGVhZk5v
ZGUobm9kZSk7CiAgICAgfQpAQCAtOTY0LDcgKzk2NCw3IEBAIFZpc2libGVQb3NpdGlvbiBwcmV2
aW91c0xpbmVQb3NpdGlvbihjb24KICAgICAvLyBDb3VsZCBub3QgZmluZCBhIHByZXZpb3VzIGxp
bmUuIFRoaXMgbWVhbnMgd2UgbXVzdCBhbHJlYWR5IGJlIG9uIHRoZSBmaXJzdCBsaW5lLgogICAg
IC8vIE1vdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb250ZW50IGluIHRoaXMgYmxvY2ssIHdoaWNo
IGVmZmVjdGl2ZWx5IG1vdmVzIHVzCiAgICAgLy8gdG8gdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIHdl
J3JlIG9uLgotICAgIEVsZW1lbnQqIHJvb3RFbGVtZW50ID0gbm9kZS0+cmVuZGVyZXJJc0VkaXRh
YmxlKGVkaXRhYmxlVHlwZSkgPyBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KGVkaXRhYmxlVHlw
ZSkgOiBub2RlLT5kb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpOworICAgIEVsZW1lbnQqIHJv
b3RFbGVtZW50ID0gbm9kZS0+aGFzRWRpdGFibGVTdHlsZShlZGl0YWJsZVR5cGUpID8gbm9kZS0+
cm9vdEVkaXRhYmxlRWxlbWVudChlZGl0YWJsZVR5cGUpIDogbm9kZS0+ZG9jdW1lbnQoKS5kb2N1
bWVudEVsZW1lbnQoKTsKICAgICBpZiAoIXJvb3RFbGVtZW50KQogICAgICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKCk7CiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9u
SW5Ob2RlKHJvb3RFbGVtZW50KSwgRE9XTlNUUkVBTSk7CkBAIC0xMDIyLDcgKzEwMjIsNyBAQCBW
aXNpYmxlUG9zaXRpb24gbmV4dExpbmVQb3NpdGlvbihjb25zdCBWCiAgICAgLy8gQ291bGQgbm90
IGZpbmQgYSBuZXh0IGxpbmUuIFRoaXMgbWVhbnMgd2UgbXVzdCBhbHJlYWR5IGJlIG9uIHRoZSBs
YXN0IGxpbmUuCiAgICAgLy8gTW92ZSB0byB0aGUgZW5kIG9mIHRoZSBjb250ZW50IGluIHRoaXMg
YmxvY2ssIHdoaWNoIGVmZmVjdGl2ZWx5IG1vdmVzIHVzCiAgICAgLy8gdG8gdGhlIGVuZCBvZiB0
aGUgbGluZSB3ZSdyZSBvbi4KLSAgICBFbGVtZW50KiByb290RWxlbWVudCA9IG5vZGUtPnJlbmRl
cmVySXNFZGl0YWJsZShlZGl0YWJsZVR5cGUpID8gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudChl
ZGl0YWJsZVR5cGUpIDogbm9kZS0+ZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBF
bGVtZW50KiByb290RWxlbWVudCA9IG5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoZWRpdGFibGVUeXBl
KSA/IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoZWRpdGFibGVUeXBlKSA6IG5vZGUtPmRvY3Vt
ZW50KCkuZG9jdW1lbnRFbGVtZW50KCk7CiAgICAgaWYgKCFyb290RWxlbWVudCkKICAgICAgICAg
cmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obGFz
dFBvc2l0aW9uSW5Ob2RlKHJvb3RFbGVtZW50KSwgRE9XTlNUUkVBTSk7CkBAIC0xMTAzLDEzICsx
MTAzLDEzIEBAIFZpc2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBoKGNvbnN0IFYKICAgICBO
b2RlKiBuID0gc3RhcnROb2RlOwogICAgIHdoaWxlIChuKSB7CiAjaWYgRU5BQkxFKFVTRVJTRUxF
Q1RfQUxMKQotICAgICAgICBpZiAoYm91bmRhcnlDcm9zc2luZ1J1bGUgPT0gQ2Fubm90Q3Jvc3NF
ZGl0aW5nQm91bmRhcnkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0QWxsKG4pICYmIG4t
PnJlbmRlcmVySXNFZGl0YWJsZSgpICE9IHN0YXJ0Tm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkp
CisgICAgICAgIGlmIChib3VuZGFyeUNyb3NzaW5nUnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdC
b3VuZGFyeSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3RBbGwobikgJiYgbi0+aGFzRWRp
dGFibGVTdHlsZSgpICE9IHN0YXJ0Tm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpKQogI2Vsc2UKLSAg
ICAgICAgaWYgKGJvdW5kYXJ5Q3Jvc3NpbmdSdWxlID09IENhbm5vdENyb3NzRWRpdGluZ0JvdW5k
YXJ5ICYmIG4tPnJlbmRlcmVySXNFZGl0YWJsZSgpICE9IHN0YXJ0Tm9kZS0+cmVuZGVyZXJJc0Vk
aXRhYmxlKCkpCisgICAgICAgIGlmIChib3VuZGFyeUNyb3NzaW5nUnVsZSA9PSBDYW5ub3RDcm9z
c0VkaXRpbmdCb3VuZGFyeSAmJiBuLT5oYXNFZGl0YWJsZVN0eWxlKCkgIT0gc3RhcnROb2RlLT5o
YXNFZGl0YWJsZVN0eWxlKCkpCiAjZW5kaWYKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBp
ZiAoYm91bmRhcnlDcm9zc2luZ1J1bGUgPT0gQ2FuU2tpcE92ZXJFZGl0aW5nQm91bmRhcnkpIHsK
LSAgICAgICAgICAgIHdoaWxlIChuICYmIG4tPnJlbmRlcmVySXNFZGl0YWJsZSgpICE9IHN0YXJ0
Tm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgICAgICAgICB3aGlsZSAobiAmJiBuLT5o
YXNFZGl0YWJsZVN0eWxlKCkgIT0gc3RhcnROb2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAg
ICAgICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzUG9zdE9yZGVyKG4sIHN0YXJ0
QmxvY2spOwogICAgICAgICAgICAgaWYgKCFuIHx8ICFuLT5pc0Rlc2NlbmRhbnRPZihoaWdoZXN0
Um9vdCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTgzLDEzICsxMTgzLDEzIEBAIFZp
c2libGVQb3NpdGlvbiBlbmRPZlBhcmFncmFwaChjb25zdCBWaXMKICAgICBOb2RlKiBuID0gc3Rh
cnROb2RlOwogICAgIHdoaWxlIChuKSB7CiAjaWYgRU5BQkxFKFVTRVJTRUxFQ1RfQUxMKQotICAg
ICAgICBpZiAoYm91bmRhcnlDcm9zc2luZ1J1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRh
cnkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0QWxsKG4pICYmIG4tPnJlbmRlcmVySXNF
ZGl0YWJsZSgpICE9IHN0YXJ0Tm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgICAgIGlm
IChib3VuZGFyeUNyb3NzaW5nUnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSAmJiAh
UG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3RBbGwobikgJiYgbi0+aGFzRWRpdGFibGVTdHlsZSgp
ICE9IHN0YXJ0Tm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpKQogI2Vsc2UKLSAgICAgICAgaWYgKGJv
dW5kYXJ5Q3Jvc3NpbmdSdWxlID09IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5ICYmIG4tPnJl
bmRlcmVySXNFZGl0YWJsZSgpICE9IHN0YXJ0Tm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisg
ICAgICAgIGlmIChib3VuZGFyeUNyb3NzaW5nUnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3Vu
ZGFyeSAmJiBuLT5oYXNFZGl0YWJsZVN0eWxlKCkgIT0gc3RhcnROb2RlLT5oYXNFZGl0YWJsZVN0
eWxlKCkpCiAjZW5kaWYKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAoYm91bmRhcnlD
cm9zc2luZ1J1bGUgPT0gQ2FuU2tpcE92ZXJFZGl0aW5nQm91bmRhcnkpIHsKLSAgICAgICAgICAg
IHdoaWxlIChuICYmIG4tPnJlbmRlcmVySXNFZGl0YWJsZSgpICE9IHN0YXJ0Tm9kZS0+cmVuZGVy
ZXJJc0VkaXRhYmxlKCkpCisgICAgICAgICAgICB3aGlsZSAobiAmJiBuLT5oYXNFZGl0YWJsZVN0
eWxlKCkgIT0gc3RhcnROb2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgICAgICAgICAg
biA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobiwgc3RheUluc2lkZUJsb2NrKTsKICAgICAgICAgICAg
IGlmICghbiB8fCAhbi0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9XcmFwQ29udGVudHNJbkR1
bW15U3BhbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
V3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9XcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgV3JhcENvbnRlbnRzSW5EdW1t
eVNwYW5Db21tYW5kOjpkb1UKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKIAotICAgIGlmICgh
bV9kdW1teVNwYW4gfHwgIW1fZWxlbWVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgaWYg
KCFtX2R1bW15U3BhbiB8fCAhbV9lbGVtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4+IGNoaWxkcmVuOwpAQCAtODAsNyAr
ODAsNyBAQCB2b2lkIFdyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZDo6ZG9SCiB7CiAgICAg
QVNTRVJUKG1fZWxlbWVudCk7CiAgICAgCi0gICAgaWYgKCFtX2R1bW15U3BhbiB8fCAhbV9lbGVt
ZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICBpZiAoIW1fZHVtbXlTcGFuIHx8ICFtX2Vs
ZW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZXhlY3V0
ZUFwcGx5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2
aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCBOb2RlKiBoaWdoZXN0RWRpdGFibGVS
b290KGNvbnN0IFBvc2l0aW9uCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAg
ICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAobm9kZS0+
cmVuZGVyZXJJc0VkaXRhYmxlKGVkaXRhYmxlVHlwZSkpCisgICAgICAgIGlmIChub2RlLT5oYXNF
ZGl0YWJsZVN0eWxlKGVkaXRhYmxlVHlwZSkpCiAgICAgICAgICAgICBoaWdoZXN0RWRpdGFibGVS
b290ID0gbm9kZTsKICAgICB9CiAKQEAgLTEyOSw3ICsxMjksNyBAQCBOb2RlKiBsb3dlc3RFZGl0
YWJsZUFuY2VzdG9yKE5vZGUqIG5vZGUpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIHdo
aWxlIChub2RlKSB7Ci0gICAgICAgIGlmIChub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAg
ICAgICAgaWYgKG5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgICAgIHJldHVybiBu
b2RlLT5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1l
KGJvZHlUYWcpKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTIsNyArMTUyLDcgQEAgYm9vbCBp
c0VkaXRhYmxlUG9zaXRpb24oY29uc3QgUG9zaXRpb24mIAogICAgIGlmIChub2RlLT5yZW5kZXJl
cigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzVGFibGUoKSkKICAgICAgICAgbm9kZSA9IG5vZGUt
PnBhcmVudE5vZGUoKTsKICAgICAKLSAgICByZXR1cm4gbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxl
KGVkaXRhYmxlVHlwZSk7CisgICAgcmV0dXJuIG5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoZWRpdGFi
bGVUeXBlKTsKIH0KIAogYm9vbCBpc0F0VW5zcGxpdHRhYmxlRWxlbWVudChjb25zdCBQb3NpdGlv
biYgcG9zKQpAQCAtMTcxLDcgKzE3MSw3IEBAIGJvb2wgaXNSaWNobHlFZGl0YWJsZVBvc2l0aW9u
KGNvbnN0IFBvc2kKICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJlcigp
LT5pc1RhYmxlKCkpCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAgCi0g
ICAgcmV0dXJuIG5vZGUtPnJlbmRlcmVySXNSaWNobHlFZGl0YWJsZShlZGl0YWJsZVR5cGUpOwor
ICAgIHJldHVybiBub2RlLT5oYXNSaWNobHlFZGl0YWJsZVN0eWxlKGVkaXRhYmxlVHlwZSk7CiB9
CiAKIEVsZW1lbnQqIGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwLCBF
ZGl0YWJsZVR5cGUgZWRpdGFibGVUeXBlKQpAQCAtMjQ5LDcgKzI0OSw3IEBAIFBvc2l0aW9uIHBy
ZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGEKIFZpc2libGVQb3NpdGlvbiBmaXJzdEVkaXRh
YmxlUG9zaXRpb25BZnRlclBvc2l0aW9uSW5Sb290KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwg
Tm9kZSogaGlnaGVzdFJvb3QpCiB7CiAgICAgLy8gcG9zaXRpb24gZmFsbHMgYmVmb3JlIGhpZ2hl
c3RSb290LgotICAgIGlmIChjb21wYXJlUG9zaXRpb25zKHBvc2l0aW9uLCBmaXJzdFBvc2l0aW9u
SW5Ob2RlKGhpZ2hlc3RSb290KSkgPT0gLTEgJiYgaGlnaGVzdFJvb3QtPnJlbmRlcmVySXNFZGl0
YWJsZSgpKQorICAgIGlmIChjb21wYXJlUG9zaXRpb25zKHBvc2l0aW9uLCBmaXJzdFBvc2l0aW9u
SW5Ob2RlKGhpZ2hlc3RSb290KSkgPT0gLTEgJiYgaGlnaGVzdFJvb3QtPmhhc0VkaXRhYmxlU3R5
bGUoKSkKICAgICAgICAgcmV0dXJuIGZpcnN0UG9zaXRpb25Jbk5vZGUoaGlnaGVzdFJvb3QpOwog
CiAgICAgUG9zaXRpb24gcCA9IHBvc2l0aW9uOwpAQCAtNTQ4LDcgKzU0OCw3IEBAIE5vZGUqIGVu
Y2xvc2luZ05vZGVXaXRoVGFnKGNvbnN0IFBvc2l0aW8KICAgICAgICAgCiAgICAgTm9kZSogcm9v
dCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QocCk7CiAgICAgZm9yIChOb2RlKiBuID0gcC5kZXByZWNh
dGVkTm9kZSgpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChyb290ICYm
ICFuLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICAgICAgaWYgKHJvb3QgJiYgIW4tPmhhc0Vk
aXRhYmxlU3R5bGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAobi0+aGFz
VGFnTmFtZSh0YWdOYW1lKSkKICAgICAgICAgICAgIHJldHVybiBuOwpAQCAtNTcwLDcgKzU3MCw3
IEBAIE5vZGUqIGVuY2xvc2luZ05vZGVPZlR5cGUoY29uc3QgUG9zaXRpb24KICAgICBmb3IgKE5v
ZGUqIG4gPSBwLmRlcHJlY2F0ZWROb2RlKCk7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKICAg
ICAgICAgLy8gRG9uJ3QgcmV0dXJuIGEgbm9uLWVkaXRhYmxlIG5vZGUgaWYgdGhlIGlucHV0IHBv
c2l0aW9uIHdhcyBlZGl0YWJsZSwgc2luY2UKICAgICAgICAgLy8gdGhlIGNhbGxlcnMgZnJvbSBl
ZGl0aW5nIHdpbGwgbm8gZG91YnQgd2FudCB0byBwZXJmb3JtIGVkaXRpbmcgaW5zaWRlIHRoZSBy
ZXR1cm5lZCBub2RlLgotICAgICAgICBpZiAocm9vdCAmJiAhbi0+cmVuZGVyZXJJc0VkaXRhYmxl
KCkpCisgICAgICAgIGlmIChyb290ICYmICFuLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKG5vZGVJc09mVHlwZShuKSkKICAgICAgICAgICAg
IHJldHVybiBuOwpAQCAtNTg2LDcgKzU4Niw3IEBAIE5vZGUqIGhpZ2hlc3RFbmNsb3NpbmdOb2Rl
T2ZUeXBlKGNvbnN0IFAKICAgICBOb2RlKiBoaWdoZXN0ID0gMDsKICAgICBOb2RlKiByb290ID0g
cnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSA/IGhpZ2hlc3RFZGl0YWJsZVJvb3Qo
cCkgOiAwOwogICAgIGZvciAoTm9kZSogbiA9IHAuY29udGFpbmVyTm9kZSgpOyBuICYmIG4gIT0g
c3RheVdpdGhpbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAocm9vdCAmJiAh
bi0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgICAgIGlmIChyb290ICYmICFuLT5oYXNFZGl0
YWJsZVN0eWxlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKG5vZGVJc09m
VHlwZShuKSkKICAgICAgICAgICAgIGhpZ2hlc3QgPSBuOwpAQCAtNzQzLDcgKzc0Myw3IEBAIGJv
b2wgY2FuTWVyZ2VMaXN0cyhFbGVtZW50KiBmaXJzdExpc3QsIEUKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgcmV0dXJuIGZpcnN0TGlzdC0+aGFzVGFnTmFtZShzZWNvbmRMaXN0LT50YWdR
TmFtZSgpKSAvLyBtYWtlIHN1cmUgdGhlIGxpc3QgdHlwZXMgbWF0Y2ggKG9sIHZzLiB1bCkKLSAg
ICAmJiBmaXJzdExpc3QtPnJlbmRlcmVySXNFZGl0YWJsZSgpICYmIHNlY29uZExpc3QtPnJlbmRl
cmVySXNFZGl0YWJsZSgpIC8vIGJvdGggbGlzdHMgYXJlIGVkaXRhYmxlCisgICAgJiYgZmlyc3RM
aXN0LT5oYXNFZGl0YWJsZVN0eWxlKCkgJiYgc2Vjb25kTGlzdC0+aGFzRWRpdGFibGVTdHlsZSgp
IC8vIGJvdGggbGlzdHMgYXJlIGVkaXRhYmxlCiAgICAgJiYgZmlyc3RMaXN0LT5yb290RWRpdGFi
bGVFbGVtZW50KCkgPT0gc2Vjb25kTGlzdC0+cm9vdEVkaXRhYmxlRWxlbWVudCgpIC8vIGRvbid0
IGNyb3NzIGVkaXRpbmcgYm91bmRhcmllcwogICAgICYmIGlzVmlzaWJseUFkamFjZW50KHBvc2l0
aW9uSW5QYXJlbnRBZnRlck5vZGUoZmlyc3RMaXN0KSwgcG9zaXRpb25JblBhcmVudEJlZm9yZU5v
ZGUoc2Vjb25kTGlzdCkpOwogICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBubyB2aXNpYmxlIGNv
bnRlbnQgYmV0d2VlbiB0aGlzIGxpIGFuZCB0aGUgcHJldmlvdXMgbGlzdApJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Niw3ICs4Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBwYXJzZVBvcnRGcm9tU3RyaW5nUG9z
aXQKIAogYm9vbCBIVE1MQW5jaG9yRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0CiB7Ci0g
ICAgaWYgKHJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgIGlmIChoYXNFZGl0YWJsZVN0eWxlKCkp
CiAgICAgICAgIHJldHVybiBIVE1MRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpOwogICAgIC8vIElm
IG5vdCBhIGxpbmsgd2Ugc2hvdWxkIHN0aWxsIGJlIGFibGUgdG8gZm9jdXMgdGhlIGVsZW1lbnQg
aWYgaXQgaGFzIHRhYkluZGV4LgogICAgIHJldHVybiBpc0xpbmsoKSB8fCBIVE1MRWxlbWVudDo6
c3VwcG9ydHNGb2N1cygpOwpAQCAtMTkxLDcgKzE5MSw3IEBAIHZvaWQgSFRNTEFuY2hvckVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmQKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIGlmIChyZW5kZXJlcklzRWRpdGFibGUoKSkgeworICAgICAgICBpZiAoaGFzRWRpdGFi
bGVTdHlsZSgpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0
YWJsZSBibG9jayB0aGF0IHRoZSBzZWxlY3Rpb24gd2FzIGluIChpZiBpdCB3YXMgaW4gb25lKSBq
dXN0IGJlZm9yZSB0aGUgbGluayB3YXMgY2xpY2tlZAogICAgICAgICAgICAgLy8gZm9yIHRoZSBM
aXZlV2hlbk5vdEZvY3VzZWQgZWRpdGFibGUgbGluayBiZWhhdmlvcgogICAgICAgICAgICAgaWYg
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT5p
c01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24o
KSAhPSBSaWdodEJ1dHRvbiAmJiBkb2N1bWVudCgpLmZyYW1lKCkpIHsKQEAgLTIxMSw3ICsyMTEs
NyBAQCB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kCiAKIHZvaWQgSFRN
TEFuY2hvckVsZW1lbnQ6OnNldEFjdGl2ZShib29sIGRvd24sIGJvb2wgcGF1c2UpCiB7Ci0gICAg
aWYgKHJlbmRlcmVySXNFZGl0YWJsZSgpKSB7CisgICAgaWYgKGhhc0VkaXRhYmxlU3R5bGUoKSkg
ewogICAgICAgICBFZGl0YWJsZUxpbmtCZWhhdmlvciBlZGl0YWJsZUxpbmtCZWhhdmlvciA9IEVk
aXRhYmxlTGlua0RlZmF1bHRCZWhhdmlvcjsKICAgICAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5n
cyA9IGRvY3VtZW50KCkuc2V0dGluZ3MoKSkKICAgICAgICAgICAgIGVkaXRhYmxlTGlua0JlaGF2
aW9yID0gc2V0dGluZ3MtPmVkaXRhYmxlTGlua0JlaGF2aW9yKCk7CkBAIC0yNzksNyArMjc5LDcg
QEAgYm9vbCBIVE1MQW5jaG9yRWxlbWVudDo6Y2FuU3RhcnRTZWxlY3RpbwogICAgIC8vIEZJWE1F
OiBXZSBwcm9iYWJseSB3YW50IHRoaXMgc2FtZSBiZWhhdmlvciBpbiBTVkdBRWxlbWVudCB0b28K
ICAgICBpZiAoIWlzTGluaygpKQogICAgICAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OmNhblN0YXJ0
U2VsZWN0aW9uKCk7Ci0gICAgcmV0dXJuIHJlbmRlcmVySXNFZGl0YWJsZSgpOworICAgIHJldHVy
biBoYXNFZGl0YWJsZVN0eWxlKCk7CiB9CiAKIGJvb2wgSFRNTEFuY2hvckVsZW1lbnQ6OmRyYWdn
YWJsZSgpIGNvbnN0CkBAIC01NjEsNyArNTYxLDcgQEAgSFRNTEFuY2hvckVsZW1lbnQ6OkV2ZW50
VHlwZSBIVE1MQW5jaG9yRQogCiBib29sIEhUTUxBbmNob3JFbGVtZW50Ojp0cmVhdExpbmtBc0xp
dmVGb3JFdmVudFR5cGUoRXZlbnRUeXBlIGV2ZW50VHlwZSkgY29uc3QKIHsKLSAgICBpZiAoIXJl
bmRlcmVySXNFZGl0YWJsZSgpKQorICAgIGlmICghaGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAogICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50KCkuc2V0
dGluZ3MoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5jcHAJKHJl
dmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDcgKzE4NSw3IEBAIGJvb2wgSFRNTEJvZHlFbGVtZW50
Ojppc1VSTEF0dHJpYnV0ZShjb24KIAogYm9vbCBIVE1MQm9keUVsZW1lbnQ6OnN1cHBvcnRzRm9j
dXMoKSBjb25zdAogewotICAgIHJldHVybiByZW5kZXJlcklzRWRpdGFibGUoKSB8fCBIVE1MRWxl
bWVudDo6c3VwcG9ydHNGb2N1cygpOworICAgIHJldHVybiBoYXNFZGl0YWJsZVN0eWxlKCkgfHwg
SFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKIH0KIAogc3RhdGljIGludCBhZGp1c3RGb3Ja
b29tKGludCB2YWx1ZSwgRnJhbWUmIGZyYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxl
bWVudC5jcHAJKHJldmlzaW9uIDE2MDkxNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjIsOSArNjYyLDcgQEAgYm9vbCBIVE1MRWxl
bWVudDo6aGFzQ3VzdG9tRm9jdXNMb2dpYygpIAogCiBib29sIEhUTUxFbGVtZW50OjpzdXBwb3J0
c0ZvY3VzKCkgY29uc3QKIHsKLSAgICBpZiAoIWRvY3VtZW50KCkudmlldygpLT5pc0luTGF5b3V0
KCkgJiYgIWRvY3VtZW50KCkudmlldygpLT5pc1BhaW50aW5nKCkpCi0gICAgICAgIGRvY3VtZW50
KCkudXBkYXRlU3R5bGVJZk5lZWRlZCgpOwotICAgIHJldHVybiBFbGVtZW50OjpzdXBwb3J0c0Zv
Y3VzKCkgfHwgKHJlbmRlcmVySXNFZGl0YWJsZSgpICYmIHBhcmVudE5vZGUoKSAmJiAhcGFyZW50
Tm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSk7CisgICAgcmV0dXJuIEVsZW1lbnQ6OnN1cHBv
cnRzRm9jdXMoKSB8fCAoaGFzRWRpdGFibGVTdHlsZSgpICYmIHBhcmVudE5vZGUoKSAmJiAhcGFy
ZW50Tm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkpOwogfQogCiBTdHJpbmcgSFRNTEVsZW1lbnQ6
OmNvbnRlbnRFZGl0YWJsZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdD
b250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250
cm9sbGVyLmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9EcmFn
Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNSw3ICs0MDUsNyBAQCBEcmFnT3Bl
cmF0aW9uIERyYWdDb250cm9sbGVyOjpvcGVyYXRpb25GCiAgICAgICAgICAgICBwbHVnaW5Eb2N1
bWVudEFjY2VwdHNEcmFncyA9IHBsdWdpblZpZXctPnNob3VsZEFsbG93TmF2aWdhdGlvbkZyb21E
cmFncygpOwogICAgIH0KIAotICAgIGlmIChkb2MgJiYgKG1fZGlkSW5pdGlhdGVEcmFnIHx8IChk
b2MtPmlzUGx1Z2luRG9jdW1lbnQoKSAmJiAhcGx1Z2luRG9jdW1lbnRBY2NlcHRzRHJhZ3MpIHx8
IGRvYy0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpKQorICAgIGlmIChkb2MgJiYgKG1fZGlkSW5pdGlh
dGVEcmFnIHx8IChkb2MtPmlzUGx1Z2luRG9jdW1lbnQoKSAmJiAhcGx1Z2luRG9jdW1lbnRBY2Nl
cHRzRHJhZ3MpIHx8IGRvYy0+aGFzRWRpdGFibGVTdHlsZSgpKSkKICAgICAgICAgcmV0dXJuIERy
YWdPcGVyYXRpb25Ob25lOwogICAgIHJldHVybiBkcmFnT3BlcmF0aW9uKGRyYWdEYXRhKTsKIH0K
QEAgLTU1Myw5ICs1NTMsOSBAQCBib29sIERyYWdDb250cm9sbGVyOjpjYW5Qcm9jZXNzRHJhZyhE
cmFnCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKHJlc3VsdC5pbm5lck5vblNoYXJl
ZE5vZGUoKS0+aXNQbHVnaW5FbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKCF0b0hUTUxQbHVnSW5F
bGVtZW50KHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSktPmNhblByb2Nlc3NEcmFnKCkgJiYg
IXJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAg
ICAgIGlmICghdG9IVE1MUGx1Z0luRWxlbWVudChyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkp
LT5jYW5Qcm9jZXNzRHJhZygpICYmICFyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmhhc0Vk
aXRhYmxlU3R5bGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgaWYg
KCFyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAg
IH0gZWxzZSBpZiAoIXJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+aGFzRWRpdGFibGVTdHls
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9kaWRJbml0aWF0ZURyYWcg
JiYgbV9kb2N1bWVudFVuZGVyTW91c2UgPT0gbV9kcmFnSW5pdGlhdG9yICYmIHJlc3VsdC5pc1Nl
bGVjdGVkKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lv
biAxNjA5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkzNyw3ICs5MzcsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91
c2VSZWxlYXNlRXZlCiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uOwogICAg
ICAgICBOb2RlKiBub2RlID0gZXZlbnQudGFyZ2V0Tm9kZSgpOwogICAgICAgICBib29sIGNhcmV0
QnJvd3NpbmcgPSBtX2ZyYW1lLnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAg
ICAgICAgaWYgKG5vZGUgJiYgbm9kZS0+cmVuZGVyZXIoKSAmJiAoY2FyZXRCcm93c2luZyB8fCBu
b2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkpIHsKKyAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS0+
cmVuZGVyZXIoKSAmJiAoY2FyZXRCcm93c2luZyB8fCBub2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkp
KSB7CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zID0gbm9kZS0+cmVuZGVyZXIoKS0+
cG9zaXRpb25Gb3JQb2ludChldmVudC5sb2NhbFBvaW50KCkpOwogICAgICAgICAgICAgbmV3U2Vs
ZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihwb3MpOwogICAgICAgICB9CkBAIC0xMTk0LDcgKzEx
OTQsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6dXNlSGFuZEN1cnNvcihOb2RlKiBuCiAgICAgaWYg
KCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBib29sIGVkaXRhYmxlID0gbm9k
ZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCk7CisgICAgYm9vbCBlZGl0YWJsZSA9IG5vZGUtPmhhc0Vk
aXRhYmxlU3R5bGUoKTsKICAgICBib29sIGVkaXRhYmxlTGlua0VuYWJsZWQgPSBmYWxzZTsKIAog
ICAgIC8vIElmIHRoZSBsaW5rIGlzIGVkaXRhYmxlLCB0aGVuIHdlIG5lZWQgdG8gY2hlY2sgdGhl
IHNldHRpbmdzIHRvIHNlZSB3aGV0aGVyIG9yIG5vdCB0aGUgbGluayBzaG91bGQgYmUgZm9sbG93
ZWQKQEAgLTEzNDMsNyArMTM0Myw3IEBAIE9wdGlvbmFsQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2Vs
ZWN0Q3Vyc28KIAogICAgIHN3aXRjaCAoc3R5bGUgPyBzdHlsZS0+Y3Vyc29yKCkgOiBDVVJTT1Jf
QVVUTykgewogICAgIGNhc2UgQ1VSU09SX0FVVE86IHsKLSAgICAgICAgYm9vbCBlZGl0YWJsZSA9
IG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpOworICAgICAgICBib29sIGVkaXRhYmxlID0gbm9k
ZS0+aGFzRWRpdGFibGVTdHlsZSgpOwogCiAgICAgICAgIGlmICh1c2VIYW5kQ3Vyc29yKG5vZGUs
IHJlc3VsdC5pc092ZXJMaW5rKCksIHNoaWZ0S2V5KSkKICAgICAgICAgICAgIHJldHVybiBoYW5k
Q3Vyc29yKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCShy
ZXZpc2lvbiAxNjA5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUzNiw3ICs1MzYsNyBAQCBFbGVtZW50KiBGb2N1c0NvbnRy
b2xsZXI6OnByZXZpb3VzRm9jdXNhCiBzdGF0aWMgYm9vbCByZWxpbnF1aXNoZXNFZGl0aW5nRm9j
dXMoTm9kZSAqbm9kZSkKIHsKICAgICBBU1NFUlQobm9kZSk7Ci0gICAgQVNTRVJUKG5vZGUtPnJl
bmRlcmVySXNFZGl0YWJsZSgpKTsKKyAgICBBU1NFUlQobm9kZS0+aGFzRWRpdGFibGVTdHlsZSgp
KTsKIAogICAgIE5vZGUqIHJvb3QgPSBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAg
RnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NzgsNyArNTc4LDcgQEAgYm9vbCBIaXRUZXN0UmVzdWx0Ojppc0NvbnRlbnRFZGl0YWJs
ZSgpIAogICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQobV9pbm5lck5vblNoYXJlZE5vZGUuZ2V0
KCkpKQogICAgICAgICByZXR1cm4gdG9IVE1MSW5wdXRFbGVtZW50KG1faW5uZXJOb25TaGFyZWRO
b2RlLmdldCgpKS0+aXNUZXh0RmllbGQoKTsKIAotICAgIHJldHVybiBtX2lubmVyTm9uU2hhcmVk
Tm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCk7CisgICAgcmV0dXJuIG1faW5uZXJOb25TaGFyZWRO
b2RlLT5oYXNFZGl0YWJsZVN0eWxlKCk7CiB9CiAKIGJvb2wgSGl0VGVzdFJlc3VsdDo6YWRkTm9k
ZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChOb2RlKiBub2RlLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRSZWN0JiByZWN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCShyZXZpc2lvbiAxNjA5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgzLDcgKzI0ODMsNyBAQCB2b2lk
IFJlbmRlckJsb2NrOjpwYWludENhcmV0KFBhaW50SW5mbyYgCiAgICAgYm9vbCBpc0NvbnRlbnRF
ZGl0YWJsZTsKICAgICBpZiAodHlwZSA9PSBDdXJzb3JDYXJldCkgewogICAgICAgICBjYXJldFBh
aW50ZXIgPSBmcmFtZSgpLnNlbGVjdGlvbigpLmNhcmV0UmVuZGVyZXIoKTsKLSAgICAgICAgaXND
b250ZW50RWRpdGFibGUgPSBmcmFtZSgpLnNlbGVjdGlvbigpLnJlbmRlcmVySXNFZGl0YWJsZSgp
OworICAgICAgICBpc0NvbnRlbnRFZGl0YWJsZSA9IGZyYW1lKCkuc2VsZWN0aW9uKCkuaGFzRWRp
dGFibGVTdHlsZSgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGNhcmV0UGFpbnRlciA9IGZyYW1l
KCkucGFnZSgpLT5kcmFnQ2FyZXRDb250cm9sbGVyKCkuY2FyZXRSZW5kZXJlcigpOwogICAgICAg
ICBpc0NvbnRlbnRFZGl0YWJsZSA9IGZyYW1lKCkucGFnZSgpLT5kcmFnQ2FyZXRDb250cm9sbGVy
KCkuaXNDb250ZW50RWRpdGFibGUoKTsKQEAgLTM1MzgsNyArMzUzOCw3IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc0VkaXRpbmdCb3VuZGFyeShSZW4KICAgICBBU1NFUlQoIWFuY2VzdG9yIHx8IGFu
Y2VzdG9yLT5ub25Qc2V1ZG9FbGVtZW50KCkpOwogICAgIEFTU0VSVChjaGlsZC5ub25Qc2V1ZG9O
b2RlKCkpOwogICAgIHJldHVybiAhYW5jZXN0b3IgfHwgIWFuY2VzdG9yLT5wYXJlbnQoKSB8fCAo
YW5jZXN0b3ItPmhhc0xheWVyKCkgJiYgYW5jZXN0b3ItPnBhcmVudCgpLT5pc1JlbmRlclZpZXco
KSkKLSAgICAgICAgfHwgYW5jZXN0b3ItPm5vblBzZXVkb0VsZW1lbnQoKS0+cmVuZGVyZXJJc0Vk
aXRhYmxlKCkgPT0gY2hpbGQubm9uUHNldWRvTm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKTsK
KyAgICAgICAgfHwgYW5jZXN0b3ItPm5vblBzZXVkb0VsZW1lbnQoKS0+aGFzRWRpdGFibGVTdHls
ZSgpID09IGNoaWxkLm5vblBzZXVkb05vZGUoKS0+aGFzRWRpdGFibGVTdHlsZSgpOwogfQogCiAv
LyBGSVhNRTogVGhpcyBmdW5jdGlvbiBzaG91bGQgZ28gb24gUmVuZGVyT2JqZWN0IGFzIGFuIGlu
c3RhbmNlIG1ldGhvZC4gVGhlbgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAJKHJldmlzaW9uIDE2MDkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MjEsNyArODIxLDcgQEAgYm9vbCBSZW5kZXJC
b3g6OmNhbkJlUHJvZ3JhbWF0aWNhbGx5U2NybwogICAgIGlmIChzY3JvbGxzT3ZlcmZsb3coKSAm
JiBoYXNTY3JvbGxhYmxlT3ZlcmZsb3cpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgcmV0
dXJuIGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPnJlbmRlcmVySXNFZGl0YWJsZSgpOworICAgIHJl
dHVybiBlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5oYXNFZGl0YWJsZVN0eWxlKCk7CiB9CiAKIGJv
b2wgUmVuZGVyQm94Ojp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAkocmV2aXNpb24gMTYwOTA0KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU2LDcgKzU2LDcgQEAgSFRNTEZvcm1Db250cm9sRWxlbWVudCYgUmVuZGVyQnV0dG9u
OjpmbwogCiBib29sIFJlbmRlckJ1dHRvbjo6Y2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gZm9ybUNvbnRyb2xFbGVtZW50KCkucmVuZGVyZXJJc0VkaXRhYmxlKCk7Cisg
ICAgcmV0dXJuIGZvcm1Db250cm9sRWxlbWVudCgpLmhhc0VkaXRhYmxlU3R5bGUoKTsKIH0KIAog
Ym9vbCBSZW5kZXJCdXR0b246Omhhc0xpbmVJZkVtcHR5KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAxNjA5MDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjM1NCwxNCArMjM1NCwxNCBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyT2JqZWN0OjpjcmVh
dGVWaXNpCiB7CiAgICAgLy8gSWYgdGhpcyBpcyBhIG5vbi1hbm9ueW1vdXMgcmVuZGVyZXIgaW4g
YW4gZWRpdGFibGUgYXJlYSwgdGhlbiBpdCdzIHNpbXBsZS4KICAgICBpZiAoTm9kZSogbm9kZSA9
IG5vblBzZXVkb05vZGUoKSkgewotICAgICAgICBpZiAoIW5vZGUtPnJlbmRlcmVySXNFZGl0YWJs
ZSgpKSB7CisgICAgICAgIGlmICghbm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpKSB7CiAgICAgICAg
ICAgICAvLyBJZiBpdCBjYW4gYmUgZm91bmQsIHdlIHByZWZlciBhIHZpc3VhbGx5IGVxdWl2YWxl
bnQgcG9zaXRpb24gdGhhdCBpcyBlZGl0YWJsZS4gCiAgICAgICAgICAgICBQb3NpdGlvbiBwb3Np
dGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2RlLCBvZmZzZXQpOwogICAgICAg
ICAgICAgUG9zaXRpb24gY2FuZGlkYXRlID0gcG9zaXRpb24uZG93bnN0cmVhbShDYW5Dcm9zc0Vk
aXRpbmdCb3VuZGFyeSk7Ci0gICAgICAgICAgICBpZiAoY2FuZGlkYXRlLmRlcHJlY2F0ZWROb2Rl
KCktPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5kZXBy
ZWNhdGVkTm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbihjYW5kaWRhdGUsIGFmZmluaXR5KTsKICAgICAgICAgICAgIGNhbmRp
ZGF0ZSA9IHBvc2l0aW9uLnVwc3RyZWFtKENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKLSAgICAg
ICAgICAgIGlmIChjYW5kaWRhdGUuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxl
KCkpCisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLmRlcHJlY2F0ZWROb2RlKCktPmhhc0VkaXRh
YmxlU3R5bGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNhbmRp
ZGF0ZSwgYWZmaW5pdHkpOwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiBFbGltaW5hdGUg
bGVnYWN5IGVkaXRpbmcgcG9zaXRpb25zCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dEZyYWdtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcAkocmV2aXNpb24gMTYwOTA0KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYwLDcgKzYwLDcgQEAgUmVuZGVyVGV4dEZyYWdtZW50Ojp+UmVuZGVyVGV4dEZyYWdtZW50
KAogCiBib29sIFJlbmRlclRleHRGcmFnbWVudDo6Y2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gdGV4dE5vZGUoKSAmJiB0ZXh0Tm9kZSgpLT5yZW5kZXJlcklzRWRpdGFi
bGUoKTsKKyAgICByZXR1cm4gdGV4dE5vZGUoKSAmJiB0ZXh0Tm9kZSgpLT5oYXNFZGl0YWJsZVN0
eWxlKCk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dEZyYWdtZW50OjpzdHlsZURpZENoYW5nZShTdHls
ZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gMTYwOTA0
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02OTMsNyArNjkzLDcgQEAgUmVuZGVyQmxvY2tGbG93JiBSb290SW5saW5lQm94
OjpibG9ja0ZsbwogCiBzdGF0aWMgYm9vbCBpc0VkaXRhYmxlTGVhZihJbmxpbmVCb3gqIGxlYWYp
CiB7Ci0gICAgcmV0dXJuIGxlYWYgJiYgbGVhZi0+cmVuZGVyZXIoKS5ub2RlKCkgJiYgbGVhZi0+
cmVuZGVyZXIoKS5ub2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpOworICAgIHJldHVybiBsZWFm
ICYmIGxlYWYtPnJlbmRlcmVyKCkubm9kZSgpICYmIGxlYWYtPnJlbmRlcmVyKCkubm9kZSgpLT5o
YXNFZGl0YWJsZVN0eWxlKCk7CiB9CiAKIElubGluZUJveCogUm9vdElubGluZUJveDo6Y2xvc2Vz
dExlYWZDaGlsZEZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGVudHMsIGJvb2wg
b25seUVkaXRhYmxlTGVhdmVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNjA5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODksNyArMTg5LDcgQEAgdm9pZCBTVkdBRWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihFdgogCiBib29sIFNWR0FFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29u
c3QKIHsKLSAgICBpZiAocmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgaWYgKGhhc0VkaXRhYmxl
U3R5bGUoKSkKICAgICAgICAgcmV0dXJuIFNWR0dyYXBoaWNzRWxlbWVudDo6c3VwcG9ydHNGb2N1
cygpOwogICAgIHJldHVybiB0cnVlOwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>