<?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>67343</bug_id>
          
          <creation_ts>2011-08-31 17:04:26 -0700</creation_ts>
          <short_desc>DFG graph has no way of distinguishing or reconciling between static and dynamic predictions</short_desc>
          <delta_ts>2011-09-02 14:15:37 -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="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>460091</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-31 17:04:26 -0700</bug_when>
    <thetext>The DFG graph has the ability to store predictions about program statements and variables.  It can even merge multiple different predictions; for example if one data point indicates that something is likely integer and another data point indicates that it is likely double, then the graph is smart enough to mark the prediction as &quot;numeric&quot;, which indicates that can be either int or double but probably not anything else.  But what the graph cannot do is deal with a combination of dynamic and static predictions.  A dynamic prediction should always take precedence over a static one.  But if for some reason no dynamic prediction can be made (for example because we have not yet seen the relevant statement(s) execute) then a static prediction is probably better than no prediction.

The DFG graph should have a mechanism for tracking where a prediction came from (static guess or dynamic profiling) and be able to merge static predictions with dynamic ones, so that a dynamic prediction always takes precedence.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460095</commentid>
    <comment_count>1</comment_count>
      <attachid>105865</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-31 17:08:53 -0700</bug_when>
    <thetext>Created attachment 105865
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460098</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-31 17:11:11 -0700</bug_when>
    <thetext>Attachment 105865 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGNode.h:479:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 1 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460102</commentid>
    <comment_count>3</comment_count>
      <attachid>105867</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-31 17:13:53 -0700</bug_when>
    <thetext>Created attachment 105867
the patch - fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460130</commentid>
    <comment_count>4</comment_count>
      <attachid>105867</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-31 18:13:17 -0700</bug_when>
    <thetext>Comment on attachment 105867
the patch - fix style

Tests pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461516</commentid>
    <comment_count>5</comment_count>
      <attachid>105867</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-02 14:15:33 -0700</bug_when>
    <thetext>Comment on attachment 105867
the patch - fix style

Clearing flags on attachment: 105867

Committed r94449: &lt;http://trac.webkit.org/changeset/94449&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461517</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-02 14:15:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105865</attachid>
            <date>2011-08-31 17:08:53 -0700</date>
            <delta_ts>2011-08-31 17:13:53 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>dynpredict_patch_1.diff</filename>
            <type>text/plain</type>
            <size>16774</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQyNTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAK
KzIwMTEtMDgtMzEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgZ3JhcGggaGFzIG5vIHdheSBvZiBkaXN0aW5ndWlzaGluZyBvciByZWNvbmNpbGluZyBiZXR3
ZWVuIHN0YXRpYworICAgICAgICBhbmQgZHluYW1pYyBwcmVkaWN0aW9ucworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjczNDMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFByZWRpY3RlZFR5cGUg
bm93IHN0b3JlcyB0aGUgc291cmNlIG9mIHRoZSBwcmVkaWN0aW9uLiAgTWVyZ2luZyBwcmVkaWN0
aW9ucywKKyAgICAgICAgd2hpY2ggd2FzIHByZXZpb3VzbHkgZG9uZSB3aXRoIGEgYml0d2lzZSBv
ciwgaXMgbm93IGRvbmUgdmlhIHRoZQorICAgICAgICBtZXJnZVByZWRpY3Rpb25zIChlcXVpdmFs
ZW50IHRvIHwpIGFuZCBtZXJnZVByZWRpY3Rpb24gKGVxdWl2YWxlbnQgdG8gfD0pCisgICAgICAg
IGZ1bmN0aW9ucywgd2hpY2ggY29ycmVjdGx5IGhhbmRsZSBjb21iaW5hdGlvbnMgb2Ygc3RhdGlj
IGFuZCBkeW5hbWljLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBwZXJmb3JtYW5jZS1uZXV0
cmFsLCBzaW5jZSBhbGwgcHJlZGljdGlvbnMgYXJlIGN1cnJlbnRseSBzdGF0aWMgYW5kCisgICAg
ICAgIHNvIHRoZSBjb2RlIGhhcyBubyB2aXNpYmxlIGVmZmVjdHMuCisKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzdGF0aWNhbGx5UHJl
ZGljdEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3RhdGljYWxs
eVByZWRpY3RJbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2spOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjpwcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cHJlZGljdEdsb2JhbFZh
cik6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjppc0FycmF5
UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6aXNJbnQzMlByZWRpY3Rpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OmlzRG91YmxlUHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
aXNEeW5hbWljUHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6bWVyZ2VQcmVkaWN0aW9u
cyk6CisgICAgICAgIChKU0M6OkRGRzo6bWVyZ2VQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6
REZHOjptYWtlUHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6cHJlZGljdCk6
CisKIDIwMTEtMDgtMzEgIEplZmYgTWlsbGVyICA8amVmZm1AYXBwbGUuY29tPgogCiAgICAgICAg
IFJFR1JFU1NJT04oOTIyMTApOiBBVkZvdW5kYXRpb24gbWVkaWEgZW5naW5lIGlzIGRpc2FibGVk
IG9uIE9TIFgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NDI0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsOSArMTAyLDkg
QEAgcHJpdmF0ZToKICAgICAgICAgLy8gTXVzdCBiZSBhIGxvY2FsLgogICAgICAgICByZXR1cm4g
Z2V0TG9jYWwoKHVuc2lnbmVkKW9wZXJhbmQpOwogICAgIH0KLSAgICB2b2lkIHNldChpbnQgb3Bl
cmFuZCwgTm9kZUluZGV4IHZhbHVlLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBQcmVkaWN0
Tm9uZSkKKyAgICB2b2lkIHNldChpbnQgb3BlcmFuZCwgTm9kZUluZGV4IHZhbHVlLCBQcmVkaWN0
ZWRUeXBlIHN0YXRpY1ByZWRpY3Rpb24gPSBQcmVkaWN0Tm9uZSkKICAgICB7Ci0gICAgICAgIG1f
Z3JhcGgucHJlZGljdChvcGVyYW5kLCBwcmVkaWN0aW9uKTsKKyAgICAgICAgbV9ncmFwaC5wcmVk
aWN0KG9wZXJhbmQsIHN0YXRpY1ByZWRpY3Rpb24sIFN0YXRpY1ByZWRpY3Rpb24pOwogCiAgICAg
ICAgIC8vIElzIHRoaXMgYW4gYXJndW1lbnQ/CiAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVu
dChvcGVyYW5kKSkgewpAQCAtNDI4LDEyICs0MjgsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0
dXJuIGNhbGw7CiAgICAgfQogCi0gICAgdm9pZCBwcmVkaWN0QXJyYXkoTm9kZUluZGV4IG5vZGVJ
bmRleCkKKyAgICB2b2lkIHN0YXRpY2FsbHlQcmVkaWN0QXJyYXkoTm9kZUluZGV4IG5vZGVJbmRl
eCkKICAgICB7Ci0gICAgICAgIG1fZ3JhcGgucHJlZGljdChtX2dyYXBoW25vZGVJbmRleF0sIFBy
ZWRpY3RBcnJheSk7CisgICAgICAgIG1fZ3JhcGgucHJlZGljdChtX2dyYXBoW25vZGVJbmRleF0s
IFByZWRpY3RBcnJheSwgU3RhdGljUHJlZGljdGlvbik7CiAgICAgfQogCi0gICAgdm9pZCBwcmVk
aWN0SW50MzIoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIHN0YXRpY2FsbHlQcmVkaWN0
SW50MzIoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3JldXNh
YmxlTm9kZVN0YWNrLmlzRW1wdHkoKSk7CiAgICAgICAgIG1fcmV1c2FibGVOb2RlU3RhY2suYXBw
ZW5kKCZtX2dyYXBoW25vZGVJbmRleF0pOwpAQCAtNDU3LDcgKzQ1Nyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgbV9yZXVzYWJsZU5vZGVTdGFjay5hcHBlbmQoJm1fZ3JhcGhbbm9kZVB0
ci0+Y2hpbGQyKCldKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5wcmVkaWN0KCpub2RlUHRyLCBQcmVkaWN0SW50
MzIpOworICAgICAgICAgICAgICAgIG1fZ3JhcGgucHJlZGljdCgqbm9kZVB0ciwgUHJlZGljdElu
dDMyLCBTdGF0aWNQcmVkaWN0aW9uKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfSB3aGlsZSAoIW1fcmV1c2FibGVOb2RlU3RhY2suaXNFbXB0eSgpKTsK
QEAgLTU4Nyw4ICs1ODcsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgIGNhc2Ugb3BfYml0YW5kOiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3Ax
ID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAg
ICAgIE5vZGVJbmRleCBvcDIgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpOwotICAgICAgICAgICAgcHJlZGljdEludDMyKG9wMSk7Ci0gICAgICAgICAgICBwcmVk
aWN0SW50MzIob3AyKTsKKyAgICAgICAgICAgIHN0YXRpY2FsbHlQcmVkaWN0SW50MzIob3AxKTsK
KyAgICAgICAgICAgIHN0YXRpY2FsbHlQcmVkaWN0SW50MzIob3AyKTsKICAgICAgICAgICAgIHNl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKEJpdEFuZCwgb3Ax
LCBvcDIpLCBQcmVkaWN0SW50MzIpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfYml0YW5k
KTsKICAgICAgICAgfQpAQCAtNTk2LDggKzU5Niw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9iaXRvcjogewogICAgICAgICAgICAg
Tm9kZUluZGV4IG9wMSA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHByZWRpY3RJbnQzMihvcDEpOwotICAg
ICAgICAgICAgcHJlZGljdEludDMyKG9wMik7CisgICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGlj
dEludDMyKG9wMSk7CisgICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGljdEludDMyKG9wMik7CiAg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFw
aChCaXRPciwgb3AxLCBvcDIpLCBQcmVkaWN0SW50MzIpOwogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfYml0b3IpOwogICAgICAgICB9CkBAIC02MDUsOCArNjA1LDggQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX2JpdHhvcjogewog
ICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0VG9JbnQzMihj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHByZWRpY3RJbnQz
MihvcDEpOwotICAgICAgICAgICAgcHJlZGljdEludDMyKG9wMik7CisgICAgICAgICAgICBzdGF0
aWNhbGx5UHJlZGljdEludDMyKG9wMSk7CisgICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGljdElu
dDMyKG9wMik7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgYWRkVG9HcmFwaChCaXRYb3IsIG9wMSwgb3AyKSwgUHJlZGljdEludDMyKTsKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2JpdHhvcik7CiAgICAgICAgIH0KQEAgLTYxNCw4ICs2MTQsOCBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ug
b3BfcnNoaWZ0OiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0VG9JbnQzMihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDIg
PSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgcHJlZGljdEludDMyKG9wMSk7Ci0gICAgICAgICAgICBwcmVkaWN0SW50MzIob3AyKTsKKyAg
ICAgICAgICAgIHN0YXRpY2FsbHlQcmVkaWN0SW50MzIob3AxKTsKKyAgICAgICAgICAgIHN0YXRp
Y2FsbHlQcmVkaWN0SW50MzIob3AyKTsKICAgICAgICAgICAgIE5vZGVJbmRleCByZXN1bHQ7CiAg
ICAgICAgICAgICAvLyBPcHRpbWl6ZSBvdXQgc2hpZnRzIGJ5IHplcm8uCiAgICAgICAgICAgICBp
ZiAoaXNJbnQzMkNvbnN0YW50KG9wMikgJiYgISh2YWx1ZU9mSW50MzJDb25zdGFudChvcDIpICYg
MHgxZikpCkBAIC02MjksOCArNjI5LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX2xzaGlmdDogewogICAgICAgICAgICAgTm9kZUlu
ZGV4IG9wMSA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAg
ICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHByZWRpY3RJbnQzMihvcDEpOwotICAgICAgICAg
ICAgcHJlZGljdEludDMyKG9wMik7CisgICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGljdEludDMy
KG9wMSk7CisgICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGljdEludDMyKG9wMik7CiAgICAgICAg
ICAgICBOb2RlSW5kZXggcmVzdWx0OwogICAgICAgICAgICAgLy8gT3B0aW1pemUgb3V0IHNoaWZ0
cyBieSB6ZXJvLgogICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChvcDIpICYmICEodmFs
dWVPZkludDMyQ29uc3RhbnQob3AyKSAmIDB4MWYpKQpAQCAtNjQ0LDggKzY0NCw4IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF91cnNo
aWZ0OiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0VG9JbnQzMihjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXRU
b0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgcHJl
ZGljdEludDMyKG9wMSk7Ci0gICAgICAgICAgICBwcmVkaWN0SW50MzIob3AyKTsKKyAgICAgICAg
ICAgIHN0YXRpY2FsbHlQcmVkaWN0SW50MzIob3AxKTsKKyAgICAgICAgICAgIHN0YXRpY2FsbHlQ
cmVkaWN0SW50MzIob3AyKTsKICAgICAgICAgICAgIE5vZGVJbmRleCByZXN1bHQ7CiAgICAgICAg
ICAgICAvLyBUaGUgcmVzdWx0IG9mIGEgemVyby1leHRlbmRpbmcgcmlnaHQgc2hpZnQgaXMgdHJl
YXRlZCBhcyBhbiB1bnNpZ25lZCB2YWx1ZS4KICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhh
dCBpZiB0aGUgdG9wIGJpdCBpcyBzZXQsIHRoZSByZXN1bHQgaXMgbm90IGluIHRoZSBpbnQzMiBy
YW5nZSwKQEAgLTY3NSw3ICs2NzUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfcHJlX2luYzogewogICAgICAgICAgICAgdW5zaWdu
ZWQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAg
IE5vZGVJbmRleCBvcCA9IGdldFRvTnVtYmVyKHNyY0RzdCk7Ci0gICAgICAgICAgICBwcmVkaWN0
SW50MzIob3ApOworICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihvcCk7CiAgICAg
ICAgICAgICBzZXQoc3JjRHN0LCBhZGRUb0dyYXBoKEFyaXRoQWRkLCBvcCwgb25lKCkpKTsKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3ByZV9pbmMpOwogICAgICAgICB9CkBAIC02ODQsNyAr
Njg0LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICAgICAgdW5zaWduZWQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
ICAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AgPSBnZXRUb051bWJlcihzcmNEc3QpOwot
ICAgICAgICAgICAgcHJlZGljdEludDMyKG9wKTsKKyAgICAgICAgICAgIHN0YXRpY2FsbHlQcmVk
aWN0SW50MzIob3ApOwogICAgICAgICAgICAgc2V0KHJlc3VsdCwgb3ApOwogICAgICAgICAgICAg
c2V0KHNyY0RzdCwgYWRkVG9HcmFwaChBcml0aEFkZCwgb3AsIG9uZSgpKSk7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9wb3N0X2luYyk7CkBAIC02OTMsNyArNjkzLDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX3ByZV9kZWM6
IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AgPSBnZXRUb051bWJlcihzcmNEc3Qp
OwotICAgICAgICAgICAgcHJlZGljdEludDMyKG9wKTsKKyAgICAgICAgICAgIHN0YXRpY2FsbHlQ
cmVkaWN0SW50MzIob3ApOwogICAgICAgICAgICAgc2V0KHNyY0RzdCwgYWRkVG9HcmFwaChBcml0
aFN1Yiwgb3AsIG9uZSgpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wcmVfZGVjKTsK
ICAgICAgICAgfQpAQCAtNzAyLDcgKzcwMiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICB1bnNpZ25lZCBzcmNEc3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgICAgICAgICAgTm9kZUluZGV4IG9wID0g
Z2V0VG9OdW1iZXIoc3JjRHN0KTsKLSAgICAgICAgICAgIHByZWRpY3RJbnQzMihvcCk7CisgICAg
ICAgICAgICBzdGF0aWNhbGx5UHJlZGljdEludDMyKG9wKTsKICAgICAgICAgICAgIHNldChyZXN1
bHQsIG9wKTsKICAgICAgICAgICAgIHNldChzcmNEc3QsIGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9w
LCBvbmUoKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcG9zdF9kZWMpOwpAQCAtNzE3
LDggKzcxNyw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgIC8vIElmIGJvdGggb3BlcmFuZHMgY2FuIHN0YXRpY2FsbHkgYmUgZGV0ZXJtaW5l
ZCB0byB0aGUgbnVtYmVycywgdGhlbiB0aGlzIGlzIGFuIGFyaXRobWV0aWMgYWRkLgogICAgICAg
ICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBtdXN0IGFzc3VtZSB0aGlzIG1heSBiZSBwZXJmb3JtaW5n
IGEgY29uY2F0ZW5hdGlvbiB0byBhIHN0cmluZy4KICAgICAgICAgICAgIGlmIChpc1NtYWxsSW50
MzJDb25zdGFudChvcDEpIHx8IGlzU21hbGxJbnQzMkNvbnN0YW50KG9wMikpIHsKLSAgICAgICAg
ICAgICAgICBwcmVkaWN0SW50MzIob3AxKTsKLSAgICAgICAgICAgICAgICBwcmVkaWN0SW50MzIo
b3AyKTsKKyAgICAgICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGljdEludDMyKG9wMSk7CisgICAg
ICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihvcDIpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKG1fZ3JhcGhbb3AxXS5oYXNOdW1lcmljUmVzdWx0KCkgJiYgbV9ncmFw
aFtvcDJdLmhhc051bWVyaWNSZXN1bHQoKSkKICAgICAgICAgICAgICAgICBzZXQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChBcml0aEFkZCwgdG9OdW1iZXIob3Ax
KSwgdG9OdW1iZXIob3AyKSkpOwpAQCAtNzMyLDggKzczMiw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXRU
b051bWJlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5v
ZGVJbmRleCBvcDIgPSBnZXRUb051bWJlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KTsKICAgICAgICAgICAgIGlmIChpc1NtYWxsSW50MzJDb25zdGFudChvcDEpIHx8IGlzU21hbGxJ
bnQzMkNvbnN0YW50KG9wMikpIHsKLSAgICAgICAgICAgICAgICBwcmVkaWN0SW50MzIob3AxKTsK
LSAgICAgICAgICAgICAgICBwcmVkaWN0SW50MzIob3AyKTsKKyAgICAgICAgICAgICAgICBzdGF0
aWNhbGx5UHJlZGljdEludDMyKG9wMSk7CisgICAgICAgICAgICAgICAgc3RhdGljYWxseVByZWRp
Y3RJbnQzMihvcDIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9wMSwgb3AyKSk7CiAg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9zdWIpOwpAQCAtODc4LDggKzg3OCw4IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9nZXRf
YnlfdmFsOiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHByZWRpY3RB
cnJheShiYXNlKTsKLSAgICAgICAgICAgIHByZWRpY3RJbnQzMihwcm9wZXJ0eSk7CisgICAgICAg
ICAgICBzdGF0aWNhbGx5UHJlZGljdEFycmF5KGJhc2UpOworICAgICAgICAgICAgc3RhdGljYWxs
eVByZWRpY3RJbnQzMihwcm9wZXJ0eSk7CiAKICAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCeVZh
bCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbygwKSwgT3BJbmZvKFByZWRpY3ROb25lKSwg
YmFzZSwgcHJvcGVydHksIGFsaWFzZXMubG9va3VwR2V0QnlWYWwoYmFzZSwgcHJvcGVydHkpKTsK
ICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRCeVZh
bCk7CkBAIC04OTIsOCArODkyLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHkgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXgg
dmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBwcmVkaWN0QXJyYXkoYmFzZSk7Ci0gICAgICAgICAgICBwcmVkaWN0SW50MzIocHJvcGVydHkp
OworICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RBcnJheShiYXNlKTsKKyAgICAgICAgICAg
IHN0YXRpY2FsbHlQcmVkaWN0SW50MzIocHJvcGVydHkpOwogCiAgICAgICAgICAgICBOb2RlSW5k
ZXggYWxpYXNlZEdldCA9IGFsaWFzZXMubG9va3VwR2V0QnlWYWwoYmFzZSwgcHJvcGVydHkpOwog
ICAgICAgICAgICAgTm9kZUluZGV4IHB1dEJ5VmFsID0gYWRkVG9HcmFwaChhbGlhc2VkR2V0ICE9
IE5vTm9kZSA/IFB1dEJ5VmFsQWxpYXMgOiBQdXRCeVZhbCwgYmFzZSwgcHJvcGVydHksIHZhbHVl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDk0MjQx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzUsMzUgKzEzNSw0MSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAqbV9ibG9ja3Nb
YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlQmVnaW4pXTsKICAgICB9CiAKLSAg
ICB2b2lkIHByZWRpY3QoaW50IG9wZXJhbmQsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKKyAg
ICB2b2lkIHByZWRpY3QoaW50IG9wZXJhbmQsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJl
ZGljdGlvblNvdXJjZSBzb3VyY2UpCiAgICAgewogICAgICAgICBpZiAob3BlcmFuZElzQXJndW1l
bnQob3BlcmFuZCkpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZCAr
IG1fYXJndW1lbnRQcmVkaWN0aW9ucy5zaXplKCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhl
YWRlclNpemU7Ci0gICAgICAgICAgICBtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJndW1lbnRdLm1f
dmFsdWUgfD0gcHJlZGljdGlvbjsKKyAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihtX2FyZ3Vt
ZW50UHJlZGljdGlvbnNbYXJndW1lbnRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rp
b24sIHNvdXJjZSkpOwogICAgICAgICB9IGVsc2UgaWYgKCh1bnNpZ25lZClvcGVyYW5kIDwgbV92
YXJpYWJsZVByZWRpY3Rpb25zLnNpemUoKSkKLSAgICAgICAgICAgIG1fdmFyaWFibGVQcmVkaWN0
aW9uc1tvcGVyYW5kXS5tX3ZhbHVlIHw9IHByZWRpY3Rpb247CisgICAgICAgICAgICBtZXJnZVBy
ZWRpY3Rpb24obV92YXJpYWJsZVByZWRpY3Rpb25zW29wZXJhbmRdLm1fdmFsdWUsIG1ha2VQcmVk
aWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHByZWRp
Y3RHbG9iYWxWYXIodW5zaWduZWQgdmFyTnVtYmVyLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24p
CisgICAgdm9pZCBwcmVkaWN0R2xvYmFsVmFyKHVuc2lnbmVkIHZhck51bWJlciwgUHJlZGljdGVk
VHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKICAgICB7CiAgICAgICAg
IEhhc2hNYXA8dW5zaWduZWQsIFByZWRpY3Rpb25TbG90Pjo6aXRlcmF0b3IgaXRlciA9IG1fZ2xv
YmFsVmFyUHJlZGljdGlvbnMuZmluZCh2YXJOdW1iZXIgKyAxKTsKICAgICAgICAgaWYgKGl0ZXIg
PT0gbV9nbG9iYWxWYXJQcmVkaWN0aW9ucy5lbmQoKSkgewogICAgICAgICAgICAgUHJlZGljdGlv
blNsb3QgcHJlZGljdGlvblNsb3Q7Ci0gICAgICAgICAgICBwcmVkaWN0aW9uU2xvdC5tX3ZhbHVl
IHw9IHByZWRpY3Rpb247CisgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvblNs
b3QubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7CiAgICAgICAg
ICAgICBtX2dsb2JhbFZhclByZWRpY3Rpb25zLmFkZCh2YXJOdW1iZXIgKyAxLCBwcmVkaWN0aW9u
U2xvdCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaXRlci0+c2Vjb25kLm1fdmFsdWUg
fD0gcHJlZGljdGlvbjsKKyAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihpdGVyLT5zZWNvbmQu
bV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgcHJlZGljdChOb2RlJiBub2RlLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24p
CisgICAgdm9pZCBwcmVkaWN0KE5vZGUmIG5vZGUsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwg
UHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUub3Ap
IHsKICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgIHByZWRpY3Qobm9kZS5sb2Nh
bCgpLCBwcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIHByZWRpY3Qobm9kZS5sb2NhbCgpLCBwcmVk
aWN0aW9uLCBzb3VyY2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR2V0R2xv
YmFsVmFyOgotICAgICAgICAgICAgcHJlZGljdEdsb2JhbFZhcihub2RlLnZhck51bWJlcigpLCBw
cmVkaWN0aW9uKTsKKyAgICAgICAgICAgIHByZWRpY3RHbG9iYWxWYXIobm9kZS52YXJOdW1iZXIo
KSwgcHJlZGljdGlvbiwgc291cmNlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEdldEJ5SWQ6CisgICAgICAgIGNhc2UgR2V0TWV0aG9kOgorICAgICAgICBjYXNlIEdldEJ5VmFs
OgorICAgICAgICBjYXNlIENhbGw6CisgICAgICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAgICAg
ICAgbm9kZS5wcmVkaWN0KHByZWRpY3Rpb24sIHNvdXJjZSk7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHJldmlzaW9uIDk0MjQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw2ICsxOTUsMTAgQEAgc3RhdGljIGNvbnN0
IFByZWRpY3RlZFR5cGUgUHJlZGljdEFycmF5IAogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUg
UHJlZGljdEludDMyICA9IDB4MDQ7CiBzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0
RG91YmxlID0gMHgwODsKIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3ROdW1iZXIg
PSAweDBjOworc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgRHluYW1pY1ByZWRpY3Rpb25UYWcg
PSAweDgwOworc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdGlvblRhZ01hc2sgICAg
PSAweDgwOworCitlbnVtIFByZWRpY3Rpb25Tb3VyY2UgeyBTdGF0aWNQcmVkaWN0aW9uLCBEeW5h
bWljUHJlZGljdGlvbiB9OwogCiBpbmxpbmUgYm9vbCBpc0NlbGxQcmVkaWN0aW9uKFByZWRpY3Rl
ZFR5cGUgdmFsdWUpCiB7CkBAIC0yMDMsMTcgKzIwNywxNyBAQCBpbmxpbmUgYm9vbCBpc0NlbGxQ
cmVkaWN0aW9uKFByZWRpY3RlZFR5CiAKIGlubGluZSBib29sIGlzQXJyYXlQcmVkaWN0aW9uKFBy
ZWRpY3RlZFR5cGUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHZhbHVlID09IFByZWRpY3RBcnJheTsK
KyAgICByZXR1cm4gKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSA9PSBQcmVkaWN0QXJyYXk7
CiB9CiAKIGlubGluZSBib29sIGlzSW50MzJQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUp
CiB7Ci0gICAgcmV0dXJuIHZhbHVlID09IFByZWRpY3RJbnQzMjsKKyAgICByZXR1cm4gKHZhbHVl
ICYgflByZWRpY3Rpb25UYWdNYXNrKSA9PSBQcmVkaWN0SW50MzI7CiB9CiAKIGlubGluZSBib29s
IGlzRG91YmxlUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQogewotICAgIHJldHVybiB2
YWx1ZSA9PSBQcmVkaWN0RG91YmxlOworICAgIHJldHVybiAodmFsdWUgJiB+UHJlZGljdGlvblRh
Z01hc2spID09IFByZWRpY3REb3VibGU7CiB9CiAKIGlubGluZSBib29sIGlzTnVtYmVyUHJlZGlj
dGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQpAQCAtMjIxLDYgKzIyNSw0MCBAQCBpbmxpbmUgYm9v
bCBpc051bWJlclByZWRpY3Rpb24oUHJlZGljdGVkCiAgICAgcmV0dXJuICEhKHZhbHVlICYgUHJl
ZGljdE51bWJlcikgJiYgISh2YWx1ZSAmIH5QcmVkaWN0TnVtYmVyKTsKIH0KIAoraW5saW5lIGJv
b2wgaXNEeW5hbWljUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQoreworICAgIEFTU0VS
VCh2YWx1ZSAhPSAoUHJlZGljdE5vbmUgfCBEeW5hbWljUHJlZGljdGlvblRhZykpOworICAgIHJl
dHVybiAhISh2YWx1ZSAmIER5bmFtaWNQcmVkaWN0aW9uVGFnKTsKK30KKworaW5saW5lIFByZWRp
Y3RlZFR5cGUgbWVyZ2VQcmVkaWN0aW9ucyhQcmVkaWN0ZWRUeXBlIGxlZnQsIFByZWRpY3RlZFR5
cGUgcmlnaHQpCit7CisgICAgaWYgKGlzRHluYW1pY1ByZWRpY3Rpb24obGVmdCkgPT0gaXNEeW5h
bWljUHJlZGljdGlvbihyaWdodCkpCisgICAgICAgIHJldHVybiBsZWZ0IHwgcmlnaHQ7CisgICAg
aWYgKGlzRHluYW1pY1ByZWRpY3Rpb24obGVmdCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0R5bmFt
aWNQcmVkaWN0aW9uKHJpZ2h0KSk7CisgICAgICAgIHJldHVybiBsZWZ0OworICAgIH0KKyAgICBB
U1NFUlQoIWlzRHluYW1pY1ByZWRpY3Rpb24obGVmdCkpOworICAgIEFTU0VSVChpc0R5bmFtaWNQ
cmVkaWN0aW9uKHJpZ2h0KSk7CisgICAgcmV0dXJuIHJpZ2h0OworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgoraW5saW5lIHZvaWQgbWVyZ2VQcmVkaWN0aW9uKFQmIGxlZnQsIFByZWRpY3RlZFR5
cGUgcmlnaHQpCit7CisgICAgbGVmdCA9IHN0YXRpY19jYXN0PFQ+KG1lcmdlUHJlZGljdGlvbnMo
c3RhdGljX2Nhc3Q8UHJlZGljdGVkVHlwZT4obGVmdCksIHJpZ2h0KSk7Cit9CisKK2lubGluZSBQ
cmVkaWN0ZWRUeXBlIG1ha2VQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdHlwZSwgUHJlZGljdGlv
blNvdXJjZSBzb3VyY2UpCit7CisgICAgQVNTRVJUKCEodHlwZSAmIER5bmFtaWNQcmVkaWN0aW9u
VGFnKSk7CisgICAgQVNTRVJUKHNvdXJjZSA9PSBEeW5hbWljUHJlZGljdGlvbiB8fCBzb3VyY2Ug
PT0gU3RhdGljUHJlZGljdGlvbik7CisgICAgaWYgKHR5cGUgPT0gUHJlZGljdE5vbmUpCisgICAg
ICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKKyAgICByZXR1cm4gdHlwZSB8IChzb3VyY2UgPT0gRHlu
YW1pY1ByZWRpY3Rpb24gPyBEeW5hbWljUHJlZGljdGlvblRhZyA6IDApOworfQorCiAjaWZuZGVm
IE5ERUJVRwogaW5saW5lIGNvbnN0IGNoYXIqIHByZWRpY3Rpb25Ub1N0cmluZyhQcmVkaWN0ZWRU
eXBlIHZhbHVlKQogewpAQCAtNDMyLDEwICs0NzAsMjIgQEAgc3RydWN0IE5vZGUgewogICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8UHJlZGljdGVkVHlwZT4obV9vcEluZm8yKTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBwcmVkaWN0KFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKKyAgICB2b2lk
IHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJj
ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNQcmVkaWN0aW9uKCkpOwotICAgICAgICBtX29w
SW5mbzIgfD0gcHJlZGljdGlvbjsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGhhdmUgcHJldmlv
dXNseSBmb3VuZCBlbXBpcmljYWxseSB0aGF0IGFzY3JpYmluZyBzdGF0aWMgcHJlZGljdGlvbnMK
KyAgICAgICAgLy8gdG8gaGVhcCBsb2FkcyBhcyB3ZWxsIGFzIGNhbGxzIGlzIG5vdCBwcm9maXRh
YmxlLCBhcyB0aGVzZSBwcmVkaWN0aW9ucworICAgICAgICAvLyBhcmUgd3JvbmcgdG9vIG9mdGVu
LiAgSGVuY2UsIHRoaXMgY29tcGxldGVseSBpZ25vcmVzIHN0YXRpYyBwcmVkaWN0aW9ucy4KKyAg
ICAgICAgaWYgKHNvdXJjZSA9PSBTdGF0aWNQcmVkaWN0aW9uKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICAgICAgaWYgKHByZWRpY3Rpb24gPT0gUHJlZGljdE5vbmUpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBBU1NFUlQoc291cmNlID09IER5bmFt
aWNQcmVkaWN0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3BJbmZvMiB8PSBEeW5hbWljUHJl
ZGljdGlvblRhZyB8IHByZWRpY3Rpb247CiAgICAgfQogCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlcigpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105867</attachid>
            <date>2011-08-31 17:13:53 -0700</date>
            <delta_ts>2011-09-02 14:15:33 -0700</delta_ts>
            <desc>the patch - fix style</desc>
            <filename>dynpredict_patch_1.diff</filename>
            <type>text/plain</type>
            <size>16773</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQyNTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAK
KzIwMTEtMDgtMzEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgZ3JhcGggaGFzIG5vIHdheSBvZiBkaXN0aW5ndWlzaGluZyBvciByZWNvbmNpbGluZyBiZXR3
ZWVuIHN0YXRpYworICAgICAgICBhbmQgZHluYW1pYyBwcmVkaWN0aW9ucworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjczNDMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFByZWRpY3RlZFR5cGUg
bm93IHN0b3JlcyB0aGUgc291cmNlIG9mIHRoZSBwcmVkaWN0aW9uLiAgTWVyZ2luZyBwcmVkaWN0
aW9ucywKKyAgICAgICAgd2hpY2ggd2FzIHByZXZpb3VzbHkgZG9uZSB3aXRoIGEgYml0d2lzZSBv
ciwgaXMgbm93IGRvbmUgdmlhIHRoZQorICAgICAgICBtZXJnZVByZWRpY3Rpb25zIChlcXVpdmFs
ZW50IHRvIHwpIGFuZCBtZXJnZVByZWRpY3Rpb24gKGVxdWl2YWxlbnQgdG8gfD0pCisgICAgICAg
IGZ1bmN0aW9ucywgd2hpY2ggY29ycmVjdGx5IGhhbmRsZSBjb21iaW5hdGlvbnMgb2Ygc3RhdGlj
IGFuZCBkeW5hbWljLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBwZXJmb3JtYW5jZS1uZXV0
cmFsLCBzaW5jZSBhbGwgcHJlZGljdGlvbnMgYXJlIGN1cnJlbnRseSBzdGF0aWMgYW5kCisgICAg
ICAgIHNvIHRoZSBjb2RlIGhhcyBubyB2aXNpYmxlIGVmZmVjdHMuCisKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzdGF0aWNhbGx5UHJl
ZGljdEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3RhdGljYWxs
eVByZWRpY3RJbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2spOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjpwcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cHJlZGljdEdsb2JhbFZh
cik6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjppc0FycmF5
UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6aXNJbnQzMlByZWRpY3Rpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OmlzRG91YmxlUHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
aXNEeW5hbWljUHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6bWVyZ2VQcmVkaWN0aW9u
cyk6CisgICAgICAgIChKU0M6OkRGRzo6bWVyZ2VQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6
REZHOjptYWtlUHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6cHJlZGljdCk6
CisKIDIwMTEtMDgtMzEgIEplZmYgTWlsbGVyICA8amVmZm1AYXBwbGUuY29tPgogCiAgICAgICAg
IFJFR1JFU1NJT04oOTIyMTApOiBBVkZvdW5kYXRpb24gbWVkaWEgZW5naW5lIGlzIGRpc2FibGVk
IG9uIE9TIFgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NDI0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsOSArMTAyLDkg
QEAgcHJpdmF0ZToKICAgICAgICAgLy8gTXVzdCBiZSBhIGxvY2FsLgogICAgICAgICByZXR1cm4g
Z2V0TG9jYWwoKHVuc2lnbmVkKW9wZXJhbmQpOwogICAgIH0KLSAgICB2b2lkIHNldChpbnQgb3Bl
cmFuZCwgTm9kZUluZGV4IHZhbHVlLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBQcmVkaWN0
Tm9uZSkKKyAgICB2b2lkIHNldChpbnQgb3BlcmFuZCwgTm9kZUluZGV4IHZhbHVlLCBQcmVkaWN0
ZWRUeXBlIHN0YXRpY1ByZWRpY3Rpb24gPSBQcmVkaWN0Tm9uZSkKICAgICB7Ci0gICAgICAgIG1f
Z3JhcGgucHJlZGljdChvcGVyYW5kLCBwcmVkaWN0aW9uKTsKKyAgICAgICAgbV9ncmFwaC5wcmVk
aWN0KG9wZXJhbmQsIHN0YXRpY1ByZWRpY3Rpb24sIFN0YXRpY1ByZWRpY3Rpb24pOwogCiAgICAg
ICAgIC8vIElzIHRoaXMgYW4gYXJndW1lbnQ/CiAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVu
dChvcGVyYW5kKSkgewpAQCAtNDI4LDEyICs0MjgsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0
dXJuIGNhbGw7CiAgICAgfQogCi0gICAgdm9pZCBwcmVkaWN0QXJyYXkoTm9kZUluZGV4IG5vZGVJ
bmRleCkKKyAgICB2b2lkIHN0YXRpY2FsbHlQcmVkaWN0QXJyYXkoTm9kZUluZGV4IG5vZGVJbmRl
eCkKICAgICB7Ci0gICAgICAgIG1fZ3JhcGgucHJlZGljdChtX2dyYXBoW25vZGVJbmRleF0sIFBy
ZWRpY3RBcnJheSk7CisgICAgICAgIG1fZ3JhcGgucHJlZGljdChtX2dyYXBoW25vZGVJbmRleF0s
IFByZWRpY3RBcnJheSwgU3RhdGljUHJlZGljdGlvbik7CiAgICAgfQogCi0gICAgdm9pZCBwcmVk
aWN0SW50MzIoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIHN0YXRpY2FsbHlQcmVkaWN0
SW50MzIoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3JldXNh
YmxlTm9kZVN0YWNrLmlzRW1wdHkoKSk7CiAgICAgICAgIG1fcmV1c2FibGVOb2RlU3RhY2suYXBw
ZW5kKCZtX2dyYXBoW25vZGVJbmRleF0pOwpAQCAtNDU3LDcgKzQ1Nyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgbV9yZXVzYWJsZU5vZGVTdGFjay5hcHBlbmQoJm1fZ3JhcGhbbm9kZVB0
ci0+Y2hpbGQyKCldKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5wcmVkaWN0KCpub2RlUHRyLCBQcmVkaWN0SW50
MzIpOworICAgICAgICAgICAgICAgIG1fZ3JhcGgucHJlZGljdCgqbm9kZVB0ciwgUHJlZGljdElu
dDMyLCBTdGF0aWNQcmVkaWN0aW9uKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfSB3aGlsZSAoIW1fcmV1c2FibGVOb2RlU3RhY2suaXNFbXB0eSgpKTsK
QEAgLTU4Nyw4ICs1ODcsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgIGNhc2Ugb3BfYml0YW5kOiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3Ax
ID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAg
ICAgIE5vZGVJbmRleCBvcDIgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpOwotICAgICAgICAgICAgcHJlZGljdEludDMyKG9wMSk7Ci0gICAgICAgICAgICBwcmVk
aWN0SW50MzIob3AyKTsKKyAgICAgICAgICAgIHN0YXRpY2FsbHlQcmVkaWN0SW50MzIob3AxKTsK
KyAgICAgICAgICAgIHN0YXRpY2FsbHlQcmVkaWN0SW50MzIob3AyKTsKICAgICAgICAgICAgIHNl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKEJpdEFuZCwgb3Ax
LCBvcDIpLCBQcmVkaWN0SW50MzIpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfYml0YW5k
KTsKICAgICAgICAgfQpAQCAtNTk2LDggKzU5Niw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9iaXRvcjogewogICAgICAgICAgICAg
Tm9kZUluZGV4IG9wMSA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHByZWRpY3RJbnQzMihvcDEpOwotICAg
ICAgICAgICAgcHJlZGljdEludDMyKG9wMik7CisgICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGlj
dEludDMyKG9wMSk7CisgICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGljdEludDMyKG9wMik7CiAg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFw
aChCaXRPciwgb3AxLCBvcDIpLCBQcmVkaWN0SW50MzIpOwogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfYml0b3IpOwogICAgICAgICB9CkBAIC02MDUsOCArNjA1LDggQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX2JpdHhvcjogewog
ICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0VG9JbnQzMihj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHByZWRpY3RJbnQz
MihvcDEpOwotICAgICAgICAgICAgcHJlZGljdEludDMyKG9wMik7CisgICAgICAgICAgICBzdGF0
aWNhbGx5UHJlZGljdEludDMyKG9wMSk7CisgICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGljdElu
dDMyKG9wMik7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgYWRkVG9HcmFwaChCaXRYb3IsIG9wMSwgb3AyKSwgUHJlZGljdEludDMyKTsKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2JpdHhvcik7CiAgICAgICAgIH0KQEAgLTYxNCw4ICs2MTQsOCBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ug
b3BfcnNoaWZ0OiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0VG9JbnQzMihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDIg
PSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgcHJlZGljdEludDMyKG9wMSk7Ci0gICAgICAgICAgICBwcmVkaWN0SW50MzIob3AyKTsKKyAg
ICAgICAgICAgIHN0YXRpY2FsbHlQcmVkaWN0SW50MzIob3AxKTsKKyAgICAgICAgICAgIHN0YXRp
Y2FsbHlQcmVkaWN0SW50MzIob3AyKTsKICAgICAgICAgICAgIE5vZGVJbmRleCByZXN1bHQ7CiAg
ICAgICAgICAgICAvLyBPcHRpbWl6ZSBvdXQgc2hpZnRzIGJ5IHplcm8uCiAgICAgICAgICAgICBp
ZiAoaXNJbnQzMkNvbnN0YW50KG9wMikgJiYgISh2YWx1ZU9mSW50MzJDb25zdGFudChvcDIpICYg
MHgxZikpCkBAIC02MjksOCArNjI5LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX2xzaGlmdDogewogICAgICAgICAgICAgTm9kZUlu
ZGV4IG9wMSA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAg
ICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHByZWRpY3RJbnQzMihvcDEpOwotICAgICAgICAg
ICAgcHJlZGljdEludDMyKG9wMik7CisgICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGljdEludDMy
KG9wMSk7CisgICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGljdEludDMyKG9wMik7CiAgICAgICAg
ICAgICBOb2RlSW5kZXggcmVzdWx0OwogICAgICAgICAgICAgLy8gT3B0aW1pemUgb3V0IHNoaWZ0
cyBieSB6ZXJvLgogICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChvcDIpICYmICEodmFs
dWVPZkludDMyQ29uc3RhbnQob3AyKSAmIDB4MWYpKQpAQCAtNjQ0LDggKzY0NCw4IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF91cnNo
aWZ0OiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0VG9JbnQzMihjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXRU
b0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgcHJl
ZGljdEludDMyKG9wMSk7Ci0gICAgICAgICAgICBwcmVkaWN0SW50MzIob3AyKTsKKyAgICAgICAg
ICAgIHN0YXRpY2FsbHlQcmVkaWN0SW50MzIob3AxKTsKKyAgICAgICAgICAgIHN0YXRpY2FsbHlQ
cmVkaWN0SW50MzIob3AyKTsKICAgICAgICAgICAgIE5vZGVJbmRleCByZXN1bHQ7CiAgICAgICAg
ICAgICAvLyBUaGUgcmVzdWx0IG9mIGEgemVyby1leHRlbmRpbmcgcmlnaHQgc2hpZnQgaXMgdHJl
YXRlZCBhcyBhbiB1bnNpZ25lZCB2YWx1ZS4KICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhh
dCBpZiB0aGUgdG9wIGJpdCBpcyBzZXQsIHRoZSByZXN1bHQgaXMgbm90IGluIHRoZSBpbnQzMiBy
YW5nZSwKQEAgLTY3NSw3ICs2NzUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfcHJlX2luYzogewogICAgICAgICAgICAgdW5zaWdu
ZWQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAg
IE5vZGVJbmRleCBvcCA9IGdldFRvTnVtYmVyKHNyY0RzdCk7Ci0gICAgICAgICAgICBwcmVkaWN0
SW50MzIob3ApOworICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihvcCk7CiAgICAg
ICAgICAgICBzZXQoc3JjRHN0LCBhZGRUb0dyYXBoKEFyaXRoQWRkLCBvcCwgb25lKCkpKTsKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3ByZV9pbmMpOwogICAgICAgICB9CkBAIC02ODQsNyAr
Njg0LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICAgICAgdW5zaWduZWQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
ICAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AgPSBnZXRUb051bWJlcihzcmNEc3QpOwot
ICAgICAgICAgICAgcHJlZGljdEludDMyKG9wKTsKKyAgICAgICAgICAgIHN0YXRpY2FsbHlQcmVk
aWN0SW50MzIob3ApOwogICAgICAgICAgICAgc2V0KHJlc3VsdCwgb3ApOwogICAgICAgICAgICAg
c2V0KHNyY0RzdCwgYWRkVG9HcmFwaChBcml0aEFkZCwgb3AsIG9uZSgpKSk7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9wb3N0X2luYyk7CkBAIC02OTMsNyArNjkzLDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX3ByZV9kZWM6
IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AgPSBnZXRUb051bWJlcihzcmNEc3Qp
OwotICAgICAgICAgICAgcHJlZGljdEludDMyKG9wKTsKKyAgICAgICAgICAgIHN0YXRpY2FsbHlQ
cmVkaWN0SW50MzIob3ApOwogICAgICAgICAgICAgc2V0KHNyY0RzdCwgYWRkVG9HcmFwaChBcml0
aFN1Yiwgb3AsIG9uZSgpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wcmVfZGVjKTsK
ICAgICAgICAgfQpAQCAtNzAyLDcgKzcwMiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICB1bnNpZ25lZCBzcmNEc3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgICAgICAgICAgTm9kZUluZGV4IG9wID0g
Z2V0VG9OdW1iZXIoc3JjRHN0KTsKLSAgICAgICAgICAgIHByZWRpY3RJbnQzMihvcCk7CisgICAg
ICAgICAgICBzdGF0aWNhbGx5UHJlZGljdEludDMyKG9wKTsKICAgICAgICAgICAgIHNldChyZXN1
bHQsIG9wKTsKICAgICAgICAgICAgIHNldChzcmNEc3QsIGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9w
LCBvbmUoKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcG9zdF9kZWMpOwpAQCAtNzE3
LDggKzcxNyw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgIC8vIElmIGJvdGggb3BlcmFuZHMgY2FuIHN0YXRpY2FsbHkgYmUgZGV0ZXJtaW5l
ZCB0byB0aGUgbnVtYmVycywgdGhlbiB0aGlzIGlzIGFuIGFyaXRobWV0aWMgYWRkLgogICAgICAg
ICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBtdXN0IGFzc3VtZSB0aGlzIG1heSBiZSBwZXJmb3JtaW5n
IGEgY29uY2F0ZW5hdGlvbiB0byBhIHN0cmluZy4KICAgICAgICAgICAgIGlmIChpc1NtYWxsSW50
MzJDb25zdGFudChvcDEpIHx8IGlzU21hbGxJbnQzMkNvbnN0YW50KG9wMikpIHsKLSAgICAgICAg
ICAgICAgICBwcmVkaWN0SW50MzIob3AxKTsKLSAgICAgICAgICAgICAgICBwcmVkaWN0SW50MzIo
b3AyKTsKKyAgICAgICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGljdEludDMyKG9wMSk7CisgICAg
ICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihvcDIpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKG1fZ3JhcGhbb3AxXS5oYXNOdW1lcmljUmVzdWx0KCkgJiYgbV9ncmFw
aFtvcDJdLmhhc051bWVyaWNSZXN1bHQoKSkKICAgICAgICAgICAgICAgICBzZXQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChBcml0aEFkZCwgdG9OdW1iZXIob3Ax
KSwgdG9OdW1iZXIob3AyKSkpOwpAQCAtNzMyLDggKzczMiw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXRU
b051bWJlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5v
ZGVJbmRleCBvcDIgPSBnZXRUb051bWJlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KTsKICAgICAgICAgICAgIGlmIChpc1NtYWxsSW50MzJDb25zdGFudChvcDEpIHx8IGlzU21hbGxJ
bnQzMkNvbnN0YW50KG9wMikpIHsKLSAgICAgICAgICAgICAgICBwcmVkaWN0SW50MzIob3AxKTsK
LSAgICAgICAgICAgICAgICBwcmVkaWN0SW50MzIob3AyKTsKKyAgICAgICAgICAgICAgICBzdGF0
aWNhbGx5UHJlZGljdEludDMyKG9wMSk7CisgICAgICAgICAgICAgICAgc3RhdGljYWxseVByZWRp
Y3RJbnQzMihvcDIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9wMSwgb3AyKSk7CiAg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9zdWIpOwpAQCAtODc4LDggKzg3OCw4IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9nZXRf
YnlfdmFsOiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHByZWRpY3RB
cnJheShiYXNlKTsKLSAgICAgICAgICAgIHByZWRpY3RJbnQzMihwcm9wZXJ0eSk7CisgICAgICAg
ICAgICBzdGF0aWNhbGx5UHJlZGljdEFycmF5KGJhc2UpOworICAgICAgICAgICAgc3RhdGljYWxs
eVByZWRpY3RJbnQzMihwcm9wZXJ0eSk7CiAKICAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCeVZh
bCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbygwKSwgT3BJbmZvKFByZWRpY3ROb25lKSwg
YmFzZSwgcHJvcGVydHksIGFsaWFzZXMubG9va3VwR2V0QnlWYWwoYmFzZSwgcHJvcGVydHkpKTsK
ICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRCeVZh
bCk7CkBAIC04OTIsOCArODkyLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHkgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXgg
dmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBwcmVkaWN0QXJyYXkoYmFzZSk7Ci0gICAgICAgICAgICBwcmVkaWN0SW50MzIocHJvcGVydHkp
OworICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RBcnJheShiYXNlKTsKKyAgICAgICAgICAg
IHN0YXRpY2FsbHlQcmVkaWN0SW50MzIocHJvcGVydHkpOwogCiAgICAgICAgICAgICBOb2RlSW5k
ZXggYWxpYXNlZEdldCA9IGFsaWFzZXMubG9va3VwR2V0QnlWYWwoYmFzZSwgcHJvcGVydHkpOwog
ICAgICAgICAgICAgTm9kZUluZGV4IHB1dEJ5VmFsID0gYWRkVG9HcmFwaChhbGlhc2VkR2V0ICE9
IE5vTm9kZSA/IFB1dEJ5VmFsQWxpYXMgOiBQdXRCeVZhbCwgYmFzZSwgcHJvcGVydHksIHZhbHVl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDk0MjQx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzUsMzUgKzEzNSw0MSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAqbV9ibG9ja3Nb
YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlQmVnaW4pXTsKICAgICB9CiAKLSAg
ICB2b2lkIHByZWRpY3QoaW50IG9wZXJhbmQsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKKyAg
ICB2b2lkIHByZWRpY3QoaW50IG9wZXJhbmQsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJl
ZGljdGlvblNvdXJjZSBzb3VyY2UpCiAgICAgewogICAgICAgICBpZiAob3BlcmFuZElzQXJndW1l
bnQob3BlcmFuZCkpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZCAr
IG1fYXJndW1lbnRQcmVkaWN0aW9ucy5zaXplKCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhl
YWRlclNpemU7Ci0gICAgICAgICAgICBtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJndW1lbnRdLm1f
dmFsdWUgfD0gcHJlZGljdGlvbjsKKyAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihtX2FyZ3Vt
ZW50UHJlZGljdGlvbnNbYXJndW1lbnRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rp
b24sIHNvdXJjZSkpOwogICAgICAgICB9IGVsc2UgaWYgKCh1bnNpZ25lZClvcGVyYW5kIDwgbV92
YXJpYWJsZVByZWRpY3Rpb25zLnNpemUoKSkKLSAgICAgICAgICAgIG1fdmFyaWFibGVQcmVkaWN0
aW9uc1tvcGVyYW5kXS5tX3ZhbHVlIHw9IHByZWRpY3Rpb247CisgICAgICAgICAgICBtZXJnZVBy
ZWRpY3Rpb24obV92YXJpYWJsZVByZWRpY3Rpb25zW29wZXJhbmRdLm1fdmFsdWUsIG1ha2VQcmVk
aWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHByZWRp
Y3RHbG9iYWxWYXIodW5zaWduZWQgdmFyTnVtYmVyLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24p
CisgICAgdm9pZCBwcmVkaWN0R2xvYmFsVmFyKHVuc2lnbmVkIHZhck51bWJlciwgUHJlZGljdGVk
VHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKICAgICB7CiAgICAgICAg
IEhhc2hNYXA8dW5zaWduZWQsIFByZWRpY3Rpb25TbG90Pjo6aXRlcmF0b3IgaXRlciA9IG1fZ2xv
YmFsVmFyUHJlZGljdGlvbnMuZmluZCh2YXJOdW1iZXIgKyAxKTsKICAgICAgICAgaWYgKGl0ZXIg
PT0gbV9nbG9iYWxWYXJQcmVkaWN0aW9ucy5lbmQoKSkgewogICAgICAgICAgICAgUHJlZGljdGlv
blNsb3QgcHJlZGljdGlvblNsb3Q7Ci0gICAgICAgICAgICBwcmVkaWN0aW9uU2xvdC5tX3ZhbHVl
IHw9IHByZWRpY3Rpb247CisgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvblNs
b3QubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7CiAgICAgICAg
ICAgICBtX2dsb2JhbFZhclByZWRpY3Rpb25zLmFkZCh2YXJOdW1iZXIgKyAxLCBwcmVkaWN0aW9u
U2xvdCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaXRlci0+c2Vjb25kLm1fdmFsdWUg
fD0gcHJlZGljdGlvbjsKKyAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihpdGVyLT5zZWNvbmQu
bV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgcHJlZGljdChOb2RlJiBub2RlLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24p
CisgICAgdm9pZCBwcmVkaWN0KE5vZGUmIG5vZGUsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwg
UHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUub3Ap
IHsKICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgIHByZWRpY3Qobm9kZS5sb2Nh
bCgpLCBwcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIHByZWRpY3Qobm9kZS5sb2NhbCgpLCBwcmVk
aWN0aW9uLCBzb3VyY2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR2V0R2xv
YmFsVmFyOgotICAgICAgICAgICAgcHJlZGljdEdsb2JhbFZhcihub2RlLnZhck51bWJlcigpLCBw
cmVkaWN0aW9uKTsKKyAgICAgICAgICAgIHByZWRpY3RHbG9iYWxWYXIobm9kZS52YXJOdW1iZXIo
KSwgcHJlZGljdGlvbiwgc291cmNlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEdldEJ5SWQ6CisgICAgICAgIGNhc2UgR2V0TWV0aG9kOgorICAgICAgICBjYXNlIEdldEJ5VmFs
OgorICAgICAgICBjYXNlIENhbGw6CisgICAgICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAgICAg
ICAgbm9kZS5wcmVkaWN0KHByZWRpY3Rpb24sIHNvdXJjZSk7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHJldmlzaW9uIDk0MjQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw2ICsxOTUsMTAgQEAgc3RhdGljIGNvbnN0
IFByZWRpY3RlZFR5cGUgUHJlZGljdEFycmF5IAogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUg
UHJlZGljdEludDMyICA9IDB4MDQ7CiBzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0
RG91YmxlID0gMHgwODsKIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3ROdW1iZXIg
PSAweDBjOworc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgRHluYW1pY1ByZWRpY3Rpb25UYWcg
PSAweDgwOworc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdGlvblRhZ01hc2sgICAg
PSAweDgwOworCitlbnVtIFByZWRpY3Rpb25Tb3VyY2UgeyBTdGF0aWNQcmVkaWN0aW9uLCBEeW5h
bWljUHJlZGljdGlvbiB9OwogCiBpbmxpbmUgYm9vbCBpc0NlbGxQcmVkaWN0aW9uKFByZWRpY3Rl
ZFR5cGUgdmFsdWUpCiB7CkBAIC0yMDMsMTcgKzIwNywxNyBAQCBpbmxpbmUgYm9vbCBpc0NlbGxQ
cmVkaWN0aW9uKFByZWRpY3RlZFR5CiAKIGlubGluZSBib29sIGlzQXJyYXlQcmVkaWN0aW9uKFBy
ZWRpY3RlZFR5cGUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHZhbHVlID09IFByZWRpY3RBcnJheTsK
KyAgICByZXR1cm4gKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSA9PSBQcmVkaWN0QXJyYXk7
CiB9CiAKIGlubGluZSBib29sIGlzSW50MzJQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUp
CiB7Ci0gICAgcmV0dXJuIHZhbHVlID09IFByZWRpY3RJbnQzMjsKKyAgICByZXR1cm4gKHZhbHVl
ICYgflByZWRpY3Rpb25UYWdNYXNrKSA9PSBQcmVkaWN0SW50MzI7CiB9CiAKIGlubGluZSBib29s
IGlzRG91YmxlUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQogewotICAgIHJldHVybiB2
YWx1ZSA9PSBQcmVkaWN0RG91YmxlOworICAgIHJldHVybiAodmFsdWUgJiB+UHJlZGljdGlvblRh
Z01hc2spID09IFByZWRpY3REb3VibGU7CiB9CiAKIGlubGluZSBib29sIGlzTnVtYmVyUHJlZGlj
dGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQpAQCAtMjIxLDYgKzIyNSw0MCBAQCBpbmxpbmUgYm9v
bCBpc051bWJlclByZWRpY3Rpb24oUHJlZGljdGVkCiAgICAgcmV0dXJuICEhKHZhbHVlICYgUHJl
ZGljdE51bWJlcikgJiYgISh2YWx1ZSAmIH5QcmVkaWN0TnVtYmVyKTsKIH0KIAoraW5saW5lIGJv
b2wgaXNEeW5hbWljUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQoreworICAgIEFTU0VS
VCh2YWx1ZSAhPSAoUHJlZGljdE5vbmUgfCBEeW5hbWljUHJlZGljdGlvblRhZykpOworICAgIHJl
dHVybiAhISh2YWx1ZSAmIER5bmFtaWNQcmVkaWN0aW9uVGFnKTsKK30KKworaW5saW5lIFByZWRp
Y3RlZFR5cGUgbWVyZ2VQcmVkaWN0aW9ucyhQcmVkaWN0ZWRUeXBlIGxlZnQsIFByZWRpY3RlZFR5
cGUgcmlnaHQpCit7CisgICAgaWYgKGlzRHluYW1pY1ByZWRpY3Rpb24obGVmdCkgPT0gaXNEeW5h
bWljUHJlZGljdGlvbihyaWdodCkpCisgICAgICAgIHJldHVybiBsZWZ0IHwgcmlnaHQ7CisgICAg
aWYgKGlzRHluYW1pY1ByZWRpY3Rpb24obGVmdCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0R5bmFt
aWNQcmVkaWN0aW9uKHJpZ2h0KSk7CisgICAgICAgIHJldHVybiBsZWZ0OworICAgIH0KKyAgICBB
U1NFUlQoIWlzRHluYW1pY1ByZWRpY3Rpb24obGVmdCkpOworICAgIEFTU0VSVChpc0R5bmFtaWNQ
cmVkaWN0aW9uKHJpZ2h0KSk7CisgICAgcmV0dXJuIHJpZ2h0OworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgoraW5saW5lIHZvaWQgbWVyZ2VQcmVkaWN0aW9uKFQmIGxlZnQsIFByZWRpY3RlZFR5
cGUgcmlnaHQpCit7CisgICAgbGVmdCA9IHN0YXRpY19jYXN0PFQ+KG1lcmdlUHJlZGljdGlvbnMo
c3RhdGljX2Nhc3Q8UHJlZGljdGVkVHlwZT4obGVmdCksIHJpZ2h0KSk7Cit9CisKK2lubGluZSBQ
cmVkaWN0ZWRUeXBlIG1ha2VQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdHlwZSwgUHJlZGljdGlv
blNvdXJjZSBzb3VyY2UpCit7CisgICAgQVNTRVJUKCEodHlwZSAmIER5bmFtaWNQcmVkaWN0aW9u
VGFnKSk7CisgICAgQVNTRVJUKHNvdXJjZSA9PSBEeW5hbWljUHJlZGljdGlvbiB8fCBzb3VyY2Ug
PT0gU3RhdGljUHJlZGljdGlvbik7CisgICAgaWYgKHR5cGUgPT0gUHJlZGljdE5vbmUpCisgICAg
ICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKKyAgICByZXR1cm4gdHlwZSB8IChzb3VyY2UgPT0gRHlu
YW1pY1ByZWRpY3Rpb24gPyBEeW5hbWljUHJlZGljdGlvblRhZyA6IDApOworfQorCiAjaWZuZGVm
IE5ERUJVRwogaW5saW5lIGNvbnN0IGNoYXIqIHByZWRpY3Rpb25Ub1N0cmluZyhQcmVkaWN0ZWRU
eXBlIHZhbHVlKQogewpAQCAtNDMyLDEwICs0NzAsMjIgQEAgc3RydWN0IE5vZGUgewogICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8UHJlZGljdGVkVHlwZT4obV9vcEluZm8yKTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBwcmVkaWN0KFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKKyAgICB2b2lk
IHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJj
ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNQcmVkaWN0aW9uKCkpOwotICAgICAgICBtX29w
SW5mbzIgfD0gcHJlZGljdGlvbjsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGhhdmUgcHJldmlv
dXNseSBmb3VuZCBlbXBpcmljYWxseSB0aGF0IGFzY3JpYmluZyBzdGF0aWMgcHJlZGljdGlvbnMK
KyAgICAgICAgLy8gdG8gaGVhcCBsb2FkcyBhcyB3ZWxsIGFzIGNhbGxzIGlzIG5vdCBwcm9maXRh
YmxlLCBhcyB0aGVzZSBwcmVkaWN0aW9ucworICAgICAgICAvLyBhcmUgd3JvbmcgdG9vIG9mdGVu
LiBIZW5jZSwgdGhpcyBjb21wbGV0ZWx5IGlnbm9yZXMgc3RhdGljIHByZWRpY3Rpb25zLgorICAg
ICAgICBpZiAoc291cmNlID09IFN0YXRpY1ByZWRpY3Rpb24pCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBQcmVkaWN0Tm9uZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChzb3VyY2UgPT0gRHluYW1p
Y1ByZWRpY3Rpb24pOworICAgICAgICAKKyAgICAgICAgbV9vcEluZm8yIHw9IER5bmFtaWNQcmVk
aWN0aW9uVGFnIHwgcHJlZGljdGlvbjsKICAgICB9CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyKCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>