<?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>27654</bug_id>
          
          <creation_ts>2009-07-24 07:54:39 -0700</creation_ts>
          <short_desc>WebCore/page/Frame.cpp/h does not conform to style standards</short_desc>
          <delta_ts>2009-07-25 00:47:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</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>0</everconfirmed>
          <reporter name="Mike Fenton">mifenton</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>abarth</cc>
    
    <cc>manyoso</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>134556</commentid>
    <comment_count>0</comment_count>
    <who name="Mike Fenton">mifenton</who>
    <bug_when>2009-07-24 07:54:39 -0700</bug_when>
    <thetext>cpplint reports a number of valid style fixes that should be made to
WebCore/page/Frame.cpp/h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134562</commentid>
    <comment_count>1</comment_count>
      <attachid>33449</attachid>
    <who name="Mike Fenton">mifenton</who>
    <bug_when>2009-07-24 08:13:47 -0700</bug_when>
    <thetext>Created attachment 33449
Style patch for Frame.cpp/h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134564</commentid>
    <comment_count>2</comment_count>
      <attachid>33450</attachid>
    <who name="Mike Fenton">mifenton</who>
    <bug_when>2009-07-24 08:17:27 -0700</bug_when>
    <thetext>Created attachment 33450
Fixed bug # typo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134576</commentid>
    <comment_count>3</comment_count>
      <attachid>33450</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-07-24 09:05:05 -0700</bug_when>
    <thetext>Comment on attachment 33450
Fixed bug # typo

While I fundamentally disagree with this class of changes altogether, I have no reason not to r+ this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134718</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-25 00:35:08 -0700</bug_when>
    <thetext>I like these kinds of changes.  A tidy house is a happy house.  Will land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134719</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-25 00:47:34 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/page/Frame.cpp
	M	WebCore/page/Frame.h
Committed r46389
	M	WebCore/ChangeLog
	M	WebCore/page/Frame.h
	M	WebCore/page/Frame.cpp
r46389 = 583e2c94fa6d32db1571218198325a659703de9b (trunk)
No changes between current HEAD and refs/remotes/trunk
Resetting to the latest refs/remotes/trunk
http://trac.webkit.org/changeset/46389</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33449</attachid>
            <date>2009-07-24 08:13:47 -0700</date>
            <delta_ts>2009-07-24 08:17:27 -0700</delta_ts>
            <desc>Style patch for Frame.cpp/h</desc>
            <filename>FramePatch.diff</filename>
            <type>text/plain</type>
            <size>45417</size>
            <attacher name="Mike Fenton">mifenton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjMxMzA2Ni4uYTE3NTU2MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAwOS0wNy0yNCAgTWlrZSBGZW50b24g
IDxtaWtlLmZlbnRvbkB0b3JjaG1vYmlsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAvaCB0
byBjb25mb3JtIHRvIFdlYktpdAorICAgICAgICBTdHlsZSBHdWlkZWxpbmVzIGFzIGlkZW50aWZp
ZWQgYnkgY3BwbGludC5weS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTI3NjI0CisKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6fkZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXREb2N1bWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6Zmlyc3RSZWN0Rm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUmVn
RXhwRm9yTGFiZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZWFyY2hGb3JMYWJlbHNC
ZWZvcmVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjptYXRjaExhYmVsc0FnYWlu
c3RFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZWxlY3Rpb25MYXlvdXRDaGFu
Z2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXRab29tRmFjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpyZWFwcGx5U3R5bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
Ojppc0NvbnRlbnRFZGl0YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6Y29tcHV0ZUFu
ZFNldFR5cGluZ1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZWxlY3Rpb25TdGFy
dFN0eWxlUHJvcGVydHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2VsZWN0aW9u
Q29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6YXBwbHlFZGl0aW5nU3R5
bGVUb0JvZHlFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpyZW1vdmVFZGl0aW5n
U3R5bGVGcm9tQm9keUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmFwcGx5RWRp
dGluZ1N0eWxlVG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZWxlY3Rpb25C
b3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmN1cnJlbnRGb3JtKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpyZXZlYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWU6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNl
dFNlbGVjdGlvbkZyb21Ob25lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpmaW5kU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjptYXJrQWxsTWF0Y2hlc0ZvclRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmNsZWFyRm9ybWVyRE9NV2luZG93KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lOjp1bmZvY3VzV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
Ojpkb2N1bWVudEF0UG9pbnQpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRpc3BsYXlT
dHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnBhZ2Va
b29tRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjp0ZXh0Wm9vbUZhY3Rvcik6CisK
IDIwMDktMDctMjMgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IE1hcmsgUm93ZS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAg
Yi9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDg3MGJkMmEuLjJkNmE3OTUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApA
QCAtNDIsMjEgKzQyLDIwIEBACiAjaW5jbHVkZSAiRWRpdGluZ1RleHQuaCIKICNpbmNsdWRlICJF
ZGl0b3JDbGllbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRm9jdXND
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiRm9jdXNDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRl
ckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MRnJhbWVFbGVtZW50QmFzZS5oIgotI2luY2x1ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MVGFibGVDZWxsRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0j
aW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSAiTWVkaWFGZWF0dXJlTmFtZXMuaCIKICNpbmNs
dWRlICJOYXZpZ2F0b3IuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgpAQCAtNjcsMTIgKzY2LDEz
IEBACiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVt
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNp
bmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIKLSNp
bmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKKyNp
bmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgogI2luY2x1ZGUg
InZpc2libGVfdW5pdHMuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmg+
CkBAIC0xMDQsNyArMTA0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwogCi0jaWZuZGVmIE5ERUJVRyAgICAKKyNpZm5kZWYgTkRFQlVHCiBzdGF0
aWMgV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXIgZnJhbWVDb3VudGVyKCJGcmFtZSIpOwogI2Vu
ZGlmCiAKQEAgLTExNSw3ICsxMTUsNyBAQCBzdGF0aWMgaW5saW5lIEZyYW1lKiBwYXJlbnRGcm9t
T3duZXJFbGVtZW50KEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50KQogICAgIHJl
dHVybiBvd25lckVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCk7CiB9CiAKLUZyYW1lOjpGcmFt
ZShQYWdlKiBwYWdlLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgRnJhbWVM
b2FkZXJDbGllbnQqIGZyYW1lTG9hZGVyQ2xpZW50KSAKK0ZyYW1lOjpGcmFtZShQYWdlKiBwYWdl
LCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgRnJhbWVMb2FkZXJDbGllbnQq
IGZyYW1lTG9hZGVyQ2xpZW50KQogICAgIDogbV9wYWdlKHBhZ2UpCiAgICAgLCBtX3RyZWVOb2Rl
KHRoaXMsIHBhcmVudEZyb21Pd25lckVsZW1lbnQob3duZXJFbGVtZW50KSkKICAgICAsIG1fbG9h
ZGVyKHRoaXMsIGZyYW1lTG9hZGVyQ2xpZW50KQpAQCAtMTYzLDcgKzE2Myw3IEBAIEZyYW1lOjpG
cmFtZShQYWdlKiBwYWdlLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgRnJh
bWVMb2FkZXJDbGllbnQqCiAgICAgZWxzZSB7CiAgICAgICAgIHBhZ2UtPmluY3JlbWVudEZyYW1l
Q291bnQoKTsKICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIHdpbGwgbm90IGVuZCB1cCB3aXRoIHR3
byBmcmFtZXMgcmVmZXJlbmNpbmcgdGhlIHNhbWUgb3duZXIgZWxlbWVudC4KLSAgICAgICAgQVNT
RVJUKCghKG93bmVyRWxlbWVudC0+bV9jb250ZW50RnJhbWUpKSB8fCAob3duZXJFbGVtZW50LT5t
X2NvbnRlbnRGcmFtZS0+b3duZXJFbGVtZW50KCkgIT0gb3duZXJFbGVtZW50KSk7ICAgICAgICAK
KyAgICAgICAgQVNTRVJUKCghKG93bmVyRWxlbWVudC0+bV9jb250ZW50RnJhbWUpKSB8fCAob3du
ZXJFbGVtZW50LT5tX2NvbnRlbnRGcmFtZS0+b3duZXJFbGVtZW50KCkgIT0gb3duZXJFbGVtZW50
KSk7CiAgICAgICAgIG93bmVyRWxlbWVudC0+bV9jb250ZW50RnJhbWUgPSB0aGlzOwogICAgIH0K
IApAQCAtMTc2LDcgKzE3Niw3IEBAIEZyYW1lOjp+RnJhbWUoKQogewogICAgIHNldFZpZXcoMCk7
CiAgICAgbG9hZGVyKCktPmNhbmNlbEFuZENsZWFyKCk7Ci0gICAgCisKICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIG5vdCBiZSBkb2luZyBhbGwgdGhpcyB3b3JrIGluc2lkZSB0aGUgZGVzdHJ1Y3Rv
cgogCiAgICAgQVNTRVJUKCFtX2xpZmVTdXBwb3J0VGltZXIuaXNBY3RpdmUoKSk7CkBAIC0xODYs
MTQgKzE4NiwxNCBAQCBGcmFtZTo6fkZyYW1lKCkKICNlbmRpZgogCiAgICAgZGlzY29ubmVjdE93
bmVyRWxlbWVudCgpOwotICAgIAorCiAgICAgaWYgKG1fZG9tV2luZG93KQogICAgICAgICBtX2Rv
bVdpbmRvdy0+ZGlzY29ubmVjdEZyYW1lKCk7CiAKICAgICBIYXNoU2V0PERPTVdpbmRvdyo+Ojpp
dGVyYXRvciBlbmQgPSBtX2xpdmVGb3JtZXJXaW5kb3dzLmVuZCgpOwogICAgIGZvciAoSGFzaFNl
dDxET01XaW5kb3cqPjo6aXRlcmF0b3IgaXQgPSBtX2xpdmVGb3JtZXJXaW5kb3dzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgKCppdCktPmRpc2Nvbm5lY3RGcmFtZSgpOwotICAg
ICAgICAgICAgCisKICAgICBpZiAobV92aWV3KSB7CiAgICAgICAgIG1fdmlldy0+aGlkZSgpOwog
ICAgICAgICBtX3ZpZXctPmNsZWFyRnJhbWUoKTsKQEAgLTI2Miw3ICsyNjIsNyBAQCB2b2lkIEZy
YW1lOjpzZXREb2N1bWVudChQYXNzUmVmUHRyPERvY3VtZW50PiBuZXdEb2MpCiAgICAgbV9kb2Mg
PSBuZXdEb2M7CiAgICAgaWYgKG1fZG9jICYmIHNlbGVjdGlvbigpLT5pc0ZvY3VzZWRBbmRBY3Rp
dmUoKSkKICAgICAgICAgc2V0VXNlU2VjdXJlS2V5Ym9hcmRFbnRyeShtX2RvYy0+dXNlU2VjdXJl
S2V5Ym9hcmRFbnRyeVdoZW5BY3RpdmUoKSk7Ci0gICAgICAgIAorCiAgICAgaWYgKG1fZG9jICYm
ICFtX2RvYy0+YXR0YWNoZWQoKSkKICAgICAgICAgbV9kb2MtPmF0dGFjaCgpOwogCkBAIC0zMDcs
MTQgKzMwNywxNCBAQCBJbnRSZWN0IEZyYW1lOjpmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSogcmFu
Z2UpIGNvbnN0CiAKICAgICBpZiAoc3RhcnRDYXJldFJlY3QueSgpID09IGVuZENhcmV0UmVjdC55
KCkpIHsKICAgICAgICAgLy8gc3RhcnQgYW5kIGVuZCBhcmUgb24gdGhlIHNhbWUgbGluZQotICAg
ICAgICByZXR1cm4gSW50UmVjdChtaW4oc3RhcnRDYXJldFJlY3QueCgpLCBlbmRDYXJldFJlY3Qu
eCgpKSwgCi0gICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q2FyZXRSZWN0LnkoKSwgCisgICAg
ICAgIHJldHVybiBJbnRSZWN0KG1pbihzdGFydENhcmV0UmVjdC54KCksIGVuZENhcmV0UmVjdC54
KCkpLAorICAgICAgICAgICAgICAgICAgICAgICBzdGFydENhcmV0UmVjdC55KCksCiAgICAgICAg
ICAgICAgICAgICAgICAgIGFicyhlbmRDYXJldFJlY3QueCgpIC0gc3RhcnRDYXJldFJlY3QueCgp
KSwKICAgICAgICAgICAgICAgICAgICAgICAgbWF4KHN0YXJ0Q2FyZXRSZWN0LmhlaWdodCgpLCBl
bmRDYXJldFJlY3QuaGVpZ2h0KCkpKTsKICAgICB9Ci0gICAgCisKICAgICAvLyBzdGFydCBhbmQg
ZW5kIGFyZW4ndCBvbiB0aGUgc2FtZSBsaW5lLCBzbyBnbyBmcm9tIHN0YXJ0IHRvIHRoZSBlbmQg
b2YgaXRzIGxpbmUKLSAgICByZXR1cm4gSW50UmVjdChzdGFydENhcmV0UmVjdC54KCksIAorICAg
IHJldHVybiBJbnRSZWN0KHN0YXJ0Q2FyZXRSZWN0LngoKSwKICAgICAgICAgICAgICAgICAgICBz
dGFydENhcmV0UmVjdC55KCksCiAgICAgICAgICAgICAgICAgICAgc3RhcnRDYXJldFJlY3Qud2lk
dGgoKSArIGV4dHJhV2lkdGhUb0VuZE9mTGluZSwKICAgICAgICAgICAgICAgICAgICBzdGFydENh
cmV0UmVjdC5oZWlnaHQoKSk7CkBAIC0zNjUsMjMgKzM2NSwyMSBAQCBzdGF0aWMgUmVndWxhckV4
cHJlc3Npb24qIGNyZWF0ZVJlZ0V4cEZvckxhYmVscyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFi
ZWxzKQogCiAgICAgICAgIGJvb2wgc3RhcnRzV2l0aFdvcmRDaGFyID0gZmFsc2U7CiAgICAgICAg
IGJvb2wgZW5kc1dpdGhXb3JkQ2hhciA9IGZhbHNlOwotICAgICAgICBpZiAobGFiZWwubGVuZ3Ro
KCkgIT0gMCkgeworICAgICAgICBpZiAobGFiZWwubGVuZ3RoKCkpIHsKICAgICAgICAgICAgIHN0
YXJ0c1dpdGhXb3JkQ2hhciA9IHdvcmRSZWdFeHAubWF0Y2gobGFiZWwuc3Vic3RyaW5nKDAsIDEp
KSA+PSAwOwogICAgICAgICAgICAgZW5kc1dpdGhXb3JkQ2hhciA9IHdvcmRSZWdFeHAubWF0Y2go
bGFiZWwuc3Vic3RyaW5nKGxhYmVsLmxlbmd0aCgpIC0gMSwgMSkpID49IDA7CiAgICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChpICE9IDApCisKKyAgICAgICAgaWYgKGkpCiAgICAgICAg
ICAgICBwYXR0ZXJuLmFwcGVuZCgifCIpOwogICAgICAgICAvLyBTZWFyY2ggZm9yIHdvcmQgYm91
bmRhcmllcyBvbmx5IGlmIGxhYmVsIHN0YXJ0cy9lbmRzIHdpdGggIndvcmQgY2hhcmFjdGVycyIu
CiAgICAgICAgIC8vIElmIHdlIGFsd2F5cyBzZWFyY2hlZCBmb3Igd29yZCBib3VuZGFyaWVzLCB0
aGlzIHdvdWxkbid0IHdvcmsgZm9yIGxhbmd1YWdlcwogICAgICAgICAvLyBzdWNoIGFzIEphcGFu
ZXNlLgotICAgICAgICBpZiAoc3RhcnRzV2l0aFdvcmRDaGFyKSB7CisgICAgICAgIGlmIChzdGFy
dHNXaXRoV29yZENoYXIpCiAgICAgICAgICAgICBwYXR0ZXJuLmFwcGVuZCgiXFxiIik7Ci0gICAg
ICAgIH0KICAgICAgICAgcGF0dGVybi5hcHBlbmQobGFiZWwpOwotICAgICAgICBpZiAoZW5kc1dp
dGhXb3JkQ2hhcikgeworICAgICAgICBpZiAoZW5kc1dpdGhXb3JkQ2hhcikKICAgICAgICAgICAg
IHBhdHRlcm4uYXBwZW5kKCJcXGIiKTsKLSAgICAgICAgfQogICAgIH0KICAgICBwYXR0ZXJuLmFw
cGVuZCgiKSIpOwogICAgIHJldHVybiBuZXcgUmVndWxhckV4cHJlc3Npb24ocGF0dGVybiwgVGV4
dENhc2VJbnNlbnNpdGl2ZSk7CkBAIC00NjIsOSArNDYwLDggQEAgU3RyaW5nIEZyYW1lOjpzZWFy
Y2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYWJlbHMsIEVs
ZW1lbnQKIAogICAgIC8vIElmIHdlIHN0YXJ0ZWQgaW4gYSBjZWxsLCBidXQgYmFpbGVkIGJlY2F1
c2Ugd2UgZm91bmQgdGhlIHN0YXJ0IG9mIHRoZSBmb3JtIG9yIHRoZQogICAgIC8vIHByZXZpb3Vz
IGVsZW1lbnQsIHdlIHN0aWxsIG1pZ2h0IG5lZWQgdG8gc2VhcmNoIHRoZSByb3cgYWJvdmUgdXMg
Zm9yIGEgbGFiZWwuCi0gICAgaWYgKHN0YXJ0aW5nVGFibGVDZWxsICYmICFzZWFyY2hlZENlbGxB
Ym92ZSkgeworICAgIGlmIChzdGFydGluZ1RhYmxlQ2VsbCAmJiAhc2VhcmNoZWRDZWxsQWJvdmUp
CiAgICAgICAgICByZXR1cm4gc2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxsKHJlZ0V4cC5nZXQoKSwg
c3RhcnRpbmdUYWJsZUNlbGwpOwotICAgIH0KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKQEAg
LTQ3Nyw3ICs0NzQsNyBAQCBTdHJpbmcgRnJhbWU6Om1hdGNoTGFiZWxzQWdhaW5zdEVsZW1lbnQo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGxhYmVscywgRWxlbWVudCogZQogICAgIC8vIE1ha2UgbnVt
YmVycyBhbmQgXydzIGluIGZpZWxkIG5hbWVzIGJlaGF2ZSBsaWtlIHdvcmQgYm91bmRhcmllcywg
ZS5nLiwgImFkZHJlc3MyIgogICAgIHJlcGxhY2UobmFtZSwgUmVndWxhckV4cHJlc3Npb24oIlxc
ZCIsIFRleHRDYXNlU2Vuc2l0aXZlKSwgIiAiKTsKICAgICBuYW1lLnJlcGxhY2UoJ18nLCAnICcp
OwotICAgIAorCiAgICAgT3duUHRyPFJlZ3VsYXJFeHByZXNzaW9uPiByZWdFeHAoY3JlYXRlUmVn
RXhwRm9yTGFiZWxzKGxhYmVscykpOwogICAgIC8vIFVzZSB0aGUgbGFyZ2VzdCBtYXRjaCB3ZSBj
YW4gZmluZCBpbiB0aGUgd2hvbGUgbmFtZSBzdHJpbmcKICAgICBpbnQgcG9zOwpAQCAtNjQwLDcg
KzYzNyw3IEBAIHZvaWQgRnJhbWU6OnNlbGVjdGlvbkxheW91dENoYW5nZWQoKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHRoaXMtPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKTsKLSAgICAgICAgCisKICAgICBpZiAoIXNlbGVjdGlvbi5pc1Jhbmdl
KCkpCiAgICAgICAgIHZpZXctPmNsZWFyU2VsZWN0aW9uKCk7CiAgICAgZWxzZSB7CkBAIC02NTQs
NyArNjUxLDcgQEAgdm9pZCBGcmFtZTo6c2VsZWN0aW9uTGF5b3V0Q2hhbmdlZCgpCiAgICAgICAg
IFBvc2l0aW9uIGVuZFBvcyA9IHNlbGVjdGlvbi5lbmQoKTsKICAgICAgICAgaWYgKGVuZFBvcy51
cHN0cmVhbSgpLmlzQ2FuZGlkYXRlKCkpCiAgICAgICAgICAgICBlbmRQb3MgPSBlbmRQb3MudXBz
dHJlYW0oKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gV2UgY2FuIGdldCBpbnRvIGEgc3RhdGUg
d2hlcmUgdGhlIHNlbGVjdGlvbiBlbmRwb2ludHMgbWFwIHRvIHRoZSBzYW1lIFZpc2libGVQb3Np
dGlvbiB3aGVuIGEgc2VsZWN0aW9uIGlzIGRlbGV0ZWQKICAgICAgICAgLy8gYmVjYXVzZSB3ZSBk
b24ndCB5ZXQgbm90aWZ5IHRoZSBTZWxlY3Rpb25Db250cm9sbGVyIG9mIHRleHQgcmVtb3ZhbC4K
ICAgICAgICAgaWYgKHN0YXJ0UG9zLmlzTm90TnVsbCgpICYmIGVuZFBvcy5pc05vdE51bGwoKSAm
JiBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkgIT0gc2VsZWN0aW9uLnZpc2libGVFbmQoKSkgewpA
QCAtNzI5LDEyICs3MjYsMTIgQEAgYm9vbCBGcmFtZTo6c2hvdWxkQXBwbHlQYWdlWm9vbSgpIGNv
bnN0CiB9CiAKIHZvaWQgRnJhbWU6OnNldFpvb21GYWN0b3IoZmxvYXQgcGVyY2VudCwgYm9vbCBp
c1RleHRPbmx5KQoteyAgCit7CiAgICAgaWYgKG1fem9vbUZhY3RvciA9PSBwZXJjZW50ICYmIGlz
Wm9vbUZhY3RvclRleHRPbmx5KCkgPT0gaXNUZXh0T25seSkKICAgICAgICAgcmV0dXJuOwogCiAj
aWYgRU5BQkxFKFNWRykKLSAgICAvLyBTVkcgZG9lc24ndCBjYXJlIGlmIHRoZSB6b29tIGZhY3Rv
ciBpcyB0ZXh0IG9ubHkuICBJdCB3aWxsIGFsd2F5cyBhcHBseSBhIAorICAgIC8vIFNWRyBkb2Vz
bid0IGNhcmUgaWYgdGhlIHpvb20gZmFjdG9yIGlzIHRleHQgb25seS4gIEl0IHdpbGwgYWx3YXlz
IGFwcGx5IGEKICAgICAvLyB6b29tIHRvIHRoZSB3aG9sZSBTVkcuCiAgICAgaWYgKG1fZG9jLT5p
c1NWR0RvY3VtZW50KCkpIHsKICAgICAgICAgaWYgKCFzdGF0aWNfY2FzdDxTVkdEb2N1bWVudCo+
KG1fZG9jLmdldCgpKS0+em9vbUFuZFBhbkVuYWJsZWQoKSkKQEAgLTgyNyw3ICs4MjQsNyBAQCB2
b2lkIEZyYW1lOjpyZWFwcGx5U3R5bGVzKCkKICAgICAvLyBGSVhNRTogVGhpcyBjYWxsIGRvZXNu
J3QgcmVhbGx5IG1ha2Ugc2Vuc2UgaW4gYSBmdW5jdGlvbiBjYWxsZWQgcmVhcHBseVN0eWxlcy4K
ICAgICAvLyBXZSBzaG91bGQgcHJvYmFibHkgZXZlbnR1YWxseSBtb3ZlIGl0IGludG8gaXRzIG93
biBmdW5jdGlvbi4KICAgICBtX2RvYy0+ZG9jTG9hZGVyKCktPnNldEF1dG9Mb2FkSW1hZ2VzKG1f
cGFnZSAmJiBtX3BhZ2UtPnNldHRpbmdzKCktPmxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSgpKTsK
LSAgICAgICAgCisKICNpZiBGUkFNRV9MT0FEU19VU0VSX1NUWUxFU0hFRVQKICAgICBjb25zdCBL
VVJMIHVzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSBtX3BhZ2UgPyBtX3BhZ2UtPnNldHRpbmdzKCkt
PnVzZXJTdHlsZVNoZWV0TG9jYXRpb24oKSA6IEtVUkwoKTsKICAgICBpZiAoIXVzZXJTdHlsZVNo
ZWV0TG9jYXRpb24uaXNFbXB0eSgpKQpAQCAtODU5LDcgKzg1Niw3IEBAIGJvb2wgRnJhbWU6OnNo
b3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNv
bnN0CiAgICAgcmV0dXJuIGVkaXRvcigpLT5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2Uoc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwogfQogCi1ib29sIEZyYW1lOjppc0Nv
bnRlbnRFZGl0YWJsZSgpIGNvbnN0IAorYm9vbCBGcmFtZTo6aXNDb250ZW50RWRpdGFibGUoKSBj
b25zdAogewogICAgIGlmIChtX2VkaXRvci5jbGllbnRJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtODk3LDcgKzg5NCw3IEBAIHZvaWQgRnJhbWU6OmNsZWFyVHlwaW5nU3R5
bGUoKQogCiB2b2lkIEZyYW1lOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoQ1NTU3R5bGVEZWNs
YXJhdGlvbiAqc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKLSAgICBpZiAoIXN0
eWxlIHx8IHN0eWxlLT5sZW5ndGgoKSA9PSAwKSB7CisgICAgaWYgKCFzdHlsZSB8fCAhc3R5bGUt
Pmxlbmd0aCgpKSB7CiAgICAgICAgIGNsZWFyVHlwaW5nU3R5bGUoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTkzMyw3ICs5MzAsNyBAQCB2b2lkIEZyYW1lOjpjb21wdXRlQW5kU2V0VHlw
aW5nU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUsIEVkaXRBY3Rpb24gZWRpdAogICAg
IGJsb2NrU3R5bGUtPmRpZmYobXV0YWJsZVN0eWxlLmdldCgpKTsKICAgICBpZiAoYmxvY2tTdHls
ZS0+bGVuZ3RoKCkgPiAwKQogICAgICAgICBhcHBseUNvbW1hbmQoQXBwbHlTdHlsZUNvbW1hbmQ6
OmNyZWF0ZShkb2N1bWVudCgpLCBibG9ja1N0eWxlLmdldCgpLCBlZGl0aW5nQWN0aW9uKSk7Ci0g
ICAgCisKICAgICAvLyBTZXQgdGhlIHJlbWFpbmluZyBzdHlsZSBhcyB0aGUgdHlwaW5nIHN0eWxl
LgogICAgIG1fdHlwaW5nU3R5bGUgPSBtdXRhYmxlU3R5bGUucmVsZWFzZSgpOwogfQpAQCAtOTUw
LDcgKzk0Nyw3IEBAIFN0cmluZyBGcmFtZTo6c2VsZWN0aW9uU3RhcnRTdHlsZVByb3BlcnR5VmFs
dWUoaW50IHN0eWxlUHJvcGVydHlJRCkgY29uc3QKICAgICBpZiAobm9kZVRvUmVtb3ZlKSB7CiAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92
ZShlYyk7Ci0gICAgICAgIEFTU0VSVChlYyA9PSAwKTsKKyAgICAgICAgQVNTRVJUKCFlYyk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIHZhbHVlOwpAQCAtOTY5LDcgKzk2Niw3IEBAIFBhc3NSZWZQdHI8
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBGcmFtZTo6c2VsZWN0aW9uQ29tcHV0ZWRTdHls
ZShOb2RlKiYgbm9kCiAgICAgRWxlbWVudCAqZWxlbSA9IHBvcy5lbGVtZW50KCk7CiAgICAgaWYg
KCFlbGVtKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKKwogICAgIFJlZlB0cjxFbGVtZW50PiBz
dHlsZUVsZW1lbnQgPSBlbGVtOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCkBAIC05Nzcs
MTAgKzk3NCwxMCBAQCBQYXNzUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gRnJh
bWU6OnNlbGVjdGlvbkNvbXB1dGVkU3R5bGUoTm9kZSomIG5vZAogICAgICAgICBzdHlsZUVsZW1l
bnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHNwYW5UYWcsIGZhbHNlKTsKIAogICAgICAg
ICBzdHlsZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsIG1fdHlwaW5nU3R5bGUtPmNz
c1RleHQoKS5pbXBsKCksIGVjKTsKLSAgICAgICAgQVNTRVJUKGVjID09IDApOwotICAgICAgICAK
KyAgICAgICAgQVNTRVJUKCFlYyk7CisKICAgICAgICAgc3R5bGVFbGVtZW50LT5hcHBlbmRDaGls
ZChkb2N1bWVudCgpLT5jcmVhdGVFZGl0aW5nVGV4dE5vZGUoIiIpLCBlYyk7Ci0gICAgICAgIEFT
U0VSVChlYyA9PSAwKTsKKyAgICAgICAgQVNTRVJUKCFlYyk7CiAKICAgICAgICAgaWYgKGVsZW0t
PnJlbmRlcmVyKCkgJiYgZWxlbS0+cmVuZGVyZXIoKS0+Y2FuSGF2ZUNoaWxkcmVuKCkpIHsKICAg
ICAgICAgICAgIGVsZW0tPmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCwgZWMpOwpAQCAtOTg4LDEz
ICs5ODUsMTIgQEAgUGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IEZyYW1l
OjpzZWxlY3Rpb25Db21wdXRlZFN0eWxlKE5vZGUqJiBub2QKICAgICAgICAgICAgIE5vZGUgKnBh
cmVudCA9IGVsZW0tPnBhcmVudCgpOwogICAgICAgICAgICAgTm9kZSAqbmV4dCA9IGVsZW0tPm5l
eHRTaWJsaW5nKCk7CiAKLSAgICAgICAgICAgIGlmIChuZXh0KSB7CisgICAgICAgICAgICBpZiAo
bmV4dCkKICAgICAgICAgICAgICAgICBwYXJlbnQtPmluc2VydEJlZm9yZShzdHlsZUVsZW1lbnQs
IG5leHQsIGVjKTsKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgcGFyZW50LT5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQsIGVjKTsKLSAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBBU1NFUlQoZWMgPT0gMCk7CisgICAgICAgIEFT
U0VSVCghZWMpOwogCiAgICAgICAgIG5vZGVUb1JlbW92ZSA9IHN0eWxlRWxlbWVudC5nZXQoKTsK
ICAgICB9CkBAIC0xMDQ0LDE4ICsxMDQwLDE2IEBAIHZvaWQgRnJhbWU6OmFwcGx5RWRpdGluZ1N0
eWxlVG9Cb2R5RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0g
bV9kb2MtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5Iik7CiAgICAgdW5zaWduZWQgbGVuID0g
bGlzdC0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7
Ci0gICAgICAgIGFwcGx5RWRpdGluZ1N0eWxlVG9FbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQq
PihsaXN0LT5pdGVtKGkpKSk7ICAgIAotICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuOyBpKyspCisgICAgICAgIGFwcGx5RWRpdGluZ1N0eWxlVG9FbGVtZW50KHN0YXRpY19j
YXN0PEVsZW1lbnQqPihsaXN0LT5pdGVtKGkpKSk7CiB9CiAKIHZvaWQgRnJhbWU6OnJlbW92ZUVk
aXRpbmdTdHlsZUZyb21Cb2R5RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgUmVmUHRyPE5vZGVMaXN0
PiBsaXN0ID0gbV9kb2MtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5Iik7CiAgICAgdW5zaWdu
ZWQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bjsgaSsrKSB7Ci0gICAgICAgIHJlbW92ZUVkaXRpbmdTdHlsZUZyb21FbGVtZW50KHN0YXRpY19j
YXN0PEVsZW1lbnQqPihsaXN0LT5pdGVtKGkpKSk7ICAgIAotICAgIH0KKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgICAgIHJlbW92ZUVkaXRpbmdTdHlsZUZyb21F
bGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihsaXN0LT5pdGVtKGkpKSk7CiB9CiAKIHZvaWQg
RnJhbWU6OmFwcGx5RWRpdGluZ1N0eWxlVG9FbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0
CkBAIC0xMDY4LDExICsxMDYyLDExIEBAIHZvaWQgRnJhbWU6OmFwcGx5RWRpdGluZ1N0eWxlVG9F
bGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXb3JkV3JhcCwgImJyZWFrLXdv
cmQiLCBmYWxzZSwgZWMpOwotICAgIEFTU0VSVChlYyA9PSAwKTsKKyAgICBBU1NFUlQoIWVjKTsK
ICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXROYnNwTW9kZSwgInNwYWNl
IiwgZmFsc2UsIGVjKTsKLSAgICBBU1NFUlQoZWMgPT0gMCk7CisgICAgQVNTRVJUKCFlYyk7CiAg
ICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0TGluZUJyZWFrLCAiYWZ0ZXIt
d2hpdGUtc3BhY2UiLCBmYWxzZSwgZWMpOwotICAgIEFTU0VSVChlYyA9PSAwKTsKKyAgICBBU1NF
UlQoIWVjKTsKIH0KIAogdm9pZCBGcmFtZTo6cmVtb3ZlRWRpdGluZ1N0eWxlRnJvbUVsZW1lbnQo
RWxlbWVudCopIGNvbnN0CkBAIC0xMTg5LDcgKzExODMsNyBAQCBGbG9hdFJlY3QgRnJhbWU6OnNl
bGVjdGlvbkJvdW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdAogICAgIEZyYW1l
VmlldyogdmlldyA9IG1fdmlldy5nZXQoKTsKICAgICBpZiAoIXJvb3QgfHwgIXZpZXcpCiAgICAg
ICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgCisKICAgICBJbnRSZWN0IHNlbGVjdGlvblJlY3Qg
PSByb290LT5zZWxlY3Rpb25Cb3VuZHMoY2xpcFRvVmlzaWJsZUNvbnRlbnQpOwogICAgIHJldHVy
biBjbGlwVG9WaXNpYmxlQ29udGVudCA/IGludGVyc2VjdGlvbihzZWxlY3Rpb25SZWN0LCB2aWV3
LT52aXNpYmxlQ29udGVudFJlY3QoKSkgOiBzZWxlY3Rpb25SZWN0OwogfQpAQCAtMTI0MCw3ICsx
MjM0LDcgQEAgSFRNTEZvcm1FbGVtZW50ICpGcmFtZTo6Y3VycmVudEZvcm0oKSBjb25zdAogICAg
IE5vZGUgKnN0YXJ0ID0gbV9kb2MgPyBtX2RvYy0+Zm9jdXNlZE5vZGUoKSA6IDA7CiAgICAgaWYg
KCFzdGFydCkKICAgICAgICAgc3RhcnQgPSBzZWxlY3Rpb24oKS0+c3RhcnQoKS5ub2RlKCk7Ci0g
ICAgCisKICAgICAvLyB0cnkgd2Fsa2luZyB1cCB0aGUgbm9kZSB0cmVlIHRvIGZpbmQgYSBmb3Jt
IGVsZW1lbnQKICAgICBOb2RlICpuOwogICAgIGZvciAobiA9IHN0YXJ0OyBuOyBuID0gbi0+cGFy
ZW50Tm9kZSgpKSB7CkBAIC0xMjQ5LDcgKzEyNDMsNyBAQCBIVE1MRm9ybUVsZW1lbnQgKkZyYW1l
OjpjdXJyZW50Rm9ybSgpIGNvbnN0CiAgICAgICAgIGVsc2UgaWYgKG4tPmlzSFRNTEVsZW1lbnQo
KSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KG4p
LT5mb3JtKCk7CiAgICAgfQotICAgIAorCiAgICAgLy8gdHJ5IHdhbGtpbmcgZm9yd2FyZCBpbiB0
aGUgbm9kZSB0cmVlIHRvIGZpbmQgYSBmb3JtIGVsZW1lbnQKICAgICByZXR1cm4gc3RhcnQgPyBz
Y2FuRm9yRm9ybShzdGFydCkgOiAwOwogfQpAQCAtMTI1OSwyMSArMTI1MywyMSBAQCB2b2lkIEZy
YW1lOjpyZXZlYWxTZWxlY3Rpb24oY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnbm1lbnQsIGJv
b2wgcmV2ZWFsRXh0ZW50KQogICAgIEludFJlY3QgcmVjdDsKIAogICAgIHN3aXRjaCAoc2VsZWN0
aW9uKCktPnNlbGVjdGlvblR5cGUoKSkgewotICAgICAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246
Ok5vU2VsZWN0aW9uOgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFZpc2libGVT
ZWxlY3Rpb246OkNhcmV0U2VsZWN0aW9uOgotICAgICAgICAgICAgcmVjdCA9IHNlbGVjdGlvbigp
LT5hYnNvbHV0ZUNhcmV0Qm91bmRzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKLSAgICAgICAgICAgIHJlY3QgPSBy
ZXZlYWxFeHRlbnQgPyBWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uKCktPmV4dGVudCgpKS5hYnNv
bHV0ZUNhcmV0Qm91bmRzKCkgOiBlbmNsb3NpbmdJbnRSZWN0KHNlbGVjdGlvbkJvdW5kcyhmYWxz
ZSkpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpOb1Nl
bGVjdGlvbjoKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6Q2Fy
ZXRTZWxlY3Rpb246CisgICAgICAgIHJlY3QgPSBzZWxlY3Rpb24oKS0+YWJzb2x1dGVDYXJldEJv
dW5kcygpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246OlJhbmdl
U2VsZWN0aW9uOgorICAgICAgICByZWN0ID0gcmV2ZWFsRXh0ZW50ID8gVmlzaWJsZVBvc2l0aW9u
KHNlbGVjdGlvbigpLT5leHRlbnQoKSkuYWJzb2x1dGVDYXJldEJvdW5kcygpIDogZW5jbG9zaW5n
SW50UmVjdChzZWxlY3Rpb25Cb3VuZHMoZmFsc2UpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQog
CiAgICAgUG9zaXRpb24gc3RhcnQgPSBzZWxlY3Rpb24oKS0+c3RhcnQoKTsKICAgICBBU1NFUlQo
c3RhcnQubm9kZSgpKTsKICAgICBpZiAoc3RhcnQubm9kZSgpICYmIHN0YXJ0Lm5vZGUoKS0+cmVu
ZGVyZXIoKSkgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIG9ubHkgaGFuZGxlcyBzY3Jv
bGxpbmcgdGhlIHN0YXJ0Q29udGFpbmVyJ3MgbGF5ZXIsIGJ1dAotICAgICAgICAvLyB0aGUgc2Vs
ZWN0aW9uIHJlY3QgY291bGQgaW50ZXJzZWN0IG1vcmUgdGhhbiBqdXN0IHRoYXQuIAorICAgICAg
ICAvLyB0aGUgc2VsZWN0aW9uIHJlY3QgY291bGQgaW50ZXJzZWN0IG1vcmUgdGhhbiBqdXN0IHRo
YXQuCiAgICAgICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNDc5OTg5OT4uCiAgICAgICAgIGlm
IChSZW5kZXJMYXllciogbGF5ZXIgPSBzdGFydC5ub2RlKCktPnJlbmRlcmVyKCktPmVuY2xvc2lu
Z0xheWVyKCkpCiAgICAgICAgICAgICBsYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShyZWN0LCBm
YWxzZSwgYWxpZ25tZW50LCBhbGlnbm1lbnQpOwpAQCAtMTMxMyw0NiArMTMwNyw0NiBAQCB2b2lk
IEZyYW1lOjpjbGVhclRpbWVycygpCiBSZW5kZXJTdHlsZSAqRnJhbWU6OnN0eWxlRm9yU2VsZWN0
aW9uU3RhcnQoTm9kZSAqJm5vZGVUb1JlbW92ZSkgY29uc3QKIHsKICAgICBub2RlVG9SZW1vdmUg
PSAwOwotICAgIAorCiAgICAgaWYgKHNlbGVjdGlvbigpLT5pc05vbmUoKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgCisKICAgICBQb3NpdGlvbiBwb3MgPSBzZWxlY3Rpb24oKS0+c2VsZWN0aW9u
KCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBpZiAoIXBvcy5pc0NhbmRp
ZGF0ZSgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBOb2RlICpub2RlID0gcG9zLm5vZGUoKTsK
ICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAwOwotICAgIAorCiAgICAgaWYgKCFtX3R5
cGluZ1N0eWxlKQogICAgICAgICByZXR1cm4gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKLSAg
ICAKKwogICAgIFJlZlB0cjxFbGVtZW50PiBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVh
dGVFbGVtZW50KHNwYW5UYWcsIGZhbHNlKTsKLSAgICAKKwogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwogICAgIFN0cmluZyBzdHlsZVRleHQgPSBtX3R5cGluZ1N0eWxlLT5jc3NUZXh0KCkgKyAi
IGRpc3BsYXk6IGlubGluZSI7CiAgICAgc3R5bGVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVB
dHRyLCBzdHlsZVRleHQuaW1wbCgpLCBlYyk7Ci0gICAgQVNTRVJUKGVjID09IDApOwotICAgIAor
ICAgIEFTU0VSVCghZWMpOworCiAgICAgc3R5bGVFbGVtZW50LT5hcHBlbmRDaGlsZChkb2N1bWVu
dCgpLT5jcmVhdGVFZGl0aW5nVGV4dE5vZGUoIiIpLCBlYyk7Ci0gICAgQVNTRVJUKGVjID09IDAp
OwotICAgIAorICAgIEFTU0VSVCghZWMpOworCiAgICAgbm9kZS0+cGFyZW50Tm9kZSgpLT5hcHBl
bmRDaGlsZChzdHlsZUVsZW1lbnQsIGVjKTsKLSAgICBBU1NFUlQoZWMgPT0gMCk7Ci0gICAgCi0g
ICAgbm9kZVRvUmVtb3ZlID0gc3R5bGVFbGVtZW50LmdldCgpOyAgICAKKyAgICBBU1NFUlQoIWVj
KTsKKworICAgIG5vZGVUb1JlbW92ZSA9IHN0eWxlRWxlbWVudC5nZXQoKTsKICAgICByZXR1cm4g
c3R5bGVFbGVtZW50LT5yZW5kZXJlcigpID8gc3R5bGVFbGVtZW50LT5yZW5kZXJlcigpLT5zdHls
ZSgpIDogMDsKIH0KIAogdm9pZCBGcmFtZTo6c2V0U2VsZWN0aW9uRnJvbU5vbmUoKQogewotICAg
IC8vIFB1dCBhIGNhcmV0IGluc2lkZSB0aGUgYm9keSBpZiB0aGUgZW50aXJlIGZyYW1lIGlzIGVk
aXRhYmxlIChlaXRoZXIgdGhlIAorICAgIC8vIFB1dCBhIGNhcmV0IGluc2lkZSB0aGUgYm9keSBp
ZiB0aGUgZW50aXJlIGZyYW1lIGlzIGVkaXRhYmxlIChlaXRoZXIgdGhlCiAgICAgLy8gZW50aXJl
IFdlYlZpZXcgaXMgZWRpdGFibGUgb3IgZGVzaWduTW9kZSBpcyBvbiBmb3IgdGhpcyBkb2N1bWVu
dCkuCiAgICAgRG9jdW1lbnQgKmRvYyA9IGRvY3VtZW50KCk7CiAgICAgYm9vbCBjYXJldEJyb3dz
aW5nID0gc2V0dGluZ3MoKSAmJiBzZXR0aW5ncygpLT5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwog
ICAgIGlmICghc2VsZWN0aW9uKCktPmlzTm9uZSgpIHx8ICEoaXNDb250ZW50RWRpdGFibGUoKSB8
fCBjYXJldEJyb3dzaW5nKSkKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIE5vZGUq
IG5vZGUgPSBkb2MtPmRvY3VtZW50RWxlbWVudCgpOwogICAgIHdoaWxlIChub2RlICYmICFub2Rl
LT5oYXNUYWdOYW1lKGJvZHlUYWcpKQogICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0
Tm9kZSgpOwpAQCAtMTM3NSwxMCArMTM2OSwxMCBAQCBib29sIEZyYW1lOjpmaW5kU3RyaW5nKGNv
bnN0IFN0cmluZyYgdGFyZ2V0LCBib29sIGZvcndhcmQsIGJvb2wgY2FzZUZsYWcsIGJvb2wgdwog
ewogICAgIGlmICh0YXJnZXQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
CisKICAgICBpZiAoZXhjbHVkZUZyb21UZXh0U2VhcmNoKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAKKwogICAgIC8vIFN0YXJ0IGZyb20gYW4gZWRnZSBvZiB0aGUgc2VsZWN0aW9uLCBp
ZiB0aGVyZSdzIGEgc2VsZWN0aW9uIHRoYXQncyBub3QgaW4gc2hhZG93IGNvbnRlbnQuIFdoaWNo
IGVkZ2UKICAgICAvLyBpcyB1c2VkIGRlcGVuZHMgb24gd2hldGhlciB3ZSdyZSBzZWFyY2hpbmcg
Zm9yd2FyZCBvciBiYWNrd2FyZCwgYW5kIHdoZXRoZXIgc3RhcnRJblNlbGVjdGlvbiBpcyBzZXQu
CiAgICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShyYW5nZU9mQ29udGVudHMoZG9jdW1lbnQo
KSkpOwpAQCAtMTQxOSw3ICsxNDEzLDcgQEAgYm9vbCBGcmFtZTo6ZmluZFN0cmluZyhjb25zdCBT
dHJpbmcmIHRhcmdldCwgYm9vbCBmb3J3YXJkLCBib29sIGNhc2VGbGFnLCBib29sIHcKIAogICAg
ICAgICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdl
dCwgZm9yd2FyZCwgY2FzZUZsYWcpOwogICAgIH0KLSAgICAKKwogICAgIEV4Y2VwdGlvbkNvZGUg
ZXhjZXB0aW9uID0gMDsKIAogICAgIC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGluIHRoZSBzaGFk
b3cgdHJlZSwgc2VhcmNoIGluIG1haW4gY29udGVudCBmb2xsb3dpbmcgdGhlIHNoYWRvdyB0cmVl
LgpAQCAtMTQzMiw3ICsxNDI2LDcgQEAgYm9vbCBGcmFtZTo6ZmluZFN0cmluZyhjb25zdCBTdHJp
bmcmIHRhcmdldCwgYm9vbCBmb3J3YXJkLCBib29sIGNhc2VGbGFnLCBib29sIHcKIAogICAgICAg
ICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwg
Zm9yd2FyZCwgY2FzZUZsYWcpOwogICAgIH0KLSAgICAKKwogICAgIGlmICghZWRpdG9yKCktPmlu
c2lkZVZpc2libGVBcmVhKHJlc3VsdFJhbmdlLmdldCgpKSkgewogICAgICAgICByZXN1bHRSYW5n
ZSA9IGVkaXRvcigpLT5uZXh0VmlzaWJsZVJhbmdlKHJlc3VsdFJhbmdlLmdldCgpLCB0YXJnZXQs
IGZvcndhcmQsIGNhc2VGbGFnLCB3cmFwRmxhZyk7CiAgICAgICAgIGlmICghcmVzdWx0UmFuZ2Up
CkBAIC0xNDYxLDkgKzE0NTUsOSBAQCB1bnNpZ25lZCBGcmFtZTo6bWFya0FsbE1hdGNoZXNGb3JU
ZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBib29sIGNhc2VGbGFnLCB1bnNpZwogewogICAgIGlm
ICh0YXJnZXQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKKwogICAgIFJlZlB0
cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpKTsKLSAgICAK
KwogICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uID0gMDsKICAgICB1bnNpZ25lZCBtYXRjaENv
dW50ID0gMDsKICAgICBkbyB7CkBAIC0xNDc2LDcgKzE0NzAsNyBAQCB1bnNpZ25lZCBGcmFtZTo6
bWFya0FsbE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBib29sIGNhc2VGbGFn
LCB1bnNpZwogICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0QWZ0ZXIocmVzdWx0UmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpLCBleGNlcHRpb24pOwog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8g
QSBub24tY29sbGFwc2VkIHJlc3VsdCByYW5nZSBjYW4gaW4gc29tZSBmdW5reSB3aGl0ZXNwYWNl
IGNhc2VzIHN0aWxsIG5vdAogICAgICAgICAvLyBhZHZhbmNlIHRoZSByYW5nZSdzIHN0YXJ0IHBv
c2l0aW9uICg0NTA5MzI4KS4gQnJlYWsgdG8gYXZvaWQgaW5maW5pdGUgbG9vcC4KICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIG5ld1N0YXJ0ID0gZW5kVmlzaWJsZVBvc2l0aW9uKHJlc3VsdFJhbmdl
LmdldCgpLCBET1dOU1RSRUFNKTsKQEAgLTE0ODgsMTggKzE0ODIsMTggQEAgdW5zaWduZWQgRnJh
bWU6Om1hcmtBbGxNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgYm9vbCBjYXNl
RmxhZywgdW5zaWcKICAgICAgICAgICAgICsrbWF0Y2hDb3VudDsKICAgICAgICAgICAgIGRvY3Vt
ZW50KCktPmFkZE1hcmtlcihyZXN1bHRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlRleHRN
YXRjaCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gU3RvcCBsb29raW5nIGlm
IHdlIGhpdCB0aGUgc3BlY2lmaWVkIGxpbWl0LiBBIGxpbWl0IG9mIDAgbWVhbnMgbm8gbGltaXQu
CiAgICAgICAgIGlmIChsaW1pdCA+IDAgJiYgbWF0Y2hDb3VudCA+PSBsaW1pdCkKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAKKwogICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQo
KSwgbmV3U3RhcnQpOwogICAgICAgICBOb2RlKiBzaGFkb3dUcmVlUm9vdCA9IHNlYXJjaFJhbmdl
LT5zaGFkb3dUcmVlUm9vdE5vZGUoKTsKICAgICAgICAgaWYgKHNlYXJjaFJhbmdlLT5jb2xsYXBz
ZWQoZXhjZXB0aW9uKSAmJiBzaGFkb3dUcmVlUm9vdCkKICAgICAgICAgICAgIHNlYXJjaFJhbmdl
LT5zZXRFbmQoc2hhZG93VHJlZVJvb3QsIHNoYWRvd1RyZWVSb290LT5jaGlsZE5vZGVDb3VudCgp
LCBleGNlcHRpb24pOwogICAgIH0gd2hpbGUgKHRydWUpOwotICAgIAotICAgIC8vIERvIGEgImZh
a2UiIHBhaW50IGluIG9yZGVyIHRvIGV4ZWN1dGUgdGhlIGNvZGUgdGhhdCBjb21wdXRlcyB0aGUg
cmVuZGVyZWQgcmVjdCBmb3IgCisKKyAgICAvLyBEbyBhICJmYWtlIiBwYWludCBpbiBvcmRlciB0
byBleGVjdXRlIHRoZSBjb2RlIHRoYXQgY29tcHV0ZXMgdGhlIHJlbmRlcmVkIHJlY3QgZm9yCiAg
ICAgLy8gZWFjaCB0ZXh0IG1hdGNoLgogICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOwog
ICAgIGlmIChtX3ZpZXcgJiYgY29udGVudFJlbmRlcmVyKCkpIHsKQEAgLTE1MTEsNyArMTUwNSw3
IEBAIHVuc2lnbmVkIEZyYW1lOjptYXJrQWxsTWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0
YXJnZXQsIGJvb2wgY2FzZUZsYWcsIHVuc2lnCiAgICAgICAgICAgICBtX3ZpZXctPnBhaW50Q29u
dGVudHMoJmNvbnRleHQsIHZpc2libGVSZWN0KTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwog
ICAgIHJldHVybiBtYXRjaENvdW50OwogfQogCkBAIC0xNTI0LDcgKzE1MTgsNyBAQCB2b2lkIEZy
YW1lOjpzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wgZmxhZykKIHsKICAg
ICBpZiAoZmxhZyA9PSBtX2hpZ2hsaWdodFRleHRNYXRjaGVzKQogICAgICAgICByZXR1cm47Ci0g
ICAgCisKICAgICBtX2hpZ2hsaWdodFRleHRNYXRjaGVzID0gZmxhZzsKICAgICBkb2N1bWVudCgp
LT5yZXBhaW50TWFya2VycyhEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKIH0KQEAgLTE1NTMs
NyArMTU0Nyw3IEBAIERPTVdpbmRvdyogRnJhbWU6OmRvbVdpbmRvdygpIGNvbnN0CiAKIHZvaWQg
RnJhbWU6OmNsZWFyRm9ybWVyRE9NV2luZG93KERPTVdpbmRvdyogd2luZG93KQogewotICAgIG1f
bGl2ZUZvcm1lcldpbmRvd3MucmVtb3ZlKHdpbmRvdyk7ICAgIAorICAgIG1fbGl2ZUZvcm1lcldp
bmRvd3MucmVtb3ZlKHdpbmRvdyk7CiB9CiAKIFBhZ2UqIEZyYW1lOjpwYWdlKCkgY29uc3QKQEAg
LTE2MTksNyArMTYxMyw3IEBAIHZvaWQgRnJhbWU6OnVuZm9jdXNXaW5kb3coKQogewogICAgIGlm
ICghcGFnZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICAvLyBJZiB3ZSdyZSBhIHRv
cCBsZXZlbCB3aW5kb3csIGRlYWN0aXZhdGUgdGhlIHdpbmRvdy4KICAgICBpZiAoIXRyZWUoKS0+
cGFyZW50KCkpCiAgICAgICAgIHBhZ2UoKS0+Y2hyb21lKCktPnVuZm9jdXMoKTsKQEAgLTE2ODAs
MTQgKzE2NzQsMTMgQEAgdm9pZCBGcmFtZTo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGJvb2wKICAgICAgICAgLy8gb2xkU2Vs
ZWN0aW9uIG1heSBubyBsb25nZXIgYmUgaW4gdGhlIGRvY3VtZW50LgogICAgICAgICBpZiAoY2xv
c2VUeXBpbmcgJiYgb2xkU2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgJiYgb2xkU2VsZWN0
aW9uLnN0YXJ0KCkubm9kZSgpICYmIG9sZFNlbGVjdGlvbi5zdGFydCgpLm5vZGUoKS0+aW5Eb2N1
bWVudCgpKSB7CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gb2xkU3RhcnQob2xkU2VsZWN0
aW9uLnZpc2libGVTdGFydCgpKTsKLSAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gb2xkQWRq
YWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQob2xkU3RhcnQsIExlZnRX
b3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKG9sZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRh
cnkpKTsgICAKKyAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gb2xkQWRqYWNlbnRXb3JkcyA9
IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQob2xkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5k
YXJ5KSwgZW5kT2ZXb3JkKG9sZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKICAgICAg
ICAgICAgIGlmIChvbGRBZGphY2VudFdvcmRzICE9IG5ld0FkamFjZW50V29yZHMpIHsKICAgICAg
ICAgICAgICAgICBpZiAoaXNDb250aW51b3VzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkgewogICAg
ICAgICAgICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGVkU2VudGVuY2UgPSBW
aXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZTZW50ZW5jZShvbGRTdGFydCksIGVuZE9mU2VudGVuY2Uo
b2xkU3RhcnQpKTsKICAgICAgICAgICAgICAgICAgICAgZWRpdG9yKCktPm1hcmtNaXNzcGVsbGlu
Z3NBbmRCYWRHcmFtbWFyKG9sZEFkamFjZW50V29yZHMsIG9sZFNlbGVjdGVkU2VudGVuY2UgIT0g
bmV3U2VsZWN0ZWRTZW50ZW5jZSwgb2xkU2VsZWN0ZWRTZW50ZW5jZSk7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAg
ZWRpdG9yKCktPm1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKG9sZEFkamFjZW50V29yZHMs
IGZhbHNlLCBvbGRBZGphY2VudFdvcmRzKTsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIApAQCAtMTcyMiwxNSArMTcxNSwxNSBAQCBWaXNpYmxlUG9zaXRpb24g
RnJhbWU6OnZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50JiBmcmFtZVBvaW50
KQogICAgICAgICB2aXNpYmxlUG9zID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5vZGUsIDAp
KTsKICAgICByZXR1cm4gdmlzaWJsZVBvczsKIH0KLSAgICAKKwogRG9jdW1lbnQqIEZyYW1lOjpk
b2N1bWVudEF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQoteyAgCi0gICAgaWYgKCF2aWV3
KCkpIAoreworICAgIGlmICghdmlldygpKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKKwogICAg
IEludFBvaW50IHB0ID0gdmlldygpLT53aW5kb3dUb0NvbnRlbnRzKHBvaW50KTsKICAgICBIaXRU
ZXN0UmVzdWx0IHJlc3VsdCA9IEhpdFRlc3RSZXN1bHQocHQpOwotICAgIAorCiAgICAgaWYgKGNv
bnRlbnRSZW5kZXJlcigpKQogICAgICAgICByZXN1bHQgPSBldmVudEhhbmRsZXIoKS0+aGl0VGVz
dFJlc3VsdEF0UG9pbnQocHQsIGZhbHNlKTsKICAgICByZXR1cm4gcmVzdWx0LmlubmVyTm9kZSgp
ID8gcmVzdWx0LmlubmVyTm9kZSgpLT5kb2N1bWVudCgpIDogMDsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGFnZS9GcmFtZS5oIGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKaW5kZXggMGE0NGE2ZC4uNjUy
MjY5YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKKysrIGIvV2ViQ29yZS9wYWdl
L0ZyYW1lLmgKQEAgLTM3LDggKzM3LDggQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2lu
Y2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVkZSAiU2Nyb2xs
QmVoYXZpb3IuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiU2Ny
b2xsQmVoYXZpb3IuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiVGV4dEdyYW51bGFyaXR5LmgiCiAKQEAgLTYyLDMxNSArNjIsMzE1IEBAIHR5cGVkZWYgc3Ry
dWN0IEhCSVRNQVBfXyogSEJJVE1BUDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKLWNsYXNzIEVkaXRvcjsKLWNsYXNzIEV2ZW50SGFu
ZGxlcjsKLWNsYXNzIEZyYW1lTG9hZGVyOwotY2xhc3MgRnJhbWVMb2FkZXJDbGllbnQ7Ci1jbGFz
cyBGcmFtZVRyZWU7Ci1jbGFzcyBGcmFtZVZpZXc7Ci1jbGFzcyBIVE1MRnJhbWVPd25lckVsZW1l
bnQ7Ci1jbGFzcyBIVE1MVGFibGVDZWxsRWxlbWVudDsKLWNsYXNzIFJlZ3VsYXJFeHByZXNzaW9u
OwotY2xhc3MgUmVuZGVyUGFydDsKLWNsYXNzIFNjcmlwdENvbnRyb2xsZXI7Ci1jbGFzcyBTZWxl
Y3Rpb25Db250cm9sbGVyOwotY2xhc3MgU2V0dGluZ3M7Ci1jbGFzcyBWaXNpYmxlU2VsZWN0aW9u
OwotY2xhc3MgV2lkZ2V0OworICAgIGNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwor
ICAgIGNsYXNzIEVkaXRvcjsKKyAgICBjbGFzcyBFdmVudEhhbmRsZXI7CisgICAgY2xhc3MgRnJh
bWVMb2FkZXI7CisgICAgY2xhc3MgRnJhbWVMb2FkZXJDbGllbnQ7CisgICAgY2xhc3MgRnJhbWVU
cmVlOworICAgIGNsYXNzIEZyYW1lVmlldzsKKyAgICBjbGFzcyBIVE1MRnJhbWVPd25lckVsZW1l
bnQ7CisgICAgY2xhc3MgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ7CisgICAgY2xhc3MgUmVndWxhckV4
cHJlc3Npb247CisgICAgY2xhc3MgUmVuZGVyUGFydDsKKyAgICBjbGFzcyBTY3JpcHRDb250cm9s
bGVyOworICAgIGNsYXNzIFNlbGVjdGlvbkNvbnRyb2xsZXI7CisgICAgY2xhc3MgU2V0dGluZ3M7
CisgICAgY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKKyAgICBjbGFzcyBXaWRnZXQ7CiAKICNpZiBG
UkFNRV9MT0FEU19VU0VSX1NUWUxFU0hFRVQKICAgICBjbGFzcyBVc2VyU3R5bGVTaGVldExvYWRl
cjsKICNlbmRpZgogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgVGltZXI7CisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFRpbWVyOwogCi1jbGFzcyBGcmFtZSA6IHB1YmxpYyBS
ZWZDb3VudGVkPEZyYW1lPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RnJhbWU+
IGNyZWF0ZShQYWdlKiBwYWdlLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwg
RnJhbWVMb2FkZXJDbGllbnQqIGNsaWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgRnJhbWUocGFnZSwgb3duZXJFbGVtZW50LCBjbGllbnQpKTsKLSAgICB9Ci0gICAgdm9p
ZCBzZXRWaWV3KFBhc3NSZWZQdHI8RnJhbWVWaWV3Pik7Ci0gICAgfkZyYW1lKCk7Ci0gICAgCi0g
ICAgdm9pZCBpbml0KCk7CisgICAgY2xhc3MgRnJhbWUgOiBwdWJsaWMgUmVmQ291bnRlZDxGcmFt
ZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RnJhbWU+IGNyZWF0
ZShQYWdlKiBwYWdlLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgRnJhbWVM
b2FkZXJDbGllbnQqIGNsaWVudCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBGcmFtZShwYWdlLCBvd25lckVsZW1lbnQsIGNsaWVudCkpOworICAgICAgICB9Cisg
ICAgICAgIHZvaWQgc2V0VmlldyhQYXNzUmVmUHRyPEZyYW1lVmlldz4pOworICAgICAgICB+RnJh
bWUoKTsKIAotICAgIFBhZ2UqIHBhZ2UoKSBjb25zdDsKLSAgICBIVE1MRnJhbWVPd25lckVsZW1l
bnQqIG93bmVyRWxlbWVudCgpIGNvbnN0OworICAgICAgICB2b2lkIGluaXQoKTsKIAotICAgIHZv
aWQgcGFnZURlc3Ryb3llZCgpOwotICAgIHZvaWQgZGlzY29ubmVjdE93bmVyRWxlbWVudCgpOwor
ICAgICAgICBQYWdlKiBwYWdlKCkgY29uc3Q7CisgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVu
dCogb3duZXJFbGVtZW50KCkgY29uc3Q7CiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25z
dDsKLSAgICBGcmFtZVZpZXcqIHZpZXcoKSBjb25zdDsKKyAgICAgICAgdm9pZCBwYWdlRGVzdHJv
eWVkKCk7CisgICAgICAgIHZvaWQgZGlzY29ubmVjdE93bmVyRWxlbWVudCgpOwogCi0gICAgdm9p
ZCBzZXRET01XaW5kb3coRE9NV2luZG93Kik7Ci0gICAgRE9NV2luZG93KiBkb21XaW5kb3coKSBj
b25zdDsKLSAgICB2b2lkIGNsZWFyRm9ybWVyRE9NV2luZG93KERPTVdpbmRvdyopOworICAgICAg
ICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdDsKKyAgICAgICAgRnJhbWVWaWV3KiB2aWV3KCkg
Y29uc3Q7CiAKLSAgICBFZGl0b3IqIGVkaXRvcigpIGNvbnN0OwotICAgIEV2ZW50SGFuZGxlciog
ZXZlbnRIYW5kbGVyKCkgY29uc3Q7Ci0gICAgRnJhbWVMb2FkZXIqIGxvYWRlcigpIGNvbnN0Owot
ICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbigpIGNvbnN0OwotICAgIEZyYW1lVHJl
ZSogdHJlZSgpIGNvbnN0OwotICAgIEFuaW1hdGlvbkNvbnRyb2xsZXIqIGFuaW1hdGlvbigpIGNv
bnN0OwotICAgIFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdCgpOworICAgICAgICB2b2lkIHNldERP
TVdpbmRvdyhET01XaW5kb3cqKTsKKyAgICAgICAgRE9NV2luZG93KiBkb21XaW5kb3coKSBjb25z
dDsKKyAgICAgICAgdm9pZCBjbGVhckZvcm1lckRPTVdpbmRvdyhET01XaW5kb3cqKTsKIAotICAg
IFJlbmRlclZpZXcqIGNvbnRlbnRSZW5kZXJlcigpIGNvbnN0OyAvLyByb290IHJlbmRlcmVyIGZv
ciB0aGUgZG9jdW1lbnQgY29udGFpbmVkIGluIHRoaXMgZnJhbWUKLSAgICBSZW5kZXJQYXJ0KiBv
d25lclJlbmRlcmVyKCkgY29uc3Q7IC8vIHJlbmRlcmVyIGZvciB0aGUgZWxlbWVudCB0aGF0IGNv
bnRhaW5zIHRoaXMgZnJhbWUKLSAgICAKLSAgICBib29sIGlzRGlzY29ubmVjdGVkKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRJc0Rpc2Nvbm5lY3RlZChib29sKTsKLSAgICBib29sIGV4Y2x1ZGVGcm9t
VGV4dFNlYXJjaCgpIGNvbnN0OwotICAgIHZvaWQgc2V0RXhjbHVkZUZyb21UZXh0U2VhcmNoKGJv
b2wpOworICAgICAgICBFZGl0b3IqIGVkaXRvcigpIGNvbnN0OworICAgICAgICBFdmVudEhhbmRs
ZXIqIGV2ZW50SGFuZGxlcigpIGNvbnN0OworICAgICAgICBGcmFtZUxvYWRlciogbG9hZGVyKCkg
Y29uc3Q7CisgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbigpIGNvbnN0Owor
ICAgICAgICBGcmFtZVRyZWUqIHRyZWUoKSBjb25zdDsKKyAgICAgICAgQW5pbWF0aW9uQ29udHJv
bGxlciogYW5pbWF0aW9uKCkgY29uc3Q7CisgICAgICAgIFNjcmlwdENvbnRyb2xsZXIqIHNjcmlw
dCgpOwogCi0gICAgdm9pZCBjcmVhdGVWaWV3KGNvbnN0IEludFNpemUmLCBjb25zdCBDb2xvciYs
IGJvb2wsIGNvbnN0IEludFNpemUgJiwgYm9vbCwKLSAgICAgICAgICAgICAgICAgICAgU2Nyb2xs
YmFyTW9kZSA9IFNjcm9sbGJhckF1dG8sIFNjcm9sbGJhck1vZGUgPSBTY3JvbGxiYXJBdXRvKTsK
KyAgICAgICAgUmVuZGVyVmlldyogY29udGVudFJlbmRlcmVyKCkgY29uc3Q7IC8vIHJvb3QgcmVu
ZGVyZXIgZm9yIHRoZSBkb2N1bWVudCBjb250YWluZWQgaW4gdGhpcyBmcmFtZQorICAgICAgICBS
ZW5kZXJQYXJ0KiBvd25lclJlbmRlcmVyKCkgY29uc3Q7IC8vIHJlbmRlcmVyIGZvciB0aGUgZWxl
bWVudCB0aGF0IGNvbnRhaW5zIHRoaXMgZnJhbWUKIAorICAgICAgICBib29sIGlzRGlzY29ubmVj
dGVkKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0SXNEaXNjb25uZWN0ZWQoYm9vbCk7CisgICAg
ICAgIGJvb2wgZXhjbHVkZUZyb21UZXh0U2VhcmNoKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0
RXhjbHVkZUZyb21UZXh0U2VhcmNoKGJvb2wpOwogCi1wcml2YXRlOgotICAgIEZyYW1lKFBhZ2Uq
LCBIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBGcmFtZUxvYWRlckNsaWVudCopOwotICAgIAotLy8g
PT09IHVuZGVjaWRlZCwgd291bGQgbGlrZSB0byBjb25zaWRlciBtb3ZpbmcgdG8gYW5vdGhlciBj
bGFzcworICAgICAgICB2b2lkIGNyZWF0ZVZpZXcoY29uc3QgSW50U2l6ZSYsIGNvbnN0IENvbG9y
JiwgYm9vbCwgY29uc3QgSW50U2l6ZSAmLCBib29sLAorICAgICAgICAgICAgICAgICAgICAgICAg
U2Nyb2xsYmFyTW9kZSA9IFNjcm9sbGJhckF1dG8sIFNjcm9sbGJhck1vZGUgPSBTY3JvbGxiYXJB
dXRvKTsKIAotcHVibGljOgotICAgIHN0YXRpYyBGcmFtZSogZnJhbWVGb3JXaWRnZXQoY29uc3Qg
V2lkZ2V0Kik7CiAKLSAgICBTZXR0aW5ncyogc2V0dGluZ3MoKSBjb25zdDsgLy8gY2FuIGJlIE5V
TEwKKyAgICBwcml2YXRlOgorICAgICAgICBGcmFtZShQYWdlKiwgSFRNTEZyYW1lT3duZXJFbGVt
ZW50KiwgRnJhbWVMb2FkZXJDbGllbnQqKTsKIAotI2lmIEZSQU1FX0xPQURTX1VTRVJfU1RZTEVT
SEVFVAotICAgIHZvaWQgc2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihjb25zdCBLVVJMJik7Ci0g
ICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXREYXRhKTsK
LSNlbmRpZgorICAgIC8vID09PSB1bmRlY2lkZWQsIHdvdWxkIGxpa2UgdG8gY29uc2lkZXIgbW92
aW5nIHRvIGFub3RoZXIgY2xhc3MKIAotICAgIHZvaWQgc2V0UHJpbnRpbmcoYm9vbCBwcmludGlu
ZywgZmxvYXQgbWluUGFnZVdpZHRoLCBmbG9hdCBtYXhQYWdlV2lkdGgsIGJvb2wgYWRqdXN0Vmll
d1NpemUpOworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEZyYW1lKiBmcmFtZUZvcldpZGdl
dChjb25zdCBXaWRnZXQqKTsKIAotICAgIGJvb2wgaW5WaWV3U291cmNlTW9kZSgpIGNvbnN0Owot
ICAgIHZvaWQgc2V0SW5WaWV3U291cmNlTW9kZShib29sID0gdHJ1ZSk7CisgICAgICAgIFNldHRp
bmdzKiBzZXR0aW5ncygpIGNvbnN0OyAvLyBjYW4gYmUgTlVMTAogCi0gICAgdm9pZCBrZWVwQWxp
dmUoKTsgLy8gVXNlZCB0byBrZWVwIHRoZSBmcmFtZSBhbGl2ZSB3aGVuIHJ1bm5pbmcgYSBzY3Jp
cHQgdGhhdCBtaWdodCBkZXN0cm95IGl0LgotI2lmbmRlZiBOREVCVUcKLSAgICBzdGF0aWMgdm9p
ZCBjYW5jZWxBbGxLZWVwQWxpdmUoKTsKLSNlbmRpZgorICAgICNpZiBGUkFNRV9MT0FEU19VU0VS
X1NUWUxFU0hFRVQKKyAgICAgICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0
IEtVUkwmKTsKKyAgICAgICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHN0
eWxlU2hlZXREYXRhKTsKKyAgICAjZW5kaWYKIAotICAgIHZvaWQgc2V0RG9jdW1lbnQoUGFzc1Jl
ZlB0cjxEb2N1bWVudD4pOworICAgICAgICB2b2lkIHNldFByaW50aW5nKGJvb2wgcHJpbnRpbmcs
IGZsb2F0IG1pblBhZ2VXaWR0aCwgZmxvYXQgbWF4UGFnZVdpZHRoLCBib29sIGFkanVzdFZpZXdT
aXplKTsKIAotICAgIHZvaWQgY2xlYXJUaW1lcnMoKTsKLSAgICBzdGF0aWMgdm9pZCBjbGVhclRp
bWVycyhGcmFtZVZpZXcqLCBEb2N1bWVudCopOworICAgICAgICBib29sIGluVmlld1NvdXJjZU1v
ZGUoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRJblZpZXdTb3VyY2VNb2RlKGJvb2wgPSB0cnVl
KTsKIAotICAgIHZvaWQgc2V0TmVlZHNSZWFwcGx5U3R5bGVzKCk7Ci0gICAgYm9vbCBuZWVkc1Jl
YXBwbHlTdHlsZXMoKSBjb25zdDsKLSAgICB2b2lkIHJlYXBwbHlTdHlsZXMoKTsKKyAgICAgICAg
dm9pZCBrZWVwQWxpdmUoKTsgLy8gVXNlZCB0byBrZWVwIHRoZSBmcmFtZSBhbGl2ZSB3aGVuIHJ1
bm5pbmcgYSBzY3JpcHQgdGhhdCBtaWdodCBkZXN0cm95IGl0LgorICAgICNpZm5kZWYgTkRFQlVH
CisgICAgICAgIHN0YXRpYyB2b2lkIGNhbmNlbEFsbEtlZXBBbGl2ZSgpOworICAgICNlbmRpZgog
Ci0gICAgU3RyaW5nIGRvY3VtZW50VHlwZVN0cmluZygpIGNvbnN0OworICAgICAgICB2b2lkIHNl
dERvY3VtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnQ+KTsKIAotICAgIC8vIFRoaXMgbWV0aG9kIC0t
IGFuZCB0aGUgY29ycmVzcG9uZGluZyBsaXN0IG9mIGZvcm1lciBET00gd2luZG93cyAtLQotICAg
IC8vIHNob3VsZCBtb3ZlIG9udG8gU2NyaXB0Q29udHJvbGxlcgotICAgIHZvaWQgY2xlYXJET01X
aW5kb3coKTsKKyAgICAgICAgdm9pZCBjbGVhclRpbWVycygpOworICAgICAgICBzdGF0aWMgdm9p
ZCBjbGVhclRpbWVycyhGcmFtZVZpZXcqLCBEb2N1bWVudCopOwogCi0gICAgU3RyaW5nIGRpc3Bs
YXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBzdHIpIGNvbnN0IAotICAg
IHsKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50KCkgPyBkb2N1bWVudCgpLT5kaXNwbGF5U3RyaW5n
TW9kaWZpZWRCeUVuY29kaW5nKHN0cikgOiBzdHI7Ci0gICAgfQorICAgICAgICB2b2lkIHNldE5l
ZWRzUmVhcHBseVN0eWxlcygpOworICAgICAgICBib29sIG5lZWRzUmVhcHBseVN0eWxlcygpIGNv
bnN0OworICAgICAgICB2b2lkIHJlYXBwbHlTdHlsZXMoKTsKIAotcHJpdmF0ZToKLSAgICB2b2lk
IGxpZmVTdXBwb3J0VGltZXJGaXJlZChUaW1lcjxGcmFtZT4qKTsKKyAgICAgICAgU3RyaW5nIGRv
Y3VtZW50VHlwZVN0cmluZygpIGNvbnN0OwogCi0vLyA9PT0gdG8gYmUgbW92ZWQgaW50byBGcmFt
ZVZpZXcKKyAgICAgICAgLy8gVGhpcyBtZXRob2QgLS0gYW5kIHRoZSBjb3JyZXNwb25kaW5nIGxp
c3Qgb2YgZm9ybWVyIERPTSB3aW5kb3dzIC0tCisgICAgICAgIC8vIHNob3VsZCBtb3ZlIG9udG8g
U2NyaXB0Q29udHJvbGxlcgorICAgICAgICB2b2lkIGNsZWFyRE9NV2luZG93KCk7CiAKLXB1Ymxp
YzogCi0gICAgdm9pZCBzZXRab29tRmFjdG9yKGZsb2F0IHNjYWxlLCBib29sIGlzVGV4dE9ubHkp
OwotICAgIGZsb2F0IHpvb21GYWN0b3IoKSBjb25zdDsKLSAgICBib29sIGlzWm9vbUZhY3RvclRl
eHRPbmx5KCkgY29uc3Q7Ci0gICAgYm9vbCBzaG91bGRBcHBseVRleHRab29tKCkgY29uc3Q7Ci0g
ICAgYm9vbCBzaG91bGRBcHBseVBhZ2Vab29tKCkgY29uc3Q7Ci0gICAgZmxvYXQgcGFnZVpvb21G
YWN0b3IoKSBjb25zdCB7IHJldHVybiBzaG91bGRBcHBseVBhZ2Vab29tKCkgPyB6b29tRmFjdG9y
KCkgOiAxLjBmOyB9Ci0gICAgZmxvYXQgdGV4dFpvb21GYWN0b3IoKSBjb25zdCB7IHJldHVybiBz
aG91bGRBcHBseVRleHRab29tKCkgPyB6b29tRmFjdG9yKCkgOiAxLjBmOyB9CisgICAgICAgIFN0
cmluZyBkaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKGNvbnN0IFN0cmluZyYgc3RyKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQoKSA/IGRvY3VtZW50
KCktPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2Rpbmcoc3RyKSA6IHN0cjsKKyAgICAgICAg
fQogCi0vLyA9PT0gdG8gYmUgbW92ZWQgaW50byBDaHJvbWUKKyAgICBwcml2YXRlOgorICAgICAg
ICB2b2lkIGxpZmVTdXBwb3J0VGltZXJGaXJlZChUaW1lcjxGcmFtZT4qKTsKIAotcHVibGljOgot
ICAgIHZvaWQgZm9jdXNXaW5kb3coKTsKLSAgICB2b2lkIHVuZm9jdXNXaW5kb3coKTsKLSAgICBi
b29sIHNob3VsZENsb3NlKFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyVmVjdG9yKiBhbHRlcm5hdGVF
dmVudExpc3RlbmVycyA9IDApOwotICAgIHZvaWQgc2NoZWR1bGVDbG9zZSgpOworICAgIC8vID09
PSB0byBiZSBtb3ZlZCBpbnRvIEZyYW1lVmlldwogCi0gICAgdm9pZCBzZXRKU1N0YXR1c0JhclRl
eHQoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBzZXRKU0RlZmF1bHRTdGF0dXNCYXJUZXh0KGNv
bnN0IFN0cmluZyYpOwotICAgIFN0cmluZyBqc1N0YXR1c0JhclRleHQoKSBjb25zdDsKLSAgICBT
dHJpbmcganNEZWZhdWx0U3RhdHVzQmFyVGV4dCgpIGNvbnN0OworICAgIHB1YmxpYzoKKyAgICAg
ICAgdm9pZCBzZXRab29tRmFjdG9yKGZsb2F0IHNjYWxlLCBib29sIGlzVGV4dE9ubHkpOworICAg
ICAgICBmbG9hdCB6b29tRmFjdG9yKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNab29tRmFjdG9y
VGV4dE9ubHkoKSBjb25zdDsKKyAgICAgICAgYm9vbCBzaG91bGRBcHBseVRleHRab29tKCkgY29u
c3Q7CisgICAgICAgIGJvb2wgc2hvdWxkQXBwbHlQYWdlWm9vbSgpIGNvbnN0OworICAgICAgICBm
bG9hdCBwYWdlWm9vbUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIHNob3VsZEFwcGx5UGFnZVpvb20o
KSA/IHpvb21GYWN0b3IoKSA6IDEuMGY7IH0KKyAgICAgICAgZmxvYXQgdGV4dFpvb21GYWN0b3Io
KSBjb25zdCB7IHJldHVybiBzaG91bGRBcHBseVRleHRab29tKCkgPyB6b29tRmFjdG9yKCkgOiAx
LjBmOyB9CiAKLS8vID09PSB0byBiZSBtb3ZlZCBpbnRvIEVkaXRvcgorICAgIC8vID09PSB0byBi
ZSBtb3ZlZCBpbnRvIENocm9tZQogCi1wdWJsaWM6Ci0gICAgU3RyaW5nIHNlbGVjdGVkVGV4dCgp
IGNvbnN0OyAgCi0gICAgYm9vbCBmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIGJvb2wgZm9yd2Fy
ZCwgYm9vbCBjYXNlRmxhZywgYm9vbCB3cmFwRmxhZywgYm9vbCBzdGFydEluU2VsZWN0aW9uKTsK
KyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgZm9jdXNXaW5kb3coKTsKKyAgICAgICAgdm9pZCB1
bmZvY3VzV2luZG93KCk7CisgICAgICAgIGJvb2wgc2hvdWxkQ2xvc2UoUmVnaXN0ZXJlZEV2ZW50
TGlzdGVuZXJWZWN0b3IqIGFsdGVybmF0ZUV2ZW50TGlzdGVuZXJzID0gMCk7CisgICAgICAgIHZv
aWQgc2NoZWR1bGVDbG9zZSgpOwogCi0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbWFyaygp
IGNvbnN0OyAvLyBNYXJrLCB0byBiZSB1c2VkIGFzIGVtYWNzIHVzZXMgaXQuCi0gICAgdm9pZCBz
ZXRNYXJrKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKKyAgICAgICAgdm9pZCBzZXRKU1N0YXR1
c0JhclRleHQoY29uc3QgU3RyaW5nJik7CisgICAgICAgIHZvaWQgc2V0SlNEZWZhdWx0U3RhdHVz
QmFyVGV4dChjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgU3RyaW5nIGpzU3RhdHVzQmFyVGV4dCgp
IGNvbnN0OworICAgICAgICBTdHJpbmcganNEZWZhdWx0U3RhdHVzQmFyVGV4dCgpIGNvbnN0Owog
Ci0gICAgdm9pZCBjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiog
LCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvblVuc3BlY2lmaWVkKTsKLSAgICBTdHJpbmcgc2VsZWN0
aW9uU3RhcnRTdHlsZVByb3BlcnR5VmFsdWUoaW50IHN0eWxlUHJvcGVydHlJRCkgY29uc3Q7Ci0g
ICAgdm9pZCBhcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKSBjb25zdDsKLSAgICB2b2lk
IHJlbW92ZUVkaXRpbmdTdHlsZUZyb21Cb2R5RWxlbWVudCgpIGNvbnN0OwotICAgIHZvaWQgYXBw
bHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQoRWxlbWVudCopIGNvbnN0OwotICAgIHZvaWQgcmVtb3Zl
RWRpdGluZ1N0eWxlRnJvbUVsZW1lbnQoRWxlbWVudCopIGNvbnN0OworICAgIC8vID09PSB0byBi
ZSBtb3ZlZCBpbnRvIEVkaXRvcgogCi0gICAgSW50UmVjdCBmaXJzdFJlY3RGb3JSYW5nZShSYW5n
ZSopIGNvbnN0OwotICAgIAotICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGJvb2wgY2xvc2VUeXBpbmcpOwotICAg
IGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNl
bGVjdGlvbiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBFQWZmaW5pdHks
IGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0OworICAgIHB1YmxpYzoKKyAgICAgICAgU3RyaW5n
IHNlbGVjdGVkVGV4dCgpIGNvbnN0OworICAgICAgICBib29sIGZpbmRTdHJpbmcoY29uc3QgU3Ry
aW5nJiwgYm9vbCBmb3J3YXJkLCBib29sIGNhc2VGbGFnLCBib29sIHdyYXBGbGFnLCBib29sIHN0
YXJ0SW5TZWxlY3Rpb24pOwogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlRm9yU2VsZWN0aW9uU3Rh
cnQoTm9kZSomIG5vZGVUb1JlbW92ZSkgY29uc3Q7CisgICAgICAgIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIG1hcmsoKSBjb25zdDsgLy8gTWFyaywgdG8gYmUgdXNlZCBhcyBlbWFjcyB1c2VzIGl0
LgorICAgICAgICB2b2lkIHNldE1hcmsoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCi0gICAg
dW5zaWduZWQgbWFya0FsbE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYsIGJvb2wgY2FzZUZs
YWcsIHVuc2lnbmVkIGxpbWl0KTsKLSAgICBib29sIG1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxp
Z2h0ZWQoKSBjb25zdDsKLSAgICB2b2lkIHNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0
ZWQoYm9vbCBmbGFnKTsKKyAgICAgICAgdm9pZCBjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoQ1NT
U3R5bGVEZWNsYXJhdGlvbiogLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvblVuc3BlY2lmaWVkKTsK
KyAgICAgICAgU3RyaW5nIHNlbGVjdGlvblN0YXJ0U3R5bGVQcm9wZXJ0eVZhbHVlKGludCBzdHls
ZVByb3BlcnR5SUQpIGNvbnN0OworICAgICAgICB2b2lkIGFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5
RWxlbWVudCgpIGNvbnN0OworICAgICAgICB2b2lkIHJlbW92ZUVkaXRpbmdTdHlsZUZyb21Cb2R5
RWxlbWVudCgpIGNvbnN0OworICAgICAgICB2b2lkIGFwcGx5RWRpdGluZ1N0eWxlVG9FbGVtZW50
KEVsZW1lbnQqKSBjb25zdDsKKyAgICAgICAgdm9pZCByZW1vdmVFZGl0aW5nU3R5bGVGcm9tRWxl
bWVudChFbGVtZW50KikgY29uc3Q7CiAKLSAgICBQYXNzUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbj4gc2VsZWN0aW9uQ29tcHV0ZWRTdHlsZShOb2RlKiYgbm9kZVRvUmVtb3ZlKSBj
b25zdDsKKyAgICAgICAgSW50UmVjdCBmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSopIGNvbnN0Owog
Ci0gICAgdm9pZCB0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoRWxlbWVudCopOwotICAgIHZvaWQg
dGV4dEZpZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50Kik7Ci0gICAgdm9pZCB0ZXh0RGlkQ2hhbmdl
SW5UZXh0RmllbGQoRWxlbWVudCopOwotICAgIGJvb2wgZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2
ZW50KEVsZW1lbnQqLCBLZXlib2FyZEV2ZW50Kik7Ci0gICAgdm9pZCB0ZXh0V2lsbEJlRGVsZXRl
ZEluVGV4dEZpZWxkKEVsZW1lbnQqIGlucHV0KTsKLSAgICB2b2lkIHRleHREaWRDaGFuZ2VJblRl
eHRBcmVhKEVsZW1lbnQqKTsKKyAgICAgICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9u
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZyk7
CisgICAgICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIG9sZFNlbGVjdGlvbiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBF
QWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0OwogCi0gICAgRHJhZ0ltYWdlUmVm
IGRyYWdJbWFnZUZvclNlbGVjdGlvbigpOwotICAgIAotLy8gPT09IHRvIGJlIG1vdmVkIGludG8g
U2VsZWN0aW9uQ29udHJvbGxlcgorICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rp
b25TdGFydChOb2RlKiYgbm9kZVRvUmVtb3ZlKSBjb25zdDsKIAotcHVibGljOgotICAgIFRleHRH
cmFudWxhcml0eSBzZWxlY3Rpb25HcmFudWxhcml0eSgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2Vs
ZWN0aW9uR3JhbnVsYXJpdHkoVGV4dEdyYW51bGFyaXR5KTsKKyAgICAgICAgdW5zaWduZWQgbWFy
a0FsbE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYsIGJvb2wgY2FzZUZsYWcsIHVuc2lnbmVk
IGxpbWl0KTsKKyAgICAgICAgYm9vbCBtYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCkg
Y29uc3Q7CisgICAgICAgIHZvaWQgc2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChi
b29sIGZsYWcpOwogCi0gICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYpIGNvbnN0OwotICAgIGJvb2wgc2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mKSBjb25zdDsKLSAgICB2b2lkIGNsZWFyQ2FyZXRSZWN0SWZOZWVk
ZWQoKTsKLSAgICB2b2lkIHNldEZvY3VzZWROb2RlSWZOZWVkZWQoKTsKLSAgICB2b2lkIHNlbGVj
dGlvbkxheW91dENoYW5nZWQoKTsKLSAgICB2b2lkIG5vdGlmeVJlbmRlcmVyT2ZTZWxlY3Rpb25D
aGFuZ2UoYm9vbCB1c2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24+IHNlbGVjdGlvbkNvbXB1dGVkU3R5bGUoTm9kZSomIG5vZGVUb1Jl
bW92ZSkgY29uc3Q7CiAKLSAgICB2b2lkIGludmFsaWRhdGVTZWxlY3Rpb24oKTsKKyAgICAgICAg
dm9pZCB0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoRWxlbWVudCopOworICAgICAgICB2b2lkIHRl
eHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVudCopOworICAgICAgICB2b2lkIHRleHREaWRDaGFu
Z2VJblRleHRGaWVsZChFbGVtZW50Kik7CisgICAgICAgIGJvb2wgZG9UZXh0RmllbGRDb21tYW5k
RnJvbUV2ZW50KEVsZW1lbnQqLCBLZXlib2FyZEV2ZW50Kik7CisgICAgICAgIHZvaWQgdGV4dFdp
bGxCZURlbGV0ZWRJblRleHRGaWVsZChFbGVtZW50KiBpbnB1dCk7CisgICAgICAgIHZvaWQgdGV4
dERpZENoYW5nZUluVGV4dEFyZWEoRWxlbWVudCopOwogCi0gICAgdm9pZCBzZXRDYXJldFZpc2li
bGUoYm9vbCA9IHRydWUpOwotICAgIHZvaWQgcGFpbnRDYXJldChHcmFwaGljc0NvbnRleHQqLCBp
bnQgdHgsIGludCB0eSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIGNvbnN0OyAgCi0gICAgdm9p
ZCBwYWludERyYWdDYXJldChHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwgY29uc3Qg
SW50UmVjdCYgY2xpcFJlY3QpIGNvbnN0OworICAgICAgICBEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdl
Rm9yU2VsZWN0aW9uKCk7CiAKLSAgICBib29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3Q7IC8v
IGlmIHRydWUsIGV2ZXJ5dGhpbmcgaW4gZnJhbWUgaXMgZWRpdGFibGUKKyAgICAvLyA9PT0gdG8g
YmUgbW92ZWQgaW50byBTZWxlY3Rpb25Db250cm9sbGVyCiAKLSAgICB2b2lkIHVwZGF0ZVNlY3Vy
ZUtleWJvYXJkRW50cnlJZkFjdGl2ZSgpOworICAgIHB1YmxpYzoKKyAgICAgICAgVGV4dEdyYW51
bGFyaXR5IHNlbGVjdGlvbkdyYW51bGFyaXR5KCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0U2Vs
ZWN0aW9uR3JhbnVsYXJpdHkoVGV4dEdyYW51bGFyaXR5KTsKIAotICAgIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKiB0eXBpbmdTdHlsZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHlwaW5nU3R5
bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qKTsKLSAgICB2b2lkIGNsZWFyVHlwaW5nU3R5
bGUoKTsKKyAgICAgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpIGNvbnN0OworICAgICAgICBib29sIHNob3VsZERlbGV0ZVNlbGVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJikgY29uc3Q7CisgICAgICAgIHZvaWQgY2xlYXJDYXJldFJlY3RJ
Zk5lZWRlZCgpOworICAgICAgICB2b2lkIHNldEZvY3VzZWROb2RlSWZOZWVkZWQoKTsKKyAgICAg
ICAgdm9pZCBzZWxlY3Rpb25MYXlvdXRDaGFuZ2VkKCk7CisgICAgICAgIHZvaWQgbm90aWZ5UmVu
ZGVyZXJPZlNlbGVjdGlvbkNoYW5nZShib29sIHVzZXJUcmlnZ2VyZWQpOwogCi0gICAgRmxvYXRS
ZWN0IHNlbGVjdGlvbkJvdW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29u
c3Q7Ci0gICAgdm9pZCBzZWxlY3Rpb25UZXh0UmVjdHMoVmVjdG9yPEZsb2F0UmVjdD4mLCBib29s
IGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29uc3Q7CisgICAgICAgIHZvaWQgaW52YWxp
ZGF0ZVNlbGVjdGlvbigpOwogCi0gICAgSFRNTEZvcm1FbGVtZW50KiBjdXJyZW50Rm9ybSgpIGNv
bnN0OworICAgICAgICB2b2lkIHNldENhcmV0VmlzaWJsZShib29sID0gdHJ1ZSk7CisgICAgICAg
IHZvaWQgcGFpbnRDYXJldChHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwgY29uc3Qg
SW50UmVjdCYgY2xpcFJlY3QpIGNvbnN0OworICAgICAgICB2b2lkIHBhaW50RHJhZ0NhcmV0KEdy
YXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkg
Y29uc3Q7CiAKLSAgICB2b2lkIHJldmVhbFNlbGVjdGlvbihjb25zdCBTY3JvbGxBbGlnbm1lbnQm
ID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlcklmTmVlZGVkLCBib29sIHJldmVhbEV4dGVu
dCA9IGZhbHNlKTsKLSAgICB2b2lkIHNldFNlbGVjdGlvbkZyb21Ob25lKCk7CisgICAgICAgIGJv
b2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdDsgLy8gaWYgdHJ1ZSwgZXZlcnl0aGluZyBpbiBm
cmFtZSBpcyBlZGl0YWJsZQogCi0gICAgdm9pZCBzZXRVc2VTZWN1cmVLZXlib2FyZEVudHJ5KGJv
b2wpOworICAgICAgICB2b2lkIHVwZGF0ZVNlY3VyZUtleWJvYXJkRW50cnlJZkFjdGl2ZSgpOwog
Ci1wcml2YXRlOgotICAgIHZvaWQgY2FyZXRCbGlua1RpbWVyRmlyZWQoVGltZXI8RnJhbWU+Kik7
CisgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiB0eXBpbmdTdHlsZSgpIGNvbnN0
OworICAgICAgICB2b2lkIHNldFR5cGluZ1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
Kik7CisgICAgICAgIHZvaWQgY2xlYXJUeXBpbmdTdHlsZSgpOwogCi1wdWJsaWM6Ci0gICAgU2Vs
ZWN0aW9uQ29udHJvbGxlciogZHJhZ0NhcmV0Q29udHJvbGxlcigpIGNvbnN0OworICAgICAgICBG
bG9hdFJlY3Qgc2VsZWN0aW9uQm91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVl
KSBjb25zdDsKKyAgICAgICAgdm9pZCBzZWxlY3Rpb25UZXh0UmVjdHMoVmVjdG9yPEZsb2F0UmVj
dD4mLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29uc3Q7CiAKLSAgICBTdHJp
bmcgc2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxsKFJlZ3VsYXJFeHByZXNzaW9uKiwgSFRNTFRhYmxl
Q2VsbEVsZW1lbnQqKTsKLSAgICBTdHJpbmcgc2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVudChj
b25zdCBWZWN0b3I8U3RyaW5nPiYgbGFiZWxzLCBFbGVtZW50Kik7Ci0gICAgU3RyaW5nIG1hdGNo
TGFiZWxzQWdhaW5zdEVsZW1lbnQoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhYmVscywgRWxlbWVu
dCopOwotICAgIAotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludChj
b25zdCBJbnRQb2ludCYgZnJhbWVQb2ludCk7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50QXRQb2lu
dChjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpOworICAgICAgICBIVE1MRm9ybUVsZW1lbnQq
IGN1cnJlbnRGb3JtKCkgY29uc3Q7CiAKLSNpZiBQTEFURk9STShNQUMpCisgICAgICAgIHZvaWQg
cmV2ZWFsU2VsZWN0aW9uKGNvbnN0IFNjcm9sbEFsaWdubWVudCYgPSBTY3JvbGxBbGlnbm1lbnQ6
OmFsaWduQ2VudGVySWZOZWVkZWQsIGJvb2wgcmV2ZWFsRXh0ZW50ID0gZmFsc2UpOworICAgICAg
ICB2b2lkIHNldFNlbGVjdGlvbkZyb21Ob25lKCk7CiAKLS8vID09PSB1bmRlY2lkZWQsIHdvdWxk
IGxpa2UgdG8gY29uc2lkZXIgbW92aW5nIHRvIGFub3RoZXIgY2xhc3MKKyAgICAgICAgdm9pZCBz
ZXRVc2VTZWN1cmVLZXlib2FyZEVudHJ5KGJvb2wpOwogCi1wdWJsaWM6Ci0gICAgTlNTdHJpbmcq
IHNlYXJjaEZvck5TTGFiZWxzQWJvdmVDZWxsKFJlZ3VsYXJFeHByZXNzaW9uKiwgSFRNTFRhYmxl
Q2VsbEVsZW1lbnQqKTsKLSAgICBOU1N0cmluZyogc2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVu
dChOU0FycmF5KiBsYWJlbHMsIEVsZW1lbnQqKTsKLSAgICBOU1N0cmluZyogbWF0Y2hMYWJlbHNB
Z2FpbnN0RWxlbWVudChOU0FycmF5KiBsYWJlbHMsIEVsZW1lbnQqKTsKKyAgICBwcml2YXRlOgor
ICAgICAgICB2b2lkIGNhcmV0QmxpbmtUaW1lckZpcmVkKFRpbWVyPEZyYW1lPiopOwogCi0jaWYg
RU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQotICAgIE5TTXV0YWJsZURpY3Rpb25hcnkqIGRhc2hi
b2FyZFJlZ2lvbnNEaWN0aW9uYXJ5KCk7Ci0jZW5kaWYKKyAgICBwdWJsaWM6CisgICAgICAgIFNl
bGVjdGlvbkNvbnRyb2xsZXIqIGRyYWdDYXJldENvbnRyb2xsZXIoKSBjb25zdDsKIAotICAgIE5T
SW1hZ2UqIHNlbGVjdGlvbkltYWdlKGJvb2wgZm9yY2VCbGFja1RleHQgPSBmYWxzZSkgY29uc3Q7
Ci0gICAgTlNJbWFnZSogc25hcHNob3REcmFnSW1hZ2UoTm9kZSosIE5TUmVjdCogaW1hZ2VSZWN0
LCBOU1JlY3QqIGVsZW1lbnRSZWN0KSBjb25zdDsKLSAgICBOU0ltYWdlKiBub2RlSW1hZ2UoTm9k
ZSopIGNvbnN0OworICAgICAgICBTdHJpbmcgc2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxsKFJlZ3Vs
YXJFeHByZXNzaW9uKiwgSFRNTFRhYmxlQ2VsbEVsZW1lbnQqKTsKKyAgICAgICAgU3RyaW5nIHNl
YXJjaEZvckxhYmVsc0JlZm9yZUVsZW1lbnQoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhYmVscywg
RWxlbWVudCopOworICAgICAgICBTdHJpbmcgbWF0Y2hMYWJlbHNBZ2FpbnN0RWxlbWVudChjb25z
dCBWZWN0b3I8U3RyaW5nPiYgbGFiZWxzLCBFbGVtZW50Kik7CiAKLXByaXZhdGU6ICAgIAotICAg
IE5TSW1hZ2UqIGltYWdlRnJvbVJlY3QoTlNSZWN0KSBjb25zdDsKKyAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50JiBmcmFtZVBvaW50
KTsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50QXRQb2ludChjb25zdCBJbnRQb2ludCYgd2lu
ZG93UG9pbnQpOwogCi0vLyA9PT0gdG8gYmUgbW92ZWQgaW50byBFZGl0b3IKKyAgICAjaWYgUExB
VEZPUk0oTUFDKQogCi1wdWJsaWM6Ci0gICAgTlNEaWN0aW9uYXJ5KiBmb250QXR0cmlidXRlc0Zv
clNlbGVjdGlvblN0YXJ0KCkgY29uc3Q7Ci0gICAgTlNXcml0aW5nRGlyZWN0aW9uIGJhc2VXcml0
aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25zdDsKKyAgICAvLyA9PT0gdW5kZWNp
ZGVkLCB3b3VsZCBsaWtlIHRvIGNvbnNpZGVyIG1vdmluZyB0byBhbm90aGVyIGNsYXNzCiAKLSNl
bmRpZgorICAgIHB1YmxpYzoKKyAgICAgICAgTlNTdHJpbmcqIHNlYXJjaEZvck5TTGFiZWxzQWJv
dmVDZWxsKFJlZ3VsYXJFeHByZXNzaW9uKiwgSFRNTFRhYmxlQ2VsbEVsZW1lbnQqKTsKKyAgICAg
ICAgTlNTdHJpbmcqIHNlYXJjaEZvckxhYmVsc0JlZm9yZUVsZW1lbnQoTlNBcnJheSogbGFiZWxz
LCBFbGVtZW50Kik7CisgICAgICAgIE5TU3RyaW5nKiBtYXRjaExhYmVsc0FnYWluc3RFbGVtZW50
KE5TQXJyYXkqIGxhYmVscywgRWxlbWVudCopOwogCi0jaWYgUExBVEZPUk0oV0lOKQorICAgICNp
ZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCisgICAgICAgIE5TTXV0YWJsZURpY3Rpb25hcnkq
IGRhc2hib2FyZFJlZ2lvbnNEaWN0aW9uYXJ5KCk7CisgICAgI2VuZGlmCiAKLXB1YmxpYzoKLSAg
ICAvLyBGSVhNRSAtIFdlIHNob3VsZCBoYXZlIGEgc2luZ2xlIHZlcnNpb24gb2Ygbm9kZUltYWdl
IGluc3RlYWQgb2YgdXNpbmcgcGxhdGZvcm0gdHlwZXMuCi0gICAgSEJJVE1BUCBub2RlSW1hZ2Uo
Tm9kZSopIGNvbnN0OworICAgICAgICBOU0ltYWdlKiBzZWxlY3Rpb25JbWFnZShib29sIGZvcmNl
QmxhY2tUZXh0ID0gZmFsc2UpIGNvbnN0OworICAgICAgICBOU0ltYWdlKiBzbmFwc2hvdERyYWdJ
bWFnZShOb2RlKiwgTlNSZWN0KiBpbWFnZVJlY3QsIE5TUmVjdCogZWxlbWVudFJlY3QpIGNvbnN0
OworICAgICAgICBOU0ltYWdlKiBub2RlSW1hZ2UoTm9kZSopIGNvbnN0OwogCi0jZW5kaWYKKyAg
ICBwcml2YXRlOgorICAgICAgICBOU0ltYWdlKiBpbWFnZUZyb21SZWN0KE5TUmVjdCkgY29uc3Q7
CiAKLXByaXZhdGU6Ci0gICAgUGFnZSogbV9wYWdlOwotICAgIG11dGFibGUgRnJhbWVUcmVlIG1f
dHJlZU5vZGU7Ci0gICAgbXV0YWJsZSBGcmFtZUxvYWRlciBtX2xvYWRlcjsKKyAgICAvLyA9PT0g
dG8gYmUgbW92ZWQgaW50byBFZGl0b3IKIAotICAgIG11dGFibGUgUmVmUHRyPERPTVdpbmRvdz4g
bV9kb21XaW5kb3c7Ci0gICAgSGFzaFNldDxET01XaW5kb3cqPiBtX2xpdmVGb3JtZXJXaW5kb3dz
OworICAgIHB1YmxpYzoKKyAgICAgICAgTlNEaWN0aW9uYXJ5KiBmb250QXR0cmlidXRlc0ZvclNl
bGVjdGlvblN0YXJ0KCkgY29uc3Q7CisgICAgICAgIE5TV3JpdGluZ0RpcmVjdGlvbiBiYXNlV3Jp
dGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3Q7CiAKLSAgICBIVE1MRnJhbWVP
d25lckVsZW1lbnQqIG1fb3duZXJFbGVtZW50OwotICAgIFJlZlB0cjxGcmFtZVZpZXc+IG1fdmll
dzsKLSAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jOworICAgICNlbmRpZgogCi0gICAgU2NyaXB0
Q29udHJvbGxlciBtX3NjcmlwdDsKKyAgICAjaWYgUExBVEZPUk0oV0lOKQogCi0gICAgU3RyaW5n
IG1fa2pzU3RhdHVzQmFyVGV4dDsKLSAgICBTdHJpbmcgbV9ranNEZWZhdWx0U3RhdHVzQmFyVGV4
dDsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIEZJWE1FIC0gV2Ugc2hvdWxkIGhhdmUgYSBzaW5n
bGUgdmVyc2lvbiBvZiBub2RlSW1hZ2UgaW5zdGVhZCBvZiB1c2luZyBwbGF0Zm9ybSB0eXBlcy4K
KyAgICAgICAgSEJJVE1BUCBub2RlSW1hZ2UoTm9kZSopIGNvbnN0OwogCi0gICAgZmxvYXQgbV96
b29tRmFjdG9yOworICAgICNlbmRpZgogCi0gICAgVGV4dEdyYW51bGFyaXR5IG1fc2VsZWN0aW9u
R3JhbnVsYXJpdHk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUGFnZSogbV9wYWdlOworICAgICAg
ICBtdXRhYmxlIEZyYW1lVHJlZSBtX3RyZWVOb2RlOworICAgICAgICBtdXRhYmxlIEZyYW1lTG9h
ZGVyIG1fbG9hZGVyOwogCi0gICAgbXV0YWJsZSBTZWxlY3Rpb25Db250cm9sbGVyIG1fc2VsZWN0
aW9uQ29udHJvbGxlcjsKLSAgICBtdXRhYmxlIFZpc2libGVTZWxlY3Rpb24gbV9tYXJrOwotICAg
IFRpbWVyPEZyYW1lPiBtX2NhcmV0QmxpbmtUaW1lcjsKLSAgICBtdXRhYmxlIEVkaXRvciBtX2Vk
aXRvcjsKLSAgICBtdXRhYmxlIEV2ZW50SGFuZGxlciBtX2V2ZW50SGFuZGxlcjsKLSAgICBtdXRh
YmxlIEFuaW1hdGlvbkNvbnRyb2xsZXIgbV9hbmltYXRpb25Db250cm9sbGVyOworICAgICAgICBt
dXRhYmxlIFJlZlB0cjxET01XaW5kb3c+IG1fZG9tV2luZG93OworICAgICAgICBIYXNoU2V0PERP
TVdpbmRvdyo+IG1fbGl2ZUZvcm1lcldpbmRvd3M7CiAKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IG1fdHlwaW5nU3R5bGU7CisgICAgICAgIEhUTUxGcmFtZU93bmVyRWxl
bWVudCogbV9vd25lckVsZW1lbnQ7CisgICAgICAgIFJlZlB0cjxGcmFtZVZpZXc+IG1fdmlldzsK
KyAgICAgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvYzsKIAotICAgIFRpbWVyPEZyYW1lPiBtX2xp
ZmVTdXBwb3J0VGltZXI7CisgICAgICAgIFNjcmlwdENvbnRyb2xsZXIgbV9zY3JpcHQ7CiAKLSAg
ICBib29sIG1fY2FyZXRWaXNpYmxlOwotICAgIGJvb2wgbV9jYXJldFBhaW50OwotICAgIAotICAg
IGJvb2wgbV9oaWdobGlnaHRUZXh0TWF0Y2hlczsKLSAgICBib29sIG1faW5WaWV3U291cmNlTW9k
ZTsKLSAgICBib29sIG1fbmVlZHNSZWFwcGx5U3R5bGVzOwotICAgIGJvb2wgbV9pc0Rpc2Nvbm5l
Y3RlZDsKLSAgICBib29sIG1fZXhjbHVkZUZyb21UZXh0U2VhcmNoOworICAgICAgICBTdHJpbmcg
bV9ranNTdGF0dXNCYXJUZXh0OworICAgICAgICBTdHJpbmcgbV9ranNEZWZhdWx0U3RhdHVzQmFy
VGV4dDsKIAotI2lmIEZSQU1FX0xPQURTX1VTRVJfU1RZTEVTSEVFVAotICAgIFVzZXJTdHlsZVNo
ZWV0TG9hZGVyKiBtX3VzZXJTdHlsZVNoZWV0TG9hZGVyOwotI2VuZGlmCisgICAgICAgIGZsb2F0
IG1fem9vbUZhY3RvcjsKKworICAgICAgICBUZXh0R3JhbnVsYXJpdHkgbV9zZWxlY3Rpb25HcmFu
dWxhcml0eTsKKworICAgICAgICBtdXRhYmxlIFNlbGVjdGlvbkNvbnRyb2xsZXIgbV9zZWxlY3Rp
b25Db250cm9sbGVyOworICAgICAgICBtdXRhYmxlIFZpc2libGVTZWxlY3Rpb24gbV9tYXJrOwor
ICAgICAgICBUaW1lcjxGcmFtZT4gbV9jYXJldEJsaW5rVGltZXI7CisgICAgICAgIG11dGFibGUg
RWRpdG9yIG1fZWRpdG9yOworICAgICAgICBtdXRhYmxlIEV2ZW50SGFuZGxlciBtX2V2ZW50SGFu
ZGxlcjsKKyAgICAgICAgbXV0YWJsZSBBbmltYXRpb25Db250cm9sbGVyIG1fYW5pbWF0aW9uQ29u
dHJvbGxlcjsKKworICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1f
dHlwaW5nU3R5bGU7CisKKyAgICAgICAgVGltZXI8RnJhbWU+IG1fbGlmZVN1cHBvcnRUaW1lcjsK
KworICAgICAgICBib29sIG1fY2FyZXRWaXNpYmxlOworICAgICAgICBib29sIG1fY2FyZXRQYWlu
dDsKKworICAgICAgICBib29sIG1faGlnaGxpZ2h0VGV4dE1hdGNoZXM7CisgICAgICAgIGJvb2wg
bV9pblZpZXdTb3VyY2VNb2RlOworICAgICAgICBib29sIG1fbmVlZHNSZWFwcGx5U3R5bGVzOwor
ICAgICAgICBib29sIG1faXNEaXNjb25uZWN0ZWQ7CisgICAgICAgIGJvb2wgbV9leGNsdWRlRnJv
bVRleHRTZWFyY2g7CisKKyAgICAjaWYgRlJBTUVfTE9BRFNfVVNFUl9TVFlMRVNIRUVUCisgICAg
ICAgIFVzZXJTdHlsZVNoZWV0TG9hZGVyKiBtX3VzZXJTdHlsZVNoZWV0TG9hZGVyOworICAgICNl
bmRpZgogCi19OworICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33450</attachid>
            <date>2009-07-24 08:17:27 -0700</date>
            <delta_ts>2009-07-24 09:05:05 -0700</delta_ts>
            <desc>Fixed bug # typo</desc>
            <filename>FramePatch.diff</filename>
            <type>text/plain</type>
            <size>45417</size>
            <attacher name="Mike Fenton">mifenton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjMxMzA2Ni4uYTE3NTU2MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAwOS0wNy0yNCAgTWlrZSBGZW50b24g
IDxtaWtlLmZlbnRvbkB0b3JjaG1vYmlsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAvaCB0
byBjb25mb3JtIHRvIFdlYktpdAorICAgICAgICBTdHlsZSBHdWlkZWxpbmVzIGFzIGlkZW50aWZp
ZWQgYnkgY3BwbGludC5weS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTI3NjU0CisKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6fkZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXREb2N1bWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6Zmlyc3RSZWN0Rm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUmVn
RXhwRm9yTGFiZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZWFyY2hGb3JMYWJlbHNC
ZWZvcmVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjptYXRjaExhYmVsc0FnYWlu
c3RFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZWxlY3Rpb25MYXlvdXRDaGFu
Z2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZXRab29tRmFjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpyZWFwcGx5U3R5bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
Ojppc0NvbnRlbnRFZGl0YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6Y29tcHV0ZUFu
ZFNldFR5cGluZ1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZWxlY3Rpb25TdGFy
dFN0eWxlUHJvcGVydHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2VsZWN0aW9u
Q29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6YXBwbHlFZGl0aW5nU3R5
bGVUb0JvZHlFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpyZW1vdmVFZGl0aW5n
U3R5bGVGcm9tQm9keUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmFwcGx5RWRp
dGluZ1N0eWxlVG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZWxlY3Rpb25C
b3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmN1cnJlbnRGb3JtKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpyZXZlYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWU6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNl
dFNlbGVjdGlvbkZyb21Ob25lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpmaW5kU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjptYXJrQWxsTWF0Y2hlc0ZvclRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmNsZWFyRm9ybWVyRE9NV2luZG93KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lOjp1bmZvY3VzV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
Ojpkb2N1bWVudEF0UG9pbnQpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRpc3BsYXlT
dHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnBhZ2Va
b29tRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjp0ZXh0Wm9vbUZhY3Rvcik6CisK
IDIwMDktMDctMjMgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IE1hcmsgUm93ZS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAg
Yi9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDg3MGJkMmEuLjJkNmE3OTUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApA
QCAtNDIsMjEgKzQyLDIwIEBACiAjaW5jbHVkZSAiRWRpdGluZ1RleHQuaCIKICNpbmNsdWRlICJF
ZGl0b3JDbGllbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRm9jdXND
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiRm9jdXNDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRl
ckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MRnJhbWVFbGVtZW50QmFzZS5oIgotI2luY2x1ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MVGFibGVDZWxsRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0j
aW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSAiTWVkaWFGZWF0dXJlTmFtZXMuaCIKICNpbmNs
dWRlICJOYXZpZ2F0b3IuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgpAQCAtNjcsMTIgKzY2LDEz
IEBACiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVt
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNp
bmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIKLSNp
bmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKKyNp
bmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgogI2luY2x1ZGUg
InZpc2libGVfdW5pdHMuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmg+
CkBAIC0xMDQsNyArMTA0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwogCi0jaWZuZGVmIE5ERUJVRyAgICAKKyNpZm5kZWYgTkRFQlVHCiBzdGF0
aWMgV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXIgZnJhbWVDb3VudGVyKCJGcmFtZSIpOwogI2Vu
ZGlmCiAKQEAgLTExNSw3ICsxMTUsNyBAQCBzdGF0aWMgaW5saW5lIEZyYW1lKiBwYXJlbnRGcm9t
T3duZXJFbGVtZW50KEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50KQogICAgIHJl
dHVybiBvd25lckVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCk7CiB9CiAKLUZyYW1lOjpGcmFt
ZShQYWdlKiBwYWdlLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgRnJhbWVM
b2FkZXJDbGllbnQqIGZyYW1lTG9hZGVyQ2xpZW50KSAKK0ZyYW1lOjpGcmFtZShQYWdlKiBwYWdl
LCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgRnJhbWVMb2FkZXJDbGllbnQq
IGZyYW1lTG9hZGVyQ2xpZW50KQogICAgIDogbV9wYWdlKHBhZ2UpCiAgICAgLCBtX3RyZWVOb2Rl
KHRoaXMsIHBhcmVudEZyb21Pd25lckVsZW1lbnQob3duZXJFbGVtZW50KSkKICAgICAsIG1fbG9h
ZGVyKHRoaXMsIGZyYW1lTG9hZGVyQ2xpZW50KQpAQCAtMTYzLDcgKzE2Myw3IEBAIEZyYW1lOjpG
cmFtZShQYWdlKiBwYWdlLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgRnJh
bWVMb2FkZXJDbGllbnQqCiAgICAgZWxzZSB7CiAgICAgICAgIHBhZ2UtPmluY3JlbWVudEZyYW1l
Q291bnQoKTsKICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIHdpbGwgbm90IGVuZCB1cCB3aXRoIHR3
byBmcmFtZXMgcmVmZXJlbmNpbmcgdGhlIHNhbWUgb3duZXIgZWxlbWVudC4KLSAgICAgICAgQVNT
RVJUKCghKG93bmVyRWxlbWVudC0+bV9jb250ZW50RnJhbWUpKSB8fCAob3duZXJFbGVtZW50LT5t
X2NvbnRlbnRGcmFtZS0+b3duZXJFbGVtZW50KCkgIT0gb3duZXJFbGVtZW50KSk7ICAgICAgICAK
KyAgICAgICAgQVNTRVJUKCghKG93bmVyRWxlbWVudC0+bV9jb250ZW50RnJhbWUpKSB8fCAob3du
ZXJFbGVtZW50LT5tX2NvbnRlbnRGcmFtZS0+b3duZXJFbGVtZW50KCkgIT0gb3duZXJFbGVtZW50
KSk7CiAgICAgICAgIG93bmVyRWxlbWVudC0+bV9jb250ZW50RnJhbWUgPSB0aGlzOwogICAgIH0K
IApAQCAtMTc2LDcgKzE3Niw3IEBAIEZyYW1lOjp+RnJhbWUoKQogewogICAgIHNldFZpZXcoMCk7
CiAgICAgbG9hZGVyKCktPmNhbmNlbEFuZENsZWFyKCk7Ci0gICAgCisKICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIG5vdCBiZSBkb2luZyBhbGwgdGhpcyB3b3JrIGluc2lkZSB0aGUgZGVzdHJ1Y3Rv
cgogCiAgICAgQVNTRVJUKCFtX2xpZmVTdXBwb3J0VGltZXIuaXNBY3RpdmUoKSk7CkBAIC0xODYs
MTQgKzE4NiwxNCBAQCBGcmFtZTo6fkZyYW1lKCkKICNlbmRpZgogCiAgICAgZGlzY29ubmVjdE93
bmVyRWxlbWVudCgpOwotICAgIAorCiAgICAgaWYgKG1fZG9tV2luZG93KQogICAgICAgICBtX2Rv
bVdpbmRvdy0+ZGlzY29ubmVjdEZyYW1lKCk7CiAKICAgICBIYXNoU2V0PERPTVdpbmRvdyo+Ojpp
dGVyYXRvciBlbmQgPSBtX2xpdmVGb3JtZXJXaW5kb3dzLmVuZCgpOwogICAgIGZvciAoSGFzaFNl
dDxET01XaW5kb3cqPjo6aXRlcmF0b3IgaXQgPSBtX2xpdmVGb3JtZXJXaW5kb3dzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgKCppdCktPmRpc2Nvbm5lY3RGcmFtZSgpOwotICAg
ICAgICAgICAgCisKICAgICBpZiAobV92aWV3KSB7CiAgICAgICAgIG1fdmlldy0+aGlkZSgpOwog
ICAgICAgICBtX3ZpZXctPmNsZWFyRnJhbWUoKTsKQEAgLTI2Miw3ICsyNjIsNyBAQCB2b2lkIEZy
YW1lOjpzZXREb2N1bWVudChQYXNzUmVmUHRyPERvY3VtZW50PiBuZXdEb2MpCiAgICAgbV9kb2Mg
PSBuZXdEb2M7CiAgICAgaWYgKG1fZG9jICYmIHNlbGVjdGlvbigpLT5pc0ZvY3VzZWRBbmRBY3Rp
dmUoKSkKICAgICAgICAgc2V0VXNlU2VjdXJlS2V5Ym9hcmRFbnRyeShtX2RvYy0+dXNlU2VjdXJl
S2V5Ym9hcmRFbnRyeVdoZW5BY3RpdmUoKSk7Ci0gICAgICAgIAorCiAgICAgaWYgKG1fZG9jICYm
ICFtX2RvYy0+YXR0YWNoZWQoKSkKICAgICAgICAgbV9kb2MtPmF0dGFjaCgpOwogCkBAIC0zMDcs
MTQgKzMwNywxNCBAQCBJbnRSZWN0IEZyYW1lOjpmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSogcmFu
Z2UpIGNvbnN0CiAKICAgICBpZiAoc3RhcnRDYXJldFJlY3QueSgpID09IGVuZENhcmV0UmVjdC55
KCkpIHsKICAgICAgICAgLy8gc3RhcnQgYW5kIGVuZCBhcmUgb24gdGhlIHNhbWUgbGluZQotICAg
ICAgICByZXR1cm4gSW50UmVjdChtaW4oc3RhcnRDYXJldFJlY3QueCgpLCBlbmRDYXJldFJlY3Qu
eCgpKSwgCi0gICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q2FyZXRSZWN0LnkoKSwgCisgICAg
ICAgIHJldHVybiBJbnRSZWN0KG1pbihzdGFydENhcmV0UmVjdC54KCksIGVuZENhcmV0UmVjdC54
KCkpLAorICAgICAgICAgICAgICAgICAgICAgICBzdGFydENhcmV0UmVjdC55KCksCiAgICAgICAg
ICAgICAgICAgICAgICAgIGFicyhlbmRDYXJldFJlY3QueCgpIC0gc3RhcnRDYXJldFJlY3QueCgp
KSwKICAgICAgICAgICAgICAgICAgICAgICAgbWF4KHN0YXJ0Q2FyZXRSZWN0LmhlaWdodCgpLCBl
bmRDYXJldFJlY3QuaGVpZ2h0KCkpKTsKICAgICB9Ci0gICAgCisKICAgICAvLyBzdGFydCBhbmQg
ZW5kIGFyZW4ndCBvbiB0aGUgc2FtZSBsaW5lLCBzbyBnbyBmcm9tIHN0YXJ0IHRvIHRoZSBlbmQg
b2YgaXRzIGxpbmUKLSAgICByZXR1cm4gSW50UmVjdChzdGFydENhcmV0UmVjdC54KCksIAorICAg
IHJldHVybiBJbnRSZWN0KHN0YXJ0Q2FyZXRSZWN0LngoKSwKICAgICAgICAgICAgICAgICAgICBz
dGFydENhcmV0UmVjdC55KCksCiAgICAgICAgICAgICAgICAgICAgc3RhcnRDYXJldFJlY3Qud2lk
dGgoKSArIGV4dHJhV2lkdGhUb0VuZE9mTGluZSwKICAgICAgICAgICAgICAgICAgICBzdGFydENh
cmV0UmVjdC5oZWlnaHQoKSk7CkBAIC0zNjUsMjMgKzM2NSwyMSBAQCBzdGF0aWMgUmVndWxhckV4
cHJlc3Npb24qIGNyZWF0ZVJlZ0V4cEZvckxhYmVscyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFi
ZWxzKQogCiAgICAgICAgIGJvb2wgc3RhcnRzV2l0aFdvcmRDaGFyID0gZmFsc2U7CiAgICAgICAg
IGJvb2wgZW5kc1dpdGhXb3JkQ2hhciA9IGZhbHNlOwotICAgICAgICBpZiAobGFiZWwubGVuZ3Ro
KCkgIT0gMCkgeworICAgICAgICBpZiAobGFiZWwubGVuZ3RoKCkpIHsKICAgICAgICAgICAgIHN0
YXJ0c1dpdGhXb3JkQ2hhciA9IHdvcmRSZWdFeHAubWF0Y2gobGFiZWwuc3Vic3RyaW5nKDAsIDEp
KSA+PSAwOwogICAgICAgICAgICAgZW5kc1dpdGhXb3JkQ2hhciA9IHdvcmRSZWdFeHAubWF0Y2go
bGFiZWwuc3Vic3RyaW5nKGxhYmVsLmxlbmd0aCgpIC0gMSwgMSkpID49IDA7CiAgICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChpICE9IDApCisKKyAgICAgICAgaWYgKGkpCiAgICAgICAg
ICAgICBwYXR0ZXJuLmFwcGVuZCgifCIpOwogICAgICAgICAvLyBTZWFyY2ggZm9yIHdvcmQgYm91
bmRhcmllcyBvbmx5IGlmIGxhYmVsIHN0YXJ0cy9lbmRzIHdpdGggIndvcmQgY2hhcmFjdGVycyIu
CiAgICAgICAgIC8vIElmIHdlIGFsd2F5cyBzZWFyY2hlZCBmb3Igd29yZCBib3VuZGFyaWVzLCB0
aGlzIHdvdWxkbid0IHdvcmsgZm9yIGxhbmd1YWdlcwogICAgICAgICAvLyBzdWNoIGFzIEphcGFu
ZXNlLgotICAgICAgICBpZiAoc3RhcnRzV2l0aFdvcmRDaGFyKSB7CisgICAgICAgIGlmIChzdGFy
dHNXaXRoV29yZENoYXIpCiAgICAgICAgICAgICBwYXR0ZXJuLmFwcGVuZCgiXFxiIik7Ci0gICAg
ICAgIH0KICAgICAgICAgcGF0dGVybi5hcHBlbmQobGFiZWwpOwotICAgICAgICBpZiAoZW5kc1dp
dGhXb3JkQ2hhcikgeworICAgICAgICBpZiAoZW5kc1dpdGhXb3JkQ2hhcikKICAgICAgICAgICAg
IHBhdHRlcm4uYXBwZW5kKCJcXGIiKTsKLSAgICAgICAgfQogICAgIH0KICAgICBwYXR0ZXJuLmFw
cGVuZCgiKSIpOwogICAgIHJldHVybiBuZXcgUmVndWxhckV4cHJlc3Npb24ocGF0dGVybiwgVGV4
dENhc2VJbnNlbnNpdGl2ZSk7CkBAIC00NjIsOSArNDYwLDggQEAgU3RyaW5nIEZyYW1lOjpzZWFy
Y2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYWJlbHMsIEVs
ZW1lbnQKIAogICAgIC8vIElmIHdlIHN0YXJ0ZWQgaW4gYSBjZWxsLCBidXQgYmFpbGVkIGJlY2F1
c2Ugd2UgZm91bmQgdGhlIHN0YXJ0IG9mIHRoZSBmb3JtIG9yIHRoZQogICAgIC8vIHByZXZpb3Vz
IGVsZW1lbnQsIHdlIHN0aWxsIG1pZ2h0IG5lZWQgdG8gc2VhcmNoIHRoZSByb3cgYWJvdmUgdXMg
Zm9yIGEgbGFiZWwuCi0gICAgaWYgKHN0YXJ0aW5nVGFibGVDZWxsICYmICFzZWFyY2hlZENlbGxB
Ym92ZSkgeworICAgIGlmIChzdGFydGluZ1RhYmxlQ2VsbCAmJiAhc2VhcmNoZWRDZWxsQWJvdmUp
CiAgICAgICAgICByZXR1cm4gc2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxsKHJlZ0V4cC5nZXQoKSwg
c3RhcnRpbmdUYWJsZUNlbGwpOwotICAgIH0KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKQEAg
LTQ3Nyw3ICs0NzQsNyBAQCBTdHJpbmcgRnJhbWU6Om1hdGNoTGFiZWxzQWdhaW5zdEVsZW1lbnQo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGxhYmVscywgRWxlbWVudCogZQogICAgIC8vIE1ha2UgbnVt
YmVycyBhbmQgXydzIGluIGZpZWxkIG5hbWVzIGJlaGF2ZSBsaWtlIHdvcmQgYm91bmRhcmllcywg
ZS5nLiwgImFkZHJlc3MyIgogICAgIHJlcGxhY2UobmFtZSwgUmVndWxhckV4cHJlc3Npb24oIlxc
ZCIsIFRleHRDYXNlU2Vuc2l0aXZlKSwgIiAiKTsKICAgICBuYW1lLnJlcGxhY2UoJ18nLCAnICcp
OwotICAgIAorCiAgICAgT3duUHRyPFJlZ3VsYXJFeHByZXNzaW9uPiByZWdFeHAoY3JlYXRlUmVn
RXhwRm9yTGFiZWxzKGxhYmVscykpOwogICAgIC8vIFVzZSB0aGUgbGFyZ2VzdCBtYXRjaCB3ZSBj
YW4gZmluZCBpbiB0aGUgd2hvbGUgbmFtZSBzdHJpbmcKICAgICBpbnQgcG9zOwpAQCAtNjQwLDcg
KzYzNyw3IEBAIHZvaWQgRnJhbWU6OnNlbGVjdGlvbkxheW91dENoYW5nZWQoKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHRoaXMtPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKTsKLSAgICAgICAgCisKICAgICBpZiAoIXNlbGVjdGlvbi5pc1Jhbmdl
KCkpCiAgICAgICAgIHZpZXctPmNsZWFyU2VsZWN0aW9uKCk7CiAgICAgZWxzZSB7CkBAIC02NTQs
NyArNjUxLDcgQEAgdm9pZCBGcmFtZTo6c2VsZWN0aW9uTGF5b3V0Q2hhbmdlZCgpCiAgICAgICAg
IFBvc2l0aW9uIGVuZFBvcyA9IHNlbGVjdGlvbi5lbmQoKTsKICAgICAgICAgaWYgKGVuZFBvcy51
cHN0cmVhbSgpLmlzQ2FuZGlkYXRlKCkpCiAgICAgICAgICAgICBlbmRQb3MgPSBlbmRQb3MudXBz
dHJlYW0oKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gV2UgY2FuIGdldCBpbnRvIGEgc3RhdGUg
d2hlcmUgdGhlIHNlbGVjdGlvbiBlbmRwb2ludHMgbWFwIHRvIHRoZSBzYW1lIFZpc2libGVQb3Np
dGlvbiB3aGVuIGEgc2VsZWN0aW9uIGlzIGRlbGV0ZWQKICAgICAgICAgLy8gYmVjYXVzZSB3ZSBk
b24ndCB5ZXQgbm90aWZ5IHRoZSBTZWxlY3Rpb25Db250cm9sbGVyIG9mIHRleHQgcmVtb3ZhbC4K
ICAgICAgICAgaWYgKHN0YXJ0UG9zLmlzTm90TnVsbCgpICYmIGVuZFBvcy5pc05vdE51bGwoKSAm
JiBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkgIT0gc2VsZWN0aW9uLnZpc2libGVFbmQoKSkgewpA
QCAtNzI5LDEyICs3MjYsMTIgQEAgYm9vbCBGcmFtZTo6c2hvdWxkQXBwbHlQYWdlWm9vbSgpIGNv
bnN0CiB9CiAKIHZvaWQgRnJhbWU6OnNldFpvb21GYWN0b3IoZmxvYXQgcGVyY2VudCwgYm9vbCBp
c1RleHRPbmx5KQoteyAgCit7CiAgICAgaWYgKG1fem9vbUZhY3RvciA9PSBwZXJjZW50ICYmIGlz
Wm9vbUZhY3RvclRleHRPbmx5KCkgPT0gaXNUZXh0T25seSkKICAgICAgICAgcmV0dXJuOwogCiAj
aWYgRU5BQkxFKFNWRykKLSAgICAvLyBTVkcgZG9lc24ndCBjYXJlIGlmIHRoZSB6b29tIGZhY3Rv
ciBpcyB0ZXh0IG9ubHkuICBJdCB3aWxsIGFsd2F5cyBhcHBseSBhIAorICAgIC8vIFNWRyBkb2Vz
bid0IGNhcmUgaWYgdGhlIHpvb20gZmFjdG9yIGlzIHRleHQgb25seS4gIEl0IHdpbGwgYWx3YXlz
IGFwcGx5IGEKICAgICAvLyB6b29tIHRvIHRoZSB3aG9sZSBTVkcuCiAgICAgaWYgKG1fZG9jLT5p
c1NWR0RvY3VtZW50KCkpIHsKICAgICAgICAgaWYgKCFzdGF0aWNfY2FzdDxTVkdEb2N1bWVudCo+
KG1fZG9jLmdldCgpKS0+em9vbUFuZFBhbkVuYWJsZWQoKSkKQEAgLTgyNyw3ICs4MjQsNyBAQCB2
b2lkIEZyYW1lOjpyZWFwcGx5U3R5bGVzKCkKICAgICAvLyBGSVhNRTogVGhpcyBjYWxsIGRvZXNu
J3QgcmVhbGx5IG1ha2Ugc2Vuc2UgaW4gYSBmdW5jdGlvbiBjYWxsZWQgcmVhcHBseVN0eWxlcy4K
ICAgICAvLyBXZSBzaG91bGQgcHJvYmFibHkgZXZlbnR1YWxseSBtb3ZlIGl0IGludG8gaXRzIG93
biBmdW5jdGlvbi4KICAgICBtX2RvYy0+ZG9jTG9hZGVyKCktPnNldEF1dG9Mb2FkSW1hZ2VzKG1f
cGFnZSAmJiBtX3BhZ2UtPnNldHRpbmdzKCktPmxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSgpKTsK
LSAgICAgICAgCisKICNpZiBGUkFNRV9MT0FEU19VU0VSX1NUWUxFU0hFRVQKICAgICBjb25zdCBL
VVJMIHVzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSBtX3BhZ2UgPyBtX3BhZ2UtPnNldHRpbmdzKCkt
PnVzZXJTdHlsZVNoZWV0TG9jYXRpb24oKSA6IEtVUkwoKTsKICAgICBpZiAoIXVzZXJTdHlsZVNo
ZWV0TG9jYXRpb24uaXNFbXB0eSgpKQpAQCAtODU5LDcgKzg1Niw3IEBAIGJvb2wgRnJhbWU6OnNo
b3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNv
bnN0CiAgICAgcmV0dXJuIGVkaXRvcigpLT5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2Uoc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwogfQogCi1ib29sIEZyYW1lOjppc0Nv
bnRlbnRFZGl0YWJsZSgpIGNvbnN0IAorYm9vbCBGcmFtZTo6aXNDb250ZW50RWRpdGFibGUoKSBj
b25zdAogewogICAgIGlmIChtX2VkaXRvci5jbGllbnRJc0VkaXRhYmxlKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtODk3LDcgKzg5NCw3IEBAIHZvaWQgRnJhbWU6OmNsZWFyVHlwaW5nU3R5
bGUoKQogCiB2b2lkIEZyYW1lOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoQ1NTU3R5bGVEZWNs
YXJhdGlvbiAqc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKLSAgICBpZiAoIXN0
eWxlIHx8IHN0eWxlLT5sZW5ndGgoKSA9PSAwKSB7CisgICAgaWYgKCFzdHlsZSB8fCAhc3R5bGUt
Pmxlbmd0aCgpKSB7CiAgICAgICAgIGNsZWFyVHlwaW5nU3R5bGUoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTkzMyw3ICs5MzAsNyBAQCB2b2lkIEZyYW1lOjpjb21wdXRlQW5kU2V0VHlw
aW5nU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUsIEVkaXRBY3Rpb24gZWRpdAogICAg
IGJsb2NrU3R5bGUtPmRpZmYobXV0YWJsZVN0eWxlLmdldCgpKTsKICAgICBpZiAoYmxvY2tTdHls
ZS0+bGVuZ3RoKCkgPiAwKQogICAgICAgICBhcHBseUNvbW1hbmQoQXBwbHlTdHlsZUNvbW1hbmQ6
OmNyZWF0ZShkb2N1bWVudCgpLCBibG9ja1N0eWxlLmdldCgpLCBlZGl0aW5nQWN0aW9uKSk7Ci0g
ICAgCisKICAgICAvLyBTZXQgdGhlIHJlbWFpbmluZyBzdHlsZSBhcyB0aGUgdHlwaW5nIHN0eWxl
LgogICAgIG1fdHlwaW5nU3R5bGUgPSBtdXRhYmxlU3R5bGUucmVsZWFzZSgpOwogfQpAQCAtOTUw
LDcgKzk0Nyw3IEBAIFN0cmluZyBGcmFtZTo6c2VsZWN0aW9uU3RhcnRTdHlsZVByb3BlcnR5VmFs
dWUoaW50IHN0eWxlUHJvcGVydHlJRCkgY29uc3QKICAgICBpZiAobm9kZVRvUmVtb3ZlKSB7CiAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92
ZShlYyk7Ci0gICAgICAgIEFTU0VSVChlYyA9PSAwKTsKKyAgICAgICAgQVNTRVJUKCFlYyk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIHZhbHVlOwpAQCAtOTY5LDcgKzk2Niw3IEBAIFBhc3NSZWZQdHI8
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBGcmFtZTo6c2VsZWN0aW9uQ29tcHV0ZWRTdHls
ZShOb2RlKiYgbm9kCiAgICAgRWxlbWVudCAqZWxlbSA9IHBvcy5lbGVtZW50KCk7CiAgICAgaWYg
KCFlbGVtKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKKwogICAgIFJlZlB0cjxFbGVtZW50PiBz
dHlsZUVsZW1lbnQgPSBlbGVtOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCkBAIC05Nzcs
MTAgKzk3NCwxMCBAQCBQYXNzUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gRnJh
bWU6OnNlbGVjdGlvbkNvbXB1dGVkU3R5bGUoTm9kZSomIG5vZAogICAgICAgICBzdHlsZUVsZW1l
bnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHNwYW5UYWcsIGZhbHNlKTsKIAogICAgICAg
ICBzdHlsZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsIG1fdHlwaW5nU3R5bGUtPmNz
c1RleHQoKS5pbXBsKCksIGVjKTsKLSAgICAgICAgQVNTRVJUKGVjID09IDApOwotICAgICAgICAK
KyAgICAgICAgQVNTRVJUKCFlYyk7CisKICAgICAgICAgc3R5bGVFbGVtZW50LT5hcHBlbmRDaGls
ZChkb2N1bWVudCgpLT5jcmVhdGVFZGl0aW5nVGV4dE5vZGUoIiIpLCBlYyk7Ci0gICAgICAgIEFT
U0VSVChlYyA9PSAwKTsKKyAgICAgICAgQVNTRVJUKCFlYyk7CiAKICAgICAgICAgaWYgKGVsZW0t
PnJlbmRlcmVyKCkgJiYgZWxlbS0+cmVuZGVyZXIoKS0+Y2FuSGF2ZUNoaWxkcmVuKCkpIHsKICAg
ICAgICAgICAgIGVsZW0tPmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCwgZWMpOwpAQCAtOTg4LDEz
ICs5ODUsMTIgQEAgUGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IEZyYW1l
OjpzZWxlY3Rpb25Db21wdXRlZFN0eWxlKE5vZGUqJiBub2QKICAgICAgICAgICAgIE5vZGUgKnBh
cmVudCA9IGVsZW0tPnBhcmVudCgpOwogICAgICAgICAgICAgTm9kZSAqbmV4dCA9IGVsZW0tPm5l
eHRTaWJsaW5nKCk7CiAKLSAgICAgICAgICAgIGlmIChuZXh0KSB7CisgICAgICAgICAgICBpZiAo
bmV4dCkKICAgICAgICAgICAgICAgICBwYXJlbnQtPmluc2VydEJlZm9yZShzdHlsZUVsZW1lbnQs
IG5leHQsIGVjKTsKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgcGFyZW50LT5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQsIGVjKTsKLSAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBBU1NFUlQoZWMgPT0gMCk7CisgICAgICAgIEFT
U0VSVCghZWMpOwogCiAgICAgICAgIG5vZGVUb1JlbW92ZSA9IHN0eWxlRWxlbWVudC5nZXQoKTsK
ICAgICB9CkBAIC0xMDQ0LDE4ICsxMDQwLDE2IEBAIHZvaWQgRnJhbWU6OmFwcGx5RWRpdGluZ1N0
eWxlVG9Cb2R5RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0g
bV9kb2MtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5Iik7CiAgICAgdW5zaWduZWQgbGVuID0g
bGlzdC0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7
Ci0gICAgICAgIGFwcGx5RWRpdGluZ1N0eWxlVG9FbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQq
PihsaXN0LT5pdGVtKGkpKSk7ICAgIAotICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuOyBpKyspCisgICAgICAgIGFwcGx5RWRpdGluZ1N0eWxlVG9FbGVtZW50KHN0YXRpY19j
YXN0PEVsZW1lbnQqPihsaXN0LT5pdGVtKGkpKSk7CiB9CiAKIHZvaWQgRnJhbWU6OnJlbW92ZUVk
aXRpbmdTdHlsZUZyb21Cb2R5RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgUmVmUHRyPE5vZGVMaXN0
PiBsaXN0ID0gbV9kb2MtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5Iik7CiAgICAgdW5zaWdu
ZWQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bjsgaSsrKSB7Ci0gICAgICAgIHJlbW92ZUVkaXRpbmdTdHlsZUZyb21FbGVtZW50KHN0YXRpY19j
YXN0PEVsZW1lbnQqPihsaXN0LT5pdGVtKGkpKSk7ICAgIAotICAgIH0KKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgICAgIHJlbW92ZUVkaXRpbmdTdHlsZUZyb21F
bGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihsaXN0LT5pdGVtKGkpKSk7CiB9CiAKIHZvaWQg
RnJhbWU6OmFwcGx5RWRpdGluZ1N0eWxlVG9FbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0
CkBAIC0xMDY4LDExICsxMDYyLDExIEBAIHZvaWQgRnJhbWU6OmFwcGx5RWRpdGluZ1N0eWxlVG9F
bGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXb3JkV3JhcCwgImJyZWFrLXdv
cmQiLCBmYWxzZSwgZWMpOwotICAgIEFTU0VSVChlYyA9PSAwKTsKKyAgICBBU1NFUlQoIWVjKTsK
ICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXROYnNwTW9kZSwgInNwYWNl
IiwgZmFsc2UsIGVjKTsKLSAgICBBU1NFUlQoZWMgPT0gMCk7CisgICAgQVNTRVJUKCFlYyk7CiAg
ICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0TGluZUJyZWFrLCAiYWZ0ZXIt
d2hpdGUtc3BhY2UiLCBmYWxzZSwgZWMpOwotICAgIEFTU0VSVChlYyA9PSAwKTsKKyAgICBBU1NF
UlQoIWVjKTsKIH0KIAogdm9pZCBGcmFtZTo6cmVtb3ZlRWRpdGluZ1N0eWxlRnJvbUVsZW1lbnQo
RWxlbWVudCopIGNvbnN0CkBAIC0xMTg5LDcgKzExODMsNyBAQCBGbG9hdFJlY3QgRnJhbWU6OnNl
bGVjdGlvbkJvdW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdAogICAgIEZyYW1l
VmlldyogdmlldyA9IG1fdmlldy5nZXQoKTsKICAgICBpZiAoIXJvb3QgfHwgIXZpZXcpCiAgICAg
ICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgCisKICAgICBJbnRSZWN0IHNlbGVjdGlvblJlY3Qg
PSByb290LT5zZWxlY3Rpb25Cb3VuZHMoY2xpcFRvVmlzaWJsZUNvbnRlbnQpOwogICAgIHJldHVy
biBjbGlwVG9WaXNpYmxlQ29udGVudCA/IGludGVyc2VjdGlvbihzZWxlY3Rpb25SZWN0LCB2aWV3
LT52aXNpYmxlQ29udGVudFJlY3QoKSkgOiBzZWxlY3Rpb25SZWN0OwogfQpAQCAtMTI0MCw3ICsx
MjM0LDcgQEAgSFRNTEZvcm1FbGVtZW50ICpGcmFtZTo6Y3VycmVudEZvcm0oKSBjb25zdAogICAg
IE5vZGUgKnN0YXJ0ID0gbV9kb2MgPyBtX2RvYy0+Zm9jdXNlZE5vZGUoKSA6IDA7CiAgICAgaWYg
KCFzdGFydCkKICAgICAgICAgc3RhcnQgPSBzZWxlY3Rpb24oKS0+c3RhcnQoKS5ub2RlKCk7Ci0g
ICAgCisKICAgICAvLyB0cnkgd2Fsa2luZyB1cCB0aGUgbm9kZSB0cmVlIHRvIGZpbmQgYSBmb3Jt
IGVsZW1lbnQKICAgICBOb2RlICpuOwogICAgIGZvciAobiA9IHN0YXJ0OyBuOyBuID0gbi0+cGFy
ZW50Tm9kZSgpKSB7CkBAIC0xMjQ5LDcgKzEyNDMsNyBAQCBIVE1MRm9ybUVsZW1lbnQgKkZyYW1l
OjpjdXJyZW50Rm9ybSgpIGNvbnN0CiAgICAgICAgIGVsc2UgaWYgKG4tPmlzSFRNTEVsZW1lbnQo
KSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KG4p
LT5mb3JtKCk7CiAgICAgfQotICAgIAorCiAgICAgLy8gdHJ5IHdhbGtpbmcgZm9yd2FyZCBpbiB0
aGUgbm9kZSB0cmVlIHRvIGZpbmQgYSBmb3JtIGVsZW1lbnQKICAgICByZXR1cm4gc3RhcnQgPyBz
Y2FuRm9yRm9ybShzdGFydCkgOiAwOwogfQpAQCAtMTI1OSwyMSArMTI1MywyMSBAQCB2b2lkIEZy
YW1lOjpyZXZlYWxTZWxlY3Rpb24oY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnbm1lbnQsIGJv
b2wgcmV2ZWFsRXh0ZW50KQogICAgIEludFJlY3QgcmVjdDsKIAogICAgIHN3aXRjaCAoc2VsZWN0
aW9uKCktPnNlbGVjdGlvblR5cGUoKSkgewotICAgICAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246
Ok5vU2VsZWN0aW9uOgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFZpc2libGVT
ZWxlY3Rpb246OkNhcmV0U2VsZWN0aW9uOgotICAgICAgICAgICAgcmVjdCA9IHNlbGVjdGlvbigp
LT5hYnNvbHV0ZUNhcmV0Qm91bmRzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKLSAgICAgICAgICAgIHJlY3QgPSBy
ZXZlYWxFeHRlbnQgPyBWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uKCktPmV4dGVudCgpKS5hYnNv
bHV0ZUNhcmV0Qm91bmRzKCkgOiBlbmNsb3NpbmdJbnRSZWN0KHNlbGVjdGlvbkJvdW5kcyhmYWxz
ZSkpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpOb1Nl
bGVjdGlvbjoKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6Q2Fy
ZXRTZWxlY3Rpb246CisgICAgICAgIHJlY3QgPSBzZWxlY3Rpb24oKS0+YWJzb2x1dGVDYXJldEJv
dW5kcygpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246OlJhbmdl
U2VsZWN0aW9uOgorICAgICAgICByZWN0ID0gcmV2ZWFsRXh0ZW50ID8gVmlzaWJsZVBvc2l0aW9u
KHNlbGVjdGlvbigpLT5leHRlbnQoKSkuYWJzb2x1dGVDYXJldEJvdW5kcygpIDogZW5jbG9zaW5n
SW50UmVjdChzZWxlY3Rpb25Cb3VuZHMoZmFsc2UpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQog
CiAgICAgUG9zaXRpb24gc3RhcnQgPSBzZWxlY3Rpb24oKS0+c3RhcnQoKTsKICAgICBBU1NFUlQo
c3RhcnQubm9kZSgpKTsKICAgICBpZiAoc3RhcnQubm9kZSgpICYmIHN0YXJ0Lm5vZGUoKS0+cmVu
ZGVyZXIoKSkgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIG9ubHkgaGFuZGxlcyBzY3Jv
bGxpbmcgdGhlIHN0YXJ0Q29udGFpbmVyJ3MgbGF5ZXIsIGJ1dAotICAgICAgICAvLyB0aGUgc2Vs
ZWN0aW9uIHJlY3QgY291bGQgaW50ZXJzZWN0IG1vcmUgdGhhbiBqdXN0IHRoYXQuIAorICAgICAg
ICAvLyB0aGUgc2VsZWN0aW9uIHJlY3QgY291bGQgaW50ZXJzZWN0IG1vcmUgdGhhbiBqdXN0IHRo
YXQuCiAgICAgICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNDc5OTg5OT4uCiAgICAgICAgIGlm
IChSZW5kZXJMYXllciogbGF5ZXIgPSBzdGFydC5ub2RlKCktPnJlbmRlcmVyKCktPmVuY2xvc2lu
Z0xheWVyKCkpCiAgICAgICAgICAgICBsYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShyZWN0LCBm
YWxzZSwgYWxpZ25tZW50LCBhbGlnbm1lbnQpOwpAQCAtMTMxMyw0NiArMTMwNyw0NiBAQCB2b2lk
IEZyYW1lOjpjbGVhclRpbWVycygpCiBSZW5kZXJTdHlsZSAqRnJhbWU6OnN0eWxlRm9yU2VsZWN0
aW9uU3RhcnQoTm9kZSAqJm5vZGVUb1JlbW92ZSkgY29uc3QKIHsKICAgICBub2RlVG9SZW1vdmUg
PSAwOwotICAgIAorCiAgICAgaWYgKHNlbGVjdGlvbigpLT5pc05vbmUoKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgCisKICAgICBQb3NpdGlvbiBwb3MgPSBzZWxlY3Rpb24oKS0+c2VsZWN0aW9u
KCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBpZiAoIXBvcy5pc0NhbmRp
ZGF0ZSgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBOb2RlICpub2RlID0gcG9zLm5vZGUoKTsK
ICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAwOwotICAgIAorCiAgICAgaWYgKCFtX3R5
cGluZ1N0eWxlKQogICAgICAgICByZXR1cm4gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKLSAg
ICAKKwogICAgIFJlZlB0cjxFbGVtZW50PiBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVh
dGVFbGVtZW50KHNwYW5UYWcsIGZhbHNlKTsKLSAgICAKKwogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwogICAgIFN0cmluZyBzdHlsZVRleHQgPSBtX3R5cGluZ1N0eWxlLT5jc3NUZXh0KCkgKyAi
IGRpc3BsYXk6IGlubGluZSI7CiAgICAgc3R5bGVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVB
dHRyLCBzdHlsZVRleHQuaW1wbCgpLCBlYyk7Ci0gICAgQVNTRVJUKGVjID09IDApOwotICAgIAor
ICAgIEFTU0VSVCghZWMpOworCiAgICAgc3R5bGVFbGVtZW50LT5hcHBlbmRDaGlsZChkb2N1bWVu
dCgpLT5jcmVhdGVFZGl0aW5nVGV4dE5vZGUoIiIpLCBlYyk7Ci0gICAgQVNTRVJUKGVjID09IDAp
OwotICAgIAorICAgIEFTU0VSVCghZWMpOworCiAgICAgbm9kZS0+cGFyZW50Tm9kZSgpLT5hcHBl
bmRDaGlsZChzdHlsZUVsZW1lbnQsIGVjKTsKLSAgICBBU1NFUlQoZWMgPT0gMCk7Ci0gICAgCi0g
ICAgbm9kZVRvUmVtb3ZlID0gc3R5bGVFbGVtZW50LmdldCgpOyAgICAKKyAgICBBU1NFUlQoIWVj
KTsKKworICAgIG5vZGVUb1JlbW92ZSA9IHN0eWxlRWxlbWVudC5nZXQoKTsKICAgICByZXR1cm4g
c3R5bGVFbGVtZW50LT5yZW5kZXJlcigpID8gc3R5bGVFbGVtZW50LT5yZW5kZXJlcigpLT5zdHls
ZSgpIDogMDsKIH0KIAogdm9pZCBGcmFtZTo6c2V0U2VsZWN0aW9uRnJvbU5vbmUoKQogewotICAg
IC8vIFB1dCBhIGNhcmV0IGluc2lkZSB0aGUgYm9keSBpZiB0aGUgZW50aXJlIGZyYW1lIGlzIGVk
aXRhYmxlIChlaXRoZXIgdGhlIAorICAgIC8vIFB1dCBhIGNhcmV0IGluc2lkZSB0aGUgYm9keSBp
ZiB0aGUgZW50aXJlIGZyYW1lIGlzIGVkaXRhYmxlIChlaXRoZXIgdGhlCiAgICAgLy8gZW50aXJl
IFdlYlZpZXcgaXMgZWRpdGFibGUgb3IgZGVzaWduTW9kZSBpcyBvbiBmb3IgdGhpcyBkb2N1bWVu
dCkuCiAgICAgRG9jdW1lbnQgKmRvYyA9IGRvY3VtZW50KCk7CiAgICAgYm9vbCBjYXJldEJyb3dz
aW5nID0gc2V0dGluZ3MoKSAmJiBzZXR0aW5ncygpLT5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwog
ICAgIGlmICghc2VsZWN0aW9uKCktPmlzTm9uZSgpIHx8ICEoaXNDb250ZW50RWRpdGFibGUoKSB8
fCBjYXJldEJyb3dzaW5nKSkKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIE5vZGUq
IG5vZGUgPSBkb2MtPmRvY3VtZW50RWxlbWVudCgpOwogICAgIHdoaWxlIChub2RlICYmICFub2Rl
LT5oYXNUYWdOYW1lKGJvZHlUYWcpKQogICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0
Tm9kZSgpOwpAQCAtMTM3NSwxMCArMTM2OSwxMCBAQCBib29sIEZyYW1lOjpmaW5kU3RyaW5nKGNv
bnN0IFN0cmluZyYgdGFyZ2V0LCBib29sIGZvcndhcmQsIGJvb2wgY2FzZUZsYWcsIGJvb2wgdwog
ewogICAgIGlmICh0YXJnZXQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
CisKICAgICBpZiAoZXhjbHVkZUZyb21UZXh0U2VhcmNoKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAKKwogICAgIC8vIFN0YXJ0IGZyb20gYW4gZWRnZSBvZiB0aGUgc2VsZWN0aW9uLCBp
ZiB0aGVyZSdzIGEgc2VsZWN0aW9uIHRoYXQncyBub3QgaW4gc2hhZG93IGNvbnRlbnQuIFdoaWNo
IGVkZ2UKICAgICAvLyBpcyB1c2VkIGRlcGVuZHMgb24gd2hldGhlciB3ZSdyZSBzZWFyY2hpbmcg
Zm9yd2FyZCBvciBiYWNrd2FyZCwgYW5kIHdoZXRoZXIgc3RhcnRJblNlbGVjdGlvbiBpcyBzZXQu
CiAgICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShyYW5nZU9mQ29udGVudHMoZG9jdW1lbnQo
KSkpOwpAQCAtMTQxOSw3ICsxNDEzLDcgQEAgYm9vbCBGcmFtZTo6ZmluZFN0cmluZyhjb25zdCBT
dHJpbmcmIHRhcmdldCwgYm9vbCBmb3J3YXJkLCBib29sIGNhc2VGbGFnLCBib29sIHcKIAogICAg
ICAgICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdl
dCwgZm9yd2FyZCwgY2FzZUZsYWcpOwogICAgIH0KLSAgICAKKwogICAgIEV4Y2VwdGlvbkNvZGUg
ZXhjZXB0aW9uID0gMDsKIAogICAgIC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGluIHRoZSBzaGFk
b3cgdHJlZSwgc2VhcmNoIGluIG1haW4gY29udGVudCBmb2xsb3dpbmcgdGhlIHNoYWRvdyB0cmVl
LgpAQCAtMTQzMiw3ICsxNDI2LDcgQEAgYm9vbCBGcmFtZTo6ZmluZFN0cmluZyhjb25zdCBTdHJp
bmcmIHRhcmdldCwgYm9vbCBmb3J3YXJkLCBib29sIGNhc2VGbGFnLCBib29sIHcKIAogICAgICAg
ICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwg
Zm9yd2FyZCwgY2FzZUZsYWcpOwogICAgIH0KLSAgICAKKwogICAgIGlmICghZWRpdG9yKCktPmlu
c2lkZVZpc2libGVBcmVhKHJlc3VsdFJhbmdlLmdldCgpKSkgewogICAgICAgICByZXN1bHRSYW5n
ZSA9IGVkaXRvcigpLT5uZXh0VmlzaWJsZVJhbmdlKHJlc3VsdFJhbmdlLmdldCgpLCB0YXJnZXQs
IGZvcndhcmQsIGNhc2VGbGFnLCB3cmFwRmxhZyk7CiAgICAgICAgIGlmICghcmVzdWx0UmFuZ2Up
CkBAIC0xNDYxLDkgKzE0NTUsOSBAQCB1bnNpZ25lZCBGcmFtZTo6bWFya0FsbE1hdGNoZXNGb3JU
ZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBib29sIGNhc2VGbGFnLCB1bnNpZwogewogICAgIGlm
ICh0YXJnZXQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKKwogICAgIFJlZlB0
cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpKTsKLSAgICAK
KwogICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uID0gMDsKICAgICB1bnNpZ25lZCBtYXRjaENv
dW50ID0gMDsKICAgICBkbyB7CkBAIC0xNDc2LDcgKzE0NzAsNyBAQCB1bnNpZ25lZCBGcmFtZTo6
bWFya0FsbE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBib29sIGNhc2VGbGFn
LCB1bnNpZwogICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0QWZ0ZXIocmVzdWx0UmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpLCBleGNlcHRpb24pOwog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8g
QSBub24tY29sbGFwc2VkIHJlc3VsdCByYW5nZSBjYW4gaW4gc29tZSBmdW5reSB3aGl0ZXNwYWNl
IGNhc2VzIHN0aWxsIG5vdAogICAgICAgICAvLyBhZHZhbmNlIHRoZSByYW5nZSdzIHN0YXJ0IHBv
c2l0aW9uICg0NTA5MzI4KS4gQnJlYWsgdG8gYXZvaWQgaW5maW5pdGUgbG9vcC4KICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIG5ld1N0YXJ0ID0gZW5kVmlzaWJsZVBvc2l0aW9uKHJlc3VsdFJhbmdl
LmdldCgpLCBET1dOU1RSRUFNKTsKQEAgLTE0ODgsMTggKzE0ODIsMTggQEAgdW5zaWduZWQgRnJh
bWU6Om1hcmtBbGxNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgYm9vbCBjYXNl
RmxhZywgdW5zaWcKICAgICAgICAgICAgICsrbWF0Y2hDb3VudDsKICAgICAgICAgICAgIGRvY3Vt
ZW50KCktPmFkZE1hcmtlcihyZXN1bHRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlRleHRN
YXRjaCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gU3RvcCBsb29raW5nIGlm
IHdlIGhpdCB0aGUgc3BlY2lmaWVkIGxpbWl0LiBBIGxpbWl0IG9mIDAgbWVhbnMgbm8gbGltaXQu
CiAgICAgICAgIGlmIChsaW1pdCA+IDAgJiYgbWF0Y2hDb3VudCA+PSBsaW1pdCkKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAKKwogICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQo
KSwgbmV3U3RhcnQpOwogICAgICAgICBOb2RlKiBzaGFkb3dUcmVlUm9vdCA9IHNlYXJjaFJhbmdl
LT5zaGFkb3dUcmVlUm9vdE5vZGUoKTsKICAgICAgICAgaWYgKHNlYXJjaFJhbmdlLT5jb2xsYXBz
ZWQoZXhjZXB0aW9uKSAmJiBzaGFkb3dUcmVlUm9vdCkKICAgICAgICAgICAgIHNlYXJjaFJhbmdl
LT5zZXRFbmQoc2hhZG93VHJlZVJvb3QsIHNoYWRvd1RyZWVSb290LT5jaGlsZE5vZGVDb3VudCgp
LCBleGNlcHRpb24pOwogICAgIH0gd2hpbGUgKHRydWUpOwotICAgIAotICAgIC8vIERvIGEgImZh
a2UiIHBhaW50IGluIG9yZGVyIHRvIGV4ZWN1dGUgdGhlIGNvZGUgdGhhdCBjb21wdXRlcyB0aGUg
cmVuZGVyZWQgcmVjdCBmb3IgCisKKyAgICAvLyBEbyBhICJmYWtlIiBwYWludCBpbiBvcmRlciB0
byBleGVjdXRlIHRoZSBjb2RlIHRoYXQgY29tcHV0ZXMgdGhlIHJlbmRlcmVkIHJlY3QgZm9yCiAg
ICAgLy8gZWFjaCB0ZXh0IG1hdGNoLgogICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOwog
ICAgIGlmIChtX3ZpZXcgJiYgY29udGVudFJlbmRlcmVyKCkpIHsKQEAgLTE1MTEsNyArMTUwNSw3
IEBAIHVuc2lnbmVkIEZyYW1lOjptYXJrQWxsTWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0
YXJnZXQsIGJvb2wgY2FzZUZsYWcsIHVuc2lnCiAgICAgICAgICAgICBtX3ZpZXctPnBhaW50Q29u
dGVudHMoJmNvbnRleHQsIHZpc2libGVSZWN0KTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwog
ICAgIHJldHVybiBtYXRjaENvdW50OwogfQogCkBAIC0xNTI0LDcgKzE1MTgsNyBAQCB2b2lkIEZy
YW1lOjpzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wgZmxhZykKIHsKICAg
ICBpZiAoZmxhZyA9PSBtX2hpZ2hsaWdodFRleHRNYXRjaGVzKQogICAgICAgICByZXR1cm47Ci0g
ICAgCisKICAgICBtX2hpZ2hsaWdodFRleHRNYXRjaGVzID0gZmxhZzsKICAgICBkb2N1bWVudCgp
LT5yZXBhaW50TWFya2VycyhEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKIH0KQEAgLTE1NTMs
NyArMTU0Nyw3IEBAIERPTVdpbmRvdyogRnJhbWU6OmRvbVdpbmRvdygpIGNvbnN0CiAKIHZvaWQg
RnJhbWU6OmNsZWFyRm9ybWVyRE9NV2luZG93KERPTVdpbmRvdyogd2luZG93KQogewotICAgIG1f
bGl2ZUZvcm1lcldpbmRvd3MucmVtb3ZlKHdpbmRvdyk7ICAgIAorICAgIG1fbGl2ZUZvcm1lcldp
bmRvd3MucmVtb3ZlKHdpbmRvdyk7CiB9CiAKIFBhZ2UqIEZyYW1lOjpwYWdlKCkgY29uc3QKQEAg
LTE2MTksNyArMTYxMyw3IEBAIHZvaWQgRnJhbWU6OnVuZm9jdXNXaW5kb3coKQogewogICAgIGlm
ICghcGFnZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICAvLyBJZiB3ZSdyZSBhIHRv
cCBsZXZlbCB3aW5kb3csIGRlYWN0aXZhdGUgdGhlIHdpbmRvdy4KICAgICBpZiAoIXRyZWUoKS0+
cGFyZW50KCkpCiAgICAgICAgIHBhZ2UoKS0+Y2hyb21lKCktPnVuZm9jdXMoKTsKQEAgLTE2ODAs
MTQgKzE2NzQsMTMgQEAgdm9pZCBGcmFtZTo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGJvb2wKICAgICAgICAgLy8gb2xkU2Vs
ZWN0aW9uIG1heSBubyBsb25nZXIgYmUgaW4gdGhlIGRvY3VtZW50LgogICAgICAgICBpZiAoY2xv
c2VUeXBpbmcgJiYgb2xkU2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgJiYgb2xkU2VsZWN0
aW9uLnN0YXJ0KCkubm9kZSgpICYmIG9sZFNlbGVjdGlvbi5zdGFydCgpLm5vZGUoKS0+aW5Eb2N1
bWVudCgpKSB7CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gb2xkU3RhcnQob2xkU2VsZWN0
aW9uLnZpc2libGVTdGFydCgpKTsKLSAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gb2xkQWRq
YWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQob2xkU3RhcnQsIExlZnRX
b3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKG9sZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRh
cnkpKTsgICAKKyAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gb2xkQWRqYWNlbnRXb3JkcyA9
IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQob2xkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5k
YXJ5KSwgZW5kT2ZXb3JkKG9sZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKICAgICAg
ICAgICAgIGlmIChvbGRBZGphY2VudFdvcmRzICE9IG5ld0FkamFjZW50V29yZHMpIHsKICAgICAg
ICAgICAgICAgICBpZiAoaXNDb250aW51b3VzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkgewogICAg
ICAgICAgICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGVkU2VudGVuY2UgPSBW
aXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZTZW50ZW5jZShvbGRTdGFydCksIGVuZE9mU2VudGVuY2Uo
b2xkU3RhcnQpKTsKICAgICAgICAgICAgICAgICAgICAgZWRpdG9yKCktPm1hcmtNaXNzcGVsbGlu
Z3NBbmRCYWRHcmFtbWFyKG9sZEFkamFjZW50V29yZHMsIG9sZFNlbGVjdGVkU2VudGVuY2UgIT0g
bmV3U2VsZWN0ZWRTZW50ZW5jZSwgb2xkU2VsZWN0ZWRTZW50ZW5jZSk7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAg
ZWRpdG9yKCktPm1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKG9sZEFkamFjZW50V29yZHMs
IGZhbHNlLCBvbGRBZGphY2VudFdvcmRzKTsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIApAQCAtMTcyMiwxNSArMTcxNSwxNSBAQCBWaXNpYmxlUG9zaXRpb24g
RnJhbWU6OnZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50JiBmcmFtZVBvaW50
KQogICAgICAgICB2aXNpYmxlUG9zID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5vZGUsIDAp
KTsKICAgICByZXR1cm4gdmlzaWJsZVBvczsKIH0KLSAgICAKKwogRG9jdW1lbnQqIEZyYW1lOjpk
b2N1bWVudEF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQoteyAgCi0gICAgaWYgKCF2aWV3
KCkpIAoreworICAgIGlmICghdmlldygpKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKKwogICAg
IEludFBvaW50IHB0ID0gdmlldygpLT53aW5kb3dUb0NvbnRlbnRzKHBvaW50KTsKICAgICBIaXRU
ZXN0UmVzdWx0IHJlc3VsdCA9IEhpdFRlc3RSZXN1bHQocHQpOwotICAgIAorCiAgICAgaWYgKGNv
bnRlbnRSZW5kZXJlcigpKQogICAgICAgICByZXN1bHQgPSBldmVudEhhbmRsZXIoKS0+aGl0VGVz
dFJlc3VsdEF0UG9pbnQocHQsIGZhbHNlKTsKICAgICByZXR1cm4gcmVzdWx0LmlubmVyTm9kZSgp
ID8gcmVzdWx0LmlubmVyTm9kZSgpLT5kb2N1bWVudCgpIDogMDsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGFnZS9GcmFtZS5oIGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKaW5kZXggMGE0NGE2ZC4uNjUy
MjY5YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKKysrIGIvV2ViQ29yZS9wYWdl
L0ZyYW1lLmgKQEAgLTM3LDggKzM3LDggQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2lu
Y2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVkZSAiU2Nyb2xs
QmVoYXZpb3IuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiU2Ny
b2xsQmVoYXZpb3IuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiVGV4dEdyYW51bGFyaXR5LmgiCiAKQEAgLTYyLDMxNSArNjIsMzE1IEBAIHR5cGVkZWYgc3Ry
dWN0IEhCSVRNQVBfXyogSEJJVE1BUDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKLWNsYXNzIEVkaXRvcjsKLWNsYXNzIEV2ZW50SGFu
ZGxlcjsKLWNsYXNzIEZyYW1lTG9hZGVyOwotY2xhc3MgRnJhbWVMb2FkZXJDbGllbnQ7Ci1jbGFz
cyBGcmFtZVRyZWU7Ci1jbGFzcyBGcmFtZVZpZXc7Ci1jbGFzcyBIVE1MRnJhbWVPd25lckVsZW1l
bnQ7Ci1jbGFzcyBIVE1MVGFibGVDZWxsRWxlbWVudDsKLWNsYXNzIFJlZ3VsYXJFeHByZXNzaW9u
OwotY2xhc3MgUmVuZGVyUGFydDsKLWNsYXNzIFNjcmlwdENvbnRyb2xsZXI7Ci1jbGFzcyBTZWxl
Y3Rpb25Db250cm9sbGVyOwotY2xhc3MgU2V0dGluZ3M7Ci1jbGFzcyBWaXNpYmxlU2VsZWN0aW9u
OwotY2xhc3MgV2lkZ2V0OworICAgIGNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwor
ICAgIGNsYXNzIEVkaXRvcjsKKyAgICBjbGFzcyBFdmVudEhhbmRsZXI7CisgICAgY2xhc3MgRnJh
bWVMb2FkZXI7CisgICAgY2xhc3MgRnJhbWVMb2FkZXJDbGllbnQ7CisgICAgY2xhc3MgRnJhbWVU
cmVlOworICAgIGNsYXNzIEZyYW1lVmlldzsKKyAgICBjbGFzcyBIVE1MRnJhbWVPd25lckVsZW1l
bnQ7CisgICAgY2xhc3MgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ7CisgICAgY2xhc3MgUmVndWxhckV4
cHJlc3Npb247CisgICAgY2xhc3MgUmVuZGVyUGFydDsKKyAgICBjbGFzcyBTY3JpcHRDb250cm9s
bGVyOworICAgIGNsYXNzIFNlbGVjdGlvbkNvbnRyb2xsZXI7CisgICAgY2xhc3MgU2V0dGluZ3M7
CisgICAgY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKKyAgICBjbGFzcyBXaWRnZXQ7CiAKICNpZiBG
UkFNRV9MT0FEU19VU0VSX1NUWUxFU0hFRVQKICAgICBjbGFzcyBVc2VyU3R5bGVTaGVldExvYWRl
cjsKICNlbmRpZgogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgVGltZXI7CisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFRpbWVyOwogCi1jbGFzcyBGcmFtZSA6IHB1YmxpYyBS
ZWZDb3VudGVkPEZyYW1lPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RnJhbWU+
IGNyZWF0ZShQYWdlKiBwYWdlLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwg
RnJhbWVMb2FkZXJDbGllbnQqIGNsaWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgRnJhbWUocGFnZSwgb3duZXJFbGVtZW50LCBjbGllbnQpKTsKLSAgICB9Ci0gICAgdm9p
ZCBzZXRWaWV3KFBhc3NSZWZQdHI8RnJhbWVWaWV3Pik7Ci0gICAgfkZyYW1lKCk7Ci0gICAgCi0g
ICAgdm9pZCBpbml0KCk7CisgICAgY2xhc3MgRnJhbWUgOiBwdWJsaWMgUmVmQ291bnRlZDxGcmFt
ZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RnJhbWU+IGNyZWF0
ZShQYWdlKiBwYWdlLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgRnJhbWVM
b2FkZXJDbGllbnQqIGNsaWVudCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBGcmFtZShwYWdlLCBvd25lckVsZW1lbnQsIGNsaWVudCkpOworICAgICAgICB9Cisg
ICAgICAgIHZvaWQgc2V0VmlldyhQYXNzUmVmUHRyPEZyYW1lVmlldz4pOworICAgICAgICB+RnJh
bWUoKTsKIAotICAgIFBhZ2UqIHBhZ2UoKSBjb25zdDsKLSAgICBIVE1MRnJhbWVPd25lckVsZW1l
bnQqIG93bmVyRWxlbWVudCgpIGNvbnN0OworICAgICAgICB2b2lkIGluaXQoKTsKIAotICAgIHZv
aWQgcGFnZURlc3Ryb3llZCgpOwotICAgIHZvaWQgZGlzY29ubmVjdE93bmVyRWxlbWVudCgpOwor
ICAgICAgICBQYWdlKiBwYWdlKCkgY29uc3Q7CisgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVu
dCogb3duZXJFbGVtZW50KCkgY29uc3Q7CiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25z
dDsKLSAgICBGcmFtZVZpZXcqIHZpZXcoKSBjb25zdDsKKyAgICAgICAgdm9pZCBwYWdlRGVzdHJv
eWVkKCk7CisgICAgICAgIHZvaWQgZGlzY29ubmVjdE93bmVyRWxlbWVudCgpOwogCi0gICAgdm9p
ZCBzZXRET01XaW5kb3coRE9NV2luZG93Kik7Ci0gICAgRE9NV2luZG93KiBkb21XaW5kb3coKSBj
b25zdDsKLSAgICB2b2lkIGNsZWFyRm9ybWVyRE9NV2luZG93KERPTVdpbmRvdyopOworICAgICAg
ICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdDsKKyAgICAgICAgRnJhbWVWaWV3KiB2aWV3KCkg
Y29uc3Q7CiAKLSAgICBFZGl0b3IqIGVkaXRvcigpIGNvbnN0OwotICAgIEV2ZW50SGFuZGxlciog
ZXZlbnRIYW5kbGVyKCkgY29uc3Q7Ci0gICAgRnJhbWVMb2FkZXIqIGxvYWRlcigpIGNvbnN0Owot
ICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbigpIGNvbnN0OwotICAgIEZyYW1lVHJl
ZSogdHJlZSgpIGNvbnN0OwotICAgIEFuaW1hdGlvbkNvbnRyb2xsZXIqIGFuaW1hdGlvbigpIGNv
bnN0OwotICAgIFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdCgpOworICAgICAgICB2b2lkIHNldERP
TVdpbmRvdyhET01XaW5kb3cqKTsKKyAgICAgICAgRE9NV2luZG93KiBkb21XaW5kb3coKSBjb25z
dDsKKyAgICAgICAgdm9pZCBjbGVhckZvcm1lckRPTVdpbmRvdyhET01XaW5kb3cqKTsKIAotICAg
IFJlbmRlclZpZXcqIGNvbnRlbnRSZW5kZXJlcigpIGNvbnN0OyAvLyByb290IHJlbmRlcmVyIGZv
ciB0aGUgZG9jdW1lbnQgY29udGFpbmVkIGluIHRoaXMgZnJhbWUKLSAgICBSZW5kZXJQYXJ0KiBv
d25lclJlbmRlcmVyKCkgY29uc3Q7IC8vIHJlbmRlcmVyIGZvciB0aGUgZWxlbWVudCB0aGF0IGNv
bnRhaW5zIHRoaXMgZnJhbWUKLSAgICAKLSAgICBib29sIGlzRGlzY29ubmVjdGVkKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRJc0Rpc2Nvbm5lY3RlZChib29sKTsKLSAgICBib29sIGV4Y2x1ZGVGcm9t
VGV4dFNlYXJjaCgpIGNvbnN0OwotICAgIHZvaWQgc2V0RXhjbHVkZUZyb21UZXh0U2VhcmNoKGJv
b2wpOworICAgICAgICBFZGl0b3IqIGVkaXRvcigpIGNvbnN0OworICAgICAgICBFdmVudEhhbmRs
ZXIqIGV2ZW50SGFuZGxlcigpIGNvbnN0OworICAgICAgICBGcmFtZUxvYWRlciogbG9hZGVyKCkg
Y29uc3Q7CisgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbigpIGNvbnN0Owor
ICAgICAgICBGcmFtZVRyZWUqIHRyZWUoKSBjb25zdDsKKyAgICAgICAgQW5pbWF0aW9uQ29udHJv
bGxlciogYW5pbWF0aW9uKCkgY29uc3Q7CisgICAgICAgIFNjcmlwdENvbnRyb2xsZXIqIHNjcmlw
dCgpOwogCi0gICAgdm9pZCBjcmVhdGVWaWV3KGNvbnN0IEludFNpemUmLCBjb25zdCBDb2xvciYs
IGJvb2wsIGNvbnN0IEludFNpemUgJiwgYm9vbCwKLSAgICAgICAgICAgICAgICAgICAgU2Nyb2xs
YmFyTW9kZSA9IFNjcm9sbGJhckF1dG8sIFNjcm9sbGJhck1vZGUgPSBTY3JvbGxiYXJBdXRvKTsK
KyAgICAgICAgUmVuZGVyVmlldyogY29udGVudFJlbmRlcmVyKCkgY29uc3Q7IC8vIHJvb3QgcmVu
ZGVyZXIgZm9yIHRoZSBkb2N1bWVudCBjb250YWluZWQgaW4gdGhpcyBmcmFtZQorICAgICAgICBS
ZW5kZXJQYXJ0KiBvd25lclJlbmRlcmVyKCkgY29uc3Q7IC8vIHJlbmRlcmVyIGZvciB0aGUgZWxl
bWVudCB0aGF0IGNvbnRhaW5zIHRoaXMgZnJhbWUKIAorICAgICAgICBib29sIGlzRGlzY29ubmVj
dGVkKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0SXNEaXNjb25uZWN0ZWQoYm9vbCk7CisgICAg
ICAgIGJvb2wgZXhjbHVkZUZyb21UZXh0U2VhcmNoKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0
RXhjbHVkZUZyb21UZXh0U2VhcmNoKGJvb2wpOwogCi1wcml2YXRlOgotICAgIEZyYW1lKFBhZ2Uq
LCBIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBGcmFtZUxvYWRlckNsaWVudCopOwotICAgIAotLy8g
PT09IHVuZGVjaWRlZCwgd291bGQgbGlrZSB0byBjb25zaWRlciBtb3ZpbmcgdG8gYW5vdGhlciBj
bGFzcworICAgICAgICB2b2lkIGNyZWF0ZVZpZXcoY29uc3QgSW50U2l6ZSYsIGNvbnN0IENvbG9y
JiwgYm9vbCwgY29uc3QgSW50U2l6ZSAmLCBib29sLAorICAgICAgICAgICAgICAgICAgICAgICAg
U2Nyb2xsYmFyTW9kZSA9IFNjcm9sbGJhckF1dG8sIFNjcm9sbGJhck1vZGUgPSBTY3JvbGxiYXJB
dXRvKTsKIAotcHVibGljOgotICAgIHN0YXRpYyBGcmFtZSogZnJhbWVGb3JXaWRnZXQoY29uc3Qg
V2lkZ2V0Kik7CiAKLSAgICBTZXR0aW5ncyogc2V0dGluZ3MoKSBjb25zdDsgLy8gY2FuIGJlIE5V
TEwKKyAgICBwcml2YXRlOgorICAgICAgICBGcmFtZShQYWdlKiwgSFRNTEZyYW1lT3duZXJFbGVt
ZW50KiwgRnJhbWVMb2FkZXJDbGllbnQqKTsKIAotI2lmIEZSQU1FX0xPQURTX1VTRVJfU1RZTEVT
SEVFVAotICAgIHZvaWQgc2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihjb25zdCBLVVJMJik7Ci0g
ICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXREYXRhKTsK
LSNlbmRpZgorICAgIC8vID09PSB1bmRlY2lkZWQsIHdvdWxkIGxpa2UgdG8gY29uc2lkZXIgbW92
aW5nIHRvIGFub3RoZXIgY2xhc3MKIAotICAgIHZvaWQgc2V0UHJpbnRpbmcoYm9vbCBwcmludGlu
ZywgZmxvYXQgbWluUGFnZVdpZHRoLCBmbG9hdCBtYXhQYWdlV2lkdGgsIGJvb2wgYWRqdXN0Vmll
d1NpemUpOworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEZyYW1lKiBmcmFtZUZvcldpZGdl
dChjb25zdCBXaWRnZXQqKTsKIAotICAgIGJvb2wgaW5WaWV3U291cmNlTW9kZSgpIGNvbnN0Owot
ICAgIHZvaWQgc2V0SW5WaWV3U291cmNlTW9kZShib29sID0gdHJ1ZSk7CisgICAgICAgIFNldHRp
bmdzKiBzZXR0aW5ncygpIGNvbnN0OyAvLyBjYW4gYmUgTlVMTAogCi0gICAgdm9pZCBrZWVwQWxp
dmUoKTsgLy8gVXNlZCB0byBrZWVwIHRoZSBmcmFtZSBhbGl2ZSB3aGVuIHJ1bm5pbmcgYSBzY3Jp
cHQgdGhhdCBtaWdodCBkZXN0cm95IGl0LgotI2lmbmRlZiBOREVCVUcKLSAgICBzdGF0aWMgdm9p
ZCBjYW5jZWxBbGxLZWVwQWxpdmUoKTsKLSNlbmRpZgorICAgICNpZiBGUkFNRV9MT0FEU19VU0VS
X1NUWUxFU0hFRVQKKyAgICAgICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0
IEtVUkwmKTsKKyAgICAgICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHN0
eWxlU2hlZXREYXRhKTsKKyAgICAjZW5kaWYKIAotICAgIHZvaWQgc2V0RG9jdW1lbnQoUGFzc1Jl
ZlB0cjxEb2N1bWVudD4pOworICAgICAgICB2b2lkIHNldFByaW50aW5nKGJvb2wgcHJpbnRpbmcs
IGZsb2F0IG1pblBhZ2VXaWR0aCwgZmxvYXQgbWF4UGFnZVdpZHRoLCBib29sIGFkanVzdFZpZXdT
aXplKTsKIAotICAgIHZvaWQgY2xlYXJUaW1lcnMoKTsKLSAgICBzdGF0aWMgdm9pZCBjbGVhclRp
bWVycyhGcmFtZVZpZXcqLCBEb2N1bWVudCopOworICAgICAgICBib29sIGluVmlld1NvdXJjZU1v
ZGUoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRJblZpZXdTb3VyY2VNb2RlKGJvb2wgPSB0cnVl
KTsKIAotICAgIHZvaWQgc2V0TmVlZHNSZWFwcGx5U3R5bGVzKCk7Ci0gICAgYm9vbCBuZWVkc1Jl
YXBwbHlTdHlsZXMoKSBjb25zdDsKLSAgICB2b2lkIHJlYXBwbHlTdHlsZXMoKTsKKyAgICAgICAg
dm9pZCBrZWVwQWxpdmUoKTsgLy8gVXNlZCB0byBrZWVwIHRoZSBmcmFtZSBhbGl2ZSB3aGVuIHJ1
bm5pbmcgYSBzY3JpcHQgdGhhdCBtaWdodCBkZXN0cm95IGl0LgorICAgICNpZm5kZWYgTkRFQlVH
CisgICAgICAgIHN0YXRpYyB2b2lkIGNhbmNlbEFsbEtlZXBBbGl2ZSgpOworICAgICNlbmRpZgog
Ci0gICAgU3RyaW5nIGRvY3VtZW50VHlwZVN0cmluZygpIGNvbnN0OworICAgICAgICB2b2lkIHNl
dERvY3VtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnQ+KTsKIAotICAgIC8vIFRoaXMgbWV0aG9kIC0t
IGFuZCB0aGUgY29ycmVzcG9uZGluZyBsaXN0IG9mIGZvcm1lciBET00gd2luZG93cyAtLQotICAg
IC8vIHNob3VsZCBtb3ZlIG9udG8gU2NyaXB0Q29udHJvbGxlcgotICAgIHZvaWQgY2xlYXJET01X
aW5kb3coKTsKKyAgICAgICAgdm9pZCBjbGVhclRpbWVycygpOworICAgICAgICBzdGF0aWMgdm9p
ZCBjbGVhclRpbWVycyhGcmFtZVZpZXcqLCBEb2N1bWVudCopOwogCi0gICAgU3RyaW5nIGRpc3Bs
YXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBzdHIpIGNvbnN0IAotICAg
IHsKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50KCkgPyBkb2N1bWVudCgpLT5kaXNwbGF5U3RyaW5n
TW9kaWZpZWRCeUVuY29kaW5nKHN0cikgOiBzdHI7Ci0gICAgfQorICAgICAgICB2b2lkIHNldE5l
ZWRzUmVhcHBseVN0eWxlcygpOworICAgICAgICBib29sIG5lZWRzUmVhcHBseVN0eWxlcygpIGNv
bnN0OworICAgICAgICB2b2lkIHJlYXBwbHlTdHlsZXMoKTsKIAotcHJpdmF0ZToKLSAgICB2b2lk
IGxpZmVTdXBwb3J0VGltZXJGaXJlZChUaW1lcjxGcmFtZT4qKTsKKyAgICAgICAgU3RyaW5nIGRv
Y3VtZW50VHlwZVN0cmluZygpIGNvbnN0OwogCi0vLyA9PT0gdG8gYmUgbW92ZWQgaW50byBGcmFt
ZVZpZXcKKyAgICAgICAgLy8gVGhpcyBtZXRob2QgLS0gYW5kIHRoZSBjb3JyZXNwb25kaW5nIGxp
c3Qgb2YgZm9ybWVyIERPTSB3aW5kb3dzIC0tCisgICAgICAgIC8vIHNob3VsZCBtb3ZlIG9udG8g
U2NyaXB0Q29udHJvbGxlcgorICAgICAgICB2b2lkIGNsZWFyRE9NV2luZG93KCk7CiAKLXB1Ymxp
YzogCi0gICAgdm9pZCBzZXRab29tRmFjdG9yKGZsb2F0IHNjYWxlLCBib29sIGlzVGV4dE9ubHkp
OwotICAgIGZsb2F0IHpvb21GYWN0b3IoKSBjb25zdDsKLSAgICBib29sIGlzWm9vbUZhY3RvclRl
eHRPbmx5KCkgY29uc3Q7Ci0gICAgYm9vbCBzaG91bGRBcHBseVRleHRab29tKCkgY29uc3Q7Ci0g
ICAgYm9vbCBzaG91bGRBcHBseVBhZ2Vab29tKCkgY29uc3Q7Ci0gICAgZmxvYXQgcGFnZVpvb21G
YWN0b3IoKSBjb25zdCB7IHJldHVybiBzaG91bGRBcHBseVBhZ2Vab29tKCkgPyB6b29tRmFjdG9y
KCkgOiAxLjBmOyB9Ci0gICAgZmxvYXQgdGV4dFpvb21GYWN0b3IoKSBjb25zdCB7IHJldHVybiBz
aG91bGRBcHBseVRleHRab29tKCkgPyB6b29tRmFjdG9yKCkgOiAxLjBmOyB9CisgICAgICAgIFN0
cmluZyBkaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKGNvbnN0IFN0cmluZyYgc3RyKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQoKSA/IGRvY3VtZW50
KCktPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2Rpbmcoc3RyKSA6IHN0cjsKKyAgICAgICAg
fQogCi0vLyA9PT0gdG8gYmUgbW92ZWQgaW50byBDaHJvbWUKKyAgICBwcml2YXRlOgorICAgICAg
ICB2b2lkIGxpZmVTdXBwb3J0VGltZXJGaXJlZChUaW1lcjxGcmFtZT4qKTsKIAotcHVibGljOgot
ICAgIHZvaWQgZm9jdXNXaW5kb3coKTsKLSAgICB2b2lkIHVuZm9jdXNXaW5kb3coKTsKLSAgICBi
b29sIHNob3VsZENsb3NlKFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyVmVjdG9yKiBhbHRlcm5hdGVF
dmVudExpc3RlbmVycyA9IDApOwotICAgIHZvaWQgc2NoZWR1bGVDbG9zZSgpOworICAgIC8vID09
PSB0byBiZSBtb3ZlZCBpbnRvIEZyYW1lVmlldwogCi0gICAgdm9pZCBzZXRKU1N0YXR1c0JhclRl
eHQoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBzZXRKU0RlZmF1bHRTdGF0dXNCYXJUZXh0KGNv
bnN0IFN0cmluZyYpOwotICAgIFN0cmluZyBqc1N0YXR1c0JhclRleHQoKSBjb25zdDsKLSAgICBT
dHJpbmcganNEZWZhdWx0U3RhdHVzQmFyVGV4dCgpIGNvbnN0OworICAgIHB1YmxpYzoKKyAgICAg
ICAgdm9pZCBzZXRab29tRmFjdG9yKGZsb2F0IHNjYWxlLCBib29sIGlzVGV4dE9ubHkpOworICAg
ICAgICBmbG9hdCB6b29tRmFjdG9yKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNab29tRmFjdG9y
VGV4dE9ubHkoKSBjb25zdDsKKyAgICAgICAgYm9vbCBzaG91bGRBcHBseVRleHRab29tKCkgY29u
c3Q7CisgICAgICAgIGJvb2wgc2hvdWxkQXBwbHlQYWdlWm9vbSgpIGNvbnN0OworICAgICAgICBm
bG9hdCBwYWdlWm9vbUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIHNob3VsZEFwcGx5UGFnZVpvb20o
KSA/IHpvb21GYWN0b3IoKSA6IDEuMGY7IH0KKyAgICAgICAgZmxvYXQgdGV4dFpvb21GYWN0b3Io
KSBjb25zdCB7IHJldHVybiBzaG91bGRBcHBseVRleHRab29tKCkgPyB6b29tRmFjdG9yKCkgOiAx
LjBmOyB9CiAKLS8vID09PSB0byBiZSBtb3ZlZCBpbnRvIEVkaXRvcgorICAgIC8vID09PSB0byBi
ZSBtb3ZlZCBpbnRvIENocm9tZQogCi1wdWJsaWM6Ci0gICAgU3RyaW5nIHNlbGVjdGVkVGV4dCgp
IGNvbnN0OyAgCi0gICAgYm9vbCBmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIGJvb2wgZm9yd2Fy
ZCwgYm9vbCBjYXNlRmxhZywgYm9vbCB3cmFwRmxhZywgYm9vbCBzdGFydEluU2VsZWN0aW9uKTsK
KyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgZm9jdXNXaW5kb3coKTsKKyAgICAgICAgdm9pZCB1
bmZvY3VzV2luZG93KCk7CisgICAgICAgIGJvb2wgc2hvdWxkQ2xvc2UoUmVnaXN0ZXJlZEV2ZW50
TGlzdGVuZXJWZWN0b3IqIGFsdGVybmF0ZUV2ZW50TGlzdGVuZXJzID0gMCk7CisgICAgICAgIHZv
aWQgc2NoZWR1bGVDbG9zZSgpOwogCi0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbWFyaygp
IGNvbnN0OyAvLyBNYXJrLCB0byBiZSB1c2VkIGFzIGVtYWNzIHVzZXMgaXQuCi0gICAgdm9pZCBz
ZXRNYXJrKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKKyAgICAgICAgdm9pZCBzZXRKU1N0YXR1
c0JhclRleHQoY29uc3QgU3RyaW5nJik7CisgICAgICAgIHZvaWQgc2V0SlNEZWZhdWx0U3RhdHVz
QmFyVGV4dChjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgU3RyaW5nIGpzU3RhdHVzQmFyVGV4dCgp
IGNvbnN0OworICAgICAgICBTdHJpbmcganNEZWZhdWx0U3RhdHVzQmFyVGV4dCgpIGNvbnN0Owog
Ci0gICAgdm9pZCBjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiog
LCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvblVuc3BlY2lmaWVkKTsKLSAgICBTdHJpbmcgc2VsZWN0
aW9uU3RhcnRTdHlsZVByb3BlcnR5VmFsdWUoaW50IHN0eWxlUHJvcGVydHlJRCkgY29uc3Q7Ci0g
ICAgdm9pZCBhcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKSBjb25zdDsKLSAgICB2b2lk
IHJlbW92ZUVkaXRpbmdTdHlsZUZyb21Cb2R5RWxlbWVudCgpIGNvbnN0OwotICAgIHZvaWQgYXBw
bHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQoRWxlbWVudCopIGNvbnN0OwotICAgIHZvaWQgcmVtb3Zl
RWRpdGluZ1N0eWxlRnJvbUVsZW1lbnQoRWxlbWVudCopIGNvbnN0OworICAgIC8vID09PSB0byBi
ZSBtb3ZlZCBpbnRvIEVkaXRvcgogCi0gICAgSW50UmVjdCBmaXJzdFJlY3RGb3JSYW5nZShSYW5n
ZSopIGNvbnN0OwotICAgIAotICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGJvb2wgY2xvc2VUeXBpbmcpOwotICAg
IGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNl
bGVjdGlvbiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBFQWZmaW5pdHks
IGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0OworICAgIHB1YmxpYzoKKyAgICAgICAgU3RyaW5n
IHNlbGVjdGVkVGV4dCgpIGNvbnN0OworICAgICAgICBib29sIGZpbmRTdHJpbmcoY29uc3QgU3Ry
aW5nJiwgYm9vbCBmb3J3YXJkLCBib29sIGNhc2VGbGFnLCBib29sIHdyYXBGbGFnLCBib29sIHN0
YXJ0SW5TZWxlY3Rpb24pOwogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlRm9yU2VsZWN0aW9uU3Rh
cnQoTm9kZSomIG5vZGVUb1JlbW92ZSkgY29uc3Q7CisgICAgICAgIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIG1hcmsoKSBjb25zdDsgLy8gTWFyaywgdG8gYmUgdXNlZCBhcyBlbWFjcyB1c2VzIGl0
LgorICAgICAgICB2b2lkIHNldE1hcmsoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCi0gICAg
dW5zaWduZWQgbWFya0FsbE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYsIGJvb2wgY2FzZUZs
YWcsIHVuc2lnbmVkIGxpbWl0KTsKLSAgICBib29sIG1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxp
Z2h0ZWQoKSBjb25zdDsKLSAgICB2b2lkIHNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0
ZWQoYm9vbCBmbGFnKTsKKyAgICAgICAgdm9pZCBjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoQ1NT
U3R5bGVEZWNsYXJhdGlvbiogLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvblVuc3BlY2lmaWVkKTsK
KyAgICAgICAgU3RyaW5nIHNlbGVjdGlvblN0YXJ0U3R5bGVQcm9wZXJ0eVZhbHVlKGludCBzdHls
ZVByb3BlcnR5SUQpIGNvbnN0OworICAgICAgICB2b2lkIGFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5
RWxlbWVudCgpIGNvbnN0OworICAgICAgICB2b2lkIHJlbW92ZUVkaXRpbmdTdHlsZUZyb21Cb2R5
RWxlbWVudCgpIGNvbnN0OworICAgICAgICB2b2lkIGFwcGx5RWRpdGluZ1N0eWxlVG9FbGVtZW50
KEVsZW1lbnQqKSBjb25zdDsKKyAgICAgICAgdm9pZCByZW1vdmVFZGl0aW5nU3R5bGVGcm9tRWxl
bWVudChFbGVtZW50KikgY29uc3Q7CiAKLSAgICBQYXNzUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbj4gc2VsZWN0aW9uQ29tcHV0ZWRTdHlsZShOb2RlKiYgbm9kZVRvUmVtb3ZlKSBj
b25zdDsKKyAgICAgICAgSW50UmVjdCBmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSopIGNvbnN0Owog
Ci0gICAgdm9pZCB0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoRWxlbWVudCopOwotICAgIHZvaWQg
dGV4dEZpZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50Kik7Ci0gICAgdm9pZCB0ZXh0RGlkQ2hhbmdl
SW5UZXh0RmllbGQoRWxlbWVudCopOwotICAgIGJvb2wgZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2
ZW50KEVsZW1lbnQqLCBLZXlib2FyZEV2ZW50Kik7Ci0gICAgdm9pZCB0ZXh0V2lsbEJlRGVsZXRl
ZEluVGV4dEZpZWxkKEVsZW1lbnQqIGlucHV0KTsKLSAgICB2b2lkIHRleHREaWRDaGFuZ2VJblRl
eHRBcmVhKEVsZW1lbnQqKTsKKyAgICAgICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9u
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZyk7
CisgICAgICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIG9sZFNlbGVjdGlvbiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBF
QWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0OwogCi0gICAgRHJhZ0ltYWdlUmVm
IGRyYWdJbWFnZUZvclNlbGVjdGlvbigpOwotICAgIAotLy8gPT09IHRvIGJlIG1vdmVkIGludG8g
U2VsZWN0aW9uQ29udHJvbGxlcgorICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rp
b25TdGFydChOb2RlKiYgbm9kZVRvUmVtb3ZlKSBjb25zdDsKIAotcHVibGljOgotICAgIFRleHRH
cmFudWxhcml0eSBzZWxlY3Rpb25HcmFudWxhcml0eSgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2Vs
ZWN0aW9uR3JhbnVsYXJpdHkoVGV4dEdyYW51bGFyaXR5KTsKKyAgICAgICAgdW5zaWduZWQgbWFy
a0FsbE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYsIGJvb2wgY2FzZUZsYWcsIHVuc2lnbmVk
IGxpbWl0KTsKKyAgICAgICAgYm9vbCBtYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCkg
Y29uc3Q7CisgICAgICAgIHZvaWQgc2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChi
b29sIGZsYWcpOwogCi0gICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYpIGNvbnN0OwotICAgIGJvb2wgc2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mKSBjb25zdDsKLSAgICB2b2lkIGNsZWFyQ2FyZXRSZWN0SWZOZWVk
ZWQoKTsKLSAgICB2b2lkIHNldEZvY3VzZWROb2RlSWZOZWVkZWQoKTsKLSAgICB2b2lkIHNlbGVj
dGlvbkxheW91dENoYW5nZWQoKTsKLSAgICB2b2lkIG5vdGlmeVJlbmRlcmVyT2ZTZWxlY3Rpb25D
aGFuZ2UoYm9vbCB1c2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24+IHNlbGVjdGlvbkNvbXB1dGVkU3R5bGUoTm9kZSomIG5vZGVUb1Jl
bW92ZSkgY29uc3Q7CiAKLSAgICB2b2lkIGludmFsaWRhdGVTZWxlY3Rpb24oKTsKKyAgICAgICAg
dm9pZCB0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoRWxlbWVudCopOworICAgICAgICB2b2lkIHRl
eHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVudCopOworICAgICAgICB2b2lkIHRleHREaWRDaGFu
Z2VJblRleHRGaWVsZChFbGVtZW50Kik7CisgICAgICAgIGJvb2wgZG9UZXh0RmllbGRDb21tYW5k
RnJvbUV2ZW50KEVsZW1lbnQqLCBLZXlib2FyZEV2ZW50Kik7CisgICAgICAgIHZvaWQgdGV4dFdp
bGxCZURlbGV0ZWRJblRleHRGaWVsZChFbGVtZW50KiBpbnB1dCk7CisgICAgICAgIHZvaWQgdGV4
dERpZENoYW5nZUluVGV4dEFyZWEoRWxlbWVudCopOwogCi0gICAgdm9pZCBzZXRDYXJldFZpc2li
bGUoYm9vbCA9IHRydWUpOwotICAgIHZvaWQgcGFpbnRDYXJldChHcmFwaGljc0NvbnRleHQqLCBp
bnQgdHgsIGludCB0eSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIGNvbnN0OyAgCi0gICAgdm9p
ZCBwYWludERyYWdDYXJldChHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwgY29uc3Qg
SW50UmVjdCYgY2xpcFJlY3QpIGNvbnN0OworICAgICAgICBEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdl
Rm9yU2VsZWN0aW9uKCk7CiAKLSAgICBib29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3Q7IC8v
IGlmIHRydWUsIGV2ZXJ5dGhpbmcgaW4gZnJhbWUgaXMgZWRpdGFibGUKKyAgICAvLyA9PT0gdG8g
YmUgbW92ZWQgaW50byBTZWxlY3Rpb25Db250cm9sbGVyCiAKLSAgICB2b2lkIHVwZGF0ZVNlY3Vy
ZUtleWJvYXJkRW50cnlJZkFjdGl2ZSgpOworICAgIHB1YmxpYzoKKyAgICAgICAgVGV4dEdyYW51
bGFyaXR5IHNlbGVjdGlvbkdyYW51bGFyaXR5KCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0U2Vs
ZWN0aW9uR3JhbnVsYXJpdHkoVGV4dEdyYW51bGFyaXR5KTsKIAotICAgIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKiB0eXBpbmdTdHlsZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHlwaW5nU3R5
bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qKTsKLSAgICB2b2lkIGNsZWFyVHlwaW5nU3R5
bGUoKTsKKyAgICAgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpIGNvbnN0OworICAgICAgICBib29sIHNob3VsZERlbGV0ZVNlbGVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJikgY29uc3Q7CisgICAgICAgIHZvaWQgY2xlYXJDYXJldFJlY3RJ
Zk5lZWRlZCgpOworICAgICAgICB2b2lkIHNldEZvY3VzZWROb2RlSWZOZWVkZWQoKTsKKyAgICAg
ICAgdm9pZCBzZWxlY3Rpb25MYXlvdXRDaGFuZ2VkKCk7CisgICAgICAgIHZvaWQgbm90aWZ5UmVu
ZGVyZXJPZlNlbGVjdGlvbkNoYW5nZShib29sIHVzZXJUcmlnZ2VyZWQpOwogCi0gICAgRmxvYXRS
ZWN0IHNlbGVjdGlvbkJvdW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29u
c3Q7Ci0gICAgdm9pZCBzZWxlY3Rpb25UZXh0UmVjdHMoVmVjdG9yPEZsb2F0UmVjdD4mLCBib29s
IGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29uc3Q7CisgICAgICAgIHZvaWQgaW52YWxp
ZGF0ZVNlbGVjdGlvbigpOwogCi0gICAgSFRNTEZvcm1FbGVtZW50KiBjdXJyZW50Rm9ybSgpIGNv
bnN0OworICAgICAgICB2b2lkIHNldENhcmV0VmlzaWJsZShib29sID0gdHJ1ZSk7CisgICAgICAg
IHZvaWQgcGFpbnRDYXJldChHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwgY29uc3Qg
SW50UmVjdCYgY2xpcFJlY3QpIGNvbnN0OworICAgICAgICB2b2lkIHBhaW50RHJhZ0NhcmV0KEdy
YXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkg
Y29uc3Q7CiAKLSAgICB2b2lkIHJldmVhbFNlbGVjdGlvbihjb25zdCBTY3JvbGxBbGlnbm1lbnQm
ID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlcklmTmVlZGVkLCBib29sIHJldmVhbEV4dGVu
dCA9IGZhbHNlKTsKLSAgICB2b2lkIHNldFNlbGVjdGlvbkZyb21Ob25lKCk7CisgICAgICAgIGJv
b2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdDsgLy8gaWYgdHJ1ZSwgZXZlcnl0aGluZyBpbiBm
cmFtZSBpcyBlZGl0YWJsZQogCi0gICAgdm9pZCBzZXRVc2VTZWN1cmVLZXlib2FyZEVudHJ5KGJv
b2wpOworICAgICAgICB2b2lkIHVwZGF0ZVNlY3VyZUtleWJvYXJkRW50cnlJZkFjdGl2ZSgpOwog
Ci1wcml2YXRlOgotICAgIHZvaWQgY2FyZXRCbGlua1RpbWVyRmlyZWQoVGltZXI8RnJhbWU+Kik7
CisgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiB0eXBpbmdTdHlsZSgpIGNvbnN0
OworICAgICAgICB2b2lkIHNldFR5cGluZ1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
Kik7CisgICAgICAgIHZvaWQgY2xlYXJUeXBpbmdTdHlsZSgpOwogCi1wdWJsaWM6Ci0gICAgU2Vs
ZWN0aW9uQ29udHJvbGxlciogZHJhZ0NhcmV0Q29udHJvbGxlcigpIGNvbnN0OworICAgICAgICBG
bG9hdFJlY3Qgc2VsZWN0aW9uQm91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVl
KSBjb25zdDsKKyAgICAgICAgdm9pZCBzZWxlY3Rpb25UZXh0UmVjdHMoVmVjdG9yPEZsb2F0UmVj
dD4mLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29uc3Q7CiAKLSAgICBTdHJp
bmcgc2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxsKFJlZ3VsYXJFeHByZXNzaW9uKiwgSFRNTFRhYmxl
Q2VsbEVsZW1lbnQqKTsKLSAgICBTdHJpbmcgc2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVudChj
b25zdCBWZWN0b3I8U3RyaW5nPiYgbGFiZWxzLCBFbGVtZW50Kik7Ci0gICAgU3RyaW5nIG1hdGNo
TGFiZWxzQWdhaW5zdEVsZW1lbnQoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhYmVscywgRWxlbWVu
dCopOwotICAgIAotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludChj
b25zdCBJbnRQb2ludCYgZnJhbWVQb2ludCk7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50QXRQb2lu
dChjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpOworICAgICAgICBIVE1MRm9ybUVsZW1lbnQq
IGN1cnJlbnRGb3JtKCkgY29uc3Q7CiAKLSNpZiBQTEFURk9STShNQUMpCisgICAgICAgIHZvaWQg
cmV2ZWFsU2VsZWN0aW9uKGNvbnN0IFNjcm9sbEFsaWdubWVudCYgPSBTY3JvbGxBbGlnbm1lbnQ6
OmFsaWduQ2VudGVySWZOZWVkZWQsIGJvb2wgcmV2ZWFsRXh0ZW50ID0gZmFsc2UpOworICAgICAg
ICB2b2lkIHNldFNlbGVjdGlvbkZyb21Ob25lKCk7CiAKLS8vID09PSB1bmRlY2lkZWQsIHdvdWxk
IGxpa2UgdG8gY29uc2lkZXIgbW92aW5nIHRvIGFub3RoZXIgY2xhc3MKKyAgICAgICAgdm9pZCBz
ZXRVc2VTZWN1cmVLZXlib2FyZEVudHJ5KGJvb2wpOwogCi1wdWJsaWM6Ci0gICAgTlNTdHJpbmcq
IHNlYXJjaEZvck5TTGFiZWxzQWJvdmVDZWxsKFJlZ3VsYXJFeHByZXNzaW9uKiwgSFRNTFRhYmxl
Q2VsbEVsZW1lbnQqKTsKLSAgICBOU1N0cmluZyogc2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVu
dChOU0FycmF5KiBsYWJlbHMsIEVsZW1lbnQqKTsKLSAgICBOU1N0cmluZyogbWF0Y2hMYWJlbHNB
Z2FpbnN0RWxlbWVudChOU0FycmF5KiBsYWJlbHMsIEVsZW1lbnQqKTsKKyAgICBwcml2YXRlOgor
ICAgICAgICB2b2lkIGNhcmV0QmxpbmtUaW1lckZpcmVkKFRpbWVyPEZyYW1lPiopOwogCi0jaWYg
RU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQotICAgIE5TTXV0YWJsZURpY3Rpb25hcnkqIGRhc2hi
b2FyZFJlZ2lvbnNEaWN0aW9uYXJ5KCk7Ci0jZW5kaWYKKyAgICBwdWJsaWM6CisgICAgICAgIFNl
bGVjdGlvbkNvbnRyb2xsZXIqIGRyYWdDYXJldENvbnRyb2xsZXIoKSBjb25zdDsKIAotICAgIE5T
SW1hZ2UqIHNlbGVjdGlvbkltYWdlKGJvb2wgZm9yY2VCbGFja1RleHQgPSBmYWxzZSkgY29uc3Q7
Ci0gICAgTlNJbWFnZSogc25hcHNob3REcmFnSW1hZ2UoTm9kZSosIE5TUmVjdCogaW1hZ2VSZWN0
LCBOU1JlY3QqIGVsZW1lbnRSZWN0KSBjb25zdDsKLSAgICBOU0ltYWdlKiBub2RlSW1hZ2UoTm9k
ZSopIGNvbnN0OworICAgICAgICBTdHJpbmcgc2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxsKFJlZ3Vs
YXJFeHByZXNzaW9uKiwgSFRNTFRhYmxlQ2VsbEVsZW1lbnQqKTsKKyAgICAgICAgU3RyaW5nIHNl
YXJjaEZvckxhYmVsc0JlZm9yZUVsZW1lbnQoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhYmVscywg
RWxlbWVudCopOworICAgICAgICBTdHJpbmcgbWF0Y2hMYWJlbHNBZ2FpbnN0RWxlbWVudChjb25z
dCBWZWN0b3I8U3RyaW5nPiYgbGFiZWxzLCBFbGVtZW50Kik7CiAKLXByaXZhdGU6ICAgIAotICAg
IE5TSW1hZ2UqIGltYWdlRnJvbVJlY3QoTlNSZWN0KSBjb25zdDsKKyAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50JiBmcmFtZVBvaW50
KTsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50QXRQb2ludChjb25zdCBJbnRQb2ludCYgd2lu
ZG93UG9pbnQpOwogCi0vLyA9PT0gdG8gYmUgbW92ZWQgaW50byBFZGl0b3IKKyAgICAjaWYgUExB
VEZPUk0oTUFDKQogCi1wdWJsaWM6Ci0gICAgTlNEaWN0aW9uYXJ5KiBmb250QXR0cmlidXRlc0Zv
clNlbGVjdGlvblN0YXJ0KCkgY29uc3Q7Ci0gICAgTlNXcml0aW5nRGlyZWN0aW9uIGJhc2VXcml0
aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25zdDsKKyAgICAvLyA9PT0gdW5kZWNp
ZGVkLCB3b3VsZCBsaWtlIHRvIGNvbnNpZGVyIG1vdmluZyB0byBhbm90aGVyIGNsYXNzCiAKLSNl
bmRpZgorICAgIHB1YmxpYzoKKyAgICAgICAgTlNTdHJpbmcqIHNlYXJjaEZvck5TTGFiZWxzQWJv
dmVDZWxsKFJlZ3VsYXJFeHByZXNzaW9uKiwgSFRNTFRhYmxlQ2VsbEVsZW1lbnQqKTsKKyAgICAg
ICAgTlNTdHJpbmcqIHNlYXJjaEZvckxhYmVsc0JlZm9yZUVsZW1lbnQoTlNBcnJheSogbGFiZWxz
LCBFbGVtZW50Kik7CisgICAgICAgIE5TU3RyaW5nKiBtYXRjaExhYmVsc0FnYWluc3RFbGVtZW50
KE5TQXJyYXkqIGxhYmVscywgRWxlbWVudCopOwogCi0jaWYgUExBVEZPUk0oV0lOKQorICAgICNp
ZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCisgICAgICAgIE5TTXV0YWJsZURpY3Rpb25hcnkq
IGRhc2hib2FyZFJlZ2lvbnNEaWN0aW9uYXJ5KCk7CisgICAgI2VuZGlmCiAKLXB1YmxpYzoKLSAg
ICAvLyBGSVhNRSAtIFdlIHNob3VsZCBoYXZlIGEgc2luZ2xlIHZlcnNpb24gb2Ygbm9kZUltYWdl
IGluc3RlYWQgb2YgdXNpbmcgcGxhdGZvcm0gdHlwZXMuCi0gICAgSEJJVE1BUCBub2RlSW1hZ2Uo
Tm9kZSopIGNvbnN0OworICAgICAgICBOU0ltYWdlKiBzZWxlY3Rpb25JbWFnZShib29sIGZvcmNl
QmxhY2tUZXh0ID0gZmFsc2UpIGNvbnN0OworICAgICAgICBOU0ltYWdlKiBzbmFwc2hvdERyYWdJ
bWFnZShOb2RlKiwgTlNSZWN0KiBpbWFnZVJlY3QsIE5TUmVjdCogZWxlbWVudFJlY3QpIGNvbnN0
OworICAgICAgICBOU0ltYWdlKiBub2RlSW1hZ2UoTm9kZSopIGNvbnN0OwogCi0jZW5kaWYKKyAg
ICBwcml2YXRlOgorICAgICAgICBOU0ltYWdlKiBpbWFnZUZyb21SZWN0KE5TUmVjdCkgY29uc3Q7
CiAKLXByaXZhdGU6Ci0gICAgUGFnZSogbV9wYWdlOwotICAgIG11dGFibGUgRnJhbWVUcmVlIG1f
dHJlZU5vZGU7Ci0gICAgbXV0YWJsZSBGcmFtZUxvYWRlciBtX2xvYWRlcjsKKyAgICAvLyA9PT0g
dG8gYmUgbW92ZWQgaW50byBFZGl0b3IKIAotICAgIG11dGFibGUgUmVmUHRyPERPTVdpbmRvdz4g
bV9kb21XaW5kb3c7Ci0gICAgSGFzaFNldDxET01XaW5kb3cqPiBtX2xpdmVGb3JtZXJXaW5kb3dz
OworICAgIHB1YmxpYzoKKyAgICAgICAgTlNEaWN0aW9uYXJ5KiBmb250QXR0cmlidXRlc0ZvclNl
bGVjdGlvblN0YXJ0KCkgY29uc3Q7CisgICAgICAgIE5TV3JpdGluZ0RpcmVjdGlvbiBiYXNlV3Jp
dGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3Q7CiAKLSAgICBIVE1MRnJhbWVP
d25lckVsZW1lbnQqIG1fb3duZXJFbGVtZW50OwotICAgIFJlZlB0cjxGcmFtZVZpZXc+IG1fdmll
dzsKLSAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jOworICAgICNlbmRpZgogCi0gICAgU2NyaXB0
Q29udHJvbGxlciBtX3NjcmlwdDsKKyAgICAjaWYgUExBVEZPUk0oV0lOKQogCi0gICAgU3RyaW5n
IG1fa2pzU3RhdHVzQmFyVGV4dDsKLSAgICBTdHJpbmcgbV9ranNEZWZhdWx0U3RhdHVzQmFyVGV4
dDsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIEZJWE1FIC0gV2Ugc2hvdWxkIGhhdmUgYSBzaW5n
bGUgdmVyc2lvbiBvZiBub2RlSW1hZ2UgaW5zdGVhZCBvZiB1c2luZyBwbGF0Zm9ybSB0eXBlcy4K
KyAgICAgICAgSEJJVE1BUCBub2RlSW1hZ2UoTm9kZSopIGNvbnN0OwogCi0gICAgZmxvYXQgbV96
b29tRmFjdG9yOworICAgICNlbmRpZgogCi0gICAgVGV4dEdyYW51bGFyaXR5IG1fc2VsZWN0aW9u
R3JhbnVsYXJpdHk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUGFnZSogbV9wYWdlOworICAgICAg
ICBtdXRhYmxlIEZyYW1lVHJlZSBtX3RyZWVOb2RlOworICAgICAgICBtdXRhYmxlIEZyYW1lTG9h
ZGVyIG1fbG9hZGVyOwogCi0gICAgbXV0YWJsZSBTZWxlY3Rpb25Db250cm9sbGVyIG1fc2VsZWN0
aW9uQ29udHJvbGxlcjsKLSAgICBtdXRhYmxlIFZpc2libGVTZWxlY3Rpb24gbV9tYXJrOwotICAg
IFRpbWVyPEZyYW1lPiBtX2NhcmV0QmxpbmtUaW1lcjsKLSAgICBtdXRhYmxlIEVkaXRvciBtX2Vk
aXRvcjsKLSAgICBtdXRhYmxlIEV2ZW50SGFuZGxlciBtX2V2ZW50SGFuZGxlcjsKLSAgICBtdXRh
YmxlIEFuaW1hdGlvbkNvbnRyb2xsZXIgbV9hbmltYXRpb25Db250cm9sbGVyOworICAgICAgICBt
dXRhYmxlIFJlZlB0cjxET01XaW5kb3c+IG1fZG9tV2luZG93OworICAgICAgICBIYXNoU2V0PERP
TVdpbmRvdyo+IG1fbGl2ZUZvcm1lcldpbmRvd3M7CiAKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IG1fdHlwaW5nU3R5bGU7CisgICAgICAgIEhUTUxGcmFtZU93bmVyRWxl
bWVudCogbV9vd25lckVsZW1lbnQ7CisgICAgICAgIFJlZlB0cjxGcmFtZVZpZXc+IG1fdmlldzsK
KyAgICAgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvYzsKIAotICAgIFRpbWVyPEZyYW1lPiBtX2xp
ZmVTdXBwb3J0VGltZXI7CisgICAgICAgIFNjcmlwdENvbnRyb2xsZXIgbV9zY3JpcHQ7CiAKLSAg
ICBib29sIG1fY2FyZXRWaXNpYmxlOwotICAgIGJvb2wgbV9jYXJldFBhaW50OwotICAgIAotICAg
IGJvb2wgbV9oaWdobGlnaHRUZXh0TWF0Y2hlczsKLSAgICBib29sIG1faW5WaWV3U291cmNlTW9k
ZTsKLSAgICBib29sIG1fbmVlZHNSZWFwcGx5U3R5bGVzOwotICAgIGJvb2wgbV9pc0Rpc2Nvbm5l
Y3RlZDsKLSAgICBib29sIG1fZXhjbHVkZUZyb21UZXh0U2VhcmNoOworICAgICAgICBTdHJpbmcg
bV9ranNTdGF0dXNCYXJUZXh0OworICAgICAgICBTdHJpbmcgbV9ranNEZWZhdWx0U3RhdHVzQmFy
VGV4dDsKIAotI2lmIEZSQU1FX0xPQURTX1VTRVJfU1RZTEVTSEVFVAotICAgIFVzZXJTdHlsZVNo
ZWV0TG9hZGVyKiBtX3VzZXJTdHlsZVNoZWV0TG9hZGVyOwotI2VuZGlmCisgICAgICAgIGZsb2F0
IG1fem9vbUZhY3RvcjsKKworICAgICAgICBUZXh0R3JhbnVsYXJpdHkgbV9zZWxlY3Rpb25HcmFu
dWxhcml0eTsKKworICAgICAgICBtdXRhYmxlIFNlbGVjdGlvbkNvbnRyb2xsZXIgbV9zZWxlY3Rp
b25Db250cm9sbGVyOworICAgICAgICBtdXRhYmxlIFZpc2libGVTZWxlY3Rpb24gbV9tYXJrOwor
ICAgICAgICBUaW1lcjxGcmFtZT4gbV9jYXJldEJsaW5rVGltZXI7CisgICAgICAgIG11dGFibGUg
RWRpdG9yIG1fZWRpdG9yOworICAgICAgICBtdXRhYmxlIEV2ZW50SGFuZGxlciBtX2V2ZW50SGFu
ZGxlcjsKKyAgICAgICAgbXV0YWJsZSBBbmltYXRpb25Db250cm9sbGVyIG1fYW5pbWF0aW9uQ29u
dHJvbGxlcjsKKworICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1f
dHlwaW5nU3R5bGU7CisKKyAgICAgICAgVGltZXI8RnJhbWU+IG1fbGlmZVN1cHBvcnRUaW1lcjsK
KworICAgICAgICBib29sIG1fY2FyZXRWaXNpYmxlOworICAgICAgICBib29sIG1fY2FyZXRQYWlu
dDsKKworICAgICAgICBib29sIG1faGlnaGxpZ2h0VGV4dE1hdGNoZXM7CisgICAgICAgIGJvb2wg
bV9pblZpZXdTb3VyY2VNb2RlOworICAgICAgICBib29sIG1fbmVlZHNSZWFwcGx5U3R5bGVzOwor
ICAgICAgICBib29sIG1faXNEaXNjb25uZWN0ZWQ7CisgICAgICAgIGJvb2wgbV9leGNsdWRlRnJv
bVRleHRTZWFyY2g7CisKKyAgICAjaWYgRlJBTUVfTE9BRFNfVVNFUl9TVFlMRVNIRUVUCisgICAg
ICAgIFVzZXJTdHlsZVNoZWV0TG9hZGVyKiBtX3VzZXJTdHlsZVNoZWV0TG9hZGVyOworICAgICNl
bmRpZgogCi19OworICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="17735"
          type_id="1"
          status="+"
          setter="staikos"
    />
          </attachment>
      

    </bug>

</bugzilla>