<?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>188148</bug_id>
          
          <creation_ts>2018-07-29 11:30:00 -0700</creation_ts>
          <short_desc>[LFC][Floating] Add basic left/right floating positioning.</short_desc>
          <delta_ts>2018-07-31 08:05:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1446106</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-07-29 11:30:00 -0700</bug_when>
    <thetext>ssia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446109</commentid>
    <comment_count>1</comment_count>
      <attachid>346035</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-07-29 11:59:30 -0700</bug_when>
    <thetext>Created attachment 346035
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446528</commentid>
    <comment_count>2</comment_count>
      <attachid>346035</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-07-31 06:12:04 -0700</bug_when>
    <thetext>Comment on attachment 346035
Patch

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

&gt; Source/WebCore/layout/FloatingContext.cpp:92
&gt; +class Iterator {
&gt; +public:
&gt; +    Iterator(const LayoutContext&amp;, const FloatingState&amp;);
&gt; +
&gt; +    void set(LayoutUnit verticalPosition);
&gt; +    const FloatingPair&amp; current() const { return m_current; }
&gt; +    LayoutUnit verticalPosition() const { return m_verticalPosition; }
&gt; +    Iterator&amp; operator++();
&gt; +
&gt; +private:
&gt; +    const LayoutContext&amp; m_layoutContext;
&gt; +    const FloatingState&amp; m_floatingState;
&gt; +    FloatingPair m_current;
&gt; +    LayoutUnit m_verticalPosition;
&gt; +};

It would be slightly nicer to give this the full iterator interface (basically add operator== and operator*) so it can be used in range-for loops etc.

&gt; Source/WebCore/layout/FloatingContext.cpp:94
&gt; +
&gt; +

Extra empty line.

&gt; Source/WebCore/layout/FloatingContext.cpp:121
&gt; +    Iterator iterator(layoutContext(), m_floatingState);
&gt; +    // Start with the inner-most floating pair for the initial vertical position.
&gt; +    iterator.set(initialVerticalPosition);

These could be factored to a begin() style function that returns the iterator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446542</commentid>
    <comment_count>3</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-07-31 08:02:26 -0700</bug_when>
    <thetext>Committed r234423: &lt;https://trac.webkit.org/changeset/234423&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446543</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-07-31 08:03:26 -0700</bug_when>
    <thetext>&lt;rdar://problem/42772230&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446544</commentid>
    <comment_count>5</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-07-31 08:05:02 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #2)
&gt; Comment on attachment 346035 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=346035&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/layout/FloatingContext.cpp:92
&gt; &gt; +class Iterator {
&gt; &gt; +public:
&gt; &gt; +    Iterator(const LayoutContext&amp;, const FloatingState&amp;);
&gt; &gt; +
&gt; &gt; +    void set(LayoutUnit verticalPosition);
&gt; &gt; +    const FloatingPair&amp; current() const { return m_current; }
&gt; &gt; +    LayoutUnit verticalPosition() const { return m_verticalPosition; }
&gt; &gt; +    Iterator&amp; operator++();
&gt; &gt; +
&gt; &gt; +private:
&gt; &gt; +    const LayoutContext&amp; m_layoutContext;
&gt; &gt; +    const FloatingState&amp; m_floatingState;
&gt; &gt; +    FloatingPair m_current;
&gt; &gt; +    LayoutUnit m_verticalPosition;
&gt; &gt; +};
&gt; 
&gt; It would be slightly nicer to give this the full iterator interface
&gt; (basically add operator== and operator*) so it can be used in range-for
&gt; loops etc.
&gt; 
&gt; &gt; Source/WebCore/layout/FloatingContext.cpp:94
&gt; &gt; +
&gt; &gt; +
&gt; 
&gt; Extra empty line.
&gt; 
&gt; &gt; Source/WebCore/layout/FloatingContext.cpp:121
&gt; &gt; +    Iterator iterator(layoutContext(), m_floatingState);
&gt; &gt; +    // Start with the inner-most floating pair for the initial vertical position.
&gt; &gt; +    iterator.set(initialVerticalPosition);
&gt; 
&gt; These could be factored to a begin() style function that returns the
&gt; iterator.
Good point.
This might get a bit more involved when the iterator gets persistent (to take advantage of the fact that (most of the time)we can just resume it as new floatings are coming in..but for now the simple iterator interface works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446547</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-07-31 08:05:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/42772336&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346035</attachid>
            <date>2018-07-29 11:59:30 -0700</date>
            <delta_ts>2018-07-31 06:12:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188148-20180729115930.patch</filename>
            <type>text/plain</type>
            <size>24488</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0MjU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTVjMzg4NTNkMTI3N2M2
MjE4YjhhOTM5YTU4MDk5Yjk0YmM3NDdhYy4uM2E2NDkwYzkyY2Q5YWMzOWYxMjAwYzRlMDcxMmY2
ZmRlY2JkODUxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDE4LTA3LTI5ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bRmxvYXRpbmddIEFk
ZCBiYXNpYyBsZWZ0L3JpZ2h0IGZsb2F0aW5nIHBvc2l0aW9uaW5nLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4MTQ4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIHNp
bXBsZSBmbG9hdGluZyBwb3NpdGlvbmluZy4KKyAgICAgICAgKEZsb2F0aW5ncyB3aXRoIGRpZmZl
cmVudCBjb250YWluaW5nIGJsb2NrcyBkbyBub3Qgd29yayB5ZXQuKQorCisgICAgICAgICogbGF5
b3V0L0Zsb2F0aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZsb2F0
aW5nUGFpcjo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okl0ZXJh
dG9yOjpjdXJyZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SXRlcmF0b3I6
OnZlcnRpY2FsUG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9h
dGluZ0NvbnRleHQ6OkZsb2F0aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkZsb2F0aW5nQ29udGV4dDo6Y29tcHV0ZVBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6RmxvYXRpbmdDb250ZXh0OjpmbG9hdGluZ1Bvc2l0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6RmxvYXRpbmdDb250ZXh0Ojppbml0aWFsVmVydGljYWxQ
b3NpdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZsb2F0aW5nQ29udGV4
dDo6YWxpZ25XaXRoQ29udGFpbmluZ0Jsb2NrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6RmxvYXRpbmdDb250ZXh0OjphbGlnbldpdGhGbG9hdGluZ3MgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpmbG9hdGluZ0Rpc3BsYXlCb3gpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpGbG9hdGluZ1BhaXI6OkZsb2F0aW5nUGFpcik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkZsb2F0aW5nUGFpcjo6bGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkZsb2F0aW5nUGFpcjo6cmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpGbG9hdGluZ1BhaXI6OmludGVyc2VjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJdGVyYXRvcjo6SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
dGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okl0ZXJhdG9y
OjpzZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdGluZ0NvbnRleHQ6OmNvbXB1
dGVQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L0Zsb2F0aW5nQ29udGV4dC5o
OgorICAgICAgICAqIGxheW91dC9GbG9hdGluZ1N0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6RmxvYXRpbmdTdGF0ZTo6YXBwZW5kKToKKyAgICAgICAgKiBsYXlvdXQvRmxvYXRp
bmdTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdGluZ1N0YXRlOjpmbG9h
dGluZ3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdGluZ1N0YXRlOjps
YXN0IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0
dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0OjpsYXlvdXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRGb3JtYXR0aW5nQ29udGV4dFJvb3QgY29uc3QpOgor
ICAgICAgICAqIGxheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXk6OkJveDo6UmVjdDo6UmVjdCk6CisgICAgICAgICogbGF5b3V0L2Rpc3Bs
YXl0cmVlL0Rpc3BsYXlCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6UmVj
dDo6aW50ZXJzZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OnJl
Y3QgY29uc3QpOgorCiAyMDE4LTA3LTI2ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+
CiAKICAgICAgICAgW0xGQ11bRmxvYXRpbmddIEFkZCBza2VsZXRvbiBmb3IgYmFzaWMgcG9zaXRp
b25pbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRmxvYXRpbmdDb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9GbG9hdGluZ0NvbnRleHQuY3BwCmluZGV4IGRm
MWRjZjZhNTUyYTk4NjI3ZDUzOTNhZTM4OGY5MDI4MmQxYTM2YjQuLmI2NjQ0MGYyOTgwYTI3MThj
ZWI2MTdmMjVkMmQ5ZDY2MjU3ZTk5NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9GbG9hdGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9GbG9hdGlu
Z0NvbnRleHQuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1B
VFRJTkdfQ09OVEVYVCkKIAorI2luY2x1ZGUgIkRpc3BsYXlCb3guaCIKICNpbmNsdWRlICJMYXlv
dXRCb3guaCIKICNpbmNsdWRlICJMYXlvdXRDb250YWluZXIuaCIKICNpbmNsdWRlICJMYXlvdXRD
b250ZXh0LmgiCkBAIC0zOCwyOSArMzksMzA4IEBAIG5hbWVzcGFjZSBMYXlvdXQgewogCiBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoRmxvYXRpbmdDb250ZXh0KTsKIAotRmxvYXRpbmdDb250
ZXh0OjpGbG9hdGluZ0NvbnRleHQoRmxvYXRpbmdTdGF0ZSYgZmxvYXRpbmdTdGF0ZSkKLSAgICA6
IG1fZmxvYXRpbmdTdGF0ZShmbG9hdGluZ1N0YXRlKQorLy8gRmluZGluZyB0aGUgdG9wL2xlZnQg
cG9zaXRpb24gZm9yIGEgbmV3IGZsb2F0aW5nKEYpCisvLyAgX19fXyAgX19fXyAgX19fX18gICAg
ICAgICAgICAgICBfX19fX19fCisvLyB8ICAgIHx8IEwyIHx8ICAgICB8IDwtLS0tLTEtLS0tPnwg
ICAgICAgfAorLy8gfCAgICB8fF9fX198fCAgTDMgfCAgICAgICAgICAgICB8ICAgUjEgIHwKKy8v
IHwgTDEgfCAgICAgIHxfX19fX3wgICAgICAgICAgICAgfCAgICAgICB8CisvLyB8X19fX3wgPC0t
LS0tLS0tLS0tLS0yLS0tLS0tLS0tPnwgICAgICAgfAorLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgICAgIHwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fF9fX19fX198CisvLworLy8gMS4gQ29tcHV0ZSB0aGUgaW5pdGlhbCB2ZXJ0aWNhbCBwb3NpdGlv
biBmb3IgKEYpIC0+ICgxKQorLy8gMi4gRmluZCB0aGUgY29ycmVzcG9uZGluZyBmbG9hdGluZyBw
YWlyIChMMy1SMSkKKy8vIDMuIEFsaWduIChGKSBob3Jpem9udGFsbHkgd2l0aCAoTDMtUjEpIGRl
cGVuZGluZyB3aGV0aGVyIChGKSBpcyBsZWZ0L3JpZ2h0IHBvc2l0aW9uZWQKKy8vIDQuIEludGVy
c2VjdCAoRikgd2l0aCAoTDMtUjEpCisvLyA1LiBJZiAoRikgZG9lcyBub3QgZml0LCBmaW5kIHRo
ZSBuZXh0IGZsb2F0aW5nIHBhaXIgKEwxLVIxKQorLy8gNi4gUmVwZWF0IHVudGlsIGVpdGhlciAo
RikgZml0cy9ubyBtb3JlIGZsb2F0aW5ncy4gIAorCitjbGFzcyBJdGVyYXRvcjsKKworY2xhc3Mg
RmxvYXRpbmdQYWlyIHsKK3B1YmxpYzoKKyAgICBGbG9hdGluZ1BhaXIoY29uc3QgTGF5b3V0Q29u
dGV4dCYsIGNvbnN0IEZsb2F0aW5nU3RhdGUmKTsKKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuICFtX2xlZnRJbmRleCAmJiAhbV9yaWdodEluZGV4OyB9CisgICAgY29uc3QgRGlz
cGxheTo6Qm94KiBsZWZ0KCkgY29uc3Q7CisgICAgY29uc3QgRGlzcGxheTo6Qm94KiByaWdodCgp
IGNvbnN0OworICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBEaXNwbGF5OjpCb3g6OlJlY3QmKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgSXRlcmF0b3I7CisgICAgY29uc3Qg
TGF5b3V0Q29udGV4dCYgbV9sYXlvdXRDb250ZXh0OworICAgIGNvbnN0IEZsb2F0aW5nU3RhdGUm
IG1fZmxvYXRpbmdTdGF0ZTsKKworICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IG1fbGVmdElu
ZGV4OworICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IG1fcmlnaHRJbmRleDsKK307CisKK2Ns
YXNzIEl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBJdGVyYXRvcihjb25zdCBMYXlvdXRDb250ZXh0
JiwgY29uc3QgRmxvYXRpbmdTdGF0ZSYpOworCisgICAgdm9pZCBzZXQoTGF5b3V0VW5pdCB2ZXJ0
aWNhbFBvc2l0aW9uKTsKKyAgICBjb25zdCBGbG9hdGluZ1BhaXImIGN1cnJlbnQoKSBjb25zdCB7
IHJldHVybiBtX2N1cnJlbnQ7IH0KKyAgICBMYXlvdXRVbml0IHZlcnRpY2FsUG9zaXRpb24oKSBj
b25zdCB7IHJldHVybiBtX3ZlcnRpY2FsUG9zaXRpb247IH0KKyAgICBJdGVyYXRvciYgb3BlcmF0
b3IrKygpOworCitwcml2YXRlOgorICAgIGNvbnN0IExheW91dENvbnRleHQmIG1fbGF5b3V0Q29u
dGV4dDsKKyAgICBjb25zdCBGbG9hdGluZ1N0YXRlJiBtX2Zsb2F0aW5nU3RhdGU7CisgICAgRmxv
YXRpbmdQYWlyIG1fY3VycmVudDsKKyAgICBMYXlvdXRVbml0IG1fdmVydGljYWxQb3NpdGlvbjsK
K307CisKKworRmxvYXRpbmdDb250ZXh0OjpGbG9hdGluZ0NvbnRleHQoY29uc3QgQ29udGFpbmVy
JiBmb3JtYXR0aW5nQ29udGV4dFJvb3QsIEZsb2F0aW5nU3RhdGUmIGZsb2F0aW5nU3RhdGUpCisg
ICAgOiBtX2Zvcm1hdHRpbmdDb250ZXh0Um9vdChmb3JtYXR0aW5nQ29udGV4dFJvb3QpCisgICAg
LCBtX2Zsb2F0aW5nU3RhdGUoZmxvYXRpbmdTdGF0ZSkKK3sKKyAgICBBU1NFUlQobV9mb3JtYXR0
aW5nQ29udGV4dFJvb3QuZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKTsKK30KKworUG9z
aXRpb24gRmxvYXRpbmdDb250ZXh0Ojpjb21wdXRlUG9zaXRpb24oY29uc3QgQm94JiBsYXlvdXRC
b3gpIGNvbnN0Cit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgp
KTsKKworICAgIC8vIDEuIE5vIGZsb2F0aW5nIGJveCBvbiB0aGUgY29udGV4dCB5ZXQgLT4gYWxp
Z24gaXQgd2l0aCB0aGUgY29udGFpbmluZyBibG9jaydzIGxlZnQvcmlnaHQgZWRnZS4gCisgICAg
aWYgKG1fZmxvYXRpbmdTdGF0ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IGFsaWduV2l0
aENvbnRhaW5pbmdCbG9jayhsYXlvdXRCb3gpLCBsYXlvdXRDb250ZXh0KCkuZGlzcGxheUJveEZv
ckxheW91dEJveChsYXlvdXRCb3gpLT50b3AoKSB9OworCisgICAgLy8gMi4gRmluZCB0aGUgdG9w
IG1vc3QgcG9zaXRpb24gd2hlcmUgdGhlIGZsb2F0aW5nIGZpdHMuCisgICAgcmV0dXJuIGZsb2F0
aW5nUG9zaXRpb24obGF5b3V0Qm94KTsgCit9CisKK1Bvc2l0aW9uIEZsb2F0aW5nQ29udGV4dDo6
ZmxvYXRpbmdQb3NpdGlvbihjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKK3sKKyAgICBhdXRv
IGluaXRpYWxWZXJ0aWNhbFBvc2l0aW9uID0gdGhpcy0+aW5pdGlhbFZlcnRpY2FsUG9zaXRpb24o
bGF5b3V0Qm94KTsKKyAgICBhdXRvIGJveFNpemUgPSBsYXlvdXRDb250ZXh0KCkuZGlzcGxheUJv
eEZvckxheW91dEJveChsYXlvdXRCb3gpLT5tYXJnaW5Cb3goKS5zaXplKCk7CisKKyAgICBJdGVy
YXRvciBpdGVyYXRvcihsYXlvdXRDb250ZXh0KCksIG1fZmxvYXRpbmdTdGF0ZSk7CisgICAgLy8g
U3RhcnQgd2l0aCB0aGUgaW5uZXItbW9zdCBmbG9hdGluZyBwYWlyIGZvciB0aGUgaW5pdGlhbCB2
ZXJ0aWNhbCBwb3NpdGlvbi4KKyAgICBpdGVyYXRvci5zZXQoaW5pdGlhbFZlcnRpY2FsUG9zaXRp
b24pOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGF1dG8gdG9wID0gaXRlcmF0b3IudmVy
dGljYWxQb3NpdGlvbigpOworCisgICAgICAgIGF1dG8mIGZsb2F0aW5ncyA9IGl0ZXJhdG9yLmN1
cnJlbnQoKTsKKyAgICAgICAgLy8gUGFzc2VkIGFsbCB0aGUgZmxvYXRpbmdzIGFuZCBzdGlsbCBk
b2VzIG5vdCBmaXQ/IAorICAgICAgICBpZiAoZmxvYXRpbmdzLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHJldHVybiB7IGFsaWduV2l0aENvbnRhaW5pbmdCbG9jayhsYXlvdXRCb3gpLCB0b3AgfTsK
KworICAgICAgICAvLyBNb3ZlIHRoZSBib3ggaG9yaXpvbnRhbGx5IHNvIHRoYXQgaXQgYWxpZ25z
IHdpdGggdGhlIGN1cnJlbnQgZmxvYXRpbmcgcGFpci4KKyAgICAgICAgYXV0byBsZWZ0ID0gYWxp
Z25XaXRoRmxvYXRpbmdzKGZsb2F0aW5ncywgbGF5b3V0Qm94KTsKKyAgICAgICAgLy8gQ2hlY2sg
aWYgdGhlIGJveCBmaXRzIGF0IHRoaXMgdmVydGljYWwgcG9zaXRpb24uCisgICAgICAgIGlmICgh
ZmxvYXRpbmdzLmludGVyc2VjdHMoeyB0b3AsIGxlZnQsIGJveFNpemUud2lkdGgoKSwgYm94U2l6
ZS5oZWlnaHQoKSB9KSkKKyAgICAgICAgICAgIHJldHVybiB7IGxlZnQsIHRvcCB9OworCisgICAg
ICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgZmxvYXRpbmcgcGFpci4KKyAgICAgICAgKytpdGVyYXRv
cjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyBhbGln
bldpdGhDb250YWluaW5nQmxvY2sobGF5b3V0Qm94KSwgaW5pdGlhbFZlcnRpY2FsUG9zaXRpb24g
fTsKK30KKworTGF5b3V0VW5pdCBGbG9hdGluZ0NvbnRleHQ6OmluaXRpYWxWZXJ0aWNhbFBvc2l0
aW9uKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAogeworICAgIC8vIEluY29taW5nIGZsb2F0
aW5nIGNhbm5vdCBiZSBwbGFjZWQgaGlnaGVyIHRoYW4gZXhpc3RpbmcgZmxvYXRpbmdzLgorICAg
IC8vIFRha2UgdGhlIHN0YXRpYyBwb3NpdGlvbiAod2hlcmUgdGhlIGJveCB3b3VsZCBnbyBpZiBp
dCB3YXNuJ3QgZmxvYXRpbmcpIGFuZCBhZGp1c3QgaXQgd2l0aCB0aGUgbGFzdCBmbG9hdGluZy4K
KyAgICBhdXRvJiBkaXNwbGF5Qm94ID0gKmxheW91dENvbnRleHQoKS5kaXNwbGF5Qm94Rm9yTGF5
b3V0Qm94KGxheW91dEJveCk7CisKKyAgICBpZiAoYXV0byBsYXN0RmxvYXRpbmcgPSBtX2Zsb2F0
aW5nU3RhdGUubGFzdCgpKQorICAgICAgICByZXR1cm4gc3RkOjptYXgoZGlzcGxheUJveC50b3Ao
KSwgbGF5b3V0Q29udGV4dCgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxhc3RGbG9hdGluZykt
PnRvcCgpKTsKKworICAgIHJldHVybiBkaXNwbGF5Qm94LnRvcCgpOwogfQogCi1Qb3NpdGlvbiBG
bG9hdGluZ0NvbnRleHQ6OmNvbXB1dGVQb3NpdGlvbihjb25zdCBCb3gmIGxheW91dEJveCkKK0xh
eW91dFVuaXQgRmxvYXRpbmdDb250ZXh0OjphbGlnbldpdGhDb250YWluaW5nQmxvY2soY29uc3Qg
Qm94JiBsYXlvdXRCb3gpIGNvbnN0CiB7CisgICAgLy8gSWYgdGhlcmUgaXMgbm8gZmxvYXRpbmcg
dG8gYWxpZ24gd2l0aCwgcHVzaCB0aGUgYm94IHRvIHRoZSBsZWZ0L3JpZ2h0IGVkZ2Ugb2YgaXRz
IGNvbnRhaW5pbmcgYmxvY2sncyBjb250ZW50IGJveC4KKyAgICAvLyAoRWl0aGVyIHRoZXJlJ3Mg
bm8gZmxvYXRpbmdzIGF0IGFsbCBvciB0aGlzIGJveCBkb2VzIG5vdCBmaXQgYXQgYW55IHZlcnRp
Y2FsIHBvc2l0aW9ucyB3aGVyZSB0aGUgZmxvYXRpbmdzIGFyZS4pCiAgICAgYXV0byYgbGF5b3V0
Q29udGV4dCA9IG1fZmxvYXRpbmdTdGF0ZS5sYXlvdXRDb250ZXh0KCk7Ci0gICAgLy8gMS4gTm8g
ZmxvYXRpbmcgYm94IG9uIHRoZSBjb250ZXh0IHlldCAtPiBhbGlnbiBpdCB3aXRoIHRoZSBjb250
YWluaW5nIGJsb2NrJ3MgbGVmdC9yaWdodCBlZGdlLgotICAgIGlmIChtX2Zsb2F0aW5nU3RhdGUu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFB1c2ggdGhlIGJveCB0byB0aGUgbGVmdC9yaWdodCBl
ZGdlLgotICAgICAgICBhdXRvKiBjb250YWluaW5nQmxvY2sgPSBsYXlvdXRCb3guY29udGFpbmlu
Z0Jsb2NrKCk7Ci0gICAgICAgIGF1dG8qIGRpc3BsYXlCb3ggPSBsYXlvdXRDb250ZXh0LmRpc3Bs
YXlCb3hGb3JMYXlvdXRCb3goKmNvbnRhaW5pbmdCbG9jayk7CisgICAgYXV0byogY29udGFpbmlu
Z0Jsb2NrID0gbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpOworICAgIEFTU0VSVChjb250YWlu
aW5nQmxvY2sgPT0gJm1fZm9ybWF0dGluZ0NvbnRleHRSb290IHx8IGNvbnRhaW5pbmdCbG9jay0+
aXNEZXNjZW5kYW50T2YobV9mb3JtYXR0aW5nQ29udGV4dFJvb3QpKTsKKworICAgIGF1dG8qIGNv
bnRhaW5nQmxvY2tEaXNwbGF5Qm94ID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0
Qm94KCpjb250YWluaW5nQmxvY2spOworCisgICAgaWYgKGxheW91dEJveC5pc0xlZnRGbG9hdGlu
Z1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgcmV0dXJuIGNvbnRhaW5nQmxvY2tEaXNwbGF5Qm94LT5j
b250ZW50Qm94TGVmdCgpOworCisgICAgYXV0byBib3hXaWR0aCA9IGxheW91dENvbnRleHQuZGlz
cGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpLT5tYXJnaW5Cb3goKS53aWR0aCgpOworICAg
IHJldHVybiBjb250YWluZ0Jsb2NrRGlzcGxheUJveC0+Y29udGVudEJveFJpZ2h0KCkgLSBib3hX
aWR0aDsKK30KKworTGF5b3V0VW5pdCBGbG9hdGluZ0NvbnRleHQ6OmFsaWduV2l0aEZsb2F0aW5n
cyhjb25zdCBGbG9hdGluZ1BhaXImIGZsb2F0aW5nUGFpciwgY29uc3QgQm94JiBsYXlvdXRCb3gp
IGNvbnN0Cit7CisgICAgLy8gQ29tcHV0ZSB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBmb3IgdGhl
IG5ldyBmbG9hdGluZyBieSB0YWtpbmcgYm90aCB0aGUgY29udGluaW5nIGJsb2NrIGFuZCB0aGUg
Y3VycmVudCBsZWZ0L3JpZ2h0IGZsb2F0aW5ncyBpbnRvIGFjY291bnQuCisgICAgYXV0byYgY29u
dGFpbmluZ0Jsb2NrID0gKmxheW91dENvbnRleHQoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCps
YXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrQ29u
dGVudExlZnQgPSBjb250YWluaW5nQmxvY2suY29udGVudEJveExlZnQoKTsKKyAgICBhdXRvIGNv
bnRhaW5pbmdCbG9ja0NvbnRlbnRSaWdodCA9IGNvbnRhaW5pbmdCbG9jay5jb250ZW50Qm94Umln
aHQoKTsKKyAgICBhdXRvIG1hcmdpbkJveFdpZHRoID0gbGF5b3V0Q29udGV4dCgpLmRpc3BsYXlC
b3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KS0+bWFyZ2luQm94KCkud2lkdGgoKTsKKworICAgIGlm
IChmbG9hdGluZ1BhaXIuaXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gbGF5b3V0Qm94LmlzTGVmdEZsb2F0aW5nUG9zaXRpb25lZCgpID8g
Y29udGFpbmluZ0Jsb2NrQ29udGVudExlZnQgOiBjb250YWluaW5nQmxvY2tDb250ZW50UmlnaHQg
LSBtYXJnaW5Cb3hXaWR0aDsKKyAgICB9CisKKyAgICBpZiAobGF5b3V0Qm94LmlzTGVmdEZsb2F0
aW5nUG9zaXRpb25lZCgpKSB7CisgICAgICAgIGlmIChhdXRvKiBsZWZ0RGlzcGxheUJveCA9IGZs
b2F0aW5nUGFpci5sZWZ0KCkpIAorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWluKHN0ZDo6bWF4
KGNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMZWZ0LCBsZWZ0RGlzcGxheUJveC0+cmlnaHQoKSksIGNv
bnRhaW5pbmdCbG9ja0NvbnRlbnRSaWdodCAtIG1hcmdpbkJveFdpZHRoKTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiBjb250YWluaW5nQmxvY2tDb250ZW50TGVmdDsKKyAgICB9CisKKyAgICBB
U1NFUlQobGF5b3V0Qm94LmlzUmlnaHRGbG9hdGluZ1Bvc2l0aW9uZWQoKSk7CisKKyAgICBpZiAo
YXV0byogcmlnaHREaXNwbGF5Qm94ID0gZmxvYXRpbmdQYWlyLnJpZ2h0KCkpCisgICAgICAgIHJl
dHVybiBzdGQ6Om1heChzdGQ6Om1pbihjb250YWluaW5nQmxvY2tDb250ZW50UmlnaHQsIHJpZ2h0
RGlzcGxheUJveC0+bGVmdCgpKSAtIG1hcmdpbkJveFdpZHRoLCBjb250YWluaW5nQmxvY2tDb250
ZW50TGVmdCk7CisKKyAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrQ29udGVudFJpZ2h0IC0gbWFy
Z2luQm94V2lkdGg7Cit9CiAKLSAgICAgICAgaWYgKGxheW91dEJveC5pc0xlZnRGbG9hdGluZ1Bv
c2l0aW9uZWQoKSkKLSAgICAgICAgICAgIHJldHVybiB7IGRpc3BsYXlCb3gtPmNvbnRlbnRCb3hM
ZWZ0KCksIGRpc3BsYXlCb3gtPmNvbnRlbnRCb3hUb3AoKSB9Oworc3RhdGljIGNvbnN0IERpc3Bs
YXk6OkJveCogZmxvYXRpbmdEaXNwbGF5Qm94KHVuc2lnbmVkIGluZGV4LCBjb25zdCBGbG9hdGlu
Z1N0YXRlOjpGbG9hdGluZ0xpc3QmIGZsb2F0aW5ncywgY29uc3QgTGF5b3V0Q29udGV4dCYgbGF5
b3V0Q29udGV4dCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IGZsb2F0aW5ncy5zaXpl
KCkpOworICAgIHJldHVybiBsYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmZs
b2F0aW5nc1tpbmRleF0pOworfQorCitGbG9hdGluZ1BhaXI6OkZsb2F0aW5nUGFpcihjb25zdCBM
YXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBGbG9hdGluZ1N0YXRlJiBmbG9hdGlu
Z1N0YXRlKQorICAgIDogbV9sYXlvdXRDb250ZXh0KGxheW91dENvbnRleHQpCisgICAgLCBtX2Zs
b2F0aW5nU3RhdGUoZmxvYXRpbmdTdGF0ZSkKK3sKK30KKworY29uc3QgRGlzcGxheTo6Qm94KiBG
bG9hdGluZ1BhaXI6OmxlZnQoKSBjb25zdAoreworICAgIGlmICghbV9sZWZ0SW5kZXgpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGZsb2F0aW5nRGlzcGxheUJveCgqbV9s
ZWZ0SW5kZXgsIG1fZmxvYXRpbmdTdGF0ZS5mbG9hdGluZ3MoKS5sZWZ0LCBtX2xheW91dENvbnRl
eHQpOworfQorCitjb25zdCBEaXNwbGF5OjpCb3gqIEZsb2F0aW5nUGFpcjo6cmlnaHQoKSBjb25z
dAoreworICAgIGlmICghbV9yaWdodEluZGV4KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIHJldHVybiBmbG9hdGluZ0Rpc3BsYXlCb3goKm1fcmlnaHRJbmRleCwgbV9mbG9hdGluZ1N0
YXRlLmZsb2F0aW5ncygpLnJpZ2h0LCBtX2xheW91dENvbnRleHQpOworfQorCitib29sIEZsb2F0
aW5nUGFpcjo6aW50ZXJzZWN0cyhjb25zdCBEaXNwbGF5OjpCb3g6OlJlY3QmIHJlY3QpIGNvbnN0
Cit7CisgICAgYXV0byBpbnRlcnNlY3RzID0gWyZdKGNvbnN0IERpc3BsYXk6OkJveCogZmxvYXRp
bmcsIGNvbnN0IERpc3BsYXk6OkJveDo6UmVjdCYgcmVjdCkgeworICAgICAgICBpZiAoIWZsb2F0
aW5nKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBGSVhNRTogdXNlIG1h
cmdpbiBib3ggaGVyZS4KKyAgICAgICAgcmV0dXJuIGZsb2F0aW5nLT5yZWN0KCkuaW50ZXJzZWN0
cyhyZWN0KTsKKyAgICB9OworCisgICAgaWYgKCFtX2xlZnRJbmRleCAmJiAhbV9yaWdodEluZGV4
KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKGludGVyc2VjdHMobGVmdCgpLCByZWN0KSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAoaW50ZXJzZWN0cyhyaWdodCgpLCByZWN0KSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0l0ZXJhdG9yOjpJdGVyYXRv
cihjb25zdCBMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBGbG9hdGluZ1N0YXRl
JiBmbG9hdGluZ1N0YXRlKQorICAgIDogbV9sYXlvdXRDb250ZXh0KGxheW91dENvbnRleHQpCisg
ICAgLCBtX2Zsb2F0aW5nU3RhdGUoZmxvYXRpbmdTdGF0ZSkKKyAgICAsIG1fY3VycmVudChsYXlv
dXRDb250ZXh0LCBmbG9hdGluZ1N0YXRlKQoreworfQorCitJdGVyYXRvciYgSXRlcmF0b3I6Om9w
ZXJhdG9yKysoKQoreworICAgIGlmIChtX2N1cnJlbnQuaXNFbXB0eSgpKSB7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAg
YXV0byBwcmV2aW91c0Zsb2F0aW5nSW5kZXggPSBbJl0oY29uc3QgRmxvYXRpbmdTdGF0ZTo6Rmxv
YXRpbmdMaXN0JiBmbG9hdGluZ3MsIHVuc2lnbmVkIGluZGV4KSAtPiBzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiB7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBmbG9hdGluZ3Muc2l6
ZSgpKTsKKworICAgICAgICBpZiAoIWluZGV4KQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgICAgICBhdXRvIGN1cnJlbnRCb3R0b20gPSBmbG9hdGluZ0Rpc3BsYXlCb3goaW5kZXgtLSwg
ZmxvYXRpbmdzLCBtX2xheW91dENvbnRleHQpLT5ib3R0b20oKTsKKyAgICAgICAgd2hpbGUgKHRy
dWUpIHsKKyAgICAgICAgICAgIGlmIChmbG9hdGluZ0Rpc3BsYXlCb3goaW5kZXgsIGZsb2F0aW5n
cywgbV9sYXlvdXRDb250ZXh0KS0+Ym90dG9tKCkgPiBjdXJyZW50Qm90dG9tKQorICAgICAgICAg
ICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIGlmICghaW5kZXgtLSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfTsKKworICAgIC8vIDEuIFRha2UgdGhl
IGN1cnJlbnQgZmxvYXRpbmcgZnJvbSBsZWZ0IGFuZCByaWdodCBhbmQgY2hlY2sgd2hpY2ggb25l
J3MgYm90dG9tIGVkZ2UgaXMgcG9zaXRpb25lZCBoaWdoZXIgKHRoZXkgY291bGQgYmUgb24gdGhl
IHNhbWUgdmVydGljYWwgcG9zaXRpb24gdG9vKS4KKyAgICAvLyBUaGUgY3VycmVudCBmbG9hdGlu
Z3MgZnJvbSBsZWZ0IGFuZCByaWdodCBhcmUgY29uc2lkZXJlZCB0aGUgaW5uZXItbW9zdCBwYWly
IGZvciB0aGUgY3VycmVudCB2ZXJ0aWNhbCBwb3NpdGlvbi4KKyAgICAvLyAyLiBNb3ZlIGF3YXkg
ZnJvbSBpbm5lci1tb3N0IHBhaXIgYnkgcGlja2luZyBvbmUgb2YgdGhlIHByZXZpb3VzIGZsb2F0
aW5ncyBpbiB0aGUgbGlzdCgjMSkKKyAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbmV3IGZsb2F0aW5n
J3MgYm90dG9tIGVkZ2UgaXMgcG9zaXRpb25lZCBsb3dlciB0aGFuIHRoZSBjdXJyZW50IG9uZSAt
d2hpY2ggZXNzZW50aWFsbHkgbWVhbnMgc2tpcHBpbmcgaW4tYmV0d2VlbiBmbG9hdHMgdGhhdCBh
cmUgcG9zaXRpb25lZCBoaWdoZXIpLgorICAgIC8vIDMuIFJlc2V0IHRoZSB2ZXJ0aWNhbCBwb3Np
dGlvbiBhbmQgYWxpZ24gaXQgd2l0aCB0aGUgbmV3IGxlZnQtcmlnaHQgcGFpci4gVGhlc2UgZmxv
YXRpbmdzIGFyZSBub3cgdGhlIGlubmVyLW1vc3QgYm94ZXMgZm9yIHRoZSBjdXJyZW50IHZlcnRp
Y2FsIHBvc2l0aW9uLgorICAgIC8vIEFzIHRoZSByZXN1bHQgd2UgaGF2ZSBtb3JlIGhvcml6b250
YWwgc3BhY2Ugb24gdGhlIGN1cnJlbnQgdmVydGljYWwgcG9zaXRpb24uCisgICAgYXV0byBsZWZ0
Qm90dG9tID0gbV9jdXJyZW50LmxlZnQoKSA/IHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4obV9j
dXJyZW50LmxlZnQoKS0+Ym90dG9tKCkpIDogc3RkOjpudWxsb3B0OworICAgIGF1dG8gcmlnaHRC
b3R0b20gPSBtX2N1cnJlbnQucmlnaHQoKSA/IHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4obV9j
dXJyZW50LnJpZ2h0KCktPmJvdHRvbSgpKSA6IHN0ZDo6bnVsbG9wdDsKIAotICAgICAgICBhdXRv
IGJveFdpZHRoID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJv
eCktPndpZHRoKCk7Ci0gICAgICAgIHJldHVybiB7IGRpc3BsYXlCb3gtPmNvbnRlbnRCb3hSaWdo
dCgpIC0gYm94V2lkdGgsIGRpc3BsYXlCb3gtPmNvbnRlbnRCb3hUb3AoKSB9OworICAgIGF1dG8g
dXBkYXRlTGVmdCA9IChsZWZ0Qm90dG9tID09IHJpZ2h0Qm90dG9tKSB8fCAoIXJpZ2h0Qm90dG9t
IHx8IChsZWZ0Qm90dG9tICYmIGxlZnRCb3R0b20gPCByaWdodEJvdHRvbSkpOyAKKyAgICBhdXRv
IHVwZGF0ZVJpZ2h0ID0gKGxlZnRCb3R0b20gPT0gcmlnaHRCb3R0b20pIHx8ICghbGVmdEJvdHRv
bSB8fCAocmlnaHRCb3R0b20gJiYgbGVmdEJvdHRvbSA+IHJpZ2h0Qm90dG9tKSk7IAorCisgICAg
aWYgKHVwZGF0ZUxlZnQpIHsKKyAgICAgICAgQVNTRVJUKG1fY3VycmVudC5tX2xlZnRJbmRleCk7
CisgICAgICAgIG1fdmVydGljYWxQb3NpdGlvbiA9ICpsZWZ0Qm90dG9tOworICAgICAgICBtX2N1
cnJlbnQubV9sZWZ0SW5kZXggPSBwcmV2aW91c0Zsb2F0aW5nSW5kZXgobV9mbG9hdGluZ1N0YXRl
LmZsb2F0aW5ncygpLmxlZnQsICptX2N1cnJlbnQubV9sZWZ0SW5kZXgpOworICAgIH0KKyAgICAK
KyAgICBpZiAodXBkYXRlUmlnaHQpIHsKKyAgICAgICAgQVNTRVJUKG1fY3VycmVudC5tX3JpZ2h0
SW5kZXgpOworICAgICAgICBtX3ZlcnRpY2FsUG9zaXRpb24gPSAqcmlnaHRCb3R0b207CisgICAg
ICAgIG1fY3VycmVudC5tX3JpZ2h0SW5kZXggPSBwcmV2aW91c0Zsb2F0aW5nSW5kZXgobV9mbG9h
dGluZ1N0YXRlLmZsb2F0aW5ncygpLnJpZ2h0LCAqbV9jdXJyZW50Lm1fcmlnaHRJbmRleCk7CiAg
ICAgfQogCi0gICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKLSAgICByZXR1cm4geyB9
OworICAgIHJldHVybiAqdGhpczsKK30KKwordm9pZCBJdGVyYXRvcjo6c2V0KExheW91dFVuaXQg
dmVydGljYWxQb3NpdGlvbikKK3sKKyAgICAvLyBNb3ZlIHRoZSBpdGVyYXRvciB0byB0aGUgaW5p
dGlhbCB2ZXJ0aWNhbCBwb3NpdGlvbiBieSBzdGFydGluZyBhdCB0aGUgaW5uZXItbW9zdCBmbG9h
dGluZyBwYWlyIChsYXN0IGZsb2F0cyBvbiBsZWZ0L3JpZ2h0KS4KKyAgICAvLyAxLiBDaGVjayBp
ZiB0aGUgaW5uZXItbW9zdCBwYWlyIGNvdmVycyB0aGUgdmVydGljYWwgcG9zaXRpb24uCisgICAg
Ly8gMi4gTW92ZSBvdXR3YXJkcyBmcm9tIHRoZSBpbm5lci1tb3N0IHBhaXIgdW50aWwgdGhlIHZl
cnRpY2FsIHBvc3Rpb24gaW50ZXJzZWN0cy4KKyAgICAvLyAoTm90ZSB0aGF0IHZlcnRpY2FsUG9z
aXRpb24gaGFzIGFscmVhZHkgYmVlbiBhZGp1c3RlZCB3aXRoIHRoZSB0b3Agb2YgdGhlIGxhc3Qg
ZmxvYXQuKQorCisgICAgbV92ZXJ0aWNhbFBvc2l0aW9uID0gdmVydGljYWxQb3NpdGlvbjsKKyAg
ICAvLyBObyBmbG9hdGluZ3MgYXQgYWxsPworICAgIGlmIChtX2Zsb2F0aW5nU3RhdGUuaXNFbXB0
eSgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgIG1fY3VycmVu
dC5tX2xlZnRJbmRleCA9IHsgfTsKKyAgICAgICAgbV9jdXJyZW50Lm1fcmlnaHRJbmRleCA9IHsg
fTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gZmluZEZsb2F0aW5nQmVsb3cg
PSBbJl0oY29uc3QgRmxvYXRpbmdTdGF0ZTo6RmxvYXRpbmdMaXN0JiBsaXN0KSAtPiBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPiB7CisgICAgICAgIAorICAgICAgICBhdXRvIGluZGV4ID0gbGlzdC5z
aXplKCk7IAorICAgICAgICB3aGlsZSAoaW5kZXgpIHsKKyAgICAgICAgICAgIGF1dG8gYm90dG9t
ID0gZmxvYXRpbmdEaXNwbGF5Qm94KC0taW5kZXgsIGxpc3QsIG1fbGF5b3V0Q29udGV4dCktPmJv
dHRvbSgpOworICAgICAgICAgICAgLy8gSXMgdGhpcyBmbG9hdGluZyBpbnRydXNpdmUgb24gdGhp
cyBwb3NpdGlvbj8KKyAgICAgICAgICAgIGlmIChib3R0b20gPiB2ZXJ0aWNhbFBvc2l0aW9uKQor
ICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
eyB9OworICAgIH07CisKKyAgICBhdXRvJiBmbG9hdGluZ3MgPSBtX2Zsb2F0aW5nU3RhdGUuZmxv
YXRpbmdzKCk7CisgICAgbV9jdXJyZW50Lm1fbGVmdEluZGV4ID0gZmluZEZsb2F0aW5nQmVsb3co
ZmxvYXRpbmdzLmxlZnQpOworICAgIG1fY3VycmVudC5tX3JpZ2h0SW5kZXggPSBmaW5kRmxvYXRp
bmdCZWxvdyhmbG9hdGluZ3MucmlnaHQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvRmxvYXRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRmxv
YXRpbmdDb250ZXh0LmgKaW5kZXggZTQ3MWY0YWRiZjE5YzgxMTUzY2Y4Y2E4ZGU1MWU1M2UxMDZm
N2VhNy4uZGU1N2ZhMTA3NGUzMzIzZjFlMzA4NTJjMzUxYjU1MDIyNTg3NTc1YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zsb2F0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9GbG9hdGluZ0NvbnRleHQuaApAQCAtMzMsMTMgKzMzLDExIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotbmFtZXNwYWNlIERpc3BsYXkgewotY2xhc3MgQm94OwotfQot
CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAogY2xhc3MgQm94OworY2xhc3MgQ29udGFpbmVyOworY2xh
c3MgRmxvYXRpbmdQYWlyOwogY2xhc3MgTGF5b3V0Q29udGV4dDsKIAogLy8gRmxvYXRpbmdDb250
ZXh0IGlzIHJlc3BvbnNpYmxlIGZvciBhZGp1c3RpbmcgdGhlIHBvc2l0aW9uIG9mIGEgYm94IGlu
IHRoZSBjdXJyZW50IGZvcm1hdHRpbmcgY29udGV4dApAQCAtNDcsMTUgKzQ1LDIyIEBAIGNsYXNz
IExheW91dENvbnRleHQ7CiBjbGFzcyBGbG9hdGluZ0NvbnRleHQgewogICAgIFdURl9NQUtFX0lT
T19BTExPQ0FURUQoRmxvYXRpbmdDb250ZXh0KTsKIHB1YmxpYzoKLSAgICBGbG9hdGluZ0NvbnRl
eHQoRmxvYXRpbmdTdGF0ZSYpOworICAgIEZsb2F0aW5nQ29udGV4dChjb25zdCBDb250YWluZXIm
IGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgRmxvYXRpbmdTdGF0ZSYpOwogCiAgICAgRmxvYXRpbmdT
dGF0ZSYgZmxvYXRpbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvYXRpbmdTdGF0ZTsgfQog
Ci0gICAgUG9zaXRpb24gY29tcHV0ZVBvc2l0aW9uKGNvbnN0IEJveCYpOworICAgIFBvc2l0aW9u
IGNvbXB1dGVQb3NpdGlvbihjb25zdCBCb3gmKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBMYXlv
dXRDb250ZXh0JiBsYXlvdXRDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9mbG9hdGluZ1N0YXRl
LmxheW91dENvbnRleHQoKTsgfQogCisgICAgUG9zaXRpb24gZmxvYXRpbmdQb3NpdGlvbihjb25z
dCBCb3gmKSBjb25zdDsKKworICAgIExheW91dFVuaXQgaW5pdGlhbFZlcnRpY2FsUG9zaXRpb24o
Y29uc3QgQm94JikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBhbGlnbldpdGhDb250YWluaW5nQmxv
Y2soY29uc3QgQm94JikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBhbGlnbldpdGhGbG9hdGluZ3Mo
Y29uc3QgRmxvYXRpbmdQYWlyJiwgY29uc3QgQm94JikgY29uc3Q7CisKKyAgICBjb25zdCBDb250
YWluZXImIG1fZm9ybWF0dGluZ0NvbnRleHRSb290OwogICAgIEZsb2F0aW5nU3RhdGUmIG1fZmxv
YXRpbmdTdGF0ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9GbG9h
dGluZ1N0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9GbG9hdGluZ1N0YXRlLmNwcApp
bmRleCAzZmRjYWMxZmQzMmM2NWIxNzBlN2E4YmI2NDliMmQ5M2NmZGZmOGRkLi4zOTcyNTkwN2E0
M2QzZDVkNWFmZmY1NWMxZTE0NDdkMDNmMDA1MjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvRmxvYXRpbmdTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zs
b2F0aW5nU3RhdGUuY3BwCkBAIC00NiwxNCArNDYsMTUgQEAgdm9pZCBGbG9hdGluZ1N0YXRlOjph
cHBlbmQoY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7CiAgICAgLy8gRmxvYXRpbmcgc3RhdGUgc2hv
dWxkIGhvbGQgYm94ZXMgd2l0aCBjb21wdXRlZCBwb3NpdGlvbi9zaXplLgogICAgIEFTU0VSVCht
X2xheW91dENvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpKTsKKyAgICBt
X2xhc3QgPSBtYWtlV2Vha1B0cihjb25zdF9jYXN0PEJveCY+KGxheW91dEJveCkpOwogCiAgICAg
aWYgKGxheW91dEJveC5pc0xlZnRGbG9hdGluZ1Bvc2l0aW9uZWQoKSkgewotICAgICAgICBtX2xl
ZnRGbG9hdGluZ3MuYXBwZW5kKG1ha2VXZWFrUHRyKGNvbnN0X2Nhc3Q8Qm94Jj4obGF5b3V0Qm94
KSkpOworICAgICAgICBtX2xlZnRGbG9hdGluZ3MuYXBwZW5kKG1fbGFzdCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBpZiAobGF5b3V0Qm94LmlzUmlnaHRGbG9hdGluZ1Bvc2l0aW9u
ZWQoKSkgewotICAgICAgICBtX3JpZ2h0RmxvYXRpbmdzLmFwcGVuZChtYWtlV2Vha1B0cihjb25z
dF9jYXN0PEJveCY+KGxheW91dEJveCkpKTsKKyAgICAgICAgbV9yaWdodEZsb2F0aW5ncy5hcHBl
bmQobV9sYXN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L0Zsb2F0aW5nU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9G
bG9hdGluZ1N0YXRlLmgKaW5kZXggOTM2OTk4NWNmMTE3NGQwNjE3YWM0NjY4ZDVmY2Q0NGJlM2M5
NTAxNi4uOTZmODg3M2VmOWQxMjZhZDEzNjQ4NTY4MDI3Y2ViZmY4YzliNDFmMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zsb2F0aW5nU3RhdGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvRmxvYXRpbmdTdGF0ZS5oCkBAIC00OSw2ICs0OSwxNCBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xlZnRGbG9hdGluZ3MuaXNFbXB0
eSgpICYmIG1fcmlnaHRGbG9hdGluZ3MuaXNFbXB0eSgpOyB9CiAKKyAgICB1c2luZyBGbG9hdGlu
Z0xpc3QgPSBWZWN0b3I8V2Vha1B0cjxCb3g+PjsKKyAgICBzdHJ1Y3QgRmxvYXRpbmdzIHsKKyAg
ICAgICAgY29uc3QgRmxvYXRpbmdMaXN0JiBsZWZ0OworICAgICAgICBjb25zdCBGbG9hdGluZ0xp
c3QmIHJpZ2h0OyAKKyAgICB9OworICAgIGNvbnN0IEZsb2F0aW5ncyBmbG9hdGluZ3MoKSBjb25z
dCB7IHJldHVybiB7IG1fbGVmdEZsb2F0aW5ncywgbV9yaWdodEZsb2F0aW5ncyB9OyB9CisgICAg
Y29uc3QgQm94KiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0LmdldCgpOyB9CisKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIEZsb2F0aW5nQ29udGV4dDsKICAgICBGbG9hdGluZ1N0YXRl
KExheW91dENvbnRleHQmKTsKQEAgLTU3LDkgKzY1LDkgQEAgcHJpdmF0ZToKIAogICAgIExheW91
dENvbnRleHQmIG1fbGF5b3V0Q29udGV4dDsKIAotICAgIHVzaW5nIEZsb2F0aW5nTGlzdCA9IFZl
Y3RvcjxXZWFrUHRyPEJveD4+OwogICAgIEZsb2F0aW5nTGlzdCBtX2xlZnRGbG9hdGluZ3M7CiAg
ICAgRmxvYXRpbmdMaXN0IG1fcmlnaHRGbG9hdGluZ3M7CisgICAgV2Vha1B0cjxCb3g+IG1fbGFz
dDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1h
dHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
YmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IGZhZjFlODk3
MzQzYzM0NWIyZGU1Y2I2YWM1Y2NkMDQ4MzFhMGY1NjIuLmEwNGQ5MDdmZTQzZTIyMzg0MDJlM2U2
ODBiNjVkNDJmNDFmNWNiNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9j
a2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAt
NjIsNyArNjIsNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dChMYXlvdXRD
b250ZXh0JiBsYXlvdXRDb250ZXh0LCBGb3JtYXR0aW5nU3RhdAogCiAgICAgYXV0byYgZm9ybWF0
dGluZ1Jvb3QgPSBkb3duY2FzdDxDb250YWluZXI+KHJvb3QoKSk7CiAgICAgTGF5b3V0UXVldWUg
bGF5b3V0UXVldWU7Ci0gICAgRmxvYXRpbmdDb250ZXh0IGZsb2F0aW5nQ29udGV4dChmb3JtYXR0
aW5nU3RhdGUuZmxvYXRpbmdTdGF0ZSgpKTsKKyAgICBGbG9hdGluZ0NvbnRleHQgZmxvYXRpbmdD
b250ZXh0KGZvcm1hdHRpbmdSb290LCBmb3JtYXR0aW5nU3RhdGUuZmxvYXRpbmdTdGF0ZSgpKTsK
ICAgICAvLyBUaGlzIGlzIGEgcG9zdC1vcmRlciB0cmVlIHRyYXZlcnNhbCBsYXlvdXQuCiAgICAg
Ly8gVGhlIHJvb3QgY29udGFpbmVyIGxheW91dCBpcyBkb25lIGluIHRoZSBmb3JtYXR0aW5nIGNv
bnRleHQgaXQgbGl2ZXMgaW4sIG5vdCB0aGF0IG9uZSBpdCBjcmVhdGVzLCBzbyBsZXQncyBzdGFy
dCB3aXRoIHRoZSBmaXJzdCBjaGlsZC4KICAgICBpZiAoYXV0byogZmlyc3RDaGlsZCA9IGZvcm1h
dHRpbmdSb290LmZpcnN0SW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpCkBAIC05NCw4ICs5NCw2IEBA
IHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0KExheW91dENvbnRleHQmIGxheW91
dENvbnRleHQsIEZvcm1hdHRpbmdTdGF0CiAgICAgICAgICAgICBjb21wdXRlU3RhdGljUG9zaXRp
b24obGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94LCBkaXNwbGF5Qm94KTsKICAgICAgICAgICAgIGNv
bXB1dGVCb3JkZXJBbmRQYWRkaW5nKGxheW91dENvbnRleHQsIGxheW91dEJveCwgZGlzcGxheUJv
eCk7CiAgICAgICAgICAgICBjb21wdXRlV2lkdGhBbmRNYXJnaW4obGF5b3V0Q29udGV4dCwgbGF5
b3V0Qm94LCBkaXNwbGF5Qm94KTsKLSAgICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNGbG9hdGlu
Z1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgICAgICBjb21wdXRlRmxvYXRpbmdQb3NpdGlvbihm
bG9hdGluZ0NvbnRleHQsIGxheW91dEJveCwgZGlzcGxheUJveCk7CiAgICAgICAgICAgICBpZiAo
IWlzPENvbnRhaW5lcj4obGF5b3V0Qm94KSB8fCAhZG93bmNhc3Q8Q29udGFpbmVyPihsYXlvdXRC
b3gpLmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgYXV0byYgZmlyc3RDaGlsZCA9ICpkb3duY2FzdDxDb250YWluZXI+KGxheW91
dEJveCkuZmlyc3RJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKTsKQEAgLTEzOCw4ICsxMzYsNiBAQCB2
b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEZvcm1hdHRpbmdDb250ZXh0Um9vdChM
YXlvdXRDb250ZXh0JiBsYXlvdXRDbwogICAgIGNvbXB1dGVTdGF0aWNQb3NpdGlvbihsYXlvdXRD
b250ZXh0LCBsYXlvdXRCb3gsIGRpc3BsYXlCb3gpOwogICAgIGNvbXB1dGVCb3JkZXJBbmRQYWRk
aW5nKGxheW91dENvbnRleHQsIGxheW91dEJveCwgZGlzcGxheUJveCk7CiAgICAgY29tcHV0ZVdp
ZHRoQW5kTWFyZ2luKGxheW91dENvbnRleHQsIGxheW91dEJveCwgZGlzcGxheUJveCk7Ci0gICAg
aWYgKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQotICAgICAgICBjb21wdXRlRmxv
YXRpbmdQb3NpdGlvbihmbG9hdGluZ0NvbnRleHQsIGxheW91dEJveCwgZGlzcGxheUJveCk7CiAK
ICAgICAvLyBTd2ljaCBvdmVyIHRvIHRoZSBuZXcgZm9ybWF0dGluZyBjb250ZXh0ICh0aGUgb25l
IHRoYXQgdGhlIHJvb3QgY3JlYXRlcykuCiAgICAgYXV0byBmb3JtYXR0aW5nQ29udGV4dCA9IGxh
eW91dENvbnRleHQuZm9ybWF0dGluZ0NvbnRleHQobGF5b3V0Qm94KTsKQEAgLTE0OCw2ICsxNDQs
OCBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEZvcm1hdHRpbmdDb250ZXh0
Um9vdChMYXlvdXRDb250ZXh0JiBsYXlvdXRDbwogICAgIC8vIENvbWUgYmFjayBhbmQgZmluYWxp
emUgdGhlIHJvb3QncyBnZW9tZXRyeS4KICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0Nv
bnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW0NvbXB1dGVdIC0+IFtIZWlnaHRdW01hcmdpbl0gLT4g
Zm9yIGxheW91dEJveCgiIDw8ICZsYXlvdXRCb3ggPDwgIikiKTsKICAgICBjb21wdXRlSGVpZ2h0
QW5kTWFyZ2luKGxheW91dENvbnRleHQsIGxheW91dEJveCwgZGlzcGxheUJveCk7CisgICAgaWYg
KGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQorICAgICAgICBjb21wdXRlRmxvYXRp
bmdQb3NpdGlvbihmbG9hdGluZ0NvbnRleHQsIGxheW91dEJveCwgZGlzcGxheUJveCk7CiAgICAg
Ly8gTm93IHRoYXQgd2UgY29tcHV0ZWQgdGhlIHJvb3QncyBoZWlnaHQsIHdlIGNhbiBnbyBiYWNr
IGFuZCBsYXlvdXQgdGhlIG91dC1vZi1mbG93IGRlc2NlZGFudHMgKGlmIGFueSkuCiAgICAgZm9y
bWF0dGluZ0NvbnRleHQtPmxheW91dE91dE9mRmxvd0Rlc2NlbmRhbnRzKGxheW91dENvbnRleHQs
IGxheW91dEJveCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxh
eXRyZWUvRGlzcGxheUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUv
RGlzcGxheUJveC5jcHAKaW5kZXggYjAyMGMxZTcyODM0ZjFhZDFlM2NlMWNlMjQyOTlhZGI1YWUy
N2FkZC4uNzRjMDlkNGIyYzQ3OTg1OGZlZmM4YzU2ZGE1ODAzNThmNWU5NTMyMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmNwcApAQCAtMzYs
NiArMzYsMTcgQEAgbmFtZXNwYWNlIERpc3BsYXkgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
X0lNUEwoQm94KTsKIAorQm94OjpSZWN0OjpSZWN0KExheW91dFVuaXQgdG9wLCBMYXlvdXRVbml0
IGxlZnQsIExheW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQgaGVpZ2h0KQorICAgIDogbV9yZWN0
KGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCkKK3sKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAg
bV9oYXNWYWxpZFRvcCA9IHRydWU7CisgICAgbV9oYXNWYWxpZExlZnQgPSB0cnVlOworICAgIG1f
aGFzVmFsaWRXaWR0aCA9IHRydWU7CisgICAgbV9oYXNWYWxpZEhlaWdodCA9IHRydWU7CisjZW5k
aWYKK30KKwogQm94OjpCb3goY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogICAgIDogbV9zdHls
ZShzdHlsZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJl
ZS9EaXNwbGF5Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxh
eUJveC5oCmluZGV4IDEzYTNjNzQwOTZmMGM2YWU2YTFiMGQxOGJmM2JhMTMzOGJhNzEwNjYuLjU5
Y2M3NzFhNDhiY2ZjZTIxMjBjMWE0YWVlNzljOWRjYzc4NWFlOTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guaApAQCAtNTMsNiArNTMsNyBAQCBw
dWJsaWM6CiAgICAgY2xhc3MgUmVjdCB7CiAgICAgcHVibGljOgogICAgICAgICBSZWN0KCkgPSBk
ZWZhdWx0OworICAgICAgICBSZWN0KExheW91dFVuaXQgdG9wLCBMYXlvdXRVbml0IGxlZnQsIExh
eW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQgaGVpZ2h0KTsKICAgICAgICAgCiAgICAgICAgIExh
eW91dFVuaXQgdG9wKCkgY29uc3Q7CiAgICAgICAgIExheW91dFVuaXQgbGVmdCgpIGNvbnN0OwpA
QCAtODIsNiArODMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQgbW92ZVZlcnRpY2FsbHkoTGF5
b3V0VW5pdCk7CiAKICAgICAgICAgdm9pZCBleHBhbmQoTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCk7
CisgICAgICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBSZWN0JiByZWN0KSBjb25zdCB7IHJldHVy
biBtX3JlY3QuaW50ZXJzZWN0cyhyZWN0KTsgfQogCiAgICAgICAgIFJlY3QgY2xvbmUoKSBjb25z
dDsKICAgICAgICAgb3BlcmF0b3IgTGF5b3V0UmVjdCgpIGNvbnN0OwpAQCAtMTIyLDcgKzEyNCw3
IEBAIHB1YmxpYzoKICAgICBMYXlvdXRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiB7IHdpZHRo
KCksIGhlaWdodCgpIH07IH0KICAgICBMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4g
Ym9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSArIGNvbnRlbnRCb3hXaWR0aCgpICsgcGFkZGlu
Z1JpZ2h0KCkgKyBib3JkZXJSaWdodCgpOyB9CiAgICAgTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25z
dCB7IHJldHVybiBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSArIGNvbnRlbnRCb3hIZWlnaHQo
KSArIHBhZGRpbmdCb3R0b20oKSArIGJvcmRlckJvdHRvbSgpOyB9Ci0gICAgTGF5b3V0UmVjdCBy
ZWN0KCkgY29uc3QgeyByZXR1cm4geyBsZWZ0KCksIHRvcCgpLCB3aWR0aCgpLCBoZWlnaHQoKSB9
OyB9CisgICAgUmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4geyB0b3AoKSwgbGVmdCgpLCB3aWR0
aCgpLCBoZWlnaHQoKSB9OyB9CiAKICAgICBMYXlvdXRVbml0IG1hcmdpblRvcCgpIGNvbnN0Owog
ICAgIExheW91dFVuaXQgbWFyZ2luTGVmdCgpIGNvbnN0Owo=
</data>
<flag name="review"
          id="363927"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>