<?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>183534</bug_id>
          
          <creation_ts>2018-03-09 15:54:13 -0800</creation_ts>
          <short_desc>[WebAuthn] Optimize LocalAuthenticator</short_desc>
          <delta_ts>2020-04-30 15:27:08 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>181943</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jiewen Tan">jiewen_tan</reporter>
          <assigned_to name="Jiewen Tan">jiewen_tan</assigned_to>
          <cc>alex.gaynor</cc>
    
    <cc>bfulgham</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>jonathan</cc>
    
    <cc>jschoi</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1405374</commentid>
    <comment_count>0</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-03-09 15:54:13 -0800</bug_when>
    <thetext>Optimize LocalAuthenticator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405375</commentid>
    <comment_count>1</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-03-09 15:56:33 -0800</bug_when>
    <thetext>Includes:
1) Optimize the nested callbacks.
2) Don&apos;t let authData throttle.
3) Test IDN of RP.ID.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1406607</commentid>
    <comment_count>2</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-03-14 22:28:46 -0700</bug_when>
    <thetext>4) Figure out a better way to pass variables to objc block in another thread.
5) Optimize threading.
6) Replace weak pointers with other mechanism as they don&apos;t work in another thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408230</commentid>
    <comment_count>3</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-03-21 17:02:30 -0700</bug_when>
    <thetext>7) Change little endian bytes (ARM and x86 default) to big endian as requested by the spec.
8) Better manage lifetime of LAContext passed around different threads. A solution could be all LAContext objects are stored in a map managed by LocalAuthenticator, and freed by callbacks happened in mainthread. That means using callOnMainThread to executing every callbacks. This will also resolve the WeakPtr issue.
9) Unify callbacks and use variant to handle exceptions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409599</commentid>
    <comment_count>4</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-03-27 11:47:27 -0700</bug_when>
    <thetext>10) Move constants from LocalAuthenticator.mm to a separate header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1450537</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-08-15 17:09:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/43357408&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1457992</commentid>
    <comment_count>6</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-09-08 20:57:04 -0700</bug_when>
    <thetext>Fixed 9) in Bug 189277.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462288</commentid>
    <comment_count>7</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-09-21 22:09:16 -0700</bug_when>
    <thetext>Fixed 1), 4), 5), 6), and 8) in Bug 189279.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491840</commentid>
    <comment_count>8</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-01-04 13:22:39 -0800</bug_when>
    <thetext>2) and 7) are fixed in Bug 193150.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620999</commentid>
    <comment_count>9</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-02-19 18:29:51 -0800</bug_when>
    <thetext>11) Consider using initWithBytesNoCopy with toNSData().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627660</commentid>
    <comment_count>10</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-03-08 22:03:43 -0700</bug_when>
    <thetext>12) Combine m_assertionResponses and m_existingCredentials.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627661</commentid>
    <comment_count>11</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-03-08 22:04:34 -0700</bug_when>
    <thetext>13) Find a better way of comparing credential id. Doing it with array seems fine given the list should be small.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632730</commentid>
    <comment_count>12</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-03-22 20:50:03 -0700</bug_when>
    <thetext>14) Invalidate the LAContext when LocalConnection is destroyed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643945</commentid>
    <comment_count>13</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-04-21 11:42:49 -0700</bug_when>
    <thetext>15) Sort credentials according to LRU before returning to UI clients.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646272</commentid>
    <comment_count>14</comment_count>
      <attachid>397752</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-04-27 15:42:04 -0700</bug_when>
    <thetext>Created attachment 397752
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647513</commentid>
    <comment_count>15</comment_count>
      <attachid>397752</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-30 13:03:48 -0700</bug_when>
    <thetext>Comment on attachment 397752
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647587</commentid>
    <comment_count>16</comment_count>
      <attachid>397752</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2020-04-30 15:22:13 -0700</bug_when>
    <thetext>Comment on attachment 397752
Patch

Thanks Brent for the r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647591</commentid>
    <comment_count>17</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-30 15:27:07 -0700</bug_when>
    <thetext>Committed r260970: &lt;https://trac.webkit.org/changeset/260970&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 397752.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397752</attachid>
            <date>2020-04-27 15:42:04 -0700</date>
            <delta_ts>2020-04-30 15:27:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-183534-20200427154203.patch</filename>
            <type>text/plain</type>
            <size>41980</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNjU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjM3YmIyNTc5OTlmYWFl
NmVkYmFiMjFlM2QxNmM5YWVhM2VmYzJmNS4uMDQ3N2M0ODFmMGE2NDk1MjQ3MmRhN2Y4YTYwYzQ4
OWQxODhiZmJhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDIwLTA0LTI3ICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhuXSBPcHRp
bWl6ZSBMb2NhbEF1dGhlbnRpY2F0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4MzUzNAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDMzNTc0MDg+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJl
ZCBieSBuZXcgQVBJIHRlc3RzLgorCisgICAgICAgICogZW4ubHByb2ovTG9jYWxpemFibGUuc3Ry
aW5nczoKKyAgICAgICAgKiBwbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmdldEFzc2VydGlvblRvdWNoSURQcm9tcHRUaXRsZSk6CisgICAgICAgIChXZWJD
b3JlOjpnZW5lcmljVG91Y2hJRFByb21wdFRpdGxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9Mb2Nh
bGl6ZWRTdHJpbmdzLmg6CisgICAgICAgIEltcHJvdmluZyB0aGUgTG9jYWxBdXRoZW50aWNhdGlv
biBkaWFsb2cgdGl0bGVzIGZvciBpT1MuCisKIDIwMjAtMDQtMjQgIFRvbW9raSBJbWFpICA8VG9t
b2tpLkltYWlAc29ueS5jb20+CiAKICAgICAgICAgW09wZW5TU0xdIEltcGxlbWVudCBXZWJDcnlw
dG8gQVBJcyBmb3IgSE1BQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA2YzdjMjk1NWYzNTFhZjY5MmYyNGU2ZDQ1ZWM4
YjE3NjM0NGViMGY1Li5hZTc4NDQyZjU5YjQyM2FkZjFiYTE0Mzg5YTkyMDkxYmVmODEwZDA0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDIwLTA0LTI3ICBKaWV3ZW4gVGFuICA8amlld2Vu
X3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhuXSBPcHRpbWl6ZSBMb2NhbEF1dGhl
bnRpY2F0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE4MzUzNAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDMzNTc0MDg+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRz
IHRoZSBmb2xsb3dpbmcgc21hbGwgb3B0aW1pemF0aW9uczoKKyAgICAgICAgMS4gUmVwbGFjaW5n
IGxvY2FsIGNvbnN0YW50cyB3aXRoIG9uZXMgZnJvbSBGaWRvQ29uc3RhbnRzLmg7CisgICAgICAg
IDIuIE1lcmdpbmcgbV9hc3NlcnRpb25SZXNwb25zZXMgYW5kIG1fZXhpc3RpbmdDcmVkZW50aWFs
cyBieSByZXBsYWNpbmcgSGFzaFNldCB3aXRoIFZlY3RvciBpbiBBdXRoZW50aWNhdG9yOjpPYnNl
cnZlcjo6c2VsZWN0QXNzZXJ0aW9uUmVzcG9uc2U7CisgICAgICAgIDMuIFVzaW5nIEJhc2U2NCBl
bmNvZGVkIHN0cmluZ3MgYXMgdGhlIGtleXMgb2YgdGhlIEhhc2hTZXQgaW4gcHJvZHVjZUhhc2hT
ZXQoKSBpbnN0ZWFkIG9mIHRoZSBvbGQgY2FzdGluZyBoYWNrOworICAgICAgICA0LiBJbnZhbGlk
aW5nIHRoZSBMQUNvbnRleHQgaW4gTG9jYWxDb25uZWN0aW9uOjp+TG9jYWxDb25uZWN0aW9uKCkg
c3VjaCB0aGF0IGFueSBkaXNwbGF5aW5nIExvY2FsQXV0aGVudGljYXRpb24gZGlhbG9ncyBjYW4g
YmUgZGlzbWlzc2VkIGFmdGVyIHRoZSBvYmplY3QgaXMgZGVzdHJveWVkOworICAgICAgICA1LiBT
b3J0aW5nIGV4aXN0aW5nIGNyZWRlbnRpYWxzIGFjY29yZGluZyB0byBMUlUgYmVmb3JlIHJldHVy
bmluZyB0byBVSSBjbGllbnRzOworICAgICAgICA2LiBJbXByb3ZpbmcgdGhlIExvY2FsQXV0aGVu
dGljYXRpb24gZGlhbG9nIHRpdGxlcyBmb3IgaU9TLgorCisgICAgICAgICogVUlQcm9jZXNzL1dl
YkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0b3IuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
QXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvck1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpBdXRoZW50aWNhdG9yTWFuYWdlcjo6c2VsZWN0QXNzZXJ0aW9uUmVzcG9uc2UpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRp
Y2F0b3IuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9j
YWxBdXRoZW50aWNhdG9yLm1tOgorICAgICAgICAoV2ViS2l0OjpMb2NhbEF1dGhlbnRpY2F0b3JJ
bnRlcm5hbDo6cHJvZHVjZUhhc2hTZXQpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbEF1dGhlbnRp
Y2F0b3JJbnRlcm5hbDo6dG9OU0RhdGEpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbEF1dGhlbnRp
Y2F0b3JJbnRlcm5hbDo6Z2V0RXhpc3RpbmdDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6
OkxvY2FsQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwpOgorICAgICAgICAoV2ViS2l0OjpM
b2NhbEF1dGhlbnRpY2F0b3I6OmNvbnRpbnVlTWFrZUNyZWRlbnRpYWxBZnRlclVzZXJWZXJpZmlj
YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpMb2NhbEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlv
bik6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsQXV0aGVudGljYXRvcjo6Y29udGludWVHZXRBc3Nl
cnRpb25BZnRlclVzZXJWZXJpZmljYXRpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9Db2NvYS9Mb2NhbENvbm5lY3Rpb24uaDoKKyAgICAgICAgKFdlYktpdDo6TG9j
YWxDb25uZWN0aW9uOjpmaWx0ZXJSZXNwb25zZXMgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9Mb2NhbENvbm5lY3Rpb24ubW06CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvcmU6OmJ1bmRsZU5hbWUpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbENvbm5l
Y3Rpb246On5Mb2NhbENvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpMb2NhbENvbm5lY3Rp
b246OnZlcmlmeVVzZXIpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbENvbm5lY3Rpb246OnZlcmlm
eVVzZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9Nb2NrL01vY2tMb2NhbENvbm5lY3Rpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
QXV0aGVudGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9uLm1tOgorICAgICAgICAoV2Vi
S2l0OjpNb2NrTG9jYWxDb25uZWN0aW9uOjp2ZXJpZnlVc2VyKToKKyAgICAgICAgKFdlYktpdDo6
TW9ja0xvY2FsQ29ubmVjdGlvbjo6ZmlsdGVyUmVzcG9uc2VzIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6TW9ja0xvY2FsQ29ubmVjdGlvbjo6dmVyaWZ5VXNlciBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0
b3IuY3BwOgorICAgICAgICAoV2ViS2l0OjpDdGFwQXV0aGVudGljYXRvcjo6Y29udGludWVHZXRB
c3NlcnRpb25BZnRlclJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAoV2ViS2l0OjpDdGFwQXV0
aGVudGljYXRvcjo6Y29udGludWVHZXROZXh0QXNzZXJ0aW9uQWZ0ZXJSZXNwb25zZVJlY2VpdmVk
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwQXV0aGVu
dGljYXRvci5oOgorCiAyMDIwLTA0LTI0ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2Vu
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgU1BJIGNsaWVudHMgdXNpbmcgZmFzdFNlcnZlclRydXN0
RXZhbHVhdGlvbkVuYWJsZWQgbmVlZCBTUEkgdG8gaW5mb3JtIHRoZW0gb2YgbW9kZXJuIFRMUyBu
ZWdvdGlhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZW4ubHByb2ovTG9jYWxpemFi
bGUuc3RyaW5ncyBiL1NvdXJjZS9XZWJDb3JlL2VuLmxwcm9qL0xvY2FsaXphYmxlLnN0cmluZ3MK
aW5kZXggNGM5MGE1NDM1Mzg2MzlmMGQ3MzIzNjIwNjc1MGZjODAzMGRhYTFiNS4uNzg0MTlkNTFl
YWNkYTg4NTA3NzFiZTc5MzJlNmYyNWM4N2VmNDY2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZW4ubHByb2ovTG9jYWxpemFibGUuc3RyaW5ncworKysgYi9Tb3VyY2UvV2ViQ29yZS9lbi5s
cHJvai9Mb2NhbGl6YWJsZS5zdHJpbmdzCkBAIC0yMzIsNiArMjMyLDkgQEAKIC8qIENvbnRpbnVl
ICovCiAiQ29udGludWUiID0gIkNvbnRpbnVlIjsKIAorLyogQ29udGludWUgd2l0aCBUb3VjaCBJ
RCAqLworIkNvbnRpbnVlIHdpdGggVG91Y2ggSUQuIiA9ICJDb250aW51ZSB3aXRoIFRvdWNoIElE
LiI7CisKIC8qIE1lZGlhIENvbnRyb2xzIGNvbnRleHQgbWVudSBpdGVtICovCiAiQ29udHJvbHMi
ID0gIkNvbnRyb2xzIjsKIApAQCAtODY4LDkgKzg3MSw2IEBACiAvKiBVbndhbnRlZCBzb2Z0d2Fy
ZSB3YXJuaW5nICovCiAiVGhpcyB3ZWJzaXRlIG1heSB0cnkgdG8gdHJpY2sgeW91IGludG8gaW5z
dGFsbGluZyBzb2Z0d2FyZSB0aGF0IGhhcm1zIHlvdXIgYnJvd3NpbmcgZXhwZXJpZW5jZSwgbGlr
ZSBjaGFuZ2luZyB5b3VyIHNldHRpbmdzIHdpdGhvdXQgeW91ciBwZXJtaXNzaW9uIG9yIHNob3dp
bmcgeW91IHVud2FudGVkIGFkcy4gT25jZSBpbnN0YWxsZWQsIGl0IG1heSBiZSBkaWZmaWN1bHQg
dG8gcmVtb3ZlLiIgPSAiVGhpcyB3ZWJzaXRlIG1heSB0cnkgdG8gdHJpY2sgeW91IGludG8gaW5z
dGFsbGluZyBzb2Z0d2FyZSB0aGF0IGhhcm1zIHlvdXIgYnJvd3NpbmcgZXhwZXJpZW5jZSwgbGlr
ZSBjaGFuZ2luZyB5b3VyIHNldHRpbmdzIHdpdGhvdXQgeW91ciBwZXJtaXNzaW9uIG9yIHNob3dp
bmcgeW91IHVud2FudGVkIGFkcy4gT25jZSBpbnN0YWxsZWQsIGl0IG1heSBiZSBkaWZmaWN1bHQg
dG8gcmVtb3ZlLiI7CiAKLS8qIFRoaXMgd2Vic2l0ZSB3b3VsZCBsaWtlIHRvIHVzZSBUb3VjaCBJ
RCAqLwotIlRoaXMgd2Vic2l0ZSB3b3VsZCBsaWtlIHRvIHVzZSBUb3VjaCBJRC4iID0gIlRoaXMg
d2Vic2l0ZSB3b3VsZCBsaWtlIHRvIHVzZSBUb3VjaCBJRC4iOwotCiAvKiBJbmZvcm1hdGl2ZSB0
ZXh0IGZvciByZXF1ZXN0aW5nIGNyb3NzLXNpdGUgY29va2llIGFuZCB3ZWJzaXRlIGRhdGEgYWNj
ZXNzLiAqLwogIlRoaXMgd2lsbCBhbGxvdyDigJwlQOKAnSB0byB0cmFjayB5b3VyIGFjdGl2aXR5
LiIgPSAiVGhpcyB3aWxsIGFsbG93IOKAnCVA4oCdIHRvIHRyYWNrIHlvdXIgYWN0aXZpdHkuIjsK
IApAQCAtODg5LDkgKzg4OSw2IEBACiAvKiBwcm9tcHQgc3RyaW5nIGluIGF1dGhlbnRpY2F0aW9u
IHBhbmVsICovCiAiVG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBtdXN0IGxvZyBpbiB0byB0aGlzIGFy
ZWEgb24gJUA6IiA9ICJUbyB2aWV3IHRoaXMgcGFnZSwgeW91IG11c3QgbG9nIGluIHRvIHRoaXMg
YXJlYSBvbiAlQDoiOwogCi0vKiBVc2UgVG91Y2ggSUQgdG8gc2lnbiBpbiB0byB0aGlzIHdlYnNp
dGUgKi8KLSJUb3VjaCBJRCB0byBzaWduIGluIHRvIHRoaXMgd2Vic2l0ZS4iID0gIlRvdWNoIElE
IHRvIHNpZ24gaW4gdG8gdGhpcyB3ZWJzaXRlLiI7Ci0KIC8qIFRyYW5zZm9ybWF0aW9ucyBjb250
ZXh0IHN1Yi1tZW51IGl0ZW0gKi8KICJUcmFuc2Zvcm1hdGlvbnMiID0gIlRyYW5zZm9ybWF0aW9u
cyI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvY2FsaXplZFN0cmlu
Z3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5jcHAKaW5k
ZXggYTkwZjg4MjM5ZWQ5MDc3NjcyMjg4MTViOTI2MTY3ODgxMjJjYTQ4Mi4uY2MzYWQ3Y2RlZjA1
YTc3NzM4ZDQ5Mzc0Y2Q1NDVhN2I0MTEzZWJmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vTG9jYWxpemVkU3RyaW5ncy5jcHAKQEAgLTEyMTAsNyArMTIxMCw2IEBAIFN0cmluZyB1bmFj
Y2VwdGFibGVUTFNDZXJ0aWZpY2F0ZSgpCiAjaWYgRU5BQkxFKFdFQl9BVVRITikKIC8vIE9uIG1h
Y09TLCBUb3VjaCBJRCBwcm9tcHQgaXMgbm90IGd1YXJhbnRlZWQgdG8gc2hvdyBvbiB0b3Agb2Yg
dGhlIFVJIGNsaWVudCwgYW5kIHRoZXJlZm9yZSBhZGRpdGlvbmFsCiAvLyBpbmZvcm1hdGlvbiBp
cyBwcm92aWRlZCB0byBoZWxwIHVzZXJzIHRvIG1ha2UgZGVjaXNpb25zLgotI2lmIFBMQVRGT1JN
KE1BQykKIFN0cmluZyBtYWtlQ3JlZGVudGlhbFRvdWNoSURQcm9tcHRUaXRsZShjb25zdCBTdHJp
bmcmIGJ1bmRsZU5hbWUsIGNvbnN0IFN0cmluZyYgZG9tYWluKQogewogICAgIHJldHVybiBmb3Jt
YXRMb2NhbGl6ZWRTdHJpbmcoV0VCX1VJX0NGU1RSSU5HKCLigJwlQOKAnSB3b3VsZCBsaWtlIHRv
IHVzZSBUb3VjaCBJRCBmb3Ig4oCcJUDigJ0uIiwgIkFsbG93IHRoZSBzcGVjaWZpZWQgYnVuZGxl
IHRvIHVzZSBUb3VjaCBJRCB0byBzaWduIGluIHRvIHRoZSBzcGVjaWZpZWQgd2Vic2l0ZSBvbiB0
aGlzIGRldmljZSIpLCBidW5kbGVOYW1lLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIGRvbWFpbi5j
cmVhdGVDRlN0cmluZygpLmdldCgpKTsKQEAgLTEyMjAsMTcgKzEyMTksMTEgQEAgU3RyaW5nIGdl
dEFzc2VydGlvblRvdWNoSURQcm9tcHRUaXRsZShjb25zdCBTdHJpbmcmIGJ1bmRsZU5hbWUsIGNv
bnN0IFN0cmluZyYgZG8KIHsKICAgICByZXR1cm4gZm9ybWF0TG9jYWxpemVkU3RyaW5nKFdFQl9V
SV9DRlNUUklORygi4oCcJUDigJ0gd291bGQgbGlrZSB0byBzaWduIGluIHRvIOKAnCVA4oCdLiIs
ICJBbGxvdyB0aGUgc3BlY2lmaWVkIGJ1bmRsZSB0byBzaWduIGluIHRvIHRoZSBzcGVjaWZpZWQg
d2Vic2l0ZSIpLCBidW5kbGVOYW1lLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIGRvbWFpbi5jcmVh
dGVDRlN0cmluZygpLmdldCgpKTsKIH0KLSNlbHNlCi1TdHJpbmcgbWFrZUNyZWRlbnRpYWxUb3Vj
aElEUHJvbXB0VGl0bGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKLXsKLSAgICByZXR1
cm4gV0VCX1VJX1NUUklORygiVGhpcyB3ZWJzaXRlIHdvdWxkIGxpa2UgdG8gdXNlIFRvdWNoIElE
LiIsICJUaGlzIHdlYnNpdGUgd291bGQgbGlrZSB0byB1c2UgVG91Y2ggSUQiKTsKLX0KIAotU3Ry
aW5nIGdldEFzc2VydGlvblRvdWNoSURQcm9tcHRUaXRsZShjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmKQorU3RyaW5nIGdlbmVyaWNUb3VjaElEUHJvbXB0VGl0bGUoKQogewotICAgIHJldHVy
biBXRUJfVUlfU1RSSU5HKCJUb3VjaCBJRCB0byBzaWduIGluIHRvIHRoaXMgd2Vic2l0ZS4iLCAi
VXNlIFRvdWNoIElEIHRvIHNpZ24gaW4gdG8gdGhpcyB3ZWJzaXRlIik7CisgICAgcmV0dXJuIFdF
Ql9VSV9TVFJJTkcoIkNvbnRpbnVlIHdpdGggVG91Y2ggSUQuIiwgIkNvbnRpbnVlIHdpdGggVG91
Y2ggSUQuIik7CiB9Ci0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogI2VuZGlmIC8vIEVOQUJMRShX
RUJfQVVUSE4pCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0xvY2FsaXplZFN0cmluZ3MuaAppbmRleCA3MTYwMGMxNjg0OWIxYTc4OGIyNDlkNTIzY2Fj
ZTE3ZjQ0MzczOGQxLi4wZDNlMTdlZjc2MjA4NTcyYjVmZWJkZjE0YjFlZmIzNTdiNmExMmJjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5oCkBAIC0zNDIsNiAr
MzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShXRUJfQVVUSE4pCiAgICAg
V0VCQ09SRV9FWFBPUlQgU3RyaW5nIG1ha2VDcmVkZW50aWFsVG91Y2hJRFByb21wdFRpdGxlKGNv
bnN0IFN0cmluZyYgYnVuZGxlTmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pOwogICAgIFdFQkNP
UkVfRVhQT1JUIFN0cmluZyBnZXRBc3NlcnRpb25Ub3VjaElEUHJvbXB0VGl0bGUoY29uc3QgU3Ry
aW5nJiBidW5kbGVOYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbik7CisgICAgV0VCQ09SRV9FWFBP
UlQgU3RyaW5nIGdlbmVyaWNUb3VjaElEUHJvbXB0VGl0bGUoKTsKICNlbmRpZgogCiAjaWYgVVNF
KEdMSUIpICYmIGRlZmluZWQoR0VUVEVYVF9QQUNLQUdFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvci5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvci5oCmluZGV4
IDBlMTgzNjExYWZkODVhOTAxMDU2M2NmNzZmZmQ3MTUwMWJmOTU3NGYuLmE1ZDE4ZjJhOGY5NWRi
MWNiZTYxNTdhODUxYzAzMjY5ZDA2MjYyMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0b3IuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yLmgKQEAgLTU1LDcg
KzU1LDcgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgZG93bmdyYWRlKEF1dGhlbnRp
Y2F0b3IqIGlkLCBSZWY8QXV0aGVudGljYXRvcj4mJiBkb3duZ3JhZGVkQXV0aGVudGljYXRvcikg
PSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgYXV0aGVudGljYXRvclN0YXR1c1VwZGF0ZWQoV2Vi
QXV0aGVudGljYXRpb25TdGF0dXMpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RQ
aW4odWludDY0X3QgcmV0cmllcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBXVEY6OlN0
cmluZyYpPiYmKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RBc3NlcnRpb25SZXNw
b25zZShjb25zdCBIYXNoU2V0PFJlZjxXZWJDb3JlOjpBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVz
cG9uc2U+PiYsIFdlYkF1dGhlbnRpY2F0aW9uU291cmNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZSopPiYmKSA9IDA7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RBc3NlcnRpb25SZXNwb25zZShWZWN0b3I8UmVmPFdlYkNv
cmU6OkF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZT4+JiYsIFdlYkF1dGhlbnRpY2F0aW9u
U291cmNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JBc3Nl
cnRpb25SZXNwb25zZSopPiYmKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZWNpZGVQb2xp
Y3lGb3JMb2NhbEF1dGhlbnRpY2F0b3IoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChMb2NhbEF1dGhl
bnRpY2F0b3JQb2xpY3kpPiYmKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxSZXF1
ZXN0KCkgPSAwOwogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJBdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAKaW5k
ZXggNWFiNWM5MGYwZmFhYmIxNDgzN2NjYzdhNGViNmQ2MzVjODYyYzFlYS4uYjRhZWVmYTFmNmI4
NjgwYzllMmQ1ZTRkNmMxMjE1NWJjNDFmNTZiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvck1hbmFnZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0b3JN
YW5hZ2VyLmNwcApAQCAtMjczLDE0ICsyNzMsOSBAQCB2b2lkIEF1dGhlbnRpY2F0b3JNYW5hZ2Vy
OjpyZXF1ZXN0UGluKHVpbnQ2NF90IHJldHJpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYwog
ICAgIH0pOwogfQogCi12b2lkIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOjpzZWxlY3RBc3NlcnRpb25S
ZXNwb25zZShjb25zdCBIYXNoU2V0PFJlZjxBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2U+
PiYgcmVzcG9uc2VzLCBXZWJBdXRoZW50aWNhdGlvblNvdXJjZSBzb3VyY2UsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlKik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCit2b2lkIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOjpzZWxlY3RBc3NlcnRpb25SZXNw
b25zZShWZWN0b3I8UmVmPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZT4+
JiYgcmVzcG9uc2VzLCBXZWJBdXRoZW50aWNhdGlvblNvdXJjZSBzb3VyY2UsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlKik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7Ci0gICAgVmVjdG9yPFJlZjxBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9u
c2U+PiByZXNwb25zZVZlY3RvcjsKLSAgICByZXNwb25zZVZlY3Rvci5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHJlc3BvbnNlcy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgcmVzcG9uc2UgOiByZXNw
b25zZXMpCi0gICAgICAgIHJlc3BvbnNlVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChyZXNwb25zZS5j
b3B5UmVmKCkpOwotCi0gICAgZGlzcGF0Y2hQYW5lbENsaWVudENhbGwoW3Jlc3BvbnNlcyA9IFdU
Rk1vdmUocmVzcG9uc2VWZWN0b3IpLCBzb3VyY2UsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBBUEk6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWwm
IHBhbmVsKSBtdXRhYmxlIHsKKyAgICBkaXNwYXRjaFBhbmVsQ2xpZW50Q2FsbChbcmVzcG9uc2Vz
ID0gV1RGTW92ZShyZXNwb25zZXMpLCBzb3VyY2UsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBBUEk6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWwm
IHBhbmVsKSBtdXRhYmxlIHsKICAgICAgICAgcGFuZWwuY2xpZW50KCkuc2VsZWN0QXNzZXJ0aW9u
UmVzcG9uc2UoV1RGTW92ZShyZXNwb25zZXMpLCBzb3VyY2UsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5oCmluZGV4
IGRjNGE2NzlhMDBkODk4M2RjMzNkYTZiMDRmYjkwNzI1NjBhMzcwZWYuLjI3MGI4YmY0MzUxMzI5
M2ZiZjQ0OWE0NzliYWJjOTdiZDA2MDk4NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvck1hbmFn
ZXIuaApAQCAtODIsNyArODIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZG93bmdyYWRlKEF1dGhl
bnRpY2F0b3IqIGlkLCBSZWY8QXV0aGVudGljYXRvcj4mJiBkb3duZ3JhZGVkQXV0aGVudGljYXRv
cikgZmluYWw7CiAgICAgdm9pZCBhdXRoZW50aWNhdG9yU3RhdHVzVXBkYXRlZChXZWJBdXRoZW50
aWNhdGlvblN0YXR1cykgZmluYWw7CiAgICAgdm9pZCByZXF1ZXN0UGluKHVpbnQ2NF90IHJldHJp
ZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgV1RGOjpTdHJpbmcmKT4mJikgZmluYWw7
Ci0gICAgdm9pZCBzZWxlY3RBc3NlcnRpb25SZXNwb25zZShjb25zdCBIYXNoU2V0PFJlZjxXZWJD
b3JlOjpBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2U+PiYsIFdlYkF1dGhlbnRpY2F0aW9u
U291cmNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JBc3Nl
cnRpb25SZXNwb25zZSopPiYmKSBmaW5hbDsKKyAgICB2b2lkIHNlbGVjdEFzc2VydGlvblJlc3Bv
bnNlKFZlY3RvcjxSZWY8V2ViQ29yZTo6QXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlPj4m
JiwgV2ViQXV0aGVudGljYXRpb25Tb3VyY2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29y
ZTo6QXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlKik+JiYpIGZpbmFsOwogICAgIHZvaWQg
ZGVjaWRlUG9saWN5Rm9yTG9jYWxBdXRoZW50aWNhdG9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
TG9jYWxBdXRoZW50aWNhdG9yUG9saWN5KT4mJikgZmluYWw7CiAgICAgdm9pZCBjYW5jZWxSZXF1
ZXN0KCkgZmluYWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1
dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLmgKaW5k
ZXggNjYzZmJhNjIwMWJmYzM2MzViMTgxNGMzN2VkZTA4NGYwNWYyNWI2MC4uOWY1ZTk1Y2QwYzQ5
YjQ5YTU3MTk5ZGIwYzI2ZjMzOGI2MGQ3MGNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxB
dXRoZW50aWNhdG9yLmgKQEAgLTcyLDggKzcyLDYgQEAgcHJpdmF0ZToKIAogICAgIFN0YXRlIG1f
c3RhdGUgeyBTdGF0ZTo6SW5pdCB9OwogICAgIFVuaXF1ZVJlZjxMb2NhbENvbm5lY3Rpb24+IG1f
Y29ubmVjdGlvbjsKLSAgICAvLyBGSVhNRSgxODM1MzQpOiBDb21iaW5lIHRoZXNlIHR3by4KLSAg
ICBIYXNoU2V0PFJlZjxXZWJDb3JlOjpBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2U+PiBt
X2Fzc2VydGlvblJlc3BvbnNlczsKICAgICBWZWN0b3I8UmVmPFdlYkNvcmU6OkF1dGhlbnRpY2F0
b3JBc3NlcnRpb25SZXNwb25zZT4+IG1fZXhpc3RpbmdDcmVkZW50aWFsczsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xv
Y2FsQXV0aGVudGljYXRvci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRp
Y2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbQppbmRleCBiNmRiMTI3Y2Y5MGFmMjg4
ZTkzYWViNzZhM2Q1Yjk3ZWI2MDBmNzE5Li44YmVlM2Y1MzYzODVhYzE3OTZiYjgwZWNlN2E2Y2I4
ZWYzMWE4NTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50
aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCkBA
IC0zNCwxNiArMzQsMTcgQEAKICNpbXBvcnQgPFdlYkNvcmUvQ0JPUlJlYWRlci5oPgogI2ltcG9y
dCA8V2ViQ29yZS9DQk9SV3JpdGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V4Y2VwdGlvbkRhdGEu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvRmlkb0NvbnN0YW50cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Q
dWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1B1
YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJB
dXRoZW50aWNhdGlvbkNvbnN0YW50cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJBdXRoZW50aWNh
dGlvblV0aWxzLmg+CiAjaW1wb3J0IDxwYWwvY3J5cHRvL0NyeXB0b0RpZ2VzdC5oPgotI2ltcG9y
dCA8d3RmL0hhc2hTZXQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0
Zi9SdW5Mb29wLmg+CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2Nv
Y29hL1NlY3VyaXR5U1BJLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KICNpbXBvcnQg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01Nyw4ICs1
OCw2IEBAIGNvbnN0IHVpbnQ4X3QgbWFrZUNyZWRlbnRpYWxGbGFncyA9IDBiMDEwMDAxMDE7IC8v
IFVQLCBVViBhbmQgQVQgYXJlIHNldC4KIGNvbnN0IHVpbnQ4X3QgZ2V0QXNzZXJ0aW9uRmxhZ3Mg
PSAwYjAwMDAwMTAxOyAvLyBVUCBhbmQgVVYgYXJlIHNldC4KIC8vIENyZWRlbnRpYWwgSUQgaXMg
Y3VycmVudGx5IFNIQS0xIG9mIHRoZSBjb3JyZXNwb25kaW5nIHB1YmxpYyBrZXkuCiBjb25zdCB1
aW50MTZfdCBjcmVkZW50aWFsSWRMZW5ndGggPSAyMDsKLWNvbnN0IGNoYXIqIGNvbnN0IHVzZXJF
bnRpdHlJZEtleSA9ICJpZCI7Ci1jb25zdCBjaGFyKiBjb25zdCB1c2VyRW50aXR5TmFtZUtleSA9
ICJuYW1lIjsKIGNvbnN0IHVpbnQ2NF90IGNvdW50ZXIgPSAwOwogCiBzdGF0aWMgaW5saW5lIGJv
b2wgZW1wdHlUcmFuc3BvcnRzT3JDb250YWluKGNvbnN0IFZlY3RvcjxBdXRoZW50aWNhdG9yVHJh
bnNwb3J0PiYgdHJhbnNwb3J0cywgQXV0aGVudGljYXRvclRyYW5zcG9ydCB0YXJnZXQpCkBAIC02
Niw3ICs2NSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBlbXB0eVRyYW5zcG9ydHNPckNvbnRhaW4o
Y29uc3QgVmVjdG9yPEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ+CiAgICAgcmV0dXJuIHRyYW5zcG9y
dHMuaXNFbXB0eSgpID8gdHJ1ZSA6IHRyYW5zcG9ydHMuY29udGFpbnModGFyZ2V0KTsKIH0KIAot
Ly8gRklYTUUoMTgzNTM0KTogRmluZCBhIGJldHRlciB3YXkgb2YgY29tcGFyaW5nIGNyZWRlbnRp
YWwgaWQuIERvaW5nIGl0IHdpdGggYXJyYXkgc2VlbXMgZmluZSBnaXZlbiB0aGUgbGlzdCBzaG91
bGQgYmUgc21hbGwuCisvLyBBIEJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgQ3JlZGVudGlh
bCBJRCBpcyB1c2VkIGFzIHRoZSBrZXkgb2YgdGhlIGhhc2ggc2V0Lgogc3RhdGljIGlubGluZSBI
YXNoU2V0PFN0cmluZz4gcHJvZHVjZUhhc2hTZXQoY29uc3QgVmVjdG9yPFB1YmxpY0tleUNyZWRl
bnRpYWxEZXNjcmlwdG9yPiYgY3JlZGVudGlhbERlc2NyaXB0b3JzKQogewogICAgIEhhc2hTZXQ8
U3RyaW5nPiByZXN1bHQ7CkBAIC03NCw3ICs3Myw3IEBAIHN0YXRpYyBpbmxpbmUgSGFzaFNldDxT
dHJpbmc+IHByb2R1Y2VIYXNoU2V0KGNvbnN0IFZlY3RvcjxQdWJsaWNLZXlDcmVkZW50aWFsRGVz
CiAgICAgICAgIGlmIChlbXB0eVRyYW5zcG9ydHNPckNvbnRhaW4oY3JlZGVudGlhbERlc2NyaXB0
b3IudHJhbnNwb3J0cywgQXV0aGVudGljYXRvclRyYW5zcG9ydDo6SW50ZXJuYWwpCiAgICAgICAg
ICAgICAmJiBjcmVkZW50aWFsRGVzY3JpcHRvci50eXBlID09IFB1YmxpY0tleUNyZWRlbnRpYWxU
eXBlOjpQdWJsaWNLZXkKICAgICAgICAgICAgICYmIGNyZWRlbnRpYWxEZXNjcmlwdG9yLmlkVmVj
dG9yLnNpemUoKSA9PSBjcmVkZW50aWFsSWRMZW5ndGgpCi0gICAgICAgICAgICByZXN1bHQuYWRk
KFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihjcmVkZW50aWFsRGVzY3JpcHRv
ci5pZFZlY3Rvci5kYXRhKCkpLCBjcmVkZW50aWFsRGVzY3JpcHRvci5pZFZlY3Rvci5zaXplKCkp
KTsKKyAgICAgICAgICAgIHJlc3VsdC5hZGQoYmFzZTY0RW5jb2RlKGNyZWRlbnRpYWxEZXNjcmlw
dG9yLmlkVmVjdG9yLmRhdGEoKSwgY3JlZGVudGlhbERlc2NyaXB0b3IuaWRWZWN0b3Iuc2l6ZSgp
KSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC04OCwxNCArODcsMTIgQEAgc3Rh
dGljIGlubGluZSBWZWN0b3I8dWludDhfdD4gdG9WZWN0b3IoTlNEYXRhICpkYXRhKQogCiBzdGF0
aWMgaW5saW5lIFJldGFpblB0cjxOU0RhdGE+IHRvTlNEYXRhKGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYgZGF0YSkKIHsKLSAgICAvLyBGSVhNRSgxODM1MzQpOiBDb25zaWRlciB1c2luZyBpbml0V2l0
aEJ5dGVzTm9Db3B5LgogICAgIHJldHVybiBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0
aEJ5dGVzOmRhdGEuZGF0YSgpIGxlbmd0aDpkYXRhLnNpemUoKV0pOwogfQogCiBzdGF0aWMgaW5s
aW5lIFJldGFpblB0cjxOU0RhdGE+IHRvTlNEYXRhKEFycmF5QnVmZmVyKiBidWZmZXIpCiB7CiAg
ICAgQVNTRVJUKGJ1ZmZlcik7Ci0gICAgLy8gRklYTUUoMTgzNTM0KTogQ29uc2lkZXIgdXNpbmcg
aW5pdFdpdGhCeXRlc05vQ29weS4KICAgICByZXR1cm4gYWRvcHROUyhbW05TRGF0YSBhbGxvY10g
aW5pdFdpdGhCeXRlczpidWZmZXItPmRhdGEoKSBsZW5ndGg6YnVmZmVyLT5ieXRlTGVuZ3RoKCld
KTsKIH0KIApAQCAtMTQwLDExICsxMzcsMTMgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxSZWY8
QXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlPj4+IGdldEV4aXN0aW5nQ3JlZGVudGkKICAg
ICBpZiAoc3RhdHVzICYmIHN0YXR1cyAhPSBlcnJTZWNJdGVtTm90Rm91bmQpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgYXV0byByZXRhaW5BdHRyaWJ1dGVzQXJyYXkgPSBhZG9w
dENGKGF0dHJpYnV0ZXNBcnJheVJlZik7Ci0gICAgTlNBcnJheSAqbnNBdHRyaWJ1dGVzQXJyYXkg
PSAoTlNBcnJheSAqKWF0dHJpYnV0ZXNBcnJheVJlZjsKKyAgICBOU0FycmF5ICpzb3J0ZWRBdHRy
aWJ1dGVzQXJyYXkgPSBbKE5TQXJyYXkgKilhdHRyaWJ1dGVzQXJyYXlSZWYgc29ydGVkQXJyYXlV
c2luZ0NvbXBhcmF0b3I6XihOU0RpY3Rpb25hcnkgKmEsIE5TRGljdGlvbmFyeSAqYikgeworICAg
ICAgICByZXR1cm4gW2JbKGlkKWtTZWNBdHRyTW9kaWZpY2F0aW9uRGF0ZV0gY29tcGFyZTphWyhp
ZClrU2VjQXR0ck1vZGlmaWNhdGlvbkRhdGVdXTsKKyAgICB9XTsKIAogICAgIFZlY3RvcjxSZWY8
QXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlPj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG5zQXR0cmlidXRlc0FycmF5LmNvdW50KTsKLSAgICBmb3IgKE5T
RGljdGlvbmFyeSAqYXR0cmlidXRlcyBpbiBuc0F0dHJpYnV0ZXNBcnJheSkgeworICAgIHJlc3Vs
dC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNvcnRlZEF0dHJpYnV0ZXNBcnJheS5jb3VudCk7Cisg
ICAgZm9yIChOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMgaW4gc29ydGVkQXR0cmlidXRlc0FycmF5
KSB7CiAgICAgICAgIGF1dG8gZGVjb2RlZFJlc3BvbnNlID0gY2Jvcjo6Q0JPUlJlYWRlcjo6cmVh
ZCh0b1ZlY3RvcihhdHRyaWJ1dGVzWyhpZClrU2VjQXR0ckFwcGxpY2F0aW9uVGFnXSkpOwogICAg
ICAgICBpZiAoIWRlY29kZWRSZXNwb25zZSB8fCAhZGVjb2RlZFJlc3BvbnNlLT5pc01hcCgpKSB7
CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE1MiwxNCArMTUxLDE0IEBA
IHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmPEF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25z
ZT4+PiBnZXRFeGlzdGluZ0NyZWRlbnRpCiAgICAgICAgIH0KICAgICAgICAgYXV0byYgcmVzcG9u
c2VNYXAgPSBkZWNvZGVkUmVzcG9uc2UtPmdldE1hcCgpOwogCi0gICAgICAgIGF1dG8gaXQgPSBy
ZXNwb25zZU1hcC5maW5kKENCT1IodXNlckVudGl0eUlkS2V5KSk7CisgICAgICAgIGF1dG8gaXQg
PSByZXNwb25zZU1hcC5maW5kKENCT1Ioa0VudGl0eUlkTWFwS2V5KSk7CiAgICAgICAgIGlmIChp
dCA9PSByZXNwb25zZU1hcC5lbmQoKSB8fCAhaXQtPnNlY29uZC5pc0J5dGVTdHJpbmcoKSkgewog
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgICAgICB9CiAgICAgICAgIGF1dG8mIHVzZXJIYW5kbGUgPSBpdC0+c2Vj
b25kLmdldEJ5dGVTdHJpbmcoKTsKIAotICAgICAgICBpdCA9IHJlc3BvbnNlTWFwLmZpbmQoQ0JP
Uih1c2VyRW50aXR5TmFtZUtleSkpOworICAgICAgICBpdCA9IHJlc3BvbnNlTWFwLmZpbmQoQ0JP
UihrRW50aXR5TmFtZU1hcEtleSkpOwogICAgICAgICBpZiAoaXQgPT0gcmVzcG9uc2VNYXAuZW5k
KCkgfHwgIWl0LT5zZWNvbmQuaXNTdHJpbmcoKSkgewogICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtMjExLDcgKzIx
MCw3IEBAIHZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbCgpCiAgICAgICAg
IGlmIChub3RGb3VuZCAhPSBtX2V4aXN0aW5nQ3JlZGVudGlhbHMuZmluZE1hdGNoaW5nKFsmZXhj
bHVkZUNyZWRlbnRpYWxJZHNdIChhdXRvJiBjcmVkZW50aWFsKSB7CiAgICAgICAgICAgICBhdXRv
KiByYXdJZCA9IGNyZWRlbnRpYWwtPnJhd0lkKCk7CiAgICAgICAgICAgICBBU1NFUlQocmF3SWQp
OwotICAgICAgICAgICAgcmV0dXJuIGV4Y2x1ZGVDcmVkZW50aWFsSWRzLmNvbnRhaW5zKFN0cmlu
ZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihyYXdJZC0+ZGF0YSgpKSwgcmF3SWQtPmJ5
dGVMZW5ndGgoKSkpOworICAgICAgICAgICAgcmV0dXJuIGV4Y2x1ZGVDcmVkZW50aWFsSWRzLmNv
bnRhaW5zKGJhc2U2NEVuY29kZShyYXdJZC0+ZGF0YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSk7
CiAgICAgICAgIH0pKSB7CiAgICAgICAgICAgICByZWNlaXZlRXhjZXB0aW9uKHsgTm90QWxsb3dl
ZEVycm9yLCAiQXQgbGVhc3Qgb25lIGNyZWRlbnRpYWwgbWF0Y2hlcyBhbiBlbnRyeSBvZiB0aGUg
ZXhjbHVkZUNyZWRlbnRpYWxzIGxpc3QgaW4gdGhlIHBsYXRmb3JtIGF0dGFjaGVkIGF1dGhlbnRp
Y2F0b3IuIl9zIH0sIFdlYkF1dGhlbnRpY2F0aW9uU3RhdHVzOjpMQUV4Y2x1ZGVDcmVkZW50aWFs
c01hdGNoZWQpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjg2LDggKzI4NSw4IEBAIHZvaWQg
TG9jYWxBdXRoZW50aWNhdG9yOjpjb250aW51ZU1ha2VDcmVkZW50aWFsQWZ0ZXJVc2VyVmVyaWZp
Y2F0aW9uKFNlY0FjY2Vzc0NvCiAgICAgY29uc3QgYXV0byYgc2VjQXR0ckxhYmVsID0gY3JlYXRp
b25PcHRpb25zLnJwLmlkOwogCiAgICAgY2Jvcjo6Q0JPUlZhbHVlOjpNYXBWYWx1ZSB1c2VyRW50
aXR5TWFwOwotICAgIHVzZXJFbnRpdHlNYXBbY2Jvcjo6Q0JPUlZhbHVlKHVzZXJFbnRpdHlJZEtl
eSldID0gY2Jvcjo6Q0JPUlZhbHVlKGNyZWF0aW9uT3B0aW9ucy51c2VyLmlkVmVjdG9yKTsKLSAg
ICB1c2VyRW50aXR5TWFwW2Nib3I6OkNCT1JWYWx1ZSh1c2VyRW50aXR5TmFtZUtleSldID0gY2Jv
cjo6Q0JPUlZhbHVlKGNyZWF0aW9uT3B0aW9ucy51c2VyLm5hbWUpOworICAgIHVzZXJFbnRpdHlN
YXBbY2Jvcjo6Q0JPUlZhbHVlKGtFbnRpdHlJZE1hcEtleSldID0gY2Jvcjo6Q0JPUlZhbHVlKGNy
ZWF0aW9uT3B0aW9ucy51c2VyLmlkVmVjdG9yKTsKKyAgICB1c2VyRW50aXR5TWFwW2Nib3I6OkNC
T1JWYWx1ZShrRW50aXR5TmFtZU1hcEtleSldID0gY2Jvcjo6Q0JPUlZhbHVlKGNyZWF0aW9uT3B0
aW9ucy51c2VyLm5hbWUpOwogICAgIGF1dG8gdXNlckVudGl0eSA9IGNib3I6OkNCT1JXcml0ZXI6
OndyaXRlKGNib3I6OkNCT1JWYWx1ZShXVEZNb3ZlKHVzZXJFbnRpdHlNYXApKSk7CiAgICAgQVNT
RVJUKHVzZXJFbnRpdHkpOwogICAgIGF1dG8gc2VjQXR0ckFwcGxpY2F0aW9uVGFnID0gdG9OU0Rh
dGEoKnVzZXJFbnRpdHkpOwpAQCAtNDM1LDI2ICs0MzQsMjUgQEAgdm9pZCBMb2NhbEF1dGhlbnRp
Y2F0b3I6OmdldEFzc2VydGlvbigpCiAgICAgfQogICAgIG1fZXhpc3RpbmdDcmVkZW50aWFscyA9
IFdURk1vdmUoKmV4aXN0aW5nQ3JlZGVudGlhbHMpOwogCisgICAgVmVjdG9yPFJlZjxXZWJDb3Jl
OjpBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2U+PiBhc3NlcnRpb25SZXNwb25zZXM7Cisg
ICAgYXNzZXJ0aW9uUmVzcG9uc2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9leGlzdGluZ0Ny
ZWRlbnRpYWxzLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiBjcmVkZW50aWFsIDogbV9leGlzdGlu
Z0NyZWRlbnRpYWxzKSB7CiAgICAgICAgIGlmIChhbGxvd0NyZWRlbnRpYWxJZHMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fYXNzZXJ0aW9uUmVzcG9uc2VzLmFk
ZChjcmVkZW50aWFsLmNvcHlSZWYoKSk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJl
c3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICAgICAgYXNzZXJ0aW9uUmVzcG9u
c2VzLnVuY2hlY2tlZEFwcGVuZChjcmVkZW50aWFsLmNvcHlSZWYoKSk7CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQogCiAgICAgICAgIGF1dG8qIHJhd0lkID0gY3JlZGVudGlhbC0+
cmF3SWQoKTsKLSAgICAgICAgaWYgKGFsbG93Q3JlZGVudGlhbElkcy5jb250YWlucyhTdHJpbmco
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4ocmF3SWQtPmRhdGEoKSksIHJhd0lkLT5ieXRl
TGVuZ3RoKCkpKSkgewotICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Fzc2VydGlvblJl
c3BvbnNlcy5hZGQoY3JlZGVudGlhbC5jb3B5UmVmKCkpOwotICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICAgICAgfQorICAgICAg
ICBpZiAoYWxsb3dDcmVkZW50aWFsSWRzLmNvbnRhaW5zKGJhc2U2NEVuY29kZShyYXdJZC0+ZGF0
YSgpLCByYXdJZC0+Ynl0ZUxlbmd0aCgpKSkpCisgICAgICAgICAgICBhc3NlcnRpb25SZXNwb25z
ZXMudW5jaGVja2VkQXBwZW5kKGNyZWRlbnRpYWwuY29weVJlZigpKTsKICAgICB9Ci0gICAgaWYg
KG1fYXNzZXJ0aW9uUmVzcG9uc2VzLmlzRW1wdHkoKSkgeworICAgIGlmIChhc3NlcnRpb25SZXNw
b25zZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIHJlY2VpdmVFeGNlcHRpb24oeyBOb3RBbGxvd2Vk
RXJyb3IsICJObyBtYXRjaGVkIGNyZWRlbnRpYWxzIGFyZSBmb3VuZCBpbiB0aGUgcGxhdGZvcm0g
YXR0YWNoZWQgYXV0aGVudGljYXRvci4iX3MgfSwgV2ViQXV0aGVudGljYXRpb25TdGF0dXM6OkxB
Tm9DcmVkZW50aWFsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIFN0ZXAgNi03
LiBVc2VyIGNvbnNlbnQgaXMgaW1wbGljaXRseSBhY3F1aXJlZCBieSBzZWxlY3RpbmcgcmVzcG9u
c2VzLgotICAgIG1fY29ubmVjdGlvbi0+ZmlsdGVyUmVzcG9uc2VzKG1fYXNzZXJ0aW9uUmVzcG9u
c2VzKTsKKyAgICBtX2Nvbm5lY3Rpb24tPmZpbHRlclJlc3BvbnNlcyhhc3NlcnRpb25SZXNwb25z
ZXMpOwogCiAgICAgaWYgKGF1dG8qIG9ic2VydmVyID0gdGhpcy0+b2JzZXJ2ZXIoKSkgewogICAg
ICAgICBhdXRvIGNhbGxiYWNrID0gW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMp
XSAoQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlKiByZXNwb25zZSkgewpAQCAtNDYyLDEy
ICs0NjAsMTQgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbigpCiAgICAg
ICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICAgICAgYXV0byByZXR1cm5SZXNwb25zZSA9IG1fYXNzZXJ0aW9uUmVzcG9uc2VzLnRha2UocmVz
cG9uc2UpOwotICAgICAgICAgICAgaWYgKCFyZXR1cm5SZXNwb25zZSkKKyAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gbV9leGlzdGluZ0NyZWRlbnRpYWxzLmZpbmRNYXRjaGluZyhbZXhwZWN0ZWRS
ZXNwb25zZSA9IHJlc3BvbnNlXSAoYXV0byYgcmVzcG9uc2UpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzcG9uc2UucHRyKCkgPT0gZXhwZWN0ZWRSZXNwb25zZTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBub3RGb3VuZCkKICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBjb250aW51ZUdldEFzc2VydGlvbkFmdGVyUmVzcG9uc2VTZWxl
Y3RlZChXVEZNb3ZlKCpyZXR1cm5SZXNwb25zZSkpOworICAgICAgICAgICAgY29udGludWVHZXRB
c3NlcnRpb25BZnRlclJlc3BvbnNlU2VsZWN0ZWQobV9leGlzdGluZ0NyZWRlbnRpYWxzW3Jlc3Vs
dF0uY29weVJlZigpKTsKICAgICAgICAgfTsKLSAgICAgICAgb2JzZXJ2ZXItPnNlbGVjdEFzc2Vy
dGlvblJlc3BvbnNlKG1fYXNzZXJ0aW9uUmVzcG9uc2VzLCBXZWJBdXRoZW50aWNhdGlvblNvdXJj
ZTo6TG9jYWwsIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICAgICAgb2JzZXJ2ZXItPnNlbGVjdEFz
c2VydGlvblJlc3BvbnNlKFdURk1vdmUoYXNzZXJ0aW9uUmVzcG9uc2VzKSwgV2ViQXV0aGVudGlj
YXRpb25Tb3VyY2U6OkxvY2FsLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgfQogfQogCkBAIC01
MDIsMTUgKzUwMiwxNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6Y29udGludWVHZXRBc3Nl
cnRpb25BZnRlclVzZXJWZXJpZmljYXRpb24oUmVmPFdlYkNvcmU6OgogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBTdGVwIDEwLgotICAgIGF1dG8gYXV0aERhdGEgPSBidWlsZEF1dGhEYXRhKFdU
Rjo6Z2V0PFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucz4ocmVxdWVzdERhdGEoKS5v
cHRpb25zKS5ycElkLCBnZXRBc3NlcnRpb25GbGFncywgY291bnRlciwgeyB9KTsKKyAgICBhdXRv
IHJlcXVlc3RPcHRpb25zID0gV1RGOjpnZXQ8UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRp
b25zPihyZXF1ZXN0RGF0YSgpLm9wdGlvbnMpOworICAgIGF1dG8gYXV0aERhdGEgPSBidWlsZEF1
dGhEYXRhKHJlcXVlc3RPcHRpb25zLnJwSWQsIGdldEFzc2VydGlvbkZsYWdzLCBjb3VudGVyLCB7
IH0pOwogCiAgICAgLy8gU3RlcCAxMS4KICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBzaWduYXR1
cmU7CisgICAgYXV0byBuc0NyZWRlbnRpYWxJZCA9IHRvTlNEYXRhKHJlc3BvbnNlLT5yYXdJZCgp
KTsKICAgICB7CiAgICAgICAgIE5TRGljdGlvbmFyeSAqcXVlcnkgPSBAewogICAgICAgICAgICAg
KGlkKWtTZWNDbGFzczogKGlkKWtTZWNDbGFzc0tleSwKICAgICAgICAgICAgIChpZClrU2VjQXR0
cktleUNsYXNzOiAoaWQpa1NlY0F0dHJLZXlDbGFzc1ByaXZhdGUsCi0gICAgICAgICAgICAoaWQp
a1NlY0F0dHJBcHBsaWNhdGlvbkxhYmVsOiB0b05TRGF0YShyZXNwb25zZS0+cmF3SWQoKSkuZ2V0
KCksCisgICAgICAgICAgICAoaWQpa1NlY0F0dHJBcHBsaWNhdGlvbkxhYmVsOiBuc0NyZWRlbnRp
YWxJZC5nZXQoKSwKICAgICAgICAgICAgIChpZClrU2VjVXNlQXV0aGVudGljYXRpb25Db250ZXh0
OiBjb250ZXh0LAogICAgICAgICAgICAgKGlkKWtTZWNSZXR1cm5SZWY6IEBZRVMsCiAjaWYgSEFW
RShEQVRBX1BST1RFQ1RJT05fS0VZQ0hBSU4pCkBAIC01NDQsNiArNTQ2LDI1IEBAIHZvaWQgTG9j
YWxBdXRoZW50aWNhdG9yOjpjb250aW51ZUdldEFzc2VydGlvbkFmdGVyVXNlclZlcmlmaWNhdGlv
bihSZWY8V2ViQ29yZTo6CiAgICAgcmVzcG9uc2UtPnNldEF1dGhlbnRpY2F0b3JEYXRhKFdURk1v
dmUoYXV0aERhdGEpKTsKICAgICByZXNwb25zZS0+c2V0U2lnbmF0dXJlKHRvQXJyYXlCdWZmZXIo
KE5TRGF0YSAqKXNpZ25hdHVyZS5nZXQoKSkpOwogICAgIHJlY2VpdmVSZXNwb25kKFdURk1vdmUo
cmVzcG9uc2UpKTsKKworICAgIC8vIEV4dHJhIHN0ZXA6IHVwZGF0ZSB0aGUgS2V5Y2hhaW4gaXRl
bSB3aXRoIHRoZSBzYW1lIHZhbHVlIHRvIHVwZGF0ZSBpdHMgbW9kaWZpY2F0aW9uIGRhdGUgc3Vj
aCB0aGF0IExSVSBjYW4gYmUgdXNlZAorICAgIC8vIGZvciBzZWxlY3RBc3NlcnRpb25SZXNwb25z
ZQorICAgIE5TRGljdGlvbmFyeSAqdXBkYXRlUXVlcnkgPSBAeworICAgICAgICAoaWQpa1NlY0Ns
YXNzOiAoaWQpa1NlY0NsYXNzS2V5LAorICAgICAgICAoaWQpa1NlY0F0dHJLZXlDbGFzczogKGlk
KWtTZWNBdHRyS2V5Q2xhc3NQcml2YXRlLAorICAgICAgICAoaWQpa1NlY0F0dHJBcHBsaWNhdGlv
bkxhYmVsOiBuc0NyZWRlbnRpYWxJZC5nZXQoKSwKKyNpZiBIQVZFKERBVEFfUFJPVEVDVElPTl9L
RVlDSEFJTikKKyAgICAgICAgKGlkKWtTZWNVc2VEYXRhUHJvdGVjdGlvbktleWNoYWluOiBAWUVT
CisjZWxzZQorICAgICAgICAoaWQpa1NlY0F0dHJOb0xlZ2FjeTogQFlFUworI2VuZGlmCisgICAg
fTsKKyAgICBOU0RpY3Rpb25hcnkgKnVwZGF0ZVBhcmFtcyA9IEB7CisgICAgICAgIChpZClrU2Vj
QXR0ckxhYmVsOiByZXF1ZXN0T3B0aW9ucy5ycElkLAorICAgIH07CisgICAgYXV0byBzdGF0dXMg
PSBTZWNJdGVtVXBkYXRlKChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpdXBkYXRlUXVlcnksIChf
X2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpdXBkYXRlUGFyYW1zKTsKKyAgICBpZiAoc3RhdHVzKQor
ICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IHVwZGF0ZSB0aGUgS2V5Y2hhaW4gaXRlbTogJWQi
LCBzdGF0dXMpOwogfQogCiB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6cmVjZWl2ZUV4Y2VwdGlv
bihFeGNlcHRpb25EYXRhJiYgZXhjZXB0aW9uLCBXZWJBdXRoZW50aWNhdGlvblN0YXR1cyBzdGF0
dXMpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50
aWNhdGlvbi9Db2NvYS9Mb2NhbENvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQ29ubmVjdGlvbi5oCmluZGV4IGZlYjA3YTgw
MjQ1YzQxYzE4YmIyM2JlM2FhNTkzM2YwZjc4MTliOTkuLjgwNTFjMTM3MThkN2Y0MTkzOTVjMjYz
NjYwMjU0OTdiMmQxOGU4NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQ29ubmVjdGlvbi5oCkBA
IC02MSwxNCArNjEsMTYgQEAgcHVibGljOgogICAgIHVzaW5nIFVzZXJWZXJpZmljYXRpb25DYWxs
YmFjayA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNlclZlcmlmaWNhdGlvbiwgTEFDb250ZXh0
ICopPjsKIAogICAgIExvY2FsQ29ubmVjdGlvbigpID0gZGVmYXVsdDsKLSAgICAvLyBGSVhNRSgx
ODM1MzQpOiBJbnZhbGlkYXRlIHRoZSBMQUNvbnRleHQuCi0gICAgdmlydHVhbCB+TG9jYWxDb25u
ZWN0aW9uKCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwgfkxvY2FsQ29ubmVjdGlvbigpOwogCiAg
ICAgLy8gT3ZlcnJpZGVkIGJ5IE1vY2tMb2NhbENvbm5lY3Rpb24uCi0gICAgdmlydHVhbCB2b2lk
IHZlcmlmeVVzZXIoY29uc3QgU3RyaW5nJiBycElkLCBXZWJDb3JlOjpDbGllbnREYXRhVHlwZSwg
U2VjQWNjZXNzQ29udHJvbFJlZiwgVXNlclZlcmlmaWNhdGlvbkNhbGxiYWNrJiYpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCB2ZXJpZnlVc2VyKGNvbnN0IFN0cmluZyYgcnBJZCwgV2ViQ29yZTo6
Q2xpZW50RGF0YVR5cGUsIFNlY0FjY2Vzc0NvbnRyb2xSZWYsIFVzZXJWZXJpZmljYXRpb25DYWxs
YmFjayYmKTsKICAgICB2aXJ0dWFsIFJldGFpblB0cjxTZWNLZXlSZWY+IGNyZWF0ZUNyZWRlbnRp
YWxQcml2YXRlS2V5KExBQ29udGV4dCAqLCBTZWNBY2Nlc3NDb250cm9sUmVmLCBjb25zdCBTdHJp
bmcmIHNlY0F0dHJMYWJlbCwgTlNEYXRhICpzZWNBdHRyQXBwbGljYXRpb25UYWcpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBnZXRBdHRlc3RhdGlvbihTZWNLZXlSZWYsIE5TRGF0YSAqYXV0aERh
dGEsIE5TRGF0YSAqaGFzaCwgQXR0ZXN0YXRpb25DYWxsYmFjayYmKSBjb25zdDsKLSAgICB2aXJ0
dWFsIHZvaWQgZmlsdGVyUmVzcG9uc2VzKEhhc2hTZXQ8UmVmPFdlYkNvcmU6OkF1dGhlbnRpY2F0
b3JBc3NlcnRpb25SZXNwb25zZT4+JikgY29uc3QgeyB9OworICAgIHZpcnR1YWwgdm9pZCBmaWx0
ZXJSZXNwb25zZXMoVmVjdG9yPFJlZjxXZWJDb3JlOjpBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVz
cG9uc2U+PiYpIGNvbnN0IHsgfTsKKworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8TEFDb250ZXh0
PiBtX2NvbnRleHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQ29ubmVj
dGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29h
L0xvY2FsQ29ubmVjdGlvbi5tbQppbmRleCBlYWZjMThjMDQ0ZTk0MTg3ZWJhMjFlMjMzY2IwMWQw
ZjYyYmE0NzcyLi44N2UzOGIyNTk0ODdkYzMyNTRiMTAzMjcyMDZkNDNmMzlkNDQxODRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9M
b2NhbENvbm5lY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVu
dGljYXRpb24vQ29jb2EvTG9jYWxDb25uZWN0aW9uLm1tCkBAIC00MiwyMSArNDIsMjQgQEAgbmFt
ZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIHsK
LXN0YXRpYyBTdHJpbmcgYnVuZGxlTmFtZSgpCi17Ci0gICAgU3RyaW5nIGJ1bmRsZU5hbWU7Ci0K
ICNpZiBQTEFURk9STShNQUMpCi0gICAgYnVuZGxlTmFtZSA9IFtbTlNSdW5uaW5nQXBwbGljYXRp
b24gY3VycmVudEFwcGxpY2F0aW9uXSBsb2NhbGl6ZWROYW1lXTsKK3N0YXRpYyBpbmxpbmUgU3Ry
aW5nIGJ1bmRsZU5hbWUoKQoreworICAgIHJldHVybiBbW05TUnVubmluZ0FwcGxpY2F0aW9uIGN1
cnJlbnRBcHBsaWNhdGlvbl0gbG9jYWxpemVkTmFtZV07Cit9CiAjZW5kaWYKK30gLy8gbmFtZXNw
YWNlCiAKLSAgICByZXR1cm4gYnVuZGxlTmFtZTsKK0xvY2FsQ29ubmVjdGlvbjo6fkxvY2FsQ29u
bmVjdGlvbigpCit7CisgICAgLy8gRGlzbWlzcyBhbnkgc2hvd2luZyBMb2NhbEF1dGhlbnRpY2F0
aW9uIGRpYWxvZ3MuCisgICAgW21fY29udGV4dCBpbnZhbGlkYXRlXTsKIH0KLX0gLy8gbmFtZXNw
YWNlCiAKLXZvaWQgTG9jYWxDb25uZWN0aW9uOjp2ZXJpZnlVc2VyKGNvbnN0IFN0cmluZyYgcnBJ
ZCwgQ2xpZW50RGF0YVR5cGUgdHlwZSwgU2VjQWNjZXNzQ29udHJvbFJlZiBhY2Nlc3NDb250cm9s
LCBVc2VyVmVyaWZpY2F0aW9uQ2FsbGJhY2smJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKK3Zv
aWQgTG9jYWxDb25uZWN0aW9uOjp2ZXJpZnlVc2VyKGNvbnN0IFN0cmluZyYgcnBJZCwgQ2xpZW50
RGF0YVR5cGUgdHlwZSwgU2VjQWNjZXNzQ29udHJvbFJlZiBhY2Nlc3NDb250cm9sLCBVc2VyVmVy
aWZpY2F0aW9uQ2FsbGJhY2smJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBTdHJpbmcgdGl0
bGU7CisgICAgU3RyaW5nIHRpdGxlID0gZ2VuZXJpY1RvdWNoSURQcm9tcHRUaXRsZSgpOworI2lm
IFBMQVRGT1JNKE1BQykKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIENsaWVudERhdGFU
eXBlOjpDcmVhdGU6CiAgICAgICAgIHRpdGxlID0gbWFrZUNyZWRlbnRpYWxUb3VjaElEUHJvbXB0
VGl0bGUoYnVuZGxlTmFtZSgpLCBycElkKTsKQEAgLTY3LDE4ICs3MCwxNyBAQCB2b2lkIExvY2Fs
Q29ubmVjdGlvbjo6dmVyaWZ5VXNlcihjb25zdCBTdHJpbmcmIHJwSWQsIENsaWVudERhdGFUeXBl
IHR5cGUsIFNlY0FjYwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KKyNlbmRpZgogCi0gICAgYXV0byBjb250ZXh0ID0gYWRvcHROUyhbYWxsb2NMQUNv
bnRleHRJbnN0YW5jZSgpIGluaXRdKTsKKyAgICBtX2NvbnRleHQgPSBbYWxsb2NMQUNvbnRleHRJ
bnN0YW5jZSgpIGluaXRdOwogCiAgICAgYXV0byBvcHRpb25zID0gYWRvcHROUyhbW05TTXV0YWJs
ZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKLSAgICBpZiAoW2NvbnRleHQgYmlvbWV0cnlUeXBl
XSA9PSBMQUJpb21ldHJ5VHlwZVRvdWNoSUQpIHsKKyAgICBpZiAoW21fY29udGV4dCBiaW9tZXRy
eVR5cGVdID09IExBQmlvbWV0cnlUeXBlVG91Y2hJRCkgewogICAgICAgICBbb3B0aW9ucyBzZXRP
YmplY3Q6dGl0bGUgZm9yS2V5OkAoTEFPcHRpb25BdXRoZW50aWNhdGlvblRpdGxlKV07CiAgICAg
ICAgIFtvcHRpb25zIHNldE9iamVjdDpATk8gZm9yS2V5OkAoTEFPcHRpb25GYWxsYmFja1Zpc2li
bGUpXTsKICAgICB9CiAKLSAgICBhdXRvIHJlcGx5ID0gbWFrZUJsb2NrUHRyKFtjb250ZXh0LCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoTlNEaWN0aW9u
YXJ5ICosIE5TRXJyb3IgKmVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0KKyAgICBhdXRvIHJlcGx5ID0gbWFrZUJsb2NrUHRyKFtjb250ZXh0ID0g
bV9jb250ZXh0LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSAoTlNEaWN0aW9uYXJ5ICosIE5TRXJyb3IgKmVycm9yKSBtdXRhYmxlIHsKICAgICAgICAgVXNl
clZlcmlmaWNhdGlvbiB2ZXJpZmljYXRpb24gPSBVc2VyVmVyaWZpY2F0aW9uOjpZZXM7CiAgICAg
ICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZG4ndCBhdXRoZW50
aWNhdGUgd2l0aCBiaW9tZXRyaWNzOiAlQCIsIGVycm9yKTsKQEAgLTg2LDEyICs4OCwxNCBAQCB2
b2lkIExvY2FsQ29ubmVjdGlvbjo6dmVyaWZ5VXNlcihjb25zdCBTdHJpbmcmIHJwSWQsIENsaWVu
dERhdGFUeXBlIHR5cGUsIFNlY0FjYwogICAgICAgICAgICAgaWYgKGVycm9yLmNvZGUgPT0gTEFF
cnJvclVzZXJDYW5jZWwpCiAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uID0gVXNlclZlcmlm
aWNhdGlvbjo6Q2FuY2VsOwogICAgICAgICB9CisKKyAgICAgICAgLy8gVGhpcyBibG9jayBjYW4g
YmUgZXhlY3V0ZWQgaW4gYW5vdGhlciB0aHJlYWQuCiAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5k
aXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwg
dmVyaWZpY2F0aW9uLCBjb250ZXh0ID0gV1RGTW92ZShjb250ZXh0KV0gKCkgbXV0YWJsZSB7CiAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih2ZXJpZmljYXRpb24sIGNvbnRleHQuZ2V0KCkp
OwogICAgICAgICB9KTsKICAgICB9KTsKIAotICAgIFtjb250ZXh0IGV2YWx1YXRlQWNjZXNzQ29u
dHJvbDphY2Nlc3NDb250cm9sIG9wZXJhdGlvbjpMQUFjY2Vzc0NvbnRyb2xPcGVyYXRpb25Vc2VL
ZXlTaWduIG9wdGlvbnM6b3B0aW9ucy5nZXQoKSByZXBseTpyZXBseS5nZXQoKV07CisgICAgW21f
Y29udGV4dCBldmFsdWF0ZUFjY2Vzc0NvbnRyb2w6YWNjZXNzQ29udHJvbCBvcGVyYXRpb246TEFB
Y2Nlc3NDb250cm9sT3BlcmF0aW9uVXNlS2V5U2lnbiBvcHRpb25zOm9wdGlvbnMuZ2V0KCkgcmVw
bHk6cmVwbHkuZ2V0KCldOwogfQogCiBSZXRhaW5QdHI8U2VjS2V5UmVmPiBMb2NhbENvbm5lY3Rp
b246OmNyZWF0ZUNyZWRlbnRpYWxQcml2YXRlS2V5KExBQ29udGV4dCAqY29udGV4dCwgU2VjQWNj
ZXNzQ29udHJvbFJlZiBhY2Nlc3NDb250cm9sUmVmLCBjb25zdCBTdHJpbmcmIHNlY0F0dHJMYWJl
bCwgTlNEYXRhICpzZWNBdHRyQXBwbGljYXRpb25UYWcpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENvbm5l
Y3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2sv
TW9ja0xvY2FsQ29ubmVjdGlvbi5oCmluZGV4IDA0N2M2MzJhODYyODdjMWMwYjU4YzQ4OGM1MjRl
YWMyOWJlYzM2MTQuLmZmOTBkM2RlNDM0OWM5YTMzODVjMjBjMDU5NzI5YjhlMjJlYmUyZTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2sv
TW9ja0xvY2FsQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1
dGhlbnRpY2F0aW9uL01vY2svTW9ja0xvY2FsQ29ubmVjdGlvbi5oCkBAIC0zNywxMCArMzcsMTAg
QEAgcHVibGljOgogICAgIGV4cGxpY2l0IE1vY2tMb2NhbENvbm5lY3Rpb24oY29uc3QgV2ViQ29y
ZTo6TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbiYpOwogCiBwcml2YXRlOgotICAg
IHZvaWQgdmVyaWZ5VXNlcihjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpDbGllbnREYXRhVHlwZSwg
U2VjQWNjZXNzQ29udHJvbFJlZiwgVXNlclZlcmlmaWNhdGlvbkNhbGxiYWNrJiYpIGNvbnN0IGZp
bmFsOworICAgIHZvaWQgdmVyaWZ5VXNlcihjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpDbGllbnRE
YXRhVHlwZSwgU2VjQWNjZXNzQ29udHJvbFJlZiwgVXNlclZlcmlmaWNhdGlvbkNhbGxiYWNrJiYp
IGZpbmFsOwogICAgIFJldGFpblB0cjxTZWNLZXlSZWY+IGNyZWF0ZUNyZWRlbnRpYWxQcml2YXRl
S2V5KExBQ29udGV4dCAqLCBTZWNBY2Nlc3NDb250cm9sUmVmLCBjb25zdCBTdHJpbmcmIHNlY0F0
dHJMYWJlbCwgTlNEYXRhICpzZWNBdHRyQXBwbGljYXRpb25UYWcpIGNvbnN0IGZpbmFsOwogICAg
IHZvaWQgZ2V0QXR0ZXN0YXRpb24oU2VjS2V5UmVmLCBOU0RhdGEgKmF1dGhEYXRhLCBOU0RhdGEg
Kmhhc2gsIEF0dGVzdGF0aW9uQ2FsbGJhY2smJikgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBmaWx0
ZXJSZXNwb25zZXMoSGFzaFNldDxSZWY8V2ViQ29yZTo6QXV0aGVudGljYXRvckFzc2VydGlvblJl
c3BvbnNlPj4mKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGZpbHRlclJlc3BvbnNlcyhWZWN0b3I8
UmVmPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZT4+JikgY29uc3QgZmlu
YWw7CiAKICAgICBXZWJDb3JlOjpNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uIG1f
Y29uZmlndXJhdGlvbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENvbm5lY3Rpb24ubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Nb2NrL01vY2tMb2NhbENvbm5lY3Rpb24u
bW0KaW5kZXggNmYwY2I5OWFhYjFlOTNkNWVmZjRkNDhjZDMyMjkxOWNjYzQxNjE0Yi4uMmZiYWEz
NDE1MGY1ZTBmM2UyYWM2MmVhYWY2NjY3ZTM3NmRmZjFiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vTW9jay9Nb2NrTG9jYWxDb25uZWN0aW9u
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL01vY2sv
TW9ja0xvY2FsQ29ubmVjdGlvbi5tbQpAQCAtMzEsNyArMzEsNiBAQAogI2ltcG9ydCA8U2VjdXJp
dHkvU2VjSXRlbS5oPgogI2ltcG9ydCA8V2ViQ29yZS9BdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVz
cG9uc2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvRXhjZXB0aW9uRGF0YS5oPgotI2ltcG9ydCA8d3Rm
L0hhc2hTZXQuaD4KICNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2Nv
Y29hL1NlY3VyaXR5U1BJLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KQEAgLTQ3LDcg
KzQ2LDcgQEAgTW9ja0xvY2FsQ29ubmVjdGlvbjo6TW9ja0xvY2FsQ29ubmVjdGlvbihjb25zdCBN
b2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW8KIHsKIH0KIAotdm9pZCBNb2NrTG9jYWxD
b25uZWN0aW9uOjp2ZXJpZnlVc2VyKGNvbnN0IFN0cmluZyYsIENsaWVudERhdGFUeXBlLCBTZWNB
Y2Nlc3NDb250cm9sUmVmLCBVc2VyVmVyaWZpY2F0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykgY29u
c3QKK3ZvaWQgTW9ja0xvY2FsQ29ubmVjdGlvbjo6dmVyaWZ5VXNlcihjb25zdCBTdHJpbmcmLCBD
bGllbnREYXRhVHlwZSwgU2VjQWNjZXNzQ29udHJvbFJlZiwgVXNlclZlcmlmaWNhdGlvbkNhbGxi
YWNrJiYgY2FsbGJhY2spCiB7CiAgICAgLy8gTW9jayBhc3luYyBvcGVyYXRpb25zLgogICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29uZmlndXJhdGlvbiA9IG1fY29uZmlndXJhdGlvbiwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKQEAgLTEyNCw3ICsxMjMs
NyBAQCB2b2lkIE1vY2tMb2NhbENvbm5lY3Rpb246OmdldEF0dGVzdGF0aW9uKFNlY0tleVJlZiwg
TlNEYXRhICosIE5TRGF0YSAqLCBBdHRlc3RhdAogICAgIH0pOwogfQogCi12b2lkIE1vY2tMb2Nh
bENvbm5lY3Rpb246OmZpbHRlclJlc3BvbnNlcyhIYXNoU2V0PFJlZjxBdXRoZW50aWNhdG9yQXNz
ZXJ0aW9uUmVzcG9uc2U+PiYgcmVzcG9uc2VzKSBjb25zdAordm9pZCBNb2NrTG9jYWxDb25uZWN0
aW9uOjpmaWx0ZXJSZXNwb25zZXMoVmVjdG9yPFJlZjxBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVz
cG9uc2U+PiYgcmVzcG9uc2VzKSBjb25zdAogewogICAgIGNvbnN0IGF1dG8mIHByZWZlcnJlZENy
ZWRlbnRpYWxJZEJhc2U2NCA9IG1fY29uZmlndXJhdGlvbi5sb2NhbC0+cHJlZmVycmVkQ3JlZGVu
dGlhbElkQmFzZTY0OwogICAgIGlmIChwcmVmZXJyZWRDcmVkZW50aWFsSWRCYXNlNjQuaXNFbXB0
eSgpKQpAQCAtMTM4LDEwICsxMzcsOSBAQCB2b2lkIE1vY2tMb2NhbENvbm5lY3Rpb246OmZpbHRl
clJlc3BvbnNlcyhIYXNoU2V0PFJlZjxBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcAogICAgICAg
ICBpZiAocmF3SWRCYXNlNjQgPT0gcHJlZmVycmVkQ3JlZGVudGlhbElkQmFzZTY0KQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgfQotICAgIGF1dG8gcmVzcG9uc2UgPSByZXNwb25zZXMudGFrZShp
dHIpOwotICAgIEFTU0VSVChyZXNwb25zZSk7CisgICAgYXV0byByZXNwb25zZSA9IGl0ci0+Y29w
eVJlZigpOwogICAgIHJlc3BvbnNlcy5jbGVhcigpOwotICAgIHJlc3BvbnNlcy5hZGQoV1RGTW92
ZSgqcmVzcG9uc2UpKTsKKyAgICByZXNwb25zZXMuYXBwZW5kKFdURk1vdmUocmVzcG9uc2UpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBBdXRoZW50aWNhdG9yLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhlbnRp
Y2F0b3IuY3BwCmluZGV4IDQxZThkNWFiYmNjZTc2NjQ3NGYzZGIwODY1NTEwMTgwY2U1NTY5MGEu
LjhmMjJlZGE2ZDYxZWI5YmRhOWUxZWViMDYzY2YyY2IwMjQwZTBhMTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhlbnRp
Y2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9u
L2ZpZG8vQ3RhcEF1dGhlbnRpY2F0b3IuY3BwCkBAIC0xNzMsOCArMTczLDggQEAgdm9pZCBDdGFw
QXV0aGVudGljYXRvcjo6Y29udGludWVHZXRBc3NlcnRpb25BZnRlclJlc3BvbnNlUmVjZWl2ZWQo
VmVjdG9yPHVpbnQ4X3QKICAgICB9CiAKICAgICBtX3JlbWFpbmluZ0Fzc2VydGlvblJlc3BvbnNl
cyA9IHJlc3BvbnNlLT5udW1iZXJPZkNyZWRlbnRpYWxzKCkgLSAxOwotICAgIGF1dG8gYWRkUmVz
dWx0ID0gbV9hc3NlcnRpb25SZXNwb25zZXMuYWRkKHJlc3BvbnNlLnJlbGVhc2VOb25OdWxsKCkp
OwotICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cisg
ICAgbV9hc3NlcnRpb25SZXNwb25zZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShyZXNwb25zZS0+
bnVtYmVyT2ZDcmVkZW50aWFscygpKTsKKyAgICBtX2Fzc2VydGlvblJlc3BvbnNlcy51bmNoZWNr
ZWRBcHBlbmQocmVzcG9uc2UucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgZHJpdmVyKCkudHJhbnNh
Y3QoZW5jb2RlRW1wdHlBdXRoZW50aWNhdG9yUmVxdWVzdChDdGFwUmVxdWVzdENvbW1hbmQ6OmtB
dXRoZW50aWNhdG9yR2V0TmV4dEFzc2VydGlvbiksIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0
aGlzKV0oVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkgewogICAgICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQpAQCAtMTkyLDE5ICsxOTIsMjUgQEAg
dm9pZCBDdGFwQXV0aGVudGljYXRvcjo6Y29udGludWVHZXROZXh0QXNzZXJ0aW9uQWZ0ZXJSZXNw
b25zZVJlY2VpdmVkKFZlY3Rvcjx1aW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX3Jl
bWFpbmluZ0Fzc2VydGlvblJlc3BvbnNlcy0tOwotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9hc3Nl
cnRpb25SZXNwb25zZXMuYWRkKHJlc3BvbnNlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIEFTU0VS
VF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgbV9hc3NlcnRp
b25SZXNwb25zZXMudW5jaGVja2VkQXBwZW5kKHJlc3BvbnNlLnJlbGVhc2VOb25OdWxsKCkpOwog
CiAgICAgaWYgKCFtX3JlbWFpbmluZ0Fzc2VydGlvblJlc3BvbnNlcykgewogICAgICAgICBpZiAo
YXV0byogb2JzZXJ2ZXIgPSB0aGlzLT5vYnNlcnZlcigpKSB7Ci0gICAgICAgICAgICBvYnNlcnZl
ci0+c2VsZWN0QXNzZXJ0aW9uUmVzcG9uc2UobV9hc3NlcnRpb25SZXNwb25zZXMsIFdlYkF1dGhl
bnRpY2F0aW9uU291cmNlOjpFeHRlcm5hbCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIo
KnRoaXMpXSAoQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlKiByZXNwb25zZSkgeworICAg
ICAgICAgICAgVmVjdG9yPFJlZjxBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2U+PiByZXNw
b25zZXNDb3B5OworICAgICAgICAgICAgcmVzcG9uc2VzQ29weS5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KG1fYXNzZXJ0aW9uUmVzcG9uc2VzLnNpemUoKSk7CisgICAgICAgICAgICBmb3IgKGF1dG8m
IHJlc3BvbnNlIDogbV9hc3NlcnRpb25SZXNwb25zZXMpCisgICAgICAgICAgICAgICAgcmVzcG9u
c2VzQ29weS51bmNoZWNrZWRBcHBlbmQocmVzcG9uc2UuY29weVJlZigpKTsKKworICAgICAgICAg
ICAgb2JzZXJ2ZXItPnNlbGVjdEFzc2VydGlvblJlc3BvbnNlKFdURk1vdmUocmVzcG9uc2VzQ29w
eSksIFdlYkF1dGhlbnRpY2F0aW9uU291cmNlOjpFeHRlcm5hbCwgW3RoaXMsIHdlYWtUaGlzID0g
bWFrZVdlYWtQdHIoKnRoaXMpXSAoQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlKiByZXNw
b25zZSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIGF1dG8gcmV0dXJuUmVzcG9uc2UgPSBtX2Fzc2VydGlvblJlc3BvbnNl
cy50YWtlKHJlc3BvbnNlKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJldHVyblJlc3BvbnNlKQor
ICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9hc3NlcnRpb25SZXNwb25zZXMuZmluZE1h
dGNoaW5nKFtleHBlY3RlZFJlc3BvbnNlID0gcmVzcG9uc2VdIChhdXRvJiByZXNwb25zZSkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UucHRyKCkgPT0gZXhwZWN0ZWRSZXNw
b25zZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09
IG5vdEZvdW5kKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
cmVjZWl2ZVJlc3BvbmQoV1RGTW92ZSgqcmV0dXJuUmVzcG9uc2UpKTsKKyAgICAgICAgICAgICAg
ICByZWNlaXZlUmVzcG9uZChtX2Fzc2VydGlvblJlc3BvbnNlc1tyZXN1bHRdLmNvcHlSZWYoKSk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBBdXRo
ZW50aWNhdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9m
aWRvL0N0YXBBdXRoZW50aWNhdG9yLmgKaW5kZXggNjRkZGU0NzE5MjVhMjg2ODU5NzE2OTBiMGVl
ODMwMzdiMzE5YmIwYi4uOTE1MDVjMDdkZTY1M2EwODA3YmNhYjcwZDY3MDIyZjQ0YzJjYjQ5NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlk
by9DdGFwQXV0aGVudGljYXRvci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1
dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0b3IuaApAQCAtNzMsNyArNzMsNyBAQCBw
cml2YXRlOgogICAgIGZpZG86OkF1dGhlbnRpY2F0b3JHZXRJbmZvUmVzcG9uc2UgbV9pbmZvOwog
ICAgIGJvb2wgbV9pc0Rvd25ncmFkZWQgeyBmYWxzZSB9OwogICAgIHNpemVfdCBtX3JlbWFpbmlu
Z0Fzc2VydGlvblJlc3BvbnNlcyB7IDAgfTsKLSAgICBIYXNoU2V0PFJlZjxXZWJDb3JlOjpBdXRo
ZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2U+PiBtX2Fzc2VydGlvblJlc3BvbnNlczsKKyAgICBW
ZWN0b3I8UmVmPFdlYkNvcmU6OkF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZT4+IG1fYXNz
ZXJ0aW9uUmVzcG9uc2VzOwogICAgIFZlY3Rvcjx1aW50OF90PiBtX3BpbkF1dGg7CiB9OwogCmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYjllMDJh
OGRmYzk3NWYyZGE3NTBkYmY3ZTJmZjM5NzU1ZWY4MTA3MC4uYTFkZDVkMTlkNThkYTNiNDM1MjE4
NDBlZDJiOWU1YjMwZGFiNTI1YyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIwLTA0LTI3ICBKaWV3ZW4gVGFuICA8
amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhuXSBPcHRpbWl6ZSBMb2Nh
bEF1dGhlbnRpY2F0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4MzUzNAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDMzNTc0MDg+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW06CisgICAgICAg
ICgtW1Rlc3RXZWJBdXRoZW50aWNhdGlvblBhbmVsRGVsZWdhdGUgcGFuZWw6c2VsZWN0QXNzZXJ0
aW9uUmVzcG9uc2U6c291cmNlOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VEVTVCk6CisgICAgICAgIEFkZHMgYSBuZXcgdGVzdCBjYXNlIGZvciB0aGUgTFJV
LgorCiAyMDIwLTA0LTI0ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgU1BJIGNsaWVudHMgdXNpbmcgZmFzdFNlcnZlclRydXN0RXZhbHVhdGlv
bkVuYWJsZWQgbmVlZCBTUEkgdG8gaW5mb3JtIHRoZW0gb2YgbW9kZXJuIFRMUyBuZWdvdGlhdGlv
bgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9fV0tX
ZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9fV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsLm1tCmluZGV4IDZiODJkYmE0ODQ2ZTk3
ZWRlNzkxMTBhZDcwZWVlNjRkY2Y2M2ViNzAuLmUyM2Y0MDJhOGY2M2E3NWIxOGM3NzJkZDMyOWUy
Y2IxYzViODAwMGMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL19XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWwubW0KQEAgLTYy
LDcgKzYyLDggQEAgc3RhdGljIFN0cmluZyB0ZXN0RVMyNTZQcml2YXRlS2V5QmFzZTY0ID0KICAg
ICAiQkRqL3p4U2t6S2dhQnVTM2NkV0RGNTU4b2Y4QWFJcGdGcHNqRi9RbTE3NDlWQkpQZ3FVSXdm
aFdISjkxbmI3VSIKICAgICAiUEg3NmMwK1dGT3paS3NsUHl5RnNlNGdvR0lXMlI3azlWSExQRVps
NW5mbkJnRVZGaDV6ZXYrL3hwSFFJdnVxNiIKICAgICAiUlE9PSI7Ci1zdGF0aWMgU3RyaW5nIHRl
c3RVc2VyRW50aXR5QnVuZGxlQmFzZTY0ID0gIm9tSnBaRW9BQVFJREJBVUdCd2dKWkc1aGJXVndR
VUZGUTBGM1VVWkNaMk5KUTFFOVBRPT0iOworc3RhdGljIFN0cmluZyB0ZXN0VXNlckVudGl0eUJ1
bmRsZUJhc2U2NCA9ICJvbUpwWkVvQUFRSURCQVVHQndnSlpHNWhiV1ZrU205b2JnPT0iOyAvLyB7
ICJpZCI6IGgnMDAwMTAyMDMwNDA1MDYwNzA4MDknLCAibmFtZSI6ICJKb2huIiB9CitzdGF0aWMg
U3RyaW5nIHdlYkF1dGhlbnRpY2F0aW9uUGFuZWxTZWxlY3RlZENyZWRlbnRpYWxOYW1lOwogCiBA
aW50ZXJmYWNlIFRlc3RXZWJBdXRoZW50aWNhdGlvblBhbmVsRGVsZWdhdGUgOiBOU09iamVjdCA8
X1dLV2ViQXV0aGVudGljYXRpb25QYW5lbERlbGVnYXRlPgogQGVuZApAQCAtMTM5LDYgKzE0MCwx
NCBAQCAtICh2b2lkKXBhbmVsOihfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsICopcGFuZWwgc2Vs
ZWN0QXNzZXJ0aW9uUmVzcG9uc2U6KE5TQXJyYQogICAgICAgICByZXR1cm47CiAgICAgfQogCisg
ICAgLy8gUmVzcG9uc2VzIHJldHVybmVkIGZyb20gTG9jYWxBdXRoZW50aWNhdG9yIGlzIGluIHRo
ZSBvcmRlciBvZiBMUlUuIFRoZXJlZm9yZSwgd2UgdXNlIHRoZSBsYXN0IGl0ZW0gdG8gcG9wdWxh
dGUgaXQgdG8KKyAgICAvLyB0aGUgZmlyc3QgdG8gdGVzdCBpdHMgY29ycmVjdG5lc3MuCisgICAg
aWYgKHNvdXJjZSA9PSBfV0tXZWJBdXRoZW50aWNhdGlvblNvdXJjZUxvY2FsKSB7CisgICAgICAg
IHdlYkF1dGhlbnRpY2F0aW9uUGFuZWxTZWxlY3RlZENyZWRlbnRpYWxOYW1lID0gcmVzcG9uc2Vz
Lmxhc3RPYmplY3QubmFtZTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVzcG9uc2VzLmxh
c3RPYmplY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgRVhQRUNUX0VRKHNvdXJj
ZSwgX1dLV2ViQXV0aGVudGljYXRpb25Tb3VyY2VFeHRlcm5hbCk7CiAgICAgRVhQRUNUX0VRKHJl
c3BvbnNlcy5jb3VudCwgMnVsKTsKICAgICBmb3IgKF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0
aW9uUmVzcG9uc2UgKnJlc3BvbnNlIGluIHJlc3BvbnNlcykgewpAQCAtMzAwLDYgKzMwOSw3IEBA
IHN0YXRpYyB2b2lkIHJlc2V0KCkKICAgICB3ZWJBdXRoZW50aWNhdGlvblBhbmVsUGluID0gZW1w
dHlTdHJpbmcoKTsKICAgICB3ZWJBdXRoZW50aWNhdGlvblBhbmVsTnVsbFVzZXJIYW5kbGUgPSBO
TzsKICAgICBsb2NhbEF1dGhlbnRpY2F0b3JQb2xpY3kgPSBfV0tMb2NhbEF1dGhlbnRpY2F0b3JQ
b2xpY3lEaXNhbGxvdzsKKyAgICB3ZWJBdXRoZW50aWNhdGlvblBhbmVsU2VsZWN0ZWRDcmVkZW50
aWFsTmFtZSA9IGVtcHR5U3RyaW5nKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNoZWNrUGFuZWwoX1dL
V2ViQXV0aGVudGljYXRpb25QYW5lbCAqcGFuZWwsIE5TU3RyaW5nICpyZWx5aW5nUGFydHlJRCwg
TlNBcnJheSAqdHJhbnNwb3J0cywgX1dLV2ViQXV0aGVudGljYXRpb25UeXBlIHR5cGUpCkBAIC0x
Mjk0LDYgKzEzMDQsNyBAQCBURVNUKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIExBTWFrZUNyZWRl
bnRpYWxBbGxvd0xvY2FsQXV0aGVudGljYXRvcikKIAogLy8gU2tpcCB0aGUgdGVzdCBiZWNhdXNl
IG9mIDxyZGFyOi8vcHJvYmxlbS81OTYzNTQ4Nj4uCiAjaWYgUExBVEZPUk0oTUFDKQorCiBURVNU
KFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIExBR2V0QXNzZXJ0aW9uKQogewogICAgIHJlc2V0KCk7
CkBAIC0xMzEzLDYgKzEzMjQsMzQgQEAgVEVTVChXZWJBdXRoZW50aWNhdGlvblBhbmVsLCBMQUdl
dEFzc2VydGlvbikKICAgICBjaGVja1BhbmVsKFtkZWxlZ2F0ZSBwYW5lbF0sIEAiIiwgQFthZG9w
dE5TKFtbTlNOdW1iZXIgYWxsb2NdIGluaXRXaXRoSW50Ol9XS1dlYkF1dGhlbnRpY2F0aW9uVHJh
bnNwb3J0VVNCXSkuZ2V0KCksIGFkb3B0TlMoW1tOU051bWJlciBhbGxvY10gaW5pdFdpdGhJbnQ6
X1dLV2ViQXV0aGVudGljYXRpb25UcmFuc3BvcnRJbnRlcm5hbF0pLmdldCgpXSwgX1dLV2ViQXV0
aGVudGljYXRpb25UeXBlR2V0KTsKICAgICBjbGVhblVwS2V5Y2hhaW4oIiIpOwogfQorCitURVNU
KFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwsIExBR2V0QXNzZXJ0aW9uTXVsdGlwbGVPcmRlcikKK3sK
KyAgICByZXNldCgpOworICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUg
bWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJ3ZWItYXV0aGVudGljYXRpb24tZ2V0LWFzc2Vy
dGlvbi1sYSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRB
UEkucmVzb3VyY2VzIl07CisKKyAgICBhdXRvICpjb25maWd1cmF0aW9uID0gW1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gX3Rlc3RfY29uZmlndXJhdGlvbldpdGhUZXN0UGx1Z0luQ2xhc3NOYW1lOkAi
V2ViUHJvY2Vzc1BsdWdJbldpdGhJbnRlcm5hbHMiIGNvbmZpZ3VyZUpTQ0ZvclRlc3Rpbmc6WUVT
XTsKKyAgICBbW2NvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdIF9zZXRFbmFibGVkOllFUyBmb3JF
eHBlcmltZW50YWxGZWF0dXJlOndlYkF1dGhlbnRpY2F0aW9uRXhwZXJpbWVudGFsRmVhdHVyZSgp
XTsKKyAgICBbW2NvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdIF9zZXRFbmFibGVkOllFUyBmb3JF
eHBlcmltZW50YWxGZWF0dXJlOndlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yRXhw
ZXJpbWVudGFsRmVhdHVyZSgpXTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TWmVyb1JlY3QgY29uZmlndXJhdGlvbjpj
b25maWd1cmF0aW9uXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0V2ViQXV0
aGVudGljYXRpb25QYW5lbFVJRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBbd2ViVmlldyBz
ZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIEFTU0VSVF9UUlVFKGFkZEtleVRv
S2V5Y2hhaW4odGVzdEVTMjU2UHJpdmF0ZUtleUJhc2U2NCwgIiIsIHRlc3RVc2VyRW50aXR5QnVu
ZGxlQmFzZTY0KSk7CisgICAgQVNTRVJUX1RSVUUoYWRkS2V5VG9LZXljaGFpbigiQkJSb2kySmJS
MElYVGVKbXZYVXAxWUl1TTRzcGgvTHUzZUdmNzVGN24rSG9qSEtHNzBhNFIwckIyUFFjZTUvU0ps
ZTZUN09PNUNxZXQvTEpaVk02TlE4eUREeFd2YXlmNzFHVERwMnlVdHVJYnFKTEZWYnBXeW1sajlX
Uml6Z1gzQT09IiwgIiIsICJvbUpwWkVvQUFRSURCQVVHQndnSlpHNWhiV1ZrU21GdVpRPT0iLyog
eyAiaWQiOiBoJzAwMDEwMjAzMDQwNTA2MDcwODA5JywgIm5hbWUiOiAiSmFuZSIgfSAqLykpOwor
CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0
ZXN0VVJMLmdldCgpXV07CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJTdWNjZWVkZWQh
Il07CisgICAgRVhQRUNUX1dLX1NUUkVRKHdlYkF1dGhlbnRpY2F0aW9uUGFuZWxTZWxlY3RlZENy
ZWRlbnRpYWxOYW1lLCAiSm9obiIpOworCisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJM
UmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CisgICAgW3dlYlZpZXcgd2Fp
dEZvck1lc3NhZ2U6QCJTdWNjZWVkZWQhIl07CisgICAgRVhQRUNUX1dLX1NUUkVRKHdlYkF1dGhl
bnRpY2F0aW9uUGFuZWxTZWxlY3RlZENyZWRlbnRpYWxOYW1lLCAiSmFuZSIpOworCisgICAgY2xl
YW5VcEtleWNoYWluKCIiKTsKK30KKwogI2VuZGlmCiAKICNlbmRpZiAvLyBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKSB8fCBQTEFURk9STShJT1MpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>