<?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>37675</bug_id>
          
          <creation_ts>2010-04-15 14:21:20 -0700</creation_ts>
          <short_desc>Remove casts/constructors to/from JSC::UString type from WebCore::String</short_desc>
          <delta_ts>2010-04-16 13:26:28 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>213050</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-04-15 14:21:20 -0700</bug_when>
    <thetext>WebCore&apos;s strings should not know about JSC::UString, this should be abstracted away in the bindings.  Add explicit conversion methods rather than relying on overloaded cast operators / constructors being implicitly called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213052</commentid>
    <comment_count>1</comment_count>
      <attachid>53477</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-04-15 14:25:53 -0700</bug_when>
    <thetext>Created attachment 53477
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213054</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-15 14:29:19 -0700</bug_when>
    <thetext>Attachment 53477 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/bindings/js/JSDOMBinding.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/js/ScriptProfiler.cpp:31:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 65 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>213058</commentid>
    <comment_count>3</comment_count>
      <attachid>53477</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-15 14:40:42 -0700</bug_when>
    <thetext>Comment on attachment 53477
The patch

I like the long names since it means we can find them all easily if we want to change it.  r=me pending perf.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213087</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-15 15:24:17 -0700</bug_when>
    <thetext>Attachment 53477 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/1688222</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213098</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-15 16:22:17 -0700</bug_when>
    <thetext>Attachment 53477 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/1658431</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213189</commentid>
    <comment_count>6</comment_count>
      <attachid>53508</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-04-15 20:39:01 -0700</bug_when>
    <thetext>Created attachment 53508
Hopefully slightly better patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213370</commentid>
    <comment_count>7</comment_count>
      <attachid>53508</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-04-16 12:45:40 -0700</bug_when>
    <thetext>Comment on attachment 53508
Hopefully slightly better patch!

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213391</commentid>
    <comment_count>8</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-04-16 13:26:28 -0700</bug_when>
    <thetext>Transmitting file data .........................................................................
Committed revision 57738.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53477</attachid>
            <date>2010-04-15 14:25:53 -0700</date>
            <delta_ts>2010-04-15 20:39:01 -0700</delta_ts>
            <desc>The patch</desc>
            <filename>patch.ustringToString.txt</filename>
            <type>text/plain</type>
            <size>78768</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzY3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTk3IEBACisyMDEwLTA0LTE1ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xv
dWdoQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc2NzUKKyAg
ICAgICAgUmVtb3ZlIGNhc3RzL2NvbnN0cnVjdG9ycyB0by9mcm9tIEpTQzo6VVN0cmluZyB0eXBl
IGZyb20gV2ViQ29yZTo6U3RyaW5nCisgICAgICAgIAorICAgICAgICBXZWJDb3JlJ3Mgc3RyaW5n
cyBzaG91bGQgbm90IGtub3cgYWJvdXQgSlNDOjpVU3RyaW5nLCB0aGlzIHNob3VsZCBiZSBhYnN0
cmFjdGVkCisgICAgICAgIGF3YXkgaW4gdGhlIGJpbmRpbmdzLiAgQWRkIGV4cGxpY2l0IGNvbnZl
cnNpb24gbWV0aG9kcyByYXRoZXIgdGhhbiByZWx5aW5nIG9uCisgICAgICAgIG92ZXJsb2FkZWQg
Y2FzdCBvcGVyYXRvcnMgLyBjb25zdHJ1Y3RvcnMgYmVpbmcgaW1wbGljaXRseSBjYWxsZWQuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBvbmx5IGNoYW5nZXMgdGhlIGNsYXNzIFN0cmluZywgb25jZSB0
aGlzIGhhcyBsYW5kZWQgU3RyaW5nSW1wbCwgYW5kCisgICAgICAgIGhvcGVmdWxseSBBdG9taWNT
dHJpbmcgdG9vLCBzaG91bGQgZm9sbG93IHN1aXQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRz
OgorICAgICAgICAgICAgV2ViQ29yZTo6aWRlbnRpZmllclRvU3RyaW5nCisgICAgICAgICAgICBX
ZWJDb3JlOjp1c3RyaW5nVG9TdHJpbmcKKyAgICAgICAgICAgIFdlYkNvcmU6OnN0cmluZ1RvVVN0
cmluZworCisgICAgICAgIC0gdG8gSlNET01CaW5kaW5ncy5oLCBhbmQgdXBkYXRlcyBjb2RlIHRv
IGNhbGwgdGhlc2UgbWV0aG9kcy4KKworICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHA6CisgICAg
ICAgICogV2ViQ29yZS5vcmRlcjoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRT
b3VyY2VQcm92aWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkU2NyaXB0U291cmNlUHJv
dmlkZXI6OkNhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0F1ZGlvQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0QXVk
aW8pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NTU1N0eWxlRGVjbGFyYXRpb246Om5hbWVHZXR0ZXIp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSFRNTENhbnZhc1N0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZUNvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2VG
cm9tUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c2V0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpmaWxsVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c3Ryb2tlVGV4dCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDbGlwYm9hcmQ6OnR5cGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTQ2xpcGJvYXJkOjpjbGVhckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNDbGlw
Ym9hcmQ6OmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNDbGlwYm9hcmQ6OnNldERhdGEp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpsb29rdXBOYW1lc3BhY2VV
UkkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjppZGVudGlmaWVyVG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6dXN0cmluZ1Rv
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnN0cmluZ1RvVVN0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjp2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjp2
YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OnJlcG9ydEV4Y2VwdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0RPTUZvcm1EYXRhOjphcHBlbmQpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5hbWVkSXRlbUdldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6c2V0TG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SlNET01XaW5kb3c6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNEYXRhYmFzZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RhdGFiYXNl
OjpjaGFuZ2VWZXJzaW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRG9jdW1lbnQ6OnNldExvY2F0aW9uKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNF
dmVudFNvdXJjZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEV2
ZW50U291cmNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbGxIVE1MQWxsQ29sbGVjdGlvbik6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0hUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNhbGxIVE1MQ29sbGVjdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRG9jdW1l
bnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6Om5hbWVHZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZG9jdW1lbnRXcml0ZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGVJbmplY3RlZFNjcmlwdCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDb250ZXh0TWVudSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU0xhenlFdmVudExpc3RlbmVyOjppbml0aWFsaXplSlNGdW5jdGlvbik6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xv
Y2F0aW9uOjpzZXRIcmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldFByb3Rv
Y29sKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldEhvc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0SG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNM
b2NhdGlvbjo6c2V0UGF0aG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0
U2VhcmNoKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldEhhc2gpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6cmVwbGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0xv
Y2F0aW9uOjphc3NpZ24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZUV2ZW50Ojppbml0TWVzc2FnZUV2
ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05hbWVkTm9kZU1hcEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU05hbWVkTm9kZU1hcDo6Y2FuR2V0SXRlbXNGb3JOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTTmFtZWROb2RlTWFwOjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU09wdGlvbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnN0cnVjdEhUTUxPcHRpb25FbGVtZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NRTFJl
c3VsdFNldFJvd0xpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTUUxSZXN1bHRT
ZXRSb3dMaXN0OjppdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9u
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVT
cWwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU2hhcmVkV29ya2VyQ29uc3RydWN0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0U2hhcmVkV29ya2VyKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTdG9y
YWdlOjpjYW5HZXRJdGVtc0Zvck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNTdG9yYWdlOjpu
YW1lR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU3RvcmFnZTo6ZGVsZXRlUHJvcGVydHkp
OgorICAgICAgICAoV2ViQ29yZTo6SlNTdG9yYWdlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTU3RvcmFnZTo6cHV0RGVsZWdhdGUpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTU3R5bGVTaGVldExpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNT
dHlsZVNoZWV0TGlzdDo6Y2FuR2V0SXRlbXNGb3JOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
U3R5bGVTaGVldExpc3Q6Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2Vi
S2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0
V2ViS2l0Q1NTTWF0cml4KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYlNvY2tldENvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdFdlYlNvY2tldCk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNXZWJTb2NrZXQ6OnNlbmQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0V29ya2VyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNXb3JrZXJDb250ZXh0OjppbXBvcnRTY3JpcHRzKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1M
SHR0cFJlcXVlc3Q6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6
c2V0UmVxdWVzdEhlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0Ojpz
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVlc3Q6Om92ZXJyaWRlTWltZVR5
cGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1hTTFRQcm9jZXNzb3I6OnNldFBhcmFtZXRlcik6CisgICAgICAg
IChXZWJDb3JlOjpKU1hTTFRQcm9jZXNzb3I6OmdldFBhcmFtZXRlcik6CisgICAgICAgIChXZWJD
b3JlOjpKU1hTTFRQcm9jZXNzb3I6OnJlbW92ZVBhcmFtZXRlcik6CisgICAgICAgICogYmluZGlu
Z3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZEFj
dGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWxsRnJhbWUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbEZyYW1lOjpTY3JpcHRDYWxsRnJhbWUpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxkKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRE
ZWJ1Z1NlcnZlcjo6aGFzQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1
Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hGYWlsZWRUb1BhcnNlU291cmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzb3VyY2VQYXJzZWQpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RXZl
bnRMaXN0ZW5lckhhbmRsZXJCb2R5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRGdW5j
dGlvbkNhbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RnVuY3Rpb25DYWxsOjphcHBl
bmRBcmd1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RnVuY3Rpb25DYWxsOjpjb25zdHJ1Y3QpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRPYmplY3Q6OnNldCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0UHJvZmlsZXI6OnN0YXJ0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdFByb2ZpbGVyOjpzdG9wKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
Y3JpcHRTdHJpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0cmluZzo6b3BlcmF0b3Ig
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0cmluZzo6dXN0cmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRTdHJpbmc6Om9wZXJhdG9yKz0pOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpn
ZXRTdHJpbmcpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmg6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6dG9TdHJpbmcpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVk
T2JqZWN0OjpzZXQpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXppbmdUcmVlV2Fsa2VyOjpj
b252ZXJ0SWZUZXJtaW5hbCk6CisgICAgICAgIChXZWJDb3JlOjpEZXNlcmlhbGl6aW5nVHJlZVdh
bGtlcjo6cHV0UHJvcGVydHkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1N0cmluZ1NvdXJjZVBy
b3ZpZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdTb3VyY2VQcm92aWRlcjo6U3RyaW5n
U291cmNlUHJvdmlkZXIpOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0
Lm1tOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgY2FsbFdlYlNjcmlwdE1ldGhvZDp3aXRo
QXJndW1lbnRzOl0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgc2V0VmFsdWU6Zm9yS2V5
Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgdmFsdWVGb3JLZXk6XSk6CisgICAgICAg
ICgtW1dlYlNjcmlwdE9iamVjdCByZW1vdmVXZWJTY3JpcHRLZXk6XSk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICogYnJpZGdlL0lkZW50
aWZpZXJSZXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWRlbnRpZmllclJlcDo6Z2V0KToKKyAg
ICAgICAgKiBicmlkZ2UvYy9jX3V0aWxpdHkuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
aWRlbnRpZmllckZyb21OUElkZW50aWZpZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OnNjcmlwdEltcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OmFkZFByb2ZpbGVGaW5pc2hlZE1lc3NhZ2VUb0NvbnNvbGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6Y3JlYXRlUHJvZmlsZUhlYWRlcik6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clJlc291cmNlOjpzb3VyY2VTdHJpbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9KYXZhU2NyaXB0
Q2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHRDYWxsRnJhbWU6OmZ1
bmN0aW9uTmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vS1VSTC5oOgorICAgICAgICAoV2ViQ29y
ZTo6S1VSTDo6b3BlcmF0b3IgY29uc3QgU3RyaW5nJik6CisgICAgICAgICogcGxhdGZvcm0vdGV4
dC9BdG9taWNTdHJpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljU3RyaW5nOjpvcGVy
YXRvciBVU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5oOgor
ICAgICAgICAqIHBsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L1N0cmluZy5jcHA6CisKIDIwMTAtMDQtMTUgIENocmlzIEZsZWl6YWNoICA8Y2Zs
ZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBCZXRoIERha2luLgpJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS5iYXNlLmV4cAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYxNCw3ICs2MTQsNiBAQCBfX1pON1dlYkNvcmU2U3RyaW5nQzFF
UDhOU1N0cmluZwogX19aTjdXZWJDb3JlNlN0cmluZ0MxRVBLMTBfX0NGU3RyaW5nCiBfX1pON1dl
YkNvcmU2U3RyaW5nQzFFUEtjCiBfX1pON1dlYkNvcmU2U3RyaW5nQzFFUEtjagotX19aTjdXZWJD
b3JlNlN0cmluZ0MxRVJLTjNKU0M3VVN0cmluZ0UKIF9fWk43V2ViQ29yZTZXaWRnZXQxMnNldEZy
YW1lUmVjdEVSS05TXzdJbnRSZWN0RQogX19aTjdXZWJDb3JlNldpZGdldDE2cmVtb3ZlRnJvbVBh
cmVudEV2CiBfX1pON1dlYkNvcmU2V2lkZ2V0MjByZXRhaW5QbGF0Zm9ybVdpZGdldEV2CkBAIC05
OTEsNyArOTkwLDYgQEAgX19aTks3V2ViQ29yZTZTdHJpbmc0dXRmOEV2CiBfX1pOSzdXZWJDb3Jl
NlN0cmluZzZsZW5ndGhFdgogX19aTks3V2ViQ29yZTZTdHJpbmc3aXNFbXB0eUV2CiBfX1pOSzdX
ZWJDb3JlNlN0cmluZzlzdWJzdHJpbmdFamoKLV9fWk5LN1dlYkNvcmU2U3RyaW5nY3ZOM0pTQzdV
U3RyaW5nRUV2CiBfX1pOSzdXZWJDb3JlNldpZGdldDIzY29udmVydFRvQ29udGFpbmluZ1ZpZXdF
UktOU183SW50UmVjdEUKIF9fWk5LN1dlYkNvcmU2V2lkZ2V0MjNjb252ZXJ0VG9Db250YWluaW5n
Vmlld0VSS05TXzhJbnRQb2ludEUKIF9fWk5LN1dlYkNvcmU2V2lkZ2V0MjVjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3RVJLTlNfN0ludFJlY3RFCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUub3JkZXIK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLm9yZGVyCShyZXZpc2lvbiA1NzY2MykKKysr
IFdlYkNvcmUvV2ViQ29yZS5vcmRlcgkod29ya2luZyBjb3B5KQpAQCAtMjIwNCw3ICsyMjA0LDYg
QEAgX19aTjdXZWJDb3JlMTNTY3JpcHRFbGVtZW50MjFmaW5pc2hQYXJzaQogX19aTks3V2ViQ29y
ZTE3U2NyaXB0RWxlbWVudERhdGExM3NjcmlwdENvbnRlbnRFdgogX19aTjdXZWJDb3JlMTVTZWdt
ZW50ZWRTdHJpbmc3cHJlcGVuZEVSS1MwXwogX19aTjdXZWJDb3JlMTVTZWdtZW50ZWRTdHJpbmc3
cHJlcGVuZEVSS05TXzE4U2VnbWVudGVkU3Vic3RyaW5nRQotX19aTks3V2ViQ29yZTZTdHJpbmdj
dk4zSlNDN1VTdHJpbmdFRXYKIF9fWk5LN1dlYkNvcmUyMFN0cmluZ1NvdXJjZVByb3ZpZGVyNmxl
bmd0aEV2CiBfX1pON1dlYkNvcmUxM0hUTUxUb2tlbml6ZXIxNXNjcmlwdEV4ZWN1dGlvbkVSS05T
XzE2U2NyaXB0U291cmNlQ29kZUVOUzBfNVN0YXRlRQogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRl
cjEzZXhlY3V0ZVNjcmlwdEVSS05TXzE2U2NyaXB0U291cmNlQ29kZUUKQEAgLTIyODAsNyArMjI3
OSw2IEBAIF9fWk4zSlNDOEJpbmRpbmdzMTBSb290T2JqZWN0OWdjUHJvdGVjdEUKIF9fWk5LM1dU
RjlIYXNoVGFibGVJUE4zSlNDOEpTT2JqZWN0RVN0NHBhaXJJUzNfakVOU18xOFBhaXJGaXJzdEV4
dHJhY3RvcklTNV9FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhh
c2hUcmEKIF9fWk4zV1RGN0hhc2hNYXBJUE4zSlNDOEpTT2JqZWN0RWpOU183UHRySGFzaElTM19F
RU5TXzEwSGFzaFRyYWl0c0lTM19FRU5TNl9JakVFRTNhZGRFUktTM19SS2oKIF9fWk4zV1RGOUhh
c2hUYWJsZUlQTjNKU0M4SlNPYmplY3RFU3Q0cGFpcklTM19qRU5TXzE4UGFpckZpcnN0RXh0cmFj
dG9ySVM1X0VFTlNfN1B0ckhhc2hJUzNfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRy
YWkKLV9fWk43V2ViQ29yZTZTdHJpbmdDMUVSS04zSlNDN1VTdHJpbmdFCiBfX1pON1dlYkNvcmU2
U3RyaW5nQzJFUktOM0pTQzdVU3RyaW5nRQogX19aTks3V2ViQ29yZTIwU3RyaW5nU291cmNlUHJv
dmlkZXI0ZGF0YUV2CiBfX1pOSzdXZWJDb3JlMTVKU0RPTVdpbmRvd0Jhc2UxN3N1cHBvcnRzUHJv
ZmlsaW5nRXYKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0U291cmNlUHJv
dmlkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0NhY2hlZFNjcmlwdFNv
dXJjZVByb3ZpZGVyLmgJKHJldmlzaW9uIDU3NjYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9D
YWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIENhY2hlZFNj
cmlwdFNvdXJjZVByb3ZpZGVyKENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQotICAgICAgICAg
ICAgOiBTY3JpcHRTb3VyY2VQcm92aWRlcihjYWNoZWRTY3JpcHQtPnVybCgpKQorICAgICAgICAg
ICAgOiBTY3JpcHRTb3VyY2VQcm92aWRlcihzdHJpbmdUb1VTdHJpbmcoY2FjaGVkU2NyaXB0LT51
cmwoKSkpCiAgICAgICAgICAgICAsIG1fY2FjaGVkU2NyaXB0KGNhY2hlZFNjcmlwdCkKICAgICAg
ICAgewogICAgICAgICAgICAgbV9jYWNoZWRTY3JpcHQtPmFkZENsaWVudCh0aGlzKTsKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDU3
NjYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRpYyBKU09iamVjdCogY29uc3RydWN0QXVk
aW8oRXhlY1N0YXQKICAgICAvLyByYXRoZXIgdGhhbiBsb29raW5nIGF0IGFyZ3Muc2l6ZS4KICAg
ICBTdHJpbmcgc3JjOwogICAgIGlmIChhcmdzLnNpemUoKSA+IDApCi0gICAgICAgIHNyYyA9IGFy
Z3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIHNyYyA9IHVzdHJpbmdUb1N0cmluZyhh
cmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKTsKICAgICByZXR1cm4gYXNPYmplY3QodG9KUyhleGVj
LCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwKICAgICAgICAgSFRNTEF1ZGlvRWxlbWVu
dDo6Y3JlYXRlRm9ySlNDb25zdHJ1Y3Rvcihkb2N1bWVudCwgc3JjKSkpOwogfQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNw
cAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNs
YXJhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw3ICsxNjUsNyBAQCBKU1Zh
bHVlIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6bmFtZUdldHRlCiAKICAgICAvLyBNYWtlIHRoZSBT
VkcgJ2ZpbHRlcicgYXR0cmlidXRlIHVuZGV0ZWN0YWJsZSwgdG8gYXZvaWQgY29uZnVzaW9uIHdp
dGggdGhlIElFICdmaWx0ZXInIGF0dHJpYnV0ZS4KICAgICBpZiAocHJvcGVydHlOYW1lID09ICJm
aWx0ZXIiKQotICAgICAgICByZXR1cm4gU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQ6OmNyZWF0ZShleGVjLCB0aGlzT2JqLT5pbXBsKCktPmdldFByb3BlcnR5VmFsdWUocHJv
cCkpOworICAgICAgICByZXR1cm4gU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQ6OmNyZWF0ZShleGVjLCBzdHJpbmdUb1VTdHJpbmcodGhpc09iai0+aW1wbCgpLT5nZXRQcm9w
ZXJ0eVZhbHVlKHByb3ApKSk7CiAKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgdGhpc09iai0+
aW1wbCgpLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3ApKTsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3Bw
CShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHN0
YXRpYyBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBDYW4KIHN0YXRpYyBQYXNzUmVmUHRy
PENhbnZhc1N0eWxlPiB0b0hUTUxDYW52YXNTdHlsZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBDYW52
YXNTdHlsZTo6Y3JlYXRlKGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUoZXhlYykpOworICAgICAgICBy
ZXR1cm4gQ2FudmFzU3R5bGU6OmNyZWF0ZSh1c3RyaW5nVG9TdHJpbmcoYXNTdHJpbmcodmFsdWUp
LT52YWx1ZShleGVjKSkpOwogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKQEAgLTEwMiwx
MyArMTAyLDEzIEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEYKICAg
ICBzd2l0Y2ggKGFyZ3Muc2l6ZSgpKSB7CiAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgIGlm
IChhcmdzLmF0KDApLmlzU3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0Rmls
bENvbG9yKGFzU3RyaW5nKGFyZ3MuYXQoMCkpLT52YWx1ZShleGVjKSk7CisgICAgICAgICAgICAg
ICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHVzdHJpbmdUb1N0cmluZyhhc1N0cmluZyhhcmdzLmF0
KDApKS0+dmFsdWUoZXhlYykpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBj
b250ZXh0LT5zZXRGaWxsQ29sb3IoYXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICBpZiAoYXJncy5hdCgwKS5p
c1N0cmluZygpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihhc1N0cmlu
ZyhhcmdzLmF0KDApKS0+dmFsdWUoZXhlYyksIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSk7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHVzdHJpbmdUb1N0cmluZyhhc1N0
cmluZyhhcmdzLmF0KDApKS0+dmFsdWUoZXhlYykpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYykp
OwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xv
cihhcmdzLmF0KDApLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSk7CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTEzOSwxMyArMTM5LDEzIEBAIEpTVmFsdWUgSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnNldFMKICAgICBzd2l0Y2ggKGFyZ3Muc2l6ZSgpKSB7CiAgICAg
ICAgIGNhc2UgMToKICAgICAgICAgICAgIGlmIChhcmdzLmF0KDApLmlzU3RyaW5nKCkpCi0gICAg
ICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoYXNTdHJpbmcoYXJncy5hdCgwKSkt
PnZhbHVlKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcih1
c3RyaW5nVG9TdHJpbmcoYXNTdHJpbmcoYXJncy5hdCgwKSktPnZhbHVlKGV4ZWMpKSk7CiAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoYXJn
cy5hdCgwKS50b0Zsb2F0KGV4ZWMpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IDI6CiAgICAgICAgICAgICBpZiAoYXJncy5hdCgwKS5pc1N0cmluZygpKQotICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGFzU3RyaW5nKGFyZ3MuYXQoMCkpLT52YWx1ZShl
eGVjKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5zZXRTdHJva2VDb2xvcih1c3RyaW5nVG9TdHJpbmcoYXNTdHJpbmcoYXJncy5hdCgwKSktPnZh
bHVlKGV4ZWMpKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpKTsKICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihhcmdzLmF0KDApLnRvRmxv
YXQoZXhlYyksIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSk7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTI4Miw3ICsyODIsNyBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpk
cmF3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5hdCgzKS50b0Zsb2F0KGV4
ZWMpLCBhcmdzLmF0KDQpLnRvRmxvYXQoZXhlYyksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXJncy5hdCg1KS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDYpLnRvRmxvYXQoZXhlYyks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5hdCg3KS50b0Zsb2F0KGV4ZWMp
LCBhcmdzLmF0KDgpLnRvRmxvYXQoZXhlYyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXJncy5hdCg5KS50b1N0cmluZyhleGVjKSk7ICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDkpLnRvU3RyaW5nKGV4ZWMpKSk7ICAg
IAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOyAgICAKIH0KIApAQCAtMjk4LDcgKzI5OCw3IEBA
IEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFMKICAgICAgICAgY2FzZSA0
OgogICAgICAgICAgICAgaWYgKGFyZ3MuYXQoMykuaXNTdHJpbmcoKSkKICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRTaGFkb3coYXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDEp
LnRvRmxvYXQoZXhlYyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Mu
YXQoMikudG9GbG9hdChleGVjKSwgYXNTdHJpbmcoYXJncy5hdCgzKSktPnZhbHVlKGV4ZWMpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5hdCgyKS50b0Zsb2F0KGV4
ZWMpLCB1c3RyaW5nVG9TdHJpbmcoYXNTdHJpbmcoYXJncy5hdCgzKSktPnZhbHVlKGV4ZWMpKSk7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KGFy
Z3MuYXQoMCkudG9GbG9hdChleGVjKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYyksIGFy
Z3MuYXQoMykudG9GbG9hdChleGVjKSk7CkBAIC0zMDYsNyArMzA2LDcgQEAgSlNWYWx1ZSBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0UwogICAgICAgICBjYXNlIDU6CiAgICAgICAgICAg
ICBpZiAoYXJncy5hdCgzKS5pc1N0cmluZygpKQogICAgICAgICAgICAgICAgIGNvbnRleHQtPnNl
dFNoYWRvdyhhcmdzLmF0KDApLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMSkudG9GbG9hdChleGVj
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5hdCgyKS50b0Zsb2F0
KGV4ZWMpLCBhc1N0cmluZyhhcmdzLmF0KDMpKS0+dmFsdWUoZXhlYyksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwgdXN0cmluZ1Rv
U3RyaW5nKGFzU3RyaW5nKGFyZ3MuYXQoMykpLT52YWx1ZShleGVjKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoNCkudG9GbG9hdChleGVjKSk7CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KGFyZ3MuYXQoMCku
dG9GbG9hdChleGVjKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLApAQCAtMzkxLDkgKzM5MSw5
IEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGwKICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogICAgIAogICAgIGlmIChhcmdzLnNp
emUoKSA9PSA0KQotICAgICAgICBjb250ZXh0LT5maWxsVGV4dChhcmdzLmF0KDApLnRvU3RyaW5n
KGV4ZWMpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMikudG9GbG9hdChleGVj
KSwgYXJncy5hdCgzKS50b0Zsb2F0KGV4ZWMpKTsKKyAgICAgICAgY29udGV4dC0+ZmlsbFRleHQo
dXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpLCBhcmdzLmF0KDEpLnRv
RmxvYXQoZXhlYyksIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwgYXJncy5hdCgzKS50b0Zsb2F0
KGV4ZWMpKTsKICAgICBlbHNlCi0gICAgICAgIGNvbnRleHQtPmZpbGxUZXh0KGFyZ3MuYXQoMCku
dG9TdHJpbmcoZXhlYyksIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSwgYXJncy5hdCgyKS50b0Zs
b2F0KGV4ZWMpKTsKKyAgICAgICAgY29udGV4dC0+ZmlsbFRleHQodXN0cmluZ1RvU3RyaW5nKGFy
Z3MuYXQoMCkudG9TdHJpbmcoZXhlYykpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksIGFyZ3Mu
YXQoMikudG9GbG9hdChleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKQEAg
LTQwOSw5ICs0MDksOSBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJv
CiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKICAgICAKICAg
ICBpZiAoYXJncy5zaXplKCkgPT0gNCkKLSAgICAgICAgY29udGV4dC0+c3Ryb2tlVGV4dChhcmdz
LmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQo
MikudG9GbG9hdChleGVjKSwgYXJncy5hdCgzKS50b0Zsb2F0KGV4ZWMpKTsKKyAgICAgICAgY29u
dGV4dC0+c3Ryb2tlVGV4dCh1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgwKS50b1N0cmluZyhleGVj
KSksIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSwgYXJncy5hdCgyKS50b0Zsb2F0KGV4ZWMpLCBh
cmdzLmF0KDMpLnRvRmxvYXQoZXhlYykpOwogICAgIGVsc2UKLSAgICAgICAgY29udGV4dC0+c3Ry
b2tlVGV4dChhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhl
YyksIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSk7CisgICAgICAgIGNvbnRleHQtPnN0cm9rZVRl
eHQodXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpLCBhcmdzLmF0KDEp
LnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSk7CiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDbGlwYm9hcmRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDbGlwYm9hcmRD
dXN0b20uY3BwCShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDbGlw
Ym9hcmRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIEpTVmFsdWUg
SlNDbGlwYm9hcmQ6OnR5cGVzKEV4ZWNTdGF0ZSogZXgKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBsaXN0OwogICAgIEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdHlwZXMu
ZW5kKCk7CiAgICAgZm9yIChIYXNoU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdHlw
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBsaXN0LmFwcGVuZChqc1N0cmlu
ZyhleGVjLCBVU3RyaW5nKCppdCkpKTsKKyAgICAgICAgbGlzdC5hcHBlbmQoanNTdHJpbmcoZXhl
Yywgc3RyaW5nVG9VU3RyaW5nKCppdCkpKTsKICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhl
YywgbGlzdCk7CiB9CiAKQEAgLTczLDcgKzczLDcgQEAgSlNWYWx1ZSBKU0NsaXBib2FyZDo6Y2xl
YXJEYXRhKEV4ZWNTdGF0ZQogICAgIH0KIAogICAgIGlmIChhcmdzLnNpemUoKSA9PSAxKSB7Ci0g
ICAgICAgIGNsaXBib2FyZC0+Y2xlYXJEYXRhKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOwor
ICAgICAgICBjbGlwYm9hcmQtPmNsZWFyRGF0YSh1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgwKS50
b1N0cmluZyhleGVjKSkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAK
QEAgLTkwLDcgKzkwLDcgQEAgSlNWYWx1ZSBKU0NsaXBib2FyZDo6Z2V0RGF0YShFeGVjU3RhdGUq
IAogICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0gaW1wbCgpOwogCiAgICAgYm9vbCBzdWNjZXNz
OwotICAgIFN0cmluZyByZXN1bHQgPSBjbGlwYm9hcmQtPmdldERhdGEoYXJncy5hdCgwKS50b1N0
cmluZyhleGVjKSwgc3VjY2Vzcyk7CisgICAgU3RyaW5nIHJlc3VsdCA9IGNsaXBib2FyZC0+Z2V0
RGF0YSh1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSksIHN1Y2Nlc3Mp
OwogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKQEAg
LTEwNSw3ICsxMDUsNyBAQCBKU1ZhbHVlIEpTQ2xpcGJvYXJkOjpzZXREYXRhKEV4ZWNTdGF0ZSog
CiAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDIpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFN5bnRheEVycm9yLCAic2V0RGF0YTogSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIik7
CiAKLSAgICByZXR1cm4ganNCb29sZWFuKGNsaXBib2FyZC0+c2V0RGF0YShhcmdzLmF0KDApLnRv
U3RyaW5nKGV4ZWMpLCBhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgcmV0dXJuIGpz
Qm9vbGVhbihjbGlwYm9hcmQtPnNldERhdGEodXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9T
dHJpbmcoZXhlYykpLCB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgxKS50b1N0cmluZyhleGVjKSkp
KTsKIH0KIAogSlNWYWx1ZSBKU0NsaXBib2FyZDo6c2V0RHJhZ0ltYWdlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0
b21YUGF0aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05OCw3ICs5OCw3IEBAIFN0cmluZyBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmEK
ICAgICAgICAgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihleGVjKTsKICAgICBlbHNlIHsKICAgICAg
ICAgaWYgKCFyZXR2YWwuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJlc3VsdCA9
IHJldHZhbC50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHVzdHJpbmdUb1N0
cmluZyhyZXR2YWwudG9TdHJpbmcoZXhlYykpOwogICAgIH0KIAogICAgIERvY3VtZW50Ojp1cGRh
dGVTdHlsZUZvckFsbERvY3VtZW50cygpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5k
aW5nLmNwcAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5MiwxOCArNDkyLDM3IEBAIEpTVmFsdWUganNT
dHJpbmdPckZhbHNlKEV4ZWNTdGF0ZSogZXhlYywKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywg
dXJsLnN0cmluZygpKTsKIH0KIAotVVN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCitTdHJpbmcgaWRlbnRpZmllclRvU3RyaW5n
KGNvbnN0IElkZW50aWZpZXImIGkpCiB7Ci0gICAgaWYgKHZhbHVlLmlzTnVsbCgpKQotICAgICAg
ICByZXR1cm4gVVN0cmluZygpOwotICAgIHJldHVybiB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAg
ICBpZiAoaS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBT
dHJpbmdJbXBsOjpjcmVhdGUoaS51c3RyaW5nKCkpOwogfQogCi1VU3RyaW5nIHZhbHVlVG9TdHJp
bmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
KQorU3RyaW5nIHVzdHJpbmdUb1N0cmluZyhjb25zdCBVU3RyaW5nJiB1KQoreworICAgIGlmICh1
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIFN0cmluZ0lt
cGw6OmNyZWF0ZSh1KTsKK30KKworVVN0cmluZyBzdHJpbmdUb1VTdHJpbmcoY29uc3QgU3RyaW5n
JiBzKQoreworICAgIGlmIChTdHJpbmdJbXBsKiBpbXBsID0gcy5pbXBsKCkpCisgICAgICAgIHJl
dHVybiBpbXBsLT51c3RyaW5nKCk7CisgICAgcmV0dXJuIFVTdHJpbmcoKTsKK30KKworU3RyaW5n
IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsK
K30KKworU3RyaW5nIHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQotICAgICAgICByZXR1cm4gVVN0cmluZygpOwotICAgIHJldHVybiB2YWx1ZS50b1N0
cmluZyhleGVjKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiB1c3RyaW5n
VG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpOwogfQogCiBKU1ZhbHVlIGpzRGF0ZU9yTnVs
bChFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2YWx1ZSkKQEAgLTUzNCw3ICs1NTMsNyBAQCB2b2lk
IHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgZXhlYy0+Y2xlYXJFeGNl
cHRpb24oKTsKIAogICAgIGlmIChFeGNlcHRpb25CYXNlKiBleGNlcHRpb25CYXNlID0gdG9FeGNl
cHRpb25CYXNlKGV4Y2VwdGlvbikpCi0gICAgICAgIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbkJh
c2UtPm1lc3NhZ2UoKSArICI6ICIgICsgZXhjZXB0aW9uQmFzZS0+ZGVzY3JpcHRpb24oKTsKKyAg
ICAgICAgZXJyb3JNZXNzYWdlID0gc3RyaW5nVG9VU3RyaW5nKGV4Y2VwdGlvbkJhc2UtPm1lc3Nh
Z2UoKSArICI6ICIgICsgZXhjZXB0aW9uQmFzZS0+ZGVzY3JpcHRpb24oKSk7CiAKICAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gc3RhdGljX2Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CiAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwpA
QCAtNTQ0LDcgKzU2Myw3IEBAIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
SlMKICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnJlcG9ydEV4Y2VwdGlvbihlcnJvck1lc3NhZ2Us
IGxpbmVOdW1iZXIsIGV4Y2VwdGlvblNvdXJjZVVSTCk7CisgICAgc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+cmVwb3J0RXhjZXB0aW9uKHVzdHJpbmdUb1N0cmluZyhlcnJvck1lc3NhZ2UpLCBsaW5l
TnVtYmVyLCB1c3RyaW5nVG9TdHJpbmcoZXhjZXB0aW9uU291cmNlVVJMKSk7CiB9CiAKIHZvaWQg
cmVwb3J0Q3VycmVudEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDU3NjYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTEgKzIyLDExIEBACiAjaWZu
ZGVmIEpTRE9NQmluZGluZ19oCiAjZGVmaW5lIEpTRE9NQmluZGluZ19oCiAKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgorI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgogI2luY2x1ZGUgIkpTRE9N
R2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCi0jaW5jbHVkZSAiRE9N
V3JhcHBlcldvcmxkLmgiCiAjaW5jbHVkZSAiSlNTVkdDb250ZXh0Q2FjaGUuaCIKLSNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvTG9va3VwLmg+CiAjaW5jbHVkZSA8cnVudGltZS9XZWFrR0NNYXAuaD4KQEAgLTI1
OCw4ICsyNTgsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8vIG9iamVjdCwgdG8gbGV0
IHRoZSBlbmdpbmUga25vdyB0aGF0IGNvbGxlY3RpbmcgdGhlIEpTU3RyaW5nIHdyYXBwZXIgaXMg
dW5saWtlbHkgdG8gc2F2ZSBtZW1vcnkuCiAgICAgSlNDOjpKU1ZhbHVlIGpzT3duZWRTdHJpbmdP
ck51bGwoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OlVTdHJpbmcmKTsgCiAKLSAgICBKU0M6
OlVTdHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUpOyAvLyBudWxsIGlmIHRoZSB2YWx1ZSBpcyBudWxsCi0gICAgSlNDOjpVU3RyaW5n
IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUpOyAvLyBudWxsIGlmIHRoZSB2YWx1ZSBpcyBudWxsIG9yIHVuZGVmaW5lZAor
ICAgIFN0cmluZyBpZGVudGlmaWVyVG9TdHJpbmcoY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Cisg
ICAgU3RyaW5nIHVzdHJpbmdUb1N0cmluZyhjb25zdCBKU0M6OlVTdHJpbmcmKTsKKyAgICBKU0M6
OlVTdHJpbmcgc3RyaW5nVG9VU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisgICAgU3RyaW5nIHZh
bHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsg
Ly8gbnVsbCBpZiB0aGUgdmFsdWUgaXMgbnVsbAorICAgIFN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0
aFVuZGVmaW5lZE9yTnVsbENoZWNrKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsgLy8g
bnVsbCBpZiB0aGUgdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWQKIAogICAgIC8vIFJldHVybnMg
YSBEYXRlIGluc3RhbmNlIGZvciB0aGUgc3BlY2lmaWVkIHZhbHVlLCBvciBudWxsIGlmIHRoZSB2
YWx1ZSBpcyBOYU4gb3IgaW5maW5pdHkuCiAgICAgSlNDOjpKU1ZhbHVlIGpzRGF0ZU9yTnVsbChK
U0M6OkV4ZWNTdGF0ZSosIGRvdWJsZSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
Rm9ybURhdGFDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Gb3JtRGF0YUN1c3RvbS5jcHAJKHJldmlzaW9uIDU3NjYzKQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUZvcm1EYXRhQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTIgKzQy
LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEpTVmFsdWUgSlNET01Gb3JtRGF0YTo6YXBwZW5k
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoYXJncy5z
aXplKCkgPj0gMikgewotICAgICAgICBTdHJpbmcgbmFtZSA9IGFyZ3MuYXQoMCkudG9TdHJpbmco
ZXhlYyk7CisgICAgICAgIFN0cmluZyBuYW1lID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCku
dG9TdHJpbmcoZXhlYykpOwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gYXJncy5hdCgxKTsKICAg
ICAgICAgaWYgKHZhbHVlLmluaGVyaXRzKCZKU0Jsb2I6OnNfaW5mbykpCiAgICAgICAgICAgICBp
bXBsKCktPmFwcGVuZChuYW1lLCB0b0Jsb2IodmFsdWUpKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgaW1wbCgpLT5hcHBlbmQobmFtZSwgdmFsdWUudG9TdHJpbmcoZXhlYykpOworICAgICAg
ICAgICAgaW1wbCgpLT5hcHBlbmQobmFtZSwgdXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5n
KGV4ZWMpKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gNTc2NjMpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTUwLDcgKzE1MCw3IEBAIHN0YXRpYyBKU1ZhbHVlIG5hbWVkSXRlbUdldHRlcihFeGVj
U3RhdGUKICAgICBBU1NFUlQoZG9jdW1lbnQpOwogICAgIEFTU0VSVChkb2N1bWVudC0+aXNIVE1M
RG9jdW1lbnQoKSk7CiAKLSAgICBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGNvbGxlY3Rpb24gPSBk
b2N1bWVudC0+d2luZG93TmFtZWRJdGVtcyhwcm9wZXJ0eU5hbWUpOworICAgIFJlZlB0cjxIVE1M
Q29sbGVjdGlvbj4gY29sbGVjdGlvbiA9IGRvY3VtZW50LT53aW5kb3dOYW1lZEl0ZW1zKGlkZW50
aWZpZXJUb1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKICAgICBpZiAoY29sbGVjdGlvbi0+bGVuZ3Ro
KCkgPT0gMSkKICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgY29sbGVjdGlvbi0+Zmlyc3RJdGVt
KCkpOwogICAgIHJldHVybiB0b0pTKGV4ZWMsIGNvbGxlY3Rpb24uZ2V0KCkpOwpAQCAtNTA2LDcg
KzUwNiw3IEBAIHZvaWQgSlNET01XaW5kb3c6OnNldExvY2F0aW9uKEV4ZWNTdGF0ZSoKICAgICBG
cmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKIAotICAg
IEtVUkwgdXJsID0gY29tcGxldGVVUkwoZXhlYywgdmFsdWUudG9TdHJpbmcoZXhlYykpOworICAg
IEtVUkwgdXJsID0gY29tcGxldGVVUkwoZXhlYywgdXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpKSk7CiAgICAgaWYgKHVybC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC05NzYsNyArOTc2LDcgQEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6b3BlbkRhdGFiYXNlKEV4ZWNT
dAogICAgIGlmICgoYXJncy5zaXplKCkgPj0gNSkgJiYgYXJncy5hdCg0KS5pc09iamVjdCgpKQog
ICAgICAgICBjcmVhdGlvbkNhbGxiYWNrID0gSlNEYXRhYmFzZUNhbGxiYWNrOjpjcmVhdGUoYXNP
YmplY3QoYXJncy5hdCg0KSksIGdsb2JhbE9iamVjdCgpKTsKIAotICAgIEpTVmFsdWUgcmVzdWx0
ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbCgpLT5vcGVuRGF0
YWJhc2UobmFtZSwgdmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIGNyZWF0aW9u
Q2FsbGJhY2sucmVsZWFzZSgpLCBlYykpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwoKS0+b3BlbkRhdGFiYXNlKHVzdHJp
bmdUb1N0cmluZyhuYW1lKSwgdXN0cmluZ1RvU3RyaW5nKHZlcnNpb24pLCB1c3RyaW5nVG9TdHJp
bmcoZGlzcGxheU5hbWUpLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrLnJlbGVhc2Uo
KSwgZWMpKSk7CiAgICAgaWYgKCFlYyAmJiByZXN1bHQuaXNOdWxsKCkpCiAgICAgICAgIGVjID0g
U0VDVVJJVFlfRVJSOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YWJhc2VDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhYmFzZUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDU3NjYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFiYXNl
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOCArNDksOCBAQCB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCiBKU1ZhbHVlIEpTRGF0YWJhc2U6OmNoYW5nZVZlcnNpb24oRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIFN0cmluZyBvbGRWZXJzaW9uID0gYXJn
cy5hdCgwKS50b1N0cmluZyhleGVjKTsKLSAgICBTdHJpbmcgbmV3VmVyc2lvbiA9IGFyZ3MuYXQo
MSkudG9TdHJpbmcoZXhlYyk7CisgICAgU3RyaW5nIG9sZFZlcnNpb24gPSB1c3RyaW5nVG9TdHJp
bmcoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5nIG5ld1ZlcnNpb24gPSB1
c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgxKS50b1N0cmluZyhleGVjKSk7CiAKICAgICBKU09iamVj
dCogb2JqZWN0OwogICAgIGlmICghKG9iamVjdCA9IGFyZ3MuYXQoMikuZ2V0T2JqZWN0KCkpKSB7
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9u
IDU3NjYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCB2b2lkIEpTRG9jdW1lbnQ6OnNldExvY2F0aW9u
KEV4ZWNTdGF0ZSogCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3Ry
aW5nIHN0ciA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFN0cmluZyBzdHIgPSB1c3RyaW5n
VG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpOwogCiAgICAgLy8gSUUgYW5kIE1vemlsbGEg
Ym90aCByZXNvbHZlIHRoZSBVUkwgcmVsYXRpdmUgdG8gdGhlIHNvdXJjZSBmcmFtZSwKICAgICAv
LyBub3QgdGhlIHRhcmdldCBmcmFtZS4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVu
dExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRM
aXN0ZW5lci5jcHAJKHJldmlzaW9uIDU3NjYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgdm9pZCBK
U0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdAogICAgICAgICAgICAgcmVwb3J0Q3Vy
cmVudEV4Y2VwdGlvbihleGVjKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoIXJl
dHZhbC5pc1VuZGVmaW5lZE9yTnVsbCgpICYmIGV2ZW50LT5zdG9yZXNSZXN1bHRBc1N0cmluZygp
KQotICAgICAgICAgICAgICAgIGV2ZW50LT5zdG9yZVJlc3VsdChyZXR2YWwudG9TdHJpbmcoZXhl
YykpOworICAgICAgICAgICAgICAgIGV2ZW50LT5zdG9yZVJlc3VsdCh1c3RyaW5nVG9TdHJpbmco
cmV0dmFsLnRvU3RyaW5nKGV4ZWMpKSk7CiAgICAgICAgICAgICBpZiAobV9pc0F0dHJpYnV0ZSkg
ewogICAgICAgICAgICAgICAgIGJvb2wgcmV0dmFsYm9vbDsKICAgICAgICAgICAgICAgICBpZiAo
cmV0dmFsLmdldEJvb2xlYW4ocmV0dmFsYm9vbCkgJiYgIXJldHZhbGJvb2wpCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ29uc3RydWN0b3IuY3BwCShyZXZp
c2lvbiA1NzY2MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUNvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgSlNPYmplY3Qq
IGNvbnN0cnVjdEV2ZW50U291cmNlKEV4CiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFJlZmVyZW5jZUVycm9yLCAiRXZlbnRTb3VyY2UgY29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1
bWVudCBpcyB1bmF2YWlsYWJsZSIpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
UmVmUHRyPEV2ZW50U291cmNlPiBldmVudFNvdXJjZSA9IEV2ZW50U291cmNlOjpjcmVhdGUodXJs
LCBjb250ZXh0LCBlYyk7CisgICAgUmVmUHRyPEV2ZW50U291cmNlPiBldmVudFNvdXJjZSA9IEV2
ZW50U291cmNlOjpjcmVhdGUodXN0cmluZ1RvU3RyaW5nKHVybCksIGNvbnRleHQsIGVjKTsKICAg
ICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAg
cmV0dXJuIDA7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25D
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQWxsQ29s
bGVjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDU3NjYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyAr
ODYsNyBAQCBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxIVE1MQWxsCiAgICAgVVN0
cmluZyBzdHJpbmcgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOwogICAgIHVuc2lnbmVkIGlu
ZGV4ID0gYXJncy5hdCgxKS50b1N0cmluZyhleGVjKS50b1VJbnQzMigmb2ssIGZhbHNlKTsKICAg
ICBpZiAob2spIHsKLSAgICAgICAgU3RyaW5nIHBzdHIgPSBzdHJpbmc7CisgICAgICAgIFN0cmlu
ZyBwc3RyID0gdXN0cmluZ1RvU3RyaW5nKHN0cmluZyk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBj
b2xsZWN0aW9uLT5uYW1lZEl0ZW0ocHN0cik7CiAgICAgICAgIHdoaWxlIChub2RlKSB7CiAgICAg
ICAgICAgICBpZiAoIWluZGV4KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52
YXNFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc4LDcgKzc4LDcgQEAgSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0
KAogICAgICAgICB9CiAgICAgfQogI2VuZGlmCi0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIFdURjo6Z2V0UHRyKGNhbnZhcy0+Z2V0Q29udGV4dChjb250ZXh0SWQsIGF0dHJz
LmdldCgpKSkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBXVEY6Omdl
dFB0cihjYW52YXMtPmdldENvbnRleHQodXN0cmluZ1RvU3RyaW5nKGNvbnRleHRJZCksIGF0dHJz
LmdldCgpKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDU3NjYz
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNhbGxIVE1MQ29sCiAgICAgVVN0cmluZyBzdHJpbmcgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4
ZWMpOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJncy5hdCgxKS50b1N0cmluZyhleGVjKS50b1VJ
bnQzMigmb2ssIGZhbHNlKTsKICAgICBpZiAob2spIHsKLSAgICAgICAgU3RyaW5nIHBzdHIgPSBz
dHJpbmc7CisgICAgICAgIFN0cmluZyBwc3RyID0gdXN0cmluZ1RvU3RyaW5nKHN0cmluZyk7CiAg
ICAgICAgIE5vZGUqIG5vZGUgPSBjb2xsZWN0aW9uLT5uYW1lZEl0ZW0ocHN0cik7CiAgICAgICAg
IHdoaWxlIChub2RlKSB7CiAgICAgICAgICAgICBpZiAoIWluZGV4KQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDU3NjYzKQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYwLDcgKzYwLDcgQEAgSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6bmFtZUdldHRl
cihFeGVjUwogICAgIEpTSFRNTERvY3VtZW50KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNIVE1M
RG9jdW1lbnQqPihhc09iamVjdChzbG90QmFzZSkpOwogICAgIEhUTUxEb2N1bWVudCogZG9jdW1l
bnQgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPih0aGlzT2JqLT5pbXBsKCkpOwogCi0gICAg
U3RyaW5nIG5hbWUgPSBwcm9wZXJ0eU5hbWU7CisgICAgU3RyaW5nIG5hbWUgPSBpZGVudGlmaWVy
VG9TdHJpbmcocHJvcGVydHlOYW1lKTsKICAgICBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGNvbGxl
Y3Rpb24gPSBkb2N1bWVudC0+ZG9jdW1lbnROYW1lZEl0ZW1zKG5hbWUpOwogCiAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gY29sbGVjdGlvbi0+bGVuZ3RoKCk7CkBAIC0xMzcsMTQgKzEzNywxNCBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgZG9jdW1lbnRXcml0ZShFeGVjU3RhCiAgICAgc2l6ZV90IHNpemUg
PSBhcmdzLnNpemUoKTsKIAogICAgIFVTdHJpbmcgZmlyc3RTdHJpbmcgPSBhcmdzLmF0KDApLnRv
U3RyaW5nKGV4ZWMpOwotICAgIFNlZ21lbnRlZFN0cmluZyBzZWdtZW50ZWRTdHJpbmcgPSBTdHJp
bmcoZmlyc3RTdHJpbmcpOworICAgIFNlZ21lbnRlZFN0cmluZyBzZWdtZW50ZWRTdHJpbmcgPSB1
c3RyaW5nVG9TdHJpbmcoZmlyc3RTdHJpbmcpOwogICAgIGlmIChzaXplICE9IDEpIHsKICAgICAg
ICAgaWYgKCFzaXplKQogICAgICAgICAgICAgc2VnbWVudGVkU3RyaW5nLmNsZWFyKCk7CiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kp
IHsKICAgICAgICAgICAgICAgICBVU3RyaW5nIHN1YnNlcXVlbnRTdHJpbmcgPSBhcmdzLmF0KGkp
LnRvU3RyaW5nKGV4ZWMpOwotICAgICAgICAgICAgICAgIHNlZ21lbnRlZFN0cmluZy5hcHBlbmQo
U2VnbWVudGVkU3RyaW5nKFN0cmluZyhzdWJzZXF1ZW50U3RyaW5nKSkpOworICAgICAgICAgICAg
ICAgIHNlZ21lbnRlZFN0cmluZy5hcHBlbmQoU2VnbWVudGVkU3RyaW5nKHVzdHJpbmdUb1N0cmlu
ZyhzdWJzZXF1ZW50U3RyaW5nKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1
c3RvbS5jcHAJKHJldmlzaW9uIDU3NjYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVj
dGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBTY3JpcHRPYmplY3QgSW5qZWN0ZWRTY3JpcHRIb3N0Ojpj
cmVhdGVJbmplY3RlZFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZSwgU2NyaXB0U3RhdGUqIHNj
cmlwdFN0YXRlLCBsb25nIGlkKQogewotICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZSA9IG1ha2VT
b3VyY2Uoc291cmNlKTsKKyAgICBTb3VyY2VDb2RlIHNvdXJjZUNvZGUgPSBtYWtlU291cmNlKHN0
cmluZ1RvVVN0cmluZyhzb3VyY2UpKTsKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNfY2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
OwogICAgIEpTVmFsdWUgZ2xvYmFsVGhpc1ZhbHVlID0gc2NyaXB0U3RhdGUtPmdsb2JhbFRoaXNW
YWx1ZSgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9z
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3Rv
ckZyb250ZW5kSG9zdEN1c3RvbS5jcHAJKHJldmlzaW9uIDU3NjYzKQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk1LDcgKzk1LDcgQEAgSlNWYWx1ZSBKU0luc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0Nv
bgogICAgICAgICAgICAgaXRlbXMuYXBwZW5kKG5ldyBDb250ZXh0TWVudUl0ZW0oU2VwYXJhdG9y
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTm9BY3Rpb24sIFN0cmluZygpKSk7CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgQ29udGV4dE1lbnVBY3Rpb24gdHlwZWRJZCA9IHN0YXRpY19jYXN0
PENvbnRleHRNZW51QWN0aW9uPihDb250ZXh0TWVudUl0ZW1CYXNlQ3VzdG9tVGFnICsgaWQudG9J
bnQzMihleGVjU3RhdGUpKTsKLSAgICAgICAgICAgIGl0ZW1zLmFwcGVuZChuZXcgQ29udGV4dE1l
bnVJdGVtKEFjdGlvblR5cGUsIHR5cGVkSWQsIGxhYmVsLnRvU3RyaW5nKGV4ZWNTdGF0ZSkpKTsK
KyAgICAgICAgICAgIGl0ZW1zLmFwcGVuZChuZXcgQ29udGV4dE1lbnVJdGVtKEFjdGlvblR5cGUs
IHR5cGVkSWQsIHVzdHJpbmdUb1N0cmluZyhsYWJlbC50b1N0cmluZyhleGVjU3RhdGUpKSkpOwog
ICAgICAgICB9CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50
TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNMYXp5RXZl
bnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDU3NjYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0xhenlFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDEwICsxMDAsMTAg
QEAgSlNPYmplY3QqIEpTTGF6eUV2ZW50TGlzdGVuZXI6OmluaXRpYWxpegogICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCiAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFwcGVuZChqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywg
bV9ldmVudFBhcmFtZXRlck5hbWUpKTsKKyAgICBhcmdzLmFwcGVuZChqc05vbnRyaXZpYWxTdHJp
bmcoZXhlYywgc3RyaW5nVG9VU3RyaW5nKG1fZXZlbnRQYXJhbWV0ZXJOYW1lKSkpOwogICAgIGFy
Z3MuYXBwZW5kKGpzU3RyaW5nKGV4ZWMsIG1fY29kZSkpOwogCi0gICAgSlNPYmplY3QqIGpzRnVu
Y3Rpb24gPSBjb25zdHJ1Y3RGdW5jdGlvbihleGVjLCBhcmdzLCBJZGVudGlmaWVyKGV4ZWMsIG1f
ZnVuY3Rpb25OYW1lKSwgbV9zb3VyY2VVUkwsIG1fbGluZU51bWJlcik7IC8vIEZJWE1FOiBpcyBn
bG9iYWxFeGVjIG9rPworICAgIEpTT2JqZWN0KiBqc0Z1bmN0aW9uID0gY29uc3RydWN0RnVuY3Rp
b24oZXhlYywgYXJncywgSWRlbnRpZmllcihleGVjLCBzdHJpbmdUb1VTdHJpbmcobV9mdW5jdGlv
bk5hbWUpKSwgc3RyaW5nVG9VU3RyaW5nKG1fc291cmNlVVJMKSwgbV9saW5lTnVtYmVyKTsgLy8g
RklYTUU6IGlzIGdsb2JhbEV4ZWMgb2s/CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiAwOwpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiA1NzY2
MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIEpTTG9jYXRpb246OnNldEhyZWYoRXhlY1N0
YXRlKiBleGVjCiAgICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwogICAgIEFTU0VS
VChmcmFtZSk7CiAKLSAgICBLVVJMIHVybCA9IGNvbXBsZXRlVVJMKGV4ZWMsIHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpKTsKKyAgICBLVVJMIHVybCA9IGNvbXBsZXRlVVJMKGV4ZWMsIHVzdHJpbmdUb1N0
cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSkpOwogICAgIGlmICh1cmwuaXNOdWxsKCkpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtMjE1LDcgKzIxNSw3IEBAIHZvaWQgSlNMb2NhdGlvbjo6c2V0UHJv
dG9jb2woRXhlY1N0YXRlKiAKICAgICBBU1NFUlQoZnJhbWUpOwogCiAgICAgS1VSTCB1cmwgPSBm
cmFtZS0+bG9hZGVyKCktPnVybCgpOwotICAgIGlmICghdXJsLnNldFByb3RvY29sKHZhbHVlLnRv
U3RyaW5nKGV4ZWMpKSkgeworICAgIGlmICghdXJsLnNldFByb3RvY29sKHVzdHJpbmdUb1N0cmlu
Zyh2YWx1ZS50b1N0cmluZyhleGVjKSkpKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBTWU5UQVhfRVJSKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIyOSw3ICsyMjksNyBA
QCB2b2lkIEpTTG9jYXRpb246OnNldEhvc3QoRXhlY1N0YXRlKiBleGVjCiAgICAgQVNTRVJUKGZy
YW1lKTsKIAogICAgIEtVUkwgdXJsID0gZnJhbWUtPmxvYWRlcigpLT51cmwoKTsKLSAgICB1cmwu
c2V0SG9zdEFuZFBvcnQodmFsdWUudG9TdHJpbmcoZXhlYykpOworICAgIHVybC5zZXRIb3N0QW5k
UG9ydCh1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpKTsKIAogICAgIG5hdmln
YXRlSWZBbGxvd2VkKGV4ZWMsIGZyYW1lLCB1cmwsICFmcmFtZS0+c2NyaXB0KCktPmFueVBhZ2VJ
c1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpLCBmYWxzZSk7CiB9CkBAIC0yNDAsNyArMjQwLDcgQEAg
dm9pZCBKU0xvY2F0aW9uOjpzZXRIb3N0bmFtZShFeGVjU3RhdGUqIAogICAgIEFTU0VSVChmcmFt
ZSk7CiAKICAgICBLVVJMIHVybCA9IGZyYW1lLT5sb2FkZXIoKS0+dXJsKCk7Ci0gICAgdXJsLnNl
dEhvc3QodmFsdWUudG9TdHJpbmcoZXhlYykpOworICAgIHVybC5zZXRIb3N0KHVzdHJpbmdUb1N0
cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSkpOwogCiAgICAgbmF2aWdhdGVJZkFsbG93ZWQoZXhl
YywgZnJhbWUsIHVybCwgIWZyYW1lLT5zY3JpcHQoKS0+YW55UGFnZUlzUHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKCksIGZhbHNlKTsKIH0KQEAgLTI2OCw3ICsyNjgsNyBAQCB2b2lkIEpTTG9jYXRpb246
OnNldFBhdGhuYW1lKEV4ZWNTdGF0ZSogCiAgICAgQVNTRVJUKGZyYW1lKTsKIAogICAgIEtVUkwg
dXJsID0gZnJhbWUtPmxvYWRlcigpLT51cmwoKTsKLSAgICB1cmwuc2V0UGF0aCh2YWx1ZS50b1N0
cmluZyhleGVjKSk7CisgICAgdXJsLnNldFBhdGgodXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpKSk7CiAKICAgICBuYXZpZ2F0ZUlmQWxsb3dlZChleGVjLCBmcmFtZSwgdXJsLCAh
ZnJhbWUtPnNjcmlwdCgpLT5hbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSwgZmFsc2Up
OwogfQpAQCAtMjc5LDcgKzI3OSw3IEBAIHZvaWQgSlNMb2NhdGlvbjo6c2V0U2VhcmNoKEV4ZWNT
dGF0ZSogZXgKICAgICBBU1NFUlQoZnJhbWUpOwogCiAgICAgS1VSTCB1cmwgPSBmcmFtZS0+bG9h
ZGVyKCktPnVybCgpOwotICAgIHVybC5zZXRRdWVyeSh2YWx1ZS50b1N0cmluZyhleGVjKSk7Cisg
ICAgdXJsLnNldFF1ZXJ5KHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSkpOwog
CiAgICAgbmF2aWdhdGVJZkFsbG93ZWQoZXhlYywgZnJhbWUsIHVybCwgIWZyYW1lLT5zY3JpcHQo
KS0+YW55UGFnZUlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCksIGZhbHNlKTsKIH0KQEAgLTI5MSw3
ICsyOTEsNyBAQCB2b2lkIEpTTG9jYXRpb246OnNldEhhc2goRXhlY1N0YXRlKiBleGVjCiAKICAg
ICBLVVJMIHVybCA9IGZyYW1lLT5sb2FkZXIoKS0+dXJsKCk7CiAgICAgU3RyaW5nIG9sZEZyYWdt
ZW50SWRlbnRpZmllciA9IHVybC5mcmFnbWVudElkZW50aWZpZXIoKTsKLSAgICBTdHJpbmcgc3Ry
ID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgU3RyaW5nIHN0ciA9IHVzdHJpbmdUb1N0cmlu
Zyh2YWx1ZS50b1N0cmluZyhleGVjKSk7CiAgICAgaWYgKHN0ci5zdGFydHNXaXRoKCIjIikpCiAg
ICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMSk7CiAgICAgaWYgKGVxdWFsSWdub3JpbmdOdWxs
aXR5KG9sZEZyYWdtZW50SWRlbnRpZmllciwgc3RyKSkKQEAgLTMwNyw3ICszMDcsNyBAQCBKU1Zh
bHVlIEpTTG9jYXRpb246OnJlcGxhY2UoRXhlY1N0YXRlKiBlCiAgICAgaWYgKCFmcmFtZSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBLVVJMIHVybCA9IGNvbXBsZXRlVVJM
KGV4ZWMsIGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIEtVUkwgdXJsID0gY29tcGxl
dGVVUkwoZXhlYywgdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpKTsK
ICAgICBpZiAodXJsLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIApA
QCAtMzM1LDcgKzMzNSw3IEBAIEpTVmFsdWUgSlNMb2NhdGlvbjo6YXNzaWduKEV4ZWNTdGF0ZSog
ZXgKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAg
IEtVUkwgdXJsID0gY29tcGxldGVVUkwoZXhlYywgYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSk7
CisgICAgS1VSTCB1cmwgPSBjb21wbGV0ZVVSTChleGVjLCB1c3RyaW5nVG9TdHJpbmcoYXJncy5h
dCgwKS50b1N0cmluZyhleGVjKSkpOwogICAgIGlmICh1cmwuaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2Fn
ZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVz
c2FnZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIs
NyBAQCBKU0M6OkpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OmluaXRNZXNzYWdlCiAgICAgfQogCiAg
ICAgTWVzc2FnZUV2ZW50KiBldmVudCA9IHN0YXRpY19jYXN0PE1lc3NhZ2VFdmVudCo+KHRoaXMt
PmltcGwoKSk7Ci0gICAgZXZlbnQtPmluaXRNZXNzYWdlRXZlbnQodHlwZUFyZywgY2FuQnViYmxl
QXJnLCBjYW5jZWxhYmxlQXJnLCBkYXRhQXJnLCBvcmlnaW5BcmcsIGxhc3RFdmVudElkQXJnLCBz
b3VyY2VBcmcsIG1lc3NhZ2VQb3J0cy5yZWxlYXNlKCkpOworICAgIGV2ZW50LT5pbml0TWVzc2Fn
ZUV2ZW50KHR5cGVBcmcsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZywgZGF0YUFyZywgdXN0
cmluZ1RvU3RyaW5nKG9yaWdpbkFyZyksIHVzdHJpbmdUb1N0cmluZyhsYXN0RXZlbnRJZEFyZyks
IHNvdXJjZUFyZywgbWVzc2FnZVBvcnRzLnJlbGVhc2UoKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVNYXBDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVNYXBD
dXN0b20uY3BwCShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1l
ZE5vZGVNYXBDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxMyArNjksMTMgQEAgSlNW
YWx1ZSBKU05hbWVkTm9kZU1hcDo6c2V0TmFtZWRJdGVtTlMoRQogCiBib29sIEpTTmFtZWROb2Rl
TWFwOjpjYW5HZXRJdGVtc0Zvck5hbWUoRXhlY1N0YXRlKiwgTmFtZWROb2RlTWFwKiBpbXBsLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIGltcGwtPmdldE5h
bWVkSXRlbShwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiBpbXBsLT5nZXROYW1lZEl0ZW0oaWRl
bnRpZmllclRvU3RyaW5nKHByb3BlcnR5TmFtZSkpOwogfQogCiBKU1ZhbHVlIEpTTmFtZWROb2Rl
TWFwOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewogICAgIEpTTmFtZWROb2RlTWFwKiB0aGlzT2Jq
ID0gc3RhdGljX2Nhc3Q8SlNOYW1lZE5vZGVNYXAqPihhc09iamVjdChzbG90QmFzZSkpOwotICAg
IHJldHVybiB0b0pTKGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+Z2V0TmFtZWRJdGVtKHByb3BlcnR5
TmFtZSkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+Z2V0TmFtZWRJ
dGVtKGlkZW50aWZpZXJUb1N0cmluZyhwcm9wZXJ0eU5hbWUpKSk7CiB9CiAKIHZvaWQgSlNOYW1l
ZE5vZGVNYXA6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1hcmtTdGFjaykKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNPcHRpb25Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU09wdGlvbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTc2NjMp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTT3B0aW9uQ29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MSwxMSArNTEsMTEgQEAgc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RIVE1M
T3B0aW9uRWxlbQogCiAgICAgU3RyaW5nIGRhdGE7CiAgICAgaWYgKCFhcmdzLmF0KDApLmlzVW5k
ZWZpbmVkKCkpCi0gICAgICAgIGRhdGEgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOworICAg
ICAgICBkYXRhID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOwog
CiAgICAgU3RyaW5nIHZhbHVlOwogICAgIGlmICghYXJncy5hdCgxKS5pc1VuZGVmaW5lZCgpKQot
ICAgICAgICB2YWx1ZSA9IGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIHZhbHVl
ID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYykpOwogICAgIGJvb2wg
ZGVmYXVsdFNlbGVjdGVkID0gYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYyk7CiAgICAgYm9vbCBz
ZWxlY3RlZCA9IGFyZ3MuYXQoMykudG9Cb29sZWFuKGV4ZWMpOwogCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwCShyZXZp
c2lvbiA1NzY2MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxSZXN1bHRTZXRSb3dMaXN0
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQCBKU1ZhbHVlIEpTU1FM
UmVzdWx0U2V0Um93TGlzdDo6aXRlbShFeGVjCiAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgb2JqZWN0LT5wdXREaXJlY3QoSWRlbnRpZmll
cihleGVjLCBtX2ltcGwtPmNvbHVtbk5hbWVzKClbaV0pLCBqc1ZhbHVlLCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpOworICAgICAgICBvYmplY3QtPnB1dERpcmVjdChJZGVudGlmaWVyKGV4ZWMsIHN0
cmluZ1RvVVN0cmluZyhtX2ltcGwtPmNvbHVtbk5hbWVzKClbaV0pKSwganNWYWx1ZSwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KTsKICAgICB9CiAKICAgICByZXR1cm4gb2JqZWN0OwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCShyZXZpc2lv
biA1NzY2MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgSlNWYWx1ZSBKU1NRTFRyYW5zYWN0
aW9uOjpleGVjdXRlU3FsKEV4ZQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
CiAKLSAgICBTdHJpbmcgc3FsU3RhdGVtZW50ID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKTsK
KyAgICBTdHJpbmcgc3FsU3RhdGVtZW50ID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9T
dHJpbmcoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKQEAgLTgwLDcgKzgwLDcgQEAgSlNWYWx1ZSBKU1NRTFRyYW5z
YWN0aW9uOjpleGVjdXRlU3FsKEV4ZQogICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5hcHBlbmQo
dmFsdWUudW5jaGVja2VkR2V0TnVtYmVyKCkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICAgICAgLy8gQ29udmVydCB0aGUgYXJndW1lbnQgdG8gYSBzdHJpbmcgYW5kIGFwcGVuZCBp
dAotICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5hcHBlbmQodmFsdWUudG9TdHJpbmcoZXhlYykp
OworICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5hcHBlbmQodXN0cmluZ1RvU3RyaW5nKHZhbHVl
LnRvU3RyaW5nKGV4ZWMpKSk7CiAgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAg
ICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTaGFyZWRXb3JrZXJDb25zdHJ1Y3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NoYXJlZFdvcmtlckNv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U2hhcmVkV29ya2VyQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3
IEBAIHN0YXRpYyBKU09iamVjdCogY29uc3RydWN0U2hhcmVkV29ya2VyKEUKICAgICAvLyBGSVhN
RTogV2UgbmVlZCB0byB1c2UgYm90aCB0aGUgZHluYW1pYyBzY29wZSBhbmQgdGhlIGxleGljYWwg
c2NvcGUgKGR5bmFtaWMgc2NvcGUgZm9yIHJlc29sdmluZyB0aGUgd29ya2VyIFVSTCkKICAgICBE
T01XaW5kb3cqIHdpbmRvdyA9IGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpKS0+aW1wbCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxTaGFy
ZWRXb3JrZXI+IHdvcmtlciA9IFNoYXJlZFdvcmtlcjo6Y3JlYXRlKHNjcmlwdFVSTCwgbmFtZSwg
d2luZG93LT5kb2N1bWVudCgpLCBlYyk7CisgICAgUmVmUHRyPFNoYXJlZFdvcmtlcj4gd29ya2Vy
ID0gU2hhcmVkV29ya2VyOjpjcmVhdGUodXN0cmluZ1RvU3RyaW5nKHNjcmlwdFVSTCksIHVzdHJp
bmdUb1N0cmluZyhuYW1lKSwgd2luZG93LT5kb2N1bWVudCgpLCBlYyk7CiAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKIAogICAgIHJldHVybiBhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29u
c3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCB3b3JrZXIucmVsZWFzZSgpKSk7CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCShyZXZpc2lvbiA1NzY2MykKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgsMTMgKzM4LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogYm9vbCBKU1N0b3JhZ2U6OmNh
bkdldEl0ZW1zRm9yTmFtZShFeGVjU3RhdGUqLCBTdG9yYWdlKiBpbXBsLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIGltcGwtPmNvbnRhaW5zKHByb3BlcnR5
TmFtZSk7CisgICAgcmV0dXJuIGltcGwtPmNvbnRhaW5zKGlkZW50aWZpZXJUb1N0cmluZyhwcm9w
ZXJ0eU5hbWUpKTsKIH0KIAogSlNWYWx1ZSBKU1N0b3JhZ2U6Om5hbWVHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUp
CiB7CiAgICAgSlNTdG9yYWdlKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNTdG9yYWdlKj4oYXNP
YmplY3Qoc2xvdEJhc2UpKTsKLSAgICByZXR1cm4ganNTdHJpbmdPck51bGwoZXhlYywgdGhpc09i
ai0+aW1wbCgpLT5nZXRJdGVtKHByb3BlcnR5TmFtZSkpOworICAgIHJldHVybiBqc1N0cmluZ09y
TnVsbChleGVjLCB0aGlzT2JqLT5pbXBsKCktPmdldEl0ZW0oaWRlbnRpZmllclRvU3RyaW5nKHBy
b3BlcnR5TmFtZSkpKTsKIH0KIAogYm9vbCBKU1N0b3JhZ2U6OmRlbGV0ZVByb3BlcnR5KEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQpAQCAtNjAsNyArNjAs
NyBAQCBib29sIEpTU3RvcmFnZTo6ZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlCiAgICAgaWYgKHBy
b3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmhhc1Byb3BlcnR5KGV4
ZWMsIHByb3BlcnR5TmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1faW1wbC0+
cmVtb3ZlSXRlbShwcm9wZXJ0eU5hbWUpOworICAgIG1faW1wbC0+cmVtb3ZlSXRlbShpZGVudGlm
aWVyVG9TdHJpbmcocHJvcGVydHlOYW1lKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTY4
LDcgKzY4LDcgQEAgdm9pZCBKU1N0b3JhZ2U6OmdldE93blByb3BlcnR5TmFtZXMoRXhlYwogewog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1faW1wbC0+bGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVu
dGlmaWVyKGV4ZWMsIG1faW1wbC0+a2V5KGkpKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5nKG1faW1wbC0+a2V5KGkpKSkpOwogICAg
ICAgICAKICAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKGV4ZWMsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOwogfQpAQCAtODYsMTIgKzg2LDEyIEBAIGJvb2wgSlNTdG9yYWdlOjpwdXREZWxlZ2F0
ZShFeGVjU3RhdGUqIGUKICAgICBpZiAocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3Qo
cHJvdG90eXBlKS0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAotICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5n
KGV4ZWMpOworICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50
b1N0cmluZyhleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCkt
PnNldEl0ZW0ocHJvcGVydHlOYW1lLCBzdHJpbmdWYWx1ZSwgZWMpOworICAgIGltcGwoKS0+c2V0
SXRlbShpZGVudGlmaWVyVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgc3RyaW5nVmFsdWUsIGVjKTsK
ICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogCiAgICAgcmV0dXJuIHRydWU7CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldExpc3RDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDU3NjYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRMaXN0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksMTMgKzQ5LDEzIEBAIHZvaWQgSlNTdHlsZVNo
ZWV0TGlzdDo6bWFya0NoaWxkcmVuKE1hcmsKIAogYm9vbCBKU1N0eWxlU2hlZXRMaXN0OjpjYW5H
ZXRJdGVtc0Zvck5hbWUoRXhlY1N0YXRlKiwgU3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZXRMaXN0
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIHN0eWxlU2hl
ZXRMaXN0LT5nZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gc3R5bGVTaGVl
dExpc3QtPmdldE5hbWVkSXRlbShpZGVudGlmaWVyVG9TdHJpbmcocHJvcGVydHlOYW1lKSk7CiB9
CiAKIEpTVmFsdWUgSlNTdHlsZVNoZWV0TGlzdDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKICAg
ICBKU1N0eWxlU2hlZXRMaXN0KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNTdHlsZVNoZWV0TGlz
dCo+KGFzT2JqZWN0KHNsb3RCYXNlKSk7Ci0gICAgSFRNTFN0eWxlRWxlbWVudCogZWxlbWVudCA9
IHRoaXNPYmotPmltcGwoKS0+Z2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZSk7CisgICAgSFRNTFN0
eWxlRWxlbWVudCogZWxlbWVudCA9IHRoaXNPYmotPmltcGwoKS0+Z2V0TmFtZWRJdGVtKGlkZW50
aWZpZXJUb1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKICAgICBBU1NFUlQoZWxlbWVudCk7CiAgICAg
cmV0dXJuIHRvSlMoZXhlYywgZWxlbWVudC0+c2hlZXQoKSk7CiB9CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDU3NjYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYktpdENTU01hdHJpeENv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBzdGF0aWMgSlNP
YmplY3QqIGNvbnN0cnVjdFdlYktpdENTU01hdHJpCiAgICAgSlNXZWJLaXRDU1NNYXRyaXhDb25z
dHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTV2ViS2l0Q1NTTWF0cml4Q29u
c3RydWN0b3IqPihjb25zdHJ1Y3Rvcik7CiAgICAgU3RyaW5nIHM7CiAgICAgaWYgKGFyZ3Muc2l6
ZSgpID49IDEpCi0gICAgICAgIHMgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOworICAgICAg
ICBzID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOwogICAgIAog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFJlZlB0cjxXZWJLaXRDU1NNYXRyaXg+IG1h
dHJpeCA9IFdlYktpdENTU01hdHJpeDo6Y3JlYXRlKHMsIGVjKTsKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTc2NjMp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRpYyBKU09iamVjdCogY29uc3RydWN0V2Vi
U29ja2V0KEV4ZWMKICAgICBpZiAoYXJncy5zaXplKCkgPT0gMCkKICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpOwogCi0g
ICAgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOwor
ICAgIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCku
dG9TdHJpbmcoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJ3cm9uZyBVUkwiKTsKICAgICBj
b25zdCBLVVJMJiB1cmwgPSBjb250ZXh0LT5jb21wbGV0ZVVSTCh1cmxTdHJpbmcpOwpAQCAtNzMs
NyArNzMsNyBAQCBzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdFdlYlNvY2tldChFeGVjCiAgICAg
aWYgKGFyZ3Muc2l6ZSgpIDwgMikKICAgICAgICAgd2ViU29ja2V0LT5jb25uZWN0KHVybCwgZWMp
OwogICAgIGVsc2UgewotICAgICAgICBjb25zdCBTdHJpbmcmIHByb3RvY29sID0gYXJncy5hdCgx
KS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBwcm90b2NvbCA9IHVzdHJp
bmdUb1N0cmluZyhhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMpKTsKICAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHdlYlNvY2tl
dC0+Y29ubmVjdCh1cmwsIHByb3RvY29sLCBlYyk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV2ViU29ja2V0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV2ViU29ja2V0Q3VzdG9tLmNwcAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAs
NyBAQCBKU1ZhbHVlIEpTV2ViU29ja2V0OjpzZW5kKEV4ZWNTdGF0ZSogZXhlCiAgICAgaWYgKGFy
Z3Muc2l6ZSgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJy
b3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpOwogCi0gICAgY29uc3QgU3RyaW5nJiBtc2cgPSBh
cmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIGNvbnN0IFN0cmluZyYgbXNnID0gdXN0cmlu
Z1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3Is
ICJiYWQgbWVzc2FnZSBkYXRhLiIpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA1
NzY2MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb25zdHJ1Y3Rvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RX
b3JrZXIoRXhlY1N0YQogICAgIERPTVdpbmRvdyogd2luZG93ID0gYXNKU0RPTVdpbmRvdyhleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKLSAgICBSZWZQdHI8V29ya2VyPiB3b3JrZXIgPSBXb3JrZXI6OmNyZWF0ZShzY3JpcHRV
UkwsIHdpbmRvdy0+ZG9jdW1lbnQoKSwgZWMpOworICAgIFJlZlB0cjxXb3JrZXI+IHdvcmtlciA9
IFdvcmtlcjo6Y3JlYXRlKHVzdHJpbmdUb1N0cmluZyhzY3JpcHRVUkwpLCB3aW5kb3ctPmRvY3Vt
ZW50KCksIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IGVjKTsKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2VyQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dvcmtlckNvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1
LDcgKzEwNSw3IEBAIEpTVmFsdWUgSlNXb3JrZXJDb250ZXh0OjppbXBvcnRTY3JpcHRzKEUKIAog
ICAgIFZlY3RvcjxTdHJpbmc+IHVybHM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFy
Z3Muc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgdXJscy5hcHBlbmQoYXJncy5hdChpKS50b1N0cmlu
ZyhleGVjKSk7CisgICAgICAgIHVybHMuYXBwZW5kKHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KGkp
LnRvU3RyaW5nKGV4ZWMpKSk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gNTc2NjMp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Nyw4ICs2Nyw4IEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6b3Bl
bihFeGVjU3RhdGUKICAgICBpZiAoYXJncy5zaXplKCkgPCAyKQogICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7CiAKLSAg
ICBjb25zdCBLVVJMJiB1cmwgPSBpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Y29t
cGxldGVVUkwoYXJncy5hdCgxKS50b1N0cmluZyhleGVjKSk7Ci0gICAgU3RyaW5nIG1ldGhvZCA9
IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgY29uc3QgS1VSTCYgdXJsID0gaW1wbCgp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmNvbXBsZXRlVVJMKHVzdHJpbmdUb1N0cmluZyhh
cmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgU3RyaW5nIG1ldGhvZCA9IHVzdHJpbmdU
b1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgIGlmIChhcmdzLnNpemUoKSA+PSAzKSB7CkBAIC05Nyw3ICs5Nyw3IEBAIEpT
VmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWQKICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpOwogCiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLT5zZXRSZXF1ZXN0SGVhZGVyKGFy
Z3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYyksIGVjKTsK
KyAgICBpbXBsKCktPnNldFJlcXVlc3RIZWFkZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwg
dXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYykpLCBlYyk7CiAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KQEAg
LTExOCw3ICsxMTgsNyBAQCBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnNlbmQoRXhlY1N0YXRl
CiAgICAgICAgIGVsc2UgaWYgKHZhbC5pbmhlcml0cygmSlNET01Gb3JtRGF0YTo6c19pbmZvKSkK
ICAgICAgICAgICAgIGltcGwoKS0+c2VuZCh0b0RPTUZvcm1EYXRhKHZhbCksIGVjKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgaW1wbCgpLT5zZW5kKHZhbC50b1N0cmluZyhleGVjKSwgZWMp
OworICAgICAgICAgICAgaW1wbCgpLT5zZW5kKHVzdHJpbmdUb1N0cmluZyh2YWwudG9TdHJpbmco
ZXhlYykpLCBlYyk7CiAgICAgfQogCiAgICAgaW50IHNpZ25lZExpbmVOdW1iZXI7CkBAIC0xMjcs
NyArMTI3LDcgQEAgSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpzZW5kKEV4ZWNTdGF0ZQogICAg
IEpTVmFsdWUgZnVuY3Rpb247CiAgICAgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVMYXN0
Q2FsbGVyKGV4ZWMsIHNpZ25lZExpbmVOdW1iZXIsIHNvdXJjZUlELCBzb3VyY2VVUkwsIGZ1bmN0
aW9uKTsKICAgICBpbXBsKCktPnNldExhc3RTZW5kTGluZU51bWJlcihzaWduZWRMaW5lTnVtYmVy
ID49IDAgPyBzaWduZWRMaW5lTnVtYmVyIDogMCk7Ci0gICAgaW1wbCgpLT5zZXRMYXN0U2VuZFVS
TChzb3VyY2VVUkwpOworICAgIGltcGwoKS0+c2V0TGFzdFNlbmRVUkwodXN0cmluZ1RvU3RyaW5n
KHNvdXJjZVVSTCkpOwogCiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKQEAgLTE0OSw3ICsxNDksNyBAQCBKU1ZhbHVlIEpTWE1MSHR0cFJl
cXVlc3Q6Om92ZXJyaWRlTWltZVR5CiAgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50
cyIpOwogCi0gICAgaW1wbCgpLT5vdmVycmlkZU1pbWVUeXBlKGFyZ3MuYXQoMCkudG9TdHJpbmco
ZXhlYykpOworICAgIGltcGwoKS0+b3ZlcnJpZGVNaW1lVHlwZSh1c3RyaW5nVG9TdHJpbmcoYXJn
cy5hdCgwKS50b1N0cmluZyhleGVjKSkpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20uY3Bw
CShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29y
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksOSArODksOSBAQCBKU1ZhbHVlIEpTWFNM
VFByb2Nlc3Nvcjo6c2V0UGFyYW1ldGVyKEV4CiB7CiAgICAgaWYgKGFyZ3MuYXQoMSkuaXNVbmRl
ZmluZWRPck51bGwoKSB8fCBhcmdzLmF0KDIpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOyAvLyBUaHJvdyBleGNlcHRpb24/Ci0gICAgU3RyaW5nIG5h
bWVzcGFjZVVSSSA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7Ci0gICAgU3RyaW5nIGxvY2Fs
TmFtZSA9IGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYyk7Ci0gICAgU3RyaW5nIHZhbHVlID0gYXJn
cy5hdCgyKS50b1N0cmluZyhleGVjKTsKKyAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdXN0cmlu
Z1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBsb2NhbE5h
bWUgPSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgxKS50b1N0cmluZyhleGVjKSk7CisgICAgU3Ry
aW5nIHZhbHVlID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMikudG9TdHJpbmcoZXhlYykpOwog
ICAgIGltcGwoKS0+c2V0UGFyYW1ldGVyKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lLCB2YWx1ZSk7
CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CkBAIC0xMDAsOCArMTAwLDggQEAgSlNWYWx1
ZSBKU1hTTFRQcm9jZXNzb3I6OmdldFBhcmFtZXRlcihFeAogewogICAgIGlmIChhcmdzLmF0KDEp
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
IFN0cmluZyBuYW1lc3BhY2VVUkkgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOwotICAgIFN0
cmluZyBsb2NhbE5hbWUgPSBhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMpOworICAgIFN0cmluZyBu
YW1lc3BhY2VVUkkgPSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSk7
CisgICAgU3RyaW5nIGxvY2FsTmFtZSA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDEpLnRvU3Ry
aW5nKGV4ZWMpKTsKICAgICBTdHJpbmcgdmFsdWUgPSBpbXBsKCktPmdldFBhcmFtZXRlcihuYW1l
c3BhY2VVUkksIGxvY2FsTmFtZSk7CiAgICAgcmV0dXJuIGpzU3RyaW5nT3JVbmRlZmluZWQoZXhl
YywgdmFsdWUpOwogfQpAQCAtMTEwLDggKzExMCw4IEBAIEpTVmFsdWUgSlNYU0xUUHJvY2Vzc29y
OjpyZW1vdmVQYXJhbWV0ZXIKIHsKICAgICBpZiAoYXJncy5hdCgxKS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBTdHJpbmcgbmFtZXNwYWNl
VVJJID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKTsKLSAgICBTdHJpbmcgbG9jYWxOYW1lID0g
YXJncy5hdCgxKS50b1N0cmluZyhleGVjKTsKKyAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdXN0
cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBsb2Nh
bE5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgxKS50b1N0cmluZyhleGVjKSk7CiAgICAg
aW1wbCgpLT5yZW1vdmVQYXJhbWV0ZXIobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpOwogICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVs
ZWRBY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVk
QWN0aW9uLmNwcAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVk
dWxlZEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgUGFzc093blB0
cjxTY2hlZHVsZWRBY3Rpb24+IFNjaGVkdWxlZEFjdAogICAgICAgICBVU3RyaW5nIHN0cmluZyA9
IHYudG9TdHJpbmcoZXhlYyk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbmV3IFNjaGVkdWxlZEFjdGlvbihz
dHJpbmcsIGlzb2xhdGVkV29ybGQpOworICAgICAgICByZXR1cm4gbmV3IFNjaGVkdWxlZEFjdGlv
bih1c3RyaW5nVG9TdHJpbmcoc3RyaW5nKSwgaXNvbGF0ZWRXb3JsZCk7CiAgICAgfQogICAgIEFy
Z0xpc3QgYXJnc1RhaWw7CiAgICAgYXJncy5nZXRTbGljZSgyLCBhcmdzVGFpbCk7CkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiA1NzY2MykKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjcmlwdENhbGxGcmFtZTo6
U2NyaXB0Q2FsbEZyYW1lKGNvbnN0IFVTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgY29uc3QgVVN0cmlu
ZyYgdXJsU3RyaW5nLCBpbnQgbGluZU51bWJlciwgY29uc3QgQXJnTGlzdCYgYXJncywgdW5zaWdu
ZWQgc2tpcEFyZ3VtZW50Q291bnQpCiAgICAgOiBtX2Z1bmN0aW9uTmFtZShmdW5jdGlvbk5hbWUp
Ci0gICAgLCBtX3NvdXJjZVVSTChQYXJzZWRVUkxTdHJpbmcsIHVybFN0cmluZykKKyAgICAsIG1f
c291cmNlVVJMKFBhcnNlZFVSTFN0cmluZywgdXN0cmluZ1RvU3RyaW5nKHVybFN0cmluZykpCiAg
ICAgLCBtX2xpbmVOdW1iZXIobGluZU51bWJlcikKIHsKICAgICBzaXplX3QgYXJndW1lbnRDb3Vu
dCA9IGFyZ3Muc2l6ZSgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xs
ZXIuY3BwCShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29u
dHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCBKU0RPTVdpbmRv
d1NoZWxsKiBTY3JpcHRDb250cm9sbGVyOjpjcmVhCiBTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9s
bGVyOjpldmFsdWF0ZUluV29ybGQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSwg
RE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKIHsKICAgICBjb25zdCBTb3VyY2VDb2RlJiBqc1NvdXJj
ZUNvZGUgPSBzb3VyY2VDb2RlLmpzU291cmNlQ29kZSgpOwotICAgIFN0cmluZyBzb3VyY2VVUkwg
PSBqc1NvdXJjZUNvZGUucHJvdmlkZXIoKS0+dXJsKCk7CisgICAgU3RyaW5nIHNvdXJjZVVSTCA9
IHVzdHJpbmdUb1N0cmluZyhqc1NvdXJjZUNvZGUucHJvdmlkZXIoKS0+dXJsKCkpOwogCiAgICAg
aWYgKCFtX1hTU0F1ZGl0b3ItPmNhbkV2YWx1YXRlKHNvdXJjZUNvZGUuc291cmNlKCkpKSB7CiAg
ICAgICAgIC8vIFRoaXMgc2NyaXB0IGlzIG5vdCBzYWZlIHRvIGJlIGV2YWx1YXRlZC4KSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiA1NzY2
MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzAsNyArMTcwLDcgQEAgYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFzQnJl
YWtwb2ludChpbgogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIEpTVmFsdWUgZXhjZXB0aW9u
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5ldmFsdWF0ZShicmVh
a0l0LT5zZWNvbmQuY29uZGl0aW9uLCBleGNlcHRpb24pOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
bV9jdXJyZW50Q2FsbEZyYW1lLT5ldmFsdWF0ZShzdHJpbmdUb1VTdHJpbmcoYnJlYWtJdC0+c2Vj
b25kLmNvbmRpdGlvbiksIGV4Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2VwdGlvbikgewogICAgICAg
ICAvLyBBbiBlcnJvbmVvdXMgY29uZGl0aW9uIGNvdW50cyBhcyAiZmFsc2UiLgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0yNTAsOSArMjUwLDkgQEAgU2NyaXB0U3RhdGUqIFNjcmlwdERlYnVn
U2VydmVyOjpjdXJyZW50QwogCiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFBh
cnNlU291cmNlKGNvbnN0IExpc3RlbmVyU2V0JiBsaXN0ZW5lcnMsIGNvbnN0IEpTQzo6U291cmNl
Q29kZSYgc291cmNlKQogewotICAgIFN0cmluZyBzb3VyY2VJRCA9IEpTQzo6VVN0cmluZyhKU0M6
OlVTdHJpbmc6OmZyb20oc291cmNlLnByb3ZpZGVyKCktPmFzSUQoKSkpOwotICAgIFN0cmluZyB1
cmwgPSBzb3VyY2UucHJvdmlkZXIoKS0+dXJsKCk7Ci0gICAgU3RyaW5nIGRhdGEgPSBKU0M6OlVT
dHJpbmcoc291cmNlLmRhdGEoKSwgc291cmNlLmxlbmd0aCgpKTsKKyAgICBTdHJpbmcgc291cmNl
SUQgPSB1c3RyaW5nVG9TdHJpbmcoSlNDOjpVU3RyaW5nOjpmcm9tKHNvdXJjZS5wcm92aWRlcigp
LT5hc0lEKCkpKTsKKyAgICBTdHJpbmcgdXJsID0gdXN0cmluZ1RvU3RyaW5nKHNvdXJjZS5wcm92
aWRlcigpLT51cmwoKSk7CisgICAgU3RyaW5nIGRhdGEgPSB1c3RyaW5nVG9TdHJpbmcoSlNDOjpV
U3RyaW5nKHNvdXJjZS5kYXRhKCksIHNvdXJjZS5sZW5ndGgoKSkpOwogICAgIGludCBmaXJzdExp
bmUgPSBzb3VyY2UuZmlyc3RMaW5lKCk7CiAKICAgICBWZWN0b3I8U2NyaXB0RGVidWdMaXN0ZW5l
cio+IGNvcHk7CkBAIC0yNjMsOCArMjYzLDggQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlz
cGF0Y2hEaWRQYXJzZQogCiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaEZhaWxlZFRv
UGFyc2VTb3VyY2UoY29uc3QgTGlzdGVuZXJTZXQmIGxpc3RlbmVycywgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKIHsK
LSAgICBTdHJpbmcgdXJsID0gc291cmNlLnByb3ZpZGVyKCktPnVybCgpOwotICAgIFN0cmluZyBk
YXRhID0gSlNDOjpVU3RyaW5nKHNvdXJjZS5kYXRhKCksIHNvdXJjZS5sZW5ndGgoKSk7CisgICAg
U3RyaW5nIHVybCA9IHVzdHJpbmdUb1N0cmluZyhzb3VyY2UucHJvdmlkZXIoKS0+dXJsKCkpOwor
ICAgIFN0cmluZyBkYXRhID0gdXN0cmluZ1RvU3RyaW5nKEpTQzo6VVN0cmluZyhzb3VyY2UuZGF0
YSgpLCBzb3VyY2UubGVuZ3RoKCkpKTsKICAgICBpbnQgZmlyc3RMaW5lID0gc291cmNlLmZpcnN0
TGluZSgpOwogCiAgICAgVmVjdG9yPFNjcmlwdERlYnVnTGlzdGVuZXIqPiBjb3B5OwpAQCAtMzEw
LDcgKzMxMCw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNvdXJjZVBhcnNlZChFeGUKIAog
ICAgIGlmIChoYXNHbG9iYWxMaXN0ZW5lcnMoKSkgewogICAgICAgICBpZiAoaXNFcnJvcikKLSAg
ICAgICAgICAgIGRpc3BhdGNoRmFpbGVkVG9QYXJzZVNvdXJjZShtX2xpc3RlbmVycywgc291cmNl
LCBlcnJvckxpbmUsIGVycm9yTWVzc2FnZSk7CisgICAgICAgICAgICBkaXNwYXRjaEZhaWxlZFRv
UGFyc2VTb3VyY2UobV9saXN0ZW5lcnMsIHNvdXJjZSwgZXJyb3JMaW5lLCB1c3RyaW5nVG9TdHJp
bmcoZXJyb3JNZXNzYWdlKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGRpc3BhdGNoRGlk
UGFyc2VTb3VyY2UobV9saXN0ZW5lcnMsIHNvdXJjZSk7CiAgICAgfQpAQCAtMzE4LDcgKzMxOCw3
IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNvdXJjZVBhcnNlZChFeGUKICAgICBpZiAoTGlz
dGVuZXJTZXQqIHBhZ2VMaXN0ZW5lcnMgPSBtX3BhZ2VMaXN0ZW5lcnNNYXAuZ2V0KHBhZ2UpKSB7
CiAgICAgICAgIEFTU0VSVCghcGFnZUxpc3RlbmVycy0+aXNFbXB0eSgpKTsKICAgICAgICAgaWYg
KGlzRXJyb3IpCi0gICAgICAgICAgICBkaXNwYXRjaEZhaWxlZFRvUGFyc2VTb3VyY2UoKnBhZ2VM
aXN0ZW5lcnMsIHNvdXJjZSwgZXJyb3JMaW5lLCBlcnJvck1lc3NhZ2UpOworICAgICAgICAgICAg
ZGlzcGF0Y2hGYWlsZWRUb1BhcnNlU291cmNlKCpwYWdlTGlzdGVuZXJzLCBzb3VyY2UsIGVycm9y
TGluZSwgdXN0cmluZ1RvU3RyaW5nKGVycm9yTWVzc2FnZSkpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBkaXNwYXRjaERpZFBhcnNlU291cmNlKCpwYWdlTGlzdGVuZXJzLCBzb3VyY2UpOwog
ICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRFdmVudExpc3RlbmVyLmNw
cAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlz
dGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgU3RyaW5nIGdldEV2
ZW50TGlzdGVuZXJIYW5kbGVyQm9keShTY3JpcAogICAgIEpTQzo6SlNPYmplY3QqIGpzRnVuY3Rp
b24gPSBqc0xpc3RlbmVyLT5qc0Z1bmN0aW9uKGNvbnRleHQpOwogICAgIGlmICghanNGdW5jdGlv
bikKICAgICAgICAgcmV0dXJuICIiOwotICAgIHJldHVybiBqc0Z1bmN0aW9uLT50b1N0cmluZyhz
Y3JpcHRTdGF0ZSk7CisgICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyhqc0Z1bmN0aW9uLT50b1N0
cmluZyhzY3JpcHRTdGF0ZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCShyZXZpc2lvbiA1NzY2
MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCB2b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5k
QXJndW1lbnQoCiAKIHZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChjb25z
dCBTY3JpcHRTdHJpbmcmIGFyZ3VtZW50KQogewotICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc1N0
cmluZyhtX2V4ZWMsIGFyZ3VtZW50KSk7CisgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzU3RyaW5n
KG1fZXhlYywgYXJndW1lbnQudXN0cmluZygpKSk7CiB9CiAKIHZvaWQgU2NyaXB0RnVuY3Rpb25D
YWxsOjphcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRWYWx1ZSYgYXJndW1lbnQpCkBAIC0xMzIs
NyArMTMyLDcgQEAgU2NyaXB0VmFsdWUgU2NyaXB0RnVuY3Rpb25DYWxsOjpjYWxsKGJvbwogCiAg
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAotICAgIEpTVmFsdWUgZnVu
Y3Rpb24gPSB0aGlzT2JqZWN0LT5nZXQobV9leGVjLCBJZGVudGlmaWVyKG1fZXhlYywgbV9uYW1l
KSk7CisgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IHRoaXNPYmplY3QtPmdldChtX2V4ZWMsIElkZW50
aWZpZXIobV9leGVjLCBzdHJpbmdUb1VTdHJpbmcobV9uYW1lKSkpOwogICAgIGlmIChtX2V4ZWMt
PmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAgIGlmIChyZXBvcnRFeGNlcHRpb25zKQogICAgICAg
ICAgICAgcmVwb3J0RXhjZXB0aW9uKG1fZXhlYywgbV9leGVjLT5leGNlcHRpb24oKSk7CkBAIC0x
NzAsNyArMTcwLDcgQEAgU2NyaXB0T2JqZWN0IFNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y29uc3RydQog
CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAotICAgIEpTT2JqZWN0
KiBjb25zdHJ1Y3RvciA9IGFzT2JqZWN0KHRoaXNPYmplY3QtPmdldChtX2V4ZWMsIElkZW50aWZp
ZXIobV9leGVjLCBtX25hbWUpKSk7CisgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yID0gYXNPYmpl
Y3QodGhpc09iamVjdC0+Z2V0KG1fZXhlYywgSWRlbnRpZmllcihtX2V4ZWMsIHN0cmluZ1RvVVN0
cmluZyhtX25hbWUpKSkpOwogICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAgICAg
ICAgIGlmIChyZXBvcnRFeGNlcHRpb25zKQogICAgICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKG1f
ZXhlYywgbV9leGVjLT5leGNlcHRpb24oKSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRP
YmplY3QuY3BwCShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBib29sIFNjcmlwdE9i
amVjdDo6c2V0KGNvbnN0IFN0cmluZyYgbmFtCiB7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBqc09iamVjdCgp
LT5wdXQobV9zY3JpcHRTdGF0ZSwgSWRlbnRpZmllcihtX3NjcmlwdFN0YXRlLCBuYW1lKSwganNT
dHJpbmcobV9zY3JpcHRTdGF0ZSwgdmFsdWUpLCBzbG90KTsKKyAgICBqc09iamVjdCgpLT5wdXQo
bV9zY3JpcHRTdGF0ZSwgSWRlbnRpZmllcihtX3NjcmlwdFN0YXRlLCBzdHJpbmdUb1VTdHJpbmco
bmFtZSkpLCBqc1N0cmluZyhtX3NjcmlwdFN0YXRlLCBzdHJpbmdUb1VTdHJpbmcodmFsdWUpKSwg
c2xvdCk7CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihtX3NjcmlwdFN0YXRlKTsKIH0KIApJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5jcHAJKHJldmlzaW9uIDU3NjYz
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQog
CisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZXIuaCIK
IAogI2luY2x1ZGUgPHByb2ZpbGVyL1Byb2ZpbGVyLmg+CkBAIC0zNiwxMiArMzcsMTIgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIFNjcmlwdFByb2ZpbGVyOjpzdGFydChTY3JpcHRTdGF0
ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7Ci0gICAgSlNDOjpQcm9maWxlcjo6cHJv
ZmlsZXIoKS0+c3RhcnRQcm9maWxpbmcoc3RhdGUsIHRpdGxlKTsKKyAgICBKU0M6OlByb2ZpbGVy
Ojpwcm9maWxlcigpLT5zdGFydFByb2ZpbGluZyhzdGF0ZSwgc3RyaW5nVG9VU3RyaW5nKHRpdGxl
KSk7CiB9CiAKIFBhc3NSZWZQdHI8U2NyaXB0UHJvZmlsZT4gU2NyaXB0UHJvZmlsZXI6OnN0b3Ao
U2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmIHRpdGxlKQogewotICAgIHJldHVybiBK
U0M6OlByb2ZpbGVyOjpwcm9maWxlcigpLT5zdG9wUHJvZmlsaW5nKHN0YXRlLCB0aXRsZSk7Cisg
ICAgcmV0dXJuIEpTQzo6UHJvZmlsZXI6OnByb2ZpbGVyKCktPnN0b3BQcm9maWxpbmcoc3RhdGUs
IHN0cmluZ1RvVVN0cmluZyh0aXRsZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0cmluZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RyaW5nLmgJKHJldmlzaW9uIDU3NjYzKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsNyBAQAogI2lmbmRlZiBTY3JpcHRTdHJpbmdfaAogI2RlZmluZSBTY3JpcHRTdHJpbmdfaAog
CisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
ICNpbmNsdWRlIDxydW50aW1lL1VTdHJpbmcuaD4KICNpbmNsdWRlIDxydW50aW1lL1N0cmluZ0J1
aWxkZXIuaD4KQEAgLTQ2LDYgKzQ3LDggQEAgcHVibGljOgogICAgIFNjcmlwdFN0cmluZyhjb25z
dCBKU0M6OlVTdHJpbmcmIHMpIDogbV9zdHIocykge30KIAogICAgIG9wZXJhdG9yIEpTQzo6VVN0
cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyOyB9CisgICAgb3BlcmF0b3IgU3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKG1fc3RyKTsgfQorICAgIGNvbnN0IEpTQzo6VVN0
cmluZyYgdXN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyOyB9CiAKICAgICBib29sIGlzTnVs
bCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyLmlzTnVsbCgpOyB9CiAgICAgc2l6ZV90IHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3N0ci5zaXplKCk7IH0KQEAgLTYwLDcgKzYzLDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgSlNDOjpTdHJpbmdCdWlsZGVyIGJ1ZmZlcjsKICAgICAgICAgYnVmZmVy
LmFwcGVuZChtX3N0cik7Ci0gICAgICAgIGJ1ZmZlci5hcHBlbmQocyk7CisgICAgICAgIGJ1ZmZl
ci5hcHBlbmQoc3RyaW5nVG9VU3RyaW5nKHMpKTsKICAgICAgICAgbV9zdHIgPSBidWZmZXIuYnVp
bGQoKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIGJvb2wgU2Ny
aXB0VmFsdWU6OmdldFN0cmluZyhTY3JpcHRTdGF0ZSoKICAgICBVU3RyaW5nIHVzdHJpbmc7CiAg
ICAgaWYgKCFtX3ZhbHVlLmdldCgpLmdldFN0cmluZyhzY3JpcHRTdGF0ZSwgdXN0cmluZykpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQgPSB1c3RyaW5nOworICAgIHJlc3VsdCA9
IHVzdHJpbmdUb1N0cmluZyh1c3RyaW5nKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpZm5kZWYgU2NyaXB0VmFsdWVfaAogI2RlZmluZSBTY3JpcHRWYWx1ZV9oCiAKKyNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUg
IlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU1ZhbHVlLmg+CkBAIC0zOSw3ICs0
MCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU3RyaW5nOwogY2xhc3MgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOwogCiBjbGFzcyBTY3JpcHRWYWx1ZSB7CkBAIC00OSw3ICs0OSw3
IEBAIHB1YmxpYzoKIAogICAgIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZS5nZXQoKTsgfQogICAgIGJvb2wgZ2V0U3RyaW5nKFNjcmlwdFN0YXRlKiwgU3RyaW5n
JiByZXN1bHQpIGNvbnN0OwotICAgIFN0cmluZyB0b1N0cmluZyhTY3JpcHRTdGF0ZSogc2NyaXB0
U3RhdGUpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCkudG9TdHJpbmcoc2NyaXB0U3RhdGUp
OyB9CisgICAgU3RyaW5nIHRvU3RyaW5nKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkgY29uc3Qg
eyByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKG1fdmFsdWUuZ2V0KCkudG9TdHJpbmcoc2NyaXB0U3Rh
dGUpKTsgfQogICAgIGJvb2wgaXNFcXVhbChTY3JpcHRTdGF0ZSosIGNvbnN0IFNjcmlwdFZhbHVl
JikgY29uc3Q7CiAgICAgYm9vbCBpc051bGwoKSBjb25zdDsKICAgICBib29sIGlzVW5kZWZpbmVk
KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwCShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXQoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBT
ZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCht
X25hbWVzLnNpemUoKSA9PSBtX3ZhbHVlcy5zaXplKCkpOwotICAgICAgICBtX25hbWVzLmFwcGVu
ZChTdHJpbmcocHJvcGVydHlOYW1lLnVzdHJpbmcoKSkuY3Jvc3NUaHJlYWRTdHJpbmcoKS5pbXBs
KCkpOworICAgICAgICBtX25hbWVzLmFwcGVuZChpZGVudGlmaWVyVG9TdHJpbmcocHJvcGVydHlO
YW1lKS5jcm9zc1RocmVhZFN0cmluZygpLmltcGwoKSk7CiAgICAgICAgIG1fdmFsdWVzLmFwcGVu
ZCh2YWx1ZSk7CiAgICAgfQogCkBAIC01NTQsNyArNTU0LDcgQEAgc3RydWN0IFNlcmlhbGl6aW5n
VHJlZVdhbGtlciA6IHB1YmxpYyBCYQogICAgICAgICAgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZURhdGEodmFsdWUpOwogCiAgICAgICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKQotICAg
ICAgICAgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEoYXNTdHJpbmcodmFsdWUp
LT52YWx1ZShtX2V4ZWMpKTsKKyAgICAgICAgICAgIHJldHVybiBTZXJpYWxpemVkU2NyaXB0VmFs
dWVEYXRhKHVzdHJpbmdUb1N0cmluZyhhc1N0cmluZyh2YWx1ZSktPnZhbHVlKG1fZXhlYykpKTsK
IAogICAgICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKICAgICAgICAgICAgIHJldHVybiBTZXJp
YWxpemVkU2NyaXB0VmFsdWVEYXRhKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6Ok51bWJlclR5
cGUsIHZhbHVlLnVuY2hlY2tlZEdldE51bWJlcigpKTsKQEAgLTc3Nyw3ICs3NzcsNyBAQCBzdHJ1
Y3QgRGVzZXJpYWxpemluZ1RyZWVXYWxrZXIgOiBwdWJsaWMgCiAKICAgICB2b2lkIHB1dFByb3Bl
cnR5KEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlZlB0cjxTdHJpbmdJbXBsPiBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBvYmplY3QtPnB1dERpcmVjdChJZGVu
dGlmaWVyKG1fZXhlYywgU3RyaW5nKHByb3BlcnR5TmFtZSkpLCB2YWx1ZSk7CisgICAgICAgIG9i
amVjdC0+cHV0RGlyZWN0KElkZW50aWZpZXIobV9leGVjLCBzdHJpbmdUb1VTdHJpbmcoU3RyaW5n
KHByb3BlcnR5TmFtZSkpKSwgdmFsdWUpOwogICAgIH0KIAogICAgIGJvb2wgc3RhcnRBcnJheShS
ZWZQdHI8U2VyaWFsaXplZEFycmF5PiwgSlNBcnJheSogb3V0QXJyYXkpCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL1N0cmluZ1NvdXJjZVByb3ZpZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TdHJpbmdTb3VyY2VQcm92aWRlci5oCShyZXZpc2lvbiA1NzY2MykKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvU3RyaW5nU291cmNlUHJvdmlkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksNyBAQAogI2lmbmRlZiBTdHJpbmdTb3VyY2VQcm92aWRlcl9oCiAjZGVm
aW5lIFN0cmluZ1NvdXJjZVByb3ZpZGVyX2gKIAorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgog
I2luY2x1ZGUgIlNjcmlwdFNvdXJjZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSA8cGFyc2VyL1NvdXJj
ZUNvZGUuaD4KIApAQCAtNDUsNyArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBw
cml2YXRlOgogICAgICAgICBTdHJpbmdTb3VyY2VQcm92aWRlcihjb25zdCBTdHJpbmcmIHNvdXJj
ZSwgY29uc3QgU3RyaW5nJiB1cmwpCi0gICAgICAgICAgICA6IFNjcmlwdFNvdXJjZVByb3ZpZGVy
KHVybCkKKyAgICAgICAgICAgIDogU2NyaXB0U291cmNlUHJvdmlkZXIoc3RyaW5nVG9VU3RyaW5n
KHVybCkpCiAgICAgICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAgICAgewogICAgICAg
ICB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlz
aW9uIDU3NjYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjg5LDcgKzI4OSw3IEBAIC0gKGlkKWNhbGxXZWJTY3JpcHRNZXRo
b2Q6KE5TU3RyaW5nICopbmEKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVj
dF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRF
eGNlcHRpb24oKSk7CiAKLSAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gW3NlbGYgX2ltcF0tPmdldChl
eGVjLCBJZGVudGlmaWVyKGV4ZWMsIFN0cmluZyhuYW1lKSkpOworICAgIEpTVmFsdWUgZnVuY3Rp
b24gPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3Ry
aW5nKFN0cmluZyhuYW1lKSkpKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlw
ZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICBpZiAoY2Fs
bFR5cGUgPT0gQ2FsbFR5cGVOb25lKQpAQCAtMzY2LDcgKzM2Niw3IEBAIC0gKHZvaWQpc2V0VmFs
dWU6KGlkKXZhbHVlIGZvcktleTooTlNTdHIKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwogCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgW3NlbGYgX2ltcF0t
PnB1dChleGVjLCBJZGVudGlmaWVyKGV4ZWMsIFN0cmluZyhrZXkpKSwgY29udmVydE9iamNWYWx1
ZVRvVmFsdWUoZXhlYywgJnZhbHVlLCBPYmpjT2JqZWN0VHlwZSwgW3NlbGYgX3Jvb3RPYmplY3Rd
KSwgc2xvdCk7CisgICAgW3NlbGYgX2ltcF0tPnB1dChleGVjLCBJZGVudGlmaWVyKGV4ZWMsIHN0
cmluZ1RvVVN0cmluZyhTdHJpbmcoa2V5KSkpLCBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVj
LCAmdmFsdWUsIE9iamNPYmplY3RUeXBlLCBbc2VsZiBfcm9vdE9iamVjdF0pLCBzbG90KTsKIAog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBhZGRFeGNlcHRpb25Ub0Nv
bnNvbGUoZXhlYyk7CkBAIC0zOTEsNyArMzkxLDcgQEAgLSAoaWQpdmFsdWVGb3JLZXk6KE5TU3Ry
aW5nICopa2V5CiAgICAgICAgIC8vIGxlYXZpbmcgdGhlIGxvY2sgcGVybWFuZW50bHkgaGVsZAog
ICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgICAgICAKLSAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIo
ZXhlYywgU3RyaW5nKGtleSkpKTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBbc2VsZiBfaW1w
XS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5nKFN0cmluZyhrZXkp
KSkpOwogICAgICAgICAKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAgICAg
ICAgICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYyk7CkBAIC00MjAsNyArNDIwLDcgQEAg
LSAodm9pZClyZW1vdmVXZWJTY3JpcHRLZXk6KE5TU3RyaW5nICopawogICAgIEFTU0VSVCghZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpOwogCiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKLSAgICBbc2VsZiBfaW1wXS0+ZGVsZXRlUHJvcGVydHkoZXhlYywgSWRlbnRpZmllcihl
eGVjLCBTdHJpbmcoa2V5KSkpOworICAgIFtzZWxmIF9pbXBdLT5kZWxldGVQcm9wZXJ0eShleGVj
LCBJZGVudGlmaWVyKGV4ZWMsIHN0cmluZ1RvVVN0cmluZyhTdHJpbmcoa2V5KSkpKTsKIAogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBhZGRFeGNlcHRpb25Ub0NvbnNv
bGUoZXhlYyk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHJldmlzaW9uIDU3NjYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMTg3Niw3ICsxODc2LDcgQEAgc3ViIEdl
dE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlCiAKIG15ICVuYXRpdmVUeXBlID0gKAogICAgICJDb21w
YXJlSG93IiA9PiAiUmFuZ2U6OkNvbXBhcmVIb3ciLAotICAgICJET01TdHJpbmciID0+ICJjb25z
dCBVU3RyaW5nJiIsCisgICAgIkRPTVN0cmluZyIgPT4gImNvbnN0IFN0cmluZyYiLAogICAgICJE
T01PYmplY3QiID0+ICJTY3JpcHRWYWx1ZSIsCiAgICAgIk5vZGVGaWx0ZXIiID0+ICJSZWZQdHI8
Tm9kZUZpbHRlcj4iLAogICAgICJTVkdBbmdsZSIgPT4gIlNWR0FuZ2xlIiwKQEAgLTE5MjgsNyAr
MTkyOCw3IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICBpZiAoJHR5cGUgZXEgIkRPTVN0cmlu
ZyIpIHsKICAgICAgICAgcmV0dXJuICJ2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCAk
dmFsdWUpIiBpZiAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29udmVydE51bGxU
b051bGxTdHJpbmcifTsKICAgICAgICAgcmV0dXJuICJ2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5l
ZE9yTnVsbENoZWNrKGV4ZWMsICR2YWx1ZSkiIGlmICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDb252ZXJ0VW5kZWZpbmVkT3JOdWxsVG9OdWxsU3RyaW5nIn07Ci0gICAgICAgIHJl
dHVybiAiJHZhbHVlLnRvU3RyaW5nKGV4ZWMpIjsKKyAgICAgICAgcmV0dXJuICJ1c3RyaW5nVG9T
dHJpbmcoJHZhbHVlLnRvU3RyaW5nKGV4ZWMpKSI7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVx
ICJET01PYmplY3QiKSB7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmNwcAkocmV2aXNpb24g
NTc2NjMpCisrKyBXZWJDb3JlL2JyaWRnZS9JZGVudGlmaWVyUmVwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSWRl
bnRpZmllclJlcC5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogCiAjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDxydW50aW1lL1VTdHJpbmcuaD4KQEAgLTkxLDcgKzky
LDcgQEAgSWRlbnRpZmllclJlcCogSWRlbnRpZmllclJlcDo6Z2V0KGNvbnN0IAogICAgIGlmICgh
bmFtZSkKICAgICAgICAgcmV0dXJuIDA7CiAgIAotICAgIFVTdHJpbmcgc3RyaW5nID0gU3RyaW5n
Ojpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhuYW1lLCBzdHJsZW4obmFtZSkpOworICAgIFVT
dHJpbmcgc3RyaW5nID0gc3RyaW5nVG9VU3RyaW5nKFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4x
RmFsbGJhY2sobmFtZSwgc3RybGVuKG5hbWUpKSk7CiAgICAgcGFpcjxTdHJpbmdJZGVudGlmaWVy
TWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gc3RyaW5nSWRlbnRpZmllck1hcCgpLmFkZChz
dHJpbmcucmVwKCksIDApOwogICAgIGlmIChyZXN1bHQuc2Vjb25kKSB7CiAgICAgICAgIEFTU0VS
VCghcmVzdWx0LmZpcnN0LT5zZWNvbmQpOwpJbmRleDogV2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxp
dHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAkocmV2
aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBTdHJpbmcgY29udmVydE5QU3RyaW5nVG9VVEYxNihj
b25zdCBOUFN0CiAKIElkZW50aWZpZXIgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBOUFVURjgqIG5hbWUpCiB7Ci0gICAgcmV0dXJuIElkZW50aWZpZXIo
ZXhlYywgY29udmVydFVURjhUb1VURjE2V2l0aExhdGluMUZhbGxiYWNrKG5hbWUsIC0xKSk7Cisg
ICAgcmV0dXJuIElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5nKGNvbnZlcnRVVEY4VG9V
VEYxNldpdGhMYXRpbjFGYWxsYmFjayhuYW1lLCAtMSkpKTsKIH0KIAogfSB9CkluZGV4OiBXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNTc2NjMpCisr
KyBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTcyLDcgKzk3Miw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2NyaXB0SW1w
b3J0ZWQKICAgICBpZiAoIXJlc291cmNlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgcmVz
b3VyY2UtPnNldE92ZXJyaWRlQ29udGVudChTY3JpcHRTdHJpbmcoc291cmNlU3RyaW5nKSwgSW5z
cGVjdG9yUmVzb3VyY2U6OlNjcmlwdCk7CisgICAgcmVzb3VyY2UtPnNldE92ZXJyaWRlQ29udGVu
dChTY3JpcHRTdHJpbmcoc3RyaW5nVG9VU3RyaW5nKHNvdXJjZVN0cmluZykpLCBJbnNwZWN0b3JS
ZXNvdXJjZTo6U2NyaXB0KTsKIAogICAgIGlmIChtX2Zyb250ZW5kKQogICAgICAgICByZXNvdXJj
ZS0+dXBkYXRlU2NyaXB0T2JqZWN0KG1fZnJvbnRlbmQuZ2V0KCkpOwpAQCAtMTM0Nyw3ICsxMzQ3
LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjphZGRQcm9maWxlRmluaQogewogICAgIFJl
ZlB0cjxTY3JpcHRQcm9maWxlPiBwcm9maWxlID0gcHJwUHJvZmlsZTsKIAotICAgIFN0cmluZyBt
ZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlByb2ZpbGUgXCJ3ZWJraXQtcHJvZmlsZTovLyVzLyVz
IyVkXCIgZmluaXNoZWQuIiwgQ1BVUHJvZmlsZVR5cGUsIGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1
ZW5jZXMocHJvZmlsZS0+dGl0bGUoKSkudXRmOCgpLmRhdGEoKSwgcHJvZmlsZS0+dWlkKCkpOwor
ICAgIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlByb2ZpbGUgXCJ3ZWJraXQtcHJv
ZmlsZTovLyVzLyVzIyVkXCIgZmluaXNoZWQuIiwgQ1BVUHJvZmlsZVR5cGUsIGVuY29kZVdpdGhV
UkxFc2NhcGVTZXF1ZW5jZXModXN0cmluZ1RvU3RyaW5nKHByb2ZpbGUtPnRpdGxlKCkpKS51dGY4
KCkuZGF0YSgpLCBwcm9maWxlLT51aWQoKSk7CiAgICAgYWRkTWVzc2FnZVRvQ29uc29sZShKU01l
c3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBMb2dNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIGxp
bmVOdW1iZXIsIHNvdXJjZVVSTCk7CiB9CiAKQEAgLTEzODUsNyArMTM4NSw3IEBAIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6Z2V0UHJvZmlsZShsb24KIFNjcmlwdE9iamVjdCBJbnNwZWN0b3JD
b250cm9sbGVyOjpjcmVhdGVQcm9maWxlSGVhZGVyKGNvbnN0IFNjcmlwdFByb2ZpbGUmIHByb2Zp
bGUpCiB7CiAgICAgU2NyaXB0T2JqZWN0IGhlYWRlciA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdE9i
amVjdCgpOwotICAgIGhlYWRlci5zZXQoInRpdGxlIiwgcHJvZmlsZS50aXRsZSgpKTsKKyAgICBo
ZWFkZXIuc2V0KCJ0aXRsZSIsIHVzdHJpbmdUb1N0cmluZyhwcm9maWxlLnRpdGxlKCkpKTsKICAg
ICBoZWFkZXIuc2V0KCJ1aWQiLCBwcm9maWxlLnVpZCgpKTsKICAgICBoZWFkZXIuc2V0KCJ0eXBl
SWQiLCBTdHJpbmcoQ1BVUHJvZmlsZVR5cGUpKTsKICAgICByZXR1cm4gaGVhZGVyOwpJbmRleDog
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcAkocmV2aXNpb24gNTc2NjMpCisr
KyBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4OSw3ICsyODksNyBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlOjpzZXRPdmVycmlkZUNv
bnRlCiBTdHJpbmcgSW5zcGVjdG9yUmVzb3VyY2U6OnNvdXJjZVN0cmluZygpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX292ZXJyaWRlQ29udGVudC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZyhtX292ZXJyaWRlQ29udGVudCk7CisgICAgICAgIHJldHVybiB1c3RyaW5nVG9TdHJpbmcobV9v
dmVycmlkZUNvbnRlbnQpOwogCiAgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWU7CiAgICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gcmVzb3VyY2VEYXRhKCZ0ZXh0RW5jb2RpbmdOYW1l
KTsKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCShyZXZp
c2lvbiA1NzY2MykKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIFN0cmluZyBKYXZhU2NyaXB0Q2FsbEZy
YW1lOjpmdW5jdGlvbk5hbWUKICAgICBVU3RyaW5nIGZ1bmN0aW9uTmFtZSA9IG1fZGVidWdnZXJD
YWxsRnJhbWUuY2FsY3VsYXRlZEZ1bmN0aW9uTmFtZSgpOwogICAgIGlmIChmdW5jdGlvbk5hbWUu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGZ1bmN0aW9u
TmFtZTsKKyAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKGZ1bmN0aW9uTmFtZSk7CiB9CiAKIERl
YnVnZ2VyQ2FsbEZyYW1lOjpUeXBlIEphdmFTY3JpcHRDYWxsRnJhbWU6OnR5cGUoKSBjb25zdApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9LVVJMLmgJKHJldmlzaW9uIDU3NjYzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE3OSw5ICsxNzksNiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQg
cGF0aEVuZCgpIGNvbnN0OwogICAgIHVuc2lnbmVkIHBhdGhBZnRlckxhc3RTbGFzaCgpIGNvbnN0
OwogICAgIG9wZXJhdG9yIGNvbnN0IFN0cmluZyYoKSBjb25zdCB7IHJldHVybiBzdHJpbmcoKTsg
fQotI2lmIFVTRShKU0MpCi0gICAgb3BlcmF0b3IgSlNDOjpVU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gc3RyaW5nKCk7IH0KLSNlbmRpZgogCiAjaWYgUExBVEZPUk0oQ0YpCiAgICAgS1VSTChDRlVS
TFJlZik7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNwcAkocmV2aXNp
b24gNTc2NjMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjk1LDcgKzI5NSw3IEBAIEF0b21pY1N0cmluZ0ltcGwqIEF0b21pY1N0
cmluZzo6ZmluZChjb24KIAogQXRvbWljU3RyaW5nOjpvcGVyYXRvciBVU3RyaW5nKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9zdHJpbmc7CisgICAgcmV0dXJuIG1fc3RyaW5nLmltcGwoKS0+dXN0
cmluZygpOwogfQogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNT
dHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5n
LmgJKHJldmlzaW9uIDU3NjYzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmlu
Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiwxMyBAQAogI2RlZmluZSBBVE9NSUNTVFJJ
TkdfQ09OVkVSU0lPTgogI2VuZGlmCiAKKyNpZiBVU0UoSlNDKQorbmFtZXNwYWNlIEpTQyB7Citj
bGFzcyBJZGVudGlmaWVyOworY2xhc3MgVVN0cmluZzsKK30KKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHN0cnVjdCBBdG9taWNTdHJpbmdIYXNoOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1BsYXRmb3JtU3RyaW5nLmgJKHJldmlzaW9uIDU3NjYzKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDEzICs1MCw2
IEBAIGNsYXNzIHd4U3RyaW5nOwogY2xhc3MgQlN0cmluZzsKICNlbmRpZgogCi0jaWYgVVNFKEpT
QykKLW5hbWVzcGFjZSBKU0MgewotY2xhc3MgSWRlbnRpZmllcjsKLWNsYXNzIFVTdHJpbmc7Ci19
Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdURiB7CiBjbGFzcyBDU3RyaW5nOwogfQpAQCAtOTMsMTAg
Kzg2LDYgQEAgcHVibGljOgogICAgIFN0cmluZygpIHsgfSAvLyBnaXZlcyBudWxsIHN0cmluZywg
ZGlzdGluZ3Vpc2hhYmxlIGZyb20gYW4gZW1wdHkgc3RyaW5nCiAgICAgU3RyaW5nKGNvbnN0IFVD
aGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBTdHJpbmcoY29uc3QgVUNoYXIqKTsgLy8gU3Bl
Y2lmaWNhbGx5IGZvciBudWxsIHRlcm1pbmF0ZWQgVVRGLTE2Ci0jaWYgVVNFKEpTQykKLSAgICBT
dHJpbmcoY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Ci0gICAgU3RyaW5nKGNvbnN0IEpTQzo6VVN0
cmluZyYpOwotI2VuZGlmCiAgICAgU3RyaW5nKGNvbnN0IGNoYXIqKTsKICAgICBTdHJpbmcoY29u
c3QgY2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgU3RyaW5nKFN0cmluZ0ltcGwqIGkpIDog
bV9pbXBsKGkpIHsgfQpAQCAtMTEyLDEwICsxMDEsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0
cmluZyBhZG9wdChTdHJpbmdCdWZmZXImIGJ1ZmZlcikgeyByZXR1cm4gU3RyaW5nSW1wbDo6YWRv
cHQoYnVmZmVyKTsgfQogICAgIHN0YXRpYyBTdHJpbmcgYWRvcHQoVmVjdG9yPFVDaGFyPiYgdmVj
dG9yKSB7IHJldHVybiBTdHJpbmdJbXBsOjphZG9wdCh2ZWN0b3IpOyB9CiAKLSNpZiBVU0UoSlND
KQotICAgIG9wZXJhdG9yIEpTQzo6VVN0cmluZygpIGNvbnN0OwotI2VuZGlmCi0KICAgICB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdDsKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0
OwogICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpOwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAJKHJldmlzaW9uIDU3NjYzKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEzICszNiw2IEBA
CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVVRGOC5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1Vu
aWNvZGUuaD4KIAotI2lmIFVTRShKU0MpCi0jaW5jbHVkZSA8cnVudGltZS9JZGVudGlmaWVyLmg+
Ci0KLXVzaW5nIEpTQzo6SWRlbnRpZmllcjsKLXVzaW5nIEpTQzo6VVN0cmluZzsKLSNlbmRpZgot
CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5pY29kZTsKIApA
QCAtNzY5LDI5ICs3NjIsNiBAQCBTdHJpbmcgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxs
YmFjCiAgICAgcmV0dXJuIHV0Zjg7CiB9CiAKLSNpZiBVU0UoSlNDKQotU3RyaW5nOjpTdHJpbmco
Y29uc3QgSWRlbnRpZmllciYgc3RyKQotewotICAgIGlmIChzdHIuaXNOdWxsKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUoc3RyLnVzdHJpbmcoKSk7
Ci19Ci0KLVN0cmluZzo6U3RyaW5nKGNvbnN0IFVTdHJpbmcmIHN0cikKLXsKLSAgICBpZiAoc3Ry
LmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3Jl
YXRlKHN0cik7Ci19Ci0KLVN0cmluZzo6b3BlcmF0b3IgVVN0cmluZygpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX2ltcGwpCi0gICAgICAgIHJldHVybiBVU3RyaW5nKCk7Ci0gICAgcmV0dXJuIG1faW1w
bC0+dXN0cmluZygpOwotfQotI2VuZGlmCi0KIC8vIFN0cmluZyBPcGVyYXRpb25zCiAKIHN0YXRp
YyBib29sIGlzQ2hhcmFjdGVyQWxsb3dlZEluQmFzZShVQ2hhciBjLCBpbnQgYmFzZSkK
</data>
<flag name="review"
          id="37232"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53508</attachid>
            <date>2010-04-15 20:39:01 -0700</date>
            <delta_ts>2010-04-16 12:45:40 -0700</delta_ts>
            <desc>Hopefully slightly better patch!</desc>
            <filename>patch.ustringToString.2.txt</filename>
            <type>text/plain</type>
            <size>86642</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzY3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTk3IEBACisyMDEwLTA0LTE1ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xv
dWdoQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc2NzUKKyAg
ICAgICAgUmVtb3ZlIGNhc3RzL2NvbnN0cnVjdG9ycyB0by9mcm9tIEpTQzo6VVN0cmluZyB0eXBl
IGZyb20gV2ViQ29yZTo6U3RyaW5nCisgICAgICAgIAorICAgICAgICBXZWJDb3JlJ3Mgc3RyaW5n
cyBzaG91bGQgbm90IGtub3cgYWJvdXQgSlNDOjpVU3RyaW5nLCB0aGlzIHNob3VsZCBiZSBhYnN0
cmFjdGVkCisgICAgICAgIGF3YXkgaW4gdGhlIGJpbmRpbmdzLiAgQWRkIGV4cGxpY2l0IGNvbnZl
cnNpb24gbWV0aG9kcyByYXRoZXIgdGhhbiByZWx5aW5nIG9uCisgICAgICAgIG92ZXJsb2FkZWQg
Y2FzdCBvcGVyYXRvcnMgLyBjb25zdHJ1Y3RvcnMgYmVpbmcgaW1wbGljaXRseSBjYWxsZWQuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBvbmx5IGNoYW5nZXMgdGhlIGNsYXNzIFN0cmluZywgb25jZSB0
aGlzIGhhcyBsYW5kZWQgU3RyaW5nSW1wbCwgYW5kCisgICAgICAgIGhvcGVmdWxseSBBdG9taWNT
dHJpbmcgdG9vLCBzaG91bGQgZm9sbG93IHN1aXQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRz
OgorICAgICAgICAgICAgV2ViQ29yZTo6aWRlbnRpZmllclRvU3RyaW5nCisgICAgICAgICAgICBX
ZWJDb3JlOjp1c3RyaW5nVG9TdHJpbmcKKyAgICAgICAgICAgIFdlYkNvcmU6OnN0cmluZ1RvVVN0
cmluZworCisgICAgICAgIC0gdG8gSlNET01CaW5kaW5ncy5oLCBhbmQgdXBkYXRlcyBjb2RlIHRv
IGNhbGwgdGhlc2UgbWV0aG9kcy4KKworICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHA6CisgICAg
ICAgICogV2ViQ29yZS5vcmRlcjoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRT
b3VyY2VQcm92aWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkU2NyaXB0U291cmNlUHJv
dmlkZXI6OkNhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0F1ZGlvQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0QXVk
aW8pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NTU1N0eWxlRGVjbGFyYXRpb246Om5hbWVHZXR0ZXIp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSFRNTENhbnZhc1N0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZUNvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2VG
cm9tUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c2V0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpmaWxsVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c3Ryb2tlVGV4dCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDbGlwYm9hcmQ6OnR5cGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTQ2xpcGJvYXJkOjpjbGVhckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNDbGlw
Ym9hcmQ6OmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNDbGlwYm9hcmQ6OnNldERhdGEp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpsb29rdXBOYW1lc3BhY2VV
UkkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjppZGVudGlmaWVyVG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6dXN0cmluZ1Rv
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnN0cmluZ1RvVVN0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjp2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjp2
YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OnJlcG9ydEV4Y2VwdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0RPTUZvcm1EYXRhOjphcHBlbmQpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5hbWVkSXRlbUdldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6c2V0TG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SlNET01XaW5kb3c6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNEYXRhYmFzZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RhdGFiYXNl
OjpjaGFuZ2VWZXJzaW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRG9jdW1lbnQ6OnNldExvY2F0aW9uKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNF
dmVudFNvdXJjZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEV2
ZW50U291cmNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbGxIVE1MQWxsQ29sbGVjdGlvbik6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0hUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNhbGxIVE1MQ29sbGVjdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRG9jdW1l
bnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6Om5hbWVHZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZG9jdW1lbnRXcml0ZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGVJbmplY3RlZFNjcmlwdCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDb250ZXh0TWVudSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU0xhenlFdmVudExpc3RlbmVyOjppbml0aWFsaXplSlNGdW5jdGlvbik6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xv
Y2F0aW9uOjpzZXRIcmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldFByb3Rv
Y29sKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldEhvc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0SG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNM
b2NhdGlvbjo6c2V0UGF0aG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0
U2VhcmNoKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldEhhc2gpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6cmVwbGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0xv
Y2F0aW9uOjphc3NpZ24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZUV2ZW50Ojppbml0TWVzc2FnZUV2
ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05hbWVkTm9kZU1hcEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU05hbWVkTm9kZU1hcDo6Y2FuR2V0SXRlbXNGb3JOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTTmFtZWROb2RlTWFwOjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU09wdGlvbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnN0cnVjdEhUTUxPcHRpb25FbGVtZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NRTFJl
c3VsdFNldFJvd0xpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTUUxSZXN1bHRT
ZXRSb3dMaXN0OjppdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9u
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVT
cWwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU2hhcmVkV29ya2VyQ29uc3RydWN0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0U2hhcmVkV29ya2VyKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTdG9y
YWdlOjpjYW5HZXRJdGVtc0Zvck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNTdG9yYWdlOjpu
YW1lR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU3RvcmFnZTo6ZGVsZXRlUHJvcGVydHkp
OgorICAgICAgICAoV2ViQ29yZTo6SlNTdG9yYWdlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTU3RvcmFnZTo6cHV0RGVsZWdhdGUpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTU3R5bGVTaGVldExpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNT
dHlsZVNoZWV0TGlzdDo6Y2FuR2V0SXRlbXNGb3JOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
U3R5bGVTaGVldExpc3Q6Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2Vi
S2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0
V2ViS2l0Q1NTTWF0cml4KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYlNvY2tldENvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdFdlYlNvY2tldCk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNXZWJTb2NrZXQ6OnNlbmQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0V29ya2VyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNXb3JrZXJDb250ZXh0OjppbXBvcnRTY3JpcHRzKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1M
SHR0cFJlcXVlc3Q6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6
c2V0UmVxdWVzdEhlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0Ojpz
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVlc3Q6Om92ZXJyaWRlTWltZVR5
cGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1hTTFRQcm9jZXNzb3I6OnNldFBhcmFtZXRlcik6CisgICAgICAg
IChXZWJDb3JlOjpKU1hTTFRQcm9jZXNzb3I6OmdldFBhcmFtZXRlcik6CisgICAgICAgIChXZWJD
b3JlOjpKU1hTTFRQcm9jZXNzb3I6OnJlbW92ZVBhcmFtZXRlcik6CisgICAgICAgICogYmluZGlu
Z3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZEFj
dGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWxsRnJhbWUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbEZyYW1lOjpTY3JpcHRDYWxsRnJhbWUpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxkKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRE
ZWJ1Z1NlcnZlcjo6aGFzQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1
Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hGYWlsZWRUb1BhcnNlU291cmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzb3VyY2VQYXJzZWQpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RXZl
bnRMaXN0ZW5lckhhbmRsZXJCb2R5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRGdW5j
dGlvbkNhbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RnVuY3Rpb25DYWxsOjphcHBl
bmRBcmd1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RnVuY3Rpb25DYWxsOjpjb25zdHJ1Y3QpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRPYmplY3Q6OnNldCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0UHJvZmlsZXI6OnN0YXJ0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdFByb2ZpbGVyOjpzdG9wKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
Y3JpcHRTdHJpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0cmluZzo6b3BlcmF0b3Ig
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0cmluZzo6dXN0cmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRTdHJpbmc6Om9wZXJhdG9yKz0pOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpn
ZXRTdHJpbmcpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmg6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6dG9TdHJpbmcpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVk
T2JqZWN0OjpzZXQpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXppbmdUcmVlV2Fsa2VyOjpj
b252ZXJ0SWZUZXJtaW5hbCk6CisgICAgICAgIChXZWJDb3JlOjpEZXNlcmlhbGl6aW5nVHJlZVdh
bGtlcjo6cHV0UHJvcGVydHkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1N0cmluZ1NvdXJjZVBy
b3ZpZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdTb3VyY2VQcm92aWRlcjo6U3RyaW5n
U291cmNlUHJvdmlkZXIpOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0
Lm1tOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgY2FsbFdlYlNjcmlwdE1ldGhvZDp3aXRo
QXJndW1lbnRzOl0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgc2V0VmFsdWU6Zm9yS2V5
Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgdmFsdWVGb3JLZXk6XSk6CisgICAgICAg
ICgtW1dlYlNjcmlwdE9iamVjdCByZW1vdmVXZWJTY3JpcHRLZXk6XSk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICogYnJpZGdlL0lkZW50
aWZpZXJSZXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWRlbnRpZmllclJlcDo6Z2V0KToKKyAg
ICAgICAgKiBicmlkZ2UvYy9jX3V0aWxpdHkuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
aWRlbnRpZmllckZyb21OUElkZW50aWZpZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OnNjcmlwdEltcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OmFkZFByb2ZpbGVGaW5pc2hlZE1lc3NhZ2VUb0NvbnNvbGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6Y3JlYXRlUHJvZmlsZUhlYWRlcik6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clJlc291cmNlOjpzb3VyY2VTdHJpbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9KYXZhU2NyaXB0
Q2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHRDYWxsRnJhbWU6OmZ1
bmN0aW9uTmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vS1VSTC5oOgorICAgICAgICAoV2ViQ29y
ZTo6S1VSTDo6b3BlcmF0b3IgY29uc3QgU3RyaW5nJik6CisgICAgICAgICogcGxhdGZvcm0vdGV4
dC9BdG9taWNTdHJpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljU3RyaW5nOjpvcGVy
YXRvciBVU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5oOgor
ICAgICAgICAqIHBsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L1N0cmluZy5jcHA6CisKIDIwMTAtMDQtMTUgIENocmlzIEZsZWl6YWNoICA8Y2Zs
ZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBCZXRoIERha2luLgpJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS5iYXNlLmV4cAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM3NCw2ICszNzQsOCBAQCBfX1pON1dlYkNvcmUxNVNjcm9sbEFs
aWdubWVudDE5YWxpZ25Ub0VkCiBfX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRU
cnVuY2F0ZUVSS05TXzZTdHJpbmdFZlJLTlNfNEZvbnRFYgogX19aTjdXZWJDb3JlMTVTdHJpbmdU
cnVuY2F0b3IxNGNlbnRlclRydW5jYXRlRVJLTlNfNlN0cmluZ0VmUktOU180Rm9udEViCiBfX1pO
N1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjV3aWR0aEVSS05TXzZTdHJpbmdFUktOU180Rm9udEVi
CitfX1pON1dlYkNvcmUxNXVzdHJpbmdUb1N0cmluZ0VSS04zSlNDN1VTdHJpbmdFCitfX1pON1dl
YkNvcmUxNXN0cmluZ1RvVVN0cmluZ0VSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUxNVZpc2li
bGVQb3NpdGlvbkMxRVBOU180Tm9kZUVpTlNfOUVBZmZpbml0eUUKIF9fWk43V2ViQ29yZTE1Vmlz
aWJsZVBvc2l0aW9uQzFFUktOU184UG9zaXRpb25FTlNfOUVBZmZpbml0eUUKIF9fWk43V2ViQ29y
ZTE2Rm9udFBsYXRmb3JtRGF0YUMxRVA2TlNGb250YmIKQEAgLTYxNCw3ICs2MTYsNiBAQCBfX1pO
N1dlYkNvcmU2U3RyaW5nQzFFUDhOU1N0cmluZwogX19aTjdXZWJDb3JlNlN0cmluZ0MxRVBLMTBf
X0NGU3RyaW5nCiBfX1pON1dlYkNvcmU2U3RyaW5nQzFFUEtjCiBfX1pON1dlYkNvcmU2U3RyaW5n
QzFFUEtjagotX19aTjdXZWJDb3JlNlN0cmluZ0MxRVJLTjNKU0M3VVN0cmluZ0UKIF9fWk43V2Vi
Q29yZTZXaWRnZXQxMnNldEZyYW1lUmVjdEVSS05TXzdJbnRSZWN0RQogX19aTjdXZWJDb3JlNldp
ZGdldDE2cmVtb3ZlRnJvbVBhcmVudEV2CiBfX1pON1dlYkNvcmU2V2lkZ2V0MjByZXRhaW5QbGF0
Zm9ybVdpZGdldEV2CkBAIC05OTEsNyArOTkyLDYgQEAgX19aTks3V2ViQ29yZTZTdHJpbmc0dXRm
OEV2CiBfX1pOSzdXZWJDb3JlNlN0cmluZzZsZW5ndGhFdgogX19aTks3V2ViQ29yZTZTdHJpbmc3
aXNFbXB0eUV2CiBfX1pOSzdXZWJDb3JlNlN0cmluZzlzdWJzdHJpbmdFamoKLV9fWk5LN1dlYkNv
cmU2U3RyaW5nY3ZOM0pTQzdVU3RyaW5nRUV2CiBfX1pOSzdXZWJDb3JlNldpZGdldDIzY29udmVy
dFRvQ29udGFpbmluZ1ZpZXdFUktOU183SW50UmVjdEUKIF9fWk5LN1dlYkNvcmU2V2lkZ2V0MjNj
b252ZXJ0VG9Db250YWluaW5nVmlld0VSS05TXzhJbnRQb2ludEUKIF9fWk5LN1dlYkNvcmU2V2lk
Z2V0MjVjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3RVJLTlNfN0ludFJlY3RFCkluZGV4OiBXZWJD
b3JlL1dlYkNvcmUub3JkZXIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLm9yZGVyCShy
ZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUvV2ViQ29yZS5vcmRlcgkod29ya2luZyBjb3B5KQpA
QCAtMjIwNCw3ICsyMjA0LDYgQEAgX19aTjdXZWJDb3JlMTNTY3JpcHRFbGVtZW50MjFmaW5pc2hQ
YXJzaQogX19aTks3V2ViQ29yZTE3U2NyaXB0RWxlbWVudERhdGExM3NjcmlwdENvbnRlbnRFdgog
X19aTjdXZWJDb3JlMTVTZWdtZW50ZWRTdHJpbmc3cHJlcGVuZEVSS1MwXwogX19aTjdXZWJDb3Jl
MTVTZWdtZW50ZWRTdHJpbmc3cHJlcGVuZEVSS05TXzE4U2VnbWVudGVkU3Vic3RyaW5nRQotX19a
Tks3V2ViQ29yZTZTdHJpbmdjdk4zSlNDN1VTdHJpbmdFRXYKIF9fWk5LN1dlYkNvcmUyMFN0cmlu
Z1NvdXJjZVByb3ZpZGVyNmxlbmd0aEV2CiBfX1pON1dlYkNvcmUxM0hUTUxUb2tlbml6ZXIxNXNj
cmlwdEV4ZWN1dGlvbkVSS05TXzE2U2NyaXB0U291cmNlQ29kZUVOUzBfNVN0YXRlRQogX19aTjdX
ZWJDb3JlMTFGcmFtZUxvYWRlcjEzZXhlY3V0ZVNjcmlwdEVSS05TXzE2U2NyaXB0U291cmNlQ29k
ZUUKQEAgLTIyODAsNyArMjI3OSw2IEBAIF9fWk4zSlNDOEJpbmRpbmdzMTBSb290T2JqZWN0OWdj
UHJvdGVjdEUKIF9fWk5LM1dURjlIYXNoVGFibGVJUE4zSlNDOEpTT2JqZWN0RVN0NHBhaXJJUzNf
akVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTNV9FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTRQYWly
SGFzaFRyYWl0c0lOU18xMEhhc2hUcmEKIF9fWk4zV1RGN0hhc2hNYXBJUE4zSlNDOEpTT2JqZWN0
RWpOU183UHRySGFzaElTM19FRU5TXzEwSGFzaFRyYWl0c0lTM19FRU5TNl9JakVFRTNhZGRFUktT
M19SS2oKIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjNKU0M4SlNPYmplY3RFU3Q0cGFpcklTM19qRU5T
XzE4UGFpckZpcnN0RXh0cmFjdG9ySVM1X0VFTlNfN1B0ckhhc2hJUzNfRUVOU18xNFBhaXJIYXNo
VHJhaXRzSU5TXzEwSGFzaFRyYWkKLV9fWk43V2ViQ29yZTZTdHJpbmdDMUVSS04zSlNDN1VTdHJp
bmdFCiBfX1pON1dlYkNvcmU2U3RyaW5nQzJFUktOM0pTQzdVU3RyaW5nRQogX19aTks3V2ViQ29y
ZTIwU3RyaW5nU291cmNlUHJvdmlkZXI0ZGF0YUV2CiBfX1pOSzdXZWJDb3JlMTVKU0RPTVdpbmRv
d0Jhc2UxN3N1cHBvcnRzUHJvZmlsaW5nRXYKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvQ2Fj
aGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0NhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmgJKHJldmlzaW9uIDU3NjYzKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MCw3ICs1MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIENhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyKENhY2hlZFNjcmlwdCogY2FjaGVk
U2NyaXB0KQotICAgICAgICAgICAgOiBTY3JpcHRTb3VyY2VQcm92aWRlcihjYWNoZWRTY3JpcHQt
PnVybCgpKQorICAgICAgICAgICAgOiBTY3JpcHRTb3VyY2VQcm92aWRlcihzdHJpbmdUb1VTdHJp
bmcoY2FjaGVkU2NyaXB0LT51cmwoKSkpCiAgICAgICAgICAgICAsIG1fY2FjaGVkU2NyaXB0KGNh
Y2hlZFNjcmlwdCkKICAgICAgICAgewogICAgICAgICAgICAgbV9jYWNoZWRTY3JpcHQtPmFkZENs
aWVudCh0aGlzKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDU3NjYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRpYyBKU09i
amVjdCogY29uc3RydWN0QXVkaW8oRXhlY1N0YXQKICAgICAvLyByYXRoZXIgdGhhbiBsb29raW5n
IGF0IGFyZ3Muc2l6ZS4KICAgICBTdHJpbmcgc3JjOwogICAgIGlmIChhcmdzLnNpemUoKSA+IDAp
Ci0gICAgICAgIHNyYyA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIHNyYyA9
IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKTsKICAgICByZXR1cm4g
YXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwKICAgICAg
ICAgSFRNTEF1ZGlvRWxlbWVudDo6Y3JlYXRlRm9ySlNDb25zdHJ1Y3Rvcihkb2N1bWVudCwgc3Jj
KSkpOwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25D
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURl
Y2xhcmF0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
NSw3ICsxNjUsNyBAQCBKU1ZhbHVlIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6bmFtZUdldHRlCiAK
ICAgICAvLyBNYWtlIHRoZSBTVkcgJ2ZpbHRlcicgYXR0cmlidXRlIHVuZGV0ZWN0YWJsZSwgdG8g
YXZvaWQgY29uZnVzaW9uIHdpdGggdGhlIElFICdmaWx0ZXInIGF0dHJpYnV0ZS4KICAgICBpZiAo
cHJvcGVydHlOYW1lID09ICJmaWx0ZXIiKQotICAgICAgICByZXR1cm4gU3RyaW5nT2JqZWN0VGhh
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQ6OmNyZWF0ZShleGVjLCB0aGlzT2JqLT5pbXBsKCktPmdl
dFByb3BlcnR5VmFsdWUocHJvcCkpOworICAgICAgICByZXR1cm4gU3RyaW5nT2JqZWN0VGhhdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQ6OmNyZWF0ZShleGVjLCBzdHJpbmdUb1VTdHJpbmcodGhpc09i
ai0+aW1wbCgpLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3ApKSk7CiAKICAgICByZXR1cm4ganNTdHJp
bmcoZXhlYywgdGhpc09iai0+aW1wbCgpLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3ApKTsKIH0KSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NCw3ICs1NCw3IEBAIHN0YXRpYyBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBDYW4K
IHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1N0eWxlPiB0b0hUTUxDYW52YXNTdHlsZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpCi0g
ICAgICAgIHJldHVybiBDYW52YXNTdHlsZTo6Y3JlYXRlKGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUo
ZXhlYykpOworICAgICAgICByZXR1cm4gQ2FudmFzU3R5bGU6OmNyZWF0ZSh1c3RyaW5nVG9TdHJp
bmcoYXNTdHJpbmcodmFsdWUpLT52YWx1ZShleGVjKSkpOwogICAgIGlmICghdmFsdWUuaXNPYmpl
Y3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0
KHZhbHVlKTsKQEAgLTEwMiwxMyArMTAyLDEzIEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnNldEYKICAgICBzd2l0Y2ggKGFyZ3Muc2l6ZSgpKSB7CiAgICAgICAgIGNhc2Ug
MToKICAgICAgICAgICAgIGlmIChhcmdzLmF0KDApLmlzU3RyaW5nKCkpCi0gICAgICAgICAgICAg
ICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGFzU3RyaW5nKGFyZ3MuYXQoMCkpLT52YWx1ZShleGVj
KSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHVzdHJpbmdUb1N0cmlu
Zyhhc1N0cmluZyhhcmdzLmF0KDApKS0+dmFsdWUoZXhlYykpKTsKICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoYXJncy5hdCgwKS50b0Zsb2F0
KGV4ZWMpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIDI6CiAgICAgICAgICAg
ICBpZiAoYXJncy5hdCgwKS5pc1N0cmluZygpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNl
dEZpbGxDb2xvcihhc1N0cmluZyhhcmdzLmF0KDApKS0+dmFsdWUoZXhlYyksIGFyZ3MuYXQoMSku
dG9GbG9hdChleGVjKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHVz
dHJpbmdUb1N0cmluZyhhc1N0cmluZyhhcmdzLmF0KDApKS0+dmFsdWUoZXhlYykpLCBhcmdzLmF0
KDEpLnRvRmxvYXQoZXhlYykpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNv
bnRleHQtPnNldEZpbGxDb2xvcihhcmdzLmF0KDApLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMSku
dG9GbG9hdChleGVjKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEzOSwxMyArMTM5LDEzIEBA
IEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFMKICAgICBzd2l0Y2ggKGFy
Z3Muc2l6ZSgpKSB7CiAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgIGlmIChhcmdzLmF0KDAp
LmlzU3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoYXNT
dHJpbmcoYXJncy5hdCgwKSktPnZhbHVlKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5zZXRTdHJva2VDb2xvcih1c3RyaW5nVG9TdHJpbmcoYXNTdHJpbmcoYXJncy5hdCgwKSktPnZh
bHVlKGV4ZWMpKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY29udGV4dC0+
c2V0U3Ryb2tlQ29sb3IoYXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICBpZiAoYXJncy5hdCgwKS5pc1N0cmlu
ZygpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGFzU3RyaW5nKGFy
Z3MuYXQoMCkpLT52YWx1ZShleGVjKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpKTsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcih1c3RyaW5nVG9TdHJpbmcoYXNTdHJp
bmcoYXJncy5hdCgwKSktPnZhbHVlKGV4ZWMpKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpKTsK
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xv
cihhcmdzLmF0KDApLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSk7CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTI4Miw3ICsyODIsNyBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpkcmF3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJn
cy5hdCgzKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDQpLnRvRmxvYXQoZXhlYyksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5hdCg1KS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0
KDYpLnRvRmxvYXQoZXhlYyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5h
dCg3KS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDgpLnRvRmxvYXQoZXhlYyksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXJncy5hdCg5KS50b1N0cmluZyhleGVjKSk7ICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDkpLnRv
U3RyaW5nKGV4ZWMpKSk7ICAgIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOyAgICAKIH0KIApA
QCAtMjk4LDcgKzI5OCw3IEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNl
dFMKICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgaWYgKGFyZ3MuYXQoMykuaXNTdHJpbmco
KSkKICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3coYXJncy5hdCgwKS50b0Zsb2F0
KGV4ZWMpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwgYXNTdHJpbmcoYXJncy5hdCgz
KSktPnZhbHVlKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJn
cy5hdCgyKS50b0Zsb2F0KGV4ZWMpLCB1c3RyaW5nVG9TdHJpbmcoYXNTdHJpbmcoYXJncy5hdCgz
KSktPnZhbHVlKGV4ZWMpKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY29u
dGV4dC0+c2V0U2hhZG93KGFyZ3MuYXQoMCkudG9GbG9hdChleGVjKSwgYXJncy5hdCgxKS50b0Zs
b2F0KGV4ZWMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmF0KDIp
LnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMykudG9GbG9hdChleGVjKSk7CkBAIC0zMDYsNyArMzA2
LDcgQEAgSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0UwogICAgICAgICBj
YXNlIDU6CiAgICAgICAgICAgICBpZiAoYXJncy5hdCgzKS5pc1N0cmluZygpKQogICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhhcmdzLmF0KDApLnRvRmxvYXQoZXhlYyksIGFyZ3Mu
YXQoMSkudG9GbG9hdChleGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXJncy5hdCgyKS50b0Zsb2F0KGV4ZWMpLCBhc1N0cmluZyhhcmdzLmF0KDMpKS0+dmFsdWUoZXhl
YyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoMikudG9GbG9h
dChleGVjKSwgdXN0cmluZ1RvU3RyaW5nKGFzU3RyaW5nKGFyZ3MuYXQoMykpLT52YWx1ZShleGVj
KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoNCkudG9GbG9h
dChleGVjKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0
U2hhZG93KGFyZ3MuYXQoMCkudG9GbG9hdChleGVjKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMp
LApAQCAtMzkxLDkgKzM5MSw5IEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmZpbGwKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogICAg
IAogICAgIGlmIChhcmdzLnNpemUoKSA9PSA0KQotICAgICAgICBjb250ZXh0LT5maWxsVGV4dChh
cmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksIGFyZ3Mu
YXQoMikudG9GbG9hdChleGVjKSwgYXJncy5hdCgzKS50b0Zsb2F0KGV4ZWMpKTsKKyAgICAgICAg
Y29udGV4dC0+ZmlsbFRleHQodXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhl
YykpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwg
YXJncy5hdCgzKS50b0Zsb2F0KGV4ZWMpKTsKICAgICBlbHNlCi0gICAgICAgIGNvbnRleHQtPmZp
bGxUZXh0KGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIGFyZ3MuYXQoMSkudG9GbG9hdChleGVj
KSwgYXJncy5hdCgyKS50b0Zsb2F0KGV4ZWMpKTsKKyAgICAgICAgY29udGV4dC0+ZmlsbFRleHQo
dXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpLCBhcmdzLmF0KDEpLnRv
RmxvYXQoZXhlYyksIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKQEAgLTQwOSw5ICs0MDksOSBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzdHJvCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRh
eEVycm9yKTsKICAgICAKICAgICBpZiAoYXJncy5zaXplKCkgPT0gNCkKLSAgICAgICAgY29udGV4
dC0+c3Ryb2tlVGV4dChhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBhcmdzLmF0KDEpLnRvRmxv
YXQoZXhlYyksIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwgYXJncy5hdCgzKS50b0Zsb2F0KGV4
ZWMpKTsKKyAgICAgICAgY29udGV4dC0+c3Ryb2tlVGV4dCh1c3RyaW5nVG9TdHJpbmcoYXJncy5h
dCgwKS50b1N0cmluZyhleGVjKSksIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSwgYXJncy5hdCgy
KS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDMpLnRvRmxvYXQoZXhlYykpOwogICAgIGVsc2UKLSAg
ICAgICAgY29udGV4dC0+c3Ryb2tlVGV4dChhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBhcmdz
LmF0KDEpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSk7CisgICAgICAg
IGNvbnRleHQtPnN0cm9rZVRleHQodXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmco
ZXhlYykpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMikudG9GbG9hdChleGVj
KSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3BwCShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3
ICs1OSw3IEBAIEpTVmFsdWUgSlNDbGlwYm9hcmQ6OnR5cGVzKEV4ZWNTdGF0ZSogZXgKICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwogICAgIEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gdHlwZXMuZW5kKCk7CiAgICAgZm9yIChIYXNoU2V0PFN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gdHlwZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBs
aXN0LmFwcGVuZChqc1N0cmluZyhleGVjLCBVU3RyaW5nKCppdCkpKTsKKyAgICAgICAgbGlzdC5h
cHBlbmQoanNTdHJpbmcoZXhlYywgc3RyaW5nVG9VU3RyaW5nKCppdCkpKTsKICAgICByZXR1cm4g
Y29uc3RydWN0QXJyYXkoZXhlYywgbGlzdCk7CiB9CiAKQEAgLTczLDcgKzczLDcgQEAgSlNWYWx1
ZSBKU0NsaXBib2FyZDo6Y2xlYXJEYXRhKEV4ZWNTdGF0ZQogICAgIH0KIAogICAgIGlmIChhcmdz
LnNpemUoKSA9PSAxKSB7Ci0gICAgICAgIGNsaXBib2FyZC0+Y2xlYXJEYXRhKGFyZ3MuYXQoMCku
dG9TdHJpbmcoZXhlYykpOworICAgICAgICBjbGlwYm9hcmQtPmNsZWFyRGF0YSh1c3RyaW5nVG9T
dHJpbmcoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSkpOwogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICB9CiAKQEAgLTkwLDcgKzkwLDcgQEAgSlNWYWx1ZSBKU0NsaXBib2FyZDo6
Z2V0RGF0YShFeGVjU3RhdGUqIAogICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0gaW1wbCgpOwog
CiAgICAgYm9vbCBzdWNjZXNzOwotICAgIFN0cmluZyByZXN1bHQgPSBjbGlwYm9hcmQtPmdldERh
dGEoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgc3VjY2Vzcyk7CisgICAgU3RyaW5nIHJlc3Vs
dCA9IGNsaXBib2FyZC0+Z2V0RGF0YSh1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgwKS50b1N0cmlu
ZyhleGVjKSksIHN1Y2Nlc3MpOwogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKQEAgLTEwNSw3ICsxMDUsNyBAQCBKU1ZhbHVlIEpTQ2xpcGJvYXJkOjpz
ZXREYXRhKEV4ZWNTdGF0ZSogCiAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDIpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAic2V0RGF0YTogSW52YWxpZCBudW1i
ZXIgb2YgYXJndW1lbnRzIik7CiAKLSAgICByZXR1cm4ganNCb29sZWFuKGNsaXBib2FyZC0+c2V0
RGF0YShhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMp
KSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihjbGlwYm9hcmQtPnNldERhdGEodXN0cmluZ1RvU3Ry
aW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpLCB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgx
KS50b1N0cmluZyhleGVjKSkpKTsKIH0KIAogSlNWYWx1ZSBKU0NsaXBib2FyZDo6c2V0RHJhZ0lt
YWdlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiA1
NzY2MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIFN0cmluZyBKU0N1c3RvbVhQYXRoTlNS
ZXNvbHZlcjo6bG9va3VwTmEKICAgICAgICAgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihleGVjKTsK
ICAgICBlbHNlIHsKICAgICAgICAgaWYgKCFyZXR2YWwuaXNVbmRlZmluZWRPck51bGwoKSkKLSAg
ICAgICAgICAgIHJlc3VsdCA9IHJldHZhbC50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgIHJl
c3VsdCA9IHVzdHJpbmdUb1N0cmluZyhyZXR2YWwudG9TdHJpbmcoZXhlYykpOwogICAgIH0KIAog
ICAgIERvY3VtZW50Ojp1cGRhdGVTdHlsZUZvckFsbERvY3VtZW50cygpOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5MiwxOCArNDky
LDM5IEBAIEpTVmFsdWUganNTdHJpbmdPckZhbHNlKEV4ZWNTdGF0ZSogZXhlYywKICAgICByZXR1
cm4ganNTdHJpbmcoZXhlYywgdXJsLnN0cmluZygpKTsKIH0KIAotVVN0cmluZyB2YWx1ZVRvU3Ry
aW5nV2l0aE51bGxDaGVjayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCitTdHJpbmcg
aWRlbnRpZmllclRvU3RyaW5nKGNvbnN0IElkZW50aWZpZXImIGkpCit7CisgICAgaWYgKGkuaXNO
dWxsKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gU3RyaW5nSW1wbDo6
Y3JlYXRlKGkudXN0cmluZygpKTsKK30KKworU3RyaW5nIHVzdHJpbmdUb1N0cmluZyhjb25zdCBV
U3RyaW5nJiB1KQoreworICAgIGlmICh1LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZSh1KTsKK30KKworVVN0cmluZyBzdHJp
bmdUb1VTdHJpbmcoY29uc3QgU3RyaW5nJiBzKQoreworICAgIGlmIChTdHJpbmdJbXBsKiBpbXBs
ID0gcy5pbXBsKCkpCisgICAgICAgIHJldHVybiBpbXBsLT51c3RyaW5nKCk7CisgICAgcmV0dXJu
IFVTdHJpbmcoKTsKK30KKworU3RyaW5nIHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUuaXNOdWxsKCkpCi0g
ICAgICAgIHJldHVybiBVU3RyaW5nKCk7Ci0gICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKGV4ZWMp
OworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyh2
YWx1ZS50b1N0cmluZyhleGVjKSk7CiB9CiAKLVVTdHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhVbmRl
ZmluZWRPck51bGxDaGVjayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCitTdHJpbmcg
dmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAg
ICAgIHJldHVybiBVU3RyaW5nKCk7Ci0gICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKGV4ZWMpOwor
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyh2YWx1
ZS50b1N0cmluZyhleGVjKSk7CiB9CiAKIEpTVmFsdWUganNEYXRlT3JOdWxsKEV4ZWNTdGF0ZSog
ZXhlYywgZG91YmxlIHZhbHVlKQpAQCAtNTM0LDcgKzU1NSw3IEBAIHZvaWQgcmVwb3J0RXhjZXB0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogCiAg
ICAgaWYgKEV4Y2VwdGlvbkJhc2UqIGV4Y2VwdGlvbkJhc2UgPSB0b0V4Y2VwdGlvbkJhc2UoZXhj
ZXB0aW9uKSkKLSAgICAgICAgZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uQmFzZS0+bWVzc2FnZSgp
ICsgIjogIiAgKyBleGNlcHRpb25CYXNlLT5kZXNjcmlwdGlvbigpOworICAgICAgICBlcnJvck1l
c3NhZ2UgPSBzdHJpbmdUb1VTdHJpbmcoZXhjZXB0aW9uQmFzZS0+bWVzc2FnZSgpICsgIjogIiAg
KyBleGNlcHRpb25CYXNlLT5kZXNjcmlwdGlvbigpKTsKIAogICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CkBAIC01NDQsNyArNTY1
LDcgQEAgdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIGlmICgh
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+cmVwb3J0RXhjZXB0aW9uKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwg
ZXhjZXB0aW9uU291cmNlVVJMKTsKKyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5yZXBvcnRF
eGNlcHRpb24odXN0cmluZ1RvU3RyaW5nKGVycm9yTWVzc2FnZSksIGxpbmVOdW1iZXIsIHVzdHJp
bmdUb1N0cmluZyhleGNlcHRpb25Tb3VyY2VVUkwpKTsKIH0KIAogdm9pZCByZXBvcnRDdXJyZW50
RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRp
bmcuaAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgsOCArMjU4LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAvLyBvYmplY3QsIHRvIGxldCB0aGUgZW5naW5lIGtub3cgdGhhdCBjb2xsZWN0aW5n
IHRoZSBKU1N0cmluZyB3cmFwcGVyIGlzIHVubGlrZWx5IHRvIHNhdmUgbWVtb3J5LgogICAgIEpT
Qzo6SlNWYWx1ZSBqc093bmVkU3RyaW5nT3JOdWxsKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlND
OjpVU3RyaW5nJik7IAogCi0gICAgSlNDOjpVU3RyaW5nIHZhbHVlVG9TdHJpbmdXaXRoTnVsbENo
ZWNrKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsgLy8gbnVsbCBpZiB0aGUgdmFsdWUg
aXMgbnVsbAotICAgIEpTQzo6VVN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVs
bENoZWNrKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsgLy8gbnVsbCBpZiB0aGUgdmFs
dWUgaXMgbnVsbCBvciB1bmRlZmluZWQKKyAgICBTdHJpbmcgaWRlbnRpZmllclRvU3RyaW5nKGNv
bnN0IEpTQzo6SWRlbnRpZmllciYpOworICAgIFN0cmluZyB1c3RyaW5nVG9TdHJpbmcoY29uc3Qg
SlNDOjpVU3RyaW5nJik7CisgICAgSlNDOjpVU3RyaW5nIHN0cmluZ1RvVVN0cmluZyhjb25zdCBT
dHJpbmcmKTsKKworICAgIFN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7IC8vIG51bGwgaWYgdGhlIHZhbHVlIGlzIG51bGwKKyAg
ICBTdHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSk7IC8vIG51bGwgaWYgdGhlIHZhbHVlIGlzIG51bGwgb3IgdW5k
ZWZpbmVkCiAKICAgICAvLyBSZXR1cm5zIGEgRGF0ZSBpbnN0YW5jZSBmb3IgdGhlIHNwZWNpZmll
ZCB2YWx1ZSwgb3IgbnVsbCBpZiB0aGUgdmFsdWUgaXMgTmFOIG9yIGluZmluaXR5LgogICAgIEpT
Qzo6SlNWYWx1ZSBqc0RhdGVPck51bGwoSlNDOjpFeGVjU3RhdGUqLCBkb3VibGUpOwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUZvcm1EYXRhQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRm9ybURhdGFDdXN0b20uY3BwCShyZXZpc2lvbiA1
NzY2MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDEyICs0MiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBKU1Zh
bHVlIEpTRE9NRm9ybURhdGE6OmFwcGVuZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCiB7CiAgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDIpIHsKLSAgICAgICAgU3RyaW5nIG5h
bWUgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBTdHJpbmcgbmFtZSA9IHVz
dHJpbmdUb1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKTsKICAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGFyZ3MuYXQoMSk7CiAgICAgICAgIGlmICh2YWx1ZS5pbmhlcml0cygmSlNCbG9i
OjpzX2luZm8pKQogICAgICAgICAgICAgaW1wbCgpLT5hcHBlbmQobmFtZSwgdG9CbG9iKHZhbHVl
KSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGltcGwoKS0+YXBwZW5kKG5hbWUsIHZhbHVl
LnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgIGltcGwoKS0+YXBwZW5kKG5hbWUsIHVzdHJp
bmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSkpOwogICAgIH0KIAogICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3Rv
bS5jcHAJKHJldmlzaW9uIDU3NjYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw3ICsxNTAsNyBAQCBzdGF0aWMgSlNW
YWx1ZSBuYW1lZEl0ZW1HZXR0ZXIoRXhlY1N0YXRlCiAgICAgQVNTRVJUKGRvY3VtZW50KTsKICAg
ICBBU1NFUlQoZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpOwogCi0gICAgUmVmUHRyPEhUTUxD
b2xsZWN0aW9uPiBjb2xsZWN0aW9uID0gZG9jdW1lbnQtPndpbmRvd05hbWVkSXRlbXMocHJvcGVy
dHlOYW1lKTsKKyAgICBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGNvbGxlY3Rpb24gPSBkb2N1bWVu
dC0+d2luZG93TmFtZWRJdGVtcyhpZGVudGlmaWVyVG9TdHJpbmcocHJvcGVydHlOYW1lKSk7CiAg
ICAgaWYgKGNvbGxlY3Rpb24tPmxlbmd0aCgpID09IDEpCiAgICAgICAgIHJldHVybiB0b0pTKGV4
ZWMsIGNvbGxlY3Rpb24tPmZpcnN0SXRlbSgpKTsKICAgICByZXR1cm4gdG9KUyhleGVjLCBjb2xs
ZWN0aW9uLmdldCgpKTsKQEAgLTUwNiw3ICs1MDYsNyBAQCB2b2lkIEpTRE9NV2luZG93OjpzZXRM
b2NhdGlvbihFeGVjU3RhdGUqCiAgICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwog
ICAgIEFTU0VSVChmcmFtZSk7CiAKLSAgICBLVVJMIHVybCA9IGNvbXBsZXRlVVJMKGV4ZWMsIHZh
bHVlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBLVVJMIHVybCA9IGNvbXBsZXRlVVJMKGV4ZWMsIHVz
dHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSkpOwogICAgIGlmICh1cmwuaXNOdWxs
KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtOTc2LDcgKzk3Niw3IEBAIEpTVmFsdWUgSlNET01X
aW5kb3c6Om9wZW5EYXRhYmFzZShFeGVjU3QKICAgICBpZiAoKGFyZ3Muc2l6ZSgpID49IDUpICYm
IGFyZ3MuYXQoNCkuaXNPYmplY3QoKSkKICAgICAgICAgY3JlYXRpb25DYWxsYmFjayA9IEpTRGF0
YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KGFyZ3MuYXQoNCkpLCBnbG9iYWxPYmplY3Qo
KSk7CiAKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIFdU
Rjo6Z2V0UHRyKGltcGwoKS0+b3BlbkRhdGFiYXNlKG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1l
LCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrLnJlbGVhc2UoKSwgZWMpKSk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihp
bXBsKCktPm9wZW5EYXRhYmFzZSh1c3RyaW5nVG9TdHJpbmcobmFtZSksIHVzdHJpbmdUb1N0cmlu
Zyh2ZXJzaW9uKSwgdXN0cmluZ1RvU3RyaW5nKGRpc3BsYXlOYW1lKSwgZXN0aW1hdGVkU2l6ZSwg
Y3JlYXRpb25DYWxsYmFjay5yZWxlYXNlKCksIGVjKSkpOwogICAgIGlmICghZWMgJiYgcmVzdWx0
LmlzTnVsbCgpKQogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKIApJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RhdGFiYXNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRGF0YWJhc2VDdXN0b20uY3BwCShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNEYXRhYmFzZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDggKzQ5LDggQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogSlNWYWx1ZSBKU0RhdGFiYXNlOjpj
aGFuZ2VWZXJzaW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAg
ICBTdHJpbmcgb2xkVmVyc2lvbiA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7Ci0gICAgU3Ry
aW5nIG5ld1ZlcnNpb24gPSBhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMpOworICAgIFN0cmluZyBv
bGRWZXJzaW9uID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOwor
ICAgIFN0cmluZyBuZXdWZXJzaW9uID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMSkudG9TdHJp
bmcoZXhlYykpOwogCiAgICAgSlNPYmplY3QqIG9iamVjdDsKICAgICBpZiAoIShvYmplY3QgPSBh
cmdzLmF0KDIpLmdldE9iamVjdCgpKSkgewpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rv
Y3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9j
dW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgdm9p
ZCBKU0RvY3VtZW50OjpzZXRMb2NhdGlvbihFeGVjU3RhdGUqIAogICAgIGlmICghZnJhbWUpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyBzdHIgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsK
KyAgICBTdHJpbmcgc3RyID0gdXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsK
IAogICAgIC8vIElFIGFuZCBNb3ppbGxhIGJvdGggcmVzb2x2ZSB0aGUgVVJMIHJlbGF0aXZlIHRv
IHRoZSBzb3VyY2UgZnJhbWUsCiAgICAgLy8gbm90IHRoZSB0YXJnZXQgZnJhbWUuCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiA1NzY2MykKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTIxLDcgKzEyMSw3IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3Jp
cHQKICAgICAgICAgICAgIHJlcG9ydEN1cnJlbnRFeGNlcHRpb24oZXhlYyk7CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgaWYgKCFyZXR2YWwuaXNVbmRlZmluZWRPck51bGwoKSAmJiBldmVu
dC0+c3RvcmVzUmVzdWx0QXNTdHJpbmcoKSkKLSAgICAgICAgICAgICAgICBldmVudC0+c3RvcmVS
ZXN1bHQocmV0dmFsLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBldmVudC0+c3Rv
cmVSZXN1bHQodXN0cmluZ1RvU3RyaW5nKHJldHZhbC50b1N0cmluZyhleGVjKSkpOwogICAgICAg
ICAgICAgaWYgKG1faXNBdHRyaWJ1dGUpIHsKICAgICAgICAgICAgICAgICBib29sIHJldHZhbGJv
b2w7CiAgICAgICAgICAgICAgICAgaWYgKHJldHZhbC5nZXRCb29sZWFuKHJldHZhbGJvb2wpICYm
ICFyZXR2YWxib29sKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFNv
dXJjZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcg
KzcxLDcgQEAgc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RFdmVudFNvdXJjZShFeAogICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSZWZlcmVuY2VFcnJvciwgIkV2ZW50U291cmNlIGNv
bnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiKTsKIAogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxFdmVudFNvdXJjZT4gZXZlbnRTb3VyY2Ug
PSBFdmVudFNvdXJjZTo6Y3JlYXRlKHVybCwgY29udGV4dCwgZWMpOworICAgIFJlZlB0cjxFdmVu
dFNvdXJjZT4gZXZlbnRTb3VyY2UgPSBFdmVudFNvdXJjZTo6Y3JlYXRlKHVzdHJpbmdUb1N0cmlu
Zyh1cmwpLCBjb250ZXh0LCBlYyk7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7CiAgICAgICAgIHJldHVybiAwOwpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiA1NzY2
MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjYWxsSFRNTEFsbAogICAgIFVTdHJpbmcgc3RyaW5nID0gYXJncy5hdCgwKS50b1N0cmlu
ZyhleGVjKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYyku
dG9VSW50MzIoJm9rLCBmYWxzZSk7CiAgICAgaWYgKG9rKSB7Ci0gICAgICAgIFN0cmluZyBwc3Ry
ID0gc3RyaW5nOworICAgICAgICBTdHJpbmcgcHN0ciA9IHVzdHJpbmdUb1N0cmluZyhzdHJpbmcp
OwogICAgICAgICBOb2RlKiBub2RlID0gY29sbGVjdGlvbi0+bmFtZWRJdGVtKHBzdHIpOwogICAg
ICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICAgICAgaWYgKCFpbmRleCkKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2
aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIEpTVmFsdWUgSlNIVE1M
Q2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dCgKICAgICAgICAgfQogICAgIH0KICNlbmRpZgotICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihjYW52YXMtPmdl
dENvbnRleHQoY29udGV4dElkLCBhdHRycy5nZXQoKSkpKTsKKyAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoY2FudmFzLT5nZXRDb250ZXh0KHVzdHJpbmdU
b1N0cmluZyhjb250ZXh0SWQpLCBhdHRycy5nZXQoKSkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25D
dXN0b20uY3BwCShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
Q29sbGVjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSFRNTENvbAogICAgIFVTdHJpbmcgc3RyaW5n
ID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3Mu
YXQoMSkudG9TdHJpbmcoZXhlYykudG9VSW50MzIoJm9rLCBmYWxzZSk7CiAgICAgaWYgKG9rKSB7
Ci0gICAgICAgIFN0cmluZyBwc3RyID0gc3RyaW5nOworICAgICAgICBTdHJpbmcgcHN0ciA9IHVz
dHJpbmdUb1N0cmluZyhzdHJpbmcpOwogICAgICAgICBOb2RlKiBub2RlID0gY29sbGVjdGlvbi0+
bmFtZWRJdGVtKHBzdHIpOwogICAgICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICAgICAgaWYg
KCFpbmRleCkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0
b20uY3BwCShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9j
dW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIEpTVmFsdWUg
SlNIVE1MRG9jdW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1MKICAgICBKU0hUTUxEb2N1bWVudCogdGhp
c09iaiA9IHN0YXRpY19jYXN0PEpTSFRNTERvY3VtZW50Kj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsK
ICAgICBIVE1MRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4o
dGhpc09iai0+aW1wbCgpKTsKIAotICAgIFN0cmluZyBuYW1lID0gcHJvcGVydHlOYW1lOworICAg
IFN0cmluZyBuYW1lID0gaWRlbnRpZmllclRvU3RyaW5nKHByb3BlcnR5TmFtZSk7CiAgICAgUmVm
UHRyPEhUTUxDb2xsZWN0aW9uPiBjb2xsZWN0aW9uID0gZG9jdW1lbnQtPmRvY3VtZW50TmFtZWRJ
dGVtcyhuYW1lKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGNvbGxlY3Rpb24tPmxlbmd0aCgp
OwpAQCAtMTM3LDE0ICsxMzcsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGRvY3VtZW50V3JpdGUo
RXhlY1N0YQogICAgIHNpemVfdCBzaXplID0gYXJncy5zaXplKCk7CiAKICAgICBVU3RyaW5nIGZp
cnN0U3RyaW5nID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKTsKLSAgICBTZWdtZW50ZWRTdHJp
bmcgc2VnbWVudGVkU3RyaW5nID0gU3RyaW5nKGZpcnN0U3RyaW5nKTsKKyAgICBTZWdtZW50ZWRT
dHJpbmcgc2VnbWVudGVkU3RyaW5nID0gdXN0cmluZ1RvU3RyaW5nKGZpcnN0U3RyaW5nKTsKICAg
ICBpZiAoc2l6ZSAhPSAxKSB7CiAgICAgICAgIGlmICghc2l6ZSkKICAgICAgICAgICAgIHNlZ21l
bnRlZFN0cmluZy5jbGVhcigpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAxOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgICAgICAgICAgVVN0cmluZyBzdWJz
ZXF1ZW50U3RyaW5nID0gYXJncy5hdChpKS50b1N0cmluZyhleGVjKTsKLSAgICAgICAgICAgICAg
ICBzZWdtZW50ZWRTdHJpbmcuYXBwZW5kKFNlZ21lbnRlZFN0cmluZyhTdHJpbmcoc3Vic2VxdWVu
dFN0cmluZykpKTsKKyAgICAgICAgICAgICAgICBzZWdtZW50ZWRTdHJpbmcuYXBwZW5kKFNlZ21l
bnRlZFN0cmluZyh1c3RyaW5nVG9TdHJpbmcoc3Vic2VxdWVudFN0cmluZykpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbmpl
Y3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCShyZXZpc2lvbiA1NzY2MykKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2NyaXB0T2Jq
ZWN0IEluamVjdGVkU2NyaXB0SG9zdDo6Y3JlYXRlSW5qZWN0ZWRTY3JpcHQoY29uc3QgU3RyaW5n
JiBzb3VyY2UsIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgbG9uZyBpZCkKIHsKLSAgICBTb3Vy
Y2VDb2RlIHNvdXJjZUNvZGUgPSBtYWtlU291cmNlKHNvdXJjZSk7CisgICAgU291cmNlQ29kZSBz
b3VyY2VDb2RlID0gbWFrZVNvdXJjZShzdHJpbmdUb1VTdHJpbmcoc291cmNlKSk7CiAgICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRTdGF0
ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBKU1ZhbHVlIGdsb2JhbFRoaXNWYWx1ZSA9
IHNjcmlwdFN0YXRlLT5nbG9iYWxUaGlzVmFsdWUoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCShyZXZpc2lv
biA1NzY2MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIEpTVmFsdWUgSlNJbnNw
ZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDb24KICAgICAgICAgICAgIGl0ZW1zLmFwcGVuZChuZXcg
Q29udGV4dE1lbnVJdGVtKFNlcGFyYXRvclR5cGUsIENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9u
LCBTdHJpbmcoKSkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIENvbnRleHRNZW51QWN0
aW9uIHR5cGVkSWQgPSBzdGF0aWNfY2FzdDxDb250ZXh0TWVudUFjdGlvbj4oQ29udGV4dE1lbnVJ
dGVtQmFzZUN1c3RvbVRhZyArIGlkLnRvSW50MzIoZXhlY1N0YXRlKSk7Ci0gICAgICAgICAgICBp
dGVtcy5hcHBlbmQobmV3IENvbnRleHRNZW51SXRlbShBY3Rpb25UeXBlLCB0eXBlZElkLCBsYWJl
bC50b1N0cmluZyhleGVjU3RhdGUpKSk7CisgICAgICAgICAgICBpdGVtcy5hcHBlbmQobmV3IENv
bnRleHRNZW51SXRlbShBY3Rpb25UeXBlLCB0eXBlZElkLCB1c3RyaW5nVG9TdHJpbmcobGFiZWwu
dG9TdHJpbmcoZXhlY1N0YXRlKSkpKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiA1NzY2MykK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMCwxMCArMTAwLDEwIEBAIEpTT2JqZWN0KiBKU0xhenlFdmVudExpc3RlbmVy
Ojppbml0aWFsaXoKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKTsKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0gICAgYXJncy5hcHBlbmQo
anNOb250cml2aWFsU3RyaW5nKGV4ZWMsIG1fZXZlbnRQYXJhbWV0ZXJOYW1lKSk7CisgICAgYXJn
cy5hcHBlbmQoanNOb250cml2aWFsU3RyaW5nKGV4ZWMsIHN0cmluZ1RvVVN0cmluZyhtX2V2ZW50
UGFyYW1ldGVyTmFtZSkpKTsKICAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhleGVjLCBtX2NvZGUp
KTsKIAotICAgIEpTT2JqZWN0KiBqc0Z1bmN0aW9uID0gY29uc3RydWN0RnVuY3Rpb24oZXhlYywg
YXJncywgSWRlbnRpZmllcihleGVjLCBtX2Z1bmN0aW9uTmFtZSksIG1fc291cmNlVVJMLCBtX2xp
bmVOdW1iZXIpOyAvLyBGSVhNRTogaXMgZ2xvYmFsRXhlYyBvaz8KKyAgICBKU09iamVjdCoganNG
dW5jdGlvbiA9IGNvbnN0cnVjdEZ1bmN0aW9uKGV4ZWMsIGFyZ3MsIElkZW50aWZpZXIoZXhlYywg
c3RyaW5nVG9VU3RyaW5nKG1fZnVuY3Rpb25OYW1lKSksIHN0cmluZ1RvVVN0cmluZyhtX3NvdXJj
ZVVSTCksIG1fbGluZU51bWJlcik7IC8vIEZJWE1FOiBpcyBnbG9iYWxFeGVjIG9rPwogICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OwogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlv
bkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9u
Q3VzdG9tLmNwcAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9j
YXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBK
U0xvY2F0aW9uOjpzZXRIcmVmKEV4ZWNTdGF0ZSogZXhlYwogICAgIEZyYW1lKiBmcmFtZSA9IGlt
cGwoKS0+ZnJhbWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwogCi0gICAgS1VSTCB1cmwgPSBjb21w
bGV0ZVVSTChleGVjLCB2YWx1ZS50b1N0cmluZyhleGVjKSk7CisgICAgS1VSTCB1cmwgPSBjb21w
bGV0ZVVSTChleGVjLCB1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpKTsKICAg
ICBpZiAodXJsLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTIxNSw3ICsyMTUsNyBA
QCB2b2lkIEpTTG9jYXRpb246OnNldFByb3RvY29sKEV4ZWNTdGF0ZSogCiAgICAgQVNTRVJUKGZy
YW1lKTsKIAogICAgIEtVUkwgdXJsID0gZnJhbWUtPmxvYWRlcigpLT51cmwoKTsKLSAgICBpZiAo
IXVybC5zZXRQcm90b2NvbCh2YWx1ZS50b1N0cmluZyhleGVjKSkpIHsKKyAgICBpZiAoIXVybC5z
ZXRQcm90b2NvbCh1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpKSkgewogICAg
ICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgU1lOVEFYX0VSUik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBKU0xvY2F0aW9uOjpzZXRIb3N0KEV4ZWNT
dGF0ZSogZXhlYwogICAgIEFTU0VSVChmcmFtZSk7CiAKICAgICBLVVJMIHVybCA9IGZyYW1lLT5s
b2FkZXIoKS0+dXJsKCk7Ci0gICAgdXJsLnNldEhvc3RBbmRQb3J0KHZhbHVlLnRvU3RyaW5nKGV4
ZWMpKTsKKyAgICB1cmwuc2V0SG9zdEFuZFBvcnQodXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpKSk7CiAKICAgICBuYXZpZ2F0ZUlmQWxsb3dlZChleGVjLCBmcmFtZSwgdXJsLCAh
ZnJhbWUtPnNjcmlwdCgpLT5hbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSwgZmFsc2Up
OwogfQpAQCAtMjQwLDcgKzI0MCw3IEBAIHZvaWQgSlNMb2NhdGlvbjo6c2V0SG9zdG5hbWUoRXhl
Y1N0YXRlKiAKICAgICBBU1NFUlQoZnJhbWUpOwogCiAgICAgS1VSTCB1cmwgPSBmcmFtZS0+bG9h
ZGVyKCktPnVybCgpOwotICAgIHVybC5zZXRIb3N0KHZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsKKyAg
ICB1cmwuc2V0SG9zdCh1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpKTsKIAog
ICAgIG5hdmlnYXRlSWZBbGxvd2VkKGV4ZWMsIGZyYW1lLCB1cmwsICFmcmFtZS0+c2NyaXB0KCkt
PmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpLCBmYWxzZSk7CiB9CkBAIC0yNjgsNyAr
MjY4LDcgQEAgdm9pZCBKU0xvY2F0aW9uOjpzZXRQYXRobmFtZShFeGVjU3RhdGUqIAogICAgIEFT
U0VSVChmcmFtZSk7CiAKICAgICBLVVJMIHVybCA9IGZyYW1lLT5sb2FkZXIoKS0+dXJsKCk7Ci0g
ICAgdXJsLnNldFBhdGgodmFsdWUudG9TdHJpbmcoZXhlYykpOworICAgIHVybC5zZXRQYXRoKHVz
dHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSkpOwogCiAgICAgbmF2aWdhdGVJZkFs
bG93ZWQoZXhlYywgZnJhbWUsIHVybCwgIWZyYW1lLT5zY3JpcHQoKS0+YW55UGFnZUlzUHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKCksIGZhbHNlKTsKIH0KQEAgLTI3OSw3ICsyNzksNyBAQCB2b2lkIEpT
TG9jYXRpb246OnNldFNlYXJjaChFeGVjU3RhdGUqIGV4CiAgICAgQVNTRVJUKGZyYW1lKTsKIAog
ICAgIEtVUkwgdXJsID0gZnJhbWUtPmxvYWRlcigpLT51cmwoKTsKLSAgICB1cmwuc2V0UXVlcnko
dmFsdWUudG9TdHJpbmcoZXhlYykpOworICAgIHVybC5zZXRRdWVyeSh1c3RyaW5nVG9TdHJpbmco
dmFsdWUudG9TdHJpbmcoZXhlYykpKTsKIAogICAgIG5hdmlnYXRlSWZBbGxvd2VkKGV4ZWMsIGZy
YW1lLCB1cmwsICFmcmFtZS0+c2NyaXB0KCktPmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVy
ZSgpLCBmYWxzZSk7CiB9CkBAIC0yOTEsNyArMjkxLDcgQEAgdm9pZCBKU0xvY2F0aW9uOjpzZXRI
YXNoKEV4ZWNTdGF0ZSogZXhlYwogCiAgICAgS1VSTCB1cmwgPSBmcmFtZS0+bG9hZGVyKCktPnVy
bCgpOwogICAgIFN0cmluZyBvbGRGcmFnbWVudElkZW50aWZpZXIgPSB1cmwuZnJhZ21lbnRJZGVu
dGlmaWVyKCk7Ci0gICAgU3RyaW5nIHN0ciA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIFN0
cmluZyBzdHIgPSB1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpOwogICAgIGlm
IChzdHIuc3RhcnRzV2l0aCgiIyIpKQogICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDEpOwog
ICAgIGlmIChlcXVhbElnbm9yaW5nTnVsbGl0eShvbGRGcmFnbWVudElkZW50aWZpZXIsIHN0cikp
CkBAIC0zMDcsNyArMzA3LDcgQEAgSlNWYWx1ZSBKU0xvY2F0aW9uOjpyZXBsYWNlKEV4ZWNTdGF0
ZSogZQogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0g
ICAgS1VSTCB1cmwgPSBjb21wbGV0ZVVSTChleGVjLCBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMp
KTsKKyAgICBLVVJMIHVybCA9IGNvbXBsZXRlVVJMKGV4ZWMsIHVzdHJpbmdUb1N0cmluZyhhcmdz
LmF0KDApLnRvU3RyaW5nKGV4ZWMpKSk7CiAgICAgaWYgKHVybC5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKQEAgLTMzNSw3ICszMzUsNyBAQCBKU1ZhbHVlIEpTTG9j
YXRpb246OmFzc2lnbihFeGVjU3RhdGUqIGV4CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBLVVJMIHVybCA9IGNvbXBsZXRlVVJMKGV4ZWMsIGFy
Z3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIEtVUkwgdXJsID0gY29tcGxldGVVUkwoZXhl
YywgdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpKTsKICAgICBpZiAo
dXJsLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIApJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDU3
NjYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgSlNDOjpKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50
Ojppbml0TWVzc2FnZQogICAgIH0KIAogICAgIE1lc3NhZ2VFdmVudCogZXZlbnQgPSBzdGF0aWNf
Y2FzdDxNZXNzYWdlRXZlbnQqPih0aGlzLT5pbXBsKCkpOwotICAgIGV2ZW50LT5pbml0TWVzc2Fn
ZUV2ZW50KHR5cGVBcmcsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZywgZGF0YUFyZywgb3Jp
Z2luQXJnLCBsYXN0RXZlbnRJZEFyZywgc291cmNlQXJnLCBtZXNzYWdlUG9ydHMucmVsZWFzZSgp
KTsKKyAgICBldmVudC0+aW5pdE1lc3NhZ2VFdmVudCh0eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNh
bmNlbGFibGVBcmcsIGRhdGFBcmcsIHVzdHJpbmdUb1N0cmluZyhvcmlnaW5BcmcpLCB1c3RyaW5n
VG9TdHJpbmcobGFzdEV2ZW50SWRBcmcpLCBzb3VyY2VBcmcsIG1lc3NhZ2VQb3J0cy5yZWxlYXNl
KCkpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTmFtZWROb2RlTWFwQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTmFtZWROb2RlTWFwQ3VzdG9tLmNwcAkocmV2aXNpb24gNTc2NjMpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmFtZWROb2RlTWFwQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjksMTMgKzY5LDEzIEBAIEpTVmFsdWUgSlNOYW1lZE5vZGVNYXA6OnNldE5hbWVkSXRl
bU5TKEUKIAogYm9vbCBKU05hbWVkTm9kZU1hcDo6Y2FuR2V0SXRlbXNGb3JOYW1lKEV4ZWNTdGF0
ZSosIE5hbWVkTm9kZU1hcCogaW1wbCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQog
ewotICAgIHJldHVybiBpbXBsLT5nZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lKTsKKyAgICByZXR1
cm4gaW1wbC0+Z2V0TmFtZWRJdGVtKGlkZW50aWZpZXJUb1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsK
IH0KIAogSlNWYWx1ZSBKU05hbWVkTm9kZU1hcDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKICAg
ICBKU05hbWVkTm9kZU1hcCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTTmFtZWROb2RlTWFwKj4o
YXNPYmplY3Qoc2xvdEJhc2UpKTsKLSAgICByZXR1cm4gdG9KUyhleGVjLCB0aGlzT2JqLT5pbXBs
KCktPmdldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCB0
aGlzT2JqLT5pbXBsKCktPmdldE5hbWVkSXRlbShpZGVudGlmaWVyVG9TdHJpbmcocHJvcGVydHlO
YW1lKSkpOwogfQogCiB2b2lkIEpTTmFtZWROb2RlTWFwOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNr
JiBtYXJrU3RhY2spCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTT3B0aW9uQ29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNPcHRpb25Db25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDU3NjYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09wdGlv
bkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTEgKzUxLDExIEBAIHN0YXRp
YyBKU09iamVjdCogY29uc3RydWN0SFRNTE9wdGlvbkVsZW0KIAogICAgIFN0cmluZyBkYXRhOwog
ICAgIGlmICghYXJncy5hdCgwKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICBkYXRhID0gYXJncy5h
dCgwKS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgZGF0YSA9IHVzdHJpbmdUb1N0cmluZyhhcmdz
LmF0KDApLnRvU3RyaW5nKGV4ZWMpKTsKIAogICAgIFN0cmluZyB2YWx1ZTsKICAgICBpZiAoIWFy
Z3MuYXQoMSkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgdmFsdWUgPSBhcmdzLmF0KDEpLnRvU3Ry
aW5nKGV4ZWMpOworICAgICAgICB2YWx1ZSA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDEpLnRv
U3RyaW5nKGV4ZWMpKTsKICAgICBib29sIGRlZmF1bHRTZWxlY3RlZCA9IGFyZ3MuYXQoMikudG9C
b29sZWFuKGV4ZWMpOwogICAgIGJvb2wgc2VsZWN0ZWQgPSBhcmdzLmF0KDMpLnRvQm9vbGVhbihl
eGVjKTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFJlc3VsdFNldFJvd0xpc3RD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxSZXN1bHRT
ZXRSb3dMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0
LDcgKzc0LDcgQEAgSlNWYWx1ZSBKU1NRTFJlc3VsdFNldFJvd0xpc3Q6Oml0ZW0oRXhlYwogICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCi0gICAgICAgIG9i
amVjdC0+cHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgbV9pbXBsLT5jb2x1bW5OYW1lcygpW2ld
KSwganNWYWx1ZSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgb2JqZWN0LT5wdXRE
aXJlY3QoSWRlbnRpZmllcihleGVjLCBzdHJpbmdUb1VTdHJpbmcobV9pbXBsLT5jb2x1bW5OYW1l
cygpW2ldKSksIGpzVmFsdWUsIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgfQogCiAgICAg
cmV0dXJuIG9iamVjdDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlv
bkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5z
YWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3
IEBAIEpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChFeGUKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIHNxbFN0YXRlbWVudCA9IGFy
Z3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgU3RyaW5nIHNxbFN0YXRlbWVudCA9IHVzdHJp
bmdUb1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCkBAIC04MCw3ICs4
MCw3IEBAIEpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChFeGUKICAgICAgICAg
ICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKHZhbHVlLnVuY2hlY2tlZEdldE51bWJlcigpKTsKICAg
ICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGFyZ3VtZW50
IHRvIGEgc3RyaW5nIGFuZCBhcHBlbmQgaXQKLSAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBw
ZW5kKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBw
ZW5kKHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSkpOwogICAgICAgICAgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU2hhcmVkV29ya2VyQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTaGFyZWRXb3JrZXJDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDU3NjYzKQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NoYXJlZFdvcmtlckNvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdFNo
YXJlZFdvcmtlcihFCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gdXNlIGJvdGggdGhlIGR5bmFt
aWMgc2NvcGUgYW5kIHRoZSBsZXhpY2FsIHNjb3BlIChkeW5hbWljIHNjb3BlIGZvciByZXNvbHZp
bmcgdGhlIHdvcmtlciBVUkwpCiAgICAgRE9NV2luZG93KiB3aW5kb3cgPSBhc0pTRE9NV2luZG93
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPmltcGwoKTsKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICBSZWZQdHI8U2hhcmVkV29ya2VyPiB3b3JrZXIgPSBTaGFyZWRXb3JrZXI6
OmNyZWF0ZShzY3JpcHRVUkwsIG5hbWUsIHdpbmRvdy0+ZG9jdW1lbnQoKSwgZWMpOworICAgIFJl
ZlB0cjxTaGFyZWRXb3JrZXI+IHdvcmtlciA9IFNoYXJlZFdvcmtlcjo6Y3JlYXRlKHVzdHJpbmdU
b1N0cmluZyhzY3JpcHRVUkwpLCB1c3RyaW5nVG9TdHJpbmcobmFtZSksIHdpbmRvdy0+ZG9jdW1l
bnQoKSwgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAKICAgICByZXR1cm4g
YXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgd29ya2Vy
LnJlbGVhc2UoKSkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNw
cAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEzICszOCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGJvb2wgSlNTdG9yYWdlOjpjYW5HZXRJdGVtc0Zvck5hbWUoRXhlY1N0YXRlKiwgU3Rv
cmFnZSogaW1wbCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewotICAgIHJldHVy
biBpbXBsLT5jb250YWlucyhwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiBpbXBsLT5jb250YWlu
cyhpZGVudGlmaWVyVG9TdHJpbmcocHJvcGVydHlOYW1lKSk7CiB9CiAKIEpTVmFsdWUgSlNTdG9y
YWdlOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewogICAgIEpTU3RvcmFnZSogdGhpc09iaiA9IHN0
YXRpY19jYXN0PEpTU3RvcmFnZSo+KGFzT2JqZWN0KHNsb3RCYXNlKSk7Ci0gICAgcmV0dXJuIGpz
U3RyaW5nT3JOdWxsKGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+Z2V0SXRlbShwcm9wZXJ0eU5hbWUp
KTsKKyAgICByZXR1cm4ganNTdHJpbmdPck51bGwoZXhlYywgdGhpc09iai0+aW1wbCgpLT5nZXRJ
dGVtKGlkZW50aWZpZXJUb1N0cmluZyhwcm9wZXJ0eU5hbWUpKSk7CiB9CiAKIGJvb2wgSlNTdG9y
YWdlOjpkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSkKQEAgLTYwLDcgKzYwLDcgQEAgYm9vbCBKU1N0b3JhZ2U6OmRlbGV0ZVByb3Bl
cnR5KEV4ZWNTdGF0ZQogICAgIGlmIChwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChw
cm90b3R5cGUpLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBtX2ltcGwtPnJlbW92ZUl0ZW0ocHJvcGVydHlOYW1lKTsKKyAgICBt
X2ltcGwtPnJlbW92ZUl0ZW0oaWRlbnRpZmllclRvU3RyaW5nKHByb3BlcnR5TmFtZSkpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgSlNTdG9yYWdlOjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEV4ZWMKIHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2ltcGwtPmxl
bmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBtX2ltcGwtPmtleShpKSkpOwor
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIHN0cmluZ1RvVVN0cmlu
ZyhtX2ltcGwtPmtleShpKSkpKTsKICAgICAgICAgCiAgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlO
YW1lcyhleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KQEAgLTg2LDEyICs4NiwxMiBAQCBi
b29sIEpTU3RvcmFnZTo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBlCiAgICAgaWYgKHByb3RvdHlw
ZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmhhc1Byb3BlcnR5KGV4ZWMsIHBy
b3BlcnR5TmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBTdHJpbmcgc3Ry
aW5nVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBTdHJpbmcgc3RyaW5nVmFsdWUg
PSB1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpOwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLT5zZXRJdGVtKHByb3BlcnR5TmFtZSwgc3RyaW5nVmFs
dWUsIGVjKTsKKyAgICBpbXBsKCktPnNldEl0ZW0oaWRlbnRpZmllclRvU3RyaW5nKHByb3BlcnR5
TmFtZSksIHN0cmluZ1ZhbHVlLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
IAogICAgIHJldHVybiB0cnVlOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hl
ZXRMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5
bGVTaGVldExpc3RDdXN0b20uY3BwCShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEz
ICs0OSwxMyBAQCB2b2lkIEpTU3R5bGVTaGVldExpc3Q6Om1hcmtDaGlsZHJlbihNYXJrCiAKIGJv
b2wgSlNTdHlsZVNoZWV0TGlzdDo6Y2FuR2V0SXRlbXNGb3JOYW1lKEV4ZWNTdGF0ZSosIFN0eWxl
U2hlZXRMaXN0KiBzdHlsZVNoZWV0TGlzdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
KQogewotICAgIHJldHVybiBzdHlsZVNoZWV0TGlzdC0+Z2V0TmFtZWRJdGVtKHByb3BlcnR5TmFt
ZSk7CisgICAgcmV0dXJuIHN0eWxlU2hlZXRMaXN0LT5nZXROYW1lZEl0ZW0oaWRlbnRpZmllclRv
U3RyaW5nKHByb3BlcnR5TmFtZSkpOwogfQogCiBKU1ZhbHVlIEpTU3R5bGVTaGVldExpc3Q6Om5h
bWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNTdHlsZVNoZWV0TGlzdCogdGhpc09iaiA9IHN0
YXRpY19jYXN0PEpTU3R5bGVTaGVldExpc3QqPihhc09iamVjdChzbG90QmFzZSkpOwotICAgIEhU
TUxTdHlsZUVsZW1lbnQqIGVsZW1lbnQgPSB0aGlzT2JqLT5pbXBsKCktPmdldE5hbWVkSXRlbShw
cm9wZXJ0eU5hbWUpOworICAgIEhUTUxTdHlsZUVsZW1lbnQqIGVsZW1lbnQgPSB0aGlzT2JqLT5p
bXBsKCktPmdldE5hbWVkSXRlbShpZGVudGlmaWVyVG9TdHJpbmcocHJvcGVydHlOYW1lKSk7CiAg
ICAgQVNTRVJUKGVsZW1lbnQpOwogICAgIHJldHVybiB0b0pTKGV4ZWMsIGVsZW1lbnQtPnNoZWV0
KCkpOwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYktpdENTU01hdHJpeENvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0Q1NT
TWF0cml4Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDcgKzQ3LDcgQEAgc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RXZWJLaXRDU1NNYXRyaQog
ICAgIEpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBzdGF0aWNf
Y2FzdDxKU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpOwogICAgIFN0
cmluZyBzOwogICAgIGlmIChhcmdzLnNpemUoKSA+PSAxKQotICAgICAgICBzID0gYXJncy5hdCgw
KS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgcyA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDAp
LnRvU3RyaW5nKGV4ZWMpKTsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBS
ZWZQdHI8V2ViS2l0Q1NTTWF0cml4PiBtYXRyaXggPSBXZWJLaXRDU1NNYXRyaXg6OmNyZWF0ZShz
LCBlYyk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q29uc3RydWN0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDU3NjYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNv
Y2tldENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBzdGF0
aWMgSlNPYmplY3QqIGNvbnN0cnVjdFdlYlNvY2tldChFeGVjCiAgICAgaWYgKGFyZ3Muc2l6ZSgp
ID09IDApCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiTm90
IGVub3VnaCBhcmd1bWVudHMiKTsKIAotICAgIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nID0gYXJn
cy5hdCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBjb25zdCBTdHJpbmcmIHVybFN0cmluZyA9IHVz
dHJpbmdUb1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVy
cm9yLCAid3JvbmcgVVJMIik7CiAgICAgY29uc3QgS1VSTCYgdXJsID0gY29udGV4dC0+Y29tcGxl
dGVVUkwodXJsU3RyaW5nKTsKQEAgLTczLDcgKzczLDcgQEAgc3RhdGljIEpTT2JqZWN0KiBjb25z
dHJ1Y3RXZWJTb2NrZXQoRXhlYwogICAgIGlmIChhcmdzLnNpemUoKSA8IDIpCiAgICAgICAgIHdl
YlNvY2tldC0+Y29ubmVjdCh1cmwsIGVjKTsKICAgICBlbHNlIHsKLSAgICAgICAgY29uc3QgU3Ry
aW5nJiBwcm90b2NvbCA9IGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIGNvbnN0
IFN0cmluZyYgcHJvdG9jb2wgPSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgxKS50b1N0cmluZyhl
eGVjKSk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICB3ZWJTb2NrZXQtPmNvbm5lY3QodXJsLCBwcm90b2NvbCwgZWMpOwpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAJKHJldmlzaW9u
IDU3NjYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgSlNWYWx1ZSBKU1dlYlNvY2tldDo6c2VuZChF
eGVjU3RhdGUqIGV4ZQogICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCiAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKTsKIAot
ICAgIGNvbnN0IFN0cmluZyYgbXNnID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBj
b25zdCBTdHJpbmcmIG1zZyA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4
ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiYmFkIG1lc3NhZ2UgZGF0YS4iKTsKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V29ya2VyQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHN0
YXRpYyBKU09iamVjdCogY29uc3RydWN0V29ya2VyKEV4ZWNTdGEKICAgICBET01XaW5kb3cqIHdp
bmRvdyA9IGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgp
OwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFdvcmtlcj4gd29ya2Vy
ID0gV29ya2VyOjpjcmVhdGUoc2NyaXB0VVJMLCB3aW5kb3ctPmRvY3VtZW50KCksIGVjKTsKKyAg
ICBSZWZQdHI8V29ya2VyPiB3b3JrZXIgPSBXb3JrZXI6OmNyZWF0ZSh1c3RyaW5nVG9TdHJpbmco
c2NyaXB0VVJMKSwgd2luZG93LT5kb2N1bWVudCgpLCBlYyk7CiAgICAgaWYgKGVjKSB7CiAgICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgICAgIHJldHVybiAwOwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNp
b24gNTc2NjMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBKU1ZhbHVlIEpTV29ya2VyQ29u
dGV4dDo6aW1wb3J0U2NyaXB0cyhFCiAKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxzOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIHVybHMu
YXBwZW5kKGFyZ3MuYXQoaSkudG9TdHJpbmcoZXhlYykpOworICAgICAgICB1cmxzLmFwcGVuZCh1
c3RyaW5nVG9TdHJpbmcoYXJncy5hdChpKS50b1N0cmluZyhleGVjKSkpOwogICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1
c3RvbS5jcHAJKHJldmlzaW9uIDU3NjYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0
dHBSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsOCArNjcsOCBAQCBKU1Zh
bHVlIEpTWE1MSHR0cFJlcXVlc3Q6Om9wZW4oRXhlY1N0YXRlCiAgICAgaWYgKGFyZ3Muc2l6ZSgp
IDwgMikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJOb3Qg
ZW5vdWdoIGFyZ3VtZW50cyIpOwogCi0gICAgY29uc3QgS1VSTCYgdXJsID0gaW1wbCgpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmNvbXBsZXRlVVJMKGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhl
YykpOwotICAgIFN0cmluZyBtZXRob2QgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOworICAg
IGNvbnN0IEtVUkwmIHVybCA9IGltcGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5jb21w
bGV0ZVVSTCh1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgxKS50b1N0cmluZyhleGVjKSkpOworICAg
IFN0cmluZyBtZXRob2QgPSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgwKS50b1N0cmluZyhleGVj
KSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpZiAoYXJncy5zaXplKCkgPj0g
MykgewpAQCAtOTcsNyArOTcsNyBAQCBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVl
c3RIZWFkCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiTm90
IGVub3VnaCBhcmd1bWVudHMiKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGlt
cGwoKS0+c2V0UmVxdWVzdEhlYWRlcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBhcmdzLmF0
KDEpLnRvU3RyaW5nKGV4ZWMpLCBlYyk7CisgICAgaW1wbCgpLT5zZXRSZXF1ZXN0SGVhZGVyKGFy
Z3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDEpLnRvU3Ry
aW5nKGV4ZWMpKSwgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CkBAIC0xMTgsNyArMTE4LDcgQEAgSlNWYWx1ZSBKU1hNTEh0
dHBSZXF1ZXN0OjpzZW5kKEV4ZWNTdGF0ZQogICAgICAgICBlbHNlIGlmICh2YWwuaW5oZXJpdHMo
JkpTRE9NRm9ybURhdGE6OnNfaW5mbykpCiAgICAgICAgICAgICBpbXBsKCktPnNlbmQodG9ET01G
b3JtRGF0YSh2YWwpLCBlYyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGltcGwoKS0+c2Vu
ZCh2YWwudG9TdHJpbmcoZXhlYyksIGVjKTsKKyAgICAgICAgICAgIGltcGwoKS0+c2VuZCh1c3Ry
aW5nVG9TdHJpbmcodmFsLnRvU3RyaW5nKGV4ZWMpKSwgZWMpOwogICAgIH0KIAogICAgIGludCBz
aWduZWRMaW5lTnVtYmVyOwpAQCAtMTI3LDcgKzEyNyw3IEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVx
dWVzdDo6c2VuZChFeGVjU3RhdGUKICAgICBKU1ZhbHVlIGZ1bmN0aW9uOwogICAgIGV4ZWMtPmlu
dGVycHJldGVyKCktPnJldHJpZXZlTGFzdENhbGxlcihleGVjLCBzaWduZWRMaW5lTnVtYmVyLCBz
b3VyY2VJRCwgc291cmNlVVJMLCBmdW5jdGlvbik7CiAgICAgaW1wbCgpLT5zZXRMYXN0U2VuZExp
bmVOdW1iZXIoc2lnbmVkTGluZU51bWJlciA+PSAwID8gc2lnbmVkTGluZU51bWJlciA6IDApOwot
ICAgIGltcGwoKS0+c2V0TGFzdFNlbmRVUkwoc291cmNlVVJMKTsKKyAgICBpbXBsKCktPnNldExh
c3RTZW5kVVJMKHVzdHJpbmdUb1N0cmluZyhzb3VyY2VVUkwpKTsKIAogICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0xNDksNyArMTQ5
LDcgQEAgSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpvdmVycmlkZU1pbWVUeQogICAgIGlmIChh
cmdzLnNpemUoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVy
cm9yLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKTsKIAotICAgIGltcGwoKS0+b3ZlcnJpZGVNaW1l
VHlwZShhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBpbXBsKCktPm92ZXJyaWRlTWlt
ZVR5cGUodXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpKTsKICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hT
TFRQcm9jZXNzb3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5
LDkgKzg5LDkgQEAgSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OnNldFBhcmFtZXRlcihFeAogewog
ICAgIGlmIChhcmdzLmF0KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgYXJncy5hdCgyKS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsgLy8gVGhyb3cg
ZXhjZXB0aW9uPwotICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBhcmdzLmF0KDApLnRvU3RyaW5n
KGV4ZWMpOwotICAgIFN0cmluZyBsb2NhbE5hbWUgPSBhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMp
OwotICAgIFN0cmluZyB2YWx1ZSA9IGFyZ3MuYXQoMikudG9TdHJpbmcoZXhlYyk7CisgICAgU3Ry
aW5nIG5hbWVzcGFjZVVSSSA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4
ZWMpKTsKKyAgICBTdHJpbmcgbG9jYWxOYW1lID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMSku
dG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyB2YWx1ZSA9IHVzdHJpbmdUb1N0cmluZyhhcmdz
LmF0KDIpLnRvU3RyaW5nKGV4ZWMpKTsKICAgICBpbXBsKCktPnNldFBhcmFtZXRlcihuYW1lc3Bh
Y2VVUkksIGxvY2FsTmFtZSwgdmFsdWUpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQpA
QCAtMTAwLDggKzEwMCw4IEBAIEpTVmFsdWUgSlNYU0xUUHJvY2Vzc29yOjpnZXRQYXJhbWV0ZXIo
RXgKIHsKICAgICBpZiAoYXJncy5hdCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gYXJncy5hdCgw
KS50b1N0cmluZyhleGVjKTsKLSAgICBTdHJpbmcgbG9jYWxOYW1lID0gYXJncy5hdCgxKS50b1N0
cmluZyhleGVjKTsKKyAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdXN0cmluZ1RvU3RyaW5nKGFy
Z3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBsb2NhbE5hbWUgPSB1c3RyaW5n
VG9TdHJpbmcoYXJncy5hdCgxKS50b1N0cmluZyhleGVjKSk7CiAgICAgU3RyaW5nIHZhbHVlID0g
aW1wbCgpLT5nZXRQYXJhbWV0ZXIobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpOwogICAgIHJldHVy
biBqc1N0cmluZ09yVW5kZWZpbmVkKGV4ZWMsIHZhbHVlKTsKIH0KQEAgLTExMCw4ICsxMTAsOCBA
QCBKU1ZhbHVlIEpTWFNMVFByb2Nlc3Nvcjo6cmVtb3ZlUGFyYW1ldGVyCiB7CiAgICAgaWYgKGFy
Z3MuYXQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0gICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7
Ci0gICAgU3RyaW5nIGxvY2FsTmFtZSA9IGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYyk7CisgICAg
U3RyaW5nIG5hbWVzcGFjZVVSSSA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5n
KGV4ZWMpKTsKKyAgICBTdHJpbmcgbG9jYWxOYW1lID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQo
MSkudG9TdHJpbmcoZXhlYykpOwogICAgIGltcGwoKS0+cmVtb3ZlUGFyYW1ldGVyKG5hbWVzcGFj
ZVVSSSwgbG9jYWxOYW1lKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAJKHJldmlzaW9uIDU3NjYzKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NCw3ICs1NCw3IEBAIFBhc3NPd25QdHI8U2NoZWR1bGVkQWN0aW9uPiBTY2hlZHVsZWRBY3QK
ICAgICAgICAgVVN0cmluZyBzdHJpbmcgPSB2LnRvU3RyaW5nKGV4ZWMpOwogICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0
dXJuIG5ldyBTY2hlZHVsZWRBY3Rpb24oc3RyaW5nLCBpc29sYXRlZFdvcmxkKTsKKyAgICAgICAg
cmV0dXJuIG5ldyBTY2hlZHVsZWRBY3Rpb24odXN0cmluZ1RvU3RyaW5nKHN0cmluZyksIGlzb2xh
dGVkV29ybGQpOwogICAgIH0KICAgICBBcmdMaXN0IGFyZ3NUYWlsOwogICAgIGFyZ3MuZ2V0U2xp
Y2UoMiwgYXJnc1RhaWwpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsRnJh
bWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1l
LmNwcAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxG
cmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBTY3JpcHRDYWxsRnJhbWU6OlNjcmlwdENhbGxGcmFtZShjb25zdCBVU3RyaW5nJiBm
dW5jdGlvbk5hbWUsIGNvbnN0IFVTdHJpbmcmIHVybFN0cmluZywgaW50IGxpbmVOdW1iZXIsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MsIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50KQogICAgIDogbV9m
dW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKQotICAgICwgbV9zb3VyY2VVUkwoUGFyc2VkVVJMU3Ry
aW5nLCB1cmxTdHJpbmcpCisgICAgLCBtX3NvdXJjZVVSTChQYXJzZWRVUkxTdHJpbmcsIHVzdHJp
bmdUb1N0cmluZyh1cmxTdHJpbmcpKQogICAgICwgbV9saW5lTnVtYmVyKGxpbmVOdW1iZXIpCiB7
CiAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBhcmdzLnNpemUoKTsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTAsNyArMTEwLDcgQEAgSlNET01XaW5kb3dTaGVsbCogU2NyaXB0Q29udHJvbGxlcjo6Y3JlYQog
U2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxkKGNvbnN0IFNjcmlw
dFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiB7CiAgICAg
Y29uc3QgU291cmNlQ29kZSYganNTb3VyY2VDb2RlID0gc291cmNlQ29kZS5qc1NvdXJjZUNvZGUo
KTsKLSAgICBTdHJpbmcgc291cmNlVVJMID0ganNTb3VyY2VDb2RlLnByb3ZpZGVyKCktPnVybCgp
OworICAgIFN0cmluZyBzb3VyY2VVUkwgPSB1c3RyaW5nVG9TdHJpbmcoanNTb3VyY2VDb2RlLnBy
b3ZpZGVyKCktPnVybCgpKTsKIAogICAgIGlmICghbV9YU1NBdWRpdG9yLT5jYW5FdmFsdWF0ZShz
b3VyY2VDb2RlLnNvdXJjZSgpKSkgewogICAgICAgICAvLyBUaGlzIHNjcmlwdCBpcyBub3Qgc2Fm
ZSB0byBiZSBldmFsdWF0ZWQuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVn
U2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVn
U2VydmVyLmNwcAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDcgKzE3MCw3IEBAIGJvb2wg
U2NyaXB0RGVidWdTZXJ2ZXI6Omhhc0JyZWFrcG9pbnQoaW4KICAgICAgICAgcmV0dXJuIHRydWU7
CiAKICAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fY3VycmVu
dENhbGxGcmFtZS0+ZXZhbHVhdGUoYnJlYWtJdC0+c2Vjb25kLmNvbmRpdGlvbiwgZXhjZXB0aW9u
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fY3VycmVudENhbGxGcmFtZS0+ZXZhbHVhdGUoc3Ry
aW5nVG9VU3RyaW5nKGJyZWFrSXQtPnNlY29uZC5jb25kaXRpb24pLCBleGNlcHRpb24pOwogICAg
IGlmIChleGNlcHRpb24pIHsKICAgICAgICAgLy8gQW4gZXJyb25lb3VzIGNvbmRpdGlvbiBjb3Vu
dHMgYXMgImZhbHNlIi4KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjUwLDkgKzI1MCw5IEBA
IFNjcmlwdFN0YXRlKiBTY3JpcHREZWJ1Z1NlcnZlcjo6Y3VycmVudEMKIAogdm9pZCBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZShjb25zdCBMaXN0ZW5lclNldCYgbGlz
dGVuZXJzLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSkKIHsKLSAgICBTdHJpbmcgc291
cmNlSUQgPSBKU0M6OlVTdHJpbmcoSlNDOjpVU3RyaW5nOjpmcm9tKHNvdXJjZS5wcm92aWRlcigp
LT5hc0lEKCkpKTsKLSAgICBTdHJpbmcgdXJsID0gc291cmNlLnByb3ZpZGVyKCktPnVybCgpOwot
ICAgIFN0cmluZyBkYXRhID0gSlNDOjpVU3RyaW5nKHNvdXJjZS5kYXRhKCksIHNvdXJjZS5sZW5n
dGgoKSk7CisgICAgU3RyaW5nIHNvdXJjZUlEID0gdXN0cmluZ1RvU3RyaW5nKEpTQzo6VVN0cmlu
Zzo6ZnJvbShzb3VyY2UucHJvdmlkZXIoKS0+YXNJRCgpKSk7CisgICAgU3RyaW5nIHVybCA9IHVz
dHJpbmdUb1N0cmluZyhzb3VyY2UucHJvdmlkZXIoKS0+dXJsKCkpOworICAgIFN0cmluZyBkYXRh
ID0gdXN0cmluZ1RvU3RyaW5nKEpTQzo6VVN0cmluZyhzb3VyY2UuZGF0YSgpLCBzb3VyY2UubGVu
Z3RoKCkpKTsKICAgICBpbnQgZmlyc3RMaW5lID0gc291cmNlLmZpcnN0TGluZSgpOwogCiAgICAg
VmVjdG9yPFNjcmlwdERlYnVnTGlzdGVuZXIqPiBjb3B5OwpAQCAtMjYzLDggKzI2Myw4IEBAIHZv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGFyc2UKIAogdm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6ZGlzcGF0Y2hGYWlsZWRUb1BhcnNlU291cmNlKGNvbnN0IExpc3RlbmVyU2V0JiBs
aXN0ZW5lcnMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgaW50IGVycm9yTGluZSwgY29uc3Qg
U3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgU3RyaW5nIHVybCA9IHNvdXJjZS5wcm92aWRl
cigpLT51cmwoKTsKLSAgICBTdHJpbmcgZGF0YSA9IEpTQzo6VVN0cmluZyhzb3VyY2UuZGF0YSgp
LCBzb3VyY2UubGVuZ3RoKCkpOworICAgIFN0cmluZyB1cmwgPSB1c3RyaW5nVG9TdHJpbmcoc291
cmNlLnByb3ZpZGVyKCktPnVybCgpKTsKKyAgICBTdHJpbmcgZGF0YSA9IHVzdHJpbmdUb1N0cmlu
ZyhKU0M6OlVTdHJpbmcoc291cmNlLmRhdGEoKSwgc291cmNlLmxlbmd0aCgpKSk7CiAgICAgaW50
IGZpcnN0TGluZSA9IHNvdXJjZS5maXJzdExpbmUoKTsKIAogICAgIFZlY3RvcjxTY3JpcHREZWJ1
Z0xpc3RlbmVyKj4gY29weTsKQEAgLTMxMCw3ICszMTAsNyBAQCB2b2lkIFNjcmlwdERlYnVnU2Vy
dmVyOjpzb3VyY2VQYXJzZWQoRXhlCiAKICAgICBpZiAoaGFzR2xvYmFsTGlzdGVuZXJzKCkpIHsK
ICAgICAgICAgaWYgKGlzRXJyb3IpCi0gICAgICAgICAgICBkaXNwYXRjaEZhaWxlZFRvUGFyc2VT
b3VyY2UobV9saXN0ZW5lcnMsIHNvdXJjZSwgZXJyb3JMaW5lLCBlcnJvck1lc3NhZ2UpOworICAg
ICAgICAgICAgZGlzcGF0Y2hGYWlsZWRUb1BhcnNlU291cmNlKG1fbGlzdGVuZXJzLCBzb3VyY2Us
IGVycm9yTGluZSwgdXN0cmluZ1RvU3RyaW5nKGVycm9yTWVzc2FnZSkpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBkaXNwYXRjaERpZFBhcnNlU291cmNlKG1fbGlzdGVuZXJzLCBzb3VyY2Up
OwogICAgIH0KQEAgLTMxOCw3ICszMTgsNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzb3Vy
Y2VQYXJzZWQoRXhlCiAgICAgaWYgKExpc3RlbmVyU2V0KiBwYWdlTGlzdGVuZXJzID0gbV9wYWdl
TGlzdGVuZXJzTWFwLmdldChwYWdlKSkgewogICAgICAgICBBU1NFUlQoIXBhZ2VMaXN0ZW5lcnMt
PmlzRW1wdHkoKSk7CiAgICAgICAgIGlmIChpc0Vycm9yKQotICAgICAgICAgICAgZGlzcGF0Y2hG
YWlsZWRUb1BhcnNlU291cmNlKCpwYWdlTGlzdGVuZXJzLCBzb3VyY2UsIGVycm9yTGluZSwgZXJy
b3JNZXNzYWdlKTsKKyAgICAgICAgICAgIGRpc3BhdGNoRmFpbGVkVG9QYXJzZVNvdXJjZSgqcGFn
ZUxpc3RlbmVycywgc291cmNlLCBlcnJvckxpbmUsIHVzdHJpbmdUb1N0cmluZyhlcnJvck1lc3Nh
Z2UpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZSgq
cGFnZUxpc3RlbmVycywgc291cmNlKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDU3NjYzKQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEz
LDcgKzExMyw3IEBAIFN0cmluZyBnZXRFdmVudExpc3RlbmVySGFuZGxlckJvZHkoU2NyaXAKICAg
ICBKU0M6OkpTT2JqZWN0KiBqc0Z1bmN0aW9uID0ganNMaXN0ZW5lci0+anNGdW5jdGlvbihjb250
ZXh0KTsKICAgICBpZiAoIWpzRnVuY3Rpb24pCiAgICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1
cm4ganNGdW5jdGlvbi0+dG9TdHJpbmcoc2NyaXB0U3RhdGUpOworICAgIHJldHVybiB1c3RyaW5n
VG9TdHJpbmcoanNGdW5jdGlvbi0+dG9TdHJpbmcoc2NyaXB0U3RhdGUpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlv
bkNhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rp
b25DYWxsLmNwcAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dEZ1bmN0aW9uQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBT
Y3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KAogCiB2b2lkIFNjcmlwdEZ1bmN0aW9u
Q2FsbDo6YXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0U3RyaW5nJiBhcmd1bWVudCkKIHsKLSAg
ICBtX2FyZ3VtZW50cy5hcHBlbmQoanNTdHJpbmcobV9leGVjLCBhcmd1bWVudCkpOworICAgIG1f
YXJndW1lbnRzLmFwcGVuZChqc1N0cmluZyhtX2V4ZWMsIGFyZ3VtZW50LnVzdHJpbmcoKSkpOwog
fQogCiB2b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0
VmFsdWUmIGFyZ3VtZW50KQpAQCAtMTMyLDcgKzEzMiw3IEBAIFNjcmlwdFZhbHVlIFNjcmlwdEZ1
bmN0aW9uQ2FsbDo6Y2FsbChib28KIAogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CiAKLSAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gdGhpc09iamVjdC0+Z2V0KG1fZXhlYywg
SWRlbnRpZmllcihtX2V4ZWMsIG1fbmFtZSkpOworICAgIEpTVmFsdWUgZnVuY3Rpb24gPSB0aGlz
T2JqZWN0LT5nZXQobV9leGVjLCBJZGVudGlmaWVyKG1fZXhlYywgc3RyaW5nVG9VU3RyaW5nKG1f
bmFtZSkpKTsKICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBpZiAo
cmVwb3J0RXhjZXB0aW9ucykKICAgICAgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihtX2V4ZWMsIG1f
ZXhlYy0+ZXhjZXB0aW9uKCkpOwpAQCAtMTcwLDcgKzE3MCw3IEBAIFNjcmlwdE9iamVjdCBTY3Jp
cHRGdW5jdGlvbkNhbGw6OmNvbnN0cnUKIAogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CiAKLSAgICBKU09iamVjdCogY29uc3RydWN0b3IgPSBhc09iamVjdCh0aGlzT2Jq
ZWN0LT5nZXQobV9leGVjLCBJZGVudGlmaWVyKG1fZXhlYywgbV9uYW1lKSkpOworICAgIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3RvciA9IGFzT2JqZWN0KHRoaXNPYmplY3QtPmdldChtX2V4ZWMsIElkZW50
aWZpZXIobV9leGVjLCBzdHJpbmdUb1VTdHJpbmcobV9uYW1lKSkpKTsKICAgICBpZiAobV9leGVj
LT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBpZiAocmVwb3J0RXhjZXB0aW9ucykKICAgICAg
ICAgICAgIHJlcG9ydEV4Y2VwdGlvbihtX2V4ZWMsIG1fZXhlYy0+ZXhjZXB0aW9uKCkpOwpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcAkocmV2aXNpb24gNTc2NjMpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0
LDcgKzY0LDcgQEAgYm9vbCBTY3JpcHRPYmplY3Q6OnNldChjb25zdCBTdHJpbmcmIG5hbQogewog
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgUHV0UHJvcGVydHlT
bG90IHNsb3Q7Ci0gICAganNPYmplY3QoKS0+cHV0KG1fc2NyaXB0U3RhdGUsIElkZW50aWZpZXIo
bV9zY3JpcHRTdGF0ZSwgbmFtZSksIGpzU3RyaW5nKG1fc2NyaXB0U3RhdGUsIHZhbHVlKSwgc2xv
dCk7CisgICAganNPYmplY3QoKS0+cHV0KG1fc2NyaXB0U3RhdGUsIElkZW50aWZpZXIobV9zY3Jp
cHRTdGF0ZSwgc3RyaW5nVG9VU3RyaW5nKG5hbWUpKSwganNTdHJpbmcobV9zY3JpcHRTdGF0ZSwg
c3RyaW5nVG9VU3RyaW5nKHZhbHVlKSksIHNsb3QpOwogICAgIHJldHVybiBoYW5kbGVFeGNlcHRp
b24obV9zY3JpcHRTdGF0ZSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
UHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0UHJv
ZmlsZXIuY3BwCShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
UHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxOCArMzAsMTkgQEAKIAogI2luY2x1
ZGUgIlNjcmlwdFByb2ZpbGVyLmgiCiAKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNs
dWRlIDxwcm9maWxlci9Qcm9maWxlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQg
U2NyaXB0UHJvZmlsZXI6OnN0YXJ0KFNjcmlwdFN0YXRlKiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB0
aXRsZSkKIHsKLSAgICBKU0M6OlByb2ZpbGVyOjpwcm9maWxlcigpLT5zdGFydFByb2ZpbGluZyhz
dGF0ZSwgdGl0bGUpOworICAgIEpTQzo6UHJvZmlsZXI6OnByb2ZpbGVyKCktPnN0YXJ0UHJvZmls
aW5nKHN0YXRlLCBzdHJpbmdUb1VTdHJpbmcodGl0bGUpKTsKIH0KIAogUGFzc1JlZlB0cjxTY3Jp
cHRQcm9maWxlPiBTY3JpcHRQcm9maWxlcjo6c3RvcChTY3JpcHRTdGF0ZSogc3RhdGUsIGNvbnN0
IFN0cmluZyYgdGl0bGUpCiB7Ci0gICAgcmV0dXJuIEpTQzo6UHJvZmlsZXI6OnByb2ZpbGVyKCkt
PnN0b3BQcm9maWxpbmcoc3RhdGUsIHRpdGxlKTsKKyAgICByZXR1cm4gSlNDOjpQcm9maWxlcjo6
cHJvZmlsZXIoKS0+c3RvcFByb2ZpbGluZyhzdGF0ZSwgc3RyaW5nVG9VU3RyaW5nKHRpdGxlKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0U3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRT
dHJpbmcuaAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0
cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaWZuZGVmIFNjcmlwdFN0
cmluZ19oCiAjZGVmaW5lIFNjcmlwdFN0cmluZ19oCiAKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvVVN0cmlu
Zy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvU3RyaW5nQnVpbGRlci5oPgpAQCAtNDMsOSArNDQsMTIg
QEAgY2xhc3MgU2NyaXB0U3RyaW5nIHsKIHB1YmxpYzoKICAgICBTY3JpcHRTdHJpbmcoKSB7fQog
ICAgIFNjcmlwdFN0cmluZyhjb25zdCBjaGFyKiBzKSA6IG1fc3RyKHMpIHt9CisgICAgU2NyaXB0
U3RyaW5nKGNvbnN0IFN0cmluZyYgcykgOiBtX3N0cihzdHJpbmdUb1VTdHJpbmcocykpIHt9CiAg
ICAgU2NyaXB0U3RyaW5nKGNvbnN0IEpTQzo6VVN0cmluZyYgcykgOiBtX3N0cihzKSB7fQogCiAg
ICAgb3BlcmF0b3IgSlNDOjpVU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHI7IH0KKyAgICBv
cGVyYXRvciBTdHJpbmcoKSBjb25zdCB7IHJldHVybiB1c3RyaW5nVG9TdHJpbmcobV9zdHIpOyB9
CisgICAgY29uc3QgSlNDOjpVU3RyaW5nJiB1c3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHI7
IH0KIAogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9zdHIuaXNOdWxsKCk7IH0K
ICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyLnNpemUoKTsgfQpAQCAtNjAs
NyArNjQsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBKU0M6OlN0cmluZ0J1aWxkZXIgYnVm
ZmVyOwogICAgICAgICBidWZmZXIuYXBwZW5kKG1fc3RyKTsKLSAgICAgICAgYnVmZmVyLmFwcGVu
ZChzKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZChzdHJpbmdUb1VTdHJpbmcocykpOwogICAgICAg
ICBtX3N0ciA9IGJ1ZmZlci5idWlsZCgpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDU3NjYzKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDcgKzUwLDcgQEAgYm9vbCBTY3JpcHRWYWx1ZTo6Z2V0U3RyaW5nKFNjcmlwdFN0YXRlKgogICAg
IFVTdHJpbmcgdXN0cmluZzsKICAgICBpZiAoIW1fdmFsdWUuZ2V0KCkuZ2V0U3RyaW5nKHNjcmlw
dFN0YXRlLCB1c3RyaW5nKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdCA9IHVz
dHJpbmc7CisgICAgcmVzdWx0ID0gdXN0cmluZ1RvU3RyaW5nKHVzdHJpbmcpOwogICAgIHJldHVy
biB0cnVlOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oCShyZXZpc2lvbiA1
NzY2MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmbmRlZiBTY3JpcHRWYWx1ZV9oCiAjZGVmaW5lIFNjcmlw
dFZhbHVlX2gKIAorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlIDxydW50aW1lL0pT
VmFsdWUuaD4KQEAgLTM5LDcgKzQwLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBTdHJpbmc7CiBjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CiAKIGNsYXNzIFNjcmlwdFZh
bHVlIHsKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogCiAgICAgSlNDOjpKU1ZhbHVlIGpzVmFs
dWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9CiAgICAgYm9vbCBnZXRTdHJpbmco
U2NyaXB0U3RhdGUqLCBTdHJpbmcmIHJlc3VsdCkgY29uc3Q7Ci0gICAgU3RyaW5nIHRvU3RyaW5n
KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5nZXQoKS50
b1N0cmluZyhzY3JpcHRTdGF0ZSk7IH0KKyAgICBTdHJpbmcgdG9TdHJpbmcoU2NyaXB0U3RhdGUq
IHNjcmlwdFN0YXRlKSBjb25zdCB7IHJldHVybiB1c3RyaW5nVG9TdHJpbmcobV92YWx1ZS5nZXQo
KS50b1N0cmluZyhzY3JpcHRTdGF0ZSkpOyB9CiAgICAgYm9vbCBpc0VxdWFsKFNjcmlwdFN0YXRl
KiwgY29uc3QgU2NyaXB0VmFsdWUmKSBjb25zdDsKICAgICBib29sIGlzTnVsbCgpIGNvbnN0Owog
ICAgIGJvb2wgaXNVbmRlZmluZWQoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDU3NjYzKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldChjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEmIHZhbHVlKQogICAg
IHsKICAgICAgICAgQVNTRVJUKG1fbmFtZXMuc2l6ZSgpID09IG1fdmFsdWVzLnNpemUoKSk7Ci0g
ICAgICAgIG1fbmFtZXMuYXBwZW5kKFN0cmluZyhwcm9wZXJ0eU5hbWUudXN0cmluZygpKS5jcm9z
c1RocmVhZFN0cmluZygpLmltcGwoKSk7CisgICAgICAgIG1fbmFtZXMuYXBwZW5kKGlkZW50aWZp
ZXJUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLmNyb3NzVGhyZWFkU3RyaW5nKCkuaW1wbCgpKTsKICAg
ICAgICAgbV92YWx1ZXMuYXBwZW5kKHZhbHVlKTsKICAgICB9CiAKQEAgLTU1NCw3ICs1NTQsNyBA
QCBzdHJ1Y3QgU2VyaWFsaXppbmdUcmVlV2Fsa2VyIDogcHVibGljIEJhCiAgICAgICAgICAgICBy
ZXR1cm4gU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YSh2YWx1ZSk7CiAKICAgICAgICAgaWYgKHZh
bHVlLmlzU3RyaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gU2VyaWFsaXplZFNjcmlwdFZhbHVl
RGF0YShhc1N0cmluZyh2YWx1ZSktPnZhbHVlKG1fZXhlYykpOworICAgICAgICAgICAgcmV0dXJu
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEodXN0cmluZ1RvU3RyaW5nKGFzU3RyaW5nKHZhbHVl
KS0+dmFsdWUobV9leGVjKSkpOwogCiAgICAgICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQogICAg
ICAgICAgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEoU2VyaWFsaXplZFNjcmlw
dFZhbHVlRGF0YTo6TnVtYmVyVHlwZSwgdmFsdWUudW5jaGVja2VkR2V0TnVtYmVyKCkpOwpAQCAt
Nzc3LDcgKzc3Nyw3IEBAIHN0cnVjdCBEZXNlcmlhbGl6aW5nVHJlZVdhbGtlciA6IHB1YmxpYyAK
IAogICAgIHZvaWQgcHV0UHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgY29uc3QgUmVmUHRyPFN0
cmluZ0ltcGw+IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIG9i
amVjdC0+cHV0RGlyZWN0KElkZW50aWZpZXIobV9leGVjLCBTdHJpbmcocHJvcGVydHlOYW1lKSks
IHZhbHVlKTsKKyAgICAgICAgb2JqZWN0LT5wdXREaXJlY3QoSWRlbnRpZmllcihtX2V4ZWMsIHN0
cmluZ1RvVVN0cmluZyhTdHJpbmcocHJvcGVydHlOYW1lKSkpLCB2YWx1ZSk7CiAgICAgfQogCiAg
ICAgYm9vbCBzdGFydEFycmF5KFJlZlB0cjxTZXJpYWxpemVkQXJyYXk+LCBKU0FycmF5KiBvdXRB
cnJheSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU3RyaW5nU291cmNlUHJvdmlkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL1N0cmluZ1NvdXJjZVByb3ZpZGVyLmgJ
KHJldmlzaW9uIDU3NjYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TdHJpbmdTb3VyY2VQcm92
aWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWZuZGVmIFN0cmluZ1Nv
dXJjZVByb3ZpZGVyX2gKICNkZWZpbmUgU3RyaW5nU291cmNlUHJvdmlkZXJfaAogCisjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0U291cmNlUHJvdmlkZXIuaCIKICNp
bmNsdWRlIDxwYXJzZXIvU291cmNlQ29kZS5oPgogCkBAIC00NSw3ICs0Niw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFN0cmluZ1NvdXJjZVByb3ZpZGVy
KGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIHVybCkKLSAgICAgICAgICAgIDog
U2NyaXB0U291cmNlUHJvdmlkZXIodXJsKQorICAgICAgICAgICAgOiBTY3JpcHRTb3VyY2VQcm92
aWRlcihzdHJpbmdUb1VTdHJpbmcodXJsKSkKICAgICAgICAgICAgICwgbV9zb3VyY2Uoc291cmNl
KQogICAgICAgICB7CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJT
Y3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNj
cmlwdE9iamVjdC5tbQkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL29iamMv
V2ViU2NyaXB0T2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yODksNyArMjg5LDcgQEAgLSAo
aWQpY2FsbFdlYlNjcmlwdE1ldGhvZDooTlNTdHJpbmcgKiluYQogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAg
ICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIAotICAgIEpTVmFsdWUgZnVuY3Rpb24g
PSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgU3RyaW5nKG5hbWUpKSk7
CisgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgSWRlbnRpZmll
cihleGVjLCBzdHJpbmdUb1VTdHJpbmcoU3RyaW5nKG5hbWUpKSkpOwogICAgIENhbGxEYXRhIGNh
bGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24uZ2V0Q2FsbERhdGEoY2Fs
bERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCkBAIC0zNjYsNyArMzY2
LDcgQEAgLSAodm9pZClzZXRWYWx1ZTooaWQpdmFsdWUgZm9yS2V5OihOU1N0cgogICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dDsKLSAgICBbc2VsZiBfaW1wXS0+cHV0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgU3RyaW5nKGtl
eSkpLCBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAmdmFsdWUsIE9iamNPYmplY3RUeXBl
LCBbc2VsZiBfcm9vdE9iamVjdF0pLCBzbG90KTsKKyAgICBbc2VsZiBfaW1wXS0+cHV0KGV4ZWMs
IElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5nKFN0cmluZyhrZXkpKSksIGNvbnZlcnRP
YmpjVmFsdWVUb1ZhbHVlKGV4ZWMsICZ2YWx1ZSwgT2JqY09iamVjdFR5cGUsIFtzZWxmIF9yb290
T2JqZWN0XSksIHNsb3QpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAgICAg
ICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjKTsKQEAgLTM5MSw3ICszOTEsNyBAQCAtIChp
ZCl2YWx1ZUZvcktleTooTlNTdHJpbmcgKilrZXkKICAgICAgICAgLy8gbGVhdmluZyB0aGUgbG9j
ayBwZXJtYW5lbnRseSBoZWxkCiAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IFtzZWxmIF9pbXBdLT5n
ZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCBTdHJpbmcoa2V5KSkpOworICAgICAgICBKU1ZhbHVl
IHJlc3VsdCA9IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCBzdHJpbmdU
b1VTdHJpbmcoU3RyaW5nKGtleSkpKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjKTsK
QEAgLTQyMCw3ICs0MjAsNyBAQCAtICh2b2lkKXJlbW92ZVdlYlNjcmlwdEtleTooTlNTdHJpbmcg
KilrCiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CiAKICAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIFtzZWxmIF9pbXBdLT5kZWxldGVQcm9wZXJ0
eShleGVjLCBJZGVudGlmaWVyKGV4ZWMsIFN0cmluZyhrZXkpKSk7CisgICAgW3NlbGYgX2ltcF0t
PmRlbGV0ZVByb3BlcnR5KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5nKFN0
cmluZyhrZXkpKSkpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAg
IGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xODc2
LDcgKzE4NzYsNyBAQCBzdWIgR2V0TmF0aXZlVHlwZUZyb21TaWduYXR1cmUKIAogbXkgJW5hdGl2
ZVR5cGUgPSAoCiAgICAgIkNvbXBhcmVIb3ciID0+ICJSYW5nZTo6Q29tcGFyZUhvdyIsCi0gICAg
IkRPTVN0cmluZyIgPT4gImNvbnN0IFVTdHJpbmcmIiwKKyAgICAiRE9NU3RyaW5nIiA9PiAiY29u
c3QgU3RyaW5nJiIsCiAgICAgIkRPTU9iamVjdCIgPT4gIlNjcmlwdFZhbHVlIiwKICAgICAiTm9k
ZUZpbHRlciIgPT4gIlJlZlB0cjxOb2RlRmlsdGVyPiIsCiAgICAgIlNWR0FuZ2xlIiA9PiAiU1ZH
QW5nbGUiLApAQCAtMTkyOCw3ICsxOTI4LDcgQEAgc3ViIEpTVmFsdWVUb05hdGl2ZQogICAgIGlm
ICgkdHlwZSBlcSAiRE9NU3RyaW5nIikgewogICAgICAgICByZXR1cm4gInZhbHVlVG9TdHJpbmdX
aXRoTnVsbENoZWNrKGV4ZWMsICR2YWx1ZSkiIGlmICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDb252ZXJ0TnVsbFRvTnVsbFN0cmluZyJ9OwogICAgICAgICByZXR1cm4gInZhbHVl
VG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgJHZhbHVlKSIgaWYgJHNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxT
dHJpbmcifTsKLSAgICAgICAgcmV0dXJuICIkdmFsdWUudG9TdHJpbmcoZXhlYykiOworICAgICAg
ICByZXR1cm4gInVzdHJpbmdUb1N0cmluZygkdmFsdWUudG9TdHJpbmcoZXhlYykpIjsKICAgICB9
CiAKICAgICBpZiAoJHR5cGUgZXEgIkRPTU9iamVjdCIpIHsKSW5kZXg6IFdlYkNvcmUvYnJpZGdl
L0lkZW50aWZpZXJSZXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL0lkZW50aWZp
ZXJSZXAuY3BwCShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUvYnJpZGdlL0lkZW50aWZpZXJS
ZXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJJZGVudGlmaWVyUmVwLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvVVN0
cmluZy5oPgpAQCAtOTEsNyArOTIsNyBAQCBJZGVudGlmaWVyUmVwKiBJZGVudGlmaWVyUmVwOjpn
ZXQoY29uc3QgCiAgICAgaWYgKCFuYW1lKQogICAgICAgICByZXR1cm4gMDsKICAgCi0gICAgVVN0
cmluZyBzdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKG5hbWUsIHN0
cmxlbihuYW1lKSk7CisgICAgVVN0cmluZyBzdHJpbmcgPSBzdHJpbmdUb1VTdHJpbmcoU3RyaW5n
Ojpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhuYW1lLCBzdHJsZW4obmFtZSkpKTsKICAgICBw
YWlyPFN0cmluZ0lkZW50aWZpZXJNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBzdHJpbmdJ
ZGVudGlmaWVyTWFwKCkuYWRkKHN0cmluZy5yZXAoKSwgMCk7CiAgICAgaWYgKHJlc3VsdC5zZWNv
bmQpIHsKICAgICAgICAgQVNTRVJUKCFyZXN1bHQuZmlyc3QtPnNlY29uZCk7CkluZGV4OiBXZWJD
b3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uv
Yy9jX3V0aWxpdHkuY3BwCShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUvYnJpZGdlL2MvY191
dGlsaXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIFN0cmluZyBjb252
ZXJ0TlBTdHJpbmdUb1VURjE2KGNvbnN0IE5QU3QKIAogSWRlbnRpZmllciBpZGVudGlmaWVyRnJv
bU5QSWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IE5QVVRGOCogbmFtZSkKIHsKLSAg
ICByZXR1cm4gSWRlbnRpZmllcihleGVjLCBjb252ZXJ0VVRGOFRvVVRGMTZXaXRoTGF0aW4xRmFs
bGJhY2sobmFtZSwgLTEpKTsKKyAgICByZXR1cm4gSWRlbnRpZmllcihleGVjLCBzdHJpbmdUb1VT
dHJpbmcoY29udmVydFVURjhUb1VURjE2V2l0aExhdGluMUZhbGxiYWNrKG5hbWUsIC0xKSkpOwog
fQogCiB9IH0KSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
CShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQ3LDcgKzEzNDcsMTIgQEAgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjphZGRQcm9maWxlRmluaQogewogICAgIFJlZlB0cjxTY3JpcHRQcm9maWxl
PiBwcm9maWxlID0gcHJwUHJvZmlsZTsKIAotICAgIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nOjpm
b3JtYXQoIlByb2ZpbGUgXCJ3ZWJraXQtcHJvZmlsZTovLyVzLyVzIyVkXCIgZmluaXNoZWQuIiwg
Q1BVUHJvZmlsZVR5cGUsIGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMocHJvZmlsZS0+dGl0
bGUoKSkudXRmOCgpLmRhdGEoKSwgcHJvZmlsZS0+dWlkKCkpOworI2lmIFVTRShKU0MpCisgICAg
U3RyaW5nIHRpdGxlID0gdXN0cmluZ1RvU3RyaW5nKHByb2ZpbGUtPnRpdGxlKCkpOworI2Vsc2UK
KyAgICBTdHJpbmcgdGl0bGUgPSBwcm9maWxlLT50aXRsZSgpOworI2VuZGlmCisgICAgU3RyaW5n
IG1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiUHJvZmlsZSBcIndlYmtpdC1wcm9maWxlOi8vJXMv
JXMjJWRcIiBmaW5pc2hlZC4iLCBDUFVQcm9maWxlVHlwZSwgZW5jb2RlV2l0aFVSTEVzY2FwZVNl
cXVlbmNlcyh0aXRsZSkudXRmOCgpLmRhdGEoKSwgcHJvZmlsZS0+dWlkKCkpOwogICAgIGFkZE1l
c3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgTG9nTWVzc2Fn
ZUxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOwogfQogCkBAIC0xMzg0LDgg
KzEzODksMTQgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRQcm9maWxlKGxvbgogCiBT
Y3JpcHRPYmplY3QgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y3JlYXRlUHJvZmlsZUhlYWRlcihjb25z
dCBTY3JpcHRQcm9maWxlJiBwcm9maWxlKQogeworI2lmIFVTRShKU0MpCisgICAgU3RyaW5nIHRp
dGxlID0gdXN0cmluZ1RvU3RyaW5nKHByb2ZpbGUudGl0bGUoKSk7CisjZWxzZQorICAgIFN0cmlu
ZyB0aXRsZSA9IHByb2ZpbGUudGl0bGUoKTsKKyNlbmRpZgorCiAgICAgU2NyaXB0T2JqZWN0IGhl
YWRlciA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpOwotICAgIGhlYWRlci5zZXQoInRp
dGxlIiwgcHJvZmlsZS50aXRsZSgpKTsKKyAgICBoZWFkZXIuc2V0KCJ0aXRsZSIsIHRpdGxlKTsK
ICAgICBoZWFkZXIuc2V0KCJ1aWQiLCBwcm9maWxlLnVpZCgpKTsKICAgICBoZWFkZXIuc2V0KCJ0
eXBlSWQiLCBTdHJpbmcoQ1BVUHJvZmlsZVR5cGUpKTsKICAgICByZXR1cm4gaGVhZGVyOwpJbmRl
eDogV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDU3
NjYzKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgU3RyaW5nIEphdmFTY3JpcHRDYWxsRnJhbWU6OmZ1
bmN0aW9uTmFtZQogICAgIFVTdHJpbmcgZnVuY3Rpb25OYW1lID0gbV9kZWJ1Z2dlckNhbGxGcmFt
ZS5jYWxjdWxhdGVkRnVuY3Rpb25OYW1lKCk7CiAgICAgaWYgKGZ1bmN0aW9uTmFtZS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gZnVuY3Rpb25OYW1lOwor
ICAgIHJldHVybiB1c3RyaW5nVG9TdHJpbmcoZnVuY3Rpb25OYW1lKTsKIH0KIAogRGVidWdnZXJD
YWxsRnJhbWU6OlR5cGUgSmF2YVNjcmlwdENhbGxGcmFtZTo6dHlwZSgpIGNvbnN0CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL0tVUkwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0tV
UkwuaAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc5LDkgKzE3OSw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBwYXRoRW5k
KCkgY29uc3Q7CiAgICAgdW5zaWduZWQgcGF0aEFmdGVyTGFzdFNsYXNoKCkgY29uc3Q7CiAgICAg
b3BlcmF0b3IgY29uc3QgU3RyaW5nJigpIGNvbnN0IHsgcmV0dXJuIHN0cmluZygpOyB9Ci0jaWYg
VVNFKEpTQykKLSAgICBvcGVyYXRvciBKU0M6OlVTdHJpbmcoKSBjb25zdCB7IHJldHVybiBzdHJp
bmcoKTsgfQotI2VuZGlmCiAKICNpZiBQTEFURk9STShDRikKICAgICBLVVJMKENGVVJMUmVmKTsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcuY3BwCShyZXZpc2lvbiA1NzY2
MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOTUsNyArMjk1LDcgQEAgQXRvbWljU3RyaW5nSW1wbCogQXRvbWljU3RyaW5nOjpm
aW5kKGNvbgogCiBBdG9taWNTdHJpbmc6Om9wZXJhdG9yIFVTdHJpbmcoKSBjb25zdAogewotICAg
IHJldHVybiBtX3N0cmluZzsKKyAgICByZXR1cm4gbV9zdHJpbmcuaW1wbCgpLT51c3RyaW5nKCk7
CiB9CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcuaAkocmV2
aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDEzIEBACiAjZGVmaW5lIEFUT01JQ1NUUklOR19DT05W
RVJTSU9OCiAjZW5kaWYKIAorI2lmIFVTRShKU0MpCituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIElk
ZW50aWZpZXI7CitjbGFzcyBVU3RyaW5nOworfQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogc3RydWN0IEF0b21pY1N0cmluZ0hhc2g7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvUGxhdGZvcm1TdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQv
UGxhdGZvcm1TdHJpbmcuaAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvUGxhdGZvcm1TdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTMgKzUwLDYgQEAgY2xh
c3Mgd3hTdHJpbmc7CiBjbGFzcyBCU3RyaW5nOwogI2VuZGlmCiAKLSNpZiBVU0UoSlNDKQotbmFt
ZXNwYWNlIEpTQyB7Ci1jbGFzcyBJZGVudGlmaWVyOwotY2xhc3MgVVN0cmluZzsKLX0KLSNlbmRp
ZgotCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIENTdHJpbmc7CiB9CkBAIC05MywxMCArODYsNiBA
QCBwdWJsaWM6CiAgICAgU3RyaW5nKCkgeyB9IC8vIGdpdmVzIG51bGwgc3RyaW5nLCBkaXN0aW5n
dWlzaGFibGUgZnJvbSBhbiBlbXB0eSBzdHJpbmcKICAgICBTdHJpbmcoY29uc3QgVUNoYXIqLCB1
bnNpZ25lZCBsZW5ndGgpOwogICAgIFN0cmluZyhjb25zdCBVQ2hhciopOyAvLyBTcGVjaWZpY2Fs
bHkgZm9yIG51bGwgdGVybWluYXRlZCBVVEYtMTYKLSNpZiBVU0UoSlNDKQotICAgIFN0cmluZyhj
b25zdCBKU0M6OklkZW50aWZpZXImKTsKLSAgICBTdHJpbmcoY29uc3QgSlNDOjpVU3RyaW5nJik7
Ci0jZW5kaWYKICAgICBTdHJpbmcoY29uc3QgY2hhciopOwogICAgIFN0cmluZyhjb25zdCBjaGFy
KiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBTdHJpbmcoU3RyaW5nSW1wbCogaSkgOiBtX2ltcGwo
aSkgeyB9CkBAIC0xMTIsMTAgKzEwMSw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU3RyaW5nIGFk
b3B0KFN0cmluZ0J1ZmZlciYgYnVmZmVyKSB7IHJldHVybiBTdHJpbmdJbXBsOjphZG9wdChidWZm
ZXIpOyB9CiAgICAgc3RhdGljIFN0cmluZyBhZG9wdChWZWN0b3I8VUNoYXI+JiB2ZWN0b3IpIHsg
cmV0dXJuIFN0cmluZ0ltcGw6OmFkb3B0KHZlY3Rvcik7IH0KIAotI2lmIFVTRShKU0MpCi0gICAg
b3BlcmF0b3IgSlNDOjpVU3RyaW5nKCkgY29uc3Q7Ci0jZW5kaWYKLQogICAgIHVuc2lnbmVkIGxl
bmd0aCgpIGNvbnN0OwogICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkgY29uc3Q7CiAgICAg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCk7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL3RleHQvU3RyaW5nLmNwcAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L3RleHQvU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTMgKzM2LDYgQEAKICNpbmNs
dWRlIDx3dGYvdW5pY29kZS9VVEY4Lmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5o
PgogCi0jaWYgVVNFKEpTQykKLSNpbmNsdWRlIDxydW50aW1lL0lkZW50aWZpZXIuaD4KLQotdXNp
bmcgSlNDOjpJZGVudGlmaWVyOwotdXNpbmcgSlNDOjpVU3RyaW5nOwotI2VuZGlmCi0KIHVzaW5n
IG5hbWVzcGFjZSBXVEY7CiB1c2luZyBuYW1lc3BhY2UgV1RGOjpVbmljb2RlOwogCkBAIC03Njks
MjkgKzc2Miw2IEBAIFN0cmluZyBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWMKICAg
ICByZXR1cm4gdXRmODsKIH0KIAotI2lmIFVTRShKU0MpCi1TdHJpbmc6OlN0cmluZyhjb25zdCBJ
ZGVudGlmaWVyJiBzdHIpCi17Ci0gICAgaWYgKHN0ci5pc051bGwoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShzdHIudXN0cmluZygpKTsKLX0KLQot
U3RyaW5nOjpTdHJpbmcoY29uc3QgVVN0cmluZyYgc3RyKQotewotICAgIGlmIChzdHIuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUoc3Ry
KTsKLX0KLQotU3RyaW5nOjpvcGVyYXRvciBVU3RyaW5nKCkgY29uc3QKLXsKLSAgICBpZiAoIW1f
aW1wbCkKLSAgICAgICAgcmV0dXJuIFVTdHJpbmcoKTsKLSAgICByZXR1cm4gbV9pbXBsLT51c3Ry
aW5nKCk7Ci19Ci0jZW5kaWYKLQogLy8gU3RyaW5nIE9wZXJhdGlvbnMKIAogc3RhdGljIGJvb2wg
aXNDaGFyYWN0ZXJBbGxvd2VkSW5CYXNlKFVDaGFyIGMsIGludCBiYXNlKQpJbmRleDogV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5WaWV3LmNwcAkocmV2aXNpb24gNTc2NjMpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyMyw3ICs0MjMsNyBAQCBzdGF0aWMgYm9vbCBn
ZXRTdHJpbmcoU2NyaXB0Q29udHJvbGxlciogCiAgICAgVVN0cmluZyB1c3RyaW5nID0gcmVzdWx0
LnRvU3RyaW5nKGV4ZWMpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAKLSAgICBzdHJp
bmcgPSB1c3RyaW5nOworICAgIHN0cmluZyA9IHVzdHJpbmdUb1N0cmluZyh1c3RyaW5nKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU3NzEyKQorKysgV2ViS2l0L21h
Yy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNCBAQAorMjAxMC0wNC0xNSAg
R2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM3Njc1CisgICAgICAgIFJlbW92ZSBjYXN0cy9jb25zdHJ1Y3Rv
cnMgdG8vZnJvbSBKU0M6OlVTdHJpbmcgdHlwZSBmcm9tIFdlYkNvcmU6OlN0cmluZworICAgICAg
ICAKKyAgICAgICAgV2ViQ29yZSdzIHN0cmluZ3Mgc2hvdWxkIG5vdCBrbm93IGFib3V0IEpTQzo6
VVN0cmluZywgdGhpcyBzaG91bGQgYmUgYWJzdHJhY3RlZAorICAgICAgICBhd2F5IGluIHRoZSBi
aW5kaW5ncy4gIEFkZCBleHBsaWNpdCBjb252ZXJzaW9uIG1ldGhvZHMgcmF0aGVyIHRoYW4gcmVs
eWluZyBvbgorICAgICAgICBvdmVybG9hZGVkIGNhc3Qgb3BlcmF0b3JzIC8gY29uc3RydWN0b3Jz
IGJlaW5nIGltcGxpY2l0bHkgY2FsbGVkLgorCisgICAgICAgIFRoaXMgcGF0Y2ggb25seSBjaGFu
Z2VzIHRoZSBjbGFzcyBTdHJpbmcsIG9uY2UgdGhpcyBoYXMgbGFuZGVkIFN0cmluZ0ltcGwsIGFu
ZAorICAgICAgICBob3BlZnVsbHkgQXRvbWljU3RyaW5nIHRvbywgc2hvdWxkIGZvbGxvdyBzdWl0
LgorCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW06
CisgICAgICAgIChpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXApOgorICAgICAgICAqIFBsdWdp
bnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbToKKyAgICAgICAgKFdlYktp
dDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjphZGRWYWx1ZVRvQXJyYXkpOgorICAgICAg
ICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Om1vdmVHbG9iYWxFeGNlcHRp
b25Ub0V4ZWNTdGF0ZSk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5t
bToKKyAgICAgICAgKFdlYktpdDo6UHJveHlJbnN0YW5jZTo6Z2V0UHJvcGVydHlOYW1lcyk6Cisg
ICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3N0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOmZvcmNlVXNlckdlc3R1cmU6XSk6Cisg
ICAgICAgICgtW1dlYkZyYW1lIF9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmlu
Zzp3aXRoR2xvYmFsT2JqZWN0OmluU2NyaXB0V29ybGQ6XSk6CisgICAgICAgICogV2ViVmlldy9X
ZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tOgorICAgICAgICAoLVtXZWJTY3JpcHRDYWxsRnJhbWUg
ZXZhbHVhdGVXZWJTY3JpcHQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dl
ci5tbToKKyAgICAgICAgKHRvTlNVUkwpOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToK
KyAgICAgICAgKGFlRGVzY0Zyb21KU1ZhbHVlKToKKwogMjAxMC0wNC0xNSAgTWFyayBSb3dlICA8
bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4
OiBXZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0
UHJveHkubW0JKHJldmlzaW9uIDU3NjYzKQorKysgV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9O
ZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjE3LDcgKzYxNyw3
IEBAIHN0YXRpYyBJZGVudGlmaWVyIGlkZW50aWZpZXJGcm9tSWRlbnRpZmkKICAgICBBU1NFUlQo
aWRlbnRpZmllci0+aXNTdHJpbmcoKSk7CiAgIAogICAgIGNvbnN0IGNoYXIqIHN0ciA9IGlkZW50
aWZpZXItPnN0cmluZygpOyAgICAKLSAgICByZXR1cm4gSWRlbnRpZmllcihKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCksIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2so
c3RyLCBzdHJsZW4oc3RyKSkpOworICAgIHJldHVybiBJZGVudGlmaWVyKEpTRE9NV2luZG93Ojpj
b21tb25KU0dsb2JhbERhdGEoKSwgc3RyaW5nVG9VU3RyaW5nKFN0cmluZzo6ZnJvbVVURjhXaXRo
TGF0aW4xRmFsbGJhY2soc3RyLCBzdHJsZW4oc3RyKSkpKTsKIH0KIAoga2Vybl9yZXR1cm5fdCBX
S1BDSW52b2tlKG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQzMl90IHBsdWdpbklELCB1aW50
MzJfdCByZXF1ZXN0SUQsIHVpbnQzMl90IG9iamVjdElELCB1aW50NjRfdCBzZXJ2ZXJJZGVudGlm
aWVyLApJbmRleDogV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHJldmlzaW9uIDU3NjYzKQorKysgV2ViS2l0L21h
Yy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEyNTIsNyArMTI1Miw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjphZGRWYWwKIAogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7CiAgICAgICAgIFthcnJh
eSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6U3RyaW5nVmFsdWVUeXBlXV07Ci0g
ICAgICAgIFthcnJheSBhZGRPYmplY3Q6U3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKV07Cisg
ICAgICAgIFthcnJheSBhZGRPYmplY3Q6dXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4
ZWMpKV07CiAgICAgfSBlbHNlIGlmICh2YWx1ZS5pc051bWJlcigpKSB7CiAgICAgICAgIFthcnJh
eSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6RG91YmxlVmFsdWVUeXBlXV07CiAg
ICAgICAgIFthcnJheSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6dmFsdWUu
dG9OdW1iZXIoZXhlYyldXTsKQEAgLTE2NTksMTAgKzE2NTksMTAgQEAgdm9pZCBOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6Om1vdmVHbAogCiAgICAgewogICAgICAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxF
cnJvciwgZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkpOworICAgICAgICB0aHJvd0Vycm9yKGV4ZWMs
IEdlbmVyYWxFcnJvciwgc3RyaW5nVG9VU3RyaW5nKGdsb2JhbEV4Y2VwdGlvblN0cmluZygpKSk7
CiAgICAgfQogCi0gICAgZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkgPSBVU3RyaW5nKCk7CisgICAg
Z2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkgPSBTdHJpbmcoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CkluZGV4OiBXZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1t
CShyZXZpc2lvbiA1NzY2MykKKysrIFdlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0
YW5jZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzE3LDcgKzMxNyw3IEBAIHZvaWQgUHJveHlJbnN0
YW5jZTo6Z2V0UHJvcGVydHlOYW1lcyhFeGUKIAogICAgICAgICBpZiAoaWRlbnRpZmllci0+aXNT
dHJpbmcoKSkgewogICAgICAgICAgICAgY29uc3QgY2hhciogc3RyID0gaWRlbnRpZmllci0+c3Ry
aW5nKCk7Ci0gICAgICAgICAgICBuYW1lQXJyYXkuYWRkKElkZW50aWZpZXIoSlNET01XaW5kb3c6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpLCBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNr
KHN0ciwgc3RybGVuKHN0cikpKSk7CisgICAgICAgICAgICBuYW1lQXJyYXkuYWRkKElkZW50aWZp
ZXIoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLCBzdHJpbmdUb1VTdHJpbmcoU3Ry
aW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhzdHIsIHN0cmxlbihzdHIpKSkpKTsKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICBuYW1lQXJyYXkuYWRkKElkZW50aWZpZXI6OmZyb20o
ZXhlYywgaWRlbnRpZmllci0+bnVtYmVyKCkpKTsKICAgICB9CkluZGV4OiBXZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZy
YW1lLm1tCShyZXZpc2lvbiA1NzY2MykKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5t
bQkod29ya2luZyBjb3B5KQpAQCAtNjMwLDcgKzYzMCw3IEBAIC0gKE5TU3RyaW5nICopX3N0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3IKICAgICAgICAgcmV0dXJuIEAiIjsKIAogICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgcmV0dXJuIFN0cmluZyhyZXN1bHQudG9T
dHJpbmcoX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChtYWluVGhy
ZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKSkpOworICAgIHJldHVybiB1c3RyaW5nVG9T
dHJpbmcocmVzdWx0LnRvU3RyaW5nKF9wcml2YXRlLT5jb3JlRnJhbWUtPnNjcmlwdCgpLT5nbG9i
YWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9iYWxFeGVjKCkpKTsKIH0KIAog
LSAoTlNSZWN0KV9jYXJldFJlY3RBdE5vZGU6KERPTU5vZGUgKilub2RlIG9mZnNldDooaW50KW9m
ZnNldCBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlhZmZpbml0eQpAQCAtMTI2Myw3ICsx
MjYzLDcgQEAgLSAoTlNTdHJpbmcgKilfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcgogICAgICAg
ICByZXR1cm4gQCIiOwogCiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
LSAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC50b1N0cmluZyhhbnlXb3JsZEdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpKSk7CisgICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJp
bmcoYW55V29ybGRHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkpOwogfQogCiAtIChKU0dsb2Jh
bENvbnRleHRSZWYpX2dsb2JhbENvbnRleHRGb3JTY3JpcHRXb3JsZDooV2ViU2NyaXB0V29ybGQg
Kil3b3JsZApJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdh
dGUubW0JKHJldmlzaW9uIDU3NjYzKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERl
YnVnRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0MiwxNCArMjQyLDE0IEBAIC0gKGlk
KWV2YWx1YXRlV2ViU2NyaXB0OihOU1N0cmluZyAqKXNjcmkKICAgICAgICAgRHluYW1pY0dsb2Jh
bE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
LCBnbG9iYWxPYmplY3QpOwogCiAgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAgICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGV2YWx1YXRlSW5HbG9iYWxDYWxsRnJhbWUoU3RyaW5nKHNjcmlwdCks
IGV4Y2VwdGlvbiwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBldmFs
dWF0ZUluR2xvYmFsQ2FsbEZyYW1lKHN0cmluZ1RvVVN0cmluZyhzY3JpcHQpLCBleGNlcHRpb24s
IGdsb2JhbE9iamVjdCk7CiAgICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgICAgICByZXR1
cm4gW3NlbGYgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOmV4Y2VwdGlvbl07CiAgICAgICAgIHJl
dHVybiByZXN1bHQgPyBbc2VsZiBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6cmVzdWx0XSA6IG5p
bDsgICAgICAgIAogICAgIH0KIAogICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0gX3ByaXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1lLT5ldmFsdWF0ZShTdHJpbmcoc2Ny
aXB0KSwgZXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IF9wcml2YXRlLT5kZWJ1Z2dl
ckNhbGxGcmFtZS0+ZXZhbHVhdGUoc3RyaW5nVG9VU3RyaW5nKHNjcmlwdCksIGV4Y2VwdGlvbik7
CiAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0VmFsdWVU
b09iamNWYWx1ZTpleGNlcHRpb25dOwogICAgIHJldHVybiByZXN1bHQgPyBbc2VsZiBfY29udmVy
dFZhbHVlVG9PYmpjVmFsdWU6cmVzdWx0XSA6IG5pbDsKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmll
dy9XZWJTY3JpcHREZWJ1Z2dlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViU2NyaXB0RGVidWdnZXIubW0JKHJldmlzaW9uIDU3NjYzKQorKysgV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBA
IHN0YXRpYyBOU1VSTCAqdG9OU1VSTChjb25zdCBVU3RyaW5nJiBzKQogewogICAgIGlmIChzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gS1VSTChQYXJzZWRVUkxT
dHJpbmcsIHMpOworICAgIHJldHVybiBLVVJMKFBhcnNlZFVSTFN0cmluZywgdXN0cmluZ1RvU3Ry
aW5nKHMpKTsKIH0KIAogc3RhdGljIFdlYkZyYW1lICp0b1dlYkZyYW1lKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gNTc2NjMp
CisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDE1
OCw3ICs0MTU4LDcgQEAgc3RhdGljIE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVzY0Zybwog
ICAgIGlmIChqc1ZhbHVlLmlzQm9vbGVhbigpKQogICAgICAgICByZXR1cm4gW05TQXBwbGVFdmVu
dERlc2NyaXB0b3IgZGVzY3JpcHRvcldpdGhCb29sZWFuOmpzVmFsdWUuZ2V0Qm9vbGVhbigpXTsK
ICAgICBpZiAoanNWYWx1ZS5pc1N0cmluZygpKQotICAgICAgICByZXR1cm4gW05TQXBwbGVFdmVu
dERlc2NyaXB0b3IgZGVzY3JpcHRvcldpdGhTdHJpbmc6U3RyaW5nKGpzVmFsdWUuZ2V0U3RyaW5n
KGV4ZWMpKV07CisgICAgICAgIHJldHVybiBbTlNBcHBsZUV2ZW50RGVzY3JpcHRvciBkZXNjcmlw
dG9yV2l0aFN0cmluZzp1c3RyaW5nVG9TdHJpbmcoanNWYWx1ZS5nZXRTdHJpbmcoZXhlYykpXTsK
ICAgICBpZiAoanNWYWx1ZS5pc051bWJlcigpKSB7CiAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGpz
VmFsdWUudW5jaGVja2VkR2V0TnVtYmVyKCk7CiAgICAgICAgIGludCBpbnRWYWx1ZSA9IHZhbHVl
Owo=
</data>
<flag name="review"
          id="37274"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>