<?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>170589</bug_id>
          
          <creation_ts>2017-04-06 23:49:36 -0700</creation_ts>
          <short_desc>AX: PDF plugin needs to support PDF-DOM Mode</short_desc>
          <delta_ts>2017-04-11 09:26:26 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="chris fleizach">cfleizach</reporter>
          <assigned_to name="chris fleizach">cfleizach</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>samuel_white</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1295219</commentid>
    <comment_count>0</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2017-04-06 23:49:36 -0700</bug_when>
    <thetext>PDF is adding support for DOM level access to PDF nodes within the document.

To support that in WebKit, we can&apos;t just forward accessibility attributes to the pdfLayerController. 

Now we have to

1) Connect parent/children correctly
2) Support ability to convert outgoing frames and incoming hit points into and out of PDF space
3) Provide ability to connect the PDF annotation elements created in WebKit with their parent PDF annotation nodes

&lt;rdar://problem/31495188&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295221</commentid>
    <comment_count>1</comment_count>
      <attachid>306472</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2017-04-06 23:58:40 -0700</bug_when>
    <thetext>Created attachment 306472
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295222</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-04-06 23:59:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/31495451&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295223</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-07 00:00:50 -0700</bug_when>
    <thetext>Attachment 306472 did not pass style-queue:


ERROR: Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:1692:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit2/WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:202:  The parameter name &quot;pluginView&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:54:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 4 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295224</commentid>
    <comment_count>4</comment_count>
      <attachid>306473</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2017-04-07 00:03:48 -0700</bug_when>
    <thetext>Created attachment 306473
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295225</commentid>
    <comment_count>5</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-07 00:05:48 -0700</bug_when>
    <thetext>Attachment 306473 did not pass style-queue:


ERROR: Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:1692:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295229</commentid>
    <comment_count>6</comment_count>
      <attachid>306473</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-04-07 00:22:21 -0700</bug_when>
    <thetext>Comment on attachment 306473
patch

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

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:1687
&gt; +- (id)shadowPluginParent

The word &quot;shadow&quot; has a pretty specific meaning in DOMland these days, and PDFPlugin&apos;s &lt;input&gt;s are not that. Can we come up with something better?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:150
&gt; +- (PDFLayerController *)pdfLayerController

If you&apos;re going to implement both, you can drop the @synthesize above, right?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:193
&gt; +    if ([attribute isEqualToString:NSAccessibilityChildrenAttribute])
&gt; +        return @[ _pdfLayerController ];
&gt; +    if ([attribute isEqualToString:NSAccessibilityRoleAttribute])
&gt; +        return NSAccessibilityGroupRole;

This seems like a much better plan than the old plan, no idea why we did it that way before.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:1763
&gt; +bool PDFPlugin::pluginHandlesContentOffsetForAccessibilityHitTest() const

Why is this specific to the accessibility hit test? Seems like AX + normal hit testing should be the same.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:1765
&gt; +    // PDF plugin now handles scroll view and top content inset when convert hit test requests.

Grammar isn&apos;t quite right here.

&gt; Source/WebKit2/WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:201
&gt; +    BOOL applyContentOffset = true;

Should be a little &apos;bool&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295230</commentid>
    <comment_count>7</comment_count>
      <attachid>306473</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2017-04-07 00:25:40 -0700</bug_when>
    <thetext>Comment on attachment 306473
patch

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

&gt;&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:1687
&gt;&gt; +- (id)shadowPluginParent
&gt; 
&gt; The word &quot;shadow&quot; has a pretty specific meaning in DOMland these days, and PDFPlugin&apos;s &lt;input&gt;s are not that. Can we come up with something better?

how about &quot;associatedPluginParent&quot;

&gt;&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:150
&gt;&gt; +- (PDFLayerController *)pdfLayerController
&gt; 
&gt; If you&apos;re going to implement both, you can drop the @synthesize above, right?

yes will do

&gt;&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:1763
&gt;&gt; +bool PDFPlugin::pluginHandlesContentOffsetForAccessibilityHitTest() const
&gt; 
&gt; Why is this specific to the accessibility hit test? Seems like AX + normal hit testing should be the same.

its not entirely clear to me, but it appears that the PDFLayer accounts for the scroll offset in its own calculations. sadly this doesn&apos;t seem to work the same because of that

&gt;&gt; Source/WebKit2/WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:201
&gt;&gt; +    BOOL applyContentOffset = true;
&gt; 
&gt; Should be a little &apos;bool&apos;

will do</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295341</commentid>
    <comment_count>8</comment_count>
      <attachid>306508</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2017-04-07 08:44:00 -0700</bug_when>
    <thetext>Created attachment 306508
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295342</commentid>
    <comment_count>9</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2017-04-07 08:44:21 -0700</bug_when>
    <thetext>(In reply to chris fleizach from comment #8)
&gt; Created attachment 306508 [details]
&gt; patch

Updated with review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295344</commentid>
    <comment_count>10</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-07 08:45:53 -0700</bug_when>
    <thetext>Attachment 306508 did not pass style-queue:


ERROR: Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:1692:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296432</commentid>
    <comment_count>11</comment_count>
      <attachid>306508</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-04-11 09:26:24 -0700</bug_when>
    <thetext>Comment on attachment 306508
patch

Clearing flags on attachment: 306508

Committed r215233: &lt;http://trac.webkit.org/changeset/215233&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296433</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-04-11 09:26:26 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306472</attachid>
            <date>2017-04-06 23:58:40 -0700</date>
            <delta_ts>2017-04-07 00:03:48 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>28829</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNTA4NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE3LTA0LTA2ICBDaHJpcyBG
bGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFBERiBwbHVnaW4g
bmVlZHMgdG8gc3VwcG9ydCBQREYtRE9NIE1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDU4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFByb3ZpZGUgV2ViQ29yZSBzdXBwb3J0IGZvciBhY2Nlc3Np
YmlsaXR5IGNvbm5lY3QgdG8gUERGIGRvY3VtZW50LgorICAgICAgICBUaGlzIGluY2x1ZGVzIHRo
ZSBhYmlsaXR5IHRvIGNvbm5lY3QgYSBQREYgYW5ub3RhdGlvbiBjcmVhdGVkIG5vZGUgd2l0aGlu
IFdlYktpdCB0byAKKyAgICAgICAgIGl0cyBQREZBbm5vdGF0aW9uIHBhcmVudCAodGhyb3VnaCB1
c2Ugb2Ygc2hhZG93UGx1Z2luUGFyZW50KS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpBWFBvc3ROb3RpZmljYXRpb25XaXRoVXNlckluZm8p
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyTWFjLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyIHNoYWRvd1BsdWdpblBhcmVudF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6XSk6CisgICAgICAgICogaHRt
bC9IVE1MQXR0cmlidXRlTmFtZXMuaW46CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3QmFz
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlld0Jhc2U6OmFjY2Vzc2liaWxpdHlTaGFk
b3dQbHVnaW5QYXJlbnRGb3JFbGVtZW50KToKKwogMjAxNy0wNC0wNiAgWW91ZW5uIEZhYmxldCAg
PHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgW0RlYnVnXSBBU1NFUlQoIXRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpIG9uIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBp
L2NvcnMvY29ycy1wcmVmbGlnaHQtc3RhdHVzLXdvcmtlci5odG1sCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAkocmV2aXNpb24gMjE1MDg0KQor
KysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE0Myw3ICsxNDMsNyBAQAogICAgIC8vIEZvciBBWCBvYmplY3RzIHdpdGggZWxl
bWVudHMgdGhhdCBiYWNrIHRoZW0uCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0T3JDcmVh
dGUoUmVuZGVyT2JqZWN0Kik7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0T3JDcmVhdGUo
V2lkZ2V0Kik7Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0T3JDcmVhdGUoTm9kZSopOwor
ICAgIFdFQkNPUkVfRVhQT1JUIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3JlYXRlKE5vZGUq
KTsKIAogICAgIC8vIHVzZWQgZm9yIG9iamVjdHMgd2l0aG91dCBiYWNraW5nIGVsZW1lbnRzCiAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0T3JDcmVhdGUoQWNjZXNzaWJpbGl0eVJvbGUpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVj
dENhY2hlTWFjLm1tCShyZXZpc2lvbiAyMTUwODQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsOCAr
MjUwLDExIEBACiAgICAgYXhTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zRm9yVGVzdHMgPSB2YWx1
ZTsKIH0KIAotc3RhdGljIHZvaWQgQVhQb3N0Tm90aWZpY2F0aW9uV2l0aFVzZXJJbmZvKGlkIG9i
amVjdCwgTlNTdHJpbmcgKm5vdGlmaWNhdGlvbiwgaWQgdXNlckluZm8pCitzdGF0aWMgdm9pZCBB
WFBvc3ROb3RpZmljYXRpb25XaXRoVXNlckluZm8oQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
Km9iamVjdCwgTlNTdHJpbmcgKm5vdGlmaWNhdGlvbiwgaWQgdXNlckluZm8pCiB7CisgICAgaWYg
KGlkIHNoYWRvd1BsdWdpblBhcmVudCA9IFtvYmplY3Qgc2hhZG93UGx1Z2luUGFyZW50XSkKKyAg
ICAgICAgb2JqZWN0ID0gc2hhZG93UGx1Z2luUGFyZW50OworICAgIAogICAgIE5TQWNjZXNzaWJp
bGl0eVBvc3ROb3RpZmljYXRpb25XaXRoVXNlckluZm8ob2JqZWN0LCBub3RpZmljYXRpb24sIHVz
ZXJJbmZvKTsKICAgICAvLyBUbyBzaW1wbGlmeSBtb25pdG9yaW5nIGZvciBub3RpZmljYXRpb25z
IGluIHRlc3RzLCByZXBvc3QgYXMgYSBzaW1wbGUgTlNOb3RpZmljYXRpb24gaW5zdGVhZCBvZiBm
b3JjaW5nIHRlc3QgaW5mcmFzdHVjdHVyZSB0byBzZXR1cCBhbiBJUEMgY2xpZW50IGFuZCBkbyBh
bGwgdGhlIHRyYW5zbGF0aW9uIGJldHdlZW4gV2ViQ29yZSB0eXBlcyBhbmQgcGxhdGZvcm0gc3Bl
Y2lmaWMgSVBDIHR5cGVzIGFuZCBiYWNrCiAgICAgaWYgKFVOTElLRUxZKGF4U2hvdWxkUmVwb3N0
Tm90aWZpY2F0aW9uc0ZvclRlc3RzKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJNYWMuaAkocmV2aXNpb24gMjE1MDg0KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNCArMzUsNyBAQAogLSAoaWQpdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3Np
dGlvbnM6KGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYpc3RhcnRQb3NpdGlvbiBlbmRQ
b3NpdGlvbjooY29uc3QgV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uJillbmRQb3NpdGlvbjsKIC0g
KGlkKXRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246KGNvbnN0IFdlYkNvcmU6OlZpc2libGVQ
b3NpdGlvbiYpdmlzaWJsZVBvczsKIAorLy8gV2hlbiBhIHBsdWdpbiB1c2VzIGEgV2ViS2l0IGNv
bnRyb2wgdG8gYWN0IGFzIGEgc3Vycm9nYXRlIHZpZXcgKGUuZy4gUERGIHVzZSBXZWJLaXQgdG8g
Y3JlYXRlIHRleHQgZmllbGRzKS4KKy0gKGlkKXNoYWRvd1BsdWdpblBhcmVudDsKKwogQGVuZApJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0JKHJldmlzaW9uIDIx
NTA4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw4IEBACiAj
aW1wb3J0ICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaW1wb3J0ICJNYWluRnJhbWUuaCIKICNpbXBv
cnQgIlBhZ2UuaCIKKyNpbXBvcnQgIlBsdWdpbkRvY3VtZW50LmgiCisjaW1wb3J0ICJQbHVnaW5W
aWV3QmFzZS5oIgogI2ltcG9ydCAiUmVuZGVyVGV4dENvbnRyb2wuaCIKICNpbXBvcnQgIlJlbmRl
clZpZXcuaCIKICNpbXBvcnQgIlJlbmRlcldpZGdldC5oIgpAQCAtMTY4Miw2ICsxNjg0LDIxIEBA
CiAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnNl
bGVjdGlvbi52aXNpYmxlU3RhcnQoKSBlbmRQb3NpdGlvbjpzZWxlY3Rpb24udmlzaWJsZUVuZCgp
XTsKIH0KIAorLSAoaWQpc2hhZG93UGx1Z2luUGFyZW50Cit7CisgICAgaWYgKCFtX29iamVjdCB8
fCAhbV9vYmplY3QtPmhhc0F0dHJpYnV0ZSh4X2FwcGxlX3BkZl9hbm5vdGF0aW9uQXR0cikpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgaWYgKCFtX29iamVjdC0+ZG9jdW1lbnQoKS0+
aXNQbHVnaW5Eb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAKKyAgICBX
aWRnZXQqIHBsdWdpbldpZGdldCA9IHN0YXRpY19jYXN0PFBsdWdpbkRvY3VtZW50Kj4obV9vYmpl
Y3QtPmRvY3VtZW50KCkpLT5wbHVnaW5XaWRnZXQoKTsKKyAgICBpZiAoIXBsdWdpbldpZGdldCB8
fCAhcGx1Z2luV2lkZ2V0LT5pc1BsdWdpblZpZXdCYXNlKCkpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlld0Jhc2UqPihwbHVnaW5XaWRnZXQp
LT5hY2Nlc3NpYmlsaXR5U2hhZG93UGx1Z2luUGFyZW50Rm9yRWxlbWVudChtX29iamVjdC0+ZWxl
bWVudCgpKTsKK30KKwogLSAoQ0dQb2ludCljb252ZXJ0UG9pbnRUb1NjcmVlblNwYWNlOihGbG9h
dFBvaW50ICYpcG9pbnQKIHsKICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fb2JqZWN0LT5k
b2N1bWVudEZyYW1lVmlldygpOwpAQCAtMzA4Myw2ICszMTAwLDEwIEBACiAgICAgICAgIHJldHVy
biBjb252ZXJ0U3RyaW5nc1RvTlNBcnJheShjbGFzc0xpc3QpOwogICAgIH0KICAgICAKKyAgICAv
LyBUaGlzIGFsbG93cyB1cyB0byBjb25uZWN0IHRvIGEgcGx1Z2luIHRoYXQgY3JlYXRlcyBhIHNo
YWRvdyBub2RlIGZvciBlZGl0aW5nIChsaWtlIFBERnMpLgorICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6QCJfQVhTaGFkb3dQbHVnaW5QYXJlbnQiXSkKKyAgICAgICAgcmV0
dXJuIFtzZWxmIHNoYWRvd1BsdWdpblBhcmVudF07CisgICAgCiAgICAgLy8gdGhpcyBpcyB1c2Vk
IG9ubHkgYnkgRHVtcFJlbmRlclRyZWUgZm9yIHRlc3RpbmcKICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhDbGlja1BvaW50Il0pCiAgICAgICAgIHJldHVybiBbTlNW
YWx1ZSB2YWx1ZVdpdGhQb2ludDptX29iamVjdC0+Y2xpY2tQb2ludCgpXTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCShyZXZpc2lvbiAyMTUwODQpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgkod29ya2luZyBjb3B5
KQpAQCAtMzkyLDMgKzM5Miw1IEBACiB4LWFwcGxlLWRhdGEtZGV0ZWN0b3JzCiB4LWFwcGxlLWRh
dGEtZGV0ZWN0b3JzLXR5cGUKIHgtYXBwbGUtZGF0YS1kZXRlY3RvcnMtcmVzdWx0CisKK3gtYXBw
bGUtcGRmLWFubm90YXRpb24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmll
d0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXdC
YXNlLmgJKHJldmlzaW9uIDIxNTA4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
Vmlld0Jhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsMTAgQEAKICNpbmNsdWRlICJX
aWRnZXQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorI2lmIFBMQVRGT1JN
KENPQ09BKQordHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3QqIGlkOworI2VuZGlmCisKIG5hbWVz
cGFjZSBKU0MgewogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFzcyBKU0dsb2JhbE9iamVj
dDsKQEAgLTgzLDYgKzg3LDEwIEBACiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHdpbGxEZXRhdGNo
UmVuZGVyZXIoKSB7IH0KIAorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHZpcnR1YWwgaWQgYWNj
ZXNzaWJpbGl0eVNoYWRvd1BsdWdpblBhcmVudEZvckVsZW1lbnQoRWxlbWVudCopIGNvbnN0IHsg
cmV0dXJuIG51bGxwdHI7IH0KKyNlbmRpZgorICAgIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0
IFBsdWdpblZpZXdCYXNlKFBsYXRmb3JtV2lkZ2V0IHdpZGdldCA9IDApIDogV2lkZ2V0KHdpZGdl
dCkgeyB9CiB9OwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMjE1MDg0KQorKysgU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTctMDQt
MDYgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KKworICAgICAgICBBWDog
UERGIHBsdWdpbiBuZWVkcyB0byBzdXBwb3J0IFBERi1ET00gTW9kZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNTg5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJvdmlkZSBhY2Nlc3MgdG8gRE9NIG9i
amVjdHMgd2l0aCBQREYgZG9jdW1lbnQuIFRoaXMgbWVhbjoKKyAgICAgICAgICAgMSkgU3VwcG9y
dCBhIGRpZmZlcmVudCBzZXQgb2YgYXR0cmlidXRlcyBmb3IgV0tQREZQbHVnaW5BY2Nlc3NpYmls
aXR5T2JqZWN0LgorICAgICAgICAgICAgICAgIFdLUERGUGx1Z2luQWNjZXNzaWJpbGl0eU9iamVj
dCBpcyBub3cgYSBncm91cCBpbnN0ZWFkIG9mIGZvcndhcmRpbmcgYXR0cmlidXRlIGNhbGxzIHRv
IHRoZSBwZGYgbGF5ZXIuCisgICAgICAgICAgIDIpIENvbm5lY3QgdGhlIGZvY3VzZWQgVUkgZWxl
bWVudCB0byB0aGUgYWN0aXZlIGFubm90YXRpb24gaWYgcG9zc2libGUuCisgICAgICAgICAgIDMp
IE1hcmsgdGhlIFBERiBhc3NvY2lhdGVkIG5vZGVzIHdpdGggYW4gYXR0cmlidXRlIHNvIHRoZXkg
Y2FuIGJlIGlkZW50aWZpZWQgbGF0ZXIgc28gdGhlaXIgY29ycmVjdCBwYXJlbnQgY2FuIGJlIGZv
dW5kLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZMYXllckNvbnRyb2xs
ZXJTUEkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tOgorICAgICAgICAo
LVtXS1BERlBsdWdpbkFjY2Vzc2liaWxpdHlPYmplY3QgcGRmTGF5ZXJDb250cm9sbGVyXSk6Cisg
ICAgICAgICgtW1dLUERGUGx1Z2luQWNjZXNzaWJpbGl0eU9iamVjdCBzZXRQZGZMYXllckNvbnRy
b2xsZXI6XSk6CisgICAgICAgICgtW1dLUERGUGx1Z2luQWNjZXNzaWJpbGl0eU9iamVjdCBjb252
ZXJ0UmVjdFRvU2NyZWVuU3BhY2U6XSk6CisgICAgICAgICgtW1dLUERGUGx1Z2luQWNjZXNzaWJp
bGl0eU9iamVjdCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6XSk6CisgICAgICAgICgtW1dL
UERGUGx1Z2luQWNjZXNzaWJpbGl0eU9iamVjdCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNd
KToKKyAgICAgICAgKC1bV0tQREZQbHVnaW5BY2Nlc3NpYmlsaXR5T2JqZWN0IGFjY2Vzc2liaWxp
dHlBY3Rpb25OYW1lc10pOgorICAgICAgICAoLVtXS1BERlBsdWdpbkFjY2Vzc2liaWxpdHlPYmpl
Y3QgYWNjZXNzaWJpbGl0eVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lc10pOgorICAgICAgICAo
LVtXS1BERlBsdWdpbkFjY2Vzc2liaWxpdHlPYmplY3QgYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVs
ZW1lbnRdKToKKyAgICAgICAgKC1bV0tQREZQbHVnaW5BY2Nlc3NpYmlsaXR5T2JqZWN0IGFjY2Vz
c2liaWxpdHlBc3NvY2lhdGVkQ29udHJvbEZvckFubm90YXRpb246XSk6CisgICAgICAgICgtW1dL
UERGUGx1Z2luQWNjZXNzaWJpbGl0eU9iamVjdCBhY2Nlc3NpYmlsaXR5SGl0VGVzdDpdKToKKyAg
ICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjb252ZXJ0RnJvbVJvb3RWaWV3VG9QREZWaWV3KToK
KyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjb252ZXJ0RnJvbVBERlZpZXdUb1NjcmVlbik6
CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6cGx1Z2luSGFuZGxlc0NvbnRlbnRPZmZzZXRG
b3JBY2Nlc3NpYmlsaXR5SGl0VGVzdCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6YXhP
YmplY3RDYWNoZSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6YWNjZXNzaWJpbGl0eVNo
YWRvd1BsdWdpblBhcmVudEZvckVsZW1lbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lu
cy9QREYvUERGUGx1Z2luQW5ub3RhdGlvbi5tbToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2lu
QW5ub3RhdGlvbjo6YXR0YWNoKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Lmg6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpbjo6YWNjZXNzaWJpbGl0eVNoYWRvd1BsdWdpblBh
cmVudEZvckVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW46OnBsdWdpbkhhbmRsZXND
b250ZW50T2Zmc2V0Rm9yQWNjZXNzaWJpbGl0eUhpdFRlc3QpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6
YWNjZXNzaWJpbGl0eVNoYWRvd1BsdWdpblBhcmVudEZvckVsZW1lbnQpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNz
aWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMubW06CisgICAgICAgICgtW1dLQWNjZXNzaWJpbGl0eVdl
YlBhZ2VPYmplY3QgYWNjZXNzaWJpbGl0eUhpdFRlc3Q6XSk6CisKIDIwMTctMDQtMDYgIEFsZXgg
Q2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgV0tD
b250ZW50RXh0ZW5zaW9uU3RvcmUuaCBhbmQgV0tDb250ZW50RXh0ZW5zaW9uLmggdG8gcHVibGlj
IFdlYktpdC5oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BE
RkxheWVyQ29udHJvbGxlclNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmgJKHJldmlzaW9uIDIxNTA4
NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250
cm9sbGVyU1BJLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw5ICsxNTgsMjAgQEAKIC0gKE5TVmFs
dWUgKilhY2Nlc3NpYmlsaXR5UmFuZ2VGb3JMaW5lQXR0cmlidXRlRm9yUGFyYW1ldGVyOihpZClw
YXJhbWV0ZXI7CiAtIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlTdHJpbmdGb3JSYW5nZUF0dHJp
YnV0ZUZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGVyOwogLSAoTlNWYWx1ZSAqKWFjY2Vzc2liaWxp
dHlCb3VuZHNGb3JSYW5nZUF0dHJpYnV0ZUZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGVyOworI2lm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAwCistIChOU0FycmF5ICop
YWNjZXNzaWJpbGl0eUNoaWxkcmVuOworLSAodm9pZClzZXRBY2Nlc3NpYmlsaXR5UGFyZW50Oihp
ZClwYXJlbnQ7CistIChpZClhY2Nlc3NpYmlsaXR5RWxlbWVudEZvckFubm90YXRpb246KFBERkFu
bm90YXRpb24gKilhbm5vdGF0aW9uOworI2VuZGlmCiAKIEBlbmQKIAorI2lmIF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAwCitAaW50ZXJmYWNlIFBERkFubm90YXRpb24g
KEFjY2Vzc2liaWxpdHlQcml2YXRlKQorLSAoaWQpYWNjZXNzaWJpbGl0eU5vZGU7CitAZW5kCiAj
ZW5kaWYKIAorI2VuZGlmCisKICNlbmRpZiAvLyBQREZMYXllckNvbnRyb2xsZXJTUElfaApJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdp
bi5oCShyZXZpc2lvbiAyMTUwODQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvUERGL1BERlBsdWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5j
bHVkZSAiV2ViRXZlbnQuaCIKICNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0RGF0YS5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQWZmaW5lVHJhbnNmb3JtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9BWE9i
amVjdENhY2hlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GaW5kT3B0aW9ucy5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvU2Nyb2xsYWJsZUFyZWEuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBA
IC01Nyw2ICs1OCw3IEBACiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEFYT2JqZWN0
Q2FjaGU7CiBjbGFzcyBFbGVtZW50Owogc3RydWN0IFBsdWdpbkluZm87CiB9CkBAIC0xMDMsNiAr
MTA1LDcgQEAKICAgICB2b2lkIGF0dGVtcHRUb1VubG9ja1BERihjb25zdCBTdHJpbmcmIHBhc3N3
b3JkKTsKIAogICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0RnJvbVBERlZpZXdUb1NjcmVl
bihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBjb25zdDsKKyAgICBXZWJDb3JlOjpJbnRQb2lu
dCBjb252ZXJ0RnJvbVJvb3RWaWV3VG9QREZWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jikg
Y29uc3Q7CiAgICAgV2ViQ29yZTo6SW50UmVjdCBib3VuZHNPblNjcmVlbigpIGNvbnN0OwogICAg
IAogICAgIGJvb2wgc2hvd0NvbnRleHRNZW51QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYpOwpAQCAtMTE0LDYgKzExNyw5IEBACiAKICAgICBib29sIHNob3VsZFBsYWNlQmxvY2tEaXJl
Y3Rpb25TY3JvbGxiYXJPbkxlZnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQog
CisgICAgUERGUGx1Z2luQW5ub3RhdGlvbiogYWN0aXZlQW5ub3RhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fYWN0aXZlQW5ub3RhdGlvbi5nZXQoKTsgfQorICAgIFdlYkNvcmU6OkFYT2JqZWN0Q2Fj
aGUqIGF4T2JqZWN0Q2FjaGUoKSBjb25zdDsKKyAgICAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQg
UERGUGx1Z2luKFdlYkZyYW1lKik7CiAKQEAgLTE2OCwxMSArMTc0LDEzIEBACiAgICAgYm9vbCBo
YW5kbGVTY3JvbGwoV2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uLCBXZWJDb3JlOjpTY3JvbGxHcmFu
dWxhcml0eSkgb3ZlcnJpZGU7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gbGl2
ZVJlc291cmNlRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgd2lsbERldGF0Y2hSZW5k
ZXJlcigpIG92ZXJyaWRlOwotCisgICAgYm9vbCBwbHVnaW5IYW5kbGVzQ29udGVudE9mZnNldEZv
ckFjY2Vzc2liaWxpdHlIaXRUZXN0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCiAgICAgYm9vbCBp
c0JlaW5nQXN5bmNocm9ub3VzbHlJbml0aWFsaXplZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CiAKICAgICBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IHBkZkRvY3VtZW50Rm9yUHJp
bnRpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3BkZkRvY3VtZW50OyB9CiAgICAgTlNP
YmplY3QgKmFjY2Vzc2liaWxpdHlPYmplY3QoKSBjb25zdCBvdmVycmlkZTsKKyAgICBpZCBhY2Nl
c3NpYmlsaXR5U2hhZG93UGx1Z2luUGFyZW50Rm9yRWxlbWVudChXZWJDb3JlOjpFbGVtZW50Kikg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICB1bnNpZ25lZCBjb3VudEZpbmRNYXRjaGVzKGNvbnN0IFN0
cmluZyYgdGFyZ2V0LCBXZWJDb3JlOjpGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3Vu
dCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBX
ZWJDb3JlOjpGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkgb3ZlcnJpZGU7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBs
dWdpbi5tbQkocmV2aXNpb24gMjE1MDg0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9QREZQbHVnaW4ubW0JKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAK
ICNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29y
ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9BcmNoaXZlUmVzb3VyY2UuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvQVhPYmplY3RDYWNoZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9DaHJvbWUuaD4KICNpbXBvcnQg
PFdlYkNvcmUvQ3Vyc29yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RpY3Rpb25hcnlMb29rdXAuaD4K
QEAgLTE0NiwxNSArMTQ3LDUxIEBACiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKKy0gKFBERkxheWVy
Q29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlcgoreworICAgIHJldHVybiBfcGRmTGF5ZXJD
b250cm9sbGVyOworfQorCistICh2b2lkKXNldFBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJD
b250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyCit7CisgICAgX3BkZkxheWVyQ29udHJvbGxl
ciA9IHBkZkxheWVyQ29udHJvbGxlcjsKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDEwMTMwMAorICAgIFtfcGRmTGF5ZXJDb250cm9sbGVyIHNldEFjY2Vzc2liaWxpdHlQ
YXJlbnQ6c2VsZl07CisjZW5kaWYKK30KKwogLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNJZ25vcmVk
CiB7CiAgICAgcmV0dXJuIE5POwogfQogCisvLyBUaGlzIGlzIGNhbGxlZCBieSBQREZBY2Nlc3Np
YmlsaXR5Tm9kZXMgZnJvbSBpbnNpZGUgUERGS2l0IHRvIGdldCBmaW5hbCBib3VuZHMuCistIChO
U1JlY3QpY29udmVydFJlY3RUb1NjcmVlblNwYWNlOihOU1JlY3QpcmVjdAoreworICAgIHJldHVy
biBfcGRmUGx1Z2luLT5jb252ZXJ0RnJvbVBERlZpZXdUb1NjcmVlbihyZWN0KTsKK30KKwogLSAo
aWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmluZyAqKWF0dHJpYnV0ZQogewog
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlQYXJlbnRB
dHRyaWJ1dGVdKQogICAgICAgICByZXR1cm4gX3BhcmVudDsKKyAgICBpZiAoW2F0dHJpYnV0ZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VG9wTGV2ZWxVSUVsZW1lbnRBdHRyaWJ1dGVd
KQorICAgICAgICByZXR1cm4gW19wYXJlbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5T
QWNjZXNzaWJpbGl0eVRvcExldmVsVUlFbGVtZW50QXR0cmlidXRlXTsKKyAgICBpZiAoW2F0dHJp
YnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5V2luZG93QXR0cmlidXRlXSkKKyAg
ICAgICAgcmV0dXJuIFtfcGFyZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vz
c2liaWxpdHlXaW5kb3dBdHRyaWJ1dGVdOworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlTaXplQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtOU1Zh
bHVlIHZhbHVlV2l0aFNpemU6X3BkZlBsdWdpbi0+Ym91bmRzT25TY3JlZW4oKS5zaXplKCldOwor
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlFbmFibGVk
QXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtfcGFyZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlFbmFibGVkQXR0cmlidXRlXTsKKyAgICBpZiAoW2F0dHJp
YnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGVdKQor
ICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUG9pbnQ6X3BkZlBsdWdpbi0+Ym91bmRz
T25TY3JlZW4oKS5sb2NhdGlvbigpXTsKKworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTAxMzAwCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIEBbIF9wZGZMYXll
ckNvbnRyb2xsZXIgXTsKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5Um9sZUF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlH
cm91cFJvbGU7CisjZWxzZQogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0Fj
Y2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0ZV0pCiAgICAgICAgIHJldHVybiBbX3BkZkxheWVyQ29u
dHJvbGxlciBhY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdOwogICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRBdHRyaWJ1dGVdKQpA
QCAtMTY1LDIyICsyMDIsMTMgQEAKICAgICAgICAgcmV0dXJuIFtfcGRmTGF5ZXJDb250cm9sbGVy
IGFjY2Vzc2liaWxpdHlOdW1iZXJPZkNoYXJhY3RlcnNBdHRyaWJ1dGVdOwogICAgIGlmIChbYXR0
cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWaXNpYmxlQ2hhcmFjdGVyUmFu
Z2VBdHRyaWJ1dGVdKQogICAgICAgICByZXR1cm4gW19wZGZMYXllckNvbnRyb2xsZXIgYWNjZXNz
aWJpbGl0eVZpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJpYnV0ZV07Ci0gICAgaWYgKFthdHRyaWJ1
dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRvcExldmVsVUlFbGVtZW50QXR0cmli
dXRlXSkKLSAgICAgICAgcmV0dXJuIFtfcGFyZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1
ZTpOU0FjY2Vzc2liaWxpdHlUb3BMZXZlbFVJRWxlbWVudEF0dHJpYnV0ZV07CiAgICAgaWYgKFth
dHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJvbGVBdHRyaWJ1dGVdKQog
ICAgICAgICByZXR1cm4gW19wZGZMYXllckNvbnRyb2xsZXIgYWNjZXNzaWJpbGl0eVJvbGVBdHRy
aWJ1dGVdOwogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlSb2xlRGVzY3JpcHRpb25BdHRyaWJ1dGVdKQogICAgICAgICByZXR1cm4gW19wZGZMYXllckNv
bnRyb2xsZXIgYWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbkF0dHJpYnV0ZV07Ci0gICAgaWYg
KFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVdpbmRvd0F0dHJpYnV0
ZV0pCi0gICAgICAgIHJldHVybiBbX3BhcmVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6
TlNBY2Nlc3NpYmlsaXR5V2luZG93QXR0cmlidXRlXTsKLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2l6ZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVy
biBbTlNWYWx1ZSB2YWx1ZVdpdGhTaXplOl9wZGZQbHVnaW4tPmJvdW5kc09uU2NyZWVuKCkuc2l6
ZSgpXTsKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
Rm9jdXNlZEF0dHJpYnV0ZV0pCiAgICAgICAgIHJldHVybiBbX3BhcmVudCBhY2Nlc3NpYmlsaXR5
QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5Rm9jdXNlZEF0dHJpYnV0ZV07Ci0gICAgaWYg
KFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUVuYWJsZWRBdHRyaWJ1
dGVdKQotICAgICAgICByZXR1cm4gW19wYXJlbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVl
Ok5TQWNjZXNzaWJpbGl0eUVuYWJsZWRBdHRyaWJ1dGVdOwotICAgIGlmIChbYXR0cmlidXRlIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlQb3NpdGlvbkF0dHJpYnV0ZV0pCi0gICAgICAg
IHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhQb2ludDpfcGRmUGx1Z2luLT5ib3VuZHNPblNjcmVl
bigpLmxvY2F0aW9uKCldOworI2VuZGlmCiAKICAgICByZXR1cm4gMDsKIH0KQEAgLTIxMywyMCAr
MjQxLDI3IEBACiAgICAgc3RhdGljIE5TQXJyYXkgKmF0dHJpYnV0ZU5hbWVzID0gMDsKIAogICAg
IGlmICghYXR0cmlidXRlTmFtZXMpIHsKLSAgICAgICAgYXR0cmlidXRlTmFtZXMgPSBAW05TQWNj
ZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlLAotICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U2Vs
ZWN0ZWRUZXh0QXR0cmlidXRlLAotICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRU
ZXh0UmFuZ2VBdHRyaWJ1dGUsCi0gICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlOdW1iZXJPZkNo
YXJhY3RlcnNBdHRyaWJ1dGUsCi0gICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlWaXNpYmxlQ2hh
cmFjdGVyUmFuZ2VBdHRyaWJ1dGUsCisgICAgICAgIGF0dHJpYnV0ZU5hbWVzID0gQFsKICAgICAg
ICAgICAgIE5TQWNjZXNzaWJpbGl0eVBhcmVudEF0dHJpYnV0ZSwKLSAgICAgICAgICAgIE5TQWNj
ZXNzaWJpbGl0eVJvbGVBdHRyaWJ1dGUsCiAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlXaW5k
b3dBdHRyaWJ1dGUsCiAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlUb3BMZXZlbFVJRWxlbWVu
dEF0dHJpYnV0ZSwKICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbkF0
dHJpYnV0ZSwKICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVNpemVBdHRyaWJ1dGUsCisgICAg
ICAgICAgICBOU0FjY2Vzc2liaWxpdHlFbmFibGVkQXR0cmlidXRlLAorICAgICAgICAgICAgTlNB
Y2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGUsCiAgICAgICAgICAgICBOU0FjY2Vzc2liaWxp
dHlGb2N1c2VkQXR0cmlidXRlLAotICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5RW5hYmxlZEF0
dHJpYnV0ZSwKLSAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVBvc2l0aW9uQXR0cmlidXRlXTsK
KyAgICAgICAgICAgIC8vIFBERkxheWVyQ29udHJvbGxlciBoYXMgaXRzIG93biBhY2Nlc3NpYmls
aXR5Q2hpbGRyZW4uCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEz
MDAKKyAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlCisjZWxzZQor
ICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5Um9sZUF0dHJpYnV0ZSwKKyAgICAgICAgICAgIE5T
QWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlLAorICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5
U2VsZWN0ZWRUZXh0QXR0cmlidXRlLAorICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U2VsZWN0
ZWRUZXh0UmFuZ2VBdHRyaWJ1dGUsCisgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlOdW1iZXJP
ZkNoYXJhY3RlcnNBdHRyaWJ1dGUsCisgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlWaXNpYmxl
Q2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGUKKyNlbmRpZgorICAgICAgICAgICAgXTsKICAgICAgICAg
W2F0dHJpYnV0ZU5hbWVzIHJldGFpbl07CiAgICAgfQogCkBAIC0yMzUsNiArMjcwLDkgQEAKIAog
LSAoTlNBcnJheSAqKWFjY2Vzc2liaWxpdHlBY3Rpb25OYW1lcwogeworI2lmIF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAwCisgICAgcmV0dXJuIG5pbDsKKyNlbHNlCiAg
ICAgc3RhdGljIE5TQXJyYXkgKmFjdGlvbk5hbWVzID0gMDsKICAgICAKICAgICBpZiAoIWFjdGlv
bk5hbWVzKQpAQCAtMjQxLDYgKzI3OSw3IEBACiAgICAgICAgIGFjdGlvbk5hbWVzID0gW1tOU0Fy
cmF5IGFycmF5V2l0aE9iamVjdDpOU0FjY2Vzc2liaWxpdHlTaG93TWVudUFjdGlvbl0gcmV0YWlu
XTsKICAgICAKICAgICByZXR1cm4gYWN0aW9uTmFtZXM7CisjZW5kaWYKIH0KIAogLSAodm9pZClh
Y2Nlc3NpYmlsaXR5UGVyZm9ybUFjdGlvbjooTlNTdHJpbmcgKilhY3Rpb24KQEAgLTI2MSwxNyAr
MzAwLDU5IEBACiAKIC0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5UGFyYW1ldGVyaXplZEF0dHJp
YnV0ZU5hbWVzCiB7CisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEz
MDAKKyAgICByZXR1cm4gbmlsOworI2Vsc2UKICAgICByZXR1cm4gW19wZGZMYXllckNvbnRyb2xs
ZXIgYWNjZXNzaWJpbGl0eVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lc107CisjZW5kaWYKIH0K
IAogLSAoaWQpYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnQKIHsKKyNpZiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTMwMAorICAgIGlmIChXZWJLaXQ6OlBERlBsdWdp
bkFubm90YXRpb24qIGFjdGl2ZUFubm90YXRpb24gPSBfcGRmUGx1Z2luLT5hY3RpdmVBbm5vdGF0
aW9uKCkpIHsKKyAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGV4aXN0aW5nQ2FjaGUgPSBfcGRm
UGx1Z2luLT5heE9iamVjdENhY2hlKCkpIHsKKyAgICAgICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBvYmplY3QgPSBleGlzdGluZ0NhY2hlLT5nZXRPckNyZWF0ZShhY3RpdmVBbm5vdGF0
aW9uLT5lbGVtZW50KCkpKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICAg
ICAgICAgICAgICAgIHJldHVybiBbb2JqZWN0LT53cmFwcGVyKCkgYWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZVZhbHVlOkAiX0FYU2hhZG93UGx1Z2luUGFyZW50Il07CisjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgcG9wCisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG5pbDsKKyNlbHNlCiAgICAg
cmV0dXJuIHNlbGY7CisjZW5kaWYKIH0KIAorI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTAxMzAwCistIChpZClhY2Nlc3NpYmlsaXR5QXNzb2NpYXRlZENvbnRyb2xGb3JB
bm5vdGF0aW9uOihQREZBbm5vdGF0aW9uICopYW5ub3RhdGlvbgoreworICAgIC8vIE9ubHkgYWN0
aXZlIGFubm90YXRpb25zIHNlZW0gdG8gaGF2ZSB0aGVpciBhc3NvY2lhdGVkIGNvbnRyb2xzIGF2
YWlsYWJsZS4KKyAgICBXZWJLaXQ6OlBERlBsdWdpbkFubm90YXRpb24qIGFjdGl2ZUFubm90YXRp
b24gPSBfcGRmUGx1Z2luLT5hY3RpdmVBbm5vdGF0aW9uKCk7CisgICAgaWYgKCFhY3RpdmVBbm5v
dGF0aW9uIHx8ICFbYWN0aXZlQW5ub3RhdGlvbi0+YW5ub3RhdGlvbigpIGlzRXF1YWw6YW5ub3Rh
dGlvbl0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgQVhPYmplY3RDYWNoZSogY2Fj
aGUgPSBfcGRmUGx1Z2luLT5heE9iamVjdENhY2hlKCk7CisgICAgaWYgKCFjYWNoZSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBj
YWNoZS0+Z2V0T3JDcmVhdGUoYWN0aXZlQW5ub3RhdGlvbi0+ZWxlbWVudCgpKTsKKyAgICBpZiAo
IW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBvYmplY3QtPndyYXBw
ZXIoKTsKK30KKyNlbmRpZgorCiAtIChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooTlNQb2ludClw
b2ludAogeworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAwCisg
ICAgcG9pbnQgPSBfcGRmUGx1Z2luLT5jb252ZXJ0RnJvbVJvb3RWaWV3VG9QREZWaWV3KEludFBv
aW50KHBvaW50KSk7CisgICAgcmV0dXJuIFtfcGRmTGF5ZXJDb250cm9sbGVyIGFjY2Vzc2liaWxp
dHlIaXRUZXN0OnBvaW50XTsKKyNlbHNlCiAgICAgcmV0dXJuIHNlbGY7CisjZW5kaWYKIH0KIAog
QGVuZApAQCAtMTIwNiw2ICsxMjg3LDEyIEBACiAgICAgSW50UG9pbnQgcG9pbnRJblBsdWdpbkNv
b3JkaW5hdGVzKHBvaW50LngoKSwgc2l6ZSgpLmhlaWdodCgpIC0gcG9pbnQueSgpKTsKICAgICBy
ZXR1cm4gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihBZmZp
bmVUcmFuc2Zvcm0oKSkubWFwUG9pbnQocG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzKTsKIH0KKyAg
ICAKK0ludFBvaW50IFBERlBsdWdpbjo6Y29udmVydEZyb21Sb290Vmlld1RvUERGVmlldyhjb25z
dCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgcG9pbnRJblBsdWdpbkNv
b3JkaW5hdGVzID0gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLm1hcFBvaW50KHBvaW50KTsK
KyAgICByZXR1cm4gSW50UG9pbnQocG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzLngoKSwgc2l6ZSgp
LmhlaWdodCgpIC0gcG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzLnkoKSk7Cit9CiAKIEZsb2F0UmVj
dCBQREZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1RvU2NyZWVuKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkgY29uc3QKIHsKQEAgLTEyMTQsMTAgKzEzMDEsOSBAQAogICAgIGlmICghZnJhbWVWaWV3
KQogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiAKLSAgICBGbG9hdFBvaW50IG9yaWdpbklu
UGx1Z2luQ29vcmRpbmF0ZXMocmVjdC54KCksIHNpemUoKS5oZWlnaHQoKSAtIHJlY3QueSgpIC0g
cmVjdC5oZWlnaHQoKSk7Ci0gICAgRmxvYXRSZWN0IHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMg
PSBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRy
YW5zZm9ybSgpKS5tYXBSZWN0KEZsb2F0UmVjdChvcmlnaW5JblBsdWdpbkNvb3JkaW5hdGVzLCBy
ZWN0LnNpemUoKSkpOwotCi0gICAgcmV0dXJuIGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihl
bmNsb3NpbmdJbnRSZWN0KHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMpKTsKKyAgICBGbG9hdFJl
Y3QgdXBkYXRlZFJlY3QgPSByZWN0OworICAgIHVwZGF0ZWRSZWN0LnNldExvY2F0aW9uKGNvbnZl
cnRGcm9tUERGVmlld1RvUm9vdFZpZXcoSW50UG9pbnQodXBkYXRlZFJlY3QubG9jYXRpb24oKSkp
KTsKKyAgICByZXR1cm4gd2ViRnJhbWUoKS0+Y29yZUZyYW1lKCktPnBhZ2UoKS0+Y2hyb21lKCku
cm9vdFZpZXdUb1NjcmVlbihlbmNsb3NpbmdJbnRSZWN0KHVwZGF0ZWRSZWN0KSk7CiB9CiAKIElu
dFJlY3QgUERGUGx1Z2luOjpib3VuZHNPblNjcmVlbigpIGNvbnN0CkBAIC0xNjc0LDYgKzE3NjAs
MTcgQEAKICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKHBkZkRhdGEpOwogfQog
Citib29sIFBERlBsdWdpbjo6cGx1Z2luSGFuZGxlc0NvbnRlbnRPZmZzZXRGb3JBY2Nlc3NpYmls
aXR5SGl0VGVzdCgpIGNvbnN0Cit7CisgICAgLy8gUERGIHBsdWdpbiBub3cgaGFuZGxlcyBzY3Jv
bGwgdmlldyBhbmQgdG9wIGNvbnRlbnQgaW5zZXQgd2hlbiBjb252ZXJ0IGhpdCB0ZXN0IHJlcXVl
c3RzLgorI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAwCisgICAg
cmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisgICAg
CiB2b2lkIFBERlBsdWdpbjo6c2F2ZVRvUERGKCkKIHsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHByb2JhYmx5IG5vdGlmeSB0aGUgdXNlciB0aGF0IHRoZXkgY2FuJ3Qgc2F2ZSBiZWZvcmUgdGhl
IGRvY3VtZW50IGlzIGZpbmlzaGVkIGxvYWRpbmcuCkBAIC0yMDE0LDYgKzIxMTEsMTEgQEAKIAog
ICAgIHJldHVybiBOU1JlY3RGcm9tQ0dSZWN0KG5ld1JlY3QpOwogfQorICAgIAorV2ViQ29yZTo6
QVhPYmplY3RDYWNoZSogUERGUGx1Z2luOjpheE9iamVjdENhY2hlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gd2ViRnJhbWUoKS0+Y29yZUZyYW1lKCktPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUo
KTsKK30KIAogV2ViQ29yZTo6RmxvYXRSZWN0IFBERlBsdWdpbjo6cmVjdEZvclNlbGVjdGlvbklu
Um9vdFZpZXcoUERGU2VsZWN0aW9uICpzZWxlY3Rpb24pIGNvbnN0CiB7CkBAIC0yMTAzLDYgKzIy
MDUsMjEgQEAKICAgICByZXR1cm4gcmF3RGF0YSgpOwogfQogCitpZCBQREZQbHVnaW46OmFjY2Vz
c2liaWxpdHlTaGFkb3dQbHVnaW5QYXJlbnRGb3JFbGVtZW50KFdlYkNvcmU6OkVsZW1lbnQqIGVs
ZW1lbnQpIGNvbnN0Cit7CisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MDEzMDAKKyAgICBpZiAoIW1fYWN0aXZlQW5ub3RhdGlvbikKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICAKKyAgICBpZiAobV9hY3RpdmVBbm5vdGF0aW9uLT5lbGVtZW50KCkgIT0gZWxlbWVudCkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICByZXR1cm4gW21fYWN0aXZlQW5ub3RhdGlv
bi0+YW5ub3RhdGlvbigpIGFjY2Vzc2liaWxpdHlOb2RlXTsKKyNlbHNlCisgICAgcmV0dXJuIG5p
bDsKKyNlbmRpZgorfQorICAgIAogTlNPYmplY3QgKlBERlBsdWdpbjo6YWNjZXNzaWJpbGl0eU9i
amVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fYWNjZXNzaWJpbGl0eU9iamVjdC5nZXQoKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luQW5u
b3RhdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvUERGL1BERlBsdWdpbkFubm90YXRpb24ubW0JKHJldmlzaW9uIDIxNTA4NCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luQW5ub3RhdGlvbi5tbQko
d29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQAogICAgIG1fZWxlbWVudCA9IGNyZWF0ZUFu
bm90YXRpb25FbGVtZW50KCk7CiAKICAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oY2xhc3NBdHRyLCBBdG9taWNTdHJpbmcoImFubm90YXRpb24iLCBBdG9t
aWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CisgICAgbV9lbGVtZW50LT5zZXRBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHhfYXBwbGVfcGRmX2Fubm90YXRpb25BdHRyLCBB
dG9taWNTdHJpbmcoInRydWUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7
CiAgICAgbV9lbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVu
dCwgKm1fZXZlbnRMaXN0ZW5lciwgZmFsc2UpOwogICAgIG1fZWxlbWVudC0+YWRkRXZlbnRMaXN0
ZW5lcihldmVudE5hbWVzKCkuYmx1ckV2ZW50LCAqbV9ldmVudExpc3RlbmVyLCBmYWxzZSk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmgJKHJldmlz
aW9uIDIxNTA4NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4u
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAjaW5jbHVkZSAiTGF5ZXJIb3N0aW5nQ29udGV4dC5oIgordHlwZWRlZiBzdHJ1Y3Qgb2JqY19v
YmplY3QqIGlkOwogCiBPQkpDX0NMQVNTIE5TRGljdGlvbmFyeTsKIE9CSkNfQ0xBU1MgTlNPYmpl
Y3Q7CkBAIC0yNzQsNiArMjc1LDcgQEAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2aXJ0dWFs
IFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnRGb3JQcmludGluZygpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIE5TT2JqZWN0ICphY2Nlc3NpYmlsaXR5T2JqZWN0KCkg
Y29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaWQgYWNjZXNzaWJpbGl0eVNoYWRvd1Bs
dWdpblBhcmVudEZvckVsZW1lbnQoV2ViQ29yZTo6RWxlbWVudCopIGNvbnN0IHsgcmV0dXJuIG51
bGxwdHI7IH0KICNlbmRpZgogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBjb3VudEZpbmRNYXRjaGVz
KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBXZWJDb3JlOjpGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4
TWF0Y2hDb3VudCkgPSAwOwpAQCAtMzAwLDYgKzMwMiw4IEBACiAKICAgICB2aXJ0dWFsIHZvaWQg
d2lsbERldGF0Y2hSZW5kZXJlcigpIHsgfQogCisgICAgdmlydHVhbCBib29sIHBsdWdpbkhhbmRs
ZXNDb250ZW50T2Zmc2V0Rm9yQWNjZXNzaWJpbGl0eUhpdFRlc3QoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgUGx1Z2luKFBsdWdpblR5cGUpOwogCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCShy
ZXZpc2lvbiAyMTUwODQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1
Z2luVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1NSw2ICs1NTUsMTMgQEAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KICAgICAKK2lkIFBsdWdpblZpZXc6OmFjY2Vzc2liaWxpdHlTaGFkb3dQbHVn
aW5QYXJlbnRGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgaWYgKCFt
X3BsdWdpbikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gbV9wbHVnaW4tPmFjY2Vz
c2liaWxpdHlTaGFkb3dQbHVnaW5QYXJlbnRGb3JFbGVtZW50KGVsZW1lbnQpOworfQorICAgIAog
TlNPYmplY3QgKlBsdWdpblZpZXc6OmFjY2Vzc2liaWxpdHlPYmplY3QoKSBjb25zdAogewogICAg
IGlmICghbV9pc0luaXRpYWxpemVkIHx8ICFtX3BsdWdpbikKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaAkocmV2aXNpb24gMjE1MDg0KQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODYsNiArODYsNyBAQAogICAgIGJvb2wgc2VuZENvbXBsZXhUZXh0SW5wdXQo
dWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
dGV4dElucHV0KTsKICAgICBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IHBkZkRvY3VtZW50Rm9yUHJp
bnRpbmcoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbi0+cGRmRG9jdW1lbnRGb3JQcmludGluZygp
OyB9CiAgICAgTlNPYmplY3QgKmFjY2Vzc2liaWxpdHlPYmplY3QoKSBjb25zdDsKKyAgICBpZCBh
Y2Nlc3NpYmlsaXR5U2hhZG93UGx1Z2luUGFyZW50Rm9yRWxlbWVudChXZWJDb3JlOjpFbGVtZW50
KikgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVt
ZW50KiBwbHVnaW5FbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5FbGVtZW50LmdldCgp
OyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJ
KHJldmlzaW9uIDIxNTA4NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3Miw2ICs5NzIsOCBAQAogICAgIFdlYlVSTFNj
aGVtZUhhbmRsZXJQcm94eSogdXJsU2NoZW1lSGFuZGxlckZvclNjaGVtZShjb25zdCBTdHJpbmcm
KTsKICAgICBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gYmFja2dyb3VuZENQVUxpbWl0KCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNrZ3JvdW5kQ1BVTGltaXQ7IH0KIAorICAgIHN0YXRpYyBQbHVnaW5WaWV3
KiBwbHVnaW5WaWV3Rm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqKTsKKwogcHJpdmF0ZToKICAgICBX
ZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYmKTsKIApA
QCAtMTIxMiw3ICsxMjE0LDYgQEAKICAgICBzdGF0aWMgYm9vbCBwbGF0Zm9ybUNhbkhhbmRsZVJl
cXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CiAKICAgICBzdGF0aWMgUGx1
Z2luVmlldyogZm9jdXNlZFBsdWdpblZpZXdGb3JGcmFtZShXZWJDb3JlOjpGcmFtZSYpOwotICAg
IHN0YXRpYyBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3Rm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqKTsK
IAogICAgIHN0YXRpYyBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlRnJvbUVkaXRpbmdSYW5n
ZShXZWJDb3JlOjpGcmFtZSYsIGNvbnN0IEVkaXRpbmdSYW5nZSYsIEVkaXRpbmdSYW5nZUlzUmVs
YXRpdmVUbyA9IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6RWRpdGFibGVSb290KTsKIApJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxpdHlX
ZWJQYWdlT2JqZWN0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbQkocmV2aXNp
b24gMjE1MDg0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0Fj
Y2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpZiBQTEFURk9STShNQUMpCiAKKyNpbXBvcnQgIlBsdWdpblZpZXcuaCIKICNp
bXBvcnQgIldlYkZyYW1lLmgiCiAjaW1wb3J0ICJXZWJQYWdlLmgiCiAjaW1wb3J0ICJXS0FycmF5
LmgiCkBAIC0xOTMsMTMgKzE5NCwyMSBAQAogewogICAgIGlmICghbV9wYWdlKQogICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIAorCiAgICAgSW50UG9pbnQgY29udmVydGVkUG9pbnQgPSBtX3BhZ2Ut
PnNjcmVlblRvUm9vdFZpZXcoSW50UG9pbnQocG9pbnQpKTsKLSAgICBpZiAoV2ViQ29yZTo6RnJh
bWVWaWV3KiBmcmFtZVZpZXcgPSBtX3BhZ2UtPm1haW5GcmFtZVZpZXcoKSkKLSAgICAgICAgY29u
dmVydGVkUG9pbnQubW92ZUJ5KGZyYW1lVmlldy0+c2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgaWYg
KFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBtX3BhZ2UtPmNvcmVQYWdlKCkpCi0gICAgICAgIGNvbnZl
cnRlZFBvaW50Lm1vdmUoMCwgLXBhZ2UtPnRvcENvbnRlbnRJbnNldCgpKTsKICAgICAKKyAgICAv
LyBTb21lIHBsdWdpbnMgbWF5IGJlIGFibGUgdG8gZmlndXJlIG91dCB0aGUgc2Nyb2xsIHBvc2l0
aW9uIGFuZCBpbnNldCBvbiB0aGVpciBvd24uCisgICAgQk9PTCBhcHBseUNvbnRlbnRPZmZzZXQg
PSB0cnVlOworICAgIGlmIChQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gbV9wYWdlLT5wbHVnaW5W
aWV3Rm9yRnJhbWUobV9wYWdlLT5tYWluRnJhbWUoKSkpCisgICAgICAgIGFwcGx5Q29udGVudE9m
ZnNldCA9ICFwbHVnaW5WaWV3LT5wbHVnaW4oKS0+cGx1Z2luSGFuZGxlc0NvbnRlbnRPZmZzZXRG
b3JBY2Nlc3NpYmlsaXR5SGl0VGVzdCgpOworCisgICAgaWYgKGFwcGx5Q29udGVudE9mZnNldCkg
eworICAgICAgICBpZiAoV2ViQ29yZTo6RnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3BhZ2UtPm1h
aW5GcmFtZVZpZXcoKSkKKyAgICAgICAgICAgIGNvbnZlcnRlZFBvaW50Lm1vdmVCeShmcmFtZVZp
ZXctPnNjcm9sbFBvc2l0aW9uKCkpOworICAgICAgICBpZiAoV2ViQ29yZTo6UGFnZSogcGFnZSA9
IG1fcGFnZS0+Y29yZVBhZ2UoKSkKKyAgICAgICAgICAgIGNvbnZlcnRlZFBvaW50Lm1vdmUoMCwg
LXBhZ2UtPnRvcENvbnRlbnRJbnNldCgpKTsKKyAgICB9CisKICAgICByZXR1cm4gW1tzZWxmIGFj
Y2Vzc2liaWxpdHlSb290T2JqZWN0V3JhcHBlcl0gYWNjZXNzaWJpbGl0eUhpdFRlc3Q6Y29udmVy
dGVkUG9pbnRdOwogfQogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306473</attachid>
            <date>2017-04-07 00:03:48 -0700</date>
            <delta_ts>2017-04-07 08:44:00 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>28819</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNTA4NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE3LTA0LTA2ICBDaHJpcyBG
bGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFBERiBwbHVnaW4g
bmVlZHMgdG8gc3VwcG9ydCBQREYtRE9NIE1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDU4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFByb3ZpZGUgV2ViQ29yZSBzdXBwb3J0IGZvciBhY2Nlc3Np
YmlsaXR5IGNvbm5lY3QgdG8gUERGIGRvY3VtZW50LgorICAgICAgICBUaGlzIGluY2x1ZGVzIHRo
ZSBhYmlsaXR5IHRvIGNvbm5lY3QgYSBQREYgYW5ub3RhdGlvbiBjcmVhdGVkIG5vZGUgd2l0aGlu
IFdlYktpdCB0byAKKyAgICAgICAgIGl0cyBQREZBbm5vdGF0aW9uIHBhcmVudCAodGhyb3VnaCB1
c2Ugb2Ygc2hhZG93UGx1Z2luUGFyZW50KS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpBWFBvc3ROb3RpZmljYXRpb25XaXRoVXNlckluZm8p
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyTWFjLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyIHNoYWRvd1BsdWdpblBhcmVudF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6XSk6CisgICAgICAgICogaHRt
bC9IVE1MQXR0cmlidXRlTmFtZXMuaW46CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3QmFz
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlld0Jhc2U6OmFjY2Vzc2liaWxpdHlTaGFk
b3dQbHVnaW5QYXJlbnRGb3JFbGVtZW50KToKKwogMjAxNy0wNC0wNiAgWW91ZW5uIEZhYmxldCAg
PHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgW0RlYnVnXSBBU1NFUlQoIXRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpIG9uIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBp
L2NvcnMvY29ycy1wcmVmbGlnaHQtc3RhdHVzLXdvcmtlci5odG1sCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAkocmV2aXNpb24gMjE1MDg0KQor
KysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE0Myw3ICsxNDMsNyBAQAogICAgIC8vIEZvciBBWCBvYmplY3RzIHdpdGggZWxl
bWVudHMgdGhhdCBiYWNrIHRoZW0uCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0T3JDcmVh
dGUoUmVuZGVyT2JqZWN0Kik7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0T3JDcmVhdGUo
V2lkZ2V0Kik7Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0T3JDcmVhdGUoTm9kZSopOwor
ICAgIFdFQkNPUkVfRVhQT1JUIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3JlYXRlKE5vZGUq
KTsKIAogICAgIC8vIHVzZWQgZm9yIG9iamVjdHMgd2l0aG91dCBiYWNraW5nIGVsZW1lbnRzCiAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0T3JDcmVhdGUoQWNjZXNzaWJpbGl0eVJvbGUpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVj
dENhY2hlTWFjLm1tCShyZXZpc2lvbiAyMTUwODQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsOCAr
MjUwLDExIEBACiAgICAgYXhTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zRm9yVGVzdHMgPSB2YWx1
ZTsKIH0KIAotc3RhdGljIHZvaWQgQVhQb3N0Tm90aWZpY2F0aW9uV2l0aFVzZXJJbmZvKGlkIG9i
amVjdCwgTlNTdHJpbmcgKm5vdGlmaWNhdGlvbiwgaWQgdXNlckluZm8pCitzdGF0aWMgdm9pZCBB
WFBvc3ROb3RpZmljYXRpb25XaXRoVXNlckluZm8oQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
Km9iamVjdCwgTlNTdHJpbmcgKm5vdGlmaWNhdGlvbiwgaWQgdXNlckluZm8pCiB7CisgICAgaWYg
KGlkIHNoYWRvd1BsdWdpblBhcmVudCA9IFtvYmplY3Qgc2hhZG93UGx1Z2luUGFyZW50XSkKKyAg
ICAgICAgb2JqZWN0ID0gc2hhZG93UGx1Z2luUGFyZW50OworICAgIAogICAgIE5TQWNjZXNzaWJp
bGl0eVBvc3ROb3RpZmljYXRpb25XaXRoVXNlckluZm8ob2JqZWN0LCBub3RpZmljYXRpb24sIHVz
ZXJJbmZvKTsKICAgICAvLyBUbyBzaW1wbGlmeSBtb25pdG9yaW5nIGZvciBub3RpZmljYXRpb25z
IGluIHRlc3RzLCByZXBvc3QgYXMgYSBzaW1wbGUgTlNOb3RpZmljYXRpb24gaW5zdGVhZCBvZiBm
b3JjaW5nIHRlc3QgaW5mcmFzdHVjdHVyZSB0byBzZXR1cCBhbiBJUEMgY2xpZW50IGFuZCBkbyBh
bGwgdGhlIHRyYW5zbGF0aW9uIGJldHdlZW4gV2ViQ29yZSB0eXBlcyBhbmQgcGxhdGZvcm0gc3Bl
Y2lmaWMgSVBDIHR5cGVzIGFuZCBiYWNrCiAgICAgaWYgKFVOTElLRUxZKGF4U2hvdWxkUmVwb3N0
Tm90aWZpY2F0aW9uc0ZvclRlc3RzKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJNYWMuaAkocmV2aXNpb24gMjE1MDg0KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNCArMzUsNyBAQAogLSAoaWQpdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3Np
dGlvbnM6KGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYpc3RhcnRQb3NpdGlvbiBlbmRQ
b3NpdGlvbjooY29uc3QgV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uJillbmRQb3NpdGlvbjsKIC0g
KGlkKXRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246KGNvbnN0IFdlYkNvcmU6OlZpc2libGVQ
b3NpdGlvbiYpdmlzaWJsZVBvczsKIAorLy8gV2hlbiBhIHBsdWdpbiB1c2VzIGEgV2ViS2l0IGNv
bnRyb2wgdG8gYWN0IGFzIGEgc3Vycm9nYXRlIHZpZXcgKGUuZy4gUERGIHVzZSBXZWJLaXQgdG8g
Y3JlYXRlIHRleHQgZmllbGRzKS4KKy0gKGlkKXNoYWRvd1BsdWdpblBhcmVudDsKKwogQGVuZApJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0JKHJldmlzaW9uIDIx
NTA4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw4IEBACiAj
aW1wb3J0ICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaW1wb3J0ICJNYWluRnJhbWUuaCIKICNpbXBv
cnQgIlBhZ2UuaCIKKyNpbXBvcnQgIlBsdWdpbkRvY3VtZW50LmgiCisjaW1wb3J0ICJQbHVnaW5W
aWV3QmFzZS5oIgogI2ltcG9ydCAiUmVuZGVyVGV4dENvbnRyb2wuaCIKICNpbXBvcnQgIlJlbmRl
clZpZXcuaCIKICNpbXBvcnQgIlJlbmRlcldpZGdldC5oIgpAQCAtMTY4Miw2ICsxNjg0LDIxIEBA
CiAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnNl
bGVjdGlvbi52aXNpYmxlU3RhcnQoKSBlbmRQb3NpdGlvbjpzZWxlY3Rpb24udmlzaWJsZUVuZCgp
XTsKIH0KIAorLSAoaWQpc2hhZG93UGx1Z2luUGFyZW50Cit7CisgICAgaWYgKCFtX29iamVjdCB8
fCAhbV9vYmplY3QtPmhhc0F0dHJpYnV0ZSh4X2FwcGxlX3BkZl9hbm5vdGF0aW9uQXR0cikpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgaWYgKCFtX29iamVjdC0+ZG9jdW1lbnQoKS0+
aXNQbHVnaW5Eb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAKKyAgICBX
aWRnZXQqIHBsdWdpbldpZGdldCA9IHN0YXRpY19jYXN0PFBsdWdpbkRvY3VtZW50Kj4obV9vYmpl
Y3QtPmRvY3VtZW50KCkpLT5wbHVnaW5XaWRnZXQoKTsKKyAgICBpZiAoIXBsdWdpbldpZGdldCB8
fCAhcGx1Z2luV2lkZ2V0LT5pc1BsdWdpblZpZXdCYXNlKCkpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlld0Jhc2UqPihwbHVnaW5XaWRnZXQp
LT5hY2Nlc3NpYmlsaXR5U2hhZG93UGx1Z2luUGFyZW50Rm9yRWxlbWVudChtX29iamVjdC0+ZWxl
bWVudCgpKTsKK30KKwogLSAoQ0dQb2ludCljb252ZXJ0UG9pbnRUb1NjcmVlblNwYWNlOihGbG9h
dFBvaW50ICYpcG9pbnQKIHsKICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fb2JqZWN0LT5k
b2N1bWVudEZyYW1lVmlldygpOwpAQCAtMzA4Myw2ICszMTAwLDEwIEBACiAgICAgICAgIHJldHVy
biBjb252ZXJ0U3RyaW5nc1RvTlNBcnJheShjbGFzc0xpc3QpOwogICAgIH0KICAgICAKKyAgICAv
LyBUaGlzIGFsbG93cyB1cyB0byBjb25uZWN0IHRvIGEgcGx1Z2luIHRoYXQgY3JlYXRlcyBhIHNo
YWRvdyBub2RlIGZvciBlZGl0aW5nIChsaWtlIFBERnMpLgorICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6QCJfQVhTaGFkb3dQbHVnaW5QYXJlbnQiXSkKKyAgICAgICAgcmV0
dXJuIFtzZWxmIHNoYWRvd1BsdWdpblBhcmVudF07CisgICAgCiAgICAgLy8gdGhpcyBpcyB1c2Vk
IG9ubHkgYnkgRHVtcFJlbmRlclRyZWUgZm9yIHRlc3RpbmcKICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhDbGlja1BvaW50Il0pCiAgICAgICAgIHJldHVybiBbTlNW
YWx1ZSB2YWx1ZVdpdGhQb2ludDptX29iamVjdC0+Y2xpY2tQb2ludCgpXTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCShyZXZpc2lvbiAyMTUwODQpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgkod29ya2luZyBjb3B5
KQpAQCAtMzkyLDMgKzM5Miw1IEBACiB4LWFwcGxlLWRhdGEtZGV0ZWN0b3JzCiB4LWFwcGxlLWRh
dGEtZGV0ZWN0b3JzLXR5cGUKIHgtYXBwbGUtZGF0YS1kZXRlY3RvcnMtcmVzdWx0CisKK3gtYXBw
bGUtcGRmLWFubm90YXRpb24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmll
d0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXdC
YXNlLmgJKHJldmlzaW9uIDIxNTA4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
Vmlld0Jhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsMTAgQEAKICNpbmNsdWRlICJX
aWRnZXQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorI2lmIFBMQVRGT1JN
KENPQ09BKQordHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3QqIGlkOworI2VuZGlmCisKIG5hbWVz
cGFjZSBKU0MgewogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFzcyBKU0dsb2JhbE9iamVj
dDsKQEAgLTgzLDYgKzg3LDEwIEBACiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHdpbGxEZXRhdGNo
UmVuZGVyZXIoKSB7IH0KIAorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHZpcnR1YWwgaWQgYWNj
ZXNzaWJpbGl0eVNoYWRvd1BsdWdpblBhcmVudEZvckVsZW1lbnQoRWxlbWVudCopIGNvbnN0IHsg
cmV0dXJuIG51bGxwdHI7IH0KKyNlbmRpZgorICAgIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0
IFBsdWdpblZpZXdCYXNlKFBsYXRmb3JtV2lkZ2V0IHdpZGdldCA9IDApIDogV2lkZ2V0KHdpZGdl
dCkgeyB9CiB9OwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMjE1MDg0KQorKysgU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTctMDQt
MDYgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KKworICAgICAgICBBWDog
UERGIHBsdWdpbiBuZWVkcyB0byBzdXBwb3J0IFBERi1ET00gTW9kZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNTg5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJvdmlkZSBhY2Nlc3MgdG8gRE9NIG9i
amVjdHMgd2l0aCBQREYgZG9jdW1lbnQuIFRoaXMgbWVhbjoKKyAgICAgICAgICAgMSkgU3VwcG9y
dCBhIGRpZmZlcmVudCBzZXQgb2YgYXR0cmlidXRlcyBmb3IgV0tQREZQbHVnaW5BY2Nlc3NpYmls
aXR5T2JqZWN0LgorICAgICAgICAgICAgICAgIFdLUERGUGx1Z2luQWNjZXNzaWJpbGl0eU9iamVj
dCBpcyBub3cgYSBncm91cCBpbnN0ZWFkIG9mIGZvcndhcmRpbmcgYXR0cmlidXRlIGNhbGxzIHRv
IHRoZSBwZGYgbGF5ZXIuCisgICAgICAgICAgIDIpIENvbm5lY3QgdGhlIGZvY3VzZWQgVUkgZWxl
bWVudCB0byB0aGUgYWN0aXZlIGFubm90YXRpb24gaWYgcG9zc2libGUuCisgICAgICAgICAgIDMp
IE1hcmsgdGhlIFBERiBhc3NvY2lhdGVkIG5vZGVzIHdpdGggYW4gYXR0cmlidXRlIHNvIHRoZXkg
Y2FuIGJlIGlkZW50aWZpZWQgbGF0ZXIgc28gdGhlaXIgY29ycmVjdCBwYXJlbnQgY2FuIGJlIGZv
dW5kLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZMYXllckNvbnRyb2xs
ZXJTUEkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tOgorICAgICAgICAo
LVtXS1BERlBsdWdpbkFjY2Vzc2liaWxpdHlPYmplY3QgcGRmTGF5ZXJDb250cm9sbGVyXSk6Cisg
ICAgICAgICgtW1dLUERGUGx1Z2luQWNjZXNzaWJpbGl0eU9iamVjdCBzZXRQZGZMYXllckNvbnRy
b2xsZXI6XSk6CisgICAgICAgICgtW1dLUERGUGx1Z2luQWNjZXNzaWJpbGl0eU9iamVjdCBjb252
ZXJ0UmVjdFRvU2NyZWVuU3BhY2U6XSk6CisgICAgICAgICgtW1dLUERGUGx1Z2luQWNjZXNzaWJp
bGl0eU9iamVjdCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6XSk6CisgICAgICAgICgtW1dL
UERGUGx1Z2luQWNjZXNzaWJpbGl0eU9iamVjdCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNd
KToKKyAgICAgICAgKC1bV0tQREZQbHVnaW5BY2Nlc3NpYmlsaXR5T2JqZWN0IGFjY2Vzc2liaWxp
dHlBY3Rpb25OYW1lc10pOgorICAgICAgICAoLVtXS1BERlBsdWdpbkFjY2Vzc2liaWxpdHlPYmpl
Y3QgYWNjZXNzaWJpbGl0eVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lc10pOgorICAgICAgICAo
LVtXS1BERlBsdWdpbkFjY2Vzc2liaWxpdHlPYmplY3QgYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVs
ZW1lbnRdKToKKyAgICAgICAgKC1bV0tQREZQbHVnaW5BY2Nlc3NpYmlsaXR5T2JqZWN0IGFjY2Vz
c2liaWxpdHlBc3NvY2lhdGVkQ29udHJvbEZvckFubm90YXRpb246XSk6CisgICAgICAgICgtW1dL
UERGUGx1Z2luQWNjZXNzaWJpbGl0eU9iamVjdCBhY2Nlc3NpYmlsaXR5SGl0VGVzdDpdKToKKyAg
ICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjb252ZXJ0RnJvbVJvb3RWaWV3VG9QREZWaWV3KToK
KyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjb252ZXJ0RnJvbVBERlZpZXdUb1NjcmVlbik6
CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6cGx1Z2luSGFuZGxlc0NvbnRlbnRPZmZzZXRG
b3JBY2Nlc3NpYmlsaXR5SGl0VGVzdCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6YXhP
YmplY3RDYWNoZSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6YWNjZXNzaWJpbGl0eVNo
YWRvd1BsdWdpblBhcmVudEZvckVsZW1lbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lu
cy9QREYvUERGUGx1Z2luQW5ub3RhdGlvbi5tbToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2lu
QW5ub3RhdGlvbjo6YXR0YWNoKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Lmg6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpbjo6YWNjZXNzaWJpbGl0eVNoYWRvd1BsdWdpblBh
cmVudEZvckVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW46OnBsdWdpbkhhbmRsZXND
b250ZW50T2Zmc2V0Rm9yQWNjZXNzaWJpbGl0eUhpdFRlc3QpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6
YWNjZXNzaWJpbGl0eVNoYWRvd1BsdWdpblBhcmVudEZvckVsZW1lbnQpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNz
aWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMubW06CisgICAgICAgICgtW1dLQWNjZXNzaWJpbGl0eVdl
YlBhZ2VPYmplY3QgYWNjZXNzaWJpbGl0eUhpdFRlc3Q6XSk6CisKIDIwMTctMDQtMDYgIEFsZXgg
Q2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgV0tD
b250ZW50RXh0ZW5zaW9uU3RvcmUuaCBhbmQgV0tDb250ZW50RXh0ZW5zaW9uLmggdG8gcHVibGlj
IFdlYktpdC5oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BE
RkxheWVyQ29udHJvbGxlclNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmgJKHJldmlzaW9uIDIxNTA4
NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250
cm9sbGVyU1BJLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw5ICsxNTgsMjAgQEAKIC0gKE5TVmFs
dWUgKilhY2Nlc3NpYmlsaXR5UmFuZ2VGb3JMaW5lQXR0cmlidXRlRm9yUGFyYW1ldGVyOihpZClw
YXJhbWV0ZXI7CiAtIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlTdHJpbmdGb3JSYW5nZUF0dHJp
YnV0ZUZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGVyOwogLSAoTlNWYWx1ZSAqKWFjY2Vzc2liaWxp
dHlCb3VuZHNGb3JSYW5nZUF0dHJpYnV0ZUZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGVyOworI2lm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAwCistIChOU0FycmF5ICop
YWNjZXNzaWJpbGl0eUNoaWxkcmVuOworLSAodm9pZClzZXRBY2Nlc3NpYmlsaXR5UGFyZW50Oihp
ZClwYXJlbnQ7CistIChpZClhY2Nlc3NpYmlsaXR5RWxlbWVudEZvckFubm90YXRpb246KFBERkFu
bm90YXRpb24gKilhbm5vdGF0aW9uOworI2VuZGlmCiAKIEBlbmQKIAorI2lmIF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAwCitAaW50ZXJmYWNlIFBERkFubm90YXRpb24g
KEFjY2Vzc2liaWxpdHlQcml2YXRlKQorLSAoaWQpYWNjZXNzaWJpbGl0eU5vZGU7CitAZW5kCiAj
ZW5kaWYKIAorI2VuZGlmCisKICNlbmRpZiAvLyBQREZMYXllckNvbnRyb2xsZXJTUElfaApJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdp
bi5oCShyZXZpc2lvbiAyMTUwODQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvUERGL1BERlBsdWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5j
bHVkZSAiUGx1Z2luLmgiCiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIKICNpbmNsdWRlICJXZWJIaXRU
ZXN0UmVzdWx0RGF0YS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQVhPYmplY3RDYWNoZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQWZmaW5lVHJhbnNmb3JtLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GaW5k
T3B0aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYWJsZUFyZWEuaD4KQEAgLTU3LDYg
KzU4LDcgQEAKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQVhPYmplY3RDYWNoZTsK
IGNsYXNzIEVsZW1lbnQ7CiBzdHJ1Y3QgUGx1Z2luSW5mbzsKIH0KQEAgLTEwMyw2ICsxMDUsNyBA
QAogICAgIHZvaWQgYXR0ZW1wdFRvVW5sb2NrUERGKGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpOwog
CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRGcm9tUERGVmlld1RvU2NyZWVuKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZl
cnRGcm9tUm9vdFZpZXdUb1BERlZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsK
ICAgICBXZWJDb3JlOjpJbnRSZWN0IGJvdW5kc09uU2NyZWVuKCkgY29uc3Q7CiAgICAgCiAgICAg
Ym9vbCBzaG93Q29udGV4dE1lbnVBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CkBA
IC0xMTQsNiArMTE3LDkgQEAKIAogICAgIGJvb2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNj
cm9sbGJhck9uTGVmdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKKyAgICBQ
REZQbHVnaW5Bbm5vdGF0aW9uKiBhY3RpdmVBbm5vdGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9h
Y3RpdmVBbm5vdGF0aW9uLmdldCgpOyB9CisgICAgV2ViQ29yZTo6QVhPYmplY3RDYWNoZSogYXhP
YmplY3RDYWNoZSgpIGNvbnN0OworICAgIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBQREZQbHVn
aW4oV2ViRnJhbWUqKTsKIApAQCAtMTY4LDExICsxNzQsMTMgQEAKICAgICBib29sIGhhbmRsZVNj
cm9sbChXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5
KSBvdmVycmlkZTsKICAgICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBsaXZlUmVzb3Vy
Y2VEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCB3aWxsRGV0YXRjaFJlbmRlcmVyKCkg
b3ZlcnJpZGU7Ci0KKyAgICBib29sIHBsdWdpbkhhbmRsZXNDb250ZW50T2Zmc2V0Rm9yQWNjZXNz
aWJpbGl0eUhpdFRlc3QoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKICAgICBib29sIGlzQmVpbmdB
c3luY2hyb25vdXNseUluaXRpYWxpemVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KIAogICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnRGb3JQcmludGluZygp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGRmRG9jdW1lbnQ7IH0KICAgICBOU09iamVjdCAq
YWNjZXNzaWJpbGl0eU9iamVjdCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGlkIGFjY2Vzc2liaWxp
dHlTaGFkb3dQbHVnaW5QYXJlbnRGb3JFbGVtZW50KFdlYkNvcmU6OkVsZW1lbnQqKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIHVuc2lnbmVkIGNvdW50RmluZE1hdGNoZXMoY29uc3QgU3RyaW5nJiB0
YXJnZXQsIFdlYkNvcmU6OkZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KSBvdmVy
cmlkZTsKICAgICBib29sIGZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFdlYkNvcmU6
OkZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KSBvdmVycmlkZTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1t
CShyZXZpc2lvbiAyMTUwODQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UERGL1BERlBsdWdpbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQAogI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgogI2ltcG9ydCA8UERGS2l0L1BERktp
dC5oPgogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0FYT2JqZWN0Q2FjaGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQXJjaGl2ZVJlc291cmNlLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9DdXJzb3IuaD4KQEAg
LTE0NiwxNSArMTQ3LDUxIEBACiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKKy0gKFBERkxheWVyQ29u
dHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlcgoreworICAgIHJldHVybiBfcGRmTGF5ZXJDb250
cm9sbGVyOworfQorCistICh2b2lkKXNldFBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250
cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyCit7CisgICAgX3BkZkxheWVyQ29udHJvbGxlciA9
IHBkZkxheWVyQ29udHJvbGxlcjsKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwMTMwMAorICAgIFtfcGRmTGF5ZXJDb250cm9sbGVyIHNldEFjY2Vzc2liaWxpdHlQYXJl
bnQ6c2VsZl07CisjZW5kaWYKK30KKwogLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkCiB7
CiAgICAgcmV0dXJuIE5POwogfQogCisvLyBUaGlzIGlzIGNhbGxlZCBieSBQREZBY2Nlc3NpYmls
aXR5Tm9kZXMgZnJvbSBpbnNpZGUgUERGS2l0IHRvIGdldCBmaW5hbCBib3VuZHMuCistIChOU1Jl
Y3QpY29udmVydFJlY3RUb1NjcmVlblNwYWNlOihOU1JlY3QpcmVjdAoreworICAgIHJldHVybiBf
cGRmUGx1Z2luLT5jb252ZXJ0RnJvbVBERlZpZXdUb1NjcmVlbihyZWN0KTsKK30KKwogLSAoaWQp
YWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmluZyAqKWF0dHJpYnV0ZQogewogICAg
IGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlQYXJlbnRBdHRy
aWJ1dGVdKQogICAgICAgICByZXR1cm4gX3BhcmVudDsKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VG9wTGV2ZWxVSUVsZW1lbnRBdHRyaWJ1dGVdKQor
ICAgICAgICByZXR1cm4gW19wYXJlbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNj
ZXNzaWJpbGl0eVRvcExldmVsVUlFbGVtZW50QXR0cmlidXRlXTsKKyAgICBpZiAoW2F0dHJpYnV0
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5V2luZG93QXR0cmlidXRlXSkKKyAgICAg
ICAgcmV0dXJuIFtfcGFyZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2li
aWxpdHlXaW5kb3dBdHRyaWJ1dGVdOworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlTaXplQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtOU1ZhbHVl
IHZhbHVlV2l0aFNpemU6X3BkZlBsdWdpbi0+Ym91bmRzT25TY3JlZW4oKS5zaXplKCldOworICAg
IGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlFbmFibGVkQXR0
cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtfcGFyZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVW
YWx1ZTpOU0FjY2Vzc2liaWxpdHlFbmFibGVkQXR0cmlidXRlXTsKKyAgICBpZiAoW2F0dHJpYnV0
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGVdKQorICAg
ICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUG9pbnQ6X3BkZlBsdWdpbi0+Ym91bmRzT25T
Y3JlZW4oKS5sb2NhdGlvbigpXTsKKworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTAxMzAwCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIEBbIF9wZGZMYXllckNv
bnRyb2xsZXIgXTsKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3Np
YmlsaXR5Um9sZUF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlHcm91
cFJvbGU7CisjZWxzZQogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlWYWx1ZUF0dHJpYnV0ZV0pCiAgICAgICAgIHJldHVybiBbX3BkZkxheWVyQ29udHJv
bGxlciBhY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdOwogICAgIGlmIChbYXR0cmlidXRlIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRBdHRyaWJ1dGVdKQpAQCAt
MTY1LDIyICsyMDIsMTMgQEAKICAgICAgICAgcmV0dXJuIFtfcGRmTGF5ZXJDb250cm9sbGVyIGFj
Y2Vzc2liaWxpdHlOdW1iZXJPZkNoYXJhY3RlcnNBdHRyaWJ1dGVdOwogICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWaXNpYmxlQ2hhcmFjdGVyUmFuZ2VB
dHRyaWJ1dGVdKQogICAgICAgICByZXR1cm4gW19wZGZMYXllckNvbnRyb2xsZXIgYWNjZXNzaWJp
bGl0eVZpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJpYnV0ZV07Ci0gICAgaWYgKFthdHRyaWJ1dGUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRvcExldmVsVUlFbGVtZW50QXR0cmlidXRl
XSkKLSAgICAgICAgcmV0dXJuIFtfcGFyZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpO
U0FjY2Vzc2liaWxpdHlUb3BMZXZlbFVJRWxlbWVudEF0dHJpYnV0ZV07CiAgICAgaWYgKFthdHRy
aWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJvbGVBdHRyaWJ1dGVdKQogICAg
ICAgICByZXR1cm4gW19wZGZMYXllckNvbnRyb2xsZXIgYWNjZXNzaWJpbGl0eVJvbGVBdHRyaWJ1
dGVdOwogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlS
b2xlRGVzY3JpcHRpb25BdHRyaWJ1dGVdKQogICAgICAgICByZXR1cm4gW19wZGZMYXllckNvbnRy
b2xsZXIgYWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbkF0dHJpYnV0ZV07Ci0gICAgaWYgKFth
dHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVdpbmRvd0F0dHJpYnV0ZV0p
Ci0gICAgICAgIHJldHVybiBbX3BhcmVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNB
Y2Nlc3NpYmlsaXR5V2luZG93QXR0cmlidXRlXTsKLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2l6ZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBb
TlNWYWx1ZSB2YWx1ZVdpdGhTaXplOl9wZGZQbHVnaW4tPmJvdW5kc09uU2NyZWVuKCkuc2l6ZSgp
XTsKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Rm9j
dXNlZEF0dHJpYnV0ZV0pCiAgICAgICAgIHJldHVybiBbX3BhcmVudCBhY2Nlc3NpYmlsaXR5QXR0
cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5Rm9jdXNlZEF0dHJpYnV0ZV07Ci0gICAgaWYgKFth
dHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUVuYWJsZWRBdHRyaWJ1dGVd
KQotICAgICAgICByZXR1cm4gW19wYXJlbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5T
QWNjZXNzaWJpbGl0eUVuYWJsZWRBdHRyaWJ1dGVdOwotICAgIGlmIChbYXR0cmlidXRlIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlQb3NpdGlvbkF0dHJpYnV0ZV0pCi0gICAgICAgIHJl
dHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhQb2ludDpfcGRmUGx1Z2luLT5ib3VuZHNPblNjcmVlbigp
LmxvY2F0aW9uKCldOworI2VuZGlmCiAKICAgICByZXR1cm4gMDsKIH0KQEAgLTIxMywyMCArMjQx
LDI3IEBACiAgICAgc3RhdGljIE5TQXJyYXkgKmF0dHJpYnV0ZU5hbWVzID0gMDsKIAogICAgIGlm
ICghYXR0cmlidXRlTmFtZXMpIHsKLSAgICAgICAgYXR0cmlidXRlTmFtZXMgPSBAW05TQWNjZXNz
aWJpbGl0eVZhbHVlQXR0cmlidXRlLAotICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U2VsZWN0
ZWRUZXh0QXR0cmlidXRlLAotICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0
UmFuZ2VBdHRyaWJ1dGUsCi0gICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlOdW1iZXJPZkNoYXJh
Y3RlcnNBdHRyaWJ1dGUsCi0gICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlWaXNpYmxlQ2hhcmFj
dGVyUmFuZ2VBdHRyaWJ1dGUsCisgICAgICAgIGF0dHJpYnV0ZU5hbWVzID0gQFsKICAgICAgICAg
ICAgIE5TQWNjZXNzaWJpbGl0eVBhcmVudEF0dHJpYnV0ZSwKLSAgICAgICAgICAgIE5TQWNjZXNz
aWJpbGl0eVJvbGVBdHRyaWJ1dGUsCiAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlXaW5kb3dB
dHRyaWJ1dGUsCiAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlUb3BMZXZlbFVJRWxlbWVudEF0
dHJpYnV0ZSwKICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbkF0dHJp
YnV0ZSwKICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVNpemVBdHRyaWJ1dGUsCisgICAgICAg
ICAgICBOU0FjY2Vzc2liaWxpdHlFbmFibGVkQXR0cmlidXRlLAorICAgICAgICAgICAgTlNBY2Nl
c3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGUsCiAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlG
b2N1c2VkQXR0cmlidXRlLAotICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5RW5hYmxlZEF0dHJp
YnV0ZSwKLSAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVBvc2l0aW9uQXR0cmlidXRlXTsKKyAg
ICAgICAgICAgIC8vIFBERkxheWVyQ29udHJvbGxlciBoYXMgaXRzIG93biBhY2Nlc3NpYmlsaXR5
Q2hpbGRyZW4uCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEzMDAK
KyAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlCisjZWxzZQorICAg
ICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5Um9sZUF0dHJpYnV0ZSwKKyAgICAgICAgICAgIE5TQWNj
ZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlLAorICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U2Vs
ZWN0ZWRUZXh0QXR0cmlidXRlLAorICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRU
ZXh0UmFuZ2VBdHRyaWJ1dGUsCisgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlOdW1iZXJPZkNo
YXJhY3RlcnNBdHRyaWJ1dGUsCisgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlWaXNpYmxlQ2hh
cmFjdGVyUmFuZ2VBdHRyaWJ1dGUKKyNlbmRpZgorICAgICAgICAgICAgXTsKICAgICAgICAgW2F0
dHJpYnV0ZU5hbWVzIHJldGFpbl07CiAgICAgfQogCkBAIC0yMzUsNiArMjcwLDkgQEAKIAogLSAo
TlNBcnJheSAqKWFjY2Vzc2liaWxpdHlBY3Rpb25OYW1lcwogeworI2lmIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAwCisgICAgcmV0dXJuIG5pbDsKKyNlbHNlCiAgICAg
c3RhdGljIE5TQXJyYXkgKmFjdGlvbk5hbWVzID0gMDsKICAgICAKICAgICBpZiAoIWFjdGlvbk5h
bWVzKQpAQCAtMjQxLDYgKzI3OSw3IEBACiAgICAgICAgIGFjdGlvbk5hbWVzID0gW1tOU0FycmF5
IGFycmF5V2l0aE9iamVjdDpOU0FjY2Vzc2liaWxpdHlTaG93TWVudUFjdGlvbl0gcmV0YWluXTsK
ICAgICAKICAgICByZXR1cm4gYWN0aW9uTmFtZXM7CisjZW5kaWYKIH0KIAogLSAodm9pZClhY2Nl
c3NpYmlsaXR5UGVyZm9ybUFjdGlvbjooTlNTdHJpbmcgKilhY3Rpb24KQEAgLTI2MSwxNyArMzAw
LDU5IEBACiAKIC0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0
ZU5hbWVzCiB7CisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEzMDAK
KyAgICByZXR1cm4gbmlsOworI2Vsc2UKICAgICByZXR1cm4gW19wZGZMYXllckNvbnRyb2xsZXIg
YWNjZXNzaWJpbGl0eVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lc107CisjZW5kaWYKIH0KIAog
LSAoaWQpYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnQKIHsKKyNpZiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTMwMAorICAgIGlmIChXZWJLaXQ6OlBERlBsdWdpbkFu
bm90YXRpb24qIGFjdGl2ZUFubm90YXRpb24gPSBfcGRmUGx1Z2luLT5hY3RpdmVBbm5vdGF0aW9u
KCkpIHsKKyAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGV4aXN0aW5nQ2FjaGUgPSBfcGRmUGx1
Z2luLT5heE9iamVjdENhY2hlKCkpIHsKKyAgICAgICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBvYmplY3QgPSBleGlzdGluZ0NhY2hlLT5nZXRPckNyZWF0ZShhY3RpdmVBbm5vdGF0aW9u
LT5lbGVtZW50KCkpKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICAgICAg
ICAgICAgICAgIHJldHVybiBbb2JqZWN0LT53cmFwcGVyKCkgYWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlOkAiX0FYU2hhZG93UGx1Z2luUGFyZW50Il07CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcG9wCisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG5pbDsKKyNlbHNlCiAgICAgcmV0
dXJuIHNlbGY7CisjZW5kaWYKIH0KIAorI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTAxMzAwCistIChpZClhY2Nlc3NpYmlsaXR5QXNzb2NpYXRlZENvbnRyb2xGb3JBbm5v
dGF0aW9uOihQREZBbm5vdGF0aW9uICopYW5ub3RhdGlvbgoreworICAgIC8vIE9ubHkgYWN0aXZl
IGFubm90YXRpb25zIHNlZW0gdG8gaGF2ZSB0aGVpciBhc3NvY2lhdGVkIGNvbnRyb2xzIGF2YWls
YWJsZS4KKyAgICBXZWJLaXQ6OlBERlBsdWdpbkFubm90YXRpb24qIGFjdGl2ZUFubm90YXRpb24g
PSBfcGRmUGx1Z2luLT5hY3RpdmVBbm5vdGF0aW9uKCk7CisgICAgaWYgKCFhY3RpdmVBbm5vdGF0
aW9uIHx8ICFbYWN0aXZlQW5ub3RhdGlvbi0+YW5ub3RhdGlvbigpIGlzRXF1YWw6YW5ub3RhdGlv
bl0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgQVhPYmplY3RDYWNoZSogY2FjaGUg
PSBfcGRmUGx1Z2luLT5heE9iamVjdENhY2hlKCk7CisgICAgaWYgKCFjYWNoZSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBjYWNo
ZS0+Z2V0T3JDcmVhdGUoYWN0aXZlQW5ub3RhdGlvbi0+ZWxlbWVudCgpKTsKKyAgICBpZiAoIW9i
amVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBvYmplY3QtPndyYXBwZXIo
KTsKK30KKyNlbmRpZgorCiAtIChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooTlNQb2ludClwb2lu
dAogeworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAwCisgICAg
cG9pbnQgPSBfcGRmUGx1Z2luLT5jb252ZXJ0RnJvbVJvb3RWaWV3VG9QREZWaWV3KEludFBvaW50
KHBvaW50KSk7CisgICAgcmV0dXJuIFtfcGRmTGF5ZXJDb250cm9sbGVyIGFjY2Vzc2liaWxpdHlI
aXRUZXN0OnBvaW50XTsKKyNlbHNlCiAgICAgcmV0dXJuIHNlbGY7CisjZW5kaWYKIH0KIAogQGVu
ZApAQCAtMTIwNiw2ICsxMjg3LDEyIEBACiAgICAgSW50UG9pbnQgcG9pbnRJblBsdWdpbkNvb3Jk
aW5hdGVzKHBvaW50LngoKSwgc2l6ZSgpLmhlaWdodCgpIC0gcG9pbnQueSgpKTsKICAgICByZXR1
cm4gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVU
cmFuc2Zvcm0oKSkubWFwUG9pbnQocG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzKTsKIH0KKyAgICAK
K0ludFBvaW50IFBERlBsdWdpbjo6Y29udmVydEZyb21Sb290Vmlld1RvUERGVmlldyhjb25zdCBJ
bnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgcG9pbnRJblBsdWdpbkNvb3Jk
aW5hdGVzID0gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLm1hcFBvaW50KHBvaW50KTsKKyAg
ICByZXR1cm4gSW50UG9pbnQocG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzLngoKSwgc2l6ZSgpLmhl
aWdodCgpIC0gcG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzLnkoKSk7Cit9CiAKIEZsb2F0UmVjdCBQ
REZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1RvU2NyZWVuKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkgY29uc3QKIHsKQEAgLTEyMTQsMTAgKzEzMDEsOSBAQAogICAgIGlmICghZnJhbWVWaWV3KQog
ICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiAKLSAgICBGbG9hdFBvaW50IG9yaWdpbkluUGx1
Z2luQ29vcmRpbmF0ZXMocmVjdC54KCksIHNpemUoKS5oZWlnaHQoKSAtIHJlY3QueSgpIC0gcmVj
dC5oZWlnaHQoKSk7Ci0gICAgRmxvYXRSZWN0IHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBt
X3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5z
Zm9ybSgpKS5tYXBSZWN0KEZsb2F0UmVjdChvcmlnaW5JblBsdWdpbkNvb3JkaW5hdGVzLCByZWN0
LnNpemUoKSkpOwotCi0gICAgcmV0dXJuIGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihlbmNs
b3NpbmdJbnRSZWN0KHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMpKTsKKyAgICBGbG9hdFJlY3Qg
dXBkYXRlZFJlY3QgPSByZWN0OworICAgIHVwZGF0ZWRSZWN0LnNldExvY2F0aW9uKGNvbnZlcnRG
cm9tUERGVmlld1RvUm9vdFZpZXcoSW50UG9pbnQodXBkYXRlZFJlY3QubG9jYXRpb24oKSkpKTsK
KyAgICByZXR1cm4gd2ViRnJhbWUoKS0+Y29yZUZyYW1lKCktPnBhZ2UoKS0+Y2hyb21lKCkucm9v
dFZpZXdUb1NjcmVlbihlbmNsb3NpbmdJbnRSZWN0KHVwZGF0ZWRSZWN0KSk7CiB9CiAKIEludFJl
Y3QgUERGUGx1Z2luOjpib3VuZHNPblNjcmVlbigpIGNvbnN0CkBAIC0xNjc0LDYgKzE3NjAsMTcg
QEAKICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKHBkZkRhdGEpOwogfQogCiti
b29sIFBERlBsdWdpbjo6cGx1Z2luSGFuZGxlc0NvbnRlbnRPZmZzZXRGb3JBY2Nlc3NpYmlsaXR5
SGl0VGVzdCgpIGNvbnN0Cit7CisgICAgLy8gUERGIHBsdWdpbiBub3cgaGFuZGxlcyBzY3JvbGwg
dmlldyBhbmQgdG9wIGNvbnRlbnQgaW5zZXQgd2hlbiBjb252ZXJ0IGhpdCB0ZXN0IHJlcXVlc3Rz
LgorI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAwCisgICAgcmV0
dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisgICAgCiB2
b2lkIFBERlBsdWdpbjo6c2F2ZVRvUERGKCkKIHsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHBy
b2JhYmx5IG5vdGlmeSB0aGUgdXNlciB0aGF0IHRoZXkgY2FuJ3Qgc2F2ZSBiZWZvcmUgdGhlIGRv
Y3VtZW50IGlzIGZpbmlzaGVkIGxvYWRpbmcuCkBAIC0yMDE0LDYgKzIxMTEsMTEgQEAKIAogICAg
IHJldHVybiBOU1JlY3RGcm9tQ0dSZWN0KG5ld1JlY3QpOwogfQorICAgIAorV2ViQ29yZTo6QVhP
YmplY3RDYWNoZSogUERGUGx1Z2luOjpheE9iamVjdENhY2hlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gd2ViRnJhbWUoKS0+Y29yZUZyYW1lKCktPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKTsK
K30KIAogV2ViQ29yZTo6RmxvYXRSZWN0IFBERlBsdWdpbjo6cmVjdEZvclNlbGVjdGlvbkluUm9v
dFZpZXcoUERGU2VsZWN0aW9uICpzZWxlY3Rpb24pIGNvbnN0CiB7CkBAIC0yMTAzLDYgKzIyMDUs
MjEgQEAKICAgICByZXR1cm4gcmF3RGF0YSgpOwogfQogCitpZCBQREZQbHVnaW46OmFjY2Vzc2li
aWxpdHlTaGFkb3dQbHVnaW5QYXJlbnRGb3JFbGVtZW50KFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1l
bnQpIGNvbnN0Cit7CisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEz
MDAKKyAgICBpZiAoIW1fYWN0aXZlQW5ub3RhdGlvbikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICAKKyAgICBpZiAobV9hY3RpdmVBbm5vdGF0aW9uLT5lbGVtZW50KCkgIT0gZWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICByZXR1cm4gW21fYWN0aXZlQW5ub3RhdGlvbi0+
YW5ub3RhdGlvbigpIGFjY2Vzc2liaWxpdHlOb2RlXTsKKyNlbHNlCisgICAgcmV0dXJuIG5pbDsK
KyNlbmRpZgorfQorICAgIAogTlNPYmplY3QgKlBERlBsdWdpbjo6YWNjZXNzaWJpbGl0eU9iamVj
dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fYWNjZXNzaWJpbGl0eU9iamVjdC5nZXQoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luQW5ub3Rh
dGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UERGL1BERlBsdWdpbkFubm90YXRpb24ubW0JKHJldmlzaW9uIDIxNTA4NCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luQW5ub3RhdGlvbi5tbQkod29y
a2luZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQAogICAgIG1fZWxlbWVudCA9IGNyZWF0ZUFubm90
YXRpb25FbGVtZW50KCk7CiAKICAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oY2xhc3NBdHRyLCBBdG9taWNTdHJpbmcoImFubm90YXRpb24iLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CisgICAgbV9lbGVtZW50LT5zZXRBdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHhfYXBwbGVfcGRmX2Fubm90YXRpb25BdHRyLCBBdG9t
aWNTdHJpbmcoInRydWUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CiAg
ICAgbV9lbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwg
Km1fZXZlbnRMaXN0ZW5lciwgZmFsc2UpOwogICAgIG1fZWxlbWVudC0+YWRkRXZlbnRMaXN0ZW5l
cihldmVudE5hbWVzKCkuYmx1ckV2ZW50LCAqbV9ldmVudExpc3RlbmVyLCBmYWxzZSk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmgJKHJldmlzaW9u
IDIxNTA4NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4uaAko
d29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAj
aW5jbHVkZSAiTGF5ZXJIb3N0aW5nQ29udGV4dC5oIgordHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmpl
Y3QqIGlkOwogCiBPQkpDX0NMQVNTIE5TRGljdGlvbmFyeTsKIE9CSkNfQ0xBU1MgTlNPYmplY3Q7
CkBAIC0yNzQsNiArMjc1LDcgQEAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2aXJ0dWFsIFJl
dGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnRGb3JQcmludGluZygpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KICAgICB2aXJ0dWFsIE5TT2JqZWN0ICphY2Nlc3NpYmlsaXR5T2JqZWN0KCkgY29u
c3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaWQgYWNjZXNzaWJpbGl0eVNoYWRvd1BsdWdp
blBhcmVudEZvckVsZW1lbnQoV2ViQ29yZTo6RWxlbWVudCopIGNvbnN0IHsgcmV0dXJuIG51bGxw
dHI7IH0KICNlbmRpZgogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBjb3VudEZpbmRNYXRjaGVzKGNv
bnN0IFN0cmluZyYgdGFyZ2V0LCBXZWJDb3JlOjpGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0
Y2hDb3VudCkgPSAwOwpAQCAtMzAwLDYgKzMwMiw4IEBACiAKICAgICB2aXJ0dWFsIHZvaWQgd2ls
bERldGF0Y2hSZW5kZXJlcigpIHsgfQogCisgICAgdmlydHVhbCBib29sIHBsdWdpbkhhbmRsZXND
b250ZW50T2Zmc2V0Rm9yQWNjZXNzaWJpbGl0eUhpdFRlc3QoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgUGx1Z2luKFBsdWdpblR5cGUpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZp
c2lvbiAyMTUwODQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1NSw2ICs1NTUsMTMgQEAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KICAgICAKK2lkIFBsdWdpblZpZXc6OmFjY2Vzc2liaWxpdHlTaGFkb3dQbHVnaW5Q
YXJlbnRGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgaWYgKCFtX3Bs
dWdpbikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gbV9wbHVnaW4tPmFjY2Vzc2li
aWxpdHlTaGFkb3dQbHVnaW5QYXJlbnRGb3JFbGVtZW50KGVsZW1lbnQpOworfQorICAgIAogTlNP
YmplY3QgKlBsdWdpblZpZXc6OmFjY2Vzc2liaWxpdHlPYmplY3QoKSBjb25zdAogewogICAgIGlm
ICghbV9pc0luaXRpYWxpemVkIHx8ICFtX3BsdWdpbikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaAkocmV2aXNpb24gMjE1MDg0KQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaAkod29ya2luZyBj
b3B5KQpAQCAtODYsNiArODYsNyBAQAogICAgIGJvb2wgc2VuZENvbXBsZXhUZXh0SW5wdXQodWlu
dDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdGV4
dElucHV0KTsKICAgICBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IHBkZkRvY3VtZW50Rm9yUHJpbnRp
bmcoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbi0+cGRmRG9jdW1lbnRGb3JQcmludGluZygpOyB9
CiAgICAgTlNPYmplY3QgKmFjY2Vzc2liaWxpdHlPYmplY3QoKSBjb25zdDsKKyAgICBpZCBhY2Nl
c3NpYmlsaXR5U2hhZG93UGx1Z2luUGFyZW50Rm9yRWxlbWVudChXZWJDb3JlOjpFbGVtZW50Kikg
Y29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50
KiBwbHVnaW5FbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5FbGVtZW50LmdldCgpOyB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJl
dmlzaW9uIDIxNTA4NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3Miw2ICs5NzIsOCBAQAogICAgIFdlYlVSTFNjaGVt
ZUhhbmRsZXJQcm94eSogdXJsU2NoZW1lSGFuZGxlckZvclNjaGVtZShjb25zdCBTdHJpbmcmKTsK
ICAgICBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gYmFja2dyb3VuZENQVUxpbWl0KCkgY29uc3QgeyBy
ZXR1cm4gbV9iYWNrZ3JvdW5kQ1BVTGltaXQ7IH0KIAorICAgIHN0YXRpYyBQbHVnaW5WaWV3KiBw
bHVnaW5WaWV3Rm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqKTsKKwogcHJpdmF0ZToKICAgICBXZWJQ
YWdlKHVpbnQ2NF90IHBhZ2VJRCwgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYmKTsKIApAQCAt
MTIxMiw3ICsxMjE0LDYgQEAKICAgICBzdGF0aWMgYm9vbCBwbGF0Zm9ybUNhbkhhbmRsZVJlcXVl
c3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CiAKICAgICBzdGF0aWMgUGx1Z2lu
VmlldyogZm9jdXNlZFBsdWdpblZpZXdGb3JGcmFtZShXZWJDb3JlOjpGcmFtZSYpOwotICAgIHN0
YXRpYyBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3Rm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqKTsKIAog
ICAgIHN0YXRpYyBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlRnJvbUVkaXRpbmdSYW5nZShX
ZWJDb3JlOjpGcmFtZSYsIGNvbnN0IEVkaXRpbmdSYW5nZSYsIEVkaXRpbmdSYW5nZUlzUmVsYXRp
dmVUbyA9IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6RWRpdGFibGVSb290KTsKIApJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxpdHlXZWJQ
YWdlT2JqZWN0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbQkocmV2aXNpb24g
MjE1MDg0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vz
c2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAKICNpZiBQTEFURk9STShNQUMpCiAKKyNpbXBvcnQgIlBsdWdpblZpZXcuaCIKICNpbXBv
cnQgIldlYkZyYW1lLmgiCiAjaW1wb3J0ICJXZWJQYWdlLmgiCiAjaW1wb3J0ICJXS0FycmF5Lmgi
CkBAIC0xOTMsMTMgKzE5NCwyMSBAQAogewogICAgIGlmICghbV9wYWdlKQogICAgICAgICByZXR1
cm4gbmlsOwotICAgIAorCiAgICAgSW50UG9pbnQgY29udmVydGVkUG9pbnQgPSBtX3BhZ2UtPnNj
cmVlblRvUm9vdFZpZXcoSW50UG9pbnQocG9pbnQpKTsKLSAgICBpZiAoV2ViQ29yZTo6RnJhbWVW
aWV3KiBmcmFtZVZpZXcgPSBtX3BhZ2UtPm1haW5GcmFtZVZpZXcoKSkKLSAgICAgICAgY29udmVy
dGVkUG9pbnQubW92ZUJ5KGZyYW1lVmlldy0+c2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgaWYgKFdl
YkNvcmU6OlBhZ2UqIHBhZ2UgPSBtX3BhZ2UtPmNvcmVQYWdlKCkpCi0gICAgICAgIGNvbnZlcnRl
ZFBvaW50Lm1vdmUoMCwgLXBhZ2UtPnRvcENvbnRlbnRJbnNldCgpKTsKICAgICAKKyAgICAvLyBT
b21lIHBsdWdpbnMgbWF5IGJlIGFibGUgdG8gZmlndXJlIG91dCB0aGUgc2Nyb2xsIHBvc2l0aW9u
IGFuZCBpbnNldCBvbiB0aGVpciBvd24uCisgICAgQk9PTCBhcHBseUNvbnRlbnRPZmZzZXQgPSB0
cnVlOworICAgIGlmIChhdXRvIHBsdWdpblZpZXcgPSBtX3BhZ2UtPnBsdWdpblZpZXdGb3JGcmFt
ZShtX3BhZ2UtPm1haW5GcmFtZSgpKSkKKyAgICAgICAgYXBwbHlDb250ZW50T2Zmc2V0ID0gIXBs
dWdpblZpZXctPnBsdWdpbigpLT5wbHVnaW5IYW5kbGVzQ29udGVudE9mZnNldEZvckFjY2Vzc2li
aWxpdHlIaXRUZXN0KCk7CisKKyAgICBpZiAoYXBwbHlDb250ZW50T2Zmc2V0KSB7CisgICAgICAg
IGlmIChXZWJDb3JlOjpGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fcGFnZS0+bWFpbkZyYW1lVmll
dygpKQorICAgICAgICAgICAgY29udmVydGVkUG9pbnQubW92ZUJ5KGZyYW1lVmlldy0+c2Nyb2xs
UG9zaXRpb24oKSk7CisgICAgICAgIGlmIChXZWJDb3JlOjpQYWdlKiBwYWdlID0gbV9wYWdlLT5j
b3JlUGFnZSgpKQorICAgICAgICAgICAgY29udmVydGVkUG9pbnQubW92ZSgwLCAtcGFnZS0+dG9w
Q29udGVudEluc2V0KCkpOworICAgIH0KKwogICAgIHJldHVybiBbW3NlbGYgYWNjZXNzaWJpbGl0
eVJvb3RPYmplY3RXcmFwcGVyXSBhY2Nlc3NpYmlsaXR5SGl0VGVzdDpjb252ZXJ0ZWRQb2ludF07
CiB9CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306508</attachid>
            <date>2017-04-07 08:44:00 -0700</date>
            <delta_ts>2017-04-11 09:26:24 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>29074</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNTA4NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE3LTA0LTA2ICBDaHJpcyBG
bGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFBERiBwbHVnaW4g
bmVlZHMgdG8gc3VwcG9ydCBQREYtRE9NIE1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDU4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFByb3ZpZGUgV2ViQ29yZSBzdXBwb3J0IGZvciBhY2Nlc3Np
YmlsaXR5IGNvbm5lY3QgdG8gUERGIGRvY3VtZW50LgorICAgICAgICBUaGlzIGluY2x1ZGVzIHRo
ZSBhYmlsaXR5IHRvIGNvbm5lY3QgYSBQREYgYW5ub3RhdGlvbiBjcmVhdGVkIG5vZGUgd2l0aGlu
IFdlYktpdCB0byAKKyAgICAgICAgIGl0cyBQREZBbm5vdGF0aW9uIHBhcmVudCAodGhyb3VnaCB1
c2Ugb2Ygc2hhZG93UGx1Z2luUGFyZW50KS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpBWFBvc3ROb3RpZmljYXRpb25XaXRoVXNlckluZm8p
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyTWFjLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyIHNoYWRvd1BsdWdpblBhcmVudF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6XSk6CisgICAgICAgICogaHRt
bC9IVE1MQXR0cmlidXRlTmFtZXMuaW46CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3QmFz
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlld0Jhc2U6OmFjY2Vzc2liaWxpdHlTaGFk
b3dQbHVnaW5QYXJlbnRGb3JFbGVtZW50KToKKwogMjAxNy0wNC0wNiAgWW91ZW5uIEZhYmxldCAg
PHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgW0RlYnVnXSBBU1NFUlQoIXRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpIG9uIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBp
L2NvcnMvY29ycy1wcmVmbGlnaHQtc3RhdHVzLXdvcmtlci5odG1sCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAkocmV2aXNpb24gMjE1MDg0KQor
KysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE0Myw3ICsxNDMsNyBAQAogICAgIC8vIEZvciBBWCBvYmplY3RzIHdpdGggZWxl
bWVudHMgdGhhdCBiYWNrIHRoZW0uCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0T3JDcmVh
dGUoUmVuZGVyT2JqZWN0Kik7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0T3JDcmVhdGUo
V2lkZ2V0Kik7Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0T3JDcmVhdGUoTm9kZSopOwor
ICAgIFdFQkNPUkVfRVhQT1JUIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3JlYXRlKE5vZGUq
KTsKIAogICAgIC8vIHVzZWQgZm9yIG9iamVjdHMgd2l0aG91dCBiYWNraW5nIGVsZW1lbnRzCiAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0T3JDcmVhdGUoQWNjZXNzaWJpbGl0eVJvbGUpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVj
dENhY2hlTWFjLm1tCShyZXZpc2lvbiAyMTUwODQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsOCAr
MjUwLDExIEBACiAgICAgYXhTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zRm9yVGVzdHMgPSB2YWx1
ZTsKIH0KIAotc3RhdGljIHZvaWQgQVhQb3N0Tm90aWZpY2F0aW9uV2l0aFVzZXJJbmZvKGlkIG9i
amVjdCwgTlNTdHJpbmcgKm5vdGlmaWNhdGlvbiwgaWQgdXNlckluZm8pCitzdGF0aWMgdm9pZCBB
WFBvc3ROb3RpZmljYXRpb25XaXRoVXNlckluZm8oQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
Km9iamVjdCwgTlNTdHJpbmcgKm5vdGlmaWNhdGlvbiwgaWQgdXNlckluZm8pCiB7CisgICAgaWYg
KGlkIGFzc29jaWF0ZWRQbHVnaW5QYXJlbnQgPSBbb2JqZWN0IGFzc29jaWF0ZWRQbHVnaW5QYXJl
bnRdKQorICAgICAgICBvYmplY3QgPSBhc3NvY2lhdGVkUGx1Z2luUGFyZW50OworICAgIAogICAg
IE5TQWNjZXNzaWJpbGl0eVBvc3ROb3RpZmljYXRpb25XaXRoVXNlckluZm8ob2JqZWN0LCBub3Rp
ZmljYXRpb24sIHVzZXJJbmZvKTsKICAgICAvLyBUbyBzaW1wbGlmeSBtb25pdG9yaW5nIGZvciBu
b3RpZmljYXRpb25zIGluIHRlc3RzLCByZXBvc3QgYXMgYSBzaW1wbGUgTlNOb3RpZmljYXRpb24g
aW5zdGVhZCBvZiBmb3JjaW5nIHRlc3QgaW5mcmFzdHVjdHVyZSB0byBzZXR1cCBhbiBJUEMgY2xp
ZW50IGFuZCBkbyBhbGwgdGhlIHRyYW5zbGF0aW9uIGJldHdlZW4gV2ViQ29yZSB0eXBlcyBhbmQg
cGxhdGZvcm0gc3BlY2lmaWMgSVBDIHR5cGVzIGFuZCBiYWNrCiAgICAgaWYgKFVOTElLRUxZKGF4
U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uc0ZvclRlc3RzKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJNYWMuaAkocmV2aXNpb24gMjE1MDg0KQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzUsNCArMzUsNyBAQAogLSAoaWQpdGV4dE1hcmtlclJhbmdlRnJv
bVZpc2libGVQb3NpdGlvbnM6KGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYpc3RhcnRQ
b3NpdGlvbiBlbmRQb3NpdGlvbjooY29uc3QgV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uJillbmRQ
b3NpdGlvbjsKIC0gKGlkKXRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246KGNvbnN0IFdlYkNv
cmU6OlZpc2libGVQb3NpdGlvbiYpdmlzaWJsZVBvczsKIAorLy8gV2hlbiBhIHBsdWdpbiB1c2Vz
IGEgV2ViS2l0IGNvbnRyb2wgdG8gYWN0IGFzIGEgc3Vycm9nYXRlIHZpZXcgKGUuZy4gUERGIHVz
ZSBXZWJLaXQgdG8gY3JlYXRlIHRleHQgZmllbGRzKS4KKy0gKGlkKWFzc29jaWF0ZWRQbHVnaW5Q
YXJlbnQ7CisKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFj
Lm1tCShyZXZpc2lvbiAyMTUwODQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21h
Yy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
NjMsNiArNjMsOCBAQAogI2ltcG9ydCAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2ltcG9ydCAiTWFp
bkZyYW1lLmgiCiAjaW1wb3J0ICJQYWdlLmgiCisjaW1wb3J0ICJQbHVnaW5Eb2N1bWVudC5oIgor
I2ltcG9ydCAiUGx1Z2luVmlld0Jhc2UuaCIKICNpbXBvcnQgIlJlbmRlclRleHRDb250cm9sLmgi
CiAjaW1wb3J0ICJSZW5kZXJWaWV3LmgiCiAjaW1wb3J0ICJSZW5kZXJXaWRnZXQuaCIKQEAgLTE2
ODIsNiArMTY4NCwyMSBAQAogICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlz
aWJsZVBvc2l0aW9uczpzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkgZW5kUG9zaXRpb246c2VsZWN0
aW9uLnZpc2libGVFbmQoKV07CiB9CiAKKy0gKGlkKWFzc29jaWF0ZWRQbHVnaW5QYXJlbnQKK3sK
KyAgICBpZiAoIW1fb2JqZWN0IHx8ICFtX29iamVjdC0+aGFzQXR0cmlidXRlKHhfYXBwbGVfcGRm
X2Fubm90YXRpb25BdHRyKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBpZiAoIW1f
b2JqZWN0LT5kb2N1bWVudCgpLT5pc1BsdWdpbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgICAgIAorICAgIFdpZGdldCogcGx1Z2luV2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UGx1
Z2luRG9jdW1lbnQqPihtX29iamVjdC0+ZG9jdW1lbnQoKSktPnBsdWdpbldpZGdldCgpOworICAg
IGlmICghcGx1Z2luV2lkZ2V0IHx8ICFwbHVnaW5XaWRnZXQtPmlzUGx1Z2luVmlld0Jhc2UoKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3
QmFzZSo+KHBsdWdpbldpZGdldCktPmFjY2Vzc2liaWxpdHlBc3NvY2lhdGVkUGx1Z2luUGFyZW50
Rm9yRWxlbWVudChtX29iamVjdC0+ZWxlbWVudCgpKTsKK30KKwogLSAoQ0dQb2ludCljb252ZXJ0
UG9pbnRUb1NjcmVlblNwYWNlOihGbG9hdFBvaW50ICYpcG9pbnQKIHsKICAgICBGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IG1fb2JqZWN0LT5kb2N1bWVudEZyYW1lVmlldygpOwpAQCAtMzA4Myw2ICsz
MTAwLDEwIEBACiAgICAgICAgIHJldHVybiBjb252ZXJ0U3RyaW5nc1RvTlNBcnJheShjbGFzc0xp
c3QpOwogICAgIH0KICAgICAKKyAgICAvLyBUaGlzIGFsbG93cyB1cyB0byBjb25uZWN0IHRvIGEg
cGx1Z2luIHRoYXQgY3JlYXRlcyBhIHNoYWRvdyBub2RlIGZvciBlZGl0aW5nIChsaWtlIFBERnMp
LgorICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJfQVhBc3NvY2lhdGVk
UGx1Z2luUGFyZW50Il0pCisgICAgICAgIHJldHVybiBbc2VsZiBhc3NvY2lhdGVkUGx1Z2luUGFy
ZW50XTsKKyAgICAKICAgICAvLyB0aGlzIGlzIHVzZWQgb25seSBieSBEdW1wUmVuZGVyVHJlZSBm
b3IgdGVzdGluZwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWENs
aWNrUG9pbnQiXSkKICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFBvaW50Om1fb2Jq
ZWN0LT5jbGlja1BvaW50KCldOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0cmli
dXRlTmFtZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0cmli
dXRlTmFtZXMuaW4JKHJldmlzaW9uIDIxNTA4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEF0dHJpYnV0ZU5hbWVzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zOTIsMyArMzkyLDUgQEAKIHgt
YXBwbGUtZGF0YS1kZXRlY3RvcnMKIHgtYXBwbGUtZGF0YS1kZXRlY3RvcnMtdHlwZQogeC1hcHBs
ZS1kYXRhLWRldGVjdG9ycy1yZXN1bHQKKworeC1hcHBsZS1wZGYtYW5ub3RhdGlvbgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3QmFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlld0Jhc2UuaAkocmV2aXNpb24gMjE1MDg0KQor
KysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3QmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSwxMCBAQAogI2luY2x1ZGUgIldpZGdldC5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCisjaWYgUExBVEZPUk0oQ09DT0EpCit0eXBlZGVmIHN0cnVjdCBv
YmpjX29iamVjdCogaWQ7CisjZW5kaWYKKwogbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRXhl
Y1N0YXRlOwogICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwpAQCAtODMsNiArODcsMTAgQEAKICAg
ICAKICAgICB2aXJ0dWFsIHZvaWQgd2lsbERldGF0Y2hSZW5kZXJlcigpIHsgfQogCisjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgdmlydHVhbCBpZCBhY2Nlc3NpYmlsaXR5QXNzb2NpYXRlZFBsdWdp
blBhcmVudEZvckVsZW1lbnQoRWxlbWVudCopIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKyNl
bmRpZgorICAgIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IFBsdWdpblZpZXdCYXNlKFBsYXRm
b3JtV2lkZ2V0IHdpZGdldCA9IDApIDogV2lkZ2V0KHdpZGdldCkgeyB9CiB9OwpJbmRleDogU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjE1MDg0KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTctMDQtMDYgIENocmlzIEZsZWl6YWNoICA8
Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KKworICAgICAgICBBWDogUERGIHBsdWdpbiBuZWVkcyB0byBz
dXBwb3J0IFBERi1ET00gTW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTcwNTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUHJvdmlkZSBhY2Nlc3MgdG8gRE9NIG9iamVjdHMgd2l0aCBQREYgZG9jdW1l
bnQuIFRoaXMgbWVhbjoKKyAgICAgICAgICAgMSkgU3VwcG9ydCBhIGRpZmZlcmVudCBzZXQgb2Yg
YXR0cmlidXRlcyBmb3IgV0tQREZQbHVnaW5BY2Nlc3NpYmlsaXR5T2JqZWN0LgorICAgICAgICAg
ICAgICAgIFdLUERGUGx1Z2luQWNjZXNzaWJpbGl0eU9iamVjdCBpcyBub3cgYSBncm91cCBpbnN0
ZWFkIG9mIGZvcndhcmRpbmcgYXR0cmlidXRlIGNhbGxzIHRvIHRoZSBwZGYgbGF5ZXIuCisgICAg
ICAgICAgIDIpIENvbm5lY3QgdGhlIGZvY3VzZWQgVUkgZWxlbWVudCB0byB0aGUgYWN0aXZlIGFu
bm90YXRpb24gaWYgcG9zc2libGUuCisgICAgICAgICAgIDMpIE1hcmsgdGhlIFBERiBhc3NvY2lh
dGVkIG5vZGVzIHdpdGggYW4gYXR0cmlidXRlIHNvIHRoZXkgY2FuIGJlIGlkZW50aWZpZWQgbGF0
ZXIgc28gdGhlaXIgY29ycmVjdCBwYXJlbnQgY2FuIGJlIGZvdW5kLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BERi9QREZMYXllckNvbnRyb2xsZXJTUEkuaDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
UGx1Z2lucy9QREYvUERGUGx1Z2luLm1tOgorICAgICAgICAoLVtXS1BERlBsdWdpbkFjY2Vzc2li
aWxpdHlPYmplY3QgcGRmTGF5ZXJDb250cm9sbGVyXSk6CisgICAgICAgICgtW1dLUERGUGx1Z2lu
QWNjZXNzaWJpbGl0eU9iamVjdCBzZXRQZGZMYXllckNvbnRyb2xsZXI6XSk6CisgICAgICAgICgt
W1dLUERGUGx1Z2luQWNjZXNzaWJpbGl0eU9iamVjdCBjb252ZXJ0UmVjdFRvU2NyZWVuU3BhY2U6
XSk6CisgICAgICAgICgtW1dLUERGUGx1Z2luQWNjZXNzaWJpbGl0eU9iamVjdCBhY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWU6XSk6CisgICAgICAgICgtW1dLUERGUGx1Z2luQWNjZXNzaWJpbGl0
eU9iamVjdCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNdKToKKyAgICAgICAgKC1bV0tQREZQ
bHVnaW5BY2Nlc3NpYmlsaXR5T2JqZWN0IGFjY2Vzc2liaWxpdHlBY3Rpb25OYW1lc10pOgorICAg
ICAgICAoLVtXS1BERlBsdWdpbkFjY2Vzc2liaWxpdHlPYmplY3QgYWNjZXNzaWJpbGl0eVBhcmFt
ZXRlcml6ZWRBdHRyaWJ1dGVOYW1lc10pOgorICAgICAgICAoLVtXS1BERlBsdWdpbkFjY2Vzc2li
aWxpdHlPYmplY3QgYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnRdKToKKyAgICAgICAgKC1b
V0tQREZQbHVnaW5BY2Nlc3NpYmlsaXR5T2JqZWN0IGFjY2Vzc2liaWxpdHlBc3NvY2lhdGVkQ29u
dHJvbEZvckFubm90YXRpb246XSk6CisgICAgICAgICgtW1dLUERGUGx1Z2luQWNjZXNzaWJpbGl0
eU9iamVjdCBhY2Nlc3NpYmlsaXR5SGl0VGVzdDpdKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1
Z2luOjpjb252ZXJ0RnJvbVJvb3RWaWV3VG9QREZWaWV3KToKKyAgICAgICAgKFdlYktpdDo6UERG
UGx1Z2luOjpjb252ZXJ0RnJvbVBERlZpZXdUb1NjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OlBE
RlBsdWdpbjo6cGx1Z2luSGFuZGxlc0NvbnRlbnRPZmZzZXRGb3JBY2Nlc3NpYmlsaXR5SGl0VGVz
dCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6YXhPYmplY3RDYWNoZSk6CisgICAgICAg
IChXZWJLaXQ6OlBERlBsdWdpbjo6YWNjZXNzaWJpbGl0eVNoYWRvd1BsdWdpblBhcmVudEZvckVs
ZW1lbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luQW5ub3Rh
dGlvbi5tbToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luQW5ub3RhdGlvbjo6YXR0YWNoKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmg6CisgICAgICAgIChXZWJLaXQ6
OlBsdWdpbjo6YWNjZXNzaWJpbGl0eVNoYWRvd1BsdWdpblBhcmVudEZvckVsZW1lbnQpOgorICAg
ICAgICAoV2ViS2l0OjpQbHVnaW46OnBsdWdpbkhhbmRsZXNDb250ZW50T2Zmc2V0Rm9yQWNjZXNz
aWJpbGl0eUhpdFRlc3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6YWNjZXNzaWJpbGl0eVNoYWRvd1Bs
dWdpblBhcmVudEZvckVsZW1lbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5WaWV3Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RN
YWMubW06CisgICAgICAgICgtW1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QgYWNjZXNzaWJp
bGl0eUhpdFRlc3Q6XSk6CisKIDIwMTctMDQtMDYgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0
ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUu
aCBhbmQgV0tDb250ZW50RXh0ZW5zaW9uLmggdG8gcHVibGljIFdlYktpdC5oCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERkxheWVyQ29udHJvbGxlclNQSS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERG
TGF5ZXJDb250cm9sbGVyU1BJLmgJKHJldmlzaW9uIDIxNTA4NCkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OCw5ICsxNTgsMjAgQEAKIC0gKE5TVmFsdWUgKilhY2Nlc3NpYmlsaXR5UmFu
Z2VGb3JMaW5lQXR0cmlidXRlRm9yUGFyYW1ldGVyOihpZClwYXJhbWV0ZXI7CiAtIChOU1N0cmlu
ZyAqKWFjY2Vzc2liaWxpdHlTdHJpbmdGb3JSYW5nZUF0dHJpYnV0ZUZvclBhcmFtZXRlcjooaWQp
cGFyYW1ldGVyOwogLSAoTlNWYWx1ZSAqKWFjY2Vzc2liaWxpdHlCb3VuZHNGb3JSYW5nZUF0dHJp
YnV0ZUZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGVyOworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTAxMzAwCistIChOU0FycmF5ICopYWNjZXNzaWJpbGl0eUNoaWxkcmVu
OworLSAodm9pZClzZXRBY2Nlc3NpYmlsaXR5UGFyZW50OihpZClwYXJlbnQ7CistIChpZClhY2Nl
c3NpYmlsaXR5RWxlbWVudEZvckFubm90YXRpb246KFBERkFubm90YXRpb24gKilhbm5vdGF0aW9u
OworI2VuZGlmCiAKIEBlbmQKIAorI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
Pj0gMTAxMzAwCitAaW50ZXJmYWNlIFBERkFubm90YXRpb24gKEFjY2Vzc2liaWxpdHlQcml2YXRl
KQorLSAoaWQpYWNjZXNzaWJpbGl0eU5vZGU7CitAZW5kCiAjZW5kaWYKIAorI2VuZGlmCisKICNl
bmRpZiAvLyBQREZMYXllckNvbnRyb2xsZXJTUElfaApJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCShyZXZpc2lvbiAyMTUwODQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiUGx1Z2luLmgiCiAjaW5j
bHVkZSAiV2ViRXZlbnQuaCIKICNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0RGF0YS5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvQVhPYmplY3RDYWNoZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQWZmaW5l
VHJhbnNmb3JtLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GaW5kT3B0aW9ucy5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvU2Nyb2xsYWJsZUFyZWEuaD4KQEAgLTU3LDYgKzU4LDcgQEAKIH0KIAogbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgQVhPYmplY3RDYWNoZTsKIGNsYXNzIEVsZW1lbnQ7CiBzdHJ1
Y3QgUGx1Z2luSW5mbzsKIH0KQEAgLTEwMyw2ICsxMDUsNyBAQAogICAgIHZvaWQgYXR0ZW1wdFRv
VW5sb2NrUERGKGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpOwogCiAgICAgV2ViQ29yZTo6RmxvYXRS
ZWN0IGNvbnZlcnRGcm9tUERGVmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
IGNvbnN0OworICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BERlZp
ZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKICAgICBXZWJDb3JlOjpJbnRSZWN0
IGJvdW5kc09uU2NyZWVuKCkgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBzaG93Q29udGV4dE1lbnVB
dFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CkBAIC0xMTQsNiArMTE3LDkgQEAKIAog
ICAgIGJvb2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKKyAgICBQREZQbHVnaW5Bbm5vdGF0aW9uKiBh
Y3RpdmVBbm5vdGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVBbm5vdGF0aW9uLmdldCgp
OyB9CisgICAgV2ViQ29yZTo6QVhPYmplY3RDYWNoZSogYXhPYmplY3RDYWNoZSgpIGNvbnN0Owor
ICAgIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBQREZQbHVnaW4oV2ViRnJhbWUqKTsKIApAQCAt
MTY4LDExICsxNzQsMTMgQEAKICAgICBib29sIGhhbmRsZVNjcm9sbChXZWJDb3JlOjpTY3JvbGxE
aXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5KSBvdmVycmlkZTsKICAgICBSZWZQ
dHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBsaXZlUmVzb3VyY2VEYXRhKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdm9pZCB3aWxsRGV0YXRjaFJlbmRlcmVyKCkgb3ZlcnJpZGU7Ci0KKyAgICBib29s
IHBsdWdpbkhhbmRsZXNDb250ZW50T2Zmc2V0Rm9yQWNjZXNzaWJpbGl0eUhpdFRlc3QoKSBjb25z
dCBvdmVycmlkZTsKKyAgICAKICAgICBib29sIGlzQmVpbmdBc3luY2hyb25vdXNseUluaXRpYWxp
emVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIFJldGFpblB0cjxQ
REZEb2N1bWVudD4gcGRmRG9jdW1lbnRGb3JQcmludGluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fcGRmRG9jdW1lbnQ7IH0KICAgICBOU09iamVjdCAqYWNjZXNzaWJpbGl0eU9iamVjdCgp
IGNvbnN0IG92ZXJyaWRlOworICAgIGlkIGFjY2Vzc2liaWxpdHlBc3NvY2lhdGVkUGx1Z2luUGFy
ZW50Rm9yRWxlbWVudChXZWJDb3JlOjpFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB1
bnNpZ25lZCBjb3VudEZpbmRNYXRjaGVzKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBXZWJDb3JlOjpG
aW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBm
aW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBXZWJDb3JlOjpGaW5kT3B0aW9ucywgdW5z
aWduZWQgbWF4TWF0Y2hDb3VudCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQkocmV2aXNpb24gMjE1MDg0
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0J
KHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0pTU3RyaW5nUmVmQ0YuaD4KICNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KICNpbXBvcnQgPFF1
YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9BWE9iamVjdENhY2hlLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0FyY2hpdmVSZXNvdXJjZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9D
aHJvbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ3Vyc29yLmg+CkBAIC0xMzIsNyArMTMzLDYgQEAK
IAogQGltcGxlbWVudGF0aW9uIFdLUERGUGx1Z2luQWNjZXNzaWJpbGl0eU9iamVjdAogCi1Ac3lu
dGhlc2l6ZSBwZGZMYXllckNvbnRyb2xsZXI9X3BkZkxheWVyQ29udHJvbGxlcjsKIEBzeW50aGVz
aXplIHBhcmVudD1fcGFyZW50OwogQHN5bnRoZXNpemUgcGRmUGx1Z2luPV9wZGZQbHVnaW47CiAK
QEAgLTE0NiwxNSArMTQ2LDUxIEBACiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKKy0gKFBERkxheWVy
Q29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlcgoreworICAgIHJldHVybiBfcGRmTGF5ZXJD
b250cm9sbGVyOworfQorCistICh2b2lkKXNldFBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJD
b250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyCit7CisgICAgX3BkZkxheWVyQ29udHJvbGxl
ciA9IHBkZkxheWVyQ29udHJvbGxlcjsKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDEwMTMwMAorICAgIFtfcGRmTGF5ZXJDb250cm9sbGVyIHNldEFjY2Vzc2liaWxpdHlQ
YXJlbnQ6c2VsZl07CisjZW5kaWYKK30KKwogLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNJZ25vcmVk
CiB7CiAgICAgcmV0dXJuIE5POwogfQogCisvLyBUaGlzIGlzIGNhbGxlZCBieSBQREZBY2Nlc3Np
YmlsaXR5Tm9kZXMgZnJvbSBpbnNpZGUgUERGS2l0IHRvIGdldCBmaW5hbCBib3VuZHMuCistIChO
U1JlY3QpY29udmVydFJlY3RUb1NjcmVlblNwYWNlOihOU1JlY3QpcmVjdAoreworICAgIHJldHVy
biBfcGRmUGx1Z2luLT5jb252ZXJ0RnJvbVBERlZpZXdUb1NjcmVlbihyZWN0KTsKK30KKwogLSAo
aWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmluZyAqKWF0dHJpYnV0ZQogewog
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlQYXJlbnRB
dHRyaWJ1dGVdKQogICAgICAgICByZXR1cm4gX3BhcmVudDsKKyAgICBpZiAoW2F0dHJpYnV0ZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VG9wTGV2ZWxVSUVsZW1lbnRBdHRyaWJ1dGVd
KQorICAgICAgICByZXR1cm4gW19wYXJlbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5T
QWNjZXNzaWJpbGl0eVRvcExldmVsVUlFbGVtZW50QXR0cmlidXRlXTsKKyAgICBpZiAoW2F0dHJp
YnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5V2luZG93QXR0cmlidXRlXSkKKyAg
ICAgICAgcmV0dXJuIFtfcGFyZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vz
c2liaWxpdHlXaW5kb3dBdHRyaWJ1dGVdOworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlTaXplQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtOU1Zh
bHVlIHZhbHVlV2l0aFNpemU6X3BkZlBsdWdpbi0+Ym91bmRzT25TY3JlZW4oKS5zaXplKCldOwor
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlFbmFibGVk
QXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtfcGFyZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlFbmFibGVkQXR0cmlidXRlXTsKKyAgICBpZiAoW2F0dHJp
YnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGVdKQor
ICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUG9pbnQ6X3BkZlBsdWdpbi0+Ym91bmRz
T25TY3JlZW4oKS5sb2NhdGlvbigpXTsKKworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTAxMzAwCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIEBbIF9wZGZMYXll
ckNvbnRyb2xsZXIgXTsKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5Um9sZUF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlH
cm91cFJvbGU7CisjZWxzZQogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0Fj
Y2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0ZV0pCiAgICAgICAgIHJldHVybiBbX3BkZkxheWVyQ29u
dHJvbGxlciBhY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdOwogICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRBdHRyaWJ1dGVdKQpA
QCAtMTY1LDIyICsyMDEsMTMgQEAKICAgICAgICAgcmV0dXJuIFtfcGRmTGF5ZXJDb250cm9sbGVy
IGFjY2Vzc2liaWxpdHlOdW1iZXJPZkNoYXJhY3RlcnNBdHRyaWJ1dGVdOwogICAgIGlmIChbYXR0
cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWaXNpYmxlQ2hhcmFjdGVyUmFu
Z2VBdHRyaWJ1dGVdKQogICAgICAgICByZXR1cm4gW19wZGZMYXllckNvbnRyb2xsZXIgYWNjZXNz
aWJpbGl0eVZpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJpYnV0ZV07Ci0gICAgaWYgKFthdHRyaWJ1
dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRvcExldmVsVUlFbGVtZW50QXR0cmli
dXRlXSkKLSAgICAgICAgcmV0dXJuIFtfcGFyZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1
ZTpOU0FjY2Vzc2liaWxpdHlUb3BMZXZlbFVJRWxlbWVudEF0dHJpYnV0ZV07CiAgICAgaWYgKFth
dHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJvbGVBdHRyaWJ1dGVdKQog
ICAgICAgICByZXR1cm4gW19wZGZMYXllckNvbnRyb2xsZXIgYWNjZXNzaWJpbGl0eVJvbGVBdHRy
aWJ1dGVdOwogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlSb2xlRGVzY3JpcHRpb25BdHRyaWJ1dGVdKQogICAgICAgICByZXR1cm4gW19wZGZMYXllckNv
bnRyb2xsZXIgYWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbkF0dHJpYnV0ZV07Ci0gICAgaWYg
KFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVdpbmRvd0F0dHJpYnV0
ZV0pCi0gICAgICAgIHJldHVybiBbX3BhcmVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6
TlNBY2Nlc3NpYmlsaXR5V2luZG93QXR0cmlidXRlXTsKLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2l6ZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVy
biBbTlNWYWx1ZSB2YWx1ZVdpdGhTaXplOl9wZGZQbHVnaW4tPmJvdW5kc09uU2NyZWVuKCkuc2l6
ZSgpXTsKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
Rm9jdXNlZEF0dHJpYnV0ZV0pCiAgICAgICAgIHJldHVybiBbX3BhcmVudCBhY2Nlc3NpYmlsaXR5
QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5Rm9jdXNlZEF0dHJpYnV0ZV07Ci0gICAgaWYg
KFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUVuYWJsZWRBdHRyaWJ1
dGVdKQotICAgICAgICByZXR1cm4gW19wYXJlbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVl
Ok5TQWNjZXNzaWJpbGl0eUVuYWJsZWRBdHRyaWJ1dGVdOwotICAgIGlmIChbYXR0cmlidXRlIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlQb3NpdGlvbkF0dHJpYnV0ZV0pCi0gICAgICAg
IHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhQb2ludDpfcGRmUGx1Z2luLT5ib3VuZHNPblNjcmVl
bigpLmxvY2F0aW9uKCldOworI2VuZGlmCiAKICAgICByZXR1cm4gMDsKIH0KQEAgLTIxMywyMCAr
MjQwLDI3IEBACiAgICAgc3RhdGljIE5TQXJyYXkgKmF0dHJpYnV0ZU5hbWVzID0gMDsKIAogICAg
IGlmICghYXR0cmlidXRlTmFtZXMpIHsKLSAgICAgICAgYXR0cmlidXRlTmFtZXMgPSBAW05TQWNj
ZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlLAotICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U2Vs
ZWN0ZWRUZXh0QXR0cmlidXRlLAotICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRU
ZXh0UmFuZ2VBdHRyaWJ1dGUsCi0gICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlOdW1iZXJPZkNo
YXJhY3RlcnNBdHRyaWJ1dGUsCi0gICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlWaXNpYmxlQ2hh
cmFjdGVyUmFuZ2VBdHRyaWJ1dGUsCisgICAgICAgIGF0dHJpYnV0ZU5hbWVzID0gQFsKICAgICAg
ICAgICAgIE5TQWNjZXNzaWJpbGl0eVBhcmVudEF0dHJpYnV0ZSwKLSAgICAgICAgICAgIE5TQWNj
ZXNzaWJpbGl0eVJvbGVBdHRyaWJ1dGUsCiAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlXaW5k
b3dBdHRyaWJ1dGUsCiAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlUb3BMZXZlbFVJRWxlbWVu
dEF0dHJpYnV0ZSwKICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbkF0
dHJpYnV0ZSwKICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVNpemVBdHRyaWJ1dGUsCisgICAg
ICAgICAgICBOU0FjY2Vzc2liaWxpdHlFbmFibGVkQXR0cmlidXRlLAorICAgICAgICAgICAgTlNB
Y2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGUsCiAgICAgICAgICAgICBOU0FjY2Vzc2liaWxp
dHlGb2N1c2VkQXR0cmlidXRlLAotICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5RW5hYmxlZEF0
dHJpYnV0ZSwKLSAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVBvc2l0aW9uQXR0cmlidXRlXTsK
KyAgICAgICAgICAgIC8vIFBERkxheWVyQ29udHJvbGxlciBoYXMgaXRzIG93biBhY2Nlc3NpYmls
aXR5Q2hpbGRyZW4uCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEz
MDAKKyAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlCisjZWxzZQor
ICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5Um9sZUF0dHJpYnV0ZSwKKyAgICAgICAgICAgIE5T
QWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlLAorICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5
U2VsZWN0ZWRUZXh0QXR0cmlidXRlLAorICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U2VsZWN0
ZWRUZXh0UmFuZ2VBdHRyaWJ1dGUsCisgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlOdW1iZXJP
ZkNoYXJhY3RlcnNBdHRyaWJ1dGUsCisgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlWaXNpYmxl
Q2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGUKKyNlbmRpZgorICAgICAgICAgICAgXTsKICAgICAgICAg
W2F0dHJpYnV0ZU5hbWVzIHJldGFpbl07CiAgICAgfQogCkBAIC0yMzUsNiArMjY5LDkgQEAKIAog
LSAoTlNBcnJheSAqKWFjY2Vzc2liaWxpdHlBY3Rpb25OYW1lcwogeworI2lmIF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAwCisgICAgcmV0dXJuIG5pbDsKKyNlbHNlCiAg
ICAgc3RhdGljIE5TQXJyYXkgKmFjdGlvbk5hbWVzID0gMDsKICAgICAKICAgICBpZiAoIWFjdGlv
bk5hbWVzKQpAQCAtMjQxLDYgKzI3OCw3IEBACiAgICAgICAgIGFjdGlvbk5hbWVzID0gW1tOU0Fy
cmF5IGFycmF5V2l0aE9iamVjdDpOU0FjY2Vzc2liaWxpdHlTaG93TWVudUFjdGlvbl0gcmV0YWlu
XTsKICAgICAKICAgICByZXR1cm4gYWN0aW9uTmFtZXM7CisjZW5kaWYKIH0KIAogLSAodm9pZClh
Y2Nlc3NpYmlsaXR5UGVyZm9ybUFjdGlvbjooTlNTdHJpbmcgKilhY3Rpb24KQEAgLTI2MSwxNyAr
Mjk5LDU5IEBACiAKIC0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5UGFyYW1ldGVyaXplZEF0dHJp
YnV0ZU5hbWVzCiB7CisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEz
MDAKKyAgICByZXR1cm4gbmlsOworI2Vsc2UKICAgICByZXR1cm4gW19wZGZMYXllckNvbnRyb2xs
ZXIgYWNjZXNzaWJpbGl0eVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lc107CisjZW5kaWYKIH0K
IAogLSAoaWQpYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnQKIHsKKyNpZiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTMwMAorICAgIGlmIChXZWJLaXQ6OlBERlBsdWdp
bkFubm90YXRpb24qIGFjdGl2ZUFubm90YXRpb24gPSBfcGRmUGx1Z2luLT5hY3RpdmVBbm5vdGF0
aW9uKCkpIHsKKyAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGV4aXN0aW5nQ2FjaGUgPSBfcGRm
UGx1Z2luLT5heE9iamVjdENhY2hlKCkpIHsKKyAgICAgICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBvYmplY3QgPSBleGlzdGluZ0NhY2hlLT5nZXRPckNyZWF0ZShhY3RpdmVBbm5vdGF0
aW9uLT5lbGVtZW50KCkpKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICAg
ICAgICAgICAgICAgIHJldHVybiBbb2JqZWN0LT53cmFwcGVyKCkgYWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZVZhbHVlOkAiX0FYQXNzb2NpYXRlZFBsdWdpblBhcmVudCJdOworI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIHBvcAorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBuaWw7CisjZWxzZQog
ICAgIHJldHVybiBzZWxmOworI2VuZGlmCiB9CiAKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDEwMTMwMAorLSAoaWQpYWNjZXNzaWJpbGl0eUFzc29jaWF0ZWRDb250cm9s
Rm9yQW5ub3RhdGlvbjooUERGQW5ub3RhdGlvbiAqKWFubm90YXRpb24KK3sKKyAgICAvLyBPbmx5
IGFjdGl2ZSBhbm5vdGF0aW9ucyBzZWVtIHRvIGhhdmUgdGhlaXIgYXNzb2NpYXRlZCBjb250cm9s
cyBhdmFpbGFibGUuCisgICAgV2ViS2l0OjpQREZQbHVnaW5Bbm5vdGF0aW9uKiBhY3RpdmVBbm5v
dGF0aW9uID0gX3BkZlBsdWdpbi0+YWN0aXZlQW5ub3RhdGlvbigpOworICAgIGlmICghYWN0aXZl
QW5ub3RhdGlvbiB8fCAhW2FjdGl2ZUFubm90YXRpb24tPmFubm90YXRpb24oKSBpc0VxdWFsOmFu
bm90YXRpb25dKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIEFYT2JqZWN0Q2FjaGUq
IGNhY2hlID0gX3BkZlBsdWdpbi0+YXhPYmplY3RDYWNoZSgpOworICAgIGlmICghY2FjaGUpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0
ID0gY2FjaGUtPmdldE9yQ3JlYXRlKGFjdGl2ZUFubm90YXRpb24tPmVsZW1lbnQoKSk7CisgICAg
aWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gb2JqZWN0LT53
cmFwcGVyKCk7Cit9CisjZW5kaWYKKwogLSAoaWQpYWNjZXNzaWJpbGl0eUhpdFRlc3Q6KE5TUG9p
bnQpcG9pbnQKIHsKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTMw
MAorICAgIHBvaW50ID0gX3BkZlBsdWdpbi0+Y29udmVydEZyb21Sb290Vmlld1RvUERGVmlldyhJ
bnRQb2ludChwb2ludCkpOworICAgIHJldHVybiBbX3BkZkxheWVyQ29udHJvbGxlciBhY2Nlc3Np
YmlsaXR5SGl0VGVzdDpwb2ludF07CisjZWxzZQogICAgIHJldHVybiBzZWxmOworI2VuZGlmCiB9
CiAKIEBlbmQKQEAgLTEyMDYsNiArMTI4NiwxMiBAQAogICAgIEludFBvaW50IHBvaW50SW5QbHVn
aW5Db29yZGluYXRlcyhwb2ludC54KCksIHNpemUoKS5oZWlnaHQoKSAtIHBvaW50LnkoKSk7CiAg
ICAgcmV0dXJuIG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybS5pbnZlcnNlKCkudmFsdWVfb3Io
QWZmaW5lVHJhbnNmb3JtKCkpLm1hcFBvaW50KHBvaW50SW5QbHVnaW5Db29yZGluYXRlcyk7CiB9
CisgICAgCitJbnRQb2ludCBQREZQbHVnaW46OmNvbnZlcnRGcm9tUm9vdFZpZXdUb1BERlZpZXco
Y29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IHBvaW50SW5QbHVn
aW5Db29yZGluYXRlcyA9IG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybS5tYXBQb2ludChwb2lu
dCk7CisgICAgcmV0dXJuIEludFBvaW50KHBvaW50SW5QbHVnaW5Db29yZGluYXRlcy54KCksIHNp
emUoKS5oZWlnaHQoKSAtIHBvaW50SW5QbHVnaW5Db29yZGluYXRlcy55KCkpOworfQogCiBGbG9h
dFJlY3QgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVBERlZpZXdUb1NjcmVlbihjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpIGNvbnN0CiB7CkBAIC0xMjE0LDEwICsxMzAwLDkgQEAKICAgICBpZiAoIWZyYW1l
VmlldykKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwogCi0gICAgRmxvYXRQb2ludCBvcmln
aW5JblBsdWdpbkNvb3JkaW5hdGVzKHJlY3QueCgpLCBzaXplKCkuaGVpZ2h0KCkgLSByZWN0Lnko
KSAtIHJlY3QuaGVpZ2h0KCkpOwotICAgIEZsb2F0UmVjdCByZWN0SW5Sb290Vmlld0Nvb3JkaW5h
dGVzID0gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihBZmZp
bmVUcmFuc2Zvcm0oKSkubWFwUmVjdChGbG9hdFJlY3Qob3JpZ2luSW5QbHVnaW5Db29yZGluYXRl
cywgcmVjdC5zaXplKCkpKTsKLQotICAgIHJldHVybiBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3Jl
ZW4oZW5jbG9zaW5nSW50UmVjdChyZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKSk7CisgICAgRmxv
YXRSZWN0IHVwZGF0ZWRSZWN0ID0gcmVjdDsKKyAgICB1cGRhdGVkUmVjdC5zZXRMb2NhdGlvbihj
b252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KEludFBvaW50KHVwZGF0ZWRSZWN0LmxvY2F0aW9u
KCkpKSk7CisgICAgcmV0dXJuIHdlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT5wYWdlKCktPmNocm9t
ZSgpLnJvb3RWaWV3VG9TY3JlZW4oZW5jbG9zaW5nSW50UmVjdCh1cGRhdGVkUmVjdCkpOwogfQog
CiBJbnRSZWN0IFBERlBsdWdpbjo6Ym91bmRzT25TY3JlZW4oKSBjb25zdApAQCAtMTY3NCw2ICsx
NzU5LDE3IEBACiAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShwZGZEYXRhKTsK
IH0KIAorYm9vbCBQREZQbHVnaW46OnBsdWdpbkhhbmRsZXNDb250ZW50T2Zmc2V0Rm9yQWNjZXNz
aWJpbGl0eUhpdFRlc3QoKSBjb25zdAoreworICAgIC8vIFRoZSBQREYgcGx1Z2luIGhhbmRsZXMg
dGhlIHNjcm9sbCB2aWV3IG9mZnNldCBuYXRpdmVseSBhcyBwYXJ0IG9mIHRoZSBsYXllciBjb252
ZXJzaW9ucy4KKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTMwMAor
ICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwor
ICAgIAogdm9pZCBQREZQbHVnaW46OnNhdmVUb1BERigpCiB7CiAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBwcm9iYWJseSBub3RpZnkgdGhlIHVzZXIgdGhhdCB0aGV5IGNhbid0IHNhdmUgYmVmb3Jl
IHRoZSBkb2N1bWVudCBpcyBmaW5pc2hlZCBsb2FkaW5nLgpAQCAtMjAxNCw2ICsyMTEwLDExIEBA
CiAKICAgICByZXR1cm4gTlNSZWN0RnJvbUNHUmVjdChuZXdSZWN0KTsKIH0KKyAgICAKK1dlYkNv
cmU6OkFYT2JqZWN0Q2FjaGUqIFBERlBsdWdpbjo6YXhPYmplY3RDYWNoZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHdlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT5kb2N1bWVudCgpLT5heE9iamVjdENh
Y2hlKCk7Cit9CiAKIFdlYkNvcmU6OkZsb2F0UmVjdCBQREZQbHVnaW46OnJlY3RGb3JTZWxlY3Rp
b25JblJvb3RWaWV3KFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uKSBjb25zdAogewpAQCAtMjEwMyw2
ICsyMjA0LDIxIEBACiAgICAgcmV0dXJuIHJhd0RhdGEoKTsKIH0KIAoraWQgUERGUGx1Z2luOjph
Y2Nlc3NpYmlsaXR5QXNzb2NpYXRlZFBsdWdpblBhcmVudEZvckVsZW1lbnQoV2ViQ29yZTo6RWxl
bWVudCogZWxlbWVudCkgY29uc3QKK3sKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDEwMTMwMAorICAgIGlmICghbV9hY3RpdmVBbm5vdGF0aW9uKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIAorICAgIGlmIChtX2FjdGl2ZUFubm90YXRpb24tPmVsZW1lbnQoKSAhPSBl
bGVtZW50KQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIHJldHVybiBbbV9hY3RpdmVB
bm5vdGF0aW9uLT5hbm5vdGF0aW9uKCkgYWNjZXNzaWJpbGl0eU5vZGVdOworI2Vsc2UKKyAgICBy
ZXR1cm4gbmlsOworI2VuZGlmCit9CisgICAgCiBOU09iamVjdCAqUERGUGx1Z2luOjphY2Nlc3Np
YmlsaXR5T2JqZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9hY2Nlc3NpYmlsaXR5T2JqZWN0
LmdldCgpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQ
bHVnaW5Bbm5vdGF0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvUGx1Z2lucy9QREYvUERGUGx1Z2luQW5ub3RhdGlvbi5tbQkocmV2aXNpb24gMjE1MDg0KQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5Bbm5vdGF0
aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw3IEBACiAgICAgbV9lbGVtZW50ID0g
Y3JlYXRlQW5ub3RhdGlvbkVsZW1lbnQoKTsKIAogICAgIG1fZWxlbWVudC0+c2V0QXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihjbGFzc0F0dHIsIEF0b21pY1N0cmluZygiYW5ub3RhdGlv
biIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICBtX2VsZW1lbnQt
PnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oeF9hcHBsZV9wZGZfYW5ub3RhdGlv
bkF0dHIsIEF0b21pY1N0cmluZygidHJ1ZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpKTsKICAgICBtX2VsZW1lbnQtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNo
YW5nZUV2ZW50LCAqbV9ldmVudExpc3RlbmVyLCBmYWxzZSk7CiAgICAgbV9lbGVtZW50LT5hZGRF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQsICptX2V2ZW50TGlzdGVuZXIsIGZh
bHNlKTsKIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4u
aAkocmV2aXNpb24gMjE1MDg0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAKICNpZiBQTEFURk9S
TShDT0NPQSkKICNpbmNsdWRlICJMYXllckhvc3RpbmdDb250ZXh0LmgiCit0eXBlZGVmIHN0cnVj
dCBvYmpjX29iamVjdCogaWQ7CiAKIE9CSkNfQ0xBU1MgTlNEaWN0aW9uYXJ5OwogT0JKQ19DTEFT
UyBOU09iamVjdDsKQEAgLTI3NCw2ICsyNzUsNyBAQAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAg
IHZpcnR1YWwgUmV0YWluUHRyPFBERkRvY3VtZW50PiBwZGZEb2N1bWVudEZvclByaW50aW5nKCkg
Y29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgTlNPYmplY3QgKmFjY2Vzc2liaWxpdHlP
YmplY3QoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBpZCBhY2Nlc3NpYmlsaXR5
QXNzb2NpYXRlZFBsdWdpblBhcmVudEZvckVsZW1lbnQoV2ViQ29yZTo6RWxlbWVudCopIGNvbnN0
IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBjb3Vu
dEZpbmRNYXRjaGVzKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBXZWJDb3JlOjpGaW5kT3B0aW9ucywg
dW5zaWduZWQgbWF4TWF0Y2hDb3VudCkgPSAwOwpAQCAtMzAwLDYgKzMwMiw4IEBACiAKICAgICB2
aXJ0dWFsIHZvaWQgd2lsbERldGF0Y2hSZW5kZXJlcigpIHsgfQogCisgICAgdmlydHVhbCBib29s
IHBsdWdpbkhhbmRsZXNDb250ZW50T2Zmc2V0Rm9yQWNjZXNzaWJpbGl0eUhpdFRlc3QoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgUGx1Z2luKFBsdWdpblR5cGUp
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwCShyZXZpc2lvbiAyMTUwODQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1NSw2ICs1NTUsMTMg
QEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KICAgICAKK2lkIFBsdWdpblZpZXc6OmFjY2Vzc2liaWxp
dHlBc3NvY2lhdGVkUGx1Z2luUGFyZW50Rm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KSBjb25z
dAoreworICAgIGlmICghbV9wbHVnaW4pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJu
IG1fcGx1Z2luLT5hY2Nlc3NpYmlsaXR5QXNzb2NpYXRlZFBsdWdpblBhcmVudEZvckVsZW1lbnQo
ZWxlbWVudCk7Cit9CisgICAgCiBOU09iamVjdCAqUGx1Z2luVmlldzo6YWNjZXNzaWJpbGl0eU9i
amVjdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQgfHwgIW1fcGx1Z2luKQpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5o
CShyZXZpc2lvbiAyMTUwODQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw3IEBACiAgICAgYm9vbCBz
ZW5kQ29tcGxleFRleHRJbnB1dCh1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiB0ZXh0SW5wdXQpOwogICAgIFJldGFpblB0cjxQREZEb2N1bWVu
dD4gcGRmRG9jdW1lbnRGb3JQcmludGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luLT5wZGZE
b2N1bWVudEZvclByaW50aW5nKCk7IH0KICAgICBOU09iamVjdCAqYWNjZXNzaWJpbGl0eU9iamVj
dCgpIGNvbnN0OworICAgIGlkIGFjY2Vzc2liaWxpdHlBc3NvY2lhdGVkUGx1Z2luUGFyZW50Rm9y
RWxlbWVudChXZWJDb3JlOjpFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAg
IFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50KiBwbHVnaW5FbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gbV9wbHVnaW5FbGVtZW50LmdldCgpOyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDIxNTA4NCkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3Miw2
ICs5NzIsOCBAQAogICAgIFdlYlVSTFNjaGVtZUhhbmRsZXJQcm94eSogdXJsU2NoZW1lSGFuZGxl
ckZvclNjaGVtZShjb25zdCBTdHJpbmcmKTsKICAgICBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gYmFj
a2dyb3VuZENQVUxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kQ1BVTGltaXQ7IH0K
IAorICAgIHN0YXRpYyBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3Rm9yRnJhbWUoV2ViQ29yZTo6RnJh
bWUqKTsKKwogcHJpdmF0ZToKICAgICBXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgV2ViUGFnZUNy
ZWF0aW9uUGFyYW1ldGVycyYmKTsKIApAQCAtMTIxMiw3ICsxMjE0LDYgQEAKICAgICBzdGF0aWMg
Ym9vbCBwbGF0Zm9ybUNhbkhhbmRsZVJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0Jik7CiAKICAgICBzdGF0aWMgUGx1Z2luVmlldyogZm9jdXNlZFBsdWdpblZpZXdGb3JGcmFt
ZShXZWJDb3JlOjpGcmFtZSYpOwotICAgIHN0YXRpYyBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3Rm9y
RnJhbWUoV2ViQ29yZTo6RnJhbWUqKTsKIAogICAgIHN0YXRpYyBSZWZQdHI8V2ViQ29yZTo6UmFu
Z2U+IHJhbmdlRnJvbUVkaXRpbmdSYW5nZShXZWJDb3JlOjpGcmFtZSYsIGNvbnN0IEVkaXRpbmdS
YW5nZSYsIEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyA9IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVU
bzo6RWRpdGFibGVSb290KTsKIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9XS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2Vi
UGFnZU9iamVjdE1hYy5tbQkocmV2aXNpb24gMjE1MDg0KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBQTEFURk9STShNQUMpCiAKKyNp
bXBvcnQgIlBsdWdpblZpZXcuaCIKICNpbXBvcnQgIldlYkZyYW1lLmgiCiAjaW1wb3J0ICJXZWJQ
YWdlLmgiCiAjaW1wb3J0ICJXS0FycmF5LmgiCkBAIC0xOTMsMTMgKzE5NCwyMSBAQAogewogICAg
IGlmICghbV9wYWdlKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIAorCiAgICAgSW50UG9pbnQg
Y29udmVydGVkUG9pbnQgPSBtX3BhZ2UtPnNjcmVlblRvUm9vdFZpZXcoSW50UG9pbnQocG9pbnQp
KTsKLSAgICBpZiAoV2ViQ29yZTo6RnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3BhZ2UtPm1haW5G
cmFtZVZpZXcoKSkKLSAgICAgICAgY29udmVydGVkUG9pbnQubW92ZUJ5KGZyYW1lVmlldy0+c2Ny
b2xsUG9zaXRpb24oKSk7Ci0gICAgaWYgKFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBtX3BhZ2UtPmNv
cmVQYWdlKCkpCi0gICAgICAgIGNvbnZlcnRlZFBvaW50Lm1vdmUoMCwgLXBhZ2UtPnRvcENvbnRl
bnRJbnNldCgpKTsKICAgICAKKyAgICAvLyBTb21lIHBsdWdpbnMgbWF5IGJlIGFibGUgdG8gZmln
dXJlIG91dCB0aGUgc2Nyb2xsIHBvc2l0aW9uIGFuZCBpbnNldCBvbiB0aGVpciBvd24uCisgICAg
Ym9vbCBhcHBseUNvbnRlbnRPZmZzZXQgPSB0cnVlOworICAgIGlmIChhdXRvIHBsdWdpblZpZXcg
PSBtX3BhZ2UtPnBsdWdpblZpZXdGb3JGcmFtZShtX3BhZ2UtPm1haW5GcmFtZSgpKSkKKyAgICAg
ICAgYXBwbHlDb250ZW50T2Zmc2V0ID0gIXBsdWdpblZpZXctPnBsdWdpbigpLT5wbHVnaW5IYW5k
bGVzQ29udGVudE9mZnNldEZvckFjY2Vzc2liaWxpdHlIaXRUZXN0KCk7CisKKyAgICBpZiAoYXBw
bHlDb250ZW50T2Zmc2V0KSB7CisgICAgICAgIGlmIChXZWJDb3JlOjpGcmFtZVZpZXcqIGZyYW1l
VmlldyA9IG1fcGFnZS0+bWFpbkZyYW1lVmlldygpKQorICAgICAgICAgICAgY29udmVydGVkUG9p
bnQubW92ZUJ5KGZyYW1lVmlldy0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgIGlmIChXZWJD
b3JlOjpQYWdlKiBwYWdlID0gbV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAgICAgICAgY29udmVy
dGVkUG9pbnQubW92ZSgwLCAtcGFnZS0+dG9wQ29udGVudEluc2V0KCkpOworICAgIH0KKwogICAg
IHJldHVybiBbW3NlbGYgYWNjZXNzaWJpbGl0eVJvb3RPYmplY3RXcmFwcGVyXSBhY2Nlc3NpYmls
aXR5SGl0VGVzdDpjb252ZXJ0ZWRQb2ludF07CiB9CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
cG9wCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>