<?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>113619</bug_id>
          
          <creation_ts>2013-03-29 16:08:20 -0700</creation_ts>
          <short_desc>FTL should force LLVM to use our own JIT memory allocator, and we shouldn&apos;t have to keep around an LLVMExecutionEngineRef to keep code alive</short_desc>
          <delta_ts>2013-05-22 10:01:09 -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>
          
          <blocked>112840</blocked>
    
    <blocked>113620</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>866454</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-29 16:08:20 -0700</bug_when>
    <thetext>FTL should force LLVM to use our own JIT memory allocator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889549</commentid>
    <comment_count>1</comment_count>
      <attachid>201888</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-15 15:08:37 -0700</bug_when>
    <thetext>Created attachment 201888
LLVM patch to expose MCJITMemoryManager callbacks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889550</commentid>
    <comment_count>2</comment_count>
      <attachid>201889</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-15 15:09:59 -0700</bug_when>
    <thetext>Created attachment 201889
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889551</commentid>
    <comment_count>3</comment_count>
      <attachid>201890</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-15 15:12:00 -0700</bug_when>
    <thetext>Created attachment 201890
LLVM patch to expose MCJITMemoryManager callbacks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889554</commentid>
    <comment_count>4</comment_count>
      <attachid>201889</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-05-15 15:17:01 -0700</bug_when>
    <thetext>Comment on attachment 201889
the patch

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

r=me

&gt; Source/JavaScriptCore/ftl/FTLCompile.cpp:43
&gt; +static uint8_t *allocateCodeSection(

Move the star, please. And below.

&gt; Source/JavaScriptCore/ftl/FTLCompile.cpp:54
&gt; +            state.graph.m_vm, size, state.graph.m_codeBlock, JITCompilationMustSucceed);

Maybe link to the bug here about must succeed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889622</commentid>
    <comment_count>5</comment_count>
      <attachid>201909</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-15 18:52:31 -0700</bug_when>
    <thetext>Created attachment 201909
LLVM patch to expose MCJITMemoryManager callbacks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890907</commentid>
    <comment_count>6</comment_count>
      <attachid>202207</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-18 09:11:19 -0700</bug_when>
    <thetext>Created attachment 202207
new patch for LLVM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890908</commentid>
    <comment_count>7</comment_count>
      <attachid>202208</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-18 09:12:19 -0700</bug_when>
    <thetext>Created attachment 202208
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>892378</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-22 10:01:09 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/150520</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201888</attachid>
            <date>2013-05-15 15:08:37 -0700</date>
            <delta_ts>2013-05-15 15:12:00 -0700</delta_ts>
            <desc>LLVM patch to expose MCJITMemoryManager callbacks</desc>
            <filename>mcjmm-c.patch</filename>
            <type>text/plain</type>
            <size>15269</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IGluY2x1ZGUvbGx2bS9FeGVjdXRpb25FbmdpbmUvUnVudGltZUR5bGQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBpbmNsdWRlL2xsdm0vRXhlY3V0aW9uRW5naW5lL1J1bnRpbWVEeWxkLmgJKHJldmlz
aW9uIDE4MTg0OCkKKysrIGluY2x1ZGUvbGx2bS9FeGVjdXRpb25FbmdpbmUvUnVudGltZUR5bGQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSAibGx2bS9BRFQv
U3RyaW5nUmVmLmgiCiAjaW5jbHVkZSAibGx2bS9FeGVjdXRpb25FbmdpbmUvT2JqZWN0QnVmZmVy
LmgiCisjaW5jbHVkZSAibGx2bS9FeGVjdXRpb25FbmdpbmUvUlREeWxkTWVtb3J5TWFuYWdlci5o
IgogI2luY2x1ZGUgImxsdm0vU3VwcG9ydC9NZW1vcnkuaCIKIAogbmFtZXNwYWNlIGxsdm0gewpA
QCAtMjMsNTYgKzI0LDYgQEAKIGNsYXNzIFJ1bnRpbWVEeWxkSW1wbDsKIGNsYXNzIE9iamVjdElt
YWdlOwogCi0vLyBSdW50aW1lRHlsZCBjbGllbnRzIG9mdGVuIHdhbnQgdG8gaGFuZGxlIHRoZSBt
ZW1vcnkgbWFuYWdlbWVudCBvZgotLy8gd2hhdCBnZXRzIHBsYWNlZCB3aGVyZS4gRm9yIEpJVCBj
bGllbnRzLCB0aGlzIGlzIHRoZSBzdWJzZXQgb2YKLS8vIEpJVE1lbW9yeU1hbmFnZXIgcmVxdWly
ZWQgZm9yIGR5bmFtaWMgbG9hZGluZyBvZiBiaW5hcmllcy4KLS8vCi0vLyBGSVhNRTogQXMgdGhl
IFJ1bnRpbWVEeWxkIGZpbGxzIG91dCwgYWRkaXRpb25hbCByb3V0aW5lcyB3aWxsIGJlIG5lZWRl
ZAotLy8gICAgICAgIGZvciB0aGUgdmFyeWluZyB0eXBlcyBvZiBvYmplY3RzIHRvIGJlIGFsbG9j
YXRlZC4KLWNsYXNzIFJURHlsZE1lbW9yeU1hbmFnZXIgewotICBSVER5bGRNZW1vcnlNYW5hZ2Vy
KGNvbnN0IFJURHlsZE1lbW9yeU1hbmFnZXImKSBMTFZNX0RFTEVURURfRlVOQ1RJT047Ci0gIHZv
aWQgb3BlcmF0b3I9KGNvbnN0IFJURHlsZE1lbW9yeU1hbmFnZXImKSBMTFZNX0RFTEVURURfRlVO
Q1RJT047Ci1wdWJsaWM6Ci0gIFJURHlsZE1lbW9yeU1hbmFnZXIoKSB7fQotICB2aXJ0dWFsIH5S
VER5bGRNZW1vcnlNYW5hZ2VyKCk7Ci0KLSAgLy8vIEFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIG9m
IChhdCBsZWFzdCkgdGhlIGdpdmVuIHNpemUgc3VpdGFibGUgZm9yCi0gIC8vLyBleGVjdXRhYmxl
IGNvZGUuIFRoZSBTZWN0aW9uSUQgaXMgYSB1bmlxdWUgaWRlbnRpZmllciBhc3NpZ25lZCBieSB0
aGUgSklUCi0gIC8vLyBlbmdpbmUsIGFuZCBvcHRpb25hbGx5IHJlY29yZGVkIGJ5IHRoZSBtZW1v
cnkgbWFuYWdlciB0byBhY2Nlc3MgYSBsb2FkZWQKLSAgLy8vIHNlY3Rpb24uCi0gIHZpcnR1YWwg
dWludDhfdCAqYWxsb2NhdGVDb2RlU2VjdGlvbih1aW50cHRyX3QgU2l6ZSwgdW5zaWduZWQgQWxp
Z25tZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
U2VjdGlvbklEKSA9IDA7Ci0KLSAgLy8vIEFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIG9mIChhdCBs
ZWFzdCkgdGhlIGdpdmVuIHNpemUgc3VpdGFibGUgZm9yIGRhdGEuCi0gIC8vLyBUaGUgU2VjdGlv
bklEIGlzIGEgdW5pcXVlIGlkZW50aWZpZXIgYXNzaWduZWQgYnkgdGhlIEpJVCBlbmdpbmUsIGFu
ZAotICAvLy8gb3B0aW9uYWxseSByZWNvcmRlZCBieSB0aGUgbWVtb3J5IG1hbmFnZXIgdG8gYWNj
ZXNzIGEgbG9hZGVkIHNlY3Rpb24uCi0gIHZpcnR1YWwgdWludDhfdCAqYWxsb2NhdGVEYXRhU2Vj
dGlvbih1aW50cHRyX3QgU2l6ZSwgdW5zaWduZWQgQWxpZ25tZW50LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgU2VjdGlvbklELCBib29sIElzUmVhZE9u
bHkpID0gMDsKLQotICAvLy8gVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUg
c3BlY2lmaWVkIGZ1bmN0aW9uLiBBcyBzdWNoIGl0IGlzCi0gIC8vLyBvbmx5IHVzZWZ1bCBmb3Ig
cmVzb2x2aW5nIGxpYnJhcnkgc3ltYm9scywgbm90IGNvZGUgZ2VuZXJhdGVkIHN5bWJvbHMuCi0g
IC8vLwotICAvLy8gSWYgQWJvcnRPbkZhaWx1cmUgaXMgZmFsc2UgYW5kIG5vIGZ1bmN0aW9uIHdp
dGggdGhlIGdpdmVuIG5hbWUgaXMKLSAgLy8vIGZvdW5kLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMg
YSBudWxsIHBvaW50ZXIuIE90aGVyd2lzZSwgaXQgcHJpbnRzIGEKLSAgLy8vIG1lc3NhZ2UgdG8g
c3RkZXJyIGFuZCBhYm9ydHMuCi0gIHZpcnR1YWwgdm9pZCAqZ2V0UG9pbnRlclRvTmFtZWRGdW5j
dGlvbihjb25zdCBzdGQ6OnN0cmluZyAmTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgQWJvcnRPbkZhaWx1cmUgPSB0cnVlKSA9IDA7Ci0KLSAgLy8v
IFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIG9iamVjdCBsb2FkaW5nIGlzIGNvbXBsZXRlIGFu
ZCBzZWN0aW9uIHBhZ2UKLSAgLy8vIHBlcm1pc3Npb25zIGNhbiBiZSBhcHBsaWVkLiAgSXQgaXMg
dXAgdG8gdGhlIG1lbW9yeSBtYW5hZ2VyIGltcGxlbWVudGF0aW9uCi0gIC8vLyB0byBkZWNpZGUg
d2hldGhlciBvciBub3QgdG8gYWN0IG9uIHRoaXMgbWV0aG9kLiAgVGhlIG1lbW9yeSBtYW5hZ2Vy
IHdpbGwKLSAgLy8vIHR5cGljYWxseSBhbGxvY2F0ZSBhbGwgc2VjdGlvbnMgYXMgcmVhZC13cml0
ZSBhbmQgdGhlbiBhcHBseSBzcGVjaWZpYwotICAvLy8gcGVybWlzc2lvbnMgd2hlbiB0aGlzIG1l
dGhvZCBpcyBjYWxsZWQuCi0gIC8vLwotICAvLy8gUmV0dXJucyB0cnVlIGlmIGFuIGVycm9yIG9j
Y3VycmVkLCBmYWxzZSBvdGhlcndpc2UuCi0gIHZpcnR1YWwgYm9vbCBhcHBseVBlcm1pc3Npb25z
KHN0ZDo6c3RyaW5nICpFcnJNc2cgPSAwKSA9IDA7Ci0KLSAgLy8vIFJlZ2lzdGVyIHRoZSBFSCBm
cmFtZXMgd2l0aCB0aGUgcnVudGltZSBzbyB0aGF0IGMrKyBleGNlcHRpb25zIHdvcmsuIFRoZQot
ICAvLy8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuIExvb2sgYXQgU2VjdGlv
bk1lbW9yeU1hbmFnZXIgZm9yIG9uZQotICAvLy8gdGhhdCB1c2VzIF9fcmVnaXN0ZXJfZnJhbWUu
Ci0gIHZpcnR1YWwgdm9pZCByZWdpc3RlckVIRnJhbWVzKFN0cmluZ1JlZiBTZWN0aW9uRGF0YSk7
Ci19OwotCiBjbGFzcyBSdW50aW1lRHlsZCB7CiAgIFJ1bnRpbWVEeWxkKGNvbnN0IFJ1bnRpbWVE
eWxkICYpIExMVk1fREVMRVRFRF9GVU5DVElPTjsKICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgUnVu
dGltZUR5bGQgJikgTExWTV9ERUxFVEVEX0ZVTkNUSU9OOwpJbmRleDogaW5jbHVkZS9sbHZtLWMv
Q29yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGluY2x1ZGUvbGx2bS1jL0NvcmUuaAkocmV2aXNpb24gMTgx
ODQ4KQorKysgaW5jbHVkZS9sbHZtLWMvQ29yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTEsNiAr
NDExLDcgQEAKIAogLyo9PT0tLSBFcnJvciBoYW5kbGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ki8KIAorY2hhciAqTExWTUNyZWF0ZU1l
c3NhZ2UoY29uc3QgY2hhciAqTWVzc2FnZSk7CiB2b2lkIExMVk1EaXNwb3NlTWVzc2FnZShjaGFy
ICpNZXNzYWdlKTsKIAogCkluZGV4OiBpbmNsdWRlL2xsdm0tYy9FeGVjdXRpb25FbmdpbmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBpbmNsdWRlL2xsdm0tYy9FeGVjdXRpb25FbmdpbmUuaAkocmV2aXNpb24g
MTgxODQ4KQorKysgaW5jbHVkZS9sbHZtLWMvRXhlY3V0aW9uRW5naW5lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDExICs0MSw5MCBAQAogdHlwZWRlZiBzdHJ1Y3QgTExWTU9wYXF1ZUdlbmVyaWNW
YWx1ZSAqTExWTUdlbmVyaWNWYWx1ZVJlZjsKIHR5cGVkZWYgc3RydWN0IExMVk1PcGFxdWVFeGVj
dXRpb25FbmdpbmUgKkxMVk1FeGVjdXRpb25FbmdpbmVSZWY7CiAKK3N0cnVjdCBMTFZNTUNKSVRN
ZW1vcnlNYW5hZ2VyRnVuY3Rpb25zIHsKKyAgLyoqCisgICAqIEFsbG9jYXRlIGEgbWVtb3J5IGJs
b2NrIG9mIChhdCBsZWFzdCkgdGhlIGdpdmVuIHNpemUgc3VpdGFibGUgZm9yCisgICAqIGV4ZWN1
dGFibGUgY29kZS4gVGhlIFNlY3Rpb25JRCBpcyBhIHVuaXF1ZSBpZGVudGlmaWVyIGFzc2lnbmVk
IGJ5IHRoZSBKSVQKKyAgICogZW5naW5lLCBhbmQgb3B0aW9uYWxseSByZWNvcmRlZCBieSB0aGUg
bWVtb3J5IG1hbmFnZXIgdG8gYWNjZXNzIGEgbG9hZGVkCisgICAqIHNlY3Rpb24uIFRoaXMgaXMg
YSBtYW5kYXRvcnkgZnVuY3Rpb24gYW5kIG11c3QgYmUgbm9uLU5VTEwuCisgICAqLworICB1aW50
OF90ICooKkFsbG9jYXRlQ29kZVNlY3Rpb24pKHZvaWQgKk9iamVjdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50cHRyX3QgU2l6ZSwgdW5zaWduZWQgQWxpZ25tZW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIFNlY3Rpb25JRCk7Cisg
IAorICAvKioKKyAgICogQWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgb2YgKGF0IGxlYXN0KSB0aGUg
Z2l2ZW4gc2l6ZSBzdWl0YWJsZSBmb3IgZGF0YS4KKyAgICogVGhlIFNlY3Rpb25JRCBpcyBhIHVu
aXF1ZSBpZGVudGlmaWVyIGFzc2lnbmVkIGJ5IHRoZSBKSVQgZW5naW5lLCBhbmQKKyAgICogb3B0
aW9uYWxseSByZWNvcmRlZCBieSB0aGUgbWVtb3J5IG1hbmFnZXIgdG8gYWNjZXNzIGEgbG9hZGVk
IHNlY3Rpb24uCisgICAqIFRoaXMgaXMgYSBtYW5kYXRvcnkgZnVuY3Rpb24gYW5kIG11c3QgYmUg
bm9uLU5VTEwuCisgICAqLworICB1aW50OF90ICooKkFsbG9jYXRlRGF0YVNlY3Rpb24pKHZvaWQg
Kk9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50cHRyX3QgU2l6
ZSwgdW5zaWduZWQgQWxpZ25tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIFNlY3Rpb25JRCwgTExWTUJvb2wgSXNSZWFkT25seSk7CisgIAorICAvKioKKyAg
ICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgc3BlY2lmaWVkIGZ1bmN0
aW9uLiBBcyBzdWNoIGl0IGlzCisgICAqIG9ubHkgdXNlZnVsIGZvciByZXNvbHZpbmcgbGlicmFy
eSBzeW1ib2xzLCBub3QgY29kZSBnZW5lcmF0ZWQgc3ltYm9scy4KKyAgICoKKyAgICogSWYgQWJv
cnRPbkZhaWx1cmUgaXMgZmFsc2UgYW5kIG5vIGZ1bmN0aW9uIHdpdGggdGhlIGdpdmVuIG5hbWUg
aXMKKyAgICogZm91bmQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIG51bGwgcG9pbnRlci4gT3Ro
ZXJ3aXNlLCBpdCBwcmludHMgYQorICAgKiBtZXNzYWdlIHRvIHN0ZGVyciBhbmQgYWJvcnRzLgor
ICAgKgorICAgKiBUaGlzIGZ1bmN0aW9uIGlzIG9wdGlvbmFsLiBJZiBpdCBpcyBOVUxMLCB0aGVu
IGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgorICAgKiBpcyBwcm92aWRlZCwgd2hpY2ggYWx3YXlz
IHJldHVybnMgTlVMTCBpZiAhQWJvcnRPbkZhaWx1cmUsIGFuZCBhbHdheXMKKyAgICogYWJvcnRz
IG90aGVyd2lzZS4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgdXNlZnVsIGlmIHlvdSBr
bm93IHRoYXQKKyAgICogdGhlIGNvZGUgeW91IGFyZSBleGVjdXRpbmcgd2lsbCBuZXZlciBiZSBy
ZXNvbHZpbmcgZXh0ZXJuYWwgcmVmZXJlbmNlcy4KKyAgICovCisgIHZvaWQgKigqR2V0UG9pbnRl
clRvTmFtZWRGdW5jdGlvbikodm9pZCAqT2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTExWTUJvb2wgQWJvcnRPbkZhaWx1cmUpOworICAKKyAgLyoqCisgICAqIFRo
aXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIG9iamVjdCBsb2FkaW5nIGlzIGNvbXBsZXRlIGFuZCBz
ZWN0aW9uIHBhZ2UKKyAgICogcGVybWlzc2lvbnMgY2FuIGJlIGFwcGxpZWQuICBJdCBpcyB1cCB0
byB0aGUgbWVtb3J5IG1hbmFnZXIgaW1wbGVtZW50YXRpb24KKyAgICogdG8gZGVjaWRlIHdoZXRo
ZXIgb3Igbm90IHRvIGFjdCBvbiB0aGlzIG1ldGhvZC4gIFRoZSBtZW1vcnkgbWFuYWdlciB3aWxs
CisgICAqIHR5cGljYWxseSBhbGxvY2F0ZSBhbGwgc2VjdGlvbnMgYXMgcmVhZC13cml0ZSBhbmQg
dGhlbiBhcHBseSBzcGVjaWZpYworICAgKiBwZXJtaXNzaW9ucyB3aGVuIHRoaXMgbWV0aG9kIGlz
IGNhbGxlZC4KKyAgICoKKyAgICogUmV0dXJucyB0cnVlIGlmIGFuIGVycm9yIG9jY3VycmVkLCBm
YWxzZSBvdGhlcndpc2UuIElmIGFuIGVycm9yIG9jY3VycmVkLAorICAgKiB5b3UgbWF5IG9wdGlv
bmFsbHkgc2V0ICpFcnJNc2cgdG8gcG9pbnQgdG8gYSBzdHJpbmcgYWxsb2NhdGVkIHVzaW5nCisg
ICAqIExMVk1DcmVhdGVNZXNzYWdlKCkuCisgICAqCisgICAqIFRoaXMgZnVuY3Rpb24gaXMgb3B0
aW9uYWwuIElmIGl0IGlzIE5VTEwsIHRoZW4gYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCisgICAq
IGlzIHByb2lkZWQsIHdoaWNoIGFsd2F5cyBkb2VzIG5vdGhpbmcgYW5kIHJldHVybnMgZmFsc2Ug
KGkuZS4gMCkuIFRoaXMgaXMKKyAgICogdXNlZnVsIGlmIHlvdXIgbWVtb3J5IG1hbmFnZXIgYWxy
ZWFkeSBzZXRzIHBlcm1pc3Npb25zIHdoZW4gYWxsb2NhdGluZworICAgKiBzZWN0aW9ucy4KKyAg
ICovCisgIExMVk1Cb29sICgqQXBwbHlQZXJtaXNzaW9ucykodm9pZCAqT2JqZWN0LCBjaGFyICoq
RXJyTXNnKTsKKyAgCisgIC8qKgorICAgKiBSZWdpc3RlciB0aGUgRUggZnJhbWVzIHdpdGggdGhl
IHJ1bnRpbWUgc28gdGhhdCBDKysgZXhjZXB0aW9ucyB3b3JrLgorICAgKgorICAgKiBUaGlzIGZ1
bmN0aW9uIGlzIG9wdGlvbmFsLiBJZiBpdCBpcyBOVUxMLCB0aGVuIGEgZGVmYXVsdCBpbXBsZW1l
bnRhdGlvbgorICAgKiBpcyBwcm9pZGVkLCB3aGljaCBhbHdheXMgZG9lcyBub3RoaW5nLiBUaGlz
IGlzIHVzZWZ1bCBpZiB5b3UgYXJlIG5vdAorICAgKiB1c2luZyBDKysgZXhjZXB0aW9ucy4KKyAg
ICovCisgIHZvaWQgKCpSZWdpc3RlckVIRnJhbWVzKSh2b2lkICpPYmplY3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBTZWN0aW9uRGF0YSwgc2l6ZV90IFNlY3Rpb25E
YXRhU2l6ZSk7CisgIAorICAvKioKKyAgICogTm90aWZ5IHRoZSBkZXN0cnVjdGlvbiBvZiB0aGUg
TUNKSVQgbWVtb3J5IG1hbmFnZXIuIFRoaXMgd2lsbCBnZXQgY2FsbGVkCisgICAqIHdoZW4gdGhl
IE1DSklUIGV4ZWN1dGlvbiBlbmdpbmUgaXMgZGVzdHJveWVkLgorICAgKgorICAgKiBUaGlzIGZ1
bmN0aW9uIGlzIG9wdGlvbmFsLiBJZiBpdCBpcyBOVUxMLCB0aGVuIGEgZGVmYXVsdCBpbXBsZW1l
bnRhdGlvbgorICAgKiBpcyBwcm92aWRlZCwgd2hpY2ggYWx3YXlzIGRvZXMgbm90aGluZy4KKyAg
ICovCisgIHZvaWQgKCpEZXN0cm95KSh2b2lkICpPYmplY3QpOworfTsKKwogc3RydWN0IExMVk1N
Q0pJVENvbXBpbGVyT3B0aW9ucyB7CiAgIHVuc2lnbmVkIE9wdExldmVsOwogICBMTFZNQ29kZU1v
ZGVsIENvZGVNb2RlbDsKICAgTExWTUJvb2wgTm9GcmFtZVBvaW50ZXJFbGltOwogICBMTFZNQm9v
bCBFbmFibGVGYXN0SVNlbDsKKyAgc3RydWN0IExMVk1NQ0pJVE1lbW9yeU1hbmFnZXJGdW5jdGlv
bnMgKk1DSk1NRnVuY3Rpb25zOworICBzaXplX3QgU2l6ZU9mTUNKTU1GdW5jdGlvbnM7CisgIHZv
aWQgKk1DSk1NT2JqZWN0OwogfTsKIAogLyo9PT0tLSBPcGVyYXRpb25zIG9uIGdlbmVyaWMgdmFs
dWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ki8KSW5kZXg6IGxp
Yi9FeGVjdXRpb25FbmdpbmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGliL0V4ZWN1
dGlvbkVuZ2luZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTgxODQ4KQorKysgbGliL0V4ZWN1
dGlvbkVuZ2luZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAK
IGFkZF9sbHZtX2xpYnJhcnkoTExWTUV4ZWN1dGlvbkVuZ2luZQogICBFeGVjdXRpb25FbmdpbmUu
Y3BwCiAgIEV4ZWN1dGlvbkVuZ2luZUJpbmRpbmdzLmNwcAorICBSVER5bGRNZW1vcnlNYW5hZ2Vy
LmNwcAogICBUYXJnZXRTZWxlY3QuY3BwCiAgICkKIApJbmRleDogbGliL0V4ZWN1dGlvbkVuZ2lu
ZS9FeGVjdXRpb25FbmdpbmVCaW5kaW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGliL0V4ZWN1dGlv
bkVuZ2luZS9FeGVjdXRpb25FbmdpbmVCaW5kaW5ncy5jcHAJKHJldmlzaW9uIDE4MTg0OCkKKysr
IGxpYi9FeGVjdXRpb25FbmdpbmUvRXhlY3V0aW9uRW5naW5lQmluZGluZ3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAibGx2bS1jL0V4ZWN1dGlvbkVuZ2lu
ZS5oIgogI2luY2x1ZGUgImxsdm0vRXhlY3V0aW9uRW5naW5lL0V4ZWN1dGlvbkVuZ2luZS5oIgog
I2luY2x1ZGUgImxsdm0vRXhlY3V0aW9uRW5naW5lL0dlbmVyaWNWYWx1ZS5oIgorI2luY2x1ZGUg
Imxsdm0vRXhlY3V0aW9uRW5naW5lL1JURHlsZE1lbW9yeU1hbmFnZXIuaCIKICNpbmNsdWRlICJs
bHZtL0lSL0Rlcml2ZWRUeXBlcy5oIgogI2luY2x1ZGUgImxsdm0vSVIvTW9kdWxlLmgiCiAjaW5j
bHVkZSAibGx2bS9TdXBwb3J0L0Vycm9ySGFuZGxpbmcuaCIKQEAgLTE1NywxNSArMTU4LDExMiBA
QAogdm9pZCBMTFZNSW5pdGlhbGl6ZU1DSklUQ29tcGlsZXJPcHRpb25zKExMVk1NQ0pJVENvbXBp
bGVyT3B0aW9ucyAqUGFzc2VkT3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgU2l6ZU9mUGFzc2VkT3B0aW9ucykgewogICBMTFZNTUNKSVRDb21w
aWxlck9wdGlvbnMgb3B0aW9uczsKLSAgb3B0aW9ucy5PcHRMZXZlbCA9IDA7CisgIG1lbXNldCgm
b3B0aW9ucywgMCwgc2l6ZW9mKG9wdGlvbnMpKTsgLy8gTW9zdCBmaWVsZHMgYXJlIHplcm8gYnkg
ZGVmYXVsdC4KICAgb3B0aW9ucy5Db2RlTW9kZWwgPSBMTFZNQ29kZU1vZGVsSklURGVmYXVsdDsK
LSAgb3B0aW9ucy5Ob0ZyYW1lUG9pbnRlckVsaW0gPSBmYWxzZTsKLSAgb3B0aW9ucy5FbmFibGVG
YXN0SVNlbCA9IGZhbHNlOwogICAKICAgbWVtY3B5KFBhc3NlZE9wdGlvbnMsICZvcHRpb25zLAog
ICAgICAgICAgc3RkOjptaW4oc2l6ZW9mKG9wdGlvbnMpLCBTaXplT2ZQYXNzZWRPcHRpb25zKSk7
CiB9CiAKK25hbWVzcGFjZSB7CisKK2NsYXNzIEJpbmRpbmdNZW1vcnlNYW5hZ2VyIDogcHVibGlj
IFJURHlsZE1lbW9yeU1hbmFnZXIgeworcHVibGljOgorICBCaW5kaW5nTWVtb3J5TWFuYWdlcihj
b25zdCBMTFZNTUNKSVRNZW1vcnlNYW5hZ2VyRnVuY3Rpb25zJiBGdW5jdGlvbnMsCisgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgKk9iamVjdCk7CisgIHZpcnR1YWwgfkJpbmRpbmdNZW1vcnlN
YW5hZ2VyKCk7CisgIAorICB2b2lkIGRlbGV0ZVNpbGVudGx5KCk7CisgIAorICB2aXJ0dWFsIHVp
bnQ4X3QgKmFsbG9jYXRlQ29kZVNlY3Rpb24odWludHB0cl90IFNpemUsIHVuc2lnbmVkIEFsaWdu
bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIFNl
Y3Rpb25JRCk7CisKKyAgdmlydHVhbCB1aW50OF90ICphbGxvY2F0ZURhdGFTZWN0aW9uKHVpbnRw
dHJfdCBTaXplLCB1bnNpZ25lZCBBbGlnbm1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBTZWN0aW9uSUQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGlzUmVhZE9ubHkpOworCisgIHZpcnR1YWwgYm9vbCBhcHBs
eVBlcm1pc3Npb25zKHN0ZDo6c3RyaW5nICpFcnJNc2cpOworCisgIHZvaWQgcmVnaXN0ZXJFSEZy
YW1lcyhTdHJpbmdSZWYgU2VjdGlvbkRhdGEpOworCisgIHZpcnR1YWwgdm9pZCAqZ2V0UG9pbnRl
clRvTmFtZWRGdW5jdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmTmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgQWJvcnRPbkZhaWx1cmUpOworICAKK3By
aXZhdGU6CisgIExMVk1NQ0pJVE1lbW9yeU1hbmFnZXJGdW5jdGlvbnMgRnVuY3Rpb25zOworICB2
b2lkICpPYmplY3Q7Cit9OworCitCaW5kaW5nTWVtb3J5TWFuYWdlcjo6QmluZGluZ01lbW9yeU1h
bmFnZXIoCisgIGNvbnN0IExMVk1NQ0pJVE1lbW9yeU1hbmFnZXJGdW5jdGlvbnMmIEZ1bmN0aW9u
cywKKyAgdm9pZCAqT2JqZWN0KQorICA6IEZ1bmN0aW9ucyhGdW5jdGlvbnMpLCBPYmplY3QoT2Jq
ZWN0KSB7CisgIGFzc2VydChGdW5jdGlvbnMuQWxsb2NhdGVDb2RlU2VjdGlvbiAmJgorICAgICAg
ICAgIk5vIEFsbG9jYXRlQ29kZVNlY3Rpb24gZnVuY3Rpb24gcHJvdmlkZWQhIik7CisgIGFzc2Vy
dChGdW5jdGlvbnMuQWxsb2NhdGVEYXRhU2VjdGlvbiAmJgorICAgICAgICAgIk5vIEFsbG9jYXRl
RGF0YVNlY3Rpb24gZnVuY3Rpb24gcHJvdmlkZWQhIik7Cit9CisKK0JpbmRpbmdNZW1vcnlNYW5h
Z2VyOjp+QmluZGluZ01lbW9yeU1hbmFnZXIoKSB7CisgIGlmIChGdW5jdGlvbnMuRGVzdHJveSkK
KyAgICBGdW5jdGlvbnMuRGVzdHJveShPYmplY3QpOworfQorCit2b2lkIEJpbmRpbmdNZW1vcnlN
YW5hZ2VyOjpkZWxldGVTaWxlbnRseSgpIHsKKyAgRnVuY3Rpb25zLkRlc3Ryb3kgPSAwOworICBk
ZWxldGUgdGhpczsKK30KKwordWludDhfdCAqQmluZGluZ01lbW9yeU1hbmFnZXI6OmFsbG9jYXRl
Q29kZVNlY3Rpb24oCisgIHVpbnRwdHJfdCBTaXplLCB1bnNpZ25lZCBBbGlnbm1lbnQsIHVuc2ln
bmVkIFNlY3Rpb25JRCkgeworICByZXR1cm4gRnVuY3Rpb25zLkFsbG9jYXRlQ29kZVNlY3Rpb24o
T2JqZWN0LCBTaXplLCBBbGlnbm1lbnQsIFNlY3Rpb25JRCk7Cit9CisKK3VpbnQ4X3QgKkJpbmRp
bmdNZW1vcnlNYW5hZ2VyOjphbGxvY2F0ZURhdGFTZWN0aW9uKAorICB1aW50cHRyX3QgU2l6ZSwg
dW5zaWduZWQgQWxpZ25tZW50LCB1bnNpZ25lZCBTZWN0aW9uSUQsIGJvb2wgaXNSZWFkT25seSkg
eworICByZXR1cm4gRnVuY3Rpb25zLkFsbG9jYXRlRGF0YVNlY3Rpb24oT2JqZWN0LCBTaXplLCBB
bGlnbm1lbnQsIFNlY3Rpb25JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlzUmVhZE9ubHkpOworfQorCitib29sIEJpbmRpbmdNZW1vcnlNYW5hZ2VyOjphcHBseVBl
cm1pc3Npb25zKHN0ZDo6c3RyaW5nICpFcnJNc2cpIHsKKyAgaWYgKCFGdW5jdGlvbnMuQXBwbHlQ
ZXJtaXNzaW9ucykKKyAgICByZXR1cm4gZmFsc2U7CisgIAorICBjaGFyICplcnJNc2dDU3RyaW5n
OworICBib29sIHJlc3VsdCA9IEZ1bmN0aW9ucy5BcHBseVBlcm1pc3Npb25zKE9iamVjdCwgJmVy
ck1zZ0NTdHJpbmcpOworICBhc3NlcnQoKHJlc3VsdCB8fCAhZXJyTXNnQ1N0cmluZykgJiYKKyAg
ICAgICAgICJEaWQgbm90IGV4cGVjdCBhbiBlcnJvciBtZXNzYWdlIGlmIEFwcGx5UGVybWlzc2lv
bnMgc3VjY2VlZGVkIik7CisgIGlmIChlcnJNc2dDU3RyaW5nKSB7CisgICAgKkVyck1zZyA9IGVy
ck1zZ0NTdHJpbmc7CisgICAgZnJlZShlcnJNc2dDU3RyaW5nKTsKKyAgfQorICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIEJpbmRpbmdNZW1vcnlNYW5hZ2VyOjpyZWdpc3RlckVIRnJhbWVzKFN0
cmluZ1JlZiBTZWN0aW9uRGF0YSkgeworICBpZiAoIUZ1bmN0aW9ucy5SZWdpc3RlckVIRnJhbWVz
KQorICAgIHJldHVybjsKKyAgCisgIEZ1bmN0aW9ucy5SZWdpc3RlckVIRnJhbWVzKE9iamVjdCwg
U2VjdGlvbkRhdGEuZGF0YSgpLCBTZWN0aW9uRGF0YS5zaXplKCkpOworfQorCit2b2lkICpCaW5k
aW5nTWVtb3J5TWFuYWdlcjo6Z2V0UG9pbnRlclRvTmFtZWRGdW5jdGlvbihjb25zdCBzdGQ6OnN0
cmluZyAmTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgQWJvcnRPbkZhaWx1cmUpIHsKKyAgaWYgKCFGdW5jdGlvbnMuR2V0UG9p
bnRlclRvTmFtZWRGdW5jdGlvbikgeworICAgIGlmIChBYm9ydE9uRmFpbHVyZSkKKyAgICAgIHJl
cG9ydF9mYXRhbF9lcnJvcigiUHJvZ3JhbSB1c2VkIGV4dGVybmFsIGZ1bmN0aW9uICciICsgTmFt
ZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIicgd2hpY2ggY291bGQgbm90IGJlIHJlc29s
dmVkIGJlY2F1c2Ugbm8gIgorICAgICAgICAgICAgICAgICAgICAgICAgICJHZXRQb2ludGVyVG9O
YW1lZEZ1bmN0aW9uIGltcGxlbWVudGF0aW9uIHdhcyAiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgInByb3ZpZGVkISIpOworICAgIHJldHVybiAwOworICB9CisgIAorICByZXR1cm4gRnVuY3Rp
b25zLkdldFBvaW50ZXJUb05hbWVkRnVuY3Rpb24oT2JqZWN0LCBOYW1lLmNfc3RyKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYm9ydE9uRmFpbHVyZSk7
Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCiBMTFZNQm9vbCBMTFZNQ3JlYXRlTUNK
SVRDb21waWxlckZvck1vZHVsZSgKICAgICBMTFZNRXhlY3V0aW9uRW5naW5lUmVmICpPdXRKSVQs
IExMVk1Nb2R1bGVSZWYgTSwKICAgICBMTFZNTUNKSVRDb21waWxlck9wdGlvbnMgKlBhc3NlZE9w
dGlvbnMsIHNpemVfdCBTaXplT2ZQYXNzZWRPcHRpb25zLApAQCAtMTk5LDExICsyOTcsMjkgQEAK
ICAgICAgICAgIC5zZXRPcHRMZXZlbCgoQ29kZUdlbk9wdDo6TGV2ZWwpb3B0aW9ucy5PcHRMZXZl
bCkKICAgICAgICAgIC5zZXRDb2RlTW9kZWwodW53cmFwKG9wdGlvbnMuQ29kZU1vZGVsKSkKICAg
ICAgICAgIC5zZXRUYXJnZXRPcHRpb25zKHRhcmdldE9wdGlvbnMpOworICAKKyAgQmluZGluZ01l
bW9yeU1hbmFnZXIgKk1DSk1NID0gMDsKKyAgaWYgKG9wdGlvbnMuU2l6ZU9mTUNKTU1GdW5jdGlv
bnMpIHsKKyAgICBMTFZNTUNKSVRNZW1vcnlNYW5hZ2VyRnVuY3Rpb25zIGZ1bmN0aW9uczsKKyAg
ICBpZiAob3B0aW9ucy5TaXplT2ZNQ0pNTUZ1bmN0aW9ucyA+IHNpemVvZihmdW5jdGlvbnMpKSB7
CisgICAgICAqT3V0RXJyb3IgPSBzdHJkdXAoCisgICAgICAgICJSZWZ1c2luZyB0byB1c2UgTUNK
SVQgbWVtb3J5IG1hbmFnZXIgZnVuY3Rpb25zIHN0cnVjdCB0aGF0IGlzIGxhcmdlciAiCisgICAg
ICAgICJ0aGFuIG15IG93bjsgYXNzdW1pbmcgTExWTSBsaWJyYXJ5IG1pc21hdGNoLiIpOworICAg
ICAgcmV0dXJuIDE7CisgICAgfQorICAgIG1lbXNldCgmZnVuY3Rpb25zLCAwLCBzaXplb2YoZnVu
Y3Rpb25zKSk7CisgICAgbWVtY3B5KCZmdW5jdGlvbnMsIG9wdGlvbnMuTUNKTU1GdW5jdGlvbnMs
IG9wdGlvbnMuU2l6ZU9mTUNKTU1GdW5jdGlvbnMpOworICAgIE1DSk1NID0gbmV3IEJpbmRpbmdN
ZW1vcnlNYW5hZ2VyKGZ1bmN0aW9ucywgb3B0aW9ucy5NQ0pNTU9iamVjdCk7CisgICAgYnVpbGRl
ci5zZXRNQ0pJVE1lbW9yeU1hbmFnZXIoTUNKTU0pOworICB9CisgIAogICBpZiAoRXhlY3V0aW9u
RW5naW5lICpKSVQgPSBidWlsZGVyLmNyZWF0ZSgpKSB7CiAgICAgKk91dEpJVCA9IHdyYXAoSklU
KTsKICAgICByZXR1cm4gMDsKICAgfQogICAqT3V0RXJyb3IgPSBzdHJkdXAoRXJyb3IuY19zdHIo
KSk7CisgIGlmIChNQ0pNTSkKKyAgICBNQ0pNTS0+ZGVsZXRlU2lsZW50bHkoKTsKICAgcmV0dXJu
IDE7CiB9CiAKSW5kZXg6IGxpYi9FeGVjdXRpb25FbmdpbmUvUnVudGltZUR5bGQvUnVudGltZUR5
bGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGxpYi9FeGVjdXRpb25FbmdpbmUvUnVudGltZUR5bGQvUnVu
dGltZUR5bGQuY3BwCShyZXZpc2lvbiAxODE4NDgpCisrKyBsaWIvRXhlY3V0aW9uRW5naW5lL1J1
bnRpbWVEeWxkL1J1bnRpbWVEeWxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsNiBA
QAogdXNpbmcgbmFtZXNwYWNlIGxsdm06Om9iamVjdDsKIAogLy8gRW1wdHkgb3V0LW9mLWxpbmUg
dmlydHVhbCBkZXN0cnVjdG9yIGFzIHRoZSBrZXkgZnVuY3Rpb24uCi1SVER5bGRNZW1vcnlNYW5h
Z2VyOjp+UlREeWxkTWVtb3J5TWFuYWdlcigpIHt9Ci12b2lkIFJURHlsZE1lbW9yeU1hbmFnZXI6
OnJlZ2lzdGVyRUhGcmFtZXMoU3RyaW5nUmVmIFNlY3Rpb25EYXRhKSB7fQogUnVudGltZUR5bGRJ
bXBsOjp+UnVudGltZUR5bGRJbXBsKCkge30KIAogbmFtZXNwYWNlIGxsdm0gewpJbmRleDogbGli
L0V4ZWN1dGlvbkVuZ2luZS9SdW50aW1lRHlsZC9SdW50aW1lRHlsZE1hY2hPLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBsaWIvRXhlY3V0aW9uRW5naW5lL1J1bnRpbWVEeWxkL1J1bnRpbWVEeWxkTWFjaE8u
Y3BwCShyZXZpc2lvbiAxODE4NDgpCisrKyBsaWIvRXhlY3V0aW9uRW5naW5lL1J1bnRpbWVEeWxk
L1J1bnRpbWVEeWxkTWFjaE8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjcsNiArMzI3LDggQEAK
ICAgICBWYWx1ZS5TZWN0aW9uSUQgPSBmaW5kT3JFbWl0U2VjdGlvbihPYmosIFNlYywgdHJ1ZSwg
T2JqU2VjdGlvblRvSUQpOwogICAgIHVpbnQ2NF90IEFkZHI7CiAgICAgU2VjLmdldEFkZHJlc3Mo
QWRkcik7CisgICAgaWYgKElzUENSZWwpCisgICAgICBBZGRyIC09IE9mZnNldCArIDQ7CiAgICAg
VmFsdWUuQWRkZW5kID0gQWRkZW5kIC0gQWRkcjsKICAgfQogCkluZGV4OiBsaWIvSVIvQ29yZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gbGliL0lSL0NvcmUuY3BwCShyZXZpc2lvbiAxODE4NDgpCisrKyBs
aWIvSVIvQ29yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDEwIEBACiAKIC8qPT09
LS0gRXJyb3IgaGFuZGxpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLT09PSovCiAKK2NoYXIgKkxMVk1DcmVhdGVNZXNzYWdlKGNvbnN0IGNoYXIg
Kk1lc3NhZ2UpIHsKKyAgcmV0dXJuIHN0cmR1cChNZXNzYWdlKTsKK30KKwogdm9pZCBMTFZNRGlz
cG9zZU1lc3NhZ2UoY2hhciAqTWVzc2FnZSkgewogICBmcmVlKE1lc3NhZ2UpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201889</attachid>
            <date>2013-05-15 15:09:59 -0700</date>
            <delta_ts>2013-05-18 09:12:19 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>11558</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwMTUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDEzLTA1LTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBmb3JjZSBMTFZNIHRvIHVzZSBvdXIgb3duIEpJVCBtZW1vcnkgYWxsb2NhdG9y
LCBhbmQgd2Ugc2hvdWxkbid0IGhhdmUgdG8ga2VlcCBhcm91bmQgYW4gTExWTUV4ZWN1dGlvbkVu
Z2luZVJlZiB0byBrZWVwIGNvZGUgYWxpdmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExMzYxOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyB1c2VzIG5ldyBBUEkgdGhhdCBJJ3ZlIGV4
cG9zZWQsIHdoaWNoIGFsbG93cyBmb3IgbWVtb3J5IG1hbmFnZXIgY2FsbGJhY2tzCisgICAgICAg
IGZyb20gd2l0aGluIExMVk0uIExMVk0gbWF5IGFsbG9jYXRlIG11bHRpcGxlIGluZGVwZW5kZW50
IGNodW5rcyBvZiBtZW1vcnkgZm9yCisgICAgICAgIGEgbW9kdWxlLCBhbmQgd2UgdHJhY2sgYWxs
IG9mIHRob3NlIGluIGEgVmVjdG9yIGluIEZUTDo6SklUQ29kZS4KKworICAgICAgICAqIGZ0bC9G
VExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjphbGxvY2F0ZUNvZGVTZWN0aW9uKToK
KyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6OkZUTDo6YWxsb2NhdGVEYXRhU2VjdGlvbik6
CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEpJVENvZGUu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OkpJVENvZGUpOgorICAgICAgICAoSlND
OjpGVEw6OkpJVENvZGU6On5KSVRDb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjph
ZGRIYW5kbGUpOgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjpp
bml0aWFsaXplQ29kZSk6CisgICAgICAgICogZnRsL0ZUTEpJVENvZGUuaDoKKyAgICAgICAgKEpJ
VENvZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmhhbmRsZXMpOgorICAgICAgICAq
IGZ0bC9GVExKSVRGaW5hbGl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJVEZpbmFsaXpl
cjo6fkpJVEZpbmFsaXplcik6CisgICAgICAgIChKU0M6OkZUTDo6SklURmluYWxpemVyOjpmaW5h
bGl6ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBmdGwvRlRMSklURmluYWxpemVyLmg6CisgICAgICAg
IChKU0M6OkZUTDo6SklURmluYWxpemVyOjppbml0aWFsaXplRW50cnlwb2ludExpbmtCdWZmZXIp
OgorICAgICAgICAoSklURmluYWxpemVyKToKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6bGluayk6CisgICAgICAgICogZnRsL0ZUTFN0YXRlLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAqIGZ0bC9GVExTdGF0ZS5o
OgorICAgICAgICAoU3RhdGUpOgorCiAyMDEzLTA1LTE1ICBNYXJrIExhbSAgPG1hcmsubGFtQGFw
cGxlLmNvbT4KIAogICAgICAgICBGaXggZm9yIGJyb2tlbiAzMi1iaXQgYnVpbGQgaW4gU3BlY3Vs
YXRpdmVKSVQ6OmNoZWNrQXJyYXkoKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDb21waWxlLmNwcAkocmV2aXNpb24gMTUwMTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiREZHQ0NhbGxIZWxwZXJz
LmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgogI2lu
Y2x1ZGUgIkZUTExMVk1IZWFkZXJzLmgiCiAjaW5jbHVkZSAiSklUU3R1YnMuaCIKICNpbmNsdWRl
ICJMaW5rQnVmZmVyLmgiCkBAIC0zOSwyNCArNDAsNjMgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogCiB1c2luZyBuYW1lc3BhY2UgREZHOwogCitzdGF0aWMgdWludDhfdCAqYWxs
b2NhdGVDb2RlU2VjdGlvbigKKyAgICB2b2lkICpvcGFxdWVTdGF0ZSwgdWludHB0cl90IHNpemUs
IHVuc2lnbmVkIGFsaWdubWVudCwgdW5zaWduZWQgc2VjdGlvbklEKQoreworICAgIFVOVVNFRF9Q
QVJBTShzZWN0aW9uSUQpOworICAgIAorICAgIFN0YXRlJiBzdGF0ZSA9ICpzdGF0aWNfY2FzdDxT
dGF0ZSo+KG9wYXF1ZVN0YXRlKTsKKyAgICAKKyAgICBBU1NFUlQoYWxpZ25tZW50IDw9IGppdEFs
bG9jYXRpb25HcmFudWxlKTsKKyAgICAKKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRs
ZT4gcmVzdWx0ID0KKyAgICAgICAgc3RhdGUuZ3JhcGgubV92bS5leGVjdXRhYmxlQWxsb2NhdG9y
LmFsbG9jYXRlKAorICAgICAgICAgICAgc3RhdGUuZ3JhcGgubV92bSwgc2l6ZSwgc3RhdGUuZ3Jh
cGgubV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgIAorICAgIHN0
YXRlLmppdENvZGUtPmFkZEhhbmRsZShyZXN1bHQpOworICAgIAorICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx1aW50OF90Kj4ocmVzdWx0LT5zdGFydCgpKTsKK30KKworc3RhdGljIHVpbnQ4X3QgKmFs
bG9jYXRlRGF0YVNlY3Rpb24oCisgICAgdm9pZCAqb3BhcXVlU3RhdGUsIHVpbnRwdHJfdCBzaXpl
LCB1bnNpZ25lZCBhbGlnbm1lbnQsIHVuc2lnbmVkIHNlY3Rpb25JRCwKKyAgICBMTFZNQm9vbCBp
c1JlYWRPbmx5KQoreworICAgIC8vIEZJWE1FOiBmb3VydGhUaWVyOiBGVEwgbWVtb3J5IGFsbG9j
YXRvciBzaG91bGQgYmUgYWJsZSB0byBhbGxvY2F0ZSBkYXRhCisgICAgLy8gc2VjdGlvbnMgaW4g
bm9uLWV4ZWN1dGFibGUgbWVtb3J5LgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTYxODkKKyAgICBVTlVTRURfUEFSQU0oaXNSZWFkT25seSk7CisgICAg
cmV0dXJuIGFsbG9jYXRlQ29kZVNlY3Rpb24ob3BhcXVlU3RhdGUsIHNpemUsIGFsaWdubWVudCwg
c2VjdGlvbklEKTsKK30KKwogdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSkKIHsKICAgICBjaGFy
KiBlcnJvciA9IDA7CiAgICAgCisgICAgTExWTU1DSklUTWVtb3J5TWFuYWdlckZ1bmN0aW9ucyBt
bUZ1bmN0aW9uczsKKyAgICBtZW1zZXQoJm1tRnVuY3Rpb25zLCAwLCBzaXplb2YobW1GdW5jdGlv
bnMpKTsKKyAgICBtbUZ1bmN0aW9ucy5BbGxvY2F0ZUNvZGVTZWN0aW9uID0gYWxsb2NhdGVDb2Rl
U2VjdGlvbjsKKyAgICBtbUZ1bmN0aW9ucy5BbGxvY2F0ZURhdGFTZWN0aW9uID0gYWxsb2NhdGVE
YXRhU2VjdGlvbjsKKyAgICAKICAgICBMTFZNTUNKSVRDb21waWxlck9wdGlvbnMgb3B0aW9uczsK
ICAgICBMTFZNSW5pdGlhbGl6ZU1DSklUQ29tcGlsZXJPcHRpb25zKCZvcHRpb25zLCBzaXplb2Yo
b3B0aW9ucykpOwogICAgIG9wdGlvbnMuT3B0TGV2ZWwgPSBPcHRpb25zOjpsbHZtT3B0aW1pemF0
aW9uTGV2ZWwoKTsKICAgICBvcHRpb25zLk5vRnJhbWVQb2ludGVyRWxpbSA9IHRydWU7CiAgICAg
b3B0aW9ucy5Db2RlTW9kZWwgPSBMTFZNQ29kZU1vZGVsU21hbGw7CiAgICAgb3B0aW9ucy5FbmFi
bGVGYXN0SVNlbCA9IE9wdGlvbnM6OmVuYWJsZUxMVk1GYXN0SVNlbCgpOworICAgIG9wdGlvbnMu
TUNKTU1GdW5jdGlvbnMgPSAmbW1GdW5jdGlvbnM7CisgICAgb3B0aW9ucy5TaXplT2ZNQ0pNTUZ1
bmN0aW9ucyA9IHNpemVvZihtbUZ1bmN0aW9ucyk7CisgICAgb3B0aW9ucy5NQ0pNTU9iamVjdCA9
ICZzdGF0ZTsKKyAgICAKKyAgICBMTFZNRXhlY3V0aW9uRW5naW5lUmVmIGVuZ2luZTsKICAgICAK
LSAgICBpZiAoTExWTUNyZWF0ZU1DSklUQ29tcGlsZXJGb3JNb2R1bGUoJnN0YXRlLmVuZ2luZSwg
c3RhdGUubW9kdWxlLCAmb3B0aW9ucywgc2l6ZW9mKG9wdGlvbnMpLCAmZXJyb3IpKSB7CisgICAg
aWYgKExMVk1DcmVhdGVNQ0pJVENvbXBpbGVyRm9yTW9kdWxlKCZlbmdpbmUsIHN0YXRlLm1vZHVs
ZSwgJm9wdGlvbnMsIHNpemVvZihvcHRpb25zKSwgJmVycm9yKSkgewogICAgICAgICBkYXRhTG9n
KCJGQVRBTDogQ291bGQgbm90IGNyZWF0ZSBMTFZNIGV4ZWN1dGlvbiBlbmdpbmU6ICIsIGVycm9y
LCAiXG4iKTsKICAgICAgICAgQ1JBU0goKTsKICAgICB9CiAgICAgCiAgICAgTExWTVBhc3NNYW5h
Z2VyUmVmIHBhc3MgPSBMTFZNQ3JlYXRlUGFzc01hbmFnZXIoKTsKLSAgICBMTFZNQWRkVGFyZ2V0
RGF0YShMTFZNR2V0RXhlY3V0aW9uRW5naW5lVGFyZ2V0RGF0YShzdGF0ZS5lbmdpbmUpLCBwYXNz
KTsKKyAgICBMTFZNQWRkVGFyZ2V0RGF0YShMTFZNR2V0RXhlY3V0aW9uRW5naW5lVGFyZ2V0RGF0
YShlbmdpbmUpLCBwYXNzKTsKICAgICBMTFZNQWRkQ29uc3RhbnRQcm9wYWdhdGlvblBhc3MocGFz
cyk7CiAgICAgTExWTUFkZEluc3RydWN0aW9uQ29tYmluaW5nUGFzcyhwYXNzKTsKICAgICBMTFZN
QWRkUHJvbW90ZU1lbW9yeVRvUmVnaXN0ZXJQYXNzKHBhc3MpOwpAQCAtNjgsMTMgKzEwOCwxMSBA
QCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlKQogICAgIGlmIChERkc6OnNob3VsZFNob3dEaXNh
c3NlbWJseSgpIHx8IERGRzo6dmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAgICBz
dGF0ZS5kdW1wU3RhdGUoImFmdGVyIG9wdGltaXphdGlvbiIpOwogICAgIAotICAgIC8vIEZJWE1F
OiBMTFZNIHNob3VsZCB1c2Ugb3VyIG93biBKSVQgbWVtb3J5IGFsbG9jYXRvciwgYW5kIHdlIHNo
b3VsZG4ndCBoYXZlIHRvCi0gICAgLy8ga2VlcCBhcm91bmQgYW4gTExWTUV4ZWN1dGlvbkVuZ2lu
ZVJlZiB0byBrZWVwIGNvZGUgYWxpdmUuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMzYxOQogICAgIC8vIEZJWE1FOiBOZWVkIHRvIGFkZCBzdXBwb3J0
IGZvciB0aGUgY2FzZSB3aGVyZSBKSVQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLgogICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjAKLSAgICBzdGF0
ZS5nZW5lcmF0ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8R2VuZXJhdGVkRnVuY3Rpb24+
KExMVk1HZXRQb2ludGVyVG9HbG9iYWwoc3RhdGUuZW5naW5lLCBzdGF0ZS5mdW5jdGlvbikpOwor
ICAgIHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxHZW5lcmF0ZWRG
dW5jdGlvbj4oTExWTUdldFBvaW50ZXJUb0dsb2JhbChlbmdpbmUsIHN0YXRlLmZ1bmN0aW9uKSk7
CiAgICAgTExWTURpc3Bvc2VQYXNzTWFuYWdlcihwYXNzKTsKKyAgICBMTFZNRGlzcG9zZUV4ZWN1
dGlvbkVuZ2luZShlbmdpbmUpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHJldmlzaW9uIDE1MDEz
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDE0ICszMiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CiAKIEpJVENvZGU6OkpJVENvZGUoKQogICAgIDogSlNDOjpKSVRDb2RlKEZUTEpJVCkKLSAgICAs
IG1fZW5naW5lKDApCiB7CiB9CiAKIEpJVENvZGU6On5KSVRDb2RlKCkKIHsKLSAgICBpZiAobV9l
bmdpbmUpCi0gICAgICAgIExMVk1EaXNwb3NlRXhlY3V0aW9uRW5naW5lKG1fZW5naW5lKTsKIH0K
IAogdm9pZCBKSVRDb2RlOjppbml0aWFsaXplRXhpdFRodW5rcyhDb2RlUmVmIGV4aXRUaHVua3Mp
CkBAIC00Nyw5ICs0NCwxMyBAQCB2b2lkIEpJVENvZGU6OmluaXRpYWxpemVFeGl0VGh1bmtzKENv
ZGVSCiAgICAgbV9leGl0VGh1bmtzID0gZXhpdFRodW5rczsKIH0KIAotdm9pZCBKSVRDb2RlOjpp
bml0aWFsaXplQ29kZShMTFZNRXhlY3V0aW9uRW5naW5lUmVmIGVuZ2luZSwgQ29kZVJlZiBlbnRy
eXBvaW50KQordm9pZCBKSVRDb2RlOjphZGRIYW5kbGUoUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVt
b3J5SGFuZGxlPiBoYW5kbGUpCit7CisgICAgbV9oYW5kbGVzLmFwcGVuZChoYW5kbGUpOworfQor
Cit2b2lkIEpJVENvZGU6OmluaXRpYWxpemVDb2RlKENvZGVSZWYgZW50cnlwb2ludCkKIHsKLSAg
ICBtX2VuZ2luZSA9IGVuZ2luZTsKICAgICBtX2VudHJ5cG9pbnQgPSBlbnRyeXBvaW50OwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMTUw
MTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUwLDcgKzUwLDEwIEBAIHB1YmxpYzoKICAgICBib29sIGNvbnRhaW5zKHZvaWQq
KTsKICAgICAKICAgICB2b2lkIGluaXRpYWxpemVFeGl0VGh1bmtzKENvZGVSZWYpOwotICAgIHZv
aWQgaW5pdGlhbGl6ZUNvZGUoTExWTUV4ZWN1dGlvbkVuZ2luZVJlZiwgQ29kZVJlZiBlbnRyeXBv
aW50KTsKKyAgICB2b2lkIGFkZEhhbmRsZShQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5k
bGU+KTsKKyAgICB2b2lkIGluaXRpYWxpemVDb2RlKENvZGVSZWYgZW50cnlwb2ludCk7CisgICAg
CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiA+JiBoYW5k
bGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYW5kbGVzOyB9CiAgICAgCiAgICAgQ29kZVB0ciBleGl0
VGh1bmtzKCk7CiAgICAgCkBAIC02MSwxMCArNjQsNyBAQCBwdWJsaWM6CiAgICAgU2VnbWVudGVk
VmVjdG9yPE9TUkV4aXQsIDg+IG9zckV4aXQ7CiAgICAgCiBwcml2YXRlOgotICAgIC8vIEZJWE1F
OiBMTFZNIHNob3VsZCB1c2Ugb3VyIG93biBKSVQgbWVtb3J5IGFsbG9jYXRvciwgYW5kIHdlIHNo
b3VsZG4ndCBoYXZlIHRvCi0gICAgLy8ga2VlcCBhcm91bmQgYW4gTExWTUV4ZWN1dGlvbkVuZ2lu
ZVJlZiB0byBrZWVwIGNvZGUgYWxpdmUuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMzYxOQotICAgIExMVk1FeGVjdXRpb25FbmdpbmVSZWYgbV9lbmdp
bmU7CisgICAgVmVjdG9yPFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiA+IG1faGFuZGxl
czsKICAgICBDb2RlUmVmIG1fZW50cnlwb2ludDsKICAgICBDb2RlUmVmIG1fZXhpdFRodW5rczsK
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIu
Y3BwCShyZXZpc2lvbiAxNTAxMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJ
VEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDYgQEAgSklURmluYWxp
emVyOjpKSVRGaW5hbGl6ZXIoUGxhbiYgcGxhbikKIAogSklURmluYWxpemVyOjp+SklURmluYWxp
emVyKCkKIHsKLSAgICBpZiAobV9lbmdpbmUpCi0gICAgICAgIExMVk1EaXNwb3NlRXhlY3V0aW9u
RW5naW5lKG1fZW5naW5lKTsKIH0KIAogYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKFJlZlB0
cjxKU0M6OkpJVENvZGU+JikKQEAgLTU0LDYgKzUyLDExIEBAIGJvb2wgSklURmluYWxpemVyOjpm
aW5hbGl6ZShSZWZQdHI8SlNDOjoKIAogYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rp
b24oUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIHdp
dGhBcml0eUNoZWNrKQogeworICAgIGZvciAodW5zaWduZWQgaSA9IG1faml0Q29kZS0+aGFuZGxl
cygpLnNpemUoKTsgaS0tOykgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Y2FjaGVGbHVzaCgK
KyAgICAgICAgICAgIG1faml0Q29kZS0+aGFuZGxlcygpW2ldLT5zdGFydCgpLCBtX2ppdENvZGUt
PmhhbmRsZXMoKVtpXS0+c2l6ZUluQnl0ZXMoKSk7CisgICAgfQorICAgIAogICAgIGlmIChtX2V4
aXRUaHVua3NMaW5rQnVmZmVyKSB7CiAgICAgICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUV4aXRU
aHVua3MoCiAgICAgICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKQEAgLTYzLDE0ICs2NiwxMSBA
QCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbihSZWZQCiAgICAgCiAgICAgd2l0
aEFyaXR5Q2hlY2sgPSBtX2VudHJ5cG9pbnRMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1fYXJpdHlD
aGVjayk7CiAgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZSgKLSAgICAgICAgbV9lbmdpbmUs
CiAgICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKAogICAgICAgICAgICAgKm1fZW50cnlwb2ludExp
bmtCdWZmZXIsCiAgICAgICAgICAgICAoIkZUTCBlbnRyeXBvaW50IHRodW5rIGZvciAlcyB3aXRo
IExMVk0gZ2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5
cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpLCBtX2Z1bmN0aW9u
KSkpOwogICAgIGVudHJ5ID0gbV9qaXRDb2RlOwogICAgIAotICAgIG1fZW5naW5lID0gMDsgLy8g
V2UgZG9uJ3Qgb3duIGl0IGFueW1vcmUuCi0gICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAkocmV2aXNp
b24gMTUwMTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTAgKzUyLDYgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgbV9lbnRyeXBvaW50TGlua0J1ZmZlciA9IGJ1ZmZlcjsKICAgICB9Ci0gICAgdm9pZCBpbml0
aWFsaXplQ29kZShMTFZNRXhlY3V0aW9uRW5naW5lUmVmIGVuZ2luZSkKLSAgICB7Ci0gICAgICAg
IG1fZW5naW5lID0gZW5naW5lOwotICAgIH0KICAgICB2b2lkIGluaXRpYWxpemVGdW5jdGlvbihH
ZW5lcmF0ZWRGdW5jdGlvbiBmdW5jdGlvbikKICAgICB7CiAgICAgICAgIG1fZnVuY3Rpb24gPSBm
dW5jdGlvbjsKQEAgLTc1LDcgKzcxLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBPd25QdHI8
TGlua0J1ZmZlcj4gbV9leGl0VGh1bmtzTGlua0J1ZmZlcjsKICAgICBPd25QdHI8TGlua0J1ZmZl
cj4gbV9lbnRyeXBvaW50TGlua0J1ZmZlcjsKLSAgICBMTFZNRXhlY3V0aW9uRW5naW5lUmVmIG1f
ZW5naW5lOwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2FyaXR5Q2hlY2s7CiAgICAgR2Vu
ZXJhdGVkRnVuY3Rpb24gbV9mdW5jdGlvbjsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2Rl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lvbiAxNTAx
MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjIsNyArMTIyLDYgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAgICBsaW5r
QnVmZmVyLT5saW5rKGNhbGxBcml0eUNoZWNrLCBzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jay0+bV9p
c0NvbnN0cnVjdG9yID8gY3RpX29wX2NvbnN0cnVjdF9hcml0eUNoZWNrIDogY3RpX29wX2NhbGxf
YXJpdHlDaGVjayk7CiAgICAgCiAgICAgc3RhdGUuZmluYWxpemVyLT5pbml0aWFsaXplRW50cnlw
b2ludExpbmtCdWZmZXIobGlua0J1ZmZlci5yZWxlYXNlKCkpOwotICAgIHN0YXRlLmZpbmFsaXpl
ci0+aW5pdGlhbGl6ZUNvZGUoc3RhdGUuZW5naW5lKTsKICAgICBzdGF0ZS5maW5hbGl6ZXItPmlu
aXRpYWxpemVGdW5jdGlvbihzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbik7CiAgICAgc3RhdGUuZmlu
YWxpemVyLT5pbml0aWFsaXplQXJpdHlDaGVjayhhcml0eUNoZWNrKTsKICAgICBzdGF0ZS5maW5h
bGl6ZXItPmluaXRpYWxpemVKSVRDb2RlKHN0YXRlLmppdENvZGUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAJKHJldmlzaW9uIDE1MDEzOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0
MCw2IEBAIFN0YXRlOjpTdGF0ZShHcmFwaCYgZ3JhcGgpCiAgICAgLCBtb2R1bGUoMCkKICAgICAs
IGZ1bmN0aW9uKDApCiAgICAgLCBqaXRDb2RlKGFkb3B0UmVmKG5ldyBKSVRDb2RlKCkpKQotICAg
ICwgZW5naW5lKDApCiAgICAgLCBnZW5lcmF0ZWRGdW5jdGlvbigwKQogewogICAgIGZpbmFsaXpl
ciA9IG5ldyBKSVRGaW5hbGl6ZXIoZ3JhcGgubV9wbGFuKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFN0YXRlLmgJKHJldmlzaW9uIDE1MDEzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNiBAQCBwdWJs
aWM6CiAgICAgTFZhbHVlIGZ1bmN0aW9uOwogICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlOwog
ICAgIFZlY3RvcjxPU1JFeGl0Q29tcGlsYXRpb25JbmZvPiBvc3JFeGl0OwotICAgIExMVk1FeGVj
dXRpb25FbmdpbmVSZWYgZW5naW5lOwogICAgIEdlbmVyYXRlZEZ1bmN0aW9uIGdlbmVyYXRlZEZ1
bmN0aW9uOwogICAgIEpJVEZpbmFsaXplciogZmluYWxpemVyOwogICAgIAo=
</data>
<flag name="review"
          id="223268"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201890</attachid>
            <date>2013-05-15 15:12:00 -0700</date>
            <delta_ts>2013-05-15 18:52:31 -0700</delta_ts>
            <desc>LLVM patch to expose MCJITMemoryManager callbacks</desc>
            <filename>mcjmm-c.patch</filename>
            <type>text/plain</type>
            <size>19946</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IGluY2x1ZGUvbGx2bS9FeGVjdXRpb25FbmdpbmUvUlREeWxkTWVtb3J5TWFuYWdlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGluY2x1ZGUvbGx2bS9FeGVjdXRpb25FbmdpbmUvUlREeWxkTWVtb3J5
TWFuYWdlci5oCShyZXZpc2lvbiAwKQorKysgaW5jbHVkZS9sbHZtL0V4ZWN1dGlvbkVuZ2luZS9S
VER5bGRNZW1vcnlNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLy89
PT0tLSBSVER5bGRNZW1vcnlNYW5hZ2VyLmNwcCAtIE1lbW9yeSBtYW5hZ2VyIGZvciBNQy1KSVQg
LS0tLS0qLSBDKysgLSotPT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZN
IENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisvLyBMaWNlbnNl
LiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09
Ly8KKy8vCisvLyBJbnRlcmZhY2Ugb2YgdGhlIHJ1bnRpbWUgZHluYW1pYyBtZW1vcnkgbWFuYWdl
ciBiYXNlIGNsYXNzLgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisKKyNpZm5kZWYgTExW
TV9FWEVDVVRJT05FTkdJTkVfUlRfRFlMRF9NRU1PUllfTUFOQUdFUl9ICisjZGVmaW5lIExMVk1f
RVhFQ1VUSU9ORU5HSU5FX1JUX0RZTERfTUVNT1JZX01BTkFHRVJfSAorCisjaW5jbHVkZSAibGx2
bS9BRFQvU3RyaW5nUmVmLmgiCisjaW5jbHVkZSAibGx2bS9TdXBwb3J0L01lbW9yeS5oIgorCitu
YW1lc3BhY2UgbGx2bSB7CisKKy8vIFJ1bnRpbWVEeWxkIGNsaWVudHMgb2Z0ZW4gd2FudCB0byBo
YW5kbGUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9mCisvLyB3aGF0IGdldHMgcGxhY2VkIHdoZXJl
LiBGb3IgSklUIGNsaWVudHMsIHRoaXMgaXMgdGhlIHN1YnNldCBvZgorLy8gSklUTWVtb3J5TWFu
YWdlciByZXF1aXJlZCBmb3IgZHluYW1pYyBsb2FkaW5nIG9mIGJpbmFyaWVzLgorLy8KKy8vIEZJ
WE1FOiBBcyB0aGUgUnVudGltZUR5bGQgZmlsbHMgb3V0LCBhZGRpdGlvbmFsIHJvdXRpbmVzIHdp
bGwgYmUgbmVlZGVkCisvLyAgICAgICAgZm9yIHRoZSB2YXJ5aW5nIHR5cGVzIG9mIG9iamVjdHMg
dG8gYmUgYWxsb2NhdGVkLgorY2xhc3MgUlREeWxkTWVtb3J5TWFuYWdlciB7CisgIFJURHlsZE1l
bW9yeU1hbmFnZXIoY29uc3QgUlREeWxkTWVtb3J5TWFuYWdlciYpIExMVk1fREVMRVRFRF9GVU5D
VElPTjsKKyAgdm9pZCBvcGVyYXRvcj0oY29uc3QgUlREeWxkTWVtb3J5TWFuYWdlciYpIExMVk1f
REVMRVRFRF9GVU5DVElPTjsKK3B1YmxpYzoKKyAgUlREeWxkTWVtb3J5TWFuYWdlcigpIHt9Cisg
IHZpcnR1YWwgflJURHlsZE1lbW9yeU1hbmFnZXIoKTsKKworICAvLy8gQWxsb2NhdGUgYSBtZW1v
cnkgYmxvY2sgb2YgKGF0IGxlYXN0KSB0aGUgZ2l2ZW4gc2l6ZSBzdWl0YWJsZSBmb3IKKyAgLy8v
IGV4ZWN1dGFibGUgY29kZS4gVGhlIFNlY3Rpb25JRCBpcyBhIHVuaXF1ZSBpZGVudGlmaWVyIGFz
c2lnbmVkIGJ5IHRoZSBKSVQKKyAgLy8vIGVuZ2luZSwgYW5kIG9wdGlvbmFsbHkgcmVjb3JkZWQg
YnkgdGhlIG1lbW9yeSBtYW5hZ2VyIHRvIGFjY2VzcyBhIGxvYWRlZAorICAvLy8gc2VjdGlvbi4K
KyAgdmlydHVhbCB1aW50OF90ICphbGxvY2F0ZUNvZGVTZWN0aW9uKHVpbnRwdHJfdCBTaXplLCB1
bnNpZ25lZCBBbGlnbm1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBTZWN0aW9uSUQpID0gMDsKKworICAvLy8gQWxsb2NhdGUgYSBtZW1vcnkgYmxv
Y2sgb2YgKGF0IGxlYXN0KSB0aGUgZ2l2ZW4gc2l6ZSBzdWl0YWJsZSBmb3IgZGF0YS4KKyAgLy8v
IFRoZSBTZWN0aW9uSUQgaXMgYSB1bmlxdWUgaWRlbnRpZmllciBhc3NpZ25lZCBieSB0aGUgSklU
IGVuZ2luZSwgYW5kCisgIC8vLyBvcHRpb25hbGx5IHJlY29yZGVkIGJ5IHRoZSBtZW1vcnkgbWFu
YWdlciB0byBhY2Nlc3MgYSBsb2FkZWQgc2VjdGlvbi4KKyAgdmlydHVhbCB1aW50OF90ICphbGxv
Y2F0ZURhdGFTZWN0aW9uKHVpbnRwdHJfdCBTaXplLCB1bnNpZ25lZCBBbGlnbm1lbnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBTZWN0aW9uSUQsIGJv
b2wgSXNSZWFkT25seSkgPSAwOworCisgIC8vLyBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBhZGRy
ZXNzIG9mIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24uIEFzIHN1Y2ggaXQgaXMKKyAgLy8vIG9ubHkg
dXNlZnVsIGZvciByZXNvbHZpbmcgbGlicmFyeSBzeW1ib2xzLCBub3QgY29kZSBnZW5lcmF0ZWQg
c3ltYm9scy4KKyAgLy8vCisgIC8vLyBJZiBBYm9ydE9uRmFpbHVyZSBpcyBmYWxzZSBhbmQgbm8g
ZnVuY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpcworICAvLy8gZm91bmQsIHRoaXMgZnVuY3Rp
b24gcmV0dXJucyBhIG51bGwgcG9pbnRlci4gT3RoZXJ3aXNlLCBpdCBwcmludHMgYQorICAvLy8g
bWVzc2FnZSB0byBzdGRlcnIgYW5kIGFib3J0cy4KKyAgdmlydHVhbCB2b2lkICpnZXRQb2ludGVy
VG9OYW1lZEZ1bmN0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZOYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBBYm9ydE9uRmFpbHVyZSA9IHRydWUpID0g
MDsKKworICAvLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gb2JqZWN0IGxvYWRpbmcgaXMg
Y29tcGxldGUgYW5kIHNlY3Rpb24gcGFnZQorICAvLy8gcGVybWlzc2lvbnMgY2FuIGJlIGFwcGxp
ZWQuICBJdCBpcyB1cCB0byB0aGUgbWVtb3J5IG1hbmFnZXIgaW1wbGVtZW50YXRpb24KKyAgLy8v
IHRvIGRlY2lkZSB3aGV0aGVyIG9yIG5vdCB0byBhY3Qgb24gdGhpcyBtZXRob2QuICBUaGUgbWVt
b3J5IG1hbmFnZXIgd2lsbAorICAvLy8gdHlwaWNhbGx5IGFsbG9jYXRlIGFsbCBzZWN0aW9ucyBh
cyByZWFkLXdyaXRlIGFuZCB0aGVuIGFwcGx5IHNwZWNpZmljCisgIC8vLyBwZXJtaXNzaW9ucyB3
aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC4KKyAgLy8vCisgIC8vLyBSZXR1cm5zIHRydWUgaWYg
YW4gZXJyb3Igb2NjdXJyZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAgdmlydHVhbCBib29sIGFwcGx5
UGVybWlzc2lvbnMoc3RkOjpzdHJpbmcgKkVyck1zZyA9IDApID0gMDsKKworICAvLy8gUmVnaXN0
ZXIgdGhlIEVIIGZyYW1lcyB3aXRoIHRoZSBydW50aW1lIHNvIHRoYXQgYysrIGV4Y2VwdGlvbnMg
d29yay4gVGhlCisgIC8vLyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4gTG9v
ayBhdCBTZWN0aW9uTWVtb3J5TWFuYWdlciBmb3Igb25lCisgIC8vLyB0aGF0IHVzZXMgX19yZWdp
c3Rlcl9mcmFtZS4KKyAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRUhGcmFtZXMoU3RyaW5nUmVmIFNl
Y3Rpb25EYXRhKTsKK307CisKK30gLy8gbmFtZXNwYWNlIGxsdm0KKworI2VuZGlmIC8vIExMVk1f
RVhFQ1VUSU9ORU5HSU5FX1JUX0RZTERfTUVNT1JZX01BTkFHRVJfSApJbmRleDogaW5jbHVkZS9s
bHZtL0V4ZWN1dGlvbkVuZ2luZS9SdW50aW1lRHlsZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGluY2x1ZGUv
bGx2bS9FeGVjdXRpb25FbmdpbmUvUnVudGltZUR5bGQuaAkocmV2aXNpb24gMTgxODQ4KQorKysg
aW5jbHVkZS9sbHZtL0V4ZWN1dGlvbkVuZ2luZS9SdW50aW1lRHlsZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlICJsbHZtL0FEVC9TdHJpbmdSZWYuaCIKICNp
bmNsdWRlICJsbHZtL0V4ZWN1dGlvbkVuZ2luZS9PYmplY3RCdWZmZXIuaCIKKyNpbmNsdWRlICJs
bHZtL0V4ZWN1dGlvbkVuZ2luZS9SVER5bGRNZW1vcnlNYW5hZ2VyLmgiCiAjaW5jbHVkZSAibGx2
bS9TdXBwb3J0L01lbW9yeS5oIgogCiBuYW1lc3BhY2UgbGx2bSB7CkBAIC0yMyw1NiArMjQsNiBA
QAogY2xhc3MgUnVudGltZUR5bGRJbXBsOwogY2xhc3MgT2JqZWN0SW1hZ2U7CiAKLS8vIFJ1bnRp
bWVEeWxkIGNsaWVudHMgb2Z0ZW4gd2FudCB0byBoYW5kbGUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50
IG9mCi0vLyB3aGF0IGdldHMgcGxhY2VkIHdoZXJlLiBGb3IgSklUIGNsaWVudHMsIHRoaXMgaXMg
dGhlIHN1YnNldCBvZgotLy8gSklUTWVtb3J5TWFuYWdlciByZXF1aXJlZCBmb3IgZHluYW1pYyBs
b2FkaW5nIG9mIGJpbmFyaWVzLgotLy8KLS8vIEZJWE1FOiBBcyB0aGUgUnVudGltZUR5bGQgZmls
bHMgb3V0LCBhZGRpdGlvbmFsIHJvdXRpbmVzIHdpbGwgYmUgbmVlZGVkCi0vLyAgICAgICAgZm9y
IHRoZSB2YXJ5aW5nIHR5cGVzIG9mIG9iamVjdHMgdG8gYmUgYWxsb2NhdGVkLgotY2xhc3MgUlRE
eWxkTWVtb3J5TWFuYWdlciB7Ci0gIFJURHlsZE1lbW9yeU1hbmFnZXIoY29uc3QgUlREeWxkTWVt
b3J5TWFuYWdlciYpIExMVk1fREVMRVRFRF9GVU5DVElPTjsKLSAgdm9pZCBvcGVyYXRvcj0oY29u
c3QgUlREeWxkTWVtb3J5TWFuYWdlciYpIExMVk1fREVMRVRFRF9GVU5DVElPTjsKLXB1YmxpYzoK
LSAgUlREeWxkTWVtb3J5TWFuYWdlcigpIHt9Ci0gIHZpcnR1YWwgflJURHlsZE1lbW9yeU1hbmFn
ZXIoKTsKLQotICAvLy8gQWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgb2YgKGF0IGxlYXN0KSB0aGUg
Z2l2ZW4gc2l6ZSBzdWl0YWJsZSBmb3IKLSAgLy8vIGV4ZWN1dGFibGUgY29kZS4gVGhlIFNlY3Rp
b25JRCBpcyBhIHVuaXF1ZSBpZGVudGlmaWVyIGFzc2lnbmVkIGJ5IHRoZSBKSVQKLSAgLy8vIGVu
Z2luZSwgYW5kIG9wdGlvbmFsbHkgcmVjb3JkZWQgYnkgdGhlIG1lbW9yeSBtYW5hZ2VyIHRvIGFj
Y2VzcyBhIGxvYWRlZAotICAvLy8gc2VjdGlvbi4KLSAgdmlydHVhbCB1aW50OF90ICphbGxvY2F0
ZUNvZGVTZWN0aW9uKHVpbnRwdHJfdCBTaXplLCB1bnNpZ25lZCBBbGlnbm1lbnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBTZWN0aW9uSUQpID0gMDsK
LQotICAvLy8gQWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgb2YgKGF0IGxlYXN0KSB0aGUgZ2l2ZW4g
c2l6ZSBzdWl0YWJsZSBmb3IgZGF0YS4KLSAgLy8vIFRoZSBTZWN0aW9uSUQgaXMgYSB1bmlxdWUg
aWRlbnRpZmllciBhc3NpZ25lZCBieSB0aGUgSklUIGVuZ2luZSwgYW5kCi0gIC8vLyBvcHRpb25h
bGx5IHJlY29yZGVkIGJ5IHRoZSBtZW1vcnkgbWFuYWdlciB0byBhY2Nlc3MgYSBsb2FkZWQgc2Vj
dGlvbi4KLSAgdmlydHVhbCB1aW50OF90ICphbGxvY2F0ZURhdGFTZWN0aW9uKHVpbnRwdHJfdCBT
aXplLCB1bnNpZ25lZCBBbGlnbm1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBTZWN0aW9uSUQsIGJvb2wgSXNSZWFkT25seSkgPSAwOwotCi0gIC8v
LyBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBzcGVjaWZpZWQgZnVuY3Rp
b24uIEFzIHN1Y2ggaXQgaXMKLSAgLy8vIG9ubHkgdXNlZnVsIGZvciByZXNvbHZpbmcgbGlicmFy
eSBzeW1ib2xzLCBub3QgY29kZSBnZW5lcmF0ZWQgc3ltYm9scy4KLSAgLy8vCi0gIC8vLyBJZiBB
Ym9ydE9uRmFpbHVyZSBpcyBmYWxzZSBhbmQgbm8gZnVuY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gbmFt
ZSBpcwotICAvLy8gZm91bmQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIG51bGwgcG9pbnRlci4g
T3RoZXJ3aXNlLCBpdCBwcmludHMgYQotICAvLy8gbWVzc2FnZSB0byBzdGRlcnIgYW5kIGFib3J0
cy4KLSAgdmlydHVhbCB2b2lkICpnZXRQb2ludGVyVG9OYW1lZEZ1bmN0aW9uKGNvbnN0IHN0ZDo6
c3RyaW5nICZOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBBYm9ydE9uRmFpbHVyZSA9IHRydWUpID0gMDsKLQotICAvLy8gVGhpcyBtZXRob2QgaXMg
Y2FsbGVkIHdoZW4gb2JqZWN0IGxvYWRpbmcgaXMgY29tcGxldGUgYW5kIHNlY3Rpb24gcGFnZQot
ICAvLy8gcGVybWlzc2lvbnMgY2FuIGJlIGFwcGxpZWQuICBJdCBpcyB1cCB0byB0aGUgbWVtb3J5
IG1hbmFnZXIgaW1wbGVtZW50YXRpb24KLSAgLy8vIHRvIGRlY2lkZSB3aGV0aGVyIG9yIG5vdCB0
byBhY3Qgb24gdGhpcyBtZXRob2QuICBUaGUgbWVtb3J5IG1hbmFnZXIgd2lsbAotICAvLy8gdHlw
aWNhbGx5IGFsbG9jYXRlIGFsbCBzZWN0aW9ucyBhcyByZWFkLXdyaXRlIGFuZCB0aGVuIGFwcGx5
IHNwZWNpZmljCi0gIC8vLyBwZXJtaXNzaW9ucyB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC4K
LSAgLy8vCi0gIC8vLyBSZXR1cm5zIHRydWUgaWYgYW4gZXJyb3Igb2NjdXJyZWQsIGZhbHNlIG90
aGVyd2lzZS4KLSAgdmlydHVhbCBib29sIGFwcGx5UGVybWlzc2lvbnMoc3RkOjpzdHJpbmcgKkVy
ck1zZyA9IDApID0gMDsKLQotICAvLy8gUmVnaXN0ZXIgdGhlIEVIIGZyYW1lcyB3aXRoIHRoZSBy
dW50aW1lIHNvIHRoYXQgYysrIGV4Y2VwdGlvbnMgd29yay4gVGhlCi0gIC8vLyBkZWZhdWx0IGlt
cGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4gTG9vayBhdCBTZWN0aW9uTWVtb3J5TWFuYWdlciBm
b3Igb25lCi0gIC8vLyB0aGF0IHVzZXMgX19yZWdpc3Rlcl9mcmFtZS4KLSAgdmlydHVhbCB2b2lk
IHJlZ2lzdGVyRUhGcmFtZXMoU3RyaW5nUmVmIFNlY3Rpb25EYXRhKTsKLX07Ci0KIGNsYXNzIFJ1
bnRpbWVEeWxkIHsKICAgUnVudGltZUR5bGQoY29uc3QgUnVudGltZUR5bGQgJikgTExWTV9ERUxF
VEVEX0ZVTkNUSU9OOwogICB2b2lkIG9wZXJhdG9yPShjb25zdCBSdW50aW1lRHlsZCAmKSBMTFZN
X0RFTEVURURfRlVOQ1RJT047CkluZGV4OiBpbmNsdWRlL2xsdm0tYy9Db3JlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gaW5jbHVkZS9sbHZtLWMvQ29yZS5oCShyZXZpc2lvbiAxODE4NDgpCisrKyBpbmNsdWRl
L2xsdm0tYy9Db3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxMSw2ICs0MTEsNyBAQAogCiAvKj09
PS0tIEVycm9yIGhhbmRsaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS09PT0qLwogCitjaGFyICpMTFZNQ3JlYXRlTWVzc2FnZShjb25zdCBjaGFy
ICpNZXNzYWdlKTsKIHZvaWQgTExWTURpc3Bvc2VNZXNzYWdlKGNoYXIgKk1lc3NhZ2UpOwogCiAK
SW5kZXg6IGluY2x1ZGUvbGx2bS1jL0V4ZWN1dGlvbkVuZ2luZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGlu
Y2x1ZGUvbGx2bS1jL0V4ZWN1dGlvbkVuZ2luZS5oCShyZXZpc2lvbiAxODE4NDgpCisrKyBpbmNs
dWRlL2xsdm0tYy9FeGVjdXRpb25FbmdpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEgKzQx
LDkwIEBACiB0eXBlZGVmIHN0cnVjdCBMTFZNT3BhcXVlR2VuZXJpY1ZhbHVlICpMTFZNR2VuZXJp
Y1ZhbHVlUmVmOwogdHlwZWRlZiBzdHJ1Y3QgTExWTU9wYXF1ZUV4ZWN1dGlvbkVuZ2luZSAqTExW
TUV4ZWN1dGlvbkVuZ2luZVJlZjsKIAorc3RydWN0IExMVk1NQ0pJVE1lbW9yeU1hbmFnZXJGdW5j
dGlvbnMgeworICAvKioKKyAgICogQWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgb2YgKGF0IGxlYXN0
KSB0aGUgZ2l2ZW4gc2l6ZSBzdWl0YWJsZSBmb3IKKyAgICogZXhlY3V0YWJsZSBjb2RlLiBUaGUg
U2VjdGlvbklEIGlzIGEgdW5pcXVlIGlkZW50aWZpZXIgYXNzaWduZWQgYnkgdGhlIEpJVAorICAg
KiBlbmdpbmUsIGFuZCBvcHRpb25hbGx5IHJlY29yZGVkIGJ5IHRoZSBtZW1vcnkgbWFuYWdlciB0
byBhY2Nlc3MgYSBsb2FkZWQKKyAgICogc2VjdGlvbi4gVGhpcyBpcyBhIG1hbmRhdG9yeSBmdW5j
dGlvbiBhbmQgbXVzdCBiZSBub24tTlVMTC4KKyAgICovCisgIHVpbnQ4X3QgKigqQWxsb2NhdGVD
b2RlU2VjdGlvbikodm9pZCAqT2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVpbnRwdHJfdCBTaXplLCB1bnNpZ25lZCBBbGlnbm1lbnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgU2VjdGlvbklEKTsKKyAgCisgIC8qKgorICAgKiBB
bGxvY2F0ZSBhIG1lbW9yeSBibG9jayBvZiAoYXQgbGVhc3QpIHRoZSBnaXZlbiBzaXplIHN1aXRh
YmxlIGZvciBkYXRhLgorICAgKiBUaGUgU2VjdGlvbklEIGlzIGEgdW5pcXVlIGlkZW50aWZpZXIg
YXNzaWduZWQgYnkgdGhlIEpJVCBlbmdpbmUsIGFuZAorICAgKiBvcHRpb25hbGx5IHJlY29yZGVk
IGJ5IHRoZSBtZW1vcnkgbWFuYWdlciB0byBhY2Nlc3MgYSBsb2FkZWQgc2VjdGlvbi4KKyAgICog
VGhpcyBpcyBhIG1hbmRhdG9yeSBmdW5jdGlvbiBhbmQgbXVzdCBiZSBub24tTlVMTC4KKyAgICov
CisgIHVpbnQ4X3QgKigqQWxsb2NhdGVEYXRhU2VjdGlvbikodm9pZCAqT2JqZWN0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnRwdHJfdCBTaXplLCB1bnNpZ25lZCBBbGln
bm1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgU2VjdGlv
bklELCBMTFZNQm9vbCBJc1JlYWRPbmx5KTsKKyAgCisgIC8qKgorICAgKiBUaGlzIG1ldGhvZCBy
ZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24uIEFzIHN1Y2ggaXQg
aXMKKyAgICogb25seSB1c2VmdWwgZm9yIHJlc29sdmluZyBsaWJyYXJ5IHN5bWJvbHMsIG5vdCBj
b2RlIGdlbmVyYXRlZCBzeW1ib2xzLgorICAgKgorICAgKiBJZiBBYm9ydE9uRmFpbHVyZSBpcyBm
YWxzZSBhbmQgbm8gZnVuY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpcworICAgKiBmb3VuZCwg
dGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbnVsbCBwb2ludGVyLiBPdGhlcndpc2UsIGl0IHByaW50
cyBhCisgICAqIG1lc3NhZ2UgdG8gc3RkZXJyIGFuZCBhYm9ydHMuCisgICAqCisgICAqIFRoaXMg
ZnVuY3Rpb24gaXMgb3B0aW9uYWwuIElmIGl0IGlzIE5VTEwsIHRoZW4gYSBkZWZhdWx0IGltcGxl
bWVudGF0aW9uCisgICAqIGlzIHByb3ZpZGVkLCB3aGljaCBhbHdheXMgcmV0dXJucyBOVUxMIGlm
ICFBYm9ydE9uRmFpbHVyZSwgYW5kIGFsd2F5cworICAgKiBhYm9ydHMgb3RoZXJ3aXNlLiBUaGUg
ZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyB1c2VmdWwgaWYgeW91IGtub3cgdGhhdAorICAgKiB0
aGUgY29kZSB5b3UgYXJlIGV4ZWN1dGluZyB3aWxsIG5ldmVyIGJlIHJlc29sdmluZyBleHRlcm5h
bCByZWZlcmVuY2VzLgorICAgKi8KKyAgdm9pZCAqKCpHZXRQb2ludGVyVG9OYW1lZEZ1bmN0aW9u
KSh2b2lkICpPYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMTFZN
Qm9vbCBBYm9ydE9uRmFpbHVyZSk7CisgIAorICAvKioKKyAgICogVGhpcyBtZXRob2QgaXMgY2Fs
bGVkIHdoZW4gb2JqZWN0IGxvYWRpbmcgaXMgY29tcGxldGUgYW5kIHNlY3Rpb24gcGFnZQorICAg
KiBwZXJtaXNzaW9ucyBjYW4gYmUgYXBwbGllZC4gIEl0IGlzIHVwIHRvIHRoZSBtZW1vcnkgbWFu
YWdlciBpbXBsZW1lbnRhdGlvbgorICAgKiB0byBkZWNpZGUgd2hldGhlciBvciBub3QgdG8gYWN0
IG9uIHRoaXMgbWV0aG9kLiAgVGhlIG1lbW9yeSBtYW5hZ2VyIHdpbGwKKyAgICogdHlwaWNhbGx5
IGFsbG9jYXRlIGFsbCBzZWN0aW9ucyBhcyByZWFkLXdyaXRlIGFuZCB0aGVuIGFwcGx5IHNwZWNp
ZmljCisgICAqIHBlcm1pc3Npb25zIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLgorICAgKgor
ICAgKiBSZXR1cm5zIHRydWUgaWYgYW4gZXJyb3Igb2NjdXJyZWQsIGZhbHNlIG90aGVyd2lzZS4g
SWYgYW4gZXJyb3Igb2NjdXJyZWQsCisgICAqIHlvdSBtYXkgb3B0aW9uYWxseSBzZXQgKkVyck1z
ZyB0byBwb2ludCB0byBhIHN0cmluZyBhbGxvY2F0ZWQgdXNpbmcKKyAgICogTExWTUNyZWF0ZU1l
c3NhZ2UoKS4KKyAgICoKKyAgICogVGhpcyBmdW5jdGlvbiBpcyBvcHRpb25hbC4gSWYgaXQgaXMg
TlVMTCwgdGhlbiBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KKyAgICogaXMgcHJvaWRlZCwgd2hp
Y2ggYWx3YXlzIGRvZXMgbm90aGluZyBhbmQgcmV0dXJucyBmYWxzZSAoaS5lLiAwKS4gVGhpcyBp
cworICAgKiB1c2VmdWwgaWYgeW91ciBtZW1vcnkgbWFuYWdlciBhbHJlYWR5IHNldHMgcGVybWlz
c2lvbnMgd2hlbiBhbGxvY2F0aW5nCisgICAqIHNlY3Rpb25zLgorICAgKi8KKyAgTExWTUJvb2wg
KCpBcHBseVBlcm1pc3Npb25zKSh2b2lkICpPYmplY3QsIGNoYXIgKipFcnJNc2cpOworICAKKyAg
LyoqCisgICAqIFJlZ2lzdGVyIHRoZSBFSCBmcmFtZXMgd2l0aCB0aGUgcnVudGltZSBzbyB0aGF0
IEMrKyBleGNlcHRpb25zIHdvcmsuCisgICAqCisgICAqIFRoaXMgZnVuY3Rpb24gaXMgb3B0aW9u
YWwuIElmIGl0IGlzIE5VTEwsIHRoZW4gYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCisgICAqIGlz
IHByb2lkZWQsIHdoaWNoIGFsd2F5cyBkb2VzIG5vdGhpbmcuIFRoaXMgaXMgdXNlZnVsIGlmIHlv
dSBhcmUgbm90CisgICAqIHVzaW5nIEMrKyBleGNlcHRpb25zLgorICAgKi8KKyAgdm9pZCAoKlJl
Z2lzdGVyRUhGcmFtZXMpKHZvaWQgKk9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIFNlY3Rpb25EYXRhLCBzaXplX3QgU2VjdGlvbkRhdGFTaXplKTsKKyAgCisg
IC8qKgorICAgKiBOb3RpZnkgdGhlIGRlc3RydWN0aW9uIG9mIHRoZSBNQ0pJVCBtZW1vcnkgbWFu
YWdlci4gVGhpcyB3aWxsIGdldCBjYWxsZWQKKyAgICogd2hlbiB0aGUgTUNKSVQgZXhlY3V0aW9u
IGVuZ2luZSBpcyBkZXN0cm95ZWQuCisgICAqCisgICAqIFRoaXMgZnVuY3Rpb24gaXMgb3B0aW9u
YWwuIElmIGl0IGlzIE5VTEwsIHRoZW4gYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCisgICAqIGlz
IHByb3ZpZGVkLCB3aGljaCBhbHdheXMgZG9lcyBub3RoaW5nLgorICAgKi8KKyAgdm9pZCAoKkRl
c3Ryb3kpKHZvaWQgKk9iamVjdCk7Cit9OworCiBzdHJ1Y3QgTExWTU1DSklUQ29tcGlsZXJPcHRp
b25zIHsKICAgdW5zaWduZWQgT3B0TGV2ZWw7CiAgIExMVk1Db2RlTW9kZWwgQ29kZU1vZGVsOwog
ICBMTFZNQm9vbCBOb0ZyYW1lUG9pbnRlckVsaW07CiAgIExMVk1Cb29sIEVuYWJsZUZhc3RJU2Vs
OworICBzdHJ1Y3QgTExWTU1DSklUTWVtb3J5TWFuYWdlckZ1bmN0aW9ucyAqTUNKTU1GdW5jdGlv
bnM7CisgIHNpemVfdCBTaXplT2ZNQ0pNTUZ1bmN0aW9uczsKKyAgdm9pZCAqTUNKTU1PYmplY3Q7
CiB9OwogCiAvKj09PS0tIE9wZXJhdGlvbnMgb24gZ2VuZXJpYyB2YWx1ZXMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0qLwpJbmRleDogbGliL0V4ZWN1dGlvbkVuZ2lu
ZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaWIvRXhlY3V0aW9uRW5naW5lL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAxODE4NDgpCisrKyBsaWIvRXhlY3V0aW9uRW5naW5lL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogYWRkX2xsdm1fbGlicmFy
eShMTFZNRXhlY3V0aW9uRW5naW5lCiAgIEV4ZWN1dGlvbkVuZ2luZS5jcHAKICAgRXhlY3V0aW9u
RW5naW5lQmluZGluZ3MuY3BwCisgIFJURHlsZE1lbW9yeU1hbmFnZXIuY3BwCiAgIFRhcmdldFNl
bGVjdC5jcHAKICAgKQogCkluZGV4OiBsaWIvRXhlY3V0aW9uRW5naW5lL0V4ZWN1dGlvbkVuZ2lu
ZUJpbmRpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaWIvRXhlY3V0aW9uRW5naW5lL0V4ZWN1dGlv
bkVuZ2luZUJpbmRpbmdzLmNwcAkocmV2aXNpb24gMTgxODQ4KQorKysgbGliL0V4ZWN1dGlvbkVu
Z2luZS9FeGVjdXRpb25FbmdpbmVCaW5kaW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1LDYg
KzE1LDcgQEAKICNpbmNsdWRlICJsbHZtLWMvRXhlY3V0aW9uRW5naW5lLmgiCiAjaW5jbHVkZSAi
bGx2bS9FeGVjdXRpb25FbmdpbmUvRXhlY3V0aW9uRW5naW5lLmgiCiAjaW5jbHVkZSAibGx2bS9F
eGVjdXRpb25FbmdpbmUvR2VuZXJpY1ZhbHVlLmgiCisjaW5jbHVkZSAibGx2bS9FeGVjdXRpb25F
bmdpbmUvUlREeWxkTWVtb3J5TWFuYWdlci5oIgogI2luY2x1ZGUgImxsdm0vSVIvRGVyaXZlZFR5
cGVzLmgiCiAjaW5jbHVkZSAibGx2bS9JUi9Nb2R1bGUuaCIKICNpbmNsdWRlICJsbHZtL1N1cHBv
cnQvRXJyb3JIYW5kbGluZy5oIgpAQCAtMTU3LDE1ICsxNTgsMTEyIEBACiB2b2lkIExMVk1Jbml0
aWFsaXplTUNKSVRDb21waWxlck9wdGlvbnMoTExWTU1DSklUQ29tcGlsZXJPcHRpb25zICpQYXNz
ZWRPcHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBTaXplT2ZQYXNzZWRPcHRpb25zKSB7CiAgIExMVk1NQ0pJVENvbXBpbGVyT3B0aW9ucyBvcHRp
b25zOwotICBvcHRpb25zLk9wdExldmVsID0gMDsKKyAgbWVtc2V0KCZvcHRpb25zLCAwLCBzaXpl
b2Yob3B0aW9ucykpOyAvLyBNb3N0IGZpZWxkcyBhcmUgemVybyBieSBkZWZhdWx0LgogICBvcHRp
b25zLkNvZGVNb2RlbCA9IExMVk1Db2RlTW9kZWxKSVREZWZhdWx0OwotICBvcHRpb25zLk5vRnJh
bWVQb2ludGVyRWxpbSA9IGZhbHNlOwotICBvcHRpb25zLkVuYWJsZUZhc3RJU2VsID0gZmFsc2U7
CiAgIAogICBtZW1jcHkoUGFzc2VkT3B0aW9ucywgJm9wdGlvbnMsCiAgICAgICAgICBzdGQ6Om1p
bihzaXplb2Yob3B0aW9ucyksIFNpemVPZlBhc3NlZE9wdGlvbnMpKTsKIH0KIAorbmFtZXNwYWNl
IHsKKworY2xhc3MgQmluZGluZ01lbW9yeU1hbmFnZXIgOiBwdWJsaWMgUlREeWxkTWVtb3J5TWFu
YWdlciB7CitwdWJsaWM6CisgIEJpbmRpbmdNZW1vcnlNYW5hZ2VyKGNvbnN0IExMVk1NQ0pJVE1l
bW9yeU1hbmFnZXJGdW5jdGlvbnMmIEZ1bmN0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAg
dm9pZCAqT2JqZWN0KTsKKyAgdmlydHVhbCB+QmluZGluZ01lbW9yeU1hbmFnZXIoKTsKKyAgCisg
IHZvaWQgZGVsZXRlU2lsZW50bHkoKTsKKyAgCisgIHZpcnR1YWwgdWludDhfdCAqYWxsb2NhdGVD
b2RlU2VjdGlvbih1aW50cHRyX3QgU2l6ZSwgdW5zaWduZWQgQWxpZ25tZW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgU2VjdGlvbklEKTsKKworICB2
aXJ0dWFsIHVpbnQ4X3QgKmFsbG9jYXRlRGF0YVNlY3Rpb24odWludHB0cl90IFNpemUsIHVuc2ln
bmVkIEFsaWdubWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIFNlY3Rpb25JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgaXNSZWFkT25seSk7CisKKyAgdmlydHVhbCBib29sIGFwcGx5UGVybWlzc2lvbnMoc3Rk
OjpzdHJpbmcgKkVyck1zZyk7CisKKyAgdm9pZCByZWdpc3RlckVIRnJhbWVzKFN0cmluZ1JlZiBT
ZWN0aW9uRGF0YSk7CisKKyAgdmlydHVhbCB2b2lkICpnZXRQb2ludGVyVG9OYW1lZEZ1bmN0aW9u
KGNvbnN0IHN0ZDo6c3RyaW5nICZOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBBYm9ydE9uRmFpbHVyZSk7CisgIAorcHJpdmF0ZToKKyAgTExWTU1D
SklUTWVtb3J5TWFuYWdlckZ1bmN0aW9ucyBGdW5jdGlvbnM7CisgIHZvaWQgKk9iamVjdDsKK307
CisKK0JpbmRpbmdNZW1vcnlNYW5hZ2VyOjpCaW5kaW5nTWVtb3J5TWFuYWdlcigKKyAgY29uc3Qg
TExWTU1DSklUTWVtb3J5TWFuYWdlckZ1bmN0aW9ucyYgRnVuY3Rpb25zLAorICB2b2lkICpPYmpl
Y3QpCisgIDogRnVuY3Rpb25zKEZ1bmN0aW9ucyksIE9iamVjdChPYmplY3QpIHsKKyAgYXNzZXJ0
KEZ1bmN0aW9ucy5BbGxvY2F0ZUNvZGVTZWN0aW9uICYmCisgICAgICAgICAiTm8gQWxsb2NhdGVD
b2RlU2VjdGlvbiBmdW5jdGlvbiBwcm92aWRlZCEiKTsKKyAgYXNzZXJ0KEZ1bmN0aW9ucy5BbGxv
Y2F0ZURhdGFTZWN0aW9uICYmCisgICAgICAgICAiTm8gQWxsb2NhdGVEYXRhU2VjdGlvbiBmdW5j
dGlvbiBwcm92aWRlZCEiKTsKK30KKworQmluZGluZ01lbW9yeU1hbmFnZXI6On5CaW5kaW5nTWVt
b3J5TWFuYWdlcigpIHsKKyAgaWYgKEZ1bmN0aW9ucy5EZXN0cm95KQorICAgIEZ1bmN0aW9ucy5E
ZXN0cm95KE9iamVjdCk7Cit9CisKK3ZvaWQgQmluZGluZ01lbW9yeU1hbmFnZXI6OmRlbGV0ZVNp
bGVudGx5KCkgeworICBGdW5jdGlvbnMuRGVzdHJveSA9IDA7CisgIGRlbGV0ZSB0aGlzOworfQor
Cit1aW50OF90ICpCaW5kaW5nTWVtb3J5TWFuYWdlcjo6YWxsb2NhdGVDb2RlU2VjdGlvbigKKyAg
dWludHB0cl90IFNpemUsIHVuc2lnbmVkIEFsaWdubWVudCwgdW5zaWduZWQgU2VjdGlvbklEKSB7
CisgIHJldHVybiBGdW5jdGlvbnMuQWxsb2NhdGVDb2RlU2VjdGlvbihPYmplY3QsIFNpemUsIEFs
aWdubWVudCwgU2VjdGlvbklEKTsKK30KKwordWludDhfdCAqQmluZGluZ01lbW9yeU1hbmFnZXI6
OmFsbG9jYXRlRGF0YVNlY3Rpb24oCisgIHVpbnRwdHJfdCBTaXplLCB1bnNpZ25lZCBBbGlnbm1l
bnQsIHVuc2lnbmVkIFNlY3Rpb25JRCwgYm9vbCBpc1JlYWRPbmx5KSB7CisgIHJldHVybiBGdW5j
dGlvbnMuQWxsb2NhdGVEYXRhU2VjdGlvbihPYmplY3QsIFNpemUsIEFsaWdubWVudCwgU2VjdGlv
bklELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWFkT25seSk7
Cit9CisKK2Jvb2wgQmluZGluZ01lbW9yeU1hbmFnZXI6OmFwcGx5UGVybWlzc2lvbnMoc3RkOjpz
dHJpbmcgKkVyck1zZykgeworICBpZiAoIUZ1bmN0aW9ucy5BcHBseVBlcm1pc3Npb25zKQorICAg
IHJldHVybiBmYWxzZTsKKyAgCisgIGNoYXIgKmVyck1zZ0NTdHJpbmc7CisgIGJvb2wgcmVzdWx0
ID0gRnVuY3Rpb25zLkFwcGx5UGVybWlzc2lvbnMoT2JqZWN0LCAmZXJyTXNnQ1N0cmluZyk7Cisg
IGFzc2VydCgocmVzdWx0IHx8ICFlcnJNc2dDU3RyaW5nKSAmJgorICAgICAgICAgIkRpZCBub3Qg
ZXhwZWN0IGFuIGVycm9yIG1lc3NhZ2UgaWYgQXBwbHlQZXJtaXNzaW9ucyBzdWNjZWVkZWQiKTsK
KyAgaWYgKGVyck1zZ0NTdHJpbmcpIHsKKyAgICAqRXJyTXNnID0gZXJyTXNnQ1N0cmluZzsKKyAg
ICBmcmVlKGVyck1zZ0NTdHJpbmcpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
QmluZGluZ01lbW9yeU1hbmFnZXI6OnJlZ2lzdGVyRUhGcmFtZXMoU3RyaW5nUmVmIFNlY3Rpb25E
YXRhKSB7CisgIGlmICghRnVuY3Rpb25zLlJlZ2lzdGVyRUhGcmFtZXMpCisgICAgcmV0dXJuOwor
ICAKKyAgRnVuY3Rpb25zLlJlZ2lzdGVyRUhGcmFtZXMoT2JqZWN0LCBTZWN0aW9uRGF0YS5kYXRh
KCksIFNlY3Rpb25EYXRhLnNpemUoKSk7Cit9CisKK3ZvaWQgKkJpbmRpbmdNZW1vcnlNYW5hZ2Vy
OjpnZXRQb2ludGVyVG9OYW1lZEZ1bmN0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZOYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBB
Ym9ydE9uRmFpbHVyZSkgeworICBpZiAoIUZ1bmN0aW9ucy5HZXRQb2ludGVyVG9OYW1lZEZ1bmN0
aW9uKSB7CisgICAgaWYgKEFib3J0T25GYWlsdXJlKQorICAgICAgcmVwb3J0X2ZhdGFsX2Vycm9y
KCJQcm9ncmFtIHVzZWQgZXh0ZXJuYWwgZnVuY3Rpb24gJyIgKyBOYW1lICsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAiJyB3aGljaCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgYmVjYXVzZSBubyAi
CisgICAgICAgICAgICAgICAgICAgICAgICAgIkdldFBvaW50ZXJUb05hbWVkRnVuY3Rpb24gaW1w
bGVtZW50YXRpb24gd2FzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAicHJvdmlkZWQhIik7
CisgICAgcmV0dXJuIDA7CisgIH0KKyAgCisgIHJldHVybiBGdW5jdGlvbnMuR2V0UG9pbnRlclRv
TmFtZWRGdW5jdGlvbihPYmplY3QsIE5hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFib3J0T25GYWlsdXJlKTsKK30KKworfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCisKIExMVk1Cb29sIExMVk1DcmVhdGVNQ0pJVENvbXBpbGVyRm9yTW9k
dWxlKAogICAgIExMVk1FeGVjdXRpb25FbmdpbmVSZWYgKk91dEpJVCwgTExWTU1vZHVsZVJlZiBN
LAogICAgIExMVk1NQ0pJVENvbXBpbGVyT3B0aW9ucyAqUGFzc2VkT3B0aW9ucywgc2l6ZV90IFNp
emVPZlBhc3NlZE9wdGlvbnMsCkBAIC0xOTksMTEgKzI5NywyOSBAQAogICAgICAgICAgLnNldE9w
dExldmVsKChDb2RlR2VuT3B0OjpMZXZlbClvcHRpb25zLk9wdExldmVsKQogICAgICAgICAgLnNl
dENvZGVNb2RlbCh1bndyYXAob3B0aW9ucy5Db2RlTW9kZWwpKQogICAgICAgICAgLnNldFRhcmdl
dE9wdGlvbnModGFyZ2V0T3B0aW9ucyk7CisgIAorICBCaW5kaW5nTWVtb3J5TWFuYWdlciAqTUNK
TU0gPSAwOworICBpZiAob3B0aW9ucy5TaXplT2ZNQ0pNTUZ1bmN0aW9ucykgeworICAgIExMVk1N
Q0pJVE1lbW9yeU1hbmFnZXJGdW5jdGlvbnMgZnVuY3Rpb25zOworICAgIGlmIChvcHRpb25zLlNp
emVPZk1DSk1NRnVuY3Rpb25zID4gc2l6ZW9mKGZ1bmN0aW9ucykpIHsKKyAgICAgICpPdXRFcnJv
ciA9IHN0cmR1cCgKKyAgICAgICAgIlJlZnVzaW5nIHRvIHVzZSBNQ0pJVCBtZW1vcnkgbWFuYWdl
ciBmdW5jdGlvbnMgc3RydWN0IHRoYXQgaXMgbGFyZ2VyICIKKyAgICAgICAgInRoYW4gbXkgb3du
OyBhc3N1bWluZyBMTFZNIGxpYnJhcnkgbWlzbWF0Y2guIik7CisgICAgICByZXR1cm4gMTsKKyAg
ICB9CisgICAgbWVtc2V0KCZmdW5jdGlvbnMsIDAsIHNpemVvZihmdW5jdGlvbnMpKTsKKyAgICBt
ZW1jcHkoJmZ1bmN0aW9ucywgb3B0aW9ucy5NQ0pNTUZ1bmN0aW9ucywgb3B0aW9ucy5TaXplT2ZN
Q0pNTUZ1bmN0aW9ucyk7CisgICAgTUNKTU0gPSBuZXcgQmluZGluZ01lbW9yeU1hbmFnZXIoZnVu
Y3Rpb25zLCBvcHRpb25zLk1DSk1NT2JqZWN0KTsKKyAgICBidWlsZGVyLnNldE1DSklUTWVtb3J5
TWFuYWdlcihNQ0pNTSk7CisgIH0KKyAgCiAgIGlmIChFeGVjdXRpb25FbmdpbmUgKkpJVCA9IGJ1
aWxkZXIuY3JlYXRlKCkpIHsKICAgICAqT3V0SklUID0gd3JhcChKSVQpOwogICAgIHJldHVybiAw
OwogICB9CiAgICpPdXRFcnJvciA9IHN0cmR1cChFcnJvci5jX3N0cigpKTsKKyAgaWYgKE1DSk1N
KQorICAgIE1DSk1NLT5kZWxldGVTaWxlbnRseSgpOwogICByZXR1cm4gMTsKIH0KIApJbmRleDog
bGliL0V4ZWN1dGlvbkVuZ2luZS9SVER5bGRNZW1vcnlNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBsaWIvRXhlY3V0aW9uRW5naW5lL1JURHlsZE1lbW9yeU1hbmFnZXIuY3BwCShyZXZpc2lvbiAw
KQorKysgbGliL0V4ZWN1dGlvbkVuZ2luZS9SVER5bGRNZW1vcnlNYW5hZ2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDIxIEBACisvLz09PS0tIFJURHlsZE1lbW9yeU1hbmFnZXIuY3Bw
IC0gTWVtb3J5IG1hbmFnZXIgZm9yIE1DLUpJVCAtLS0tLSotIEMrKyAtKi09PT0vLworLy8KKy8v
ICAgICAgICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKy8v
CisvLyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxs
aW5vaXMgT3BlbiBTb3VyY2UKKy8vIExpY2Vuc2UuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWls
cy4KKy8vCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworLy8KKy8vIEltcGxlbWVudGF0aW9uIG9m
IHRoZSBydW50aW1lIGR5bmFtaWMgbWVtb3J5IG1hbmFnZXIgYmFzZSBjbGFzcy4KKy8vCisvLz09
PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS09PT0vLworCisjaW5jbHVkZSAibGx2bS9FeGVjdXRpb25FbmdpbmUvUlRE
eWxkTWVtb3J5TWFuYWdlci5oIgorCituYW1lc3BhY2UgbGx2bSB7CisKK1JURHlsZE1lbW9yeU1h
bmFnZXI6On5SVER5bGRNZW1vcnlNYW5hZ2VyKCkge30KK3ZvaWQgUlREeWxkTWVtb3J5TWFuYWdl
cjo6cmVnaXN0ZXJFSEZyYW1lcyhTdHJpbmdSZWYgU2VjdGlvbkRhdGEpIHt9CisKK30gLy8gbmFt
ZXNwYWNlIGxsdm0KSW5kZXg6IGxpYi9FeGVjdXRpb25FbmdpbmUvUnVudGltZUR5bGQvUnVudGlt
ZUR5bGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGxpYi9FeGVjdXRpb25FbmdpbmUvUnVudGltZUR5bGQv
UnVudGltZUR5bGQuY3BwCShyZXZpc2lvbiAxODE4NDgpCisrKyBsaWIvRXhlY3V0aW9uRW5naW5l
L1J1bnRpbWVEeWxkL1J1bnRpbWVEeWxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQs
NiBAQAogdXNpbmcgbmFtZXNwYWNlIGxsdm06Om9iamVjdDsKIAogLy8gRW1wdHkgb3V0LW9mLWxp
bmUgdmlydHVhbCBkZXN0cnVjdG9yIGFzIHRoZSBrZXkgZnVuY3Rpb24uCi1SVER5bGRNZW1vcnlN
YW5hZ2VyOjp+UlREeWxkTWVtb3J5TWFuYWdlcigpIHt9Ci12b2lkIFJURHlsZE1lbW9yeU1hbmFn
ZXI6OnJlZ2lzdGVyRUhGcmFtZXMoU3RyaW5nUmVmIFNlY3Rpb25EYXRhKSB7fQogUnVudGltZUR5
bGRJbXBsOjp+UnVudGltZUR5bGRJbXBsKCkge30KIAogbmFtZXNwYWNlIGxsdm0gewpJbmRleDog
bGliL0V4ZWN1dGlvbkVuZ2luZS9SdW50aW1lRHlsZC9SdW50aW1lRHlsZE1hY2hPLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBsaWIvRXhlY3V0aW9uRW5naW5lL1J1bnRpbWVEeWxkL1J1bnRpbWVEeWxkTWFj
aE8uY3BwCShyZXZpc2lvbiAxODE4NDgpCisrKyBsaWIvRXhlY3V0aW9uRW5naW5lL1J1bnRpbWVE
eWxkL1J1bnRpbWVEeWxkTWFjaE8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjcsNiArMzI3LDgg
QEAKICAgICBWYWx1ZS5TZWN0aW9uSUQgPSBmaW5kT3JFbWl0U2VjdGlvbihPYmosIFNlYywgdHJ1
ZSwgT2JqU2VjdGlvblRvSUQpOwogICAgIHVpbnQ2NF90IEFkZHI7CiAgICAgU2VjLmdldEFkZHJl
c3MoQWRkcik7CisgICAgaWYgKElzUENSZWwpCisgICAgICBBZGRyIC09IE9mZnNldCArIDQ7CiAg
ICAgVmFsdWUuQWRkZW5kID0gQWRkZW5kIC0gQWRkcjsKICAgfQogCkluZGV4OiBsaWIvSVIvQ29y
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gbGliL0lSL0NvcmUuY3BwCShyZXZpc2lvbiAxODE4NDgpCisr
KyBsaWIvSVIvQ29yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDEwIEBACiAKIC8q
PT09LS0gRXJyb3IgaGFuZGxpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLT09PSovCiAKK2NoYXIgKkxMVk1DcmVhdGVNZXNzYWdlKGNvbnN0IGNo
YXIgKk1lc3NhZ2UpIHsKKyAgcmV0dXJuIHN0cmR1cChNZXNzYWdlKTsKK30KKwogdm9pZCBMTFZN
RGlzcG9zZU1lc3NhZ2UoY2hhciAqTWVzc2FnZSkgewogICBmcmVlKE1lc3NhZ2UpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201909</attachid>
            <date>2013-05-15 18:52:31 -0700</date>
            <delta_ts>2013-05-18 09:11:19 -0700</delta_ts>
            <desc>LLVM patch to expose MCJITMemoryManager callbacks</desc>
            <filename>mcjmm-c.patch</filename>
            <type>text/plain</type>
            <size>27573</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IGluY2x1ZGUvbGx2bS9FeGVjdXRpb25FbmdpbmUvUlREeWxkTWVtb3J5TWFuYWdlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGluY2x1ZGUvbGx2bS9FeGVjdXRpb25FbmdpbmUvUlREeWxkTWVtb3J5
TWFuYWdlci5oCShyZXZpc2lvbiAwKQorKysgaW5jbHVkZS9sbHZtL0V4ZWN1dGlvbkVuZ2luZS9S
VER5bGRNZW1vcnlNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLy89
PT0tLSBSVER5bGRNZW1vcnlNYW5hZ2VyLmNwcCAtIE1lbW9yeSBtYW5hZ2VyIGZvciBNQy1KSVQg
LS0tLS0qLSBDKysgLSotPT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZN
IENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisvLyBMaWNlbnNl
LiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09
Ly8KKy8vCisvLyBJbnRlcmZhY2Ugb2YgdGhlIHJ1bnRpbWUgZHluYW1pYyBtZW1vcnkgbWFuYWdl
ciBiYXNlIGNsYXNzLgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisKKyNpZm5kZWYgTExW
TV9FWEVDVVRJT05FTkdJTkVfUlRfRFlMRF9NRU1PUllfTUFOQUdFUl9ICisjZGVmaW5lIExMVk1f
RVhFQ1VUSU9ORU5HSU5FX1JUX0RZTERfTUVNT1JZX01BTkFHRVJfSAorCisjaW5jbHVkZSAibGx2
bS9BRFQvU3RyaW5nUmVmLmgiCisjaW5jbHVkZSAibGx2bS9TdXBwb3J0L01lbW9yeS5oIgorCitu
YW1lc3BhY2UgbGx2bSB7CisKKy8vIFJ1bnRpbWVEeWxkIGNsaWVudHMgb2Z0ZW4gd2FudCB0byBo
YW5kbGUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9mCisvLyB3aGF0IGdldHMgcGxhY2VkIHdoZXJl
LiBGb3IgSklUIGNsaWVudHMsIHRoaXMgaXMgdGhlIHN1YnNldCBvZgorLy8gSklUTWVtb3J5TWFu
YWdlciByZXF1aXJlZCBmb3IgZHluYW1pYyBsb2FkaW5nIG9mIGJpbmFyaWVzLgorLy8KKy8vIEZJ
WE1FOiBBcyB0aGUgUnVudGltZUR5bGQgZmlsbHMgb3V0LCBhZGRpdGlvbmFsIHJvdXRpbmVzIHdp
bGwgYmUgbmVlZGVkCisvLyAgICAgICAgZm9yIHRoZSB2YXJ5aW5nIHR5cGVzIG9mIG9iamVjdHMg
dG8gYmUgYWxsb2NhdGVkLgorY2xhc3MgUlREeWxkTWVtb3J5TWFuYWdlciB7CisgIFJURHlsZE1l
bW9yeU1hbmFnZXIoY29uc3QgUlREeWxkTWVtb3J5TWFuYWdlciYpIExMVk1fREVMRVRFRF9GVU5D
VElPTjsKKyAgdm9pZCBvcGVyYXRvcj0oY29uc3QgUlREeWxkTWVtb3J5TWFuYWdlciYpIExMVk1f
REVMRVRFRF9GVU5DVElPTjsKK3B1YmxpYzoKKyAgUlREeWxkTWVtb3J5TWFuYWdlcigpIHt9Cisg
IHZpcnR1YWwgflJURHlsZE1lbW9yeU1hbmFnZXIoKTsKKworICAvLy8gQWxsb2NhdGUgYSBtZW1v
cnkgYmxvY2sgb2YgKGF0IGxlYXN0KSB0aGUgZ2l2ZW4gc2l6ZSBzdWl0YWJsZSBmb3IKKyAgLy8v
IGV4ZWN1dGFibGUgY29kZS4gVGhlIFNlY3Rpb25JRCBpcyBhIHVuaXF1ZSBpZGVudGlmaWVyIGFz
c2lnbmVkIGJ5IHRoZSBKSVQKKyAgLy8vIGVuZ2luZSwgYW5kIG9wdGlvbmFsbHkgcmVjb3JkZWQg
YnkgdGhlIG1lbW9yeSBtYW5hZ2VyIHRvIGFjY2VzcyBhIGxvYWRlZAorICAvLy8gc2VjdGlvbi4K
KyAgdmlydHVhbCB1aW50OF90ICphbGxvY2F0ZUNvZGVTZWN0aW9uKHVpbnRwdHJfdCBTaXplLCB1
bnNpZ25lZCBBbGlnbm1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBTZWN0aW9uSUQpID0gMDsKKworICAvLy8gQWxsb2NhdGUgYSBtZW1vcnkgYmxv
Y2sgb2YgKGF0IGxlYXN0KSB0aGUgZ2l2ZW4gc2l6ZSBzdWl0YWJsZSBmb3IgZGF0YS4KKyAgLy8v
IFRoZSBTZWN0aW9uSUQgaXMgYSB1bmlxdWUgaWRlbnRpZmllciBhc3NpZ25lZCBieSB0aGUgSklU
IGVuZ2luZSwgYW5kCisgIC8vLyBvcHRpb25hbGx5IHJlY29yZGVkIGJ5IHRoZSBtZW1vcnkgbWFu
YWdlciB0byBhY2Nlc3MgYSBsb2FkZWQgc2VjdGlvbi4KKyAgdmlydHVhbCB1aW50OF90ICphbGxv
Y2F0ZURhdGFTZWN0aW9uKHVpbnRwdHJfdCBTaXplLCB1bnNpZ25lZCBBbGlnbm1lbnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBTZWN0aW9uSUQsIGJv
b2wgSXNSZWFkT25seSkgPSAwOworCisgIC8vLyBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBhZGRy
ZXNzIG9mIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24uIEFzIHN1Y2ggaXQgaXMKKyAgLy8vIG9ubHkg
dXNlZnVsIGZvciByZXNvbHZpbmcgbGlicmFyeSBzeW1ib2xzLCBub3QgY29kZSBnZW5lcmF0ZWQg
c3ltYm9scy4KKyAgLy8vCisgIC8vLyBJZiBBYm9ydE9uRmFpbHVyZSBpcyBmYWxzZSBhbmQgbm8g
ZnVuY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpcworICAvLy8gZm91bmQsIHRoaXMgZnVuY3Rp
b24gcmV0dXJucyBhIG51bGwgcG9pbnRlci4gT3RoZXJ3aXNlLCBpdCBwcmludHMgYQorICAvLy8g
bWVzc2FnZSB0byBzdGRlcnIgYW5kIGFib3J0cy4KKyAgdmlydHVhbCB2b2lkICpnZXRQb2ludGVy
VG9OYW1lZEZ1bmN0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZOYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBBYm9ydE9uRmFpbHVyZSA9IHRydWUpID0g
MDsKKworICAvLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gb2JqZWN0IGxvYWRpbmcgaXMg
Y29tcGxldGUgYW5kIHNlY3Rpb24gcGFnZQorICAvLy8gcGVybWlzc2lvbnMgY2FuIGJlIGFwcGxp
ZWQuICBJdCBpcyB1cCB0byB0aGUgbWVtb3J5IG1hbmFnZXIgaW1wbGVtZW50YXRpb24KKyAgLy8v
IHRvIGRlY2lkZSB3aGV0aGVyIG9yIG5vdCB0byBhY3Qgb24gdGhpcyBtZXRob2QuICBUaGUgbWVt
b3J5IG1hbmFnZXIgd2lsbAorICAvLy8gdHlwaWNhbGx5IGFsbG9jYXRlIGFsbCBzZWN0aW9ucyBh
cyByZWFkLXdyaXRlIGFuZCB0aGVuIGFwcGx5IHNwZWNpZmljCisgIC8vLyBwZXJtaXNzaW9ucyB3
aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC4KKyAgLy8vCisgIC8vLyBSZXR1cm5zIHRydWUgaWYg
YW4gZXJyb3Igb2NjdXJyZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAgdmlydHVhbCBib29sIGFwcGx5
UGVybWlzc2lvbnMoc3RkOjpzdHJpbmcgKkVyck1zZyA9IDApID0gMDsKKworICAvLy8gUmVnaXN0
ZXIgdGhlIEVIIGZyYW1lcyB3aXRoIHRoZSBydW50aW1lIHNvIHRoYXQgYysrIGV4Y2VwdGlvbnMg
d29yay4gVGhlCisgIC8vLyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4gTG9v
ayBhdCBTZWN0aW9uTWVtb3J5TWFuYWdlciBmb3Igb25lCisgIC8vLyB0aGF0IHVzZXMgX19yZWdp
c3Rlcl9mcmFtZS4KKyAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRUhGcmFtZXMoU3RyaW5nUmVmIFNl
Y3Rpb25EYXRhKTsKK307CisKK30gLy8gbmFtZXNwYWNlIGxsdm0KKworI2VuZGlmIC8vIExMVk1f
RVhFQ1VUSU9ORU5HSU5FX1JUX0RZTERfTUVNT1JZX01BTkFHRVJfSApJbmRleDogaW5jbHVkZS9s
bHZtL0V4ZWN1dGlvbkVuZ2luZS9SdW50aW1lRHlsZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGluY2x1ZGUv
bGx2bS9FeGVjdXRpb25FbmdpbmUvUnVudGltZUR5bGQuaAkocmV2aXNpb24gMTgxODQ4KQorKysg
aW5jbHVkZS9sbHZtL0V4ZWN1dGlvbkVuZ2luZS9SdW50aW1lRHlsZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlICJsbHZtL0FEVC9TdHJpbmdSZWYuaCIKICNp
bmNsdWRlICJsbHZtL0V4ZWN1dGlvbkVuZ2luZS9PYmplY3RCdWZmZXIuaCIKKyNpbmNsdWRlICJs
bHZtL0V4ZWN1dGlvbkVuZ2luZS9SVER5bGRNZW1vcnlNYW5hZ2VyLmgiCiAjaW5jbHVkZSAibGx2
bS9TdXBwb3J0L01lbW9yeS5oIgogCiBuYW1lc3BhY2UgbGx2bSB7CkBAIC0yMyw1NiArMjQsNiBA
QAogY2xhc3MgUnVudGltZUR5bGRJbXBsOwogY2xhc3MgT2JqZWN0SW1hZ2U7CiAKLS8vIFJ1bnRp
bWVEeWxkIGNsaWVudHMgb2Z0ZW4gd2FudCB0byBoYW5kbGUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50
IG9mCi0vLyB3aGF0IGdldHMgcGxhY2VkIHdoZXJlLiBGb3IgSklUIGNsaWVudHMsIHRoaXMgaXMg
dGhlIHN1YnNldCBvZgotLy8gSklUTWVtb3J5TWFuYWdlciByZXF1aXJlZCBmb3IgZHluYW1pYyBs
b2FkaW5nIG9mIGJpbmFyaWVzLgotLy8KLS8vIEZJWE1FOiBBcyB0aGUgUnVudGltZUR5bGQgZmls
bHMgb3V0LCBhZGRpdGlvbmFsIHJvdXRpbmVzIHdpbGwgYmUgbmVlZGVkCi0vLyAgICAgICAgZm9y
IHRoZSB2YXJ5aW5nIHR5cGVzIG9mIG9iamVjdHMgdG8gYmUgYWxsb2NhdGVkLgotY2xhc3MgUlRE
eWxkTWVtb3J5TWFuYWdlciB7Ci0gIFJURHlsZE1lbW9yeU1hbmFnZXIoY29uc3QgUlREeWxkTWVt
b3J5TWFuYWdlciYpIExMVk1fREVMRVRFRF9GVU5DVElPTjsKLSAgdm9pZCBvcGVyYXRvcj0oY29u
c3QgUlREeWxkTWVtb3J5TWFuYWdlciYpIExMVk1fREVMRVRFRF9GVU5DVElPTjsKLXB1YmxpYzoK
LSAgUlREeWxkTWVtb3J5TWFuYWdlcigpIHt9Ci0gIHZpcnR1YWwgflJURHlsZE1lbW9yeU1hbmFn
ZXIoKTsKLQotICAvLy8gQWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgb2YgKGF0IGxlYXN0KSB0aGUg
Z2l2ZW4gc2l6ZSBzdWl0YWJsZSBmb3IKLSAgLy8vIGV4ZWN1dGFibGUgY29kZS4gVGhlIFNlY3Rp
b25JRCBpcyBhIHVuaXF1ZSBpZGVudGlmaWVyIGFzc2lnbmVkIGJ5IHRoZSBKSVQKLSAgLy8vIGVu
Z2luZSwgYW5kIG9wdGlvbmFsbHkgcmVjb3JkZWQgYnkgdGhlIG1lbW9yeSBtYW5hZ2VyIHRvIGFj
Y2VzcyBhIGxvYWRlZAotICAvLy8gc2VjdGlvbi4KLSAgdmlydHVhbCB1aW50OF90ICphbGxvY2F0
ZUNvZGVTZWN0aW9uKHVpbnRwdHJfdCBTaXplLCB1bnNpZ25lZCBBbGlnbm1lbnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBTZWN0aW9uSUQpID0gMDsK
LQotICAvLy8gQWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgb2YgKGF0IGxlYXN0KSB0aGUgZ2l2ZW4g
c2l6ZSBzdWl0YWJsZSBmb3IgZGF0YS4KLSAgLy8vIFRoZSBTZWN0aW9uSUQgaXMgYSB1bmlxdWUg
aWRlbnRpZmllciBhc3NpZ25lZCBieSB0aGUgSklUIGVuZ2luZSwgYW5kCi0gIC8vLyBvcHRpb25h
bGx5IHJlY29yZGVkIGJ5IHRoZSBtZW1vcnkgbWFuYWdlciB0byBhY2Nlc3MgYSBsb2FkZWQgc2Vj
dGlvbi4KLSAgdmlydHVhbCB1aW50OF90ICphbGxvY2F0ZURhdGFTZWN0aW9uKHVpbnRwdHJfdCBT
aXplLCB1bnNpZ25lZCBBbGlnbm1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBTZWN0aW9uSUQsIGJvb2wgSXNSZWFkT25seSkgPSAwOwotCi0gIC8v
LyBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBzcGVjaWZpZWQgZnVuY3Rp
b24uIEFzIHN1Y2ggaXQgaXMKLSAgLy8vIG9ubHkgdXNlZnVsIGZvciByZXNvbHZpbmcgbGlicmFy
eSBzeW1ib2xzLCBub3QgY29kZSBnZW5lcmF0ZWQgc3ltYm9scy4KLSAgLy8vCi0gIC8vLyBJZiBB
Ym9ydE9uRmFpbHVyZSBpcyBmYWxzZSBhbmQgbm8gZnVuY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gbmFt
ZSBpcwotICAvLy8gZm91bmQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIG51bGwgcG9pbnRlci4g
T3RoZXJ3aXNlLCBpdCBwcmludHMgYQotICAvLy8gbWVzc2FnZSB0byBzdGRlcnIgYW5kIGFib3J0
cy4KLSAgdmlydHVhbCB2b2lkICpnZXRQb2ludGVyVG9OYW1lZEZ1bmN0aW9uKGNvbnN0IHN0ZDo6
c3RyaW5nICZOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBBYm9ydE9uRmFpbHVyZSA9IHRydWUpID0gMDsKLQotICAvLy8gVGhpcyBtZXRob2QgaXMg
Y2FsbGVkIHdoZW4gb2JqZWN0IGxvYWRpbmcgaXMgY29tcGxldGUgYW5kIHNlY3Rpb24gcGFnZQot
ICAvLy8gcGVybWlzc2lvbnMgY2FuIGJlIGFwcGxpZWQuICBJdCBpcyB1cCB0byB0aGUgbWVtb3J5
IG1hbmFnZXIgaW1wbGVtZW50YXRpb24KLSAgLy8vIHRvIGRlY2lkZSB3aGV0aGVyIG9yIG5vdCB0
byBhY3Qgb24gdGhpcyBtZXRob2QuICBUaGUgbWVtb3J5IG1hbmFnZXIgd2lsbAotICAvLy8gdHlw
aWNhbGx5IGFsbG9jYXRlIGFsbCBzZWN0aW9ucyBhcyByZWFkLXdyaXRlIGFuZCB0aGVuIGFwcGx5
IHNwZWNpZmljCi0gIC8vLyBwZXJtaXNzaW9ucyB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC4K
LSAgLy8vCi0gIC8vLyBSZXR1cm5zIHRydWUgaWYgYW4gZXJyb3Igb2NjdXJyZWQsIGZhbHNlIG90
aGVyd2lzZS4KLSAgdmlydHVhbCBib29sIGFwcGx5UGVybWlzc2lvbnMoc3RkOjpzdHJpbmcgKkVy
ck1zZyA9IDApID0gMDsKLQotICAvLy8gUmVnaXN0ZXIgdGhlIEVIIGZyYW1lcyB3aXRoIHRoZSBy
dW50aW1lIHNvIHRoYXQgYysrIGV4Y2VwdGlvbnMgd29yay4gVGhlCi0gIC8vLyBkZWZhdWx0IGlt
cGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4gTG9vayBhdCBTZWN0aW9uTWVtb3J5TWFuYWdlciBm
b3Igb25lCi0gIC8vLyB0aGF0IHVzZXMgX19yZWdpc3Rlcl9mcmFtZS4KLSAgdmlydHVhbCB2b2lk
IHJlZ2lzdGVyRUhGcmFtZXMoU3RyaW5nUmVmIFNlY3Rpb25EYXRhKTsKLX07Ci0KIGNsYXNzIFJ1
bnRpbWVEeWxkIHsKICAgUnVudGltZUR5bGQoY29uc3QgUnVudGltZUR5bGQgJikgTExWTV9ERUxF
VEVEX0ZVTkNUSU9OOwogICB2b2lkIG9wZXJhdG9yPShjb25zdCBSdW50aW1lRHlsZCAmKSBMTFZN
X0RFTEVURURfRlVOQ1RJT047CkluZGV4OiBpbmNsdWRlL2xsdm0tYy9Db3JlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gaW5jbHVkZS9sbHZtLWMvQ29yZS5oCShyZXZpc2lvbiAxODE4NDgpCisrKyBpbmNsdWRl
L2xsdm0tYy9Db3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxMSw2ICs0MTEsNyBAQAogCiAvKj09
PS0tIEVycm9yIGhhbmRsaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS09PT0qLwogCitjaGFyICpMTFZNQ3JlYXRlTWVzc2FnZShjb25zdCBjaGFy
ICpNZXNzYWdlKTsKIHZvaWQgTExWTURpc3Bvc2VNZXNzYWdlKGNoYXIgKk1lc3NhZ2UpOwogCiAK
SW5kZXg6IGluY2x1ZGUvbGx2bS1jL0V4ZWN1dGlvbkVuZ2luZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGlu
Y2x1ZGUvbGx2bS1jL0V4ZWN1dGlvbkVuZ2luZS5oCShyZXZpc2lvbiAxODE4NDgpCisrKyBpbmNs
dWRlL2xsdm0tYy9FeGVjdXRpb25FbmdpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEgKzQx
LDkwIEBACiB0eXBlZGVmIHN0cnVjdCBMTFZNT3BhcXVlR2VuZXJpY1ZhbHVlICpMTFZNR2VuZXJp
Y1ZhbHVlUmVmOwogdHlwZWRlZiBzdHJ1Y3QgTExWTU9wYXF1ZUV4ZWN1dGlvbkVuZ2luZSAqTExW
TUV4ZWN1dGlvbkVuZ2luZVJlZjsKIAorc3RydWN0IExMVk1NQ0pJVE1lbW9yeU1hbmFnZXJGdW5j
dGlvbnMgeworICAvKioKKyAgICogQWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgb2YgKGF0IGxlYXN0
KSB0aGUgZ2l2ZW4gc2l6ZSBzdWl0YWJsZSBmb3IKKyAgICogZXhlY3V0YWJsZSBjb2RlLiBUaGUg
U2VjdGlvbklEIGlzIGEgdW5pcXVlIGlkZW50aWZpZXIgYXNzaWduZWQgYnkgdGhlIEpJVAorICAg
KiBlbmdpbmUsIGFuZCBvcHRpb25hbGx5IHJlY29yZGVkIGJ5IHRoZSBtZW1vcnkgbWFuYWdlciB0
byBhY2Nlc3MgYSBsb2FkZWQKKyAgICogc2VjdGlvbi4gVGhpcyBpcyBhIG1hbmRhdG9yeSBmdW5j
dGlvbiBhbmQgbXVzdCBiZSBub24tTlVMTC4KKyAgICovCisgIHVpbnQ4X3QgKigqQWxsb2NhdGVD
b2RlU2VjdGlvbikodm9pZCAqT2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVpbnRwdHJfdCBTaXplLCB1bnNpZ25lZCBBbGlnbm1lbnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgU2VjdGlvbklEKTsKKyAgCisgIC8qKgorICAgKiBB
bGxvY2F0ZSBhIG1lbW9yeSBibG9jayBvZiAoYXQgbGVhc3QpIHRoZSBnaXZlbiBzaXplIHN1aXRh
YmxlIGZvciBkYXRhLgorICAgKiBUaGUgU2VjdGlvbklEIGlzIGEgdW5pcXVlIGlkZW50aWZpZXIg
YXNzaWduZWQgYnkgdGhlIEpJVCBlbmdpbmUsIGFuZAorICAgKiBvcHRpb25hbGx5IHJlY29yZGVk
IGJ5IHRoZSBtZW1vcnkgbWFuYWdlciB0byBhY2Nlc3MgYSBsb2FkZWQgc2VjdGlvbi4KKyAgICog
VGhpcyBpcyBhIG1hbmRhdG9yeSBmdW5jdGlvbiBhbmQgbXVzdCBiZSBub24tTlVMTC4KKyAgICov
CisgIHVpbnQ4X3QgKigqQWxsb2NhdGVEYXRhU2VjdGlvbikodm9pZCAqT2JqZWN0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnRwdHJfdCBTaXplLCB1bnNpZ25lZCBBbGln
bm1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgU2VjdGlv
bklELCBMTFZNQm9vbCBJc1JlYWRPbmx5KTsKKyAgCisgIC8qKgorICAgKiBUaGlzIG1ldGhvZCBy
ZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24uIEFzIHN1Y2ggaXQg
aXMKKyAgICogb25seSB1c2VmdWwgZm9yIHJlc29sdmluZyBsaWJyYXJ5IHN5bWJvbHMsIG5vdCBj
b2RlIGdlbmVyYXRlZCBzeW1ib2xzLgorICAgKgorICAgKiBJZiBBYm9ydE9uRmFpbHVyZSBpcyBm
YWxzZSBhbmQgbm8gZnVuY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpcworICAgKiBmb3VuZCwg
dGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbnVsbCBwb2ludGVyLiBPdGhlcndpc2UsIGl0IHByaW50
cyBhCisgICAqIG1lc3NhZ2UgdG8gc3RkZXJyIGFuZCBhYm9ydHMuCisgICAqCisgICAqIFRoaXMg
ZnVuY3Rpb24gaXMgb3B0aW9uYWwuIElmIGl0IGlzIE5VTEwsIHRoZW4gYSBkZWZhdWx0IGltcGxl
bWVudGF0aW9uCisgICAqIGlzIHByb3ZpZGVkLCB3aGljaCBhbHdheXMgcmV0dXJucyBOVUxMIGlm
ICFBYm9ydE9uRmFpbHVyZSwgYW5kIGFsd2F5cworICAgKiBhYm9ydHMgb3RoZXJ3aXNlLiBUaGUg
ZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyB1c2VmdWwgaWYgeW91IGtub3cgdGhhdAorICAgKiB0
aGUgY29kZSB5b3UgYXJlIGV4ZWN1dGluZyB3aWxsIG5ldmVyIGJlIHJlc29sdmluZyBleHRlcm5h
bCByZWZlcmVuY2VzLgorICAgKi8KKyAgdm9pZCAqKCpHZXRQb2ludGVyVG9OYW1lZEZ1bmN0aW9u
KSh2b2lkICpPYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMTFZN
Qm9vbCBBYm9ydE9uRmFpbHVyZSk7CisgIAorICAvKioKKyAgICogVGhpcyBtZXRob2QgaXMgY2Fs
bGVkIHdoZW4gb2JqZWN0IGxvYWRpbmcgaXMgY29tcGxldGUgYW5kIHNlY3Rpb24gcGFnZQorICAg
KiBwZXJtaXNzaW9ucyBjYW4gYmUgYXBwbGllZC4gIEl0IGlzIHVwIHRvIHRoZSBtZW1vcnkgbWFu
YWdlciBpbXBsZW1lbnRhdGlvbgorICAgKiB0byBkZWNpZGUgd2hldGhlciBvciBub3QgdG8gYWN0
IG9uIHRoaXMgbWV0aG9kLiAgVGhlIG1lbW9yeSBtYW5hZ2VyIHdpbGwKKyAgICogdHlwaWNhbGx5
IGFsbG9jYXRlIGFsbCBzZWN0aW9ucyBhcyByZWFkLXdyaXRlIGFuZCB0aGVuIGFwcGx5IHNwZWNp
ZmljCisgICAqIHBlcm1pc3Npb25zIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLgorICAgKgor
ICAgKiBSZXR1cm5zIHRydWUgaWYgYW4gZXJyb3Igb2NjdXJyZWQsIGZhbHNlIG90aGVyd2lzZS4g
SWYgYW4gZXJyb3Igb2NjdXJyZWQsCisgICAqIHlvdSBtYXkgb3B0aW9uYWxseSBzZXQgKkVyck1z
ZyB0byBwb2ludCB0byBhIHN0cmluZyBhbGxvY2F0ZWQgdXNpbmcKKyAgICogTExWTUNyZWF0ZU1l
c3NhZ2UoKS4KKyAgICoKKyAgICogVGhpcyBmdW5jdGlvbiBpcyBvcHRpb25hbC4gSWYgaXQgaXMg
TlVMTCwgdGhlbiBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KKyAgICogaXMgcHJvaWRlZCwgd2hp
Y2ggYWx3YXlzIGRvZXMgbm90aGluZyBhbmQgcmV0dXJucyBmYWxzZSAoaS5lLiAwKS4gVGhpcyBp
cworICAgKiB1c2VmdWwgaWYgeW91ciBtZW1vcnkgbWFuYWdlciBhbHJlYWR5IHNldHMgcGVybWlz
c2lvbnMgd2hlbiBhbGxvY2F0aW5nCisgICAqIHNlY3Rpb25zLgorICAgKi8KKyAgTExWTUJvb2wg
KCpBcHBseVBlcm1pc3Npb25zKSh2b2lkICpPYmplY3QsIGNoYXIgKipFcnJNc2cpOworICAKKyAg
LyoqCisgICAqIFJlZ2lzdGVyIHRoZSBFSCBmcmFtZXMgd2l0aCB0aGUgcnVudGltZSBzbyB0aGF0
IEMrKyBleGNlcHRpb25zIHdvcmsuCisgICAqCisgICAqIFRoaXMgZnVuY3Rpb24gaXMgb3B0aW9u
YWwuIElmIGl0IGlzIE5VTEwsIHRoZW4gYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCisgICAqIGlz
IHByb2lkZWQsIHdoaWNoIGFsd2F5cyBkb2VzIG5vdGhpbmcuIFRoaXMgaXMgdXNlZnVsIGlmIHlv
dSBhcmUgbm90CisgICAqIHVzaW5nIEMrKyBleGNlcHRpb25zLgorICAgKi8KKyAgdm9pZCAoKlJl
Z2lzdGVyRUhGcmFtZXMpKHZvaWQgKk9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIFNlY3Rpb25EYXRhLCBzaXplX3QgU2VjdGlvbkRhdGFTaXplKTsKKyAgCisg
IC8qKgorICAgKiBOb3RpZnkgdGhlIGRlc3RydWN0aW9uIG9mIHRoZSBNQ0pJVCBtZW1vcnkgbWFu
YWdlci4gVGhpcyB3aWxsIGdldCBjYWxsZWQKKyAgICogd2hlbiB0aGUgTUNKSVQgZXhlY3V0aW9u
IGVuZ2luZSBpcyBkZXN0cm95ZWQuCisgICAqCisgICAqIFRoaXMgZnVuY3Rpb24gaXMgb3B0aW9u
YWwuIElmIGl0IGlzIE5VTEwsIHRoZW4gYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCisgICAqIGlz
IHByb3ZpZGVkLCB3aGljaCBhbHdheXMgZG9lcyBub3RoaW5nLgorICAgKi8KKyAgdm9pZCAoKkRl
c3Ryb3kpKHZvaWQgKk9iamVjdCk7Cit9OworCiBzdHJ1Y3QgTExWTU1DSklUQ29tcGlsZXJPcHRp
b25zIHsKICAgdW5zaWduZWQgT3B0TGV2ZWw7CiAgIExMVk1Db2RlTW9kZWwgQ29kZU1vZGVsOwog
ICBMTFZNQm9vbCBOb0ZyYW1lUG9pbnRlckVsaW07CiAgIExMVk1Cb29sIEVuYWJsZUZhc3RJU2Vs
OworICBzdHJ1Y3QgTExWTU1DSklUTWVtb3J5TWFuYWdlckZ1bmN0aW9ucyAqTUNKTU1GdW5jdGlv
bnM7CisgIHNpemVfdCBTaXplT2ZNQ0pNTUZ1bmN0aW9uczsKKyAgdm9pZCAqTUNKTU1PYmplY3Q7
CiB9OwogCiAvKj09PS0tIE9wZXJhdGlvbnMgb24gZ2VuZXJpYyB2YWx1ZXMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0qLwpJbmRleDogbGliL0V4ZWN1dGlvbkVuZ2lu
ZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaWIvRXhlY3V0aW9uRW5naW5lL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAxODE4NDgpCisrKyBsaWIvRXhlY3V0aW9uRW5naW5lL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogYWRkX2xsdm1fbGlicmFy
eShMTFZNRXhlY3V0aW9uRW5naW5lCiAgIEV4ZWN1dGlvbkVuZ2luZS5jcHAKICAgRXhlY3V0aW9u
RW5naW5lQmluZGluZ3MuY3BwCisgIFJURHlsZE1lbW9yeU1hbmFnZXIuY3BwCiAgIFRhcmdldFNl
bGVjdC5jcHAKICAgKQogCkluZGV4OiBsaWIvRXhlY3V0aW9uRW5naW5lL0V4ZWN1dGlvbkVuZ2lu
ZUJpbmRpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaWIvRXhlY3V0aW9uRW5naW5lL0V4ZWN1dGlv
bkVuZ2luZUJpbmRpbmdzLmNwcAkocmV2aXNpb24gMTgxODQ4KQorKysgbGliL0V4ZWN1dGlvbkVu
Z2luZS9FeGVjdXRpb25FbmdpbmVCaW5kaW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1LDYg
KzE1LDcgQEAKICNpbmNsdWRlICJsbHZtLWMvRXhlY3V0aW9uRW5naW5lLmgiCiAjaW5jbHVkZSAi
bGx2bS9FeGVjdXRpb25FbmdpbmUvRXhlY3V0aW9uRW5naW5lLmgiCiAjaW5jbHVkZSAibGx2bS9F
eGVjdXRpb25FbmdpbmUvR2VuZXJpY1ZhbHVlLmgiCisjaW5jbHVkZSAibGx2bS9FeGVjdXRpb25F
bmdpbmUvUlREeWxkTWVtb3J5TWFuYWdlci5oIgogI2luY2x1ZGUgImxsdm0vSVIvRGVyaXZlZFR5
cGVzLmgiCiAjaW5jbHVkZSAibGx2bS9JUi9Nb2R1bGUuaCIKICNpbmNsdWRlICJsbHZtL1N1cHBv
cnQvRXJyb3JIYW5kbGluZy5oIgpAQCAtMTU3LDE1ICsxNTgsMTEyIEBACiB2b2lkIExMVk1Jbml0
aWFsaXplTUNKSVRDb21waWxlck9wdGlvbnMoTExWTU1DSklUQ29tcGlsZXJPcHRpb25zICpQYXNz
ZWRPcHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBTaXplT2ZQYXNzZWRPcHRpb25zKSB7CiAgIExMVk1NQ0pJVENvbXBpbGVyT3B0aW9ucyBvcHRp
b25zOwotICBvcHRpb25zLk9wdExldmVsID0gMDsKKyAgbWVtc2V0KCZvcHRpb25zLCAwLCBzaXpl
b2Yob3B0aW9ucykpOyAvLyBNb3N0IGZpZWxkcyBhcmUgemVybyBieSBkZWZhdWx0LgogICBvcHRp
b25zLkNvZGVNb2RlbCA9IExMVk1Db2RlTW9kZWxKSVREZWZhdWx0OwotICBvcHRpb25zLk5vRnJh
bWVQb2ludGVyRWxpbSA9IGZhbHNlOwotICBvcHRpb25zLkVuYWJsZUZhc3RJU2VsID0gZmFsc2U7
CiAgIAogICBtZW1jcHkoUGFzc2VkT3B0aW9ucywgJm9wdGlvbnMsCiAgICAgICAgICBzdGQ6Om1p
bihzaXplb2Yob3B0aW9ucyksIFNpemVPZlBhc3NlZE9wdGlvbnMpKTsKIH0KIAorbmFtZXNwYWNl
IHsKKworY2xhc3MgQmluZGluZ01lbW9yeU1hbmFnZXIgOiBwdWJsaWMgUlREeWxkTWVtb3J5TWFu
YWdlciB7CitwdWJsaWM6CisgIEJpbmRpbmdNZW1vcnlNYW5hZ2VyKGNvbnN0IExMVk1NQ0pJVE1l
bW9yeU1hbmFnZXJGdW5jdGlvbnMmIEZ1bmN0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAg
dm9pZCAqT2JqZWN0KTsKKyAgdmlydHVhbCB+QmluZGluZ01lbW9yeU1hbmFnZXIoKTsKKyAgCisg
IHZvaWQgZGVsZXRlU2lsZW50bHkoKTsKKyAgCisgIHZpcnR1YWwgdWludDhfdCAqYWxsb2NhdGVD
b2RlU2VjdGlvbih1aW50cHRyX3QgU2l6ZSwgdW5zaWduZWQgQWxpZ25tZW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgU2VjdGlvbklEKTsKKworICB2
aXJ0dWFsIHVpbnQ4X3QgKmFsbG9jYXRlRGF0YVNlY3Rpb24odWludHB0cl90IFNpemUsIHVuc2ln
bmVkIEFsaWdubWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIFNlY3Rpb25JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgaXNSZWFkT25seSk7CisKKyAgdmlydHVhbCBib29sIGFwcGx5UGVybWlzc2lvbnMoc3Rk
OjpzdHJpbmcgKkVyck1zZyk7CisKKyAgdm9pZCByZWdpc3RlckVIRnJhbWVzKFN0cmluZ1JlZiBT
ZWN0aW9uRGF0YSk7CisKKyAgdmlydHVhbCB2b2lkICpnZXRQb2ludGVyVG9OYW1lZEZ1bmN0aW9u
KGNvbnN0IHN0ZDo6c3RyaW5nICZOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBBYm9ydE9uRmFpbHVyZSk7CisgIAorcHJpdmF0ZToKKyAgTExWTU1D
SklUTWVtb3J5TWFuYWdlckZ1bmN0aW9ucyBGdW5jdGlvbnM7CisgIHZvaWQgKk9iamVjdDsKK307
CisKK0JpbmRpbmdNZW1vcnlNYW5hZ2VyOjpCaW5kaW5nTWVtb3J5TWFuYWdlcigKKyAgY29uc3Qg
TExWTU1DSklUTWVtb3J5TWFuYWdlckZ1bmN0aW9ucyYgRnVuY3Rpb25zLAorICB2b2lkICpPYmpl
Y3QpCisgIDogRnVuY3Rpb25zKEZ1bmN0aW9ucyksIE9iamVjdChPYmplY3QpIHsKKyAgYXNzZXJ0
KEZ1bmN0aW9ucy5BbGxvY2F0ZUNvZGVTZWN0aW9uICYmCisgICAgICAgICAiTm8gQWxsb2NhdGVD
b2RlU2VjdGlvbiBmdW5jdGlvbiBwcm92aWRlZCEiKTsKKyAgYXNzZXJ0KEZ1bmN0aW9ucy5BbGxv
Y2F0ZURhdGFTZWN0aW9uICYmCisgICAgICAgICAiTm8gQWxsb2NhdGVEYXRhU2VjdGlvbiBmdW5j
dGlvbiBwcm92aWRlZCEiKTsKK30KKworQmluZGluZ01lbW9yeU1hbmFnZXI6On5CaW5kaW5nTWVt
b3J5TWFuYWdlcigpIHsKKyAgaWYgKEZ1bmN0aW9ucy5EZXN0cm95KQorICAgIEZ1bmN0aW9ucy5E
ZXN0cm95KE9iamVjdCk7Cit9CisKK3ZvaWQgQmluZGluZ01lbW9yeU1hbmFnZXI6OmRlbGV0ZVNp
bGVudGx5KCkgeworICBGdW5jdGlvbnMuRGVzdHJveSA9IDA7CisgIGRlbGV0ZSB0aGlzOworfQor
Cit1aW50OF90ICpCaW5kaW5nTWVtb3J5TWFuYWdlcjo6YWxsb2NhdGVDb2RlU2VjdGlvbigKKyAg
dWludHB0cl90IFNpemUsIHVuc2lnbmVkIEFsaWdubWVudCwgdW5zaWduZWQgU2VjdGlvbklEKSB7
CisgIHJldHVybiBGdW5jdGlvbnMuQWxsb2NhdGVDb2RlU2VjdGlvbihPYmplY3QsIFNpemUsIEFs
aWdubWVudCwgU2VjdGlvbklEKTsKK30KKwordWludDhfdCAqQmluZGluZ01lbW9yeU1hbmFnZXI6
OmFsbG9jYXRlRGF0YVNlY3Rpb24oCisgIHVpbnRwdHJfdCBTaXplLCB1bnNpZ25lZCBBbGlnbm1l
bnQsIHVuc2lnbmVkIFNlY3Rpb25JRCwgYm9vbCBpc1JlYWRPbmx5KSB7CisgIHJldHVybiBGdW5j
dGlvbnMuQWxsb2NhdGVEYXRhU2VjdGlvbihPYmplY3QsIFNpemUsIEFsaWdubWVudCwgU2VjdGlv
bklELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWFkT25seSk7
Cit9CisKK2Jvb2wgQmluZGluZ01lbW9yeU1hbmFnZXI6OmFwcGx5UGVybWlzc2lvbnMoc3RkOjpz
dHJpbmcgKkVyck1zZykgeworICBpZiAoIUZ1bmN0aW9ucy5BcHBseVBlcm1pc3Npb25zKQorICAg
IHJldHVybiBmYWxzZTsKKyAgCisgIGNoYXIgKmVyck1zZ0NTdHJpbmcgPSAwOworICBib29sIHJl
c3VsdCA9IEZ1bmN0aW9ucy5BcHBseVBlcm1pc3Npb25zKE9iamVjdCwgJmVyck1zZ0NTdHJpbmcp
OworICBhc3NlcnQoKHJlc3VsdCB8fCAhZXJyTXNnQ1N0cmluZykgJiYKKyAgICAgICAgICJEaWQg
bm90IGV4cGVjdCBhbiBlcnJvciBtZXNzYWdlIGlmIEFwcGx5UGVybWlzc2lvbnMgc3VjY2VlZGVk
Iik7CisgIGlmIChlcnJNc2dDU3RyaW5nKSB7CisgICAgKkVyck1zZyA9IGVyck1zZ0NTdHJpbmc7
CisgICAgZnJlZShlcnJNc2dDU3RyaW5nKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIEJpbmRpbmdNZW1vcnlNYW5hZ2VyOjpyZWdpc3RlckVIRnJhbWVzKFN0cmluZ1JlZiBTZWN0
aW9uRGF0YSkgeworICBpZiAoIUZ1bmN0aW9ucy5SZWdpc3RlckVIRnJhbWVzKQorICAgIHJldHVy
bjsKKyAgCisgIEZ1bmN0aW9ucy5SZWdpc3RlckVIRnJhbWVzKE9iamVjdCwgU2VjdGlvbkRhdGEu
ZGF0YSgpLCBTZWN0aW9uRGF0YS5zaXplKCkpOworfQorCit2b2lkICpCaW5kaW5nTWVtb3J5TWFu
YWdlcjo6Z2V0UG9pbnRlclRvTmFtZWRGdW5jdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmTmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgQWJvcnRPbkZhaWx1cmUpIHsKKyAgaWYgKCFGdW5jdGlvbnMuR2V0UG9pbnRlclRvTmFtZWRG
dW5jdGlvbikgeworICAgIGlmIChBYm9ydE9uRmFpbHVyZSkKKyAgICAgIHJlcG9ydF9mYXRhbF9l
cnJvcigiUHJvZ3JhbSB1c2VkIGV4dGVybmFsIGZ1bmN0aW9uICciICsgTmFtZSArCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIicgd2hpY2ggY291bGQgbm90IGJlIHJlc29sdmVkIGJlY2F1c2Ug
bm8gIgorICAgICAgICAgICAgICAgICAgICAgICAgICJHZXRQb2ludGVyVG9OYW1lZEZ1bmN0aW9u
IGltcGxlbWVudGF0aW9uIHdhcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInByb3ZpZGVk
ISIpOworICAgIHJldHVybiAwOworICB9CisgIAorICByZXR1cm4gRnVuY3Rpb25zLkdldFBvaW50
ZXJUb05hbWVkRnVuY3Rpb24oT2JqZWN0LCBOYW1lLmNfc3RyKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYm9ydE9uRmFpbHVyZSk7Cit9CisKK30gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQorCiBMTFZNQm9vbCBMTFZNQ3JlYXRlTUNKSVRDb21waWxlckZv
ck1vZHVsZSgKICAgICBMTFZNRXhlY3V0aW9uRW5naW5lUmVmICpPdXRKSVQsIExMVk1Nb2R1bGVS
ZWYgTSwKICAgICBMTFZNTUNKSVRDb21waWxlck9wdGlvbnMgKlBhc3NlZE9wdGlvbnMsIHNpemVf
dCBTaXplT2ZQYXNzZWRPcHRpb25zLApAQCAtMTk5LDExICsyOTcsMjkgQEAKICAgICAgICAgIC5z
ZXRPcHRMZXZlbCgoQ29kZUdlbk9wdDo6TGV2ZWwpb3B0aW9ucy5PcHRMZXZlbCkKICAgICAgICAg
IC5zZXRDb2RlTW9kZWwodW53cmFwKG9wdGlvbnMuQ29kZU1vZGVsKSkKICAgICAgICAgIC5zZXRU
YXJnZXRPcHRpb25zKHRhcmdldE9wdGlvbnMpOworICAKKyAgQmluZGluZ01lbW9yeU1hbmFnZXIg
Kk1DSk1NID0gMDsKKyAgaWYgKG9wdGlvbnMuU2l6ZU9mTUNKTU1GdW5jdGlvbnMpIHsKKyAgICBM
TFZNTUNKSVRNZW1vcnlNYW5hZ2VyRnVuY3Rpb25zIGZ1bmN0aW9uczsKKyAgICBpZiAob3B0aW9u
cy5TaXplT2ZNQ0pNTUZ1bmN0aW9ucyA+IHNpemVvZihmdW5jdGlvbnMpKSB7CisgICAgICAqT3V0
RXJyb3IgPSBzdHJkdXAoCisgICAgICAgICJSZWZ1c2luZyB0byB1c2UgTUNKSVQgbWVtb3J5IG1h
bmFnZXIgZnVuY3Rpb25zIHN0cnVjdCB0aGF0IGlzIGxhcmdlciAiCisgICAgICAgICJ0aGFuIG15
IG93bjsgYXNzdW1pbmcgTExWTSBsaWJyYXJ5IG1pc21hdGNoLiIpOworICAgICAgcmV0dXJuIDE7
CisgICAgfQorICAgIG1lbXNldCgmZnVuY3Rpb25zLCAwLCBzaXplb2YoZnVuY3Rpb25zKSk7Cisg
ICAgbWVtY3B5KCZmdW5jdGlvbnMsIG9wdGlvbnMuTUNKTU1GdW5jdGlvbnMsIG9wdGlvbnMuU2l6
ZU9mTUNKTU1GdW5jdGlvbnMpOworICAgIE1DSk1NID0gbmV3IEJpbmRpbmdNZW1vcnlNYW5hZ2Vy
KGZ1bmN0aW9ucywgb3B0aW9ucy5NQ0pNTU9iamVjdCk7CisgICAgYnVpbGRlci5zZXRNQ0pJVE1l
bW9yeU1hbmFnZXIoTUNKTU0pOworICB9CisgIAogICBpZiAoRXhlY3V0aW9uRW5naW5lICpKSVQg
PSBidWlsZGVyLmNyZWF0ZSgpKSB7CiAgICAgKk91dEpJVCA9IHdyYXAoSklUKTsKICAgICByZXR1
cm4gMDsKICAgfQogICAqT3V0RXJyb3IgPSBzdHJkdXAoRXJyb3IuY19zdHIoKSk7CisgIGlmIChN
Q0pNTSkKKyAgICBNQ0pNTS0+ZGVsZXRlU2lsZW50bHkoKTsKICAgcmV0dXJuIDE7CiB9CiAKSW5k
ZXg6IGxpYi9FeGVjdXRpb25FbmdpbmUvUlREeWxkTWVtb3J5TWFuYWdlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gbGliL0V4ZWN1dGlvbkVuZ2luZS9SVER5bGRNZW1vcnlNYW5hZ2VyLmNwcAkocmV2aXNp
b24gMCkKKysrIGxpYi9FeGVjdXRpb25FbmdpbmUvUlREeWxkTWVtb3J5TWFuYWdlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyMSBAQAorLy89PT0tLSBSVER5bGRNZW1vcnlNYW5hZ2Vy
LmNwcCAtIE1lbW9yeSBtYW5hZ2VyIGZvciBNQy1KSVQgLS0tLS0qLSBDKysgLSotPT09Ly8KKy8v
CisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJl
CisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9m
IElsbGlub2lzIE9wZW4gU291cmNlCisvLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRl
dGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vCisvLyBJbXBsZW1lbnRhdGlv
biBvZiB0aGUgcnVudGltZSBkeW5hbWljIG1lbW9yeSBtYW5hZ2VyIGJhc2UgY2xhc3MuCisvLwor
Ly89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKworI2luY2x1ZGUgImxsdm0vRXhlY3V0aW9uRW5naW5l
L1JURHlsZE1lbW9yeU1hbmFnZXIuaCIKKworbmFtZXNwYWNlIGxsdm0geworCitSVER5bGRNZW1v
cnlNYW5hZ2VyOjp+UlREeWxkTWVtb3J5TWFuYWdlcigpIHt9Cit2b2lkIFJURHlsZE1lbW9yeU1h
bmFnZXI6OnJlZ2lzdGVyRUhGcmFtZXMoU3RyaW5nUmVmIFNlY3Rpb25EYXRhKSB7fQorCit9IC8v
IG5hbWVzcGFjZSBsbHZtCkluZGV4OiBsaWIvRXhlY3V0aW9uRW5naW5lL1J1bnRpbWVEeWxkL1J1
bnRpbWVEeWxkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaWIvRXhlY3V0aW9uRW5naW5lL1J1bnRpbWVE
eWxkL1J1bnRpbWVEeWxkLmNwcAkocmV2aXNpb24gMTgxODQ4KQorKysgbGliL0V4ZWN1dGlvbkVu
Z2luZS9SdW50aW1lRHlsZC9SdW50aW1lRHlsZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDgg
KzI0LDYgQEAKIHVzaW5nIG5hbWVzcGFjZSBsbHZtOjpvYmplY3Q7CiAKIC8vIEVtcHR5IG91dC1v
Zi1saW5lIHZpcnR1YWwgZGVzdHJ1Y3RvciBhcyB0aGUga2V5IGZ1bmN0aW9uLgotUlREeWxkTWVt
b3J5TWFuYWdlcjo6flJURHlsZE1lbW9yeU1hbmFnZXIoKSB7fQotdm9pZCBSVER5bGRNZW1vcnlN
YW5hZ2VyOjpyZWdpc3RlckVIRnJhbWVzKFN0cmluZ1JlZiBTZWN0aW9uRGF0YSkge30KIFJ1bnRp
bWVEeWxkSW1wbDo6flJ1bnRpbWVEeWxkSW1wbCgpIHt9CiAKIG5hbWVzcGFjZSBsbHZtIHsKSW5k
ZXg6IGxpYi9FeGVjdXRpb25FbmdpbmUvUnVudGltZUR5bGQvUnVudGltZUR5bGRNYWNoTy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gbGliL0V4ZWN1dGlvbkVuZ2luZS9SdW50aW1lRHlsZC9SdW50aW1lRHls
ZE1hY2hPLmNwcAkocmV2aXNpb24gMTgxODQ4KQorKysgbGliL0V4ZWN1dGlvbkVuZ2luZS9SdW50
aW1lRHlsZC9SdW50aW1lRHlsZE1hY2hPLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDYgKzMy
Nyw4IEBACiAgICAgVmFsdWUuU2VjdGlvbklEID0gZmluZE9yRW1pdFNlY3Rpb24oT2JqLCBTZWMs
IHRydWUsIE9ialNlY3Rpb25Ub0lEKTsKICAgICB1aW50NjRfdCBBZGRyOwogICAgIFNlYy5nZXRB
ZGRyZXNzKEFkZHIpOworICAgIGlmIChJc1BDUmVsKQorICAgICAgQWRkciAtPSBPZmZzZXQgKyA0
OwogICAgIFZhbHVlLkFkZGVuZCA9IEFkZGVuZCAtIEFkZHI7CiAgIH0KIApJbmRleDogbGliL0lS
L0NvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGxpYi9JUi9Db3JlLmNwcAkocmV2aXNpb24gMTgxODQ4
KQorKysgbGliL0lSL0NvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCwxMCBAQAog
CiAvKj09PS0tIEVycm9yIGhhbmRsaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS09PT0qLwogCitjaGFyICpMTFZNQ3JlYXRlTWVzc2FnZShjb25z
dCBjaGFyICpNZXNzYWdlKSB7CisgIHJldHVybiBzdHJkdXAoTWVzc2FnZSk7Cit9CisKIHZvaWQg
TExWTURpc3Bvc2VNZXNzYWdlKGNoYXIgKk1lc3NhZ2UpIHsKICAgZnJlZShNZXNzYWdlKTsKIH0K
SW5kZXg6IHVuaXR0ZXN0cy9FeGVjdXRpb25FbmdpbmUvTUNKSVQvTUNKSVRDQVBJVGVzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gdW5pdHRlc3RzL0V4ZWN1dGlvbkVuZ2luZS9NQ0pJVC9NQ0pJVENBUElU
ZXN0LmNwcAkocmV2aXNpb24gMTgxODQ4KQorKysgdW5pdHRlc3RzL0V4ZWN1dGlvbkVuZ2luZS9N
Q0pJVC9NQ0pJVENBUElUZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcsMTIgKzE3LDU4IEBA
CiAjaW5jbHVkZSAibGx2bS1jL0V4ZWN1dGlvbkVuZ2luZS5oIgogI2luY2x1ZGUgImxsdm0tYy9U
YXJnZXQuaCIKICNpbmNsdWRlICJsbHZtLWMvVHJhbnNmb3Jtcy9TY2FsYXIuaCIKKyNpbmNsdWRl
ICJsbHZtL0V4ZWN1dGlvbkVuZ2luZS9TZWN0aW9uTWVtb3J5TWFuYWdlci5oIgogI2luY2x1ZGUg
Imxsdm0vU3VwcG9ydC9Ib3N0LmgiCiAjaW5jbHVkZSAiTUNKSVRUZXN0QVBJQ29tbW9uLmgiCiAj
aW5jbHVkZSAiZ3Rlc3QvZ3Rlc3QuaCIKIAogdXNpbmcgbmFtZXNwYWNlIGxsdm07CiAKK3N0YXRp
YyBib29sIGRpZENhbGxBbGxvY2F0ZUNvZGVTZWN0aW9uOworCitzdGF0aWMgdWludDhfdCAqcm91
bmRUcmlwQWxsb2NhdGVDb2RlU2VjdGlvbih2b2lkICpvYmplY3QsIHVpbnRwdHJfdCBzaXplLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxp
Z25tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgc2VjdGlvbklEKSB7CisgIGRpZENhbGxBbGxvY2F0ZUNvZGVTZWN0aW9uID0gdHJ1ZTsK
KyAgcmV0dXJuIHN0YXRpY19jYXN0PFNlY3Rpb25NZW1vcnlNYW5hZ2VyKj4ob2JqZWN0KS0+YWxs
b2NhdGVDb2RlU2VjdGlvbigKKyAgICBzaXplLCBhbGlnbm1lbnQsIHNlY3Rpb25JRCk7Cit9CisK
K3N0YXRpYyB1aW50OF90ICpyb3VuZFRyaXBBbGxvY2F0ZURhdGFTZWN0aW9uKHZvaWQgKm9iamVj
dCwgdWludHB0cl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBhbGlnbm1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzZWN0aW9uSUQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBMTFZNQm9vbCBpc1JlYWRPbmx5KSB7CisgIHJldHVy
biBzdGF0aWNfY2FzdDxTZWN0aW9uTWVtb3J5TWFuYWdlcio+KG9iamVjdCktPmFsbG9jYXRlRGF0
YVNlY3Rpb24oCisgICAgc2l6ZSwgYWxpZ25tZW50LCBzZWN0aW9uSUQsIGlzUmVhZE9ubHkpOwor
fQorCitzdGF0aWMgTExWTUJvb2wgcm91bmRUcmlwQXBwbHlQZXJtaXNzaW9ucyh2b2lkICpvYmpl
Y3QsIGNoYXIgKiplcnJNc2cpIHsKKyAgc3RkOjpzdHJpbmcgZXJyTXNnU3RyaW5nOworICBib29s
IHJlc3VsdCA9CisgICAgc3RhdGljX2Nhc3Q8U2VjdGlvbk1lbW9yeU1hbmFnZXIqPihvYmplY3Qp
LT5hcHBseVBlcm1pc3Npb25zKCZlcnJNc2dTdHJpbmcpOworICBpZiAocmVzdWx0KSB7CisgICAg
KmVyck1zZyA9IExMVk1DcmVhdGVNZXNzYWdlKGVyck1zZ1N0cmluZy5jX3N0cigpKTsKKyAgICBy
ZXR1cm4gMTsKKyAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgKnJvdW5kVHJpcEdl
dFBvaW50ZXJUb05hbWVkRnVuY3Rpb24odm9pZCAqb2JqZWN0LCBjb25zdCBjaGFyICpuYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTExWTUJvb2wg
YWJvcnRPbkZhaWx1cmUpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PFNlY3Rpb25NZW1vcnlNYW5h
Z2VyKj4ob2JqZWN0KS0+Z2V0UG9pbnRlclRvTmFtZWRGdW5jdGlvbigKKyAgICBuYW1lLCBhYm9y
dE9uRmFpbHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJvdW5kVHJpcFJlZ2lzdGVyRUhGcmFtZXMo
dm9pZCAqb2JqZWN0LCBjb25zdCBjaGFyICpzZWN0aW9uRGF0YSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNlY3Rpb25EYXRhU2l6ZSkgeworICBzdGF0aWNf
Y2FzdDxTZWN0aW9uTWVtb3J5TWFuYWdlcio+KG9iamVjdCktPnJlZ2lzdGVyRUhGcmFtZXMoCisg
ICAgU3RyaW5nUmVmKHNlY3Rpb25EYXRhLCBzZWN0aW9uRGF0YVNpemUpKTsKK30KKworc3RhdGlj
IHZvaWQgcm91bmRUcmlwRGVzdHJveSh2b2lkICpvYmplY3QpIHsKKyAgZGVsZXRlIHN0YXRpY19j
YXN0PFNlY3Rpb25NZW1vcnlNYW5hZ2VyKj4ob2JqZWN0KTsKK30KKwogY2xhc3MgTUNKSVRDQVBJ
VGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0LCBwdWJsaWMgTUNKSVRUZXN0QVBJQ29tbW9uIHsK
IHByb3RlY3RlZDoKICAgTUNKSVRDQVBJVGVzdCgpIHsKQEAgLTM4LDYwICs4NCwxMjAgQEAKICAg
ICAvLyB0aGF0IHRoZXkgd2lsbCBmYWlsIHRoZSBNQ0pJVCBDIEFQSSB0ZXN0cy4KICAgICBVbnN1
cHBvcnRlZE9Tcy5wdXNoX2JhY2soVHJpcGxlOjpDeWd3aW4pOwogICB9Ci19OwotCi1URVNUX0Yo
TUNKSVRDQVBJVGVzdCwgc2ltcGxlX2Z1bmN0aW9uKSB7Ci0gIFNLSVBfVU5TVVBQT1JURURfUExB
VEZPUk07CiAgIAotICBjaGFyICplcnJvciA9IDA7CisgIHZpcnR1YWwgdm9pZCBTZXRVcCgpIHsK
KyAgICBkaWRDYWxsQWxsb2NhdGVDb2RlU2VjdGlvbiA9IGZhbHNlOworICAgIE1vZHVsZSA9IDA7
CisgICAgRnVuY3Rpb24gPSAwOworICAgIEVuZ2luZSA9IDA7CisgICAgRXJyb3IgPSAwOworICB9
CiAgIAotICAvLyBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIDQyLCBjb21waWxlcyBp
dCwgYW5kIHJ1bnMgaXQuCisgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpIHsKKyAgICBpZiAoRW5n
aW5lKQorICAgICAgTExWTURpc3Bvc2VFeGVjdXRpb25FbmdpbmUoRW5naW5lKTsKKyAgICBlbHNl
IGlmIChNb2R1bGUpCisgICAgICBMTFZNRGlzcG9zZU1vZHVsZShNb2R1bGUpOworICB9CiAgIAot
ICBMTFZNTW9kdWxlUmVmIG1vZHVsZSA9IExMVk1Nb2R1bGVDcmVhdGVXaXRoTmFtZSgic2ltcGxl
X21vZHVsZSIpOwotCi0gIExMVk1TZXRUYXJnZXQobW9kdWxlLCBIb3N0VHJpcGxlLmNfc3RyKCkp
OworICB2b2lkIGJ1aWxkU2ltcGxlRnVuY3Rpb24oKSB7CisgICAgTW9kdWxlID0gTExWTU1vZHVs
ZUNyZWF0ZVdpdGhOYW1lKCJzaW1wbGVfbW9kdWxlIik7CisgICAgCisgICAgTExWTVNldFRhcmdl
dChNb2R1bGUsIEhvc3RUcmlwbGUuY19zdHIoKSk7CisgICAgCisgICAgRnVuY3Rpb24gPSBMTFZN
QWRkRnVuY3Rpb24oCisgICAgICBNb2R1bGUsICJzaW1wbGVfZnVuY3Rpb24iLCBMTFZNRnVuY3Rp
b25UeXBlKExMVk1JbnQzMlR5cGUoKSwgMCwgMCwgMCkpOworICAgIExMVk1TZXRGdW5jdGlvbkNh
bGxDb252KEZ1bmN0aW9uLCBMTFZNQ0NhbGxDb252KTsKKyAgICAKKyAgICBMTFZNQmFzaWNCbG9j
a1JlZiBlbnRyeSA9IExMVk1BcHBlbmRCYXNpY0Jsb2NrKEZ1bmN0aW9uLCAiZW50cnkiKTsKKyAg
ICBMTFZNQnVpbGRlclJlZiBidWlsZGVyID0gTExWTUNyZWF0ZUJ1aWxkZXIoKTsKKyAgICBMTFZN
UG9zaXRpb25CdWlsZGVyQXRFbmQoYnVpbGRlciwgZW50cnkpOworICAgIExMVk1CdWlsZFJldChi
dWlsZGVyLCBMTFZNQ29uc3RJbnQoTExWTUludDMyVHlwZSgpLCA0MiwgMCkpOworICAgIAorICAg
IExMVk1WZXJpZnlNb2R1bGUoTW9kdWxlLCBMTFZNQWJvcnRQcm9jZXNzQWN0aW9uLCAmRXJyb3Ip
OworICAgIExMVk1EaXNwb3NlTWVzc2FnZShFcnJvcik7CisgICAgCisgICAgTExWTURpc3Bvc2VC
dWlsZGVyKGJ1aWxkZXIpOworICB9CiAgIAotICBMTFZNVmFsdWVSZWYgZnVuY3Rpb24gPSBMTFZN
QWRkRnVuY3Rpb24oCi0gICAgbW9kdWxlLCAic2ltcGxlX2Z1bmN0aW9uIiwgTExWTUZ1bmN0aW9u
VHlwZShMTFZNSW50MzJUeXBlKCksIDAsIDAsIDApKTsKLSAgTExWTVNldEZ1bmN0aW9uQ2FsbENv
bnYoZnVuY3Rpb24sIExMVk1DQ2FsbENvbnYpOworICB2b2lkIGJ1aWxkTUNKSVRPcHRpb25zKCkg
eworICAgIExMVk1Jbml0aWFsaXplTUNKSVRDb21waWxlck9wdGlvbnMoJk9wdGlvbnMsIHNpemVv
ZihPcHRpb25zKSk7CisgICAgT3B0aW9ucy5PcHRMZXZlbCA9IDI7CisgICAgCisgICAgLy8gSnVz
dCBlbnN1cmUgdGhhdCB0aGlzIGZpZWxkIHN0aWxsIGV4aXN0cy4KKyAgICBPcHRpb25zLk5vRnJh
bWVQb2ludGVyRWxpbSA9IGZhbHNlOworICB9CiAgIAotICBMTFZNQmFzaWNCbG9ja1JlZiBlbnRy
eSA9IExMVk1BcHBlbmRCYXNpY0Jsb2NrKGZ1bmN0aW9uLCAiZW50cnkiKTsKLSAgTExWTUJ1aWxk
ZXJSZWYgYnVpbGRlciA9IExMVk1DcmVhdGVCdWlsZGVyKCk7Ci0gIExMVk1Qb3NpdGlvbkJ1aWxk
ZXJBdEVuZChidWlsZGVyLCBlbnRyeSk7Ci0gIExMVk1CdWlsZFJldChidWlsZGVyLCBMTFZNQ29u
c3RJbnQoTExWTUludDMyVHlwZSgpLCA0MiwgMCkpOworICB2b2lkIHVzZVJvdW5kVHJpcFNlY3Rp
b25NZW1vcnlNYW5hZ2VyKCkgeworICAgIG1lbXNldCgmTUNKTU1GdW5jdGlvbnMsIDAsIHNpemVv
ZihNQ0pNTUZ1bmN0aW9ucykpOworICAgIE1DSk1NRnVuY3Rpb25zLkFsbG9jYXRlQ29kZVNlY3Rp
b24gPSByb3VuZFRyaXBBbGxvY2F0ZUNvZGVTZWN0aW9uOworICAgIE1DSk1NRnVuY3Rpb25zLkFs
bG9jYXRlRGF0YVNlY3Rpb24gPSByb3VuZFRyaXBBbGxvY2F0ZURhdGFTZWN0aW9uOworICAgIE1D
Sk1NRnVuY3Rpb25zLkFwcGx5UGVybWlzc2lvbnMgPSByb3VuZFRyaXBBcHBseVBlcm1pc3Npb25z
OworICAgIE1DSk1NRnVuY3Rpb25zLkdldFBvaW50ZXJUb05hbWVkRnVuY3Rpb24gPQorICAgICAg
cm91bmRUcmlwR2V0UG9pbnRlclRvTmFtZWRGdW5jdGlvbjsKKyAgICBNQ0pNTUZ1bmN0aW9ucy5S
ZWdpc3RlckVIRnJhbWVzID0gcm91bmRUcmlwUmVnaXN0ZXJFSEZyYW1lczsKKyAgICBNQ0pNTUZ1
bmN0aW9ucy5EZXN0cm95ID0gcm91bmRUcmlwRGVzdHJveTsKKyAgICAKKyAgICBPcHRpb25zLk1D
Sk1NRnVuY3Rpb25zID0gJk1DSk1NRnVuY3Rpb25zOworICAgIE9wdGlvbnMuU2l6ZU9mTUNKTU1G
dW5jdGlvbnMgPSBzaXplb2YoTUNKTU1GdW5jdGlvbnMpOworICAgIE9wdGlvbnMuTUNKTU1PYmpl
Y3QgPSBuZXcgU2VjdGlvbk1lbW9yeU1hbmFnZXIoKTsKKyAgfQogICAKLSAgTExWTVZlcmlmeU1v
ZHVsZShtb2R1bGUsIExMVk1BYm9ydFByb2Nlc3NBY3Rpb24sICZlcnJvcik7Ci0gIExMVk1EaXNw
b3NlTWVzc2FnZShlcnJvcik7CisgIHZvaWQgYnVpbGRNQ0pJVEVuZ2luZSgpIHsKKyAgICBBU1NF
UlRfRVEoCisgICAgICAwLCBMTFZNQ3JlYXRlTUNKSVRDb21waWxlckZvck1vZHVsZSgmRW5naW5l
LCBNb2R1bGUsICZPcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZW9mKE9wdGlvbnMpLCAmRXJyb3IpKTsKKyAgfQogICAKLSAgTExWTURpc3Bvc2VC
dWlsZGVyKGJ1aWxkZXIpOworICB2b2lkIGJ1aWxkQW5kUnVuUGFzc2VzKCkgeworICAgIExMVk1Q
YXNzTWFuYWdlclJlZiBwYXNzID0gTExWTUNyZWF0ZVBhc3NNYW5hZ2VyKCk7CisgICAgTExWTUFk
ZFRhcmdldERhdGEoTExWTUdldEV4ZWN1dGlvbkVuZ2luZVRhcmdldERhdGEoRW5naW5lKSwgcGFz
cyk7CisgICAgTExWTUFkZENvbnN0YW50UHJvcGFnYXRpb25QYXNzKHBhc3MpOworICAgIExMVk1B
ZGRJbnN0cnVjdGlvbkNvbWJpbmluZ1Bhc3MocGFzcyk7CisgICAgTExWTVJ1blBhc3NNYW5hZ2Vy
KHBhc3MsIE1vZHVsZSk7CisgICAgTExWTURpc3Bvc2VQYXNzTWFuYWdlcihwYXNzKTsKKyAgfQog
ICAKLSAgTExWTU1DSklUQ29tcGlsZXJPcHRpb25zIG9wdGlvbnM7Ci0gIExMVk1Jbml0aWFsaXpl
TUNKSVRDb21waWxlck9wdGlvbnMoJm9wdGlvbnMsIHNpemVvZihvcHRpb25zKSk7Ci0gIG9wdGlv
bnMuT3B0TGV2ZWwgPSAyOworICBMTFZNTW9kdWxlUmVmIE1vZHVsZTsKKyAgTExWTVZhbHVlUmVm
IEZ1bmN0aW9uOworICBMTFZNTUNKSVRNZW1vcnlNYW5hZ2VyRnVuY3Rpb25zIE1DSk1NRnVuY3Rp
b25zOworICBMTFZNTUNKSVRDb21waWxlck9wdGlvbnMgT3B0aW9uczsKKyAgTExWTUV4ZWN1dGlv
bkVuZ2luZVJlZiBFbmdpbmU7CisgIGNoYXIgKkVycm9yOworfTsKKworVEVTVF9GKE1DSklUQ0FQ
SVRlc3QsIHNpbXBsZV9mdW5jdGlvbikgeworICBTS0lQX1VOU1VQUE9SVEVEX1BMQVRGT1JNOwog
ICAKLSAgLy8gSnVzdCBlbnN1cmUgdGhhdCB0aGlzIGZpZWxkIHN0aWxsIGV4aXN0cy4KLSAgb3B0
aW9ucy5Ob0ZyYW1lUG9pbnRlckVsaW0gPSBmYWxzZTsKKyAgYnVpbGRTaW1wbGVGdW5jdGlvbigp
OworICBidWlsZE1DSklUT3B0aW9ucygpOworICBidWlsZE1DSklURW5naW5lKCk7CisgIGJ1aWxk
QW5kUnVuUGFzc2VzKCk7CiAgIAotICBMTFZNRXhlY3V0aW9uRW5naW5lUmVmIGVuZ2luZTsKLSAg
QVNTRVJUX0VRKAotICAgIDAsIExMVk1DcmVhdGVNQ0pJVENvbXBpbGVyRm9yTW9kdWxlKCZlbmdp
bmUsIG1vZHVsZSwgJm9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZW9mKG9wdGlvbnMpLCAmZXJyb3IpKTsKKyAgdW5pb24geworICAgIHZvaWQgKnJh
dzsKKyAgICBpbnQgKCp1c2FibGUpKCk7CisgIH0gZnVuY3Rpb25Qb2ludGVyOworICBmdW5jdGlv
blBvaW50ZXIucmF3ID0gTExWTUdldFBvaW50ZXJUb0dsb2JhbChFbmdpbmUsIEZ1bmN0aW9uKTsK
ICAgCi0gIExMVk1QYXNzTWFuYWdlclJlZiBwYXNzID0gTExWTUNyZWF0ZVBhc3NNYW5hZ2VyKCk7
Ci0gIExMVk1BZGRUYXJnZXREYXRhKExMVk1HZXRFeGVjdXRpb25FbmdpbmVUYXJnZXREYXRhKGVu
Z2luZSksIHBhc3MpOwotICBMTFZNQWRkQ29uc3RhbnRQcm9wYWdhdGlvblBhc3MocGFzcyk7Ci0g
IExMVk1BZGRJbnN0cnVjdGlvbkNvbWJpbmluZ1Bhc3MocGFzcyk7Ci0gIExMVk1SdW5QYXNzTWFu
YWdlcihwYXNzLCBtb2R1bGUpOwotICBMTFZNRGlzcG9zZVBhc3NNYW5hZ2VyKHBhc3MpOworICBF
WFBFQ1RfRVEoNDIsIGZ1bmN0aW9uUG9pbnRlci51c2FibGUoKSk7Cit9CisKK1RFU1RfRihNQ0pJ
VENBUElUZXN0LCBjdXN0b21fbWVtb3J5X21hbmFnZXIpIHsKKyAgU0tJUF9VTlNVUFBPUlRFRF9Q
TEFURk9STTsKICAgCisgIGJ1aWxkU2ltcGxlRnVuY3Rpb24oKTsKKyAgYnVpbGRNQ0pJVE9wdGlv
bnMoKTsKKyAgdXNlUm91bmRUcmlwU2VjdGlvbk1lbW9yeU1hbmFnZXIoKTsKKyAgYnVpbGRNQ0pJ
VEVuZ2luZSgpOworICBidWlsZEFuZFJ1blBhc3NlcygpOworICAKICAgdW5pb24gewogICAgIHZv
aWQgKnJhdzsKICAgICBpbnQgKCp1c2FibGUpKCk7CiAgIH0gZnVuY3Rpb25Qb2ludGVyOwotICBm
dW5jdGlvblBvaW50ZXIucmF3ID0gTExWTUdldFBvaW50ZXJUb0dsb2JhbChlbmdpbmUsIGZ1bmN0
aW9uKTsKKyAgZnVuY3Rpb25Qb2ludGVyLnJhdyA9IExMVk1HZXRQb2ludGVyVG9HbG9iYWwoRW5n
aW5lLCBGdW5jdGlvbik7CiAgIAogICBFWFBFQ1RfRVEoNDIsIGZ1bmN0aW9uUG9pbnRlci51c2Fi
bGUoKSk7Ci0gIAotICBMTFZNRGlzcG9zZUV4ZWN1dGlvbkVuZ2luZShlbmdpbmUpOworICBFWFBF
Q1RfVFJVRShkaWRDYWxsQWxsb2NhdGVDb2RlU2VjdGlvbik7CiB9Ci0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202207</attachid>
            <date>2013-05-18 09:11:19 -0700</date>
            <delta_ts>2013-05-18 09:11:19 -0700</delta_ts>
            <desc>new patch for LLVM</desc>
            <filename>mcjmm-c.patch</filename>
            <type>text/plain</type>
            <size>32286</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IGluY2x1ZGUvbGx2bS9FeGVjdXRpb25FbmdpbmUvUlREeWxkTWVtb3J5TWFuYWdlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGluY2x1ZGUvbGx2bS9FeGVjdXRpb25FbmdpbmUvUlREeWxkTWVtb3J5
TWFuYWdlci5oCShyZXZpc2lvbiAwKQorKysgaW5jbHVkZS9sbHZtL0V4ZWN1dGlvbkVuZ2luZS9S
VER5bGRNZW1vcnlNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLy89
PT0tLSBSVER5bGRNZW1vcnlNYW5hZ2VyLmNwcCAtIE1lbW9yeSBtYW5hZ2VyIGZvciBNQy1KSVQg
LS0tLS0qLSBDKysgLSotPT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZN
IENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisvLyBMaWNlbnNl
LiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09
Ly8KKy8vCisvLyBJbnRlcmZhY2Ugb2YgdGhlIHJ1bnRpbWUgZHluYW1pYyBtZW1vcnkgbWFuYWdl
ciBiYXNlIGNsYXNzLgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisKKyNpZm5kZWYgTExW
TV9FWEVDVVRJT05FTkdJTkVfUlRfRFlMRF9NRU1PUllfTUFOQUdFUl9ICisjZGVmaW5lIExMVk1f
RVhFQ1VUSU9ORU5HSU5FX1JUX0RZTERfTUVNT1JZX01BTkFHRVJfSAorCisjaW5jbHVkZSAibGx2
bS9BRFQvU3RyaW5nUmVmLmgiCisjaW5jbHVkZSAibGx2bS9TdXBwb3J0L0NCaW5kaW5nV3JhcHBp
bmcuaCIKKyNpbmNsdWRlICJsbHZtL1N1cHBvcnQvTWVtb3J5LmgiCisjaW5jbHVkZSAibGx2bS1j
L0V4ZWN1dGlvbkVuZ2luZS5oIgorCituYW1lc3BhY2UgbGx2bSB7CisKKy8vIFJ1bnRpbWVEeWxk
IGNsaWVudHMgb2Z0ZW4gd2FudCB0byBoYW5kbGUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9mCisv
LyB3aGF0IGdldHMgcGxhY2VkIHdoZXJlLiBGb3IgSklUIGNsaWVudHMsIHRoaXMgaXMgdGhlIHN1
YnNldCBvZgorLy8gSklUTWVtb3J5TWFuYWdlciByZXF1aXJlZCBmb3IgZHluYW1pYyBsb2FkaW5n
IG9mIGJpbmFyaWVzLgorLy8KKy8vIEZJWE1FOiBBcyB0aGUgUnVudGltZUR5bGQgZmlsbHMgb3V0
LCBhZGRpdGlvbmFsIHJvdXRpbmVzIHdpbGwgYmUgbmVlZGVkCisvLyAgICAgICAgZm9yIHRoZSB2
YXJ5aW5nIHR5cGVzIG9mIG9iamVjdHMgdG8gYmUgYWxsb2NhdGVkLgorY2xhc3MgUlREeWxkTWVt
b3J5TWFuYWdlciB7CisgIFJURHlsZE1lbW9yeU1hbmFnZXIoY29uc3QgUlREeWxkTWVtb3J5TWFu
YWdlciYpIExMVk1fREVMRVRFRF9GVU5DVElPTjsKKyAgdm9pZCBvcGVyYXRvcj0oY29uc3QgUlRE
eWxkTWVtb3J5TWFuYWdlciYpIExMVk1fREVMRVRFRF9GVU5DVElPTjsKK3B1YmxpYzoKKyAgUlRE
eWxkTWVtb3J5TWFuYWdlcigpIHt9CisgIHZpcnR1YWwgflJURHlsZE1lbW9yeU1hbmFnZXIoKTsK
KworICAvLy8gQWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgb2YgKGF0IGxlYXN0KSB0aGUgZ2l2ZW4g
c2l6ZSBzdWl0YWJsZSBmb3IKKyAgLy8vIGV4ZWN1dGFibGUgY29kZS4gVGhlIFNlY3Rpb25JRCBp
cyBhIHVuaXF1ZSBpZGVudGlmaWVyIGFzc2lnbmVkIGJ5IHRoZSBKSVQKKyAgLy8vIGVuZ2luZSwg
YW5kIG9wdGlvbmFsbHkgcmVjb3JkZWQgYnkgdGhlIG1lbW9yeSBtYW5hZ2VyIHRvIGFjY2VzcyBh
IGxvYWRlZAorICAvLy8gc2VjdGlvbi4KKyAgdmlydHVhbCB1aW50OF90ICphbGxvY2F0ZUNvZGVT
ZWN0aW9uKHVpbnRwdHJfdCBTaXplLCB1bnNpZ25lZCBBbGlnbm1lbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBTZWN0aW9uSUQpID0gMDsKKworICAv
Ly8gQWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgb2YgKGF0IGxlYXN0KSB0aGUgZ2l2ZW4gc2l6ZSBz
dWl0YWJsZSBmb3IgZGF0YS4KKyAgLy8vIFRoZSBTZWN0aW9uSUQgaXMgYSB1bmlxdWUgaWRlbnRp
ZmllciBhc3NpZ25lZCBieSB0aGUgSklUIGVuZ2luZSwgYW5kCisgIC8vLyBvcHRpb25hbGx5IHJl
Y29yZGVkIGJ5IHRoZSBtZW1vcnkgbWFuYWdlciB0byBhY2Nlc3MgYSBsb2FkZWQgc2VjdGlvbi4K
KyAgdmlydHVhbCB1aW50OF90ICphbGxvY2F0ZURhdGFTZWN0aW9uKHVpbnRwdHJfdCBTaXplLCB1
bnNpZ25lZCBBbGlnbm1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBTZWN0aW9uSUQsIGJvb2wgSXNSZWFkT25seSkgPSAwOworCisgIC8vLyBSZWdp
c3RlciB0aGUgRUggZnJhbWVzIHdpdGggdGhlIHJ1bnRpbWUgc28gdGhhdCBjKysgZXhjZXB0aW9u
cyB3b3JrLgorICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJFSEZyYW1lcyhTdHJpbmdSZWYgU2VjdGlv
bkRhdGEpOworCisgIC8vLyBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBz
cGVjaWZpZWQgZnVuY3Rpb24uIEFzIHN1Y2ggaXQgaXMKKyAgLy8vIG9ubHkgdXNlZnVsIGZvciBy
ZXNvbHZpbmcgbGlicmFyeSBzeW1ib2xzLCBub3QgY29kZSBnZW5lcmF0ZWQgc3ltYm9scy4KKyAg
Ly8vCisgIC8vLyBJZiBccCBBYm9ydE9uRmFpbHVyZSBpcyBmYWxzZSBhbmQgbm8gZnVuY3Rpb24g
d2l0aCB0aGUgZ2l2ZW4gbmFtZSBpcworICAvLy8gZm91bmQsIHRoaXMgZnVuY3Rpb24gcmV0dXJu
cyBhIG51bGwgcG9pbnRlci4gT3RoZXJ3aXNlLCBpdCBwcmludHMgYQorICAvLy8gbWVzc2FnZSB0
byBzdGRlcnIgYW5kIGFib3J0cy4KKyAgdmlydHVhbCB2b2lkICpnZXRQb2ludGVyVG9OYW1lZEZ1
bmN0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBBYm9ydE9uRmFpbHVyZSA9IHRydWUpOworCisgIC8vLyBU
aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBvYmplY3QgbG9hZGluZyBpcyBjb21wbGV0ZSBhbmQg
c2VjdGlvbiBwYWdlCisgIC8vLyBwZXJtaXNzaW9ucyBjYW4gYmUgYXBwbGllZC4gIEl0IGlzIHVw
IHRvIHRoZSBtZW1vcnkgbWFuYWdlciBpbXBsZW1lbnRhdGlvbgorICAvLy8gdG8gZGVjaWRlIHdo
ZXRoZXIgb3Igbm90IHRvIGFjdCBvbiB0aGlzIG1ldGhvZC4gIFRoZSBtZW1vcnkgbWFuYWdlciB3
aWxsCisgIC8vLyB0eXBpY2FsbHkgYWxsb2NhdGUgYWxsIHNlY3Rpb25zIGFzIHJlYWQtd3JpdGUg
YW5kIHRoZW4gYXBwbHkgc3BlY2lmaWMKKyAgLy8vIHBlcm1pc3Npb25zIHdoZW4gdGhpcyBtZXRo
b2QgaXMgY2FsbGVkLgorICAvLy8KKyAgLy8vIFJldHVybnMgdHJ1ZSBpZiBhbiBlcnJvciBvY2N1
cnJlZCwgZmFsc2Ugb3RoZXJ3aXNlLgorICB2aXJ0dWFsIGJvb2wgYXBwbHlQZXJtaXNzaW9ucyhz
dGQ6OnN0cmluZyAqRXJyTXNnID0gMCkgPSAwOworfTsKKworLy8gQ3JlYXRlIHdyYXBwZXJzIGZv
ciBDIEJpbmRpbmcgdHlwZXMgKHNlZSBDQmluZGluZ1dyYXBwaW5nLmgpLgorREVGSU5FX1NJTVBM
RV9DT05WRVJTSU9OX0ZVTkNUSU9OUygKKyAgICBSVER5bGRNZW1vcnlNYW5hZ2VyLCBMTFZNQ3Vz
dG9tTUNKSVRNZW1vcnlNYW5hZ2VyUmVmKQorCit9IC8vIG5hbWVzcGFjZSBsbHZtCisKKyNlbmRp
ZiAvLyBMTFZNX0VYRUNVVElPTkVOR0lORV9SVF9EWUxEX01FTU9SWV9NQU5BR0VSX0gKSW5kZXg6
IGluY2x1ZGUvbGx2bS9FeGVjdXRpb25FbmdpbmUvUnVudGltZUR5bGQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBpbmNsdWRlL2xsdm0vRXhlY3V0aW9uRW5naW5lL1J1bnRpbWVEeWxkLmgJKHJldmlzaW9uIDE4
MTg0OCkKKysrIGluY2x1ZGUvbGx2bS9FeGVjdXRpb25FbmdpbmUvUnVudGltZUR5bGQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSAibGx2bS9BRFQvU3RyaW5n
UmVmLmgiCiAjaW5jbHVkZSAibGx2bS9FeGVjdXRpb25FbmdpbmUvT2JqZWN0QnVmZmVyLmgiCisj
aW5jbHVkZSAibGx2bS9FeGVjdXRpb25FbmdpbmUvUlREeWxkTWVtb3J5TWFuYWdlci5oIgogI2lu
Y2x1ZGUgImxsdm0vU3VwcG9ydC9NZW1vcnkuaCIKIAogbmFtZXNwYWNlIGxsdm0gewpAQCAtMjMs
NTYgKzI0LDYgQEAKIGNsYXNzIFJ1bnRpbWVEeWxkSW1wbDsKIGNsYXNzIE9iamVjdEltYWdlOwog
Ci0vLyBSdW50aW1lRHlsZCBjbGllbnRzIG9mdGVuIHdhbnQgdG8gaGFuZGxlIHRoZSBtZW1vcnkg
bWFuYWdlbWVudCBvZgotLy8gd2hhdCBnZXRzIHBsYWNlZCB3aGVyZS4gRm9yIEpJVCBjbGllbnRz
LCB0aGlzIGlzIHRoZSBzdWJzZXQgb2YKLS8vIEpJVE1lbW9yeU1hbmFnZXIgcmVxdWlyZWQgZm9y
IGR5bmFtaWMgbG9hZGluZyBvZiBiaW5hcmllcy4KLS8vCi0vLyBGSVhNRTogQXMgdGhlIFJ1bnRp
bWVEeWxkIGZpbGxzIG91dCwgYWRkaXRpb25hbCByb3V0aW5lcyB3aWxsIGJlIG5lZWRlZAotLy8g
ICAgICAgIGZvciB0aGUgdmFyeWluZyB0eXBlcyBvZiBvYmplY3RzIHRvIGJlIGFsbG9jYXRlZC4K
LWNsYXNzIFJURHlsZE1lbW9yeU1hbmFnZXIgewotICBSVER5bGRNZW1vcnlNYW5hZ2VyKGNvbnN0
IFJURHlsZE1lbW9yeU1hbmFnZXImKSBMTFZNX0RFTEVURURfRlVOQ1RJT047Ci0gIHZvaWQgb3Bl
cmF0b3I9KGNvbnN0IFJURHlsZE1lbW9yeU1hbmFnZXImKSBMTFZNX0RFTEVURURfRlVOQ1RJT047
Ci1wdWJsaWM6Ci0gIFJURHlsZE1lbW9yeU1hbmFnZXIoKSB7fQotICB2aXJ0dWFsIH5SVER5bGRN
ZW1vcnlNYW5hZ2VyKCk7Ci0KLSAgLy8vIEFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIG9mIChhdCBs
ZWFzdCkgdGhlIGdpdmVuIHNpemUgc3VpdGFibGUgZm9yCi0gIC8vLyBleGVjdXRhYmxlIGNvZGUu
IFRoZSBTZWN0aW9uSUQgaXMgYSB1bmlxdWUgaWRlbnRpZmllciBhc3NpZ25lZCBieSB0aGUgSklU
Ci0gIC8vLyBlbmdpbmUsIGFuZCBvcHRpb25hbGx5IHJlY29yZGVkIGJ5IHRoZSBtZW1vcnkgbWFu
YWdlciB0byBhY2Nlc3MgYSBsb2FkZWQKLSAgLy8vIHNlY3Rpb24uCi0gIHZpcnR1YWwgdWludDhf
dCAqYWxsb2NhdGVDb2RlU2VjdGlvbih1aW50cHRyX3QgU2l6ZSwgdW5zaWduZWQgQWxpZ25tZW50
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgU2VjdGlv
bklEKSA9IDA7Ci0KLSAgLy8vIEFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIG9mIChhdCBsZWFzdCkg
dGhlIGdpdmVuIHNpemUgc3VpdGFibGUgZm9yIGRhdGEuCi0gIC8vLyBUaGUgU2VjdGlvbklEIGlz
IGEgdW5pcXVlIGlkZW50aWZpZXIgYXNzaWduZWQgYnkgdGhlIEpJVCBlbmdpbmUsIGFuZAotICAv
Ly8gb3B0aW9uYWxseSByZWNvcmRlZCBieSB0aGUgbWVtb3J5IG1hbmFnZXIgdG8gYWNjZXNzIGEg
bG9hZGVkIHNlY3Rpb24uCi0gIHZpcnR1YWwgdWludDhfdCAqYWxsb2NhdGVEYXRhU2VjdGlvbih1
aW50cHRyX3QgU2l6ZSwgdW5zaWduZWQgQWxpZ25tZW50LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgU2VjdGlvbklELCBib29sIElzUmVhZE9ubHkpID0g
MDsKLQotICAvLy8gVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgc3BlY2lm
aWVkIGZ1bmN0aW9uLiBBcyBzdWNoIGl0IGlzCi0gIC8vLyBvbmx5IHVzZWZ1bCBmb3IgcmVzb2x2
aW5nIGxpYnJhcnkgc3ltYm9scywgbm90IGNvZGUgZ2VuZXJhdGVkIHN5bWJvbHMuCi0gIC8vLwot
ICAvLy8gSWYgQWJvcnRPbkZhaWx1cmUgaXMgZmFsc2UgYW5kIG5vIGZ1bmN0aW9uIHdpdGggdGhl
IGdpdmVuIG5hbWUgaXMKLSAgLy8vIGZvdW5kLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSBudWxs
IHBvaW50ZXIuIE90aGVyd2lzZSwgaXQgcHJpbnRzIGEKLSAgLy8vIG1lc3NhZ2UgdG8gc3RkZXJy
IGFuZCBhYm9ydHMuCi0gIHZpcnR1YWwgdm9pZCAqZ2V0UG9pbnRlclRvTmFtZWRGdW5jdGlvbihj
b25zdCBzdGQ6OnN0cmluZyAmTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgQWJvcnRPbkZhaWx1cmUgPSB0cnVlKSA9IDA7Ci0KLSAgLy8vIFRoaXMg
bWV0aG9kIGlzIGNhbGxlZCB3aGVuIG9iamVjdCBsb2FkaW5nIGlzIGNvbXBsZXRlIGFuZCBzZWN0
aW9uIHBhZ2UKLSAgLy8vIHBlcm1pc3Npb25zIGNhbiBiZSBhcHBsaWVkLiAgSXQgaXMgdXAgdG8g
dGhlIG1lbW9yeSBtYW5hZ2VyIGltcGxlbWVudGF0aW9uCi0gIC8vLyB0byBkZWNpZGUgd2hldGhl
ciBvciBub3QgdG8gYWN0IG9uIHRoaXMgbWV0aG9kLiAgVGhlIG1lbW9yeSBtYW5hZ2VyIHdpbGwK
LSAgLy8vIHR5cGljYWxseSBhbGxvY2F0ZSBhbGwgc2VjdGlvbnMgYXMgcmVhZC13cml0ZSBhbmQg
dGhlbiBhcHBseSBzcGVjaWZpYwotICAvLy8gcGVybWlzc2lvbnMgd2hlbiB0aGlzIG1ldGhvZCBp
cyBjYWxsZWQuCi0gIC8vLwotICAvLy8gUmV0dXJucyB0cnVlIGlmIGFuIGVycm9yIG9jY3VycmVk
LCBmYWxzZSBvdGhlcndpc2UuCi0gIHZpcnR1YWwgYm9vbCBhcHBseVBlcm1pc3Npb25zKHN0ZDo6
c3RyaW5nICpFcnJNc2cgPSAwKSA9IDA7Ci0KLSAgLy8vIFJlZ2lzdGVyIHRoZSBFSCBmcmFtZXMg
d2l0aCB0aGUgcnVudGltZSBzbyB0aGF0IGMrKyBleGNlcHRpb25zIHdvcmsuIFRoZQotICAvLy8g
ZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuIExvb2sgYXQgU2VjdGlvbk1lbW9y
eU1hbmFnZXIgZm9yIG9uZQotICAvLy8gdGhhdCB1c2VzIF9fcmVnaXN0ZXJfZnJhbWUuCi0gIHZp
cnR1YWwgdm9pZCByZWdpc3RlckVIRnJhbWVzKFN0cmluZ1JlZiBTZWN0aW9uRGF0YSk7Ci19Owot
CiBjbGFzcyBSdW50aW1lRHlsZCB7CiAgIFJ1bnRpbWVEeWxkKGNvbnN0IFJ1bnRpbWVEeWxkICYp
IExMVk1fREVMRVRFRF9GVU5DVElPTjsKICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgUnVudGltZUR5
bGQgJikgTExWTV9ERUxFVEVEX0ZVTkNUSU9OOwpJbmRleDogaW5jbHVkZS9sbHZtL0V4ZWN1dGlv
bkVuZ2luZS9TZWN0aW9uTWVtb3J5TWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGluY2x1ZGUvbGx2
bS9FeGVjdXRpb25FbmdpbmUvU2VjdGlvbk1lbW9yeU1hbmFnZXIuaAkocmV2aXNpb24gMTgxODQ4
KQorKysgaW5jbHVkZS9sbHZtL0V4ZWN1dGlvbkVuZ2luZS9TZWN0aW9uTWVtb3J5TWFuYWdlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MiwxNyArNzIsNiBAQAogICAvLy8gXHJldHVybnMgdHJ1ZSBp
ZiBhbiBlcnJvciBvY2N1cnJlZCwgZmFsc2Ugb3RoZXJ3aXNlLgogICB2aXJ0dWFsIGJvb2wgYXBw
bHlQZXJtaXNzaW9ucyhzdGQ6OnN0cmluZyAqRXJyTXNnID0gMCk7CiAKLSAgdm9pZCByZWdpc3Rl
ckVIRnJhbWVzKFN0cmluZ1JlZiBTZWN0aW9uRGF0YSk7Ci0KLSAgLy8vIFRoaXMgbWV0aG9kIHJl
dHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHNwZWNpZmllZCBmdW5jdGlvbi4gQXMgc3VjaCBpdCBp
cwotICAvLy8gb25seSB1c2VmdWwgZm9yIHJlc29sdmluZyBsaWJyYXJ5IHN5bWJvbHMsIG5vdCBj
b2RlIGdlbmVyYXRlZCBzeW1ib2xzLgotICAvLy8KLSAgLy8vIElmIFxwIEFib3J0T25GYWlsdXJl
IGlzIGZhbHNlIGFuZCBubyBmdW5jdGlvbiB3aXRoIHRoZSBnaXZlbiBuYW1lIGlzCi0gIC8vLyBm
b3VuZCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbnVsbCBwb2ludGVyLiBPdGhlcndpc2UsIGl0
IHByaW50cyBhCi0gIC8vLyBtZXNzYWdlIHRvIHN0ZGVyciBhbmQgYWJvcnRzLgotICB2aXJ0dWFs
IHZvaWQgKmdldFBvaW50ZXJUb05hbWVkRnVuY3Rpb24oY29uc3Qgc3RkOjpzdHJpbmcgJk5hbWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIEFib3J0T25G
YWlsdXJlID0gdHJ1ZSk7Ci0KICAgLy8vIFxicmllZiBJbnZhbGlkYXRlIGluc3RydWN0aW9uIGNh
Y2hlIGZvciBjb2RlIHNlY3Rpb25zLgogICAvLy8KICAgLy8vIFNvbWUgcGxhdGZvcm1zIHdpdGgg
c2VwYXJhdGUgZGF0YSBjYWNoZSBhbmQgaW5zdHJ1Y3Rpb24gY2FjaGUgcmVxdWlyZQpJbmRleDog
aW5jbHVkZS9sbHZtLWMvQ29yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGluY2x1ZGUvbGx2bS1jL0NvcmUu
aAkocmV2aXNpb24gMTgxODQ4KQorKysgaW5jbHVkZS9sbHZtLWMvQ29yZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MTEsNiArNDExLDcgQEAKIAogLyo9PT0tLSBFcnJvciBoYW5kbGluZyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ki8KIAorY2hh
ciAqTExWTUNyZWF0ZU1lc3NhZ2UoY29uc3QgY2hhciAqTWVzc2FnZSk7CiB2b2lkIExMVk1EaXNw
b3NlTWVzc2FnZShjaGFyICpNZXNzYWdlKTsKIAogCkluZGV4OiBpbmNsdWRlL2xsdm0tYy9FeGVj
dXRpb25FbmdpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBpbmNsdWRlL2xsdm0tYy9FeGVjdXRpb25Fbmdp
bmUuaAkocmV2aXNpb24gMTgxODQ4KQorKysgaW5jbHVkZS9sbHZtLWMvRXhlY3V0aW9uRW5naW5l
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEyICs0MCwxNCBAQAogCiB0eXBlZGVmIHN0cnVjdCBM
TFZNT3BhcXVlR2VuZXJpY1ZhbHVlICpMTFZNR2VuZXJpY1ZhbHVlUmVmOwogdHlwZWRlZiBzdHJ1
Y3QgTExWTU9wYXF1ZUV4ZWN1dGlvbkVuZ2luZSAqTExWTUV4ZWN1dGlvbkVuZ2luZVJlZjsKK3R5
cGVkZWYgc3RydWN0IExMVk1PcGFxdWVDdXN0b21NQ0pJVE1lbW9yeU1hbmFnZXIgKkxMVk1DdXN0
b21NQ0pJVE1lbW9yeU1hbmFnZXJSZWY7CiAKIHN0cnVjdCBMTFZNTUNKSVRDb21waWxlck9wdGlv
bnMgewogICB1bnNpZ25lZCBPcHRMZXZlbDsKICAgTExWTUNvZGVNb2RlbCBDb2RlTW9kZWw7CiAg
IExMVk1Cb29sIE5vRnJhbWVQb2ludGVyRWxpbTsKICAgTExWTUJvb2wgRW5hYmxlRmFzdElTZWw7
CisgIExMVk1DdXN0b21NQ0pJVE1lbW9yeU1hbmFnZXJSZWYgTUNKTU07CiB9OwogCiAvKj09PS0t
IE9wZXJhdGlvbnMgb24gZ2VuZXJpYyB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS09PT0qLwpAQCAtMTY3LDcgKzE2OSwzMiBAQAogCiB2b2lkICpMTFZNR2V0UG9p
bnRlclRvR2xvYmFsKExMVk1FeGVjdXRpb25FbmdpbmVSZWYgRUUsIExMVk1WYWx1ZVJlZiBHbG9i
YWwpOwogCisvKj09PS0tIE9wZXJhdGlvbnMgb24gbWVtb3J5IG1hbmFnZXJzIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0qLworCiAvKioKKyAqIENyZWF0ZSBhIHNpbXBs
ZSBjdXN0b20gTUNKSVQgbWVtb3J5IG1hbmFnZXIuIFRoaXMgbWVtb3J5IG1hbmFnZXIgY2FuCisg
KiBpbnRlcmNlcHQgYWxsb2NhdGlvbnMgaW4gYSBtb2R1bGUtb2JsaXZpb3VzIHdheS4KKyAqCisg
KiBAcGFyYW0gT2JqZWN0IEFuIG9wYXF1ZSBjbGllbnQgb2JqZWN0IHRvIHBhc3MgYmFjayB0byB0
aGUgY2FsbGJhY2tzLgorICogQHBhcmFtIEFsbG9jYXRlQ29kZVNlY3Rpb24gQWxsb2NhdGUgYSBi
bG9jayBvZiBtZW1vcnkgZm9yIGV4ZWN1dGFibGUgY29kZS4KKyAqIEBwYXJhbSBBbGxvY2F0ZURh
dGFTZWN0aW9uIEFsbG9jYXRlIGEgYmxvY2sgb2YgbWVtb3J5IGZvciBkYXRhLgorICogQHBhcmFt
IEFwcGx5UGVybWlzc2lvbnMgU2V0IHBhZ2UgcGVybWlzc2lvbnMgYW5kIGZsdXNoIGNhY2hlLiBS
ZXR1cm4gMCBvbgorICogICBzdWNjZXNzLCAxIG9uIGVycm9yLgorICovCitMTFZNQ3VzdG9tTUNK
SVRNZW1vcnlNYW5hZ2VyUmVmIExMVk1DcmVhdGVTaW1wbGVDdXN0b21NQ0pJVE1lbW9yeU1hbmFn
ZXIoCisgIHZvaWQgKk9iamVjdCwKKyAgdWludDhfdCAqKCpBbGxvY2F0ZUNvZGVTZWN0aW9uKSh2
b2lkICpPYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludHB0cl90
IFNpemUsIHVuc2lnbmVkIEFsaWdubWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBTZWN0aW9uSUQpLAorICB1aW50OF90ICooKkFsbG9jYXRlRGF0YVNlY3Rp
b24pKHZvaWQgKk9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
cHRyX3QgU2l6ZSwgdW5zaWduZWQgQWxpZ25tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIFNlY3Rpb25JRCwgTExWTUJvb2wgSXNSZWFkT25seSksCisgIExM
Vk1Cb29sICgqQXBwbHlQZXJtaXNzaW9ucykodm9pZCAqT2JqZWN0LCBjaGFyICoqRXJyTXNnKSwK
KyAgdm9pZCAoKkRlc3Ryb3kpKHZvaWQgKk9iamVjdCkpOworCit2b2lkIExMVk1EaXNwb3NlQ3Vz
dG9tTUNKSVRNZW1vcnlNYW5hZ2VyKExMVk1DdXN0b21NQ0pJVE1lbW9yeU1hbmFnZXJSZWYgTU0p
OworCisvKioKICAqIEB9CiAgKi8KIApJbmRleDogbGliL0V4ZWN1dGlvbkVuZ2luZS9DTWFrZUxp
c3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBsaWIvRXhlY3V0aW9uRW5naW5lL0NNYWtlTGlzdHMudHh0
CShyZXZpc2lvbiAxODE4NDgpCisrKyBsaWIvRXhlY3V0aW9uRW5naW5lL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogYWRkX2xsdm1fbGlicmFyeShMTFZNRXhl
Y3V0aW9uRW5naW5lCiAgIEV4ZWN1dGlvbkVuZ2luZS5jcHAKICAgRXhlY3V0aW9uRW5naW5lQmlu
ZGluZ3MuY3BwCisgIFJURHlsZE1lbW9yeU1hbmFnZXIuY3BwCiAgIFRhcmdldFNlbGVjdC5jcHAK
ICAgKQogCkluZGV4OiBsaWIvRXhlY3V0aW9uRW5naW5lL0V4ZWN1dGlvbkVuZ2luZUJpbmRpbmdz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBsaWIvRXhlY3V0aW9uRW5naW5lL0V4ZWN1dGlvbkVuZ2luZUJp
bmRpbmdzLmNwcAkocmV2aXNpb24gMTgxODQ4KQorKysgbGliL0V4ZWN1dGlvbkVuZ2luZS9FeGVj
dXRpb25FbmdpbmVCaW5kaW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1LDYgKzE1LDcgQEAK
ICNpbmNsdWRlICJsbHZtLWMvRXhlY3V0aW9uRW5naW5lLmgiCiAjaW5jbHVkZSAibGx2bS9FeGVj
dXRpb25FbmdpbmUvRXhlY3V0aW9uRW5naW5lLmgiCiAjaW5jbHVkZSAibGx2bS9FeGVjdXRpb25F
bmdpbmUvR2VuZXJpY1ZhbHVlLmgiCisjaW5jbHVkZSAibGx2bS9FeGVjdXRpb25FbmdpbmUvUlRE
eWxkTWVtb3J5TWFuYWdlci5oIgogI2luY2x1ZGUgImxsdm0vSVIvRGVyaXZlZFR5cGVzLmgiCiAj
aW5jbHVkZSAibGx2bS9JUi9Nb2R1bGUuaCIKICNpbmNsdWRlICJsbHZtL1N1cHBvcnQvRXJyb3JI
YW5kbGluZy5oIgpAQCAtMTU3LDEwICsxNTgsOCBAQAogdm9pZCBMTFZNSW5pdGlhbGl6ZU1DSklU
Q29tcGlsZXJPcHRpb25zKExMVk1NQ0pJVENvbXBpbGVyT3B0aW9ucyAqUGFzc2VkT3B0aW9ucywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgU2l6ZU9mUGFz
c2VkT3B0aW9ucykgewogICBMTFZNTUNKSVRDb21waWxlck9wdGlvbnMgb3B0aW9uczsKLSAgb3B0
aW9ucy5PcHRMZXZlbCA9IDA7CisgIG1lbXNldCgmb3B0aW9ucywgMCwgc2l6ZW9mKG9wdGlvbnMp
KTsgLy8gTW9zdCBmaWVsZHMgYXJlIHplcm8gYnkgZGVmYXVsdC4KICAgb3B0aW9ucy5Db2RlTW9k
ZWwgPSBMTFZNQ29kZU1vZGVsSklURGVmYXVsdDsKLSAgb3B0aW9ucy5Ob0ZyYW1lUG9pbnRlckVs
aW0gPSBmYWxzZTsKLSAgb3B0aW9ucy5FbmFibGVGYXN0SVNlbCA9IGZhbHNlOwogICAKICAgbWVt
Y3B5KFBhc3NlZE9wdGlvbnMsICZvcHRpb25zLAogICAgICAgICAgc3RkOjptaW4oc2l6ZW9mKG9w
dGlvbnMpLCBTaXplT2ZQYXNzZWRPcHRpb25zKSk7CkBAIC0xOTksNiArMTk4LDggQEAKICAgICAg
ICAgIC5zZXRPcHRMZXZlbCgoQ29kZUdlbk9wdDo6TGV2ZWwpb3B0aW9ucy5PcHRMZXZlbCkKICAg
ICAgICAgIC5zZXRDb2RlTW9kZWwodW53cmFwKG9wdGlvbnMuQ29kZU1vZGVsKSkKICAgICAgICAg
IC5zZXRUYXJnZXRPcHRpb25zKHRhcmdldE9wdGlvbnMpOworICBpZiAob3B0aW9ucy5NQ0pNTSkK
KyAgICBidWlsZGVyLnNldE1DSklUTWVtb3J5TWFuYWdlcih1bndyYXAob3B0aW9ucy5NQ0pNTSkp
OwogICBpZiAoRXhlY3V0aW9uRW5naW5lICpKSVQgPSBidWlsZGVyLmNyZWF0ZSgpKSB7CiAgICAg
Kk91dEpJVCA9IHdyYXAoSklUKTsKICAgICByZXR1cm4gMDsKQEAgLTMzMiwzICszMzMsMTA2IEBA
CiAgIAogICByZXR1cm4gdW53cmFwKEVFKS0+Z2V0UG9pbnRlclRvR2xvYmFsKHVud3JhcDxHbG9i
YWxWYWx1ZT4oR2xvYmFsKSk7CiB9CisKKy8qPT09LS0gT3BlcmF0aW9ucyBvbiBtZW1vcnkgbWFu
YWdlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSovCisKK25hbWVz
cGFjZSB7CisKK3N0cnVjdCBTaW1wbGVCaW5kaW5nTU1GdW5jdGlvbnMgeworICB1aW50OF90ICoo
KkFsbG9jYXRlQ29kZVNlY3Rpb24pKHZvaWQgKk9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1aW50cHRyX3QgU2l6ZSwgdW5zaWduZWQgQWxpZ25tZW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIFNlY3Rpb25JRCk7CisgIHVpbnQ4
X3QgKigqQWxsb2NhdGVEYXRhU2VjdGlvbikodm9pZCAqT2JqZWN0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnRwdHJfdCBTaXplLCB1bnNpZ25lZCBBbGlnbm1lbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgU2VjdGlvbklELCBMTFZN
Qm9vbCBJc1JlYWRPbmx5KTsKKyAgTExWTUJvb2wgKCpBcHBseVBlcm1pc3Npb25zKSh2b2lkICpP
YmplY3QsIGNoYXIgKipFcnJNc2cpOworICB2b2lkICgqRGVzdHJveSkodm9pZCAqT2JqZWN0KTsK
K307CisKK2NsYXNzIFNpbXBsZUJpbmRpbmdNZW1vcnlNYW5hZ2VyIDogcHVibGljIFJURHlsZE1l
bW9yeU1hbmFnZXIgeworcHVibGljOgorICBTaW1wbGVCaW5kaW5nTWVtb3J5TWFuYWdlcihjb25z
dCBTaW1wbGVCaW5kaW5nTU1GdW5jdGlvbnMmIEZ1bmN0aW9ucywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAqT2JqZWN0KTsKKyAgdmlydHVhbCB+U2ltcGxlQmluZGluZ01lbW9y
eU1hbmFnZXIoKTsKKyAgCisgIHZpcnR1YWwgdWludDhfdCAqYWxsb2NhdGVDb2RlU2VjdGlvbih1
aW50cHRyX3QgU2l6ZSwgdW5zaWduZWQgQWxpZ25tZW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgU2VjdGlvbklEKTsKKworICB2aXJ0dWFsIHVpbnQ4
X3QgKmFsbG9jYXRlRGF0YVNlY3Rpb24odWludHB0cl90IFNpemUsIHVuc2lnbmVkIEFsaWdubWVu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIFNlY3Rp
b25JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNSZWFk
T25seSk7CisKKyAgdmlydHVhbCBib29sIGFwcGx5UGVybWlzc2lvbnMoc3RkOjpzdHJpbmcgKkVy
ck1zZyk7CisgIAorcHJpdmF0ZToKKyAgU2ltcGxlQmluZGluZ01NRnVuY3Rpb25zIEZ1bmN0aW9u
czsKKyAgdm9pZCAqT2JqZWN0OworfTsKKworU2ltcGxlQmluZGluZ01lbW9yeU1hbmFnZXI6OlNp
bXBsZUJpbmRpbmdNZW1vcnlNYW5hZ2VyKAorICBjb25zdCBTaW1wbGVCaW5kaW5nTU1GdW5jdGlv
bnMmIEZ1bmN0aW9ucywKKyAgdm9pZCAqT2JqZWN0KQorICA6IEZ1bmN0aW9ucyhGdW5jdGlvbnMp
LCBPYmplY3QoT2JqZWN0KSB7CisgIGFzc2VydChGdW5jdGlvbnMuQWxsb2NhdGVDb2RlU2VjdGlv
biAmJgorICAgICAgICAgIk5vIEFsbG9jYXRlQ29kZVNlY3Rpb24gZnVuY3Rpb24gcHJvdmlkZWQh
Iik7CisgIGFzc2VydChGdW5jdGlvbnMuQWxsb2NhdGVEYXRhU2VjdGlvbiAmJgorICAgICAgICAg
Ik5vIEFsbG9jYXRlRGF0YVNlY3Rpb24gZnVuY3Rpb24gcHJvdmlkZWQhIik7CisgIGFzc2VydChG
dW5jdGlvbnMuQXBwbHlQZXJtaXNzaW9ucyAmJgorICAgICAgICAgIk5vIEFwcGx5UGVybWlzc2lv
bnMgZnVuY3Rpb24gcHJvdmlkZWQhIik7CisgIGFzc2VydChGdW5jdGlvbnMuRGVzdHJveSAmJgor
ICAgICAgICAgIk5vIERlc3Ryb3kgZnVuY3Rpb24gcHJvdmlkZWQhIik7Cit9CisKK1NpbXBsZUJp
bmRpbmdNZW1vcnlNYW5hZ2VyOjp+U2ltcGxlQmluZGluZ01lbW9yeU1hbmFnZXIoKSB7CisgIGlm
IChGdW5jdGlvbnMuRGVzdHJveSkKKyAgICBGdW5jdGlvbnMuRGVzdHJveShPYmplY3QpOworfQor
Cit1aW50OF90ICpTaW1wbGVCaW5kaW5nTWVtb3J5TWFuYWdlcjo6YWxsb2NhdGVDb2RlU2VjdGlv
bigKKyAgdWludHB0cl90IFNpemUsIHVuc2lnbmVkIEFsaWdubWVudCwgdW5zaWduZWQgU2VjdGlv
bklEKSB7CisgIHJldHVybiBGdW5jdGlvbnMuQWxsb2NhdGVDb2RlU2VjdGlvbihPYmplY3QsIFNp
emUsIEFsaWdubWVudCwgU2VjdGlvbklEKTsKK30KKwordWludDhfdCAqU2ltcGxlQmluZGluZ01l
bW9yeU1hbmFnZXI6OmFsbG9jYXRlRGF0YVNlY3Rpb24oCisgIHVpbnRwdHJfdCBTaXplLCB1bnNp
Z25lZCBBbGlnbm1lbnQsIHVuc2lnbmVkIFNlY3Rpb25JRCwgYm9vbCBpc1JlYWRPbmx5KSB7Cisg
IHJldHVybiBGdW5jdGlvbnMuQWxsb2NhdGVEYXRhU2VjdGlvbihPYmplY3QsIFNpemUsIEFsaWdu
bWVudCwgU2VjdGlvbklELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aXNSZWFkT25seSk7Cit9CisKK2Jvb2wgU2ltcGxlQmluZGluZ01lbW9yeU1hbmFnZXI6OmFwcGx5
UGVybWlzc2lvbnMoc3RkOjpzdHJpbmcgKkVyck1zZykgeworICBjaGFyICplcnJNc2dDU3RyaW5n
ID0gMDsKKyAgYm9vbCByZXN1bHQgPSBGdW5jdGlvbnMuQXBwbHlQZXJtaXNzaW9ucyhPYmplY3Qs
ICZlcnJNc2dDU3RyaW5nKTsKKyAgYXNzZXJ0KChyZXN1bHQgfHwgIWVyck1zZ0NTdHJpbmcpICYm
CisgICAgICAgICAiRGlkIG5vdCBleHBlY3QgYW4gZXJyb3IgbWVzc2FnZSBpZiBBcHBseVBlcm1p
c3Npb25zIHN1Y2NlZWRlZCIpOworICBpZiAoZXJyTXNnQ1N0cmluZykgeworICAgIGlmIChFcnJN
c2cpCisgICAgICAqRXJyTXNnID0gZXJyTXNnQ1N0cmluZzsKKyAgICBmcmVlKGVyck1zZ0NTdHJp
bmcpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFj
ZQorCitMTFZNQ3VzdG9tTUNKSVRNZW1vcnlNYW5hZ2VyUmVmIExMVk1DcmVhdGVTaW1wbGVDdXN0
b21NQ0pJVE1lbW9yeU1hbmFnZXIoCisgIHZvaWQgKk9iamVjdCwKKyAgdWludDhfdCAqKCpBbGxv
Y2F0ZUNvZGVTZWN0aW9uKSh2b2lkICpPYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludHB0cl90IFNpemUsIHVuc2lnbmVkIEFsaWdubWVudCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBTZWN0aW9uSUQpLAorICB1aW50OF90ICoo
KkFsbG9jYXRlRGF0YVNlY3Rpb24pKHZvaWQgKk9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1aW50cHRyX3QgU2l6ZSwgdW5zaWduZWQgQWxpZ25tZW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIFNlY3Rpb25JRCwgTExWTUJvb2wg
SXNSZWFkT25seSksCisgIExMVk1Cb29sICgqQXBwbHlQZXJtaXNzaW9ucykodm9pZCAqT2JqZWN0
LCBjaGFyICoqRXJyTXNnKSwKKyAgdm9pZCAoKkRlc3Ryb3kpKHZvaWQgKk9iamVjdCkpIHsKKyAg
U2ltcGxlQmluZGluZ01NRnVuY3Rpb25zIGZ1bmN0aW9uczsKKyAgZnVuY3Rpb25zLkFsbG9jYXRl
Q29kZVNlY3Rpb24gPSBBbGxvY2F0ZUNvZGVTZWN0aW9uOworICBmdW5jdGlvbnMuQWxsb2NhdGVE
YXRhU2VjdGlvbiA9IEFsbG9jYXRlRGF0YVNlY3Rpb247CisgIGZ1bmN0aW9ucy5BcHBseVBlcm1p
c3Npb25zID0gQXBwbHlQZXJtaXNzaW9uczsKKyAgZnVuY3Rpb25zLkRlc3Ryb3kgPSBEZXN0cm95
OworICByZXR1cm4gd3JhcChuZXcgU2ltcGxlQmluZGluZ01lbW9yeU1hbmFnZXIoZnVuY3Rpb25z
LCBPYmplY3QpKTsKK30KKwordm9pZCBMTFZNRGlzcG9zZUN1c3RvbU1DSklUTWVtb3J5TWFuYWdl
cihMTFZNQ3VzdG9tTUNKSVRNZW1vcnlNYW5hZ2VyUmVmIE1NKSB7CisgIGRlbGV0ZSB1bndyYXAo
TU0pOworfQorCkluZGV4OiBsaWIvRXhlY3V0aW9uRW5naW5lL01DSklUL1NlY3Rpb25NZW1vcnlN
YW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaWIvRXhlY3V0aW9uRW5naW5lL01DSklUL1NlY3Rp
b25NZW1vcnlNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTgxODQ4KQorKysgbGliL0V4ZWN1dGlvbkVu
Z2luZS9NQ0pJVC9TZWN0aW9uTWVtb3J5TWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
LDcgKzE0LDYgQEAKIAogI2luY2x1ZGUgImxsdm0vQ29uZmlnL2NvbmZpZy5oIgogI2luY2x1ZGUg
Imxsdm0vRXhlY3V0aW9uRW5naW5lL1NlY3Rpb25NZW1vcnlNYW5hZ2VyLmgiCi0jaW5jbHVkZSAi
bGx2bS9TdXBwb3J0L0R5bmFtaWNMaWJyYXJ5LmgiCiAjaW5jbHVkZSAibGx2bS9TdXBwb3J0L01h
dGhFeHRyYXMuaCIKIAogI2lmZGVmIF9fbGludXhfXwpAQCAtMTQ2LDM4ICsxNDUsNiBAQAogICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLS8vIERldGVybWluZSB3aGV0aGVyIHdlIGNhbiByZWdpc3RlciBF
SCB0YWJsZXMuCi0jaWYgKGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fQVJNX0VBQklf
XykgJiYgXAotICAgICAhZGVmaW5lZChfX1VTSU5HX1NKTEpfRVhDRVBUSU9OU19fKSkKLSNkZWZp
bmUgSEFWRV9FSFRBQkxFX1NVUFBPUlQgMQotI2Vsc2UKLSNkZWZpbmUgSEFWRV9FSFRBQkxFX1NV
UFBPUlQgMAotI2VuZGlmCi0KLSNpZiBIQVZFX0VIVEFCTEVfU1VQUE9SVAotZXh0ZXJuICJDIiB2
b2lkIF9fcmVnaXN0ZXJfZnJhbWUodm9pZCopOwotCi1zdGF0aWMgY29uc3QgY2hhciAqcHJvY2Vz
c0ZERShjb25zdCBjaGFyICpFbnRyeSkgewotICBjb25zdCBjaGFyICpQID0gRW50cnk7Ci0gIHVp
bnQzMl90IExlbmd0aCA9ICooKHVpbnQzMl90KilQKTsKLSAgUCArPSA0OwotICB1aW50MzJfdCBP
ZmZzZXQgPSAqKCh1aW50MzJfdCopUCk7Ci0gIGlmIChPZmZzZXQgIT0gMCkKLSAgICBfX3JlZ2lz
dGVyX2ZyYW1lKCh2b2lkKilFbnRyeSk7Ci0gIHJldHVybiBQICsgTGVuZ3RoOwotfQotI2VuZGlm
Ci0KLXZvaWQgU2VjdGlvbk1lbW9yeU1hbmFnZXI6OnJlZ2lzdGVyRUhGcmFtZXMoU3RyaW5nUmVm
IFNlY3Rpb25EYXRhKSB7Ci0jaWYgSEFWRV9FSFRBQkxFX1NVUFBPUlQKLSAgY29uc3QgY2hhciAq
UCA9IFNlY3Rpb25EYXRhLmRhdGEoKTsKLSAgY29uc3QgY2hhciAqRW5kID0gU2VjdGlvbkRhdGEu
ZGF0YSgpICsgU2VjdGlvbkRhdGEuc2l6ZSgpOwotICBkbyAgewotICAgIFAgPSBwcm9jZXNzRkRF
KFApOwotICB9IHdoaWxlKFAgIT0gRW5kKTsKLSNlbmRpZgotfQotCiBlcnJvcl9jb2RlIFNlY3Rp
b25NZW1vcnlNYW5hZ2VyOjphcHBseU1lbW9yeUdyb3VwUGVybWlzc2lvbnMoTWVtb3J5R3JvdXAg
Jk1lbUdyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIFBlcm1pc3Npb25zKSB7CiAKQEAgLTE5OSw1NyArMTY2
LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZU1l
bS5BbGxvY2F0ZWRNZW1baV0uc2l6ZSgpKTsKIH0KIAotc3RhdGljIGludCBqaXRfbm9vcCgpIHsK
LSAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgKlNlY3Rpb25NZW1vcnlNYW5hZ2VyOjpnZXRQb2ludGVy
VG9OYW1lZEZ1bmN0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZOYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgQWJvcnRPbkZhaWx1
cmUpIHsKLSNpZiBkZWZpbmVkKF9fbGludXhfXykKLSAgLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCi0g
IC8vIEZ1bmN0aW9uIHN0dWJzIHRoYXQgYXJlIGludm9rZWQgaW5zdGVhZCBvZiBjZXJ0YWluIGxp
YnJhcnkgY2FsbHMKLSAgLy8KLSAgLy8gRm9yY2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgdG8g
YmUgbGlua2VkIGluIHRvIGFueXRoaW5nIHRoYXQgdXNlcyB0aGUKLSAgLy8gSklULiBUaGlzIGlz
IGEgaGFjayBkZXNpZ25lZCB0byB3b3JrIGFyb3VuZCB0aGUgYWxsLXRvby1jbGV2ZXIgR2xpYmMK
LSAgLy8gc3RyYXRlZ3kgb2YgbWFraW5nIHRoZXNlIGZ1bmN0aW9ucyB3b3JrIGRpZmZlcmVudGx5
IHdoZW4gaW5saW5lZCB2cy4gd2hlbgotICAvLyBub3QgaW5saW5lZCwgYW5kIGhpZGluZyB0aGVp
ciByZWFsIGRlZmluaXRpb25zIGluIGEgc2VwYXJhdGUgYXJjaGl2ZSBmaWxlCi0gIC8vIHRoYXQg
dGhlIGR5bmFtaWMgbGlua2VyIGNhbid0IHNlZS4gRm9yIG1vcmUgaW5mbywgc2VhcmNoIGZvcgot
ICAvLyAnbGliY19ub25zaGFyZWQuYScgb24gR29vZ2xlLCBvciByZWFkIGh0dHA6Ly9sbHZtLm9y
Zy9QUjI3NC4KLSAgaWYgKE5hbWUgPT0gInN0YXQiKSByZXR1cm4gKHZvaWQqKShpbnRwdHJfdCkm
c3RhdDsKLSAgaWYgKE5hbWUgPT0gImZzdGF0IikgcmV0dXJuICh2b2lkKikoaW50cHRyX3QpJmZz
dGF0OwotICBpZiAoTmFtZSA9PSAibHN0YXQiKSByZXR1cm4gKHZvaWQqKShpbnRwdHJfdCkmbHN0
YXQ7Ci0gIGlmIChOYW1lID09ICJzdGF0NjQiKSByZXR1cm4gKHZvaWQqKShpbnRwdHJfdCkmc3Rh
dDY0OwotICBpZiAoTmFtZSA9PSAiZnN0YXQ2NCIpIHJldHVybiAodm9pZCopKGludHB0cl90KSZm
c3RhdDY0OwotICBpZiAoTmFtZSA9PSAibHN0YXQ2NCIpIHJldHVybiAodm9pZCopKGludHB0cl90
KSZsc3RhdDY0OwotICBpZiAoTmFtZSA9PSAiYXRleGl0IikgcmV0dXJuICh2b2lkKikoaW50cHRy
X3QpJmF0ZXhpdDsKLSAgaWYgKE5hbWUgPT0gIm1rbm9kIikgcmV0dXJuICh2b2lkKikoaW50cHRy
X3QpJm1rbm9kOwotI2VuZGlmIC8vIF9fbGludXhfXwotCi0gIC8vIFdlIHNob3VsZCBub3QgaW52
b2tlIHBhcmVudCdzIGN0b3JzL2R0b3JzIGZyb20gZ2VuZXJhdGVkIG1haW4oKSEKLSAgLy8gT24g
TWluZ3cgYW5kIEN5Z3dpbiwgdGhlIHN5bWJvbCBfX21haW4gaXMgcmVzb2x2ZWQgdG8KLSAgLy8g
Y2FsbGVlJ3MoZWcuIHRvb2xzL2xsaSkgb25lLCB0byBpbnZva2Ugd3JvbmcgZHVwbGljYXRlZCBj
dG9ycwotICAvLyAoYW5kIHJlZ2lzdGVyIHdyb25nIGNhbGxlZSdzIGR0b3JzIHdpdGggYXRleGl0
KDMpKS4KLSAgLy8gV2UgZXhwZWN0IEV4ZWN1dGlvbkVuZ2luZTo6cnVuU3RhdGljQ29uc3RydWN0
b3JzRGVzdHJ1Y3RvcnMoKQotICAvLyBpcyBjYWxsZWQgYmVmb3JlIEV4ZWN1dGlvbkVuZ2luZTo6
cnVuRnVuY3Rpb25Bc01haW4oKSBpcyBjYWxsZWQuCi0gIGlmIChOYW1lID09ICJfX21haW4iKSBy
ZXR1cm4gKHZvaWQqKShpbnRwdHJfdCkmaml0X25vb3A7Ci0KLSAgY29uc3QgY2hhciAqTmFtZVN0
ciA9IE5hbWUuY19zdHIoKTsKLSAgdm9pZCAqUHRyID0gc3lzOjpEeW5hbWljTGlicmFyeTo6U2Vh
cmNoRm9yQWRkcmVzc09mU3ltYm9sKE5hbWVTdHIpOwotICBpZiAoUHRyKSByZXR1cm4gUHRyOwot
Ci0gIC8vIElmIGl0IHdhc24ndCBmb3VuZCBhbmQgaWYgaXQgc3RhcnRzIHdpdGggYW4gdW5kZXJz
Y29yZSAoJ18nKSBjaGFyYWN0ZXIsCi0gIC8vIHRyeSBhZ2FpbiB3aXRob3V0IHRoZSB1bmRlcnNj
b3JlLgotICBpZiAoTmFtZVN0clswXSA9PSAnXycpIHsKLSAgICBQdHIgPSBzeXM6OkR5bmFtaWNM
aWJyYXJ5OjpTZWFyY2hGb3JBZGRyZXNzT2ZTeW1ib2woTmFtZVN0cisxKTsKLSAgICBpZiAoUHRy
KSByZXR1cm4gUHRyOwotICB9Ci0KLSAgaWYgKEFib3J0T25GYWlsdXJlKQotICAgIHJlcG9ydF9m
YXRhbF9lcnJvcigiUHJvZ3JhbSB1c2VkIGV4dGVybmFsIGZ1bmN0aW9uICciICsgTmFtZSArCi0g
ICAgICAgICAgICAgICAgICAgICAgIicgd2hpY2ggY291bGQgbm90IGJlIHJlc29sdmVkISIpOwot
ICByZXR1cm4gMDsKLX0KLQogU2VjdGlvbk1lbW9yeU1hbmFnZXI6On5TZWN0aW9uTWVtb3J5TWFu
YWdlcigpIHsKICAgZm9yICh1bnNpZ25lZCBpID0gMCwgZSA9IENvZGVNZW0uQWxsb2NhdGVkTWVt
LnNpemUoKTsgaSAhPSBlOyArK2kpCiAgICAgc3lzOjpNZW1vcnk6OnJlbGVhc2VNYXBwZWRNZW1v
cnkoQ29kZU1lbS5BbGxvY2F0ZWRNZW1baV0pOwpJbmRleDogbGliL0V4ZWN1dGlvbkVuZ2luZS9S
VER5bGRNZW1vcnlNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaWIvRXhlY3V0aW9uRW5naW5l
L1JURHlsZE1lbW9yeU1hbmFnZXIuY3BwCShyZXZpc2lvbiAwKQorKysgbGliL0V4ZWN1dGlvbkVu
Z2luZS9SVER5bGRNZW1vcnlNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
NSBAQAorLy89PT0tLSBSVER5bGRNZW1vcnlNYW5hZ2VyLmNwcCAtIE1lbW9yeSBtYW5hZ2VyIGZv
ciBNQy1KSVQgLS0tLS0qLSBDKysgLSotPT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAg
IFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisv
LyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tPT09Ly8KKy8vCisvLyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgcnVudGltZSBkeW5hbWlj
IG1lbW9yeSBtYW5hZ2VyIGJhc2UgY2xhc3MuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8K
KworI2luY2x1ZGUgImxsdm0vRXhlY3V0aW9uRW5naW5lL1JURHlsZE1lbW9yeU1hbmFnZXIuaCIK
KyNpbmNsdWRlICJsbHZtL1N1cHBvcnQvRHluYW1pY0xpYnJhcnkuaCIKKyNpbmNsdWRlICJsbHZt
L1N1cHBvcnQvRXJyb3JIYW5kbGluZy5oIgorCituYW1lc3BhY2UgbGx2bSB7CisKK1JURHlsZE1l
bW9yeU1hbmFnZXI6On5SVER5bGRNZW1vcnlNYW5hZ2VyKCkge30KKworLy8gRGV0ZXJtaW5lIHdo
ZXRoZXIgd2UgY2FuIHJlZ2lzdGVyIEVIIHRhYmxlcy4KKyNpZiAoZGVmaW5lZChfX0dOVUNfXykg
JiYgIWRlZmluZWQoX19BUk1fRUFCSV9fKSAmJiBcCisgICAgICFkZWZpbmVkKF9fVVNJTkdfU0pM
Sl9FWENFUFRJT05TX18pKQorI2RlZmluZSBIQVZFX0VIVEFCTEVfU1VQUE9SVCAxCisjZWxzZQor
I2RlZmluZSBIQVZFX0VIVEFCTEVfU1VQUE9SVCAwCisjZW5kaWYKKworI2lmIEhBVkVfRUhUQUJM
RV9TVVBQT1JUCitleHRlcm4gIkMiIHZvaWQgX19yZWdpc3Rlcl9mcmFtZSh2b2lkKik7CisKK3N0
YXRpYyBjb25zdCBjaGFyICpwcm9jZXNzRkRFKGNvbnN0IGNoYXIgKkVudHJ5KSB7CisgIGNvbnN0
IGNoYXIgKlAgPSBFbnRyeTsKKyAgdWludDMyX3QgTGVuZ3RoID0gKigodWludDMyX3QqKVApOwor
ICBQICs9IDQ7CisgIHVpbnQzMl90IE9mZnNldCA9ICooKHVpbnQzMl90KilQKTsKKyAgaWYgKE9m
ZnNldCAhPSAwKQorICAgIF9fcmVnaXN0ZXJfZnJhbWUoKHZvaWQqKUVudHJ5KTsKKyAgcmV0dXJu
IFAgKyBMZW5ndGg7Cit9CisjZW5kaWYKKwordm9pZCBSVER5bGRNZW1vcnlNYW5hZ2VyOjpyZWdp
c3RlckVIRnJhbWVzKFN0cmluZ1JlZiBTZWN0aW9uRGF0YSkgeworI2lmIEhBVkVfRUhUQUJMRV9T
VVBQT1JUCisgIGNvbnN0IGNoYXIgKlAgPSBTZWN0aW9uRGF0YS5kYXRhKCk7CisgIGNvbnN0IGNo
YXIgKkVuZCA9IFNlY3Rpb25EYXRhLmRhdGEoKSArIFNlY3Rpb25EYXRhLnNpemUoKTsKKyAgZG8g
IHsKKyAgICBQID0gcHJvY2Vzc0ZERShQKTsKKyAgfSB3aGlsZShQICE9IEVuZCk7CisjZW5kaWYK
K30KKworc3RhdGljIGludCBqaXRfbm9vcCgpIHsKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgKlJU
RHlsZE1lbW9yeU1hbmFnZXI6OmdldFBvaW50ZXJUb05hbWVkRnVuY3Rpb24oY29uc3Qgc3RkOjpz
dHJpbmcgJk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgQWJvcnRPbkZhaWx1cmUpIHsKKyNpZiBkZWZpbmVkKF9fbGludXhfXykK
KyAgLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisgIC8vIEZ1bmN0aW9uIHN0dWJzIHRoYXQgYXJlIGlu
dm9rZWQgaW5zdGVhZCBvZiBjZXJ0YWluIGxpYnJhcnkgY2FsbHMKKyAgLy8KKyAgLy8gRm9yY2Ug
dGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgdG8gYmUgbGlua2VkIGluIHRvIGFueXRoaW5nIHRoYXQg
dXNlcyB0aGUKKyAgLy8gSklULiBUaGlzIGlzIGEgaGFjayBkZXNpZ25lZCB0byB3b3JrIGFyb3Vu
ZCB0aGUgYWxsLXRvby1jbGV2ZXIgR2xpYmMKKyAgLy8gc3RyYXRlZ3kgb2YgbWFraW5nIHRoZXNl
IGZ1bmN0aW9ucyB3b3JrIGRpZmZlcmVudGx5IHdoZW4gaW5saW5lZCB2cy4gd2hlbgorICAvLyBu
b3QgaW5saW5lZCwgYW5kIGhpZGluZyB0aGVpciByZWFsIGRlZmluaXRpb25zIGluIGEgc2VwYXJh
dGUgYXJjaGl2ZSBmaWxlCisgIC8vIHRoYXQgdGhlIGR5bmFtaWMgbGlua2VyIGNhbid0IHNlZS4g
Rm9yIG1vcmUgaW5mbywgc2VhcmNoIGZvcgorICAvLyAnbGliY19ub25zaGFyZWQuYScgb24gR29v
Z2xlLCBvciByZWFkIGh0dHA6Ly9sbHZtLm9yZy9QUjI3NC4KKyAgaWYgKE5hbWUgPT0gInN0YXQi
KSByZXR1cm4gKHZvaWQqKShpbnRwdHJfdCkmc3RhdDsKKyAgaWYgKE5hbWUgPT0gImZzdGF0Iikg
cmV0dXJuICh2b2lkKikoaW50cHRyX3QpJmZzdGF0OworICBpZiAoTmFtZSA9PSAibHN0YXQiKSBy
ZXR1cm4gKHZvaWQqKShpbnRwdHJfdCkmbHN0YXQ7CisgIGlmIChOYW1lID09ICJzdGF0NjQiKSBy
ZXR1cm4gKHZvaWQqKShpbnRwdHJfdCkmc3RhdDY0OworICBpZiAoTmFtZSA9PSAiZnN0YXQ2NCIp
IHJldHVybiAodm9pZCopKGludHB0cl90KSZmc3RhdDY0OworICBpZiAoTmFtZSA9PSAibHN0YXQ2
NCIpIHJldHVybiAodm9pZCopKGludHB0cl90KSZsc3RhdDY0OworICBpZiAoTmFtZSA9PSAiYXRl
eGl0IikgcmV0dXJuICh2b2lkKikoaW50cHRyX3QpJmF0ZXhpdDsKKyAgaWYgKE5hbWUgPT0gIm1r
bm9kIikgcmV0dXJuICh2b2lkKikoaW50cHRyX3QpJm1rbm9kOworI2VuZGlmIC8vIF9fbGludXhf
XworCisgIC8vIFdlIHNob3VsZCBub3QgaW52b2tlIHBhcmVudCdzIGN0b3JzL2R0b3JzIGZyb20g
Z2VuZXJhdGVkIG1haW4oKSEKKyAgLy8gT24gTWluZ3cgYW5kIEN5Z3dpbiwgdGhlIHN5bWJvbCBf
X21haW4gaXMgcmVzb2x2ZWQgdG8KKyAgLy8gY2FsbGVlJ3MoZWcuIHRvb2xzL2xsaSkgb25lLCB0
byBpbnZva2Ugd3JvbmcgZHVwbGljYXRlZCBjdG9ycworICAvLyAoYW5kIHJlZ2lzdGVyIHdyb25n
IGNhbGxlZSdzIGR0b3JzIHdpdGggYXRleGl0KDMpKS4KKyAgLy8gV2UgZXhwZWN0IEV4ZWN1dGlv
bkVuZ2luZTo6cnVuU3RhdGljQ29uc3RydWN0b3JzRGVzdHJ1Y3RvcnMoKQorICAvLyBpcyBjYWxs
ZWQgYmVmb3JlIEV4ZWN1dGlvbkVuZ2luZTo6cnVuRnVuY3Rpb25Bc01haW4oKSBpcyBjYWxsZWQu
CisgIGlmIChOYW1lID09ICJfX21haW4iKSByZXR1cm4gKHZvaWQqKShpbnRwdHJfdCkmaml0X25v
b3A7CisKKyAgY29uc3QgY2hhciAqTmFtZVN0ciA9IE5hbWUuY19zdHIoKTsKKyAgdm9pZCAqUHRy
ID0gc3lzOjpEeW5hbWljTGlicmFyeTo6U2VhcmNoRm9yQWRkcmVzc09mU3ltYm9sKE5hbWVTdHIp
OworICBpZiAoUHRyKSByZXR1cm4gUHRyOworCisgIC8vIElmIGl0IHdhc24ndCBmb3VuZCBhbmQg
aWYgaXQgc3RhcnRzIHdpdGggYW4gdW5kZXJzY29yZSAoJ18nKSBjaGFyYWN0ZXIsCisgIC8vIHRy
eSBhZ2FpbiB3aXRob3V0IHRoZSB1bmRlcnNjb3JlLgorICBpZiAoTmFtZVN0clswXSA9PSAnXycp
IHsKKyAgICBQdHIgPSBzeXM6OkR5bmFtaWNMaWJyYXJ5OjpTZWFyY2hGb3JBZGRyZXNzT2ZTeW1i
b2woTmFtZVN0cisxKTsKKyAgICBpZiAoUHRyKSByZXR1cm4gUHRyOworICB9CisKKyAgaWYgKEFi
b3J0T25GYWlsdXJlKQorICAgIHJlcG9ydF9mYXRhbF9lcnJvcigiUHJvZ3JhbSB1c2VkIGV4dGVy
bmFsIGZ1bmN0aW9uICciICsgTmFtZSArCisgICAgICAgICAgICAgICAgICAgICAgICInIHdoaWNo
IGNvdWxkIG5vdCBiZSByZXNvbHZlZCEiKTsKKyAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNw
YWNlIGxsdm0KSW5kZXg6IGxpYi9FeGVjdXRpb25FbmdpbmUvUnVudGltZUR5bGQvUnVudGltZUR5
bGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGxpYi9FeGVjdXRpb25FbmdpbmUvUnVudGltZUR5bGQvUnVu
dGltZUR5bGQuY3BwCShyZXZpc2lvbiAxODE4NDgpCisrKyBsaWIvRXhlY3V0aW9uRW5naW5lL1J1
bnRpbWVEeWxkL1J1bnRpbWVEeWxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsNiBA
QAogdXNpbmcgbmFtZXNwYWNlIGxsdm06Om9iamVjdDsKIAogLy8gRW1wdHkgb3V0LW9mLWxpbmUg
dmlydHVhbCBkZXN0cnVjdG9yIGFzIHRoZSBrZXkgZnVuY3Rpb24uCi1SVER5bGRNZW1vcnlNYW5h
Z2VyOjp+UlREeWxkTWVtb3J5TWFuYWdlcigpIHt9Ci12b2lkIFJURHlsZE1lbW9yeU1hbmFnZXI6
OnJlZ2lzdGVyRUhGcmFtZXMoU3RyaW5nUmVmIFNlY3Rpb25EYXRhKSB7fQogUnVudGltZUR5bGRJ
bXBsOjp+UnVudGltZUR5bGRJbXBsKCkge30KIAogbmFtZXNwYWNlIGxsdm0gewpJbmRleDogbGli
L0lSL0NvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxpYi9JUi9Db3JlLmNwcAkocmV2aXNpb24gMTgx
ODQ4KQorKysgbGliL0lSL0NvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCwxMCBA
QAogCiAvKj09PS0tIEVycm9yIGhhbmRsaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0qLwogCitjaGFyICpMTFZNQ3JlYXRlTWVzc2FnZShj
b25zdCBjaGFyICpNZXNzYWdlKSB7CisgIHJldHVybiBzdHJkdXAoTWVzc2FnZSk7Cit9CisKIHZv
aWQgTExWTURpc3Bvc2VNZXNzYWdlKGNoYXIgKk1lc3NhZ2UpIHsKICAgZnJlZShNZXNzYWdlKTsK
IH0KSW5kZXg6IHVuaXR0ZXN0cy9FeGVjdXRpb25FbmdpbmUvTUNKSVQvTUNKSVRDQVBJVGVzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gdW5pdHRlc3RzL0V4ZWN1dGlvbkVuZ2luZS9NQ0pJVC9NQ0pJVENB
UElUZXN0LmNwcAkocmV2aXNpb24gMTgxODQ4KQorKysgdW5pdHRlc3RzL0V4ZWN1dGlvbkVuZ2lu
ZS9NQ0pJVC9NQ0pJVENBUElUZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcsMTIgKzE3LDQ2
IEBACiAjaW5jbHVkZSAibGx2bS1jL0V4ZWN1dGlvbkVuZ2luZS5oIgogI2luY2x1ZGUgImxsdm0t
Yy9UYXJnZXQuaCIKICNpbmNsdWRlICJsbHZtLWMvVHJhbnNmb3Jtcy9TY2FsYXIuaCIKKyNpbmNs
dWRlICJsbHZtL0V4ZWN1dGlvbkVuZ2luZS9TZWN0aW9uTWVtb3J5TWFuYWdlci5oIgogI2luY2x1
ZGUgImxsdm0vU3VwcG9ydC9Ib3N0LmgiCiAjaW5jbHVkZSAiTUNKSVRUZXN0QVBJQ29tbW9uLmgi
CiAjaW5jbHVkZSAiZ3Rlc3QvZ3Rlc3QuaCIKIAogdXNpbmcgbmFtZXNwYWNlIGxsdm07CiAKK3N0
YXRpYyBib29sIGRpZENhbGxBbGxvY2F0ZUNvZGVTZWN0aW9uOworCitzdGF0aWMgdWludDhfdCAq
cm91bmRUcmlwQWxsb2NhdGVDb2RlU2VjdGlvbih2b2lkICpvYmplY3QsIHVpbnRwdHJfdCBzaXpl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
YWxpZ25tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgc2VjdGlvbklEKSB7CisgIGRpZENhbGxBbGxvY2F0ZUNvZGVTZWN0aW9uID0gdHJ1
ZTsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PFNlY3Rpb25NZW1vcnlNYW5hZ2VyKj4ob2JqZWN0KS0+
YWxsb2NhdGVDb2RlU2VjdGlvbigKKyAgICBzaXplLCBhbGlnbm1lbnQsIHNlY3Rpb25JRCk7Cit9
CisKK3N0YXRpYyB1aW50OF90ICpyb3VuZFRyaXBBbGxvY2F0ZURhdGFTZWN0aW9uKHZvaWQgKm9i
amVjdCwgdWludHB0cl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBhbGlnbm1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzZWN0aW9uSUQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMTFZNQm9vbCBpc1JlYWRPbmx5KSB7CisgIHJl
dHVybiBzdGF0aWNfY2FzdDxTZWN0aW9uTWVtb3J5TWFuYWdlcio+KG9iamVjdCktPmFsbG9jYXRl
RGF0YVNlY3Rpb24oCisgICAgc2l6ZSwgYWxpZ25tZW50LCBzZWN0aW9uSUQsIGlzUmVhZE9ubHkp
OworfQorCitzdGF0aWMgTExWTUJvb2wgcm91bmRUcmlwQXBwbHlQZXJtaXNzaW9ucyh2b2lkICpv
YmplY3QsIGNoYXIgKiplcnJNc2cpIHsKKyAgc3RkOjpzdHJpbmcgZXJyTXNnU3RyaW5nOworICBi
b29sIHJlc3VsdCA9CisgICAgc3RhdGljX2Nhc3Q8U2VjdGlvbk1lbW9yeU1hbmFnZXIqPihvYmpl
Y3QpLT5hcHBseVBlcm1pc3Npb25zKCZlcnJNc2dTdHJpbmcpOworICBpZiAocmVzdWx0KSB7Cisg
ICAgKmVyck1zZyA9IExMVk1DcmVhdGVNZXNzYWdlKGVyck1zZ1N0cmluZy5jX3N0cigpKTsKKyAg
ICByZXR1cm4gMTsKKyAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcm91bmRUcmlw
RGVzdHJveSh2b2lkICpvYmplY3QpIHsKKyAgZGVsZXRlIHN0YXRpY19jYXN0PFNlY3Rpb25NZW1v
cnlNYW5hZ2VyKj4ob2JqZWN0KTsKK30KKwogY2xhc3MgTUNKSVRDQVBJVGVzdCA6IHB1YmxpYyB0
ZXN0aW5nOjpUZXN0LCBwdWJsaWMgTUNKSVRUZXN0QVBJQ29tbW9uIHsKIHByb3RlY3RlZDoKICAg
TUNKSVRDQVBJVGVzdCgpIHsKQEAgLTM4LDYwICs3MiwxMTMgQEAKICAgICAvLyB0aGF0IHRoZXkg
d2lsbCBmYWlsIHRoZSBNQ0pJVCBDIEFQSSB0ZXN0cy4KICAgICBVbnN1cHBvcnRlZE9Tcy5wdXNo
X2JhY2soVHJpcGxlOjpDeWd3aW4pOwogICB9Ci19OwotCi1URVNUX0YoTUNKSVRDQVBJVGVzdCwg
c2ltcGxlX2Z1bmN0aW9uKSB7Ci0gIFNLSVBfVU5TVVBQT1JURURfUExBVEZPUk07CiAgIAotICBj
aGFyICplcnJvciA9IDA7CisgIHZpcnR1YWwgdm9pZCBTZXRVcCgpIHsKKyAgICBkaWRDYWxsQWxs
b2NhdGVDb2RlU2VjdGlvbiA9IGZhbHNlOworICAgIE1vZHVsZSA9IDA7CisgICAgRnVuY3Rpb24g
PSAwOworICAgIEVuZ2luZSA9IDA7CisgICAgRXJyb3IgPSAwOworICB9CiAgIAotICAvLyBDcmVh
dGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIDQyLCBjb21waWxlcyBpdCwgYW5kIHJ1bnMgaXQu
CisgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpIHsKKyAgICBpZiAoRW5naW5lKQorICAgICAgTExW
TURpc3Bvc2VFeGVjdXRpb25FbmdpbmUoRW5naW5lKTsKKyAgICBlbHNlIGlmIChNb2R1bGUpCisg
ICAgICBMTFZNRGlzcG9zZU1vZHVsZShNb2R1bGUpOworICB9CiAgIAotICBMTFZNTW9kdWxlUmVm
IG1vZHVsZSA9IExMVk1Nb2R1bGVDcmVhdGVXaXRoTmFtZSgic2ltcGxlX21vZHVsZSIpOwotCi0g
IExMVk1TZXRUYXJnZXQobW9kdWxlLCBIb3N0VHJpcGxlLmNfc3RyKCkpOworICB2b2lkIGJ1aWxk
U2ltcGxlRnVuY3Rpb24oKSB7CisgICAgTW9kdWxlID0gTExWTU1vZHVsZUNyZWF0ZVdpdGhOYW1l
KCJzaW1wbGVfbW9kdWxlIik7CisgICAgCisgICAgTExWTVNldFRhcmdldChNb2R1bGUsIEhvc3RU
cmlwbGUuY19zdHIoKSk7CisgICAgCisgICAgRnVuY3Rpb24gPSBMTFZNQWRkRnVuY3Rpb24oCisg
ICAgICBNb2R1bGUsICJzaW1wbGVfZnVuY3Rpb24iLCBMTFZNRnVuY3Rpb25UeXBlKExMVk1JbnQz
MlR5cGUoKSwgMCwgMCwgMCkpOworICAgIExMVk1TZXRGdW5jdGlvbkNhbGxDb252KEZ1bmN0aW9u
LCBMTFZNQ0NhbGxDb252KTsKKyAgICAKKyAgICBMTFZNQmFzaWNCbG9ja1JlZiBlbnRyeSA9IExM
Vk1BcHBlbmRCYXNpY0Jsb2NrKEZ1bmN0aW9uLCAiZW50cnkiKTsKKyAgICBMTFZNQnVpbGRlclJl
ZiBidWlsZGVyID0gTExWTUNyZWF0ZUJ1aWxkZXIoKTsKKyAgICBMTFZNUG9zaXRpb25CdWlsZGVy
QXRFbmQoYnVpbGRlciwgZW50cnkpOworICAgIExMVk1CdWlsZFJldChidWlsZGVyLCBMTFZNQ29u
c3RJbnQoTExWTUludDMyVHlwZSgpLCA0MiwgMCkpOworICAgIAorICAgIExMVk1WZXJpZnlNb2R1
bGUoTW9kdWxlLCBMTFZNQWJvcnRQcm9jZXNzQWN0aW9uLCAmRXJyb3IpOworICAgIExMVk1EaXNw
b3NlTWVzc2FnZShFcnJvcik7CisgICAgCisgICAgTExWTURpc3Bvc2VCdWlsZGVyKGJ1aWxkZXIp
OworICB9CiAgIAotICBMTFZNVmFsdWVSZWYgZnVuY3Rpb24gPSBMTFZNQWRkRnVuY3Rpb24oCi0g
ICAgbW9kdWxlLCAic2ltcGxlX2Z1bmN0aW9uIiwgTExWTUZ1bmN0aW9uVHlwZShMTFZNSW50MzJU
eXBlKCksIDAsIDAsIDApKTsKLSAgTExWTVNldEZ1bmN0aW9uQ2FsbENvbnYoZnVuY3Rpb24sIExM
Vk1DQ2FsbENvbnYpOworICB2b2lkIGJ1aWxkTUNKSVRPcHRpb25zKCkgeworICAgIExMVk1Jbml0
aWFsaXplTUNKSVRDb21waWxlck9wdGlvbnMoJk9wdGlvbnMsIHNpemVvZihPcHRpb25zKSk7Cisg
ICAgT3B0aW9ucy5PcHRMZXZlbCA9IDI7CisgICAgCisgICAgLy8gSnVzdCBlbnN1cmUgdGhhdCB0
aGlzIGZpZWxkIHN0aWxsIGV4aXN0cy4KKyAgICBPcHRpb25zLk5vRnJhbWVQb2ludGVyRWxpbSA9
IGZhbHNlOworICB9CiAgIAotICBMTFZNQmFzaWNCbG9ja1JlZiBlbnRyeSA9IExMVk1BcHBlbmRC
YXNpY0Jsb2NrKGZ1bmN0aW9uLCAiZW50cnkiKTsKLSAgTExWTUJ1aWxkZXJSZWYgYnVpbGRlciA9
IExMVk1DcmVhdGVCdWlsZGVyKCk7Ci0gIExMVk1Qb3NpdGlvbkJ1aWxkZXJBdEVuZChidWlsZGVy
LCBlbnRyeSk7Ci0gIExMVk1CdWlsZFJldChidWlsZGVyLCBMTFZNQ29uc3RJbnQoTExWTUludDMy
VHlwZSgpLCA0MiwgMCkpOworICB2b2lkIHVzZVJvdW5kVHJpcFNlY3Rpb25NZW1vcnlNYW5hZ2Vy
KCkgeworICAgIE9wdGlvbnMuTUNKTU0gPSBMTFZNQ3JlYXRlU2ltcGxlQ3VzdG9tTUNKSVRNZW1v
cnlNYW5hZ2VyKAorICAgICAgbmV3IFNlY3Rpb25NZW1vcnlNYW5hZ2VyKCksCisgICAgICByb3Vu
ZFRyaXBBbGxvY2F0ZUNvZGVTZWN0aW9uLAorICAgICAgcm91bmRUcmlwQWxsb2NhdGVEYXRhU2Vj
dGlvbiwKKyAgICAgIHJvdW5kVHJpcEFwcGx5UGVybWlzc2lvbnMsCisgICAgICByb3VuZFRyaXBE
ZXN0cm95KTsKKyAgfQogICAKLSAgTExWTVZlcmlmeU1vZHVsZShtb2R1bGUsIExMVk1BYm9ydFBy
b2Nlc3NBY3Rpb24sICZlcnJvcik7Ci0gIExMVk1EaXNwb3NlTWVzc2FnZShlcnJvcik7CisgIHZv
aWQgYnVpbGRNQ0pJVEVuZ2luZSgpIHsKKyAgICBBU1NFUlRfRVEoCisgICAgICAwLCBMTFZNQ3Jl
YXRlTUNKSVRDb21waWxlckZvck1vZHVsZSgmRW5naW5lLCBNb2R1bGUsICZPcHRpb25zLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKE9wdGlvbnMpLCAm
RXJyb3IpKTsKKyAgfQogICAKLSAgTExWTURpc3Bvc2VCdWlsZGVyKGJ1aWxkZXIpOworICB2b2lk
IGJ1aWxkQW5kUnVuUGFzc2VzKCkgeworICAgIExMVk1QYXNzTWFuYWdlclJlZiBwYXNzID0gTExW
TUNyZWF0ZVBhc3NNYW5hZ2VyKCk7CisgICAgTExWTUFkZFRhcmdldERhdGEoTExWTUdldEV4ZWN1
dGlvbkVuZ2luZVRhcmdldERhdGEoRW5naW5lKSwgcGFzcyk7CisgICAgTExWTUFkZENvbnN0YW50
UHJvcGFnYXRpb25QYXNzKHBhc3MpOworICAgIExMVk1BZGRJbnN0cnVjdGlvbkNvbWJpbmluZ1Bh
c3MocGFzcyk7CisgICAgTExWTVJ1blBhc3NNYW5hZ2VyKHBhc3MsIE1vZHVsZSk7CisgICAgTExW
TURpc3Bvc2VQYXNzTWFuYWdlcihwYXNzKTsKKyAgfQogICAKLSAgTExWTU1DSklUQ29tcGlsZXJP
cHRpb25zIG9wdGlvbnM7Ci0gIExMVk1Jbml0aWFsaXplTUNKSVRDb21waWxlck9wdGlvbnMoJm9w
dGlvbnMsIHNpemVvZihvcHRpb25zKSk7Ci0gIG9wdGlvbnMuT3B0TGV2ZWwgPSAyOworICBMTFZN
TW9kdWxlUmVmIE1vZHVsZTsKKyAgTExWTVZhbHVlUmVmIEZ1bmN0aW9uOworICBMTFZNTUNKSVRD
b21waWxlck9wdGlvbnMgT3B0aW9uczsKKyAgTExWTUV4ZWN1dGlvbkVuZ2luZVJlZiBFbmdpbmU7
CisgIGNoYXIgKkVycm9yOworfTsKKworVEVTVF9GKE1DSklUQ0FQSVRlc3QsIHNpbXBsZV9mdW5j
dGlvbikgeworICBTS0lQX1VOU1VQUE9SVEVEX1BMQVRGT1JNOwogICAKLSAgLy8gSnVzdCBlbnN1
cmUgdGhhdCB0aGlzIGZpZWxkIHN0aWxsIGV4aXN0cy4KLSAgb3B0aW9ucy5Ob0ZyYW1lUG9pbnRl
ckVsaW0gPSBmYWxzZTsKKyAgYnVpbGRTaW1wbGVGdW5jdGlvbigpOworICBidWlsZE1DSklUT3B0
aW9ucygpOworICBidWlsZE1DSklURW5naW5lKCk7CisgIGJ1aWxkQW5kUnVuUGFzc2VzKCk7CiAg
IAotICBMTFZNRXhlY3V0aW9uRW5naW5lUmVmIGVuZ2luZTsKLSAgQVNTRVJUX0VRKAotICAgIDAs
IExMVk1DcmVhdGVNQ0pJVENvbXBpbGVyRm9yTW9kdWxlKCZlbmdpbmUsIG1vZHVsZSwgJm9wdGlv
bnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG9wdGlv
bnMpLCAmZXJyb3IpKTsKKyAgdW5pb24geworICAgIHZvaWQgKnJhdzsKKyAgICBpbnQgKCp1c2Fi
bGUpKCk7CisgIH0gZnVuY3Rpb25Qb2ludGVyOworICBmdW5jdGlvblBvaW50ZXIucmF3ID0gTExW
TUdldFBvaW50ZXJUb0dsb2JhbChFbmdpbmUsIEZ1bmN0aW9uKTsKICAgCi0gIExMVk1QYXNzTWFu
YWdlclJlZiBwYXNzID0gTExWTUNyZWF0ZVBhc3NNYW5hZ2VyKCk7Ci0gIExMVk1BZGRUYXJnZXRE
YXRhKExMVk1HZXRFeGVjdXRpb25FbmdpbmVUYXJnZXREYXRhKGVuZ2luZSksIHBhc3MpOwotICBM
TFZNQWRkQ29uc3RhbnRQcm9wYWdhdGlvblBhc3MocGFzcyk7Ci0gIExMVk1BZGRJbnN0cnVjdGlv
bkNvbWJpbmluZ1Bhc3MocGFzcyk7Ci0gIExMVk1SdW5QYXNzTWFuYWdlcihwYXNzLCBtb2R1bGUp
OwotICBMTFZNRGlzcG9zZVBhc3NNYW5hZ2VyKHBhc3MpOworICBFWFBFQ1RfRVEoNDIsIGZ1bmN0
aW9uUG9pbnRlci51c2FibGUoKSk7Cit9CisKK1RFU1RfRihNQ0pJVENBUElUZXN0LCBjdXN0b21f
bWVtb3J5X21hbmFnZXIpIHsKKyAgU0tJUF9VTlNVUFBPUlRFRF9QTEFURk9STTsKICAgCisgIGJ1
aWxkU2ltcGxlRnVuY3Rpb24oKTsKKyAgYnVpbGRNQ0pJVE9wdGlvbnMoKTsKKyAgdXNlUm91bmRU
cmlwU2VjdGlvbk1lbW9yeU1hbmFnZXIoKTsKKyAgYnVpbGRNQ0pJVEVuZ2luZSgpOworICBidWls
ZEFuZFJ1blBhc3NlcygpOworICAKICAgdW5pb24gewogICAgIHZvaWQgKnJhdzsKICAgICBpbnQg
KCp1c2FibGUpKCk7CiAgIH0gZnVuY3Rpb25Qb2ludGVyOwotICBmdW5jdGlvblBvaW50ZXIucmF3
ID0gTExWTUdldFBvaW50ZXJUb0dsb2JhbChlbmdpbmUsIGZ1bmN0aW9uKTsKKyAgZnVuY3Rpb25Q
b2ludGVyLnJhdyA9IExMVk1HZXRQb2ludGVyVG9HbG9iYWwoRW5naW5lLCBGdW5jdGlvbik7CiAg
IAogICBFWFBFQ1RfRVEoNDIsIGZ1bmN0aW9uUG9pbnRlci51c2FibGUoKSk7Ci0gIAotICBMTFZN
RGlzcG9zZUV4ZWN1dGlvbkVuZ2luZShlbmdpbmUpOworICBFWFBFQ1RfVFJVRShkaWRDYWxsQWxs
b2NhdGVDb2RlU2VjdGlvbik7CiB9Ci0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202208</attachid>
            <date>2013-05-18 09:12:19 -0700</date>
            <delta_ts>2013-05-18 09:12:19 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>11421</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwMzM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBA
CisyMDEzLTA1LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBmb3JjZSBMTFZNIHRvIHVzZSBvdXIgb3duIEpJVCBtZW1vcnkgYWxsb2NhdG9y
LCBhbmQgd2Ugc2hvdWxkbid0IGhhdmUgdG8ga2VlcCBhcm91bmQgYW4gTExWTUV4ZWN1dGlvbkVu
Z2luZVJlZiB0byBrZWVwIGNvZGUgYWxpdmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExMzYxOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyB1c2VzIG5ldyBBUEkgdGhhdCBJJ3ZlIGV4
cG9zZWQsIHdoaWNoIGFsbG93cyBmb3IgbWVtb3J5IG1hbmFnZXIgY2FsbGJhY2tzCisgICAgICAg
IGZyb20gd2l0aGluIExMVk0uIExMVk0gbWF5IGFsbG9jYXRlIG11bHRpcGxlIGluZGVwZW5kZW50
IGNodW5rcyBvZiBtZW1vcnkgZm9yCisgICAgICAgIGEgbW9kdWxlLCBhbmQgd2UgdHJhY2sgYWxs
IG9mIHRob3NlIGluIGEgVmVjdG9yIGluIEZUTDo6SklUQ29kZS4KKworICAgICAgICAqIGZ0bC9G
VExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjptbUFsbG9jYXRlQ29kZVNlY3Rpb24p
OgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRMOjptbUFsbG9jYXRlRGF0YVNlY3Rp
b24pOgorICAgICAgICAoSlNDOjpGVEw6Om1tQXBwbHlQZXJtaXNzaW9ucyk6CisgICAgICAgIChK
U0M6OkZUTDo6bW1EZXN0cm95KToKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlKToKKyAgICAg
ICAgKiBmdGwvRlRMSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6SklU
Q29kZSk6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6fkpJVENvZGUpOgorICAgICAgICAo
SlNDOjpGVEw6OkpJVENvZGU6OmFkZEhhbmRsZSk6CisgICAgICAgIChGVEwpOgorICAgICAgICAo
SlNDOjpGVEw6OkpJVENvZGU6OmluaXRpYWxpemVDb2RlKToKKyAgICAgICAgKiBmdGwvRlRMSklU
Q29kZS5oOgorICAgICAgICAoSklUQ29kZSk6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6
aGFuZGxlcyk6CisgICAgICAgICogZnRsL0ZUTEpJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6SklURmluYWxpemVyOjp+SklURmluYWxpemVyKToKKyAgICAgICAgKEpTQzo6RlRM
OjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24pOgorICAgICAgICAqIGZ0bC9GVExKSVRG
aW5hbGl6ZXIuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmluaXRpYWxpemVF
bnRyeXBvaW50TGlua0J1ZmZlcik6CisgICAgICAgIChKSVRGaW5hbGl6ZXIpOgorICAgICAgICAq
IGZ0bC9GVExMaW5rLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpsaW5rKToKKyAgICAgICAgKiBm
dGwvRlRMU3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OlN0YXRlOjpTdGF0ZSk6CisgICAg
ICAgICogZnRsL0ZUTFN0YXRlLmg6CisgICAgICAgIChTdGF0ZSk6CisKIDIwMTMtMDUtMTcgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBmb3VydGhUaWVyOiBnZXRD
VElTdHViIHNob3VsZCBiZSB0aHJlYWQtc2FmZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAxNTAxMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDQ2FsbEhl
bHBlcnMuaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJGVExKSVRDb2RlLmgi
CiAjaW5jbHVkZSAiRlRMTExWTUhlYWRlcnMuaCIKICNpbmNsdWRlICJKSVRTdHVicy5oIgogI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTM5LDYgKzQwLDQ0IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKIAogdXNpbmcgbmFtZXNwYWNlIERGRzsKIAorc3RhdGljIHVpbnQ4X3Qq
IG1tQWxsb2NhdGVDb2RlU2VjdGlvbigKKyAgICB2b2lkKiBvcGFxdWVTdGF0ZSwgdWludHB0cl90
IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCwgdW5zaWduZWQgc2VjdGlvbklEKQoreworICAgIFVO
VVNFRF9QQVJBTShzZWN0aW9uSUQpOworICAgIAorICAgIFN0YXRlJiBzdGF0ZSA9ICpzdGF0aWNf
Y2FzdDxTdGF0ZSo+KG9wYXF1ZVN0YXRlKTsKKyAgICAKKyAgICBBU1NFUlQoYWxpZ25tZW50IDw9
IGppdEFsbG9jYXRpb25HcmFudWxlKTsKKyAgICAKKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9y
eUhhbmRsZT4gcmVzdWx0ID0KKyAgICAgICAgc3RhdGUuZ3JhcGgubV92bS5leGVjdXRhYmxlQWxs
b2NhdG9yLmFsbG9jYXRlKAorICAgICAgICAgICAgc3RhdGUuZ3JhcGgubV92bSwgc2l6ZSwgc3Rh
dGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgIAor
ICAgIHN0YXRlLmppdENvZGUtPmFkZEhhbmRsZShyZXN1bHQpOworICAgIAorICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1aW50OF90Kj4ocmVzdWx0LT5zdGFydCgpKTsKK30KKworc3RhdGljIHVpbnQ4
X3QqIG1tQWxsb2NhdGVEYXRhU2VjdGlvbigKKyAgICB2b2lkKiBvcGFxdWVTdGF0ZSwgdWludHB0
cl90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCwgdW5zaWduZWQgc2VjdGlvbklELAorICAgIExM
Vk1Cb29sIGlzUmVhZE9ubHkpCit7CisgICAgLy8gRklYTUU6IGZvdXJ0aFRpZXI6IEZUTCBtZW1v
cnkgYWxsb2NhdG9yIHNob3VsZCBiZSBhYmxlIHRvIGFsbG9jYXRlIGRhdGEKKyAgICAvLyBzZWN0
aW9ucyBpbiBub24tZXhlY3V0YWJsZSBtZW1vcnkuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjE4OQorICAgIFVOVVNFRF9QQVJBTShpc1JlYWRPbmx5
KTsKKyAgICByZXR1cm4gbW1BbGxvY2F0ZUNvZGVTZWN0aW9uKG9wYXF1ZVN0YXRlLCBzaXplLCBh
bGlnbm1lbnQsIHNlY3Rpb25JRCk7Cit9CisKK3N0YXRpYyBMTFZNQm9vbCBtbUFwcGx5UGVybWlz
c2lvbnModm9pZCosIGNoYXIqKikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2
b2lkIG1tRGVzdHJveSh2b2lkKikKK3sKK30KKwogdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSkK
IHsKICAgICBjaGFyKiBlcnJvciA9IDA7CkBAIC00OSwxNCArODgsMTkgQEAgdm9pZCBjb21waWxl
KFN0YXRlJiBzdGF0ZSkKICAgICBvcHRpb25zLk5vRnJhbWVQb2ludGVyRWxpbSA9IHRydWU7CiAg
ICAgb3B0aW9ucy5Db2RlTW9kZWwgPSBMTFZNQ29kZU1vZGVsU21hbGw7CiAgICAgb3B0aW9ucy5F
bmFibGVGYXN0SVNlbCA9IE9wdGlvbnM6OmVuYWJsZUxMVk1GYXN0SVNlbCgpOworICAgIG9wdGlv
bnMuTUNKTU0gPSBMTFZNQ3JlYXRlU2ltcGxlQ3VzdG9tTUNKSVRNZW1vcnlNYW5hZ2VyKAorICAg
ICAgICAmc3RhdGUsIG1tQWxsb2NhdGVDb2RlU2VjdGlvbiwgbW1BbGxvY2F0ZURhdGFTZWN0aW9u
LCBtbUFwcGx5UGVybWlzc2lvbnMsCisgICAgICAgIG1tRGVzdHJveSk7CisgICAgCisgICAgTExW
TUV4ZWN1dGlvbkVuZ2luZVJlZiBlbmdpbmU7CiAgICAgCi0gICAgaWYgKExMVk1DcmVhdGVNQ0pJ
VENvbXBpbGVyRm9yTW9kdWxlKCZzdGF0ZS5lbmdpbmUsIHN0YXRlLm1vZHVsZSwgJm9wdGlvbnMs
IHNpemVvZihvcHRpb25zKSwgJmVycm9yKSkgeworICAgIGlmIChMTFZNQ3JlYXRlTUNKSVRDb21w
aWxlckZvck1vZHVsZSgmZW5naW5lLCBzdGF0ZS5tb2R1bGUsICZvcHRpb25zLCBzaXplb2Yob3B0
aW9ucyksICZlcnJvcikpIHsKICAgICAgICAgZGF0YUxvZygiRkFUQUw6IENvdWxkIG5vdCBjcmVh
dGUgTExWTSBleGVjdXRpb24gZW5naW5lOiAiLCBlcnJvciwgIlxuIik7CiAgICAgICAgIENSQVNI
KCk7CiAgICAgfQogICAgIAogICAgIExMVk1QYXNzTWFuYWdlclJlZiBwYXNzID0gTExWTUNyZWF0
ZVBhc3NNYW5hZ2VyKCk7Ci0gICAgTExWTUFkZFRhcmdldERhdGEoTExWTUdldEV4ZWN1dGlvbkVu
Z2luZVRhcmdldERhdGEoc3RhdGUuZW5naW5lKSwgcGFzcyk7CisgICAgTExWTUFkZFRhcmdldERh
dGEoTExWTUdldEV4ZWN1dGlvbkVuZ2luZVRhcmdldERhdGEoZW5naW5lKSwgcGFzcyk7CiAgICAg
TExWTUFkZENvbnN0YW50UHJvcGFnYXRpb25QYXNzKHBhc3MpOwogICAgIExMVk1BZGRJbnN0cnVj
dGlvbkNvbWJpbmluZ1Bhc3MocGFzcyk7CiAgICAgTExWTUFkZFByb21vdGVNZW1vcnlUb1JlZ2lz
dGVyUGFzcyhwYXNzKTsKQEAgLTY4LDEzICsxMTIsMTEgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBz
dGF0ZSkKICAgICBpZiAoREZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkoKSB8fCBERkc6OnZlcmJv
c2VDb21waWxhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgc3RhdGUuZHVtcFN0YXRlKCJhZnRlciBv
cHRpbWl6YXRpb24iKTsKICAgICAKLSAgICAvLyBGSVhNRTogTExWTSBzaG91bGQgdXNlIG91ciBv
d24gSklUIG1lbW9yeSBhbGxvY2F0b3IsIGFuZCB3ZSBzaG91bGRuJ3QgaGF2ZSB0bwotICAgIC8v
IGtlZXAgYXJvdW5kIGFuIExMVk1FeGVjdXRpb25FbmdpbmVSZWYgdG8ga2VlcCBjb2RlIGFsaXZl
LgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MTkK
ICAgICAvLyBGSVhNRTogTmVlZCB0byBhZGQgc3VwcG9ydCBmb3IgdGhlIGNhc2Ugd2hlcmUgSklU
IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIwCi0gICAgc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24gPSBy
ZWludGVycHJldF9jYXN0PEdlbmVyYXRlZEZ1bmN0aW9uPihMTFZNR2V0UG9pbnRlclRvR2xvYmFs
KHN0YXRlLmVuZ2luZSwgc3RhdGUuZnVuY3Rpb24pKTsKKyAgICBzdGF0ZS5nZW5lcmF0ZWRGdW5j
dGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8R2VuZXJhdGVkRnVuY3Rpb24+KExMVk1HZXRQb2ludGVy
VG9HbG9iYWwoZW5naW5lLCBzdGF0ZS5mdW5jdGlvbikpOwogICAgIExMVk1EaXNwb3NlUGFzc01h
bmFnZXIocGFzcyk7CisgICAgTExWTURpc3Bvc2VFeGVjdXRpb25FbmdpbmUoZW5naW5lKTsKIH0K
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpJVENvZGUuY3BwCShyZXZpc2lvbiAxNTAxMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNCArMzIsMTEg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiBKSVRDb2RlOjpKSVRDb2RlKCkK
ICAgICA6IEpTQzo6SklUQ29kZShGVExKSVQpCi0gICAgLCBtX2VuZ2luZSgwKQogewogfQogCiBK
SVRDb2RlOjp+SklUQ29kZSgpCiB7Ci0gICAgaWYgKG1fZW5naW5lKQotICAgICAgICBMTFZNRGlz
cG9zZUV4ZWN1dGlvbkVuZ2luZShtX2VuZ2luZSk7CiB9CiAKIHZvaWQgSklUQ29kZTo6aW5pdGlh
bGl6ZUV4aXRUaHVua3MoQ29kZVJlZiBleGl0VGh1bmtzKQpAQCAtNDcsOSArNDQsMTMgQEAgdm9p
ZCBKSVRDb2RlOjppbml0aWFsaXplRXhpdFRodW5rcyhDb2RlUgogICAgIG1fZXhpdFRodW5rcyA9
IGV4aXRUaHVua3M7CiB9CiAKLXZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUNvZGUoTExWTUV4ZWN1
dGlvbkVuZ2luZVJlZiBlbmdpbmUsIENvZGVSZWYgZW50cnlwb2ludCkKK3ZvaWQgSklUQ29kZTo6
YWRkSGFuZGxlKFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gaGFuZGxlKQorewor
ICAgIG1faGFuZGxlcy5hcHBlbmQoaGFuZGxlKTsKK30KKwordm9pZCBKSVRDb2RlOjppbml0aWFs
aXplQ29kZShDb2RlUmVmIGVudHJ5cG9pbnQpCiB7Ci0gICAgbV9lbmdpbmUgPSBlbmdpbmU7CiAg
ICAgbV9lbnRyeXBvaW50ID0gZW50cnlwb2ludDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKSVRDb2RlLmgJKHJldmlzaW9uIDE1MDEzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCwxMCBA
QCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWlucyh2b2lkKik7CiAgICAgCiAgICAgdm9pZCBpbml0
aWFsaXplRXhpdFRodW5rcyhDb2RlUmVmKTsKLSAgICB2b2lkIGluaXRpYWxpemVDb2RlKExMVk1F
eGVjdXRpb25FbmdpbmVSZWYsIENvZGVSZWYgZW50cnlwb2ludCk7CisgICAgdm9pZCBhZGRIYW5k
bGUoUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPik7CisgICAgdm9pZCBpbml0aWFs
aXplQ29kZShDb2RlUmVmIGVudHJ5cG9pbnQpOworICAgIAorICAgIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gPiYgaGFuZGxlcygpIGNvbnN0IHsgcmV0dXJuIG1f
aGFuZGxlczsgfQogICAgIAogICAgIENvZGVQdHIgZXhpdFRodW5rcygpOwogICAgIApAQCAtNjEs
MTAgKzY0LDcgQEAgcHVibGljOgogICAgIFNlZ21lbnRlZFZlY3RvcjxPU1JFeGl0LCA4PiBvc3JF
eGl0OwogICAgIAogcHJpdmF0ZToKLSAgICAvLyBGSVhNRTogTExWTSBzaG91bGQgdXNlIG91ciBv
d24gSklUIG1lbW9yeSBhbGxvY2F0b3IsIGFuZCB3ZSBzaG91bGRuJ3QgaGF2ZSB0bwotICAgIC8v
IGtlZXAgYXJvdW5kIGFuIExMVk1FeGVjdXRpb25FbmdpbmVSZWYgdG8ga2VlcCBjb2RlIGFsaXZl
LgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MTkK
LSAgICBMTFZNRXhlY3V0aW9uRW5naW5lUmVmIG1fZW5naW5lOworICAgIFZlY3RvcjxSZWZQdHI8
RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gPiBtX2hhbmRsZXM7CiAgICAgQ29kZVJlZiBtX2VudHJ5
cG9pbnQ7CiAgICAgQ29kZVJlZiBtX2V4aXRUaHVua3M7CiB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkocmV2aXNpb24gMTUwMTM5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw4ICs0Miw2IEBAIEpJVEZpbmFsaXplcjo6SklURmluYWxpemVyKFBsYW4m
IHBsYW4pCiAKIEpJVEZpbmFsaXplcjo6fkpJVEZpbmFsaXplcigpCiB7Ci0gICAgaWYgKG1fZW5n
aW5lKQotICAgICAgICBMTFZNRGlzcG9zZUV4ZWN1dGlvbkVuZ2luZShtX2VuZ2luZSk7CiB9CiAK
IGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZShSZWZQdHI8SlNDOjpKSVRDb2RlPiYpCkBAIC01
NCw2ICs1MiwxMSBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemUoUmVmUHRyPEpTQzo6CiAK
IGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKFJlZlB0cjxKU0M6OkpJVENvZGU+
JiBlbnRyeSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiB3aXRoQXJpdHlDaGVjaykKIHsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX2ppdENvZGUtPmhhbmRsZXMoKS5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OmNhY2hlRmx1c2goCisgICAgICAgICAgICBtX2ppdENvZGUt
PmhhbmRsZXMoKVtpXS0+c3RhcnQoKSwgbV9qaXRDb2RlLT5oYW5kbGVzKClbaV0tPnNpemVJbkJ5
dGVzKCkpOworICAgIH0KKyAgICAKICAgICBpZiAobV9leGl0VGh1bmtzTGlua0J1ZmZlcikgewog
ICAgICAgICBtX2ppdENvZGUtPmluaXRpYWxpemVFeGl0VGh1bmtzKAogICAgICAgICAgICAgRklO
QUxJWkVfREZHX0NPREUoCkBAIC02MywxNCArNjYsMTEgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZp
bmFsaXplRnVuY3Rpb24oUmVmUAogICAgIAogICAgIHdpdGhBcml0eUNoZWNrID0gbV9lbnRyeXBv
aW50TGlua0J1ZmZlci0+bG9jYXRpb25PZihtX2FyaXR5Q2hlY2spOwogICAgIG1faml0Q29kZS0+
aW5pdGlhbGl6ZUNvZGUoCi0gICAgICAgIG1fZW5naW5lLAogICAgICAgICBGSU5BTElaRV9ERkdf
Q09ERSgKICAgICAgICAgICAgICptX2VudHJ5cG9pbnRMaW5rQnVmZmVyLAogICAgICAgICAgICAg
KCJGVEwgZW50cnlwb2ludCB0aHVuayBmb3IgJXMgd2l0aCBMTFZNIGdlbmVyYXRlZCBjb2RlIGF0
ICVwIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJ
VENvZGU6OkZUTEpJVCkpLmRhdGEoKSwgbV9mdW5jdGlvbikpKTsKICAgICBlbnRyeSA9IG1faml0
Q29kZTsKICAgICAKLSAgICBtX2VuZ2luZSA9IDA7IC8vIFdlIGRvbid0IG93biBpdCBhbnltb3Jl
LgotICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpJVEZpbmFsaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgJKHJldmlzaW9uIDE1MDEzOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDEwICs1Miw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fZW50cnlwb2ludExpbmtCdWZm
ZXIgPSBidWZmZXI7CiAgICAgfQotICAgIHZvaWQgaW5pdGlhbGl6ZUNvZGUoTExWTUV4ZWN1dGlv
bkVuZ2luZVJlZiBlbmdpbmUpCi0gICAgewotICAgICAgICBtX2VuZ2luZSA9IGVuZ2luZTsKLSAg
ICB9CiAgICAgdm9pZCBpbml0aWFsaXplRnVuY3Rpb24oR2VuZXJhdGVkRnVuY3Rpb24gZnVuY3Rp
b24pCiAgICAgewogICAgICAgICBtX2Z1bmN0aW9uID0gZnVuY3Rpb247CkBAIC03NSw3ICs3MSw2
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgT3duUHRyPExpbmtCdWZmZXI+IG1fZXhpdFRodW5r
c0xpbmtCdWZmZXI7CiAgICAgT3duUHRyPExpbmtCdWZmZXI+IG1fZW50cnlwb2ludExpbmtCdWZm
ZXI7Ci0gICAgTExWTUV4ZWN1dGlvbkVuZ2luZVJlZiBtX2VuZ2luZTsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbV9hcml0eUNoZWNrOwogICAgIEdlbmVyYXRlZEZ1bmN0aW9uIG1fZnVuY3Rp
b247CiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0Q29kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMTUwMTM5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDcgKzEyMiw2IEBA
IHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlD
aGVjaywgc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2stPm1faXNDb25zdHJ1Y3RvciA/IGN0aV9vcF9j
b25zdHJ1Y3RfYXJpdHlDaGVjayA6IGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2spOwogICAgIAogICAg
IHN0YXRlLmZpbmFsaXplci0+aW5pdGlhbGl6ZUVudHJ5cG9pbnRMaW5rQnVmZmVyKGxpbmtCdWZm
ZXIucmVsZWFzZSgpKTsKLSAgICBzdGF0ZS5maW5hbGl6ZXItPmluaXRpYWxpemVDb2RlKHN0YXRl
LmVuZ2luZSk7CiAgICAgc3RhdGUuZmluYWxpemVyLT5pbml0aWFsaXplRnVuY3Rpb24oc3RhdGUu
Z2VuZXJhdGVkRnVuY3Rpb24pOwogICAgIHN0YXRlLmZpbmFsaXplci0+aW5pdGlhbGl6ZUFyaXR5
Q2hlY2soYXJpdHlDaGVjayk7CiAgICAgc3RhdGUuZmluYWxpemVyLT5pbml0aWFsaXplSklUQ29k
ZShzdGF0ZS5qaXRDb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3Rh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUu
Y3BwCShyZXZpc2lvbiAxNTAxMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0
YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBAQCBTdGF0ZTo6U3RhdGUoR3Jh
cGgmIGdyYXBoKQogICAgICwgbW9kdWxlKDApCiAgICAgLCBmdW5jdGlvbigwKQogICAgICwgaml0
Q29kZShhZG9wdFJlZihuZXcgSklUQ29kZSgpKSkKLSAgICAsIGVuZ2luZSgwKQogICAgICwgZ2Vu
ZXJhdGVkRnVuY3Rpb24oMCkKIHsKICAgICBmaW5hbGl6ZXIgPSBuZXcgSklURmluYWxpemVyKGdy
YXBoLm1fcGxhbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZp
c2lvbiAxNTAxMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDYgQEAgcHVibGljOgogICAgIExWYWx1ZSBmdW5jdGlv
bjsKICAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZTsKICAgICBWZWN0b3I8T1NSRXhpdENvbXBp
bGF0aW9uSW5mbz4gb3NyRXhpdDsKLSAgICBMTFZNRXhlY3V0aW9uRW5naW5lUmVmIGVuZ2luZTsK
ICAgICBHZW5lcmF0ZWRGdW5jdGlvbiBnZW5lcmF0ZWRGdW5jdGlvbjsKICAgICBKSVRGaW5hbGl6
ZXIqIGZpbmFsaXplcjsKICAgICAK
</data>

          </attachment>
      

    </bug>

</bugzilla>