<?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>91188</bug_id>
          
          <creation_ts>2012-07-12 20:57:31 -0700</creation_ts>
          <short_desc>DFG CFA may get overzealous in loops that have code that must exit</short_desc>
          <delta_ts>2012-07-12 22:31:30 -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>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>668575</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-12 20:57:31 -0700</bug_when>
    <thetext>This is quite convoluted, but awesome.  Say that the CFA proves that some operation:

c: MyNode(@a, @b)

must exit because the predictions of @a and/or @b are incompatible with our implementation of NyNode.

But say that the CFA also proves that @a is Int32(0) and @b is Int32(1).  The CFA is very precise - often more precise than our prediction propagation.  So it could be that @a and @b have wacky predictions but can be proved to be something more specific.

And say that c:MyNode is in a loop, and that the result of @c feeds into @a because of an in-loop assignment to some variable.  But since the CFA proved that @c terminates, it ignored its output when computing the proof of @a.  If @c had executed, then @a would have been some variant of TOP.

Now you&apos;ve got a situation where:

1) The CFA aggressively set the value of @a based on the assumption that @c terminates.
2) The fact that @a and @b were pinpointed to be values caused the backend, and subsequent executions of the CFA, to happily compile @c into a non-terminating instruction.

The result? You&apos;ve now got a loop in which some variable appears to never be updated. This often manifests as a loop that runs forever because the variable in question is the loop&apos;s induction variable.

Furthermore, because of http://trac.webkit.org/changeset/119464, even if we fix this problem we&apos;re left with a deeper problem: CFG simplification may then lead OSR exit to believe that the body of the loop only sets but does not read the variable.  In fact it doesn&apos;t read it in the DFG code (since it&apos;s constant folded) but it does read it in the baseline code - so OSR must assume as such.  That&apos;s particularly important since this loop will OSR exit every time.

Fix and test on the way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668579</commentid>
    <comment_count>1</comment_count>
      <attachid>152145</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-12 21:00:32 -0700</bug_when>
    <thetext>Created attachment 152145
the patch

I will post the test shortly.  Still computing the expected result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668582</commentid>
    <comment_count>2</comment_count>
      <attachid>152145</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-12 21:01:29 -0700</bug_when>
    <thetext>Comment on attachment 152145
the patch

Ooops.  Never mind.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668586</commentid>
    <comment_count>3</comment_count>
      <attachid>152149</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-12 21:07:51 -0700</bug_when>
    <thetext>Created attachment 152149
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668594</commentid>
    <comment_count>4</comment_count>
      <attachid>152149</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-07-12 21:41:58 -0700</bug_when>
    <thetext>Comment on attachment 152149
the patch

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

&gt; Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:60
&gt; +            m_insertionSetForFolding.execute(*block);

This may insert the phantoms in the wrong place, Phi will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668596</commentid>
    <comment_count>5</comment_count>
      <attachid>152152</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-12 21:56:31 -0700</bug_when>
    <thetext>Created attachment 152152
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668609</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-12 22:31:30 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/122541</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152145</attachid>
            <date>2012-07-12 21:00:32 -0700</date>
            <delta_ts>2012-07-12 21:07:51 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>fixcfa_patch_1.diff</filename>
            <type>text/plain</type>
            <size>18487</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyNTM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDEyLTA3LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIENGQSBtYXkgZ2V0IG92ZXJ6ZWFsb3VzIGluIGxvb3BzIHRoYXQgaGF2ZSBjb2RlIHRoYXQg
bXVzdCBleGl0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05MTE4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEVuc3VyZSB0aGF0IGlmIHRoZSBDRkEgYXNzdW1lcyB0aGF0IGFuIG9wZXJhdGlvbiBtdXN0IGV4
aXQsIHRoZW4gaXQgd2lsbCBhbHdheXMgZXhpdAorICAgICAgICBubyBtYXR0ZXIgd2hhdCBoYXBw
ZW5zIGFmdGVyLiBUaGF0J3MgbmVjZXNzYXJ5IHRvIHByZXNlcnZlIHNvdW5kbmVzcy4KKyAgICAg
ICAgCisgICAgICAgIFJlbW92ZSBhIGJyb2tlbiBmaXh1cCBkb25lIGJ5IHRoZSBERkcgc2ltcGxp
Zmllciwgd2hlcmUgaXQgd2FzIHRyeWluZyB0byBzYXkgdGhhdCB0aGUKKyAgICAgICAgdmFyaWFi
bGUtYXQtaGVhZCB3YXMgdGhlIGZpcnN0IGFjY2VzcyBpbiB0aGUgc2Vjb25kIGJsb2NrIGluIHRo
ZSBtZXJnZSwgaWYgdGhlIGZpcnN0CisgICAgICAgIGJsb2NrIGRpZCBub3QgcmVhZCB0aGUgdmFy
aWFibGUuIFRoYXQncyB0b3RhbGx5IHdyb25nLCBpZiB0aGUgZmlyc3QgYmxvY2sgd2FzIGluIGZh
Y3QKKyAgICAgICAgZG9pbmcgYSBwaGFudG9tIHJlYWQuIEkgcmVtb3ZlZCB0aGF0IGZpeHVwIGFu
ZCBpbnN0ZWFkIGhhcmRlbmVkIHRoZSByZXN0IG9mIHRoZQorICAgICAgICBjb21waWxlci4KKwor
ICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdFN0YXRlOjplbmRCYXNpY0Jsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9j
ay5oOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAg
ICAoQmFzaWNCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NGQVBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpDRkFQaGFzZTo6cGVyZm9ybUJsb2NrQ0ZBKToKKyAgICAgICAgKiBkZmcvREZH
Q0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxp
ZmljYXRpb25QaGFzZTo6bWVyZ2VCbG9ja3MpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6
OkNvbnN0YW50Rm9sZGluZ1BoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRp
bmdQaGFzZTo6cnVuKToKKyAgICAgICAgKENvbnN0YW50Rm9sZGluZ1BoYXNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAg
IChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnBhaW50VW5yZWFjaGFibGVDb2RlKToK
KyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QpOgorCiAyMDEyLTA3LTEyICBB
bGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgogCiAgICAgICAg
IFtRdF0gSW1wbGVtZW50IE1lbW9yeVVzYWdlU3VwcG9ydApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMjI1MTEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjQsNiArMTY0LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjplbmRCYXNpY0Js
b2NrKE1lcmdlTQogICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9jazsgLy8gU2F2ZSB0aGUg
YmxvY2sgZm9yIHN1Y2Nlc3NvciBtZXJnaW5nLgogICAgIAogICAgIGJsb2NrLT5jZmFGb3VuZENv
bnN0YW50cyA9IG1fZm91bmRDb25zdGFudHM7CisgICAgYmxvY2stPmNmYURpZEZpbmlzaCA9IG1f
aXNWYWxpZDsKICAgICAKICAgICBpZiAoIW1faXNWYWxpZCkgewogICAgICAgICByZXNldCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9u
IDEyMjUxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9y
PE5vZGVJbmRleCwgOD4KICAgICAgICAgLCBjZmFIYXNWaXNpdGVkKGZhbHNlKQogICAgICAgICAs
IGNmYVNob3VsZFJldmlzaXQoZmFsc2UpCiAgICAgICAgICwgY2ZhRm91bmRDb25zdGFudHMoZmFs
c2UpCisgICAgICAgICwgY2ZhRGlkRmluaXNoKHRydWUpCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAog
ICAgICAgICAsIGlzTGlua2VkKGZhbHNlKQogI2VuZGlmCkBAIC0xMDMsNiArMTA0LDcgQEAgc3Ry
dWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZUluZGV4LCA4PgogICAgIGJvb2wgY2ZhSGFzVmlz
aXRlZDsKICAgICBib29sIGNmYVNob3VsZFJldmlzaXQ7CiAgICAgYm9vbCBjZmFGb3VuZENvbnN0
YW50czsKKyAgICBib29sIGNmYURpZEZpbmlzaDsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAg
Ym9vbCBpc0xpbmtlZDsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDRkFQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDRkFQaGFzZS5jcHAJKHJldmlzaW9uIDEyMjUxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw4ICs5NSwxMiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgbV9zdGF0ZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAg
ICAgICAgICBkYXRhTG9nKCJcbiIpOwogI2VuZGlmCi0gICAgICAgICAgICBpZiAoIW1fc3RhdGUu
ZXhlY3V0ZShpKSkKKyAgICAgICAgICAgIGlmICghbV9zdGF0ZS5leGVjdXRlKGkpKSB7CisjaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICAgICAgIEV4cGVjdCBPU1IgZXhpdC5cbiIpOworI2VuZGlmCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2coIiAgICAgIHRhaWwgcmVn
czogIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDEyMjUxMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY0NCw2ICs2NDQsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1fZ3Jh
cGguY2hhbmdlRWRnZShub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBFZGdlKHNraXBHZXRMb2NhbChh
dEZpcnN0SW5kZXgpKSwgbm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgICAgICAgICBj
aGlsZHJlbkFscmVhZHlGaXhlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaWYgKHRydWUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgIT0gR2V0TG9jYWwpCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAtNjU0LDYgKzY1NywxMSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW2F0Rmlyc3RIZWFkSW5kZXhd
Lm9wKCkgIT0gUGhpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHNlY29uZCBiYXNp
YyBibG9jayBpcyBkb2luZyBhIEdldExvY2FsIG9uCisgICAgICAgICAgICAgICAgLy8gc29tZXRo
aW5nIHRoYXQgdGhlIGZpcnN0IGJhc2ljIGJsb2NrIGRvZXMgYSBTZXRMb2NhbCB0byBhZnRlciB1
c2luZworICAgICAgICAgICAgICAgIC8vIGEgUGhhbnRvbShQaGkpIHRvIGtlZXAgdGhlIHZhcmlh
YmxlIGFsaXZlIGF0IHRoZSBoZWFkLiBJbiB0aGlzIGNhc2UKKyAgICAgICAgICAgICAgICAvLyB3
ZSB3YW50IHRvIGtlZXAgdGhlIFBoaSBpbiB0aGUgaGVhZCBvcGVyYW5kLgorICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5k
KG5vZGUubG9jYWwoKSkgPSBub2RlSW5kZXg7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTIyNTExKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDYgKzQwLDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMg
UGhhcwogcHVibGljOgogICAgIENvbnN0YW50Rm9sZGluZ1BoYXNlKEdyYXBoJiBncmFwaCkKICAg
ICAgICAgOiBQaGFzZShncmFwaCwgImNvbnN0YW50IGZvbGRpbmciKQorICAgICAgICAsIG1fc3Rh
dGUoZ3JhcGgpCiAgICAgewogICAgIH0KICAgICAKQEAgLTQ3LDExNCArNDgsMTkzIEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICAKLSAgICAg
ICAgQWJzdHJhY3RTdGF0ZSBzdGF0ZShtX2dyYXBoKTsKLSAgICAgICAgSW5zZXJ0aW9uU2V0PE5v
ZGVJbmRleD4gaW5zZXJ0aW9uU2V0OwotICAgICAgICAKICAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsr
YmxvY2tJbmRleCkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1f
YmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghYmxvY2stPmNmYUZvdW5kQ29u
c3RhbnRzKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFibG9j
ay0+Y2ZhRGlkRmluaXNoKQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gcGFpbnRVbnJlYWNo
YWJsZUNvZGUoYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoYmxvY2stPmNmYUZvdW5kQ29u
c3RhbnRzKQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gZm9sZENvbnN0YW50cyhibG9ja0lu
ZGV4KTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Rm9yUGFpbnRpbmcuZXhlY3V0ZSgqYmxv
Y2spOworICAgICAgICAgICAgbV9pbnNlcnRpb25TZXRGb3JGb2xkaW5nLmV4ZWN1dGUoKmJsb2Nr
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQor
Citwcml2YXRlOgorICAgIGJvb2wgZm9sZENvbnN0YW50cyhCbG9ja0luZGV4IGJsb2NrSW5kZXgp
CisgICAgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAg
ICAgICAgIGRhdGFMb2coIkNvbnN0YW50IGZvbGRpbmcgY29uc2lkZXJpbmcgQmxvY2sgIyV1Llxu
IiwgYmxvY2tJbmRleCk7CisgICAgICAgIGRhdGFMb2coIkNvbnN0YW50IGZvbGRpbmcgY29uc2lk
ZXJpbmcgQmxvY2sgIyV1LlxuIiwgYmxvY2tJbmRleCk7CiAjZW5kaWYKLSAgICAgICAgICAgIHN0
YXRlLmJlZ2luQmFzaWNCbG9jayhibG9jayk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJs
b2NrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5pc1ZhbGlkKCkpCi0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBi
bG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9n
cmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGJvb2wg
ZWxpbWluYXRlZCA9IGZhbHNlOworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
bV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNl
OworICAgICAgICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jayhibG9jayk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsg
KytpbmRleEluQmxvY2spIHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9j
ay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25v
ZGVJbmRleF07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fc3RhdGUuaXNW
YWxpZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBib29sIGVsaW1pbmF0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENoZWNr
QXJndW1lbnRzTm90Q3JlYXRlZDogewotICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRW1wdHlT
cGVjdWxhdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS52YXJpYWJsZXMo
KS5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3Vt
ZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpLm1fdHlwZSkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUucmVmQ291
bnQoKSA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFn
cyhQaGFudG9tKTsKLSAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CisgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgY2FzZSBDaGVja0FyZ3Vt
ZW50c05vdENyZWF0ZWQ6IHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzRW1wdHlTcGVjdWxhdGlv
bigKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZCgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9y
KG5vZGUuY29kZU9yaWdpbikpLm1fdHlwZSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5yZWZDb3VudCgp
ID09IDEpOworICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRv
bSk7CisgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIHdvdWxkIGJlIGEgZ3JlYXQgcGxhY2UgdG8gcmVtb3ZlIENoZWNr
U3RydWN0dXJlJ3MuCiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGVsaW1pbmF0ZWQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChlbGltaW5hdGVkKSB7Cisg
ICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3RhdGUu
ZXhlY3V0ZShpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRH
ZW5lcmF0ZSgpCi0gICAgICAgICAgICAgICAgICAgIHx8IHN0YXRlLmRpZENsb2JiZXIoKQotICAg
ICAgICAgICAgICAgICAgICB8fCBub2RlLmhhc0NvbnN0YW50KCkpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdGF0ZS5mb3JO
b2RlKG5vZGVJbmRleCkudmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKQotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBOb2RlIHBoYW50b20oUGhhbnRvbSwgbm9kZS5jb2RlT3JpZ2luKTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldExvY2FsKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwcmV2aW91c0xvY2FsQWNjZXNzID0gTm9Ob2RlOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG5v
ZGUubG9jYWwoKSkgPT0gbm9kZUluZGV4Ci0gICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2dy
YXBoW25vZGUuY2hpbGQxKCldLm9wKCkgPT0gUGhpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBXZSBleHBlY3QgdGhpcyB0byBiZSB0aGUgY29tbW9uIGNhc2UuCi0gICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlzSW5QaGlzKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNMb2NhbEFjY2VzcyA9IG5vZGUuY2hp
bGQxKCkuaW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpID0gcHJldmlvdXNMb2NhbEFjY2VzczsKLSAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChp
bmRleEluQmxvY2sgPiAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE11c3Qgc2VhcmNo
IGZvciB0aGUgcHJldmlvdXMgYWNjZXNzIHRvIHRoaXMgbG9jYWwuCi0gICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggc3ViSW5kZXhJbkJsb2NrID0gaW5kZXhJbkJsb2NrOyBz
dWJJbmRleEluQmxvY2stLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlSW5k
ZXggc3ViTm9kZUluZGV4ID0gYmxvY2stPmF0KHN1YkluZGV4SW5CbG9jayk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTm9kZSYgc3ViTm9kZSA9IG1fZ3JhcGhbc3ViTm9kZUluZGV4XTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Yk5vZGUuc2hvdWxkR2VuZXJhdGUo
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFzdWJOb2RlLmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKQor
ICAgICAgICAgICAgbV9zdGF0ZS5leGVjdXRlKGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBp
ZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKQorICAgICAgICAgICAgICAgIHx8IG1fc3RhdGUuZGlk
Q2xvYmJlcigpCisgICAgICAgICAgICAgICAgfHwgbm9kZS5oYXNDb25zdGFudCgpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUu
Zm9yTm9kZShub2RlSW5kZXgpLnZhbHVlKCk7CisgICAgICAgICAgICBpZiAoIXZhbHVlKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgTm9k
ZSBwaGFudG9tKFBoYW50b20sIG5vZGUuY29kZU9yaWdpbik7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldExvY2FsKSB7CisgICAgICAgICAgICAgICAg
Tm9kZUluZGV4IHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBOb05vZGU7CisgICAgICAgICAgICAgICAg
aWYgKGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpID09IG5vZGVJ
bmRleAorICAgICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm9wKCkg
PT0gUGhpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGV4cGVjdCB0aGlzIHRvIGJlIHRo
ZSBjb21tb24gY2FzZS4KKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0luUGhp
cyhub2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNM
b2NhbEFjY2VzcyA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAg
YmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBwcmV2aW91c0xv
Y2FsQWNjZXNzOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChpbmRleEluQmxvY2sgPiAwKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gTXVzdCBz
ZWFyY2ggZm9yIHRoZSBwcmV2aW91cyBhY2Nlc3MgdG8gdGhpcyBsb2NhbC4KKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChCbG9ja0luZGV4IHN1YkluZGV4SW5CbG9jayA9IGluZGV4SW5CbG9jazsg
c3ViSW5kZXhJbkJsb2NrLS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
c3ViTm9kZUluZGV4ID0gYmxvY2stPmF0KHN1YkluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBOb2RlJiBzdWJOb2RlID0gbV9ncmFwaFtzdWJOb2RlSW5kZXhdOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFzdWJOb2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXN1Yk5vZGUuaGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTm9kZS5s
b2NhbCgpICE9IG5vZGUubG9jYWwoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSB0d28gbXVzdCBoYXZlIGJlZW4g
dW5pZmllZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdWJOb2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpID09IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgcHJldmlvdXNMb2NhbEFjY2VzcyA9IHN1Yk5vZGVJbmRleDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGlmIChwcmV2aW91c0xvY2FsQWNjZXNzID09IE5vTm9kZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhlIHByZXZpb3VzIGFjY2VzcyBtdXN0IGhhdmUgYmVlbiBhIFBo
aS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBwaGlJbmRleEluQmxv
Y2sgPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4SW5CbG9jay0tOykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwaGlOb2RlSW5kZXggPSBibG9jay0+cGhpc1tw
aGlJbmRleEluQmxvY2tdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUmIHBoaU5v
ZGUgPSBtX2dyYXBoW3BoaU5vZGVJbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFwaGlOb2RlLnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJOb2Rl
LmxvY2FsKCkgIT0gbm9kZS5sb2NhbCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwaGlOb2RlLmxvY2FsKCkgIT0gbm9kZS5sb2NhbCgpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUg
dHdvIG11c3QgaGF2ZSBiZWVuIHVuaWZpZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKHN1Yk5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS52YXJpYWJsZUFjY2Vz
c0RhdGEoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNMb2NhbEFjY2Vz
cyA9IHN1Yk5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocGhp
Tm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0xvY2FsQWNjZXNzID0gcGhpTm9k
ZUluZGV4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHByZXZpb3VzTG9j
YWxBY2Nlc3MgIT0gTm9Ob2RlKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IHRhaWxOb2RlSW5kZXggPSBi
bG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS5sb2NhbCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHRhaWxOb2RlSW5kZXggPT0gbm9kZUluZGV4KQotICAgICAgICAgICAgICAg
ICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBw
cmV2aW91c0xvY2FsQWNjZXNzOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW3RhaWxOb2RlSW5kZXhdLm9wKCkgPT0gRmx1
c2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW3RhaWxOb2RlSW5k
ZXhdLm9wKCkgPT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJl
dmlvdXNMb2NhbEFjY2VzcyAhPSBOb05vZGUpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIHBoYW50b20uY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuOwotICAgICAgICAgICAgICAg
IHBoYW50b20ucmVmKCk7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IHRhaWxOb2RlSW5kZXgg
PSBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS5sb2NhbCgpKTsKKyAgICAgICAg
ICAgICAgICBpZiAodGFpbE5vZGVJbmRleCA9PSBub2RlSW5kZXgpCisgICAgICAgICAgICAgICAg
ICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChub2RlLmxvY2FsKCkpID0gcHJldmlv
dXNMb2NhbEFjY2VzczsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKG1fZ3JhcGhbdGFpbE5vZGVJbmRleF0ub3AoKSA9PSBGbHVzaAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFt0YWlsTm9kZUluZGV4XS5vcCgpID09IFNldExv
Y2FsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlSW5kZXgsIHZh
bHVlKTsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggcGhhbnRvbU5vZGVJbmRleCA9IG1fZ3Jh
cGguc2l6ZSgpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKHBoYW50b20pOwotICAg
ICAgICAgICAgICAgIGluc2VydGlvblNldC5hcHBlbmQoaW5kZXhJbkJsb2NrLCBwaGFudG9tTm9k
ZUluZGV4KTsKKyAgICAgICAgICAgIHBoYW50b20uY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuOwor
ICAgICAgICAgICAgcGhhbnRvbS5yZWYoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9n
cmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlSW5kZXgsIHZhbHVlKTsKKyAgICAgICAgICAgIE5v
ZGVJbmRleCBwaGFudG9tTm9kZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAgICAgICBt
X2dyYXBoLmFwcGVuZChwaGFudG9tKTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Rm9yRm9s
ZGluZy5hcHBlbmQoaW5kZXhJbkJsb2NrLCBwaGFudG9tTm9kZUluZGV4KTsKICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIG1f
c3RhdGUucmVzZXQoKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgIH0K
KyAgICAKKyAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBDRkEgbWF5IHJlYWNo
IGNvbmNsdXNpb25zIGFib3V0IGNvbnN0YW50cyBiYXNlZCBvbiBpdHMKKyAgICAvLyBhc3N1bXB0
aW9uIHRoYXQgY2VydGFpbiBjb2RlIG11c3QgZXhpdCwgYnV0IHRoZW4gdGhvc2UgY29uc3RhbnRz
IG1heSBsZWFkIGZ1dHVyZQorICAgIC8vIHJlZXhlY3V0aW9ucyBvZiB0aGUgQ0ZBIHRvIGJlbGll
dmUgdGhhdCB0aGUgc2FtZSBjb2RlIHdpbGwgbm93IG5vIGxvbmdlciBleGl0LiBUaHVzCisgICAg
Ly8gdG8gZW5zdXJlIHNvdW5kbmVzcywgd2UgbXVzdCBwYWludCB1bnJlYWNoYWJsZSBjb2RlIGFz
IHN1Y2gsIGJ5IGluc2VydGluZyBhbgorICAgIC8vIHVuY29uZGl0aW9uYWwgRm9yY2VPU1JFeGl0
IHdoZXJldmVyIHdlIGZpbmQgdGhhdCBhIG5vZGUgd291bGQgaGF2ZSBhbHdheXMgZXhpdGVkLgor
ICAgIC8vIFRoaXMgd2lsbCBvbmx5IGhhcHBlbiBpbiBjYXNlcyB3aGVyZSB3ZSBhcmUgbWFraW5n
IHN0YXRpYyBzcGVjdWxhdGlvbnMsIG9yIHdlJ3JlCisgICAgLy8gbWFraW5nIHRvdGFsbHkgd3Jv
bmcgc3BlY3VsYXRpb25zIGR1ZSB0byBpbXByZWNpc2lvbiBvbiB0aGUgcHJlZGljdGlvbiBwcm9w
YWdhdG9yLgorICAgIGJvb2wgcGFpbnRVbnJlYWNoYWJsZUNvZGUoQmxvY2tJbmRleCBibG9ja0lu
ZGV4KQorICAgIHsKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIAorI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgZGF0YUxvZygi
UGFpbnRpbmcgdW5yZWFjaGFibGUgY29kZSBpbiBCbG9jayAjJXUuXG4iLCBibG9ja0luZGV4KTsK
KyNlbmRpZgorICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxv
Y2tJbmRleF0uZ2V0KCk7CisgICAgICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKGJsb2NrKTsK
KyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJ
bkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKKyAgICAgICAgICAgIG1f
c3RhdGUuZXhlY3V0ZShpbmRleEluQmxvY2spOworICAgICAgICAgICAgaWYgKG1fc3RhdGUuaXNW
YWxpZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAg
ICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgc3dp
dGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgUmV0dXJuOgorICAgICAgICAgICAg
Y2FzZSBUaHJvdzoKKyAgICAgICAgICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKKyAgICAg
ICAgICAgIGNhc2UgRm9yY2VPU1JFeGl0OgorICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcu
IFRoZXNlIG5vZGVzIHdpbGwgYWxyZWFkeSBkbyB0aGUgcmlnaHQgdGhpbmcuCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIE5vZGUgZm9yY2VPU1JFeGl0KEZvcmNlT1NSRXhpdCwgbm9kZS5jb2RlT3Jp
Z2luKTsKKyAgICAgICAgICAgICAgICBmb3JjZU9TUkV4aXQucmVmKCk7CisgICAgICAgICAgICAg
ICAgTm9kZUluZGV4IGZvcmNlT1NSRXhpdEluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAg
ICAgICAgICAgbV9ncmFwaC5hcHBlbmQoZm9yY2VPU1JFeGl0KTsKKyAgICAgICAgICAgICAgICBt
X2luc2VydGlvblNldEZvclBhaW50aW5nLmFwcGVuZChpbmRleEluQmxvY2ssIGZvcmNlT1NSRXhp
dEluZGV4KTsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRl
KCpibG9jayk7Ci0gICAgICAgICAgICBzdGF0ZS5yZXNldCgpOworICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KKyAgICAgICAgbV9zdGF0ZS5yZXNldCgpOwogICAgICAgICAKICAgICAgICAg
cmV0dXJuIGNoYW5nZWQ7CiAgICAgfQorCisgICAgQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOworICAg
IEluc2VydGlvblNldDxOb2RlSW5kZXg+IG1faW5zZXJ0aW9uU2V0Rm9yUGFpbnRpbmc7CisgICAg
SW5zZXJ0aW9uU2V0PE5vZGVJbmRleD4gbV9pbnNlcnRpb25TZXRGb3JGb2xkaW5nOwogfTsKIAog
Ym9vbCBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKEdyYXBoJiBncmFwaCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAko
cmV2aXNpb24gMTIyNTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUV2ZW50U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiwxMCBAQCB2b2lk
IFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgIHdoaWxlIChhdChzdGFydElu
ZGV4KS5raW5kKCkgIT0gUmVzZXQpCiAgICAgICAgIHN0YXJ0SW5kZXgtLTsKICAgICAKKyNpZiBE
RkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgZGF0YUxvZygiQ29tcHV0aW5nIE9TUiBleGl0
IHJlY292ZXJpZXMgc3RhcnRpbmcgYXQgc2VxIyV1LlxuIiwgc3RhcnRJbmRleCk7CisjZW5kaWYK
KwogICAgIC8vIFN0ZXAgMjogQ3JlYXRlIGEgbW9jay11cCBvZiB0aGUgREZHJ3Mgc3RhdGUgYW5k
IGV4ZWN1dGUgdGhlIGV2ZW50cy4KICAgICBPcGVyYW5kczxWYWx1ZVNvdXJjZT4gb3BlcmFuZFNv
dXJjZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxlcyk7CiAgICAgVmVj
dG9yPE1pbmlmaWVkR2VuZXJhdGlvbkluZm8sIDMyPiBnZW5lcmF0aW9uSW5mb3MoZ3JhcGgub3Jp
Z2luYWxHcmFwaFNpemUoKSk7Cg==
</data>
<flag name="review"
          id="160757"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152149</attachid>
            <date>2012-07-12 21:07:51 -0700</date>
            <delta_ts>2012-07-12 21:56:31 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>fixcfa_patch_1.diff</filename>
            <type>text/plain</type>
            <size>26595</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyNTM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDEyLTA3LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIENGQSBtYXkgZ2V0IG92ZXJ6ZWFsb3VzIGluIGxvb3BzIHRoYXQgaGF2ZSBjb2RlIHRoYXQg
bXVzdCBleGl0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05MTE4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEVuc3VyZSB0aGF0IGlmIHRoZSBDRkEgYXNzdW1lcyB0aGF0IGFuIG9wZXJhdGlvbiBtdXN0IGV4
aXQsIHRoZW4gaXQgd2lsbCBhbHdheXMgZXhpdAorICAgICAgICBubyBtYXR0ZXIgd2hhdCBoYXBw
ZW5zIGFmdGVyLiBUaGF0J3MgbmVjZXNzYXJ5IHRvIHByZXNlcnZlIHNvdW5kbmVzcy4KKyAgICAg
ICAgCisgICAgICAgIFJlbW92ZSBhIGJyb2tlbiBmaXh1cCBkb25lIGJ5IHRoZSBERkcgc2ltcGxp
Zmllciwgd2hlcmUgaXQgd2FzIHRyeWluZyB0byBzYXkgdGhhdCB0aGUKKyAgICAgICAgdmFyaWFi
bGUtYXQtaGVhZCB3YXMgdGhlIGZpcnN0IGFjY2VzcyBpbiB0aGUgc2Vjb25kIGJsb2NrIGluIHRo
ZSBtZXJnZSwgaWYgdGhlIGZpcnN0CisgICAgICAgIGJsb2NrIGRpZCBub3QgcmVhZCB0aGUgdmFy
aWFibGUuIFRoYXQncyB0b3RhbGx5IHdyb25nLCBpZiB0aGUgZmlyc3QgYmxvY2sgd2FzIGluIGZh
Y3QKKyAgICAgICAgZG9pbmcgYSBwaGFudG9tIHJlYWQuIEkgcmVtb3ZlZCB0aGF0IGZpeHVwIGFu
ZCBpbnN0ZWFkIGhhcmRlbmVkIHRoZSByZXN0IG9mIHRoZQorICAgICAgICBjb21waWxlci4KKwor
ICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdFN0YXRlOjplbmRCYXNpY0Jsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9j
ay5oOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAg
ICAoQmFzaWNCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NGQVBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpDRkFQaGFzZTo6cGVyZm9ybUJsb2NrQ0ZBKToKKyAgICAgICAgKiBkZmcvREZH
Q0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxp
ZmljYXRpb25QaGFzZTo6bWVyZ2VCbG9ja3MpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6
OkNvbnN0YW50Rm9sZGluZ1BoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRp
bmdQaGFzZTo6cnVuKToKKyAgICAgICAgKENvbnN0YW50Rm9sZGluZ1BoYXNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAg
IChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnBhaW50VW5yZWFjaGFibGVDb2RlKToK
KyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QpOgorCiAyMDEyLTA3LTEyICBB
bGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgogCiAgICAgICAg
IFtRdF0gSW1wbGVtZW50IE1lbW9yeVVzYWdlU3VwcG9ydApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMjI1MTEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjQsNiArMTY0LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjplbmRCYXNpY0Js
b2NrKE1lcmdlTQogICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9jazsgLy8gU2F2ZSB0aGUg
YmxvY2sgZm9yIHN1Y2Nlc3NvciBtZXJnaW5nLgogICAgIAogICAgIGJsb2NrLT5jZmFGb3VuZENv
bnN0YW50cyA9IG1fZm91bmRDb25zdGFudHM7CisgICAgYmxvY2stPmNmYURpZEZpbmlzaCA9IG1f
aXNWYWxpZDsKICAgICAKICAgICBpZiAoIW1faXNWYWxpZCkgewogICAgICAgICByZXNldCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9u
IDEyMjUxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9y
PE5vZGVJbmRleCwgOD4KICAgICAgICAgLCBjZmFIYXNWaXNpdGVkKGZhbHNlKQogICAgICAgICAs
IGNmYVNob3VsZFJldmlzaXQoZmFsc2UpCiAgICAgICAgICwgY2ZhRm91bmRDb25zdGFudHMoZmFs
c2UpCisgICAgICAgICwgY2ZhRGlkRmluaXNoKHRydWUpCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAog
ICAgICAgICAsIGlzTGlua2VkKGZhbHNlKQogI2VuZGlmCkBAIC0xMDMsNiArMTA0LDcgQEAgc3Ry
dWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZUluZGV4LCA4PgogICAgIGJvb2wgY2ZhSGFzVmlz
aXRlZDsKICAgICBib29sIGNmYVNob3VsZFJldmlzaXQ7CiAgICAgYm9vbCBjZmFGb3VuZENvbnN0
YW50czsKKyAgICBib29sIGNmYURpZEZpbmlzaDsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAg
Ym9vbCBpc0xpbmtlZDsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDRkFQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDRkFQaGFzZS5jcHAJKHJldmlzaW9uIDEyMjUxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw4ICs5NSwxMiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgbV9zdGF0ZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAg
ICAgICAgICBkYXRhTG9nKCJcbiIpOwogI2VuZGlmCi0gICAgICAgICAgICBpZiAoIW1fc3RhdGUu
ZXhlY3V0ZShpKSkKKyAgICAgICAgICAgIGlmICghbV9zdGF0ZS5leGVjdXRlKGkpKSB7CisjaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICAgICAgIEV4cGVjdCBPU1IgZXhpdC5cbiIpOworI2VuZGlmCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2coIiAgICAgIHRhaWwgcmVn
czogIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDEyMjUxMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY0MywxOCArNjQzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBOb2Rl
SW5kZXggYXRGaXJzdEluZGV4ID0gZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
bm9kZS5sb2NhbCgpKTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUVkZ2Uobm9kZS5j
aGlsZHJlbi5jaGlsZDEoKSwgRWRnZShza2lwR2V0TG9jYWwoYXRGaXJzdEluZGV4KSksIG5vZGUu
c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAgICAgICAgY2hpbGRyZW5BbHJlYWR5Rml4ZWQg
PSB0cnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChub2RlLm9wKCkg
IT0gR2V0TG9jYWwpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBhdEZpcnN0SGVhZEluZGV4ID0gZmlyc3RCbG9j
ay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKTsKLSAgICAgICAgICAgICAg
ICBpZiAoYXRGaXJzdEhlYWRJbmRleCA9PSBOb05vZGUpCi0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW2F0Rmly
c3RIZWFkSW5kZXhdLm9wKCkgIT0gUGhpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdEhl
YWQub3BlcmFuZChub2RlLmxvY2FsKCkpID0gbm9kZUluZGV4OwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJl
dmlzaW9uIDEyMjUxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIGNsYXNzIENv
bnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBoYXMKIHB1YmxpYzoKICAgICBDb25zdGFudEZv
bGRpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJjb25zdGFu
dCBmb2xkaW5nIikKKyAgICAgICAgLCBtX3N0YXRlKGdyYXBoKQogICAgIHsKICAgICB9CiAgICAg
CkBAIC00NywxMTQgKzQ4LDE5MyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBib29sIGNoYW5n
ZWQgPSBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIEFic3RyYWN0U3RhdGUgc3RhdGUobV9ncmFw
aCk7Ci0gICAgICAgIEluc2VydGlvblNldDxOb2RlSW5kZXg+IGluc2VydGlvblNldDsKLSAgICAg
ICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKICAg
ICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBpZiAoIWJsb2NrLT5jZmFGb3VuZENvbnN0YW50cykKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIGlmICghYmxvY2stPmNmYURpZEZpbmlzaCkKKyAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IHBhaW50VW5yZWFjaGFibGVDb2RlKGJsb2NrSW5kZXgpOworICAgICAg
ICAgICAgaWYgKGJsb2NrLT5jZmFGb3VuZENvbnN0YW50cykKKyAgICAgICAgICAgICAgICBjaGFu
Z2VkIHw9IGZvbGRDb25zdGFudHMoYmxvY2tJbmRleCk7CisgICAgICAgICAgICBtX2luc2VydGlv
blNldEZvclBhaW50aW5nLmV4ZWN1dGUoKmJsb2NrKTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Rm9yRm9sZGluZy5leGVjdXRlKCpibG9jayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHJldHVybiBjaGFuZ2VkOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIGZvbGRDb25z
dGFudHMoQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHsKICNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nKCJDb25zdGFudCBmb2xk
aW5nIGNvbnNpZGVyaW5nIEJsb2NrICMldS5cbiIsIGJsb2NrSW5kZXgpOworICAgICAgICBkYXRh
TG9nKCJDb25zdGFudCBmb2xkaW5nIGNvbnNpZGVyaW5nIEJsb2NrICMldS5cbiIsIGJsb2NrSW5k
ZXgpOwogI2VuZGlmCi0gICAgICAgICAgICBzdGF0ZS5iZWdpbkJhc2ljQmxvY2soYmxvY2spOwot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sg
PCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgICAgIGlmICgh
c3RhdGUuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAg
ICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBib29sIGVsaW1pbmF0ZWQgPSBmYWxzZTsKKyAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwor
ICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgbV9zdGF0ZS5iZWdpbkJhc2lj
QmxvY2soYmxvY2spOworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGlu
ZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CisgICAgICAgICAg
ICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAg
ICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKCFtX3N0YXRlLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBlbGltaW5hdGVkID0gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7
Ci0gICAgICAgICAgICAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6IHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFpc0VtcHR5U3BlY3VsYXRpb24oCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmln
aW4pKS5tX3R5cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChub2RlLnJlZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGVsaW1pbmF0ZWQgPSB0cnVlOworICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsK
KyAgICAgICAgICAgIGNhc2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOiB7CisgICAgICAgICAg
ICAgICAgaWYgKCFpc0VtcHR5U3BlY3VsYXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICBt
X3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKS5tX3R5cGUpKQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgQVNTRVJUKG5vZGUucmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgICAgICAgICBub2Rl
LnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICAgICAgICAgIGVsaW1pbmF0
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyB3b3VsZCBiZSBh
IGdyZWF0IHBsYWNlIHRvIHJlbW92ZSBDaGVja1N0cnVjdHVyZSdzLgogICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGlmIChlbGltaW5hdGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoZWxpbWluYXRlZCkgeworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIHN0YXRlLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKQotICAgICAgICAgICAgICAgICAg
ICB8fCBzdGF0ZS5kaWRDbG9iYmVyKCkKLSAgICAgICAgICAgICAgICAgICAgfHwgbm9kZS5oYXND
b25zdGFudCgpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gc3RhdGUuZm9yTm9kZShub2RlSW5kZXgpLnZhbHVlKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZSBwaGFudG9tKFBoYW50b20sIG5v
ZGUuY29kZU9yaWdpbik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG5v
ZGUub3AoKSA9PSBHZXRMb2NhbCkgewotICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggcHJl
dmlvdXNMb2NhbEFjY2VzcyA9IE5vTm9kZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpID09IG5vZGVJbmRleAotICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5vcCgpID09IFBo
aSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZXhwZWN0IHRoaXMgdG8gYmUgdGhl
IGNvbW1vbiBjYXNlLgotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0lu
UGhpcyhub2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBy
ZXZpb3VzTG9jYWxBY2Nlc3MgPSBub2RlLmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9
IHByZXZpb3VzTG9jYWxBY2Nlc3M7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5kZXhJbkJsb2NrID4gMCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBNdXN0IHNlYXJjaCBmb3IgdGhlIHByZXZpb3VzIGFjY2VzcyB0byB0
aGlzIGxvY2FsLgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IHN1Yklu
ZGV4SW5CbG9jayA9IGluZGV4SW5CbG9jazsgc3ViSW5kZXhJbkJsb2NrLS07KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IHN1Yk5vZGVJbmRleCA9IGJsb2NrLT5hdChz
dWJJbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUmIHN1Yk5v
ZGUgPSBtX2dyYXBoW3N1Yk5vZGVJbmRleF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFzdWJOb2RlLnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3ViTm9k
ZS5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSkKKyAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZShp
bmRleEluQmxvY2spOworICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkKKyAg
ICAgICAgICAgICAgICB8fCBtX3N0YXRlLmRpZENsb2JiZXIoKQorICAgICAgICAgICAgICAgIHx8
IG5vZGUuaGFzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZUluZGV4KS52YWx1ZSgpOwor
ICAgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIE5vZGUgcGhhbnRvbShQaGFudG9tLCBub2RlLmNvZGVP
cmlnaW4pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBH
ZXRMb2NhbCkgeworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwcmV2aW91c0xvY2FsQWNjZXNz
ID0gTm9Ob2RlOworICAgICAgICAgICAgICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRIZWFkLm9w
ZXJhbmQobm9kZS5sb2NhbCgpKSA9PSBub2RlSW5kZXgKKyAgICAgICAgICAgICAgICAgICAgJiYg
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5vcCgpID09IFBoaSkgeworICAgICAgICAgICAgICAgICAg
ICAvLyBXZSBleHBlY3QgdGhpcyB0byBiZSB0aGUgY29tbW9uIGNhc2UuCisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChibG9jay0+aXNJblBoaXMobm9kZS5jaGlsZDEoKS5pbmRleCgpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBub2RlLmNoaWxkMSgpLmlu
ZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFu
ZChub2RlLmxvY2FsKCkpID0gcHJldmlvdXNMb2NhbEFjY2VzczsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5kZXhJbkJsb2NrID4gMCk7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIE11c3Qgc2VhcmNoIGZvciB0aGUgcHJldmlvdXMgYWNjZXNz
IHRvIHRoaXMgbG9jYWwuCisgICAgICAgICAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBzdWJJ
bmRleEluQmxvY2sgPSBpbmRleEluQmxvY2s7IHN1YkluZGV4SW5CbG9jay0tOykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IHN1Yk5vZGVJbmRleCA9IGJsb2NrLT5hdChzdWJJ
bmRleEluQmxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSYgc3ViTm9kZSA9IG1f
Z3JhcGhbc3ViTm9kZUluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3ViTm9k
ZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJOb2RlLmhhc1ZhcmlhYmxlQWNjZXNz
RGF0YSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUubG9jYWwoKSAhPSBub2RlLmxvY2FsKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBUaGUgdHdvIG11c3QgaGF2ZSBiZWVuIHVuaWZpZWQuCisgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoc3ViTm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTG9jYWxBY2Nl
c3MgPSBzdWJOb2RlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNMb2NhbEFj
Y2VzcyA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBwcmV2aW91
cyBhY2Nlc3MgbXVzdCBoYXZlIGJlZW4gYSBQaGkuCisgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKEJsb2NrSW5kZXggcGhpSW5kZXhJbkJsb2NrID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJ
bmRleEluQmxvY2stLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
cGhpTm9kZUluZGV4ID0gYmxvY2stPnBoaXNbcGhpSW5kZXhJbkJsb2NrXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOb2RlJiBwaGlOb2RlID0gbV9ncmFwaFtwaGlOb2RlSW5kZXhdOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS5zaG91bGRHZW5lcmF0ZSgp
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3ViTm9kZS5sb2NhbCgpICE9IG5vZGUubG9jYWwoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS5sb2NhbCgpICE9IG5vZGUubG9j
YWwoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHR3byBtdXN0IGhhdmUgYmVlbiB1bmlmaWVkLgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdWJOb2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpID09IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBzdWJOb2RlSW5kZXg7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKHBoaU5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0g
bm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJldmlvdXNMb2NhbEFjY2VzcyA9IHBoaU5vZGVJbmRleDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChwcmV2aW91c0xvY2FsQWNjZXNzICE9IE5vTm9kZSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IE5vZGVJbmRleCB0YWlsTm9kZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5k
KG5vZGUubG9jYWwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0YWlsTm9kZUluZGV4ID09
IG5vZGVJbmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZChub2RlLmxvY2FsKCkpID0gcHJldmlvdXNMb2NhbEFjY2VzczsKLSAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFw
aFt0YWlsTm9kZUluZGV4XS5vcCgpID09IEZsdXNoCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgbV9ncmFwaFt0YWlsTm9kZUluZGV4XS5vcCgpID09IFNldExvY2FsKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgQVNTRVJUKHByZXZpb3VzTG9jYWxBY2Nlc3MgIT0gTm9Ob2RlKTsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBwaGFudG9tLmNoaWxkcmVuID0gbm9k
ZS5jaGlsZHJlbjsKLSAgICAgICAgICAgICAgICBwaGFudG9tLnJlZigpOworICAgICAgICAgICAg
ICAgIE5vZGVJbmRleCB0YWlsTm9kZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKG5vZGUubG9jYWwoKSk7CisgICAgICAgICAgICAgICAgaWYgKHRhaWxOb2RlSW5kZXggPT0g
bm9kZUluZGV4KQorICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9w
ZXJhbmQobm9kZS5sb2NhbCgpKSA9IHByZXZpb3VzTG9jYWxBY2Nlc3M7CisgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW3RhaWxOb2RlSW5k
ZXhdLm9wKCkgPT0gRmx1c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhb
dGFpbE5vZGVJbmRleF0ub3AoKSA9PSBTZXRMb2NhbCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3JhcGguY29u
dmVydFRvQ29uc3RhbnQobm9kZUluZGV4LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgTm9kZUlu
ZGV4IHBoYW50b21Ob2RlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKLSAgICAgICAgICAgICAgICBt
X2dyYXBoLmFwcGVuZChwaGFudG9tKTsKLSAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuYXBw
ZW5kKGluZGV4SW5CbG9jaywgcGhhbnRvbU5vZGVJbmRleCk7CisgICAgICAgICAgICBwaGFudG9t
LmNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjsKKyAgICAgICAgICAgIHBoYW50b20ucmVmKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZUlu
ZGV4LCB2YWx1ZSk7CisgICAgICAgICAgICBOb2RlSW5kZXggcGhhbnRvbU5vZGVJbmRleCA9IG1f
Z3JhcGguc2l6ZSgpOworICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQocGhhbnRvbSk7CisgICAg
ICAgICAgICBtX2luc2VydGlvblNldEZvckZvbGRpbmcuYXBwZW5kKGluZGV4SW5CbG9jaywgcGhh
bnRvbU5vZGVJbmRleCk7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjaGFuZ2VkID0g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBtX3N0YXRlLnJlc2V0KCk7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyBpcyBuZWNlc3Nh
cnkgYmVjYXVzZSB0aGUgQ0ZBIG1heSByZWFjaCBjb25jbHVzaW9ucyBhYm91dCBjb25zdGFudHMg
YmFzZWQgb24gaXRzCisgICAgLy8gYXNzdW1wdGlvbiB0aGF0IGNlcnRhaW4gY29kZSBtdXN0IGV4
aXQsIGJ1dCB0aGVuIHRob3NlIGNvbnN0YW50cyBtYXkgbGVhZCBmdXR1cmUKKyAgICAvLyByZWV4
ZWN1dGlvbnMgb2YgdGhlIENGQSB0byBiZWxpZXZlIHRoYXQgdGhlIHNhbWUgY29kZSB3aWxsIG5v
dyBubyBsb25nZXIgZXhpdC4gVGh1cworICAgIC8vIHRvIGVuc3VyZSBzb3VuZG5lc3MsIHdlIG11
c3QgcGFpbnQgdW5yZWFjaGFibGUgY29kZSBhcyBzdWNoLCBieSBpbnNlcnRpbmcgYW4KKyAgICAv
LyB1bmNvbmRpdGlvbmFsIEZvcmNlT1NSRXhpdCB3aGVyZXZlciB3ZSBmaW5kIHRoYXQgYSBub2Rl
IHdvdWxkIGhhdmUgYWx3YXlzIGV4aXRlZC4KKyAgICAvLyBUaGlzIHdpbGwgb25seSBoYXBwZW4g
aW4gY2FzZXMgd2hlcmUgd2UgYXJlIG1ha2luZyBzdGF0aWMgc3BlY3VsYXRpb25zLCBvciB3ZSdy
ZQorICAgIC8vIG1ha2luZyB0b3RhbGx5IHdyb25nIHNwZWN1bGF0aW9ucyBkdWUgdG8gaW1wcmVj
aXNpb24gb24gdGhlIHByZWRpY3Rpb24gcHJvcGFnYXRvci4KKyAgICBib29sIHBhaW50VW5yZWFj
aGFibGVDb2RlKEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB7CisgICAgICAgIGJvb2wgY2hh
bmdlZCA9IGZhbHNlOworICAgICAgICAKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2coIlBhaW50aW5nIHVucmVhY2hhYmxlIGNvZGUgaW4g
QmxvY2sgIyV1LlxuIiwgYmxvY2tJbmRleCk7CisjZW5kaWYKKyAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBtX3N0
YXRlLmJlZ2luQmFzaWNCbG9jayhibG9jayk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5k
ZXhJbkJsb2NrKSB7CisgICAgICAgICAgICBtX3N0YXRlLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsK
KyAgICAgICAgICAgIGlmIChtX3N0YXRlLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJs
b2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
bm9kZUluZGV4XTsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAg
ICBjYXNlIFJldHVybjoKKyAgICAgICAgICAgIGNhc2UgVGhyb3c6CisgICAgICAgICAgICBjYXNl
IFRocm93UmVmZXJlbmNlRXJyb3I6CisgICAgICAgICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKKyAg
ICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nLiBUaGVzZSBub2RlcyB3aWxsIGFscmVhZHkgZG8g
dGhlIHJpZ2h0IHRoaW5nLgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBOb2RlIGZvcmNlT1NSRXhp
dChGb3JjZU9TUkV4aXQsIG5vZGUuY29kZU9yaWdpbik7CisgICAgICAgICAgICAgICAgZm9yY2VP
U1JFeGl0LnJlZigpOworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBmb3JjZU9TUkV4aXRJbmRl
eCA9IG1fZ3JhcGguc2l6ZSgpOworICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKGZvcmNl
T1NSRXhpdCk7CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXRGb3JQYWludGluZy5hcHBl
bmQoaW5kZXhJbkJsb2NrLCBmb3JjZU9TUkV4aXRJbmRleCk7CiAgICAgICAgICAgICAgICAgY2hh
bmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZSgqYmxvY2spOwotICAgICAgICAgICAgc3RhdGUu
cmVzZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIG1fc3RhdGUu
cmVzZXQoKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KKworICAg
IEFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKKyAgICBJbnNlcnRpb25TZXQ8Tm9kZUluZGV4PiBtX2lu
c2VydGlvblNldEZvclBhaW50aW5nOworICAgIEluc2VydGlvblNldDxOb2RlSW5kZXg+IG1faW5z
ZXJ0aW9uU2V0Rm9yRm9sZGluZzsKIH07CiAKIGJvb2wgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhH
cmFwaCYgZ3JhcGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxl
RXZlbnRTdHJlYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJKHJldmlzaW9uIDEyMjUxMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMiw2ICsxMDIsMTAgQEAgdm9pZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0
cnVjdCgKICAgICB3aGlsZSAoYXQoc3RhcnRJbmRleCkua2luZCgpICE9IFJlc2V0KQogICAgICAg
ICBzdGFydEluZGV4LS07CiAgICAgCisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAg
IGRhdGFMb2coIkNvbXB1dGluZyBPU1IgZXhpdCByZWNvdmVyaWVzIHN0YXJ0aW5nIGF0IHNlcSMl
dS5cbiIsIHN0YXJ0SW5kZXgpOworI2VuZGlmCisKICAgICAvLyBTdGVwIDI6IENyZWF0ZSBhIG1v
Y2stdXAgb2YgdGhlIERGRydzIHN0YXRlIGFuZCBleGVjdXRlIHRoZSBldmVudHMuCiAgICAgT3Bl
cmFuZHM8VmFsdWVTb3VyY2U+IG9wZXJhbmRTb3VyY2VzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpLCBudW1WYXJpYWJsZXMpOwogICAgIFZlY3RvcjxNaW5pZmllZEdlbmVyYXRpb25JbmZvLCAz
Mj4gZ2VuZXJhdGlvbkluZm9zKGdyYXBoLm9yaWdpbmFsR3JhcGhTaXplKCkpOwpJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gMTIyNTM4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDctMTIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KKworICAgICAgICBERkcgQ0ZBIG1heSBnZXQgb3ZlcnplYWxvdXMgaW4gbG9vcHMgdGhh
dCBoYXZlIGNvZGUgdGhhdCBtdXN0IGV4aXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTkxMTg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBmYXN0L2pzL2RmZy1mb3JjZS1leGl0LXRoZW4tc3BhcnNlLWNv
bmRpdGlvbmFsLWNvbnN0YW50LXByb3AtaW4tbG9vcC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvanMvZGZnLWZvcmNlLWV4aXQtdGhlbi1zcGFyc2UtY29uZGl0aW9uYWwtY29u
c3RhbnQtcHJvcC1pbi1sb29wLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvc2NyaXB0
LXRlc3RzL2RmZy1mb3JjZS1leGl0LXRoZW4tc3BhcnNlLWNvbmRpdGlvbmFsLWNvbnN0YW50LXBy
b3AtaW4tbG9vcC5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorCiAyMDEyLTA3LTEyICBFcmlj
IFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBJbmNvcnJlY3QgYmVoYXZpb3Vy
IGNhbGxpbmcgUmFuZ2Ugc2V0U3RhcnQgb3Igc2V0RW5kIHdpdGggYm91bmRhcnkgaW4gZGlmZmVy
ZW50IGRvY3VtZW50CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2RmZy1mb3JjZS1leGl0LXRo
ZW4tc3BhcnNlLWNvbmRpdGlvbmFsLWNvbnN0YW50LXByb3AtaW4tbG9vcC1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9kZmctZm9yY2UtZXhpdC10aGVuLXNw
YXJzZS1jb25kaXRpb25hbC1jb25zdGFudC1wcm9wLWluLWxvb3AtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9kZmctZm9yY2UtZXhpdC10aGVuLXNwYXJz
ZS1jb25kaXRpb25hbC1jb25zdGFudC1wcm9wLWluLWxvb3AtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDIwOSBAQAorQ2hlY2tzIHRoYXQgaW5jcmVhc2VkIGFnZ3Jlc3NpdmVu
ZXNzIGluIHNwYXJzZSBjb25kaXRpb25hbCBjb25zdGFudCBwcm9wYWdhdGlvbiByZXN1bHRpbiBm
cm9tIGEgbm9kZSBiZWluZyBwcm92ZW4gdG8gYmUgZm9yY2UgZXhpdCBkb2VzIG5vdCBsZWFkIHRv
IGEgY2FzY2FkZSBvZiB1bnNvdW5kIGRlY2lzaW9ucy4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0
NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNT
IGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFy
cmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlz
IDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0Ngor
UEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZv
byhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5
KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3
NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFT
UyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhh
cnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBp
cyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYK
K1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBm
b28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJh
eSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4
NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BB
U1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28o
YXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkg
aXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2
CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1Mg
Zm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJy
YXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMg
ODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQ
QVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9v
KGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkp
IGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0
NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNT
IGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFy
cmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlz
IDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0Ngor
UEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZv
byhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5
KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3
NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFT
UyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhh
cnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBp
cyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYK
K1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBm
b28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJh
eSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4
NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BB
U1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28o
YXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkg
aXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2
CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1Mg
Zm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJy
YXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMg
ODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQ
QVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9v
KGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkp
IGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0
NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNT
IGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFy
cmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlz
IDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0Ngor
UEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZv
byhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5
KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3
NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFT
UyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhh
cnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBp
cyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYK
K1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBm
b28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJh
eSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4
NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BB
U1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28o
YXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkg
aXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2
CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1Mg
Zm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJy
YXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMg
ODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQ
QVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9v
KGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkp
IGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0
NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNT
IGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFy
cmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlz
IDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0Ngor
UEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZv
byhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5
KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3
NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFT
UyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhh
cnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBp
cyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYK
K1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvanMvZGZnLWZvcmNlLWV4aXQtdGhlbi1zcGFyc2UtY29uZGl0aW9uYWwtY29u
c3RhbnQtcHJvcC1pbi1sb29wLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9q
cy9kZmctZm9yY2UtZXhpdC10aGVuLXNwYXJzZS1jb25kaXRpb25hbC1jb25zdGFudC1wcm9wLWlu
LWxvb3AuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvZGZnLWZvcmNl
LWV4aXQtdGhlbi1zcGFyc2UtY29uZGl0aW9uYWwtY29uc3RhbnQtcHJvcC1pbi1sb29wLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8v
SUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBz
cmM9InNjcmlwdC10ZXN0cy9kZmctZm9yY2UtZXhpdC10aGVuLXNwYXJzZS1jb25kaXRpb25hbC1j
b25zdGFudC1wcm9wLWluLWxvb3AuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvZGZnLWZvcmNlLWV4aXQtdGhlbi1zcGFyc2Ut
Y29uZGl0aW9uYWwtY29uc3RhbnQtcHJvcC1pbi1sb29wLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2RmZy1mb3JjZS1leGl0LXRoZW4tc3BhcnNlLWNv
bmRpdGlvbmFsLWNvbnN0YW50LXByb3AtaW4tbG9vcC5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2RmZy1mb3JjZS1leGl0LXRoZW4tc3BhcnNlLWNv
bmRpdGlvbmFsLWNvbnN0YW50LXByb3AtaW4tbG9vcC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyMiBAQAorZGVzY3JpcHRpb24oCisiQ2hlY2tzIHRoYXQgaW5jcmVhc2VkIGFnZ3Jlc3NpdmVu
ZXNzIGluIHNwYXJzZSBjb25kaXRpb25hbCBjb25zdGFudCBwcm9wYWdhdGlvbiByZXN1bHRpbiBm
cm9tIGEgbm9kZSBiZWluZyBwcm92ZW4gdG8gYmUgZm9yY2UgZXhpdCBkb2VzIG5vdCBsZWFkIHRv
IGEgY2FzY2FkZSBvZiB1bnNvdW5kIGRlY2lzaW9ucy4iCispOworCitmdW5jdGlvbiBmb28oYSkg
eworICAgIHZhciBpOworICAgIGlmIChhLnB1c2gpCisgICAgICAgIGkgPSAwOworICAgIGVsc2UK
KyAgICAgICAgaSA9IGE7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgd2hpbGUgKGkgPCAxMCkg
eworICAgICAgICByZXN1bHQgKz0gYVtpXTsKKyAgICAgICAgaSsrOworICAgIH0KKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2YXIgYXJyYXkgPSBbNTQsIDU0MzIsIDEyMzQsIDU0LCAxMjM1LCA2
NCwgNzUsIDUzMiwgNjQsIDJdOworCitmb3IgKHZhciBpID0gMDsgaSA8IDIwMDsgKytpKQorICAg
IHNob3VsZEJlKCJmb28oYXJyYXkpIiwgIjg3NDYiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152152</attachid>
            <date>2012-07-12 21:56:31 -0700</date>
            <delta_ts>2012-07-12 21:58:07 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>fixcfa_patch_2.diff</filename>
            <type>text/plain</type>
            <size>27024</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyNTM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDEyLTA3LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIENGQSBtYXkgZ2V0IG92ZXJ6ZWFsb3VzIGluIGxvb3BzIHRoYXQgaGF2ZSBjb2RlIHRoYXQg
bXVzdCBleGl0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05MTE4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEVuc3VyZSB0aGF0IGlmIHRoZSBDRkEgYXNzdW1lcyB0aGF0IGFuIG9wZXJhdGlvbiBtdXN0IGV4
aXQsIHRoZW4gaXQgd2lsbCBhbHdheXMgZXhpdAorICAgICAgICBubyBtYXR0ZXIgd2hhdCBoYXBw
ZW5zIGFmdGVyLiBUaGF0J3MgbmVjZXNzYXJ5IHRvIHByZXNlcnZlIHNvdW5kbmVzcy4KKyAgICAg
ICAgCisgICAgICAgIFJlbW92ZSBhIGJyb2tlbiBmaXh1cCBkb25lIGJ5IHRoZSBERkcgc2ltcGxp
Zmllciwgd2hlcmUgaXQgd2FzIHRyeWluZyB0byBzYXkgdGhhdCB0aGUKKyAgICAgICAgdmFyaWFi
bGUtYXQtaGVhZCB3YXMgdGhlIGZpcnN0IGFjY2VzcyBpbiB0aGUgc2Vjb25kIGJsb2NrIGluIHRo
ZSBtZXJnZSwgaWYgdGhlIGZpcnN0CisgICAgICAgIGJsb2NrIGRpZCBub3QgcmVhZCB0aGUgdmFy
aWFibGUuIFRoYXQncyB0b3RhbGx5IHdyb25nLCBpZiB0aGUgZmlyc3QgYmxvY2sgd2FzIGluIGZh
Y3QKKyAgICAgICAgZG9pbmcgYSBwaGFudG9tIHJlYWQuIEkgcmVtb3ZlZCB0aGF0IGZpeHVwIGFu
ZCBpbnN0ZWFkIGhhcmRlbmVkIHRoZSByZXN0IG9mIHRoZQorICAgICAgICBjb21waWxlci4KKwor
ICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdFN0YXRlOjplbmRCYXNpY0Jsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9j
ay5oOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAg
ICAoQmFzaWNCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NGQVBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpDRkFQaGFzZTo6cGVyZm9ybUJsb2NrQ0ZBKToKKyAgICAgICAgKiBkZmcvREZH
Q0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxp
ZmljYXRpb25QaGFzZTo6bWVyZ2VCbG9ja3MpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6
OkNvbnN0YW50Rm9sZGluZ1BoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRp
bmdQaGFzZTo6cnVuKToKKyAgICAgICAgKENvbnN0YW50Rm9sZGluZ1BoYXNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAg
IChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnBhaW50VW5yZWFjaGFibGVDb2RlKToK
KyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QpOgorCiAyMDEyLTA3LTEyICBB
bGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgogCiAgICAgICAg
IFtRdF0gSW1wbGVtZW50IE1lbW9yeVVzYWdlU3VwcG9ydApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMjI1MTEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw2ICs1MiwxMCBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmJlZ2luQmFzaWNC
bG9jayhCYXNpCiAgICAgQVNTRVJUKGJhc2ljQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJP
ZkxvY2FscygpID09IGJhc2ljQmxvY2stPnZhbHVlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsK
ICAgICBBU1NFUlQoYmFzaWNCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkg
PT0gYmFzaWNCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkpOwogICAgIAor
ICAgIC8vIFRoaXMgaXMgdXN1YWxseSBhIG5vLW9wLCBidXQgaXQgaXMgcG9zc2libGUgdGhhdCB0
aGUgZ3JhcGggaGFzIGdyb3duIHNpbmNlIHRoZQorICAgIC8vIGFic3RyYWN0IHN0YXRlIHdhcyBs
YXN0IHVzZWQuCisgICAgbV9ub2Rlcy5yZXNpemUobV9ncmFwaC5zaXplKCkpOworICAgIAogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmFzaWNCbG9jay0+c2l6ZSgpOyBpKyspCiAgICAgICAg
IG1fbm9kZXNbYmFzaWNCbG9jay0+YXQoaSldLmNsZWFyKCk7CiAKQEAgLTE2NCw2ICsxNjgsNyBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2soTWVyZ2VNCiAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2Jsb2NrOyAvLyBTYXZlIHRoZSBibG9jayBmb3Igc3VjY2Vzc29yIG1lcmdp
bmcuCiAgICAgCiAgICAgYmxvY2stPmNmYUZvdW5kQ29uc3RhbnRzID0gbV9mb3VuZENvbnN0YW50
czsKKyAgICBibG9jay0+Y2ZhRGlkRmluaXNoID0gbV9pc1ZhbGlkOwogICAgIAogICAgIGlmICgh
bV9pc1ZhbGlkKSB7CiAgICAgICAgIHJlc2V0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTIyNTExKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1
LDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZUluZGV4LCA4PgogICAgICAgICAs
IGNmYUhhc1Zpc2l0ZWQoZmFsc2UpCiAgICAgICAgICwgY2ZhU2hvdWxkUmV2aXNpdChmYWxzZSkK
ICAgICAgICAgLCBjZmFGb3VuZENvbnN0YW50cyhmYWxzZSkKKyAgICAgICAgLCBjZmFEaWRGaW5p
c2godHJ1ZSkKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgICwgaXNMaW5rZWQoZmFsc2Up
CiAjZW5kaWYKQEAgLTEwMyw2ICsxMDQsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxO
b2RlSW5kZXgsIDg+CiAgICAgYm9vbCBjZmFIYXNWaXNpdGVkOwogICAgIGJvb2wgY2ZhU2hvdWxk
UmV2aXNpdDsKICAgICBib29sIGNmYUZvdW5kQ29uc3RhbnRzOworICAgIGJvb2wgY2ZhRGlkRmlu
aXNoOwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBib29sIGlzTGlua2VkOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkocmV2aXNpb24g
MTIyNTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk1LDggKzk1LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX3N0
YXRlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKICAgICAgICAgICAgIGRhdGFMb2coIlxuIik7CiAj
ZW5kaWYKLSAgICAgICAgICAgIGlmICghbV9zdGF0ZS5leGVjdXRlKGkpKQorICAgICAgICAgICAg
aWYgKCFtX3N0YXRlLmV4ZWN1dGUoaSkpIHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICAgRXhwZWN0IE9T
UiBleGl0LlxuIik7CisjZW5kaWYKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
ICAgICAgICAgZGF0YUxvZygiICAgICAgdGFpbCByZWdzOiAiKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNw
cAkocmV2aXNpb24gMTIyNTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQzLDE4ICs2NDMsNiBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE5vZGVJbmRleCBhdEZpcnN0SW5kZXggPSBmaXJz
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChub2RlLmxvY2FsKCkpOwogICAgICAgICAg
ICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBFZGdlKHNr
aXBHZXRMb2NhbChhdEZpcnN0SW5kZXgpKSwgbm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAg
ICAgICAgICAgICBjaGlsZHJlbkFscmVhZHlGaXhlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUub3AoKSAhPSBHZXRMb2NhbCkKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZUlu
ZGV4IGF0Rmlyc3RIZWFkSW5kZXggPSBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFu
ZChub2RlLmxvY2FsKCkpOwotICAgICAgICAgICAgICAgIGlmIChhdEZpcnN0SGVhZEluZGV4ID09
IE5vTm9kZSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbYXRGaXJzdEhlYWRJbmRleF0ub3AoKSAhPSBQaGkp
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG5vZGUubG9jYWwoKSkg
PSBub2RlSW5kZXg7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTIyNTExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDYgKzQwLDcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJs
aWMgUGhhcwogcHVibGljOgogICAgIENvbnN0YW50Rm9sZGluZ1BoYXNlKEdyYXBoJiBncmFwaCkK
ICAgICAgICAgOiBQaGFzZShncmFwaCwgImNvbnN0YW50IGZvbGRpbmciKQorICAgICAgICAsIG1f
c3RhdGUoZ3JhcGgpCiAgICAgewogICAgIH0KICAgICAKQEAgLTQ3LDExNCArNDgsMTkyIEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICAKLSAg
ICAgICAgQWJzdHJhY3RTdGF0ZSBzdGF0ZShtX2dyYXBoKTsKLSAgICAgICAgSW5zZXJ0aW9uU2V0
PE5vZGVJbmRleD4gaW5zZXJ0aW9uU2V0OwotICAgICAgICAKICAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7
ICsrYmxvY2tJbmRleCkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
Lm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghYmxvY2stPmNmYUZvdW5k
Q29uc3RhbnRzKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFi
bG9jay0+Y2ZhRGlkRmluaXNoKQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gcGFpbnRVbnJl
YWNoYWJsZUNvZGUoYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoYmxvY2stPmNmYUZvdW5k
Q29uc3RhbnRzKQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gZm9sZENvbnN0YW50cyhibG9j
a0luZGV4KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgZm9sZENvbnN0YW50cyhCbG9ja0luZGV4IGJsb2Nr
SW5kZXgpCisgICAgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
LSAgICAgICAgICAgIGRhdGFMb2coIkNvbnN0YW50IGZvbGRpbmcgY29uc2lkZXJpbmcgQmxvY2sg
IyV1LlxuIiwgYmxvY2tJbmRleCk7CisgICAgICAgIGRhdGFMb2coIkNvbnN0YW50IGZvbGRpbmcg
Y29uc2lkZXJpbmcgQmxvY2sgIyV1LlxuIiwgYmxvY2tJbmRleCk7CiAjZW5kaWYKLSAgICAgICAg
ICAgIHN0YXRlLmJlZ2luQmFzaWNCbG9jayhibG9jayk7Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5k
ZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5pc1ZhbGlkKCkpCi0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBOb2RlJiBub2Rl
ID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGJvb2wgZWxpbWluYXRlZCA9IGZhbHNlOworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9
IGZhbHNlOworICAgICAgICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jayhibG9jayk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNp
emUoKTsgKytpbmRleEluQmxvY2spIHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgg
PSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dy
YXBoW25vZGVJbmRleF07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fc3Rh
dGUuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBib29sIGVsaW1pbmF0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNl
IENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZDogewotICAgICAgICAgICAgICAgICAgICBpZiAoIWlz
RW1wdHlTcGVjdWxhdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS52YXJp
YWJsZXMoKS5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpLm1fdHlwZSkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUu
cmVmQ291bnQoKSA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1
bHRGbGFncyhQaGFudG9tKTsKLSAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7
CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgY2FzZSBDaGVj
a0FyZ3VtZW50c05vdENyZWF0ZWQ6IHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzRW1wdHlTcGVj
dWxhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3Bl
cmFuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lz
dGVyRm9yKG5vZGUuY29kZU9yaWdpbikpLm1fdHlwZSkpCiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5yZWZD
b3VudCgpID09IDEpOworICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3Mo
UGhhbnRvbSk7CisgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdvdWxkIGJlIGEgZ3JlYXQgcGxhY2UgdG8gcmVtb3Zl
IENoZWNrU3RydWN0dXJlJ3MuCiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGVsaW1pbmF0ZWQpIHsK
LSAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChlbGltaW5hdGVk
KSB7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
c3RhdGUuZXhlY3V0ZShpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIGlmICghbm9kZS5z
aG91bGRHZW5lcmF0ZSgpCi0gICAgICAgICAgICAgICAgICAgIHx8IHN0YXRlLmRpZENsb2JiZXIo
KQotICAgICAgICAgICAgICAgICAgICB8fCBub2RlLmhhc0NvbnN0YW50KCkpCi0gICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdGF0
ZS5mb3JOb2RlKG5vZGVJbmRleCkudmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXZhbHVl
KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBOb2RlIHBoYW50b20oUGhhbnRvbSwgbm9kZS5jb2RlT3JpZ2luKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldExvY2FsKSB7
Ci0gICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwcmV2aW91c0xvY2FsQWNjZXNzID0gTm9O
b2RlOwotICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVy
YW5kKG5vZGUubG9jYWwoKSkgPT0gbm9kZUluZGV4Ci0gICAgICAgICAgICAgICAgICAgICAgICAm
JiBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm9wKCkgPT0gUGhpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBXZSBleHBlY3QgdGhpcyB0byBiZSB0aGUgY29tbW9uIGNhc2UuCi0gICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlzSW5QaGlzKG5vZGUuY2hpbGQxKCkuaW5k
ZXgoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNMb2NhbEFjY2VzcyA9IG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpID0gcHJldmlvdXNMb2NhbEFjY2VzczsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChpbmRleEluQmxvY2sgPiAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE11c3Qg
c2VhcmNoIGZvciB0aGUgcHJldmlvdXMgYWNjZXNzIHRvIHRoaXMgbG9jYWwuCi0gICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggc3ViSW5kZXhJbkJsb2NrID0gaW5kZXhJbkJs
b2NrOyBzdWJJbmRleEluQmxvY2stLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
b2RlSW5kZXggc3ViTm9kZUluZGV4ID0gYmxvY2stPmF0KHN1YkluZGV4SW5CbG9jayk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSYgc3ViTm9kZSA9IG1fZ3JhcGhbc3ViTm9kZUlu
ZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Yk5vZGUuc2hvdWxkR2Vu
ZXJhdGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJOb2RlLmhhc1ZhcmlhYmxlQWNjZXNzRGF0
YSgpKQorICAgICAgICAgICAgbV9zdGF0ZS5leGVjdXRlKGluZGV4SW5CbG9jayk7CisgICAgICAg
ICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKQorICAgICAgICAgICAgICAgIHx8IG1fc3Rh
dGUuZGlkQ2xvYmJlcigpCisgICAgICAgICAgICAgICAgfHwgbm9kZS5oYXNDb25zdGFudCgpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1f
c3RhdGUuZm9yTm9kZShub2RlSW5kZXgpLnZhbHVlKCk7CisgICAgICAgICAgICBpZiAoIXZhbHVl
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgTm9kZSBwaGFudG9tKFBoYW50b20sIG5vZGUuY29kZU9yaWdpbik7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldExvY2FsKSB7CisgICAgICAgICAg
ICAgICAgTm9kZUluZGV4IHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBOb05vZGU7CisgICAgICAgICAg
ICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpID09
IG5vZGVJbmRleAorICAgICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoW25vZGUuY2hpbGQxKCld
Lm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGV4cGVjdCB0aGlzIHRv
IGJlIHRoZSBjb21tb24gY2FzZS4KKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5p
c0luUGhpcyhub2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJl
dmlvdXNMb2NhbEFjY2VzcyA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAg
ICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBwcmV2
aW91c0xvY2FsQWNjZXNzOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChpbmRleEluQmxvY2sgPiAwKTsKKyAgICAgICAgICAgICAgICAgICAgLy8g
TXVzdCBzZWFyY2ggZm9yIHRoZSBwcmV2aW91cyBhY2Nlc3MgdG8gdGhpcyBsb2NhbC4KKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IHN1YkluZGV4SW5CbG9jayA9IGluZGV4SW5C
bG9jazsgc3ViSW5kZXhJbkJsb2NrLS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2Rl
SW5kZXggc3ViTm9kZUluZGV4ID0gYmxvY2stPmF0KHN1YkluZGV4SW5CbG9jayk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBOb2RlJiBzdWJOb2RlID0gbV9ncmFwaFtzdWJOb2RlSW5kZXhdOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJOb2RlLnNob3VsZEdlbmVyYXRlKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIXN1Yk5vZGUuaGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Vi
Tm9kZS5sb2NhbCgpICE9IG5vZGUubG9jYWwoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSB0d28gbXVzdCBoYXZl
IGJlZW4gdW5pZmllZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdWJOb2RlLnZh
cmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcHJldmlvdXNMb2NhbEFjY2VzcyA9IHN1Yk5vZGVJbmRleDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0xvY2FsQWNjZXNzID09IE5vTm9kZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHByZXZpb3VzIGFjY2VzcyBtdXN0IGhhdmUgYmVl
biBhIFBoaS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBwaGlJbmRl
eEluQmxvY2sgPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4SW5CbG9jay0tOykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwaGlOb2RlSW5kZXggPSBibG9jay0+
cGhpc1twaGlJbmRleEluQmxvY2tdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUm
IHBoaU5vZGUgPSBtX2dyYXBoW3BoaU5vZGVJbmRleF07CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFwaGlOb2RlLnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz
dWJOb2RlLmxvY2FsKCkgIT0gbm9kZS5sb2NhbCgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChwaGlOb2RlLmxvY2FsKCkgIT0gbm9kZS5sb2NhbCgpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBUaGUgdHdvIG11c3QgaGF2ZSBiZWVuIHVuaWZpZWQuCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKHN1Yk5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNMb2Nh
bEFjY2VzcyA9IHN1Yk5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQocGhpTm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0xvY2FsQWNjZXNzID0g
cGhpTm9kZUluZGV4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHByZXZp
b3VzTG9jYWxBY2Nlc3MgIT0gTm9Ob2RlKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IHRhaWxOb2RlSW5k
ZXggPSBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS5sb2NhbCgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHRhaWxOb2RlSW5kZXggPT0gbm9kZUluZGV4KQotICAgICAgICAg
ICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5vZGUubG9jYWwo
KSkgPSBwcmV2aW91c0xvY2FsQWNjZXNzOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW3RhaWxOb2RlSW5kZXhdLm9wKCkg
PT0gRmx1c2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW3RhaWxO
b2RlSW5kZXhdLm9wKCkgPT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBU1NF
UlQocHJldmlvdXNMb2NhbEFjY2VzcyAhPSBOb05vZGUpOwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIHBoYW50b20uY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuOwotICAgICAgICAg
ICAgICAgIHBoYW50b20ucmVmKCk7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IHRhaWxOb2Rl
SW5kZXggPSBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS5sb2NhbCgpKTsKKyAg
ICAgICAgICAgICAgICBpZiAodGFpbE5vZGVJbmRleCA9PSBub2RlSW5kZXgpCisgICAgICAgICAg
ICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChub2RlLmxvY2FsKCkpID0g
cHJldmlvdXNMb2NhbEFjY2VzczsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbdGFpbE5vZGVJbmRleF0ub3AoKSA9PSBGbHVzaAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFt0YWlsTm9kZUluZGV4XS5vcCgpID09
IFNldExvY2FsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlSW5k
ZXgsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggcGhhbnRvbU5vZGVJbmRleCA9
IG1fZ3JhcGguc2l6ZSgpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKHBoYW50b20p
OwotICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5hcHBlbmQoaW5kZXhJbkJsb2NrLCBwaGFu
dG9tTm9kZUluZGV4KTsKKyAgICAgICAgICAgIHBoYW50b20uY2hpbGRyZW4gPSBub2RlLmNoaWxk
cmVuOworICAgICAgICAgICAgcGhhbnRvbS5yZWYoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlSW5kZXgsIHZhbHVlKTsKKyAgICAgICAg
ICAgIE5vZGVJbmRleCBwaGFudG9tTm9kZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAg
ICAgICBtX2dyYXBoLmFwcGVuZChwaGFudG9tKTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
LmFwcGVuZChpbmRleEluQmxvY2ssIHBoYW50b21Ob2RlSW5kZXgpOwogICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgbV9zdGF0
ZS5yZXNldCgpOworICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKCpibG9jayk7CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyBp
cyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgQ0ZBIG1heSByZWFjaCBjb25jbHVzaW9ucyBhYm91dCBj
b25zdGFudHMgYmFzZWQgb24gaXRzCisgICAgLy8gYXNzdW1wdGlvbiB0aGF0IGNlcnRhaW4gY29k
ZSBtdXN0IGV4aXQsIGJ1dCB0aGVuIHRob3NlIGNvbnN0YW50cyBtYXkgbGVhZCBmdXR1cmUKKyAg
ICAvLyByZWV4ZWN1dGlvbnMgb2YgdGhlIENGQSB0byBiZWxpZXZlIHRoYXQgdGhlIHNhbWUgY29k
ZSB3aWxsIG5vdyBubyBsb25nZXIgZXhpdC4gVGh1cworICAgIC8vIHRvIGVuc3VyZSBzb3VuZG5l
c3MsIHdlIG11c3QgcGFpbnQgdW5yZWFjaGFibGUgY29kZSBhcyBzdWNoLCBieSBpbnNlcnRpbmcg
YW4KKyAgICAvLyB1bmNvbmRpdGlvbmFsIEZvcmNlT1NSRXhpdCB3aGVyZXZlciB3ZSBmaW5kIHRo
YXQgYSBub2RlIHdvdWxkIGhhdmUgYWx3YXlzIGV4aXRlZC4KKyAgICAvLyBUaGlzIHdpbGwgb25s
eSBoYXBwZW4gaW4gY2FzZXMgd2hlcmUgd2UgYXJlIG1ha2luZyBzdGF0aWMgc3BlY3VsYXRpb25z
LCBvciB3ZSdyZQorICAgIC8vIG1ha2luZyB0b3RhbGx5IHdyb25nIHNwZWN1bGF0aW9ucyBkdWUg
dG8gaW1wcmVjaXNpb24gb24gdGhlIHByZWRpY3Rpb24gcHJvcGFnYXRvci4KKyAgICBib29sIHBh
aW50VW5yZWFjaGFibGVDb2RlKEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB7CisgICAgICAg
IGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2coIlBhaW50aW5nIHVucmVhY2hhYmxl
IGNvZGUgaW4gQmxvY2sgIyV1LlxuIiwgYmxvY2tJbmRleCk7CisjZW5kaWYKKyAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAg
ICAgICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jayhibG9jayk7CisgICAgICAgIAorICAgICAgICBm
b3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXpl
KCk7ICsraW5kZXhJbkJsb2NrKSB7CisgICAgICAgICAgICBtX3N0YXRlLmV4ZWN1dGUoaW5kZXhJ
bkJsb2NrKTsKKyAgICAgICAgICAgIGlmIChtX3N0YXRlLmlzVmFsaWQoKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJ
bmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Cisg
ICAgICAgICAgICBjYXNlIFJldHVybjoKKyAgICAgICAgICAgIGNhc2UgVGhyb3c6CisgICAgICAg
ICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CisgICAgICAgICAgICBjYXNlIEZvcmNlT1NS
RXhpdDoKKyAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nLiBUaGVzZSBub2RlcyB3aWxsIGFs
cmVhZHkgZG8gdGhlIHJpZ2h0IHRoaW5nLgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBOb2RlIGZv
cmNlT1NSRXhpdChGb3JjZU9TUkV4aXQsIG5vZGUuY29kZU9yaWdpbik7CisgICAgICAgICAgICAg
ICAgZm9yY2VPU1JFeGl0LnJlZigpOworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBmb3JjZU9T
UkV4aXRJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOworICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBw
ZW5kKGZvcmNlT1NSRXhpdCk7CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5k
KGluZGV4SW5CbG9jaywgZm9yY2VPU1JFeGl0SW5kZXgpOwogICAgICAgICAgICAgICAgIGNoYW5n
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKmJsb2NrKTsKLSAgICAgICAgICAgIHN0YXRlLnJl
c2V0KCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBtX3N0YXRlLnJl
c2V0KCk7CisgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKmJsb2NrKTsKICAgICAgICAg
CiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KKworICAgIEFic3RyYWN0U3RhdGUgbV9z
dGF0ZTsKKyAgICBJbnNlcnRpb25TZXQ8Tm9kZUluZGV4PiBtX2luc2VydGlvblNldDsKIH07CiAK
IGJvb2wgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhHcmFwaCYgZ3JhcGgpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJ
KHJldmlzaW9uIDEyMjUxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFi
bGVFdmVudFN0cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIsMTAgQEAgdm9p
ZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICB3aGlsZSAoYXQoc3RhcnRJ
bmRleCkua2luZCgpICE9IFJlc2V0KQogICAgICAgICBzdGFydEluZGV4LS07CiAgICAgCisjaWYg
REZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgIGRhdGFMb2coIkNvbXB1dGluZyBPU1IgZXhp
dCByZWNvdmVyaWVzIHN0YXJ0aW5nIGF0IHNlcSMldS5cbiIsIHN0YXJ0SW5kZXgpOworI2VuZGlm
CisKICAgICAvLyBTdGVwIDI6IENyZWF0ZSBhIG1vY2stdXAgb2YgdGhlIERGRydzIHN0YXRlIGFu
ZCBleGVjdXRlIHRoZSBldmVudHMuCiAgICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+IG9wZXJhbmRT
b3VyY2VzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMpOwogICAgIFZl
Y3RvcjxNaW5pZmllZEdlbmVyYXRpb25JbmZvLCAzMj4gZ2VuZXJhdGlvbkluZm9zKGdyYXBoLm9y
aWdpbmFsR3JhcGhTaXplKCkpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyNTM4KQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDct
MTIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBERkcgQ0ZBIG1h
eSBnZXQgb3ZlcnplYWxvdXMgaW4gbG9vcHMgdGhhdCBoYXZlIGNvZGUgdGhhdCBtdXN0IGV4aXQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMTg4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2pz
L2RmZy1mb3JjZS1leGl0LXRoZW4tc3BhcnNlLWNvbmRpdGlvbmFsLWNvbnN0YW50LXByb3AtaW4t
bG9vcC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvZGZnLWZvcmNlLWV4
aXQtdGhlbi1zcGFyc2UtY29uZGl0aW9uYWwtY29uc3RhbnQtcHJvcC1pbi1sb29wLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvanMvc2NyaXB0LXRlc3RzL2RmZy1mb3JjZS1leGl0LXRoZW4t
c3BhcnNlLWNvbmRpdGlvbmFsLWNvbnN0YW50LXByb3AtaW4tbG9vcC5qczogQWRkZWQuCisgICAg
ICAgIChmb28pOgorCiAyMDEyLTA3LTEyICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4K
IAogICAgICAgICBJbmNvcnJlY3QgYmVoYXZpb3VyIGNhbGxpbmcgUmFuZ2Ugc2V0U3RhcnQgb3Ig
c2V0RW5kIHdpdGggYm91bmRhcnkgaW4gZGlmZmVyZW50IGRvY3VtZW50CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2pzL2RmZy1mb3JjZS1leGl0LXRoZW4tc3BhcnNlLWNvbmRpdGlvbmFsLWNvbnN0
YW50LXByb3AtaW4tbG9vcC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9qcy9kZmctZm9yY2UtZXhpdC10aGVuLXNwYXJzZS1jb25kaXRpb25hbC1jb25zdGFudC1w
cm9wLWluLWxvb3AtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9qcy9kZmctZm9yY2UtZXhpdC10aGVuLXNwYXJzZS1jb25kaXRpb25hbC1jb25zdGFudC1wcm9w
LWluLWxvb3AtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwOSBAQAorQ2hl
Y2tzIHRoYXQgaW5jcmVhc2VkIGFnZ3Jlc3NpdmVuZXNzIGluIHNwYXJzZSBjb25kaXRpb25hbCBj
b25zdGFudCBwcm9wYWdhdGlvbiByZXN1bHRpbiBmcm9tIGEgbm9kZSBiZWluZyBwcm92ZW4gdG8g
YmUgZm9yY2UgZXhpdCBkb2VzIG5vdCBsZWFkIHRvIGEgY2FzY2FkZSBvZiB1bnNvdW5kIGRlY2lz
aW9ucy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZm9vKGFycmF5KSBp
cyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYK
K1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBm
b28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJh
eSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4
NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BB
U1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28o
YXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkg
aXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2
CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1Mg
Zm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJy
YXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMg
ODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQ
QVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9v
KGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkp
IGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0
NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNT
IGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFy
cmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlz
IDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0Ngor
UEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZv
byhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5
KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3
NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFT
UyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhh
cnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBp
cyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYK
K1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBm
b28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJh
eSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4
NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BB
U1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28o
YXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkg
aXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2
CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1Mg
Zm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJy
YXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMg
ODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQ
QVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9v
KGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkp
IGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0
NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNT
IGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFy
cmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlz
IDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0Ngor
UEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZv
byhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5
KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3
NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFT
UyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhh
cnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBp
cyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYK
K1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBm
b28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJh
eSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4
NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BB
U1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28o
YXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkg
aXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2
CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1Mg
Zm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJy
YXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMg
ODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQ
QVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9v
KGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkp
IGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0
NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNT
IGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFy
cmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlz
IDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0Ngor
UEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZv
byhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5
KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3
NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFT
UyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhh
cnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBp
cyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYK
K1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBm
b28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJh
eSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4
NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BB
U1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28o
YXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkg
aXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2
CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1Mg
Zm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBmb28oYXJy
YXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQQVNTIGZvbyhhcnJheSkgaXMg
ODc0NgorUEFTUyBmb28oYXJyYXkpIGlzIDg3NDYKK1BBU1MgZm9vKGFycmF5KSBpcyA4NzQ2CitQ
QVNTIGZvbyhhcnJheSkgaXMgODc0NgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvZGZnLWZvcmNlLWV4
aXQtdGhlbi1zcGFyc2UtY29uZGl0aW9uYWwtY29uc3RhbnQtcHJvcC1pbi1sb29wLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9kZmctZm9yY2UtZXhpdC10aGVuLXNwYXJz
ZS1jb25kaXRpb25hbC1jb25zdGFudC1wcm9wLWluLWxvb3AuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvanMvZGZnLWZvcmNlLWV4aXQtdGhlbi1zcGFyc2UtY29uZGl0aW9u
YWwtY29uc3RhbnQtcHJvcC1pbi1sb29wLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAg
QEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9kZmctZm9yY2Ut
ZXhpdC10aGVuLXNwYXJzZS1jb25kaXRpb25hbC1jb25zdGFudC1wcm9wLWluLWxvb3AuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVz
dHMvZGZnLWZvcmNlLWV4aXQtdGhlbi1zcGFyc2UtY29uZGl0aW9uYWwtY29uc3RhbnQtcHJvcC1p
bi1sb29wLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3Rz
L2RmZy1mb3JjZS1leGl0LXRoZW4tc3BhcnNlLWNvbmRpdGlvbmFsLWNvbnN0YW50LXByb3AtaW4t
bG9vcC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3Rz
L2RmZy1mb3JjZS1leGl0LXRoZW4tc3BhcnNlLWNvbmRpdGlvbmFsLWNvbnN0YW50LXByb3AtaW4t
bG9vcC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMiBAQAorZGVzY3JpcHRpb24oCisiQ2hl
Y2tzIHRoYXQgaW5jcmVhc2VkIGFnZ3Jlc3NpdmVuZXNzIGluIHNwYXJzZSBjb25kaXRpb25hbCBj
b25zdGFudCBwcm9wYWdhdGlvbiByZXN1bHRpbiBmcm9tIGEgbm9kZSBiZWluZyBwcm92ZW4gdG8g
YmUgZm9yY2UgZXhpdCBkb2VzIG5vdCBsZWFkIHRvIGEgY2FzY2FkZSBvZiB1bnNvdW5kIGRlY2lz
aW9ucy4iCispOworCitmdW5jdGlvbiBmb28oYSkgeworICAgIHZhciBpOworICAgIGlmIChhLnB1
c2gpCisgICAgICAgIGkgPSAwOworICAgIGVsc2UKKyAgICAgICAgaSA9IGE7CisgICAgdmFyIHJl
c3VsdCA9IDA7CisgICAgd2hpbGUgKGkgPCAxMCkgeworICAgICAgICByZXN1bHQgKz0gYVtpXTsK
KyAgICAgICAgaSsrOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2YXIgYXJyYXkg
PSBbNTQsIDU0MzIsIDEyMzQsIDU0LCAxMjM1LCA2NCwgNzUsIDUzMiwgNjQsIDJdOworCitmb3Ig
KHZhciBpID0gMDsgaSA8IDIwMDsgKytpKQorICAgIHNob3VsZEJlKCJmb28oYXJyYXkpIiwgIjg3
NDYiKTsK
</data>
<flag name="review"
          id="160766"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>