<?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>124260</bug_id>
          
          <creation_ts>2013-11-12 19:36:16 -0800</creation_ts>
          <short_desc>Add a new mode where fixed elements don&apos;t constrain their positions during a rubber band</short_desc>
          <delta_ts>2013-11-14 12:02:16 -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>Layout and Rendering</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Beth Dakin">bdakin</assigned_to>
          <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>eoconnor</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>jamesr</cc>
    
    <cc>jonlee</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>tonikitoo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>950028</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-11-12 19:36:16 -0800</bug_when>
    <thetext>We should add a new mode (off by default) where fixed elements stay totally fixed during a rubber-band.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950029</commentid>
    <comment_count>1</comment_count>
      <attachid>216766</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-11-12 19:41:10 -0800</bug_when>
    <thetext>Created attachment 216766
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950097</commentid>
    <comment_count>2</comment_count>
      <attachid>216766</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-11-13 03:17:29 -0800</bug_when>
    <thetext>Comment on attachment 216766
Patch

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

&gt; Source/WebCore/page/FrameView.cpp:1546
&gt; +IntSize FrameView::scrollOffsetForFixedPosition(const IntRect&amp; visibleContentRect, const IntSize&amp; totalContentsSize, const IntPoint&amp; scrollPosition, const IntPoint&amp; scrollOrigin, float frameScaleFactor, bool fixedElementsLayoutRelativeToFrame, bool shouldConstrainPosition, int headerHeight, int footerHeight)

Wonder if we should enumify shouldConstrainPosition. The arguments to this function are getting out of hand, too :(

&gt; Source/WebCore/page/scrolling/ScrollingCoordinator.cpp:269
&gt; +    return true;

The last line of both cases is shared

&gt; Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp:234
&gt; +    m_scrollingStateTree-&gt;setHasChangedProperties(true);

Weird, I would expect setPropertyChanged to do this, no?

&gt; Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h:109
&gt; +    bool m_setShouldConstrainScrollPositionForFixedElements;

I don&apos;t think this member should have the word &apos;set&apos; in it?

&gt; Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h:129
&gt; +    void setNodeShouldConstrainScrollPositionForFixedElements(bool, ScrollingStateScrollingNode*);

setShouldConstrainScollPositionForFixedElementsForNode sounds ridiculous but is more consistent with the other functions and the argument order :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950287</commentid>
    <comment_count>3</comment_count>
      <attachid>216766</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-11-13 12:09:01 -0800</bug_when>
    <thetext>Comment on attachment 216766
Patch

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

&gt;&gt; Source/WebCore/page/FrameView.cpp:1546
&gt;&gt; +IntSize FrameView::scrollOffsetForFixedPosition(const IntRect&amp; visibleContentRect, const IntSize&amp; totalContentsSize, const IntPoint&amp; scrollPosition, const IntPoint&amp; scrollOrigin, float frameScaleFactor, bool fixedElementsLayoutRelativeToFrame, bool shouldConstrainPosition, int headerHeight, int footerHeight)
&gt; 
&gt; Wonder if we should enumify shouldConstrainPosition. The arguments to this function are getting out of hand, too :(

I think we should.

&gt; Source/WebCore/page/FrameView.cpp:1569
&gt; +        shouldConstrainPosition = !renderView-&gt;compositor().mainFrameBackingIsTiledWithMargin();

I&apos;d expect this to check frameViewShouldConstrainScrollPositionForFixedElements() or maybe a Setting, rather than tiggering off mainFrameBackingIsTiledWithMargin, which seems more like a consequence of the behavior rather than the main trigger.

&gt; Source/WebCore/page/scrolling/ScrollingCoordinator.h:172
&gt; +    bool frameViewShouldConstrainScrollPositionForFixedElements(FrameView*);

const?

&gt; Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h:114
&gt; +    bool shouldConstrainScrollPositionForFixedElements() const { return m_shouldConstrainScrollPositionForFixedElements; }
&gt; +    void setShouldConstrainScrollPositionForFixedElements(bool);

This is a bit of a mouthful. How about &quot;fixedElementsMoveOnRubberband()&quot; or something.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2522
&gt; +bool RenderLayerCompositor::mainFrameBackingIsTiledWithMargin() const
&gt; +{
&gt; +    // FIXME: Implement. https://bugs.webkit.org/show_bug.cgi?id=124216
&gt; +    return false;
&gt; +}

Not sure it&apos;s right for RenderLayerCompositor to be the &quot;owner&quot; of the behavior. Seems like a ScrollView/FrameView thing, initialized from a Setting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950319</commentid>
    <comment_count>4</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-11-13 13:10:33 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 216766 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=216766&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/FrameView.cpp:1546
&gt; &gt; +IntSize FrameView::scrollOffsetForFixedPosition(const IntRect&amp; visibleContentRect, const IntSize&amp; totalContentsSize, const IntPoint&amp; scrollPosition, const IntPoint&amp; scrollOrigin, float frameScaleFactor, bool fixedElementsLayoutRelativeToFrame, bool shouldConstrainPosition, int headerHeight, int footerHeight)
&gt; 
&gt; Wonder if we should enumify shouldConstrainPosition. The arguments to this function are getting out of hand, too :(
&gt; 

Okay.

&gt; &gt; Source/WebCore/page/scrolling/ScrollingCoordinator.cpp:269
&gt; &gt; +    return true;
&gt; 
&gt; The last line of both cases is shared
&gt; 

Will share.

&gt; &gt; Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp:234
&gt; &gt; +    m_scrollingStateTree-&gt;setHasChangedProperties(true);
&gt; 
&gt; Weird, I would expect setPropertyChanged to do this, no?
&gt; 

Hrm, it doesn&apos;t appear to. This seems due for a clean-up.

&gt; &gt; Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h:109
&gt; &gt; +    bool m_setShouldConstrainScrollPositionForFixedElements;
&gt; 
&gt; I don&apos;t think this member should have the word &apos;set&apos; in it?
&gt; 

Ah yes, good catch.

&gt; &gt; Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h:129
&gt; &gt; +    void setNodeShouldConstrainScrollPositionForFixedElements(bool, ScrollingStateScrollingNode*);
&gt; 
&gt; setShouldConstrainScollPositionForFixedElementsForNode sounds ridiculous but is more consistent with the other functions and the argument order :(

:-( yeah. Will change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950361</commentid>
    <comment_count>5</comment_count>
      <attachid>216856</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-11-13 14:16:22 -0800</bug_when>
    <thetext>Created attachment 216856
Patch

This should address all of Tim&apos;s and Simon&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950366</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-13 14:18:37 -0800</bug_when>
    <thetext>Attachment 216856 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/page/FrameView.cpp&apos;, u&apos;Source/WebCore/page/FrameView.h&apos;, u&apos;Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp&apos;, u&apos;Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h&apos;, u&apos;Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp&apos;, u&apos;Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h&apos;, u&apos;Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h&apos;, u&apos;Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm&apos;, u&apos;Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm&apos;, u&apos;Source/WebCore/platform/ScrollTypes.h&apos;, u&apos;Source/WebCore/rendering/RenderLayerCompositor.cpp&apos;]&quot; exit_code: 1
Source/WebCore/page/FrameView.h:236:  The parameter name &quot;behaviorForFixed&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950377</commentid>
    <comment_count>7</comment_count>
      <attachid>216861</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-11-13 14:25:20 -0800</bug_when>
    <thetext>Created attachment 216861
Patch

This should make stylebot happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950380</commentid>
    <comment_count>8</comment_count>
      <attachid>216863</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-11-13 14:27:29 -0800</bug_when>
    <thetext>Created attachment 216863
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950788</commentid>
    <comment_count>9</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-11-14 12:02:16 -0800</bug_when>
    <thetext>Thanks Tim! http://trac.webkit.org/changeset/159300</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216766</attachid>
            <date>2013-11-12 19:41:10 -0800</date>
            <delta_ts>2013-11-13 14:16:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>fixed-only-for-review.txt</filename>
            <type>text/plain</type>
            <size>20049</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTE3NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDEzLTExLTEyICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBuZXcgbW9kZSB3aGVyZSBm
aXhlZCBlbGVtZW50cyBkb24ndCBjb25zdHJhaW4gdGhlaXIgcG9zaXRpb25zIGR1cmluZyBhIAor
ICAgICAgICBydWJiZXIgYmFuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI0MjYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgbW9kZSB0aGF0IHdpbGwgcHJldmVudCBmaXhl
ZCBlbGVtZW50cyBmcm9tIAorICAgICAgICDigJhjb25zdHJhaW5pbmcgdGhlaXIgcG9zaXRpb24g
Zm9yIG92ZXJoYW5nLOKAmSB3aGljaCBpcyB0byBzYXkgdGhhdCBpdCB3aWxsIGNhdXNlIAorICAg
ICAgICB0aGVtIHRvIHN0YXkgZml4ZWQgZXZlbiBkdXJpbmcgYSBydWJiZXItYmFuZC4gCisKKyAg
ICAgICAgT25seSBjb25zdHJhaW4gdGhlIHBvc2l0aW9uIG9mIGEgZml4ZWQgZWxlbWVudCB1bmRl
ciB0aGUgcmlnaHQgCisgICAgICAgIGNpcmN1bXN0YW5jZXMuCisgICAgICAgICogcGFnZS9GcmFt
ZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzY3JvbGxPZmZzZXRGb3JG
aXhlZFBvc2l0aW9uKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorCisgICAgICAgIFRo
ZSBzY3JvbGxpbmcgdGhyZWFkIG5lZWRzIHRvIGtub3cgaWYgaXQgc2hvdWxkIGNvbnN0cmFpbiBw
b3NpdGlvbiBmb3IgCisgICAgICAgIGZpeGVkIGVsZW1lbnRzIG9yIG5vdCwgc28gdGhpcyBjb2Rl
IG1ha2VzIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZXMga2VlcCB0cmFjayAKKyAgICAgICAg
b2YgdGhhdCBpbmZvcm1hdGlvbiB0byBwYXNzIG92ZXIgdG8gdGhlIHNjcm9sbGluZyB0aHJlYWQu
CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1Nob3VsZENvbnN0
cmFpblNjcm9sbFBvc2l0aW9uRm9yRml4ZWRFbGVtZW50cyk6CisgICAgICAgICogcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRTaG91bGRDb25z
dHJhaW5TY3JvbGxQb3NpdGlvbkZvckZpeGVkRWxlbWVudHMpOgorICAgICAgICAqIHBhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzaG91bGRDb25zdHJhaW5TY3JvbGxQb3NpdGlv
bkZvckZpeGVkRWxlbWVudHMpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6dXBkYXRlQmVmb3JlQ2hpbGRyZW4pOgorICAg
ICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6c2hvdWxkQ29uc3RyYWlu
U2Nyb2xsUG9zaXRpb25Gb3JGaXhlZEVsZW1lbnRzKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvck1hYzo6ZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzZXROb2RlU2hvdWxkQ29uc3Ry
YWluU2Nyb2xsUG9zaXRpb25Gb3JGaXhlZEVsZW1lbnRzKToKKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW06CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6c2V0U2Nyb2xsTGF5ZXJQb3NpdGlv
bik6CisKKyAgICAgICAgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjptYWluRnJhbWVCYWNraW5nSXNU
aWxlZFdpdGhNYXJnaW4oKSB3aWxsIGRldGVybWluZSB3aGV0aGVyIAorICAgICAgICBvciBub3Qg
d2Ugd2FudCB0aGlzIG5ldyBtb2RlLiBSaWdodCBub3csIHRoaXMgbmV3IGZ1bmN0aW9uIGFsd2F5
cyByZXR1cm5zIGZhbHNlLCAKKyAgICAgICAgbWVhbmluZyB0aGF0IHdlIHdpbGwgY29udGludWUg
dG8gY29uc3RyYWluIHNjcm9sbCBwb3NpdGlvbnMgZm9yIHRoZSB0aW1lIGJlaW5nLiAKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y3VzdG9tUG9zaXRpb25Gb3JWaXNpYmxlUmVjdENv
bXB1dGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6bWFp
bkZyYW1lQmFja2luZ0lzVGlsZWRXaXRoTWFyZ2luKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisKIDIwMTMtMTEtMTIgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNA
YXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0aGUgTW91bnRhaW4gTGlvbiBidWlsZCBhZnRlciBy
MTU5MTcxLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gMTU5MTIz
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTQzLDI2ICsxNTQzLDM4IEBAIExheW91dFJlY3QgRnJhbWVWaWV3Ojp2aWV3cG9ydENvbnN0
cmFpbmUKICAgICByZXR1cm4gdmlld3BvcnRSZWN0OwogfQogCi1JbnRTaXplIEZyYW1lVmlldzo6
c2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbihjb25zdCBJbnRSZWN0JiB2aXNpYmxlQ29udGVu
dFJlY3QsIGNvbnN0IEludFNpemUmIHRvdGFsQ29udGVudHNTaXplLCBjb25zdCBJbnRQb2ludCYg
c2Nyb2xsUG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBzY3JvbGxPcmlnaW4sIGZsb2F0IGZyYW1l
U2NhbGVGYWN0b3IsIGJvb2wgZml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFtZSwgaW50
IGhlYWRlckhlaWdodCwgaW50IGZvb3RlckhlaWdodCkKK0ludFNpemUgRnJhbWVWaWV3OjpzY3Jv
bGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50UmVj
dCwgY29uc3QgSW50U2l6ZSYgdG90YWxDb250ZW50c1NpemUsIGNvbnN0IEludFBvaW50JiBzY3Jv
bGxQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIHNjcm9sbE9yaWdpbiwgZmxvYXQgZnJhbWVTY2Fs
ZUZhY3RvciwgYm9vbCBmaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lLCBib29sIHNo
b3VsZENvbnN0cmFpblBvc2l0aW9uLCBpbnQgaGVhZGVySGVpZ2h0LCBpbnQgZm9vdGVySGVpZ2h0
KQogewotICAgIEludFBvaW50IGNvbnN0cmFpbmVkUG9zaXRpb24gPSBTY3JvbGxhYmxlQXJlYTo6
Y29uc3RyYWluU2Nyb2xsUG9zaXRpb25Gb3JPdmVyaGFuZyh2aXNpYmxlQ29udGVudFJlY3QsIHRv
dGFsQ29udGVudHNTaXplLCBzY3JvbGxQb3NpdGlvbiwgc2Nyb2xsT3JpZ2luLCBoZWFkZXJIZWln
aHQsIGZvb3RlckhlaWdodCk7CisgICAgSW50UG9pbnQgcG9zaXRpb247CisgICAgaWYgKHNob3Vs
ZENvbnN0cmFpblBvc2l0aW9uKQorICAgICAgICBwb3NpdGlvbiA9IFNjcm9sbGFibGVBcmVhOjpj
b25zdHJhaW5TY3JvbGxQb3NpdGlvbkZvck92ZXJoYW5nKHZpc2libGVDb250ZW50UmVjdCwgdG90
YWxDb250ZW50c1NpemUsIHNjcm9sbFBvc2l0aW9uLCBzY3JvbGxPcmlnaW4sIGhlYWRlckhlaWdo
dCwgZm9vdGVySGVpZ2h0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgcG9zaXRpb24gPSBzY3JvbGxQ
b3NpdGlvbjsKKyAgICAgICAgcG9zaXRpb24uc2V0WShwb3NpdGlvbi55KCkgLSBoZWFkZXJIZWln
aHQpOworICAgIH0KIAogICAgIEludFNpemUgbWF4U2l6ZSA9IHRvdGFsQ29udGVudHNTaXplIC0g
dmlzaWJsZUNvbnRlbnRSZWN0LnNpemUoKTsKIAogICAgIGZsb2F0IGRyYWdGYWN0b3JYID0gKGZp
eGVkRWxlbWVudHNMYXlvdXRSZWxhdGl2ZVRvRnJhbWUgfHwgIW1heFNpemUud2lkdGgoKSkgPyAx
IDogKHRvdGFsQ29udGVudHNTaXplLndpZHRoKCkgLSB2aXNpYmxlQ29udGVudFJlY3Qud2lkdGgo
KSAqIGZyYW1lU2NhbGVGYWN0b3IpIC8gbWF4U2l6ZS53aWR0aCgpOwogICAgIGZsb2F0IGRyYWdG
YWN0b3JZID0gKGZpeGVkRWxlbWVudHNMYXlvdXRSZWxhdGl2ZVRvRnJhbWUgfHwgIW1heFNpemUu
aGVpZ2h0KCkpID8gMSA6ICh0b3RhbENvbnRlbnRzU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVDb250
ZW50UmVjdC5oZWlnaHQoKSAqIGZyYW1lU2NhbGVGYWN0b3IpIC8gbWF4U2l6ZS5oZWlnaHQoKTsK
IAotICAgIHJldHVybiBJbnRTaXplKGNvbnN0cmFpbmVkUG9zaXRpb24ueCgpICogZHJhZ0ZhY3Rv
clggLyBmcmFtZVNjYWxlRmFjdG9yLCBjb25zdHJhaW5lZFBvc2l0aW9uLnkoKSAqIGRyYWdGYWN0
b3JZIC8gZnJhbWVTY2FsZUZhY3Rvcik7CisgICAgcmV0dXJuIEludFNpemUocG9zaXRpb24ueCgp
ICogZHJhZ0ZhY3RvclggLyBmcmFtZVNjYWxlRmFjdG9yLCBwb3NpdGlvbi55KCkgKiBkcmFnRmFj
dG9yWSAvIGZyYW1lU2NhbGVGYWN0b3IpOwogfQogCiBJbnRTaXplIEZyYW1lVmlldzo6c2Nyb2xs
T2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0CiB7CisgICAgYm9vbCBzaG91bGRDb25zdHJh
aW5Qb3NpdGlvbiA9IHRydWU7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAg
IGlmIChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gdGhpcy0+cmVuZGVyVmlldygpKQorICAgICAg
ICBzaG91bGRDb25zdHJhaW5Qb3NpdGlvbiA9ICFyZW5kZXJWaWV3LT5jb21wb3NpdG9yKCkubWFp
bkZyYW1lQmFja2luZ0lzVGlsZWRXaXRoTWFyZ2luKCk7CisjZW5kaWYKKwogICAgIEludFJlY3Qg
dmlzaWJsZUNvbnRlbnRSZWN0ID0gdGhpcy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgSW50
U2l6ZSB0b3RhbENvbnRlbnRzU2l6ZSA9IHRoaXMtPnRvdGFsQ29udGVudHNTaXplKCk7CiAgICAg
SW50UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSB0aGlzLT5zY3JvbGxQb3NpdGlvbigpOwogICAgIElu
dFBvaW50IHNjcm9sbE9yaWdpbiA9IHRoaXMtPnNjcm9sbE9yaWdpbigpOwogICAgIGZsb2F0IGZy
YW1lU2NhbGVGYWN0b3IgPSBmcmFtZSgpLmZyYW1lU2NhbGVGYWN0b3IoKTsKLSAgICByZXR1cm4g
c2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbih2aXNpYmxlQ29udGVudFJlY3QsIHRvdGFsQ29u
dGVudHNTaXplLCBzY3JvbGxQb3NpdGlvbiwgc2Nyb2xsT3JpZ2luLCBmcmFtZVNjYWxlRmFjdG9y
LCBmaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lKCksIGhlYWRlckhlaWdodCgpLCBm
b290ZXJIZWlnaHQoKSk7CisgICAgcmV0dXJuIHNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24o
dmlzaWJsZUNvbnRlbnRSZWN0LCB0b3RhbENvbnRlbnRzU2l6ZSwgc2Nyb2xsUG9zaXRpb24sIHNj
cm9sbE9yaWdpbiwgZnJhbWVTY2FsZUZhY3RvciwgZml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZl
VG9GcmFtZSgpLCBzaG91bGRDb25zdHJhaW5Qb3NpdGlvbiwgaGVhZGVySGVpZ2h0KCksIGZvb3Rl
ckhlaWdodCgpKTsKIH0KICAgICAKIEludFBvaW50IEZyYW1lVmlldzo6bWluaW11bVNjcm9sbFBv
c2l0aW9uKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gMTU5
MTIzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMzLDcgKzIzMyw3IEBAIHB1YmxpYzoKICAgICAvLyBhbmQgYWRqdXN0aW5nIGZvciBwYWdl
IHNjYWxlLgogICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0
OwogICAgIC8vIFN0YXRpYyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZyb20gYW5vdGhlciB0aHJl
YWQuCi0gICAgc3RhdGljIEludFNpemUgc2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbihjb25z
dCBJbnRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRvdGFsQ29udGVu
dHNTaXplLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBz
Y3JvbGxPcmlnaW4sIGZsb2F0IGZyYW1lU2NhbGVGYWN0b3IsIGJvb2wgZml4ZWRFbGVtZW50c0xh
eW91dFJlbGF0aXZlVG9GcmFtZSwgaW50IGhlYWRlckhlaWdodCwgaW50IGZvb3RlckhlaWdodCk7
CisgICAgc3RhdGljIEludFNpemUgc2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbihjb25zdCBJ
bnRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRvdGFsQ29udGVudHNT
aXplLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBzY3Jv
bGxPcmlnaW4sIGZsb2F0IGZyYW1lU2NhbGVGYWN0b3IsIGJvb2wgZml4ZWRFbGVtZW50c0xheW91
dFJlbGF0aXZlVG9GcmFtZSwgYm9vbCBzaG91bGRDb25zdHJhaW5Qb3NpdGlvbiwgaW50IGhlYWRl
ckhlaWdodCwgaW50IGZvb3RlckhlaWdodCk7CiAKICAgICBib29sIGZpeGVkRWxlbWVudHNMYXlv
dXRSZWxhdGl2ZVRvRnJhbWUoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24g
MTU5MTIzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNiArMjYxLDE4IEBAIEdyYXBoaWNzTGF5
ZXIqIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb3UKICNlbmRpZgogfQogCitib29sIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdTaG91bGRDb25zdHJhaW5TY3JvbGxQb3NpdGlvbkZvckZp
eGVkRWxlbWVudHMoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorICAgIGlmIChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gZnJhbWVWaWV3
LT5mcmFtZSgpLmNvbnRlbnRSZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gIXJlbmRlclZpZXct
PmNvbXBvc2l0b3IoKS5tYWluRnJhbWVCYWNraW5nSXNUaWxlZFdpdGhNYXJnaW4oKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGZyYW1lVmlldyk7CisgICAgcmV0
dXJuIHRydWU7CisjZW5kaWYKK30KKwogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVW
aWV3Um9vdExheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVWaWV3KQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdDb29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDE1OTEyMykKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE2OSw2ICsxNjksOCBAQCBwcm90ZWN0ZWQ6CiAgICAgR3JhcGhpY3NMYXll
ciogaGVhZGVyTGF5ZXJGb3JGcmFtZVZpZXcoRnJhbWVWaWV3Kik7CiAgICAgR3JhcGhpY3NMYXll
ciogZm9vdGVyTGF5ZXJGb3JGcmFtZVZpZXcoRnJhbWVWaWV3Kik7CiAKKyAgICBib29sIGZyYW1l
Vmlld1Nob3VsZENvbnN0cmFpblNjcm9sbFBvc2l0aW9uRm9yRml4ZWRFbGVtZW50cyhGcmFtZVZp
ZXcqKTsKKwogICAgIFBhZ2UqIG1fcGFnZTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlLmNwcAkocmV2aXNpb24gMTU5MTIzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTYsNiArNTYsNyBAQCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGluZ1N0
CiAgICAgLCBtX2hhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKGZhbHNlKQogICAgICwgbV9o
YXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoZmFsc2UpCiAgICAgLCBtX3JlcXVlc3RlZFNjcm9s
bFBvc2l0aW9uUmVwcmVzZW50c1Byb2dyYW1tYXRpY1Njcm9sbChmYWxzZSkKKyAgICAsIG1fc2hv
dWxkQ29uc3RyYWluU2Nyb2xsUG9zaXRpb25Gb3JGaXhlZEVsZW1lbnRzKHRydWUpCiAgICAgLCBt
X2hvcml6b250YWxTY3JvbGxiYXJNb2RlKFNjcm9sbGJhckF1dG8pCiAgICAgLCBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJBdXRvKQogICAgICwgbV9oZWFkZXJIZWlnaHQoMCkKQEAg
LTgwLDYgKzgxLDcgQEAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxpbmdTdAog
ICAgICwgbV9oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcihzdGF0ZU5vZGUuaGFzRW5hYmxl
ZEhvcml6b250YWxTY3JvbGxiYXIoKSkKICAgICAsIG1faGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xs
YmFyKHN0YXRlTm9kZS5oYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoKSkKICAgICAsIG1fcmVx
dWVzdGVkU2Nyb2xsUG9zaXRpb25SZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsKHN0YXRlTm9k
ZS5yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvblJlcHJlc2VudHNQcm9ncmFtbWF0aWNTY3JvbGwoKSkK
KyAgICAsIG1fc2hvdWxkQ29uc3RyYWluU2Nyb2xsUG9zaXRpb25Gb3JGaXhlZEVsZW1lbnRzKHN0
YXRlTm9kZS5zaG91bGRDb25zdHJhaW5TY3JvbGxQb3NpdGlvbkZvckZpeGVkRWxlbWVudHMoKSkK
ICAgICAsIG1faG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoc3RhdGVOb2RlLmhvcml6b250YWxTY3Jv
bGxiYXJNb2RlKCkpCiAgICAgLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyTW9kZShzdGF0ZU5vZGUudmVy
dGljYWxTY3JvbGxiYXJNb2RlKCkpCiAgICAgLCBtX3JlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKHN0
YXRlTm9kZS5yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbigpKQpAQCAtMjIyLDYgKzIyNCwxNiBAQCB2
b2lkIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0VmVyCiAgICAgbV9zY3JvbGxpbmdT
dGF0ZVRyZWUtPnNldEhhc0NoYW5nZWRQcm9wZXJ0aWVzKHRydWUpOwogfQogCit2b2lkIFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0U2hvdWxkQ29uc3RyYWluU2Nyb2xsUG9zaXRpb25G
b3JGaXhlZEVsZW1lbnRzKGJvb2wgc2hvdWxkQ29uc3RyYWluKQoreworICAgIGlmIChtX3Nob3Vs
ZENvbnN0cmFpblNjcm9sbFBvc2l0aW9uRm9yRml4ZWRFbGVtZW50cyA9PSBzaG91bGRDb25zdHJh
aW4pCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2hvdWxkQ29uc3RyYWluU2Nyb2xsUG9zaXRp
b25Gb3JGaXhlZEVsZW1lbnRzID0gc2hvdWxkQ29uc3RyYWluOworICAgIHNldFByb3BlcnR5Q2hh
bmdlZChTaG91bGRDb25zdHJhaW5TY3JvbGxQb3NpdGlvbkZvckZpeGVkRWxlbWVudHMpOworICAg
IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zZXRIYXNDaGFuZ2VkUHJvcGVydGllcyh0cnVlKTsKK30K
Kwogdm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldFJlcXVlc3RlZFNjcm9sbFBv
c2l0aW9uKGNvbnN0IEludFBvaW50JiByZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbiwgYm9vbCByZXBy
ZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsKQogewogICAgIG1fcmVxdWVzdGVkU2Nyb2xsUG9zaXRp
b24gPSByZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5o
CShyZXZpc2lvbiAxNTkxMjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsOCBA
QCBwdWJsaWM6CiAgICAgICAgIEZvb3RlckhlaWdodCwKICAgICAgICAgSGVhZGVyTGF5ZXIsCiAg
ICAgICAgIEZvb3RlckxheWVyLAotICAgICAgICBQYWludGVyRm9yU2Nyb2xsYmFyCisgICAgICAg
IFBhaW50ZXJGb3JTY3JvbGxiYXIsCisgICAgICAgIFNob3VsZENvbnN0cmFpblNjcm9sbFBvc2l0
aW9uRm9yRml4ZWRFbGVtZW50cwogICAgIH07CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxp
bmdOb2RlKCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMTA5LDYgKzExMCw5IEBAIHB1
YmxpYzoKICAgICBTY3JvbGxiYXJNb2RlIHZlcnRpY2FsU2Nyb2xsYmFyTW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXJNb2RlOyB9CiAgICAgdm9pZCBzZXRWZXJ0aWNhbFNj
cm9sbGJhck1vZGUoU2Nyb2xsYmFyTW9kZSk7CiAKKyAgICBib29sIHNob3VsZENvbnN0cmFpblNj
cm9sbFBvc2l0aW9uRm9yRml4ZWRFbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkQ29u
c3RyYWluU2Nyb2xsUG9zaXRpb25Gb3JGaXhlZEVsZW1lbnRzOyB9CisgICAgdm9pZCBzZXRTaG91
bGRDb25zdHJhaW5TY3JvbGxQb3NpdGlvbkZvckZpeGVkRWxlbWVudHMoYm9vbCk7CisKICAgICBj
b25zdCBJbnRQb2ludCYgcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3JlcXVlc3RlZFNjcm9sbFBvc2l0aW9uOyB9CiAgICAgdm9pZCBzZXRSZXF1ZXN0ZWRTY3JvbGxQ
b3NpdGlvbihjb25zdCBJbnRQb2ludCYsIGJvb2wgcmVwcmVzZW50c1Byb2dyYW1tYXRpY1Njcm9s
bCk7CiAKQEAgLTE3OCw2ICsxODIsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNFbmFibGVk
SG9yaXpvbnRhbFNjcm9sbGJhcjsKICAgICBib29sIG1faGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xs
YmFyOwogICAgIGJvb2wgbV9yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvblJlcHJlc2VudHNQcm9ncmFt
bWF0aWNTY3JvbGw7CisgICAgYm9vbCBtX3Nob3VsZENvbnN0cmFpblNjcm9sbFBvc2l0aW9uRm9y
Rml4ZWRFbGVtZW50czsKIAogICAgIFNjcm9sbGJhck1vZGUgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
TW9kZTsKICAgICBTY3JvbGxiYXJNb2RlIG1fdmVydGljYWxTY3JvbGxiYXJNb2RlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlLmNwcAkocmV2aXNpb24gMTU5MTIzKQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjpTY3Jv
bGxpbmdUcmUKICAgICAsIG1fdmVydGljYWxTY3JvbGxiYXJNb2RlKFNjcm9sbGJhckF1dG8pCiAg
ICAgLCBtX2hlYWRlckhlaWdodCgwKQogICAgICwgbV9mb290ZXJIZWlnaHQoMCkKKyAgICAsIG1f
c2V0U2hvdWxkQ29uc3RyYWluU2Nyb2xsUG9zaXRpb25Gb3JGaXhlZEVsZW1lbnRzKHRydWUpCiB7
CiB9CiAKQEAgLTk5LDYgKzEwMCw5IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6
OnVwZGF0ZUIKIAogICAgIGlmIChzdGF0ZS0+aGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6Rm9vdGVySGVpZ2h0KSkKICAgICAgICAgbV9mb290ZXJIZWlnaHQg
PSBzdGF0ZS0+Zm9vdGVySGVpZ2h0KCk7CisKKyAgICBpZiAoc3RhdGUtPmhhc0NoYW5nZWRQcm9w
ZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNob3VsZENvbnN0cmFpblNjcm9sbFBv
c2l0aW9uRm9yRml4ZWRFbGVtZW50cykpCisgICAgICAgIG1fc2V0U2hvdWxkQ29uc3RyYWluU2Ny
b2xsUG9zaXRpb25Gb3JGaXhlZEVsZW1lbnRzID0gc3RhdGUtPnNob3VsZENvbnN0cmFpblNjcm9s
bFBvc2l0aW9uRm9yRml4ZWRFbGVtZW50cygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgJKHJldmlzaW9uIDE1OTEyMykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTgyLDYgKzgyLDggQEAgcHJvdGVjdGVkOgogICAgIGludCBoZWFkZXJIZWln
aHQoKSBjb25zdCB7IHJldHVybiBtX2hlYWRlckhlaWdodDsgfQogICAgIGludCBmb290ZXJIZWln
aHQoKSBjb25zdCB7IHJldHVybiBtX2Zvb3RlckhlaWdodDsgfQogCisgICAgYm9vbCBzaG91bGRD
b25zdHJhaW5TY3JvbGxQb3NpdGlvbkZvckZpeGVkRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBt
X3NldFNob3VsZENvbnN0cmFpblNjcm9sbFBvc2l0aW9uRm9yRml4ZWRFbGVtZW50czsgfQorCiBw
cml2YXRlOgogICAgIEludFJlY3QgbV92aWV3cG9ydFJlY3Q7CiAgICAgSW50U2l6ZSBtX3RvdGFs
Q29udGVudHNTaXplOwpAQCAtMTAzLDYgKzEwNSw4IEBAIHByaXZhdGU6CiAKICAgICBpbnQgbV9o
ZWFkZXJIZWlnaHQ7CiAgICAgaW50IG1fZm9vdGVySGVpZ2h0OworCisgICAgYm9vbCBtX3NldFNo
b3VsZENvbnN0cmFpblNjcm9sbFBvc2l0aW9uRm9yRml4ZWRFbGVtZW50czsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21h
Yy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5oCShyZXZpc2lvbiAx
NTkxMjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29v
cmRpbmF0b3JNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiw4IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBzZXRTY3JvbGxiYXJQYWludGVyc0Zyb21TY3JvbGxiYXJzRm9yTm9kZShTY3Jv
bGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyLCBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIs
IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSopOwogICAgIHZvaWQgc2V0Tm9uRmFzdFNjcm9s
bGFibGVSZWdpb25Gb3JOb2RlKGNvbnN0IFJlZ2lvbiYsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZSopOwogICAgIHZvaWQgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUodW5zaWdu
ZWQsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSopOworICAgIHZvaWQgc2V0Tm9kZVNob3Vs
ZENvbnN0cmFpblNjcm9sbFBvc2l0aW9uRm9yRml4ZWRFbGVtZW50cyhib29sLCBTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGUqKTsKKwogCiAgICAgdm9pZCB1cGRhdGVNYWluRnJhbWVTY3JvbGxM
YXllclBvc2l0aW9uKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21h
Yy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0JKHJldmlzaW9u
IDE1OTEyMykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdD
b29yZGluYXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTgwLDYgKzE4MCw3IEBAIHZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmZyYW1lVmlld1IKICAgICBzZXRDb3VudGVyU2Nyb2xs
aW5nTGF5ZXJGb3JOb2RlKGNvdW50ZXJTY3JvbGxpbmdMYXllckZvckZyYW1lVmlldyhmcmFtZVZp
ZXcpLCBub2RlKTsKICAgICBzZXRIZWFkZXJMYXllckZvck5vZGUoaGVhZGVyTGF5ZXJGb3JGcmFt
ZVZpZXcoZnJhbWVWaWV3KSwgbm9kZSk7CiAgICAgc2V0Rm9vdGVyTGF5ZXJGb3JOb2RlKGZvb3Rl
ckxheWVyRm9yRnJhbWVWaWV3KGZyYW1lVmlldyksIG5vZGUpOworICAgIHNldE5vZGVTaG91bGRD
b25zdHJhaW5TY3JvbGxQb3NpdGlvbkZvckZpeGVkRWxlbWVudHMoZnJhbWVWaWV3U2hvdWxkQ29u
c3RyYWluU2Nyb2xsUG9zaXRpb25Gb3JGaXhlZEVsZW1lbnRzKGZyYW1lVmlldyksIG5vZGUpOwog
fQogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzY3JvbGxhYmxlQXJlYVNjcm9sbGJh
ckxheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24pCkBAIC0zMjIsNiArMzIzLDEyIEBAIHZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWM6OnNldFdoZWVsRXYKICAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1p
dCgpOwogfQogCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzZXROb2RlU2hvdWxkQ29u
c3RyYWluU2Nyb2xsUG9zaXRpb25Gb3JGaXhlZEVsZW1lbnRzKGJvb2wgc2hvdWxkQ29uc3RyYWlu
LCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCit7CisgICAgbm9kZS0+c2V0U2hv
dWxkQ29uc3RyYWluU2Nyb2xsUG9zaXRpb25Gb3JGaXhlZEVsZW1lbnRzKHNob3VsZENvbnN0cmFp
bik7CisgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKK30KKwogdm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvck1hYzo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRo
cmVhZChNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyByZWFzb25zKQogewogICAgIGlmICghbV9z
Y3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVNYWMubW0JKHJldmlzaW9uIDE1OTEyMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMzE3LDggKzMxNyw5IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVNYWM6OnNldFMKICAgICBBU1NFUlQoIXNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRp
b25Pbk1haW5UaHJlYWQoKSk7CiAgICAgbV9zY3JvbGxMYXllci5nZXQoKS5wb3NpdGlvbiA9IENH
UG9pbnRNYWtlKC1wb3NpdGlvbi54KCkgKyBzY3JvbGxPcmlnaW4oKS54KCksIC1wb3NpdGlvbi55
KCkgKyBzY3JvbGxPcmlnaW4oKS55KCkpOwogCisgICAgYm9vbCBzaG91bGRDb25zdHJhaW5Qb3Np
dGlvbiA9IHNob3VsZENvbnN0cmFpblNjcm9sbFBvc2l0aW9uRm9yRml4ZWRFbGVtZW50cygpOwog
ICAgIEludFBvaW50IHNjcm9sbE9mZnNldCA9IHBvc2l0aW9uIC0gdG9JbnRTaXplKHNjcm9sbE9y
aWdpbigpKTsKLSAgICBJbnRTaXplIHNjcm9sbE9mZnNldEZvckZpeGVkQ2hpbGRyZW4gPSBGcmFt
ZVZpZXc6OnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24odmlld3BvcnRSZWN0KCksIHRvdGFs
Q29udGVudHNTaXplKCksIHNjcm9sbE9mZnNldCwgc2Nyb2xsT3JpZ2luKCksIGZyYW1lU2NhbGVG
YWN0b3IoKSwgZmFsc2UsIGhlYWRlckhlaWdodCgpLCBmb290ZXJIZWlnaHQoKSk7CisgICAgSW50
U2l6ZSBzY3JvbGxPZmZzZXRGb3JGaXhlZENoaWxkcmVuID0gRnJhbWVWaWV3OjpzY3JvbGxPZmZz
ZXRGb3JGaXhlZFBvc2l0aW9uKHZpZXdwb3J0UmVjdCgpLCB0b3RhbENvbnRlbnRzU2l6ZSgpLCBz
Y3JvbGxPZmZzZXQsIHNjcm9sbE9yaWdpbigpLCBmcmFtZVNjYWxlRmFjdG9yKCksIGZhbHNlLCBz
aG91bGRDb25zdHJhaW5Qb3NpdGlvbiwgaGVhZGVySGVpZ2h0KCksIGZvb3RlckhlaWdodCgpKTsK
ICAgICBpZiAobV9jb3VudGVyU2Nyb2xsaW5nTGF5ZXIpCiAgICAgICAgIG1fY291bnRlclNjcm9s
bGluZ0xheWVyLmdldCgpLnBvc2l0aW9uID0gRmxvYXRQb2ludChzY3JvbGxPZmZzZXRGb3JGaXhl
ZENoaWxkcmVuKTsKIApAQCAtMzI3LDcgKzMyOCw3IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGVNYWM6OnNldFMKICAgICAvLyB0aGVuIHdlIHNob3VsZCByZWNvbXB1dGUgc2Nyb2xs
T2Zmc2V0Rm9yRml4ZWRDaGlsZHJlbiBmb3IgdGhlIGJhbm5lciB3aXRoIGEgc2NhbGUgZmFjdG9y
IG9mIDEuCiAgICAgZmxvYXQgaG9yaXpvbnRhbFNjcm9sbE9mZnNldEZvckJhbm5lciA9IHNjcm9s
bE9mZnNldEZvckZpeGVkQ2hpbGRyZW4ud2lkdGgoKTsKICAgICBpZiAoZnJhbWVTY2FsZUZhY3Rv
cigpICE9IDEpCi0gICAgICAgIGhvcml6b250YWxTY3JvbGxPZmZzZXRGb3JCYW5uZXIgPSBGcmFt
ZVZpZXc6OnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24odmlld3BvcnRSZWN0KCksIHRvdGFs
Q29udGVudHNTaXplKCksIHNjcm9sbE9mZnNldCwgc2Nyb2xsT3JpZ2luKCksIDEsIGZhbHNlLCBo
ZWFkZXJIZWlnaHQoKSwgZm9vdGVySGVpZ2h0KCkpLndpZHRoKCk7CisgICAgICAgIGhvcml6b250
YWxTY3JvbGxPZmZzZXRGb3JCYW5uZXIgPSBGcmFtZVZpZXc6OnNjcm9sbE9mZnNldEZvckZpeGVk
UG9zaXRpb24odmlld3BvcnRSZWN0KCksIHRvdGFsQ29udGVudHNTaXplKCksIHNjcm9sbE9mZnNl
dCwgc2Nyb2xsT3JpZ2luKCksIDEsIGZhbHNlLCBzaG91bGRDb25zdHJhaW5Qb3NpdGlvbiwgaGVh
ZGVySGVpZ2h0KCksIGZvb3RlckhlaWdodCgpKS53aWR0aCgpOwogCiAgICAgaWYgKG1faGVhZGVy
TGF5ZXIpCiAgICAgICAgIG1faGVhZGVyTGF5ZXIuZ2V0KCkucG9zaXRpb24gPSBGbG9hdFBvaW50
KGhvcml6b250YWxTY3JvbGxPZmZzZXRGb3JCYW5uZXIsIDApOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9u
IDE1OTEyMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsNyArMzM3LDExIEBAIHZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpjdXN0b21Qb3NpdGkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRmxvYXRQ
b2ludCBzY3JvbGxQb3NpdGlvbiA9IC1wb3NpdGlvbjsKLSAgICBzY3JvbGxQb3NpdGlvbiA9IG1f
cmVuZGVyVmlldy5mcmFtZVZpZXcoKS5jb25zdHJhaW5TY3JvbGxQb3NpdGlvbkZvck92ZXJoYW5n
KHJvdW5kZWRJbnRQb2ludChzY3JvbGxQb3NpdGlvbikpOworCisgICAgLy8gSWYgdGhlcmUgaXMg
YSB0aWxlZCBiYWNraW5nIHdpdGggYSBtYXJnaW4sIHRoZW4gd2UgZG9uJ3QgY29uc3RyYWluIHNj
cm9sbCBwb3NpdGlvbnMuCisgICAgaWYgKCFtYWluRnJhbWVCYWNraW5nSXNUaWxlZFdpdGhNYXJn
aW4oKSkKKyAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCku
Y29uc3RyYWluU2Nyb2xsUG9zaXRpb25Gb3JPdmVyaGFuZyhyb3VuZGVkSW50UG9pbnQoc2Nyb2xs
UG9zaXRpb24pKTsKKwogICAgIHBvc2l0aW9uID0gLXNjcm9sbFBvc2l0aW9uOwogfQogCkBAIC0y
NTExLDYgKzI1MTUsMTIgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6Om1haW5GcmFtZUJh
YwogICAgIHJldHVybiBiYWNraW5nLT51c2luZ1RpbGVkQmFja2luZygpOwogfQogCitib29sIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6bWFpbkZyYW1lQmFja2luZ0lzVGlsZWRXaXRoTWFyZ2luKCkg
Y29uc3QKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI0MjE2CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBib29sIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6c2hvdWxkQ29tcG9zaXRlT3ZlcmZsb3dDb250cm9scygpIGNv
bnN0CiB7CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5oCShyZXZpc2lvbiAxNTkxMjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw2ICsyODksOCBA
QCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBkaWRQYWludEJhY2tpbmcoUmVuZGVyTGF5ZXJCYWNr
aW5nKik7CiAKKyAgICBib29sIG1haW5GcmFtZUJhY2tpbmdJc1RpbGVkV2l0aE1hcmdpbigpIGNv
bnN0OworCiBwcml2YXRlOgogICAgIGNsYXNzIE92ZXJsYXBNYXA7CiAK
</data>
<flag name="review"
          id="239800"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216856</attachid>
            <date>2013-11-13 14:16:22 -0800</date>
            <delta_ts>2013-11-13 14:25:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>fixed-only-for-review-2.txt</filename>
            <type>text/plain</type>
            <size>18199</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTIzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDEzLTExLTEzICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBuZXcgbW9kZSB3aGVyZSBm
aXhlZCBlbGVtZW50cyBkb24ndCBjb25zdHJhaW4gdGhlaXIgcG9zaXRpb25zIGR1cmluZyBhCisg
ICAgICAgIHJ1YmJlciBiYW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjQyNjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgZW51bSBjYWxsZWQgU2Nyb2xsQmVoYXZp
b3JGb3JGaXhlZEVsZW1lbnRzLCB3aGljaCBoYXMKKyAgICAgICAgdHdvIHZhbHVlZCwgU3RpY2tU
b0RvY3VtZW50Qm91bmRzIG9yIFN0aWNrVG9XaW5kb3dCb3VuZHMuIFN0aWNrVG9Eb2N1bWVudAor
ICAgICAgICBjb3VuZHMgY29ycmVzcG9uZHMgdG8gb3VyIGN1cnJlbnQgYmVoYXZpb3IsIHdoZXJl
IGZpeGVkIGVsZW1lbnRzIGNvbnRzcmFpbiAKKyAgICAgICAgdGhlaXIgcG9zaXRpb25zIGR1cmlu
ZyBhIHJ1YmJlci1iYW5kIHNvIHRoYXQgdGhleSBzdGF5IHN0dWNrIHRvIHRoZSBkb2N1bWVudC4K
KyAgICAgICAgVGhlIG5ldyBtb2RlLCBTdGlja1RvV2luZG93Qm91bmRzLCB3aWxsIGNhdXNlIGZp
eGVkIGVsZW1ldG5zIHRvIGFsd2F5cyBzdGF5CisgICAgICAgIGZpeGVkIHJlbGF0aXZlIHRvIHRo
ZSB3aW5kb3cuCisKKyAgICAgICAgc2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbigpIG5vdyB0
YWtlcyBhIG5ldyBwYXJhbWV0ZXIgZm9yIHRoZSBmaXhlZCBiZWhhdmlvcgorICAgICAgICBzbyB0
aGF0IGl0IGtub3dzIHdoZXRoZXIgb3Igbm90IHRvIGNvbnN0cmFpbiB0aGUgcG9zaXRpb24uCisg
ICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
OjpzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKToKKyAgICAgICAgCisgICAgICAgIFJpZ2h0
IG5vdywganVzdCByZXR1cm4gY3VycmVudCBiZWhhdmlvciB3aXRoIFN0aWNrVG9Eb2N1bWVudEJv
dW5kcy4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsQmVoYXZpb3JGb3JGaXhl
ZEVsZW1lbnRzKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorCisgICAgICAgIFRoZSBz
Y3JvbGxpbmcgdGhyZWFkIG5lZWRzIHRvIGtub3cgYWJvdXQgdGhlIGZpeGVkIGVsZW1lbnQgc2Ny
b2xsIGJlYWh2aW9yLAorICAgICAgICBzbyB0aGlzIGNvZGUgbWFrZXMgU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlcyBrZWVwIHRyYWNrIG9mIHRoYXQgCisgICAgICAgIGluZm9ybWF0aW9uIHRv
IHBhc3Mgb3ZlciB0byB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRTY3Jv
bGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHMpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6dXBkYXRlQmVmb3JlQ2hpbGRy
ZW4pOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6c2Nyb2xs
QmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMv
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMv
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdD
b29yZGluYXRvck1hYzo6ZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzZXRTY3JvbGxCZWhhdmlvckZvckZpeGVk
RWxlbWVudHNGb3JOb2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZU1hYzo6c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbik6CisgICAgICAgIAorICAg
ICAgICBIZXJlIGlzIHRoZSBuZXcgZW51bS4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxUeXBl
cy5oOgorICAgICAgICAKKyAgICAgICAgQW5vdGhlciBwbGFjZSB3aGVyZSB3ZSBvbmx5IHdhbnQg
dG8gY29uc3RyYWluIHNjcm9sbCBwb3NpdGlvbiBpZiB0aGF0IGlzIHRoZQorICAgICAgICBtb2Rl
IHdlIGFyZSBpbi4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y3VzdG9tUG9zaXRp
b25Gb3JWaXNpYmxlUmVjdENvbXB1dGF0aW9uKToKKwogMjAxMy0xMS0xMyAgQmVuamFtaW4gUG91
bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgUmVzb3VyY2VIYW5k
bGVDRiB0byB1c2UgdGhlIGRpZFJlY2VpdmVCdWZmZXIoKSBjYWxsYmFjawpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gMTU5MjA4KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQzLDE2ICsxNTQzLDIyIEBA
IExheW91dFJlY3QgRnJhbWVWaWV3Ojp2aWV3cG9ydENvbnN0cmFpbmUKICAgICByZXR1cm4gdmll
d3BvcnRSZWN0OwogfQogCi1JbnRTaXplIEZyYW1lVmlldzo6c2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQ
b3NpdGlvbihjb25zdCBJbnRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QsIGNvbnN0IEludFNpemUm
IHRvdGFsQ29udGVudHNTaXplLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0
IEludFBvaW50JiBzY3JvbGxPcmlnaW4sIGZsb2F0IGZyYW1lU2NhbGVGYWN0b3IsIGJvb2wgZml4
ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFtZSwgaW50IGhlYWRlckhlaWdodCwgaW50IGZv
b3RlckhlaWdodCkKK0ludFNpemUgRnJhbWVWaWV3OjpzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0
aW9uKGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdG90
YWxDb250ZW50c1NpemUsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgSW50
UG9pbnQmIHNjcm9sbE9yaWdpbiwgZmxvYXQgZnJhbWVTY2FsZUZhY3RvciwgYm9vbCBmaXhlZEVs
ZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lLCBTY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVu
dHMgYmVoYXZpb3JGb3JGaXhlZCwgaW50IGhlYWRlckhlaWdodCwgaW50IGZvb3RlckhlaWdodCkK
IHsKLSAgICBJbnRQb2ludCBjb25zdHJhaW5lZFBvc2l0aW9uID0gU2Nyb2xsYWJsZUFyZWE6OmNv
bnN0cmFpblNjcm9sbFBvc2l0aW9uRm9yT3ZlcmhhbmcodmlzaWJsZUNvbnRlbnRSZWN0LCB0b3Rh
bENvbnRlbnRzU2l6ZSwgc2Nyb2xsUG9zaXRpb24sIHNjcm9sbE9yaWdpbiwgaGVhZGVySGVpZ2h0
LCBmb290ZXJIZWlnaHQpOworICAgIEludFBvaW50IHBvc2l0aW9uOworICAgIGlmIChiZWhhdmlv
ckZvckZpeGVkID09IFN0aWNrVG9Eb2N1bWVudEJvdW5kcykKKyAgICAgICAgcG9zaXRpb24gPSBT
Y3JvbGxhYmxlQXJlYTo6Y29uc3RyYWluU2Nyb2xsUG9zaXRpb25Gb3JPdmVyaGFuZyh2aXNpYmxl
Q29udGVudFJlY3QsIHRvdGFsQ29udGVudHNTaXplLCBzY3JvbGxQb3NpdGlvbiwgc2Nyb2xsT3Jp
Z2luLCBoZWFkZXJIZWlnaHQsIGZvb3RlckhlaWdodCk7CisgICAgZWxzZSB7CisgICAgICAgIHBv
c2l0aW9uID0gc2Nyb2xsUG9zaXRpb247CisgICAgICAgIHBvc2l0aW9uLnNldFkocG9zaXRpb24u
eSgpIC0gaGVhZGVySGVpZ2h0KTsKKyAgICB9CiAKICAgICBJbnRTaXplIG1heFNpemUgPSB0b3Rh
bENvbnRlbnRzU2l6ZSAtIHZpc2libGVDb250ZW50UmVjdC5zaXplKCk7CiAKICAgICBmbG9hdCBk
cmFnRmFjdG9yWCA9IChmaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lIHx8ICFtYXhT
aXplLndpZHRoKCkpID8gMSA6ICh0b3RhbENvbnRlbnRzU2l6ZS53aWR0aCgpIC0gdmlzaWJsZUNv
bnRlbnRSZWN0LndpZHRoKCkgKiBmcmFtZVNjYWxlRmFjdG9yKSAvIG1heFNpemUud2lkdGgoKTsK
ICAgICBmbG9hdCBkcmFnRmFjdG9yWSA9IChmaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0Zy
YW1lIHx8ICFtYXhTaXplLmhlaWdodCgpKSA/IDEgOiAodG90YWxDb250ZW50c1NpemUuaGVpZ2h0
KCkgLSB2aXNpYmxlQ29udGVudFJlY3QuaGVpZ2h0KCkgKiBmcmFtZVNjYWxlRmFjdG9yKSAvIG1h
eFNpemUuaGVpZ2h0KCk7CiAKLSAgICByZXR1cm4gSW50U2l6ZShjb25zdHJhaW5lZFBvc2l0aW9u
LngoKSAqIGRyYWdGYWN0b3JYIC8gZnJhbWVTY2FsZUZhY3RvciwgY29uc3RyYWluZWRQb3NpdGlv
bi55KCkgKiBkcmFnRmFjdG9yWSAvIGZyYW1lU2NhbGVGYWN0b3IpOworICAgIHJldHVybiBJbnRT
aXplKHBvc2l0aW9uLngoKSAqIGRyYWdGYWN0b3JYIC8gZnJhbWVTY2FsZUZhY3RvciwgcG9zaXRp
b24ueSgpICogZHJhZ0ZhY3RvclkgLyBmcmFtZVNjYWxlRmFjdG9yKTsKIH0KIAogSW50U2l6ZSBG
cmFtZVZpZXc6OnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24oKSBjb25zdApAQCAtMTU2Miw3
ICsxNTY4LDggQEAgSW50U2l6ZSBGcmFtZVZpZXc6OnNjcm9sbE9mZnNldEZvckZpeGVkUAogICAg
IEludFBvaW50IHNjcm9sbFBvc2l0aW9uID0gdGhpcy0+c2Nyb2xsUG9zaXRpb24oKTsKICAgICBJ
bnRQb2ludCBzY3JvbGxPcmlnaW4gPSB0aGlzLT5zY3JvbGxPcmlnaW4oKTsKICAgICBmbG9hdCBm
cmFtZVNjYWxlRmFjdG9yID0gZnJhbWUoKS5mcmFtZVNjYWxlRmFjdG9yKCk7Ci0gICAgcmV0dXJu
IHNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24odmlzaWJsZUNvbnRlbnRSZWN0LCB0b3RhbENv
bnRlbnRzU2l6ZSwgc2Nyb2xsUG9zaXRpb24sIHNjcm9sbE9yaWdpbiwgZnJhbWVTY2FsZUZhY3Rv
ciwgZml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFtZSgpLCBoZWFkZXJIZWlnaHQoKSwg
Zm9vdGVySGVpZ2h0KCkpOworICAgIFNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cyBiZWhh
dmlvckZvckZpeGVkID0gc2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzKCk7CisgICAgcmV0
dXJuIHNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24odmlzaWJsZUNvbnRlbnRSZWN0LCB0b3Rh
bENvbnRlbnRzU2l6ZSwgc2Nyb2xsUG9zaXRpb24sIHNjcm9sbE9yaWdpbiwgZnJhbWVTY2FsZUZh
Y3RvciwgZml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFtZSgpLCBiZWhhdmlvckZvckZp
eGVkLCBoZWFkZXJIZWlnaHQoKSwgZm9vdGVySGVpZ2h0KCkpOwogfQogICAgIAogSW50UG9pbnQg
RnJhbWVWaWV3OjptaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdApAQCAtNDE1Myw2ICs0MTYw
LDEyIEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRTY3JvbGxQaW5uaW5nQmVoYXZpb3IKICAgICB1cGRh
dGVTY3JvbGxiYXJzKHNjcm9sbE9mZnNldCgpKTsKIH0KIAorU2Nyb2xsQmVoYXZpb3JGb3JGaXhl
ZEVsZW1lbnRzIEZyYW1lVmlldzo6c2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzKCkgY29u
c3QKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LiBUaGlzIHNob3VsZCBjb25zdWx0IGEgc2V0
dGluZyB0aGF0IGRvZXMgbm90IHlldCBleGlzdC4KKyAgICByZXR1cm4gU3RpY2tUb0RvY3VtZW50
Qm91bmRzOworfQorCiBSZW5kZXJWaWV3KiBGcmFtZVZpZXc6OnJlbmRlclZpZXcoKSBjb25zdAog
ewogICAgIHJldHVybiBmcmFtZSgpLmNvbnRlbnRSZW5kZXJlcigpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5oCShyZXZpc2lvbiAxNTkyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsNyArMjMzLDcgQEAgcHVibGljOgogICAg
IC8vIGFuZCBhZGp1c3RpbmcgZm9yIHBhZ2Ugc2NhbGUuCiAgICAgSW50U2l6ZSBzY3JvbGxPZmZz
ZXRGb3JGaXhlZFBvc2l0aW9uKCkgY29uc3Q7CiAgICAgLy8gU3RhdGljIGZ1bmN0aW9uIGNhbiBi
ZSBjYWxsZWQgZnJvbSBhbm90aGVyIHRocmVhZC4KLSAgICBzdGF0aWMgSW50U2l6ZSBzY3JvbGxP
ZmZzZXRGb3JGaXhlZFBvc2l0aW9uKGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50UmVjdCwg
Y29uc3QgSW50U2l6ZSYgdG90YWxDb250ZW50c1NpemUsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQ
b3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIHNjcm9sbE9yaWdpbiwgZmxvYXQgZnJhbWVTY2FsZUZh
Y3RvciwgYm9vbCBmaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lLCBpbnQgaGVhZGVy
SGVpZ2h0LCBpbnQgZm9vdGVySGVpZ2h0KTsKKyAgICBzdGF0aWMgSW50U2l6ZSBzY3JvbGxPZmZz
ZXRGb3JGaXhlZFBvc2l0aW9uKGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50UmVjdCwgY29u
c3QgSW50U2l6ZSYgdG90YWxDb250ZW50c1NpemUsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3Np
dGlvbiwgY29uc3QgSW50UG9pbnQmIHNjcm9sbE9yaWdpbiwgZmxvYXQgZnJhbWVTY2FsZUZhY3Rv
ciwgYm9vbCBmaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lLCBTY3JvbGxCZWhhdmlv
ckZvckZpeGVkRWxlbWVudHMgYmVoYXZpb3JGb3JGaXhlZCwgaW50IGhlYWRlckhlaWdodCwgaW50
IGZvb3RlckhlaWdodCk7CiAKICAgICBib29sIGZpeGVkRWxlbWVudHNMYXlvdXRSZWxhdGl2ZVRv
RnJhbWUoKSBjb25zdDsKIApAQCAtNDI1LDYgKzQyNSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
c2V0U2Nyb2xsUGlubmluZ0JlaGF2aW9yKFNjcm9sbFBpbm5pbmdCZWhhdmlvcik7CiAKKyAgICBT
Y3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHMgc2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1l
bnRzKCkgY29uc3Q7CisKICAgICB2b2lkIHVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOwogICAgIHZv
aWQgZGlkQWRkV2lkZ2V0VG9SZW5kZXJUcmVlKFdpZGdldCYpOwogICAgIHZvaWQgd2lsbFJlbW92
ZVdpZGdldEZyb21SZW5kZXJUcmVlKFdpZGdldCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGUuY3BwCShyZXZpc2lvbiAxNTkyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2
ICs1OCw3IEBAIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsaW5nU3QKICAgICAs
IG1fcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb25SZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsKGZh
bHNlKQogICAgICwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJBdXRvKQogICAg
ICwgbV92ZXJ0aWNhbFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyQXV0bykKKyAgICAsIG1fYmVoYXZp
b3JGb3JGaXhlZChTdGlja1RvRG9jdW1lbnRCb3VuZHMpCiAgICAgLCBtX2hlYWRlckhlaWdodCgw
KQogICAgICwgbV9mb290ZXJIZWlnaHQoMCkKIHsKQEAgLTgyLDYgKzgzLDcgQEAgU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxpbmdTdAogICAgICwgbV9yZXF1ZXN0ZWRTY3JvbGxQ
b3NpdGlvblJlcHJlc2VudHNQcm9ncmFtbWF0aWNTY3JvbGwoc3RhdGVOb2RlLnJlcXVlc3RlZFNj
cm9sbFBvc2l0aW9uUmVwcmVzZW50c1Byb2dyYW1tYXRpY1Njcm9sbCgpKQogICAgICwgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyTW9kZShzdGF0ZU5vZGUuaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoKSkK
ICAgICAsIG1fdmVydGljYWxTY3JvbGxiYXJNb2RlKHN0YXRlTm9kZS52ZXJ0aWNhbFNjcm9sbGJh
ck1vZGUoKSkKKyAgICAsIG1fYmVoYXZpb3JGb3JGaXhlZChzdGF0ZU5vZGUuc2Nyb2xsQmVoYXZp
b3JGb3JGaXhlZEVsZW1lbnRzKCkpCiAgICAgLCBtX3JlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKHN0
YXRlTm9kZS5yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbigpKQogICAgICwgbV9zY3JvbGxPcmlnaW4o
c3RhdGVOb2RlLnNjcm9sbE9yaWdpbigpKQogICAgICwgbV9oZWFkZXJIZWlnaHQoc3RhdGVOb2Rl
LmhlYWRlckhlaWdodCgpKQpAQCAtMjIyLDYgKzIyNCwxNiBAQCB2b2lkIFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZTo6c2V0VmVyCiAgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnNldEhhc0No
YW5nZWRQcm9wZXJ0aWVzKHRydWUpOwogfQogCit2b2lkIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZTo6c2V0U2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzKFNjcm9sbEJlaGF2aW9yRm9y
Rml4ZWRFbGVtZW50cyBiZWhhdmlvckZvckZpeGVkKQoreworICAgIGlmIChtX2JlaGF2aW9yRm9y
Rml4ZWQgPT0gYmVoYXZpb3JGb3JGaXhlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9iZWhh
dmlvckZvckZpeGVkID0gYmVoYXZpb3JGb3JGaXhlZDsKKyAgICBzZXRQcm9wZXJ0eUNoYW5nZWQo
QmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzKTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c2V0
SGFzQ2hhbmdlZFByb3BlcnRpZXModHJ1ZSk7Cit9CisKIHZvaWQgU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlOjpzZXRSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgcmVx
dWVzdGVkU2Nyb2xsUG9zaXRpb24sIGJvb2wgcmVwcmVzZW50c1Byb2dyYW1tYXRpY1Njcm9sbCkK
IHsKICAgICBtX3JlcXVlc3RlZFNjcm9sbFBvc2l0aW9uID0gcmVxdWVzdGVkU2Nyb2xsUG9zaXRp
b247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAkocmV2aXNpb24gMTU5MjA4KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDggQEAgcHVibGljOgogICAgICAgICBGb290ZXJI
ZWlnaHQsCiAgICAgICAgIEhlYWRlckxheWVyLAogICAgICAgICBGb290ZXJMYXllciwKLSAgICAg
ICAgUGFpbnRlckZvclNjcm9sbGJhcgorICAgICAgICBQYWludGVyRm9yU2Nyb2xsYmFyLAorICAg
ICAgICBCZWhhdmlvckZvckZpeGVkRWxlbWVudHMKICAgICB9OwogCiAgICAgY29uc3QgSW50UmVj
dCYgdmlld3BvcnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydFJlY3Q7IH0KQEAgLTEw
Nyw2ICsxMDgsOSBAQCBwdWJsaWM6CiAgICAgU2Nyb2xsYmFyTW9kZSB2ZXJ0aWNhbFNjcm9sbGJh
ck1vZGUoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyTW9kZTsgfQogICAgIHZv
aWQgc2V0VmVydGljYWxTY3JvbGxiYXJNb2RlKFNjcm9sbGJhck1vZGUpOwogCisgICAgU2Nyb2xs
QmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzIHNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cygp
IGNvbnN0IHsgcmV0dXJuIG1fYmVoYXZpb3JGb3JGaXhlZDsgfQorICAgIHZvaWQgc2V0U2Nyb2xs
QmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzKFNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cyk7
CisKICAgICBjb25zdCBJbnRQb2ludCYgcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3JlcXVlc3RlZFNjcm9sbFBvc2l0aW9uOyB9CiAgICAgdm9pZCBzZXRSZXF1ZXN0
ZWRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYsIGJvb2wgcmVwcmVzZW50c1Byb2dyYW1t
YXRpY1Njcm9sbCk7CiAKQEAgLTE4Miw2ICsxODYsOCBAQCBwcml2YXRlOgogICAgIFNjcm9sbGJh
ck1vZGUgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZTsKICAgICBTY3JvbGxiYXJNb2RlIG1fdmVy
dGljYWxTY3JvbGxiYXJNb2RlOwogCisgICAgU2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRz
IG1fYmVoYXZpb3JGb3JGaXhlZDsKKwogICAgIEludFBvaW50IG1fcmVxdWVzdGVkU2Nyb2xsUG9z
aXRpb247CiAgICAgSW50UG9pbnQgbV9zY3JvbGxPcmlnaW47CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZS5jcHAJKHJldmlzaW9uIDE1OTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNiArNDUsNyBAQCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsaW5nVHJlCiAg
ICAgLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJBdXRvKQogICAgICwgbV9oZWFk
ZXJIZWlnaHQoMCkKICAgICAsIG1fZm9vdGVySGVpZ2h0KDApCisgICAgLCBtX2JlaGF2aW9yRm9y
Rml4ZWQoU3RpY2tUb0RvY3VtZW50Qm91bmRzKQogewogfQogCkBAIC05OSw2ICsxMDAsOSBAQCB2
b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjp1cGRhdGVCCiAKICAgICBpZiAoc3RhdGUt
Pmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OkZvb3Rlckhl
aWdodCkpCiAgICAgICAgIG1fZm9vdGVySGVpZ2h0ID0gc3RhdGUtPmZvb3RlckhlaWdodCgpOwor
CisgICAgaWYgKHN0YXRlLT5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlOjpCZWhhdmlvckZvckZpeGVkRWxlbWVudHMpKQorICAgICAgICBtX2JlaGF2aW9yRm9y
Rml4ZWQgPSBzdGF0ZS0+c2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzKCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaAkocmV2aXNpb24g
MTU5MjA4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsOCBAQCBwcm90ZWN0ZWQ6
CiAgICAgaW50IGhlYWRlckhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVhZGVySGVpZ2h0OyB9
CiAgICAgaW50IGZvb3RlckhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9vdGVySGVpZ2h0OyB9
CiAKKyAgICBTY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHMgc2Nyb2xsQmVoYXZpb3JGb3JG
aXhlZEVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9iZWhhdmlvckZvckZpeGVkOyB9CisKIHBy
aXZhdGU6CiAgICAgSW50UmVjdCBtX3ZpZXdwb3J0UmVjdDsKICAgICBJbnRTaXplIG1fdG90YWxD
b250ZW50c1NpemU7CkBAIC0xMDMsNiArMTA1LDggQEAgcHJpdmF0ZToKIAogICAgIGludCBtX2hl
YWRlckhlaWdodDsKICAgICBpbnQgbV9mb290ZXJIZWlnaHQ7CisKKyAgICBTY3JvbGxCZWhhdmlv
ckZvckZpeGVkRWxlbWVudHMgbV9iZWhhdmlvckZvckZpeGVkOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmgJKHJldmlzaW9uIDE1OTIwOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRv
ck1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNiArMTI2LDggQEAgcHJpdmF0ZToKICAgICB2
b2lkIHNldFNjcm9sbGJhclBhaW50ZXJzRnJvbVNjcm9sbGJhcnNGb3JOb2RlKFNjcm9sbGJhciog
dmVydGljYWxTY3JvbGxiYXIsIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhciwgU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CiAgICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJl
Z2lvbkZvck5vZGUoY29uc3QgUmVnaW9uJiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7
CiAgICAgdm9pZCBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZSh1bnNpZ25lZCwgU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CisgICAgdm9pZCBzZXRTY3JvbGxCZWhhdmlvckZv
ckZpeGVkRWxlbWVudHNGb3JOb2RlKFNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cywgU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CisKIAogICAgIHZvaWQgdXBkYXRlTWFpbkZyYW1l
U2Nyb2xsTGF5ZXJQb3NpdGlvbigpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tCShy
ZXZpc2lvbiAxNTkyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nQ29vcmRpbmF0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4MCw2ICsxODAsNyBA
QCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpmcmFtZVZpZXdSCiAgICAgc2V0Q291bnRl
clNjcm9sbGluZ0xheWVyRm9yTm9kZShjb3VudGVyU2Nyb2xsaW5nTGF5ZXJGb3JGcmFtZVZpZXco
ZnJhbWVWaWV3KSwgbm9kZSk7CiAgICAgc2V0SGVhZGVyTGF5ZXJGb3JOb2RlKGhlYWRlckxheWVy
Rm9yRnJhbWVWaWV3KGZyYW1lVmlldyksIG5vZGUpOwogICAgIHNldEZvb3RlckxheWVyRm9yTm9k
ZShmb290ZXJMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpLCBub2RlKTsKKyAgICBzZXRTY3Jv
bGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHNGb3JOb2RlKGZyYW1lVmlldy0+c2Nyb2xsQmVoYXZp
b3JGb3JGaXhlZEVsZW1lbnRzKCksIG5vZGUpOwogfQogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yTWFjOjpzY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVB
cmVhKiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCkBA
IC0zMjIsNiArMzIzLDEyIEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNldFdoZWVs
RXYKICAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwogfQogCit2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yTWFjOjpzZXRTY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHNGb3JOb2RlKFNj
cm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cyBiZWhhdmlvckZvckZpeGVkLCBTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCit7CisgICAgbm9kZS0+c2V0U2Nyb2xsQmVoYXZpb3JG
b3JGaXhlZEVsZW1lbnRzKGJlaGF2aW9yRm9yRml4ZWQpOworICAgIHNjaGVkdWxlVHJlZVN0YXRl
Q29tbWl0KCk7Cit9CisKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNldFNob3VsZFVw
ZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9sbGluZ1Jl
YXNvbnMgcmVhc29ucykKIHsKICAgICBpZiAoIW1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3Rh
dGVOb2RlKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tCShyZXZp
c2lvbiAxNTkyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxNyw4ICszMTcs
OSBAQCB2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpzZXRTCiAgICAgQVNTRVJU
KCFzaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKCkpOwogICAgIG1f
c2Nyb2xsTGF5ZXIuZ2V0KCkucG9zaXRpb24gPSBDR1BvaW50TWFrZSgtcG9zaXRpb24ueCgpICsg
c2Nyb2xsT3JpZ2luKCkueCgpLCAtcG9zaXRpb24ueSgpICsgc2Nyb2xsT3JpZ2luKCkueSgpKTsK
IAorICAgIFNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cyBiZWhhdmlvckZvckZpeGVkID0g
c2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzKCk7CiAgICAgSW50UG9pbnQgc2Nyb2xsT2Zm
c2V0ID0gcG9zaXRpb24gLSB0b0ludFNpemUoc2Nyb2xsT3JpZ2luKCkpOwotICAgIEludFNpemUg
c2Nyb2xsT2Zmc2V0Rm9yRml4ZWRDaGlsZHJlbiA9IEZyYW1lVmlldzo6c2Nyb2xsT2Zmc2V0Rm9y
Rml4ZWRQb3NpdGlvbih2aWV3cG9ydFJlY3QoKSwgdG90YWxDb250ZW50c1NpemUoKSwgc2Nyb2xs
T2Zmc2V0LCBzY3JvbGxPcmlnaW4oKSwgZnJhbWVTY2FsZUZhY3RvcigpLCBmYWxzZSwgaGVhZGVy
SGVpZ2h0KCksIGZvb3RlckhlaWdodCgpKTsKKyAgICBJbnRTaXplIHNjcm9sbE9mZnNldEZvckZp
eGVkQ2hpbGRyZW4gPSBGcmFtZVZpZXc6OnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24odmll
d3BvcnRSZWN0KCksIHRvdGFsQ29udGVudHNTaXplKCksIHNjcm9sbE9mZnNldCwgc2Nyb2xsT3Jp
Z2luKCksIGZyYW1lU2NhbGVGYWN0b3IoKSwgZmFsc2UsIGJlaGF2aW9yRm9yRml4ZWQsIGhlYWRl
ckhlaWdodCgpLCBmb290ZXJIZWlnaHQoKSk7CiAgICAgaWYgKG1fY291bnRlclNjcm9sbGluZ0xh
eWVyKQogICAgICAgICBtX2NvdW50ZXJTY3JvbGxpbmdMYXllci5nZXQoKS5wb3NpdGlvbiA9IEZs
b2F0UG9pbnQoc2Nyb2xsT2Zmc2V0Rm9yRml4ZWRDaGlsZHJlbik7CiAKQEAgLTMyNyw3ICszMjgs
NyBAQCB2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpzZXRTCiAgICAgLy8gdGhl
biB3ZSBzaG91bGQgcmVjb21wdXRlIHNjcm9sbE9mZnNldEZvckZpeGVkQ2hpbGRyZW4gZm9yIHRo
ZSBiYW5uZXIgd2l0aCBhIHNjYWxlIGZhY3RvciBvZiAxLgogICAgIGZsb2F0IGhvcml6b250YWxT
Y3JvbGxPZmZzZXRGb3JCYW5uZXIgPSBzY3JvbGxPZmZzZXRGb3JGaXhlZENoaWxkcmVuLndpZHRo
KCk7CiAgICAgaWYgKGZyYW1lU2NhbGVGYWN0b3IoKSAhPSAxKQotICAgICAgICBob3Jpem9udGFs
U2Nyb2xsT2Zmc2V0Rm9yQmFubmVyID0gRnJhbWVWaWV3OjpzY3JvbGxPZmZzZXRGb3JGaXhlZFBv
c2l0aW9uKHZpZXdwb3J0UmVjdCgpLCB0b3RhbENvbnRlbnRzU2l6ZSgpLCBzY3JvbGxPZmZzZXQs
IHNjcm9sbE9yaWdpbigpLCAxLCBmYWxzZSwgaGVhZGVySGVpZ2h0KCksIGZvb3RlckhlaWdodCgp
KS53aWR0aCgpOworICAgICAgICBob3Jpem9udGFsU2Nyb2xsT2Zmc2V0Rm9yQmFubmVyID0gRnJh
bWVWaWV3OjpzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKHZpZXdwb3J0UmVjdCgpLCB0b3Rh
bENvbnRlbnRzU2l6ZSgpLCBzY3JvbGxPZmZzZXQsIHNjcm9sbE9yaWdpbigpLCAxLCBmYWxzZSwg
YmVoYXZpb3JGb3JGaXhlZCwgaGVhZGVySGVpZ2h0KCksIGZvb3RlckhlaWdodCgpKS53aWR0aCgp
OwogCiAgICAgaWYgKG1faGVhZGVyTGF5ZXIpCiAgICAgICAgIG1faGVhZGVyTGF5ZXIuZ2V0KCku
cG9zaXRpb24gPSBGbG9hdFBvaW50KGhvcml6b250YWxTY3JvbGxPZmZzZXRGb3JCYW5uZXIsIDAp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVHlwZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxUeXBlcy5oCShyZXZpc2lvbiAxNTky
MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxUeXBlcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzEsNiArMTcxLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGlu
VG9Ub3AsCiAgICAgICAgIFBpblRvQm90dG9tCiAgICAgfTsKKworICAgIGVudW0gU2Nyb2xsQmVo
YXZpb3JGb3JGaXhlZEVsZW1lbnRzIHsKKyAgICAgICAgU3RpY2tUb0RvY3VtZW50Qm91bmRzLAor
ICAgICAgICBTdGlja1RvV2luZG93Qm91bmRzCisgICAgfTsKIH0KIAogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cAkocmV2aXNpb24gMTU5MjA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQ29tcG9zaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNyw3ICszMzcsMTAgQEAgdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmN1c3RvbVBvc2l0aQogICAgICAgICByZXR1cm47CiAK
ICAgICBGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uID0gLXBvc2l0aW9uOwotICAgIHNjcm9sbFBv
c2l0aW9uID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmNvbnN0cmFpblNjcm9sbFBvc2l0aW9u
Rm9yT3Zlcmhhbmcocm91bmRlZEludFBvaW50KHNjcm9sbFBvc2l0aW9uKSk7CisKKyAgICBpZiAo
bV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cygp
ID09IFN0aWNrVG9Eb2N1bWVudEJvdW5kcykKKyAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSBtX3Jl
bmRlclZpZXcuZnJhbWVWaWV3KCkuY29uc3RyYWluU2Nyb2xsUG9zaXRpb25Gb3JPdmVyaGFuZyhy
b3VuZGVkSW50UG9pbnQoc2Nyb2xsUG9zaXRpb24pKTsKKwogICAgIHBvc2l0aW9uID0gLXNjcm9s
bFBvc2l0aW9uOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216861</attachid>
            <date>2013-11-13 14:25:20 -0800</date>
            <delta_ts>2013-11-13 14:27:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>fixed-only-for-review-3.txt</filename>
            <type>text/plain</type>
            <size>18182</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTIzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDEzLTExLTEzICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBuZXcgbW9kZSB3aGVyZSBm
aXhlZCBlbGVtZW50cyBkb24ndCBjb25zdHJhaW4gdGhlaXIgcG9zaXRpb25zIGR1cmluZyBhCisg
ICAgICAgIHJ1YmJlciBiYW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjQyNjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgZW51bSBjYWxsZWQgU2Nyb2xsQmVoYXZp
b3JGb3JGaXhlZEVsZW1lbnRzLCB3aGljaCBoYXMKKyAgICAgICAgdHdvIHZhbHVlZCwgU3RpY2tU
b0RvY3VtZW50Qm91bmRzIG9yIFN0aWNrVG9XaW5kb3dCb3VuZHMuIFN0aWNrVG9Eb2N1bWVudAor
ICAgICAgICBjb3VuZHMgY29ycmVzcG9uZHMgdG8gb3VyIGN1cnJlbnQgYmVoYXZpb3IsIHdoZXJl
IGZpeGVkIGVsZW1lbnRzIGNvbnRzcmFpbiAKKyAgICAgICAgdGhlaXIgcG9zaXRpb25zIGR1cmlu
ZyBhIHJ1YmJlci1iYW5kIHNvIHRoYXQgdGhleSBzdGF5IHN0dWNrIHRvIHRoZSBkb2N1bWVudC4K
KyAgICAgICAgVGhlIG5ldyBtb2RlLCBTdGlja1RvV2luZG93Qm91bmRzLCB3aWxsIGNhdXNlIGZp
eGVkIGVsZW1ldG5zIHRvIGFsd2F5cyBzdGF5CisgICAgICAgIGZpeGVkIHJlbGF0aXZlIHRvIHRo
ZSB3aW5kb3cuCisKKyAgICAgICAgc2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbigpIG5vdyB0
YWtlcyBhIG5ldyBwYXJhbWV0ZXIgZm9yIHRoZSBmaXhlZCBiZWhhdmlvcgorICAgICAgICBzbyB0
aGF0IGl0IGtub3dzIHdoZXRoZXIgb3Igbm90IHRvIGNvbnN0cmFpbiB0aGUgcG9zaXRpb24uCisg
ICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
OjpzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKToKKyAgICAgICAgCisgICAgICAgIFJpZ2h0
IG5vdywganVzdCByZXR1cm4gY3VycmVudCBiZWhhdmlvciB3aXRoIFN0aWNrVG9Eb2N1bWVudEJv
dW5kcy4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsQmVoYXZpb3JGb3JGaXhl
ZEVsZW1lbnRzKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorCisgICAgICAgIFRoZSBz
Y3JvbGxpbmcgdGhyZWFkIG5lZWRzIHRvIGtub3cgYWJvdXQgdGhlIGZpeGVkIGVsZW1lbnQgc2Ny
b2xsIGJlYWh2aW9yLAorICAgICAgICBzbyB0aGlzIGNvZGUgbWFrZXMgU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlcyBrZWVwIHRyYWNrIG9mIHRoYXQgCisgICAgICAgIGluZm9ybWF0aW9uIHRv
IHBhc3Mgb3ZlciB0byB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRTY3Jv
bGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHMpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6dXBkYXRlQmVmb3JlQ2hpbGRy
ZW4pOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6c2Nyb2xs
QmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMv
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMv
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdD
b29yZGluYXRvck1hYzo6ZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzZXRTY3JvbGxCZWhhdmlvckZvckZpeGVk
RWxlbWVudHNGb3JOb2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZU1hYzo6c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbik6CisgICAgICAgIAorICAg
ICAgICBIZXJlIGlzIHRoZSBuZXcgZW51bS4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxUeXBl
cy5oOgorICAgICAgICAKKyAgICAgICAgQW5vdGhlciBwbGFjZSB3aGVyZSB3ZSBvbmx5IHdhbnQg
dG8gY29uc3RyYWluIHNjcm9sbCBwb3NpdGlvbiBpZiB0aGF0IGlzIHRoZQorICAgICAgICBtb2Rl
IHdlIGFyZSBpbi4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y3VzdG9tUG9zaXRp
b25Gb3JWaXNpYmxlUmVjdENvbXB1dGF0aW9uKToKKwogMjAxMy0xMS0xMyAgQmVuamFtaW4gUG91
bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgUmVzb3VyY2VIYW5k
bGVDRiB0byB1c2UgdGhlIGRpZFJlY2VpdmVCdWZmZXIoKSBjYWxsYmFjawpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gMTU5MjA4KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQzLDE2ICsxNTQzLDIyIEBA
IExheW91dFJlY3QgRnJhbWVWaWV3Ojp2aWV3cG9ydENvbnN0cmFpbmUKICAgICByZXR1cm4gdmll
d3BvcnRSZWN0OwogfQogCi1JbnRTaXplIEZyYW1lVmlldzo6c2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQ
b3NpdGlvbihjb25zdCBJbnRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QsIGNvbnN0IEludFNpemUm
IHRvdGFsQ29udGVudHNTaXplLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0
IEludFBvaW50JiBzY3JvbGxPcmlnaW4sIGZsb2F0IGZyYW1lU2NhbGVGYWN0b3IsIGJvb2wgZml4
ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFtZSwgaW50IGhlYWRlckhlaWdodCwgaW50IGZv
b3RlckhlaWdodCkKK0ludFNpemUgRnJhbWVWaWV3OjpzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0
aW9uKGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdG90
YWxDb250ZW50c1NpemUsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgSW50
UG9pbnQmIHNjcm9sbE9yaWdpbiwgZmxvYXQgZnJhbWVTY2FsZUZhY3RvciwgYm9vbCBmaXhlZEVs
ZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lLCBTY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVu
dHMgYmVoYXZpb3JGb3JGaXhlZCwgaW50IGhlYWRlckhlaWdodCwgaW50IGZvb3RlckhlaWdodCkK
IHsKLSAgICBJbnRQb2ludCBjb25zdHJhaW5lZFBvc2l0aW9uID0gU2Nyb2xsYWJsZUFyZWE6OmNv
bnN0cmFpblNjcm9sbFBvc2l0aW9uRm9yT3ZlcmhhbmcodmlzaWJsZUNvbnRlbnRSZWN0LCB0b3Rh
bENvbnRlbnRzU2l6ZSwgc2Nyb2xsUG9zaXRpb24sIHNjcm9sbE9yaWdpbiwgaGVhZGVySGVpZ2h0
LCBmb290ZXJIZWlnaHQpOworICAgIEludFBvaW50IHBvc2l0aW9uOworICAgIGlmIChiZWhhdmlv
ckZvckZpeGVkID09IFN0aWNrVG9Eb2N1bWVudEJvdW5kcykKKyAgICAgICAgcG9zaXRpb24gPSBT
Y3JvbGxhYmxlQXJlYTo6Y29uc3RyYWluU2Nyb2xsUG9zaXRpb25Gb3JPdmVyaGFuZyh2aXNpYmxl
Q29udGVudFJlY3QsIHRvdGFsQ29udGVudHNTaXplLCBzY3JvbGxQb3NpdGlvbiwgc2Nyb2xsT3Jp
Z2luLCBoZWFkZXJIZWlnaHQsIGZvb3RlckhlaWdodCk7CisgICAgZWxzZSB7CisgICAgICAgIHBv
c2l0aW9uID0gc2Nyb2xsUG9zaXRpb247CisgICAgICAgIHBvc2l0aW9uLnNldFkocG9zaXRpb24u
eSgpIC0gaGVhZGVySGVpZ2h0KTsKKyAgICB9CiAKICAgICBJbnRTaXplIG1heFNpemUgPSB0b3Rh
bENvbnRlbnRzU2l6ZSAtIHZpc2libGVDb250ZW50UmVjdC5zaXplKCk7CiAKICAgICBmbG9hdCBk
cmFnRmFjdG9yWCA9IChmaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lIHx8ICFtYXhT
aXplLndpZHRoKCkpID8gMSA6ICh0b3RhbENvbnRlbnRzU2l6ZS53aWR0aCgpIC0gdmlzaWJsZUNv
bnRlbnRSZWN0LndpZHRoKCkgKiBmcmFtZVNjYWxlRmFjdG9yKSAvIG1heFNpemUud2lkdGgoKTsK
ICAgICBmbG9hdCBkcmFnRmFjdG9yWSA9IChmaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0Zy
YW1lIHx8ICFtYXhTaXplLmhlaWdodCgpKSA/IDEgOiAodG90YWxDb250ZW50c1NpemUuaGVpZ2h0
KCkgLSB2aXNpYmxlQ29udGVudFJlY3QuaGVpZ2h0KCkgKiBmcmFtZVNjYWxlRmFjdG9yKSAvIG1h
eFNpemUuaGVpZ2h0KCk7CiAKLSAgICByZXR1cm4gSW50U2l6ZShjb25zdHJhaW5lZFBvc2l0aW9u
LngoKSAqIGRyYWdGYWN0b3JYIC8gZnJhbWVTY2FsZUZhY3RvciwgY29uc3RyYWluZWRQb3NpdGlv
bi55KCkgKiBkcmFnRmFjdG9yWSAvIGZyYW1lU2NhbGVGYWN0b3IpOworICAgIHJldHVybiBJbnRT
aXplKHBvc2l0aW9uLngoKSAqIGRyYWdGYWN0b3JYIC8gZnJhbWVTY2FsZUZhY3RvciwgcG9zaXRp
b24ueSgpICogZHJhZ0ZhY3RvclkgLyBmcmFtZVNjYWxlRmFjdG9yKTsKIH0KIAogSW50U2l6ZSBG
cmFtZVZpZXc6OnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24oKSBjb25zdApAQCAtMTU2Miw3
ICsxNTY4LDggQEAgSW50U2l6ZSBGcmFtZVZpZXc6OnNjcm9sbE9mZnNldEZvckZpeGVkUAogICAg
IEludFBvaW50IHNjcm9sbFBvc2l0aW9uID0gdGhpcy0+c2Nyb2xsUG9zaXRpb24oKTsKICAgICBJ
bnRQb2ludCBzY3JvbGxPcmlnaW4gPSB0aGlzLT5zY3JvbGxPcmlnaW4oKTsKICAgICBmbG9hdCBm
cmFtZVNjYWxlRmFjdG9yID0gZnJhbWUoKS5mcmFtZVNjYWxlRmFjdG9yKCk7Ci0gICAgcmV0dXJu
IHNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24odmlzaWJsZUNvbnRlbnRSZWN0LCB0b3RhbENv
bnRlbnRzU2l6ZSwgc2Nyb2xsUG9zaXRpb24sIHNjcm9sbE9yaWdpbiwgZnJhbWVTY2FsZUZhY3Rv
ciwgZml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFtZSgpLCBoZWFkZXJIZWlnaHQoKSwg
Zm9vdGVySGVpZ2h0KCkpOworICAgIFNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cyBiZWhh
dmlvckZvckZpeGVkID0gc2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzKCk7CisgICAgcmV0
dXJuIHNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24odmlzaWJsZUNvbnRlbnRSZWN0LCB0b3Rh
bENvbnRlbnRzU2l6ZSwgc2Nyb2xsUG9zaXRpb24sIHNjcm9sbE9yaWdpbiwgZnJhbWVTY2FsZUZh
Y3RvciwgZml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFtZSgpLCBiZWhhdmlvckZvckZp
eGVkLCBoZWFkZXJIZWlnaHQoKSwgZm9vdGVySGVpZ2h0KCkpOwogfQogICAgIAogSW50UG9pbnQg
RnJhbWVWaWV3OjptaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdApAQCAtNDE1Myw2ICs0MTYw
LDEyIEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRTY3JvbGxQaW5uaW5nQmVoYXZpb3IKICAgICB1cGRh
dGVTY3JvbGxiYXJzKHNjcm9sbE9mZnNldCgpKTsKIH0KIAorU2Nyb2xsQmVoYXZpb3JGb3JGaXhl
ZEVsZW1lbnRzIEZyYW1lVmlldzo6c2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzKCkgY29u
c3QKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LiBUaGlzIHNob3VsZCBjb25zdWx0IGEgc2V0
dGluZyB0aGF0IGRvZXMgbm90IHlldCBleGlzdC4KKyAgICByZXR1cm4gU3RpY2tUb0RvY3VtZW50
Qm91bmRzOworfQorCiBSZW5kZXJWaWV3KiBGcmFtZVZpZXc6OnJlbmRlclZpZXcoKSBjb25zdAog
ewogICAgIHJldHVybiBmcmFtZSgpLmNvbnRlbnRSZW5kZXJlcigpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5oCShyZXZpc2lvbiAxNTkyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsNyArMjMzLDcgQEAgcHVibGljOgogICAg
IC8vIGFuZCBhZGp1c3RpbmcgZm9yIHBhZ2Ugc2NhbGUuCiAgICAgSW50U2l6ZSBzY3JvbGxPZmZz
ZXRGb3JGaXhlZFBvc2l0aW9uKCkgY29uc3Q7CiAgICAgLy8gU3RhdGljIGZ1bmN0aW9uIGNhbiBi
ZSBjYWxsZWQgZnJvbSBhbm90aGVyIHRocmVhZC4KLSAgICBzdGF0aWMgSW50U2l6ZSBzY3JvbGxP
ZmZzZXRGb3JGaXhlZFBvc2l0aW9uKGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50UmVjdCwg
Y29uc3QgSW50U2l6ZSYgdG90YWxDb250ZW50c1NpemUsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQ
b3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIHNjcm9sbE9yaWdpbiwgZmxvYXQgZnJhbWVTY2FsZUZh
Y3RvciwgYm9vbCBmaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lLCBpbnQgaGVhZGVy
SGVpZ2h0LCBpbnQgZm9vdGVySGVpZ2h0KTsKKyAgICBzdGF0aWMgSW50U2l6ZSBzY3JvbGxPZmZz
ZXRGb3JGaXhlZFBvc2l0aW9uKGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50UmVjdCwgY29u
c3QgSW50U2l6ZSYgdG90YWxDb250ZW50c1NpemUsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3Np
dGlvbiwgY29uc3QgSW50UG9pbnQmIHNjcm9sbE9yaWdpbiwgZmxvYXQgZnJhbWVTY2FsZUZhY3Rv
ciwgYm9vbCBmaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lLCBTY3JvbGxCZWhhdmlv
ckZvckZpeGVkRWxlbWVudHMsIGludCBoZWFkZXJIZWlnaHQsIGludCBmb290ZXJIZWlnaHQpOwog
CiAgICAgYm9vbCBmaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lKCkgY29uc3Q7CiAK
QEAgLTQyNSw2ICs0MjUsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFNjcm9sbFBpbm5pbmdC
ZWhhdmlvcihTY3JvbGxQaW5uaW5nQmVoYXZpb3IpOwogCisgICAgU2Nyb2xsQmVoYXZpb3JGb3JG
aXhlZEVsZW1lbnRzIHNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cygpIGNvbnN0OworCiAg
ICAgdm9pZCB1cGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsKICAgICB2b2lkIGRpZEFkZFdpZGdldFRv
UmVuZGVyVHJlZShXaWRnZXQmKTsKICAgICB2b2lkIHdpbGxSZW1vdmVXaWRnZXRGcm9tUmVuZGVy
VHJlZShXaWRnZXQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcAkocmV2aXNpb24g
MTU5MjA4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQCBTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGluZ1N0CiAgICAgLCBtX3JlcXVlc3RlZFNjcm9s
bFBvc2l0aW9uUmVwcmVzZW50c1Byb2dyYW1tYXRpY1Njcm9sbChmYWxzZSkKICAgICAsIG1faG9y
aXpvbnRhbFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyQXV0bykKICAgICAsIG1fdmVydGljYWxTY3Jv
bGxiYXJNb2RlKFNjcm9sbGJhckF1dG8pCisgICAgLCBtX2JlaGF2aW9yRm9yRml4ZWQoU3RpY2tU
b0RvY3VtZW50Qm91bmRzKQogICAgICwgbV9oZWFkZXJIZWlnaHQoMCkKICAgICAsIG1fZm9vdGVy
SGVpZ2h0KDApCiB7CkBAIC04Miw2ICs4Myw3IEBAIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZTo6U2Nyb2xsaW5nU3QKICAgICAsIG1fcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb25SZXByZXNlbnRz
UHJvZ3JhbW1hdGljU2Nyb2xsKHN0YXRlTm9kZS5yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvblJlcHJl
c2VudHNQcm9ncmFtbWF0aWNTY3JvbGwoKSkKICAgICAsIG1faG9yaXpvbnRhbFNjcm9sbGJhck1v
ZGUoc3RhdGVOb2RlLmhvcml6b250YWxTY3JvbGxiYXJNb2RlKCkpCiAgICAgLCBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyTW9kZShzdGF0ZU5vZGUudmVydGljYWxTY3JvbGxiYXJNb2RlKCkpCisgICAgLCBt
X2JlaGF2aW9yRm9yRml4ZWQoc3RhdGVOb2RlLnNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50
cygpKQogICAgICwgbV9yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbihzdGF0ZU5vZGUucmVxdWVzdGVk
U2Nyb2xsUG9zaXRpb24oKSkKICAgICAsIG1fc2Nyb2xsT3JpZ2luKHN0YXRlTm9kZS5zY3JvbGxP
cmlnaW4oKSkKICAgICAsIG1faGVhZGVySGVpZ2h0KHN0YXRlTm9kZS5oZWFkZXJIZWlnaHQoKSkK
QEAgLTIyMiw2ICsyMjQsMTYgQEAgdm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNl
dFZlcgogICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zZXRIYXNDaGFuZ2VkUHJvcGVydGllcyh0
cnVlKTsKIH0KIAordm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldFNjcm9sbEJl
aGF2aW9yRm9yRml4ZWRFbGVtZW50cyhTY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHMgYmVo
YXZpb3JGb3JGaXhlZCkKK3sKKyAgICBpZiAobV9iZWhhdmlvckZvckZpeGVkID09IGJlaGF2aW9y
Rm9yRml4ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fYmVoYXZpb3JGb3JGaXhlZCA9IGJl
aGF2aW9yRm9yRml4ZWQ7CisgICAgc2V0UHJvcGVydHlDaGFuZ2VkKEJlaGF2aW9yRm9yRml4ZWRF
bGVtZW50cyk7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnNldEhhc0NoYW5nZWRQcm9wZXJ0
aWVzKHRydWUpOworfQorCiB2b2lkIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0UmVx
dWVzdGVkU2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHJlcXVlc3RlZFNjcm9sbFBvc2l0
aW9uLCBib29sIHJlcHJlc2VudHNQcm9ncmFtbWF0aWNTY3JvbGwpCiB7CiAgICAgbV9yZXF1ZXN0
ZWRTY3JvbGxQb3NpdGlvbiA9IHJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlLmgJKHJldmlzaW9uIDE1OTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC02OCw3ICs2OCw4IEBAIHB1YmxpYzoKICAgICAgICAgRm9vdGVySGVpZ2h0LAogICAgICAgICBI
ZWFkZXJMYXllciwKICAgICAgICAgRm9vdGVyTGF5ZXIsCi0gICAgICAgIFBhaW50ZXJGb3JTY3Jv
bGxiYXIKKyAgICAgICAgUGFpbnRlckZvclNjcm9sbGJhciwKKyAgICAgICAgQmVoYXZpb3JGb3JG
aXhlZEVsZW1lbnRzCiAgICAgfTsKIAogICAgIGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnRSZWN0OyB9CkBAIC0xMDcsNiArMTA4LDkgQEAgcHVi
bGljOgogICAgIFNjcm9sbGJhck1vZGUgdmVydGljYWxTY3JvbGxiYXJNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhck1vZGU7IH0KICAgICB2b2lkIHNldFZlcnRpY2FsU2Ny
b2xsYmFyTW9kZShTY3JvbGxiYXJNb2RlKTsKIAorICAgIFNjcm9sbEJlaGF2aW9yRm9yRml4ZWRF
bGVtZW50cyBzY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBt
X2JlaGF2aW9yRm9yRml4ZWQ7IH0KKyAgICB2b2lkIHNldFNjcm9sbEJlaGF2aW9yRm9yRml4ZWRF
bGVtZW50cyhTY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHMpOworCiAgICAgY29uc3QgSW50
UG9pbnQmIHJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0
ZWRTY3JvbGxQb3NpdGlvbjsgfQogICAgIHZvaWQgc2V0UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24o
Y29uc3QgSW50UG9pbnQmLCBib29sIHJlcHJlc2VudHNQcm9ncmFtbWF0aWNTY3JvbGwpOwogCkBA
IC0xODIsNiArMTg2LDggQEAgcHJpdmF0ZToKICAgICBTY3JvbGxiYXJNb2RlIG1faG9yaXpvbnRh
bFNjcm9sbGJhck1vZGU7CiAgICAgU2Nyb2xsYmFyTW9kZSBtX3ZlcnRpY2FsU2Nyb2xsYmFyTW9k
ZTsKIAorICAgIFNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cyBtX2JlaGF2aW9yRm9yRml4
ZWQ7CisKICAgICBJbnRQb2ludCBtX3JlcXVlc3RlZFNjcm9sbFBvc2l0aW9uOwogICAgIEludFBv
aW50IG1fc2Nyb2xsT3JpZ2luOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwCShyZXZp
c2lvbiAxNTkyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OlNjcm9sbGluZ1RyZQogICAgICwgbV92ZXJ0aWNhbFNj
cm9sbGJhck1vZGUoU2Nyb2xsYmFyQXV0bykKICAgICAsIG1faGVhZGVySGVpZ2h0KDApCiAgICAg
LCBtX2Zvb3RlckhlaWdodCgwKQorICAgICwgbV9iZWhhdmlvckZvckZpeGVkKFN0aWNrVG9Eb2N1
bWVudEJvdW5kcykKIHsKIH0KIApAQCAtOTksNiArMTAwLDkgQEAgdm9pZCBTY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZTo6dXBkYXRlQgogCiAgICAgaWYgKHN0YXRlLT5oYXNDaGFuZ2VkUHJvcGVy
dHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpGb290ZXJIZWlnaHQpKQogICAgICAgICBt
X2Zvb3RlckhlaWdodCA9IHN0YXRlLT5mb290ZXJIZWlnaHQoKTsKKworICAgIGlmIChzdGF0ZS0+
aGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6QmVoYXZpb3JG
b3JGaXhlZEVsZW1lbnRzKSkKKyAgICAgICAgbV9iZWhhdmlvckZvckZpeGVkID0gc3RhdGUtPnNj
cm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgJKHJldmlzaW9uIDE1OTIwOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDggQEAgcHJvdGVjdGVkOgogICAgIGludCBoZWFkZXJI
ZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hlYWRlckhlaWdodDsgfQogICAgIGludCBmb290ZXJI
ZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2Zvb3RlckhlaWdodDsgfQogCisgICAgU2Nyb2xsQmVo
YXZpb3JGb3JGaXhlZEVsZW1lbnRzIHNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cygpIGNv
bnN0IHsgcmV0dXJuIG1fYmVoYXZpb3JGb3JGaXhlZDsgfQorCiBwcml2YXRlOgogICAgIEludFJl
Y3QgbV92aWV3cG9ydFJlY3Q7CiAgICAgSW50U2l6ZSBtX3RvdGFsQ29udGVudHNTaXplOwpAQCAt
MTAzLDYgKzEwNSw4IEBAIHByaXZhdGU6CiAKICAgICBpbnQgbV9oZWFkZXJIZWlnaHQ7CiAgICAg
aW50IG1fZm9vdGVySGVpZ2h0OworCisgICAgU2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRz
IG1fYmVoYXZpb3JGb3JGaXhlZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1h
Yy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3Jv
bGxpbmdDb29yZGluYXRvck1hYy5oCShyZXZpc2lvbiAxNTkyMDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTI2LDYgKzEyNiw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRTY3JvbGxiYXJQ
YWludGVyc0Zyb21TY3JvbGxiYXJzRm9yTm9kZShTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFy
LCBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZSopOwogICAgIHZvaWQgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKGNvbnN0
IFJlZ2lvbiYsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSopOwogICAgIHZvaWQgc2V0V2hl
ZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUodW5zaWduZWQsIFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZSopOworICAgIHZvaWQgc2V0U2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzRm9y
Tm9kZShTY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHMsIFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZSopOworCiAKICAgICB2b2lkIHVwZGF0ZU1haW5GcmFtZVNjcm9sbExheWVyUG9zaXRp
b24oKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbQkocmV2aXNpb24gMTU5MjA4KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9y
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNiArMTgwLDcgQEAgdm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvck1hYzo6ZnJhbWVWaWV3UgogICAgIHNldENvdW50ZXJTY3JvbGxpbmdMYXllckZv
ck5vZGUoY291bnRlclNjcm9sbGluZ0xheWVyRm9yRnJhbWVWaWV3KGZyYW1lVmlldyksIG5vZGUp
OwogICAgIHNldEhlYWRlckxheWVyRm9yTm9kZShoZWFkZXJMYXllckZvckZyYW1lVmlldyhmcmFt
ZVZpZXcpLCBub2RlKTsKICAgICBzZXRGb290ZXJMYXllckZvck5vZGUoZm9vdGVyTGF5ZXJGb3JG
cmFtZVZpZXcoZnJhbWVWaWV3KSwgbm9kZSk7CisgICAgc2V0U2Nyb2xsQmVoYXZpb3JGb3JGaXhl
ZEVsZW1lbnRzRm9yTm9kZShmcmFtZVZpZXctPnNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50
cygpLCBub2RlKTsKIH0KIAogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2Nyb2xsYWJs
ZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFy
ZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQpAQCAtMzIyLDYgKzMyMywxMiBA
QCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzZXRXaGVlbEV2CiAgICAgc2NoZWR1bGVU
cmVlU3RhdGVDb21taXQoKTsKIH0KIAordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0
U2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzRm9yTm9kZShTY3JvbGxCZWhhdmlvckZvckZp
eGVkRWxlbWVudHMgYmVoYXZpb3JGb3JGaXhlZCwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
KiBub2RlKQoreworICAgIG5vZGUtPnNldFNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cyhi
ZWhhdmlvckZvckZpeGVkKTsKKyAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOworfQorCiB2
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBv
c2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zIHJlYXNvbnMpCiB7
CiAgICAgaWYgKCFtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21h
Yy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbQkocmV2aXNpb24gMTU5MjA4KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMTcsOCArMzE3LDkgQEAgdm9pZCBTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6c2V0UwogICAgIEFTU0VSVCghc2hvdWxkVXBkYXRlU2Ny
b2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpKTsKICAgICBtX3Njcm9sbExheWVyLmdldCgp
LnBvc2l0aW9uID0gQ0dQb2ludE1ha2UoLXBvc2l0aW9uLngoKSArIHNjcm9sbE9yaWdpbigpLngo
KSwgLXBvc2l0aW9uLnkoKSArIHNjcm9sbE9yaWdpbigpLnkoKSk7CiAKKyAgICBTY3JvbGxCZWhh
dmlvckZvckZpeGVkRWxlbWVudHMgYmVoYXZpb3JGb3JGaXhlZCA9IHNjcm9sbEJlaGF2aW9yRm9y
Rml4ZWRFbGVtZW50cygpOwogICAgIEludFBvaW50IHNjcm9sbE9mZnNldCA9IHBvc2l0aW9uIC0g
dG9JbnRTaXplKHNjcm9sbE9yaWdpbigpKTsKLSAgICBJbnRTaXplIHNjcm9sbE9mZnNldEZvckZp
eGVkQ2hpbGRyZW4gPSBGcmFtZVZpZXc6OnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24odmll
d3BvcnRSZWN0KCksIHRvdGFsQ29udGVudHNTaXplKCksIHNjcm9sbE9mZnNldCwgc2Nyb2xsT3Jp
Z2luKCksIGZyYW1lU2NhbGVGYWN0b3IoKSwgZmFsc2UsIGhlYWRlckhlaWdodCgpLCBmb290ZXJI
ZWlnaHQoKSk7CisgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXRGb3JGaXhlZENoaWxkcmVuID0gRnJh
bWVWaWV3OjpzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKHZpZXdwb3J0UmVjdCgpLCB0b3Rh
bENvbnRlbnRzU2l6ZSgpLCBzY3JvbGxPZmZzZXQsIHNjcm9sbE9yaWdpbigpLCBmcmFtZVNjYWxl
RmFjdG9yKCksIGZhbHNlLCBiZWhhdmlvckZvckZpeGVkLCBoZWFkZXJIZWlnaHQoKSwgZm9vdGVy
SGVpZ2h0KCkpOwogICAgIGlmIChtX2NvdW50ZXJTY3JvbGxpbmdMYXllcikKICAgICAgICAgbV9j
b3VudGVyU2Nyb2xsaW5nTGF5ZXIuZ2V0KCkucG9zaXRpb24gPSBGbG9hdFBvaW50KHNjcm9sbE9m
ZnNldEZvckZpeGVkQ2hpbGRyZW4pOwogCkBAIC0zMjcsNyArMzI4LDcgQEAgdm9pZCBTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6c2V0UwogICAgIC8vIHRoZW4gd2Ugc2hvdWxkIHJlY29t
cHV0ZSBzY3JvbGxPZmZzZXRGb3JGaXhlZENoaWxkcmVuIGZvciB0aGUgYmFubmVyIHdpdGggYSBz
Y2FsZSBmYWN0b3Igb2YgMS4KICAgICBmbG9hdCBob3Jpem9udGFsU2Nyb2xsT2Zmc2V0Rm9yQmFu
bmVyID0gc2Nyb2xsT2Zmc2V0Rm9yRml4ZWRDaGlsZHJlbi53aWR0aCgpOwogICAgIGlmIChmcmFt
ZVNjYWxlRmFjdG9yKCkgIT0gMSkKLSAgICAgICAgaG9yaXpvbnRhbFNjcm9sbE9mZnNldEZvckJh
bm5lciA9IEZyYW1lVmlldzo6c2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbih2aWV3cG9ydFJl
Y3QoKSwgdG90YWxDb250ZW50c1NpemUoKSwgc2Nyb2xsT2Zmc2V0LCBzY3JvbGxPcmlnaW4oKSwg
MSwgZmFsc2UsIGhlYWRlckhlaWdodCgpLCBmb290ZXJIZWlnaHQoKSkud2lkdGgoKTsKKyAgICAg
ICAgaG9yaXpvbnRhbFNjcm9sbE9mZnNldEZvckJhbm5lciA9IEZyYW1lVmlldzo6c2Nyb2xsT2Zm
c2V0Rm9yRml4ZWRQb3NpdGlvbih2aWV3cG9ydFJlY3QoKSwgdG90YWxDb250ZW50c1NpemUoKSwg
c2Nyb2xsT2Zmc2V0LCBzY3JvbGxPcmlnaW4oKSwgMSwgZmFsc2UsIGJlaGF2aW9yRm9yRml4ZWQs
IGhlYWRlckhlaWdodCgpLCBmb290ZXJIZWlnaHQoKSkud2lkdGgoKTsKIAogICAgIGlmIChtX2hl
YWRlckxheWVyKQogICAgICAgICBtX2hlYWRlckxheWVyLmdldCgpLnBvc2l0aW9uID0gRmxvYXRQ
b2ludChob3Jpem9udGFsU2Nyb2xsT2Zmc2V0Rm9yQmFubmVyLCAwKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsVHlwZXMuaAkocmV2aXNpb24gMTU5MjA4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDYgKzE3
MSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBpblRvVG9wLAogICAgICAgICBQ
aW5Ub0JvdHRvbQogICAgIH07CisKKyAgICBlbnVtIFNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVt
ZW50cyB7CisgICAgICAgIFN0aWNrVG9Eb2N1bWVudEJvdW5kcywKKyAgICAgICAgU3RpY2tUb1dp
bmRvd0JvdW5kcworICAgIH07CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDE1OTIw
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsNyArMzM3LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpjdXN0b21Qb3NpdGkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRmxvYXRQb2ludCBz
Y3JvbGxQb3NpdGlvbiA9IC1wb3NpdGlvbjsKLSAgICBzY3JvbGxQb3NpdGlvbiA9IG1fcmVuZGVy
Vmlldy5mcmFtZVZpZXcoKS5jb25zdHJhaW5TY3JvbGxQb3NpdGlvbkZvck92ZXJoYW5nKHJvdW5k
ZWRJbnRQb2ludChzY3JvbGxQb3NpdGlvbikpOworCisgICAgaWYgKG1fcmVuZGVyVmlldy5mcmFt
ZVZpZXcoKS5zY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHMoKSA9PSBTdGlja1RvRG9jdW1l
bnRCb3VuZHMpCisgICAgICAgIHNjcm9sbFBvc2l0aW9uID0gbV9yZW5kZXJWaWV3LmZyYW1lVmll
dygpLmNvbnN0cmFpblNjcm9sbFBvc2l0aW9uRm9yT3Zlcmhhbmcocm91bmRlZEludFBvaW50KHNj
cm9sbFBvc2l0aW9uKSk7CisKICAgICBwb3NpdGlvbiA9IC1zY3JvbGxQb3NpdGlvbjsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216863</attachid>
            <date>2013-11-13 14:27:29 -0800</date>
            <delta_ts>2013-11-14 11:49:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>fixed-only-for-review-4.txt</filename>
            <type>text/plain</type>
            <size>18189</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTIzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDEzLTExLTEzICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBuZXcgbW9kZSB3aGVyZSBm
aXhlZCBlbGVtZW50cyBkb24ndCBjb25zdHJhaW4gdGhlaXIgcG9zaXRpb25zIGR1cmluZyBhCisg
ICAgICAgIHJ1YmJlciBiYW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjQyNjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgZW51bSBjYWxsZWQgU2Nyb2xsQmVoYXZp
b3JGb3JGaXhlZEVsZW1lbnRzLCB3aGljaCBoYXMKKyAgICAgICAgdHdvIHZhbHVlcywgU3RpY2tU
b0RvY3VtZW50Qm91bmRzIG9yIFN0aWNrVG9XaW5kb3dCb3VuZHMuIFN0aWNrVG9Eb2N1bWVudEJv
dW5kcyAKKyAgICAgICAgY29ycmVzcG9uZHMgdG8gb3VyIGN1cnJlbnQgYmVoYXZpb3IsIHdoZXJl
IGZpeGVkIGVsZW1lbnRzIGNvbnN0cmFpbiAKKyAgICAgICAgdGhlaXIgcG9zaXRpb25zIGR1cmlu
ZyBhIHJ1YmJlci1iYW5kIHNvIHRoYXQgdGhleSBzdGF5IHN0dWNrIHRvIHRoZSBkb2N1bWVudC4K
KyAgICAgICAgVGhlIG5ldyBtb2RlLCBTdGlja1RvV2luZG93Qm91bmRzLCB3aWxsIGNhdXNlIGZp
eGVkIGVsZW1lbnRzIHRvIGFsd2F5cyBzdGF5CisgICAgICAgIGZpeGVkIHJlbGF0aXZlIHRvIHRo
ZSB3aW5kb3cuCisKKyAgICAgICAgc2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbigpIG5vdyB0
YWtlcyBhIG5ldyBwYXJhbWV0ZXIgZm9yIHRoZSBmaXhlZCBiZWhhdmlvcgorICAgICAgICBzbyB0
aGF0IGl0IGtub3dzIHdoZXRoZXIgb3Igbm90IHRvIGNvbnN0cmFpbiB0aGUgcG9zaXRpb24uCisg
ICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
OjpzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKToKKyAgICAgICAgCisgICAgICAgIFJpZ2h0
IG5vdywganVzdCByZXR1cm4gU3RpY2tUb0RvY3VtZW50Qm91bmRzIGFuZCByZXRhaW4gZXhpc3Rp
bmcgYmVoYXZpb3IuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbEJlaGF2aW9y
Rm9yRml4ZWRFbGVtZW50cyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKworICAgICAg
ICBUaGUgc2Nyb2xsaW5nIHRocmVhZCBuZWVkcyB0byBrbm93IGFib3V0IHRoZSBmaXhlZCBlbGVt
ZW50IHNjcm9sbCBiZWhhdmlvciwKKyAgICAgICAgc28gdGhpcyBjb2RlIG1ha2VzIFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZXMga2VlcCB0cmFjayBvZiB0aGF0IAorICAgICAgICBpbmZvcm1h
dGlvbiB0byBwYXNzIG92ZXIgdG8gdGhlIHNjcm9sbGluZyB0aHJlYWQuCisgICAgICAgICogcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6
c2V0U2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzKToKKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OnVwZGF0ZUJlZm9y
ZUNoaWxkcmVuKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6
OnNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cyk6CisgICAgICAgICogcGFnZS9zY3JvbGxp
bmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmg6CisgICAgICAgICogcGFnZS9zY3JvbGxp
bmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nQ29vcmRpbmF0b3JNYWM6OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0U2Nyb2xsQmVoYXZpb3JG
b3JGaXhlZEVsZW1lbnRzRm9yTm9kZSk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OnNldFNjcm9sbExheWVyUG9zaXRpb24pOgorICAgICAg
ICAKKyAgICAgICAgSGVyZSBpcyB0aGUgbmV3IGVudW0uCisgICAgICAgICogcGxhdGZvcm0vU2Ny
b2xsVHlwZXMuaDoKKyAgICAgICAgCisgICAgICAgIEFub3RoZXIgcGxhY2Ugd2hlcmUgd2Ugb25s
eSB3YW50IHRvIGNvbnN0cmFpbiBzY3JvbGwgcG9zaXRpb24gaWYgdGhhdCBpcyB0aGUKKyAgICAg
ICAgbW9kZSB3ZSBhcmUgaW4uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmN1c3Rv
bVBvc2l0aW9uRm9yVmlzaWJsZVJlY3RDb21wdXRhdGlvbik6CisKIDIwMTMtMTEtMTMgIEJlbmph
bWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIFJlc291
cmNlSGFuZGxlQ0YgdG8gdXNlIHRoZSBkaWRSZWNlaXZlQnVmZmVyKCkgY2FsbGJhY2sKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDE1OTIwOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0MywxNiArMTU0
MywyMiBAQCBMYXlvdXRSZWN0IEZyYW1lVmlldzo6dmlld3BvcnRDb25zdHJhaW5lCiAgICAgcmV0
dXJuIHZpZXdwb3J0UmVjdDsKIH0KIAotSW50U2l6ZSBGcmFtZVZpZXc6OnNjcm9sbE9mZnNldEZv
ckZpeGVkUG9zaXRpb24oY29uc3QgSW50UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0LCBjb25zdCBJ
bnRTaXplJiB0b3RhbENvbnRlbnRzU2l6ZSwgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9u
LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsT3JpZ2luLCBmbG9hdCBmcmFtZVNjYWxlRmFjdG9yLCBi
b29sIGZpeGVkRWxlbWVudHNMYXlvdXRSZWxhdGl2ZVRvRnJhbWUsIGludCBoZWFkZXJIZWlnaHQs
IGludCBmb290ZXJIZWlnaHQpCitJbnRTaXplIEZyYW1lVmlldzo6c2Nyb2xsT2Zmc2V0Rm9yRml4
ZWRQb3NpdGlvbihjb25zdCBJbnRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QsIGNvbnN0IEludFNp
emUmIHRvdGFsQ29udGVudHNTaXplLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNv
bnN0IEludFBvaW50JiBzY3JvbGxPcmlnaW4sIGZsb2F0IGZyYW1lU2NhbGVGYWN0b3IsIGJvb2wg
Zml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFtZSwgU2Nyb2xsQmVoYXZpb3JGb3JGaXhl
ZEVsZW1lbnRzIGJlaGF2aW9yRm9yRml4ZWQsIGludCBoZWFkZXJIZWlnaHQsIGludCBmb290ZXJI
ZWlnaHQpCiB7Ci0gICAgSW50UG9pbnQgY29uc3RyYWluZWRQb3NpdGlvbiA9IFNjcm9sbGFibGVB
cmVhOjpjb25zdHJhaW5TY3JvbGxQb3NpdGlvbkZvck92ZXJoYW5nKHZpc2libGVDb250ZW50UmVj
dCwgdG90YWxDb250ZW50c1NpemUsIHNjcm9sbFBvc2l0aW9uLCBzY3JvbGxPcmlnaW4sIGhlYWRl
ckhlaWdodCwgZm9vdGVySGVpZ2h0KTsKKyAgICBJbnRQb2ludCBwb3NpdGlvbjsKKyAgICBpZiAo
YmVoYXZpb3JGb3JGaXhlZCA9PSBTdGlja1RvRG9jdW1lbnRCb3VuZHMpCisgICAgICAgIHBvc2l0
aW9uID0gU2Nyb2xsYWJsZUFyZWE6OmNvbnN0cmFpblNjcm9sbFBvc2l0aW9uRm9yT3Zlcmhhbmco
dmlzaWJsZUNvbnRlbnRSZWN0LCB0b3RhbENvbnRlbnRzU2l6ZSwgc2Nyb2xsUG9zaXRpb24sIHNj
cm9sbE9yaWdpbiwgaGVhZGVySGVpZ2h0LCBmb290ZXJIZWlnaHQpOworICAgIGVsc2UgeworICAg
ICAgICBwb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uOworICAgICAgICBwb3NpdGlvbi5zZXRZKHBv
c2l0aW9uLnkoKSAtIGhlYWRlckhlaWdodCk7CisgICAgfQogCiAgICAgSW50U2l6ZSBtYXhTaXpl
ID0gdG90YWxDb250ZW50c1NpemUgLSB2aXNpYmxlQ29udGVudFJlY3Quc2l6ZSgpOwogCiAgICAg
ZmxvYXQgZHJhZ0ZhY3RvclggPSAoZml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFtZSB8
fCAhbWF4U2l6ZS53aWR0aCgpKSA/IDEgOiAodG90YWxDb250ZW50c1NpemUud2lkdGgoKSAtIHZp
c2libGVDb250ZW50UmVjdC53aWR0aCgpICogZnJhbWVTY2FsZUZhY3RvcikgLyBtYXhTaXplLndp
ZHRoKCk7CiAgICAgZmxvYXQgZHJhZ0ZhY3RvclkgPSAoZml4ZWRFbGVtZW50c0xheW91dFJlbGF0
aXZlVG9GcmFtZSB8fCAhbWF4U2l6ZS5oZWlnaHQoKSkgPyAxIDogKHRvdGFsQ29udGVudHNTaXpl
LmhlaWdodCgpIC0gdmlzaWJsZUNvbnRlbnRSZWN0LmhlaWdodCgpICogZnJhbWVTY2FsZUZhY3Rv
cikgLyBtYXhTaXplLmhlaWdodCgpOwogCi0gICAgcmV0dXJuIEludFNpemUoY29uc3RyYWluZWRQ
b3NpdGlvbi54KCkgKiBkcmFnRmFjdG9yWCAvIGZyYW1lU2NhbGVGYWN0b3IsIGNvbnN0cmFpbmVk
UG9zaXRpb24ueSgpICogZHJhZ0ZhY3RvclkgLyBmcmFtZVNjYWxlRmFjdG9yKTsKKyAgICByZXR1
cm4gSW50U2l6ZShwb3NpdGlvbi54KCkgKiBkcmFnRmFjdG9yWCAvIGZyYW1lU2NhbGVGYWN0b3Is
IHBvc2l0aW9uLnkoKSAqIGRyYWdGYWN0b3JZIC8gZnJhbWVTY2FsZUZhY3Rvcik7CiB9CiAKIElu
dFNpemUgRnJhbWVWaWV3OjpzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKCkgY29uc3QKQEAg
LTE1NjIsNyArMTU2OCw4IEBAIEludFNpemUgRnJhbWVWaWV3OjpzY3JvbGxPZmZzZXRGb3JGaXhl
ZFAKICAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IHRoaXMtPnNjcm9sbFBvc2l0aW9uKCk7
CiAgICAgSW50UG9pbnQgc2Nyb2xsT3JpZ2luID0gdGhpcy0+c2Nyb2xsT3JpZ2luKCk7CiAgICAg
ZmxvYXQgZnJhbWVTY2FsZUZhY3RvciA9IGZyYW1lKCkuZnJhbWVTY2FsZUZhY3RvcigpOwotICAg
IHJldHVybiBzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKHZpc2libGVDb250ZW50UmVjdCwg
dG90YWxDb250ZW50c1NpemUsIHNjcm9sbFBvc2l0aW9uLCBzY3JvbGxPcmlnaW4sIGZyYW1lU2Nh
bGVGYWN0b3IsIGZpeGVkRWxlbWVudHNMYXlvdXRSZWxhdGl2ZVRvRnJhbWUoKSwgaGVhZGVySGVp
Z2h0KCksIGZvb3RlckhlaWdodCgpKTsKKyAgICBTY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVu
dHMgYmVoYXZpb3JGb3JGaXhlZCA9IHNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cygpOwor
ICAgIHJldHVybiBzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKHZpc2libGVDb250ZW50UmVj
dCwgdG90YWxDb250ZW50c1NpemUsIHNjcm9sbFBvc2l0aW9uLCBzY3JvbGxPcmlnaW4sIGZyYW1l
U2NhbGVGYWN0b3IsIGZpeGVkRWxlbWVudHNMYXlvdXRSZWxhdGl2ZVRvRnJhbWUoKSwgYmVoYXZp
b3JGb3JGaXhlZCwgaGVhZGVySGVpZ2h0KCksIGZvb3RlckhlaWdodCgpKTsKIH0KICAgICAKIElu
dFBvaW50IEZyYW1lVmlldzo6bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKQEAgLTQxNTMs
NiArNDE2MCwxMiBAQCB2b2lkIEZyYW1lVmlldzo6c2V0U2Nyb2xsUGlubmluZ0JlaGF2aW9yCiAg
ICAgdXBkYXRlU2Nyb2xsYmFycyhzY3JvbGxPZmZzZXQoKSk7CiB9CiAKK1Njcm9sbEJlaGF2aW9y
Rm9yRml4ZWRFbGVtZW50cyBGcmFtZVZpZXc6OnNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50
cygpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4gVGhpcyBzaG91bGQgY29uc3Vs
dCBhIHNldHRpbmcgdGhhdCBkb2VzIG5vdCB5ZXQgZXhpc3QuCisgICAgcmV0dXJuIFN0aWNrVG9E
b2N1bWVudEJvdW5kczsKK30KKwogUmVuZGVyVmlldyogRnJhbWVWaWV3OjpyZW5kZXJWaWV3KCkg
Y29uc3QKIHsKICAgICByZXR1cm4gZnJhbWUoKS5jb250ZW50UmVuZGVyZXIoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gMTU5MjA4KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHB1Ymxp
YzoKICAgICAvLyBhbmQgYWRqdXN0aW5nIGZvciBwYWdlIHNjYWxlLgogICAgIEludFNpemUgc2Ny
b2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0OwogICAgIC8vIFN0YXRpYyBmdW5jdGlv
biBjYW4gYmUgY2FsbGVkIGZyb20gYW5vdGhlciB0aHJlYWQuCi0gICAgc3RhdGljIEludFNpemUg
c2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbihjb25zdCBJbnRSZWN0JiB2aXNpYmxlQ29udGVu
dFJlY3QsIGNvbnN0IEludFNpemUmIHRvdGFsQ29udGVudHNTaXplLCBjb25zdCBJbnRQb2ludCYg
c2Nyb2xsUG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBzY3JvbGxPcmlnaW4sIGZsb2F0IGZyYW1l
U2NhbGVGYWN0b3IsIGJvb2wgZml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFtZSwgaW50
IGhlYWRlckhlaWdodCwgaW50IGZvb3RlckhlaWdodCk7CisgICAgc3RhdGljIEludFNpemUgc2Ny
b2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbihjb25zdCBJbnRSZWN0JiB2aXNpYmxlQ29udGVudFJl
Y3QsIGNvbnN0IEludFNpemUmIHRvdGFsQ29udGVudHNTaXplLCBjb25zdCBJbnRQb2ludCYgc2Ny
b2xsUG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBzY3JvbGxPcmlnaW4sIGZsb2F0IGZyYW1lU2Nh
bGVGYWN0b3IsIGJvb2wgZml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFtZSwgU2Nyb2xs
QmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzLCBpbnQgaGVhZGVySGVpZ2h0LCBpbnQgZm9vdGVySGVp
Z2h0KTsKIAogICAgIGJvb2wgZml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFtZSgpIGNv
bnN0OwogCkBAIC00MjUsNiArNDI1LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRTY3JvbGxQ
aW5uaW5nQmVoYXZpb3IoU2Nyb2xsUGlubmluZ0JlaGF2aW9yKTsKIAorICAgIFNjcm9sbEJlaGF2
aW9yRm9yRml4ZWRFbGVtZW50cyBzY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHMoKSBjb25z
dDsKKwogICAgIHZvaWQgdXBkYXRlV2lkZ2V0UG9zaXRpb25zKCk7CiAgICAgdm9pZCBkaWRBZGRX
aWRnZXRUb1JlbmRlclRyZWUoV2lkZ2V0Jik7CiAgICAgdm9pZCB3aWxsUmVtb3ZlV2lkZ2V0RnJv
bVJlbmRlclRyZWUoV2lkZ2V0Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5jcHAJKHJl
dmlzaW9uIDE1OTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAg
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxpbmdTdAogICAgICwgbV9yZXF1ZXN0
ZWRTY3JvbGxQb3NpdGlvblJlcHJlc2VudHNQcm9ncmFtbWF0aWNTY3JvbGwoZmFsc2UpCiAgICAg
LCBtX2hvcml6b250YWxTY3JvbGxiYXJNb2RlKFNjcm9sbGJhckF1dG8pCiAgICAgLCBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJBdXRvKQorICAgICwgbV9iZWhhdmlvckZvckZpeGVk
KFN0aWNrVG9Eb2N1bWVudEJvdW5kcykKICAgICAsIG1faGVhZGVySGVpZ2h0KDApCiAgICAgLCBt
X2Zvb3RlckhlaWdodCgwKQogewpAQCAtODIsNiArODMsNyBAQCBTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGU6OlNjcm9sbGluZ1N0CiAgICAgLCBtX3JlcXVlc3RlZFNjcm9sbFBvc2l0aW9uUmVw
cmVzZW50c1Byb2dyYW1tYXRpY1Njcm9sbChzdGF0ZU5vZGUucmVxdWVzdGVkU2Nyb2xsUG9zaXRp
b25SZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsKCkpCiAgICAgLCBtX2hvcml6b250YWxTY3Jv
bGxiYXJNb2RlKHN0YXRlTm9kZS5ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSgpKQogICAgICwgbV92
ZXJ0aWNhbFNjcm9sbGJhck1vZGUoc3RhdGVOb2RlLnZlcnRpY2FsU2Nyb2xsYmFyTW9kZSgpKQor
ICAgICwgbV9iZWhhdmlvckZvckZpeGVkKHN0YXRlTm9kZS5zY3JvbGxCZWhhdmlvckZvckZpeGVk
RWxlbWVudHMoKSkKICAgICAsIG1fcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oc3RhdGVOb2RlLnJl
cXVlc3RlZFNjcm9sbFBvc2l0aW9uKCkpCiAgICAgLCBtX3Njcm9sbE9yaWdpbihzdGF0ZU5vZGUu
c2Nyb2xsT3JpZ2luKCkpCiAgICAgLCBtX2hlYWRlckhlaWdodChzdGF0ZU5vZGUuaGVhZGVySGVp
Z2h0KCkpCkBAIC0yMjIsNiArMjI0LDE2IEBAIHZvaWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpzZXRWZXIKICAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c2V0SGFzQ2hhbmdlZFByb3Bl
cnRpZXModHJ1ZSk7CiB9CiAKK3ZvaWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRT
Y3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHMoU2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1l
bnRzIGJlaGF2aW9yRm9yRml4ZWQpCit7CisgICAgaWYgKG1fYmVoYXZpb3JGb3JGaXhlZCA9PSBi
ZWhhdmlvckZvckZpeGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2JlaGF2aW9yRm9yRml4
ZWQgPSBiZWhhdmlvckZvckZpeGVkOworICAgIHNldFByb3BlcnR5Q2hhbmdlZChCZWhhdmlvckZv
ckZpeGVkRWxlbWVudHMpOworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zZXRIYXNDaGFuZ2Vk
UHJvcGVydGllcyh0cnVlKTsKK30KKwogdm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OnNldFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiByZXF1ZXN0ZWRTY3Jv
bGxQb3NpdGlvbiwgYm9vbCByZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsKQogewogICAgIG1f
cmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24gPSByZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZS5oCShyZXZpc2lvbiAxNTkyMDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNjgsNyArNjgsOCBAQCBwdWJsaWM6CiAgICAgICAgIEZvb3RlckhlaWdodCwKICAg
ICAgICAgSGVhZGVyTGF5ZXIsCiAgICAgICAgIEZvb3RlckxheWVyLAotICAgICAgICBQYWludGVy
Rm9yU2Nyb2xsYmFyCisgICAgICAgIFBhaW50ZXJGb3JTY3JvbGxiYXIsCisgICAgICAgIEJlaGF2
aW9yRm9yRml4ZWRFbGVtZW50cwogICAgIH07CiAKICAgICBjb25zdCBJbnRSZWN0JiB2aWV3cG9y
dFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0UmVjdDsgfQpAQCAtMTA3LDYgKzEwOCw5
IEBAIHB1YmxpYzoKICAgICBTY3JvbGxiYXJNb2RlIHZlcnRpY2FsU2Nyb2xsYmFyTW9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXJNb2RlOyB9CiAgICAgdm9pZCBzZXRWZXJ0
aWNhbFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyTW9kZSk7CiAKKyAgICBTY3JvbGxCZWhhdmlvckZv
ckZpeGVkRWxlbWVudHMgc2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9iZWhhdmlvckZvckZpeGVkOyB9CisgICAgdm9pZCBzZXRTY3JvbGxCZWhhdmlvckZv
ckZpeGVkRWxlbWVudHMoU2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzKTsKKwogICAgIGNv
bnN0IEludFBvaW50JiByZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
cmVxdWVzdGVkU2Nyb2xsUG9zaXRpb247IH0KICAgICB2b2lkIHNldFJlcXVlc3RlZFNjcm9sbFBv
c2l0aW9uKGNvbnN0IEludFBvaW50JiwgYm9vbCByZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xs
KTsKIApAQCAtMTgyLDYgKzE4Niw4IEBAIHByaXZhdGU6CiAgICAgU2Nyb2xsYmFyTW9kZSBtX2hv
cml6b250YWxTY3JvbGxiYXJNb2RlOwogICAgIFNjcm9sbGJhck1vZGUgbV92ZXJ0aWNhbFNjcm9s
bGJhck1vZGU7CiAKKyAgICBTY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHMgbV9iZWhhdmlv
ckZvckZpeGVkOworCiAgICAgSW50UG9pbnQgbV9yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbjsKICAg
ICBJbnRQb2ludCBtX3Njcm9sbE9yaWdpbjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNw
cAkocmV2aXNpb24gMTU5MjA4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3
IEBAIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjpTY3JvbGxpbmdUcmUKICAgICAsIG1fdmVy
dGljYWxTY3JvbGxiYXJNb2RlKFNjcm9sbGJhckF1dG8pCiAgICAgLCBtX2hlYWRlckhlaWdodCgw
KQogICAgICwgbV9mb290ZXJIZWlnaHQoMCkKKyAgICAsIG1fYmVoYXZpb3JGb3JGaXhlZChTdGlj
a1RvRG9jdW1lbnRCb3VuZHMpCiB7CiB9CiAKQEAgLTk5LDYgKzEwMCw5IEBAIHZvaWQgU2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGU6OnVwZGF0ZUIKIAogICAgIGlmIChzdGF0ZS0+aGFzQ2hhbmdl
ZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Rm9vdGVySGVpZ2h0KSkKICAg
ICAgICAgbV9mb290ZXJIZWlnaHQgPSBzdGF0ZS0+Zm9vdGVySGVpZ2h0KCk7CisKKyAgICBpZiAo
c3RhdGUtPmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OkJl
aGF2aW9yRm9yRml4ZWRFbGVtZW50cykpCisgICAgICAgIG1fYmVoYXZpb3JGb3JGaXhlZCA9IHN0
YXRlLT5zY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHMoKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oCShyZXZpc2lvbiAxNTkyMDgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw4IEBAIHByb3RlY3RlZDoKICAgICBpbnQg
aGVhZGVySGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWFkZXJIZWlnaHQ7IH0KICAgICBpbnQg
Zm9vdGVySGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9mb290ZXJIZWlnaHQ7IH0KIAorICAgIFNj
cm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cyBzY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVu
dHMoKSBjb25zdCB7IHJldHVybiBtX2JlaGF2aW9yRm9yRml4ZWQ7IH0KKwogcHJpdmF0ZToKICAg
ICBJbnRSZWN0IG1fdmlld3BvcnRSZWN0OwogICAgIEludFNpemUgbV90b3RhbENvbnRlbnRzU2l6
ZTsKQEAgLTEwMyw2ICsxMDUsOCBAQCBwcml2YXRlOgogCiAgICAgaW50IG1faGVhZGVySGVpZ2h0
OwogICAgIGludCBtX2Zvb3RlckhlaWdodDsKKworICAgIFNjcm9sbEJlaGF2aW9yRm9yRml4ZWRF
bGVtZW50cyBtX2JlaGF2aW9yRm9yRml4ZWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRp
bmF0b3JNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9t
YWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaAkocmV2aXNpb24gMTU5MjA4KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEyNiw2ICsxMjYsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0U2Ny
b2xsYmFyUGFpbnRlcnNGcm9tU2Nyb2xsYmFyc0Zvck5vZGUoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNj
cm9sbGJhciwgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyLCBTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGUqKTsKICAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9k
ZShjb25zdCBSZWdpb24mLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKICAgICB2b2lk
IHNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JOb2RlKHVuc2lnbmVkLCBTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGUqKTsKKyAgICB2b2lkIHNldFNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVt
ZW50c0Zvck5vZGUoU2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzLCBTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGUqKTsKKwogCiAgICAgdm9pZCB1cGRhdGVNYWluRnJhbWVTY3JvbGxMYXll
clBvc2l0aW9uKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9T
Y3JvbGxpbmdDb29yZGluYXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0JKHJldmlzaW9uIDE1
OTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29y
ZGluYXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTgwLDYgKzE4MCw3IEBAIHZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3JNYWM6OmZyYW1lVmlld1IKICAgICBzZXRDb3VudGVyU2Nyb2xsaW5n
TGF5ZXJGb3JOb2RlKGNvdW50ZXJTY3JvbGxpbmdMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcp
LCBub2RlKTsKICAgICBzZXRIZWFkZXJMYXllckZvck5vZGUoaGVhZGVyTGF5ZXJGb3JGcmFtZVZp
ZXcoZnJhbWVWaWV3KSwgbm9kZSk7CiAgICAgc2V0Rm9vdGVyTGF5ZXJGb3JOb2RlKGZvb3Rlckxh
eWVyRm9yRnJhbWVWaWV3KGZyYW1lVmlldyksIG5vZGUpOworICAgIHNldFNjcm9sbEJlaGF2aW9y
Rm9yRml4ZWRFbGVtZW50c0Zvck5vZGUoZnJhbWVWaWV3LT5zY3JvbGxCZWhhdmlvckZvckZpeGVk
RWxlbWVudHMoKSwgbm9kZSk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnNj
cm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEqIHNjcm9s
bGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKQEAgLTMyMiw2ICsz
MjMsMTIgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0V2hlZWxFdgogICAgIHNj
aGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7CiB9CiAKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JN
YWM6OnNldFNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50c0Zvck5vZGUoU2Nyb2xsQmVoYXZp
b3JGb3JGaXhlZEVsZW1lbnRzIGJlaGF2aW9yRm9yRml4ZWQsIFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZSogbm9kZSkKK3sKKyAgICBub2RlLT5zZXRTY3JvbGxCZWhhdmlvckZvckZpeGVkRWxl
bWVudHMoYmVoYXZpb3JGb3JGaXhlZCk7CisgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsK
K30KKwogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xs
TGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyByZWFz
b25zKQogewogICAgIGlmICghbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0JKHJldmlzaW9uIDE1OTIw
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzE3LDggKzMxNyw5IEBAIHZvaWQg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OnNldFMKICAgICBBU1NFUlQoIXNob3VsZFVw
ZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKSk7CiAgICAgbV9zY3JvbGxMYXll
ci5nZXQoKS5wb3NpdGlvbiA9IENHUG9pbnRNYWtlKC1wb3NpdGlvbi54KCkgKyBzY3JvbGxPcmln
aW4oKS54KCksIC1wb3NpdGlvbi55KCkgKyBzY3JvbGxPcmlnaW4oKS55KCkpOwogCisgICAgU2Ny
b2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzIGJlaGF2aW9yRm9yRml4ZWQgPSBzY3JvbGxCZWhh
dmlvckZvckZpeGVkRWxlbWVudHMoKTsKICAgICBJbnRQb2ludCBzY3JvbGxPZmZzZXQgPSBwb3Np
dGlvbiAtIHRvSW50U2l6ZShzY3JvbGxPcmlnaW4oKSk7Ci0gICAgSW50U2l6ZSBzY3JvbGxPZmZz
ZXRGb3JGaXhlZENoaWxkcmVuID0gRnJhbWVWaWV3OjpzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0
aW9uKHZpZXdwb3J0UmVjdCgpLCB0b3RhbENvbnRlbnRzU2l6ZSgpLCBzY3JvbGxPZmZzZXQsIHNj
cm9sbE9yaWdpbigpLCBmcmFtZVNjYWxlRmFjdG9yKCksIGZhbHNlLCBoZWFkZXJIZWlnaHQoKSwg
Zm9vdGVySGVpZ2h0KCkpOworICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0Rm9yRml4ZWRDaGlsZHJl
biA9IEZyYW1lVmlldzo6c2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbih2aWV3cG9ydFJlY3Qo
KSwgdG90YWxDb250ZW50c1NpemUoKSwgc2Nyb2xsT2Zmc2V0LCBzY3JvbGxPcmlnaW4oKSwgZnJh
bWVTY2FsZUZhY3RvcigpLCBmYWxzZSwgYmVoYXZpb3JGb3JGaXhlZCwgaGVhZGVySGVpZ2h0KCks
IGZvb3RlckhlaWdodCgpKTsKICAgICBpZiAobV9jb3VudGVyU2Nyb2xsaW5nTGF5ZXIpCiAgICAg
ICAgIG1fY291bnRlclNjcm9sbGluZ0xheWVyLmdldCgpLnBvc2l0aW9uID0gRmxvYXRQb2ludChz
Y3JvbGxPZmZzZXRGb3JGaXhlZENoaWxkcmVuKTsKIApAQCAtMzI3LDcgKzMyOCw3IEBAIHZvaWQg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OnNldFMKICAgICAvLyB0aGVuIHdlIHNob3Vs
ZCByZWNvbXB1dGUgc2Nyb2xsT2Zmc2V0Rm9yRml4ZWRDaGlsZHJlbiBmb3IgdGhlIGJhbm5lciB3
aXRoIGEgc2NhbGUgZmFjdG9yIG9mIDEuCiAgICAgZmxvYXQgaG9yaXpvbnRhbFNjcm9sbE9mZnNl
dEZvckJhbm5lciA9IHNjcm9sbE9mZnNldEZvckZpeGVkQ2hpbGRyZW4ud2lkdGgoKTsKICAgICBp
ZiAoZnJhbWVTY2FsZUZhY3RvcigpICE9IDEpCi0gICAgICAgIGhvcml6b250YWxTY3JvbGxPZmZz
ZXRGb3JCYW5uZXIgPSBGcmFtZVZpZXc6OnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24odmll
d3BvcnRSZWN0KCksIHRvdGFsQ29udGVudHNTaXplKCksIHNjcm9sbE9mZnNldCwgc2Nyb2xsT3Jp
Z2luKCksIDEsIGZhbHNlLCBoZWFkZXJIZWlnaHQoKSwgZm9vdGVySGVpZ2h0KCkpLndpZHRoKCk7
CisgICAgICAgIGhvcml6b250YWxTY3JvbGxPZmZzZXRGb3JCYW5uZXIgPSBGcmFtZVZpZXc6OnNj
cm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24odmlld3BvcnRSZWN0KCksIHRvdGFsQ29udGVudHNT
aXplKCksIHNjcm9sbE9mZnNldCwgc2Nyb2xsT3JpZ2luKCksIDEsIGZhbHNlLCBiZWhhdmlvckZv
ckZpeGVkLCBoZWFkZXJIZWlnaHQoKSwgZm9vdGVySGVpZ2h0KCkpLndpZHRoKCk7CiAKICAgICBp
ZiAobV9oZWFkZXJMYXllcikKICAgICAgICAgbV9oZWFkZXJMYXllci5nZXQoKS5wb3NpdGlvbiA9
IEZsb2F0UG9pbnQoaG9yaXpvbnRhbFNjcm9sbE9mZnNldEZvckJhbm5lciwgMCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFR5cGVzLmgJKHJldmlzaW9uIDE1OTIwOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3
MSw2ICsxNzEsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBQaW5Ub1RvcCwKICAg
ICAgICAgUGluVG9Cb3R0b20KICAgICB9OworCisgICAgZW51bSBTY3JvbGxCZWhhdmlvckZvckZp
eGVkRWxlbWVudHMgeworICAgICAgICBTdGlja1RvRG9jdW1lbnRCb3VuZHMsCisgICAgICAgIFN0
aWNrVG9XaW5kb3dCb3VuZHMKKyAgICB9OwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lv
biAxNTkyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM3LDcgKzMzNywxMCBAQCB2b2lkIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6Y3VzdG9tUG9zaXRpCiAgICAgICAgIHJldHVybjsKIAogICAgIEZsb2F0
UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSAtcG9zaXRpb247Ci0gICAgc2Nyb2xsUG9zaXRpb24gPSBt
X3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuY29uc3RyYWluU2Nyb2xsUG9zaXRpb25Gb3JPdmVyaGFu
Zyhyb3VuZGVkSW50UG9pbnQoc2Nyb2xsUG9zaXRpb24pKTsKKworICAgIGlmIChtX3JlbmRlclZp
ZXcuZnJhbWVWaWV3KCkuc2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzKCkgPT0gU3RpY2tU
b0RvY3VtZW50Qm91bmRzKQorICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IG1fcmVuZGVyVmlldy5m
cmFtZVZpZXcoKS5jb25zdHJhaW5TY3JvbGxQb3NpdGlvbkZvck92ZXJoYW5nKHJvdW5kZWRJbnRQ
b2ludChzY3JvbGxQb3NpdGlvbikpOworCiAgICAgcG9zaXRpb24gPSAtc2Nyb2xsUG9zaXRpb247
CiB9CiAK
</data>
<flag name="review"
          id="239908"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>