<?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>163188</bug_id>
          
          <creation_ts>2016-10-09 16:53:32 -0700</creation_ts>
          <short_desc>Update generated bindings code so that dictionary structures no longer need explicit constructors</short_desc>
          <delta_ts>2016-10-18 14:58:48 -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>Bindings</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>163624</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1238134</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-09 16:53:32 -0700</bug_when>
    <thetext>Update generated bindings code so that dictionary structures no longer need constructors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238135</commentid>
    <comment_count>1</comment_count>
      <attachid>291054</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-09 17:15:09 -0700</bug_when>
    <thetext>Created attachment 291054
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238140</commentid>
    <comment_count>2</comment_count>
      <attachid>291054</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-09 17:39:24 -0700</bug_when>
    <thetext>Comment on attachment 291054
Patch

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

Now that I see your change written out, I don’t see any downside to this.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:1144
&gt; +    $result .= &quot;    return result;\n&quot;;

We want WTFMove(result) here, otherwise we end up copying the result to make the Optional&lt;&gt; version. Saves work and reference count churn when there are data members that have non-trivial constructors.

&gt; Source/WebCore/dom/ClipboardEvent.h:37
&gt;      struct Init : public EventInit {

No need for the &quot;public&quot; here.

&gt; Source/WebCore/dom/CustomEvent.h:44
&gt;      struct Init : public EventInit {

No need for the &quot;public&quot; here.

&gt; Source/WebCore/dom/EventModifierInit.h:32
&gt;  struct EventModifierInit : public UIEventInit {

No need for the &quot;public&quot; here.

&gt; Source/WebCore/editing/Editor.cpp:884
&gt;      RefPtr&lt;DataTransfer&gt; dataTransfer = DataTransfer::createForCopyAndPaste(policy);

This should be auto.

&gt; Source/WebCore/editing/Editor.cpp:889
&gt; +    init.clipboardData = dataTransfer.get();

This should just be standard assignment. I don’t think a call to .get() would be needed here; RefPtr = RefPtr should compile and RefPtr = Ref should also compile with no get call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238147</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-09 17:44:10 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 291054 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=291054&amp;action=review
&gt; 
&gt; Now that I see your change written out, I don’t see any downside to this.

Well, the downside is that we&apos;ll have to pass non-nullable wrapper type as raw pointers for now. Thankfully, this is not common in dictionaries (only 1 instance in WebKit).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238149</commentid>
    <comment_count>4</comment_count>
      <attachid>291055</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-09 17:46:52 -0700</bug_when>
    <thetext>Created attachment 291055
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238156</commentid>
    <comment_count>5</comment_count>
      <attachid>291055</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-09 18:18:40 -0700</bug_when>
    <thetext>Comment on attachment 291055
Patch

Clearing flags on attachment: 291055

Committed r206974: &lt;http://trac.webkit.org/changeset/206974&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238157</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-09 18:18:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291054</attachid>
            <date>2016-10-09 17:15:09 -0700</date>
            <delta_ts>2016-10-09 17:46:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163188-20161009171150.patch</filename>
            <type>text/plain</type>
            <size>46329</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2OTcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDY4YTFjNTkyNzg1MWEx
OTNmNzYwOTgxMzg1MmQ2YTE5ZTlkMjNkNy4uYmZkZTIwMTg5OWYxNTI4OWVhYjU4YTQwMzI4OWZk
NDcxNmUzZjA2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQyIEBACiAyMDE2LTEwLTA5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgVXBkYXRlIGdlbmVyYXRlZCBi
aW5kaW5ncyBjb2RlIHNvIHRoYXQgZGljdGlvbmFyeSBzdHJ1Y3R1cmVzIG5vIGxvbmdlciBuZWVk
IGV4cGxpY2l0IGNvbnN0cnVjdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYzMTg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXBkYXRlIGdlbmVyYXRlZCBiaW5kaW5ncyBjb2RlIHNvIHRoYXQgZGlj
dGlvbmFyeSBzdHJ1Y3R1cmVzIG5vIGxvbmdlcgorICAgICAgICBuZWVkIGV4cGxpY2l0IGNvbnN0
cnVjdG9ycy4gV2Ugbm93IGNhbGwgdGhlIGRlZmF1bHQgY29uc3RydWN0b3IgYW5kCisgICAgICAg
IHRoZW4gaW5pdGlhbGl6ZSB0aGUgbWVtYmVycyBvbmUgYnkgb25lLgorCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZURpY3Rp
b25hcnlJbXBsZW1lbnRhdGlvbkNvbnRlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydERpY3Rpb25h
cnk8VGVzdE9iajo6RGljdGlvbmFyeT4pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydERpY3Rp
b25hcnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGROb3RUb2xlcmF0ZU51bGw+KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0
U2hvdWxkVG9sZXJhdGVOdWxsPik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFy
eTxBbHRlcm5hdGVEaWN0aW9uYXJ5TmFtZT4pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydERp
Y3Rpb25hcnk8VGVzdE9iajo6UGFyZW50RGljdGlvbmFyeT4pOgorICAgICAgICAoV2ViQ29yZTo6
Y29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6Q2hpbGREaWN0aW9uYXJ5Pik6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RTdGFuZGFsb25lRGljdGlv
bmFyeT4pOgorICAgICAgICAqIGRvbS9DbGlwYm9hcmRFdmVudC5oOgorICAgICAgICAqIGRvbS9D
dXN0b21FdmVudC5oOgorICAgICAgICAqIGRvbS9FdmVudEluaXQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SW5pdDo6RXZlbnRJbml0KTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vRXZlbnRN
b2RpZmllckluaXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TW9kaWZpZXJJbml0OjpFdmVu
dE1vZGlmaWVySW5pdCk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL0tleWJvYXJkRXZlbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6S2V5Ym9hcmRFdmVudDo6S2V5Ym9hcmRFdmVudCk6CisgICAg
ICAgICogZG9tL0tleWJvYXJkRXZlbnQuaDoKKyAgICAgICAgKiBkb20vS2V5Ym9hcmRFdmVudC5p
ZGw6CisgICAgICAgICogZG9tL1VJRXZlbnRJbml0Lmg6CisgICAgICAgIChXZWJDb3JlOjpVSUV2
ZW50SW5pdDo6VUlFdmVudEluaXQpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGlzcGF0Y2hDUFBFdmVudCk6CisKKzIw
MTYtMTAtMDkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBVcGRh
dGUgS2V5Ym9hcmRFdmVudCB0byBzdG9wIHVzaW5nIGxlZ2FjeSBbQ29uc3RydWN0b3JUZW1wbGF0
ZT1FdmVudF0KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2MzE3NgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCmluZGV4IDc4MWExYjU5ODdiNzJjOTQ3ZWI2MDQ4MjRiNGI4ZWM5MTlkZmJm
YjguLjU3NWU3Yzg2YTI0MjQ2MzgwZTY0M2RlYzY2MTRlOTQzNDUzZDc1ZjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0x
MDg2LDYgKzEwODYsOCBAQCBzdWIgR2VuZXJhdGVEaWN0aW9uYXJ5SW1wbGVtZW50YXRpb25Db250
ZW50CiAgICAgbXkgJGFyZ3VtZW50cyA9ICIiOwogICAgIG15ICRjb21tYSA9ICIiOwogCisgICAg
JHJlc3VsdCAuPSAiICAgICRjbGFzc05hbWUgcmVzdWx0O1xuIjsKKwogICAgICMgNS4gRm9yIGVh
Y2ggZGljdGlvbmFyeSBkaWN0aW9uYXJ5IGluIGRpY3Rpb25hcmllcywgaW4gb3JkZXI6CiAgICAg
Zm9yZWFjaCBteSAkZGljdGlvbmFyeSAoQGRpY3Rpb25hcmllcykgewogICAgICAgICAjIEZvciBl
YWNoIGRpY3Rpb25hcnkgbWVtYmVyIG1lbWJlciBkZWNsYXJlZCBvbiBkaWN0aW9uYXJ5LCBpbiBs
ZXhpY29ncmFwaGljYWwgb3JkZXI6CkBAIC0xMTAyLDExICsxMTA0LDYgQEAgc3ViIEdlbmVyYXRl
RGljdGlvbmFyeUltcGxlbWVudGF0aW9uQ29udGVudAogICAgICAgICAgICAgJHJlc3VsdCAuPSAi
ICAgIEpTVmFsdWUgJHtrZXl9VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVk
KCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCBc
IiR7a2V5fVwiKSk7XG4iOwogCiAgICAgICAgICAgICBteSAkbmF0aXZlVHlwZSA9IEdldE5hdGl2
ZVR5cGVGcm9tU2lnbmF0dXJlKCRpbnRlcmZhY2UsICRtZW1iZXIpOwotICAgICAgICAgICAgaWYg
KCRtZW1iZXItPmlzT3B0aW9uYWwgJiYgIWRlZmluZWQgJG1lbWJlci0+ZGVmYXVsdCkgewotICAg
ICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICBDb252ZXJ0ZXI8JG5hdGl2ZVR5cGU+OjpPcHRp
b25hbFZhbHVlICRrZXk7XG4iOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAkcmVzdWx0IC49ICIgICAgJG5hdGl2ZVR5cGUgJGtleTtcbiI7Ci0gICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgICMgNS4zLiBJZiB2YWx1ZSBpcyBub3QgdW5kZWZpbmVkLCB0aGVuOgogICAg
ICAgICAgICAgJHJlc3VsdCAuPSAiICAgIGlmICghJHtrZXl9VmFsdWUuaXNVbmRlZmluZWQoKSkg
e1xuIjsKQEAgLTExMTUsMjAgKzExMTIsMjMgQEAgc3ViIEdlbmVyYXRlRGljdGlvbmFyeUltcGxl
bWVudGF0aW9uQ29udGVudAogICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyR7
dHlwZX0uaCIpOwogICAgICAgICAgICAgICAgIGRpZSAiRGljdGlvbmFyeSBtZW1iZXJzIG9mIG5v
bi1udWxsYWJsZSB3cmFwcGVyIHR5cGVzIG11c3QgYmUgbWFya2VkIGFzIHJlcXVpcmVkIiBpZiAh
JG1lbWJlci0+aXNOdWxsYWJsZSAmJiAkbWVtYmVyLT5pc09wdGlvbmFsOwogICAgICAgICAgICAg
ICAgIG15ICRudWxsYWJsZVBhcmFtZXRlciA9ICRtZW1iZXItPmlzTnVsbGFibGUgPyAiSXNOdWxs
YWJsZTo6WWVzIiA6ICJJc051bGxhYmxlOjpObyI7Ci0gICAgICAgICAgICAgICAgJHJlc3VsdCAu
PSAiICAgICAgICAka2V5ID0gY29udmVydFdyYXBwZXJUeXBlPCR0eXBlLCBKUyR7dHlwZX0+KHN0
YXRlLCAke2tleX1WYWx1ZSwgJG51bGxhYmxlUGFyYW1ldGVyKTtcbiI7CisgICAgICAgICAgICAg
ICAgJHJlc3VsdCAuPSAiICAgICAgICByZXN1bHQuJGtleSA9IGNvbnZlcnRXcmFwcGVyVHlwZTwk
dHlwZSwgSlMke3R5cGV9PihzdGF0ZSwgJHtrZXl9VmFsdWUsICRudWxsYWJsZVBhcmFtZXRlcik7
XG4iOworICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTtcbiI7CiAgICAgICAgICAgICB9IGVsc2lmICgkY29k
ZUdlbmVyYXRvci0+SXNEaWN0aW9uYXJ5VHlwZSgkdHlwZSkpIHsKICAgICAgICAgICAgICAgICBt
eSAkbmF0aXZlVHlwZSA9IEdldE5hdGl2ZVR5cGUoJGludGVyZmFjZSwgJHR5cGUpOwotICAgICAg
ICAgICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAgJGtleSA9IGNvbnZlcnREaWN0aW9uYXJ5PCR7
bmF0aXZlVHlwZX0+KHN0YXRlLCAke2tleX1WYWx1ZSk7XG4iOworICAgICAgICAgICAgICAgICRy
ZXN1bHQgLj0gIiAgICAgICAgT3B0aW9uYWw8JHtuYXRpdmVUeXBlfT4gJGtleSA9IGNvbnZlcnRE
aWN0aW9uYXJ5PCR7bmF0aXZlVHlwZX0+KHN0YXRlLCAke2tleX1WYWx1ZSkudmFsdWUoKTtcbiI7
CisgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIE51bGxvcHQpO1xuIjsKKyAgICAgICAgICAgICAgICAkcmVzdWx0IC49ICIg
ICAgICAgIHJlc3VsdC4ka2V5ID0gJGtleS52YWx1ZSgpO1xuIjsKICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgbXkgJGNvbnZlcnNpb25SdWxlV2l0aExlYWRpbmdDb21tYSA9
IEdlbmVyYXRlQ29udmVyc2lvblJ1bGVXaXRoTGVhZGluZ0NvbW1hKCRpbnRlcmZhY2UsICRtZW1i
ZXIpOwotICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAgJGtleSA9IGNvbnZlcnQ8
JHtuYXRpdmVUeXBlfT4oc3RhdGUsICR7a2V5fVZhbHVlJHtjb252ZXJzaW9uUnVsZVdpdGhMZWFk
aW5nQ29tbWF9KTtcbiI7CisgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiICAgICAgICByZXN1
bHQuJGtleSA9IGNvbnZlcnQ8JHtuYXRpdmVUeXBlfT4oc3RhdGUsICR7a2V5fVZhbHVlJHtjb252
ZXJzaW9uUnVsZVdpdGhMZWFkaW5nQ29tbWF9KTtcbiI7CisgICAgICAgICAgICAgICAgJHJlc3Vs
dCAuPSAiICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpO1xu
IjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTtcbiI7CiAgICAgICAgICAgICAjIFZh
bHVlIGlzIHVuZGVmaW5lZC4KICAgICAgICAgICAgICMgNS40LiBPdGhlcndpc2UsIGlmIHZhbHVl
IGlzIHVuZGVmaW5lZCBidXQgdGhlIGRpY3Rpb25hcnkgbWVtYmVyIGhhcyBhIGRlZmF1bHQgdmFs
dWUsIHRoZW46CiAgICAgICAgICAgICBpZiAoJG1lbWJlci0+aXNPcHRpb25hbCAmJiBkZWZpbmVk
ICRtZW1iZXItPmRlZmF1bHQpIHsKICAgICAgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgfSBl
bHNlXG4iOwotICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAgJGtleSA9ICIgLiBH
ZW5lcmF0ZURlZmF1bHRWYWx1ZSgkaW50ZXJmYWNlLCAkbWVtYmVyKSAuICI7XG4iOworICAgICAg
ICAgICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAgcmVzdWx0LiRrZXkgPSAiIC4gR2VuZXJhdGVE
ZWZhdWx0VmFsdWUoJGludGVyZmFjZSwgJG1lbWJlcikgLiAiO1xuIjsKICAgICAgICAgICAgIH0g
ZWxzaWYgKCEkbWVtYmVyLT5pc09wdGlvbmFsKSB7CiAgICAgICAgICAgICAgICAgIyA1LjUuIE90
aGVyd2lzZSwgaWYgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZCB0aGUgZGljdGlvbmFyeSBtZW1iZXIg
aXMgYSByZXF1aXJlZCBkaWN0aW9uYXJ5IG1lbWJlciwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci4K
ICAgICAgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgfSBlbHNlIHtcbiI7CkBAIC0xMTM5LDIz
ICsxMTM5LDkgQEAgc3ViIEdlbmVyYXRlRGljdGlvbmFyeUltcGxlbWVudGF0aW9uQ29udGVudAog
ICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICB9XG4iOwogICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0KLSAgICAgICAgIyA2LiBSZXR1cm4gZGljdC4KLSAgICAgICAgZm9yZWFjaCBteSAk
bWVtYmVyIChAeyRkaWN0aW9uYXJ5LT5tZW1iZXJzfSkgewotICAgICAgICAgICAgbXkgJHZhbHVl
OwotICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1dyYXBwZXJUeXBlKCRtZW1iZXIt
PnR5cGUpICYmICEkbWVtYmVyLT5pc051bGxhYmxlKSB7Ci0gICAgICAgICAgICAgICAgJHZhbHVl
ID0gIioiIC4gJG1lbWJlci0+bmFtZTsKLSAgICAgICAgICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJh
dG9yLT5Jc0RpY3Rpb25hcnlUeXBlKCRtZW1iZXItPnR5cGUpKSB7Ci0gICAgICAgICAgICAgICAg
JHZhbHVlID0gJG1lbWJlci0+bmFtZSAuICIudmFsdWUoKSI7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICR2YWx1ZSA9ICJXVEZNb3ZlKCIgLiAkbWVtYmVyLT5uYW1lIC4g
IikiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgJGFyZ3VtZW50cyAuPSAkY29tbWEgLiAk
dmFsdWU7Ci0gICAgICAgICAgICAkY29tbWEgPSAiLCAiOwotICAgICAgICB9CiAgICAgfQogCi0g
ICAgJHJlc3VsdCAuPSAiICAgIHJldHVybiAkY2xhc3NOYW1lIHsgIiAuICRhcmd1bWVudHMgLiAi
IH07XG4iOworICAgICRyZXN1bHQgLj0gIiAgICByZXR1cm4gcmVzdWx0O1xuIjsKICAgICAkcmVz
dWx0IC49ICJ9XG5cbiI7CiAgICAgJHJlc3VsdCAuPSAiI2VuZGlmXG5cbiIgaWYgJGNvbmRpdGlv
bmFsU3RyaW5nOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IGUwYmY4MTY5MjdkNjBmMjQ2ZjhmZmYyODYwM2Zk
ZjIwZjcyNWNiYjUuLjEyYTBhZjU1NjJkNmMwZWYxZWVlMDkyYTRkNTliZGU5ZDc5ZjdhZjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPYmouY3BwCkBAIC00NzUsMjIyICs0NzUsMTkxIEBAIHRlbXBsYXRlPD4gT3B0aW9uYWw8VGVz
dE9iajo6RGljdGlvbmFyeT4gY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4o
CiAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJl
dHVybiBOdWxsb3B0OwogICAgIH0KKyAgICBUZXN0T2JqOjpEaWN0aW9uYXJ5IHJlc3VsdDsKICAg
ICBKU1ZhbHVlIGFueVR5cGVkZWZWYWx1ZVZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1Vu
ZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgImFueVR5cGVkZWZWYWx1ZSIpKTsKLSAgICBKU0M6OkpTVmFsdWUgYW55VHlwZWRlZlZh
bHVlOwogICAgIGlmICghYW55VHlwZWRlZlZhbHVlVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAg
ICAgICBhbnlUeXBlZGVmVmFsdWUgPSBjb252ZXJ0PEpTQzo6SlNWYWx1ZT4oc3RhdGUsIGFueVR5
cGVkZWZWYWx1ZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0LmFueVR5cGVkZWZWYWx1ZSA9IGNvbnZl
cnQ8SlNDOjpKU1ZhbHVlPihzdGF0ZSwgYW55VHlwZWRlZlZhbHVlVmFsdWUpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwogICAgIH0gZWxzZQotICAg
ICAgICBhbnlUeXBlZGVmVmFsdWUgPSBqc1VuZGVmaW5lZCgpOworICAgICAgICByZXN1bHQuYW55
VHlwZWRlZlZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBKU1ZhbHVlIGFueVZhbHVlVmFsdWUg
PSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYW55VmFsdWUiKSk7Ci0gICAgSlNDOjpK
U1ZhbHVlIGFueVZhbHVlOwogICAgIGlmICghYW55VmFsdWVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7
Ci0gICAgICAgIGFueVZhbHVlID0gY29udmVydDxKU0M6OkpTVmFsdWU+KHN0YXRlLCBhbnlWYWx1
ZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0LmFueVZhbHVlID0gY29udmVydDxKU0M6OkpTVmFsdWU+
KHN0YXRlLCBhbnlWYWx1ZVZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBOdWxsb3B0KTsKICAgICB9IGVsc2UKLSAgICAgICAgYW55VmFsdWUgPSBqc1VuZGVm
aW5lZCgpOworICAgICAgICByZXN1bHQuYW55VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIEpT
VmFsdWUgYW55VmFsdWVXaXRoTnVsbERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8g
anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJhbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdCIpKTsKLSAgICBKU0M6OkpTVmFsdWUg
YW55VmFsdWVXaXRoTnVsbERlZmF1bHQ7CiAgICAgaWYgKCFhbnlWYWx1ZVdpdGhOdWxsRGVmYXVs
dFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgYW55VmFsdWVXaXRoTnVsbERlZmF1bHQg
PSBjb252ZXJ0PEpTQzo6SlNWYWx1ZT4oc3RhdGUsIGFueVZhbHVlV2l0aE51bGxEZWZhdWx0VmFs
dWUpOworICAgICAgICByZXN1bHQuYW55VmFsdWVXaXRoTnVsbERlZmF1bHQgPSBjb252ZXJ0PEpT
Qzo6SlNWYWx1ZT4oc3RhdGUsIGFueVZhbHVlV2l0aE51bGxEZWZhdWx0VmFsdWUpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwogICAgIH0gZWxzZQot
ICAgICAgICBhbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdCA9IGpzTnVsbCgpOworICAgICAgICByZXN1
bHQuYW55VmFsdWVXaXRoTnVsbERlZmF1bHQgPSBqc051bGwoKTsKICAgICBKU1ZhbHVlIGJvb2xl
YW5XaXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDog
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xl
YW5XaXRoRGVmYXVsdCIpKTsKLSAgICBib29sIGJvb2xlYW5XaXRoRGVmYXVsdDsKICAgICBpZiAo
IWJvb2xlYW5XaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgYm9vbGVh
bldpdGhEZWZhdWx0ID0gY29udmVydDxib29sPihzdGF0ZSwgYm9vbGVhbldpdGhEZWZhdWx0VmFs
dWUpOworICAgICAgICByZXN1bHQuYm9vbGVhbldpdGhEZWZhdWx0ID0gY29udmVydDxib29sPihz
dGF0ZSwgYm9vbGVhbldpdGhEZWZhdWx0VmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwogICAgIH0gZWxzZQotICAgICAgICBib29sZWFuV2l0
aERlZmF1bHQgPSBmYWxzZTsKKyAgICAgICAgcmVzdWx0LmJvb2xlYW5XaXRoRGVmYXVsdCA9IGZh
bHNlOwogICAgIEpTVmFsdWUgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUgPSBpc051bGxPclVu
ZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAiYm9vbGVhbldpdGhvdXREZWZhdWx0IikpOwotICAgIENvbnZl
cnRlcjxib29sPjo6T3B0aW9uYWxWYWx1ZSBib29sZWFuV2l0aG91dERlZmF1bHQ7CiAgICAgaWYg
KCFib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGJv
b2xlYW5XaXRob3V0RGVmYXVsdCA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIGJvb2xlYW5XaXRob3V0
RGVmYXVsdFZhbHVlKTsKKyAgICAgICAgcmVzdWx0LmJvb2xlYW5XaXRob3V0RGVmYXVsdCA9IGNv
bnZlcnQ8Ym9vbD4oc3RhdGUsIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKICAgICB9CiAgICAgSlNW
YWx1ZSBkaWN0aW9uYXJ5TWVtYmVyVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZp
bmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCAiZGljdGlvbmFyeU1lbWJlciIpKTsKLSAgICBDb252ZXJ0ZXI8VGVzdE9iajo6RGljdGlvbmFy
eVRoYXRTaG91bGRUb2xlcmF0ZU51bGw+OjpPcHRpb25hbFZhbHVlIGRpY3Rpb25hcnlNZW1iZXI7
CiAgICAgaWYgKCFkaWN0aW9uYXJ5TWVtYmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAg
ICBkaWN0aW9uYXJ5TWVtYmVyID0gY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFy
eVRoYXRTaG91bGRUb2xlcmF0ZU51bGw+KHN0YXRlLCBkaWN0aW9uYXJ5TWVtYmVyVmFsdWUpOwor
ICAgICAgICBPcHRpb25hbDxUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVs
bD4gZGljdGlvbmFyeU1lbWJlciA9IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25h
cnlUaGF0U2hvdWxkVG9sZXJhdGVOdWxsPihzdGF0ZSwgZGljdGlvbmFyeU1lbWJlclZhbHVlKS52
YWx1ZSgpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQp
OworICAgICAgICByZXN1bHQuZGljdGlvbmFyeU1lbWJlciA9IGRpY3Rpb25hcnlNZW1iZXIudmFs
dWUoKTsKICAgICB9CiAgICAgSlNWYWx1ZSBlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHRWYWx1
ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0
ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJlbnVtZXJhdGlvblZhbHVlV2l0aERl
ZmF1bHQiKSk7Ci0gICAgVGVzdE9iajo6RW51bVR5cGUgZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZh
dWx0OwogICAgIGlmICghZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmlu
ZWQoKSkgewotICAgICAgICBlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHQgPSBjb252ZXJ0PFRl
c3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0VmFsdWUp
OworICAgICAgICByZXN1bHQuZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0ID0gY29udmVydDxU
ZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIGVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdFZhbHVl
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKICAg
ICB9IGVsc2UKLSAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0ID0gVGVzdE9iajo6
RW51bVR5cGU6OkVudW1WYWx1ZTE7CisgICAgICAgIHJlc3VsdC5lbnVtZXJhdGlvblZhbHVlV2l0
aERlZmF1bHQgPSBUZXN0T2JqOjpFbnVtVHlwZTo6RW51bVZhbHVlMTsKICAgICBKU1ZhbHVlIGVu
dW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVm
aW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAiZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHQi
KSk7Ci0gICAgVGVzdE9iajo6RW51bVR5cGUgZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmlu
Z0RlZmF1bHQ7CiAgICAgaWYgKCFlbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVs
dFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0
eVN0cmluZ0RlZmF1bHQgPSBjb252ZXJ0PFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgZW51bWVy
YXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHRWYWx1ZSk7CisgICAgICAgIHJlc3VsdC5l
bnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdCA9IGNvbnZlcnQ8VGVzdE9iajo6
RW51bVR5cGU+KHN0YXRlLCBlbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdFZh
bHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsK
ICAgICB9IGVsc2UKLSAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1
bHQgPSBUZXN0T2JqOjpFbnVtVHlwZTo6RW1wdHlTdHJpbmc7CisgICAgICAgIHJlc3VsdC5lbnVt
ZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdCA9IFRlc3RPYmo6OkVudW1UeXBlOjpF
bXB0eVN0cmluZzsKICAgICBKU1ZhbHVlIGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdFZh
bHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWVXaXRo
b3V0RGVmYXVsdCIpKTsKLSAgICBDb252ZXJ0ZXI8VGVzdE9iajo6RW51bVR5cGU+OjpPcHRpb25h
bFZhbHVlIGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdDsKICAgICBpZiAoIWVudW1lcmF0
aW9uVmFsdWVXaXRob3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgZW51
bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0ID0gY29udmVydDxUZXN0T2JqOjpFbnVtVHlwZT4o
c3RhdGUsIGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdFZhbHVlKTsKKyAgICAgICAgcmVz
dWx0LmVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCA9IGNvbnZlcnQ8VGVzdE9iajo6RW51
bVR5cGU+KHN0YXRlLCBlbnVtZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHRWYWx1ZSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CiAgICAgfQogICAg
IEpTVmFsdWUgaW50ZWdlclZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgp
IDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImlu
dGVnZXIiKSk7Ci0gICAgQ29udmVydGVyPGludDMyX3Q+OjpPcHRpb25hbFZhbHVlIGludGVnZXI7
CiAgICAgaWYgKCFpbnRlZ2VyVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBpbnRlZ2Vy
ID0gY29udmVydDxpbnQzMl90PihzdGF0ZSwgaW50ZWdlclZhbHVlLCBOb3JtYWxDb252ZXJzaW9u
KTsKKyAgICAgICAgcmVzdWx0LmludGVnZXIgPSBjb252ZXJ0PGludDMyX3Q+KHN0YXRlLCBpbnRl
Z2VyVmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIE51bGxvcHQpOwogICAgIH0KICAgICBKU1ZhbHVlIGludGVnZXJXaXRoRGVm
YXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImludGVnZXJXaXRoRGVm
YXVsdCIpKTsKLSAgICBpbnQzMl90IGludGVnZXJXaXRoRGVmYXVsdDsKICAgICBpZiAoIWludGVn
ZXJXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgaW50ZWdlcldpdGhE
ZWZhdWx0ID0gY29udmVydDxpbnQzMl90PihzdGF0ZSwgaW50ZWdlcldpdGhEZWZhdWx0VmFsdWUs
IE5vcm1hbENvbnZlcnNpb24pOworICAgICAgICByZXN1bHQuaW50ZWdlcldpdGhEZWZhdWx0ID0g
Y29udmVydDxpbnQzMl90PihzdGF0ZSwgaW50ZWdlcldpdGhEZWZhdWx0VmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxv
cHQpOwogICAgIH0gZWxzZQotICAgICAgICBpbnRlZ2VyV2l0aERlZmF1bHQgPSAwOworICAgICAg
ICByZXN1bHQuaW50ZWdlcldpdGhEZWZhdWx0ID0gMDsKICAgICBKU1ZhbHVlIGxhcmdlSW50ZWdl
clZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImxhcmdlSW50ZWdlciIpKTsK
LSAgICBDb252ZXJ0ZXI8aW50NjRfdD46Ok9wdGlvbmFsVmFsdWUgbGFyZ2VJbnRlZ2VyOwogICAg
IGlmICghbGFyZ2VJbnRlZ2VyVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBsYXJnZUlu
dGVnZXIgPSBjb252ZXJ0PGludDY0X3Q+KHN0YXRlLCBsYXJnZUludGVnZXJWYWx1ZSwgTm9ybWFs
Q29udmVyc2lvbik7CisgICAgICAgIHJlc3VsdC5sYXJnZUludGVnZXIgPSBjb252ZXJ0PGludDY0
X3Q+KHN0YXRlLCBsYXJnZUludGVnZXJWYWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CiAgICAgfQogICAgIEpT
VmFsdWUgbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8g
anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJsYXJnZUludGVnZXJXaXRoRGVmYXVsdCIpKTsKLSAgICBpbnQ2NF90IGxhcmdl
SW50ZWdlcldpdGhEZWZhdWx0OwogICAgIGlmICghbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1
ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0ID0gY29u
dmVydDxpbnQ2NF90PihzdGF0ZSwgbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSwgTm9ybWFs
Q29udmVyc2lvbik7CisgICAgICAgIHJlc3VsdC5sYXJnZUludGVnZXJXaXRoRGVmYXVsdCA9IGNv
bnZlcnQ8aW50NjRfdD4oc3RhdGUsIGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUsIE5vcm1h
bENvbnZlcnNpb24pOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51
bGxvcHQpOwogICAgIH0gZWxzZQotICAgICAgICBsYXJnZUludGVnZXJXaXRoRGVmYXVsdCA9IDA7
CisgICAgICAgIHJlc3VsdC5sYXJnZUludGVnZXJXaXRoRGVmYXVsdCA9IDA7CiAgICAgSlNWYWx1
ZSBudWxsYWJsZU5vZGVWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJudWxs
YWJsZU5vZGUiKSk7Ci0gICAgTm9kZSogbnVsbGFibGVOb2RlOwogICAgIGlmICghbnVsbGFibGVO
b2RlVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBudWxsYWJsZU5vZGUgPSBjb252ZXJ0
V3JhcHBlclR5cGU8Tm9kZSwgSlNOb2RlPihzdGF0ZSwgbnVsbGFibGVOb2RlVmFsdWUsIElzTnVs
bGFibGU6Olllcyk7CisgICAgICAgIHJlc3VsdC5udWxsYWJsZU5vZGUgPSBjb252ZXJ0V3JhcHBl
clR5cGU8Tm9kZSwgSlNOb2RlPihzdGF0ZSwgbnVsbGFibGVOb2RlVmFsdWUsIElzTnVsbGFibGU6
Olllcyk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7
CiAgICAgfSBlbHNlCi0gICAgICAgIG51bGxhYmxlTm9kZSA9IG51bGxwdHI7CisgICAgICAgIHJl
c3VsdC5udWxsYWJsZU5vZGUgPSBudWxscHRyOwogICAgIEpTVmFsdWUgcmVzdHJpY3RlZERvdWJs
ZVZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlc3RyaWN0ZWREb3VibGUi
KSk7Ci0gICAgQ29udmVydGVyPGRvdWJsZT46Ok9wdGlvbmFsVmFsdWUgcmVzdHJpY3RlZERvdWJs
ZTsKICAgICBpZiAoIXJlc3RyaWN0ZWREb3VibGVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAg
ICAgIHJlc3RyaWN0ZWREb3VibGUgPSBjb252ZXJ0PGRvdWJsZT4oc3RhdGUsIHJlc3RyaWN0ZWRE
b3VibGVWYWx1ZSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKKyAgICAgICAgcmVzdWx0LnJl
c3RyaWN0ZWREb3VibGUgPSBjb252ZXJ0PGRvdWJsZT4oc3RhdGUsIHJlc3RyaWN0ZWREb3VibGVW
YWx1ZSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKICAgICB9CiAgICAgSlNWYWx1ZSByZXN0cmljdGVk
RG91YmxlV2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQo
KSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJy
ZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQiKSk7Ci0gICAgZG91YmxlIHJlc3RyaWN0ZWREb3Vi
bGVXaXRoRGVmYXVsdDsKICAgICBpZiAoIXJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZhbHVl
LmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0ID0g
Y29udmVydDxkb3VibGU+KHN0YXRlLCByZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHRWYWx1ZSwg
U2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKKyAgICAgICAgcmVzdWx0LnJlc3RyaWN0ZWREb3Vi
bGVXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8ZG91YmxlPihzdGF0ZSwgcmVzdHJpY3RlZERvdWJsZVdp
dGhEZWZhdWx0VmFsdWUsIFNob3VsZEFsbG93Tm9uRmluaXRlOjpObyk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CiAgICAgfSBlbHNlCi0gICAgICAg
IHJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCA9IDA7CisgICAgICAgIHJlc3VsdC5yZXN0cmlj
dGVkRG91YmxlV2l0aERlZmF1bHQgPSAwOwogICAgIEpTVmFsdWUgcmVzdHJpY3RlZEZsb2F0VmFs
dWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZEZsb2F0IikpOwot
ICAgIENvbnZlcnRlcjxmbG9hdD46Ok9wdGlvbmFsVmFsdWUgcmVzdHJpY3RlZEZsb2F0OwogICAg
IGlmICghcmVzdHJpY3RlZEZsb2F0VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICByZXN0
cmljdGVkRmxvYXQgPSBjb252ZXJ0PGZsb2F0PihzdGF0ZSwgcmVzdHJpY3RlZEZsb2F0VmFsdWUs
IFNob3VsZEFsbG93Tm9uRmluaXRlOjpObyk7CisgICAgICAgIHJlc3VsdC5yZXN0cmljdGVkRmxv
YXQgPSBjb252ZXJ0PGZsb2F0PihzdGF0ZSwgcmVzdHJpY3RlZEZsb2F0VmFsdWUsIFNob3VsZEFs
bG93Tm9uRmluaXRlOjpObyk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgTnVsbG9wdCk7CiAgICAgfQogICAgIEpTVmFsdWUgcmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1
bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXN0cmljdGVkRmxvYXRX
aXRoRGVmYXVsdCIpKTsKLSAgICBmbG9hdCByZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdDsKICAg
ICBpZiAoIXJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewot
ICAgICAgICByZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8ZmxvYXQ+KHN0YXRl
LCByZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdFZhbHVlLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6
Tm8pOworICAgICAgICByZXN1bHQucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQgPSBjb252ZXJ0
PGZsb2F0PihzdGF0ZSwgcmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSwgU2hvdWxkQWxs
b3dOb25GaW5pdGU6Ok5vKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBOdWxsb3B0KTsKICAgICB9IGVsc2UKLSAgICAgICAgcmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1
bHQgPSAwOworICAgICAgICByZXN1bHQucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQgPSAwOwog
ICAgIEpTVmFsdWUgc2VxdWVuY2VPZlN0cmluZ3NWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8g
anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJzZXF1ZW5jZU9mU3RyaW5ncyIpKTsKLSAgICBDb252ZXJ0ZXI8VmVjdG9yPFN0
cmluZz4+OjpPcHRpb25hbFZhbHVlIHNlcXVlbmNlT2ZTdHJpbmdzOwogICAgIGlmICghc2VxdWVu
Y2VPZlN0cmluZ3NWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHNlcXVlbmNlT2ZTdHJp
bmdzID0gY29udmVydDxWZWN0b3I8U3RyaW5nPj4oc3RhdGUsIHNlcXVlbmNlT2ZTdHJpbmdzVmFs
dWUpOworICAgICAgICByZXN1bHQuc2VxdWVuY2VPZlN0cmluZ3MgPSBjb252ZXJ0PFZlY3RvcjxT
dHJpbmc+PihzdGF0ZSwgc2VxdWVuY2VPZlN0cmluZ3NWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CiAgICAgfQogICAgIEpTVmFsdWUgc21h
bGxJbnRlZ2VyQ2xhbXBlZFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgp
IDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInNt
YWxsSW50ZWdlckNsYW1wZWQiKSk7Ci0gICAgQ29udmVydGVyPGludDhfdD46Ok9wdGlvbmFsVmFs
dWUgc21hbGxJbnRlZ2VyQ2xhbXBlZDsKICAgICBpZiAoIXNtYWxsSW50ZWdlckNsYW1wZWRWYWx1
ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHNtYWxsSW50ZWdlckNsYW1wZWQgPSBjb252ZXJ0
PGludDhfdD4oc3RhdGUsIHNtYWxsSW50ZWdlckNsYW1wZWRWYWx1ZSwgQ2xhbXApOworICAgICAg
ICByZXN1bHQuc21hbGxJbnRlZ2VyQ2xhbXBlZCA9IGNvbnZlcnQ8aW50OF90PihzdGF0ZSwgc21h
bGxJbnRlZ2VyQ2xhbXBlZFZhbHVlLCBDbGFtcCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgTnVsbG9wdCk7CiAgICAgfQogICAgIEpTVmFsdWUgc21hbGxJbnRlZ2Vy
V2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzbWFsbElu
dGVnZXJXaXRoRGVmYXVsdCIpKTsKLSAgICBDb252ZXJ0ZXI8aW50OF90Pjo6T3B0aW9uYWxWYWx1
ZSBzbWFsbEludGVnZXJXaXRoRGVmYXVsdDsKICAgICBpZiAoIXNtYWxsSW50ZWdlcldpdGhEZWZh
dWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBzbWFsbEludGVnZXJXaXRoRGVmYXVs
dCA9IGNvbnZlcnQ8aW50OF90PihzdGF0ZSwgc21hbGxJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSwg
Tm9ybWFsQ29udmVyc2lvbik7CisgICAgICAgIHJlc3VsdC5zbWFsbEludGVnZXJXaXRoRGVmYXVs
dCA9IGNvbnZlcnQ8aW50OF90PihzdGF0ZSwgc21hbGxJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSwg
Tm9ybWFsQ29udmVyc2lvbik7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgTnVsbG9wdCk7CiAgICAgfQogICAgIEpTVmFsdWUgc21hbGxVbnNpZ25lZEludGVnZXJFbmZv
cmNlZFJhbmdlVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic21hbGxVbnNp
Z25lZEludGVnZXJFbmZvcmNlZFJhbmdlIikpOwotICAgIENvbnZlcnRlcjx1aW50OF90Pjo6T3B0
aW9uYWxWYWx1ZSBzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2U7CiAgICAgaWYgKCFz
bWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2VWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0g
ICAgICAgIHNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZSA9IGNvbnZlcnQ8dWludDhf
dD4oc3RhdGUsIHNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZVZhbHVlLCBFbmZvcmNl
UmFuZ2UpOworICAgICAgICByZXN1bHQuc21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdl
ID0gY29udmVydDx1aW50OF90PihzdGF0ZSwgc21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJh
bmdlVmFsdWUsIEVuZm9yY2VSYW5nZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgTnVsbG9wdCk7CiAgICAgfQogICAgIEpTVmFsdWUgc21hbGxVbnNpZ25lZEludGVn
ZXJXaXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDog
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInNtYWxs
VW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQiKSk7Ci0gICAgdWludDhfdCBzbWFsbFVuc2lnbmVk
SW50ZWdlcldpdGhEZWZhdWx0OwogICAgIGlmICghc21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVm
YXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgc21hbGxVbnNpZ25lZEludGVnZXJX
aXRoRGVmYXVsdCA9IGNvbnZlcnQ8dWludDhfdD4oc3RhdGUsIHNtYWxsVW5zaWduZWRJbnRlZ2Vy
V2l0aERlZmF1bHRWYWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgICAgIHJlc3VsdC5zbWFs
bFVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydDx1aW50OF90PihzdGF0ZSwgc21h
bGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdFZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKICAgICB9IGVs
c2UKLSAgICAgICAgc21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCA9IDA7CisgICAgICAg
IHJlc3VsdC5zbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0ID0gMDsKICAgICBKU1ZhbHVl
IHN0cmluZ1dpdGhEZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVk
KCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAi
c3RyaW5nV2l0aERlZmF1bHQiKSk7Ci0gICAgU3RyaW5nIHN0cmluZ1dpdGhEZWZhdWx0OwogICAg
IGlmICghc3RyaW5nV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHN0
cmluZ1dpdGhEZWZhdWx0ID0gY29udmVydDxTdHJpbmc+KHN0YXRlLCBzdHJpbmdXaXRoRGVmYXVs
dFZhbHVlKTsKKyAgICAgICAgcmVzdWx0LnN0cmluZ1dpdGhEZWZhdWx0ID0gY29udmVydDxTdHJp
bmc+KHN0YXRlLCBzdHJpbmdXaXRoRGVmYXVsdFZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKICAgICB9IGVsc2UKLSAgICAgICAgc3RyaW5n
V2l0aERlZmF1bHQgPSAiZGVmYXVsdFN0cmluZyI7CisgICAgICAgIHJlc3VsdC5zdHJpbmdXaXRo
RGVmYXVsdCA9ICJkZWZhdWx0U3RyaW5nIjsKICAgICBKU1ZhbHVlIHN0cmluZ1dpdGhvdXREZWZh
dWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic3RyaW5nV2l0aG91dERl
ZmF1bHQiKSk7Ci0gICAgQ29udmVydGVyPFN0cmluZz46Ok9wdGlvbmFsVmFsdWUgc3RyaW5nV2l0
aG91dERlZmF1bHQ7CiAgICAgaWYgKCFzdHJpbmdXaXRob3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZp
bmVkKCkpIHsKLSAgICAgICAgc3RyaW5nV2l0aG91dERlZmF1bHQgPSBjb252ZXJ0PFN0cmluZz4o
c3RhdGUsIHN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUpOworICAgICAgICByZXN1bHQuc3RyaW5n
V2l0aG91dERlZmF1bHQgPSBjb252ZXJ0PFN0cmluZz4oc3RhdGUsIHN0cmluZ1dpdGhvdXREZWZh
dWx0VmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxv
cHQpOwogICAgIH0KICAgICBKU1ZhbHVlIHVucmVzdHJpY3RlZERvdWJsZVZhbHVlID0gaXNOdWxs
T3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVucmVzdHJpY3RlZERvdWJsZSIpKTsKLSAgICBDb252
ZXJ0ZXI8ZG91YmxlPjo6T3B0aW9uYWxWYWx1ZSB1bnJlc3RyaWN0ZWREb3VibGU7CiAgICAgaWYg
KCF1bnJlc3RyaWN0ZWREb3VibGVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHVucmVz
dHJpY3RlZERvdWJsZSA9IGNvbnZlcnQ8ZG91YmxlPihzdGF0ZSwgdW5yZXN0cmljdGVkRG91Ymxl
VmFsdWUsIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOworICAgICAgICByZXN1bHQudW5yZXN0
cmljdGVkRG91YmxlID0gY29udmVydDxkb3VibGU+KHN0YXRlLCB1bnJlc3RyaWN0ZWREb3VibGVW
YWx1ZSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CiAgICAgfQogICAgIEpTVmFsdWUgdW5yZXN0cmlj
dGVkRG91YmxlV2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmlu
ZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUs
ICJ1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCIpKTsKLSAgICBkb3VibGUgdW5yZXN0cmlj
dGVkRG91YmxlV2l0aERlZmF1bHQ7CiAgICAgaWYgKCF1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVm
YXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgdW5yZXN0cmljdGVkRG91YmxlV2l0
aERlZmF1bHQgPSBjb252ZXJ0PGRvdWJsZT4oc3RhdGUsIHVucmVzdHJpY3RlZERvdWJsZVdpdGhE
ZWZhdWx0VmFsdWUsIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOworICAgICAgICByZXN1bHQu
dW5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQgPSBjb252ZXJ0PGRvdWJsZT4oc3RhdGUsIHVu
cmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0VmFsdWUsIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZ
ZXMpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwog
ICAgIH0gZWxzZQotICAgICAgICB1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCA9IDA7Cisg
ICAgICAgIHJlc3VsdC51bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCA9IDA7CiAgICAgSlNW
YWx1ZSB1bnJlc3RyaWN0ZWRGbG9hdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVm
aW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgInVucmVzdHJpY3RlZEZsb2F0IikpOwotICAgIENvbnZlcnRlcjxmbG9hdD46Ok9wdGlvbmFs
VmFsdWUgdW5yZXN0cmljdGVkRmxvYXQ7CiAgICAgaWYgKCF1bnJlc3RyaWN0ZWRGbG9hdFZhbHVl
LmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgdW5yZXN0cmljdGVkRmxvYXQgPSBjb252ZXJ0PGZs
b2F0PihzdGF0ZSwgdW5yZXN0cmljdGVkRmxvYXRWYWx1ZSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6
Olllcyk7CisgICAgICAgIHJlc3VsdC51bnJlc3RyaWN0ZWRGbG9hdCA9IGNvbnZlcnQ8ZmxvYXQ+
KHN0YXRlLCB1bnJlc3RyaWN0ZWRGbG9hdFZhbHVlLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVz
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKICAg
ICB9CiAgICAgSlNWYWx1ZSB1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUgPSBpc051
bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCIp
KTsKLSAgICBmbG9hdCB1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0OwogICAgIGlmICghdW5y
ZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAg
dW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8ZmxvYXQ+KHN0YXRlLCB1bnJl
c3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUsIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMp
OworICAgICAgICByZXN1bHQudW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8
ZmxvYXQ+KHN0YXRlLCB1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUsIFNob3VsZEFs
bG93Tm9uRmluaXRlOjpZZXMpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIE51bGxvcHQpOwogICAgIH0gZWxzZQotICAgICAgICB1bnJlc3RyaWN0ZWRGbG9hdFdpdGhE
ZWZhdWx0ID0gMDsKKyAgICAgICAgcmVzdWx0LnVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQg
PSAwOwogICAgIEpTVmFsdWUgdW5zaWduZWRJbnRlZ2VyVmFsdWUgPSBpc051bGxPclVuZGVmaW5l
ZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnN0YXRlLCAidW5zaWduZWRJbnRlZ2VyIikpOwotICAgIENvbnZlcnRlcjx1aW50MzJf
dD46Ok9wdGlvbmFsVmFsdWUgdW5zaWduZWRJbnRlZ2VyOwogICAgIGlmICghdW5zaWduZWRJbnRl
Z2VyVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICB1bnNpZ25lZEludGVnZXIgPSBjb252
ZXJ0PHVpbnQzMl90PihzdGF0ZSwgdW5zaWduZWRJbnRlZ2VyVmFsdWUsIE5vcm1hbENvbnZlcnNp
b24pOworICAgICAgICByZXN1bHQudW5zaWduZWRJbnRlZ2VyID0gY29udmVydDx1aW50MzJfdD4o
c3RhdGUsIHVuc2lnbmVkSW50ZWdlclZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKICAgICB9CiAgICAgSlNW
YWx1ZSB1bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQg
PyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgInVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0IikpOwotICAgIHVpbnQzMl90
IHVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0OwogICAgIGlmICghdW5zaWduZWRJbnRlZ2VyV2l0
aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHVuc2lnbmVkSW50ZWdlcldp
dGhEZWZhdWx0ID0gY29udmVydDx1aW50MzJfdD4oc3RhdGUsIHVuc2lnbmVkSW50ZWdlcldpdGhE
ZWZhdWx0VmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgICAgICByZXN1bHQudW5zaWduZWRJ
bnRlZ2VyV2l0aERlZmF1bHQgPSBjb252ZXJ0PHVpbnQzMl90PihzdGF0ZSwgdW5zaWduZWRJbnRl
Z2VyV2l0aERlZmF1bHRWYWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CiAgICAgfSBlbHNlCi0gICAgICAgIHVu
c2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0ID0gMDsKKyAgICAgICAgcmVzdWx0LnVuc2lnbmVkSW50
ZWdlcldpdGhEZWZhdWx0ID0gMDsKICAgICBKU1ZhbHVlIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyVmFs
dWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5zaWduZWRMYXJnZUludGVnZXIi
KSk7Ci0gICAgQ29udmVydGVyPHVpbnQ2NF90Pjo6T3B0aW9uYWxWYWx1ZSB1bnNpZ25lZExhcmdl
SW50ZWdlcjsKICAgICBpZiAoIXVuc2lnbmVkTGFyZ2VJbnRlZ2VyVmFsdWUuaXNVbmRlZmluZWQo
KSkgewotICAgICAgICB1bnNpZ25lZExhcmdlSW50ZWdlciA9IGNvbnZlcnQ8dWludDY0X3Q+KHN0
YXRlLCB1bnNpZ25lZExhcmdlSW50ZWdlclZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICAg
ICAgcmVzdWx0LnVuc2lnbmVkTGFyZ2VJbnRlZ2VyID0gY29udmVydDx1aW50NjRfdD4oc3RhdGUs
IHVuc2lnbmVkTGFyZ2VJbnRlZ2VyVmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwogICAgIH0KICAgICBKU1Zh
bHVlIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZp
bmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJ1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0IikpOwotICAg
IHVpbnQ2NF90IHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQ7CiAgICAgaWYgKCF1bnNp
Z25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAg
ICB1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydDx1aW50NjRfdD4oc3Rh
dGUsIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSwgTm9ybWFsQ29udmVyc2lv
bik7CisgICAgICAgIHJlc3VsdC51bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0ID0gY29u
dmVydDx1aW50NjRfdD4oc3RhdGUsIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1
ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgTnVsbG9wdCk7CiAgICAgfSBlbHNlCi0gICAgICAgIHVuc2lnbmVkTGFyZ2VJbnRlZ2Vy
V2l0aERlZmF1bHQgPSAwOwotICAgIHJldHVybiBUZXN0T2JqOjpEaWN0aW9uYXJ5IHsgV1RGTW92
ZShlbnVtZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHQpLCBXVEZNb3ZlKGVudW1lcmF0aW9uVmFs
dWVXaXRoRGVmYXVsdCksIFdURk1vdmUoZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0Rl
ZmF1bHQpLCBXVEZNb3ZlKHN0cmluZ1dpdGhEZWZhdWx0KSwgV1RGTW92ZShzdHJpbmdXaXRob3V0
RGVmYXVsdCksIFdURk1vdmUoYm9vbGVhbldpdGhEZWZhdWx0KSwgV1RGTW92ZShib29sZWFuV2l0
aG91dERlZmF1bHQpLCBXVEZNb3ZlKHNlcXVlbmNlT2ZTdHJpbmdzKSwgV1RGTW92ZShyZXN0cmlj
dGVkRG91YmxlKSwgV1RGTW92ZSh1bnJlc3RyaWN0ZWREb3VibGUpLCBXVEZNb3ZlKHJlc3RyaWN0
ZWREb3VibGVXaXRoRGVmYXVsdCksIFdURk1vdmUodW5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1
bHQpLCBXVEZNb3ZlKHJlc3RyaWN0ZWRGbG9hdCksIFdURk1vdmUodW5yZXN0cmljdGVkRmxvYXQp
LCBXVEZNb3ZlKHJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0KSwgV1RGTW92ZSh1bnJlc3RyaWN0
ZWRGbG9hdFdpdGhEZWZhdWx0KSwgV1RGTW92ZShzbWFsbEludGVnZXJDbGFtcGVkKSwgV1RGTW92
ZShzbWFsbEludGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUoc21hbGxVbnNpZ25lZEludGVnZXJF
bmZvcmNlZFJhbmdlKSwgV1RGTW92ZShzbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0KSwg
V1RGTW92ZShpbnRlZ2VyKSwgV1RGTW92ZShpbnRlZ2VyV2l0aERlZmF1bHQpLCBXVEZNb3ZlKHVu
c2lnbmVkSW50ZWdlciksIFdURk1vdmUodW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQpLCBXVEZN
b3ZlKGxhcmdlSW50ZWdlciksIFdURk1vdmUobGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQpLCBXVEZN
b3ZlKHVuc2lnbmVkTGFyZ2VJbnRlZ2VyKSwgV1RGTW92ZSh1bnNpZ25lZExhcmdlSW50ZWdlcldp
dGhEZWZhdWx0KSwgV1RGTW92ZShudWxsYWJsZU5vZGUpLCBXVEZNb3ZlKGFueVZhbHVlKSwgV1RG
TW92ZShhbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdCksIFdURk1vdmUoYW55VHlwZWRlZlZhbHVlKSwg
ZGljdGlvbmFyeU1lbWJlci52YWx1ZSgpIH07CisgICAgICAgIHJlc3VsdC51bnNpZ25lZExhcmdl
SW50ZWdlcldpdGhEZWZhdWx0ID0gMDsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB0ZW1wbGF0
ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkTm90VG9sZXJhdGVOdWxs
PiBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZE5vdFRvbGVy
YXRlTnVsbD4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKQEAgLTcwNyw0MCArNjc2
LDM4IEBAIHRlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRO
b3RUb2xlcmF0ZU51bGw+IGNvbnZlcnREaWN0aW9uCiAgICAgICAgIHRocm93VHlwZUVycm9yKCZz
dGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIH0KKyAgICBU
ZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZE5vdFRvbGVyYXRlTnVsbCByZXN1bHQ7CiAgICAg
SlNWYWx1ZSBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8g
anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJib29sZWFuV2l0aG91dERlZmF1bHQiKSk7Ci0gICAgQ29udmVydGVyPGJvb2w+
OjpPcHRpb25hbFZhbHVlIGJvb2xlYW5XaXRob3V0RGVmYXVsdDsKICAgICBpZiAoIWJvb2xlYW5X
aXRob3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgYm9vbGVhbldpdGhv
dXREZWZhdWx0ID0gY29udmVydDxib29sPihzdGF0ZSwgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFs
dWUpOworICAgICAgICByZXN1bHQuYm9vbGVhbldpdGhvdXREZWZhdWx0ID0gY29udmVydDxib29s
PihzdGF0ZSwgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwogICAgIH0KICAgICBKU1ZhbHVlIG5vbk51
bGxhYmxlTm9kZVZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIm5vbk51bGxh
YmxlTm9kZSIpKTsKLSAgICBOb2RlKiBub25OdWxsYWJsZU5vZGU7CiAgICAgaWYgKCFub25OdWxs
YWJsZU5vZGVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIG5vbk51bGxhYmxlTm9kZSA9
IGNvbnZlcnRXcmFwcGVyVHlwZTxOb2RlLCBKU05vZGU+KHN0YXRlLCBub25OdWxsYWJsZU5vZGVW
YWx1ZSwgSXNOdWxsYWJsZTo6Tm8pOworICAgICAgICByZXN1bHQubm9uTnVsbGFibGVOb2RlID0g
Y29udmVydFdyYXBwZXJUeXBlPE5vZGUsIEpTTm9kZT4oc3RhdGUsIG5vbk51bGxhYmxlTm9kZVZh
bHVlLCBJc051bGxhYmxlOjpObyk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgTnVsbG9wdCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0
YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgfQogICAgIEpT
VmFsdWUgcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/
IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLCAicmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyIikpOwotICAgIFRlc3RPYmo6OkRp
Y3Rpb25hcnkgcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyOwogICAgIGlmICghcmVxdWlyZWREaWN0
aW9uYXJ5TWVtYmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICByZXF1aXJlZERpY3Rp
b25hcnlNZW1iZXIgPSBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5PihzdGF0
ZSwgcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyVmFsdWUpOworICAgICAgICBPcHRpb25hbDxUZXN0
T2JqOjpEaWN0aW9uYXJ5PiByZXF1aXJlZERpY3Rpb25hcnlNZW1iZXIgPSBjb252ZXJ0RGljdGlv
bmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5PihzdGF0ZSwgcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVy
VmFsdWUpLnZhbHVlKCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
TnVsbG9wdCk7CisgICAgICAgIHJlc3VsdC5yZXF1aXJlZERpY3Rpb25hcnlNZW1iZXIgPSByZXF1
aXJlZERpY3Rpb25hcnlNZW1iZXIudmFsdWUoKTsKICAgICB9IGVsc2UgewogICAgICAgICB0aHJv
d1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gTnVsbG9wdDsK
ICAgICB9CiAgICAgSlNWYWx1ZSByZXF1aXJlZEVudW1lcmF0aW9uVmFsdWVWYWx1ZSA9IGlzTnVs
bE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUiKSk7Ci0g
ICAgVGVzdE9iajo6RW51bVR5cGUgcmVxdWlyZWRFbnVtZXJhdGlvblZhbHVlOwogICAgIGlmICgh
cmVxdWlyZWRFbnVtZXJhdGlvblZhbHVlVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBy
ZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUgPSBjb252ZXJ0PFRlc3RPYmo6OkVudW1UeXBlPihzdGF0
ZSwgcmVxdWlyZWRFbnVtZXJhdGlvblZhbHVlVmFsdWUpOworICAgICAgICByZXN1bHQucmVxdWly
ZWRFbnVtZXJhdGlvblZhbHVlID0gY29udmVydDxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIHJl
cXVpcmVkRW51bWVyYXRpb25WYWx1ZVZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKICAgICB9IGVsc2UgewogICAgICAgICB0aHJvd1R5cGVF
cnJvcigmc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICB9
Ci0gICAgcmV0dXJuIFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkTm90VG9sZXJhdGVOdWxs
IHsgV1RGTW92ZShyZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUpLCBXVEZNb3ZlKGJvb2xlYW5XaXRo
b3V0RGVmYXVsdCksICpub25OdWxsYWJsZU5vZGUsIHJlcXVpcmVkRGljdGlvbmFyeU1lbWJlci52
YWx1ZSgpIH07CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdGVtcGxhdGU8PiBPcHRpb25hbDxU
ZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVsbD4gY29udmVydERpY3Rpb25h
cnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRUb2xlcmF0ZU51bGw+KEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCkBAIC03NTcsMTkgKzcyNCwxOCBAQCB0ZW1wbGF0ZTw+IE9w
dGlvbmFsPFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkVG9sZXJhdGVOdWxsPiBjb252ZXJ0
RGljdGlvbmFyeQogICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOwog
ICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICB9CisgICAgVGVzdE9iajo6RGljdGlvbmFyeVRo
YXRTaG91bGRUb2xlcmF0ZU51bGwgcmVzdWx0OwogICAgIEpTVmFsdWUgYm9vbGVhbldpdGhvdXRE
ZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYm9vbGVhbldpdGhv
dXREZWZhdWx0IikpOwotICAgIENvbnZlcnRlcjxib29sPjo6T3B0aW9uYWxWYWx1ZSBib29sZWFu
V2l0aG91dERlZmF1bHQ7CiAgICAgaWYgKCFib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7Ci0gICAgICAgIGJvb2xlYW5XaXRob3V0RGVmYXVsdCA9IGNvbnZlcnQ8Ym9v
bD4oc3RhdGUsIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlKTsKKyAgICAgICAgcmVzdWx0LmJv
b2xlYW5XaXRob3V0RGVmYXVsdCA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIGJvb2xlYW5XaXRob3V0
RGVmYXVsdFZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBO
dWxsb3B0KTsKICAgICB9CiAgICAgSlNWYWx1ZSBlbnVtZXJhdGlvblZhbHVlVmFsdWUgPSBpc051
bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZW51bWVyYXRpb25WYWx1ZSIpKTsKLSAgICBDb252
ZXJ0ZXI8VGVzdE9iajo6RW51bVR5cGU+OjpPcHRpb25hbFZhbHVlIGVudW1lcmF0aW9uVmFsdWU7
CiAgICAgaWYgKCFlbnVtZXJhdGlvblZhbHVlVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAg
ICBlbnVtZXJhdGlvblZhbHVlID0gY29udmVydDxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIGVu
dW1lcmF0aW9uVmFsdWVWYWx1ZSk7CisgICAgICAgIHJlc3VsdC5lbnVtZXJhdGlvblZhbHVlID0g
Y29udmVydDxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIGVudW1lcmF0aW9uVmFsdWVWYWx1ZSk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CiAgICAg
fQotICAgIHJldHVybiBUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVsbCB7
IFdURk1vdmUoZW51bWVyYXRpb25WYWx1ZSksIFdURk1vdmUoYm9vbGVhbldpdGhvdXREZWZhdWx0
KSB9OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHRlbXBsYXRlPD4gT3B0aW9uYWw8QWx0ZXJu
YXRlRGljdGlvbmFyeU5hbWU+IGNvbnZlcnREaWN0aW9uYXJ5PEFsdGVybmF0ZURpY3Rpb25hcnlO
YW1lPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQpAQCAtNzg2LDE5ICs3NTIsMTgg
QEAgdGVtcGxhdGU8PiBPcHRpb25hbDxBbHRlcm5hdGVEaWN0aW9uYXJ5TmFtZT4gY29udmVydERp
Y3Rpb25hcnk8QWx0ZXJuYXRlRGljdGlvbmEKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgfQorICAgIEFsdGVy
bmF0ZURpY3Rpb25hcnlOYW1lIHJlc3VsdDsKICAgICBKU1ZhbHVlIGJvb2xlYW5XaXRob3V0RGVm
YXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0
RGVmYXVsdCIpKTsKLSAgICBDb252ZXJ0ZXI8Ym9vbD46Ok9wdGlvbmFsVmFsdWUgYm9vbGVhbldp
dGhvdXREZWZhdWx0OwogICAgIGlmICghYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUuaXNVbmRl
ZmluZWQoKSkgewotICAgICAgICBib29sZWFuV2l0aG91dERlZmF1bHQgPSBjb252ZXJ0PGJvb2w+
KHN0YXRlLCBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSk7CisgICAgICAgIHJlc3VsdC5ib29s
ZWFuV2l0aG91dERlZmF1bHQgPSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBib29sZWFuV2l0aG91dERl
ZmF1bHRWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVs
bG9wdCk7CiAgICAgfQogICAgIEpTVmFsdWUgZW51bWVyYXRpb25WYWx1ZVZhbHVlID0gaXNOdWxs
T3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWUiKSk7Ci0gICAgQ29udmVy
dGVyPFRlc3RPYmo6OkVudW1UeXBlPjo6T3B0aW9uYWxWYWx1ZSBlbnVtZXJhdGlvblZhbHVlOwog
ICAgIGlmICghZW51bWVyYXRpb25WYWx1ZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAg
ZW51bWVyYXRpb25WYWx1ZSA9IGNvbnZlcnQ8VGVzdE9iajo6RW51bVR5cGU+KHN0YXRlLCBlbnVt
ZXJhdGlvblZhbHVlVmFsdWUpOworICAgICAgICByZXN1bHQuZW51bWVyYXRpb25WYWx1ZSA9IGNv
bnZlcnQ8VGVzdE9iajo6RW51bVR5cGU+KHN0YXRlLCBlbnVtZXJhdGlvblZhbHVlVmFsdWUpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwogICAgIH0K
LSAgICByZXR1cm4gQWx0ZXJuYXRlRGljdGlvbmFyeU5hbWUgeyBXVEZNb3ZlKGVudW1lcmF0aW9u
VmFsdWUpLCBXVEZNb3ZlKGJvb2xlYW5XaXRob3V0RGVmYXVsdCkgfTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiB0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OlBhcmVudERpY3Rpb25hcnk+
IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OlBhcmVudERpY3Rpb25hcnk+KEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCkBAIC04MTUsMTkgKzc4MCwxOCBAQCB0ZW1wbGF0ZTw+IE9w
dGlvbmFsPFRlc3RPYmo6OlBhcmVudERpY3Rpb25hcnk+IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RP
Ymo6OlBhcmVudAogICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOwog
ICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICB9CisgICAgVGVzdE9iajo6UGFyZW50RGljdGlv
bmFyeSByZXN1bHQ7CiAgICAgSlNWYWx1ZSBwYXJlbnRNZW1iZXIxVmFsdWUgPSBpc051bGxPclVu
ZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAicGFyZW50TWVtYmVyMSIpKTsKLSAgICBDb252ZXJ0ZXI8Ym9v
bD46Ok9wdGlvbmFsVmFsdWUgcGFyZW50TWVtYmVyMTsKICAgICBpZiAoIXBhcmVudE1lbWJlcjFW
YWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHBhcmVudE1lbWJlcjEgPSBjb252ZXJ0PGJv
b2w+KHN0YXRlLCBwYXJlbnRNZW1iZXIxVmFsdWUpOworICAgICAgICByZXN1bHQucGFyZW50TWVt
YmVyMSA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIHBhcmVudE1lbWJlcjFWYWx1ZSk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CiAgICAgfQogICAgIEpT
VmFsdWUgcGFyZW50TWVtYmVyMlZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5l
ZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
InBhcmVudE1lbWJlcjIiKSk7Ci0gICAgQ29udmVydGVyPGJvb2w+OjpPcHRpb25hbFZhbHVlIHBh
cmVudE1lbWJlcjI7CiAgICAgaWYgKCFwYXJlbnRNZW1iZXIyVmFsdWUuaXNVbmRlZmluZWQoKSkg
ewotICAgICAgICBwYXJlbnRNZW1iZXIyID0gY29udmVydDxib29sPihzdGF0ZSwgcGFyZW50TWVt
YmVyMlZhbHVlKTsKKyAgICAgICAgcmVzdWx0LnBhcmVudE1lbWJlcjIgPSBjb252ZXJ0PGJvb2w+
KHN0YXRlLCBwYXJlbnRNZW1iZXIyVmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIE51bGxvcHQpOwogICAgIH0KLSAgICByZXR1cm4gVGVzdE9iajo6UGFyZW50
RGljdGlvbmFyeSB7IFdURk1vdmUocGFyZW50TWVtYmVyMiksIFdURk1vdmUocGFyZW50TWVtYmVy
MSkgfTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RP
Ymo6OkNoaWxkRGljdGlvbmFyeT4gY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6Q2hpbGREaWN0
aW9uYXJ5PihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQpAQCAtODQ0LDMxICs4MDgs
MjggQEAgdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpDaGlsZERpY3Rpb25hcnk+IGNvbnZl
cnREaWN0aW9uYXJ5PFRlc3RPYmo6OkNoaWxkRGkKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0
YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgfQorICAgIFRl
c3RPYmo6OkNoaWxkRGljdGlvbmFyeSByZXN1bHQ7CiAgICAgSlNWYWx1ZSBwYXJlbnRNZW1iZXIx
VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFyZW50TWVtYmVyMSIpKTsK
LSAgICBDb252ZXJ0ZXI8Ym9vbD46Ok9wdGlvbmFsVmFsdWUgcGFyZW50TWVtYmVyMTsKICAgICBp
ZiAoIXBhcmVudE1lbWJlcjFWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHBhcmVudE1l
bWJlcjEgPSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBwYXJlbnRNZW1iZXIxVmFsdWUpOworICAgICAg
ICByZXN1bHQucGFyZW50TWVtYmVyMSA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIHBhcmVudE1lbWJl
cjFWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9w
dCk7CiAgICAgfQogICAgIEpTVmFsdWUgcGFyZW50TWVtYmVyMlZhbHVlID0gaXNOdWxsT3JVbmRl
ZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgInBhcmVudE1lbWJlcjIiKSk7Ci0gICAgQ29udmVydGVyPGJvb2w+
OjpPcHRpb25hbFZhbHVlIHBhcmVudE1lbWJlcjI7CiAgICAgaWYgKCFwYXJlbnRNZW1iZXIyVmFs
dWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBwYXJlbnRNZW1iZXIyID0gY29udmVydDxib29s
PihzdGF0ZSwgcGFyZW50TWVtYmVyMlZhbHVlKTsKKyAgICAgICAgcmVzdWx0LnBhcmVudE1lbWJl
cjIgPSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBwYXJlbnRNZW1iZXIyVmFsdWUpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwogICAgIH0KICAgICBKU1Zh
bHVlIGNoaWxkTWVtYmVyMVZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgp
IDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImNo
aWxkTWVtYmVyMSIpKTsKLSAgICBDb252ZXJ0ZXI8Ym9vbD46Ok9wdGlvbmFsVmFsdWUgY2hpbGRN
ZW1iZXIxOwogICAgIGlmICghY2hpbGRNZW1iZXIxVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAg
ICAgICBjaGlsZE1lbWJlcjEgPSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBjaGlsZE1lbWJlcjFWYWx1
ZSk7CisgICAgICAgIHJlc3VsdC5jaGlsZE1lbWJlcjEgPSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBj
aGlsZE1lbWJlcjFWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgTnVsbG9wdCk7CiAgICAgfQogICAgIEpTVmFsdWUgY2hpbGRNZW1iZXIyVmFsdWUgPSBpc051
bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiY2hpbGRNZW1iZXIyIikpOwotICAgIENvbnZlcnRl
cjxib29sPjo6T3B0aW9uYWxWYWx1ZSBjaGlsZE1lbWJlcjI7CiAgICAgaWYgKCFjaGlsZE1lbWJl
cjJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGNoaWxkTWVtYmVyMiA9IGNvbnZlcnQ8
Ym9vbD4oc3RhdGUsIGNoaWxkTWVtYmVyMlZhbHVlKTsKKyAgICAgICAgcmVzdWx0LmNoaWxkTWVt
YmVyMiA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIGNoaWxkTWVtYmVyMlZhbHVlKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKICAgICB9Ci0gICAgcmV0
dXJuIFRlc3RPYmo6OkNoaWxkRGljdGlvbmFyeSB7IFdURk1vdmUocGFyZW50TWVtYmVyMiksIFdU
Rk1vdmUocGFyZW50TWVtYmVyMSksIFdURk1vdmUoY2hpbGRNZW1iZXIyKSwgV1RGTW92ZShjaGls
ZE1lbWJlcjEpIH07CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLy8gRnVuY3Rpb25zCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3Rh
bmRhbG9uZURpY3Rpb25hcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5LmNwcAppbmRleCAwMDViM2I1MmM1YzBi
ZDI5OTMzZjE4ZmJkYTY5MWNhMmM4ZDM1ZDUzLi40ODkyM2VlZDBlNWM1MzEzNjczZTZmYTU3ZDk3
NjcxOGVhZjlmNDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U3RhbmRhbG9uZURpY3Rpb25hcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdGFuZGFsb25lRGljdGlvbmFyeS5j
cHAKQEAgLTQwLDE5ICs0MCwxOCBAQCB0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RTdGFuZGFsb25l
RGljdGlvbmFyeT4gY29udmVydERpY3Rpb25hcnk8VGVzdFN0YW5kYWxvbmVEaQogICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gTnVsbG9w
dDsKICAgICB9CisgICAgVGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5IHJlc3VsdDsKICAgICBKU1Zh
bHVlIGJvb2xNZW1iZXJWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJib29s
TWVtYmVyIikpOwotICAgIENvbnZlcnRlcjxib29sPjo6T3B0aW9uYWxWYWx1ZSBib29sTWVtYmVy
OwogICAgIGlmICghYm9vbE1lbWJlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgYm9v
bE1lbWJlciA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIGJvb2xNZW1iZXJWYWx1ZSk7CisgICAgICAg
IHJlc3VsdC5ib29sTWVtYmVyID0gY29udmVydDxib29sPihzdGF0ZSwgYm9vbE1lbWJlclZhbHVl
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKICAg
ICB9CiAgICAgSlNWYWx1ZSBzdHJpbmdNZW1iZXJWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8g
anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJzdHJpbmdNZW1iZXIiKSk7Ci0gICAgQ29udmVydGVyPFN0cmluZz46Ok9wdGlv
bmFsVmFsdWUgc3RyaW5nTWVtYmVyOwogICAgIGlmICghc3RyaW5nTWVtYmVyVmFsdWUuaXNVbmRl
ZmluZWQoKSkgewotICAgICAgICBzdHJpbmdNZW1iZXIgPSBjb252ZXJ0PFN0cmluZz4oc3RhdGUs
IHN0cmluZ01lbWJlclZhbHVlKTsKKyAgICAgICAgcmVzdWx0LnN0cmluZ01lbWJlciA9IGNvbnZl
cnQ8U3RyaW5nPihzdGF0ZSwgc3RyaW5nTWVtYmVyVmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwogICAgIH0KLSAgICByZXR1cm4gVGVzdFN0
YW5kYWxvbmVEaWN0aW9uYXJ5IHsgV1RGTW92ZShib29sTWVtYmVyKSwgV1RGTW92ZShzdHJpbmdN
ZW1iZXIpIH07CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZEV2ZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkRXZlbnQuaAppbmRleCAyYzljOGVhMmI1MTMwMmM1YjY1
Yzk0ZDg1ZTQ2NTllY2M5MTcxMDdmLi5kNzJmNjI5MWY5NjEyNmM3MDhiODdjNzIyODNiZmU3OTIz
ZGE0ZTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkRXZlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkRXZlbnQuaApAQCAtMzUsMTIgKzM1LDYg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgfkNsaXBib2FyZEV2ZW50KCk7CiAKICAgICBzdHJ1Y3Qg
SW5pdCA6IHB1YmxpYyBFdmVudEluaXQgewotICAgICAgICBJbml0KGJvb2wgYnViYmxlcywgYm9v
bCBjYW5jZWxhYmxlLCBib29sIGNvbXBvc2VkLCBSZWZQdHI8RGF0YVRyYW5zZmVyPiYmIGNsaXBi
b2FyZERhdGEpCi0gICAgICAgICAgICA6IEV2ZW50SW5pdChidWJibGVzLCBjYW5jZWxhYmxlLCBj
b21wb3NlZCkKLSAgICAgICAgICAgICwgY2xpcGJvYXJkRGF0YShXVEZNb3ZlKGNsaXBib2FyZERh
dGEpKQotICAgICAgICB7Ci0gICAgICAgIH0KLQogICAgICAgICBSZWZQdHI8RGF0YVRyYW5zZmVy
PiBjbGlwYm9hcmREYXRhOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DdXN0b21FdmVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUV2ZW50LmgKaW5kZXgg
YWIxYzEzM2MyOTY4Nzk1ZmQxZjc5YWNjZDBmNjVjM2M3ZmM4YTE0NS4uODQ1ZGQxYmY0ZWFhMTUx
ZWU3NjUwNzExOGJmMzQ2MzQ5NGIwNjljZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0N1c3RvbUV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUV2ZW50LmgKQEAg
LTQyLDExICs0Miw2IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdHJ1Y3QgSW5pdCA6IHB1Ymxp
YyBFdmVudEluaXQgewotICAgICAgICBJbml0KGJvb2wgYnViYmxlcywgYm9vbCBjYW5jZWxhYmxl
LCBib29sIGNvbXBvc2VkLCBKU0M6OkpTVmFsdWUgZGV0YWlsKQotICAgICAgICAgICAgOiBFdmVu
dEluaXQoYnViYmxlcywgY2FuY2VsYWJsZSwgY29tcG9zZWQpCi0gICAgICAgICAgICAsIGRldGFp
bChkZXRhaWwpCi0gICAgICAgIHsgfQotCiAgICAgICAgIEpTQzo6SlNWYWx1ZSBkZXRhaWw7CiAg
ICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50SW5pdC5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50SW5pdC5oCmluZGV4IDUxZDYzMjg2NjYzZTA1MTcxYmIyMDE1
YzA2NzliZTUwMjJhNjIyM2QuLmE1NDhmNGU4NTRkNDRmOTk0NmI5OTZkNDc1MTljMzFhZTU1NWVm
NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudEluaXQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnRJbml0LmgKQEAgLTI4LDEzICsyOCw2IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHN0cnVjdCBFdmVudEluaXQgewotICAgIEV2ZW50SW5pdCgpID0gZGVmYXVs
dDsKLSAgICBFdmVudEluaXQoYm9vbCBidWJibGVzLCBib29sIGNhbmNlbGFibGUsIGJvb2wgY29t
cG9zZWQpCi0gICAgICAgIDogYnViYmxlcyhidWJibGVzKQotICAgICAgICAsIGNhbmNlbGFibGUo
Y2FuY2VsYWJsZSkKLSAgICAgICAgLCBjb21wb3NlZChjb21wb3NlZCkKLSAgICB7IH0KLQogICAg
IGJvb2wgYnViYmxlcyB7IGZhbHNlIH07CiAgICAgYm9vbCBjYW5jZWxhYmxlIHsgZmFsc2UgfTsK
ICAgICBib29sIGNvbXBvc2VkIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudE1vZGlmaWVySW5pdC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TW9kaWZp
ZXJJbml0LmgKaW5kZXggZTNlZTBlMDU5ZWI3YjJiMzIwODk3ZDdkYzUzMDAwOGY5OGYyNDFiNS4u
MTE1ODExNzExNWYxNzNjZjI2Mjk5NzUxM2Q4YTA2Mjk1ODU2YTEzYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50TW9kaWZpZXJJbml0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50TW9kaWZpZXJJbml0LmgKQEAgLTMwLDE5ICszMCw2IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHN0cnVjdCBFdmVudE1vZGlmaWVySW5pdCA6IHB1YmxpYyBVSUV2ZW50SW5pdCB7
Ci0gICAgRXZlbnRNb2RpZmllckluaXQoKSA9IGRlZmF1bHQ7Ci0KLSAgICBFdmVudE1vZGlmaWVy
SW5pdChib29sIGJ1YmJsZXMsIGJvb2wgY2FuY2VsYWJsZSwgYm9vbCBjb21wb3NlZCwgUmVmUHRy
PERPTVdpbmRvdz4mJiB2aWV3LCBpbnQgZGV0YWlsLAotICAgICAgICBib29sIGN0cmxLZXksIGJv
b2wgc2hpZnRLZXksIGJvb2wgYWx0S2V5LCBib29sIG1ldGFLZXksIGJvb2wgbW9kaWZpZXJBbHRH
cmFwaCwgYm9vbCBtb2RpZmllckNhcHNMb2NrKQotICAgICAgICAgICAgOiBVSUV2ZW50SW5pdChi
dWJibGVzLCBjYW5jZWxhYmxlLCBjb21wb3NlZCwgV1RGTW92ZSh2aWV3KSwgZGV0YWlsKQotICAg
ICAgICAgICAgLCBjdHJsS2V5KGN0cmxLZXkpCi0gICAgICAgICAgICAsIHNoaWZ0S2V5KHNoaWZ0
S2V5KQotICAgICAgICAgICAgLCBhbHRLZXkoYWx0S2V5KQotICAgICAgICAgICAgLCBtZXRhS2V5
KG1ldGFLZXkpCi0gICAgICAgICAgICAsIG1vZGlmaWVyQWx0R3JhcGgobW9kaWZpZXJBbHRHcmFw
aCkKLSAgICAgICAgICAgICwgbW9kaWZpZXJDYXBzTG9jayhtb2RpZmllckNhcHNMb2NrKQotICAg
ICAgICB7IH0KLQogICAgIGJvb2wgY3RybEtleSB7IGZhbHNlIH07CiAgICAgYm9vbCBzaGlmdEtl
eSB7IGZhbHNlIH07CiAgICAgYm9vbCBhbHRLZXkgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0tl
eWJvYXJkRXZlbnQuY3BwCmluZGV4IDg0NTIwMzJlMTVjYWM2NTk2OTRlMTY0ODVhNTEwZmUyNjYz
MzE2MDYuLjJjYjg0NDNkNDhiMjFlZTBkMGFmYmE5MWFhZjhhZDMwOTliMmY2ZTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAKQEAgLTEzNSw3ICsxMzUsNyBAQCBLZXlib2FyZEV2
ZW50OjpLZXlib2FyZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25zdCBJ
bml0JiBpbml0aWFsaQogICAgICwgbV9jb2RlKGluaXRpYWxpemVyLmNvZGUpCiAjZW5kaWYKICAg
ICAsIG1fa2V5SWRlbnRpZmllcihpbml0aWFsaXplci5rZXlJZGVudGlmaWVyKQotICAgICwgbV9s
b2NhdGlvbihpbml0aWFsaXplci5sb2NhdGlvbikKKyAgICAsIG1fbG9jYXRpb24oaW5pdGlhbGl6
ZXIua2V5TG9jYXRpb24gPyAqaW5pdGlhbGl6ZXIua2V5TG9jYXRpb24gOiBpbml0aWFsaXplci5s
b2NhdGlvbikKICAgICAsIG1fcmVwZWF0KGluaXRpYWxpemVyLnJlcGVhdCkKICAgICAsIG1faXND
b21wb3NpbmcoaW5pdGlhbGl6ZXIuaXNDb21wb3NpbmcpCiAjaWYgUExBVEZPUk0oQ09DT0EpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuaAppbmRleCA4YTFhNzU0NjViYTI1Y2JlZTlmZTkwZjll
ZWZlNTViOTFhZWRhYWVhLi5lYzdkZTk2YjhkMzc3MzdiZjExMDEzNmI1MjIyOTViN2U5OGExNmFi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmgKQEAgLTU0LDE5ICs1NCw2IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICBzdHJ1Y3QgSW5pdCA6IHB1YmxpYyBFdmVudE1vZGlmaWVySW5pdCB7
Ci0gICAgICAgIEluaXQoYm9vbCBidWJibGVzLCBib29sIGNhbmNlbGFibGUsIGJvb2wgY29tcG9z
ZWQsIFJlZlB0cjxET01XaW5kb3c+JiYgdmlldywgaW50IGRldGFpbCwKLSAgICAgICAgICAgIGJv
b2wgY3RybEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBhbHRLZXksIGJvb2wgbWV0YUtleSwgYm9v
bCBtb2RpZmllckFsdEdyYXBoLCBib29sIG1vZGlmaWVyQ2Fwc0xvY2ssCi0gICAgICAgICAgICBT
dHJpbmcga2V5LCBTdHJpbmcgY29kZSwgT3B0aW9uYWw8dW5zaWduZWQ+IGxvY2F0aW9uLCBib29s
IHJlcGVhdCwgYm9vbCBpc0NvbXBvc2luZywgU3RyaW5nIGtleUlkZW50aWZpZXIsCi0gICAgICAg
ICAgICBPcHRpb25hbDx1bnNpZ25lZD4ga2V5TG9jYXRpb24pCi0gICAgICAgICAgICAgICAgOiBF
dmVudE1vZGlmaWVySW5pdChidWJibGVzLCBjYW5jZWxhYmxlLCBjb21wb3NlZCwgV1RGTW92ZSh2
aWV3KSwgZGV0YWlsLCBjdHJsS2V5LCBzaGlmdEtleSwgYWx0S2V5LCBtZXRhS2V5LCBtb2RpZmll
ckFsdEdyYXBoLCBtb2RpZmllckNhcHNMb2NrKQotICAgICAgICAgICAgICAgICwga2V5KGtleSkK
LSAgICAgICAgICAgICAgICAsIGNvZGUoY29kZSkKLSAgICAgICAgICAgICAgICAsIGxvY2F0aW9u
KGxvY2F0aW9uID8gKmxvY2F0aW9uIDoga2V5TG9jYXRpb24udmFsdWVPcihET01fS0VZX0xPQ0FU
SU9OX1NUQU5EQVJEKSkKLSAgICAgICAgICAgICAgICAsIHJlcGVhdChyZXBlYXQpCi0gICAgICAg
ICAgICAgICAgLCBpc0NvbXBvc2luZyhpc0NvbXBvc2luZykKLSAgICAgICAgICAgICAgICAsIGtl
eUlkZW50aWZpZXIoa2V5SWRlbnRpZmllcikKLSAgICAgICAgICAgIHsgfQotCiAgICAgICAgIFN0
cmluZyBrZXk7CiAgICAgICAgIFN0cmluZyBjb2RlOwogICAgICAgICB1bnNpZ25lZCBsb2NhdGlv
bjsKQEAgLTc1LDYgKzYyLDcgQEAgcHVibGljOgogCiAgICAgICAgIC8vIExlZ2FjeS4KICAgICAg
ICAgU3RyaW5nIGtleUlkZW50aWZpZXI7CisgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBrZXlM
b2NhdGlvbjsKICAgICB9OwogCiAgICAgc3RhdGljIFJlZjxLZXlib2FyZEV2ZW50PiBjcmVhdGUo
Y29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBJbml0JiBpbml0aWFsaXplciwgSXNUcnVz
dGVkIGlzVHJ1c3RlZCA9IElzVHJ1c3RlZDo6Tm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vS2V5Ym9hcmRFdmVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVu
dC5pZGwKaW5kZXggYjIzZWM0ZGU3OTIxMTJjZDcwOGJiZDlmNDI1NWFmM2JlNDY1MGZmOS4uNTEw
MWIwYzUzY2Q5MWZiNjg3MmU2OWI3OWFlNmYzMTBiMzQwYmQxYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9L
ZXlib2FyZEV2ZW50LmlkbApAQCAtNTYsNyArNTYsNyBAQAogZGljdGlvbmFyeSBLZXlib2FyZEV2
ZW50SW5pdCA6IEV2ZW50TW9kaWZpZXJJbml0IHsKICAgICBET01TdHJpbmcga2V5ID0gIiI7CiAg
ICAgRE9NU3RyaW5nIGNvZGUgPSAiIjsKLSAgICB1bnNpZ25lZCBsb25nIGxvY2F0aW9uOworICAg
IHVuc2lnbmVkIGxvbmcgbG9jYXRpb24gPSAwOwogICAgIGJvb2xlYW4gcmVwZWF0ID0gZmFsc2U7
CiAgICAgYm9vbGVhbiBpc0NvbXBvc2luZyA9IGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vVUlFdmVudEluaXQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50SW5p
dC5oCmluZGV4IDBhODRiYmMzOGRmNTNjNTNlYjg4OWE2NjI5YzM3MjJiZjllMjFlMTAuLjAzMTZi
YzA2ZjU2OGU1MzkxNmRmNjk2ZjQxNDQ1YmE5ZmMzMWZmMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9VSUV2ZW50SW5pdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50
SW5pdC5oCkBAIC0zMiwxMyArMzIsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3Qg
VUlFdmVudEluaXQgOiBwdWJsaWMgRXZlbnRJbml0IHsKLSAgICBVSUV2ZW50SW5pdCgpID0gZGVm
YXVsdDsKLSAgICBVSUV2ZW50SW5pdChib29sIGJ1YmJsZXMsIGJvb2wgY2FuY2VsYWJsZSwgYm9v
bCBjb21wb3NlZCwgUmVmUHRyPERPTVdpbmRvdz4mJiB2aWV3LCBpbnQgZGV0YWlsKQotICAgICAg
ICA6IEV2ZW50SW5pdChidWJibGVzLCBjYW5jZWxhYmxlLCBjb21wb3NlZCkKLSAgICAgICAgLCB2
aWV3KFdURk1vdmUodmlldykpCi0gICAgICAgICwgZGV0YWlsKGRldGFpbCkKLSAgICB7IH0KLQog
ICAgIFJlZlB0cjxET01XaW5kb3c+IHZpZXc7CiAgICAgaW50IGRldGFpbCB7IDAgfTsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggYThjNTBhOGY1MjZiMWM1MTNmMWU0MWU2Yjdj
MWI4ZDFjNTRiNzU5OC4uODg2MWU1MTAzOGQ0ZjFiZmEyZTVjYTlmMTJkYjkxNDliODMyZDAzOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtODgzLDcgKzg4MywxMSBAQCBib29sIEVk
aXRvcjo6ZGlzcGF0Y2hDUFBFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRGF0
YVRyYW5zZmVyQWNjZXNzUAogCiAgICAgUmVmUHRyPERhdGFUcmFuc2Zlcj4gZGF0YVRyYW5zZmVy
ID0gRGF0YVRyYW5zZmVyOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUocG9saWN5KTsKIAotICAgIGF1
dG8gZXZlbnQgPSBDbGlwYm9hcmRFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgeyB0cnVlLCB0cnVl
LCBmYWxzZSwgZGF0YVRyYW5zZmVyLmdldCgpIH0sIEV2ZW50OjpJc1RydXN0ZWQ6Olllcyk7Cisg
ICAgQ2xpcGJvYXJkRXZlbnQ6OkluaXQgaW5pdDsKKyAgICBpbml0LmJ1YmJsZXMgPSB0cnVlOwor
ICAgIGluaXQuY2FuY2VsYWJsZSA9IHRydWU7CisgICAgaW5pdC5jbGlwYm9hcmREYXRhID0gZGF0
YVRyYW5zZmVyLmdldCgpOworICAgIGF1dG8gZXZlbnQgPSBDbGlwYm9hcmRFdmVudDo6Y3JlYXRl
KGV2ZW50VHlwZSwgaW5pdCwgRXZlbnQ6OklzVHJ1c3RlZDo6WWVzKTsKICAgICB0YXJnZXQtPmRp
c3BhdGNoRXZlbnQoZXZlbnQpOwogICAgIGJvb2wgbm9EZWZhdWx0UHJvY2Vzc2luZyA9IGV2ZW50
LT5kZWZhdWx0UHJldmVudGVkKCk7CiAgICAgaWYgKG5vRGVmYXVsdFByb2Nlc3NpbmcgJiYgcG9s
aWN5ID09IERhdGFUcmFuc2ZlckFjY2Vzc1BvbGljeTo6V3JpdGFibGUpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291055</attachid>
            <date>2016-10-09 17:46:52 -0700</date>
            <delta_ts>2016-10-09 18:18:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163188-20161009174332.patch</filename>
            <type>text/plain</type>
            <size>46714</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2OTcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDY4YTFjNTkyNzg1MWEx
OTNmNzYwOTgxMzg1MmQ2YTE5ZTlkMjNkNy4uM2U2MTA0OGQwNTRmOTYzODE1ODQyNDU5OTI3OTVh
MTY1NjY4ZTk0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQyIEBACiAyMDE2LTEwLTA5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgVXBkYXRlIGdlbmVyYXRlZCBi
aW5kaW5ncyBjb2RlIHNvIHRoYXQgZGljdGlvbmFyeSBzdHJ1Y3R1cmVzIG5vIGxvbmdlciBuZWVk
IGV4cGxpY2l0IGNvbnN0cnVjdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYzMTg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CisKKyAgICAgICAgVXBkYXRlIGdlbmVyYXRlZCBiaW5kaW5ncyBjb2RlIHNvIHRoYXQgZGljdGlv
bmFyeSBzdHJ1Y3R1cmVzIG5vIGxvbmdlcgorICAgICAgICBuZWVkIGV4cGxpY2l0IGNvbnN0cnVj
dG9ycy4gV2Ugbm93IGNhbGwgdGhlIGRlZmF1bHQgY29uc3RydWN0b3IgYW5kCisgICAgICAgIHRo
ZW4gaW5pdGlhbGl6ZSB0aGUgbWVtYmVycyBvbmUgYnkgb25lLgorCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZURpY3Rpb25h
cnlJbXBsZW1lbnRhdGlvbkNvbnRlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydERpY3Rpb25hcnk8
VGVzdE9iajo6RGljdGlvbmFyeT4pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydERpY3Rpb25h
cnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGROb3RUb2xlcmF0ZU51bGw+KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hv
dWxkVG9sZXJhdGVOdWxsPik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeTxB
bHRlcm5hdGVEaWN0aW9uYXJ5TmFtZT4pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydERpY3Rp
b25hcnk8VGVzdE9iajo6UGFyZW50RGljdGlvbmFyeT4pOgorICAgICAgICAoV2ViQ29yZTo6Y29u
dmVydERpY3Rpb25hcnk8VGVzdE9iajo6Q2hpbGREaWN0aW9uYXJ5Pik6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RTdGFuZGFsb25lRGljdGlvbmFy
eT4pOgorICAgICAgICAqIGRvbS9DbGlwYm9hcmRFdmVudC5oOgorICAgICAgICAqIGRvbS9DdXN0
b21FdmVudC5oOgorICAgICAgICAqIGRvbS9FdmVudEluaXQuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SW5pdDo6RXZlbnRJbml0KTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vRXZlbnRNb2Rp
ZmllckluaXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TW9kaWZpZXJJbml0OjpFdmVudE1v
ZGlmaWVySW5pdCk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL0tleWJvYXJkRXZlbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6S2V5Ym9hcmRFdmVudDo6S2V5Ym9hcmRFdmVudCk6CisgICAgICAg
ICogZG9tL0tleWJvYXJkRXZlbnQuaDoKKyAgICAgICAgKiBkb20vS2V5Ym9hcmRFdmVudC5pZGw6
CisgICAgICAgICogZG9tL1VJRXZlbnRJbml0Lmg6CisgICAgICAgIChXZWJDb3JlOjpVSUV2ZW50
SW5pdDo6VUlFdmVudEluaXQpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGlzcGF0Y2hDUFBFdmVudCk6CisKKzIwMTYt
MTAtMDkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBVcGRhdGUg
S2V5Ym9hcmRFdmVudCB0byBzdG9wIHVzaW5nIGxlZ2FjeSBbQ29uc3RydWN0b3JUZW1wbGF0ZT1F
dmVudF0KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MzE3NgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCmluZGV4IDc4MWExYjU5ODdiNzJjOTQ3ZWI2MDQ4MjRiNGI4ZWM5MTlkZmJmYjgu
LjNmNzhlMjA3Yjk4MmQwNDFjZTNmOGY1Nzk1MWUwYTcxOTQ5ODQ0NDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0xMDg2
LDYgKzEwODYsOCBAQCBzdWIgR2VuZXJhdGVEaWN0aW9uYXJ5SW1wbGVtZW50YXRpb25Db250ZW50
CiAgICAgbXkgJGFyZ3VtZW50cyA9ICIiOwogICAgIG15ICRjb21tYSA9ICIiOwogCisgICAgJHJl
c3VsdCAuPSAiICAgICRjbGFzc05hbWUgcmVzdWx0O1xuIjsKKwogICAgICMgNS4gRm9yIGVhY2gg
ZGljdGlvbmFyeSBkaWN0aW9uYXJ5IGluIGRpY3Rpb25hcmllcywgaW4gb3JkZXI6CiAgICAgZm9y
ZWFjaCBteSAkZGljdGlvbmFyeSAoQGRpY3Rpb25hcmllcykgewogICAgICAgICAjIEZvciBlYWNo
IGRpY3Rpb25hcnkgbWVtYmVyIG1lbWJlciBkZWNsYXJlZCBvbiBkaWN0aW9uYXJ5LCBpbiBsZXhp
Y29ncmFwaGljYWwgb3JkZXI6CkBAIC0xMTAyLDExICsxMTA0LDYgQEAgc3ViIEdlbmVyYXRlRGlj
dGlvbmFyeUltcGxlbWVudGF0aW9uQ29udGVudAogICAgICAgICAgICAgJHJlc3VsdCAuPSAiICAg
IEpTVmFsdWUgJHtrZXl9VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkg
OiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCBcIiR7
a2V5fVwiKSk7XG4iOwogCiAgICAgICAgICAgICBteSAkbmF0aXZlVHlwZSA9IEdldE5hdGl2ZVR5
cGVGcm9tU2lnbmF0dXJlKCRpbnRlcmZhY2UsICRtZW1iZXIpOwotICAgICAgICAgICAgaWYgKCRt
ZW1iZXItPmlzT3B0aW9uYWwgJiYgIWRlZmluZWQgJG1lbWJlci0+ZGVmYXVsdCkgewotICAgICAg
ICAgICAgICAgICRyZXN1bHQgLj0gIiAgICBDb252ZXJ0ZXI8JG5hdGl2ZVR5cGU+OjpPcHRpb25h
bFZhbHVlICRrZXk7XG4iOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAk
cmVzdWx0IC49ICIgICAgJG5hdGl2ZVR5cGUgJGtleTtcbiI7Ci0gICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgICMgNS4zLiBJZiB2YWx1ZSBpcyBub3QgdW5kZWZpbmVkLCB0aGVuOgogICAgICAg
ICAgICAgJHJlc3VsdCAuPSAiICAgIGlmICghJHtrZXl9VmFsdWUuaXNVbmRlZmluZWQoKSkge1xu
IjsKQEAgLTExMTUsMjAgKzExMTIsMjMgQEAgc3ViIEdlbmVyYXRlRGljdGlvbmFyeUltcGxlbWVu
dGF0aW9uQ29udGVudAogICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyR7dHlw
ZX0uaCIpOwogICAgICAgICAgICAgICAgIGRpZSAiRGljdGlvbmFyeSBtZW1iZXJzIG9mIG5vbi1u
dWxsYWJsZSB3cmFwcGVyIHR5cGVzIG11c3QgYmUgbWFya2VkIGFzIHJlcXVpcmVkIiBpZiAhJG1l
bWJlci0+aXNOdWxsYWJsZSAmJiAkbWVtYmVyLT5pc09wdGlvbmFsOwogICAgICAgICAgICAgICAg
IG15ICRudWxsYWJsZVBhcmFtZXRlciA9ICRtZW1iZXItPmlzTnVsbGFibGUgPyAiSXNOdWxsYWJs
ZTo6WWVzIiA6ICJJc051bGxhYmxlOjpObyI7Ci0gICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAi
ICAgICAgICAka2V5ID0gY29udmVydFdyYXBwZXJUeXBlPCR0eXBlLCBKUyR7dHlwZX0+KHN0YXRl
LCAke2tleX1WYWx1ZSwgJG51bGxhYmxlUGFyYW1ldGVyKTtcbiI7CisgICAgICAgICAgICAgICAg
JHJlc3VsdCAuPSAiICAgICAgICByZXN1bHQuJGtleSA9IGNvbnZlcnRXcmFwcGVyVHlwZTwkdHlw
ZSwgSlMke3R5cGV9PihzdGF0ZSwgJHtrZXl9VmFsdWUsICRudWxsYWJsZVBhcmFtZXRlcik7XG4i
OworICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBOdWxsb3B0KTtcbiI7CiAgICAgICAgICAgICB9IGVsc2lmICgkY29kZUdl
bmVyYXRvci0+SXNEaWN0aW9uYXJ5VHlwZSgkdHlwZSkpIHsKICAgICAgICAgICAgICAgICBteSAk
bmF0aXZlVHlwZSA9IEdldE5hdGl2ZVR5cGUoJGludGVyZmFjZSwgJHR5cGUpOwotICAgICAgICAg
ICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAgJGtleSA9IGNvbnZlcnREaWN0aW9uYXJ5PCR7bmF0
aXZlVHlwZX0+KHN0YXRlLCAke2tleX1WYWx1ZSk7XG4iOworICAgICAgICAgICAgICAgICRyZXN1
bHQgLj0gIiAgICAgICAgT3B0aW9uYWw8JHtuYXRpdmVUeXBlfT4gJGtleSA9IGNvbnZlcnREaWN0
aW9uYXJ5PCR7bmF0aXZlVHlwZX0+KHN0YXRlLCAke2tleX1WYWx1ZSkudmFsdWUoKTtcbiI7Cisg
ICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIE51bGxvcHQpO1xuIjsKKyAgICAgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAg
ICAgIHJlc3VsdC4ka2V5ID0gJGtleS52YWx1ZSgpO1xuIjsKICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgbXkgJGNvbnZlcnNpb25SdWxlV2l0aExlYWRpbmdDb21tYSA9IEdl
bmVyYXRlQ29udmVyc2lvblJ1bGVXaXRoTGVhZGluZ0NvbW1hKCRpbnRlcmZhY2UsICRtZW1iZXIp
OwotICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAgJGtleSA9IGNvbnZlcnQ8JHtu
YXRpdmVUeXBlfT4oc3RhdGUsICR7a2V5fVZhbHVlJHtjb252ZXJzaW9uUnVsZVdpdGhMZWFkaW5n
Q29tbWF9KTtcbiI7CisgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiICAgICAgICByZXN1bHQu
JGtleSA9IGNvbnZlcnQ8JHtuYXRpdmVUeXBlfT4oc3RhdGUsICR7a2V5fVZhbHVlJHtjb252ZXJz
aW9uUnVsZVdpdGhMZWFkaW5nQ29tbWF9KTtcbiI7CisgICAgICAgICAgICAgICAgJHJlc3VsdCAu
PSAiICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpO1xuIjsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTtcbiI7CiAgICAgICAgICAgICAjIFZhbHVl
IGlzIHVuZGVmaW5lZC4KICAgICAgICAgICAgICMgNS40LiBPdGhlcndpc2UsIGlmIHZhbHVlIGlz
IHVuZGVmaW5lZCBidXQgdGhlIGRpY3Rpb25hcnkgbWVtYmVyIGhhcyBhIGRlZmF1bHQgdmFsdWUs
IHRoZW46CiAgICAgICAgICAgICBpZiAoJG1lbWJlci0+aXNPcHRpb25hbCAmJiBkZWZpbmVkICRt
ZW1iZXItPmRlZmF1bHQpIHsKICAgICAgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgfSBlbHNl
XG4iOwotICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAgJGtleSA9ICIgLiBHZW5l
cmF0ZURlZmF1bHRWYWx1ZSgkaW50ZXJmYWNlLCAkbWVtYmVyKSAuICI7XG4iOworICAgICAgICAg
ICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAgcmVzdWx0LiRrZXkgPSAiIC4gR2VuZXJhdGVEZWZh
dWx0VmFsdWUoJGludGVyZmFjZSwgJG1lbWJlcikgLiAiO1xuIjsKICAgICAgICAgICAgIH0gZWxz
aWYgKCEkbWVtYmVyLT5pc09wdGlvbmFsKSB7CiAgICAgICAgICAgICAgICAgIyA1LjUuIE90aGVy
d2lzZSwgaWYgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZCB0aGUgZGljdGlvbmFyeSBtZW1iZXIgaXMg
YSByZXF1aXJlZCBkaWN0aW9uYXJ5IG1lbWJlciwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci4KICAg
ICAgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgfSBlbHNlIHtcbiI7CkBAIC0xMTM5LDIzICsx
MTM5LDkgQEAgc3ViIEdlbmVyYXRlRGljdGlvbmFyeUltcGxlbWVudGF0aW9uQ29udGVudAogICAg
ICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICB9XG4iOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0KLSAgICAgICAgIyA2LiBSZXR1cm4gZGljdC4KLSAgICAgICAgZm9yZWFjaCBteSAkbWVt
YmVyIChAeyRkaWN0aW9uYXJ5LT5tZW1iZXJzfSkgewotICAgICAgICAgICAgbXkgJHZhbHVlOwot
ICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1dyYXBwZXJUeXBlKCRtZW1iZXItPnR5
cGUpICYmICEkbWVtYmVyLT5pc051bGxhYmxlKSB7Ci0gICAgICAgICAgICAgICAgJHZhbHVlID0g
IioiIC4gJG1lbWJlci0+bmFtZTsKLSAgICAgICAgICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9y
LT5Jc0RpY3Rpb25hcnlUeXBlKCRtZW1iZXItPnR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgJHZh
bHVlID0gJG1lbWJlci0+bmFtZSAuICIudmFsdWUoKSI7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICR2YWx1ZSA9ICJXVEZNb3ZlKCIgLiAkbWVtYmVyLT5uYW1lIC4gIiki
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgJGFyZ3VtZW50cyAuPSAkY29tbWEgLiAkdmFs
dWU7Ci0gICAgICAgICAgICAkY29tbWEgPSAiLCAiOwotICAgICAgICB9CiAgICAgfQogCi0gICAg
JHJlc3VsdCAuPSAiICAgIHJldHVybiAkY2xhc3NOYW1lIHsgIiAuICRhcmd1bWVudHMgLiAiIH07
XG4iOworICAgICRyZXN1bHQgLj0gIiAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpO1xuIjsKICAg
ICAkcmVzdWx0IC49ICJ9XG5cbiI7CiAgICAgJHJlc3VsdCAuPSAiI2VuZGlmXG5cbiIgaWYgJGNv
bmRpdGlvbmFsU3RyaW5nOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IGUwYmY4MTY5MjdkNjBmMjQ2ZjhmZmYy
ODYwM2ZkZjIwZjcyNWNiYjUuLjlmMzVlYTg5ZWFlMjdkZTQ4NDViYzRiMzNkZGFkYjEwYjQ0N2Vi
NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPYmouY3BwCkBAIC00NzUsMjIyICs0NzUsMTkxIEBAIHRlbXBsYXRlPD4gT3B0aW9u
YWw8VGVzdE9iajo6RGljdGlvbmFyeT4gY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlv
bmFyeT4oCiAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAg
ICAgIHJldHVybiBOdWxsb3B0OwogICAgIH0KKyAgICBUZXN0T2JqOjpEaWN0aW9uYXJ5IHJlc3Vs
dDsKICAgICBKU1ZhbHVlIGFueVR5cGVkZWZWYWx1ZVZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQg
PyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgImFueVR5cGVkZWZWYWx1ZSIpKTsKLSAgICBKU0M6OkpTVmFsdWUgYW55VHlw
ZWRlZlZhbHVlOwogICAgIGlmICghYW55VHlwZWRlZlZhbHVlVmFsdWUuaXNVbmRlZmluZWQoKSkg
ewotICAgICAgICBhbnlUeXBlZGVmVmFsdWUgPSBjb252ZXJ0PEpTQzo6SlNWYWx1ZT4oc3RhdGUs
IGFueVR5cGVkZWZWYWx1ZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0LmFueVR5cGVkZWZWYWx1ZSA9
IGNvbnZlcnQ8SlNDOjpKU1ZhbHVlPihzdGF0ZSwgYW55VHlwZWRlZlZhbHVlVmFsdWUpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwogICAgIH0gZWxz
ZQotICAgICAgICBhbnlUeXBlZGVmVmFsdWUgPSBqc1VuZGVmaW5lZCgpOworICAgICAgICByZXN1
bHQuYW55VHlwZWRlZlZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBKU1ZhbHVlIGFueVZhbHVl
VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYW55VmFsdWUiKSk7Ci0gICAg
SlNDOjpKU1ZhbHVlIGFueVZhbHVlOwogICAgIGlmICghYW55VmFsdWVWYWx1ZS5pc1VuZGVmaW5l
ZCgpKSB7Ci0gICAgICAgIGFueVZhbHVlID0gY29udmVydDxKU0M6OkpTVmFsdWU+KHN0YXRlLCBh
bnlWYWx1ZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0LmFueVZhbHVlID0gY29udmVydDxKU0M6OkpT
VmFsdWU+KHN0YXRlLCBhbnlWYWx1ZVZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKICAgICB9IGVsc2UKLSAgICAgICAgYW55VmFsdWUgPSBq
c1VuZGVmaW5lZCgpOworICAgICAgICByZXN1bHQuYW55VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwog
ICAgIEpTVmFsdWUgYW55VmFsdWVXaXRoTnVsbERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZp
bmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJhbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdCIpKTsKLSAgICBKU0M6OkpT
VmFsdWUgYW55VmFsdWVXaXRoTnVsbERlZmF1bHQ7CiAgICAgaWYgKCFhbnlWYWx1ZVdpdGhOdWxs
RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgYW55VmFsdWVXaXRoTnVsbERl
ZmF1bHQgPSBjb252ZXJ0PEpTQzo6SlNWYWx1ZT4oc3RhdGUsIGFueVZhbHVlV2l0aE51bGxEZWZh
dWx0VmFsdWUpOworICAgICAgICByZXN1bHQuYW55VmFsdWVXaXRoTnVsbERlZmF1bHQgPSBjb252
ZXJ0PEpTQzo6SlNWYWx1ZT4oc3RhdGUsIGFueVZhbHVlV2l0aE51bGxEZWZhdWx0VmFsdWUpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwogICAgIH0g
ZWxzZQotICAgICAgICBhbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdCA9IGpzTnVsbCgpOworICAgICAg
ICByZXN1bHQuYW55VmFsdWVXaXRoTnVsbERlZmF1bHQgPSBqc051bGwoKTsKICAgICBKU1ZhbHVl
IGJvb2xlYW5XaXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5l
ZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
ImJvb2xlYW5XaXRoRGVmYXVsdCIpKTsKLSAgICBib29sIGJvb2xlYW5XaXRoRGVmYXVsdDsKICAg
ICBpZiAoIWJvb2xlYW5XaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAg
Ym9vbGVhbldpdGhEZWZhdWx0ID0gY29udmVydDxib29sPihzdGF0ZSwgYm9vbGVhbldpdGhEZWZh
dWx0VmFsdWUpOworICAgICAgICByZXN1bHQuYm9vbGVhbldpdGhEZWZhdWx0ID0gY29udmVydDxi
b29sPihzdGF0ZSwgYm9vbGVhbldpdGhEZWZhdWx0VmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwogICAgIH0gZWxzZQotICAgICAgICBib29s
ZWFuV2l0aERlZmF1bHQgPSBmYWxzZTsKKyAgICAgICAgcmVzdWx0LmJvb2xlYW5XaXRoRGVmYXVs
dCA9IGZhbHNlOwogICAgIEpTVmFsdWUgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUgPSBpc051
bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYm9vbGVhbldpdGhvdXREZWZhdWx0IikpOwotICAg
IENvbnZlcnRlcjxib29sPjo6T3B0aW9uYWxWYWx1ZSBib29sZWFuV2l0aG91dERlZmF1bHQ7CiAg
ICAgaWYgKCFib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAg
ICAgIGJvb2xlYW5XaXRob3V0RGVmYXVsdCA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIGJvb2xlYW5X
aXRob3V0RGVmYXVsdFZhbHVlKTsKKyAgICAgICAgcmVzdWx0LmJvb2xlYW5XaXRob3V0RGVmYXVs
dCA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKICAgICB9CiAg
ICAgSlNWYWx1ZSBkaWN0aW9uYXJ5TWVtYmVyVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpz
VW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAiZGljdGlvbmFyeU1lbWJlciIpKTsKLSAgICBDb252ZXJ0ZXI8VGVzdE9iajo6RGlj
dGlvbmFyeVRoYXRTaG91bGRUb2xlcmF0ZU51bGw+OjpPcHRpb25hbFZhbHVlIGRpY3Rpb25hcnlN
ZW1iZXI7CiAgICAgaWYgKCFkaWN0aW9uYXJ5TWVtYmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgewot
ICAgICAgICBkaWN0aW9uYXJ5TWVtYmVyID0gY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGlj
dGlvbmFyeVRoYXRTaG91bGRUb2xlcmF0ZU51bGw+KHN0YXRlLCBkaWN0aW9uYXJ5TWVtYmVyVmFs
dWUpOworICAgICAgICBPcHRpb25hbDxUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZFRvbGVy
YXRlTnVsbD4gZGljdGlvbmFyeU1lbWJlciA9IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRp
Y3Rpb25hcnlUaGF0U2hvdWxkVG9sZXJhdGVOdWxsPihzdGF0ZSwgZGljdGlvbmFyeU1lbWJlclZh
bHVlKS52YWx1ZSgpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51
bGxvcHQpOworICAgICAgICByZXN1bHQuZGljdGlvbmFyeU1lbWJlciA9IGRpY3Rpb25hcnlNZW1i
ZXIudmFsdWUoKTsKICAgICB9CiAgICAgSlNWYWx1ZSBlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1
bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJlbnVtZXJhdGlvblZhbHVl
V2l0aERlZmF1bHQiKSk7Ci0gICAgVGVzdE9iajo6RW51bVR5cGUgZW51bWVyYXRpb25WYWx1ZVdp
dGhEZWZhdWx0OwogICAgIGlmICghZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0VmFsdWUuaXNV
bmRlZmluZWQoKSkgewotICAgICAgICBlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHQgPSBjb252
ZXJ0PFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0
VmFsdWUpOworICAgICAgICByZXN1bHQuZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0ID0gY29u
dmVydDxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIGVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVs
dFZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0
KTsKICAgICB9IGVsc2UKLSAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0ID0gVGVz
dE9iajo6RW51bVR5cGU6OkVudW1WYWx1ZTE7CisgICAgICAgIHJlc3VsdC5lbnVtZXJhdGlvblZh
bHVlV2l0aERlZmF1bHQgPSBUZXN0T2JqOjpFbnVtVHlwZTo6RW51bVZhbHVlMTsKICAgICBKU1Zh
bHVlIGVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0VmFsdWUgPSBpc051bGxP
clVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0Rl
ZmF1bHQiKSk7Ci0gICAgVGVzdE9iajo6RW51bVR5cGUgZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0
eVN0cmluZ0RlZmF1bHQ7CiAgICAgaWYgKCFlbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5n
RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdp
dGhFbXB0eVN0cmluZ0RlZmF1bHQgPSBjb252ZXJ0PFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwg
ZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHRWYWx1ZSk7CisgICAgICAgIHJl
c3VsdC5lbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdCA9IGNvbnZlcnQ8VGVz
dE9iajo6RW51bVR5cGU+KHN0YXRlLCBlbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVm
YXVsdFZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxs
b3B0KTsKICAgICB9IGVsc2UKLSAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmlu
Z0RlZmF1bHQgPSBUZXN0T2JqOjpFbnVtVHlwZTo6RW1wdHlTdHJpbmc7CisgICAgICAgIHJlc3Vs
dC5lbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdCA9IFRlc3RPYmo6OkVudW1U
eXBlOjpFbXB0eVN0cmluZzsKICAgICBKU1ZhbHVlIGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVm
YXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFs
dWVXaXRob3V0RGVmYXVsdCIpKTsKLSAgICBDb252ZXJ0ZXI8VGVzdE9iajo6RW51bVR5cGU+OjpP
cHRpb25hbFZhbHVlIGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdDsKICAgICBpZiAoIWVu
dW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAg
ICAgZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0ID0gY29udmVydDxUZXN0T2JqOjpFbnVt
VHlwZT4oc3RhdGUsIGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdFZhbHVlKTsKKyAgICAg
ICAgcmVzdWx0LmVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCA9IGNvbnZlcnQ8VGVzdE9i
ajo6RW51bVR5cGU+KHN0YXRlLCBlbnVtZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHRWYWx1ZSk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CiAgICAg
fQogICAgIEpTVmFsdWUgaW50ZWdlclZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVm
aW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgImludGVnZXIiKSk7Ci0gICAgQ29udmVydGVyPGludDMyX3Q+OjpPcHRpb25hbFZhbHVlIGlu
dGVnZXI7CiAgICAgaWYgKCFpbnRlZ2VyVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBp
bnRlZ2VyID0gY29udmVydDxpbnQzMl90PihzdGF0ZSwgaW50ZWdlclZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKTsKKyAgICAgICAgcmVzdWx0LmludGVnZXIgPSBjb252ZXJ0PGludDMyX3Q+KHN0YXRl
LCBpbnRlZ2VyVmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwogICAgIH0KICAgICBKU1ZhbHVlIGludGVnZXJX
aXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImludGVnZXJX
aXRoRGVmYXVsdCIpKTsKLSAgICBpbnQzMl90IGludGVnZXJXaXRoRGVmYXVsdDsKICAgICBpZiAo
IWludGVnZXJXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgaW50ZWdl
cldpdGhEZWZhdWx0ID0gY29udmVydDxpbnQzMl90PihzdGF0ZSwgaW50ZWdlcldpdGhEZWZhdWx0
VmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgICAgICByZXN1bHQuaW50ZWdlcldpdGhEZWZh
dWx0ID0gY29udmVydDxpbnQzMl90PihzdGF0ZSwgaW50ZWdlcldpdGhEZWZhdWx0VmFsdWUsIE5v
cm1hbENvbnZlcnNpb24pOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IE51bGxvcHQpOwogICAgIH0gZWxzZQotICAgICAgICBpbnRlZ2VyV2l0aERlZmF1bHQgPSAwOwor
ICAgICAgICByZXN1bHQuaW50ZWdlcldpdGhEZWZhdWx0ID0gMDsKICAgICBKU1ZhbHVlIGxhcmdl
SW50ZWdlclZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImxhcmdlSW50ZWdl
ciIpKTsKLSAgICBDb252ZXJ0ZXI8aW50NjRfdD46Ok9wdGlvbmFsVmFsdWUgbGFyZ2VJbnRlZ2Vy
OwogICAgIGlmICghbGFyZ2VJbnRlZ2VyVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBs
YXJnZUludGVnZXIgPSBjb252ZXJ0PGludDY0X3Q+KHN0YXRlLCBsYXJnZUludGVnZXJWYWx1ZSwg
Tm9ybWFsQ29udmVyc2lvbik7CisgICAgICAgIHJlc3VsdC5sYXJnZUludGVnZXIgPSBjb252ZXJ0
PGludDY0X3Q+KHN0YXRlLCBsYXJnZUludGVnZXJWYWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CiAgICAgfQog
ICAgIEpTVmFsdWUgbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZp
bmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJsYXJnZUludGVnZXJXaXRoRGVmYXVsdCIpKTsKLSAgICBpbnQ2NF90
IGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0OwogICAgIGlmICghbGFyZ2VJbnRlZ2VyV2l0aERlZmF1
bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0
ID0gY29udmVydDxpbnQ2NF90PihzdGF0ZSwgbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSwg
Tm9ybWFsQ29udmVyc2lvbik7CisgICAgICAgIHJlc3VsdC5sYXJnZUludGVnZXJXaXRoRGVmYXVs
dCA9IGNvbnZlcnQ8aW50NjRfdD4oc3RhdGUsIGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUs
IE5vcm1hbENvbnZlcnNpb24pOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIE51bGxvcHQpOwogICAgIH0gZWxzZQotICAgICAgICBsYXJnZUludGVnZXJXaXRoRGVmYXVs
dCA9IDA7CisgICAgICAgIHJlc3VsdC5sYXJnZUludGVnZXJXaXRoRGVmYXVsdCA9IDA7CiAgICAg
SlNWYWx1ZSBudWxsYWJsZU5vZGVWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmlu
ZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUs
ICJudWxsYWJsZU5vZGUiKSk7Ci0gICAgTm9kZSogbnVsbGFibGVOb2RlOwogICAgIGlmICghbnVs
bGFibGVOb2RlVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBudWxsYWJsZU5vZGUgPSBj
b252ZXJ0V3JhcHBlclR5cGU8Tm9kZSwgSlNOb2RlPihzdGF0ZSwgbnVsbGFibGVOb2RlVmFsdWUs
IElzTnVsbGFibGU6Olllcyk7CisgICAgICAgIHJlc3VsdC5udWxsYWJsZU5vZGUgPSBjb252ZXJ0
V3JhcHBlclR5cGU8Tm9kZSwgSlNOb2RlPihzdGF0ZSwgbnVsbGFibGVOb2RlVmFsdWUsIElzTnVs
bGFibGU6Olllcyk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVs
bG9wdCk7CiAgICAgfSBlbHNlCi0gICAgICAgIG51bGxhYmxlTm9kZSA9IG51bGxwdHI7CisgICAg
ICAgIHJlc3VsdC5udWxsYWJsZU5vZGUgPSBudWxscHRyOwogICAgIEpTVmFsdWUgcmVzdHJpY3Rl
ZERvdWJsZVZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlc3RyaWN0ZWRE
b3VibGUiKSk7Ci0gICAgQ29udmVydGVyPGRvdWJsZT46Ok9wdGlvbmFsVmFsdWUgcmVzdHJpY3Rl
ZERvdWJsZTsKICAgICBpZiAoIXJlc3RyaWN0ZWREb3VibGVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7
Ci0gICAgICAgIHJlc3RyaWN0ZWREb3VibGUgPSBjb252ZXJ0PGRvdWJsZT4oc3RhdGUsIHJlc3Ry
aWN0ZWREb3VibGVWYWx1ZSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKKyAgICAgICAgcmVz
dWx0LnJlc3RyaWN0ZWREb3VibGUgPSBjb252ZXJ0PGRvdWJsZT4oc3RhdGUsIHJlc3RyaWN0ZWRE
b3VibGVWYWx1ZSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKICAgICB9CiAgICAgSlNWYWx1ZSByZXN0
cmljdGVkRG91YmxlV2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRl
ZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJyZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQiKSk7Ci0gICAgZG91YmxlIHJlc3RyaWN0
ZWREb3VibGVXaXRoRGVmYXVsdDsKICAgICBpZiAoIXJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVs
dFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdHJpY3RlZERvdWJsZVdpdGhEZWZh
dWx0ID0gY29udmVydDxkb3VibGU+KHN0YXRlLCByZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHRW
YWx1ZSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKKyAgICAgICAgcmVzdWx0LnJlc3RyaWN0
ZWREb3VibGVXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8ZG91YmxlPihzdGF0ZSwgcmVzdHJpY3RlZERv
dWJsZVdpdGhEZWZhdWx0VmFsdWUsIFNob3VsZEFsbG93Tm9uRmluaXRlOjpObyk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CiAgICAgfSBlbHNlCi0g
ICAgICAgIHJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCA9IDA7CisgICAgICAgIHJlc3VsdC5y
ZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQgPSAwOwogICAgIEpTVmFsdWUgcmVzdHJpY3RlZEZs
b2F0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZEZsb2F0
IikpOwotICAgIENvbnZlcnRlcjxmbG9hdD46Ok9wdGlvbmFsVmFsdWUgcmVzdHJpY3RlZEZsb2F0
OwogICAgIGlmICghcmVzdHJpY3RlZEZsb2F0VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAg
ICByZXN0cmljdGVkRmxvYXQgPSBjb252ZXJ0PGZsb2F0PihzdGF0ZSwgcmVzdHJpY3RlZEZsb2F0
VmFsdWUsIFNob3VsZEFsbG93Tm9uRmluaXRlOjpObyk7CisgICAgICAgIHJlc3VsdC5yZXN0cmlj
dGVkRmxvYXQgPSBjb252ZXJ0PGZsb2F0PihzdGF0ZSwgcmVzdHJpY3RlZEZsb2F0VmFsdWUsIFNo
b3VsZEFsbG93Tm9uRmluaXRlOjpObyk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgTnVsbG9wdCk7CiAgICAgfQogICAgIEpTVmFsdWUgcmVzdHJpY3RlZEZsb2F0V2l0
aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXN0cmljdGVk
RmxvYXRXaXRoRGVmYXVsdCIpKTsKLSAgICBmbG9hdCByZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVs
dDsKICAgICBpZiAoIXJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQo
KSkgewotICAgICAgICByZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8ZmxvYXQ+
KHN0YXRlLCByZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdFZhbHVlLCBTaG91bGRBbGxvd05vbkZp
bml0ZTo6Tm8pOworICAgICAgICByZXN1bHQucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQgPSBj
b252ZXJ0PGZsb2F0PihzdGF0ZSwgcmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSwgU2hv
dWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBOdWxsb3B0KTsKICAgICB9IGVsc2UKLSAgICAgICAgcmVzdHJpY3RlZEZsb2F0V2l0
aERlZmF1bHQgPSAwOworICAgICAgICByZXN1bHQucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQg
PSAwOwogICAgIEpTVmFsdWUgc2VxdWVuY2VPZlN0cmluZ3NWYWx1ZSA9IGlzTnVsbE9yVW5kZWZp
bmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJzZXF1ZW5jZU9mU3RyaW5ncyIpKTsKLSAgICBDb252ZXJ0ZXI8VmVj
dG9yPFN0cmluZz4+OjpPcHRpb25hbFZhbHVlIHNlcXVlbmNlT2ZTdHJpbmdzOwogICAgIGlmICgh
c2VxdWVuY2VPZlN0cmluZ3NWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHNlcXVlbmNl
T2ZTdHJpbmdzID0gY29udmVydDxWZWN0b3I8U3RyaW5nPj4oc3RhdGUsIHNlcXVlbmNlT2ZTdHJp
bmdzVmFsdWUpOworICAgICAgICByZXN1bHQuc2VxdWVuY2VPZlN0cmluZ3MgPSBjb252ZXJ0PFZl
Y3RvcjxTdHJpbmc+PihzdGF0ZSwgc2VxdWVuY2VPZlN0cmluZ3NWYWx1ZSk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CiAgICAgfQogICAgIEpTVmFs
dWUgc21hbGxJbnRlZ2VyQ2xhbXBlZFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVm
aW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgInNtYWxsSW50ZWdlckNsYW1wZWQiKSk7Ci0gICAgQ29udmVydGVyPGludDhfdD46Ok9wdGlv
bmFsVmFsdWUgc21hbGxJbnRlZ2VyQ2xhbXBlZDsKICAgICBpZiAoIXNtYWxsSW50ZWdlckNsYW1w
ZWRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHNtYWxsSW50ZWdlckNsYW1wZWQgPSBj
b252ZXJ0PGludDhfdD4oc3RhdGUsIHNtYWxsSW50ZWdlckNsYW1wZWRWYWx1ZSwgQ2xhbXApOwor
ICAgICAgICByZXN1bHQuc21hbGxJbnRlZ2VyQ2xhbXBlZCA9IGNvbnZlcnQ8aW50OF90PihzdGF0
ZSwgc21hbGxJbnRlZ2VyQ2xhbXBlZFZhbHVlLCBDbGFtcCk7CiAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CiAgICAgfQogICAgIEpTVmFsdWUgc21hbGxJ
bnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQo
KSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJz
bWFsbEludGVnZXJXaXRoRGVmYXVsdCIpKTsKLSAgICBDb252ZXJ0ZXI8aW50OF90Pjo6T3B0aW9u
YWxWYWx1ZSBzbWFsbEludGVnZXJXaXRoRGVmYXVsdDsKICAgICBpZiAoIXNtYWxsSW50ZWdlcldp
dGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBzbWFsbEludGVnZXJXaXRo
RGVmYXVsdCA9IGNvbnZlcnQ8aW50OF90PihzdGF0ZSwgc21hbGxJbnRlZ2VyV2l0aERlZmF1bHRW
YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgICAgIHJlc3VsdC5zbWFsbEludGVnZXJXaXRo
RGVmYXVsdCA9IGNvbnZlcnQ8aW50OF90PihzdGF0ZSwgc21hbGxJbnRlZ2VyV2l0aERlZmF1bHRW
YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgTnVsbG9wdCk7CiAgICAgfQogICAgIEpTVmFsdWUgc21hbGxVbnNpZ25lZEludGVn
ZXJFbmZvcmNlZFJhbmdlVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkg
OiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic21h
bGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdlIikpOwotICAgIENvbnZlcnRlcjx1aW50OF90
Pjo6T3B0aW9uYWxWYWx1ZSBzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2U7CiAgICAg
aWYgKCFzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2VWYWx1ZS5pc1VuZGVmaW5lZCgp
KSB7Ci0gICAgICAgIHNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZSA9IGNvbnZlcnQ8
dWludDhfdD4oc3RhdGUsIHNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZVZhbHVlLCBF
bmZvcmNlUmFuZ2UpOworICAgICAgICByZXN1bHQuc21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNl
ZFJhbmdlID0gY29udmVydDx1aW50OF90PihzdGF0ZSwgc21hbGxVbnNpZ25lZEludGVnZXJFbmZv
cmNlZFJhbmdlVmFsdWUsIEVuZm9yY2VSYW5nZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgTnVsbG9wdCk7CiAgICAgfQogICAgIEpTVmFsdWUgc21hbGxVbnNpZ25l
ZEludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5l
ZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
InNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQiKSk7Ci0gICAgdWludDhfdCBzbWFsbFVu
c2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0OwogICAgIGlmICghc21hbGxVbnNpZ25lZEludGVnZXJX
aXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgc21hbGxVbnNpZ25lZElu
dGVnZXJXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8dWludDhfdD4oc3RhdGUsIHNtYWxsVW5zaWduZWRJ
bnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgICAgIHJlc3Vs
dC5zbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydDx1aW50OF90PihzdGF0
ZSwgc21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdFZhbHVlLCBOb3JtYWxDb252ZXJzaW9u
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKICAg
ICB9IGVsc2UKLSAgICAgICAgc21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCA9IDA7Cisg
ICAgICAgIHJlc3VsdC5zbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0ID0gMDsKICAgICBK
U1ZhbHVlIHN0cmluZ1dpdGhEZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5k
ZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0
YXRlLCAic3RyaW5nV2l0aERlZmF1bHQiKSk7Ci0gICAgU3RyaW5nIHN0cmluZ1dpdGhEZWZhdWx0
OwogICAgIGlmICghc3RyaW5nV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAg
ICAgIHN0cmluZ1dpdGhEZWZhdWx0ID0gY29udmVydDxTdHJpbmc+KHN0YXRlLCBzdHJpbmdXaXRo
RGVmYXVsdFZhbHVlKTsKKyAgICAgICAgcmVzdWx0LnN0cmluZ1dpdGhEZWZhdWx0ID0gY29udmVy
dDxTdHJpbmc+KHN0YXRlLCBzdHJpbmdXaXRoRGVmYXVsdFZhbHVlKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKICAgICB9IGVsc2UKLSAgICAgICAg
c3RyaW5nV2l0aERlZmF1bHQgPSAiZGVmYXVsdFN0cmluZyI7CisgICAgICAgIHJlc3VsdC5zdHJp
bmdXaXRoRGVmYXVsdCA9ICJkZWZhdWx0U3RyaW5nIjsKICAgICBKU1ZhbHVlIHN0cmluZ1dpdGhv
dXREZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic3RyaW5nV2l0
aG91dERlZmF1bHQiKSk7Ci0gICAgQ29udmVydGVyPFN0cmluZz46Ok9wdGlvbmFsVmFsdWUgc3Ry
aW5nV2l0aG91dERlZmF1bHQ7CiAgICAgaWYgKCFzdHJpbmdXaXRob3V0RGVmYXVsdFZhbHVlLmlz
VW5kZWZpbmVkKCkpIHsKLSAgICAgICAgc3RyaW5nV2l0aG91dERlZmF1bHQgPSBjb252ZXJ0PFN0
cmluZz4oc3RhdGUsIHN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUpOworICAgICAgICByZXN1bHQu
c3RyaW5nV2l0aG91dERlZmF1bHQgPSBjb252ZXJ0PFN0cmluZz4oc3RhdGUsIHN0cmluZ1dpdGhv
dXREZWZhdWx0VmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IE51bGxvcHQpOwogICAgIH0KICAgICBKU1ZhbHVlIHVucmVzdHJpY3RlZERvdWJsZVZhbHVlID0g
aXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVucmVzdHJpY3RlZERvdWJsZSIpKTsKLSAg
ICBDb252ZXJ0ZXI8ZG91YmxlPjo6T3B0aW9uYWxWYWx1ZSB1bnJlc3RyaWN0ZWREb3VibGU7CiAg
ICAgaWYgKCF1bnJlc3RyaWN0ZWREb3VibGVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAg
IHVucmVzdHJpY3RlZERvdWJsZSA9IGNvbnZlcnQ8ZG91YmxlPihzdGF0ZSwgdW5yZXN0cmljdGVk
RG91YmxlVmFsdWUsIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOworICAgICAgICByZXN1bHQu
dW5yZXN0cmljdGVkRG91YmxlID0gY29udmVydDxkb3VibGU+KHN0YXRlLCB1bnJlc3RyaWN0ZWRE
b3VibGVWYWx1ZSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CiAgICAgfQogICAgIEpTVmFsdWUgdW5y
ZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNV
bmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
c3RhdGUsICJ1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCIpKTsKLSAgICBkb3VibGUgdW5y
ZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQ7CiAgICAgaWYgKCF1bnJlc3RyaWN0ZWREb3VibGVX
aXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgdW5yZXN0cmljdGVkRG91
YmxlV2l0aERlZmF1bHQgPSBjb252ZXJ0PGRvdWJsZT4oc3RhdGUsIHVucmVzdHJpY3RlZERvdWJs
ZVdpdGhEZWZhdWx0VmFsdWUsIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOworICAgICAgICBy
ZXN1bHQudW5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQgPSBjb252ZXJ0PGRvdWJsZT4oc3Rh
dGUsIHVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0VmFsdWUsIFNob3VsZEFsbG93Tm9uRmlu
aXRlOjpZZXMpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxv
cHQpOwogICAgIH0gZWxzZQotICAgICAgICB1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCA9
IDA7CisgICAgICAgIHJlc3VsdC51bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCA9IDA7CiAg
ICAgSlNWYWx1ZSB1bnJlc3RyaWN0ZWRGbG9hdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBq
c1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgInVucmVzdHJpY3RlZEZsb2F0IikpOwotICAgIENvbnZlcnRlcjxmbG9hdD46Ok9w
dGlvbmFsVmFsdWUgdW5yZXN0cmljdGVkRmxvYXQ7CiAgICAgaWYgKCF1bnJlc3RyaWN0ZWRGbG9h
dFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgdW5yZXN0cmljdGVkRmxvYXQgPSBjb252
ZXJ0PGZsb2F0PihzdGF0ZSwgdW5yZXN0cmljdGVkRmxvYXRWYWx1ZSwgU2hvdWxkQWxsb3dOb25G
aW5pdGU6Olllcyk7CisgICAgICAgIHJlc3VsdC51bnJlc3RyaWN0ZWRGbG9hdCA9IGNvbnZlcnQ8
ZmxvYXQ+KHN0YXRlLCB1bnJlc3RyaWN0ZWRGbG9hdFZhbHVlLCBTaG91bGRBbGxvd05vbkZpbml0
ZTo6WWVzKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0
KTsKICAgICB9CiAgICAgSlNWYWx1ZSB1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUg
PSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5yZXN0cmljdGVkRmxvYXRXaXRoRGVm
YXVsdCIpKTsKLSAgICBmbG9hdCB1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0OwogICAgIGlm
ICghdW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAg
ICAgICAgdW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8ZmxvYXQ+KHN0YXRl
LCB1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUsIFNob3VsZEFsbG93Tm9uRmluaXRl
OjpZZXMpOworICAgICAgICByZXN1bHQudW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCA9IGNv
bnZlcnQ8ZmxvYXQ+KHN0YXRlLCB1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUsIFNo
b3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIE51bGxvcHQpOwogICAgIH0gZWxzZQotICAgICAgICB1bnJlc3RyaWN0ZWRGbG9h
dFdpdGhEZWZhdWx0ID0gMDsKKyAgICAgICAgcmVzdWx0LnVucmVzdHJpY3RlZEZsb2F0V2l0aERl
ZmF1bHQgPSAwOwogICAgIEpTVmFsdWUgdW5zaWduZWRJbnRlZ2VyVmFsdWUgPSBpc051bGxPclVu
ZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAidW5zaWduZWRJbnRlZ2VyIikpOwotICAgIENvbnZlcnRlcjx1
aW50MzJfdD46Ok9wdGlvbmFsVmFsdWUgdW5zaWduZWRJbnRlZ2VyOwogICAgIGlmICghdW5zaWdu
ZWRJbnRlZ2VyVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICB1bnNpZ25lZEludGVnZXIg
PSBjb252ZXJ0PHVpbnQzMl90PihzdGF0ZSwgdW5zaWduZWRJbnRlZ2VyVmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pOworICAgICAgICByZXN1bHQudW5zaWduZWRJbnRlZ2VyID0gY29udmVydDx1aW50
MzJfdD4oc3RhdGUsIHVuc2lnbmVkSW50ZWdlclZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKICAgICB9CiAg
ICAgSlNWYWx1ZSB1bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRl
ZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgInVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0IikpOwotICAgIHVp
bnQzMl90IHVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0OwogICAgIGlmICghdW5zaWduZWRJbnRl
Z2VyV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHVuc2lnbmVkSW50
ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydDx1aW50MzJfdD4oc3RhdGUsIHVuc2lnbmVkSW50ZWdl
cldpdGhEZWZhdWx0VmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgICAgICByZXN1bHQudW5z
aWduZWRJbnRlZ2VyV2l0aERlZmF1bHQgPSBjb252ZXJ0PHVpbnQzMl90PihzdGF0ZSwgdW5zaWdu
ZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CiAgICAgfSBlbHNlCi0gICAg
ICAgIHVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0ID0gMDsKKyAgICAgICAgcmVzdWx0LnVuc2ln
bmVkSW50ZWdlcldpdGhEZWZhdWx0ID0gMDsKICAgICBKU1ZhbHVlIHVuc2lnbmVkTGFyZ2VJbnRl
Z2VyVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5zaWduZWRMYXJnZUlu
dGVnZXIiKSk7Ci0gICAgQ29udmVydGVyPHVpbnQ2NF90Pjo6T3B0aW9uYWxWYWx1ZSB1bnNpZ25l
ZExhcmdlSW50ZWdlcjsKICAgICBpZiAoIXVuc2lnbmVkTGFyZ2VJbnRlZ2VyVmFsdWUuaXNVbmRl
ZmluZWQoKSkgewotICAgICAgICB1bnNpZ25lZExhcmdlSW50ZWdlciA9IGNvbnZlcnQ8dWludDY0
X3Q+KHN0YXRlLCB1bnNpZ25lZExhcmdlSW50ZWdlclZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsK
KyAgICAgICAgcmVzdWx0LnVuc2lnbmVkTGFyZ2VJbnRlZ2VyID0gY29udmVydDx1aW50NjRfdD4o
c3RhdGUsIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyVmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwogICAgIH0KICAg
ICBKU1ZhbHVlIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9y
VW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0Iikp
OwotICAgIHVpbnQ2NF90IHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQ7CiAgICAgaWYg
KCF1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewot
ICAgICAgICB1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydDx1aW50NjRf
dD4oc3RhdGUsIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSwgTm9ybWFsQ29u
dmVyc2lvbik7CisgICAgICAgIHJlc3VsdC51bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0
ID0gY29udmVydDx1aW50NjRfdD4oc3RhdGUsIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1
bHRWYWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgTnVsbG9wdCk7CiAgICAgfSBlbHNlCi0gICAgICAgIHVuc2lnbmVkTGFyZ2VJ
bnRlZ2VyV2l0aERlZmF1bHQgPSAwOwotICAgIHJldHVybiBUZXN0T2JqOjpEaWN0aW9uYXJ5IHsg
V1RGTW92ZShlbnVtZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHQpLCBXVEZNb3ZlKGVudW1lcmF0
aW9uVmFsdWVXaXRoRGVmYXVsdCksIFdURk1vdmUoZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0
cmluZ0RlZmF1bHQpLCBXVEZNb3ZlKHN0cmluZ1dpdGhEZWZhdWx0KSwgV1RGTW92ZShzdHJpbmdX
aXRob3V0RGVmYXVsdCksIFdURk1vdmUoYm9vbGVhbldpdGhEZWZhdWx0KSwgV1RGTW92ZShib29s
ZWFuV2l0aG91dERlZmF1bHQpLCBXVEZNb3ZlKHNlcXVlbmNlT2ZTdHJpbmdzKSwgV1RGTW92ZShy
ZXN0cmljdGVkRG91YmxlKSwgV1RGTW92ZSh1bnJlc3RyaWN0ZWREb3VibGUpLCBXVEZNb3ZlKHJl
c3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCksIFdURk1vdmUodW5yZXN0cmljdGVkRG91YmxlV2l0
aERlZmF1bHQpLCBXVEZNb3ZlKHJlc3RyaWN0ZWRGbG9hdCksIFdURk1vdmUodW5yZXN0cmljdGVk
RmxvYXQpLCBXVEZNb3ZlKHJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0KSwgV1RGTW92ZSh1bnJl
c3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0KSwgV1RGTW92ZShzbWFsbEludGVnZXJDbGFtcGVkKSwg
V1RGTW92ZShzbWFsbEludGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUoc21hbGxVbnNpZ25lZElu
dGVnZXJFbmZvcmNlZFJhbmdlKSwgV1RGTW92ZShzbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhEZWZh
dWx0KSwgV1RGTW92ZShpbnRlZ2VyKSwgV1RGTW92ZShpbnRlZ2VyV2l0aERlZmF1bHQpLCBXVEZN
b3ZlKHVuc2lnbmVkSW50ZWdlciksIFdURk1vdmUodW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQp
LCBXVEZNb3ZlKGxhcmdlSW50ZWdlciksIFdURk1vdmUobGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQp
LCBXVEZNb3ZlKHVuc2lnbmVkTGFyZ2VJbnRlZ2VyKSwgV1RGTW92ZSh1bnNpZ25lZExhcmdlSW50
ZWdlcldpdGhEZWZhdWx0KSwgV1RGTW92ZShudWxsYWJsZU5vZGUpLCBXVEZNb3ZlKGFueVZhbHVl
KSwgV1RGTW92ZShhbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdCksIFdURk1vdmUoYW55VHlwZWRlZlZh
bHVlKSwgZGljdGlvbmFyeU1lbWJlci52YWx1ZSgpIH07CisgICAgICAgIHJlc3VsdC51bnNpZ25l
ZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0ID0gMDsKKyAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQp
OwogfQogCiB0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxk
Tm90VG9sZXJhdGVOdWxsPiBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5VGhh
dFNob3VsZE5vdFRvbGVyYXRlTnVsbD4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
QEAgLTcwNyw0MCArNjc2LDM4IEBAIHRlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6RGljdGlv
bmFyeVRoYXRTaG91bGROb3RUb2xlcmF0ZU51bGw+IGNvbnZlcnREaWN0aW9uCiAgICAgICAgIHRo
cm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBOdWxsb3B0
OwogICAgIH0KKyAgICBUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZE5vdFRvbGVyYXRlTnVs
bCByZXN1bHQ7CiAgICAgSlNWYWx1ZSBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSA9IGlzTnVs
bE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJib29sZWFuV2l0aG91dERlZmF1bHQiKSk7Ci0gICAg
Q29udmVydGVyPGJvb2w+OjpPcHRpb25hbFZhbHVlIGJvb2xlYW5XaXRob3V0RGVmYXVsdDsKICAg
ICBpZiAoIWJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAg
ICAgYm9vbGVhbldpdGhvdXREZWZhdWx0ID0gY29udmVydDxib29sPihzdGF0ZSwgYm9vbGVhbldp
dGhvdXREZWZhdWx0VmFsdWUpOworICAgICAgICByZXN1bHQuYm9vbGVhbldpdGhvdXREZWZhdWx0
ID0gY29udmVydDxib29sPihzdGF0ZSwgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwogICAgIH0KICAg
ICBKU1ZhbHVlIG5vbk51bGxhYmxlTm9kZVZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1Vu
ZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgIm5vbk51bGxhYmxlTm9kZSIpKTsKLSAgICBOb2RlKiBub25OdWxsYWJsZU5vZGU7CiAg
ICAgaWYgKCFub25OdWxsYWJsZU5vZGVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIG5v
bk51bGxhYmxlTm9kZSA9IGNvbnZlcnRXcmFwcGVyVHlwZTxOb2RlLCBKU05vZGU+KHN0YXRlLCBu
b25OdWxsYWJsZU5vZGVWYWx1ZSwgSXNOdWxsYWJsZTo6Tm8pOworICAgICAgICByZXN1bHQubm9u
TnVsbGFibGVOb2RlID0gY29udmVydFdyYXBwZXJUeXBlPE5vZGUsIEpTTm9kZT4oc3RhdGUsIG5v
bk51bGxhYmxlTm9kZVZhbHVlLCBJc051bGxhYmxlOjpObyk7CiAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7
CiAgICAgfQogICAgIEpTVmFsdWUgcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyVmFsdWUgPSBpc051
bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyIikpOwot
ICAgIFRlc3RPYmo6OkRpY3Rpb25hcnkgcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyOwogICAgIGlm
ICghcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAg
ICByZXF1aXJlZERpY3Rpb25hcnlNZW1iZXIgPSBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpE
aWN0aW9uYXJ5PihzdGF0ZSwgcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyVmFsdWUpOworICAgICAg
ICBPcHRpb25hbDxUZXN0T2JqOjpEaWN0aW9uYXJ5PiByZXF1aXJlZERpY3Rpb25hcnlNZW1iZXIg
PSBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5PihzdGF0ZSwgcmVxdWlyZWRE
aWN0aW9uYXJ5TWVtYmVyVmFsdWUpLnZhbHVlKCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgTnVsbG9wdCk7CisgICAgICAgIHJlc3VsdC5yZXF1aXJlZERpY3Rpb25h
cnlNZW1iZXIgPSByZXF1aXJlZERpY3Rpb25hcnlNZW1iZXIudmFsdWUoKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICBy
ZXR1cm4gTnVsbG9wdDsKICAgICB9CiAgICAgSlNWYWx1ZSByZXF1aXJlZEVudW1lcmF0aW9uVmFs
dWVWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXF1aXJlZEVudW1lcmF0
aW9uVmFsdWUiKSk7Ci0gICAgVGVzdE9iajo6RW51bVR5cGUgcmVxdWlyZWRFbnVtZXJhdGlvblZh
bHVlOwogICAgIGlmICghcmVxdWlyZWRFbnVtZXJhdGlvblZhbHVlVmFsdWUuaXNVbmRlZmluZWQo
KSkgewotICAgICAgICByZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUgPSBjb252ZXJ0PFRlc3RPYmo6
OkVudW1UeXBlPihzdGF0ZSwgcmVxdWlyZWRFbnVtZXJhdGlvblZhbHVlVmFsdWUpOworICAgICAg
ICByZXN1bHQucmVxdWlyZWRFbnVtZXJhdGlvblZhbHVlID0gY29udmVydDxUZXN0T2JqOjpFbnVt
VHlwZT4oc3RhdGUsIHJlcXVpcmVkRW51bWVyYXRpb25WYWx1ZVZhbHVlKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKICAgICB9IGVsc2UgewogICAg
ICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4g
TnVsbG9wdDsKICAgICB9Ci0gICAgcmV0dXJuIFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxk
Tm90VG9sZXJhdGVOdWxsIHsgV1RGTW92ZShyZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUpLCBXVEZN
b3ZlKGJvb2xlYW5XaXRob3V0RGVmYXVsdCksICpub25OdWxsYWJsZU5vZGUsIHJlcXVpcmVkRGlj
dGlvbmFyeU1lbWJlci52YWx1ZSgpIH07CisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0K
IAogdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZFRvbGVy
YXRlTnVsbD4gY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRU
b2xlcmF0ZU51bGw+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCkBAIC03NTcsMTkg
KzcyNCwxOCBAQCB0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hv
dWxkVG9sZXJhdGVOdWxsPiBjb252ZXJ0RGljdGlvbmFyeQogICAgICAgICB0aHJvd1R5cGVFcnJv
cigmc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICB9Cisg
ICAgVGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRUb2xlcmF0ZU51bGwgcmVzdWx0OwogICAg
IEpTVmFsdWUgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/
IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLCAiYm9vbGVhbldpdGhvdXREZWZhdWx0IikpOwotICAgIENvbnZlcnRlcjxib29s
Pjo6T3B0aW9uYWxWYWx1ZSBib29sZWFuV2l0aG91dERlZmF1bHQ7CiAgICAgaWYgKCFib29sZWFu
V2l0aG91dERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGJvb2xlYW5XaXRo
b3V0RGVmYXVsdCA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZh
bHVlKTsKKyAgICAgICAgcmVzdWx0LmJvb2xlYW5XaXRob3V0RGVmYXVsdCA9IGNvbnZlcnQ8Ym9v
bD4oc3RhdGUsIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKICAgICB9CiAgICAgSlNWYWx1ZSBlbnVt
ZXJhdGlvblZhbHVlVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBv
YmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZW51bWVy
YXRpb25WYWx1ZSIpKTsKLSAgICBDb252ZXJ0ZXI8VGVzdE9iajo6RW51bVR5cGU+OjpPcHRpb25h
bFZhbHVlIGVudW1lcmF0aW9uVmFsdWU7CiAgICAgaWYgKCFlbnVtZXJhdGlvblZhbHVlVmFsdWUu
aXNVbmRlZmluZWQoKSkgewotICAgICAgICBlbnVtZXJhdGlvblZhbHVlID0gY29udmVydDxUZXN0
T2JqOjpFbnVtVHlwZT4oc3RhdGUsIGVudW1lcmF0aW9uVmFsdWVWYWx1ZSk7CisgICAgICAgIHJl
c3VsdC5lbnVtZXJhdGlvblZhbHVlID0gY29udmVydDxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUs
IGVudW1lcmF0aW9uVmFsdWVWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgTnVsbG9wdCk7CiAgICAgfQotICAgIHJldHVybiBUZXN0T2JqOjpEaWN0aW9uYXJ5
VGhhdFNob3VsZFRvbGVyYXRlTnVsbCB7IFdURk1vdmUoZW51bWVyYXRpb25WYWx1ZSksIFdURk1v
dmUoYm9vbGVhbldpdGhvdXREZWZhdWx0KSB9OworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7
CiB9CiAKIHRlbXBsYXRlPD4gT3B0aW9uYWw8QWx0ZXJuYXRlRGljdGlvbmFyeU5hbWU+IGNvbnZl
cnREaWN0aW9uYXJ5PEFsdGVybmF0ZURpY3Rpb25hcnlOYW1lPihFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQpAQCAtNzg2LDE5ICs3NTIsMTggQEAgdGVtcGxhdGU8PiBPcHRpb25hbDxB
bHRlcm5hdGVEaWN0aW9uYXJ5TmFtZT4gY29udmVydERpY3Rpb25hcnk8QWx0ZXJuYXRlRGljdGlv
bmEKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKICAgICAgICAg
cmV0dXJuIE51bGxvcHQ7CiAgICAgfQorICAgIEFsdGVybmF0ZURpY3Rpb25hcnlOYW1lIHJlc3Vs
dDsKICAgICBKU1ZhbHVlIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRl
ZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKTsKLSAgICBDb252ZXJ0
ZXI8Ym9vbD46Ok9wdGlvbmFsVmFsdWUgYm9vbGVhbldpdGhvdXREZWZhdWx0OwogICAgIGlmICgh
Ym9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBib29s
ZWFuV2l0aG91dERlZmF1bHQgPSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBib29sZWFuV2l0aG91dERl
ZmF1bHRWYWx1ZSk7CisgICAgICAgIHJlc3VsdC5ib29sZWFuV2l0aG91dERlZmF1bHQgPSBjb252
ZXJ0PGJvb2w+KHN0YXRlLCBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CiAgICAgfQogICAgIEpTVmFs
dWUgZW51bWVyYXRpb25WYWx1ZVZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5l
ZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
ImVudW1lcmF0aW9uVmFsdWUiKSk7Ci0gICAgQ29udmVydGVyPFRlc3RPYmo6OkVudW1UeXBlPjo6
T3B0aW9uYWxWYWx1ZSBlbnVtZXJhdGlvblZhbHVlOwogICAgIGlmICghZW51bWVyYXRpb25WYWx1
ZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgZW51bWVyYXRpb25WYWx1ZSA9IGNvbnZl
cnQ8VGVzdE9iajo6RW51bVR5cGU+KHN0YXRlLCBlbnVtZXJhdGlvblZhbHVlVmFsdWUpOworICAg
ICAgICByZXN1bHQuZW51bWVyYXRpb25WYWx1ZSA9IGNvbnZlcnQ8VGVzdE9iajo6RW51bVR5cGU+
KHN0YXRlLCBlbnVtZXJhdGlvblZhbHVlVmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwogICAgIH0KLSAgICByZXR1cm4gQWx0ZXJuYXRlRGlj
dGlvbmFyeU5hbWUgeyBXVEZNb3ZlKGVudW1lcmF0aW9uVmFsdWUpLCBXVEZNb3ZlKGJvb2xlYW5X
aXRob3V0RGVmYXVsdCkgfTsKKyAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQogCiB0ZW1w
bGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OlBhcmVudERpY3Rpb25hcnk+IGNvbnZlcnREaWN0aW9u
YXJ5PFRlc3RPYmo6OlBhcmVudERpY3Rpb25hcnk+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUg
dmFsdWUpCkBAIC04MTUsMTkgKzc4MCwxOCBAQCB0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6
OlBhcmVudERpY3Rpb25hcnk+IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OlBhcmVudAogICAg
ICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4g
TnVsbG9wdDsKICAgICB9CisgICAgVGVzdE9iajo6UGFyZW50RGljdGlvbmFyeSByZXN1bHQ7CiAg
ICAgSlNWYWx1ZSBwYXJlbnRNZW1iZXIxVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5k
ZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0
YXRlLCAicGFyZW50TWVtYmVyMSIpKTsKLSAgICBDb252ZXJ0ZXI8Ym9vbD46Ok9wdGlvbmFsVmFs
dWUgcGFyZW50TWVtYmVyMTsKICAgICBpZiAoIXBhcmVudE1lbWJlcjFWYWx1ZS5pc1VuZGVmaW5l
ZCgpKSB7Ci0gICAgICAgIHBhcmVudE1lbWJlcjEgPSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBwYXJl
bnRNZW1iZXIxVmFsdWUpOworICAgICAgICByZXN1bHQucGFyZW50TWVtYmVyMSA9IGNvbnZlcnQ8
Ym9vbD4oc3RhdGUsIHBhcmVudE1lbWJlcjFWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CiAgICAgfQogICAgIEpTVmFsdWUgcGFyZW50TWVt
YmVyMlZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInBhcmVudE1lbWJlcjIi
KSk7Ci0gICAgQ29udmVydGVyPGJvb2w+OjpPcHRpb25hbFZhbHVlIHBhcmVudE1lbWJlcjI7CiAg
ICAgaWYgKCFwYXJlbnRNZW1iZXIyVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBwYXJl
bnRNZW1iZXIyID0gY29udmVydDxib29sPihzdGF0ZSwgcGFyZW50TWVtYmVyMlZhbHVlKTsKKyAg
ICAgICAgcmVzdWx0LnBhcmVudE1lbWJlcjIgPSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBwYXJlbnRN
ZW1iZXIyVmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51
bGxvcHQpOwogICAgIH0KLSAgICByZXR1cm4gVGVzdE9iajo6UGFyZW50RGljdGlvbmFyeSB7IFdU
Rk1vdmUocGFyZW50TWVtYmVyMiksIFdURk1vdmUocGFyZW50TWVtYmVyMSkgfTsKKyAgICByZXR1
cm4gV1RGTW92ZShyZXN1bHQpOwogfQogCiB0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OkNo
aWxkRGljdGlvbmFyeT4gY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6Q2hpbGREaWN0aW9uYXJ5
PihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQpAQCAtODQ0LDMxICs4MDgsMjggQEAg
dGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpDaGlsZERpY3Rpb25hcnk+IGNvbnZlcnREaWN0
aW9uYXJ5PFRlc3RPYmo6OkNoaWxkRGkKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0
aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgfQorICAgIFRlc3RPYmo6
OkNoaWxkRGljdGlvbmFyeSByZXN1bHQ7CiAgICAgSlNWYWx1ZSBwYXJlbnRNZW1iZXIxVmFsdWUg
PSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFyZW50TWVtYmVyMSIpKTsKLSAgICBD
b252ZXJ0ZXI8Ym9vbD46Ok9wdGlvbmFsVmFsdWUgcGFyZW50TWVtYmVyMTsKICAgICBpZiAoIXBh
cmVudE1lbWJlcjFWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHBhcmVudE1lbWJlcjEg
PSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBwYXJlbnRNZW1iZXIxVmFsdWUpOworICAgICAgICByZXN1
bHQucGFyZW50TWVtYmVyMSA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIHBhcmVudE1lbWJlcjFWYWx1
ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CiAg
ICAgfQogICAgIEpTVmFsdWUgcGFyZW50TWVtYmVyMlZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQg
PyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgInBhcmVudE1lbWJlcjIiKSk7Ci0gICAgQ29udmVydGVyPGJvb2w+OjpPcHRp
b25hbFZhbHVlIHBhcmVudE1lbWJlcjI7CiAgICAgaWYgKCFwYXJlbnRNZW1iZXIyVmFsdWUuaXNV
bmRlZmluZWQoKSkgewotICAgICAgICBwYXJlbnRNZW1iZXIyID0gY29udmVydDxib29sPihzdGF0
ZSwgcGFyZW50TWVtYmVyMlZhbHVlKTsKKyAgICAgICAgcmVzdWx0LnBhcmVudE1lbWJlcjIgPSBj
b252ZXJ0PGJvb2w+KHN0YXRlLCBwYXJlbnRNZW1iZXIyVmFsdWUpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwogICAgIH0KICAgICBKU1ZhbHVlIGNo
aWxkTWVtYmVyMVZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImNoaWxkTWVt
YmVyMSIpKTsKLSAgICBDb252ZXJ0ZXI8Ym9vbD46Ok9wdGlvbmFsVmFsdWUgY2hpbGRNZW1iZXIx
OwogICAgIGlmICghY2hpbGRNZW1iZXIxVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBj
aGlsZE1lbWJlcjEgPSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBjaGlsZE1lbWJlcjFWYWx1ZSk7Cisg
ICAgICAgIHJlc3VsdC5jaGlsZE1lbWJlcjEgPSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBjaGlsZE1l
bWJlcjFWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVs
bG9wdCk7CiAgICAgfQogICAgIEpTVmFsdWUgY2hpbGRNZW1iZXIyVmFsdWUgPSBpc051bGxPclVu
ZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAiY2hpbGRNZW1iZXIyIikpOwotICAgIENvbnZlcnRlcjxib29s
Pjo6T3B0aW9uYWxWYWx1ZSBjaGlsZE1lbWJlcjI7CiAgICAgaWYgKCFjaGlsZE1lbWJlcjJWYWx1
ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGNoaWxkTWVtYmVyMiA9IGNvbnZlcnQ8Ym9vbD4o
c3RhdGUsIGNoaWxkTWVtYmVyMlZhbHVlKTsKKyAgICAgICAgcmVzdWx0LmNoaWxkTWVtYmVyMiA9
IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIGNoaWxkTWVtYmVyMlZhbHVlKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKICAgICB9Ci0gICAgcmV0dXJuIFRl
c3RPYmo6OkNoaWxkRGljdGlvbmFyeSB7IFdURk1vdmUocGFyZW50TWVtYmVyMiksIFdURk1vdmUo
cGFyZW50TWVtYmVyMSksIFdURk1vdmUoY2hpbGRNZW1iZXIyKSwgV1RGTW92ZShjaGlsZE1lbWJl
cjEpIH07CisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAogLy8gRnVuY3Rpb25zCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U3RhbmRhbG9uZURpY3Rpb25hcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5LmNwcAppbmRleCAwMDViM2I1MmM1
YzBiZDI5OTMzZjE4ZmJkYTY5MWNhMmM4ZDM1ZDUzLi44MDFhNzBhNDg1MmNkNThkNGE4NWYzNGE1
MzZiOWFkZGMzY2EwMTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U3RhbmRhbG9uZURpY3Rpb25hcnkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdGFuZGFsb25lRGljdGlvbmFy
eS5jcHAKQEAgLTQwLDE5ICs0MCwxOCBAQCB0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RTdGFuZGFs
b25lRGljdGlvbmFyeT4gY29udmVydERpY3Rpb25hcnk8VGVzdFN0YW5kYWxvbmVEaQogICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gTnVs
bG9wdDsKICAgICB9CisgICAgVGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5IHJlc3VsdDsKICAgICBK
U1ZhbHVlIGJvb2xNZW1iZXJWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQo
KSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJi
b29sTWVtYmVyIikpOwotICAgIENvbnZlcnRlcjxib29sPjo6T3B0aW9uYWxWYWx1ZSBib29sTWVt
YmVyOwogICAgIGlmICghYm9vbE1lbWJlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAg
Ym9vbE1lbWJlciA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIGJvb2xNZW1iZXJWYWx1ZSk7CisgICAg
ICAgIHJlc3VsdC5ib29sTWVtYmVyID0gY29udmVydDxib29sPihzdGF0ZSwgYm9vbE1lbWJlclZh
bHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsK
ICAgICB9CiAgICAgSlNWYWx1ZSBzdHJpbmdNZW1iZXJWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVk
ID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJzdHJpbmdNZW1iZXIiKSk7Ci0gICAgQ29udmVydGVyPFN0cmluZz46Ok9w
dGlvbmFsVmFsdWUgc3RyaW5nTWVtYmVyOwogICAgIGlmICghc3RyaW5nTWVtYmVyVmFsdWUuaXNV
bmRlZmluZWQoKSkgewotICAgICAgICBzdHJpbmdNZW1iZXIgPSBjb252ZXJ0PFN0cmluZz4oc3Rh
dGUsIHN0cmluZ01lbWJlclZhbHVlKTsKKyAgICAgICAgcmVzdWx0LnN0cmluZ01lbWJlciA9IGNv
bnZlcnQ8U3RyaW5nPihzdGF0ZSwgc3RyaW5nTWVtYmVyVmFsdWUpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwogICAgIH0KLSAgICByZXR1cm4gVGVz
dFN0YW5kYWxvbmVEaWN0aW9uYXJ5IHsgV1RGTW92ZShib29sTWVtYmVyKSwgV1RGTW92ZShzdHJp
bmdNZW1iZXIpIH07CisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZEV2
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkRXZlbnQuaAppbmRleCAyYzljOGVh
MmI1MTMwMmM1YjY1Yzk0ZDg1ZTQ2NTllY2M5MTcxMDdmLi4wYTg2NDQxMGUyY2YyYzE4ZTU1Mjhh
NDg4MjU1NDAwOTQ3ZDE0Y2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJv
YXJkRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkRXZlbnQuaApAQCAt
MzQsMTMgKzM0LDcgQEAgY2xhc3MgQ2xpcGJvYXJkRXZlbnQgZmluYWwgOiBwdWJsaWMgRXZlbnQg
ewogcHVibGljOgogICAgIHZpcnR1YWwgfkNsaXBib2FyZEV2ZW50KCk7CiAKLSAgICBzdHJ1Y3Qg
SW5pdCA6IHB1YmxpYyBFdmVudEluaXQgewotICAgICAgICBJbml0KGJvb2wgYnViYmxlcywgYm9v
bCBjYW5jZWxhYmxlLCBib29sIGNvbXBvc2VkLCBSZWZQdHI8RGF0YVRyYW5zZmVyPiYmIGNsaXBi
b2FyZERhdGEpCi0gICAgICAgICAgICA6IEV2ZW50SW5pdChidWJibGVzLCBjYW5jZWxhYmxlLCBj
b21wb3NlZCkKLSAgICAgICAgICAgICwgY2xpcGJvYXJkRGF0YShXVEZNb3ZlKGNsaXBib2FyZERh
dGEpKQotICAgICAgICB7Ci0gICAgICAgIH0KLQorICAgIHN0cnVjdCBJbml0IDogRXZlbnRJbml0
IHsKICAgICAgICAgUmVmUHRyPERhdGFUcmFuc2Zlcj4gY2xpcGJvYXJkRGF0YTsKICAgICB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRXZlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9DdXN0b21FdmVudC5oCmluZGV4IGFiMWMxMzNjMjk2ODc5NWZkMWY3OWFjY2Qw
ZjY1YzNjN2ZjOGExNDUuLmUwNzMxZjhmZTZjMzVhZWNmYjhlZTYwNjE0NTIxNWM3YjQ0OTJmOTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FdmVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9DdXN0b21FdmVudC5oCkBAIC00MSwxMiArNDEsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEN1c3RvbUV2ZW50KGlzVHJ1c3RlZCkpOwogICAg
IH0KIAotICAgIHN0cnVjdCBJbml0IDogcHVibGljIEV2ZW50SW5pdCB7Ci0gICAgICAgIEluaXQo
Ym9vbCBidWJibGVzLCBib29sIGNhbmNlbGFibGUsIGJvb2wgY29tcG9zZWQsIEpTQzo6SlNWYWx1
ZSBkZXRhaWwpCi0gICAgICAgICAgICA6IEV2ZW50SW5pdChidWJibGVzLCBjYW5jZWxhYmxlLCBj
b21wb3NlZCkKLSAgICAgICAgICAgICwgZGV0YWlsKGRldGFpbCkKLSAgICAgICAgeyB9Ci0KKyAg
ICBzdHJ1Y3QgSW5pdCA6IEV2ZW50SW5pdCB7CiAgICAgICAgIEpTQzo6SlNWYWx1ZSBkZXRhaWw7
CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50SW5pdC5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50SW5pdC5oCmluZGV4IDUxZDYzMjg2NjYzZTA1MTcxYmIy
MDE1YzA2NzliZTUwMjJhNjIyM2QuLmE1NDhmNGU4NTRkNDRmOTk0NmI5OTZkNDc1MTljMzFhZTU1
NWVmNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudEluaXQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnRJbml0LmgKQEAgLTI4LDEzICsyOCw2IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBFdmVudEluaXQgewotICAgIEV2ZW50SW5pdCgpID0gZGVm
YXVsdDsKLSAgICBFdmVudEluaXQoYm9vbCBidWJibGVzLCBib29sIGNhbmNlbGFibGUsIGJvb2wg
Y29tcG9zZWQpCi0gICAgICAgIDogYnViYmxlcyhidWJibGVzKQotICAgICAgICAsIGNhbmNlbGFi
bGUoY2FuY2VsYWJsZSkKLSAgICAgICAgLCBjb21wb3NlZChjb21wb3NlZCkKLSAgICB7IH0KLQog
ICAgIGJvb2wgYnViYmxlcyB7IGZhbHNlIH07CiAgICAgYm9vbCBjYW5jZWxhYmxlIHsgZmFsc2Ug
fTsKICAgICBib29sIGNvbXBvc2VkIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudE1vZGlmaWVySW5pdC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TW9k
aWZpZXJJbml0LmgKaW5kZXggZTNlZTBlMDU5ZWI3YjJiMzIwODk3ZDdkYzUzMDAwOGY5OGYyNDFi
NS4uODJmZTU0ZTE3ZWUzM2M4ZDk0MGVmODU3OTAzNDUyZDk3NWY4MmE4MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TW9kaWZpZXJJbml0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50TW9kaWZpZXJJbml0LmgKQEAgLTI5LDIwICsyOSw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotc3RydWN0IEV2ZW50TW9kaWZpZXJJbml0IDogcHVibGljIFVJRXZlbnRJ
bml0IHsKLSAgICBFdmVudE1vZGlmaWVySW5pdCgpID0gZGVmYXVsdDsKLQotICAgIEV2ZW50TW9k
aWZpZXJJbml0KGJvb2wgYnViYmxlcywgYm9vbCBjYW5jZWxhYmxlLCBib29sIGNvbXBvc2VkLCBS
ZWZQdHI8RE9NV2luZG93PiYmIHZpZXcsIGludCBkZXRhaWwsCi0gICAgICAgIGJvb2wgY3RybEtl
eSwgYm9vbCBzaGlmdEtleSwgYm9vbCBhbHRLZXksIGJvb2wgbWV0YUtleSwgYm9vbCBtb2RpZmll
ckFsdEdyYXBoLCBib29sIG1vZGlmaWVyQ2Fwc0xvY2spCi0gICAgICAgICAgICA6IFVJRXZlbnRJ
bml0KGJ1YmJsZXMsIGNhbmNlbGFibGUsIGNvbXBvc2VkLCBXVEZNb3ZlKHZpZXcpLCBkZXRhaWwp
Ci0gICAgICAgICAgICAsIGN0cmxLZXkoY3RybEtleSkKLSAgICAgICAgICAgICwgc2hpZnRLZXko
c2hpZnRLZXkpCi0gICAgICAgICAgICAsIGFsdEtleShhbHRLZXkpCi0gICAgICAgICAgICAsIG1l
dGFLZXkobWV0YUtleSkKLSAgICAgICAgICAgICwgbW9kaWZpZXJBbHRHcmFwaChtb2RpZmllckFs
dEdyYXBoKQotICAgICAgICAgICAgLCBtb2RpZmllckNhcHNMb2NrKG1vZGlmaWVyQ2Fwc0xvY2sp
Ci0gICAgICAgIHsgfQotCitzdHJ1Y3QgRXZlbnRNb2RpZmllckluaXQgOiBVSUV2ZW50SW5pdCB7
CiAgICAgYm9vbCBjdHJsS2V5IHsgZmFsc2UgfTsKICAgICBib29sIHNoaWZ0S2V5IHsgZmFsc2Ug
fTsKICAgICBib29sIGFsdEtleSB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVu
dC5jcHAKaW5kZXggODQ1MjAzMmUxNWNhYzY1OTY5NGUxNjQ4NWE1MTBmZTI2NjMzMTYwNi4uMmNi
ODQ0M2Q0OGIyMWVlMGQwYWZiYTkxYWFmOGFkMzA5OWIyZjZlMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9L
ZXlib2FyZEV2ZW50LmNwcApAQCAtMTM1LDcgKzEzNSw3IEBAIEtleWJvYXJkRXZlbnQ6OktleWJv
YXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGNvbnN0IEluaXQmIGluaXRp
YWxpCiAgICAgLCBtX2NvZGUoaW5pdGlhbGl6ZXIuY29kZSkKICNlbmRpZgogICAgICwgbV9rZXlJ
ZGVudGlmaWVyKGluaXRpYWxpemVyLmtleUlkZW50aWZpZXIpCi0gICAgLCBtX2xvY2F0aW9uKGlu
aXRpYWxpemVyLmxvY2F0aW9uKQorICAgICwgbV9sb2NhdGlvbihpbml0aWFsaXplci5rZXlMb2Nh
dGlvbiA/ICppbml0aWFsaXplci5rZXlMb2NhdGlvbiA6IGluaXRpYWxpemVyLmxvY2F0aW9uKQog
ICAgICwgbV9yZXBlYXQoaW5pdGlhbGl6ZXIucmVwZWF0KQogICAgICwgbV9pc0NvbXBvc2luZyhp
bml0aWFsaXplci5pc0NvbXBvc2luZykKICNpZiBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
S2V5Ym9hcmRFdmVudC5oCmluZGV4IDhhMWE3NTQ2NWJhMjVjYmVlOWZlOTBmOWVlZmU1NWI5MWFl
ZGFhZWEuLmVjN2RlOTZiOGQzNzczN2JmMTEwMTM2YjUyMjI5NWI3ZTk4YTE2YWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0tleWJvYXJkRXZlbnQuaApAQCAtNTQsMTkgKzU0LDYgQEAgcHVibGljOgogICAgIH0K
IAogICAgIHN0cnVjdCBJbml0IDogcHVibGljIEV2ZW50TW9kaWZpZXJJbml0IHsKLSAgICAgICAg
SW5pdChib29sIGJ1YmJsZXMsIGJvb2wgY2FuY2VsYWJsZSwgYm9vbCBjb21wb3NlZCwgUmVmUHRy
PERPTVdpbmRvdz4mJiB2aWV3LCBpbnQgZGV0YWlsLAotICAgICAgICAgICAgYm9vbCBjdHJsS2V5
LCBib29sIHNoaWZ0S2V5LCBib29sIGFsdEtleSwgYm9vbCBtZXRhS2V5LCBib29sIG1vZGlmaWVy
QWx0R3JhcGgsIGJvb2wgbW9kaWZpZXJDYXBzTG9jaywKLSAgICAgICAgICAgIFN0cmluZyBrZXks
IFN0cmluZyBjb2RlLCBPcHRpb25hbDx1bnNpZ25lZD4gbG9jYXRpb24sIGJvb2wgcmVwZWF0LCBi
b29sIGlzQ29tcG9zaW5nLCBTdHJpbmcga2V5SWRlbnRpZmllciwKLSAgICAgICAgICAgIE9wdGlv
bmFsPHVuc2lnbmVkPiBrZXlMb2NhdGlvbikKLSAgICAgICAgICAgICAgICA6IEV2ZW50TW9kaWZp
ZXJJbml0KGJ1YmJsZXMsIGNhbmNlbGFibGUsIGNvbXBvc2VkLCBXVEZNb3ZlKHZpZXcpLCBkZXRh
aWwsIGN0cmxLZXksIHNoaWZ0S2V5LCBhbHRLZXksIG1ldGFLZXksIG1vZGlmaWVyQWx0R3JhcGgs
IG1vZGlmaWVyQ2Fwc0xvY2spCi0gICAgICAgICAgICAgICAgLCBrZXkoa2V5KQotICAgICAgICAg
ICAgICAgICwgY29kZShjb2RlKQotICAgICAgICAgICAgICAgICwgbG9jYXRpb24obG9jYXRpb24g
PyAqbG9jYXRpb24gOiBrZXlMb2NhdGlvbi52YWx1ZU9yKERPTV9LRVlfTE9DQVRJT05fU1RBTkRB
UkQpKQotICAgICAgICAgICAgICAgICwgcmVwZWF0KHJlcGVhdCkKLSAgICAgICAgICAgICAgICAs
IGlzQ29tcG9zaW5nKGlzQ29tcG9zaW5nKQotICAgICAgICAgICAgICAgICwga2V5SWRlbnRpZmll
cihrZXlJZGVudGlmaWVyKQotICAgICAgICAgICAgeyB9Ci0KICAgICAgICAgU3RyaW5nIGtleTsK
ICAgICAgICAgU3RyaW5nIGNvZGU7CiAgICAgICAgIHVuc2lnbmVkIGxvY2F0aW9uOwpAQCAtNzUs
NiArNjIsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgLy8gTGVnYWN5LgogICAgICAgICBTdHJpbmcg
a2V5SWRlbnRpZmllcjsKKyAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGtleUxvY2F0aW9uOwog
ICAgIH07CiAKICAgICBzdGF0aWMgUmVmPEtleWJvYXJkRXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGUsIGNvbnN0IEluaXQmIGluaXRpYWxpemVyLCBJc1RydXN0ZWQgaXNUcnVz
dGVkID0gSXNUcnVzdGVkOjpObykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9LZXli
b2FyZEV2ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmlkbAppbmRl
eCBiMjNlYzRkZTc5MjExMmNkNzA4YmJkOWY0MjU1YWYzYmU0NjUwZmY5Li41MTAxYjBjNTNjZDkx
ZmI2ODcyZTY5Yjc5YWU2ZjMxMGIzNDBiZDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vS2V5Ym9hcmRFdmVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZl
bnQuaWRsCkBAIC01Niw3ICs1Niw3IEBACiBkaWN0aW9uYXJ5IEtleWJvYXJkRXZlbnRJbml0IDog
RXZlbnRNb2RpZmllckluaXQgewogICAgIERPTVN0cmluZyBrZXkgPSAiIjsKICAgICBET01TdHJp
bmcgY29kZSA9ICIiOwotICAgIHVuc2lnbmVkIGxvbmcgbG9jYXRpb247CisgICAgdW5zaWduZWQg
bG9uZyBsb2NhdGlvbiA9IDA7CiAgICAgYm9vbGVhbiByZXBlYXQgPSBmYWxzZTsKICAgICBib29s
ZWFuIGlzQ29tcG9zaW5nID0gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9VSUV2ZW50SW5pdC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1VJRXZlbnRJbml0LmgKaW5kZXgg
MGE4NGJiYzM4ZGY1M2M1M2ViODg5YTY2MjljMzcyMmJmOWUyMWUxMC4uMDMxNmJjMDZmNTY4ZTUz
OTE2ZGY2OTZmNDE0NDViYTlmYzMxZmYzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1VJRXZlbnRJbml0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1VJRXZlbnRJbml0LmgKQEAg
LTMyLDEzICszMiw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBVSUV2ZW50SW5p
dCA6IHB1YmxpYyBFdmVudEluaXQgewotICAgIFVJRXZlbnRJbml0KCkgPSBkZWZhdWx0OwotICAg
IFVJRXZlbnRJbml0KGJvb2wgYnViYmxlcywgYm9vbCBjYW5jZWxhYmxlLCBib29sIGNvbXBvc2Vk
LCBSZWZQdHI8RE9NV2luZG93PiYmIHZpZXcsIGludCBkZXRhaWwpCi0gICAgICAgIDogRXZlbnRJ
bml0KGJ1YmJsZXMsIGNhbmNlbGFibGUsIGNvbXBvc2VkKQotICAgICAgICAsIHZpZXcoV1RGTW92
ZSh2aWV3KSkKLSAgICAgICAgLCBkZXRhaWwoZGV0YWlsKQotICAgIHsgfQotCiAgICAgUmVmUHRy
PERPTVdpbmRvdz4gdmlldzsKICAgICBpbnQgZGV0YWlsIHsgMCB9OwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcAppbmRleCBhOGM1MGE4ZjUyNmIxYzUxM2YxZTQxZTZiN2MxYjhkMWM1NGI3
NTk4Li4wMjExNDhhMDM4OGE0NzQzOGYxZjE3YWFmY2M1YzA3YmRkN2JmMGJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCkBAIC04ODEsOSArODgxLDEzIEBAIGJvb2wgRWRpdG9yOjpkaXNw
YXRjaENQUEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBEYXRhVHJhbnNmZXJB
Y2Nlc3NQCiAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgUmVm
UHRyPERhdGFUcmFuc2Zlcj4gZGF0YVRyYW5zZmVyID0gRGF0YVRyYW5zZmVyOjpjcmVhdGVGb3JD
b3B5QW5kUGFzdGUocG9saWN5KTsKKyAgICBhdXRvIGRhdGFUcmFuc2ZlciA9IERhdGFUcmFuc2Zl
cjo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKHBvbGljeSk7CiAKLSAgICBhdXRvIGV2ZW50ID0gQ2xp
cGJvYXJkRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIHsgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGRhdGFU
cmFuc2Zlci5nZXQoKSB9LCBFdmVudDo6SXNUcnVzdGVkOjpZZXMpOworICAgIENsaXBib2FyZEV2
ZW50OjpJbml0IGluaXQ7CisgICAgaW5pdC5idWJibGVzID0gdHJ1ZTsKKyAgICBpbml0LmNhbmNl
bGFibGUgPSB0cnVlOworICAgIGluaXQuY2xpcGJvYXJkRGF0YSA9IGRhdGFUcmFuc2Zlci5wdHIo
KTsKKyAgICBhdXRvIGV2ZW50ID0gQ2xpcGJvYXJkRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIGlu
aXQsIEV2ZW50OjpJc1RydXN0ZWQ6Olllcyk7CiAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2
ZW50KTsKICAgICBib29sIG5vRGVmYXVsdFByb2Nlc3NpbmcgPSBldmVudC0+ZGVmYXVsdFByZXZl
bnRlZCgpOwogICAgIGlmIChub0RlZmF1bHRQcm9jZXNzaW5nICYmIHBvbGljeSA9PSBEYXRhVHJh
bnNmZXJBY2Nlc3NQb2xpY3k6OldyaXRhYmxlKSB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>