<?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>69366</bug_id>
          
          <creation_ts>2011-10-04 13:25:48 -0700</creation_ts>
          <short_desc>Web Inspector: CodeGenerator should not use pointers for out params of RefPtr type.</short_desc>
          <delta_ts>2011-12-21 00:56:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>74927</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Vsevolod Vlasov">vsevik</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>ossy</cc>
    
    <cc>peter.rybin</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>rniwa</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>477873</commentid>
    <comment_count>0</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2011-10-04 13:25:48 -0700</bug_when>
    <thetext>CodeGenerator should not use pointers for out params of RefPtr type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477905</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-10-04 13:52:59 -0700</bug_when>
    <thetext>It should return PassRefPtr&apos;s instead?  PassRefPtr is strictly superior to RefPtr&amp; when possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477910</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-04 13:56:18 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; It should return PassRefPtr&apos;s instead?  PassRefPtr is strictly superior to RefPtr&amp; when possible.

This is only for *out* arguments, meaning that callees are supposed to override the values of those variables. We currently use RefPtr&lt;..&gt;* result :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477914</commentid>
    <comment_count>3</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-10-04 13:58:59 -0700</bug_when>
    <thetext>In some cases we have two or more out params. As example setBreakpointByUrl, setBreakpoint, setScriptSource etc. That is the reason do not pass these data via return statement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477916</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-04 14:02:19 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #1)
&gt; &gt; It should return PassRefPtr&apos;s instead?  PassRefPtr is strictly superior to RefPtr&amp; when possible.
&gt; 
&gt; This is only for *out* arguments, meaning that callees are supposed to override the values of those variables. We currently use RefPtr&lt;..&gt;* result :(

It&apos;s fine to use out arguments but it&apos;s NOT okay to use raw pointers for that. I&apos;m actually surprised that there&apos;s no mentioning of this in WebKit&apos;s style guideline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477924</commentid>
    <comment_count>5</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-10-04 14:06:09 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; It should return PassRefPtr&apos;s instead?  PassRefPtr is strictly superior to RefPtr&amp; when possible.

I thought that RefPtr&amp; was the preferred way in case of multiple out parameters. It was allowed in the style:http://trac.webkit.org/changeset/94803 and supported my Darin and Maciej on a recent thread.

&gt; It&apos;s fine to use out arguments but it&apos;s NOT okay to use raw pointers for that. I&apos;m actually surprised that there&apos;s no mentioning of this in WebKit&apos;s style guideline.

Although not in the guidelines, references are typically expected to be used, so your original request makes perfect sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524186</commentid>
    <comment_count>6</comment_count>
      <attachid>119918</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-19 14:15:59 -0800</bug_when>
    <thetext>Created attachment 119918
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524188</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-19 14:18:22 -0800</bug_when>
    <thetext>Attachment 119918 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/inspector/InspectorCSSAgent.cpp:596:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.h:94:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorProfilerAgent.h:84:  The parameter name &quot;error&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorProfilerAgent.h:85:  The parameter name &quot;error&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 4 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524547</commentid>
    <comment_count>8</comment_count>
      <attachid>119918</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-12-20 05:20:45 -0800</bug_when>
    <thetext>Comment on attachment 119918
Patch

Clearing flags on attachment: 119918

Committed r103322: &lt;http://trac.webkit.org/changeset/103322&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524548</commentid>
    <comment_count>9</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-12-20 05:20:57 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524559</commentid>
    <comment_count>10</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-12-20 05:52:31 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 119918 [details])
&gt; Clearing flags on attachment: 119918
&gt; 
&gt; Committed r103322: &lt;http://trac.webkit.org/changeset/103322&gt;

Reopen, because it made 7 inspector tests crash on the Qt bot:
http://build.webkit.org/results/Qt%20Linux%20Release/r103322%20(41262)/results.html

Could you check it, please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524584</commentid>
    <comment_count>11</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-12-20 06:40:46 -0800</bug_when>
    <thetext>Here is the problem from Qt debug bot:

ASSERTION FAILED: value
../../../../Source/WebCore/inspector/InspectorValues.h(321) : void WebCore::InspectorArray::pushObject(WTF::PassRefPtr&lt;WebCore::InspectorObject&gt;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524698</commentid>
    <comment_count>12</comment_count>
      <attachid>120048</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-20 11:15:57 -0800</bug_when>
    <thetext>Created attachment 120048
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524700</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-20 11:17:27 -0800</bug_when>
    <thetext>Attachment 120048 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/inspector/InspectorCSSAgent.cpp:596:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.h:94:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorProfilerAgent.h:84:  The parameter name &quot;error&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorProfilerAgent.h:85:  The parameter name &quot;error&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 4 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524702</commentid>
    <comment_count>14</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-20 11:20:45 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Here is the problem from Qt debug bot:
&gt; 
&gt; ASSERTION FAILED: value
&gt; ../../../../Source/WebCore/inspector/InspectorValues.h(321) : void WebCore::InspectorArray::pushObject(WTF::PassRefPtr&lt;WebCore::InspectorObject&gt;)

Csaba, thank you for investigating.

A condition against NULL pointer was lost in the original patch. New patch should fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525094</commentid>
    <comment_count>15</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-12-20 21:51:58 -0800</bug_when>
    <thetext>Committed r103389: &lt;http://trac.webkit.org/changeset/103389&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525173</commentid>
    <comment_count>16</comment_count>
      <attachid>120048</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-12-21 00:56:58 -0800</bug_when>
    <thetext>Comment on attachment 120048
Patch

Cleared r? from landed patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119918</attachid>
            <date>2011-12-19 14:15:59 -0800</date>
            <delta_ts>2011-12-20 11:15:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69366-20111220021556.patch</filename>
            <type>text/plain</type>
            <size>65213</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMjQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzVjNWI1NzM1MThmYzMz
NGJmYzM3NDMxYThkN2FlN2Q1MTcwY2FlOC4uMWU5ZWM3NmZlMjYzOTA4ZDZlYTljZmE1ZTU1MjI3
ZGE3MTVjOTk1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDExLTEyLTE5ICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBDb2RlR2VuZXJhdG9yIHNob3VsZCBub3QgdXNlIHBvaW50ZXJzIGZvciBvdXQgcGFyYW1zIG9m
IFJlZlB0ciB0eXBlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjkzNjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBHZW5lcmF0b3IgZml4ZWQgYW5kIGFsbCB1c2FnZXMgYXJlIGNoYW5nZWQgbWFudWFsbHku
CisKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weToKKyAgICAg
ICAgKFJhd1R5cGVzLkJhc2VUeXBlLmlzX2V2ZW50X3BhcmFtX2NoZWNrX29wdGlvbmFsKToKKyAg
ICAgICAgKFJhd1R5cGVzLkJhc2VUeXBlKToKKyAgICAgICAgKFJhd1R5cGVzLkJhc2VUeXBlLmdl
dF9vdXRwdXRfYXJndW1lbnRfcHJlZml4KToKKyAgICAgICAgKFJhd1R5cGVzLk9iamVjdC5nZXRf
b3V0cHV0X2FyZ3VtZW50X3ByZWZpeCk6CisgICAgICAgIChSYXdUeXBlcy5BcnJheS5nZXRfb3V0
cHV0X2FyZ3VtZW50X3ByZWZpeCk6CisgICAgICAgIChSYXdUeXBlcyk6CisgICAgICAgIChHZW5l
cmF0b3IucHJvY2Vzc19jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlmZXN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmdldEFwcGxpY2F0aW9uQ2FjaGVG
b3JGcmFtZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Y2xlYXJGcm9udGVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldElubGluZVN0eWxlc0Zvck5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5
bGVGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRBbGxT
dHlsZVNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3R5
bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UHJvcGVy
dHlUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9w
ZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UnVsZVNlbGVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjphZGRSdWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpzdG9wU2VsZWN0b3JQ
cm9maWxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c3RvcFNlbGVj
dG9yUHJvZmlsZXJJbXBsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQu
aDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldERvY3VtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRPTUFnZW50OjpxdWVyeVNlbGVjdG9yQWxsKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudDo6Z2V0RE9NU3RvcmFnZUVudHJpZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0
YWJhc2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50
OjpnZXREYXRhYmFzZVRhYmxlTmFtZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JE
YXRhYmFzZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJl
YWtwb2ludEJ5VXJsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6c2VhcmNoSW5Db250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnNldFNjcmlwdFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpnZXRGdW5jdGlvbkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3Rvck1lbW9yeUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck1lbW9yeUFn
ZW50OjpnZXRET01Ob2RlQ291bnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JNZW1v
cnlBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VUcmVlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVzb3VyY2VzKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZUhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRPYmplY3RCeUhlYXBPYmplY3RJZCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUnVu
dGltZUFnZW50OjpjYWxsRnVuY3Rpb25Pbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JS
dW50aW1lQWdlbnQ6OmdldFByb3BlcnRpZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JSdW50aW1lQWdlbnQuaDoKKwogMjAxMS0xMi0xOSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFw
cGxlLmNvbT4KIAogICAgICAgICBNZWRpYUNvbnRyb2xsZXI6IGNhbm5vdCBzY3J1YiB3aGlsZSBw
bGF5aW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucHkgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5weQppbmRleCBkY2RiMzJkNTU2NDlmYTkwNTExM2Q5OTkyNDEyNDkwZGU1YWY4YTky
Li5iYmQ1YjllMDc2ZjlkZDk4NmJkYjM3OWRkYTA2MmRlNDAzZDJmMWVjIDEwMDc1NQotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQpAQCAtMjUx
LDYgKzI1MSwxMCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgICAgICBkZWYgaXNfZXZl
bnRfcGFyYW1fY2hlY2tfb3B0aW9uYWwoKToKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogCisg
ICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9vdXRwdXRfYXJndW1lbnRfcHJl
Zml4KCk6CisgICAgICAgICAgICByZXR1cm4gIiYiCisKICAgICBjbGFzcyBTdHJpbmcoQmFzZVR5
cGUpOgogICAgICAgICBAY2xhc3NtZXRob2QKICAgICAgICAgZGVmIGdldF9jX3BhcmFtX3R5cGUo
Y2xzLCBwYXJhbV90eXBlLCBvcHRpb25hbCk6CkBAIC0zNzIsNiArMzc2LDEwIEBAIGNsYXNzIFJh
d1R5cGVzKG9iamVjdCk6CiAgICAgICAgIGRlZiBpc19ldmVudF9wYXJhbV9jaGVja19vcHRpb25h
bCgpOgogICAgICAgICAgICAgcmV0dXJuIFRydWUKIAorICAgICAgICBAc3RhdGljbWV0aG9kCisg
ICAgICAgIGRlZiBnZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZpeCgpOgorICAgICAgICAgICAgcmV0
dXJuICIiCisKICAgICAgICAgX3BsYWluX2NfdHlwZSA9IENQYXJhbVR5cGUoIlJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IikKICAgICAgICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4iKQogCkBAIC00MzIsNiArNDQwLDEwIEBAIGNsYXNzIFJhd1R5
cGVzKG9iamVjdCk6CiAgICAgICAgIGRlZiBpc19ldmVudF9wYXJhbV9jaGVja19vcHRpb25hbCgp
OgogICAgICAgICAgICAgcmV0dXJuIFRydWUKIAorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAg
ICAgIGRlZiBnZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZpeCgpOgorICAgICAgICAgICAgcmV0dXJu
ICIiCisKICAgICAgICAgX3BsYWluX2NfdHlwZSA9IENQYXJhbVR5cGUoIlJlZlB0cjxJbnNwZWN0
b3JBcnJheT4iKQogICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoIlBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IikKIApAQCAtMTU5NSwxNiArMTYwNywyMyBAQCBjbGFzcyBHZW5lcmF0
b3I6CiAgICAgICAgICAgICBmb3IganNvbl9yZXR1cm4gaW4ganNvbl9jb21tYW5kWyJyZXR1cm5z
Il06CiAKICAgICAgICAgICAgICAgICBqc29uX3JldHVybl9uYW1lID0ganNvbl9yZXR1cm5bIm5h
bWUiXQorCisgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSAib3B0aW9uYWwiIGluIGpzb25fcmV0
dXJuIGFuZCBqc29uX3JldHVyblsib3B0aW9uYWwiXQorCiAgICAgICAgICAgICAgICAgcmF3X3R5
cGUgPSByZXNvbHZlX3BhcmFtX3Jhd190eXBlKGpzb25fcmV0dXJuLCBkb21haW5fbmFtZSkKICAg
ICAgICAgICAgICAgICBzZXR0ZXJfdHlwZSA9IHJhd190eXBlLmdldF9zZXR0ZXJfbmFtZSgpCiAg
ICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXIgPSByYXdfdHlwZS5nZXRfY19pbml0aWFsaXplcigp
CiAgICAgICAgICAgICAgICAgdmFyX3R5cGUgPSByYXdfdHlwZS5nZXRfY19wYXJhbV90eXBlKFBh
cmFtVHlwZS5PVVRQVVQsIE5vbmUpCiAKICAgICAgICAgICAgICAgICBjb2RlID0gIiAgICAlcyBv
dXRfJXMgPSAlcztcbiIgJSAodmFyX3R5cGUuZ2V0X3RleHQoKSwganNvbl9yZXR1cm5fbmFtZSwg
aW5pdGlhbGl6ZXIpCi0gICAgICAgICAgICAgICAgcGFyYW0gPSAiLCAmb3V0XyVzIiAlIGpzb25f
cmV0dXJuX25hbWUKKyAgICAgICAgICAgICAgICBwYXJhbSA9ICIsICVzb3V0XyVzIiAlIChyYXdf
dHlwZS5nZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZpeCgpLCBqc29uX3JldHVybl9uYW1lKQogICAg
ICAgICAgICAgICAgIGNvb2sgPSAiICAgICAgICByZXN1bHQtPnNldCVzKFwiJXNcIiwgb3V0XyVz
KTtcbiIgJSAoc2V0dGVyX3R5cGUsIGpzb25fcmV0dXJuX25hbWUsIGpzb25fcmV0dXJuX25hbWUp
Ci0gICAgICAgICAgICAgICAgaWYgdmFyX3R5cGUuZ2V0X3RleHQoKSA9PSAiYm9vbCIgYW5kICJv
cHRpb25hbCIgaW4ganNvbl9yZXR1cm4gYW5kIGpzb25fcmV0dXJuWyJvcHRpb25hbCJdOgotICAg
ICAgICAgICAgICAgICAgICBjb29rID0gKCIgICAgICAgIGlmIChvdXRfJXMpXG4gICAgIiAlIGpz
b25fcmV0dXJuX25hbWUpICsgY29vaworICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgorICAg
ICAgICAgICAgICAgICAgICBpZiB2YXJfdHlwZS5nZXRfdGV4dCgpID09ICJib29sIjoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvb2sgPSAoIiAgICAgICAgaWYgKG91dF8lcylcbiAgICAiICUg
anNvbl9yZXR1cm5fbmFtZSkgKyBjb29rCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBzdXBwb3J0IG9wdGlvbmFscy4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvb2sgPSAiICAgICAgICAvLyBGSVhNRTogc3VwcG9ydCBvcHRpb25h
bCBoZXJlLlxuIiArIGNvb2sKIAogICAgICAgICAgICAgICAgIG1ldGhvZF9vdXRfY29kZSArPSBj
b2RlCiAgICAgICAgICAgICAgICAgYWdlbnRfY2FsbF9wYXJhbV9saXN0LmFwcGVuZChwYXJhbSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudC5jcHAKaW5kZXggYjE3ZTU0NTFkYjk3MmQ0MDhkNzJhMDBkMzQyNTFm
MjA1N2JiNDUwMC4uMTRiZWE3NjM3ZDlhODY5YTYwM2ZmMzk5NDZhNDk1NjQ1N2RmNmMzZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudC5jcHAKQEAgLTEwMyw5ICsxMDMsOSBAQCB2b2lkIEluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudDo6bmV0d29ya1N0YXRlQ2hhbmdlZCgpCiAgICAgbV9mcm9udGVu
ZC0+bmV0d29ya1N0YXRlVXBkYXRlZChpc05vd09ubGluZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
QXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRGcmFtZXNXaXRoTWFuaWZlc3RzKEVycm9yU3RyaW5n
KiwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzdWx0KQordm9pZCBJbnNwZWN0b3JBcHBsaWNh
dGlvbkNhY2hlQWdlbnQ6OmdldEZyYW1lc1dpdGhNYW5pZmVzdHMoRXJyb3JTdHJpbmcqLCBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+JiByZXN1bHQpCiB7Ci0gICAgKnJlc3VsdCA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKKyAgICByZXN1bHQgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAK
ICAgICBGcmFtZSogbWFpbkZyYW1lID0gbV9wYWdlQWdlbnQtPm1haW5GcmFtZSgpOwogICAgIGZv
ciAoRnJhbWUqIGZyYW1lID0gbWFpbkZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LT50cmF2ZXJzZU5leHQobWFpbkZyYW1lKSkgewpAQCAtMTIxLDcgKzEyMSw3IEBAIHZvaWQgSW5z
cGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRGcmFtZXNXaXRoTWFuaWZlc3RzKEVycm9y
U3RyaW5nKiwgUmVmUHRyCiAgICAgICAgICAgICB2YWx1ZS0+c2V0U3RyaW5nKCJmcmFtZUlkIiwg
bV9wYWdlQWdlbnQtPmZyYW1lSWQoZnJhbWUpKTsKICAgICAgICAgICAgIHZhbHVlLT5zZXRTdHJp
bmcoIm1hbmlmZXN0VVJMIiwgbWFuaWZlc3RVUkwpOwogICAgICAgICAgICAgdmFsdWUtPnNldE51
bWJlcigic3RhdHVzIiwgaG9zdC0+c3RhdHVzKCkpOwotICAgICAgICAgICAgKCpyZXN1bHQpLT5w
dXNoT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIHJlc3VsdC0+cHVzaE9iamVjdCh2YWx1ZSk7
CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9pZCBJbnNwZWN0b3JB
cHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmdldE1hbmlmZXN0Rm9yRnJhbWUoRXJyb3JTdHJpbmcqIGVy
cm9yU3RyaW4KICAgICAqbWFuaWZlc3RVUkwgPSBpbmZvLm1fbWFuaWZlc3Quc3RyaW5nKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRBcHBsaWNhdGlvbkNh
Y2hlRm9yRnJhbWUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1l
SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBhcHBsaWNhdGlvbkNhY2hlKQordm9pZCBJbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmdldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFtZShF
cnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mIGFwcGxpY2F0aW9uQ2FjaGUpCiB7CiAgICAgRG9jdW1lbnRMb2FkZXIq
IGRvY3VtZW50TG9hZGVyID0gYXNzZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2FkZXIoZXJyb3JTdHJp
bmcsIGZyYW1lSWQpOwogICAgIGlmICghZG9jdW1lbnRMb2FkZXIpCkBAIC0xNTcsNyArMTU3LDcg
QEAgdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmdldEFwcGxpY2F0aW9uQ2Fj
aGVGb3JGcmFtZShFcnJvclN0cmluZyogZXIKICAgICBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVz
b3VyY2VJbmZvTGlzdCByZXNvdXJjZXM7CiAgICAgaG9zdC0+ZmlsbFJlc291cmNlTGlzdCgmcmVz
b3VyY2VzKTsKIAotICAgICphcHBsaWNhdGlvbkNhY2hlID0gYnVpbGRPYmplY3RGb3JBcHBsaWNh
dGlvbkNhY2hlKHJlc291cmNlcywgaW5mbyk7CisgICAgYXBwbGljYXRpb25DYWNoZSA9IGJ1aWxk
T2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZShyZXNvdXJjZXMsIGluZm8pOwogfQogCiBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpidWls
ZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGUoY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OlJl
c291cmNlSW5mb0xpc3QmIGFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMsIGNvbnN0IEFwcGxpY2F0
aW9uQ2FjaGVIb3N0OjpDYWNoZUluZm8mIGFwcGxpY2F0aW9uQ2FjaGVJbmZvKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudC5oCmluZGV4IGMzMTY3NDRjNjc0ZjI2MWQ3MWRjYTM2N2U0ZjdmYzVjZWM3OTIyZDAuLmFj
MDkyOTc1OTkzMjhmNTQ3ZWU1NzEzNDhjNGNkZDA1YjZkMjc0NmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
LmgKQEAgLTY5LDkgKzY5LDkgQEAgcHVibGljOgogCiAgICAgLy8gQXBwbGljYXRpb25DYWNoZSBB
UEkgZm9yIEluc3BlY3RvckZyb250ZW5kCiAgICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcqKTsK
LSAgICB2b2lkIGdldEZyYW1lc1dpdGhNYW5pZmVzdHMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+KiByZXN1bHQpOworICAgIHZvaWQgZ2V0RnJhbWVzV2l0aE1hbmlmZXN0cyhF
cnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIHJlc3VsdCk7CiAgICAgdm9pZCBn
ZXRNYW5pZmVzdEZvckZyYW1lKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBT
dHJpbmcqIG1hbmlmZXN0VVJMKTsKLSAgICB2b2lkIGdldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFt
ZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4qIGFwcGxpY2F0aW9uQ2FjaGUpOworICAgIHZvaWQgZ2V0QXBwbGljYXRpb25DYWNoZUZv
ckZyYW1lKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYgYXBwbGljYXRpb25DYWNoZSk7CiAKIHByaXZhdGU6CiAgICAgSW5zcGVjdG9y
QXBwbGljYXRpb25DYWNoZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0
ZSosIEluc3BlY3RvclBhZ2VBZ2VudCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDU1NBZ2VudC5jcHAKaW5kZXggNTVhNGJjNDYyNGQ3MWViNTllZmJhODlkY2RmNGMw
Yjc2ZWY2MmEwMC4uMTA0ZDg2Nzk5NWU3MGJlMGEzMjVmYTVlMTdhOTkxYWU0N2JjOTI2YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBAIC0z
MTUsNyArMzE1LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Y2xlYXJGcm9udGVuZCgpCiAg
ICAgbV9mcm9udGVuZCA9IDA7CiAgICAgY2xlYXJQc2V1ZG9TdGF0ZSh0cnVlKTsKICAgICBTdHJp
bmcgZXJyb3JTdHJpbmc7Ci0gICAgc3RvcFNlbGVjdG9yUHJvZmlsZXIoJmVycm9yU3RyaW5nKTsK
KyAgICBzdG9wU2VsZWN0b3JQcm9maWxlckltcGwoJmVycm9yU3RyaW5nKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6ZGlzY2FyZEFnZW50KCkKQEAgLTM5MCw3ICszOTAsNyBAQCB2b2lk
IEluc3BlY3RvckNTU0FnZW50OjpyZWNhbGNTdHlsZUZvclBzZXVkb1N0YXRlSWZOZWVkZWQoRWxl
bWVudCogZWxlbWVudCwgSW5zcAogICAgICAgICBlbGVtZW50LT5vd25lckRvY3VtZW50KCktPnN0
eWxlU2VsZWN0b3JDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOwogfQogCi12b2lkIElu
c3BlY3RvckNTU0FnZW50OjpnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyogZXJy
b3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGZvcmNl
ZFBzZXVkb0NsYXNzZXMsIGJvb2wqIG5lZWRQc2V1ZG8sIGJvb2wqIG5lZWRJbmhlcml0ZWQsIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4qIG1hdGNoZWRDU1NSdWxlcywgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiogcHNldWRvSWRSdWxlcywgUmVmUHRyPEluc3BlY3RvckFycmF5PiogaW5oZXJpdGVkRW50
cmllcykKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKEVy
cm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiogZm9yY2VkUHNldWRvQ2xhc3NlcywgYm9vbCogbmVlZFBzZXVkbywgYm9vbCogbmVl
ZEluaGVyaXRlZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgbWF0Y2hlZENTU1J1bGVzLCBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+JiBwc2V1ZG9JZFJ1bGVzLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
JiBpbmhlcml0ZWRFbnRyaWVzKQogewogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtZW50Rm9y
SWQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQpAQCAtNDAxLDcgKzQw
MSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKEVy
cm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vCiAgICAgLy8gTWF0Y2hlZCBydWxlcy4KICAg
ICBDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciA9IGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+
c3R5bGVTZWxlY3RvcigpOwogICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gbWF0Y2hlZFJ1bGVzID0g
c2VsZWN0b3ItPnN0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIENTU1N0eWxlU2VsZWN0b3I6
OkFsbENTU1J1bGVzKTsKLSAgICAqbWF0Y2hlZENTU1J1bGVzID0gYnVpbGRBcnJheUZvclJ1bGVM
aXN0KG1hdGNoZWRSdWxlcy5nZXQoKSk7CisgICAgbWF0Y2hlZENTU1J1bGVzID0gYnVpbGRBcnJh
eUZvclJ1bGVMaXN0KG1hdGNoZWRSdWxlcy5nZXQoKSk7CiAKICAgICAvLyBQc2V1ZG8gZWxlbWVu
dHMuCiAgICAgaWYgKCFuZWVkUHNldWRvIHx8ICpuZWVkUHNldWRvKSB7CkBAIC00MTYsNyArNDE2
LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoRXJy
b3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm8KICAgICAgICAgICAgIH0KICAgICAgICAgfQog
Ci0gICAgICAgICpwc2V1ZG9JZFJ1bGVzID0gcHNldWRvRWxlbWVudHMucmVsZWFzZSgpOworICAg
ICAgICBwc2V1ZG9JZFJ1bGVzID0gcHNldWRvRWxlbWVudHMucmVsZWFzZSgpOwogICAgIH0KIAog
ICAgIC8vIEluaGVyaXRlZCBzdHlsZXMuCkBAIC00MzgsMTEgKzQzOCwxMSBAQCB2b2lkIEluc3Bl
Y3RvckNTU0FnZW50OjpnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyogZXJyb3JT
dHJpbmcsIGludCBubwogICAgICAgICAgICAgcGFyZW50RWxlbWVudCA9IHBhcmVudEVsZW1lbnQt
PnBhcmVudEVsZW1lbnQoKTsKICAgICAgICAgfQogCi0gICAgICAgICppbmhlcml0ZWRFbnRyaWVz
ID0gaW5oZXJpdGVkU3R5bGVzLnJlbGVhc2UoKTsKKyAgICAgICAgaW5oZXJpdGVkRW50cmllcyA9
IGluaGVyaXRlZFN0eWxlcy5yZWxlYXNlKCk7CiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckNT
U0FnZW50OjpnZXRJbmxpbmVTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywg
aW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGlubGluZVN0eWxlLCBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+KiBhdHRyaWJ1dGVzKQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0
SW5saW5lU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQs
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBpbmxpbmVTdHlsZSwgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiYgYXR0cmlidXRlcykKIHsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvcklk
KGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxlbWVudCkKQEAgLTQ1MiwxMSArNDUy
LDExIEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldElubGluZVN0eWxlc0Zvck5vZGUoRXJy
b3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kCiAgICAgaWYgKCFzdHlsZVNoZWV0KQogICAg
ICAgICByZXR1cm47CiAKLSAgICAqaW5saW5lU3R5bGUgPSBzdHlsZVNoZWV0LT5idWlsZE9iamVj
dEZvclN0eWxlKGVsZW1lbnQtPnN0eWxlKCkpOwotICAgICphdHRyaWJ1dGVzID0gYnVpbGRBcnJh
eUZvckF0dHJpYnV0ZVN0eWxlcyhlbGVtZW50KTsKKyAgICBpbmxpbmVTdHlsZSA9IHN0eWxlU2hl
ZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoZWxlbWVudC0+c3R5bGUoKSk7CisgICAgYXR0cmlidXRl
cyA9IGJ1aWxkQXJyYXlGb3JBdHRyaWJ1dGVTdHlsZXMoZWxlbWVudCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVGb3JOb2RlKEVycm9yU3RyaW5nKiBlcnJv
clN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiogZm9yY2Vk
UHNldWRvQ2xhc3NlcywgUmVmUHRyPEluc3BlY3RvckFycmF5Piogc3R5bGUpCit2b2lkIEluc3Bl
Y3RvckNTU0FnZW50OjpnZXRDb21wdXRlZFN0eWxlRm9yTm9kZShFcnJvclN0cmluZyogZXJyb3JT
dHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGZvcmNlZFBz
ZXVkb0NsYXNzZXMsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIHN0eWxlKQogewogICAgIEVsZW1l
bnQqIGVsZW1lbnQgPSBlbGVtZW50Rm9ySWQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYg
KCFlbGVtZW50KQpAQCAtNDY2LDEwICs0NjYsMTAgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
Z2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm8K
IAogICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5bGVJ
bmZvID0gY29tcHV0ZWRTdHlsZShlbGVtZW50LCB0cnVlKTsKICAgICBSZWZQdHI8SW5zcGVjdG9y
U3R5bGU+IGluc3BlY3RvclN0eWxlID0gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JD
U1NJZCgpLCBjb21wdXRlZFN0eWxlSW5mbywgMCk7Ci0gICAgKnN0eWxlID0gaW5zcGVjdG9yU3R5
bGUtPmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCk7CisgICAgc3R5bGUgPSBpbnNwZWN0b3JT
dHlsZS0+YnVpbGRBcnJheUZvckNvbXB1dGVkU3R5bGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6Z2V0QWxsU3R5bGVTaGVldHMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+KiBzdHlsZUluZm9zKQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0QWxsU3R5bGVT
aGVldHMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBzdHlsZUluZm9zKQog
ewogICAgIFZlY3RvcjxEb2N1bWVudCo+IGRvY3VtZW50cyA9IG1fZG9tQWdlbnQtPmRvY3VtZW50
cygpOwogICAgIGZvciAoVmVjdG9yPERvY3VtZW50Kj46Oml0ZXJhdG9yIGl0ID0gZG9jdW1lbnRz
LmJlZ2luKCk7IGl0ICE9IGRvY3VtZW50cy5lbmQoKTsgKytpdCkgewpAQCAtNDc3LDE4ICs0Nzcs
MTggQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0QWxsU3R5bGVTaGVldHMoRXJyb3JTdHJp
bmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGlzdC0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICAgICAgU3R5bGVTaGVldCogc3R5
bGVTaGVldCA9IGxpc3QtPml0ZW0oaSk7CiAgICAgICAgICAgICBpZiAoc3R5bGVTaGVldC0+aXND
U1NTdHlsZVNoZWV0KCkpCi0gICAgICAgICAgICAgICAgY29sbGVjdFN0eWxlU2hlZXRzKHN0YXRp
Y19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZVNoZWV0KSwgc3R5bGVJbmZvcy0+Z2V0KCkpOwor
ICAgICAgICAgICAgICAgIGNvbGxlY3RTdHlsZVNoZWV0cyhzdGF0aWNfY2FzdDxDU1NTdHlsZVNo
ZWV0Kj4oc3R5bGVTaGVldCksIHN0eWxlSW5mb3MuZ2V0KCkpOwogICAgICAgICB9CiAgICAgfQog
fQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZVNoZWV0KEVycm9yU3RyaW5nKiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+KiBzdHlsZVNoZWV0T2JqZWN0KQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3R5
bGVTaGVldChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVl
dElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgc3R5bGVTaGVldE9iamVjdCkKIHsKICAgICBJ
bnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVl
dEZvcklkKGVycm9yU3RyaW5nLCBzdHlsZVNoZWV0SWQpOwogICAgIGlmICghaW5zcGVjdG9yU3R5
bGVTaGVldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgKnN0eWxlU2hlZXRPYmplY3QgPSBpbnNw
ZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlU2hlZXQoKTsKKyAgICBzdHlsZVNo
ZWV0T2JqZWN0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0
KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXRUZXh0KEVycm9y
U3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIFN0cmluZyog
cmVzdWx0KQpAQCAtNTEyLDcgKzUxMiw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0
eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAgICAg
ICAgICplcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvciBzZXR0aW5nIHN0eWxlIHNoZWV0IHRl
eHQiOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRQcm9wZXJ0eVRleHQoRXJyb3JT
dHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgZnVsbFN0
eWxlSWQsIGludCBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3Zlcndy
aXRlLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVzdWx0KQordm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6c2V0UHJvcGVydHlUZXh0KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mIGZ1bGxTdHlsZUlkLCBpbnQgcHJvcGVydHlJbmRleCwgY29u
c3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
IHJlc3VsdCkKIHsKICAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxTdHlsZUlkKTsK
ICAgICBBU1NFUlQoIWNvbXBvdW5kSWQuaXNFbXB0eSgpKTsKQEAgLTUyMywxMCArNTIzLDEwIEBA
IHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFByb3BlcnR5VGV4dChFcnJvclN0cmluZyogZXJy
b3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJCiAKICAgICBib29sIHN1Y2Nlc3MgPSBpbnNwZWN0b3JT
dHlsZVNoZWV0LT5zZXRQcm9wZXJ0eVRleHQoZXJyb3JTdHJpbmcsIGNvbXBvdW5kSWQsIHByb3Bl
cnR5SW5kZXgsIHRleHQsIG92ZXJ3cml0ZSk7CiAgICAgaWYgKHN1Y2Nlc3MpCi0gICAgICAgICpy
ZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKGluc3BlY3Rv
clN0eWxlU2hlZXQtPnN0eWxlRm9ySWQoY29tcG91bmRJZCkpOworICAgICAgICByZXN1bHQgPSBp
bnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKGluc3BlY3RvclN0eWxlU2hl
ZXQtPnN0eWxlRm9ySWQoY29tcG91bmRJZCkpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50
Ojp0b2dnbGVQcm9wZXJ0eShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiBmdWxsU3R5bGVJZCwgaW50IHByb3BlcnR5SW5kZXgsIGJvb2wgZGlz
YWJsZSwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yQ1NT
QWdlbnQ6OnRvZ2dsZVByb3BlcnR5KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mIGZ1bGxTdHlsZUlkLCBpbnQgcHJvcGVydHlJbmRleCwgYm9v
bCBkaXNhYmxlLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KQogewogICAgIEluc3Bl
Y3RvckNTU0lkIGNvbXBvdW5kSWQoZnVsbFN0eWxlSWQpOwogICAgIEFTU0VSVCghY29tcG91bmRJ
ZC5pc0VtcHR5KCkpOwpAQCAtNTM3LDEwICs1MzcsMTAgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6dG9nZ2xlUHJvcGVydHkoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8
SW4KIAogICAgIGJvb2wgc3VjY2VzcyA9IGluc3BlY3RvclN0eWxlU2hlZXQtPnRvZ2dsZVByb3Bl
cnR5KGVycm9yU3RyaW5nLCBjb21wb3VuZElkLCBwcm9wZXJ0eUluZGV4LCBkaXNhYmxlKTsKICAg
ICBpZiAoc3VjY2VzcykKLSAgICAgICAgKnJlc3VsdCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1
aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+c3R5bGVGb3JJZChjb21wb3Vu
ZElkKSk7CisgICAgICAgIHJlc3VsdCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0
Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+c3R5bGVGb3JJZChjb21wb3VuZElkKSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcihFcnJvclN0cmluZyog
ZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBmdWxsUnVsZUlkLCBj
b25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVzdWx0KQor
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UnVsZVNlbGVjdG9yKEVycm9yU3RyaW5nKiBlcnJv
clN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGZ1bGxSdWxlSWQsIGNvbnN0
IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQpCiB7CiAg
ICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChmdWxsUnVsZUlkKTsKICAgICBBU1NFUlQoIWNv
bXBvdW5kSWQuaXNFbXB0eSgpKTsKQEAgLTU1MywxMCArNTUzLDEwIEBAIHZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcihFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0
IFJlZlB0cjxJCiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm47CiAKLSAgICAqcmVz
dWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JSdWxlKGluc3BlY3RvclN0
eWxlU2hlZXQtPnJ1bGVGb3JJZChjb21wb3VuZElkKSk7CisgICAgcmVzdWx0ID0gaW5zcGVjdG9y
U3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JSdWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnJ1bGVG
b3JJZChjb21wb3VuZElkKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmFkZFJ1bGUo
RXJyb3JTdHJpbmcqLCBjb25zdCBpbnQgY29udGV4dE5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxl
Y3RvciwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yQ1NT
QWdlbnQ6OmFkZFJ1bGUoRXJyb3JTdHJpbmcqLCBjb25zdCBpbnQgY29udGV4dE5vZGVJZCwgY29u
c3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHJlc3VsdCkKIHsK
ICAgICBOb2RlKiBub2RlID0gbV9kb21BZ2VudC0+bm9kZUZvcklkKGNvbnRleHROb2RlSWQpOwog
ICAgIGlmICghbm9kZSkKQEAgLTU2OSwxNiArNTY5LDE2IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OmFkZFJ1bGUoRXJyb3JTdHJpbmcqLCBjb25zdCBpbnQgY29udGV4dE5vZGVJZCwgY29uc3Qg
U3RyCiAgICAgaWYgKCFuZXdSdWxlKQogICAgICAgICByZXR1cm47CiAKLSAgICAqcmVzdWx0ID0g
aW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JSdWxlKG5ld1J1bGUpOworICAgIHJl
c3VsdCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShuZXdSdWxlKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhF
cnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGNzc1Byb3BlcnRpZXMpCit2b2lk
IEluc3BlY3RvckNTU0FnZW50OjpnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKEVycm9yU3RyaW5n
KiwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgY3NzUHJvcGVydGllcykKIHsKICAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3BlcnRpZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1DU1NQcm9wZXJ0aWVzOyArK2kpCiAgICAgICAgIHBy
b3BlcnRpZXMtPnB1c2hTdHJpbmcocHJvcGVydHlOYW1lU3RyaW5nc1tpXSk7CiAKLSAgICAqY3Nz
UHJvcGVydGllcyA9IHByb3BlcnRpZXMucmVsZWFzZSgpOworICAgIGNzc1Byb3BlcnRpZXMgPSBw
cm9wZXJ0aWVzLnJlbGVhc2UoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c3RhcnRT
ZWxlY3RvclByb2ZpbGVyKEVycm9yU3RyaW5nKikKQEAgLTU4OCw3ICs1ODgsMTIgQEAgdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6c3RhcnRTZWxlY3RvclByb2ZpbGVyKEVycm9yU3RyaW5nKikKICAg
ICBtX3N0YXRlLT5zZXRCb29sZWFuKENTU0FnZW50U3RhdGU6OmlzU2VsZWN0b3JQcm9maWxpbmcs
IHRydWUpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpzdG9wU2VsZWN0b3JQcm9maWxl
cihFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiByZXN1bHQpCit2b2lkIElu
c3BlY3RvckNTU0FnZW50OjpzdG9wU2VsZWN0b3JQcm9maWxlcihFcnJvclN0cmluZyogZXJyb3JT
dHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQpCit7CisgICAgc3RvcFNlbGVj
dG9yUHJvZmlsZXJJbXBsKGVycm9yU3RyaW5nLCAmcmVzdWx0KTsKK30KKwordm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6c3RvcFNlbGVjdG9yUHJvZmlsZXJJbXBsKEVycm9yU3RyaW5nKiwgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCkKIHsKICAgICBpZiAoIW1fc3RhdGUtPmdldEJvb2xl
YW4oQ1NTQWdlbnRTdGF0ZTo6aXNTZWxlY3RvclByb2ZpbGluZykpCiAgICAgICAgIHJldHVybjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKaW5kZXggMDAy
MDAxNDQyMmFjMjZkOTUyNGZjODZmNDNhYWZmMDdiOWRhMWY5OC4uODYzZWZjMGQ3MGNiNWUxNjI0
MzQzNmEwZGIyZTAyOWE1NWM1YzIzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmgKQEAgLTc2LDIxICs3NiwyMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBy
ZXNldCgpOwogICAgIHZvaWQgbWVkaWFRdWVyeVJlc3VsdENoYW5nZWQoKTsKIAotICAgIHZvaWQg
Z2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlkLCBjb25zdCBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBmb3JjZWRQc2V1ZG9DbGFzc2VzLCBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+KiBzdHlsZSk7Ci0gICAgdm9pZCBnZXRJbmxpbmVTdHlsZXNGb3JOb2RlKEVycm9y
U3RyaW5nKiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGlubGluZVN0eWxl
LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBhdHRyaWJ1dGVzKTsKLSAgICB2b2lkIGdldE1hdGNo
ZWRTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nKiwgaW50IG5vZGVJZCwgY29uc3QgUmVmUHRyPElu
c3BlY3RvckFycmF5PiogZm9yY2VkUHNldWRvQ2xhc3NlcywgYm9vbCogaW5jbHVkZVBzZXVkbywg
Ym9vbCogaW5jbHVkZUluaGVyaXRlZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogbWF0Y2hlZENT
U1J1bGVzLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBwc2V1ZG9JZFJ1bGVzLCBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+KiBpbmhlcml0ZWRFbnRyaWVzKTsKLSAgICB2b2lkIGdldEFsbFN0eWxlU2hl
ZXRzKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3RvckFycmF5Piogc3R5bGVTaGVldEluZm9z
KTsKLSAgICB2b2lkIGdldFN0eWxlU2hlZXQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHN0
eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCk7CisgICAgdm9pZCBn
ZXRDb21wdXRlZFN0eWxlRm9yTm9kZShFcnJvclN0cmluZyosIGludCBub2RlSWQsIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4qIGZvcmNlZFBzZXVkb0NsYXNzZXMsIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4mIHN0eWxlKTsKKyAgICB2b2lkIGdldElubGluZVN0eWxlc0Zvck5vZGUoRXJyb3JT
dHJpbmcqLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgaW5saW5lU3R5bGUs
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIGF0dHJpYnV0ZXMpOworICAgIHZvaWQgZ2V0TWF0Y2hl
ZFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlkLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+KiBmb3JjZWRQc2V1ZG9DbGFzc2VzLCBib29sKiBpbmNsdWRlUHNldWRvLCBi
b29sKiBpbmNsdWRlSW5oZXJpdGVkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBtYXRjaGVkQ1NT
UnVsZXMsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIHBzZXVkb0lkUnVsZXMsIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4mIGluaGVyaXRlZEVudHJpZXMpOworICAgIHZvaWQgZ2V0QWxsU3R5bGVTaGVl
dHMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBzdHlsZVNoZWV0SW5mb3Mp
OworICAgIHZvaWQgZ2V0U3R5bGVTaGVldChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgc3R5
bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KTsKICAgICB2b2lkIGdl
dFN0eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQs
IFN0cmluZyogcmVzdWx0KTsKICAgICB2b2lkIHNldFN0eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5n
KiwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgdGV4dCk7Ci0gICAg
dm9pZCBzZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcqLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYgc3R5bGVJZCwgaW50IHByb3BlcnR5SW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCwg
Ym9vbCBvdmVyd3JpdGUsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiByZXN1bHQpOwotICAgIHZv
aWQgdG9nZ2xlUHJvcGVydHkoRXJyb3JTdHJpbmcqLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYgc3R5bGVJZCwgaW50IHByb3BlcnR5SW5kZXgsIGJvb2wgZGlzYWJsZSwgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4qIHJlc3VsdCk7Ci0gICAgdm9pZCBzZXRSdWxlU2VsZWN0b3IoRXJyb3JT
dHJpbmcqLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcnVsZUlkLCBjb25zdCBTdHJp
bmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVzdWx0KTsKLSAgICB2b2lk
IGFkZFJ1bGUoRXJyb3JTdHJpbmcqLCBjb25zdCBpbnQgY29udGV4dE5vZGVJZCwgY29uc3QgU3Ry
aW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCk7Ci0gICAgdm9p
ZCBnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiogcmVzdWx0KTsKKyAgICB2b2lkIHNldFByb3BlcnR5VGV4dChFcnJvclN0cmluZyos
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBzdHlsZUlkLCBpbnQgcHJvcGVydHlJbmRl
eCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mIHJlc3VsdCk7CisgICAgdm9pZCB0b2dnbGVQcm9wZXJ0eShFcnJvclN0cmluZyosIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBzdHlsZUlkLCBpbnQgcHJvcGVydHlJbmRleCwg
Ym9vbCBkaXNhYmxlLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KTsKKyAgICB2b2lk
IHNldFJ1bGVTZWxlY3RvcihFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiByZXN1bHQpOworICAgIHZvaWQgYWRkUnVsZShFcnJvclN0cmluZyosIGNvbnN0IGludCBj
b250ZXh0Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYgcmVzdWx0KTsKKyAgICB2b2lkIGdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JT
dHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiByZXN1bHQpOwogCiAgICAgdm9pZCBzdGFy
dFNlbGVjdG9yUHJvZmlsZXIoRXJyb3JTdHJpbmcqKTsKLSAgICB2b2lkIHN0b3BTZWxlY3RvclBy
b2ZpbGVyKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qID0gMCk7CisgICAg
dm9pZCBzdG9wU2VsZWN0b3JQcm9maWxlcihFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+Jik7CisgICAgdm9pZCBzdG9wU2VsZWN0b3JQcm9maWxlckltcGwoRXJyb3JTdHJpbmcq
LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogPSAwKTsKICAgICB2b2lkIHdpbGxNYXRjaFJ1bGUo
Y29uc3QgQ1NTU3R5bGVSdWxlKik7CiAgICAgdm9pZCBkaWRNYXRjaFJ1bGUoYm9vbCk7CiAgICAg
dm9pZCB3aWxsUHJvY2Vzc1J1bGUoY29uc3QgQ1NTU3R5bGVSdWxlKik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBiZjA4ZjNjNGYxY2I1
YmFlNzI3MDZmY2YzYWVkMGIyNTA1NzkxMmU5Li5kMzA2MGUwZTQ2ZjkyNjM0ZTYzODExYTRjOGYw
OTM0MzkwMTYxYmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5jcHAKQEAgLTM1MSw3ICszNTEsNyBAQCBIVE1MRWxlbWVudCogSW5zcGVjdG9yRE9N
QWdlbnQ6OmFzc2VydEhUTUxFbGVtZW50KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50CiAg
ICAgcmV0dXJuIHRvSFRNTEVsZW1lbnQoZWxlbWVudCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OmdldERvY3VtZW50KEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4q
IHJvb3QpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXREb2N1bWVudChFcnJvclN0cmluZyos
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByb290KQogewogICAgIG1fc3RhdGUtPnNldEJvb2xl
YW4oRE9NQWdlbnRTdGF0ZTo6ZG9jdW1lbnRSZXF1ZXN0ZWQsIHRydWUpOwogCkBAIC0zNjMsNyAr
MzYzLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RG9jdW1lbnQoRXJyb3JTdHJpbmcq
LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogcm9vdCkKICAgICByZXNldCgpOwogICAgIG1fZG9j
dW1lbnQgPSBkb2M7CiAKLSAgICAqcm9vdCA9IGJ1aWxkT2JqZWN0Rm9yTm9kZShtX2RvY3VtZW50
LmdldCgpLCAyLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKKyAgICByb290ID0gYnVpbGRPYmpl
Y3RGb3JOb2RlKG1fZG9jdW1lbnQuZ2V0KCksIDIsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXApOwog
fQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoaW50
IG5vZGVJZCkKQEAgLTQyMSw3ICs0MjEsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpxdWVy
eVNlbGVjdG9yKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29ucwogICAg
ICAgICAqZWxlbWVudElkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlbGVtZW50LmdldCgpKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cXVlcnlTZWxlY3RvckFsbChFcnJvclN0cmlu
ZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+KiByZXN1bHQpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpxdWVy
eVNlbGVjdG9yQWxsKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3Qg
U3RyaW5nJiBzZWxlY3RvcnMsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIHJlc3VsdCkKIHsKICAg
ICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAo
IW5vZGUpCkBAIC00MzUsNyArNDM1LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cXVlcnlT
ZWxlY3RvckFsbChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGMKICAgICB9
CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMtPmxlbmd0aCgpOyArK2kpCi0g
ICAgICAgICgqcmVzdWx0KS0+cHVzaE51bWJlcihwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5vZGVz
LT5pdGVtKGkpKSk7CisgICAgICAgIHJlc3VsdC0+cHVzaE51bWJlcihwdXNoTm9kZVBhdGhUb0Zy
b250ZW5kKG5vZGVzLT5pdGVtKGkpKSk7CiB9CiAKIGludCBJbnNwZWN0b3JET01BZ2VudDo6cHVz
aE5vZGVQYXRoVG9Gcm9udGVuZChOb2RlKiBub2RlVG9QdXNoKQpAQCAtNzE2LDcgKzcxNiw3IEBA
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE5vZGVWYWx1ZShFcnJvclN0cmluZyogZXJyb3JT
dHJpbmcsIGludCBub2RlSWQsIGNvbnN0CiAgICAgICAgICplcnJvclN0cmluZyA9ICJET00gRXJy
b3Igd2hpbGUgc2V0dGluZyB0aGUgbm9kZSB2YWx1ZSI7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0cmluZyosIGludCBub2RlSWQs
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGxpc3RlbmVyc0FycmF5KQordm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nKiwgaW50IG5vZGVJ
ZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgbGlzdGVuZXJzQXJyYXkpCiB7CiAgICAgTm9kZSog
bm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwogICAgIEV2ZW50VGFyZ2V0RGF0YSogZDsKQEAgLTc2
Myw3ICs3NjMsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zv
ck5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlkLCBSZWZQdAogICAgICAgICBmb3IgKHNpemVf
dCBqID0gMDsgaiA8IHZlY3Rvci5zaXplKCk7ICsraikgewogICAgICAgICAgICAgY29uc3QgUmVn
aXN0ZXJlZEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyID0gdmVjdG9yW2pdOwogICAgICAgICAgICAg
aWYgKGxpc3RlbmVyLnVzZUNhcHR1cmUpCi0gICAgICAgICAgICAgICAgKCpsaXN0ZW5lcnNBcnJh
eSktPnB1c2hPYmplY3QoYnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGxpc3RlbmVyLCBpbmZv
LmV2ZW50VHlwZSwgaW5mby5ub2RlKSk7CisgICAgICAgICAgICAgICAgbGlzdGVuZXJzQXJyYXkt
PnB1c2hPYmplY3QoYnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGxpc3RlbmVyLCBpbmZvLmV2
ZW50VHlwZSwgaW5mby5ub2RlKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTc3NCw3ICs3NzQs
NyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoRXJy
b3JTdHJpbmcqLCBpbnQgbm9kZUlkLCBSZWZQdAogICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsg
aiA8IHZlY3Rvci5zaXplKCk7ICsraikgewogICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJlZEV2
ZW50TGlzdGVuZXImIGxpc3RlbmVyID0gdmVjdG9yW2pdOwogICAgICAgICAgICAgaWYgKCFsaXN0
ZW5lci51c2VDYXB0dXJlKQotICAgICAgICAgICAgICAgICgqbGlzdGVuZXJzQXJyYXkpLT5wdXNo
T2JqZWN0KGJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihsaXN0ZW5lciwgaW5mby5ldmVudFR5
cGUsIGluZm8ubm9kZSkpOworICAgICAgICAgICAgICAgIGxpc3RlbmVyc0FycmF5LT5wdXNoT2Jq
ZWN0KGJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihsaXN0ZW5lciwgaW5mby5ldmVudFR5cGUs
IGluZm8ubm9kZSkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtODc0LDcgKzg3NCw3IEBAIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcqLCBjb25zdCBT
dHJpbmcmIHdoaXRlc3BhY2VUcmltCiAgICAgKnJlc3VsdENvdW50ID0gcmVzdWx0c0l0LT5zZWNv
bmQuc2l6ZSgpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTZWFyY2hSZXN1bHRz
KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCwgaW50IGZy
b21JbmRleCwgaW50IHRvSW5kZXgsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIG5vZGVJZHMpCit2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nKiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50IHRvSW5k
ZXgsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIG5vZGVJZHMpCiB7CiAgICAgU2VhcmNoUmVzdWx0
czo6aXRlcmF0b3IgaXQgPSBtX3NlYXJjaFJlc3VsdHMuZmluZChzZWFyY2hJZCk7CiAgICAgaWYg
KGl0ID09IG1fc2VhcmNoUmVzdWx0cy5lbmQoKSkgewpAQCAtODg5LDcgKzg4OSw3IEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcqIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmCiAgICAgfQogCiAgICAgZm9yIChpbnQgaSA9IGZyb21JbmRleDsg
aSA8IHRvSW5kZXg7ICsraSkKLSAgICAgICAgKCpub2RlSWRzKS0+cHVzaE51bWJlcihwdXNoTm9k
ZVBhdGhUb0Zyb250ZW5kKChpdC0+c2Vjb25kKVtpXS5nZXQoKSkpOworICAgICAgICBub2RlSWRz
LT5wdXNoTnVtYmVyKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoKGl0LT5zZWNvbmQpW2ldLmdldCgp
KSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpc2NhcmRTZWFyY2hSZXN1bHRzKEVy
cm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCkKQEAgLTEwODAsNyArMTA4MCw3IEBA
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Om1vdmVUbyhFcnJvclN0cmluZyogZXJyb3IsIGludCBu
b2RlSWQsIGludCB0YXJnZXRFbGVtZW50CiAgICAgKm5ld05vZGVJZCA9IHB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQobm9kZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVOb2Rl
KEVycm9yU3RyaW5nKiBlcnJvciwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nKiBjb25zdCBvYmpl
Y3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnJlc29sdmVOb2RlKEVycm9yU3RyaW5nKiBlcnJvciwgaW50IG5vZGVJZCwgY29u
c3QgU3RyaW5nKiBjb25zdCBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHJl
c3VsdCkKIHsKICAgICBTdHJpbmcgb2JqZWN0R3JvdXBOYW1lID0gb2JqZWN0R3JvdXAgPyAqb2Jq
ZWN0R3JvdXAgOiAiIjsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7CkBAIC0x
MDkzLDE2ICsxMDkzLDE2IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVOb2RlKEVy
cm9yU3RyaW5nKiBlcnJvciwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nCiAgICAgICAgICplcnJv
ciA9ICJOb2RlIHdpdGggZ2l2ZW4gaWQgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBkb2N1bWVudCI7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgKnJlc3VsdCA9IG9iamVjdDsKKyAgICByZXN1
bHQgPSBvYmplY3Q7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEF0dHJpYnV0ZXMo
RXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+KiByZXN1bHQpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRBdHRyaWJ1dGVzKEVycm9y
U3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYg
cmVzdWx0KQogewogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFbGVtZW50KGVycm9yU3Ry
aW5nLCBub2RlSWQpOwogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
KnJlc3VsdCA9IGJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhlbGVtZW50KTsKKyAgICBy
ZXN1bHQgPSBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoZWxlbWVudCk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlcXVlc3ROb2RlKEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgaW50KiBub2RlSWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5oCmluZGV4IDUwMzA5ZDhjMzhlMTA5ZmQ1NjBhM2JmYjRjNWVmZjA3
ZjRlZmVhODcuLjRhZGU1YmRiNTllZDE4Nzc1Zjc2YmE5YWQzOThjNDI1ODNhZmEyZTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0xMTUsOCAr
MTE1LDggQEAgcHVibGljOgogCiAgICAgLy8gTWV0aG9kcyBjYWxsZWQgZnJvbSB0aGUgZnJvbnRl
bmQgZm9yIERPTSBub2RlcyBpbnNwZWN0aW9uLgogICAgIHZvaWQgcXVlcnlTZWxlY3RvcihFcnJv
clN0cmluZyosIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBpbnQqIGVsZW1l
bnRJZCk7Ci0gICAgdm9pZCBxdWVyeVNlbGVjdG9yQWxsKEVycm9yU3RyaW5nKiwgaW50IG5vZGVJ
ZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJlc3Vs
dCk7Ci0gICAgdm9pZCBnZXREb2N1bWVudChFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+KiByb290KTsKKyAgICB2b2lkIHF1ZXJ5U2VsZWN0b3JBbGwoRXJyb3JTdHJpbmcqLCBp
bnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywgUmVmUHRyPEluc3BlY3RvckFycmF5
PiYgcmVzdWx0KTsKKyAgICB2b2lkIGdldERvY3VtZW50KEVycm9yU3RyaW5nKiwgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mIHJvb3QpOwogICAgIHZvaWQgcmVxdWVzdENoaWxkTm9kZXMoRXJyb3JT
dHJpbmcqLCBpbnQgbm9kZUlkKTsKICAgICB2b2lkIHNldEF0dHJpYnV0ZVZhbHVlKEVycm9yU3Ry
aW5nKiwgaW50IGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZh
bHVlKTsKICAgICB2b2lkIHNldEF0dHJpYnV0ZXNBc1RleHQoRXJyb3JTdHJpbmcqLCBpbnQgZWxl
bWVudElkLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyogY29uc3QgbmFtZSk7CkBA
IC0xMjYsMTIgKzEyNiwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRPdXRlckhUTUwoRXJyb3JT
dHJpbmcqLCBpbnQgbm9kZUlkLCBXVEY6OlN0cmluZyogb3V0ZXJIVE1MKTsKICAgICB2b2lkIHNl
dE91dGVySFRNTChFcnJvclN0cmluZyosIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgb3V0ZXJI
VE1MLCBpbnQqIG5ld0lkKTsKICAgICB2b2lkIHNldE5vZGVWYWx1ZShFcnJvclN0cmluZyosIGlu
dCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAgIHZvaWQgZ2V0RXZlbnRMaXN0ZW5l
cnNGb3JOb2RlKEVycm9yU3RyaW5nKiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5
PiogbGlzdGVuZXJzQXJyYXkpOworICAgIHZvaWQgZ2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVy
cm9yU3RyaW5nKiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgbGlzdGVuZXJz
QXJyYXkpOwogICAgIHZvaWQgcGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyosIGNvbnN0IFN0cmlu
ZyYgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSwgU3RyaW5nKiBzZWFyY2hJZCwgaW50KiByZXN1bHRD
b3VudCk7Ci0gICAgdm9pZCBnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgsIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4qKTsKKyAgICB2b2lkIGdldFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcqLCBjb25z
dCBTdHJpbmcmIHNlYXJjaElkLCBpbnQgZnJvbUluZGV4LCBpbnQgdG9JbmRleCwgUmVmUHRyPElu
c3BlY3RvckFycmF5PiYpOwogICAgIHZvaWQgZGlzY2FyZFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJp
bmcqLCBjb25zdCBTdHJpbmcmIHNlYXJjaElkKTsKLSAgICB2b2lkIHJlc29sdmVOb2RlKEVycm9y
U3RyaW5nKiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nKiBjb25zdCBvYmplY3RHcm91cCwgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCk7Ci0gICAgdm9pZCBnZXRBdHRyaWJ1dGVzKEVy
cm9yU3RyaW5nKiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzdWx0KTsK
KyAgICB2b2lkIHJlc29sdmVOb2RlKEVycm9yU3RyaW5nKiwgaW50IG5vZGVJZCwgY29uc3QgU3Ry
aW5nKiBjb25zdCBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHJlc3VsdCk7
CisgICAgdm9pZCBnZXRBdHRyaWJ1dGVzKEVycm9yU3RyaW5nKiwgaW50IG5vZGVJZCwgUmVmUHRy
PEluc3BlY3RvckFycmF5PiYgcmVzdWx0KTsKICAgICB2b2lkIHNldEluc3BlY3RNb2RlRW5hYmxl
ZChFcnJvclN0cmluZyosIGJvb2wgZW5hYmxlZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4qIGhpZ2hsaWdodENvbmZpZyk7CiAgICAgdm9pZCByZXF1ZXN0Tm9kZShFcnJvclN0cmluZyos
IGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGludCogbm9kZUlkKTsKICAgICB2b2lkIHB1c2hOb2Rl
QnlQYXRoVG9Gcm9udGVuZChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgcGF0aCwgaW50KiBu
b2RlSWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50LmNwcAppbmRleCBiODExZmJhODZkMjE4NjRkZmQwZjBhNzY2MzBiNDA0MDBj
YzcxMzQzLi42M2RhZjM5MjI1Mjg3OTcyNTVjYWQwYWFkZjJiY2E3MWE2NTI2MWM1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
LmNwcApAQCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Ojpk
aXNhYmxlKEVycm9yU3RyaW5nKikKICAgICBtX3N0YXRlLT5zZXRCb29sZWFuKERPTVN0b3JhZ2VB
Z2VudFN0YXRlOjpkb21TdG9yYWdlQWdlbnRFbmFibGVkLCBtX2VuYWJsZWQpOwogfQogCi12b2lk
IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZUVudHJpZXMoRXJyb3JTdHJp
bmcqLCBpbnQgc3RvcmFnZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBlbnRyaWVzKQordm9p
ZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VFbnRyaWVzKEVycm9yU3Ry
aW5nKiwgaW50IHN0b3JhZ2VJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgZW50cmllcykKIHsK
ICAgICBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UqIHN0b3JhZ2VSZXNvdXJjZSA9IGdldERP
TVN0b3JhZ2VSZXNvdXJjZUZvcklkKHN0b3JhZ2VJZCk7CiAgICAgaWYgKHN0b3JhZ2VSZXNvdXJj
ZSkgewpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Ojpn
ZXRET01TdG9yYWdlRW50cmllcyhFcnJvclN0cmluZyosIGludCBzdG9yYWdlSWQsCiAgICAgICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGVudHJ5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwogICAgICAgICAgICAgZW50cnktPnB1c2hTdHJpbmcobmFtZSk7CiAgICAgICAgICAgICBl
bnRyeS0+cHVzaFN0cmluZyh2YWx1ZSk7Ci0gICAgICAgICAgICAoKmVudHJpZXMpLT5wdXNoQXJy
YXkoZW50cnkpOworICAgICAgICAgICAgZW50cmllcy0+cHVzaEFycmF5KGVudHJ5KTsKICAgICAg
ICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQuaAppbmRleCBlODdmZmUyMzM3ODgyZWE0Zjk4ZjA3ZjRhNzAzZDFl
YmNjZDA4NzZlLi5iZDFkNmE3MTljZThiMjE0YzA1MmI5MDljMzhmMDg3ZDYzZGM5Njc4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dC5oCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICAvLyBDYWxsZWQgZnJvbSB0aGUgZnJv
bnQtZW5kLgogICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nKik7CiAgICAgdm9pZCBkaXNhYmxl
KEVycm9yU3RyaW5nKik7Ci0gICAgdm9pZCBnZXRET01TdG9yYWdlRW50cmllcyhFcnJvclN0cmlu
ZyosIGludCBzdG9yYWdlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGVudHJpZXMpOworICAg
IHZvaWQgZ2V0RE9NU3RvcmFnZUVudHJpZXMoRXJyb3JTdHJpbmcqLCBpbnQgc3RvcmFnZUlkLCBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBlbnRyaWVzKTsKICAgICB2b2lkIHNldERPTVN0b3JhZ2VJ
dGVtKEVycm9yU3RyaW5nKiwgaW50IHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYgdmFsdWUsIGJvb2wqIHN1Y2Nlc3MpOwogICAgIHZvaWQgcmVtb3ZlRE9NU3RvcmFn
ZUl0ZW0oRXJyb3JTdHJpbmcqLCBpbnQgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSwgYm9v
bCogc3VjY2Vzcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JEYXRhYmFzZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JEYXRhYmFzZUFnZW50LmNwcAppbmRleCA0Yzg2ZTliYTAzMjZkMWFiMDAyYjVlZTc3ZDE2ZjI1
OTdmOTVmZDA4Li5kOTZiMWU3NjYyNDRjNTY0YWY4MjI1MzcyZDA4NjBmODA3Y2ZjMDUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQu
Y3BwCkBAIC0yOTEsNyArMjkxLDcgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpyZXN0
b3JlKCkKICAgICBtX2VuYWJsZWQgPSAgbV9zdGF0ZS0+Z2V0Qm9vbGVhbihEYXRhYmFzZUFnZW50
U3RhdGU6OmRhdGFiYXNlQWdlbnRFbmFibGVkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEYXRhYmFz
ZUFnZW50OjpnZXREYXRhYmFzZVRhYmxlTmFtZXMoRXJyb3JTdHJpbmcqIGVycm9yLCBpbnQgZGF0
YWJhc2VJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogbmFtZXMpCit2b2lkIEluc3BlY3RvckRh
dGFiYXNlQWdlbnQ6OmdldERhdGFiYXNlVGFibGVOYW1lcyhFcnJvclN0cmluZyogZXJyb3IsIGlu
dCBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBuYW1lcykKIHsKICAgICBpZiAo
IW1fZW5hYmxlZCkgewogICAgICAgICAqZXJyb3IgPSAiRGF0YWJhc2UgYWdlbnQgaXMgbm90IGVu
YWJsZWQiOwpAQCAtMzAzLDcgKzMwMyw3IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6
Z2V0RGF0YWJhc2VUYWJsZU5hbWVzKEVycm9yU3RyaW5nKiBlcnJvciwgaW50IGRhdGFiCiAgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IHRhYmxlTmFtZXMgPSBkYXRhYmFzZS0+dGFibGVOYW1lcygpOwog
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0YWJsZU5hbWVzLnNpemUoKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgKCpuYW1lcykt
PnB1c2hTdHJpbmcodGFibGVOYW1lc1tpXSk7CisgICAgICAgICAgICBuYW1lcy0+cHVzaFN0cmlu
Zyh0YWJsZU5hbWVzW2ldKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCmluZGV4IDVlMDhmYTg5YmE3MjZmM2Q2NjI1
ZThjNmZlODEyZjNlNzNjMWZkZjkuLmM5YzJjNTNjNDRkNWQzNTQzMTA4NTAwN2I4OWMyOWIxYjEw
MjY4MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRh
YmFzZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFi
YXNlQWdlbnQuaApAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIGZyb20g
dGhlIGZyb250LWVuZC4KICAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyopOwogICAgIHZvaWQg
ZGlzYWJsZShFcnJvclN0cmluZyopOwotICAgIHZvaWQgZ2V0RGF0YWJhc2VUYWJsZU5hbWVzKEVy
cm9yU3RyaW5nKiwgaW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIG5hbWVz
KTsKKyAgICB2b2lkIGdldERhdGFiYXNlVGFibGVOYW1lcyhFcnJvclN0cmluZyosIGludCBkYXRh
YmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBuYW1lcyk7CiAgICAgdm9pZCBleGVjdXRl
U1FMKEVycm9yU3RyaW5nKiwgaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGJv
b2wqIHN1Y2Nlc3MsIGludCogdHJhbnNhY3Rpb25JZCk7CiAKICAgICAvLyBDYWxsZWQgZnJvbSB0
aGUgaW5qZWN0ZWQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGU5MDQ5Y2FhODgyNzA1OGRiODQ3ZmRkMjA4
ZGE5M2QwYWYwZTA5ODYuLmFjMjkzMGNhMTEzNTE5YjU2MzI3YTg5OTg5ZWU4OGI1N2Q2ODIwMWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJB
Z2VudC5jcHAKQEAgLTE5OCw3ICsxOTgsNyBAQCBzdGF0aWMgYm9vbCBtYXRjaGVzKGNvbnN0IFN0
cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHBhdHRlcm4sIGJvb2wgaXNSZWdleCkKICAgICByZXR1
cm4gdXJsID09IHBhdHRlcm47CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IGxpbmVOdW1iZXIs
IGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxVUkwsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0
aW9uYWxVUkxSZWdleCwgY29uc3QgaW50KiBjb25zdCBvcHRpb25hbENvbHVtbk51bWJlciwgY29u
c3QgU3RyaW5nKiBjb25zdCBvcHRpb25hbENvbmRpdGlvbiwgU3RyaW5nKiBvdXRCcmVha3BvaW50
SWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGxvY2F0aW9ucykKK3ZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywg
aW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxVUkwsIGNvbnN0IFN0
cmluZyogY29uc3Qgb3B0aW9uYWxVUkxSZWdleCwgY29uc3QgaW50KiBjb25zdCBvcHRpb25hbENv
bHVtbk51bWJlciwgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRpb25hbENvbmRpdGlvbiwgU3RyaW5n
KiBvdXRCcmVha3BvaW50SWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIGxvY2F0aW9ucykKIHsK
ICAgICBpZiAoIW9wdGlvbmFsVVJMID09ICFvcHRpb25hbFVSTFJlZ2V4KSB7CiAgICAgICAgICpl
cnJvclN0cmluZyA9ICJFaXRoZXIgdXJsIG9yIHVybFJlZ2V4IG11c3QgYmUgc3BlY2lmaWVkLiI7
CkBAIC0yMjUsOCArMjI1LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVh
a3BvaW50QnlVcmwoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbGkKICAgICAgICAgaWYg
KCFtYXRjaGVzKGl0LT5zZWNvbmQudXJsLCB1cmwsIGlzUmVnZXgpKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGxvY2F0aW9uID0gcmVzb2x2
ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkLCBpdC0+Zmlyc3QsIGJyZWFrcG9pbnQpOwotICAgICAg
ICBpZiAobG9jYXRpb24pCi0gICAgICAgICAgICAoKmxvY2F0aW9ucyktPnB1c2hPYmplY3QobG9j
YXRpb24pOworICAgICAgICBsb2NhdGlvbnMtPnB1c2hPYmplY3QobG9jYXRpb24pOwogICAgIH0K
ICAgICAqb3V0QnJlYWtwb2ludElkID0gYnJlYWtwb2ludElkOwogfQpAQCAtMjQzLDcgKzI0Miw3
IEBAIHN0YXRpYyBib29sIHBhcnNlTG9jYXRpb24oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2NhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludChFcnJvclN0cmluZyogZXJyb3JT
dHJpbmcsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2NhdGlvbiwgY29uc3QgU3RyaW5n
KiBjb25zdCBvcHRpb25hbENvbmRpdGlvbiwgU3RyaW5nKiBvdXRCcmVha3BvaW50SWQsIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+KiBhY3R1YWxMb2NhdGlvbikKK3ZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6c2V0QnJlYWtwb2ludChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBsb2NhdGlvbiwgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRpb25h
bENvbmRpdGlvbiwgU3RyaW5nKiBvdXRCcmVha3BvaW50SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiBhY3R1YWxMb2NhdGlvbikKIHsKICAgICBTdHJpbmcgc2NyaXB0SWQ7CiAgICAgaW50IGxp
bmVOdW1iZXI7CkBAIC0yNTgsOCArMjU3LDggQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgUGFzc1JlZlB0cjwKICAg
ICBpZiAobV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5maW5kKGJyZWFr
cG9pbnRJZCkgIT0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5lbmQo
KSkKICAgICAgICAgcmV0dXJuOwogICAgIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludChsaW5l
TnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNvbmRpdGlvbik7Ci0gICAgKmFjdHVhbExvY2F0aW9uID0g
cmVzb2x2ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkLCBzY3JpcHRJZCwgYnJlYWtwb2ludCk7Ci0g
ICAgaWYgKCphY3R1YWxMb2NhdGlvbikKKyAgICBhY3R1YWxMb2NhdGlvbiA9IHJlc29sdmVCcmVh
a3BvaW50KGJyZWFrcG9pbnRJZCwgc2NyaXB0SWQsIGJyZWFrcG9pbnQpOworICAgIGlmIChhY3R1
YWxMb2NhdGlvbikKICAgICAgICAgKm91dEJyZWFrcG9pbnRJZCA9IGJyZWFrcG9pbnRJZDsKICAg
ICBlbHNlCiAgICAgICAgICplcnJvclN0cmluZyA9ICJDb3VsZCBub3QgcmVzb2x2ZSBicmVha3Bv
aW50IjsKQEAgLTMzNSwyOCArMzM0LDI4IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gc2NyaXB0VG9JbnNwZWN0b3JPYmplY3QoU2NyaXB0T2JqZWN0IHNjcmlwdE9iCiAgICAg
cmV0dXJuIHZhbHVlLT5hc09iamVjdCgpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnNlYXJjaEluQ29udGVudChFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgc2Ny
aXB0SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsQ2Fz
ZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+KiByZXN1bHRzKQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZWFy
Y2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBj
b25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbENhc2VTZW5zaXRp
dmUsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiYgcmVzdWx0cykKIHsKICAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElzUmVnZXggPyAq
b3B0aW9uYWxJc1JlZ2V4IDogZmFsc2U7CiAgICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0gb3B0aW9u
YWxDYXNlU2Vuc2l0aXZlID8gKm9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA6IGZhbHNlOwogCiAgICAg
U2NyaXB0c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHMuZmluZChzY3JpcHRJZCk7CiAgICAg
aWYgKGl0ICE9IG1fc2NyaXB0cy5lbmQoKSkKLSAgICAgICAgKnJlc3VsdHMgPSBDb250ZW50U2Vh
cmNoVXRpbHM6OnNlYXJjaEluVGV4dEJ5TGluZXMoaXQtPnNlY29uZC5zb3VyY2UsIHF1ZXJ5LCBj
YXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KTsKKyAgICAgICAgcmVzdWx0cyA9IENvbnRlbnRTZWFyY2hV
dGlsczo6c2VhcmNoSW5UZXh0QnlMaW5lcyhpdC0+c2Vjb25kLnNvdXJjZSwgcXVlcnksIGNhc2VT
ZW5zaXRpdmUsIGlzUmVnZXgpOwogICAgIGVsc2UKICAgICAgICAgKmVycm9yID0gIk5vIHNjcmlw
dCBmb3IgaWQ6ICIgKyBzY3JpcHRJZDsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmlw
dElkLCBjb25zdCBTdHJpbmcmIG5ld0NvbnRlbnQsIGNvbnN0IGJvb2wqIGNvbnN0IHByZXZpZXcs
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIG5ld0NhbGxGcmFtZXMsIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+KiByZXN1bHQpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFNjcmlwdFNv
dXJjZShFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFN0
cmluZyYgbmV3Q29udGVudCwgY29uc3QgYm9vbCogY29uc3QgcHJldmlldywgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiYgbmV3Q2FsbEZyYW1lcywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHJlc3Vs
dCkKIHsKICAgICBib29sIHByZXZpZXdPbmx5ID0gcHJldmlldyAmJiAqcHJldmlldzsKICAgICBT
Y3JpcHRPYmplY3QgcmVzdWx0T2JqZWN0OwogICAgIGlmICghc2NyaXB0RGVidWdTZXJ2ZXIoKS5z
ZXRTY3JpcHRTb3VyY2Uoc2NyaXB0SWQsIG5ld0NvbnRlbnQsIHByZXZpZXdPbmx5LCBlcnJvciwg
Jm1fY3VycmVudENhbGxTdGFjaywgJnJlc3VsdE9iamVjdCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICAqbmV3Q2FsbEZyYW1lcyA9IGN1cnJlbnRDYWxsRnJhbWVzKCk7CisgICAgbmV3Q2FsbEZyYW1l
cyA9IGN1cnJlbnRDYWxsRnJhbWVzKCk7CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2Jq
ZWN0ID0gc2NyaXB0VG9JbnNwZWN0b3JPYmplY3QocmVzdWx0T2JqZWN0KTsKICAgICBpZiAob2Jq
ZWN0KQotICAgICAgICAqcmVzdWx0ID0gb2JqZWN0OworICAgICAgICByZXN1bHQgPSBvYmplY3Q7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0U2NyaXB0U291cmNlKEVycm9y
U3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgU3RyaW5nKiBzY3JpcHRTb3Vy
Y2UpCkBAIC0zNjgsMTQgKzM2NywxNCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Omdl
dFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgcwogICAgICAg
ICAqZXJyb3IgPSAiTm8gc2NyaXB0IGZvciBpZDogIiArIHNjcmlwdElkOwogfQogCi12b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldEZ1bmN0aW9uTG9jYXRpb24oRXJyb3JTdHJpbmcqIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+KiBsb2NhdGlvbikKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0RnVuY3Rpb25M
b2NhdGlvbihFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25J
ZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGxvY2F0aW9uKQogewogICAgIEluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdGVkU2Ny
aXB0Rm9yT2JqZWN0SWQoZnVuY3Rpb25JZCk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05v
VmFsdWUoKSkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW5zcGVjdGVkIGZyYW1lIGhhcyBn
b25lIjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpbmplY3RlZFNjcmlwdC5nZXRGdW5j
dGlvbkxvY2F0aW9uKGVycm9yU3RyaW5nLCBmdW5jdGlvbklkLCBsb2NhdGlvbik7CisgICAgaW5q
ZWN0ZWRTY3JpcHQuZ2V0RnVuY3Rpb25Mb2NhdGlvbihlcnJvclN0cmluZywgZnVuY3Rpb25JZCwg
JmxvY2F0aW9uKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hlZHVsZVBh
dXNlT25OZXh0U3RhdGVtZW50KGNvbnN0IFN0cmluZyYgYnJlYWtSZWFzb24sIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBkYXRhKQpAQCAtNDUxLDE0ICs0NTAsMTQgQEAgdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9uRXhjZXB0aW9ucyhFcnJvclN0cmluZyogZXJyb3JT
dHJpbmcsIGNvbnMKICAgICAgICAgKmVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yLiBDb3Vs
ZCBub3QgY2hhbmdlIHBhdXNlIG9uIGV4Y2VwdGlvbnMgc3RhdGUiOwogfQogCi12b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JTdHJpbmcqIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Np
b24sIGNvbnN0IFN0cmluZyogY29uc3Qgb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGNvbnN0IGlu
Y2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogY29uc3QgcmV0dXJuQnlWYWx1ZSwgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCwgYm9vbCogd2FzVGhyb3duKQordm9pZCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nKiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNz
aW9uLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBjb25zdCBp
bmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGNvbnN0IHJldHVybkJ5VmFsdWUsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQsIGJvb2wqIHdhc1Rocm93bikKIHsKICAgICBJ
bmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5p
bmplY3RlZFNjcmlwdEZvck9iamVjdElkKGNhbGxGcmFtZUlkKTsKICAgICBpZiAoaW5qZWN0ZWRT
Y3JpcHQuaGFzTm9WYWx1ZSgpKSB7CiAgICAgICAgICplcnJvclN0cmluZyA9ICJJbnNwZWN0ZWQg
ZnJhbWUgaGFzIGdvbmUiOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGluamVjdGVkU2Ny
aXB0LmV2YWx1YXRlT25DYWxsRnJhbWUoZXJyb3JTdHJpbmcsIG1fY3VycmVudENhbGxTdGFjaywg
Y2FsbEZyYW1lSWQsIGV4cHJlc3Npb24sIG9iamVjdEdyb3VwID8gKm9iamVjdEdyb3VwIDogIiIs
IGluY2x1ZGVDb21tYW5kTGluZUFQSSA/ICppbmNsdWRlQ29tbWFuZExpbmVBUEkgOiBmYWxzZSwg
cmV0dXJuQnlWYWx1ZSA/ICpyZXR1cm5CeVZhbHVlIDogZmFsc2UsIHJlc3VsdCwgd2FzVGhyb3du
KTsKKyAgICBpbmplY3RlZFNjcmlwdC5ldmFsdWF0ZU9uQ2FsbEZyYW1lKGVycm9yU3RyaW5nLCBt
X2N1cnJlbnRDYWxsU3RhY2ssIGNhbGxGcmFtZUlkLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCA/
ICpvYmplY3RHcm91cCA6ICIiLCBpbmNsdWRlQ29tbWFuZExpbmVBUEkgPyAqaW5jbHVkZUNvbW1h
bmRMaW5lQVBJIDogZmFsc2UsIHJldHVybkJ5VmFsdWUgPyAqcmV0dXJuQnlWYWx1ZSA6IGZhbHNl
LCAmcmVzdWx0LCB3YXNUaHJvd24pOwogfQogCiBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjdXJyZW50Q2FsbEZyYW1lcygpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAppbmRleCBiYTI0MmRj
N2M1YjJkNjcyM2NjY2ZjOWJlNjMyN2ExZTliMzc3ZDUwLi44OTM5YWY4MGY0NTg3MGY3NmQyMmFm
YjI5ZWI1YWJhYTZhOTI5ZjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTgxLDE1ICs4MSwxNSBAQCBwdWJsaWM6CiAgICAg
Ly8gUGFydCBvZiB0aGUgcHJvdG9jb2wuCiAgICAgdm9pZCBzZXRCcmVha3BvaW50c0FjdGl2ZShF
cnJvclN0cmluZyosIGJvb2wgYWN0aXZlKTsKIAotICAgIHZvaWQgc2V0QnJlYWtwb2ludEJ5VXJs
KEVycm9yU3RyaW5nKiwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9u
YWxVUkwsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxVUkxSZWdleCwgY29uc3QgaW50KiBj
b25zdCBvcHRpb25hbENvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRpb25hbENv
bmRpdGlvbiwgU3RyaW5nKiBicmVha3BvaW50SWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGxv
Y2F0aW9ucyk7Ci0gICAgdm9pZCBzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nKiwgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGxvY2F0aW9uLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFs
Q29uZGl0aW9uLCBTdHJpbmcqIGJyZWFrcG9pbnRJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4q
IGFjdHVhbExvY2F0aW9uKTsKKyAgICB2b2lkIHNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmlu
ZyosIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsVVJMLCBjb25z
dCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsVVJMUmVnZXgsIGNvbnN0IGludCogY29uc3Qgb3B0aW9u
YWxDb2x1bW5OdW1iZXIsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxDb25kaXRpb24sIFN0
cmluZyogYnJlYWtwb2ludElkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBsb2NhdGlvbnMpOwor
ICAgIHZvaWQgc2V0QnJlYWtwb2ludChFcnJvclN0cmluZyosIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBsb2NhdGlvbiwgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRpb25hbENvbmRpdGlvbiwg
U3RyaW5nKiBicmVha3BvaW50SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBhY3R1YWxMb2Nh
dGlvbik7CiAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJiBicmVha3BvaW50SWQpOwogICAgIHZvaWQgY29udGludWVUb0xvY2F0aW9uKEVycm9yU3Ry
aW5nKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGxvY2F0aW9uKTsKIAotICAgIHZvaWQg
c2VhcmNoSW5Db250ZW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29u
c3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxDYXNlU2Vuc2l0aXZl
LCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4qKTsKLSAgICB2b2lkIHNldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmlu
ZyYgc2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgbmV3Q29udGVudCwgY29uc3QgYm9vbCogY29uc3Qg
cHJldmlldywgUmVmUHRyPEluc3BlY3RvckFycmF5PiogbmV3Q2FsbEZyYW1lcywgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4qIHJlc3VsdCk7CisgICAgdm9pZCBzZWFyY2hJbkNvbnRlbnQoRXJyb3JT
dHJpbmcqLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25z
dCBib29sKiBjb25zdCBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGNvbnN0IG9w
dGlvbmFsSXNSZWdleCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYpOworICAgIHZvaWQgc2V0U2Ny
aXB0U291cmNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29uc3QgU3Ry
aW5nJiBuZXdDb250ZW50LCBjb25zdCBib29sKiBjb25zdCBwcmV2aWV3LCBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+JiBuZXdDYWxsRnJhbWVzLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0
KTsKICAgICB2b2lkIGdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYg
c2NyaXB0SWQsIFN0cmluZyogc2NyaXB0U291cmNlKTsKLSAgICB2b2lkIGdldEZ1bmN0aW9uTG9j
YXRpb24oRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+KiBsb2NhdGlvbik7CisgICAgdm9pZCBnZXRGdW5jdGlvbkxvY2F0aW9uKEVy
cm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYgbG9jYXRpb24pOwogICAgIHZvaWQgc2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChj
b25zdCBTdHJpbmcmIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0
YSk7CiAgICAgdm9pZCBjYW5jZWxQYXVzZU9uTmV4dFN0YXRlbWVudCgpOwogICAgIHZvaWQgYnJl
YWtQcm9ncmFtKGNvbnN0IFN0cmluZyYgYnJlYWtSZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBkYXRhKTsKQEAgLTEwNSw3ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyogY29uc3Qgb2JqZWN0R3JvdXAsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wqIGNvbnN0IGluY2x1ZGVDb21tYW5kTGlu
ZUFQSSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCogY29uc3QgcmV0
dXJuQnlWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4qIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mIHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCogd2FzVGhyb3duKTsKIAogICAgIGNsYXNzIExpc3RlbmVyIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCmluZGV4IDVlNjQxODgwYzM5
OGY5YzQ3MGFlN2I2YWNhZGIxNzEwZWViM2Y1YmQuLjg1MmUwMzAxMjUwMjY4MGQ4NzZmNzdiYjdi
Mjk3OGMxM2NjMzQ3NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JNZW1vcnlBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvck1lbW9yeUFnZW50LmNwcApAQCAtMTQ4LDcgKzE0OCw3IEBAIEluc3BlY3Rvck1lbW9yeUFn
ZW50Ojp+SW5zcGVjdG9yTWVtb3J5QWdlbnQoKQogewogfQogCi12b2lkIEluc3BlY3Rvck1lbW9y
eUFnZW50OjpnZXRET01Ob2RlQ291bnQoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+KiByZXN1bHQpCit2b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpnZXRET01Ob2RlQ291bnQo
RXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiByZXN1bHQpCiB7CiAgICAgQ291
bnRlclZpc2l0b3IgY291bnRlclZpc2l0b3IobV9wYWdlKTsKICAgICBTY3JpcHRQcm9maWxlcjo6
dmlzaXRKU0RPTVdyYXBwZXJzKCZjb3VudGVyVmlzaXRvcik7CkBAIC0xNTksNyArMTU5LDcgQEAg
dm9pZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6Z2V0RE9NTm9kZUNvdW50KEVycm9yU3RyaW5nKiwg
UmVmUHRyPEluc3BlY3RvckFycmF5PioKICAgICAgICAgICAgIGNvdW50ZXJWaXNpdG9yLnZpc2l0
Tm9kZShkb2MpOwogICAgIH0KIAotICAgICpyZXN1bHQgPSBjb3VudGVyVmlzaXRvci5jb3VudGVy
cygpOworICAgIHJlc3VsdCA9IGNvdW50ZXJWaXNpdG9yLmNvdW50ZXJzKCk7CiB9CiAKIEluc3Bl
Y3Rvck1lbW9yeUFnZW50OjpJbnNwZWN0b3JNZW1vcnlBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogc3RhdGUsIFBhZ2UqIHBhZ2Us
IEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmgKaW5kZXggZDhkYWZhODk4ODY5MjYyOGRjM2ZjNzcy
NDk2NGNkYzRkMmZiZjI0ZC4uYjFiYzExNTE1NWRjMDEzYzUwNmIzZGEyMDAyN2IwNDRiYjkxYmRk
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFn
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50
LmgKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IEluc3BlY3Rvck1lbW9yeUFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIHN0YXRlLCBwYWdlLCBk
b21BZ2VudCkpOwogICAgIH0KIAotICAgIHZvaWQgZ2V0RE9NTm9kZUNvdW50KEVycm9yU3RyaW5n
KiwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzdWx0KTsKKyAgICB2b2lkIGdldERPTU5vZGVD
b3VudChFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIHJlc3VsdCk7CiAKICAg
ICB+SW5zcGVjdG9yTWVtb3J5QWdlbnQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAppbmRleCAyZGU0ZDE1ZmQ0MGEwODgzNDM0ZDQ3Yjky
NDU1MTRmOTQ0ODlhM2EwLi5iMWM5YWM0YjVmZTMwNjZjNzdiMTExODhlYmM5NGRmZjdkY2ZlZTkw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNw
cApAQCAtNDA5LDcgKzQwOSw3IEBAIHN0YXRpYyBWZWN0b3I8S1VSTD4gYWxsUmVzb3VyY2VzVVJM
c0ZvckZyYW1lKEZyYW1lKiBmcmFtZSkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIElu
c3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4qIGNvb2tpZXMsIFdURjo6U3RyaW5nKiBjb29raWVzU3RyaW5nKQordm9pZCBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+JiBjb29raWVzLCBXVEY6OlN0cmluZyogY29va2llc1N0cmluZykKIHsKICAgICAvLyBJ
ZiB3ZSBjYW4gZ2V0IHJhdyBjb29raWVzLgogICAgIExpc3RIYXNoU2V0PENvb2tpZT4gcmF3Q29v
a2llc0xpc3Q7CkBAIC00NDYsNyArNDQ2LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6Omdl
dENvb2tpZXMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBjb29raWUKICAg
ICB9CiAKICAgICBpZiAocmF3Q29va2llc0ltcGxlbWVudGVkKQotICAgICAgICAqY29va2llcyA9
IGJ1aWxkQXJyYXlGb3JDb29raWVzKHJhd0Nvb2tpZXNMaXN0KTsKKyAgICAgICAgY29va2llcyA9
IGJ1aWxkQXJyYXlGb3JDb29raWVzKHJhd0Nvb2tpZXNMaXN0KTsKICAgICBlbHNlCiAgICAgICAg
ICpjb29raWVzU3RyaW5nID0gc3RyaW5nQ29va2llc0xpc3Q7CiB9CkBAIC00NjQsOSArNDY0LDkg
QEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZShFcnJvclN0cmluZyosIGNv
bnN0IFN0cmluZyYgY29va2llTmFtZSwgY28KICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFn
ZUFnZW50OjpnZXRSZXNvdXJjZVRyZWUoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0Piogb2JqZWN0KQordm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldFJlc291cmNlVHJlZShF
cnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBvYmplY3QpCiB7Ci0gICAgKm9i
amVjdCA9IGJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKG1fcGFnZS0+bWFpbkZyYW1lKCkpOworICAg
IG9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKG1fcGFnZS0+bWFpbkZyYW1lKCkpOwog
fQogCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VDb250ZW50KEVycm9yU3Ry
aW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVy
bCwgU3RyaW5nKiBjb250ZW50LCBib29sKiBiYXNlNjRFbmNvZGVkKQpAQCAtNDkxLDkgKzQ5MSw5
IEBAIHN0YXRpYyBib29sIHRleHRDb250ZW50Rm9yQ2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3Vy
Y2UqIGNhY2hlZFJlc291cmNlLCBTdHJpbmcqCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZShFcnJvclN0cmluZyosIGNvbnN0
IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcXVlcnks
IGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogY29u
c3Qgb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiByZXN1bHRzKQordm9p
ZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVzb3VyY2UoRXJyb3JTdHJpbmcqLCBjb25z
dCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHF1ZXJ5
LCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGNv
bnN0IG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgcmVzdWx0cykKIHsK
LSAgICAqcmVzdWx0cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICByZXN1bHRzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogCiAgICAgYm9vbCBpc1JlZ2V4ID0gb3B0aW9uYWxJ
c1JlZ2V4ID8gKm9wdGlvbmFsSXNSZWdleCA6IGZhbHNlOwogICAgIGJvb2wgY2FzZVNlbnNpdGl2
ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA/ICpvcHRpb25hbENhc2VTZW5zaXRpdmUgOiBmYWxz
ZTsKQEAgLTUyMCw3ICs1MjAsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5S
ZXNvdXJjZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgYwogICAgIGlmICgh
c3VjY2VzcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgKnJlc3VsdHMgPSBDb250ZW50U2VhcmNo
VXRpbHM6OnNlYXJjaEluVGV4dEJ5TGluZXMoY29udGVudCwgcXVlcnksIGNhc2VTZW5zaXRpdmUs
IGlzUmVnZXgpOworICAgIHJlc3VsdHMgPSBDb250ZW50U2VhcmNoVXRpbHM6OnNlYXJjaEluVGV4
dEJ5TGluZXMoY29udGVudCwgcXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgpOwogfQogCiBz
dGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU2VhcmNoUmVz
dWx0KGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBtYXRjaGVz
Q291bnQpCkBAIC01MzMsNyArNTMzLDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChjb25zdCBTdHJpbmcmIGZyYW0KICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNv
dXJjZXMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IGJvb2wqIGNvbnN0
IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxJc1JlZ2V4
LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiByZXN1bHRzKQordm9pZCBJbnNwZWN0b3JQYWdlQWdl
bnQ6OnNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiB0ZXh0LCBj
b25zdCBib29sKiBjb25zdCBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGNvbnN0
IG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgcmVzdWx0cykKIHsKICAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHNlYXJjaFJlc3VsdHMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CiAKQEAgLTU1OSw3ICs1NTksNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6
c2VhcmNoSW5SZXNvdXJjZXMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbgog
ICAgICAgICB9CiAgICAgfQogCi0gICAgKnJlc3VsdHMgPSBzZWFyY2hSZXN1bHRzOworICAgIHJl
c3VsdHMgPSBzZWFyY2hSZXN1bHRzOwogfQogCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlk
Q2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lKiBmcmFtZSwgRE9NV3JhcHBlcldvcmxkKiB3
b3JsZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdl
QWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaApp
bmRleCAyZmEyMWMwNmNjZDFiM2RhOTZkMzY2Yzc0M2RjM2E4MmVhMDMwMmJkLi43OWQyMmU1YmMx
ZTg2OTlkMzNhM2I3NzhmZjEzYjliNGE1ZGQ1MDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCkBAIC05MywxMiArOTMsMTIgQEAgcHVibGljOgog
ICAgIHZvaWQgcmVtb3ZlU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChFcnJvclN0cmluZyosIGNvbnN0
IFN0cmluZyYgaWRlbnRpZmllcik7CiAgICAgdm9pZCByZWxvYWQoRXJyb3JTdHJpbmcqLCBjb25z
dCBib29sKiBjb25zdCBvcHRpb25hbElnbm9yZUNhY2hlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFs
U2NyaXB0VG9FdmFsdWF0ZU9uTG9hZCk7CiAgICAgdm9pZCBvcGVuKEVycm9yU3RyaW5nKiwgY29u
c3QgU3RyaW5nJiB1cmwsIGNvbnN0IGJvb2wqIGNvbnN0IGluTmV3V2luZG93KTsKLSAgICB2b2lk
IGdldENvb2tpZXMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBjb29raWVz
LCBXVEY6OlN0cmluZyogY29va2llc1N0cmluZyk7CisgICAgdm9pZCBnZXRDb29raWVzKEVycm9y
U3RyaW5nKiwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgY29va2llcywgV1RGOjpTdHJpbmcqIGNv
b2tpZXNTdHJpbmcpOwogICAgIHZvaWQgZGVsZXRlQ29va2llKEVycm9yU3RyaW5nKiwgY29uc3Qg
U3RyaW5nJiBjb29raWVOYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbik7Ci0gICAgdm9pZCBnZXRS
ZXNvdXJjZVRyZWUoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiopOworICAg
IHZvaWQgZ2V0UmVzb3VyY2VUcmVlKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mKTsKICAgICB2b2lkIGdldFJlc291cmNlQ29udGVudChFcnJvclN0cmluZyosIGNvbnN0IFN0
cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIFN0cmluZyogY29udGVudCwgYm9vbCog
YmFzZTY0RW5jb2RlZCk7Ci0gICAgdm9pZCBzZWFyY2hJblJlc291cmNlKEVycm9yU3RyaW5nKiwg
Y29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBx
dWVyeSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29s
KiBjb25zdCBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qKTsKLSAgICB2
b2lkIHNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
Ym9vbCogY29uc3QgY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogY29uc3QgaXNSZWdleCwgUmVm
UHRyPEluc3BlY3RvckFycmF5PiopOworICAgIHZvaWQgc2VhcmNoSW5SZXNvdXJjZShFcnJvclN0
cmluZyosIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0
cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29u
c3QgYm9vbCogY29uc3Qgb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+Jik7
CisgICAgdm9pZCBzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYs
IGNvbnN0IGJvb2wqIGNvbnN0IGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGNvbnN0IGlzUmVn
ZXgsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbiBBUEkKICAgICB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSos
IERPTVdyYXBwZXJXb3JsZCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCmluZGV4IDIyMjgyMjMyNGEyOTUzNjk0ZGRkODlmODZk
YjBhNmZlODM4ZGMyMjUuLjczY2ZhNWY3YzU5ZmI2NGRlYzE0NDA1OWE3MTEwZWY5ZDY3NzU5YWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudC5jcHAKQEAgLTE5MiwxNCArMTkyLDE0IEBAIFN0cmluZyBJbnNwZWN0b3JQcm9maWxlckFn
ZW50OjpnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKGJvb2wgaW5jcmVtZW50CiAg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoVXNlckluaXRpYXRlZFByb2ZpbGVOYW1lLCAnLicsIFN0cmlu
Zzo6bnVtYmVyKG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyKSk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZUhlYWRlcnMoRXJyb3JTdHJpbmcq
LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBoZWFkZXJzKQordm9pZCBJbnNwZWN0b3JQcm9maWxl
ckFnZW50OjpnZXRQcm9maWxlSGVhZGVycyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4mIGhlYWRlcnMpCiB7CiAgICAgUHJvZmlsZXNNYXA6Oml0ZXJhdG9yIHByb2ZpbGVzRW5k
ID0gbV9wcm9maWxlcy5lbmQoKTsKICAgICBmb3IgKFByb2ZpbGVzTWFwOjppdGVyYXRvciBpdCA9
IG1fcHJvZmlsZXMuYmVnaW4oKTsgaXQgIT0gcHJvZmlsZXNFbmQ7ICsraXQpCi0gICAgICAgICgq
aGVhZGVycyktPnB1c2hPYmplY3QoY3JlYXRlUHJvZmlsZUhlYWRlcigqaXQtPnNlY29uZCkpOwor
ICAgICAgICBoZWFkZXJzLT5wdXNoT2JqZWN0KGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT5zZWNv
bmQpKTsKICAgICBIZWFwU25hcHNob3RzTWFwOjppdGVyYXRvciBzbmFwc2hvdHNFbmQgPSBtX3Nu
YXBzaG90cy5lbmQoKTsKICAgICBmb3IgKEhlYXBTbmFwc2hvdHNNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9zbmFwc2hvdHMuYmVnaW4oKTsgaXQgIT0gc25hcHNob3RzRW5kOyArK2l0KQotICAgICAgICAo
KmhlYWRlcnMpLT5wdXNoT2JqZWN0KGNyZWF0ZVNuYXBzaG90SGVhZGVyKCppdC0+c2Vjb25kKSk7
CisgICAgICAgIGhlYWRlcnMtPnB1c2hPYmplY3QoY3JlYXRlU25hcHNob3RIZWFkZXIoKml0LT5z
ZWNvbmQpKTsKIH0KIAogbmFtZXNwYWNlIHsKQEAgLTIxNywyMSArMjE3LDIxIEBAIHByaXZhdGU6
CiAKIH0gLy8gbmFtZXNwYWNlCiAKLXZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJv
ZmlsZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgdHlwZSwgdW5zaWduZWQgdWlkLCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiogcHJvZmlsZU9iamVjdCkKK3ZvaWQgSW5zcGVjdG9yUHJvZmls
ZXJBZ2VudDo6Z2V0UHJvZmlsZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgdHlwZSwgdW5z
aWduZWQgdWlkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcHJvZmlsZU9iamVjdCkKIHsKICAg
ICBpZiAodHlwZSA9PSBDUFVQcm9maWxlVHlwZSkgewogICAgICAgICBQcm9maWxlc01hcDo6aXRl
cmF0b3IgaXQgPSBtX3Byb2ZpbGVzLmZpbmQodWlkKTsKICAgICAgICAgaWYgKGl0ICE9IG1fcHJv
ZmlsZXMuZW5kKCkpIHsKLSAgICAgICAgICAgICpwcm9maWxlT2JqZWN0ID0gY3JlYXRlUHJvZmls
ZUhlYWRlcigqaXQtPnNlY29uZCk7Ci0gICAgICAgICAgICAoKnByb2ZpbGVPYmplY3QpLT5zZXRP
YmplY3QoImhlYWQiLCBpdC0+c2Vjb25kLT5idWlsZEluc3BlY3Rvck9iamVjdEZvckhlYWQoKSk7
CisgICAgICAgICAgICBwcm9maWxlT2JqZWN0ID0gY3JlYXRlUHJvZmlsZUhlYWRlcigqaXQtPnNl
Y29uZCk7CisgICAgICAgICAgICBwcm9maWxlT2JqZWN0LT5zZXRPYmplY3QoImhlYWQiLCBpdC0+
c2Vjb25kLT5idWlsZEluc3BlY3Rvck9iamVjdEZvckhlYWQoKSk7CiAgICAgICAgICAgICBpZiAo
aXQtPnNlY29uZC0+Ym90dG9tVXBIZWFkKCkpCi0gICAgICAgICAgICAgICAgKCpwcm9maWxlT2Jq
ZWN0KS0+c2V0T2JqZWN0KCJib3R0b21VcEhlYWQiLCBpdC0+c2Vjb25kLT5idWlsZEluc3BlY3Rv
ck9iamVjdEZvckJvdHRvbVVwSGVhZCgpKTsKKyAgICAgICAgICAgICAgICBwcm9maWxlT2JqZWN0
LT5zZXRPYmplY3QoImJvdHRvbVVwSGVhZCIsIGl0LT5zZWNvbmQtPmJ1aWxkSW5zcGVjdG9yT2Jq
ZWN0Rm9yQm90dG9tVXBIZWFkKCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICh0eXBlID09
IEhlYXBQcm9maWxlVHlwZSkgewogICAgICAgICBIZWFwU25hcHNob3RzTWFwOjppdGVyYXRvciBp
dCA9IG1fc25hcHNob3RzLmZpbmQodWlkKTsKICAgICAgICAgaWYgKGl0ICE9IG1fc25hcHNob3Rz
LmVuZCgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90PiBzbmFwc2hv
dCA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgICAgICAqcHJvZmlsZU9iamVjdCA9IGNyZWF0ZVNuYXBz
aG90SGVhZGVyKCpzbmFwc2hvdCk7CisgICAgICAgICAgICBwcm9maWxlT2JqZWN0ID0gY3JlYXRl
U25hcHNob3RIZWFkZXIoKnNuYXBzaG90KTsKICAgICAgICAgICAgIGlmIChtX2Zyb250ZW5kKSB7
CiAgICAgICAgICAgICAgICAgT3V0cHV0U3RyZWFtIHN0cmVhbShtX2Zyb250ZW5kLCB1aWQpOwog
ICAgICAgICAgICAgICAgIHNuYXBzaG90LT53cml0ZUpTT04oJnN0cmVhbSk7CkBAIC0zODUsMTEg
KzM4NSwxMSBAQCB2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnRvZ2dsZVJlY29yZEJ1dHRv
bihib29sIGlzUHJvZmlsaW5nKQogICAgICAgICBtX2Zyb250ZW5kLT5zZXRSZWNvcmRpbmdQcm9m
aWxlKGlzUHJvZmlsaW5nKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRP
YmplY3RCeUhlYXBPYmplY3RJZChFcnJvclN0cmluZyogZXJyb3IsIGludCBpZCwgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4qIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0
T2JqZWN0QnlIZWFwT2JqZWN0SWQoRXJyb3JTdHJpbmcqIGVycm9yLCBpbnQgaWQsIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiByZXN1bHQpCiB7CiAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBo
ZWFwT2JqZWN0ID0gU2NyaXB0UHJvZmlsZXI6Om9iamVjdEJ5SGVhcE9iamVjdElkKGlkLCBtX2lu
amVjdGVkU2NyaXB0TWFuYWdlcik7CiAgICAgaWYgKCFoZWFwT2JqZWN0LT5pc051bGwoKSkKLSAg
ICAgICAgaGVhcE9iamVjdC0+YXNPYmplY3QocmVzdWx0KTsKKyAgICAgICAgaGVhcE9iamVjdC0+
YXNPYmplY3QoJnJlc3VsdCk7CiAgICAgZWxzZQogICAgICAgICAqZXJyb3IgPSAiT2JqZWN0IGlz
IG5vdCBhdmFpbGFibGUuIjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudC5oCmluZGV4IGQ0NzMzOTBhMzcyMThlZjc4N2ZmNDU2ZDU1OTZl
M2FiMjkyZTBhYTAuLjAyYmNiN2I0MzI4YTc1ZDBhZDJkNTZmZDQ0N2JmMWY3ZTg5MmFlNWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQu
aApAQCAtODEsOCArODEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbmFibGUoYm9vbCBza2lwUmVj
b21waWxlKTsKICAgICBib29sIGVuYWJsZWQoKSB7IHJldHVybiBtX2VuYWJsZWQ7IH0KICAgICBT
dHJpbmcgZ2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZShib29sIGluY3JlbWVudFBy
b2ZpbGVOdW1iZXIgPSBmYWxzZSk7Ci0gICAgdm9pZCBnZXRQcm9maWxlSGVhZGVycyhFcnJvclN0
cmluZyogZXJyb3IsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGhlYWRlcnMpOwotICAgIHZvaWQg
Z2V0UHJvZmlsZShFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgdHlwZSwgdW5zaWdu
ZWQgdWlkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcHJvZmlsZU9iamVjdCk7CisgICAgdm9p
ZCBnZXRQcm9maWxlSGVhZGVycyhFcnJvclN0cmluZyogZXJyb3IsIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4mIGhlYWRlcnMpOworICAgIHZvaWQgZ2V0UHJvZmlsZShFcnJvclN0cmluZyogZXJyb3Is
IGNvbnN0IFN0cmluZyYgdHlwZSwgdW5zaWduZWQgdWlkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYgcHJvZmlsZU9iamVjdCk7CiAgICAgdm9pZCByZW1vdmVQcm9maWxlKEVycm9yU3RyaW5nKiBl
cnJvciwgY29uc3QgU3RyaW5nJiB0eXBlLCB1bnNpZ25lZCB1aWQpOwogCiAgICAgdmlydHVhbCB2
b2lkIHNldEZyb250ZW5kKEluc3BlY3RvckZyb250ZW5kKik7CkBAIC05Miw3ICs5Miw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHRha2VIZWFwU25hcHNob3QoRXJyb3JTdHJpbmcqKTsKICAgICB2b2lk
IHRvZ2dsZVJlY29yZEJ1dHRvbihib29sIGlzUHJvZmlsaW5nKTsKIAotICAgIHZvaWQgZ2V0T2Jq
ZWN0QnlIZWFwT2JqZWN0SWQoRXJyb3JTdHJpbmcqLCBpbnQgaWQsIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+KiByZXN1bHQpOworICAgIHZvaWQgZ2V0T2JqZWN0QnlIZWFwT2JqZWN0SWQoRXJyb3JT
dHJpbmcqLCBpbnQgaWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQpOwogCiBwcml2
YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCBpbnQsIFJlZlB0cjxTY3JpcHRQcm9m
aWxlPiA+IFByb2ZpbGVzTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUnVudGltZUFnZW50LmNwcAppbmRleCA3NzY5MmE1NjkxYjczMjlhZmVjMjE1Nzc2ZjI5
MDY5OTIzZWNmYzUyLi43NDE3ZjhlYzAyMDc5NDhlYWRmZjEwZmE2MWNmMGZjZWNjMTE3MTVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUnVudGltZUFnZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUnVudGltZUFnZW50
LmNwcApAQCAtNzEsNyArNzEsNyBAQCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6On5JbnNwZWN0b3JS
dW50aW1lQWdlbnQoKQogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yUnVu
dGltZUFnZW50KDApOwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUo
RXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0
IFN0cmluZyogY29uc3Qgb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGNvbnN0IGluY2x1ZGVDb21t
YW5kTGluZUFQSSwgY29uc3QgYm9vbCogY29uc3QgZG9Ob3RQYXVzZU9uRXhjZXB0aW9ucywgY29u
c3QgU3RyaW5nKiBjb25zdCBmcmFtZUlkLCBjb25zdCBib29sKiBjb25zdCByZXR1cm5CeVZhbHVl
LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVzdWx0LCBib29sKiB3YXNUaHJvd24pCit2b2lk
IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogY29uc3Qgb2JqZWN0R3Jv
dXAsIGNvbnN0IGJvb2wqIGNvbnN0IGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCog
Y29uc3QgZG9Ob3RQYXVzZU9uRXhjZXB0aW9ucywgY29uc3QgU3RyaW5nKiBjb25zdCBmcmFtZUlk
LCBjb25zdCBib29sKiBjb25zdCByZXR1cm5CeVZhbHVlLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYgcmVzdWx0LCBib29sKiB3YXNUaHJvd24pCiB7CiAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0
YXRlID0gMDsKICAgICBpZiAoZnJhbWVJZCkgewpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIGV4cAogICAgIH0KICNlbmRpZgogCi0gICAgaW5qZWN0ZWRTY3JpcHQuZXZhbHVh
dGUoZXJyb3JTdHJpbmcsIGV4cHJlc3Npb24sIG9iamVjdEdyb3VwID8gKm9iamVjdEdyb3VwIDog
IiIsIGFzQm9vbChpbmNsdWRlQ29tbWFuZExpbmVBUEkpLCBhc0Jvb2wocmV0dXJuQnlWYWx1ZSks
IHJlc3VsdCwgd2FzVGhyb3duKTsKKyAgICBpbmplY3RlZFNjcmlwdC5ldmFsdWF0ZShlcnJvclN0
cmluZywgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAgPyAqb2JqZWN0R3JvdXAgOiAiIiwgYXNCb29s
KGluY2x1ZGVDb21tYW5kTGluZUFQSSksIGFzQm9vbChyZXR1cm5CeVZhbHVlKSwgJnJlc3VsdCwg
d2FzVGhyb3duKTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIGlmIChw
YXVzZVN0YXRlQ2hhbmdlZCkKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIEluc3BlY3RvclJ1bnRp
bWVBZ2VudDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGV4cAogI2VuZGlmCiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpjYWxsRnVuY3Rp
b25PbihFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNv
bnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiogY29u
c3Qgb3B0aW9uYWxBcmd1bWVudHMsIGNvbnN0IGJvb2wqIGNvbnN0IHJldHVybkJ5VmFsdWUsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiByZXN1bHQsIGJvb2wqIHdhc1Rocm93bikKK3ZvaWQgSW5z
cGVjdG9yUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyogZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29u
c3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiogY29uc3Qgb3B0aW9uYWxBcmd1bWVudHMsIGNvbnN0
IGJvb2wqIGNvbnN0IHJldHVybkJ5VmFsdWUsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1
bHQsIGJvb2wqIHdhc1Rocm93bikKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlw
dCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9i
amVjdElkKTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7CkBAIC0xMTUs
MTcgKzExNSwxNyBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24o
RXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbgogICAgIFN0cmluZyBhcmd1bWVu
dHM7CiAgICAgaWYgKG9wdGlvbmFsQXJndW1lbnRzKQogICAgICAgICBhcmd1bWVudHMgPSAoKm9w
dGlvbmFsQXJndW1lbnRzKS0+dG9KU09OU3RyaW5nKCk7Ci0gICAgaW5qZWN0ZWRTY3JpcHQuY2Fs
bEZ1bmN0aW9uT24oZXJyb3JTdHJpbmcsIG9iamVjdElkLCBleHByZXNzaW9uLCBhcmd1bWVudHMs
IGFzQm9vbChyZXR1cm5CeVZhbHVlKSwgcmVzdWx0LCB3YXNUaHJvd24pOworICAgIGluamVjdGVk
U2NyaXB0LmNhbGxGdW5jdGlvbk9uKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgZXhwcmVzc2lvbiwg
YXJndW1lbnRzLCBhc0Jvb2wocmV0dXJuQnlWYWx1ZSksICZyZXN1bHQsIHdhc1Rocm93bik7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5n
KiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgYm9vbCogY29uc3Qg
b3duUHJvcGVydGllcywgUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzdWx0KQordm9pZCBJbnNw
ZWN0b3JSdW50aW1lQWdlbnQ6OmdldFByb3BlcnRpZXMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBib29sKiBjb25zdCBvd25Qcm9wZXJ0aWVz
LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiByZXN1bHQpCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQg
aW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRG
b3JPYmplY3RJZChvYmplY3RJZCk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUo
KSkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW5zcGVjdGVkIGZyYW1lIGhhcyBnb25lIjsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpbmplY3RlZFNjcmlwdC5nZXRQcm9wZXJ0aWVz
KGVycm9yU3RyaW5nLCBvYmplY3RJZCwgb3duUHJvcGVydGllcyA/ICpvd25Qcm9wZXJ0aWVzIDog
ZmFsc2UsIHJlc3VsdCk7CisgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0UHJvcGVydGllcyhlcnJvclN0
cmluZywgb2JqZWN0SWQsIG93blByb3BlcnRpZXMgPyAqb3duUHJvcGVydGllcyA6IGZhbHNlLCAm
cmVzdWx0KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJlbGVhc2VPYmplY3Qo
RXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIG9iamVjdElkKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCmluZGV4IDkxNDVjNmM4YTIyN2U5
ZWNlMDY5ZmUwN2EyY2Q3ZTg3ZmUxYjI4ZTQuLjc5YTIwMmI4OWRhNzEzYzkyMzk4ZDY4ZDFmMjIw
ZDM5MzgwODliYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JSdW50aW1lQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UnVudGltZUFnZW50LmgKQEAgLTY0LDE3ICs2NCwxNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICBjb25zdCBib29sKiBjb25zdCBkb05vdFBhdXNlT25FeGNlcHRpb25zLAogICAgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nKiBjb25zdCBmcmFtZUlkLAogICAgICAgICAgICAgICAgICAg
Y29uc3QgYm9vbCogY29uc3QgcmV0dXJuQnlWYWx1ZSwKLSAgICAgICAgICAgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+KiByZXN1bHQsCisgICAgICAgICAgICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYgcmVzdWx0LAogICAgICAgICAgICAgICAgICAgYm9vbCogd2FzVGhyb3du
KTsKICAgICB2b2lkIGNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nKiwKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBjb25zdCBvcHRpb25hbEFyZ3VtZW50cywKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wqIGNvbnN0IHJldHVybkJ5VmFsdWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVzdWx0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHJlc3VsdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIHdhc1Rocm93bik7CiAgICAgdm9pZCByZWxlYXNl
T2JqZWN0KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCk7Ci0gICAgdm9pZCBn
ZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3Qg
Ym9vbCogY29uc3Qgb3duUHJvcGVydGllcywgUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzdWx0
KTsKKyAgICB2b2lkIGdldFByb3BlcnRpZXMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIG9i
amVjdElkLCBjb25zdCBib29sKiBjb25zdCBvd25Qcm9wZXJ0aWVzLCBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+JiByZXN1bHQpOwogICAgIHZvaWQgcmVsZWFzZU9iamVjdEdyb3VwKEVycm9yU3RyaW5n
KiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCk7CiAgICAgdm9pZCBydW4oRXJyb3JTdHJpbmcq
KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120048</attachid>
            <date>2011-12-20 11:15:57 -0800</date>
            <delta_ts>2011-12-21 00:56:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69366-20111220231554.patch</filename>
            <type>text/plain</type>
            <size>65139</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMzM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzdjYWVkZDMwMWJmNzZk
OWFjMDhhZmI4ZGMxZmMzMWViNjVmNDkyMS4uYjEwMWYxOTJjODAwYzhkMWMxOGY5M2U3NTc2ZGI5
YTg1ZmZhNzU4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDExLTEyLTIwICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBDb2RlR2VuZXJhdG9yIHNob3VsZCBub3QgdXNlIHBvaW50ZXJzIGZvciBvdXQgcGFyYW1zIG9m
IFJlZlB0ciB0eXBlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjkzNjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBHZW5lcmF0b3IgZml4ZWQgYW5kIGFsbCB1c2FnZXMgYXJlIGNoYW5nZWQgbWFudWFsbHku
CisKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weToKKyAgICAg
ICAgKFJhd1R5cGVzLkJhc2VUeXBlKToKKyAgICAgICAgKFJhd1R5cGVzLkJhc2VUeXBlLmdldF9v
dXRwdXRfYXJndW1lbnRfcHJlZml4KToKKyAgICAgICAgKFJhd1R5cGVzLk9iamVjdC5nZXRfb3V0
cHV0X2FyZ3VtZW50X3ByZWZpeCk6CisgICAgICAgIChSYXdUeXBlcy5BcnJheS5nZXRfb3V0cHV0
X2FyZ3VtZW50X3ByZWZpeCk6CisgICAgICAgIChSYXdUeXBlcyk6CisgICAgICAgIChHZW5lcmF0
b3IucHJvY2Vzc19jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFwcGxpY2F0
aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlmZXN0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmdldEFwcGxpY2F0aW9uQ2FjaGVGb3JG
cmFtZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Y2xlYXJGcm9udGVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldElubGluZVN0eWxlc0Zvck5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVG
b3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRBbGxTdHls
ZVNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3R5bGVT
aGVldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UHJvcGVydHlU
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9wZXJ0
eSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UnVsZVNlbGVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjphZGRSdWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVz
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpzdG9wU2VsZWN0b3JQcm9m
aWxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c3RvcFNlbGVjdG9y
UHJvZmlsZXJJbXBsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTUFnZW50OjpxdWVyeVNlbGVjdG9yQWxsKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVOb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudDo6Z2V0RE9NU3RvcmFnZUVudHJpZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJh
c2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50Ojpn
ZXREYXRhYmFzZVRhYmxlTmFtZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRh
YmFzZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtw
b2ludEJ5VXJsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
dEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c2VhcmNoSW5Db250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnNldFNjcmlwdFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpnZXRGdW5jdGlvbkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ck1lbW9yeUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck1lbW9yeUFnZW50
OjpnZXRET01Ob2RlQ291bnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlB
Z2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VUcmVlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVzb3VyY2VzKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
UHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZUhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JQcm9maWxlckFnZW50OjpnZXRPYmplY3RCeUhlYXBPYmplY3RJZCk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJ1
bnRpbWVBZ2VudDo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUnVudGlt
ZUFnZW50OjpjYWxsRnVuY3Rpb25Pbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6OmdldFByb3BlcnRpZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JS
dW50aW1lQWdlbnQuaDoKKwogMjAxMS0xMi0yMCAgSWFpbiBNZXJyaWNrICA8aHVza3lAZ29vZ2xl
LmNvbT4KIAogICAgICAgICBSZW1vdmUgdW51c2VkIHBhcmFtZXRlciBmcm9tIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6cmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CmluZGV4IGRjZGIzMmQ1
NTY0OWZhOTA1MTEzZDk5OTI0MTI0OTBkZTVhZjhhOTIuLmJiZDViOWUwNzZmOWRkOTg2YmRiMzc5
ZGRhMDYyZGU0MDNkMmYxZWMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9D
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9D
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CkBAIC0yNTEsNiArMjUxLDEwIEBAIGNsYXNzIFJhd1R5
cGVzKG9iamVjdCk6CiAgICAgICAgIGRlZiBpc19ldmVudF9wYXJhbV9jaGVja19vcHRpb25hbCgp
OgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAg
ICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKKyAgICAgICAgICAgIHJldHVy
biAiJiIKKwogICAgIGNsYXNzIFN0cmluZyhCYXNlVHlwZSk6CiAgICAgICAgIEBjbGFzc21ldGhv
ZAogICAgICAgICBkZWYgZ2V0X2NfcGFyYW1fdHlwZShjbHMsIHBhcmFtX3R5cGUsIG9wdGlvbmFs
KToKQEAgLTM3Miw2ICszNzYsMTAgQEAgY2xhc3MgUmF3VHlwZXMob2JqZWN0KToKICAgICAgICAg
ZGVmIGlzX2V2ZW50X3BhcmFtX2NoZWNrX29wdGlvbmFsKCk6CiAgICAgICAgICAgICByZXR1cm4g
VHJ1ZQogCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9vdXRwdXRfYXJn
dW1lbnRfcHJlZml4KCk6CisgICAgICAgICAgICByZXR1cm4gIiIKKwogICAgICAgICBfcGxhaW5f
Y190eXBlID0gQ1BhcmFtVHlwZSgiUmVmUHRyPEluc3BlY3Rvck9iamVjdD4iKQogICAgICAgICBf
cmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoIlBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiIpCiAK
QEAgLTQzMiw2ICs0NDAsMTAgQEAgY2xhc3MgUmF3VHlwZXMob2JqZWN0KToKICAgICAgICAgZGVm
IGlzX2V2ZW50X3BhcmFtX2NoZWNrX29wdGlvbmFsKCk6CiAgICAgICAgICAgICByZXR1cm4gVHJ1
ZQogCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9vdXRwdXRfYXJndW1l
bnRfcHJlZml4KCk6CisgICAgICAgICAgICByZXR1cm4gIiIKKwogICAgICAgICBfcGxhaW5fY190
eXBlID0gQ1BhcmFtVHlwZSgiUmVmUHRyPEluc3BlY3RvckFycmF5PiIpCiAgICAgICAgIF9yZWZf
Y190eXBlID0gQ1BhcmFtVHlwZSgiUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4iKQogCkBAIC0x
NTk1LDE2ICsxNjA3LDIzIEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgICAgIGZvciBqc29u
X3JldHVybiBpbiBqc29uX2NvbW1hbmRbInJldHVybnMiXToKIAogICAgICAgICAgICAgICAgIGpz
b25fcmV0dXJuX25hbWUgPSBqc29uX3JldHVyblsibmFtZSJdCisKKyAgICAgICAgICAgICAgICBv
cHRpb25hbCA9ICJvcHRpb25hbCIgaW4ganNvbl9yZXR1cm4gYW5kIGpzb25fcmV0dXJuWyJvcHRp
b25hbCJdCisKICAgICAgICAgICAgICAgICByYXdfdHlwZSA9IHJlc29sdmVfcGFyYW1fcmF3X3R5
cGUoanNvbl9yZXR1cm4sIGRvbWFpbl9uYW1lKQogICAgICAgICAgICAgICAgIHNldHRlcl90eXBl
ID0gcmF3X3R5cGUuZ2V0X3NldHRlcl9uYW1lKCkKICAgICAgICAgICAgICAgICBpbml0aWFsaXpl
ciA9IHJhd190eXBlLmdldF9jX2luaXRpYWxpemVyKCkKICAgICAgICAgICAgICAgICB2YXJfdHlw
ZSA9IHJhd190eXBlLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLk9VVFBVVCwgTm9uZSkKIAog
ICAgICAgICAgICAgICAgIGNvZGUgPSAiICAgICVzIG91dF8lcyA9ICVzO1xuIiAlICh2YXJfdHlw
ZS5nZXRfdGV4dCgpLCBqc29uX3JldHVybl9uYW1lLCBpbml0aWFsaXplcikKLSAgICAgICAgICAg
ICAgICBwYXJhbSA9ICIsICZvdXRfJXMiICUganNvbl9yZXR1cm5fbmFtZQorICAgICAgICAgICAg
ICAgIHBhcmFtID0gIiwgJXNvdXRfJXMiICUgKHJhd190eXBlLmdldF9vdXRwdXRfYXJndW1lbnRf
cHJlZml4KCksIGpzb25fcmV0dXJuX25hbWUpCiAgICAgICAgICAgICAgICAgY29vayA9ICIgICAg
ICAgIHJlc3VsdC0+c2V0JXMoXCIlc1wiLCBvdXRfJXMpO1xuIiAlIChzZXR0ZXJfdHlwZSwganNv
bl9yZXR1cm5fbmFtZSwganNvbl9yZXR1cm5fbmFtZSkKLSAgICAgICAgICAgICAgICBpZiB2YXJf
dHlwZS5nZXRfdGV4dCgpID09ICJib29sIiBhbmQgIm9wdGlvbmFsIiBpbiBqc29uX3JldHVybiBh
bmQganNvbl9yZXR1cm5bIm9wdGlvbmFsIl06Ci0gICAgICAgICAgICAgICAgICAgIGNvb2sgPSAo
IiAgICAgICAgaWYgKG91dF8lcylcbiAgICAiICUganNvbl9yZXR1cm5fbmFtZSkgKyBjb29rCisg
ICAgICAgICAgICAgICAgaWYgb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAgIGlmIHZhcl90
eXBlLmdldF90ZXh0KCkgPT0gImJvb2wiOgorICAgICAgICAgICAgICAgICAgICAgICAgY29vayA9
ICgiICAgICAgICBpZiAob3V0XyVzKVxuICAgICIgJSBqc29uX3JldHVybl9uYW1lKSArIGNvb2sK
KyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRklY
TUU6IHN1cHBvcnQgb3B0aW9uYWxzLgorICAgICAgICAgICAgICAgICAgICAgICAgY29vayA9ICIg
ICAgICAgIC8vIEZJWE1FOiBzdXBwb3J0IG9wdGlvbmFsIGhlcmUuXG4iICsgY29vawogCiAgICAg
ICAgICAgICAgICAgbWV0aG9kX291dF9jb2RlICs9IGNvZGUKICAgICAgICAgICAgICAgICBhZ2Vu
dF9jYWxsX3BhcmFtX2xpc3QuYXBwZW5kKHBhcmFtKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcAppbmRl
eCBiMTdlNTQ1MWRiOTcyZDQwOGQ3MmEwMGQzNDI1MWYyMDU3YmI0NTAwLi4xNGJlYTc2MzdkOWE4
NjlhNjAzZmYzOTk0NmE0OTU2NDU3ZGY2YzNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcApAQCAt
MTAzLDkgKzEwMyw5IEBAIHZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpuZXR3
b3JrU3RhdGVDaGFuZ2VkKCkKICAgICBtX2Zyb250ZW5kLT5uZXR3b3JrU3RhdGVVcGRhdGVkKGlz
Tm93T25saW5lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6Omdl
dEZyYW1lc1dpdGhNYW5pZmVzdHMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
KiByZXN1bHQpCit2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVz
V2l0aE1hbmlmZXN0cyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIHJlc3Vs
dCkKIHsKLSAgICAqcmVzdWx0ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIHJlc3Vs
dCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKIAogICAgIEZyYW1lKiBtYWluRnJhbWUgPSBt
X3BhZ2VBZ2VudC0+bWFpbkZyYW1lKCk7CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBtYWluRnJh
bWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtYWluRnJhbWUp
KSB7CkBAIC0xMjEsNyArMTIxLDcgQEAgdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdl
bnQ6OmdldEZyYW1lc1dpdGhNYW5pZmVzdHMoRXJyb3JTdHJpbmcqLCBSZWZQdHIKICAgICAgICAg
ICAgIHZhbHVlLT5zZXRTdHJpbmcoImZyYW1lSWQiLCBtX3BhZ2VBZ2VudC0+ZnJhbWVJZChmcmFt
ZSkpOwogICAgICAgICAgICAgdmFsdWUtPnNldFN0cmluZygibWFuaWZlc3RVUkwiLCBtYW5pZmVz
dFVSTCk7CiAgICAgICAgICAgICB2YWx1ZS0+c2V0TnVtYmVyKCJzdGF0dXMiLCBob3N0LT5zdGF0
dXMoKSk7Ci0gICAgICAgICAgICAoKnJlc3VsdCktPnB1c2hPYmplY3QodmFsdWUpOworICAgICAg
ICAgICAgcmVzdWx0LT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAg
LTE0NSw3ICsxNDUsNyBAQCB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0
TWFuaWZlc3RGb3JGcmFtZShFcnJvclN0cmluZyogZXJyb3JTdHJpbgogICAgICptYW5pZmVzdFVS
TCA9IGluZm8ubV9tYW5pZmVzdC5zdHJpbmcoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBcHBsaWNh
dGlvbkNhY2hlQWdlbnQ6OmdldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFtZShFcnJvclN0cmluZyog
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4qIGFwcGxpY2F0aW9uQ2FjaGUpCit2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dDo6Z2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1lKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiBmcmFtZUlkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgYXBwbGljYXRp
b25DYWNoZSkKIHsKICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBhc3NlcnRG
cmFtZVdpdGhEb2N1bWVudExvYWRlcihlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFk
b2N1bWVudExvYWRlcikKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIEluc3BlY3RvckFwcGxpY2F0
aW9uQ2FjaGVBZ2VudDo6Z2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1lKEVycm9yU3RyaW5nKiBl
cgogICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm9MaXN0IHJlc291cmNlczsK
ICAgICBob3N0LT5maWxsUmVzb3VyY2VMaXN0KCZyZXNvdXJjZXMpOwogCi0gICAgKmFwcGxpY2F0
aW9uQ2FjaGUgPSBidWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGUocmVzb3VyY2VzLCBpbmZv
KTsKKyAgICBhcHBsaWNhdGlvbkNhY2hlID0gYnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hl
KHJlc291cmNlcywgaW5mbyk7CiB9CiAKIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNo
ZShjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvTGlzdCYgYXBwbGljYXRp
b25DYWNoZVJlc291cmNlcywgY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyYg
YXBwbGljYXRpb25DYWNoZUluZm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgKaW5kZXggYzMxNjc0NGM2NzRm
MjYxZDcxZGNhMzY3ZTRmN2ZjNWNlYzc5MjJkMC4uYWMwOTI5NzU5OTMyOGY1NDdlZTU3MTM0OGM0
Y2RkMDViNmQyNzQ2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaApAQCAtNjksOSArNjksOSBAQCBwdWJs
aWM6CiAKICAgICAvLyBBcHBsaWNhdGlvbkNhY2hlIEFQSSBmb3IgSW5zcGVjdG9yRnJvbnRlbmQK
ICAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyopOwotICAgIHZvaWQgZ2V0RnJhbWVzV2l0aE1h
bmlmZXN0cyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJlc3VsdCk7Cisg
ICAgdm9pZCBnZXRGcmFtZXNXaXRoTWFuaWZlc3RzKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiYgcmVzdWx0KTsKICAgICB2b2lkIGdldE1hbmlmZXN0Rm9yRnJhbWUoRXJyb3JT
dHJpbmcqLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIFN0cmluZyogbWFuaWZlc3RVUkwpOwotICAg
IHZvaWQgZ2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1lKEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJiBmcmFtZUlkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogYXBwbGljYXRpb25DYWNoZSk7
CisgICAgdm9pZCBnZXRBcHBsaWNhdGlvbkNhY2hlRm9yRnJhbWUoRXJyb3JTdHJpbmcqLCBjb25z
dCBTdHJpbmcmIGZyYW1lSWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBhcHBsaWNhdGlvbkNh
Y2hlKTsKIAogcHJpdmF0ZToKICAgICBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQoSW5z
dHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0YXRlKiwgSW5zcGVjdG9yUGFnZUFnZW50Kik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRl
eCA1NWE0YmM0NjI0ZDcxZWI1OWVmYmE4OWRjZGY0YzBiNzZlZjYyYTAwLi4xMDRkODY3OTk1ZTcw
YmUwYTMyNWZhNWUxN2E5OTFhZTQ3YmM5MjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTMxNSw3ICszMTUsNyBAQCB2b2lkIEluc3Bl
Y3RvckNTU0FnZW50OjpjbGVhckZyb250ZW5kKCkKICAgICBtX2Zyb250ZW5kID0gMDsKICAgICBj
bGVhclBzZXVkb1N0YXRlKHRydWUpOwogICAgIFN0cmluZyBlcnJvclN0cmluZzsKLSAgICBzdG9w
U2VsZWN0b3JQcm9maWxlcigmZXJyb3JTdHJpbmcpOworICAgIHN0b3BTZWxlY3RvclByb2ZpbGVy
SW1wbCgmZXJyb3JTdHJpbmcpOwogfQogCiB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpkaXNjYXJk
QWdlbnQoKQpAQCAtMzkwLDcgKzM5MCw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnJlY2Fs
Y1N0eWxlRm9yUHNldWRvU3RhdGVJZk5lZWRlZChFbGVtZW50KiBlbGVtZW50LCBJbnNwCiAgICAg
ICAgIGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvckNoYW5nZWQoUmVjYWxj
U3R5bGVJbW1lZGlhdGVseSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNo
ZWRTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29u
c3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiogZm9yY2VkUHNldWRvQ2xhc3NlcywgYm9vbCogbmVl
ZFBzZXVkbywgYm9vbCogbmVlZEluaGVyaXRlZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogbWF0
Y2hlZENTU1J1bGVzLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBwc2V1ZG9JZFJ1bGVzLCBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+KiBpbmhlcml0ZWRFbnRyaWVzKQordm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBp
bnQgbm9kZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBmb3JjZWRQc2V1ZG9DbGFz
c2VzLCBib29sKiBuZWVkUHNldWRvLCBib29sKiBuZWVkSW5oZXJpdGVkLCBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+JiBtYXRjaGVkQ1NTUnVsZXMsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIHBzZXVk
b0lkUnVsZXMsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIGluaGVyaXRlZEVudHJpZXMpCiB7CiAg
ICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRGb3JJZChlcnJvclN0cmluZywgbm9kZUlkKTsK
ICAgICBpZiAoIWVsZW1lbnQpCkBAIC00MDEsNyArNDAxLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBp
bnQgbm8KICAgICAvLyBNYXRjaGVkIHJ1bGVzLgogICAgIENTU1N0eWxlU2VsZWN0b3IqIHNlbGVj
dG9yID0gZWxlbWVudC0+b3duZXJEb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCk7CiAgICAgUmVm
UHRyPENTU1J1bGVMaXN0PiBtYXRjaGVkUnVsZXMgPSBzZWxlY3Rvci0+c3R5bGVSdWxlc0ZvckVs
ZW1lbnQoZWxlbWVudCwgQ1NTU3R5bGVTZWxlY3Rvcjo6QWxsQ1NTUnVsZXMpOwotICAgICptYXRj
aGVkQ1NTUnVsZXMgPSBidWlsZEFycmF5Rm9yUnVsZUxpc3QobWF0Y2hlZFJ1bGVzLmdldCgpKTsK
KyAgICBtYXRjaGVkQ1NTUnVsZXMgPSBidWlsZEFycmF5Rm9yUnVsZUxpc3QobWF0Y2hlZFJ1bGVz
LmdldCgpKTsKIAogICAgIC8vIFBzZXVkbyBlbGVtZW50cy4KICAgICBpZiAoIW5lZWRQc2V1ZG8g
fHwgKm5lZWRQc2V1ZG8pIHsKQEAgLTQxNiw3ICs0MTYsNyBAQCB2b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGlu
dCBubwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgKnBzZXVkb0lkUnVsZXMg
PSBwc2V1ZG9FbGVtZW50cy5yZWxlYXNlKCk7CisgICAgICAgIHBzZXVkb0lkUnVsZXMgPSBwc2V1
ZG9FbGVtZW50cy5yZWxlYXNlKCk7CiAgICAgfQogCiAgICAgLy8gSW5oZXJpdGVkIHN0eWxlcy4K
QEAgLTQzOCwxMSArNDM4LDExIEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRT
dHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vCiAgICAgICAgICAg
ICBwYXJlbnRFbGVtZW50ID0gcGFyZW50RWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgKmluaGVyaXRlZEVudHJpZXMgPSBpbmhlcml0ZWRTdHlsZXMucmVsZWFz
ZSgpOworICAgICAgICBpbmhlcml0ZWRFbnRyaWVzID0gaW5oZXJpdGVkU3R5bGVzLnJlbGVhc2Uo
KTsKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldElubGluZVN0eWxlc0Zv
ck5vZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiogaW5saW5lU3R5bGUsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGF0dHJpYnV0
ZXMpCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRJbmxpbmVTdHlsZXNGb3JOb2RlKEVycm9y
U3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
IGlubGluZVN0eWxlLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBhdHRyaWJ1dGVzKQogewogICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtZW50Rm9ySWQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAg
ICAgaWYgKCFlbGVtZW50KQpAQCAtNDUyLDExICs0NTIsMTEgQEAgdm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6Z2V0SW5saW5lU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGlu
dCBub2QKICAgICBpZiAoIXN0eWxlU2hlZXQpCiAgICAgICAgIHJldHVybjsKIAotICAgICppbmxp
bmVTdHlsZSA9IHN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoZWxlbWVudC0+c3R5bGUo
KSk7Ci0gICAgKmF0dHJpYnV0ZXMgPSBidWlsZEFycmF5Rm9yQXR0cmlidXRlU3R5bGVzKGVsZW1l
bnQpOworICAgIGlubGluZVN0eWxlID0gc3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZShl
bGVtZW50LT5zdHlsZSgpKTsKKyAgICBhdHRyaWJ1dGVzID0gYnVpbGRBcnJheUZvckF0dHJpYnV0
ZVN0eWxlcyhlbGVtZW50KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0Q29tcHV0
ZWRTdHlsZUZvck5vZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25z
dCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBmb3JjZWRQc2V1ZG9DbGFzc2VzLCBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+KiBzdHlsZSkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVk
U3R5bGVGb3JOb2RlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3Qg
UmVmUHRyPEluc3BlY3RvckFycmF5PiogZm9yY2VkUHNldWRvQ2xhc3NlcywgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiYgc3R5bGUpCiB7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRGb3JJ
ZChlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIWVsZW1lbnQpCkBAIC00NjYsMTAgKzQ2
NiwxMCBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRDb21wdXRlZFN0eWxlRm9yTm9kZShF
cnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBubwogCiAgICAgUmVmUHRyPENTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbj4gY29tcHV0ZWRTdHlsZUluZm8gPSBjb21wdXRlZFN0eWxlKGVsZW1l
bnQsIHRydWUpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBJ
bnNwZWN0b3JTdHlsZTo6Y3JlYXRlKEluc3BlY3RvckNTU0lkKCksIGNvbXB1dGVkU3R5bGVJbmZv
LCAwKTsKLSAgICAqc3R5bGUgPSBpbnNwZWN0b3JTdHlsZS0+YnVpbGRBcnJheUZvckNvbXB1dGVk
U3R5bGUoKTsKKyAgICBzdHlsZSA9IGluc3BlY3RvclN0eWxlLT5idWlsZEFycmF5Rm9yQ29tcHV0
ZWRTdHlsZSgpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRBbGxTdHlsZVNoZWV0
cyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHN0eWxlSW5mb3MpCit2b2lk
IEluc3BlY3RvckNTU0FnZW50OjpnZXRBbGxTdHlsZVNoZWV0cyhFcnJvclN0cmluZyosIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4mIHN0eWxlSW5mb3MpCiB7CiAgICAgVmVjdG9yPERvY3VtZW50Kj4g
ZG9jdW1lbnRzID0gbV9kb21BZ2VudC0+ZG9jdW1lbnRzKCk7CiAgICAgZm9yIChWZWN0b3I8RG9j
dW1lbnQqPjo6aXRlcmF0b3IgaXQgPSBkb2N1bWVudHMuYmVnaW4oKTsgaXQgIT0gZG9jdW1lbnRz
LmVuZCgpOyArK2l0KSB7CkBAIC00NzcsMTggKzQ3NywxOCBAQCB2b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpnZXRBbGxTdHlsZVNoZWV0cyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4qCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5sZW5ndGgoKTsgKytp
KSB7CiAgICAgICAgICAgICBTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gbGlzdC0+aXRlbShpKTsK
ICAgICAgICAgICAgIGlmIChzdHlsZVNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAgICAg
ICAgICAgICBjb2xsZWN0U3R5bGVTaGVldHMoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHN0
eWxlU2hlZXQpLCBzdHlsZUluZm9zLT5nZXQoKSk7CisgICAgICAgICAgICAgICAgY29sbGVjdFN0
eWxlU2hlZXRzKHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZVNoZWV0KSwgc3R5bGVJ
bmZvcy5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OmdldFN0eWxlU2hlZXQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHN0eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHN0eWxlU2hlZXRPYmplY3Qp
Cit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZVNoZWV0KEVycm9yU3RyaW5nKiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiBzdHlsZVNoZWV0T2JqZWN0KQogewogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3Bl
Y3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIHN0eWxl
U2hlZXRJZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQogICAgICAgICByZXR1cm47
CiAKLSAgICAqc3R5bGVTaGVldE9iamVjdCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2Jq
ZWN0Rm9yU3R5bGVTaGVldCgpOworICAgIHN0eWxlU2hlZXRPYmplY3QgPSBpbnNwZWN0b3JTdHls
ZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlU2hlZXQoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6Z2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgU3RyaW5nKiByZXN1bHQpCkBAIC01MTIsNyArNTEyLDcg
QEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcKICAgICAgICAgKmVycm9yU3RyaW5nID0gIkludGVy
bmFsIGVycm9yIHNldHRpbmcgc3R5bGUgc2hlZXQgdGV4dCI7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OnNldFByb3BlcnR5VGV4dChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBmdWxsU3R5bGVJZCwgaW50IHByb3BlcnR5SW5kZXgs
IGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBvdmVyd3JpdGUsIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+KiByZXN1bHQpCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRQcm9wZXJ0eVRleHQoRXJy
b3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgZnVs
bFN0eWxlSWQsIGludCBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3Zl
cndyaXRlLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KQogewogICAgIEluc3BlY3Rv
ckNTU0lkIGNvbXBvdW5kSWQoZnVsbFN0eWxlSWQpOwogICAgIEFTU0VSVCghY29tcG91bmRJZC5p
c0VtcHR5KCkpOwpAQCAtNTIzLDEwICs1MjMsMTAgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
c2V0UHJvcGVydHlUZXh0KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEkK
IAogICAgIGJvb2wgc3VjY2VzcyA9IGluc3BlY3RvclN0eWxlU2hlZXQtPnNldFByb3BlcnR5VGV4
dChlcnJvclN0cmluZywgY29tcG91bmRJZCwgcHJvcGVydHlJbmRleCwgdGV4dCwgb3ZlcndyaXRl
KTsKICAgICBpZiAoc3VjY2VzcykKLSAgICAgICAgKnJlc3VsdCA9IGluc3BlY3RvclN0eWxlU2hl
ZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+c3R5bGVGb3JJZChj
b21wb3VuZElkKSk7CisgICAgICAgIHJlc3VsdCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxk
T2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+c3R5bGVGb3JJZChjb21wb3VuZElk
KSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnRvZ2dsZVByb3BlcnR5KEVycm9yU3Ry
aW5nKiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGZ1bGxTdHls
ZUlkLCBpbnQgcHJvcGVydHlJbmRleCwgYm9vbCBkaXNhYmxlLCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiogcmVzdWx0KQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVydHkoRXJy
b3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgZnVs
bFN0eWxlSWQsIGludCBwcm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUsIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiByZXN1bHQpCiB7CiAgICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChmdWxs
U3R5bGVJZCk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlzRW1wdHkoKSk7CkBAIC01MzcsMTAg
KzUzNywxMCBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9wZXJ0eShFcnJvclN0
cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbgogCiAgICAgYm9vbCBzdWNjZXNzID0g
aW5zcGVjdG9yU3R5bGVTaGVldC0+dG9nZ2xlUHJvcGVydHkoZXJyb3JTdHJpbmcsIGNvbXBvdW5k
SWQsIHByb3BlcnR5SW5kZXgsIGRpc2FibGUpOwogICAgIGlmIChzdWNjZXNzKQotICAgICAgICAq
cmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZShpbnNwZWN0
b3JTdHlsZVNoZWV0LT5zdHlsZUZvcklkKGNvbXBvdW5kSWQpKTsKKyAgICAgICAgcmVzdWx0ID0g
aW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZShpbnNwZWN0b3JTdHlsZVNo
ZWV0LT5zdHlsZUZvcklkKGNvbXBvdW5kSWQpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6c2V0UnVsZVNlbGVjdG9yKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mIGZ1bGxSdWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiByZXN1bHQpCit2b2lkIEluc3BlY3RvckNTU0FnZW50Ojpz
ZXRSdWxlU2VsZWN0b3IoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYgZnVsbFJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mIHJlc3VsdCkKIHsKICAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3Vu
ZElkKGZ1bGxSdWxlSWQpOwogICAgIEFTU0VSVCghY29tcG91bmRJZC5pc0VtcHR5KCkpOwpAQCAt
NTUzLDEwICs1NTMsMTAgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UnVsZVNlbGVjdG9y
KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEkKICAgICBpZiAoIXN1Y2Nl
c3MpCiAgICAgICAgIHJldHVybjsKIAotICAgICpyZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0
LT5idWlsZE9iamVjdEZvclJ1bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+cnVsZUZvcklkKGNvbXBv
dW5kSWQpKTsKKyAgICByZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZv
clJ1bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+cnVsZUZvcklkKGNvbXBvdW5kSWQpKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVsZShFcnJvclN0cmluZyosIGNvbnN0IGludCBj
b250ZXh0Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiogcmVzdWx0KQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVsZShFcnJvclN0cmlu
ZyosIGNvbnN0IGludCBjb250ZXh0Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KQogewogICAgIE5vZGUqIG5vZGUgPSBtX2RvbUFn
ZW50LT5ub2RlRm9ySWQoY29udGV4dE5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQpAQCAtNTY5LDE2
ICs1NjksMTYgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVsZShFcnJvclN0cmluZyos
IGNvbnN0IGludCBjb250ZXh0Tm9kZUlkLCBjb25zdCBTdHIKICAgICBpZiAoIW5ld1J1bGUpCiAg
ICAgICAgIHJldHVybjsKIAotICAgICpyZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWls
ZE9iamVjdEZvclJ1bGUobmV3UnVsZSk7CisgICAgcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVl
dC0+YnVpbGRPYmplY3RGb3JSdWxlKG5ld1J1bGUpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiogY3NzUHJvcGVydGllcykKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1
cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
JiBjc3NQcm9wZXJ0aWVzKQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvcGVydGll
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51
bUNTU1Byb3BlcnRpZXM7ICsraSkKICAgICAgICAgcHJvcGVydGllcy0+cHVzaFN0cmluZyhwcm9w
ZXJ0eU5hbWVTdHJpbmdzW2ldKTsKIAotICAgICpjc3NQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5y
ZWxlYXNlKCk7CisgICAgY3NzUHJvcGVydGllcyA9IHByb3BlcnRpZXMucmVsZWFzZSgpOwogfQog
CiB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzdGFydFNlbGVjdG9yUHJvZmlsZXIoRXJyb3JTdHJp
bmcqKQpAQCAtNTg4LDcgKzU4OCwxMiBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzdGFydFNl
bGVjdG9yUHJvZmlsZXIoRXJyb3JTdHJpbmcqKQogICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oQ1NT
QWdlbnRTdGF0ZTo6aXNTZWxlY3RvclByb2ZpbGluZywgdHJ1ZSk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OnN0b3BTZWxlY3RvclByb2ZpbGVyKEVycm9yU3RyaW5nKiwgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4qIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnN0b3BTZWxl
Y3RvclByb2ZpbGVyKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mIHJlc3VsdCkKK3sKKyAgICBzdG9wU2VsZWN0b3JQcm9maWxlckltcGwoZXJyb3JTdHJp
bmcsICZyZXN1bHQpOworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzdG9wU2VsZWN0b3JQ
cm9maWxlckltcGwoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVzdWx0
KQogewogICAgIGlmICghbV9zdGF0ZS0+Z2V0Qm9vbGVhbihDU1NBZ2VudFN0YXRlOjppc1NlbGVj
dG9yUHJvZmlsaW5nKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAppbmRleCAwMDIwMDE0NDIyYWMyNmQ5NTI0ZmM4NmY0M2Fh
ZmYwN2I5ZGExZjk4Li44NjNlZmMwZDcwY2I1ZTE2MjQzNDM2YTBkYjJlMDI5YTU1YzVjMjMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaApAQCAtNzYs
MjEgKzc2LDIyIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0KCk7CiAgICAgdm9pZCBtZWRpYVF1
ZXJ5UmVzdWx0Q2hhbmdlZCgpOwogCi0gICAgdm9pZCBnZXRDb21wdXRlZFN0eWxlRm9yTm9kZShF
cnJvclN0cmluZyosIGludCBub2RlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGZv
cmNlZFBzZXVkb0NsYXNzZXMsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHN0eWxlKTsKLSAgICB2
b2lkIGdldElubGluZVN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlkLCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiogaW5saW5lU3R5bGUsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4q
IGF0dHJpYnV0ZXMpOwotICAgIHZvaWQgZ2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJp
bmcqLCBpbnQgbm9kZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBmb3JjZWRQc2V1
ZG9DbGFzc2VzLCBib29sKiBpbmNsdWRlUHNldWRvLCBib29sKiBpbmNsdWRlSW5oZXJpdGVkLCBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBtYXRjaGVkQ1NTUnVsZXMsIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4qIHBzZXVkb0lkUnVsZXMsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGluaGVyaXRlZEVu
dHJpZXMpOwotICAgIHZvaWQgZ2V0QWxsU3R5bGVTaGVldHMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+KiBzdHlsZVNoZWV0SW5mb3MpOwotICAgIHZvaWQgZ2V0U3R5bGVTaGVl
dChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiogcmVzdWx0KTsKKyAgICB2b2lkIGdldENvbXB1dGVkU3R5bGVGb3JOb2RlKEVy
cm9yU3RyaW5nKiwgaW50IG5vZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiogZm9y
Y2VkUHNldWRvQ2xhc3NlcywgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgc3R5bGUpOworICAgIHZv
aWQgZ2V0SW5saW5lU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyosIGludCBub2RlSWQsIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiBpbmxpbmVTdHlsZSwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYg
YXR0cmlidXRlcyk7CisgICAgdm9pZCBnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShFcnJvclN0cmlu
ZyosIGludCBub2RlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGZvcmNlZFBzZXVk
b0NsYXNzZXMsIGJvb2wqIGluY2x1ZGVQc2V1ZG8sIGJvb2wqIGluY2x1ZGVJbmhlcml0ZWQsIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4mIG1hdGNoZWRDU1NSdWxlcywgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiYgcHNldWRvSWRSdWxlcywgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgaW5oZXJpdGVkRW50
cmllcyk7CisgICAgdm9pZCBnZXRBbGxTdHlsZVNoZWV0cyhFcnJvclN0cmluZyosIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4mIHN0eWxlU2hlZXRJbmZvcyk7CisgICAgdm9pZCBnZXRTdHlsZVNoZWV0
KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiByZXN1bHQpOwogICAgIHZvaWQgZ2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJp
bmcqLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgU3RyaW5nKiByZXN1bHQpOwogICAgIHZv
aWQgc2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hl
ZXRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKLSAgICB2b2lkIHNldFByb3BlcnR5VGV4dChFcnJv
clN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBzdHlsZUlkLCBpbnQgcHJv
cGVydHlJbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4qIHJlc3VsdCk7Ci0gICAgdm9pZCB0b2dnbGVQcm9wZXJ0eShFcnJvclN0
cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBzdHlsZUlkLCBpbnQgcHJvcGVy
dHlJbmRleCwgYm9vbCBkaXNhYmxlLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVzdWx0KTsK
LSAgICB2b2lkIHNldFJ1bGVTZWxlY3RvcihFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+KiByZXN1bHQpOwotICAgIHZvaWQgYWRkUnVsZShFcnJvclN0cmluZyosIGNv
bnN0IGludCBjb250ZXh0Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiogcmVzdWx0KTsKLSAgICB2b2lkIGdldFN1cHBvcnRlZENTU1Byb3BlcnRp
ZXMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiByZXN1bHQpOworICAgIHZv
aWQgc2V0UHJvcGVydHlUZXh0KEVycm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mIHN0eWxlSWQsIGludCBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJv
b2wgb3ZlcndyaXRlLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KTsKKyAgICB2b2lk
IHRvZ2dsZVByb3BlcnR5KEVycm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mIHN0eWxlSWQsIGludCBwcm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUsIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiByZXN1bHQpOworICAgIHZvaWQgc2V0UnVsZVNlbGVjdG9yKEVycm9yU3Ry
aW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHJ1bGVJZCwgY29uc3QgU3RyaW5n
JiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHJlc3VsdCk7CisgICAgdm9pZCBh
ZGRSdWxlKEVycm9yU3RyaW5nKiwgY29uc3QgaW50IGNvbnRleHROb2RlSWQsIGNvbnN0IFN0cmlu
ZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQpOworICAgIHZvaWQg
Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4mIHJlc3VsdCk7CiAKICAgICB2b2lkIHN0YXJ0U2VsZWN0b3JQcm9maWxlcihFcnJvclN0
cmluZyopOwotICAgIHZvaWQgc3RvcFNlbGVjdG9yUHJvZmlsZXIoRXJyb3JTdHJpbmcqLCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiogPSAwKTsKKyAgICB2b2lkIHN0b3BTZWxlY3RvclByb2ZpbGVy
KEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mKTsKKyAgICB2b2lkIHN0b3BT
ZWxlY3RvclByb2ZpbGVySW1wbChFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
KiA9IDApOwogICAgIHZvaWQgd2lsbE1hdGNoUnVsZShjb25zdCBDU1NTdHlsZVJ1bGUqKTsKICAg
ICB2b2lkIGRpZE1hdGNoUnVsZShib29sKTsKICAgICB2b2lkIHdpbGxQcm9jZXNzUnVsZShjb25z
dCBDU1NTdHlsZVJ1bGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwCmluZGV4IDdhOWYyNmRlOTgxODY5MzM4MTZhNTU4ZWU1NDY1Y2FiODQ2Mjk5
ZmEuLjBhZjgwNzRkMWRlMDE2ZGYyNTIwZDkwYmM5YWQwMWU0ZWM2NGVmNmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtMzUxLDcgKzM1
MSw3IEBAIEhUTUxFbGVtZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0SFRNTEVsZW1lbnQo
RXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQKICAgICByZXR1cm4gdG9IVE1MRWxlbWVudChl
bGVtZW50KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RG9jdW1lbnQoRXJyb3JT
dHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogcm9vdCkKK3ZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OmdldERvY3VtZW50KEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
IHJvb3QpCiB7CiAgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihET01BZ2VudFN0YXRlOjpkb2N1bWVu
dFJlcXVlc3RlZCwgdHJ1ZSk7CiAKQEAgLTM2Myw3ICszNjMsNyBAQCB2b2lkIEluc3BlY3RvckRP
TUFnZW50OjpnZXREb2N1bWVudChFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
KiByb290KQogICAgIHJlc2V0KCk7CiAgICAgbV9kb2N1bWVudCA9IGRvYzsKIAotICAgICpyb290
ID0gYnVpbGRPYmplY3RGb3JOb2RlKG1fZG9jdW1lbnQuZ2V0KCksIDIsICZtX2RvY3VtZW50Tm9k
ZVRvSWRNYXApOworICAgIHJvb3QgPSBidWlsZE9iamVjdEZvck5vZGUobV9kb2N1bWVudC5nZXQo
KSwgMiwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OnB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChpbnQgbm9kZUlkKQpAQCAtNDIxLDcgKzQyMSw3
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnF1ZXJ5U2VsZWN0b3IoRXJyb3JTdHJpbmcqIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zCiAgICAgICAgICplbGVtZW50SWQgPSBwdXNoTm9k
ZVBhdGhUb0Zyb250ZW5kKGVsZW1lbnQuZ2V0KCkpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpxdWVyeVNlbGVjdG9yQWxsKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJ
ZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJlc3Vs
dCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnF1ZXJ5U2VsZWN0b3JBbGwoRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywgUmVmUHRy
PEluc3BlY3RvckFycmF5PiYgcmVzdWx0KQogewogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2Rl
KGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKQEAgLTQzNSw3ICs0MzUsNyBA
QCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpxdWVyeVNlbGVjdG9yQWxsKEVycm9yU3RyaW5nKiBl
cnJvclN0cmluZywgaW50IG5vZGVJZCwgYwogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBub2Rlcy0+bGVuZ3RoKCk7ICsraSkKLSAgICAgICAgKCpyZXN1bHQpLT5wdXNoTnVt
YmVyKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZXMtPml0ZW0oaSkpKTsKKyAgICAgICAgcmVz
dWx0LT5wdXNoTnVtYmVyKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZXMtPml0ZW0oaSkpKTsK
IH0KIAogaW50IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5vZGUq
IG5vZGVUb1B1c2gpCkBAIC03MTAsNyArNzEwLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
c2V0Tm9kZVZhbHVlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QK
ICAgICAgICAgKmVycm9yU3RyaW5nID0gIkRPTSBFcnJvciB3aGlsZSBzZXR0aW5nIHRoZSBub2Rl
IHZhbHVlIjsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNG
b3JOb2RlKEVycm9yU3RyaW5nKiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5Piog
bGlzdGVuZXJzQXJyYXkpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVy
c0Zvck5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
JiBsaXN0ZW5lcnNBcnJheSkKIHsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7
CiAgICAgRXZlbnRUYXJnZXREYXRhKiBkOwpAQCAtNzU3LDcgKzc1Nyw3IEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0cmluZyosIGludCBu
b2RlSWQsIFJlZlB0CiAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgdmVjdG9yLnNpemUo
KTsgKytqKSB7CiAgICAgICAgICAgICBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgbGlz
dGVuZXIgPSB2ZWN0b3Jbal07CiAgICAgICAgICAgICBpZiAobGlzdGVuZXIudXNlQ2FwdHVyZSkK
LSAgICAgICAgICAgICAgICAoKmxpc3RlbmVyc0FycmF5KS0+cHVzaE9iamVjdChidWlsZE9iamVj
dEZvckV2ZW50TGlzdGVuZXIobGlzdGVuZXIsIGluZm8uZXZlbnRUeXBlLCBpbmZvLm5vZGUpKTsK
KyAgICAgICAgICAgICAgICBsaXN0ZW5lcnNBcnJheS0+cHVzaE9iamVjdChidWlsZE9iamVjdEZv
ckV2ZW50TGlzdGVuZXIobGlzdGVuZXIsIGluZm8uZXZlbnRUeXBlLCBpbmZvLm5vZGUpKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtNzY4LDcgKzc2OCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0cmluZyosIGludCBub2RlSWQsIFJl
ZlB0CiAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgdmVjdG9yLnNpemUoKTsgKytqKSB7
CiAgICAgICAgICAgICBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIgPSB2
ZWN0b3Jbal07CiAgICAgICAgICAgICBpZiAoIWxpc3RlbmVyLnVzZUNhcHR1cmUpCi0gICAgICAg
ICAgICAgICAgKCpsaXN0ZW5lcnNBcnJheSktPnB1c2hPYmplY3QoYnVpbGRPYmplY3RGb3JFdmVu
dExpc3RlbmVyKGxpc3RlbmVyLCBpbmZvLmV2ZW50VHlwZSwgaW5mby5ub2RlKSk7CisgICAgICAg
ICAgICAgICAgbGlzdGVuZXJzQXJyYXktPnB1c2hPYmplY3QoYnVpbGRPYmplY3RGb3JFdmVudExp
c3RlbmVyKGxpc3RlbmVyLCBpbmZvLmV2ZW50VHlwZSwgaW5mby5ub2RlKSk7CiAgICAgICAgIH0K
ICAgICB9CiB9CkBAIC04NjgsNyArODY4LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cGVy
Zm9ybVNlYXJjaChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgd2hpdGVzcGFjZVRyaW0KICAg
ICAqcmVzdWx0Q291bnQgPSByZXN1bHRzSXQtPnNlY29uZC5zaXplKCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHNlYXJjaElkLCBpbnQgZnJvbUluZGV4LCBpbnQgdG9JbmRleCwgUmVm
UHRyPEluc3BlY3RvckFycmF5Piogbm9kZUlkcykKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Omdl
dFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNl
YXJjaElkLCBpbnQgZnJvbUluZGV4LCBpbnQgdG9JbmRleCwgUmVmUHRyPEluc3BlY3RvckFycmF5
PiYgbm9kZUlkcykKIHsKICAgICBTZWFyY2hSZXN1bHRzOjppdGVyYXRvciBpdCA9IG1fc2VhcmNo
UmVzdWx0cy5maW5kKHNlYXJjaElkKTsKICAgICBpZiAoaXQgPT0gbV9zZWFyY2hSZXN1bHRzLmVu
ZCgpKSB7CkBAIC04ODMsNyArODgzLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2Vh
cmNoUmVzdWx0cyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYKICAgICB9
CiAKICAgICBmb3IgKGludCBpID0gZnJvbUluZGV4OyBpIDwgdG9JbmRleDsgKytpKQotICAgICAg
ICAoKm5vZGVJZHMpLT5wdXNoTnVtYmVyKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoKGl0LT5zZWNv
bmQpW2ldLmdldCgpKSk7CisgICAgICAgIG5vZGVJZHMtPnB1c2hOdW1iZXIocHVzaE5vZGVQYXRo
VG9Gcm9udGVuZCgoaXQtPnNlY29uZClbaV0uZ2V0KCkpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6ZGlzY2FyZFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcm
IHNlYXJjaElkKQpAQCAtMTA3NCw3ICsxMDc0LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
bW92ZVRvKEVycm9yU3RyaW5nKiBlcnJvciwgaW50IG5vZGVJZCwgaW50IHRhcmdldEVsZW1lbnQK
ICAgICAqbmV3Tm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2RlKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5vZGUoRXJyb3JTdHJpbmcqIGVycm9yLCBpbnQg
bm9kZUlkLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiogcmVzdWx0KQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5vZGUoRXJy
b3JTdHJpbmcqIGVycm9yLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9iamVjdEdy
b3VwLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KQogewogICAgIFN0cmluZyBvYmpl
Y3RHcm91cE5hbWUgPSBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6ICIiOwogICAgIE5vZGUq
IG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKQEAgLTEwODcsMTYgKzEwODcsMTYgQEAgdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5vZGUoRXJyb3JTdHJpbmcqIGVycm9yLCBpbnQgbm9k
ZUlkLCBjb25zdCBTdHJpbmcKICAgICAgICAgKmVycm9yID0gIk5vZGUgd2l0aCBnaXZlbiBpZCBk
b2VzIG5vdCBiZWxvbmcgdG8gdGhlIGRvY3VtZW50IjsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICAqcmVzdWx0ID0gb2JqZWN0OworICAgIHJlc3VsdCA9IG9iamVjdDsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6Z2V0QXR0cmlidXRlcyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcs
IGludCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJlc3VsdCkKK3ZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmdldEF0dHJpYnV0ZXMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQg
bm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiByZXN1bHQpCiB7CiAgICAgRWxlbWVudCog
ZWxlbWVudCA9IGFzc2VydEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFl
bGVtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICAqcmVzdWx0ID0gYnVpbGRBcnJheUZvckVs
ZW1lbnRBdHRyaWJ1dGVzKGVsZW1lbnQpOworICAgIHJlc3VsdCA9IGJ1aWxkQXJyYXlGb3JFbGVt
ZW50QXR0cmlidXRlcyhlbGVtZW50KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVx
dWVzdE5vZGUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQqIG5vZGVJ
ZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXgg
NTAzMDlkOGMzOGUxMDlmZDU2MGEzYmZiNGM1ZWZmMDdmNGVmZWE4Ny4uNGFkZTViZGI1OWVkMTg3
NzVmNzZiYTlhZDM5OGM0MjU4M2FmYTJlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmgKQEAgLTExNSw4ICsxMTUsOCBAQCBwdWJsaWM6CiAKICAgICAv
LyBNZXRob2RzIGNhbGxlZCBmcm9tIHRoZSBmcm9udGVuZCBmb3IgRE9NIG5vZGVzIGluc3BlY3Rp
b24uCiAgICAgdm9pZCBxdWVyeVNlbGVjdG9yKEVycm9yU3RyaW5nKiwgaW50IG5vZGVJZCwgY29u
c3QgU3RyaW5nJiBzZWxlY3RvcnMsIGludCogZWxlbWVudElkKTsKLSAgICB2b2lkIHF1ZXJ5U2Vs
ZWN0b3JBbGwoRXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9y
cywgUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzdWx0KTsKLSAgICB2b2lkIGdldERvY3VtZW50
KEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJvb3QpOworICAgIHZvaWQg
cXVlcnlTZWxlY3RvckFsbChFcnJvclN0cmluZyosIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYg
c2VsZWN0b3JzLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiByZXN1bHQpOworICAgIHZvaWQgZ2V0
RG9jdW1lbnQoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcm9vdCk7CiAg
ICAgdm9pZCByZXF1ZXN0Q2hpbGROb2RlcyhFcnJvclN0cmluZyosIGludCBub2RlSWQpOwogICAg
IHZvaWQgc2V0QXR0cmlidXRlVmFsdWUoRXJyb3JTdHJpbmcqLCBpbnQgZWxlbWVudElkLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgIHZvaWQgc2V0QXR0cmli
dXRlc0FzVGV4dChFcnJvclN0cmluZyosIGludCBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgdGV4
dCwgY29uc3QgU3RyaW5nKiBjb25zdCBuYW1lKTsKQEAgLTEyNiwxMiArMTI2LDEyIEBAIHB1Ymxp
YzoKICAgICB2b2lkIGdldE91dGVySFRNTChFcnJvclN0cmluZyosIGludCBub2RlSWQsIFdURjo6
U3RyaW5nKiBvdXRlckhUTUwpOwogICAgIHZvaWQgc2V0T3V0ZXJIVE1MKEVycm9yU3RyaW5nKiwg
aW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBvdXRlckhUTUwsIGludCogbmV3SWQpOwogICAgIHZv
aWQgc2V0Tm9kZVZhbHVlKEVycm9yU3RyaW5nKiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSk7Ci0gICAgdm9pZCBnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoRXJyb3JTdHJpbmcqLCBp
bnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBsaXN0ZW5lcnNBcnJheSk7CisgICAg
dm9pZCBnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlkLCBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBsaXN0ZW5lcnNBcnJheSk7CiAgICAgdm9pZCBwZXJmb3Jt
U2VhcmNoKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5
LCBTdHJpbmcqIHNlYXJjaElkLCBpbnQqIHJlc3VsdENvdW50KTsKLSAgICB2b2lkIGdldFNlYXJj
aFJlc3VsdHMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHNlYXJjaElkLCBpbnQgZnJvbUlu
ZGV4LCBpbnQgdG9JbmRleCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiopOworICAgIHZvaWQgZ2V0
U2VhcmNoUmVzdWx0cyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQsIGludCBm
cm9tSW5kZXgsIGludCB0b0luZGV4LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+Jik7CiAgICAgdm9p
ZCBkaXNjYXJkU2VhcmNoUmVzdWx0cyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgc2VhcmNo
SWQpOwotICAgIHZvaWQgcmVzb2x2ZU5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlkLCBjb25z
dCBTdHJpbmcqIGNvbnN0IG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVz
dWx0KTsKLSAgICB2b2lkIGdldEF0dHJpYnV0ZXMoRXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlkLCBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiByZXN1bHQpOworICAgIHZvaWQgcmVzb2x2ZU5vZGUoRXJy
b3JTdHJpbmcqLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9iamVjdEdyb3VwLCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KTsKKyAgICB2b2lkIGdldEF0dHJpYnV0ZXMo
RXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiByZXN1bHQp
OwogICAgIHZvaWQgc2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nKiwgYm9vbCBlbmFi
bGVkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogaGlnaGxpZ2h0Q29uZmlnKTsKICAg
ICB2b2lkIHJlcXVlc3ROb2RlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwg
aW50KiBub2RlSWQpOwogICAgIHZvaWQgcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKEVycm9yU3Ry
aW5nKiwgY29uc3QgU3RyaW5nJiBwYXRoLCBpbnQqIG5vZGVJZCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCmluZGV4IGI4
MTFmYmE4NmQyMTg2NGRmZDBmMGE3NjYzMGI0MDQwMGNjNzEzNDMuLjYzZGFmMzkyMjUyODc5NzI1
NWNhZDBhYWRmMmJjYTcxYTY1MjYxYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCkBAIC0xMDgsNyArMTA4LDcgQEAg
dm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcqKQogICAg
IG1fc3RhdGUtPnNldEJvb2xlYW4oRE9NU3RvcmFnZUFnZW50U3RhdGU6OmRvbVN0b3JhZ2VBZ2Vu
dEVuYWJsZWQsIG1fZW5hYmxlZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
OjpnZXRET01TdG9yYWdlRW50cmllcyhFcnJvclN0cmluZyosIGludCBzdG9yYWdlSWQsIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4qIGVudHJpZXMpCit2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dDo6Z2V0RE9NU3RvcmFnZUVudHJpZXMoRXJyb3JTdHJpbmcqLCBpbnQgc3RvcmFnZUlkLCBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+JiBlbnRyaWVzKQogewogICAgIEluc3BlY3RvckRPTVN0b3JhZ2VS
ZXNvdXJjZSogc3RvcmFnZVJlc291cmNlID0gZ2V0RE9NU3RvcmFnZVJlc291cmNlRm9ySWQoc3Rv
cmFnZUlkKTsKICAgICBpZiAoc3RvcmFnZVJlc291cmNlKSB7CkBAIC0xMjAsNyArMTIwLDcgQEAg
dm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VFbnRyaWVzKEVycm9y
U3RyaW5nKiwgaW50IHN0b3JhZ2VJZCwKICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gZW50cnkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBlbnRyeS0+
cHVzaFN0cmluZyhuYW1lKTsKICAgICAgICAgICAgIGVudHJ5LT5wdXNoU3RyaW5nKHZhbHVlKTsK
LSAgICAgICAgICAgICgqZW50cmllcyktPnB1c2hBcnJheShlbnRyeSk7CisgICAgICAgICAgICBl
bnRyaWVzLT5wdXNoQXJyYXkoZW50cnkpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oCmluZGV4
IGU4N2ZmZTIzMzc4ODJlYTRmOThmMDdmNGE3MDNkMWViY2NkMDg3NmUuLmJkMWQ2YTcxOWNlOGIy
MTRjMDUyYjkwOWMzOGYwODdkNjNkYzk2NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgKQEAgLTY0LDcgKzY0LDcgQEAgcHVi
bGljOgogICAgIC8vIENhbGxlZCBmcm9tIHRoZSBmcm9udC1lbmQuCiAgICAgdm9pZCBlbmFibGUo
RXJyb3JTdHJpbmcqKTsKICAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKTsKLSAgICB2b2lk
IGdldERPTVN0b3JhZ2VFbnRyaWVzKEVycm9yU3RyaW5nKiwgaW50IHN0b3JhZ2VJZCwgUmVmUHRy
PEluc3BlY3RvckFycmF5PiogZW50cmllcyk7CisgICAgdm9pZCBnZXRET01TdG9yYWdlRW50cmll
cyhFcnJvclN0cmluZyosIGludCBzdG9yYWdlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIGVu
dHJpZXMpOwogICAgIHZvaWQgc2V0RE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcqLCBpbnQgc3Rv
cmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCogc3Vj
Y2Vzcyk7CiAgICAgdm9pZCByZW1vdmVET01TdG9yYWdlSXRlbShFcnJvclN0cmluZyosIGludCBz
dG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBib29sKiBzdWNjZXNzKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCmluZGV4
IDRjODZlOWJhMDMyNmQxYWIwMDJiNWVlNzdkMTZmMjU5N2Y5NWZkMDguLmQ5NmIxZTc2NjI0NGM1
NjRhZjgyMjUzNzJkMDg2MGY4MDdjZmMwNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKQEAgLTI5MSw3ICsyOTEsNyBAQCB2
b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OnJlc3RvcmUoKQogICAgIG1fZW5hYmxlZCA9ICBt
X3N0YXRlLT5nZXRCb29sZWFuKERhdGFiYXNlQWdlbnRTdGF0ZTo6ZGF0YWJhc2VBZ2VudEVuYWJs
ZWQpOwogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmdldERhdGFiYXNlVGFibGVO
YW1lcyhFcnJvclN0cmluZyogZXJyb3IsIGludCBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+KiBuYW1lcykKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6Z2V0RGF0YWJhc2VU
YWJsZU5hbWVzKEVycm9yU3RyaW5nKiBlcnJvciwgaW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4mIG5hbWVzKQogewogICAgIGlmICghbV9lbmFibGVkKSB7CiAgICAgICAgICpl
cnJvciA9ICJEYXRhYmFzZSBhZ2VudCBpcyBub3QgZW5hYmxlZCI7CkBAIC0zMDMsNyArMzAzLDcg
QEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpnZXREYXRhYmFzZVRhYmxlTmFtZXMoRXJy
b3JTdHJpbmcqIGVycm9yLCBpbnQgZGF0YWIKICAgICAgICAgVmVjdG9yPFN0cmluZz4gdGFibGVO
YW1lcyA9IGRhdGFiYXNlLT50YWJsZU5hbWVzKCk7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHRhYmxlTmFtZXMuc2l6ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpCi0gICAgICAgICAgICAoKm5hbWVzKS0+cHVzaFN0cmluZyh0YWJsZU5hbWVzW2ld
KTsKKyAgICAgICAgICAgIG5hbWVzLT5wdXNoU3RyaW5nKHRhYmxlTmFtZXNbaV0pOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFi
YXNlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFn
ZW50LmgKaW5kZXggNWUwOGZhODliYTcyNmYzZDY2MjVlOGM2ZmU4MTJmM2U3M2MxZmRmOS4uYzlj
MmM1M2M0NGQ1ZDM1NDMxMDg1MDA3Yjg5YzI5YjFiMTAyNjgwNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCkBAIC02NCw3ICs2NCw3
IEBAIHB1YmxpYzoKICAgICAvLyBDYWxsZWQgZnJvbSB0aGUgZnJvbnQtZW5kLgogICAgIHZvaWQg
ZW5hYmxlKEVycm9yU3RyaW5nKik7CiAgICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nKik7Ci0g
ICAgdm9pZCBnZXREYXRhYmFzZVRhYmxlTmFtZXMoRXJyb3JTdHJpbmcqLCBpbnQgZGF0YWJhc2VJ
ZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogbmFtZXMpOworICAgIHZvaWQgZ2V0RGF0YWJhc2VU
YWJsZU5hbWVzKEVycm9yU3RyaW5nKiwgaW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4mIG5hbWVzKTsKICAgICB2b2lkIGV4ZWN1dGVTUUwoRXJyb3JTdHJpbmcqLCBpbnQgZGF0
YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgYm9vbCogc3VjY2VzcywgaW50KiB0cmFuc2Fj
dGlvbklkKTsKIAogICAgIC8vIENhbGxlZCBmcm9tIHRoZSBpbmplY3RlZCBzY3JpcHQuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAK
aW5kZXggZTkwNDljYWE4ODI3MDU4ZGI4NDdmZGQyMDhkYTkzZDBhZjBlMDk4Ni4uMWIwNGFhNThi
YTlkZTFkZWFiZWM3Mzg5ZTEyZTIyZWI3MWQwM2M2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApAQCAtMTk4LDcgKzE5OCw3
IEBAIHN0YXRpYyBib29sIG1hdGNoZXMoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYg
cGF0dGVybiwgYm9vbCBpc1JlZ2V4KQogICAgIHJldHVybiB1cmwgPT0gcGF0dGVybjsKIH0KIAot
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRp
b25hbFVSTCwgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRpb25hbFVSTFJlZ2V4LCBjb25zdCBpbnQq
IGNvbnN0IG9wdGlvbmFsQ29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFs
Q29uZGl0aW9uLCBTdHJpbmcqIG91dEJyZWFrcG9pbnRJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5
PiogbG9jYXRpb25zKQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50
QnlVcmwoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3Ry
aW5nKiBjb25zdCBvcHRpb25hbFVSTCwgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRpb25hbFVSTFJl
Z2V4LCBjb25zdCBpbnQqIGNvbnN0IG9wdGlvbmFsQ29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcq
IGNvbnN0IG9wdGlvbmFsQ29uZGl0aW9uLCBTdHJpbmcqIG91dEJyZWFrcG9pbnRJZCwgUmVmUHRy
PEluc3BlY3RvckFycmF5PiYgbG9jYXRpb25zKQogewogICAgIGlmICghb3B0aW9uYWxVUkwgPT0g
IW9wdGlvbmFsVVJMUmVnZXgpIHsKICAgICAgICAgKmVycm9yU3RyaW5nID0gIkVpdGhlciB1cmwg
b3IgdXJsUmVnZXggbXVzdCBiZSBzcGVjaWZpZWQuIjsKQEAgLTIyNiw3ICsyMjYsNyBAQCB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyog
ZXJyb3JTdHJpbmcsIGludCBsaQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGxvY2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoYnJlYWtwb2lu
dElkLCBpdC0+Zmlyc3QsIGJyZWFrcG9pbnQpOwogICAgICAgICBpZiAobG9jYXRpb24pCi0gICAg
ICAgICAgICAoKmxvY2F0aW9ucyktPnB1c2hPYmplY3QobG9jYXRpb24pOworICAgICAgICAgICAg
bG9jYXRpb25zLT5wdXNoT2JqZWN0KGxvY2F0aW9uKTsKICAgICB9CiAgICAgKm91dEJyZWFrcG9p
bnRJZCA9IGJyZWFrcG9pbnRJZDsKIH0KQEAgLTI0Myw3ICsyNDMsNyBAQCBzdGF0aWMgYm9vbCBw
YXJzZUxvY2F0aW9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbG9jYQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbG9jYXRpb24sIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxD
b25kaXRpb24sIFN0cmluZyogb3V0QnJlYWtwb2ludElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiogYWN0dWFsTG9jYXRpb24pCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFr
cG9pbnQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbG9jYXRpb24sIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxDb25kaXRpb24sIFN0cmlu
Zyogb3V0QnJlYWtwb2ludElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgYWN0dWFsTG9jYXRp
b24pCiB7CiAgICAgU3RyaW5nIHNjcmlwdElkOwogICAgIGludCBsaW5lTnVtYmVyOwpAQCAtMjU4
LDggKzI1OCw4IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludChF
cnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFBhc3NSZWZQdHI8CiAgICAgaWYgKG1fYnJlYWtwb2lu
dElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZmluZChicmVha3BvaW50SWQpICE9IG1fYnJl
YWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZW5kKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQobGluZU51bWJlciwgY29sdW1uTnVt
YmVyLCBjb25kaXRpb24pOwotICAgICphY3R1YWxMb2NhdGlvbiA9IHJlc29sdmVCcmVha3BvaW50
KGJyZWFrcG9pbnRJZCwgc2NyaXB0SWQsIGJyZWFrcG9pbnQpOwotICAgIGlmICgqYWN0dWFsTG9j
YXRpb24pCisgICAgYWN0dWFsTG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChicmVha3BvaW50
SWQsIHNjcmlwdElkLCBicmVha3BvaW50KTsKKyAgICBpZiAoYWN0dWFsTG9jYXRpb24pCiAgICAg
ICAgICpvdXRCcmVha3BvaW50SWQgPSBicmVha3BvaW50SWQ7CiAgICAgZWxzZQogICAgICAgICAq
ZXJyb3JTdHJpbmcgPSAiQ291bGQgbm90IHJlc29sdmUgYnJlYWtwb2ludCI7CkBAIC0zMzUsMjgg
KzMzNSwyOCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNjcmlwdFRvSW5z
cGVjdG9yT2JqZWN0KFNjcmlwdE9iamVjdCBzY3JpcHRPYgogICAgIHJldHVybiB2YWx1ZS0+YXNP
YmplY3QoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRl
bnQoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTdHJp
bmcmIHF1ZXJ5LCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0
IGJvb2wqIGNvbnN0IG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVz
dWx0cykKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2VhcmNoSW5Db250ZW50KEVycm9y
U3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29uc3QgU3RyaW5nJiBxdWVy
eSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBj
b25zdCBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIHJlc3VsdHMpCiB7
CiAgICAgYm9vbCBpc1JlZ2V4ID0gb3B0aW9uYWxJc1JlZ2V4ID8gKm9wdGlvbmFsSXNSZWdleCA6
IGZhbHNlOwogICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA/
ICpvcHRpb25hbENhc2VTZW5zaXRpdmUgOiBmYWxzZTsKIAogICAgIFNjcmlwdHNNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0SWQpOwogICAgIGlmIChpdCAhPSBtX3Njcmlw
dHMuZW5kKCkpCi0gICAgICAgICpyZXN1bHRzID0gQ29udGVudFNlYXJjaFV0aWxzOjpzZWFyY2hJ
blRleHRCeUxpbmVzKGl0LT5zZWNvbmQuc291cmNlLCBxdWVyeSwgY2FzZVNlbnNpdGl2ZSwgaXNS
ZWdleCk7CisgICAgICAgIHJlc3VsdHMgPSBDb250ZW50U2VhcmNoVXRpbHM6OnNlYXJjaEluVGV4
dEJ5TGluZXMoaXQtPnNlY29uZC5zb3VyY2UsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4
KTsKICAgICBlbHNlCiAgICAgICAgICplcnJvciA9ICJObyBzY3JpcHQgZm9yIGlkOiAiICsgc2Ny
aXB0SWQ7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0U2NyaXB0U291cmNl
KEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29uc3QgU3RyaW5n
JiBuZXdDb250ZW50LCBjb25zdCBib29sKiBjb25zdCBwcmV2aWV3LCBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+KiBuZXdDYWxsRnJhbWVzLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVzdWx0KQor
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcq
IGVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTdHJpbmcmIG5ld0NvbnRlbnQs
IGNvbnN0IGJvb2wqIGNvbnN0IHByZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIG5ld0Nh
bGxGcmFtZXMsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQpCiB7CiAgICAgYm9vbCBw
cmV2aWV3T25seSA9IHByZXZpZXcgJiYgKnByZXZpZXc7CiAgICAgU2NyaXB0T2JqZWN0IHJlc3Vs
dE9iamVjdDsKICAgICBpZiAoIXNjcmlwdERlYnVnU2VydmVyKCkuc2V0U2NyaXB0U291cmNlKHNj
cmlwdElkLCBuZXdDb250ZW50LCBwcmV2aWV3T25seSwgZXJyb3IsICZtX2N1cnJlbnRDYWxsU3Rh
Y2ssICZyZXN1bHRPYmplY3QpKQogICAgICAgICByZXR1cm47Ci0gICAgKm5ld0NhbGxGcmFtZXMg
PSBjdXJyZW50Q2FsbEZyYW1lcygpOworICAgIG5ld0NhbGxGcmFtZXMgPSBjdXJyZW50Q2FsbEZy
YW1lcygpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCA9IHNjcmlwdFRvSW5z
cGVjdG9yT2JqZWN0KHJlc3VsdE9iamVjdCk7CiAgICAgaWYgKG9iamVjdCkKLSAgICAgICAgKnJl
c3VsdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0ID0gb2JqZWN0OwogfQogCiB2b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyogZXJyb3IsIGNv
bnN0IFN0cmluZyYgc2NyaXB0SWQsIFN0cmluZyogc2NyaXB0U291cmNlKQpAQCAtMzY4LDE0ICsz
NjgsMTQgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRTb3VyY2UoRXJy
b3JTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHMKICAgICAgICAgKmVycm9yID0gIk5vIHNj
cmlwdCBmb3IgaWQ6ICIgKyBzY3JpcHRJZDsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpnZXRGdW5jdGlvbkxvY2F0aW9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogbG9jYXRpb24pCit2
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldEZ1bmN0aW9uTG9jYXRpb24oRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiBsb2NhdGlvbikKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlw
dCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKGZ1
bmN0aW9uSWQpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKICAgICAg
ICAgKmVycm9yU3RyaW5nID0gIkluc3BlY3RlZCBmcmFtZSBoYXMgZ29uZSI7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgaW5qZWN0ZWRTY3JpcHQuZ2V0RnVuY3Rpb25Mb2NhdGlvbihlcnJv
clN0cmluZywgZnVuY3Rpb25JZCwgbG9jYXRpb24pOworICAgIGluamVjdGVkU2NyaXB0LmdldEZ1
bmN0aW9uTG9jYXRpb24oZXJyb3JTdHJpbmcsIGZ1bmN0aW9uSWQsICZsb2NhdGlvbik7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVu
dChjb25zdCBTdHJpbmcmIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
ZGF0YSkKQEAgLTQ1MSwxNCArNDUxLDE0IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c2V0UGF1c2VPbkV4Y2VwdGlvbnMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zCiAgICAg
ICAgICplcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvci4gQ291bGQgbm90IGNoYW5nZSBwYXVz
ZSBvbiBleGNlcHRpb25zIHN0YXRlIjsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcq
IGNvbnN0IG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBjb25zdCBpbmNsdWRlQ29tbWFuZExpbmVB
UEksIGNvbnN0IGJvb2wqIGNvbnN0IHJldHVybkJ5VmFsdWUsIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+KiByZXN1bHQsIGJvb2wqIHdhc1Rocm93bikKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0
cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5n
KiBjb25zdCBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogY29uc3QgaW5jbHVkZUNvbW1hbmRMaW5l
QVBJLCBjb25zdCBib29sKiBjb25zdCByZXR1cm5CeVZhbHVlLCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYgcmVzdWx0LCBib29sKiB3YXNUaHJvd24pCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5q
ZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRGb3JP
YmplY3RJZChjYWxsRnJhbWVJZCk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUo
KSkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW5zcGVjdGVkIGZyYW1lIGhhcyBnb25lIjsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpbmplY3RlZFNjcmlwdC5ldmFsdWF0ZU9uQ2Fs
bEZyYW1lKGVycm9yU3RyaW5nLCBtX2N1cnJlbnRDYWxsU3RhY2ssIGNhbGxGcmFtZUlkLCBleHBy
ZXNzaW9uLCBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6ICIiLCBpbmNsdWRlQ29tbWFuZExp
bmVBUEkgPyAqaW5jbHVkZUNvbW1hbmRMaW5lQVBJIDogZmFsc2UsIHJldHVybkJ5VmFsdWUgPyAq
cmV0dXJuQnlWYWx1ZSA6IGZhbHNlLCByZXN1bHQsIHdhc1Rocm93bik7CisgICAgaW5qZWN0ZWRT
Y3JpcHQuZXZhbHVhdGVPbkNhbGxGcmFtZShlcnJvclN0cmluZywgbV9jdXJyZW50Q2FsbFN0YWNr
LCBjYWxsRnJhbWVJZCwgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAgPyAqb2JqZWN0R3JvdXAgOiAi
IiwgaW5jbHVkZUNvbW1hbmRMaW5lQVBJID8gKmluY2x1ZGVDb21tYW5kTGluZUFQSSA6IGZhbHNl
LCByZXR1cm5CeVZhbHVlID8gKnJldHVybkJ5VmFsdWUgOiBmYWxzZSwgJnJlc3VsdCwgd2FzVGhy
b3duKTsKIH0KIAogUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6Y3VycmVudENhbGxGcmFtZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKaW5kZXggYmEyNDJkYzdjNWIyZDY3MjNjY2NmYzli
ZTYzMjdhMWU5YjM3N2Q1MC4uODkzOWFmODBmNDU4NzBmNzZkMjJhZmIyOWViNWFiYWE2YTkyOWYx
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJB
Z2VudC5oCkBAIC04MSwxNSArODEsMTUgQEAgcHVibGljOgogICAgIC8vIFBhcnQgb2YgdGhlIHBy
b3RvY29sLgogICAgIHZvaWQgc2V0QnJlYWtwb2ludHNBY3RpdmUoRXJyb3JTdHJpbmcqLCBib29s
IGFjdGl2ZSk7CiAKLSAgICB2b2lkIHNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyosIGlu
dCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsVVJMLCBjb25zdCBTdHJp
bmcqIGNvbnN0IG9wdGlvbmFsVVJMUmVnZXgsIGNvbnN0IGludCogY29uc3Qgb3B0aW9uYWxDb2x1
bW5OdW1iZXIsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxDb25kaXRpb24sIFN0cmluZyog
YnJlYWtwb2ludElkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBsb2NhdGlvbnMpOwotICAgIHZv
aWQgc2V0QnJlYWtwb2ludChFcnJvclN0cmluZyosIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBsb2NhdGlvbiwgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRpb25hbENvbmRpdGlvbiwgU3RyaW5n
KiBicmVha3BvaW50SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBhY3R1YWxMb2NhdGlvbik7
CisgICAgdm9pZCBzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcqLCBpbnQgbGluZU51bWJl
ciwgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRpb25hbFVSTCwgY29uc3QgU3RyaW5nKiBjb25zdCBv
cHRpb25hbFVSTFJlZ2V4LCBjb25zdCBpbnQqIGNvbnN0IG9wdGlvbmFsQ29sdW1uTnVtYmVyLCBj
b25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsQ29uZGl0aW9uLCBTdHJpbmcqIGJyZWFrcG9pbnRJ
ZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgbG9jYXRpb25zKTsKKyAgICB2b2lkIHNldEJyZWFr
cG9pbnQoRXJyb3JTdHJpbmcqLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbG9jYXRpb24s
IGNvbnN0IFN0cmluZyogY29uc3Qgb3B0aW9uYWxDb25kaXRpb24sIFN0cmluZyogYnJlYWtwb2lu
dElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgYWN0dWFsTG9jYXRpb24pOwogICAgIHZvaWQg
cmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElk
KTsKICAgICB2b2lkIGNvbnRpbnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyosIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBsb2NhdGlvbik7CiAKLSAgICB2b2lkIHNlYXJjaEluQ29udGVudChF
cnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgcXVlcnks
IGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogY29u
c3Qgb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+Kik7Ci0gICAgdm9pZCBz
ZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25z
dCBTdHJpbmcmIG5ld0NvbnRlbnQsIGNvbnN0IGJvb2wqIGNvbnN0IHByZXZpZXcsIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4qIG5ld0NhbGxGcmFtZXMsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBy
ZXN1bHQpOworICAgIHZvaWQgc2VhcmNoSW5Db250ZW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJiBzY3JpcHRJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogY29uc3Qgb3B0
aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbElzUmVnZXgsIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4mKTsKKyAgICB2b2lkIHNldFNjcmlwdFNvdXJjZShFcnJvclN0
cmluZyosIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgbmV3Q29udGVudCwg
Y29uc3QgYm9vbCogY29uc3QgcHJldmlldywgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgbmV3Q2Fs
bEZyYW1lcywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHJlc3VsdCk7CiAgICAgdm9pZCBnZXRT
Y3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBTdHJpbmcq
IHNjcmlwdFNvdXJjZSk7Ci0gICAgdm9pZCBnZXRGdW5jdGlvbkxvY2F0aW9uKEVycm9yU3RyaW5n
KiwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogbG9j
YXRpb24pOworICAgIHZvaWQgZ2V0RnVuY3Rpb25Mb2NhdGlvbihFcnJvclN0cmluZyosIGNvbnN0
IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGxvY2F0aW9uKTsK
ICAgICB2b2lkIHNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBicmVh
a1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpOwogICAgIHZvaWQgY2Fu
Y2VsUGF1c2VPbk5leHRTdGF0ZW1lbnQoKTsKICAgICB2b2lkIGJyZWFrUHJvZ3JhbShjb25zdCBT
dHJpbmcmIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSk7CkBA
IC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcqIGNvbnN0IG9iamVjdEdyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBib29sKiBjb25zdCBpbmNsdWRlQ29tbWFuZExpbmVBUEksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wqIGNvbnN0IHJldHVybkJ5VmFsdWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiByZXN1bHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBy
ZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIHdhc1Rocm93bik7CiAK
ICAgICBjbGFzcyBMaXN0ZW5lciB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvck1lbW9yeUFnZW50LmNwcAppbmRleCA1ZTY0MTg4MGMzOThmOWM0NzBhZTdiNmFjYWRi
MTcxMGVlYjNmNWJkLi44NTJlMDMwMTI1MDI2ODBkODc2Zjc3YmI3YjI5NzhjMTNjYzM0NzRlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5j
cHAKQEAgLTE0OCw3ICsxNDgsNyBAQCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6fkluc3BlY3Rvck1l
bW9yeUFnZW50KCkKIHsKIH0KIAotdm9pZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6Z2V0RE9NTm9k
ZUNvdW50KEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzdWx0KQordm9p
ZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6Z2V0RE9NTm9kZUNvdW50KEVycm9yU3RyaW5nKiwgUmVm
UHRyPEluc3BlY3RvckFycmF5PiYgcmVzdWx0KQogewogICAgIENvdW50ZXJWaXNpdG9yIGNvdW50
ZXJWaXNpdG9yKG1fcGFnZSk7CiAgICAgU2NyaXB0UHJvZmlsZXI6OnZpc2l0SlNET01XcmFwcGVy
cygmY291bnRlclZpc2l0b3IpOwpAQCAtMTU5LDcgKzE1OSw3IEBAIHZvaWQgSW5zcGVjdG9yTWVt
b3J5QWdlbnQ6OmdldERPTU5vZGVDb3VudChFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4qCiAgICAgICAgICAgICBjb3VudGVyVmlzaXRvci52aXNpdE5vZGUoZG9jKTsKICAgICB9
CiAKLSAgICAqcmVzdWx0ID0gY291bnRlclZpc2l0b3IuY291bnRlcnMoKTsKKyAgICByZXN1bHQg
PSBjb3VudGVyVmlzaXRvci5jb3VudGVycygpOwogfQogCiBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6
SW5zcGVjdG9yTWVtb3J5QWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cywgSW5zcGVjdG9yU3RhdGUqIHN0YXRlLCBQYWdlKiBwYWdlLCBJbnNwZWN0b3JET01BZ2Vu
dCogZG9tQWdlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yTWVtb3J5QWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1v
cnlBZ2VudC5oCmluZGV4IGQ4ZGFmYTg5ODg2OTI2MjhkYzNmYzc3MjQ5NjRjZGM0ZDJmYmYyNGQu
LmIxYmMxMTUxNTVkYzAxM2M1MDZiM2RhMjAwMjdiMDQ0YmI5MWJkZGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5oCkBAIC01Nyw3ICs1Nyw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JNZW1vcnlB
Z2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBzdGF0ZSwgcGFnZSwgZG9tQWdlbnQpKTsKICAgICB9
CiAKLSAgICB2b2lkIGdldERPTU5vZGVDb3VudChFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4qIHJlc3VsdCk7CisgICAgdm9pZCBnZXRET01Ob2RlQ291bnQoRXJyb3JTdHJpbmcq
LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiByZXN1bHQpOwogCiAgICAgfkluc3BlY3Rvck1lbW9y
eUFnZW50KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JQYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VB
Z2VudC5jcHAKaW5kZXggMmRlNGQxNWZkNDBhMDg4MzQzNGQ0N2I5MjQ1NTE0Zjk0NDg5YTNhMC4u
YjFjOWFjNGI1ZmUzMDY2Yzc3YjExMTg4ZWJjOTRkZmY3ZGNmZWU5MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTQwOSw3ICs0MDks
NyBAQCBzdGF0aWMgVmVjdG9yPEtVUkw+IGFsbFJlc291cmNlc1VSTHNGb3JGcmFtZShGcmFtZSog
ZnJhbWUpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6
OmdldENvb2tpZXMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBjb29raWVz
LCBXVEY6OlN0cmluZyogY29va2llc1N0cmluZykKK3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpn
ZXRDb29raWVzKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgY29va2llcywg
V1RGOjpTdHJpbmcqIGNvb2tpZXNTdHJpbmcpCiB7CiAgICAgLy8gSWYgd2UgY2FuIGdldCByYXcg
Y29va2llcy4KICAgICBMaXN0SGFzaFNldDxDb29raWU+IHJhd0Nvb2tpZXNMaXN0OwpAQCAtNDQ2
LDcgKzQ0Niw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKEVycm9yU3Ry
aW5nKiwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogY29va2llCiAgICAgfQogCiAgICAgaWYgKHJh
d0Nvb2tpZXNJbXBsZW1lbnRlZCkKLSAgICAgICAgKmNvb2tpZXMgPSBidWlsZEFycmF5Rm9yQ29v
a2llcyhyYXdDb29raWVzTGlzdCk7CisgICAgICAgIGNvb2tpZXMgPSBidWlsZEFycmF5Rm9yQ29v
a2llcyhyYXdDb29raWVzTGlzdCk7CiAgICAgZWxzZQogICAgICAgICAqY29va2llc1N0cmluZyA9
IHN0cmluZ0Nvb2tpZXNMaXN0OwogfQpAQCAtNDY0LDkgKzQ2NCw5IEBAIHZvaWQgSW5zcGVjdG9y
UGFnZUFnZW50OjpkZWxldGVDb29raWUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGNvb2tp
ZU5hbWUsIGNvCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3Vy
Y2VUcmVlKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIG9iamVjdCkKK3Zv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRSZXNvdXJjZVRyZWUoRXJyb3JTdHJpbmcqLCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYgb2JqZWN0KQogewotICAgICpvYmplY3QgPSBidWlsZE9iamVj
dEZvckZyYW1lVHJlZShtX3BhZ2UtPm1haW5GcmFtZSgpKTsKKyAgICBvYmplY3QgPSBidWlsZE9i
amVjdEZvckZyYW1lVHJlZShtX3BhZ2UtPm1haW5GcmFtZSgpKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmdldFJlc291cmNlQ29udGVudChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIFN0cmluZyogY29udGVu
dCwgYm9vbCogYmFzZTY0RW5jb2RlZCkKQEAgLTQ5MSw5ICs0OTEsOSBAQCBzdGF0aWMgYm9vbCB0
ZXh0Q29udGVudEZvckNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJj
ZSwgU3RyaW5nKgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdl
bnQ6OnNlYXJjaEluUmVzb3VyY2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQs
IGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBjb25z
dCBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsSXNSZWdl
eCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzdWx0cykKK3ZvaWQgSW5zcGVjdG9yUGFnZUFn
ZW50OjpzZWFyY2hJblJlc291cmNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBmcmFtZUlk
LCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogY29u
c3Qgb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbElzUmVn
ZXgsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIHJlc3VsdHMpCiB7Ci0gICAgKnJlc3VsdHMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgcmVzdWx0cyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKIAogICAgIGJvb2wgaXNSZWdleCA9IG9wdGlvbmFsSXNSZWdleCA/ICpvcHRpb25h
bElzUmVnZXggOiBmYWxzZTsKICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSBvcHRpb25hbENhc2VT
ZW5zaXRpdmUgPyAqb3B0aW9uYWxDYXNlU2Vuc2l0aXZlIDogZmFsc2U7CkBAIC01MjAsNyArNTIw
LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVzb3VyY2UoRXJyb3JTdHJp
bmcqLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGMKICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAg
IHJldHVybjsKIAotICAgICpyZXN1bHRzID0gQ29udGVudFNlYXJjaFV0aWxzOjpzZWFyY2hJblRl
eHRCeUxpbmVzKGNvbnRlbnQsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KTsKKyAgICBy
ZXN1bHRzID0gQ29udGVudFNlYXJjaFV0aWxzOjpzZWFyY2hJblRleHRCeUxpbmVzKGNvbnRlbnQs
IHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KTsKIH0KIAogc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChjb25zdCBTdHJpbmcm
IGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbWF0Y2hlc0NvdW50KQpAQCAtNTMzLDcg
KzUzMyw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RG
b3JTZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5nJiBmcmFtCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5n
KiwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbENhc2VTZW5z
aXRpdmUsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiogcmVzdWx0cykKK3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291
cmNlcyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgYm9vbCogY29uc3Qg
b3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbElzUmVnZXgs
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIHJlc3VsdHMpCiB7CiAgICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBzZWFyY2hSZXN1bHRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogCkBAIC01
NTksNyArNTU5LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVzb3VyY2Vz
KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb24KICAgICAgICAgfQogICAgIH0K
IAotICAgICpyZXN1bHRzID0gc2VhcmNoUmVzdWx0czsKKyAgICByZXN1bHRzID0gc2VhcmNoUmVz
dWx0czsKIH0KIAogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENsZWFyV2luZG93T2JqZWN0
SW5Xb3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3JsZCogd29ybGQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKaW5kZXggMmZhMjFjMDZjY2Qx
YjNkYTk2ZDM2NmM3NDNkYzNhODJlYTAzMDJiZC4uNzlkMjJlNWJjMWU4Njk5ZDMzYTNiNzc4ZmYx
M2I5YjRhNWRkNTA3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclBhZ2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQ
YWdlQWdlbnQuaApAQCAtOTMsMTIgKzkzLDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZVNj
cmlwdFRvRXZhbHVhdGVPbkxvYWQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGlkZW50aWZp
ZXIpOwogICAgIHZvaWQgcmVsb2FkKEVycm9yU3RyaW5nKiwgY29uc3QgYm9vbCogY29uc3Qgb3B0
aW9uYWxJZ25vcmVDYWNoZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFNjcmlwdFRvRXZhbHVhdGVP
bkxvYWQpOwogICAgIHZvaWQgb3BlbihFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgdXJsLCBj
b25zdCBib29sKiBjb25zdCBpbk5ld1dpbmRvdyk7Ci0gICAgdm9pZCBnZXRDb29raWVzKEVycm9y
U3RyaW5nKiwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogY29va2llcywgV1RGOjpTdHJpbmcqIGNv
b2tpZXNTdHJpbmcpOworICAgIHZvaWQgZ2V0Q29va2llcyhFcnJvclN0cmluZyosIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4mIGNvb2tpZXMsIFdURjo6U3RyaW5nKiBjb29raWVzU3RyaW5nKTsKICAg
ICB2b2lkIGRlbGV0ZUNvb2tpZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgY29va2llTmFt
ZSwgY29uc3QgU3RyaW5nJiBkb21haW4pOwotICAgIHZvaWQgZ2V0UmVzb3VyY2VUcmVlKEVycm9y
U3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qKTsKKyAgICB2b2lkIGdldFJlc291cmNl
VHJlZShFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+Jik7CiAgICAgdm9pZCBn
ZXRSZXNvdXJjZUNvbnRlbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNv
bnN0IFN0cmluZyYgdXJsLCBTdHJpbmcqIGNvbnRlbnQsIGJvb2wqIGJhc2U2NEVuY29kZWQpOwot
ICAgIHZvaWQgc2VhcmNoSW5SZXNvdXJjZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgZnJh
bWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wq
IGNvbnN0IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxJ
c1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+Kik7Ci0gICAgdm9pZCBzZWFyY2hJblJlc291
cmNlcyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYsIGNvbnN0IGJvb2wqIGNvbnN0IGNhc2VT
ZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGNvbnN0IGlzUmVnZXgsIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4qKTsKKyAgICB2b2lkIHNlYXJjaEluUmVzb3VyY2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJp
bmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25z
dCBib29sKiBjb25zdCBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGNvbnN0IG9w
dGlvbmFsSXNSZWdleCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYpOworICAgIHZvaWQgc2VhcmNo
SW5SZXNvdXJjZXMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBib29sKiBjb25z
dCBjYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBjb25zdCBpc1JlZ2V4LCBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+Jik7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24gQVBJCiAgICAg
dm9pZCBkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUqLCBET01XcmFwcGVyV29ybGQq
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxl
ckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFn
ZW50LmNwcAppbmRleCAyMjI4MjIzMjRhMjk1MzY5NGRkZDg5Zjg2ZGIwYTZmZTgzOGRjMjI1Li43
M2NmYTVmN2M1OWZiNjRkZWMxNDQwNTlhNzExMGVmOWQ2Nzc1OWFlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCkBAIC0xOTIs
MTQgKzE5MiwxNCBAQCBTdHJpbmcgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0Q3VycmVudFVz
ZXJJbml0aWF0ZWRQcm9maWxlTmFtZShib29sIGluY3JlbWVudAogICAgIHJldHVybiBtYWtlU3Ry
aW5nKFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSwgJy4nLCBTdHJpbmc6Om51bWJlcihtX2N1cnJl
bnRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcikpOwogfQogCi12b2lkIEluc3BlY3RvclByb2Zp
bGVyQWdlbnQ6OmdldFByb2ZpbGVIZWFkZXJzKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiogaGVhZGVycykKK3ZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmls
ZUhlYWRlcnMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBoZWFkZXJzKQog
ewogICAgIFByb2ZpbGVzTWFwOjppdGVyYXRvciBwcm9maWxlc0VuZCA9IG1fcHJvZmlsZXMuZW5k
KCk7CiAgICAgZm9yIChQcm9maWxlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Byb2ZpbGVzLmJlZ2lu
KCk7IGl0ICE9IHByb2ZpbGVzRW5kOyArK2l0KQotICAgICAgICAoKmhlYWRlcnMpLT5wdXNoT2Jq
ZWN0KGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT5zZWNvbmQpKTsKKyAgICAgICAgaGVhZGVycy0+
cHVzaE9iamVjdChjcmVhdGVQcm9maWxlSGVhZGVyKCppdC0+c2Vjb25kKSk7CiAgICAgSGVhcFNu
YXBzaG90c01hcDo6aXRlcmF0b3Igc25hcHNob3RzRW5kID0gbV9zbmFwc2hvdHMuZW5kKCk7CiAg
ICAgZm9yIChIZWFwU25hcHNob3RzTWFwOjppdGVyYXRvciBpdCA9IG1fc25hcHNob3RzLmJlZ2lu
KCk7IGl0ICE9IHNuYXBzaG90c0VuZDsgKytpdCkKLSAgICAgICAgKCpoZWFkZXJzKS0+cHVzaE9i
amVjdChjcmVhdGVTbmFwc2hvdEhlYWRlcigqaXQtPnNlY29uZCkpOworICAgICAgICBoZWFkZXJz
LT5wdXNoT2JqZWN0KGNyZWF0ZVNuYXBzaG90SGVhZGVyKCppdC0+c2Vjb25kKSk7CiB9CiAKIG5h
bWVzcGFjZSB7CkBAIC0yMTcsMjEgKzIxNywyMSBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFj
ZQogCi12b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGUoRXJyb3JTdHJpbmcq
LCBjb25zdCBTdHJpbmcmIHR5cGUsIHVuc2lnbmVkIHVpZCwgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4qIHByb2ZpbGVPYmplY3QpCit2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2Zp
bGUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHR5cGUsIHVuc2lnbmVkIHVpZCwgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mIHByb2ZpbGVPYmplY3QpCiB7CiAgICAgaWYgKHR5cGUgPT0gQ1BV
UHJvZmlsZVR5cGUpIHsKICAgICAgICAgUHJvZmlsZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wcm9m
aWxlcy5maW5kKHVpZCk7CiAgICAgICAgIGlmIChpdCAhPSBtX3Byb2ZpbGVzLmVuZCgpKSB7Ci0g
ICAgICAgICAgICAqcHJvZmlsZU9iamVjdCA9IGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT5zZWNv
bmQpOwotICAgICAgICAgICAgKCpwcm9maWxlT2JqZWN0KS0+c2V0T2JqZWN0KCJoZWFkIiwgaXQt
PnNlY29uZC0+YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JIZWFkKCkpOworICAgICAgICAgICAgcHJv
ZmlsZU9iamVjdCA9IGNyZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT5zZWNvbmQpOworICAgICAgICAg
ICAgcHJvZmlsZU9iamVjdC0+c2V0T2JqZWN0KCJoZWFkIiwgaXQtPnNlY29uZC0+YnVpbGRJbnNw
ZWN0b3JPYmplY3RGb3JIZWFkKCkpOwogICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmJvdHRv
bVVwSGVhZCgpKQotICAgICAgICAgICAgICAgICgqcHJvZmlsZU9iamVjdCktPnNldE9iamVjdCgi
Ym90dG9tVXBIZWFkIiwgaXQtPnNlY29uZC0+YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JCb3R0b21V
cEhlYWQoKSk7CisgICAgICAgICAgICAgICAgcHJvZmlsZU9iamVjdC0+c2V0T2JqZWN0KCJib3R0
b21VcEhlYWQiLCBpdC0+c2Vjb25kLT5idWlsZEluc3BlY3Rvck9iamVjdEZvckJvdHRvbVVwSGVh
ZCgpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAodHlwZSA9PSBIZWFwUHJvZmlsZVR5cGUp
IHsKICAgICAgICAgSGVhcFNuYXBzaG90c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NuYXBzaG90cy5m
aW5kKHVpZCk7CiAgICAgICAgIGlmIChpdCAhPSBtX3NuYXBzaG90cy5lbmQoKSkgewogICAgICAg
ICAgICAgUmVmUHRyPFNjcmlwdEhlYXBTbmFwc2hvdD4gc25hcHNob3QgPSBpdC0+c2Vjb25kOwot
ICAgICAgICAgICAgKnByb2ZpbGVPYmplY3QgPSBjcmVhdGVTbmFwc2hvdEhlYWRlcigqc25hcHNo
b3QpOworICAgICAgICAgICAgcHJvZmlsZU9iamVjdCA9IGNyZWF0ZVNuYXBzaG90SGVhZGVyKCpz
bmFwc2hvdCk7CiAgICAgICAgICAgICBpZiAobV9mcm9udGVuZCkgewogICAgICAgICAgICAgICAg
IE91dHB1dFN0cmVhbSBzdHJlYW0obV9mcm9udGVuZCwgdWlkKTsKICAgICAgICAgICAgICAgICBz
bmFwc2hvdC0+d3JpdGVKU09OKCZzdHJlYW0pOwpAQCAtMzg1LDExICszODUsMTEgQEAgdm9pZCBJ
bnNwZWN0b3JQcm9maWxlckFnZW50Ojp0b2dnbGVSZWNvcmRCdXR0b24oYm9vbCBpc1Byb2ZpbGlu
ZykKICAgICAgICAgbV9mcm9udGVuZC0+c2V0UmVjb3JkaW5nUHJvZmlsZShpc1Byb2ZpbGluZyk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0T2JqZWN0QnlIZWFwT2JqZWN0
SWQoRXJyb3JTdHJpbmcqIGVycm9yLCBpbnQgaWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBy
ZXN1bHQpCit2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldE9iamVjdEJ5SGVhcE9iamVj
dElkKEVycm9yU3RyaW5nKiBlcnJvciwgaW50IGlkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYg
cmVzdWx0KQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gaGVhcE9iamVjdCA9IFNjcmlw
dFByb2ZpbGVyOjpvYmplY3RCeUhlYXBPYmplY3RJZChpZCwgbV9pbmplY3RlZFNjcmlwdE1hbmFn
ZXIpOwogICAgIGlmICghaGVhcE9iamVjdC0+aXNOdWxsKCkpCi0gICAgICAgIGhlYXBPYmplY3Qt
PmFzT2JqZWN0KHJlc3VsdCk7CisgICAgICAgIGhlYXBPYmplY3QtPmFzT2JqZWN0KCZyZXN1bHQp
OwogICAgIGVsc2UKICAgICAgICAgKmVycm9yID0gIk9iamVjdCBpcyBub3QgYXZhaWxhYmxlLiI7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmls
ZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdl
bnQuaAppbmRleCBkNDczMzkwYTM3MjE4ZWY3ODdmZjQ1NmQ1NTk2ZTNhYjI5MmUwYWEwLi4wMmJj
YjdiNDMyOGE3NWQwYWQyZDU2ZmQ0NDdiZjFmN2U4OTJhZTViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmgKQEAgLTgxLDggKzgxLDgg
QEAgcHVibGljOgogICAgIHZvaWQgZW5hYmxlKGJvb2wgc2tpcFJlY29tcGlsZSk7CiAgICAgYm9v
bCBlbmFibGVkKCkgeyByZXR1cm4gbV9lbmFibGVkOyB9CiAgICAgU3RyaW5nIGdldEN1cnJlbnRV
c2VySW5pdGlhdGVkUHJvZmlsZU5hbWUoYm9vbCBpbmNyZW1lbnRQcm9maWxlTnVtYmVyID0gZmFs
c2UpOwotICAgIHZvaWQgZ2V0UHJvZmlsZUhlYWRlcnMoRXJyb3JTdHJpbmcqIGVycm9yLCBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+KiBoZWFkZXJzKTsKLSAgICB2b2lkIGdldFByb2ZpbGUoRXJyb3JT
dHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHR5cGUsIHVuc2lnbmVkIHVpZCwgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4qIHByb2ZpbGVPYmplY3QpOworICAgIHZvaWQgZ2V0UHJvZmlsZUhlYWRl
cnMoRXJyb3JTdHJpbmcqIGVycm9yLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBoZWFkZXJzKTsK
KyAgICB2b2lkIGdldFByb2ZpbGUoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHR5
cGUsIHVuc2lnbmVkIHVpZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHByb2ZpbGVPYmplY3Qp
OwogICAgIHZvaWQgcmVtb3ZlUHJvZmlsZShFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmlu
ZyYgdHlwZSwgdW5zaWduZWQgdWlkKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRGcm9udGVuZChJ
bnNwZWN0b3JGcm9udGVuZCopOwpAQCAtOTIsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB0
YWtlSGVhcFNuYXBzaG90KEVycm9yU3RyaW5nKik7CiAgICAgdm9pZCB0b2dnbGVSZWNvcmRCdXR0
b24oYm9vbCBpc1Byb2ZpbGluZyk7CiAKLSAgICB2b2lkIGdldE9iamVjdEJ5SGVhcE9iamVjdElk
KEVycm9yU3RyaW5nKiwgaW50IGlkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVzdWx0KTsK
KyAgICB2b2lkIGdldE9iamVjdEJ5SGVhcE9iamVjdElkKEVycm9yU3RyaW5nKiwgaW50IGlkLCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KTsKIAogcHJpdmF0ZToKICAgICB0eXBlZGVm
IEhhc2hNYXA8dW5zaWduZWQgaW50LCBSZWZQdHI8U2NyaXB0UHJvZmlsZT4gPiBQcm9maWxlc01h
cDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSdW50aW1l
QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2Vu
dC5jcHAKaW5kZXggNzc2OTJhNTY5MWI3MzI5YWZlYzIxNTc3NmYyOTA2OTkyM2VjZmM1Mi4uNzQx
N2Y4ZWMwMjA3OTQ4ZWFkZmYxMGZhNjFjZjBmY2VjYzExNzE1YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKQEAgLTcxLDcgKzcx
LDcgQEAgSW5zcGVjdG9yUnVudGltZUFnZW50Ojp+SW5zcGVjdG9yUnVudGltZUFnZW50KCkKICAg
ICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvclJ1bnRpbWVBZ2VudCgwKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmV2YWx1YXRlKEVycm9yU3RyaW5nKiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9i
amVjdEdyb3VwLCBjb25zdCBib29sKiBjb25zdCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0
IGJvb2wqIGNvbnN0IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnMsIGNvbnN0IFN0cmluZyogY29uc3Qg
ZnJhbWVJZCwgY29uc3QgYm9vbCogY29uc3QgcmV0dXJuQnlWYWx1ZSwgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4qIHJlc3VsdCwgYm9vbCogd2FzVGhyb3duKQordm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OmV2YWx1YXRlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBl
eHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBj
b25zdCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGNvbnN0IGRvTm90UGF1c2VP
bkV4Y2VwdGlvbnMsIGNvbnN0IFN0cmluZyogY29uc3QgZnJhbWVJZCwgY29uc3QgYm9vbCogY29u
c3QgcmV0dXJuQnlWYWx1ZSwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHJlc3VsdCwgYm9vbCog
d2FzVGhyb3duKQogewogICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IDA7CiAgICAgaWYg
KGZyYW1lSWQpIHsKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6
OmV2YWx1YXRlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBleHAKICAg
ICB9CiAjZW5kaWYKIAotICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlKGVycm9yU3RyaW5nLCBl
eHByZXNzaW9uLCBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6ICIiLCBhc0Jvb2woaW5jbHVk
ZUNvbW1hbmRMaW5lQVBJKSwgYXNCb29sKHJldHVybkJ5VmFsdWUpLCByZXN1bHQsIHdhc1Rocm93
bik7CisgICAgaW5qZWN0ZWRTY3JpcHQuZXZhbHVhdGUoZXJyb3JTdHJpbmcsIGV4cHJlc3Npb24s
IG9iamVjdEdyb3VwID8gKm9iamVjdEdyb3VwIDogIiIsIGFzQm9vbChpbmNsdWRlQ29tbWFuZExp
bmVBUEkpLCBhc0Jvb2wocmV0dXJuQnlWYWx1ZSksICZyZXN1bHQsIHdhc1Rocm93bik7CiAKICNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBpZiAocGF1c2VTdGF0ZUNoYW5nZWQp
CkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmV2YWx1YXRl
KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBleHAKICNlbmRpZgogfQog
Ci12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJl
c3Npb24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGNvbnN0IG9wdGlvbmFsQXJndW1l
bnRzLCBjb25zdCBib29sKiBjb25zdCByZXR1cm5CeVZhbHVlLCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiogcmVzdWx0LCBib29sKiB3YXNUaHJvd24pCit2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2Vu
dDo6Y2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4qIGNvbnN0IG9wdGlvbmFsQXJndW1lbnRzLCBjb25zdCBib29sKiBjb25zdCByZXR1
cm5CeVZhbHVlLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0LCBib29sKiB3YXNUaHJv
d24pCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7CiAgICAgaWYg
KGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewpAQCAtMTE1LDE3ICsxMTUsMTcgQEAgdm9p
ZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nKiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW4KICAgICBTdHJpbmcgYXJndW1lbnRzOwogICAgIGlmIChvcHRp
b25hbEFyZ3VtZW50cykKICAgICAgICAgYXJndW1lbnRzID0gKCpvcHRpb25hbEFyZ3VtZW50cykt
PnRvSlNPTlN0cmluZygpOwotICAgIGluamVjdGVkU2NyaXB0LmNhbGxGdW5jdGlvbk9uKGVycm9y
U3RyaW5nLCBvYmplY3RJZCwgZXhwcmVzc2lvbiwgYXJndW1lbnRzLCBhc0Jvb2wocmV0dXJuQnlW
YWx1ZSksIHJlc3VsdCwgd2FzVGhyb3duKTsKKyAgICBpbmplY3RlZFNjcmlwdC5jYWxsRnVuY3Rp
b25PbihlcnJvclN0cmluZywgb2JqZWN0SWQsIGV4cHJlc3Npb24sIGFyZ3VtZW50cywgYXNCb29s
KHJldHVybkJ5VmFsdWUpLCAmcmVzdWx0LCB3YXNUaHJvd24pOwogfQogCi12b2lkIEluc3BlY3Rv
clJ1bnRpbWVBZ2VudDo6Z2V0UHJvcGVydGllcyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IGJvb2wqIGNvbnN0IG93blByb3BlcnRpZXMsIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50
OjpnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBv
YmplY3RJZCwgY29uc3QgYm9vbCogY29uc3Qgb3duUHJvcGVydGllcywgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiYgcmVzdWx0KQogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0g
bV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0
SWQpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKICAgICAgICAgKmVy
cm9yU3RyaW5nID0gIkluc3BlY3RlZCBmcmFtZSBoYXMgZ29uZSI7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgaW5qZWN0ZWRTY3JpcHQuZ2V0UHJvcGVydGllcyhlcnJvclN0cmluZywgb2Jq
ZWN0SWQsIG93blByb3BlcnRpZXMgPyAqb3duUHJvcGVydGllcyA6IGZhbHNlLCByZXN1bHQpOwor
ICAgIGluamVjdGVkU2NyaXB0LmdldFByb3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBv
d25Qcm9wZXJ0aWVzID8gKm93blByb3BlcnRpZXMgOiBmYWxzZSwgJnJlc3VsdCk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpyZWxlYXNlT2JqZWN0KEVycm9yU3RyaW5nKiwgY29u
c3QgU3RyaW5nJiBvYmplY3RJZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JSdW50aW1lQWdlbnQuaAppbmRleCA5MTQ1YzZjOGEyMjdlOWVjZTA2OWZlMDdhMmNkN2U4
N2ZlMWIyOGU0Li43OWEyMDJiODlkYTcxM2M5MjM5OGQ2OGQxZjIyMGQzOTM4MDg5YmEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUnVudGltZUFnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCkBA
IC02NCwxNyArNjQsMTcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCog
Y29uc3QgZG9Ob3RQYXVzZU9uRXhjZXB0aW9ucywKICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0
cmluZyogY29uc3QgZnJhbWVJZCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wqIGNvbnN0
IHJldHVybkJ5VmFsdWUsCi0gICAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiogcmVzdWx0LAorICAgICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHJl
c3VsdCwKICAgICAgICAgICAgICAgICAgIGJvb2wqIHdhc1Rocm93bik7CiAgICAgdm9pZCBjYWxs
RnVuY3Rpb25PbihFcnJvclN0cmluZyosCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIG9iamVjdElkLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBl
eHByZXNzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiogY29uc3Qgb3B0aW9uYWxBcmd1bWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBib29sKiBjb25zdCByZXR1cm5CeVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sKiB3YXNUaHJvd24pOwogICAgIHZvaWQgcmVsZWFzZU9iamVjdChFcnJvclN0cmlu
ZyosIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpOwotICAgIHZvaWQgZ2V0UHJvcGVydGllcyhFcnJv
clN0cmluZyosIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IGJvb2wqIGNvbnN0IG93blBy
b3BlcnRpZXMsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJlc3VsdCk7CisgICAgdm9pZCBnZXRQ
cm9wZXJ0aWVzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgYm9v
bCogY29uc3Qgb3duUHJvcGVydGllcywgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgcmVzdWx0KTsK
ICAgICB2b2lkIHJlbGVhc2VPYmplY3RHcm91cChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYg
b2JqZWN0R3JvdXApOwogICAgIHZvaWQgcnVuKEVycm9yU3RyaW5nKik7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>