<?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>125731</bug_id>
          
          <creation_ts>2013-12-13 21:40:01 -0800</creation_ts>
          <short_desc>CTTE: Convert Element and RenderObject iterator usage to use range-based for loops</short_desc>
          <delta_ts>2013-12-14 10:02:32 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>959773</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-12-13 21:40:01 -0800</bug_when>
    <thetext>CTTE: Convert Element and RenderObject iterator usage to use range-based for loops</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959774</commentid>
    <comment_count>1</comment_count>
      <attachid>219234</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-12-13 21:42:32 -0800</bug_when>
    <thetext>Created attachment 219234
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959798</commentid>
    <comment_count>2</comment_count>
      <attachid>219234</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-12-13 23:22:03 -0800</bug_when>
    <thetext>Comment on attachment 219234
Patch

Boom!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959845</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-12-14 10:02:32 -0800</bug_when>
    <thetext>Committed r160598: &lt;http://trac.webkit.org/changeset/160598&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219234</attachid>
            <date>2013-12-13 21:42:32 -0800</date>
            <delta_ts>2013-12-13 23:22:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125731-20131213214231.patch</filename>
            <type>text/plain</type>
            <size>81282</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MDU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEzLTEyLTEzICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTogQ29udmVydCBFbGVtZW50IGFu
ZCBSZW5kZXJPYmplY3QgaXRlcmF0b3IgdXNhZ2UgdG8gdXNlIHJhbmdlLWJhc2VkIGZvciBsb29w
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1NzMx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGVyZm9y
bSBzdHJhaWdodCBmb3J3YXJkIGNvbnZlcnNpb25zLiBBIGZldyBzdHJhZ2dsZXJzIHRoYXQgZG8g
b2RkIHRoaW5ncyByZW1haW4uCisKIDIwMTMtMTItMTMgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hh
bUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0gUmVtb3ZlIHByZS1WUzIwMTMgc3VwcG9ydCBj
b2RlLgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9uIDE2MDU1MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDI2LDE1ICsxMDI2LDE0IEBAIEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0Ojptb3VzZUIKIAogICAgIC8vIGNoZWNrIGlmIG91ciBwYXJlbnQgaXMgYSBtb3VzZSBi
dXR0b24gbGlzdGVuZXIKICAgICAvLyBGSVhNRTogRG8gdGhlIGNvbnRpbnVhdGlvbiBzZWFyY2gg
bGlrZSBhbmNob3JFbGVtZW50IGRvZXMKLSAgICBhdXRvIGxpbmVhZ2UgPSBlbGVtZW50TGluZWFn
ZShub2RlLT5pc0VsZW1lbnROb2RlKCkgPyB0b0VsZW1lbnQobm9kZSkgOiBub2RlLT5wYXJlbnRF
bGVtZW50KCkpOwotICAgIGZvciAoYXV0byBlbGVtZW50ID0gbGluZWFnZS5iZWdpbigpLCBlbmQg
PSBsaW5lYWdlLmVuZCgpOyBlbGVtZW50ICE9IGVuZDsgKytlbGVtZW50KSB7CisgICAgZm9yIChh
dXRvJiBlbGVtZW50IDogZWxlbWVudExpbmVhZ2Uobm9kZS0+aXNFbGVtZW50Tm9kZSgpID8gdG9F
bGVtZW50KG5vZGUpIDogbm9kZS0+cGFyZW50RWxlbWVudCgpKSkgewogICAgICAgICAvLyBJZiB3
ZSd2ZSByZWFjaGVkIHRoZSBib2R5IGFuZCB0aGlzIGlzIG5vdCBhIGNvbnRyb2wgZWxlbWVudCwg
ZG8gbm90IGV4cG9zZSBwcmVzcyBhY3Rpb24gZm9yIHRoaXMgZWxlbWVudC4KICAgICAgICAgLy8g
SXQgY2FuIGNhdXNlIGZhbHNlIHBvc2l0aXZlcywgd2hlcmUgZXZlcnkgcGllY2Ugb2YgdGV4dCBp
cyBsYWJlbGVkIGFzIGFjY2VwdGluZyBwcmVzcyBhY3Rpb25zLiAKLSAgICAgICAgaWYgKGVsZW1l
bnQtPmhhc1RhZ05hbWUoYm9keVRhZykgJiYgaXNTdGF0aWNUZXh0KCkpCisgICAgICAgIGlmIChl
bGVtZW50Lmhhc1RhZ05hbWUoYm9keVRhZykgJiYgaXNTdGF0aWNUZXh0KCkpCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgCi0gICAgICAgIGlmIChlbGVtZW50LT5oYXNFdmVudExpc3RlbmVy
cyhldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgfHwgZWxlbWVudC0+aGFzRXZlbnRMaXN0ZW5lcnMo
ZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB8fCBlbGVtZW50LT5oYXNFdmVudExpc3RlbmVy
cyhldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KSkKLSAgICAgICAgICAgIHJldHVybiAmKmVsZW1l
bnQ7CisgICAgICAgIGlmIChlbGVtZW50Lmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5j
bGlja0V2ZW50KSB8fCBlbGVtZW50Lmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5tb3Vz
ZWRvd25FdmVudCkgfHwgZWxlbWVudC5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkubW91
c2V1cEV2ZW50KSkKKyAgICAgICAgICAgIHJldHVybiAmZWxlbWVudDsKICAgICB9CiAKICAgICBy
ZXR1cm4gMDsKQEAgLTExNjYsMjEgKzExNjUsMjEgQEAgc3RhdGljIEVsZW1lbnQqIHNpYmxpbmdX
aXRoQXJpYVJvbGUoU3RyaQogewogICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG5vZGUtPnBh
cmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgYXV0
byBjaGlsZHJlbiA9IGVsZW1lbnRDaGlsZHJlbigqcGFyZW50KTsKLSAgICBmb3IgKGF1dG8gc2li
bGluZyA9IGNoaWxkcmVuLmJlZ2luKCksIGVuZCA9IGNoaWxkcmVuLmVuZCgpOyBzaWJsaW5nICE9
IGVuZDsgKytzaWJsaW5nKSB7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2libGluZ0Fy
aWFSb2xlID0gc2libGluZy0+ZmFzdEdldEF0dHJpYnV0ZShyb2xlQXR0cik7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgZm9yIChhdXRvJiBzaWJsaW5nIDogZWxlbWVudENoaWxkcmVu
KCpwYXJlbnQpKSB7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2libGluZ0FyaWFSb2xl
ID0gc2libGluZy5mYXN0R2V0QXR0cmlidXRlKHJvbGVBdHRyKTsKICAgICAgICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKHNpYmxpbmdBcmlhUm9sZSwgcm9sZSkpCi0gICAgICAgICAgICByZXR1cm4g
JipzaWJsaW5nOworICAgICAgICAgICAgcmV0dXJuICZzaWJsaW5nOwogICAgIH0KIAotICAgIHJl
dHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBFbGVtZW50KiBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6bWVudUVsZW1lbnRGb3JNZW51QnV0dG9uKCkgY29uc3QKIHsKICAgICBpZiAo
YXJpYVJvbGVBdHRyaWJ1dGUoKSAhPSBNZW51QnV0dG9uUm9sZSkKLSAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIHNpYmxpbmdXaXRoQXJpYVJv
bGUoIm1lbnUiLCBub2RlKCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lv
biAxNjA1NTApCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzU0LDEzICsyNzU0LDEyIEBAIHZv
aWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkSW1hZ2UKICAgICBpZiAoIW1hcCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBhcmVhRGVzY2VuZGFudHMgPSBkZXNjZW5kYW50c09m
VHlwZTxIVE1MQXJlYUVsZW1lbnQ+KCptYXApOwotICAgIGZvciAoYXV0byBhcmVhID0gYXJlYURl
c2NlbmRhbnRzLmJlZ2luKCksIGVuZCA9IGFyZWFEZXNjZW5kYW50cy5lbmQoKTsgYXJlYSAhPSBl
bmQ7ICsrYXJlYSkgeworICAgIGZvciAoYXV0byYgYXJlYSA6IGRlc2NlbmRhbnRzT2ZUeXBlPEhU
TUxBcmVhRWxlbWVudD4oKm1hcCkpIHsKICAgICAgICAgLy8gYWRkIGFuIDxhcmVhPiBlbGVtZW50
IGZvciB0aGlzIGNoaWxkIGlmIGl0IGhhcyBhIGxpbmsKLSAgICAgICAgaWYgKCFhcmVhLT5pc0xp
bmsoKSkKKyAgICAgICAgaWYgKCFhcmVhLmlzTGluaygpKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIEFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsqIGFyZWFPYmplY3QgPSB0b0FjY2Vz
c2liaWxpdHlJbWFnZU1hcExpbmsoYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShJbWFnZU1h
cExpbmtSb2xlKSk7Ci0gICAgICAgIGFyZWFPYmplY3QtPnNldEhUTUxBcmVhRWxlbWVudCgmKmFy
ZWEpOworICAgICAgICBhcmVhT2JqZWN0LT5zZXRIVE1MQXJlYUVsZW1lbnQoJmFyZWEpOwogICAg
ICAgICBhcmVhT2JqZWN0LT5zZXRIVE1MTWFwRWxlbWVudChtYXApOwogICAgICAgICBhcmVhT2Jq
ZWN0LT5zZXRQYXJlbnQodGhpcyk7CiAgICAgICAgIGlmICghYXJlYU9iamVjdC0+YWNjZXNzaWJp
bGl0eUlzSWdub3JlZCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcAkocmV2aXNpb24gMTYwNTUwKQorKysgU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjQsOSArMTI0LDggQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VGFibGU6OmlzRGF0YVRh
YmxlKCkgYwogICAgICAgICByZXR1cm4gdHJ1ZTsgICAgCiAKICAgICAvLyBpZiB0aGVyZSdzIGEg
Y29sZ3JvdXAgb3IgY29sIGVsZW1lbnQsIGl0J3MgcHJvYmFibHkgYSBkYXRhIHRhYmxlLgotICAg
IGF1dG8gdGFibGVDaGlsZHJlbiA9IGVsZW1lbnRDaGlsZHJlbigqdGFibGVFbGVtZW50KTsKLSAg
ICBmb3IgKGF1dG8gY2hpbGQgPSB0YWJsZUNoaWxkcmVuLmJlZ2luKCksIGVuZCA9IHRhYmxlQ2hp
bGRyZW4uZW5kKCk7IGNoaWxkICE9IGVuZDsgKytjaGlsZCkgewotICAgICAgICBpZiAoY2hpbGQt
Pmhhc1RhZ05hbWUoY29sVGFnKSB8fCBjaGlsZC0+aGFzVGFnTmFtZShjb2xncm91cFRhZykpCisg
ICAgZm9yIChhdXRvJiBjaGlsZCA6IGVsZW1lbnRDaGlsZHJlbigqdGFibGVFbGVtZW50KSkgewor
ICAgICAgICBpZiAoY2hpbGQuaGFzVGFnTmFtZShjb2xUYWcpIHx8IGNoaWxkLmhhc1RhZ05hbWUo
Y29sZ3JvdXBUYWcpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmNwcAkocmV2aXNpb24gMTYwNTUwKQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
NCw5ICs5NCw3IEBAIE5vZGUqIENoaWxkTm9kZUxpc3Q6Om5hbWVkSXRlbShjb25zdCBBdG8KICAg
ICAgICAgaWYgKCFlbGVtZW50IHx8ICFtX3BhcmVudC5nZXQoKS50cmVlU2NvcGUoKS5jb250YWlu
c011bHRpcGxlRWxlbWVudHNXaXRoSWQobmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9Ci0gICAgYXV0byBjaGlsZHJlbiA9IGVsZW1lbnRDaGlsZHJlbihtX3BhcmVudC5n
ZXQoKSk7Ci0gICAgZm9yIChhdXRvIGl0ID0gY2hpbGRyZW4uYmVnaW4oKSwgZW5kID0gY2hpbGRy
ZW4uZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBhdXRvJiBlbGVtZW50ID0gKml0
OworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRDaGlsZHJlbihtX3BhcmVudC5nZXQo
KSkpIHsKICAgICAgICAgaWYgKGVsZW1lbnQuaGFzSUQoKSAmJiBlbGVtZW50LmlkRm9yU3R5bGVS
ZXNvbHV0aW9uKCkgPT0gbmFtZSkKICAgICAgICAgICAgIHJldHVybiBjb25zdF9jYXN0PEVsZW1l
bnQqPigmZWxlbWVudCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZp
c2lvbiAxNjA1NTApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NTYsMTMgKzY1NiwxMiBAQCB2b2lkIERvY3VtZW50OjpidWlsZEFjY2Vzc0tl
eU1hcChUcmVlU2NvCiB7CiAgICAgQVNTRVJUKHNjb3BlKTsKICAgICBDb250YWluZXJOb2RlKiBy
b290Tm9kZSA9IHNjb3BlLT5yb290Tm9kZSgpOwotICAgIGF1dG8gZGVzY2VuZGFudCA9IGVsZW1l
bnREZXNjZW5kYW50cygqcm9vdE5vZGUpOwotICAgIGZvciAoYXV0byBlbGVtZW50ID0gZGVzY2Vu
ZGFudC5iZWdpbigpLCBlbmQgPSBkZXNjZW5kYW50LmVuZCgpOyBlbGVtZW50ICE9IGVuZDsgKytl
bGVtZW50KSB7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWNjZXNzS2V5ID0gZWxlbWVu
dC0+ZmFzdEdldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRyKTsKKyAgICBmb3IgKGF1dG8mIGVsZW1l
bnQgOiBlbGVtZW50RGVzY2VuZGFudHMoKnJvb3ROb2RlKSkgeworICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGFjY2Vzc0tleSA9IGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShhY2Nlc3NrZXlB
dHRyKTsKICAgICAgICAgaWYgKCFhY2Nlc3NLZXkuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9l
bGVtZW50c0J5QWNjZXNzS2V5LnNldChhY2Nlc3NLZXkuaW1wbCgpLCAmKmVsZW1lbnQpOworICAg
ICAgICAgICAgbV9lbGVtZW50c0J5QWNjZXNzS2V5LnNldChhY2Nlc3NLZXkuaW1wbCgpLCAmZWxl
bWVudCk7CiAKLSAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBlbGVtZW50LT5zaGFkb3dS
b290KCkpCisgICAgICAgIGlmIChTaGFkb3dSb290KiByb290ID0gZWxlbWVudC5zaGFkb3dSb290
KCkpCiAgICAgICAgICAgICBidWlsZEFjY2Vzc0tleU1hcChyb290KTsKICAgICB9CiB9CkBAIC0y
NTc5LDkgKzI1NzgsOCBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVCYXNlVVJMKCkKICAgICBpZiAo
IWVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIob2xkQmFzZVVSTCwgbV9iYXNlVVJMKSkg
ewogICAgICAgICAvLyBCYXNlIFVSTCBjaGFuZ2UgY2hhbmdlcyBhbnkgcmVsYXRpdmUgdmlzaXRl
ZCBsaW5rcy4KICAgICAgICAgLy8gRklYTUU6IFRoZXJlIGFyZSBvdGhlciBVUkxzIGluIHRoZSB0
cmVlIHRoYXQgd291bGQgbmVlZCB0byBiZSByZS1ldmFsdWF0ZWQgb24gZHluYW1pYyBiYXNlIFVS
TCBjaGFuZ2UuIFN0eWxlIHNob3VsZCBiZSBpbnZhbGlkYXRlZCB0b28uCi0gICAgICAgIGF1dG8g
YW5jaG9yRGVzY2VuZGFudHMgPSBkZXNjZW5kYW50c09mVHlwZTxIVE1MQW5jaG9yRWxlbWVudD4o
KnRoaXMpOwotICAgICAgICBmb3IgKGF1dG8gYW5jaG9yID0gYW5jaG9yRGVzY2VuZGFudHMuYmVn
aW4oKSwgZW5kID0gYW5jaG9yRGVzY2VuZGFudHMuZW5kKCk7IGFuY2hvciAhPSBlbmQ7ICsrYW5j
aG9yKQotICAgICAgICAgICAgYW5jaG9yLT5pbnZhbGlkYXRlQ2FjaGVkVmlzaXRlZExpbmtIYXNo
KCk7CisgICAgICAgIGZvciAoYXV0byYgYW5jaG9yIDogZGVzY2VuZGFudHNPZlR5cGU8SFRNTEFu
Y2hvckVsZW1lbnQ+KCp0aGlzKSkKKyAgICAgICAgICAgIGFuY2hvci5pbnZhbGlkYXRlQ2FjaGVk
VmlzaXRlZExpbmtIYXNoKCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
U2VsZWN0b3JRdWVyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NlbGVj
dG9yUXVlcnkuY3BwCShyZXZpc2lvbiAxNjA1NTApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2Vs
ZWN0b3JRdWVyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSwxMCArMTY1LDkgQEAgc3RhdGlj
IGJvb2wgaXNTaW5nbGVUYWdOYW1lU2VsZWN0b3IoY29ucwogdGVtcGxhdGUgPHR5cGVuYW1lIFNl
bGVjdG9yUXVlcnlUcmFpdD4KIHN0YXRpYyBpbmxpbmUgdm9pZCBlbGVtZW50c0ZvckxvY2FsTmFt
ZShjb25zdCBDb250YWluZXJOb2RlJiByb290Tm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2Nh
bE5hbWUsIHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdDo6T3V0cHV0VHlwZSYgb3V0cHV0KQog
ewotICAgIGF1dG8gZGVzY2VuZGFudHMgPSBlbGVtZW50RGVzY2VuZGFudHMoY29uc3RfY2FzdDxD
b250YWluZXJOb2RlJj4ocm9vdE5vZGUpKTsKLSAgICBmb3IgKGF1dG8gZWxlbWVudCA9IGRlc2Nl
bmRhbnRzLmJlZ2luKCksIGVuZCA9IGRlc2NlbmRhbnRzLmVuZCgpOyBlbGVtZW50ICE9IGVuZDsg
KytlbGVtZW50KSB7Ci0gICAgICAgIGlmIChlbGVtZW50LT50YWdRTmFtZSgpLmxvY2FsTmFtZSgp
ID09IGxvY2FsTmFtZSkgewotICAgICAgICAgICAgU2VsZWN0b3JRdWVyeVRyYWl0OjphcHBlbmRP
dXRwdXRGb3JFbGVtZW50KG91dHB1dCwgJiplbGVtZW50KTsKKyAgICBmb3IgKGF1dG8mIGVsZW1l
bnQgOiBlbGVtZW50RGVzY2VuZGFudHMoY29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4ocm9vdE5v
ZGUpKSkgeworICAgICAgICBpZiAoZWxlbWVudC50YWdRTmFtZSgpLmxvY2FsTmFtZSgpID09IGxv
Y2FsTmFtZSkgeworICAgICAgICAgICAgU2VsZWN0b3JRdWVyeVRyYWl0OjphcHBlbmRPdXRwdXRG
b3JFbGVtZW50KG91dHB1dCwgJmVsZW1lbnQpOwogICAgICAgICAgICAgaWYgKFNlbGVjdG9yUXVl
cnlUcmFpdDo6c2hvdWxkT25seU1hdGNoRmlyc3RFbGVtZW50KQogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQpAQCAtMTc4LDkgKzE3Nyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBl
bGVtZW50c0ZvckxvY2FsTmFtZSgKIHRlbXBsYXRlIDx0eXBlbmFtZSBTZWxlY3RvclF1ZXJ5VHJh
aXQ+CiBzdGF0aWMgaW5saW5lIHZvaWQgYW55RWxlbWVudChjb25zdCBDb250YWluZXJOb2RlJiBy
b290Tm9kZSwgdHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0OjpPdXRwdXRUeXBlJiBvdXRwdXQp
CiB7Ci0gICAgYXV0byBkZXNjZW5kYW50cyA9IGVsZW1lbnREZXNjZW5kYW50cyhjb25zdF9jYXN0
PENvbnRhaW5lck5vZGUmPihyb290Tm9kZSkpOwotICAgIGZvciAoYXV0byBlbGVtZW50ID0gZGVz
Y2VuZGFudHMuYmVnaW4oKSwgZW5kID0gZGVzY2VuZGFudHMuZW5kKCk7IGVsZW1lbnQgIT0gZW5k
OyArK2VsZW1lbnQpIHsKLSAgICAgICAgU2VsZWN0b3JRdWVyeVRyYWl0OjphcHBlbmRPdXRwdXRG
b3JFbGVtZW50KG91dHB1dCwgJiplbGVtZW50KTsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBl
bGVtZW50RGVzY2VuZGFudHMoY29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4ocm9vdE5vZGUpKSkg
eworICAgICAgICBTZWxlY3RvclF1ZXJ5VHJhaXQ6OmFwcGVuZE91dHB1dEZvckVsZW1lbnQob3V0
cHV0LCAmZWxlbWVudCk7CiAgICAgICAgIGlmIChTZWxlY3RvclF1ZXJ5VHJhaXQ6OnNob3VsZE9u
bHlNYXRjaEZpcnN0RWxlbWVudCkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMDcs
MTAgKzIwNSw5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTZWxlY3RvckRhdGFMaXN0OjpleGUKICAg
ICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEZhbGxiYWNrOiBOYW1lc3BhY2VVUkkg
aXMgc2V0LCBzZWxlY3RvckxvY2FsTmFtZSBtYXkgYmUgc3RhckF0b20uCi0gICAgICAgIGF1dG8g
ZGVzY2VuZGFudHMgPSBlbGVtZW50RGVzY2VuZGFudHMoY29uc3RfY2FzdDxDb250YWluZXJOb2Rl
Jj4ocm9vdE5vZGUpKTsKLSAgICAgICAgZm9yIChhdXRvIGVsZW1lbnQgPSBkZXNjZW5kYW50cy5i
ZWdpbigpLCBlbmQgPSBkZXNjZW5kYW50cy5lbmQoKTsgZWxlbWVudCAhPSBlbmQ7ICsrZWxlbWVu
dCkgewotICAgICAgICAgICAgaWYgKGVsZW1lbnQtPm5hbWVzcGFjZVVSSSgpID09IHNlbGVjdG9y
TmFtZXNwYWNlVVJJICYmIChzZWxlY3RvckxvY2FsTmFtZSA9PSBzdGFyQXRvbSB8fCBlbGVtZW50
LT50YWdRTmFtZSgpLmxvY2FsTmFtZSgpID09IHNlbGVjdG9yTG9jYWxOYW1lKSkgewotICAgICAg
ICAgICAgICAgIFNlbGVjdG9yUXVlcnlUcmFpdDo6YXBwZW5kT3V0cHV0Rm9yRWxlbWVudChvdXRw
dXQsICYqZWxlbWVudCk7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnREZXNj
ZW5kYW50cyhjb25zdF9jYXN0PENvbnRhaW5lck5vZGUmPihyb290Tm9kZSkpKSB7CisgICAgICAg
ICAgICBpZiAoZWxlbWVudC5uYW1lc3BhY2VVUkkoKSA9PSBzZWxlY3Rvck5hbWVzcGFjZVVSSSAm
JiAoc2VsZWN0b3JMb2NhbE5hbWUgPT0gc3RhckF0b20gfHwgZWxlbWVudC50YWdRTmFtZSgpLmxv
Y2FsTmFtZSgpID09IHNlbGVjdG9yTG9jYWxOYW1lKSkgeworICAgICAgICAgICAgICAgIFNlbGVj
dG9yUXVlcnlUcmFpdDo6YXBwZW5kT3V0cHV0Rm9yRWxlbWVudChvdXRwdXQsICZlbGVtZW50KTsK
ICAgICAgICAgICAgICAgICBpZiAoU2VsZWN0b3JRdWVyeVRyYWl0OjpzaG91bGRPbmx5TWF0Y2hG
aXJzdEVsZW1lbnQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
QEAgLTIzMCwxMCArMjI3LDkgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNlbGVjdG9yRGF0YUxpc3Q6
OmV4ZQogICAgIEFTU0VSVChpc1NpbmdsZUNsYXNzTmFtZVNlbGVjdG9yKCpzZWxlY3RvckRhdGEu
c2VsZWN0b3IpKTsKIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lID0gc2VsZWN0
b3JEYXRhLnNlbGVjdG9yLT52YWx1ZSgpOwotICAgIGF1dG8gZGVzY2VuZGFudHMgPSBlbGVtZW50
RGVzY2VuZGFudHMoY29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4ocm9vdE5vZGUpKTsKLSAgICBm
b3IgKGF1dG8gZWxlbWVudCA9IGRlc2NlbmRhbnRzLmJlZ2luKCksIGVuZCA9IGRlc2NlbmRhbnRz
LmVuZCgpOyBlbGVtZW50ICE9IGVuZDsgKytlbGVtZW50KSB7Ci0gICAgICAgIGlmIChlbGVtZW50
LT5oYXNDbGFzcygpICYmIGVsZW1lbnQtPmNsYXNzTmFtZXMoKS5jb250YWlucyhjbGFzc05hbWUp
KSB7Ci0gICAgICAgICAgICBTZWxlY3RvclF1ZXJ5VHJhaXQ6OmFwcGVuZE91dHB1dEZvckVsZW1l
bnQob3V0cHV0LCAmKmVsZW1lbnQpOworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRE
ZXNjZW5kYW50cyhjb25zdF9jYXN0PENvbnRhaW5lck5vZGUmPihyb290Tm9kZSkpKSB7CisgICAg
ICAgIGlmIChlbGVtZW50Lmhhc0NsYXNzKCkgJiYgZWxlbWVudC5jbGFzc05hbWVzKCkuY29udGFp
bnMoY2xhc3NOYW1lKSkgeworICAgICAgICAgICAgU2VsZWN0b3JRdWVyeVRyYWl0OjphcHBlbmRP
dXRwdXRGb3JFbGVtZW50KG91dHB1dCwgJmVsZW1lbnQpOwogICAgICAgICAgICAgaWYgKFNlbGVj
dG9yUXVlcnlUcmFpdDo6c2hvdWxkT25seU1hdGNoRmlyc3RFbGVtZW50KQogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjQ1LDEwICsyNDEsOSBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgU2VsZWN0b3JEYXRhTGlzdDo6ZXhlCiB7CiAgICAgQVNTRVJUKG1fc2VsZWN0b3JzLnNp
emUoKSA9PSAxKTsKIAotICAgIGF1dG8gZGVzY2VuZGFudHMgPSBlbGVtZW50RGVzY2VuZGFudHMo
Y29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4ocm9vdE5vZGUpKTsKLSAgICBmb3IgKGF1dG8gZWxl
bWVudCA9IGRlc2NlbmRhbnRzLmJlZ2luKCksIGVuZCA9IGRlc2NlbmRhbnRzLmVuZCgpOyBlbGVt
ZW50ICE9IGVuZDsgKytlbGVtZW50KSB7Ci0gICAgICAgIGlmIChzZWxlY3Rvck1hdGNoZXMoc2Vs
ZWN0b3JEYXRhLCAqZWxlbWVudCwgcm9vdE5vZGUpKSB7Ci0gICAgICAgICAgICBTZWxlY3RvclF1
ZXJ5VHJhaXQ6OmFwcGVuZE91dHB1dEZvckVsZW1lbnQob3V0cHV0LCAmKmVsZW1lbnQpOworICAg
IGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnREZXNjZW5kYW50cyhjb25zdF9jYXN0PENvbnRh
aW5lck5vZGUmPihyb290Tm9kZSkpKSB7CisgICAgICAgIGlmIChzZWxlY3Rvck1hdGNoZXMoc2Vs
ZWN0b3JEYXRhLCBlbGVtZW50LCByb290Tm9kZSkpIHsKKyAgICAgICAgICAgIFNlbGVjdG9yUXVl
cnlUcmFpdDo6YXBwZW5kT3V0cHV0Rm9yRWxlbWVudChvdXRwdXQsICZlbGVtZW50KTsKICAgICAg
ICAgICAgIGlmIChTZWxlY3RvclF1ZXJ5VHJhaXQ6OnNob3VsZE9ubHlNYXRjaEZpcnN0RWxlbWVu
dCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI1OSwxMSArMjU0LDEw
IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBTZWxlY3RvclF1ZXJ5VHJhaXQ+CiBBTFdBWVNfSU5MSU5F
IHZvaWQgU2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZVNpbmdsZU11bHRpU2VsZWN0b3JEYXRhKGNv
bnN0IENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCB0eXBlbmFtZSBTZWxlY3RvclF1ZXJ5VHJhaXQ6
Ok91dHB1dFR5cGUmIG91dHB1dCkgY29uc3QKIHsKICAgICB1bnNpZ25lZCBzZWxlY3RvckNvdW50
ID0gbV9zZWxlY3RvcnMuc2l6ZSgpOwotICAgIGF1dG8gZGVzY2VuZGFudHMgPSBlbGVtZW50RGVz
Y2VuZGFudHMoY29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4ocm9vdE5vZGUpKTsKLSAgICBmb3Ig
KGF1dG8gZWxlbWVudCA9IGRlc2NlbmRhbnRzLmJlZ2luKCksIGVuZCA9IGRlc2NlbmRhbnRzLmVu
ZCgpOyBlbGVtZW50ICE9IGVuZDsgKytlbGVtZW50KSB7CisgICAgZm9yIChhdXRvJiBlbGVtZW50
IDogZWxlbWVudERlc2NlbmRhbnRzKGNvbnN0X2Nhc3Q8Q29udGFpbmVyTm9kZSY+KHJvb3ROb2Rl
KSkpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlbGVjdG9yQ291bnQ7ICsr
aSkgewotICAgICAgICAgICAgaWYgKHNlbGVjdG9yTWF0Y2hlcyhtX3NlbGVjdG9yc1tpXSwgKmVs
ZW1lbnQsIHJvb3ROb2RlKSkgewotICAgICAgICAgICAgICAgIFNlbGVjdG9yUXVlcnlUcmFpdDo6
YXBwZW5kT3V0cHV0Rm9yRWxlbWVudChvdXRwdXQsICYqZWxlbWVudCk7CisgICAgICAgICAgICBp
ZiAoc2VsZWN0b3JNYXRjaGVzKG1fc2VsZWN0b3JzW2ldLCBlbGVtZW50LCByb290Tm9kZSkpIHsK
KyAgICAgICAgICAgICAgICBTZWxlY3RvclF1ZXJ5VHJhaXQ6OmFwcGVuZE91dHB1dEZvckVsZW1l
bnQob3V0cHV0LCAmZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKFNlbGVjdG9yUXVlcnlU
cmFpdDo6c2hvdWxkT25seU1hdGNoRmlyc3RFbGVtZW50KQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
VHJlZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3Bl
LmNwcAkocmV2aXNpb24gMTYwNTUwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NCwxMSArMjk0LDEwIEBAIEhUTUxMYWJlbEVsZW1lbnQq
IFRyZWVTY29wZTo6bGFiZWxFbGVtZW4KICAgICAgICAgLy8gUG9wdWxhdGUgdGhlIG1hcCBvbiBm
aXJzdCBhY2Nlc3MuCiAgICAgICAgIG1fbGFiZWxzQnlGb3JBdHRyaWJ1dGUgPSBhZG9wdFB0cihu
ZXcgRG9jdW1lbnRPcmRlcmVkTWFwKTsKIAotICAgICAgICBhdXRvIGxhYmVsRGVzY2VuZGFudHMg
PSBkZXNjZW5kYW50c09mVHlwZTxIVE1MTGFiZWxFbGVtZW50Pigqcm9vdE5vZGUoKSk7Ci0gICAg
ICAgIGZvciAoYXV0byBsYWJlbCA9IGxhYmVsRGVzY2VuZGFudHMuYmVnaW4oKSwgZW5kID0gbGFi
ZWxEZXNjZW5kYW50cy5lbmQoKTsgbGFiZWwgIT0gZW5kOyArK2xhYmVsKSB7Ci0gICAgICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGZvclZhbHVlID0gbGFiZWwtPmZhc3RHZXRBdHRyaWJ1dGUo
Zm9yQXR0cik7CisgICAgICAgIGZvciAoYXV0byYgbGFiZWwgOiBkZXNjZW5kYW50c09mVHlwZTxI
VE1MTGFiZWxFbGVtZW50Pigqcm9vdE5vZGUoKSkpIHsKKyAgICAgICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgZm9yVmFsdWUgPSBsYWJlbC5mYXN0R2V0QXR0cmlidXRlKGZvckF0dHIpOwogICAg
ICAgICAgICAgaWYgKCFmb3JWYWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgYWRkTGFi
ZWwoKmZvclZhbHVlLmltcGwoKSwgKmxhYmVsKTsKKyAgICAgICAgICAgICAgICBhZGRMYWJlbCgq
Zm9yVmFsdWUuaW1wbCgpLCBsYWJlbCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMzNiwxNiAr
MzM1LDE1IEBAIEVsZW1lbnQqIFRyZWVTY29wZTo6ZmluZEFuY2hvcihjb25zdCBTdHIKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBnZXRFbGVtZW50
QnlJZChuYW1lKSkKICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgYXV0byBhbmNob3JEZXNj
ZW5kYW50cyA9IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxBbmNob3JFbGVtZW50Pigqcm9vdE5vZGUo
KSk7Ci0gICAgZm9yIChhdXRvIGFuY2hvciA9IGFuY2hvckRlc2NlbmRhbnRzLmJlZ2luKCksIGVu
ZCA9IGFuY2hvckRlc2NlbmRhbnRzLmVuZCgpOyBhbmNob3IgIT0gZW5kOyArK2FuY2hvcikgewor
ICAgIGZvciAoYXV0byYgYW5jaG9yIDogZGVzY2VuZGFudHNPZlR5cGU8SFRNTEFuY2hvckVsZW1l
bnQ+KCpyb290Tm9kZSgpKSkgewogICAgICAgICBpZiAocm9vdE5vZGUoKS0+ZG9jdW1lbnQoKS5p
blF1aXJrc01vZGUoKSkgewogICAgICAgICAgICAgLy8gUXVpcmtzIG1vZGUsIGNhc2UgaW5zZW5z
aXRpdmUgY29tcGFyaXNvbiBvZiBuYW1lcy4KLSAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShhbmNob3ItPm5hbWUoKSwgbmFtZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuICYqYW5j
aG9yOworICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGFuY2hvci5uYW1lKCksIG5h
bWUpKQorICAgICAgICAgICAgICAgIHJldHVybiAmYW5jaG9yOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgLy8gU3RyaWN0IG1vZGUsIG5hbWVzIG5lZWQgdG8gbWF0Y2ggZXhhY3RseS4K
LSAgICAgICAgICAgIGlmIChhbmNob3ItPm5hbWUoKSA9PSBuYW1lKQotICAgICAgICAgICAgICAg
IHJldHVybiAmKmFuY2hvcjsKKyAgICAgICAgICAgIGlmIChhbmNob3IubmFtZSgpID09IG5hbWUp
CisgICAgICAgICAgICAgICAgcmV0dXJuICZhbmNob3I7CiAgICAgICAgIH0KICAgICB9CiAgICAg
cmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcAkocmV2aXNpb24gMTYwNTUwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzOSwxMCArNDM5LDkg
QEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6Y2xlYW51cFVuc3R5bGVkQQogICAgIC8vIGFsbCB0
aGUgY2hpbGRyZW4gb2YgdGhlIGR1bW15J3MgcGFyZW50CiAKICAgICBWZWN0b3I8RWxlbWVudCo+
IHRvUmVtb3ZlOwotICAgIGF1dG8gY2hpbGRyZW4gPSBlbGVtZW50Q2hpbGRyZW4oKmR1bW15U3Bh
bkFuY2VzdG9yKTsKLSAgICBmb3IgKGF1dG8gY2hpbGQgPSBjaGlsZHJlbi5iZWdpbigpLCBlbmQg
PSBjaGlsZHJlbi5lbmQoKTsgY2hpbGQgIT0gZW5kOyArK2NoaWxkKSB7Ci0gICAgICAgIGlmIChp
c1NwYW5XaXRob3V0QXR0cmlidXRlc09yVW5zdHlsZWRTdHlsZVNwYW4oJipjaGlsZCkpCi0gICAg
ICAgICAgICB0b1JlbW92ZS5hcHBlbmQoJipjaGlsZCk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6
IGVsZW1lbnRDaGlsZHJlbigqZHVtbXlTcGFuQW5jZXN0b3IpKSB7CisgICAgICAgIGlmIChpc1Nw
YW5XaXRob3V0QXR0cmlidXRlc09yVW5zdHlsZWRTdHlsZVNwYW4oJmNoaWxkKSkKKyAgICAgICAg
ICAgIHRvUmVtb3ZlLmFwcGVuZCgmY2hpbGQpOwogICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdG9SZW1vdmUuc2l6ZSgpOyArK2kpCiAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2
aW5nQ2hpbGRyZW4odG9SZW1vdmVbaV0pOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNw
cAkocmV2aXNpb24gMTYwNTUwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05OSwxNSArOTksMTQgQEAgc3RhdGljIHZvaWQgY29tcGxldGVV
UkxzKERvY3VtZW50RnJhZ21lbgogCiAgICAgVVJMIHBhcnNlZEJhc2VVUkwoUGFyc2VkVVJMU3Ry
aW5nLCBiYXNlVVJMKTsKIAotICAgIGF1dG8gZGVzY2VuZGFudHMgPSBlbGVtZW50RGVzY2VuZGFu
dHMoKmZyYWdtZW50KTsKLSAgICBmb3IgKGF1dG8gZWxlbWVudCA9IGRlc2NlbmRhbnRzLmJlZ2lu
KCksIGVuZCA9IGRlc2NlbmRhbnRzLmVuZCgpOyBlbGVtZW50ICE9IGVuZDsgKytlbGVtZW50KSB7
Ci0gICAgICAgIGlmICghZWxlbWVudC0+aGFzQXR0cmlidXRlcygpKQorICAgIGZvciAoYXV0byYg
ZWxlbWVudCA6IGVsZW1lbnREZXNjZW5kYW50cygqZnJhZ21lbnQpKSB7CisgICAgICAgIGlmICgh
ZWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
dW5zaWduZWQgbGVuZ3RoID0gZWxlbWVudC0+YXR0cmlidXRlQ291bnQoKTsKKyAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gZWxlbWVudC5hdHRyaWJ1dGVDb3VudCgpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGNvbnN0IEF0dHJp
YnV0ZSYgYXR0cmlidXRlID0gZWxlbWVudC0+YXR0cmlidXRlQXQoaSk7Ci0gICAgICAgICAgICBp
ZiAoZWxlbWVudC0+aXNVUkxBdHRyaWJ1dGUoYXR0cmlidXRlKSAmJiAhYXR0cmlidXRlLnZhbHVl
KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKEF0dHJpYnV0ZUNo
YW5nZSgmKmVsZW1lbnQsIGF0dHJpYnV0ZS5uYW1lKCksIFVSTChwYXJzZWRCYXNlVVJMLCBhdHRy
aWJ1dGUudmFsdWUoKSkuc3RyaW5nKCkpKTsKKyAgICAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSYg
YXR0cmlidXRlID0gZWxlbWVudC5hdHRyaWJ1dGVBdChpKTsKKyAgICAgICAgICAgIGlmIChlbGVt
ZW50LmlzVVJMQXR0cmlidXRlKGF0dHJpYnV0ZSkgJiYgIWF0dHJpYnV0ZS52YWx1ZSgpLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChBdHRyaWJ1dGVDaGFuZ2UoJmVs
ZW1lbnQsIGF0dHJpYnV0ZS5uYW1lKCksIFVSTChwYXJzZWRCYXNlVVJMLCBhdHRyaWJ1dGUudmFs
dWUoKSkuc3RyaW5nKCkpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtODkyLDkgKzg5MSw3IEBA
IFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ20KIHN0YXRpYyBWZWN0b3I8
UmVmPEhUTUxFbGVtZW50Pj4gY29sbGVjdEVsZW1lbnRzVG9SZW1vdmVGcm9tRnJhZ21lbnQoQ29u
dGFpbmVyTm9kZSYgY29udGFpbmVyKQogewogICAgIFZlY3RvcjxSZWY8SFRNTEVsZW1lbnQ+PiB0
b1JlbW92ZTsKLSAgICBhdXRvIGNoaWxkcmVuID0gY2hpbGRyZW5PZlR5cGU8SFRNTEVsZW1lbnQ+
KGNvbnRhaW5lcik7Ci0gICAgZm9yIChhdXRvIGl0ID0gY2hpbGRyZW4uYmVnaW4oKSwgZW5kID0g
Y2hpbGRyZW4uZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBIVE1MRWxlbWVudCYg
ZWxlbWVudCA9ICppdDsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxI
VE1MRWxlbWVudD4oY29udGFpbmVyKSkgewogICAgICAgICBpZiAoaXNIVE1MSHRtbEVsZW1lbnQo
ZWxlbWVudCkpIHsKICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChlbGVtZW50KTsKICAgICAg
ICAgICAgIGNvbGxlY3RFbGVtZW50c1RvUmVtb3ZlRnJvbUZyYWdtZW50KGVsZW1lbnQpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2
MDU1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDgsMTMgKzE0OCwxMiBAQCB2b2lkIEhUTUxBcHBsZXRFbGVtZW50Ojp1
cGRhdGVXaWRnZXQoUGx1CiAgICAgICAgIHBhcmFtVmFsdWVzLmFwcGVuZChtYXlTY3JpcHQuc3Ry
aW5nKCkpOwogICAgIH0KIAotICAgIGF1dG8gcGFyYW1DaGlsZHJlbiA9IGNoaWxkcmVuT2ZUeXBl
PEhUTUxQYXJhbUVsZW1lbnQ+KCp0aGlzKTsKLSAgICBmb3IgKGF1dG8gcGFyYW0gPSBwYXJhbUNo
aWxkcmVuLmJlZ2luKCksIGVuZCA9IHBhcmFtQ2hpbGRyZW4uZW5kKCk7IHBhcmFtICE9IGVuZDsg
KytwYXJhbSkgewotICAgICAgICBpZiAocGFyYW0tPm5hbWUoKS5pc0VtcHR5KCkpCisgICAgZm9y
IChhdXRvJiBwYXJhbSA6IGNoaWxkcmVuT2ZUeXBlPEhUTUxQYXJhbUVsZW1lbnQ+KCp0aGlzKSkg
eworICAgICAgICBpZiAocGFyYW0ubmFtZSgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIHBhcmFtTmFtZXMuYXBwZW5kKHBhcmFtLT5uYW1lKCkpOwotICAgICAg
ICBwYXJhbVZhbHVlcy5hcHBlbmQocGFyYW0tPnZhbHVlKCkpOworICAgICAgICBwYXJhbU5hbWVz
LmFwcGVuZChwYXJhbS5uYW1lKCkpOworICAgICAgICBwYXJhbVZhbHVlcy5hcHBlbmQocGFyYW0u
dmFsdWUoKSk7CiAgICAgfQogCiAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MDU1MCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NDQsOSArNzQ0LDggQEAgVHJhbnNsYXRlQXR0cmlidXRlTW9kZSBIVE1MRWxlbWVudDo6dHJh
bgogCiBib29sIEhUTUxFbGVtZW50Ojp0cmFuc2xhdGUoKSBjb25zdAogewotICAgIGF1dG8gbGlu
ZWFnZSA9IGxpbmVhZ2VPZlR5cGU8SFRNTEVsZW1lbnQ+KCp0aGlzKTsKLSAgICBmb3IgKGF1dG8g
ZWxlbWVudCA9IGxpbmVhZ2UuYmVnaW4oKSwgZW5kID0gbGluZWFnZS5lbmQoKTsgZWxlbWVudCAh
PSBlbmQ7ICsrZWxlbWVudCkgewotICAgICAgICBUcmFuc2xhdGVBdHRyaWJ1dGVNb2RlIG1vZGUg
PSBlbGVtZW50LT50cmFuc2xhdGVBdHRyaWJ1dGVNb2RlKCk7CisgICAgZm9yIChhdXRvJiBlbGVt
ZW50IDogbGluZWFnZU9mVHlwZTxIVE1MRWxlbWVudD4oKnRoaXMpKSB7CisgICAgICAgIFRyYW5z
bGF0ZUF0dHJpYnV0ZU1vZGUgbW9kZSA9IGVsZW1lbnQudHJhbnNsYXRlQXR0cmlidXRlTW9kZSgp
OwogICAgICAgICBpZiAobW9kZSA9PSBUcmFuc2xhdGVBdHRyaWJ1dGVJbmhlcml0KQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIEFTU0VSVChtb2RlID09IFRyYW5zbGF0ZUF0dHJpYnV0
ZVllcyB8fCBtb2RlID09IFRyYW5zbGF0ZUF0dHJpYnV0ZU5vKTsKQEAgLTc5Myw5ICs3OTIsOSBA
QCBIVE1MRm9ybUVsZW1lbnQqIEhUTUxFbGVtZW50Ojp2aXJ0dWFsRm9yCiAgICAgcmV0dXJuIEhU
TUxGb3JtRWxlbWVudDo6ZmluZENsb3Nlc3RGb3JtQW5jZXN0b3IoKnRoaXMpOwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgZWxlbWVudEFmZmVjdHNEaXJlY3Rpb25hbGl0eShjb25zdCBOb2RlKiBu
b2RlKQorc3RhdGljIGlubGluZSBib29sIGVsZW1lbnRBZmZlY3RzRGlyZWN0aW9uYWxpdHkoY29u
c3QgTm9kZSYgbm9kZSkKIHsKLSAgICByZXR1cm4gbm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIChu
b2RlLT5oYXNUYWdOYW1lKGJkaVRhZykgfHwgdG9IVE1MRWxlbWVudChub2RlKS0+aGFzQXR0cmli
dXRlKGRpckF0dHIpKTsKKyAgICByZXR1cm4gbm9kZS5pc0hUTUxFbGVtZW50KCkgJiYgKG5vZGUu
aGFzVGFnTmFtZShiZGlUYWcpIHx8IHRvSFRNTEVsZW1lbnQobm9kZSkuaGFzQXR0cmlidXRlKGRp
ckF0dHIpKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0SGFzRGlyQXV0b0ZsYWdSZWN1cnNpdmVseShO
b2RlKiBmaXJzdE5vZGUsIGJvb2wgZmxhZywgTm9kZSogbGFzdE5vZGUgPSBudWxscHRyKQpAQCAt
ODA4LDcgKzgwNyw3IEBAIHN0YXRpYyB2b2lkIHNldEhhc0RpckF1dG9GbGFnUmVjdXJzaXZlbHkK
ICAgICAgICAgaWYgKG5vZGUtPnNlbGZPckFuY2VzdG9ySGFzRGlyQXV0b0F0dHJpYnV0ZSgpID09
IGZsYWcpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKGVsZW1lbnRBZmZlY3Rz
RGlyZWN0aW9uYWxpdHkobm9kZSkpIHsKKyAgICAgICAgaWYgKGVsZW1lbnRBZmZlY3RzRGlyZWN0
aW9uYWxpdHkoKm5vZGUpKSB7CiAgICAgICAgICAgICBpZiAobm9kZSA9PSBsYXN0Tm9kZSkKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZSwgZmlyc3ROb2RlKTsKQEAgLTkwOCwxMCArOTA3LDkg
QEAgdm9pZCBIVE1MRWxlbWVudDo6YWRqdXN0RGlyZWN0aW9uYWxpdHlJZgogICAgIHNldEhhc0Rp
ckF1dG9GbGFnUmVjdXJzaXZlbHkoY2hpbGQsIGZhbHNlKTsKICAgICBpZiAoIXJlbmRlcmVyKCkg
fHwgcmVuZGVyZXIoKS0+c3R5bGUoKS5kaXJlY3Rpb24oKSA9PSB0ZXh0RGlyZWN0aW9uKQogICAg
ICAgICByZXR1cm47Ci0gICAgYXV0byBsaW5lYWdlID0gZWxlbWVudExpbmVhZ2UodGhpcyk7Ci0g
ICAgZm9yIChhdXRvIGVsZW1lbnRUb0FkanVzdCA9IGxpbmVhZ2UuYmVnaW4oKSwgZW5kID0gbGlu
ZWFnZS5lbmQoKTsgZWxlbWVudFRvQWRqdXN0ICE9IGVuZDsgKytlbGVtZW50VG9BZGp1c3QpIHsK
LSAgICAgICAgaWYgKGVsZW1lbnRBZmZlY3RzRGlyZWN0aW9uYWxpdHkoJiplbGVtZW50VG9BZGp1
c3QpKSB7Ci0gICAgICAgICAgICBlbGVtZW50VG9BZGp1c3QtPnNldE5lZWRzU3R5bGVSZWNhbGMo
KTsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnRUb0FkanVzdCA6IGVsZW1lbnRMaW5lYWdlKHRoaXMp
KSB7CisgICAgICAgIGlmIChlbGVtZW50QWZmZWN0c0RpcmVjdGlvbmFsaXR5KGVsZW1lbnRUb0Fk
anVzdCkpIHsKKyAgICAgICAgICAgIGVsZW1lbnRUb0FkanVzdC5zZXROZWVkc1N0eWxlUmVjYWxj
KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC05MzIsNyArOTMw
LDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6YWRqdXN0RGlyZWN0aW9uYWxpdHlJZgogICAgIGlmIChk
b2N1bWVudCgpLnJlbmRlclZpZXcoKSAmJiAoY2hhbmdlVHlwZSA9PSBFbGVtZW50UmVtb3ZlZCB8
fCBjaGFuZ2VUeXBlID09IFRleHRSZW1vdmVkKSkgewogICAgICAgICBOb2RlKiBub2RlID0gYmVm
b3JlQ2hhbmdlID8gYmVmb3JlQ2hhbmdlLT5uZXh0U2libGluZygpIDogbnVsbHB0cjsKICAgICAg
ICAgZm9yICg7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgICAg
ICBpZiAoZWxlbWVudEFmZmVjdHNEaXJlY3Rpb25hbGl0eShub2RlKSkKKyAgICAgICAgICAgIGlm
IChlbGVtZW50QWZmZWN0c0RpcmVjdGlvbmFsaXR5KCpub2RlKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKIAogICAgICAgICAgICAgc2V0SGFzRGlyQXV0b0ZsYWdSZWN1cnNpdmVseShub2Rl
LCBmYWxzZSk7CkBAIC05NDYsMTUgKzk0NCwxNCBAQCB2b2lkIEhUTUxFbGVtZW50OjphZGp1c3RE
aXJlY3Rpb25hbGl0eUlmCiAgICAgaWYgKGJlZm9yZUNoYW5nZSkKICAgICAgICAgb2xkTWFya2Vk
Tm9kZSA9IGNoYW5nZVR5cGUgPT0gRWxlbWVudEluc2VydGVkID8gRWxlbWVudFRyYXZlcnNhbDo6
bmV4dFNpYmxpbmcoYmVmb3JlQ2hhbmdlKSA6IGJlZm9yZUNoYW5nZS0+bmV4dFNpYmxpbmcoKTsK
IAotICAgIHdoaWxlIChvbGRNYXJrZWROb2RlICYmIGVsZW1lbnRBZmZlY3RzRGlyZWN0aW9uYWxp
dHkob2xkTWFya2VkTm9kZSkpCisgICAgd2hpbGUgKG9sZE1hcmtlZE5vZGUgJiYgZWxlbWVudEFm
ZmVjdHNEaXJlY3Rpb25hbGl0eSgqb2xkTWFya2VkTm9kZSkpCiAgICAgICAgIG9sZE1hcmtlZE5v
ZGUgPSBvbGRNYXJrZWROb2RlLT5uZXh0U2libGluZygpOwogICAgIGlmIChvbGRNYXJrZWROb2Rl
KQogICAgICAgICBzZXRIYXNEaXJBdXRvRmxhZ1JlY3Vyc2l2ZWx5KG9sZE1hcmtlZE5vZGUsIGZh
bHNlKTsKIAotICAgIGF1dG8gbGluZWFnZSA9IGxpbmVhZ2VPZlR5cGU8SFRNTEVsZW1lbnQ+KCp0
aGlzKTsKLSAgICBmb3IgKGF1dG8gZWxlbWVudFRvQWRqdXN0ID0gbGluZWFnZS5iZWdpbigpLCBl
bmQgPSBsaW5lYWdlLmVuZCgpOyBlbGVtZW50VG9BZGp1c3QgIT0gZW5kOyArK2VsZW1lbnRUb0Fk
anVzdCkgewotICAgICAgICBpZiAoZWxlbWVudEFmZmVjdHNEaXJlY3Rpb25hbGl0eSgmKmVsZW1l
bnRUb0FkanVzdCkpIHsKLSAgICAgICAgICAgIGVsZW1lbnRUb0FkanVzdC0+Y2FsY3VsYXRlQW5k
QWRqdXN0RGlyZWN0aW9uYWxpdHkoKTsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnRUb0FkanVzdCA6
IGxpbmVhZ2VPZlR5cGU8SFRNTEVsZW1lbnQ+KCp0aGlzKSkgeworICAgICAgICBpZiAoZWxlbWVu
dEFmZmVjdHNEaXJlY3Rpb25hbGl0eShlbGVtZW50VG9BZGp1c3QpKSB7CisgICAgICAgICAgICBl
bGVtZW50VG9BZGp1c3QuY2FsY3VsYXRlQW5kQWRqdXN0RGlyZWN0aW9uYWxpdHkoKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAkocmV2aXNpb24gMTYwNTUwKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTEsOSArNTEsOCBAQCBQYXNzUmVmUHRyPEhUTUxGaWVsZFNldEVsZW1lbnQ+IEhUTUxGaWVsCiAK
IHZvaWQgSFRNTEZpZWxkU2V0RWxlbWVudDo6aW52YWxpZGF0ZURpc2FibGVkU3RhdGVVbmRlcihF
bGVtZW50KiBiYXNlKQogewotICAgIGF1dG8gZm9ybUNvbnRyb2xEZXNjZW5kYW50cyA9IGRlc2Nl
bmRhbnRzT2ZUeXBlPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCpiYXNlKTsKLSAgICBmb3IgKGF1
dG8gY29udHJvbCA9IGZvcm1Db250cm9sRGVzY2VuZGFudHMuYmVnaW4oKSwgZW5kID0gZm9ybUNv
bnRyb2xEZXNjZW5kYW50cy5lbmQoKTsgY29udHJvbCAhPSBlbmQ7ICsrY29udHJvbCkKLSAgICAg
ICAgY29udHJvbC0+YW5jZXN0b3JEaXNhYmxlZFN0YXRlV2FzQ2hhbmdlZCgpOworICAgIGZvciAo
YXV0byYgY29udHJvbCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+
KCpiYXNlKSkKKyAgICAgICAgY29udHJvbC5hbmNlc3RvckRpc2FibGVkU3RhdGVXYXNDaGFuZ2Vk
KCk7CiB9CiAKIHZvaWQgSFRNTEZpZWxkU2V0RWxlbWVudDo6ZGlzYWJsZWRBdHRyaWJ1dGVDaGFu
Z2VkKCkKQEAgLTY3LDkgKzY2LDggQEAgdm9pZCBIVE1MRmllbGRTZXRFbGVtZW50OjpjaGlsZHJl
bkNoYW5nZQogewogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChj
aGFuZ2UpOwogCi0gICAgYXV0byBsZWdlbmRDaGlsZHJlbiA9IGNoaWxkcmVuT2ZUeXBlPEhUTUxM
ZWdlbmRFbGVtZW50PigqdGhpcyk7Ci0gICAgZm9yIChhdXRvIGxlZ2VuZCA9IGxlZ2VuZENoaWxk
cmVuLmJlZ2luKCksIGVuZCA9IGxlZ2VuZENoaWxkcmVuLmVuZCgpOyBsZWdlbmQgIT0gZW5kOyAr
K2xlZ2VuZCkKLSAgICAgICAgaW52YWxpZGF0ZURpc2FibGVkU3RhdGVVbmRlcigmKmxlZ2VuZCk7
CisgICAgZm9yIChhdXRvJiBsZWdlbmQgOiBjaGlsZHJlbk9mVHlwZTxIVE1MTGVnZW5kRWxlbWVu
dD4oKnRoaXMpKQorICAgICAgICBpbnZhbGlkYXRlRGlzYWJsZWRTdGF0ZVVuZGVyKCZsZWdlbmQp
OwogfQogCiBib29sIEhUTUxGaWVsZFNldEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25zdApA
QCAtMTA4LDEyICsxMDYsMTEgQEAgdm9pZCBIVE1MRmllbGRTZXRFbGVtZW50OjpyZWZyZXNoRWxl
bWVudAogCiAgICAgbV9hc3NvY2lhdGVkRWxlbWVudHMuY2xlYXIoKTsKIAotICAgIGF1dG8gZGVz
Y2VuZGFudHMgPSBlbGVtZW50RGVzY2VuZGFudHMoY29uc3RfY2FzdDxIVE1MRmllbGRTZXRFbGVt
ZW50Jj4oKnRoaXMpKTsKLSAgICBmb3IgKGF1dG8gZWxlbWVudCA9IGRlc2NlbmRhbnRzLmJlZ2lu
KCksIGVuZCA9IGRlc2NlbmRhbnRzLmVuZCgpOyBlbGVtZW50ICE9IGVuZDsgKytlbGVtZW50KSB7
Ci0gICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCi0gICAgICAgICAg
ICBtX2Fzc29jaWF0ZWRFbGVtZW50cy5hcHBlbmQoJnRvSFRNTE9iamVjdEVsZW1lbnQoKmVsZW1l
bnQpKTsKLSAgICAgICAgZWxzZSBpZiAoZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkK
LSAgICAgICAgICAgIG1fYXNzb2NpYXRlZEVsZW1lbnRzLmFwcGVuZCgmdG9IVE1MRm9ybUNvbnRy
b2xFbGVtZW50KCplbGVtZW50KSk7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZWxlbWVudERl
c2NlbmRhbnRzKGNvbnN0X2Nhc3Q8SFRNTEZpZWxkU2V0RWxlbWVudCY+KCp0aGlzKSkpIHsKKyAg
ICAgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAgICAgICAgICAgbV9h
c3NvY2lhdGVkRWxlbWVudHMuYXBwZW5kKCZ0b0hUTUxPYmplY3RFbGVtZW50KGVsZW1lbnQpKTsK
KyAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAg
ICAgICAgbV9hc3NvY2lhdGVkRWxlbWVudHMuYXBwZW5kKCZ0b0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQoZWxlbWVudCkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcAkocmV2aXNpb24gMTYwNTUwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzUsOCArNDc1LDcgQEAgdW5z
aWduZWQgSFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZAogICAgICAgICByZXR1cm4gY3Vy
cmVudEFzc29jaWF0ZWRFbGVtZW50c0FmdGVySW5kZXg7CiAKICAgICB1bnNpZ25lZCBpID0gbV9h
c3NvY2lhdGVkRWxlbWVudHNCZWZvcmVJbmRleDsKLSAgICBmb3IgKGF1dG8gaXQgPSBkZXNjZW5k
YW50cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgSFRNTEVsZW1lbnQmIGVs
ZW1lbnQgPSAqaXQ7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZGVzY2VuZGFudHMpIHsKICAg
ICAgICAgaWYgKCZlbGVtZW50ID09ICZhc3NvY2lhdGVkSFRNTEVsZW1lbnQpCiAgICAgICAgICAg
ICByZXR1cm4gaTsKICAgICAgICAgaWYgKCFpc0hUTUxGb3JtQ29udHJvbEVsZW1lbnQoZWxlbWVu
dCkgJiYgIWlzSFRNTE9iamVjdEVsZW1lbnQoZWxlbWVudCkpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MDU1MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDEy
ICs2NywxMSBAQCBMYWJlbGFibGVFbGVtZW50KiBIVE1MTGFiZWxFbGVtZW50Ojpjb250CiAgICAg
ICAgIC8vIFNlYXJjaCB0aGUgY2hpbGRyZW4gYW5kIGRlc2NlbmRhbnRzIG9mIHRoZSBsYWJlbCBl
bGVtZW50IGZvciBhIGZvcm0gZWxlbWVudC4KICAgICAgICAgLy8gcGVyIGh0dHA6Ly9kZXYudzMu
b3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCN0aGUtbGFiZWwtZWxlbWVudAogICAgICAgICAv
LyB0aGUgZm9ybSBlbGVtZW50IG11c3QgYmUgImxhYmVsYWJsZSBmb3JtLWFzc29jaWF0ZWQgZWxl
bWVudCIuCi0gICAgICAgIGF1dG8gbGFiZWxhYmxlRGVzY2VuZGFudHMgPSBkZXNjZW5kYW50c09m
VHlwZTxMYWJlbGFibGVFbGVtZW50PigqdGhpcyk7Ci0gICAgICAgIGZvciAoYXV0byBsYWJlbGFi
bGVFbGVtZW50ID0gbGFiZWxhYmxlRGVzY2VuZGFudHMuYmVnaW4oKSwgZW5kID0gbGFiZWxhYmxl
RGVzY2VuZGFudHMuZW5kKCk7IGxhYmVsYWJsZUVsZW1lbnQgIT0gZW5kOyArK2xhYmVsYWJsZUVs
ZW1lbnQpIHsKLSAgICAgICAgICAgIGlmIChsYWJlbGFibGVFbGVtZW50LT5zdXBwb3J0TGFiZWxz
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuICYqbGFiZWxhYmxlRWxlbWVudDsKKyAgICAgICAg
Zm9yIChhdXRvJiBsYWJlbGFibGVFbGVtZW50IDogZGVzY2VuZGFudHNPZlR5cGU8TGFiZWxhYmxl
RWxlbWVudD4oKnRoaXMpKSB7CisgICAgICAgICAgICBpZiAobGFiZWxhYmxlRWxlbWVudC5zdXBw
b3J0TGFiZWxzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuICZsYWJlbGFibGVFbGVtZW50Owog
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAgICAgCiAgICAgLy8gRmluZCB0aGUgZmlyc3QgZWxlbWVudCB3aG9zZSBpZCBpcyBjb250
cm9sSWQuIElmIGl0IGlzIGZvdW5kIGFuZCBpdCBpcyBhIGxhYmVsYWJsZSBmb3JtIGNvbnRyb2ws
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAkocmV2aXNpb24gMTYw
NTUwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDEyICs1OSwxMSBAQCBib29sIEhUTUxNYXBFbGVtZW50OjptYXBNb3VzZUV2
ZW50KExheW91CiB7CiAgICAgSFRNTEFyZWFFbGVtZW50KiBkZWZhdWx0QXJlYSA9IDA7CiAKLSAg
ICBhdXRvIGFyZWFEZXNjZW5kYW50cyA9IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxBcmVhRWxlbWVu
dD4oKnRoaXMpOwotICAgIGZvciAoYXV0byBhcmVhID0gYXJlYURlc2NlbmRhbnRzLmJlZ2luKCks
IGVuZCA9IGFyZWFEZXNjZW5kYW50cy5lbmQoKTsgYXJlYSAhPSBlbmQ7ICsrYXJlYSkgewotICAg
ICAgICBpZiAoYXJlYS0+aXNEZWZhdWx0KCkpIHsKKyAgICBmb3IgKGF1dG8mIGFyZWEgOiBkZXNj
ZW5kYW50c09mVHlwZTxIVE1MQXJlYUVsZW1lbnQ+KCp0aGlzKSkgeworICAgICAgICBpZiAoYXJl
YS5pc0RlZmF1bHQoKSkgewogICAgICAgICAgICAgaWYgKCFkZWZhdWx0QXJlYSkKLSAgICAgICAg
ICAgICAgICBkZWZhdWx0QXJlYSA9ICYqYXJlYTsKLSAgICAgICAgfSBlbHNlIGlmIChhcmVhLT5t
YXBNb3VzZUV2ZW50KGxvY2F0aW9uLCBzaXplLCByZXN1bHQpKQorICAgICAgICAgICAgICAgIGRl
ZmF1bHRBcmVhID0gJmFyZWE7CisgICAgICAgIH0gZWxzZSBpZiAoYXJlYS5tYXBNb3VzZUV2ZW50
KGxvY2F0aW9uLCBzaXplLCByZXN1bHQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNjA1NTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDczLDEwICsxNDczLDkgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50Ojp0ZXh0VHJhY2tNb2RlQ2hhbgogICAgIGJvb2wgdHJhY2tJc0xvYWRlZCA9IHRydWU7
CiAgICAgaWYgKHRyYWNrLT50cmFja1R5cGUoKSA9PSBUZXh0VHJhY2s6OlRyYWNrRWxlbWVudCkg
ewogICAgICAgICB0cmFja0lzTG9hZGVkID0gZmFsc2U7Ci0gICAgICAgIGF1dG8gdHJhY2tDaGls
ZHJlbiA9IGNoaWxkcmVuT2ZUeXBlPEhUTUxUcmFja0VsZW1lbnQ+KCp0aGlzKTsKLSAgICAgICAg
Zm9yIChhdXRvIHRyYWNrRWxlbWVudCA9IHRyYWNrQ2hpbGRyZW4uYmVnaW4oKSwgZW5kID0gdHJh
Y2tDaGlsZHJlbi5lbmQoKTsgdHJhY2tFbGVtZW50ICE9IGVuZDsgKyt0cmFja0VsZW1lbnQpIHsK
LSAgICAgICAgICAgIGlmICh0cmFja0VsZW1lbnQtPnRyYWNrKCkgPT0gdHJhY2spIHsKLSAgICAg
ICAgICAgICAgICBpZiAodHJhY2tFbGVtZW50LT5yZWFkeVN0YXRlKCkgPT0gSFRNTFRyYWNrRWxl
bWVudDo6TE9BRElORyB8fCB0cmFja0VsZW1lbnQtPnJlYWR5U3RhdGUoKSA9PSBIVE1MVHJhY2tF
bGVtZW50OjpMT0FERUQpCisgICAgICAgIGZvciAoYXV0byYgdHJhY2tFbGVtZW50IDogY2hpbGRy
ZW5PZlR5cGU8SFRNTFRyYWNrRWxlbWVudD4oKnRoaXMpKSB7CisgICAgICAgICAgICBpZiAodHJh
Y2tFbGVtZW50LnRyYWNrKCkgPT0gdHJhY2spIHsKKyAgICAgICAgICAgICAgICBpZiAodHJhY2tF
bGVtZW50LnJlYWR5U3RhdGUoKSA9PSBIVE1MVHJhY2tFbGVtZW50OjpMT0FESU5HIHx8IHRyYWNr
RWxlbWVudC5yZWFkeVN0YXRlKCkgPT0gSFRNTFRyYWNrRWxlbWVudDo6TE9BREVEKQogICAgICAg
ICAgICAgICAgICAgICB0cmFja0lzTG9hZGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KQEAgLTE3MTcsOSArMTcxNiw4IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6Y2FuY2VsUGVuZGluZ0V2ZW4KICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFFbGVtZW50
OjpjYW5jZWxQZW5kaW5nRXZlbnRzQW5kQ2FsbGJhY2tzIik7CiAgICAgbV9hc3luY0V2ZW50UXVl
dWUuY2FuY2VsQWxsRXZlbnRzKCk7CiAKLSAgICBhdXRvIHNvdXJjZUNoaWxkcmVuID0gY2hpbGRy
ZW5PZlR5cGU8SFRNTFNvdXJjZUVsZW1lbnQ+KCp0aGlzKTsKLSAgICBmb3IgKGF1dG8gc291cmNl
ID0gc291cmNlQ2hpbGRyZW4uYmVnaW4oKSwgZW5kID0gc291cmNlQ2hpbGRyZW4uZW5kKCk7IHNv
dXJjZSAhPSBlbmQ7ICsrc291cmNlKQotICAgICAgICBzb3VyY2UtPmNhbmNlbFBlbmRpbmdFcnJv
ckV2ZW50KCk7CisgICAgZm9yIChhdXRvJiBzb3VyY2UgOiBjaGlsZHJlbk9mVHlwZTxIVE1MU291
cmNlRWxlbWVudD4oKnRoaXMpKQorICAgICAgICBzb3VyY2UuY2FuY2VsUGVuZGluZ0Vycm9yRXZl
bnQoKTsKIH0KIAogRG9jdW1lbnQqIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyT3duaW5n
RG9jdW1lbnQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5j
cHAJKHJldmlzaW9uIDE2MDU1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsMjIgKzE1NCwyMSBAQCB2b2lkIEhUTUxP
YmplY3RFbGVtZW50OjpwYXJhbWV0ZXJzRm9yUGx1CiAgICAgCiAgICAgLy8gU2NhbiB0aGUgUEFS
QU0gY2hpbGRyZW4gYW5kIHN0b3JlIHRoZWlyIG5hbWUvdmFsdWUgcGFpcnMuCiAgICAgLy8gR2V0
IHRoZSBVUkwgYW5kIHR5cGUgZnJvbSB0aGUgcGFyYW1zIGlmIHdlIGRvbid0IGFscmVhZHkgaGF2
ZSB0aGVtLgotICAgIGF1dG8gcGFyYW1DaGlsZHJlbiA9IGNoaWxkcmVuT2ZUeXBlPEhUTUxQYXJh
bUVsZW1lbnQ+KCp0aGlzKTsKLSAgICBmb3IgKGF1dG8gcGFyYW0gPSBwYXJhbUNoaWxkcmVuLmJl
Z2luKCksIGVuZCA9IHBhcmFtQ2hpbGRyZW4uZW5kKCk7IHBhcmFtICE9IGVuZDsgKytwYXJhbSkg
ewotICAgICAgICBTdHJpbmcgbmFtZSA9IHBhcmFtLT5uYW1lKCk7CisgICAgZm9yIChhdXRvJiBw
YXJhbSA6IGNoaWxkcmVuT2ZUeXBlPEhUTUxQYXJhbUVsZW1lbnQ+KCp0aGlzKSkgeworICAgICAg
ICBTdHJpbmcgbmFtZSA9IHBhcmFtLm5hbWUoKTsKICAgICAgICAgaWYgKG5hbWUuaXNFbXB0eSgp
KQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgdW5pcXVlUGFyYW1OYW1lcy5hZGQo
bmFtZS5pbXBsKCkpOwotICAgICAgICBwYXJhbU5hbWVzLmFwcGVuZChwYXJhbS0+bmFtZSgpKTsK
LSAgICAgICAgcGFyYW1WYWx1ZXMuYXBwZW5kKHBhcmFtLT52YWx1ZSgpKTsKKyAgICAgICAgcGFy
YW1OYW1lcy5hcHBlbmQocGFyYW0ubmFtZSgpKTsKKyAgICAgICAgcGFyYW1WYWx1ZXMuYXBwZW5k
KHBhcmFtLnZhbHVlKCkpOwogCiAgICAgICAgIC8vIEZJWE1FOiB1cmwgYWRqdXN0bWVudCBkb2Vz
IG5vdCBiZWxvbmcgaW4gdGhpcyBmdW5jdGlvbi4KICAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkg
JiYgdXJsUGFyYW1ldGVyLmlzRW1wdHkoKSAmJiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInNy
YyIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJtb3ZpZSIpIHx8IGVxdWFsSWdub3JpbmdD
YXNlKG5hbWUsICJjb2RlIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInVybCIpKSkKLSAg
ICAgICAgICAgIHVybFBhcmFtZXRlciA9IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNl
cyhwYXJhbS0+dmFsdWUoKSk7CisgICAgICAgICAgICB1cmxQYXJhbWV0ZXIgPSBzdHJpcExlYWRp
bmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMocGFyYW0udmFsdWUoKSk7CiAgICAgICAgIC8vIEZJWE1F
OiBzZXJ2aWNlVHlwZSBjYWxjdWxhdGlvbiBkb2VzIG5vdCBiZWxvbmcgaW4gdGhpcyBmdW5jdGlv
bi4KICAgICAgICAgaWYgKHNlcnZpY2VUeXBlLmlzRW1wdHkoKSAmJiBlcXVhbElnbm9yaW5nQ2Fz
ZShuYW1lLCAidHlwZSIpKSB7Ci0gICAgICAgICAgICBzZXJ2aWNlVHlwZSA9IHBhcmFtLT52YWx1
ZSgpOworICAgICAgICAgICAgc2VydmljZVR5cGUgPSBwYXJhbS52YWx1ZSgpOwogICAgICAgICAg
ICAgc2l6ZV90IHBvcyA9IHNlcnZpY2VUeXBlLmZpbmQoIjsiKTsKICAgICAgICAgICAgIGlmIChw
b3MgIT0gbm90Rm91bmQpCiAgICAgICAgICAgICAgICAgc2VydmljZVR5cGUgPSBzZXJ2aWNlVHlw
ZS5sZWZ0KHBvcyk7CkBAIC00NDUsMTQgKzQ0NCwxMyBAQCBib29sIEhUTUxPYmplY3RFbGVtZW50
Ojpjb250YWluc0phdmFBcHBsCiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2YUFwcGxl
dE1JTUVUeXBlKGdldEF0dHJpYnV0ZSh0eXBlQXR0cikpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAotICAgIGF1dG8gY2hpbGRyZW4gPSBlbGVtZW50Q2hpbGRyZW4oKnRoaXMpOwotICAgIGZvciAo
YXV0byBjaGlsZCA9IGNoaWxkcmVuLmJlZ2luKCksIGVuZCA9IGNoaWxkcmVuLmVuZCgpOyBjaGls
ZCAhPSBlbmQ7ICsrY2hpbGQpIHsKLSAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKHBhcmFt
VGFnKSAmJiBlcXVhbElnbm9yaW5nQ2FzZShjaGlsZC0+Z2V0TmFtZUF0dHJpYnV0ZSgpLCAidHlw
ZSIpCi0gICAgICAgICAgICAmJiBNSU1FVHlwZVJlZ2lzdHJ5Ojppc0phdmFBcHBsZXRNSU1FVHlw
ZShjaGlsZC0+Z2V0QXR0cmlidXRlKHZhbHVlQXR0cikuc3RyaW5nKCkpKQorICAgIGZvciAoYXV0
byYgY2hpbGQgOiBlbGVtZW50Q2hpbGRyZW4oKnRoaXMpKSB7CisgICAgICAgIGlmIChjaGlsZC5o
YXNUYWdOYW1lKHBhcmFtVGFnKSAmJiBlcXVhbElnbm9yaW5nQ2FzZShjaGlsZC5nZXROYW1lQXR0
cmlidXRlKCksICJ0eXBlIikKKyAgICAgICAgICAgICYmIE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2
YUFwcGxldE1JTUVUeXBlKGNoaWxkLmdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpLnN0cmluZygpKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUo
b2JqZWN0VGFnKSAmJiBzdGF0aWNfY2FzdDxjb25zdCBIVE1MT2JqZWN0RWxlbWVudCY+KCpjaGls
ZCkuY29udGFpbnNKYXZhQXBwbGV0KCkpCisgICAgICAgIGlmIChjaGlsZC5oYXNUYWdOYW1lKG9i
amVjdFRhZykgJiYgdG9IVE1MT2JqZWN0RWxlbWVudChjaGlsZCkuY29udGFpbnNKYXZhQXBwbGV0
KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdO
YW1lKGFwcGxldFRhZykpCisgICAgICAgIGlmIChjaGlsZC5oYXNUYWdOYW1lKGFwcGxldFRhZykp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvUGxhY2Vob2xkZXJEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL1BsYWNlaG9sZGVyRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNjA1NTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUGxhY2Vob2xkZXJEb2N1bWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDkgKzM0LDggQEAgdm9pZCBQbGFjZWhvbGRlckRvY3VtZW50OjpjcmVh
dGVSZW5kZXJUcgogewogICAgIEFTU0VSVCghYXR0YWNoZWQoKSk7CiAKLSAgICBhdXRvIGNoaWxk
cmVuID0gZWxlbWVudENoaWxkcmVuKCp0aGlzKTsKLSAgICBmb3IgKGF1dG8gY2hpbGQgPSBjaGls
ZHJlbi5iZWdpbigpLCBlbmQgPSBjaGlsZHJlbi5lbmQoKTsgY2hpbGQgIT0gZW5kOyArK2NoaWxk
KQotICAgICAgICBTdHlsZTo6YXR0YWNoUmVuZGVyVHJlZSgqY2hpbGQpOworICAgIGZvciAoYXV0
byYgY2hpbGQgOiBlbGVtZW50Q2hpbGRyZW4oKnRoaXMpKQorICAgICAgICBTdHlsZTo6YXR0YWNo
UmVuZGVyVHJlZShjaGlsZCk7CiAKICAgICBzZXRBdHRhY2hlZCh0cnVlKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAko
cmV2aXNpb24gMTYwNTUwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVj
dFJlbmRlcmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDE1ICsxNjEsMTMgQEAgUGFzc1Jl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IEZpbHRlckVmZmVjdFJlbgogICAgIC8vIFRoaXMgbWF5IG5lZWQg
YSBzcGVjIGNsYXJpZmljYXRpb24uCiAgICAgYXV0byBidWlsZGVyID0gc3RkOjptYWtlX3VuaXF1
ZTxTVkdGaWx0ZXJCdWlsZGVyPihwcmV2aW91c0VmZmVjdCwgU291cmNlQWxwaGE6OmNyZWF0ZSh0
aGlzKSk7CiAKLSAgICBhdXRvIGF0dHJpYnV0ZXNDaGlsZHJlbiA9IGNoaWxkcmVuT2ZUeXBlPFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oKmZpbHRlcik7Ci0gICAgZm9yIChh
dXRvIGl0ID0gYXR0cmlidXRlc0NoaWxkcmVuLmJlZ2luKCksIGVuZCA9IGF0dHJpYnV0ZXNDaGls
ZHJlbi5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcyogZWZmZWN0RWxlbWVudCA9ICYqaXQ7Ci0gICAgICAgIGVmZmVj
dCA9IGVmZmVjdEVsZW1lbnQtPmJ1aWxkKGJ1aWxkZXIuZ2V0KCksIHRoaXMpOworICAgIGZvciAo
YXV0byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcz4oKmZpbHRlcikpIHsKKyAgICAgICAgZWZmZWN0ID0gZWZmZWN0RWxl
bWVudC5idWlsZChidWlsZGVyLmdldCgpLCB0aGlzKTsKICAgICAgICAgaWYgKCFlZmZlY3QpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBlZmZlY3RFbGVtZW50LT5zZXRTdGFuZGFy
ZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKLSAgICAgICAgYnVpbGRlci0+YWRkKGVmZmVjdEVs
ZW1lbnQtPnJlc3VsdCgpLCBlZmZlY3QpOworICAgICAgICBlZmZlY3RFbGVtZW50LnNldFN0YW5k
YXJkQXR0cmlidXRlcyhlZmZlY3QuZ2V0KCkpOworICAgICAgICBidWlsZGVyLT5hZGQoZWZmZWN0
RWxlbWVudC5yZXN1bHQoKSwgZWZmZWN0KTsKICAgICAgICAgbV9lZmZlY3RzLmFwcGVuZChlZmZl
Y3QpOwogICAgIH0KICAgICByZXR1cm4gZWZmZWN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxNjA1NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDU1LDkgKzE0
NTUsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjptYXJrU2hhcGVJbnNpZGVEZXNjZW5kCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGJsb2NrQ2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlw
ZTxSZW5kZXJCbG9jaz4oKnRoaXMpOwotICAgIGZvciAoYXV0byBjaGlsZEJsb2NrID0gYmxvY2tD
aGlsZHJlbi5iZWdpbigpLCBlbmQgPSBibG9ja0NoaWxkcmVuLmVuZCgpOyBjaGlsZEJsb2NrICE9
IGVuZDsgKytjaGlsZEJsb2NrKQotICAgICAgICBjaGlsZEJsb2NrLT5tYXJrU2hhcGVJbnNpZGVE
ZXNjZW5kYW50c0ZvckxheW91dCgpOworICAgIGZvciAoYXV0byYgY2hpbGRCbG9jayA6IGNoaWxk
cmVuT2ZUeXBlPFJlbmRlckJsb2NrPigqdGhpcykpCisgICAgICAgIGNoaWxkQmxvY2subWFya1No
YXBlSW5zaWRlRGVzY2VuZGFudHNGb3JMYXlvdXQoKTsKIH0KIAogU2hhcGVJbnNpZGVJbmZvKiBS
ZW5kZXJCbG9jazo6bGF5b3V0U2hhcGVJbnNpZGVJbmZvKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCShyZXZpc2lvbiAxNjA1NTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc3NCwxNSArMTc3NCwxNCBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6c3R5
bGVEaWRDaGFuZ2UoU3R5CiAgICAgICAgIFJlbmRlckJsb2NrRmxvdyogcGFyZW50QmxvY2sgPSB0
aGlzOwogICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAKLSAgICAgICAgYXV0byBhbmNlc3RvcnMgPSBh
bmNlc3RvcnNPZlR5cGU8UmVuZGVyQmxvY2tGbG93PigqdGhpcyk7Ci0gICAgICAgIGZvciAoYXV0
byBhbmNlc3RvciA9IGFuY2VzdG9ycy5iZWdpbigpLCBlbmQgPSBhbmNlc3RvcnMuZW5kKCk7IGFu
Y2VzdG9yICE9IGVuZDsgKythbmNlc3RvcikgewotICAgICAgICAgICAgaWYgKGFuY2VzdG9yLT5p
c1JlbmRlclZpZXcoKSkKKyAgICAgICAgZm9yIChhdXRvJiBhbmNlc3RvciA6IGFuY2VzdG9yc09m
VHlwZTxSZW5kZXJCbG9ja0Zsb3c+KCp0aGlzKSkgeworICAgICAgICAgICAgaWYgKGFuY2VzdG9y
LmlzUmVuZGVyVmlldygpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYg
KGFuY2VzdG9yLT5oYXNPdmVyaGFuZ2luZ0Zsb2F0cygpKSB7CisgICAgICAgICAgICBpZiAoYW5j
ZXN0b3IuaGFzT3ZlcmhhbmdpbmdGbG9hdHMoKSkgewogICAgICAgICAgICAgICAgIGZvciAoYXV0
byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCksIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0
LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyQm94
JiByZW5kZXJlciA9ICgqaXQpLT5yZW5kZXJlcigpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
YW5jZXN0b3ItPmhhc092ZXJoYW5naW5nRmxvYXQocmVuZGVyZXIpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBwYXJlbnRCbG9jayA9ICYqYW5jZXN0b3I7CisgICAgICAgICAgICAgICAgICAg
IGlmIChhbmNlc3Rvci5oYXNPdmVyaGFuZ2luZ0Zsb2F0KHJlbmRlcmVyKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyZW50QmxvY2sgPSAmYW5jZXN0b3I7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiAxNjA1
NTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjM0LDEyICsyMzQsMTEgQEAgUmVuZGVyQmxvY2tGbG93KiBSZW5kZXJCb3g6Om91
dGVybW9zdEJsbwogewogICAgIEFTU0VSVChpc0Zsb2F0aW5nKCkpOwogICAgIFJlbmRlckJsb2Nr
RmxvdyogcGFyZW50QmxvY2sgPSBudWxscHRyOwotICAgIGF1dG8gYW5jZXN0b3JzID0gYW5jZXN0
b3JzT2ZUeXBlPFJlbmRlckJsb2NrRmxvdz4oKnRoaXMpOwotICAgIGZvciAoYXV0byBhbmNlc3Rv
ciA9IGFuY2VzdG9ycy5iZWdpbigpLCBlbmQgPSBhbmNlc3RvcnMuZW5kKCk7IGFuY2VzdG9yICE9
IGVuZDsgKythbmNlc3RvcikgewotICAgICAgICBpZiAoYW5jZXN0b3ItPmlzUmVuZGVyVmlldygp
KQorICAgIGZvciAoYXV0byYgYW5jZXN0b3IgOiBhbmNlc3RvcnNPZlR5cGU8UmVuZGVyQmxvY2tG
bG93PigqdGhpcykpIHsKKyAgICAgICAgaWYgKGFuY2VzdG9yLmlzUmVuZGVyVmlldygpKQogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICghcGFyZW50QmxvY2sgfHwgYW5jZXN0b3ItPmNv
bnRhaW5zRmxvYXQoKnRoaXMpKQotICAgICAgICAgICAgcGFyZW50QmxvY2sgPSAmKmFuY2VzdG9y
OworICAgICAgICBpZiAoIXBhcmVudEJsb2NrIHx8IGFuY2VzdG9yLmNvbnRhaW5zRmxvYXQoKnRo
aXMpKQorICAgICAgICAgICAgcGFyZW50QmxvY2sgPSAmYW5jZXN0b3I7CiAgICAgfQogICAgIHJl
dHVybiBwYXJlbnRCbG9jazsKIH0KQEAgLTEzMzAsOSArMTMyOSw3IEBAIGJvb2wgUmVuZGVyQm94
Ojpmb3JlZ3JvdW5kSXNLbm93blRvQmVPcGEKIHsKICAgICBpZiAoIW1heERlcHRoVG9UZXN0KQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byBib3hDaGlsZHJlbiA9IGNoaWxkcmVuT2ZU
eXBlPFJlbmRlckJveD4oKnRoaXMpOwotICAgIGZvciAoYXV0byBjaGlsZCA9IGJveENoaWxkcmVu
LmJlZ2luKCksIGVuZCA9IGJveENoaWxkcmVuLmVuZCgpOyBjaGlsZCAhPSBlbmQ7ICsrY2hpbGQp
IHsKLSAgICAgICAgY29uc3QgUmVuZGVyQm94JiBjaGlsZEJveCA9ICpjaGlsZDsKKyAgICBmb3Ig
KGF1dG8mIGNoaWxkQm94IDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyQm94PigqdGhpcykpIHsKICAg
ICAgICAgaWYgKCFpc0NhbmRpZGF0ZUZvck9wYXF1ZW5lc3NUZXN0KGNoaWxkQm94KSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBMYXlvdXRQb2ludCBjaGlsZExvY2F0aW9uID0gY2hp
bGRCb3gubG9jYXRpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MDU1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAyLDExICszMDIsMTAgQEAg
U3R5bGVEaWZmZXJlbmNlIFJlbmRlckVsZW1lbnQ6OmFkanVzdFN0eQogCiBpbmxpbmUgYm9vbCBS
ZW5kZXJFbGVtZW50OjpoYXNJbW1lZGlhdGVOb25XaGl0ZXNwYWNlVGV4dENoaWxkT3JCb3JkZXJP
ck91dGxpbmUoKSBjb25zdAogewotICAgIGF1dG8gY2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxS
ZW5kZXJPYmplY3Q+KCp0aGlzKTsKLSAgICBmb3IgKGF1dG8gY2hpbGQgPSBjaGlsZHJlbi5iZWdp
bigpLCBlbmQgPSBjaGlsZHJlbi5lbmQoKTsgY2hpbGQgIT0gZW5kOyArK2NoaWxkKSB7Ci0gICAg
ICAgIGlmIChjaGlsZC0+aXNUZXh0KCkgJiYgIXRvUmVuZGVyVGV4dCgqY2hpbGQpLmlzQWxsQ29s
bGFwc2libGVXaGl0ZXNwYWNlKCkpCisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZU
eXBlPFJlbmRlck9iamVjdD4oKnRoaXMpKSB7CisgICAgICAgIGlmIChjaGlsZC5pc1RleHQoKSAm
JiAhdG9SZW5kZXJUZXh0KGNoaWxkKS5pc0FsbENvbGxhcHNpYmxlV2hpdGVzcGFjZSgpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChjaGlsZC0+c3R5bGUoKS5oYXNPdXRs
aW5lKCkgfHwgY2hpbGQtPnN0eWxlKCkuaGFzQm9yZGVyKCkpCisgICAgICAgIGlmIChjaGlsZC5z
dHlsZSgpLmhhc091dGxpbmUoKSB8fCBjaGlsZC5zdHlsZSgpLmhhc0JvcmRlcigpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTQzOSw5ICs0
MzgsOCBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OnNldFN0eWxlKFBhc3NSZWY8UmVuCiAgICAgc3R5
bGVEaWRDaGFuZ2UoZGlmZiwgJm9sZFN0eWxlLmdldCgpKTsKIAogICAgIC8vIFRleHQgcmVuZGVy
ZXJzIHVzZSB0aGVpciBwYXJlbnQgc3R5bGUuIE5vdGlmeSB0aGVtIGFib3V0IHRoZSBjaGFuZ2Uu
Ci0gICAgYXV0byB0ZXh0Q2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxSZW5kZXJUZXh0PigqdGhp
cyk7Ci0gICAgZm9yIChhdXRvIGNoaWxkID0gdGV4dENoaWxkcmVuLmJlZ2luKCksIGVuZCA9IHRl
eHRDaGlsZHJlbi5lbmQoKTsgY2hpbGQgIT0gZW5kOyArK2NoaWxkKQotICAgICAgICBjaGlsZC0+
c3R5bGVEaWRDaGFuZ2UoZGlmZiwgJm9sZFN0eWxlLmdldCgpKTsKKyAgICBmb3IgKGF1dG8mIGNo
aWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyVGV4dD4oKnRoaXMpKQorICAgICAgICBjaGlsZC5z
dHlsZURpZENoYW5nZShkaWZmLCAmb2xkU3R5bGUuZ2V0KCkpOwogCiAgICAgLy8gRklYTUU6IHx0
aGlzfCBtaWdodCBiZSBkZXN0cm95ZWQgaGVyZS4gVGhpcyBjYW4gY3VycmVudGx5IGhhcHBlbiBm
b3IgYSBSZW5kZXJUZXh0RnJhZ21lbnQgd2hlbgogICAgIC8vIGl0cyBmaXJzdC1sZXR0ZXIgYmxv
Y2sgZ2V0cyBhbiB1cGRhdGUgaW4gUmVuZGVyVGV4dEZyYWdtZW50OjpzdHlsZURpZENoYW5nZS4g
Rm9yIFJlbmRlclRleHRGcmFnbWVudChzKSwKQEAgLTY3OCw5ICs2NzYsOCBAQCBzdGF0aWMgdm9p
ZCBhZGRMYXllcnMoUmVuZGVyRWxlbWVudCYgcmVuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBhdXRvIGNoaWxkcmVuID0gY2hpbGRyZW5PZlR5cGU8UmVuZGVyRWxlbWVudD4ocmVuZGVy
ZXIpOwotICAgIGZvciAoYXV0byBjaGlsZCA9IGNoaWxkcmVuLmJlZ2luKCksIGVuZCA9IGNoaWxk
cmVuLmVuZCgpOyBjaGlsZCAhPSBlbmQ7ICsrY2hpbGQpCi0gICAgICAgIGFkZExheWVycygqY2hp
bGQsIHBhcmVudExheWVyLCBuZXdPYmplY3QsIGJlZm9yZUNoaWxkKTsKKyAgICBmb3IgKGF1dG8m
IGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIpKQorICAgICAg
ICBhZGRMYXllcnMoY2hpbGQsIHBhcmVudExheWVyLCBuZXdPYmplY3QsIGJlZm9yZUNoaWxkKTsK
IH0KIAogdm9pZCBSZW5kZXJFbGVtZW50OjphZGRMYXllcnMoUmVuZGVyTGF5ZXIqIHBhcmVudExh
eWVyKQpAQCAtNzAzLDkgKzcwMCw4IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6cmVtb3ZlTGF5ZXJz
KFJlbmRlckwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2hpbGRyZW4gPSBj
aGlsZHJlbk9mVHlwZTxSZW5kZXJFbGVtZW50PigqdGhpcyk7Ci0gICAgZm9yIChhdXRvIGNoaWxk
ID0gY2hpbGRyZW4uYmVnaW4oKSwgZW5kID0gY2hpbGRyZW4uZW5kKCk7IGNoaWxkICE9IGVuZDsg
KytjaGlsZCkKLSAgICAgICAgY2hpbGQtPnJlbW92ZUxheWVycyhwYXJlbnRMYXllcik7CisgICAg
Zm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlckVsZW1lbnQ+KCp0aGlzKSkK
KyAgICAgICAgY2hpbGQucmVtb3ZlTGF5ZXJzKHBhcmVudExheWVyKTsKIH0KIAogdm9pZCBSZW5k
ZXJFbGVtZW50Ojptb3ZlTGF5ZXJzKFJlbmRlckxheWVyKiBvbGRQYXJlbnQsIFJlbmRlckxheWVy
KiBuZXdQYXJlbnQpCkBAIC03MjIsOSArNzE4LDggQEAgdm9pZCBSZW5kZXJFbGVtZW50Ojptb3Zl
TGF5ZXJzKFJlbmRlckxheQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjaGls
ZHJlbiA9IGNoaWxkcmVuT2ZUeXBlPFJlbmRlckVsZW1lbnQ+KCp0aGlzKTsKLSAgICBmb3IgKGF1
dG8gY2hpbGQgPSBjaGlsZHJlbi5iZWdpbigpLCBlbmQgPSBjaGlsZHJlbi5lbmQoKTsgY2hpbGQg
IT0gZW5kOyArK2NoaWxkKQotICAgICAgICBjaGlsZC0+bW92ZUxheWVycyhvbGRQYXJlbnQsIG5l
d1BhcmVudCk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlckVs
ZW1lbnQ+KCp0aGlzKSkKKyAgICAgICAgY2hpbGQubW92ZUxheWVycyhvbGRQYXJlbnQsIG5ld1Bh
cmVudCk7CiB9CiAKIFJlbmRlckxheWVyKiBSZW5kZXJFbGVtZW50OjpmaW5kTmV4dExheWVyKFJl
bmRlckxheWVyKiBwYXJlbnRMYXllciwgUmVuZGVyT2JqZWN0KiBzdGFydFBvaW50LCBib29sIGNo
ZWNrUGFyZW50KQpAQCAtNzgwLDkgKzc3NSw3IEBAIGJvb2wgUmVuZGVyRWxlbWVudDo6bGF5ZXJD
cmVhdGlvbkFsbG93ZWQKIHZvaWQgUmVuZGVyRWxlbWVudDo6cHJvcGFnYXRlU3R5bGVUb0Fub255
bW91c0NoaWxkcmVuKFN0eWxlUHJvcGFnYXRpb25UeXBlIHByb3BhZ2F0aW9uVHlwZSkKIHsKICAg
ICAvLyBGSVhNRTogV2UgY291bGQgc2F2ZSB0aGlzIGNhbGwgd2hlbiB0aGUgY2hhbmdlIG9ubHkg
YWZmZWN0ZWQgbm9uLWluaGVyaXRlZCBwcm9wZXJ0aWVzLgotICAgIGF1dG8gY2hpbGRyZW4gPSBj
aGlsZHJlbk9mVHlwZTxSZW5kZXJFbGVtZW50PigqdGhpcyk7Ci0gICAgZm9yIChhdXRvIGNoaWxk
ID0gY2hpbGRyZW4uYmVnaW4oKSwgZW5kID0gY2hpbGRyZW4uZW5kKCk7IGNoaWxkICE9IGVuZDsg
KytjaGlsZCkgewotICAgICAgICBSZW5kZXJFbGVtZW50JiBlbGVtZW50Q2hpbGQgPSAqY2hpbGQ7
CisgICAgZm9yIChhdXRvJiBlbGVtZW50Q2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJFbGVt
ZW50PigqdGhpcykpIHsKICAgICAgICAgaWYgKCFlbGVtZW50Q2hpbGQuaXNBbm9ueW1vdXMoKSB8
fCBlbGVtZW50Q2hpbGQuc3R5bGUoKS5zdHlsZVR5cGUoKSAhPSBOT1BTRVVETykKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJh
bWVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
cmFtZVNldC5jcHAJKHJldmlzaW9uIDE2MDU1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGcmFtZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxNCwxMCArNzE0LDkgQEAg
Ym9vbCBSZW5kZXJGcmFtZVNldDo6dXNlclJlc2l6ZShNb3VzZUV2ZQogdm9pZCBSZW5kZXJGcmFt
ZVNldDo6c2V0SXNSZXNpemluZyhib29sIGlzUmVzaXppbmcpCiB7CiAgICAgbV9pc1Jlc2l6aW5n
ID0gaXNSZXNpemluZzsKLSAgICBhdXRvIGFuY2VzdG9ycyA9IGFuY2VzdG9yc09mVHlwZTxSZW5k
ZXJGcmFtZVNldD4oKnRoaXMpOwotICAgIGZvciAoYXV0byBhbmNlc3RvciA9IGFuY2VzdG9ycy5i
ZWdpbigpLCBlbmQgPSBhbmNlc3RvcnMuZW5kKCk7IGFuY2VzdG9yICE9IGVuZDsgKythbmNlc3Rv
cikKLSAgICAgICAgYW5jZXN0b3ItPm1faXNDaGlsZFJlc2l6aW5nID0gaXNSZXNpemluZzsKLSAg
ICBmcmFtZSgpLmV2ZW50SGFuZGxlcigpLnNldFJlc2l6aW5nRnJhbWVTZXQoaXNSZXNpemluZyA/
ICZmcmFtZVNldEVsZW1lbnQoKSA6IDApOworICAgIGZvciAoYXV0byYgYW5jZXN0b3IgOiBhbmNl
c3RvcnNPZlR5cGU8UmVuZGVyRnJhbWVTZXQ+KCp0aGlzKSkKKyAgICAgICAgYW5jZXN0b3IubV9p
c0NoaWxkUmVzaXppbmcgPSBpc1Jlc2l6aW5nOworICAgIGZyYW1lKCkuZXZlbnRIYW5kbGVyKCku
c2V0UmVzaXppbmdGcmFtZVNldChpc1Jlc2l6aW5nID8gJmZyYW1lU2V0RWxlbWVudCgpIDogbnVs
bHB0cik7CiB9CiAKIGJvb2wgUmVuZGVyRnJhbWVTZXQ6OmlzUmVzaXppbmdSb3coKSBjb25zdApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9u
IDE2MDU1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDc5LDkgKzEwNzksOCBAQCBMYXlvdXRSZWN0IFJlbmRlcklubGlu
ZTo6Y2xpcHBlZE92ZXJmbG93CiAgICAgY2ItPmNvbXB1dGVSZWN0Rm9yUmVwYWludChyZXBhaW50
Q29udGFpbmVyLCByZXBhaW50UmVjdCk7CiAKICAgICBpZiAob3V0bGluZVNpemUpIHsKLSAgICAg
ICAgYXV0byBjaGlsZHJlbiA9IGNoaWxkcmVuT2ZUeXBlPFJlbmRlckVsZW1lbnQ+KCp0aGlzKTsK
LSAgICAgICAgZm9yIChhdXRvIGNoaWxkID0gY2hpbGRyZW4uYmVnaW4oKSwgZW5kID0gY2hpbGRy
ZW4uZW5kKCk7IGNoaWxkICE9IGVuZDsgKytjaGlsZCkKLSAgICAgICAgICAgIHJlcGFpbnRSZWN0
LnVuaXRlKGNoaWxkLT5yZWN0V2l0aE91dGxpbmVGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIs
IG91dGxpbmVTaXplKSk7CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlw
ZTxSZW5kZXJFbGVtZW50PigqdGhpcykpCisgICAgICAgICAgICByZXBhaW50UmVjdC51bml0ZShj
aGlsZC5yZWN0V2l0aE91dGxpbmVGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIsIG91dGxpbmVT
aXplKSk7CiAKICAgICAgICAgaWYgKFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250aW51YXRpb24g
PSB0aGlzLT5jb250aW51YXRpb24oKSkgewogICAgICAgICAgICAgaWYgKCFjb250aW51YXRpb24t
PmlzSW5saW5lKCkgJiYgY29udGludWF0aW9uLT5wYXJlbnQoKSkKQEAgLTEwOTUsOSArMTA5NCw4
IEBAIExheW91dFJlY3QgUmVuZGVySW5saW5lOjpjbGlwcGVkT3ZlcmZsb3cKIExheW91dFJlY3Qg
UmVuZGVySW5saW5lOjpyZWN0V2l0aE91dGxpbmVGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVy
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIExheW91dFVuaXQgb3V0bGluZVdpZHRoKSBj
b25zdAogewogICAgIExheW91dFJlY3QgcihSZW5kZXJCb3hNb2RlbE9iamVjdDo6cmVjdFdpdGhP
dXRsaW5lRm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyLCBvdXRsaW5lV2lkdGgpKTsKLSAgICBh
dXRvIGNoaWxkcmVuID0gY2hpbGRyZW5PZlR5cGU8UmVuZGVyRWxlbWVudD4oKnRoaXMpOwotICAg
IGZvciAoYXV0byBjaGlsZCA9IGNoaWxkcmVuLmJlZ2luKCksIGVuZCA9IGNoaWxkcmVuLmVuZCgp
OyBjaGlsZCAhPSBlbmQ7ICsrY2hpbGQpCi0gICAgICAgIHIudW5pdGUoY2hpbGQtPnJlY3RXaXRo
T3V0bGluZUZvclJlcGFpbnQocmVwYWludENvbnRhaW5lciwgb3V0bGluZVdpZHRoKSk7CisgICAg
Zm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlckVsZW1lbnQ+KCp0aGlzKSkK
KyAgICAgICAgci51bml0ZShjaGlsZC5yZWN0V2l0aE91dGxpbmVGb3JSZXBhaW50KHJlcGFpbnRD
b250YWluZXIsIG91dGxpbmVXaWR0aCkpOwogICAgIHJldHVybiByOwogfQogCkBAIC0xNDMzLDE3
ICsxNDMxLDE2IEBAIHZvaWQgUmVuZGVySW5saW5lOjphZGRGb2N1c1JpbmdSZWN0cyhWZWMKICAg
ICBBYnNvbHV0ZVJlY3RzR2VuZXJhdG9yQ29udGV4dCBjb250ZXh0KHJlY3RzLCBhZGRpdGlvbmFs
T2Zmc2V0KTsKICAgICBnZW5lcmF0ZUxpbmVCb3hSZWN0cyhjb250ZXh0KTsKIAotICAgIGF1dG8g
Y2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxSZW5kZXJFbGVtZW50PigqdGhpcyk7Ci0gICAgZm9y
IChhdXRvIGNoaWxkID0gY2hpbGRyZW4uYmVnaW4oKSwgZW5kID0gY2hpbGRyZW4uZW5kKCk7IGNo
aWxkICE9IGVuZDsgKytjaGlsZCkgewotICAgICAgICBpZiAoY2hpbGQtPmlzTGlzdE1hcmtlcigp
KQorICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJFbGVtZW50Pigq
dGhpcykpIHsKKyAgICAgICAgaWYgKGNoaWxkLmlzTGlzdE1hcmtlcigpKQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIEZsb2F0UG9pbnQgcG9zKGFkZGl0aW9uYWxPZmZzZXQpOwogICAg
ICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jt
cy4KLSAgICAgICAgaWYgKGNoaWxkLT5oYXNMYXllcigpKQotICAgICAgICAgICAgcG9zID0gY2hp
bGQtPmxvY2FsVG9Db250YWluZXJQb2ludChGbG9hdFBvaW50KCksIHBhaW50Q29udGFpbmVyKTsK
LSAgICAgICAgZWxzZSBpZiAoY2hpbGQtPmlzQm94KCkpCi0gICAgICAgICAgICBwb3MubW92ZSh0
b1JlbmRlckJveCgqY2hpbGQpLmxvY2F0aW9uT2Zmc2V0KCkpOwotICAgICAgICBjaGlsZC0+YWRk
Rm9jdXNSaW5nUmVjdHMocmVjdHMsIGZsb29yZWRJbnRQb2ludChwb3MpLCBwYWludENvbnRhaW5l
cik7CisgICAgICAgIGlmIChjaGlsZC5oYXNMYXllcigpKQorICAgICAgICAgICAgcG9zID0gY2hp
bGQubG9jYWxUb0NvbnRhaW5lclBvaW50KEZsb2F0UG9pbnQoKSwgcGFpbnRDb250YWluZXIpOwor
ICAgICAgICBlbHNlIGlmIChjaGlsZC5pc0JveCgpKQorICAgICAgICAgICAgcG9zLm1vdmUodG9S
ZW5kZXJCb3goY2hpbGQpLmxvY2F0aW9uT2Zmc2V0KCkpOworICAgICAgICBjaGlsZC5hZGRGb2N1
c1JpbmdSZWN0cyhyZWN0cywgZmxvb3JlZEludFBvaW50KHBvcyksIHBhaW50Q29udGFpbmVyKTsK
ICAgICB9CiAKICAgICBpZiAoUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRpbnVhdGlvbiA9IHRo
aXMtPmNvbnRpbnVhdGlvbigpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZS5jcHAJKHJldmlzaW9uIDE2MDU1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0OCwxMCArNDQ4LDkgQEAgdm9p
ZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKIAogICAgIGJvb2wgY29sbGFwc2luZyA9IGNvbGxhcHNl
Qm9yZGVycygpOwogCi0gICAgYXV0byBjaGlsZHJlbiA9IGNoaWxkcmVuT2ZUeXBlPFJlbmRlckVs
ZW1lbnQ+KCp0aGlzKTsKLSAgICBmb3IgKGF1dG8gY2hpbGQgPSBjaGlsZHJlbi5iZWdpbigpLCBl
bmQgPSBjaGlsZHJlbi5lbmQoKTsgY2hpbGQgIT0gZW5kOyArK2NoaWxkKSB7Ci0gICAgICAgIGlm
IChjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkgewotICAgICAgICAgICAgUmVuZGVyVGFibGVTZWN0
aW9uJiBzZWN0aW9uID0gdG9SZW5kZXJUYWJsZVNlY3Rpb24oKmNoaWxkKTsKKyAgICBmb3IgKGF1
dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyRWxlbWVudD4oKnRoaXMpKSB7CisgICAg
ICAgIGlmIChjaGlsZC5pc1RhYmxlU2VjdGlvbigpKSB7CisgICAgICAgICAgICBSZW5kZXJUYWJs
ZVNlY3Rpb24mIHNlY3Rpb24gPSB0b1JlbmRlclRhYmxlU2VjdGlvbihjaGlsZCk7CiAgICAgICAg
ICAgICBpZiAobV9jb2x1bW5Mb2dpY2FsV2lkdGhDaGFuZ2VkKQogICAgICAgICAgICAgICAgIHNl
Y3Rpb24uc2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwogICAgICAgICAgICAgc2Vj
dGlvbi5sYXlvdXRJZk5lZWRlZCgpOwpAQCAtNDU5LDkgKzQ1OCw5IEBAIHZvaWQgUmVuZGVyVGFi
bGU6OmxheW91dCgpCiAgICAgICAgICAgICBpZiAoY29sbGFwc2luZykKICAgICAgICAgICAgICAg
ICBzZWN0aW9uLnJlY2FsY091dGVyQm9yZGVyKCk7CiAgICAgICAgICAgICBBU1NFUlQoIXNlY3Rp
b24ubmVlZHNMYXlvdXQoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPmlzUmVuZGVyVGFi
bGVDb2woKSkgewotICAgICAgICAgICAgdG9SZW5kZXJUYWJsZUNvbCgqY2hpbGQpLmxheW91dElm
TmVlZGVkKCk7Ci0gICAgICAgICAgICBBU1NFUlQoIWNoaWxkLT5uZWVkc0xheW91dCgpKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChjaGlsZC5pc1JlbmRlclRhYmxlQ29sKCkpIHsKKyAgICAgICAgICAg
IHRvUmVuZGVyVGFibGVDb2woY2hpbGQpLmxheW91dElmTmVlZGVkKCk7CisgICAgICAgICAgICBB
U1NFUlQoIWNoaWxkLm5lZWRzTGF5b3V0KCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01ODYs
OSArNTg1LDggQEAgdm9pZCBSZW5kZXJUYWJsZTo6cmVjYWxjQ29sbGFwc2VkQm9yZGVycwogICAg
IG1fY29sbGFwc2VkQm9yZGVyc1ZhbGlkID0gdHJ1ZTsKICAgICBtX2NvbGxhcHNlZEJvcmRlcnMu
Y2xlYXIoKTsKIAotICAgIGF1dG8gc2VjdGlvbnMgPSBjaGlsZHJlbk9mVHlwZTxSZW5kZXJUYWJs
ZVNlY3Rpb24+KCp0aGlzKTsKLSAgICBmb3IgKGF1dG8gc2VjdGlvbiA9IHNlY3Rpb25zLmJlZ2lu
KCksIGVuZCA9IHNlY3Rpb25zLmVuZCgpOyBzZWN0aW9uICE9IGVuZDsgKytzZWN0aW9uKSB7Ci0g
ICAgICAgIGZvciAoUmVuZGVyVGFibGVSb3cqIHJvdyA9IHNlY3Rpb24tPmZpcnN0Um93KCk7IHJv
dzsgcm93ID0gcm93LT5uZXh0Um93KCkpIHsKKyAgICBmb3IgKGF1dG8mIHNlY3Rpb24gOiBjaGls
ZHJlbk9mVHlwZTxSZW5kZXJUYWJsZVNlY3Rpb24+KCp0aGlzKSkgeworICAgICAgICBmb3IgKFJl
bmRlclRhYmxlUm93KiByb3cgPSBzZWN0aW9uLmZpcnN0Um93KCk7IHJvdzsgcm93ID0gcm93LT5u
ZXh0Um93KCkpIHsKICAgICAgICAgICAgIGZvciAoUmVuZGVyVGFibGVDZWxsKiBjZWxsID0gcm93
LT5maXJzdENlbGwoKTsgY2VsbDsgY2VsbCA9IGNlbGwtPm5leHRDZWxsKCkpIHsKICAgICAgICAg
ICAgICAgICBBU1NFUlQoY2VsbC0+dGFibGUoKSA9PSB0aGlzKTsKICAgICAgICAgICAgICAgICBj
ZWxsLT5jb2xsZWN0Qm9yZGVyVmFsdWVzKG1fY29sbGFwc2VkQm9yZGVycyk7CkBAIC02NjksOSAr
NjY3LDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJgogICAgIGlu
Zm8ucGhhc2UgPSBwYWludFBoYXNlOwogICAgIGluZm8udXBkYXRlU3VidHJlZVBhaW50Um9vdEZv
ckNoaWxkcmVuKHRoaXMpOwogCi0gICAgYXV0byBib3hDaGlsZHJlbiA9IGNoaWxkcmVuT2ZUeXBl
PFJlbmRlckJveD4oKnRoaXMpOwotICAgIGZvciAoYXV0byBjaGlsZCA9IGJveENoaWxkcmVuLmJl
Z2luKCksIGVuZCA9IGJveENoaWxkcmVuLmVuZCgpOyBjaGlsZCAhPSBlbmQ7ICsrY2hpbGQpIHsK
LSAgICAgICAgUmVuZGVyQm94JiBib3ggPSAqY2hpbGQ7CisgICAgZm9yIChhdXRvJiBib3ggOiBj
aGlsZHJlbk9mVHlwZTxSZW5kZXJCb3g+KCp0aGlzKSkgewogICAgICAgICBpZiAoIWJveC5oYXNT
ZWxmUGFpbnRpbmdMYXllcigpICYmIChib3guaXNUYWJsZVNlY3Rpb24oKSB8fCBib3guaXNUYWJs
ZUNhcHRpb24oKSkpIHsKICAgICAgICAgICAgIExheW91dFBvaW50IGNoaWxkUG9pbnQgPSBmbGlw
Rm9yV3JpdGluZ01vZGVGb3JDaGlsZCgmYm94LCBwYWludE9mZnNldCk7CiAgICAgICAgICAgICBi
b3gucGFpbnQoaW5mbywgY2hpbGRQb2ludCk7CkBAIC04MDgsMTIgKzgwNCwxMSBAQCB2b2lkIFJl
bmRlclRhYmxlOjpzcGxpdENvbHVtbih1bnNpZ25lZCBwCiAKICAgICAvLyBQcm9wYWdhdGUgdGhl
IGNoYW5nZSBpbiBvdXIgY29sdW1ucyByZXByZXNlbnRhdGlvbiB0byB0aGUgc2VjdGlvbnMgdGhh
dCBkb24ndCBuZWVkCiAgICAgLy8gY2VsbCByZWNhbGMuIElmIHRoZXkgZG8sIHRoZXkgd2lsbCBi
ZSBzeW5jZWQgdXAgZGlyZWN0bHkgd2l0aCBtX2NvbHVtbnMgbGF0ZXIuCi0gICAgYXV0byBzZWN0
aW9ucyA9IGNoaWxkcmVuT2ZUeXBlPFJlbmRlclRhYmxlU2VjdGlvbj4oKnRoaXMpOwotICAgIGZv
ciAoYXV0byBzZWN0aW9uID0gc2VjdGlvbnMuYmVnaW4oKSwgZW5kID0gc2VjdGlvbnMuZW5kKCk7
IHNlY3Rpb24gIT0gZW5kOyArK3NlY3Rpb24pIHsKLSAgICAgICAgaWYgKHNlY3Rpb24tPm5lZWRz
Q2VsbFJlY2FsYygpKQorICAgIGZvciAoYXV0byYgc2VjdGlvbiA6IGNoaWxkcmVuT2ZUeXBlPFJl
bmRlclRhYmxlU2VjdGlvbj4oKnRoaXMpKSB7CisgICAgICAgIGlmIChzZWN0aW9uLm5lZWRzQ2Vs
bFJlY2FsYygpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgc2VjdGlvbi0+c3Bs
aXRDb2x1bW4ocG9zaXRpb24sIGZpcnN0U3Bhbik7CisgICAgICAgIHNlY3Rpb24uc3BsaXRDb2x1
bW4ocG9zaXRpb24sIGZpcnN0U3Bhbik7CiAgICAgfQogCiAgICAgbV9jb2x1bW5Qb3MuZ3Jvdyhu
dW1FZmZDb2xzKCkgKyAxKTsKQEAgLTgyNiwxMiArODIxLDExIEBAIHZvaWQgUmVuZGVyVGFibGU6
OmFwcGVuZENvbHVtbih1bnNpZ25lZCAKIAogICAgIC8vIFByb3BhZ2F0ZSB0aGUgY2hhbmdlIGlu
IG91ciBjb2x1bW5zIHJlcHJlc2VudGF0aW9uIHRvIHRoZSBzZWN0aW9ucyB0aGF0IGRvbid0IG5l
ZWQKICAgICAvLyBjZWxsIHJlY2FsYy4gSWYgdGhleSBkbywgdGhleSB3aWxsIGJlIHN5bmNlZCB1
cCBkaXJlY3RseSB3aXRoIG1fY29sdW1ucyBsYXRlci4KLSAgICBhdXRvIHNlY3Rpb25zID0gY2hp
bGRyZW5PZlR5cGU8UmVuZGVyVGFibGVTZWN0aW9uPigqdGhpcyk7Ci0gICAgZm9yIChhdXRvIHNl
Y3Rpb24gPSBzZWN0aW9ucy5iZWdpbigpLCBlbmQgPSBzZWN0aW9ucy5lbmQoKTsgc2VjdGlvbiAh
PSBlbmQ7ICsrc2VjdGlvbikgewotICAgICAgICBpZiAoc2VjdGlvbi0+bmVlZHNDZWxsUmVjYWxj
KCkpCisgICAgZm9yIChhdXRvJiBzZWN0aW9uIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyVGFibGVT
ZWN0aW9uPigqdGhpcykpIHsKKyAgICAgICAgaWYgKHNlY3Rpb24ubmVlZHNDZWxsUmVjYWxjKCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBzZWN0aW9uLT5hcHBlbmRDb2x1bW4o
bmV3Q29sdW1uSW5kZXgpOworICAgICAgICBzZWN0aW9uLmFwcGVuZENvbHVtbihuZXdDb2x1bW5J
bmRleCk7CiAgICAgfQogCiAgICAgbV9jb2x1bW5Qb3MuZ3JvdyhudW1FZmZDb2xzKCkgKyAxKTsK
QEAgLTk0NCw5ICs5MzgsOCBAQCB2b2lkIFJlbmRlclRhYmxlOjpyZWNhbGNTZWN0aW9ucygpIGNv
bnN0CiAKICAgICAvLyByZXBhaXIgY29sdW1uIGNvdW50IChhZGRDaGlsZCBjYW4gZ3JvdyBpdCB0
b28gbXVjaCwgYmVjYXVzZSBpdCBhbHdheXMgYWRkcyBlbGVtZW50cyB0byB0aGUgbGFzdCByb3cg
b2YgYSBzZWN0aW9uKQogICAgIHVuc2lnbmVkIG1heENvbHMgPSAwOwotICAgIGF1dG8gc2VjdGlv
bnMgPSBjaGlsZHJlbk9mVHlwZTxSZW5kZXJUYWJsZVNlY3Rpb24+KCp0aGlzKTsKLSAgICBmb3Ig
KGF1dG8gc2VjdGlvbiA9IHNlY3Rpb25zLmJlZ2luKCksIGVuZCA9IHNlY3Rpb25zLmVuZCgpOyBz
ZWN0aW9uICE9IGVuZDsgKytzZWN0aW9uKSB7Ci0gICAgICAgIHVuc2lnbmVkIHNlY3Rpb25Db2xz
ID0gc2VjdGlvbi0+bnVtQ29sdW1ucygpOworICAgIGZvciAoYXV0byYgc2VjdGlvbiA6IGNoaWxk
cmVuT2ZUeXBlPFJlbmRlclRhYmxlU2VjdGlvbj4oKnRoaXMpKSB7CisgICAgICAgIHVuc2lnbmVk
IHNlY3Rpb25Db2xzID0gc2VjdGlvbi5udW1Db2x1bW5zKCk7CiAgICAgICAgIGlmIChzZWN0aW9u
Q29scyA+IG1heENvbHMpCiAgICAgICAgICAgICBtYXhDb2xzID0gc2VjdGlvbkNvbHM7CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVu
dC5jcHAJKHJldmlzaW9uIDE2MDU1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0RnJhZ21lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMTAgKzExMiw5IEBAIFJl
bmRlckJsb2NrKiBSZW5kZXJUZXh0RnJhZ21lbnQ6OmJsb2NrRm8KIHsKICAgICBpZiAoIW1fZmly
c3RMZXR0ZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8gYW5jZXN0b3JCbG9j
a3MgPSBhbmNlc3RvcnNPZlR5cGU8UmVuZGVyQmxvY2s+KCptX2ZpcnN0TGV0dGVyKTsKLSAgICBm
b3IgKGF1dG8gYmxvY2sgPSBhbmNlc3RvckJsb2Nrcy5iZWdpbigpLCBlbmQgPSBhbmNlc3RvckJs
b2Nrcy5lbmQoKTsgYmxvY2sgIT0gZW5kOyArK2Jsb2NrKSB7Ci0gICAgICAgIGlmIChibG9jay0+
c3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpICYmIGJsb2NrLT5jYW5IYXZlQ2hp
bGRyZW4oKSkKLSAgICAgICAgICAgIHJldHVybiAmKmJsb2NrOworICAgIGZvciAoYXV0byYgYmxv
Y2sgOiBhbmNlc3RvcnNPZlR5cGU8UmVuZGVyQmxvY2s+KCptX2ZpcnN0TGV0dGVyKSkgeworICAg
ICAgICBpZiAoYmxvY2suc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpICYmIGJs
b2NrLmNhbkhhdmVDaGlsZHJlbigpKQorICAgICAgICAgICAgcmV0dXJuICZibG9jazsKICAgICB9
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiAxNjA1NTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkx
NywxMiArOTE3LDExIEBAIHN0YXRpYyB2b2lkIHdyaXRlQ291bnRlclZhbHVlc0Zyb21DaGlsZHIK
IHsKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gY291bnRlcnMg
PSBjaGlsZHJlbk9mVHlwZTxSZW5kZXJDb3VudGVyPigqcGFyZW50KTsKLSAgICBmb3IgKGF1dG8g
Y291bnRlciA9IGNvdW50ZXJzLmJlZ2luKCksIGVuZCA9IGNvdW50ZXJzLmVuZCgpOyBjb3VudGVy
ICE9IGVuZDsgKytjb3VudGVyKSB7CisgICAgZm9yIChhdXRvJiBjb3VudGVyIDogY2hpbGRyZW5P
ZlR5cGU8UmVuZGVyQ291bnRlcj4oKnBhcmVudCkpIHsKICAgICAgICAgaWYgKCFpc0ZpcnN0Q291
bnRlcikKICAgICAgICAgICAgIHN0cmVhbSA8PCAiICI7CiAgICAgICAgIGlzRmlyc3RDb3VudGVy
ID0gZmFsc2U7Ci0gICAgICAgIFN0cmluZyBzdHIoY291bnRlci0+dGV4dCgpKTsKKyAgICAgICAg
U3RyaW5nIHN0cihjb3VudGVyLnRleHQoKSk7CiAgICAgICAgIHN0cmVhbSA8PCBzdHI7CiAgICAg
fQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkocmV2aXNp
b24gMTYwNTUwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMTAsOSArMzEwLDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpsYXlvdXQo
KQogICAgIGlmIChyZWxheW91dENoaWxkcmVuKSB7CiAgICAgICAgIHNldENoaWxkTmVlZHNMYXlv
dXQoTWFya09ubHlUaGlzKTsKIAotICAgICAgICBhdXRvIGJveENoaWxkcmVuID0gY2hpbGRyZW5P
ZlR5cGU8UmVuZGVyQm94PigqdGhpcyk7Ci0gICAgICAgIGZvciAoYXV0byBjaGlsZCA9IGJveENo
aWxkcmVuLmJlZ2luKCksIGVuZCA9IGJveENoaWxkcmVuLmVuZCgpOyBjaGlsZCAhPSBlbmQ7ICsr
Y2hpbGQpIHsKLSAgICAgICAgICAgIFJlbmRlckJveCYgYm94ID0gKmNoaWxkOworICAgICAgICBm
b3IgKGF1dG8mIGJveCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlckJveD4oKnRoaXMpKSB7CiAgICAg
ICAgICAgICBpZiAoYm94Lmhhc1JlbGF0aXZlTG9naWNhbEhlaWdodCgpCiAgICAgICAgICAgICAg
ICAgfHwgYm94Lmhhc1ZpZXdwb3J0UGVyY2VudGFnZUxvZ2ljYWxIZWlnaHQoKQogICAgICAgICAg
ICAgICAgIHx8IGJveC5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKS5pc1BlcmNlbnQoKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJv
b3QuY3BwCShyZXZpc2lvbiAxNjA1NTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsOSArMTg0LDgg
QEAgUmVuZGVyQm94KiBSZW5kZXJNYXRoTUxSb290OjppbmRleCgpIGNvbgogCiB2b2lkIFJlbmRl
ck1hdGhNTFJvb3Q6OmxheW91dCgpCiB7Ci0gICAgYXV0byBib3hDaGlsZHJlbiA9IGNoaWxkcmVu
T2ZUeXBlPFJlbmRlckJveD4oKnRoaXMpOwotICAgIGZvciAoYXV0byBib3ggPSBib3hDaGlsZHJl
bi5iZWdpbigpLCBlbmQgPSBib3hDaGlsZHJlbi5lbmQoKTsgYm94ICE9IGVuZDsgKytib3gpCi0g
ICAgICAgIGJveC0+bGF5b3V0SWZOZWVkZWQoKTsKKyAgICBmb3IgKGF1dG8mIGJveCA6IGNoaWxk
cmVuT2ZUeXBlPFJlbmRlckJveD4oKnRoaXMpKQorICAgICAgICBib3gubGF5b3V0SWZOZWVkZWQo
KTsKIAogICAgIGludCBiYXNlSGVpZ2h0ID0gZmlyc3RDaGlsZCgpICYmIGZpcnN0Q2hpbGQoKS0+
aXNCb3goKSA/IHJvdW5kVG9JbnQodG9SZW5kZXJCb3goZmlyc3RDaGlsZCgpKS0+bG9naWNhbEhl
aWdodCgpKSA6IHN0eWxlKCkuZm9udFNpemUoKTsKICAgICBpbnQgZnJvbnRXaWR0aCA9IGxyb3Vu
ZGYoZ0Zyb250V2lkdGhFbXMgKiBzdHlsZSgpLmZvbnRTaXplKCkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcAkocmV2
aXNpb24gMTYwNTUwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxSb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw5ICs3MSw4IEBAIHZvaWQgUmVuZGVy
TWF0aE1MUm93OjpsYXlvdXQoKQogICAgICAgICBzdHJldGNoTG9naWNhbEhlaWdodCA9IHN0eWxl
KCkuZm9udFNpemUoKTsKICAgICAKICAgICAvLyBTZXQgdGhlIHNpemVzIG9mIChwb3NzaWJseSBl
bWJlbGxpc2hlZCkgc3RyZXRjaHkgb3BlcmF0b3IgY2hpbGRyZW4uCi0gICAgYXV0byBjaGlsZHJl
biA9IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck1hdGhNTEJsb2NrPigqdGhpcyk7Ci0gICAgZm9yIChh
dXRvIGNoaWxkID0gY2hpbGRyZW4uYmVnaW4oKSwgZW5kID0gY2hpbGRyZW4uZW5kKCk7IGNoaWxk
ICE9IGVuZDsgKytjaGlsZCkgewotICAgICAgICBpZiAoYXV0byByZW5kZXJNbyA9IGNoaWxkLT51
bmVtYmVsbGlzaGVkT3BlcmF0b3IoKSkgeworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJl
bk9mVHlwZTxSZW5kZXJNYXRoTUxCbG9jaz4oKnRoaXMpKSB7CisgICAgICAgIGlmIChhdXRvIHJl
bmRlck1vID0gY2hpbGQudW5lbWJlbGxpc2hlZE9wZXJhdG9yKCkpIHsKICAgICAgICAgICAgIGlm
IChyZW5kZXJNby0+c3RyZXRjaEhlaWdodCgpICE9IHN0cmV0Y2hMb2dpY2FsSGVpZ2h0KQogICAg
ICAgICAgICAgICAgIHJlbmRlck1vLT5zdHJldGNoVG9IZWlnaHQoc3RyZXRjaExvZ2ljYWxIZWln
aHQpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0NvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCShyZXZpc2lvbiAxNjA1NTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0MCw5ICsxNDAsOCBAQCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQoUGFp
bnRJbmZvCiAKICAgICAgICAgaWYgKGNvbnRpbnVlUmVuZGVyaW5nKSB7CiAgICAgICAgICAgICBj
aGlsZFBhaW50SW5mby51cGRhdGVTdWJ0cmVlUGFpbnRSb290Rm9yQ2hpbGRyZW4odGhpcyk7Ci0g
ICAgICAgICAgICBhdXRvIGNoaWxkcmVuID0gY2hpbGRyZW5PZlR5cGU8UmVuZGVyRWxlbWVudD4o
KnRoaXMpOwotICAgICAgICAgICAgZm9yIChhdXRvIGNoaWxkID0gY2hpbGRyZW4uYmVnaW4oKSwg
ZW5kID0gY2hpbGRyZW4uZW5kKCk7IGNoaWxkICE9IGVuZDsgKytjaGlsZCkKLSAgICAgICAgICAg
ICAgICBjaGlsZC0+cGFpbnQoY2hpbGRQYWludEluZm8sIEludFBvaW50KCkpOworICAgICAgICAg
ICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlckVsZW1lbnQ+KCp0aGlz
KSkKKyAgICAgICAgICAgICAgICBjaGlsZC5wYWludChjaGlsZFBhaW50SW5mbywgSW50UG9pbnQo
KSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCShyZXZp
c2lvbiAxNjA1NTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlQ2xpcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMCw5ICsyMjAsNyBAQCBib29s
IFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6ZHJhd0NvbnRlCiAgICAgdmlldygpLmZyYW1lVmll
dygpLnNldFBhaW50QmVoYXZpb3Iob2xkQmVoYXZpb3IgfCBQYWludEJlaGF2aW9yUmVuZGVyaW5n
U1ZHTWFzayk7CiAKICAgICAvLyBEcmF3IGFsbCBjbGlwUGF0aCBjaGlsZHJlbiBpbnRvIGEgZ2xv
YmFsIG1hc2suCi0gICAgYXV0byBjaGlsZHJlbiA9IGNoaWxkcmVuT2ZUeXBlPFNWR0VsZW1lbnQ+
KGNsaXBQYXRoRWxlbWVudCgpKTsKLSAgICBmb3IgKGF1dG8gaXQgPSBjaGlsZHJlbi5iZWdpbigp
LCBlbmQgPSBjaGlsZHJlbi5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFNWR0Vs
ZW1lbnQmIGNoaWxkID0gKml0OworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlw
ZTxTVkdFbGVtZW50PihjbGlwUGF0aEVsZW1lbnQoKSkpIHsKICAgICAgICAgYXV0byByZW5kZXJl
ciA9IGNoaWxkLnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgICAg
ICBjb250aW51ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCShyZXZpc2lvbiAxNjA1NTApCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTMsMTggKzkzLDE3IEBAIHN0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0
ZXJCdWlsZGVyPiBSZW5kZXIKIAogICAgIC8vIEFkZCBlZmZlY3RzIHRvIHRoZSBidWlsZGVyCiAg
ICAgYXV0byBidWlsZGVyID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPihTb3Vy
Y2VHcmFwaGljOjpjcmVhdGUoZmlsdGVyKSwgU291cmNlQWxwaGE6OmNyZWF0ZShmaWx0ZXIpKTsK
LSAgICBhdXRvIGNoaWxkcmVuID0gY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50KCkpOwotICAgIGZvciAoYXV0byBlbGVtZW50
ID0gY2hpbGRyZW4uYmVnaW4oKSwgZW5kID0gY2hpbGRyZW4uZW5kKCk7IGVsZW1lbnQgIT0gZW5k
OyArK2VsZW1lbnQpIHsKLSAgICAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0ID0gZWxl
bWVudC0+YnVpbGQoYnVpbGRlci5nZXQoKSwgZmlsdGVyKTsKKyAgICBmb3IgKGF1dG8mIGVsZW1l
bnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+
KGZpbHRlckVsZW1lbnQoKSkpIHsKKyAgICAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0
ID0gZWxlbWVudC5idWlsZChidWlsZGVyLmdldCgpLCBmaWx0ZXIpOwogICAgICAgICBpZiAoIWVm
ZmVjdCkgewogICAgICAgICAgICAgYnVpbGRlci0+Y2xlYXJFZmZlY3RzKCk7CiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5hcHBlbmRFZmZl
Y3RUb0VmZmVjdFJlZmVyZW5jZXMoZWZmZWN0LCBlbGVtZW50LT5yZW5kZXJlcigpKTsKLSAgICAg
ICAgZWxlbWVudC0+c2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGVmZmVjdC5nZXQoKSk7Ci0gICAgICAg
IGVmZmVjdC0+c2V0RWZmZWN0Qm91bmRhcmllcyhTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVj
dGFuZ2xlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oJiplbGVtZW50LCBm
aWx0ZXJFbGVtZW50KCkucHJpbWl0aXZlVW5pdHMoKSwgdGFyZ2V0Qm91bmRpbmdCb3gpKTsKLSAg
ICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVsZW1lbnQtPnJlbmRlcmVyKCkt
PnN0eWxlKCkuc3ZnU3R5bGUoKS5jb2xvckludGVycG9sYXRpb25GaWx0ZXJzKCkgPT0gQ0lfTElO
RUFSUkdCID8gQ29sb3JTcGFjZUxpbmVhclJHQiA6IENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAg
ICAgICBidWlsZGVyLT5hZGQoZWxlbWVudC0+cmVzdWx0KCksIGVmZmVjdC5yZWxlYXNlKCkpOwor
ICAgICAgICBidWlsZGVyLT5hcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoZWZmZWN0LCBl
bGVtZW50LnJlbmRlcmVyKCkpOworICAgICAgICBlbGVtZW50LnNldFN0YW5kYXJkQXR0cmlidXRl
cyhlZmZlY3QuZ2V0KCkpOworICAgICAgICBlZmZlY3QtPnNldEVmZmVjdEJvdW5kYXJpZXMoU1ZH
TGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM+KCZlbGVtZW50LCBmaWx0ZXJFbGVtZW50KCkucHJpbWl0aXZlVW5pdHMoKSwg
dGFyZ2V0Qm91bmRpbmdCb3gpKTsKKyAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNw
YWNlKGVsZW1lbnQucmVuZGVyZXIoKS0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xh
dGlvbkZpbHRlcnMoKSA9PSBDSV9MSU5FQVJSR0IgPyBDb2xvclNwYWNlTGluZWFyUkdCIDogQ29s
b3JTcGFjZURldmljZVJHQik7CisgICAgICAgIGJ1aWxkZXItPmFkZChlbGVtZW50LnJlc3VsdCgp
LCBlZmZlY3QucmVsZWFzZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIGJ1aWxkZXI7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlTWFza2VyLmNwcAkocmV2aXNpb24gMTYwNTUwKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExNiw5ICsxMTYsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjpkcmF3Q29udGVu
CiAgICAgfQogCiAgICAgLy8gRHJhdyB0aGUgY29udGVudCBpbnRvIHRoZSBJbWFnZUJ1ZmZlci4K
LSAgICBhdXRvIGNoaWxkcmVuID0gY2hpbGRyZW5PZlR5cGU8U1ZHRWxlbWVudD4obWFza0VsZW1l
bnQoKSk7Ci0gICAgZm9yIChhdXRvIGl0ID0gY2hpbGRyZW4uYmVnaW4oKSwgZW5kID0gY2hpbGRy
ZW4uZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTVkdFbGVtZW50JiBjaGlsZCA9
ICppdDsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8U1ZHRWxlbWVudD4o
bWFza0VsZW1lbnQoKSkpIHsKICAgICAgICAgYXV0byByZW5kZXJlciA9IGNoaWxkLnJlbmRlcmVy
KCk7CiAgICAgICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlUGF0dGVybi5jcHAJKHJldmlzaW9uIDE2MDU1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjY1LDkgKzI2NSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gUmVuZGVyU1ZH
UmUKICAgICAgICAgY29udGVudFRyYW5zZm9ybWF0aW9uID0gdGlsZUltYWdlVHJhbnNmb3JtOwog
CiAgICAgLy8gRHJhdyB0aGUgY29udGVudCBpbnRvIHRoZSBJbWFnZUJ1ZmZlci4KLSAgICBhdXRv
IGNoaWxkcmVuID0gY2hpbGRyZW5PZlR5cGU8U1ZHRWxlbWVudD4oKmF0dHJpYnV0ZXMucGF0dGVy
bkNvbnRlbnRFbGVtZW50KCkpOwotICAgIGZvciAoYXV0byBpdCA9IGNoaWxkcmVuLmJlZ2luKCks
IGVuZCA9IGNoaWxkcmVuLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3Qg
U1ZHRWxlbWVudCYgY2hpbGQgPSAqaXQ7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVu
T2ZUeXBlPFNWR0VsZW1lbnQ+KCphdHRyaWJ1dGVzLnBhdHRlcm5Db250ZW50RWxlbWVudCgpKSkg
ewogICAgICAgICBpZiAoIWNoaWxkLnJlbmRlcmVyKCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgaWYgKGNoaWxkLnJlbmRlcmVyKCktPm5lZWRzTGF5b3V0KCkpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHJldmlzaW9u
IDE2MDU1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw5ICsyOTIsOCBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6
OnBhaW50UmVwbGFjZWQoUGFpbnRJCiAKICAgICAgICAgaWYgKGNvbnRpbnVlUmVuZGVyaW5nKSB7
CiAgICAgICAgICAgICBjaGlsZFBhaW50SW5mby51cGRhdGVTdWJ0cmVlUGFpbnRSb290Rm9yQ2hp
bGRyZW4odGhpcyk7Ci0gICAgICAgICAgICBhdXRvIGNoaWxkcmVuID0gY2hpbGRyZW5PZlR5cGU8
UmVuZGVyRWxlbWVudD4oKnRoaXMpOwotICAgICAgICAgICAgZm9yIChhdXRvIGNoaWxkID0gY2hp
bGRyZW4uYmVnaW4oKSwgZW5kID0gY2hpbGRyZW4uZW5kKCk7IGNoaWxkICE9IGVuZDsgKytjaGls
ZCkKLSAgICAgICAgICAgICAgICBjaGlsZC0+cGFpbnQoY2hpbGRQYWludEluZm8sIGxvY2F0aW9u
KCkpOworICAgICAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRl
ckVsZW1lbnQ+KCp0aGlzKSkKKyAgICAgICAgICAgICAgICBjaGlsZC5wYWludChjaGlsZFBhaW50
SW5mbywgbG9jYXRpb24oKSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIu
Y3BwCShyZXZpc2lvbiAxNjA1NTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMjQgKzY3LDIz
IEBAIGJvb2wgU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXI6OnJlc291cmNlQ28KICAgICAvLyBUaGVu
IG9wZXJhdGUgb24gdGhlIGNoaWxkIHJlc291cmNlcyBvZiB0aGUgZ2l2ZW4gcmVuZGVyZXIuCiAg
ICAgLy8gPG1hcmtlciBpZD0iYSI+IDxwYXRoIG1hcmtlci1zdGFydD0idXJsKCNiKSIvPiAuLi4K
ICAgICAvLyA8bWFya2VyIGlkPSJiIj4gPHBhdGggbWFya2VyLXN0YXJ0PSJ1cmwoI2EpIi8+IC4u
LgotICAgIGF1dG8gY2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxSZW5kZXJFbGVtZW50PihyZW5k
ZXJlcik7Ci0gICAgZm9yIChhdXRvIGNoaWxkID0gY2hpbGRyZW4uYmVnaW4oKSwgZW5kID0gY2hp
bGRyZW4uZW5kKCk7IGNoaWxkICE9IGVuZDsgKytjaGlsZCkgewotICAgICAgICBTVkdSZXNvdXJj
ZXMqIGNoaWxkUmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0Zv
clJlbmRlck9iamVjdCgmKmNoaWxkKTsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5P
ZlR5cGU8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIpKSB7CisgICAgICAgIFNWR1Jlc291cmNlcyog
Y2hpbGRSZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVu
ZGVyT2JqZWN0KCZjaGlsZCk7CiAgICAgICAgIGlmICghY2hpbGRSZXNvdXJjZXMpCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIC8vIEEgY2hpbGQgb2YgdGhlIGdpdmVu
ICdyZXNvdXJjZScgY29udGFpbnMgcmVzb3VyY2VzLiAKLSAgICAgICAgSGFzaFNldDxSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lcio+IGNoaWxkU2V0OwotICAgICAgICBjaGlsZFJlc291cmNlcy0+
YnVpbGRTZXRPZlJlc291cmNlcyhjaGlsZFNldCk7CisgICAgICAgIEhhc2hTZXQ8UmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXIqPiBjaGlsZFJlc291cmNlU2V0OworICAgICAgICBjaGlsZFJlc291
cmNlcy0+YnVpbGRTZXRPZlJlc291cmNlcyhjaGlsZFJlc291cmNlU2V0KTsKIAogICAgICAgICAv
LyBXYWxrIGFsbCBjaGlsZCByZXNvdXJjZXMgYW5kIGNoZWNrIHdoZXRlciB0aGV5IHJlZmVyZW5j
ZSBhbnkgcmVzb3VyY2UgY29udGFpbmVkIGluIHRoZSByZXNvdXJjZXMgc2V0LgotICAgICAgICBm
b3IgKGF1dG8gaXQgPSBjaGlsZFNldC5iZWdpbigpLCBlbmQgPSBjaGlsZFNldC5lbmQoKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobV9hbGxSZXNvdXJjZXMuY29udGFpbnMo
Kml0KSkKKyAgICAgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IGNoaWxkUmVzb3VyY2VTZXQpIHsK
KyAgICAgICAgICAgIGlmIChtX2FsbFJlc291cmNlcy5jb250YWlucyhyZXNvdXJjZSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBXYWxrIGNo
aWxkcmVuIHJlY3Vyc2l2ZWx5LCBzdG9wIGltbWVkaWF0ZWx5IGlmIHdlIGZvdW5kIGEgY3ljbGUK
LSAgICAgICAgaWYgKHJlc291cmNlQ29udGFpbnNDeWNsZXMoKmNoaWxkKSkKKyAgICAgICAgaWYg
KHJlc291cmNlQ29udGFpbnNDeWNsZXMoY2hpbGQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQWx0R2x5cGhEZWZFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQWx0R2x5cGhEZWZFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTYwNTUwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FsdEds
eXBoRGVmRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDkgKzg5LDcgQEAgYm9vbCBT
VkdBbHRHbHlwaERlZkVsZW1lbnQ6Omhhc1ZhbGlkR2x5cAogICAgIGJvb2wgZm91bnRGaXJzdEds
eXBoUmVmID0gZmFsc2U7CiAgICAgYm9vbCBmb3VuZEZpcnN0QWx0R2x5cGhJdGVtID0gZmFsc2U7
CiAKLSAgICBhdXRvIHN2Z0NoaWxkcmVuID0gY2hpbGRyZW5PZlR5cGU8U1ZHRWxlbWVudD4oKnRo
aXMpOwotICAgIGZvciAoYXV0byBpdCA9IHN2Z0NoaWxkcmVuLmJlZ2luKCksIGVuZCA9IHN2Z0No
aWxkcmVuLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgU1ZHRWxlbWVu
dCYgY2hpbGQgPSAqaXQ7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFNW
R0VsZW1lbnQ+KCp0aGlzKSkgewogICAgICAgICBpZiAoIWZvdW5kRmlyc3RBbHRHbHlwaEl0ZW0g
JiYgaXNTVkdHbHlwaFJlZkVsZW1lbnQoY2hpbGQpKSB7CiAgICAgICAgICAgICBmb3VudEZpcnN0
R2x5cGhSZWYgPSB0cnVlOwogICAgICAgICAgICAgU3RyaW5nIHJlZmVycmVkR2x5cGhOYW1lOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FsdEdseXBoSXRlbUVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbHRHbHlwaEl0ZW1FbGVtZW50LmNwcAko
cmV2aXNpb24gMTYwNTUwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FsdEdseXBoSXRlbUVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMCArNTAsOSBAQCBib29sIFNWR0FsdEds
eXBoSXRlbUVsZW1lbnQ6Omhhc1ZhbGlkR2x5CiAgICAgLy8gSGVyZSB3ZSBmaWxsIGdseXBoTmFt
ZXMgYW5kIHJldHVybiB0cnVlIG9ubHkgaWYgYWxsIHJlZmVyZW5jZWQgZ2x5cGhzIGFyZSB2YWxp
ZCBhbmQKICAgICAvLyB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgZ2x5cGguCiAKLSAgICBhdXRvIGds
eXBoQ2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxTVkdHbHlwaFJlZkVsZW1lbnQ+KCp0aGlzKTsK
LSAgICBmb3IgKGF1dG8gZ2x5cGhSZWYgPSBnbHlwaENoaWxkcmVuLmJlZ2luKCksIGVuZCA9IGds
eXBoQ2hpbGRyZW4uZW5kKCk7IGdseXBoUmVmICE9IGVuZDsgKytnbHlwaFJlZikgeworICAgIGZv
ciAoYXV0byYgZ2x5cGhSZWYgOiBjaGlsZHJlbk9mVHlwZTxTVkdHbHlwaFJlZkVsZW1lbnQ+KCp0
aGlzKSkgewogICAgICAgICBTdHJpbmcgcmVmZXJyZWRHbHlwaE5hbWU7Ci0gICAgICAgIGlmIChn
bHlwaFJlZi0+aGFzVmFsaWRHbHlwaEVsZW1lbnQocmVmZXJyZWRHbHlwaE5hbWUpKQorICAgICAg
ICBpZiAoZ2x5cGhSZWYuaGFzVmFsaWRHbHlwaEVsZW1lbnQocmVmZXJyZWRHbHlwaE5hbWUpKQog
ICAgICAgICAgICAgZ2x5cGhOYW1lcy5hcHBlbmQocmVmZXJyZWRHbHlwaE5hbWUpOwogICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgIGdseXBoTmFtZXMuY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMTYw
NTUwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM5LDkgKzEzOSw4IEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVs
ZW1lbnQ6OnVwZGF0ZUFuaW0KICAgICBtX2FuaW1hdGlvblBhdGggPSBQYXRoKCk7CiAgICAgYm9v
bCBmb3VuZE1QYXRoID0gZmFsc2U7CiAKLSAgICBhdXRvIG1QYXRoQ2hpbGRyZW4gPSBjaGlsZHJl
bk9mVHlwZTxTVkdNUGF0aEVsZW1lbnQ+KCp0aGlzKTsKLSAgICBmb3IgKGF1dG8gbVBhdGggPSBt
UGF0aENoaWxkcmVuLmJlZ2luKCksIGVuZCA9IG1QYXRoQ2hpbGRyZW4uZW5kKCk7IG1QYXRoICE9
IGVuZDsgKyttUGF0aCkgewotICAgICAgICBTVkdQYXRoRWxlbWVudCogcGF0aEVsZW1lbnQgPSBt
UGF0aC0+cGF0aEVsZW1lbnQoKTsKKyAgICBmb3IgKGF1dG8mIG1QYXRoIDogY2hpbGRyZW5PZlR5
cGU8U1ZHTVBhdGhFbGVtZW50PigqdGhpcykpIHsKKyAgICAgICAgU1ZHUGF0aEVsZW1lbnQqIHBh
dGhFbGVtZW50ID0gbVBhdGgucGF0aEVsZW1lbnQoKTsKICAgICAgICAgaWYgKHBhdGhFbGVtZW50
KSB7CiAgICAgICAgICAgICB1cGRhdGVQYXRoRnJvbUdyYXBoaWNzRWxlbWVudChwYXRoRWxlbWVu
dCwgbV9hbmltYXRpb25QYXRoKTsKICAgICAgICAgICAgIGZvdW5kTVBhdGggPSB0cnVlOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkocmV2aXNpb24gMTYwNTUwKQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTAsOSArNTEw
LDggQEAgdm9pZCBTVkdFbGVtZW50OjphbmltYXRlZFByb3BlcnR5VHlwZUZvcgogCiBib29sIFNW
R0VsZW1lbnQ6OmhhdmVMb2FkZWRSZXF1aXJlZFJlc291cmNlcygpCiB7Ci0gICAgYXV0byBzdmdD
aGlsZHJlbiA9IGNoaWxkcmVuT2ZUeXBlPFNWR0VsZW1lbnQ+KCp0aGlzKTsKLSAgICBmb3IgKGF1
dG8gY2hpbGQgPSBzdmdDaGlsZHJlbi5iZWdpbigpLCBlbmQgPSBzdmdDaGlsZHJlbi5lbmQoKTsg
Y2hpbGQgIT0gZW5kOyArK2NoaWxkKSB7Ci0gICAgICAgIGlmICghY2hpbGQtPmhhdmVMb2FkZWRS
ZXF1aXJlZFJlc291cmNlcygpKQorICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlw
ZTxTVkdFbGVtZW50PigqdGhpcykpIHsKKyAgICAgICAgaWYgKCFjaGlsZC5oYXZlTG9hZGVkUmVx
dWlyZWRSZXNvdXJjZXMoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
cmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFu
c2ZlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MDU1MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgzLDI0ICs4MywyMiBAQCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb21w
b25lbnRUCiAgICAgRmlsdGVyRWZmZWN0KiBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZl
Y3RCeUlkKGluMSgpKTsKICAgICAKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biByZWQ7CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBncmVlbjsKICAgICBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uIGJsdWU7CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBh
bHBoYTsKIAotICAgIGF1dG8gY2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxTVkdFbGVtZW50Pigq
dGhpcyk7Ci0gICAgZm9yIChhdXRvIGNoaWxkID0gY2hpbGRyZW4uYmVnaW4oKSwgZW5kID0gY2hp
bGRyZW4uZW5kKCk7IGNoaWxkICE9IGVuZDsgKytjaGlsZCkgewotICAgICAgICBTVkdFbGVtZW50
KiBlbGVtZW50ID0gJipjaGlsZDsKLSAgICAgICAgaWYgKGlzU1ZHRkVGdW5jUkVsZW1lbnQoZWxl
bWVudCkpCi0gICAgICAgICAgICByZWQgPSB0b1NWR0ZFRnVuY1JFbGVtZW50KGVsZW1lbnQpLT50
cmFuc2ZlckZ1bmN0aW9uKCk7Ci0gICAgICAgIGVsc2UgaWYgKGlzU1ZHRkVGdW5jR0VsZW1lbnQo
ZWxlbWVudCkpCi0gICAgICAgICAgICBncmVlbiA9IHRvU1ZHRkVGdW5jR0VsZW1lbnQoZWxlbWVu
dCktPnRyYW5zZmVyRnVuY3Rpb24oKTsKLSAgICAgICAgZWxzZSBpZiAoaXNTVkdGRUZ1bmNCRWxl
bWVudChlbGVtZW50KSkKLSAgICAgICAgICAgIGJsdWUgPSB0b1NWR0ZFRnVuY0JFbGVtZW50KGVs
ZW1lbnQpLT50cmFuc2ZlckZ1bmN0aW9uKCk7Ci0gICAgICAgIGVsc2UgaWYgKGlzU1ZHRkVGdW5j
QUVsZW1lbnQoZWxlbWVudCkpCi0gICAgICAgICAgICBhbHBoYSA9IHRvU1ZHRkVGdW5jQUVsZW1l
bnQoZWxlbWVudCktPnRyYW5zZmVyRnVuY3Rpb24oKTsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDog
Y2hpbGRyZW5PZlR5cGU8U1ZHRWxlbWVudD4oKnRoaXMpKSB7CisgICAgICAgIGlmIChpc1NWR0ZF
RnVuY1JFbGVtZW50KGNoaWxkKSkKKyAgICAgICAgICAgIHJlZCA9IHRvU1ZHRkVGdW5jUkVsZW1l
bnQoY2hpbGQpLnRyYW5zZmVyRnVuY3Rpb24oKTsKKyAgICAgICAgZWxzZSBpZiAoaXNTVkdGRUZ1
bmNHRWxlbWVudChjaGlsZCkpCisgICAgICAgICAgICBncmVlbiA9IHRvU1ZHRkVGdW5jR0VsZW1l
bnQoY2hpbGQpLnRyYW5zZmVyRnVuY3Rpb24oKTsKKyAgICAgICAgZWxzZSBpZiAoaXNTVkdGRUZ1
bmNCRWxlbWVudChjaGlsZCkpCisgICAgICAgICAgICBibHVlID0gdG9TVkdGRUZ1bmNCRWxlbWVu
dChjaGlsZCkudHJhbnNmZXJGdW5jdGlvbigpOworICAgICAgICBlbHNlIGlmIChpc1NWR0ZFRnVu
Y0FFbGVtZW50KGNoaWxkKSkKKyAgICAgICAgICAgIGFscGhhID0gdG9TVkdGRUZ1bmNBRWxlbWVu
dChjaGlsZCkudHJhbnNmZXJGdW5jdGlvbigpOwogICAgIH0KICAgICAKICAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoZmlsdGVyLCBy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVM
aWdodEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUxp
Z2h0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MDU1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUxpZ2h0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDEyICs3MSwxMSBAQCBT
VkdGRUxpZ2h0RWxlbWVudDo6U1ZHRkVMaWdodEVsZW1lbnQoY29uCiAKIFNWR0ZFTGlnaHRFbGVt
ZW50KiBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVudChjb25zdCBTVkdFbGVtZW50
KiBzdmdFbGVtZW50KQogewotICAgIGF1dG8gY2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxTVkdF
bGVtZW50Pigqc3ZnRWxlbWVudCk7Ci0gICAgZm9yIChhdXRvIGNoaWxkID0gY2hpbGRyZW4uYmVn
aW4oKSwgZW5kID0gY2hpbGRyZW4uZW5kKCk7IGNoaWxkICE9IGVuZDsgKytjaGlsZCkgewotICAg
ICAgICBpZiAoaXNTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQoKmNoaWxkKSB8fCBpc1NWR0ZFUG9p
bnRMaWdodEVsZW1lbnQoKmNoaWxkKSB8fCBpc1NWR0ZFU3BvdExpZ2h0RWxlbWVudCgqY2hpbGQp
KQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR0ZFTGlnaHRFbGVtZW50Kj4oY29u
c3RfY2FzdDxTVkdFbGVtZW50Kj4oJipjaGlsZCkpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBj
aGlsZHJlbk9mVHlwZTxTVkdFbGVtZW50Pigqc3ZnRWxlbWVudCkpIHsKKyAgICAgICAgaWYgKGlz
U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KGNoaWxkKSB8fCBpc1NWR0ZFUG9pbnRMaWdodEVsZW1l
bnQoY2hpbGQpIHx8IGlzU1ZHRkVTcG90TGlnaHRFbGVtZW50KGNoaWxkKSkKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxTVkdGRUxpZ2h0RWxlbWVudCo+KGNvbnN0X2Nhc3Q8U1ZHRWxl
bWVudCo+KCZjaGlsZCkpOwogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAogUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4gU1ZHRkVMaWdodEVsZW1lbnQ6OmZpbmRM
aWdodFNvdXJjZShjb25zdCBTVkdFbGVtZW50KiBzdmdFbGVtZW50KQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjA1NTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NywxNiArNDcsMTUgQEAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTWVyZ2VFbGVtZQog
ICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCA9IEZFTWVyZ2U6OmNyZWF0ZShmaWx0ZXIp
OwogICAgIEZpbHRlckVmZmVjdFZlY3RvciYgbWVyZ2VJbnB1dHMgPSBlZmZlY3QtPmlucHV0RWZm
ZWN0cygpOwogCi0gICAgYXV0byBjaGlsZHJlbiA9IGNoaWxkcmVuT2ZUeXBlPFNWR0ZFTWVyZ2VO
b2RlRWxlbWVudD4oKnRoaXMpOwotICAgIGZvciAoYXV0byBtZXJnZU5vZGUgPSBjaGlsZHJlbi5i
ZWdpbigpLCBlbmQgPSBjaGlsZHJlbi5lbmQoKTsgbWVyZ2VOb2RlICE9IGVuZDsgKyttZXJnZU5v
ZGUpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBtZXJnZUVmZmVjdCA9IGZpbHRlckJ1aWxkZXIt
PmdldEVmZmVjdEJ5SWQobWVyZ2VOb2RlLT5pbjEoKSk7CisgICAgZm9yIChhdXRvJiBtZXJnZU5v
ZGUgOiBjaGlsZHJlbk9mVHlwZTxTVkdGRU1lcmdlTm9kZUVsZW1lbnQ+KCp0aGlzKSkgeworICAg
ICAgICBGaWx0ZXJFZmZlY3QqIG1lcmdlRWZmZWN0ID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0
QnlJZChtZXJnZU5vZGUuaW4xKCkpOwogICAgICAgICBpZiAoIW1lcmdlRWZmZWN0KQotICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgbWVy
Z2VJbnB1dHMuYXBwZW5kKG1lcmdlRWZmZWN0KTsKICAgICB9CiAKICAgICBpZiAobWVyZ2VJbnB1
dHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICByZXR1cm4gZWZmZWN0LnJlbGVhc2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGb250RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZvbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMTYwNTUwKQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZvbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDI5ICsxMTgsMjcg
QEAgdm9pZCBTVkdGb250RWxlbWVudDo6ZW5zdXJlR2x5cGhDYWNoZSgpCiAKICAgICBjb25zdCBT
VkdNaXNzaW5nR2x5cGhFbGVtZW50KiBmaXJzdE1pc3NpbmdHbHlwaEVsZW1lbnQgPSBudWxscHRy
OwogICAgIFZlY3RvcjxTdHJpbmc+IGxpZ2F0dXJlczsKLSAgICBhdXRvIGNoaWxkcmVuID0gY2hp
bGRyZW5PZlR5cGU8U1ZHRWxlbWVudD4oKnRoaXMpOwotICAgIGZvciAoYXV0byBjaGlsZCA9IGNo
aWxkcmVuLmJlZ2luKCksIGVuZCA9IGNoaWxkcmVuLmVuZCgpOyBjaGlsZCAhPSBlbmQ7ICsrY2hp
bGQpIHsKLSAgICAgICAgU1ZHRWxlbWVudCogZWxlbWVudCA9ICYqY2hpbGQ7Ci0gICAgICAgIGlm
IChpc1NWR0dseXBoRWxlbWVudChlbGVtZW50KSkgewotICAgICAgICAgICAgU1ZHR2x5cGhFbGVt
ZW50KiBnbHlwaCA9IHRvU1ZHR2x5cGhFbGVtZW50KGVsZW1lbnQpOwotICAgICAgICAgICAgQXRv
bWljU3RyaW5nIHVuaWNvZGUgPSBnbHlwaC0+ZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6dW5p
Y29kZUF0dHIpOwotICAgICAgICAgICAgQXRvbWljU3RyaW5nIGdseXBoSWQgPSBnbHlwaC0+Z2V0
SWRBdHRyaWJ1dGUoKTsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8U1ZH
RWxlbWVudD4oKnRoaXMpKSB7CisgICAgICAgIGlmIChpc1NWR0dseXBoRWxlbWVudChjaGlsZCkp
IHsKKyAgICAgICAgICAgIFNWR0dseXBoRWxlbWVudCYgZ2x5cGggPSB0b1NWR0dseXBoRWxlbWVu
dChjaGlsZCk7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcgdW5pY29kZSA9IGdseXBoLmZhc3RH
ZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnVuaWNvZGVBdHRyKTsKKyAgICAgICAgICAgIEF0b21pY1N0
cmluZyBnbHlwaElkID0gZ2x5cGguZ2V0SWRBdHRyaWJ1dGUoKTsKICAgICAgICAgICAgIGlmIChn
bHlwaElkLmlzRW1wdHkoKSAmJiB1bmljb2RlLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICAgICAgbV9nbHlwaE1hcC5hZGRHbHlwaChnbHlwaElkLCB1bmlj
b2RlLCBnbHlwaC0+YnVpbGRHbHlwaElkZW50aWZpZXIoKSk7CisgICAgICAgICAgICBtX2dseXBo
TWFwLmFkZEdseXBoKGdseXBoSWQsIHVuaWNvZGUsIGdseXBoLmJ1aWxkR2x5cGhJZGVudGlmaWVy
KCkpOwogCiAgICAgICAgICAgICAvLyBSZWdpc3RlciBsaWdhdHVyZXMsIGlmIG5lZWRlZCwgZG9u
J3QgbWl4IHVwIHdpdGggc3Vycm9nYXRlIHBhaXJzIHRob3VnaCEKICAgICAgICAgICAgIGlmICh1
bmljb2RlLmxlbmd0aCgpID4gMSAmJiAhVTE2X0lTX1NVUlJPR0FURSh1bmljb2RlWzBdKSkKICAg
ICAgICAgICAgICAgICBsaWdhdHVyZXMuYXBwZW5kKHVuaWNvZGUuc3RyaW5nKCkpOwotICAgICAg
ICB9IGVsc2UgaWYgKGlzU1ZHSEtlcm5FbGVtZW50KGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICBT
VkdIS2VybkVsZW1lbnQqIGhrZXJuID0gdG9TVkdIS2VybkVsZW1lbnQoZWxlbWVudCk7Ci0gICAg
ICAgICAgICBoa2Vybi0+YnVpbGRIb3Jpem9udGFsS2VybmluZ1BhaXIobV9ob3Jpem9udGFsS2Vy
bmluZ01hcCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNTVkdWS2VybkVsZW1lbnQoZWxlbWVudCkp
IHsKLSAgICAgICAgICAgIFNWR1ZLZXJuRWxlbWVudCogdmtlcm4gPSB0b1NWR1ZLZXJuRWxlbWVu
dChlbGVtZW50KTsKLSAgICAgICAgICAgIHZrZXJuLT5idWlsZFZlcnRpY2FsS2VybmluZ1BhaXIo
bV92ZXJ0aWNhbEtlcm5pbmdNYXApOwotICAgICAgICB9IGVsc2UgaWYgKGlzU1ZHTWlzc2luZ0ds
eXBoRWxlbWVudChlbGVtZW50KSAmJiAhZmlyc3RNaXNzaW5nR2x5cGhFbGVtZW50KQotICAgICAg
ICAgICAgZmlyc3RNaXNzaW5nR2x5cGhFbGVtZW50ID0gdG9TVkdNaXNzaW5nR2x5cGhFbGVtZW50
KGVsZW1lbnQpOworICAgICAgICB9IGVsc2UgaWYgKGlzU1ZHSEtlcm5FbGVtZW50KGNoaWxkKSkg
eworICAgICAgICAgICAgU1ZHSEtlcm5FbGVtZW50JiBoa2VybiA9IHRvU1ZHSEtlcm5FbGVtZW50
KGNoaWxkKTsKKyAgICAgICAgICAgIGhrZXJuLmJ1aWxkSG9yaXpvbnRhbEtlcm5pbmdQYWlyKG1f
aG9yaXpvbnRhbEtlcm5pbmdNYXApOworICAgICAgICB9IGVsc2UgaWYgKGlzU1ZHVktlcm5FbGVt
ZW50KGNoaWxkKSkgeworICAgICAgICAgICAgU1ZHVktlcm5FbGVtZW50JiB2a2VybiA9IHRvU1ZH
Vktlcm5FbGVtZW50KGNoaWxkKTsKKyAgICAgICAgICAgIHZrZXJuLmJ1aWxkVmVydGljYWxLZXJu
aW5nUGFpcihtX3ZlcnRpY2FsS2VybmluZ01hcCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNTVkdN
aXNzaW5nR2x5cGhFbGVtZW50KGNoaWxkKSAmJiAhZmlyc3RNaXNzaW5nR2x5cGhFbGVtZW50KQor
ICAgICAgICAgICAgZmlyc3RNaXNzaW5nR2x5cGhFbGVtZW50ID0gJnRvU1ZHTWlzc2luZ0dseXBo
RWxlbWVudChjaGlsZCk7CiAgICAgfQogCiAgICAgLy8gUmVnaXN0ZXIgZWFjaCBjaGFyYWN0ZXIg
b2YgZWFjaCBsaWdhdHVyZSwgaWYgbmVlZGVkLgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZvbnRGYWNlU3JjRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZvbnRGYWNlU3JjRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MDU1MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGb250RmFjZVNyY0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OCwxMyArNDgsMTIgQEAgUGFzc1JlZlB0cjxTVkdGb250RmFjZVNyY0VsZW1lbnQ+IFNWR0Zvbgog
UGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IFNWR0ZvbnRGYWNlU3JjRWxlbWVudDo6c3JjVmFsdWUo
KSBjb25zdAogewogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0gICAgYXV0byBzdmdDaGlsZHJlbiA9IGNoaWxkcmVu
T2ZUeXBlPFNWR0VsZW1lbnQ+KCp0aGlzKTsKLSAgICBmb3IgKGF1dG8gY2hpbGQgPSBzdmdDaGls
ZHJlbi5iZWdpbigpLCBlbmQgPSBzdmdDaGlsZHJlbi5lbmQoKTsgY2hpbGQgIT0gZW5kOyArK2No
aWxkKSB7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0VsZW1lbnQ+
KCp0aGlzKSkgewogICAgICAgICBSZWZQdHI8Q1NTRm9udEZhY2VTcmNWYWx1ZT4gc3JjVmFsdWU7
Ci0gICAgICAgIGlmIChpc1NWR0ZvbnRGYWNlVXJpRWxlbWVudCgqY2hpbGQpKQotICAgICAgICAg
ICAgc3JjVmFsdWUgPSB0b1NWR0ZvbnRGYWNlVXJpRWxlbWVudCgqY2hpbGQpLnNyY1ZhbHVlKCk7
Ci0gICAgICAgIGVsc2UgaWYgKGlzU1ZHRm9udEZhY2VOYW1lRWxlbWVudCgqY2hpbGQpKQotICAg
ICAgICAgICAgc3JjVmFsdWUgPSB0b1NWR0ZvbnRGYWNlTmFtZUVsZW1lbnQoKmNoaWxkKS5zcmNW
YWx1ZSgpOworICAgICAgICBpZiAoaXNTVkdGb250RmFjZVVyaUVsZW1lbnQoY2hpbGQpKQorICAg
ICAgICAgICAgc3JjVmFsdWUgPSB0b1NWR0ZvbnRGYWNlVXJpRWxlbWVudChjaGlsZCkuc3JjVmFs
dWUoKTsKKyAgICAgICAgZWxzZSBpZiAoaXNTVkdGb250RmFjZU5hbWVFbGVtZW50KGNoaWxkKSkK
KyAgICAgICAgICAgIHNyY1ZhbHVlID0gdG9TVkdGb250RmFjZU5hbWVFbGVtZW50KGNoaWxkKS5z
cmNWYWx1ZSgpOwogICAgICAgICBpZiAoc3JjVmFsdWUgJiYgc3JjVmFsdWUtPnJlc291cmNlKCku
bGVuZ3RoKCkpCiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoc3JjVmFsdWUucmVsZWFzZSgpKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAko
cmV2aXNpb24gMTYwNTUwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCwxNSArMTQwLDEzIEBAIHZvaWQgU1ZHR3JhZGll
bnRFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQKIFZlY3RvcjxHcmFkaWVudDo6Q29sb3JTdG9wPiBT
VkdHcmFkaWVudEVsZW1lbnQ6OmJ1aWxkU3RvcHMoKQogewogICAgIFZlY3RvcjxHcmFkaWVudDo6
Q29sb3JTdG9wPiBzdG9wczsKLQotICAgIGF1dG8gc3RvcENoaWxkcmVuID0gY2hpbGRyZW5PZlR5
cGU8U1ZHU3RvcEVsZW1lbnQ+KCp0aGlzKTsKICAgICBmbG9hdCBwcmV2aW91c09mZnNldCA9IDAu
MGY7CiAKLSAgICBmb3IgKGF1dG8gc3RvcCA9IHN0b3BDaGlsZHJlbi5iZWdpbigpLCBlbmQgPSBz
dG9wQ2hpbGRyZW4uZW5kKCk7IHN0b3AgIT0gZW5kOyArK3N0b3ApIHsKLSAgICAgICAgQ29sb3Ig
Y29sb3IgPSBzdG9wLT5zdG9wQ29sb3JJbmNsdWRpbmdPcGFjaXR5KCk7CisgICAgZm9yIChhdXRv
JiBzdG9wIDogY2hpbGRyZW5PZlR5cGU8U1ZHU3RvcEVsZW1lbnQ+KCp0aGlzKSkgeworICAgICAg
ICBDb2xvciBjb2xvciA9IHN0b3Auc3RvcENvbG9ySW5jbHVkaW5nT3BhY2l0eSgpOwogCiAgICAg
ICAgIC8vIEZpZ3VyZSBvdXQgcmlnaHQgbW9ub3RvbmljIG9mZnNldAotICAgICAgICBmbG9hdCBv
ZmZzZXQgPSBzdG9wLT5vZmZzZXQoKTsKKyAgICAgICAgZmxvYXQgb2Zmc2V0ID0gc3RvcC5vZmZz
ZXQoKTsKICAgICAgICAgb2Zmc2V0ID0gc3RkOjptaW4oc3RkOjptYXgocHJldmlvdXNPZmZzZXQs
IG9mZnNldCksIDEuMGYpOwogICAgICAgICBwcmV2aW91c09mZnNldCA9IG9mZnNldDsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAkocmV2aXNpb24gMTYwNTUwKQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzcsMTUgKzMzNywxMyBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBTVkdTVkdFbGVtZW50Ojpjb2xs
CiB7CiAgICAgVmVjdG9yPFJlZjxFbGVtZW50Pj4gZWxlbWVudHM7CiAKLSAgICBhdXRvIHN2Z0Rl
c2NlbmRhbnRzID0gZGVzY2VuZGFudHNPZlR5cGU8U1ZHRWxlbWVudD4oKihyZWZlcmVuY2VFbGVt
ZW50ID8gcmVmZXJlbmNlRWxlbWVudCA6IHRoaXMpKTsKLSAgICBmb3IgKGF1dG8gaXQgPSBzdmdE
ZXNjZW5kYW50cy5iZWdpbigpLCBlbmQgPSBzdmdEZXNjZW5kYW50cy5lbmQoKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSAmKml0Owor
ICAgIGZvciAoYXV0byYgc3ZnRWxlbWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBlPFNWR0VsZW1lbnQ+
KCoocmVmZXJlbmNlRWxlbWVudCA/IHJlZmVyZW5jZUVsZW1lbnQgOiB0aGlzKSkpIHsKICAgICAg
ICAgaWYgKGNvbGxlY3QgPT0gQ29sbGVjdEludGVyc2VjdGlvbkxpc3QpIHsKLSAgICAgICAgICAg
IGlmIChSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2hlY2tJbnRlcnNlY3Rpb24oc3ZnRWxlbWVudC0+
cmVuZGVyZXIoKSwgcmVjdCkpCi0gICAgICAgICAgICAgICAgZWxlbWVudHMuYXBwZW5kKCpjb25z
dF9jYXN0PFNWR0VsZW1lbnQqPihzdmdFbGVtZW50KSk7CisgICAgICAgICAgICBpZiAoUmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OmNoZWNrSW50ZXJzZWN0aW9uKHN2Z0VsZW1lbnQucmVuZGVyZXIoKSwg
cmVjdCkpCisgICAgICAgICAgICAgICAgZWxlbWVudHMuYXBwZW5kKGNvbnN0X2Nhc3Q8U1ZHRWxl
bWVudCY+KHN2Z0VsZW1lbnQpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChS
ZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2hlY2tFbmNsb3N1cmUoc3ZnRWxlbWVudC0+cmVuZGVyZXIo
KSwgcmVjdCkpCi0gICAgICAgICAgICAgICAgZWxlbWVudHMuYXBwZW5kKCpjb25zdF9jYXN0PFNW
R0VsZW1lbnQqPihzdmdFbGVtZW50KSk7CisgICAgICAgICAgICBpZiAoUmVuZGVyU1ZHTW9kZWxP
YmplY3Q6OmNoZWNrRW5jbG9zdXJlKHN2Z0VsZW1lbnQucmVuZGVyZXIoKSwgcmVjdCkpCisgICAg
ICAgICAgICAgICAgZWxlbWVudHMuYXBwZW5kKGNvbnN0X2Nhc3Q8U1ZHRWxlbWVudCY+KHN2Z0Vs
ZW1lbnQpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzc3LDEwICs3NzUsOSBAQCBFbGVtZW50
KiBTVkdTVkdFbGVtZW50OjpnZXRFbGVtZW50QnlJZChjCiAKICAgICAvLyBGYWxsIGJhY2sgdG8g
dHJhdmVyc2luZyBvdXIgc3VidHJlZS4gRHVwbGljYXRlIGlkcyBhcmUgYWxsb3dlZCwgdGhlIGZp
cnN0IGZvdW5kIHdpbGwKICAgICAvLyBiZSByZXR1cm5lZC4KLSAgICBhdXRvIGRlc2NlbmRhbnRz
ID0gZWxlbWVudERlc2NlbmRhbnRzKCp0aGlzKTsKLSAgICBmb3IgKGF1dG8gZWxlbWVudCA9IGRl
c2NlbmRhbnRzLmJlZ2luKCksIGVuZCA9IGRlc2NlbmRhbnRzLmVuZCgpOyBlbGVtZW50ICE9IGVu
ZDsgKytlbGVtZW50KSB7Ci0gICAgICAgIGlmIChlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpID09
IGlkKQotICAgICAgICAgICAgcmV0dXJuICYqZWxlbWVudDsKKyAgICBmb3IgKGF1dG8mIGVsZW1l
bnQgOiBlbGVtZW50RGVzY2VuZGFudHMoKnRoaXMpKSB7CisgICAgICAgIGlmIChlbGVtZW50Lmdl
dElkQXR0cmlidXRlKCkgPT0gaWQpCisgICAgICAgICAgICByZXR1cm4gJmVsZW1lbnQ7CiAgICAg
fQogICAgIHJldHVybiAwOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N3aXRjaEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTd2l0Y2hFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTYwNTUwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N3aXRj
aEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMSArNTMsMTAgQEAgYm9vbCBTVkdT
d2l0Y2hFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZQogewogICAgIC8vIEZJWE1FOiBUaGlzIGZ1
bmN0aW9uIGRvZXMgbm90IGRvIHdoYXQgdGhlIGNvbW1lbnQgYmVsb3cgaW1wbGllcyBpdCBkb2Vz
LgogICAgIC8vIEl0IHdpbGwgY3JlYXRlIGEgcmVuZGVyZXIgZm9yIGFueSB2YWxpZCBTVkcgZWxl
bWVudCBjaGlsZHJlbiwgbm90IGp1c3QgdGhlIGZpcnN0IG9uZS4KLSAgICBhdXRvIHN2Z0NoaWxk
cmVuID0gY2hpbGRyZW5PZlR5cGU8U1ZHRWxlbWVudD4oKnRoaXMpOwotICAgIGZvciAoYXV0byBl
bGVtZW50ID0gc3ZnQ2hpbGRyZW4uYmVnaW4oKSwgZW5kID0gc3ZnQ2hpbGRyZW4uZW5kKCk7IGVs
ZW1lbnQgIT0gZW5kOyArK2VsZW1lbnQpIHsKLSAgICAgICAgaWYgKCFlbGVtZW50LT5pc1ZhbGlk
KCkpCisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRWxlbWVudD4o
KnRoaXMpKSB7CisgICAgICAgIGlmICghZWxlbWVudC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgcmV0dXJuICYqZWxlbWVudCA9PSAmY2hpbGQ7IC8vIE9ubHkgYWxs
b3cgdGhpcyBjaGlsZCBpZiBpdCdzIHRoZSBmaXJzdCB2YWxpZCBjaGlsZAorICAgICAgICByZXR1
cm4gJmVsZW1lbnQgPT0gJmNoaWxkOyAvLyBPbmx5IGFsbG93IHRoaXMgY2hpbGQgaWYgaXQncyB0
aGUgZmlyc3QgdmFsaWQgY2hpbGQKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjA1NTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OSw5
ICszNjksOCBAQCBzdGF0aWMgYm9vbCBpc0Rpc2FsbG93ZWRFbGVtZW50KGNvbnN0IEVsCiAKIHN0
YXRpYyBib29sIHN1YnRyZWVDb250YWluc0Rpc2FsbG93ZWRFbGVtZW50KFNWR0VsZW1lbnQmIHN0
YXJ0KQogewotICAgIGF1dG8gZGVzY2VuZGFudHMgPSBlbGVtZW50RGVzY2VuZGFudHMoc3RhcnQp
OwotICAgIGZvciAoYXV0byBlbGVtZW50ID0gZGVzY2VuZGFudHMuYmVnaW4oKSwgZW5kID0gZGVz
Y2VuZGFudHMuZW5kKCk7IGVsZW1lbnQgIT0gZW5kOyArK2VsZW1lbnQpIHsKLSAgICAgICAgaWYg
KGlzRGlzYWxsb3dlZEVsZW1lbnQoKmVsZW1lbnQpKQorICAgIGZvciAoYXV0byYgZWxlbWVudCA6
IGVsZW1lbnREZXNjZW5kYW50cyhzdGFydCkpIHsKKyAgICAgICAgaWYgKGlzRGlzYWxsb3dlZEVs
ZW1lbnQoZWxlbWVudCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTYw
NiwxOSArNjA1LDE4IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6YnVpbGRJbnN0YW5jZVRyZWUoU1YK
ICAgICAvLyBpcyB0aGUgU1ZHR0VsZW1lbnQgb2JqZWN0IGZvciB0aGUgJ2cnLCBhbmQgdGhlbiB0
d28gY2hpbGQgU1ZHRWxlbWVudEluc3RhbmNlIG9iamVjdHMsIGVhY2ggb2Ygd2hpY2ggaGFzCiAg
ICAgLy8gaXRzIGNvcnJlc3BvbmRpbmdFbGVtZW50IHRoYXQgaXMgYW4gU1ZHUmVjdEVsZW1lbnQg
b2JqZWN0LgogCi0gICAgYXV0byBzdmdDaGlsZHJlbiA9IGNoaWxkcmVuT2ZUeXBlPFNWR0VsZW1l
bnQ+KCp0YXJnZXQpOwotICAgIGZvciAoYXV0byBlbGVtZW50ID0gc3ZnQ2hpbGRyZW4uYmVnaW4o
KSwgZW5kID0gc3ZnQ2hpbGRyZW4uZW5kKCk7IGVsZW1lbnQgIT0gZW5kOyArK2VsZW1lbnQpIHsK
KyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdFbGVtZW50PigqdGFy
Z2V0KSkgewogICAgICAgICAvLyBTa2lwIGFueSBub24tc3ZnIG5vZGVzIG9yIGFueSBkaXNhbGxv
d2VkIGVsZW1lbnQuCi0gICAgICAgIGlmIChpc0Rpc2FsbG93ZWRFbGVtZW50KCplbGVtZW50KSkK
KyAgICAgICAgaWYgKGlzRGlzYWxsb3dlZEVsZW1lbnQoZWxlbWVudCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAogICAgICAgICAvLyBDcmVhdGUgU1ZHRWxlbWVudEluc3RhbmNlIG9iamVjdCwg
Zm9yIGJvdGggY29udGFpbmVyL25vbi1jb250YWluZXIgbm9kZXMuCi0gICAgICAgIFJlZlB0cjxT
VkdFbGVtZW50SW5zdGFuY2U+IGluc3RhbmNlID0gU1ZHRWxlbWVudEluc3RhbmNlOjpjcmVhdGUo
dGhpcywgMCwgJiplbGVtZW50KTsKKyAgICAgICAgUmVmUHRyPFNWR0VsZW1lbnRJbnN0YW5jZT4g
aW5zdGFuY2UgPSBTVkdFbGVtZW50SW5zdGFuY2U6OmNyZWF0ZSh0aGlzLCAwLCAmZWxlbWVudCk7
CiAgICAgICAgIFNWR0VsZW1lbnRJbnN0YW5jZSogaW5zdGFuY2VQdHIgPSBpbnN0YW5jZS5nZXQo
KTsKICAgICAgICAgdGFyZ2V0SW5zdGFuY2UtPmFwcGVuZENoaWxkKGluc3RhbmNlLnJlbGVhc2Uo
KSk7CiAKICAgICAgICAgLy8gRW50ZXIgcmVjdXJzaW9uLCBhcHBlbmRpbmcgbmV3IGluc3RhbmNl
IHRyZWUgbm9kZXMgdG8gdGhlICJpbnN0YW5jZSIgb2JqZWN0LgotICAgICAgICBidWlsZEluc3Rh
bmNlVHJlZSgmKmVsZW1lbnQsIGluc3RhbmNlUHRyLCBmb3VuZFByb2JsZW0sIGZvdW5kVXNlKTsK
KyAgICAgICAgYnVpbGRJbnN0YW5jZVRyZWUoJmVsZW1lbnQsIGluc3RhbmNlUHRyLCBmb3VuZFBy
b2JsZW0sIGZvdW5kVXNlKTsKICAgICAgICAgaWYgKGZvdW5kUHJvYmxlbSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxU
aW1lQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0
aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcAkocmV2aXNpb24gMTYwNTUwKQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyNiw5ICsyMjYsOCBAQCB2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjp1cGRhdGVEb2N1bWVu
dE9yCiB7CiAgICAgdW5zaWduZWQgdGltaW5nRWxlbWVudENvdW50ID0gMDsKIAotICAgIGF1dG8g
c21pbERlc2NlbmRhbnRzID0gZGVzY2VuZGFudHNPZlR5cGU8U1ZHU01JTEVsZW1lbnQ+KCptX293
bmVyU1ZHRWxlbWVudCk7Ci0gICAgZm9yIChhdXRvIHNtaWxFbGVtZW50ID0gc21pbERlc2NlbmRh
bnRzLmJlZ2luKCksIGVuZCA9IHNtaWxEZXNjZW5kYW50cy5lbmQoKTsgc21pbEVsZW1lbnQgIT0g
ZW5kOyArK3NtaWxFbGVtZW50KQotICAgICAgICBzbWlsRWxlbWVudC0+c2V0RG9jdW1lbnRPcmRl
ckluZGV4KHRpbWluZ0VsZW1lbnRDb3VudCsrKTsKKyAgICBmb3IgKGF1dG8mIHNtaWxFbGVtZW50
IDogZGVzY2VuZGFudHNPZlR5cGU8U1ZHU01JTEVsZW1lbnQ+KCptX293bmVyU1ZHRWxlbWVudCkp
CisgICAgICAgIHNtaWxFbGVtZW50LnNldERvY3VtZW50T3JkZXJJbmRleCh0aW1pbmdFbGVtZW50
Q291bnQrKyk7CiAKICAgICBtX2RvY3VtZW50T3JkZXJJbmRleGVzRGlydHkgPSBmYWxzZTsKIH0K
</data>
<flag name="review"
          id="242826"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>