<?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>125433</bug_id>
          
          <creation_ts>2013-12-08 19:54:43 -0800</creation_ts>
          <short_desc>Hoist and combine array bounds checks</short_desc>
          <delta_ts>2014-02-17 07:14:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>125253</dependson>
    
    <dependson>125480</dependson>
    
    <dependson>125519</dependson>
    
    <dependson>128635</dependson>
    
    <dependson>128910</dependson>
          <blocked>112840</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>bunhere</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>957741</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-08 19:54:43 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>979659</commentid>
    <comment_count>1</comment_count>
      <attachid>223912</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-11 16:41:02 -0800</bug_when>
    <thetext>Created attachment 223912
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>979712</commentid>
    <comment_count>2</comment_count>
      <attachid>223929</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-11 19:05:06 -0800</bug_when>
    <thetext>Created attachment 223929
almost done

I would test this except I&apos;m blocked on https://bugs.webkit.org/show_bug.cgi?id=128635.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>979782</commentid>
    <comment_count>3</comment_count>
      <attachid>223943</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-11 23:16:43 -0800</bug_when>
    <thetext>Created attachment 223943
more!!

It successfully eliminated some overflow checks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>979799</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-12 01:09:48 -0800</bug_when>
    <thetext>Attachment 223943 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGIntegerCheckHoistingPhase.cpp:30:  You should not add a blank line before implementation file&apos;s own header.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGIntegerCheckHoistingPhase.cpp:287:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGIntegerCheckHoistingPhase.cpp:310:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 3 in 33 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>980057</commentid>
    <comment_count>5</comment_count>
      <attachid>224020</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-12 15:57:24 -0800</bug_when>
    <thetext>Created attachment 224020
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>980088</commentid>
    <comment_count>6</comment_count>
      <attachid>224020</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-02-12 17:08:27 -0800</bug_when>
    <thetext>Comment on attachment 224020
the patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGAbstractValue.cpp:77
&gt;          m_futurePossibleStructure.clear();
&gt;          m_arrayModes = 0;
&gt;      }
&gt; -        
&gt; +    
&gt;      m_type = speculationFromValue(value);
&gt;      if (m_type == SpecInt52AsDouble)
&gt;          m_type = SpecInt52;
&gt;      m_value = value;
&gt; -        
&gt; +    
&gt;      checkConsistency();
&gt;  }
&gt;  

Revert.

&gt; Source/JavaScriptCore/dfg/DFGInsertionSet.h:62
&gt;      {
&gt;          return insert(Insertion(index, element));
&gt;      }
&gt; -
&gt; +    
&gt;  #define DFG_DEFINE_INSERT_NODE(templatePre, templatePost, typeParams, valueParamsComma, valueParams, valueArgs) \
&gt;      templatePre typeParams templatePost Node* insertNode(size_t index, SpeculatedType type valueParamsComma valueParams) \
&gt;      { \

Revert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>980463</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-13 14:42:06 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/164059</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223912</attachid>
            <date>2014-02-11 16:41:02 -0800</date>
            <delta_ts>2014-02-11 19:05:06 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>20135</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJpdGhNb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcml0aE1vZGUuaAkocmV2aXNpb24g
MTYzODkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcml0aE1vZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMzMgQEAgaW5saW5lIGJvb2wgc2hvdWxkQ2hlY2tOZWdh
dGl2ZVplcm8oQXJpdAogICAgIHJldHVybiB0cnVlOwogfQogCitpbmxpbmUgYm9vbCBzdWJzdW1l
cyhBcml0aE1vZGUgZWFybGllciwgQXJpdGhNb2RlIGxhdGVyKQoreworICAgIHN3aXRjaCAoZWFy
bGllcikgeworICAgIGNhc2UgQXJpdGg6OkNoZWNrT3ZlcmZsb3c6CisgICAgICAgIHN3aXRjaCAo
bGF0ZXIpIHsKKyAgICAgICAgY2FzZSBBcml0aDo6VW5jaGVja2VkOgorICAgICAgICBjYXNlIEFy
aXRoOjpDaGVja092ZXJmbG93OgorICAgICAgICBjYXNlIEFyaXRoOjpEb092ZXJmbG93OgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICBjYXNlIEFyaXRoOjpDaGVja092ZXJmbG93QW5kTmVn
YXRpdmVaZXJvOgorICAgICAgICBzd2l0Y2ggKGxhdGVyKSB7CisgICAgICAgIGNhc2UgQXJpdGg6
OlVuY2hlY2tlZDoKKyAgICAgICAgY2FzZSBBcml0aDo6Q2hlY2tPdmVyZmxvdzoKKyAgICAgICAg
Y2FzZSBBcml0aDo6Q2hlY2tPdmVyZmxvd0FuZE5lZ2F0aXZlWmVybzoKKyAgICAgICAgY2FzZSBB
cml0aDo6RG9PdmVyZmxvdzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGVhcmxpZXIgPT0gbGF0ZXI7CisgICAgfQorfQorCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE2Mzg5MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAs
NyArMTQwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKG5vZGUtPmhhc0FyaXRoTW9kZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmFyaXRoTW9kZSgpICE9IG90aGVyTm9kZS0+YXJpdGhNb2RlKCkpCisg
ICAgICAgICAgICAgICAgaWYgKCFzdWJzdW1lcyhub2RlLT5hcml0aE1vZGUoKSwgb3RoZXJOb2Rl
LT5hcml0aE1vZGUoKSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Vk
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAko
cmV2aXNpb24gMTYzODkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE3Myw2ICsxNzMsMTUgQEAgcHVibGljOgogICAgIH0KICAgICAK
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgcmV0dXJuIElu
dEhhc2g8dWludHB0cl90Pjo6aGFzaChtX2VuY29kZWRXb3JkKTsKKyNlbHNlCisgICAgICAgIHJl
dHVybiBQdHJIYXNoPE5vZGUqPjo6aGFzaChtX25vZGUpICsgbV9lbmNvZGVkV29yZDsKKyNlbmRp
ZgorICAgIH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWRqYWNlbmN5TGlzdDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkocmV2aXNp
b24gMTYzODkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gaW5zZXJ0KEluc2VydGlvbihpbmRleCwgZWxlbWVudCkpOwogICAgIH0KLQorICAg
IAogI2RlZmluZSBERkdfREVGSU5FX0lOU0VSVF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBv
c3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3Mp
IFwKICAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBpbnNlcnRO
b2RlKHNpemVfdCBpbmRleCwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZh
bHVlUGFyYW1zKSBcCiAgICAgeyBcCkBAIC02NSw2ICs2NSwxNSBAQCBwdWJsaWM6CiAgICAgREZH
X1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfSU5TRVJUX05PREUpCiAjdW5k
ZWYgREZHX0RFRklORV9JTlNFUlRfTk9ERQogICAgIAorICAgIE5vZGUqIGluc2VydENvbnN0YW50
KHNpemVfdCBpbmRleCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgdW5zaWduZWQgY29uc3RhbnRSZWcgPQorICAgICAgICAgICAgbV9ncmFwaC5j
b25zdGFudFJlZ2lzdGVyRm9yQ29uc3RhbnQoanNOdW1iZXIoLXZhbHVlKSk7CisgICAgICAgIHJl
dHVybiBpbnNlcnROb2RlKAorICAgICAgICAgICAgaW5kZXgsIHNwZWN1bGF0aW9uRnJvbVZhbHVl
KHZhbHVlKSwgSlNDb25zdGFudCwgY29kZU9yaWdpbiwKKyAgICAgICAgICAgIE9wSW5mbyhjb25z
dGFudFJlZykpOworICAgIH0KKwogICAgIHZvaWQgZXhlY3V0ZShCYXNpY0Jsb2NrKiBibG9jaykK
ICAgICB7CiAgICAgICAgIGV4ZWN1dGVJbnNlcnRpb25zKCpibG9jaywgbV9pbnNlcnRpb25zKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlckNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRl
Z2VyQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJERkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlLmgiCisKKyNpbmNsdWRlICJE
RkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1Bo
YXNlLmgiCisjaW5jbHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIKKyNpbmNs
dWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK25hbWVzcGFjZSB7CisKK2Vu
dW0gUmFuZ2VLaW5kIHsKKyAgICBJbnZhbGlkUmFuZ2VLaW5kLAorICAgIAorICAgIC8vIFRoaXMg
bWVhbnMgd2UgZGlkIEFyaXRoQWRkIHdpdGggQ2hlY2tPdmVyZmxvdy4KKyAgICBBZGRpdGlvbiwK
KyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHdlIGRpZCBDaGVja0luQm91bmRzIG9uIHNvbWUgbGVu
Z3RoLgorICAgIEFycmF5Qm91bmRzCit9OworCitzdHJ1Y3QgUmFuZ2VLZXkgeworICAgIFJhbmdl
S2V5KCkKKyAgICAgICAgOiBtX2tpbmQoSW52YWxpZFJhbmdlS2luZCkKKyAgICAgICAgLCBtX2tl
eShudWxscHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFJhbmdlS2V5IGFkZGl0
aW9uKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIFJhbmdlS2V5IHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fa2luZCA9IEFkZGl0aW9uOworICAgICAgICByZXN1bHQubV9zb3VyY2UgPSBlZGdl
OworICAgICAgICByZXN1bHQubV9rZXkgPSAwOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgUmFuZ2VLZXkgYXJyYXlCb3VuZHMoRWRnZSBlZGdlLCBOb2Rl
KiBrZXkpCisgICAgeworICAgICAgICBSYW5nZUtleSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBBcnJheUJvdW5kczsKKyAgICAgICAgcmVzdWx0Lm1fc291cmNlID0gZWRnZTsKKyAg
ICAgICAgcmVzdWx0Lm1fa2V5ID0ga2V5OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBJbnZh
bGlkUmFuZ2VLaW5kOyB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9raW5kICsgbV9zb3VyY2UuaGFzaCgpICsgUHRySGFzaDxOb2RlKj46
Omhhc2gobV9rZXkpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmFu
Z2VLZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBvdGhl
ci5tX2tpbmQKKyAgICAgICAgICAgICYmIG1fc291cmNlID09IG90aGVyLm1fc291cmNlCisgICAg
ICAgICAgICAmJiBtX2tleSA9PSBvdGhlci5tX2tleTsKKyAgICB9CisgICAgCisgICAgUmFuZ2VL
aW5kIG1fa2luZDsKKyAgICBFZGdlIG1fc291cmNlOworICAgIE5vZGUqIG1fa2V5OworfTsKKwor
c3RydWN0IFJhbmdlS2V5QW5kQWRkZW5kIHsKKyAgICBSYW5nZUtleUFuZEFkZGVuZCgpCisgICAg
ICAgIDogbV9hZGRlbmQoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFJhbmdlS2V5QW5kQWRk
ZW5kKFJhbmdlS2V5IGtleSwgaW50MzJfdCBhZGRlbmQpCisgICAgICAgIDogbV9rZXkoa2V5KQor
ICAgICAgICAsIG1fYWRkZW5kKGFkZGVuZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fa2V5ICYmICFtX2FkZGVuZDsgfQorICAgIAor
ICAgIFJhbmdlS2V5IG1fa2V5OworICAgIGludDMyX3QgbV9hZGRlbmQ7Cit9OworCitzdHJ1Y3Qg
UmFuZ2UgeworICAgIFJhbmdlKCkKKyAgICAgICAgOiBtX21pbkJvdW5kKDApCisgICAgICAgICwg
bV9tYXhCb3VuZCgwKQorICAgICAgICAsIG1fY291bnQoMCkKKyAgICAgICAgLCBtX2hvaXN0ZWQo
ZmFsc2UpCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG1fbWluQm91bmQ7CisgICAg
Q29kZU9yaWdpbiBtX21pbk9yaWdpbjsKKyAgICBpbnQzMl90IG1fbWF4Qm91bmQ7CisgICAgQ29k
ZU9yaWdpbiBtX21heE9yaWdpbjsKKyAgICB1bnNpZ25lZCBtX2NvdW50OyAvLyBJZiB0aGlzIGlz
IHplcm8gdGhlbiB0aGUgYm91bmRzIHdvbid0IG5lY2Vzc2FyaWx5IG1ha2Ugc2Vuc2UuCisgICAg
Ym9vbCBtX2hvaXN0ZWQ7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworY2xhc3Mg
SW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAg
SW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2Uo
Z3JhcGgsICJpbnRlZ2VyIGNoZWNrIGhvaXN0aW5nIikKKyAgICAgICAgLCBtX2luc2VydGlvblNl
dChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICAKKyAgICAgICAgbV9j
aGFuZ2VkID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLmluaXRpYWxpemVOb2Rl
T3duZXJzKCk7CisgICAgICAgIAorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KQorICAgICAg
ICAgICAgaGFuZGxlQmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4g
bV9jaGFuZ2VkOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGhhbmRsZUJsb2NrKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCkKKyAgICB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG1fbWFwLmNsZWFyKCk7CisgICAgICAgIAorICAg
ICAgICAvLyBGaXJzdCB3ZSBjb2xsZWN0IFJhbmdlcy4gSWYgb3BlcmF0aW9ucyB3aXRoaW4gdGhl
IHJhbmdlIGhhdmUgZW5vdWdoIHJlZHVuZGFuY3ksCisgICAgICAgIC8vIHdlIGhvaXN0LiBBbmQg
dGhlbiB3ZSByZW1vdmUgYWRkaXRpb25zIGFuZCBjaGVja3MgdGhhdCBmYWxsIHdpdGhpbiB0aGUg
bWF4IHJhbmdlLgorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAw
OyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgUmFuZ2VLZXlB
bmRBZGRlbmQgZGF0YSA9IHJhbmdlS2V5QW5kQWRkZW5kKG5vZGUpOworICAgICAgICAgICAgaWYg
KCFkYXRhKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgUmFuZ2UmIHJh
bmdlID0gbV9tYXBbZGF0YS5tX2tleV07CisgICAgICAgICAgICBpZiAocmFuZ2UubV9jb3VudCkg
eworICAgICAgICAgICAgICAgIGlmIChkYXRhLm1fYWRkZW5kID4gcmFuZ2UubV9tYXhCb3VuZCkg
eworICAgICAgICAgICAgICAgICAgICByYW5nZS5tX21heEJvdW5kID0gZGF0YS5tX2FkZGVuZDsK
KyAgICAgICAgICAgICAgICAgICAgcmFuZ2UubV9tYXhPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2lu
OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5tX2FkZGVuZCA8IHJhbmdlLm1fbWlu
Qm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2UubV9taW5Cb3VuZCA9IGRhdGEubV9h
ZGRlbmQ7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLm1fbWluT3JpZ2luID0gbm9kZS0+Y29k
ZU9yaWdpbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHJhbmdlLm1fbWF4Qm91bmQgPSBkYXRhLm1fYWRkZW5kOworICAgICAgICAgICAg
ICAgIHJhbmdlLm1fbWluQm91bmQgPSBkYXRhLm1fYWRkZW5kOworICAgICAgICAgICAgICAgIHJh
bmdlLm1fbWluT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKKyAgICAgICAgICAgICAgICByYW5n
ZS5tX21heE9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByYW5nZS5tX2NvdW50Kys7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAo
dW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2Rl
SW5kZXgpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsK
KyAgICAgICAgICAgIFJhbmdlS2V5QW5kQWRkZW5kIGRhdGEgPSByYW5nZUtleUFuZEFkZGVuZChu
b2RlKTsKKyAgICAgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIFJhbmdlIHJhbmdlID0gbV9tYXBbZGF0YS5tX2tleV07CisgICAgICAgICAg
ICBpZiAocmFuZ2UubV9jb3VudCA8IDIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIERvIHRoZSBob2lzdGluZy4KKyAgICAgICAgICAgIGlm
ICghcmFuZ2UubV9ob2lzdGVkKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChkYXRhLm1fa2V5
Lm1fa2luZCkgeworICAgICAgICAgICAgICAgIGNhc2UgQWRkaXRpb246IHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHJhbmdlLm1fbWluQm91bmQgPCAwKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpbnNlcnRBZGRQaGFudG9tKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCwgcmFuZ2UubV9taW5PcmlnaW4sIG5vZGUtPmNvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubV9rZXkubV9zb3VyY2UsIHJhbmdlLm1f
bWluQm91bmQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm
IChyYW5nZS5tX21heEJvdW5kID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
QWRkUGhhbnRvbSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIHJhbmdl
Lm1fbWF4T3JpZ2luLCBub2RlLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhLm1fa2V5Lm1fc291cmNlLCByYW5nZS5tX21heEJvdW5kKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBBcnJh
eUJvdW5kczogeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBtaW5Ob2RlOworICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBtYXhOb2RlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFkYXRhLm1fa2V5Lm1fc291cmNlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtaW5Ob2RlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heE5vZGUgPSBt
X2luc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlSW5kZXgsIHJhbmdlLm1fbWF4T3JpZ2luLCBqc051bWJlcihyYW5nZS5tX21heEJvdW5k
KSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtaW5Ob2RlID0gaW5zZXJ0QWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCwgcmFuZ2UubV9taW5PcmlnaW4sIG5vZGUtPmNvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubV9rZXkubV9zb3VyY2UsIHJhbmdlLm1f
bWluQm91bmQsIEFyaXRoOjpVbmNoZWNrZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgbWF4
Tm9kZSA9IGluc2VydEFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgs
IHJhbmdlLm1fbWF4T3JpZ2luLCBub2RlLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1fa2V5Lm1fc291cmNlLCByYW5nZS5tX21heEJv
dW5kLCBBcml0aDo6VW5jaGVja2VkKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1pbk5vZGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4LCBub2RlLT5jb2RlT3JpZ2luLCAuLi4pOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgcmFuZ2UubV9ob2lzdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRG8gdGhlIGVsaW1pbmF0aW9uLgorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAg
ICB9CisgICAgCisgICAgUmFuZ2VLZXlBbmRBZGRlbmQgcmFuZ2VLZXlBbmRBZGRlbmQoTm9kZSog
bm9kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNl
IEFyaXRoQWRkOiB7CisgICAgICAgICAgICBpZiAoIXNob3VsZENoZWNrT3ZlcmZsb3cobm9kZS0+
YXJpdGhNb2RlKCkpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKCFt
X2dyYXBoLmlzSW50MzJDb25zdGFudChub2RlLT5jaGlsZDIoKSkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICByZXR1cm4gUmFuZ2VLZXlBbmRBZGRlbmQoCisgICAgICAgICAg
ICAgICAgUmFuZ2VLZXk6OmFkZGl0aW9uKG5vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgICAg
ICBtX2dyYXBoLnZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpKSk7CisgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDaGVja0luQm91bmRzOiB7CisgICAg
ICAgICAgICBFZGdlIHNvdXJjZTsKKyAgICAgICAgICAgIGludDMyX3QgYWRkZW5kOworICAgICAg
ICAgICAgTm9kZSoga2V5ID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgp
KSkgeworICAgICAgICAgICAgICAgIFNvdXJjZSA9IEVkZ2UoKTsKKyAgICAgICAgICAgICAgICBh
ZGRlbmQgPSBtX2dyYXBoLnZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKAorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpLT5vcCgpID09IEFyaXRoQWRkCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCkt
PmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkKKyAgICAgICAgICAgICAgICAmJiAhc2hvdWxkQ2hl
Y2tPdmVyZmxvdyhub2RlLT5hcml0aE1vZGUoKSkKKyAgICAgICAgICAgICAgICAmJiBtX2dyYXBo
LmlzSW50MzJDb25zdGFudChub2RlLT5jaGlsZDEoKS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAg
ICAgICAgICAgICAgIHNvdXJjZSA9IG5vZGUtPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIGFk
ZGVuZCA9IG1fZ3JhcGgudmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCktPmNoaWxk
MigpLm5vZGUoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNvdXJj
ZSA9IG5vZGUtPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIGFkZGVuZCA9IDA7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBSYW5nZUtleUFuZEFkZGVu
ZChSYW5nZUtleTo6YXJyYXlCb3VuZHMoc291cmNlLCBrZXkpLCBhZGRlbmQpOworICAgICAgICB9
CisgICAgICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFJhbmdlS2V5QW5kQWRkZW5kKCk7
CisgICAgfQorICAgIAorICAgIE5vZGUqIGluc2VydEFkZCgKKyAgICAgICAgdW5zaWduZWQgbm9k
ZUluZGV4LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENvZGVPcmlnaW4gY29kZU9yaWdpbkZvckV4
aXRUYXJnZXQsCisgICAgICAgIEVkZ2Ugc291cmNlLCBpbnQzMl90IGFkZGVuZCwgQXJpdGhNb2Rl
IGFyaXRoTW9kZSA9IEFyaXRoOjpDaGVja092ZXJmbG93KQorICAgIHsKKyAgICAgICAgTm9kZSog
cmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgIG5vZGVJbmRl
eCwgc291cmNlLT5wcmVkaWN0aW9uKCksIEFyaXRoQWRkLCBjb2RlT3JpZ2luLCBPcEluZm8oYXJp
dGhNb2RlKSwKKyAgICAgICAgICAgIHNvdXJjZSwgRWRnZSgKKyAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnRDb25zdGFudChub2RlSW5kZXgsIGNvZGVPcmlnaW4sIGpzTnVtYmVy
KGFkZGVuZCkpLAorICAgICAgICAgICAgICAgIHNvdXJjZS51c2VLaW5kKCkpKTsKKyAgICAgICAg
cmVzdWx0LT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9IGNvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBOb2RlKiBpbnNlcnRB
ZGRQaGFudG9tKAorICAgICAgICB1bnNpZ25lZCBub2RlSW5kZXgsIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luRm9yRXhpdCwKKyAgICAgICAgRWRnZSBzb3VyY2Us
IGludDMyX3QgYWRkZW5kKQorICAgIHsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gaW5zZXJ0QWRk
KG5vZGVJbmRleCwgY29kZU9yaWdpbiwgY29kZU9yaWdpbkZvckV4aXQsIHNvdXJjZSwgYWRkZW5k
KTsKKyAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgIG5vZGVJ
bmRleCwgU3BlY05vbmUsIFBoYW50b20sIGNvZGVPcmlnaW4sIEVkZ2UocmVzdWx0LCBVbnR5cGVk
VXNlKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHR5cGVkZWYg
c3RkOjp1bm9yZGVyZWRfbWFwPFJhbmdlS2V5LCBSYW5nZSwgSGFzaE1ldGhvZDxSYW5nZUtleT4+
IFJhbmdlTWFwOworICAgIFJhbmdlTWFwIG1fbWFwOworICAgIEluc2VydGlvblNldCBtX2luc2Vy
dGlvblNldDsKKyAgICBib29sIG1fY2hhbmdlZDsKK307CisgICAgCitib29sIHBlcmZvcm1JbnRl
Z2VyQ2hlY2tIb2lzdGluZyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2Ft
cGxpbmdSZWdpb24oIkRGRyBJbnRlZ2VyIENoZWNrIEhvaXN0aW5nIFBoYXNlIik7CisgICAgcmV0
dXJuIHJ1blBoYXNlPEludGVnZXJDaGVja0hvaXN0aW5nUGhhc2U+KGdyYXBoKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlckNoZWNrSG9pc3RpbmdQaGFz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlckNo
ZWNrSG9pc3RpbmdQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERGR0ludGVnZXJDaGVja0hvaXN0aW5nUGhhc2VfaAorI2RlZmluZSBERkdJbnRl
Z2VyQ2hlY2tIb2lzdGluZ1BoYXNlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBSZW1vdmVzIG92
ZXJmbG93IGNoZWNrcyBhbmQgb3V0LW9mLWJvdW5kcyBjaGVja3MgYnkgaG9pc3RpbmcgdGhlbS4K
KworYm9vbCBwZXJmb3JtSW50ZWdlckNoZWNrSG9pc3RpbmcoR3JhcGgmKTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNjM4OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3Ro
UmVkdWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSwxMyArNzEsOCBAQCBwcml2
YXRlOgogICAgIHsKICAgICAgICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKICAgICAgICAgY2Fz
ZSBCaXRPcjoKLSAgICAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLT5pc0NvbnN0YW50KCkp
IHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIG9wMSA9IG1fZ3JhcGgudmFsdWVPZkpTQ29uc3Rh
bnQobV9ub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwotICAgICAgICAgICAgICAgIGlmIChvcDEuaXNJ
bnQzMigpICYmICFvcDEuYXNJbnQzMigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnZlcnRU
b0lkZW50aXR5T3ZlckNoaWxkMigpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2
aXR5KCk7CisKICAgICAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMigpLT5pc0NvbnN0YW50KCkp
IHsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIG9wMiA9IG1fZ3JhcGgudmFsdWVPZkpTQ29uc3Rh
bnQobV9ub2RlLT5jaGlsZDIoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgIGlmIChvcDIuaXNJ
bnQzMigpICYmICFvcDIuYXNJbnQzMigpKSB7CkBAIC04Nyw2ICs4MiwxMSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBCaXRYb3I6CisgICAgICAgIGNhc2UgQml0QW5kOgorICAgICAgICAgICAgaGFuZGxlQ29t
bXV0YXRpdml0eSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBCaXRMU2hpZnQ6CiAgICAgICAgIGNhc2UgQml0UlNoaWZ0OgogICAgICAgICBjYXNlIEJp
dFVSU2hpZnQ6CkBAIC0xMTIsNiArMTEyLDM4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoQWRkOgor
ICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOworCisgICAgICAgICAgICBpZiAobV9n
cmFwaC5pc0ludDMyQ29uc3RhbnQobV9ub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAg
ICAgICAgICAgaW50MzJfdCB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZkludDMyQ29uc3RhbnQoCisg
ICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0lkZW50aXR5
T3ZlckNoaWxkMSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEFyaXRoTXVsOgorICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aFN1YjoK
KyAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzSW50MzJDb25zdGFudChtX25vZGUtPmNoaWxkMigp
Lm5vZGUoKSkKKyAgICAgICAgICAgICAgICAmJiBtX25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQz
MlVzZSkpIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IHZhbHVlID0gbV9ncmFwaC52YWx1ZU9m
SW50MzJDb25zdGFudChtX25vZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAgICAgICAgICAg
aWYgKC12YWx1ZSAhPSB2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBtX25vZGUtPnNldE9w
KEFyaXRoQWRkKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5jaGlsZDIoKS5zZXROb2Rl
KAorICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ub2RlSW5kZXgsIG1fbm9kZS0+Y29kZU9y
aWdpbiwganNOdW1iZXIoLXZhbHVlKSkpOworICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEdldEFycmF5TGVuZ3RoOgogICAgICAgICAgICAgaWYgKEpTQXJyYXlCdWZmZXJWaWV3KiB2
aWV3ID0gbV9ncmFwaC50cnlHZXRGb2xkYWJsZVZpZXdGb3JDaGlsZDEobV9ub2RlKSkKICAgICAg
ICAgICAgICAgICBmb2xkVHlwZWRBcnJheVByb3BlcnR5VG9Db25zdGFudCh2aWV3LCBqc051bWJl
cih2aWV3LT5sZW5ndGgoKSkpOwpAQCAtMTc5LDYgKzIxMSwyMyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgbV9ub2RlSW5kZXgsIFNwZWNOb25lLCBQaGFudG9tLCBtX25vZGUtPmNvZGVPcmlnaW4s
IG1fbm9kZS0+Y2hpbGRyZW4pOwogICAgIH0KICAgICAKKyAgICB2b2lkIGhhbmRsZUNvbW11dGF0
aXZpdHkoKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBjYXNlIGVuc3VyZXMgdGhhdCBvcHRpbWl6
YXRpb25zIHRoYXQgbG9vayBmb3IgeCArIGNvbnN0IGRvbid0IGFsc28gaGF2ZQorICAgICAgICAv
LyB0byBsb29rIGZvciBjb25zdCArIHguCisgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLT5o
YXNDb25zdGFudCgpICYmICFtX25vZGUtPmNoaWxkMigpLT5oYXNDb25zdGFudCgpKSB7CisgICAg
ICAgICAgICBzdGQ6OnN3YXAobV9ub2RlLT5jaGlsZDEoKSwgbV9ub2RlLT5jaGlsZDIoKSk7Cisg
ICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIC8vIFRoaXMgY2FzZSBlbnN1cmVzIHRoYXQgQ1NFIGlzIGNvbW11dGF0aXZp
dHktYXdhcmUuCisgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLm5vZGUoKSA+IG1fbm9kZS0+
Y2hpbGQyKCkubm9kZSgpKSB7CisgICAgICAgICAgICBzdGQ6OnN3YXAobV9ub2RlLT5jaGlsZDEo
KSwgbV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAogICAgIEluc2VydGlvblNl
dCBtX2luc2VydGlvblNldDsKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIHVuc2lnbmVk
IG1fbm9kZUluZGV4Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223929</attachid>
            <date>2014-02-11 19:05:06 -0800</date>
            <delta_ts>2014-02-11 23:16:43 -0800</delta_ts>
            <desc>almost done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31622</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzOTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBA
CisyMDE0LTAyLTExICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SG9pc3QgYW5kIGNvbWJpbmUgYXJyYXkgYm91bmRzIGNoZWNrcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1NDMzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgYSBwaGFzZSBm
b3IgcmVhc29uaW5nIGFib3V0IG92ZXJmbG93IGNoZWNrcyBhbmQgYXJyYXkgYm91bmRzIGNoZWNr
cy4gSXQgdXNlcworICAgICAgICB0aGUgZmFjdCB0aGF0IGNoZWNrZWQgYXJpdGhtZXRpYyBkb2Vz
bid0IGhhdmUgd3JhcC1hcm91bmQgdG8gY29uc29saWRhdGUgbXVsdGlwbGUgYXJyYXkKKyAgICAg
ICAgYm91bmRzIGNoZWNrcy4gSXQncyBibG9jay1sb2NhbCwgYW5kIHJlbW92ZXMgYm90aCBvdmVy
ZmxvdyBjaGVja3MgYW5kIGJvdW5kcyBjaGVja3MgaW4KKyAgICAgICAgb25lIGdvLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBkZmcvREZHQXJpdGhNb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c3Vic3VtZXMpOgor
ICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhh
c2U6OnB1cmVDU0UpOgorICAgICAgICAqIGRmZy9ERkdFZGdlLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6RWRnZTo6aGFzaCk6CisgICAgICAgICogZGZnL0RGR0luc2VydGlvblNldC5oOgorICAgICAg
ICAoSlNDOjpERkc6Okluc2VydGlvblNldDo6aW5zZXJ0Q29uc3RhbnQpOgorICAgICAgICAqIGRm
Zy9ERkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkRGRzo6SW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZTo6SW50ZWdlckNoZWNrSG9pc3RpbmdQaGFz
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToK
KyAgICAgICAgKEpTQzo6REZHOjpJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlOjpoYW5kbGVCbG9j
ayk6CisgICAgICAgIChKU0M6OkRGRzo6SW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZTo6cmFuZ2VL
ZXlBbmRBZGRlbmQpOgorICAgICAgICAoSlNDOjpERkc6OkludGVnZXJDaGVja0hvaXN0aW5nUGhh
c2U6Omluc2VydEFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6SW50ZWdlckNoZWNrSG9pc3RpbmdQ
aGFzZTo6aW5zZXJ0QWRkUGhhbnRvbSk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybUludGVn
ZXJDaGVja0hvaXN0aW5nKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdlckNoZWNrSG9pc3RpbmdQ
aGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbCk6CisgICAgICAgICogZGZnL0RGR1N0cmVu
Z3RoUmVkdWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlN0cmVuZ3RoUmVkdWN0
aW9uUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlN0cmVuZ3RoUmVkdWN0
aW9uUGhhc2U6OmhhbmRsZUNvbW11dGF0aXZpdHkpOgorCiAyMDE0LTAyLTExICBCcmlhbiBCdXJn
ICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBSZXBsYXk6IHVwc3RyZWFtIHJlcGxh
eSBpbnB1dCBjb2RlIGdlbmVyYXRvciBhbmQgRW5jb2RlZFZhbHVlIGNsYXNzCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNjM4OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw2ICsx
NDAsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdHcmFwaC5jcHAK
ICAgICBkZmcvREZHR3JhcGhTYWZlcG9pbnQuY3BwCiAgICAgZGZnL0RGR0luUGxhY2VBYnN0cmFj
dFN0YXRlLmNwcAorICAgIGRmZy9ERkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAogICAg
IGRmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdK
SVRDb2RlLmNwcAogICAgIGRmZy9ERkdKSVRDb21waWxlci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNjM4OTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAt
MzEwLDkgKzMxMCwxMSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5saW5lQ2FjaGVXcmFwcGVyLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ludGVnZXJDaGVja0hvaXN0aW5nUGhhc2UuY3BwIFwKKwlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ludGVnZXJDaGVja0hvaXN0aW5nUGhhc2UuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlv
blBoYXNlLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0Lmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAgXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRD
b3JlLnZjeHByb2oJKHJldmlzaW9uIDE2Mzg5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTM5NCw2ICszOTQsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R0dyYXBoLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdHcmFwaFNh
ZmVwb2ludC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R0ludGVnZXJDaGVja0hvaXN0aW5nUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0pJVENvZGUuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0pJVENvbXBpbGVyLmNwcCIgLz4KQEAgLTkzNSw2ICs5
MzYsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0dyYXBoU2FmZXBvaW50
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFjZUFic3RyYWN0
U3RhdGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnNlcnRpb25T
ZXQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnRlZ2VyQ2hlY2tI
b2lzdGluZ1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW52
YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR0pJVENvZGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdKSVRDb21waWxlci5oIiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDE2Mzg5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNiArMjEw
LDggQEAKIAkJMEYyRkNDRkQxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NjYW5uYWJsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyRkNDRjYxOEE2MDA3
MDAwMUEyN0Y4IC8qIERGR1NjYW5uYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGMkZDQ0ZFMThBNjAwNzAwMDFBMjdGOCAvKiBERkdUaHJl
YWREYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkZDQ0Y3MThBNjAwNzAwMDFBMjdGOCAvKiBERkdUaHJlYWREYXRhLmNwcCAqLzsgfTsKIAkJ
MEYyRkNDRkYxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkZDQ0Y4MThBNjAwNzAwMDFBMjdG
OCAvKiBERkdUaHJlYWREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMEYzMDBCN0IxOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzMDBCNzkxOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0hvaXN0
aW5nUGhhc2UuY3BwICovOyB9OworCQkwRjMwMEI3QzE4QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50
ZWdlckNoZWNrSG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzMDBCN0ExOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVj
a0hvaXN0aW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjM0QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0QjE0NzE2RDQy
MDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi87IH07CiAJCTBGMzRCMTRBMTZENDIwMTMw
MDFDREE1QSAvKiBERkdVc2VLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjM0QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzRCMTRD
MTZENDNFMEQwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRCMTRCMTZENDNF
MEMwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTY2Miw2ICsxNjY0LDgg
QEAKIAkJMEYyRkNDRjYxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NjYW5uYWJsZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTY2FubmFibGUuaDsgcGF0aCA9IGRmZy9ERkdT
Y2FubmFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRkNDRjcxOEE2MDA3
MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHVGhyZWFkRGF0YS5jcHA7IHBhdGggPSBkZmcvREZHVGhyZWFkRGF0YS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkZDQ0Y4MThBNjAwNzAwMDFBMjdG
OCAvKiBERkdUaHJlYWREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1RocmVhZERhdGEuaDsgcGF0aCA9IGRmZy9ERkdUaHJlYWREYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMzAwQjc5MThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hl
Y2tIb2lzdGluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR0ludGVnZXJDaGVja0hvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0ludGVnZXJD
aGVja0hvaXN0aW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMw
MEI3QTE4QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1Bo
YXNlLmg7IHBhdGggPSBkZmcvREZHSW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM0QjE0NzE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNl
S2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdVc2VLaW5k
LmNwcDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYzNEIxNDgxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVXNlS2luZC5oOyBwYXRoID0gZGZnL0RGR1VzZUtp
bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIxNEIxNkQ0M0UwQzAwMUNE
QTVBIC8qIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQyMjIsNiArNDIyNiw4IEBACiAJCQkJQTcwNEQ5MDAx
N0EwQkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCAqLywKIAkJCQlB
NzA0RDkwMTE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCAqLywK
IAkJCQkwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi8sCisJ
CQkJMEYzMDBCNzkxOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0hvaXN0aW5nUGhh
c2UuY3BwICovLAorCQkJCTBGMzAwQjdBMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hl
Y2tIb2lzdGluZ1BoYXNlLmggKi8sCiAJCQkJMEZDOTdGMzcxODIwMjExOTAwMkM5QjI2IC8qIERG
R0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGQzk3RjM4MTgy
MDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmggKi8s
CiAJCQkJMEZFQTBBMkYxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuY3BwICovLApAQCAt
NTI0OCw2ICs1MjU0LDcgQEAKIAkJCQkwRjQ2ODBDQTE0QkJCMTZDMDBCRkUyNzIgLyogTExJbnRD
b21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQzMTRCQkQxNjcwMEJGRTI3MiAvKiBM
TEludERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzhCMDEyMTdDRjA3ODMwMEIxNDREMyAv
KiBMTEludEVudHJ5cG9pbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMzAwQjdDMThBQjFCMTQw
MEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjQ2ODBBMzE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRFeGNlcHRpb25zLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjQ2ODBDQjE0QkJCMTcyMDBCRkUyNzIgLyogTExJbnRPZmZsaW5lQXNt
Q29uZmlnLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyog
TExJbnRPcGNvZGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjE2MCw2ICs2MTY3LDcgQEAKIAkJCQlB
Nzg4NTNGOTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5j
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQUM5MjJCQjE4QTE2MTgyMDAzQ0UwRkIgLyog
RlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzAwQjdCMThB
QjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTJBQ0NGM0RFMTg1RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9yZUJhcnJpZXJF
bGlzaW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ3RDQwRUQyMTI4MjAwQjg5
NjE5IC8qIEludGVycHJldGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEOTJGMEVEMjJE
NzAwMEI4OTYxOSAvKiBKSVQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyaXRoTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJpdGhNb2RlLmgJKHJldmlzaW9uIDE2Mzg5MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJpdGhNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYg
Kzk3LDMzIEBAIGlubGluZSBib29sIHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKEFyaXQKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAoraW5saW5lIGJvb2wgc3Vic3VtZXMoQXJpdGhNb2RlIGVhcmxpZXIs
IEFyaXRoTW9kZSBsYXRlcikKK3sKKyAgICBzd2l0Y2ggKGVhcmxpZXIpIHsKKyAgICBjYXNlIEFy
aXRoOjpDaGVja092ZXJmbG93OgorICAgICAgICBzd2l0Y2ggKGxhdGVyKSB7CisgICAgICAgIGNh
c2UgQXJpdGg6OlVuY2hlY2tlZDoKKyAgICAgICAgY2FzZSBBcml0aDo6Q2hlY2tPdmVyZmxvdzoK
KyAgICAgICAgY2FzZSBBcml0aDo6RG9PdmVyZmxvdzoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgY2FzZSBBcml0aDo6Q2hlY2tPdmVyZmxvd0FuZE5lZ2F0aXZlWmVybzoKKyAgICAgICAg
c3dpdGNoIChsYXRlcikgeworICAgICAgICBjYXNlIEFyaXRoOjpVbmNoZWNrZWQ6CisgICAgICAg
IGNhc2UgQXJpdGg6OkNoZWNrT3ZlcmZsb3c6CisgICAgICAgIGNhc2UgQXJpdGg6OkNoZWNrT3Zl
cmZsb3dBbmROZWdhdGl2ZVplcm86CisgICAgICAgIGNhc2UgQXJpdGg6OkRvT3ZlcmZsb3c6Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBlYXJs
aWVyID09IGxhdGVyOworICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiBu
YW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhh
c2UuY3BwCShyZXZpc2lvbiAxNjM4OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlm
IChub2RlLT5oYXNBcml0aE1vZGUoKSkgewotICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcml0
aE1vZGUoKSAhPSBvdGhlck5vZGUtPmFyaXRoTW9kZSgpKQorICAgICAgICAgICAgICAgIGlmICgh
c3Vic3VtZXMobm9kZS0+YXJpdGhNb2RlKCksIG90aGVyTm9kZS0+YXJpdGhNb2RlKCkpKQogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHJldmlzaW9uIDE2Mzg5MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzMsNiArMTczLDE1IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgewor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHJldHVybiBJbnRIYXNoPHVpbnRwdHJfdD46Omhh
c2gobV9lbmNvZGVkV29yZCk7CisjZWxzZQorICAgICAgICByZXR1cm4gUHRySGFzaDxOb2RlKj46
Omhhc2gobV9ub2RlKSArIG1fZW5jb2RlZFdvcmQ7CisjZW5kaWYKKyAgICB9CiAKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIEFkamFjZW5jeUxpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE2Mzg5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGluc2VydChJbnNl
cnRpb24oaW5kZXgsIGVsZW1lbnQpKTsKICAgICB9Ci0KKyAgICAKICNkZWZpbmUgREZHX0RFRklO
RV9JTlNFUlRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1
ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCiAgICAgdGVtcGxhdGVQcmUg
dHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogaW5zZXJ0Tm9kZShzaXplX3QgaW5kZXgsIFNw
ZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAogICAgIHsg
XApAQCAtNjUsNiArNjUsMjAgQEAgcHVibGljOgogICAgIERGR19WQVJJQURJQ19URU1QTEFURV9G
VU5DVElPTihERkdfREVGSU5FX0lOU0VSVF9OT0RFKQogI3VuZGVmIERGR19ERUZJTkVfSU5TRVJU
X05PREUKICAgICAKKyAgICBOb2RlKiBpbnNlcnRDb25zdGFudChzaXplX3QgaW5kZXgsIE5vZGVP
cmlnaW4gb3JpZ2luLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY29u
c3RhbnRSZWcgPQorICAgICAgICAgICAgbV9ncmFwaC5jb25zdGFudFJlZ2lzdGVyRm9yQ29uc3Rh
bnQoanNOdW1iZXIoLXZhbHVlKSk7CisgICAgICAgIHJldHVybiBpbnNlcnROb2RlKAorICAgICAg
ICAgICAgaW5kZXgsIHNwZWN1bGF0aW9uRnJvbVZhbHVlKHZhbHVlKSwgSlNDb25zdGFudCwgb3Jp
Z2luLAorICAgICAgICAgICAgT3BJbmZvKGNvbnN0YW50UmVnKSk7CisgICAgfQorICAgIAorICAg
IE5vZGUqIGluc2VydENvbnN0YW50KHNpemVfdCBpbmRleCwgQ29kZU9yaWdpbiBvcmlnaW4sIEpT
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaW5zZXJ0Q29uc3RhbnQoaW5kZXgs
IE5vZGVPcmlnaW4ob3JpZ2luKSwgdmFsdWUpOworICAgIH0KKwogICAgIHZvaWQgZXhlY3V0ZShC
YXNpY0Jsb2NrKiBibG9jaykKICAgICB7CiAgICAgICAgIGV4ZWN1dGVJbnNlcnRpb25zKCpibG9j
aywgbV9pbnNlcnRpb25zKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50
ZWdlckNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlckNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNl
LmgiCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5o
IgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmgiCisjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K25hbWVzcGFjZSB7CisKK2VudW0gUmFuZ2VLaW5kIHsKKyAgICBJbnZhbGlkUmFuZ2VLaW5kLAor
ICAgIAorICAgIC8vIFRoaXMgbWVhbnMgd2UgZGlkIEFyaXRoQWRkIHdpdGggQ2hlY2tPdmVyZmxv
dy4KKyAgICBBZGRpdGlvbiwKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHdlIGRpZCBDaGVja0lu
Qm91bmRzIG9uIHNvbWUgbGVuZ3RoLgorICAgIEFycmF5Qm91bmRzCit9OworCitzdHJ1Y3QgUmFu
Z2VLZXkgeworICAgIFJhbmdlS2V5KCkKKyAgICAgICAgOiBtX2tpbmQoSW52YWxpZFJhbmdlS2lu
ZCkKKyAgICAgICAgLCBtX2tleShudWxscHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIFJhbmdlS2V5IGFkZGl0aW9uKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIFJhbmdlS2V5
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEFkZGl0aW9uOworICAgICAgICByZXN1
bHQubV9zb3VyY2UgPSBlZGdlOworICAgICAgICByZXN1bHQubV9rZXkgPSAwOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUmFuZ2VLZXkgYXJyYXlCb3Vu
ZHMoRWRnZSBlZGdlLCBOb2RlKiBrZXkpCisgICAgeworICAgICAgICBSYW5nZUtleSByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBBcnJheUJvdW5kczsKKyAgICAgICAgcmVzdWx0Lm1f
c291cmNlID0gZWRnZTsKKyAgICAgICAgcmVzdWx0Lm1fa2V5ID0ga2V5OworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0
dXJuIG1fa2luZCA9PSBJbnZhbGlkUmFuZ2VLaW5kOyB9CisgICAgCisgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kICsgbV9zb3VyY2UuaGFzaCgp
ICsgUHRySGFzaDxOb2RlKj46Omhhc2gobV9rZXkpOworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgUmFuZ2VLZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICYmIG1fc291cmNlID09IG90
aGVyLm1fc291cmNlCisgICAgICAgICAgICAmJiBtX2tleSA9PSBvdGhlci5tX2tleTsKKyAgICB9
CisgICAgCisgICAgUmFuZ2VLaW5kIG1fa2luZDsKKyAgICBFZGdlIG1fc291cmNlOworICAgIE5v
ZGUqIG1fa2V5OworfTsKKworc3RydWN0IFJhbmdlS2V5QW5kQWRkZW5kIHsKKyAgICBSYW5nZUtl
eUFuZEFkZGVuZCgpCisgICAgICAgIDogbV9hZGRlbmQoMCkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIFJhbmdlS2V5QW5kQWRkZW5kKFJhbmdlS2V5IGtleSwgaW50MzJfdCBhZGRlbmQpCisgICAg
ICAgIDogbV9rZXkoa2V5KQorICAgICAgICAsIG1fYWRkZW5kKGFkZGVuZCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fa2V5ICYmICFt
X2FkZGVuZDsgfQorICAgIAorICAgIFJhbmdlS2V5IG1fa2V5OworICAgIGludDMyX3QgbV9hZGRl
bmQ7Cit9OworCitzdHJ1Y3QgUmFuZ2UgeworICAgIFJhbmdlKCkKKyAgICAgICAgOiBtX21pbkJv
dW5kKDApCisgICAgICAgICwgbV9tYXhCb3VuZCgwKQorICAgICAgICAsIG1fY291bnQoMCkKKyAg
ICAgICAgLCBtX2hvaXN0ZWQoZmFsc2UpCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90
IG1fbWluQm91bmQ7CisgICAgQ29kZU9yaWdpbiBtX21pbk9yaWdpbjsKKyAgICBpbnQzMl90IG1f
bWF4Qm91bmQ7CisgICAgQ29kZU9yaWdpbiBtX21heE9yaWdpbjsKKyAgICB1bnNpZ25lZCBtX2Nv
dW50OyAvLyBJZiB0aGlzIGlzIHplcm8gdGhlbiB0aGUgYm91bmRzIHdvbid0IG5lY2Vzc2FyaWx5
IG1ha2Ugc2Vuc2UuCisgICAgYm9vbCBtX2hvaXN0ZWQ7Cit9OworCit9IC8vIGFub255bW91cyBu
YW1lc3BhY2UKKworY2xhc3MgSW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZSA6IHB1YmxpYyBQaGFz
ZSB7CitwdWJsaWM6CisgICAgSW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZShHcmFwaCYgZ3JhcGgp
CisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJpbnRlZ2VyIGNoZWNrIGhvaXN0aW5nIikKKyAgICAg
ICAgLCBtX2luc2VydGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wg
cnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAg
ICAgICAKKyAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBtX2dy
YXBoLmluaXRpYWxpemVOb2RlT3duZXJzKCk7CisgICAgICAgIAorICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9j
a0luZGV4LS07KQorICAgICAgICAgICAgaGFuZGxlQmxvY2soYmxvY2tJbmRleCk7CisgICAgICAg
IAorICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lk
IGhhbmRsZUJsb2NrKEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB7CisgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgaWYgKCFi
bG9jaykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG1fbWFwLmNsZWFy
KCk7CisgICAgICAgIAorICAgICAgICAvLyBGaXJzdCB3ZSBjb2xsZWN0IFJhbmdlcy4gSWYgb3Bl
cmF0aW9ucyB3aXRoaW4gdGhlIHJhbmdlIGhhdmUgZW5vdWdoIHJlZHVuZGFuY3ksCisgICAgICAg
IC8vIHdlIGhvaXN0LiBBbmQgdGhlbiB3ZSByZW1vdmUgYWRkaXRpb25zIGFuZCBjaGVja3MgdGhh
dCBmYWxsIHdpdGhpbiB0aGUgbWF4IHJhbmdlLgorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRl
eCkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAg
ICAgICAgICAgUmFuZ2VLZXlBbmRBZGRlbmQgZGF0YSA9IHJhbmdlS2V5QW5kQWRkZW5kKG5vZGUp
OworICAgICAgICAgICAgaWYgKCFkYXRhKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgUmFuZ2UmIHJhbmdlID0gbV9tYXBbZGF0YS5tX2tleV07CisgICAgICAgICAgICBp
ZiAocmFuZ2UubV9jb3VudCkgeworICAgICAgICAgICAgICAgIGlmIChkYXRhLm1fYWRkZW5kID4g
cmFuZ2UubV9tYXhCb3VuZCkgeworICAgICAgICAgICAgICAgICAgICByYW5nZS5tX21heEJvdW5k
ID0gZGF0YS5tX2FkZGVuZDsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2UubV9tYXhPcmlnaW4g
PSBub2RlLT5vcmlnaW4uc2VtYW50aWM7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRh
Lm1fYWRkZW5kIDwgcmFuZ2UubV9taW5Cb3VuZCkgeworICAgICAgICAgICAgICAgICAgICByYW5n
ZS5tX21pbkJvdW5kID0gZGF0YS5tX2FkZGVuZDsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2Uu
bV9taW5PcmlnaW4gPSBub2RlLT5vcmlnaW4uc2VtYW50aWM7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByYW5nZS5tX21heEJvdW5kID0g
ZGF0YS5tX2FkZGVuZDsKKyAgICAgICAgICAgICAgICByYW5nZS5tX21pbkJvdW5kID0gZGF0YS5t
X2FkZGVuZDsKKyAgICAgICAgICAgICAgICByYW5nZS5tX21pbk9yaWdpbiA9IG5vZGUtPm9yaWdp
bi5zZW1hbnRpYzsKKyAgICAgICAgICAgICAgICByYW5nZS5tX21heE9yaWdpbiA9IG5vZGUtPm9y
aWdpbi5zZW1hbnRpYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJhbmdlLm1fY291bnQr
KzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXgg
PSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgUmFuZ2VL
ZXlBbmRBZGRlbmQgZGF0YSA9IHJhbmdlS2V5QW5kQWRkZW5kKG5vZGUpOworICAgICAgICAgICAg
aWYgKCFkYXRhKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgUmFuZ2Ug
cmFuZ2UgPSBtX21hcFtkYXRhLm1fa2V5XTsKKyAgICAgICAgICAgIGlmIChyYW5nZS5tX2NvdW50
IDwgMikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gRG8gdGhlIGhvaXN0aW5nLgorICAgICAgICAgICAgaWYgKCFyYW5nZS5tX2hvaXN0ZWQp
IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGRhdGEubV9rZXkubV9raW5kKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBBZGRpdGlvbjogeworICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2Uu
bV9taW5Cb3VuZCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydEFkZFBoYW50
b20oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBOb2RlT3JpZ2luKHJh
bmdlLm1fbWluT3JpZ2luLCBub2RlLT5vcmlnaW4uZm9yRXhpdCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YS5tX2tleS5tX3NvdXJjZSwgcmFuZ2UubV9taW5Cb3VuZCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlLm1fbWF4Qm91
bmQgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRBZGRQaGFudG9tKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgTm9kZU9yaWdpbihyYW5nZS5tX21p
bk9yaWdpbiwgbm9kZS0+b3JpZ2luLmZvckV4aXQpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGEubV9rZXkubV9zb3VyY2UsIHJhbmdlLm1fbWF4Qm91bmQpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEFycmF5Qm91bmRzOiB7Cisg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIG1pbk5vZGU7CisgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIG1heE5vZGU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBp
ZiAoIWRhdGEubV9rZXkubV9zb3VyY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbk5v
ZGUgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgbWF4Tm9kZSA9IG1faW5zZXJ0aW9uU2V0
Lmluc2VydENvbnN0YW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwg
cmFuZ2UubV9tYXhPcmlnaW4sIGpzTnVtYmVyKHJhbmdlLm1fbWF4Qm91bmQpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbk5vZGUgPSBp
bnNlcnRBZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBOb2RlT3Jp
Z2luKHJhbmdlLm1fbWluT3JpZ2luLCBub2RlLT5vcmlnaW4uZm9yRXhpdCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YS5tX2tleS5tX3NvdXJjZSwgcmFuZ2UubV9taW5Cb3VuZCwg
QXJpdGg6OlVuY2hlY2tlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXhOb2RlID0gaW5z
ZXJ0QWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgTm9kZU9yaWdp
bihyYW5nZS5tX21heE9yaWdpbiwgbm9kZS0+b3JpZ2luLmZvckV4aXQpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGEubV9rZXkubV9zb3VyY2UsIHJhbmdlLm1fbWF4Qm91bmQsIEFy
aXRoOjpVbmNoZWNrZWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAobWluTm9kZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVja0luQm91bmRzLCBub2RlLT5vcmlnaW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShtaW5Ob2RlLCBJbnQzMlVzZSksIEVk
Z2UoZGF0YS5tX2tleS5tX2tleSwgSW50MzJVc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2tJbkJvdW5kcywgbm9kZS0+
b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShtYXhOb2RlLCBJbnQzMlVzZSks
IEVkZ2UoZGF0YS5tX2tleS5tX2tleSwgSW50MzJVc2UpKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmFuZ2UubV9ob2lzdGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRG8gdGhl
IGVsaW1pbmF0aW9uLgorICAgICAgICAgICAgc3dpdGNoIChkYXRhLm1fa2V5Lm1fa2luZCkgewor
ICAgICAgICAgICAgY2FzZSBBZGRpdGlvbjogeworICAgICAgICAgICAgICAgIG5vZGUtPnNldEFy
aXRoTW9kZShBcml0aDo6VW5jaGVja2VkKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0
cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgY2FzZSBBcnJheUJvdW5kczogeworICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICB9CisgICAgCisgICAgUmFuZ2VL
ZXlBbmRBZGRlbmQgcmFuZ2VLZXlBbmRBZGRlbmQoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIEFyaXRoQWRkOiB7CisgICAgICAg
ICAgICBpZiAoIXNob3VsZENoZWNrT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2RlKCkpKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmlzSW50MzJDb25zdGFu
dChub2RlLT5jaGlsZDIoKSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBy
ZXR1cm4gUmFuZ2VLZXlBbmRBZGRlbmQoCisgICAgICAgICAgICAgICAgUmFuZ2VLZXk6OmFkZGl0
aW9uKG5vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgICAgICBtX2dyYXBoLnZhbHVlT2ZJbnQz
MkNvbnN0YW50KG5vZGUtPmNoaWxkMigpKSk7CisgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBDaGVja0luQm91bmRzOiB7CisgICAgICAgICAgICBFZGdlIHNvdXJjZTsK
KyAgICAgICAgICAgIGludDMyX3QgYWRkZW5kOworICAgICAgICAgICAgTm9kZSoga2V5ID0gbm9k
ZS0+Y2hpbGQyKCkubm9kZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1f
Z3JhcGguaXNJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpKSkgeworICAgICAgICAgICAgICAg
IFNvdXJjZSA9IEVkZ2UoKTsKKyAgICAgICAgICAgICAgICBhZGRlbmQgPSBtX2dyYXBoLnZhbHVl
T2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKAorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IEFyaXRoQWRk
CisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCktPmlzQmluYXJ5VXNlS2luZChJbnQz
MlVzZSkKKyAgICAgICAgICAgICAgICAmJiAhc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5hcml0
aE1vZGUoKSkKKyAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLmlzSW50MzJDb25zdGFudChub2Rl
LT5jaGlsZDEoKS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAgICAgICAgIHNvdXJjZSA9
IG5vZGUtPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIGFkZGVuZCA9IG1fZ3JhcGgudmFsdWVP
ZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCktPmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNvdXJjZSA9IG5vZGUtPmNoaWxkMSgpOwor
ICAgICAgICAgICAgICAgIGFkZGVuZCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHJldHVybiBSYW5nZUtleUFuZEFkZGVuZChSYW5nZUtleTo6YXJyYXlCb3Vu
ZHMoc291cmNlLCBrZXkpLCBhZGRlbmQpOworICAgICAgICB9CisgICAgICAgICAgICAgICAgCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgcmV0dXJuIFJhbmdlS2V5QW5kQWRkZW5kKCk7CisgICAgfQorICAgIAorICAgIE5v
ZGUqIGluc2VydEFkZCgKKyAgICAgICAgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luIG9y
aWdpbiwgRWRnZSBzb3VyY2UsIGludDMyX3QgYWRkZW5kLAorICAgICAgICBBcml0aE1vZGUgYXJp
dGhNb2RlID0gQXJpdGg6OkNoZWNrT3ZlcmZsb3cpCisgICAgeworICAgICAgICByZXR1cm4gbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgIG5vZGVJbmRleCwgc291cmNlLT5w
cmVkaWN0aW9uKCksIEFyaXRoQWRkLCBvcmlnaW4sIE9wSW5mbyhhcml0aE1vZGUpLAorICAgICAg
ICAgICAgc291cmNlLCBFZGdlKAorICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dENvbnN0YW50KG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihhZGRlbmQpKSwKKyAgICAgICAg
ICAgICAgICBzb3VyY2UudXNlS2luZCgpKSk7CisgICAgfQorICAgIAorICAgIE5vZGUqIGluc2Vy
dEFkZFBoYW50b20oCisgICAgICAgIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmln
aW4sIEVkZ2Ugc291cmNlLCBpbnQzMl90IGFkZGVuZCkKKyAgICB7CisgICAgICAgIE5vZGUqIHJl
c3VsdCA9IGluc2VydEFkZChub2RlSW5kZXgsIG9yaWdpbiwgc291cmNlLCBhZGRlbmQpOworICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgbm9kZUluZGV4LCBT
cGVjTm9uZSwgUGhhbnRvbSwgb3JpZ2luLCBFZGdlKHJlc3VsdCwgVW50eXBlZFVzZSkpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRl
cmVkX21hcDxSYW5nZUtleSwgUmFuZ2UsIEhhc2hNZXRob2Q8UmFuZ2VLZXk+PiBSYW5nZU1hcDsK
KyAgICBSYW5nZU1hcCBtX21hcDsKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7Cisg
ICAgYm9vbCBtX2NoYW5nZWQ7Cit9OworICAgIAorYm9vbCBwZXJmb3JtSW50ZWdlckNoZWNrSG9p
c3RpbmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9u
KCJERkcgSW50ZWdlciBDaGVjayBIb2lzdGluZyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFz
ZTxJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJDaGVja0hvaXN0aW5nUGhhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJDaGVja0hvaXN0aW5n
UGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50
ZWdlckNoZWNrSG9pc3RpbmdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlX2gKKyNkZWZpbmUgREZHSW50ZWdlckNoZWNrSG9p
c3RpbmdQaGFzZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gUmVtb3ZlcyBvdmVyZmxvdyBjaGVj
a3MgYW5kIG91dC1vZi1ib3VuZHMgY2hlY2tzIGJ5IGhvaXN0aW5nIHRoZW0uCisKK2Jvb2wgcGVy
Zm9ybUludGVnZXJDaGVja0hvaXN0aW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHSW50ZWdl
ckNoZWNrSG9pc3RpbmdQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcAkocmV2aXNpb24gMTYzODkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgIkRG
R0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHRml4dXBQaGFzZS5o
IgogI2luY2x1ZGUgIkRGR0dyYXBoU2FmZXBvaW50LmgiCisjaW5jbHVkZSAiREZHSW50ZWdlckNo
ZWNrSG9pc3RpbmcuaCIKICNpbmNsdWRlICJERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBo
YXNlLmgiCiAjaW5jbHVkZSAiREZHSklUQ29tcGlsZXIuaCIKICNpbmNsdWRlICJERkdMSUNNUGhh
c2UuaCIKQEAgLTMwMyw2ICszMDQsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29t
cGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7CiAgICAgICAg
IHBlcmZvcm1DRkEoZGZnKTsKICAgICAgICAgcGVyZm9ybUxJQ00oZGZnKTsKKyAgICAgICAgcGVy
Zm9ybUludGVnZXJDaGVja0hvaXN0aW5nKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DU0UoZGZnKTsK
ICAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZnKTsKICAgICAgICAgcGVyZm9ybUNG
QShkZmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVj
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjM4OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MSwxMyArNzEsOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgc3dpdGNo
IChtX25vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBCaXRPcjoKLSAgICAgICAgICAgIGlmICht
X25vZGUtPmNoaWxkMSgpLT5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVl
IG9wMSA9IG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobV9ub2RlLT5jaGlsZDEoKS5ub2RlKCkp
OwotICAgICAgICAgICAgICAgIGlmIChvcDEuaXNJbnQzMigpICYmICFvcDEuYXNJbnQzMigpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0lkZW50aXR5T3ZlckNoaWxkMigpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
CisgICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7CisKICAgICAgICAgICAgIGlmICht
X25vZGUtPmNoaWxkMigpLT5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgICAgICBKU1ZhbHVl
IG9wMiA9IG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobV9ub2RlLT5jaGlsZDIoKS5ub2RlKCkp
OwogICAgICAgICAgICAgICAgIGlmIChvcDIuaXNJbnQzMigpICYmICFvcDIuYXNJbnQzMigpKSB7
CkBAIC04Nyw2ICs4MiwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBCaXRYb3I6CisgICAgICAgIGNhc2Ug
Qml0QW5kOgorICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CiAgICAgICAgIGNh
c2UgQml0UlNoaWZ0OgogICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6CkBAIC0xMTIsNiArMTEyLDM4
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRp
dml0eSgpOworCisgICAgICAgICAgICBpZiAobV9ncmFwaC5pc0ludDMyQ29uc3RhbnQobV9ub2Rl
LT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICAgICAgaW50MzJfdCB2YWx1ZSA9IG1f
Z3JhcGgudmFsdWVPZkludDMyQ29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+
Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnZlcnRUb0lkZW50aXR5T3ZlckNoaWxkMSgpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoTXVsOgorICAgICAg
ICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBBcml0aFN1YjoKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLmlz
SW50MzJDb25zdGFudChtX25vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAm
JiBtX25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkpIHsKKyAgICAgICAgICAgICAgICBp
bnQzMl90IHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSW50MzJDb25zdGFudChtX25vZGUtPmNoaWxk
MigpLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKC12YWx1ZSAhPSB2YWx1ZSkgeworICAg
ICAgICAgICAgICAgICAgICBtX25vZGUtPnNldE9wKEFyaXRoQWRkKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9ub2RlLT5jaGlsZDIoKS5zZXROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ub2RlSW5kZXgsIG1fbm9kZS0+Y29kZU9yaWdpbiwganNOdW1iZXIoLXZhbHVlKSkpOwor
ICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgogICAgICAg
ICAgICAgaWYgKEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3ID0gbV9ncmFwaC50cnlHZXRGb2xkYWJs
ZVZpZXdGb3JDaGlsZDEobV9ub2RlKSkKICAgICAgICAgICAgICAgICBmb2xkVHlwZWRBcnJheVBy
b3BlcnR5VG9Db25zdGFudCh2aWV3LCBqc051bWJlcih2aWV3LT5sZW5ndGgoKSkpOwpAQCAtMTc5
LDYgKzIxMSwyMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9ub2RlSW5kZXgsIFNwZWNOb25l
LCBQaGFudG9tLCBtX25vZGUtPmNvZGVPcmlnaW4sIG1fbm9kZS0+Y2hpbGRyZW4pOwogICAgIH0K
ICAgICAKKyAgICB2b2lkIGhhbmRsZUNvbW11dGF0aXZpdHkoKQorICAgIHsKKyAgICAgICAgLy8g
VGhpcyBjYXNlIGVuc3VyZXMgdGhhdCBvcHRpbWl6YXRpb25zIHRoYXQgbG9vayBmb3IgeCArIGNv
bnN0IGRvbid0IGFsc28gaGF2ZQorICAgICAgICAvLyB0byBsb29rIGZvciBjb25zdCArIHguCisg
ICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpICYmICFtX25vZGUtPmNo
aWxkMigpLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN3YXAobV9ub2RlLT5j
aGlsZDEoKSwgbV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVl
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIFRoaXMgY2FzZSBl
bnN1cmVzIHRoYXQgQ1NFIGlzIGNvbW11dGF0aXZpdHktYXdhcmUuCisgICAgICAgIGlmIChtX25v
ZGUtPmNoaWxkMSgpLm5vZGUoKSA+IG1fbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSB7CisgICAgICAg
ICAgICBzdGQ6OnN3YXAobV9ub2RlLT5jaGlsZDEoKSwgbV9ub2RlLT5jaGlsZDIoKSk7CisgICAg
ICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorICAgIAogICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKICAgICBCYXNp
Y0Jsb2NrKiBtX2Jsb2NrOwogICAgIHVuc2lnbmVkIG1fbm9kZUluZGV4Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223943</attachid>
            <date>2014-02-11 23:16:43 -0800</date>
            <delta_ts>2014-02-12 15:57:24 -0800</delta_ts>
            <desc>more!!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>50361</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzOTUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBA
CisyMDE0LTAyLTExICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SG9pc3QgYW5kIGNvbWJpbmUgYXJyYXkgYm91bmRzIGNoZWNrcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1NDMzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgYSBwaGFzZSBm
b3IgcmVhc29uaW5nIGFib3V0IG92ZXJmbG93IGNoZWNrcyBhbmQgYXJyYXkgYm91bmRzIGNoZWNr
cy4gSXQgdXNlcworICAgICAgICB0aGUgZmFjdCB0aGF0IGNoZWNrZWQgYXJpdGhtZXRpYyBkb2Vz
bid0IGhhdmUgd3JhcC1hcm91bmQgdG8gY29uc29saWRhdGUgbXVsdGlwbGUgYXJyYXkKKyAgICAg
ICAgYm91bmRzIGNoZWNrcy4gSXQncyBibG9jay1sb2NhbCwgYW5kIHJlbW92ZXMgYm90aCBvdmVy
ZmxvdyBjaGVja3MgYW5kIGJvdW5kcyBjaGVja3MgaW4KKyAgICAgICAgb25lIGdvLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVj
dHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpydW4pOgor
ICAgICAgICAqIGRmZy9ERkdBcml0aE1vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzdWJzdW1l
cyk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpD
U0VQaGFzZTo6cHVyZUNTRSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmludDMyVG9E
b3VibGVDU0UpOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwZXJmb3JtTm9kZUNTRSk6
CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9i
YmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHRWRnZS5oOgorICAgICAgICAoSlNDOjpERkc6OkVk
Z2U6OnNhbml0aXplZCk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6aGFzaCk6CisgICAgICAg
ICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6
OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0luc2VydGlvblNldC5oOgorICAgICAgICAo
SlNDOjpERkc6Okluc2VydGlvblNldDo6aW5zZXJ0Q29uc3RhbnQpOgorICAgICAgICAqIGRmZy9E
RkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6SW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZTo6SW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZSk6
CisgICAgICAgIChKU0M6OkRGRzo6SW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKyAg
ICAgICAgKEpTQzo6REZHOjpJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlOjpoYW5kbGVCbG9jayk6
CisgICAgICAgIChKU0M6OkRGRzo6SW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZTo6cmFuZ2VLZXlB
bmRBZGRlbmQpOgorICAgICAgICAoSlNDOjpERkc6OkludGVnZXJDaGVja0hvaXN0aW5nUGhhc2U6
Omluc2VydEFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6SW50ZWdlckNoZWNrSG9pc3RpbmdQaGFz
ZTo6aW5zZXJ0TXVzdEFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybUludGVnZXJDaGVj
a0hvaXN0aW5nKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6OndpbGxIYXZlQ29kZUdlbk9yT1NSKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoK
KyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29t
cGlsZUluVGhyZWFkSW1wbCk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAg
ICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3RyZW5n
dGhSZWR1Y3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RyZW5ndGhSZWR1Y3Rp
b25QaGFzZTo6aGFuZGxlTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RyZW5ndGhSZWR1Y3Rp
b25QaGFzZTo6aGFuZGxlQ29tbXV0YXRpdml0eSk6CisgICAgICAgICogZGZnL0RGR1R5cGVDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5n
UGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50U3RydWN0dXJlQ2hlY2tzKToKKyAgICAgICAgKEpTQzo6
REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjppZGVudGlmeVJlZHVuZGFudEFycmF5Q2hlY2tz
KToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
OjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTm9kZSk6CisgICAgICAgICog
dGVzdHMvc3RyZXNzL2ludmVydGVkLWFkZGl0aXZlLXN1YnN1bXB0aW9uLmpzOiBBZGRlZC4KKyAg
ICAgICAgKGZvbyk6CisKIDIwMTQtMDItMTEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgRGVidWcgYnVpbGQgZml4IGFmdGVyIHIxNjM5NDYuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNjM5NDgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw2ICsx
NDAsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdHcmFwaC5jcHAK
ICAgICBkZmcvREZHR3JhcGhTYWZlcG9pbnQuY3BwCiAgICAgZGZnL0RGR0luUGxhY2VBYnN0cmFj
dFN0YXRlLmNwcAorICAgIGRmZy9ERkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAogICAg
IGRmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdK
SVRDb2RlLmNwcAogICAgIGRmZy9ERkdKSVRDb21waWxlci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNjM5NDgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAt
MzEwLDkgKzMxMCwxMSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5saW5lQ2FjaGVXcmFwcGVyLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ludGVnZXJDaGVja0hvaXN0aW5nUGhhc2UuY3BwIFwKKwlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ludGVnZXJDaGVja0hvaXN0aW5nUGhhc2UuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlv
blBoYXNlLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0Lmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAgXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRD
b3JlLnZjeHByb2oJKHJldmlzaW9uIDE2Mzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTM5NCw2ICszOTQsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R0dyYXBoLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdHcmFwaFNh
ZmVwb2ludC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R0ludGVnZXJDaGVja0hvaXN0aW5nUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0pJVENvZGUuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0pJVENvbXBpbGVyLmNwcCIgLz4KQEAgLTkzNSw2ICs5
MzYsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0dyYXBoU2FmZXBvaW50
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFjZUFic3RyYWN0
U3RhdGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnNlcnRpb25T
ZXQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnRlZ2VyQ2hlY2tI
b2lzdGluZ1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW52
YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR0pJVENvZGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdKSVRDb21waWxlci5oIiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDE2Mzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNiArMjEw
LDggQEAKIAkJMEYyRkNDRkQxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NjYW5uYWJsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyRkNDRjYxOEE2MDA3
MDAwMUEyN0Y4IC8qIERGR1NjYW5uYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGMkZDQ0ZFMThBNjAwNzAwMDFBMjdGOCAvKiBERkdUaHJl
YWREYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkZDQ0Y3MThBNjAwNzAwMDFBMjdGOCAvKiBERkdUaHJlYWREYXRhLmNwcCAqLzsgfTsKIAkJ
MEYyRkNDRkYxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkZDQ0Y4MThBNjAwNzAwMDFBMjdG
OCAvKiBERkdUaHJlYWREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMEYzMDBCN0IxOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzMDBCNzkxOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0hvaXN0
aW5nUGhhc2UuY3BwICovOyB9OworCQkwRjMwMEI3QzE4QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50
ZWdlckNoZWNrSG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzMDBCN0ExOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVj
a0hvaXN0aW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjMwMEI3ODE4QUIwNTExMDBBNkQ3MkUgLyogREZHTm9kZU9yaWdpbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMDBCNzcxOEFC
MDUxMTAwQTZENzJFIC8qIERGR05vZGVPcmlnaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjM0QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZH
VXNlS2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjM0QjE0NzE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi87IH07CiAJCTBG
MzRCMTRBMTZENDIwMTMwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyog
REZHVXNlS2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xNjY1LDYgKzE2NjcsOCBAQAogCQkwRjJGQ0NGNjE4QTYwMDcwMDAxQTI3RjggLyog
REZHU2Nhbm5hYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NjYW5u
YWJsZS5oOyBwYXRoID0gZGZnL0RGR1NjYW5uYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjJGQ0NGNzE4QTYwMDcwMDAxQTI3RjggLyogREZHVGhyZWFkRGF0YS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdUaHJlYWREYXRhLmNwcDsgcGF0
aCA9IGRmZy9ERkdUaHJlYWREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYyRkNDRjgxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVGhyZWFkRGF0YS5oOyBwYXRoID0gZGZnL0RGR1RocmVh
ZERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMDBCNzkxOEFCMUIxNDAw
QTZENzJFIC8qIERGR0ludGVnZXJDaGVja0hvaXN0aW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZS5jcHA7
IHBhdGggPSBkZmcvREZHSW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMzAwQjdBMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2Vy
Q2hlY2tIb2lzdGluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0ludGVnZXJDaGVja0hvaXN0aW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdJbnRlZ2VyQ2hlY2tI
b2lzdGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzAwQjc3MThB
QjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR05vZGVPcmlnaW4uaDsgcGF0aCA9IGRmZy9ERkdOb2RlT3JpZ2luLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTQ3MTZENDIwMEUwMDFDREE1QSAvKiBE
RkdVc2VLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1Vz
ZUtpbmQuY3BwOyBwYXRoID0gZGZnL0RGR1VzZUtpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjM0QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdVc2VLaW5kLmg7IHBhdGggPSBkZmcvREZH
VXNlS2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDIzMCw2ICs0MjM0LDgg
QEAKIAkJCQlBNzA0RDkwMDE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3Rh
dGUuY3BwICovLAogCQkJCUE3MDREOTAxMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdJblBsYWNlQWJz
dHJhY3RTdGF0ZS5oICovLAogCQkJCTBGMkJEQzFGMTUxRTgwMzgwMENEODkxMCAvKiBERkdJbnNl
cnRpb25TZXQuaCAqLywKKwkJCQkwRjMwMEI3OTE4QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50ZWdl
ckNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgKi8sCisJCQkJMEYzMDBCN0ExOEFCMUIxNDAwQTZENzJF
IC8qIERGR0ludGVnZXJDaGVja0hvaXN0aW5nUGhhc2UuaCAqLywKIAkJCQkwRkM5N0YzNzE4MjAy
MTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAgKi8s
CiAJCQkJMEZDOTdGMzgxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlvblBvaW50SW5q
ZWN0aW9uUGhhc2UuaCAqLywKIAkJCQkwRkVBMEEyRjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklU
Q29kZS5jcHAgKi8sCkBAIC01MjcxLDYgKzUyNzcsNyBAQAogCQkJCTBGNDY4MENBMTRCQkIxNkMw
MEJGRTI3MiAvKiBMTEludENvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwRDMxNEJC
RDE2NzAwQkZFMjcyIC8qIExMSW50RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzOEIwMTIx
N0NGMDc4MzAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEYzMDBCN0MxOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0hvaXN0aW5nUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEEzMTRCQTdGOEQwMEJGRTI3MiAvKiBMTEludEV4
Y2VwdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MENCMTRCQkIxNzIwMEJGRTI3MiAv
KiBMTEludE9mZmxpbmVBc21Db25maWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDI4N0IyMTVF
QzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTgzLDYg
KzYxOTAsNyBAQAogCQkJCUE3ODg1M0Y5MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNGMTA3RUMzNzYwMDQyN0E0
OCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBQzkyMkJCMThB
MTYxODIwMDNDRTBGQiAvKiBGVExEV0FSRkRlYnVnTGluZUluZm8uY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEYzMDBCN0IxOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0hvaXN0aW5n
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkFDQ0YzREUxODVGRTI2QjAwODNFMkFEIC8q
IERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5
RDdENDBFRDIxMjgyMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQyOUQ5MkYwRUQyMkQ3MDAwQjg5NjE5IC8qIEpJVC5jcHAgaW4gU291cmNlcyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2Mzk0OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTc2Miw2ICsxNzYyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAgIGNhc2UgUHJvZmlsZURpZENh
bGw6CiAgICAgY2FzZSBQaGFudG9tOgorICAgIGNhc2UgSGFyZFBoYW50b206CiAgICAgY2FzZSBD
aGVjazoKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgogICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxv
b3A6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZp
Y2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2Mzk0OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNyw2ICszMTcsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIFBo
YW50b206CisgICAgICAgICAgICAgICAgY2FzZSBIYXJkUGhhbnRvbToKICAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCBwaGFudG9tIHVzZXMsIHNpbmNlIHBoYW50b20g
dXNlcyBhcmUgYWxsIGFib3V0CiAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3Qga2VlcGluZyB0
aGluZ3MgYWxpdmUgZm9yIE9TUiBleGl0LiBJZiBzb21ldGhpbmcgLSBsaWtlIHRoZQogICAgICAg
ICAgICAgICAgICAgICAvLyBDcmVhdGVBcmd1bWVudHMgLSBpcyBqdXN0IGJlaW5nIGtlcHQgYWxp
dmUsIHRoZW4gdGhpcyB0cmFuc2Zvcm1hdGlvbgpAQCAtNDI4LDcgKzQyOSw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIFBoYW50b206IHsKKyAgICAgICAgICAg
ICAgICBjYXNlIFBoYW50b206CisgICAgICAgICAgICAgICAgY2FzZSBIYXJkUGhhbnRvbTogewog
ICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIGhpZ2hseSBsaWtlbHkgdGhhdCB3ZSB3aWxsIGhh
dmUgYSBQaGFudG9tIHJlZmVyZW5jaW5nIGVpdGhlcgogICAgICAgICAgICAgICAgICAgICAvLyBD
cmVhdGVBcmd1bWVudHMsIG9yIGEgbG9jYWwgb3AgZm9yIHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIs
IG9yIGEKICAgICAgICAgICAgICAgICAgICAgLy8gbG9jYWwgb3AgZm9yIGFuIGFyZ3VtZW50cy1h
bGlhc2VkIHZhcmlhYmxlLiBJbiBhbnkgb2YgdGhvc2UgY2FzZXMsCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyaXRoTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJpdGhNb2RlLmgJKHJldmlzaW9uIDE2Mzk0OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJpdGhNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3
LDYgKzk3LDMzIEBAIGlubGluZSBib29sIHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKEFyaXQKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAoraW5saW5lIGJvb2wgc3Vic3VtZXMoQXJpdGg6Ok1vZGUgZWFy
bGllciwgQXJpdGg6Ok1vZGUgbGF0ZXIpCit7CisgICAgc3dpdGNoIChlYXJsaWVyKSB7CisgICAg
Y2FzZSBBcml0aDo6Q2hlY2tPdmVyZmxvdzoKKyAgICAgICAgc3dpdGNoIChsYXRlcikgeworICAg
ICAgICBjYXNlIEFyaXRoOjpVbmNoZWNrZWQ6CisgICAgICAgIGNhc2UgQXJpdGg6OkNoZWNrT3Zl
cmZsb3c6CisgICAgICAgIGNhc2UgQXJpdGg6OkRvT3ZlcmZsb3c6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgIGNhc2UgQXJpdGg6OkNoZWNrT3ZlcmZsb3dBbmROZWdhdGl2ZVplcm86Cisg
ICAgICAgIHN3aXRjaCAobGF0ZXIpIHsKKyAgICAgICAgY2FzZSBBcml0aDo6VW5jaGVja2VkOgor
ICAgICAgICBjYXNlIEFyaXRoOjpDaGVja092ZXJmbG93OgorICAgICAgICBjYXNlIEFyaXRoOjpD
aGVja092ZXJmbG93QW5kTmVnYXRpdmVaZXJvOgorICAgICAgICBjYXNlIEFyaXRoOjpEb092ZXJm
bG93OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZWFybGllciA9PSBsYXRlcjsKKyAgICB9Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTYzOTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw5ICsxMjcsOSBAQCBw
cml2YXRlOgogCiAgICAgTm9kZSogcHVyZUNTRShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAg
RWRnZSBjaGlsZDEgPSBub2RlLT5jaGlsZDEoKTsKLSAgICAgICAgRWRnZSBjaGlsZDIgPSBub2Rl
LT5jaGlsZDIoKTsKLSAgICAgICAgRWRnZSBjaGlsZDMgPSBub2RlLT5jaGlsZDMoKTsKKyAgICAg
ICAgRWRnZSBjaGlsZDEgPSBub2RlLT5jaGlsZDEoKS5zYW5pdGl6ZWQoKTsKKyAgICAgICAgRWRn
ZSBjaGlsZDIgPSBub2RlLT5jaGlsZDIoKS5zYW5pdGl6ZWQoKTsKKyAgICAgICAgRWRnZSBjaGls
ZDMgPSBub2RlLT5jaGlsZDMoKS5zYW5pdGl6ZWQoKTsKICAgICAgICAgCiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7CiAgICAgICAgICAgICBO
b2RlKiBvdGhlck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CkBAIC0xNDAsMjMgKzE0MCwy
MyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBpZiAobm9kZS0+aGFzQXJpdGhNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+YXJpdGhNb2RlKCkgIT0gb3RoZXJOb2RlLT5hcml0aE1vZGUoKSkKKyAgICAgICAg
ICAgICAgICBpZiAoIXN1YnN1bWVzKG90aGVyTm9kZS0+YXJpdGhNb2RlKCksIG5vZGUtPmFyaXRo
TW9kZSgpKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIEVkZ2Ugb3RoZXJDaGlsZCA9IG90aGVyTm9kZS0+Y2hp
bGQxKCk7CisgICAgICAgICAgICBFZGdlIG90aGVyQ2hpbGQgPSBvdGhlck5vZGUtPmNoaWxkMSgp
LnNhbml0aXplZCgpOwogICAgICAgICAgICAgaWYgKCFvdGhlckNoaWxkKQogICAgICAgICAgICAg
ICAgIHJldHVybiBvdGhlck5vZGU7CiAgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCAhPSBjaGls
ZDEpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IG90aGVyQ2hpbGQgPSBvdGhlck5vZGUtPmNoaWxkMigpOworICAgICAgICAgICAgb3RoZXJDaGls
ZCA9IG90aGVyTm9kZS0+Y2hpbGQyKCkuc2FuaXRpemVkKCk7CiAgICAgICAgICAgICBpZiAoIW90
aGVyQ2hpbGQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyTm9kZTsKICAgICAgICAgICAg
IGlmIChvdGhlckNoaWxkICE9IGNoaWxkMikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgb3RoZXJDaGlsZCA9IG90aGVyTm9kZS0+Y2hpbGQzKCk7
CisgICAgICAgICAgICBvdGhlckNoaWxkID0gb3RoZXJOb2RlLT5jaGlsZDMoKS5zYW5pdGl6ZWQo
KTsKICAgICAgICAgICAgIGlmICghb3RoZXJDaGlsZCkKICAgICAgICAgICAgICAgICByZXR1cm4g
b3RoZXJOb2RlOwogICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgIT0gY2hpbGQzKQpAQCAtMTc1
LDcgKzE3NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
ICAgICBzd2l0Y2ggKG90aGVyTm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBJbnQzMlRv
RG91YmxlOgotICAgICAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPmNoaWxkMSgpID09IG5vZGUt
PmNoaWxkMSgpKQorICAgICAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPmNoaWxkMSgpLnNhbml0
aXplZCgpID09IG5vZGUtPmNoaWxkMSgpLnNhbml0aXplZCgpKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gb3RoZXJOb2RlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ZGVmYXVsdDoKQEAgLTE0MDcsNiArMTQwNyw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBQaGFudG9tOgogICAgICAgICAgICAgLy8gRklYTUU6IHdlIG91Z2h0IHRvIHJl
bW92ZSBQaGFudG9tJ3MgdGhhdCBoYXZlIG5vIGNoaWxkcmVuLgorICAgICAgICAgICAgLy8gTkIu
IEl0IHdvdWxkIGJlIGluY29ycmVjdCB0byBkbyB0aGlzIGZvciBIYXJkUGhhbnRvbS4gSW4gZmFj
dCwgdGhlIHdob2xlIHBvaW50CisgICAgICAgICAgICAvLyBvZiBIYXJkUGhhbnRvbSBpcyB0aGF0
IHdlICpkb24ndCogZG8gdGhpcyBmb3IgSGFyZFBoYW50b21zLCBzaW5jZSB0aGV5IHNpZ25pZnkK
KyAgICAgICAgICAgIC8vIGEgbW9yZSBzdHJpY3Qga2luZCBvZiBsaXZlbmVzcyB0aGFuIHRoZSBQ
aGFudG9tIGJ5dGVjb2RlIGxpdmVuZXNzLgogICAgICAgICAgICAgZWxpbWluYXRlSXJyZWxldmFu
dFBoYW50b21DaGlsZHJlbihub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNp
b24gMTYzOTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CiAgICAgY2FzZSBJZGVu
dGl0eToKICAgICBjYXNlIFBoYW50b206CisgICAgY2FzZSBIYXJkUGhhbnRvbToKICAgICBjYXNl
IEJyZWFrcG9pbnQ6CiAgICAgY2FzZSBQcm9maWxlV2lsbENhbGw6CiAgICAgY2FzZSBQcm9maWxl
RGlkQ2FsbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCShyZXZpc2lvbiAx
NjM5NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMTUzLDYgKzE1MywxNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBkb2VzTm90S2lsbCgp
IGNvbnN0IHsgcmV0dXJuICFkb2VzS2lsbCgpOyB9CiAgICAgCiAgICAgYm9vbCBpc1NldCgpIGNv
bnN0IHsgcmV0dXJuICEhbm9kZSgpOyB9CisKKyAgICBFZGdlIHNhbml0aXplZCgpIGNvbnN0Cisg
ICAgeworICAgICAgICBFZGdlIHJlc3VsdCA9ICp0aGlzOworI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgICAgIHJlc3VsdC5tX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSgpLCB1c2VLaW5kVW5j
aGVja2VkKCksIE5lZWRzQ2hlY2ssIERvZXNOb3RLaWxsKTsKKyNlbHNlCisgICAgICAgIHJlc3Vs
dC5tX2VuY29kZWRXb3JkID0gbWFrZVdvcmQodXNlS2luZFVuY2hlY2tlZCgpLCBOZWVkc0NoZWNr
LCBEb2VzTm90S2lsbCk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAg
ICAgCiAgICAgdHlwZWRlZiB2b2lkKiBFZGdlOjoqVW5zcGVjaWZpZWRCb29sVHlwZTsKICAgICBv
cGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KGlzU2V0KCkpOyB9CkBAIC0xNzMsNiArMTg0LDE1
IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgICAgIHJldHVybiBJbnRIYXNoPHVpbnRwdHJfdD46Omhhc2gobV9lbmNvZGVk
V29yZCk7CisjZWxzZQorICAgICAgICByZXR1cm4gUHRySGFzaDxOb2RlKj46Omhhc2gobV9ub2Rl
KSArIG1fZW5jb2RlZFdvcmQ7CisjZW5kaWYKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIEFkamFjZW5jeUxpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE2Mzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0MSw2ICs5NDEs
NyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIERvdWJsZUFzSW50MzI6CiAgICAgICAgIGNhc2Ug
SW50MzJUb0RvdWJsZToKICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAgIGNhc2Ug
SGFyZFBoYW50b206IC8vIEhhcmRQaGFudG9tIHdvdWxkIGJlIHRyaXZpYWwgdG8gaGFuZGxlIGJ1
dCBhbnl3YXkgd2UgYXNzZXJ0IHRoYXQgd2Ugd29uJ3Qgc2VlIGl0IGhlcmUgeWV0LgogICAgICAg
ICAgICAgLy8gVGhlc2UgYXJlIGp1c3Qgbm9kZXMgdGhhdCB3ZSBkb24ndCBjdXJyZW50bHkgZXhw
ZWN0IHRvIHNlZSBkdXJpbmcgZml4dXAuCiAgICAgICAgICAgICAvLyBJZiB3ZSBldmVyIHdhbnRl
ZCB0byBpbnNlcnQgdGhlbSBwcmlvciB0byBmaXh1cCwgdGhlbiB3ZSBqdXN0IGhhdmUgdG8gY3Jl
YXRlCiAgICAgICAgICAgICAvLyBmaXh1cCBydWxlcyBmb3IgdGhlbS4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMTYzOTQ4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gaW5z
ZXJ0KEluc2VydGlvbihpbmRleCwgZWxlbWVudCkpOwogICAgIH0KLQorICAgIAogI2RlZmluZSBE
RkdfREVGSU5FX0lOU0VSVF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJh
bXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKICAgICB0ZW1w
bGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBpbnNlcnROb2RlKHNpemVfdCBp
bmRleCwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBc
CiAgICAgeyBcCkBAIC02NSw2ICs2NSwyMCBAQCBwdWJsaWM6CiAgICAgREZHX1ZBUklBRElDX1RF
TVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfSU5TRVJUX05PREUpCiAjdW5kZWYgREZHX0RFRklO
RV9JTlNFUlRfTk9ERQogICAgIAorICAgIE5vZGUqIGluc2VydENvbnN0YW50KHNpemVfdCBpbmRl
eCwgTm9kZU9yaWdpbiBvcmlnaW4sIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICB1bnNp
Z25lZCBjb25zdGFudFJlZyA9CisgICAgICAgICAgICBtX2dyYXBoLmNvbnN0YW50UmVnaXN0ZXJG
b3JDb25zdGFudCh2YWx1ZSk7CisgICAgICAgIHJldHVybiBpbnNlcnROb2RlKAorICAgICAgICAg
ICAgaW5kZXgsIHNwZWN1bGF0aW9uRnJvbVZhbHVlKHZhbHVlKSwgSlNDb25zdGFudCwgb3JpZ2lu
LAorICAgICAgICAgICAgT3BJbmZvKGNvbnN0YW50UmVnKSk7CisgICAgfQorICAgIAorICAgIE5v
ZGUqIGluc2VydENvbnN0YW50KHNpemVfdCBpbmRleCwgQ29kZU9yaWdpbiBvcmlnaW4sIEpTVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaW5zZXJ0Q29uc3RhbnQoaW5kZXgsIE5v
ZGVPcmlnaW4ob3JpZ2luKSwgdmFsdWUpOworICAgIH0KKwogICAgIHZvaWQgZXhlY3V0ZShCYXNp
Y0Jsb2NrKiBibG9jaykKICAgICB7CiAgICAgICAgIGV4ZWN1dGVJbnNlcnRpb25zKCpibG9jaywg
bV9pbnNlcnRpb25zKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdl
ckNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlLmgi
CisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgor
I2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuaCIKKyNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8d3Rm
L0hhc2hNZXRob2QuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCituYW1l
c3BhY2UgeworCitlbnVtIFJhbmdlS2luZCB7CisgICAgSW52YWxpZFJhbmdlS2luZCwKKyAgICAK
KyAgICAvLyBUaGlzIG1lYW5zIHdlIGRpZCBBcml0aEFkZCB3aXRoIENoZWNrT3ZlcmZsb3cuCisg
ICAgQWRkaXRpb24sCisgICAgCisgICAgLy8gVGhpcyBtZWFucyB3ZSBkaWQgQ2hlY2tJbkJvdW5k
cyBvbiBzb21lIGxlbmd0aC4KKyAgICBBcnJheUJvdW5kcworfTsKKworc3RydWN0IFJhbmdlS2V5
IHsKKyAgICBSYW5nZUtleSgpCisgICAgICAgIDogbV9raW5kKEludmFsaWRSYW5nZUtpbmQpCisg
ICAgICAgICwgbV9rZXkobnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBS
YW5nZUtleSBhZGRpdGlvbihFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBSYW5nZUtleSByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBBZGRpdGlvbjsKKyAgICAgICAgcmVzdWx0Lm1f
c291cmNlID0gZWRnZS5zYW5pdGl6ZWQoKTsKKyAgICAgICAgcmVzdWx0Lm1fa2V5ID0gMDsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFJhbmdlS2V5IGFy
cmF5Qm91bmRzKEVkZ2UgZWRnZSwgTm9kZSoga2V5KQorICAgIHsKKyAgICAgICAgUmFuZ2VLZXkg
cmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gQXJyYXlCb3VuZHM7CisgICAgICAgIHJl
c3VsdC5tX3NvdXJjZSA9IGVkZ2Uuc2FuaXRpemVkKCk7CisgICAgICAgIHJlc3VsdC5tX2tleSA9
IGtleTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVy
YXRvciEoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gSW52YWxpZFJhbmdlS2luZDsgfQorICAg
IAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2lu
ZCArIG1fc291cmNlLmhhc2goKSArIFB0ckhhc2g8Tm9kZSo+OjpoYXNoKG1fa2V5KTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJhbmdlS2V5JiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAg
ICAmJiBtX3NvdXJjZSA9PSBvdGhlci5tX3NvdXJjZQorICAgICAgICAgICAgJiYgbV9rZXkgPT0g
b3RoZXIubV9rZXk7CisgICAgfQorICAgIAorICAgIFJhbmdlS2luZCBtX2tpbmQ7CisgICAgRWRn
ZSBtX3NvdXJjZTsKKyAgICBOb2RlKiBtX2tleTsKK307CisKK3N0cnVjdCBSYW5nZUtleUFuZEFk
ZGVuZCB7CisgICAgUmFuZ2VLZXlBbmRBZGRlbmQoKQorICAgICAgICA6IG1fYWRkZW5kKDApCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBSYW5nZUtleUFuZEFkZGVuZChSYW5nZUtleSBrZXksIGlu
dDMyX3QgYWRkZW5kKQorICAgICAgICA6IG1fa2V5KGtleSkKKyAgICAgICAgLCBtX2FkZGVuZChh
ZGRlbmQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsg
cmV0dXJuICFtX2tleSAmJiAhbV9hZGRlbmQ7IH0KKyAgICAKKyAgICBSYW5nZUtleSBtX2tleTsK
KyAgICBpbnQzMl90IG1fYWRkZW5kOworfTsKKworc3RydWN0IFJhbmdlIHsKKyAgICBSYW5nZSgp
CisgICAgICAgIDogbV9taW5Cb3VuZCgwKQorICAgICAgICAsIG1fbWF4Qm91bmQoMCkKKyAgICAg
ICAgLCBtX2NvdW50KDApCisgICAgICAgICwgbV9ob2lzdGVkKGZhbHNlKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgaW50MzJfdCBtX21pbkJvdW5kOworICAgIENvZGVPcmlnaW4gbV9taW5Pcmln
aW47CisgICAgaW50MzJfdCBtX21heEJvdW5kOworICAgIENvZGVPcmlnaW4gbV9tYXhPcmlnaW47
CisgICAgdW5zaWduZWQgbV9jb3VudDsgLy8gSWYgdGhpcyBpcyB6ZXJvIHRoZW4gdGhlIGJvdW5k
cyB3b24ndCBuZWNlc3NhcmlseSBtYWtlIHNlbnNlLgorICAgIGJvb2wgbV9ob2lzdGVkOworfTsK
KworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2NsYXNzIEludGVnZXJDaGVja0hvaXN0aW5n
UGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIEludGVnZXJDaGVja0hvaXN0aW5n
UGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiaW50ZWdlciBjaGVj
ayBob2lzdGluZyIpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5t
X2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgCisgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAg
ICAgICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBibG9ja0luZGV4ID0g
bV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykKKyAgICAgICAgICAgIGhhbmRsZUJs
b2NrKGJsb2NrSW5kZXgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBoYW5kbGVCbG9jayhCbG9ja0luZGV4IGJsb2NrSW5k
ZXgpCisgICAgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxv
Y2tJbmRleCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgICAgICBtX21hcC5jbGVhcigpOworICAgICAgICAKKyAgICAgICAgLy8gRmlyc3Qg
d2UgY29sbGVjdCBSYW5nZXMuIElmIG9wZXJhdGlvbnMgd2l0aGluIHRoZSByYW5nZSBoYXZlIGVu
b3VnaCByZWR1bmRhbmN5LAorICAgICAgICAvLyB3ZSBob2lzdC4gQW5kIHRoZW4gd2UgcmVtb3Zl
IGFkZGl0aW9ucyBhbmQgY2hlY2tzIHRoYXQgZmFsbCB3aXRoaW4gdGhlIG1heCByYW5nZS4KKyAg
ICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwg
YmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBi
bG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIFJhbmdlS2V5QW5kQWRkZW5kIGRhdGEg
PSByYW5nZUtleUFuZEFkZGVuZChub2RlKTsKKyAgICAgICAgICAgIGlmICghZGF0YSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFJhbmdlJiByYW5nZSA9IG1fbWFwW2Rh
dGEubV9rZXldOworICAgICAgICAgICAgaWYgKHJhbmdlLm1fY291bnQpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZGF0YS5tX2FkZGVuZCA+IHJhbmdlLm1fbWF4Qm91bmQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmFuZ2UubV9tYXhCb3VuZCA9IGRhdGEubV9hZGRlbmQ7CisgICAgICAgICAgICAg
ICAgICAgIHJhbmdlLm1fbWF4T3JpZ2luID0gbm9kZS0+b3JpZ2luLnNlbWFudGljOworICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5tX2FkZGVuZCA8IHJhbmdlLm1fbWluQm91bmQpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmFuZ2UubV9taW5Cb3VuZCA9IGRhdGEubV9hZGRlbmQ7Cisg
ICAgICAgICAgICAgICAgICAgIHJhbmdlLm1fbWluT3JpZ2luID0gbm9kZS0+b3JpZ2luLnNlbWFu
dGljOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgcmFuZ2UubV9tYXhCb3VuZCA9IGRhdGEubV9hZGRlbmQ7CisgICAgICAgICAgICAgICAg
cmFuZ2UubV9taW5Cb3VuZCA9IGRhdGEubV9hZGRlbmQ7CisgICAgICAgICAgICAgICAgcmFuZ2Uu
bV9taW5PcmlnaW4gPSBub2RlLT5vcmlnaW4uc2VtYW50aWM7CisgICAgICAgICAgICAgICAgcmFu
Z2UubV9tYXhPcmlnaW4gPSBub2RlLT5vcmlnaW4uc2VtYW50aWM7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByYW5nZS5tX2NvdW50Kys7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsg
Kytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUlu
ZGV4KTsKKyAgICAgICAgICAgIFJhbmdlS2V5QW5kQWRkZW5kIGRhdGEgPSByYW5nZUtleUFuZEFk
ZGVuZChub2RlKTsKKyAgICAgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIFJhbmdlIHJhbmdlID0gbV9tYXBbZGF0YS5tX2tleV07CisgICAg
ICAgICAgICBpZiAocmFuZ2UubV9jb3VudCA8IDIpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIERvIHRoZSBob2lzdGluZy4KKyAgICAgICAg
ICAgIGlmICghcmFuZ2UubV9ob2lzdGVkKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChkYXRh
Lm1fa2V5Lm1fa2luZCkgeworICAgICAgICAgICAgICAgIGNhc2UgQWRkaXRpb246IHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHJhbmdlLm1fbWluQm91bmQgPCAwKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpbnNlcnRNdXN0QWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCwgTm9kZU9yaWdpbihyYW5nZS5tX21pbk9yaWdpbiwgbm9kZS0+b3JpZ2luLmZvckV4
aXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubV9rZXkubV9zb3VyY2UsIHJh
bmdlLm1fbWluQm91bmQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGlmIChyYW5nZS5tX21heEJvdW5kID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0TXVzdEFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIE5v
ZGVPcmlnaW4ocmFuZ2UubV9tYXhPcmlnaW4sIG5vZGUtPm9yaWdpbi5mb3JFeGl0KSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1fa2V5Lm1fc291cmNlLCByYW5nZS5tX21heEJv
dW5kKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2Fz
ZSBBcnJheUJvdW5kczogeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBtaW5Ob2RlOworICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBtYXhOb2RlOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhLm1fa2V5Lm1fc291cmNlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtaW5Ob2RlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heE5v
ZGUgPSBtX2luc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXgsIHJhbmdlLm1fbWF4T3JpZ2luLCBqc051bWJlcihyYW5nZS5tX21h
eEJvdW5kKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtaW5Ob2RlID0gaW5zZXJ0QWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGVJbmRleCwgTm9kZU9yaWdpbihyYW5nZS5tX21pbk9yaWdpbiwgbm9kZS0+b3JpZ2luLmZv
ckV4aXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubV9rZXkubV9zb3VyY2Us
IHJhbmdlLm1fbWluQm91bmQsIEFyaXRoOjpVbmNoZWNrZWQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbWF4Tm9kZSA9IGluc2VydEFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlSW5kZXgsIE5vZGVPcmlnaW4ocmFuZ2UubV9tYXhPcmlnaW4sIG5vZGUtPm9yaWdpbi5mb3JF
eGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1fa2V5Lm1fc291cmNlLCBy
YW5nZS5tX21heEJvdW5kLCBBcml0aDo6VW5jaGVja2VkKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1pbk5vZGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2tJbkJv
dW5kcywgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UobWlu
Tm9kZSwgSW50MzJVc2UpLCBFZGdlKGRhdGEubV9rZXkubV9rZXksIEludDMyVXNlKSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIENo
ZWNrSW5Cb3VuZHMsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uo
bWF4Tm9kZSwgSW50MzJVc2UpLCBFZGdlKGRhdGEubV9rZXkubV9rZXksIEludDMyVXNlKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
IG1fbWFwW2RhdGEubV9rZXldLm1faG9pc3RlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIERvIHRoZSBlbGltaW5hdGlvbi4KKyAgICAgICAgICAg
IHN3aXRjaCAoZGF0YS5tX2tleS5tX2tpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgQWRkaXRpb246
IHsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRBcml0aE1vZGUoQXJpdGg6OlVuY2hlY2tlZCk7
CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQXJy
YXlCb3VuZHM6IHsKKyAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7Cisg
ICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShi
bG9jayk7CisgICAgfQorICAgIAorICAgIFJhbmdlS2V5QW5kQWRkZW5kIHJhbmdlS2V5QW5kQWRk
ZW5kKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAg
ICAgICAgY2FzZSBBcml0aEFkZDogeworICAgICAgICAgICAgaWYgKCFzaG91bGRDaGVja092ZXJm
bG93KG5vZGUtPmFyaXRoTW9kZSgpKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGlmICghbV9ncmFwaC5pc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBSYW5nZUtleUFuZEFk
ZGVuZCgKKyAgICAgICAgICAgICAgICBSYW5nZUtleTo6YWRkaXRpb24obm9kZS0+Y2hpbGQxKCkp
LAorICAgICAgICAgICAgICAgIG1fZ3JhcGgudmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hp
bGQyKCkubm9kZSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBDaGVja0luQm91bmRzOiB7CisgICAgICAgICAgICBFZGdlIHNvdXJjZTsKKyAgICAgICAgICAg
IGludDMyX3QgYWRkZW5kOworICAgICAgICAgICAgTm9kZSoga2V5ID0gbm9kZS0+Y2hpbGQyKCku
bm9kZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNJbnQz
MkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBzb3Vy
Y2UgPSBFZGdlKCk7CisgICAgICAgICAgICAgICAgYWRkZW5kID0gbV9ncmFwaC52YWx1ZU9mSW50
MzJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgfSBlbHNlIGlm
ICgKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBBcml0aEFkZAorICAg
ICAgICAgICAgICAgICYmIG5vZGUtPmNoaWxkMSgpLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2Up
CisgICAgICAgICAgICAgICAgJiYgIXNob3VsZENoZWNrT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2Rl
KCkpCisgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC5pc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hp
bGQxKCktPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBub2Rl
LT5jaGlsZDEoKTsKKyAgICAgICAgICAgICAgICBhZGRlbmQgPSBtX2dyYXBoLnZhbHVlT2ZJbnQz
MkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBub2RlLT5jaGlsZDEoKTsKKyAgICAg
ICAgICAgICAgICBhZGRlbmQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICByZXR1cm4gUmFuZ2VLZXlBbmRBZGRlbmQoUmFuZ2VLZXk6OmFycmF5Qm91bmRzKHNv
dXJjZSwga2V5KSwgYWRkZW5kKTsKKyAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHJldHVybiBSYW5nZUtleUFuZEFkZGVuZCgpOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBp
bnNlcnRBZGQoCisgICAgICAgIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4s
IEVkZ2Ugc291cmNlLCBpbnQzMl90IGFkZGVuZCwKKyAgICAgICAgQXJpdGg6Ok1vZGUgYXJpdGhN
b2RlID0gQXJpdGg6OkNoZWNrT3ZlcmZsb3cpCisgICAgeworICAgICAgICByZXR1cm4gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgIG5vZGVJbmRleCwgc291cmNlLT5wcmVk
aWN0aW9uKCksIEFyaXRoQWRkLCBvcmlnaW4sIE9wSW5mbyhhcml0aE1vZGUpLAorICAgICAgICAg
ICAgc291cmNlLCBFZGdlKAorICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydENv
bnN0YW50KG5vZGVJbmRleCwgb3JpZ2luLCBqc051bWJlcihhZGRlbmQpKSwKKyAgICAgICAgICAg
ICAgICBzb3VyY2UudXNlS2luZCgpKSk7CisgICAgfQorICAgIAorICAgIE5vZGUqIGluc2VydE11
c3RBZGQoCisgICAgICAgIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIEVk
Z2Ugc291cmNlLCBpbnQzMl90IGFkZGVuZCkKKyAgICB7CisgICAgICAgIE5vZGUqIHJlc3VsdCA9
IGluc2VydEFkZChub2RlSW5kZXgsIG9yaWdpbiwgc291cmNlLCBhZGRlbmQpOworICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9u
ZSwgSGFyZFBoYW50b20sIG9yaWdpbiwgRWRnZShyZXN1bHQsIFVudHlwZWRVc2UpKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJl
ZF9tYXA8UmFuZ2VLZXksIFJhbmdlLCBIYXNoTWV0aG9kPFJhbmdlS2V5Pj4gUmFuZ2VNYXA7Cisg
ICAgUmFuZ2VNYXAgbV9tYXA7CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworICAg
IGJvb2wgbV9jaGFuZ2VkOworfTsKKyAgICAKK2Jvb2wgcGVyZm9ybUludGVnZXJDaGVja0hvaXN0
aW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigi
REZHIEludGVnZXIgQ2hlY2sgSG9pc3RpbmcgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8
SW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1Bo
YXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVn
ZXJDaGVja0hvaXN0aW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZH
SW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZV9oCisjZGVmaW5lIERGR0ludGVnZXJDaGVja0hvaXN0
aW5nUGhhc2VfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFJlbW92ZXMgb3ZlcmZsb3cgY2hlY2tz
IGFuZCBvdXQtb2YtYm91bmRzIGNoZWNrcyBieSBob2lzdGluZyB0aGVtLgorCitib29sIHBlcmZv
cm1JbnRlZ2VyQ2hlY2tIb2lzdGluZyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0ludGVnZXJD
aGVja0hvaXN0aW5nUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkocmV2aXNpb24gMTYzOTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOTgsNiArMTE5OCw3IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgY2FzZSBIYXJkUGhhbnRvbToKICAgICAgICAg
ICAgIHJldHVybiBjaGlsZDEoKS51c2VLaW5kVW5jaGVja2VkKCkgIT0gVW50eXBlZFVzZSB8fCBj
aGlsZDIoKS51c2VLaW5kVW5jaGVja2VkKCkgIT0gVW50eXBlZFVzZSB8fCBjaGlsZDMoKS51c2VL
aW5kVW5jaGVja2VkKCkgIT0gVW50eXBlZFVzZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIHJldHVybiBzaG91bGRHZW5lcmF0ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTYzOTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhab21iaWVIaW50LCBOb2Rl
RG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhHZXRBcmd1bWVudCwgTm9kZVJlc3VsdEpTIHwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJhdGUpIFwK
KyAgICBtYWNybyhIYXJkUGhhbnRvbSwgTm9kZU11c3RHZW5lcmF0ZSkgLyogTGlrZSBQaGFudG9t
LCBidXQgd2UgbmV2ZXIgcmVtb3ZlIGFueSBvZiBpdHMgY2hpbGRyZW4uICovIFwKICAgICBtYWNy
byhDaGVjaywgMCkgLyogVXNlZCBpZiB3ZSB3YW50IGp1c3QgYSB0eXBlIGNoZWNrIGJ1dCBub3Qg
bGl2ZW5lc3MuIERDRSBlaXRoZXJzIGtpbGxzIHRoaXMgb3IgY29udmVydHMgaXQgdG8gUGhhbnRv
bS4gKi9cCiAgICAgbWFjcm8oVXBzaWxvbiwgTm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlbGV2YW50
VG9PU1IpIFwKICAgICBtYWNybyhQaGksIE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZWxldmFudFRv
T1NSKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9u
IDE2Mzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJERkdGbHVzaExpdmVuZXNzQW5h
bHlzaXNQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0ZpeHVwUGhhc2UuaCIKICNpbmNsdWRlICJERkdH
cmFwaFNhZmVwb2ludC5oIgorI2luY2x1ZGUgIkRGR0ludGVnZXJDaGVja0hvaXN0aW5nUGhhc2Uu
aCIKICNpbmNsdWRlICJERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmgiCiAjaW5j
bHVkZSAiREZHSklUQ29tcGlsZXIuaCIKICNpbmNsdWRlICJERkdMSUNNUGhhc2UuaCIKQEAgLTMw
Myw2ICszMDQsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAg
ICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DRkEo
ZGZnKTsKICAgICAgICAgcGVyZm9ybUxJQ00oZGZnKTsKKyAgICAgICAgcGVyZm9ybUludGVnZXJD
aGVja0hvaXN0aW5nKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DU0UoZGZnKTsKICAgICAgICAgcGVy
Zm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZnKTsKICAgICAgICAgcGVyZm9ybUNGQShkZmcpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2Mzk0OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MDcsNyArNTA3LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBJbnQ1MlRv
VmFsdWU6CiAgICAgICAgIGNhc2UgSW50NTJUb0RvdWJsZToKICAgICAgICAgY2FzZSBDaGVja0lu
Qm91bmRzOgotICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjogeworICAgICAgICBjYXNlIFZhbHVl
VG9JbnQzMjoKKyAgICAgICAgY2FzZSBIYXJkUGhhbnRvbTogewogICAgICAgICAgICAgLy8gVGhp
cyBub2RlIHNob3VsZCBuZXZlciBiZSB2aXNpYmxlIGF0IHRoaXMgc3RhZ2Ugb2YgY29tcGlsYXRp
b24uIEl0IGlzCiAgICAgICAgICAgICAvLyBpbnNlcnRlZCBieSBmaXh1cCgpLCB3aGljaCBmb2xs
b3dzIHRoaXMgcGhhc2UuCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJ
KHJldmlzaW9uIDE2Mzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRv
RXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNiArMTIyLDcgQEAgYm9vbCBzYWZlVG9F
eGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgWm9tYmllSGludDoKICAgICBj
YXNlIEdldEFyZ3VtZW50OgogICAgIGNhc2UgUGhhbnRvbToKKyAgICBjYXNlIEhhcmRQaGFudG9t
OgogICAgIGNhc2UgVXBzaWxvbjoKICAgICBjYXNlIFBoaToKICAgICBjYXNlIEZsdXNoOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCShyZXZpc2lvbiAxNjM5NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjU5LDYgKzQ2
NTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBQaGFudG9tOgorICAgIGNhc2UgSGFyZFBoYW50b206CiAgICAg
ICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1faml0LmdyYXBoKCksIG5vZGUsIHNwZWN1bGF0
ZSk7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2
aXNpb24gMTYzOTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkxNSw2ICs0OTE1LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgUGhhbnRvbToKKyAgICBjYXNlIEhhcmRQaGFudG9tOgogICAgICAgICBERkdfTk9ERV9ET19U
T19DSElMRFJFTihtX2ppdC5ncmFwaCgpLCBub2RlLCBzcGVjdWxhdGUpOwogICAgICAgICBub1Jl
c3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDE2Mzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDEzICs3MSw4IEBAIHByaXZhdGU6CiAg
ICAgewogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+b3AoKSkgewogICAgICAgICBjYXNlIEJpdE9y
OgotICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCktPmlzQ29uc3RhbnQoKSkgewotICAg
ICAgICAgICAgICAgIEpTVmFsdWUgb3AxID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChtX25v
ZGUtPmNoaWxkMSgpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG9wMS5pc0ludDMyKCkg
JiYgIW9wMS5hc0ludDMyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udmVydFRvSWRlbnRp
dHlPdmVyQ2hpbGQyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsK
KwogICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQyKCktPmlzQ29uc3RhbnQoKSkgewogICAg
ICAgICAgICAgICAgIEpTVmFsdWUgb3AyID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChtX25v
ZGUtPmNoaWxkMigpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG9wMi5pc0ludDMyKCkg
JiYgIW9wMi5hc0ludDMyKCkpIHsKQEAgLTg3LDYgKzgyLDExIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEJp
dFhvcjoKKyAgICAgICAgY2FzZSBCaXRBbmQ6CisgICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2
aXR5KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEJp
dExTaGlmdDoKICAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CiAgICAgICAgIGNhc2UgQml0VVJTaGlm
dDoKQEAgLTExMiw2ICsxMTIsMzggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAg
ICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7CisKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLmlz
SW50MzJDb25zdGFudChtX25vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAg
ICBpbnQzMl90IHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSW50MzJDb25zdGFudCgKKyAgICAgICAg
ICAgICAgICAgICAgbV9ub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgIGlm
ICghdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udmVydFRvSWRlbnRpdHlPdmVyQ2hp
bGQxKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgQXJpdGhNdWw6CisgICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoU3ViOgorICAgICAg
ICAgICAgaWYgKG1fZ3JhcGguaXNJbnQzMkNvbnN0YW50KG1fbm9kZS0+Y2hpbGQyKCkubm9kZSgp
KQorICAgICAgICAgICAgICAgICYmIG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNlKSkg
eworICAgICAgICAgICAgICAgIGludDMyX3QgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZJbnQzMkNv
bnN0YW50KG1fbm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoLXZh
bHVlICE9IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+c2V0T3AoQXJpdGhB
ZGQpOworICAgICAgICAgICAgICAgICAgICBtX25vZGUtPmNoaWxkMigpLnNldE5vZGUoCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX25vZGVJbmRleCwgbV9ub2RlLT5vcmlnaW4sIGpzTnVt
YmVyKC12YWx1ZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRBcnJh
eUxlbmd0aDoKICAgICAgICAgICAgIGlmIChKU0FycmF5QnVmZmVyVmlldyogdmlldyA9IG1fZ3Jh
cGgudHJ5R2V0Rm9sZGFibGVWaWV3Rm9yQ2hpbGQxKG1fbm9kZSkpCiAgICAgICAgICAgICAgICAg
Zm9sZFR5cGVkQXJyYXlQcm9wZXJ0eVRvQ29uc3RhbnQodmlldywganNOdW1iZXIodmlldy0+bGVu
Z3RoKCkpKTsKQEAgLTE3OSw2ICsyMTEsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fbm9k
ZUluZGV4LCBTcGVjTm9uZSwgUGhhbnRvbSwgbV9ub2RlLT5vcmlnaW4sIG1fbm9kZS0+Y2hpbGRy
ZW4pOwogICAgIH0KICAgICAKKyAgICB2b2lkIGhhbmRsZUNvbW11dGF0aXZpdHkoKQorICAgIHsK
KyAgICAgICAgLy8gVGhpcyBjYXNlIGVuc3VyZXMgdGhhdCBvcHRpbWl6YXRpb25zIHRoYXQgbG9v
ayBmb3IgeCArIGNvbnN0IGRvbid0IGFsc28gaGF2ZQorICAgICAgICAvLyB0byBsb29rIGZvciBj
b25zdCArIHguCisgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpICYm
ICFtX25vZGUtPmNoaWxkMigpLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN3
YXAobV9ub2RlLT5jaGlsZDEoKSwgbV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8v
IFRoaXMgY2FzZSBlbnN1cmVzIHRoYXQgQ1NFIGlzIGNvbW11dGF0aXZpdHktYXdhcmUuCisgICAg
ICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLm5vZGUoKSA+IG1fbm9kZS0+Y2hpbGQyKCkubm9kZSgp
KSB7CisgICAgICAgICAgICBzdGQ6OnN3YXAobV9ub2RlLT5jaGlsZDEoKSwgbV9ub2RlLT5jaGls
ZDIoKSk7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgfQorICAgIAogICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNl
dDsKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIHVuc2lnbmVkIG1fbm9kZUluZGV4OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNjM5NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDQsNiArMjQ0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjYXNlIEdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRUeXBlZEFycmF5Qnl0
ZU9mZnNldDoKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b206CisgICAgICAgICAgICAgICAg
Y2FzZSBIYXJkUGhhbnRvbToKICAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAg
ICAgICAgICAgICAgIC8vIERvbid0IGNvdW50IHRoZXNlIHVzZXMuCiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMzQyLDYgKzM0Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
Y2FzZSBHZXRBcnJheUxlbmd0aDoKICAgICAgICAgICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9w
ZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tOgorICAgICAgICAgICAg
ICAgIGNhc2UgSGFyZFBoYW50b206CiAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAg
ICAgICAgICAgICAgICAgICAvLyBEb24ndCBjb3VudCB0aGVzZSB1c2VzLgogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE2Mzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBA
QCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBNb3ZI
aW50OgogICAgIGNhc2UgWm9tYmllSGludDoKICAgICBjYXNlIFBoYW50b206CisgICAgY2FzZSBI
YXJkUGhhbnRvbToKICAgICBjYXNlIEZsdXNoOgogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAg
IGNhc2UgU2V0QXJndW1lbnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTYzOTQ4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
MSw2ICszMDEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY29tcGlsZVpvbWJpZUhpbnQoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFBoYW50b206CisgICAgICAgIGNhc2Ug
SGFyZFBoYW50b206CiAgICAgICAgICAgICBjb21waWxlUGhhbnRvbSgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgVG9UaGlzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9pbnZlcnRlZC1hZGRpdGl2ZS1zdWJzdW1wdGlvbi5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2ludmVydGVkLWFkZGl0aXZl
LXN1YnN1bXB0aW9uLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9pbnZlcnRlZC1hZGRpdGl2ZS1zdWJzdW1wdGlvbi5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE1IEBACitmdW5jdGlvbiBmb28oeCkgeworICAgIHJldHVybiAoKHggKyAx
KSB8IDApICsgKHggKyAxKTsKK30KKworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmb28oaSk7CisgICAgaWYgKHJl
c3VsdCAhPSAoaSArIDEpICogMikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZv
ciBpID0gIiArIGkgKyAiOiAiICsgcmVzdWx0OworfQorCit2YXIgcmVzdWx0ID0gZm9vKDIxNDc0
ODM2NDcpOworaWYgKHJlc3VsdCAhPSAoKDIxNDc0ODM2NDcgKyAxKSB8IDApICsgKDIxNDc0ODM2
NDcgKyAxKSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgZm9yIDIxNDc0ODM2NDc6ICIg
KyByZXN1bHQ7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzOTUxKQorKysgU291cmNlL1dURi9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNC0wMi0xMSAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEhvaXN0IGFuZCBjb21iaW5lIGFycmF5
IGJvdW5kcyBjaGVja3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyNTQzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXVEYudmN4cHJvai9XVEYu
dmN4cHJvajoKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL0hhc2hNZXRob2QuaDogQWRk
ZWQuCisgICAgICAgIChXVEY6Okhhc2hNZXRob2Q6Om9wZXJhdG9yKCkpOgorCiAyMDE0LTAyLTEx
ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgMzIt
Yml0IExMSW50IHdyaXRlQmFycmllck9uR2xvYmFsT2JqZWN0IGlzIHdyb25nCkluZGV4OiBTb3Vy
Y2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9HTlVt
YWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNjM5NDgpCisrKyBTb3VyY2UvV1RGL0dOVW1ha2Vm
aWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDcgQEAgd3RmX3NvdXJjZXMg
Kz0gXAogICAgIFNvdXJjZS9XVEYvd3RmL0hhc2hGdW5jdGlvbnMuaCBcCiAgICAgU291cmNlL1dU
Ri93dGYvSGFzaEl0ZXJhdG9ycy5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmggXAor
ICAgIFNvdXJjZS9XVEYvd3RmL0hhc2hNZXRob2QuaCBcCiAgICAgU291cmNlL1dURi93dGYvSGFz
aFNldC5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuY3BwIFwKICAgICBTb3VyY2Uv
V1RGL3d0Zi9IYXNoVGFibGUuaCBcCkluZGV4OiBTb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52
Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oJ
KHJldmlzaW9uIDE2Mzk0OCkKKysrIFNvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTIwMyw2ICsyMDMsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cd3RmXEhhc2hGdW5jdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHd0ZlxIYXNoSXRlcmF0b3JzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZc
SGFzaE1hcC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEhhc2hNZXRob2Qu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxIYXNoU2V0LmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcSGFzaFRhYmxlLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlx3dGZcSGFzaFRyYWl0cy5oIiAvPgpJbmRleDogU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjM5NDgpCisrKyBTb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yOTEsNiAr
MjkxLDcgQEAKIAkJMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBOb0xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTQx
N0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERlZmVycmFibGVSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxp
cEJ5dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzAwQjdEMThBQjQ4QjQw
MEE2RDcyRSAvKiBIYXNoTWV0aG9kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hNZXRob2QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJh
d1BvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmF3UG9pbnRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjg4NUUwRTE4NDVBRTlGMDBGMUUzRkEg
LyogRmFzdEJpdFZlY3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGYXN0Qml0VmVjdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOEYxNzJFMDBGMDAwN0RCREE1
IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBpbGF0aW9u
VGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcyMCw2ICs3MjEsNyBA
QAogCQkJCUE4QTQ3MkI0MTUxQTgyNUEwMDQxMjNGRiAvKiBIYXNoRnVuY3Rpb25zLmggKi8sCiAJ
CQkJQThBNDcyQjUxNTFBODI1QTAwNDEyM0ZGIC8qIEhhc2hJdGVyYXRvcnMuaCAqLywKIAkJCQlB
OEE0NzJCNjE1MUE4MjVBMDA0MTIzRkYgLyogSGFzaE1hcC5oICovLAorCQkJCTBGMzAwQjdEMThB
QjQ4QjQwMEE2RDcyRSAvKiBIYXNoTWV0aG9kLmggKi8sCiAJCQkJQThBNDcyQjcxNTFBODI1QTAw
NDEyM0ZGIC8qIEhhc2hTZXQuaCAqLywKIAkJCQlBOEE0NzJCODE1MUE4MjVBMDA0MTIzRkYgLyog
SGFzaFRhYmxlLmNwcCAqLywKIAkJCQlBOEE0NzJCOTE1MUE4MjVBMDA0MTIzRkYgLyogSGFzaFRh
YmxlLmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTYzOTQ4KQorKysg
U291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5
LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgSGFzaEZ1bmN0aW9ucy5oCiAgICAgSGFzaEl0ZXJh
dG9ycy5oCiAgICAgSGFzaE1hcC5oCisgICAgSGFzaE1ldGhvZC5oCiAgICAgSGFzaFNldC5oCiAg
ICAgSGFzaFRhYmxlLmgKICAgICBIYXNoVHJhaXRzLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hh
c2hNZXRob2QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoTWV0aG9kLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoTWV0aG9kLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEhhc2hNZXRob2RfaAorI2RlZmluZSBIYXNoTWV0aG9kX2gKKworI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSGFzaE1ldGhvZCB7CisgICAgc2l6ZV90IG9wZXJhdG9yKCko
Y29uc3QgVCYgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuaGFzaCgp
OworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Okhhc2hNZXRo
b2Q7CisKKyNlbmRpZiAvLyBIYXNoTWV0aG9kX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224020</attachid>
            <date>2014-02-12 15:57:24 -0800</date>
            <delta_ts>2014-02-12 17:08:27 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>74366</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzOTk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNSBA
QAorMjAxNC0wMi0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEhvaXN0IGFuZCBjb21iaW5lIGFycmF5IGJvdW5kcyBjaGVja3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTQzMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGRzIGEgcGhhc2Ug
Zm9yIHJlYXNvbmluZyBhYm91dCBvdmVyZmxvdyBjaGVja3MgYW5kIGFycmF5IGJvdW5kcyBjaGVj
a3MuIEl0IHVzZXMKKyAgICAgICAgdGhlIGZhY3QgdGhhdCBjaGVja2VkIGFyaXRobWV0aWMgZG9l
c24ndCBoYXZlIHdyYXAtYXJvdW5kIHRvIGNvbnNvbGlkYXRlIG11bHRpcGxlIGFycmF5CisgICAg
ICAgIGJvdW5kcyBjaGVja3MuIEl0J3MgYmxvY2stbG9jYWwsIGFuZCByZW1vdmVzIGJvdGggb3Zl
cmZsb3cgY2hlY2tzIGFuZCBib3VuZHMgY2hlY2tzIGluCisgICAgICAgIG9uZSBnby4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgYWxzbyBpbXByb3ZlcyByZWFzb25pbmcgYWJvdXQgY29tbXV0YXRp
dmUgb3BlcmF0aW9ucywgYW5kIENTRSBiZXR3ZWVuCisgICAgICAgIENoZWNrT3ZlcmZsb3cgYW5k
IFVuY2hlY2tlZCBhcml0aG1ldGljLgorICAgICAgICAKKyAgICAgICAgVGhpcyBzdHJhbmdlbHkg
dW5jb3ZlcmVkIGEgREZHIGJhY2tlbmQgYnVnIHdoZXJlIHdlIHdlcmUgdHJ5aW5nIHRvIGV4dHJh
Y3QgYW4gaW50MzIKKyAgICAgICAgZnJvbSBhIGNvbnN0YW50IGV2ZW4gd2hlbiB0aGF0IGNvbnN0
YW50IHdhcyBqdXN0IHNpbXBseSBhIG51bWJlci4gSSBmaXhlZCB0aGF0IGJ1Zy4KKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3Rz
KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RWYWx1ZTo6c2V0KToKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmlj
YXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHQXJpdGhNb2RlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6c3Vic3VtZXMpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyk6
CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQ
aGFzZTo6cHVyZUNTRSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmludDMyVG9Eb3Vi
bGVDU0UpOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwZXJmb3JtTm9kZUNTRSk6Cisg
ICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVy
aXplKToKKyAgICAgICAgKiBkZmcvREZHRWRnZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RWRn
ZTo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0VkZ2UuaDoKKyAgICAgICAgKEpTQzo6REZHOjpF
ZGdlOjpzYW5pdGl6ZWQpOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2U6Omhhc2gpOgorICAgICAg
ICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjp2YWx1ZU9mSW50MzJDb25zdGFudCk6CisgICAgICAgICogZGZnL0RGR0luc2Vy
dGlvblNldC5oOgorICAgICAgICAoSlNDOjpERkc6Okluc2VydGlvblNldDo6aW5zZXJ0Q29uc3Rh
bnQpOgorICAgICAgICAqIGRmZy9ERkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6SW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZTo6SW50ZWdl
ckNoZWNrSG9pc3RpbmdQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6SW50ZWdlckNoZWNrSG9p
c3RpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpJbnRlZ2VyQ2hlY2tIb2lzdGlu
Z1BoYXNlOjpoYW5kbGVCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6SW50ZWdlckNoZWNrSG9p
c3RpbmdQaGFzZTo6cmFuZ2VLZXlBbmRBZGRlbmQpOgorICAgICAgICAoSlNDOjpERkc6OkludGVn
ZXJDaGVja0hvaXN0aW5nUGhhc2U6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpERkc6OkludGVn
ZXJDaGVja0hvaXN0aW5nUGhhc2U6Omluc2VydEFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6SW50
ZWdlckNoZWNrSG9pc3RpbmdQaGFzZTo6aW5zZXJ0TXVzdEFkZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6cGVyZm9ybUludGVnZXJDaGVja0hvaXN0aW5nKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdl
ckNoZWNrSG9pc3RpbmdQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OndpbGxIYXZlQ29kZUdlbk9yT1NSKToKKyAgICAgICAg
KiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbCk6CisgICAgICAgICogZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVBZGQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3RyZW5ndGhSZWR1
Y3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RyZW5ndGhSZWR1Y3Rpb25QaGFz
ZTo6aGFuZGxlTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RyZW5ndGhSZWR1Y3Rpb25QaGFz
ZTo6aGFuZGxlQ29tbXV0YXRpdml0eSk6CisgICAgICAgICogZGZnL0RGR1R5cGVDaGVja0hvaXN0
aW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6
OmlkZW50aWZ5UmVkdW5kYW50U3RydWN0dXJlQ2hlY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpU
eXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjppZGVudGlmeVJlZHVuZGFudEFycmF5Q2hlY2tzKToKKyAg
ICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5D
b21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAo
SlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTm9kZSk6CisgICAgICAgICoganNjLmNw
cDoKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoZnVu
Y3Rpb25GYWxzZSk6CisgICAgICAgICogcnVudGltZS9JZGVudGlmaWVyLmg6CisgICAgICAgICog
cnVudGltZS9JbnRyaW5zaWMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAg
ICAgICogdGVzdHMvc3RyZXNzL2dldC1ieS1pZC11bnR5cGVkLmpzOiBBZGRlZC4KKyAgICAgICAg
KGZvbyk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2ludmVydGVkLWFkZGl0aXZlLXN1YnN1bXB0
aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3Jl
ZHVuZGFudC1hZGQtb3ZlcmZsb3ctY2hlY2tzLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6Cisg
ICAgICAgICogdGVzdHMvc3RyZXNzL3JlZHVuZGFudC1hcnJheS1ib3VuZHMtY2hlY2tzLWFkZGl0
aW9uLXNraXAtZmlyc3QuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGFycmF5
Y21wKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvcmVkdW5kYW50LWFycmF5LWJvdW5kcy1jaGVj
a3MtYWRkaXRpb24uanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGFycmF5Y21w
KToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvcmVkdW5kYW50LWFycmF5LWJvdW5kcy1jaGVja3Mt
dW5jaGVja2VkLWFkZGl0aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChh
cnJheWNtcCk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3JlZHVuZGFudC1hcnJheS1ib3VuZHMt
Y2hlY2tzLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChhcnJheWNtcCk6Cisg
ICAgICAgICogdGVzdHMvc3RyZXNzL3RyaWNreS1hcnJheS1ib3VuZHMtY2hlY2tzLmpzOiBBZGRl
ZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChhcnJheWNtcCk6CisKIDIwMTQtMDItMTIgIEpv
c2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVj
dG9yOiBDbGVhbnVwIEphdmFTY3JpcHRDb3JlL2luc3BlY3RvcgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTYzOTQ4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNiArMTQwLDcgQEAg
c2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHR3JhcGguY3BwCiAgICAgZGZn
L0RGR0dyYXBoU2FmZXBvaW50LmNwcAogICAgIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5j
cHAKKyAgICBkZmcvREZHSW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKICAgICBkZmcvREZH
SW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAKICAgICBkZmcvREZHSklUQ29kZS5j
cHAKICAgICBkZmcvREZHSklUQ29tcGlsZXIuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTYzOTQ4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTMxMCw5ICsz
MTAsMTEgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0lubGluZUNhY2hlV3JhcHBlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAgXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5o
IFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDE2Mzk0
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzcsNiArMjM3LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwog
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZW9wdGltaXphdGlv
blJldHJ5Q291bnQoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvblRyYW5zZmVyQXJyYXlCdWZmZXIoRXhlY1N0YXRlKik7CiBzdGF0aWMgTk9f
UkVUVVJOX1dJVEhfVkFMVUUgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblF1
aXQoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkZhbHNlKEV4ZWNTdGF0ZSopOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQogc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRTYW1wbGluZ0ZsYWdz
KEV4ZWNTdGF0ZSopOwpAQCAtMzcwLDYgKzM3MSw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgYWRk
RnVuY3Rpb24odm0sICJnZXRFbGVtZW50IiwgZnVuY3Rpb25HZXRFbGVtZW50LCAxKTsKICAgICAg
ICAgYWRkRnVuY3Rpb24odm0sICJzZXRFbGVtZW50Um9vdCIsIGZ1bmN0aW9uU2V0RWxlbWVudFJv
b3QsIDIpOwogICAgICAgICAKKyAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIHRo
aXMsIElkZW50aWZpZXIoJnZtLCAiREZHVHJ1ZSIpLCAwLCBmdW5jdGlvbkZhbHNlLCBERkdUcnVl
LCBEb250RW51bSB8IEpTQzo6RnVuY3Rpb24pOworICAgICAgICAKICAgICAgICAgSlNBcnJheSog
YXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbEV4ZWMoKSwgMCk7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgKytpKQogICAgICAgICAgICAg
YXJyYXktPnB1dERpcmVjdEluZGV4KGdsb2JhbEV4ZWMoKSwgaSwganNTdHJpbmcoZ2xvYmFsRXhl
YygpLCBhcmd1bWVudHNbaV0pKTsKQEAgLTcxOSw2ICs3MjIsMTEgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblF1aQogI2VuZGlmCiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25GYWxzZShFeGVjU3RhdGUqKQoreworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7Cit9CisKIC8vIFVzZSBTRUggZm9yIFJlbGVh
c2UgYnVpbGRzIG9ubHkgdG8gZ2V0IHJpZCBvZiB0aGUgY3Jhc2ggcmVwb3J0IGRpYWxvZwogLy8g
KGx1Y2tpbHkgdGhlIHNhbWUgdGVzdHMgZmFpbCBpbiBSZWxlYXNlIGFuZCBEZWJ1ZyBidWlsZHMg
c28gZmFyKS4gTmVlZCB0bwogLy8gYmUgaW4gYSBzZXBhcmF0ZSBtYWluIGZ1bmN0aW9uIGJlY2F1
c2UgdGhlIGpzY21haW4gZnVuY3Rpb24gcmVxdWlyZXMgb2JqZWN0CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE2Mzk0OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTM5NCw2ICszOTQsNyBAQAogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZGZnXERGR0dyYXBoLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdHcmFwaFNhZmVwb2ludC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZGZnXERGR0ludGVnZXJDaGVja0hvaXN0aW5nUGhhc2UuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhh
c2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0pJVENvZGUuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0pJVENvbXBpbGVyLmNwcCIg
Lz4KQEAgLTkzNSw2ICs5MzYsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R0dyYXBoU2FmZXBvaW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
SW5QbGFjZUFic3RyYWN0U3RhdGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdJbnNlcnRpb25TZXQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0pJVENvZGUuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdKSVRDb21waWxlci5oIiAvPgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2Mzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTAsNiArMjEwLDggQEAKIAkJMEYyRkNDRkQxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1Nj
YW5uYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyRkNDRjYxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NjYW5uYWJsZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkZDQ0ZFMThBNjAwNzAwMDFB
MjdGOCAvKiBERkdUaHJlYWREYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkZDQ0Y3MThBNjAwNzAwMDFBMjdGOCAvKiBERkdUaHJlYWREYXRh
LmNwcCAqLzsgfTsKIAkJMEYyRkNDRkYxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkZDQ0Y4
MThBNjAwNzAwMDFBMjdGOCAvKiBERkdUaHJlYWREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYzMDBCN0IxOEFCMUIxNDAwQTZENzJFIC8q
IERGR0ludGVnZXJDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMDBCNzkxOEFCMUIxNDAwQTZENzJFIC8qIERGR0lu
dGVnZXJDaGVja0hvaXN0aW5nUGhhc2UuY3BwICovOyB9OworCQkwRjMwMEI3QzE4QUIxQjE0MDBB
NkQ3MkUgLyogREZHSW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMDBCN0ExOEFCMUIxNDAwQTZENzJFIC8q
IERGR0ludGVnZXJDaGVja0hvaXN0aW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjMwMEI3ODE4QUIwNTExMDBBNkQ3MkUgLyogREZH
Tm9kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzMDBCNzcxOEFCMDUxMTAwQTZENzJFIC8qIERGR05vZGVPcmlnaW4uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjM0QjE0OTE2RDQyMDEw
MDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjM0QjE0NzE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5j
cHAgKi87IH07CiAJCTBGMzRCMTRBMTZENDIwMTMwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0QjE0ODE2RDQy
MDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0xNjY1LDYgKzE2NjcsOCBAQAogCQkwRjJGQ0NGNjE4QTYw
MDcwMDAxQTI3RjggLyogREZHU2Nhbm5hYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1NjYW5uYWJsZS5oOyBwYXRoID0gZGZnL0RGR1NjYW5uYWJsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJGQ0NGNzE4QTYwMDcwMDAxQTI3RjggLyogREZHVGhy
ZWFkRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdUaHJl
YWREYXRhLmNwcDsgcGF0aCA9IGRmZy9ERkdUaHJlYWREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYyRkNDRjgxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVGhyZWFkRGF0YS5oOyBwYXRo
ID0gZGZnL0RGR1RocmVhZERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYz
MDBCNzkxOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0hvaXN0aW5nUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSW50ZWdlckNoZWNrSG9p
c3RpbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHSW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzAwQjdBMThBQjFCMTQwMEE2RDcy
RSAvKiBERkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0ludGVnZXJDaGVja0hvaXN0aW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9E
RkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMzAwQjc3MThBQjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05vZGVPcmlnaW4uaDsgcGF0aCA9IGRmZy9ERkdO
b2RlT3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTQ3MTZENDIw
MEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR1VzZUtpbmQuY3BwOyBwYXRoID0gZGZnL0RGR1VzZUtpbmQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM0QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZH
VXNlS2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdVc2VLaW5kLmg7
IHBhdGggPSBkZmcvREZHVXNlS2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NDIzMCw2ICs0MjM0LDggQEAKIAkJCQlBNzA0RDkwMDE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuY3BwICovLAogCQkJCUE3MDREOTAxMTdBMEJBQTgwMDZCQTU1NCAv
KiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oICovLAogCQkJCTBGMkJEQzFGMTUxRTgwMzgwMENE
ODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLywKKwkJCQkwRjMwMEI3OTE4QUIxQjE0MDBBNkQ3
MkUgLyogREZHSW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgKi8sCisJCQkJMEYzMDBCN0Ex
OEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0hvaXN0aW5nUGhhc2UuaCAqLywKIAkJ
CQkwRkM5N0YzNzE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rp
b25QaGFzZS5jcHAgKi8sCiAJCQkJMEZDOTdGMzgxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFs
aWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuaCAqLywKIAkJCQkwRkVBMEEyRjE3MEQ0MEJGMDBC
QjcyMkMgLyogREZHSklUQ29kZS5jcHAgKi8sCkBAIC01MjcxLDYgKzUyNzcsNyBAQAogCQkJCTBG
NDY4MENBMTRCQkIxNkMwMEJGRTI3MiAvKiBMTEludENvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY0NjgwRDMxNEJCRDE2NzAwQkZFMjcyIC8qIExMSW50RGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYzOEIwMTIxN0NGMDc4MzAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYzMDBCN0MxOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVj
a0hvaXN0aW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEEzMTRCQTdGOEQwMEJG
RTI3MiAvKiBMTEludEV4Y2VwdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MENCMTRC
QkIxNzIwMEJGRTI3MiAvKiBMTEludE9mZmxpbmVBc21Db25maWcuaCBpbiBIZWFkZXJzICovLAog
CQkJCUZFRDI4N0IyMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02MTgzLDYgKzYxOTAsNyBAQAogCQkJCUE3ODg1M0Y5MTc5NzI2MjkwMDE0NDBFNCAv
KiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNG
MTA3RUMzNzYwMDQyN0E0OCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTJBQzkyMkJCMThBMTYxODIwMDNDRTBGQiAvKiBGVExEV0FSRkRlYnVnTGluZUluZm8uY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEYzMDBCN0IxOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVn
ZXJDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkFDQ0YzREUxODVG
RTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDI5RDdENDBFRDIxMjgyMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ5MkYwRUQyMkQ3MDAwQjg5NjE5IC8qIEpJVC5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2Mzk0OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTc2Miw2ICsxNzYyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAgIGNh
c2UgUHJvZmlsZURpZENhbGw6CiAgICAgY2FzZSBQaGFudG9tOgorICAgIGNhc2UgSGFyZFBoYW50
b206CiAgICAgY2FzZSBDaGVjazoKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgogICAgIGNhc2Ug
Q2hlY2tUaWVyVXBJbkxvb3A6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RWYWx1ZS5jcHAJKHJldmlzaW9uIDE2Mzk0OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDEy
ICs2NiwxMiBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OnNldChHcmFwaCYgZ3JhcGgsIEpTCiAgICAg
ICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgbV9hcnJheU1v
ZGVzID0gMDsKICAgICB9Ci0gICAgICAgIAorICAgIAogICAgIG1fdHlwZSA9IHNwZWN1bGF0aW9u
RnJvbVZhbHVlKHZhbHVlKTsKICAgICBpZiAobV90eXBlID09IFNwZWNJbnQ1MkFzRG91YmxlKQog
ICAgICAgICBtX3R5cGUgPSBTcGVjSW50NTI7CiAgICAgbV92YWx1ZSA9IHZhbHVlOwotICAgICAg
ICAKKyAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTYzOTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzE3LDYgKzMxNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgICAgICAg
ICBjYXNlIEhhcmRQaGFudG9tOgogICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBjYXJl
IGFib3V0IHBoYW50b20gdXNlcywgc2luY2UgcGhhbnRvbSB1c2VzIGFyZSBhbGwgYWJvdXQKICAg
ICAgICAgICAgICAgICAgICAgLy8ganVzdCBrZWVwaW5nIHRoaW5ncyBhbGl2ZSBmb3IgT1NSIGV4
aXQuIElmIHNvbWV0aGluZyAtIGxpa2UgdGhlCiAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0
ZUFyZ3VtZW50cyAtIGlzIGp1c3QgYmVpbmcga2VwdCBhbGl2ZSwgdGhlbiB0aGlzIHRyYW5zZm9y
bWF0aW9uCkBAIC00MjgsNyArNDI5LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGNhc2UgUGhhbnRvbTogeworICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbToKKyAg
ICAgICAgICAgICAgICBjYXNlIEhhcmRQaGFudG9tOiB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IEl0J3MgaGlnaGx5IGxpa2VseSB0aGF0IHdlIHdpbGwgaGF2ZSBhIFBoYW50b20gcmVmZXJlbmNp
bmcgZWl0aGVyCiAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZUFyZ3VtZW50cywgb3IgYSBs
b2NhbCBvcCBmb3IgdGhlIGFyZ3VtZW50cyByZWdpc3Rlciwgb3IgYQogICAgICAgICAgICAgICAg
ICAgICAvLyBsb2NhbCBvcCBmb3IgYW4gYXJndW1lbnRzLWFsaWFzZWQgdmFyaWFibGUuIEluIGFu
eSBvZiB0aG9zZSBjYXNlcywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJp
dGhNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcml0
aE1vZGUuaAkocmV2aXNpb24gMTYzOTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcml0aE1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMzEgQEAgaW5saW5lIGJv
b2wgc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8oQXJpdAogICAgIHJldHVybiB0cnVlOwogfQogCitp
bmxpbmUgYm9vbCBzdWJzdW1lcyhBcml0aDo6TW9kZSBlYXJsaWVyLCBBcml0aDo6TW9kZSBsYXRl
cikKK3sKKyAgICBzd2l0Y2ggKGVhcmxpZXIpIHsKKyAgICBjYXNlIEFyaXRoOjpDaGVja092ZXJm
bG93OgorICAgICAgICBzd2l0Y2ggKGxhdGVyKSB7CisgICAgICAgIGNhc2UgQXJpdGg6OlVuY2hl
Y2tlZDoKKyAgICAgICAgY2FzZSBBcml0aDo6Q2hlY2tPdmVyZmxvdzoKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgY2FzZSBBcml0aDo6Q2hlY2tPdmVyZmxvd0FuZE5lZ2F0aXZlWmVybzoK
KyAgICAgICAgc3dpdGNoIChsYXRlcikgeworICAgICAgICBjYXNlIEFyaXRoOjpVbmNoZWNrZWQ6
CisgICAgICAgIGNhc2UgQXJpdGg6OkNoZWNrT3ZlcmZsb3c6CisgICAgICAgIGNhc2UgQXJpdGg6
OkNoZWNrT3ZlcmZsb3dBbmROZWdhdGl2ZVplcm86CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBlYXJsaWVyID09IGxhdGVyOworICAgIH0KK30K
KwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZp
c2lvbiAxNjM5NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2OCw2ICsxNjY4LDExIEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgICAgICAKKyAgICBjYXNlIERGR1RydWU6IHsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRPcGVyYW5kKSwgZ2V0SlNDb25zdGFudEZvclZhbHVlKGpzQm9vbGVhbih0cnVl
KSwgMCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAogICAgIGRlZmF1
bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTYzOTQ4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw5
ICsxMjcsOSBAQCBwcml2YXRlOgogCiAgICAgTm9kZSogcHVyZUNTRShOb2RlKiBub2RlKQogICAg
IHsKLSAgICAgICAgRWRnZSBjaGlsZDEgPSBub2RlLT5jaGlsZDEoKTsKLSAgICAgICAgRWRnZSBj
aGlsZDIgPSBub2RlLT5jaGlsZDIoKTsKLSAgICAgICAgRWRnZSBjaGlsZDMgPSBub2RlLT5jaGls
ZDMoKTsKKyAgICAgICAgRWRnZSBjaGlsZDEgPSBub2RlLT5jaGlsZDEoKS5zYW5pdGl6ZWQoKTsK
KyAgICAgICAgRWRnZSBjaGlsZDIgPSBub2RlLT5jaGlsZDIoKS5zYW5pdGl6ZWQoKTsKKyAgICAg
ICAgRWRnZSBjaGlsZDMgPSBub2RlLT5jaGlsZDMoKS5zYW5pdGl6ZWQoKTsKICAgICAgICAgCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7CiAg
ICAgICAgICAgICBOb2RlKiBvdGhlck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CkBAIC0x
MzksMjQgKzEzOSwxOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0g
b3RoZXJOb2RlLT5vcCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAobm9kZS0+aGFzQXJpdGhNb2RlKCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+YXJpdGhNb2RlKCkgIT0gb3RoZXJOb2RlLT5hcml0aE1vZGUoKSkKLSAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIEVkZ2Ugb3RoZXJDaGlsZCA9IG90aGVyTm9kZS0+Y2hpbGQxKCk7CisgICAgICAg
ICAgICBFZGdlIG90aGVyQ2hpbGQgPSBvdGhlck5vZGUtPmNoaWxkMSgpLnNhbml0aXplZCgpOwog
ICAgICAgICAgICAgaWYgKCFvdGhlckNoaWxkKQogICAgICAgICAgICAgICAgIHJldHVybiBvdGhl
ck5vZGU7CiAgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCAhPSBjaGlsZDEpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG90aGVyQ2hpbGQgPSBv
dGhlck5vZGUtPmNoaWxkMigpOworICAgICAgICAgICAgb3RoZXJDaGlsZCA9IG90aGVyTm9kZS0+
Y2hpbGQyKCkuc2FuaXRpemVkKCk7CiAgICAgICAgICAgICBpZiAoIW90aGVyQ2hpbGQpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG90aGVyTm9kZTsKICAgICAgICAgICAgIGlmIChvdGhlckNoaWxk
ICE9IGNoaWxkMikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgb3RoZXJDaGlsZCA9IG90aGVyTm9kZS0+Y2hpbGQzKCk7CisgICAgICAgICAgICBv
dGhlckNoaWxkID0gb3RoZXJOb2RlLT5jaGlsZDMoKS5zYW5pdGl6ZWQoKTsKICAgICAgICAgICAg
IGlmICghb3RoZXJDaGlsZCkKICAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwogICAg
ICAgICAgICAgaWYgKG90aGVyQ2hpbGQgIT0gY2hpbGQzKQpAQCAtMTc1LDcgKzE3MCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICBzd2l0Y2ggKG90
aGVyTm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgotICAgICAg
ICAgICAgICAgIGlmIChvdGhlck5vZGUtPmNoaWxkMSgpID09IG5vZGUtPmNoaWxkMSgpKQorICAg
ICAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPmNoaWxkMSgpLnNhbml0aXplZCgpID09IG5vZGUt
PmNoaWxkMSgpLnNhbml0aXplZCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXJO
b2RlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTEw
OTUsMTIgKzEwOTAsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEJpdFJTaGlmdDoKICAgICAg
ICAgY2FzZSBCaXRMU2hpZnQ6CiAgICAgICAgIGNhc2UgQml0VVJTaGlmdDoKLSAgICAgICAgY2Fz
ZSBBcml0aEFkZDoKLSAgICAgICAgY2FzZSBBcml0aFN1YjoKLSAgICAgICAgY2FzZSBBcml0aE5l
Z2F0ZToKLSAgICAgICAgY2FzZSBBcml0aE11bDoKLSAgICAgICAgY2FzZSBBcml0aE1vZDoKLSAg
ICAgICAgY2FzZSBBcml0aERpdjoKICAgICAgICAgY2FzZSBBcml0aEFiczoKICAgICAgICAgY2Fz
ZSBBcml0aE1pbjoKICAgICAgICAgY2FzZSBBcml0aE1heDoKQEAgLTExMTUsNyArMTEwNCw2IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgSXNTdHJpbmc6CiAgICAgICAgIGNhc2UgSXNPYmplY3Q6
CiAgICAgICAgIGNhc2UgSXNGdW5jdGlvbjoKLSAgICAgICAgY2FzZSBEb3VibGVBc0ludDMyOgog
ICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6CiAgICAgICAgIGNhc2UgU2tpcFRvcFNjb3BlOgogICAg
ICAgICBjYXNlIFNraXBTY29wZToKQEAgLTExMzIsNiArMTEyMCwyOCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgc2V0UmVwbGFjZW1lbnQocHVyZUNTRShub2RlKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBjYXNlIEFy
aXRoU3ViOgorICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOgorICAgICAgICBjYXNlIEFyaXRoTXVs
OgorICAgICAgICBjYXNlIEFyaXRoRGl2OgorICAgICAgICBjYXNlIEFyaXRoTW9kOgorICAgICAg
ICBjYXNlIFVJbnQzMlRvTnVtYmVyOgorICAgICAgICBjYXNlIERvdWJsZUFzSW50MzI6IHsKKyAg
ICAgICAgICAgIGlmIChjc2VNb2RlID09IFN0b3JlRWxpbWluYXRpb24pCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBwdXJlQ1NFKG5vZGUpOwor
ICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBpZiAoIXN1YnN1bWVzKGNhbmRpZGF0ZS0+YXJpdGhNb2RlKCksIG5vZGUtPmFyaXRo
TW9kZSgpKSkgeworICAgICAgICAgICAgICAgIGlmICghc3Vic3VtZXMobm9kZS0+YXJpdGhNb2Rl
KCksIGNhbmRpZGF0ZS0+YXJpdGhNb2RlKCkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYW5kaWRhdGUtPnNldEFyaXRoTW9kZShub2RlLT5hcml0aE1vZGUo
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChjYW5kaWRhdGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEludDMyVG9Eb3VibGU6CiAgICAgICAgICAgICBpZiAoY3NlTW9kZSA9PSBTdG9yZUVsaW1p
bmF0aW9uKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTQwNyw2ICsxNDE3LDkgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFBoYW50b206CiAgICAgICAgICAgICAv
LyBGSVhNRTogd2Ugb3VnaHQgdG8gcmVtb3ZlIFBoYW50b20ncyB0aGF0IGhhdmUgbm8gY2hpbGRy
ZW4uCisgICAgICAgICAgICAvLyBOQi4gSXQgd291bGQgYmUgaW5jb3JyZWN0IHRvIGRvIHRoaXMg
Zm9yIEhhcmRQaGFudG9tLiBJbiBmYWN0LCB0aGUgd2hvbGUgcG9pbnQKKyAgICAgICAgICAgIC8v
IG9mIEhhcmRQaGFudG9tIGlzIHRoYXQgd2UgKmRvbid0KiBkbyB0aGlzIGZvciBIYXJkUGhhbnRv
bXMsIHNpbmNlIHRoZXkgc2lnbmlmeQorICAgICAgICAgICAgLy8gYSBtb3JlIHN0cmljdCBraW5k
IG9mIGxpdmVuZXNzIHRoYW4gdGhlIFBoYW50b20gYnl0ZWNvZGUgbGl2ZW5lc3MuCiAgICAgICAg
ICAgICBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKG5vZGUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNjM5NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsNyBAQCB2
b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBXZWFrSlND
b25zdGFudDoKICAgICBjYXNlIElkZW50aXR5OgogICAgIGNhc2UgUGhhbnRvbToKKyAgICBjYXNl
IEhhcmRQaGFudG9tOgogICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2ZpbGVXaWxs
Q2FsbDoKICAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdFZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0VkZ2UuY3BwCShyZXZpc2lvbiAxNjM5NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0VkZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMiArMzYsMTIgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIEVkZ2U6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKIHsKLSAgICBpZiAodXNlS2luZCgpICE9IFVudHlwZWRVc2UpIHsKKyAg
ICBpZiAodXNlS2luZFVuY2hlY2tlZCgpICE9IFVudHlwZWRVc2UpIHsKICAgICAgICAgaWYgKG5l
ZWRzQ2hlY2soKSkKICAgICAgICAgICAgIG91dC5wcmludCgiQ2hlY2s6Iik7CiAgICAgICAgIG91
dC5wcmludCh1c2VLaW5kKCksICI6Iik7CiAgICAgfQotICAgIGlmIChkb2VzS2lsbCgpKQorICAg
IGlmIChERkc6OmRvZXNLaWxsKGtpbGxTdGF0dXNVbmNoZWNrZWQoKSkpCiAgICAgICAgIG91dC5w
cmludCgiS2lsbDoiKTsKICAgICBvdXQucHJpbnQobm9kZSgpKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRWRnZS5oCShyZXZpc2lvbiAxNjM5NDgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDYgKzE1MywxNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBkb2VzTm90S2lsbCgpIGNvbnN0IHsgcmV0dXJuICFkb2VzS2ls
bCgpOyB9CiAgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICEhbm9kZSgpOyB9
CisKKyAgICBFZGdlIHNhbml0aXplZCgpIGNvbnN0CisgICAgeworICAgICAgICBFZGdlIHJlc3Vs
dCA9ICp0aGlzOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHJlc3VsdC5tX2VuY29kZWRX
b3JkID0gbWFrZVdvcmQobm9kZSgpLCB1c2VLaW5kVW5jaGVja2VkKCksIE5lZWRzQ2hlY2ssIERv
ZXNOb3RLaWxsKTsKKyNlbHNlCisgICAgICAgIHJlc3VsdC5tX2VuY29kZWRXb3JkID0gbWFrZVdv
cmQodXNlS2luZFVuY2hlY2tlZCgpLCBOZWVkc0NoZWNrLCBEb2VzTm90S2lsbCk7CisjZW5kaWYK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgCiAgICAgdHlwZWRlZiB2b2lkKiBF
ZGdlOjoqVW5zcGVjaWZpZWRCb29sVHlwZTsKICAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xU
eXBlKigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlw
ZSo+KGlzU2V0KCkpOyB9CkBAIC0xNzMsNiArMTg0LDE1IEBAIHB1YmxpYzoKICAgICB9CiAgICAg
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0CisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHJldHVybiBJ
bnRIYXNoPHVpbnRwdHJfdD46Omhhc2gobV9lbmNvZGVkV29yZCk7CisjZWxzZQorICAgICAgICBy
ZXR1cm4gUHRySGFzaDxOb2RlKj46Omhhc2gobV9ub2RlKSArIG1fZW5jb2RlZFdvcmQ7CisjZW5k
aWYKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFkamFjZW5jeUxpc3Q7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlz
aW9uIDE2Mzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk0MSw2ICs5NDEsNyBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIERvdWJsZUFzSW50MzI6CiAgICAgICAgIGNhc2UgSW50MzJUb0RvdWJsZToKICAgICAgICAg
Y2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAgIGNhc2UgSGFyZFBoYW50b206IC8vIEhhcmRQaGFu
dG9tIHdvdWxkIGJlIHRyaXZpYWwgdG8gaGFuZGxlIGJ1dCBhbnl3YXkgd2UgYXNzZXJ0IHRoYXQg
d2Ugd29uJ3Qgc2VlIGl0IGhlcmUgeWV0LgogICAgICAgICAgICAgLy8gVGhlc2UgYXJlIGp1c3Qg
bm9kZXMgdGhhdCB3ZSBkb24ndCBjdXJyZW50bHkgZXhwZWN0IHRvIHNlZSBkdXJpbmcgZml4dXAu
CiAgICAgICAgICAgICAvLyBJZiB3ZSBldmVyIHdhbnRlZCB0byBpbnNlcnQgdGhlbSBwcmlvciB0
byBmaXh1cCwgdGhlbiB3ZSBqdXN0IGhhdmUgdG8gY3JlYXRlCiAgICAgICAgICAgICAvLyBmaXh1
cCBydWxlcyBmb3IgdGhlbS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJ
KHJldmlzaW9uIDE2Mzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAkod29ya2luZyBjb3B5KQpAQCAtMzYxLDcgKzM2MSwxMyBAQCBwdWJsaWM6CiAgICAgfQogICAg
IGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlKS5hc0ludDMyKCk7CisgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5p
c0ludDMyKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlZhbHVlIGlzbid0IGludDMyOiAiLCB2
YWx1ZSwgIlxuIik7CisgICAgICAgICAgICBkdW1wKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZS5hc0lu
dDMyKCk7CiAgICAgfQogICAgIGRvdWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoTm9kZSogbm9k
ZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9u
U2V0LmgJKHJldmlzaW9uIDE2Mzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgcmV0dXJuIGluc2VydChJbnNlcnRpb24oaW5kZXgsIGVsZW1lbnQpKTsK
ICAgICB9Ci0KKyAgICAKICNkZWZpbmUgREZHX0RFRklORV9JTlNFUlRfTk9ERSh0ZW1wbGF0ZVBy
ZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFt
cywgdmFsdWVBcmdzKSBcCiAgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3Qg
Tm9kZSogaW5zZXJ0Tm9kZShzaXplX3QgaW5kZXgsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQ
YXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAogICAgIHsgXApAQCAtNjUsNiArNjUsMjAgQEAgcHVi
bGljOgogICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0lOU0VS
VF9OT0RFKQogI3VuZGVmIERGR19ERUZJTkVfSU5TRVJUX05PREUKICAgICAKKyAgICBOb2RlKiBp
bnNlcnRDb25zdGFudChzaXplX3QgaW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY29uc3RhbnRSZWcgPQorICAgICAgICAgICAg
bV9ncmFwaC5jb25zdGFudFJlZ2lzdGVyRm9yQ29uc3RhbnQodmFsdWUpOworICAgICAgICByZXR1
cm4gaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgIGluZGV4LCBzcGVjdWxhdGlvbkZyb21WYWx1ZSh2
YWx1ZSksIEpTQ29uc3RhbnQsIG9yaWdpbiwKKyAgICAgICAgICAgIE9wSW5mbyhjb25zdGFudFJl
ZykpOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBpbnNlcnRDb25zdGFudChzaXplX3QgaW5kZXgs
IENvZGVPcmlnaW4gb3JpZ2luLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGluc2VydENvbnN0YW50KGluZGV4LCBOb2RlT3JpZ2luKG9yaWdpbiksIHZhbHVlKTsKKyAgICB9
CisKICAgICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCiAgICAgewogICAgICAgICBl
eGVjdXRlSW5zZXJ0aW9ucygqYmxvY2ssIG1faW5zZXJ0aW9ucyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJDaGVja0hvaXN0aW5nUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlckNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lu
dGVnZXJDaGVja0hvaXN0aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDA1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHSW50
ZWdlckNoZWNrSG9pc3RpbmdQaGFzZS5oIgorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNs
dWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUg
IkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiREZHVmFyaWFibGVB
Y2Nlc3NEYXRhRHVtcC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlIDx1bm9y
ZGVyZWRfbWFwPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWV0aG9kLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworbmFtZXNwYWNlIHsKKworc3RhdGljIGNvbnN0IGJvb2wgdmVy
Ym9zZSA9IGZhbHNlOworCitlbnVtIFJhbmdlS2luZCB7CisgICAgSW52YWxpZFJhbmdlS2luZCwK
KyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHdlIGRpZCBBcml0aEFkZCB3aXRoIENoZWNrT3ZlcmZs
b3cuCisgICAgQWRkaXRpb24sCisgICAgCisgICAgLy8gVGhpcyBtZWFucyB3ZSBkaWQgQ2hlY2tJ
bkJvdW5kcyBvbiBzb21lIGxlbmd0aC4KKyAgICBBcnJheUJvdW5kcworfTsKKworc3RydWN0IFJh
bmdlS2V5IHsKKyAgICBSYW5nZUtleSgpCisgICAgICAgIDogbV9raW5kKEludmFsaWRSYW5nZUtp
bmQpCisgICAgICAgICwgbV9rZXkobnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBSYW5nZUtleSBhZGRpdGlvbihFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBSYW5nZUtl
eSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBBZGRpdGlvbjsKKyAgICAgICAgcmVz
dWx0Lm1fc291cmNlID0gZWRnZS5zYW5pdGl6ZWQoKTsKKyAgICAgICAgcmVzdWx0Lm1fa2V5ID0g
MDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFJhbmdl
S2V5IGFycmF5Qm91bmRzKEVkZ2UgZWRnZSwgTm9kZSoga2V5KQorICAgIHsKKyAgICAgICAgUmFu
Z2VLZXkgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gQXJyYXlCb3VuZHM7CisgICAg
ICAgIHJlc3VsdC5tX3NvdXJjZSA9IGVkZ2Uuc2FuaXRpemVkKCk7CisgICAgICAgIHJlc3VsdC5t
X2tleSA9IGtleTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gSW52YWxpZFJhbmdlS2luZDsg
fQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fa2luZCArIG1fc291cmNlLmhhc2goKSArIFB0ckhhc2g8Tm9kZSo+OjpoYXNoKG1fa2V5KTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJhbmdlS2V5JiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAg
ICAgICAgICAmJiBtX3NvdXJjZSA9PSBvdGhlci5tX3NvdXJjZQorICAgICAgICAgICAgJiYgbV9r
ZXkgPT0gb3RoZXIubV9rZXk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAg
Y2FzZSBJbnZhbGlkUmFuZ2VLaW5kOgorICAgICAgICAgICAgb3V0LnByaW50KCJJbnZhbGlkUmFu
Z2VLaW5kKCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWRkaXRpb246Cisg
ICAgICAgICAgICBvdXQucHJpbnQoIkFkZGl0aW9uKCIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQXJyYXlCb3VuZHM6CisgICAgICAgICAgICBvdXQucHJpbnQoIkFycmF5Qm91
bmRzKCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgb3V0LnByaW50
KG1fc291cmNlLCAiLCAiLCBtX2tleSwgIikiKTsKKyAgICB9CisgICAgCisgICAgUmFuZ2VLaW5k
IG1fa2luZDsKKyAgICBFZGdlIG1fc291cmNlOworICAgIE5vZGUqIG1fa2V5OworfTsKKworc3Ry
dWN0IFJhbmdlS2V5QW5kQWRkZW5kIHsKKyAgICBSYW5nZUtleUFuZEFkZGVuZCgpCisgICAgICAg
IDogbV9hZGRlbmQoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFJhbmdlS2V5QW5kQWRkZW5k
KFJhbmdlS2V5IGtleSwgaW50MzJfdCBhZGRlbmQpCisgICAgICAgIDogbV9rZXkoa2V5KQorICAg
ICAgICAsIG1fYWRkZW5kKGFkZGVuZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fa2V5ICYmICFtX2FkZGVuZDsgfQorICAgIAorICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnBy
aW50KG1fa2V5LCAiICsgIiwgbV9hZGRlbmQpOworICAgIH0KKyAgICAKKyAgICBSYW5nZUtleSBt
X2tleTsKKyAgICBpbnQzMl90IG1fYWRkZW5kOworfTsKKworc3RydWN0IFJhbmdlIHsKKyAgICBS
YW5nZSgpCisgICAgICAgIDogbV9taW5Cb3VuZCgwKQorICAgICAgICAsIG1fbWF4Qm91bmQoMCkK
KyAgICAgICAgLCBtX2NvdW50KDApCisgICAgICAgICwgbV9ob2lzdGVkKGZhbHNlKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAg
eworICAgICAgICBvdXQucHJpbnQoIigiLCBtX21pbkJvdW5kLCAiIEAiLCBtX21pbk9yaWdpbiwg
IikgLi4gKCIsIG1fbWF4Qm91bmQsICIgQCIsIG1fbWF4T3JpZ2luLCAiKSwgY291bnQgPSAiLCBt
X2NvdW50LCAiLCBob2lzdGVkID0gIiwgbV9ob2lzdGVkKTsKKyAgICB9CisgICAgCisgICAgaW50
MzJfdCBtX21pbkJvdW5kOworICAgIENvZGVPcmlnaW4gbV9taW5PcmlnaW47CisgICAgaW50MzJf
dCBtX21heEJvdW5kOworICAgIENvZGVPcmlnaW4gbV9tYXhPcmlnaW47CisgICAgdW5zaWduZWQg
bV9jb3VudDsgLy8gSWYgdGhpcyBpcyB6ZXJvIHRoZW4gdGhlIGJvdW5kcyB3b24ndCBuZWNlc3Nh
cmlseSBtYWtlIHNlbnNlLgorICAgIGJvb2wgbV9ob2lzdGVkOworfTsKKworfSAvLyBhbm9ueW1v
dXMgbmFtZXNwYWNlCisKK2NsYXNzIEludGVnZXJDaGVja0hvaXN0aW5nUGhhc2UgOiBwdWJsaWMg
UGhhc2UgeworcHVibGljOgorICAgIEludGVnZXJDaGVja0hvaXN0aW5nUGhhc2UoR3JhcGgmIGdy
YXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiaW50ZWdlciBjaGVjayBob2lzdGluZyIpCisg
ICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBi
b29sIHJ1bigpCisgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsK
KyAgICAgICAgCisgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9j
a3MoKTsgYmxvY2tJbmRleC0tOykKKyAgICAgICAgICAgIGhhbmRsZUJsb2NrKGJsb2NrSW5kZXgp
OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgdm9pZCBoYW5kbGVCbG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgeworICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAg
ICAgIGlmICghYmxvY2spCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBt
X21hcC5jbGVhcigpOworICAgICAgICAKKyAgICAgICAgLy8gRmlyc3Qgd2UgY29sbGVjdCBSYW5n
ZXMuIElmIG9wZXJhdGlvbnMgd2l0aGluIHRoZSByYW5nZSBoYXZlIGVub3VnaCByZWR1bmRhbmN5
LAorICAgICAgICAvLyB3ZSBob2lzdC4gQW5kIHRoZW4gd2UgcmVtb3ZlIGFkZGl0aW9ucyBhbmQg
Y2hlY2tzIHRoYXQgZmFsbCB3aXRoaW4gdGhlIG1heCByYW5nZS4KKyAgICAgICAgCisgICAgICAg
IGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsg
Kytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUlu
ZGV4KTsKKyAgICAgICAgICAgIFJhbmdlS2V5QW5kQWRkZW5kIGRhdGEgPSByYW5nZUtleUFuZEFk
ZGVuZChub2RlKTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRh
dGFMb2coIkZvciAiLCBub2RlLCAiOiAiLCBkYXRhLCAiXG4iKTsKKyAgICAgICAgICAgIGlmICgh
ZGF0YSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgUmFuZ2UmIHJhbmdlID0gbV9tYXBbZGF0YS5tX2tleV07CisgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgUmFuZ2U6ICIsIHJhbmdlLCAiXG4i
KTsKKyAgICAgICAgICAgIGlmIChyYW5nZS5tX2NvdW50KSB7CisgICAgICAgICAgICAgICAgaWYg
KGRhdGEubV9hZGRlbmQgPiByYW5nZS5tX21heEJvdW5kKSB7CisgICAgICAgICAgICAgICAgICAg
IHJhbmdlLm1fbWF4Qm91bmQgPSBkYXRhLm1fYWRkZW5kOworICAgICAgICAgICAgICAgICAgICBy
YW5nZS5tX21heE9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGRhdGEubV9hZGRlbmQgPCByYW5nZS5tX21pbkJvdW5kKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJhbmdlLm1fbWluQm91bmQgPSBkYXRhLm1fYWRkZW5kOworICAgICAgICAg
ICAgICAgICAgICByYW5nZS5tX21pbk9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJh
bmdlLm1fbWF4Qm91bmQgPSBkYXRhLm1fYWRkZW5kOworICAgICAgICAgICAgICAgIHJhbmdlLm1f
bWluQm91bmQgPSBkYXRhLm1fYWRkZW5kOworICAgICAgICAgICAgICAgIHJhbmdlLm1fbWluT3Jp
Z2luID0gbm9kZS0+b3JpZ2luLnNlbWFudGljOworICAgICAgICAgICAgICAgIHJhbmdlLm1fbWF4
T3JpZ2luID0gbm9kZS0+b3JpZ2luLnNlbWFudGljOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmFuZ2UubV9jb3VudCsrOworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAgIE5ldyByYW5nZTogIiwgcmFuZ2UsICJcbiIpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRl
eCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICBSYW5nZUtleUFuZEFkZGVuZCBk
YXRhID0gcmFuZ2VLZXlBbmRBZGRlbmQobm9kZSk7CisgICAgICAgICAgICBpZiAoIWRhdGEpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBSYW5nZSByYW5nZSA9IG1fbWFw
W2RhdGEubV9rZXldOworICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKGRhdGEubV9rZXksIHJhbmdl
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gRG8gdGhlIGhvaXN0aW5nLgorICAgICAgICAgICAgaWYgKCFyYW5nZS5tX2hvaXN0ZWQpIHsK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKGRhdGEubV9rZXkubV9raW5kKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSBBZGRpdGlvbjogeworICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2UubV9t
aW5Cb3VuZCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE11c3RBZGQoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBOb2RlT3JpZ2luKHJhbmdlLm1f
bWluT3JpZ2luLCBub2RlLT5vcmlnaW4uZm9yRXhpdCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YS5tX2tleS5tX3NvdXJjZSwgcmFuZ2UubV9taW5Cb3VuZCk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlLm1fbWF4Qm91bmQgPiAw
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRNdXN0QWRkKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgTm9kZU9yaWdpbihyYW5nZS5tX21heE9yaWdpbiwg
bm9kZS0+b3JpZ2luLmZvckV4aXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEu
bV9rZXkubV9zb3VyY2UsIHJhbmdlLm1fbWF4Qm91bmQpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEFycmF5Qm91bmRzOiB7CisgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIG1pbk5vZGU7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG1heE5v
ZGU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGEu
bV9rZXkubV9zb3VyY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbk5vZGUgPSAwOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbWF4Tm9kZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydENv
bnN0YW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgcmFuZ2UubV9t
YXhPcmlnaW4sIGpzTnVtYmVyKHJhbmdlLm1fbWF4Qm91bmQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbk5vZGUgPSBpbnNlcnRBZGQo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBOb2RlT3JpZ2luKHJhbmdl
Lm1fbWluT3JpZ2luLCBub2RlLT5vcmlnaW4uZm9yRXhpdCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YS5tX2tleS5tX3NvdXJjZSwgcmFuZ2UubV9taW5Cb3VuZCwgQXJpdGg6OlVu
Y2hlY2tlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXhOb2RlID0gaW5zZXJ0QWRkKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgTm9kZU9yaWdpbihyYW5nZS5t
X21heE9yaWdpbiwgbm9kZS0+b3JpZ2luLmZvckV4aXQpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEubV9rZXkubV9zb3VyY2UsIHJhbmdlLm1fbWF4Qm91bmQsIEFyaXRoOjpVbmNo
ZWNrZWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBpZiAobWluTm9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlSW5kZXgsIFNwZWNOb25lLCBDaGVja0luQm91bmRzLCBub2RlLT5vcmlnaW4sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRWRnZShtaW5Ob2RlLCBJbnQzMlVzZSksIEVkZ2UoZGF0YS5t
X2tleS5tX2tleSwgSW50MzJVc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2tJbkJvdW5kcywgbm9kZS0+b3JpZ2luLAor
ICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShtYXhOb2RlLCBJbnQzMlVzZSksIEVkZ2UoZGF0
YS5tX2tleS5tX2tleSwgSW50MzJVc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fY2hh
bmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgbV9tYXBbZGF0YS5tX2tleV0ubV9ob2lzdGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRG8g
dGhlIGVsaW1pbmF0aW9uLgorICAgICAgICAgICAgc3dpdGNoIChkYXRhLm1fa2V5Lm1fa2luZCkg
eworICAgICAgICAgICAgY2FzZSBBZGRpdGlvbjoKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRB
cml0aE1vZGUoQXJpdGg6OlVuY2hlY2tlZCk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGNhc2UgQXJyYXlCb3VuZHM6CisgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhh
bnRvbSgpOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2sp
OworICAgIH0KKyAgICAKKyAgICBSYW5nZUtleUFuZEFkZGVuZCByYW5nZUtleUFuZEFkZGVuZChO
b2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAg
IGNhc2UgQXJpdGhBZGQ6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcml0aE1vZGUoKSAhPSBB
cml0aDo6Q2hlY2tPdmVyZmxvdworICAgICAgICAgICAgICAgICYmIG5vZGUtPmFyaXRoTW9kZSgp
ICE9IEFyaXRoOjpDaGVja092ZXJmbG93QW5kTmVnYXRpdmVaZXJvKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmlzSW50MzJDb25zdGFudChub2RlLT5j
aGlsZDIoKS5ub2RlKCkpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0
dXJuIFJhbmdlS2V5QW5kQWRkZW5kKAorICAgICAgICAgICAgICAgIFJhbmdlS2V5OjphZGRpdGlv
bihub2RlLT5jaGlsZDEoKSksCisgICAgICAgICAgICAgICAgbV9ncmFwaC52YWx1ZU9mSW50MzJD
b25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsKKyAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6IHsKKyAgICAgICAgICAgIEVkZ2Ugc291
cmNlOworICAgICAgICAgICAgaW50MzJfdCBhZGRlbmQ7CisgICAgICAgICAgICBOb2RlKiBrZXkg
PSBub2RlLT5jaGlsZDIoKS5ub2RlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEVkZ2Ug
aW5kZXggPSBub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1f
Z3JhcGguaXNJbnQzMkNvbnN0YW50KGluZGV4Lm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBz
b3VyY2UgPSBFZGdlKCk7CisgICAgICAgICAgICAgICAgYWRkZW5kID0gbV9ncmFwaC52YWx1ZU9m
SW50MzJDb25zdGFudChpbmRleC5ub2RlKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmICgKKyAg
ICAgICAgICAgICAgICBpbmRleC0+b3AoKSA9PSBBcml0aEFkZAorICAgICAgICAgICAgICAgICYm
IGluZGV4LT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpCisgICAgICAgICAgICAgICAgJiYgbV9n
cmFwaC5pc0ludDMyQ29uc3RhbnQoaW5kZXgtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAg
ICAgICAgICBzb3VyY2UgPSBpbmRleC0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgYWRkZW5k
ID0gbV9ncmFwaC52YWx1ZU9mSW50MzJDb25zdGFudChpbmRleC0+Y2hpbGQyKCkubm9kZSgpKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc291cmNlID0gaW5kZXg7Cisg
ICAgICAgICAgICAgICAgYWRkZW5kID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgcmV0dXJuIFJhbmdlS2V5QW5kQWRkZW5kKFJhbmdlS2V5OjphcnJheUJvdW5k
cyhzb3VyY2UsIGtleSksIGFkZGVuZCk7CisgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICByZXR1cm4gUmFuZ2VLZXlBbmRBZGRlbmQoKTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBpc1ZhbGlkKGNvbnN0IFJhbmdlS2V5JiBrZXksIGNvbnN0IFJhbmdlJiByYW5nZSkKKyAgICB7
CisgICAgICAgIGlmIChyYW5nZS5tX2NvdW50IDwgMikKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoa2V5Lm1fa2luZCkgeworICAgICAgICBjYXNl
IEFycmF5Qm91bmRzOgorICAgICAgICAgICAgcmV0dXJuIChyYW5nZS5tX21heEJvdW5kIC0gcmFu
Z2UubV9taW5Cb3VuZCkgPj0gMDsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTm9kZSog
aW5zZXJ0QWRkKAorICAgICAgICB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2lu
LCBFZGdlIHNvdXJjZSwgaW50MzJfdCBhZGRlbmQsCisgICAgICAgIEFyaXRoOjpNb2RlIGFyaXRo
TW9kZSA9IEFyaXRoOjpDaGVja092ZXJmbG93KQorICAgIHsKKyAgICAgICAgaWYgKCFhZGRlbmQp
CisgICAgICAgICAgICByZXR1cm4gc291cmNlLm5vZGUoKTsKKyAgICAgICAgcmV0dXJuIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICBub2RlSW5kZXgsIHNvdXJjZS0+cHJl
ZGljdGlvbigpLCBBcml0aEFkZCwgb3JpZ2luLCBPcEluZm8oYXJpdGhNb2RlKSwKKyAgICAgICAg
ICAgIHNvdXJjZSwgRWRnZSgKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRD
b25zdGFudChub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoYWRkZW5kKSksCisgICAgICAgICAg
ICAgICAgc291cmNlLnVzZUtpbmQoKSkpOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBpbnNlcnRN
dXN0QWRkKAorICAgICAgICB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBF
ZGdlIHNvdXJjZSwgaW50MzJfdCBhZGRlbmQpCisgICAgeworICAgICAgICBOb2RlKiByZXN1bHQg
PSBpbnNlcnRBZGQobm9kZUluZGV4LCBvcmlnaW4sIHNvdXJjZSwgYWRkZW5kKTsKKyAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05v
bmUsIEhhcmRQaGFudG9tLCBvcmlnaW4sIEVkZ2UocmVzdWx0LCBVbnR5cGVkVXNlKSk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVy
ZWRfbWFwPFJhbmdlS2V5LCBSYW5nZSwgSGFzaE1ldGhvZDxSYW5nZUtleT4+IFJhbmdlTWFwOwor
ICAgIFJhbmdlTWFwIG1fbWFwOworICAgIAorICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNl
dDsKKyAgICBib29sIG1fY2hhbmdlZDsKK307CisgICAgCitib29sIHBlcmZvcm1JbnRlZ2VyQ2hl
Y2tIb2lzdGluZyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdS
ZWdpb24oIkRGRyBJbnRlZ2VyIENoZWNrIEhvaXN0aW5nIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1
blBoYXNlPEludGVnZXJDaGVja0hvaXN0aW5nUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlckNoZWNrSG9pc3RpbmdQaGFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlckNoZWNrSG9p
c3RpbmdQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdJbnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIERGR0ludGVnZXJDaGVja0hvaXN0aW5nUGhhc2VfaAorI2RlZmluZSBERkdJbnRlZ2VyQ2hl
Y2tIb2lzdGluZ1BoYXNlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBSZW1vdmVzIG92ZXJmbG93
IGNoZWNrcyBhbmQgb3V0LW9mLWJvdW5kcyBjaGVja3MgYnkgaG9pc3RpbmcgdGhlbS4KKworYm9v
bCBwZXJmb3JtSW50ZWdlckNoZWNrSG9pc3RpbmcoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdJ
bnRlZ2VyQ2hlY2tIb2lzdGluZ1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHJldmlzaW9uIDE2Mzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTk4LDYgKzExOTgsNyBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czoKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICBjYXNlIFBoYW50b206CisgICAgICAgIGNhc2UgSGFyZFBoYW50b206CiAg
ICAgICAgICAgICByZXR1cm4gY2hpbGQxKCkudXNlS2luZFVuY2hlY2tlZCgpICE9IFVudHlwZWRV
c2UgfHwgY2hpbGQyKCkudXNlS2luZFVuY2hlY2tlZCgpICE9IFVudHlwZWRVc2UgfHwgY2hpbGQz
KCkudXNlS2luZFVuY2hlY2tlZCgpICE9IFVudHlwZWRVc2U7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICByZXR1cm4gc2hvdWxkR2VuZXJhdGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE2Mzk0OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oWm9tYmllSGlu
dCwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oR2V0QXJndW1lbnQsIE5vZGVSZXN1bHRK
UyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQaGFudG9tLCBOb2RlTXVzdEdlbmVy
YXRlKSBcCisgICAgbWFjcm8oSGFyZFBoYW50b20sIE5vZGVNdXN0R2VuZXJhdGUpIC8qIExpa2Ug
UGhhbnRvbSwgYnV0IHdlIG5ldmVyIHJlbW92ZSBhbnkgb2YgaXRzIGNoaWxkcmVuLiAqLyBcCiAg
ICAgbWFjcm8oQ2hlY2ssIDApIC8qIFVzZWQgaWYgd2Ugd2FudCBqdXN0IGEgdHlwZSBjaGVjayBi
dXQgbm90IGxpdmVuZXNzLiBEQ0UgZWl0aGVycyBraWxscyB0aGlzIG9yIGNvbnZlcnRzIGl0IHRv
IFBoYW50b20uICovXAogICAgIG1hY3JvKFVwc2lsb24sIE5vZGVEb2VzTm90RXhpdCB8IE5vZGVS
ZWxldmFudFRvT1NSKSBcCiAgICAgbWFjcm8oUGhpLCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVs
ZXZhbnRUb09TUikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShy
ZXZpc2lvbiAxNjM5NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiREZHRmx1c2hMaXZl
bmVzc0FuYWx5c2lzUGhhc2UuaCIKICNpbmNsdWRlICJERkdGaXh1cFBoYXNlLmgiCiAjaW5jbHVk
ZSAiREZHR3JhcGhTYWZlcG9pbnQuaCIKKyNpbmNsdWRlICJERkdJbnRlZ2VyQ2hlY2tIb2lzdGlu
Z1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5o
IgogI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHTElDTVBoYXNlLmgi
CkBAIC0zMDAsOSArMzAxLDExIEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxl
SW5UaHIKICAgICAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7CiAgICAgICAgIHBlcmZv
cm1TU0FDb252ZXJzaW9uKGRmZyk7CiAgICAgICAgIHBlcmZvcm1TU0FMb3dlcmluZyhkZmcpOwor
ICAgICAgICBwZXJmb3JtQ1NFKGRmZyk7CiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lz
KGRmZyk7CiAgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKICAgICAgICAgcGVyZm9ybUxJQ00oZGZn
KTsKKyAgICAgICAgcGVyZm9ybUludGVnZXJDaGVja0hvaXN0aW5nKGRmZyk7CiAgICAgICAgIHBl
cmZvcm1DU0UoZGZnKTsKICAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZnKTsKICAg
ICAgICAgcGVyZm9ybUNGQShkZmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDE2Mzk0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDcsNyArNTA3LDggQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBJbnQ1MlRvVmFsdWU6CiAgICAgICAgIGNhc2UgSW50NTJUb0Rv
dWJsZToKICAgICAgICAgY2FzZSBDaGVja0luQm91bmRzOgotICAgICAgICBjYXNlIFZhbHVlVG9J
bnQzMjogeworICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICAgICAgY2FzZSBIYXJkUGhh
bnRvbTogewogICAgICAgICAgICAgLy8gVGhpcyBub2RlIHNob3VsZCBuZXZlciBiZSB2aXNpYmxl
IGF0IHRoaXMgc3RhZ2Ugb2YgY29tcGlsYXRpb24uIEl0IGlzCiAgICAgICAgICAgICAvLyBpbnNl
cnRlZCBieSBmaXh1cCgpLCB3aGljaCBmb2xsb3dzIHRoaXMgcGhhc2UuCiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE2Mzk0OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjIsNiArMTIyLDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAog
ICAgIGNhc2UgWm9tYmllSGludDoKICAgICBjYXNlIEdldEFyZ3VtZW50OgogICAgIGNhc2UgUGhh
bnRvbToKKyAgICBjYXNlIEhhcmRQaGFudG9tOgogICAgIGNhc2UgVXBzaWxvbjoKICAgICBjYXNl
IFBoaToKICAgICBjYXNlIEZsdXNoOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNjM5NDgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NjU5LDYgKzQ2NTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBQaGFudG9tOgor
ICAgIGNhc2UgSGFyZFBoYW50b206CiAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1f
aml0LmdyYXBoKCksIG5vZGUsIHNwZWN1bGF0ZSk7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwog
ICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTYzOTQ4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDkxNSw2ICs0OTE1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgUGhhbnRvbToKKyAgICBjYXNlIEhhcmRQaGFu
dG9tOgogICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2ppdC5ncmFwaCgpLCBub2Rl
LCBzcGVjdWxhdGUpOwogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkocmV2aXNpb24gMTYzOTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MzAsNyArMjYzMCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm8KICAgICBjYXNlIEludDMyVXNlOiB7
CiAgICAgICAgIEFTU0VSVCghc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhNb2Rl
KCkpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSkpIHsKKyAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLT5jaGlsZDEo
KS5ub2RlKCkpKSB7CiAgICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mSW50MzJDb25z
dGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlSW50MzJP
cGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwpAQCAtMjY0NSw3ICsyNjQ1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUFkZChOb2RlKiBubwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpKSB7CisgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgp
KSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2YWx1ZU9mSW50MzJDb25zdGFu
dChub2RlLT5jaGlsZDIoKS5ub2RlKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1
Y3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTYzOTQ4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzEsMTMgKzcxLDggQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIHN3aXRj
aCAobV9ub2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgQml0T3I6Ci0gICAgICAgICAgICBpZiAo
bV9ub2RlLT5jaGlsZDEoKS0+aXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1
ZSBvcDEgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgp
KTsKLSAgICAgICAgICAgICAgICBpZiAob3AxLmlzSW50MzIoKSAmJiAhb3AxLmFzSW50MzIoKSkg
ewotICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9JZGVudGl0eU92ZXJDaGlsZDIoKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQorICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOworCiAgICAgICAgICAgICBpZiAo
bV9ub2RlLT5jaGlsZDIoKS0+aXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1
ZSBvcDIgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG1fbm9kZS0+Y2hpbGQyKCkubm9kZSgp
KTsKICAgICAgICAgICAgICAgICBpZiAob3AyLmlzSW50MzIoKSAmJiAhb3AyLmFzSW50MzIoKSkg
ewpAQCAtODcsNiArODIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQml0WG9yOgorICAgICAgICBjYXNl
IEJpdEFuZDoKKyAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQml0TFNoaWZ0OgogICAgICAgICBj
YXNlIEJpdFJTaGlmdDoKICAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OgpAQCAtMTEyLDYgKzExMiwz
OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0
aXZpdHkoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNJbnQzMkNv
bnN0YW50KG1fbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAgICAgICAgIGludDMy
X3QgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZJbnQzMkNvbnN0YW50KAorICAgICAgICAgICAgICAg
ICAgICBtX25vZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKCF2YWx1
ZSkgeworICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9JZGVudGl0eU92ZXJDaGlsZDEoKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0
aE11bDoKKyAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhTdWI6CisgICAgICAgICAgICBp
ZiAobV9ncmFwaC5pc0ludDMyQ29uc3RhbnQobV9ub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAg
ICAgICAgICAgICAgJiYgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7CisgICAg
ICAgICAgICAgICAgaW50MzJfdCB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZkludDMyQ29uc3RhbnQo
bV9ub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgIGlmICgtdmFsdWUgIT0g
dmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5zZXRPcChBcml0aEFkZCk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+Y2hpbGQyKCkuc2V0Tm9kZSgKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fbm9kZUluZGV4LCBtX25vZGUtPm9yaWdpbiwganNOdW1iZXIoLXZh
bHVlKSkpOworICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3Ro
OgogICAgICAgICAgICAgaWYgKEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3ID0gbV9ncmFwaC50cnlH
ZXRGb2xkYWJsZVZpZXdGb3JDaGlsZDEobV9ub2RlKSkKICAgICAgICAgICAgICAgICBmb2xkVHlw
ZWRBcnJheVByb3BlcnR5VG9Db25zdGFudCh2aWV3LCBqc051bWJlcih2aWV3LT5sZW5ndGgoKSkp
OwpAQCAtMTc5LDYgKzIxMSwyOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9ub2RlSW5kZXgs
IFNwZWNOb25lLCBQaGFudG9tLCBtX25vZGUtPm9yaWdpbiwgbV9ub2RlLT5jaGlsZHJlbik7CiAg
ICAgfQogICAgIAorICAgIHZvaWQgaGFuZGxlQ29tbXV0YXRpdml0eSgpCisgICAgeworICAgICAg
ICAvLyBJZiB0aGUgcmlnaHQgc2lkZSBpcyBhIGNvbnN0YW50IHRoZW4gdGhlcmUgaXMgbm90aGlu
ZyBsZWZ0IHRvIGRvLgorICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDIoKS0+aGFzQ29uc3RhbnQo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgY2FzZSBl
bnN1cmVzIHRoYXQgb3B0aW1pemF0aW9ucyB0aGF0IGxvb2sgZm9yIHggKyBjb25zdCBkb24ndCBh
bHNvIGhhdmUKKyAgICAgICAgLy8gdG8gbG9vayBmb3IgY29uc3QgKyB4LgorICAgICAgICBpZiAo
bV9ub2RlLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgc3RkOjpzd2Fw
KG1fbm9kZS0+Y2hpbGQxKCksIG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgbV9jaGFu
Z2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgLy8gVGhpcyBjYXNlIGVuc3VyZXMgdGhhdCBDU0UgaXMgY29tbXV0YXRpdml0eS1hd2Fy
ZS4KKyAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpID4gbV9ub2RlLT5jaGlsZDIo
KS5ub2RlKCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3dhcChtX25vZGUtPmNoaWxkMSgpLCBtX25v
ZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgSW5zZXJ0aW9uU2V0IG1faW5z
ZXJ0aW9uU2V0OwogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgdW5zaWduZWQgbV9ub2Rl
SW5kZXg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0
aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE2Mzk0OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0NCw2ICsyNDQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGNhc2Ug
R2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICBjYXNlIEdldFR5cGVk
QXJyYXlCeXRlT2Zmc2V0OgogICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAg
ICAgICAgICBjYXNlIEhhcmRQaGFudG9tOgogICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDoK
ICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgY291bnQgdGhlc2UgdXNlcy4KICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC0zNDIsNiArMzQzLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0SW5k
ZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b206CisgICAg
ICAgICAgICAgICAgY2FzZSBIYXJkUGhhbnRvbToKICAgICAgICAgICAgICAgICBjYXNlIE1vdkhp
bnQ6CiAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGNvdW50IHRoZXNlIHVzZXMuCiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTYzOTQ4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2
ICs1MCw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBj
YXNlIE1vdkhpbnQ6CiAgICAgY2FzZSBab21iaWVIaW50OgogICAgIGNhc2UgUGhhbnRvbToKKyAg
ICBjYXNlIEhhcmRQaGFudG9tOgogICAgIGNhc2UgRmx1c2g6CiAgICAgY2FzZSBQaGFudG9tTG9j
YWw6CiAgICAgY2FzZSBTZXRBcmd1bWVudDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNjM5NDgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAxLDYgKzMwMSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjb21waWxlWm9tYmll
SGludCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAg
ICAgY2FzZSBIYXJkUGhhbnRvbToKICAgICAgICAgICAgIGNvbXBpbGVQaGFudG9tKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUb1RoaXM6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCShyZXZpc2lvbiAxNjM5NDgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTk1LDcgKzk1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFs
KGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0IFN0cmluZ0ltcGwqIGIpIHsgcmV0dXJuIDo6ZXF1
YWwoYSwgYik7IH0KIAogICAgICAgICAvLyBPbmx5IHRvIGJlIHVzZWQgd2l0aCBzdHJpbmcgbGl0
ZXJhbHMuCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmPFN0cmluZ0ltcGw+IGFkZChWTSosIGNvbnN0
IGNoYXIqKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFBhc3NSZWY8U3RyaW5n
SW1wbD4gYWRkKFZNKiwgY29uc3QgY2hhciopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgUGFzc1JlZjxTdHJpbmdJbXBsPiBhZGQoRXhlY1N0YXRlKiwgY29uc3QgY2hhciopOwog
CiAgICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJp
bnNpYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJp
bnNpYy5oCShyZXZpc2lvbiAxNjM5NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRyaW5zaWMuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsMTAgQEAgZW51bSBJbnRy
aW5zaWMgewogICAgIElNdWxJbnRyaW5zaWMsCiAgICAgQXJyYXlJdGVyYXRvck5leHRWYWx1ZUlu
dHJpbnNpYywKICAgICBBcnJheUl0ZXJhdG9yTmV4dEtleUludHJpbnNpYywKLSAgICBBcnJheUl0
ZXJhdG9yTmV4dEdlbmVyaWNJbnRyaW5zaWMKKyAgICBBcnJheUl0ZXJhdG9yTmV4dEdlbmVyaWNJ
bnRyaW5zaWMsCisgICAgCisgICAgLy8gRGVidWdnaW5nIGludHJpbnNpY3MKKyAgICBERkdUcnVl
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTYzOTQ4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTgwLDcgKzU4MCw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHB1dERpcmVjdChWTSYgdm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCwgSlNWYWx1ZSB2YWx1ZSkgeyBsb2NhdGlvbkZvck9mZnNldChvZmZzZXQpLT5zZXQodm0sIHRo
aXMsIHZhbHVlKTsgfQogICAgIHZvaWQgcHV0RGlyZWN0VW5kZWZpbmVkKFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkgeyBsb2NhdGlvbkZvck9mZnNldChvZmZzZXQpLT5zZXRVbmRlZmluZWQoKTsgfQog
Ci0gICAgdm9pZCBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgUHJvcGVydHlOYW1lJiwgdW5zaWduZWQgZnVuY3Rpb25MZW5ndGgsIE5hdGl2ZUZ1bmN0
aW9uLCBJbnRyaW5zaWMsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIGNv
bnN0IFByb3BlcnR5TmFtZSYsIHVuc2lnbmVkIGZ1bmN0aW9uTGVuZ3RoLCBOYXRpdmVGdW5jdGlv
biwgSW50cmluc2ljLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICB2b2lkIHB1dERpcmVjdE5h
dGl2ZUZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0
IFByb3BlcnR5TmFtZSYsIHVuc2lnbmVkIGZ1bmN0aW9uTGVuZ3RoLCBOYXRpdmVGdW5jdGlvbiwg
SW50cmluc2ljLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2V0LWJ5LWlkLXVudHlw
ZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9n
ZXQtYnktaWQtdW50eXBlZC5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvZ2V0LWJ5LWlkLXVudHlwZWQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyMSBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICByZXR1cm4gby5mOworfQorCitub0lu
bGluZShmb28pOworCitTdHJpbmcucHJvdG90eXBlLmYgPSA0MjsKK051bWJlci5wcm90b3R5cGUu
ZiA9IDI0OworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgdmFyIHJl
c3VsdCA9IGZvbygiaGVsbG8iKTsKKyAgICBpZiAocmVzdWx0ICE9IDQyKQorICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCByZXN1bHQgZm9yIHN0cmluZzogIiArIHJlc3VsdDsKKyAgICByZXN1bHQg
PSBmb28oMTMpOworICAgIGlmIChyZXN1bHQgIT0gMjQpCisgICAgICAgIHRocm93ICJFcnJvcjog
YmFkIHJlc3VsdCBmb3IgbnVtYmVyOiAiICsgcmVzdWx0OworICAgIHJlc3VsdCA9IGZvbyh7Zjo4
NH0pOworICAgIGlmIChyZXN1bHQgIT0gODQpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJl
c3VsdCBmb3Igb2JqZWN0OiAiICsgcmVzdWx0OworfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2ludmVydGVkLWFkZGl0aXZlLXN1YnN1bXB0aW9uLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaW52ZXJ0ZWQtYWRk
aXRpdmUtc3Vic3VtcHRpb24uanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL2ludmVydGVkLWFkZGl0aXZlLXN1YnN1bXB0aW9uLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTUgQEAKK2Z1bmN0aW9uIGZvbyh4KSB7CisgICAgcmV0dXJuICgo
eCArIDEpIHwgMCkgKyAoeCArIDEpOworfQorCitub0lubGluZShmb28pOworCitmb3IgKHZhciBp
ID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9IGZvbyhpKTsKKyAgICBp
ZiAocmVzdWx0ICE9IChpICsgMSkgKiAyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1
bHQgZm9yIGkgPSAiICsgaSArICI6ICIgKyByZXN1bHQ7Cit9CisKK3ZhciByZXN1bHQgPSBmb28o
MjE0NzQ4MzY0Nyk7CitpZiAocmVzdWx0ICE9ICgoMjE0NzQ4MzY0NyArIDEpIHwgMCkgKyAoMjE0
NzQ4MzY0NyArIDEpKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBmb3IgMjE0NzQ4MzY0
NzogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
cmVkdW5kYW50LWFkZC1vdmVyZmxvdy1jaGVja3MuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZWR1bmRhbnQtYWRkLW92ZXJmbG93LWNoZWNrcy5q
cwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVk
dW5kYW50LWFkZC1vdmVyZmxvdy1jaGVja3MuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
OCBAQAorZnVuY3Rpb24gZm9vKHgpIHsKKyAgICByZXR1cm4gKHggKyAwKSArICh4ICsgMSkgKyAo
eCArIDIpICsgKHggKyAzKSArICh4ICsgNCkgKyAoeCArIDUpICsgKHggKyA2KSArICh4ICsgNykg
KyAoeCArIDgpICsgKHggKyA5KSArICh4ICsgMTApOworfQorCitub0lubGluZShmb28pOworCitm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9IGZvbyhp
KTsKKyAgICBpZiAocmVzdWx0ICE9IGkgKiAxMSArIDU1KQorICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCByZXN1bHQgZm9yIGkgPSAiICsgaSArICI6ICIgKyByZXN1bHQ7Cit9CisKK2ZvciAodmFy
IGkgPSAyMTQ3NDgzNjI4OyBpIDw9IDIxNDc0ODM2NDc7IGkrKykgeworICAgIHZhciByZXN1bHQg
PSBmb28oaSk7CisgICAgaWYgKHJlc3VsdCAhPSBpICogMTEgKyA1NSkKKyAgICAgICAgdGhyb3cg
IkVycm9yOiBiYWQgcmVzdWx0IGZvciBpID0gIiArIGkgKyAiOiAiICsgcmVzdWx0OworfQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3JlZHVuZGFudC1hcnJheS1i
b3VuZHMtY2hlY2tzLWFkZGl0aW9uLXNraXAtZmlyc3QuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZWR1bmRhbnQtYXJyYXktYm91bmRzLWNoZWNr
cy1hZGRpdGlvbi1za2lwLWZpcnN0LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9yZWR1bmRhbnQtYXJyYXktYm91bmRzLWNoZWNrcy1hZGRpdGlv
bi1za2lwLWZpcnN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKK2Z1bmN0aW9u
IGZvbyhhLCBpKSB7CisgICAgcmV0dXJuIFthW2ldLCBhW2kgKyAxXSwgYVtpICsgMl0sIGFbaSAr
IDNdLCBhW2kgKyA0XSwgYVtpICsgNV0sIGFbaSArIDZdLCBhW2kgKyA3XV07Cit9CisKK25vSW5s
aW5lKGZvbyk7CisKK2Z1bmN0aW9uIGFycmF5Y21wKGEsIGIpIHsKKyAgICBpZiAoYS5sZW5ndGgg
IT0gYi5sZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGEubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGFbaV0gIT0gYltpXSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2ZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICB2YXIg
b2Zmc2V0ID0gaSAmIDM7CisgICAgZm9yICh2YXIgaiA9IDA7IGogPCBvZmZzZXQ7ICsraikKKyAg
ICAgICAgYXJyYXkucHVzaCg0Mik7CisgICAgdmFyIHJlc3VsdCA9IGZvbyhhcnJheS5jb25jYXQo
WzEsIDIsIDMsIDQsIDUsIDYsIDcsIDhdKSwgb2Zmc2V0KTsKKyAgICBpZiAoIWFycmF5Y21wKHJl
c3VsdCwgWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDhdKSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgcmVzdWx0ICgxLi44KTogIiArIHJlc3VsdDsKK30KKwordmFyIHJlc3VsdCA9IGZvbyhbMSwg
MiwgMywgNCwgNSwgNiwgN10sIDApOworaWYgKCFhcnJheWNtcChyZXN1bHQsIFsxLCAyLCAzLCA0
LCA1LCA2LCA3LCB2b2lkIDBdKSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgKDEuLjcp
OiAiICsgcmVzdWx0OwordmFyIHJlc3VsdCA9IGZvbyhbMSwgMiwgMywgNCwgNSwgNl0sIDApOwor
aWYgKCFhcnJheWNtcChyZXN1bHQsIFsxLCAyLCAzLCA0LCA1LCA2LCB2b2lkIDAsIHZvaWQgMF0p
KQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCAoMS4uNik6ICIgKyByZXN1bHQ7Cit2YXIg
cmVzdWx0ID0gZm9vKFsxLCAyLCAzLCA0LCA1XSwgMCk7CitpZiAoIWFycmF5Y21wKHJlc3VsdCwg
WzEsIDIsIDMsIDQsIDUsIHZvaWQgMCwgdm9pZCAwLCB2b2lkIDBdKSkKKyAgICB0aHJvdyAiRXJy
b3I6IGJhZCByZXN1bHQgKDEuLjUpOiAiICsgcmVzdWx0OwordmFyIHJlc3VsdCA9IGZvbyhbMSwg
MiwgMywgNF0sIDApOworaWYgKCFhcnJheWNtcChyZXN1bHQsIFsxLCAyLCAzLCA0LCB2b2lkIDAs
IHZvaWQgMCwgdm9pZCAwLCB2b2lkIDBdKSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQg
KDEuLjQpOiAiICsgcmVzdWx0OwordmFyIHJlc3VsdCA9IGZvbyhbMSwgMiwgM10sIDApOworaWYg
KCFhcnJheWNtcChyZXN1bHQsIFsxLCAyLCAzLCB2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCB2b2lk
IDAsIHZvaWQgMF0pKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCAoMS4uMyk6ICIgKyBy
ZXN1bHQ7Cit2YXIgcmVzdWx0ID0gZm9vKFsxLCAyXSwgMCk7CitpZiAoIWFycmF5Y21wKHJlc3Vs
dCwgWzEsIDIsIHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCB2b2lkIDBd
KSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgKDEuLjIpOiAiICsgcmVzdWx0OwordmFy
IHJlc3VsdCA9IGZvbyhbMV0sIDApOworaWYgKCFhcnJheWNtcChyZXN1bHQsIFsxLCB2b2lkIDAs
IHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCB2b2lkIDBdKSkKKyAgICB0
aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgKDEuLjEpOiAiICsgcmVzdWx0OwordmFyIHJlc3VsdCA9
IGZvbyhbXSwgMCk7CitpZiAoIWFycmF5Y21wKHJlc3VsdCwgW3ZvaWQgMCwgdm9pZCAwLCB2b2lk
IDAsIHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgdm9pZCAwXSkpCisgICAgdGhyb3cg
IkVycm9yOiBiYWQgcmVzdWx0ICgxLi4xKTogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVkdW5kYW50LWFycmF5LWJvdW5kcy1jaGVja3MtYWRk
aXRpb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9yZWR1bmRhbnQtYXJyYXktYm91bmRzLWNoZWNrcy1hZGRpdGlvbi5qcwkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVkdW5kYW50LWFycmF5LWJv
dW5kcy1jaGVja3MtYWRkaXRpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAor
ZnVuY3Rpb24gZm9vKGEsIGkpIHsKKyAgICByZXR1cm4gW2FbaSArIDBdLCBhW2kgKyAxXSwgYVtp
ICsgMl0sIGFbaSArIDNdLCBhW2kgKyA0XSwgYVtpICsgNV0sIGFbaSArIDZdLCBhW2kgKyA3XV07
Cit9CisKK25vSW5saW5lKGZvbyk7CisKK2Z1bmN0aW9uIGFycmF5Y21wKGEsIGIpIHsKKyAgICBp
ZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGFbaV0gIT0gYltp
XSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgYXJyYXkgPSBb
XTsKKyAgICB2YXIgb2Zmc2V0ID0gaSAmIDM7CisgICAgZm9yICh2YXIgaiA9IDA7IGogPCBvZmZz
ZXQ7ICsraikKKyAgICAgICAgYXJyYXkucHVzaCg0Mik7CisgICAgdmFyIHJlc3VsdCA9IGZvbyhh
cnJheS5jb25jYXQoWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDhdKSwgb2Zmc2V0KTsKKyAgICBpZiAo
IWFycmF5Y21wKHJlc3VsdCwgWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDhdKSkKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgcmVzdWx0ICgxLi44KTogIiArIHJlc3VsdDsKK30KKwordmFyIHJlc3Vs
dCA9IGZvbyhbMSwgMiwgMywgNCwgNSwgNiwgN10sIDApOworaWYgKCFhcnJheWNtcChyZXN1bHQs
IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCB2b2lkIDBdKSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQgKDEuLjcpOiAiICsgcmVzdWx0OwordmFyIHJlc3VsdCA9IGZvbyhbMSwgMiwgMywgNCwg
NSwgNl0sIDApOworaWYgKCFhcnJheWNtcChyZXN1bHQsIFsxLCAyLCAzLCA0LCA1LCA2LCB2b2lk
IDAsIHZvaWQgMF0pKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCAoMS4uNik6ICIgKyBy
ZXN1bHQ7Cit2YXIgcmVzdWx0ID0gZm9vKFsxLCAyLCAzLCA0LCA1XSwgMCk7CitpZiAoIWFycmF5
Y21wKHJlc3VsdCwgWzEsIDIsIDMsIDQsIDUsIHZvaWQgMCwgdm9pZCAwLCB2b2lkIDBdKSkKKyAg
ICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgKDEuLjUpOiAiICsgcmVzdWx0OwordmFyIHJlc3Vs
dCA9IGZvbyhbMSwgMiwgMywgNF0sIDApOworaWYgKCFhcnJheWNtcChyZXN1bHQsIFsxLCAyLCAz
LCA0LCB2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCB2b2lkIDBdKSkKKyAgICB0aHJvdyAiRXJyb3I6
IGJhZCByZXN1bHQgKDEuLjQpOiAiICsgcmVzdWx0OwordmFyIHJlc3VsdCA9IGZvbyhbMSwgMiwg
M10sIDApOworaWYgKCFhcnJheWNtcChyZXN1bHQsIFsxLCAyLCAzLCB2b2lkIDAsIHZvaWQgMCwg
dm9pZCAwLCB2b2lkIDAsIHZvaWQgMF0pKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCAo
MS4uMyk6ICIgKyByZXN1bHQ7Cit2YXIgcmVzdWx0ID0gZm9vKFsxLCAyXSwgMCk7CitpZiAoIWFy
cmF5Y21wKHJlc3VsdCwgWzEsIDIsIHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgdm9p
ZCAwLCB2b2lkIDBdKSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgKDEuLjIpOiAiICsg
cmVzdWx0OwordmFyIHJlc3VsdCA9IGZvbyhbMV0sIDApOworaWYgKCFhcnJheWNtcChyZXN1bHQs
IFsxLCB2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCB2b2lk
IDBdKSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgKDEuLjEpOiAiICsgcmVzdWx0Owor
dmFyIHJlc3VsdCA9IGZvbyhbXSwgMCk7CitpZiAoIWFycmF5Y21wKHJlc3VsdCwgW3ZvaWQgMCwg
dm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgdm9pZCAwXSkp
CisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0ICgxLi4xKTogIiArIHJlc3VsdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVkdW5kYW50LWFycmF5LWJvdW5k
cy1jaGVja3MtdW5jaGVja2VkLWFkZGl0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVkdW5kYW50LWFycmF5LWJvdW5kcy1jaGVja3MtdW5j
aGVja2VkLWFkZGl0aW9uLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9yZWR1bmRhbnQtYXJyYXktYm91bmRzLWNoZWNrcy11bmNoZWNrZWQtYWRk
aXRpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorZnVuY3Rpb24gZm9vKGEs
IGkpIHsKKyAgICByZXR1cm4gW2FbKGkgKyAwKXwwXSwgYVsoaSArIDEpfDBdLCBhWyhpICsgMil8
MF0sIGFbKGkgKyAzKXwwXSwgYVsoaSArIDQpfDBdLCBhWyhpICsgNSl8MF0sIGFbKGkgKyA2KXww
XSwgYVsoaSArIDcpfDBdXTsKK30KKworbm9JbmxpbmUoZm9vKTsKKworZnVuY3Rpb24gYXJyYXlj
bXAoYSwgYikgeworICAgIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSkgeworICAgICAg
ICBpZiAoYVtpXSAhPSBiW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgewor
ICAgIHZhciBhcnJheSA9IFtdOworICAgIHZhciBvZmZzZXQgPSBpICYgMzsKKyAgICBmb3IgKHZh
ciBqID0gMDsgaiA8IG9mZnNldDsgKytqKQorICAgICAgICBhcnJheS5wdXNoKDQyKTsKKyAgICB2
YXIgcmVzdWx0ID0gZm9vKGFycmF5LmNvbmNhdChbMSwgMiwgMywgNCwgNSwgNiwgNywgOF0pLCBv
ZmZzZXQpOworICAgIGlmICghYXJyYXljbXAocmVzdWx0LCBbMSwgMiwgMywgNCwgNSwgNiwgNywg
OF0pKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgKDEuLjgpOiAiICsgcmVzdWx0
OworfQorCit2YXIgcmVzdWx0ID0gZm9vKFsxLCAyLCAzLCA0LCA1LCA2LCA3XSwgMCk7CitpZiAo
IWFycmF5Y21wKHJlc3VsdCwgWzEsIDIsIDMsIDQsIDUsIDYsIDcsIHZvaWQgMF0pKQorICAgIHRo
cm93ICJFcnJvcjogYmFkIHJlc3VsdCAoMS4uNyk6ICIgKyByZXN1bHQ7Cit2YXIgcmVzdWx0ID0g
Zm9vKFsxLCAyLCAzLCA0LCA1LCA2XSwgMCk7CitpZiAoIWFycmF5Y21wKHJlc3VsdCwgWzEsIDIs
IDMsIDQsIDUsIDYsIHZvaWQgMCwgdm9pZCAwXSkpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVz
dWx0ICgxLi42KTogIiArIHJlc3VsdDsKK3ZhciByZXN1bHQgPSBmb28oWzEsIDIsIDMsIDQsIDVd
LCAwKTsKK2lmICghYXJyYXljbXAocmVzdWx0LCBbMSwgMiwgMywgNCwgNSwgdm9pZCAwLCB2b2lk
IDAsIHZvaWQgMF0pKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCAoMS4uNSk6ICIgKyBy
ZXN1bHQ7Cit2YXIgcmVzdWx0ID0gZm9vKFsxLCAyLCAzLCA0XSwgMCk7CitpZiAoIWFycmF5Y21w
KHJlc3VsdCwgWzEsIDIsIDMsIDQsIHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIHZvaWQgMF0pKQor
ICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCAoMS4uNCk6ICIgKyByZXN1bHQ7Cit2YXIgcmVz
dWx0ID0gZm9vKFsxLCAyLCAzXSwgMCk7CitpZiAoIWFycmF5Y21wKHJlc3VsdCwgWzEsIDIsIDMs
IHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgdm9pZCAwXSkpCisgICAgdGhyb3cgIkVy
cm9yOiBiYWQgcmVzdWx0ICgxLi4zKTogIiArIHJlc3VsdDsKK3ZhciByZXN1bHQgPSBmb28oWzEs
IDJdLCAwKTsKK2lmICghYXJyYXljbXAocmVzdWx0LCBbMSwgMiwgdm9pZCAwLCB2b2lkIDAsIHZv
aWQgMCwgdm9pZCAwLCB2b2lkIDAsIHZvaWQgMF0pKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJl
c3VsdCAoMS4uMik6ICIgKyByZXN1bHQ7Cit2YXIgcmVzdWx0ID0gZm9vKFsxXSwgMCk7CitpZiAo
IWFycmF5Y21wKHJlc3VsdCwgWzEsIHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgdm9p
ZCAwLCB2b2lkIDAsIHZvaWQgMF0pKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCAoMS4u
MSk6ICIgKyByZXN1bHQ7Cit2YXIgcmVzdWx0ID0gZm9vKFtdLCAwKTsKK2lmICghYXJyYXljbXAo
cmVzdWx0LCBbdm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwg
dm9pZCAwLCB2b2lkIDBdKSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgKDEuLjEpOiAi
ICsgcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZWR1
bmRhbnQtYXJyYXktYm91bmRzLWNoZWNrcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL3JlZHVuZGFudC1hcnJheS1ib3VuZHMtY2hlY2tzLmpzCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZWR1bmRh
bnQtYXJyYXktYm91bmRzLWNoZWNrcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBA
CitmdW5jdGlvbiBmb28oYSkgeworICAgIHJldHVybiBbYVswXSwgYVsxXSwgYVsyXSwgYVszXSwg
YVs0XSwgYVs1XSwgYVs2XSwgYVs3XV07Cit9CisKK25vSW5saW5lKGZvbyk7CisKK2Z1bmN0aW9u
IGFycmF5Y21wKGEsIGIpIHsKKyAgICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgaWYgKGFbaV0gIT0gYltpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyAr
K2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4XSk7Cisg
ICAgaWYgKCFhcnJheWNtcChyZXN1bHQsIFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4XSkpCisgICAg
ICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCAoMS4uOCk6ICIgKyByZXN1bHQ7Cit9CisKK3Zh
ciByZXN1bHQgPSBmb28oWzEsIDIsIDMsIDQsIDUsIDYsIDddKTsKK2lmICghYXJyYXljbXAocmVz
dWx0LCBbMSwgMiwgMywgNCwgNSwgNiwgNywgdm9pZCAwXSkpCisgICAgdGhyb3cgIkVycm9yOiBi
YWQgcmVzdWx0ICgxLi43KTogIiArIHJlc3VsdDsKK3ZhciByZXN1bHQgPSBmb28oWzEsIDIsIDMs
IDQsIDUsIDZdKTsKK2lmICghYXJyYXljbXAocmVzdWx0LCBbMSwgMiwgMywgNCwgNSwgNiwgdm9p
ZCAwLCB2b2lkIDBdKSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgKDEuLjYpOiAiICsg
cmVzdWx0OwordmFyIHJlc3VsdCA9IGZvbyhbMSwgMiwgMywgNCwgNV0pOworaWYgKCFhcnJheWNt
cChyZXN1bHQsIFsxLCAyLCAzLCA0LCA1LCB2b2lkIDAsIHZvaWQgMCwgdm9pZCAwXSkpCisgICAg
dGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0ICgxLi41KTogIiArIHJlc3VsdDsKK3ZhciByZXN1bHQg
PSBmb28oWzEsIDIsIDMsIDRdKTsKK2lmICghYXJyYXljbXAocmVzdWx0LCBbMSwgMiwgMywgNCwg
dm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgdm9pZCAwXSkpCisgICAgdGhyb3cgIkVycm9yOiBiYWQg
cmVzdWx0ICgxLi40KTogIiArIHJlc3VsdDsKK3ZhciByZXN1bHQgPSBmb28oWzEsIDIsIDNdKTsK
K2lmICghYXJyYXljbXAocmVzdWx0LCBbMSwgMiwgMywgdm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwg
dm9pZCAwLCB2b2lkIDBdKSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgKDEuLjMpOiAi
ICsgcmVzdWx0OwordmFyIHJlc3VsdCA9IGZvbyhbMSwgMl0pOworaWYgKCFhcnJheWNtcChyZXN1
bHQsIFsxLCAyLCB2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgdm9pZCAw
XSkpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0ICgxLi4yKTogIiArIHJlc3VsdDsKK3Zh
ciByZXN1bHQgPSBmb28oWzFdKTsKK2lmICghYXJyYXljbXAocmVzdWx0LCBbMSwgdm9pZCAwLCB2
b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgdm9pZCAwXSkpCisgICAgdGhy
b3cgIkVycm9yOiBiYWQgcmVzdWx0ICgxLi4xKTogIiArIHJlc3VsdDsKK3ZhciByZXN1bHQgPSBm
b28oW10pOworaWYgKCFhcnJheWNtcChyZXN1bHQsIFt2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCB2
b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIHZvaWQgMF0pKQorICAgIHRocm93ICJFcnJv
cjogYmFkIHJlc3VsdCAoMS4uMSk6ICIgKyByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL3RyaWNreS1hcnJheS1ib3VuZHMtY2hlY2tzLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdHJpY2t5LWFycmF5LWJv
dW5kcy1jaGVja3MuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL3RyaWNreS1hcnJheS1ib3VuZHMtY2hlY2tzLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjcgQEAKK2Z1bmN0aW9uIGZvbyhhLCBpLCBwKSB7CisgICAgaWYgKHAgfHwgIURG
R1RydWUoKSkKKyAgICAgICAgcmV0dXJuIFthWyhpIC0gKERGR1RydWUoKSA/IDIxNDc0ODM2NDYg
OiAwKSkgfCAwXSwgYVtpXSwgYVsoaSArIChERkdUcnVlKCkgPyAyMTQ3NDgzNjQ2IDogMCkpIHwg
MF0sIERGR1RydWUoKV07CisgICAgcmV0dXJuIFsxMl07Cit9CisKK25vSW5saW5lKGZvbyk7CisK
K2Z1bmN0aW9uIGFycmF5Y21wKGEsIGIpIHsKKyAgICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgaWYgKGFbaV0gIT0gYltpXSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwg
MTAwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKFs0Ml0sIDAsIGZhbHNlKTsKKyAg
ICBpZiAoIWFycmF5Y21wKHJlc3VsdCwgWzQyLCA0MiwgNDIsIGZhbHNlXSkgJiYgIWFycmF5Y21w
KHJlc3VsdCwgWzEyXSkpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBmb3IgaSA9
ICIgKyBpICsgIjogIiArIHJlc3VsdDsKK30KKwordmFyIHJlc3VsdCA9IGZvbyhbMSwgMiwgMywg
NCwgNV0sIC0yMTQ3NDgzNjQ2LCB0cnVlKTsKK2lmICghYXJyYXljbXAocmVzdWx0LCBbNSwgdm9p
ZCAwLCB2b2lkIDAsIGZhbHNlXSkpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciB0
cmljazogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjM5NTEpCisrKyBTb3VyY2UvV1RG
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE0LTAyLTExICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgSG9pc3QgYW5kIGNvbWJp
bmUgYXJyYXkgYm91bmRzIGNoZWNrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTI1NDMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFdURi52Y3hw
cm9qL1dURi52Y3hwcm9qOgorICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvSGFzaE1ldGhv
ZC5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6SGFzaE1ldGhvZDo6b3BlcmF0b3IoKSk6CisKIDIw
MTQtMDItMTEgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAg
ICAgICAzMi1iaXQgTExJbnQgd3JpdGVCYXJyaWVyT25HbG9iYWxPYmplY3QgaXMgd3JvbmcKSW5k
ZXg6IFNvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE2Mzk0OCkKKysrIFNvdXJjZS9XVEYv
R05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsNyBAQCB3dGZf
c291cmNlcyArPSBcCiAgICAgU291cmNlL1dURi93dGYvSGFzaEZ1bmN0aW9ucy5oIFwKICAgICBT
b3VyY2UvV1RGL3d0Zi9IYXNoSXRlcmF0b3JzLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL0hhc2hN
YXAuaCBcCisgICAgU291cmNlL1dURi93dGYvSGFzaE1ldGhvZC5oIFwKICAgICBTb3VyY2UvV1RG
L3d0Zi9IYXNoU2V0LmggXAogICAgIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5jcHAgXAogICAg
IFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oIFwKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnZjeHBy
b2ovV1RGLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYu
dmN4cHJvagkocmV2aXNpb24gMTYzOTQ4KQorKysgU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYu
dmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjAzLDYgKzIwMyw3IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlx3dGZcSGFzaEZ1bmN0aW9ucy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cd3RmXEhhc2hJdGVyYXRvcnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHd0ZlxIYXNoTWFwLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcSGFz
aE1ldGhvZC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEhhc2hTZXQuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxIYXNoVGFibGUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxIYXNoVHJhaXRzLmgiIC8+CkluZGV4OiBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2Mzk0OCkKKysrIFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTI5MSw2ICsyOTEsNyBAQAogCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5vTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjJCNjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGVmZXJyYWJsZVJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGbGlwQnl0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMDBCN0Qx
OEFCNDhCNDAwQTZENzJFIC8qIEhhc2hNZXRob2QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaE1ldGhv
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjg3MTA1OTE2NjQzRjE5MDA5MEIw
QUQgLyogUmF3UG9pbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYXdQ
b2ludGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODg1RTBFMTg0NUFFOUYw
MEYxRTNGQSAvKiBGYXN0Qml0VmVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZhc3RCaXRW
ZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI4RjE3MkUwMEYw
MDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29t
cGlsYXRpb25UaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzIwLDYg
KzcyMSw3IEBACiAJCQkJQThBNDcyQjQxNTFBODI1QTAwNDEyM0ZGIC8qIEhhc2hGdW5jdGlvbnMu
aCAqLywKIAkJCQlBOEE0NzJCNTE1MUE4MjVBMDA0MTIzRkYgLyogSGFzaEl0ZXJhdG9ycy5oICov
LAogCQkJCUE4QTQ3MkI2MTUxQTgyNUEwMDQxMjNGRiAvKiBIYXNoTWFwLmggKi8sCisJCQkJMEYz
MDBCN0QxOEFCNDhCNDAwQTZENzJFIC8qIEhhc2hNZXRob2QuaCAqLywKIAkJCQlBOEE0NzJCNzE1
MUE4MjVBMDA0MTIzRkYgLyogSGFzaFNldC5oICovLAogCQkJCUE4QTQ3MkI4MTUxQTgyNUEwMDQx
MjNGRiAvKiBIYXNoVGFibGUuY3BwICovLAogCQkJCUE4QTQ3MkI5MTUxQTgyNUEwMDQxMjNGRiAv
KiBIYXNoVGFibGUuaCAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNjM5
NDgpCisrKyBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MzksNiArMzksNyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBIYXNoRnVuY3Rpb25zLmgKICAgICBI
YXNoSXRlcmF0b3JzLmgKICAgICBIYXNoTWFwLmgKKyAgICBIYXNoTWV0aG9kLmgKICAgICBIYXNo
U2V0LmgKICAgICBIYXNoVGFibGUuaAogICAgIEhhc2hUcmFpdHMuaApJbmRleDogU291cmNlL1dU
Ri93dGYvSGFzaE1ldGhvZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hNZXRo
b2QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0hhc2hNZXRob2QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgSGFzaE1ldGhvZF9oCisjZGVmaW5lIEhhc2hNZXRob2Rf
aAorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgV1RGIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBIYXNoTWV0aG9kIHsKKyAgICBzaXplX3Qgb3Bl
cmF0b3IoKShjb25zdCBUJiB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1
ZS5oYXNoKCk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6
SGFzaE1ldGhvZDsKKworI2VuZGlmIC8vIEhhc2hNZXRob2RfaAo=
</data>
<flag name="review"
          id="248103"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
          </attachment>
      

    </bug>

</bugzilla>