<?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>180853</bug_id>
          
          <creation_ts>2017-12-14 17:24:20 -0800</creation_ts>
          <short_desc>[Attachment Support] Insert images as inline attachments when pasting and dropping</short_desc>
          <delta_ts>2017-12-18 18:51:09 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</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>180892</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>mitz</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1381929</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-12-14 17:24:20 -0800</bug_when>
    <thetext>&lt;rdar://problem/35756268&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382023</commentid>
    <comment_count>1</comment_count>
      <attachid>329447</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-12-14 19:36:59 -0800</bug_when>
    <thetext>Created attachment 329447
First pass</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382285</commentid>
    <comment_count>2</comment_count>
      <attachid>329514</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-12-15 13:34:45 -0800</bug_when>
    <thetext>Created attachment 329514
Slight test tweaks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382842</commentid>
    <comment_count>3</comment_count>
      <attachid>329514</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-12-18 13:13:52 -0800</bug_when>
    <thetext>Comment on attachment 329514
Slight test tweaks

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

&gt; Source/WebCore/editing/cocoa/WebContentReaderCocoa.mm:425
&gt; +    HashMap&lt;AtomicString, RefPtr&lt;Blob&gt;&gt; urlToBlobMap;

Is it at all possible to factor this out? It seems like these same four lines show up a bunch of times.

&gt; Source/WebCore/html/HTMLAttachmentElement.cpp:127
&gt; +            setAttributeWithoutSynchronization(HTMLNames::titleAttr, m_file-&gt;name());

I swear I&apos;ve seen this code before</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382863</commentid>
    <comment_count>4</comment_count>
      <attachid>329514</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-12-18 13:34:11 -0800</bug_when>
    <thetext>Comment on attachment 329514
Slight test tweaks

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

&gt;&gt; Source/WebCore/editing/cocoa/WebContentReaderCocoa.mm:425
&gt;&gt; +    HashMap&lt;AtomicString, RefPtr&lt;Blob&gt;&gt; urlToBlobMap;
&gt; 
&gt; Is it at all possible to factor this out? It seems like these same four lines show up a bunch of times.

Good idea — fixed.

&gt;&gt; Source/WebCore/html/HTMLAttachmentElement.cpp:127
&gt;&gt; +            setAttributeWithoutSynchronization(HTMLNames::titleAttr, m_file-&gt;name());
&gt; 
&gt; I swear I&apos;ve seen this code before

It&apos;s also in HTMLAttachmentElement::updateFileWithData. I&apos;m not sure why I avoided refactoring that to use this new logic, but at a second glance, you&apos;re right — it totally should just call into this code instead. Fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382910</commentid>
    <comment_count>5</comment_count>
      <attachid>329685</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-12-18 14:32:05 -0800</bug_when>
    <thetext>Created attachment 329685
Patch for EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382963</commentid>
    <comment_count>6</comment_count>
      <attachid>329685</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-18 16:19:22 -0800</bug_when>
    <thetext>Comment on attachment 329685
Patch for EWS.

Clearing flags on attachment: 329685

Committed r226085: &lt;https://trac.webkit.org/changeset/226085&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329447</attachid>
            <date>2017-12-14 19:36:59 -0800</date>
            <delta_ts>2017-12-15 13:34:44 -0800</delta_ts>
            <desc>First pass</desc>
            <filename>bug-180853-20171214193658.patch</filename>
            <type>text/plain</type>
            <size>40591</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1OTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWMwNGVjNzViNDM0N2Rj
Y2E3ZDVhNmFjZWRiYTU1MWM0MzA5ZDU5MC4uYjYzZDU3NzFjOTRiYThhNTA3ZmViOWZkOWQ5OGNl
ZWZkY2M2MDFkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDE3LTEyLTE0ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtBdHRhY2htZW50
IFN1cHBvcnRdIEluc2VydCBpbWFnZXMgYXMgaW5saW5lIGF0dGFjaG1lbnRzIHdoZW4gcGFzdGlu
ZyBhbmQgZHJvcHBpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4MDg1MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzU3NTYyNjg+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBzdXBwb3J0IGZv
ciB0cmFuc2Zvcm1pbmcgZHJvcHBlZCBhbmQgcGFzdGVkIHdlYiBjb250ZW50IGZyYWdtZW50cyBw
cmlvciB0byBpbnNlcnRpb24sIHN1Y2ggdGhhdCBpbmxpbmUKKyAgICAgICAgZWxlbWVudHMgKHNv
IGZhciwgb25seSBpbWFnZXMpIGFyZSByZXBsYWNlZCB3aXRoIGF0dGFjaG1lbnQgZWxlbWVudHMg
dGhhdCBoYXZlIGFuIGlubGluZSByZXByZXNlbnRhdGlvbi4gU2VlCisgICAgICAgIGJlbG93IGNv
bW1lbnRzIGZvciBtb3JlIGRldGFpbC4KKworICAgICAgICBUZXN0czogV0tBdHRhY2htZW50VGVz
dHMuSW5zZXJ0UGFzdGVkSW1hZ2VBc0F0dGFjaG1lbnQKKyAgICAgICAgICAgICAgIFdLQXR0YWNo
bWVudFRlc3RzLkluc2VydFBhc3RlZEF0dHJpYnV0ZWRTdHJpbmdDb250YWluaW5nQXR0YWNobWVu
dHMKKyAgICAgICAgICAgICAgIFdLQXR0YWNobWVudFRlc3RzTWFjLkluc2VydFBhc3RlZEZpbGVV
UkxzQXNBdHRhY2htZW50cworICAgICAgICAgICAgICAgV0tBdHRhY2htZW50VGVzdHNJT1MuSW5z
ZXJ0RHJvcHBlZEltYWdlQXNBdHRhY2htZW50CisgICAgICAgICAgICAgICBXS0F0dGFjaG1lbnRU
ZXN0c0lPUy5JbnNlcnREcm9wcGVkQXR0cmlidXRlZFN0cmluZ0NvbnRhaW5pbmdBdHRhY2htZW50
cworCisgICAgICAgICogZWRpdGluZy9XZWJDb250ZW50UmVhZGVyLmg6CisgICAgICAgICogZWRp
dGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVw
bGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKToKKyAgICAgICAgKiBlZGl0aW5nL2Nv
Y29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OnJlcGxhY2VS
aWNoQ29udGVudFdpdGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5KToKKworICAgICAgICBBZGQgYSBu
ZXcgaGVscGVyIHRvIHJlcGxhY2UgZWxlbWVudHMgaW4gYSBET00gZnJhZ21lbnQgd2l0aCBpbmxp
bmUgYXR0YWNobWVudCBlbGVtZW50cyBpbnN0ZWFkLCB1c2luZyB0aGUgZ2l2ZW4KKyAgICAgICAg
QmxvYnMuIFNvIGZhciwgd2Ugb25seSByZXBsYWNlIGltYWdlIGVsZW1lbnRzIHdpdGggdGhlc2Ug
YXR0YWNobWVudHMsIGJ5IG1hcHBpbmcgdGhlIHNvdXJjZSBvZiBlYWNoIGltYWdlIHRvIGEKKyAg
ICAgICAgQmxvYiwgYW5kIGNvbnN0cnVjdGluZyBhIHJlcGxhY2VtZW50IGF0dGFjaG1lbnQgYmFj
a2VkIGJ5IGEgRmlsZSBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBpbWFnZSdzIGNvcnJlc3BvbmRpbmcK
KyAgICAgICAgQmxvYi4gSG93ZXZlciwgdGhpcyBtZWNoYW5pc20gY2FuIGJlIGdlbmVyYWxpemVk
IGluIHRoZSBmdXR1cmUgdG8gaGFuZGxlIHRyYW5zZm9ybWF0aW9ucyBmcm9tIGFyYml0cmFyeSBl
bGVtZW50cworICAgICAgICB0byBhdHRhY2htZW50IGVsZW1lbnRzIGNhcGFibGUgb2YgcmVwcmVz
ZW50aW5nIHRoZSBzYW1lIGVsZW1lbnRzIHVzaW5nIGlubGluZSBkaXNwbGF5IG1vZGUuCisKKyAg
ICAgICAgVGhpcyBmdW5jdGlvbiBpcyBhIG5vb3AgaWYgdGhlIGF0dGFjaG1lbnQgZWxlbWVudHMg
YXJlIGRpc2FibGVkIHZpYSBydW50aW1lLWVuYWJsZWQgZmVhdHVyZXMuCisKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OnNhbml0aXplTWFya3VwV2l0aEFyY2hpdmUpOgorCisgICAgICAgIEFkZCBvdXQtcGFyYW1zIHRv
IGJvdGggb2YgdGhlc2UgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IGNhcHR1cmUgdGhlIG1hcCBvZiBi
bG9iIFVSTHMgdG8gQmxvYnMgYmVpbmcgdXNlZCB0bworICAgICAgICByZXBsYWNlIHN1YnJlc291
cmNlIFVSTHMgaW4gdGhlIHBhc3RlZC9kcm9wcGVkIERPTSBmcmFnbWVudC4KKworICAgICAgICAo
V2ViQ29yZTo6V2ViQ29udGVudFJlYWRlcjo6cmVhZFdlYkFyY2hpdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViQ29udGVudE1hcmt1cFJlYWRlcjo6cmVhZFdlYkFyY2hpdmUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViQ29udGVudFJlYWRlcjo6cmVhZFJURkQpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViQ29udGVudE1hcmt1cFJlYWRlcjo6cmVhZFJURkQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
Q29udGVudFJlYWRlcjo6cmVhZFJURik6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb250ZW50TWFy
a3VwUmVhZGVyOjpyZWFkUlRGKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRSZWFkZXI6
OnJlYWRJbWFnZSk6CisKKyAgICAgICAgSW4gdGhlc2UgcGxhY2VzIHdoZXJlIHdlIHN3YXAgb3V0
IHN1YnJlc291cmNlIFVSTHMgZm9yIGJsb2IgVVJMcywgY29sbGVjdCBhIG1hcCBvZiBibG9iIFVS
TCA9PiBCbG9iLCBhbmQgdXNlIGl0CisgICAgICAgIHRvIHJlcGxhY2UgaW1hZ2VzIGluIHRoZSBE
T00gd2l0aCBhdHRhY2htZW50cyAoaWYgbmVlZGVkLCBhbmQgcG9zc2libGUpLgorCisgICAgICAg
ICogZWRpdGluZy9tYWMvV2ViQ29udGVudFJlYWRlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRGaWxlbmFtZXMpOgorCisgICAgICAgIEF1Z21lbnQgZXhp
c3RpbmcgbG9naWMgdG8gZ2VuZXJhdGUgYXR0YWNobWVudCBlbGVtZW50cyB3aGVuIHBhc3Rpbmcg
b3IgZHJvcHBpbmcgZmlsZSBVUkxzLCBzbyB0aGF0IHRoZSBnZW5lcmF0ZWQKKyAgICAgICAgYXR0
YWNobWVudCBlbGVtZW50cyBhbHNvIGhhdmUgdGl0bGVzLCBzdWJ0aXRsZXMsIGFuZCBjb250ZW50
IHR5cGUgaW5mb3JtYXRpb24uCisKKyAgICAgICAgKiBodG1sL0hUTUxBdHRhY2htZW50RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXR0YWNobWVudEVsZW1lbnQ6OnNldEZpbGUp
OgorCisgICAgICAgIEFkZCBhbiBvcHRpb25hbCBzZWNvbmQgcGFyYW0sIFVwZGF0ZURpc3BsYXlB
dHRyaWJ1dGVzLiBJZiBVcGRhdGVEaXNwbGF5QXR0cmlidXRlczo6WWVzIGlzIHBhc3NlZCBpbiwg
dGhlbiB3ZSBzZXQKKyAgICAgICAgdGhlIGVsZW1lbnRzJ3MgYXR0cmlidXRlcyB0aGF0IGFyZSBk
aXNwbGF5ZWQgaW4gdGhlIGF0dGFjaG1lbnQgcmVwcmVzZW50YXRpb24gKHRpdGxlLCBzdWJ0aXRs
ZSwgYW5kIHR5cGUpIHVzaW5nCisgICAgICAgIHRoZSBnaXZlbiBGaWxlLgorCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQXR0YWNobWVudEVsZW1lbnQ6OnBvcHVsYXRlU2hhZG93Um9vdElmTmVjZXNz
YXJ5KToKKworICAgICAgICBNYWtlIGEgc21hbGwgdHdlYWsgdG8gY29ycmVjdGx5IGhhbmRsZSB0
aGUgY2FzZSB3aGVyZSBhbiBhdHRhY2htZW50IHdpdGggYSBjb250ZW50IHR5cGUgdGhhdCBpcyBh
IFVUSSBpcyBiZWluZworICAgICAgICBkaXNwbGF5ZWQgaW5saW5lLiBDb250ZW50IHR5cGUgY2Fu
IGVpdGhlciBiZSBhIFVUSSBvciBhIE1JTUUgdHlwZSwgYnV0IHRoZSBjb2RlIHRvIGNvbnN0cnVj
dCB0aGUgc2hhZG93IHRyZWUgb2YKKyAgICAgICAgYW4gYXR0YWNobWVudCBlbGVtZW50IG9ubHkg
aGFuZGxlcyBNSU1FIHR5cGVzLgorCisgICAgICAgICogaHRtbC9IVE1MQXR0YWNobWVudEVsZW1l
bnQuaDoKKwogMjAxNy0xMi0xNCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAK
ICAgICAgICAgc3JmbHggYW5kIHJlbGF5IElDRSBjYW5kaWRhdGVzIGxhY2sgcmFkZHIgKHJlbC1h
ZGRyKSBhbmQgcnBvcnQgKHJlbC1wb3J0KSBhdHRyaWJ1dGVzIGlmIGdldFVzZXJNZWRpYSBhY2Nl
c3MgaGFzIG5vdCBiZWVuIGdyYW50ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvV2ViQ29udGVudFJlYWRlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb250ZW50
UmVhZGVyLmgKaW5kZXggZWZhZTVmM2RkMWM0NDIzYTNmYzAwMDZjMGI2ZjBjYTlmNjkzZDliYy4u
YjBjNWI3NjRiYjg0ODUxZjQ2ZjA3YmUzNzk0ZTExOTgzMWIxMDJiNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb250ZW50UmVhZGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9XZWJDb250ZW50UmVhZGVyLmgKQEAgLTMyLDYgKzMyLDcgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgQXJjaGl2ZVJlc291cmNlOworY2xhc3MgQmxvYjsKIAogY2xh
c3MgRnJhbWVXZWJDb250ZW50UmVhZGVyIDogcHVibGljIFBhc3RlYm9hcmRXZWJDb250ZW50UmVh
ZGVyIHsKIHB1YmxpYzoKQEAgLTEwNSw3ICsxMDYsOCBAQCBzdHJ1Y3QgRnJhZ21lbnRBbmRSZXNv
dXJjZXMgewogICAgIFZlY3RvcjxSZWY8QXJjaGl2ZVJlc291cmNlPj4gcmVzb3VyY2VzOwogfTsK
IAotUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2Vz
KEZyYW1lJiwgTlNBdHRyaWJ1dGVkU3RyaW5nKik7Cit2b2lkIHJlcGxhY2VSaWNoQ29udGVudFdp
dGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5KERvY3VtZW50RnJhZ21lbnQmLCBIYXNoTWFwPEF0b21p
Y1N0cmluZywgUmVmUHRyPEJsb2I+PiYmIHVybFRvQmxvYk1hcCk7CitSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoRnJhbWUmLCBOU0F0dHJpYnV0
ZWRTdHJpbmcqLCBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEJsb2I+PiYgdXJsVG9CbG9i
TWFwKTsKICNlbmRpZgogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0VkaXRvckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JD
b2NvYS5tbQppbmRleCA1M2IxMjdlZDRlMGNmMTg1YmE1ZmQzN2M1YWVkOWE5NWZjYjQ3Zjc5Li44
Yjg2OTdmYTQ4MmNhYTZmOTUwMjM4MTU1MjE1NTMxZmMwZDg1NDc1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KQEAgLTIyMiw5ICsyMjIsMTIgQEAgdm9p
ZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0
ZWRTdHJpbmcgKmF0dHJpYnV0ZWQKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewotICAg
ICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEFu
ZEFkZFJlc291cmNlcyhtX2ZyYW1lLCBhdHRyaWJ1dGVkU3RyaW5nKTsKLSAgICAgICAgaWYgKGZy
YWdtZW50ICYmIHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgc2VsZWN0ZWRSYW5nZSgp
LmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCi0gICAgICAgICAgICBwYXN0ZUFz
RnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwgZmFsc2UsIGZhbHNlLCBtYWlsQmxv
Y2txdW90ZUhhbmRsaW5nKTsKKyAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxC
bG9iPj4gdXJsVG9CbG9iTWFwOworICAgICAgICBpZiAoYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZy
YWdtZW50QW5kQWRkUmVzb3VyY2VzKG1fZnJhbWUsIGF0dHJpYnV0ZWRTdHJpbmcsIHVybFRvQmxv
Yk1hcCkpIHsKKyAgICAgICAgICAgIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2htZW50c0lm
TmVjZXNzYXJ5KCpmcmFnbWVudCwgV1RGTW92ZSh1cmxUb0Jsb2JNYXApKTsKKyAgICAgICAgICAg
IGlmIChzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHNlbGVjdGVkUmFuZ2UoKS5nZXQo
KSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgICAgICAgICAgICAgIHBhc3RlQXNG
cmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBmYWxzZSwgZmFsc2UsIG1haWxCbG9j
a3F1b3RlSGFuZGxpbmcpOworICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgU3RyaW5n
IHRleHQgPSBhdHRyaWJ1dGVkU3RyaW5nLnN0cmluZzsKICAgICAgICAgaWYgKHNob3VsZEluc2Vy
dFRleHQodGV4dCwgc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBh
c3RlZCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRl
bnRSZWFkZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVu
dFJlYWRlckNvY29hLm1tCmluZGV4IGI2MDk5NDEyMDMwZGEzMGI5YWM1ODgyNjg5ZmFmYjI1MTY4
ODQ1NGIuLmM4ZmI0NmZjNDBkODJmMGMxMzczZGFjM2ZlZTIwNGZhMDE4Mzg3YzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29h
Lm1tCkBAIC0zNCw5ICszNCwxMSBAQAogI2ltcG9ydCAiRG9jdW1lbnQuaCIKICNpbXBvcnQgIkRv
Y3VtZW50RnJhZ21lbnQuaCIKICNpbXBvcnQgIkRvY3VtZW50TG9hZGVyLmgiCisjaW1wb3J0ICJG
aWxlLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVMb2FkZXIuaCIKICNpbXBv
cnQgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW1wb3J0ICJIVE1MQXR0YWNobWVudEVsZW1lbnQu
aCIKICNpbXBvcnQgIkhUTUxCb2R5RWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTElGcmFtZUVsZW1l
bnQuaCIKICNpbXBvcnQgIkhUTUxJbWFnZUVsZW1lbnQuaCIKQEAgLTQ0LDYgKzQ2LDcgQEAKICNp
bXBvcnQgIk1haW5GcmFtZS5oIgogI2ltcG9ydCAiUGFnZS5oIgogI2ltcG9ydCAiUHVibGljVVJM
TWFuYWdlci5oIgorI2ltcG9ydCAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2ltcG9ydCAi
U2V0dGluZ3MuaCIKICNpbXBvcnQgIlNvY2tldFByb3ZpZGVyLmgiCiAjaW1wb3J0ICJXZWJBcmNo
aXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1dGVkU3RyaW5nLmgiCkBAIC01Miw2ICs1NSw3IEBACiAj
aW1wb3J0ICJtYXJrdXAuaCIKICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvTlNBdHRyaWJ1dGVkU3Ry
aW5nU1BJLmg+CiAjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKyNpbXBvcnQgPHd0Zi9VVUlE
Lmg+CiAKICNpZiAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSAxMTAwMDApIHx8IChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTAxMzAwKQogQGludGVyZmFjZSBOU0F0dHJpYnV0ZWRTdHJpbmcgKCkK
QEAgLTY5LDYgKzczLDU0IEBAIFNPRlRfTElOSyhXZWJLaXRMZWdhY3ksIF9XZWJDcmVhdGVGcmFn
bWVudCwgdm9pZCwgKFdlYkNvcmU6OkRvY3VtZW50JiBkb2N1bWVudCwKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCisjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKKwordm9pZCByZXBsYWNl
UmljaENvbnRlbnRXaXRoQXR0YWNobWVudHNJZk5lY2Vzc2FyeShEb2N1bWVudEZyYWdtZW50JiBm
cmFnbWVudCwgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxCbG9iPj4mJiB1cmxUb0Jsb2JN
YXApCit7CisgICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LmF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZCgpIHx8IHVybFRvQmxvYk1hcC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxzdGQ6OnBhaXI8UmVmPEZpbGU+LCBSZWY8RWxl
bWVudD4+PiBmaWxlc0ZvckVsZW1lbnRzVG9SZXBsYWNlOworICAgIGZvciAoYXV0byYgaW1hZ2Ug
OiBkZXNjZW5kYW50c09mVHlwZTxIVE1MSW1hZ2VFbGVtZW50PihmcmFnbWVudCkpIHsKKyAgICAg
ICAgYXV0byB1cmwgPSBpbWFnZS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxO
YW1lczo6c3JjQXR0cik7CisKKyAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBhdXRvIGJsb2IgPSB1cmxUb0Jsb2JNYXAuZ2V0KHVybCk7
CisgICAgICAgIGlmICghYmxvYikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1
dG8gdGl0bGUgPSBpbWFnZS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1l
czo6dGl0bGVBdHRyKTsKKyAgICAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHRpdGxlID0gQXRvbWljU3RyaW5nKCJtZWRpYSIpOworCisgICAgICAgIGZpbGVzRm9yRWxlbWVu
dHNUb1JlcGxhY2UuYXBwZW5kKHsgRmlsZTo6Y3JlYXRlKCpibG9iLCB0aXRsZSksIGltYWdlIH0p
OworICAgIH0KKworICAgIGZvciAoYXV0byYgZmlsZUFuZEVsZW1lbnQgOiBmaWxlc0ZvckVsZW1l
bnRzVG9SZXBsYWNlKSB7CisgICAgICAgIGF1dG8mIGZpbGUgPSBmaWxlQW5kRWxlbWVudC5maXJz
dDsKKyAgICAgICAgYXV0byYgZWxlbWVudFRvUmVwbGFjZSA9IGZpbGVBbmRFbGVtZW50LnNlY29u
ZDsKKyAgICAgICAgYXV0byBwYXJlbnQgPSBtYWtlUmVmUHRyKGVsZW1lbnRUb1JlcGxhY2UtPnBh
cmVudE5vZGUoKSk7CisgICAgICAgIGlmICghcGFyZW50KQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgYXV0byBhdHRhY2htZW50ID0gSFRNTEF0dGFjaG1lbnRFbGVtZW50OjpjcmVh
dGUoSFRNTE5hbWVzOjphdHRhY2htZW50VGFnLCBmcmFnbWVudC5kb2N1bWVudCgpKTsKKyAgICAg
ICAgYXR0YWNobWVudC0+c2V0VW5pcXVlSWRlbnRpZmllcihjcmVhdGVDYW5vbmljYWxVVUlEU3Ry
aW5nKCkpOworICAgICAgICBhdHRhY2htZW50LT5zZXRGaWxlKFdURk1vdmUoZmlsZSksIEhUTUxB
dHRhY2htZW50RWxlbWVudDo6VXBkYXRlRGlzcGxheUF0dHJpYnV0ZXM6Olllcyk7CisgICAgICAg
IGF0dGFjaG1lbnQtPnVwZGF0ZURpc3BsYXlNb2RlKEF0dGFjaG1lbnREaXNwbGF5TW9kZTo6SW5Q
bGFjZSk7CisgICAgICAgIHBhcmVudC0+cmVwbGFjZUNoaWxkKGF0dGFjaG1lbnQsIGVsZW1lbnRU
b1JlcGxhY2UpOworICAgIH0KK30KKworI2Vsc2UKKwordm9pZCByZXBsYWNlUmljaENvbnRlbnRX
aXRoQXR0YWNobWVudHNJZk5lY2Vzc2FyeShEb2N1bWVudEZyYWdtZW50JiwgSGFzaE1hcDxBdG9t
aWNTdHJpbmcsIFJlZlB0cjxCbG9iPj4mJikKK3sKK30KKworI2VuZGlmCisKICNpZiAoUExBVEZP
Uk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAwMDApIHx8
IChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAx
MzAwKQogCiBzdGF0aWMgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzRm9yQXR0cmlidXRlZFN0cmlu
Z0NvbnZlcnNpb24oKQpAQCAtMTU5LDcgKzIxMSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2Rp
ZERpc2FibGVJbWFnZSB7IGZhbHNlIH07CiB9OwogCi1SZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
Y3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoRnJhbWUmIGZyYW1lLCBOU0F0dHJpYnV0ZWRT
dHJpbmcgKnN0cmluZykKK1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEFu
ZEFkZFJlc291cmNlcyhGcmFtZSYgZnJhbWUsIE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nLCBI
YXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEJsb2I+PiYgdXJsVG9CbG9iTWFwKQogewogICAg
IGlmICghZnJhbWUucGFnZSgpIHx8ICFmcmFtZS5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTE3OCw2ICsyMzAsNyBAQCBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3Jl
YXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoRnJhbWUmIGZyYW1lLCBOU0F0dHJpYnV0ZQogICAg
ICAgICBhdXRvIGJsb2IgPSBCbG9iOjpjcmVhdGUoc3VicmVzb3VyY2UtPmRhdGEoKSwgc3VicmVz
b3VyY2UtPm1pbWVUeXBlKCkpOwogICAgICAgICBTdHJpbmcgYmxvYlVSTCA9IERPTVVSTDo6Y3Jl
YXRlT2JqZWN0VVJMKGRvY3VtZW50LCBibG9iKTsKICAgICAgICAgYmxvYlVSTE1hcC5zZXQoc3Vi
cmVzb3VyY2UtPnVybCgpLnN0cmluZygpLCBibG9iVVJMKTsKKyAgICAgICAgdXJsVG9CbG9iTWFw
LnNldChibG9iVVJMLCBXVEZNb3ZlKGJsb2IpKTsKICAgICB9CiAgICAgcmVwbGFjZVN1YnJlc291
cmNlVVJMcygqZnJhZ21lbnRBbmRSZXNvdXJjZXMuZnJhZ21lbnQsIFdURk1vdmUoYmxvYlVSTE1h
cCkpOwogCkBAIC0yMDcsNyArMjYwLDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TWFya3VwQW5k
QXJjaGl2ZT4gZXh0cmFjdE1hcmt1cEFuZEFyY2hpdmUoU2hhcmVkQnVmZmVyJiBidWYKICAgICBy
ZXR1cm4gTWFya3VwQW5kQXJjaGl2ZSB7IFN0cmluZzo6ZnJvbVVURjgobWFpblJlc291cmNlLT5k
YXRhKCkuZGF0YSgpLCBtYWluUmVzb3VyY2UtPmRhdGEoKS5zaXplKCkpLCBtYWluUmVzb3VyY2Uu
cmVsZWFzZU5vbk51bGwoKSwgYXJjaGl2ZS5yZWxlYXNlTm9uTnVsbCgpIH07CiB9CiAKLXN0YXRp
YyBTdHJpbmcgc2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZShEb2N1bWVudCYgZGVzdGluYXRpb25E
b2N1bWVudCwgTWFya3VwQW5kQXJjaGl2ZSYgbWFya3VwQW5kQXJjaGl2ZSwgY29uc3Qgc3RkOjpm
dW5jdGlvbjxib29sKGNvbnN0IFN0cmluZyk+JiBjYW5TaG93TUlNRVR5cGVBc0hUTUwpCitzdGF0
aWMgU3RyaW5nIHNhbml0aXplTWFya3VwV2l0aEFyY2hpdmUoRG9jdW1lbnQmIGRlc3RpbmF0aW9u
RG9jdW1lbnQsIE1hcmt1cEFuZEFyY2hpdmUmIG1hcmt1cEFuZEFyY2hpdmUsIGNvbnN0IHN0ZDo6
ZnVuY3Rpb248Ym9vbChjb25zdCBTdHJpbmcpPiYgY2FuU2hvd01JTUVUeXBlQXNIVE1MLCBIYXNo
TWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEJsb2I+PiYgdXJsVG9CbG9iTWFwKQogewogICAgIGF1
dG8gcGFnZSA9IGNyZWF0ZVBhZ2VGb3JTYW5pdGl6aW5nV2ViQ29udGVudCgpOwogICAgIERvY3Vt
ZW50KiBzdGFnaW5nRG9jdW1lbnQgPSBwYWdlLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpOwpAQCAt
MjE5LDYgKzI3Miw3IEBAIHN0YXRpYyBTdHJpbmcgc2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZShE
b2N1bWVudCYgZGVzdGluYXRpb25Eb2N1bWVudCwgTWFya3VwQW5kCiAgICAgICAgIGF1dG8gYmxv
YiA9IEJsb2I6OmNyZWF0ZShzdWJyZXNvdXJjZS0+ZGF0YSgpLCBzdWJyZXNvdXJjZS0+bWltZVR5
cGUoKSk7CiAgICAgICAgIFN0cmluZyBibG9iVVJMID0gRE9NVVJMOjpjcmVhdGVPYmplY3RVUkwo
ZGVzdGluYXRpb25Eb2N1bWVudCwgYmxvYik7CiAgICAgICAgIGJsb2JVUkxNYXAuc2V0KHN1YnJl
c291cmNlLT51cmwoKS5zdHJpbmcoKSwgYmxvYlVSTCk7CisgICAgICAgIHVybFRvQmxvYk1hcC5z
ZXQoYmxvYlVSTCwgV1RGTW92ZShibG9iKSk7CiAgICAgfQogCiAgICAgYXV0byBjb250ZW50T3Jp
Z2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShtYXJrdXBBbmRBcmNoaXZlLm1haW5SZXNvdXJj
ZS0+dXJsKCkpOwpAQCAtMjM0LDcgKzI4OCw3IEBAIHN0YXRpYyBTdHJpbmcgc2FuaXRpemVNYXJr
dXBXaXRoQXJjaGl2ZShEb2N1bWVudCYgZGVzdGluYXRpb25Eb2N1bWVudCwgTWFya3VwQW5kCiAg
ICAgICAgIGF1dG8gc3ViZnJhbWVVUkwgPSBzdWJmcmFtZU1haW5SZXNvdXJjZS0+dXJsKCk7CiAg
ICAgICAgIE1hcmt1cEFuZEFyY2hpdmUgc3ViZnJhbWVDb250ZW50ID0geyBTdHJpbmc6OmZyb21V
VEY4KHN1YmZyYW1lTWFpblJlc291cmNlLT5kYXRhKCkuZGF0YSgpLCBzdWJmcmFtZU1haW5SZXNv
dXJjZS0+ZGF0YSgpLnNpemUoKSksCiAgICAgICAgICAgICBzdWJmcmFtZU1haW5SZXNvdXJjZS5y
ZWxlYXNlTm9uTnVsbCgpLCBzdWJmcmFtZUFyY2hpdmUuY29weVJlZigpIH07Ci0gICAgICAgIGF1
dG8gc3ViZnJhbWVNYXJrdXAgPSBzYW5pdGl6ZU1hcmt1cFdpdGhBcmNoaXZlKGRlc3RpbmF0aW9u
RG9jdW1lbnQsIHN1YmZyYW1lQ29udGVudCwgY2FuU2hvd01JTUVUeXBlQXNIVE1MKTsKKyAgICAg
ICAgYXV0byBzdWJmcmFtZU1hcmt1cCA9IHNhbml0aXplTWFya3VwV2l0aEFyY2hpdmUoZGVzdGlu
YXRpb25Eb2N1bWVudCwgc3ViZnJhbWVDb250ZW50LCBjYW5TaG93TUlNRVR5cGVBc0hUTUwsIHVy
bFRvQmxvYk1hcCk7CiAKICAgICAgICAgQ1N0cmluZyB1dGY4ID0gc3ViZnJhbWVNYXJrdXAudXRm
OCgpOwogICAgICAgICBWZWN0b3I8dWludDhfdD4gYmxvYkJ1ZmZlcjsKQEAgLTI0NCw2ICsyOTgs
NyBAQCBzdGF0aWMgU3RyaW5nIHNhbml0aXplTWFya3VwV2l0aEFyY2hpdmUoRG9jdW1lbnQmIGRl
c3RpbmF0aW9uRG9jdW1lbnQsIE1hcmt1cEFuZAogCiAgICAgICAgIFN0cmluZyBzdWJmcmFtZUJs
b2JVUkwgPSBET01VUkw6OmNyZWF0ZU9iamVjdFVSTChkZXN0aW5hdGlvbkRvY3VtZW50LCBibG9i
KTsKICAgICAgICAgYmxvYlVSTE1hcC5zZXQoc3ViZnJhbWVVUkwuc3RyaW5nKCksIHN1YmZyYW1l
QmxvYlVSTCk7CisgICAgICAgIHVybFRvQmxvYk1hcC5zZXQoc3ViZnJhbWVCbG9iVVJMLCBXVEZN
b3ZlKGJsb2IpKTsKICAgICB9CiAKICAgICByZXBsYWNlU3VicmVzb3VyY2VVUkxzKGZyYWdtZW50
LmdldCgpLCBXVEZNb3ZlKGJsb2JVUkxNYXApKTsKQEAgLTI3NCwxMSArMzI5LDE2IEBAIGJvb2wg
V2ViQ29udGVudFJlYWRlcjo6cmVhZFdlYkFyY2hpdmUoU2hhcmVkQnVmZmVyJiBidWZmZXIpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBS
ZWZQdHI8QmxvYj4+IHVybFRvQmxvYk1hcDsKICAgICBTdHJpbmcgc2FuaXRpemVkTWFya3VwID0g
c2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZSgqZnJhbWUuZG9jdW1lbnQoKSwgKnJlc3VsdCwgWyZd
IChjb25zdCBTdHJpbmcmIHR5cGUpIHsKICAgICAgICAgcmV0dXJuIGZyYW1lLmxvYWRlcigpLmNs
aWVudCgpLmNhblNob3dNSU1FVHlwZUFzSFRNTCh0eXBlKTsKLSAgICB9KTsKKyAgICB9LCB1cmxU
b0Jsb2JNYXApOwogICAgIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKCpmcmFt
ZS5kb2N1bWVudCgpLCBzYW5pdGl6ZWRNYXJrdXAsIGJsYW5rVVJMKCksIERpc2FsbG93U2NyaXB0
aW5nQW5kUGx1Z2luQ29udGVudCk7CiAKKyAgICBpZiAoIWZyYWdtZW50KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXBsYWNlUmljaENvbnRlbnRXaXRoQXR0YWNobWVudHNJZk5lY2Vz
c2FyeSgqZnJhZ21lbnQsIFdURk1vdmUodXJsVG9CbG9iTWFwKSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTI5OCw5ICszNTgsMTAgQEAgYm9vbCBXZWJDb250ZW50TWFya3VwUmVhZGVyOjpy
ZWFkV2ViQXJjaGl2ZShTaGFyZWRCdWZmZXImIGJ1ZmZlcikKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCisgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxCbG9iPj4gdXJsVG9C
bG9iTWFwOwogICAgIG1hcmt1cCA9IHNhbml0aXplTWFya3VwV2l0aEFyY2hpdmUoKmZyYW1lLmRv
Y3VtZW50KCksICpyZXN1bHQsIFsmXSAoY29uc3QgU3RyaW5nJiB0eXBlKSB7CiAgICAgICAgIHJl
dHVybiBmcmFtZS5sb2FkZXIoKS5jbGllbnQoKS5jYW5TaG93TUlNRVR5cGVBc0hUTUwodHlwZSk7
Ci0gICAgfSk7CisgICAgfSwgdXJsVG9CbG9iTWFwKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpA
QCAtMzUzLDkgKzQxNCwxMiBAQCBib29sIFdlYkNvbnRlbnRSZWFkZXI6OnJlYWRSVEZEKFNoYXJl
ZEJ1ZmZlciYgYnVmZmVyKQogICAgIGlmIChmcmFtZS5zZXR0aW5ncygpLnByZWZlck1JTUVUeXBl
Rm9ySW1hZ2VzKCkgfHwgIWZyYW1lLmRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhmcmFt
ZSwgYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEZEOmJ1ZmZl
ci5jcmVhdGVOU0RhdGEoKS5nZXQoKSBkb2N1bWVudEF0dHJpYnV0ZXM6bnVsbHB0cl0pLmdldCgp
KTsKKyAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEJsb2I+PiB1cmxUb0Jsb2JNYXA7
CisgICAgYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKGZyYW1l
LCBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURkQ6YnVmZmVy
LmNyZWF0ZU5TRGF0YSgpLmdldCgpIGRvY3VtZW50QXR0cmlidXRlczpudWxscHRyXSkuZ2V0KCks
IHVybFRvQmxvYk1hcCk7CiAgICAgaWYgKCFmcmFnbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmVwbGFjZVJpY2hDb250ZW50V2l0aEF0dGFjaG1lbnRzSWZOZWNlc3NhcnkoKmZy
YWdtZW50LCBXVEZNb3ZlKHVybFRvQmxvYk1hcCkpOwogICAgIGFkZEZyYWdtZW50KGZyYWdtZW50
LnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNjUsNyArNDI5LDEz
IEBAIGJvb2wgV2ViQ29udGVudE1hcmt1cFJlYWRlcjo6cmVhZFJURkQoU2hhcmVkQnVmZmVyJiBi
dWZmZXIpCiB7CiAgICAgaWYgKCFmcmFtZS5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKGZy
YW1lLCBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURkQ6YnVm
ZmVyLmNyZWF0ZU5TRGF0YSgpLmdldCgpIGRvY3VtZW50QXR0cmlidXRlczpudWxscHRyXSkuZ2V0
KCkpOworCisgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxCbG9iPj4gdXJsVG9CbG9i
TWFwOworICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhm
cmFtZSwgYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEZEOmJ1
ZmZlci5jcmVhdGVOU0RhdGEoKS5nZXQoKSBkb2N1bWVudEF0dHJpYnV0ZXM6bnVsbHB0cl0pLmdl
dCgpLCB1cmxUb0Jsb2JNYXApOworICAgIGlmICghZnJhZ21lbnQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5
KCpmcmFnbWVudCwgV1RGTW92ZSh1cmxUb0Jsb2JNYXApKTsKICAgICBtYXJrdXAgPSBjcmVhdGVN
YXJrdXAoKmZyYWdtZW50KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM3NSw5ICs0NDUsMTIg
QEAgYm9vbCBXZWJDb250ZW50UmVhZGVyOjpyZWFkUlRGKFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQog
ICAgIGlmIChmcmFtZS5zZXR0aW5ncygpLnByZWZlck1JTUVUeXBlRm9ySW1hZ2VzKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEFu
ZEFkZFJlc291cmNlcyhmcmFtZSwgYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10g
aW5pdFdpdGhSVEY6YnVmZmVyLmNyZWF0ZU5TRGF0YSgpLmdldCgpIGRvY3VtZW50QXR0cmlidXRl
czpudWxscHRyXSkuZ2V0KCkpOworICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8Qmxv
Yj4+IHVybFRvQmxvYk1hcDsKKyAgICBhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRB
ZGRSZXNvdXJjZXMoZnJhbWUsIGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGlu
aXRXaXRoUlRGOmJ1ZmZlci5jcmVhdGVOU0RhdGEoKS5nZXQoKSBkb2N1bWVudEF0dHJpYnV0ZXM6
bnVsbHB0cl0pLmdldCgpLCB1cmxUb0Jsb2JNYXApOwogICAgIGlmICghZnJhZ21lbnQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2htZW50
c0lmTmVjZXNzYXJ5KCpmcmFnbWVudCwgV1RGTW92ZSh1cmxUb0Jsb2JNYXApKTsKICAgICBhZGRG
cmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIHJldHVybiB0cnVlOwpA
QCAtMzg3LDkgKzQ2MCwxMyBAQCBib29sIFdlYkNvbnRlbnRNYXJrdXBSZWFkZXI6OnJlYWRSVEYo
U2hhcmVkQnVmZmVyJiBidWZmZXIpCiB7CiAgICAgaWYgKCFmcmFtZS5kb2N1bWVudCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5k
QWRkUmVzb3VyY2VzKGZyYW1lLCBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBp
bml0V2l0aFJURjpidWZmZXIuY3JlYXRlTlNEYXRhKCkuZ2V0KCkgZG9jdW1lbnRBdHRyaWJ1dGVz
Om51bGxwdHJdKS5nZXQoKSk7CisKKyAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEJs
b2I+PiB1cmxUb0Jsb2JNYXA7CisgICAgYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5k
QWRkUmVzb3VyY2VzKGZyYW1lLCBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBp
bml0V2l0aFJURjpidWZmZXIuY3JlYXRlTlNEYXRhKCkuZ2V0KCkgZG9jdW1lbnRBdHRyaWJ1dGVz
Om51bGxwdHJdKS5nZXQoKSwgdXJsVG9CbG9iTWFwKTsKICAgICBpZiAoIWZyYWdtZW50KQogICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXBsYWNlUmljaENvbnRlbnRXaXRoQXR0YWNobWVu
dHNJZk5lY2Vzc2FyeSgqZnJhZ21lbnQsIFdURk1vdmUodXJsVG9CbG9iTWFwKSk7CiAgICAgbWFy
a3VwID0gY3JlYXRlTWFya3VwKCpmcmFnbWVudCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC00
MTIsNiArNDg5LDExIEBAIGJvb2wgV2ViQ29udGVudFJlYWRlcjo6cmVhZEltYWdlKFJlZjxTaGFy
ZWRCdWZmZXI+JiYgYnVmZmVyLCBjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgYXV0byYgZG9jdW1l
bnQgPSAqZnJhbWUuZG9jdW1lbnQoKTsKICAgICBTdHJpbmcgYmxvYlVSTCA9IERPTVVSTDo6Y3Jl
YXRlT2JqZWN0VVJMKGRvY3VtZW50LCBibG9iKTsKICAgICBhZGRGcmFnbWVudChjcmVhdGVGcmFn
bWVudEZvckltYWdlQW5kVVJMKGRvY3VtZW50LCBibG9iVVJMKSk7CisKKyAgICBpZiAoIWZyYWdt
ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXBsYWNlUmljaENvbnRlbnRXaXRo
QXR0YWNobWVudHNJZk5lY2Vzc2FyeSgqZnJhZ21lbnQsIHt7IGJsb2JVUkwsIFdURk1vdmUoYmxv
YikgfX0pOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9XZWJDb250ZW50UmVhZGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYWMvV2ViQ29udGVudFJlYWRlck1hYy5tbQppbmRleCBhNzk4YTE5YzQ3OWU3MzEwNGFk
NGEwNGExZWE1NGVhYmIxMzk3ZjI1Li45YzVkMjU0MGI2MDVlZWFkMjMyODg1YTc2ZDU5YjMyYzQ2
YWY3OGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9XZWJDb250ZW50
UmVhZGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL1dlYkNvbnRlbnRS
ZWFkZXJNYWMubW0KQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbXBvcnQgIlRleHQuaCIKICNpbXBvcnQg
IldlYkNvcmVOU1VSTEV4dHJhcy5oIgogI2ltcG9ydCAibWFya3VwLmgiCisjaW1wb3J0IDx3dGYv
VVVJRC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY1LDcgKzY2LDggQEAgYm9vbCBX
ZWJDb250ZW50UmVhZGVyOjpyZWFkRmlsZW5hbWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRo
cykKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogICAgICAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5hdHRhY2htZW50RWxlbWVudEVuYWJsZWQo
KSkgewogICAgICAgICAgICAgYXV0byBhdHRhY2htZW50ID0gSFRNTEF0dGFjaG1lbnRFbGVtZW50
OjpjcmVhdGUoSFRNTE5hbWVzOjphdHRhY2htZW50VGFnLCBkb2N1bWVudCk7Ci0gICAgICAgICAg
ICBhdHRhY2htZW50LT5zZXRGaWxlKEZpbGU6OmNyZWF0ZShbW05TVVJMIGZpbGVVUkxXaXRoUGF0
aDp0ZXh0XSBwYXRoXSkpOworICAgICAgICAgICAgYXR0YWNobWVudC0+c2V0VW5pcXVlSWRlbnRp
ZmllcihjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkpOworICAgICAgICAgICAgYXR0YWNobWVu
dC0+c2V0RmlsZShGaWxlOjpjcmVhdGUoW05TVVJMIGZpbGVVUkxXaXRoUGF0aDp0ZXh0XS5wYXRo
KSwgSFRNTEF0dGFjaG1lbnRFbGVtZW50OjpVcGRhdGVEaXNwbGF5QXR0cmlidXRlczo6WWVzKTsK
ICAgICAgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChhdHRhY2htZW50KTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxBdHRhY2htZW50RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRh
Y2htZW50RWxlbWVudC5jcHAKaW5kZXggMWEwMzM3OWFhNTU4ODA2YzFmNDIzMzVlZjA3ZTRkYWEw
NmI3MDIzYS4uMjVmNTE5NDNkMmM3MTE5NGI0Y2Y3MjdkZmNiNmVhN2E1MzVhZWNlMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0YWNobWVudEVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dGFjaG1lbnRFbGVtZW50LmNwcApAQCAtNDUsNiAr
NDUsMTAgQEAKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDxwYWwvRmlsZVNp
emVGb3JtYXR0ZXIuaD4KIAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIlVUSVV0aWxp
dGllcy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKQEAgLTExMiwxMiArMTE2LDI0IEBAIFVSTCBIVE1MQXR0YWNobWVudEVsZW1l
bnQ6OmJsb2JVUkwoKSBjb25zdAogICAgIHJldHVybiB7IHsgfSwgYXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OndlYmtpdGF0dGFjaG1lbnRibG9idXJsQXR0cikuc3Ry
aW5nKCkgfTsKIH0KIAotdm9pZCBIVE1MQXR0YWNobWVudEVsZW1lbnQ6OnNldEZpbGUoUmVmUHRy
PEZpbGU+JiYgZmlsZSkKK3ZvaWQgSFRNTEF0dGFjaG1lbnRFbGVtZW50OjpzZXRGaWxlKFJlZlB0
cjxGaWxlPiYmIGZpbGUsIFVwZGF0ZURpc3BsYXlBdHRyaWJ1dGVzIHVwZGF0ZUF0dHJpYnV0ZXMp
CiB7CiAgICAgbV9maWxlID0gV1RGTW92ZShmaWxlKTsKIAogICAgIHNldEF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjp3ZWJraXRhdHRhY2htZW50YmxvYnVybEF0dHIs
IG1fZmlsZSA/IG1fZmlsZS0+dXJsKCkgOiBlbXB0eVN0cmluZygpKTsKIAorICAgIGlmICh1cGRh
dGVBdHRyaWJ1dGVzID09IFVwZGF0ZURpc3BsYXlBdHRyaWJ1dGVzOjpZZXMpIHsKKyAgICAgICAg
aWYgKG1fZmlsZSkgeworICAgICAgICAgICAgc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihIVE1MTmFtZXM6OnRpdGxlQXR0ciwgbV9maWxlLT5uYW1lKCkpOworICAgICAgICAgICAg
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnN1YnRpdGxlQXR0
ciwgZmlsZVNpemVEZXNjcmlwdGlvbihtX2ZpbGUtPnNpemUoKSkpOworICAgICAgICAgICAgc2V0
QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnR5cGVBdHRyLCBtX2Zp
bGUtPnR5cGUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZW1vdmVBdHRyaWJ1
dGUoSFRNTE5hbWVzOjp0aXRsZUF0dHIpOworICAgICAgICAgICAgcmVtb3ZlQXR0cmlidXRlKEhU
TUxOYW1lczo6c3VidGl0bGVBdHRyKTsKKyAgICAgICAgICAgIHJlbW92ZUF0dHJpYnV0ZShIVE1M
TmFtZXM6OnR5cGVBdHRyKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmIChhdXRvKiByZW5k
ZXJBdHRhY2htZW50ID0gYXR0YWNobWVudFJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRlckF0dGFj
aG1lbnQtPmludmFsaWRhdGUoKTsKIApAQCAtMjY2LDggKzI4MiwxNyBAQCBSZWZQdHI8SFRNTFZp
ZGVvRWxlbWVudD4gSFRNTEF0dGFjaG1lbnRFbGVtZW50Ojppbm5lclZpZGVvKCkgY29uc3QKIAog
dm9pZCBIVE1MQXR0YWNobWVudEVsZW1lbnQ6OnBvcHVsYXRlU2hhZG93Um9vdElmTmVjZXNzYXJ5
KCkKIHsKKyAgICBpZiAoIW1fZmlsZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgYXV0byBtaW1l
VHlwZSA9IGF0dGFjaG1lbnRUeXBlKCk7Ci0gICAgaWYgKCFtX2ZpbGUgfHwgbWltZVR5cGUuaXNF
bXB0eSgpKQorCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgaWYgKGlzRGVjbGFyZWRVVEkobWlt
ZVR5cGUpKQorICAgICAgICBtaW1lVHlwZSA9IE1JTUVUeXBlRnJvbVVUSShtaW1lVHlwZSk7Cisj
ZW5kaWYKKworICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUobWltZVR5
cGUpIHx8IE1JTUVUeXBlUmVnaXN0cnk6OmlzUERGTUlNRVR5cGUobWltZVR5cGUpKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0YWNobWVudEVsZW1lbnQuaAppbmRleCBjOGYzNWQ1YjU0
OGEzN2VhZTkyYmJiZGI4NGE2N2Y3ZTA0NjJhOWQ3Li4xNzk1ZDFmZDBiOWNiMGIxOWMyNzE1NWIw
YzE1ZTUzMjVmNDAwNzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRh
Y2htZW50RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dGFjaG1lbnRF
bGVtZW50LmgKQEAgLTQ1LDcgKzQ1LDkgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQg
VVJMIGJsb2JVUkwoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBGaWxlKiBmaWxlKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRGaWxlKFJlZlB0cjxGaWxlPiYmKTsKKworICAgIGVudW0gY2xhc3Mg
VXBkYXRlRGlzcGxheUF0dHJpYnV0ZXMgeyBObywgWWVzIH07CisgICAgdm9pZCBzZXRGaWxlKFJl
ZlB0cjxGaWxlPiYmLCBVcGRhdGVEaXNwbGF5QXR0cmlidXRlcyA9IFVwZGF0ZURpc3BsYXlBdHRy
aWJ1dGVzOjpObyk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdW5pcXVlSWRlbnRpZmll
cigpIGNvbnN0OwogICAgIHZvaWQgc2V0VW5pcXVlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4N2Mw
ZmQzMGQzYzdkMTZiZjM1YzEyMDRmNmFkYjY3ODIyMTkwMDYyLi41YTA4MDBjM2MxOWJiMjllZDc4
NGZhOGE5YTk1ZjM5MTAyMDIzY2U2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTctMTItMTQgIFdlbnNvbiBIc2ll
aCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW0F0dGFjaG1lbnQgU3VwcG9y
dF0gSW5zZXJ0IGltYWdlcyBhcyBpbmxpbmUgYXR0YWNobWVudHMgd2hlbiBwYXN0aW5nIGFuZCBk
cm9wcGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTgwODUzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNTc1NjI2OD4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIG5ldyBXS0F0dGFjaG1lbnQg
QVBJIHRlc3RzIGFuZCB0ZXN0IHN1cHBvcnQuIFNlZSBjb21tZW50cyBiZWxvdyBmb3IgbW9yZSBk
ZXRhaWwuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0
YWNobWVudFRlc3RzLm1tOgorCisgICAgICAgIFR3ZWFrIHRoZSBlZGl0aW5nIHRlc3QgcGFnZSBt
YXJrdXAsIHN1Y2ggdGhhdCBkb2N1bWVudC5ib2R5LmlubmVySFRNTCBkb2Vzbid0IGFkZGl0aW9u
YWxseSBjb250YWluIHRoZSBjb250ZW50cworICAgICAgICBvZiB0aGUgc2NyaXB0IHRhZy4KKwor
ICAgICAgICAod2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cyk6CisgICAgICAgICh0ZXN0SW1h
Z2VGaWxlVVJMKToKKyAgICAgICAgKHRlc3RJbWFnZURhdGEpOgorICAgICAgICAodGVzdFBERkZp
bGVVUkwpOgorICAgICAgICAodGVzdFBERkRhdGEpOgorICAgICAgICAocGxhdGZvcm1Db3B5Umlj
aFRleHRXaXRoQXR0YWNobWVudCk6CisgICAgICAgIChwbGF0Zm9ybUNvcHlQTkcpOgorICAgICAg
ICAocGxhdGZvcm1JbWFnZVdpdGhEYXRhKToKKworICAgICAgICBBZGQgc29tZSBwbGF0Zm9ybSBo
ZWxwZXIgZnVuY3Rpb25zLCB3aGljaCBzb21lIG9mIHRoZSBwbGF0Zm9ybS1hZ25vc3RpYyB0ZXN0
cyBiZWxvdyB1c2UgdG8gcmVzb2x2ZSBkaWZmZXJlbmNlcworICAgICAgICBiZXR3ZWVuIGlPUyBh
bmQgbWFjT1Mgd2hlbiB3cml0aW5nIHRvIHRoZSBwYXN0ZWJvYXJkIGFuZCBjcmVhdGluZyBhbiBp
bWFnZSBmcm9tIGRhdGEuCisKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCisgICAg
ICAgIEFkZCBuZXcgQVBJIHRlc3RzIHRvIGV4ZXJjaXNlIGRyYWcgYW5kIGRyb3AvY29weSBhbmQg
cGFzdGUgb2YgcmljaCBjb250ZW50IChuYW1lbHksIGltYWdlcyBhbmQgZmlsZXMpIG9uIGlPUyBh
bmQKKyAgICAgICAgbWFjT1MuIGlPUyBhdHRhY2htZW50IHRlc3RzIHVzZSBEYXRhSW50ZXJhY3Rp
b25TaW11bGF0b3IgdG8gc2ltdWxhdGUgVUlLaXQgZHJhZyBhbmQgZHJvcCBjb29yZGluYXRpb24u
IE9uIG1hY09TLAorICAgICAgICBoYW5kbGluZyBvZiBkcm9wcGVkIGNvbnRlbnQgaXMgbXVjaCBj
bG9zZXIgdG8gaGFuZGxpbmcgb2YgcGFzdGVkIGNvbnRlbnQgKHRoZXkgdXNlIHRoZSBzYW1lIGNv
ZGVwYXRocyB0byByZWFkCisgICAgICAgIGZyb20gdGhlIHBsYXRmb3JtIHBhc3RlYm9hcmQpLCBz
byBleGVyY2lzaW5nIHBhc3RlIGNvZGVwYXRocyBvbiBNYWMgaXMgc3VmZmljaWVudC4KKworICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvaW9zL0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5oOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvaW9zL0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5tbToKKyAg
ICAgICAgKC1bRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIF9yZXNldFNpbXVsYXRlZFN0YXRlXSk6
CisgICAgICAgICgtW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBpbnNlcnRlZEF0dGFjaG1lbnRz
XSk6CisgICAgICAgICgtW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciByZW1vdmVkQXR0YWNobWVu
dHNdKToKKworICAgICAgICBUZWFjaCB0aGUgaU9TIGRyYWcgYW5kIGRyb3Agc2ltdWxhdG9yIHRv
IGtlZXAgdHJhY2sgb2YgYXR0YWNobWVudCBlbGVtZW50cyB0aGF0IGFyZSBpbnNlcnRlZCBkdXJp
bmcgYSBkcm9wLiBXZQorICAgICAgICBhbHNvIGtlZXAgdHJhY2sgb2YgcmVtb3ZlZCBhdHRhY2ht
ZW50cyBoZXJlIHRvbywgdGhvdWdoIG5vIGRlZmF1bHQgZHJvcCBoYW5kbGluZyBzY2VuYXJpbyBz
aG91bGQgdHJpZ2dlcgorICAgICAgICBhdHRhY2htZW50IHJlbW92YWwsIHNvIHdlIHNpbXBseSB1
c2UgdGhpcyB0byBjaGVjayB0aGF0IG5vIF9XS0F0dGFjaG1lbnRzIHdlcmUgcmVtb3ZlZCBkdXJp
bmcgYSBkcm9wLgorCisgICAgICAgICgtW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBfd2ViVmll
dzpkaWRJbnNlcnRBdHRhY2htZW50Ol0pOgorICAgICAgICAoLVtEYXRhSW50ZXJhY3Rpb25TaW11
bGF0b3IgX3dlYlZpZXc6ZGlkUmVtb3ZlQXR0YWNobWVudDpdKToKKwogMjAxNy0xMi0xNCAgRGF2
aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIGNoZWNrLXdlYmtpdC1z
dHlsZTogU3RvcCB3YXJuaW5nIGFib3V0IHVuZGVyc2NvcmVzIGluIHdlYnJ0YyBzb3VyY2UKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2ht
ZW50VGVzdHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0
YWNobWVudFRlc3RzLm1tCmluZGV4IDkzYWQyYTQ4NTcxZWRlMjg0ZjRmMjYwYmI3MjFhZjM0Nzlh
ZjQzODIuLjZmNWIxNGUzMjUzZDU1N2M0ZmVmZmNiOTRiZWZmMDVkZmYyMWFlNzkgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVz
dHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFj
aG1lbnRUZXN0cy5tbQpAQCAtMjUsMTMgKzI1LDE5IEBACiAKICNpbXBvcnQgImNvbmZpZy5oIgog
CisjaW1wb3J0ICJEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuaCIKICNpbXBvcnQgIlBsYXRmb3Jt
VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0IDxXZWJLaXQv
V0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0
UHJpdmF0ZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCisjaWYgUExBVEZPUk0oSU9T
KQorI2ltcG9ydCA8TW9iaWxlQ29yZVNlcnZpY2VzL01vYmlsZUNvcmVTZXJ2aWNlcy5oPgorI2Vu
ZGlmCisKICNpZiBXS19BUElfRU5BQkxFRAogCiBAaW50ZXJmYWNlIEF0dGFjaG1lbnRVcGRhdGVP
YnNlcnZlciA6IE5TT2JqZWN0IDxXS1VJRGVsZWdhdGVQcml2YXRlPgpAQCAtMTIyLDkgKzEyOCwx
MCBAQCBzdGF0aWMgUmV0YWluUHRyPFRlc3RXS1dlYlZpZXc+IHdlYlZpZXdGb3JUZXN0aW5nQXR0
YWNobWVudHMoKQogewogICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZp
ZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW2NvbmZpZ3VyYXRpb24gX3NldEF0
dGFjaG1lbnRFbGVtZW50RW5hYmxlZDpZRVNdOworICAgIFdLUHJlZmVyZW5jZXNTZXRDdXN0b21Q
YXN0ZWJvYXJkRGF0YUVuYWJsZWQoKFdLUHJlZmVyZW5jZXNSZWYpW2NvbmZpZ3VyYXRpb24gcHJl
ZmVyZW5jZXNdLCBZRVMpOwogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCkgY29u
ZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7Ci0gICAgW3dlYlZpZXcgc3luY2hyb25v
dXNseUxvYWRIVE1MU3RyaW5nOkAiPGJvZHkgY29udGVudGVkaXRhYmxlPjwvYm9keT48c2NyaXB0
PmRvY3VtZW50LmJvZHkuZm9jdXMoKTs8L3NjcmlwdD4iXTsKKyAgICBbd2ViVmlldyBzeW5jaHJv
bm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8c2NyaXB0PmZvY3VzID0gKCkgPT4gZG9jdW1lbnQuYm9k
eS5mb2N1cygpPC9zY3JpcHQ+PGJvZHkgb25sb2FkPWZvY3VzKCkgY29udGVudGVkaXRhYmxlPjwv
Ym9keT4iXTsKIAogICAgIHJldHVybiB3ZWJWaWV3OwogfQpAQCAtMTM0LDEwICsxNDEsMTQgQEAg
c3RhdGljIE5TRGF0YSAqdGVzdEhUTUxEYXRhKCkKICAgICByZXR1cm4gW0AiPGEgaHJlZj0nIyc+
VGhpcyBpcyBzb21lIEhUTUwgZGF0YTwvYT4iIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmlu
Z0VuY29kaW5nXTsKIH0KIAorc3RhdGljIE5TVVJMICp0ZXN0SW1hZ2VGaWxlVVJMKCkKK3sKKyAg
ICByZXR1cm4gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAImljb24iIHdp
dGhFeHRlbnNpb246QCJwbmciIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2Vz
Il07Cit9CisKIHN0YXRpYyBOU0RhdGEgKnRlc3RJbWFnZURhdGEoKQogewotICAgIE5TVVJMICp1
cmwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiaWNvbiIgd2l0aEV4
dGVuc2lvbjpAInBuZyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsK
LSAgICByZXR1cm4gW05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZVUkw6dXJsXTsKKyAgICByZXR1
cm4gW05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZVUkw6dGVzdEltYWdlRmlsZVVSTCgpXTsKIH0K
IAogc3RhdGljIE5TRGF0YSAqdGVzdFZpZGVvRGF0YSgpCkBAIC0xNDYsMTAgKzE1NywxNCBAQCBz
dGF0aWMgTlNEYXRhICp0ZXN0VmlkZW9EYXRhKCkKICAgICByZXR1cm4gW05TRGF0YSBkYXRhV2l0
aENvbnRlbnRzT2ZVUkw6dXJsXTsKIH0KIAorc3RhdGljIE5TVVJMICp0ZXN0UERGRmlsZVVSTCgp
Cit7CisgICAgcmV0dXJuIFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJ0
ZXN0IiB3aXRoRXh0ZW5zaW9uOkAicGRmIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJl
c291cmNlcyJdOworfQorCiBzdGF0aWMgTlNEYXRhICp0ZXN0UERGRGF0YSgpCiB7Ci0gICAgTlNV
UkwgKnVybCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJ0ZXN0IiB3
aXRoRXh0ZW5zaW9uOkAicGRmIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNl
cyJdOwotICAgIHJldHVybiBbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZlVSTDp1cmxdOworICAg
IHJldHVybiBbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZlVSTDp0ZXN0UERGRmlsZVVSTCgpXTsK
IH0KIAogc3RhdGljIF9XS0F0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyAqZGlzcGxheU9wdGlvbnNX
aXRoTW9kZShfV0tBdHRhY2htZW50RGlzcGxheU1vZGUgbW9kZSkKQEAgLTI5MSw4ICszMDYsNjcg
QEAgLSAodm9pZClleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTooTlNEYXRhICopZXhwZWN0ZWREYXRh
CiAKIEBlbmQKIAorI3ByYWdtYSBtYXJrIC0gUGxhdGZvcm0gdGVzdGluZyBoZWxwZXIgZnVuY3Rp
b25zCisKK3ZvaWQgcGxhdGZvcm1Db3B5UmljaFRleHRXaXRoQXR0YWNobWVudCgpCit7CisgICAg
YXV0byByaWNoVGV4dCA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9j
XSBpbml0XSk7CisgICAgYXV0byBpbWFnZSA9IGFkb3B0TlMoW1tOU1RleHRBdHRhY2htZW50IGFs
bG9jXSBpbml0V2l0aERhdGE6dGVzdEltYWdlRGF0YSgpIG9mVHlwZTooTlNTdHJpbmcgKilrVVRU
eXBlUE5HXSk7CisKKyAgICBbcmljaFRleHQgYXBwZW5kQXR0cmlidXRlZFN0cmluZzpbW1tOU0F0
dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAiTG9yZW0gaXBzdW0gIl0gYXV0
b3JlbGVhc2VdXTsKKyAgICBbcmljaFRleHQgYXBwZW5kQXR0cmlidXRlZFN0cmluZzpbTlNBdHRy
aWJ1dGVkU3RyaW5nIGF0dHJpYnV0ZWRTdHJpbmdXaXRoQXR0YWNobWVudDppbWFnZS5nZXQoKV1d
OworICAgIFtyaWNoVGV4dCBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOltbW05TQXR0cmlidXRlZFN0
cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCIgZG9sb3Igc2l0IGFtZXQuIl0gYXV0b3JlbGVh
c2VdXTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQg
PSBbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXTsKKyAgICBbcGFzdGVib2FyZCBjbGVh
ckNvbnRlbnRzXTsKKyAgICBbcGFzdGVib2FyZCB3cml0ZU9iamVjdHM6QFsgcmljaFRleHQuZ2V0
KCkgXV07CisjZWxpZiBQTEFURk9STShJT1MpCisgICAgYXV0byBpdGVtID0gYWRvcHROUyhbW05T
SXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2l0ZW0gcmVnaXN0ZXJPYmplY3Q6cmlj
aFRleHQuZ2V0KCkgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJp
bGl0eUFsbF07CisgICAgW1VJUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF0uaXRlbVByb3Zp
ZGVycyA9IEBbIGl0ZW0uZ2V0KCkgXTsKKyNlbmRpZgorfQorCit0eXBlZGVmIHZvaWQoXkl0ZW1Q
cm92aWRlckRhdGFMb2FkSGFuZGxlcikoTlNEYXRhICosIE5TRXJyb3IgKik7CisKK3ZvaWQgcGxh
dGZvcm1Db3B5UE5HKCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgTlNQYXN0ZWJvYXJkICpw
YXN0ZWJvYXJkID0gW05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF07CisgICAgW3Bhc3Rl
Ym9hcmQgZGVjbGFyZVR5cGVzOkBbTlNQYXN0ZWJvYXJkVHlwZVBOR10gb3duZXI6bmlsXTsKKyAg
ICBbcGFzdGVib2FyZCBzZXREYXRhOnRlc3RJbWFnZURhdGEoKSBmb3JUeXBlOk5TUGFzdGVib2Fy
ZFR5cGVQTkddOworI2VsaWYgUExBVEZPUk0oSU9TKQorICAgIFVJUGFzdGVib2FyZCAqcGFzdGVi
b2FyZCA9IFtVSVBhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdOworICAgIGF1dG8gaXRlbSA9
IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtpdGVtIHNldFBy
ZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlOlVJUHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGVBdHRh
Y2htZW50XTsKKyAgICBbaXRlbSByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVu
dGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVQTkcgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJl
cHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbCBsb2FkSGFuZGxlcjpbXSAoSXRlbVByb3ZpZGVyRGF0
YUxvYWRIYW5kbGVyIGNvbXBsZXRpb25IYW5kbGVyKSAtPiBOU1Byb2dyZXNzICogeworICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcih0ZXN0SW1hZ2VEYXRhKCksIG5pbCk7CisgICAgICAgIHJldHVy
biBuaWw7CisgICAgfV07CisgICAgcGFzdGVib2FyZC5pdGVtUHJvdmlkZXJzID0gQFsgaXRlbS5n
ZXQoKSBdOworI2VuZGlmCit9CisKKyNpZiBQTEFURk9STShNQUMpCit0eXBlZGVmIE5TSW1hZ2Ug
UGxhdGZvcm1JbWFnZTsKKyNlbHNlCit0eXBlZGVmIFVJSW1hZ2UgUGxhdGZvcm1JbWFnZTsKKyNl
bmRpZgorCitQbGF0Zm9ybUltYWdlICpwbGF0Zm9ybUltYWdlV2l0aERhdGEoTlNEYXRhICpkYXRh
KQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gW1tbTlNJbWFnZSBhbGxvY10gaW5p
dFdpdGhEYXRhOmRhdGFdIGF1dG9yZWxlYXNlXTsKKyNlbHNlCisgICAgcmV0dXJuIFtVSUltYWdl
IGltYWdlV2l0aERhdGE6ZGF0YV07CisjZW5kaWYKK30KKwogbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkgewogCisjcHJhZ21hIG1hcmsgLSBQbGF0Zm9ybS1hZ25vc3RpYyB0ZXN0cworCiBURVNUKFdL
QXR0YWNobWVudFRlc3RzLCBBdHRhY2htZW50RWxlbWVudEluc2VydGlvbikKIHsKICAgICBhdXRv
IHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRzKCk7CkBAIC02NzUsNiArNzQ5
LDE1OCBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBDaGFuZ2VBdHRhY2htZW50RGF0YVVwZGF0
ZXNXaXRoSW5QbGFjZURpc3BsYXkpCiAgICAgW3dlYlZpZXcgZXhwZWN0VXBkYXRlc0FmdGVyQ29t
bWFuZDpAIkRlbGV0ZUJhY2t3YXJkIiB3aXRoQXJndW1lbnQ6bmlsIGV4cGVjdGVkUmVtb3ZhbHM6
QFthdHRhY2htZW50LmdldCgpXSBleHBlY3RlZEluc2VydGlvbnM6QFtdXTsKIH0KIAorVEVTVChX
S0F0dGFjaG1lbnRUZXN0cywgSW5zZXJ0UGFzdGVkSW1hZ2VBc0F0dGFjaG1lbnQpCit7CisgICAg
cGxhdGZvcm1Db3B5UE5HKCk7CisKKyAgICBSZXRhaW5QdHI8X1dLQXR0YWNobWVudD4gYXR0YWNo
bWVudDsKKyAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRzKCk7
CisgICAgeworICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZl
cih3ZWJWaWV3LmdldCgpKTsKKyAgICAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRl
RWRpdENvbW1hbmQ6QCJQYXN0ZSIgYXJndW1lbnQ6bmlsXTsKKyAgICAgICAgRVhQRUNUX0VRKDFV
LCBvYnNlcnZlci5vYnNlcnZlcigpLmluc2VydGVkLmNvdW50KTsKKyAgICAgICAgYXR0YWNobWVu
dCA9IG9ic2VydmVyLm9ic2VydmVyKCkuaW5zZXJ0ZWRbMF07CisgICAgfQorCisgICAgYXV0byBz
aXplID0gcGxhdGZvcm1JbWFnZVdpdGhEYXRhKFthdHRhY2htZW50IHN5bmNocm9ub3VzbHlSZXF1
ZXN0RGF0YTpuaWxdKS5zaXplOworICAgIEVYUEVDVF9FUSgyMTUuLCBzaXplLndpZHRoKTsKKyAg
ICBFWFBFQ1RfRVEoMTc0Liwgc2l6ZS5oZWlnaHQpOworCisgICAgeworICAgICAgICBPYnNlcnZl
QXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsKKyAgICAg
ICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJTZWxlY3RBbGwi
IGFyZ3VtZW50Om5pbF07CisgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVk
aXRDb21tYW5kOkAiRGVsZXRlQmFja3dhcmQiIGFyZ3VtZW50Om5pbF07CisgICAgICAgIG9ic2Vy
dmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbYXR0YWNobWVudC5nZXQoKV0sIEBbXSk7Cisg
ICAgfQorfQorCitURVNUKFdLQXR0YWNobWVudFRlc3RzLCBJbnNlcnRQYXN0ZWRBdHRyaWJ1dGVk
U3RyaW5nQ29udGFpbmluZ0F0dGFjaG1lbnRzKQoreworICAgIHBsYXRmb3JtQ29weVJpY2hUZXh0
V2l0aEF0dGFjaG1lbnQoKTsKKworICAgIFJldGFpblB0cjxfV0tBdHRhY2htZW50PiBhdHRhY2ht
ZW50OworICAgIGF1dG8gd2ViVmlldyA9IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsK
KyAgICB7CisgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVy
KHdlYlZpZXcuZ2V0KCkpOworICAgICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVF
ZGl0Q29tbWFuZDpAIlBhc3RlIiBhcmd1bWVudDpuaWxdOworICAgICAgICBFWFBFQ1RfRVEoMFUs
IG9ic2VydmVyLm9ic2VydmVyKCkucmVtb3ZlZC5jb3VudCk7CisgICAgICAgIEVYUEVDVF9FUSgx
VSwgb2JzZXJ2ZXIub2JzZXJ2ZXIoKS5pbnNlcnRlZC5jb3VudCk7CisgICAgICAgIGF0dGFjaG1l
bnQgPSBvYnNlcnZlci5vYnNlcnZlcigpLmluc2VydGVkWzBdOworICAgIH0KKworICAgIFJldGFp
blB0cjxOU0FycmF5PE5TRGF0YSAqPj4gZXhwZWN0ZWRBdHRhY2htZW50RGF0YSA9IEBbIHRlc3RQ
REZEYXRhKCksIHRlc3RJbWFnZURhdGEoKSBdOworICAgIEVYUEVDVF9UUlVFKFtleHBlY3RlZEF0
dGFjaG1lbnREYXRhIGNvbnRhaW5zT2JqZWN0OlthdHRhY2htZW50IHN5bmNocm9ub3VzbHlSZXF1
ZXN0RGF0YTpuaWxdXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJMb3JlbSBpcHN1bSAgZG9sb3Ig
c2l0IGFtZXQuIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3Vt
ZW50LmJvZHkudGV4dENvbnRlbnQiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJpbWFnZS9wbmci
LCBbd2ViVmlldyB2YWx1ZU9mQXR0cmlidXRlOkAidHlwZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0
dGFjaG1lbnQiXSk7CisKKyAgICB7CisgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0Zv
clNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOworICAgICAgICBbd2ViVmlldyBfc3luY2hy
b25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIlNlbGVjdEFsbCIgYXJndW1lbnQ6bmlsXTsKKyAg
ICAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJEZWxldGVC
YWNrd2FyZCIgYXJndW1lbnQ6bmlsXTsKKyAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVu
dFVwZGF0ZXMoQFthdHRhY2htZW50LmdldCgpXSwgQFtdKTsKKyAgICB9Cit9CisKKyNwcmFnbWEg
bWFyayAtIFBsYXRmb3JtLXNwZWNpZmljIHRlc3RzCisKKyNpZiBQTEFURk9STShNQUMpCisKK1RF
U1QoV0tBdHRhY2htZW50VGVzdHNNYWMsIEluc2VydFBhc3RlZEZpbGVVUkxzQXNBdHRhY2htZW50
cykKK3sKKyAgICBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBbTlNQYXN0ZWJvYXJkIGdlbmVy
YWxQYXN0ZWJvYXJkXTsKKyAgICBbcGFzdGVib2FyZCBjbGVhckNvbnRlbnRzXTsKKyAgICBbcGFz
dGVib2FyZCBkZWNsYXJlVHlwZXM6QFtOU0ZpbGVuYW1lc1Bib2FyZFR5cGVdIG93bmVyOm5pbF07
CisgICAgW3Bhc3RlYm9hcmQgc2V0UHJvcGVydHlMaXN0OkBbdGVzdFBERkZpbGVVUkwoKS5wYXRo
LCB0ZXN0SW1hZ2VGaWxlVVJMKCkucGF0aF0gZm9yVHlwZTpOU0ZpbGVuYW1lc1Bib2FyZFR5cGVd
OworCisgICAgUmV0YWluUHRyPE5TQXJyYXk8X1dLQXR0YWNobWVudCAqPj4gaW5zZXJ0ZWRBdHRh
Y2htZW50czsKKyAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRz
KCk7CisgICAgeworICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNl
cnZlcih3ZWJWaWV3LmdldCgpKTsKKyAgICAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVj
dXRlRWRpdENvbW1hbmQ6QCJQYXN0ZSIgYXJndW1lbnQ6bmlsXTsKKyAgICAgICAgaW5zZXJ0ZWRB
dHRhY2htZW50cyA9IFtvYnNlcnZlci5vYnNlcnZlcigpIGluc2VydGVkXTsKKyAgICAgICAgRVhQ
RUNUX0VRKDJVLCBbaW5zZXJ0ZWRBdHRhY2htZW50cyBjb3VudF0pOworICAgIH0KKworICAgIE5T
QXJyYXk8TlNEYXRhICo+ICpleHBlY3RlZEF0dGFjaG1lbnREYXRhID0gQFsgdGVzdFBERkRhdGEo
KSwgdGVzdEltYWdlRGF0YSgpIF07CisgICAgRVhQRUNUX1RSVUUoW2V4cGVjdGVkQXR0YWNobWVu
dERhdGEgY29udGFpbnNPYmplY3Q6W1tpbnNlcnRlZEF0dGFjaG1lbnRzIGZpcnN0T2JqZWN0XSBz
eW5jaHJvbm91c2x5UmVxdWVzdERhdGE6bmlsXV0pOworICAgIEVYUEVDVF9UUlVFKFtleHBlY3Rl
ZEF0dGFjaG1lbnREYXRhIGNvbnRhaW5zT2JqZWN0OltbaW5zZXJ0ZWRBdHRhY2htZW50cyBsYXN0
T2JqZWN0XSBzeW5jaHJvbm91c2x5UmVxdWVzdERhdGE6bmlsXV0pOworICAgIEVYUEVDVF9XS19T
VFJFUSgiYXBwbGljYXRpb24vcGRmIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2F0dGFjaG1lbnQnKVswXS5nZXRBdHRy
aWJ1dGUoJ3R5cGUnKSJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoInRlc3QucGRmIiwgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JB
bGwoJ2F0dGFjaG1lbnQnKVswXS5nZXRBdHRyaWJ1dGUoJ3RpdGxlJykiXSk7CisgICAgRVhQRUNU
X1dLX1NUUkVRKCJpbWFnZS9wbmciLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYXR0YWNobWVudCcpWzFdLmdldEF0dHJp
YnV0ZSgndHlwZScpIl0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiaWNvbi5wbmciLCBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvckFs
bCgnYXR0YWNobWVudCcpWzFdLmdldEF0dHJpYnV0ZSgndGl0bGUnKSJdKTsKKworICAgIHsKKyAg
ICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmlldy5n
ZXQoKSk7CisgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5k
OkAiU2VsZWN0QWxsIiBhcmd1bWVudDpuaWxdOworICAgICAgICBbd2ViVmlldyBfc3luY2hyb25v
dXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIkRlbGV0ZUJhY2t3YXJkIiBhcmd1bWVudDpuaWxdOwor
ICAgICAgICBOU0FycmF5PF9XS0F0dGFjaG1lbnQgKj4gKnJlbW92ZWRBdHRhY2htZW50cyA9IFtv
YnNlcnZlci5vYnNlcnZlcigpIHJlbW92ZWRdOworICAgICAgICBFWFBFQ1RfRVEoMlUsIHJlbW92
ZWRBdHRhY2htZW50cy5jb3VudCk7CisgICAgICAgIEVYUEVDVF9UUlVFKFtyZW1vdmVkQXR0YWNo
bWVudHMgY29udGFpbnNPYmplY3Q6W2luc2VydGVkQXR0YWNobWVudHMgZmlyc3RPYmplY3RdXSk7
CisgICAgICAgIEVYUEVDVF9UUlVFKFtyZW1vdmVkQXR0YWNobWVudHMubGFzdE9iamVjdCBpc0Vx
dWFsOltpbnNlcnRlZEF0dGFjaG1lbnRzIGxhc3RPYmplY3RdXSk7CisgICAgfQorfQorCisjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQorCisjaWYgUExBVEZPUk0oSU9TKQorCitURVNUKFdLQXR0YWNo
bWVudFRlc3RzSU9TLCBJbnNlcnREcm9wcGVkSW1hZ2VBc0F0dGFjaG1lbnQpCit7CisgICAgYXV0
byB3ZWJWaWV3ID0gd2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cygpOworICAgIGF1dG8gZHJh
Z2dpbmdTaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9j
XSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIGF1dG8gaXRlbSA9IGFkb3B0
TlMoW1tOU0l0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtpdGVtIHNldFByZWZlcnJl
ZFByZXNlbnRhdGlvblN0eWxlOlVJUHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGVBdHRhY2htZW50
XTsKKyAgICBbaXRlbSByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVy
OihOU1N0cmluZyAqKWtVVFR5cGVQTkcgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2Vu
dGF0aW9uVmlzaWJpbGl0eUFsbCBsb2FkSGFuZGxlcjpbXSAoSXRlbVByb3ZpZGVyRGF0YUxvYWRI
YW5kbGVyIGNvbXBsZXRpb25IYW5kbGVyKSAtPiBOU1Byb2dyZXNzICogeworICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcih0ZXN0SW1hZ2VEYXRhKCksIG5pbCk7CisgICAgICAgIHJldHVybiBuaWw7
CisgICAgfV07CisgICAgW2RyYWdnaW5nU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVy
czpAWyBpdGVtLmdldCgpIF1dOworICAgIFtkcmFnZ2luZ1NpbXVsYXRvciBydW5Gcm9tOkNHUG9p
bnRaZXJvIHRvOkNHUG9pbnRNYWtlKDUwLCA1MCldOworCisgICAgRVhQRUNUX0VRKDFVLCBbZHJh
Z2dpbmdTaW11bGF0b3IgaW5zZXJ0ZWRBdHRhY2htZW50c10uY291bnQpOworICAgIEVYUEVDVF9F
USgwVSwgW2RyYWdnaW5nU2ltdWxhdG9yIHJlbW92ZWRBdHRhY2htZW50c10uY291bnQpOworICAg
IFJldGFpblB0cjxfV0tBdHRhY2htZW50PiBhdHRhY2htZW50ID0gW2RyYWdnaW5nU2ltdWxhdG9y
IGluc2VydGVkQXR0YWNobWVudHNdLmZpcnN0T2JqZWN0OworICAgIFthdHRhY2htZW50IGV4cGVj
dFJlcXVlc3RlZERhdGFUb0JlOnRlc3RJbWFnZURhdGEoKV07CisgICAgRVhQRUNUX1dLX1NUUkVR
KCJwdWJsaWMucG5nIiwgW3dlYlZpZXcgdmFsdWVPZkF0dHJpYnV0ZTpAInR5cGUiIGZvclF1ZXJ5
U2VsZWN0b3I6QCJhdHRhY2htZW50Il0pOworCisgICAgeworICAgICAgICBPYnNlcnZlQXR0YWNo
bWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsKKyAgICAgICAgW3dl
YlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJTZWxlY3RBbGwiIGFyZ3Vt
ZW50Om5pbF07CisgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVkaXRDb21t
YW5kOkAiRGVsZXRlQmFja3dhcmQiIGFyZ3VtZW50Om5pbF07CisgICAgICAgIG9ic2VydmVyLmV4
cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbYXR0YWNobWVudC5nZXQoKV0sIEBbXSk7CisgICAgfQor
fQorCitURVNUKFdLQXR0YWNobWVudFRlc3RzSU9TLCBJbnNlcnREcm9wcGVkQXR0cmlidXRlZFN0
cmluZ0NvbnRhaW5pbmdBdHRhY2htZW50cykKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3
Rm9yVGVzdGluZ0F0dGFjaG1lbnRzKCk7CisgICAgYXV0byBkcmFnZ2luZ1NpbXVsYXRvciA9IGFk
b3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3
ZWJWaWV3LmdldCgpXSk7CisgICAgYXV0byBpbWFnZSA9IGFkb3B0TlMoW1tOU1RleHRBdHRhY2ht
ZW50IGFsbG9jXSBpbml0V2l0aERhdGE6dGVzdEltYWdlRGF0YSgpIG9mVHlwZTooTlNTdHJpbmcg
KilrVVRUeXBlUE5HXSk7CisgICAgYXV0byBpdGVtID0gYWRvcHROUyhbW05TSXRlbVByb3ZpZGVy
IGFsbG9jXSBpbml0XSk7CisgICAgW2l0ZW0gcmVnaXN0ZXJPYmplY3Q6W05TQXR0cmlidXRlZFN0
cmluZyBhdHRyaWJ1dGVkU3RyaW5nV2l0aEF0dGFjaG1lbnQ6aW1hZ2UuZ2V0KCldIHZpc2liaWxp
dHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvblZpc2liaWxpdHlBbGxdOworCisgICAgW2Ry
YWdnaW5nU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtLmdldCgpIF1d
OworICAgIFtkcmFnZ2luZ1NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRaZXJvIHRvOkNHUG9pbnRN
YWtlKDUwLCA1MCldOworCisgICAgRVhQRUNUX0VRKDFVLCBbZHJhZ2dpbmdTaW11bGF0b3IgaW5z
ZXJ0ZWRBdHRhY2htZW50c10uY291bnQpOworICAgIEVYUEVDVF9FUSgwVSwgW2RyYWdnaW5nU2lt
dWxhdG9yIHJlbW92ZWRBdHRhY2htZW50c10uY291bnQpOworICAgIFJldGFpblB0cjxfV0tBdHRh
Y2htZW50PiBhdHRhY2htZW50ID0gW2RyYWdnaW5nU2ltdWxhdG9yIGluc2VydGVkQXR0YWNobWVu
dHNdLmZpcnN0T2JqZWN0OworCisgICAgYXV0byBzaXplID0gcGxhdGZvcm1JbWFnZVdpdGhEYXRh
KFthdHRhY2htZW50IHN5bmNocm9ub3VzbHlSZXF1ZXN0RGF0YTpuaWxdKS5zaXplOworICAgIEVY
UEVDVF9FUSgyMTUuLCBzaXplLndpZHRoKTsKKyAgICBFWFBFQ1RfRVEoMTc0Liwgc2l6ZS5oZWln
aHQpOworICAgIEVYUEVDVF9XS19TVFJFUSgiaW1hZ2UvcG5nIiwgW3dlYlZpZXcgdmFsdWVPZkF0
dHJpYnV0ZTpAInR5cGUiIGZvclF1ZXJ5U2VsZWN0b3I6QCJhdHRhY2htZW50Il0pOworCisgICAg
eworICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJW
aWV3LmdldCgpKTsKKyAgICAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENv
bW1hbmQ6QCJTZWxlY3RBbGwiIGFyZ3VtZW50Om5pbF07CisgICAgICAgIFt3ZWJWaWV3IF9zeW5j
aHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5kOkAiRGVsZXRlQmFja3dhcmQiIGFyZ3VtZW50Om5p
bF07CisgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbYXR0YWNobWVu
dC5nZXQoKV0sIEBbXSk7CisgICAgfQorfQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCiB9
IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCiAKICNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvRGF0YUludGVyYWN0aW9uU2ltdWxh
dG9yLmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9EYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Iu
aAppbmRleCA3MTBlYzc2YzFjMTRlZTZmNzc3YWVkODQ1ZjFlMjVmZTg1NGI5MjBlLi41Njk0YWMz
MjFmNzhjZGI3YWRiMjA3ZWE0NDgxODdhNTU5MmE5MDA5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL2lvcy9EYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuaAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL2lvcy9EYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuaApAQCAtMTM4LDYgKzEzOCw5
IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIERhdGFJbnRlcmFjdGlvblBoYXNlKSB7CiAg
ICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PE5TVmFsdWUgKj4+X3F1ZXVlZEFkZGl0aW9uYWxJ
dGVtUmVxdWVzdExvY2F0aW9uczsKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk8VUlUYXJn
ZXRlZERyYWdQcmV2aWV3ICo+PiBfbGlmdFByZXZpZXdzOwogCisgICAgUmV0YWluUHRyPE5TTXV0
YWJsZUFycmF5PF9XS0F0dGFjaG1lbnQgKj4+IF9pbnNlcnRlZEF0dGFjaG1lbnRzOworICAgIFJl
dGFpblB0cjxOU011dGFibGVBcnJheTxfV0tBdHRhY2htZW50ICo+PiBfcmVtb3ZlZEF0dGFjaG1l
bnRzOworCiAgICAgYm9vbCBfaXNEb25lV2FpdGluZ0ZvcklucHV0U2Vzc2lvbjsKICAgICBCT09M
IF9zaG91bGRQZXJmb3JtT3BlcmF0aW9uOwogICAgIGRvdWJsZSBfY3VycmVudFByb2dyZXNzOwpA
QCAtMTY4LDYgKzE3MSw5IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIERhdGFJbnRlcmFj
dGlvblBoYXNlKSB7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIENHUmVjdCBsYXN0
S25vd25EcmFnQ2FyZXRSZWN0OwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0Fy
cmF5PFVJVGFyZ2V0ZWREcmFnUHJldmlldyAqPiAqbGlmdFByZXZpZXdzOwogCitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXk8X1dLQXR0YWNobWVudCAqPiAqaW5zZXJ0ZWRB
dHRhY2htZW50czsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNBcnJheTxfV0tB
dHRhY2htZW50ICo+ICpyZW1vdmVkQXR0YWNobWVudHM7CisKIEBlbmQKIAogI2VuZGlmIC8vIEVO
QUJMRShEQVRBX0lOVEVSQUNUSU9OKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9p
b3MvRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3Mv
RGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLm1tCmluZGV4IGYxY2Y3YTBkNzNmNTIyMzAzYzg1Zjkw
MzkxYzM0YTEzMDRhM2Q4YTkuLjMyOTlmYjA2ZTMyODc4ZDBmZGM0YWUxZTgzZjU5MTZkMjRiZTRl
OWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RhdGFJbnRlcmFjdGlvblNp
bXVsYXRvci5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9EYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IubW0KQEAgLTMxNyw2ICszMTcsOCBAQCAtICh2b2lkKV9yZXNldFNpbXVsYXRlZFN0
YXRlCiAgICAgX2N1cnJlbnRQcm9ncmVzcyA9IDA7CiAgICAgX2lzRG9uZVdpdGhDdXJyZW50UnVu
ID0gZmFsc2U7CiAgICAgX29ic2VydmVkRXZlbnROYW1lcyA9IGFkb3B0TlMoW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdF0pOworICAgIF9pbnNlcnRlZEF0dGFjaG1lbnRzID0gYWRvcHROUyhb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgX3JlbW92ZWRBdHRhY2htZW50cyA9
IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwogICAgIF9maW5hbFNlbGVj
dGlvblJlY3RzID0gQFsgXTsKICAgICBfZHJhZ1Nlc3Npb24gPSBuaWw7CiAgICAgX2Ryb3BTZXNz
aW9uID0gbmlsOwpAQCAtNTc2LDYgKzU3OCwxNiBAQCAtICh2b2lkKXdhaXRGb3JJbnB1dFNlc3Np
b24KICAgICBVdGlsOjpydW4oJl9pc0RvbmVXYWl0aW5nRm9ySW5wdXRTZXNzaW9uKTsKIH0KIAor
LSAoTlNBcnJheTxfV0tBdHRhY2htZW50ICo+ICopaW5zZXJ0ZWRBdHRhY2htZW50cworeworICAg
IHJldHVybiBfaW5zZXJ0ZWRBdHRhY2htZW50cy5nZXQoKTsKK30KKworLSAoTlNBcnJheTxfV0tB
dHRhY2htZW50ICo+ICopcmVtb3ZlZEF0dGFjaG1lbnRzCit7CisgICAgcmV0dXJuIF9yZW1vdmVk
QXR0YWNobWVudHMuZ2V0KCk7Cit9CisKICNwcmFnbWEgbWFyayAtIFdLVUlEZWxlZ2F0ZVByaXZh
dGUKIAogLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkYXRhSW50ZXJhY3Rp
b25PcGVyYXRpb25XYXNIYW5kbGVkOihCT09MKWhhbmRsZWQgZm9yU2Vzc2lvbjooaWQpc2Vzc2lv
biBpdGVtUHJvdmlkZXJzOihOU0FycmF5PFVJSXRlbVByb3ZpZGVyICo+ICopaXRlbVByb3ZpZGVy
cwpAQCAtNjE3LDYgKzYyOSwxNiBAQCAtIChOU0FycmF5PFVJRHJhZ0l0ZW0gKj4gKilfd2ViVmll
dzooV0tXZWJWaWV3ICopd2ViVmlldyB3aWxsUGVyZm9ybURyb3BXaXRoU2VzcwogICAgIHJldHVy
biBzZWxmLm92ZXJyaWRlUGVyZm9ybURyb3BCbG9jayA/IHNlbGYub3ZlcnJpZGVQZXJmb3JtRHJv
cEJsb2NrKHNlc3Npb24pIDogc2Vzc2lvbi5pdGVtczsKIH0KIAorLSAodm9pZClfd2ViVmlldzoo
V0tXZWJWaWV3ICopd2ViVmlldyBkaWRJbnNlcnRBdHRhY2htZW50OihfV0tBdHRhY2htZW50ICop
YXR0YWNobWVudAoreworICAgIFtfaW5zZXJ0ZWRBdHRhY2htZW50cyBhZGRPYmplY3Q6YXR0YWNo
bWVudF07Cit9CisKKy0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkUmVt
b3ZlQXR0YWNobWVudDooX1dLQXR0YWNobWVudCAqKWF0dGFjaG1lbnQKK3sKKyAgICBbX3JlbW92
ZWRBdHRhY2htZW50cyBhZGRPYmplY3Q6YXR0YWNobWVudF07Cit9CisKICNwcmFnbWEgbWFyayAt
IF9XS0lucHV0RGVsZWdhdGUKIAogLSAoQk9PTClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmll
dyBmb2N1c1Nob3VsZFN0YXJ0SW5wdXRTZXNzaW9uOihpZCA8X1dLRm9jdXNlZEVsZW1lbnRJbmZv
PilpbmZvCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329514</attachid>
            <date>2017-12-15 13:34:45 -0800</date>
            <delta_ts>2017-12-18 13:13:52 -0800</delta_ts>
            <desc>Slight test tweaks</desc>
            <filename>bug-180853-20171215133445.patch</filename>
            <type>text/plain</type>
            <size>40661</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1OTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWMwNGVjNzViNDM0N2Rj
Y2E3ZDVhNmFjZWRiYTU1MWM0MzA5ZDU5MC4uNGYxYTcxNTBjMzNjOTM0NDhmYWEzZDZlZmMyZThl
Y2JlMGI2MzIwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDE3LTEyLTE0ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtBdHRhY2htZW50
IFN1cHBvcnRdIEluc2VydCBpbWFnZXMgYXMgaW5saW5lIGF0dGFjaG1lbnRzIHdoZW4gcGFzdGlu
ZyBhbmQgZHJvcHBpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4MDg1MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzU3NTYyNjg+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBzdXBwb3J0IGZv
ciB0cmFuc2Zvcm1pbmcgZHJvcHBlZCBhbmQgcGFzdGVkIHdlYiBjb250ZW50IGZyYWdtZW50cyBw
cmlvciB0byBpbnNlcnRpb24sIHN1Y2ggdGhhdCBpbmxpbmUKKyAgICAgICAgZWxlbWVudHMgKHNv
IGZhciwgb25seSBpbWFnZXMpIGFyZSByZXBsYWNlZCB3aXRoIGF0dGFjaG1lbnQgZWxlbWVudHMg
dGhhdCBoYXZlIGFuIGlubGluZSByZXByZXNlbnRhdGlvbi4gU2VlCisgICAgICAgIGJlbG93IGNv
bW1lbnRzIGZvciBtb3JlIGRldGFpbC4KKworICAgICAgICBUZXN0czogV0tBdHRhY2htZW50VGVz
dHMuSW5zZXJ0UGFzdGVkSW1hZ2VBc0F0dGFjaG1lbnQKKyAgICAgICAgICAgICAgIFdLQXR0YWNo
bWVudFRlc3RzLkluc2VydFBhc3RlZEF0dHJpYnV0ZWRTdHJpbmdDb250YWluaW5nSW1hZ2UKKyAg
ICAgICAgICAgICAgIFdLQXR0YWNobWVudFRlc3RzTWFjLkluc2VydFBhc3RlZEZpbGVVUkxzQXNB
dHRhY2htZW50cworICAgICAgICAgICAgICAgV0tBdHRhY2htZW50VGVzdHNJT1MuSW5zZXJ0RHJv
cHBlZEltYWdlQXNBdHRhY2htZW50CisgICAgICAgICAgICAgICBXS0F0dGFjaG1lbnRUZXN0c0lP
Uy5JbnNlcnREcm9wcGVkQXR0cmlidXRlZFN0cmluZ0NvbnRhaW5pbmdBdHRhY2htZW50CisKKyAg
ICAgICAgKiBlZGl0aW5nL1dlYkNvbnRlbnRSZWFkZXIuaDoKKyAgICAgICAgKiBlZGl0aW5nL2Nv
Y29hL0VkaXRvckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZXBsYWNlU2Vs
ZWN0aW9uV2l0aEF0dHJpYnV0ZWRTdHJpbmcpOgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvV2Vi
Q29udGVudFJlYWRlckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZVJpY2hDb250
ZW50V2l0aEF0dGFjaG1lbnRzSWZOZWNlc3NhcnkpOgorCisgICAgICAgIEFkZCBhIG5ldyBoZWxw
ZXIgdG8gcmVwbGFjZSBlbGVtZW50cyBpbiBhIERPTSBmcmFnbWVudCB3aXRoIGlubGluZSBhdHRh
Y2htZW50IGVsZW1lbnRzIGluc3RlYWQsIHVzaW5nIHRoZSBnaXZlbgorICAgICAgICBCbG9icy4g
U28gZmFyLCB3ZSBvbmx5IHJlcGxhY2UgaW1hZ2UgZWxlbWVudHMgd2l0aCB0aGVzZSBhdHRhY2ht
ZW50cywgYnkgbWFwcGluZyB0aGUgc291cmNlIG9mIGVhY2ggaW1hZ2UgdG8gYQorICAgICAgICBC
bG9iLCBhbmQgY29uc3RydWN0aW5nIGEgcmVwbGFjZW1lbnQgYXR0YWNobWVudCBiYWNrZWQgYnkg
YSBGaWxlIGNvbnN0cnVjdGVkIGZyb20gdGhlIGltYWdlJ3MgY29ycmVzcG9uZGluZworICAgICAg
ICBCbG9iLiBIb3dldmVyLCB0aGlzIG1lY2hhbmlzbSBjYW4gYmUgZ2VuZXJhbGl6ZWQgaW4gdGhl
IGZ1dHVyZSB0byBoYW5kbGUgdHJhbnNmb3JtYXRpb25zIGZyb20gYXJiaXRyYXJ5IGVsZW1lbnRz
CisgICAgICAgIHRvIGF0dGFjaG1lbnQgZWxlbWVudHMgY2FwYWJsZSBvZiByZXByZXNlbnRpbmcg
dGhlIHNhbWUgZWxlbWVudHMgdXNpbmcgaW5saW5lIGRpc3BsYXkgbW9kZS4KKworICAgICAgICBU
aGlzIGZ1bmN0aW9uIGlzIGEgbm9vcCBpZiB0aGUgYXR0YWNobWVudCBlbGVtZW50cyBhcmUgZGlz
YWJsZWQgdmlhIHJ1bnRpbWUtZW5hYmxlZCBmZWF0dXJlcy4KKworICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2FuaXRp
emVNYXJrdXBXaXRoQXJjaGl2ZSk6CisKKyAgICAgICAgQWRkIG91dC1wYXJhbXMgdG8gYm90aCBv
ZiB0aGVzZSBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgY2FwdHVyZSB0aGUgbWFwIG9mIGJsb2IgVVJM
cyB0byBCbG9icyBiZWluZyB1c2VkIHRvCisgICAgICAgIHJlcGxhY2Ugc3VicmVzb3VyY2UgVVJM
cyBpbiB0aGUgcGFzdGVkL2Ryb3BwZWQgRE9NIGZyYWdtZW50LgorCisgICAgICAgIChXZWJDb3Jl
OjpXZWJDb250ZW50UmVhZGVyOjpyZWFkV2ViQXJjaGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJDb250ZW50TWFya3VwUmVhZGVyOjpyZWFkV2ViQXJjaGl2ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJDb250ZW50UmVhZGVyOjpyZWFkUlRGRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb250
ZW50TWFya3VwUmVhZGVyOjpyZWFkUlRGRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb250ZW50
UmVhZGVyOjpyZWFkUlRGKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRNYXJrdXBSZWFk
ZXI6OnJlYWRSVEYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29udGVudFJlYWRlcjo6cmVhZElt
YWdlKToKKworICAgICAgICBJbiB0aGVzZSBwbGFjZXMgd2hlcmUgd2Ugc3dhcCBvdXQgc3VicmVz
b3VyY2UgVVJMcyBmb3IgYmxvYiBVUkxzLCBjb2xsZWN0IGEgbWFwIG9mIGJsb2IgVVJMID0+IEJs
b2IsIGFuZCB1c2UgaXQKKyAgICAgICAgdG8gcmVwbGFjZSBpbWFnZXMgaW4gdGhlIERPTSB3aXRo
IGF0dGFjaG1lbnRzIChpZiBuZWVkZWQsIGFuZCBwb3NzaWJsZSkuCisKKyAgICAgICAgKiBlZGl0
aW5nL21hYy9XZWJDb250ZW50UmVhZGVyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29u
dGVudFJlYWRlcjo6cmVhZEZpbGVuYW1lcyk6CisKKyAgICAgICAgQXVnbWVudCBleGlzdGluZyBs
b2dpYyB0byBnZW5lcmF0ZSBhdHRhY2htZW50IGVsZW1lbnRzIHdoZW4gcGFzdGluZyBvciBkcm9w
cGluZyBmaWxlIFVSTHMsIHNvIHRoYXQgdGhlIGdlbmVyYXRlZAorICAgICAgICBhdHRhY2htZW50
IGVsZW1lbnRzIGFsc28gaGF2ZSB0aXRsZXMsIHN1YnRpdGxlcywgYW5kIGNvbnRlbnQgdHlwZSBp
bmZvcm1hdGlvbi4KKworICAgICAgICAqIGh0bWwvSFRNTEF0dGFjaG1lbnRFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdHRhY2htZW50RWxlbWVudDo6c2V0RmlsZSk6CisKKyAg
ICAgICAgQWRkIGFuIG9wdGlvbmFsIHNlY29uZCBwYXJhbSwgVXBkYXRlRGlzcGxheUF0dHJpYnV0
ZXMuIElmIFVwZGF0ZURpc3BsYXlBdHRyaWJ1dGVzOjpZZXMgaXMgcGFzc2VkIGluLCB0aGVuIHdl
IHNldAorICAgICAgICB0aGUgZWxlbWVudHMncyBhdHRyaWJ1dGVzIHRoYXQgYXJlIGRpc3BsYXll
ZCBpbiB0aGUgYXR0YWNobWVudCByZXByZXNlbnRhdGlvbiAodGl0bGUsIHN1YnRpdGxlLCBhbmQg
dHlwZSkgdXNpbmcKKyAgICAgICAgdGhlIGdpdmVuIEZpbGUuCisKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxBdHRhY2htZW50RWxlbWVudDo6cG9wdWxhdGVTaGFkb3dSb290SWZOZWNlc3NhcnkpOgor
CisgICAgICAgIE1ha2UgYSBzbWFsbCB0d2VhayB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBjYXNl
IHdoZXJlIGFuIGF0dGFjaG1lbnQgd2l0aCBhIGNvbnRlbnQgdHlwZSB0aGF0IGlzIGEgVVRJIGlz
IGJlaW5nCisgICAgICAgIGRpc3BsYXllZCBpbmxpbmUuIENvbnRlbnQgdHlwZSBjYW4gZWl0aGVy
IGJlIGEgVVRJIG9yIGEgTUlNRSB0eXBlLCBidXQgdGhlIGNvZGUgdG8gY29uc3RydWN0IHRoZSBz
aGFkb3cgdHJlZSBvZgorICAgICAgICBhbiBhdHRhY2htZW50IGVsZW1lbnQgb25seSBoYW5kbGVz
IE1JTUUgdHlwZXMuCisKKyAgICAgICAgKiBodG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5oOgor
CiAyMDE3LTEyLTE0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBzcmZseCBhbmQgcmVsYXkgSUNFIGNhbmRpZGF0ZXMgbGFjayByYWRkciAocmVsLWFkZHIpIGFu
ZCBycG9ydCAocmVsLXBvcnQpIGF0dHJpYnV0ZXMgaWYgZ2V0VXNlck1lZGlhIGFjY2VzcyBoYXMg
bm90IGJlZW4gZ3JhbnRlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJD
b250ZW50UmVhZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1dlYkNvbnRlbnRSZWFkZXIu
aAppbmRleCBlZmFlNWYzZGQxYzQ0MjNhM2ZjMDAwNmMwYjZmMGNhOWY2OTNkOWJjLi5iMGM1Yjc2
NGJiODQ4NTFmNDZmMDdiZTM3OTRlMTE5ODMxYjEwMmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1dlYkNvbnRlbnRSZWFkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1dlYkNvbnRlbnRSZWFkZXIuaApAQCAtMzIsNiArMzIsNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBBcmNoaXZlUmVzb3VyY2U7CitjbGFzcyBCbG9iOwogCiBjbGFzcyBGcmFt
ZVdlYkNvbnRlbnRSZWFkZXIgOiBwdWJsaWMgUGFzdGVib2FyZFdlYkNvbnRlbnRSZWFkZXIgewog
cHVibGljOgpAQCAtMTA1LDcgKzEwNiw4IEBAIHN0cnVjdCBGcmFnbWVudEFuZFJlc291cmNlcyB7
CiAgICAgVmVjdG9yPFJlZjxBcmNoaXZlUmVzb3VyY2U+PiByZXNvdXJjZXM7CiB9OwogCi1SZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoRnJhbWUm
LCBOU0F0dHJpYnV0ZWRTdHJpbmcqKTsKK3ZvaWQgcmVwbGFjZVJpY2hDb250ZW50V2l0aEF0dGFj
aG1lbnRzSWZOZWNlc3NhcnkoRG9jdW1lbnRGcmFnbWVudCYsIEhhc2hNYXA8QXRvbWljU3RyaW5n
LCBSZWZQdHI8QmxvYj4+JiYgdXJsVG9CbG9iTWFwKTsKK1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhGcmFtZSYsIE5TQXR0cmlidXRlZFN0cmlu
ZyosIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8QmxvYj4+JiB1cmxUb0Jsb2JNYXApOwog
I2VuZGlmCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRp
dG9yQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1t
CmluZGV4IDUzYjEyN2VkNGUwY2YxODViYTVmZDM3YzVhZWQ5YTk1ZmNiNDdmNzkuLjhiODY5N2Zh
NDgyY2FhNmY5NTAyMzgxNTUyMTU1MzFmYzBkODU0NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQpAQCAtMjIyLDkgKzIyMiwxMiBAQCB2b2lkIEVkaXRv
cjo6cmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmlu
ZyAqYXR0cmlidXRlZAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7Ci0gICAgICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVz
b3VyY2VzKG1fZnJhbWUsIGF0dHJpYnV0ZWRTdHJpbmcpOwotICAgICAgICBpZiAoZnJhZ21lbnQg
JiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCBzZWxlY3RlZFJhbmdlKCkuZ2V0KCks
IEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKLSAgICAgICAgICAgIHBhc3RlQXNGcmFnbWVu
dChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBmYWxzZSwgZmFsc2UsIG1haWxCbG9ja3F1b3Rl
SGFuZGxpbmcpOworICAgICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEJsb2I+PiB1
cmxUb0Jsb2JNYXA7CisgICAgICAgIGlmIChhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRB
bmRBZGRSZXNvdXJjZXMobV9mcmFtZSwgYXR0cmlidXRlZFN0cmluZywgdXJsVG9CbG9iTWFwKSkg
eworICAgICAgICAgICAgcmVwbGFjZVJpY2hDb250ZW50V2l0aEF0dGFjaG1lbnRzSWZOZWNlc3Nh
cnkoKmZyYWdtZW50LCBXVEZNb3ZlKHVybFRvQmxvYk1hcCkpOworICAgICAgICAgICAgaWYgKHNo
b3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAgICAgICAgICAgICAgcGFzdGVBc0ZyYWdtZW50
KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGZhbHNlLCBmYWxzZSwgbWFpbEJsb2NrcXVvdGVI
YW5kbGluZyk7CisgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBTdHJpbmcgdGV4dCA9
IGF0dHJpYnV0ZWRTdHJpbmcuc3RyaW5nOwogICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0VGV4dCh0
ZXh0LCBzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRl
ckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVy
Q29jb2EubW0KaW5kZXggYjYwOTk0MTIwMzBkYTMwYjlhYzU4ODI2ODlmYWZiMjUxNjg4NDU0Yi4u
ZmI1NDAwOTBlNmY2YWMxNzM3NTBjNjNiYWQzNGQwZGRiZjQzOTNkMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0KQEAg
LTM0LDkgKzM0LDExIEBACiAjaW1wb3J0ICJEb2N1bWVudC5oIgogI2ltcG9ydCAiRG9jdW1lbnRG
cmFnbWVudC5oIgogI2ltcG9ydCAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbXBvcnQgIkZpbGUuaCIK
ICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZUxvYWRlci5oIgogI2ltcG9ydCAiRnJh
bWVMb2FkZXJDbGllbnQuaCIKKyNpbXBvcnQgIkhUTUxBdHRhY2htZW50RWxlbWVudC5oIgogI2lt
cG9ydCAiSFRNTEJvZHlFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MSUZyYW1lRWxlbWVudC5oIgog
I2ltcG9ydCAiSFRNTEltYWdlRWxlbWVudC5oIgpAQCAtNDQsNiArNDYsNyBAQAogI2ltcG9ydCAi
TWFpbkZyYW1lLmgiCiAjaW1wb3J0ICJQYWdlLmgiCiAjaW1wb3J0ICJQdWJsaWNVUkxNYW5hZ2Vy
LmgiCisjaW1wb3J0ICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW1wb3J0ICJTZXR0aW5n
cy5oIgogI2ltcG9ydCAiU29ja2V0UHJvdmlkZXIuaCIKICNpbXBvcnQgIldlYkFyY2hpdmVSZXNv
dXJjZUZyb21OU0F0dHJpYnV0ZWRTdHJpbmcuaCIKQEAgLTUyLDYgKzU1LDcgQEAKICNpbXBvcnQg
Im1hcmt1cC5oIgogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9OU0F0dHJpYnV0ZWRTdHJpbmdTUEku
aD4KICNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgorI2ltcG9ydCA8d3RmL1VVSUQuaD4KIAog
I2lmIChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDExMDAwMCkgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSAxMDEzMDApCiBAaW50ZXJmYWNlIE5TQXR0cmlidXRlZFN0cmluZyAoKQpAQCAtNjks
NiArNzMsNjIgQEAgU09GVF9MSU5LKFdlYktpdExlZ2FjeSwgX1dlYkNyZWF0ZUZyYWdtZW50LCB2
b2lkLCAoV2ViQ29yZTo6RG9jdW1lbnQmIGRvY3VtZW50LAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKKyNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQorCit2b2lkIHJlcGxhY2VSaWNoQ29u
dGVudFdpdGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50
LCBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEJsb2I+PiYmIHVybFRvQmxvYk1hcCkKK3sK
KyAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuYXR0YWNo
bWVudEVsZW1lbnRFbmFibGVkKCkgfHwgdXJsVG9CbG9iTWFwLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgVmVjdG9yPFJlZjxFbGVtZW50Pj4gZWxlbWVudHNUb1JlbW92ZTsKKyAg
ICBWZWN0b3I8c3RkOjpwYWlyPFJlZjxGaWxlPiwgUmVmPEVsZW1lbnQ+Pj4gZmlsZXNGb3JFbGVt
ZW50c1RvUmVwbGFjZTsKKyAgICBmb3IgKGF1dG8mIGltYWdlIDogZGVzY2VuZGFudHNPZlR5cGU8
SFRNTEltYWdlRWxlbWVudD4oZnJhZ21lbnQpKSB7CisgICAgICAgIGF1dG8gdXJsID0gaW1hZ2Uu
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnNyY0F0dHIpOworCisg
ICAgICAgIGlmICh1cmwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBlbGVtZW50c1RvUmVtb3Zl
LmFwcGVuZChpbWFnZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGF1dG8gYmxvYiA9IHVybFRvQmxvYk1hcC5nZXQodXJsKTsKKyAgICAgICAgaWYgKCFibG9i
KSB7CisgICAgICAgICAgICBlbGVtZW50c1RvUmVtb3ZlLmFwcGVuZChpbWFnZSk7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gdGl0bGUgPSBpbWFnZS5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6dGl0bGVBdHRyKTsKKyAg
ICAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHRpdGxlID0gQXRvbWljU3Ry
aW5nKCJtZWRpYSIpOworCisgICAgICAgIGZpbGVzRm9yRWxlbWVudHNUb1JlcGxhY2UuYXBwZW5k
KHsgRmlsZTo6Y3JlYXRlKCpibG9iLCB0aXRsZSksIGltYWdlIH0pOworICAgIH0KKworICAgIGZv
ciAoYXV0byYgZmlsZUFuZEVsZW1lbnQgOiBmaWxlc0ZvckVsZW1lbnRzVG9SZXBsYWNlKSB7Cisg
ICAgICAgIGF1dG8mIGZpbGUgPSBmaWxlQW5kRWxlbWVudC5maXJzdDsKKyAgICAgICAgYXV0byYg
ZWxlbWVudFRvUmVwbGFjZSA9IGZpbGVBbmRFbGVtZW50LnNlY29uZDsKKyAgICAgICAgYXV0byBw
YXJlbnQgPSBtYWtlUmVmUHRyKGVsZW1lbnRUb1JlcGxhY2UtPnBhcmVudE5vZGUoKSk7CisgICAg
ICAgIGlmICghcGFyZW50KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYXV0byBh
dHRhY2htZW50ID0gSFRNTEF0dGFjaG1lbnRFbGVtZW50OjpjcmVhdGUoSFRNTE5hbWVzOjphdHRh
Y2htZW50VGFnLCBmcmFnbWVudC5kb2N1bWVudCgpKTsKKyAgICAgICAgYXR0YWNobWVudC0+c2V0
VW5pcXVlSWRlbnRpZmllcihjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkpOworICAgICAgICBh
dHRhY2htZW50LT5zZXRGaWxlKFdURk1vdmUoZmlsZSksIEhUTUxBdHRhY2htZW50RWxlbWVudDo6
VXBkYXRlRGlzcGxheUF0dHJpYnV0ZXM6Olllcyk7CisgICAgICAgIGF0dGFjaG1lbnQtPnVwZGF0
ZURpc3BsYXlNb2RlKEF0dGFjaG1lbnREaXNwbGF5TW9kZTo6SW5QbGFjZSk7CisgICAgICAgIHBh
cmVudC0+cmVwbGFjZUNoaWxkKGF0dGFjaG1lbnQsIGVsZW1lbnRUb1JlcGxhY2UpOworICAgIH0K
KworICAgIGZvciAoYXV0byYgZWxlbWVudFRvUmVtb3ZlIDogZWxlbWVudHNUb1JlbW92ZSkKKyAg
ICAgICAgZWxlbWVudFRvUmVtb3ZlLT5yZW1vdmUoKTsKK30KKworI2Vsc2UKKwordm9pZCByZXBs
YWNlUmljaENvbnRlbnRXaXRoQXR0YWNobWVudHNJZk5lY2Vzc2FyeShEb2N1bWVudEZyYWdtZW50
JiwgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxCbG9iPj4mJikKK3sKK30KKworI2VuZGlm
CisKICNpZiAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxMTAwMDApIHx8IChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPj0gMTAxMzAwKQogCiBzdGF0aWMgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzRm9y
QXR0cmlidXRlZFN0cmluZ0NvbnZlcnNpb24oKQpAQCAtMTU5LDcgKzIxOSw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX2RpZERpc2FibGVJbWFnZSB7IGZhbHNlIH07CiB9OwogCi1SZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoRnJhbWUmIGZyYW1l
LCBOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZykKK1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBj
cmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhGcmFtZSYgZnJhbWUsIE5TQXR0cmlidXRlZFN0
cmluZyAqc3RyaW5nLCBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEJsb2I+PiYgdXJsVG9C
bG9iTWFwKQogewogICAgIGlmICghZnJhbWUucGFnZSgpIHx8ICFmcmFtZS5kb2N1bWVudCgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE3OCw2ICsyMzgsNyBAQCBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoRnJhbWUmIGZyYW1lLCBO
U0F0dHJpYnV0ZQogICAgICAgICBhdXRvIGJsb2IgPSBCbG9iOjpjcmVhdGUoc3VicmVzb3VyY2Ut
PmRhdGEoKSwgc3VicmVzb3VyY2UtPm1pbWVUeXBlKCkpOwogICAgICAgICBTdHJpbmcgYmxvYlVS
TCA9IERPTVVSTDo6Y3JlYXRlT2JqZWN0VVJMKGRvY3VtZW50LCBibG9iKTsKICAgICAgICAgYmxv
YlVSTE1hcC5zZXQoc3VicmVzb3VyY2UtPnVybCgpLnN0cmluZygpLCBibG9iVVJMKTsKKyAgICAg
ICAgdXJsVG9CbG9iTWFwLnNldChibG9iVVJMLCBXVEZNb3ZlKGJsb2IpKTsKICAgICB9CiAgICAg
cmVwbGFjZVN1YnJlc291cmNlVVJMcygqZnJhZ21lbnRBbmRSZXNvdXJjZXMuZnJhZ21lbnQsIFdU
Rk1vdmUoYmxvYlVSTE1hcCkpOwogCkBAIC0yMDcsNyArMjY4LDcgQEAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8TWFya3VwQW5kQXJjaGl2ZT4gZXh0cmFjdE1hcmt1cEFuZEFyY2hpdmUoU2hhcmVkQnVm
ZmVyJiBidWYKICAgICByZXR1cm4gTWFya3VwQW5kQXJjaGl2ZSB7IFN0cmluZzo6ZnJvbVVURjgo
bWFpblJlc291cmNlLT5kYXRhKCkuZGF0YSgpLCBtYWluUmVzb3VyY2UtPmRhdGEoKS5zaXplKCkp
LCBtYWluUmVzb3VyY2UucmVsZWFzZU5vbk51bGwoKSwgYXJjaGl2ZS5yZWxlYXNlTm9uTnVsbCgp
IH07CiB9CiAKLXN0YXRpYyBTdHJpbmcgc2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZShEb2N1bWVu
dCYgZGVzdGluYXRpb25Eb2N1bWVudCwgTWFya3VwQW5kQXJjaGl2ZSYgbWFya3VwQW5kQXJjaGl2
ZSwgY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKGNvbnN0IFN0cmluZyk+JiBjYW5TaG93TUlNRVR5
cGVBc0hUTUwpCitzdGF0aWMgU3RyaW5nIHNhbml0aXplTWFya3VwV2l0aEFyY2hpdmUoRG9jdW1l
bnQmIGRlc3RpbmF0aW9uRG9jdW1lbnQsIE1hcmt1cEFuZEFyY2hpdmUmIG1hcmt1cEFuZEFyY2hp
dmUsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChjb25zdCBTdHJpbmcpPiYgY2FuU2hvd01JTUVU
eXBlQXNIVE1MLCBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEJsb2I+PiYgdXJsVG9CbG9i
TWFwKQogewogICAgIGF1dG8gcGFnZSA9IGNyZWF0ZVBhZ2VGb3JTYW5pdGl6aW5nV2ViQ29udGVu
dCgpOwogICAgIERvY3VtZW50KiBzdGFnaW5nRG9jdW1lbnQgPSBwYWdlLT5tYWluRnJhbWUoKS5k
b2N1bWVudCgpOwpAQCAtMjE5LDYgKzI4MCw3IEBAIHN0YXRpYyBTdHJpbmcgc2FuaXRpemVNYXJr
dXBXaXRoQXJjaGl2ZShEb2N1bWVudCYgZGVzdGluYXRpb25Eb2N1bWVudCwgTWFya3VwQW5kCiAg
ICAgICAgIGF1dG8gYmxvYiA9IEJsb2I6OmNyZWF0ZShzdWJyZXNvdXJjZS0+ZGF0YSgpLCBzdWJy
ZXNvdXJjZS0+bWltZVR5cGUoKSk7CiAgICAgICAgIFN0cmluZyBibG9iVVJMID0gRE9NVVJMOjpj
cmVhdGVPYmplY3RVUkwoZGVzdGluYXRpb25Eb2N1bWVudCwgYmxvYik7CiAgICAgICAgIGJsb2JV
UkxNYXAuc2V0KHN1YnJlc291cmNlLT51cmwoKS5zdHJpbmcoKSwgYmxvYlVSTCk7CisgICAgICAg
IHVybFRvQmxvYk1hcC5zZXQoYmxvYlVSTCwgV1RGTW92ZShibG9iKSk7CiAgICAgfQogCiAgICAg
YXV0byBjb250ZW50T3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShtYXJrdXBBbmRBcmNo
aXZlLm1haW5SZXNvdXJjZS0+dXJsKCkpOwpAQCAtMjM0LDcgKzI5Niw3IEBAIHN0YXRpYyBTdHJp
bmcgc2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZShEb2N1bWVudCYgZGVzdGluYXRpb25Eb2N1bWVu
dCwgTWFya3VwQW5kCiAgICAgICAgIGF1dG8gc3ViZnJhbWVVUkwgPSBzdWJmcmFtZU1haW5SZXNv
dXJjZS0+dXJsKCk7CiAgICAgICAgIE1hcmt1cEFuZEFyY2hpdmUgc3ViZnJhbWVDb250ZW50ID0g
eyBTdHJpbmc6OmZyb21VVEY4KHN1YmZyYW1lTWFpblJlc291cmNlLT5kYXRhKCkuZGF0YSgpLCBz
dWJmcmFtZU1haW5SZXNvdXJjZS0+ZGF0YSgpLnNpemUoKSksCiAgICAgICAgICAgICBzdWJmcmFt
ZU1haW5SZXNvdXJjZS5yZWxlYXNlTm9uTnVsbCgpLCBzdWJmcmFtZUFyY2hpdmUuY29weVJlZigp
IH07Ci0gICAgICAgIGF1dG8gc3ViZnJhbWVNYXJrdXAgPSBzYW5pdGl6ZU1hcmt1cFdpdGhBcmNo
aXZlKGRlc3RpbmF0aW9uRG9jdW1lbnQsIHN1YmZyYW1lQ29udGVudCwgY2FuU2hvd01JTUVUeXBl
QXNIVE1MKTsKKyAgICAgICAgYXV0byBzdWJmcmFtZU1hcmt1cCA9IHNhbml0aXplTWFya3VwV2l0
aEFyY2hpdmUoZGVzdGluYXRpb25Eb2N1bWVudCwgc3ViZnJhbWVDb250ZW50LCBjYW5TaG93TUlN
RVR5cGVBc0hUTUwsIHVybFRvQmxvYk1hcCk7CiAKICAgICAgICAgQ1N0cmluZyB1dGY4ID0gc3Vi
ZnJhbWVNYXJrdXAudXRmOCgpOwogICAgICAgICBWZWN0b3I8dWludDhfdD4gYmxvYkJ1ZmZlcjsK
QEAgLTI0NCw2ICszMDYsNyBAQCBzdGF0aWMgU3RyaW5nIHNhbml0aXplTWFya3VwV2l0aEFyY2hp
dmUoRG9jdW1lbnQmIGRlc3RpbmF0aW9uRG9jdW1lbnQsIE1hcmt1cEFuZAogCiAgICAgICAgIFN0
cmluZyBzdWJmcmFtZUJsb2JVUkwgPSBET01VUkw6OmNyZWF0ZU9iamVjdFVSTChkZXN0aW5hdGlv
bkRvY3VtZW50LCBibG9iKTsKICAgICAgICAgYmxvYlVSTE1hcC5zZXQoc3ViZnJhbWVVUkwuc3Ry
aW5nKCksIHN1YmZyYW1lQmxvYlVSTCk7CisgICAgICAgIHVybFRvQmxvYk1hcC5zZXQoc3ViZnJh
bWVCbG9iVVJMLCBXVEZNb3ZlKGJsb2IpKTsKICAgICB9CiAKICAgICByZXBsYWNlU3VicmVzb3Vy
Y2VVUkxzKGZyYWdtZW50LmdldCgpLCBXVEZNb3ZlKGJsb2JVUkxNYXApKTsKQEAgLTI3NCwxMSAr
MzM3LDE2IEBAIGJvb2wgV2ViQ29udGVudFJlYWRlcjo6cmVhZFdlYkFyY2hpdmUoU2hhcmVkQnVm
ZmVyJiBidWZmZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIEhhc2hNYXA8
QXRvbWljU3RyaW5nLCBSZWZQdHI8QmxvYj4+IHVybFRvQmxvYk1hcDsKICAgICBTdHJpbmcgc2Fu
aXRpemVkTWFya3VwID0gc2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZSgqZnJhbWUuZG9jdW1lbnQo
KSwgKnJlc3VsdCwgWyZdIChjb25zdCBTdHJpbmcmIHR5cGUpIHsKICAgICAgICAgcmV0dXJuIGZy
YW1lLmxvYWRlcigpLmNsaWVudCgpLmNhblNob3dNSU1FVHlwZUFzSFRNTCh0eXBlKTsKLSAgICB9
KTsKKyAgICB9LCB1cmxUb0Jsb2JNYXApOwogICAgIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRG
cm9tTWFya3VwKCpmcmFtZS5kb2N1bWVudCgpLCBzYW5pdGl6ZWRNYXJrdXAsIGJsYW5rVVJMKCks
IERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudCk7CiAKKyAgICBpZiAoIWZyYWdtZW50
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXBsYWNlUmljaENvbnRlbnRXaXRoQXR0
YWNobWVudHNJZk5lY2Vzc2FyeSgqZnJhZ21lbnQsIFdURk1vdmUodXJsVG9CbG9iTWFwKSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI5OCw5ICszNjYsMTAgQEAgYm9vbCBXZWJDb250ZW50
TWFya3VwUmVhZGVyOjpyZWFkV2ViQXJjaGl2ZShTaGFyZWRCdWZmZXImIGJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0
cjxCbG9iPj4gdXJsVG9CbG9iTWFwOwogICAgIG1hcmt1cCA9IHNhbml0aXplTWFya3VwV2l0aEFy
Y2hpdmUoKmZyYW1lLmRvY3VtZW50KCksICpyZXN1bHQsIFsmXSAoY29uc3QgU3RyaW5nJiB0eXBl
KSB7CiAgICAgICAgIHJldHVybiBmcmFtZS5sb2FkZXIoKS5jbGllbnQoKS5jYW5TaG93TUlNRVR5
cGVBc0hUTUwodHlwZSk7Ci0gICAgfSk7CisgICAgfSwgdXJsVG9CbG9iTWFwKTsKIAogICAgIHJl
dHVybiB0cnVlOwogfQpAQCAtMzUzLDkgKzQyMiwxMiBAQCBib29sIFdlYkNvbnRlbnRSZWFkZXI6
OnJlYWRSVEZEKFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogICAgIGlmIChmcmFtZS5zZXR0aW5ncygp
LnByZWZlck1JTUVUeXBlRm9ySW1hZ2VzKCkgfHwgIWZyYW1lLmRvY3VtZW50KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEFuZEFk
ZFJlc291cmNlcyhmcmFtZSwgYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5p
dFdpdGhSVEZEOmJ1ZmZlci5jcmVhdGVOU0RhdGEoKS5nZXQoKSBkb2N1bWVudEF0dHJpYnV0ZXM6
bnVsbHB0cl0pLmdldCgpKTsKKyAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEJsb2I+
PiB1cmxUb0Jsb2JNYXA7CisgICAgYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRk
UmVzb3VyY2VzKGZyYW1lLCBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0
V2l0aFJURkQ6YnVmZmVyLmNyZWF0ZU5TRGF0YSgpLmdldCgpIGRvY3VtZW50QXR0cmlidXRlczpu
dWxscHRyXSkuZ2V0KCksIHVybFRvQmxvYk1hcCk7CiAgICAgaWYgKCFmcmFnbWVudCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVwbGFjZVJpY2hDb250ZW50V2l0aEF0dGFjaG1lbnRz
SWZOZWNlc3NhcnkoKmZyYWdtZW50LCBXVEZNb3ZlKHVybFRvQmxvYk1hcCkpOwogICAgIGFkZEZy
YWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgcmV0dXJuIHRydWU7CkBA
IC0zNjUsNyArNDM3LDEzIEBAIGJvb2wgV2ViQ29udGVudE1hcmt1cFJlYWRlcjo6cmVhZFJURkQo
U2hhcmVkQnVmZmVyJiBidWZmZXIpCiB7CiAgICAgaWYgKCFmcmFtZS5kb2N1bWVudCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5k
QWRkUmVzb3VyY2VzKGZyYW1lLCBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBp
bml0V2l0aFJURkQ6YnVmZmVyLmNyZWF0ZU5TRGF0YSgpLmdldCgpIGRvY3VtZW50QXR0cmlidXRl
czpudWxscHRyXSkuZ2V0KCkpOworCisgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxC
bG9iPj4gdXJsVG9CbG9iTWFwOworICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEFu
ZEFkZFJlc291cmNlcyhmcmFtZSwgYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10g
aW5pdFdpdGhSVEZEOmJ1ZmZlci5jcmVhdGVOU0RhdGEoKS5nZXQoKSBkb2N1bWVudEF0dHJpYnV0
ZXM6bnVsbHB0cl0pLmdldCgpLCB1cmxUb0Jsb2JNYXApOworICAgIGlmICghZnJhZ21lbnQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2ht
ZW50c0lmTmVjZXNzYXJ5KCpmcmFnbWVudCwgV1RGTW92ZSh1cmxUb0Jsb2JNYXApKTsKICAgICBt
YXJrdXAgPSBjcmVhdGVNYXJrdXAoKmZyYWdtZW50KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAg
LTM3NSw5ICs0NTMsMTIgQEAgYm9vbCBXZWJDb250ZW50UmVhZGVyOjpyZWFkUlRGKFNoYXJlZEJ1
ZmZlciYgYnVmZmVyKQogICAgIGlmIChmcmFtZS5zZXR0aW5ncygpLnByZWZlck1JTUVUeXBlRm9y
SW1hZ2VzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gZnJhZ21lbnQgPSBj
cmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhmcmFtZSwgYWRvcHROUyhbW05TQXR0cmlidXRl
ZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEY6YnVmZmVyLmNyZWF0ZU5TRGF0YSgpLmdldCgpIGRv
Y3VtZW50QXR0cmlidXRlczpudWxscHRyXSkuZ2V0KCkpOworICAgIEhhc2hNYXA8QXRvbWljU3Ry
aW5nLCBSZWZQdHI8QmxvYj4+IHVybFRvQmxvYk1hcDsKKyAgICBhdXRvIGZyYWdtZW50ID0gY3Jl
YXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoZnJhbWUsIGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRT
dHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGOmJ1ZmZlci5jcmVhdGVOU0RhdGEoKS5nZXQoKSBkb2N1
bWVudEF0dHJpYnV0ZXM6bnVsbHB0cl0pLmdldCgpLCB1cmxUb0Jsb2JNYXApOwogICAgIGlmICgh
ZnJhZ21lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlcGxhY2VSaWNoQ29udGVu
dFdpdGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5KCpmcmFnbWVudCwgV1RGTW92ZSh1cmxUb0Jsb2JN
YXApKTsKICAgICBhZGRGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAg
IHJldHVybiB0cnVlOwpAQCAtMzg3LDkgKzQ2OCwxMyBAQCBib29sIFdlYkNvbnRlbnRNYXJrdXBS
ZWFkZXI6OnJlYWRSVEYoU2hhcmVkQnVmZmVyJiBidWZmZXIpCiB7CiAgICAgaWYgKCFmcmFtZS5k
b2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byBmcmFnbWVudCA9IGNy
ZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKGZyYW1lLCBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURjpidWZmZXIuY3JlYXRlTlNEYXRhKCkuZ2V0KCkgZG9j
dW1lbnRBdHRyaWJ1dGVzOm51bGxwdHJdKS5nZXQoKSk7CisKKyAgICBIYXNoTWFwPEF0b21pY1N0
cmluZywgUmVmUHRyPEJsb2I+PiB1cmxUb0Jsb2JNYXA7CisgICAgYXV0byBmcmFnbWVudCA9IGNy
ZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKGZyYW1lLCBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURjpidWZmZXIuY3JlYXRlTlNEYXRhKCkuZ2V0KCkgZG9j
dW1lbnRBdHRyaWJ1dGVzOm51bGxwdHJdKS5nZXQoKSwgdXJsVG9CbG9iTWFwKTsKICAgICBpZiAo
IWZyYWdtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXBsYWNlUmljaENvbnRl
bnRXaXRoQXR0YWNobWVudHNJZk5lY2Vzc2FyeSgqZnJhZ21lbnQsIFdURk1vdmUodXJsVG9CbG9i
TWFwKSk7CiAgICAgbWFya3VwID0gY3JlYXRlTWFya3VwKCpmcmFnbWVudCk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CkBAIC00MTIsNiArNDk3LDExIEBAIGJvb2wgV2ViQ29udGVudFJlYWRlcjo6cmVh
ZEltYWdlKFJlZjxTaGFyZWRCdWZmZXI+JiYgYnVmZmVyLCBjb25zdCBTdHJpbmcmIHR5cGUpCiAg
ICAgYXV0byYgZG9jdW1lbnQgPSAqZnJhbWUuZG9jdW1lbnQoKTsKICAgICBTdHJpbmcgYmxvYlVS
TCA9IERPTVVSTDo6Y3JlYXRlT2JqZWN0VVJMKGRvY3VtZW50LCBibG9iKTsKICAgICBhZGRGcmFn
bWVudChjcmVhdGVGcmFnbWVudEZvckltYWdlQW5kVVJMKGRvY3VtZW50LCBibG9iVVJMKSk7CisK
KyAgICBpZiAoIWZyYWdtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXBsYWNl
UmljaENvbnRlbnRXaXRoQXR0YWNobWVudHNJZk5lY2Vzc2FyeSgqZnJhZ21lbnQsIHt7IGJsb2JV
UkwsIFdURk1vdmUoYmxvYikgfX0pOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9XZWJDb250ZW50UmVhZGVyTWFjLm1tIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvV2ViQ29udGVudFJlYWRlck1hYy5tbQppbmRleCBhNzk4
YTE5YzQ3OWU3MzEwNGFkNGEwNGExZWE1NGVhYmIxMzk3ZjI1Li45YzVkMjU0MGI2MDVlZWFkMjMy
ODg1YTc2ZDU5YjMyYzQ2YWY3OGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L21hYy9XZWJDb250ZW50UmVhZGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
bWFjL1dlYkNvbnRlbnRSZWFkZXJNYWMubW0KQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbXBvcnQgIlRl
eHQuaCIKICNpbXBvcnQgIldlYkNvcmVOU1VSTEV4dHJhcy5oIgogI2ltcG9ydCAibWFya3VwLmgi
CisjaW1wb3J0IDx3dGYvVVVJRC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY1LDcg
KzY2LDggQEAgYm9vbCBXZWJDb250ZW50UmVhZGVyOjpyZWFkRmlsZW5hbWVzKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXRocykKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogICAgICAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5hdHRhY2htZW50
RWxlbWVudEVuYWJsZWQoKSkgewogICAgICAgICAgICAgYXV0byBhdHRhY2htZW50ID0gSFRNTEF0
dGFjaG1lbnRFbGVtZW50OjpjcmVhdGUoSFRNTE5hbWVzOjphdHRhY2htZW50VGFnLCBkb2N1bWVu
dCk7Ci0gICAgICAgICAgICBhdHRhY2htZW50LT5zZXRGaWxlKEZpbGU6OmNyZWF0ZShbW05TVVJM
IGZpbGVVUkxXaXRoUGF0aDp0ZXh0XSBwYXRoXSkpOworICAgICAgICAgICAgYXR0YWNobWVudC0+
c2V0VW5pcXVlSWRlbnRpZmllcihjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkpOworICAgICAg
ICAgICAgYXR0YWNobWVudC0+c2V0RmlsZShGaWxlOjpjcmVhdGUoW05TVVJMIGZpbGVVUkxXaXRo
UGF0aDp0ZXh0XS5wYXRoKSwgSFRNTEF0dGFjaG1lbnRFbGVtZW50OjpVcGRhdGVEaXNwbGF5QXR0
cmlidXRlczo6WWVzKTsKICAgICAgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChhdHRhY2ht
ZW50KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5jcHAKaW5kZXggMWEwMzM3OWFhNTU4ODA2YzFm
NDIzMzVlZjA3ZTRkYWEwNmI3MDIzYS4uMjVmNTE5NDNkMmM3MTE5NGI0Y2Y3MjdkZmNiNmVhN2E1
MzVhZWNlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0YWNobWVudEVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dGFjaG1lbnRFbGVtZW50
LmNwcApAQCAtNDUsNiArNDUsMTAgQEAKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNs
dWRlIDxwYWwvRmlsZVNpemVGb3JtYXR0ZXIuaD4KIAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2lu
Y2x1ZGUgIlVUSVV0aWxpdGllcy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKQEAgLTExMiwxMiArMTE2LDI0IEBAIFVSTCBIVE1M
QXR0YWNobWVudEVsZW1lbnQ6OmJsb2JVUkwoKSBjb25zdAogICAgIHJldHVybiB7IHsgfSwgYXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OndlYmtpdGF0dGFjaG1lbnRi
bG9idXJsQXR0cikuc3RyaW5nKCkgfTsKIH0KIAotdm9pZCBIVE1MQXR0YWNobWVudEVsZW1lbnQ6
OnNldEZpbGUoUmVmUHRyPEZpbGU+JiYgZmlsZSkKK3ZvaWQgSFRNTEF0dGFjaG1lbnRFbGVtZW50
OjpzZXRGaWxlKFJlZlB0cjxGaWxlPiYmIGZpbGUsIFVwZGF0ZURpc3BsYXlBdHRyaWJ1dGVzIHVw
ZGF0ZUF0dHJpYnV0ZXMpCiB7CiAgICAgbV9maWxlID0gV1RGTW92ZShmaWxlKTsKIAogICAgIHNl
dEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjp3ZWJraXRhdHRhY2ht
ZW50YmxvYnVybEF0dHIsIG1fZmlsZSA/IG1fZmlsZS0+dXJsKCkgOiBlbXB0eVN0cmluZygpKTsK
IAorICAgIGlmICh1cGRhdGVBdHRyaWJ1dGVzID09IFVwZGF0ZURpc3BsYXlBdHRyaWJ1dGVzOjpZ
ZXMpIHsKKyAgICAgICAgaWYgKG1fZmlsZSkgeworICAgICAgICAgICAgc2V0QXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnRpdGxlQXR0ciwgbV9maWxlLT5uYW1lKCkp
OworICAgICAgICAgICAgc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFt
ZXM6OnN1YnRpdGxlQXR0ciwgZmlsZVNpemVEZXNjcmlwdGlvbihtX2ZpbGUtPnNpemUoKSkpOwor
ICAgICAgICAgICAgc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6
OnR5cGVBdHRyLCBtX2ZpbGUtPnR5cGUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICByZW1vdmVBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0aXRsZUF0dHIpOworICAgICAgICAgICAgcmVt
b3ZlQXR0cmlidXRlKEhUTUxOYW1lczo6c3VidGl0bGVBdHRyKTsKKyAgICAgICAgICAgIHJlbW92
ZUF0dHJpYnV0ZShIVE1MTmFtZXM6OnR5cGVBdHRyKTsKKyAgICAgICAgfQorICAgIH0KKwogICAg
IGlmIChhdXRvKiByZW5kZXJBdHRhY2htZW50ID0gYXR0YWNobWVudFJlbmRlcmVyKCkpCiAgICAg
ICAgIHJlbmRlckF0dGFjaG1lbnQtPmludmFsaWRhdGUoKTsKIApAQCAtMjY2LDggKzI4MiwxNyBA
QCBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gSFRNTEF0dGFjaG1lbnRFbGVtZW50Ojppbm5lclZp
ZGVvKCkgY29uc3QKIAogdm9pZCBIVE1MQXR0YWNobWVudEVsZW1lbnQ6OnBvcHVsYXRlU2hhZG93
Um9vdElmTmVjZXNzYXJ5KCkKIHsKKyAgICBpZiAoIW1fZmlsZSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgYXV0byBtaW1lVHlwZSA9IGF0dGFjaG1lbnRUeXBlKCk7Ci0gICAgaWYgKCFtX2ZpbGUg
fHwgbWltZVR5cGUuaXNFbXB0eSgpKQorCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgaWYgKGlz
RGVjbGFyZWRVVEkobWltZVR5cGUpKQorICAgICAgICBtaW1lVHlwZSA9IE1JTUVUeXBlRnJvbVVU
SShtaW1lVHlwZSk7CisjZW5kaWYKKworICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdl
TUlNRVR5cGUobWltZVR5cGUpIHx8IE1JTUVUeXBlUmVnaXN0cnk6OmlzUERGTUlNRVR5cGUobWlt
ZVR5cGUpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRhY2htZW50
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0YWNobWVudEVsZW1lbnQuaApp
bmRleCBjOGYzNWQ1YjU0OGEzN2VhZTkyYmJiZGI4NGE2N2Y3ZTA0NjJhOWQ3Li4xNzk1ZDFmZDBi
OWNiMGIxOWMyNzE1NWIwYzE1ZTUzMjVmNDAwNzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEF0dGFjaG1lbnRFbGVtZW50LmgKQEAgLTQ1LDcgKzQ1LDkgQEAgcHVibGljOgogCiAgICAg
V0VCQ09SRV9FWFBPUlQgVVJMIGJsb2JVUkwoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBG
aWxlKiBmaWxlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRGaWxlKFJlZlB0cjxGaWxlPiYmKTsKKwor
ICAgIGVudW0gY2xhc3MgVXBkYXRlRGlzcGxheUF0dHJpYnV0ZXMgeyBObywgWWVzIH07CisgICAg
dm9pZCBzZXRGaWxlKFJlZlB0cjxGaWxlPiYmLCBVcGRhdGVEaXNwbGF5QXR0cmlidXRlcyA9IFVw
ZGF0ZURpc3BsYXlBdHRyaWJ1dGVzOjpObyk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcg
dW5pcXVlSWRlbnRpZmllcigpIGNvbnN0OwogICAgIHZvaWQgc2V0VW5pcXVlSWRlbnRpZmllcihj
b25zdCBTdHJpbmcmKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCA4N2MwZmQzMGQzYzdkMTZiZjM1YzEyMDRmNmFkYjY3ODIyMTkwMDYyLi41YTA4
MDBjM2MxOWJiMjllZDc4NGZhOGE5YTk1ZjM5MTAyMDIzY2U2IDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTctMTIt
MTQgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW0F0
dGFjaG1lbnQgU3VwcG9ydF0gSW5zZXJ0IGltYWdlcyBhcyBpbmxpbmUgYXR0YWNobWVudHMgd2hl
biBwYXN0aW5nIGFuZCBkcm9wcGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTgwODUzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNTc1NjI2OD4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIG5l
dyBXS0F0dGFjaG1lbnQgQVBJIHRlc3RzIGFuZCB0ZXN0IHN1cHBvcnQuIFNlZSBjb21tZW50cyBi
ZWxvdyBmb3IgbW9yZSBkZXRhaWwuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tOgorCisgICAgICAgIFR3ZWFrIHRoZSBlZGl0
aW5nIHRlc3QgcGFnZSBtYXJrdXAsIHN1Y2ggdGhhdCBkb2N1bWVudC5ib2R5LmlubmVySFRNTCBk
b2Vzbid0IGFkZGl0aW9uYWxseSBjb250YWluIHRoZSBjb250ZW50cworICAgICAgICBvZiB0aGUg
c2NyaXB0IHRhZy4KKworICAgICAgICAod2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cyk6Cisg
ICAgICAgICh0ZXN0SW1hZ2VGaWxlVVJMKToKKyAgICAgICAgKHRlc3RJbWFnZURhdGEpOgorICAg
ICAgICAodGVzdFBERkZpbGVVUkwpOgorICAgICAgICAodGVzdFBERkRhdGEpOgorICAgICAgICAo
cGxhdGZvcm1Db3B5UmljaFRleHRXaXRoQXR0YWNobWVudCk6CisgICAgICAgIChwbGF0Zm9ybUNv
cHlQTkcpOgorICAgICAgICAocGxhdGZvcm1JbWFnZVdpdGhEYXRhKToKKworICAgICAgICBBZGQg
c29tZSBwbGF0Zm9ybSBoZWxwZXIgZnVuY3Rpb25zLCB3aGljaCBzb21lIG9mIHRoZSBwbGF0Zm9y
bS1hZ25vc3RpYyB0ZXN0cyBiZWxvdyB1c2UgdG8gcmVzb2x2ZSBkaWZmZXJlbmNlcworICAgICAg
ICBiZXR3ZWVuIGlPUyBhbmQgbWFjT1Mgd2hlbiB3cml0aW5nIHRvIHRoZSBwYXN0ZWJvYXJkIGFu
ZCBjcmVhdGluZyBhbiBpbWFnZSBmcm9tIGRhdGEuCisKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OlRFU1QpOgorCisgICAgICAgIEFkZCBuZXcgQVBJIHRlc3RzIHRvIGV4ZXJjaXNlIGRyYWcgYW5k
IGRyb3AvY29weSBhbmQgcGFzdGUgb2YgcmljaCBjb250ZW50IChuYW1lbHksIGltYWdlcyBhbmQg
ZmlsZXMpIG9uIGlPUyBhbmQKKyAgICAgICAgbWFjT1MuIGlPUyBhdHRhY2htZW50IHRlc3RzIHVz
ZSBEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgdG8gc2ltdWxhdGUgVUlLaXQgZHJhZyBhbmQgZHJv
cCBjb29yZGluYXRpb24uIE9uIG1hY09TLAorICAgICAgICBoYW5kbGluZyBvZiBkcm9wcGVkIGNv
bnRlbnQgaXMgbXVjaCBjbG9zZXIgdG8gaGFuZGxpbmcgb2YgcGFzdGVkIGNvbnRlbnQgKHRoZXkg
dXNlIHRoZSBzYW1lIGNvZGVwYXRocyB0byByZWFkCisgICAgICAgIGZyb20gdGhlIHBsYXRmb3Jt
IHBhc3RlYm9hcmQpLCBzbyBleGVyY2lzaW5nIHBhc3RlIGNvZGVwYXRocyBvbiBNYWMgaXMgc3Vm
ZmljaWVudC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvaW9zL0RhdGFJbnRlcmFjdGlvblNp
bXVsYXRvci5oOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvaW9zL0RhdGFJbnRlcmFjdGlvblNp
bXVsYXRvci5tbToKKyAgICAgICAgKC1bRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIF9yZXNldFNp
bXVsYXRlZFN0YXRlXSk6CisgICAgICAgICgtW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBpbnNl
cnRlZEF0dGFjaG1lbnRzXSk6CisgICAgICAgICgtW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBy
ZW1vdmVkQXR0YWNobWVudHNdKToKKworICAgICAgICBUZWFjaCB0aGUgaU9TIGRyYWcgYW5kIGRy
b3Agc2ltdWxhdG9yIHRvIGtlZXAgdHJhY2sgb2YgYXR0YWNobWVudCBlbGVtZW50cyB0aGF0IGFy
ZSBpbnNlcnRlZCBkdXJpbmcgYSBkcm9wLiBXZQorICAgICAgICBhbHNvIGtlZXAgdHJhY2sgb2Yg
cmVtb3ZlZCBhdHRhY2htZW50cyBoZXJlIHRvbywgdGhvdWdoIG5vIGRlZmF1bHQgZHJvcCBoYW5k
bGluZyBzY2VuYXJpbyBzaG91bGQgdHJpZ2dlcgorICAgICAgICBhdHRhY2htZW50IHJlbW92YWws
IHNvIHdlIHNpbXBseSB1c2UgdGhpcyB0byBjaGVjayB0aGF0IG5vIF9XS0F0dGFjaG1lbnRzIHdl
cmUgcmVtb3ZlZCBkdXJpbmcgYSBkcm9wLgorCisgICAgICAgICgtW0RhdGFJbnRlcmFjdGlvblNp
bXVsYXRvciBfd2ViVmlldzpkaWRJbnNlcnRBdHRhY2htZW50Ol0pOgorICAgICAgICAoLVtEYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IgX3dlYlZpZXc6ZGlkUmVtb3ZlQXR0YWNobWVudDpdKToKKwog
MjAxNy0xMi0xNCAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IGNoZWNrLXdlYmtpdC1zdHlsZTogU3RvcCB3YXJuaW5nIGFib3V0IHVuZGVyc2NvcmVzIGluIHdl
YnJ0YyBzb3VyY2UKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tCmluZGV4IDkzYWQyYTQ4NTcxZWRlMjg0ZjRm
MjYwYmI3MjFhZjM0NzlhZjQzODIuLjNmOGU2MWQxY2QwNjQ5NjA1NDBmNzJmYjc4NGFjZGZjMDNi
ZWQ0OGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
V0tBdHRhY2htZW50VGVzdHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbQpAQCAtMjUsMTMgKzI1LDE5IEBACiAKICNpbXBv
cnQgImNvbmZpZy5oIgogCisjaW1wb3J0ICJEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuaCIKICNp
bXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisj
aW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktp
dC9XS1dlYlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1wb3J0
IDxXZWJLaXQvV2ViS2l0UHJpdmF0ZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCisj
aWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCA8TW9iaWxlQ29yZVNlcnZpY2VzL01vYmlsZUNvcmVT
ZXJ2aWNlcy5oPgorI2VuZGlmCisKICNpZiBXS19BUElfRU5BQkxFRAogCiBAaW50ZXJmYWNlIEF0
dGFjaG1lbnRVcGRhdGVPYnNlcnZlciA6IE5TT2JqZWN0IDxXS1VJRGVsZWdhdGVQcml2YXRlPgpA
QCAtMTIyLDkgKzEyOCwxMCBAQCBzdGF0aWMgUmV0YWluUHRyPFRlc3RXS1dlYlZpZXc+IHdlYlZp
ZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKQogewogICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFk
b3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW2NvbmZp
Z3VyYXRpb24gX3NldEF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZDpZRVNdOworICAgIFdLUHJlZmVy
ZW5jZXNTZXRDdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQoKFdLUHJlZmVyZW5jZXNSZWYpW2Nv
bmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdLCBZRVMpOwogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCAzMjAsIDUwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7Ci0gICAgW3dl
YlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPGJvZHkgY29udGVudGVkaXRhYmxl
PjwvYm9keT48c2NyaXB0PmRvY3VtZW50LmJvZHkuZm9jdXMoKTs8L3NjcmlwdD4iXTsKKyAgICBb
d2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8c2NyaXB0PmZvY3VzID0gKCkg
PT4gZG9jdW1lbnQuYm9keS5mb2N1cygpPC9zY3JpcHQ+PGJvZHkgb25sb2FkPWZvY3VzKCkgY29u
dGVudGVkaXRhYmxlPjwvYm9keT4iXTsKIAogICAgIHJldHVybiB3ZWJWaWV3OwogfQpAQCAtMTM0
LDEwICsxNDEsMTQgQEAgc3RhdGljIE5TRGF0YSAqdGVzdEhUTUxEYXRhKCkKICAgICByZXR1cm4g
W0AiPGEgaHJlZj0nIyc+VGhpcyBpcyBzb21lIEhUTUwgZGF0YTwvYT4iIGRhdGFVc2luZ0VuY29k
aW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKIH0KIAorc3RhdGljIE5TVVJMICp0ZXN0SW1hZ2VG
aWxlVVJMKCkKK3sKKyAgICByZXR1cm4gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNv
dXJjZTpAImljb24iIHdpdGhFeHRlbnNpb246QCJwbmciIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJL
aXRBUEkucmVzb3VyY2VzIl07Cit9CisKIHN0YXRpYyBOU0RhdGEgKnRlc3RJbWFnZURhdGEoKQog
ewotICAgIE5TVVJMICp1cmwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNl
OkAiaWNvbiIgd2l0aEV4dGVuc2lvbjpAInBuZyIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQ
SS5yZXNvdXJjZXMiXTsKLSAgICByZXR1cm4gW05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZVUkw6
dXJsXTsKKyAgICByZXR1cm4gW05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZVUkw6dGVzdEltYWdl
RmlsZVVSTCgpXTsKIH0KIAogc3RhdGljIE5TRGF0YSAqdGVzdFZpZGVvRGF0YSgpCkBAIC0xNDYs
MTAgKzE1NywxNCBAQCBzdGF0aWMgTlNEYXRhICp0ZXN0VmlkZW9EYXRhKCkKICAgICByZXR1cm4g
W05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZVUkw6dXJsXTsKIH0KIAorc3RhdGljIE5TVVJMICp0
ZXN0UERGRmlsZVVSTCgpCit7CisgICAgcmV0dXJuIFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJM
Rm9yUmVzb3VyY2U6QCJ0ZXN0IiB3aXRoRXh0ZW5zaW9uOkAicGRmIiBzdWJkaXJlY3Rvcnk6QCJU
ZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworfQorCiBzdGF0aWMgTlNEYXRhICp0ZXN0UERGRGF0
YSgpCiB7Ci0gICAgTlNVUkwgKnVybCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVz
b3VyY2U6QCJ0ZXN0IiB3aXRoRXh0ZW5zaW9uOkAicGRmIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2Vi
S2l0QVBJLnJlc291cmNlcyJdOwotICAgIHJldHVybiBbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNP
ZlVSTDp1cmxdOworICAgIHJldHVybiBbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZlVSTDp0ZXN0
UERGRmlsZVVSTCgpXTsKIH0KIAogc3RhdGljIF9XS0F0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyAq
ZGlzcGxheU9wdGlvbnNXaXRoTW9kZShfV0tBdHRhY2htZW50RGlzcGxheU1vZGUgbW9kZSkKQEAg
LTI5MSw4ICszMDYsNjcgQEAgLSAodm9pZClleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTooTlNEYXRh
ICopZXhwZWN0ZWREYXRhCiAKIEBlbmQKIAorI3ByYWdtYSBtYXJrIC0gUGxhdGZvcm0gdGVzdGlu
ZyBoZWxwZXIgZnVuY3Rpb25zCisKK3ZvaWQgcGxhdGZvcm1Db3B5UmljaFRleHRXaXRoSW1hZ2Uo
KQoreworICAgIGF1dG8gcmljaFRleHQgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0
cmluZyBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gaW1hZ2UgPSBhZG9wdE5TKFtbTlNUZXh0QXR0
YWNobWVudCBhbGxvY10gaW5pdFdpdGhEYXRhOnRlc3RJbWFnZURhdGEoKSBvZlR5cGU6KE5TU3Ry
aW5nICopa1VUVHlwZVBOR10pOworCisgICAgW3JpY2hUZXh0IGFwcGVuZEF0dHJpYnV0ZWRTdHJp
bmc6W1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIkxvcmVtIGlw
c3VtICJdIGF1dG9yZWxlYXNlXV07CisgICAgW3JpY2hUZXh0IGFwcGVuZEF0dHJpYnV0ZWRTdHJp
bmc6W05TQXR0cmlidXRlZFN0cmluZyBhdHRyaWJ1dGVkU3RyaW5nV2l0aEF0dGFjaG1lbnQ6aW1h
Z2UuZ2V0KCldXTsKKyAgICBbcmljaFRleHQgYXBwZW5kQXR0cmlidXRlZFN0cmluZzpbW1tOU0F0
dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAiIGRvbG9yIHNpdCBhbWV0LiJd
IGF1dG9yZWxlYXNlXV07CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgTlNQYXN0ZWJvYXJkICpw
YXN0ZWJvYXJkID0gW05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF07CisgICAgW3Bhc3Rl
Ym9hcmQgY2xlYXJDb250ZW50c107CisgICAgW3Bhc3RlYm9hcmQgd3JpdGVPYmplY3RzOkBbIHJp
Y2hUZXh0LmdldCgpIF1dOworI2VsaWYgUExBVEZPUk0oSU9TKQorICAgIGF1dG8gaXRlbSA9IGFk
b3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtpdGVtIHJlZ2lzdGVy
T2JqZWN0OnJpY2hUZXh0LmdldCgpIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRh
dGlvblZpc2liaWxpdHlBbGxdOworICAgIFtVSVBhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRd
Lml0ZW1Qcm92aWRlcnMgPSBAWyBpdGVtLmdldCgpIF07CisjZW5kaWYKK30KKwordHlwZWRlZiB2
b2lkKF5JdGVtUHJvdmlkZXJEYXRhTG9hZEhhbmRsZXIpKE5TRGF0YSAqLCBOU0Vycm9yICopOwor
Cit2b2lkIHBsYXRmb3JtQ29weVBORygpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIE5TUGFz
dGVib2FyZCAqcGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdOwor
ICAgIFtwYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczpAW05TUGFzdGVib2FyZFR5cGVQTkddIG93bmVy
Om5pbF07CisgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTp0ZXN0SW1hZ2VEYXRhKCkgZm9yVHlwZTpO
U1Bhc3RlYm9hcmRUeXBlUE5HXTsKKyNlbGlmIFBMQVRGT1JNKElPUykKKyAgICBVSVBhc3RlYm9h
cmQgKnBhc3RlYm9hcmQgPSBbVUlQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXTsKKyAgICBh
dXRvIGl0ZW0gPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBb
aXRlbSBzZXRQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZTpVSVByZWZlcnJlZFByZXNlbnRhdGlv
blN0eWxlQXR0YWNobWVudF07CisgICAgW2l0ZW0gcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25G
b3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlUE5HIHZpc2liaWxpdHk6TlNJdGVt
UHJvdmlkZXJSZXByZXNlbnRhdGlvblZpc2liaWxpdHlBbGwgbG9hZEhhbmRsZXI6W10gKEl0ZW1Q
cm92aWRlckRhdGFMb2FkSGFuZGxlciBjb21wbGV0aW9uSGFuZGxlcikgLT4gTlNQcm9ncmVzcyAq
IHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodGVzdEltYWdlRGF0YSgpLCBuaWwpOworICAg
ICAgICByZXR1cm4gbmlsOworICAgIH1dOworICAgIHBhc3RlYm9hcmQuaXRlbVByb3ZpZGVycyA9
IEBbIGl0ZW0uZ2V0KCkgXTsKKyNlbmRpZgorfQorCisjaWYgUExBVEZPUk0oTUFDKQordHlwZWRl
ZiBOU0ltYWdlIFBsYXRmb3JtSW1hZ2U7CisjZWxzZQordHlwZWRlZiBVSUltYWdlIFBsYXRmb3Jt
SW1hZ2U7CisjZW5kaWYKKworUGxhdGZvcm1JbWFnZSAqcGxhdGZvcm1JbWFnZVdpdGhEYXRhKE5T
RGF0YSAqZGF0YSkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgcmV0dXJuIFtbW05TSW1hZ2Ug
YWxsb2NdIGluaXRXaXRoRGF0YTpkYXRhXSBhdXRvcmVsZWFzZV07CisjZWxzZQorICAgIHJldHVy
biBbVUlJbWFnZSBpbWFnZVdpdGhEYXRhOmRhdGFdOworI2VuZGlmCit9CisKIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJIHsKIAorI3ByYWdtYSBtYXJrIC0gUGxhdGZvcm0tYWdub3N0aWMgdGVzdHMK
KwogVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgQXR0YWNobWVudEVsZW1lbnRJbnNlcnRpb24pCiB7
CiAgICAgYXV0byB3ZWJWaWV3ID0gd2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cygpOwpAQCAt
Njc1LDYgKzc0OSwxNTcgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgQ2hhbmdlQXR0YWNobWVu
dERhdGFVcGRhdGVzV2l0aEluUGxhY2VEaXNwbGF5KQogICAgIFt3ZWJWaWV3IGV4cGVjdFVwZGF0
ZXNBZnRlckNvbW1hbmQ6QCJEZWxldGVCYWNrd2FyZCIgd2l0aEFyZ3VtZW50Om5pbCBleHBlY3Rl
ZFJlbW92YWxzOkBbYXR0YWNobWVudC5nZXQoKV0gZXhwZWN0ZWRJbnNlcnRpb25zOkBbXV07CiB9
CiAKK1RFU1QoV0tBdHRhY2htZW50VGVzdHMsIEluc2VydFBhc3RlZEltYWdlQXNBdHRhY2htZW50
KQoreworICAgIHBsYXRmb3JtQ29weVBORygpOworCisgICAgUmV0YWluUHRyPF9XS0F0dGFjaG1l
bnQ+IGF0dGFjaG1lbnQ7CisgICAgYXV0byB3ZWJWaWV3ID0gd2ViVmlld0ZvclRlc3RpbmdBdHRh
Y2htZW50cygpOworICAgIHsKKyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2Nv
cGUgb2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7CisgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91
c2x5RXhlY3V0ZUVkaXRDb21tYW5kOkAiUGFzdGUiIGFyZ3VtZW50Om5pbF07CisgICAgICAgIEVY
UEVDVF9FUSgxVSwgb2JzZXJ2ZXIub2JzZXJ2ZXIoKS5pbnNlcnRlZC5jb3VudCk7CisgICAgICAg
IGF0dGFjaG1lbnQgPSBvYnNlcnZlci5vYnNlcnZlcigpLmluc2VydGVkWzBdOworICAgIH0KKwor
ICAgIGF1dG8gc2l6ZSA9IHBsYXRmb3JtSW1hZ2VXaXRoRGF0YShbYXR0YWNobWVudCBzeW5jaHJv
bm91c2x5UmVxdWVzdERhdGE6bmlsXSkuc2l6ZTsKKyAgICBFWFBFQ1RfRVEoMjE1Liwgc2l6ZS53
aWR0aCk7CisgICAgRVhQRUNUX0VRKDE3NC4sIHNpemUuaGVpZ2h0KTsKKworICAgIHsKKyAgICAg
ICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmlldy5nZXQo
KSk7CisgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5kOkAi
U2VsZWN0QWxsIiBhcmd1bWVudDpuaWxdOworICAgICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNs
eUV4ZWN1dGVFZGl0Q29tbWFuZDpAIkRlbGV0ZUJhY2t3YXJkIiBhcmd1bWVudDpuaWxdOworICAg
ICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAW2F0dGFjaG1lbnQuZ2V0KCld
LCBAW10pOworICAgIH0KK30KKworVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgSW5zZXJ0UGFzdGVk
QXR0cmlidXRlZFN0cmluZ0NvbnRhaW5pbmdJbWFnZSkKK3sKKyAgICBwbGF0Zm9ybUNvcHlSaWNo
VGV4dFdpdGhJbWFnZSgpOworCisgICAgUmV0YWluUHRyPF9XS0F0dGFjaG1lbnQ+IGF0dGFjaG1l
bnQ7CisgICAgYXV0byB3ZWJWaWV3ID0gd2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cygpOwor
ICAgIHsKKyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIo
d2ViVmlldy5nZXQoKSk7CisgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVk
aXRDb21tYW5kOkAiUGFzdGUiIGFyZ3VtZW50Om5pbF07CisgICAgICAgIEVYUEVDVF9FUSgwVSwg
b2JzZXJ2ZXIub2JzZXJ2ZXIoKS5yZW1vdmVkLmNvdW50KTsKKyAgICAgICAgRVhQRUNUX0VRKDFV
LCBvYnNlcnZlci5vYnNlcnZlcigpLmluc2VydGVkLmNvdW50KTsKKyAgICAgICAgYXR0YWNobWVu
dCA9IG9ic2VydmVyLm9ic2VydmVyKCkuaW5zZXJ0ZWRbMF07CisgICAgfQorCisgICAgW2F0dGFj
aG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6dGVzdEltYWdlRGF0YSgpXTsKKyAgICBFWFBF
Q1RfV0tfU1RSRVEoIkxvcmVtIGlwc3VtICBkb2xvciBzaXQgYW1ldC4iLCBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS50ZXh0Q29udGVudCJdKTsK
KyAgICBFWFBFQ1RfV0tfU1RSRVEoImltYWdlL3BuZyIsIFt3ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1
dGU6QCJ0eXBlIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJdKTsKKworICAgIHsKKyAg
ICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmlldy5n
ZXQoKSk7CisgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5k
OkAiU2VsZWN0QWxsIiBhcmd1bWVudDpuaWxdOworICAgICAgICBbd2ViVmlldyBfc3luY2hyb25v
dXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIkRlbGV0ZUJhY2t3YXJkIiBhcmd1bWVudDpuaWxdOwor
ICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAW2F0dGFjaG1lbnQuZ2V0
KCldLCBAW10pOworICAgIH0KK30KKworI3ByYWdtYSBtYXJrIC0gUGxhdGZvcm0tc3BlY2lmaWMg
dGVzdHMKKworI2lmIFBMQVRGT1JNKE1BQykKKworVEVTVChXS0F0dGFjaG1lbnRUZXN0c01hYywg
SW5zZXJ0UGFzdGVkRmlsZVVSTHNBc0F0dGFjaG1lbnRzKQoreworICAgIE5TUGFzdGVib2FyZCAq
cGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdOworICAgIFtwYXN0
ZWJvYXJkIGNsZWFyQ29udGVudHNdOworICAgIFtwYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczpAW05T
RmlsZW5hbWVzUGJvYXJkVHlwZV0gb3duZXI6bmlsXTsKKyAgICBbcGFzdGVib2FyZCBzZXRQcm9w
ZXJ0eUxpc3Q6QFt0ZXN0UERGRmlsZVVSTCgpLnBhdGgsIHRlc3RJbWFnZUZpbGVVUkwoKS5wYXRo
XSBmb3JUeXBlOk5TRmlsZW5hbWVzUGJvYXJkVHlwZV07CisKKyAgICBSZXRhaW5QdHI8TlNBcnJh
eTxfV0tBdHRhY2htZW50ICo+PiBpbnNlcnRlZEF0dGFjaG1lbnRzOworICAgIGF1dG8gd2ViVmll
dyA9IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsKKyAgICB7CisgICAgICAgIE9ic2Vy
dmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOworICAg
ICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIlBhc3RlIiBh
cmd1bWVudDpuaWxdOworICAgICAgICBpbnNlcnRlZEF0dGFjaG1lbnRzID0gW29ic2VydmVyLm9i
c2VydmVyKCkgaW5zZXJ0ZWRdOworICAgICAgICBFWFBFQ1RfRVEoMlUsIFtpbnNlcnRlZEF0dGFj
aG1lbnRzIGNvdW50XSk7CisgICAgfQorCisgICAgTlNBcnJheTxOU0RhdGEgKj4gKmV4cGVjdGVk
QXR0YWNobWVudERhdGEgPSBAWyB0ZXN0UERGRGF0YSgpLCB0ZXN0SW1hZ2VEYXRhKCkgXTsKKyAg
ICBFWFBFQ1RfVFJVRShbZXhwZWN0ZWRBdHRhY2htZW50RGF0YSBjb250YWluc09iamVjdDpbW2lu
c2VydGVkQXR0YWNobWVudHMgZmlyc3RPYmplY3RdIHN5bmNocm9ub3VzbHlSZXF1ZXN0RGF0YTpu
aWxdXSk7CisgICAgRVhQRUNUX1RSVUUoW2V4cGVjdGVkQXR0YWNobWVudERhdGEgY29udGFpbnNP
YmplY3Q6W1tpbnNlcnRlZEF0dGFjaG1lbnRzIGxhc3RPYmplY3RdIHN5bmNocm9ub3VzbHlSZXF1
ZXN0RGF0YTpuaWxdXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJhcHBsaWNhdGlvbi9wZGYiLCBb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxl
Y3RvckFsbCgnYXR0YWNobWVudCcpWzBdLmdldEF0dHJpYnV0ZSgndHlwZScpIl0pOworICAgIEVY
UEVDVF9XS19TVFJFUSgidGVzdC5wZGYiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYXR0YWNobWVudCcpWzBdLmdldEF0
dHJpYnV0ZSgndGl0bGUnKSJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoImltYWdlL3BuZyIsIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVj
dG9yQWxsKCdhdHRhY2htZW50JylbMV0uZ2V0QXR0cmlidXRlKCd0eXBlJykiXSk7CisgICAgRVhQ
RUNUX1dLX1NUUkVRKCJpY29uLnBuZyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhdHRhY2htZW50JylbMV0uZ2V0QXR0
cmlidXRlKCd0aXRsZScpIl0pOworCisgICAgeworICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVw
ZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsKKyAgICAgICAgW3dlYlZpZXcg
X3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJTZWxlY3RBbGwiIGFyZ3VtZW50Om5p
bF07CisgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5kOkAi
RGVsZXRlQmFja3dhcmQiIGFyZ3VtZW50Om5pbF07CisgICAgICAgIE5TQXJyYXk8X1dLQXR0YWNo
bWVudCAqPiAqcmVtb3ZlZEF0dGFjaG1lbnRzID0gW29ic2VydmVyLm9ic2VydmVyKCkgcmVtb3Zl
ZF07CisgICAgICAgIEVYUEVDVF9FUSgyVSwgcmVtb3ZlZEF0dGFjaG1lbnRzLmNvdW50KTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoW3JlbW92ZWRBdHRhY2htZW50cyBjb250YWluc09iamVjdDpbaW5z
ZXJ0ZWRBdHRhY2htZW50cyBmaXJzdE9iamVjdF1dKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoW3Jl
bW92ZWRBdHRhY2htZW50cy5sYXN0T2JqZWN0IGlzRXF1YWw6W2luc2VydGVkQXR0YWNobWVudHMg
bGFzdE9iamVjdF1dKTsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKKyNp
ZiBQTEFURk9STShJT1MpCisKK1RFU1QoV0tBdHRhY2htZW50VGVzdHNJT1MsIEluc2VydERyb3Bw
ZWRJbWFnZUFzQXR0YWNobWVudCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVz
dGluZ0F0dGFjaG1lbnRzKCk7CisgICAgYXV0byBkcmFnZ2luZ1NpbXVsYXRvciA9IGFkb3B0TlMo
W1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3
LmdldCgpXSk7CisgICAgYXV0byBpdGVtID0gYWRvcHROUyhbW05TSXRlbVByb3ZpZGVyIGFsbG9j
XSBpbml0XSk7CisgICAgW2l0ZW0gc2V0UHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGU6VUlQcmVm
ZXJyZWRQcmVzZW50YXRpb25TdHlsZUF0dGFjaG1lbnRdOworICAgIFtpdGVtIHJlZ2lzdGVyRGF0
YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZVBORyB2
aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsIGxvYWRI
YW5kbGVyOltdIChJdGVtUHJvdmlkZXJEYXRhTG9hZEhhbmRsZXIgY29tcGxldGlvbkhhbmRsZXIp
IC0+IE5TUHJvZ3Jlc3MgKiB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHRlc3RJbWFnZURh
dGEoKSwgbmlsKTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9XTsKKyAgICBbZHJhZ2dpbmdT
aW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW0uZ2V0KCkgXV07CisgICAg
W2RyYWdnaW5nU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludFplcm8gdG86Q0dQb2ludE1ha2UoNTAs
IDUwKV07CisKKyAgICBFWFBFQ1RfRVEoMVUsIFtkcmFnZ2luZ1NpbXVsYXRvciBpbnNlcnRlZEF0
dGFjaG1lbnRzXS5jb3VudCk7CisgICAgRVhQRUNUX0VRKDBVLCBbZHJhZ2dpbmdTaW11bGF0b3Ig
cmVtb3ZlZEF0dGFjaG1lbnRzXS5jb3VudCk7CisgICAgYXV0byBhdHRhY2htZW50ID0gcmV0YWlu
UHRyKFtkcmFnZ2luZ1NpbXVsYXRvciBpbnNlcnRlZEF0dGFjaG1lbnRzXS5maXJzdE9iamVjdCk7
CisgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6dGVzdEltYWdlRGF0YSgp
XTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoInB1YmxpYy5wbmciLCBbd2ViVmlldyB2YWx1ZU9mQXR0
cmlidXRlOkAidHlwZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0dGFjaG1lbnQiXSk7CisKKyAgICB7
CisgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZp
ZXcuZ2V0KCkpOworICAgICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29t
bWFuZDpAIlNlbGVjdEFsbCIgYXJndW1lbnQ6bmlsXTsKKyAgICAgICAgW3dlYlZpZXcgX3N5bmNo
cm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJEZWxldGVCYWNrd2FyZCIgYXJndW1lbnQ6bmls
XTsKKyAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFthdHRhY2htZW50
LmdldCgpXSwgQFtdKTsKKyAgICB9Cit9CisKK1RFU1QoV0tBdHRhY2htZW50VGVzdHNJT1MsIElu
c2VydERyb3BwZWRBdHRyaWJ1dGVkU3RyaW5nQ29udGFpbmluZ0F0dGFjaG1lbnQpCit7CisgICAg
YXV0byB3ZWJWaWV3ID0gd2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cygpOworICAgIGF1dG8g
ZHJhZ2dpbmdTaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFs
bG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIGF1dG8gaW1hZ2UgPSBh
ZG9wdE5TKFtbTlNUZXh0QXR0YWNobWVudCBhbGxvY10gaW5pdFdpdGhEYXRhOnRlc3RJbWFnZURh
dGEoKSBvZlR5cGU6KE5TU3RyaW5nICopa1VUVHlwZVBOR10pOworICAgIGF1dG8gaXRlbSA9IGFk
b3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtpdGVtIHJlZ2lzdGVy
T2JqZWN0OltOU0F0dHJpYnV0ZWRTdHJpbmcgYXR0cmlidXRlZFN0cmluZ1dpdGhBdHRhY2htZW50
OmltYWdlLmdldCgpXSB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNp
YmlsaXR5QWxsXTsKKworICAgIFtkcmFnZ2luZ1NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92
aWRlcnM6QFsgaXRlbS5nZXQoKSBdXTsKKyAgICBbZHJhZ2dpbmdTaW11bGF0b3IgcnVuRnJvbTpD
R1BvaW50WmVybyB0bzpDR1BvaW50TWFrZSg1MCwgNTApXTsKKworICAgIEVYUEVDVF9FUSgxVSwg
W2RyYWdnaW5nU2ltdWxhdG9yIGluc2VydGVkQXR0YWNobWVudHNdLmNvdW50KTsKKyAgICBFWFBF
Q1RfRVEoMFUsIFtkcmFnZ2luZ1NpbXVsYXRvciByZW1vdmVkQXR0YWNobWVudHNdLmNvdW50KTsK
KyAgICBhdXRvIGF0dGFjaG1lbnQgPSByZXRhaW5QdHIoW2RyYWdnaW5nU2ltdWxhdG9yIGluc2Vy
dGVkQXR0YWNobWVudHNdLmZpcnN0T2JqZWN0KTsKKworICAgIGF1dG8gc2l6ZSA9IHBsYXRmb3Jt
SW1hZ2VXaXRoRGF0YShbYXR0YWNobWVudCBzeW5jaHJvbm91c2x5UmVxdWVzdERhdGE6bmlsXSku
c2l6ZTsKKyAgICBFWFBFQ1RfRVEoMjE1Liwgc2l6ZS53aWR0aCk7CisgICAgRVhQRUNUX0VRKDE3
NC4sIHNpemUuaGVpZ2h0KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoImltYWdlL3BuZyIsIFt3ZWJW
aWV3IHZhbHVlT2ZBdHRyaWJ1dGU6QCJ0eXBlIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVu
dCJdKTsKKworICAgIHsKKyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUg
b2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7CisgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5
RXhlY3V0ZUVkaXRDb21tYW5kOkAiU2VsZWN0QWxsIiBhcmd1bWVudDpuaWxdOworICAgICAgICBb
d2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIkRlbGV0ZUJhY2t3YXJk
IiBhcmd1bWVudDpuaWxdOworICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRl
cyhAW2F0dGFjaG1lbnQuZ2V0KCldLCBAW10pOworICAgIH0KK30KKworI2VuZGlmIC8vIFBMQVRG
T1JNKElPUykKKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQogCiAjZW5kaWYgLy8gV0tf
QVBJX0VOQUJMRUQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RhdGFJbnRl
cmFjdGlvblNpbXVsYXRvci5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvRGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yLmgKaW5kZXggNzEwZWM3NmMxYzE0ZWU2Zjc3N2FlZDg0NWYxZTI1ZmU4NTRi
OTIwZS4uNTY5NGFjMzIxZjc4Y2RiN2FkYjIwN2VhNDQ4MTg3YTU1OTJhOTAwOSAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmgKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmgKQEAg
LTEzOCw2ICsxMzgsOSBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBEYXRhSW50ZXJhY3Rp
b25QaGFzZSkgewogICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheTxOU1ZhbHVlICo+Pl9xdWV1
ZWRBZGRpdGlvbmFsSXRlbVJlcXVlc3RMb2NhdGlvbnM7CiAgICAgUmV0YWluUHRyPE5TTXV0YWJs
ZUFycmF5PFVJVGFyZ2V0ZWREcmFnUHJldmlldyAqPj4gX2xpZnRQcmV2aWV3czsKIAorICAgIFJl
dGFpblB0cjxOU011dGFibGVBcnJheTxfV0tBdHRhY2htZW50ICo+PiBfaW5zZXJ0ZWRBdHRhY2ht
ZW50czsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk8X1dLQXR0YWNobWVudCAqPj4gX3Jl
bW92ZWRBdHRhY2htZW50czsKKwogICAgIGJvb2wgX2lzRG9uZVdhaXRpbmdGb3JJbnB1dFNlc3Np
b247CiAgICAgQk9PTCBfc2hvdWxkUGVyZm9ybU9wZXJhdGlvbjsKICAgICBkb3VibGUgX2N1cnJl
bnRQcm9ncmVzczsKQEAgLTE2OCw2ICsxNzEsOSBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2Vy
LCBEYXRhSW50ZXJhY3Rpb25QaGFzZSkgewogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBDR1JlY3QgbGFzdEtub3duRHJhZ0NhcmV0UmVjdDsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZWFkb25seSkgTlNBcnJheTxVSVRhcmdldGVkRHJhZ1ByZXZpZXcgKj4gKmxpZnRQcmV2aWV3czsK
IAorQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5PF9XS0F0dGFjaG1lbnQg
Kj4gKmluc2VydGVkQXR0YWNobWVudHM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IE5TQXJyYXk8X1dLQXR0YWNobWVudCAqPiAqcmVtb3ZlZEF0dGFjaG1lbnRzOworCiBAZW5kCiAK
ICNlbmRpZiAvLyBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvaW9zL0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvaW9zL0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5tbQppbmRleCBmMWNmN2EwZDcz
ZjUyMjMwM2M4NWY5MDM5MWMzNGExMzA0YTNkOGE5Li4zMjk5ZmIwNmUzMjg3OGQwZmRjNGFlMWU4
M2Y1OTE2ZDI0YmU0ZTlkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9EYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvRGF0
YUludGVyYWN0aW9uU2ltdWxhdG9yLm1tCkBAIC0zMTcsNiArMzE3LDggQEAgLSAodm9pZClfcmVz
ZXRTaW11bGF0ZWRTdGF0ZQogICAgIF9jdXJyZW50UHJvZ3Jlc3MgPSAwOwogICAgIF9pc0RvbmVX
aXRoQ3VycmVudFJ1biA9IGZhbHNlOwogICAgIF9vYnNlcnZlZEV2ZW50TmFtZXMgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKyAgICBfaW5zZXJ0ZWRBdHRhY2htZW50
cyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOworICAgIF9yZW1vdmVk
QXR0YWNobWVudHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKICAg
ICBfZmluYWxTZWxlY3Rpb25SZWN0cyA9IEBbIF07CiAgICAgX2RyYWdTZXNzaW9uID0gbmlsOwog
ICAgIF9kcm9wU2Vzc2lvbiA9IG5pbDsKQEAgLTU3Niw2ICs1NzgsMTYgQEAgLSAodm9pZCl3YWl0
Rm9ySW5wdXRTZXNzaW9uCiAgICAgVXRpbDo6cnVuKCZfaXNEb25lV2FpdGluZ0ZvcklucHV0U2Vz
c2lvbik7CiB9CiAKKy0gKE5TQXJyYXk8X1dLQXR0YWNobWVudCAqPiAqKWluc2VydGVkQXR0YWNo
bWVudHMKK3sKKyAgICByZXR1cm4gX2luc2VydGVkQXR0YWNobWVudHMuZ2V0KCk7Cit9CisKKy0g
KE5TQXJyYXk8X1dLQXR0YWNobWVudCAqPiAqKXJlbW92ZWRBdHRhY2htZW50cworeworICAgIHJl
dHVybiBfcmVtb3ZlZEF0dGFjaG1lbnRzLmdldCgpOworfQorCiAjcHJhZ21hIG1hcmsgLSBXS1VJ
RGVsZWdhdGVQcml2YXRlCiAKIC0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcg
ZGF0YUludGVyYWN0aW9uT3BlcmF0aW9uV2FzSGFuZGxlZDooQk9PTCloYW5kbGVkIGZvclNlc3Np
b246KGlkKXNlc3Npb24gaXRlbVByb3ZpZGVyczooTlNBcnJheTxVSUl0ZW1Qcm92aWRlciAqPiAq
KWl0ZW1Qcm92aWRlcnMKQEAgLTYxNyw2ICs2MjksMTYgQEAgLSAoTlNBcnJheTxVSURyYWdJdGVt
ICo+ICopX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgd2lsbFBlcmZvcm1Ecm9wV2l0aFNl
c3MKICAgICByZXR1cm4gc2VsZi5vdmVycmlkZVBlcmZvcm1Ecm9wQmxvY2sgPyBzZWxmLm92ZXJy
aWRlUGVyZm9ybURyb3BCbG9jayhzZXNzaW9uKSA6IHNlc3Npb24uaXRlbXM7CiB9CiAKKy0gKHZv
aWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkSW5zZXJ0QXR0YWNobWVudDooX1dL
QXR0YWNobWVudCAqKWF0dGFjaG1lbnQKK3sKKyAgICBbX2luc2VydGVkQXR0YWNobWVudHMgYWRk
T2JqZWN0OmF0dGFjaG1lbnRdOworfQorCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3
ZWJWaWV3IGRpZFJlbW92ZUF0dGFjaG1lbnQ6KF9XS0F0dGFjaG1lbnQgKilhdHRhY2htZW50Cit7
CisgICAgW19yZW1vdmVkQXR0YWNobWVudHMgYWRkT2JqZWN0OmF0dGFjaG1lbnRdOworfQorCiAj
cHJhZ21hIG1hcmsgLSBfV0tJbnB1dERlbGVnYXRlCiAKIC0gKEJPT0wpX3dlYlZpZXc6KFdLV2Vi
VmlldyAqKXdlYlZpZXcgZm9jdXNTaG91bGRTdGFydElucHV0U2Vzc2lvbjooaWQgPF9XS0ZvY3Vz
ZWRFbGVtZW50SW5mbz4paW5mbwo=
</data>
<flag name="review"
          id="348597"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329685</attachid>
            <date>2017-12-18 14:32:05 -0800</date>
            <delta_ts>2017-12-18 16:19:22 -0800</delta_ts>
            <desc>Patch for EWS.</desc>
            <filename>bug-180853-20171218143204.patch</filename>
            <type>text/plain</type>
            <size>41445</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1OTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWMwNGVjNzViNDM0N2Rj
Y2E3ZDVhNmFjZWRiYTU1MWM0MzA5ZDU5MC4uYjc2ZGM2NWM5MWU0YTExNDdjNTZlMzc5NmYyZDc2
ZWQyNmNiMTdmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDE3LTEyLTE4ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtBdHRhY2htZW50
IFN1cHBvcnRdIEluc2VydCBpbWFnZXMgYXMgaW5saW5lIGF0dGFjaG1lbnRzIHdoZW4gcGFzdGlu
ZyBhbmQgZHJvcHBpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4MDg1MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzU3NTYyNjg+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgVGltIEhvcnRvbi4KKworICAgICAgICBBZGRzIHN1cHBvcnQgZm9yIHRy
YW5zZm9ybWluZyBkcm9wcGVkIGFuZCBwYXN0ZWQgd2ViIGNvbnRlbnQgZnJhZ21lbnRzIHByaW9y
IHRvIGluc2VydGlvbiwgc3VjaCB0aGF0IGlubGluZQorICAgICAgICBlbGVtZW50cyAoc28gZmFy
LCBvbmx5IGltYWdlcykgYXJlIHJlcGxhY2VkIHdpdGggYXR0YWNobWVudCBlbGVtZW50cyB0aGF0
IGhhdmUgYW4gaW5saW5lIHJlcHJlc2VudGF0aW9uLiBTZWUKKyAgICAgICAgYmVsb3cgY29tbWVu
dHMgZm9yIG1vcmUgZGV0YWlsLgorCisgICAgICAgIFRlc3RzOiBXS0F0dGFjaG1lbnRUZXN0cy5J
bnNlcnRQYXN0ZWRJbWFnZUFzQXR0YWNobWVudAorICAgICAgICAgICAgICAgV0tBdHRhY2htZW50
VGVzdHMuSW5zZXJ0UGFzdGVkQXR0cmlidXRlZFN0cmluZ0NvbnRhaW5pbmdJbWFnZQorICAgICAg
ICAgICAgICAgV0tBdHRhY2htZW50VGVzdHNNYWMuSW5zZXJ0UGFzdGVkRmlsZVVSTHNBc0F0dGFj
aG1lbnRzCisgICAgICAgICAgICAgICBXS0F0dGFjaG1lbnRUZXN0c0lPUy5JbnNlcnREcm9wcGVk
SW1hZ2VBc0F0dGFjaG1lbnQKKyAgICAgICAgICAgICAgIFdLQXR0YWNobWVudFRlc3RzSU9TLklu
c2VydERyb3BwZWRBdHRyaWJ1dGVkU3RyaW5nQ29udGFpbmluZ0F0dGFjaG1lbnQKKworICAgICAg
ICAqIGVkaXRpbmcvV2ViQ29udGVudFJlYWRlci5oOgorICAgICAgICAqIGVkaXRpbmcvY29jb2Ev
RWRpdG9yQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlcGxhY2VTZWxlY3Rp
b25XaXRoQXR0cmlidXRlZFN0cmluZyk6CisKKyAgICAgICAgQWRkIGEgbmV3IGhlbHBlciB0byBy
ZXBsYWNlIGVsZW1lbnRzIGluIGEgRE9NIGZyYWdtZW50IHdpdGggaW5saW5lIGF0dGFjaG1lbnQg
ZWxlbWVudHMgaW5zdGVhZCwgdXNpbmcgdGhlIGdpdmVuCisgICAgICAgIEJsb2JzLiBTbyBmYXIs
IHdlIG9ubHkgcmVwbGFjZSBpbWFnZSBlbGVtZW50cyB3aXRoIHRoZXNlIGF0dGFjaG1lbnRzLCBi
eSBtYXBwaW5nIHRoZSBzb3VyY2Ugb2YgZWFjaCBpbWFnZSB0byBhCisgICAgICAgIEJsb2IsIGFu
ZCBjb25zdHJ1Y3RpbmcgYSByZXBsYWNlbWVudCBhdHRhY2htZW50IGJhY2tlZCBieSBhIEZpbGUg
Y29uc3RydWN0ZWQgZnJvbSB0aGUgaW1hZ2UncyBjb3JyZXNwb25kaW5nCisgICAgICAgIEJsb2Iu
IEhvd2V2ZXIsIHRoaXMgbWVjaGFuaXNtIGNhbiBiZSBnZW5lcmFsaXplZCBpbiB0aGUgZnV0dXJl
IHRvIGhhbmRsZSB0cmFuc2Zvcm1hdGlvbnMgZnJvbSBhcmJpdHJhcnkgZWxlbWVudHMKKyAgICAg
ICAgdG8gYXR0YWNobWVudCBlbGVtZW50cyBjYXBhYmxlIG9mIHJlcHJlc2VudGluZyB0aGUgc2Ft
ZSBlbGVtZW50cyB1c2luZyBpbmxpbmUgZGlzcGxheSBtb2RlLgorCisgICAgICAgIFRoaXMgZnVu
Y3Rpb24gaXMgYSBub29wIGlmIHRoZSBhdHRhY2htZW50IGVsZW1lbnRzIGFyZSBkaXNhYmxlZCB2
aWEgcnVudGltZS1lbmFibGVkIGZlYXR1cmVzLgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9X
ZWJDb250ZW50UmVhZGVyQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlUmljaENv
bnRlbnRXaXRoQXR0YWNobWVudHNJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpzYW5pdGl6ZU1h
cmt1cFdpdGhBcmNoaXZlKToKKworICAgICAgICBBZGQgb3V0LXBhcmFtcyB0byBib3RoIG9mIHRo
ZXNlIGhlbHBlciBmdW5jdGlvbnMgdGhhdCBjYXB0dXJlIHRoZSBtYXAgb2YgYmxvYiBVUkxzIHRv
IEJsb2JzIGJlaW5nIHVzZWQgdG8KKyAgICAgICAgcmVwbGFjZSBzdWJyZXNvdXJjZSBVUkxzIGlu
IHRoZSBwYXN0ZWQvZHJvcHBlZCBET00gZnJhZ21lbnQuCisKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkNvbnRlbnRSZWFkZXI6OnJlYWRXZWJBcmNoaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNv
bnRlbnRNYXJrdXBSZWFkZXI6OnJlYWRXZWJBcmNoaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUZyYWdtZW50RnJvbUF0dHJpYnV0ZWRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
Q29udGVudFJlYWRlcjo6cmVhZFJURkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29udGVudE1h
cmt1cFJlYWRlcjo6cmVhZFJURkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29udGVudFJlYWRl
cjo6cmVhZFJURik6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb250ZW50TWFya3VwUmVhZGVyOjpy
ZWFkUlRGKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRJbWFnZSk6
CisKKyAgICAgICAgSW4gdGhlc2UgcGxhY2VzIHdoZXJlIHdlIHN3YXAgb3V0IHN1YnJlc291cmNl
IFVSTHMgZm9yIGJsb2IgVVJMcywgY29sbGVjdCBhIG1hcCBvZiBibG9iIFVSTCA9PiBCbG9iLCBh
bmQgdXNlIGl0CisgICAgICAgIHRvIHJlcGxhY2UgaW1hZ2VzIGluIHRoZSBET00gd2l0aCBhdHRh
Y2htZW50cyAoaWYgbmVlZGVkLCBhbmQgcG9zc2libGUpLgorCisgICAgICAgICogZWRpdGluZy9t
YWMvV2ViQ29udGVudFJlYWRlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRS
ZWFkZXI6OnJlYWRGaWxlbmFtZXMpOgorCisgICAgICAgIEF1Z21lbnQgZXhpc3RpbmcgbG9naWMg
dG8gZ2VuZXJhdGUgYXR0YWNobWVudCBlbGVtZW50cyB3aGVuIHBhc3Rpbmcgb3IgZHJvcHBpbmcg
ZmlsZSBVUkxzLCBzbyB0aGF0IHRoZSBnZW5lcmF0ZWQKKyAgICAgICAgYXR0YWNobWVudCBlbGVt
ZW50cyBhbHNvIGhhdmUgdGl0bGVzLCBzdWJ0aXRsZXMsIGFuZCBjb250ZW50IHR5cGUgaW5mb3Jt
YXRpb24uCisKKyAgICAgICAgKiBodG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQXR0YWNobWVudEVsZW1lbnQ6OnNldEZpbGUpOgorCisgICAgICAg
IEFkZCBhbiBvcHRpb25hbCBzZWNvbmQgcGFyYW0sIFVwZGF0ZURpc3BsYXlBdHRyaWJ1dGVzLiBJ
ZiBVcGRhdGVEaXNwbGF5QXR0cmlidXRlczo6WWVzIGlzIHBhc3NlZCBpbiwgdGhlbiB3ZSBzZXQK
KyAgICAgICAgdGhlIGVsZW1lbnRzJ3MgYXR0cmlidXRlcyB0aGF0IGFyZSBkaXNwbGF5ZWQgaW4g
dGhlIGF0dGFjaG1lbnQgcmVwcmVzZW50YXRpb24gKHRpdGxlLCBzdWJ0aXRsZSwgYW5kIHR5cGUp
IHVzaW5nCisgICAgICAgIHRoZSBnaXZlbiBGaWxlLgorCisgICAgICAgIChXZWJDb3JlOjpIVE1M
QXR0YWNobWVudEVsZW1lbnQ6OnVwZGF0ZUZpbGVXaXRoRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQXR0YWNobWVudEVsZW1lbnQ6OnBvcHVsYXRlU2hhZG93Um9vdElmTmVjZXNzYXJ5KToK
KworICAgICAgICBNYWtlIGEgc21hbGwgdHdlYWsgdG8gY29ycmVjdGx5IGhhbmRsZSB0aGUgY2Fz
ZSB3aGVyZSBhbiBhdHRhY2htZW50IHdpdGggYSBjb250ZW50IHR5cGUgdGhhdCBpcyBhIFVUSSBp
cyBiZWluZworICAgICAgICBkaXNwbGF5ZWQgaW5saW5lLiBDb250ZW50IHR5cGUgY2FuIGVpdGhl
ciBiZSBhIFVUSSBvciBhIE1JTUUgdHlwZSwgYnV0IHRoZSBjb2RlIHRvIGNvbnN0cnVjdCB0aGUg
c2hhZG93IHRyZWUgb2YKKyAgICAgICAgYW4gYXR0YWNobWVudCBlbGVtZW50IG9ubHkgaGFuZGxl
cyBNSU1FIHR5cGVzLgorCisgICAgICAgICogaHRtbC9IVE1MQXR0YWNobWVudEVsZW1lbnQuaDoK
KwogMjAxNy0xMi0xNCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAg
ICAgc3JmbHggYW5kIHJlbGF5IElDRSBjYW5kaWRhdGVzIGxhY2sgcmFkZHIgKHJlbC1hZGRyKSBh
bmQgcnBvcnQgKHJlbC1wb3J0KSBhdHRyaWJ1dGVzIGlmIGdldFVzZXJNZWRpYSBhY2Nlc3MgaGFz
IG5vdCBiZWVuIGdyYW50ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV2Vi
Q29udGVudFJlYWRlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb250ZW50UmVhZGVy
LmgKaW5kZXggZWZhZTVmM2RkMWM0NDIzYTNmYzAwMDZjMGI2ZjBjYTlmNjkzZDliYy4uYjBjNWI3
NjRiYjg0ODUxZjQ2ZjA3YmUzNzk0ZTExOTgzMWIxMDJiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9XZWJDb250ZW50UmVhZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9XZWJDb250ZW50UmVhZGVyLmgKQEAgLTMyLDYgKzMyLDcgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgQXJjaGl2ZVJlc291cmNlOworY2xhc3MgQmxvYjsKIAogY2xhc3MgRnJh
bWVXZWJDb250ZW50UmVhZGVyIDogcHVibGljIFBhc3RlYm9hcmRXZWJDb250ZW50UmVhZGVyIHsK
IHB1YmxpYzoKQEAgLTEwNSw3ICsxMDYsOCBAQCBzdHJ1Y3QgRnJhZ21lbnRBbmRSZXNvdXJjZXMg
ewogICAgIFZlY3RvcjxSZWY8QXJjaGl2ZVJlc291cmNlPj4gcmVzb3VyY2VzOwogfTsKIAotUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKEZyYW1l
JiwgTlNBdHRyaWJ1dGVkU3RyaW5nKik7Cit2b2lkIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRh
Y2htZW50c0lmTmVjZXNzYXJ5KERvY3VtZW50RnJhZ21lbnQmLCBIYXNoTWFwPEF0b21pY1N0cmlu
ZywgUmVmUHRyPEJsb2I+PiYmIHVybFRvQmxvYk1hcCk7CitSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoRnJhbWUmLCBOU0F0dHJpYnV0ZWRTdHJp
bmcqLCBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEJsb2I+PiYgdXJsVG9CbG9iTWFwKTsK
ICNlbmRpZgogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0Vk
aXRvckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5t
bQppbmRleCA1M2IxMjdlZDRlMGNmMTg1YmE1ZmQzN2M1YWVkOWE5NWZjYjQ3Zjc5Li44Yjg2OTdm
YTQ4MmNhYTZmOTUwMjM4MTU1MjE1NTMxZmMwZDg1NDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KQEAgLTIyMiw5ICsyMjIsMTIgQEAgdm9pZCBFZGl0
b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJp
bmcgKmF0dHJpYnV0ZWQKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewotICAgICAgICBS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEFuZEFkZFJl
c291cmNlcyhtX2ZyYW1lLCBhdHRyaWJ1dGVkU3RyaW5nKTsKLSAgICAgICAgaWYgKGZyYWdtZW50
ICYmIHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgc2VsZWN0ZWRSYW5nZSgpLmdldCgp
LCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCi0gICAgICAgICAgICBwYXN0ZUFzRnJhZ21l
bnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwgZmFsc2UsIGZhbHNlLCBtYWlsQmxvY2txdW90
ZUhhbmRsaW5nKTsKKyAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxCbG9iPj4g
dXJsVG9CbG9iTWFwOworICAgICAgICBpZiAoYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50
QW5kQWRkUmVzb3VyY2VzKG1fZnJhbWUsIGF0dHJpYnV0ZWRTdHJpbmcsIHVybFRvQmxvYk1hcCkp
IHsKKyAgICAgICAgICAgIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2htZW50c0lmTmVjZXNz
YXJ5KCpmcmFnbWVudCwgV1RGTW92ZSh1cmxUb0Jsb2JNYXApKTsKKyAgICAgICAgICAgIGlmIChz
aG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgRWRp
dG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgICAgICAgICAgICAgIHBhc3RlQXNGcmFnbWVu
dChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBmYWxzZSwgZmFsc2UsIG1haWxCbG9ja3F1b3Rl
SGFuZGxpbmcpOworICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgU3RyaW5nIHRleHQg
PSBhdHRyaWJ1dGVkU3RyaW5nLnN0cmluZzsKICAgICAgICAgaWYgKHNob3VsZEluc2VydFRleHQo
dGV4dCwgc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFk
ZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRl
ckNvY29hLm1tCmluZGV4IGI2MDk5NDEyMDMwZGEzMGI5YWM1ODgyNjg5ZmFmYjI1MTY4ODQ1NGIu
LmZhZGFjODcxNjUwYzllNTcyNWEzMTEzMzZiOTU3MWIyMGQzYjc1OTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tCkBA
IC0zNCw5ICszNCwxMSBAQAogI2ltcG9ydCAiRG9jdW1lbnQuaCIKICNpbXBvcnQgIkRvY3VtZW50
RnJhZ21lbnQuaCIKICNpbXBvcnQgIkRvY3VtZW50TG9hZGVyLmgiCisjaW1wb3J0ICJGaWxlLmgi
CiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVMb2FkZXIuaCIKICNpbXBvcnQgIkZy
YW1lTG9hZGVyQ2xpZW50LmgiCisjaW1wb3J0ICJIVE1MQXR0YWNobWVudEVsZW1lbnQuaCIKICNp
bXBvcnQgIkhUTUxCb2R5RWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTElGcmFtZUVsZW1lbnQuaCIK
ICNpbXBvcnQgIkhUTUxJbWFnZUVsZW1lbnQuaCIKQEAgLTQ0LDYgKzQ2LDcgQEAKICNpbXBvcnQg
Ik1haW5GcmFtZS5oIgogI2ltcG9ydCAiUGFnZS5oIgogI2ltcG9ydCAiUHVibGljVVJMTWFuYWdl
ci5oIgorI2ltcG9ydCAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2ltcG9ydCAiU2V0dGlu
Z3MuaCIKICNpbXBvcnQgIlNvY2tldFByb3ZpZGVyLmgiCiAjaW1wb3J0ICJXZWJBcmNoaXZlUmVz
b3VyY2VGcm9tTlNBdHRyaWJ1dGVkU3RyaW5nLmgiCkBAIC01Miw2ICs1NSw3IEBACiAjaW1wb3J0
ICJtYXJrdXAuaCIKICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvTlNBdHRyaWJ1dGVkU3RyaW5nU1BJ
Lmg+CiAjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKyNpbXBvcnQgPHd0Zi9VVUlELmg+CiAK
ICNpZiAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMTAwMDApIHx8IChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTAxMzAwKQogQGludGVyZmFjZSBOU0F0dHJpYnV0ZWRTdHJpbmcgKCkKQEAgLTY5
LDYgKzczLDYyIEBAIFNPRlRfTElOSyhXZWJLaXRMZWdhY3ksIF9XZWJDcmVhdGVGcmFnbWVudCwg
dm9pZCwgKFdlYkNvcmU6OkRvY3VtZW50JiBkb2N1bWVudCwKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCisjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKKwordm9pZCByZXBsYWNlUmljaENv
bnRlbnRXaXRoQXR0YWNobWVudHNJZk5lY2Vzc2FyeShEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVu
dCwgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxCbG9iPj4mJiB1cmxUb0Jsb2JNYXApCit7
CisgICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmF0dGFj
aG1lbnRFbGVtZW50RW5hYmxlZCgpIHx8IHVybFRvQmxvYk1hcC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFZlY3RvcjxSZWY8RWxlbWVudD4+IGVsZW1lbnRzVG9SZW1vdmU7Cisg
ICAgVmVjdG9yPHN0ZDo6cGFpcjxSZWY8RmlsZT4sIFJlZjxFbGVtZW50Pj4+IGZpbGVzRm9yRWxl
bWVudHNUb1JlcGxhY2U7CisgICAgZm9yIChhdXRvJiBpbWFnZSA6IGRlc2NlbmRhbnRzT2ZUeXBl
PEhUTUxJbWFnZUVsZW1lbnQ+KGZyYWdtZW50KSkgeworICAgICAgICBhdXRvIHVybCA9IGltYWdl
LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpzcmNBdHRyKTsKKwor
ICAgICAgICBpZiAodXJsLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgZWxlbWVudHNUb1JlbW92
ZS5hcHBlbmQoaW1hZ2UpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAg
ICAgICBhdXRvIGJsb2IgPSB1cmxUb0Jsb2JNYXAuZ2V0KHVybCk7CisgICAgICAgIGlmICghYmxv
YikgeworICAgICAgICAgICAgZWxlbWVudHNUb1JlbW92ZS5hcHBlbmQoaW1hZ2UpOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHRpdGxlID0gaW1hZ2Uu
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnRpdGxlQXR0cik7Cisg
ICAgICAgIGlmICh0aXRsZS5pc0VtcHR5KCkpCisgICAgICAgICAgICB0aXRsZSA9IEF0b21pY1N0
cmluZygibWVkaWEiKTsKKworICAgICAgICBmaWxlc0ZvckVsZW1lbnRzVG9SZXBsYWNlLmFwcGVu
ZCh7IEZpbGU6OmNyZWF0ZSgqYmxvYiwgdGl0bGUpLCBpbWFnZSB9KTsKKyAgICB9CisKKyAgICBm
b3IgKGF1dG8mIGZpbGVBbmRFbGVtZW50IDogZmlsZXNGb3JFbGVtZW50c1RvUmVwbGFjZSkgewor
ICAgICAgICBhdXRvJiBmaWxlID0gZmlsZUFuZEVsZW1lbnQuZmlyc3Q7CisgICAgICAgIGF1dG8m
IGVsZW1lbnRUb1JlcGxhY2UgPSBmaWxlQW5kRWxlbWVudC5zZWNvbmQ7CisgICAgICAgIGF1dG8g
cGFyZW50ID0gbWFrZVJlZlB0cihlbGVtZW50VG9SZXBsYWNlLT5wYXJlbnROb2RlKCkpOworICAg
ICAgICBpZiAoIXBhcmVudCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8g
YXR0YWNobWVudCA9IEhUTUxBdHRhY2htZW50RWxlbWVudDo6Y3JlYXRlKEhUTUxOYW1lczo6YXR0
YWNobWVudFRhZywgZnJhZ21lbnQuZG9jdW1lbnQoKSk7CisgICAgICAgIGF0dGFjaG1lbnQtPnNl
dFVuaXF1ZUlkZW50aWZpZXIoY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpKTsKKyAgICAgICAg
YXR0YWNobWVudC0+c2V0RmlsZShXVEZNb3ZlKGZpbGUpLCBIVE1MQXR0YWNobWVudEVsZW1lbnQ6
OlVwZGF0ZURpc3BsYXlBdHRyaWJ1dGVzOjpZZXMpOworICAgICAgICBhdHRhY2htZW50LT51cGRh
dGVEaXNwbGF5TW9kZShBdHRhY2htZW50RGlzcGxheU1vZGU6OkluUGxhY2UpOworICAgICAgICBw
YXJlbnQtPnJlcGxhY2VDaGlsZChhdHRhY2htZW50LCBlbGVtZW50VG9SZXBsYWNlKTsKKyAgICB9
CisKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnRUb1JlbW92ZSA6IGVsZW1lbnRzVG9SZW1vdmUpCisg
ICAgICAgIGVsZW1lbnRUb1JlbW92ZS0+cmVtb3ZlKCk7Cit9CisKKyNlbHNlCisKK3ZvaWQgcmVw
bGFjZVJpY2hDb250ZW50V2l0aEF0dGFjaG1lbnRzSWZOZWNlc3NhcnkoRG9jdW1lbnRGcmFnbWVu
dCYsIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8QmxvYj4+JiYpCit7Cit9CisKKyNlbmRp
ZgorCiAjaWYgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTEwMDAwKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDEwMTMwMCkKIAogc3RhdGljIE5TRGljdGlvbmFyeSAqYXR0cmlidXRlc0Zv
ckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJzaW9uKCkKQEAgLTE1OSw3ICsyMTksNyBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV9kaWREaXNhYmxlSW1hZ2UgeyBmYWxzZSB9OwogfTsKIAotUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKEZyYW1lJiBmcmFt
ZSwgTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcpCitSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
Y3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoRnJhbWUmIGZyYW1lLCBOU0F0dHJpYnV0ZWRT
dHJpbmcgKnN0cmluZywgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxCbG9iPj4mIHVybFRv
QmxvYk1hcCkKIHsKICAgICBpZiAoIWZyYW1lLnBhZ2UoKSB8fCAhZnJhbWUuZG9jdW1lbnQoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNzgsNiArMjM4LDcgQEAgUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKEZyYW1lJiBmcmFtZSwg
TlNBdHRyaWJ1dGUKICAgICAgICAgYXV0byBibG9iID0gQmxvYjo6Y3JlYXRlKHN1YnJlc291cmNl
LT5kYXRhKCksIHN1YnJlc291cmNlLT5taW1lVHlwZSgpKTsKICAgICAgICAgU3RyaW5nIGJsb2JV
UkwgPSBET01VUkw6OmNyZWF0ZU9iamVjdFVSTChkb2N1bWVudCwgYmxvYik7CiAgICAgICAgIGJs
b2JVUkxNYXAuc2V0KHN1YnJlc291cmNlLT51cmwoKS5zdHJpbmcoKSwgYmxvYlVSTCk7CisgICAg
ICAgIHVybFRvQmxvYk1hcC5zZXQoYmxvYlVSTCwgV1RGTW92ZShibG9iKSk7CiAgICAgfQogICAg
IHJlcGxhY2VTdWJyZXNvdXJjZVVSTHMoKmZyYWdtZW50QW5kUmVzb3VyY2VzLmZyYWdtZW50LCBX
VEZNb3ZlKGJsb2JVUkxNYXApKTsKIApAQCAtMjA3LDcgKzI2OCw3IEBAIHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPE1hcmt1cEFuZEFyY2hpdmU+IGV4dHJhY3RNYXJrdXBBbmRBcmNoaXZlKFNoYXJlZEJ1
ZmZlciYgYnVmCiAgICAgcmV0dXJuIE1hcmt1cEFuZEFyY2hpdmUgeyBTdHJpbmc6OmZyb21VVEY4
KG1haW5SZXNvdXJjZS0+ZGF0YSgpLmRhdGEoKSwgbWFpblJlc291cmNlLT5kYXRhKCkuc2l6ZSgp
KSwgbWFpblJlc291cmNlLnJlbGVhc2VOb25OdWxsKCksIGFyY2hpdmUucmVsZWFzZU5vbk51bGwo
KSB9OwogfQogCi1zdGF0aWMgU3RyaW5nIHNhbml0aXplTWFya3VwV2l0aEFyY2hpdmUoRG9jdW1l
bnQmIGRlc3RpbmF0aW9uRG9jdW1lbnQsIE1hcmt1cEFuZEFyY2hpdmUmIG1hcmt1cEFuZEFyY2hp
dmUsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChjb25zdCBTdHJpbmcpPiYgY2FuU2hvd01JTUVU
eXBlQXNIVE1MKQorc3RhdGljIFN0cmluZyBzYW5pdGl6ZU1hcmt1cFdpdGhBcmNoaXZlKERvY3Vt
ZW50JiBkZXN0aW5hdGlvbkRvY3VtZW50LCBNYXJrdXBBbmRBcmNoaXZlJiBtYXJrdXBBbmRBcmNo
aXZlLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2woY29uc3QgU3RyaW5nKT4mIGNhblNob3dNSU1F
VHlwZUFzSFRNTCwgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxCbG9iPj4mIHVybFRvQmxv
Yk1hcCkKIHsKICAgICBhdXRvIHBhZ2UgPSBjcmVhdGVQYWdlRm9yU2FuaXRpemluZ1dlYkNvbnRl
bnQoKTsKICAgICBEb2N1bWVudCogc3RhZ2luZ0RvY3VtZW50ID0gcGFnZS0+bWFpbkZyYW1lKCku
ZG9jdW1lbnQoKTsKQEAgLTIxOSw2ICsyODAsNyBAQCBzdGF0aWMgU3RyaW5nIHNhbml0aXplTWFy
a3VwV2l0aEFyY2hpdmUoRG9jdW1lbnQmIGRlc3RpbmF0aW9uRG9jdW1lbnQsIE1hcmt1cEFuZAog
ICAgICAgICBhdXRvIGJsb2IgPSBCbG9iOjpjcmVhdGUoc3VicmVzb3VyY2UtPmRhdGEoKSwgc3Vi
cmVzb3VyY2UtPm1pbWVUeXBlKCkpOwogICAgICAgICBTdHJpbmcgYmxvYlVSTCA9IERPTVVSTDo6
Y3JlYXRlT2JqZWN0VVJMKGRlc3RpbmF0aW9uRG9jdW1lbnQsIGJsb2IpOwogICAgICAgICBibG9i
VVJMTWFwLnNldChzdWJyZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCksIGJsb2JVUkwpOworICAgICAg
ICB1cmxUb0Jsb2JNYXAuc2V0KGJsb2JVUkwsIFdURk1vdmUoYmxvYikpOwogICAgIH0KIAogICAg
IGF1dG8gY29udGVudE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUobWFya3VwQW5kQXJj
aGl2ZS5tYWluUmVzb3VyY2UtPnVybCgpKTsKQEAgLTIzNCw3ICsyOTYsNyBAQCBzdGF0aWMgU3Ry
aW5nIHNhbml0aXplTWFya3VwV2l0aEFyY2hpdmUoRG9jdW1lbnQmIGRlc3RpbmF0aW9uRG9jdW1l
bnQsIE1hcmt1cEFuZAogICAgICAgICBhdXRvIHN1YmZyYW1lVVJMID0gc3ViZnJhbWVNYWluUmVz
b3VyY2UtPnVybCgpOwogICAgICAgICBNYXJrdXBBbmRBcmNoaXZlIHN1YmZyYW1lQ29udGVudCA9
IHsgU3RyaW5nOjpmcm9tVVRGOChzdWJmcmFtZU1haW5SZXNvdXJjZS0+ZGF0YSgpLmRhdGEoKSwg
c3ViZnJhbWVNYWluUmVzb3VyY2UtPmRhdGEoKS5zaXplKCkpLAogICAgICAgICAgICAgc3ViZnJh
bWVNYWluUmVzb3VyY2UucmVsZWFzZU5vbk51bGwoKSwgc3ViZnJhbWVBcmNoaXZlLmNvcHlSZWYo
KSB9OwotICAgICAgICBhdXRvIHN1YmZyYW1lTWFya3VwID0gc2FuaXRpemVNYXJrdXBXaXRoQXJj
aGl2ZShkZXN0aW5hdGlvbkRvY3VtZW50LCBzdWJmcmFtZUNvbnRlbnQsIGNhblNob3dNSU1FVHlw
ZUFzSFRNTCk7CisgICAgICAgIGF1dG8gc3ViZnJhbWVNYXJrdXAgPSBzYW5pdGl6ZU1hcmt1cFdp
dGhBcmNoaXZlKGRlc3RpbmF0aW9uRG9jdW1lbnQsIHN1YmZyYW1lQ29udGVudCwgY2FuU2hvd01J
TUVUeXBlQXNIVE1MLCB1cmxUb0Jsb2JNYXApOwogCiAgICAgICAgIENTdHJpbmcgdXRmOCA9IHN1
YmZyYW1lTWFya3VwLnV0ZjgoKTsKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJsb2JCdWZmZXI7
CkBAIC0yNDQsNiArMzA2LDcgQEAgc3RhdGljIFN0cmluZyBzYW5pdGl6ZU1hcmt1cFdpdGhBcmNo
aXZlKERvY3VtZW50JiBkZXN0aW5hdGlvbkRvY3VtZW50LCBNYXJrdXBBbmQKIAogICAgICAgICBT
dHJpbmcgc3ViZnJhbWVCbG9iVVJMID0gRE9NVVJMOjpjcmVhdGVPYmplY3RVUkwoZGVzdGluYXRp
b25Eb2N1bWVudCwgYmxvYik7CiAgICAgICAgIGJsb2JVUkxNYXAuc2V0KHN1YmZyYW1lVVJMLnN0
cmluZygpLCBzdWJmcmFtZUJsb2JVUkwpOworICAgICAgICB1cmxUb0Jsb2JNYXAuc2V0KHN1YmZy
YW1lQmxvYlVSTCwgV1RGTW92ZShibG9iKSk7CiAgICAgfQogCiAgICAgcmVwbGFjZVN1YnJlc291
cmNlVVJMcyhmcmFnbWVudC5nZXQoKSwgV1RGTW92ZShibG9iVVJMTWFwKSk7CkBAIC0yNzQsMTEg
KzMzNywxNiBAQCBib29sIFdlYkNvbnRlbnRSZWFkZXI6OnJlYWRXZWJBcmNoaXZlKFNoYXJlZEJ1
ZmZlciYgYnVmZmVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBIYXNoTWFw
PEF0b21pY1N0cmluZywgUmVmUHRyPEJsb2I+PiB1cmxUb0Jsb2JNYXA7CiAgICAgU3RyaW5nIHNh
bml0aXplZE1hcmt1cCA9IHNhbml0aXplTWFya3VwV2l0aEFyY2hpdmUoKmZyYW1lLmRvY3VtZW50
KCksICpyZXN1bHQsIFsmXSAoY29uc3QgU3RyaW5nJiB0eXBlKSB7CiAgICAgICAgIHJldHVybiBm
cmFtZS5sb2FkZXIoKS5jbGllbnQoKS5jYW5TaG93TUlNRVR5cGVBc0hUTUwodHlwZSk7Ci0gICAg
fSk7CisgICAgfSwgdXJsVG9CbG9iTWFwKTsKICAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50
RnJvbU1hcmt1cCgqZnJhbWUuZG9jdW1lbnQoKSwgc2FuaXRpemVkTWFya3VwLCBibGFua1VSTCgp
LCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQpOwogCisgICAgaWYgKCFmcmFnbWVu
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVwbGFjZVJpY2hDb250ZW50V2l0aEF0
dGFjaG1lbnRzSWZOZWNlc3NhcnkoKmZyYWdtZW50LCBXVEZNb3ZlKHVybFRvQmxvYk1hcCkpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yOTgsOSArMzY2LDEwIEBAIGJvb2wgV2ViQ29udGVu
dE1hcmt1cFJlYWRlcjo6cmVhZFdlYkFyY2hpdmUoU2hhcmVkQnVmZmVyJiBidWZmZXIpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQ
dHI8QmxvYj4+IHVybFRvQmxvYk1hcDsKICAgICBtYXJrdXAgPSBzYW5pdGl6ZU1hcmt1cFdpdGhB
cmNoaXZlKCpmcmFtZS5kb2N1bWVudCgpLCAqcmVzdWx0LCBbJl0gKGNvbnN0IFN0cmluZyYgdHlw
ZSkgewogICAgICAgICByZXR1cm4gZnJhbWUubG9hZGVyKCkuY2xpZW50KCkuY2FuU2hvd01JTUVU
eXBlQXNIVE1MKHR5cGUpOwotICAgIH0pOworICAgIH0sIHVybFRvQmxvYk1hcCk7CiAKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KQEAgLTM0OCwxMiArNDE3LDI0IEBAIGJvb2wgV2ViQ29udGVudE1hcmt1
cFJlYWRlcjo6cmVhZEhUTUwoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgcmV0dXJuICFtYXJr
dXAuaXNFbXB0eSgpOwogfQogCitzdGF0aWMgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0
ZUZyYWdtZW50RnJvbUF0dHJpYnV0ZWRTdHJpbmcoRnJhbWUmIGZyYW1lLCBOU0F0dHJpYnV0ZWRT
dHJpbmcgKnN0cmluZykKK3sKKyAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEJsb2I+
PiB1cmxUb0Jsb2JNYXA7CisgICAgYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRk
UmVzb3VyY2VzKGZyYW1lLCBzdHJpbmcsIHVybFRvQmxvYk1hcCk7CisgICAgaWYgKCFmcmFnbWVu
dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXBsYWNlUmljaENvbnRlbnRXaXRo
QXR0YWNobWVudHNJZk5lY2Vzc2FyeSgqZnJhZ21lbnQsIFdURk1vdmUodXJsVG9CbG9iTWFwKSk7
CisgICAgcmV0dXJuIGZyYWdtZW50OworfQorCiBib29sIFdlYkNvbnRlbnRSZWFkZXI6OnJlYWRS
VEZEKFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogewogICAgIGlmIChmcmFtZS5zZXR0aW5ncygpLnBy
ZWZlck1JTUVUeXBlRm9ySW1hZ2VzKCkgfHwgIWZyYW1lLmRvY3VtZW50KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEFuZEFkZFJl
c291cmNlcyhmcmFtZSwgYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdp
dGhSVEZEOmJ1ZmZlci5jcmVhdGVOU0RhdGEoKS5nZXQoKSBkb2N1bWVudEF0dHJpYnV0ZXM6bnVs
bHB0cl0pLmdldCgpKTsKKyAgICBhdXRvIHN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRT
dHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGRDpidWZmZXIuY3JlYXRlTlNEYXRhKCkuZ2V0KCkgZG9j
dW1lbnRBdHRyaWJ1dGVzOm51bGxwdHJdKTsKKyAgICBhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJh
Z21lbnRGcm9tQXR0cmlidXRlZFN0cmluZyhmcmFtZSwgc3RyaW5nLmdldCgpKTsKICAgICBpZiAo
IWZyYWdtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYWRkRnJhZ21lbnQoZnJhZ21l
bnQucmVsZWFzZU5vbk51bGwoKSk7CkBAIC0zNjUsNyArNDQ2LDExIEBAIGJvb2wgV2ViQ29udGVu
dE1hcmt1cFJlYWRlcjo6cmVhZFJURkQoU2hhcmVkQnVmZmVyJiBidWZmZXIpCiB7CiAgICAgaWYg
KCFmcmFtZS5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byBmcmFn
bWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKGZyYW1lLCBhZG9wdE5TKFtbTlNB
dHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURkQ6YnVmZmVyLmNyZWF0ZU5TRGF0YSgp
LmdldCgpIGRvY3VtZW50QXR0cmlidXRlczpudWxscHRyXSkuZ2V0KCkpOworICAgIGF1dG8gc3Ry
aW5nID0gYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEZEOmJ1
ZmZlci5jcmVhdGVOU0RhdGEoKS5nZXQoKSBkb2N1bWVudEF0dHJpYnV0ZXM6bnVsbHB0cl0pOwor
ICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21BdHRyaWJ1dGVkU3RyaW5nKGZy
YW1lLCBzdHJpbmcuZ2V0KCkpOworICAgIGlmICghZnJhZ21lbnQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKwogICAgIG1hcmt1cCA9IGNyZWF0ZU1hcmt1cCgqZnJhZ21lbnQpOwogICAgIHJldHVy
biB0cnVlOwogfQpAQCAtMzc1LDcgKzQ2MCw4IEBAIGJvb2wgV2ViQ29udGVudFJlYWRlcjo6cmVh
ZFJURihTaGFyZWRCdWZmZXImIGJ1ZmZlcikKICAgICBpZiAoZnJhbWUuc2V0dGluZ3MoKS5wcmVm
ZXJNSU1FVHlwZUZvckltYWdlcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRv
IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoZnJhbWUsIGFkb3B0TlMo
W1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGOmJ1ZmZlci5jcmVhdGVOU0Rh
dGEoKS5nZXQoKSBkb2N1bWVudEF0dHJpYnV0ZXM6bnVsbHB0cl0pLmdldCgpKTsKKyAgICBhdXRv
IHN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRG
OmJ1ZmZlci5jcmVhdGVOU0RhdGEoKS5nZXQoKSBkb2N1bWVudEF0dHJpYnV0ZXM6bnVsbHB0cl0p
OworICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21BdHRyaWJ1dGVkU3RyaW5n
KGZyYW1lLCBzdHJpbmcuZ2V0KCkpOwogICAgIGlmICghZnJhZ21lbnQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBhZGRGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpKTsKQEAg
LTM4Nyw3ICs0NzMsOCBAQCBib29sIFdlYkNvbnRlbnRNYXJrdXBSZWFkZXI6OnJlYWRSVEYoU2hh
cmVkQnVmZmVyJiBidWZmZXIpCiB7CiAgICAgaWYgKCFmcmFtZS5kb2N1bWVudCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRk
UmVzb3VyY2VzKGZyYW1lLCBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0
V2l0aFJURjpidWZmZXIuY3JlYXRlTlNEYXRhKCkuZ2V0KCkgZG9jdW1lbnRBdHRyaWJ1dGVzOm51
bGxwdHJdKS5nZXQoKSk7CisgICAgYXV0byBzdHJpbmcgPSBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURjpidWZmZXIuY3JlYXRlTlNEYXRhKCkuZ2V0KCkgZG9j
dW1lbnRBdHRyaWJ1dGVzOm51bGxwdHJdKTsKKyAgICBhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJh
Z21lbnRGcm9tQXR0cmlidXRlZFN0cmluZyhmcmFtZSwgc3RyaW5nLmdldCgpKTsKICAgICBpZiAo
IWZyYWdtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgbWFya3VwID0gY3JlYXRlTWFy
a3VwKCpmcmFnbWVudCk7CkBAIC00MTIsNiArNDk5LDExIEBAIGJvb2wgV2ViQ29udGVudFJlYWRl
cjo6cmVhZEltYWdlKFJlZjxTaGFyZWRCdWZmZXI+JiYgYnVmZmVyLCBjb25zdCBTdHJpbmcmIHR5
cGUpCiAgICAgYXV0byYgZG9jdW1lbnQgPSAqZnJhbWUuZG9jdW1lbnQoKTsKICAgICBTdHJpbmcg
YmxvYlVSTCA9IERPTVVSTDo6Y3JlYXRlT2JqZWN0VVJMKGRvY3VtZW50LCBibG9iKTsKICAgICBh
ZGRGcmFnbWVudChjcmVhdGVGcmFnbWVudEZvckltYWdlQW5kVVJMKGRvY3VtZW50LCBibG9iVVJM
KSk7CisKKyAgICBpZiAoIWZyYWdtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBy
ZXBsYWNlUmljaENvbnRlbnRXaXRoQXR0YWNobWVudHNJZk5lY2Vzc2FyeSgqZnJhZ21lbnQsIHt7
IGJsb2JVUkwsIFdURk1vdmUoYmxvYikgfX0pOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9XZWJDb250ZW50UmVhZGVyTWFjLm1t
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvV2ViQ29udGVudFJlYWRlck1hYy5tbQppbmRl
eCBhNzk4YTE5YzQ3OWU3MzEwNGFkNGEwNGExZWE1NGVhYmIxMzk3ZjI1Li45YzVkMjU0MGI2MDVl
ZWFkMjMyODg1YTc2ZDU5YjMyYzQ2YWY3OGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9XZWJDb250ZW50UmVhZGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL1dlYkNvbnRlbnRSZWFkZXJNYWMubW0KQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbXBv
cnQgIlRleHQuaCIKICNpbXBvcnQgIldlYkNvcmVOU1VSTEV4dHJhcy5oIgogI2ltcG9ydCAibWFy
a3VwLmgiCisjaW1wb3J0IDx3dGYvVVVJRC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTY1LDcgKzY2LDggQEAgYm9vbCBXZWJDb250ZW50UmVhZGVyOjpyZWFkRmlsZW5hbWVzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXRocykKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQog
ICAgICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5hdHRh
Y2htZW50RWxlbWVudEVuYWJsZWQoKSkgewogICAgICAgICAgICAgYXV0byBhdHRhY2htZW50ID0g
SFRNTEF0dGFjaG1lbnRFbGVtZW50OjpjcmVhdGUoSFRNTE5hbWVzOjphdHRhY2htZW50VGFnLCBk
b2N1bWVudCk7Ci0gICAgICAgICAgICBhdHRhY2htZW50LT5zZXRGaWxlKEZpbGU6OmNyZWF0ZShb
W05TVVJMIGZpbGVVUkxXaXRoUGF0aDp0ZXh0XSBwYXRoXSkpOworICAgICAgICAgICAgYXR0YWNo
bWVudC0+c2V0VW5pcXVlSWRlbnRpZmllcihjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkpOwor
ICAgICAgICAgICAgYXR0YWNobWVudC0+c2V0RmlsZShGaWxlOjpjcmVhdGUoW05TVVJMIGZpbGVV
UkxXaXRoUGF0aDp0ZXh0XS5wYXRoKSwgSFRNTEF0dGFjaG1lbnRFbGVtZW50OjpVcGRhdGVEaXNw
bGF5QXR0cmlidXRlczo6WWVzKTsKICAgICAgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChh
dHRhY2htZW50KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5jcHAKaW5kZXggMWEwMzM3OWFhNTU4
ODA2YzFmNDIzMzVlZjA3ZTRkYWEwNmI3MDIzYS4uMDMzZmQ0NWQ2MzUyYzVlMThjNjU1NjY0YWRi
NjM5MjNjY2E5ODI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0YWNo
bWVudEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dGFjaG1lbnRF
bGVtZW50LmNwcApAQCAtNDUsNiArNDUsMTAgQEAKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
ICNpbmNsdWRlIDxwYWwvRmlsZVNpemVGb3JtYXR0ZXIuaD4KIAorI2lmIFBMQVRGT1JNKENPQ09B
KQorI2luY2x1ZGUgIlVUSVV0aWxpdGllcy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKQEAgLTExMiwxMiArMTE2LDI0IEBAIFVS
TCBIVE1MQXR0YWNobWVudEVsZW1lbnQ6OmJsb2JVUkwoKSBjb25zdAogICAgIHJldHVybiB7IHsg
fSwgYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OndlYmtpdGF0dGFj
aG1lbnRibG9idXJsQXR0cikuc3RyaW5nKCkgfTsKIH0KIAotdm9pZCBIVE1MQXR0YWNobWVudEVs
ZW1lbnQ6OnNldEZpbGUoUmVmUHRyPEZpbGU+JiYgZmlsZSkKK3ZvaWQgSFRNTEF0dGFjaG1lbnRF
bGVtZW50OjpzZXRGaWxlKFJlZlB0cjxGaWxlPiYmIGZpbGUsIFVwZGF0ZURpc3BsYXlBdHRyaWJ1
dGVzIHVwZGF0ZUF0dHJpYnV0ZXMpCiB7CiAgICAgbV9maWxlID0gV1RGTW92ZShmaWxlKTsKIAog
ICAgIHNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjp3ZWJraXRh
dHRhY2htZW50YmxvYnVybEF0dHIsIG1fZmlsZSA/IG1fZmlsZS0+dXJsKCkgOiBlbXB0eVN0cmlu
ZygpKTsKIAorICAgIGlmICh1cGRhdGVBdHRyaWJ1dGVzID09IFVwZGF0ZURpc3BsYXlBdHRyaWJ1
dGVzOjpZZXMpIHsKKyAgICAgICAgaWYgKG1fZmlsZSkgeworICAgICAgICAgICAgc2V0QXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnRpdGxlQXR0ciwgbV9maWxlLT5u
YW1lKCkpOworICAgICAgICAgICAgc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihI
VE1MTmFtZXM6OnN1YnRpdGxlQXR0ciwgZmlsZVNpemVEZXNjcmlwdGlvbihtX2ZpbGUtPnNpemUo
KSkpOworICAgICAgICAgICAgc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1M
TmFtZXM6OnR5cGVBdHRyLCBtX2ZpbGUtPnR5cGUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICByZW1vdmVBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0aXRsZUF0dHIpOworICAgICAgICAg
ICAgcmVtb3ZlQXR0cmlidXRlKEhUTUxOYW1lczo6c3VidGl0bGVBdHRyKTsKKyAgICAgICAgICAg
IHJlbW92ZUF0dHJpYnV0ZShIVE1MTmFtZXM6OnR5cGVBdHRyKTsKKyAgICAgICAgfQorICAgIH0K
KwogICAgIGlmIChhdXRvKiByZW5kZXJBdHRhY2htZW50ID0gYXR0YWNobWVudFJlbmRlcmVyKCkp
CiAgICAgICAgIHJlbmRlckF0dGFjaG1lbnQtPmludmFsaWRhdGUoKTsKIApAQCAtMjIzLDExICsy
MzksNyBAQCB2b2lkIEhUTUxBdHRhY2htZW50RWxlbWVudDo6dXBkYXRlRmlsZVdpdGhEYXRhKFJl
ZjxTaGFyZWRCdWZmZXI+JiYgZGF0YSwgc3RkOjpvcAogICAgIGF1dG8gZmlsZW5hbWUgPSBuZXdG
aWxlbmFtZSA/ICpuZXdGaWxlbmFtZSA6IGF0dGFjaG1lbnRUaXRsZSgpOwogICAgIGF1dG8gY29u
dGVudFR5cGUgPSBuZXdDb250ZW50VHlwZSA/ICpuZXdDb250ZW50VHlwZSA6IEZpbGU6OmNvbnRl
bnRUeXBlRm9yRmlsZShmaWxlbmFtZSk7CiAgICAgYXV0byBmaWxlID0gRmlsZTo6Y3JlYXRlKEJs
b2I6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpLCBjb250ZW50VHlwZSksIGZpbGVuYW1lKTsKLQotICAg
IHNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24odGl0bGVBdHRyLCBmaWxlbmFtZSk7
Ci0gICAgc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihzdWJ0aXRsZUF0dHIsIGZp
bGVTaXplRGVzY3JpcHRpb24oZmlsZS0+c2l6ZSgpKSk7Ci0gICAgc2V0QXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbih0eXBlQXR0ciwgY29udGVudFR5cGUpOwotICAgIHNldEZpbGUoV1RG
TW92ZShmaWxlKSk7CisgICAgc2V0RmlsZShXVEZNb3ZlKGZpbGUpLCBVcGRhdGVEaXNwbGF5QXR0
cmlidXRlczo6WWVzKTsKIH0KIAogUmVmPEhUTUxJbWFnZUVsZW1lbnQ+IEhUTUxBdHRhY2htZW50
RWxlbWVudDo6ZW5zdXJlSW5uZXJJbWFnZSgpCkBAIC0yNjYsOCArMjc4LDE3IEBAIFJlZlB0cjxI
VE1MVmlkZW9FbGVtZW50PiBIVE1MQXR0YWNobWVudEVsZW1lbnQ6OmlubmVyVmlkZW8oKSBjb25z
dAogCiB2b2lkIEhUTUxBdHRhY2htZW50RWxlbWVudDo6cG9wdWxhdGVTaGFkb3dSb290SWZOZWNl
c3NhcnkoKQogeworICAgIGlmICghbV9maWxlKQorICAgICAgICByZXR1cm47CisKICAgICBhdXRv
IG1pbWVUeXBlID0gYXR0YWNobWVudFR5cGUoKTsKLSAgICBpZiAoIW1fZmlsZSB8fCBtaW1lVHlw
ZS5pc0VtcHR5KCkpCisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBpZiAoaXNEZWNsYXJlZFVU
SShtaW1lVHlwZSkpCisgICAgICAgIG1pbWVUeXBlID0gTUlNRVR5cGVGcm9tVVRJKG1pbWVUeXBl
KTsKKyNlbmRpZgorCisgICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZSht
aW1lVHlwZSkgfHwgTUlNRVR5cGVSZWdpc3RyeTo6aXNQREZNSU1FVHlwZShtaW1lVHlwZSkpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dGFjaG1lbnRFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5oCmluZGV4IGM4ZjM1
ZDViNTQ4YTM3ZWFlOTJiYmJkYjg0YTY3ZjdlMDQ2MmE5ZDcuLjE3OTVkMWZkMGI5Y2IwYjE5YzI3
MTU1YjBjMTVlNTMyNWY0MDA3NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEF0dGFjaG1lbnRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0YWNo
bWVudEVsZW1lbnQuaApAQCAtNDUsNyArNDUsOSBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VY
UE9SVCBVUkwgYmxvYlVSTCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIEZpbGUqIGZpbGUo
KSBjb25zdDsKLSAgICB2b2lkIHNldEZpbGUoUmVmUHRyPEZpbGU+JiYpOworCisgICAgZW51bSBj
bGFzcyBVcGRhdGVEaXNwbGF5QXR0cmlidXRlcyB7IE5vLCBZZXMgfTsKKyAgICB2b2lkIHNldEZp
bGUoUmVmUHRyPEZpbGU+JiYsIFVwZGF0ZURpc3BsYXlBdHRyaWJ1dGVzID0gVXBkYXRlRGlzcGxh
eUF0dHJpYnV0ZXM6Ok5vKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyB1bmlxdWVJZGVu
dGlmaWVyKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRVbmlxdWVJZGVudGlmaWVyKGNvbnN0IFN0cmlu
ZyYpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4
IDg3YzBmZDMwZDNjN2QxNmJmMzVjMTIwNGY2YWRiNjc4MjIxOTAwNjIuLjFmODU2MGI4MTc3ZTkw
MGYzYTQ1MzY0ODlmNzJkOTFjYzBjYmI3YmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZwor
KysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAxNy0xMi0xNCAgV2Vuc29u
IEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQXR0YWNobWVudCBT
dXBwb3J0XSBJbnNlcnQgaW1hZ2VzIGFzIGlubGluZSBhdHRhY2htZW50cyB3aGVuIHBhc3Rpbmcg
YW5kIGRyb3BwaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xODA4NTMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM1NzU2MjY4PgorCisgICAgICAg
IFJldmlld2VkIGJ5IFRpbSBIb3J0b24uCisKKyAgICAgICAgQWRkcyBuZXcgV0tBdHRhY2htZW50
IEFQSSB0ZXN0cyBhbmQgdGVzdCBzdXBwb3J0LiBTZWUgY29tbWVudHMgYmVsb3cgZm9yIG1vcmUg
ZGV0YWlsLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0
dGFjaG1lbnRUZXN0cy5tbToKKworICAgICAgICBUd2VhayB0aGUgZWRpdGluZyB0ZXN0IHBhZ2Ug
bWFya3VwLCBzdWNoIHRoYXQgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgZG9lc24ndCBhZGRpdGlv
bmFsbHkgY29udGFpbiB0aGUgY29udGVudHMKKyAgICAgICAgb2YgdGhlIHNjcmlwdCB0YWcuCisK
KyAgICAgICAgKHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMpOgorICAgICAgICAodGVzdElt
YWdlRmlsZVVSTCk6CisgICAgICAgICh0ZXN0SW1hZ2VEYXRhKToKKyAgICAgICAgKHRlc3RQREZG
aWxlVVJMKToKKyAgICAgICAgKHRlc3RQREZEYXRhKToKKyAgICAgICAgKHBsYXRmb3JtQ29weVJp
Y2hUZXh0V2l0aEF0dGFjaG1lbnQpOgorICAgICAgICAocGxhdGZvcm1Db3B5UE5HKToKKyAgICAg
ICAgKHBsYXRmb3JtSW1hZ2VXaXRoRGF0YSk6CisKKyAgICAgICAgQWRkIHNvbWUgcGxhdGZvcm0g
aGVscGVyIGZ1bmN0aW9ucywgd2hpY2ggc29tZSBvZiB0aGUgcGxhdGZvcm0tYWdub3N0aWMgdGVz
dHMgYmVsb3cgdXNlIHRvIHJlc29sdmUgZGlmZmVyZW5jZXMKKyAgICAgICAgYmV0d2VlbiBpT1Mg
YW5kIG1hY09TIHdoZW4gd3JpdGluZyB0byB0aGUgcGFzdGVib2FyZCBhbmQgY3JlYXRpbmcgYW4g
aW1hZ2UgZnJvbSBkYXRhLgorCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKworICAg
ICAgICBBZGQgbmV3IEFQSSB0ZXN0cyB0byBleGVyY2lzZSBkcmFnIGFuZCBkcm9wL2NvcHkgYW5k
IHBhc3RlIG9mIHJpY2ggY29udGVudCAobmFtZWx5LCBpbWFnZXMgYW5kIGZpbGVzKSBvbiBpT1Mg
YW5kCisgICAgICAgIG1hY09TLiBpT1MgYXR0YWNobWVudCB0ZXN0cyB1c2UgRGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yIHRvIHNpbXVsYXRlIFVJS2l0IGRyYWcgYW5kIGRyb3AgY29vcmRpbmF0aW9u
LiBPbiBtYWNPUywKKyAgICAgICAgaGFuZGxpbmcgb2YgZHJvcHBlZCBjb250ZW50IGlzIG11Y2gg
Y2xvc2VyIHRvIGhhbmRsaW5nIG9mIHBhc3RlZCBjb250ZW50ICh0aGV5IHVzZSB0aGUgc2FtZSBj
b2RlcGF0aHMgdG8gcmVhZAorICAgICAgICBmcm9tIHRoZSBwbGF0Zm9ybSBwYXN0ZWJvYXJkKSwg
c28gZXhlcmNpc2luZyBwYXN0ZSBjb2RlcGF0aHMgb24gTWFjIGlzIHN1ZmZpY2llbnQuCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL2lvcy9EYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuaDoKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL2lvcy9EYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IubW06Cisg
ICAgICAgICgtW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBfcmVzZXRTaW11bGF0ZWRTdGF0ZV0p
OgorICAgICAgICAoLVtEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgaW5zZXJ0ZWRBdHRhY2htZW50
c10pOgorICAgICAgICAoLVtEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcmVtb3ZlZEF0dGFjaG1l
bnRzXSk6CisKKyAgICAgICAgVGVhY2ggdGhlIGlPUyBkcmFnIGFuZCBkcm9wIHNpbXVsYXRvciB0
byBrZWVwIHRyYWNrIG9mIGF0dGFjaG1lbnQgZWxlbWVudHMgdGhhdCBhcmUgaW5zZXJ0ZWQgZHVy
aW5nIGEgZHJvcC4gV2UKKyAgICAgICAgYWxzbyBrZWVwIHRyYWNrIG9mIHJlbW92ZWQgYXR0YWNo
bWVudHMgaGVyZSB0b28sIHRob3VnaCBubyBkZWZhdWx0IGRyb3AgaGFuZGxpbmcgc2NlbmFyaW8g
c2hvdWxkIHRyaWdnZXIKKyAgICAgICAgYXR0YWNobWVudCByZW1vdmFsLCBzbyB3ZSBzaW1wbHkg
dXNlIHRoaXMgdG8gY2hlY2sgdGhhdCBubyBfV0tBdHRhY2htZW50cyB3ZXJlIHJlbW92ZWQgZHVy
aW5nIGEgZHJvcC4KKworICAgICAgICAoLVtEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgX3dlYlZp
ZXc6ZGlkSW5zZXJ0QXR0YWNobWVudDpdKToKKyAgICAgICAgKC1bRGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yIF93ZWJWaWV3OmRpZFJlbW92ZUF0dGFjaG1lbnQ6XSk6CisKIDIwMTctMTItMTQgIERh
dmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBjaGVjay13ZWJraXQt
c3R5bGU6IFN0b3Agd2FybmluZyBhYm91dCB1bmRlcnNjb3JlcyBpbiB3ZWJydGMgc291cmNlCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNo
bWVudFRlc3RzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0
dGFjaG1lbnRUZXN0cy5tbQppbmRleCA5M2FkMmE0ODU3MWVkZTI4NGY0ZjI2MGJiNzIxYWYzNDc5
YWY0MzgyLi4zZjhlNjFkMWNkMDY0OTYwNTQwZjcyZmI3ODRhY2RmYzAzYmVkNDhiIDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRl
c3RzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRh
Y2htZW50VGVzdHMubW0KQEAgLTI1LDEzICsyNSwxOSBAQAogCiAjaW1wb3J0ICJjb25maWcuaCIK
IAorI2ltcG9ydCAiRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmgiCiAjaW1wb3J0ICJQbGF0Zm9y
bVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgorI2ltcG9ydCA8V2ViS2l0
L1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktp
dFByaXZhdGUuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAorI2lmIFBMQVRGT1JNKElP
UykKKyNpbXBvcnQgPE1vYmlsZUNvcmVTZXJ2aWNlcy9Nb2JpbGVDb3JlU2VydmljZXMuaD4KKyNl
bmRpZgorCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAogQGludGVyZmFjZSBBdHRhY2htZW50VXBkYXRl
T2JzZXJ2ZXIgOiBOU09iamVjdCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4KQEAgLTEyMiw5ICsxMjgs
MTAgQEAgc3RhdGljIFJldGFpblB0cjxUZXN0V0tXZWJWaWV3PiB3ZWJWaWV3Rm9yVGVzdGluZ0F0
dGFjaG1lbnRzKCkKIHsKICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJW
aWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtjb25maWd1cmF0aW9uIF9zZXRB
dHRhY2htZW50RWxlbWVudEVuYWJsZWQ6WUVTXTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Q3VzdG9t
UGFzdGVib2FyZERhdGFFbmFibGVkKChXS1ByZWZlcmVuY2VzUmVmKVtjb25maWd1cmF0aW9uIHBy
ZWZlcmVuY2VzXSwgWUVTKTsKIAogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApIGNv
bmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwotICAgIFt3ZWJWaWV3IHN5bmNocm9u
b3VzbHlMb2FkSFRNTFN0cmluZzpAIjxib2R5IGNvbnRlbnRlZGl0YWJsZT48L2JvZHk+PHNjcmlw
dD5kb2N1bWVudC5ib2R5LmZvY3VzKCk7PC9zY3JpcHQ+Il07CisgICAgW3dlYlZpZXcgc3luY2hy
b25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPHNjcmlwdD5mb2N1cyA9ICgpID0+IGRvY3VtZW50LmJv
ZHkuZm9jdXMoKTwvc2NyaXB0Pjxib2R5IG9ubG9hZD1mb2N1cygpIGNvbnRlbnRlZGl0YWJsZT48
L2JvZHk+Il07CiAKICAgICByZXR1cm4gd2ViVmlldzsKIH0KQEAgLTEzNCwxMCArMTQxLDE0IEBA
IHN0YXRpYyBOU0RhdGEgKnRlc3RIVE1MRGF0YSgpCiAgICAgcmV0dXJuIFtAIjxhIGhyZWY9JyMn
PlRoaXMgaXMgc29tZSBIVE1MIGRhdGE8L2E+IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJp
bmdFbmNvZGluZ107CiB9CiAKK3N0YXRpYyBOU1VSTCAqdGVzdEltYWdlRmlsZVVSTCgpCit7Cisg
ICAgcmV0dXJuIFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJpY29uIiB3
aXRoRXh0ZW5zaW9uOkAicG5nIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNl
cyJdOworfQorCiBzdGF0aWMgTlNEYXRhICp0ZXN0SW1hZ2VEYXRhKCkKIHsKLSAgICBOU1VSTCAq
dXJsID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAImljb24iIHdpdGhF
eHRlbnNpb246QCJwbmciIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07
Ci0gICAgcmV0dXJuIFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mVVJMOnVybF07CisgICAgcmV0
dXJuIFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mVVJMOnRlc3RJbWFnZUZpbGVVUkwoKV07CiB9
CiAKIHN0YXRpYyBOU0RhdGEgKnRlc3RWaWRlb0RhdGEoKQpAQCAtMTQ2LDEwICsxNTcsMTQgQEAg
c3RhdGljIE5TRGF0YSAqdGVzdFZpZGVvRGF0YSgpCiAgICAgcmV0dXJuIFtOU0RhdGEgZGF0YVdp
dGhDb250ZW50c09mVVJMOnVybF07CiB9CiAKK3N0YXRpYyBOU1VSTCAqdGVzdFBERkZpbGVVUkwo
KQoreworICAgIHJldHVybiBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAi
dGVzdCIgd2l0aEV4dGVuc2lvbjpAInBkZiIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5y
ZXNvdXJjZXMiXTsKK30KKwogc3RhdGljIE5TRGF0YSAqdGVzdFBERkRhdGEoKQogewotICAgIE5T
VVJMICp1cmwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAidGVzdCIg
d2l0aEV4dGVuc2lvbjpAInBkZiIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJj
ZXMiXTsKLSAgICByZXR1cm4gW05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZVUkw6dXJsXTsKKyAg
ICByZXR1cm4gW05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZVUkw6dGVzdFBERkZpbGVVUkwoKV07
CiB9CiAKIHN0YXRpYyBfV0tBdHRhY2htZW50RGlzcGxheU9wdGlvbnMgKmRpc3BsYXlPcHRpb25z
V2l0aE1vZGUoX1dLQXR0YWNobWVudERpc3BsYXlNb2RlIG1vZGUpCkBAIC0yOTEsOCArMzA2LDY3
IEBAIC0gKHZvaWQpZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6KE5TRGF0YSAqKWV4cGVjdGVkRGF0
YQogCiBAZW5kCiAKKyNwcmFnbWEgbWFyayAtIFBsYXRmb3JtIHRlc3RpbmcgaGVscGVyIGZ1bmN0
aW9ucworCit2b2lkIHBsYXRmb3JtQ29weVJpY2hUZXh0V2l0aEltYWdlKCkKK3sKKyAgICBhdXRv
IHJpY2hUZXh0ID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGlu
aXRdKTsKKyAgICBhdXRvIGltYWdlID0gYWRvcHROUyhbW05TVGV4dEF0dGFjaG1lbnQgYWxsb2Nd
IGluaXRXaXRoRGF0YTp0ZXN0SW1hZ2VEYXRhKCkgb2ZUeXBlOihOU1N0cmluZyAqKWtVVFR5cGVQ
TkddKTsKKworICAgIFtyaWNoVGV4dCBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOltbW05TQXR0cmli
dXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCJMb3JlbSBpcHN1bSAiXSBhdXRvcmVs
ZWFzZV1dOworICAgIFtyaWNoVGV4dCBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOltOU0F0dHJpYnV0
ZWRTdHJpbmcgYXR0cmlidXRlZFN0cmluZ1dpdGhBdHRhY2htZW50OmltYWdlLmdldCgpXV07Cisg
ICAgW3JpY2hUZXh0IGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6W1tbTlNBdHRyaWJ1dGVkU3RyaW5n
IGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIiBkb2xvciBzaXQgYW1ldC4iXSBhdXRvcmVsZWFzZV1d
OworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIE5TUGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFtO
U1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdOworICAgIFtwYXN0ZWJvYXJkIGNsZWFyQ29u
dGVudHNdOworICAgIFtwYXN0ZWJvYXJkIHdyaXRlT2JqZWN0czpAWyByaWNoVGV4dC5nZXQoKSBd
XTsKKyNlbGlmIFBMQVRGT1JNKElPUykKKyAgICBhdXRvIGl0ZW0gPSBhZG9wdE5TKFtbTlNJdGVt
UHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbaXRlbSByZWdpc3Rlck9iamVjdDpyaWNoVGV4
dC5nZXQoKSB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5
QWxsXTsKKyAgICBbVUlQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXS5pdGVtUHJvdmlkZXJz
ID0gQFsgaXRlbS5nZXQoKSBdOworI2VuZGlmCit9CisKK3R5cGVkZWYgdm9pZCheSXRlbVByb3Zp
ZGVyRGF0YUxvYWRIYW5kbGVyKShOU0RhdGEgKiwgTlNFcnJvciAqKTsKKwordm9pZCBwbGF0Zm9y
bUNvcHlQTkcoKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBOU1Bhc3RlYm9hcmQgKnBhc3Rl
Ym9hcmQgPSBbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXTsKKyAgICBbcGFzdGVib2Fy
ZCBkZWNsYXJlVHlwZXM6QFtOU1Bhc3RlYm9hcmRUeXBlUE5HXSBvd25lcjpuaWxdOworICAgIFtw
YXN0ZWJvYXJkIHNldERhdGE6dGVzdEltYWdlRGF0YSgpIGZvclR5cGU6TlNQYXN0ZWJvYXJkVHlw
ZVBOR107CisjZWxpZiBQTEFURk9STShJT1MpCisgICAgVUlQYXN0ZWJvYXJkICpwYXN0ZWJvYXJk
ID0gW1VJUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF07CisgICAgYXV0byBpdGVtID0gYWRv
cHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2l0ZW0gc2V0UHJlZmVy
cmVkUHJlc2VudGF0aW9uU3R5bGU6VUlQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZUF0dGFjaG1l
bnRdOworICAgIFtpdGVtIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZp
ZXI6KE5TU3RyaW5nICopa1VUVHlwZVBORyB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVz
ZW50YXRpb25WaXNpYmlsaXR5QWxsIGxvYWRIYW5kbGVyOltdIChJdGVtUHJvdmlkZXJEYXRhTG9h
ZEhhbmRsZXIgY29tcGxldGlvbkhhbmRsZXIpIC0+IE5TUHJvZ3Jlc3MgKiB7CisgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHRlc3RJbWFnZURhdGEoKSwgbmlsKTsKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICB9XTsKKyAgICBwYXN0ZWJvYXJkLml0ZW1Qcm92aWRlcnMgPSBAWyBpdGVtLmdldCgp
IF07CisjZW5kaWYKK30KKworI2lmIFBMQVRGT1JNKE1BQykKK3R5cGVkZWYgTlNJbWFnZSBQbGF0
Zm9ybUltYWdlOworI2Vsc2UKK3R5cGVkZWYgVUlJbWFnZSBQbGF0Zm9ybUltYWdlOworI2VuZGlm
CisKK1BsYXRmb3JtSW1hZ2UgKnBsYXRmb3JtSW1hZ2VXaXRoRGF0YShOU0RhdGEgKmRhdGEpCit7
CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHJldHVybiBbW1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0
aERhdGE6ZGF0YV0gYXV0b3JlbGVhc2VdOworI2Vsc2UKKyAgICByZXR1cm4gW1VJSW1hZ2UgaW1h
Z2VXaXRoRGF0YTpkYXRhXTsKKyNlbmRpZgorfQorCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7
CiAKKyNwcmFnbWEgbWFyayAtIFBsYXRmb3JtLWFnbm9zdGljIHRlc3RzCisKIFRFU1QoV0tBdHRh
Y2htZW50VGVzdHMsIEF0dGFjaG1lbnRFbGVtZW50SW5zZXJ0aW9uKQogewogICAgIGF1dG8gd2Vi
VmlldyA9IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsKQEAgLTY3NSw2ICs3NDksMTU3
IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHMsIENoYW5nZUF0dGFjaG1lbnREYXRhVXBkYXRlc1dp
dGhJblBsYWNlRGlzcGxheSkKICAgICBbd2ViVmlldyBleHBlY3RVcGRhdGVzQWZ0ZXJDb21tYW5k
OkAiRGVsZXRlQmFja3dhcmQiIHdpdGhBcmd1bWVudDpuaWwgZXhwZWN0ZWRSZW1vdmFsczpAW2F0
dGFjaG1lbnQuZ2V0KCldIGV4cGVjdGVkSW5zZXJ0aW9uczpAW11dOwogfQogCitURVNUKFdLQXR0
YWNobWVudFRlc3RzLCBJbnNlcnRQYXN0ZWRJbWFnZUFzQXR0YWNobWVudCkKK3sKKyAgICBwbGF0
Zm9ybUNvcHlQTkcoKTsKKworICAgIFJldGFpblB0cjxfV0tBdHRhY2htZW50PiBhdHRhY2htZW50
OworICAgIGF1dG8gd2ViVmlldyA9IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsKKyAg
ICB7CisgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdl
YlZpZXcuZ2V0KCkpOworICAgICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0
Q29tbWFuZDpAIlBhc3RlIiBhcmd1bWVudDpuaWxdOworICAgICAgICBFWFBFQ1RfRVEoMVUsIG9i
c2VydmVyLm9ic2VydmVyKCkuaW5zZXJ0ZWQuY291bnQpOworICAgICAgICBhdHRhY2htZW50ID0g
b2JzZXJ2ZXIub2JzZXJ2ZXIoKS5pbnNlcnRlZFswXTsKKyAgICB9CisKKyAgICBhdXRvIHNpemUg
PSBwbGF0Zm9ybUltYWdlV2l0aERhdGEoW2F0dGFjaG1lbnQgc3luY2hyb25vdXNseVJlcXVlc3RE
YXRhOm5pbF0pLnNpemU7CisgICAgRVhQRUNUX0VRKDIxNS4sIHNpemUud2lkdGgpOworICAgIEVY
UEVDVF9FUSgxNzQuLCBzaXplLmhlaWdodCk7CisKKyAgICB7CisgICAgICAgIE9ic2VydmVBdHRh
Y2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOworICAgICAgICBb
d2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIlNlbGVjdEFsbCIgYXJn
dW1lbnQ6bmlsXTsKKyAgICAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENv
bW1hbmQ6QCJEZWxldGVCYWNrd2FyZCIgYXJndW1lbnQ6bmlsXTsKKyAgICAgICAgb2JzZXJ2ZXIu
ZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFthdHRhY2htZW50LmdldCgpXSwgQFtdKTsKKyAgICB9
Cit9CisKK1RFU1QoV0tBdHRhY2htZW50VGVzdHMsIEluc2VydFBhc3RlZEF0dHJpYnV0ZWRTdHJp
bmdDb250YWluaW5nSW1hZ2UpCit7CisgICAgcGxhdGZvcm1Db3B5UmljaFRleHRXaXRoSW1hZ2Uo
KTsKKworICAgIFJldGFpblB0cjxfV0tBdHRhY2htZW50PiBhdHRhY2htZW50OworICAgIGF1dG8g
d2ViVmlldyA9IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsKKyAgICB7CisgICAgICAg
IE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkp
OworICAgICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIlBh
c3RlIiBhcmd1bWVudDpuaWxdOworICAgICAgICBFWFBFQ1RfRVEoMFUsIG9ic2VydmVyLm9ic2Vy
dmVyKCkucmVtb3ZlZC5jb3VudCk7CisgICAgICAgIEVYUEVDVF9FUSgxVSwgb2JzZXJ2ZXIub2Jz
ZXJ2ZXIoKS5pbnNlcnRlZC5jb3VudCk7CisgICAgICAgIGF0dGFjaG1lbnQgPSBvYnNlcnZlci5v
YnNlcnZlcigpLmluc2VydGVkWzBdOworICAgIH0KKworICAgIFthdHRhY2htZW50IGV4cGVjdFJl
cXVlc3RlZERhdGFUb0JlOnRlc3RJbWFnZURhdGEoKV07CisgICAgRVhQRUNUX1dLX1NUUkVRKCJM
b3JlbSBpcHN1bSAgZG9sb3Igc2l0IGFtZXQuIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkudGV4dENvbnRlbnQiXSk7CisgICAgRVhQRUNUX1dL
X1NUUkVRKCJpbWFnZS9wbmciLCBbd2ViVmlldyB2YWx1ZU9mQXR0cmlidXRlOkAidHlwZSIgZm9y
UXVlcnlTZWxlY3RvcjpAImF0dGFjaG1lbnQiXSk7CisKKyAgICB7CisgICAgICAgIE9ic2VydmVB
dHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOworICAgICAg
ICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIlNlbGVjdEFsbCIg
YXJndW1lbnQ6bmlsXTsKKyAgICAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRp
dENvbW1hbmQ6QCJEZWxldGVCYWNrd2FyZCIgYXJndW1lbnQ6bmlsXTsKKyAgICAgICAgb2JzZXJ2
ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFthdHRhY2htZW50LmdldCgpXSwgQFtdKTsKKyAg
ICB9Cit9CisKKyNwcmFnbWEgbWFyayAtIFBsYXRmb3JtLXNwZWNpZmljIHRlc3RzCisKKyNpZiBQ
TEFURk9STShNQUMpCisKK1RFU1QoV0tBdHRhY2htZW50VGVzdHNNYWMsIEluc2VydFBhc3RlZEZp
bGVVUkxzQXNBdHRhY2htZW50cykKK3sKKyAgICBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBb
TlNQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXTsKKyAgICBbcGFzdGVib2FyZCBjbGVhckNv
bnRlbnRzXTsKKyAgICBbcGFzdGVib2FyZCBkZWNsYXJlVHlwZXM6QFtOU0ZpbGVuYW1lc1Bib2Fy
ZFR5cGVdIG93bmVyOm5pbF07CisgICAgW3Bhc3RlYm9hcmQgc2V0UHJvcGVydHlMaXN0OkBbdGVz
dFBERkZpbGVVUkwoKS5wYXRoLCB0ZXN0SW1hZ2VGaWxlVVJMKCkucGF0aF0gZm9yVHlwZTpOU0Zp
bGVuYW1lc1Bib2FyZFR5cGVdOworCisgICAgUmV0YWluUHRyPE5TQXJyYXk8X1dLQXR0YWNobWVu
dCAqPj4gaW5zZXJ0ZWRBdHRhY2htZW50czsKKyAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9y
VGVzdGluZ0F0dGFjaG1lbnRzKCk7CisgICAgeworICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVw
ZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsKKyAgICAgICAgW3dlYlZpZXcg
X3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJQYXN0ZSIgYXJndW1lbnQ6bmlsXTsK
KyAgICAgICAgaW5zZXJ0ZWRBdHRhY2htZW50cyA9IFtvYnNlcnZlci5vYnNlcnZlcigpIGluc2Vy
dGVkXTsKKyAgICAgICAgRVhQRUNUX0VRKDJVLCBbaW5zZXJ0ZWRBdHRhY2htZW50cyBjb3VudF0p
OworICAgIH0KKworICAgIE5TQXJyYXk8TlNEYXRhICo+ICpleHBlY3RlZEF0dGFjaG1lbnREYXRh
ID0gQFsgdGVzdFBERkRhdGEoKSwgdGVzdEltYWdlRGF0YSgpIF07CisgICAgRVhQRUNUX1RSVUUo
W2V4cGVjdGVkQXR0YWNobWVudERhdGEgY29udGFpbnNPYmplY3Q6W1tpbnNlcnRlZEF0dGFjaG1l
bnRzIGZpcnN0T2JqZWN0XSBzeW5jaHJvbm91c2x5UmVxdWVzdERhdGE6bmlsXV0pOworICAgIEVY
UEVDVF9UUlVFKFtleHBlY3RlZEF0dGFjaG1lbnREYXRhIGNvbnRhaW5zT2JqZWN0OltbaW5zZXJ0
ZWRBdHRhY2htZW50cyBsYXN0T2JqZWN0XSBzeW5jaHJvbm91c2x5UmVxdWVzdERhdGE6bmlsXV0p
OworICAgIEVYUEVDVF9XS19TVFJFUSgiYXBwbGljYXRpb24vcGRmIiwgW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2F0dGFj
aG1lbnQnKVswXS5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
InRlc3QucGRmIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3Vt
ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2F0dGFjaG1lbnQnKVswXS5nZXRBdHRyaWJ1dGUoJ3RpdGxl
JykiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJpbWFnZS9wbmciLCBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYXR0YWNo
bWVudCcpWzFdLmdldEF0dHJpYnV0ZSgndHlwZScpIl0pOworICAgIEVYUEVDVF9XS19TVFJFUSgi
aWNvbi5wbmciLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1l
bnQucXVlcnlTZWxlY3RvckFsbCgnYXR0YWNobWVudCcpWzFdLmdldEF0dHJpYnV0ZSgndGl0bGUn
KSJdKTsKKworICAgIHsKKyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUg
b2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7CisgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5
RXhlY3V0ZUVkaXRDb21tYW5kOkAiU2VsZWN0QWxsIiBhcmd1bWVudDpuaWxdOworICAgICAgICBb
d2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIkRlbGV0ZUJhY2t3YXJk
IiBhcmd1bWVudDpuaWxdOworICAgICAgICBOU0FycmF5PF9XS0F0dGFjaG1lbnQgKj4gKnJlbW92
ZWRBdHRhY2htZW50cyA9IFtvYnNlcnZlci5vYnNlcnZlcigpIHJlbW92ZWRdOworICAgICAgICBF
WFBFQ1RfRVEoMlUsIHJlbW92ZWRBdHRhY2htZW50cy5jb3VudCk7CisgICAgICAgIEVYUEVDVF9U
UlVFKFtyZW1vdmVkQXR0YWNobWVudHMgY29udGFpbnNPYmplY3Q6W2luc2VydGVkQXR0YWNobWVu
dHMgZmlyc3RPYmplY3RdXSk7CisgICAgICAgIEVYUEVDVF9UUlVFKFtyZW1vdmVkQXR0YWNobWVu
dHMubGFzdE9iamVjdCBpc0VxdWFsOltpbnNlcnRlZEF0dGFjaG1lbnRzIGxhc3RPYmplY3RdXSk7
CisgICAgfQorfQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCisjaWYgUExBVEZPUk0oSU9T
KQorCitURVNUKFdLQXR0YWNobWVudFRlc3RzSU9TLCBJbnNlcnREcm9wcGVkSW1hZ2VBc0F0dGFj
aG1lbnQpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gd2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50
cygpOworICAgIGF1dG8gZHJhZ2dpbmdTaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0
aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAg
IGF1dG8gaXRlbSA9IGFkb3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAg
IFtpdGVtIHNldFByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlOlVJUHJlZmVycmVkUHJlc2VudGF0
aW9uU3R5bGVBdHRhY2htZW50XTsKKyAgICBbaXRlbSByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlv
bkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVQTkcgdmlzaWJpbGl0eTpOU0l0
ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbCBsb2FkSGFuZGxlcjpbXSAoSXRl
bVByb3ZpZGVyRGF0YUxvYWRIYW5kbGVyIGNvbXBsZXRpb25IYW5kbGVyKSAtPiBOU1Byb2dyZXNz
ICogeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0ZXN0SW1hZ2VEYXRhKCksIG5pbCk7Cisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgfV07CisgICAgW2RyYWdnaW5nU2ltdWxhdG9yIHNldEV4
dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtLmdldCgpIF1dOworICAgIFtkcmFnZ2luZ1NpbXVs
YXRvciBydW5Gcm9tOkNHUG9pbnRaZXJvIHRvOkNHUG9pbnRNYWtlKDUwLCA1MCldOworCisgICAg
RVhQRUNUX0VRKDFVLCBbZHJhZ2dpbmdTaW11bGF0b3IgaW5zZXJ0ZWRBdHRhY2htZW50c10uY291
bnQpOworICAgIEVYUEVDVF9FUSgwVSwgW2RyYWdnaW5nU2ltdWxhdG9yIHJlbW92ZWRBdHRhY2ht
ZW50c10uY291bnQpOworICAgIGF1dG8gYXR0YWNobWVudCA9IHJldGFpblB0cihbZHJhZ2dpbmdT
aW11bGF0b3IgaW5zZXJ0ZWRBdHRhY2htZW50c10uZmlyc3RPYmplY3QpOworICAgIFthdHRhY2ht
ZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOnRlc3RJbWFnZURhdGEoKV07CisgICAgRVhQRUNU
X1dLX1NUUkVRKCJwdWJsaWMucG5nIiwgW3dlYlZpZXcgdmFsdWVPZkF0dHJpYnV0ZTpAInR5cGUi
IGZvclF1ZXJ5U2VsZWN0b3I6QCJhdHRhY2htZW50Il0pOworCisgICAgeworICAgICAgICBPYnNl
cnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsKKyAg
ICAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJTZWxlY3RB
bGwiIGFyZ3VtZW50Om5pbF07CisgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0
ZUVkaXRDb21tYW5kOkAiRGVsZXRlQmFja3dhcmQiIGFyZ3VtZW50Om5pbF07CisgICAgICAgIG9i
c2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbYXR0YWNobWVudC5nZXQoKV0sIEBbXSk7
CisgICAgfQorfQorCitURVNUKFdLQXR0YWNobWVudFRlc3RzSU9TLCBJbnNlcnREcm9wcGVkQXR0
cmlidXRlZFN0cmluZ0NvbnRhaW5pbmdBdHRhY2htZW50KQoreworICAgIGF1dG8gd2ViVmlldyA9
IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsKKyAgICBhdXRvIGRyYWdnaW5nU2ltdWxh
dG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhX
ZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBhdXRvIGltYWdlID0gYWRvcHROUyhbW05TVGV4
dEF0dGFjaG1lbnQgYWxsb2NdIGluaXRXaXRoRGF0YTp0ZXN0SW1hZ2VEYXRhKCkgb2ZUeXBlOihO
U1N0cmluZyAqKWtVVFR5cGVQTkddKTsKKyAgICBhdXRvIGl0ZW0gPSBhZG9wdE5TKFtbTlNJdGVt
UHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbaXRlbSByZWdpc3Rlck9iamVjdDpbTlNBdHRy
aWJ1dGVkU3RyaW5nIGF0dHJpYnV0ZWRTdHJpbmdXaXRoQXR0YWNobWVudDppbWFnZS5nZXQoKV0g
dmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbF07CisK
KyAgICBbZHJhZ2dpbmdTaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW0u
Z2V0KCkgXV07CisgICAgW2RyYWdnaW5nU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludFplcm8gdG86
Q0dQb2ludE1ha2UoNTAsIDUwKV07CisKKyAgICBFWFBFQ1RfRVEoMVUsIFtkcmFnZ2luZ1NpbXVs
YXRvciBpbnNlcnRlZEF0dGFjaG1lbnRzXS5jb3VudCk7CisgICAgRVhQRUNUX0VRKDBVLCBbZHJh
Z2dpbmdTaW11bGF0b3IgcmVtb3ZlZEF0dGFjaG1lbnRzXS5jb3VudCk7CisgICAgYXV0byBhdHRh
Y2htZW50ID0gcmV0YWluUHRyKFtkcmFnZ2luZ1NpbXVsYXRvciBpbnNlcnRlZEF0dGFjaG1lbnRz
XS5maXJzdE9iamVjdCk7CisKKyAgICBhdXRvIHNpemUgPSBwbGF0Zm9ybUltYWdlV2l0aERhdGEo
W2F0dGFjaG1lbnQgc3luY2hyb25vdXNseVJlcXVlc3REYXRhOm5pbF0pLnNpemU7CisgICAgRVhQ
RUNUX0VRKDIxNS4sIHNpemUud2lkdGgpOworICAgIEVYUEVDVF9FUSgxNzQuLCBzaXplLmhlaWdo
dCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJpbWFnZS9wbmciLCBbd2ViVmlldyB2YWx1ZU9mQXR0
cmlidXRlOkAidHlwZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0dGFjaG1lbnQiXSk7CisKKyAgICB7
CisgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZp
ZXcuZ2V0KCkpOworICAgICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29t
bWFuZDpAIlNlbGVjdEFsbCIgYXJndW1lbnQ6bmlsXTsKKyAgICAgICAgW3dlYlZpZXcgX3N5bmNo
cm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJEZWxldGVCYWNrd2FyZCIgYXJndW1lbnQ6bmls
XTsKKyAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFthdHRhY2htZW50
LmdldCgpXSwgQFtdKTsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKIH0g
Ly8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKIAogI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9EYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5o
CmluZGV4IDcxMGVjNzZjMWMxNGVlNmY3NzdhZWQ4NDVmMWUyNWZlODU0YjkyMGUuLjU2OTRhYzMy
MWY3OGNkYjdhZGIyMDdlYTQ0ODE4N2E1NTkyYTkwMDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvaW9zL0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5oCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvaW9zL0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5oCkBAIC0xMzgsNiArMTM4LDkg
QEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgRGF0YUludGVyYWN0aW9uUGhhc2UpIHsKICAg
ICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk8TlNWYWx1ZSAqPj5fcXVldWVkQWRkaXRpb25hbEl0
ZW1SZXF1ZXN0TG9jYXRpb25zOwogICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheTxVSVRhcmdl
dGVkRHJhZ1ByZXZpZXcgKj4+IF9saWZ0UHJldmlld3M7CiAKKyAgICBSZXRhaW5QdHI8TlNNdXRh
YmxlQXJyYXk8X1dLQXR0YWNobWVudCAqPj4gX2luc2VydGVkQXR0YWNobWVudHM7CisgICAgUmV0
YWluUHRyPE5TTXV0YWJsZUFycmF5PF9XS0F0dGFjaG1lbnQgKj4+IF9yZW1vdmVkQXR0YWNobWVu
dHM7CisKICAgICBib29sIF9pc0RvbmVXYWl0aW5nRm9ySW5wdXRTZXNzaW9uOwogICAgIEJPT0wg
X3Nob3VsZFBlcmZvcm1PcGVyYXRpb247CiAgICAgZG91YmxlIF9jdXJyZW50UHJvZ3Jlc3M7CkBA
IC0xNjgsNiArMTcxLDkgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgRGF0YUludGVyYWN0
aW9uUGhhc2UpIHsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQ0dSZWN0IGxhc3RL
bm93bkRyYWdDYXJldFJlY3Q7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJy
YXk8VUlUYXJnZXRlZERyYWdQcmV2aWV3ICo+ICpsaWZ0UHJldmlld3M7CiAKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgTlNBcnJheTxfV0tBdHRhY2htZW50ICo+ICppbnNlcnRlZEF0
dGFjaG1lbnRzOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5PF9XS0F0
dGFjaG1lbnQgKj4gKnJlbW92ZWRBdHRhY2htZW50czsKKwogQGVuZAogCiAjZW5kaWYgLy8gRU5B
QkxFKERBVEFfSU5URVJBQ1RJT04pCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2lv
cy9EYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9E
YXRhSW50ZXJhY3Rpb25TaW11bGF0b3IubW0KaW5kZXggZjFjZjdhMGQ3M2Y1MjIzMDNjODVmOTAz
OTFjMzRhMTMwNGEzZDhhOS4uMzI5OWZiMDZlMzI4NzhkMGZkYzRhZTFlODNmNTkxNmQyNGJlNGU5
ZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvRGF0YUludGVyYWN0aW9uU2lt
dWxhdG9yLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RhdGFJbnRlcmFjdGlvblNp
bXVsYXRvci5tbQpAQCAtMzE3LDYgKzMxNyw4IEBAIC0gKHZvaWQpX3Jlc2V0U2ltdWxhdGVkU3Rh
dGUKICAgICBfY3VycmVudFByb2dyZXNzID0gMDsKICAgICBfaXNEb25lV2l0aEN1cnJlbnRSdW4g
PSBmYWxzZTsKICAgICBfb2JzZXJ2ZWRFdmVudE5hbWVzID0gYWRvcHROUyhbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0XSk7CisgICAgX2luc2VydGVkQXR0YWNobWVudHMgPSBhZG9wdE5TKFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKyAgICBfcmVtb3ZlZEF0dGFjaG1lbnRzID0g
YWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CiAgICAgX2ZpbmFsU2VsZWN0
aW9uUmVjdHMgPSBAWyBdOwogICAgIF9kcmFnU2Vzc2lvbiA9IG5pbDsKICAgICBfZHJvcFNlc3Np
b24gPSBuaWw7CkBAIC01NzYsNiArNTc4LDE2IEBAIC0gKHZvaWQpd2FpdEZvcklucHV0U2Vzc2lv
bgogICAgIFV0aWw6OnJ1bigmX2lzRG9uZVdhaXRpbmdGb3JJbnB1dFNlc3Npb24pOwogfQogCist
IChOU0FycmF5PF9XS0F0dGFjaG1lbnQgKj4gKilpbnNlcnRlZEF0dGFjaG1lbnRzCit7CisgICAg
cmV0dXJuIF9pbnNlcnRlZEF0dGFjaG1lbnRzLmdldCgpOworfQorCistIChOU0FycmF5PF9XS0F0
dGFjaG1lbnQgKj4gKilyZW1vdmVkQXR0YWNobWVudHMKK3sKKyAgICByZXR1cm4gX3JlbW92ZWRB
dHRhY2htZW50cy5nZXQoKTsKK30KKwogI3ByYWdtYSBtYXJrIC0gV0tVSURlbGVnYXRlUHJpdmF0
ZQogCiAtICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRhdGFJbnRlcmFjdGlv
bk9wZXJhdGlvbldhc0hhbmRsZWQ6KEJPT0wpaGFuZGxlZCBmb3JTZXNzaW9uOihpZClzZXNzaW9u
IGl0ZW1Qcm92aWRlcnM6KE5TQXJyYXk8VUlJdGVtUHJvdmlkZXIgKj4gKilpdGVtUHJvdmlkZXJz
CkBAIC02MTcsNiArNjI5LDE2IEBAIC0gKE5TQXJyYXk8VUlEcmFnSXRlbSAqPiAqKV93ZWJWaWV3
OihXS1dlYlZpZXcgKil3ZWJWaWV3IHdpbGxQZXJmb3JtRHJvcFdpdGhTZXNzCiAgICAgcmV0dXJu
IHNlbGYub3ZlcnJpZGVQZXJmb3JtRHJvcEJsb2NrID8gc2VsZi5vdmVycmlkZVBlcmZvcm1Ecm9w
QmxvY2soc2Vzc2lvbikgOiBzZXNzaW9uLml0ZW1zOwogfQogCistICh2b2lkKV93ZWJWaWV3OihX
S1dlYlZpZXcgKil3ZWJWaWV3IGRpZEluc2VydEF0dGFjaG1lbnQ6KF9XS0F0dGFjaG1lbnQgKilh
dHRhY2htZW50Cit7CisgICAgW19pbnNlcnRlZEF0dGFjaG1lbnRzIGFkZE9iamVjdDphdHRhY2ht
ZW50XTsKK30KKworLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRSZW1v
dmVBdHRhY2htZW50OihfV0tBdHRhY2htZW50ICopYXR0YWNobWVudAoreworICAgIFtfcmVtb3Zl
ZEF0dGFjaG1lbnRzIGFkZE9iamVjdDphdHRhY2htZW50XTsKK30KKwogI3ByYWdtYSBtYXJrIC0g
X1dLSW5wdXREZWxlZ2F0ZQogCiAtIChCT09MKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3
IGZvY3VzU2hvdWxkU3RhcnRJbnB1dFNlc3Npb246KGlkIDxfV0tGb2N1c2VkRWxlbWVudEluZm8+
KWluZm8K
</data>

          </attachment>
      

    </bug>

</bugzilla>