<?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>99260</bug_id>
          
          <creation_ts>2012-10-13 23:06:06 -0700</creation_ts>
          <short_desc>DFG should be able to emit effectful structure checks</short_desc>
          <delta_ts>2012-10-28 21:02:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>99262</dependson>
    
    <dependson>99269</dependson>
          <blocked>98606</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>741549</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-13 23:06:06 -0700</bug_when>
    <thetext>Due to array type inference we may find ourselves entering a loop with a different array mode (and hence structure) than what we leave with.  Typically the loop will have an idempotent effect on both array type and structure: whenever it runs it transitions, either directly or indirectly, the array to exactly one structure.  This can be optimized using an effectful structure check: if an object doesn&apos;t have the structure we wanted, we attempt to convert to that structure and only OSR exit if we cannot do so.  If such an effectful structure check is hoisted, it ought to allow for rapid up-casting from bottom arrays to int arrays, int arrays to double arrays, and so on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741552</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-13 23:13:42 -0700</bug_when>
    <thetext>It would also be great if an effectful structure check could speculate must-not-alias.  Ordinarily an effectful structure check would have to be assumed by the CFA to clobber all structures, since it may change the structure of some object and all other objects we have references to may be aliased to that object.

But we could speculate against this by having the effectful slow path of an effectful structure check check all variables that have been proven to have some structure, and verify that they are not equal to the object being effectfully checked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741596</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-14 14:03:20 -0700</bug_when>
    <thetext>*** Bug 99269 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753013</commentid>
    <comment_count>3</comment_count>
      <attachid>171146</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-28 17:18:33 -0700</bug_when>
    <thetext>Created attachment 171146
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753014</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-28 17:23:34 -0700</bug_when>
    <thetext>Attachment 171146 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/bytecode/ArrayProfile.h:119:  The parameter name &quot;operation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 20 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>753029</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-28 19:49:30 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Attachment 171146 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
&gt; Source/JavaScriptCore/bytecode/ArrayProfile.h:119:  The parameter name &quot;operation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Total errors found: 1 in 20 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753033</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-28 19:54:47 -0700</bug_when>
    <thetext>I should note that I changed the bug title to reflect that I&apos;m only introducing the notion of effectful structure checks, and not hoisting them yet.  This is because with the current implementation of https://bugs.webkit.org/show_bug.cgi?id=98606, it&apos;s unlikely that a loop that accesses an array directly will see multiple array types unless there are additional indirections.  This is because in the programs I&apos;ve seen, it&apos;s unlikely that you&apos;ll have a loop that operates directly over an array without mutating it - and if it mutates it, the baseline JIT will already LUB the array to a single type and the array allocation profile will henceforth only allocate arrays at the LUBed type.  So, what we worry about is loops of the form:

for (things) ... = array[i]

where the array can have multiple types.  It turns out that this kind of loop is considerably less likely in real code than:

for (things) ... = o.array[i]

or:

for (things) ... = o[i][j]

in which case hoisting doesn&apos;t buy you much.  Hence, I&apos;m not going to implement hoisting, yet.

However, for such loops, having the effectful array check be a structure check instead of an indexing type check is profitable - it saves on some arithmetic, a register, and a load.  Also, the one remaining load is dead except for a branch, which tends to be quite fast in most architectures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753041</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-28 21:02:35 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/132759</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171146</attachid>
            <date>2012-10-28 17:18:33 -0700</date>
            <delta_ts>2012-10-28 18:43:37 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>arrayifytostructure_1.patch</filename>
            <type>text/plain</type>
            <size>46189</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMyNzU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBA
CisyMDEyLTEwLTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBiZSBhYmxlIHRvIGVtaXQgZWZmZWN0ZnVsIHN0cnVjdHVyZSBjaGVja3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MjYwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2Ug
YWxsb3dzIHVzIHRvIGZpbmQgb3V0IGlmIGFuIGFycmF5IGFjY2VzcyB0aGF0IGhhcyBnb25lIHBv
bHltb3JwaGljCisgICAgICAgIGlzIG9wZXJhdGluZyBvdmVyIGtub3duIHN0cnVjdHVyZXMgLSBp
LmUuIHRoZSBwcmltb3JkaWFsIGFycmF5IHN0cnVjdHVyZXMgb2YKKyAgICAgICAgdGhlIGdsb2Jh
bCBvYmplY3QgdGhhdCB0aGUgY29kZSBibG9jayBjb250YWluaW5nIHRoZSBhcnJheSBhY2Nlc3Mg
YmVsb25ncyB0by4KKyAgICAgICAgV2UgdGVybSB0aGlzIHN0YXRlICJPcmlnaW5hbEFycmF5IiBm
b3Igc2hvcnQsIGFuZCB3aWxsIGVtaXQgYW4KKyAgICAgICAgQXJyYXlpZnlUb1N0cnVjdHVyZSBp
bnN0ZWFkIG9mIGFuIEFycmF5aWZ5IGlmIHdlIGZpbmQgdGhhdCB3ZSBuZWVkIHRvIGRvCisgICAg
ICAgIGNvbnZlcnNpb25zLiBUaGUgZmFzdCBwYXRoIG9mIGFuIEFycmF5aWZ5VG9TdHJ1Y3R1cmUg
aXMgZXhhY3RseSBsaWtlIHRoZSBmYXN0CisgICAgICAgIHBhdGggb2YgYSBDaGVja1N0cnVjdHVy
ZSBhbmQgaXMgbW9zdGx5IHN1YmplY3QgdG8gdGhlIHNhbWUgb3B0aW1pemF0aW9ucy4gSXQKKyAg
ICAgICAgYWxzbyBidXJucyBvbmUgZmV3ZXIgcmVnaXN0ZXJzLgorCisgICAgICAgICogYnl0ZWNv
ZGUvQXJyYXlQcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxlOjpjb21wdXRl
VXBkYXRlZFByZWRpY3Rpb24pOgorICAgICAgICAqIGJ5dGVjb2RlL0FycmF5UHJvZmlsZS5oOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxlOjpBcnJheVByb2ZpbGUp
OgorICAgICAgICAoQXJyYXlQcm9maWxlKToKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxlOjp1
c2VzT3JpZ2luYWxBcnJheVN0cnVjdHVyZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnNBbmRD
b3VudExpdmVuZXNzKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RG
R0FycmF5TW9kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjpmcm9tT2JzZXJ2
ZWQpOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQpOgorICAg
ICAgICAoSlNDOjpERkc6OmFycmF5Q2xhc3NUb1N0cmluZyk6CisgICAgICAgICogZGZnL0RGR0Fy
cmF5TW9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6d2l0aFByb2ZpbGUpOgor
ICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6aXNKU0FycmF5KToKKyAgICAgICAgKEFycmF5
TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjppc0pTQXJyYXlXaXRoT3JpZ2lu
YWxTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6c3VwcG9ydHNMZW5n
dGgpOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6YXJyYXlNb2Rlc1dpdGhJbmRleGlu
Z1NoYXBlKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcnJheU1vZGVBbmRFbWl0Q2hlY2tzKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQpOgorICAgICAgICAq
IGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmNoZWNr
U3RydWN0dXJlRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpzdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZH
OjpDU0VQaGFzZTo6Z2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6Y2hlY2tBcnJheUVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpDU0VQaGFzZTo6Z2V0U2NvcGVSZWdpc3RlcnNMb2FkRWxpbWluYXRpb24pOgorICAg
ICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAqIGRmZy9E
RkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5v
ZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmNoZWNrQXJyYXkpOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzU3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6OmFycmF5TW9kZSk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnBy
b3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6anVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbE9iamVjdDo6aXNPcmlnaW5hbEFycmF5U3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFu
c2l0aW9uKToKKwogMjAxMi0xMC0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIG1ha2UgYWx3YXlzLXRydWUgZW51bS10by1pbnQgY29tcGFy
aXNvbnMgdXNlIGNhc3RzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fy
cmF5UHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0FycmF5UHJvZmlsZS5jcHAJKHJldmlzaW9uIDEzMjc0OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQXJyYXlQcm9maWxlLmgi
CiAKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNjQsMTIgKzY1LDE0IEBAIGNvbnN0IGNoYXIqIGFycmF5
TW9kZXNUb1N0cmluZyhBcnJheU1vZGUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEFy
cmF5UHJvZmlsZTo6Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKE9wZXJhdGlvbkluUHJvZ3Jlc3Mg
b3BlcmF0aW9uKQordm9pZCBBcnJheVByb2ZpbGU6OmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihD
b2RlQmxvY2sqIGNvZGVCbG9jaywgT3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRpb24pCiB7CiAg
ICAgaWYgKG1fbGFzdFNlZW5TdHJ1Y3R1cmUpIHsKICAgICAgICAgbV9vYnNlcnZlZEFycmF5TW9k
ZXMgfD0gYXJyYXlNb2RlRnJvbVN0cnVjdHVyZShtX2xhc3RTZWVuU3RydWN0dXJlKTsKICAgICAg
ICAgbV9tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMgfD0KICAgICAgICAgICAgIG1fbGFzdFNl
ZW5TdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpOworICAgICAgICBpZiAoIWNvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCktPmlzT3JpZ2luYWxBcnJheVN0cnVjdHVyZShtX2xhc3RTZWVuU3RydWN0dXJl
KSkKKyAgICAgICAgICAgIG1fdXNlc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVzID0gZmFsc2U7CiAg
ICAgICAgIGlmICghbV9zdHJ1Y3R1cmVJc1BvbHltb3JwaGljKSB7CiAgICAgICAgICAgICBpZiAo
IW1fZXhwZWN0ZWRTdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgbV9leHBlY3RlZFN0cnVjdHVy
ZSA9IG1fbGFzdFNlZW5TdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQXJyYXlQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCShyZXZpc2lvbiAxMzI3NDkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDYgKzMzLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIENvZGVCbG9jazsKIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogLy8gVGhpcyBpcyBhIGJpdGZpZWxkIHdoZXJlIGVh
Y2ggYml0IHJlcHJlc2VudHMgYW4gSW5kZXhpbmdUeXBlIHRoYXQgd2UgaGF2ZSBzZWVuLgpAQCAt
ODcsNiArODgsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9zdHJ1Y3R1cmVJc1BvbHltb3JwaGlj
KGZhbHNlKQogICAgICAgICAsIG1fbWF5U3RvcmVUb0hvbGUoZmFsc2UpCiAgICAgICAgICwgbV9t
YXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoZmFsc2UpCisgICAgICAgICwgbV91c2VzT3JpZ2lu
YWxBcnJheVN0cnVjdHVyZXModHJ1ZSkKICAgICAgICAgLCBtX29ic2VydmVkQXJyYXlNb2Rlcygw
KQogICAgIHsKICAgICB9CkBAIC05OCw2ICsxMDAsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9z
dHJ1Y3R1cmVJc1BvbHltb3JwaGljKGZhbHNlKQogICAgICAgICAsIG1fbWF5U3RvcmVUb0hvbGUo
ZmFsc2UpCiAgICAgICAgICwgbV9tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoZmFsc2UpCisg
ICAgICAgICwgbV91c2VzT3JpZ2luYWxBcnJheVN0cnVjdHVyZXModHJ1ZSkKICAgICAgICAgLCBt
X29ic2VydmVkQXJyYXlNb2RlcygwKQogICAgIHsKICAgICB9CkBAIC0xMTMsNyArMTE2LDcgQEAg
cHVibGljOgogICAgICAgICBtX2xhc3RTZWVuU3RydWN0dXJlID0gc3RydWN0dXJlOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihPcGVyYXRpb25JblByb2dy
ZXNzIG9wZXJhdGlvbiA9IE5vT3BlcmF0aW9uKTsKKyAgICB2b2lkIGNvbXB1dGVVcGRhdGVkUHJl
ZGljdGlvbihDb2RlQmxvY2sqLCBPcGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlvbiA9IE5vT3Bl
cmF0aW9uKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIGV4cGVjdGVkU3RydWN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9leHBlY3RlZFN0cnVjdHVyZTsgfQogICAgIGJvb2wgc3RydWN0dXJlSXNQb2x5
bW9ycGhpYygpIGNvbnN0CkBAIC0xMjksNiArMTMyLDggQEAgcHVibGljOgogICAgIAogICAgIGJv
b2wgbWF5U3RvcmVUb0hvbGUoKSBjb25zdCB7IHJldHVybiBtX21heVN0b3JlVG9Ib2xlOyB9CiAg
ICAgCisgICAgYm9vbCB1c2VzT3JpZ2luYWxBcnJheVN0cnVjdHVyZXMoKSBjb25zdCB7IHJldHVy
biBtX3VzZXNPcmlnaW5hbEFycmF5U3RydWN0dXJlczsgfQorICAgIAogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIApAQCAtMTM4LDYgKzE0Myw3
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3N0cnVjdHVyZUlzUG9seW1vcnBoaWM7CiAgICAgYm9v
bCBtX21heVN0b3JlVG9Ib2xlOyAvLyBUaGlzIGZsYWcgbWF5IGJlY29tZSBvdmVybG9hZGVkIHRv
IGluZGljYXRlIG90aGVyIHNwZWNpYWwgY2FzZXMgdGhhdCB3ZXJlIGVuY291bnRlcmVkIGR1cmlu
ZyBhcnJheSBhY2Nlc3MsIGFzIGl0IGRlcGVuZHMgb24gaW5kZXhpbmcgdHlwZS4gU2luY2Ugd2Ug
Y3VycmVudGx5IGhhdmUgYmFzaWNhbGx5IGp1c3Qgb25lIGluZGV4aW5nIHR5cGUgKHR3byB2YXJp
YW50cyBvZiBBcnJheVN0b3JhZ2UpLCB0aGlzIGZsYWcgZm9yIG5vdyBqdXN0IG1lYW5zIGV4YWN0
bHkgd2hhdCBpdHMgbmFtZSBpbXBsaWVzLgogICAgIGJvb2wgbV9tYXlJbnRlcmNlcHRJbmRleGVk
QWNjZXNzZXM7CisgICAgYm9vbCBtX3VzZXNPcmlnaW5hbEFycmF5U3RydWN0dXJlczsKICAgICBB
cnJheU1vZGVzIG1fb2JzZXJ2ZWRBcnJheU1vZGVzOwogfTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDEzMjc0OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzI1LDcgKzI3MjUsNyBAQCB2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGlj
dGlvbnNBbmRDCiAgICAgLy8gc2l0ZSBhbHNvIGhhcyBhIHZhbHVlIHByb2ZpbGUgc2l0ZSAtIHNv
IHdlIGFscmVhZHkga25vdyB3aGV0aGVyIG9yIG5vdCBpdCdzCiAgICAgLy8gbGl2ZS4KICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX2FycmF5UHJvZmlsZXMuc2l6ZSgpOyBpLS07KQotICAgICAgICBt
X2FycmF5UHJvZmlsZXNbaV0uY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG9wZXJhdGlvbik7Cisg
ICAgICAgIG1fYXJyYXlQcm9maWxlc1tpXS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24odGhpcywg
b3BlcmF0aW9uKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zKE9w
ZXJhdGlvbkluUHJvZ3Jlc3Mgb3BlcmF0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMzI3NDkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzI3LDcgKzEzMjcsOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgIC8vIHRoZSBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgdGhlbiB0
aGUgY29uc3RhbnQgZm9sZGluZyBwaGFzZSBzaG91bGQKICAgICAgICAgLy8gdHVybiB0aGlzIGlu
dG8gYSB3YXRjaHBvaW50IGluc3RlYWQuCiAgICAgICAgIFN0cnVjdHVyZVNldCYgc2V0ID0gbm9k
ZS5zdHJ1Y3R1cmVTZXQoKTsKLSAgICAgICAgaWYgKHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1
Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQorICAgICAgICBpZiAodmFsdWUubV9mdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkKKyAgICAgICAgICAgIHx8IHZhbHVlLm1fY3VycmVu
dEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkKICAgICAgICAgICAgIG1fZm91bmRDb25z
dGFudHMgPSB0cnVlOwogICAgICAgICBub2RlLnNldENhbkV4aXQoCiAgICAgICAgICAgICAhdmFs
dWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpCkBAIC0xMzY4LDcgKzEz
NjksNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2Fz
ZSBHZXRCdXR0ZXJmbHk6CiAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBj
YXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdChm
YWxzZSk7CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsg
Ly8gVGhlIHJlc3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4KICAgICAgICAgYnJlYWs7CkBAIC0xNDM5
LDEyICsxNDQwLDIzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAg
ICBpZiAobm9kZS5jaGlsZDIoKSkKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwog
ICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwogICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlckFycmF5TW9kZXMobm9kZS5hcnJheU1vZGUoKS5hcnJheU1v
ZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVl
OwogICAgICAgICBicmVhazsKICAgICB9CisgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOiB7
CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgU3RydWN0dXJlU2V0IHNldCA9IG5vZGUuc3RydWN0dXJlKCk7CisgICAgICAgIGlm
ICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KQorICAgICAg
ICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQor
ICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CisgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCh0cnVlKTsKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKKyAg
ICAgICAgdmFsdWUuZmlsdGVyKHNldCk7CisgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVl
OworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9y
YWdlOiB7CiAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAg
ICAgY2FzZSBBcnJheTo6U3RyaW5nOgpAQCAtMTQ2MCwxMyArMTQ3MiwxMyBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGJyZWFrOyAKICAgICB9CiAg
ICAgY2FzZSBHZXRCeU9mZnNldDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLm1fdHlwZSkpOwogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihT
cGVjQ2VsbCk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0NlbGxTcGVj
dWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3Bw
CShyZXZpc2lvbiAxMzI3NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5
TW9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDMyICs0MiwzMiBAQCBBcnJheU1vZGUgQXJy
YXlNb2RlOjpmcm9tT2JzZXJ2ZWQoQXJyYXlQCiAgICAgICAgICAgICByZXR1cm4gQXJyYXlNb2Rl
KEFycmF5OjpDb250aWd1b3VzLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpPdXRPZkJvdW5kcywg
QXJyYXk6OkNvbnZlcnQpOyAvLyBGSVhNRTogd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRvIGdvIHRv
IGNvbnRpZ3VvdXMgb3IgYXJyYXkgc3RvcmFnZS4gV2UncmUgbWFraW5nIGEgc3RhdGljIGd1ZXNz
IGhlcmUuIEluIGZ1dHVyZSB3ZSBzaG91bGQgdXNlIGV4aXQgcHJvZmlsaW5nIGZvciB0aGlzLgog
ICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zKTsK
ICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKToKLSAgICAgICAg
cmV0dXJuIEFycmF5TW9kZShBcnJheTo6Q29udGlndW91cywgQXJyYXk6Ok5vbkFycmF5LCBBcnJh
eTo6QXNJcykud2l0aFNwZWN1bGF0aW9uKHByb2ZpbGUsIG1ha2VTYWZlKTsKKyAgICAgICAgcmV0
dXJuIEFycmF5TW9kZShBcnJheTo6Q29udGlndW91cywgQXJyYXk6Ok5vbkFycmF5LCBBcnJheTo6
QXNJcykud2l0aFByb2ZpbGUocHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1v
ZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpOgotICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5
OjpDb250aWd1b3VzLCBBcnJheTo6QXJyYXksIEFycmF5OjpBc0lzKS53aXRoU3BlY3VsYXRpb24o
cHJvZmlsZSwgbWFrZVNhZmUpOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpDb250
aWd1b3VzLCBBcnJheTo6QXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShwcm9maWxlLCBt
YWtlU2FmZSk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cykg
fCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQ29udGlndW91cyk6Ci0gICAgICAgIHJldHVybiBBcnJh
eU1vZGUoQXJyYXk6OkNvbnRpZ3VvdXMsIEFycmF5OjpQb3NzaWJseUFycmF5LCBBcnJheTo6QXNJ
cykud2l0aFNwZWN1bGF0aW9uKHByb2ZpbGUsIG1ha2VTYWZlKTsKKyAgICAgICAgcmV0dXJuIEFy
cmF5TW9kZShBcnJheTo6Q29udGlndW91cywgQXJyYXk6OlBvc3NpYmx5QXJyYXksIEFycmF5OjpB
c0lzKS53aXRoUHJvZmlsZShwcm9maWxlLCBtYWtlU2FmZSk7CiAgICAgY2FzZSBhc0FycmF5TW9k
ZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKLSAgICAgICAgcmV0dXJuIEFycmF5TW9kZShB
cnJheTo6QXJyYXlTdG9yYWdlLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpBc0lzKS53aXRoU3Bl
Y3VsYXRpb24ocHJvZmlsZSwgbWFrZVNhZmUpOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFy
cmF5OjpBcnJheVN0b3JhZ2UsIEFycmF5OjpOb25BcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9m
aWxlKHByb2ZpbGUsIG1ha2VTYWZlKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdp
dGhTbG93UHV0QXJyYXlTdG9yYWdlKToKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdp
dGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0
b3JhZ2UpOgotICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpTbG93UHV0QXJyYXlTdG9y
YWdlLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpBc0lzKS53aXRoU3BlY3VsYXRpb24ocHJvZmls
ZSwgbWFrZVNhZmUpOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpTbG93UHV0QXJy
YXlTdG9yYWdlLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShwcm9m
aWxlLCBtYWtlU2FmZSk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKToKLSAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6QXJyYXlTdG9yYWdlLCBBcnJh
eTo6QXJyYXksIEFycmF5OjpBc0lzKS53aXRoU3BlY3VsYXRpb24ocHJvZmlsZSwgbWFrZVNhZmUp
OworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpBcnJheVN0b3JhZ2UsIEFycmF5OjpB
cnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9maWxlKHByb2ZpbGUsIG1ha2VTYWZlKTsKICAgICBj
YXNlIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKICAgICBjYXNl
IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5
V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgotICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5
OjpTbG93UHV0QXJyYXlTdG9yYWdlLCBBcnJheTo6QXJyYXksIEFycmF5OjpBc0lzKS53aXRoU3Bl
Y3VsYXRpb24ocHJvZmlsZSwgbWFrZVNhZmUpOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFy
cmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlLCBBcnJheTo6QXJyYXksIEFycmF5OjpBc0lzKS53aXRo
UHJvZmlsZShwcm9maWxlLCBtYWtlU2FmZSk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJy
YXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2Up
OgotICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpBcnJheVN0b3JhZ2UsIEFycmF5OjpQ
b3NzaWJseUFycmF5LCBBcnJheTo6QXNJcykud2l0aFNwZWN1bGF0aW9uKHByb2ZpbGUsIG1ha2VT
YWZlKTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6QXJyYXlTdG9yYWdlLCBBcnJh
eTo6UG9zc2libHlBcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9maWxlKHByb2ZpbGUsIG1ha2VT
YWZlKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9y
YWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKICAgICBj
YXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVz
KEFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1
dEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZSk6Ci0gICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2Us
IEFycmF5OjpQb3NzaWJseUFycmF5LCBBcnJheTo6QXNJcykud2l0aFNwZWN1bGF0aW9uKHByb2Zp
bGUsIG1ha2VTYWZlKTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6U2xvd1B1dEFy
cmF5U3RvcmFnZSwgQXJyYXk6OlBvc3NpYmx5QXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmls
ZShwcm9maWxlLCBtYWtlU2FmZSk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRo
Q29udGlndW91cykgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKLSAg
ICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6QXJyYXlTdG9yYWdlLCBBcnJheTo6Tm9uQXJy
YXksIEFycmF5OjpDb252ZXJ0KS53aXRoU3BlY3VsYXRpb24ocHJvZmlsZSwgbWFrZVNhZmUpOwor
ICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpBcnJheVN0b3JhZ2UsIEFycmF5OjpOb25B
cnJheSwgQXJyYXk6OkNvbnZlcnQpLndpdGhQcm9maWxlKHByb2ZpbGUsIG1ha2VTYWZlKTsKICAg
ICBjYXNlIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhB
cnJheVdpdGhBcnJheVN0b3JhZ2UpOgotICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpB
cnJheVN0b3JhZ2UsIEFycmF5OjpBcnJheSwgQXJyYXk6OkNvbnZlcnQpLndpdGhTcGVjdWxhdGlv
bihwcm9maWxlLCBtYWtlU2FmZSk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkFy
cmF5U3RvcmFnZSwgQXJyYXk6OkFycmF5LCBBcnJheTo6Q29udmVydCkud2l0aFByb2ZpbGUocHJv
ZmlsZSwgbWFrZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRp
Z3VvdXMpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5
TW9kZXMoQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlT
dG9yYWdlKToKLSAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6QXJyYXlTdG9yYWdlLCBB
cnJheTo6UG9zc2libHlBcnJheSwgQXJyYXk6OkNvbnZlcnQpLndpdGhTcGVjdWxhdGlvbihwcm9m
aWxlLCBtYWtlU2FmZSk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkFycmF5U3Rv
cmFnZSwgQXJyYXk6OlBvc3NpYmx5QXJyYXksIEFycmF5OjpDb252ZXJ0KS53aXRoUHJvZmlsZShw
cm9maWxlLCBtYWtlU2FmZSk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpIHwgYXNB
cnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpOgogICAgICAgICBpZiAoYWN0aW9uID09
IEFycmF5OjpXcml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkp
CiAgICAgICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpDb250aWd1b3VzLCBBcnJheTo6
Tm9uQXJyYXksIEFycmF5OjpPdXRPZkJvdW5kcywgQXJyYXk6OkNvbnZlcnQpOwpAQCAtMTYyLDcg
KzE2Miw3IEBAIGJvb2wgQXJyYXlNb2RlOjphbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFYKICAgICAg
ICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKICAgICAgICAgCiAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKLSAgICAgICAgaWYgKGFycmF5Q2xhc3MoKSA9PSBB
cnJheTo6QXJyYXkpIHsKKyAgICAgICAgaWYgKGlzSlNBcnJheSgpKSB7CiAgICAgICAgICAgICBp
ZiAoYXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlNb2RlcywgYXNBcnJheU1v
ZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5n
bGV0b24oKQpAQCAtMTc1LDcgKzE3NSw3IEBAIGJvb2wgQXJyYXlNb2RlOjphbHJlYWR5Q2hlY2tl
ZChBYnN0cmFjdFYKICAgICAgICAgICAgICYmIGhhc0NvbnRpZ3VvdXModmFsdWUubV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgCiAg
ICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgotICAgICAgICBpZiAoYXJyYXlDbGFzcygpID09
IEFycmF5OjpBcnJheSkgeworICAgICAgICBpZiAoaXNKU0FycmF5KCkpIHsKICAgICAgICAgICAg
IGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5
TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFz
U2luZ2xldG9uKCkKQEAgLTE4OCw3ICsxODgsNyBAQCBib29sIEFycmF5TW9kZTo6YWxyZWFkeUNo
ZWNrZWQoQWJzdHJhY3RWCiAgICAgICAgICAgICAmJiBoYXNGYXN0QXJyYXlTdG9yYWdlKHZhbHVl
Lm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSk7CiAg
ICAgICAgIAogICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIGlm
IChhcnJheUNsYXNzKCkgPT0gQXJyYXk6OkFycmF5KSB7CisgICAgICAgIGlmIChpc0pTQXJyYXko
KSkgewogICAgICAgICAgICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2Fy
cmF5TW9kZXMsIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1v
ZGVzKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5oYXNTaW5nbGV0b24oKQpAQCAtMjkyLDYgKzI5Miw4IEBAIGNvbnN0IGNoYXIqIGFycmF5Q2xh
c3NUb1N0cmluZyhBcnJheTo6Q2wKICAgICBzd2l0Y2ggKGFycmF5Q2xhc3MpIHsKICAgICBjYXNl
IEFycmF5OjpBcnJheToKICAgICAgICAgcmV0dXJuICJBcnJheSI7CisgICAgY2FzZSBBcnJheTo6
T3JpZ2luYWxBcnJheToKKyAgICAgICAgcmV0dXJuICJPcmlnaW5hbEFycmF5IjsKICAgICBjYXNl
IEFycmF5OjpOb25BcnJheToKICAgICAgICAgcmV0dXJuICJOb25BcnJheSI7CiAgICAgY2FzZSBB
cnJheTo6UG9zc2libHlBcnJheToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJyYXlNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cnJheU1vZGUuaAkocmV2aXNpb24gMTMyNzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsOSArNzAsMTAgQEAgZW51bSBU
eXBlIHsKIH07CiAKIGVudW0gQ2xhc3MgewotICAgIE5vbkFycmF5LAotICAgIEFycmF5LAotICAg
IFBvc3NpYmx5QXJyYXkKKyAgICBOb25BcnJheSwgLy8gRGVmaW5pdGVseSBzb21lIG9iamVjdCB0
aGF0IGlzIG5vdCBhIEpTQXJyYXkuCisgICAgQXJyYXksIC8vIERlZmluaXRlbHkgYSBKU0FycmF5
LCBhbmQgbWF5IG9yIG1heSBub3QgaGF2ZSBjdXN0b20gcHJvcGVydGllcyBvciBoYXZlIHVuZGVy
Z29uZSBzb21lIG90aGVyIGJpemFycmUgdHJhbnNpdGlvbnMuCisgICAgT3JpZ2luYWxBcnJheSwg
Ly8gRGVmaW5pdGVseSBhIEpTQXJyYXksIGFuZCBzdGlsbCBoYXMgb25lIG9mIHRoZSBwcmltb3Jk
aWFsIEpTQXJyYXkgc3RydWN0dXJlcyBmb3IgdGhlIGdsb2JhbCBvYmplY3QgdGhhdCB0aGlzIGNv
ZGUgYmxvY2sgKHBvc3NpYmx5IGlubGluZWQgY29kZSBibG9jaykgYmVsb25ncyB0by4KKyAgICBQ
b3NzaWJseUFycmF5IC8vIFNvbWUgb2JqZWN0IHRoYXQgbWF5IG9yIG1heSBub3QgYmUgYSBKU0Fy
cmF5LgogfTsKIAogZW51bSBTcGVjdWxhdGlvbiB7CkBAIC0xNDUsOSArMTQ2LDI3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIEFycmF5TW9kZSh0eXBlKCksIGFycmF5Q2xhc3MoKSwgc3BlY3Vs
YXRpb24sIGNvbnZlcnNpb24oKSk7CiAgICAgfQogICAgIAotICAgIEFycmF5TW9kZSB3aXRoU3Bl
Y3VsYXRpb24oQXJyYXlQcm9maWxlKiBwcm9maWxlLCBib29sIG1ha2VTYWZlKSBjb25zdAorICAg
IEFycmF5TW9kZSB3aXRoUHJvZmlsZShBcnJheVByb2ZpbGUqIHByb2ZpbGUsIGJvb2wgbWFrZVNh
ZmUpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gd2l0aFNwZWN1bGF0aW9uKG1ha2VTYWZl
ID8gQXJyYXk6Ok91dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xlKCkgPyBBcnJh
eTo6VG9Ib2xlIDogQXJyYXk6OkluQm91bmRzKSk7CisgICAgICAgIEFycmF5OjpTcGVjdWxhdGlv
biBteVNwZWN1bGF0aW9uOworICAgICAgICBBcnJheTo6Q2xhc3MgbXlBcnJheUNsYXNzOworICAg
ICAgICAKKyAgICAgICAgaWYgKG1ha2VTYWZlKQorICAgICAgICAgICAgbXlTcGVjdWxhdGlvbiA9
IEFycmF5OjpPdXRPZkJvdW5kczsKKyAgICAgICAgZWxzZSBpZiAocHJvZmlsZS0+bWF5U3RvcmVU
b0hvbGUoKSkKKyAgICAgICAgICAgIG15U3BlY3VsYXRpb24gPSBBcnJheTo6VG9Ib2xlOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBteVNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGlzSlNBcnJheSgpKSB7CisgICAgICAgICAgICBpZiAocHJv
ZmlsZS0+dXNlc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVzKCkpCisgICAgICAgICAgICAgICAgbXlB
cnJheUNsYXNzID0gQXJyYXk6Ok9yaWdpbmFsQXJyYXk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbXlBcnJheUNsYXNzID0gQXJyYXk6OkFycmF5OworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIG15QXJyYXlDbGFzcyA9IGFycmF5Q2xhc3MoKTsKKyAgICAgICAgCisgICAg
ICAgIHJldHVybiBBcnJheU1vZGUodHlwZSgpLCBteUFycmF5Q2xhc3MsIG15U3BlY3VsYXRpb24s
IGNvbnZlcnNpb24oKSk7CiAgICAgfQogICAgIAogICAgIEFycmF5TW9kZSByZWZpbmUoU3BlY3Vs
YXRlZFR5cGUgYmFzZSwgU3BlY3VsYXRlZFR5cGUgaW5kZXgpIGNvbnN0OwpAQCAtMTcwLDcgKzE4
OSwxOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0pTQXJyYXkoKSBjb25zdAogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFycmF5Q2xhc3MoKSA9PSBBcnJheTo6QXJyYXk7CisgICAgICAgIHN3
aXRjaCAoYXJyYXlDbGFzcygpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5OgorICAgICAg
ICBjYXNlIEFycmF5OjpPcmlnaW5hbEFycmF5OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgYm9vbCBpc0pTQXJyYXlXaXRoT3JpZ2luYWxTdHJ1Y3R1cmUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFycmF5Q2xhc3MoKSA9PSBBcnJheTo6T3JpZ2luYWxB
cnJheTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBpc0luQm91bmRzKCkgY29uc3QKQEAgLTI1MCw3
ICsyODAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1
dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIHJldHVybiBhcnJheUNsYXNzKCkgPT0gQXJyYXk6
OkFycmF5OworICAgICAgICAgICAgcmV0dXJuIGlzSlNBcnJheSgpOwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTMxNCw2ICszNDQsNyBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIEFycmF5OjpOb25BcnJheToKICAgICAgICAgICAgIHJl
dHVybiBhc0FycmF5TW9kZXMoc2hhcGUpOwogICAgICAgICBjYXNlIEFycmF5OjpBcnJheToKKyAg
ICAgICAgY2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheToKICAgICAgICAgICAgIHJldHVybiBhc0Fy
cmF5TW9kZXMoc2hhcGUgfCBJc0FycmF5KTsKICAgICAgICAgY2FzZSBBcnJheTo6UG9zc2libHlB
cnJheToKICAgICAgICAgICAgIHJldHVybiBhc0FycmF5TW9kZXMoc2hhcGUpIHwgYXNBcnJheU1v
ZGVzKHNoYXBlIHwgSXNBcnJheSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTMyNzQ5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkwOCwxMyArOTA4LDEzIEBAIHByaXZhdGU6CiAgICAgCiAgICAgQXJyYXlNb2RlIGdldEFycmF5
TW9kZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCiAgICAgewotICAgICAgICBwcm9maWxlLT5jb21w
dXRlVXBkYXRlZFByZWRpY3Rpb24oKTsKKyAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrKTsKICAgICAgICAgcmV0dXJu
IEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKHByb2ZpbGUsIEFycmF5OjpSZWFkLCBmYWxzZSk7CiAg
ICAgfQogICAgIAogICAgIEFycmF5TW9kZSBnZXRBcnJheU1vZGVBbmRFbWl0Q2hlY2tzKEFycmF5
UHJvZmlsZSogcHJvZmlsZSwgQXJyYXk6OkFjdGlvbiBhY3Rpb24sIE5vZGVJbmRleCBiYXNlKQog
ICAgIHsKLSAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7CisgICAg
ICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihtX2lubGluZVN0YWNrVG9wLT5t
X2NvZGVCbG9jayk7CiAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+
bnVtYmVyT2ZSYXJlQ2FzZVByb2ZpbGVzKCkpCkBAIC0xNzgzLDYgKzE3ODMsMTAgQEAgTm9kZUlu
ZGV4IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZgogICAgICAgICBwcm9wZXJ0eVN0b3Jh
Z2UgPSBiYXNlOwogICAgIGVsc2UKICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFw
aChHZXRCdXR0ZXJmbHksIGJhc2UpOworICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBmYXIgbW9y
ZSBlZmZpY2llbnQgZm9yIGxvYWQgZWxpbWluYXRpb24gKGFuZCBzYWZlciBmcm9tCisgICAgLy8g
YW4gT1NSIHN0YW5kcG9pbnQpIGlmIEdldEJ5T2Zmc2V0IGFsc28gcmVmZXJlbmNlZCB0aGUgb2Jq
ZWN0IHdlIHdlcmUgbG9hZGluZworICAgIC8vIGZyb20sIGFuZCBpZiB3ZSBjb3VsZCBsb2FkIGVs
aW1pbmF0ZSBhIEdldEJ5T2Zmc2V0IGV2ZW4gaWYgdGhlIGJ1dHRlcmZseQorICAgIC8vIGhhZCBj
aGFuZ2VkLiBUaGF0IHdvdWxkIGJlIGEgZ3JlYXQgc3VjY2Vzcy4KICAgICBOb2RlSW5kZXggZ2V0
QnlPZmZzZXQgPSBhZGRUb0dyYXBoKEdldEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3Jh
Z2VBY2Nlc3NEYXRhLnNpemUoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgcHJvcGVydHlTdG9yYWdl
KTsKIAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDEzMjc0OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MzMsNiArNDMzLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGNhc2UgQXJyYXlpZnk6CisgICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6Cisg
ICAgICAgICAgICAgICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGFycmF5aWZpY2F0aW9uIGNv
dWxkIGFmZmVjdCBvdXIgc3RydWN0dXJlcy4KKyAgICAgICAgICAgICAgICAvLyBCdXQgdGhhdCBz
ZWVtcyBsaWtlIGl0IHdvdWxkIHRha2UgRWZmb3J0LgorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTQ4NCw2ICs0OTAsMTIgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFycmF5aWZ5OgorICAgICAgICAgICAgY2FzZSBB
cnJheWlmeVRvU3RydWN0dXJlOgorICAgICAgICAgICAgICAgIC8vIFdlIGNvdWxkIGNoZWNrIGlm
IHRoZSBhcnJheWlmaWNhdGlvbiBjb3VsZCBhZmZlY3Qgb3VyIHN0cnVjdHVyZXMuCisgICAgICAg
ICAgICAgICAgLy8gQnV0IHRoYXQgc2VlbXMgbGlrZSBpdCB3b3VsZCB0YWtlIEVmZm9ydC4KKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5k
ZXgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02NTgsNyArNjcwLDYg
QEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToK
ICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgICAg
IGNhc2UgQXJyYXlpZnk6CiAgICAgICAgICAgICAgICAgLy8gSWYgd2UgY2FuIGNoZWFwbHkgcHJv
dmUgdGhpcyBpcyBhIGNoYW5nZSB0byBvdXIgb2JqZWN0J3Mgc3RvcmFnZSwgd2UKICAgICAgICAg
ICAgICAgICAvLyBjYW4gb3B0aW1pemUgYW5kIHVzZSBpdHMgcmVzdWx0LgogICAgICAgICAgICAg
ICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSkKQEAgLTY4NCw2ICs2OTUsMTIgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsK
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6CisgICAgICAgICAg
ICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAgLy8gV2UgY291bGQg
Y2hlY2sgaWYgdGhlIGFycmF5aWZpY2F0aW9uIGNvdWxkIGFmZmVjdCBvdXIgYnV0dGVyZmx5Lgor
ICAgICAgICAgICAgICAgIC8vIEJ1dCB0aGF0IHNlZW1zIGxpa2UgaXQgd291bGQgdGFrZSBFZmZv
cnQuCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNX
b3JsZChpbmRleCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CkBAIC03MTUs
NiArNzMyLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2Fz
ZSBBcnJheWlmeToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKKyAgICAg
ICAgICAgICAgICAvLyBXZSBjb3VsZCBjaGVjayBpZiB0aGUgYXJyYXlpZmljYXRpb24gY291bGQg
YWZmZWN0IG91ciBhcnJheS4KKyAgICAgICAgICAgICAgICAvLyBCdXQgdGhhdCBzZWVtcyBsaWtl
IGl0IHdvdWxkIHRha2UgRWZmb3J0LgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTc4Myw4ICs4MDYsNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAg
IHJldHVybiBOb05vZGU7CiAgICAgfQotCi0KICAgICAKICAgICBOb2RlSW5kZXggZ2V0TG9jYWxM
b2FkRWxpbWluYXRpb24oVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBOb2RlSW5kZXgmIHJlbGV2YW50
TG9jYWxPcCwgYm9vbCBjYXJlQWJvdXRDbG9iYmVyaW5nKQogICAgIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
CShyZXZpc2lvbiAxMzI3NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsMTcgKzkyLDMwIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
Y2FzZSBDaGVja1N0cnVjdHVyZToKLSAgICAgICAgICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0
dXJlOiB7CisgICAgICAgICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZToKKyAgICAgICAg
ICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZTogewogICAgICAgICAgICAgICAgIEFic3RyYWN0
VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZVNldCBzZXQ7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9
PSBBcnJheWlmeVRvU3RydWN0dXJlKQorICAgICAgICAgICAgICAgICAgICBzZXQgPSBub2RlLnN0
cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2V0
ID0gbm9kZS5zdHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKSB7CisgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChub2RlLnJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUu
c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAgICAgICAgICAgIGVsaW1p
bmF0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgc3RydWN0dXJlVmFs
dWUgPSB2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlOwotICAgICAgICAgICAgICAgIGlm
IChzdHJ1Y3R1cmVWYWx1ZS5pc1N1YnNldE9mKG5vZGUuc3RydWN0dXJlU2V0KCkpCisgICAgICAg
ICAgICAgICAgaWYgKHN0cnVjdHVyZVZhbHVlLmlzU3Vic2V0T2Yoc2V0KQogICAgICAgICAgICAg
ICAgICAgICAmJiBzdHJ1Y3R1cmVWYWx1ZS5oYXNTaW5nbGV0b24oKQogICAgICAgICAgICAgICAg
ICAgICAmJiBpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKQogICAgICAgICAgICAgICAg
ICAgICBub2RlLmNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVy
ZVZhbHVlLnNpbmdsZXRvbigpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheTogeworICAg
ICAgICAgICAgY2FzZSBDaGVja0FycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheWlmeTogewog
ICAgICAgICAgICAgICAgIGlmICghbm9kZS5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5yZWZDb3VudCgpID09IDEpOwpAQCAtMTExLDE2
ICsxMjQsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBcnJheWlmeTogewotICAgICAg
ICAgICAgICAgIGlmICghbm9kZS5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDEoKSkpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQobm9kZS5yZWZDb3VudCgpID49IDEpOwotICAgICAgICAgICAgICAg
IG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoR2V0QnV0dGVyZmx5KTsKLSAgICAgICAgICAgICAg
ICBtX2dyYXBoLmRlcmVmKG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9u
IDEzMjc0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgbm9kZVB0ci0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAgICAgICAgIEFy
cmF5TW9kZSBhcnJheU1vZGUgPSBBcnJheU1vZGUoQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlv
bnMpOwogICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkgewotICAgICAgICAgICAgICAgIGFy
cmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7CisgICAgICAgICAgICAgICAg
YXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obV9ncmFwaC5iYXNlbGluZUNv
ZGVCbG9ja0Zvcihub2RlLmNvZGVPcmlnaW4pKTsKICAgICAgICAgICAgICAgICBhcnJheU1vZGUg
PSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChhcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkLCBmYWxz
ZSk7CiAgICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZSgKICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCksCkBAIC0z
ODIsMjggKzM4Miw0NyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoYXJyYXlNb2RlLmRvZXNDb252
ZXJzaW9uKCkpIHsKICAgICAgICAgICAgIGlmIChpbmRleCAhPSBOb05vZGUpCiAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5yZWYoaW5kZXgpOwotICAgICAgICAgICAgTm9kZSBhcnJheWlmeShBcnJh
eWlmeSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIGFycmF5LCBpbmRl
eCk7Ci0gICAgICAgICAgICBhcnJheWlmeS5yZWYoKTsgLy8gT25jZSBiZWNhdXNlIGl0J3MgdXNl
ZCBhcyBhIGJ1dHRlcmZseS4KLSAgICAgICAgICAgIGFycmF5aWZ5LnJlZigpOyAvLyBBbmQgdHdp
Y2UgYmVjYXVzZSBpdCdzIG11c3QtZ2VuZXJhdGUuCi0gICAgICAgICAgICBOb2RlSW5kZXggYXJy
YXlpZnlJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOwotICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQo
YXJyYXlpZnkpOwotICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKG1faW5kZXhJbkJs
b2NrLCBhcnJheWlmeUluZGV4KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKHNo
b3VsZEdlbmVyYXRlKTsKLSAgICAgICAgICAgIEFTU0VSVChhcnJheU1vZGUuY2FuQ1NFU3RvcmFn
ZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChhcnJheU1vZGUudXNlc0J1dHRlcmZseSgpKTsKLQot
ICAgICAgICAgICAgaWYgKCFzdG9yYWdlQ2hlY2soYXJyYXlNb2RlKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gTm9Ob2RlOwotICAgICAgICAgICAgcmV0dXJuIGFycmF5aWZ5SW5kZXg7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gMDsKKyAgICAgICAg
ICAgIGlmIChhcnJheU1vZGUuaXNKU0FycmF5V2l0aE9yaWdpbmFsU3RydWN0dXJlKCkpIHsKKyAg
ICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5iYXNl
bGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luKS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgICAg
ICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBB
cnJheTo6Q29udGlndW91czoKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gZ2xvYmFs
T2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSAhPSBBcnJheVdpdGhDb250aWd1b3VzKQorICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0dXJlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlV2l0aEFycmF5U3Rv
cmFnZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSAhPSBBcnJheVdpdGhBcnJheVN0b3JhZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmUgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUpIHsK
KyAgICAgICAgICAgICAgICBOb2RlIGFycmF5aWZ5KEFycmF5aWZ5VG9TdHJ1Y3R1cmUsIGNvZGVP
cmlnaW4sIE9wSW5mbyhzdHJ1Y3R1cmUpLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgYXJy
YXksIGluZGV4KTsKKyAgICAgICAgICAgICAgICBhcnJheWlmeS5yZWYoKTsKKyAgICAgICAgICAg
ICAgICBOb2RlSW5kZXggYXJyYXlpZnlJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOworICAgICAgICAg
ICAgICAgIG1fZ3JhcGguYXBwZW5kKGFycmF5aWZ5KTsKKyAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5hcHBlbmQobV9pbmRleEluQmxvY2ssIGFycmF5aWZ5SW5kZXgpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBOb2RlIGFycmF5aWZ5KEFycmF5aWZ5LCBjb2Rl
T3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgYXJyYXksIGluZGV4KTsKKyAgICAg
ICAgICAgICAgICBhcnJheWlmeS5yZWYoKTsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggYXJy
YXlpZnlJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOworICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBw
ZW5kKGFycmF5aWZ5KTsKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5hcHBlbmQobV9p
bmRleEluQmxvY2ssIGFycmF5aWZ5SW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgTm9kZSBjaGVja0FycmF5KENoZWNrQXJyYXksIGNvZGVPcmlnaW4s
IE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBhcnJheSk7CisgICAgICAgICAgICBjaGVja0Fy
cmF5LnJlZigpOworICAgICAgICAgICAgTm9kZUluZGV4IGNoZWNrQXJyYXlJbmRleCA9IG1fZ3Jh
cGguc2l6ZSgpOworICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoY2hlY2tBcnJheSk7CisgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5hcHBlbmQobV9pbmRleEluQmxvY2ssIGNoZWNrQXJyYXlJ
bmRleCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIE5vZGUgY2hlY2tBcnJheShDaGVj
a0FycmF5LCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgYXJyYXkpOwot
ICAgICAgICBjaGVja0FycmF5LnJlZigpOwotICAgICAgICBOb2RlSW5kZXggY2hlY2tBcnJheUlu
ZGV4ID0gbV9ncmFwaC5zaXplKCk7Ci0gICAgICAgIG1fZ3JhcGguYXBwZW5kKGNoZWNrQXJyYXkp
OwotICAgICAgICBtX2luc2VydGlvblNldC5hcHBlbmQobV9pbmRleEluQmxvY2ssIGNoZWNrQXJy
YXlJbmRleCk7Ci0KICAgICAgICAgaWYgKCFzdG9yYWdlQ2hlY2soYXJyYXlNb2RlKSkKICAgICAg
ICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHJldmlzaW9uIDEzMjc0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MDEsNiArNzAxLDcgQEAgc3RydWN0IE5v
ZGUgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBGb3J3YXJkU3RydWN0dXJlVHJhbnNpdGlv
bldhdGNocG9pbnQ6CisgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNzU5LDYgKzc2MCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBTdHJp
bmdDaGFyQ29kZUF0OgogICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAgICAgICAgIGNhc2UgQXJy
YXlpZnk6CisgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICAgICAgY2FzZSBB
cnJheVB1c2g6CiAgICAgICAgIGNhc2UgQXJyYXlQb3A6CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTc3MCw2ICs3NzIsOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgQXJyYXlNb2RlIGFycmF5
TW9kZSgpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFzQXJyYXlNb2RlKCkpOworICAgICAgICBp
ZiAob3AoKSA9PSBBcnJheWlmeVRvU3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIEFycmF5
TW9kZTo6ZnJvbVdvcmQobV9vcEluZm8yKTsKICAgICAgICAgcmV0dXJuIEFycmF5TW9kZTo6ZnJv
bVdvcmQobV9vcEluZm8pOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDEzMjc0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDcgKzEzOSw4IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhSZWFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0IHwgTm9kZVJl
c3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhHZXRCdXR0ZXJmbHksIE5vZGVSZXN1bHRTdG9yYWdl
KSBcCiAgICAgbWFjcm8oQ2hlY2tBcnJheSwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3Jv
KEFycmF5aWZ5LCBOb2RlUmVzdWx0U3RvcmFnZSB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xv
YmJlcnNXb3JsZCkgXAorICAgIG1hY3JvKEFycmF5aWZ5LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisg
ICAgbWFjcm8oQXJyYXlpZnlUb1N0cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1h
Y3JvKEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAg
bWFjcm8oR2V0QnlPZmZzZXQsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFB1dEJ5T2Zmc2V0
LCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNp
b24gMTMyNzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzNSw3ICs2MzUsOCBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgUGhh
bnRvbUFyZ3VtZW50czoKICAgICAgICAgY2FzZSBDaGVja0FycmF5OgotICAgICAgICBjYXNlIEFy
cmF5aWZ5OiB7CisgICAgICAgIGNhc2UgQXJyYXlpZnk6CisgICAgICAgIGNhc2UgQXJyYXlpZnlU
b1N0cnVjdHVyZTogewogICAgICAgICAgICAgLy8gVGhpcyBub2RlIHNob3VsZCBuZXZlciBiZSB2
aXNpYmxlIGF0IHRoaXMgc3RhZ2Ugb2YgY29tcGlsYXRpb24uIEl0IGlzCiAgICAgICAgICAgICAv
LyBpbnNlcnRlZCBieSBmaXh1cCgpLCB3aGljaCBmb2xsb3dzIHRoaXMgcGhhc2UuCiAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTMyNzQ5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjUzOSw3ICsyNTM5LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAot
ICAgIGNhc2UgQXJyYXlpZnk6IHsKKyAgICBjYXNlIEFycmF5aWZ5OgorICAgIGNhc2UgQXJyYXlp
ZnlUb1N0cnVjdHVyZTogewogICAgICAgICBhcnJheWlmeShub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMzI3NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTcyLDcg
KzI1NzIsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBBcnJheWlmeTogeworICAgIGNh
c2UgQXJyYXlpZnk6CisgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOiB7CiAgICAgICAgIGFy
cmF5aWZ5KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTMyNzQ5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0Myw3ICszNDMsNyBAQCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciogU3BlY3VsYXRpdmVKCiAgICAgfQogfQogCi1KSVRDb21waWxlcjo6SnVtcExpc3QgU3BlY3Vs
YXRpdmVKSVQ6Omp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BSUmVnIHRlbXBHUFIsIEFy
cmF5TW9kZSBhcnJheU1vZGUpCitKSVRDb21waWxlcjo6SnVtcExpc3QgU3BlY3VsYXRpdmVKSVQ6
Omp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BSUmVnIHRlbXBHUFIsIEFycmF5TW9kZSBh
cnJheU1vZGUsIGJvb2wgaW52ZXJ0KQogewogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCByZXN1
bHQ7CiAgICAgCkBAIC0zNTMsMTggKzM1MywzMiBAQCBKSVRDb21waWxlcjo6SnVtcExpc3QgU3Bl
Y3VsYXRpdmVKSVQ6Omp1CiAgICAgICAgICAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoSXNB
cnJheSB8IEluZGV4aW5nU2hhcGVNYXNrKSwgdGVtcEdQUik7CiAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihJc0Fy
cmF5IHwgQ29udGlndW91c1NoYXBlKSkpOworICAgICAgICAgICAgICAgICAgICBpbnZlcnQgPyBN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwgOiBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXBHUFIs
IFRydXN0ZWRJbW0zMihJc0FycmF5IHwgQ29udGlndW91c1NoYXBlKSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4
aW5nU2hhcGVNYXNrKSwgdGVtcEdQUik7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoCi0gICAgICAg
ICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXBHUFIsIFRy
dXN0ZWRJbW0zMihDb250aWd1b3VzU2hhcGUpKSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2gz
MihpbnZlcnQgPyBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwgOiBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihDb250aWd1b3VzU2hhcGUpKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJh
eTo6U2xvd1B1dEFycmF5U3RvcmFnZTogewogICAgICAgICBpZiAoYXJyYXlNb2RlLmlzSlNBcnJh
eSgpKSB7CiAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLmlzU2xvd1B1dCgpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGludmVydCkgeworICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBzbG93ID0gCisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkpOworICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCB0ZW1w
R1BSKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKEFycmF5
U3RvcmFnZVNoYXBlKSwgdGVtcEdQUik7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCB0ZW1wR1BSLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihTbG93UHV0QXJyYXlTdG9y
YWdlU2hhcGUgLSBBcnJheVN0b3JhZ2VTaGFwZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIHNsb3cubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKAogICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoCiAgICAgICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihJc0FycmF5KSkpOwpAQCAtMzc4LDcgKzM5Miw3IEBAIEpJVENvbXBpbGVyOjpKdW1wTGlz
dCBTcGVjdWxhdGl2ZUpJVDo6anUKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1faml0LmFu
ZDMyKFRydXN0ZWRJbW0zMihJc0FycmF5IHwgSW5kZXhpbmdTaGFwZU1hc2spLCB0ZW1wR1BSKTsK
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIoQXJyYXlT
dG9yYWdlU2hhcGUpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoaW52ZXJ0ID8g
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsIDogTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wR1BS
LCBUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFw
ZU1hc2spLCB0ZW1wR1BSKTsKQEAgLTM4NiwxMiArNDAwLDEyIEBAIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBTcGVjdWxhdGl2ZUpJVDo6anUKICAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJ
bW0zMihBcnJheVN0b3JhZ2VTaGFwZSksIHRlbXBHUFIpOwogICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCgKICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCB0ZW1wR1BSLAorICAgICAgICAgICAgICAgICAgICBp
bnZlcnQgPyBNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsIDogTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlLCB0ZW1wR1BSLAogICAgICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoU2xvd1B1dEFy
cmF5U3RvcmFnZVNoYXBlIC0gQXJyYXlTdG9yYWdlU2hhcGUpKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICByZXN1bHQuYXBwZW5kKAotICAgICAgICAgICAgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIo
QXJyYXlTdG9yYWdlU2hhcGUpKSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihpbnZlcnQg
PyBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwgOiBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXBH
UFIsIFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGRlZmF1bHQ6CkBAIC00NzQsMjggKzQ4OCw0NCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjphcnJheWlmeShOb2RlJiBub2RlCiB7CiAgICAgQVNTRVJUKG5vZGUuYXJyYXlNb2RlKCku
ZG9lc0NvbnZlcnNpb24oKSk7CiAgICAgCi0gICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlz
KTsKICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICBHUFJSZWcgc3RydWN0dXJlR1BS
ID0gc3RydWN0dXJlLmdwcigpOworICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmU7CiAgICAgR1BS
UmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwotICAgICAgICAKLSAgICBtX2ppdC5sb2FkUHRyKAot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gSW52
YWxpZEdQUlJlZzsKICAgICAKLSAgICBtX2ppdC5sb2FkOCgKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgp
KSwgdGVtcEdQUik7CisgICAgaWYgKG5vZGUub3AoKSAhPSBBcnJheWlmeVRvU3RydWN0dXJlKSB7
CisgICAgICAgIEdQUlRlbXBvcmFyeSByZWFsU3RydWN0dXJlKHRoaXMpOworICAgICAgICBzdHJ1
Y3R1cmUuYWRvcHQocmVhbFN0cnVjdHVyZSk7CisgICAgICAgIHN0cnVjdHVyZUdQUiA9IHN0cnVj
dHVyZS5ncHIoKTsKKyAgICB9CiAgICAgICAgIAogICAgIC8vIFdlIGNhbiBza2lwIGFsbCB0aGF0
IGNvbWVzIG5leHQgaWYgd2UgYWxyZWFkeSBoYXZlIGFycmF5IHN0b3JhZ2UuCi0gICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlcyA9Ci0gICAgICAgIGp1bXBTbG93Rm9yVW53YW50
ZWRBcnJheU1vZGUodGVtcEdQUiwgbm9kZS5hcnJheU1vZGUoKSk7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGRvbmU7CisgICAgCisgICAgaWYgKG5vZGUub3AoKSA9PSBBcnJheWlmeVRv
U3RydWN0dXJlKSB7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0LmJyYW5jaFdlYWtQdHIoCisg
ICAgICAgICAgICBKSVRDb21waWxlcjo6RXF1YWwsCisgICAgICAgICAgICBKSVRDb21waWxlcjo6
QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAg
IG5vZGUuc3RydWN0dXJlKCkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2ppdC5sb2FkUHRy
KAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CiAgICAgICAgIAotICAgIG1faml0Lmxv
YWRQdHIoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHRlbXBHUFIpOworICAgICAgICBtX2ppdC5sb2FkOCgKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJl
OjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBHUFIpOwogICAgICAgICAKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICBkb25lID0ganVtcFNs
b3dGb3JVbndhbnRlZEFycmF5TW9kZSh0ZW1wR1BSLCBub2RlLmFycmF5TW9kZSgpLCB0cnVlKTsK
KworICAgICAgICAvLyBOZXh0IGNoZWNrIHRoYXQgdGhlIG9iamVjdCBkb2VzIG5vdCBpbnRlcmNl
cHQgaW5kZXhlZCBhY2Nlc3Nlcy4gSWYgaXQgZG9lcywKKyAgICAgICAgLy8gdGhlbiB0aGlzIG1v
ZGUgd29uJ3Qgd29yay4KKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIEJh
ZEluZGV4aW5nVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIE5vTm9k
ZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybykpKTsKKyAgICB9CiAg
ICAgICAgIAotICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7Ci0gICAgCiAgICAgLy8gSWYgd2Un
cmUgYWxsZWdlZGx5IGNyZWF0aW5nIGNvbnRpZ3VvdXMgc3RvcmFnZSBhbmQgdGhlIGluZGV4IGlz
IGJvZ3VzLCB0aGVuCiAgICAgLy8ganVzdCBkb24ndC4KICAgICBpZiAobm9kZS5hcnJheU1vZGUo
KS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMgJiYgcHJvcGVydHlSZWcgIT0gSW52YWxpZEdQ
UlJlZykgewpAQCAtNTA1LDE1ICs1MzUsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjphcnJheWlm
eShOb2RlJiBub2RlCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgcHJvcGVydHlSZWcsIFRydXN0ZWRJbW0zMihNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSkpOwog
ICAgIH0KICAgICAKLSAgICAvLyBOZXh0IGNoZWNrIHRoYXQgdGhlIG9iamVjdCBkb2VzIG5vdCBp
bnRlcmNlcHQgaW5kZXhlZCBhY2Nlc3Nlcy4gSWYgaXQgZG9lcywKLSAgICAvLyB0aGVuIHRoaXMg
bW9kZSB3b24ndCB3b3JrLgotICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgIEJhZEluZGV4
aW5nVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIE5vTm9kZSwKLSAg
ICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwg
U3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKSkpOwotICAgICAgICAKICAgICAvLyBOb3cgY2FsbCBvdXQg
dG8gY3JlYXRlIHRoZSBhcnJheSBzdG9yYWdlLgogICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJz
KHRlbXBHUFIpOwogICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKQEAgLTUy
OSwyNSArNTUwLDM0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KE5vZGUmIG5vZGUK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnModGVtcEdQ
Uik7Ci0KLSAgICAvLyBBbGFzLCB3ZSBuZWVkIHRvIHJlbG9hZCB0aGUgc3RydWN0dXJlIGJlY2F1
c2Ugc2lsZW50IHNwaWxsaW5nIGRvZXMgbm90IHNhdmUKLSAgICAvLyB0ZW1wb3Jhcmllcy4gTm9y
IHdvdWxkIGl0IGJlIHVzZWZ1bCBmb3IgaXQgdG8gZG8gc28uIEVpdGhlciB3YXkgd2UncmUgdGFs
a2luZwotICAgIC8vIGFib3V0IGEgbG9hZC4KLSAgICBtX2ppdC5sb2FkUHRyKAotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgc3RydWN0dXJlR1BSKTsKICAgICAKLSAgICAvLyBGaW5hbGx5LCBjaGVjayB0aGF0IHdlIGhh
dmUgdGhlIGtpbmQgb2YgYXJyYXkgc3RvcmFnZSB0aGF0IHdlIHdhbnRlZCB0byBnZXQuCi0gICAg
Ly8gTm90ZSB0aGF0IHRoaXMgaXMgYSBiYWNrd2FyZHMgc3BlY3VsYXRpb24gY2hlY2ssIHdoaWNo
IHdpbGwgcmVzdWx0IGluIHRoZSAKLSAgICAvLyBieXRlY29kZSBvcGVyYXRpb24gY29ycmVzcG9u
ZGluZyB0byB0aGlzIGFycmF5aWZpY2F0aW9uIGJlaW5nIHJlZXhlY3V0ZWQuCi0gICAgLy8gVGhh
dCdzIGZpbmUsIHNpbmNlIGFycmF5aWZpY2F0aW9uIGlzIG5vdCB1c2VyLXZpc2libGUuCi0gICAg
bV9qaXQubG9hZDgoCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQ
UiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAg
c3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgQmFkSW5kZXhpbmdUeXBlLCBKU1ZhbHVlU291cmNl
Ojp1bmJveGVkQ2VsbChiYXNlUmVnKSwgTm9Ob2RlLAotICAgICAgICBqdW1wU2xvd0ZvclVud2Fu
dGVkQXJyYXlNb2RlKHN0cnVjdHVyZUdQUiwgbm9kZS5hcnJheU1vZGUoKSkpOworICAgIGlmIChu
b2RlLm9wKCkgPT0gQXJyYXlpZnlUb1N0cnVjdHVyZSkgeworICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKAorICAgICAgICAgICAgQmFkSW5kZXhpbmdUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVk
Q2VsbChiYXNlUmVnKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoV2Vha1B0cigK
KyAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAg
SklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
CisgICAgICAgICAgICAgICAgbm9kZS5zdHJ1Y3R1cmUoKSkpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIEFsYXMsIHdlIG5lZWQgdG8gcmVsb2FkIHRoZSBzdHJ1Y3R1cmUgYmVjYXVzZSBzaWxl
bnQgc3BpbGxpbmcgZG9lcyBub3Qgc2F2ZQorICAgICAgICAvLyB0ZW1wb3Jhcmllcy4gTm9yIHdv
dWxkIGl0IGJlIHVzZWZ1bCBmb3IgaXQgdG8gZG8gc28uIEVpdGhlciB3YXkgd2UncmUgdGFsa2lu
ZworICAgICAgICAvLyBhYm91dCBhIGxvYWQuCisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICAKKyAgICAgICAgLy8gRmluYWxseSwgY2hl
Y2sgdGhhdCB3ZSBoYXZlIHRoZSBraW5kIG9mIGFycmF5IHN0b3JhZ2UgdGhhdCB3ZSB3YW50ZWQg
dG8gZ2V0LgorICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBhIGJhY2t3YXJkcyBzcGVjdWxh
dGlvbiBjaGVjaywgd2hpY2ggd2lsbCByZXN1bHQgaW4gdGhlIAorICAgICAgICAvLyBieXRlY29k
ZSBvcGVyYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzIGFycmF5aWZpY2F0aW9uIGJlaW5nIHJl
ZXhlY3V0ZWQuCisgICAgICAgIC8vIFRoYXQncyBmaW5lLCBzaW5jZSBhcnJheWlmaWNhdGlvbiBp
cyBub3QgdXNlci12aXNpYmxlLgorICAgICAgICBtX2ppdC5sb2FkOCgKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5
cGVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisg
ICAgICAgICAgICBCYWRJbmRleGluZ1R5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJh
c2VSZWcpLCBOb05vZGUsCisgICAgICAgICAgICBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2Rl
KHN0cnVjdHVyZUdQUiwgbm9kZS5hcnJheU1vZGUoKSkpOworICAgIH0KICAgICAKICAgICBkb25l
LmxpbmsoJm1faml0KTsKLSAgICBzdG9yYWdlUmVzdWx0KHRlbXBHUFIsIG1fY29tcGlsZUluZGV4
KTsKKyAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmFycmF5aWZ5KE5vZGUmIG5vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxMzI3NDkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
MTUsNyArMjQxNSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3Jp
cHRvciogdHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXlNb2RlKTsKICAgICAKLSAgICBKSVRDb21w
aWxlcjo6SnVtcExpc3QganVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZShHUFJSZWcgdGVtcFdp
dGhJbmRleGluZ1R5cGVSZWcsIEFycmF5TW9kZSk7CisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0
IGp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BSUmVnIHRlbXBXaXRoSW5kZXhpbmdUeXBl
UmVnLCBBcnJheU1vZGUsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwogICAgIHZvaWQgY2hlY2tBcnJh
eShOb2RlJik7CiAgICAgdm9pZCBhcnJheWlmeShOb2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJl
ZyBwcm9wZXJ0eVJlZyk7CiAgICAgdm9pZCBhcnJheWlmeShOb2RlJik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDEz
Mjc0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3MSw2ICsyNzEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UuZ2V0KCk7IH0KICAgICAgICAg
dm9pZCogYWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmUoKSB7IHJldHVybiAmbV9hcnJheVN0cnVjdHVy
ZTsgfQogICAgICAgICB2b2lkKiBhZGRyZXNzT2ZBcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3Jh
Z2UoKSB7IHJldHVybiAmbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2U7IH0KKyAgICAg
ICAgYm9vbCBpc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmUgPT0gbV9hcnJheVN0cnVjdHVy
ZS5nZXQoKSB8fCBzdHJ1Y3R1cmUgPT0gbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2Uu
Z2V0KCk7CisgICAgICAgIH0KICAgICAgICAgU3RydWN0dXJlKiBib29sZWFuT2JqZWN0U3RydWN0
dXJlKCkgY29uc3QgeyByZXR1cm4gbV9ib29sZWFuT2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CiAg
ICAgICAgIFN0cnVjdHVyZSogY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBT
dHJ1Y3R1cmUqIGNhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2Nh
bGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTMyNzQ5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQzLDYgKzU0MywxNSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0
CiAgICAgdW5zaWduZWQgYXR0cmlidXRlcyA9IHRvQXR0cmlidXRlcyh0cmFuc2l0aW9uS2luZCk7
CiAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IG5ld0luZGV4aW5nVHlwZShzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSwgdHJhbnNpdGlvbktpbmQpOwogICAg
IAorICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1cmUtPmdsb2JhbE9i
amVjdCgpOworICAgIGlmIChzdHJ1Y3R1cmUgPT0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVy
ZSgpKSB7CisgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGdsb2JhbE9iamVjdC0+YXJy
YXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCk7CisgICAgICAgIGlmICh0cmFuc2l0aW9uLT5p
bmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdUeXBlKSB7CisgICAgICAg
ICAgICBzdHJ1Y3R1cmUtPm5vdGlmeVRyYW5zaXRpb25Gcm9tVGhpc1N0cnVjdHVyZSgpOworICAg
ICAgICAgICAgcmV0dXJuIHRyYW5zaXRpb247CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAg
aWYgKFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRp
b25UYWJsZS5nZXQoMCwgYXR0cmlidXRlcykpIHsKICAgICAgICAgQVNTRVJUKGV4aXN0aW5nVHJh
bnNpdGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA9PSBhdHRyaWJ1dGVzKTsKICAgICAgICAg
QVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgp
ID09IGluZGV4aW5nVHlwZSk7Cg==
</data>
<flag name="review"
          id="184952"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>