<?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>58066</bug_id>
          
          <creation_ts>2011-04-07 11:55:27 -0700</creation_ts>
          <short_desc>REGRESSION (WebKit2): Reverse conversion doesn&apos;t work in Kotoeri</short_desc>
          <delta_ts>2011-04-07 15:38:35 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.6</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, Regression</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>381544</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-07 11:55:27 -0700</bug_when>
    <thetext>We should implement attributedSubstringFromRange:.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381545</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-07 11:55:40 -0700</bug_when>
    <thetext>&lt;rdar://problem/8965302&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381560</commentid>
    <comment_count>2</comment_count>
      <attachid>88671</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-07 12:10:58 -0700</bug_when>
    <thetext>Created attachment 88671
proposed fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381564</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-07 12:15:18 -0700</bug_when>
    <thetext>Attachment 88671 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit2/Shared/mac/AttributedString.h:34:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/platform/mac/HTMLConverter.h:30:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 2 in 19 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>381569</commentid>
    <comment_count>4</comment_count>
      <attachid>88671</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-04-07 12:18:45 -0700</bug_when>
    <thetext>Comment on attachment 88671
proposed fix

Wow! you did it. Looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381597</commentid>
    <comment_count>5</comment_count>
      <attachid>88671</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-04-07 12:58:18 -0700</bug_when>
    <thetext>Comment on attachment 88671
proposed fix

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

&gt; Source/WebKit2/Shared/mac/ArgumentCodersMac.mm:193
&gt; +        if (!decoder-&gt;decode(start))

If something fails to decode, it will mark the argument decoder as invalid, so you can&apos;t use that as a check for whether there are enough attributes.

A better solution is to encode the number of attributes.

&gt; Source/WebKit2/Shared/mac/ArgumentCodersMac.mm:196
&gt; +            return false;

You should return false if start &gt; end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381645</commentid>
    <comment_count>6</comment_count>
      <attachid>88671</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-04-07 13:37:41 -0700</bug_when>
    <thetext>Comment on attachment 88671
proposed fix

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

&gt; Source/WebKit2/Shared/mac/ArgumentCodersMac.mm:47
&gt; +enum NSType {
&gt; +    NSAttributedStringType,
&gt; +    NSColorType,
&gt; +    NSDictionaryType,
&gt; +    NSFontType,
&gt; +    NSNumberType,
&gt; +    NSStringType,
&gt; +    Unknown,
&gt; +};

Even inside a namespace, I’m not sure it’s safe to use the AppKit/Foundation prefix, NS, for our own identifiers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381653</commentid>
    <comment_count>7</comment_count>
      <attachid>88671</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-04-07 13:40:55 -0700</bug_when>
    <thetext>Comment on attachment 88671
proposed fix

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

&gt; Source/WebKit2/Shared/mac/ArgumentCodersMac.mm:155
&gt; +    case Unknown:
&gt; +        ASSERT_NOT_REACHED();
&gt; +        return false;
&gt; +    }
&gt; +
&gt; +    return false;

I think you want ASSERT_NOT_REACHED after the if statement too, because a type that is not equal to any constant is an even worse problem than the type Unknown.

But also we typically don’t assert things we can’t guarantee, and we can’t guarantee anything about the data we are decoding. So I suggest removing the assertion. You could do something else, but I think an assertion is not quite right.

&gt; Source/WebKit2/Shared/mac/ArgumentCodersMac.mm:160
&gt; +    // Even though NSAttributedString is toll free bridged with CFAttributedStringRef, attributes&apos; values may be not, so we should stay within this file&apos;s code.

I don’t understand what “within this file’s code” means exactly or why that is needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381670</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-07 13:54:07 -0700</bug_when>
    <thetext>Landed before seeing Darin&apos;s comments in &lt;http://trac.webkit.org/changeset/83204&gt;.

&gt;But also we typically don’t assert things we can’t guarantee, and we can’t guarantee anything about the data we are decoding. So I suggest removing the assertion. You could do something else, but I think an assertion is not quite right.

I considered that, but the only case when we can&apos;t really guarantee it is when the Web process is compromised, and is sending bogus data.

In debug builds, it&apos;s much more likely to hit a mistake in our own code, and getting an assertion is better than silently ignoring the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381672</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-04-07 13:56:58 -0700</bug_when>
    <thetext>At this abstraction level decoder knows only that it’s decoding a stream, so I’m not sure it’s good for it to enforce an “assert if there is bad data in the stream” policy.

Lets worry about it later, though. Seems fine for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381676</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-07 14:01:34 -0700</bug_when>
    <thetext>&gt; I don’t understand what “within this file’s code” means exactly or why that is needed.

The real issue is that we can not mix CF and NS types when encoding or decoding now. If an NSDictionary contains an CFString, it won&apos;t be encoded successfully, and vice versa. We could lift this limitation in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381790</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-07 15:38:35 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/83204 might have broken GTK Linux 32-bit Release and GTK Linux 64-bit Debug
The following tests are not passing:
media/context-menu-actions.html
media/media-fullscreen-inline.html
media/media-fullscreen-not-in-document.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88671</attachid>
            <date>2011-04-07 12:10:58 -0700</date>
            <delta_ts>2011-04-07 13:40:55 -0700</delta_ts>
            <desc>proposed fix</desc>
            <filename>AttributedSubstringFromRange.txt</filename>
            <type>text/plain</type>
            <size>40569</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMTk0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDQtMDcgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUkVHUkVTU0lPTiAoV2ViS2l0Mik6IFJldmVyc2UgY29udmVy
c2lvbiBkb2Vzbid0IHdvcmsgaW4gS290b2VyaQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTgwNjYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg5NjUz
MDI+CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvSFRNTENvbnZlcnRlci5oOgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9IVE1MQ29udmVydGVyLm1tOiAoK1tXZWJIVE1MQ29udmVydGVyIGVkaXRp
bmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOl0pOgorICAgICAgICBDaGFuZ2VkIGVkaXRpbmdB
dHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOiB0byB1c2UgV2ViQ29yZTo6UmFuZ2UgaW5zdGVhZCBv
ZiBET01SYW5nZSwgc2luY2UKKyAgICAgICAgaXQncyBub3cgdXNlZCBpbiBXZWJLaXQyLgorCiAy
MDExLTA0LTA3ICBOYW5jeSBQaWVkcmEgIDxuYW5jeS5waWVkcmFAbm9raWEuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9IVE1MQ29udmVydGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL0hUTUxDb252ZXJ0ZXIuaAkocmV2aXNpb24gODMxMjApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvSFRNTENvbnZlcnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3
ICsyNyw4IEBACiBAY2xhc3MgRE9NUmFuZ2U7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNz
IERvY3VtZW50TG9hZGVyOworICAgIGNsYXNzIERvY3VtZW50TG9hZGVyOworICAgIGNsYXNzIFJh
bmdlOwogfQogCiBAaW50ZXJmYWNlIFdlYkhUTUxDb252ZXJ0ZXIgOiBOU09iamVjdCB7CkBAIC04
NSw2ICs4Niw2IEBAIEBpbnRlcmZhY2UgV2ViSFRNTENvbnZlcnRlciA6IE5TT2JqZWN0IHsKIC0g
KE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmc7CiAjZW5kaWYKIAotKyAoTlNB
dHRyaWJ1dGVkU3RyaW5nICopZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6KERPTVJh
bmdlICopcmFuZ2U7CisrIChOU0F0dHJpYnV0ZWRTdHJpbmcgKillZGl0aW5nQXR0cmlidXRlZFN0
cmluZ0Zyb21SYW5nZTooV2ViQ29yZTo6UmFuZ2UqKXJhbmdlOwogQGVuZAogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSFRNTENvbnZlcnRlci5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSFRNTENvbnZlcnRlci5tbQkocmV2aXNpb24gODMx
MjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSFRNTENvbnZlcnRlci5tbQkod29y
a2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBzdGF0aWMgTlNGaWxlV3JhcHBlciAqZmlsZVdy
YXBwZXJGb3JFbGVtCiAvLyBBZGRpdGlvbmFsIGNvbnRyb2wgVW5pY29kZSBjaGFyYWN0ZXJzCiBj
b25zdCB1bmljaGFyIFdlYk5leHRMaW5lQ2hhcmFjdGVyID0gMHgwMDg1OwogCi1AaW50ZXJmYWNl
IE5TVGV4dExpc3QgKFRleHRMaXN0UHJpdmF0ZSkKK0BpbnRlcmZhY2UgTlNUZXh0TGlzdCAoV2Vi
Q29yZU5TVGV4dExpc3REZXRhaWxzKQogKyAoTlNEaWN0aW9uYXJ5ICopX3N0YW5kYXJkTWFya2Vy
QXR0cmlidXRlc0ZvckF0dHJpYnV0ZXM6KE5TRGljdGlvbmFyeSAqKWF0dHJzOwogQGVuZAogCkBA
IC02NCwxMiArNjQsMTIgQEAgLSAodm9pZClzZXRJZ25vcmVzT3JpZW50YXRpb246KEJPT0wpZmxh
ZwogLSAoQk9PTClpZ25vcmVzT3JpZW50YXRpb247CiBAZW5kCiAKLUBpbnRlcmZhY2UgTlNVUkwg
KFdlYkRhdGFVUkwpCitAaW50ZXJmYWNlIE5TVVJMIChXZWJDb3JlTlNVUkxEZXRhaWxzKQogLy8g
RklYTUU6IFdoYXQgaXMgdGhlIHJlYXNvbiB0byB1c2UgdGhpcyBGb3VuZGF0aW9uIG1ldGhvZCwg
YW5kIG5vdCArW05TVVJMIFVSTFdpdGhTdHJpbmc6cmVsYXRpdmVUb1VSTDpdPwogKyAoTlNVUkwg
Kilfd2ViX1VSTFdpdGhTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHJlbGF0aXZlVG9VUkw6KE5T
VVJMICopYmFzZVVSTDsKIEBlbmQKIAotQGludGVyZmFjZSBXZWJIVE1MQ29udmVydGVyKFdlYkhU
TUxDb252ZXJ0ZXJQcml2YXRlKQorQGludGVyZmFjZSBXZWJIVE1MQ29udmVydGVyKFdlYkhUTUxD
b252ZXJ0ZXJJbnRlcm5hbCkKIAogLSAoTlNTdHJpbmcgKilfc3RyaW5nRm9yTm9kZTooRE9NTm9k
ZSAqKW5vZGUgcHJvcGVydHk6KE5TU3RyaW5nICopa2V5OwogLSAoTlNDb2xvciAqKV9jb2xvckZv
ck5vZGU6KERPTU5vZGUgKilub2RlIHByb3BlcnR5OihOU1N0cmluZyAqKWtleTsKQEAgLTE2NjAs
OSArMTY2MCw4IEBAIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmcKICNl
bmRpZiAvLyAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fTEVPUEFSRCkKIAogLy8gVGhpcyBmdW5jdGlvbiB1c2VzIFRleHRJdGVyYXRvciwgd2hpY2gg
bWFrZXMgb2Zmc2V0cyBpbiBpdHMgcmVzdWx0IGNvbXBhdGlibGUgd2l0aCBIVE1MIGVkaXRpbmcu
Ci0rIChOU0F0dHJpYnV0ZWRTdHJpbmcgKillZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5n
ZTooRE9NUmFuZ2UgKilkb21SYW5nZQorKyAoTlNBdHRyaWJ1dGVkU3RyaW5nICopZWRpdGluZ0F0
dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6KFJhbmdlKilyYW5nZQogewotICAgIFJhbmdlICpyYW5n
ZSA9IGNvcmUoZG9tUmFuZ2UpOwogICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKnN0cmlu
ZyA9IFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF07CiAgICAgTlNVSW50
ZWdlciBzdHJpbmdMZW5ndGggPSAwOwogICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5
PiBhdHRycyhBZG9wdE5TLCBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMTk0KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMDQtMDcgIEFsZXhleSBQcm9z
a3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUkVHUkVTU0lPTiAoV2ViS2l0Mik6IFJldmVyc2UgY29udmVyc2lv
biBkb2Vzbid0IHdvcmsgaW4gS290b2VyaQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTgwNjYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg5NjUzMDI+
CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHk6CisgICAgICAgICogU2hh
cmVkL21hYy9BdHRyaWJ1dGVkU3RyaW5nLmg6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9tYWMv
QXR0cmlidXRlZFN0cmluZy5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkF0dHJpYnV0ZWRT
dHJpbmc6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OkF0dHJpYnV0ZWRTdHJpbmc6OmRlY29k
ZSk6CisgICAgICAgIEFkZGVkIGFuIGNsYXNzIHRoYXQgd3JhcHMgTlNBdHRyaWJ1dGVkU3RyaW5n
LiBBcyBmYXIgYXMgSSBjYW4gdGVsbCwgb25lIGNhbid0IHBhc3MgYSBDRgorICAgICAgICBvciBO
UyBvYmplY3QgdG8gYW5vdGhlciBwcm9jZXNzIHdpdGhvdXQgd3JhcHBpbmcgaXQgaW4gYSBDKysg
b25lLgorICAgICAgICAKKyAgICAgICAgKiBTaGFyZWQvbWFjL0FyZ3VtZW50Q29kZXJzTWFjLmg6
IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9tYWMvQXJndW1lbnRDb2RlcnNNYWMubW06IEFkZGVk
LgorICAgICAgICBBZGRlZCBjb2RlcnMgZm9yIEZvdW5kYXRpb24gb2JqZWN0cywgc2ltaWxhciB0
byBBcmd1bWVudENvZGVyc0NGLiBUaGVyZSBhcmUgdHdvIHJlYXNvbnMgd2h5CisgICAgICAgIHRo
ZXNlIGFyZSBuZWVkZWQ6CisgICAgICAgIDEpIEV2ZW4gdGhvdWdoIG1vc3QgRm91bmRhdGlvbiBv
YmplY3RzIGFyZSB0b2xsIGZyZWUgYnJpZGdlZCB3aXRoIENGLCBDRkdldFR5cGVJRCgpIGRvZXNu
J3QKKyAgICAgICAgd29yayBwcm9wZXJseSBmb3IgdGhlbSAoSSd2ZSBiZWVuIGp1c3QgZ2V0dGlu
ZyAxKS4KKyAgICAgICAgMikgTlNDb2xvciBpc24ndCB0b2xsIGZyZWUgYnJpZGdlZCB0byBDRi4K
KyAgICAgICAgVGhpcyBhZGRzIGp1c3QgdGhlIHR5cGVzIG5lY2Vzc2FyeSBmb3IgZWRpdGluZyBO
U0F0dHJpYnV0ZWRTdHJpbmcgKGFuZCBJIGRvbid0IHlldCBrbm93IHdoYXQKKyAgICAgICAgaGFw
cGVucyB3aXRoIGF0dGFjaG1lbnRzKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dL
Vmlldy5tbTogKC1bV0tWaWV3IGF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6XSk6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMv
V2ViUGFnZVByb3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldEF0
dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UpOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAg
ICAgICBCb2lsZXJwbGF0ZSBjb2RlIGZvciBtYWtpbmcgYSBzeW5jIGNhbGwgdG8gd2ViIHByb2Nl
c3MuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06IChX
ZWJLaXQ6OldlYlBhZ2U6OmdldEF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UpOgorICAgICAg
ICBQb3J0ZWQgZnJvbSBXZWJIVE1MVmlldy4KKwogMjAxMS0wNC0wNyAgRW5yaWNhIENhc3VjY2kg
IDxlbnJpY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpJ
bmRleDogU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQkocmV2aXNp
b24gODMxMjApCisrKyBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTI2Miw2ICsyNjIsNyBAQCBkZWYgc3RydWN0X29yX2NsYXNzKG5h
bWVzcGFjZSwgdHlwZSk6CiAgICAgICAgICdXZWJDb3JlOjpQcmludEluZm8nLAogICAgICAgICAn
V2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMnLAogICAgICAgICAnV2ViQ29yZTo6V2luZG93RmVh
dHVyZXMnLAorICAgICAgICAnV2ViS2l0OjpBdHRyaWJ1dGVkU3RyaW5nJywKICAgICAgICAgJ1dl
YktpdDo6Q29udGV4dE1lbnVTdGF0ZScsCiAgICAgICAgICdXZWJLaXQ6OkRpY3Rpb25hcnlQb3B1
cEluZm8nLAogICAgICAgICAnV2ViS2l0OjpEcmF3aW5nQXJlYUluZm8nLApJbmRleDogU291cmNl
L1dlYktpdDIvU2hhcmVkL21hYy9Bcmd1bWVudENvZGVyc01hYy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQXJndW1lbnRDb2RlcnNNYWMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQXJndW1lbnRDb2RlcnNNYWMuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXJndW1lbnRDb2Rl
cnNNYWNfaAorI2RlZmluZSBBcmd1bWVudENvZGVyc01hY19oCisKKyNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CisKK25hbWVzcGFjZSBDb3JlSVBDIHsKKworY2xhc3MgQXJndW1lbnRFbmNvZGVy
OworY2xhc3MgQXJndW1lbnREZWNvZGVyOworCisvLyBOU0F0dHJpYnV0ZWRTdHJpbmcKK3ZvaWQg
ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIE5TQXR0cmlidXRlZFN0cmluZyAqKTsKK2Jvb2wgZGVj
b2RlKEFyZ3VtZW50RGVjb2RlciosIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+Jik7CisK
Ky8vIE5TQ29sb3IKK3ZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIE5TQ29sb3IgKik7Citi
b29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBSZXRhaW5QdHI8TlNDb2xvcj4mKTsKKworLy8g
TlNEaWN0aW9uYXJ5Cit2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBOU0RpY3Rpb25hcnkg
Kik7Citib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5
PiYpOworCisvLyBOU0ZvbnQKK3ZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIE5TRm9udCAq
KTsKK2Jvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFJldGFpblB0cjxOU0ZvbnQ+Jik7CisK
Ky8vIE5TTnVtYmVyCit2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBOU051bWJlciAqKTsK
K2Jvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFJldGFpblB0cjxOU051bWJlcj4mKTsKKwor
Ly8gTlNTdHJpbmcKK3ZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIE5TU3RyaW5nICopOwor
Ym9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgUmV0YWluUHRyPE5TU3RyaW5nPiYpOworCit9
CisKKyNlbmRpZiAvLyBBcmd1bWVudENvZGVyc01hY19oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbWFjL0FyZ3VtZW50Q29kZXJzTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9tYWMvQXJndW1lbnRDb2RlcnNNYWMubW0JKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0FyZ3VtZW50Q29kZXJzTWFjLm1tCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDMyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiQXJndW1lbnRDb2RlcnNNYWMuaCIKKworI2ltcG9ydCAiQXJndW1lbnRDb2RlcnNDRi5oIgor
I2ltcG9ydCAiQXJndW1lbnREZWNvZGVyLmgiCisjaW1wb3J0ICJBcmd1bWVudEVuY29kZXIuaCIK
KyNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2ltcG9ydCA8V2ViQ29yZS9Db2xv
ck1hYy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIENvcmVJUEMg
eworCitlbnVtIE5TVHlwZSB7CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nVHlwZSwKKyAgICBOU0Nv
bG9yVHlwZSwKKyAgICBOU0RpY3Rpb25hcnlUeXBlLAorICAgIE5TRm9udFR5cGUsCisgICAgTlNO
dW1iZXJUeXBlLAorICAgIE5TU3RyaW5nVHlwZSwKKyAgICBVbmtub3duLAorfTsKKworc3RhdGlj
IE5TVHlwZSB0eXBlRnJvbU9iamVjdChpZCBvYmplY3QpCit7CisgICAgQVNTRVJUKG9iamVjdCk7
CisKKyAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltOU0F0dHJpYnV0ZWRTdHJpbmcgY2xh
c3NdXSkKKyAgICAgICAgcmV0dXJuIE5TQXR0cmlidXRlZFN0cmluZ1R5cGU7CisgICAgaWYgKFtv
YmplY3QgaXNLaW5kT2ZDbGFzczpbTlNDb2xvciBjbGFzc11dKQorICAgICAgICByZXR1cm4gTlND
b2xvclR5cGU7CisgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IGNs
YXNzXV0pCisgICAgICAgIHJldHVybiBOU0RpY3Rpb25hcnlUeXBlOworICAgIGlmIChbb2JqZWN0
IGlzS2luZE9mQ2xhc3M6W05TRm9udCBjbGFzc11dKQorICAgICAgICByZXR1cm4gTlNGb250VHlw
ZTsKKyAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFzc11dKQorICAg
ICAgICByZXR1cm4gTlNOdW1iZXJUeXBlOworICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6
W05TU3RyaW5nIGNsYXNzXV0pCisgICAgICAgIHJldHVybiBOU1N0cmluZ1R5cGU7CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVW5rbm93bjsKK30KKworc3RhdGljIHZv
aWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgaWQgb2JqZWN0KQoreworICAgIE5T
VHlwZSB0eXBlID0gdHlwZUZyb21PYmplY3Qob2JqZWN0KTsKKyAgICBlbmNvZGVyLT5lbmNvZGVF
bnVtKHR5cGUpOworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBOU0F0dHJpYnV0ZWRT
dHJpbmdUeXBlOgorICAgICAgICBlbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8TlNBdHRyaWJ1
dGVkU3RyaW5nICo+KG9iamVjdCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBOU0NvbG9y
VHlwZToKKyAgICAgICAgZW5jb2RlKGVuY29kZXIsIHN0YXRpY19jYXN0PE5TQ29sb3IgKj4ob2Jq
ZWN0KSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE5TRGljdGlvbmFyeVR5cGU6CisgICAg
ICAgIGVuY29kZShlbmNvZGVyLCBzdGF0aWNfY2FzdDxOU0RpY3Rpb25hcnkgKj4ob2JqZWN0KSk7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE5TRm9udFR5cGU6CisgICAgICAgIGVuY29kZShl
bmNvZGVyLCBzdGF0aWNfY2FzdDxOU0ZvbnQgKj4ob2JqZWN0KSk7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIE5TTnVtYmVyVHlwZToKKyAgICAgICAgZW5jb2RlKGVuY29kZXIsIHN0YXRpY19j
YXN0PE5TTnVtYmVyICo+KG9iamVjdCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBOU1N0
cmluZ1R5cGU6CisgICAgICAgIGVuY29kZShlbmNvZGVyLCBzdGF0aWNfY2FzdDxOU1N0cmluZyAq
PihvYmplY3QpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVW5rbm93bjoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0YXRpYyBi
b29sIGRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJldGFpblB0cjxpZD4mIHJlc3Vs
dCkKK3sKKyAgICBOU1R5cGUgdHlwZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZUVudW0odHlw
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNh
c2UgTlNBdHRyaWJ1dGVkU3RyaW5nVHlwZTogeworICAgICAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1
dGVkU3RyaW5nPiBzdHJpbmc7CisgICAgICAgIGlmICghZGVjb2RlKGRlY29kZXIsIHN0cmluZykp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJlc3VsdCA9IHN0cmluZzsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGNhc2UgTlNDb2xvclR5cGU6IHsKKyAgICAg
ICAgUmV0YWluUHRyPE5TQ29sb3I+IGNvbG9yOworICAgICAgICBpZiAoIWRlY29kZShkZWNvZGVy
LCBjb2xvcikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJlc3VsdCA9IGNv
bG9yOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBOU0RpY3Rpb25hcnlU
eXBlOiB7CisgICAgICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IGRpY3Rpb25hcnk7CisgICAg
ICAgIGlmICghZGVjb2RlKGRlY29kZXIsIGRpY3Rpb25hcnkpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXN1bHQgPSBkaWN0aW9uYXJ5OworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgY2FzZSBOU0ZvbnRUeXBlOiB7CisgICAgICAgIFJldGFpblB0cjxOU0Zv
bnQ+IGZvbnQ7CisgICAgICAgIGlmICghZGVjb2RlKGRlY29kZXIsIGZvbnQpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXN1bHQgPSBmb250OworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgY2FzZSBOU051bWJlclR5cGU6IHsKKyAgICAgICAgUmV0YWluUHRy
PE5TTnVtYmVyPiBudW1iZXI7CisgICAgICAgIGlmICghZGVjb2RlKGRlY29kZXIsIG51bWJlcikp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJlc3VsdCA9IG51bWJlcjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGNhc2UgTlNTdHJpbmdUeXBlOiB7CisgICAg
ICAgIFJldGFpblB0cjxOU1N0cmluZz4gc3RyaW5nOworICAgICAgICBpZiAoIWRlY29kZShkZWNv
ZGVyLCBzdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXN1bHQg
PSBzdHJpbmc7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYXNlIFVua25vd246
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIGVuY29kZShBcmd1bWVudEVuY29k
ZXIqIGVuY29kZXIsIE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nKQoreworICAgIC8vIEV2ZW4g
dGhvdWdoIE5TQXR0cmlidXRlZFN0cmluZyBpcyB0b2xsIGZyZWUgYnJpZGdlZCB3aXRoIENGQXR0
cmlidXRlZFN0cmluZ1JlZiwgYXR0cmlidXRlcycgdmFsdWVzIG1heSBiZSBub3QsIHNvIHdlIHNo
b3VsZCBzdGF5IHdpdGhpbiB0aGlzIGZpbGUncyBjb2RlLgorCisgICAgTlNTdHJpbmcgKnBsYWlu
U3RyaW5nID0gW3N0cmluZyBzdHJpbmddOworICAgIE5TVUludGVnZXIgbGVuZ3RoID0gW3BsYWlu
U3RyaW5nIGxlbmd0aF07CisgICAgQ29yZUlQQzo6ZW5jb2RlKGVuY29kZXIsIHBsYWluU3RyaW5n
KTsKKworICAgIE5TVUludGVnZXIgcG9zaXRpb24gPSAwOworICAgIHdoaWxlIChwb3NpdGlvbiA8
IGxlbmd0aCkgeworICAgICAgICBOU1JhbmdlIGVmZmVjdGl2ZVJhbmdlOworICAgICAgICBOU0Rp
Y3Rpb25hcnkgKmF0dHJpYnV0ZXNBdEluZGV4ID0gW3N0cmluZyBhdHRyaWJ1dGVzQXRJbmRleDpw
b3NpdGlvbiBlZmZlY3RpdmVSYW5nZTomZWZmZWN0aXZlUmFuZ2VdOworICAgICAgICBBU1NFUlQo
ZWZmZWN0aXZlUmFuZ2UubG9jYXRpb24gPT0gcG9zaXRpb24pOworICAgICAgICBBU1NFUlQoZWZm
ZWN0aXZlUmFuZ2UubGVuZ3RoKTsKKyAgICAgICAgQVNTRVJUKE5TTWF4UmFuZ2UoZWZmZWN0aXZl
UmFuZ2UpIDw9IGxlbmd0aCk7CisgICAgICAgIGVuY29kZXItPmVuY29kZVVJbnQ2NChlZmZlY3Rp
dmVSYW5nZS5sb2NhdGlvbik7CisgICAgICAgIGVuY29kZXItPmVuY29kZVVJbnQ2NChlZmZlY3Rp
dmVSYW5nZS5sZW5ndGgpOworICAgICAgICBDb3JlSVBDOjplbmNvZGUoZW5jb2RlciwgYXR0cmli
dXRlc0F0SW5kZXgpOworCisgICAgICAgIHBvc2l0aW9uID0gTlNNYXhSYW5nZShlZmZlY3RpdmVS
YW5nZSk7CisgICAgfQorfQorCitib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIs
IFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+JiByZXN1bHQpCit7CisgICAgUmV0YWluUHRy
PE5TU3RyaW5nPiBwbGFpblN0cmluZzsKKyAgICBpZiAoIUNvcmVJUEM6OmRlY29kZShkZWNvZGVy
LCBwbGFpblN0cmluZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJldGFpblB0cjxO
U011dGFibGVBdHRyaWJ1dGVkU3RyaW5nPiByZXN1bHRTdHJpbmcoQWRvcHROUywgW1tOU011dGFi
bGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpwbGFpblN0cmluZy5nZXQo
KV0pOworCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgdWludDY0X3Qgc3RhcnQ7CisgICAg
ICAgIHVpbnQ2NF90IGVuZDsKKyAgICAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gYXR0cmli
dXRlczsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoc3RhcnQpKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGVuZCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghQ29yZUlQQzo6ZGVjb2RlKGRlY29kZXIsIGF0dHJp
YnV0ZXMpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBbcmVzdWx0U3RyaW5n
LmdldCgpIGFkZEF0dHJpYnV0ZXM6YXR0cmlidXRlcy5nZXQoKSByYW5nZTpOU01ha2VSYW5nZShz
dGFydCwgZW5kKV07CisgICAgfQorCisgICAgcmVzdWx0LmFkb3B0Q0YocmVzdWx0U3RyaW5nLmxl
YWtSZWYoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciogZW5jb2RlciwgTlNDb2xvciAqY29sb3IpCit7CisgICAgQXJndW1lbnRDb2RlcjxDb2xv
cj46OmVuY29kZShlbmNvZGVyLCBjb2xvckZyb21OU0NvbG9yKGNvbG9yKSk7Cit9CisKK2Jvb2wg
ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmV0YWluUHRyPE5TQ29sb3I+JiByZXN1
bHQpCit7CisgICAgQ29sb3IgY29sb3I7CisgICAgaWYgKCFBcmd1bWVudENvZGVyPENvbG9yPjo6
ZGVjb2RlKGRlY29kZXIsIGNvbG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVz
dWx0ID0gbnNDb2xvcihjb2xvcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgZW5jb2Rl
KEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5KQorewor
ICAgIC8vIEV2ZW4gdGhvdWdoIE5TRGljdGlvbmFyeSBpcyB0b2xsIGZyZWUgYnJpZGdlZCB3aXRo
IENGRGljdGlvbmFyeVJlZiwgdmFsdWVzIG1heSBiZSBub3QsIHNvIHdlIHNob3VsZCBzdGF5IHdp
dGhpbiB0aGlzIGZpbGUncyBjb2RlLgorCisgICAgTlNVSW50ZWdlciBzaXplID0gW2RpY3Rpb25h
cnkgY291bnRdOworICAgIE5TQXJyYXkgKmtleXMgPSBbZGljdGlvbmFyeSBhbGxLZXlzXTsKKyAg
ICBOU0FycmF5ICp2YWx1ZXMgPSBbZGljdGlvbmFyeSBhbGxWYWx1ZXNdOworCisgICAgZW5jb2Rl
ci0+ZW5jb2RlVUludDY0KHNpemUpOworCisgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7CisgICAgICAgIGlkIGtleSA9IFtrZXlzIG9iamVjdEF0SW5kZXg6aV07Cisg
ICAgICAgIGlkIHZhbHVlID0gW3ZhbHVlcyBvYmplY3RBdEluZGV4OmldOworICAgICAgICBBU1NF
UlQoa2V5KTsKKyAgICAgICAgQVNTRVJUKFtrZXkgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xh
c3NdXSk7CisgICAgICAgIEFTU0VSVCh2YWx1ZSk7CisKKyAgICAgICAgLy8gSWdub3JlIHZhbHVl
cyB3ZSBkb24ndCByZWNvZ25pemUuCisgICAgICAgIGlmICh0eXBlRnJvbU9iamVjdCh2YWx1ZSkg
PT0gVW5rbm93bikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGVuY29kZShlbmNv
ZGVyLCAoTlNTdHJpbmcgKilrZXkpOworICAgICAgICBlbmNvZGUoZW5jb2RlciwgdmFsdWUpOwor
ICAgIH0KK30KKworYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBSZXRhaW5Q
dHI8TlNEaWN0aW9uYXJ5PiYgcmVzdWx0KQoreworICAgIHVpbnQ2NF90IHNpemU7CisgICAgaWYg
KCFkZWNvZGVyLT5kZWNvZGVVSW50NjQoc2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBkaWN0aW9uYXJ5KEFkb3B0TlMsIFtb
TlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzaXplXSk7CisgICAg
Zm9yICh1aW50NjRfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAvLyBUcnkgdG8g
ZGVjb2RlIHRoZSBrZXkgbmFtZS4KKyAgICAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBrZXk7Cisg
ICAgICAgIGlmICghZGVjb2RlKGRlY29kZXIsIGtleSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgUmV0YWluUHRyPGlkPiB2YWx1ZTsKKyAgICAgICAgaWYgKCFkZWNvZGUo
ZGVjb2RlciwgdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFtk
aWN0aW9uYXJ5LmdldCgpIHNldE9iamVjdDp2YWx1ZS5nZXQoKSBmb3JLZXk6a2V5LmdldCgpXTsK
KyAgICB9CisKKyAgICByZXN1bHQuYWRvcHRDRihkaWN0aW9uYXJ5LmxlYWtSZWYoKSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKKwordm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVy
LCBOU0ZvbnQgKmZvbnQpCit7CisgICAgLy8gTlNGb250IGNvdWxkIHVzZSBDVEZvbnRSZWYgY29k
ZSBpZiB3ZSBoYWQgaXQgaW4gQXJndW1lbnRDb2RlcnNDRi4KKyAgICBlbmNvZGUoZW5jb2Rlciwg
W1tmb250IGZvbnREZXNjcmlwdG9yXSBmb250QXR0cmlidXRlc10pOworfQorCitib29sIGRlY29k
ZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJldGFpblB0cjxOU0ZvbnQ+JiByZXN1bHQpCit7
CisgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gZm9udEF0dHJpYnV0ZXM7CisgICAgaWYgKCFk
ZWNvZGUoZGVjb2RlciwgZm9udEF0dHJpYnV0ZXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBOU0ZvbnREZXNjcmlwdG9yICpmb250RGVzY3JpcHRvciA9IFtOU0ZvbnREZXNjcmlwdG9y
IGZvbnREZXNjcmlwdG9yV2l0aEZvbnRBdHRyaWJ1dGVzOmZvbnRBdHRyaWJ1dGVzLmdldCgpXTsK
KyAgICByZXN1bHQgPSBbTlNGb250IGZvbnRXaXRoRGVzY3JpcHRvcjpmb250RGVzY3JpcHRvciBz
aXplOjBdOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciogZW5jb2RlciwgTlNOdW1iZXIgKm51bWJlcikKK3sKKyAgICBlbmNvZGUoZW5jb2Rlciwg
KENGTnVtYmVyUmVmKW51bWJlcik7Cit9CisKK2Jvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2Rlciog
ZGVjb2RlciwgUmV0YWluUHRyPE5TTnVtYmVyPiYgcmVzdWx0KQoreworICAgIFJldGFpblB0cjxD
Rk51bWJlclJlZj4gbnVtYmVyOworICAgIGlmICghZGVjb2RlKGRlY29kZXIsIG51bWJlcikpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdC5hZG9wdENGKChOU051bWJlciAqKW51
bWJlci5sZWFrUmVmKCkpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIGVuY29kZShBcmd1
bWVudEVuY29kZXIqIGVuY29kZXIsIE5TU3RyaW5nICpzdHJpbmcpCit7CisgICAgZW5jb2RlKGVu
Y29kZXIsIChDRlN0cmluZ1JlZilzdHJpbmcpOworfQorCitib29sIGRlY29kZShBcmd1bWVudERl
Y29kZXIqIGRlY29kZXIsIFJldGFpblB0cjxOU1N0cmluZz4mIHJlc3VsdCkKK3sKKyAgICBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IHN0cmluZzsKKyAgICBpZiAoIWRlY29kZShkZWNvZGVyLCBzdHJp
bmcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQuYWRvcHRDRigoTlNTdHJp
bmcgKilzdHJpbmcubGVha1JlZigpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQpJbmRleDog
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9BdHRyaWJ1dGVkU3RyaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9BdHRyaWJ1dGVkU3RyaW5nLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0F0dHJpYnV0ZWRTdHJpbmcuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXR0cmlidXRl
ZFN0cmluZ19oCisjZGVmaW5lIEF0dHJpYnV0ZWRTdHJpbmdfaAorCisjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgorCitPQkpDX0NMQVNTIE5TQXR0cmlidXRlZFN0cmluZzsKKworbmFtZXNwYWNl
IENvcmVJUEMgeworICAgIGNsYXNzIEFyZ3VtZW50RGVjb2RlcjsKKyAgICBjbGFzcyBBcmd1bWVu
dEVuY29kZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1Y3QgQXR0cmlidXRlZFN0
cmluZyB7CisgICAgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKikgY29uc3Q7
CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIEF0dHJp
YnV0ZWRTdHJpbmcmKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBz
dHJpbmc7Cit9OworCit9CisKKyNlbmRpZiAvLyBBdHRyaWJ1dGVkU3RyaW5nX2gKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQXR0cmlidXRlZFN0cmluZy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0F0dHJpYnV0ZWRTdHJpbmcubW0JKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0F0dHJpYnV0ZWRTdHJpbmcubW0JKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIkF0dHJpYnV0ZWRTdHJpbmcuaCIKKworI2ltcG9ydCAiQXJndW1lbnRDb2Rl
cnNNYWMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgQXR0cmlidXRlZFN0cmluZzo6
ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKK3sKKyAgICBD
b3JlSVBDOjplbmNvZGUoZW5jb2Rlciwgc3RyaW5nLmdldCgpKTsKK30KKworYm9vbCBBdHRyaWJ1
dGVkU3RyaW5nOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBBdHRy
aWJ1dGVkU3RyaW5nJiBhdHRyaWJ1dGVkU3RyaW5nKQoreworICAgIHJldHVybiBDb3JlSVBDOjpk
ZWNvZGUoZGVjb2RlciwgYXR0cmlidXRlZFN0cmluZy5zdHJpbmcpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJ
KHJldmlzaW9uIDgzMTIwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5NCw3IEBAIGNsYXNzIFdlYlBhZ2VHcm91cDsK
IGNsYXNzIFdlYlByb2Nlc3NQcm94eTsKIGNsYXNzIFdlYlVSTFJlcXVlc3Q7CiBjbGFzcyBXZWJX
aGVlbEV2ZW50Oworc3RydWN0IEF0dHJpYnV0ZWRTdHJpbmc7CiBzdHJ1Y3QgRGljdGlvbmFyeVBv
cHVwSW5mbzsKIHN0cnVjdCBQbGF0Zm9ybVBvcHVwTWVudURhdGE7CiBzdHJ1Y3QgUHJpbnRJbmZv
OwpAQCAtMjU5LDYgKzI2MCw3IEBAIHB1YmxpYzoKICAgICBib29sIGluc2VydFRleHQoY29uc3Qg
U3RyaW5nJiB0ZXh0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJl
cGxhY2VtZW50UmFuZ2VFbmQsIFRleHRJbnB1dFN0YXRlJiBuZXdTdGF0ZSk7CiAgICAgdm9pZCBn
ZXRNYXJrZWRSYW5nZSh1aW50NjRfdCYgbG9jYXRpb24sIHVpbnQ2NF90JiBsZW5ndGgpOwogICAg
IHZvaWQgZ2V0U2VsZWN0ZWRSYW5nZSh1aW50NjRfdCYgbG9jYXRpb24sIHVpbnQ2NF90JiBsZW5n
dGgpOworICAgIHZvaWQgZ2V0QXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZSh1aW50NjRfdCBs
b2NhdGlvbiwgdWludDY0X3QgbGVuZ3RoLCBBdHRyaWJ1dGVkU3RyaW5nJik7CiAgICAgdWludDY0
X3QgY2hhcmFjdGVySW5kZXhGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCk7CiAgICAg
V2ViQ29yZTo6SW50UmVjdCBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSh1aW50NjRfdCwgdWlu
dDY0X3QpOwogICAgIGJvb2wgZXhlY3V0ZUtleXByZXNzQ29tbWFuZHMoY29uc3QgVmVjdG9yPFdl
YkNvcmU6OktleXByZXNzQ29tbWFuZD4mLCBUZXh0SW5wdXRTdGF0ZSYgbmV3U3RhdGUpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkocmV2aXNpb24g
ODMxMjApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9y
dCAiV0tWaWV3LmgiCiAKKyNpbXBvcnQgIkF0dHJpYnV0ZWRTdHJpbmcuaCIKICNpbXBvcnQgIkNo
dW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5LmgiCiAjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgi
CiAjaW1wb3J0ICJEcmF3aW5nQXJlYVByb3h5SW1wbC5oIgpAQCAtMTM2NCw5ICsxMzY1LDE3IEBA
IC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdWJzdHIKIHsKICAgICBbc2VsZiBf
ZXhlY3V0ZVNhdmVkS2V5cHJlc3NDb21tYW5kc107CiAKLSAgICAvLyBUaGlzIGlzIG5vdCBpbXBs
ZW1lbnRlZCBmb3Igbm93LiBOZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHNlcmlhbGl6ZSB0aGUg
YXR0cmlidXRlZCBzdHJpbmcgYWNyb3NzIHByb2Nlc3Nlcy4KLSAgICBMT0coVGV4dElucHV0LCAi
YXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZSIpOwotICAgIHJldHVybiBuaWw7CisgICAgV0tW
aWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogcGFyYW1ldGVycyA9IF9kYXRhLT5faW50
ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKKyAgICBpZiAocGFyYW1ldGVycyAmJiAhcGFyYW1l
dGVycy0+Y2FjaGVkVGV4dElucHV0U3RhdGUuc2VsZWN0aW9uSXNFZGl0YWJsZSkgeworICAgICAg
ICBMT0coVGV4dElucHV0LCAiYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTooJXUsICV1KSAt
PiBuaWwiLCBuc1JhbmdlLmxvY2F0aW9uLCBuc1JhbmdlLmxlbmd0aCk7CisgICAgICAgIHJldHVy
biBuaWw7CisgICAgfQorCisgICAgQXR0cmlidXRlZFN0cmluZyByZXN1bHQ7CisgICAgX2RhdGEt
Pl9wYWdlLT5nZXRBdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKG5zUmFuZ2UubG9jYXRpb24s
IE5TTWF4UmFuZ2UobnNSYW5nZSksIHJlc3VsdCk7CisKKyAgICBMT0coVGV4dElucHV0LCAiYXR0
cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTooJXUsICV1KSAtPiBcIiVAXCIiLCBuc1JhbmdlLmxv
Y2F0aW9uLCBuc1JhbmdlLmxlbmd0aCwgW3Jlc3VsdC5zdHJpbmcuZ2V0KCkgc3RyaW5nXSk7Cisg
ICAgcmV0dXJuIFtbcmVzdWx0LnN0cmluZy5nZXQoKSByZXRhaW5dIGF1dG9yZWxlYXNlXTsKIH0K
IAogLSAoTlNVSW50ZWdlciljaGFyYWN0ZXJJbmRleEZvclBvaW50OihOU1BvaW50KXRoZVBvaW50
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1h
Yy5tbQkocmV2aXNpb24gODMxMjApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dl
YlBhZ2VQcm94eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2ltcG9y
dCAiY29uZmlnLmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKIAorI2ltcG9ydCAiQXR0cmli
dXRlZFN0cmluZy5oIgogI2ltcG9ydCAiRGF0YVJlZmVyZW5jZS5oIgogI2ltcG9ydCAiRGljdGlv
bmFyeVBvcHVwSW5mby5oIgogI2ltcG9ydCAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgpAQCAt
MTY3LDYgKzE2OCwxMSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U2VsZWN0ZWRSYW5nZSh1aW50
CiAgICAgcHJvY2VzcygpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6R2V0U2VsZWN0ZWRS
YW5nZSgpLCBNZXNzYWdlczo6V2ViUGFnZTo6R2V0U2VsZWN0ZWRSYW5nZTo6UmVwbHkobG9jYXRp
b24sIGxlbmd0aCksIG1fcGFnZUlEKTsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OmdldEF0dHJp
YnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UodWludDY0X3QgbG9jYXRpb24sIHVpbnQ2NF90IGxlbmd0
aCwgQXR0cmlidXRlZFN0cmluZyYgcmVzdWx0KQoreworICAgIHByb2Nlc3MoKS0+c2VuZFN5bmMo
TWVzc2FnZXM6OldlYlBhZ2U6OkdldEF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UobG9jYXRp
b24sIGxlbmd0aCksIE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRBdHRyaWJ1dGVkU3Vic3RyaW5nRnJv
bVJhbmdlOjpSZXBseShyZXN1bHQpLCBtX3BhZ2VJRCk7Cit9CisKIHVpbnQ2NF90IFdlYlBhZ2VQ
cm94eTo6Y2hhcmFjdGVySW5kZXhGb3JQb2ludChjb25zdCBJbnRQb2ludCBwb2ludCkKIHsKICAg
ICB1aW50NjRfdCByZXN1bHQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA4MzEyMCkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
Nzg1LDggKzc4NSwxMiBAQAogCQlEM0I5NDg0OTExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNo
UG9wdXBNZW51LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBEM0I5NDg0NTExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmggKi87IH07
CiAJCUUxMzRGMDE3MTJFQTVEMzMwMDRFQzU4RCAvKiBXS1ByaW50aW5nVmlldy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEzNEYwMTUxMkVBNUQxMTAw
NEVDNThEIC8qIFdLUHJpbnRpbmdWaWV3LmggKi87IH07CiAJCUUxMzRGMDFBMTJFQTVEOTkwMDRF
QzU4RCAvKiBXS1ByaW50aW5nVmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxMzRGMDE5MTJFQTVEOTkwMDRFQzU4RCAvKiBXS1ByaW50aW5nVmll
dy5tbSAqLzsgfTsKKwkJRTE3OUZEOUMxMzREMzgwNjAwMTVCODgzIC8qIEFyZ3VtZW50Q29kZXJz
TWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTc5
RkQ5QjEzNEQzODA2MDAxNUI4ODMgLyogQXJndW1lbnRDb2RlcnNNYWMuaCAqLzsgfTsKKwkJRTE3
OUZEOUYxMzREMzgyNTAwMTVCODgzIC8qIEFyZ3VtZW50Q29kZXJzTWFjLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE3OUZEOUUxMzREMzgyNTAwMTVC
ODgzIC8qIEFyZ3VtZW50Q29kZXJzTWFjLm1tICovOyB9OwogCQlFMTgzOTM0OTEzNDI5N0E1MDAx
ODQyRUMgLyogVGV4dElucHV0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxODM5MzQ4MTM0Mjk3QTUwMDE4NDJFQyAvKiBUZXh0SW5wdXRTdGF0
ZS5oICovOyB9OwogCQlFMThDOTJGNDEyREI5RTcxMDBDRjJBRUIgLyogUHJpbnRJbmZvLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOEM5MkYzMTJE
QjlFNzEwMENGMkFFQiAvKiBQcmludEluZm8uY3BwICovOyB9OworCQlFMUEzMTczMjEzNENFQTZD
MDA3QzlBNEYgLyogQXR0cmlidXRlZFN0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBMzE3MzExMzRDRUE2QzAwN0M5QTRGIC8qIEF0dHJpYnV0
ZWRTdHJpbmcuaCAqLzsgfTsKKwkJRTFBMzE3MzUxMzRDRUE4MDAwN0M5QTRGIC8qIEF0dHJpYnV0
ZWRTdHJpbmcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMUEzMTczNDEzNENFQTgwMDA3QzlBNEYgLyogQXR0cmlidXRlZFN0cmluZy5tbSAqLzsgfTsK
IAkJRTFCQjE2QTQxMzIwMUI5QjAwRjQ5NDMxIC8qIEZ1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQkIxNjg4
MTMyMDE4QkEwMEY0OTQzMSAvKiBGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLmggKi87IH07CiAJ
CUUxQkIxNkE1MTMyMDFCOUIwMEY0OTQzMSAvKiBGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFCQjE2ODkx
MzIwMThCQTAwRjQ5NDMxIC8qIEZ1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIubW0gKi87IH07CiAJ
CUUxQ0MxQjkwMTJEN0VBREYwMDYyNTgzOCAvKiBQcmludEluZm8uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQ0MxQjhFMTJEN0VBREYwMDYyNTgzOCAv
KiBQcmludEluZm8uaCAqLzsgfTsKQEAgLTE3MDUsOCArMTcwOSwxMiBAQAogCQlEM0I5NDg0NTEx
RkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlNlYXJjaFBvcHVwTWVudS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFMTM0RjAxNTEyRUE1RDExMDA0RUM1OEQgLyogV0tQcmludGluZ1ZpZXcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tQcmludGluZ1ZpZXcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEzNEYwMTkxMkVBNUQ5OTAwNEVDNThEIC8qIFdLUHJp
bnRpbmdWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tQ
cmludGluZ1ZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxNzlGRDlCMTM0
RDM4MDYwMDE1Qjg4MyAvKiBBcmd1bWVudENvZGVyc01hYy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBcmd1bWVudENvZGVyc01hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlFMTc5RkQ5RTEzNEQzODI1MDAxNUI4ODMgLyogQXJndW1lbnRDb2RlcnNNYWMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBcmd1bWVudENvZGVyc01h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE4MzkzNDgxMzQyOTdBNTAwMTg0
MkVDIC8qIFRleHRJbnB1dFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRleHRJbnB1dFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxOEM5MkYz
MTJEQjlFNzEwMENGMkFFQiAvKiBQcmludEluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUHJpbnRJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTFBMzE3MzExMzRDRUE2QzAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXR0cmlidXRlZFN0cmluZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFMUEzMTczNDEzNENFQTgwMDA3QzlBNEYgLyogQXR0cmlidXRl
ZFN0cmluZy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEF0dHJp
YnV0ZWRTdHJpbmcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQkIxNjg4MTMy
MDE4QkEwMEY0OTQzMSAvKiBGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFCQjE2ODkxMzIwMThCQTAwRjQ5NDMxIC8qIEZ1bGxL
ZXlib2FyZEFjY2Vzc1dhdGNoZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgZmlsZUVuY29kaW5nID0gNDsg
cGF0aCA9IEZ1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUxQ0MxQjhFMTJEN0VBREYwMDYyNTgzOCAvKiBQcmludEluZm8uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpbnRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNzU5LDYgKzI3NjcsMTAgQEAKIAkJQkMxMTFCNUExMTJGNjI4MjAwMzM3
QkFCIC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJRTE3OUZEOUIxMzREMzgwNjAwMTVCODgzIC8qIEFyZ3VtZW50Q29kZXJzTWFjLmggKi8sCisJ
CQkJRTE3OUZEOUUxMzREMzgyNTAwMTVCODgzIC8qIEFyZ3VtZW50Q29kZXJzTWFjLm1tICovLAor
CQkJCUUxQTMxNzMxMTM0Q0VBNkMwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLmggKi8sCisJ
CQkJRTFBMzE3MzQxMzRDRUE4MDAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcubW0gKi8sCiAJ
CQkJMUE2RjlGQjYxMUUxNDA4NTAwREIxMzcxIC8qIENvbW1hbmRMaW5lTWFjLmNwcCAqLywKIAkJ
CQkxQTk2MzlGNTEyRjM4RUNEMDA3OEEwNjIgLyogQ29yZUFuaW1hdGlvblJlbmRlcmVyLmggKi8s
CiAJCQkJMUE5NjM5RjYxMkYzOEVDRDAwNzhBMDYyIC8qIENvcmVBbmltYXRpb25SZW5kZXJlci5t
bSAqLywKQEAgLTM2NjYsNiArMzY3OCw4IEBACiAJCQkJNTE4MzQ1OTMxMzQ1MzJFOTAwOTJCNjk2
IC8qIFdlYkljb25EYXRhYmFzZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE4MzkzNDkx
MzQyOTdBNTAwMTg0MkVDIC8qIFRleHRJbnB1dFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
MEZBNTI0MzEzNDU2OTRBMDAyOEU4QzIgLyogTGF5ZXJUcmVlSG9zdENBTWFjLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlFMUEzMTczMjEzNENFQTZDMDA3QzlBNEYgLyogQXR0cmlidXRlZFN0cmluZy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRTE3OUZEOUMxMzREMzgwNjAwMTVCODgzIC8qIEFyZ3VtZW50
Q29kZXJzTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTQyOTEsNiArNDMwNSw4IEBACiAJCQkJRjZB
OTA4MTMxMzNDMjA1MTAwODJDM0Y0IC8qIFdlYkNvb2tpZU1hbmFnZXJNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQlGNkQ2MzJCQzEzM0QxOTgyMDA3NDNENzcgLyogV2ViQ29va2llTWFuYWdlclBy
b3h5TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4MzQ1OTIxMzQ1MzJFOTAwOTJCNjk2IC8q
IFdlYkljb25EYXRhYmFzZUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUEzMTczNTEz
NENFQTgwMDA3QzlBNEYgLyogQXR0cmlidXRlZFN0cmluZy5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CUUxNzlGRDlGMTM0RDM4MjUwMDE1Qjg4MyAvKiBBcmd1bWVudENvZGVyc01hYy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCShyZXZpc2lvbiA4MzEyMCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsNyBAQCBjbGFzcyBXZWJP
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lcjsKIGNsYXNzIFdlYlBhZ2VHcm91cFByb3h5OwogY2xhc3Mg
V2ViUG9wdXBNZW51OwogY2xhc3MgV2ViV2hlZWxFdmVudDsKK3N0cnVjdCBBdHRyaWJ1dGVkU3Ry
aW5nOwogc3RydWN0IFByaW50SW5mbzsKIHN0cnVjdCBUZXh0SW5wdXRTdGF0ZTsKIHN0cnVjdCBX
ZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOwpAQCAtMzEyLDYgKzMxMyw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCB1aW50NjRfdCByZXBsYWNlbWVu
dFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQsIGJvb2wmIGhhbmRsZWQs
IFRleHRJbnB1dFN0YXRlJiBuZXdTdGF0ZSk7CiAgICAgdm9pZCBnZXRNYXJrZWRSYW5nZSh1aW50
NjRfdCYgbG9jYXRpb24sIHVpbnQ2NF90JiBsZW5ndGgpOwogICAgIHZvaWQgZ2V0U2VsZWN0ZWRS
YW5nZSh1aW50NjRfdCYgbG9jYXRpb24sIHVpbnQ2NF90JiBsZW5ndGgpOworICAgIHZvaWQgZ2V0
QXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZSh1aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3Qg
bGVuZ3RoLCBBdHRyaWJ1dGVkU3RyaW5nJik7CiAgICAgdm9pZCBjaGFyYWN0ZXJJbmRleEZvclBv
aW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHBvaW50LCB1aW50NjRfdCYgcmVzdWx0KTsKICAg
ICB2b2lkIGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKHVpbnQ2NF90IGxvY2F0aW9uLCB1aW50
NjRfdCBsZW5ndGgsIFdlYkNvcmU6OkludFJlY3QmIHJlc3VsdFJlY3QpOwogICAgIHZvaWQgZXhl
Y3V0ZUtleXByZXNzQ29tbWFuZHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFu
ZD4mLCBib29sJiBoYW5kbGVkLCBUZXh0SW5wdXRTdGF0ZSYgbmV3U3RhdGUpOwpJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2Fn
ZXMuaW4JKHJldmlzaW9uIDgzMTIwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTE5MCw2ICsxOTAsNyBA
QCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKICAgICBJbnNlcnRUZXh0KFdURjo6U3RyaW5nIHRleHQs
IHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5n
ZUVuZCkgLT4gKGJvb2wgaGFuZGxlZCwgV2ViS2l0OjpUZXh0SW5wdXRTdGF0ZSBuZXdTdGF0ZSkK
ICAgICBHZXRNYXJrZWRSYW5nZSgpIC0+ICh1aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVu
Z3RoKQogICAgIEdldFNlbGVjdGVkUmFuZ2UoKSAtPiAodWludDY0X3QgbG9jYXRpb24sIHVpbnQ2
NF90IGxlbmd0aCkKKyAgICBHZXRBdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKHVpbnQ2NF90
IGxvY2F0aW9uLCB1aW50NjRfdCBsZW5ndGgpIC0+IChXZWJLaXQ6OkF0dHJpYnV0ZWRTdHJpbmcg
cmVzdWx0KQogICAgIENoYXJhY3RlckluZGV4Rm9yUG9pbnQoV2ViQ29yZTo6SW50UG9pbnQgcG9p
bnQpIC0+ICh1aW50NjRfdCByZXN1bHQpCiAgICAgRmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2Uo
dWludDY0X3QgbG9jYXRpb24sIHVpbnQ2NF90IGxlbmd0aCkgLT4gKFdlYkNvcmU6OkludFJlY3Qg
cmVzdWx0UmVjdCkKICAgICBFeGVjdXRlS2V5cHJlc3NDb21tYW5kcyhWZWN0b3I8V2ViQ29yZTo6
S2V5cHJlc3NDb21tYW5kPiBzYXZlZENvbW1hbmRzKSAtPiAoYm9vbCBoYW5kbGVkLCBXZWJLaXQ6
OlRleHRJbnB1dFN0YXRlIG5ld1N0YXRlKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkocmV2aXNpb24gODMxMjApCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbXBvcnQgIldlYlBhZ2UuaCIKIAogI2lt
cG9ydCAiQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QuaCIKKyNpbXBvcnQgIkF0dHJpYnV0ZWRT
dHJpbmcuaCIKICNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKICNpbXBvcnQgIlBsdWdpblZpZXcu
aCIKICNpbXBvcnQgIlRleHRJbnB1dFN0YXRlLmgiCkBAIC00MCw2ICs0MSw3IEBACiAjaW1wb3J0
IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2ltcG9y
dCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxDb252ZXJ0
ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oPgpAQCAt
MzAyLDYgKzMwNCwzNCBAQCB2b2lkIFdlYlBhZ2U6OmdldFNlbGVjdGVkUmFuZ2UodWludDY0X3Qm
CiAgICAgfQogfQogCit2b2lkIFdlYlBhZ2U6OmdldEF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFu
Z2UodWludDY0X3QgbG9jYXRpb24sIHVpbnQ2NF90IGxlbmd0aCwgQXR0cmlidXRlZFN0cmluZyYg
cmVzdWx0KQoreworICAgIE5TUmFuZ2UgbnNSYW5nZSA9IE5TTWFrZVJhbmdlKGxvY2F0aW9uLCBs
ZW5ndGggLSBsb2NhdGlvbik7CisKKyAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoZnJhbWUtPnNlbGVjdGlvbigpLT5pc05vbmUoKSB8fCAhZnJh
bWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGZyYW1lLT5zZWxlY3Rpb24o
KS0+aXNJblBhc3N3b3JkRmllbGQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPFJh
bmdlPiByYW5nZSA9IGNvbnZlcnRUb1JhbmdlKGZyYW1lLCBuc1JhbmdlKTsKKyAgICBpZiAoIXJh
bmdlKQorICAgICAgICByZXR1cm47CisKKyAgICByZXN1bHQuc3RyaW5nID0gW1dlYkhUTUxDb252
ZXJ0ZXIgZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6cmFuZ2UuZ2V0KCldOworICAg
IE5TQXR0cmlidXRlZFN0cmluZyogYXR0cmlidXRlZFN0cmluZyA9IHJlc3VsdC5zdHJpbmcuZ2V0
KCk7CisgICAgCisgICAgLy8gW1dlYkhUTUxDb252ZXJ0ZXIgZWRpdGluZ0F0dHJpYnV0ZWRTdHJp
bmdGcm9tUmFuZ2U6XSBpbnNpc3RzIG9uIGluc2VydGluZyBhIHRyYWlsaW5nIAorICAgIC8vIHdo
aXRlc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIHdoaWNoIGJyZWFrcyB0aGUgQVRPSyBp
bnB1dCBtZXRob2QuICA8cmRhcjovL3Byb2JsZW0vNTQwMDU1MT4KKyAgICAvLyBUbyB3b3JrIGFy
b3VuZCB0aGlzIHdlIHRydW5jYXRlIHRoZSByZXN1bHRhbnQgc3RyaW5nIHRvIHRoZSBjb3JyZWN0
IGxlbmd0aC4KKyAgICBpZiAoW2F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSA+IG5zUmFuZ2UubGVu
Z3RoKSB7CisgICAgICAgIEFTU0VSVChbYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdID09IG5zUmFu
Z2UubGVuZ3RoICsgMSk7CisgICAgICAgIEFTU0VSVChbW2F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5n
XSBjaGFyYWN0ZXJBdEluZGV4Om5zUmFuZ2UubGVuZ3RoXSA9PSAnXG4nIHx8IFtbYXR0cmlidXRl
ZFN0cmluZyBzdHJpbmddIGNoYXJhY3RlckF0SW5kZXg6bnNSYW5nZS5sZW5ndGhdID09ICcgJyk7
CisgICAgICAgIHJlc3VsdC5zdHJpbmcgPSBbYXR0cmlidXRlZFN0cmluZyBhdHRyaWJ1dGVkU3Vi
c3RyaW5nRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIG5zUmFuZ2UubGVuZ3RoKV07CisgICAgfQor
fQorCiB2b2lkIFdlYlBhZ2U6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnQoSW50UG9pbnQgcG9pbnQs
IHVpbnQ2NF90JiBpbmRleCkKIHsKICAgICBpbmRleCA9IE5TTm90Rm91bmQ7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCShyZXZpc2lvbiA4MzE5NCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDExLTA0LTA3ICBBbGV4ZXkgUHJv
c2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJFR1JFU1NJT04gKFdlYktpdDIpOiBSZXZlcnNlIGNvbnZlcnNp
b24gZG9lc24ndCB3b3JrIGluIEtvdG9lcmkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU4MDY2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84OTY1MzAy
PgorCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW06CisgICAgICAg
ICgtW1dlYkhUTUxSZXByZXNlbnRhdGlvbiBhdHRyaWJ1dGVkU3RyaW5nRnJvbTpzdGFydE9mZnNl
dDp0bzplbmRPZmZzZXQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAg
ICAgICAgKC1bV2ViSFRNTFZpZXcgYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpdKToKKyAg
ICAgICAgKC1bV2ViSFRNTFZpZXcgYXR0cmlidXRlZFN0cmluZ10pOgorICAgICAgICAoLVtXZWJI
VE1MVmlldyBzZWxlY3RlZEF0dHJpYnV0ZWRTdHJpbmddKToKKyAgICAgICAgVXBkYXRlZCBmb3Ig
ZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6IG5vdyB0YWtpbmcgYSBXZWJDb3JlOjpS
YW5nZSBpbnN0ZWFkIG9mIERPTVJhbmdlLgorCiAyMDExLTA0LTA2ICBEYWkgTWlrdXJ1YmUgIDxk
bWlrdXJ1YmVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmlu
LgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24u
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVz
ZW50YXRpb24ubW0JKHJldmlzaW9uIDgzMTIwKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw3ICsyNzcs
NyBAQCAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkVGV4dAogCiAtIChOU0F0dHJp
YnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nRnJvbTooRE9NTm9kZSAqKXN0YXJ0Tm9kZSBz
dGFydE9mZnNldDooaW50KXN0YXJ0T2Zmc2V0IHRvOihET01Ob2RlICopZW5kTm9kZSBlbmRPZmZz
ZXQ6KGludCllbmRPZmZzZXQKIHsKLSAgICByZXR1cm4gW1dlYkhUTUxDb252ZXJ0ZXIgZWRpdGlu
Z0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6a2l0KFJhbmdlOjpjcmVhdGUoY29yZShzdGFydE5v
ZGUpLT5kb2N1bWVudCgpLCBjb3JlKHN0YXJ0Tm9kZSksIHN0YXJ0T2Zmc2V0LCBjb3JlKGVuZE5v
ZGUpLCBlbmRPZmZzZXQpLmdldCgpKV07CisgICAgcmV0dXJuIFtXZWJIVE1MQ29udmVydGVyIGVk
aXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOlJhbmdlOjpjcmVhdGUoY29yZShzdGFydE5v
ZGUpLT5kb2N1bWVudCgpLCBjb3JlKHN0YXJ0Tm9kZSksIHN0YXJ0T2Zmc2V0LCBjb3JlKGVuZE5v
ZGUpLCBlbmRPZmZzZXQpLmdldCgpXTsKIH0KIAogc3RhdGljIEhUTUxGb3JtRWxlbWVudCogZm9y
bUVsZW1lbnRGcm9tRE9NRWxlbWVudChET01FbGVtZW50ICplbGVtZW50KQpJbmRleDogU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lvbiA4MzEyMCkKKysrIFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAg
LTU4MzcsMTMgKzU4MzcsMTMgQEAgLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN1
YnN0cgogICAgICAgICBMT0coVGV4dElucHV0LCAiYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5n
ZTooJXUsICV1KSAtPiBuaWwiLCBuc1JhbmdlLmxvY2F0aW9uLCBuc1JhbmdlLmxlbmd0aCk7CiAg
ICAgICAgIHJldHVybiBuaWw7CiAgICAgfQotICAgIERPTVJhbmdlICpkb21SYW5nZSA9IFtmcmFt
ZSBfY29udmVydE5TUmFuZ2VUb0RPTVJhbmdlOm5zUmFuZ2VdOwotICAgIGlmICghZG9tUmFuZ2Up
IHsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gW2ZyYW1lIF9jb252ZXJ0VG9ET01SYW5nZTpu
c1JhbmdlXTsKKyAgICBpZiAoIXJhbmdlKSB7CiAgICAgICAgIExPRyhUZXh0SW5wdXQsICJhdHRy
aWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOigldSwgJXUpIC0+IG5pbCIsIG5zUmFuZ2UubG9jYXRp
b24sIG5zUmFuZ2UubGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9CiAKLSAgICBO
U0F0dHJpYnV0ZWRTdHJpbmcgKnJlc3VsdCA9IFtXZWJIVE1MQ29udmVydGVyIGVkaXRpbmdBdHRy
aWJ1dGVkU3RyaW5nRnJvbVJhbmdlOmRvbVJhbmdlXTsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcg
KnJlc3VsdCA9IFtXZWJIVE1MQ29udmVydGVyIGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJh
bmdlOnJhbmdlLmdldCgpXTsKICAgICAKICAgICAvLyBbV2ViSFRNTENvbnZlcnRlciBlZGl0aW5n
QXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZTpdICBpbnNpc3RzIG9uIGluc2VydGluZyBhIHRyYWls
aW5nIAogICAgIC8vIHdoaXRlc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIHdoaWNoIGJy
ZWFrcyB0aGUgQVRPSyBpbnB1dCBtZXRob2QuICA8cmRhcjovL3Byb2JsZW0vNTQwMDU1MT4KQEAg
LTYyMjcsNyArNjIyNyw3IEBAIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJp
bmcKICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBfYXR0
cmlidXRlU3RyaW5nRnJvbURPTVJhbmdlOltkb2N1bWVudCBfZG9jdW1lbnRSYW5nZV1dOwogICAg
IGlmICghYXR0cmlidXRlZFN0cmluZykgewogICAgICAgICBEb2N1bWVudCogY29yZURvY3VtZW50
ID0gY29yZShkb2N1bWVudCk7Ci0gICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbV2ViSFRNTENv
bnZlcnRlciBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZTpraXQoUmFuZ2U6OmNyZWF0
ZShjb3JlRG9jdW1lbnQsIGNvcmVEb2N1bWVudCwgMCwgY29yZURvY3VtZW50LCBjb3JlRG9jdW1l
bnQtPmNoaWxkTm9kZUNvdW50KCkpLmdldCgpKV07CisgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcg
PSBbV2ViSFRNTENvbnZlcnRlciBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZTpSYW5n
ZTo6Y3JlYXRlKGNvcmVEb2N1bWVudCwgY29yZURvY3VtZW50LCAwLCBjb3JlRG9jdW1lbnQsIGNv
cmVEb2N1bWVudC0+Y2hpbGROb2RlQ291bnQoKSkuZ2V0KCldOwogICAgIH0KICAgICByZXR1cm4g
YXR0cmlidXRlZFN0cmluZzsKIH0KQEAgLTYyNDQsNyArNjI0NCw3IEBAIC0gKE5TQXR0cmlidXRl
ZFN0cmluZyAqKXNlbGVjdGVkQXR0cmlidXQKICAgICAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSk7CiAgICAgICAgIGlmIChjb3JlRnJhbWUpIHsKICAgICAgICAgICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFtX
ZWJIVE1MQ29udmVydGVyIGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOmtpdChyYW5n
ZS5nZXQoKSldOworICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFtXZWJIVE1MQ29udmVy
dGVyIGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOnJhbmdlLmdldCgpXTsKICAgICAg
ICAgfQogICAgIH0KICAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZzsK
</data>
<flag name="review"
          id="81215"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>