<?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>78517</bug_id>
          
          <creation_ts>2012-02-13 12:18:41 -0800</creation_ts>
          <short_desc>[BlackBerry] Upstream backing store related classes</short_desc>
          <delta_ts>2012-02-29 12:09:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>73144</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Rob Buis">rwlbuis</reporter>
          <assigned_to name="Rob Buis">rwlbuis</assigned_to>
          <cc>jkjiang</cc>
    
    <cc>leo.yang</cc>
    
    <cc>levin+threading</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>555455</commentid>
    <comment_count>0</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-02-13 12:18:41 -0800</bug_when>
    <thetext>This consists of 6 files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555457</commentid>
    <comment_count>1</comment_count>
      <attachid>126805</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-02-13 12:21:58 -0800</bug_when>
    <thetext>Created attachment 126805
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555459</commentid>
    <comment_count>2</comment_count>
      <attachid>126805</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-13 12:24:49 -0800</bug_when>
    <thetext>Comment on attachment 126805
Patch

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

&gt; Source/WebKit/blackberry/WebKitSupport/BackingStoreCompositingSurface.cpp:97
&gt; +#if OS(QNX)

probably unneeded?

&gt; Source/WebKit/blackberry/WebKitSupport/BackingStoreCompositingSurface.h:2
&gt; + * Copyright (C) 2009, 2010, 2011 Research In Motion Limited. All rights reserved.

2012?

&gt; Source/WebKit/blackberry/WebKitSupport/BackingStoreTile.cpp:145
&gt; +#if OS(QNX)

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555464</commentid>
    <comment_count>3</comment_count>
      <attachid>126806</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-02-13 12:33:51 -0800</bug_when>
    <thetext>Created attachment 126806
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556278</commentid>
    <comment_count>4</comment_count>
      <attachid>126972</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-02-14 07:03:37 -0800</bug_when>
    <thetext>Created attachment 126972
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556280</commentid>
    <comment_count>5</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-02-14 07:05:29 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=126972) [details]
&gt; Patch

This latest patch contains Leo&apos;s recent changes to BackingStoreCompositingSurface. I did similar changes to BackingStoreTile, and also added a cleaned up version of BackingStoreClient. Of course this stuff compiles :)
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556285</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-14 07:10:03 -0800</bug_when>
    <thetext>Attachment 126972 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 9

Updating OpenSource
First, rewinding head to replay your work on top of it...
Applying: [Mac][Win][WK2] Switch to RFC 6455 protocol for WebSockets
Using index info to reconstruct a base tree...
&lt;stdin&gt;:1578: trailing whitespace.
        
&lt;stdin&gt;:1647: trailing whitespace.
    
&lt;stdin&gt;:1657: trailing whitespace.
    
&lt;stdin&gt;:1672: trailing whitespace.
        return 0;        
&lt;stdin&gt;:1674: trailing whitespace.
    
warning: squelched 7 whitespace errors
warning: 12 lines add whitespace errors.
Falling back to patching base and 3-way merge...
warning: too many files (created: 168776 deleted: 3), skipping inexact rename detection
Auto-merging LayoutTests/ChangeLog
CONFLICT (content): Merge conflict in LayoutTests/ChangeLog
Auto-merging Source/WebCore/ChangeLog
CONFLICT (content): Merge conflict in Source/WebCore/ChangeLog
Auto-merging Source/WebKit2/ChangeLog
CONFLICT (content): Merge conflict in Source/WebKit2/ChangeLog
Auto-merging Tools/ChangeLog
CONFLICT (content): Merge conflict in Tools/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 [Mac][Win][WK2] Switch to RFC 6455 protocol for WebSockets

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556288</commentid>
    <comment_count>7</comment_count>
      <attachid>126972</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-14 07:15:23 -0800</bug_when>
    <thetext>Comment on attachment 126972
Patch

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

one more round needed.

&gt; Source/WebKit/blackberry/WebKitSupport/BackingStoreClient.cpp:43
&gt; +static inline WebCore::IntSize pointToSize(const WebCore::IntPoint&amp; point)

unneeded webcore:: here and elsewhere in the patch.

&gt; Source/WebKit/blackberry/WebKitSupport/BackingStoreClient.cpp:144
&gt; +    if (!isMainFrame()) {
&gt; +        // It is possible that the owner HTML element has been removed at this point,
&gt; +        // especially when the frame is loading a JavaScript URL.
&gt; +        if (Element* elt = m_frame-&gt;ownerElement()) {
&gt; +            if (RenderBox* obj = elt-&gt;renderBox())
&gt; +                rect.move(obj-&gt;borderLeft() + obj-&gt;paddingLeft(), obj-&gt;borderTop() + obj-&gt;paddingTop());
&gt; +        }
&gt; +    }
&gt; +
&gt; +    WebCore::Frame* frame = m_frame;
&gt; +    while (frame) {
&gt; +        if (Element* element = static_cast&lt;Element*&gt;(frame-&gt;ownerElement())) {
&gt; +            do {
&gt; +                rect.move(element-&gt;offsetLeft(), element-&gt;offsetTop());
&gt; +            } while ((element = element-&gt;offsetParent()));
&gt; +        }
&gt; +
&gt; +        if ((frame = frame-&gt;tree()-&gt;parent()))
&gt; +            rect.move((-frame-&gt;view()-&gt;scrollOffset()));
&gt; +    }

we can certainly improve this/speed it up, but in a follow up. I think I had done that already.

&gt; Source/WebKit/blackberry/WebKitSupport/BackingStoreClient.h:93
&gt; +    bool isLoading() const;
&gt; +    WebPagePrivate::LoadState loadState() const;

these methods should not belong here, but that is another story...

&gt; Source/WebKit/blackberry/WebKitSupport/BackingStoreClient.h:115
&gt; +    // FIXME: Leaving the below lines commented out as a reference for us to soon be sure if we need these
&gt; +    // methods and class variables be moved from WebPage to BackingStoreClient.
&gt; +    // Notification methods that deliver changes to the real geometry of the device as specified above.
&gt; +    // void notifyTransformChanged();
&gt; +    // void notifyTransformedContentsSizeChanged();
&gt; +    // void notifyTransformedScrollChanged();
&gt; +    // m_overflowExceedsContentsSize = true;

hummmmm....

&gt; Source/WebKit/blackberry/WebKitSupport/BackingStoreCompositingSurface.h:21
&gt; +#ifndef BackingStoreCompositingSurface_h
&gt; +#define BackingStoreCompositingSurface_h
&gt; +

is this the same as leo&apos;s patch? with the internal changes/clean ups he did yesterday?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556329</commentid>
    <comment_count>8</comment_count>
      <attachid>126985</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-02-14 08:40:30 -0800</bug_when>
    <thetext>Created attachment 126985
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556331</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-14 08:42:51 -0800</bug_when>
    <thetext>Attachment 126985 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 9

Updating OpenSource
First, rewinding head to replay your work on top of it...
Applying: [Mac][Win][WK2] Switch to RFC 6455 protocol for WebSockets
Using index info to reconstruct a base tree...
&lt;stdin&gt;:1578: trailing whitespace.
        
&lt;stdin&gt;:1647: trailing whitespace.
    
&lt;stdin&gt;:1657: trailing whitespace.
    
&lt;stdin&gt;:1672: trailing whitespace.
        return 0;        
&lt;stdin&gt;:1674: trailing whitespace.
    
warning: squelched 7 whitespace errors
warning: 12 lines add whitespace errors.
Falling back to patching base and 3-way merge...
warning: too many files (created: 168776 deleted: 3), skipping inexact rename detection
Auto-merging LayoutTests/ChangeLog
Auto-merging Source/WebCore/ChangeLog
CONFLICT (content): Merge conflict in Source/WebCore/ChangeLog
Auto-merging Source/WebKit2/ChangeLog
CONFLICT (content): Merge conflict in Source/WebKit2/ChangeLog
Auto-merging Tools/ChangeLog
CONFLICT (content): Merge conflict in Tools/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 [Mac][Win][WK2] Switch to RFC 6455 protocol for WebSockets

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556411</commentid>
    <comment_count>10</comment_count>
      <attachid>126985</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-14 11:00:51 -0800</bug_when>
    <thetext>Comment on attachment 126985
Patch

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

&gt; Source/WebKit/blackberry/WebKitSupport/BackingStoreClient.cpp:31
&gt; +#include &quot;IntPoint.h&quot;
&gt; +#include &quot;IntRect.h&quot;
&gt; +#include &quot;IntSize.h&quot;

do we need to include all these?

&gt; Source/WebKit/blackberry/WebKitSupport/BackingStoreClient.cpp:364
&gt; +    return m_frame
&gt; +        &amp;&amp; m_frame-&gt;page()
&gt; +        &amp;&amp; m_frame-&gt;page()-&gt;focusController()
&gt; +        &amp;&amp; m_frame-&gt;page()-&gt;focusController()-&gt;focusedFrame() == m_frame;

wrong indentation style I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556422</commentid>
    <comment_count>11</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-02-14 11:14:22 -0800</bug_when>
    <thetext>Landed in r107716.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556808</commentid>
    <comment_count>12</comment_count>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2012-02-14 17:32:11 -0800</bug_when>
    <thetext>*** Bug 78592 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567814</commentid>
    <comment_count>13</comment_count>
    <who name="Jacky Jiang">jkjiang</who>
    <bug_when>2012-02-29 12:09:48 -0800</bug_when>
    <thetext>*** Bug 79919 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126805</attachid>
            <date>2012-02-13 12:21:58 -0800</date>
            <delta_ts>2012-02-13 12:33:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78517-20120213152433.patch</filename>
            <type>text/plain</type>
            <size>16293</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3NDI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDMwNmVhZDIzN2UwMDIzYjJi
MWQ0NjA4NmE0Nzg5NjNjYjEzYjBlMjguLjljODFhYjU5NzVkZmU0YTQ0NGZhYTA1NTI4NzJlNDVj
MTYwNzgxYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMDItMTMgIFJvYiBCdWlz
ICA8cmJ1aXNAcmltLmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gVXBzdHJlYW0gYmFja2lu
ZyBzdG9yZSByZWxhdGVkIGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc4NTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW5pdGlhbCB1cHN0cmVhbSwgbm8gbmV3IHRlc3RzLgorCisgICAgICAg
ICogYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9yZUNvbXBvc2l0aW5nU3VyZmFj
ZS5jcHA6IEFkZGVkLgorICAgICAgICAqIGJsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5n
U3RvcmVDb21wb3NpdGluZ1N1cmZhY2UuaDogQWRkZWQuCisgICAgICAgICogYmxhY2tiZXJyeS9X
ZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9yZVRpbGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBibGFj
a2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlVGlsZS5oOiBBZGRlZC4KKwogMjAxMi0w
Mi0xMCAgUm9iIEJ1aXMgIDxyYnVpc0ByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBV
cHN0cmVhbSBncmFwaGljcyBoZWxwZXIgY2xhc3NlcyBpbiBXZWJLaXRTdXBwb3J0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVD
b21wb3NpdGluZ1N1cmZhY2UuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvQmFja2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJmYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZjll
OWU2N2Q2NjY2OWY0OGRmMDQ4ZmNiODU3OTFkZGM3ODEyZWRiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlQ29tcG9z
aXRpbmdTdXJmYWNlLmNwcApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQmFja2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJmYWNlLmgiCisKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1H
cmFwaGljcy5oPgorCit1c2luZyBuYW1lc3BhY2UgQmxhY2tCZXJyeTo6UGxhdGZvcm07Cit1c2lu
ZyBuYW1lc3BhY2UgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOworCituYW1lc3BhY2Ug
QmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworQ29tcG9zaXRpbmdTdXJmYWNlQnVm
ZmVyOjpDb21wb3NpdGluZ1N1cmZhY2VCdWZmZXIoY29uc3QgUGxhdGZvcm06OkludFNpemUmIHNp
emUpCisgICAgOiBtX3NpemUoc2l6ZSkKKyAgICAsIG1fYnVmZmVyKDApCit7Cit9CisKK0NvbXBv
c2l0aW5nU3VyZmFjZUJ1ZmZlcjo6fkNvbXBvc2l0aW5nU3VyZmFjZUJ1ZmZlcigpCit7CisgICAg
ZGVzdHJveUJ1ZmZlcihtX2J1ZmZlcik7Cit9CisKK1BsYXRmb3JtOjpJbnRTaXplIENvbXBvc2l0
aW5nU3VyZmFjZUJ1ZmZlcjo6c3VyZmFjZVNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3Np
emU7Cit9CisKK0J1ZmZlciogQ29tcG9zaXRpbmdTdXJmYWNlQnVmZmVyOjpuYXRpdmVCdWZmZXIo
KSBjb25zdAoreworICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIG1fYnVmZmVyID0gY3JlYXRl
QnVmZmVyKG1fc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkdyYXBoaWNzOjpUaWxlQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyKTsKKworICAg
IHJldHVybiBtX2J1ZmZlcjsKK30KKworQmFja2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJmYWNlOjpC
YWNraW5nU3RvcmVDb21wb3NpdGluZ1N1cmZhY2UoY29uc3QgUGxhdGZvcm06OkludFNpemUmIHNp
emUsIGJvb2wgZG91YmxlQnVmZmVyZWQpCisgICAgOiBtX2lzRG91YmxlQnVmZmVyZWQoZG91Ymxl
QnVmZmVyZWQpCisgICAgLCBtX25lZWRzU3luYyh0cnVlKQoreworICAgIG1fZnJvbnRCdWZmZXIg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihuZXcgQ29tcG9zaXRpbmdTdXJmYWNlQnVmZmVy
KHNpemUpKTsKKyAgICBtX2JhY2tCdWZmZXIgPSBkb3VibGVCdWZmZXJlZCA/IHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQ+KG5ldyBDb21wb3NpdGluZ1N1cmZhY2VCdWZmZXIoc2l6ZSkpIDogMDsK
K30KKworQmFja2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJmYWNlOjp+QmFja2luZ1N0b3JlQ29tcG9z
aXRpbmdTdXJmYWNlKCkKK3sKKyAgICBDb21wb3NpdGluZ1N1cmZhY2VCdWZmZXIqIGZyb250ID0g
cmVpbnRlcnByZXRfY2FzdDxDb21wb3NpdGluZ1N1cmZhY2VCdWZmZXIqPihtX2Zyb250QnVmZmVy
KTsKKyAgICBkZWxldGUgZnJvbnQ7CisgICAgbV9mcm9udEJ1ZmZlciA9IDA7CisKKyAgICBDb21w
b3NpdGluZ1N1cmZhY2VCdWZmZXIqIGJhY2sgPSByZWludGVycHJldF9jYXN0PENvbXBvc2l0aW5n
U3VyZmFjZUJ1ZmZlcio+KG1fYmFja0J1ZmZlcik7CisgICAgZGVsZXRlIGJhY2s7CisgICAgbV9i
YWNrQnVmZmVyID0gMDsKK30KKworQ29tcG9zaXRpbmdTdXJmYWNlQnVmZmVyKiBCYWNraW5nU3Rv
cmVDb21wb3NpdGluZ1N1cmZhY2U6OmZyb250QnVmZmVyKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
bV9mcm9udEJ1ZmZlcik7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29tcG9zaXRpbmdT
dXJmYWNlQnVmZmVyKj4obV9mcm9udEJ1ZmZlcik7Cit9CisKK0NvbXBvc2l0aW5nU3VyZmFjZUJ1
ZmZlciogQmFja2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJmYWNlOjpiYWNrQnVmZmVyKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1faXNEb3VibGVCdWZmZXJlZCkKKyAgICAgICAgcmV0dXJuIGZyb250QnVm
ZmVyKCk7CisKKyAgICBBU1NFUlQobV9iYWNrQnVmZmVyKTsKKyAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxDb21wb3NpdGluZ1N1cmZhY2VCdWZmZXIqPihtX2JhY2tCdWZmZXIpOworfQorCit2
b2lkIEJhY2tpbmdTdG9yZUNvbXBvc2l0aW5nU3VyZmFjZTo6c3dhcEJ1ZmZlcnMoKQoreworICAg
IGlmICghbV9pc0RvdWJsZUJ1ZmZlcmVkKQorICAgICAgICByZXR1cm47CisKKyNpZiBPUyhRTlgp
CisgICAgLy8gc3RvcmUgdGVtcHMKKyAgICB1bnNpZ25lZCBmcm9udCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQ+KGZyb250QnVmZmVyKCkpOworICAgIHVuc2lnbmVkIGJhY2sgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkPihiYWNrQnVmZmVyKCkpOworCisgICAgLy8gYXRvbWljIGNoYW5n
ZQorICAgIF9zbXBfeGNoZygmbV9mcm9udEJ1ZmZlciwgYmFjayk7CisgICAgX3NtcF94Y2hnKCZt
X2JhY2tCdWZmZXIsIGZyb250KTsKKyNlbHNlCisjZXJyb3IgImltcGxlbWVudCBtZSEiCisjZW5k
aWYKK30KKworfQorfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdT
dG9yZUNvbXBvc2l0aW5nU3VyZmFjZS5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktp
dFN1cHBvcnQvQmFja2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGNl
MWZiMGNmMWU1OGRiYjRkZTU2MGMzOGQ5NTU4Y2YwZWUwYjVhMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9yZUNvbXBv
c2l0aW5nU3VyZmFjZS5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBCYWNraW5nU3RvcmVDb21wb3Np
dGluZ1N1cmZhY2VfaAorI2RlZmluZSBCYWNraW5nU3RvcmVDb21wb3NpdGluZ1N1cmZhY2VfaAor
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSA8QmxhY2tCZXJy
eVBsYXRmb3JtSW50UmVjdFJlZ2lvbi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEJsYWNrQmVycnkg
eworbmFtZXNwYWNlIFBsYXRmb3JtIHsKK25hbWVzcGFjZSBHcmFwaGljcyB7CitzdHJ1Y3QgQnVm
ZmVyOworfQorfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIENvbXBvc2l0aW5nU3VyZmFj
ZUJ1ZmZlciB7CitwdWJsaWM6CisgICAgQ29tcG9zaXRpbmdTdXJmYWNlQnVmZmVyKGNvbnN0IFBs
YXRmb3JtOjpJbnRTaXplJik7CisgICAgfkNvbXBvc2l0aW5nU3VyZmFjZUJ1ZmZlcigpOworICAg
IFBsYXRmb3JtOjpJbnRTaXplIHN1cmZhY2VTaXplKCkgY29uc3Q7CisKKyAgICBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogbmF0aXZlQnVmZmVyKCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgUGxhdGZvcm06OkludFNpemUgbV9zaXplOworICAgIG11dGFibGUgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIG1fYnVmZmVyOworfTsKKworCitjbGFz
cyBCYWNraW5nU3RvcmVDb21wb3NpdGluZ1N1cmZhY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8QmFja2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJmYWNlPiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8QmFja2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJmYWNlPiBjcmVhdGUoY29u
c3QgUGxhdGZvcm06OkludFNpemUmIHNpemUsIGJvb2wgZG91YmxlQnVmZmVyZWQpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJhY2tpbmdTdG9yZUNvbXBvc2l0aW5nU3VyZmFj
ZShzaXplLCBkb3VibGVCdWZmZXJlZCkpOworICAgIH0KKworICAgIH5CYWNraW5nU3RvcmVDb21w
b3NpdGluZ1N1cmZhY2UoKTsKKworICAgIENvbXBvc2l0aW5nU3VyZmFjZUJ1ZmZlciogZnJvbnRC
dWZmZXIoKSBjb25zdDsKKyAgICBDb21wb3NpdGluZ1N1cmZhY2VCdWZmZXIqIGJhY2tCdWZmZXIo
KSBjb25zdDsKKyAgICBib29sIGlzRG91YmxlQnVmZmVyZWQoKSBjb25zdCB7IHJldHVybiBtX2lz
RG91YmxlQnVmZmVyZWQ7IH0KKyAgICB2b2lkIHN3YXBCdWZmZXJzKCk7CisKKyAgICBib29sIG5l
ZWRzU3luYygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNTeW5jOyB9CisgICAgdm9pZCBzZXROZWVk
c1N5bmMoYm9vbCBuZWVkc1N5bmMpIHsgbV9uZWVkc1N5bmMgPSBuZWVkc1N5bmM7IH0KKworcHJp
dmF0ZToKKyAgICBCYWNraW5nU3RvcmVDb21wb3NpdGluZ1N1cmZhY2UoY29uc3QgUGxhdGZvcm06
OkludFNpemUmLCBib29sIGRvdWJsZUJ1ZmZlcmVkKTsKKworICAgIG11dGFibGUgdW5zaWduZWQg
bV9mcm9udEJ1ZmZlcjsKKyAgICBtdXRhYmxlIHVuc2lnbmVkIG1fYmFja0J1ZmZlcjsKKyAgICBi
b29sIG1faXNEb3VibGVCdWZmZXJlZDsKKyAgICBib29sIG1fbmVlZHNTeW5jOworfTsKK30KK30K
KworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmIC8vIEJh
Y2tpbmdTdG9yZUNvbXBvc2l0aW5nU3VyZmFjZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVUaWxlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9yZVRpbGUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmRjNjUxNzUxNzgyMTgxNDRmY2Y3NzJiYmFmNTU4NzM0NjY1YTBjMmEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5n
U3RvcmVUaWxlLmNwcApAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSwgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQmFja2luZ1N0b3JlVGlsZS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiU3VyZmFjZVBvb2wuaCIKKworI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0
Zm9ybUdyYXBoaWNzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTsK
K3VzaW5nIG5hbWVzcGFjZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M7CisKK25hbWVz
cGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitUaWxlQnVmZmVyOjpUaWxl
QnVmZmVyKGNvbnN0IFBsYXRmb3JtOjpJbnRTaXplJiBzaXplKQorICAgIDogbV9zaXplKHNpemUp
CisgICAgLCBtX2J1ZmZlcigwKQorICAgICwgbV9ibGl0R2VuZXJhdGlvbigwKQoreworfQorCitU
aWxlQnVmZmVyOjp+VGlsZUJ1ZmZlcigpCit7CisgICAgZGVzdHJveUJ1ZmZlcihtX2J1ZmZlcik7
Cit9CisKK1BsYXRmb3JtOjpJbnRTaXplIFRpbGVCdWZmZXI6OnNpemUoKSBjb25zdAoreworICAg
IHJldHVybiBtX3NpemU7Cit9CisKK1BsYXRmb3JtOjpJbnRSZWN0IFRpbGVCdWZmZXI6OnJlY3Qo
KSBjb25zdAoreworICAgIHJldHVybiBQbGF0Zm9ybTo6SW50UmVjdChQbGF0Zm9ybTo6SW50UG9p
bnQ6Onplcm8oKSwgbV9zaXplKTsKK30KKworYm9vbCBUaWxlQnVmZmVyOjppc1JlbmRlcmVkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gaXNSZW5kZXJlZChyZWN0KCkpOworfQorCitib29sIFRpbGVC
dWZmZXI6OmlzUmVuZGVyZWQoY29uc3QgUGxhdGZvcm06OkludFJlY3RSZWdpb24mIGNvbnRlbnRz
KSBjb25zdAoreworICAgIHJldHVybiBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbjo6c3VidHJhY3RS
ZWdpb25zKGNvbnRlbnRzLCBtX3JlbmRlcmVkUmVnaW9uKS5pc0VtcHR5KCk7Cit9CisKK3ZvaWQg
VGlsZUJ1ZmZlcjo6Y2xlYXJSZW5kZXJlZFJlZ2lvbihjb25zdCBQbGF0Zm9ybTo6SW50UmVjdFJl
Z2lvbiYgcmVnaW9uKQoreworICAgIG1fcmVuZGVyZWRSZWdpb24gPSBQbGF0Zm9ybTo6SW50UmVj
dFJlZ2lvbjo6c3VidHJhY3RSZWdpb25zKG1fcmVuZGVyZWRSZWdpb24sIHJlZ2lvbik7Cit9CisK
K3ZvaWQgVGlsZUJ1ZmZlcjo6Y2xlYXJSZW5kZXJlZFJlZ2lvbigpCit7CisgICAgbV9yZW5kZXJl
ZFJlZ2lvbiA9IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uKCk7Cit9CisKK3ZvaWQgVGlsZUJ1ZmZl
cjo6YWRkUmVuZGVyZWRSZWdpb24oY29uc3QgUGxhdGZvcm06OkludFJlY3RSZWdpb24mIHJlZ2lv
bikKK3sKKyAgICBtX3JlbmRlcmVkUmVnaW9uID0gUGxhdGZvcm06OkludFJlY3RSZWdpb246OnVu
aW9uUmVnaW9ucyhyZWdpb24sIG1fcmVuZGVyZWRSZWdpb24pOworfQorCitQbGF0Zm9ybTo6SW50
UmVjdFJlZ2lvbiBUaWxlQnVmZmVyOjpyZW5kZXJlZFJlZ2lvbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcmVuZGVyZWRSZWdpb247Cit9CisKK1BsYXRmb3JtOjpJbnRSZWN0UmVnaW9uIFRpbGVC
dWZmZXI6Om5vdFJlbmRlcmVkUmVnaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUGxhdGZvcm06
OkludFJlY3RSZWdpb246OnN1YnRyYWN0UmVnaW9ucyhyZWN0KCksIHJlbmRlcmVkUmVnaW9uKCkp
OworfQorCitCdWZmZXIqIFRpbGVCdWZmZXI6Om5hdGl2ZUJ1ZmZlcigpIGNvbnN0Cit7CisgICAg
aWYgKCFtX2J1ZmZlcikKKyAgICAgICAgbV9idWZmZXIgPSBjcmVhdGVCdWZmZXIobV9zaXplLCBQ
bGF0Zm9ybTo6R3JhcGhpY3M6OlRpbGVCdWZmZXIsIFN1cmZhY2VQb29sOjpnbG9iYWxTdXJmYWNl
UG9vbCgpLT5zaGFyZWRQaXhtYXBHcm91cCgpKTsKKworICAgIHJldHVybiBtX2J1ZmZlcjsKK30K
KworCitCYWNraW5nU3RvcmVUaWxlOjpCYWNraW5nU3RvcmVUaWxlKGNvbnN0IFBsYXRmb3JtOjpJ
bnRTaXplJiBzaXplLCBCdWZmZXJpbmdNb2RlIG1vZGUpCisgICAgOiBtX2J1ZmZlcmluZ01vZGUo
bW9kZSkKKyAgICAsIG1fY29tbWl0dGVkKGZhbHNlKQorICAgICwgbV9iYWNrZ3JvdW5kUGFpbnRl
ZChmYWxzZSkKKyAgICAsIG1faG9yaXpvbnRhbFNoaWZ0KDApCisgICAgLCBtX3ZlcnRpY2FsU2hp
ZnQoMCkKK3sKKyAgICBtX2Zyb250QnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4o
bmV3IFRpbGVCdWZmZXIoc2l6ZSkpOworfQorCitCYWNraW5nU3RvcmVUaWxlOjp+QmFja2luZ1N0
b3JlVGlsZSgpCit7CisgICAgVGlsZUJ1ZmZlciogZnJvbnQgPSByZWludGVycHJldF9jYXN0PFRp
bGVCdWZmZXIqPihtX2Zyb250QnVmZmVyKTsKKyAgICBkZWxldGUgZnJvbnQ7CisgICAgbV9mcm9u
dEJ1ZmZlciA9IDA7Cit9CisKK1BsYXRmb3JtOjpJbnRTaXplIEJhY2tpbmdTdG9yZVRpbGU6OnNp
emUoKSBjb25zdAoreworICAgIHJldHVybiBmcm9udEJ1ZmZlcigpLT5zaXplKCk7Cit9CisKK1Bs
YXRmb3JtOjpJbnRSZWN0IEJhY2tpbmdTdG9yZVRpbGU6OnJlY3QoKSBjb25zdAoreworICAgIHJl
dHVybiBmcm9udEJ1ZmZlcigpLT5yZWN0KCk7Cit9CisKK1RpbGVCdWZmZXIqIEJhY2tpbmdTdG9y
ZVRpbGU6OmZyb250QnVmZmVyKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9mcm9udEJ1ZmZlcik7
CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VGlsZUJ1ZmZlcio+KG1fZnJvbnRCdWZmZXIp
OworfQorCitUaWxlQnVmZmVyKiBCYWNraW5nU3RvcmVUaWxlOjpiYWNrQnVmZmVyKCkgY29uc3QK
K3sKKyAgICBpZiAobV9idWZmZXJpbmdNb2RlID09IFNpbmdsZUJ1ZmZlcmVkKQorICAgICAgICBy
ZXR1cm4gZnJvbnRCdWZmZXIoKTsKKworICAgIHJldHVybiBTdXJmYWNlUG9vbDo6Z2xvYmFsU3Vy
ZmFjZVBvb2woKS0+YmFja0J1ZmZlcigpOworfQorCit2b2lkIEJhY2tpbmdTdG9yZVRpbGU6OnN3
YXBCdWZmZXJzKCkKK3sKKyAgICBpZiAobV9idWZmZXJpbmdNb2RlID09IFNpbmdsZUJ1ZmZlcmVk
KQorICAgICAgICByZXR1cm47CisKKyNpZiBPUyhRTlgpCisgICAgLy8gc3RvcmUgdGVtcHMKKyAg
ICB1bnNpZ25lZCBmcm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGZyb250QnVmZmVy
KCkpOworICAgIHVuc2lnbmVkIGJhY2sgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihiYWNr
QnVmZmVyKCkpOworCisgICAgLy8gYXRvbWljIGNoYW5nZQorICAgIF9zbXBfeGNoZygmbV9mcm9u
dEJ1ZmZlciwgYmFjayk7CisgICAgX3NtcF94Y2hnKCZTdXJmYWNlUG9vbDo6Z2xvYmFsU3VyZmFj
ZVBvb2woKS0+bV9iYWNrQnVmZmVyLCBmcm9udCk7CisjZWxzZQorI2Vycm9yICJpbXBsZW1lbnQg
bWUhIgorI2VuZGlmCit9CisKK3ZvaWQgQmFja2luZ1N0b3JlVGlsZTo6cmVzZXQoKQoreworICAg
IHNldENvbW1pdHRlZChmYWxzZSk7CisgICAgZnJvbnRCdWZmZXIoKS0+Y2xlYXJSZW5kZXJlZFJl
Z2lvbigpOworICAgIGJhY2tCdWZmZXIoKS0+Y2xlYXJSZW5kZXJlZFJlZ2lvbigpOworICAgIGNs
ZWFyU2hpZnQoKTsKK30KKwordm9pZCBCYWNraW5nU3RvcmVUaWxlOjpwYWludEJhY2tncm91bmQo
KQoreworICAgIG1fYmFja2dyb3VuZFBhaW50ZWQgPSB0cnVlOworCisgICAgY2xlYXJCdWZmZXIo
YmFja0J1ZmZlcigpLT5uYXRpdmVCdWZmZXIoKSwgMCwgMCwgMCwgMCk7Cit9CisKK30KK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdT
dG9yZVRpbGUuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tp
bmdTdG9yZVRpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYzk1Y2NhMzJlMzhjOWQ2ZjVmOTFkZTFjNWY5ZDZj
YWZkMTVmOTljCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YktpdFN1cHBvcnQvQmFja2luZ1N0b3JlVGlsZS5oCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgQmFj
a2luZ1N0b3JlVGlsZV9oCisjZGVmaW5lIEJhY2tpbmdTdG9yZVRpbGVfaAorCisjaW5jbHVkZSAi
QmxhY2tCZXJyeVBsYXRmb3JtSW50UmVjdFJlZ2lvbi5oIgorI2luY2x1ZGUgIkJsYWNrQmVycnlQ
bGF0Zm9ybVByaW1pdGl2ZXMuaCIKKworbmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNl
IFBsYXRmb3JtIHsKK25hbWVzcGFjZSBHcmFwaGljcyB7CitzdHJ1Y3QgQnVmZmVyOworfQorfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFRpbGVCdWZmZXIgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgVGlsZUJ1ZmZlcihjb25zdCBQbGF0Zm9ybTo6SW50U2l6ZSYpOworICAgICAgICB+VGls
ZUJ1ZmZlcigpOworICAgICAgICBQbGF0Zm9ybTo6SW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAg
ICAgIFBsYXRmb3JtOjpJbnRSZWN0IHJlY3QoKSBjb25zdDsKKworICAgICAgICBib29sIGlzUmVu
ZGVyZWQoKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc1JlbmRlcmVkKGNvbnN0IFBsYXRmb3JtOjpJ
bnRSZWN0UmVnaW9uJiBjb250ZW50cykgY29uc3Q7CisgICAgICAgIHZvaWQgY2xlYXJSZW5kZXJl
ZFJlZ2lvbigpOworICAgICAgICB2b2lkIGNsZWFyUmVuZGVyZWRSZWdpb24oY29uc3QgUGxhdGZv
cm06OkludFJlY3RSZWdpb24mKTsKKyAgICAgICAgdm9pZCBhZGRSZW5kZXJlZFJlZ2lvbihjb25z
dCBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiYpOworICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdFJl
Z2lvbiByZW5kZXJlZFJlZ2lvbigpIGNvbnN0OworICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdFJl
Z2lvbiBub3RSZW5kZXJlZFJlZ2lvbigpIGNvbnN0OworCisgICAgICAgIFBsYXRmb3JtOjpHcmFw
aGljczo6QnVmZmVyKiBuYXRpdmVCdWZmZXIoKSBjb25zdDsKKworICAgICAgICB2b2lkIHNldEJs
aXRHZW5lcmF0aW9uKGludCBnKSBjb25zdCB7IG1fYmxpdEdlbmVyYXRpb24gPSBnOyB9CisgICAg
ICAgIGludCBibGl0R2VuZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYmxpdEdlbmVyYXRpb247
IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFBsYXRmb3JtOjpJbnRTaXplIG1fc2l6ZTsKKyAg
ICAgICAgUGxhdGZvcm06OkludFJlY3RSZWdpb24gbV9yZW5kZXJlZFJlZ2lvbjsKKyAgICAgICAg
bXV0YWJsZSBQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogbV9idWZmZXI7CisgICAgICAgIG11
dGFibGUgaW50IG1fYmxpdEdlbmVyYXRpb247Cit9OworCisKK2NsYXNzIEJhY2tpbmdTdG9yZVRp
bGUgeworcHVibGljOgorICAgIGVudW0gQnVmZmVyaW5nTW9kZSB7IFNpbmdsZUJ1ZmZlcmVkLCBE
b3VibGVCdWZmZXJlZCB9OworCisgICAgc3RhdGljIEJhY2tpbmdTdG9yZVRpbGUqIGNyZWF0ZShj
b25zdCBQbGF0Zm9ybTo6SW50U2l6ZSYgc2l6ZSwgQnVmZmVyaW5nTW9kZSBtb2RlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG5ldyBCYWNraW5nU3RvcmVUaWxlKHNpemUsIG1vZGUpOworICAgIH0K
KworICAgIH5CYWNraW5nU3RvcmVUaWxlKCk7CisKKyAgICBQbGF0Zm9ybTo6SW50U2l6ZSBzaXpl
KCkgY29uc3Q7CisgICAgUGxhdGZvcm06OkludFJlY3QgcmVjdCgpIGNvbnN0OworCisgICAgVGls
ZUJ1ZmZlciogZnJvbnRCdWZmZXIoKSBjb25zdDsKKyAgICBUaWxlQnVmZmVyKiBiYWNrQnVmZmVy
KCkgY29uc3Q7CisgICAgYm9vbCBpc0RvdWJsZUJ1ZmZlcmVkKCkgY29uc3QgeyByZXR1cm4gbV9i
dWZmZXJpbmdNb2RlID09IERvdWJsZUJ1ZmZlcmVkOyB9CisKKyAgICB2b2lkIHJlc2V0KCk7Cisg
ICAgYm9vbCBiYWNrZ3JvdW5kUGFpbnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZFBh
aW50ZWQ7IH0KKyAgICB2b2lkIHBhaW50QmFja2dyb3VuZCgpOworCisgICAgYm9vbCBpc0NvbW1p
dHRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29tbWl0dGVkOyB9CisgICAgdm9pZCBzZXRDb21taXR0
ZWQoYm9vbCBjb21taXR0ZWQpIHsgbV9jb21taXR0ZWQgPSBjb21taXR0ZWQ7IH0KKworICAgIHZv
aWQgY2xlYXJTaGlmdCgpIHsgbV9ob3Jpem9udGFsU2hpZnQgPSAwOyBtX3ZlcnRpY2FsU2hpZnQg
PSAwOyB9CisgICAgaW50IGhvcml6b250YWxTaGlmdCgpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpv
bnRhbFNoaWZ0OyB9CisgICAgdm9pZCBzZXRIb3Jpem9udGFsU2hpZnQoaW50IHNoaWZ0KSB7IG1f
aG9yaXpvbnRhbFNoaWZ0ID0gc2hpZnQ7IH0KKyAgICBpbnQgdmVydGljYWxTaGlmdCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmVydGljYWxTaGlmdDsgfQorICAgIHZvaWQgc2V0VmVydGljYWxTaGlmdChp
bnQgc2hpZnQpIHsgbV92ZXJ0aWNhbFNoaWZ0ID0gc2hpZnQ7IH0KKworICAgIHZvaWQgc3dhcEJ1
ZmZlcnMoKTsKKworcHJpdmF0ZToKKyAgICBCYWNraW5nU3RvcmVUaWxlKGNvbnN0IFBsYXRmb3Jt
OjpJbnRTaXplJiwgQnVmZmVyaW5nTW9kZSk7CisKKyAgICBtdXRhYmxlIHVuc2lnbmVkIG1fZnJv
bnRCdWZmZXI7CisgICAgQnVmZmVyaW5nTW9kZSBtX2J1ZmZlcmluZ01vZGU7CisgICAgYm9vbCBt
X2NoZWNrZXJlZDsKKyAgICBib29sIG1fY29tbWl0dGVkOworICAgIGJvb2wgbV9iYWNrZ3JvdW5k
UGFpbnRlZDsKKyAgICBpbnQgbV9ob3Jpem9udGFsU2hpZnQ7CisgICAgaW50IG1fdmVydGljYWxT
aGlmdDsKK307Cit9Cit9CisKKyNlbmRpZiAvLyBCYWNraW5nU3RvcmVUaWxlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126806</attachid>
            <date>2012-02-13 12:33:51 -0800</date>
            <delta_ts>2012-02-14 07:03:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78517-20120213153626.patch</filename>
            <type>text/plain</type>
            <size>16189</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3NDI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDMwNmVhZDIzN2UwMDIzYjJi
MWQ0NjA4NmE0Nzg5NjNjYjEzYjBlMjguLjljODFhYjU5NzVkZmU0YTQ0NGZhYTA1NTI4NzJlNDVj
MTYwNzgxYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMDItMTMgIFJvYiBCdWlz
ICA8cmJ1aXNAcmltLmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gVXBzdHJlYW0gYmFja2lu
ZyBzdG9yZSByZWxhdGVkIGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc4NTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW5pdGlhbCB1cHN0cmVhbSwgbm8gbmV3IHRlc3RzLgorCisgICAgICAg
ICogYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9yZUNvbXBvc2l0aW5nU3VyZmFj
ZS5jcHA6IEFkZGVkLgorICAgICAgICAqIGJsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5n
U3RvcmVDb21wb3NpdGluZ1N1cmZhY2UuaDogQWRkZWQuCisgICAgICAgICogYmxhY2tiZXJyeS9X
ZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9yZVRpbGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBibGFj
a2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlVGlsZS5oOiBBZGRlZC4KKwogMjAxMi0w
Mi0xMCAgUm9iIEJ1aXMgIDxyYnVpc0ByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBV
cHN0cmVhbSBncmFwaGljcyBoZWxwZXIgY2xhc3NlcyBpbiBXZWJLaXRTdXBwb3J0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVD
b21wb3NpdGluZ1N1cmZhY2UuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvQmFja2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJmYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Yjdk
N2Y3YTJmNDIyOGE2ODUxMjE0YTYwOGUzMjZkZWU1NWQ2OTFlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlQ29tcG9z
aXRpbmdTdXJmYWNlLmNwcApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQmFja2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJmYWNlLmgiCisKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1H
cmFwaGljcy5oPgorCit1c2luZyBuYW1lc3BhY2UgQmxhY2tCZXJyeTo6UGxhdGZvcm07Cit1c2lu
ZyBuYW1lc3BhY2UgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOworCituYW1lc3BhY2Ug
QmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworQ29tcG9zaXRpbmdTdXJmYWNlQnVm
ZmVyOjpDb21wb3NpdGluZ1N1cmZhY2VCdWZmZXIoY29uc3QgUGxhdGZvcm06OkludFNpemUmIHNp
emUpCisgICAgOiBtX3NpemUoc2l6ZSkKKyAgICAsIG1fYnVmZmVyKDApCit7Cit9CisKK0NvbXBv
c2l0aW5nU3VyZmFjZUJ1ZmZlcjo6fkNvbXBvc2l0aW5nU3VyZmFjZUJ1ZmZlcigpCit7CisgICAg
ZGVzdHJveUJ1ZmZlcihtX2J1ZmZlcik7Cit9CisKK1BsYXRmb3JtOjpJbnRTaXplIENvbXBvc2l0
aW5nU3VyZmFjZUJ1ZmZlcjo6c3VyZmFjZVNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3Np
emU7Cit9CisKK0J1ZmZlciogQ29tcG9zaXRpbmdTdXJmYWNlQnVmZmVyOjpuYXRpdmVCdWZmZXIo
KSBjb25zdAoreworICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIG1fYnVmZmVyID0gY3JlYXRl
QnVmZmVyKG1fc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkdyYXBoaWNzOjpUaWxlQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyKTsKKworICAg
IHJldHVybiBtX2J1ZmZlcjsKK30KKworQmFja2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJmYWNlOjpC
YWNraW5nU3RvcmVDb21wb3NpdGluZ1N1cmZhY2UoY29uc3QgUGxhdGZvcm06OkludFNpemUmIHNp
emUsIGJvb2wgZG91YmxlQnVmZmVyZWQpCisgICAgOiBtX2lzRG91YmxlQnVmZmVyZWQoZG91Ymxl
QnVmZmVyZWQpCisgICAgLCBtX25lZWRzU3luYyh0cnVlKQoreworICAgIG1fZnJvbnRCdWZmZXIg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihuZXcgQ29tcG9zaXRpbmdTdXJmYWNlQnVmZmVy
KHNpemUpKTsKKyAgICBtX2JhY2tCdWZmZXIgPSBkb3VibGVCdWZmZXJlZCA/IHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQ+KG5ldyBDb21wb3NpdGluZ1N1cmZhY2VCdWZmZXIoc2l6ZSkpIDogMDsK
K30KKworQmFja2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJmYWNlOjp+QmFja2luZ1N0b3JlQ29tcG9z
aXRpbmdTdXJmYWNlKCkKK3sKKyAgICBDb21wb3NpdGluZ1N1cmZhY2VCdWZmZXIqIGZyb250ID0g
cmVpbnRlcnByZXRfY2FzdDxDb21wb3NpdGluZ1N1cmZhY2VCdWZmZXIqPihtX2Zyb250QnVmZmVy
KTsKKyAgICBkZWxldGUgZnJvbnQ7CisgICAgbV9mcm9udEJ1ZmZlciA9IDA7CisKKyAgICBDb21w
b3NpdGluZ1N1cmZhY2VCdWZmZXIqIGJhY2sgPSByZWludGVycHJldF9jYXN0PENvbXBvc2l0aW5n
U3VyZmFjZUJ1ZmZlcio+KG1fYmFja0J1ZmZlcik7CisgICAgZGVsZXRlIGJhY2s7CisgICAgbV9i
YWNrQnVmZmVyID0gMDsKK30KKworQ29tcG9zaXRpbmdTdXJmYWNlQnVmZmVyKiBCYWNraW5nU3Rv
cmVDb21wb3NpdGluZ1N1cmZhY2U6OmZyb250QnVmZmVyKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
bV9mcm9udEJ1ZmZlcik7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29tcG9zaXRpbmdT
dXJmYWNlQnVmZmVyKj4obV9mcm9udEJ1ZmZlcik7Cit9CisKK0NvbXBvc2l0aW5nU3VyZmFjZUJ1
ZmZlciogQmFja2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJmYWNlOjpiYWNrQnVmZmVyKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1faXNEb3VibGVCdWZmZXJlZCkKKyAgICAgICAgcmV0dXJuIGZyb250QnVm
ZmVyKCk7CisKKyAgICBBU1NFUlQobV9iYWNrQnVmZmVyKTsKKyAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxDb21wb3NpdGluZ1N1cmZhY2VCdWZmZXIqPihtX2JhY2tCdWZmZXIpOworfQorCit2
b2lkIEJhY2tpbmdTdG9yZUNvbXBvc2l0aW5nU3VyZmFjZTo6c3dhcEJ1ZmZlcnMoKQoreworICAg
IGlmICghbV9pc0RvdWJsZUJ1ZmZlcmVkKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBzdG9y
ZSB0ZW1wcworICAgIHVuc2lnbmVkIGZyb250ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4o
ZnJvbnRCdWZmZXIoKSk7CisgICAgdW5zaWduZWQgYmFjayA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQ+KGJhY2tCdWZmZXIoKSk7CisKKyAgICAvLyBhdG9taWMgY2hhbmdlCisgICAgX3NtcF94
Y2hnKCZtX2Zyb250QnVmZmVyLCBiYWNrKTsKKyAgICBfc21wX3hjaGcoJm1fYmFja0J1ZmZlciwg
ZnJvbnQpOworfQorCit9Cit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFj
a2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJmYWNlLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
V2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVDb21wb3NpdGluZ1N1cmZhY2UuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44Y2UxZmIwY2YxZTU4ZGJiNGRlNTYwYzM4ZDk1NThjZjBlZTBiNWExCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3Jl
Q29tcG9zaXRpbmdTdXJmYWNlLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSwgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIEJhY2tpbmdTdG9yZUNv
bXBvc2l0aW5nU3VyZmFjZV9oCisjZGVmaW5lIEJhY2tpbmdTdG9yZUNvbXBvc2l0aW5nU3VyZmFj
ZV9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlIDxCbGFj
a0JlcnJ5UGxhdGZvcm1JbnRSZWN0UmVnaW9uLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgQmxhY2tC
ZXJyeSB7CituYW1lc3BhY2UgUGxhdGZvcm0geworbmFtZXNwYWNlIEdyYXBoaWNzIHsKK3N0cnVj
dCBCdWZmZXI7Cit9Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgQ29tcG9zaXRpbmdT
dXJmYWNlQnVmZmVyIHsKK3B1YmxpYzoKKyAgICBDb21wb3NpdGluZ1N1cmZhY2VCdWZmZXIoY29u
c3QgUGxhdGZvcm06OkludFNpemUmKTsKKyAgICB+Q29tcG9zaXRpbmdTdXJmYWNlQnVmZmVyKCk7
CisgICAgUGxhdGZvcm06OkludFNpemUgc3VyZmFjZVNpemUoKSBjb25zdDsKKworICAgIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBuYXRpdmVCdWZmZXIoKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBQbGF0Zm9ybTo6SW50U2l6ZSBtX3NpemU7CisgICAgbXV0YWJsZSBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogbV9idWZmZXI7Cit9OworCisK
K2NsYXNzIEJhY2tpbmdTdG9yZUNvbXBvc2l0aW5nU3VyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxCYWNraW5nU3RvcmVDb21wb3NpdGluZ1N1cmZhY2U+IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxCYWNraW5nU3RvcmVDb21wb3NpdGluZ1N1cmZhY2U+IGNyZWF0
ZShjb25zdCBQbGF0Zm9ybTo6SW50U2l6ZSYgc2l6ZSwgYm9vbCBkb3VibGVCdWZmZXJlZCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmFja2luZ1N0b3JlQ29tcG9zaXRpbmdT
dXJmYWNlKHNpemUsIGRvdWJsZUJ1ZmZlcmVkKSk7CisgICAgfQorCisgICAgfkJhY2tpbmdTdG9y
ZUNvbXBvc2l0aW5nU3VyZmFjZSgpOworCisgICAgQ29tcG9zaXRpbmdTdXJmYWNlQnVmZmVyKiBm
cm9udEJ1ZmZlcigpIGNvbnN0OworICAgIENvbXBvc2l0aW5nU3VyZmFjZUJ1ZmZlciogYmFja0J1
ZmZlcigpIGNvbnN0OworICAgIGJvb2wgaXNEb3VibGVCdWZmZXJlZCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNEb3VibGVCdWZmZXJlZDsgfQorICAgIHZvaWQgc3dhcEJ1ZmZlcnMoKTsKKworICAgIGJv
b2wgbmVlZHNTeW5jKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc1N5bmM7IH0KKyAgICB2b2lkIHNl
dE5lZWRzU3luYyhib29sIG5lZWRzU3luYykgeyBtX25lZWRzU3luYyA9IG5lZWRzU3luYzsgfQor
Citwcml2YXRlOgorICAgIEJhY2tpbmdTdG9yZUNvbXBvc2l0aW5nU3VyZmFjZShjb25zdCBQbGF0
Zm9ybTo6SW50U2l6ZSYsIGJvb2wgZG91YmxlQnVmZmVyZWQpOworCisgICAgbXV0YWJsZSB1bnNp
Z25lZCBtX2Zyb250QnVmZmVyOworICAgIG11dGFibGUgdW5zaWduZWQgbV9iYWNrQnVmZmVyOwor
ICAgIGJvb2wgbV9pc0RvdWJsZUJ1ZmZlcmVkOworICAgIGJvb2wgbV9uZWVkc1N5bmM7Cit9Owor
fQorfQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYg
Ly8gQmFja2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJmYWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9yZVRpbGUuY3BwIGIvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlVGlsZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZGJlZWI2NzFhYzE2Mzk0NzM0NDg0N2U2YTExN2NhYzdiZTE5M2ZjOAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0Jh
Y2tpbmdTdG9yZVRpbGUuY3BwCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCYWNraW5nU3RvcmVUaWxlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJTdXJmYWNlUG9vbC5oIgorCisjaW5jbHVkZSA8QmxhY2tCZXJy
eVBsYXRmb3JtR3JhcGhpY3MuaD4KKwordXNpbmcgbmFtZXNwYWNlIEJsYWNrQmVycnk6OlBsYXRm
b3JtOwordXNpbmcgbmFtZXNwYWNlIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczsKKwor
bmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktpdCB7CisKK1RpbGVCdWZmZXI6
OlRpbGVCdWZmZXIoY29uc3QgUGxhdGZvcm06OkludFNpemUmIHNpemUpCisgICAgOiBtX3NpemUo
c2l6ZSkKKyAgICAsIG1fYnVmZmVyKDApCisgICAgLCBtX2JsaXRHZW5lcmF0aW9uKDApCit7Cit9
CisKK1RpbGVCdWZmZXI6On5UaWxlQnVmZmVyKCkKK3sKKyAgICBkZXN0cm95QnVmZmVyKG1fYnVm
ZmVyKTsKK30KKworUGxhdGZvcm06OkludFNpemUgVGlsZUJ1ZmZlcjo6c2l6ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fc2l6ZTsKK30KKworUGxhdGZvcm06OkludFJlY3QgVGlsZUJ1ZmZlcjo6
cmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBsYXRmb3JtOjpJbnRSZWN0KFBsYXRmb3JtOjpJ
bnRQb2ludDo6emVybygpLCBtX3NpemUpOworfQorCitib29sIFRpbGVCdWZmZXI6OmlzUmVuZGVy
ZWQoKSBjb25zdAoreworICAgIHJldHVybiBpc1JlbmRlcmVkKHJlY3QoKSk7Cit9CisKK2Jvb2wg
VGlsZUJ1ZmZlcjo6aXNSZW5kZXJlZChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiYgY29u
dGVudHMpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjpzdWJ0
cmFjdFJlZ2lvbnMoY29udGVudHMsIG1fcmVuZGVyZWRSZWdpb24pLmlzRW1wdHkoKTsKK30KKwor
dm9pZCBUaWxlQnVmZmVyOjpjbGVhclJlbmRlcmVkUmVnaW9uKGNvbnN0IFBsYXRmb3JtOjpJbnRS
ZWN0UmVnaW9uJiByZWdpb24pCit7CisgICAgbV9yZW5kZXJlZFJlZ2lvbiA9IFBsYXRmb3JtOjpJ
bnRSZWN0UmVnaW9uOjpzdWJ0cmFjdFJlZ2lvbnMobV9yZW5kZXJlZFJlZ2lvbiwgcmVnaW9uKTsK
K30KKwordm9pZCBUaWxlQnVmZmVyOjpjbGVhclJlbmRlcmVkUmVnaW9uKCkKK3sKKyAgICBtX3Jl
bmRlcmVkUmVnaW9uID0gUGxhdGZvcm06OkludFJlY3RSZWdpb24oKTsKK30KKwordm9pZCBUaWxl
QnVmZmVyOjphZGRSZW5kZXJlZFJlZ2lvbihjb25zdCBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiYg
cmVnaW9uKQoreworICAgIG1fcmVuZGVyZWRSZWdpb24gPSBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lv
bjo6dW5pb25SZWdpb25zKHJlZ2lvbiwgbV9yZW5kZXJlZFJlZ2lvbik7Cit9CisKK1BsYXRmb3Jt
OjpJbnRSZWN0UmVnaW9uIFRpbGVCdWZmZXI6OnJlbmRlcmVkUmVnaW9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9yZW5kZXJlZFJlZ2lvbjsKK30KKworUGxhdGZvcm06OkludFJlY3RSZWdpb24g
VGlsZUJ1ZmZlcjo6bm90UmVuZGVyZWRSZWdpb24oKSBjb25zdAoreworICAgIHJldHVybiBQbGF0
Zm9ybTo6SW50UmVjdFJlZ2lvbjo6c3VidHJhY3RSZWdpb25zKHJlY3QoKSwgcmVuZGVyZWRSZWdp
b24oKSk7Cit9CisKK0J1ZmZlciogVGlsZUJ1ZmZlcjo6bmF0aXZlQnVmZmVyKCkgY29uc3QKK3sK
KyAgICBpZiAoIW1fYnVmZmVyKQorICAgICAgICBtX2J1ZmZlciA9IGNyZWF0ZUJ1ZmZlcihtX3Np
emUsIFBsYXRmb3JtOjpHcmFwaGljczo6VGlsZUJ1ZmZlciwgU3VyZmFjZVBvb2w6Omdsb2JhbFN1
cmZhY2VQb29sKCktPnNoYXJlZFBpeG1hcEdyb3VwKCkpOworCisgICAgcmV0dXJuIG1fYnVmZmVy
OworfQorCisKK0JhY2tpbmdTdG9yZVRpbGU6OkJhY2tpbmdTdG9yZVRpbGUoY29uc3QgUGxhdGZv
cm06OkludFNpemUmIHNpemUsIEJ1ZmZlcmluZ01vZGUgbW9kZSkKKyAgICA6IG1fYnVmZmVyaW5n
TW9kZShtb2RlKQorICAgICwgbV9jb21taXR0ZWQoZmFsc2UpCisgICAgLCBtX2JhY2tncm91bmRQ
YWludGVkKGZhbHNlKQorICAgICwgbV9ob3Jpem9udGFsU2hpZnQoMCkKKyAgICAsIG1fdmVydGlj
YWxTaGlmdCgwKQoreworICAgIG1fZnJvbnRCdWZmZXIgPSByZWludGVycHJldF9jYXN0PHVuc2ln
bmVkPihuZXcgVGlsZUJ1ZmZlcihzaXplKSk7Cit9CisKK0JhY2tpbmdTdG9yZVRpbGU6On5CYWNr
aW5nU3RvcmVUaWxlKCkKK3sKKyAgICBUaWxlQnVmZmVyKiBmcm9udCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8VGlsZUJ1ZmZlcio+KG1fZnJvbnRCdWZmZXIpOworICAgIGRlbGV0ZSBmcm9udDsKKyAgICBt
X2Zyb250QnVmZmVyID0gMDsKK30KKworUGxhdGZvcm06OkludFNpemUgQmFja2luZ1N0b3JlVGls
ZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZyb250QnVmZmVyKCktPnNpemUoKTsKK30K
KworUGxhdGZvcm06OkludFJlY3QgQmFja2luZ1N0b3JlVGlsZTo6cmVjdCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGZyb250QnVmZmVyKCktPnJlY3QoKTsKK30KKworVGlsZUJ1ZmZlciogQmFja2lu
Z1N0b3JlVGlsZTo6ZnJvbnRCdWZmZXIoKSBjb25zdAoreworICAgIEFTU0VSVChtX2Zyb250QnVm
ZmVyKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUaWxlQnVmZmVyKj4obV9mcm9udEJ1
ZmZlcik7Cit9CisKK1RpbGVCdWZmZXIqIEJhY2tpbmdTdG9yZVRpbGU6OmJhY2tCdWZmZXIoKSBj
b25zdAoreworICAgIGlmIChtX2J1ZmZlcmluZ01vZGUgPT0gU2luZ2xlQnVmZmVyZWQpCisgICAg
ICAgIHJldHVybiBmcm9udEJ1ZmZlcigpOworCisgICAgcmV0dXJuIFN1cmZhY2VQb29sOjpnbG9i
YWxTdXJmYWNlUG9vbCgpLT5iYWNrQnVmZmVyKCk7Cit9CisKK3ZvaWQgQmFja2luZ1N0b3JlVGls
ZTo6c3dhcEJ1ZmZlcnMoKQoreworICAgIGlmIChtX2J1ZmZlcmluZ01vZGUgPT0gU2luZ2xlQnVm
ZmVyZWQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIHN0b3JlIHRlbXBzCisgICAgdW5zaWdu
ZWQgZnJvbnQgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihmcm9udEJ1ZmZlcigpKTsKKyAg
ICB1bnNpZ25lZCBiYWNrID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oYmFja0J1ZmZlcigp
KTsKKworICAgIC8vIGF0b21pYyBjaGFuZ2UKKyAgICBfc21wX3hjaGcoJm1fZnJvbnRCdWZmZXIs
IGJhY2spOworICAgIF9zbXBfeGNoZygmU3VyZmFjZVBvb2w6Omdsb2JhbFN1cmZhY2VQb29sKCkt
Pm1fYmFja0J1ZmZlciwgZnJvbnQpOworfQorCit2b2lkIEJhY2tpbmdTdG9yZVRpbGU6OnJlc2V0
KCkKK3sKKyAgICBzZXRDb21taXR0ZWQoZmFsc2UpOworICAgIGZyb250QnVmZmVyKCktPmNsZWFy
UmVuZGVyZWRSZWdpb24oKTsKKyAgICBiYWNrQnVmZmVyKCktPmNsZWFyUmVuZGVyZWRSZWdpb24o
KTsKKyAgICBjbGVhclNoaWZ0KCk7Cit9CisKK3ZvaWQgQmFja2luZ1N0b3JlVGlsZTo6cGFpbnRC
YWNrZ3JvdW5kKCkKK3sKKyAgICBtX2JhY2tncm91bmRQYWludGVkID0gdHJ1ZTsKKworICAgIGNs
ZWFyQnVmZmVyKGJhY2tCdWZmZXIoKS0+bmF0aXZlQnVmZmVyKCksIDAsIDAsIDAsIDApOworfQor
Cit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9y
dC9CYWNraW5nU3RvcmVUaWxlLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3Vw
cG9ydC9CYWNraW5nU3RvcmVUaWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2M5NWNjYTMyZTM4YzlkNmY1Zjkx
ZGUxYzVmOWQ2Y2FmZDE1Zjk5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9yZVRpbGUuaApAQCAtMCwwICsxLDEwOCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisj
aWZuZGVmIEJhY2tpbmdTdG9yZVRpbGVfaAorI2RlZmluZSBCYWNraW5nU3RvcmVUaWxlX2gKKwor
I2luY2x1ZGUgIkJsYWNrQmVycnlQbGF0Zm9ybUludFJlY3RSZWdpb24uaCIKKyNpbmNsdWRlICJC
bGFja0JlcnJ5UGxhdGZvcm1QcmltaXRpdmVzLmgiCisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsK
K25hbWVzcGFjZSBQbGF0Zm9ybSB7CituYW1lc3BhY2UgR3JhcGhpY3Mgeworc3RydWN0IEJ1ZmZl
cjsKK30KK30KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBUaWxlQnVmZmVyIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIFRpbGVCdWZmZXIoY29uc3QgUGxhdGZvcm06OkludFNpemUmKTsKKyAg
ICAgICAgflRpbGVCdWZmZXIoKTsKKyAgICAgICAgUGxhdGZvcm06OkludFNpemUgc2l6ZSgpIGNv
bnN0OworICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCByZWN0KCkgY29uc3Q7CisKKyAgICAgICAg
Ym9vbCBpc1JlbmRlcmVkKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNSZW5kZXJlZChjb25zdCBQ
bGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiYgY29udGVudHMpIGNvbnN0OworICAgICAgICB2b2lkIGNs
ZWFyUmVuZGVyZWRSZWdpb24oKTsKKyAgICAgICAgdm9pZCBjbGVhclJlbmRlcmVkUmVnaW9uKGNv
bnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJik7CisgICAgICAgIHZvaWQgYWRkUmVuZGVyZWRS
ZWdpb24oY29uc3QgUGxhdGZvcm06OkludFJlY3RSZWdpb24mKTsKKyAgICAgICAgUGxhdGZvcm06
OkludFJlY3RSZWdpb24gcmVuZGVyZWRSZWdpb24oKSBjb25zdDsKKyAgICAgICAgUGxhdGZvcm06
OkludFJlY3RSZWdpb24gbm90UmVuZGVyZWRSZWdpb24oKSBjb25zdDsKKworICAgICAgICBQbGF0
Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogbmF0aXZlQnVmZmVyKCkgY29uc3Q7CisKKyAgICAgICAg
dm9pZCBzZXRCbGl0R2VuZXJhdGlvbihpbnQgZykgY29uc3QgeyBtX2JsaXRHZW5lcmF0aW9uID0g
ZzsgfQorICAgICAgICBpbnQgYmxpdEdlbmVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2JsaXRH
ZW5lcmF0aW9uOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBQbGF0Zm9ybTo6SW50U2l6ZSBt
X3NpemU7CisgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uIG1fcmVuZGVyZWRSZWdpb247
CisgICAgICAgIG11dGFibGUgUGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIG1fYnVmZmVyOwor
ICAgICAgICBtdXRhYmxlIGludCBtX2JsaXRHZW5lcmF0aW9uOworfTsKKworCitjbGFzcyBCYWNr
aW5nU3RvcmVUaWxlIHsKK3B1YmxpYzoKKyAgICBlbnVtIEJ1ZmZlcmluZ01vZGUgeyBTaW5nbGVC
dWZmZXJlZCwgRG91YmxlQnVmZmVyZWQgfTsKKworICAgIHN0YXRpYyBCYWNraW5nU3RvcmVUaWxl
KiBjcmVhdGUoY29uc3QgUGxhdGZvcm06OkludFNpemUmIHNpemUsIEJ1ZmZlcmluZ01vZGUgbW9k
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQmFja2luZ1N0b3JlVGlsZShzaXplLCBtb2Rl
KTsKKyAgICB9CisKKyAgICB+QmFja2luZ1N0b3JlVGlsZSgpOworCisgICAgUGxhdGZvcm06Oklu
dFNpemUgc2l6ZSgpIGNvbnN0OworICAgIFBsYXRmb3JtOjpJbnRSZWN0IHJlY3QoKSBjb25zdDsK
KworICAgIFRpbGVCdWZmZXIqIGZyb250QnVmZmVyKCkgY29uc3Q7CisgICAgVGlsZUJ1ZmZlciog
YmFja0J1ZmZlcigpIGNvbnN0OworICAgIGJvb2wgaXNEb3VibGVCdWZmZXJlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fYnVmZmVyaW5nTW9kZSA9PSBEb3VibGVCdWZmZXJlZDsgfQorCisgICAgdm9pZCBy
ZXNldCgpOworICAgIGJvb2wgYmFja2dyb3VuZFBhaW50ZWQoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tncm91bmRQYWludGVkOyB9CisgICAgdm9pZCBwYWludEJhY2tncm91bmQoKTsKKworICAgIGJv
b2wgaXNDb21taXR0ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbW1pdHRlZDsgfQorICAgIHZvaWQg
c2V0Q29tbWl0dGVkKGJvb2wgY29tbWl0dGVkKSB7IG1fY29tbWl0dGVkID0gY29tbWl0dGVkOyB9
CisKKyAgICB2b2lkIGNsZWFyU2hpZnQoKSB7IG1faG9yaXpvbnRhbFNoaWZ0ID0gMDsgbV92ZXJ0
aWNhbFNoaWZ0ID0gMDsgfQorICAgIGludCBob3Jpem9udGFsU2hpZnQoKSBjb25zdCB7IHJldHVy
biBtX2hvcml6b250YWxTaGlmdDsgfQorICAgIHZvaWQgc2V0SG9yaXpvbnRhbFNoaWZ0KGludCBz
aGlmdCkgeyBtX2hvcml6b250YWxTaGlmdCA9IHNoaWZ0OyB9CisgICAgaW50IHZlcnRpY2FsU2hp
ZnQoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsU2hpZnQ7IH0KKyAgICB2b2lkIHNldFZlcnRp
Y2FsU2hpZnQoaW50IHNoaWZ0KSB7IG1fdmVydGljYWxTaGlmdCA9IHNoaWZ0OyB9CisKKyAgICB2
b2lkIHN3YXBCdWZmZXJzKCk7CisKK3ByaXZhdGU6CisgICAgQmFja2luZ1N0b3JlVGlsZShjb25z
dCBQbGF0Zm9ybTo6SW50U2l6ZSYsIEJ1ZmZlcmluZ01vZGUpOworCisgICAgbXV0YWJsZSB1bnNp
Z25lZCBtX2Zyb250QnVmZmVyOworICAgIEJ1ZmZlcmluZ01vZGUgbV9idWZmZXJpbmdNb2RlOwor
ICAgIGJvb2wgbV9jaGVja2VyZWQ7CisgICAgYm9vbCBtX2NvbW1pdHRlZDsKKyAgICBib29sIG1f
YmFja2dyb3VuZFBhaW50ZWQ7CisgICAgaW50IG1faG9yaXpvbnRhbFNoaWZ0OworICAgIGludCBt
X3ZlcnRpY2FsU2hpZnQ7Cit9OworfQorfQorCisjZW5kaWYgLy8gQmFja2luZ1N0b3JlVGlsZV9o
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126972</attachid>
            <date>2012-02-14 07:03:37 -0800</date>
            <delta_ts>2012-02-14 08:40:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78517-20120214100614.patch</filename>
            <type>text/plain</type>
            <size>36330</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3NDI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDMwNmVhZDIzN2UwMDIzYjJi
MWQ0NjA4NmE0Nzg5NjNjYjEzYjBlMjguLjk1ZDVmNWE4MTRkOTU2YTBkYTA2YWY4MWVjNTVmNWVi
NjljYzA2YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMDItMTQgIFJvYiBCdWlz
ICA8cmJ1aXNAcmltLmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gVXBzdHJlYW0gYmFja2lu
ZyBzdG9yZSByZWxhdGVkIGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc4NTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW5pdGlhbCB1cHN0cmVhbSwgbm8gbmV3IHRlc3RzLgorCisgICAgICAg
ICogYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9yZUNsaWVudC5jcHA6IEFkZGVk
LgorICAgICAgICAqIGJsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVDbGllbnQu
aDogQWRkZWQuCisgICAgICAgICogYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9y
ZUNvbXBvc2l0aW5nU3VyZmFjZS5jcHA6IEFkZGVkLgorICAgICAgICAqIGJsYWNrYmVycnkvV2Vi
S2l0U3VwcG9ydC9CYWNraW5nU3RvcmVDb21wb3NpdGluZ1N1cmZhY2UuaDogQWRkZWQuCisgICAg
ICAgICogYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9yZVRpbGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKiBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlVGlsZS5o
OiBBZGRlZC4KKwogMjAxMi0wMi0xMCAgUm9iIEJ1aXMgIDxyYnVpc0ByaW0uY29tPgogCiAgICAg
ICAgIFtCbGFja0JlcnJ5XSBVcHN0cmVhbSBncmFwaGljcyBoZWxwZXIgY2xhc3NlcyBpbiBXZWJL
aXRTdXBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3Vw
cG9ydC9CYWNraW5nU3RvcmVDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YktpdFN1cHBvcnQvQmFja2luZ1N0b3JlQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YTU5YjQ3YjRl
Yjk0NzI0YWZlYjlhNjJiZDkzN2M4NWMwMjQ0OTAyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlQ2xpZW50LmNwcApA
QCAtMCwwICsxLDQwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmFja2luZ1N0b3Jl
Q2xpZW50LmgiCisKKyNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJCYWNraW5n
U3RvcmVfcC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50Lmgi
CisjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNp
bmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRT
aXplLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1
ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJXZWJQYWdlX3AuaCIKKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQg
eworCitzdGF0aWMgaW5saW5lIFdlYkNvcmU6OkludFNpemUgcG9pbnRUb1NpemUoY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiBXZWJDb3JlOjpJbnRTaXplKHBv
aW50LngoKSwgcG9pbnQueSgpKTsKK30KKworQmFja2luZ1N0b3JlQ2xpZW50KiBCYWNraW5nU3Rv
cmVDbGllbnQ6OmNyZWF0ZShXZWJDb3JlOjpGcmFtZSogZnJhbWUsIFdlYkNvcmU6OkZyYW1lKiBw
YXJlbnRGcmFtZSwgV2ViUGFnZSogcGFyZW50UGFnZSkKK3sKKyAgICBBU1NFUlQocGFyZW50UGFn
ZSk7CisgICAgQVNTRVJUKGZyYW1lLT52aWV3KCkpOworCisgICAgLy8gRklYTUU6IFdlIGRvIG5v
dCBzdXBwb3J0IGlubmVyIGZyYW1lcyBmb3Igbm93LgorICAgIGlmIChwYXJlbnRGcmFtZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBCYWNraW5nU3RvcmVDbGllbnQqIHBhcmVudEJhY2tpbmdT
dG9yZUNsaWVudAorICAgICAgICA9IHBhcmVudEZyYW1lCisgICAgICAgID8gcGFyZW50UGFnZS0+
ZC0+YmFja2luZ1N0b3JlQ2xpZW50Rm9yRnJhbWUocGFyZW50RnJhbWUpCisgICAgICAgIDogMDsK
KworICAgIC8vIElmIHRoaXMgZnJhbWUgaGFzIGEgcGFyZW50IHdpdGggbm8gYmFja2luZ3N0b3Jl
IHRoZW4ganVzdCBzdG9wIHNpbmNlCisgICAgLy8gb3VyIGZyYW1lIGhlaXJhcmNoeSBpcyBkb25l
CisgICAgaWYgKHBhcmVudEZyYW1lICYmICFwYXJlbnRCYWNraW5nU3RvcmVDbGllbnQpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgQmFja2luZ1N0b3JlQ2xpZW50KiBpdCA9IG5ldyBCYWNraW5n
U3RvcmVDbGllbnQoZnJhbWUsIHBhcmVudEZyYW1lLCBwYXJlbnRQYWdlKTsKKyAgICBBU1NFUlQo
aXQpOworCisgICAgLy8gRnJhbWUgLT4gQmFja2luZ1N0b3JlQ2xpZW50IG1hcHBpbmcgaXMgY29u
dHJvbGxlZCBieSB0aGUgUGFnZS4KKyAgICBwYXJlbnRQYWdlLT5kLT5hZGRCYWNraW5nU3RvcmVD
bGllbnRGb3JGcmFtZShmcmFtZSwgaXQpOworCisgICAgLy8gQWRkIHRoZSBiYWNraW5nIHN0b3Jl
IGNsaWVudCB0byB0aGUgY2hpbGQgbGlzdCBvZiBpdHMgcGFyZW50LgorICAgIGlmIChwYXJlbnRC
YWNraW5nU3RvcmVDbGllbnQpCisgICAgICAgIHBhcmVudEJhY2tpbmdTdG9yZUNsaWVudC0+YWRk
Q2hpbGQoaXQpOworCisgICAgcmV0dXJuIGl0OworfQorCitCYWNraW5nU3RvcmVDbGllbnQ6OkJh
Y2tpbmdTdG9yZUNsaWVudChXZWJDb3JlOjpGcmFtZSogZnJhbWUsIFdlYkNvcmU6OkZyYW1lKiBw
YXJlbnRGcmFtZSwgV2ViUGFnZSogcGFyZW50UGFnZSkKKyAgICA6IG1fZnJhbWUoZnJhbWUpCisg
ICAgLCBtX3dlYlBhZ2UocGFyZW50UGFnZSkKKyAgICAsIG1fYmFja2luZ1N0b3JlKDApCisgICAg
LCBtX3BhcmVudCgwKQorICAgICwgbV9pc0NsaWVudEdlbmVyYXRlZFNjcm9sbChmYWxzZSkKKyAg
ICAsIG1faXNTY3JvbGxOb3RpZmljYXRpb25TdXBwcmVzc2VkKGZhbHNlKQoreworICAgIFVOVVNF
RF9QQVJBTShwYXJlbnRGcmFtZSk7CisgICAgbV9iYWNraW5nU3RvcmUgPSBuZXcgQmFja2luZ1N0
b3JlKG1fd2ViUGFnZSwgdGhpcyk7Cit9CisKK0JhY2tpbmdTdG9yZUNsaWVudDo6fkJhY2tpbmdT
dG9yZUNsaWVudCgpCit7CisgICAgbV93ZWJQYWdlLT5kLT5yZW1vdmVCYWNraW5nU3RvcmVDbGll
bnRGb3JGcmFtZShtX2ZyYW1lKTsKKworICAgIGRlbGV0ZSBtX2JhY2tpbmdTdG9yZTsKKyAgICBt
X2JhY2tpbmdTdG9yZSA9IDA7CisgICAgbV9mcmFtZSA9IDA7Cit9CisKK3ZvaWQgQmFja2luZ1N0
b3JlQ2xpZW50OjphZGRDaGlsZChCYWNraW5nU3RvcmVDbGllbnQqIGNoaWxkKQoreworICAgIEFT
U0VSVChjaGlsZCk7CisgICAgY2hpbGQtPm1fcGFyZW50ID0gdGhpczsKK30KKworV1RGOjpWZWN0
b3IgPEJhY2tpbmdTdG9yZUNsaWVudCo+IEJhY2tpbmdTdG9yZUNsaWVudDo6Y2hpbGRyZW4oKSBj
b25zdAoreworICAgIFdURjo6VmVjdG9yPEJhY2tpbmdTdG9yZUNsaWVudCo+IGNoaWxkcmVuOwor
ICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZS0+dHJlZSgpLT5maXJzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCktPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgQmxh
Y2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVDbGllbnQqIGNsaWVudCA9CisgICAgICAgICAg
ICBtX3dlYlBhZ2UtPmQtPmJhY2tpbmdTdG9yZUNsaWVudEZvckZyYW1lKGNoaWxkKTsKKworICAg
ICAgICBpZiAoY2xpZW50KQorICAgICAgICAgICAgY2hpbGRyZW4uYXBwZW5kKGNsaWVudCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGNoaWxkcmVuOworfQorCitXZWJDb3JlOjpJbnRSZWN0IEJhY2tp
bmdTdG9yZUNsaWVudDo6YWJzb2x1dGVSZWN0KCkgY29uc3QKK3sKKyAgICBXZWJDb3JlOjpJbnRS
ZWN0IHJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KFdlYkNvcmU6OkludFBvaW50KDAsIDApLCB2aWV3
cG9ydFNpemUoKSk7CisKKyAgICBpZiAoIWlzTWFpbkZyYW1lKCkpIHsKKyAgICAgICAgLy8gSXQg
aXMgcG9zc2libGUgdGhhdCB0aGUgb3duZXIgSFRNTCBlbGVtZW50IGhhcyBiZWVuIHJlbW92ZWQg
YXQgdGhpcyBwb2ludCwKKyAgICAgICAgLy8gZXNwZWNpYWxseSB3aGVuIHRoZSBmcmFtZSBpcyBs
b2FkaW5nIGEgSmF2YVNjcmlwdCBVUkwuCisgICAgICAgIGlmIChFbGVtZW50KiBlbHQgPSBtX2Zy
YW1lLT5vd25lckVsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKFJlbmRlckJveCogb2JqID0g
ZWx0LT5yZW5kZXJCb3goKSkKKyAgICAgICAgICAgICAgICByZWN0Lm1vdmUob2JqLT5ib3JkZXJM
ZWZ0KCkgKyBvYmotPnBhZGRpbmdMZWZ0KCksIG9iai0+Ym9yZGVyVG9wKCkgKyBvYmotPnBhZGRp
bmdUb3AoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUg
PSBtX2ZyYW1lOworICAgIHdoaWxlIChmcmFtZSkgeworICAgICAgICBpZiAoRWxlbWVudCogZWxl
bWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihmcmFtZS0+b3duZXJFbGVtZW50KCkpKSB7Cisg
ICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgcmVjdC5tb3ZlKGVsZW1lbnQtPm9mZnNl
dExlZnQoKSwgZWxlbWVudC0+b2Zmc2V0VG9wKCkpOworICAgICAgICAgICAgfSB3aGlsZSAoKGVs
ZW1lbnQgPSBlbGVtZW50LT5vZmZzZXRQYXJlbnQoKSkpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKChmcmFtZSA9IGZyYW1lLT50cmVlKCktPnBhcmVudCgpKSkKKyAgICAgICAgICAgIHJlY3Qu
bW92ZSgoLWZyYW1lLT52aWV3KCktPnNjcm9sbE9mZnNldCgpKSk7CisgICAgfQorCisgICAgcmV0
dXJuIHJlY3Q7Cit9CisKK1dlYkNvcmU6OkludFJlY3QgQmFja2luZ1N0b3JlQ2xpZW50Ojp0cmFu
c2Zvcm1lZEFic29sdXRlUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGFnZS0+ZC0+
bWFwVG9UcmFuc2Zvcm1lZChhYnNvbHV0ZVJlY3QoKSk7Cit9CisKK1dlYkNvcmU6OkludFBvaW50
IEJhY2tpbmdTdG9yZUNsaWVudDo6YWJzb2x1dGVMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGFic29sdXRlUmVjdCgpLmxvY2F0aW9uKCk7Cit9CisKK1dlYkNvcmU6OkludFBvaW50IEJh
Y2tpbmdTdG9yZUNsaWVudDo6dHJhbnNmb3JtZWRBYnNvbHV0ZUxvY2F0aW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV93ZWJQYWdlLT5kLT5tYXBUb1RyYW5zZm9ybWVkKHRyYW5zZm9ybWVkQWJz
b2x1dGVSZWN0KCkpLmxvY2F0aW9uKCk7Cit9CisKK1dlYkNvcmU6OkludFBvaW50IEJhY2tpbmdT
dG9yZUNsaWVudDo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIEFTU0VSVChtX2ZyYW1l
KTsKKyAgICByZXR1cm4gbV9mcmFtZS0+dmlldygpLT5zY3JvbGxQb3NpdGlvbigpIC0gcG9pbnRU
b1NpemUobV9mcmFtZS0+dmlldygpLT5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKSk7Cit9CisKK1dl
YkNvcmU6OkludFBvaW50IEJhY2tpbmdTdG9yZUNsaWVudDo6dHJhbnNmb3JtZWRTY3JvbGxQb3Np
dGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGFnZS0+ZC0+bWFwVG9UcmFuc2Zvcm1l
ZChzY3JvbGxQb3NpdGlvbigpKTsKK30KKwordm9pZCBCYWNraW5nU3RvcmVDbGllbnQ6OnNldFNj
cm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3MpCit7CisgICAgQVNTRVJU
KG1fZnJhbWUtPnZpZXcoKSk7CisgICAgaWYgKHBvcyA9PSBzY3JvbGxQb3NpdGlvbigpKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBXZSBzZXQgYSBmbGFnIGhlcmUgdG8gbm90ZSB0aGF0IHRo
aXMgc2Nyb2xsIG9wZXJhdGlvbiB3YXMgb3JpZ2luYXRlZAorICAgIC8vIHdpdGhpbiB0aGUgQmxh
Y2tCZXJyeS1zcGVjaWZpYyBsYXllciBvZiBXZWJLaXQgYW5kIG5vdCBieSBXZWJDb3JlLgorICAg
IC8vIFRoaXMgZmxhZyBpcyBjaGVja2VkIGluIGNoZWNrT3JpZ2luT2ZDdXJyZW50U2Nyb2xsT3Bl
cmF0aW9uKCkgdG8gZGVjaWRlCisgICAgLy8gd2hldGhlciB0byBub3RpZnkgdGhlIGNsaWVudCBv
ZiB0aGUgY3VycmVudCBzY3JvbGwgb3BlcmF0aW9uLiBUaGlzIGlzCisgICAgLy8gd2h5IGl0IGlz
IGltcG9ydGFudCB0aGF0IGFsbCBzY3JvbGwgb3BlcmF0aW9ucyB0aGF0IG9yaWdpbmF0ZSB3aXRo
aW4KKyAgICAvLyBCbGFja0JlcnJ5LXNwZWNpZmljIGNvZGUgYXJlIGVuY2Fwc3VsYXRlZCBoZXJl
IGFuZCB0aGF0IGNhbGxlcnMgb2YgdGhpcworICAgIC8vIG1ldGhvZCBhbHNvIGRpcmVjdGx5IG9y
IGluZGlyZWN0bHkgY2FsbCBub3RpZnlUcmFuc2Zvcm1lZFNjcm9sbENoYW5nZWQoKS4KKyAgICBt
X2lzU2Nyb2xsTm90aWZpY2F0aW9uU3VwcHJlc3NlZCA9IHRydWU7CisgICAgbV9mcmFtZS0+dmll
dygpLT5zZXRTY3JvbGxQb3NpdGlvbihwb3MgKyBwb2ludFRvU2l6ZShtX2ZyYW1lLT52aWV3KCkt
Pm1pbmltdW1TY3JvbGxQb3NpdGlvbigpKSk7CisgICAgbV9pc1Njcm9sbE5vdGlmaWNhdGlvblN1
cHByZXNzZWQgPSBmYWxzZTsKK30KKworV2ViQ29yZTo6SW50UG9pbnQgQmFja2luZ1N0b3JlQ2xp
ZW50OjptYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIEFTU0VSVChtX2ZyYW1l
LT52aWV3KCkpOworICAgIHJldHVybiBtX2ZyYW1lLT52aWV3KCktPm1heGltdW1TY3JvbGxQb3Np
dGlvbigpIC0gcG9pbnRUb1NpemUobV9mcmFtZS0+dmlldygpLT5taW5pbXVtU2Nyb2xsUG9zaXRp
b24oKSk7Cit9CisKK1dlYkNvcmU6OkludFBvaW50IEJhY2tpbmdTdG9yZUNsaWVudDo6dHJhbnNm
b3JtZWRNYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBh
Z2UtPmQtPm1hcFRvVHJhbnNmb3JtZWQobWF4aW11bVNjcm9sbFBvc2l0aW9uKCkpOworfQorCitX
ZWJDb3JlOjpJbnRTaXplIEJhY2tpbmdTdG9yZUNsaWVudDo6YWN0dWFsVmlzaWJsZVNpemUoKSBj
b25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2UtPmQtPm1hcEZyb21UcmFuc2Zvcm1lZCh0cmFu
c2Zvcm1lZEFjdHVhbFZpc2libGVTaXplKCkpOworfQorCitXZWJDb3JlOjpJbnRTaXplIEJhY2tp
bmdTdG9yZUNsaWVudDo6dHJhbnNmb3JtZWRBY3R1YWxWaXNpYmxlU2l6ZSgpIGNvbnN0Cit7Cisg
ICAgaWYgKGlzTWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybiBtX3dlYlBhZ2UtPmQtPnRyYW5z
Zm9ybWVkQWN0dWFsVmlzaWJsZVNpemUoKTsKKworICAgIHJldHVybiB0cmFuc2Zvcm1lZFZpZXdw
b3J0U2l6ZSgpOworfQorCitXZWJDb3JlOjpJbnRTaXplIEJhY2tpbmdTdG9yZUNsaWVudDo6dmll
d3BvcnRTaXplKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9mcmFtZS0+dmlldygpKTsKKyAgICBp
ZiAoaXNNYWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIG1fd2ViUGFnZS0+ZC0+dmlld3BvcnRT
aXplKCk7CisKKyAgICByZXR1cm4gbV9mcmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3Qo
KS5zaXplKCk7Cit9CisKK1dlYkNvcmU6OkludFNpemUgQmFja2luZ1N0b3JlQ2xpZW50Ojp0cmFu
c2Zvcm1lZFZpZXdwb3J0U2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKGlzTWFpbkZyYW1lKCkpCisg
ICAgICAgIHJldHVybiBtX3dlYlBhZ2UtPmQtPnRyYW5zZm9ybWVkVmlld3BvcnRTaXplKCk7CisK
KyAgICBBU1NFUlQobV9mcmFtZS0+dmlldygpKTsKKyAgICBjb25zdCBXZWJDb3JlOjpJbnRTaXpl
IHVudHJhbnNmb3JtZWRWaWV3cG9ydFNpemUgPSBtX2ZyYW1lLT52aWV3KCktPnZpc2libGVDb250
ZW50UmVjdCgpLnNpemUoKTsKKyAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50IHRyYW5zZm9y
bWVkQm90dG9tUmlnaHQgPSBtX3dlYlBhZ2UtPmQtPm1fdHJhbnNmb3JtYXRpb25NYXRyaXgtPm1h
cFBvaW50KAorICAgICAgICBXZWJDb3JlOjpGbG9hdFBvaW50KHVudHJhbnNmb3JtZWRWaWV3cG9y
dFNpemUud2lkdGgoKSwgdW50cmFuc2Zvcm1lZFZpZXdwb3J0U2l6ZS5oZWlnaHQoKSkpOworICAg
IHJldHVybiBXZWJDb3JlOjpJbnRTaXplKGZsb29yZih0cmFuc2Zvcm1lZEJvdHRvbVJpZ2h0Lngo
KSksIGZsb29yZih0cmFuc2Zvcm1lZEJvdHRvbVJpZ2h0LnkoKSkpOworfQorCitXZWJDb3JlOjpJ
bnRSZWN0IEJhY2tpbmdTdG9yZUNsaWVudDo6dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1fZnJhbWUtPnZpZXcoKSk7CisgICAgV2ViQ29yZTo6SW50UmVjdCB2aXNp
YmxlQ29udGVudFJlY3QgPSBtX2ZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpOwor
ICAgIGlmIChpc01haW5GcmFtZSgpKQorICAgICAgICByZXR1cm4gdmlzaWJsZUNvbnRlbnRSZWN0
OworCisgICAgV2ViQ29yZTo6SW50UG9pbnQgb2Zmc2V0ID0gYWJzb2x1dGVMb2NhdGlvbigpOwor
ICAgIHZpc2libGVDb250ZW50UmVjdC5tb3ZlKG9mZnNldC54KCksIG9mZnNldC55KCkpOworICAg
IGlmIChtX3BhcmVudCkKKyAgICAgICAgdmlzaWJsZUNvbnRlbnRSZWN0LmludGVyc2VjdChtX3Bh
cmVudC0+dmlzaWJsZUNvbnRlbnRzUmVjdCgpKTsKKworICAgIHJldHVybiB2aXNpYmxlQ29udGVu
dFJlY3Q7Cit9CisKK1dlYkNvcmU6OkludFJlY3QgQmFja2luZ1N0b3JlQ2xpZW50Ojp0cmFuc2Zv
cm1lZFZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdAoreworICAgIC8vIFVzdWFsbHkgdGhpcyB3
b3VsZCBiZSBtYXBUb1RyYW5zZm9ybWVkKHZpc2libGVDb250ZW50c1JlY3QoKSksIGJ1dAorICAg
IC8vIHRoYXQgcmVzdWx0cyBpbiByb3VuZGluZyBlcnJvcnMgYmVjYXVzZSB3ZSBhbHJlYWR5IHNl
dCB0aGUgV2ViQ29yZQorICAgIC8vIHZpZXdwb3J0IHNpemUgZnJvbSBvdXIgb3JpZ2luYWwgdHJh
bnNmb3JtZWRWaWV3cG9ydFNpemUoKS4KKyAgICAvLyBJbnN0ZWFkLCB3ZSBvbmx5IHRyYW5zZm9y
bSB0aGUgc2Nyb2xsIHBvc2l0aW9uIGFuZCB0YWtlIHRoZQorICAgIC8vIHZpZXdwb3J0IHNpemUg
YXMgaXQgaXMsIHdoaWNoIGVuc3VyZXMgdGhhdCBlLmcuIGJsaXR0aW5nIG9wZXJhdGlvbnMKKyAg
ICAvLyBhbHdheXMgY292ZXIgdGhlIHdob2xlIHdpZGdldC9zY3JlZW4uCisgICAgV2ViQ29yZTo6
SW50UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0ID0gV2ViQ29yZTo6SW50UmVjdCh0cmFuc2Zvcm1l
ZFNjcm9sbFBvc2l0aW9uKCksIHRyYW5zZm9ybWVkVmlld3BvcnRTaXplKCkpOworICAgIGlmIChp
c01haW5GcmFtZSgpKQorICAgICAgICByZXR1cm4gdmlzaWJsZUNvbnRlbnRzUmVjdDsKKworICAg
IFdlYkNvcmU6OkludFBvaW50IG9mZnNldCA9IHRyYW5zZm9ybWVkQWJzb2x1dGVMb2NhdGlvbigp
OworICAgIHZpc2libGVDb250ZW50c1JlY3QubW92ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsK
KyAgICByZXR1cm4gdmlzaWJsZUNvbnRlbnRzUmVjdDsKK30KKworV2ViQ29yZTo6SW50U2l6ZSBC
YWNraW5nU3RvcmVDbGllbnQ6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1f
ZnJhbWUtPnZpZXcoKSk7CisgICAgcmV0dXJuIG1fZnJhbWUtPnZpZXcoKS0+Y29udGVudHNTaXpl
KCk7Cit9CisKK1dlYkNvcmU6OkludFNpemUgQmFja2luZ1N0b3JlQ2xpZW50Ojp0cmFuc2Zvcm1l
ZENvbnRlbnRzU2l6ZSgpIGNvbnN0Cit7CisgICAgLy8gbWFwVG9UcmFuc2Zvcm1lZCgpIGZ1bmN0
aW9ucyB1c2UgdGhpcyBtZXRob2QgdG8gY3JvcCB0aGVpciByZXN1bHRzLAorICAgIC8vIHNvIHdl
IGNhbid0IG1ha2UgdXNlIG9mIHRoZW0gaGVyZS4gV2hpbGUgd2Ugd2FudCByb3VuZGluZyBpbnNp
ZGUgcGFnZQorICAgIC8vIGJvdW5kYXJpZXMgdG8gZXh0ZW5kIHJlY3RhbmdsZXMgYW5kIHJvdW5k
IHBvaW50cywgd2UgbmVlZCB0byBjcm9wIHRoZQorICAgIC8vIGNvbnRlbnRzIHNpemUgdG8gdGhl
IGZsb29yZWQgdmFsdWVzIHNvIHRoYXQgd2UgZG9uJ3QgdHJ5IHRvIGRpc3BsYXkKKyAgICAvLyBv
ciByZXBvcnQgcG9pbnRzIHRoYXQgYXJlIG5vdCBmdWxseSBjb3ZlcmVkIGJ5IHRoZSBhY3R1YWwg
ZmxvYXQtcG9pbnQKKyAgICAvLyBjb250ZW50cyByZWN0YW5nbGUuCisgICAgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSB1bnRyYW5zZm9ybWVkQ29udGVudHNTaXplID0gY29udGVudHNTaXplKCk7Cisg
ICAgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCB0cmFuc2Zvcm1lZEJvdHRvbVJpZ2h0ID0gbV93
ZWJQYWdlLT5kLT5tX3RyYW5zZm9ybWF0aW9uTWF0cml4LT5tYXBQb2ludCgKKyAgICAgICAgV2Vi
Q29yZTo6RmxvYXRQb2ludCh1bnRyYW5zZm9ybWVkQ29udGVudHNTaXplLndpZHRoKCksIHVudHJh
bnNmb3JtZWRDb250ZW50c1NpemUuaGVpZ2h0KCkpKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6SW50
U2l6ZShmbG9vcmYodHJhbnNmb3JtZWRCb3R0b21SaWdodC54KCkpLCBmbG9vcmYodHJhbnNmb3Jt
ZWRCb3R0b21SaWdodC55KCkpKTsKK30KKwordm9pZCBCYWNraW5nU3RvcmVDbGllbnQ6OmNsaXBU
b1RyYW5zZm9ybWVkQ29udGVudHNSZWN0KFdlYkNvcmU6OkludFJlY3QmIHJlY3QpIGNvbnN0Cit7
CisgICAgLy8gRklYTUU6IE5lZWRzIHRvIHByb3BlciB0cmFuc2xhdGUgY29vcmRpbmF0ZXMgaGVy
ZT8KKyAgICByZWN0LmludGVyc2VjdChXZWJDb3JlOjpJbnRSZWN0KFdlYkNvcmU6OkludFBvaW50
KDAsIDApLCB0cmFuc2Zvcm1lZENvbnRlbnRzU2l6ZSgpKSk7Cit9CisKK1dlYkNvcmU6OkludFBv
aW50IEJhY2tpbmdTdG9yZUNsaWVudDo6bWFwRnJvbUNvbnRlbnRzVG9WaWV3cG9ydChjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSB0aGlzLT5zY3JvbGxQb3NpdGlvbigpOworICAgIHJldHVy
biBXZWJDb3JlOjpJbnRQb2ludChwb2ludC54KCkgLSBzY3JvbGxQb3NpdGlvbi54KCksIHBvaW50
LnkoKSAtIHNjcm9sbFBvc2l0aW9uLnkoKSk7Cit9CisKK1dlYkNvcmU6OkludFBvaW50IEJhY2tp
bmdTdG9yZUNsaWVudDo6bWFwRnJvbVZpZXdwb3J0VG9Db250ZW50cyhjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgc2Ny
b2xsUG9zaXRpb24gPSB0aGlzLT5zY3JvbGxQb3NpdGlvbigpOworICAgIHJldHVybiBXZWJDb3Jl
OjpJbnRQb2ludChwb2ludC54KCkgKyBzY3JvbGxQb3NpdGlvbi54KCksIHBvaW50LnkoKSArIHNj
cm9sbFBvc2l0aW9uLnkoKSk7Cit9CisKK1dlYkNvcmU6OkludFJlY3QgQmFja2luZ1N0b3JlQ2xp
ZW50OjptYXBGcm9tQ29udGVudHNUb1ZpZXdwb3J0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJl
Y3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkNvcmU6OkludFJlY3QobWFwRnJvbUNvbnRlbnRz
VG9WaWV3cG9ydChyZWN0LmxvY2F0aW9uKCkpLCByZWN0LnNpemUoKSk7Cit9CisKK1dlYkNvcmU6
OkludFJlY3QgQmFja2luZ1N0b3JlQ2xpZW50OjptYXBGcm9tVmlld3BvcnRUb0NvbnRlbnRzKGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkNvcmU6
OkludFJlY3QobWFwRnJvbVZpZXdwb3J0VG9Db250ZW50cyhyZWN0LmxvY2F0aW9uKCkpLCByZWN0
LnNpemUoKSk7Cit9CisKK1dlYkNvcmU6OkludFBvaW50IEJhY2tpbmdTdG9yZUNsaWVudDo6bWFw
RnJvbVRyYW5zZm9ybWVkQ29udGVudHNUb1RyYW5zZm9ybWVkVmlld3BvcnQoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
IHNjcm9sbFBvc2l0aW9uID0gdHJhbnNmb3JtZWRTY3JvbGxQb3NpdGlvbigpOworICAgIHJldHVy
biBXZWJDb3JlOjpJbnRQb2ludChwb2ludC54KCkgLSBzY3JvbGxQb3NpdGlvbi54KCksIHBvaW50
LnkoKSAtIHNjcm9sbFBvc2l0aW9uLnkoKSk7Cit9CisKK1dlYkNvcmU6OkludFBvaW50IEJhY2tp
bmdTdG9yZUNsaWVudDo6bWFwRnJvbVRyYW5zZm9ybWVkVmlld3BvcnRUb1RyYW5zZm9ybWVkQ29u
dGVudHMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIGNvbnN0
IFdlYkNvcmU6OkludFBvaW50IHNjcm9sbFBvc2l0aW9uID0gdHJhbnNmb3JtZWRTY3JvbGxQb3Np
dGlvbigpOworICAgIHJldHVybiBXZWJDb3JlOjpJbnRQb2ludChwb2ludC54KCkgKyBzY3JvbGxQ
b3NpdGlvbi54KCksIHBvaW50LnkoKSArIHNjcm9sbFBvc2l0aW9uLnkoKSk7Cit9CisKK1dlYkNv
cmU6OkludFJlY3QgQmFja2luZ1N0b3JlQ2xpZW50OjptYXBGcm9tVHJhbnNmb3JtZWRDb250ZW50
c1RvVHJhbnNmb3JtZWRWaWV3cG9ydChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KSBjb25z
dAoreworICAgIHJldHVybiBXZWJDb3JlOjpJbnRSZWN0KG1hcEZyb21UcmFuc2Zvcm1lZENvbnRl
bnRzVG9UcmFuc2Zvcm1lZFZpZXdwb3J0KHJlY3QubG9jYXRpb24oKSksIHJlY3Quc2l6ZSgpKTsK
K30KKworV2ViQ29yZTo6SW50UmVjdCBCYWNraW5nU3RvcmVDbGllbnQ6Om1hcEZyb21UcmFuc2Zv
cm1lZFZpZXdwb3J0VG9UcmFuc2Zvcm1lZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkNvcmU6OkludFJlY3QobWFwRnJvbVRyYW5z
Zm9ybWVkVmlld3BvcnRUb1RyYW5zZm9ybWVkQ29udGVudHMocmVjdC5sb2NhdGlvbigpKSwgcmVj
dC5zaXplKCkpOworfQorCitXZWJQYWdlUHJpdmF0ZTo6TG9hZFN0YXRlIEJhY2tpbmdTdG9yZUNs
aWVudDo6bG9hZFN0YXRlKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogRG9lcyBpdCBuZWVkIHRv
IGNhbGwgV2ViUGFnZSdzPworICAgIHJldHVybiBtX3dlYlBhZ2UtPmQtPmxvYWRTdGF0ZSgpOwor
fQorCitib29sIEJhY2tpbmdTdG9yZUNsaWVudDo6aXNMb2FkaW5nKCkgY29uc3QKK3sKKyAgICAv
LyBGSVhNRTogRG9lcyBpdCBuZWVkIHRvIGNhbGwgV2ViUGFnZSdzPworICAgIHJldHVybiBtX3dl
YlBhZ2UtPmQtPmlzTG9hZGluZygpOworfQorCitib29sIEJhY2tpbmdTdG9yZUNsaWVudDo6aXNG
b2N1c2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mcmFtZQorICAgICAgICAmJiBtX2ZyYW1l
LT5wYWdlKCkKKyAgICAgICAgJiYgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKQor
ICAgICAgICAmJiBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkRnJh
bWUoKSA9PSBtX2ZyYW1lOworfQorCitib29sIEJhY2tpbmdTdG9yZUNsaWVudDo6c2Nyb2xsc0hv
cml6b250YWxseSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRyYW5zZm9ybWVkQWN0dWFsVmlzaWJs
ZVNpemUoKS53aWR0aCgpIDwgdHJhbnNmb3JtZWRDb250ZW50c1NpemUoKS53aWR0aCgpOworfQor
Citib29sIEJhY2tpbmdTdG9yZUNsaWVudDo6c2Nyb2xsc1ZlcnRpY2FsbHkoKSBjb25zdAorewor
ICAgIHJldHVybiB0cmFuc2Zvcm1lZEFjdHVhbFZpc2libGVTaXplKCkuaGVpZ2h0KCkgPCB0cmFu
c2Zvcm1lZENvbnRlbnRzU2l6ZSgpLmhlaWdodCgpOworfQorCitib29sIEJhY2tpbmdTdG9yZUNs
aWVudDo6aXNDbGllbnRHZW5lcmF0ZWRTY3JvbGwoKSBjb25zdAoreworICAgIHJldHVybiBtX2lz
Q2xpZW50R2VuZXJhdGVkU2Nyb2xsOworfQorCit2b2lkIEJhY2tpbmdTdG9yZUNsaWVudDo6c2V0
SXNDbGllbnRHZW5lcmF0ZWRTY3JvbGwoYm9vbCBmbGFnKQoreworICAgIG1faXNDbGllbnRHZW5l
cmF0ZWRTY3JvbGwgPSBmbGFnOworfQorCitib29sIEJhY2tpbmdTdG9yZUNsaWVudDo6aXNTY3Jv
bGxOb3RpZmljYXRpb25TdXBwcmVzc2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pc1Njcm9s
bE5vdGlmaWNhdGlvblN1cHByZXNzZWQ7Cit9CisKK3ZvaWQgQmFja2luZ1N0b3JlQ2xpZW50Ojpz
ZXRJc1Njcm9sbE5vdGlmaWNhdGlvblN1cHByZXNzZWQoYm9vbCBmbGFnKQoreworICAgIG1faXNT
Y3JvbGxOb3RpZmljYXRpb25TdXBwcmVzc2VkID0gZmxhZzsKK30KKwordm9pZCBCYWNraW5nU3Rv
cmVDbGllbnQ6OmNoZWNrT3JpZ2luT2ZDdXJyZW50U2Nyb2xsT3BlcmF0aW9uKCkKK3sKKyAgICAv
LyBUaGlzIGlzIGNhbGxlZCB2aWEgQ2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6c2Nyb2xsIGluIG9y
ZGVyIHRvIGNoZWNrIHRoZSBvcmlnaW4KKyAgICAvLyBvZiB0aGUgY3VycmVudCBzY3JvbGwgb3Bl
cmF0aW9uIHRvIGRlY2lkZSB3aGV0aGVyIHRvIG5vdGlmeSB0aGUgY2xpZW50LgorICAgIC8vIElm
IHRoZSBjdXJyZW50IHNjcm9sbCBvcGVyYXRpb24gd2FzIGluaXRpYXRlZCBpbnRlcm5hbGx5IGJ5
IFdlYkNvcmUgaXRzZWxmCisgICAgLy8gZWl0aGVyIHZpYSBKYXZhU2NyaXB0LCBiYWNrL2Zvcndh
cmQgb3Igb3RoZXJ3aXNlIHRoZW4gd2UgbmVlZCB0byBnbyBhaGVhZAorICAgIC8vIGFuZCBub3Rp
ZnkgdGhlIGNsaWVudCBvZiB0aGlzIGNoYW5nZS4KKyAgICBpZiAoaXNTY3JvbGxOb3RpZmljYXRp
b25TdXBwcmVzc2VkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChpc01haW5GcmFtZSgp
KQorICAgICAgICBtX3dlYlBhZ2UtPmQtPm5vdGlmeVRyYW5zZm9ybWVkU2Nyb2xsQ2hhbmdlZCgp
OworICAgIGVsc2UKKyAgICAgICAgbV9iYWNraW5nU3RvcmUtPmQtPnNjcm9sbENoYW5nZWQodHJh
bnNmb3JtZWRTY3JvbGxQb3NpdGlvbigpKTsKK30KKworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlQ2xpZW50LmggYi9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVDbGllbnQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jZTA0ZWU4ZGUwOWJkYTE5ZTVjYWFhMmY0YjQxYWE2NDA4OTQ2ZWY5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
QmFja2luZ1N0b3JlQ2xpZW50LmgKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDksIDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBCYWNraW5nU3RvcmVD
bGllbnRfaAorI2RlZmluZSBCYWNraW5nU3RvcmVDbGllbnRfaAorCisjaW5jbHVkZSAiV2ViUGFn
ZV9wLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBGbG9hdFBvaW50OworY2xhc3MgRnJhbWU7CitjbGFzcyBJbnRQb2ludDsKK2NsYXNzIElu
dFNpemU7CitjbGFzcyBJbnRSZWN0OworfQorCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgQmFja2luZ1N0b3JlOworY2xhc3MgV2ViUGFnZVByaXZh
dGU7CisKK2NsYXNzIEJhY2tpbmdTdG9yZUNsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIEJh
Y2tpbmdTdG9yZUNsaWVudCogY3JlYXRlKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6RnJhbWUq
IHBhcmVudEZyYW1lLCBXZWJQYWdlKiBwYXJlbnRQYWdlKTsKKyAgICB+QmFja2luZ1N0b3JlQ2xp
ZW50KCk7CisKKyAgICBCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYmFja2luZ1N0b3JlOyB9CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZTsgfQorICAgIGJvb2wgaXNNYWluRnJhbWUoKSBjb25zdCB7IHJldHVybiBt
X2ZyYW1lID09IG1fd2ViUGFnZS0+ZC0+bV9tYWluRnJhbWU7IH0KKworICAgIHZvaWQgYWRkQ2hp
bGQoQmFja2luZ1N0b3JlQ2xpZW50KiBjaGlsZCk7CisgICAgV1RGOjpWZWN0b3IgPEJhY2tpbmdT
dG9yZUNsaWVudCo+IGNoaWxkcmVuKCkgY29uc3Q7CisgICAgQmFja2luZ1N0b3JlQ2xpZW50KiBw
YXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsgfQorCisgICAgV2ViQ29yZTo6SW50UG9p
bnQgYWJzb2x1dGVMb2NhdGlvbigpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFBvaW50IHRyYW5z
Zm9ybWVkQWJzb2x1dGVMb2NhdGlvbigpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFJlY3QgYWJz
b2x1dGVSZWN0KCkgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50UmVjdCB0cmFuc2Zvcm1lZEFic29s
dXRlUmVjdCgpIGNvbnN0OworCisgICAgLy8gc2Nyb2xsIHBvc2l0aW9uIHJldHVybmVkIGlzIGlu
IHRyYW5zZm9ybWVkIGNvb3JkaW5hdGVzCisgICAgV2ViQ29yZTo6SW50UG9pbnQgc2Nyb2xsUG9z
aXRpb24oKSBjb25zdDsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRp
b24oKSBjb25zdDsKKyAgICAvLyBzY3JvbGwgcG9zaXRpb24gcHJvdmlkZWQgc2hvdWxkIGJlIGlu
IHRyYW5zZm9ybWVkIGNvb3JkaW5hdGVzCisgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYpOworCisgICAgV2ViQ29yZTo6SW50UG9pbnQgdHJhbnNmb3Jt
ZWRTY3JvbGxQb3NpdGlvbigpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFBvaW50IHRyYW5zZm9y
bWVkTWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Q7CisKKyAgICBXZWJDb3JlOjpJbnRTaXpl
IGFjdHVhbFZpc2libGVTaXplKCkgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50U2l6ZSB0cmFuc2Zv
cm1lZEFjdHVhbFZpc2libGVTaXplKCkgY29uc3Q7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIHZp
ZXdwb3J0U2l6ZSgpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFNpemUgdHJhbnNmb3JtZWRWaWV3
cG9ydFNpemUoKSBjb25zdDsKKworICAgIFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZUNvbnRlbnRz
UmVjdCgpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFJlY3QgdHJhbnNmb3JtZWRWaXNpYmxlQ29u
dGVudHNSZWN0KCkgY29uc3Q7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSgp
IGNvbnN0OworICAgIFdlYkNvcmU6OkludFNpemUgdHJhbnNmb3JtZWRDb250ZW50c1NpemUoKSBj
b25zdDsKKworICAgIC8qIEdlbmVyaWMgY29udmVyc2lvbnMgb2YgcG9pbnRzLCByZWN0cywgcmVs
YXRpdmUgdG8gYW5kIGZyb20gY29udGVudHMgYW5kIHZpZXdwb3J0Ki8KKyAgICBXZWJDb3JlOjpJ
bnRQb2ludCBtYXBGcm9tQ29udGVudHNUb1ZpZXdwb3J0KGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JikgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgbWFwRnJvbVZpZXdwb3J0VG9Db250ZW50
cyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFJlY3Qg
bWFwRnJvbUNvbnRlbnRzVG9WaWV3cG9ydChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7
CisgICAgV2ViQ29yZTo6SW50UmVjdCBtYXBGcm9tVmlld3BvcnRUb0NvbnRlbnRzKGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKSBjb25zdDsKKworICAgIC8qIEdlbmVyaWMgY29udmVyc2lvbnMgb2Yg
cG9pbnRzLCByZWN0cywgcmVsYXRpdmUgdG8gYW5kIGZyb20gdHJhbnNmb3JtZWQgY29udGVudHMg
YW5kIHRyYW5zZm9ybWVkIHZpZXdwb3J0Ki8KKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtYXBGcm9t
VHJhbnNmb3JtZWRDb250ZW50c1RvVHJhbnNmb3JtZWRWaWV3cG9ydChjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFBvaW50IG1hcEZyb21UcmFuc2Zvcm1l
ZFZpZXdwb3J0VG9UcmFuc2Zvcm1lZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jikg
Y29uc3Q7CisgICAgV2ViQ29yZTo6SW50UmVjdCBtYXBGcm9tVHJhbnNmb3JtZWRDb250ZW50c1Rv
VHJhbnNmb3JtZWRWaWV3cG9ydChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7CisgICAg
V2ViQ29yZTo6SW50UmVjdCBtYXBGcm9tVHJhbnNmb3JtZWRWaWV3cG9ydFRvVHJhbnNmb3JtZWRD
b250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7CisKKyAgICB2b2lkIGNsaXBU
b1RyYW5zZm9ybWVkQ29udGVudHNSZWN0KFdlYkNvcmU6OkludFJlY3QmKSBjb25zdDsKKworICAg
IGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7CisgICAgV2ViUGFnZVByaXZhdGU6OkxvYWRTdGF0ZSBs
b2FkU3RhdGUoKSBjb25zdDsKKworICAgIGJvb2wgaXNGb2N1c2VkKCkgY29uc3Q7CisKKyAgICBi
b29sIHNjcm9sbHNIb3Jpem9udGFsbHkoKSBjb25zdDsKKyAgICBib29sIHNjcm9sbHNWZXJ0aWNh
bGx5KCkgY29uc3Q7CisKKyAgICBib29sIGlzQ2xpZW50R2VuZXJhdGVkU2Nyb2xsKCkgY29uc3Q7
CisgICAgdm9pZCBzZXRJc0NsaWVudEdlbmVyYXRlZFNjcm9sbChib29sKTsKKworICAgIGJvb2wg
aXNTY3JvbGxOb3RpZmljYXRpb25TdXBwcmVzc2VkKCkgY29uc3Q7CisgICAgdm9pZCBzZXRJc1Nj
cm9sbE5vdGlmaWNhdGlvblN1cHByZXNzZWQoYm9vbCk7CisKKyAgICAvKiBDYWxsZWQgZnJvbSB3
aXRoaW4gV2ViS2l0IHZpYSBDaHJvbWVDbGllbnRCbGFja0JlcnJ5ICovCisgICAgdm9pZCBjaGVj
a09yaWdpbk9mQ3VycmVudFNjcm9sbE9wZXJhdGlvbigpOworCisgICAgLy8gRklYTUU6IExlYXZp
bmcgdGhlIGJlbG93IGxpbmVzIGNvbW1lbnRlZCBvdXQgYXMgYSByZWZlcmVuY2UgZm9yIHVzIHRv
IHNvb24gYmUgc3VyZSBpZiB3ZSBuZWVkIHRoZXNlCisgICAgLy8gbWV0aG9kcyBhbmQgY2xhc3Mg
dmFyaWFibGVzIGJlIG1vdmVkIGZyb20gV2ViUGFnZSB0byBCYWNraW5nU3RvcmVDbGllbnQuCisg
ICAgLy8gTm90aWZpY2F0aW9uIG1ldGhvZHMgdGhhdCBkZWxpdmVyIGNoYW5nZXMgdG8gdGhlIHJl
YWwgZ2VvbWV0cnkgb2YgdGhlIGRldmljZSBhcyBzcGVjaWZpZWQgYWJvdmUuCisgICAgLy8gdm9p
ZCBub3RpZnlUcmFuc2Zvcm1DaGFuZ2VkKCk7CisgICAgLy8gdm9pZCBub3RpZnlUcmFuc2Zvcm1l
ZENvbnRlbnRzU2l6ZUNoYW5nZWQoKTsKKyAgICAvLyB2b2lkIG5vdGlmeVRyYW5zZm9ybWVkU2Ny
b2xsQ2hhbmdlZCgpOworICAgIC8vIG1fb3ZlcmZsb3dFeGNlZWRzQ29udGVudHNTaXplID0gdHJ1
ZTsKKyAgICAvLyBoYXNwZW5kaW5nc2Nyb2xsZXZlbnQKKworcHJpdmF0ZToKKyAgICBCYWNraW5n
U3RvcmVDbGllbnQoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpGcmFtZSogcGFyZW50RnJhbWUs
IFdlYlBhZ2UqIHBhcmVudFBhZ2UpOworCisgICAgV2ViQ29yZTo6RnJhbWUqIG1fZnJhbWU7Cisg
ICAgV2ViUGFnZSogbV93ZWJQYWdlOworICAgIEJhY2tpbmdTdG9yZSogbV9iYWNraW5nU3RvcmU7
CisgICAgQmFja2luZ1N0b3JlQ2xpZW50KiBtX3BhcmVudDsKKyAgICBib29sIG1faXNDbGllbnRH
ZW5lcmF0ZWRTY3JvbGw7CisgICAgYm9vbCBtX2lzU2Nyb2xsTm90aWZpY2F0aW9uU3VwcHJlc3Nl
ZDsKK307CisKK30KK30KKworI2VuZGlmIC8vIEJhY2tpbmdTdG9yZUNsaWVudF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVD
b21wb3NpdGluZ1N1cmZhY2UuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvQmFja2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJmYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40M2Uw
NzVhMzk4Yzc4MzgxZDQyOTYxOTNmNWM2NWJhNzZiNDliNWU3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlQ29tcG9z
aXRpbmdTdXJmYWNlLmNwcApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQmFja2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJmYWNlLmgiCisKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJTdXJmYWNlUG9vbC5oIgorCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3Jt
R3JhcGhpY3MuaD4KKworbmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktpdCB7
CisKK0NvbXBvc2l0aW5nU3VyZmFjZUJ1ZmZlcjo6Q29tcG9zaXRpbmdTdXJmYWNlQnVmZmVyKGNv
bnN0IFBsYXRmb3JtOjpJbnRTaXplJiBzaXplKQorICAgIDogbV9zaXplKHNpemUpCisgICAgLCBt
X2J1ZmZlcigwKQoreworfQorCitDb21wb3NpdGluZ1N1cmZhY2VCdWZmZXI6On5Db21wb3NpdGlu
Z1N1cmZhY2VCdWZmZXIoKQoreworICAgIGRlc3Ryb3lCdWZmZXIobV9idWZmZXIpOworfQorCitQ
bGF0Zm9ybTo6SW50U2l6ZSBDb21wb3NpdGluZ1N1cmZhY2VCdWZmZXI6OnN1cmZhY2VTaXplKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9zaXplOworfQorCitQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1
ZmZlciogQ29tcG9zaXRpbmdTdXJmYWNlQnVmZmVyOjpuYXRpdmVCdWZmZXIoKSBjb25zdAorewor
ICAgIGlmICghbV9idWZmZXIpIHsKKyAgICAgICAgbV9idWZmZXIgPSBjcmVhdGVCdWZmZXIobV9z
aXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybTo6R3JhcGhpY3M6
OlRpbGVCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtOjpH
cmFwaGljczo6R0xFUzIpOworICAgIH0KKyAgICByZXR1cm4gbV9idWZmZXI7Cit9CisKK0JhY2tp
bmdTdG9yZUNvbXBvc2l0aW5nU3VyZmFjZTo6QmFja2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJmYWNl
KGNvbnN0IFBsYXRmb3JtOjpJbnRTaXplJiBzaXplLCBib29sIGRvdWJsZUJ1ZmZlcmVkKQorICAg
IDogbV9pc0RvdWJsZUJ1ZmZlcmVkKGRvdWJsZUJ1ZmZlcmVkKQorICAgICwgbV9uZWVkc1N5bmMo
dHJ1ZSkKK3sKKyAgICBtX2Zyb250QnVmZmVyID0gbmV3IENvbXBvc2l0aW5nU3VyZmFjZUJ1ZmZl
cihzaXplKTsKKyAgICBtX2JhY2tCdWZmZXIgPSAhZG91YmxlQnVmZmVyZWQgPyAwIDogbmV3IENv
bXBvc2l0aW5nU3VyZmFjZUJ1ZmZlcihzaXplKTsKK30KKworQmFja2luZ1N0b3JlQ29tcG9zaXRp
bmdTdXJmYWNlOjp+QmFja2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJmYWNlKCkKK3sKKyAgICBkZWxl
dGUgbV9mcm9udEJ1ZmZlcjsKKyAgICBtX2Zyb250QnVmZmVyID0gMDsKKworICAgIGRlbGV0ZSBt
X2JhY2tCdWZmZXI7CisgICAgbV9iYWNrQnVmZmVyID0gMDsKK30KKworQ29tcG9zaXRpbmdTdXJm
YWNlQnVmZmVyKiBCYWNraW5nU3RvcmVDb21wb3NpdGluZ1N1cmZhY2U6OmZyb250QnVmZmVyKCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQobV9mcm9udEJ1ZmZlcik7CisgICAgcmV0dXJuIG1fZnJvbnRC
dWZmZXI7Cit9CisKK0NvbXBvc2l0aW5nU3VyZmFjZUJ1ZmZlciogQmFja2luZ1N0b3JlQ29tcG9z
aXRpbmdTdXJmYWNlOjpiYWNrQnVmZmVyKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faXNEb3VibGVC
dWZmZXJlZCkKKyAgICAgICAgcmV0dXJuIGZyb250QnVmZmVyKCk7CisKKyAgICBBU1NFUlQobV9i
YWNrQnVmZmVyKTsKKyAgICByZXR1cm4gbV9iYWNrQnVmZmVyOworfQorCit2b2lkIEJhY2tpbmdT
dG9yZUNvbXBvc2l0aW5nU3VyZmFjZTo6c3dhcEJ1ZmZlcnMoKQoreworICAgIGlmICghbV9pc0Rv
dWJsZUJ1ZmZlcmVkKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBTdG9yZSB0ZW1wcy4KKyAg
ICB1bnNpZ25lZCBmcm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGZyb250QnVmZmVy
KCkpOworICAgIHVuc2lnbmVkIGJhY2sgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihiYWNr
QnVmZmVyKCkpOworCisgICAgLy8gQXRvbWljIGNoYW5nZS4KKyAgICBfc21wX3hjaGcocmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCo+KCZtX2Zyb250QnVmZmVyKSwgYmFjayk7CisgICAgX3NtcF94
Y2hnKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPigmbV9iYWNrQnVmZmVyKSwgZnJvbnQpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKK30gLy8gbmFtZXNwYWNlIEJsYWNrQmVycnkKKyNl
bmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVDb21wb3NpdGluZ1N1
cmZhY2UuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdT
dG9yZUNvbXBvc2l0aW5nU3VyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ0ZWM0NWM1MjA0YzJhY2I5ZDYx
YjVlZDZhODg0NmI2M2Y4OTdjMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVDb21wb3NpdGluZ1N1cmZhY2UuaApA
QCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAy
MDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgQmFja2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJmYWNl
X2gKKyNkZWZpbmUgQmFja2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJmYWNlX2gKKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUlu
dFJlY3RSZWdpb24uaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Ro
cmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsKKworbmFtZXNw
YWNlIFBsYXRmb3JtIHsKK25hbWVzcGFjZSBHcmFwaGljcyB7CitzdHJ1Y3QgQnVmZmVyOworfQor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIENvbXBvc2l0aW5nU3VyZmFjZUJ1ZmZlciB7
CitwdWJsaWM6CisgICAgQ29tcG9zaXRpbmdTdXJmYWNlQnVmZmVyKGNvbnN0IFBsYXRmb3JtOjpJ
bnRTaXplJik7CisgICAgfkNvbXBvc2l0aW5nU3VyZmFjZUJ1ZmZlcigpOworICAgIFBsYXRmb3Jt
OjpJbnRTaXplIHN1cmZhY2VTaXplKCkgY29uc3Q7CisKKyAgICBQbGF0Zm9ybTo6R3JhcGhpY3M6
OkJ1ZmZlciogbmF0aXZlQnVmZmVyKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgUGxhdGZvcm06
OkludFNpemUgbV9zaXplOworICAgIG11dGFibGUgUGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIq
IG1fYnVmZmVyOworfTsKKworCitjbGFzcyBCYWNraW5nU3RvcmVDb21wb3NpdGluZ1N1cmZhY2Ug
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QmFja2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJm
YWNlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmFja2luZ1N0b3JlQ29tcG9z
aXRpbmdTdXJmYWNlPiBjcmVhdGUoY29uc3QgUGxhdGZvcm06OkludFNpemUmIHNpemUsIGJvb2wg
ZG91YmxlQnVmZmVyZWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJhY2tp
bmdTdG9yZUNvbXBvc2l0aW5nU3VyZmFjZShzaXplLCBkb3VibGVCdWZmZXJlZCkpOworICAgIH0K
KworICAgIH5CYWNraW5nU3RvcmVDb21wb3NpdGluZ1N1cmZhY2UoKTsKKworICAgIENvbXBvc2l0
aW5nU3VyZmFjZUJ1ZmZlciogZnJvbnRCdWZmZXIoKSBjb25zdDsKKyAgICBDb21wb3NpdGluZ1N1
cmZhY2VCdWZmZXIqIGJhY2tCdWZmZXIoKSBjb25zdDsKKyAgICBib29sIGlzRG91YmxlQnVmZmVy
ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRG91YmxlQnVmZmVyZWQ7IH0KKyAgICB2b2lkIHN3YXBC
dWZmZXJzKCk7CisKKyAgICBib29sIG5lZWRzU3luYygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNT
eW5jOyB9CisgICAgdm9pZCBzZXROZWVkc1N5bmMoYm9vbCBuZWVkc1N5bmMpIHsgbV9uZWVkc1N5
bmMgPSBuZWVkc1N5bmM7IH0KKworcHJpdmF0ZToKKyAgICBCYWNraW5nU3RvcmVDb21wb3NpdGlu
Z1N1cmZhY2UoY29uc3QgUGxhdGZvcm06OkludFNpemUmLCBib29sIGRvdWJsZUJ1ZmZlcmVkKTsK
KworICAgIG11dGFibGUgQ29tcG9zaXRpbmdTdXJmYWNlQnVmZmVyKiBtX2Zyb250QnVmZmVyOwor
ICAgIG11dGFibGUgQ29tcG9zaXRpbmdTdXJmYWNlQnVmZmVyKiBtX2JhY2tCdWZmZXI7CisgICAg
Ym9vbCBtX2lzRG91YmxlQnVmZmVyZWQ7CisgICAgYm9vbCBtX25lZWRzU3luYzsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorfSAvLyBuYW1lc3BhY2UgQmxhY2tCZXJyeQorCisjZW5kaWYg
Ly8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYgLy8gQmFja2luZ1N0b3Jl
Q29tcG9zaXRpbmdTdXJmYWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9yZVRpbGUuY3BwIGIvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlVGlsZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTE1
YzQ2NzIyZTM4YmY0Y2U2ZmM5MjhiNmUyZTY1MWE3MDMxMzhmNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9yZVRpbGUu
Y3BwCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAy
MDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
YWNraW5nU3RvcmVUaWxlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJTdXJmYWNlUG9vbC5oIgorCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhp
Y3MuaD4KKworbmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Rp
bGVCdWZmZXI6OlRpbGVCdWZmZXIoY29uc3QgUGxhdGZvcm06OkludFNpemUmIHNpemUpCisgICAg
OiBtX3NpemUoc2l6ZSkKKyAgICAsIG1fYnVmZmVyKDApCisgICAgLCBtX2JsaXRHZW5lcmF0aW9u
KDApCit7Cit9CisKK1RpbGVCdWZmZXI6On5UaWxlQnVmZmVyKCkKK3sKKyAgICBkZXN0cm95QnVm
ZmVyKG1fYnVmZmVyKTsKK30KKworUGxhdGZvcm06OkludFNpemUgVGlsZUJ1ZmZlcjo6c2l6ZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2l6ZTsKK30KKworUGxhdGZvcm06OkludFJlY3QgVGls
ZUJ1ZmZlcjo6cmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBsYXRmb3JtOjpJbnRSZWN0KFBs
YXRmb3JtOjpJbnRQb2ludCgwLCAwKSwgbV9zaXplKTsKK30KKworYm9vbCBUaWxlQnVmZmVyOjpp
c1JlbmRlcmVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNSZW5kZXJlZChyZWN0KCkpOworfQor
Citib29sIFRpbGVCdWZmZXI6OmlzUmVuZGVyZWQoY29uc3QgUGxhdGZvcm06OkludFJlY3RSZWdp
b24mIGNvbnRlbnRzKSBjb25zdAoreworICAgIHJldHVybiBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lv
bjo6c3VidHJhY3RSZWdpb25zKGNvbnRlbnRzLCBtX3JlbmRlcmVkUmVnaW9uKS5pc0VtcHR5KCk7
Cit9CisKK3ZvaWQgVGlsZUJ1ZmZlcjo6Y2xlYXJSZW5kZXJlZFJlZ2lvbihjb25zdCBQbGF0Zm9y
bTo6SW50UmVjdFJlZ2lvbiYgcmVnaW9uKQoreworICAgIG1fcmVuZGVyZWRSZWdpb24gPSBQbGF0
Zm9ybTo6SW50UmVjdFJlZ2lvbjo6c3VidHJhY3RSZWdpb25zKG1fcmVuZGVyZWRSZWdpb24sIHJl
Z2lvbik7Cit9CisKK3ZvaWQgVGlsZUJ1ZmZlcjo6Y2xlYXJSZW5kZXJlZFJlZ2lvbigpCit7Cisg
ICAgbV9yZW5kZXJlZFJlZ2lvbiA9IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uKCk7Cit9CisKK3Zv
aWQgVGlsZUJ1ZmZlcjo6YWRkUmVuZGVyZWRSZWdpb24oY29uc3QgUGxhdGZvcm06OkludFJlY3RS
ZWdpb24mIHJlZ2lvbikKK3sKKyAgICBtX3JlbmRlcmVkUmVnaW9uID0gUGxhdGZvcm06OkludFJl
Y3RSZWdpb246OnVuaW9uUmVnaW9ucyhyZWdpb24sIG1fcmVuZGVyZWRSZWdpb24pOworfQorCitQ
bGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiBUaWxlQnVmZmVyOjpyZW5kZXJlZFJlZ2lvbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyZWRSZWdpb247Cit9CisKK1BsYXRmb3JtOjpJbnRSZWN0
UmVnaW9uIFRpbGVCdWZmZXI6Om5vdFJlbmRlcmVkUmVnaW9uKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gUGxhdGZvcm06OkludFJlY3RSZWdpb246OnN1YnRyYWN0UmVnaW9ucyhyZWN0KCksIHJlbmRl
cmVkUmVnaW9uKCkpOworfQorCitQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogVGlsZUJ1ZmZl
cjo6bmF0aXZlQnVmZmVyKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYnVmZmVyKQorICAgICAgICBt
X2J1ZmZlciA9IGNyZWF0ZUJ1ZmZlcihtX3NpemUsIFBsYXRmb3JtOjpHcmFwaGljczo6VGlsZUJ1
ZmZlciwgU3VyZmFjZVBvb2w6Omdsb2JhbFN1cmZhY2VQb29sKCktPnNoYXJlZFBpeG1hcEdyb3Vw
KCkpOworCisgICAgcmV0dXJuIG1fYnVmZmVyOworfQorCisKK0JhY2tpbmdTdG9yZVRpbGU6OkJh
Y2tpbmdTdG9yZVRpbGUoY29uc3QgUGxhdGZvcm06OkludFNpemUmIHNpemUsIEJ1ZmZlcmluZ01v
ZGUgbW9kZSkKKyAgICA6IG1fYnVmZmVyaW5nTW9kZShtb2RlKQorICAgICwgbV9jb21taXR0ZWQo
ZmFsc2UpCisgICAgLCBtX2JhY2tncm91bmRQYWludGVkKGZhbHNlKQorICAgICwgbV9ob3Jpem9u
dGFsU2hpZnQoMCkKKyAgICAsIG1fdmVydGljYWxTaGlmdCgwKQoreworICAgIG1fZnJvbnRCdWZm
ZXIgPSBuZXcgVGlsZUJ1ZmZlcihzaXplKTsKK30KKworQmFja2luZ1N0b3JlVGlsZTo6fkJhY2tp
bmdTdG9yZVRpbGUoKQoreworICAgIGRlbGV0ZSBtX2Zyb250QnVmZmVyOworICAgIG1fZnJvbnRC
dWZmZXIgPSAwOworfQorCitQbGF0Zm9ybTo6SW50U2l6ZSBCYWNraW5nU3RvcmVUaWxlOjpzaXpl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZnJvbnRCdWZmZXIoKS0+c2l6ZSgpOworfQorCitQbGF0
Zm9ybTo6SW50UmVjdCBCYWNraW5nU3RvcmVUaWxlOjpyZWN0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZnJvbnRCdWZmZXIoKS0+cmVjdCgpOworfQorCitUaWxlQnVmZmVyKiBCYWNraW5nU3RvcmVU
aWxlOjpmcm9udEJ1ZmZlcigpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZnJvbnRCdWZmZXIpOwor
ICAgIHJldHVybiBtX2Zyb250QnVmZmVyOworfQorCitUaWxlQnVmZmVyKiBCYWNraW5nU3RvcmVU
aWxlOjpiYWNrQnVmZmVyKCkgY29uc3QKK3sKKyAgICBpZiAobV9idWZmZXJpbmdNb2RlID09IFNp
bmdsZUJ1ZmZlcmVkKQorICAgICAgICByZXR1cm4gZnJvbnRCdWZmZXIoKTsKKworICAgIHJldHVy
biBTdXJmYWNlUG9vbDo6Z2xvYmFsU3VyZmFjZVBvb2woKS0+YmFja0J1ZmZlcigpOworfQorCit2
b2lkIEJhY2tpbmdTdG9yZVRpbGU6OnN3YXBCdWZmZXJzKCkKK3sKKyAgICBpZiAobV9idWZmZXJp
bmdNb2RlID09IFNpbmdsZUJ1ZmZlcmVkKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBTdG9y
ZSB0ZW1wcy4KKyAgICB1bnNpZ25lZCBmcm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+
KGZyb250QnVmZmVyKCkpOworICAgIHVuc2lnbmVkIGJhY2sgPSByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkPihiYWNrQnVmZmVyKCkpOworCisgICAgLy8gQXRvbWljIGNoYW5nZS4KKyAgICBfc21w
X3hjaGcocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KCZtX2Zyb250QnVmZmVyKSwgYmFjayk7
CisgICAgX3NtcF94Y2hnKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPigmU3VyZmFjZVBvb2w6
Omdsb2JhbFN1cmZhY2VQb29sKCktPm1fYmFja0J1ZmZlciksIGZyb250KTsKK30KKwordm9pZCBC
YWNraW5nU3RvcmVUaWxlOjpyZXNldCgpCit7CisgICAgc2V0Q29tbWl0dGVkKGZhbHNlKTsKKyAg
ICBmcm9udEJ1ZmZlcigpLT5jbGVhclJlbmRlcmVkUmVnaW9uKCk7CisgICAgYmFja0J1ZmZlcigp
LT5jbGVhclJlbmRlcmVkUmVnaW9uKCk7CisgICAgY2xlYXJTaGlmdCgpOworfQorCit2b2lkIEJh
Y2tpbmdTdG9yZVRpbGU6OnBhaW50QmFja2dyb3VuZCgpCit7CisgICAgbV9iYWNrZ3JvdW5kUGFp
bnRlZCA9IHRydWU7CisKKyAgICBjbGVhckJ1ZmZlcihiYWNrQnVmZmVyKCktPm5hdGl2ZUJ1ZmZl
cigpLCAwLCAwLCAwLCAwKTsKK30KKworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlVGlsZS5oIGIvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlVGlsZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjdhMGE0MmY1ZDFmZDIzYjI1MThmMzVjNGQ1Mjk3M2Q4ZjY2YTgxOTAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVU
aWxlLmgKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAs
IDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBCYWNraW5nU3RvcmVUaWxlX2gKKyNk
ZWZpbmUgQmFja2luZ1N0b3JlVGlsZV9oCisKKyNpbmNsdWRlICJCbGFja0JlcnJ5UGxhdGZvcm1J
bnRSZWN0UmVnaW9uLmgiCisjaW5jbHVkZSAiQmxhY2tCZXJyeVBsYXRmb3JtUHJpbWl0aXZlcy5o
IgorCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgUGxhdGZvcm0geworbmFtZXNw
YWNlIEdyYXBoaWNzIHsKK3N0cnVjdCBCdWZmZXI7Cit9Cit9CisKK25hbWVzcGFjZSBXZWJLaXQg
eworY2xhc3MgVGlsZUJ1ZmZlciB7CisgICAgcHVibGljOgorICAgICAgICBUaWxlQnVmZmVyKGNv
bnN0IFBsYXRmb3JtOjpJbnRTaXplJik7CisgICAgICAgIH5UaWxlQnVmZmVyKCk7CisgICAgICAg
IFBsYXRmb3JtOjpJbnRTaXplIHNpemUoKSBjb25zdDsKKyAgICAgICAgUGxhdGZvcm06OkludFJl
Y3QgcmVjdCgpIGNvbnN0OworCisgICAgICAgIGJvb2wgaXNSZW5kZXJlZCgpIGNvbnN0OworICAg
ICAgICBib29sIGlzUmVuZGVyZWQoY29uc3QgUGxhdGZvcm06OkludFJlY3RSZWdpb24mIGNvbnRl
bnRzKSBjb25zdDsKKyAgICAgICAgdm9pZCBjbGVhclJlbmRlcmVkUmVnaW9uKCk7CisgICAgICAg
IHZvaWQgY2xlYXJSZW5kZXJlZFJlZ2lvbihjb25zdCBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiYp
OworICAgICAgICB2b2lkIGFkZFJlbmRlcmVkUmVnaW9uKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0
UmVnaW9uJik7CisgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uIHJlbmRlcmVkUmVnaW9u
KCkgY29uc3Q7CisgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uIG5vdFJlbmRlcmVkUmVn
aW9uKCkgY29uc3Q7CisKKyAgICAgICAgUGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIG5hdGl2
ZUJ1ZmZlcigpIGNvbnN0OworCisgICAgICAgIHZvaWQgc2V0QmxpdEdlbmVyYXRpb24oaW50IGcp
IGNvbnN0IHsgbV9ibGl0R2VuZXJhdGlvbiA9IGc7IH0KKyAgICAgICAgaW50IGJsaXRHZW5lcmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ibGl0R2VuZXJhdGlvbjsgfQorCisgICAgcHJpdmF0ZToK
KyAgICAgICAgUGxhdGZvcm06OkludFNpemUgbV9zaXplOworICAgICAgICBQbGF0Zm9ybTo6SW50
UmVjdFJlZ2lvbiBtX3JlbmRlcmVkUmVnaW9uOworICAgICAgICBtdXRhYmxlIFBsYXRmb3JtOjpH
cmFwaGljczo6QnVmZmVyKiBtX2J1ZmZlcjsKKyAgICAgICAgbXV0YWJsZSBpbnQgbV9ibGl0R2Vu
ZXJhdGlvbjsKK307CisKKworY2xhc3MgQmFja2luZ1N0b3JlVGlsZSB7CitwdWJsaWM6CisgICAg
ZW51bSBCdWZmZXJpbmdNb2RlIHsgU2luZ2xlQnVmZmVyZWQsIERvdWJsZUJ1ZmZlcmVkIH07CisK
KyAgICBzdGF0aWMgQmFja2luZ1N0b3JlVGlsZSogY3JlYXRlKGNvbnN0IFBsYXRmb3JtOjpJbnRT
aXplJiBzaXplLCBCdWZmZXJpbmdNb2RlIG1vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbmV3
IEJhY2tpbmdTdG9yZVRpbGUoc2l6ZSwgbW9kZSk7CisgICAgfQorCisgICAgfkJhY2tpbmdTdG9y
ZVRpbGUoKTsKKworICAgIFBsYXRmb3JtOjpJbnRTaXplIHNpemUoKSBjb25zdDsKKyAgICBQbGF0
Zm9ybTo6SW50UmVjdCByZWN0KCkgY29uc3Q7CisKKyAgICBUaWxlQnVmZmVyKiBmcm9udEJ1ZmZl
cigpIGNvbnN0OworICAgIFRpbGVCdWZmZXIqIGJhY2tCdWZmZXIoKSBjb25zdDsKKyAgICBib29s
IGlzRG91YmxlQnVmZmVyZWQoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlcmluZ01vZGUgPT0gRG91
YmxlQnVmZmVyZWQ7IH0KKworICAgIHZvaWQgcmVzZXQoKTsKKyAgICBib29sIGJhY2tncm91bmRQ
YWludGVkKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kUGFpbnRlZDsgfQorICAgIHZvaWQg
cGFpbnRCYWNrZ3JvdW5kKCk7CisKKyAgICBib29sIGlzQ29tbWl0dGVkKCkgY29uc3QgeyByZXR1
cm4gbV9jb21taXR0ZWQ7IH0KKyAgICB2b2lkIHNldENvbW1pdHRlZChib29sIGNvbW1pdHRlZCkg
eyBtX2NvbW1pdHRlZCA9IGNvbW1pdHRlZDsgfQorCisgICAgdm9pZCBjbGVhclNoaWZ0KCkgeyBt
X2hvcml6b250YWxTaGlmdCA9IDA7IG1fdmVydGljYWxTaGlmdCA9IDA7IH0KKyAgICBpbnQgaG9y
aXpvbnRhbFNoaWZ0KCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFsU2hpZnQ7IH0KKyAgICB2
b2lkIHNldEhvcml6b250YWxTaGlmdChpbnQgc2hpZnQpIHsgbV9ob3Jpem9udGFsU2hpZnQgPSBz
aGlmdDsgfQorICAgIGludCB2ZXJ0aWNhbFNoaWZ0KCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNh
bFNoaWZ0OyB9CisgICAgdm9pZCBzZXRWZXJ0aWNhbFNoaWZ0KGludCBzaGlmdCkgeyBtX3ZlcnRp
Y2FsU2hpZnQgPSBzaGlmdDsgfQorCisgICAgdm9pZCBzd2FwQnVmZmVycygpOworCitwcml2YXRl
OgorICAgIEJhY2tpbmdTdG9yZVRpbGUoY29uc3QgUGxhdGZvcm06OkludFNpemUmLCBCdWZmZXJp
bmdNb2RlKTsKKworICAgIG11dGFibGUgVGlsZUJ1ZmZlciogbV9mcm9udEJ1ZmZlcjsKKyAgICBC
dWZmZXJpbmdNb2RlIG1fYnVmZmVyaW5nTW9kZTsKKyAgICBib29sIG1fY2hlY2tlcmVkOworICAg
IGJvb2wgbV9jb21taXR0ZWQ7CisgICAgYm9vbCBtX2JhY2tncm91bmRQYWludGVkOworICAgIGlu
dCBtX2hvcml6b250YWxTaGlmdDsKKyAgICBpbnQgbV92ZXJ0aWNhbFNoaWZ0OworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Cit9IC8vIG5hbWVzcGFjZSBCbGFja0JlcnJ5CisKKyNlbmRpZiAv
LyBCYWNraW5nU3RvcmVUaWxlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126985</attachid>
            <date>2012-02-14 08:40:30 -0800</date>
            <delta_ts>2012-02-14 11:01:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78517-20120214114306.patch</filename>
            <type>text/plain</type>
            <size>35629</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3NzEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGM1NjczM2NhZDQxNjI3MzZi
MjFlZmYwNGM0YzJmZWZhMzZiNDU1ZWYuLjhhNDM1YjY2ZTgyNjJlNDNiNWM1ODNiZjJkOTkyZjQz
M2I0NTZjZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMDItMTQgIFJvYiBCdWlz
ICA8cmJ1aXNAcmltLmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gVXBzdHJlYW0gYmFja2lu
ZyBzdG9yZSByZWxhdGVkIGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc4NTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW5pdGlhbCB1cHN0cmVhbSwgbm8gbmV3IHRlc3RzLgorCisgICAgICAg
ICogYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9yZUNsaWVudC5jcHA6IEFkZGVk
LgorICAgICAgICAqIGJsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVDbGllbnQu
aDogQWRkZWQuCisgICAgICAgICogYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9y
ZUNvbXBvc2l0aW5nU3VyZmFjZS5jcHA6IEFkZGVkLgorICAgICAgICAqIGJsYWNrYmVycnkvV2Vi
S2l0U3VwcG9ydC9CYWNraW5nU3RvcmVDb21wb3NpdGluZ1N1cmZhY2UuaDogQWRkZWQuCisgICAg
ICAgICogYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9yZVRpbGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKiBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlVGlsZS5o
OiBBZGRlZC4KKwogMjAxMi0wMi0xMyAgTmltYSBHaGFuYXZhdGlhbiAgPG5naGFuYXZhdGlhbkBy
aW0uY29tPgogCiAgICAgICAgIEluaXRpYWwgdXBzdHJlYW1pbmcgb2Ygc2VsZWN0aW9uIGhhbmRs
aW5nIGNvZGUgZm9yIEJsYWNrQmVycnkgcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlQ2xpZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9yZUNsaWVudC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMmM4NzEwYWY2MDA0N2NlMDIyNTE3NGJhYjBkN2VkZWRjZDZhYzJlYwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tp
bmdTdG9yZUNsaWVudC5jcHAKQEAgLTAsMCArMSw0MTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkJhY2tpbmdTdG9yZUNsaWVudC5oIgorCisjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgi
CisjaW5jbHVkZSAiQmFja2luZ1N0b3JlX3AuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisj
aW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNs
dWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXpl
LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUg
IldlYlBhZ2VfcC5oIgorCisvLyBGSVhNRTogTGVhdmluZyB0aGUgYmVsb3cgbGluZXMgY29tbWVu
dGVkIG91dCBhcyBhIHJlZmVyZW5jZSBmb3IgdXMgdG8gc29vbiBiZSBzdXJlIGlmIHdlIG5lZWQg
dGhlc2UKKy8vIG1ldGhvZHMgYW5kIGNsYXNzIHZhcmlhYmxlcyBiZSBtb3ZlZCBmcm9tIFdlYlBh
Z2UgdG8gQmFja2luZ1N0b3JlQ2xpZW50LgorLy8gTm90aWZpY2F0aW9uIG1ldGhvZHMgdGhhdCBk
ZWxpdmVyIGNoYW5nZXMgdG8gdGhlIHJlYWwgZ2VvbWV0cnkgb2YgdGhlIGRldmljZSBhcyBzcGVj
aWZpZWQgYWJvdmUuCisvLyB2b2lkIG5vdGlmeVRyYW5zZm9ybUNoYW5nZWQoKTsKKy8vIHZvaWQg
bm90aWZ5VHJhbnNmb3JtZWRDb250ZW50c1NpemVDaGFuZ2VkKCk7CisvLyB2b2lkIG5vdGlmeVRy
YW5zZm9ybWVkU2Nyb2xsQ2hhbmdlZCgpOworLy8gbV9vdmVyZmxvd0V4Y2VlZHNDb250ZW50c1Np
emUgPSB0cnVlOworLy8gaGFzcGVuZGluZ3Njcm9sbGV2ZW50CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKwor
c3RhdGljIGlubGluZSBJbnRTaXplIHBvaW50VG9TaXplKGNvbnN0IEludFBvaW50JiBwb2ludCkK
K3sKKyAgICByZXR1cm4gSW50U2l6ZShwb2ludC54KCksIHBvaW50LnkoKSk7Cit9CisKK0JhY2tp
bmdTdG9yZUNsaWVudCogQmFja2luZ1N0b3JlQ2xpZW50OjpjcmVhdGUoRnJhbWUqIGZyYW1lLCBG
cmFtZSogcGFyZW50RnJhbWUsIFdlYlBhZ2UqIHBhcmVudFBhZ2UpCit7CisgICAgQVNTRVJUKHBh
cmVudFBhZ2UpOworICAgIEFTU0VSVChmcmFtZS0+dmlldygpKTsKKworICAgIC8vIEZJWE1FOiBX
ZSBkbyBub3Qgc3VwcG9ydCBpbm5lciBmcmFtZXMgZm9yIG5vdy4KKyAgICBpZiAocGFyZW50RnJh
bWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgQmFja2luZ1N0b3JlQ2xpZW50KiBwYXJlbnRC
YWNraW5nU3RvcmVDbGllbnQKKyAgICAgICAgPSBwYXJlbnRGcmFtZQorICAgICAgICA/IHBhcmVu
dFBhZ2UtPmQtPmJhY2tpbmdTdG9yZUNsaWVudEZvckZyYW1lKHBhcmVudEZyYW1lKQorICAgICAg
ICA6IDA7CisKKyAgICAvLyBJZiB0aGlzIGZyYW1lIGhhcyBhIHBhcmVudCB3aXRoIG5vIGJhY2tp
bmdzdG9yZSB0aGVuIGp1c3Qgc3RvcCBzaW5jZQorICAgIC8vIG91ciBmcmFtZSBoZWlyYXJjaHkg
aXMgZG9uZS4KKyAgICBpZiAocGFyZW50RnJhbWUgJiYgIXBhcmVudEJhY2tpbmdTdG9yZUNsaWVu
dCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBCYWNraW5nU3RvcmVDbGllbnQqIGl0ID0gbmV3
IEJhY2tpbmdTdG9yZUNsaWVudChmcmFtZSwgcGFyZW50RnJhbWUsIHBhcmVudFBhZ2UpOworICAg
IEFTU0VSVChpdCk7CisKKyAgICAvLyBGcmFtZSAtPiBCYWNraW5nU3RvcmVDbGllbnQgbWFwcGlu
ZyBpcyBjb250cm9sbGVkIGJ5IHRoZSBQYWdlLgorICAgIHBhcmVudFBhZ2UtPmQtPmFkZEJhY2tp
bmdTdG9yZUNsaWVudEZvckZyYW1lKGZyYW1lLCBpdCk7CisKKyAgICAvLyBBZGQgdGhlIGJhY2tp
bmcgc3RvcmUgY2xpZW50IHRvIHRoZSBjaGlsZCBsaXN0IG9mIGl0cyBwYXJlbnQuCisgICAgaWYg
KHBhcmVudEJhY2tpbmdTdG9yZUNsaWVudCkKKyAgICAgICAgcGFyZW50QmFja2luZ1N0b3JlQ2xp
ZW50LT5hZGRDaGlsZChpdCk7CisKKyAgICByZXR1cm4gaXQ7Cit9CisKK0JhY2tpbmdTdG9yZUNs
aWVudDo6QmFja2luZ1N0b3JlQ2xpZW50KEZyYW1lKiBmcmFtZSwgRnJhbWUqIHBhcmVudEZyYW1l
LCBXZWJQYWdlKiBwYXJlbnRQYWdlKQorICAgIDogbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fd2Vi
UGFnZShwYXJlbnRQYWdlKQorICAgICwgbV9iYWNraW5nU3RvcmUoMCkKKyAgICAsIG1fcGFyZW50
KDApCisgICAgLCBtX2lzQ2xpZW50R2VuZXJhdGVkU2Nyb2xsKGZhbHNlKQorICAgICwgbV9pc1Nj
cm9sbE5vdGlmaWNhdGlvblN1cHByZXNzZWQoZmFsc2UpCit7CisgICAgVU5VU0VEX1BBUkFNKHBh
cmVudEZyYW1lKTsKKyAgICBtX2JhY2tpbmdTdG9yZSA9IG5ldyBCYWNraW5nU3RvcmUobV93ZWJQ
YWdlLCB0aGlzKTsKK30KKworQmFja2luZ1N0b3JlQ2xpZW50Ojp+QmFja2luZ1N0b3JlQ2xpZW50
KCkKK3sKKyAgICBtX3dlYlBhZ2UtPmQtPnJlbW92ZUJhY2tpbmdTdG9yZUNsaWVudEZvckZyYW1l
KG1fZnJhbWUpOworCisgICAgZGVsZXRlIG1fYmFja2luZ1N0b3JlOworICAgIG1fYmFja2luZ1N0
b3JlID0gMDsKKyAgICBtX2ZyYW1lID0gMDsKK30KKwordm9pZCBCYWNraW5nU3RvcmVDbGllbnQ6
OmFkZENoaWxkKEJhY2tpbmdTdG9yZUNsaWVudCogY2hpbGQpCit7CisgICAgQVNTRVJUKGNoaWxk
KTsKKyAgICBjaGlsZC0+bV9wYXJlbnQgPSB0aGlzOworfQorCitXVEY6OlZlY3RvciA8QmFja2lu
Z1N0b3JlQ2xpZW50Kj4gQmFja2luZ1N0b3JlQ2xpZW50OjpjaGlsZHJlbigpIGNvbnN0Cit7Cisg
ICAgV1RGOjpWZWN0b3I8QmFja2luZ1N0b3JlQ2xpZW50Kj4gY2hpbGRyZW47CisgICAgZm9yIChG
cmFtZSogY2hpbGQgPSBtX2ZyYW1lLT50cmVlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPnRyZWUoKS0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBCbGFja0JlcnJ5OjpX
ZWJLaXQ6OkJhY2tpbmdTdG9yZUNsaWVudCogY2xpZW50ID0KKyAgICAgICAgICAgIG1fd2ViUGFn
ZS0+ZC0+YmFja2luZ1N0b3JlQ2xpZW50Rm9yRnJhbWUoY2hpbGQpOworCisgICAgICAgIGlmIChj
bGllbnQpCisgICAgICAgICAgICBjaGlsZHJlbi5hcHBlbmQoY2xpZW50KTsKKyAgICB9CisKKyAg
ICByZXR1cm4gY2hpbGRyZW47Cit9CisKK0ludFJlY3QgQmFja2luZ1N0b3JlQ2xpZW50OjphYnNv
bHV0ZVJlY3QoKSBjb25zdAoreworICAgIEludFJlY3QgcmVjdCA9IEludFJlY3QoSW50UG9pbnQ6
Onplcm8oKSwgdmlld3BvcnRTaXplKCkpOworCisgICAgaWYgKCFpc01haW5GcmFtZSgpKSB7Cisg
ICAgICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIG93bmVyIEhUTUwgZWxlbWVudCBoYXMg
YmVlbiByZW1vdmVkIGF0IHRoaXMgcG9pbnQsCisgICAgICAgIC8vIGVzcGVjaWFsbHkgd2hlbiB0
aGUgZnJhbWUgaXMgbG9hZGluZyBhIEphdmFTY3JpcHQgVVJMLgorICAgICAgICBpZiAoRWxlbWVu
dCogZWx0ID0gbV9mcmFtZS0+b3duZXJFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChSZW5k
ZXJCb3gqIG9iaiA9IGVsdC0+cmVuZGVyQm94KCkpCisgICAgICAgICAgICAgICAgcmVjdC5tb3Zl
KG9iai0+Ym9yZGVyTGVmdCgpICsgb2JqLT5wYWRkaW5nTGVmdCgpLCBvYmotPmJvcmRlclRvcCgp
ICsgb2JqLT5wYWRkaW5nVG9wKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgRnJhbWUqIGZy
YW1lID0gbV9mcmFtZTsKKyAgICB3aGlsZSAoZnJhbWUpIHsKKyAgICAgICAgaWYgKEVsZW1lbnQq
IGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZnJhbWUtPm93bmVyRWxlbWVudCgpKSkg
eworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIHJlY3QubW92ZShlbGVtZW50LT5v
ZmZzZXRMZWZ0KCksIGVsZW1lbnQtPm9mZnNldFRvcCgpKTsKKyAgICAgICAgICAgIH0gd2hpbGUg
KChlbGVtZW50ID0gZWxlbWVudC0+b2Zmc2V0UGFyZW50KCkpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICgoZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkpCisgICAgICAgICAgICBy
ZWN0Lm1vdmUoKC1mcmFtZS0+dmlldygpLT5zY3JvbGxPZmZzZXQoKSkpOworICAgIH0KKworICAg
IHJldHVybiByZWN0OworfQorCitJbnRSZWN0IEJhY2tpbmdTdG9yZUNsaWVudDo6dHJhbnNmb3Jt
ZWRBYnNvbHV0ZVJlY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2UtPmQtPm1hcFRv
VHJhbnNmb3JtZWQoYWJzb2x1dGVSZWN0KCkpOworfQorCitJbnRQb2ludCBCYWNraW5nU3RvcmVD
bGllbnQ6OmFic29sdXRlTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBhYnNvbHV0ZVJl
Y3QoKS5sb2NhdGlvbigpOworfQorCitJbnRQb2ludCBCYWNraW5nU3RvcmVDbGllbnQ6OnRyYW5z
Zm9ybWVkQWJzb2x1dGVMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGFnZS0+
ZC0+bWFwVG9UcmFuc2Zvcm1lZCh0cmFuc2Zvcm1lZEFic29sdXRlUmVjdCgpKS5sb2NhdGlvbigp
OworfQorCitJbnRQb2ludCBCYWNraW5nU3RvcmVDbGllbnQ6OnNjcm9sbFBvc2l0aW9uKCkgY29u
c3QKK3sKKyAgICBBU1NFUlQobV9mcmFtZSk7CisgICAgcmV0dXJuIG1fZnJhbWUtPnZpZXcoKS0+
c2Nyb2xsUG9zaXRpb24oKSAtIHBvaW50VG9TaXplKG1fZnJhbWUtPnZpZXcoKS0+bWluaW11bVNj
cm9sbFBvc2l0aW9uKCkpOworfQorCitJbnRQb2ludCBCYWNraW5nU3RvcmVDbGllbnQ6OnRyYW5z
Zm9ybWVkU2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2UtPmQt
Pm1hcFRvVHJhbnNmb3JtZWQoc2Nyb2xsUG9zaXRpb24oKSk7Cit9CisKK3ZvaWQgQmFja2luZ1N0
b3JlQ2xpZW50OjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgcG9zKQoreworICAg
IEFTU0VSVChtX2ZyYW1lLT52aWV3KCkpOworICAgIGlmIChwb3MgPT0gc2Nyb2xsUG9zaXRpb24o
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2Ugc2V0IGEgZmxhZyBoZXJlIHRvIG5vdGUg
dGhhdCB0aGlzIHNjcm9sbCBvcGVyYXRpb24gd2FzIG9yaWdpbmF0ZWQKKyAgICAvLyB3aXRoaW4g
dGhlIEJsYWNrQmVycnktc3BlY2lmaWMgbGF5ZXIgb2YgV2ViS2l0IGFuZCBub3QgYnkgV2ViQ29y
ZS4KKyAgICAvLyBUaGlzIGZsYWcgaXMgY2hlY2tlZCBpbiBjaGVja09yaWdpbk9mQ3VycmVudFNj
cm9sbE9wZXJhdGlvbigpIHRvIGRlY2lkZQorICAgIC8vIHdoZXRoZXIgdG8gbm90aWZ5IHRoZSBj
bGllbnQgb2YgdGhlIGN1cnJlbnQgc2Nyb2xsIG9wZXJhdGlvbi4gVGhpcyBpcworICAgIC8vIHdo
eSBpdCBpcyBpbXBvcnRhbnQgdGhhdCBhbGwgc2Nyb2xsIG9wZXJhdGlvbnMgdGhhdCBvcmlnaW5h
dGUgd2l0aGluCisgICAgLy8gQmxhY2tCZXJyeS1zcGVjaWZpYyBjb2RlIGFyZSBlbmNhcHN1bGF0
ZWQgaGVyZSBhbmQgdGhhdCBjYWxsZXJzIG9mIHRoaXMKKyAgICAvLyBtZXRob2QgYWxzbyBkaXJl
Y3RseSBvciBpbmRpcmVjdGx5IGNhbGwgbm90aWZ5VHJhbnNmb3JtZWRTY3JvbGxDaGFuZ2VkKCku
CisgICAgbV9pc1Njcm9sbE5vdGlmaWNhdGlvblN1cHByZXNzZWQgPSB0cnVlOworICAgIG1fZnJh
bWUtPnZpZXcoKS0+c2V0U2Nyb2xsUG9zaXRpb24ocG9zICsgcG9pbnRUb1NpemUobV9mcmFtZS0+
dmlldygpLT5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKSkpOworICAgIG1faXNTY3JvbGxOb3RpZmlj
YXRpb25TdXBwcmVzc2VkID0gZmFsc2U7Cit9CisKK0ludFBvaW50IEJhY2tpbmdTdG9yZUNsaWVu
dDo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9mcmFtZS0+
dmlldygpKTsKKyAgICByZXR1cm4gbV9mcmFtZS0+dmlldygpLT5tYXhpbXVtU2Nyb2xsUG9zaXRp
b24oKSAtIHBvaW50VG9TaXplKG1fZnJhbWUtPnZpZXcoKS0+bWluaW11bVNjcm9sbFBvc2l0aW9u
KCkpOworfQorCitJbnRQb2ludCBCYWNraW5nU3RvcmVDbGllbnQ6OnRyYW5zZm9ybWVkTWF4aW11
bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5kLT5tYXBU
b1RyYW5zZm9ybWVkKG1heGltdW1TY3JvbGxQb3NpdGlvbigpKTsKK30KKworSW50U2l6ZSBCYWNr
aW5nU3RvcmVDbGllbnQ6OmFjdHVhbFZpc2libGVTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV93ZWJQYWdlLT5kLT5tYXBGcm9tVHJhbnNmb3JtZWQodHJhbnNmb3JtZWRBY3R1YWxWaXNpYmxl
U2l6ZSgpKTsKK30KKworSW50U2l6ZSBCYWNraW5nU3RvcmVDbGllbnQ6OnRyYW5zZm9ybWVkQWN0
dWFsVmlzaWJsZVNpemUoKSBjb25zdAoreworICAgIGlmIChpc01haW5GcmFtZSgpKQorICAgICAg
ICByZXR1cm4gbV93ZWJQYWdlLT5kLT50cmFuc2Zvcm1lZEFjdHVhbFZpc2libGVTaXplKCk7CisK
KyAgICByZXR1cm4gdHJhbnNmb3JtZWRWaWV3cG9ydFNpemUoKTsKK30KKworSW50U2l6ZSBCYWNr
aW5nU3RvcmVDbGllbnQ6OnZpZXdwb3J0U2l6ZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZnJh
bWUtPnZpZXcoKSk7CisgICAgaWYgKGlzTWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybiBtX3dl
YlBhZ2UtPmQtPnZpZXdwb3J0U2l6ZSgpOworCisgICAgcmV0dXJuIG1fZnJhbWUtPnZpZXcoKS0+
dmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgpOworfQorCitJbnRTaXplIEJhY2tpbmdTdG9yZUNs
aWVudDo6dHJhbnNmb3JtZWRWaWV3cG9ydFNpemUoKSBjb25zdAoreworICAgIGlmIChpc01haW5G
cmFtZSgpKQorICAgICAgICByZXR1cm4gbV93ZWJQYWdlLT5kLT50cmFuc2Zvcm1lZFZpZXdwb3J0
U2l6ZSgpOworCisgICAgQVNTRVJUKG1fZnJhbWUtPnZpZXcoKSk7CisgICAgY29uc3QgSW50U2l6
ZSB1bnRyYW5zZm9ybWVkVmlld3BvcnRTaXplID0gbV9mcmFtZS0+dmlldygpLT52aXNpYmxlQ29u
dGVudFJlY3QoKS5zaXplKCk7CisgICAgY29uc3QgRmxvYXRQb2ludCB0cmFuc2Zvcm1lZEJvdHRv
bVJpZ2h0ID0gbV93ZWJQYWdlLT5kLT5tX3RyYW5zZm9ybWF0aW9uTWF0cml4LT5tYXBQb2ludCgK
KyAgICAgICAgRmxvYXRQb2ludCh1bnRyYW5zZm9ybWVkVmlld3BvcnRTaXplLndpZHRoKCksIHVu
dHJhbnNmb3JtZWRWaWV3cG9ydFNpemUuaGVpZ2h0KCkpKTsKKyAgICByZXR1cm4gSW50U2l6ZShm
bG9vcmYodHJhbnNmb3JtZWRCb3R0b21SaWdodC54KCkpLCBmbG9vcmYodHJhbnNmb3JtZWRCb3R0
b21SaWdodC55KCkpKTsKK30KKworSW50UmVjdCBCYWNraW5nU3RvcmVDbGllbnQ6OnZpc2libGVD
b250ZW50c1JlY3QoKSBjb25zdAoreworICAgIEFTU0VSVChtX2ZyYW1lLT52aWV3KCkpOworICAg
IEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9mcmFtZS0+dmlldygpLT52aXNpYmxlQ29u
dGVudFJlY3QoKTsKKyAgICBpZiAoaXNNYWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIHZpc2li
bGVDb250ZW50UmVjdDsKKworICAgIEludFBvaW50IG9mZnNldCA9IGFic29sdXRlTG9jYXRpb24o
KTsKKyAgICB2aXNpYmxlQ29udGVudFJlY3QubW92ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsK
KyAgICBpZiAobV9wYXJlbnQpCisgICAgICAgIHZpc2libGVDb250ZW50UmVjdC5pbnRlcnNlY3Qo
bV9wYXJlbnQtPnZpc2libGVDb250ZW50c1JlY3QoKSk7CisKKyAgICByZXR1cm4gdmlzaWJsZUNv
bnRlbnRSZWN0OworfQorCitJbnRSZWN0IEJhY2tpbmdTdG9yZUNsaWVudDo6dHJhbnNmb3JtZWRW
aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKK3sKKyAgICAvLyBVc3VhbGx5IHRoaXMgd291bGQg
YmUgbWFwVG9UcmFuc2Zvcm1lZCh2aXNpYmxlQ29udGVudHNSZWN0KCkpLCBidXQKKyAgICAvLyB0
aGF0IHJlc3VsdHMgaW4gcm91bmRpbmcgZXJyb3JzIGJlY2F1c2Ugd2UgYWxyZWFkeSBzZXQgdGhl
IFdlYkNvcmUKKyAgICAvLyB2aWV3cG9ydCBzaXplIGZyb20gb3VyIG9yaWdpbmFsIHRyYW5zZm9y
bWVkVmlld3BvcnRTaXplKCkuCisgICAgLy8gSW5zdGVhZCwgd2Ugb25seSB0cmFuc2Zvcm0gdGhl
IHNjcm9sbCBwb3NpdGlvbiBhbmQgdGFrZSB0aGUKKyAgICAvLyB2aWV3cG9ydCBzaXplIGFzIGl0
IGlzLCB3aGljaCBlbnN1cmVzIHRoYXQgZS5nLiBibGl0dGluZyBvcGVyYXRpb25zCisgICAgLy8g
YWx3YXlzIGNvdmVyIHRoZSB3aG9sZSB3aWRnZXQvc2NyZWVuLgorICAgIEludFJlY3QgdmlzaWJs
ZUNvbnRlbnRzUmVjdCA9IEludFJlY3QodHJhbnNmb3JtZWRTY3JvbGxQb3NpdGlvbigpLCB0cmFu
c2Zvcm1lZFZpZXdwb3J0U2l6ZSgpKTsKKyAgICBpZiAoaXNNYWluRnJhbWUoKSkKKyAgICAgICAg
cmV0dXJuIHZpc2libGVDb250ZW50c1JlY3Q7CisKKyAgICBJbnRQb2ludCBvZmZzZXQgPSB0cmFu
c2Zvcm1lZEFic29sdXRlTG9jYXRpb24oKTsKKyAgICB2aXNpYmxlQ29udGVudHNSZWN0Lm1vdmUo
b2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7CisgICAgcmV0dXJuIHZpc2libGVDb250ZW50c1JlY3Q7
Cit9CisKK0ludFNpemUgQmFja2luZ1N0b3JlQ2xpZW50Ojpjb250ZW50c1NpemUoKSBjb25zdAor
eworICAgIEFTU0VSVChtX2ZyYW1lLT52aWV3KCkpOworICAgIHJldHVybiBtX2ZyYW1lLT52aWV3
KCktPmNvbnRlbnRzU2l6ZSgpOworfQorCitJbnRTaXplIEJhY2tpbmdTdG9yZUNsaWVudDo6dHJh
bnNmb3JtZWRDb250ZW50c1NpemUoKSBjb25zdAoreworICAgIC8vIG1hcFRvVHJhbnNmb3JtZWQo
KSBmdW5jdGlvbnMgdXNlIHRoaXMgbWV0aG9kIHRvIGNyb3AgdGhlaXIgcmVzdWx0cywKKyAgICAv
LyBzbyB3ZSBjYW4ndCBtYWtlIHVzZSBvZiB0aGVtIGhlcmUuIFdoaWxlIHdlIHdhbnQgcm91bmRp
bmcgaW5zaWRlIHBhZ2UKKyAgICAvLyBib3VuZGFyaWVzIHRvIGV4dGVuZCByZWN0YW5nbGVzIGFu
ZCByb3VuZCBwb2ludHMsIHdlIG5lZWQgdG8gY3JvcCB0aGUKKyAgICAvLyBjb250ZW50cyBzaXpl
IHRvIHRoZSBmbG9vcmVkIHZhbHVlcyBzbyB0aGF0IHdlIGRvbid0IHRyeSB0byBkaXNwbGF5Cisg
ICAgLy8gb3IgcmVwb3J0IHBvaW50cyB0aGF0IGFyZSBub3QgZnVsbHkgY292ZXJlZCBieSB0aGUg
YWN0dWFsIGZsb2F0LXBvaW50CisgICAgLy8gY29udGVudHMgcmVjdGFuZ2xlLgorICAgIGNvbnN0
IEludFNpemUgdW50cmFuc2Zvcm1lZENvbnRlbnRzU2l6ZSA9IGNvbnRlbnRzU2l6ZSgpOworICAg
IGNvbnN0IEZsb2F0UG9pbnQgdHJhbnNmb3JtZWRCb3R0b21SaWdodCA9IG1fd2ViUGFnZS0+ZC0+
bV90cmFuc2Zvcm1hdGlvbk1hdHJpeC0+bWFwUG9pbnQoCisgICAgICAgIEZsb2F0UG9pbnQodW50
cmFuc2Zvcm1lZENvbnRlbnRzU2l6ZS53aWR0aCgpLCB1bnRyYW5zZm9ybWVkQ29udGVudHNTaXpl
LmhlaWdodCgpKSk7CisgICAgcmV0dXJuIEludFNpemUoZmxvb3JmKHRyYW5zZm9ybWVkQm90dG9t
UmlnaHQueCgpKSwgZmxvb3JmKHRyYW5zZm9ybWVkQm90dG9tUmlnaHQueSgpKSk7Cit9CisKK3Zv
aWQgQmFja2luZ1N0b3JlQ2xpZW50OjpjbGlwVG9UcmFuc2Zvcm1lZENvbnRlbnRzUmVjdChJbnRS
ZWN0JiByZWN0KSBjb25zdAoreworICAgIC8vIEZJWE1FOiBOZWVkcyB0byBwcm9wZXIgdHJhbnNs
YXRlIGNvb3JkaW5hdGVzIGhlcmU/CisgICAgcmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCB0cmFuc2Zvcm1lZENvbnRlbnRzU2l6ZSgpKSk7Cit9CisKK0ludFBvaW50IEJh
Y2tpbmdTdG9yZUNsaWVudDo6bWFwRnJvbUNvbnRlbnRzVG9WaWV3cG9ydChjb25zdCBJbnRQb2lu
dCYgcG9pbnQpIGNvbnN0Cit7CisgICAgY29uc3QgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSB0
aGlzLT5zY3JvbGxQb3NpdGlvbigpOworICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCkgLSBz
Y3JvbGxQb3NpdGlvbi54KCksIHBvaW50LnkoKSAtIHNjcm9sbFBvc2l0aW9uLnkoKSk7Cit9CisK
K0ludFBvaW50IEJhY2tpbmdTdG9yZUNsaWVudDo6bWFwRnJvbVZpZXdwb3J0VG9Db250ZW50cyhj
b25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgY29uc3QgSW50UG9pbnQgc2Nyb2xs
UG9zaXRpb24gPSB0aGlzLT5zY3JvbGxQb3NpdGlvbigpOworICAgIHJldHVybiBJbnRQb2ludChw
b2ludC54KCkgKyBzY3JvbGxQb3NpdGlvbi54KCksIHBvaW50LnkoKSArIHNjcm9sbFBvc2l0aW9u
LnkoKSk7Cit9CisKK0ludFJlY3QgQmFja2luZ1N0b3JlQ2xpZW50OjptYXBGcm9tQ29udGVudHNU
b1ZpZXdwb3J0KGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFJl
Y3QobWFwRnJvbUNvbnRlbnRzVG9WaWV3cG9ydChyZWN0LmxvY2F0aW9uKCkpLCByZWN0LnNpemUo
KSk7Cit9CisKK0ludFJlY3QgQmFja2luZ1N0b3JlQ2xpZW50OjptYXBGcm9tVmlld3BvcnRUb0Nv
bnRlbnRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFJlY3Qo
bWFwRnJvbVZpZXdwb3J0VG9Db250ZW50cyhyZWN0LmxvY2F0aW9uKCkpLCByZWN0LnNpemUoKSk7
Cit9CisKK0ludFBvaW50IEJhY2tpbmdTdG9yZUNsaWVudDo6bWFwRnJvbVRyYW5zZm9ybWVkQ29u
dGVudHNUb1RyYW5zZm9ybWVkVmlld3BvcnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAor
eworICAgIGNvbnN0IEludFBvaW50IHNjcm9sbFBvc2l0aW9uID0gdHJhbnNmb3JtZWRTY3JvbGxQ
b3NpdGlvbigpOworICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCkgLSBzY3JvbGxQb3NpdGlv
bi54KCksIHBvaW50LnkoKSAtIHNjcm9sbFBvc2l0aW9uLnkoKSk7Cit9CisKK0ludFBvaW50IEJh
Y2tpbmdTdG9yZUNsaWVudDo6bWFwRnJvbVRyYW5zZm9ybWVkVmlld3BvcnRUb1RyYW5zZm9ybWVk
Q29udGVudHMoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIGNvbnN0IEludFBv
aW50IHNjcm9sbFBvc2l0aW9uID0gdHJhbnNmb3JtZWRTY3JvbGxQb3NpdGlvbigpOworICAgIHJl
dHVybiBJbnRQb2ludChwb2ludC54KCkgKyBzY3JvbGxQb3NpdGlvbi54KCksIHBvaW50LnkoKSAr
IHNjcm9sbFBvc2l0aW9uLnkoKSk7Cit9CisKK0ludFJlY3QgQmFja2luZ1N0b3JlQ2xpZW50Ojpt
YXBGcm9tVHJhbnNmb3JtZWRDb250ZW50c1RvVHJhbnNmb3JtZWRWaWV3cG9ydChjb25zdCBJbnRS
ZWN0JiByZWN0KSBjb25zdAoreworICAgIHJldHVybiBJbnRSZWN0KG1hcEZyb21UcmFuc2Zvcm1l
ZENvbnRlbnRzVG9UcmFuc2Zvcm1lZFZpZXdwb3J0KHJlY3QubG9jYXRpb24oKSksIHJlY3Quc2l6
ZSgpKTsKK30KKworSW50UmVjdCBCYWNraW5nU3RvcmVDbGllbnQ6Om1hcEZyb21UcmFuc2Zvcm1l
ZFZpZXdwb3J0VG9UcmFuc2Zvcm1lZENvbnRlbnRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0
Cit7CisgICAgcmV0dXJuIEludFJlY3QobWFwRnJvbVRyYW5zZm9ybWVkVmlld3BvcnRUb1RyYW5z
Zm9ybWVkQ29udGVudHMocmVjdC5sb2NhdGlvbigpKSwgcmVjdC5zaXplKCkpOworfQorCitXZWJQ
YWdlUHJpdmF0ZTo6TG9hZFN0YXRlIEJhY2tpbmdTdG9yZUNsaWVudDo6bG9hZFN0YXRlKCkgY29u
c3QKK3sKKyAgICAvLyBGSVhNRTogRG9lcyBpdCBuZWVkIHRvIGNhbGwgV2ViUGFnZSdzPworICAg
IHJldHVybiBtX3dlYlBhZ2UtPmQtPmxvYWRTdGF0ZSgpOworfQorCitib29sIEJhY2tpbmdTdG9y
ZUNsaWVudDo6aXNMb2FkaW5nKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogRG9lcyBpdCBuZWVk
IHRvIGNhbGwgV2ViUGFnZSdzPworICAgIHJldHVybiBtX3dlYlBhZ2UtPmQtPmlzTG9hZGluZygp
OworfQorCitib29sIEJhY2tpbmdTdG9yZUNsaWVudDo6aXNGb2N1c2VkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9mcmFtZQorICAgICAgICAmJiBtX2ZyYW1lLT5wYWdlKCkKKyAgICAgICAgJiYg
bV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKQorICAgICAgICAmJiBtX2ZyYW1lLT5w
YWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkRnJhbWUoKSA9PSBtX2ZyYW1lOworfQor
Citib29sIEJhY2tpbmdTdG9yZUNsaWVudDo6c2Nyb2xsc0hvcml6b250YWxseSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHRyYW5zZm9ybWVkQWN0dWFsVmlzaWJsZVNpemUoKS53aWR0aCgpIDwgdHJh
bnNmb3JtZWRDb250ZW50c1NpemUoKS53aWR0aCgpOworfQorCitib29sIEJhY2tpbmdTdG9yZUNs
aWVudDo6c2Nyb2xsc1ZlcnRpY2FsbHkoKSBjb25zdAoreworICAgIHJldHVybiB0cmFuc2Zvcm1l
ZEFjdHVhbFZpc2libGVTaXplKCkuaGVpZ2h0KCkgPCB0cmFuc2Zvcm1lZENvbnRlbnRzU2l6ZSgp
LmhlaWdodCgpOworfQorCitib29sIEJhY2tpbmdTdG9yZUNsaWVudDo6aXNDbGllbnRHZW5lcmF0
ZWRTY3JvbGwoKSBjb25zdAoreworICAgIHJldHVybiBtX2lzQ2xpZW50R2VuZXJhdGVkU2Nyb2xs
OworfQorCit2b2lkIEJhY2tpbmdTdG9yZUNsaWVudDo6c2V0SXNDbGllbnRHZW5lcmF0ZWRTY3Jv
bGwoYm9vbCBmbGFnKQoreworICAgIG1faXNDbGllbnRHZW5lcmF0ZWRTY3JvbGwgPSBmbGFnOwor
fQorCitib29sIEJhY2tpbmdTdG9yZUNsaWVudDo6aXNTY3JvbGxOb3RpZmljYXRpb25TdXBwcmVz
c2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pc1Njcm9sbE5vdGlmaWNhdGlvblN1cHByZXNz
ZWQ7Cit9CisKK3ZvaWQgQmFja2luZ1N0b3JlQ2xpZW50OjpzZXRJc1Njcm9sbE5vdGlmaWNhdGlv
blN1cHByZXNzZWQoYm9vbCBmbGFnKQoreworICAgIG1faXNTY3JvbGxOb3RpZmljYXRpb25TdXBw
cmVzc2VkID0gZmxhZzsKK30KKwordm9pZCBCYWNraW5nU3RvcmVDbGllbnQ6OmNoZWNrT3JpZ2lu
T2ZDdXJyZW50U2Nyb2xsT3BlcmF0aW9uKCkKK3sKKyAgICAvLyBUaGlzIGlzIGNhbGxlZCB2aWEg
Q2hyb21lQ2xpZW50QmxhY2tCZXJyeTo6c2Nyb2xsIGluIG9yZGVyIHRvIGNoZWNrIHRoZSBvcmln
aW4KKyAgICAvLyBvZiB0aGUgY3VycmVudCBzY3JvbGwgb3BlcmF0aW9uIHRvIGRlY2lkZSB3aGV0
aGVyIHRvIG5vdGlmeSB0aGUgY2xpZW50LgorICAgIC8vIElmIHRoZSBjdXJyZW50IHNjcm9sbCBv
cGVyYXRpb24gd2FzIGluaXRpYXRlZCBpbnRlcm5hbGx5IGJ5IFdlYkNvcmUgaXRzZWxmCisgICAg
Ly8gZWl0aGVyIHZpYSBKYXZhU2NyaXB0LCBiYWNrL2ZvcndhcmQgb3Igb3RoZXJ3aXNlIHRoZW4g
d2UgbmVlZCB0byBnbyBhaGVhZAorICAgIC8vIGFuZCBub3RpZnkgdGhlIGNsaWVudCBvZiB0aGlz
IGNoYW5nZS4KKyAgICBpZiAoaXNTY3JvbGxOb3RpZmljYXRpb25TdXBwcmVzc2VkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChpc01haW5GcmFtZSgpKQorICAgICAgICBtX3dlYlBhZ2Ut
PmQtPm5vdGlmeVRyYW5zZm9ybWVkU2Nyb2xsQ2hhbmdlZCgpOworICAgIGVsc2UKKyAgICAgICAg
bV9iYWNraW5nU3RvcmUtPmQtPnNjcm9sbENoYW5nZWQodHJhbnNmb3JtZWRTY3JvbGxQb3NpdGlv
bigpKTsKK30KKworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YktpdFN1cHBvcnQvQmFja2luZ1N0b3JlQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmI1NzIx
MDQ1NDA2ODM5MmIxYjZiOGE0NmExOTIzOTdmZWE3NTQzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlQ2xpZW50LmgK
QEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI2lmbmRlZiBCYWNraW5nU3RvcmVDbGllbnRfaAorI2RlZmluZSBCYWNr
aW5nU3RvcmVDbGllbnRfaAorCisjaW5jbHVkZSAiV2ViUGFnZV9wLmgiCisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBGbG9hdFBvaW50OworY2xh
c3MgRnJhbWU7CitjbGFzcyBJbnRQb2ludDsKK2NsYXNzIEludFNpemU7CitjbGFzcyBJbnRSZWN0
OworfQorCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgQmFja2luZ1N0b3JlOworY2xhc3MgV2ViUGFnZVByaXZhdGU7CisKK2NsYXNzIEJhY2tpbmdT
dG9yZUNsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIEJhY2tpbmdTdG9yZUNsaWVudCogY3Jl
YXRlKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6RnJhbWUqIHBhcmVudEZyYW1lLCBXZWJQYWdl
KiBwYXJlbnRQYWdlKTsKKyAgICB+QmFja2luZ1N0b3JlQ2xpZW50KCk7CisKKyAgICBCYWNraW5n
U3RvcmUqIGJhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlOyB9Cisg
ICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQorICAg
IGJvb2wgaXNNYWluRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lID09IG1fd2ViUGFnZS0+
ZC0+bV9tYWluRnJhbWU7IH0KKworICAgIHZvaWQgYWRkQ2hpbGQoQmFja2luZ1N0b3JlQ2xpZW50
KiBjaGlsZCk7CisgICAgV1RGOjpWZWN0b3IgPEJhY2tpbmdTdG9yZUNsaWVudCo+IGNoaWxkcmVu
KCkgY29uc3Q7CisgICAgQmFja2luZ1N0b3JlQ2xpZW50KiBwYXJlbnQoKSBjb25zdCB7IHJldHVy
biBtX3BhcmVudDsgfQorCisgICAgV2ViQ29yZTo6SW50UG9pbnQgYWJzb2x1dGVMb2NhdGlvbigp
IGNvbnN0OworICAgIFdlYkNvcmU6OkludFBvaW50IHRyYW5zZm9ybWVkQWJzb2x1dGVMb2NhdGlv
bigpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFJlY3QgYWJzb2x1dGVSZWN0KCkgY29uc3Q7Cisg
ICAgV2ViQ29yZTo6SW50UmVjdCB0cmFuc2Zvcm1lZEFic29sdXRlUmVjdCgpIGNvbnN0OworCisg
ICAgLy8gc2Nyb2xsIHBvc2l0aW9uIHJldHVybmVkIGlzIGluIHRyYW5zZm9ybWVkIGNvb3JkaW5h
dGVzCisgICAgV2ViQ29yZTo6SW50UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdDsKKyAgICBX
ZWJDb3JlOjpJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdDsKKyAgICAvLyBz
Y3JvbGwgcG9zaXRpb24gcHJvdmlkZWQgc2hvdWxkIGJlIGluIHRyYW5zZm9ybWVkIGNvb3JkaW5h
dGVzCisgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYp
OworCisgICAgV2ViQ29yZTo6SW50UG9pbnQgdHJhbnNmb3JtZWRTY3JvbGxQb3NpdGlvbigpIGNv
bnN0OworICAgIFdlYkNvcmU6OkludFBvaW50IHRyYW5zZm9ybWVkTWF4aW11bVNjcm9sbFBvc2l0
aW9uKCkgY29uc3Q7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIGFjdHVhbFZpc2libGVTaXplKCkg
Y29uc3Q7CisgICAgV2ViQ29yZTo6SW50U2l6ZSB0cmFuc2Zvcm1lZEFjdHVhbFZpc2libGVTaXpl
KCkgY29uc3Q7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIHZpZXdwb3J0U2l6ZSgpIGNvbnN0Owor
ICAgIFdlYkNvcmU6OkludFNpemUgdHJhbnNmb3JtZWRWaWV3cG9ydFNpemUoKSBjb25zdDsKKwor
ICAgIFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0OworICAgIFdl
YkNvcmU6OkludFJlY3QgdHJhbnNmb3JtZWRWaXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7CisK
KyAgICBXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0OworICAgIFdlYkNvcmU6
OkludFNpemUgdHJhbnNmb3JtZWRDb250ZW50c1NpemUoKSBjb25zdDsKKworICAgIC8qIEdlbmVy
aWMgY29udmVyc2lvbnMgb2YgcG9pbnRzLCByZWN0cywgcmVsYXRpdmUgdG8gYW5kIGZyb20gY29u
dGVudHMgYW5kIHZpZXdwb3J0Ki8KKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtYXBGcm9tQ29udGVu
dHNUb1ZpZXdwb3J0KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7CisgICAgV2ViQ29y
ZTo6SW50UG9pbnQgbWFwRnJvbVZpZXdwb3J0VG9Db250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFJlY3QgbWFwRnJvbUNvbnRlbnRzVG9WaWV3
cG9ydChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50UmVj
dCBtYXBGcm9tVmlld3BvcnRUb0NvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25z
dDsKKworICAgIC8qIEdlbmVyaWMgY29udmVyc2lvbnMgb2YgcG9pbnRzLCByZWN0cywgcmVsYXRp
dmUgdG8gYW5kIGZyb20gdHJhbnNmb3JtZWQgY29udGVudHMgYW5kIHRyYW5zZm9ybWVkIHZpZXdw
b3J0Ki8KKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtYXBGcm9tVHJhbnNmb3JtZWRDb250ZW50c1Rv
VHJhbnNmb3JtZWRWaWV3cG9ydChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OworICAg
IFdlYkNvcmU6OkludFBvaW50IG1hcEZyb21UcmFuc2Zvcm1lZFZpZXdwb3J0VG9UcmFuc2Zvcm1l
ZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7CisgICAgV2ViQ29yZTo6
SW50UmVjdCBtYXBGcm9tVHJhbnNmb3JtZWRDb250ZW50c1RvVHJhbnNmb3JtZWRWaWV3cG9ydChj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50UmVjdCBtYXBG
cm9tVHJhbnNmb3JtZWRWaWV3cG9ydFRvVHJhbnNmb3JtZWRDb250ZW50cyhjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JikgY29uc3Q7CisKKyAgICB2b2lkIGNsaXBUb1RyYW5zZm9ybWVkQ29udGVudHNS
ZWN0KFdlYkNvcmU6OkludFJlY3QmKSBjb25zdDsKKworICAgIGJvb2wgaXNMb2FkaW5nKCkgY29u
c3Q7CisgICAgV2ViUGFnZVByaXZhdGU6OkxvYWRTdGF0ZSBsb2FkU3RhdGUoKSBjb25zdDsKKwor
ICAgIGJvb2wgaXNGb2N1c2VkKCkgY29uc3Q7CisKKyAgICBib29sIHNjcm9sbHNIb3Jpem9udGFs
bHkoKSBjb25zdDsKKyAgICBib29sIHNjcm9sbHNWZXJ0aWNhbGx5KCkgY29uc3Q7CisKKyAgICBi
b29sIGlzQ2xpZW50R2VuZXJhdGVkU2Nyb2xsKCkgY29uc3Q7CisgICAgdm9pZCBzZXRJc0NsaWVu
dEdlbmVyYXRlZFNjcm9sbChib29sKTsKKworICAgIGJvb2wgaXNTY3JvbGxOb3RpZmljYXRpb25T
dXBwcmVzc2VkKCkgY29uc3Q7CisgICAgdm9pZCBzZXRJc1Njcm9sbE5vdGlmaWNhdGlvblN1cHBy
ZXNzZWQoYm9vbCk7CisKKyAgICAvKiBDYWxsZWQgZnJvbSB3aXRoaW4gV2ViS2l0IHZpYSBDaHJv
bWVDbGllbnRCbGFja0JlcnJ5ICovCisgICAgdm9pZCBjaGVja09yaWdpbk9mQ3VycmVudFNjcm9s
bE9wZXJhdGlvbigpOworCitwcml2YXRlOgorICAgIEJhY2tpbmdTdG9yZUNsaWVudChXZWJDb3Jl
OjpGcmFtZSosIFdlYkNvcmU6OkZyYW1lKiBwYXJlbnRGcmFtZSwgV2ViUGFnZSogcGFyZW50UGFn
ZSk7CisKKyAgICBXZWJDb3JlOjpGcmFtZSogbV9mcmFtZTsKKyAgICBXZWJQYWdlKiBtX3dlYlBh
Z2U7CisgICAgQmFja2luZ1N0b3JlKiBtX2JhY2tpbmdTdG9yZTsKKyAgICBCYWNraW5nU3RvcmVD
bGllbnQqIG1fcGFyZW50OworICAgIGJvb2wgbV9pc0NsaWVudEdlbmVyYXRlZFNjcm9sbDsKKyAg
ICBib29sIG1faXNTY3JvbGxOb3RpZmljYXRpb25TdXBwcmVzc2VkOworfTsKKworfQorfQorCisj
ZW5kaWYgLy8gQmFja2luZ1N0b3JlQ2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9yZUNvbXBvc2l0aW5nU3VyZmFjZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVD
b21wb3NpdGluZ1N1cmZhY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQzZTA3NWEzOThjNzgzODFkNDI5NjE5
M2Y1YzY1YmE3NmI0OWI1ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVDb21wb3NpdGluZ1N1cmZhY2UuY3BwCkBA
IC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAy
MDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCYWNraW5n
U3RvcmVDb21wb3NpdGluZ1N1cmZhY2UuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIlN1cmZhY2VQb29sLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljcy5oPgorCituYW1l
c3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworQ29tcG9zaXRpbmdTdXJm
YWNlQnVmZmVyOjpDb21wb3NpdGluZ1N1cmZhY2VCdWZmZXIoY29uc3QgUGxhdGZvcm06OkludFNp
emUmIHNpemUpCisgICAgOiBtX3NpemUoc2l6ZSkKKyAgICAsIG1fYnVmZmVyKDApCit7Cit9CisK
K0NvbXBvc2l0aW5nU3VyZmFjZUJ1ZmZlcjo6fkNvbXBvc2l0aW5nU3VyZmFjZUJ1ZmZlcigpCit7
CisgICAgZGVzdHJveUJ1ZmZlcihtX2J1ZmZlcik7Cit9CisKK1BsYXRmb3JtOjpJbnRTaXplIENv
bXBvc2l0aW5nU3VyZmFjZUJ1ZmZlcjo6c3VyZmFjZVNpemUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3NpemU7Cit9CisKK1BsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBDb21wb3NpdGluZ1N1
cmZhY2VCdWZmZXI6Om5hdGl2ZUJ1ZmZlcigpIGNvbnN0Cit7CisgICAgaWYgKCFtX2J1ZmZlcikg
eworICAgICAgICBtX2J1ZmZlciA9IGNyZWF0ZUJ1ZmZlcihtX3NpemUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtOjpHcmFwaGljczo6VGlsZUJ1ZmZlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMik7Cisg
ICAgfQorICAgIHJldHVybiBtX2J1ZmZlcjsKK30KKworQmFja2luZ1N0b3JlQ29tcG9zaXRpbmdT
dXJmYWNlOjpCYWNraW5nU3RvcmVDb21wb3NpdGluZ1N1cmZhY2UoY29uc3QgUGxhdGZvcm06Oklu
dFNpemUmIHNpemUsIGJvb2wgZG91YmxlQnVmZmVyZWQpCisgICAgOiBtX2lzRG91YmxlQnVmZmVy
ZWQoZG91YmxlQnVmZmVyZWQpCisgICAgLCBtX25lZWRzU3luYyh0cnVlKQoreworICAgIG1fZnJv
bnRCdWZmZXIgPSBuZXcgQ29tcG9zaXRpbmdTdXJmYWNlQnVmZmVyKHNpemUpOworICAgIG1fYmFj
a0J1ZmZlciA9ICFkb3VibGVCdWZmZXJlZCA/IDAgOiBuZXcgQ29tcG9zaXRpbmdTdXJmYWNlQnVm
ZmVyKHNpemUpOworfQorCitCYWNraW5nU3RvcmVDb21wb3NpdGluZ1N1cmZhY2U6On5CYWNraW5n
U3RvcmVDb21wb3NpdGluZ1N1cmZhY2UoKQoreworICAgIGRlbGV0ZSBtX2Zyb250QnVmZmVyOwor
ICAgIG1fZnJvbnRCdWZmZXIgPSAwOworCisgICAgZGVsZXRlIG1fYmFja0J1ZmZlcjsKKyAgICBt
X2JhY2tCdWZmZXIgPSAwOworfQorCitDb21wb3NpdGluZ1N1cmZhY2VCdWZmZXIqIEJhY2tpbmdT
dG9yZUNvbXBvc2l0aW5nU3VyZmFjZTo6ZnJvbnRCdWZmZXIoKSBjb25zdAoreworICAgIEFTU0VS
VChtX2Zyb250QnVmZmVyKTsKKyAgICByZXR1cm4gbV9mcm9udEJ1ZmZlcjsKK30KKworQ29tcG9z
aXRpbmdTdXJmYWNlQnVmZmVyKiBCYWNraW5nU3RvcmVDb21wb3NpdGluZ1N1cmZhY2U6OmJhY2tC
dWZmZXIoKSBjb25zdAoreworICAgIGlmICghbV9pc0RvdWJsZUJ1ZmZlcmVkKQorICAgICAgICBy
ZXR1cm4gZnJvbnRCdWZmZXIoKTsKKworICAgIEFTU0VSVChtX2JhY2tCdWZmZXIpOworICAgIHJl
dHVybiBtX2JhY2tCdWZmZXI7Cit9CisKK3ZvaWQgQmFja2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJm
YWNlOjpzd2FwQnVmZmVycygpCit7CisgICAgaWYgKCFtX2lzRG91YmxlQnVmZmVyZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIFN0b3JlIHRlbXBzLgorICAgIHVuc2lnbmVkIGZyb250ID0g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oZnJvbnRCdWZmZXIoKSk7CisgICAgdW5zaWduZWQg
YmFjayA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGJhY2tCdWZmZXIoKSk7CisKKyAgICAv
LyBBdG9taWMgY2hhbmdlLgorICAgIF9zbXBfeGNoZyhyZWludGVycHJldF9jYXN0PHVuc2lnbmVk
Kj4oJm1fZnJvbnRCdWZmZXIpLCBiYWNrKTsKKyAgICBfc21wX3hjaGcocmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCo+KCZtX2JhY2tCdWZmZXIpLCBmcm9udCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorfSAvLyBuYW1lc3BhY2UgQmxhY2tCZXJyeQorI2VuZGlmIC8vIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9yZUNvbXBvc2l0aW5nU3VyZmFjZS5oIGIvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlQ29tcG9zaXRpbmdTdXJm
YWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZDRlYzQ1YzUyMDRjMmFjYjlkNjFiNWVkNmE4ODQ2YjYzZjg5N2Mz
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBw
b3J0L0JhY2tpbmdTdG9yZUNvbXBvc2l0aW5nU3VyZmFjZS5oCkBAIC0wLDAgKzEsODIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
I2lmbmRlZiBCYWNraW5nU3RvcmVDb21wb3NpdGluZ1N1cmZhY2VfaAorI2RlZmluZSBCYWNraW5n
U3RvcmVDb21wb3NpdGluZ1N1cmZhY2VfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtSW50UmVjdFJlZ2lvbi5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQu
aD4KKworbmFtZXNwYWNlIEJsYWNrQmVycnkgeworCituYW1lc3BhY2UgUGxhdGZvcm0geworbmFt
ZXNwYWNlIEdyYXBoaWNzIHsKK3N0cnVjdCBCdWZmZXI7Cit9Cit9CisKK25hbWVzcGFjZSBXZWJL
aXQgeworY2xhc3MgQ29tcG9zaXRpbmdTdXJmYWNlQnVmZmVyIHsKK3B1YmxpYzoKKyAgICBDb21w
b3NpdGluZ1N1cmZhY2VCdWZmZXIoY29uc3QgUGxhdGZvcm06OkludFNpemUmKTsKKyAgICB+Q29t
cG9zaXRpbmdTdXJmYWNlQnVmZmVyKCk7CisgICAgUGxhdGZvcm06OkludFNpemUgc3VyZmFjZVNp
emUoKSBjb25zdDsKKworICAgIFBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBuYXRpdmVCdWZm
ZXIoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBQbGF0Zm9ybTo6SW50U2l6ZSBtX3NpemU7Cisg
ICAgbXV0YWJsZSBQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogbV9idWZmZXI7Cit9OworCisK
K2NsYXNzIEJhY2tpbmdTdG9yZUNvbXBvc2l0aW5nU3VyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxCYWNraW5nU3RvcmVDb21wb3NpdGluZ1N1cmZhY2U+IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxCYWNraW5nU3RvcmVDb21wb3NpdGluZ1N1cmZhY2U+IGNyZWF0
ZShjb25zdCBQbGF0Zm9ybTo6SW50U2l6ZSYgc2l6ZSwgYm9vbCBkb3VibGVCdWZmZXJlZCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmFja2luZ1N0b3JlQ29tcG9zaXRpbmdT
dXJmYWNlKHNpemUsIGRvdWJsZUJ1ZmZlcmVkKSk7CisgICAgfQorCisgICAgfkJhY2tpbmdTdG9y
ZUNvbXBvc2l0aW5nU3VyZmFjZSgpOworCisgICAgQ29tcG9zaXRpbmdTdXJmYWNlQnVmZmVyKiBm
cm9udEJ1ZmZlcigpIGNvbnN0OworICAgIENvbXBvc2l0aW5nU3VyZmFjZUJ1ZmZlciogYmFja0J1
ZmZlcigpIGNvbnN0OworICAgIGJvb2wgaXNEb3VibGVCdWZmZXJlZCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNEb3VibGVCdWZmZXJlZDsgfQorICAgIHZvaWQgc3dhcEJ1ZmZlcnMoKTsKKworICAgIGJv
b2wgbmVlZHNTeW5jKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc1N5bmM7IH0KKyAgICB2b2lkIHNl
dE5lZWRzU3luYyhib29sIG5lZWRzU3luYykgeyBtX25lZWRzU3luYyA9IG5lZWRzU3luYzsgfQor
Citwcml2YXRlOgorICAgIEJhY2tpbmdTdG9yZUNvbXBvc2l0aW5nU3VyZmFjZShjb25zdCBQbGF0
Zm9ybTo6SW50U2l6ZSYsIGJvb2wgZG91YmxlQnVmZmVyZWQpOworCisgICAgbXV0YWJsZSBDb21w
b3NpdGluZ1N1cmZhY2VCdWZmZXIqIG1fZnJvbnRCdWZmZXI7CisgICAgbXV0YWJsZSBDb21wb3Np
dGluZ1N1cmZhY2VCdWZmZXIqIG1fYmFja0J1ZmZlcjsKKyAgICBib29sIG1faXNEb3VibGVCdWZm
ZXJlZDsKKyAgICBib29sIG1fbmVlZHNTeW5jOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Cit9IC8vIG5hbWVzcGFjZSBCbGFja0JlcnJ5CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisKKyNlbmRpZiAvLyBCYWNraW5nU3RvcmVDb21wb3NpdGluZ1N1cmZhY2Vf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFj
a2luZ1N0b3JlVGlsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9y
dC9CYWNraW5nU3RvcmVUaWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMDJmOTNhMWNmN2Q4MGY4MmEwOGFk
MzdhMDQwMzFjMjE3MzcxZWJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlVGlsZS5jcHAKQEAgLTAsMCArMSwxNjYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhY2tpbmdTdG9yZVRpbGUuaCIK
KworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlN1cmZhY2VQb29sLmgi
CisKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljcy5oPgorCituYW1lc3BhY2Ug
QmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworVGlsZUJ1ZmZlcjo6VGlsZUJ1ZmZl
cihjb25zdCBQbGF0Zm9ybTo6SW50U2l6ZSYgc2l6ZSkKKyAgICA6IG1fc2l6ZShzaXplKQorICAg
ICwgbV9idWZmZXIoMCkKKyAgICAsIG1fYmxpdEdlbmVyYXRpb24oMCkKK3sKK30KKworVGlsZUJ1
ZmZlcjo6flRpbGVCdWZmZXIoKQoreworICAgIGRlc3Ryb3lCdWZmZXIobV9idWZmZXIpOworfQor
CitQbGF0Zm9ybTo6SW50U2l6ZSBUaWxlQnVmZmVyOjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9zaXplOworfQorCitQbGF0Zm9ybTo6SW50UmVjdCBUaWxlQnVmZmVyOjpyZWN0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gUGxhdGZvcm06OkludFJlY3QoUGxhdGZvcm06OkludFBvaW50Ojp6
ZXJvKCksIG1fc2l6ZSk7Cit9CisKK2Jvb2wgVGlsZUJ1ZmZlcjo6aXNSZW5kZXJlZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGlzUmVuZGVyZWQocmVjdCgpKTsKK30KKworYm9vbCBUaWxlQnVmZmVy
Ojppc1JlbmRlcmVkKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiBjb250ZW50cykgY29u
c3QKK3sKKyAgICByZXR1cm4gUGxhdGZvcm06OkludFJlY3RSZWdpb246OnN1YnRyYWN0UmVnaW9u
cyhjb250ZW50cywgbV9yZW5kZXJlZFJlZ2lvbikuaXNFbXB0eSgpOworfQorCit2b2lkIFRpbGVC
dWZmZXI6OmNsZWFyUmVuZGVyZWRSZWdpb24oY29uc3QgUGxhdGZvcm06OkludFJlY3RSZWdpb24m
IHJlZ2lvbikKK3sKKyAgICBtX3JlbmRlcmVkUmVnaW9uID0gUGxhdGZvcm06OkludFJlY3RSZWdp
b246OnN1YnRyYWN0UmVnaW9ucyhtX3JlbmRlcmVkUmVnaW9uLCByZWdpb24pOworfQorCit2b2lk
IFRpbGVCdWZmZXI6OmNsZWFyUmVuZGVyZWRSZWdpb24oKQoreworICAgIG1fcmVuZGVyZWRSZWdp
b24gPSBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbigpOworfQorCit2b2lkIFRpbGVCdWZmZXI6OmFk
ZFJlbmRlcmVkUmVnaW9uKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiByZWdpb24pCit7
CisgICAgbV9yZW5kZXJlZFJlZ2lvbiA9IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjp1bmlvblJl
Z2lvbnMocmVnaW9uLCBtX3JlbmRlcmVkUmVnaW9uKTsKK30KKworUGxhdGZvcm06OkludFJlY3RS
ZWdpb24gVGlsZUJ1ZmZlcjo6cmVuZGVyZWRSZWdpb24oKSBjb25zdAoreworICAgIHJldHVybiBt
X3JlbmRlcmVkUmVnaW9uOworfQorCitQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiBUaWxlQnVmZmVy
Ojpub3RSZW5kZXJlZFJlZ2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBsYXRmb3JtOjpJbnRS
ZWN0UmVnaW9uOjpzdWJ0cmFjdFJlZ2lvbnMocmVjdCgpLCByZW5kZXJlZFJlZ2lvbigpKTsKK30K
KworUGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIFRpbGVCdWZmZXI6Om5hdGl2ZUJ1ZmZlcigp
IGNvbnN0Cit7CisgICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAgbV9idWZmZXIgPSBjcmVhdGVC
dWZmZXIobV9zaXplLCBQbGF0Zm9ybTo6R3JhcGhpY3M6OlRpbGVCdWZmZXIsIFN1cmZhY2VQb29s
OjpnbG9iYWxTdXJmYWNlUG9vbCgpLT5zaGFyZWRQaXhtYXBHcm91cCgpKTsKKworICAgIHJldHVy
biBtX2J1ZmZlcjsKK30KKworCitCYWNraW5nU3RvcmVUaWxlOjpCYWNraW5nU3RvcmVUaWxlKGNv
bnN0IFBsYXRmb3JtOjpJbnRTaXplJiBzaXplLCBCdWZmZXJpbmdNb2RlIG1vZGUpCisgICAgOiBt
X2J1ZmZlcmluZ01vZGUobW9kZSkKKyAgICAsIG1fY29tbWl0dGVkKGZhbHNlKQorICAgICwgbV9i
YWNrZ3JvdW5kUGFpbnRlZChmYWxzZSkKKyAgICAsIG1faG9yaXpvbnRhbFNoaWZ0KDApCisgICAg
LCBtX3ZlcnRpY2FsU2hpZnQoMCkKK3sKKyAgICBtX2Zyb250QnVmZmVyID0gbmV3IFRpbGVCdWZm
ZXIoc2l6ZSk7Cit9CisKK0JhY2tpbmdTdG9yZVRpbGU6On5CYWNraW5nU3RvcmVUaWxlKCkKK3sK
KyAgICBkZWxldGUgbV9mcm9udEJ1ZmZlcjsKKyAgICBtX2Zyb250QnVmZmVyID0gMDsKK30KKwor
UGxhdGZvcm06OkludFNpemUgQmFja2luZ1N0b3JlVGlsZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGZyb250QnVmZmVyKCktPnNpemUoKTsKK30KKworUGxhdGZvcm06OkludFJlY3QgQmFj
a2luZ1N0b3JlVGlsZTo6cmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZyb250QnVmZmVyKCkt
PnJlY3QoKTsKK30KKworVGlsZUJ1ZmZlciogQmFja2luZ1N0b3JlVGlsZTo6ZnJvbnRCdWZmZXIo
KSBjb25zdAoreworICAgIEFTU0VSVChtX2Zyb250QnVmZmVyKTsKKyAgICByZXR1cm4gbV9mcm9u
dEJ1ZmZlcjsKK30KKworVGlsZUJ1ZmZlciogQmFja2luZ1N0b3JlVGlsZTo6YmFja0J1ZmZlcigp
IGNvbnN0Cit7CisgICAgaWYgKG1fYnVmZmVyaW5nTW9kZSA9PSBTaW5nbGVCdWZmZXJlZCkKKyAg
ICAgICAgcmV0dXJuIGZyb250QnVmZmVyKCk7CisKKyAgICByZXR1cm4gU3VyZmFjZVBvb2w6Omds
b2JhbFN1cmZhY2VQb29sKCktPmJhY2tCdWZmZXIoKTsKK30KKwordm9pZCBCYWNraW5nU3RvcmVU
aWxlOjpzd2FwQnVmZmVycygpCit7CisgICAgaWYgKG1fYnVmZmVyaW5nTW9kZSA9PSBTaW5nbGVC
dWZmZXJlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gU3RvcmUgdGVtcHMuCisgICAgdW5z
aWduZWQgZnJvbnQgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihmcm9udEJ1ZmZlcigpKTsK
KyAgICB1bnNpZ25lZCBiYWNrID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oYmFja0J1ZmZl
cigpKTsKKworICAgIC8vIEF0b21pYyBjaGFuZ2UuCisgICAgX3NtcF94Y2hnKHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQqPigmbV9mcm9udEJ1ZmZlciksIGJhY2spOworICAgIF9zbXBfeGNoZyhy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oJlN1cmZhY2VQb29sOjpnbG9iYWxTdXJmYWNlUG9v
bCgpLT5tX2JhY2tCdWZmZXIpLCBmcm9udCk7Cit9CisKK3ZvaWQgQmFja2luZ1N0b3JlVGlsZTo6
cmVzZXQoKQoreworICAgIHNldENvbW1pdHRlZChmYWxzZSk7CisgICAgZnJvbnRCdWZmZXIoKS0+
Y2xlYXJSZW5kZXJlZFJlZ2lvbigpOworICAgIGJhY2tCdWZmZXIoKS0+Y2xlYXJSZW5kZXJlZFJl
Z2lvbigpOworICAgIGNsZWFyU2hpZnQoKTsKK30KKwordm9pZCBCYWNraW5nU3RvcmVUaWxlOjpw
YWludEJhY2tncm91bmQoKQoreworICAgIG1fYmFja2dyb3VuZFBhaW50ZWQgPSB0cnVlOworCisg
ICAgY2xlYXJCdWZmZXIoYmFja0J1ZmZlcigpLT5uYXRpdmVCdWZmZXIoKSwgMCwgMCwgMCwgMCk7
Cit9CisKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L0JhY2tpbmdTdG9yZVRpbGUuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJL
aXRTdXBwb3J0L0JhY2tpbmdTdG9yZVRpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTBhNDJmNWQxZmQyM2Iy
NTE4ZjM1YzRkNTI5NzNkOGY2NmE4MTkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlVGlsZS5oCkBAIC0wLDAgKzEs
MTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQorICovCisKKyNpZm5kZWYgQmFja2luZ1N0b3JlVGlsZV9oCisjZGVmaW5lIEJhY2tpbmdTdG9y
ZVRpbGVfaAorCisjaW5jbHVkZSAiQmxhY2tCZXJyeVBsYXRmb3JtSW50UmVjdFJlZ2lvbi5oIgor
I2luY2x1ZGUgIkJsYWNrQmVycnlQbGF0Zm9ybVByaW1pdGl2ZXMuaCIKKworbmFtZXNwYWNlIEJs
YWNrQmVycnkgeworbmFtZXNwYWNlIFBsYXRmb3JtIHsKK25hbWVzcGFjZSBHcmFwaGljcyB7Citz
dHJ1Y3QgQnVmZmVyOworfQorfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFRpbGVCdWZm
ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgVGlsZUJ1ZmZlcihjb25zdCBQbGF0Zm9ybTo6SW50
U2l6ZSYpOworICAgICAgICB+VGlsZUJ1ZmZlcigpOworICAgICAgICBQbGF0Zm9ybTo6SW50U2l6
ZSBzaXplKCkgY29uc3Q7CisgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IHJlY3QoKSBjb25zdDsK
KworICAgICAgICBib29sIGlzUmVuZGVyZWQoKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc1JlbmRl
cmVkKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiBjb250ZW50cykgY29uc3Q7CisgICAg
ICAgIHZvaWQgY2xlYXJSZW5kZXJlZFJlZ2lvbigpOworICAgICAgICB2b2lkIGNsZWFyUmVuZGVy
ZWRSZWdpb24oY29uc3QgUGxhdGZvcm06OkludFJlY3RSZWdpb24mKTsKKyAgICAgICAgdm9pZCBh
ZGRSZW5kZXJlZFJlZ2lvbihjb25zdCBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiYpOworICAgICAg
ICBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiByZW5kZXJlZFJlZ2lvbigpIGNvbnN0OworICAgICAg
ICBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiBub3RSZW5kZXJlZFJlZ2lvbigpIGNvbnN0OworCisg
ICAgICAgIFBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBuYXRpdmVCdWZmZXIoKSBjb25zdDsK
KworICAgICAgICB2b2lkIHNldEJsaXRHZW5lcmF0aW9uKGludCBnKSBjb25zdCB7IG1fYmxpdEdl
bmVyYXRpb24gPSBnOyB9CisgICAgICAgIGludCBibGl0R2VuZXJhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fYmxpdEdlbmVyYXRpb247IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFBsYXRmb3Jt
OjpJbnRTaXplIG1fc2l6ZTsKKyAgICAgICAgUGxhdGZvcm06OkludFJlY3RSZWdpb24gbV9yZW5k
ZXJlZFJlZ2lvbjsKKyAgICAgICAgbXV0YWJsZSBQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciog
bV9idWZmZXI7CisgICAgICAgIG11dGFibGUgaW50IG1fYmxpdEdlbmVyYXRpb247Cit9OworCisK
K2NsYXNzIEJhY2tpbmdTdG9yZVRpbGUgeworcHVibGljOgorICAgIGVudW0gQnVmZmVyaW5nTW9k
ZSB7IFNpbmdsZUJ1ZmZlcmVkLCBEb3VibGVCdWZmZXJlZCB9OworCisgICAgc3RhdGljIEJhY2tp
bmdTdG9yZVRpbGUqIGNyZWF0ZShjb25zdCBQbGF0Zm9ybTo6SW50U2l6ZSYgc2l6ZSwgQnVmZmVy
aW5nTW9kZSBtb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBCYWNraW5nU3RvcmVUaWxl
KHNpemUsIG1vZGUpOworICAgIH0KKworICAgIH5CYWNraW5nU3RvcmVUaWxlKCk7CisKKyAgICBQ
bGF0Zm9ybTo6SW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgUGxhdGZvcm06OkludFJlY3QgcmVj
dCgpIGNvbnN0OworCisgICAgVGlsZUJ1ZmZlciogZnJvbnRCdWZmZXIoKSBjb25zdDsKKyAgICBU
aWxlQnVmZmVyKiBiYWNrQnVmZmVyKCkgY29uc3Q7CisgICAgYm9vbCBpc0RvdWJsZUJ1ZmZlcmVk
KCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJpbmdNb2RlID09IERvdWJsZUJ1ZmZlcmVkOyB9CisK
KyAgICB2b2lkIHJlc2V0KCk7CisgICAgYm9vbCBiYWNrZ3JvdW5kUGFpbnRlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2dyb3VuZFBhaW50ZWQ7IH0KKyAgICB2b2lkIHBhaW50QmFja2dyb3VuZCgp
OworCisgICAgYm9vbCBpc0NvbW1pdHRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29tbWl0dGVkOyB9
CisgICAgdm9pZCBzZXRDb21taXR0ZWQoYm9vbCBjb21taXR0ZWQpIHsgbV9jb21taXR0ZWQgPSBj
b21taXR0ZWQ7IH0KKworICAgIHZvaWQgY2xlYXJTaGlmdCgpIHsgbV9ob3Jpem9udGFsU2hpZnQg
PSAwOyBtX3ZlcnRpY2FsU2hpZnQgPSAwOyB9CisgICAgaW50IGhvcml6b250YWxTaGlmdCgpIGNv
bnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbFNoaWZ0OyB9CisgICAgdm9pZCBzZXRIb3Jpem9udGFs
U2hpZnQoaW50IHNoaWZ0KSB7IG1faG9yaXpvbnRhbFNoaWZ0ID0gc2hpZnQ7IH0KKyAgICBpbnQg
dmVydGljYWxTaGlmdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxTaGlmdDsgfQorICAgIHZv
aWQgc2V0VmVydGljYWxTaGlmdChpbnQgc2hpZnQpIHsgbV92ZXJ0aWNhbFNoaWZ0ID0gc2hpZnQ7
IH0KKworICAgIHZvaWQgc3dhcEJ1ZmZlcnMoKTsKKworcHJpdmF0ZToKKyAgICBCYWNraW5nU3Rv
cmVUaWxlKGNvbnN0IFBsYXRmb3JtOjpJbnRTaXplJiwgQnVmZmVyaW5nTW9kZSk7CisKKyAgICBt
dXRhYmxlIFRpbGVCdWZmZXIqIG1fZnJvbnRCdWZmZXI7CisgICAgQnVmZmVyaW5nTW9kZSBtX2J1
ZmZlcmluZ01vZGU7CisgICAgYm9vbCBtX2NoZWNrZXJlZDsKKyAgICBib29sIG1fY29tbWl0dGVk
OworICAgIGJvb2wgbV9iYWNrZ3JvdW5kUGFpbnRlZDsKKyAgICBpbnQgbV9ob3Jpem9udGFsU2hp
ZnQ7CisgICAgaW50IG1fdmVydGljYWxTaGlmdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorfSAvLyBuYW1lc3BhY2UgQmxhY2tCZXJyeQorCisjZW5kaWYgLy8gQmFja2luZ1N0b3JlVGls
ZV9oCg==
</data>
<flag name="review"
          id="128973"
          type_id="1"
          status="+"
          setter="tonikitoo"
    />
    <flag name="commit-queue"
          id="128994"
          type_id="3"
          status="-"
          setter="tonikitoo"
    />
          </attachment>
      

    </bug>

</bugzilla>