<?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>108868</bug_id>
          
          <creation_ts>2013-02-04 15:17:09 -0800</creation_ts>
          <short_desc>DFG should have a precise view of jump targets</short_desc>
          <delta_ts>2013-02-05 14:16:23 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>108414</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>824812</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-04 15:17:09 -0800</bug_when>
    <thetext>This will reduce the pressure on the CFG simplifier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824821</commentid>
    <comment_count>1</comment_count>
      <attachid>186476</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-04 15:24:28 -0800</bug_when>
    <thetext>Created attachment 186476
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824827</commentid>
    <comment_count>2</comment_count>
      <attachid>186476</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-02-04 15:27:28 -0800</bug_when>
    <thetext>Comment on attachment 186476
the patch

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

Looks fine, my only concern is whether std::sort is guaranteed to not be a stupid quick sort

&gt; Source/JavaScriptCore/bytecode/PreciseJumpTargets.cpp:116
&gt; +    std::sort(out.begin(), out.end());

How well does std::sort work on mostly ordered data?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824830</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-04 15:30:42 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 186476 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186476&amp;action=review
&gt; 
&gt; Looks fine, my only concern is whether std::sort is guaranteed to not be a stupid quick sort
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/PreciseJumpTargets.cpp:116
&gt; &gt; +    std::sort(out.begin(), out.end());
&gt; 
&gt; How well does std::sort work on mostly ordered data?

I don&apos;t think I have a guarantee there.  My recollection is that they don&apos;t do the rookie use-first-element-as-pivot mistake but I haven&apos;t read the code.  But the performance numbers are looking consistently good...

As well, even if std::sort were to deteriorate to O(n^2), it&apos;s O(n^2) over basic blocks and not instructions.  The downside of _not_ running the precise jump target calculator is that we deteriorate to O(n^2) over instructions in the CFG simplifier - so much much worse.

It would be great to try to optimize this code more, though, if we see it showing up as a hot spot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824831</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-04 15:31:06 -0800</bug_when>
    <thetext>Oops, I&apos;ll have to do a pretty big rebase apparently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825033</commentid>
    <comment_count>5</comment_count>
      <attachid>186526</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-04 19:30:09 -0800</bug_when>
    <thetext>Created attachment 186526
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825812</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-05 14:16:23 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/141931</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186476</attachid>
            <date>2013-02-04 15:24:28 -0800</date>
            <delta_ts>2013-02-04 19:30:09 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>precisejumps.patch</filename>
            <type>text/plain</type>
            <size>19001</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQxODIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBA
CisyMDEzLTAyLTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGEgcHJlY2lzZSB2aWV3IG9mIGp1bXAgdGFyZ2V0cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4ODY4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBQcmV2aW91c2x5
LCB0aGUgREZHIHJlbGllZCBlbnRpcmVseSBvbiB0aGUgQ29kZUJsb2NrJ3MganVtcCB0YXJnZXRz
IGxpc3QgZm9yCisgICAgICAgIGRldGVybWluaW5nIHdoZW4gdG8gYnJlYWsgYmFzaWMgYmxvY2tz
LiBUaGlzIHdvcmtlZCBncmVhdCwgZXhjZXB0IHNvbWV0aW1lcyBpdAorICAgICAgICB3b3VsZCBi
ZSB0b28gY29uc2VydmF0aXZlIHNpbmNlIHRoZSBDb2RlQmxvY2sganVzdCBzYXlzIHdoZXJlIHRo
ZSBieXRlY29kZQorICAgICAgICBnZW5lcmF0b3IgaW5zZXJ0ZWQgbGFiZWxzLgorICAgICAgICAK
KyAgICAgICAgVGhpcyBjaGFuZ2Uga2VlcHMgdGhlIG9sZCBqdW1wIHRhcmdldCBsaXN0IGluIENv
ZGVCbG9jayBzaW5jZSBpdCBpcyBzdGlsbAorICAgICAgICB2YWx1YWJsZSB0byB0aGUgYmFzZWxp
bmUgSklULCBidXQgc3dpdGNoZXMgdGhlIERGRyB0byB1c2UgaXRzIG93biBqdW1wIHRhcmdldAor
ICAgICAgICBjYWxjdWxhdG9yLiBUaGlzIG91Z2h0IHRvIHJlZHVjZSBwcmVzc3VyZSBvbiB0aGUg
REZHIHNpbXBsaWZpZXIsIHdoaWNoIHdvdWxkCisgICAgICAgIHByZXZpb3VzbHkgZG8gYSBsb3Qg
b2Ygd29yayB0byB0cnkgdG8gbWVyZ2UgcmVkdW5kYW50bHkgY3JlYXRlZCBiYXNpYyBibG9ja3Mu
CisgICAgICAgIEl0IGFwcGVhcnMgdG8gYmUgYSAxJSBwcm9ncmVzc2lvbiBvbiBTdW5TcGlkZXIu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0
LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBieXRlY29kZS9QcmVjaXNlSnVtcFRh
cmdldHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OmFkZFNpbXBs
ZVN3aXRjaFRhcmdldHMpOgorICAgICAgICAoSlNDOjpjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRz
KToKKyAgICAgICAgKiBieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuaDogQWRkZWQuCisgICAg
ICAgIChKU0MpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKToKKwogMjAxMy0wMi0w
NCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE0MTgwOS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE0MTcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTgsOCArNTgsOSBAQCBzZXQoSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGJ5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUuY3BwCiAgICAgYnl0ZWNvZGUvT3Bjb2RlLmNwcAogICAgIGJ5dGVjb2RlL1BvbHltb3Jw
aGljUHV0QnlJZExpc3QuY3BwCi0gICAgYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCisgICAg
Ynl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNwcAogICAgIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuY3BwCisgICAgYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCiAgICAgYnl0ZWNvZGUvUmVk
dWNlV2hpdGVzcGFjZS5jcHAKICAgICBieXRlY29kZS9SZXNvbHZlR2xvYmFsU3RhdHVzLmNwcAog
ICAgIGJ5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNDE3MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMTMyLDYgKzEz
Miw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9PcGVyYW5kcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TcGVjdWxhdGVkVHlwZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFN0YXR1cy5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5w
cmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlz
aW9uIDE0MTcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5n
IGNvcHkpCkBAIC02OCw2ICs2OCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGJ5dGVjb2RlL01ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIFwKICAgICBieXRlY29kZS9PcGNvZGUuY3BwIFwK
ICAgICBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCBcCisgICAgYnl0ZWNvZGUv
UHJlY2lzZUp1bXBUYXJnZXRzLmNwcCBcCiAgICAgYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAg
XAogICAgIGJ5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuY3BwIFwKICAgICBieXRlY29kZS9SZXNv
bHZlR2xvYmFsU3RhdHVzLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTQxNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw2ICsyMDAs
OCBAQAogCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IzNjEzRkM2RkRF
MDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NkVCQjMxNjY3NkVGNjAwOEJBREUzIC8qIENvZGVCbG9j
a1dpdGhKSVRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjk2RUJCMTE2Njc2RUY0MDA4QkFERTMgLyogQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk3NDk3
MTE2ODdBREU0MDBBNEZGNkEgLyogSlNDZWxsSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NzQ5NkYxNjg3QURFMjAwQTRGRjZBIC8qIEpT
Q2VsbElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjk4MjA2MDE2QkZFMzgxMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTgyMDVE
MTZCRkUzN0YwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuY3BwICovOyB9OworCQkwRjk4
MjA2MTE2QkZFMzgzMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk4MjA1RTE2QkZFMzdGMDAyNDBE
MDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggKi87IH07CiAJCTBGOUQzMzcwMTY1REJCOTAwMDVB
RDM4NyAvKiBEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5RDMzNkUxNjVEQkI4RDAwNUFEMzg3IC8qIERpc2Fzc2VtYmxlci5j
cHAgKi87IH07CiAJCTBGOUZDOEMzMTRFMUI1RkUwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOUZDOEJGMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCAq
LzsgfTsKIAkJMEY5RkM4QzQxNEUxQjYwMDAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExp
c3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZD
OEMwMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwNzMsNiArMTA3NSw4
IEBACiAJCTBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOTZFQkIxMTY2NzZFRjQwMDhCQURFMyAvKiBDb2RlQmxvY2tXaXRo
SklUVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQmxvY2tXaXRo
SklUVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk3NDk2RjE2ODdBREUy
MDBBNEZGNkEgLyogSlNDZWxsSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0NlbGxJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTgy
MDVEMTZCRkUzN0YwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJlY2lzZUp1bXBUYXJnZXRzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5ODIwNUUxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNp
c2VKdW1wVGFyZ2V0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmVjaXNl
SnVtcFRhcmdldHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDMzNkUxNjVE
QkI4RDAwNUFEMzg3IC8qIERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBEaXNhc3NlbWJsZXIuY3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL0Rpc2Fz
c2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUZDOEJGMTRFMUI1
RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlGQzhDMDE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODA3
LDcgKzI4MTEsNiBAQAogCQkJCTBGMEI4M0FBMTRCQ0Y1QjkwMDg4NUI0RiAvKiBFeHByZXNzaW9u
UmFuZ2VJbmZvLmggKi8sCiAJCQkJMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5SWRT
dGF0dXMuY3BwICovLAogCQkJCTBGOTMzMjk2MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeUlkU3Rh
dHVzLmggKi8sCi0JCQkJMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMu
Y3BwICovLAogCQkJCTBGMEI4M0E4MTRCQ0Y1NUUwMDg4NUI0RiAvKiBIYW5kbGVySW5mby5oICov
LAogCQkJCTk2OUEwNzkzMEVEMUQzQUUwMEYxRjY4MSAvKiBJbnN0cnVjdGlvbi5oICovLAogCQkJ
CUJDRkQ4QzkwMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICovLApAQCAtMjgyNCwx
MCArMjgyNywxMiBAQAogCQkJCTBGMkJEQzJCMTUxRkRFOEIwMENEODkxMCAvKiBPcGVyYW5kcy5o
ICovLAogCQkJCTBGOUZDOEJGMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0LmNwcCAqLywKIAkJCQkwRjlGQzhDMDE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdC5oICovLAorCQkJCTBGOTgyMDVEMTZCRkUzN0YwMDI0MEQwMiAvKiBQcmVjaXNl
SnVtcFRhcmdldHMuY3BwICovLAorCQkJCTBGOTgyMDVFMTZCRkUzN0YwMDI0MEQwMiAvKiBQcmVj
aXNlSnVtcFRhcmdldHMuaCAqLywKIAkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0
QnlJZFN0YXR1cy5jcHAgKi8sCi0JCQkJMEY5MzMyOTYxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5
SWRTdGF0dXMuaCAqLywKKwkJCQkwRjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlJZFN0
YXR1cy5jcHAgKi8sCiAJCQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0
dXMuaCAqLywKLQkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5j
cHAgKi8sCisJCQkJMEY5MzMyOTYxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMuaCAq
LywKIAkJCQkwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyogUHV0S2luZC5oICovLAogCQkJCTBG
RjYwQUJGMTY3NDBGODEwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCAqLywKIAkJCQkw
RkY2MEFDMDE2NzQwRjgxMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oICovLApAQCAtMjg0
MSw3ICsyODQ2LDcgQEAKIAkJCQkwRkQ4MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogU3BlY3VsYXRl
ZFR5cGUuY3BwICovLAogCQkJCTBGRDgyRTRGMTQxREFFQTEwMDE3OUM5NCAvKiBTcGVjdWxhdGVk
VHlwZS5oICovLAogCQkJCTBGOTMzMjlCMTRDQTdEQzEwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQu
aCAqLywKLQkJCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICov
LAorCQkJCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywK
IAkJCQkwRjc2NkQzNjE1QUU0QTFBMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludC5jcHAgKi8sCiAJCQkJMEY3NjZEMzcxNUFFNEExQTAwOEYzNjNFIC8qIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCAqLywKIAkJCQlCQ0NGMEQwQjBFRjBCOEE1MDA0MTND
OEYgLyogU3RydWN0dXJlU3R1YkluZm8uY3BwICovLApAQCAtMjg1Myw2ICsyODU4LDcgQEAKIAkJ
CQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi8sCiAJCQkJ
MEY5MTlEMjIxNTg1M0NERTAwNEE0RTdEIC8qIFdhdGNocG9pbnQuY3BwICovLAogCQkJCTBGOTE5
RDIzMTU4NTNDREUwMDRBNEU3RCAvKiBXYXRjaHBvaW50LmggKi8sCisJCQkJMEY5MzMyOUExNENB
N0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLywKIAkJCQkwRjkzMzI5QjE0Q0E3REMx
MDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGJ5dGVjb2Rl
OwpAQCAtMzMyOSw2ICszMzM1LDcgQEAKIAkJCQkxNENBOTU4QjE2QUI1MERFMDA5MzhBMDYgLyog
U3RhdGljUHJvcGVydHlBbmFseXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRDQTk1OEQxNkFC
NTBGQTAwOTM4QTA2IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNERGMDREQTE2QjM5OTZEMDAxNkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY5ODIwNjExNkJGRTM4MzAwMjQwRDAyIC8qIFByZWNpc2VK
dW1wVGFyZ2V0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zOTYzLDYgKzM5NzAsNyBAQAogCQkJCTBG
RjBGMTlFMTZCNzJBMEIwMDVERjk1QiAvKiBERkdFZGdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUMyRjBGMkQxMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVS
YXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjk4MjA2MDE2QkZFMzgxMDAyNDBEMDIg
LyogUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1
bXBUYXJnZXRzLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlByZWNpc2VKdW1wVGFyZ2V0cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3Rh
dGljIHZvaWQgYWRkU2ltcGxlU3dpdGNoVGFyZ2V0cyhTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJs
ZSwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIFZlY3Rvcjx1bnNpZ25lZCwgMzI+JiBvdXQpCit7
CisgICAgZm9yICh1bnNpZ25lZCBpID0ganVtcFRhYmxlLmJyYW5jaE9mZnNldHMuc2l6ZSgpOyBp
LS07KQorICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsganVtcFRhYmxlLmJyYW5j
aE9mZnNldHNbaV0pOworfQorCit2b2lkIGNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFZlY3Rvcjx1bnNpZ25lZCwgMzI+JiBvdXQpCit7CisgICAgQVNTRVJU
KG91dC5pc0VtcHR5KCkpOworICAgIAorICAgIC8vIFdlIHdpbGwgZGVyaXZlIGEgc3VwZXJzZXQg
b2YgdGhlIGp1bXAgdGFyZ2V0cyB0aGF0IHRoZSBjb2RlIGJsb2NrIHRoaW5rcyBpdCBoYXMuCisg
ICAgLy8gU28sIGlmIHRoZSBjb2RlIGJsb2NrIGNsYWltcyB0aGVyZSBhcmUgbm9uZSwgdGhlbiB3
ZSBhcmUgZG9uZS4KKyAgICBpZiAoIWNvZGVCbG9jay0+bnVtYmVyT2ZKdW1wVGFyZ2V0cygpKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrLT5u
dW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGktLTspCisgICAgICAgIG91dC5hcHBlbmQoY29k
ZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyKGkpLnRhcmdldCk7CisgICAgCisgICAgSW50ZXJwcmV0
ZXIqIGludGVycHJldGVyID0gY29kZUJsb2NrLT5nbG9iYWxEYXRhKCktPmludGVycHJldGVyOwor
ICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuYmVnaW4oKTsKKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25Db3VudDspIHsKKyAgICAgICAgT3Bj
b2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zQmVn
aW5bYnl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKTsKKyAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnQgPSBpbnN0cnVjdGlvbnNCZWdpbiArIGJ5dGVjb2RlT2Zmc2V0OworICAgICAgICBzd2l0Y2gg
KG9wY29kZUlEKSB7CisgICAgICAgIGNhc2Ugb3Bfam1wOgorICAgICAgICBjYXNlIG9wX2xvb3A6
CisgICAgICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgY3VycmVudFsxXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ugb3BfanRydWU6CisgICAg
ICAgIGNhc2Ugb3BfamZhbHNlOgorICAgICAgICBjYXNlIG9wX2plcV9udWxsOgorICAgICAgICBj
YXNlIG9wX2puZXFfbnVsbDoKKyAgICAgICAgY2FzZSBvcF9qbXBfc2NvcGVzOgorICAgICAgICBj
YXNlIG9wX2xvb3BfaWZfdHJ1ZToKKyAgICAgICAgY2FzZSBvcF9sb29wX2lmX2ZhbHNlOgorICAg
ICAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNldCArIGN1cnJlbnRbMl0udS5vcGVyYW5k
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgICAg
ICBjYXNlIG9wX2psZXNzOgorICAgICAgICBjYXNlIG9wX2psZXNzZXE6CisgICAgICAgIGNhc2Ug
b3BfamdyZWF0ZXI6CisgICAgICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICAgICAgY2FzZSBv
cF9qbmxlc3M6CisgICAgICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgICAgIGNhc2Ugb3Bfam5n
cmVhdGVyOgorICAgICAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgICAgICBjYXNlIG9wX2xv
b3BfaWZfbGVzczoKKyAgICAgICAgY2FzZSBvcF9sb29wX2lmX2xlc3NlcToKKyAgICAgICAgY2Fz
ZSBvcF9sb29wX2lmX2dyZWF0ZXI6CisgICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9ncmVhdGVyZXE6
CisgICAgICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgY3VycmVudFszXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToK
KyAgICAgICAgICAgIGFkZFNpbXBsZVN3aXRjaFRhcmdldHMoY29kZUJsb2NrLT5pbW1lZGlhdGVT
d2l0Y2hKdW1wVGFibGUoY3VycmVudFsxXS51Lm9wZXJhbmQpLCBieXRlY29kZU9mZnNldCwgb3V0
KTsKKyAgICAgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBjdXJyZW50WzJdLnUu
b3BlcmFuZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBvcF9zd2l0Y2hfY2hh
cjoKKyAgICAgICAgICAgIGFkZFNpbXBsZVN3aXRjaFRhcmdldHMoY29kZUJsb2NrLT5jaGFyYWN0
ZXJTd2l0Y2hKdW1wVGFibGUoY3VycmVudFsxXS51Lm9wZXJhbmQpLCBieXRlY29kZU9mZnNldCwg
b3V0KTsKKyAgICAgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBjdXJyZW50WzJd
LnUub3BlcmFuZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBvcF9zd2l0Y2hf
c3RyaW5nOiB7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIHRhYmxlID0gY29kZUJsb2Nr
LT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoY3VycmVudFsxXS51Lm9wZXJhbmQpOworICAgICAgICAg
ICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHRh
YmxlLm9mZnNldFRhYmxlLmJlZ2luKCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0
cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBlbmQgPSB0YWJsZS5vZmZzZXRUYWJsZS5lbmQoKTsK
KyAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICAgICAgICAg
IG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBpdGVyLT52YWx1ZS5icmFuY2hPZmZzZXQpOwor
ICAgICAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNldCArIGN1cnJlbnRbMl0udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0
X3BuYW1lczoKKyAgICAgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBjdXJyZW50
WzVdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBvcF9uZXh0
X3BuYW1lOgorICAgICAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNldCArIGN1cnJlbnRb
Nl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIG9wX2NoZWNr
X2hhc19pbnN0YW5jZToKKyAgICAgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQgKyBj
dXJyZW50WzRdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJ5dGVjb2RlT2Zmc2V0
ICs9IG9wY29kZUxlbmd0aHNbb3Bjb2RlSURdOworICAgIH0KKyAgICAKKyAgICBzdGQ6OnNvcnQo
b3V0LmJlZ2luKCksIG91dC5lbmQoKSk7CisgICAgCisgICAgLy8gV2Ugd2lsbCBoYXZlIGR1cGxp
Y2F0ZXMsIGFuZCB3ZSBtdXN0IHJlbW92ZSB0aGVtLgorICAgIHVuc2lnbmVkIHRvSW5kZXggPSAw
OworICAgIHVuc2lnbmVkIGZyb21JbmRleCA9IDA7CisgICAgdW5zaWduZWQgbGFzdFZhbHVlID0g
VUlOVF9NQVg7CisgICAgd2hpbGUgKGZyb21JbmRleCA8IG91dC5zaXplKCkpIHsKKyAgICAgICAg
dW5zaWduZWQgdmFsdWUgPSBvdXRbZnJvbUluZGV4KytdOworICAgICAgICBpZiAodmFsdWUgPT0g
bGFzdFZhbHVlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG91dFt0b0luZGV4Kytd
ID0gdmFsdWU7CisgICAgICAgIGxhc3RWYWx1ZSA9IHZhbHVlOworICAgIH0KKyAgICBvdXQucmVz
aXplKHRvSW5kZXgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRh
cmdldHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFByZWNpc2VKdW1wVGFyZ2V0c19o
CisjZGVmaW5lIFByZWNpc2VKdW1wVGFyZ2V0c19oCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgY29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0cyhDb2Rl
QmxvY2sqLCBWZWN0b3I8dW5zaWduZWQsIDMyPiYgb3V0KTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBQcmVjaXNlSnVtcFRhcmdldHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTQxNzIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDEwIEBACiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVz
LmgiCiAjaW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxp
bmVzLmgiCisjaW5jbHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzLmgiCiAjaW5jbHVkZSAiUHV0QnlJ
ZFN0YXR1cy5oIgogI2luY2x1ZGUgIlJlc29sdmVHbG9iYWxTdGF0dXMuaCIKKyNpbmNsdWRlIDx3
dGYvQ29tbWFQcmludGVyLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgogCkBAIC0zNjMwLDkgKzM2MzIsMTkgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAgICAgICBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lv
bigpLT5kdW1wQnl0ZWNvZGUoKTsKICAgICB9CiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBqdW1w
VGFyZ2V0SW5kZXggPSAwOyBqdW1wVGFyZ2V0SW5kZXggPD0gY29kZUJsb2NrLT5udW1iZXJPZkp1
bXBUYXJnZXRzKCk7ICsranVtcFRhcmdldEluZGV4KSB7CisgICAgVmVjdG9yPHVuc2lnbmVkLCAz
Mj4ganVtcFRhcmdldHM7CisgICAgY29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0cyhjb2RlQmxvY2ss
IGp1bXBUYXJnZXRzKTsKKyAgICBpZiAoT3B0aW9uczo6ZHVtcEJ5dGVjb2RlQXRERkdUaW1lKCkp
IHsKKyAgICAgICAgZGF0YUxvZygiSnVtcCB0YXJnZXRzOiAiKTsKKyAgICAgICAgQ29tbWFQcmlu
dGVyIGNvbW1hOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwganVtcFRhcmdldHMu
c2l6ZSgpOyArK2kpCisgICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCBqdW1wVGFyZ2V0c1tpXSk7
CisgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgfQorICAgIAorICAgIGZvciAodW5zaWduZWQg
anVtcFRhcmdldEluZGV4ID0gMDsganVtcFRhcmdldEluZGV4IDw9IGp1bXBUYXJnZXRzLnNpemUo
KTsgKytqdW1wVGFyZ2V0SW5kZXgpIHsKICAgICAgICAgLy8gVGhlIG1heGltdW0gYnl0ZWNvZGUg
b2Zmc2V0IHRvIGdvIGludG8gdGhlIGN1cnJlbnQgYmFzaWNibG9jayBpcyBlaXRoZXIgdGhlIG5l
eHQganVtcCB0YXJnZXQsIG9yIHRoZSBlbmQgb2YgdGhlIGluc3RydWN0aW9ucy4KLSAgICAgICAg
dW5zaWduZWQgbGltaXQgPSBqdW1wVGFyZ2V0SW5kZXggPCBjb2RlQmxvY2stPm51bWJlck9mSnVt
cFRhcmdldHMoKSA/IGNvZGVCbG9jay0+anVtcFRhcmdldChqdW1wVGFyZ2V0SW5kZXgpIDogY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgICAgIHVuc2lnbmVkIGxpbWl0ID0g
anVtcFRhcmdldEluZGV4IDwganVtcFRhcmdldHMuc2l6ZSgpID8ganVtcFRhcmdldHNbanVtcFRh
cmdldEluZGV4XSA6IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwogI2lmIERGR19F
TkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICJQYXJz
aW5nIGJ5dGVjb2RlIHdpdGggbGltaXQgIiwgcG9pbnRlckR1bXAobV9pbmxpbmVTdGFja1RvcC0+
bV9pbmxpbmVDYWxsRnJhbWUpLAo=
</data>
<flag name="review"
          id="205924"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186526</attachid>
            <date>2013-02-04 19:30:09 -0800</date>
            <delta_ts>2013-02-04 19:30:09 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>17422</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQxODQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBA
CisyMDEzLTAyLTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGEgcHJlY2lzZSB2aWV3IG9mIGp1bXAgdGFyZ2V0cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4ODY4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCisgICAgICAgIAorICAgICAgICBQcmV2aW91c2x5LCB0
aGUgREZHIHJlbGllZCBlbnRpcmVseSBvbiB0aGUgQ29kZUJsb2NrJ3MganVtcCB0YXJnZXRzIGxp
c3QgZm9yCisgICAgICAgIGRldGVybWluaW5nIHdoZW4gdG8gYnJlYWsgYmFzaWMgYmxvY2tzLiBU
aGlzIHdvcmtlZCBncmVhdCwgZXhjZXB0IHNvbWV0aW1lcyBpdAorICAgICAgICB3b3VsZCBiZSB0
b28gY29uc2VydmF0aXZlIHNpbmNlIHRoZSBDb2RlQmxvY2sganVzdCBzYXlzIHdoZXJlIHRoZSBi
eXRlY29kZQorICAgICAgICBnZW5lcmF0b3IgaW5zZXJ0ZWQgbGFiZWxzLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBjaGFuZ2Uga2VlcHMgdGhlIG9sZCBqdW1wIHRhcmdldCBsaXN0IGluIENvZGVC
bG9jayBzaW5jZSBpdCBpcyBzdGlsbAorICAgICAgICB2YWx1YWJsZSB0byB0aGUgYmFzZWxpbmUg
SklULCBidXQgc3dpdGNoZXMgdGhlIERGRyB0byB1c2UgaXRzIG93biBqdW1wIHRhcmdldAorICAg
ICAgICBjYWxjdWxhdG9yLiBUaGlzIG91Z2h0IHRvIHJlZHVjZSBwcmVzc3VyZSBvbiB0aGUgREZH
IHNpbXBsaWZpZXIsIHdoaWNoIHdvdWxkCisgICAgICAgIHByZXZpb3VzbHkgZG8gYSBsb3Qgb2Yg
d29yayB0byB0cnkgdG8gbWVyZ2UgcmVkdW5kYW50bHkgY3JlYXRlZCBiYXNpYyBibG9ja3MuCisg
ICAgICAgIEl0IGFwcGVhcnMgdG8gYmUgYSAxJSBwcm9ncmVzc2lvbiBvbiBTdW5TcGlkZXIuCisK
KyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFt
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdl
dHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OmFkZFNpbXBsZVN3
aXRjaFRhcmdldHMpOgorICAgICAgICAoSlNDOjpjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKToK
KyAgICAgICAgKiBieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuaDogQWRkZWQuCisgICAgICAg
IChKU0MpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKToKKwogMjAxMy0wMi0wNCAg
U2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE0MTgwOS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQJKHJldmlzaW9uIDE0MTg0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTgsOCArNTgsOSBAQCBzZXQoSmF2YVNj
cmlwdENvcmVfU09VUkNFUwogICAgIGJ5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuY3BwCiAgICAgYnl0ZWNvZGUvT3Bjb2RlLmNwcAogICAgIGJ5dGVjb2RlL1BvbHltb3JwaGlj
UHV0QnlJZExpc3QuY3BwCi0gICAgYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCisgICAgYnl0
ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNwcAogICAgIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
Y3BwCisgICAgYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCiAgICAgYnl0ZWNvZGUvUmVkdWNl
V2hpdGVzcGFjZS5jcHAKICAgICBieXRlY29kZS9SZXNvbHZlR2xvYmFsU3RhdHVzLmNwcAogICAg
IGJ5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNDE4NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMTMzLDYgKzEzMyw4
IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PcGVyYW5kcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TcGVjdWxhdGVkVHlwZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TcGVjdWxhdGVkVHlwZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFN0YXR1cy5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9u
IDE0MTg0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNv
cHkpCkBAIC02OCw2ICs2OCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGJ5dGVjb2RlL01ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIFwKICAgICBieXRlY29kZS9PcGNvZGUuY3BwIFwKICAg
ICBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCBcCisgICAgYnl0ZWNvZGUvUHJl
Y2lzZUp1bXBUYXJnZXRzLmNwcCBcCiAgICAgYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAgXAog
ICAgIGJ5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuY3BwIFwKICAgICBieXRlY29kZS9SZXNvbHZl
R2xvYmFsU3RhdHVzLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMTQxODQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw2ICsyMDAsOCBA
QAogCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IzNjEzRkM2RkRFMDAw
MkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY5NkVCQjMxNjY3NkVGNjAwOEJBREUzIC8qIENvZGVCbG9ja1dp
dGhKSVRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjk2RUJCMTE2Njc2RUY0MDA4QkFERTMgLyogQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk3NDk3MTE2
ODdBREU0MDBBNEZGNkEgLyogSlNDZWxsSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NzQ5NkYxNjg3QURFMjAwQTRGRjZBIC8qIEpTQ2Vs
bElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjk4MjA2MDE2QkZFMzgxMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTgyMDVEMTZC
RkUzN0YwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuY3BwICovOyB9OworCQkwRjk4MjA2
MTE2QkZFMzgzMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk4MjA1RTE2QkZFMzdGMDAyNDBEMDIg
LyogUHJlY2lzZUp1bXBUYXJnZXRzLmggKi87IH07CiAJCTBGOUQzMzcwMTY1REJCOTAwMDVBRDM4
NyAvKiBEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5RDMzNkUxNjVEQkI4RDAwNUFEMzg3IC8qIERpc2Fzc2VtYmxlci5jcHAg
Ki87IH07CiAJCTBGOUZDOEMzMTRFMUI1RkUwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OUZDOEJGMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCAqLzsg
fTsKIAkJMEY5RkM4QzQxNEUxQjYwMDAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZDOEMw
MTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwNzMsNiArMTA3NSw4IEBA
CiAJCTBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGOTZFQkIxMTY2NzZFRjQwMDhCQURFMyAvKiBDb2RlQmxvY2tXaXRoSklU
VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQmxvY2tXaXRoSklU
VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk3NDk2RjE2ODdBREUyMDBB
NEZGNkEgLyogSlNDZWxsSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0NlbGxJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTgyMDVE
MTZCRkUzN0YwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJlY2lzZUp1bXBUYXJnZXRzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5ODIwNUUxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VK
dW1wVGFyZ2V0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmVjaXNlSnVt
cFRhcmdldHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDMzNkUxNjVEQkI4
RDAwNUFEMzg3IC8qIERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBEaXNhc3NlbWJsZXIuY3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL0Rpc2Fzc2Vt
Ymxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUZDOEJGMTRFMUI1RkIw
MEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjlGQzhDMDE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBo
aWNQdXRCeUlkTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9y
cGhpY1B1dEJ5SWRMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODIyLDYg
KzI4MjYsOCBAQAogCQkJCTBGMkJEQzJCMTUxRkRFOEIwMENEODkxMCAvKiBPcGVyYW5kcy5oICov
LAogCQkJCTBGOUZDOEJGMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmNwcCAqLywKIAkJCQkwRjlGQzhDMDE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRC
eUlkTGlzdC5oICovLAorCQkJCTBGOTgyMDVEMTZCRkUzN0YwMDI0MEQwMiAvKiBQcmVjaXNlSnVt
cFRhcmdldHMuY3BwICovLAorCQkJCTBGOTgyMDVFMTZCRkUzN0YwMDI0MEQwMiAvKiBQcmVjaXNl
SnVtcFRhcmdldHMuaCAqLywKIAkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJ
ZFN0YXR1cy5jcHAgKi8sCiAJCQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRT
dGF0dXMuaCAqLywKIAkJCQkwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyogUHV0S2luZC5oICov
LApAQCAtMzMyMyw2ICszMzI5LDcgQEAKIAkJCQk4NjcwNEI4ODEyREJBMzM3MDBBOUZFN0IgLyog
WWFyclBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCOEExMkRCQTMzNzAwQTlGRTdC
IC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI0MzEyREI4QTgxMDBB
OUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOTgyMDYx
MTZCRkUzODMwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCBpbiBIZWFkZXJzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpA
QCAtMzk1Nyw2ICszOTY0LDcgQEAKIAkJCQk4NjcwNEI4NjEyREJBMzM3MDBBOUZFN0IgLyogWWFy
ckpJVC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjcwNEI4OTEyREJBMzM3MDBBOUZFN0IgLyog
WWFyclBhdHRlcm4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY3MDRCNDIxMkRCOEE4MTAwQTlG
RTdCIC8qIFlhcnJTeW50YXhDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGOTgyMDYw
MTZCRkUzODEwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lz
ZUp1bXBUYXJnZXRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEz
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitzdGF0aWMgdm9pZCBhZGRTaW1wbGVTd2l0Y2hUYXJnZXRzKFNpbXBsZUp1
bXBUYWJsZSYganVtcFRhYmxlLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgVmVjdG9yPHVuc2ln
bmVkLCAzMj4mIG91dCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBqdW1wVGFibGUuYnJhbmNo
T2Zmc2V0cy5zaXplKCk7IGktLTspCisgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQg
KyBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0c1tpXSk7Cit9CisKK3ZvaWQgY29tcHV0ZVByZWNpc2VK
dW1wVGFyZ2V0cyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVmVjdG9yPHVuc2lnbmVkLCAzMj4mIG91
dCkKK3sKKyAgICBBU1NFUlQob3V0LmlzRW1wdHkoKSk7CisgICAgCisgICAgLy8gV2Ugd2lsbCBk
ZXJpdmUgYSBzdXBlcnNldCBvZiB0aGUganVtcCB0YXJnZXRzIHRoYXQgdGhlIGNvZGUgYmxvY2sg
dGhpbmtzIGl0IGhhcy4KKyAgICAvLyBTbywgaWYgdGhlIGNvZGUgYmxvY2sgY2xhaW1zIHRoZXJl
IGFyZSBub25lLCB0aGVuIHdlIGFyZSBkb25lLgorICAgIGlmICghY29kZUJsb2NrLT5udW1iZXJP
Zkp1bXBUYXJnZXRzKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBjb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgaS0tOykKKyAgICAg
ICAgb3V0LmFwcGVuZChjb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSkudGFyZ2V0KTsKKyAg
ICAKKyAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBjb2RlQmxvY2stPmdsb2JhbERhdGEo
KS0+aW50ZXJwcmV0ZXI7CisgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgIHVuc2lnbmVkIGluc3RydWN0aW9u
Q291bnQgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbkNvdW50
OykgeworICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGludGVycHJldGVyLT5nZXRPcGNvZGVJ
RChpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF0udS5vcGNvZGUpOworICAgICAgICBJ
bnN0cnVjdGlvbiogY3VycmVudCA9IGluc3RydWN0aW9uc0JlZ2luICsgYnl0ZWNvZGVPZmZzZXQ7
CisgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICAgICAgY2FzZSBvcF9qbXA6CisgICAg
ICAgIGNhc2Ugb3BfbG9vcDoKKyAgICAgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQg
KyBjdXJyZW50WzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBvcF9qdHJ1ZToKKyAgICAgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgICAgIGNhc2Ugb3BfamVx
X251bGw6CisgICAgICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgICAgICBjYXNlIG9wX2ptcF9z
Y29wZXM6CisgICAgICAgIGNhc2Ugb3BfbG9vcF9pZl90cnVlOgorICAgICAgICBjYXNlIG9wX2xv
b3BfaWZfZmFsc2U6CisgICAgICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsgY3Vy
cmVudFsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ugb3Bf
am5lcV9wdHI6CisgICAgICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgICAgIGNhc2Ugb3Bfamxlc3Nl
cToKKyAgICAgICAgY2FzZSBvcF9qZ3JlYXRlcjoKKyAgICAgICAgY2FzZSBvcF9qZ3JlYXRlcmVx
OgorICAgICAgICBjYXNlIG9wX2pubGVzczoKKyAgICAgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAg
ICAgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6Cisg
ICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9sZXNzOgorICAgICAgICBjYXNlIG9wX2xvb3BfaWZfbGVz
c2VxOgorICAgICAgICBjYXNlIG9wX2xvb3BfaWZfZ3JlYXRlcjoKKyAgICAgICAgY2FzZSBvcF9s
b29wX2lmX2dyZWF0ZXJlcToKKyAgICAgICAgICAgIG91dC5hcHBlbmQoYnl0ZWNvZGVPZmZzZXQg
KyBjdXJyZW50WzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBvcF9zd2l0Y2hfaW1tOgorICAgICAgICAgICAgYWRkU2ltcGxlU3dpdGNoVGFyZ2V0cyhjb2Rl
QmxvY2stPmltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZShjdXJyZW50WzFdLnUub3BlcmFuZCksIGJ5
dGVjb2RlT2Zmc2V0LCBvdXQpOworICAgICAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNl
dCArIGN1cnJlbnRbMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIG9wX3N3aXRjaF9jaGFyOgorICAgICAgICAgICAgYWRkU2ltcGxlU3dpdGNoVGFyZ2V0cyhj
b2RlQmxvY2stPmNoYXJhY3RlclN3aXRjaEp1bXBUYWJsZShjdXJyZW50WzFdLnUub3BlcmFuZCks
IGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOworICAgICAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9m
ZnNldCArIGN1cnJlbnRbMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6IHsKKyAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYg
dGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShjdXJyZW50WzFdLnUub3Bl
cmFuZCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjpp
dGVyYXRvciBpdGVyID0gdGFibGUub2Zmc2V0VGFibGUuYmVnaW4oKTsKKyAgICAgICAgICAgIFN0
cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLm9m
ZnNldFRhYmxlLmVuZCgpOworICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
CisgICAgICAgICAgICAgICAgb3V0LmFwcGVuZChieXRlY29kZU9mZnNldCArIGl0ZXItPnZhbHVl
LmJyYW5jaE9mZnNldCk7CisgICAgICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2RlT2Zmc2V0ICsg
Y3VycmVudFsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9nZXRfcG5hbWVzOgorICAgICAgICAgICAgb3V0LmFwcGVuZChieXRlY29k
ZU9mZnNldCArIGN1cnJlbnRbNV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIG9wX25leHRfcG5hbWU6CisgICAgICAgICAgICBvdXQuYXBwZW5kKGJ5dGVjb2Rl
T2Zmc2V0ICsgY3VycmVudFs2XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2Ugb3BfY2hlY2tfaGFzX2luc3RhbmNlOgorICAgICAgICAgICAgb3V0LmFwcGVuZChi
eXRlY29kZU9mZnNldCArIGN1cnJlbnRbNF0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgYnl0ZWNvZGVPZmZzZXQgKz0gb3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CisgICAgfQorICAg
IAorICAgIHN0ZDo6c29ydChvdXQuYmVnaW4oKSwgb3V0LmVuZCgpKTsKKyAgICAKKyAgICAvLyBX
ZSB3aWxsIGhhdmUgZHVwbGljYXRlcywgYW5kIHdlIG11c3QgcmVtb3ZlIHRoZW0uCisgICAgdW5z
aWduZWQgdG9JbmRleCA9IDA7CisgICAgdW5zaWduZWQgZnJvbUluZGV4ID0gMDsKKyAgICB1bnNp
Z25lZCBsYXN0VmFsdWUgPSBVSU5UX01BWDsKKyAgICB3aGlsZSAoZnJvbUluZGV4IDwgb3V0LnNp
emUoKSkgeworICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9IG91dFtmcm9tSW5kZXgrK107CisgICAg
ICAgIGlmICh2YWx1ZSA9PSBsYXN0VmFsdWUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgb3V0W3RvSW5kZXgrK10gPSB2YWx1ZTsKKyAgICAgICAgbGFzdFZhbHVlID0gdmFsdWU7Cisg
ICAgfQorICAgIG91dC5yZXNpemUodG9JbmRleCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWNpc2VK
dW1wVGFyZ2V0cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUHJl
Y2lzZUp1bXBUYXJnZXRzX2gKKyNkZWZpbmUgUHJlY2lzZUp1bXBUYXJnZXRzX2gKKworI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBjb21wdXRlUHJlY2lz
ZUp1bXBUYXJnZXRzKENvZGVCbG9jayosIFZlY3Rvcjx1bnNpZ25lZCwgMzI+JiBvdXQpOworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFByZWNpc2VKdW1wVGFyZ2V0c19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CShyZXZpc2lvbiAxNDE4NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsMTAgQEAKICNpbmNsdWRl
ICJERkdDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCiAjaW5jbHVk
ZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJQcmVjaXNlSnVtcFRhcmdldHMuaCIK
ICNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCiAjaW5jbHVkZSAiUmVzb2x2ZUdsb2JhbFN0YXR1
cy5oIgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKQEAgLTM2MzAsOSArMzYzMiwxOSBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpCiAgICAgICAgIGNvZGVCbG9j
ay0+YmFzZWxpbmVWZXJzaW9uKCktPmR1bXBCeXRlY29kZSgpOwogICAgIH0KICAgICAKLSAgICBm
b3IgKHVuc2lnbmVkIGp1bXBUYXJnZXRJbmRleCA9IDA7IGp1bXBUYXJnZXRJbmRleCA8PSBjb2Rl
QmxvY2stPm51bWJlck9mSnVtcFRhcmdldHMoKTsgKytqdW1wVGFyZ2V0SW5kZXgpIHsKKyAgICBW
ZWN0b3I8dW5zaWduZWQsIDMyPiBqdW1wVGFyZ2V0czsKKyAgICBjb21wdXRlUHJlY2lzZUp1bXBU
YXJnZXRzKGNvZGVCbG9jaywganVtcFRhcmdldHMpOworICAgIGlmIChPcHRpb25zOjpkdW1wQnl0
ZWNvZGVBdERGR1RpbWUoKSkgeworICAgICAgICBkYXRhTG9nKCJKdW1wIHRhcmdldHM6ICIpOwor
ICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBqdW1wVGFyZ2V0cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGRhdGFMb2coY29tbWEs
IGp1bXBUYXJnZXRzW2ldKTsKKyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICB9CisgICAgCisg
ICAgZm9yICh1bnNpZ25lZCBqdW1wVGFyZ2V0SW5kZXggPSAwOyBqdW1wVGFyZ2V0SW5kZXggPD0g
anVtcFRhcmdldHMuc2l6ZSgpOyArK2p1bXBUYXJnZXRJbmRleCkgewogICAgICAgICAvLyBUaGUg
bWF4aW11bSBieXRlY29kZSBvZmZzZXQgdG8gZ28gaW50byB0aGUgY3VycmVudCBiYXNpY2Jsb2Nr
IGlzIGVpdGhlciB0aGUgbmV4dCBqdW1wIHRhcmdldCwgb3IgdGhlIGVuZCBvZiB0aGUgaW5zdHJ1
Y3Rpb25zLgotICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IGp1bXBUYXJnZXRJbmRleCA8IGNvZGVC
bG9jay0+bnVtYmVyT2ZKdW1wVGFyZ2V0cygpID8gY29kZUJsb2NrLT5qdW1wVGFyZ2V0KGp1bXBU
YXJnZXRJbmRleCkgOiBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICAgICAg
dW5zaWduZWQgbGltaXQgPSBqdW1wVGFyZ2V0SW5kZXggPCBqdW1wVGFyZ2V0cy5zaXplKCkgPyBq
dW1wVGFyZ2V0c1tqdW1wVGFyZ2V0SW5kZXhdIDogY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5z
aXplKCk7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgICAgICBkYXRhTG9nKAog
ICAgICAgICAgICAgIlBhcnNpbmcgYnl0ZWNvZGUgd2l0aCBsaW1pdCAiLCBwb2ludGVyRHVtcCht
X2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSksCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>