<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://jogamp.org/bugzilla/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.2"
          urlbase="https://jogamp.org/bugzilla/"
          
          maintainer="sgothel@jausoft.com"
>

    <bug>
          <bug_id>1357</bug_id>
          
          <creation_ts>2017-10-10 17:16:33 +0200</creation_ts>
          <short_desc>Support Mesa 18.2.2 (java.lang.InternalError: profile[1]: GL3bc -&gt; profileImpl GL4bc not mapped)</short_desc>
          <delta_ts>2019-03-29 16:15:18 +0100</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>3</classification_id>
          <classification>JogAmp</classification>
          <product>Jogl</product>
          <component>opengl</component>
          <version>2.4.0</version>
          <rep_platform>pc_x86_64</rep_platform>
          <op_sys>linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>critical</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>gst0098</reporter>
          <assigned_to name="Sven Gothel">sgothel</assigned_to>
          <cc>askinner</cc>
    
    <cc>gouessej</cc>
    
    <cc>gst0098</cc>
          
          <cf_type>DEFECT</cf_type>
          <cf_scm_refs>96cdafe8a32b74fed853110d593521b49448e60d
e6298fa34539fc5bb636fe10e0d4f083719dee64</cf_scm_refs>
          <cf_workaround>---</cf_workaround>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>6052</commentid>
    <comment_count>0</comment_count>
      <attachid>798</attachid>
    <who name="">gst0098</who>
    <bug_when>2017-10-10 17:16:33 +0200</bug_when>
    <thetext>Created attachment 798
Source code to reproduce the bug and log file obtained with: -Dnewt.debug=all -Dnativewindow.debug=all -Djogl.debug=all

With AMD RX590 or RX480 running the program thorws the exception:

Exception in thread &quot;AWT-EventQueue-0&quot; java.lang.InternalError: XXX0 profile[1]: GL3bc -&gt; profileImpl GL4bc !!! not mapped

With recent mesa the naming convention has been changed and now AMD cards are named &quot;AMD&quot; instead of the former name &quot;Gallium&quot;. This cause the bug.

Giuseppe</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6053</commentid>
    <comment_count>1</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2017-10-11 13:46:02 +0200</bug_when>
    <thetext>It seems to occur with Mesa 17.2.1 but not with earlier versions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6054</commentid>
    <comment_count>2</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2017-10-11 13:53:45 +0200</bug_when>
    <thetext>Please can you run glxinfo?
https://dri.freedesktop.org/wiki/glxinfo/

I&apos;ll compare with the result on my machine using an older version of Mesa.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6055</commentid>
    <comment_count>3</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2017-10-11 14:01:31 +0200</bug_when>
    <thetext>Oops, I occurred with Mesa 17.2.0 too but not with Mesa 17.1.5:
http://forum.jogamp.org/Mesa-17-2-0-renderer-driver-name-change-error-causes-GLProfile-not-mapped-initialization-error-td4038176.html

Gallium 0.4 on AMD HAWAII (DRM 3.15.0 / 4.12.12-1-ARCH, LLVM 4.0.1) -&gt; AMD Radeon R9 200 Series (AMD HAWAII / DRM 3.15.0 / 4.12.12-1-ARCH, LLVM 4.0.1)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6056</commentid>
    <comment_count>4</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2017-10-11 14:05:52 +0200</bug_when>
    <thetext>Using GL_VERSION might help as it should contain:
3.1 (3.1 Mesa 17.2.1)

or something like this:

3.3 (Core Profile) Mesa 17.2.1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6057</commentid>
    <comment_count>5</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2017-10-11 14:13:56 +0200</bug_when>
    <thetext>I suggest this change:
final boolean isDriverMesa = glRenderer.contains(MesaSP) || glRenderer.contains(&quot;Gallium &quot;);

-&gt; 

final boolean isDriverMesa = glRenderer.contains(MesaSP) || glRenderer.contains(&quot;Gallium &quot;) || glVersion.contains(MesaSP);

It won&apos;t break non Mesa AMD drivers :) Guiseppe&apos;s second suggestion seems to be viable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6058</commentid>
    <comment_count>6</comment_count>
    <who name="">gst0098</who>
    <bug_when>2017-10-11 14:56:25 +0200</bug_when>
    <thetext>I&apos;m out of office today and tomorrow, if needed I can give the output of glxinfo on friday morning.
I&apos;ll try the fix suggested by Julien and report back result on my environment, I think it will work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6059</commentid>
    <comment_count>7</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2017-10-11 15:25:19 +0200</bug_when>
    <thetext>(In reply to gst0098 from comment #6)
&gt; I&apos;m out of office today and tomorrow, if needed I can give the output of
&gt; glxinfo on friday morning.
&gt; I&apos;ll try the fix suggested by Julien and report back result on my
&gt; environment, I think it will work.

There&apos;s no hurry. Thank you. Feel free to make a pull request (only with this tiny change) against my repository if it works as expected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6060</commentid>
    <comment_count>8</comment_count>
    <who name="">gst0098</who>
    <bug_when>2017-10-13 09:42:50 +0200</bug_when>
    <thetext>Hello,
I tested the patch proposed by Julien and Zeno and it works.

Julien, how can I pull a request against your repo ?

I did the patch on the repo that I cloned with the command: 
git clone --recurse-submodules git://jogamp.org/srv/scm/jogl.git jogl

Giuseppe</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6061</commentid>
    <comment_count>9</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2017-10-13 10:52:09 +0200</bug_when>
    <thetext>(In reply to gst0098 from comment #8)
&gt; Hello,
&gt; I tested the patch proposed by Julien and Zeno and it works.
&gt; 
&gt; Julien, how can I pull a request against your repo ?
&gt; 
&gt; I did the patch on the repo that I cloned with the command: 
&gt; git clone --recurse-submodules git://jogamp.org/srv/scm/jogl.git jogl
&gt; 
&gt; Giuseppe

Maybe it would be easier for you just to post here the git diff. I&apos;ll credit the change to Zeno and you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6062</commentid>
    <comment_count>10</comment_count>
    <who name="">gst0098</who>
    <bug_when>2017-10-13 11:54:44 +0200</bug_when>
    <thetext>Here it is:

diff --git a/src/jogl/classes/jogamp/opengl/GLContextImpl.java b/src/jogl/classes/jogamp/opengl/GLContextImpl.java
index 31a8e489e..c5b3ea8ac 100644
--- a/src/jogl/classes/jogamp/opengl/GLContextImpl.java
+++ b/src/jogl/classes/jogamp/opengl/GLContextImpl.java
@@ -2133,8 +2133,7 @@ public abstract class GLContextImpl extends GLContext {
     final boolean isES = 0 != ( ctp &amp; GLContext.CTX_PROFILE_ES );
     final boolean isX11 = NativeWindowFactory.TYPE_X11 == NativeWindowFactory.getNativeWindowType(true);
     final boolean isWindows = Platform.getOSType() == Platform.OSType.WINDOWS;
-    final boolean isDriverMesa = glRenderer.contains(MesaSP) || glRenderer.contains(&quot;Gallium &quot;);
-
+    final boolean isDriverMesa = glRenderer.contains(MesaSP) || glRenderer.contains(&quot;Gallium &quot;) || glVersion.contains(MesaSP);
     final boolean isDriverATICatalyst;
     final boolean isDriverNVIDIAGeForce;
     final boolean isDriverIntel;

Thank you,
Giuseppe</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6073</commentid>
    <comment_count>11</comment_count>
      <attachid>799</attachid>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2018-02-20 12:00:06 +0100</bug_when>
    <thetext>Created attachment 799
Patched version of GLContextImpl

I&apos;ve just patched GLContextImpl with JByteMod available at https://grax.info</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6077</commentid>
    <comment_count>12</comment_count>
    <who name="Andy Skinner">askinner</who>
    <bug_when>2018-04-27 14:34:40 +0200</bug_when>
    <thetext>Is this being put into JOGL?  It appears from comments that you have a fix, but maybe it has only been put into a patched version of the source file?

thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6078</commentid>
    <comment_count>13</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2018-04-27 14:50:26 +0200</bug_when>
    <thetext>(In reply to Andy Skinner from comment #12)
&gt; Is this being put into JOGL?  It appears from comments that you have a fix,
&gt; but maybe it has only been put into a patched version of the source file?
&gt; 
&gt; thanks

http://forum.jogamp.org/how-can-I-build-jogl-2-3-3-and-when-is-it-due-for-release-tp4038662p4038675.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6083</commentid>
    <comment_count>14</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2018-12-22 01:05:44 +0100</bug_when>
    <thetext>The suggested patch causes a regression on AMD Mullins and AMD Cedar whereas it&apos;s required for AMD POLARIS (10, 11, ...). I suggest this change:
final boolean isDriverMesa = glRenderer.contains(MesaSP) || glRenderer.contains(&quot;Gallium &quot;) || (glVersion.contains(MesaSP) &amp;&amp; glRenderer.contains(&quot;POLARIS&quot;));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6093</commentid>
    <comment_count>15</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2019-03-21 09:51:43 +0100</bug_when>
    <thetext>Rather do this:
final boolean isDriverMesa = glRenderer.contains(MesaSP) || glRenderer.contains(&quot;Gallium &quot;) || (glVersion.contains(MesaSP) &amp;&amp; glRenderer.contains(&quot;POLARIS&quot;));

as I suggested here:
https://github.com/sgothel/jogl/pull/105#issuecomment-449527037</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6094</commentid>
    <comment_count>16</comment_count>
      <attachid>802</attachid>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2019-03-24 20:54:12 +0100</bug_when>
    <thetext>Created attachment 802
Patched version of GLContextImpl

Takes into account neilcsmith-net&apos;s remark on Mesa 18.2.2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6095</commentid>
    <comment_count>17</comment_count>
      <attachid>803</attachid>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2019-03-24 20:55:05 +0100</bug_when>
    <thetext>Created attachment 803
Diff of GLContextImpl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6096</commentid>
    <comment_count>18</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2019-03-25 15:33:01 +0100</bug_when>
    <thetext>Merged pull request #105 from serebit/patch-1 96cdafe8a32b74fed853110d593521b49448e60d

and committed Julien&apos;s patch attachment 803 as e6298fa34539fc5bb636fe10e0d4f083719dee64

&quot;Bug 1357 Related: GLRendererQuirks NoSetSwapIntervalPostRetarget and NoDoubleBufferedPBuffer no more required for Mesa &gt;= 18.2.2&quot;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>798</attachid>
            <date>2017-10-10 17:16:33 +0200</date>
            <delta_ts>2017-10-10 17:16:33 +0200</delta_ts>
            <desc>Source code to reproduce the bug and log file obtained with: -Dnewt.debug=all -Dnativewindow.debug=all -Djogl.debug=all</desc>
            <filename>TESTGL.tgz</filename>
            <type>application/x-compressed-tar</type>
            <size>12735</size>
            <attacher>gst0098</attacher>
            
              <data encoding="base64">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
LxkFo2AUjIJRMApGAYUAACd/SpQAuAEA
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>799</attachid>
            <date>2018-02-20 12:00:06 +0100</date>
            <delta_ts>2019-03-24 20:54:12 +0100</delta_ts>
            <desc>Patched version of GLContextImpl</desc>
            <filename>GLContextImpl.class</filename>
            <type>application/x-java</type>
            <size>55077</size>
            <attacher name="Julien Gouesse">gouessej</attacher>
            
              <data encoding="base64">yv66vgAAADIG6wEAG2pvZ2FtcC9vcGVuZ2wvR0xDb250ZXh0SW1wbAcAAQEAG2NvbS9qb2dhbXAv
b3BlbmdsL0dMQ29udGV4dAcAAwEAEkdMQ29udGV4dEltcGwuamF2YQEAM2pvZ2FtcC9vcGVuZ2wv
R0xDb250ZXh0SW1wbCRNYXBwZWRHTFZlcnNpb25MaXN0ZW5lcgcABgEAF01hcHBlZEdMVmVyc2lv
bkxpc3RlbmVyAQAram9nYW1wL29wZW5nbC9HTENvbnRleHRJbXBsJE1hcHBlZEdMVmVyc2lvbgcA
CQEAD01hcHBlZEdMVmVyc2lvbgEAHWpvZ2FtcC9vcGVuZ2wvR0xDb250ZXh0SW1wbCQzBwAMAQAd
am9nYW1wL29wZW5nbC9HTENvbnRleHRJbXBsJDIHAA4BAB1qb2dhbXAvb3BlbmdsL0dMQ29udGV4
dEltcGwkMQcAEAEAOWpvZ2FtcC9vcGVuZ2wvR0xEZWJ1Z01lc3NhZ2VIYW5kbGVyJFN0ZEVyckdM
RGVidWdMaXN0ZW5lcgcAEgEAI2pvZ2FtcC9vcGVuZ2wvR0xEZWJ1Z01lc3NhZ2VIYW5kbGVyBwAU
AQAVU3RkRXJyR0xEZWJ1Z0xpc3RlbmVyAQAkY29tL2pvZ2FtcC9jb21tb24vb3MvUGxhdGZvcm0k
T1NUeXBlBwAXAQAdY29tL2pvZ2FtcC9jb21tb24vb3MvUGxhdGZvcm0HABkBAAZPU1R5cGUBAC1q
b2dhbXAvY29tbW9uL29zL1BsYXRmb3JtUHJvcHNJbXBsJE9TWFZlcnNpb24HABwBACJqb2dhbXAv
Y29tbW9uL29zL1BsYXRmb3JtUHJvcHNJbXBsBwAeAQAKT1NYVmVyc2lvbgEACmNvbnRleHRGUU4B
ABJMamF2YS9sYW5nL1N0cmluZzsBABphZGRpdGlvbmFsQ3R4Q3JlYXRpb25GbGFncwEAAUkBABVl
eHRlbnNpb25BdmFpbGFiaWxpdHkBACpMam9nYW1wL29wZW5nbC9FeHRlbnNpb25BdmFpbGFiaWxp
dHlDYWNoZTsBABJnbFByb2NBZGRyZXNzVGFibGUBAC1MY29tL2pvZ2FtcC9nbHVlZ2VuL3J1bnRp
bWUvUHJvY0FkZHJlc3NUYWJsZTsBAAhnbFZlbmRvcgEACmdsUmVuZGVyZXIBABNnbFJlbmRlcmVy
TG93ZXJDYXNlAQAJZ2xWZXJzaW9uAQAMZ2xHZXRQdHJJbml0AQABWgEADmdsR2V0U3RyaW5nUHRy
AQABSgEAEGdsR2V0SW50ZWdlcnZQdHIBABNidWZmZXJPYmplY3RUcmFja2VyAQAlTGpvZ2FtcC9v
cGVuZ2wvR0xCdWZmZXJPYmplY3RUcmFja2VyOwEAEmJ1ZmZlclN0YXRlVHJhY2tlcgEAJExqb2dh
bXAvb3BlbmdsL0dMQnVmZmVyU3RhdGVUcmFja2VyOwEADmdsU3RhdGVUcmFja2VyAQAeTGpvZ2Ft
cC9vcGVuZ2wvR0xTdGF0ZVRyYWNrZXI7AQAOZ2xEZWJ1Z0hhbmRsZXIBACVMam9nYW1wL29wZW5n
bC9HTERlYnVnTWVzc2FnZUhhbmRsZXI7AQAOYm91bmRGQk9UYXJnZXQBAAJbSQEACmRlZmF1bHRW
QU8BAAhkcmF3YWJsZQEAHkxqb2dhbXAvb3BlbmdsL0dMRHJhd2FibGVJbXBsOwEADGRyYXdhYmxl
UmVhZAEADWlzU3VyZmFjZWxlc3MBABJwaXhlbERhdGFFdmFsdWF0ZWQBAA9waXhlbERhdGFGb3Jt
YXQBAA1waXhlbERhdGFUeXBlAQATY3VycmVudFN3YXBJbnRlcnZhbAEAAmdsAQAWTGNvbS9qb2dh
bXAvb3BlbmdsL0dMOwEAG21hcHBlZENvbnRleHRUeXBlT2JqZWN0TG9jawEAEkxqYXZhL2xhbmcv
T2JqZWN0OwEAIG1hcHBlZEV4dGVuc2lvbkF2YWlsYWJpbGl0eUNhY2hlAQATTGphdmEvdXRpbC9I
YXNoTWFwOwEAUUxqYXZhL3V0aWwvSGFzaE1hcDxMamF2YS9sYW5nL1N0cmluZztMam9nYW1wL29w
ZW5nbC9FeHRlbnNpb25BdmFpbGFiaWxpdHlDYWNoZTs+OwEAE21hcHBlZEdMUHJvY0FkZHJlc3MB
AFRMamF2YS91dGlsL0hhc2hNYXA8TGphdmEvbGFuZy9TdHJpbmc7TGNvbS9qb2dhbXAvZ2x1ZWdl
bi9ydW50aW1lL1Byb2NBZGRyZXNzVGFibGU7PjsBABRtYXBwZWRHTFhQcm9jQWRkcmVzcwEAE2xh
c3RDdHhSZWxlYXNlU3RhY2sBABVMamF2YS9sYW5nL1Rocm93YWJsZTsBABRtYXBHTFZlcnNpb25M
aXN0ZW5lcgEANUxqb2dhbXAvb3BlbmdsL0dMQ29udGV4dEltcGwkTWFwcGVkR0xWZXJzaW9uTGlz
dGVuZXI7AQAMc2h1dGRvd25JbXBsAQADKClWDABJAEoJAAIAVQEAEWphdmEvdXRpbC9IYXNoTWFw
BwBXAQAFY2xlYXIMAFkAVAoAWABaDABMAEoJAAIAXAwATgBKCQACAF4BAAY8aW5pdD4BAD4oTGpv
Z2FtcC9vcGVuZ2wvR0xEcmF3YWJsZUltcGw7TGNvbS9qb2dhbXAvb3BlbmdsL0dMQ29udGV4dDsp
VgwAYABUCgAEAGIMAC0ALgkAAgBkDAAvADAJAAIAZgwAMQAwCQACAGgBABxqb2dhbXAvb3Blbmds
L0dMU3RhdGVUcmFja2VyBwBqCgBrAGIMADYANwkAAgBtDAA4ADkJAAIAbwwAOgA7CQACAHEMADwA
JAkAAgBzDABAAC4JAAIAdQwATwBQCQACAHcBACJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhj
ZXB0aW9uBwB5AQANTnVsbCBkcmF3YWJsZQgAewEAFShMamF2YS9sYW5nL1N0cmluZzspVgwAYAB9
CgB6AH4BABxqb2dhbXAvb3BlbmdsL0dMRHJhd2FibGVJbXBsBwCAAQAiam9nYW1wL29wZW5nbC9H
TEJ1ZmZlclN0YXRlVHJhY2tlcgcAggoAgwBiDAA0ADUJAAIAhQEAH2pvZ2FtcC9vcGVuZ2wvR0xD
b250ZXh0U2hhcmVTZXQHAIcBAA9yZWdpc3RlclNoYXJpbmcBAD0oTGNvbS9qb2dhbXAvb3Blbmds
L0dMQ29udGV4dDtMY29tL2pvZ2FtcC9vcGVuZ2wvR0xDb250ZXh0OylWDACJAIoKAIgAiwEAFmdl
dEJ1ZmZlck9iamVjdFRyYWNrZXIBACcoKUxqb2dhbXAvb3BlbmdsL0dMQnVmZmVyT2JqZWN0VHJh
Y2tlcjsMAI0AjgoAAgCPDAAyADMJAAIAkQEAF2phdmEvbGFuZy9JbnRlcm5hbEVycm9yBwCTAQAX
amF2YS9sYW5nL1N0cmluZ0J1aWxkZXIHAJUKAJYAYgEAN3NoYXJlZC1tYXN0ZXIgY29udGV4dCBo
YXNoIG51bGwgR0xCdWZmZXJPYmplY3RUcmFja2VyOiAIAJgBAAZhcHBlbmQBAC0oTGphdmEvbGFu
Zy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsMAJoAmwoAlgCcAQAQamF2YS9sYW5n
L09iamVjdAcAngEACGhhc2hDb2RlAQADKClJDACgAKEKAJ8AogEAC3RvSGV4U3RyaW5nAQAVKEkp
TGphdmEvbGFuZy9TdHJpbmc7DACkAKUKAAIApgEACHRvU3RyaW5nAQAUKClMamF2YS9sYW5nL1N0
cmluZzsMAKgAqQoAlgCqCgCUAH4BACNqb2dhbXAvb3BlbmdsL0dMQnVmZmVyT2JqZWN0VHJhY2tl
cgcArQoArgBiDAA9AD4JAAIAsAwAPwA+CQACALIBACAoTGpvZ2FtcC9vcGVuZ2wvR0xDb250ZXh0
SW1wbDspVgwAYAC0CgAVALUBAAtjbGVhclN0YXRlcwEAFGhhc0NyZWF0ZWRTaGFyZWRMZWZ0AQAg
KExjb20vam9nYW1wL29wZW5nbC9HTENvbnRleHQ7KVoMALgAuQoAiAC6CgCuAFoKAIMAWgEACnNl
dEVuYWJsZWQBAAQoWilWDAC+AL8KAGsAwAwAtwBUCgBrAMIBAAtyZXNldFN0YXRlcwoAAgDCDAAl
ACYJAAIAxgwAJwAoCQACAMgMAEUARgkAAgDKDAAhACIJAAIAzAwAIwAkCQACAM4BAAAIANAMACkA
IgkAAgDSDAAqACIJAAIA1AwAKwAiCQACANYMACwAIgkAAgDYDABBAC4JAAIA2gwARAAkCQACANwM
AMQAvwoABADeAQARc2V0R0xSZWFkRHJhd2FibGUBAD4oTGNvbS9qb2dhbXAvb3BlbmdsL0dMRHJh
d2FibGU7KUxjb20vam9nYW1wL29wZW5nbC9HTERyYXdhYmxlOwEAGWlzR0xSZWFkRHJhd2FibGVB
dmFpbGFibGUBAAMoKVoMAOIA4woAAgDkAQAdY29tL2pvZ2FtcC9vcGVuZ2wvR0xFeGNlcHRpb24H
AOYBACtTZXR0aW5nIHJlYWQgZHJhd2FibGUgZmVhdHVyZSBub3QgYXZhaWxhYmxlCADoCgDnAH4B
ABBqYXZhL2xhbmcvVGhyZWFkBwDrAQANY3VycmVudFRocmVhZAEAFCgpTGphdmEvbGFuZy9UaHJl
YWQ7DADtAO4KAOwA7wEABGxvY2sBACxMY29tL2pvZ2FtcC9jb21tb24vdXRpbC9sb2Nrcy9SZWN1
cnNpdmVMb2NrOwwA8QDyCQACAPMBACpjb20vam9nYW1wL2NvbW1vbi91dGlsL2xvY2tzL1JlY3Vy
c2l2ZUxvY2sHAPUBABVpc0xvY2tlZEJ5T3RoZXJUaHJlYWQMAPcA4wsA9gD4AQAiR0xDb250ZXh0
IGN1cnJlbnQgYnkgb3RoZXIgdGhyZWFkIAgA+gEACGdldE93bmVyDAD8AO4LAPYA/QEAB2dldE5h
bWUMAP8AqQoA7AEAAQAnLCBvcGVyYXRpb24gbm90IGFsbG93ZWQgb24gdGhpcyB0aHJlYWQgCAEC
AQAHaXNPd25lcgEAFShMamF2YS9sYW5nL1RocmVhZDspWgwBBAEFCwD2AQYBAAxnZXRIb2xkQ291
bnQMAQgAoQsA9gEJAQBDR0xDb250ZXh0IGlzIHJlY3Vyc2l2ZWx5IGxvY2tlZCAtIHVuc3VwcG9y
dGVkIGZvciBzZXRHTERyYXdhYmxlKC4uKQgBCwEAB3JlbGVhc2UMAQ0AvwoAAgEOAQAcY29tL2pv
Z2FtcC9vcGVuZ2wvR0xEcmF3YWJsZQcBEAEAC21ha2VDdXJyZW50DAESAKEKAAIBEwEAEWdldEdM
UmVhZERyYXdhYmxlAQAgKClMY29tL2pvZ2FtcC9vcGVuZ2wvR0xEcmF3YWJsZTsBAA1zZXRHTERy
YXdhYmxlAQA/KExjb20vam9nYW1wL29wZW5nbC9HTERyYXdhYmxlO1opTGNvbS9qb2dhbXAvb3Bl
bmdsL0dMRHJhd2FibGU7AQATamF2YS9sYW5nL1Rocm93YWJsZQcBGQEACWlzQ3JlYXRlZAwBGwDj
CgACARwBAAppc1JlYWxpemVkDAEeAOMKAIEBHwEAFGNvbS9qb2dhbXAvb3BlbmdsL0dMBwEhAQAI
Z2xGaW5pc2gMASMAVAsBIgEkAQARYXNzb2NpYXRlRHJhd2FibGUMASYAvwoAAgEnAQASZHJhd2Fi
bGVSZXRhcmdldGVkDAEpAC4JAAIBKgEABChaKUkMARIBLAoAAgEtAQAuRXJyb3I6IG1ha2VDdXJy
ZW50KCkgZmFpbGVkIHdpdGggbmV3IGRyYXdhYmxlIAgBLwEALShMamF2YS9sYW5nL09iamVjdDsp
TGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOwwAmgExCgCWATIBACooTGphdmEvbGFuZy9TdHJpbmc7
TGphdmEvbGFuZy9UaHJvd2FibGU7KVYMAGABNAoA5wE1AQAQamF2YS9sYW5nL1N0cmluZwcBNwEA
DWdldEdMRHJhd2FibGUBAA9nZXREcmF3YWJsZUltcGwBACAoKUxqb2dhbXAvb3BlbmdsL0dMRHJh
d2FibGVJbXBsOwEACWdldFJvb3RHTAEAGCgpTGNvbS9qb2dhbXAvb3BlbmdsL0dMOwEAD2dldERv
d25zdHJlYW1HTAwBPgE9CwEiAT8BAAVnZXRHTAEABXNldEdMAQAuKExjb20vam9nYW1wL29wZW5n
bC9HTDspTGNvbS9qb2dhbXAvb3BlbmdsL0dMOwEABURFQlVHDAFEAC4JAAIBRQEACGdldENsYXNz
AQATKClMamF2YS9sYW5nL0NsYXNzOwwBRwFICgCfAUkBAA9qYXZhL2xhbmcvQ2xhc3MHAUsBAA1n
ZXRTaW1wbGVOYW1lDAFNAKkKAUwBTgEAAiwgCAFQCgCfAKoBAAY8bnVsbD4IAVMBABBqYXZhL2xh
bmcvU3lzdGVtBwFVAQADZXJyAQAVTGphdmEvaW8vUHJpbnRTdHJlYW07DAFXAVgJAVYBWQEAFElu
Zm86IHNldEdMIChPcGVuR0wgCAFbAQAMZ2V0R0xWZXJzaW9uDAFdAKkKAAIBXgEAAyk6IAgBYAEA
DWdldFRocmVhZE5hbWUMAWIAqQoAAgFjAQAEIC0+IAgBZQEAE2phdmEvaW8vUHJpbnRTdHJlYW0H
AWcBAAdwcmludGxuDAFpAH0KAWgBagEAIGNvbS9qb2dhbXAvY29tbW9uL0V4Y2VwdGlvblV0aWxz
BwFsAQAJZHVtcFN0YWNrAQAYKExqYXZhL2lvL1ByaW50U3RyZWFtOylWDAFuAW8KAW0BcAEADWdl
dERlZmF1bHRWQU8BABVkcmF3YWJsZVVwZGF0ZWROb3RpZnkBABdnZXRQbGF0Zm9ybUdMRXh0ZW5z
aW9ucwEAFCgpTGphdmEvbGFuZy9PYmplY3Q7AQARZ2V0VHJhY2VTd2l0Y2hNc2cBAAlnZXRIYW5k
bGUBAAMoKUoMAXcBeAoAgQF5AQAEb2JqIAgBewEABiwgY3R4IAgBfQEADWNvbnRleHRIYW5kbGUM
AX8AMAkAAgGAAQAVKEopTGphdmEvbGFuZy9TdHJpbmc7DACkAYIKAAIBgwEACywgaXNTaGFyZWQg
CAGFAQAIaXNTaGFyZWQMAYcAuQoAiAGIAQAcKFopTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOwwA
mgGKCgCWAYsBAAcsIHN1cmYgCAGNAQABIAgBjwEADFRSQUNFX1NXSVRDSAwBkQAuCQACAZIBADQ6
IEdMQ29udGV4dC5Db250ZXh0U3dpdGNoW3JlbGVhc2UuMCwgaW5EZXN0cnVjdGlvbjogCAGUAQAD
XTogCAGWDAF2AKkKAAIBmAEAMDogQ29udGV4dCBub3QgY3VycmVudCBvbiB0aHJlYWQsIGluRGVz
dHJ1Y3Rpb246IAgBmgEAEkRFQlVHX1RSQUNFX1NXSVRDSAwBnAAuCQACAZ0BABNMYXN0IHJlbGVh
c2UgY2FsbDogCAGfAQAFcHJpbnQMAaEAfQoBaAGiAQAPcHJpbnRTdGFja1RyYWNlDAGkAFQKARoB
pQEAF0xhc3QgcmVsZWFzZSBjYWxsOiBOT05FCAGnAQASY29udGV4dE1hZGVDdXJyZW50DAGpAL8K
AAIBqgEAC3JlbGVhc2VJbXBsDAGsAFQKAAIBrQEACnNldEN1cnJlbnQBACAoTGNvbS9qb2dhbXAv
b3BlbmdsL0dMQ29udGV4dDspVgwBrwGwCgACAbEBAAZ1bmxvY2sMAbMAVAsA9gG0AQANdW5sb2Nr
U3VyZmFjZQwBtgBUCgCBAbcBACY6IEdMQ29udGV4dC5Db250ZXh0U3dpdGNoW3JlbGVhc2UuWF06
IAgBuQEABnN3aXRjaAgBuwEABmtlZXAgIAgBvQEAAyAtIAgBvwoBGgB+AQBOR0xDb250ZXh0LnJl
bGVhc2UoZmFsc2UpIGR1cmluZyBHTERyYXdhYmxlSW1wbC5jb250ZXh0TWFkZUN1cnJlbnQodGhp
cywgZmFsc2UpCAHCAQAHZGVzdHJveQEAGzogR0xDb250ZXh0SW1wbC5kZXN0cm95LjA6IAgBxQEA
KEdMQ29udGV4dCBjcmVhdGVkIGJ1dCBkcmF3YWJsZSBpcyBudWxsOiAIAccKAAIAqgEAC2xvY2tT
dXJmYWNlDAHKAKEKAIEBywEAG1N1cmZhY2Ugbm90IHJlYWR5IHRvIGxvY2s6IAgBzQEALUdMQ29u
dGV4dCBjcmVhdGVkIGJ1dCBkcmF3YWJsZSBub3QgcmVhbGl6ZWQ6IAgBzwwA8QBUCwD2AdEBAFc6
IEdMQ29udGV4dEltcGwuZGVzdHJveTogTG9jayB3YXMgaG9sZCBtb3JlIHRoYW4gb25jZSAtIG1h
a2VDdXJyZW50L3JlbGVhc2UgaW1iYWxhbmNlOiAIAdMBACBHTENvbnRleHQubWFrZUN1cnJlbnQo
KSBmYWlsZWQ6IAgB1QwBPAE9CwEiAdcBAAlnZXRHTDJFUzMBABwoKUxjb20vam9nYW1wL29wZW5n
bC9HTDJFUzM7DAHZAdoLASIB2wEAGGNvbS9qb2dhbXAvb3BlbmdsL0dMMkVTMwcB3QEAEWdsQmlu
ZFZlcnRleEFycmF5AQAEKEkpVgwB3wHgCwHeAeEBABRnbERlbGV0ZVZlcnRleEFycmF5cwEAByhJ
W0lJKVYMAeMB5AsB3gHlAQAGZW5hYmxlDAHnAL8KABUB6AEAC2Rlc3Ryb3lJbXBsDAHqAFQKAAIB
6wEAEGNvbnRleHREZXN0cm95ZWQMAe0AuQoAiAHuAQARdW5yZWdpc3RlclNoYXJpbmcMAfABsAoA
iAHxCgACAN4BABs6IEdMQ29udGV4dEltcGwuZGVzdHJveS5YOiAIAfQBAC5FeGNlcHRpb24gQCBk
ZXN0cm95J3MgYXNzb2NpYXRlRHJhd2FibGUoZmFsc2UpCAH2AQAEY29weQEAIShMY29tL2pvZ2Ft
cC9vcGVuZ2wvR0xDb250ZXh0O0kpVgoABAF5AQAqU291cmNlIE9wZW5HTCBjb250ZXh0IGhhcyBu
b3QgYmVlbiBjcmVhdGVkCAH7CgACAXkBAC9EZXN0aW5hdGlvbiBPcGVuR0wgY29udGV4dCBoYXMg
bm90IGJlZW4gY3JlYXRlZAgB/gEAGVN1cmZhY2Ugbm90IHJlYWR5IHRvIGxvY2sIAgABAAhjb3B5
SW1wbAwCAgH5CgACAgMBABpqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbgcCBQEAKjogR0xDb250
ZXh0LkNvbnRleHRTd2l0Y2hbbWFrZUN1cnJlbnQuMF06IAgCBwEAUTogR0xDb250ZXh0LkNvbnRl
eHRTd2l0Y2hbbWFrZUN1cnJlbnQuWDBdOiBOVUxMIERyYXdhYmxlIC0gQ09OVEVYVF9OT1RfQ1VS
UkVOVCAtIAgCCQEAVTogR0xDb250ZXh0LkNvbnRleHRTd2l0Y2hbbWFrZUN1cnJlbnQuWDFdOiBT
dXJmYWNlIE5vdCBSZWFkeSAtIENPTlRFWFRfTk9UX0NVUlJFTlQgLSAIAgsBAC06IEdMQ29udGV4
dC5tYWtlQ3VycmVudDogU3VyZmFjZWxlc3MgZXZhbHVhdGUIAg0BABBoYXNSZW5kZXJlclF1aXJr
AQAEKEkpWgwCDwIQCgACAhEBAC1TdXJmYWNlbGVzcyBub3Qgc3VwcG9ydGVkIGR1ZSB0byBxdWly
ayAlczogJXMIAhMBACJjb20vam9nYW1wL29wZW5nbC9HTFJlbmRlcmVyUXVpcmtzBwIVDACoAKUK
AhYCFwEABmZvcm1hdAEAOShMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9PYmplY3Q7KUxq
YXZhL2xhbmcvU3RyaW5nOwwCGQIaCgE4AhsBABBnZXROYXRpdmVTdXJmYWNlAQApKClMY29tL2pv
Z2FtcC9uYXRpdmV3aW5kb3cvTmF0aXZlU3VyZmFjZTsMAh0CHgoAgQIfAQAkY29tL2pvZ2FtcC9u
YXRpdmV3aW5kb3cvUHJveHlTdXJmYWNlBwIhAQAaY29udGFpbnNVcHN0cmVhbU9wdGlvbkJpdHMM
AiMCEAsCIgIkAQAlY29tL2pvZ2FtcC9uYXRpdmV3aW5kb3cvTmF0aXZlU3VyZmFjZQcCJgEALG5v
bi1zdXJmYWNlbGVzcyBkcmF3YWJsZSBoYXMgemVyby1oYW5kbGU6ICVzCAIoCgCBAKoBAApnZXRD
dXJyZW50AQAfKClMY29tL2pvZ2FtcC9vcGVuZ2wvR0xDb250ZXh0OwwCKwIsCgACAi0MAXMAVAoA
AgIvAQBEOiBHTENvbnRleHQuQ29udGV4dFN3aXRjaFttYWtlQ3VycmVudC5YMl06IEtFRVAgLSBD
T05URVhUX0NVUlJFTlQgLSAIAjEBAFI6IEdMQ29udGV4dC5Db250ZXh0U3dpdGNoW21ha2VDdXJy
ZW50LjFdOiBDb250ZXh0IGxvY2sudW5sb2NrKCkgZHVlIHRvIGVycm9yLCByZXMgCAIzAQAZbWFr
ZUN1cnJlbnRSZXN1bHRUb1N0cmluZwwCNQClCgACAjYMAQ0AVAoABAI4AQAVbWFrZUN1cnJlbnRX
aXRoaW5Mb2NrAQAEKEkpSQwCOgI7CgACAjwBADM6IEdMQ29udGV4dC5tYWtlQ3VycmVudDogU3Vy
ZmFjZWxlc3MgT0sgLSB2YWxpZGF0ZWQIAj4BABBpc0dMRGVidWdFbmFibGVkDAJAAOMKAAICQQEA
BGluaXQMAkMAvwoAFQJEAQAIREVCVUdfR0wMAkYALgkAAgJHAQAXY29tLmpvZ2FtcC5vcGVuZ2wu
RGVidWcIAkkBACNjb20vam9nYW1wL29wZW5nbC9HTFBpcGVsaW5lRmFjdG9yeQcCSwEABmNyZWF0
ZQEAZChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0NsYXNzO0xjb20vam9nYW1wL29wZW5n
bC9HTDtbTGphdmEvbGFuZy9PYmplY3Q7KUxjb20vam9nYW1wL29wZW5nbC9HTDsMAk0CTgoCTAJP
DAFCAUMKAAICUQEACWlzRW5hYmxlZAwCUwDjCgAVAlQMAGAAvwoAEwJWAQALYWRkTGlzdGVuZXIB
ACYoTGNvbS9qb2dhbXAvb3BlbmdsL0dMRGVidWdMaXN0ZW5lcjspVgwCWAJZCgAVAloBAAhUUkFD
RV9HTAwCXAAuCQACAl0BABdjb20uam9nYW1wLm9wZW5nbC5UcmFjZQgCXwEANDogR0xDb250ZXh0
LkNvbnRleHRTd2l0Y2hbbWFrZUN1cnJlbnQuWDNdOiBTV0lUQ0ggLSAIAmEBABMgLSBzdGF0ZVRy
YWNrZXIub24gCAJjCgBrAlQBABRnZXRPdGhlclNoYXJlZE1hc3RlcgEAHygpTGpvZ2FtcC9vcGVu
Z2wvR0xDb250ZXh0SW1wbDsBAA9nZXRTaGFyZWRNYXN0ZXIBADwoTGNvbS9qb2dhbXAvb3Blbmds
L0dMQ29udGV4dDspTGNvbS9qb2dhbXAvb3BlbmdsL0dMQ29udGV4dDsMAmgCaQoAiAJqAQAPZ2V0
U3VyZmFjZVdpZHRoDAJsAKEKAIECbQEAEGdldFN1cmZhY2VIZWlnaHQMAm8AoQoAgQJwAQA1OiBD
cmVhdGUgR0wgY29udGV4dCBSRUpFQ1RFRCAoemVybyBzdXJmYWNlIHNpemUpIGZvciAIAnIKAUwB
AAwCZgJnCgACAnUBADdHTENvbnRleHRTaGFyZVNldCBjb3VsZCBub3QgbG9jayBzaGFyZWRNYXN0
ZXIgc3VyZmFjZTogCAJ3AQA8R0xDb250ZXh0U2hhcmVTZXQgcmV0dXJuZWQgYW4gaW52YWxpZCBz
aGFyZWRNYXN0ZXIgY29udGV4dDogCAJ5AQAKY3JlYXRlSW1wbAEABChKKVoMAnsCfAoAAgJ9AQAP
aGFzTm9EZWZhdWx0VkFPDAJ/AOMKAAICgAEAEWdsR2VuVmVydGV4QXJyYXlzDAKCAeQLAd4CgwEA
FDogQ3JlYXRlIEdMIGNvbnRleHQgCAKFAQACT0sIAocBAAZGQUlMRUQIAokBAAY6IEZvciAIAosB
ABhnZXRHcmFwaGljc0NvbmZpZ3VyYXRpb24BADkoKUxjb20vam9nYW1wL25hdGl2ZXdpbmRvdy9B
YnN0cmFjdEdyYXBoaWNzQ29uZmlndXJhdGlvbjsMAo0CjgsCJwKPAQA1Y29tL2pvZ2FtcC9uYXRp
dmV3aW5kb3cvQWJzdHJhY3RHcmFwaGljc0NvbmZpZ3VyYXRpb24HApEBAAlnZXRTY3JlZW4BADIo
KUxjb20vam9nYW1wL25hdGl2ZXdpbmRvdy9BYnN0cmFjdEdyYXBoaWNzU2NyZWVuOwwCkwKUCwKS
ApUBAC5jb20vam9nYW1wL25hdGl2ZXdpbmRvdy9BYnN0cmFjdEdyYXBoaWNzU2NyZWVuBwKXAQAJ
Z2V0RGV2aWNlAQAyKClMY29tL2pvZ2FtcC9uYXRpdmV3aW5kb3cvQWJzdHJhY3RHcmFwaGljc0Rl
dmljZTsMApkCmgsCmAKbAQAZZ2V0QXZhaWxhYmxlR0xWZXJzaW9uc1NldAEAMyhMY29tL2pvZ2Ft
cC9uYXRpdmV3aW5kb3cvQWJzdHJhY3RHcmFwaGljc0RldmljZTspWgwCnQKeCgAEAp8BAApjdHhP
cHRpb25zDAKhACQJAAICogEACmN0eFZlcnNpb24BACZMY29tL2pvZ2FtcC9jb21tb24vdXRpbC9W
ZXJzaW9uTnVtYmVyOwwCpAKlCQACAqYBAApWZXJzaW9uM18wDAKoAqUJAAICqQEAJGNvbS9qb2dh
bXAvY29tbW9uL3V0aWwvVmVyc2lvbk51bWJlcgcCqwEACWNvbXBhcmVUbwEAKShMY29tL2pvZ2Ft
cC9jb21tb24vdXRpbC9WZXJzaW9uTnVtYmVyOylJDAKtAq4KAqwCrwEALmNvbS9qb2dhbXAvbmF0
aXZld2luZG93L0Fic3RyYWN0R3JhcGhpY3NEZXZpY2UHArEBAAhnZXRNYWpvcgwCswChCgKsArQB
ABBnbFJlbmRlcmVyUXVpcmtzAQAkTGNvbS9qb2dhbXAvb3BlbmdsL0dMUmVuZGVyZXJRdWlya3M7
DAK2ArcJAAICuAEAFW1hcEF2YWlsYWJsZUdMVmVyc2lvbgEArChMY29tL2pvZ2FtcC9uYXRpdmV3
aW5kb3cvQWJzdHJhY3RHcmFwaGljc0RldmljZTtJSUxjb20vam9nYW1wL2NvbW1vbi91dGlsL1Zl
cnNpb25OdW1iZXI7SUxjb20vam9nYW1wL29wZW5nbC9HTFJlbmRlcmVyUXVpcmtzOylMam9nYW1w
L29wZW5nbC9HTENvbnRleHRJbXBsJE1hcHBlZEdMVmVyc2lvbjsMAroCuwoAAgK8AQAZc2V0QXZh
aWxhYmxlR0xWZXJzaW9uc1NldAEANChMY29tL2pvZ2FtcC9uYXRpdmV3aW5kb3cvQWJzdHJhY3RH
cmFwaGljc0RldmljZTtaKVYMAr4CvwoABALAAQAnOiBjcmVhdGVDb250ZXh0T0xELU1hcEdMVmVy
c2lvbnMgSEFWRTogCALCAQAOY29udGV4dENyZWF0ZWQMAsQAuQoAiALFAQAPbWFrZUN1cnJlbnRJ
bXBsDALHAFQKAAICyAEAEGFzc29jaWF0ZUNvbnRleHQBACEoTGNvbS9qb2dhbXAvb3BlbmdsL0dM
Q29udGV4dDtaKVYMAsoCywoAgQLMDAGpAssKAIECzgEAFGNyZWF0ZUNvbnRleHRBUkJJbXBsAQAI
KEpaSUlJKUoBABVkZXN0cm95Q29udGV4dEFSQkltcGwBAAQoSilWAQAXaXNDcmVhdGVDb250ZXh0
QVJCQXZhaWwBABtjb20vam9nYW1wL29wZW5nbC9HTFByb2ZpbGUHAtUBABdkaXNhYmxlT3BlbkdM
QVJCQ29udGV4dAwC1wAuCQLWAtgBABZleGlzdFN0aWNreURldmljZVF1aXJrAQA0KExjb20vam9n
YW1wL25hdGl2ZXdpbmRvdy9BYnN0cmFjdEdyYXBoaWNzRGV2aWNlO0kpWgwC2gLbCgIWAtwBABtn
ZXRDcmVhdGVDb250ZXh0QVJCQXZhaWxTdHIBAEQoTGNvbS9qb2dhbXAvbmF0aXZld2luZG93L0Fi
c3RyYWN0R3JhcGhpY3NEZXZpY2U7KUxqYXZhL2xhbmcvU3RyaW5nOwEACWRpc2FibGVkIAgC4AEA
CCwgcXVpcmsgCALiAQAQY3JlYXRlQ29udGV4dEFSQgEABShKWilKAQAVZ2V0Q2hvc2VuQ2FwYWJp
bGl0aWVzAQAxKClMY29tL2pvZ2FtcC9uYXRpdmV3aW5kb3cvQ2FwYWJpbGl0aWVzSW1tdXRhYmxl
OwwC5gLnCwKSAugBACljb20vam9nYW1wL29wZW5nbC9HTENhcGFiaWxpdGllc0ltbXV0YWJsZQcC
6gEADGdldEdMUHJvZmlsZQEAHygpTGNvbS9qb2dhbXAvb3BlbmdsL0dMUHJvZmlsZTsMAuwC7QsC
6wLuAQApOiBjcmVhdGVDb250ZXh0QVJCLU1hcEdMVmVyc2lvbnMgaXMgU0VUICgIAvABAA1nZXRD
b25uZWN0aW9uDALyAKkLArIC8wEADW1hcEdMVmVyc2lvbnMMAvUCngoAAgL2AQAYZ2V0UmVxdWVz
dE1ham9yQW5kQ29tcGF0AQAiKExjb20vam9nYW1wL29wZW5nbC9HTFByb2ZpbGU7W0kpVgwC+AL5
CgAEAvoBACs6IGNyZWF0ZUNvbnRleHRBUkItTWFwR0xWZXJzaW9ucyBSZXF1ZXN0ZWQgCAL8AQAp
KElJSUxqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsMAV0C/goABAL/BwA7AQAV
Z2V0QXZhaWxhYmxlR0xWZXJzaW9uAQA7KExjb20vam9nYW1wL25hdGl2ZXdpbmRvdy9BYnN0cmFj
dEdyYXBoaWNzRGV2aWNlO0lJW0lbSVtJKVoMAwIDAwoABAMEAQAoOiBjcmVhdGVDb250ZXh0QVJC
LU1hcEdMVmVyc2lvbnMgTWFwcGVkIAgDBgwC0ALRCgACAwgBABlzZXRHTEZ1bmN0aW9uQXZhaWxh
YmlsaXR5AQAJKFpJSUlaWilaDAMKAwsKAAIDDAEALXNldEdMRnVuY3Rpb25BdmFpbGFiaWxpdHkg
IXN0cmljdE1hdGNoIGZhaWxlZAgDDgEAGnNldE1hcHBlZEdMVmVyc2lvbkxpc3RlbmVyAQA4KExq
b2dhbXAvb3BlbmdsL0dMQ29udGV4dEltcGwkTWFwcGVkR0xWZXJzaW9uTGlzdGVuZXI7KVYMAFEA
UgkAAgMSAQAIZ2V0TWlub3IMAxQAoQoCrAMVAQBKKExjb20vam9nYW1wL25hdGl2ZXdpbmRvdy9B
YnN0cmFjdEdyYXBoaWNzRGV2aWNlO0lJSUlJKUxqYXZhL2xhbmcvSW50ZWdlcjsMAroDFwoAAgMY
AQARamF2YS9sYW5nL0ludGVnZXIHAxoBAAhpbnRWYWx1ZQwDHAChCgMbAx0BAA1kZWNvbXBvc2VC
aXRzAQArKElbSSlMY29tL2pvZ2FtcC9jb21tb24vdXRpbC9WZXJzaW9uTnVtYmVyOwwDHwMgCgAC
AyEBAKcoTGNvbS9qb2dhbXAvbmF0aXZld2luZG93L0Fic3RyYWN0R3JhcGhpY3NEZXZpY2U7SUlM
Y29tL2pvZ2FtcC9jb21tb24vdXRpbC9WZXJzaW9uTnVtYmVyO0lMY29tL2pvZ2FtcC9vcGVuZ2wv
R0xSZW5kZXJlclF1aXJrcztMY29tL2pvZ2FtcC9jb21tb24vdXRpbC9WZXJzaW9uTnVtYmVyO0kp
VgwAYAMjCgAKAyQBAA9nbFZlcnNpb25NYXBwZWQBADAoTGpvZ2FtcC9vcGVuZ2wvR0xDb250ZXh0
SW1wbCRNYXBwZWRHTFZlcnNpb247KVYMAyYDJwsABwMoAQAYcmVtYXBBdmFpbGFibGVHTFZlcnNp
b25zAQBjKExjb20vam9nYW1wL25hdGl2ZXdpbmRvdy9BYnN0cmFjdEdyYXBoaWNzRGV2aWNlO0xj
b20vam9nYW1wL25hdGl2ZXdpbmRvdy9BYnN0cmFjdEdyYXBoaWNzRGV2aWNlOylWAQALZ2V0VW5p
cXVlSUQMAywAqQsCsgMtAQAWZGV2aWNlVmVyc2lvbkF2YWlsYWJsZQEAG0xqYXZhL3V0aWwvSWRl
bnRpdHlIYXNoTWFwOwwDLwMwCQACAzEBACc6IGNyZWF0ZUNvbnRleHRBUkItTWFwR0xWZXJzaW9u
cyBSRU1BUCAIAzMBABlqYXZhL3V0aWwvSWRlbnRpdHlIYXNoTWFwBwM1CgM2AGIBAAZrZXlTZXQB
ABEoKUxqYXZhL3V0aWwvU2V0OwwDOAM5CgM2AzoBAA1qYXZhL3V0aWwvU2V0BwM8AQAIaXRlcmF0
b3IBABYoKUxqYXZhL3V0aWwvSXRlcmF0b3I7DAM+Az8LAz0DQAEAEmphdmEvdXRpbC9JdGVyYXRv
cgcDQgEAB2hhc05leHQMA0QA4wsDQwNFAQAEbmV4dAwDRwF1CwNDA0gBAANnZXQBACYoTGphdmEv
bGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OwwDSgNLCgM2A0wBABkgTWFwR0xWZXJzaW9u
cyBSRU1BUCBPTEQgCANOAQBtKExqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjtMY29tL2pvZ2FtcC9j
b21tb24vdXRpbC9WZXJzaW9uTnVtYmVyO0lMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9T
dHJpbmdCdWlsZGVyOwwBXQNQCgAEA1EBAANwdXQBADgoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEv
bGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OwwDUwNUCgM2A1UBAAtsYXN0SW5kZXhPZgwD
VwI7CgE4A1gBABhkZXZpY2Utc2VwYXJhdG9yICctJyBhdCAIA1oBABwoSSlMamF2YS9sYW5nL1N0
cmluZ0J1aWxkZXI7DACaA1wKAJYDXQEABCBvZiAIA18BAAlzdWJzdHJpbmcBABYoSUkpTGphdmEv
bGFuZy9TdHJpbmc7DANhA2IKATgDYwEABmVxdWFscwEAFShMamF2YS9sYW5nL09iamVjdDspWgwD
ZQNmCgE4A2cMA2EApQoBOANpAQAGaW50ZXJuDANrAKkKATgDbAEAGSBNYXBHTFZlcnNpb25zIFJF
TUFQIE5FVyAIA24BAAsgLT4gKGRpdHRvKQgDcAoDNgBaAQAGcHV0QWxsAQASKExqYXZhL3V0aWwv
TWFwOylWDANzA3QKAzYDdQkABAMxAQAKZ2V0RmFjdG9yeQEAJygpTGNvbS9qb2dhbXAvb3Blbmds
L0dMRHJhd2FibGVGYWN0b3J5OwwDeAN5CgCBA3oBACNjb20vam9nYW1wL29wZW5nbC9HTERyYXdh
YmxlRmFjdG9yeQcDfAEAEmhhc09wZW5HTEVTU3VwcG9ydAwDfgDjCgN9A38BABdoYXNPcGVuR0xE
ZXNrdG9wU3VwcG9ydAwDgQDjCgN9A4IBAA5nZXRGYWN0b3J5SW1wbAEAJygpTGpvZ2FtcC9vcGVu
Z2wvR0xEcmF3YWJsZUZhY3RvcnlJbXBsOwwDhAOFCgCBA4YBACNqb2dhbXAvb3BlbmdsL0dMRHJh
d2FibGVGYWN0b3J5SW1wbAcDiAEAHWhhc01ham9yTWlub3JDcmVhdGVDb250ZXh0QVJCDAOKAOMK
A4kDiwEAMjogY3JlYXRlQ29udGV4dEFSQi1NYXBHTFZlcnNpb25zIFNUQVJUIChHTERlc2t0b3Ag
CAONAQAHLCBHTEVTIAgDjwEADywgbWlub3JWZXJzaW9uIAgDkQEABSkgb24gCAOTAQAIbmFub1Rp
bWUMA5UBeAoBVgOWAQAPZGlzYWJsZU9wZW5HTEVTDAOYAC4JAtYDmQEAJGNyZWF0ZUNvbnRleHRB
UkJNYXBWZXJzaW9uc0F2YWlsYWJsZQEANihMY29tL2pvZ2FtcC9uYXRpdmV3aW5kb3cvQWJzdHJh
Y3RHcmFwaGljc0RldmljZTtJSVopWgwDmwOcCgACA50BABBQUk9GSUxFX0FMSUFTSU5HDAOfAC4J
AAIDoAEABU1BQ09TAQAmTGNvbS9qb2dhbXAvY29tbW9uL29zL1BsYXRmb3JtJE9TVHlwZTsMA6ID
owkAGAOkAQAJZ2V0T1NUeXBlAQAoKClMY29tL2pvZ2FtcC9jb21tb24vb3MvUGxhdGZvcm0kT1NU
eXBlOwwDpgOnCgAaA6gBABJnZXRPU1ZlcnNpb25OdW1iZXIBACgoKUxjb20vam9nYW1wL2NvbW1v
bi91dGlsL1ZlcnNpb25OdW1iZXI7DAOqA6sKABoDrAEACU1hdmVyaWNrcwwDrgKlCQAdA68BABRk
aXNhYmxlT3BlbkdMRGVza3RvcAwDsQAuCQLWA7IBABFkaXNhYmxlT3BlbkdMQ29yZQwDtAAuCQLW
A7UBADI6IGNyZWF0ZUNvbnRleHRBUkItTWFwR0xWZXJzaW9uczogUXVpcmsgVHJpZ2dlcmQ6IAgD
twEADDogY2F1c2U6IE9TIAgDuQEADSwgT1MgVmVyc2lvbiAIA7sBAC46IGNyZWF0ZUNvbnRleHRB
UkItTWFwR0xWZXJzaW9ucyBFTkQgKHN1Y2Nlc3MgCAO9AQATLCBwcm9maWxlQWxpYXNpbmc6IAgD
vwEACCwgdG90YWwgCAPBBkEuhIAAAAAAAQAcKEQpTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOwwA
mgPFCgCWA8YBAAJtcwgDyAEAF2R1bXBBdmFpbGFibGVHTFZlcnNpb25zAQA0KExqYXZhL2xhbmcv
U3RyaW5nQnVpbGRlcjspTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOwwDygPLCgAEA8wBAAtnZXRN
YXhNaW5vcgEABShJSSlJDAPOA88KAAQD0AEAGGNyZWF0ZUNvbnRleHRBUkJWZXJzaW9ucwEADihK
WklJSUlJW0lbSSlKDAPSA9MKAAID1AwC0gLTCgACA9YBACY6IGNyZWF0ZUNvbnRleHRBUkItTWFw
R0xWZXJzaW9ucyBIQVZFIAgD2AEAOChMamF2YS9sYW5nL1N0cmluZ0J1aWxkZXI7SUlJSSlMamF2
YS9sYW5nL1N0cmluZ0J1aWxkZXI7DACoA9oKAAoD2wEAJjogY3JlYXRlQ29udGV4dEFSQi1NYXBH
TFZlcnNpb25zIE5PUEUgCAPdAQACICgIA98BADUoTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyO0kp
TGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOwwC7APhCgAEA+IBAAMpIFsIA+QBAAEuCAPmAQAEIC4u
IAgD6AEAAV0IA+oBABs6IGNyZWF0ZUNvbnRleHRBUkJWZXJzaW9ucy4IA+wBAAg6IHNoYXJlIAgD
7gEAHChKKUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsMAJoD8AoAlgPxAQAJLCBkaXJlY3QgCAPz
AQAKLCB2ZXJzaW9uIAgD9QEAAiBbCAP3AQASZGVjcmVtZW50R0xWZXJzaW9uAQAIKElbSVtJKVoM
A/kD+goABAP7AQAiOiBjcmVhdGVDb250ZXh0QVJCVmVyc2lvbnMuWDogY3R4IAgD/QEACCwgc2hh
cmUgCAP/AQARc2V0Q29udGV4dFZlcnNpb24BADMoSUlJTGNvbS9qb2dhbXAvY29tbW9uL3V0aWwv
VmVyc2lvbk51bWJlclN0cmluZztaKVYBABNJbnZhbGlkIEdMIFZlcnNpb24gCAQDAQAGLCBjdHAg
CAQFAQAGKElJSSlWDABgBAcKAqwECAoAAgL/AQAQY3R4VmVyc2lvblN0cmluZwwECwAiCQACBAwB
ABBjdHhWZW5kb3JWZXJzaW9uAQAsTGNvbS9qb2dhbXAvY29tbW9uL3V0aWwvVmVyc2lvbk51bWJl
clN0cmluZzsMBA4EDwkAAgQQAQALemVyb1ZlcnNpb24MBBICpQkCrAQTAQAOY3R4R0xTTFZlcnNp
b24MBBUCpQkAAgQWAQAHaGFzR0xTTAwEGADjCgACBBkBAAZpc0dMRVMMBBsA4woAAgQcAwAAi4wB
AAtnbEdldFN0cmluZwwEHwClCwEiBCAKAqwAfgEABmlzWmVybwwEIwDjCgKsBCQBABpnZXRTdGF0
aWNHTFNMVmVyc2lvbk51bWJlcgEAKyhJSUkpTGNvbS9qb2dhbXAvY29tbW9uL3V0aWwvVmVyc2lv
bk51bWJlcjsMBCYEJwoAAgQoAQAOdmVyaWZ5SW5zdGFuY2UBAEQoTGNvbS9qb2dhbXAvb3Blbmds
L0dMUHJvZmlsZTtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL09iamVjdDspWgEAFmdldEdM
SW1wbEJhc2VDbGFzc05hbWUMBCwAqQoC1gQtAQAlY29tL2pvZ2FtcC9jb21tb24vdXRpbC9SZWZs
ZWN0aW9uVXRpbAcELwEACmluc3RhbmNlT2YBACcoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFu
Zy9TdHJpbmc7KVoMBDEEMgoEMAQzAQAOY3JlYXRlSW5zdGFuY2UBAFsoTGNvbS9qb2dhbXAvbmF0
aXZld2luZG93L0Fic3RyYWN0R3JhcGhpY3NEZXZpY2U7SUlJWltMamF2YS9sYW5nL09iamVjdDsp
TGphdmEvbGFuZy9PYmplY3Q7AQAXKElJSSlMamF2YS9sYW5nL1N0cmluZzsMAuwENwoABAQ4AQBh
KExjb20vam9nYW1wL25hdGl2ZXdpbmRvdy9BYnN0cmFjdEdyYXBoaWNzRGV2aWNlO0xqYXZhL2xh
bmcvU3RyaW5nOylMY29tL2pvZ2FtcC9vcGVuZ2wvR0xQcm9maWxlOwwDSgQ6CgLWBDsBAAlnZXRH
TEN0b3IBACIoWilMamF2YS9sYW5nL3JlZmxlY3QvQ29uc3RydWN0b3I7DAQ9BD4KAtYEPwEARihM
amF2YS9sYW5nL3JlZmxlY3QvQ29uc3RydWN0b3I7W0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9s
YW5nL09iamVjdDsMBDUEQQoEMARCAQBaKExjb20vam9nYW1wL25hdGl2ZXdpbmRvdy9BYnN0cmFj
dEdyYXBoaWNzRGV2aWNlO0lJSUxqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvT2JqZWN0Oyla
AQAIY3JlYXRlR0wBAEsoTGNvbS9qb2dhbXAvbmF0aXZld2luZG93L0Fic3RyYWN0R3JhcGhpY3NE
ZXZpY2U7SUlJKUxjb20vam9nYW1wL29wZW5nbC9HTDsBAAxmaW5hbGl6ZUluaXQBABkoTGNvbS9q
b2dhbXAvb3BlbmdsL0dMOylWCARHAQAJZ2V0TWV0aG9kAQBRKExqYXZhL2xhbmcvQ2xhc3M7TGph
dmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvcmVmbGVjdC9NZXRo
b2Q7DARKBEsKBDAETAEAGGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZAcETgEAB0NhdWdodCAIBFAB
AAI6IAgEUgEACmdldE1lc3NhZ2UMBFQAqQoBGgRVAQAKY2FsbE1ldGhvZAEAUyhMamF2YS9sYW5n
L09iamVjdDtMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kO1tMamF2YS9sYW5nL09iamVjdDspTGph
dmEvbGFuZy9PYmplY3Q7DARXBFgKBDAEWQEAMU1pc3NpbmcgJ3ZvaWQgZmluYWxpemVJbml0KFBy
b2NBZGRyZXNzVGFibGUpJyBpbiAIBFsBABVnZXRHTFByb2NBZGRyZXNzVGFibGUBAC8oKUxjb20v
am9nYW1wL2dsdWVnZW4vcnVudGltZS9Qcm9jQWRkcmVzc1RhYmxlOwEAHmdldFBsYXRmb3JtRXh0
UHJvY0FkZHJlc3NUYWJsZQEAF21hcFRvUmVhbEdMRnVuY3Rpb25OYW1lAQAmKExqYXZhL2xhbmcv
U3RyaW5nOylMamF2YS9sYW5nL1N0cmluZzsBABJnZXRGdW5jdGlvbk5hbWVNYXABABEoKUxqYXZh
L3V0aWwvTWFwOwwEYgRjCgACBGQBAA1qYXZhL3V0aWwvTWFwBwRmCwRnA0wBABhtYXBUb1JlYWxH
TEV4dGVuc2lvbk5hbWUBABNnZXRFeHRlbnNpb25OYW1lTWFwDARqBGMKAAIEawEAGGdldEdMRHlu
YW1pY0xvb2t1cEhlbHBlcgEAJygpTGpvZ2FtcC9vcGVuZ2wvR0xEeW5hbWljTG9va3VwSGVscGVy
OwEAKShJSSlMam9nYW1wL29wZW5nbC9HTER5bmFtaWNMb29rdXBIZWxwZXI7DARtBG8KA4kEcAEA
FXJlc2V0UHJvY0FkZHJlc3NUYWJsZQEAVShMY29tL2pvZ2FtcC9nbHVlZ2VuL3J1bnRpbWUvUHJv
Y0FkZHJlc3NUYWJsZTtMam9nYW1wL29wZW5nbC9HTER5bmFtaWNMb29rdXBIZWxwZXI7KVYBAHIo
TGpvZ2FtcC9vcGVuZ2wvR0xDb250ZXh0SW1wbDtMY29tL2pvZ2FtcC9nbHVlZ2VuL3J1bnRpbWUv
UHJvY0FkZHJlc3NUYWJsZTtMam9nYW1wL29wZW5nbC9HTER5bmFtaWNMb29rdXBIZWxwZXI7KVYM
AGAEdAoAEQR1AQAeamF2YS9zZWN1cml0eS9BY2Nlc3NDb250cm9sbGVyBwR3AQAMZG9Qcml2aWxl
Z2VkAQA0KExqYXZhL3NlY3VyaXR5L1ByaXZpbGVnZWRBY3Rpb247KUxqYXZhL2xhbmcvT2JqZWN0
OwwEeQR6CgR4BHsBABl1cGRhdGVHTFhQcm9jQWRkcmVzc1RhYmxlAQA6KExqYXZhL2xhbmcvU3Ry
aW5nO0xqb2dhbXAvb3BlbmdsL0dMRHluYW1pY0xvb2t1cEhlbHBlcjspVgEAIWluaXRHTFJlbmRl
cmVyQW5kR0xWZXJzaW9uU3RyaW5ncwEABShJSSlaAQAiKExqb2dhbXAvb3BlbmdsL0dMQ29udGV4
dEltcGw7SUkpVgwAYASBCgAPBIIBACVFcnJvcjogQ291bGQgbm90IGxvb2t1cDogZ2xHZXRTdHJp
bmcgCASEAQAQLCBnbEdldEludGVnZXJ2IAgEhgEADmdsR2V0U3RyaW5nSW50AQAWKElKKUxqYXZh
L2xhbmcvU3RyaW5nOwwEiASJCgACBIoBABtXYXJuaW5nOiBHTF9WRU5ET1IgaXMgTlVMTC4IBIwB
AB1XYXJuaW5nOiBHTF9SRU5ERVJFUiBpcyBOVUxMLggEjgEAC3RvTG93ZXJDYXNlDASQAKkKATgE
kQEAHFdhcm5pbmc6IEdMX1ZFUlNJT04gaXMgTlVMTC4IBJMBAA9nZXRHTEludFZlcnNpb24BAAco
W0lbSSlWAQAdTm90IGluaXRpYWxpemVkOiBnbEdldFN0cmluZyAIBJcDAACCGwEAEGdsR2V0SW50
ZWdlcnZJbnQBAAgoSVtJSUopVgwEmgSbCgACBJwDAACCHAEAEmdldEdMVmVyc2lvbk51bWJlcgEA
OyhJTGphdmEvbGFuZy9TdHJpbmc7KUxjb20vam9nYW1wL2NvbW1vbi91dGlsL1ZlcnNpb25OdW1i
ZXI7AQAdam9nYW1wL29wZW5nbC9HTFZlcnNpb25OdW1iZXIHBKEBADMoTGphdmEvbGFuZy9TdHJp
bmc7KUxqb2dhbXAvb3BlbmdsL0dMVmVyc2lvbk51bWJlcjsMAk0EowoEogSkAQAHaXNWYWxpZAwE
pgDjCgSiBKcKBKICtAoEogMVAQAQaXNWYWxpZEdMVmVyc2lvbgEABihJSUkpWgwEqwSsCgAEBK0B
AA1nZXRDdHhPcHRpb25zAQAbSW52YWxpZCBHTCBWZXJzaW9uIFJlcXVlc3QgCASwDAR/BIAKAAIE
sgEALUludGlhbGl6YXRpb24gb2YgR0wgcmVuZGVyZXIgc3RyaW5ncyBmYWlsZWQuIAgEtAEAJFdh
cm5pbmc6IHNldEdMRnVuY3Rpb25BdmFpbGFiaWxpdHk6IAgEtgwEnwSgCgACBLgBACI6IEdMQ29u
dGV4dC5zZXRHTEZ1bmNBdmFpbDogR2l2ZW4gCAS6AQAOLCBOdW1iZXIoU3RyKSAIBLwBAEA6IEdM
Q29udGV4dC5zZXRHTEZ1bmNBdmFpbDogUHJlIHZlcnNpb24gdmVyaWZpY2F0aW9uIC0gZXhwZWN0
ZWQgCAS+AQAOLCBzdHJpY3RNYXRjaCAIBMABABQsIGdsVmVyc2lvbnNNYXBwaW5nIAgEwgwElQSW
CgACBMQBAD86IEdMQ29udGV4dC5zZXRHTEZ1bmNBdmFpbDogVmVyc2lvbiB2ZXJpZmljYXRpb24g
KEludCk6IFN0cmluZyAIBMYBAA4sIE51bWJlcihJbnQpIAgEyAEAPzogR0xDb250ZXh0LnNldEdM
RnVuY0F2YWlsLlg6IEZBSUwsIEdMIHZlcnNpb24gbWlzbWF0Y2ggKEludCk6IAgEygEAQjogR0xD
b250ZXh0LnNldEdMRnVuY0F2YWlsOiBWZXJzaW9uIHZlcmlmaWNhdGlvbiAoU3RyaW5nKTogU3Ry
aW5nIAgEzAEAQjogR0xDb250ZXh0LnNldEdMRnVuY0F2YWlsLlg6IEZBSUwsIEdMIHZlcnNpb24g
bWlzbWF0Y2ggKFN0cmluZyk6IAgEzgEASDogR0xDb250ZXh0LnNldEdMRnVuY0F2YWlsLlg6IEZB
SUwsIEdMMy9FUzMgdmVyc2lvbiBJbnQgZmFpbGVkLCBTdHJpbmc6IAgE0AEARzogR0xDb250ZXh0
LnNldEdMRnVuY0F2YWlsLlg6IEZBSUwsIE5vIEdMIHZlcnNpb24gdmFsaWRhdGlvbiBwb3NzaWJs
ZTogCATSAQA6OiBHTENvbnRleHQuc2V0R0xGdW5jQXZhaWw6IFBvc3QgdmVyc2lvbiB2ZXJpZmlj
YXRpb24gcmVxIAgE1AEACCAtPiBoYXMgCATWAQATLCB2ZXJzaW9uVmFsaWRhdGVkIAgE2AEAEiwg
dmVyc2lvbkdMM0ludE9LIAgE2gEAImlzQ3VycmVudENvbnRleHRIYXJkd2FyZVJhc3Rlcml6ZXIM
BNwA4woAAgTdAQATY3JlYXRlVmVuZG9yVmVyc2lvbgEAQChMamF2YS9sYW5nL1N0cmluZzspTGNv
bS9qb2dhbXAvY29tbW9uL3V0aWwvVmVyc2lvbk51bWJlclN0cmluZzsMBN8E4AoEogThDAE6ATsK
AAIE4wEAEXNldFJlbmRlcmVyUXVpcmtzAQCLKExjb20vam9nYW1wL25hdGl2ZXdpbmRvdy9BYnN0
cmFjdEdyYXBoaWNzRGV2aWNlO0xqb2dhbXAvb3BlbmdsL0dMRHJhd2FibGVGYWN0b3J5SW1wbDtJ
SUlJSUlMY29tL2pvZ2FtcC9jb21tb24vdXRpbC9WZXJzaW9uTnVtYmVyU3RyaW5nO1opVgwE5QTm
CgACBOcBAAVleGlzdAwE6QIQCgIWBOoBADk6IEdMQ29udGV4dC5zZXRHTEZ1bmNBdmFpbC5YOiBG
QUlMLCBHTCBpcyBub3QgY29tcGxpYW50OiAIBOwBACpjb20vam9nYW1wL2NvbW1vbi91dGlsL1Zl
cnNpb25OdW1iZXJTdHJpbmcHBO4BAA1nZXRDb250ZXh0RlFOAQBHKExjb20vam9nYW1wL25hdGl2
ZXdpbmRvdy9BYnN0cmFjdEdyYXBoaWNzRGV2aWNlO0lJSSlMamF2YS9sYW5nL1N0cmluZzsMBPAE
8QoAAgTyAQAsOiBHTENvbnRleHQuc2V0R0xGdW5jQXZhaWwuMCB2YWxpZGF0ZWQgRlFOOiAIBPQK
AAIEcAEASjogR0xDb250ZXh0LnNldEdMRnVuY0F2YWlsLlg6IEZBSUwsIE5vIEdMRHluYW1pY0xv
b2t1cEhlbHBlciBmb3IgcmVxdWVzdDogCAT3AQAjam9nYW1wL29wZW5nbC9HTER5bmFtaWNMb29r
dXBIZWxwZXIHBPkMBH0EfgoAAgT7CgCBAu4MAEcASAkAAgT+CgBYA0wBACtjb20vam9nYW1wL2ds
dWVnZW4vcnVudGltZS9Qcm9jQWRkcmVzc1RhYmxlBwUBAQAQUHJvY0FkZHJlc3NUYWJsZQgFAwwE
KgRECgACBQUBAClHTENvbnRleHQgR0wgUHJvY0FkZHJlc3NUYWJsZSBtYXBwZWQga2V5KAgFBwEA
BSkgLT4gCAUJAQAOIG5vdCBtYXRjaGluZyAIBQsMBCoEKwoAAgUNAQABLwgFDwEALDogR0xDb250
ZXh0IEdMIFByb2NBZGRyZXNzVGFibGUgcmV1c2luZyBrZXkoCAURAQA3Y29tL2pvZ2FtcC9nbHVl
Z2VuL3J1bnRpbWUvb3BlbmdsL0dMUHJvY0FkZHJlc3NSZXNvbHZlcgcFEwoFFABiDAQ1BDYKAAIF
FgwEcgRzCgACBRgKAFgDVQEALDogR0xDb250ZXh0IEdMIFByb2NBZGRyZXNzVGFibGUgbWFwcGlu
ZyBrZXkoCAUbAQAESW1wbAgFHQwERQRGCgACBR8BAB5HTENvbnRleHQgR0wgT2JqZWN0IG1pc21h
dGNoOiAIBSEBAChqb2dhbXAvb3BlbmdsL0V4dGVuc2lvbkF2YWlsYWJpbGl0eUNhY2hlBwUjAQA2
OiBHTENvbnRleHQgR0wgRXh0ZW5zaW9uQXZhaWxhYmlsaXR5Q2FjaGUgcmV1c2luZyBrZXkoCAUl
AQAMIC0gZW50cmllczogCAUnAQAWZ2V0VG90YWxFeHRlbnNpb25Db3VudAwFKQChCgUkBSoKBSQA
YgwEAQQCCgACBS0BAAVyZXNldAwFLwC0CgUkBTABADY6IEdMQ29udGV4dCBHTCBFeHRlbnNpb25B
dmFpbGFiaWxpdHlDYWNoZSBtYXBwaW5nIGtleSgIBTIBABpHTF9BUkJfRVMzXzJfY29tcGF0aWJp
bGl0eQgFNAEAFGlzRXh0ZW5zaW9uQXZhaWxhYmxlAQAVKExqYXZhL2xhbmcvU3RyaW5nOylaDAU2
BTcKAAIFOAEAGkdMX0FSQl9FUzNfMV9jb21wYXRpYmlsaXR5CAU6AQAYR0xfQVJCX0VTM19jb21w
YXRpYmlsaXR5CAU8AQAYR0xfQVJCX0VTMl9jb21wYXRpYmlsaXR5CAU+AQAKaGFzRkJPSW1wbAEA
LyhJSUxqb2dhbXAvb3BlbmdsL0V4dGVuc2lvbkF2YWlsYWJpbGl0eUNhY2hlOylaDAVABUEKAAIF
QgEAF0dMX09FU19zaW5nbGVfcHJlY2lzaW9uCAVEAwAAgAABABRGT1JDRV9OT19GQk9fU1VQUE9S
VAwFRwAuCQACBUgMBEcESAoAAgVKAQAWc2V0RGVmYXVsdFN3YXBJbnRlcnZhbAwFTABUCgACBU0B
AApnbEdldEVycm9yDAVPAKELASIFUAEAITogR0xDb250ZXh0LnNldEdMRnVuY0F2YWlsLlg6IE9L
IAgFUgEACSAtIGdsRXJyIAgFVAEAFGFkZFN0aWNreVF1aXJrQWx3YXlzAQBZKExjb20vam9nYW1w
L25hdGl2ZXdpbmRvdy9BYnN0cmFjdEdyYXBoaWNzRGV2aWNlO0xjb20vam9nYW1wL29wZW5nbC9H
TFJlbmRlcmVyUXVpcmtzO0laKVYBAAhhZGRRdWlyawwFWAHgCgIWBVkBABRhZGRTdGlja3lEZXZp
Y2VRdWlyawEANChMY29tL2pvZ2FtcC9uYXRpdmV3aW5kb3cvQWJzdHJhY3RHcmFwaGljc0Rldmlj
ZTtJKVYMBVsFXAoCFgVdAQAXYWRkU3RpY2t5UXVpcmtBdE1hcHBpbmcBACtjb20vam9nYW1wL25h
dGl2ZXdpbmRvdy9OYXRpdmVXaW5kb3dGYWN0b3J5BwVgAQAIVFlQRV9YMTEMBWIAIgkFYQVjAQAT
Z2V0TmF0aXZlV2luZG93VHlwZQEAFShaKUxqYXZhL2xhbmcvU3RyaW5nOwwFZQVmCgVhBWcBAAdX
SU5ET1dTDAVpA6MJABgFagEABU1lc2EgCAVsAQAIY29udGFpbnMBABsoTGphdmEvbGFuZy9DaGFy
U2VxdWVuY2U7KVoMBW4FbwoBOAVwAQAIR2FsbGl1bSAIBXIBABBBVEkgVGVjaG5vbG9naWVzCAV0
AQAEQVRJIAgFdgEACnN0YXJ0c1dpdGgMBXgFNwoBOAV5AQASTlZJRElBIENvcnBvcmF0aW9uCAV7
AQAHTlZJRElBIAgFfQEABUludGVsCAV/CgIWAGIBAAdRdWlyazogCAWCAQAQOiBjYXVzZTogRVMg
cmVxIAgFhAEACSBhbmQgMiA8IAgFhgwFVgVXCgACBYgBABlkaXNhYmxlU3VyZmFjZWxlc3NDb250
ZXh0DAWKAC4JAtYFiwEAETogY2F1c2U6IGRpc2FibGVkCAWNAQAGLCByZXEgCAWPDAVfBVcKAAIF
kQEACywgUmVuZGVyZXIgCAWTAQAETGlvbgwFlQKlCQAdBZYKBO8CrwEACiwgW1ZlbmRvciAIBZkB
AA0gb3IgUmVuZGVyZXIgCAWbAQARXSwgZHJpdmVyVmVyc2lvbiAIBZ0BABQ6IGNhdXNlOiBPUy1W
ZXJzaW9uIAgFnwwEEgQPCQTvBaEBAAZnZXRTdWIMBaMAoQoCrAWkAQAYQVRJIFJhZGVvbiAzMTAw
IEdyYXBoaWNzCAWmAQANIGFuZCBWZXJzaW9uIAgFqAEAEUludGVsIEJlYXIgTGFrZSBCCAWqAQAO
IGFuZCBSZW5kZXJlciAIBawBAAdBTkRST0lEDAWuA6MJABgFrwEAB1Bvd2VyVlIIBbEBAAxJbW1l
cnNpb24uMTYIBbMBAANYMTEIBbUBAApWZXJzaW9uOF8wDAW3AqUJAAIFuAEAFjogY2F1c2U6IFgx
MSBSZW5kZXJlcj0IBboBABIsIFZlcnNpb249W3ZlbmRvciAIBbwBAAUsIEdMIAgFvgEAH2pvZ2Ft
cC9uYXRpdmV3aW5kb3cveDExL1gxMVV0aWwHBcABABxnZXRNYXJrQWxsRGlzcGxheXNVbmNsb3Nh
YmxlDAXCAOMKBcEFwwEAGzogY2F1c2U6IFgxMVV0aWwgRG93bnN0cmVhbQgFxQEALWNvbS9qb2dh
bXAvbmF0aXZld2luZG93L2VnbC9FR0xHcmFwaGljc0RldmljZQcFxwEAGzogY2F1c2U6ICFFUywg
IUVHTCwgVmVuZG9yIAgFyQEADywgWDExIFJlbmRlcmVyIAgFywEAEjogY2F1c2U6IFJlbmRlcmVy
IAgFzQEAECAvIE1lc2EtVmVyc2lvbiAIBc8BAAhJbnRlbChSKQgF0QEAGDogY2F1c2U6IFgxMSAv
IFJlbmRlcmVyIAgF0wEAB25vdXZlYXUIBdUBAAogLyBWZW5kb3IgCAXXAQAGU1ZHQTNECAXZAQAM
IC8gUmVuZGVyZXIgCAXbAQAbRk9SQ0VfTk9fQ09MT1JfUkVOREVSQlVGRkVSDAXdAC4JAAIF3gEA
ETogY2F1c2U6IHByb3BlcnR5CAXgAQAVRk9SQ0VfTUlOX0ZCT19TVVBQT1JUDAXiAC4JAAIF4wEA
CnByb3BlcnR5LCAIBeUBABZCdWdneUNvbG9yUmVuZGVyYnVmZmVyCAXnAQAJOiBjYXVzZTogCAXp
AQAQUXVpcmtzIGxvY2FsLjA6IAgF6wEAFnB1c2hTdGlja3lEZXZpY2VRdWlya3MBAFcoTGNvbS9q
b2dhbXAvbmF0aXZld2luZG93L0Fic3RyYWN0R3JhcGhpY3NEZXZpY2U7TGNvbS9qb2dhbXAvb3Bl
bmdsL0dMUmVuZGVyZXJRdWlya3M7KVYMBe0F7goCFgXvAQAQZ2V0RGVmYXVsdERldmljZQwF8QKa
CgOJBfIBABNhcmVTYW1lU3RpY2t5RGV2aWNlAQBjKExjb20vam9nYW1wL25hdGl2ZXdpbmRvdy9B
YnN0cmFjdEdyYXBoaWNzRGV2aWNlO0xjb20vam9nYW1wL25hdGl2ZXdpbmRvdy9BYnN0cmFjdEdy
YXBoaWNzRGV2aWNlOylaDAX0BfUKAhYF9gEADWdldEVHTEZhY3RvcnkMBfgDeQoDfQX5CgN9BfIB
ABBRdWlya3MgbG9jYWwuWDogCAX8AQARUXVpcmtzIHN0aWNreSBvbiAIBf4BABVnZXRTdGlja3lE
ZXZpY2VRdWlya3MBAFYoTGNvbS9qb2dhbXAvbmF0aXZld2luZG93L0Fic3RyYWN0R3JhcGhpY3NE
ZXZpY2U7KUxjb20vam9nYW1wL29wZW5nbC9HTFJlbmRlcmVyUXVpcmtzOwwGAAYBCgIWBgIKBSQF
OAEAGUdMX0FSQl9mcmFtZWJ1ZmZlcl9vYmplY3QIBgUBABlHTF9FWFRfZnJhbWVidWZmZXJfb2Jq
ZWN0CAYHAQAZR0xfT0VTX2ZyYW1lYnVmZmVyX29iamVjdAgGCQEAE3JlbW92ZUNhY2hlZFZlcnNp
b24BABI6IFJNIENvbnRleHQgRlFOOiAIBgwBAAZyZW1vdmUMBg4DSwoAWAYPAQAvOiBSTSBHTENv
bnRleHQgR0wgUHJvY0FkZHJlc3NUYWJsZSBtYXBwaW5nIGtleSgIBhEBADk6IFJNIEdMQ29udGV4
dCBHTCBFeHRlbnNpb25BdmFpbGFiaWxpdHlDYWNoZSBtYXBwaW5nIGtleSgIBhMBABdnZXRDaG9z
ZW5HTENhcGFiaWxpdGllcwEALSgpTGNvbS9qb2dhbXAvb3BlbmdsL0dMQ2FwYWJpbGl0aWVzSW1t
dXRhYmxlOwwGFQYWCgCBBhcBABZnZXRIYXJkd2FyZUFjY2VsZXJhdGVkDAYZAOMLAusGGgEACHNv
ZnR3YXJlCAYcAQAIbWVzYSB4MTEIBh4BAAhzb2Z0cGlwZQgGIAEACGxsdm1waXBlCAYiAQAfZ2V0
UGxhdGZvcm1FeHRlbnNpb25zU3RyaW5nSW1wbAEAGygpTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVy
OwEAE2lzRnVuY3Rpb25BdmFpbGFibGUBABNqYXZhL2xhbmcvRXhjZXB0aW9uBwYnDAYmBTcKBQIG
KQwEXwReCgACBisBAB1ObyBHTER5bmFtaWNMb29rdXBIZWxwZXIgZm9yIAgGLQEAKGNvbS9qb2dh
bXAvY29tbW9uL29zL0R5bmFtaWNMb29rdXBIZWxwZXIHBi8BADBjb20vam9nYW1wL2dsdWVnZW4v
cnVudGltZS9vcGVuZ2wvR0xOYW1lUmVzb2x2ZXIHBjEBAAxub3JtYWxpemVBUkIBACcoTGphdmEv
bGFuZy9TdHJpbmc7WilMamF2YS9sYW5nL1N0cmluZzsMBjMGNAoGMgY1AQAMbm9ybWFsaXplVkVO
DAY3BjQKBjIGOAEAXChMam9nYW1wL29wZW5nbC9HTENvbnRleHRJbXBsO0xjb20vam9nYW1wL2Nv
bW1vbi9vcy9EeW5hbWljTG9va3VwSGVscGVyO0xqYXZhL2xhbmcvU3RyaW5nOylWDABgBjoKAA0G
OwEAEWphdmEvbGFuZy9Cb29sZWFuBwY9AQAMYm9vbGVhblZhbHVlDAY/AOMKBj4GQAwEaQRhCgAC
BkIBABlnZXRQbGF0Zm9ybUV4dGVuc2lvbkNvdW50DAZEAKEKBSQGRQEAG2dldFBsYXRmb3JtRXh0
ZW5zaW9uc1N0cmluZwwGRwCpCgUkBkgBABNnZXRHTEV4dGVuc2lvbkNvdW50DAZKAKEKBSQGSwEA
FWdldEdMRXh0ZW5zaW9uc1N0cmluZwwGTQCpCgUkBk4BABtpc0V4dGVuc2lvbkNhY2hlSW5pdGlh
bGl6ZWQBAA1pc0luaXRpYWxpemVkDAZRAOMKBSQGUgEAAS0IBlQBAAtjb21wb3NlQml0cwEABihJ
SUkpSQwGVgZXCgACBlgBABdnZXREZWZhdWx0UGl4ZWxEYXRhVHlwZQEAEWV2YWxQaXhlbERhdGFU
eXBlDAZbAFQKAAIGXAwAQwAkCQACBl4BABlnZXREZWZhdWx0UGl4ZWxEYXRhRm9ybWF0DABCACQJ
AAIGYQEAEWlzR0xFUzJDb21wYXRpYmxlDAZjAOMKAAIGZAEAEkdMX09FU19yZWFkX2Zvcm1hdAgG
ZgMAAIubAQANZ2xHZXRJbnRlZ2VydgwGaQHkCwEiBmoDAACLmgEAD3NldFN3YXBJbnRlcnZhbAEA
D3ZhbGlkYXRlQ3VycmVudAwGbgBUCgACBm8BABFzZXRTd2FwSW50ZXJ2YWxOQwwGcQIQCgACBnIB
ABRzZXRTd2FwSW50ZXJ2YWxJbXBsMgEAFihJKUxqYXZhL2xhbmcvSW50ZWdlcjsMBnQGdQoAAgZ2
AQAPZ2V0U3dhcEludGVydmFsAQAVZ2V0QnVmZmVyU3RhdGVUcmFja2VyAQAmKClMam9nYW1wL29w
ZW5nbC9HTEJ1ZmZlclN0YXRlVHJhY2tlcjsBABFnZXRHTFN0YXRlVHJhY2tlcgEAICgpTGpvZ2Ft
cC9vcGVuZ2wvR0xTdGF0ZVRyYWNrZXI7AQAKaGFzV2FpdGVycwEADmdldFF1ZXVlTGVuZ3RoDAZ+
AKELAPYGfwEADGdldExvY2tDb3VudAEAE3NldEJvdW5kRnJhbWVidWZmZXIBAAUoSUkpVgEAE2dl
dEJvdW5kRnJhbWVidWZmZXIBABlJbnZhbGlkIEZCTyB0YXJnZXQgbmFtZTogCAaFAQAZZ2V0RGVm
YXVsdERyYXdGcmFtZWJ1ZmZlcgwGhwChCgCBBogBABlnZXREZWZhdWx0UmVhZEZyYW1lYnVmZmVy
DAaKAKEKAIEGiwEAFGdldERlZmF1bHRSZWFkQnVmZmVyAQAaKExjb20vam9nYW1wL29wZW5nbC9H
TDtaKUkMBo0GjgoAgQaPAQAaZ2V0R0xEZWJ1Z01lc3NhZ2VFeHRlbnNpb24BAAxnZXRFeHRlbnNp
b24MBpIAqQoAFQaTAQAXaXNHTERlYnVnTWVzc2FnZUVuYWJsZWQBABdnZXRDb250ZXh0Q3JlYXRp
b25GbGFncwEAF3NldENvbnRleHRDcmVhdGlvbkZsYWdzAQAUaXNHTERlYnVnU3luY2hyb25vdXMB
AA1pc1N5bmNocm9ub3VzDAaZAOMKABUGmgEAFXNldEdMRGVidWdTeW5jaHJvbm91cwEADnNldFN5
bmNocm9ub3VzDAadAL8KABUGngEAFGVuYWJsZUdMRGVidWdNZXNzYWdlDAaRAKkKAAIGoQEAEmFk
ZEdMRGVidWdMaXN0ZW5lcgEAFXJlbW92ZUdMRGVidWdMaXN0ZW5lcgEADnJlbW92ZUxpc3RlbmVy
DAalAlkKABUGpgEAFWdsRGVidWdNZXNzYWdlQ29udHJvbAEAHChJSUlJTGphdmEvbmlvL0ludEJ1
ZmZlcjtaKVYBABFpc0V4dGVuc2lvbktIUkFSQgwGqgDjCgAVBqsBAAlnZXRHTDJFUzIBABwoKUxj
b20vam9nYW1wL29wZW5nbC9HTDJFUzI7DAatBq4LASIGrwEAGGNvbS9qb2dhbXAvb3BlbmdsL0dM
MkVTMgcGsQwGqAapCwayBrMBAA5pc0V4dGVuc2lvbkFNRAwGtQDjCgAVBrYBAAlnZXRHTDJHTDMB
ABwoKUxjb20vam9nYW1wL29wZW5nbC9HTDJHTDM7DAa4BrkLASIGugEAIGNvbS9qb2dhbXAvb3Bl
bmdsL0dMRGVidWdNZXNzYWdlBwa8AQAYdHJhbnNsYXRlQVJCMkFNRENhdGVnb3J5DAa+A88KBr0G
vwEAGGNvbS9qb2dhbXAvb3BlbmdsL0dMMkdMMwcGwQEAF2dsRGVidWdNZXNzYWdlRW5hYmxlQU1E
AQAbKElJSUxqYXZhL25pby9JbnRCdWZmZXI7WilWDAbDBsQLBsIGxQEACyhJSUlJW0lJWilWDAao
BscLBrIGyAEACihJSUlbSUlaKVYMBsMGygsGwgbLAQAUZ2xEZWJ1Z01lc3NhZ2VJbnNlcnQBABko
SUlJSUxqYXZhL2xhbmcvU3RyaW5nOylWAQAGbGVuZ3RoDAbPAKEKATgG0AEAGihJSUlJSUxqYXZh
L2xhbmcvU3RyaW5nOylWDAbNBtILBrIG0wEAF2dsRGVidWdNZXNzYWdlSW5zZXJ0QU1EDAbVBs4L
BsIG1gEACmFjY2VzcyQwMDAKAAID4gEACmFjY2VzcyQxMDAKAAIDUQEACmFjY2VzcyQyMDABAAph
Y2Nlc3MkMzAyAQAhKExqb2dhbXAvb3BlbmdsL0dMQ29udGV4dEltcGw7SilKAQAKYWNjZXNzJDQw
MgEACDxjbGluaXQ+CgCfAGIKAFgAYgEACVNpZ25hdHVyZQEABENvZGUBAA9MaW5lTnVtYmVyVGFi
bGUBAA1TdGFja01hcFRhYmxlAQAKRXhjZXB0aW9ucwEANygpTGphdmEvdXRpbC9NYXA8TGphdmEv
bGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7PjsBAApTb3VyY2VGaWxlAQAMSW5uZXJDbGFz
c2VzBCEAAgAEAAAAHwACACEAIgAAAAIAIwAkAAAABAAlACYAAAACACcAKAAAAAIAKQAiAAAAAgAq
ACIAAAACACsAIgAAAAIALAAiAAAAAgAtAC4AAAACAC8AMAAAAAIAMQAwAAAAEgAyADMAAAASADQA
NQAAABIANgA3AAAAAgA4ADkAAAASADoAOwAAAAIAPAAkAAAABAA9AD4AAAAEAD8APgAAAAIAQAAu
AAAAAgBBAC4AAAACAEIAJAAAAAIAQwAkAAAAAgBEACQAAAAEAEUARgAAABwARwBIAAAAHABJAEoA
AQbjAAAAAgBLABwATABKAAEG4wAAAAIATQAcAE4ASgABBuMAAAACAE0AAgBPAFAAAAAKAFEAUgAA
AHcACQBTAFQAAQbkAAAANwABAAAAAAATsgBWtgBbsgBdtgBbsgBftgBbsQAAAAEG5QAAABIABAAA
AJoABgCbAAwAnAASAJ0AAQBgAGEAAQbkAAABRwAFAAMAAAC7KrcAYyoDtQBlKgm1AGcqCbUAaSq7
AGtZtwBstQBuKgG1AHAqBbwKWQMDT1kEA0+1AHIqA7UAdCoDtQB2KgG1AHgBK6YADbsAelkSfLcA
f78quwCDWbcAhLUAhgEspQA8Kiy4AIwqLMAAArYAkLUAkgEqtACSpgAvuwCUWbsAllm3AJcSmbYA
nSy2AKO4AKe2AJ22AKu3AKy/KrsArlm3AK+1AJIqK7UAsSortQCzKrsAFVkqtwC2tQBwsQAAAAIG
5QAAAF4AFwAAAKAABABpAAkAagAOAGsAEwBxAB4AcgAjAHMAMgB0ADcAhAA8AbcAQQCiAEYAowBQ
AKUAWwCmAGAApwBlAKgAcACpAHgAqgCZAK0ApACwAKkAsQCuALMAugC0BuYAAAAWAAP/AFAAAwcA
AgcAgQcABAAA+wBICgASALcAVAABBuQAAABaAAIAAQAAACUquAC7mgAKKrQAkrYAvCq0AIa2AL0q
tABuA7YAwSq0AG62AMOxAAAAAgblAAAAGgAGAAAAtwAHALgADgC6ABUAuwAdALwAJAC9BuYAAAAD
AAEOAAQAxAC/AAEG5AAAAPUAAwACAAAAfRuaAAcqtwDFKgG1AMcqAbUAySoBtQDLKgG1AM0qA7UA
zyoS0bUA0yoqtADTtQDVKiq0ANW1ANcqKrQA07UA2SoDtQBlKgm1AGcqCbUAaRuaABkBKrQAcqUA
ESq0AHIDA08qtAByBANPKgO1AHYqA7UA2yoDtQDdKhu3AN+xAAAAAgblAAAAWgAWAAAAwQAEAMIA
CADEAA0AxQASAMYAFwDHABwAyAAhAMoAJwDLAC8AzAA3AM0APwDOAEQAzwBJANAATgDSAFoA0wBh
ANQAaADXAG0A2AByANkAdwDbAHwA3AbmAAAABgACCPsAXwARAOAA4QABBuQAAAFAAAQABQAAAKoq
tgDlmgANuwDnWRLptwDqv7gA8E0qtAD0uQD5AQCZADa7AOdZuwCWWbcAlxL7tgCdKrQA9LkA/gEA
tgEBtgCdEwEDtgCdLLYBAbYAnbYAq7cA6r8qtAD0LLkBBwIAPh2ZABsqtAD0uQEKAQAEpAAOuwDn
WRMBDLcA6r8dmQAIKgO3AQ8qtACzOgQqASulAAorwACBpwAHKrQAsbUAsx2ZAAgqtgEUVxkEsAAA
AAIG5QAAAD4ADwAAAOEABwDiABEA5AAVAOUAIQDmAFQA6ABfAOkAcADrAHsA7QB/AO4AhADwAIoA
8QCeAPIAogDzAKcA9QbmAAAAQAAHEfwAQgcA7PwAJgEI/wASAAUHAAIHAREHAOwBBwERAAEHAAL/
AAMABQcAAgcBEQcA7AEHAREAAgcAAgcAgQsAEQEVARYAAQbkAAAAHQABAAEAAAAFKrQAs7AAAAAB
BuUAAAAGAAEAAAD6ABEBFwEYAAEG5AAABGQABAAMAAACZ7gA8E4qtAD0uQD5AQCZADa7AOdZuwCW
WbcAlxL7tgCdKrQA9LkA/gEAtgEBtgCdEwEDtgCdLbYBAbYAnbYAq7cA6r8qtAD0LbkBBwIANgQV
BJkAGyq0APS5AQoBAASkAA67AOdZEwEMtwDqvyq0ALErpgAUHJoACyq0ALMrpgAIKrQAsbAqtACx
OgUqtACzOgYqtgEdmQAzARkFpQAtGQW2ASCZACUVBJoACCq2ARRXKrQAy7kBJQEAKgO2ASgVBJoA
CCoDtwEPFQSZAAgqA7cBDxyZAA4qtACzKrQAsaYACyorwACBtQCzKlm0ASsBKrQAsaUADysqtACx
pQAHBKcABAOAtQErKivAAIG1ALEqtgEdmQFRASq0ALGlAUkqtACxtgEgmQE/AzYHAToIKgS2AS42
BwMVB6ABIioZBrUAsyoZBbUAsSq0ALG2ASCZAAkqBLYBLlcVBJoACCoDtwEPuwCWWbcAlxMBMLYA
nSu2ATO2AKs6CQEZCKUAD7sA51kZCRkItwE2v7sA51kZCbcA6r86CRkJOggDFQegAL4qGQa1ALMq
GQW1ALEqtACxtgEgmQAJKgS2AS5XFQSaAAgqA7cBD7sAllm3AJcTATC2AJ0rtgEztgCrOgkBGQil
AA+7AOdZGQkZCLcBNr+7AOdZGQm3AOq/OgoDFQegAFsqGQa1ALMqGQW1ALEqtACxtgEgmQAJKgS2
AS5XFQSaAAgqA7cBD7sAllm3AJcTATC2AJ0rtgEztgCrOgsBGQilAA+7AOdZGQsZCLcBNr+7AOdZ
GQu3AOq/GQq/FQSaAAgqA7cBDxkFsAAEAS4BNQGTARoBLgE1AfcAAAGTAZkB9wAAAfcB+QH3AAAA
AgblAAABBgBBAAABAAAEAQEAEAECAEMBBABPAQUAYQEHAGwBCQCAAQoAhQEMAIsBDQCRAQ4ApgEP
AKsBEACwARMAuQEUAL4BFQDDARYAyAEZAM0BGgDSARwA4QEdAOkBHwEHASABDwEhASgBIgErASMB
LgElATUBKQE7ASsBQQEsAUcBLQFRAS4BVwEwAVwBMQFhATMBdwE0AX0BNQGJATcBkwEmAZUBJwGZ
ASkBnwErAaUBLAGrAS0BtQEuAbsBMAHAATEBxQEzAdsBNAHhATUB7QE3AfcBKQH/ASsCBQEsAgsB
LQIVAS4CGwEwAiABMQIlATMCOwE0AkEBNQJNATcCWgE7Al8BPAJkAT8G5gAAAL8AGfwAQwcA7PwA
KAETBP0AKgcAgQcAgRcJDgf/ABgABwcAAgcBEQEHAOwBBwCBBwCBAAIHAAIB/wAAAAcHAAIHAREB
BwDsAQcAgQcAgQADBwACAQH9AFMBBwEaCfwAJwcBOP8ACQAJBwACBwERAQcA7AEHAIEHAIEBBwEa
AAEHARonCfwAJwcBOP8ACQAJBwACBwERAQcA7AEHAIEHAIEBBwEaAAEHARr9ACMABwEaCfwAJwcB
OPoACfkAAvkACQARATkBFgABBuQAAAAdAAEAAQAAAAUqtACxsAAAAAEG5QAAAAYAAQAAAUQAEQE6
ATsAAQbkAAAAHQABAAEAAAAFKrQAsbAAAAABBuUAAAAGAAEAAAFIABEBPAE9AAEG5AAAAF0AAgAD
AAAAHyq0AMtMK7kBQAEATQEspQAPLEwruQFAAQBNp//yK7AAAAACBuUAAAAaAAYAAAFNAAUBTgAM
AU8AEQFQABMBUQAdAVMG5gAAAAwAAv0ADAcBIgcBIhAAEQFBAT0AAQbkAAAAHQABAAEAAAAFKrQA
y7AAAAABBuUAAAAGAAEAAAFYAAEBQgFDAAEG5AAAAP0AAwAEAAAAs7IBRpkAqQEqtADLpQAtuwCW
WbcAlyq0AMu2AUq2AU+2AJ0TAVG2AJ0qtADLtgFStgCdtgCrpwAGEwFUTQErpQAnuwCWWbcAlyu2
AUq2AU+2AJ0TAVG2AJ0rtgFStgCdtgCrpwAGEwFUTrIBWrsAllm3AJcTAVy2AJ0qtgFftgCdEwFh
tgCduAFktgCdEwFRtgCdLLYAnRMBZrYAnS22AJ22AKu2AWuyAVq4AXEqK7UAyyuwAAAAAgblAAAA
HgAHAAABXQAGAV4APAFfAGkBYACmAWEArAFjALEBZAbmAAAAFAAFOEIHATj8ACkHAThCBwE4+gBD
ABEBcgChAAEG5AAAAB0AAQABAAAABSq0AHSsAAAAAQblAAAABgABAAABaQAEAXMAVAACBuQAAAAZ
AAAAAQAAAAGxAAAAAQblAAAABgABAAABdwbnAAAABAABAOcEAQF0AXUAAAABAQ0AVAACBuQAAAAi
AAIAAQAAAAYqA7cBD7EAAAABBuUAAAAKAAIAAAF+AAUBfwbnAAAABAABAOcAAgF2AKkAAQbkAAAA
wAADAAMAAAB8ASq0ALGlAA0qtACxtgF6pwAECUC7AJZZtwCXEwF8tgCdKrYAo7gAp7YAnRMBfrYA
nSq0AYG4AYS2AJ0TAYa2AJ0quAGJtgGMEwGOtgCdASq0ALGlAAcEpwAEA7YBjBMBkLYAnR+4AYS2
AJ0TAVG2AJ0qtAD0tgEztgCrsAAAAAIG5QAAAAoAAgAAAYEAFAGCBuYAAAAiAAQSQAT/AEYAAgcA
AgQAAQcAlv8AAAACBwACBAACBwCWAQACAQ0AvwACBuQAAAMlAAQABwAAAdWyAZOZADCyAVq7AJZZ
twCXuAFktgCdEwGVtgCdG7YBjBMBl7YAnSq3AZm2AJ22AKu2AWsqtAD0uADwuQEHAgCaAGW7AJZZ
twCXuAFktgCdEwGbtgCdG7YBjBMBUbYAnSq3AZm2AJ22AKtNsgGemQAusgFaLLYBawEqtAB4pQAW
sgFaEwGgtgGjKrQAeLYBpqcADLIBWhMBqLYBa7sA51kstwDqvwFNG5oAECq0APS5AQoBAASgABAJ
KrQBgZSZAAcEpwAEAz4dmQAYG5oAECoDtgGrpwAIOgQZBE0qtgGuHZkABwG4AbIqtAD0uQG1AQAq
tACxtgG4sgGemQDJuwCWWbcAl7gBZLYAnRMBurYAnR2ZAAkTAbynAAYTAb62AJ0TAcC2AJ0qtwGZ
tgCdtgCrOgQquwEaWRkEtwHBtQB4sgGTmQALsgFaGQS2AWunAHY6BR2ZAAcBuAGyKrQA9LkBtQEA
KrQAsbYBuLIBnpkAU7sAllm3AJe4AWS2AJ0TAbq2AJ0dmQAJEwG8pwAGEwG+tgCdEwHAtgCdKrcB
mbYAnbYAqzoGKrsBGlkZBrcBwbUAeLIBk5kAC7IBWhkGtgFrGQW/ASylAA+7AOdZEwHDLLcBNr+x
AAMAzgDTANYBGgDGAN8BUAAAAVABUgFQAAAAAgblAAAArgArAAABhQAGAYYAMwGIAEIBiQBqAYoA
cAGLAHcBjAB/AY0AiAGOAJIBkACbAZMApAGWAKYBlwDGAZkAygGaAM4BnADTAZ8A1gGdANgBngDb
AaEA3wGlAOMBpgDnAagA8AGpAPcBqgD9AasBMgGsAT8BrQFFAa4BTQGxAVABpQFWAaYBWgGoAWMB
qQFqAaoBcAGrAaUBrAGyAa0BuAGuAcABsQHDAbMByAG0AdQBtgbmAAAAcgAVM/wAXgcBOAj6AAj8
ABIHARoMQAH/ABAABAcAAgEHARoBAAEHARoEAwdyBwCW/wACAAQHAAIBBwEaAQACBwCWBwE4L0IH
ARr9AAkABwEacgcAlv8AAgAGBwACAQcBGgEABwEaAAIHAJYHATgv+QACEAbnAAAABAABAOcEBAGs
AFQAAQbnAAAABAABAOcAEQHEAFQAAQbkAAADjgAEAAcAAAJJsgGemQAmsgFauwCWWbcAl7gBZLYA
nRMBxrYAnSq3AZm2AJ22AKu2AWsJKrQBgZSZAhQBKrQAsaYAIrsA51m7AJZZtwCXEwHItgCdKrYB
ybYAnbYAq7cA6r8qtACxtgHMPAQboQAiuwDnWbsAllm3AJcTAc62AJ0qtACxtgEztgCrtwDqvwFN
KrQAsbYBIJoAIrsA51m7AJZZtwCXEwHQtgCdKrYBybYAnbYAq7cA6r8qtAD0uQHSAQCyAZ6ZADkq
tAD0uQEKAQAFpAAssgFauwCWWbcAl7gBZLYAnRMB1LYAnSq3AZm2AJ22AKu2AWuyAVq4AXEqtAD0
uQEKAQAEoAAqAyq2ARSgACK7AOdZuwCWWbcAlxMB1rYAnSq2Acm2AJ22AKu3AOq/KgO2ASinAAZO
LU0DKrQAdJ8ANQS8ClkDKrQAdE9OKrQAy7kB2AEAuQHcAQA6BBkEA7kB4gIAGQQELQO5AeYEACoD
tQB0KrQAcAO2AekqtAD0uQEKAQAEpAAIKgS3AQ8qtgHsKgm1AYEqAbUAcCq4Ae+ZAA4quAC7mgAH
KrgB8ioDtgHzKrQA9LkBtQEAsgGemQBgsgFauwCWWbcAl7gBZLYAnRMB9bYAnSq3AZm2AJ22AKu2
AWunADo6BSq0APS5AbUBALIBnpkAJrIBWrsAllm3AJe4AWS2AJ0TAfW2AJ0qtwGZtgCdtgCrtgFr
GQW/KrQAsbYBuKcADzoGKrQAsbYBuBkGvwEspQAPuwDnWRMB9yy3ATa/pwAIKgO2AfOxAAUBKQEu
ATEBGgD1Aa0B4gAAAeIB5AHiAAAAhwIZAiMAAAIjAiUCIwAAAAIG5QAAANIANAAAAbwABgG9ACkB
vwAyAcAAOgHBAFkBwwBhAcQAZgHGAIUByACHAcoAkQHLALABzwC5AdAAvwHRAMwB0gDvAdMA9QHY
AQIB2QEKAdoBKQHeAS4B4QExAd8BMgHgATQB4gE8AeMBRwHkAVcB5QFfAeYBaQHnAW4B6QF2AeoB
gwHsAYgB7gGMAe8BkQHwAZYB8gGkAfMBqAH1Aa0B9wG2AfgBvAH5AeIB9wHtAfgB8wH5AhkB/QIg
Af4CIwH9Ai8B/wI0AgACQAICAkMCAwJIAgUG5gAAADMAEykv/AArAfwAKgcBGvsARDNHBwEaAjkZ
H3kHARr+ADMAAAcBGvgAAkkHARoL+QAQAgQEBAHqAFQAAQbnAAAABAABAOcAEQH4AfkAAgbkAAAA
xAAEAAUAAABdK7YB+gmUmgAOuwDnWRMB/LcA6r8qtgH9CZSaAA67AOdZEwH/twDqvyq0ALG2Acw+
BB2hAA67AOdZEwIBtwDqvyorHLYCBCq0ALG2AbinAA86BCq0ALG2AbgZBL+xAAIAQABGAFAAAABQ
AFIAUAAAAAIG5QAAADIADAAAAgoACQILABQCDQAdAg4AKAIRADACEgA1AhQAQAIXAEYCGQBNAhoA
UAIZAFwCGwbmAAAADQAFFBP8ABcBTwcBGgsG5wAAAAQAAQDnBAQCAgH5AAEG5wAAAAQAAQDnABQA
QADjAAEG5AAAAB0AAQABAAAABSq0AHasAAAAAQblAAAABgABAAACIQARARIAoQACBuQAAAAeAAIA
AQAAAAYqA7YBLqwAAAABBuUAAAAGAAEAAAJKBucAAAAEAAEA5wAUARIBLAACBuQAAAY4AAgACgAA
A+4BKrQAsaUABwSnAAQDPbIBk5kAJrIBWrsAllm3AJe4AWS2AJ0TAgi2AJ0qtwGZtgCdtgCrtgFr
HJoALrIBnpkAJrIBWrsAllm3AJe4AWS2AJ0TAgq2AJ0qtwGZtgCdtgCrtgFrA6wqtACxtgHMPgQd
oQAusgGemQAmsgFauwCWWbcAl7gBZLYAnRMCDLYAnSq3AZm2AJ22AKu2AWsDrAQ2BAM2BSq0ALG2
ASCZAfIqtAD0uQHSAQAJKrQAsbYBepSaAJMqtAB2mgCMsgFGmQAfsgFauwCWWbcAl7gBZLYAnRMC
DrYAnbYAq7YBayoQFrYCEpkAJLsA51kTAhQFvQCfWQMQFrgCGFNZBCq2AclTuAIctwDqvyq0ALG2
AiA6BhkGwQIimQATGQbAAiIRAgC5AiUCAJoAH7sA51kTAikEvQCfWQMqtACxtgIqU7gCHLcA6r+4
Ai46BhkGxgCVGQYqpgCKKrYCMAM2BLIBk5kAJrIBWrsAllm3AJe4AWS2AJ0TAjK2AJ0qtwGZtgCd
tgCrtgFrBDYHFQSZAEOyAZ6ZADSyAVq7AJZZtwCXuAFktgCdEwI0tgCdFQW4Aje2AJ0TAVG2AJ0q
tAD0tgEztgCrtgFrKrQA9LkBtQEAFQSZAAoqtACxtgG4FQesGQa2AjkqHbcCPTYFAxUFoAAHBKcA
BAM2BBUEmQCYsgGemQA0sgFauwCWWbcAl7gBZLYAnRMCNLYAnRUFuAI3tgCdEwFRtgCdKrQA9LYB
M7YAq7YBayq0APS5AbUBAKcAVToGBDYEGQa/OggVBJkAQ7IBnpkANLIBWrsAllm3AJe4AWS2AJ0T
AjS2AJ0VBbgCN7YAnRMBUbYAnSq0APS2ATO2AKu2AWsqtAD0uQG1AQAZCL8VBJkAJiq0ALG2Abin
ABw6BgQ2BBkGvzoJFQSZAAoqtACxtgG4GQm/AxUFnwDcCSq0ALG2AXqUmgBbKrQAdpoAVCoQFrYC
EpkAJLsA51kTAhQFvQCfWQMQFrgCGFNZBCq2AclTuAIctwDqv7IBRpkAH7IBWrsAllm3AJe4AWS2
AJ0TAj+2AJ22AKu2AWsqBLUAdiq4AbIFFQWgAGAqtABwKrYCQrYCRbICSJkALSoTAkoBKrQAywG4
AlC2AlJXKrQAcLYCVZkAEiq0AHC7ABNZBLcCV7YCW7ICXpkAHSoTAmABKrQAywS9AJ9ZA7IBWlO4
AlC2AlJXBDwbmQAIKgS2ASgqBLYBq7IBk5kARLIBWrsAllm3AJe4AWS2AJ0TAmK2AJ0VBbgCN7YA
nRMCZLYAnSq0AG62AmW2AYwTAcC2AJ0qtwGZtgCdtgCrtgFrFQWsAAoAtwGWAksCBgHqAgMCSwIG
ALcBlgJTAAAB6gIDAlMAAAJLAlUCUwAAAKQB2wKsAgYB6gKdAqwCBgCkAdsCtAAAAeoCnQK0AAAC
rAK2ArQAAAACBuUAAAFeAFcAAAJOAA4CTwAUAlAANwJSADsCUwBBAlQAZAJWAGYCWgBuAlsAcwJc
AHkCXQCcAl8AngJiAKECYwCkAmUArgJmALcCaADKAmkA0AJqAOwCbAD1Am0BBAJuAQ8CbQEWAnEB
HwJyAS8CcwE3AnQBUwJ5AVgCegFdAnsBYwJ+AWcCfwFqAoABcAKBAZMCgwGWApYBmwKXAaECmAHS
ApoB2wKiAeACowHqAoUB7wKIAfYCiQIDApYCCAKXAg4CmAI/ApoCSwKSAk0CkwJQApQCUwKWAloC
lwJgApgCkQKaAp0CogKiAqMCrAKeAq4CnwKxAqACtAKiArsCowLFAqcCywKoAt4CqQLnAqoC9gKr
AwECqgMIAq0DDgKuAyoCsAMvArIDMwKzAzkCuANEAroDSgK7A1sCvANlAr0DdALAA3oCwQOUAsQD
lgLHA5oCyAOfAssDpALWA6oC1wPrAtkG5gAAAIQAJgxAAfwAKQEsAfwANQEB/QBNAQEp/AAgBwIn
+gAb/AA/BwAE/AA+AQgL+gACBBBAAfoAPUsHAgZHBwEa/gA9AAAHARoI+AACTgcCBkcHARr/AA0A
CgcAAgEBAQEBAAAABwEaAAD/AAIABgcAAgEBAQEBAAD7AEIhBPsARB8BCAT7AEYG5wAAAAQAAQDn
ABICZgJnAAEG5AAAAEEAAgACAAAAEyq4AmvAAAJMKiulAAcrpwAEAbAAAAACBuUAAAAKAAIAAALd
AAgC3gbmAAAADAAC/AARBwACQAcAAgASAjoCOwACBuQAAATDAAYACgAAAuMqtgEdmgLZAyq0ALG2
Am6iAA4DKrQAsbYCcaEAS7IBnpkAQ7IBWrsAllm3AJe4AWS2AJ0TAnO2AJ0qtgFKtgJ0tgCdEwHA
tgCdKrcBmbYAnbYAq7YBa7IBWiq0ALG2Aiq2AWsDrLICSJkADipZtADPECCAtQDPKrcCdk4BLaUA
LQQttACxtgHMoQAiuwDnWbsAllm3AJcTAni2AJ0ttACxtgEztgCrtwDqvwEtpQA2LbYB/TcECRYE
lJoAH7sA51m7AJZZtwCXEwJ6tgCdLbYBM7YAq7cA6r8qFgS2An49pwAJKgm2An49HJkAQSq2AoGZ
ADoEvAo6BCq0AMu5AdgBADoFGQW5AdwBADoGGQYEGQQDuQKEBAAqGQQDLrUAdBkGKrQAdLkB4gIA
AS2lAB4ttACxtgG4pwAUOgcBLaUACi20ALG2AbgZB7+yAZ6ZAFmyAVq7AJZZtwCXuAFktgCdEwKG
tgCdHJkACRMCiKcABhMCirYAnRMCjLYAnSq2AUq2AnS2AJ0TAcC2AJ0qtgFftgCdEwHAtgCdKrcB
mbYAnbYAq7YBaxyaAAUDrCq0ALG2AiC5ApABADoEGQS5ApYBALkCnAEAOgUZBbgCoJoBCQMqtAKj
EAh+oAD+KrQCp7ICqrYCsJ0ACQU2BqcADCq0Aqe2ArU2BgMqtAKjB36fAAwHNgcDNginAAkFNgcE
NggZBRUGFQcqtAKnKrQCoyq0Arm4Ar06CRUImQBlGQUVBgcqtAKnKrQCoyq0Arm4Ar1XFQYHoQAs
GQUGFQcqtAKnKrQCoyq0Arm4Ar1XGQUGByq0AqcqtAKjKrQCubgCvVcVBgahADYZBQUVByq0Aqcq
tAKjKrQCubgCvVenAB4VBgehABgZBQYVByq0AqcqtAKjKrQCubgCvVcZBQS4AsGyAUaZACSyAVq7
AJZZtwCXuAFktgCdEwLDtgCdGQm2ATO2AKu2AWsquALGVwWsKrYCyQSsAAIAqgEqATkAAAE5ATsB
OQAAAAIG5QAAAP4APwAAAuEABwLiAB0C4wAjAuQAVgLlAGMC5wBlAukAawLrAHYC7wB7AvAAgALx
AIsC8gCqAvYArwL3ALUC+AC8AvkA2AL7AN8C/ADiAv0A6AL/APMDAAD4AwEBAwMCAQwDAwEXAwQB
HwMFASoDCAEvAwkBOQMIAUADCQFKAwwBUAMNAaYDEAGqAxEBrAMWAboDFwHIAxoB0AMbAdsDHgHo
Ax8B7gMhAfcDJAIBAyUCBAMmAgoDKAINAykCEAMrAicDLQIsAy8CQQMwAkcDMQJcAzICcAM0AnYD
NQKOAzkClAM6AqkDPQKvAz8CtQNAAtYDRQLbA0YC3QNIAuEDSQbmAAAAugAZHfsARQEQ/QAzAAcA
AvwALQT6AAn/AAUABAcAAgEBBwACAAD7AEH/AA4ABAcAAgEABwACAAEHARr/AA0ACAcAAgEABwAC
AAAABwEaAAD/AAIABAcAAgEBBwACAAD/ACUABAcAAgEBBwACAAIHAWgHAJb/AAIABAcAAgEBBwAC
AAMHAWgHAJYHATgyBf0AQQcCkgcCsvwACAES/QAFAQH8AF8HAAodGv8ALAAEBwACAQEHAAIAAPkA
BgbnAAAABAABAOcEBALHAFQAAQbnAAAABAABAOcABAEmAL8AAQbkAAAAJgADAAIAAAAKKrQAsSob
tgLNsQAAAAEG5QAAAAoAAgAAA1EACQNSAAQBqQC/AAEG5AAAACYAAwACAAAACiq0ALEqG7YCz7EA
AAABBuUAAAAKAAIAAANYAAkDWQQEAnsCfAABBucAAAAEAAEA5wQEAtAC0QAABAQC0gLTAAAAFALU
Ap4AAQbkAAAAPAACAAIAAAAVsgLZmgAQKxAVuALdmgAHBKcABAOsAAAAAgblAAAACgACAAADnQAJ
A54G5gAAAAUAAhNAAQAUAt4C3wABBuQAAABEAAIAAwAAACgrEBW4At09uwCWWbcAlxMC4bYAnbIC
2bYBjBMC47YAnRy2AYy2AKuwAAAAAQblAAAACgACAAADoQAHA6IAFALkAuUAAQbkAAACUwAIAA4A
AAGCKrQAsbYCILkCkAEAOgQZBLkClgEAuQKcAQA6BRkEuQLpAQDAAus6BhkGuQLvAQA6B7IBRpkA
N7IBWrsAllm3AJe4AWS2AJ0TAvG2AJ0ZBbkC9AEAtgCdEwFhtgCdGQW4AqC2AYy2AKu2AWsZBbgC
oJoADioZBbcC95oABQmtBbwKWQMDT1kEA086CBkHGQi4AvuyAUaZADqyAVq7AJZZtwCXuAFktgCd
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
KrQCp7YCtQehAFsrBwcqtAKnKrQCoyq0Arm4Ar1XBDYMsgFGmQA/sgFauwCWWbcAl7gBZLYAnRMD
uLYAnRANuAIYtgCdEwO6tgCduAOptgEzEwO8tgCduAOttgEztgCrtgFrKgO2AfMVBJkAeLIDs5oA
crIDtpoAbBUMmgBGKisHBxUFtwOeNgwVCBUMgDYIFQyZAC8DEEAqtAKjfqAAHysGByq0AqcqtAKj
KrQCubgCvVeyA6GZAAYENg0qA7YB8xUNmgAfKisGBxUFtwOeNg0VCBUNgDYIFQ2ZAAgqA7YB8xUE
mQEhsgOzmgEbFQmaAJIqKwcFFQW3A542CRUIFQmANggVCZkAexUMmgAZKwcHKrQCpyq0AqMqtAK5
uAK9VwQ2DBUNmgAZKwYHKrQCpyq0AqMqtAK5uAK9VwQ2DQMQQCq0AqN+oAA1KwYFKrQCpyq0AqMq
tAK5uAK9VysFBSq0AqcqtAKjKrQCubgCvVeyA6GZAAkENgoENgsqA7YB8xUKmgBhKisGBRUFtwOe
NgoVCBUKgDYIFQqZAEoVDZoAGSsGByq0AqcqtAKjKrQCubgCvVcENg0DEEAqtAKjfqAAHysFBSq0
AqcqtAKjKrQCubgCvVeyA6GZAAYENgsqA7YB8xULmgAfKisFBRUFtwOeNgsVCBULgDYIFQuZAAgq
A7YB8xUImQAIKwS4AsGyAUaZAGq4A5c3EbIBWrsAllm3AJe4AWS2AJ0TA762AJ0VCLYBjBMDlLYA
nSu2ATMTA8C2AJ2yA6G2AYwTA8K2AJ0WERYGZYoUA8NvtgPHEwPJtgCdtgCrtgFrFQiZABCyAVoB
uAPNtgCrtgFrFQgsw6w6EyzDGRO/AAIABgQ3BDgAAAQ4BDwEOAAAAAIG5QAAAboAbgAABF8ABgRg
ABEEYQAdBGIAKQRjAC8EZABvBGYAfgRnAIEEaQCEBGoAhwRrAIoEbACNBG0AkARuAJMEbwCWBHAA
mQRyAKMEcwCoBHQAtAR1ALsEdgDABHcAywR5AN8EegDlBHsA6AR+AO0EgQDyBIIA/gSDAQUEhAEK
BIUBHgSGATIEiAE3BIsBPASMAUgEjQFPBI4BVASPAVkElwFiBJgBbgScAYkEnQGUBJ4BmwSfAaAE
oAGyBKEBwgSjAdUEpAHYBKUB3gSmAhoEqQIfBK0CMASuAjUErwJABLACRwSxAkwEsgJXBLQCagS1
AnAEtgJzBLkCeAS8An0EvQKIBL4CjwS/ApQEwAKZBMQCpATFAqkExgK0BMcCuwTIAsAEyQLFBMoC
2ATLAtsEzQLgBM4C8wTPAvYE0QMBBNMDFATUAycE1QMtBNYDMATXAzME2gM4BN0DPQTeA0gE3wNP
BOADVAThA1kE4gNsBOMDbwTlA3oE5wONBOgDkwTpA5YE7AObBO8DoATwA6sE8QOyBPIDtwTzA7wE
9wPBBPkDxgT7A8wE/APRBP0EIQT+BCYE/wQzBQIEOAUDBuYAAABtABr/AG8ABgcAAgcCsgcAnwEB
AQAAC0AE/wBrABAHAAIHArIHAJ8BAQEEAQEBAQEBAQEBAAAE+wBEBCH7AFVAAfwAaQH6AAT7AFME
IPsAQRo8BDYmBCAJ+wBs/wAEAAMHAAIHArIHAJ8AAQcBGgASA5sDnAABBuQAAANfAAsAEAAAAhoE
HYA2BwS8CjoMBLwKOg0VBJkAYRAIHaAAGBw2CBUHFQi4A9E2CRw2CgM2C6cAjwccoAAYBzYIFQcV
CLgD0TYJBzYKAzYLpwB1BhygABgGNggVBxUIuAPRNgkGNgoENgunAFsGNggDNgkFNgoDNgunAEwQ
CB2gABIcNggDNgkcNgoDNgunADcHHKAAEgc2CAM2CQc2CgM2C6cAIwYcoAASBjYIBDYJBjYKBDYL
pwAPBTYIAzYJBTYKAzYLKgkEFQcVCBUJFQoVCxkMGQ23A9U3BQkWBZSaAGMHHaAAXrIDoZoAWBUH
EPt+NgcVBxAQgDYHKgkEFQcVCBUJFQoVCxkMGQ23A9U3BQkWBZSaAC0VBxD7fjYHFQcQ7342BxUH
BYA2ByoJBBUHFQgVCRUKFQsZDBkNtwPVNwUJFgWUmQBfKxwdKrQCpyq0AqMqtAK5uAK9Og8qFgW2
A9eyAUaZADmyAVq7AJZZtwCXuAFktgCdEwPZtgCdGQ+7AJZZtwCXFQoVCxUIFQm2A9y2AKu2AJ22
AKu2AWsENg6nAH+yAUaZAHayAVq7AJZZtwCXuAFktgCdEwPetgCdK7YBMxMBUbYAnRy2A14TA+C2
AJ27AJZZtwCXHbgD47YAq7YAnRMD5bYAnRUItgNeEwPntgCdFQm2A14TA+m2AJ0VCrYDXhMD57YA
nRULtgNeEwPrtgCdtgCrtgFrAzYOFQ6sAAAAAgblAAAAvgAvAAAFDQAFBRQACgUVAA8FFwAUBRgA
GgUaACYFGwAvBR0ANAUeAEAFHwBJBSAATgUhAFoFIgBjBSYAaQUnAHIFKwB4BS0AfgUuAIcFMACM
BTEAkgUyAJsFMwCgBTQApgU1AK8FOQC1BToAuwU+ANEFQwDjBUUA6gVGAPEFRwEHBUsBDgVNARUF
TgEcBU8BIgVQATgFVwE/BVoBUwVbAVkFXAFfBV0BlQVfAZgFYAGbBWEBoQViAhQFZAIXBWYG5gAA
AG8ADf8ALwAOBwACBwKyAQEBAAABAAAAAAcDAQcDAQAAGRkOFBMT/wALAA4HAAIHArIBAQEAAAEB
AQEBBwMBBwMBAAD/AHwADQcAAgcCsgEBAQQBAQEBAQcDAQcDAQAA/QBcAAcACvkABfsAePwAAgEA
EgPSA9MAAQbkAAAB/AAIAA4AAAGJGQkDFQVPGQoDFQZPCTcLAzYNsgFGmQCHhA0BsgFauwCWWbcA
l7gBZLYAnRMD7bYAnRUNtgNeEwPvtgCdH7YD8hMD9LYAnR22AYwTA/a2AJ0ZCQMutgNeEwPntgCd
GQoDLrYDXhMD+LYAnRUFtgNeEwPntgCdFQa2A14TA+m2AJ0VB7YDXhMD57YAnRUItgNeEwPrtgCd
tgCrtgFrKh8dFQQZCQMuGQoDLrYDCTcLCRYLlJkAIyoEGQkDLhkKAy4VBAQEtgMNmQAGpwAzKhYL
tgPXCTcLGQkDLhUHowAVGQkDLhUHoAAYGQoDLhUIpAAPFQQZCRkKuAP8mv8ZsgFGmQCHsgFauwCW
WbcAl7gBZLYAnRMD/rYAnRYLuAGEtgCdEwQAtgCdH7YD8hMD9LYAnR22AYwTA/a2AJ0ZCQMutgNe
EwPntgCdGQoDLrYDXhMD+LYAnRUFtgNeEwPntgCdFQa2A14TA+m2AJ0VB7YDXhMD57YAnRUItgNe
EwPrtgCdtgCrtgFrFgutAAAAAgblAAAASgASAAAFbQAGBW4ADAVvAA8FcAASBXMAGAV0ABsFdQCc
BXgArgV6ALUFewDJBXwAzAV+ANIFfwDVBYMA9gWEAPwFhgECBYcBhgWKBuYAAAARAAf9ABIEAfsA
iS8IGgv7AIkAEgQBBAIAAQbkAAABOQAGAAcAAADIAx2gADa7AOdZuwCWWbcAlxMEBLYAnRu2A14T
A+e2AJ0ctgNeEwQGtgCdHbgAp7YAnbYAq7cA6r8quwKsWRscA7cECbUCpyobHB0qtADZuAQKtQQN
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
tgCdEwUKtgCdGRG2AKO4AKe2AJ0TBSi2AJ0ZEbYFK7YDXrYAq7YBa6cAkSq7BSRZtwUstQDHKhwd
FQQZDwO3BS4qtADHKrYFMbIE/1k6EsKyAFYqtADNKrQAx7YFGleyAUaZAEmyAVq7AJZZtwCXuAFk
tgCdEwUztgCdKrQAzbYAnRMFCrYAnSq0AMe2AKO4AKe2AJ0TBSi2AJ0qtADHtgUrtgNetgCrtgFr
GRLDpwALOhcZEsMZF78VDJkAUBwGoQAzFQQRDACANgQVBBFAAIA2BB0FoQAOFQQRMACANgSnAPAd
BKEA6xUEERAAgDYEpwDgHAWhANsVBBEEAIA2BBUEEUAAgDYEpwDIHAejABwcB6AACB0IogASHAaj
AA0cBqAAQh0EoQA9KhMFNbYFOZkADhUEETAAgDYEpwAVKhMFO7YFOZkACxUEERAAgDYEFQQRDACA
NgQVBBFAAIA2BKcAcBwHowAmHAegAAgdBqIAHBwGowANHAagACUdBKEAICoTBT22BTmZABYVBBEM
AIA2BBUEEUAAgDYEpwA1KhMFP7YFOZkAFhUEEQQAgDYEFQQRQACANgSnABgcFQQqtADHuAVDmQAL
FQQRQACANgQVDJkACBwEnwANKhMFRbYFOZkACxUEEwVGgDYEsgVJmQALFQQRv/9+NgQqHB0VBBkP
BLcFLioqtADLtwVLKrYFTiq0AMu5BVEBADYRsgFGmQBTsgFauwCWWbcAl7gBZLYAnRMFU7YAnSq0
AM22AJ0TAcC2AJ0qtAKntgK1KrQCp7YDFiq0AqMBuAMAtgCdEwVVtgCdFRG4AKe2AJ22AKu2AWsE
rAAIBc4GyAbLAAAGywbQBssAAAfbCL0IwAAACMAIxQjAAAAJZAl2CXkAAAl5CX4JeQAACf0KWwpe
AAAKXgpjCl4AAAACBuUAAALuALsAAAbHABQGyAAWBssAJQbMAEgGzwBWBtAAZAbRAGgG0gB0BtUA
fQbWAIIG1wCqBtgArwbaALUG2wDQBt0A0gbgANwG4wDnBuQA7QblARYG5gEqBuUBLQbsAT0G8QFD
BvIBgAcAAZAHAQGiBwIBqgcDAbwHBAHCBwUB8AcHAgIHEAIJBxECHAcSAkgHGgJOBxsCjQcdAo8H
IAKVByECmwciAp4HIwKhByQCpAcmAqcHJwKqBywCrwctArUHMAK7BzEC6Qc1Au8HPgL2Bz8DCQdA
AzUHSAM7B0kDegdLA3wHTQOLB04DkQdPA9AHUQPSB1QD2AdVA94HVgPhB1cD5AdYA+cHWwPxB1wD
9wddBCsHXwQtB2EEMwdiBEsHYwRnB2QEkQdiBJQHaASZB2kEoQdtBKgHbgSvB3EEuAdzBMQHdATW
B3ME2Qd3BOoHeATwB3kFJwd7BSkHfgU2B38FPAeABXMHggV8B4MFggeEBYgHhQWvB4cFsQeJBbsH
kAXEB5IFxweTBc4HlAXdB5UF4weWBfUHlwYmB5gGRweaBloHmwaLB5wGxQefBtMHoAbZB6EG3wei
BuUHowbqB6QHIAelBz0HpAdDB6cHeQeoB6QHpweqB6wHygeuB9QHsAfbB7EH6geyB/AHswf1B7QI
LQe1CEwHtAhSB7cIige4CLcHtwi6B7sIyAe+COQHvwjzB8EJCAfCCTQHwwldB8wJZAfNCXMHzgmB
B88JhwfQCY0H0QmTB9IJ2AfVCeMH1gnuB9cJ9gfYCf0H2QoMB9oKEgfbClgH3QpmB+EKawfiCnAH
4wp4B+QKgAflCoUH5gqQB+cKlQfoCqAH6gqlB+sKrQfsCrgH7grWB/IK4AfzCusH9Ar1B/UK/Qf3
CwUH+AsQB/kLMgf6CzgH/QtAB/4LSwf/C1UIAAtdCAELaAgCC3UIAwt9CAYLkQgHC5kICgufCAsL
pwgRC7IIEwu6CBULvggXC8kIGQvPCBoMHwgcBuYAAAGNAFMWMf8AhwAOBwACAQEBAQEBBwKSBwKy
AQcCrAABBwE4AAAB+gAJ/wBQAAwHAAIBAQEBAQEHApIHArIBBwKsBwKsAAAMQAH8AEQBD/8AXwAR
BwACAQEBAQEBBwKSBwKyAQcCrAcCrAEABwKsBwMBBwMBAAD8ACcBCRUJBfsARAH6ABH/AAIADwcA
AgEBAQEBAQcCkgcCsgEHAqwHAqwBAQcCrAAA+QAC/AACAQoz/QAbAAEJFQkF+wBEAfsAUwH5ABH8
AAIB+wBDAfsAZgwN/AB3BwTvAfsASfwAOwcE+gH+AJUHAtYHBQIHAJ/7AH1FBwEa+gAH+wBv+wBm
/ACnBwCf+wBnRQcBGvoABxsO+QBp/wAbABMHAAIBAQEBAQEHApIHArIBBwKsBwKsAQEBBwTvBwT6
AAcAnwABBwEa/wAHABIHAAIBAQEBAQEHApIHArIBBwKsBwKsAQEBBwTvBwT6BwUkAAD7AFb8AH8H
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
CrgFkhURmQBpKrQA1RMF2rYFcZkAXBkJGRe2BZicAFKyAUaZAEWyAVq7AJZZtwCXEwWDtgCdEAu4
Ahi2AJ0TA7q2AJ24A6m2ATMTBdy2AJ0qtADVtgCdEwXQtgCdGQm2ATO2AKu2AWsZFhALtgVasgXf
mQA0sgFGmQAnsgFauwCWWbcAlxMFg7YAnRASuAIYtgCdEwXhtgCdtgCrtgFrGRYQErYFWrIF5JoA
DRkWEBK2BOuZAGKyAUaZAFWyBeSZAAkTBeanAAUS0ToYGRYQErYE65kACRMF6KcABRLROhmyAVq7
AJZZtwCXEwWDtgCdEAu4Ahi2AJ0TBeq2AJ0ZGLYAnRkZtgCdtgCrtgFrGRYQC7YFWrIBRpkAHrIB
WrsAllm3AJcTBey2AJ0ZFrYBM7YAq7YBaysZFrgF8Cy2BfM6FxkXK7gF95oAChkXGRa4BfAVD5kA
JbgF+rYF+zoYGRgruAX3mgAUGRgZF7gF95oAChkYGRa4BfAqGRa1ArmyAUaZAEeyAVq7AJZZtwCX
EwX9tgCdKrQCubYBM7YAq7YBa7IBWrsAllm3AJcTBf+2AJ0rtgEzEwRTtgCdK7gGA7YBM7YAq7YB
a7EAAAACBuUAAAJ+AJ8AAAg/ABAIQAAfCEEALwhCAEAIQwBQCEQAfghJAIMISgCkCEsAxQhMANQI
TgDXCE8A2ghQAN0IUwDmCFgA6whZAPYIWwD8CFwBLwheATkIYQE/CGMBRQhkAWkIZgFzCGgBeQhq
AX8IawGjCG0BrQhzAbYIeQG8CHoB5Qh8AesIgAHxCIECGwiDAiIIhQI5CIcCPwiIAooIigKUCIwC
mQiNAqcIjgKyCJACuAiRAvsIkwMCCJUDDgiXAxQImANXCJoDXgicA2EInQNmCKMDbAikA5UIpgOb
CKkDoAiqA6wIqwO6CK0DxAivA8oIsAQZCLIEIAi1BCsItwQxCLgEhwi6BI4IvQSZCL4Epgi/BL4I
wQTECMIFGwjEBSUIxwU6CMkFQAjKBYoIzAWUCM4FnQjTBaoI1QWwCNYF5gjYBewI2gX5CNwF/wjd
BjYI3wY9COYGQgjvBk8I8AZnCPEGbQjyBrYI9AbACPYGxQj4BssI+Qb2CPsHAAj9BwYI/wcMCQAH
MAkCBzcJBgc8CQkHSAkLB04JDAekCQ4HrgkXB7MJGAfACRkHzQkdB9MJHgf9CSAIAwkiCAgJJQgO
CSYIOAkoCEEJKwhLCS0IUQkuCIcJMAiOCTMIpQk2CKsJNwjWCTkI3Qk7CO4JPAj5CT4I/wk/CTUJ
QQk8CUMJSQlHCU8JSAmHCUoJkQlMCa0JTgmzCU8J9QlRCfwJWAoCCVoKCAlbCiwJXQozCV8KQwlh
CkkJYgpZCWMKbQlkCpsJZgqiCWkKqAlqCsMJbgrJCXAKzwlxCtgJcgrfCXQK5Al1CuwJdgr5CXcK
/wl4CwYJfAsMCX0LEgl+Cy8JfwtWCYEG5gAAANEAVQ1AAf4ADQAAAUAB/AAOAUAB/AAPAUAB/AAO
AUAB/AAoAQNAAfwAIAEDQAH8ABsBA0AB+gAQ/gAIAQEB/ABRBwIWCS8JLwk3NfsAbgn8AGYHAqwG
+wBU+gAGAjP9AIMHAqwHAqwG+wBmBvwAjAcCrPgACQL7AGEJ+wBRBfsASQb7AHgJNQkvBvsAbAn9
AE4HAqwHAqw6CPsARQYWMAb7AFcG+wBKCfsAY/kABi8GDxFBBwE4/QARAAcBOEEHATj5AC8GIPwA
GwcCsvoAJvsATwAaBUAFQQABBuQAAAB6AAMAAwAAAEUDGxAIfp8ACBoFogA1GgaiADABLKUALywT
BT+2BgSaACEsEwYGtgYEmgAXLBMGCLYGBJoADSwTBgq2BgSZAAcEpwAEA6wAAAACBuUAAAAWAAUA
AAmEABsJigAlCYwALwmOADkJkAbmAAAABwAEDTEDQAEAEgYLBAcAAQbkAAACBgAGAAsAAAFGKrcE
3poACB0QQIA+KrQAsbYCILkCkAEAOgQZBLkClgEAuQKcAQA6BSoZBRscHbgE87UAzbIBRpkANrIB
WrsAllm3AJe4AWS2AJ0TBg22AJ0qtADNtgCdEwHAtgCdGxwdAbgDALYAnbYAq7YBa7IE/1k6BsKy
AF0qtADNtgYQwAUCOgeyAUaZAEUBGQelAAsZB7YAo6cABAM2CLIBWrsAllm3AJe4AWS2AJ0TBhK2
AJ0qtADNtgCdEwUKtgCdFQi4AKe2AJ22AKu2AWsZBsOnAAs6CRkGwxkJv7IE/1k6BsKyAFYqtADN
tgYQwAUkOgeyAUaZAEUBGQelAAsZB7YAo6cABAM2CLIBWrsAllm3AJe4AWS2AJ0TBhS2AJ0qtADN
tgCdEwUKtgCdFQi4AKe2AJ22AKu2AWsZBsOnAAs6ChkGwxkKv7EABAB0AM4A0QAAANEA1gDRAAAA
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
GAAaABtAGQAdAB8AIAAJ
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>802</attachid>
            <date>2019-03-24 20:54:12 +0100</date>
            <delta_ts>2019-03-24 20:54:12 +0100</delta_ts>
            <desc>Patched version of GLContextImpl</desc>
            <filename>GLContextImpl.java</filename>
            <type>text/x-java</type>
            <size>129551</size>
            <attacher name="Julien Gouesse">gouessej</attacher>
            
              <data encoding="base64">LyoKICogQ29weXJpZ2h0IChjKSAyMDAzIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KICogQ29weXJpZ2h0IChjKSAyMDEwIEpvZ0FtcCBDb21tdW5pdHkuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiAqIG1ldDoK
ICoKICogLSBSZWRpc3RyaWJ1dGlvbiBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgogKgogKiAtIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICogICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAq
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KICoKICogTmVpdGhlciB0aGUgbmFtZSBvZiBTdW4gTWljcm9zeXN0ZW1z
LCBJbmMuIG9yIHRoZSBuYW1lcyBvZgogKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogKgogKiBUaGlzIHNvZnR3
YXJlIGlzIHByb3ZpZGVkICJBUyBJUywiIHdpdGhvdXQgYSB3YXJyYW50eSBvZiBhbnkga2luZC4g
QUxMCiAqIEVYUFJFU1MgT1IgSU1QTElFRCBDT05ESVRJT05TLCBSRVBSRVNFTlRBVElPTlMgQU5E
IFdBUlJBTlRJRVMsCiAqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5UWSBPRiBNRVJDSEFO
VEFCSUxJVFksIEZJVE5FU1MgRk9SIEEKICogUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZS
SU5HRU1FTlQsIEFSRSBIRVJFQlkgRVhDTFVERUQuIFNVTgogKiBNSUNST1NZU1RFTVMsIElOQy4g
KCJTVU4iKSBBTkQgSVRTIExJQ0VOU09SUyBTSEFMTCBOT1QgQkUgTElBQkxFIEZPUgogKiBBTlkg
REFNQUdFUyBTVUZGRVJFRCBCWSBMSUNFTlNFRSBBUyBBIFJFU1VMVCBPRiBVU0lORywgTU9ESUZZ
SU5HIE9SCiAqIERJU1RSSUJVVElORyBUSElTIFNPRlRXQVJFIE9SIElUUyBERVJJVkFUSVZFUy4g
SU4gTk8gRVZFTlQgV0lMTCBTVU4gT1IKICogSVRTIExJQ0VOU09SUyBCRSBMSUFCTEUgRk9SIEFO
WSBMT1NUIFJFVkVOVUUsIFBST0ZJVCBPUiBEQVRBLCBPUiBGT1IKICogRElSRUNULCBJTkRJUkVD
VCwgU1BFQ0lBTCwgQ09OU0VRVUVOVElBTCwgSU5DSURFTlRBTCBPUiBQVU5JVElWRQogKiBEQU1B
R0VTLCBIT1dFVkVSIENBVVNFRCBBTkQgUkVHQVJETEVTUyBPRiBUSEUgVEhFT1JZIE9GIExJQUJJ
TElUWSwKICogQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBPUiBJTkFCSUxJVFkgVE8gVVNFIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYKICogU1VOIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KICoKICogWW91IGFja25vd2xlZGdlIHRoYXQgdGhpcyBz
b2Z0d2FyZSBpcyBub3QgZGVzaWduZWQgb3IgaW50ZW5kZWQgZm9yIHVzZQogKiBpbiB0aGUgZGVz
aWduLCBjb25zdHJ1Y3Rpb24sIG9wZXJhdGlvbiBvciBtYWludGVuYW5jZSBvZiBhbnkgbnVjbGVh
cgogKiBmYWNpbGl0eS4KICoKICogU3VuIGdyYXRlZnVsbHkgYWNrbm93bGVkZ2VzIHRoYXQgdGhp
cyBzb2Z0d2FyZSB3YXMgb3JpZ2luYWxseSBhdXRob3JlZAogKiBhbmQgZGV2ZWxvcGVkIGJ5IEtl
bm5ldGggQnJhZGxleSBSdXNzZWxsIGFuZCBDaHJpc3RvcGhlciBKb2huIEtsaW5lLgogKi8KCnBh
Y2thZ2Ugam9nYW1wLm9wZW5nbDsKCmltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Cmlt
cG9ydCBqYXZhLm5pby5JbnRCdWZmZXI7CmltcG9ydCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRy
b2xsZXI7CmltcG9ydCBqYXZhLnNlY3VyaXR5LlByaXZpbGVnZWRBY3Rpb247CmltcG9ydCBqYXZh
LnV0aWwuSGFzaE1hcDsKaW1wb3J0IGphdmEudXRpbC5JZGVudGl0eUhhc2hNYXA7CmltcG9ydCBq
YXZhLnV0aWwuSXRlcmF0b3I7CmltcG9ydCBqYXZhLnV0aWwuTWFwOwppbXBvcnQgamF2YS51dGls
LlNldDsKCmltcG9ydCBjb20uam9nYW1wLmNvbW1vbi5FeGNlcHRpb25VdGlsczsKaW1wb3J0IGNv
bS5qb2dhbXAuY29tbW9uLm9zLkR5bmFtaWNMb29rdXBIZWxwZXI7CmltcG9ydCBjb20uam9nYW1w
LmNvbW1vbi5vcy5QbGF0Zm9ybTsKaW1wb3J0IGNvbS5qb2dhbXAuY29tbW9uLnV0aWwuUmVmbGVj
dGlvblV0aWw7CmltcG9ydCBjb20uam9nYW1wLmNvbW1vbi51dGlsLlZlcnNpb25OdW1iZXI7Cmlt
cG9ydCBjb20uam9nYW1wLmNvbW1vbi51dGlsLlZlcnNpb25OdW1iZXJTdHJpbmc7CmltcG9ydCBj
b20uam9nYW1wLmNvbW1vbi51dGlsLmxvY2tzLlJlY3Vyc2l2ZUxvY2s7CmltcG9ydCBjb20uam9n
YW1wLmdsdWVnZW4ucnVudGltZS5Qcm9jQWRkcmVzc1RhYmxlOwppbXBvcnQgY29tLmpvZ2FtcC5n
bHVlZ2VuLnJ1bnRpbWUub3BlbmdsLkdMTmFtZVJlc29sdmVyOwppbXBvcnQgY29tLmpvZ2FtcC5n
bHVlZ2VuLnJ1bnRpbWUub3BlbmdsLkdMUHJvY0FkZHJlc3NSZXNvbHZlcjsKaW1wb3J0IGNvbS5q
b2dhbXAub3BlbmdsLkdMRXh0ZW5zaW9uczsKaW1wb3J0IGNvbS5qb2dhbXAub3BlbmdsLkdMUmVu
ZGVyZXJRdWlya3M7CmltcG9ydCBjb20uam9nYW1wLm5hdGl2ZXdpbmRvdy5BYnN0cmFjdEdyYXBo
aWNzQ29uZmlndXJhdGlvbjsKaW1wb3J0IGNvbS5qb2dhbXAubmF0aXZld2luZG93LkFic3RyYWN0
R3JhcGhpY3NEZXZpY2U7CmltcG9ydCBjb20uam9nYW1wLm5hdGl2ZXdpbmRvdy5OYXRpdmVTdXJm
YWNlOwppbXBvcnQgY29tLmpvZ2FtcC5uYXRpdmV3aW5kb3cuTmF0aXZlV2luZG93RmFjdG9yeTsK
aW1wb3J0IGNvbS5qb2dhbXAubmF0aXZld2luZG93LlByb3h5U3VyZmFjZTsKaW1wb3J0IGNvbS5q
b2dhbXAubmF0aXZld2luZG93LmVnbC5FR0xHcmFwaGljc0RldmljZTsKaW1wb3J0IGNvbS5qb2dh
bXAub3BlbmdsLkdMOwppbXBvcnQgY29tLmpvZ2FtcC5vcGVuZ2wuR0wyRVMyOwppbXBvcnQgY29t
LmpvZ2FtcC5vcGVuZ2wuR0wyRVMzOwppbXBvcnQgY29tLmpvZ2FtcC5vcGVuZ2wuR0wyR0wzOwpp
bXBvcnQgY29tLmpvZ2FtcC5vcGVuZ2wuR0xDYXBhYmlsaXRpZXNJbW11dGFibGU7CmltcG9ydCBj
b20uam9nYW1wLm9wZW5nbC5HTENvbnRleHQ7CmltcG9ydCBjb20uam9nYW1wLm9wZW5nbC5HTERl
YnVnTGlzdGVuZXI7CmltcG9ydCBjb20uam9nYW1wLm9wZW5nbC5HTERlYnVnTWVzc2FnZTsKaW1w
b3J0IGNvbS5qb2dhbXAub3BlbmdsLkdMRHJhd2FibGU7CmltcG9ydCBjb20uam9nYW1wLm9wZW5n
bC5HTERyYXdhYmxlRmFjdG9yeTsKaW1wb3J0IGNvbS5qb2dhbXAub3BlbmdsLkdMRXhjZXB0aW9u
OwppbXBvcnQgY29tLmpvZ2FtcC5vcGVuZ2wuR0xQaXBlbGluZUZhY3Rvcnk7CmltcG9ydCBjb20u
am9nYW1wLm9wZW5nbC5HTFByb2ZpbGU7CgpwdWJsaWMgYWJzdHJhY3QgY2xhc3MgR0xDb250ZXh0
SW1wbCBleHRlbmRzIEdMQ29udGV4dCB7CiAgLyoqCiAgICogQ29udGV4dCBmdWxsIHF1YWxpZmll
ZCBuYW1lOiBkaXNwbGF5X3R5cGUgKyBkaXNwbGF5X2Nvbm5lY3Rpb24gKyBtYWpvciArIG1pbm9y
ICsgY3RwLgogICAqIFRoaXMgaXMgdGhlIGtleSBmb3IgYWxsIGNhY2hlZCBHTCBQcm9jQWRkcmVz
c1RhYmxlcywgZXRjLCB0byBzdXBwb3J0IG11bHRpIGRpc3BsYXkvZGV2aWNlIHNldHVwcy4KICAg
Ki8KICBwcml2YXRlIFN0cmluZyBjb250ZXh0RlFOOwoKICBwcml2YXRlIGludCBhZGRpdGlvbmFs
Q3R4Q3JlYXRpb25GbGFnczsKCiAgLy8gQ2FjaGUgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBh
dmFpbGFibGUgdG8gYmUgY2FsbGVkIGF0IHRoZSBjdXJyZW50CiAgLy8gbW9tZW50IGluIHRpbWUK
ICBwcm90ZWN0ZWQgRXh0ZW5zaW9uQXZhaWxhYmlsaXR5Q2FjaGUgZXh0ZW5zaW9uQXZhaWxhYmls
aXR5OwogIC8vIFRhYmxlIHRoYXQgaG9sZHMgdGhlIGFkZHJlc3NlcyBvZiB0aGUgbmF0aXZlIEMt
bGFuZ3VhZ2UgZW50cnkgcG9pbnRzIGZvcgogIC8vIE9wZW5HTCBmdW5jdGlvbnMuCiAgcHJpdmF0
ZSBQcm9jQWRkcmVzc1RhYmxlIGdsUHJvY0FkZHJlc3NUYWJsZTsKCiAgcHJpdmF0ZSBTdHJpbmcg
Z2xWZW5kb3I7CiAgcHJpdmF0ZSBTdHJpbmcgZ2xSZW5kZXJlcjsKICBwcml2YXRlIFN0cmluZyBn
bFJlbmRlcmVyTG93ZXJDYXNlOwogIHByaXZhdGUgU3RyaW5nIGdsVmVyc2lvbjsKICBwcml2YXRl
IGJvb2xlYW4gZ2xHZXRQdHJJbml0ID0gZmFsc2U7CiAgcHJpdmF0ZSBsb25nIGdsR2V0U3RyaW5n
UHRyID0gMDsKICBwcml2YXRlIGxvbmcgZ2xHZXRJbnRlZ2VydlB0ciA9IDA7CgogIC8vIFRyYWNr
cyBsaWZlY3ljbGUgb2YgYnVmZmVyIG9iamVjdHMgdG8gYXZvaWQKICAvLyByZXBlYXRlZCBnbEdl
dCBjYWxscyB1cG9uIGdsTWFwQnVmZmVyIG9wZXJhdGlvbnMKICBwcml2YXRlIGZpbmFsIEdMQnVm
ZmVyT2JqZWN0VHJhY2tlciBidWZmZXJPYmplY3RUcmFja2VyOwogIHByaXZhdGUgZmluYWwgR0xC
dWZmZXJTdGF0ZVRyYWNrZXIgYnVmZmVyU3RhdGVUcmFja2VyOwogIHByaXZhdGUgZmluYWwgR0xT
dGF0ZVRyYWNrZXIgZ2xTdGF0ZVRyYWNrZXIgPSBuZXcgR0xTdGF0ZVRyYWNrZXIoKTsKICBwcml2
YXRlIEdMRGVidWdNZXNzYWdlSGFuZGxlciBnbERlYnVnSGFuZGxlciA9IG51bGw7CiAgcHJpdmF0
ZSBmaW5hbCBpbnRbXSBib3VuZEZCT1RhcmdldCA9IG5ldyBpbnRbXSB7IDAsIDAgfTsgLy8geyBk
cmF3LCByZWFkIH0KICBwcml2YXRlIGludCBkZWZhdWx0VkFPID0gMDsKCiAgLyoqCiAgICogPHVs
PgogICAqICAgPGxpPltHTEF1dG9EcmF3YWJsZS51cHN0cmVhbUxvY2tdLmxvY2soKTwvbGk+CiAg
ICogICA8bGk+ZHJhd2FibGUuc3VyZmFjZS5sb2NrKCk8L2xpPgogICAqICAgPGxpPmNvbnRleHRM
b2NrLmxvY2soKTwvbGk+CiAgICogPC91bD4KICAgKi8KICBwcm90ZWN0ZWQgR0xEcmF3YWJsZUlt
cGwgZHJhd2FibGU7CiAgcHJvdGVjdGVkIEdMRHJhd2FibGVJbXBsIGRyYXdhYmxlUmVhZDsKCiAg
LyoqCiAgICogSWYgR0wgPj0gMy4wIChFUyBvciBkZXNrdG9wKSBhbmQgbm90IGhhdmluZyB7QGxp
bmsgR0xSZW5kZXJlclF1aXJrcyNOb1N1cmZhY2VsZXNzQ3R4fSwKICAgKiBiZWluZyBldmFsdWF0
ZWQgaWYgbm90IHN1cmZhY2UtaGFuZGxlIGlzIG51bGwgYW5kIG5vdCB5ZXQgc2V0IGF0IG1ha2VD
dXJyZW50KC4uKS4KICAgKi8KICBwcml2YXRlIGJvb2xlYW4gaXNTdXJmYWNlbGVzcyA9IGZhbHNl
OwoKICBwcml2YXRlIGJvb2xlYW4gcGl4ZWxEYXRhRXZhbHVhdGVkOwogIHByaXZhdGUgaW50IC8q
IHBpeGVsRGF0YUludGVybmFsRm9ybWF0LCAqLyBwaXhlbERhdGFGb3JtYXQsIHBpeGVsRGF0YVR5
cGU7CgogIHByaXZhdGUgaW50IGN1cnJlbnRTd2FwSW50ZXJ2YWw7CgogIHByb3RlY3RlZCBHTCBn
bDsKCiAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBPYmplY3QgbWFwcGVkQ29udGV4dFR5cGVPYmpl
Y3RMb2NrOwogIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgSGFzaE1hcDxTdHJpbmcsIEV4dGVuc2lv
bkF2YWlsYWJpbGl0eUNhY2hlPiBtYXBwZWRFeHRlbnNpb25BdmFpbGFiaWxpdHlDYWNoZTsKICBw
cm90ZWN0ZWQgc3RhdGljIGZpbmFsIEhhc2hNYXA8U3RyaW5nLCBQcm9jQWRkcmVzc1RhYmxlPiBt
YXBwZWRHTFByb2NBZGRyZXNzOwogIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgSGFzaE1hcDxTdHJp
bmcsIFByb2NBZGRyZXNzVGFibGU+IG1hcHBlZEdMWFByb2NBZGRyZXNzOwoKICBzdGF0aWMgewog
ICAgICBtYXBwZWRDb250ZXh0VHlwZU9iamVjdExvY2sgPSBuZXcgT2JqZWN0KCk7CiAgICAgIG1h
cHBlZEV4dGVuc2lvbkF2YWlsYWJpbGl0eUNhY2hlID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBFeHRl
bnNpb25BdmFpbGFiaWxpdHlDYWNoZT4oKTsKICAgICAgbWFwcGVkR0xQcm9jQWRkcmVzcyA9IG5l
dyBIYXNoTWFwPFN0cmluZywgUHJvY0FkZHJlc3NUYWJsZT4oKTsKICAgICAgbWFwcGVkR0xYUHJv
Y0FkZHJlc3MgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFByb2NBZGRyZXNzVGFibGU+KCk7CiAgfQoK
ICBwdWJsaWMgc3RhdGljIHZvaWQgc2h1dGRvd25JbXBsKCkgewogICAgICBtYXBwZWRFeHRlbnNp
b25BdmFpbGFiaWxpdHlDYWNoZS5jbGVhcigpOwogICAgICBtYXBwZWRHTFByb2NBZGRyZXNzLmNs
ZWFyKCk7CiAgICAgIG1hcHBlZEdMWFByb2NBZGRyZXNzLmNsZWFyKCk7CiAgfQoKICBwdWJsaWMg
R0xDb250ZXh0SW1wbChmaW5hbCBHTERyYXdhYmxlSW1wbCBkcmF3YWJsZSwgZmluYWwgR0xDb250
ZXh0IHNoYXJlV2l0aCkgewogICAgc3VwZXIoKTsKCiAgICBpZiggbnVsbCA9PSBkcmF3YWJsZSAp
IHsKICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJOdWxsIGRyYXdh
YmxlIik7CiAgICB9CiAgICBidWZmZXJTdGF0ZVRyYWNrZXIgPSBuZXcgR0xCdWZmZXJTdGF0ZVRy
YWNrZXIoKTsKICAgIGlmICggbnVsbCAhPSBzaGFyZVdpdGggKSB7CiAgICAgIEdMQ29udGV4dFNo
YXJlU2V0LnJlZ2lzdGVyU2hhcmluZyh0aGlzLCBzaGFyZVdpdGgpOwogICAgICBidWZmZXJPYmpl
Y3RUcmFja2VyID0gKChHTENvbnRleHRJbXBsKXNoYXJlV2l0aCkuZ2V0QnVmZmVyT2JqZWN0VHJh
Y2tlcigpOwogICAgICBpZiggbnVsbCA9PSBidWZmZXJPYmplY3RUcmFja2VyICkgewogICAgICAg
ICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoInNoYXJlZC1tYXN0ZXIgY29udGV4dCBoYXNoIG51
bGwgR0xCdWZmZXJPYmplY3RUcmFja2VyOiAiK3RvSGV4U3RyaW5nKHNoYXJlV2l0aC5oYXNoQ29k
ZSgpKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGJ1ZmZlck9iamVjdFRyYWNrZXIgPSBu
ZXcgR0xCdWZmZXJPYmplY3RUcmFja2VyKCk7CiAgICB9CgogICAgdGhpcy5kcmF3YWJsZSA9IGRy
YXdhYmxlOwogICAgdGhpcy5kcmF3YWJsZVJlYWQgPSBkcmF3YWJsZTsKCiAgICB0aGlzLmdsRGVi
dWdIYW5kbGVyID0gbmV3IEdMRGVidWdNZXNzYWdlSGFuZGxlcih0aGlzKTsKICB9CgogIHByaXZh
dGUgZmluYWwgdm9pZCBjbGVhclN0YXRlcygpIHsKICAgICAgaWYoICFHTENvbnRleHRTaGFyZVNl
dC5oYXNDcmVhdGVkU2hhcmVkTGVmdCh0aGlzKSApIHsKICAgICAgICBidWZmZXJPYmplY3RUcmFj
a2VyLmNsZWFyKCk7CiAgICAgIH0KICAgICAgYnVmZmVyU3RhdGVUcmFja2VyLmNsZWFyKCk7CiAg
ICAgIGdsU3RhdGVUcmFja2VyLnNldEVuYWJsZWQoZmFsc2UpOwogICAgICBnbFN0YXRlVHJhY2tl
ci5jbGVhclN0YXRlcygpOwogIH0KCiAgQE92ZXJyaWRlCiAgcHJvdGVjdGVkIHZvaWQgcmVzZXRT
dGF0ZXMoZmluYWwgYm9vbGVhbiBpc0luaXQpIHsKICAgICAgaWYoICFpc0luaXQgKSB7CiAgICAg
ICAgICBjbGVhclN0YXRlcygpOwogICAgICB9CiAgICAgIGV4dGVuc2lvbkF2YWlsYWJpbGl0eSA9
IG51bGw7CiAgICAgIGdsUHJvY0FkZHJlc3NUYWJsZSA9IG51bGw7CiAgICAgIGdsID0gbnVsbDsK
ICAgICAgY29udGV4dEZRTiA9IG51bGw7CiAgICAgIGFkZGl0aW9uYWxDdHhDcmVhdGlvbkZsYWdz
ID0gMDsKCiAgICAgIGdsVmVuZG9yID0gIiI7CiAgICAgIGdsUmVuZGVyZXIgPSBnbFZlbmRvcjsK
ICAgICAgZ2xSZW5kZXJlckxvd2VyQ2FzZSA9IGdsUmVuZGVyZXI7CiAgICAgIGdsVmVyc2lvbiA9
IGdsVmVuZG9yOwogICAgICBnbEdldFB0ckluaXQgPSBmYWxzZTsKICAgICAgZ2xHZXRTdHJpbmdQ
dHIgPSAwOwogICAgICBnbEdldEludGVnZXJ2UHRyID0gMDsKCiAgICAgIGlmICggIWlzSW5pdCAm
JiBudWxsICE9IGJvdW5kRkJPVGFyZ2V0ICkgeyAvLyA8aW5pdD46IGJvdW5kRkJPVGFyZ2V0IGlz
IG5vdCB3cml0dGVuIHlldAogICAgICAgICAgYm91bmRGQk9UYXJnZXRbMF0gPSAwOyAvLyBkcmF3
CiAgICAgICAgICBib3VuZEZCT1RhcmdldFsxXSA9IDA7IC8vIHJlYWQKICAgICAgfQoKICAgICAg
aXNTdXJmYWNlbGVzcyA9IGZhbHNlOwogICAgICBwaXhlbERhdGFFdmFsdWF0ZWQgPSBmYWxzZTsK
ICAgICAgY3VycmVudFN3YXBJbnRlcnZhbCA9IDA7CgogICAgICBzdXBlci5yZXNldFN0YXRlcyhp
c0luaXQpOwogIH0KCiAgQE92ZXJyaWRlCiAgcHVibGljIGZpbmFsIEdMRHJhd2FibGUgc2V0R0xS
ZWFkRHJhd2FibGUoZmluYWwgR0xEcmF3YWJsZSByZWFkKSB7CiAgICAgIC8vIFZhbGlkYXRlIGNv
bnN0cmFpbnRzIGZpcnN0IQogICAgICBpZighaXNHTFJlYWREcmF3YWJsZUF2YWlsYWJsZSgpKSB7
CiAgICAgICAgICB0aHJvdyBuZXcgR0xFeGNlcHRpb24oIlNldHRpbmcgcmVhZCBkcmF3YWJsZSBm
ZWF0dXJlIG5vdCBhdmFpbGFibGUiKTsKICAgICAgfQogICAgICBmaW5hbCBUaHJlYWQgY3VycmVu
dFRocmVhZCA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCk7CiAgICAgIGlmKCBsb2NrLmlzTG9ja2Vk
QnlPdGhlclRocmVhZCgpICkgewogICAgICAgICAgdGhyb3cgbmV3IEdMRXhjZXB0aW9uKCJHTENv
bnRleHQgY3VycmVudCBieSBvdGhlciB0aHJlYWQgIitsb2NrLmdldE93bmVyKCkuZ2V0TmFtZSgp
KyIsIG9wZXJhdGlvbiBub3QgYWxsb3dlZCBvbiB0aGlzIHRocmVhZCAiK2N1cnJlbnRUaHJlYWQu
Z2V0TmFtZSgpKTsKICAgICAgfQogICAgICBmaW5hbCBib29sZWFuIGxvY2tIZWxkID0gbG9jay5p
c093bmVyKGN1cnJlbnRUaHJlYWQpOwogICAgICBpZiggbG9ja0hlbGQgJiYgbG9jay5nZXRIb2xk
Q291bnQoKSA+IDEgKSB7CiAgICAgICAgICAvLyB3b3VsZCBuZWVkIHRvIG1ha2VDdXJyZW50ICog
aG9sZENvdW50CiAgICAgICAgICB0aHJvdyBuZXcgR0xFeGNlcHRpb24oIkdMQ29udGV4dCBpcyBy
ZWN1cnNpdmVseSBsb2NrZWQgLSB1bnN1cHBvcnRlZCBmb3Igc2V0R0xEcmF3YWJsZSguLikiKTsK
ICAgICAgfQogICAgICBpZihsb2NrSGVsZCkgewogICAgICAgICAgcmVsZWFzZShmYWxzZSk7CiAg
ICAgIH0KICAgICAgZmluYWwgR0xEcmF3YWJsZSBvbGQgPSBkcmF3YWJsZVJlYWQ7CiAgICAgIGRy
YXdhYmxlUmVhZCA9ICggbnVsbCAhPSByZWFkICkgPyAoR0xEcmF3YWJsZUltcGwpIHJlYWQgOiBk
cmF3YWJsZTsKICAgICAgaWYobG9ja0hlbGQpIHsKICAgICAgICAgIG1ha2VDdXJyZW50KCk7CiAg
ICAgIH0KICAgICAgcmV0dXJuIG9sZDsKICB9CgogIEBPdmVycmlkZQogIHB1YmxpYyBmaW5hbCBH
TERyYXdhYmxlIGdldEdMUmVhZERyYXdhYmxlKCkgewogICAgcmV0dXJuIGRyYXdhYmxlUmVhZDsK
ICB9CgogIEBPdmVycmlkZQogIHB1YmxpYyBmaW5hbCBHTERyYXdhYmxlIHNldEdMRHJhd2FibGUo
ZmluYWwgR0xEcmF3YWJsZSByZWFkV3JpdGUsIGZpbmFsIGJvb2xlYW4gc2V0V3JpdGVPbmx5KSB7
CiAgICAgIC8vIFZhbGlkYXRlIGNvbnN0cmFpbnRzIGZpcnN0IQogICAgICBmaW5hbCBUaHJlYWQg
Y3VycmVudFRocmVhZCA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCk7CiAgICAgIGlmKCBsb2NrLmlz
TG9ja2VkQnlPdGhlclRocmVhZCgpICkgewogICAgICAgICAgdGhyb3cgbmV3IEdMRXhjZXB0aW9u
KCJHTENvbnRleHQgY3VycmVudCBieSBvdGhlciB0aHJlYWQgIitsb2NrLmdldE93bmVyKCkuZ2V0
TmFtZSgpKyIsIG9wZXJhdGlvbiBub3QgYWxsb3dlZCBvbiB0aGlzIHRocmVhZCAiK2N1cnJlbnRU
aHJlYWQuZ2V0TmFtZSgpKTsKICAgICAgfQogICAgICBmaW5hbCBib29sZWFuIGxvY2tIZWxkID0g
bG9jay5pc093bmVyKGN1cnJlbnRUaHJlYWQpOwogICAgICBpZiggbG9ja0hlbGQgJiYgbG9jay5n
ZXRIb2xkQ291bnQoKSA+IDEgKSB7CiAgICAgICAgICAvLyB3b3VsZCBuZWVkIHRvIG1ha2VDdXJy
ZW50ICogaG9sZENvdW50CiAgICAgICAgICB0aHJvdyBuZXcgR0xFeGNlcHRpb24oIkdMQ29udGV4
dCBpcyByZWN1cnNpdmVseSBsb2NrZWQgLSB1bnN1cHBvcnRlZCBmb3Igc2V0R0xEcmF3YWJsZSgu
LikiKTsKICAgICAgfQogICAgICBpZiggZHJhd2FibGUgPT0gcmVhZFdyaXRlICYmICggc2V0V3Jp
dGVPbmx5IHx8IGRyYXdhYmxlUmVhZCA9PSByZWFkV3JpdGUgKSApIHsKICAgICAgICAgIHJldHVy
biBkcmF3YWJsZTsgLy8gbm8gY2hhbmdlLgogICAgICB9CiAgICAgIGZpbmFsIEdMRHJhd2FibGVJ
bXBsIG9sZERyYXdhYmxlV3JpdGUgPSBkcmF3YWJsZTsKICAgICAgZmluYWwgR0xEcmF3YWJsZUlt
cGwgb2xkRHJhd2FibGVSZWFkID0gZHJhd2FibGVSZWFkOwogICAgICBpZiggaXNDcmVhdGVkKCkg
JiYgbnVsbCAhPSBvbGREcmF3YWJsZVdyaXRlICYmIG9sZERyYXdhYmxlV3JpdGUuaXNSZWFsaXpl
ZCgpICkgewogICAgICAgICAgaWYoIWxvY2tIZWxkKSB7CiAgICAgICAgICAgICAgbWFrZUN1cnJl
bnQoKTsKICAgICAgICAgIH0KICAgICAgICAgIC8vIHN5bmMgR0wgY3R4IHcvIGRyYXdhYmxlJ3Mg
ZnJhbWVidWZmZXIgYmVmb3JlIGRlLWFzc29jaWF0aW9uCiAgICAgICAgICBnbC5nbEZpbmlzaCgp
OwogICAgICAgICAgYXNzb2NpYXRlRHJhd2FibGUoZmFsc2UpOwogICAgICAgICAgaWYoIWxvY2tI
ZWxkKSB7CiAgICAgICAgICAgICAgcmVsZWFzZShmYWxzZSk7CiAgICAgICAgICB9CiAgICAgIH0K
ICAgICAgaWYobG9ja0hlbGQpIHsKICAgICAgICAgIHJlbGVhc2UoZmFsc2UpOwogICAgICB9CiAg
ICAgIGlmKCAhc2V0V3JpdGVPbmx5IHx8IGRyYXdhYmxlUmVhZCA9PSBkcmF3YWJsZSApIHsgLy8g
aWYgIXNldFdyaXRlT25seSB8fCAhZXhwbGljaXRSZWFkRHJhd2FibGUKICAgICAgICAgIGRyYXdh
YmxlUmVhZCA9IChHTERyYXdhYmxlSW1wbCkgcmVhZFdyaXRlOwogICAgICB9CiAgICAgIGRyYXdh
YmxlUmV0YXJnZXRlZCB8PSBudWxsICE9IGRyYXdhYmxlICYmIHJlYWRXcml0ZSAhPSBkcmF3YWJs
ZTsKICAgICAgZHJhd2FibGUgPSAoR0xEcmF3YWJsZUltcGwpIHJlYWRXcml0ZSA7CiAgICAgIGlm
KCBpc0NyZWF0ZWQoKSAmJiBudWxsICE9IGRyYXdhYmxlICYmIGRyYXdhYmxlLmlzUmVhbGl6ZWQo
KSApIHsKICAgICAgICAgIGludCByZXMgPSBDT05URVhUX05PVF9DVVJSRU5UOwogICAgICAgICAg
VGhyb3dhYmxlIGdsZSA9IG51bGw7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIHJlcyA9
IG1ha2VDdXJyZW50KHRydWUpOyAvLyBpbXBsaWNpdDogYXNzb2NpYXRlRHJhd2FibGUodHJ1ZSkK
ICAgICAgICAgIH0gY2F0Y2ggKCBmaW5hbCBUaHJvd2FibGUgdCApIHsKICAgICAgICAgICAgICBn
bGUgPSB0OwogICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICBpZiggQ09OVEVYVF9O
T1RfQ1VSUkVOVCA9PSByZXMgKSB7CiAgICAgICAgICAgICAgICAgIC8vIEZhaWx1cmUsIHJlY292
ZXIgYW5kIGJhaWwgb3V0IHcvIEdMRXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgIGRyYXdhYmxl
UmVhZCA9IG9sZERyYXdhYmxlUmVhZDsKICAgICAgICAgICAgICAgICAgZHJhd2FibGUgICAgID0g
b2xkRHJhd2FibGVXcml0ZTsKICAgICAgICAgICAgICAgICAgaWYoIGRyYXdhYmxlLmlzUmVhbGl6
ZWQoKSApIHsKICAgICAgICAgICAgICAgICAgICAgIG1ha2VDdXJyZW50KHRydWUpOyAvLyBpbXBs
aWNpdDogYXNzb2NpYXRlRHJhd2FibGUodHJ1ZSkKICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICBpZiggIWxvY2tIZWxkICkgewogICAgICAgICAgICAgICAgICAgICAgcmVsZWFz
ZShmYWxzZSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZmluYWwgU3Ry
aW5nIG1zZyA9ICJFcnJvcjogbWFrZUN1cnJlbnQoKSBmYWlsZWQgd2l0aCBuZXcgZHJhd2FibGUg
IityZWFkV3JpdGU7CiAgICAgICAgICAgICAgICAgIGlmKCBudWxsICE9IGdsZSApIHsKICAgICAg
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBHTEV4Y2VwdGlvbihtc2csIGdsZSk7CiAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgR0xFeGNl
cHRpb24obXNnKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAg
IH0KICAgICAgICAgIGlmKCAhbG9ja0hlbGQgKSB7CiAgICAgICAgICAgICAgcmVsZWFzZShmYWxz
ZSk7CiAgICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG9sZERyYXdhYmxlV3JpdGU7CiAg
fQoKICBAT3ZlcnJpZGUKICBwdWJsaWMgZmluYWwgR0xEcmF3YWJsZSBnZXRHTERyYXdhYmxlKCkg
ewogICAgcmV0dXJuIGRyYXdhYmxlOwogIH0KCiAgcHVibGljIGZpbmFsIEdMRHJhd2FibGVJbXBs
IGdldERyYXdhYmxlSW1wbCgpIHsKICAgIHJldHVybiBkcmF3YWJsZTsKICB9CgogIEBPdmVycmlk
ZQogIHB1YmxpYyBmaW5hbCBHTCBnZXRSb290R0woKSB7CiAgICAgIEdMIF9nbCA9IGdsOwogICAg
ICBHTCBfcGFyZW50ID0gX2dsLmdldERvd25zdHJlYW1HTCgpOwogICAgICB3aGlsZSAoIG51bGwg
IT0gX3BhcmVudCApIHsKICAgICAgICAgIF9nbCA9IF9wYXJlbnQ7CiAgICAgICAgICBfcGFyZW50
ID0gX2dsLmdldERvd25zdHJlYW1HTCgpOwogICAgICB9CiAgICAgIHJldHVybiBfZ2w7CiAgfQoK
ICBAT3ZlcnJpZGUKICBwdWJsaWMgZmluYWwgR0wgZ2V0R0woKSB7CiAgICByZXR1cm4gZ2w7CiAg
fQoKICBAT3ZlcnJpZGUKICBwdWJsaWMgR0wgc2V0R0woZmluYWwgR0wgZ2wpIHsKICAgIGlmKCBE
RUJVRyApIHsKICAgICAgICBmaW5hbCBTdHJpbmcgc2dsMSA9IChudWxsIT10aGlzLmdsKT90aGlz
LmdsLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpKyIsICIrdGhpcy5nbC50b1N0cmluZygpOiI8
bnVsbD4iOwogICAgICAgIGZpbmFsIFN0cmluZyBzZ2wyID0gKG51bGwhPWdsKT9nbC5nZXRDbGFz
cygpLmdldFNpbXBsZU5hbWUoKSsiLCAiK2dsLnRvU3RyaW5nKCk6IjxudWxsPiI7CiAgICAgICAg
U3lzdGVtLmVyci5wcmludGxuKCJJbmZvOiBzZXRHTCAoT3BlbkdMICIrZ2V0R0xWZXJzaW9uKCkr
Iik6ICIrZ2V0VGhyZWFkTmFtZSgpKyIsICIrc2dsMSsiIC0+ICIrc2dsMik7CiAgICAgICAgRXhj
ZXB0aW9uVXRpbHMuZHVtcFN0YWNrKFN5c3RlbS5lcnIpOwogICAgfQogICAgdGhpcy5nbCA9IGds
OwogICAgcmV0dXJuIGdsOwogIH0KCiAgQE92ZXJyaWRlCiAgcHVibGljIGZpbmFsIGludCBnZXRE
ZWZhdWx0VkFPKCkgewogICAgICByZXR1cm4gZGVmYXVsdFZBTzsKICB9CgogIC8qKgogICAqIENh
bGwgdGhpcyBtZXRob2QgdG8gbm90aWZ5IHRoZSBPcGVuR0wgY29udGV4dAogICAqIHRoYXQgdGhl
IGRyYXdhYmxlIGhhcyBjaGFuZ2VkIChzaXplIG9yIHBvc2l0aW9uKS4KICAgKgogICAqIDxwPgog
ICAqIFRoaXMgaXMgY3VycmVudGx5IGJlaW5nIHVzZWQgYW5kIG92ZXJyaWRkZW4gYnkgTWFjIE9T
WCwKICAgKiB3aGljaCBpc3N1ZXMgdGhlIHtAbGluayBqb2dhbXAub3BlbmdsLm1hY29zeC5jZ2wu
Q0dMI3VwZGF0ZUNvbnRleHQobG9uZykgTlNPcGVuR0xDb250ZXh0IHVwZGF0ZSgpfSBjYWxsLgog
ICAqIDwvcD4KICAgKgogICAqIEB0aHJvd3MgR0xFeGNlcHRpb24KICAgKi8KICBwcm90ZWN0ZWQg
dm9pZCBkcmF3YWJsZVVwZGF0ZWROb3RpZnkoKSB0aHJvd3MgR0xFeGNlcHRpb24geyB9CgogIHB1
YmxpYyBhYnN0cmFjdCBPYmplY3QgZ2V0UGxhdGZvcm1HTEV4dGVuc2lvbnMoKTsKCiAgLy8gTm90
ZTogdGhlIHN1cmZhY2UgaXMgbG9ja2VkIHdpdGhpbiBbbWFrZUN1cnJlbnQgLi4gc3dhcCAuLiBy
ZWxlYXNlXQogIEBPdmVycmlkZQogIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB0aHJvd3MgR0xFeGNl
cHRpb24gewogICAgcmVsZWFzZShmYWxzZSk7CiAgfQogIHByaXZhdGUgU3RyaW5nIGdldFRyYWNl
U3dpdGNoTXNnKCkgewogICAgICBmaW5hbCBsb25nIGRyYXdIID0gbnVsbCAhPSBkcmF3YWJsZSA/
IGRyYXdhYmxlLmdldEhhbmRsZSgpIDogMDsKICAgICAgcmV0dXJuICJvYmogIiArIHRvSGV4U3Ry
aW5nKGhhc2hDb2RlKCkpICsgIiwgY3R4ICIrdG9IZXhTdHJpbmcoY29udGV4dEhhbmRsZSkrIiwg
aXNTaGFyZWQgIitHTENvbnRleHRTaGFyZVNldC5pc1NoYXJlZCh0aGlzKSsiLCBzdXJmICIrKG51
bGwhPWRyYXdhYmxlKSsiICIrdG9IZXhTdHJpbmcoZHJhd0gpKyIsICIrbG9jazsKICB9CiAgcHJp
dmF0ZSB2b2lkIHJlbGVhc2UoZmluYWwgYm9vbGVhbiBpbkRlc3RydWN0aW9uKSB0aHJvd3MgR0xF
eGNlcHRpb24gewogICAgICBpZiggVFJBQ0VfU1dJVENIICkgewogICAgICAgICAgU3lzdGVtLmVy
ci5wcmludGxuKGdldFRocmVhZE5hbWUoKSArIjogR0xDb250ZXh0LkNvbnRleHRTd2l0Y2hbcmVs
ZWFzZS4wLCBpbkRlc3RydWN0aW9uOiAiK2luRGVzdHJ1Y3Rpb24rIl06ICIrZ2V0VHJhY2VTd2l0
Y2hNc2coKSk7CiAgICAgIH0KICAgICAgaWYgKCAhbG9jay5pc093bmVyKFRocmVhZC5jdXJyZW50
VGhyZWFkKCkpICkgewogICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IGdldFRocmVhZE5hbWUo
KSArIjogQ29udGV4dCBub3QgY3VycmVudCBvbiB0aHJlYWQsIGluRGVzdHJ1Y3Rpb246ICIraW5E
ZXN0cnVjdGlvbisiLCAiK2dldFRyYWNlU3dpdGNoTXNnKCk7CiAgICAgICAgICBpZiggREVCVUdf
VFJBQ0VfU1dJVENIICkgewogICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihtc2cpOwog
ICAgICAgICAgICAgIGlmKCBudWxsICE9IGxhc3RDdHhSZWxlYXNlU3RhY2sgKSB7CiAgICAgICAg
ICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnQoIkxhc3QgcmVsZWFzZSBjYWxsOiAiKTsKICAgICAg
ICAgICAgICAgICAgbGFzdEN0eFJlbGVhc2VTdGFjay5wcmludFN0YWNrVHJhY2UoKTsKICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxh
c3QgcmVsZWFzZSBjYWxsOiBOT05FIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAg
ICAgICAgdGhyb3cgbmV3IEdMRXhjZXB0aW9uKG1zZyk7CiAgICAgIH0KCiAgICAgIFRocm93YWJs
ZSBkcmF3YWJsZUNvbnRleHRNYWRlQ3VycmVudEV4Y2VwdGlvbiA9IG51bGw7CiAgICAgIGZpbmFs
IGJvb2xlYW4gYWN0dWFsUmVsZWFzZSA9ICggaW5EZXN0cnVjdGlvbiB8fCBsb2NrLmdldEhvbGRD
b3VudCgpID09IDEgKSAmJiAwICE9IGNvbnRleHRIYW5kbGU7CiAgICAgIHRyeSB7CiAgICAgICAg
ICBpZiggYWN0dWFsUmVsZWFzZSApIHsKICAgICAgICAgICAgICBpZiggIWluRGVzdHJ1Y3Rpb24g
KSB7CiAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
TWFkZUN1cnJlbnQoZmFsc2UpOwogICAgICAgICAgICAgICAgICB9IGNhdGNoIChmaW5hbCBUaHJv
d2FibGUgdCkgewogICAgICAgICAgICAgICAgICAgICAgZHJhd2FibGVDb250ZXh0TWFkZUN1cnJl
bnRFeGNlcHRpb24gPSB0OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgIHJlbGVhc2VJbXBsKCk7CiAgICAgICAgICB9CiAgICAgIH0gZmluYWxseSB7CiAg
ICAgICAgICAvLyBleGNlcHRpb24gcHJvbmUgLi4KICAgICAgICAgIGlmKCBhY3R1YWxSZWxlYXNl
ICkgewogICAgICAgICAgICAgIHNldEN1cnJlbnQobnVsbCk7CiAgICAgICAgICB9CiAgICAgICAg
ICBsb2NrLnVubG9jaygpOwogICAgICAgICAgZHJhd2FibGUudW5sb2NrU3VyZmFjZSgpOwogICAg
ICAgICAgaWYoIERFQlVHX1RSQUNFX1NXSVRDSCApIHsKICAgICAgICAgICAgICBmaW5hbCBTdHJp
bmcgbXNnID0gZ2V0VGhyZWFkTmFtZSgpICsiOiBHTENvbnRleHQuQ29udGV4dFN3aXRjaFtyZWxl
YXNlLlhdOiAiKyhhY3R1YWxSZWxlYXNlPyJzd2l0Y2giOiJrZWVwICAiKSsiIC0gIitnZXRUcmFj
ZVN3aXRjaE1zZygpOwogICAgICAgICAgICAgIGxhc3RDdHhSZWxlYXNlU3RhY2sgPSBuZXcgVGhy
b3dhYmxlKG1zZyk7CiAgICAgICAgICAgICAgaWYoIFRSQUNFX1NXSVRDSCApIHsKICAgICAgICAg
ICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKG1zZyk7CiAgICAgICAgICAgICAgICAgIC8vIEV4
Y2VwdGlvblV0aWxzLmR1bXBTdGFjayhTeXN0ZW0uZXJyLCAwLCAxMCk7CiAgICAgICAgICAgICAg
fQogICAgICAgICAgfQogICAgICB9CiAgICAgIGlmKG51bGwgIT0gZHJhd2FibGVDb250ZXh0TWFk
ZUN1cnJlbnRFeGNlcHRpb24pIHsKICAgICAgICAgIHRocm93IG5ldyBHTEV4Y2VwdGlvbigiR0xD
b250ZXh0LnJlbGVhc2UoZmFsc2UpIGR1cmluZyBHTERyYXdhYmxlSW1wbC5jb250ZXh0TWFkZUN1
cnJlbnQodGhpcywgZmFsc2UpIiwgZHJhd2FibGVDb250ZXh0TWFkZUN1cnJlbnRFeGNlcHRpb24p
OwogICAgICB9CiAgfQogIHByaXZhdGUgVGhyb3dhYmxlIGxhc3RDdHhSZWxlYXNlU3RhY2sgPSBu
dWxsOwogIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHJlbGVhc2VJbXBsKCkgdGhyb3dzIEdMRXhj
ZXB0aW9uOwoKICBAT3ZlcnJpZGUKICBwdWJsaWMgZmluYWwgdm9pZCBkZXN0cm95KCkgewogICAg
ICBpZiAoIERFQlVHX1RSQUNFX1NXSVRDSCApIHsKICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRs
bihnZXRUaHJlYWROYW1lKCkgKyAiOiBHTENvbnRleHRJbXBsLmRlc3Ryb3kuMDogIitnZXRUcmFj
ZVN3aXRjaE1zZygpKTsKICAgICAgfQogICAgICBpZiAoIDAgIT0gY29udGV4dEhhbmRsZSApIHsg
Ly8gaXNDcmVhdGVkKCkgPwogICAgICAgICAgaWYgKCBudWxsID09IGRyYXdhYmxlICkgewogICAg
ICAgICAgICAgIHRocm93IG5ldyBHTEV4Y2VwdGlvbigiR0xDb250ZXh0IGNyZWF0ZWQgYnV0IGRy
YXdhYmxlIGlzIG51bGw6ICIrdG9TdHJpbmcoKSk7CiAgICAgICAgICB9CiAgICAgICAgICBmaW5h
bCBpbnQgbG9ja1JlcyA9IGRyYXdhYmxlLmxvY2tTdXJmYWNlKCk7CiAgICAgICAgICBpZiAoIE5h
dGl2ZVN1cmZhY2UuTE9DS19TVVJGQUNFX05PVF9SRUFEWSA+PSBsb2NrUmVzICkgewogICAgICAg
ICAgICAgICAgLy8gdGhpcyB3b3VsZCBiZSBvZGQgLi4KICAgICAgICAgICAgICAgIHRocm93IG5l
dyBHTEV4Y2VwdGlvbigiU3VyZmFjZSBub3QgcmVhZHkgdG8gbG9jazogIitkcmF3YWJsZSk7CiAg
ICAgICAgICB9CiAgICAgICAgICBUaHJvd2FibGUgYXNzb2NpYXRlRHJhd2FibGVFeGNlcHRpb24g
PSBudWxsOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBpZiAoICFkcmF3YWJsZS5pc1Jl
YWxpemVkKCkgKSB7CiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBHTEV4Y2VwdGlvbigiR0xD
b250ZXh0IGNyZWF0ZWQgYnV0IGRyYXdhYmxlIG5vdCByZWFsaXplZDogIit0b1N0cmluZygpKTsK
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgLy8gTXVzdCBob2xkIHRoZSBsb2NrIGFyb3Vu
ZCB0aGUgZGVzdHJveSBvcGVyYXRpb24gdG8gbWFrZSBzdXJlIHdlCiAgICAgICAgICAgICAgLy8g
ZG9uJ3QgZGVzdHJveSB0aGUgY29udGV4dCB3aGlsZSBhbm90aGVyIHRocmVhZCByZW5kZXJzIHRv
IGl0LgogICAgICAgICAgICAgIGxvY2subG9jaygpOyAvLyBob2xkQ291bnQrKyAtPiAxIC0gbiAo
MTogbm90IGxvY2tlZCwgMi1uOiBkZXN0cm95IHdoaWxlIHJlbmRlcmluZykKICAgICAgICAgICAg
ICBpZiAoIERFQlVHX1RSQUNFX1NXSVRDSCApIHsKICAgICAgICAgICAgICAgICAgaWYgKCBsb2Nr
LmdldEhvbGRDb3VudCgpID4gMiApIHsKICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIu
cHJpbnRsbihnZXRUaHJlYWROYW1lKCkgKyAiOiBHTENvbnRleHRJbXBsLmRlc3Ryb3k6IExvY2sg
d2FzIGhvbGQgbW9yZSB0aGFuIG9uY2UgLSBtYWtlQ3VycmVudC9yZWxlYXNlIGltYmFsYW5jZTog
IitnZXRUcmFjZVN3aXRjaE1zZygpKTsKICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvblV0
aWxzLmR1bXBTdGFjayhTeXN0ZW0uZXJyKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAvLyBpZiBub3QgY3Vy
cmVudCwgbWFrZUN1cnJlbnQoKSwgdG8gY2FsbCBhc3NvY2lhdGVEcmF3YWJsZSguLikgYW5kIHRv
IGRpc2FibGUgZGVidWcgaGFuZGxlcgogICAgICAgICAgICAgICAgICBpZiAoIGxvY2suZ2V0SG9s
ZENvdW50KCkgPT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgIGlmICggR0xDb250ZXh0LkNP
TlRFWFRfTk9UX0NVUlJFTlQgPT0gbWFrZUN1cnJlbnQoKSApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgR0xFeGNlcHRpb24oIkdMQ29udGV4dC5tYWtlQ3VycmVudCgpIGZh
aWxlZDogIit0b1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgYXNz
b2NpYXRlRHJhd2FibGUoZmFsc2UpOwogICAgICAgICAgICAgICAgICB9IGNhdGNoIChmaW5hbCBU
aHJvd2FibGUgdCkgewogICAgICAgICAgICAgICAgICAgICAgYXNzb2NpYXRlRHJhd2FibGVFeGNl
cHRpb24gPSB0OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmICggMCAh
PSBkZWZhdWx0VkFPICkgewogICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50W10gdG1wID0g
bmV3IGludFtdIHsgZGVmYXVsdFZBTyB9OwogICAgICAgICAgICAgICAgICAgICAgZmluYWwgR0wy
RVMzIGdsMmVzMyA9IGdsLmdldFJvb3RHTCgpLmdldEdMMkVTMygpOwogICAgICAgICAgICAgICAg
ICAgICAgZ2wyZXMzLmdsQmluZFZlcnRleEFycmF5KDApOwogICAgICAgICAgICAgICAgICAgICAg
Z2wyZXMzLmdsRGVsZXRlVmVydGV4QXJyYXlzKDEsIHRtcCwgMCk7CiAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0VkFPID0gMDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICBnbERlYnVnSGFuZGxlci5lbmFibGUoZmFsc2UpOwogICAgICAgICAgICAgICAgICBpZihsb2Nr
LmdldEhvbGRDb3VudCgpID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgLy8gcGVuZGluZyBy
ZWxlYXNlKCkgYWZ0ZXIgbWFrZUN1cnJlbnQoKQogICAgICAgICAgICAgICAgICAgICAgcmVsZWFz
ZSh0cnVlKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBkZXN0cm95SW1w
bCgpOwogICAgICAgICAgICAgICAgICBjb250ZXh0SGFuZGxlID0gMDsKICAgICAgICAgICAgICAg
ICAgZ2xEZWJ1Z0hhbmRsZXIgPSBudWxsOwogICAgICAgICAgICAgICAgICAvLyB0aGlzIG1heWJl
IGltcGwuIGluIGEgcGxhdGZvcm0gc3BlY2lmaWMgd2F5IHRvIHJlbGVhc2UgcmVtYWluaW5nIHNo
YXJlZCBjdHguCiAgICAgICAgICAgICAgICAgIGlmKCBHTENvbnRleHRTaGFyZVNldC5jb250ZXh0
RGVzdHJveWVkKHRoaXMpICYmICFHTENvbnRleHRTaGFyZVNldC5oYXNDcmVhdGVkU2hhcmVkTGVm
dCh0aGlzKSApIHsKICAgICAgICAgICAgICAgICAgICAgIEdMQ29udGV4dFNoYXJlU2V0LnVucmVn
aXN0ZXJTaGFyaW5nKHRoaXMpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
IHJlc2V0U3RhdGVzKGZhbHNlKTsKICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAg
ICAgICAgICBsb2NrLnVubG9jaygpOwogICAgICAgICAgICAgICAgICBpZiAoIERFQlVHX1RSQUNF
X1NXSVRDSCApIHsKICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihnZXRU
aHJlYWROYW1lKCkgKyAiOiBHTENvbnRleHRJbXBsLmRlc3Ryb3kuWDogIitnZXRUcmFjZVN3aXRj
aE1zZygpKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgIH0g
ZmluYWxseSB7CiAgICAgICAgICAgICAgZHJhd2FibGUudW5sb2NrU3VyZmFjZSgpOwogICAgICAg
ICAgfQogICAgICAgICAgaWYoIG51bGwgIT0gYXNzb2NpYXRlRHJhd2FibGVFeGNlcHRpb24gKSB7
CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEdMRXhjZXB0aW9uKCJFeGNlcHRpb24gQCBkZXN0cm95
J3MgYXNzb2NpYXRlRHJhd2FibGUoZmFsc2UpIiwgYXNzb2NpYXRlRHJhd2FibGVFeGNlcHRpb24p
OwogICAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgICAgcmVzZXRTdGF0ZXMoZmFsc2Up
OwogICAgICB9CiAgfQogIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGRlc3Ryb3lJbXBsKCkgdGhy
b3dzIEdMRXhjZXB0aW9uOwoKICBAT3ZlcnJpZGUKICBwdWJsaWMgZmluYWwgdm9pZCBjb3B5KGZp
bmFsIEdMQ29udGV4dCBzb3VyY2UsIGZpbmFsIGludCBtYXNrKSB0aHJvd3MgR0xFeGNlcHRpb24g
ewogICAgaWYgKHNvdXJjZS5nZXRIYW5kbGUoKSA9PSAwKSB7CiAgICAgIHRocm93IG5ldyBHTEV4
Y2VwdGlvbigiU291cmNlIE9wZW5HTCBjb250ZXh0IGhhcyBub3QgYmVlbiBjcmVhdGVkIik7CiAg
ICB9CiAgICBpZiAoZ2V0SGFuZGxlKCkgPT0gMCkgewogICAgICB0aHJvdyBuZXcgR0xFeGNlcHRp
b24oIkRlc3RpbmF0aW9uIE9wZW5HTCBjb250ZXh0IGhhcyBub3QgYmVlbiBjcmVhdGVkIik7CiAg
ICB9CgogICAgZmluYWwgaW50IGxvY2tSZXMgPSBkcmF3YWJsZS5sb2NrU3VyZmFjZSgpOwogICAg
aWYgKE5hdGl2ZVN1cmZhY2UuTE9DS19TVVJGQUNFX05PVF9SRUFEWSA+PSBsb2NrUmVzKSB7CiAg
ICAgICAgLy8gdGhpcyB3b3VsZCBiZSBvZGQgLi4KICAgICAgICB0aHJvdyBuZXcgR0xFeGNlcHRp
b24oIlN1cmZhY2Ugbm90IHJlYWR5IHRvIGxvY2siKTsKICAgIH0KICAgIHRyeSB7CiAgICAgICAg
Y29weUltcGwoc291cmNlLCBtYXNrKTsKICAgIH0gZmluYWxseSB7CiAgICAgIGRyYXdhYmxlLnVu
bG9ja1N1cmZhY2UoKTsKICAgIH0KICB9CiAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgY29weUlt
cGwoR0xDb250ZXh0IHNvdXJjZSwgaW50IG1hc2spIHRocm93cyBHTEV4Y2VwdGlvbjsKCiAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAgLy8KCiAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gaXNTdXJmYWNlbGVz
cygpIHsgcmV0dXJuIGlzU3VyZmFjZWxlc3M7IH0KCiAgLyoqCiAgICoge0Bpbmhlcml0RG9jfQog
ICAqIDxwPgogICAqIE1ha2VDdXJyZW50IGZ1bmN0aW9uYWxpdHksIHdoaWNoIGFsc28gaXNzdWVz
IHRoZSBjcmVhdGlvbiBvZiB0aGUgYWN0dWFsIE9wZW5HTCBjb250ZXh0LgogICAqIDwvcD4KICAg
KiBUaGUgY29tcGxldGUgY2FsbGdyYXBoIGZvciBnZW5lcmFsIE9wZW5HTCBjb250ZXh0IGNyZWF0
aW9uIGlzOjxicj4KICAgKiA8dWw+CiAgICogICAgPGxpPiB7QGxpbmsgI21ha2VDdXJyZW50fSA8
aT5HTENvbnRleHRJbXBsPC9pPjwvbGk+CiAgICogICAgPGxpPiB7QGxpbmsgI21ha2VDdXJyZW50
SW1wbH0gPGk+UGxhdGZvcm0gSW1wbGVtZW50YXRpb248L2k+PC9saT4KICAgKiAgICA8bGk+IHtA
bGluayAjY3JlYXRlfSA8aT5QbGF0Zm9ybSBJbXBsZW1lbnRhdGlvbjwvaT48L2xpPgogICAqICAg
IDxsaT4gSWYgPGNvZGU+QVJCX2NyZWF0ZV9jb250ZXh0PC9jb2RlPiBpcyBzdXBwb3J0ZWQ6CiAg
ICogICAgPHVsPgogICAqICAgICAgICA8bGk+IHtAbGluayAjY3JlYXRlQ29udGV4dEFSQn0gPGk+
R0xDb250ZXh0SW1wbDwvaT48L2xpPgogICAqICAgICAgICA8bGk+IHtAbGluayAjY3JlYXRlQ29u
dGV4dEFSQkltcGx9IDxpPlBsYXRmb3JtIEltcGxlbWVudGF0aW9uPC9pPjwvbGk+CiAgICogICAg
PC91bD48L2xpPgogICAqIDwvdWw+PGJyPgogICAqCiAgICogT25jZSBhdCBzdGFydHVwLCBpZSB0
cmlnZ2VyZWQgYnkgdGhlIHNpbmdsZXRvbiBjb25zdHJ1Y3RvciBvZiBhIHtAbGluayBHTERyYXdh
YmxlRmFjdG9yeUltcGx9IHNwZWNpYWxpemF0aW9uLAogICAqIGNhbGxpbmcge0BsaW5rICNjcmVh
dGVDb250ZXh0QVJCfSB3aWxsIHF1ZXJ5IGFsbCBhdmFpbGFibGUgT3BlbkdMIHZlcnNpb25zOjxi
cj4KICAgKiA8dWw+CiAgICogICAgPGxpPiA8Y29kZT5GT1IgQUxMIEdMKiBETzwvY29kZT46CiAg
ICogICAgPHVsPgogICAqICAgICAgICA8bGk+IHtAbGluayAjY3JlYXRlQ29udGV4dEFSQk1hcFZl
cnNpb25zQXZhaWxhYmxlfQogICAqICAgICAgICA8dWw+CiAgICogICAgICAgICAgICA8bGk+IHtA
bGluayAjY3JlYXRlQ29udGV4dEFSQlZlcnNpb25zfTwvbGk+CiAgICogICAgICAgIDwvdWw+PC9s
aT4KICAgKiAgICAgICAgPGxpPiB7QGxpbmsgI21hcFZlcnNpb25BdmFpbGFibGV9PC9saT4KICAg
KiAgICA8L3VsPjwvbGk+CiAgICogPC91bD48YnI+CiAgICoKICAgKiBAc2VlICNtYWtlQ3VycmVu
dEltcGwKICAgKiBAc2VlICNjcmVhdGUKICAgKiBAc2VlICNjcmVhdGVDb250ZXh0QVJCCiAgICog
QHNlZSAjY3JlYXRlQ29udGV4dEFSQkltcGwKICAgKiBAc2VlICNtYXBWZXJzaW9uQXZhaWxhYmxl
CiAgICogQHNlZSAjZGVzdHJveUNvbnRleHRBUkJJbXBsCiAgICovCiAgQE92ZXJyaWRlCiAgcHVi
bGljIGZpbmFsIGludCBtYWtlQ3VycmVudCgpIHRocm93cyBHTEV4Y2VwdGlvbiB7CiAgICAgIHJl
dHVybiBtYWtlQ3VycmVudChmYWxzZSk7CiAgfQoKICBwcm90ZWN0ZWQgZmluYWwgaW50IG1ha2VD
dXJyZW50KGJvb2xlYW4gZm9yY2VEcmF3YWJsZUFzc29jaWF0aW9uKSB0aHJvd3MgR0xFeGNlcHRp
b24gewogICAgZmluYWwgYm9vbGVhbiBoYXNEcmF3YWJsZSA9IG51bGwgIT0gZHJhd2FibGU7CiAg
ICBpZiggVFJBQ0VfU1dJVENIICkgewogICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihnZXRUaHJl
YWROYW1lKCkgKyI6IEdMQ29udGV4dC5Db250ZXh0U3dpdGNoW21ha2VDdXJyZW50LjBdOiAiK2dl
dFRyYWNlU3dpdGNoTXNnKCkpOwogICAgfQogICAgaWYoICFoYXNEcmF3YWJsZSApIHsKICAgICAg
ICBpZiggREVCVUdfVFJBQ0VfU1dJVENIICkgewogICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50
bG4oZ2V0VGhyZWFkTmFtZSgpICsiOiBHTENvbnRleHQuQ29udGV4dFN3aXRjaFttYWtlQ3VycmVu
dC5YMF06IE5VTEwgRHJhd2FibGUgLSBDT05URVhUX05PVF9DVVJSRU5UIC0gIitnZXRUcmFjZVN3
aXRjaE1zZygpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIENPTlRFWFRfTk9UX0NVUlJFTlQ7
CiAgICB9CgogICAgLy8gTm90ZTogdGhlIHN1cmZhY2UgaXMgbG9ja2VkIHdpdGhpbiBbbWFrZUN1
cnJlbnQgLi4gc3dhcCAuLiByZWxlYXNlXQogICAgZmluYWwgaW50IGxvY2tSZXMgPSBkcmF3YWJs
ZS5sb2NrU3VyZmFjZSgpOwogICAgaWYgKE5hdGl2ZVN1cmZhY2UuTE9DS19TVVJGQUNFX05PVF9S
RUFEWSA+PSBsb2NrUmVzKSB7CiAgICAgICAgaWYoIERFQlVHX1RSQUNFX1NXSVRDSCApIHsKICAg
ICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGdldFRocmVhZE5hbWUoKSArIjogR0xDb250ZXh0
LkNvbnRleHRTd2l0Y2hbbWFrZUN1cnJlbnQuWDFdOiBTdXJmYWNlIE5vdCBSZWFkeSAtIENPTlRF
WFRfTk9UX0NVUlJFTlQgLSAiK2dldFRyYWNlU3dpdGNoTXNnKCkpOwogICAgICAgIH0KICAgICAg
ICByZXR1cm4gQ09OVEVYVF9OT1RfQ1VSUkVOVDsKICAgIH0KCiAgICBib29sZWFuIHVubG9ja1Jl
c291cmNlcyA9IHRydWU7IC8vIE11c3QgYmUgY2xlYXJlZCBpZiBzdWNjZXNzZnVsLCBvdGhlcndp
c2UgZmluYWxseSBibG9jayB3aWxsIHJlbGVhc2UgY29udGV4dCBhbmQvb3Igc3VyZmFjZSEKICAg
IGludCByZXMgPSBDT05URVhUX05PVF9DVVJSRU5UOwogICAgdHJ5IHsKICAgICAgICBpZiAoIGRy
YXdhYmxlLmlzUmVhbGl6ZWQoKSApIHsKICAgICAgICAgICAgbG9jay5sb2NrKCk7CiAgICAgICAg
ICAgIHRyeSB7CiAgICAgICAgICAgICAgICBpZiAoIDAgPT0gZHJhd2FibGUuZ2V0SGFuZGxlKCkg
JiYgIWlzU3VyZmFjZWxlc3MgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoIERFQlVHICkgewog
ICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oZ2V0VGhyZWFkTmFtZSgp
ICsiOiBHTENvbnRleHQubWFrZUN1cnJlbnQ6IFN1cmZhY2VsZXNzIGV2YWx1YXRlIik7CiAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmKCBoYXNSZW5kZXJlclF1aXJr
KEdMUmVuZGVyZXJRdWlya3MuTm9TdXJmYWNlbGVzc0N0eCkgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBHTEV4Y2VwdGlvbihTdHJpbmcuZm9ybWF0KCJTdXJmYWNlbGVzcyBu
b3Qgc3VwcG9ydGVkIGR1ZSB0byBxdWlyayAlczogJXMiLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMUmVuZGVyZXJRdWlya3MudG9TdHJpbmcoR0xSZW5kZXJlclF1aXJrcy5Ob1N1
cmZhY2VsZXNzQ3R4KSwgdG9TdHJpbmcoKSkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAvLyBBbGxvdyBwcm9iaW5nIGlmIFByb3h5U3VyZmFjZSAmJiBPUFRfVVBT
VFJFQU1fU1VSRkFDRUxFU1MKICAgICAgICAgICAgICAgICAgICBmaW5hbCBOYXRpdmVTdXJmYWNl
IHN1cmZhY2UgPSBkcmF3YWJsZS5nZXROYXRpdmVTdXJmYWNlKCk7CiAgICAgICAgICAgICAgICAg
ICAgaWYoICEoc3VyZmFjZSBpbnN0YW5jZW9mIFByb3h5U3VyZmFjZSkgfHwKICAgICAgICAgICAg
ICAgICAgICAgICAgISgoUHJveHlTdXJmYWNlKXN1cmZhY2UpLmNvbnRhaW5zVXBzdHJlYW1PcHRp
b25CaXRzKCBQcm94eVN1cmZhY2UuT1BUX1VQU1RSRUFNX1NVUkZBQ0VMRVNTICkgKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBHTEV4Y2VwdGlvbihTdHJpbmcuZm9ybWF0KCJu
b24tc3VyZmFjZWxlc3MgZHJhd2FibGUgaGFzIHplcm8taGFuZGxlOiAlcyIsIGRyYXdhYmxlLnRv
U3RyaW5nKCkpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAvLyBPbmUgY29udGV4dCBjYW4gb25seSBiZSBjdXJyZW50IGJ5IG9uZSB0aHJl
YWQsCiAgICAgICAgICAgICAgICAvLyBhbmQgb25lIHRocmVhZCBjYW4gb25seSBoYXZlIG9uZSBj
b250ZXh0IGN1cnJlbnQhCiAgICAgICAgICAgICAgICBmaW5hbCBHTENvbnRleHQgY3VycmVudCA9
IGdldEN1cnJlbnQoKTsKICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ICE9IG51bGwpIHsKICAg
ICAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSB0aGlzKSB7IC8vIGltcGxpY2l0IHJlY3Vy
c2l2ZSBsb2NraW5nIQogICAgICAgICAgICAgICAgICAgICAgICAvLyBBc3N1bWUgd2UgZG9uJ3Qg
bmVlZCB0byBtYWtlIHRoaXMgY29udGV4dCBjdXJyZW50IGFnYWluCiAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEZvciBNYWMgT1MgWCwgaG93ZXZlciwgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGNv
bnRleHQgdG8gdHJhY2sgcmVzaXplcwogICAgICAgICAgICAgICAgICAgICAgICBkcmF3YWJsZVVw
ZGF0ZWROb3RpZnkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdW5sb2NrUmVzb3VyY2VzID0g
ZmFsc2U7IC8vIHN1Y2Nlc3MKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIFRSQUNFX1NXSVRD
SCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihnZXRU
aHJlYWROYW1lKCkgKyI6IEdMQ29udGV4dC5Db250ZXh0U3dpdGNoW21ha2VDdXJyZW50LlgyXTog
S0VFUCAtIENPTlRFWFRfQ1VSUkVOVCAtICIrZ2V0VHJhY2VTd2l0Y2hNc2coKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENPTlRFWFRf
Q1VSUkVOVDsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50LnJlbGVhc2UoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICByZXMgPSBtYWtlQ3VycmVudFdpdGhpbkxvY2sobG9ja1Jl
cyk7CiAgICAgICAgICAgICAgICB1bmxvY2tSZXNvdXJjZXMgPSBDT05URVhUX05PVF9DVVJSRU5U
ID09IHJlczsgLy8gc3VjY2VzcyA/CgogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAg
ICAgKiBGSVhNRTogcmVmYWN0b3IgZGVwZW5kZW5jZSBvbiBKYXZhIDJEIC8gSk9HTCBicmlkZ2UK
ICAgICAgICAgICAgICAgICAgICBpZiAoIHRyYWNrZXIgIT0gbnVsbCAmJiByZXMgPT0gQ09OVEVY
VF9DVVJSRU5UX05FVyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5jcmVhc2UgcmVm
ZXJlbmNlIGNvdW50IG9mIEdMT2JqZWN0VHJhY2tlcgogICAgICAgICAgICAgICAgICAgICAgICB0
cmFja2VyLnJlZigpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAqLwog
ICAgICAgICAgICB9IGNhdGNoIChmaW5hbCBSdW50aW1lRXhjZXB0aW9uIGUpIHsKICAgICAgICAg
ICAgICAgIHVubG9ja1Jlc291cmNlcyA9IHRydWU7CiAgICAgICAgICAgICAgICB0aHJvdyBlOwog
ICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgaWYgKHVubG9ja1Jlc291cmNl
cykgewogICAgICAgICAgICAgICAgICAgIGlmKCBERUJVR19UUkFDRV9TV0lUQ0ggKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihnZXRUaHJlYWROYW1lKCkgKyI6
IEdMQ29udGV4dC5Db250ZXh0U3dpdGNoW21ha2VDdXJyZW50LjFdOiBDb250ZXh0IGxvY2sudW5s
b2NrKCkgZHVlIHRvIGVycm9yLCByZXMgIittYWtlQ3VycmVudFJlc3VsdFRvU3RyaW5nKHJlcykr
IiwgIitsb2NrKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgbG9j
ay51bmxvY2soKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gLyog
aWYgKCBkcmF3YWJsZS5pc1JlYWxpemVkKCkgKSAqLwogICAgfSBjYXRjaCAoZmluYWwgUnVudGlt
ZUV4Y2VwdGlvbiBlKSB7CiAgICAgIHVubG9ja1Jlc291cmNlcyA9IHRydWU7CiAgICAgIHRocm93
IGU7CiAgICB9IGZpbmFsbHkgewogICAgICBpZiAodW5sb2NrUmVzb3VyY2VzKSB7CiAgICAgICAg
ZHJhd2FibGUudW5sb2NrU3VyZmFjZSgpOwogICAgICB9CiAgICB9CgogICAgaWYgKCBDT05URVhU
X05PVF9DVVJSRU5UICE9IHJlcyApIHsgLy8gc3RpbGwgbG9ja2VkIQogICAgICBpZiggMCA9PSBk
cmF3YWJsZS5nZXRIYW5kbGUoKSAmJiAhaXNTdXJmYWNlbGVzcyApIHsKICAgICAgICAgIGlmKCBo
YXNSZW5kZXJlclF1aXJrKEdMUmVuZGVyZXJRdWlya3MuTm9TdXJmYWNlbGVzc0N0eCkgKSB7CiAg
ICAgICAgICAgICAgdGhyb3cgbmV3IEdMRXhjZXB0aW9uKFN0cmluZy5mb3JtYXQoIlN1cmZhY2Vs
ZXNzIG5vdCBzdXBwb3J0ZWQgZHVlIHRvIHF1aXJrICVzOiAlcyIsCiAgICAgICAgICAgICAgICAg
ICAgICBHTFJlbmRlcmVyUXVpcmtzLnRvU3RyaW5nKEdMUmVuZGVyZXJRdWlya3MuTm9TdXJmYWNl
bGVzc0N0eCksIHRvU3RyaW5nKCkpKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmKCBERUJVRyAp
IHsKICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oZ2V0VGhyZWFkTmFtZSgpICsiOiBH
TENvbnRleHQubWFrZUN1cnJlbnQ6IFN1cmZhY2VsZXNzIE9LIC0gdmFsaWRhdGVkIik7CiAgICAg
ICAgICB9CiAgICAgICAgICBpc1N1cmZhY2VsZXNzID0gdHJ1ZTsKICAgICAgfQogICAgICBzZXRD
dXJyZW50KHRoaXMpOwogICAgICBpZiggQ09OVEVYVF9DVVJSRU5UX05FVyA9PSByZXMgKSB7CiAg
ICAgICAgLy8gY2hlY2sgaWYgdGhlIGRyYXdhYmxlJ3MgYW5kIHRoZSBHTCdzIEdMUHJvZmlsZSBh
cmUgZXF1YWwKICAgICAgICAvLyB0aHJvd3MgYW4gR0xFeGNlcHRpb24gaWYgbm90CiAgICAgICAg
Ly8gRklYTUU6IGRyYXdhYmxlLmdldEdMUHJvZmlsZSgpLnZlcmlmeUVxdWFsaXR5KGdsLmdldEdM
UHJvZmlsZSgpKTsKCiAgICAgICAgZ2xEZWJ1Z0hhbmRsZXIuaW5pdCggaXNHTERlYnVnRW5hYmxl
ZCgpICk7CgogICAgICAgIGlmKERFQlVHX0dMKSB7CiAgICAgICAgICAgIHNldEdMKCBHTFBpcGVs
aW5lRmFjdG9yeS5jcmVhdGUoImNvbS5qb2dhbXAub3BlbmdsLkRlYnVnIiwgbnVsbCwgZ2wsIG51
bGwpICk7CiAgICAgICAgICAgIGlmKGdsRGVidWdIYW5kbGVyLmlzRW5hYmxlZCgpKSB7CiAgICAg
ICAgICAgICAgICBnbERlYnVnSGFuZGxlci5hZGRMaXN0ZW5lcihuZXcgR0xEZWJ1Z01lc3NhZ2VI
YW5kbGVyLlN0ZEVyckdMRGVidWdMaXN0ZW5lcih0cnVlKSk7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgICAgaWYoVFJBQ0VfR0wpIHsKICAgICAgICAgICAgc2V0R0woIEdMUGlwZWxpbmVG
YWN0b3J5LmNyZWF0ZSgiY29tLmpvZ2FtcC5vcGVuZ2wuVHJhY2UiLCBudWxsLCBnbCwgbmV3IE9i
amVjdFtdIHsgU3lzdGVtLmVyciB9ICkgKTsKICAgICAgICB9CgogICAgICAgIGZvcmNlRHJhd2Fi
bGVBc3NvY2lhdGlvbiA9IHRydWU7CiAgICAgIH0KCiAgICAgIGlmKCBmb3JjZURyYXdhYmxlQXNz
b2NpYXRpb24gKSB7CiAgICAgICAgICBhc3NvY2lhdGVEcmF3YWJsZSh0cnVlKTsKICAgICAgfQoK
ICAgICAgY29udGV4dE1hZGVDdXJyZW50KHRydWUpOwoKICAgICAgLyogRklYTUU6IHJlZmFjdG9y
IGRlcGVuZGVuY2Ugb24gSmF2YSAyRCAvIEpPR0wgYnJpZGdlCgogICAgICAvLyBUcnkgY2xlYW5p
bmcgdXAgYW55IHN0YWxlIHNlcnZlci1zaWRlIE9wZW5HTCBvYmplY3RzCiAgICAgIC8vIEZJWE1F
OiBub3Qgc3VyZSB3aGF0IHRvIGRvIGhlcmUgaWYgdGhpcyB0aHJvd3MKICAgICAgaWYgKGRlbGV0
ZWRPYmplY3RUcmFja2VyICE9IG51bGwpIHsKICAgICAgICBkZWxldGVkT2JqZWN0VHJhY2tlci5j
bGVhbihnZXRHTCgpKTsKICAgICAgfQogICAgICAqLwogICAgfQogICAgaWYoIFRSQUNFX1NXSVRD
SCApIHsKICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oZ2V0VGhyZWFkTmFtZSgpICsiOiBHTENv
bnRleHQuQ29udGV4dFN3aXRjaFttYWtlQ3VycmVudC5YM106IFNXSVRDSCAtICIrbWFrZUN1cnJl
bnRSZXN1bHRUb1N0cmluZyhyZXMpKyIgLSBzdGF0ZVRyYWNrZXIub24gIitnbFN0YXRlVHJhY2tl
ci5pc0VuYWJsZWQoKSsiIC0gIitnZXRUcmFjZVN3aXRjaE1zZygpKTsKICAgIH0KICAgIHJldHVy
biByZXM7CiAgfQoKICBwcml2YXRlIGZpbmFsIEdMQ29udGV4dEltcGwgZ2V0T3RoZXJTaGFyZWRN
YXN0ZXIoKSB7CiAgICAgIGZpbmFsIEdMQ29udGV4dEltcGwgc2hhcmVkTWFzdGVyID0gKEdMQ29u
dGV4dEltcGwpIEdMQ29udGV4dFNoYXJlU2V0LmdldFNoYXJlZE1hc3Rlcih0aGlzKTsKICAgICAg
cmV0dXJuIHRoaXMgIT0gc2hhcmVkTWFzdGVyID8gc2hhcmVkTWFzdGVyIDogbnVsbDsKICB9CiAg
cHJpdmF0ZSBmaW5hbCBpbnQgbWFrZUN1cnJlbnRXaXRoaW5Mb2NrKGZpbmFsIGludCBzdXJmYWNl
TG9ja1JlcykgdGhyb3dzIEdMRXhjZXB0aW9uIHsKICAgICAgaWYgKCFpc0NyZWF0ZWQoKSkgewog
ICAgICAgIGlmKCAwID49IGRyYXdhYmxlLmdldFN1cmZhY2VXaWR0aCgpIHx8IDAgPj0gZHJhd2Fi
bGUuZ2V0U3VyZmFjZUhlaWdodCgpICkgewogICAgICAgICAgICBpZiAoIERFQlVHX1RSQUNFX1NX
SVRDSCApIHsKICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihnZXRUaHJlYWROYW1l
KCkgKyAiOiBDcmVhdGUgR0wgY29udGV4dCBSRUpFQ1RFRCAoemVybyBzdXJmYWNlIHNpemUpIGZv
ciAiICsgZ2V0Q2xhc3MoKS5nZXROYW1lKCkrIiAtICIrZ2V0VHJhY2VTd2l0Y2hNc2coKSk7CiAg
ICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oZHJhd2FibGUudG9TdHJpbmcoKSk7CiAg
ICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIENPTlRFWFRfTk9UX0NVUlJFTlQ7CiAgICAg
ICAgfQogICAgICAgIGlmKERFQlVHX0dMKSB7CiAgICAgICAgICAgIC8vIG9ubHkgaW1wYWN0cyB3
LyBjcmVhdGVDb250ZXh0QVJCKC4uKQogICAgICAgICAgICBhZGRpdGlvbmFsQ3R4Q3JlYXRpb25G
bGFncyB8PSBHTENvbnRleHQuQ1RYX09QVElPTl9ERUJVRyA7CiAgICAgICAgfQoKICAgICAgICBm
aW5hbCBib29sZWFuIGNyZWF0ZWQ7CiAgICAgICAgZmluYWwgR0xDb250ZXh0SW1wbCBzaGFyZWRN
YXN0ZXIgPSBnZXRPdGhlclNoYXJlZE1hc3RlcigpOwogICAgICAgIGlmICggbnVsbCAhPSBzaGFy
ZWRNYXN0ZXIgKSB7CiAgICAgICAgICAgIGlmICggTmF0aXZlU3VyZmFjZS5MT0NLX1NVUkZBQ0Vf
Tk9UX1JFQURZID49IHNoYXJlZE1hc3Rlci5kcmF3YWJsZS5sb2NrU3VyZmFjZSgpICkgewogICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IEdMRXhjZXB0aW9uKCJHTENvbnRleHRTaGFyZVNldCBjb3Vs
ZCBub3QgbG9jayBzaGFyZWRNYXN0ZXIgc3VyZmFjZTogIitzaGFyZWRNYXN0ZXIuZHJhd2FibGUp
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmICgg
bnVsbCAhPSBzaGFyZWRNYXN0ZXIgKSB7CiAgICAgICAgICAgICAgICBmaW5hbCBsb25nIHNoYXJl
ZE1hc3RlckhhbmRsZSA9IHNoYXJlZE1hc3Rlci5nZXRIYW5kbGUoKTsKICAgICAgICAgICAgICAg
IGlmICggMCA9PSBzaGFyZWRNYXN0ZXJIYW5kbGUgKSB7CiAgICAgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IEdMRXhjZXB0aW9uKCJHTENvbnRleHRTaGFyZVNldCByZXR1cm5lZCBhbiBpbnZhbGlk
IHNoYXJlZE1hc3RlciBjb250ZXh0OiAiK3NoYXJlZE1hc3Rlcik7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICBjcmVhdGVkID0gY3JlYXRlSW1wbChzaGFyZWRNYXN0ZXJIYW5kbGUp
OyAvLyBtYXkgdGhyb3dzIGV4Y2VwdGlvbiBpZiBmYWlscwogICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgY3JlYXRlZCA9IGNyZWF0ZUltcGwoMCk7IC8vIG1heSB0aHJvd3MgZXhj
ZXB0aW9uIGlmIGZhaWxzCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoIGNyZWF0ZWQgJiYg
aGFzTm9EZWZhdWx0VkFPKCkgKSB7CiAgICAgICAgICAgICAgICBmaW5hbCBpbnRbXSB0bXAgPSBu
ZXcgaW50WzFdOwogICAgICAgICAgICAgICAgZmluYWwgR0wgcm9vdEdMID0gZ2wuZ2V0Um9vdEdM
KCk7CiAgICAgICAgICAgICAgICBmaW5hbCBHTDJFUzMgZ2wyZXMzID0gcm9vdEdMLmdldEdMMkVT
MygpOwogICAgICAgICAgICAgICAgZ2wyZXMzLmdsR2VuVmVydGV4QXJyYXlzKDEsIHRtcCwgMCk7
CiAgICAgICAgICAgICAgICBkZWZhdWx0VkFPID0gdG1wWzBdOwogICAgICAgICAgICAgICAgZ2wy
ZXMzLmdsQmluZFZlcnRleEFycmF5KGRlZmF1bHRWQU8pOwogICAgICAgICAgICB9CiAgICAgICAg
fSBmaW5hbGx5IHsKICAgICAgICAgICAgaWYgKCBudWxsICE9IHNoYXJlZE1hc3RlciApIHsKICAg
ICAgICAgICAgICAgIHNoYXJlZE1hc3Rlci5kcmF3YWJsZS51bmxvY2tTdXJmYWNlKCk7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCBERUJVR19UUkFDRV9TV0lUQ0ggKSB7CiAg
ICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihnZXRUaHJlYWROYW1lKCkgKyAiOiBDcmVhdGUg
R0wgY29udGV4dCAiKyhjcmVhdGVkPyJPSyI6IkZBSUxFRCIpKyI6IEZvciAiICsgZ2V0Q2xhc3Mo
KS5nZXROYW1lKCkrIiAtICIrZ2V0R0xWZXJzaW9uKCkrIiAtICIrZ2V0VHJhY2VTd2l0Y2hNc2co
KSk7CiAgICAgICAgICAgIC8vIEV4Y2VwdGlvblV0aWxzLmR1bXBTdGFjayhTeXN0ZW0uZXJyLCAw
LCAxMCk7CiAgICAgICAgfQogICAgICAgIGlmKCFjcmVhdGVkKSB7CiAgICAgICAgICAgIHJldHVy
biBDT05URVhUX05PVF9DVVJSRU5UOwogICAgICAgIH0KCiAgICAgICAgLy8gZmluYWxpemUgbWFw
cGluZyB0aGUgYXZhaWxhYmxlIEdMVmVyc2lvbnMsIGluIGNhc2UgaXQncyBub3QgZG9uZSB5ZXQK
ICAgICAgICB7CiAgICAgICAgICAgIGZpbmFsIEFic3RyYWN0R3JhcGhpY3NDb25maWd1cmF0aW9u
IGNvbmZpZyA9IGRyYXdhYmxlLmdldE5hdGl2ZVN1cmZhY2UoKS5nZXRHcmFwaGljc0NvbmZpZ3Vy
YXRpb24oKTsKICAgICAgICAgICAgZmluYWwgQWJzdHJhY3RHcmFwaGljc0RldmljZSBkZXZpY2Ug
PSBjb25maWcuZ2V0U2NyZWVuKCkuZ2V0RGV2aWNlKCk7CgogICAgICAgICAgICAvLyBOb24gQVJC
IGRlc2t0b3AgcHJvZmlsZXMgbWF5IG5vdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZAogICAgICAgICAg
ICBpZiggIUdMQ29udGV4dC5nZXRBdmFpbGFibGVHTFZlcnNpb25zU2V0KGRldmljZSkgKSB7ICAg
ICAgICAvLyBub3QgeWV0IHNldAogICAgICAgICAgICAgICAgaWYoIDAgPT0gKCBjdHhPcHRpb25z
ICYgR0xDb250ZXh0LkNUWF9QUk9GSUxFX0VTKSApIHsgICAvLyBub3QgRVMgcHJvZmlsZQogICAg
ICAgICAgICAgICAgICAgIGZpbmFsIGludCByZXFNYWpvcjsKICAgICAgICAgICAgICAgICAgICBm
aW5hbCBpbnQgcmVxUHJvZmlsZTsKICAgICAgICAgICAgICAgICAgICBpZiggY3R4VmVyc2lvbi5j
b21wYXJlVG8oVmVyc2lvbjNfMCkgPD0gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVx
TWFqb3IgPSAyOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcU1ham9yID0gY3R4VmVyc2lvbi5nZXRNYWpvcigpOwogICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGlzQ29tcGF0OwogICAgICAg
ICAgICAgICAgICAgIGlmKCAwICE9ICggY3R4T3B0aW9ucyAmIEdMQ29udGV4dC5DVFhfUFJPRklM
RV9DT1JFKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVxUHJvZmlsZSA9IEdMQ29udGV4
dC5DVFhfUFJPRklMRV9DT1JFOwogICAgICAgICAgICAgICAgICAgICAgICBpc0NvbXBhdCA9IGZh
bHNlOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHJlcVByb2ZpbGUgPSBHTENvbnRleHQuQ1RYX1BST0ZJTEVfQ09NUEFUOwogICAgICAgICAgICAg
ICAgICAgICAgICBpc0NvbXBhdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgIGZpbmFsIE1hcHBlZEdMVmVyc2lvbiBtZSA9IG1hcEF2YWlsYWJsZUdMVmVy
c2lvbihkZXZpY2UsIHJlcU1ham9yLCByZXFQcm9maWxlLCBjdHhWZXJzaW9uLCBjdHhPcHRpb25z
LCBnbFJlbmRlcmVyUXVpcmtzKTsKICAgICAgICAgICAgICAgICAgICAvLyBQZXJmb3JtIGFsbCBy
ZXF1aXJlZCBwcm9maWxlIG1hcHBpbmdzCiAgICAgICAgICAgICAgICAgICAgaWYoIGlzQ29tcGF0
ICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBDT01QQVQgdmlhIG5vbiBBUkIKICAgICAg
ICAgICAgICAgICAgICAgICAgbWFwQXZhaWxhYmxlR0xWZXJzaW9uKGRldmljZSwgcmVxTWFqb3Is
IEdMQ29udGV4dC5DVFhfUFJPRklMRV9DT1JFLCBjdHhWZXJzaW9uLCBjdHhPcHRpb25zLCBnbFJl
bmRlcmVyUXVpcmtzKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHJlcU1ham9yID49IDQg
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBBdmFpbGFibGVHTFZlcnNpb24oZGV2
aWNlLCAzLCByZXFQcm9maWxlLCBjdHhWZXJzaW9uLCBjdHhPcHRpb25zLCBnbFJlbmRlcmVyUXVp
cmtzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcEF2YWlsYWJsZUdMVmVyc2lvbihk
ZXZpY2UsIDMsIEdMQ29udGV4dC5DVFhfUFJPRklMRV9DT1JFLCBjdHhWZXJzaW9uLCBjdHhPcHRp
b25zLCBnbFJlbmRlcmVyUXVpcmtzKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICBpZiggcmVxTWFqb3IgPj0gMyApIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1hcEF2YWlsYWJsZUdMVmVyc2lvbihkZXZpY2UsIDIsIHJlcVByb2ZpbGUsIGN0
eFZlcnNpb24sIGN0eE9wdGlvbnMsIGdsUmVuZGVyZXJRdWlya3MpOwogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQ09SRSB2aWEgbm9uIEFSQiwgdW5saWtlbHksIGhvd2V2ZXIgLi4KICAgICAgICAg
ICAgICAgICAgICAgICAgaWYoIHJlcU1ham9yID49IDQgKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYXBBdmFpbGFibGVHTFZlcnNpb24oZGV2aWNlLCAzLCByZXFQcm9maWxlLCBjdHhW
ZXJzaW9uLCBjdHhPcHRpb25zLCBnbFJlbmRlcmVyUXVpcmtzKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBHTENvbnRl
eHQuc2V0QXZhaWxhYmxlR0xWZXJzaW9uc1NldChkZXZpY2UsIHRydWUpOwoKICAgICAgICAgICAg
ICAgICAgICBpZiAoREVCVUcpIHsKICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJp
bnRsbihnZXRUaHJlYWROYW1lKCkgKyAiOiBjcmVhdGVDb250ZXh0T0xELU1hcEdMVmVyc2lvbnMg
SEFWRTogIiArIG1lKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgR0xDb250ZXh0U2hhcmVTZXQuY29udGV4dENy
ZWF0ZWQodGhpcyk7CiAgICAgICAgcmV0dXJuIENPTlRFWFRfQ1VSUkVOVF9ORVc7CiAgICAgIH0K
ICAgICAgbWFrZUN1cnJlbnRJbXBsKCk7CiAgICAgIHJldHVybiBDT05URVhUX0NVUlJFTlQ7CiAg
fQogIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIG1ha2VDdXJyZW50SW1wbCgpIHRocm93cyBHTEV4
Y2VwdGlvbjsKCiAgLyoqCiAgICogQ2FsbHMge0BsaW5rIEdMRHJhd2FibGVJbXBsI2Fzc29jaWF0
ZUNvbnRleHQoR0xDb250ZXh0LCBib29sZWFuKX0KICAgKi8KICBwcm90ZWN0ZWQgdm9pZCBhc3Nv
Y2lhdGVEcmF3YWJsZShmaW5hbCBib29sZWFuIGJvdW5kKSB7CiAgICAgIGRyYXdhYmxlLmFzc29j
aWF0ZUNvbnRleHQodGhpcywgYm91bmQpOwogIH0KCiAgLyoqCiAgICogQ2FsbHMge0BsaW5rIEdM
RHJhd2FibGVJbXBsI2NvbnRleHRNYWRlQ3VycmVudChHTENvbnRleHQsIGJvb2xlYW4pfQogICAq
LwogIHByb3RlY3RlZCB2b2lkIGNvbnRleHRNYWRlQ3VycmVudChmaW5hbCBib29sZWFuIGN1cnJl
bnQpIHsKICAgICAgZHJhd2FibGUuY29udGV4dE1hZGVDdXJyZW50KHRoaXMsIGN1cnJlbnQpOwog
IH0KCiAgLyoqCiAgICogUGxhdGZvcm0gZGVwZW5kZW50IGVudHJ5IHBvaW50IGZvciBjb250ZXh0
IGNyZWF0aW9uLgogICAqIDxwPgogICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIHtAbGlu
ayAjbWFrZUN1cnJlbnRXaXRoaW5Mb2NrKCl9IC4uIHtAbGluayAjbWFrZUN1cnJlbnQoKX0gLgog
ICAqIDwvcD4KICAgKiA8cD4KICAgKiBUaGUgaW1wbGVtZW50YXRpb24gc2hhbGwgdmVyaWZ5IHRo
aXMgY29udGV4dCB3aXRoIGEKICAgKiA8Y29kZT5NYWtlQ29udGV4dEN1cnJlbnQ8L2NvZGU+IGNh
bGwuCiAgICogPC9wPgogICAqIDxwPgogICAqIFRoZSBpbXBsZW1lbnRhdGlvbiA8Yj5tdXN0PC9i
PiBsZWF2ZSB0aGUgY29udGV4dCBjdXJyZW50LgogICAqIDwvcD4KICAgKiA8cD4KICAgKiBOb24g
ZmF0YWwgY29udGV4dCBjcmVhdGlvbiBmYWlsdXJlIHZpYSByZXR1cm4ge0Bjb2RlIGZhbHNlfQog
ICAqIGlzIGN1cnJlbnRseSBpbXBsZW1lbnRlZCBmb3I6IHtAY29kZSBNYWNPU1hDR0xDb250ZXh0
fS4KICAgKiA8L3A+CiAgICogQHBhcmFtIHNoYXJlZFdpdGhIYW5kbGUgdGhlIHNoYXJlZCBjb250
ZXh0IGhhbmRsZSBvciAwCiAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgc3VjY2Vzc2Z1bC4g
TWV0aG9kIHJldHVybnMge0Bjb2RlIGZhbHNlfSBpZiB0aGUgY29udGV4dCBjcmVhdGlvbiBmYWls
ZWQgbm9uIGZhdGFsbHksCiAgICogaGVuY2UgaXQgbWF5IGJlIGNyZWF0ZWQgYXQgYSBsYXRlciB0
aW1lLiBPdGhlcndpc2UgbWV0aG9kIHRocm93cyB7QGxpbmsgR0xFeGNlcHRpb259LgogICAqIEB0
aHJvd3MgR0xFeGNlcHRpb24gaWYgbWV0aG9kIGZhdGFsbHkgZmFpbHMgY3JlYXRpbmcgdGhlIGNv
bnRleHQgYW5kIG5vIGF0dGVtcHQgc2hhbGwgYmUgbWFkZSBhdCBhIGxhdGVyIHRpbWUuCiAgICov
CiAgcHJvdGVjdGVkIGFic3RyYWN0IGJvb2xlYW4gY3JlYXRlSW1wbChsb25nIHNoYXJlZFdpdGhI
YW5kbGUpIHRocm93cyBHTEV4Y2VwdGlvbiA7CgogIC8qKgogICAqIFBsYXRmb3JtIGRlcGVuZGVu
dCBidXQgaGFybW9uaXplZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgPGNvZGU+QVJCX2NyZWF0ZV9j
b250ZXh0PC9jb2RlPgogICAqIG1lY2hhbmlzbSB0byBjcmVhdGUgYSBjb250ZXh0Ljxicj4KICAg
KgogICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIHtAbGluayAjY3JlYXRlQ29udGV4dEFS
Qn0sIHtAbGluayAjY3JlYXRlSW1wbChsb25nKX0gLi4ge0BsaW5rICNtYWtlQ3VycmVudCgpfSAu
PGJyPgogICAqCiAgICogVGhlIGltcGxlbWVudGF0aW9uIHNoYWxsIHZlcmlmeSB0aGlzIGNvbnRl
eHQgd2l0aCBhCiAgICogPGNvZGU+TWFrZUNvbnRleHRDdXJyZW50PC9jb2RlPiBjYWxsLjxicj4K
ICAgKgogICAqIFRoZSBpbXBsZW1lbnRhdGlvbiA8Yj5tdXN0PC9iPiBsZWF2ZSB0aGUgY29udGV4
dCBjdXJyZW50Ljxicj4KICAgKgogICAqIEBwYXJhbSBzaGFyZSB0aGUgc2hhcmVkIGNvbnRleHQg
b3IgbnVsbAogICAqIEBwYXJhbSBkaXJlY3QgZmxhZyBpZiBkaXJlY3QgaXMgcmVxdWVzdGVkCiAg
ICogQHBhcmFtIGN0eE9wdGlvbkZsYWdzIDxjb2RlPkFSQl9jcmVhdGVfY29udGV4dDwvY29kZT4g
cmVsYXRlZCwgc2VlIHJlZmVyZW5jZXMgYmVsb3cKICAgKiBAcGFyYW0gbWFqb3IgbWFqb3IgbnVt
YmVyCiAgICogQHBhcmFtIG1pbm9yIG1pbm9yIG51bWJlcgogICAqIEByZXR1cm4gdGhlIHZhbGlk
IGFuZCBjdXJyZW50IGNvbnRleHQgaWYgc3VjY2Vzc2Z1bCwgb3IgbnVsbAogICAqCiAgICogQHNl
ZSAjbWFrZUN1cnJlbnQKICAgKiBAc2VlICNDVFhfUFJPRklMRV9DT01QQVQKICAgKiBAc2VlICND
VFhfT1BUSU9OX0ZPUldBUkQKICAgKiBAc2VlICNDVFhfT1BUSU9OX0RFQlVHCiAgICogQHNlZSAj
bWFrZUN1cnJlbnRJbXBsCiAgICogQHNlZSAjY3JlYXRlCiAgICogQHNlZSAjY3JlYXRlQ29udGV4
dEFSQgogICAqIEBzZWUgI2NyZWF0ZUNvbnRleHRBUkJJbXBsCiAgICogQHNlZSAjZGVzdHJveUNv
bnRleHRBUkJJbXBsCiAgICovCiAgcHJvdGVjdGVkIGFic3RyYWN0IGxvbmcgY3JlYXRlQ29udGV4
dEFSQkltcGwobG9uZyBzaGFyZSwgYm9vbGVhbiBkaXJlY3QsIGludCBjdHhPcHRpb25GbGFncywg
aW50IG1ham9yLCBpbnQgbWlub3IpOwoKICAvKioKICAgKiBEZXN0cm95IHRoZSBjb250ZXh0IGNy
ZWF0ZWQgYnkge0BsaW5rICNjcmVhdGVDb250ZXh0QVJCSW1wbH0uCiAgICoKICAgKiBAc2VlICNt
YWtlQ3VycmVudAogICAqIEBzZWUgI21ha2VDdXJyZW50SW1wbAogICAqIEBzZWUgI2NyZWF0ZQog
ICAqIEBzZWUgI2NyZWF0ZUNvbnRleHRBUkIKICAgKiBAc2VlICNjcmVhdGVDb250ZXh0QVJCSW1w
bAogICAqIEBzZWUgI2Rlc3Ryb3lDb250ZXh0QVJCSW1wbAogICAqLwogIHByb3RlY3RlZCBhYnN0
cmFjdCB2b2lkIGRlc3Ryb3lDb250ZXh0QVJCSW1wbChsb25nIGNvbnRleHQpOwoKICBwcm90ZWN0
ZWQgZmluYWwgYm9vbGVhbiBpc0NyZWF0ZUNvbnRleHRBUkJBdmFpbChmaW5hbCBBYnN0cmFjdEdy
YXBoaWNzRGV2aWNlIGRldmljZSkgewogICAgcmV0dXJuICFHTFByb2ZpbGUuZGlzYWJsZU9wZW5H
TEFSQkNvbnRleHQgJiYKICAgICAgICAgICAhR0xSZW5kZXJlclF1aXJrcy5leGlzdFN0aWNreURl
dmljZVF1aXJrKGRldmljZSwgR0xSZW5kZXJlclF1aXJrcy5Ob0FSQkNyZWF0ZUNvbnRleHQpOwog
IH0KICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIGdldENyZWF0ZUNvbnRleHRBUkJBdmFpbFN0cihm
aW5hbCBBYnN0cmFjdEdyYXBoaWNzRGV2aWNlIGRldmljZSkgewogICAgZmluYWwgYm9vbGVhbiBu
b0FSQkNyZWF0ZUNvbnRleHQgPSBHTFJlbmRlcmVyUXVpcmtzLmV4aXN0U3RpY2t5RGV2aWNlUXVp
cmsoZGV2aWNlLCBHTFJlbmRlcmVyUXVpcmtzLk5vQVJCQ3JlYXRlQ29udGV4dCk7CiAgICByZXR1
cm4gImRpc2FibGVkICIrR0xQcm9maWxlLmRpc2FibGVPcGVuR0xBUkJDb250ZXh0KyIsIHF1aXJr
ICIrbm9BUkJDcmVhdGVDb250ZXh0OwogIH0KCiAgLyoqCiAgICogUGxhdGZvcm0gaW5kZXBlbmRl
bnQgcGFydCBvZiB1c2luZyB0aGUgPGNvZGU+QVJCX2NyZWF0ZV9jb250ZXh0PC9jb2RlPgogICAq
IG1lY2hhbmlzbSB0byBjcmVhdGUgYSBjb250ZXh0Ljxicj4KICAgKgogICAqIFRoZSBpbXBsZW1l
bnRhdGlvbiBvZiB7QGxpbmsgI2NyZWF0ZX0gc2hhbGwgdXNlIHRoaXMgcHJvdG9jb2wgaW4gY2Fz
ZSB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgPGNvZGU+QVJCX2NyZWF0ZV9jb250ZXh0PC9jb2RlPi48
YnI+CiAgICoKICAgKiBUaGlzIG1ldGhvZCBtYXkgY2FsbCB7QGxpbmsgI2NyZWF0ZUNvbnRleHRB
UkJJbXBsfSBhbmQge0BsaW5rICNkZXN0cm95Q29udGV4dEFSQkltcGx9LiA8YnI+CiAgICoKICAg
KiBUaGlzIG1ldGhvZCB3aWxsIGFsc28gcXVlcnkgYWxsIGF2YWlsYWJsZSBuYXRpdmUgT3BlbkdM
IGNvbnRleHQgd2hlbiBmaXJzdCBjYWxsZWQsPGJyPgogICAqIHVzdWFsbHkgdGhlIGZpcnN0IGNh
bGwgc2hvdWxkIGhhcHBlbiB3aXRoIHRoZSBzaGFyZWQgR0xDb250ZXh0IG9mIHRoZSBEcmF3YWJs
ZUZhY3RvcnkuPGJyPgogICAqCiAgICogVGhlIGltcGxlbWVudGF0aW9uIG1ha2VzIHRoZSBjb250
ZXh0IGN1cnJlbnQsIGlmIHN1Y2Nlc3NmdWw8YnI+CiAgICoKICAgKiBAc2VlICNtYWtlQ3VycmVu
dEltcGwKICAgKiBAc2VlICNjcmVhdGUKICAgKiBAc2VlICNjcmVhdGVDb250ZXh0QVJCCiAgICog
QHNlZSAjY3JlYXRlQ29udGV4dEFSQkltcGwKICAgKiBAc2VlICNkZXN0cm95Q29udGV4dEFSQklt
cGwKICAgKi8KICBwcm90ZWN0ZWQgZmluYWwgbG9uZyBjcmVhdGVDb250ZXh0QVJCKGZpbmFsIGxv
bmcgc2hhcmUsIGZpbmFsIGJvb2xlYW4gZGlyZWN0KQogIHsKICAgIGZpbmFsIEFic3RyYWN0R3Jh
cGhpY3NDb25maWd1cmF0aW9uIGNvbmZpZyA9IGRyYXdhYmxlLmdldE5hdGl2ZVN1cmZhY2UoKS5n
ZXRHcmFwaGljc0NvbmZpZ3VyYXRpb24oKTsKICAgIGZpbmFsIEFic3RyYWN0R3JhcGhpY3NEZXZp
Y2UgZGV2aWNlID0gY29uZmlnLmdldFNjcmVlbigpLmdldERldmljZSgpOwogICAgZmluYWwgR0xD
YXBhYmlsaXRpZXNJbW11dGFibGUgZ2xDYXBzID0gKEdMQ2FwYWJpbGl0aWVzSW1tdXRhYmxlKSBj
b25maWcuZ2V0Q2hvc2VuQ2FwYWJpbGl0aWVzKCk7CiAgICBmaW5hbCBHTFByb2ZpbGUgZ2xwID0g
Z2xDYXBzLmdldEdMUHJvZmlsZSgpOwoKICAgIGlmIChERUJVRykgewogICAgICBTeXN0ZW0uZXJy
LnByaW50bG4oZ2V0VGhyZWFkTmFtZSgpICsgIjogY3JlYXRlQ29udGV4dEFSQi1NYXBHTFZlcnNp
b25zIGlzIFNFVCAoIitkZXZpY2UuZ2V0Q29ubmVjdGlvbigpKyIpOiAiKwogICAgICAgICAgICAg
ICBHTENvbnRleHQuZ2V0QXZhaWxhYmxlR0xWZXJzaW9uc1NldChkZXZpY2UpKTsKICAgIH0KICAg
IGlmICggIUdMQ29udGV4dC5nZXRBdmFpbGFibGVHTFZlcnNpb25zU2V0KGRldmljZSkgKSB7CiAg
ICAgICAgaWYoICFtYXBHTFZlcnNpb25zKGRldmljZSkgKSB7CiAgICAgICAgICAgIC8vIG5vbmUg
b2YgdGhlIEFSQiBjb250ZXh0IGNyZWF0aW9uIGNhbGxzIHdhcyBzdWNjZXNzZnVsLCBiYWlsIG91
dAogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICB9CgogICAgZmluYWwgaW50W10g
cmVxTWFqb3JDVFAgPSBuZXcgaW50W10geyAwLCAwIH07CiAgICBHTENvbnRleHQuZ2V0UmVxdWVz
dE1ham9yQW5kQ29tcGF0KGdscCwgcmVxTWFqb3JDVFApOwoKICAgIGlmKERFQlVHKSB7CiAgICAg
ICAgU3lzdGVtLmVyci5wcmludGxuKGdldFRocmVhZE5hbWUoKSArICI6IGNyZWF0ZUNvbnRleHRB
UkItTWFwR0xWZXJzaW9ucyBSZXF1ZXN0ZWQgIitnbHArIiAtPiAiK0dMQ29udGV4dC5nZXRHTFZl
cnNpb24ocmVxTWFqb3JDVFBbMF0sIDAsIHJlcU1ham9yQ1RQWzFdLCBudWxsKSk7CiAgICB9CiAg
ICBmaW5hbCBpbnQgX21ham9yW10gPSB7IDAgfTsKICAgIGZpbmFsIGludCBfbWlub3JbXSA9IHsg
MCB9OwogICAgZmluYWwgaW50IF9jdHBbXSA9IHsgMCB9OwogICAgbG9uZyBfY3R4ID0gMDsKICAg
IGlmKCBHTENvbnRleHQuZ2V0QXZhaWxhYmxlR0xWZXJzaW9uKGRldmljZSwgcmVxTWFqb3JDVFBb
MF0sIHJlcU1ham9yQ1RQWzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX21ham9yLCBfbWlub3IsIF9jdHApKSB7CiAgICAgICAgX2N0cFswXSB8PSBhZGRpdGlvbmFs
Q3R4Q3JlYXRpb25GbGFnczsKICAgICAgICBpZihERUJVRykgewogICAgICAgICAgICBTeXN0ZW0u
ZXJyLnByaW50bG4oZ2V0VGhyZWFkTmFtZSgpICsgIjogY3JlYXRlQ29udGV4dEFSQi1NYXBHTFZl
cnNpb25zIE1hcHBlZCAiK0dMQ29udGV4dC5nZXRHTFZlcnNpb24oX21ham9yWzBdLCBfbWlub3Jb
MF0sIF9jdHBbMF0sIG51bGwpKTsKICAgICAgICB9CiAgICAgICAgX2N0eCA9IGNyZWF0ZUNvbnRl
eHRBUkJJbXBsKHNoYXJlLCBkaXJlY3QsIF9jdHBbMF0sIF9tYWpvclswXSwgX21pbm9yWzBdKTsK
ICAgICAgICBpZigwIT1fY3R4KSB7CiAgICAgICAgICAgIGlmKCAhc2V0R0xGdW5jdGlvbkF2YWls
YWJpbGl0eSh0cnVlLCBfbWFqb3JbMF0sIF9taW5vclswXSwgX2N0cFswXSwgZmFsc2UgLyogc3Ry
aWN0TWF0Y2ggKi8sIGZhbHNlIC8qIHdpdGhpbkdMVmVyc2lvbnNNYXBwaW5nICovKSApIHsKICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKCJzZXRHTEZ1bmN0aW9uQXZhaWxh
YmlsaXR5ICFzdHJpY3RNYXRjaCBmYWlsZWQiKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
IH0KICAgIHJldHVybiBfY3R4OwogIH0KCiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgLy8KCiAgcHVibGlj
IHN0YXRpYyBjbGFzcyBNYXBwZWRHTFZlcnNpb24gewogICAgICBwdWJsaWMgZmluYWwgQWJzdHJh
Y3RHcmFwaGljc0RldmljZSBkZXZpY2U7CiAgICAgIHB1YmxpYyBmaW5hbCBpbnQgcmVxTWFqb3JW
ZXJzaW9uOwogICAgICBwdWJsaWMgZmluYWwgaW50IHJlcVByb2ZpbGU7CiAgICAgIHB1YmxpYyBm
aW5hbCBWZXJzaW9uTnVtYmVyIGN0eFZlcnNpb247CiAgICAgIHB1YmxpYyBmaW5hbCBpbnQgY3R4
T3B0aW9uczsKICAgICAgcHVibGljIGZpbmFsIEdMUmVuZGVyZXJRdWlya3MgcXVpcmtzOwogICAg
ICBwdWJsaWMgZmluYWwgVmVyc2lvbk51bWJlciBwcmVDdHhWZXJzaW9uOwogICAgICBwdWJsaWMg
ZmluYWwgaW50IHByZUN0eE9wdGlvbnM7CiAgICAgIHB1YmxpYyBNYXBwZWRHTFZlcnNpb24oZmlu
YWwgQWJzdHJhY3RHcmFwaGljc0RldmljZSBkZXZpY2UsIGZpbmFsIGludCByZXFNYWpvclZlcnNp
b24sIGZpbmFsIGludCByZXFQcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
bmFsIFZlcnNpb25OdW1iZXIgY3R4VmVyc2lvbiwgZmluYWwgaW50IGN0eE9wdGlvbnMsIGZpbmFs
IEdMUmVuZGVyZXJRdWlya3MgcXVpcmtzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
bmFsIFZlcnNpb25OdW1iZXIgcHJlQ3R4VmVyc2lvbiwgZmluYWwgaW50IHByZUN0eE9wdGlvbnMp
IHsKICAgICAgICAgIHRoaXMuZGV2aWNlID0gZGV2aWNlOwogICAgICAgICAgdGhpcy5yZXFNYWpv
clZlcnNpb24gPSByZXFNYWpvclZlcnNpb247CiAgICAgICAgICB0aGlzLnJlcVByb2ZpbGUgPSBy
ZXFQcm9maWxlOwogICAgICAgICAgdGhpcy5jdHhWZXJzaW9uID0gY3R4VmVyc2lvbjsKICAgICAg
ICAgIHRoaXMuY3R4T3B0aW9ucyA9IGN0eE9wdGlvbnM7CiAgICAgICAgICB0aGlzLnF1aXJrcyA9
IHF1aXJrczsKICAgICAgICAgIHRoaXMucHJlQ3R4VmVyc2lvbiA9IHByZUN0eFZlcnNpb247CiAg
ICAgICAgICB0aGlzLnByZUN0eE9wdGlvbnMgPSBwcmVDdHhPcHRpb25zOwogICAgICB9CiAgICAg
IHB1YmxpYyBmaW5hbCBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgICByZXR1cm4gdG9TdHJp
bmcobmV3IFN0cmluZ0J1aWxkZXIoKSwgLTEsIC0xLCAtMSwgLTEpLnRvU3RyaW5nKCk7CiAgICAg
IH0KICAgICAgcHVibGljIGZpbmFsIFN0cmluZ0J1aWxkZXIgdG9TdHJpbmcoZmluYWwgU3RyaW5n
QnVpbGRlciBzYiwgZmluYWwgaW50IG1pbk1ham9yLCBmaW5hbCBpbnQgbWluTWlub3IsIGZpbmFs
IGludCBtYXhNYWpvciwgZmluYWwgaW50IG1heE1pbm9yKSB7CiAgICAgICAgICBzYi5hcHBlbmQo
ZGV2aWNlLnRvU3RyaW5nKCkpLmFwcGVuZCgiICIpLmFwcGVuZChyZXFNYWpvclZlcnNpb24pLmFw
cGVuZCgiICgiKTsKICAgICAgICAgIEdMQ29udGV4dC5nZXRHTFByb2ZpbGUoc2IsIHJlcVByb2Zp
bGUpLmFwcGVuZCgiKSIpOwogICAgICAgICAgaWYoIG1pbk1ham9yID49MCAmJiBtaW5NaW5vciA+
PTAgJiYgbWF4TWFqb3IgPj0gMCAmJiBtYXhNaW5vciA+PSAwKSB7CiAgICAgICAgICAgICAgc2Iu
YXBwZW5kKCJbIikuYXBwZW5kKG1pbk1ham9yKS5hcHBlbmQoIi4iKS5hcHBlbmQobWluTWlub3Ip
LmFwcGVuZCgiIC4uICIpLmFwcGVuZChtYXhNYWpvcikuYXBwZW5kKCIuIikuYXBwZW5kKG1heE1p
bm9yKS5hcHBlbmQoIl0iKTsKICAgICAgICAgIH0KICAgICAgICAgIHNiLmFwcGVuZCgiOiBbIik7
CiAgICAgICAgICBpZiggbnVsbCAhPSBwcmVDdHhWZXJzaW9uICkgewogICAgICAgICAgICAgIEdM
Q29udGV4dC5nZXRHTFZlcnNpb24oc2IsIHByZUN0eFZlcnNpb24sIHByZUN0eE9wdGlvbnMsIG51
bGwpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBzYi5hcHBlbmQoIk5vbmUiKTsK
ICAgICAgICAgIH0KICAgICAgICAgIHNiLmFwcGVuZCgiXSAtPiBbIik7CiAgICAgICAgICBHTENv
bnRleHQuZ2V0R0xWZXJzaW9uKHNiLCBjdHhWZXJzaW9uLCBjdHhPcHRpb25zLCBudWxsKS5hcHBl
bmQoIl0iKTsKICAgICAgICAgIHJldHVybiBzYjsKICAgICAgfQogIH0KICBwdWJsaWMgc3RhdGlj
IGludGVyZmFjZSBNYXBwZWRHTFZlcnNpb25MaXN0ZW5lciB7CiAgICAgIHZvaWQgZ2xWZXJzaW9u
TWFwcGVkKGZpbmFsIE1hcHBlZEdMVmVyc2lvbiBlKTsKICB9CiAgcHJpdmF0ZSBzdGF0aWMgTWFw
cGVkR0xWZXJzaW9uTGlzdGVuZXIgbWFwR0xWZXJzaW9uTGlzdGVuZXIgPSBudWxsOwogIHByb3Rl
Y3RlZCBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgc2V0TWFwcGVkR0xWZXJzaW9uTGlzdGVuZXIo
ZmluYWwgTWFwcGVkR0xWZXJzaW9uTGlzdGVuZXIgbXZsKSB7CiAgICAgIG1hcEdMVmVyc2lvbkxp
c3RlbmVyID0gbXZsOwogIH0KCiAgLyoqCiAgICogQ2FsbGVkIGJ5IHtAbGluayBqb2dhbXAub3Bl
bmdsLkdMQ29udGV4dEltcGwjY3JlYXRlQ29udGV4dEFSQk1hcFZlcnNpb25zQXZhaWxhYmxlKGlu
dCxpbnQpfSBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBieQogICAqIGltcGxlbWVudGF0aW9ucy4g
SG93ZXZlciwgaWYge0BsaW5rIGpvZ2FtcC5vcGVuZ2wuR0xDb250ZXh0SW1wbCNjcmVhdGVDb250
ZXh0QVJCKGxvbmcsIGJvb2xlYW4pfSBpcyBub3QgYmVpbmcgdXNlZCB3aXRoaW4KICAgKiB7QGxp
bmsgY29tLmpvZ2FtcC5vcGVuZ2wuR0xEcmF3YWJsZUZhY3RvcnkjZ2V0T3JDcmVhdGVTaGFyZWRD
b250ZXh0KGNvbS5qb2dhbXAubmF0aXZld2luZG93LkFic3RyYWN0R3JhcGhpY3NEZXZpY2UpfSwK
ICAgKiBHTFByb2ZpbGUgaGFzIHRvIG1hcCB0aGUgYXZhaWxhYmxlIHZlcnNpb25zLgogICAqCiAg
ICogQHBhcmFtIHJlcU1ham9yIEtleSBWYWx1ZSBlaXRoZXIgMSwgMiwgMyBvciA0CiAgICogQHBh
cmFtIHByb2ZpbGUgS2V5IFZhbHVlIGVpdGhlciB7QGxpbmsgI0NUWF9QUk9GSUxFX0NPTVBBVH0s
IHtAbGluayAjQ1RYX1BST0ZJTEVfQ09SRX0gb3Ige0BsaW5rICNDVFhfUFJPRklMRV9FU30KICAg
KiBAcGFyYW0gcmVzVmVyc2lvbiB0aGUgcmVzdWx0aW5nIHZlcnNpb24gbnVtYmVyCiAgICogQHBh
cmFtIHJlc0N0cCB0aGUgcmVzdWx0aW5nIGNvbnRleHQgb3B0aW9ucwogICAqIEByZXR1cm4gdGhl
IG9sZCBtYXBwZWQgdmFsdWUKICAgKgogICAqIEBzZWUgI2NyZWF0ZUNvbnRleHRBUkJNYXBWZXJz
aW9uc0F2YWlsYWJsZQogICAqLwogIHByb3RlY3RlZCBzdGF0aWMgTWFwcGVkR0xWZXJzaW9uIG1h
cEF2YWlsYWJsZUdMVmVyc2lvbihmaW5hbCBBYnN0cmFjdEdyYXBoaWNzRGV2aWNlIGRldmljZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaW5hbCBpbnQgcmVxTWFqb3IsIGZpbmFsIGludCBwcm9maWxlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFZlcnNpb25O
dW1iZXIgcmVzVmVyc2lvbiwgZmluYWwgaW50IHJlc0N0cCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBHTFJlbmRlcmVyUXVp
cmtzIHJlc1F1aXJrcykKICB7CiAgICAgIGZpbmFsIEludGVnZXIgcHJlVmFsID0gbWFwQXZhaWxh
YmxlR0xWZXJzaW9uKGRldmljZSwgcmVxTWFqb3IsIHByb2ZpbGUsIHJlc1ZlcnNpb24sIHJlc0N0
cCk7CiAgICAgIGZpbmFsIGludFtdIHByZUN0cCA9IHsgMCB9OwogICAgICBmaW5hbCBWZXJzaW9u
TnVtYmVyIHByZVZlcnNpb24gPSBudWxsICE9IHByZVZhbCA/IGRlY29tcG9zZUJpdHMocHJlVmFs
LmludFZhbHVlKCksIHByZUN0cCkgOiBudWxsOwogICAgICBmaW5hbCBNYXBwZWRHTFZlcnNpb24g
cmVzID0gbmV3IE1hcHBlZEdMVmVyc2lvbihkZXZpY2UsIHJlcU1ham9yLCBwcm9maWxlLCByZXNW
ZXJzaW9uLCByZXNDdHAsIHJlc1F1aXJrcywgcHJlVmVyc2lvbiwgcHJlQ3RwWzBdKTsKICAgICAg
aWYoIG51bGwgIT0gbWFwR0xWZXJzaW9uTGlzdGVuZXIgKSB7CiAgICAgICAgICBtYXBHTFZlcnNp
b25MaXN0ZW5lci5nbFZlcnNpb25NYXBwZWQocmVzKTsKICAgICAgfQogICAgICByZXR1cm4gcmVz
OwogIH0KICBwcml2YXRlIHN0YXRpYyBJbnRlZ2VyIG1hcEF2YWlsYWJsZUdMVmVyc2lvbihmaW5h
bCBBYnN0cmFjdEdyYXBoaWNzRGV2aWNlIGRldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgcmVxTWFqb3IsIGZpbmFsIGludCBwcm9m
aWxlLCBmaW5hbCBWZXJzaW9uTnVtYmVyIHJlc1ZlcnNpb24sIGludCByZXNDdHApCiAgewogICAg
dmFsaWRhdGVQcm9maWxlQml0cyhwcm9maWxlLCAicHJvZmlsZSIpOwogICAgdmFsaWRhdGVQcm9m
aWxlQml0cyhyZXNDdHAsICJyZXNDdHAiKTsKCiAgICBpZihGT1JDRV9OT19GQk9fU1VQUE9SVCkg
ewogICAgICAgIHJlc0N0cCAmPSB+Q1RYX0lNUExfRkJPIDsKICAgIH0KICAgIGlmKERFQlVHKSB7
CiAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGdldFRocmVhZE5hbWUoKSArICI6IGNyZWF0ZUNv
bnRleHRBUkItTWFwR0xWZXJzaW9ucyBNQVAgIitkZXZpY2UrIjogIityZXFNYWpvcisiICgiK0dM
Q29udGV4dC5nZXRHTFByb2ZpbGUobmV3IFN0cmluZ0J1aWxkZXIoKSwgcHJvZmlsZSkudG9TdHJp
bmcoKSsgIikgLT4gIisKICAgICAgICAgZ2V0R0xWZXJzaW9uKHJlc1ZlcnNpb24uZ2V0TWFqb3Io
KSwgcmVzVmVyc2lvbi5nZXRNaW5vcigpLCByZXNDdHAsIG51bGwpKTsKICAgIH0KICAgIGZpbmFs
IFN0cmluZyBvYmplY3RLZXkgPSBnZXREZXZpY2VWZXJzaW9uQXZhaWxhYmxlS2V5KGRldmljZSwg
cmVxTWFqb3IsIHByb2ZpbGUpOwogICAgZmluYWwgSW50ZWdlciB2YWwgPSBJbnRlZ2VyLnZhbHVl
T2YoY29tcG9zZUJpdHMocmVzVmVyc2lvbi5nZXRNYWpvcigpLCByZXNWZXJzaW9uLmdldE1pbm9y
KCksIHJlc0N0cCkpOwogICAgc3luY2hyb25pemVkKGRldmljZVZlcnNpb25BdmFpbGFibGUpIHsK
ICAgICAgICByZXR1cm4gZGV2aWNlVmVyc2lvbkF2YWlsYWJsZS5wdXQoIG9iamVjdEtleSwgdmFs
ICk7CiAgICB9CiAgfQoKCiAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHJlbWFwQXZhaWxhYmxlR0xW
ZXJzaW9ucyhmaW5hbCBBYnN0cmFjdEdyYXBoaWNzRGV2aWNlIGZyb21EZXZpY2UsIGZpbmFsIEFi
c3RyYWN0R3JhcGhpY3NEZXZpY2UgdG9EZXZpY2UpIHsKICAgIGlmKCBmcm9tRGV2aWNlID09IHRv
RGV2aWNlIHx8IGZyb21EZXZpY2UuZ2V0VW5pcXVlSUQoKSA9PSB0b0RldmljZS5nZXRVbmlxdWVJ
RCgpICkgewogICAgICAgIHJldHVybjsgLy8gTk9QCiAgICB9CiAgICBzeW5jaHJvbml6ZWQoZGV2
aWNlVmVyc2lvbkF2YWlsYWJsZSkgewogICAgICAgIGlmKERFQlVHKSB7CiAgICAgICAgICAgIFN5
c3RlbS5lcnIucHJpbnRsbihnZXRUaHJlYWROYW1lKCkgKyAiOiBjcmVhdGVDb250ZXh0QVJCLU1h
cEdMVmVyc2lvbnMgUkVNQVAgIitmcm9tRGV2aWNlKyIgLT4gIit0b0RldmljZSk7CiAgICAgICAg
fQogICAgICAgIGZpbmFsIElkZW50aXR5SGFzaE1hcDxTdHJpbmcsIEludGVnZXI+IG5ld0Rldmlj
ZVZlcnNpb25BdmFpbGFibGUgPSBuZXcgSWRlbnRpdHlIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4o
KTsKICAgICAgICBmaW5hbCBTZXQ8U3RyaW5nPiBrZXlzID0gZGV2aWNlVmVyc2lvbkF2YWlsYWJs
ZS5rZXlTZXQoKTsKICAgICAgICBmb3IoZmluYWwgSXRlcmF0b3I8U3RyaW5nPiBrZXlJID0ga2V5
cy5pdGVyYXRvcigpOyBrZXlJLmhhc05leHQoKTsgKSB7CiAgICAgICAgICAgIGZpbmFsIFN0cmlu
ZyBvcmlnS2V5ID0ga2V5SS5uZXh0KCk7CiAgICAgICAgICAgIGZpbmFsIEludGVnZXIgdmFsSSA9
IGRldmljZVZlcnNpb25BdmFpbGFibGUuZ2V0KG9yaWdLZXkpOwogICAgICAgICAgICBpZiggbnVs
bCAhPSB2YWxJICkgewogICAgICAgICAgICAgICAgaWYoREVCVUcpIHsKICAgICAgICAgICAgICAg
ICAgICBmaW5hbCBpbnRbXSBjdHAgPSB7IDAgfTsKICAgICAgICAgICAgICAgICAgICBmaW5hbCBW
ZXJzaW9uTnVtYmVyIHZlcnNpb24gPSBkZWNvbXBvc2VCaXRzKHZhbEkuaW50VmFsdWUoKSwgY3Rw
KTsKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIiBNYXBHTFZlcnNpb25z
IFJFTUFQIE9MRCAiK29yaWdLZXkrIiAtPiAiK0dMQ29udGV4dC5nZXRHTFZlcnNpb24obmV3IFN0
cmluZ0J1aWxkZXIoKSwgdmVyc2lvbiwgY3RwWzBdLCBudWxsKS50b1N0cmluZygpKTsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG5ld0RldmljZVZlcnNpb25BdmFpbGFibGUucHV0
KG9yaWdLZXksIHZhbEkpOwogICAgICAgICAgICAgICAgZmluYWwgaW50IGRldlNlcElkeCA9IG9y
aWdLZXkubGFzdEluZGV4T2YoJy0nKTsKICAgICAgICAgICAgICAgIGlmKCAwID49IGRldlNlcElk
eCApIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcigiZGV2aWNl
LXNlcGFyYXRvciAnLScgYXQgIitkZXZTZXBJZHgrIiBvZiAiK29yaWdLZXkpOwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGRldlVuaXF1ZUlEID0gb3JpZ0tl
eS5zdWJzdHJpbmcoMCwgZGV2U2VwSWR4KTsKICAgICAgICAgICAgICAgIGlmKCBmcm9tRGV2aWNl
LmdldFVuaXF1ZUlEKCkuZXF1YWxzKGRldlVuaXF1ZUlEKSApIHsKICAgICAgICAgICAgICAgICAg
ICBmaW5hbCBTdHJpbmcgcHJvZmlsZVJlcSA9IG9yaWdLZXkuc3Vic3RyaW5nKGRldlNlcElkeCk7
CiAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG5ld0tleSA9ICh0b0RldmljZS5nZXRV
bmlxdWVJRCgpK3Byb2ZpbGVSZXEpLmludGVybigpOwogICAgICAgICAgICAgICAgICAgIGlmKERF
QlVHKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiIE1hcEdM
VmVyc2lvbnMgUkVNQVAgTkVXICIrbmV3S2V5KyIgLT4gKGRpdHRvKSIpOwogICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBuZXdEZXZpY2VWZXJzaW9uQXZhaWxhYmxlLnB1
dChuZXdLZXksIHZhbEkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICAgIGRldmljZVZlcnNpb25BdmFpbGFibGUuY2xlYXIoKTsKICAgICAgICBkZXZpY2VW
ZXJzaW9uQXZhaWxhYmxlLnB1dEFsbChuZXdEZXZpY2VWZXJzaW9uQXZhaWxhYmxlKTsKICAgICAg
ICBHTENvbnRleHQuc2V0QXZhaWxhYmxlR0xWZXJzaW9uc1NldCh0b0RldmljZSwgdHJ1ZSk7CiAg
ICB9CiAgfQoKICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbWFwR0xWZXJzaW9ucyhmaW5hbCBBYnN0
cmFjdEdyYXBoaWNzRGV2aWNlIGRldmljZSkgewogICAgc3luY2hyb25pemVkIChHTENvbnRleHQu
ZGV2aWNlVmVyc2lvbkF2YWlsYWJsZSkgewogICAgICAgIGZpbmFsIGJvb2xlYW4gaGFzT3BlbkdM
RVNTdXBwb3J0ID0gZHJhd2FibGUuZ2V0RmFjdG9yeSgpLmhhc09wZW5HTEVTU3VwcG9ydCgpOwog
ICAgICAgIGZpbmFsIGJvb2xlYW4gaGFzT3BlbkdMRGVza3RvcFN1cHBvcnQgPSBkcmF3YWJsZS5n
ZXRGYWN0b3J5KCkuaGFzT3BlbkdMRGVza3RvcFN1cHBvcnQoKTsKICAgICAgICBmaW5hbCBib29s
ZWFuIGhhc01pbm9yVmVyc2lvblN1cHBvcnQgPSBkcmF3YWJsZS5nZXRGYWN0b3J5SW1wbCgpLmhh
c01ham9yTWlub3JDcmVhdGVDb250ZXh0QVJCKCk7CiAgICAgICAgaWYgKERFQlVHKSB7CiAgICAg
ICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihnZXRUaHJlYWROYW1lKCkgKyAiOiBjcmVhdGVDb250
ZXh0QVJCLU1hcEdMVmVyc2lvbnMgU1RBUlQgKEdMRGVza3RvcCAiK2hhc09wZW5HTERlc2t0b3BT
dXBwb3J0KyIsIEdMRVMgIitoYXNPcGVuR0xFU1N1cHBvcnQrIiwgbWlub3JWZXJzaW9uICIraGFz
TWlub3JWZXJzaW9uU3VwcG9ydCsiKSBvbiAiK2RldmljZSk7CiAgICAgICAgfQogICAgICAgIGZp
bmFsIGxvbmcgdDAgPSAoIERFQlVHICkgPyBTeXN0ZW0ubmFub1RpbWUoKSA6IDA7CiAgICAgICAg
Ym9vbGVhbiBzdWNjZXNzID0gZmFsc2U7CiAgICAgICAgLy8gRm9sbG93aW5nIEdMUHJvZmlsZS5H
TF9QUk9GSUxFX0xJU1RfQUxMIG9yZGVyIG9mIHByb2ZpbGUgZGV0ZWN0aW9uIHsgR0w0YmMsIEdM
M2JjLCBHTDIsIEdMNCwgR0wzLCBHTDJHTDMsIEdMRVMyLCBHTDJFUzIsIEdMRVMxLCBHTDJFUzEg
fQogICAgICAgIGJvb2xlYW4gaGFzR0w0YmMgPSBmYWxzZTsKICAgICAgICBib29sZWFuIGhhc0dM
M2JjID0gZmFsc2U7CiAgICAgICAgYm9vbGVhbiBoYXNHTDIgICA9IGZhbHNlOwogICAgICAgIGJv
b2xlYW4gaGFzR0w0ICAgPSBmYWxzZTsKICAgICAgICBib29sZWFuIGhhc0dMMyAgID0gZmFsc2U7
CiAgICAgICAgYm9vbGVhbiBoYXNFUzMgICA9IGZhbHNlOwogICAgICAgIGJvb2xlYW4gaGFzRVMy
ICAgPSBmYWxzZTsKICAgICAgICBib29sZWFuIGhhc0VTMSAgID0gZmFsc2U7CgogICAgICAgIGlm
KCBoYXNPcGVuR0xFU1N1cHBvcnQgJiYgIUdMUHJvZmlsZS5kaXNhYmxlT3BlbkdMRVMgKSB7CiAg
ICAgICAgICAgIGlmKCAhaGFzRVMzKSB7CiAgICAgICAgICAgICAgICBoYXNFUzMgICA9IGNyZWF0
ZUNvbnRleHRBUkJNYXBWZXJzaW9uc0F2YWlsYWJsZShkZXZpY2UsIDMsIENUWF9QUk9GSUxFX0VT
LCBoYXNNaW5vclZlcnNpb25TdXBwb3J0KTsgICAgLy8gRVMzCiAgICAgICAgICAgICAgICBzdWNj
ZXNzIHw9IGhhc0VTMzsKICAgICAgICAgICAgICAgIGlmKCBoYXNFUzMgKSB7CiAgICAgICAgICAg
ICAgICAgICAgaWYoIDAgPT0gKCBDVFhfSU1QTF9BQ0NFTF9TT0ZUICYgY3R4T3B0aW9ucyApICkg
ewogICAgICAgICAgICAgICAgICAgICAgICAvLyBNYXAgaHctYWNjZWwgRVMzIHRvIGFsbCBsb3dl
ciBjb3JlIHByb2ZpbGVzOiBFUzIKICAgICAgICAgICAgICAgICAgICAgICAgbWFwQXZhaWxhYmxl
R0xWZXJzaW9uKGRldmljZSwgMiwgQ1RYX1BST0ZJTEVfRVMsIGN0eFZlcnNpb24sIGN0eE9wdGlv
bnMsIGdsUmVuZGVyZXJRdWlya3MpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiggUFJPRklM
RV9BTElBU0lORyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0VTMiAgID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICByZXNldFN0YXRlcyhmYWxzZSk7IC8vIGNsZWFuIGNvbnRleHQgc3RhdGVz
LCBzaW5jZSBjcmVhdGlvbiB3YXMgdGVtcG9yYXJ5CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgIH0KICAgICAgICAgICAgaWYoICFoYXNFUzIpIHsKICAgICAgICAgICAgICAgIGhhc0VTMiAg
ID0gY3JlYXRlQ29udGV4dEFSQk1hcFZlcnNpb25zQXZhaWxhYmxlKGRldmljZSwgMiwgQ1RYX1BS
T0ZJTEVfRVMsIGhhc01pbm9yVmVyc2lvblN1cHBvcnQpOyAgICAvLyBFUzIKICAgICAgICAgICAg
ICAgIHN1Y2Nlc3MgfD0gaGFzRVMyOwogICAgICAgICAgICAgICAgaWYoIGhhc0VTMiApIHsKICAg
ICAgICAgICAgICAgICAgICBpZiggY3R4VmVyc2lvbi5nZXRNYWpvcigpID49IDMgJiYgaGFzUmVu
ZGVyZXJRdWlyayhHTFJlbmRlcmVyUXVpcmtzLkdMRVMzVmlhRUdMRVMyQ29uZmlnKSkgewogICAg
ICAgICAgICAgICAgICAgICAgICBtYXBBdmFpbGFibGVHTFZlcnNpb24oZGV2aWNlLCAzLCBDVFhf
UFJPRklMRV9FUywgY3R4VmVyc2lvbiwgY3R4T3B0aW9ucywgZ2xSZW5kZXJlclF1aXJrcyk7CiAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJlc2V0U3RhdGVzKGZhbHNl
KTsgLy8gY2xlYW4gY29udGV4dCBzdGF0ZXMsIHNpbmNlIGNyZWF0aW9uIHdhcyB0ZW1wb3JhcnkK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiggIWhhc0VTMSkg
ewogICAgICAgICAgICAgICAgaGFzRVMxICAgPSBjcmVhdGVDb250ZXh0QVJCTWFwVmVyc2lvbnNB
dmFpbGFibGUoZGV2aWNlLCAxLCBDVFhfUFJPRklMRV9FUywgaGFzTWlub3JWZXJzaW9uU3VwcG9y
dCk7ICAgIC8vIEVTMQogICAgICAgICAgICAgICAgc3VjY2VzcyB8PSBoYXNFUzE7CiAgICAgICAg
ICAgICAgICBpZiggaGFzRVMxICkgewogICAgICAgICAgICAgICAgICAgIHJlc2V0U3RhdGVzKGZh
bHNlKTsgLy8gY2xlYW4gY29udGV4dCBzdGF0ZXMsIHNpbmNlIGNyZWF0aW9uIHdhcyB0ZW1wb3Jh
cnkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8g
RXZlbiB3LyBQUk9GSUxFX0FMSUFTSU5HLCB0cnkgdG8gdXNlIHRydWUgY29yZSBHTCBwcm9maWxl
cwogICAgICAgIC8vIGVuc3VyaW5nIHByb3BlciB1c2VyIGJlaGF2aW9yIGFjcm9zcyBwbGF0Zm9y
bXMgZHVlIHRvIGRpZmZlcmVudCBmZWF0dXJlIHNldHMhCiAgICAgICAgLy8KICAgICAgICBpZigg
UGxhdGZvcm0uT1NUeXBlLk1BQ09TID09IFBsYXRmb3JtLmdldE9TVHlwZSgpICYmCiAgICAgICAg
ICAgIFBsYXRmb3JtLmdldE9TVmVyc2lvbk51bWJlcigpLmNvbXBhcmVUbyhQbGF0Zm9ybS5PU1hW
ZXJzaW9uLk1hdmVyaWNrcykgPj0gMCApIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAq
IE9TWCAxMC45IEdMUmVuZGVyZXJRdWlya3MuR0w0TmVlZHNHTDNSZXF1ZXN0LCBxdWlyayBpcyBh
ZGRlZCBhcyB1c3VhbCBAIHNldFJlbmRlcmVyUXVpcmtzKC4uKQogICAgICAgICAgICAgKi8KICAg
ICAgICAgICAgaWYoIGhhc09wZW5HTERlc2t0b3BTdXBwb3J0ICYmICFHTFByb2ZpbGUuZGlzYWJs
ZU9wZW5HTERlc2t0b3AgJiYgIUdMUHJvZmlsZS5kaXNhYmxlT3BlbkdMQ29yZSAmJiAhaGFzR0w0
ICYmICFoYXNHTDMgKSB7CiAgICAgICAgICAgICAgICBoYXNHTDMgICA9IGNyZWF0ZUNvbnRleHRB
UkJNYXBWZXJzaW9uc0F2YWlsYWJsZShkZXZpY2UsIDMsIENUWF9QUk9GSUxFX0NPUkUsIGhhc01p
bm9yVmVyc2lvblN1cHBvcnQpOyAgICAvLyBHTDMKICAgICAgICAgICAgICAgIHN1Y2Nlc3MgfD0g
aGFzR0wzOwogICAgICAgICAgICAgICAgaWYoIGhhc0dMMyApIHsKICAgICAgICAgICAgICAgICAg
ICBmaW5hbCBib29sZWFuIGlzSFdBY2NlbCA9IDAgPT0gKCBDVFhfSU1QTF9BQ0NFTF9TT0ZUICYg
Y3R4T3B0aW9ucyApOwogICAgICAgICAgICAgICAgICAgIGlmKCBpc0hXQWNjZWwgJiYgY3R4VmVy
c2lvbi5nZXRNYWpvcigpID49IDQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvdGNo
YTogQ3JlYXRpbmcgYSAnMy4yJyBjdHggZGVsaXZlcnMgYSA+PSA0IGN0eC4KICAgICAgICAgICAg
ICAgICAgICAgICAgbWFwQXZhaWxhYmxlR0xWZXJzaW9uKGRldmljZSwgNCwgQ1RYX1BST0ZJTEVf
Q09SRSwgY3R4VmVyc2lvbiwgY3R4T3B0aW9ucywgZ2xSZW5kZXJlclF1aXJrcyk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGhhc0dMNCAgID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAg
aWYoREVCVUcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRs
bihnZXRUaHJlYWROYW1lKCkgKyAiOiBjcmVhdGVDb250ZXh0QVJCLU1hcEdMVmVyc2lvbnM6IFF1
aXJrIFRyaWdnZXJkOiAiK0dMUmVuZGVyZXJRdWlya3MudG9TdHJpbmcoR0xSZW5kZXJlclF1aXJr
cy5HTDROZWVkc0dMM1JlcXVlc3QpKyI6IGNhdXNlOiBPUyAiK1BsYXRmb3JtLmdldE9TVHlwZSgp
KyIsIE9TIFZlcnNpb24gIitQbGF0Zm9ybS5nZXRPU1ZlcnNpb25OdW1iZXIoKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgcmVzZXRTdGF0ZXMoZmFsc2UpOyAvLyBjbGVhbiB0aGUgY29udGV4dCBzdGF0ZXMsIHNpbmNl
IGNyZWF0aW9uIHdhcyB0ZW1wb3JhcnkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgICBpZiggaGFzT3BlbkdMRGVza3RvcFN1cHBvcnQgJiYgIUdMUHJvZmls
ZS5kaXNhYmxlT3BlbkdMRGVza3RvcCAmJiAhR0xQcm9maWxlLmRpc2FibGVPcGVuR0xDb3JlICkg
ewogICAgICAgICAgICBpZiggIWhhc0dMNCApIHsKICAgICAgICAgICAgICAgIGhhc0dMNCAgID0g
Y3JlYXRlQ29udGV4dEFSQk1hcFZlcnNpb25zQXZhaWxhYmxlKGRldmljZSwgNCwgQ1RYX1BST0ZJ
TEVfQ09SRSwgaGFzTWlub3JWZXJzaW9uU3VwcG9ydCk7ICAgIC8vIEdMNAogICAgICAgICAgICAg
ICAgc3VjY2VzcyB8PSBoYXNHTDQ7CiAgICAgICAgICAgICAgICBpZiggaGFzR0w0ICkgewogICAg
ICAgICAgICAgICAgICAgIGlmKCAwID09ICggQ1RYX0lNUExfQUNDRUxfU09GVCAmIGN0eE9wdGlv
bnMgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFwIGh3LWFjY2VsIEdMNCB0byBh
bGwgbG93ZXIgY29yZSBwcm9maWxlczogR0wzCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcEF2
YWlsYWJsZUdMVmVyc2lvbihkZXZpY2UsIDMsIENUWF9QUk9GSUxFX0NPUkUsIGN0eFZlcnNpb24s
IGN0eE9wdGlvbnMsIGdsUmVuZGVyZXJRdWlya3MpOwogICAgICAgICAgICAgICAgICAgICAgICBp
ZiggUFJPRklMRV9BTElBU0lORyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0dM
MyAgID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICByZXNldFN0YXRlcyhmYWxzZSk7IC8vIGNsZWFuIGNvbnRl
eHQgc3RhdGVzLCBzaW5jZSBjcmVhdGlvbiB3YXMgdGVtcG9yYXJ5CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoICFoYXNHTDMgKSB7CiAgICAgICAgICAgICAg
ICBoYXNHTDMgICA9IGNyZWF0ZUNvbnRleHRBUkJNYXBWZXJzaW9uc0F2YWlsYWJsZShkZXZpY2Us
IDMsIENUWF9QUk9GSUxFX0NPUkUsIGhhc01pbm9yVmVyc2lvblN1cHBvcnQpOyAgICAvLyBHTDMK
ICAgICAgICAgICAgICAgIHN1Y2Nlc3MgfD0gaGFzR0wzOwogICAgICAgICAgICAgICAgaWYoIGhh
c0dMMyApIHsKICAgICAgICAgICAgICAgICAgICByZXNldFN0YXRlcyhmYWxzZSk7IC8vIGNsZWFu
IHRoaXMgY29udGV4dCBzdGF0ZXMsIHNpbmNlIGNyZWF0aW9uIHdhcyB0ZW1wb3JhcnkKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiggaGFzT3BlbkdM
RGVza3RvcFN1cHBvcnQgJiYgIUdMUHJvZmlsZS5kaXNhYmxlT3BlbkdMRGVza3RvcCApIHsKICAg
ICAgICAgICAgaWYoICFoYXNHTDRiYyApIHsKICAgICAgICAgICAgICAgIGhhc0dMNGJjID0gY3Jl
YXRlQ29udGV4dEFSQk1hcFZlcnNpb25zQXZhaWxhYmxlKGRldmljZSwgNCwgQ1RYX1BST0ZJTEVf
Q09NUEFULCBoYXNNaW5vclZlcnNpb25TdXBwb3J0KTsgIC8vIEdMNGJjCiAgICAgICAgICAgICAg
ICBzdWNjZXNzIHw9IGhhc0dMNGJjOwogICAgICAgICAgICAgICAgaWYoIGhhc0dMNGJjICkgewog
ICAgICAgICAgICAgICAgICAgIGlmKCAhaGFzR0w0ICkgeyAvLyBsYXN0IGNoYW5jZSAuLiBpZ25v
cmUgaHctYWNjZWwKICAgICAgICAgICAgICAgICAgICAgICAgbWFwQXZhaWxhYmxlR0xWZXJzaW9u
KGRldmljZSwgNCwgQ1RYX1BST0ZJTEVfQ09SRSwgY3R4VmVyc2lvbiwgY3R4T3B0aW9ucywgZ2xS
ZW5kZXJlclF1aXJrcyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0dMNCAgID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYoICFoYXNHTDMgKSB7
IC8vIGxhc3QgY2hhbmNlIC4uIGlnbm9yZSBody1hY2NlbAogICAgICAgICAgICAgICAgICAgICAg
ICBtYXBBdmFpbGFibGVHTFZlcnNpb24oZGV2aWNlLCAzLCBDVFhfUFJPRklMRV9DT1JFLCBjdHhW
ZXJzaW9uLCBjdHhPcHRpb25zLCBnbFJlbmRlcmVyUXVpcmtzKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgaGFzR0wzICAgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICBpZiggMCA9PSAoIENUWF9JTVBMX0FDQ0VMX1NPRlQgJiBjdHhPcHRpb25zICkgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hcCBody1hY2NlbCBHTDRiYyB0byBhbGwgbG93
ZXIgY29tcGF0aWJsZSBwcm9maWxlczogR0wzYmMsIEdMMgogICAgICAgICAgICAgICAgICAgICAg
ICBtYXBBdmFpbGFibGVHTFZlcnNpb24oZGV2aWNlLCAzLCBDVFhfUFJPRklMRV9DT01QQVQsIGN0
eFZlcnNpb24sIGN0eE9wdGlvbnMsIGdsUmVuZGVyZXJRdWlya3MpOwogICAgICAgICAgICAgICAg
ICAgICAgICBtYXBBdmFpbGFibGVHTFZlcnNpb24oZGV2aWNlLCAyLCBDVFhfUFJPRklMRV9DT01Q
QVQsIGN0eFZlcnNpb24sIGN0eE9wdGlvbnMsIGdsUmVuZGVyZXJRdWlya3MpOwogICAgICAgICAg
ICAgICAgICAgICAgICBpZihQUk9GSUxFX0FMSUFTSU5HKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoYXNHTDNiYyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNH
TDIgICA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgcmVzZXRTdGF0ZXMoZmFsc2UpOyAvLyBjbGVhbiB0aGlz
IGNvbnRleHQgc3RhdGVzLCBzaW5jZSBjcmVhdGlvbiB3YXMgdGVtcG9yYXJ5CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoICFoYXNHTDNiYyApIHsKICAgICAg
ICAgICAgICAgIGhhc0dMM2JjID0gY3JlYXRlQ29udGV4dEFSQk1hcFZlcnNpb25zQXZhaWxhYmxl
KGRldmljZSwgMywgQ1RYX1BST0ZJTEVfQ09NUEFULCBoYXNNaW5vclZlcnNpb25TdXBwb3J0KTsg
IC8vIEdMM2JjCiAgICAgICAgICAgICAgICBzdWNjZXNzIHw9IGhhc0dMM2JjOwogICAgICAgICAg
ICAgICAgaWYoIGhhc0dMM2JjICkgewogICAgICAgICAgICAgICAgICAgIGlmKCFoYXNHTDMpIHsg
IC8vIGxhc3QgY2hhbmNlIC4uIGlnbm9yZSBody1hY2NlbAogICAgICAgICAgICAgICAgICAgICAg
ICBtYXBBdmFpbGFibGVHTFZlcnNpb24oZGV2aWNlLCAzLCBDVFhfUFJPRklMRV9DT1JFLCBjdHhW
ZXJzaW9uLCBjdHhPcHRpb25zLCBnbFJlbmRlcmVyUXVpcmtzKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgaGFzR0wzICAgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICBpZiggMCA9PSAoIENUWF9JTVBMX0FDQ0VMX1NPRlQgJiBjdHhPcHRpb25zICkgKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hcCBody1hY2NlbCBHTDNiYyB0byBhbGwgbG93
ZXIgY29tcGF0aWJsZSBwcm9maWxlczogR0wyCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcEF2
YWlsYWJsZUdMVmVyc2lvbihkZXZpY2UsIDIsIENUWF9QUk9GSUxFX0NPTVBBVCwgY3R4VmVyc2lv
biwgY3R4T3B0aW9ucywgZ2xSZW5kZXJlclF1aXJrcyk7CiAgICAgICAgICAgICAgICAgICAgICAg
IGlmKFBST0ZJTEVfQUxJQVNJTkcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0dM
MiAgID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICByZXNldFN0YXRlcyhmYWxzZSk7IC8vIGNsZWFuIHRoaXMg
Y29udGV4dCBzdGF0ZXMsIHNpbmNlIGNyZWF0aW9uIHdhcyB0ZW1wb3JhcnkKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiggIWhhc0dMMiApIHsKICAgICAgICAg
ICAgICAgIGhhc0dMMiAgID0gY3JlYXRlQ29udGV4dEFSQk1hcFZlcnNpb25zQXZhaWxhYmxlKGRl
dmljZSwgMiwgQ1RYX1BST0ZJTEVfQ09NUEFULCBoYXNNaW5vclZlcnNpb25TdXBwb3J0KTsgIC8v
IEdMMgogICAgICAgICAgICAgICAgc3VjY2VzcyB8PSBoYXNHTDI7CiAgICAgICAgICAgICAgICBp
ZiggaGFzR0wyICkgewogICAgICAgICAgICAgICAgICAgIHJlc2V0U3RhdGVzKGZhbHNlKTsgLy8g
Y2xlYW4gdGhpcyBjb250ZXh0IHN0YXRlcywgc2luY2UgY3JlYXRpb24gd2FzIHRlbXBvcmFyeQog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKHN1Y2Nl
c3MpIHsKICAgICAgICAgICAgLy8gb25seSBjbGFpbSBHTCB2ZXJzaW9ucyBzZXQgW2FuZCBoZW5j
ZSBkZXRlY3RlZF0gaWYgQVJCIGNvbnRleHQgY3JlYXRpb24gd2FzIHN1Y2Nlc3NmdWwKICAgICAg
ICAgICAgR0xDb250ZXh0LnNldEF2YWlsYWJsZUdMVmVyc2lvbnNTZXQoZGV2aWNlLCB0cnVlKTsK
ICAgICAgICB9CiAgICAgICAgaWYoREVCVUcpIHsKICAgICAgICAgICAgZmluYWwgbG9uZyB0MSA9
IFN5c3RlbS5uYW5vVGltZSgpOwogICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oZ2V0VGhy
ZWFkTmFtZSgpICsgIjogY3JlYXRlQ29udGV4dEFSQi1NYXBHTFZlcnNpb25zIEVORCAoc3VjY2Vz
cyAiK3N1Y2Nlc3MrIikgb24gIitkZXZpY2UrIiwgcHJvZmlsZUFsaWFzaW5nOiAiK1BST0ZJTEVf
QUxJQVNJTkcrIiwgdG90YWwgIisodDEtdDApLzFlNiArIm1zIik7CiAgICAgICAgICAgIGlmKCBz
dWNjZXNzICkgewogICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKEdMQ29udGV4dC5k
dW1wQXZhaWxhYmxlR0xWZXJzaW9ucyhudWxsKS50b1N0cmluZygpKTsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgICByZXR1cm4gc3VjY2VzczsKICAgIH0KICB9CgogIC8qKgogICAqIE5v
dGU6IFNpbmNlIGNvbnRleHQgY3JlYXRpb24gaXMgdGVtcG9yYXJ5LCBjYWxsZXIgbmVlZCB0byBp
c3N1ZSB7QGxpbmsgI3Jlc2V0U3RhdGVzKGJvb2xlYW4pfSwgaWYgY3JlYXRpb24gd2FzIHN1Y2Nl
c3NmdWwsIGkuZS4gcmV0dXJucyB0cnVlLgogICAqIFRoaXMgbWV0aG9kIGRvZXMgbm90IHJlc2V0
IHRoZSBzdGF0ZXMsIGFsbG93aW5nIHRoZSBjYWxsZXIgdG8gdXRpbGl6ZSB0aGUgc3RhdGUgdmFy
aWFibGVzLgogICAqKi8KICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gY3JlYXRlQ29udGV4dEFSQk1h
cFZlcnNpb25zQXZhaWxhYmxlKGZpbmFsIEFic3RyYWN0R3JhcGhpY3NEZXZpY2UgZGV2aWNlLCBm
aW5hbCBpbnQgcmVxTWFqb3IsIGZpbmFsIGludCByZXFQcm9maWxlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVh
biBoYXNNaW5vclZlcnNpb25TdXBwb3J0KSB7CiAgICBsb25nIF9jb250ZXh0OwogICAgaW50IGN0
cCA9IENUWF9JU19BUkJfQ1JFQVRFRCB8IHJlcVByb2ZpbGU7CgogICAgLy8gVG8gZW5zdXJlIEdM
IHByb2ZpbGUgY29tcGF0aWJpbGl0eSB3aXRoaW4gdGhlIEpPR0wgYXBwbGljYXRpb24KICAgIC8v
IHdlIGFsd2F5cyB0cnkgdG8gbWFwIGFnYWluc3QgdGhlIGhpZ2hlc3QgR0wgdmVyc2lvbiwKICAg
IC8vIHNvIHRoZSB1c2VyIGNhbiBhbHdheXMgY2FzdCB0byB0aGUgaGlnaGVzdCBhdmFpbGFibGUg
b25lLgogICAgaW50IG1heE1ham9yLCBtYXhNaW5vcjsKICAgIGludCBtaW5NYWpvciwgbWluTWlu
b3I7CiAgICBmaW5hbCBpbnQgbWFqb3JbXSA9IG5ldyBpbnRbMV07CiAgICBmaW5hbCBpbnQgbWlu
b3JbXSA9IG5ldyBpbnRbMV07CgogICAgaWYoIGhhc01pbm9yVmVyc2lvblN1cHBvcnQgKSB7CiAg
ICAgICAgaWYoIENUWF9QUk9GSUxFX0VTID09IHJlcVByb2ZpbGUgKSB7CiAgICAgICAgICAgIC8v
IEVTMywgRVMyIG9yIEVTMQogICAgICAgICAgICBtYXhNYWpvcj1yZXFNYWpvcjsgbWF4TWlub3I9
R0xDb250ZXh0LmdldE1heE1pbm9yKGN0cCwgbWF4TWFqb3IpOwogICAgICAgICAgICBtaW5NYWpv
cj1yZXFNYWpvcjsgbWluTWlub3I9MDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZigg
NCA9PSByZXFNYWpvciApIHsKICAgICAgICAgICAgICAgIG1heE1ham9yPTQ7IG1heE1pbm9yPUdM
Q29udGV4dC5nZXRNYXhNaW5vcihjdHAsIG1heE1ham9yKTsKICAgICAgICAgICAgICAgIG1pbk1h
am9yPTQ7IG1pbk1pbm9yPTA7CiAgICAgICAgICAgIH0gZWxzZSBpZiggMyA9PSByZXFNYWpvciAp
IHsKICAgICAgICAgICAgICAgIG1heE1ham9yPTM7IG1heE1pbm9yPUdMQ29udGV4dC5nZXRNYXhN
aW5vcihjdHAsIG1heE1ham9yKTsKICAgICAgICAgICAgICAgIG1pbk1ham9yPTM7IG1pbk1pbm9y
PTE7CiAgICAgICAgICAgIH0gZWxzZSAvKiBpZiggZ2xwLmlzR0wyKCkgKSAqLyB7CiAgICAgICAg
ICAgICAgICAvLyBvdXIgbWluaW11bSBkZXNrdG9wIE9wZW5HTCBydW50aW1lIHJlcXVpcmVtZW50
cyBhcmUgMS4xLAogICAgICAgICAgICAgICAgLy8gbmV2ZXJ0aGVsZXNzIHdlIHJlc3RyaWN0IEFS
QiBjb250ZXh0IGNyZWF0aW9uIHRvIDIuMCB0byBzcGFyZSB1cyBmdXRpbGUgYXR0ZW1wdHMKICAg
ICAgICAgICAgICAgIG1heE1ham9yPTM7IG1heE1pbm9yPTA7CiAgICAgICAgICAgICAgICBtaW5N
YWpvcj0yOyBtaW5NaW5vcj0wOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSBlbHNlIHsK
ICAgICAgICBpZiggQ1RYX1BST0ZJTEVfRVMgPT0gcmVxUHJvZmlsZSApIHsKICAgICAgICAgICAg
Ly8gRVMzLCBFUzIgb3IgRVMxCiAgICAgICAgICAgIG1heE1ham9yPXJlcU1ham9yOyBtYXhNaW5v
cj0wOwogICAgICAgICAgICBtaW5NYWpvcj1yZXFNYWpvcjsgbWluTWlub3I9MDsKICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICBpZiggNCA9PSByZXFNYWpvciApIHsKICAgICAgICAgICAgICAg
IG1heE1ham9yPTQ7IG1heE1pbm9yPTA7CiAgICAgICAgICAgICAgICBtaW5NYWpvcj00OyBtaW5N
aW5vcj0wOwogICAgICAgICAgICB9IGVsc2UgaWYoIDMgPT0gcmVxTWFqb3IgKSB7CiAgICAgICAg
ICAgICAgICBtYXhNYWpvcj0zOyBtYXhNaW5vcj0xOwogICAgICAgICAgICAgICAgbWluTWFqb3I9
MzsgbWluTWlub3I9MTsKICAgICAgICAgICAgfSBlbHNlIC8qIGlmKCBnbHAuaXNHTDIoKSApICov
IHsKICAgICAgICAgICAgICAgIC8vIG91ciBtaW5pbXVtIGRlc2t0b3AgT3BlbkdMIHJ1bnRpbWUg
cmVxdWlyZW1lbnRzIGFyZSAxLjEsCiAgICAgICAgICAgICAgICAvLyBuZXZlcnRoZWxlc3Mgd2Ug
cmVzdHJpY3QgQVJCIGNvbnRleHQgY3JlYXRpb24gdG8gMi4wIHRvIHNwYXJlIHVzIGZ1dGlsZSBh
dHRlbXB0cwogICAgICAgICAgICAgICAgbWF4TWFqb3I9MjsgbWF4TWlub3I9MDsKICAgICAgICAg
ICAgICAgIG1pbk1ham9yPTI7IG1pbk1pbm9yPTA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICB9CiAgICBfY29udGV4dCA9IGNyZWF0ZUNvbnRleHRBUkJWZXJzaW9ucygwLCB0cnVlLCBjdHAs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXggKi8gbWF4TWFq
b3IsIG1heE1pbm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog
bWluICovIG1pbk1ham9yLCBtaW5NaW5vciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8qIHJlcyAqLyBtYWpvciwgbWlub3IpOwoKICAgIGlmKCAwID09IF9jb250ZXh0
ICYmIENUWF9QUk9GSUxFX0NPUkUgPT0gcmVxUHJvZmlsZSAmJiAhUFJPRklMRV9BTElBU0lORyAp
IHsKICAgICAgICAvLyB0cnkgdy8gRk9SV0FSRCBpbnN0ZWFkIG9mIENPUkUKICAgICAgICBjdHAg
Jj0gfkNUWF9QUk9GSUxFX0NPUkUgOwogICAgICAgIGN0cCB8PSAgQ1RYX09QVElPTl9GT1JXQVJE
IDsKICAgICAgICBfY29udGV4dCA9IGNyZWF0ZUNvbnRleHRBUkJWZXJzaW9ucygwLCB0cnVlLCBj
dHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWF4ICov
IG1heE1ham9yLCBtYXhNaW5vciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvKiBtaW4gKi8gbWluTWFqb3IsIG1pbk1pbm9yLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlcyAqLyBtYWpvciwgbWlub3IpOwogICAgICAg
aWYoIDAgPT0gX2NvbnRleHQgKSB7CiAgICAgICAgICAgIC8vIFRyeSBhIGNvbXBhdGlibGUgb25l
IC4uIGV2ZW4gdGhvdWdoIG5vdCByZXF1ZXN0ZWQgLi4gbGFzdCByZXNvcnQKICAgICAgICAgICAg
Y3RwICY9IH5DVFhfUFJPRklMRV9DT1JFIDsKICAgICAgICAgICAgY3RwICY9IH5DVFhfT1BUSU9O
X0ZPUldBUkQgOwogICAgICAgICAgICBjdHAgfD0gIENUWF9QUk9GSUxFX0NPTVBBVCA7CiAgICAg
ICAgICAgIF9jb250ZXh0ID0gY3JlYXRlQ29udGV4dEFSQlZlcnNpb25zKDAsIHRydWUsIGN0cCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWF4ICovIG1heE1ham9y
LCBtYXhNaW5vciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWlu
ICovIG1pbk1ham9yLCBtaW5NaW5vciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLyogcmVzICovIG1ham9yLCBtaW5vcik7CiAgICAgICB9CiAgICB9CiAgICBmaW5hbCBi
b29sZWFuIHJlczsKICAgIGlmKCAwICE9IF9jb250ZXh0ICkgewogICAgICAgIC8vIGN0eE1ham9y
VmVyc2lvbiwgY3R4TWlub3JWZXJzaW9uLCBjdHhPcHRpb25zIGlzIGJlaW5nIHNldCBieQogICAg
ICAgIC8vICAgY3JlYXRlQ29udGV4dEFSQlZlcnNpb25zKC4uKSAtPiBzZXRHTEZ1bmN0aW9uQXZh
aWxiaWxpdHkoLi4pIC0+IHNldENvbnRleHRWZXJzaW9uKC4uKQogICAgICAgIGZpbmFsIE1hcHBl
ZEdMVmVyc2lvbiBtZSA9IG1hcEF2YWlsYWJsZUdMVmVyc2lvbihkZXZpY2UsIHJlcU1ham9yLCBy
ZXFQcm9maWxlLCBjdHhWZXJzaW9uLCBjdHhPcHRpb25zLCBnbFJlbmRlcmVyUXVpcmtzKTsKICAg
ICAgICBkZXN0cm95Q29udGV4dEFSQkltcGwoX2NvbnRleHQpOwogICAgICAgIGlmIChERUJVRykg
ewogICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGdldFRocmVhZE5hbWUoKSArICI6IGNyZWF0
ZUNvbnRleHRBUkItTWFwR0xWZXJzaW9ucyBIQVZFICIrbWUudG9TdHJpbmcobmV3IFN0cmluZ0J1
aWxkZXIoKSwgbWluTWFqb3IsIG1pbk1pbm9yLCBtYXhNYWpvciwgbWF4TWlub3IpLnRvU3RyaW5n
KCkpOwogICAgICAgIH0KICAgICAgICByZXMgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgICBp
ZiAoREVCVUcpIHsKICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihnZXRUaHJlYWROYW1lKCkg
KyAiOiBjcmVhdGVDb250ZXh0QVJCLU1hcEdMVmVyc2lvbnMgTk9QRSAiK2RldmljZSsiLCAiK3Jl
cU1ham9yKyIgKCIrR0xDb250ZXh0LmdldEdMUHJvZmlsZShuZXcgU3RyaW5nQnVpbGRlcigpLCBy
ZXFQcm9maWxlKS50b1N0cmluZygpKyAiKSBbIittYXhNYWpvcisiLiIrbWF4TWlub3IrIiAuLiAi
K21pbk1ham9yKyIuIittaW5NaW5vcisiXSIpOwogICAgICAgIH0KICAgICAgICByZXMgPSBmYWxz
ZTsKICAgIH0KICAgIHJldHVybiByZXM7CiAgfQoKICBwcml2YXRlIGZpbmFsIGxvbmcgY3JlYXRl
Q29udGV4dEFSQlZlcnNpb25zKGZpbmFsIGxvbmcgc2hhcmUsIGZpbmFsIGJvb2xlYW4gZGlyZWN0
LCBmaW5hbCBpbnQgY3R4T3B0aW9uRmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbWF4TWFqb3IsIGZpbmFsIGludCBtYXhNaW5vciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBt
aW5NYWpvciwgZmluYWwgaW50IG1pbk1pbm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmluYWwgaW50IG1ham9yW10sIGZpbmFsIGludCBtaW5vcltdKSB7
CiAgICBtYWpvclswXT1tYXhNYWpvcjsKICAgIG1pbm9yWzBdPW1heE1pbm9yOwogICAgbG9uZyBf
Y29udGV4dD0wOwogICAgaW50IGk9MDsKCiAgICBkbyB7CiAgICAgICAgaWYgKERFQlVHKSB7CiAg
ICAgICAgICAgIGkrKzsKICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGdldFRocmVhZE5h
bWUoKSArICI6IGNyZWF0ZUNvbnRleHRBUkJWZXJzaW9ucy4iK2krIjogc2hhcmUgIitzaGFyZSsi
LCBkaXJlY3QgIitkaXJlY3QrCiAgICAgICAgICAgICAgICAgICAgIiwgdmVyc2lvbiAiK21ham9y
WzBdKyIuIittaW5vclswXSsiIFsiK21heE1ham9yKyIuIittYXhNaW5vcisiIC4uICIrbWluTWFq
b3IrIi4iK21pbk1pbm9yKyJdIik7CiAgICAgICAgfQogICAgICAgIF9jb250ZXh0ID0gY3JlYXRl
Q29udGV4dEFSQkltcGwoc2hhcmUsIGRpcmVjdCwgY3R4T3B0aW9uRmxhZ3MsIG1ham9yWzBdLCBt
aW5vclswXSk7CgogICAgICAgIGlmKDAgIT0gX2NvbnRleHQpIHsKICAgICAgICAgICAgaWYoIHNl
dEdMRnVuY3Rpb25BdmFpbGFiaWxpdHkodHJ1ZSwgbWFqb3JbMF0sIG1pbm9yWzBdLCBjdHhPcHRp
b25GbGFncywgdHJ1ZSAvKiBzdHJpY3RNYXRjaCAqLywgdHJ1ZSAvKiB3aXRoaW5HTFZlcnNpb25z
TWFwcGluZyAqLykgKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgIGRlc3Ryb3lDb250ZXh0QVJCSW1wbChfY29udGV4dCk7CiAgICAg
ICAgICAgICAgICBfY29udGV4dCA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgfSB3
aGlsZSAoICggbWFqb3JbMF0+bWluTWFqb3IgfHwgbWFqb3JbMF09PW1pbk1ham9yICYmIG1pbm9y
WzBdID5taW5NaW5vciApICYmICAvLyAjMSBjaGVjayB3aGV0aGVyIHZlcnNpb24gaXMgYWJvdmUg
bG93ZXIgbGltaXQKICAgICAgICAgICAgICBHTENvbnRleHQuZGVjcmVtZW50R0xWZXJzaW9uKGN0
eE9wdGlvbkZsYWdzLCBtYWpvciwgbWlub3IpICAgICAgICAgICAgLy8gIzIgZGVjcmVtZW50IHZl
cnNpb24KICAgICAgICAgICAgKTsKICAgIGlmIChERUJVRykgewogICAgICAgIFN5c3RlbS5lcnIu
cHJpbnRsbihnZXRUaHJlYWROYW1lKCkgKyAiOiBjcmVhdGVDb250ZXh0QVJCVmVyc2lvbnMuWDog
Y3R4ICIrdG9IZXhTdHJpbmcoX2NvbnRleHQpKyIsIHNoYXJlICIrc2hhcmUrIiwgZGlyZWN0ICIr
ZGlyZWN0KwogICAgICAgICAgICAgICAgIiwgdmVyc2lvbiAiK21ham9yWzBdKyIuIittaW5vclsw
XSsiIFsiK21heE1ham9yKyIuIittYXhNaW5vcisiIC4uICIrbWluTWFqb3IrIi4iK21pbk1pbm9y
KyJdIik7CiAgICB9CiAgICByZXR1cm4gX2NvbnRleHQ7CiAgfQoKICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
ICAvLyBNYW5hZ2luZyB0aGUgYWN0dWFsIE9wZW5HTCB2ZXJzaW9uLCB1c3VhbGx5IGZpZ3VyZWQg
YXQgY3JlYXRpb24gdGltZS4KICAvLyBBcyBhIGxhc3QgcmVzb3J0LCB0aGUgR0xfVkVSU0lPTiBz
dHJpbmcgbWF5IGJlIHVzZWQgLi4KICAvLwoKICAvKioKICAgKiBJZiBtYWpvciA+IDAgfHwgbWlu
b3IgPiAwIDogVXNlIHBhc3NlZCB2YWx1ZXMsIGRldGVybWluZWQgYXQgY3JlYXRpb24gdGltZQog
ICAqIE90aGVyd2lzZSAuLiBkb24ndCB0b3VjaCAuLgogICAqLwogIHByaXZhdGUgZmluYWwgdm9p
ZCBzZXRDb250ZXh0VmVyc2lvbihmaW5hbCBpbnQgbWFqb3IsIGZpbmFsIGludCBtaW5vciwgZmlu
YWwgaW50IGN0cCwgZmluYWwgVmVyc2lvbk51bWJlclN0cmluZyBnbFZlbmRvclZlcnNpb24sIGZp
bmFsIGJvb2xlYW4gdXNlR0wpIHsKICAgICAgaWYgKCAwID09IGN0cCApIHsKICAgICAgICB0aHJv
dyBuZXcgR0xFeGNlcHRpb24oIkludmFsaWQgR0wgVmVyc2lvbiAiK21ham9yKyIuIittaW5vcisi
LCBjdHAgIit0b0hleFN0cmluZyhjdHApKTsKICAgICAgfQogICAgICBjdHhWZXJzaW9uID0gbmV3
IFZlcnNpb25OdW1iZXIobWFqb3IsIG1pbm9yLCAwKTsKICAgICAgY3R4VmVyc2lvblN0cmluZyA9
IGdldEdMVmVyc2lvbihtYWpvciwgbWlub3IsIGN0cCwgZ2xWZXJzaW9uKTsKICAgICAgY3R4VmVu
ZG9yVmVyc2lvbiA9IGdsVmVuZG9yVmVyc2lvbjsKICAgICAgY3R4T3B0aW9ucyA9IGN0cDsKICAg
ICAgaWYodXNlR0wpIHsKICAgICAgICAgIGN0eEdMU0xWZXJzaW9uID0gVmVyc2lvbk51bWJlci56
ZXJvVmVyc2lvbjsKICAgICAgICAgIGlmKCBoYXNHTFNMKCkgKSB7IC8vID49IEVTMiB8fCBHTDIu
MAogICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBnbHNsVmVyc2lvbiA9IGlzR0xFUygpID8gbnVs
bCA6IGdsLmdsR2V0U3RyaW5nKEdMMkVTMi5HTF9TSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04pIDsg
Ly8gVXNlIHN0YXRpYyBHTFNMIHZlcnNpb24gZm9yIEVTIHRvIGJlIHNhZmUhCiAgICAgICAgICAg
ICAgaWYoIG51bGwgIT0gZ2xzbFZlcnNpb24gKSB7CiAgICAgICAgICAgICAgICAgIGN0eEdMU0xW
ZXJzaW9uID0gbmV3IFZlcnNpb25OdW1iZXIoZ2xzbFZlcnNpb24pOwogICAgICAgICAgICAgICAg
ICBpZiggY3R4R0xTTFZlcnNpb24uZ2V0TWFqb3IoKSA8IDEgKSB7CiAgICAgICAgICAgICAgICAg
ICAgICBjdHhHTFNMVmVyc2lvbiA9IFZlcnNpb25OdW1iZXIuemVyb1ZlcnNpb247IC8vIGZhaWxl
ZCAuLgogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlm
KCBjdHhHTFNMVmVyc2lvbi5pc1plcm8oKSApIHsKICAgICAgICAgICAgICAgICAgY3R4R0xTTFZl
cnNpb24gPSBnZXRTdGF0aWNHTFNMVmVyc2lvbk51bWJlcihtYWpvciwgbWlub3IsIGN0eE9wdGlv
bnMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgfQogIH0KCiAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAgLy8gSGVscGVycyBmb3IgdmFyaW91cyBjb250ZXh0IGltcGxlbWVudGF0aW9ucwog
IC8vCgogIHByaXZhdGUgZmluYWwgYm9vbGVhbiB2ZXJpZnlJbnN0YW5jZShmaW5hbCBHTFByb2Zp
bGUgZ2xwLCBmaW5hbCBTdHJpbmcgc3VmZml4LCBmaW5hbCBPYmplY3QgaW5zdGFuY2UpIHsKICAg
ICAgcmV0dXJuIFJlZmxlY3Rpb25VdGlsLmluc3RhbmNlT2YoaW5zdGFuY2UsIGdscC5nZXRHTElt
cGxCYXNlQ2xhc3NOYW1lKCkrc3VmZml4KTsKICB9CiAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgY3Jl
YXRlSW5zdGFuY2UoZmluYWwgQWJzdHJhY3RHcmFwaGljc0RldmljZSBhZGV2aWNlLCBmaW5hbCBp
bnQgbWFqb3JWZXJzaW9uLCBmaW5hbCBpbnQgbWlub3JWZXJzaW9uLCBmaW5hbCBpbnQgY29udGV4
dE9wdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29s
ZWFuIGdsT2JqZWN0LCBmaW5hbCBPYmplY3RbXSBjc3RyQXJncykgewogICAgICBmaW5hbCBTdHJp
bmcgcHJvZmlsZVN0cmluZyA9IEdMQ29udGV4dC5nZXRHTFByb2ZpbGUobWFqb3JWZXJzaW9uLCBt
aW5vclZlcnNpb24sIGNvbnRleHRPcHRpb24pOwogICAgICBmaW5hbCBHTFByb2ZpbGUgZ2xwID0g
R0xQcm9maWxlLmdldChhZGV2aWNlLCBwcm9maWxlU3RyaW5nKSA7CiAgICAgIHJldHVybiBSZWZs
ZWN0aW9uVXRpbC5jcmVhdGVJbnN0YW5jZShnbHAuZ2V0R0xDdG9yKGdsT2JqZWN0KSwgY3N0ckFy
Z3MpOwogIH0KICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gdmVyaWZ5SW5zdGFuY2UoZmluYWwgQWJz
dHJhY3RHcmFwaGljc0RldmljZSBhZGV2aWNlLCBmaW5hbCBpbnQgbWFqb3JWZXJzaW9uLCBmaW5h
bCBpbnQgbWlub3JWZXJzaW9uLCBmaW5hbCBpbnQgY29udGV4dE9wdGlvbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHN1ZmZpeCwgZmluYWwgT2Jq
ZWN0IGluc3RhbmNlKSB7CiAgICAgIGZpbmFsIFN0cmluZyBwcm9maWxlU3RyaW5nID0gR0xDb250
ZXh0LmdldEdMUHJvZmlsZShtYWpvclZlcnNpb24sIG1pbm9yVmVyc2lvbiwgY29udGV4dE9wdGlv
bik7CiAgICAgIGZpbmFsIEdMUHJvZmlsZSBnbHAgPSBHTFByb2ZpbGUuZ2V0KGFkZXZpY2UsIHBy
b2ZpbGVTdHJpbmcpIDsKICAgICAgcmV0dXJuIFJlZmxlY3Rpb25VdGlsLmluc3RhbmNlT2YoaW5z
dGFuY2UsIGdscC5nZXRHTEltcGxCYXNlQ2xhc3NOYW1lKCkrc3VmZml4KTsKICB9CgogIC8qKgog
ICAqIENyZWF0ZSB0aGUgR0wgaW5zdGFuY2UgZm9yIHRoaXMgY29udGV4dCwKICAgKiByZXF1aXJl
cyB2YWxpZCB7QGxpbmsgI2dldEdMUHJvY0FkZHJlc3NUYWJsZSgpfSByZXN1bHQhCiAgICovCiAg
cHJpdmF0ZSBmaW5hbCBHTCBjcmVhdGVHTChmaW5hbCBBYnN0cmFjdEdyYXBoaWNzRGV2aWNlIGFk
ZXZpY2UsIGZpbmFsIGludCBtYWpvclZlcnNpb24sIGZpbmFsIGludCBtaW5vclZlcnNpb24sIGZp
bmFsIGludCBjb250ZXh0T3B0aW9uKSB7CiAgICBmaW5hbCBTdHJpbmcgcHJvZmlsZVN0cmluZyA9
IEdMQ29udGV4dC5nZXRHTFByb2ZpbGUobWFqb3JWZXJzaW9uLCBtaW5vclZlcnNpb24sIGNvbnRl
eHRPcHRpb24pOwogICAgZmluYWwgR0xQcm9maWxlIGdscCA9IEdMUHJvZmlsZS5nZXQoYWRldmlj
ZSwgcHJvZmlsZVN0cmluZyk7CiAgICBmaW5hbCBHTCBnbCA9IChHTCkgUmVmbGVjdGlvblV0aWwu
Y3JlYXRlSW5zdGFuY2UoZ2xwLmdldEdMQ3Rvcih0cnVlKSwgbmV3IE9iamVjdFtdIHsgZ2xwLCB0
aGlzIH0pOwogICAgLy9uYWwgR0wgZ2wgPSAoR0wpIGNyZWF0ZUluc3RhbmNlKGdscCwgdHJ1ZSwg
bmV3IE9iamVjdFtdIHsgZ2xwLCB0aGlzIH0gKTsKCiAgICAvKiBGSVhNRTogcmVmYWN0b3IgZGVw
ZW5kZW5jZSBvbiBKYXZhIDJEIC8gSk9HTCBicmlkZ2UKICAgIGlmICh0cmFja2VyICE9IG51bGwp
IHsKICAgICAgZ2wuc2V0T2JqZWN0VHJhY2tlcih0cmFja2VyKTsKICAgIH0KICAgICovCiAgICBy
ZXR1cm4gZ2w7CiAgfQoKICAvKioKICAgKiBGaW5hbGl6ZXMgR0wgaW5zdGFuY2UgaW5pdGlhbGl6
YXRpb24gYWZ0ZXIgdGhpcyBjb250ZXh0IGhhcyBiZWVuIGluaXRpYWxpemVkLgogICAqIDxwPgog
ICAqIE1ldGhvZCBjYWxscyAndm9pZCBmaW5hbGl6ZUluaXQoKScgb2YgaW5zdGFuY2UgJ2dsJyBh
cyByZXRyaWV2ZWQgYnkgcmVmbGVjdGlvbiwgaWYgZXhpc3QuCiAgICogPC9wPgogICAqLwogIHBy
aXZhdGUgdm9pZCBmaW5hbGl6ZUluaXQoZmluYWwgR0wgZ2wpIHsKICAgICAgTWV0aG9kIGZpbmFs
aXplSW5pdCA9IG51bGw7CiAgICAgIHRyeSB7CiAgICAgICAgICBmaW5hbGl6ZUluaXQgPSBSZWZs
ZWN0aW9uVXRpbC5nZXRNZXRob2QoZ2wuZ2V0Q2xhc3MoKSwgImZpbmFsaXplSW5pdCIsIG5ldyBD
bGFzczw/PltdeyB9KTsKICAgICAgfSBjYXRjaCAoIGZpbmFsIFRocm93YWJsZSB0ICkgewogICAg
ICAgICAgaWYoREVCVUcpIHsKICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdo
dCAiK3QuZ2V0Q2xhc3MoKS5nZXROYW1lKCkrIjogIit0LmdldE1lc3NhZ2UoKSk7CiAgICAgICAg
ICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgIH0KICAgICAgfQogICAgICBpZigg
bnVsbCAhPSBmaW5hbGl6ZUluaXQgKSB7CiAgICAgICAgICBSZWZsZWN0aW9uVXRpbC5jYWxsTWV0
aG9kKGdsLCBmaW5hbGl6ZUluaXQsIG5ldyBPYmplY3RbXXsgfSk7CiAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcigiTWlzc2luZyAndm9pZCBmaW5hbGl6ZUlu
aXQoUHJvY0FkZHJlc3NUYWJsZSknIGluICIrZ2wuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwogICAg
ICB9CiAgfQoKICBwdWJsaWMgZmluYWwgUHJvY0FkZHJlc3NUYWJsZSBnZXRHTFByb2NBZGRyZXNz
VGFibGUoKSB7CiAgICByZXR1cm4gZ2xQcm9jQWRkcmVzc1RhYmxlOwogIH0KCiAgLyoqCiAgICog
U2hhbGwgcmV0dXJuIHRoZSBwbGF0Zm9ybSBleHRlbnNpb24gUHJvY0FkZHJlc3NUYWJsZSwKICAg
KiBpZSBmb3IgR0xYRXh0LCBFR0xFeHQsIC4uCiAgICovCiAgcHVibGljIGFic3RyYWN0IFByb2NB
ZGRyZXNzVGFibGUgZ2V0UGxhdGZvcm1FeHRQcm9jQWRkcmVzc1RhYmxlKCk7CgogIC8qKiBNYXBz
IHRoZSBnaXZlbiAicGxhdGZvcm0taW5kZXBlbmRlbnQiIGZ1bmN0aW9uIG5hbWUgdG8gYSByZWFs
IGZ1bmN0aW9uCiAgICAgIG5hbWUuIEN1cnJlbnRseSBub3QgdXNlZC4gKi8KICBwcm90ZWN0ZWQg
ZmluYWwgU3RyaW5nIG1hcFRvUmVhbEdMRnVuY3Rpb25OYW1lKGZpbmFsIFN0cmluZyBnbEZ1bmN0
aW9uTmFtZSkgewogICAgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBtYXAgPSBnZXRGdW5jdGlv
bk5hbWVNYXAoKTsKICAgIGlmKCBudWxsICE9IG1hcCApIHsKICAgICAgICBmaW5hbCBTdHJpbmcg
bG9va3VwID0gbWFwLmdldChnbEZ1bmN0aW9uTmFtZSk7CiAgICAgICAgaWYgKGxvb2t1cCAhPSBu
dWxsKSB7CiAgICAgICAgICByZXR1cm4gbG9va3VwOwogICAgICAgIH0KICAgIH0KICAgIHJldHVy
biBnbEZ1bmN0aW9uTmFtZTsKICB9CiAgcHJvdGVjdGVkIGFic3RyYWN0IE1hcDxTdHJpbmcsIFN0
cmluZz4gZ2V0RnVuY3Rpb25OYW1lTWFwKCkgOwoKICAvKiogTWFwcyB0aGUgZ2l2ZW4gInBsYXRm
b3JtLWluZGVwZW5kZW50IiBleHRlbnNpb24gbmFtZSB0byBhIHJlYWwKICAgICAgZnVuY3Rpb24g
bmFtZS4gQ3VycmVudGx5IHRoaXMgaXMgb25seSB1c2VkIHRvIG1hcAogICAgICAiR0xfQVJCX3Bi
dWZmZXIiICAgICAgdG8gICJXR0xfQVJCX3BidWZmZXIvR0xYX1NHSVhfcGJ1ZmZlciIgYW5kCiAg
ICAgICJHTF9BUkJfcGl4ZWxfZm9ybWF0IiB0byAgIldHTF9BUkJfcGl4ZWxfZm9ybWF0L24uYS4i
CiAgICovCiAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBtYXBUb1JlYWxHTEV4dGVuc2lvbk5hbWUo
ZmluYWwgU3RyaW5nIGdsRXh0ZW5zaW9uTmFtZSkgewogICAgZmluYWwgTWFwPFN0cmluZywgU3Ry
aW5nPiBtYXAgPSBnZXRFeHRlbnNpb25OYW1lTWFwKCk7CiAgICBpZiggbnVsbCAhPSBtYXAgKSB7
CiAgICAgICAgZmluYWwgU3RyaW5nIGxvb2t1cCA9IG1hcC5nZXQoZ2xFeHRlbnNpb25OYW1lKTsK
ICAgICAgICBpZiAobG9va3VwICE9IG51bGwpIHsKICAgICAgICAgIHJldHVybiBsb29rdXA7CiAg
ICAgICAgfQogICAgfQogICAgcmV0dXJuIGdsRXh0ZW5zaW9uTmFtZTsKICB9CiAgcHJvdGVjdGVk
IGFic3RyYWN0IE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0RXh0ZW5zaW9uTmFtZU1hcCgpIDsKCiAg
LyoqCiAgICogUmV0dXJucyB0aGUgRHluYW1pY0xvb2t1cEhlbHBlcgogICAqLwogIHB1YmxpYyBm
aW5hbCBHTER5bmFtaWNMb29rdXBIZWxwZXIgZ2V0R0xEeW5hbWljTG9va3VwSGVscGVyKCkgewog
ICAgICByZXR1cm4gZHJhd2FibGUuZ2V0RmFjdG9yeUltcGwoKS5nZXRHTER5bmFtaWNMb29rdXBI
ZWxwZXIoIGN0eFZlcnNpb24uZ2V0TWFqb3IoKSwgY3R4T3B0aW9ucyApOwogIH0KICBwdWJsaWMg
ZmluYWwgR0xEeW5hbWljTG9va3VwSGVscGVyIGdldEdMRHluYW1pY0xvb2t1cEhlbHBlcihmaW5h
bCBpbnQgbWFqb3JWZXJzaW9uLCBmaW5hbCBpbnQgY29udGV4dE9wdGlvbnMpIHsKICAgICAgcmV0
dXJuIGRyYXdhYmxlLmdldEZhY3RvcnlJbXBsKCkuZ2V0R0xEeW5hbWljTG9va3VwSGVscGVyKCBt
YWpvclZlcnNpb24sIGNvbnRleHRPcHRpb25zICk7CiAgfQoKICAvKiogSGVscGVyIHJvdXRpbmUg
d2hpY2ggcmVzZXRzIGEgUHJvY0FkZHJlc3NUYWJsZSBnZW5lcmF0ZWQgYnkgdGhlCiAgICAgIEdM
RW1pdHRlciBieSBsb29raW5nIHVwIGFuZXcgYWxsIG9mIGl0cyBmdW5jdGlvbiBwb2ludGVycwog
ICAgICB1c2luZyB0aGUgZ2l2ZW4ge0BsaW5rIEdMRHluYW1pY0xvb2t1cEhlbHBlcn0uICovCiAg
cHJvdGVjdGVkIGZpbmFsIHZvaWQgcmVzZXRQcm9jQWRkcmVzc1RhYmxlKGZpbmFsIFByb2NBZGRy
ZXNzVGFibGUgdGFibGUsIGZpbmFsIEdMRHluYW1pY0xvb2t1cEhlbHBlciBkbGgpIHsKICAgIEFj
Y2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKG5ldyBQcml2aWxlZ2VkQWN0aW9uPE9iamVjdD4o
KSB7CiAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgcHVibGljIE9iamVjdCBydW4oKSB7CiAgICAg
ICAgICAgIHRhYmxlLnJlc2V0KCBkbGggKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAg
ICAgfQogICAgfSApOwogIH0KCiAgLyoqCiAgICogVXBkYXRlcyB0aGUgcGxhdGZvcm0ncyAnR0xY
JyBmdW5jdGlvbiBjYWNoZQogICAqIEBwYXJhbSBjb250ZXh0RlFOIHByb3ZpZGVzIGEgZnVsbHkg
cXVhbGlmaWVkIGtleSBvZiB0aGUgY29udGV4dCBpbmNsdWRpbmcgZGV2aWNlIGFuZCBHTCBwcm9m
aWxlCiAgICogQHBhcmFtIGRsaCB7QGxpbmsgR0xEeW5hbWljTG9va3VwSGVscGVyfSB1c2VkIHRv
IHtAbGluayAjcmVzZXRQcm9jQWRkcmVzc1RhYmxlKFByb2NBZGRyZXNzVGFibGUsIEdMRHluYW1p
Y0xvb2t1cEhlbHBlcil9IGluc3RhbmNlLgogICAqLwogIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lk
IHVwZGF0ZUdMWFByb2NBZGRyZXNzVGFibGUoZmluYWwgU3RyaW5nIGNvbnRleHRGUU4sIGZpbmFs
IEdMRHluYW1pY0xvb2t1cEhlbHBlciBkbGgpOwoKICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gaW5p
dEdMUmVuZGVyZXJBbmRHTFZlcnNpb25TdHJpbmdzKGZpbmFsIGludCBtYWpvclZlcnNpb24sIGZp
bmFsIGludCBjb250ZXh0T3B0aW9ucykgIHsKICAgIGlmKCAhZ2xHZXRQdHJJbml0ICkgewogICAg
ICAgIEFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKG5ldyBQcml2aWxlZ2VkQWN0aW9uPE9i
amVjdD4oKSB7CiAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICBwdWJsaWMgT2JqZWN0
IHJ1bigpIHsKICAgICAgICAgICAgICAgIGZpbmFsIEdMRHluYW1pY0xvb2t1cEhlbHBlciBnbER5
bkxvb2t1cEhlbHBlciA9IGdldEdMRHluYW1pY0xvb2t1cEhlbHBlcihtYWpvclZlcnNpb24sIGNv
bnRleHRPcHRpb25zKTsKICAgICAgICAgICAgICAgIGlmKCBudWxsICE9IGdsRHluTG9va3VwSGVs
cGVyICkgewogICAgICAgICAgICAgICAgICAgIGdsRHluTG9va3VwSGVscGVyLmNsYWltQWxsTGlu
a1Blcm1pc3Npb24oKTsKICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAg
ICAgICAgICBnbEdldFN0cmluZ1B0ciA9IGdsRHluTG9va3VwSGVscGVyLmR5bmFtaWNMb29rdXBG
dW5jdGlvbigiZ2xHZXRTdHJpbmciKTsKICAgICAgICAgICAgICAgICAgICAgICAgZ2xHZXRJbnRl
Z2VydlB0ciA9IGdsRHluTG9va3VwSGVscGVyLmR5bmFtaWNMb29rdXBGdW5jdGlvbigiZ2xHZXRJ
bnRlZ2VydiIpOwogICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGdsRHluTG9va3VwSGVscGVyLnJlbGVhc2VBbGxMaW5rUGVybWlzc2lvbigpOwog
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJl
dHVybiBudWxsOwogICAgICAgICAgICB9IH0gKTsKICAgICAgICBnbEdldFB0ckluaXQgPSB0cnVl
OwogICAgfQogICAgaWYoIDAgPT0gZ2xHZXRTdHJpbmdQdHIgfHwgMCA9PSBnbEdldEludGVnZXJ2
UHRyICkgewogICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3I6IENvdWxkIG5vdCBsb29r
dXA6IGdsR2V0U3RyaW5nICIrdG9IZXhTdHJpbmcoZ2xHZXRTdHJpbmdQdHIpKyIsIGdsR2V0SW50
ZWdlcnYgIit0b0hleFN0cmluZyhnbEdldEludGVnZXJ2UHRyKSk7CiAgICAgICAgaWYoREVCVUcp
IHsKICAgICAgICAgICAgRXhjZXB0aW9uVXRpbHMuZHVtcFN0YWNrKFN5c3RlbS5lcnIpOwogICAg
ICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGVsc2UgewogICAgICAgIGZpbmFsIFN0
cmluZyBfZ2xWZW5kb3IgPSBnbEdldFN0cmluZ0ludChHTC5HTF9WRU5ET1IsIGdsR2V0U3RyaW5n
UHRyKTsKICAgICAgICBpZihudWxsID09IF9nbFZlbmRvcikgewogICAgICAgICAgICBpZihERUJV
RykgewogICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXYXJuaW5nOiBHTF9WRU5E
T1IgaXMgTlVMTC4iKTsKICAgICAgICAgICAgICAgIEV4Y2VwdGlvblV0aWxzLmR1bXBTdGFjayhT
eXN0ZW0uZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgfQogICAgICAgIGdsVmVuZG9yID0gX2dsVmVuZG9yOwoKICAgICAgICBmaW5hbCBTdHJpbmcg
X2dsUmVuZGVyZXIgPSBnbEdldFN0cmluZ0ludChHTC5HTF9SRU5ERVJFUiwgZ2xHZXRTdHJpbmdQ
dHIpOwogICAgICAgIGlmKG51bGwgPT0gX2dsUmVuZGVyZXIpIHsKICAgICAgICAgICAgaWYoREVC
VUcpIHsKICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV2FybmluZzogR0xfUkVO
REVSRVIgaXMgTlVMTC4iKTsKICAgICAgICAgICAgICAgIEV4Y2VwdGlvblV0aWxzLmR1bXBTdGFj
ayhTeXN0ZW0uZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgfQogICAgICAgIGdsUmVuZGVyZXIgPSBfZ2xSZW5kZXJlcjsKICAgICAgICBnbFJlbmRl
cmVyTG93ZXJDYXNlID0gZ2xSZW5kZXJlci50b0xvd2VyQ2FzZSgpOwoKICAgICAgICBmaW5hbCBT
dHJpbmcgX2dsVmVyc2lvbiA9IGdsR2V0U3RyaW5nSW50KEdMLkdMX1ZFUlNJT04sIGdsR2V0U3Ry
aW5nUHRyKTsKICAgICAgICBpZihudWxsID09IF9nbFZlcnNpb24pIHsKICAgICAgICAgICAgLy8g
RklYTUUKICAgICAgICAgICAgaWYoREVCVUcpIHsKICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIu
cHJpbnRsbigiV2FybmluZzogR0xfVkVSU0lPTiBpcyBOVUxMLiIpOwogICAgICAgICAgICAgICAg
RXhjZXB0aW9uVXRpbHMuZHVtcFN0YWNrKFN5c3RlbS5lcnIpOwogICAgICAgICAgICB9CiAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgZ2xWZXJzaW9uID0gX2dsVmVy
c2lvbjsKCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgfQoKICAvKioKICAgKiBSZXR1cm5z
IGZhbHNlIGlmIDxjb2RlPmdsR2V0SW50ZWdlcnY8L2NvZGU+IGlzIGluYWNjZXNzaWJsZSwgb3Ro
ZXJ3aXNlIHF1ZXJpZXMgbWFqb3IubWlub3IKICAgKiB2ZXJzaW9uIGZvciBnaXZlbiBhcnJheXMu
CiAgICogPHA+CiAgICogSWYgdGhlIEdMIHF1ZXJ5IGZhaWxzLCBtYWpvciB3aWxsIGJlIHplcm8u
CiAgICogPC9wPgogICAqLwogIHByaXZhdGUgZmluYWwgdm9pZCBnZXRHTEludFZlcnNpb24oZmlu
YWwgaW50W10gZ2xJbnRNYWpvciwgZmluYWwgaW50W10gZ2xJbnRNaW5vcikgIHsKICAgIGdsSW50
TWFqb3JbMF0gPSAwOyAvLyBjbGVhcgogICAgZ2xJbnRNaW5vclswXSA9IDA7IC8vIGNsZWFyCiAg
ICBpZiggMCA9PSBnbEdldEludGVnZXJ2UHRyICkgewogICAgICAgIC8vIHNob3VsZCBub3QgYmUg
cmVhY2hlZCwgc2luY2UgaW5pdEdMUmVuZGVyZXJBbmRHTFZlcnNpb25TdHJpbmdzKC4uKSdzIGZh
aWx1cmUgc2hvdWxkIGFib3J0IGNhbGxlciEKICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJv
cigiTm90IGluaXRpYWxpemVkOiBnbEdldFN0cmluZyAiK3RvSGV4U3RyaW5nKGdsR2V0U3RyaW5n
UHRyKSsiLCBnbEdldEludGVnZXJ2ICIrdG9IZXhTdHJpbmcoZ2xHZXRJbnRlZ2VydlB0cikpOwog
ICAgfSBlbHNlIHsKICAgICAgICBnbEdldEludGVnZXJ2SW50KEdMMkVTMy5HTF9NQUpPUl9WRVJT
SU9OLCBnbEludE1ham9yLCAwLCBnbEdldEludGVnZXJ2UHRyKTsKICAgICAgICBnbEdldEludGVn
ZXJ2SW50KEdMMkVTMy5HTF9NSU5PUl9WRVJTSU9OLCBnbEludE1pbm9yLCAwLCBnbEdldEludGVn
ZXJ2UHRyKTsKICAgIH0KICB9CgoKICAvKioKICAgKiBSZXR1cm5zIG51bGwgaWYgdmVyc2lvbiBz
dHJpbmcgaXMgaW52YWxpZCwgb3RoZXJ3aXNlIGEgdmFsaWQgaW5zdGFuY2UuCiAgICogPHA+CiAg
ICogTm90ZTogTm9uIEFSQiBjdHggaXMgbGltaXRlZCB0byBHTCAzLjAuCiAgICogPC9wPgogICAq
LwogIHByaXZhdGUgc3RhdGljIGZpbmFsIFZlcnNpb25OdW1iZXIgZ2V0R0xWZXJzaW9uTnVtYmVy
KGZpbmFsIGludCBjdHAsIGZpbmFsIFN0cmluZyBnbFZlcnNpb25TdHIpIHsKICAgICAgaWYoIG51
bGwgIT0gZ2xWZXJzaW9uU3RyICkgewogICAgICAgICAgZmluYWwgR0xWZXJzaW9uTnVtYmVyIHZl
cnNpb24gPSBHTFZlcnNpb25OdW1iZXIuY3JlYXRlKGdsVmVyc2lvblN0cik7CiAgICAgICAgICBp
ZiAoIHZlcnNpb24uaXNWYWxpZCgpICkgewogICAgICAgICAgICAgIGZpbmFsIGludFtdIG1ham9y
ID0gbmV3IGludFtdIHsgdmVyc2lvbi5nZXRNYWpvcigpIH07CiAgICAgICAgICAgICAgZmluYWwg
aW50W10gbWlub3IgPSBuZXcgaW50W10geyB2ZXJzaW9uLmdldE1pbm9yKCkgfTsKICAgICAgICAg
ICAgICBpZiAoIEdMQ29udGV4dC5pc1ZhbGlkR0xWZXJzaW9uKGN0cCwgbWFqb3JbMF0sIG1pbm9y
WzBdKSApIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBWZXJzaW9uTnVtYmVyKG1ham9y
WzBdLCBtaW5vclswXSwgMCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICB9CiAg
ICAgIHJldHVybiBudWxsOwogIH0KCiAgcHJvdGVjdGVkIGZpbmFsIGludCBnZXRDdHhPcHRpb25z
KCkgewogICAgICByZXR1cm4gY3R4T3B0aW9uczsKICB9CgoKICAvKioKICAgKiBTZXRzIHRoZSBP
cGVuR0wgaW1wbGVtZW50YXRpb24gY2xhc3MgYW5kCiAgICogdGhlIGNhY2hlIG9mIHdoaWNoIEdM
IGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciBjYWxsaW5nIHRocm91Z2ggdGhpcwogICAqIGNv
bnRleHQuIFNlZSB7QGxpbmsgI2lzRnVuY3Rpb25BdmFpbGFibGUoU3RyaW5nKX0gZm9yIG1vcmUg
aW5mb3JtYXRpb24gb24KICAgKiB0aGUgZGVmaW5pdGlvbiBvZiAiYXZhaWxhYmxlIi4KICAgKiA8
cD4KICAgKiBBbGwgUHJvY2FkZHJlc3NUYWJsZXMgYXJlIGJlaW5nIGRldGVybWluZWQgYW5kIGNh
Y2hlZCwgdGhlIEdMIHZlcnNpb24gaXMgYmVpbmcgc2V0CiAgICogYW5kIHRoZSBleHRlbnNpb24g
Y2FjaGUgaXMgZGV0ZXJtaW5lZCBhcyB3ZWxsLgogICAqIDwvcD4KICAgKiA8cD4KICAgKiBJdCBp
cyB0aGUgY2FsbGVycyByZXNwb25zaWJpbGl0eSB0byBpc3N1ZSB7QGxpbmsgI3Jlc2V0U3RhdGVz
KGJvb2xlYW4pfQogICAqIGluIGNhc2UgdGhpcyBtZXRob2QgcmV0dXJucyB7QGNvZGUgZmFsc2V9
IG9yIHRocm93cyBhIHtAbGluayBHTEV4Y2VwdGlvbn0uCiAgICogPC9wPgogICAqCiAgICogQHBh
cmFtIGZvcmNlIGZvcmNlIHRoZSBzZXR0aW5nLCBldmVuIGlmIGlzIGFscmVhZHkgYmVpbmcgc2V0
LgogICAqICAgICAgICAgICAgICBUaGlzIG1pZ2h0IGJlIHVzZWZ1bCBpZiB5b3UgY2hhbmdlIHRo
ZSBPcGVuR0wgaW1wbGVtZW50YXRpb24uCiAgICogQHBhcmFtIG1ham9yIHJlcXVlc3RlZCBPcGVu
R0wgbWFqb3IgdmVyc2lvbgogICAqIEBwYXJhbSBtaW5vciByZXF1ZXN0ZWQgT3BlbkdMIG1pbm9y
IHZlcnNpb24KICAgKiBAcGFyYW0gY3R4UHJvZmlsZUJpdHMgT3BlbkdMIGNvbnRleHQgcHJvZmls
ZSBhbmQgb3B0aW9uIGJpdHMsIHNlZSB7QGxpbmsgY29tLmpvZ2FtcC5vcGVuZ2wuR0xDb250ZXh0
I0NUWF9PUFRJT05fQU5ZfQogICAqIEBwYXJhbSBzdHJpY3RNYXRjaCBpZiA8Y29kZT50cnVlPC9j
b2RlPiB0aGUgY3R4IG11c3QKICAgKiAgICAgICAgICAgICAgICAgICAgPHVsPgogICAqICAgICAg
ICAgICAgICAgICAgICAgIDxsaT5iZSBncmVhdGVyIG9yIGVxdWFsIHRoYW4gdGhlIHJlcXVlc3Rl
ZCA8Y29kZT5tYWpvci5taW5vcjwvY29kZT4gdmVyc2lvbiwgYW5kPC9saT4KICAgKiAgICAgICAg
ICAgICAgICAgICAgICA8bGk+bWF0Y2ggdGhlIGN0eFByb2ZpbGVCaXRzPC9saT4KICAgKiAgICAg
ICAgICAgICAgICAgICAgICA8bGk+bWF0Y2ggRVMgbWFqb3IgdmVyc2lvbnM8L2xpPgogICAqICAg
ICAgICAgICAgICAgICAgICA8L3VsPiwgb3RoZXJ3aXNlIG1ldGhvZCBhYm9ydHMgYW5kIHJldHVy
bnMgPGNvZGU+ZmFsc2U8L2NvZGU+Ljxicj4KICAgKiAgICAgICAgICAgICAgICAgICAgaWYgPGNv
ZGU+ZmFsc2U8L2NvZGU+IG5vIHZlcnNpb24gY2hlY2sgaXMgcGVyZm9ybWVkLgogICAqIEBwYXJh
bSB3aXRoaW5HTFZlcnNpb25zTWFwcGluZyBpZiA8Y29kZT50cnVlPC9jb2RlPiBHTCB2ZXJzaW9u
IG1hcHBpbmcgaXMgaW4gcHJvY2VzcywgaS5lLiBxdWVyeWluZyBhdmFpbCB2ZXJzaW9ucy4KICAg
KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlIG5vcm1hbCB1c2VyIGNv
bnRleHQgY3JlYXRpb24uCiAgICogQHJldHVybiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlm
IHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSA8Y29kZT5mYWxzZTwvY29kZT4uPGJyPgogICAqICAgICAg
ICAgICAgICAgICBJZiA8Y29kZT5zdHJpY3RNYXRjaDwvY29kZT4gaXMgPGNvZGU+ZmFsc2U8L2Nv
ZGU+IG1ldGhvZCBzaGFsbCBhbHdheXMgcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IG9yIHRocm93
IGFuIGV4Y2VwdGlvbi4KICAgKiAgICAgICAgICAgICAgICAgSWYgPGNvZGU+ZmFsc2U8L2NvZGU+
IGlzIHJldHVybmVkLCBubyBkYXRhIGhhcyBiZWVuIGNhY2hlZCBvciBtYXBwZWQsIGkuZS4gUHJv
Y0FkZHJlc3NUYWJsZSwgRXh0ZW5zaW9ucywgVmVyc2lvbiwgZXRjLgogICAqIEB0aHJvd3MgR0xF
eGNlcHRpb24gaW4gY2FzZSBvZiBhbiB1bmV4cGVjdGVkIE9wZW5HTCByZWxhdGVkIGlzc3VlLCBl
LmcuIG1pc3NpbmcgZXhwZWN0ZWQgR0wgZnVuY3Rpb24gcG9pbnRlci4KICAgKiBAc2VlICNzZXRD
b250ZXh0VmVyc2lvbgogICAqIEBzZWUgY29tLmpvZ2FtcC5vcGVuZ2wuR0xDb250ZXh0I0NUWF9P
UFRJT05fQU5ZCiAgICogQHNlZSBjb20uam9nYW1wLm9wZW5nbC5HTENvbnRleHQjQ1RYX1BST0ZJ
TEVfQ09NUEFUCiAgICogQHNlZSBjb20uam9nYW1wLm9wZW5nbC5HTENvbnRleHQjQ1RYX0lNUExf
RVMyX0NPTVBBVAogICAqLwogIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIHNldEdMRnVuY3Rpb25B
dmFpbGFiaWxpdHkoZmluYWwgYm9vbGVhbiBmb3JjZSwgaW50IG1ham9yLCBpbnQgbWlub3IsIGlu
dCBjdHhQcm9maWxlQml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gc3RyaWN0TWF0Y2gsIGZpbmFsIGJvb2xlYW4gd2l0
aGluR0xWZXJzaW9uc01hcHBpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aHJvd3MgR0xFeGNlcHRpb24KICB7CiAgICBpZiggbnVsbCAhPSB0
aGlzLmdsICYmIG51bGwgIT0gZ2xQcm9jQWRkcmVzc1RhYmxlICYmICFmb3JjZSApIHsKICAgICAg
ICByZXR1cm4gdHJ1ZTsgLy8gYWxyZWFkeSBkb25lIGFuZCBub3QgZm9yY2VkCiAgICB9CgogICAg
aWYgKCAwIDwgbWFqb3IgJiYgIUdMQ29udGV4dC5pc1ZhbGlkR0xWZXJzaW9uKGN0eFByb2ZpbGVC
aXRzLCBtYWpvciwgbWlub3IpICkgewogICAgICAgIHRocm93IG5ldyBHTEV4Y2VwdGlvbigiSW52
YWxpZCBHTCBWZXJzaW9uIFJlcXVlc3QgIitHTENvbnRleHQuZ2V0R0xWZXJzaW9uKG1ham9yLCBt
aW5vciwgY3R4UHJvZmlsZUJpdHMsIG51bGwpKTsKICAgIH0KCiAgICBmaW5hbCBBYnN0cmFjdEdy
YXBoaWNzQ29uZmlndXJhdGlvbiBhY29uZmlnID0gZHJhd2FibGUuZ2V0TmF0aXZlU3VyZmFjZSgp
LmdldEdyYXBoaWNzQ29uZmlndXJhdGlvbigpOwogICAgZmluYWwgQWJzdHJhY3RHcmFwaGljc0Rl
dmljZSBhZGV2aWNlID0gYWNvbmZpZy5nZXRTY3JlZW4oKS5nZXREZXZpY2UoKTsKICAgIGZpbmFs
IGludCByZXFDdHhQcm9maWxlQml0cyA9IGN0eFByb2ZpbGVCaXRzOwogICAgZmluYWwgVmVyc2lv
bk51bWJlciByZXFHTFZlcnNpb24gPSBuZXcgVmVyc2lvbk51bWJlcihtYWpvciwgbWlub3IsIDAp
OwogICAgZmluYWwgVmVyc2lvbk51bWJlciBoYXNHTFZlcnNpb25CeVN0cmluZzsKICAgIHsKICAg
ICAgICBmaW5hbCBib29sZWFuIGluaXRHTFJlbmRlcmVyQW5kR0xWZXJzaW9uU3RyaW5nc09LID0g
aW5pdEdMUmVuZGVyZXJBbmRHTFZlcnNpb25TdHJpbmdzKG1ham9yLCBjdHhQcm9maWxlQml0cyk7
CiAgICAgICAgaWYoICFpbml0R0xSZW5kZXJlckFuZEdMVmVyc2lvblN0cmluZ3NPSyApIHsKICAg
ICAgICAgICAgZmluYWwgU3RyaW5nIGVyck1zZyA9ICJJbnRpYWxpemF0aW9uIG9mIEdMIHJlbmRl
cmVyIHN0cmluZ3MgZmFpbGVkLiAiK2FkZXZpY2UrIiAtICIrR0xDb250ZXh0LmdldEdMVmVyc2lv
bihtYWpvciwgbWlub3IsIGN0eFByb2ZpbGVCaXRzLCBudWxsKTsKICAgICAgICAgICAgaWYoIHN0
cmljdE1hdGNoICkgewogICAgICAgICAgICAgICAgLy8gcXVlcnkgbW9kZSAuLiBzaW1wbHkgZmFp
bAogICAgICAgICAgICAgICAgaWYoREVCVUcpIHsKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0u
ZXJyLnByaW50bG4oIldhcm5pbmc6IHNldEdMRnVuY3Rpb25BdmFpbGFiaWxpdHk6ICIrZXJyTXNn
KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIHVudXNhYmxlIEdMIGNvbnRleHQgLSBu
b24gcXVlcnkgbW9kZSAtIGhhcmQgZmFpbCEKICAgICAgICAgICAgICAgIHRocm93IG5ldyBHTEV4
Y2VwdGlvbihlcnJNc2cpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgaGFzR0xWZXJzaW9uQnlTdHJpbmcgPSBnZXRHTFZlcnNpb25OdW1iZXIoY3R4UHJvZmlsZUJp
dHMsIGdsVmVyc2lvbik7CiAgICAgICAgICAgIGlmKERFQlVHKSB7CiAgICAgICAgICAgICAgICBT
eXN0ZW0uZXJyLnByaW50bG4oZ2V0VGhyZWFkTmFtZSgpICsgIjogR0xDb250ZXh0LnNldEdMRnVu
Y0F2YWlsOiBHaXZlbiAiK2FkZXZpY2UrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIiAtICIrR0xDb250ZXh0LmdldEdMVmVyc2lvbihtYWpvciwgbWlub3IsIGN0eFByb2ZpbGVC
aXRzLCBnbFZlcnNpb24pKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIE51
bWJlcihTdHIpICIraGFzR0xWZXJzaW9uQnlTdHJpbmcpOwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgfQoKICAgIGZpbmFsIGJvb2xlYW4gaXNFUyA9IDAgIT0gKCBDVFhfUFJPRklMRV9FUyAm
IGN0eFByb2ZpbGVCaXRzICk7CgogICAgLy8KICAgIC8vIFZhbGlkYXRlIEdMIHZlcnNpb24gZWl0
aGVyIGJ5IEdMLUludGVnZXIgb3IgR0wtU3RyaW5nCiAgICAvLwogICAgaWYgKERFQlVHKSB7CiAg
ICAgICAgU3lzdGVtLmVyci5wcmludGxuKGdldFRocmVhZE5hbWUoKSArICI6IEdMQ29udGV4dC5z
ZXRHTEZ1bmNBdmFpbDogUHJlIHZlcnNpb24gdmVyaWZpY2F0aW9uIC0gZXhwZWN0ZWQgIitHTENv
bnRleHQuZ2V0R0xWZXJzaW9uKG1ham9yLCBtaW5vciwgY3R4UHJvZmlsZUJpdHMsIG51bGwpKyIs
IHN0cmljdE1hdGNoICIrc3RyaWN0TWF0Y2grIiwgZ2xWZXJzaW9uc01hcHBpbmcgIiArd2l0aGlu
R0xWZXJzaW9uc01hcHBpbmcpOwogICAgfQoKICAgIGZpbmFsIGJvb2xlYW4gdmVyc2lvbkdMM0lu
dE9LOwogICAgewogICAgICAgIC8vIFZhbGlkYXRlIHRoZSByZXF1ZXN0ZWQgdmVyc2lvbiB3LyB0
aGUgR0wtdmVyc2lvbiBmcm9tIGFuIGludGVnZXIgcXVlcnksCiAgICAgICAgLy8gYXMgc3VwcG9y
dGVkIGJ5IEdMIFtFU10gPj0gMy4wIGltcGxlbWVudGF0aW9uLgogICAgICAgIC8vCiAgICAgICAg
Ly8gT25seSB2YWxpZGF0ZSBpbnRlZ2VyIGJhc2VkIHZlcnNpb24gaWY6CiAgICAgICAgLy8gICAg
LSBjdHggPj0gMy4wIGlzIHJlcXVlc3RlZCBfb3JfIHN0cmluZy12ZXJzaW9uID49IDMuMAogICAg
ICAgIC8vICAgIC0gX2FuZF8gYSB2YWxpZCBpbnQgdmVyc2lvbiB3YXMgZmV0Y2hlZCwKICAgICAg
ICAvLyBvdGhlcndpc2UgY29udC4gdy8gdmVyc2lvbi1zdHJpbmcgbWV0aG9kIC0+IDMuMCA+IFZl
cnNpb24gfHwgVmVyc2lvbiA+IE1BWCEKICAgICAgICAvLwogICAgICAgIGZpbmFsIFZlcnNpb25O
dW1iZXIgaGFzR0xWZXJzaW9uQnlJbnQ7CiAgICAgICAgaWYgKCBtYWpvciA+PSAzIHx8IGhhc0dM
VmVyc2lvbkJ5U3RyaW5nLmNvbXBhcmVUbyhWZXJzaW9uM18wKSA+PSAwICkgewogICAgICAgICAg
ICBmaW5hbCBpbnRbXSBnbEludE1ham9yID0gbmV3IGludFtdIHsgMCB9LCBnbEludE1pbm9yID0g
bmV3IGludFtdIHsgMCB9OwogICAgICAgICAgICBnZXRHTEludFZlcnNpb24oZ2xJbnRNYWpvciwg
Z2xJbnRNaW5vcik7CiAgICAgICAgICAgIGhhc0dMVmVyc2lvbkJ5SW50ID0gbmV3IFZlcnNpb25O
dW1iZXIoZ2xJbnRNYWpvclswXSwgZ2xJbnRNaW5vclswXSwgMCk7CiAgICAgICAgICAgIGlmIChE
RUJVRykgewogICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGdldFRocmVhZE5hbWUo
KSArICI6IEdMQ29udGV4dC5zZXRHTEZ1bmNBdmFpbDogVmVyc2lvbiB2ZXJpZmljYXRpb24gKElu
dCk6IFN0cmluZyAiK2dsVmVyc2lvbisiLCBOdW1iZXIoSW50KSAiK2hhc0dMVmVyc2lvbkJ5SW50
KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIEdMQ29udGV4dC5pc1ZhbGlkR0xWZXJz
aW9uKGN0eFByb2ZpbGVCaXRzLCBoYXNHTFZlcnNpb25CeUludC5nZXRNYWpvcigpLCBoYXNHTFZl
cnNpb25CeUludC5nZXRNaW5vcigpKSApIHsKICAgICAgICAgICAgICAgIC8vIFN0cmljdCBNYXRj
aCAoR0xWZXJzaW9uTWFwcGluZyk6CiAgICAgICAgICAgICAgICAvLyAgIFJlbGF4ZWQgbWF0Y2gg
Zm9yIHZlcnNpb25zICggIWlzRVMgJiYgbWFqb3IgPCAzICkgcmVxdWVzdHMsIGxhc3QgcmVzb3J0
IQogICAgICAgICAgICAgICAgLy8gICBPdGhlcndpc2U6CiAgICAgICAgICAgICAgICAvLyAgICAg
LSBmYWlsIGlmIGhhc1ZlcnNpb24gPCByZXFWZXJzaW9uIChkZXNrdG9wIGFuZCBFUykKICAgICAg
ICAgICAgICAgIC8vICAgICAtIGZhaWwgaWYgRVMgbWFqb3ItdmVyc2lvbiBtaXNtYXRjaDoKICAg
ICAgICAgICAgICAgIC8vICAgICAgIC0gcmVxdWVzdCAxLCA+PSAzIG11c3QgYmUgZXF1YWwKICAg
ICAgICAgICAgICAgIC8vICAgICAgIC0gcmVxdWVzdCAyIG11c3QgYmUgWzIuLjNdCiAgICAgICAg
ICAgICAgICAvLwogICAgICAgICAgICAgICAgZmluYWwgaW50IGhhc01ham9yID0gaGFzR0xWZXJz
aW9uQnlJbnQuZ2V0TWFqb3IoKTsKICAgICAgICAgICAgICAgIGlmKCBzdHJpY3RNYXRjaCAmJgog
ICAgICAgICAgICAgICAgICAgICggKCAoIGlzRVMgfHwgbWFqb3IgPj0gMyApICYmIGhhc0dMVmVy
c2lvbkJ5SW50LmNvbXBhcmVUbyhyZXFHTFZlcnNpb24pIDwgMCApIHx8CiAgICAgICAgICAgICAg
ICAgICAgICAoIGlzRVMgJiYKICAgICAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAg
ICAgICAgICAgICAgICggMiA9PSBtYWpvciAmJiAoIDIgPiBoYXNNYWpvciB8fCBoYXNNYWpvciA+
IDMgKSApIHx8ICAvLyAyICAgICAgLT4gWzIuLjNdCiAgICAgICAgICAgICAgICAgICAgICAgICAg
KCAoIDEgPT0gbWFqb3IgfHwgMyA8PSBtYWpvciApICYmIG1ham9yICE9IGhhc01ham9yICkgIC8v
IDEsMywuLiAtPiBlcXVhbAogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAg
ICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgKSApIHsKICAgICAgICAgICAgICAgICAgICBp
ZihERUJVRykgewogICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oZ2V0
VGhyZWFkTmFtZSgpICsgIjogR0xDb250ZXh0LnNldEdMRnVuY0F2YWlsLlg6IEZBSUwsIEdMIHZl
cnNpb24gbWlzbWF0Y2ggKEludCk6ICIrR0xDb250ZXh0LmdldEdMVmVyc2lvbihtYWpvciwgbWlu
b3IsIGN0eFByb2ZpbGVCaXRzLCBudWxsKSsiIC0+ICIrZ2xWZXJzaW9uKyIsICIraGFzR0xWZXJz
aW9uQnlJbnQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBVc2UgcmV0dXJu
ZWQgR0wgdmVyc2lvbiEKICAgICAgICAgICAgICAgIG1ham9yID0gaGFzR0xWZXJzaW9uQnlJbnQu
Z2V0TWFqb3IoKTsKICAgICAgICAgICAgICAgIG1pbm9yID0gaGFzR0xWZXJzaW9uQnlJbnQuZ2V0
TWlub3IoKTsKICAgICAgICAgICAgICAgIHZlcnNpb25HTDNJbnRPSyA9IHRydWU7CiAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2ZXJzaW9uR0wzSW50T0sgPSBmYWxzZTsKICAg
ICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZlcnNpb25HTDNJbnRPSyA9
IGZhbHNlOwogICAgICAgIH0KICAgIH0KICAgIGZpbmFsIGJvb2xlYW4gdmVyc2lvblZhbGlkYXRl
ZDsKCiAgICBpZiggdmVyc2lvbkdMM0ludE9LICkgewogICAgICAgIHZlcnNpb25WYWxpZGF0ZWQg
PSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgICAvLyBWYWxpZGF0ZSB0aGUgcmVxdWVzdGVkIHZl
cnNpb24gdy8gdGhlIEdMLXZlcnNpb24gZnJvbSB0aGUgdmVyc2lvbiBzdHJpbmcuCiAgICAgICAg
aWYgKERFQlVHKSB7CiAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihnZXRUaHJlYWROYW1l
KCkgKyAiOiBHTENvbnRleHQuc2V0R0xGdW5jQXZhaWw6IFZlcnNpb24gdmVyaWZpY2F0aW9uIChT
dHJpbmcpOiBTdHJpbmcgIitnbFZlcnNpb24rIiwgTnVtYmVyKFN0cikgIitoYXNHTFZlcnNpb25C
eVN0cmluZyk7CiAgICAgICAgfQoKICAgICAgICAvLyBPbmx5IHZhbGlkYXRlIGlmIGEgdmFsaWQg
c3RyaW5nIHZlcnNpb24gd2FzIGZldGNoZWQgLT4gTUlOID4gVmVyc2lvbiB8fCBWZXJzaW9uID4g
TUFYIQogICAgICAgIGlmKCBudWxsICE9IGhhc0dMVmVyc2lvbkJ5U3RyaW5nICkgewogICAgICAg
ICAgICAvLyBTdHJpY3QgTWF0Y2ggKEdMVmVyc2lvbk1hcHBpbmcpOgogICAgICAgICAgICAvLyAg
IFJlbGF4ZWQgbWF0Y2ggZm9yIHZlcnNpb25zICggIWlzRVMgJiYgbWFqb3IgPCAzICkgcmVxdWVz
dHMsIGxhc3QgcmVzb3J0IQogICAgICAgICAgICAvLyAgIE90aGVyd2lzZToKICAgICAgICAgICAg
Ly8gICAgIC0gZmFpbCBpZiBoYXNWZXJzaW9uIDwgcmVxVmVyc2lvbiAoZGVza3RvcCBhbmQgRVMp
CiAgICAgICAgICAgIC8vICAgICAtIGZhaWwgaWYgRVMgbWFqb3ItdmVyc2lvbiBtaXNtYXRjaDoK
ICAgICAgICAgICAgLy8gICAgICAgLSByZXF1ZXN0IDEsID49IDMgbXVzdCBiZSBlcXVhbAogICAg
ICAgICAgICAvLyAgICAgICAtIHJlcXVlc3QgMiBtdXN0IGJlIFsyLi4zXQogICAgICAgICAgICAv
LwogICAgICAgICAgICBmaW5hbCBpbnQgaGFzTWFqb3IgPSBoYXNHTFZlcnNpb25CeVN0cmluZy5n
ZXRNYWpvcigpOwogICAgICAgICAgICBpZiggc3RyaWN0TWF0Y2ggJiYKICAgICAgICAgICAgICAg
ICggKCAoIGlzRVMgfHwgbWFqb3IgPj0gMyApICYmIGhhc0dMVmVyc2lvbkJ5U3RyaW5nLmNvbXBh
cmVUbyhyZXFHTFZlcnNpb24pIDwgMCApIHx8CiAgICAgICAgICAgICAgICAgICggaXNFUyAmJgog
ICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgICggMiA9PSBtYWpvciAm
JiAoIDIgPiBoYXNNYWpvciB8fCBoYXNNYWpvciA+IDMgKSApIHx8ICAvLyAyICAgICAgLT4gWzIu
LjNdCiAgICAgICAgICAgICAgICAgICAgICAoICggMSA9PSBtYWpvciB8fCAzIDw9IG1ham9yICkg
JiYgbWFqb3IgIT0gaGFzTWFqb3IgKSAgLy8gMSwzLC4uIC0+IGVxdWFsCiAgICAgICAgICAgICAg
ICAgICAgKQogICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApICkgewogICAgICAg
ICAgICAgICAgaWYoREVCVUcpIHsKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50
bG4oZ2V0VGhyZWFkTmFtZSgpICsgIjogR0xDb250ZXh0LnNldEdMRnVuY0F2YWlsLlg6IEZBSUws
IEdMIHZlcnNpb24gbWlzbWF0Y2ggKFN0cmluZyk6ICIrR0xDb250ZXh0LmdldEdMVmVyc2lvbiht
YWpvciwgbWlub3IsIGN0eFByb2ZpbGVCaXRzLCBudWxsKSsiIC0+ICIrZ2xWZXJzaW9uKyIsICIr
aGFzR0xWZXJzaW9uQnlTdHJpbmcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKCBzdHJpY3RNYXRjaCAm
JiAhdmVyc2lvbkdMM0ludE9LICYmIG1ham9yID49IDMgKSB7CiAgICAgICAgICAgICAgICBpZihE
RUJVRykgewogICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihnZXRUaHJlYWRO
YW1lKCkgKyAiOiBHTENvbnRleHQuc2V0R0xGdW5jQXZhaWwuWDogRkFJTCwgR0wzL0VTMyB2ZXJz
aW9uIEludCBmYWlsZWQsIFN0cmluZzogIitHTENvbnRleHQuZ2V0R0xWZXJzaW9uKG1ham9yLCBt
aW5vciwgY3R4UHJvZmlsZUJpdHMsIG51bGwpKyIgLT4gIitnbFZlcnNpb24rIiwgIitoYXNHTFZl
cnNpb25CeVN0cmluZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gVXNlIHJldHVybmVkIEdMIHZlcnNp
b24hCiAgICAgICAgICAgIG1ham9yID0gaGFzR0xWZXJzaW9uQnlTdHJpbmcuZ2V0TWFqb3IoKTsK
ICAgICAgICAgICAgbWlub3IgPSBoYXNHTFZlcnNpb25CeVN0cmluZy5nZXRNaW5vcigpOwogICAg
ICAgICAgICB2ZXJzaW9uVmFsaWRhdGVkID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICB2ZXJzaW9uVmFsaWRhdGVkID0gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgaWYoIHN0
cmljdE1hdGNoICYmICF2ZXJzaW9uVmFsaWRhdGVkICkgewogICAgICAgIGlmKERFQlVHKSB7CiAg
ICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihnZXRUaHJlYWROYW1lKCkgKyAiOiBHTENvbnRl
eHQuc2V0R0xGdW5jQXZhaWwuWDogRkFJTCwgTm8gR0wgdmVyc2lvbiB2YWxpZGF0aW9uIHBvc3Np
YmxlOiAiK0dMQ29udGV4dC5nZXRHTFZlcnNpb24obWFqb3IsIG1pbm9yLCBjdHhQcm9maWxlQml0
cywgbnVsbCkrIiAtPiAiK2dsVmVyc2lvbik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxz
ZTsKICAgIH0KICAgIGlmIChERUJVRykgewogICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihnZXRU
aHJlYWROYW1lKCkgKyAiOiBHTENvbnRleHQuc2V0R0xGdW5jQXZhaWw6IFBvc3QgdmVyc2lvbiB2
ZXJpZmljYXRpb24gcmVxICIrCiAgICAgICAgICAgICAgICBHTENvbnRleHQuZ2V0R0xWZXJzaW9u
KHJlcUdMVmVyc2lvbi5nZXRNYWpvcigpLCByZXFHTFZlcnNpb24uZ2V0TWlub3IoKSwgcmVxQ3R4
UHJvZmlsZUJpdHMsIG51bGwpKyIgLT4gaGFzICIrCiAgICAgICAgICAgICAgICBHTENvbnRleHQu
Z2V0R0xWZXJzaW9uKG1ham9yLCBtaW5vciwgY3R4UHJvZmlsZUJpdHMsIG51bGwpKwogICAgICAg
ICAgICAgICAgIiwgc3RyaWN0TWF0Y2ggIitzdHJpY3RNYXRjaCsiLCB2ZXJzaW9uVmFsaWRhdGVk
ICIrdmVyc2lvblZhbGlkYXRlZCsiLCB2ZXJzaW9uR0wzSW50T0sgIit2ZXJzaW9uR0wzSW50T0sp
OwogICAgfQoKICAgIGlmKCBtYWpvciA8IDIgKSB7IC8vIHRoZXJlIGlzIG5vIEVTMi8zLWNvbXBh
dCBmb3IgYSBwcm9maWxlIHcvIG1ham9yIDwgMgogICAgICAgIGN0eFByb2ZpbGVCaXRzICY9IH4g
KCBHTENvbnRleHQuQ1RYX0lNUExfRVMyX0NPTVBBVCB8IEdMQ29udGV4dC5DVFhfSU1QTF9FUzNf
Q09NUEFUIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xDb250ZXh0LkNUWF9JTVBM
X0VTMzFfQ09NUEFUIHwgR0xDb250ZXh0LkNUWF9JTVBMX0VTMzJfQ09NUEFUICkgOwogICAgfQoK
ICAgIGlmKCFpc0N1cnJlbnRDb250ZXh0SGFyZHdhcmVSYXN0ZXJpemVyKCkpIHsKICAgICAgICBj
dHhQcm9maWxlQml0cyB8PSBHTENvbnRleHQuQ1RYX0lNUExfQUNDRUxfU09GVDsKICAgIH0KCiAg
ICBmaW5hbCBWZXJzaW9uTnVtYmVyU3RyaW5nIHZlbmRvclZlcnNpb24gPSBHTFZlcnNpb25OdW1i
ZXIuY3JlYXRlVmVuZG9yVmVyc2lvbihnbFZlcnNpb24pOwoKICAgIHNldFJlbmRlcmVyUXVpcmtz
KGFkZXZpY2UsIGdldERyYXdhYmxlSW1wbCgpLmdldEZhY3RvcnlJbXBsKCksCiAgICAgICAgICAg
ICAgICAgICAgICByZXFHTFZlcnNpb24uZ2V0TWFqb3IoKSwgcmVxR0xWZXJzaW9uLmdldE1pbm9y
KCksIHJlcUN0eFByb2ZpbGVCaXRzLAogICAgICAgICAgICAgICAgICAgICAgbWFqb3IsIG1pbm9y
LCBjdHhQcm9maWxlQml0cywgdmVuZG9yVmVyc2lvbiwgd2l0aGluR0xWZXJzaW9uc01hcHBpbmcp
OwoKICAgIGlmKCBzdHJpY3RNYXRjaCAmJiBnbFJlbmRlcmVyUXVpcmtzLmV4aXN0KEdMUmVuZGVy
ZXJRdWlya3MuR0xOb25Db21wbGlhbnQpICkgewogICAgICAgIGlmKERFQlVHKSB7CiAgICAgICAg
ICAgIFN5c3RlbS5lcnIucHJpbnRsbihnZXRUaHJlYWROYW1lKCkgKyAiOiBHTENvbnRleHQuc2V0
R0xGdW5jQXZhaWwuWDogRkFJTCwgR0wgaXMgbm90IGNvbXBsaWFudDogIitHTENvbnRleHQuZ2V0
R0xWZXJzaW9uKG1ham9yLCBtaW5vciwgY3R4UHJvZmlsZUJpdHMsIGdsVmVyc2lvbikrIiwgIitn
bFJlbmRlcmVyKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGNv
bnRleHRGUU4gPSBnZXRDb250ZXh0RlFOKGFkZXZpY2UsIG1ham9yLCBtaW5vciwgY3R4UHJvZmls
ZUJpdHMpOwogICAgaWYgKERFQlVHKSB7CiAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGdldFRo
cmVhZE5hbWUoKSArICI6IEdMQ29udGV4dC5zZXRHTEZ1bmNBdmFpbC4wIHZhbGlkYXRlZCBGUU46
ICIrY29udGV4dEZRTisiIC0gIitHTENvbnRleHQuZ2V0R0xWZXJzaW9uKG1ham9yLCBtaW5vciwg
Y3R4UHJvZmlsZUJpdHMsIGdsVmVyc2lvbikpOwogICAgfQogICAgZmluYWwgR0xEeW5hbWljTG9v
a3VwSGVscGVyIGR5bmFtaWNMb29rdXAgPSBnZXRHTER5bmFtaWNMb29rdXBIZWxwZXIobWFqb3Is
IGN0eFByb2ZpbGVCaXRzKTsKICAgIGlmKCBudWxsID09IGR5bmFtaWNMb29rdXAgKSB7CiAgICAg
ICAgaWYoREVCVUcpIHsKICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGdldFRocmVhZE5h
bWUoKSArICI6IEdMQ29udGV4dC5zZXRHTEZ1bmNBdmFpbC5YOiBGQUlMLCBObyBHTER5bmFtaWNM
b29rdXBIZWxwZXIgZm9yIHJlcXVlc3Q6ICIrR0xDb250ZXh0LmdldEdMVmVyc2lvbihtYWpvciwg
bWlub3IsIGN0eFByb2ZpbGVCaXRzLCBudWxsKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBm
YWxzZTsKICAgIH0KICAgIHVwZGF0ZUdMWFByb2NBZGRyZXNzVGFibGUoY29udGV4dEZRTiwgZHlu
YW1pY0xvb2t1cCk7CgogICAgLy8KICAgIC8vIFVwZGF0ZUdMUHJvY0FkZHJlc3NUYWJsZSBmdW5j
dGlvbmFsaXR5CiAgICAvLyBfYW5kXyBzZXR1cCBHTCBpbnN0YW5jZSwgd2hpY2ggY3RvciByZXF1
aXJlcyB2YWxpZCBnZXRHTFByb2NBZGRyZXNzVGFibGUoKSByZXN1bHQhCiAgICAvLwogICAgewog
ICAgICAgIGZpbmFsIEdMUHJvZmlsZSBnbHAgPSBkcmF3YWJsZS5nZXRHTFByb2ZpbGUoKTsgLy8g
IXdpdGhpbkdMVmVyc2lvbnNNYXBwaW5nCgogICAgICAgIFByb2NBZGRyZXNzVGFibGUgdGFibGUg
PSBudWxsOwogICAgICAgIHN5bmNocm9uaXplZChtYXBwZWRDb250ZXh0VHlwZU9iamVjdExvY2sp
IHsKICAgICAgICAgICAgdGFibGUgPSBtYXBwZWRHTFByb2NBZGRyZXNzLmdldCggY29udGV4dEZR
TiApOwogICAgICAgICAgICBpZihudWxsICE9IHRhYmxlKSB7CiAgICAgICAgICAgICAgICBpZigg
IXZlcmlmeUluc3RhbmNlKGFkZXZpY2UsIG1ham9yLCBtaW5vciwgY3R4UHJvZmlsZUJpdHMsICJQ
cm9jQWRkcmVzc1RhYmxlIiwgdGFibGUpICkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5l
dyBHTEV4Y2VwdGlvbigiR0xDb250ZXh0IEdMIFByb2NBZGRyZXNzVGFibGUgbWFwcGVkIGtleSgi
K2NvbnRleHRGUU4rIiAtICIgKyBHTENvbnRleHQuZ2V0R0xWZXJzaW9uKG1ham9yLCBtaW5vciwg
Y3R4UHJvZmlsZUJpdHMsIG51bGwpKwogICAgICAgICAgICAgICAgICAgICAgICAgICIpIC0+ICIr
IHRvSGV4U3RyaW5nKHRhYmxlLmhhc2hDb2RlKCkpICsiIG5vdCBtYXRjaGluZyAiK3RhYmxlLmdl
dENsYXNzKCkuZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlm
KCAhd2l0aGluR0xWZXJzaW9uc01hcHBpbmcgJiYgIXZlcmlmeUluc3RhbmNlKGdscCwgIlByb2NB
ZGRyZXNzVGFibGUiLCB0YWJsZSkgKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEdM
RXhjZXB0aW9uKCJHTENvbnRleHQgR0wgUHJvY0FkZHJlc3NUYWJsZSBtYXBwZWQga2V5KCIrY29u
dGV4dEZRTisiIC0gIiArIEdMQ29udGV4dC5nZXRHTFZlcnNpb24obWFqb3IsIG1pbm9yLCBjdHhQ
cm9maWxlQml0cywgbnVsbCkrCiAgICAgICAgICAgICAgICAgICAgICAgICAgIikgLT4gIisgdG9I
ZXhTdHJpbmcodGFibGUuaGFzaENvZGUoKSkgKyI6ICIrdGFibGUuZ2V0Q2xhc3MoKS5nZXROYW1l
KCkrIiBub3QgbWF0Y2hpbmcgIitnbHAuZ2V0R0xJbXBsQmFzZUNsYXNzTmFtZSgpKyIvIitnbHAp
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKG51
bGwgIT0gdGFibGUpIHsKICAgICAgICAgICAgZ2xQcm9jQWRkcmVzc1RhYmxlID0gdGFibGU7CiAg
ICAgICAgICAgIGlmKERFQlVHKSB7CiAgICAgICAgICAgICAgICBpZiggd2l0aGluR0xWZXJzaW9u
c01hcHBpbmcgKSB7CiAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGdldFRo
cmVhZE5hbWUoKSArICI6IEdMQ29udGV4dCBHTCBQcm9jQWRkcmVzc1RhYmxlIHJldXNpbmcga2V5
KCIrY29udGV4dEZRTisiIC0gIiArIEdMQ29udGV4dC5nZXRHTFZlcnNpb24obWFqb3IsIG1pbm9y
LCBjdHhQcm9maWxlQml0cywgbnVsbCkrCiAgICAgICAgICAgICAgICAgICAgICAgICAgIikgLT4g
IisgdG9IZXhTdHJpbmcodGFibGUuaGFzaENvZGUoKSkgKyI6ICIrdGFibGUuZ2V0Q2xhc3MoKS5n
ZXROYW1lKCkpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBT
eXN0ZW0uZXJyLnByaW50bG4oZ2V0VGhyZWFkTmFtZSgpICsgIjogR0xDb250ZXh0IEdMIFByb2NB
ZGRyZXNzVGFibGUgcmV1c2luZyBrZXkoIitjb250ZXh0RlFOKyIgLSAiICsgR0xDb250ZXh0Lmdl
dEdMVmVyc2lvbihtYWpvciwgbWlub3IsIGN0eFByb2ZpbGVCaXRzLCBudWxsKSsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAiKSAtPiAiKyB0b0hleFN0cmluZyh0YWJsZS5oYXNoQ29kZSgpKSAr
IjogIit0YWJsZS5nZXRDbGFzcygpLmdldE5hbWUoKSsiIC0+ICIrZ2xwLmdldEdMSW1wbEJhc2VD
bGFzc05hbWUoKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICBnbFByb2NBZGRyZXNzVGFibGUgPSAoUHJvY0FkZHJlc3NUYWJsZSkg
Y3JlYXRlSW5zdGFuY2UoYWRldmljZSwgbWFqb3IsIG1pbm9yLCBjdHhQcm9maWxlQml0cywgZmFs
c2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyBuZXcgR0xQcm9jQWRkcmVzc1Jlc29sdmVyKCkg
fSApOwogICAgICAgICAgICByZXNldFByb2NBZGRyZXNzVGFibGUoZ2xQcm9jQWRkcmVzc1RhYmxl
LCBkeW5hbWljTG9va3VwKTsKCiAgICAgICAgICAgIHN5bmNocm9uaXplZChtYXBwZWRDb250ZXh0
VHlwZU9iamVjdExvY2spIHsKICAgICAgICAgICAgICAgIG1hcHBlZEdMUHJvY0FkZHJlc3MucHV0
KGNvbnRleHRGUU4sIGdsUHJvY0FkZHJlc3NUYWJsZSk7CiAgICAgICAgICAgICAgICBpZihERUJV
RykgewogICAgICAgICAgICAgICAgICAgIGlmKCB3aXRoaW5HTFZlcnNpb25zTWFwcGluZyApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGdldFRocmVhZE5hbWUo
KSArICI6IEdMQ29udGV4dCBHTCBQcm9jQWRkcmVzc1RhYmxlIG1hcHBpbmcga2V5KCIrY29udGV4
dEZRTisiIC0gIiArIEdMQ29udGV4dC5nZXRHTFZlcnNpb24obWFqb3IsIG1pbm9yLCBjdHhQcm9m
aWxlQml0cywgbnVsbCkrCiAgICAgICAgICAgICAgICAgICAgICAgICAgIikgLT4gIit0b0hleFN0
cmluZyhnbFByb2NBZGRyZXNzVGFibGUuaGFzaENvZGUoKSkgKyI6ICIrZ2xQcm9jQWRkcmVzc1Rh
YmxlLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oZ2V0VGhyZWFkTmFtZSgp
ICsgIjogR0xDb250ZXh0IEdMIFByb2NBZGRyZXNzVGFibGUgbWFwcGluZyBrZXkoIitjb250ZXh0
RlFOKyIgLSAiICsgR0xDb250ZXh0LmdldEdMVmVyc2lvbihtYWpvciwgbWlub3IsIGN0eFByb2Zp
bGVCaXRzLCBudWxsKSsKICAgICAgICAgICAgICAgICAgICAgICAgICAiKSAtPiAiK3RvSGV4U3Ry
aW5nKGdsUHJvY0FkZHJlc3NUYWJsZS5oYXNoQ29kZSgpKSArIjogIitnbFByb2NBZGRyZXNzVGFi
bGUuZ2V0Q2xhc3MoKS5nZXROYW1lKCkrIiAtPiAiK2dscC5nZXRHTEltcGxCYXNlQ2xhc3NOYW1l
KCkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
fQogICAgICAgIH0KCiAgICAgICAgaWYoIG51bGwgPT0gdGhpcy5nbCB8fCAhdmVyaWZ5SW5zdGFu
Y2UoYWRldmljZSwgbWFqb3IsIG1pbm9yLCBjdHhQcm9maWxlQml0cywgIkltcGwiLCB0aGlzLmds
KSApIHsKICAgICAgICAgICAgc2V0R0woIGNyZWF0ZUdMKCBhZGV2aWNlLCBtYWpvciwgbWlub3Is
IGN0eFByb2ZpbGVCaXRzICkgKTsKICAgICAgICB9CiAgICAgICAgaWYoICF3aXRoaW5HTFZlcnNp
b25zTWFwcGluZyAmJiAhdmVyaWZ5SW5zdGFuY2UoZ2xwLCAiSW1wbCIsIHRoaXMuZ2wpICkgewog
ICAgICAgICAgICB0aHJvdyBuZXcgR0xFeGNlcHRpb24oIkdMQ29udGV4dCBHTCBPYmplY3QgbWlz
bWF0Y2g6ICIrR0xDb250ZXh0LmdldEdMVmVyc2lvbihtYWpvciwgbWlub3IsIGN0eFByb2ZpbGVC
aXRzLCBudWxsKSsKICAgICAgICAgICAgICAgICAgICAiKSAtPiAiKyI6ICIrdGhpcy5nbC5nZXRD
bGFzcygpLmdldE5hbWUoKSsiIG5vdCBtYXRjaGluZyAiK2dscC5nZXRHTEltcGxCYXNlQ2xhc3NO
YW1lKCkrIi8iK2dscCk7CiAgICAgICAgfQogICAgfQoKICAgIC8vCiAgICAvLyBVcGRhdGUgRXh0
ZW5zaW9uQXZhaWxhYmlsaXR5Q2FjaGUKICAgIC8vCiAgICB7CiAgICAgICAgRXh0ZW5zaW9uQXZh
aWxhYmlsaXR5Q2FjaGUgZUNhY2hlOwogICAgICAgIHN5bmNocm9uaXplZChtYXBwZWRDb250ZXh0
VHlwZU9iamVjdExvY2spIHsKICAgICAgICAgICAgZUNhY2hlID0gbWFwcGVkRXh0ZW5zaW9uQXZh
aWxhYmlsaXR5Q2FjaGUuZ2V0KCBjb250ZXh0RlFOICk7CiAgICAgICAgfQogICAgICAgIGlmKG51
bGwgIT0gIGVDYWNoZSkgewogICAgICAgICAgICBleHRlbnNpb25BdmFpbGFiaWxpdHkgPSBlQ2Fj
aGU7CiAgICAgICAgICAgIGlmKERFQlVHKSB7CiAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnBy
aW50bG4oZ2V0VGhyZWFkTmFtZSgpICsgIjogR0xDb250ZXh0IEdMIEV4dGVuc2lvbkF2YWlsYWJp
bGl0eUNhY2hlIHJldXNpbmcga2V5KCIrY29udGV4dEZRTisiKSAtPiAiK3RvSGV4U3RyaW5nKGVD
YWNoZS5oYXNoQ29kZSgpKSArICIgLSBlbnRyaWVzOiAiK2VDYWNoZS5nZXRUb3RhbEV4dGVuc2lv
bkNvdW50KCkpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZXh0
ZW5zaW9uQXZhaWxhYmlsaXR5ID0gbmV3IEV4dGVuc2lvbkF2YWlsYWJpbGl0eUNhY2hlKCk7CiAg
ICAgICAgICAgIHNldENvbnRleHRWZXJzaW9uKG1ham9yLCBtaW5vciwgY3R4UHJvZmlsZUJpdHMs
IHZlbmRvclZlcnNpb24sIGZhbHNlKTsgLy8gcHJlLXNldCBvZiBHTCB2ZXJzaW9uLCByZXF1aXJl
ZCBmb3IgZXh0ZW5zaW9uIGNhY2hlIHVzYWdlCiAgICAgICAgICAgIGV4dGVuc2lvbkF2YWlsYWJp
bGl0eS5yZXNldCh0aGlzKTsKICAgICAgICAgICAgc3luY2hyb25pemVkKG1hcHBlZENvbnRleHRU
eXBlT2JqZWN0TG9jaykgewogICAgICAgICAgICAgICAgbWFwcGVkRXh0ZW5zaW9uQXZhaWxhYmls
aXR5Q2FjaGUucHV0KGNvbnRleHRGUU4sIGV4dGVuc2lvbkF2YWlsYWJpbGl0eSk7CiAgICAgICAg
ICAgICAgICBpZihERUJVRykgewogICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRs
bihnZXRUaHJlYWROYW1lKCkgKyAiOiBHTENvbnRleHQgR0wgRXh0ZW5zaW9uQXZhaWxhYmlsaXR5
Q2FjaGUgbWFwcGluZyBrZXkoIitjb250ZXh0RlFOKyIpIC0+ICIrdG9IZXhTdHJpbmcoZXh0ZW5z
aW9uQXZhaWxhYmlsaXR5Lmhhc2hDb2RlKCkpICsgIiAtIGVudHJpZXM6ICIrZXh0ZW5zaW9uQXZh
aWxhYmlsaXR5LmdldFRvdGFsRXh0ZW5zaW9uQ291bnQoKSk7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaWYoIGlzRVMgKSB7CiAgICAgICAgaWYo
IG1ham9yID49IDMgKSB7CiAgICAgICAgICAgIGN0eFByb2ZpbGVCaXRzIHw9IENUWF9JTVBMX0VT
M19DT01QQVQgfCBDVFhfSU1QTF9FUzJfQ09NUEFUIDsKICAgICAgICAgICAgY3R4UHJvZmlsZUJp
dHMgfD0gQ1RYX0lNUExfRkJPOwogICAgICAgICAgICBpZiggbWlub3IgPj0gMiApIHsKICAgICAg
ICAgICAgICAgIGN0eFByb2ZpbGVCaXRzIHw9IENUWF9JTVBMX0VTMzJfQ09NUEFUIHwgQ1RYX0lN
UExfRVMzMV9DT01QQVQ7CiAgICAgICAgICAgIH0gZWxzZSBpZiggbWlub3IgPj0gMSApIHsKICAg
ICAgICAgICAgICAgIGN0eFByb2ZpbGVCaXRzIHw9IENUWF9JTVBMX0VTMzFfQ09NUEFUOwogICAg
ICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmKCBtYWpvciA+PSAyICkgewogICAgICAgICAgICBj
dHhQcm9maWxlQml0cyB8PSBDVFhfSU1QTF9FUzJfQ09NUEFUOwogICAgICAgICAgICBjdHhQcm9m
aWxlQml0cyB8PSBDVFhfSU1QTF9GQk87CiAgICAgICAgfQogICAgfSBlbHNlIGlmKCAoIG1ham9y
ID4gNCB8fCBtYWpvciA9PSA0ICYmIG1pbm9yID49IDUgKSB8fAogICAgICAgICAgICAgICAoIG1h
am9yID4gMyB8fCBtYWpvciA9PSAzICYmIG1pbm9yID49IDEgKSApIHsKICAgICAgICAvLyBTZWUg
R0xDb250ZXh0LmlzR0xFUzMxQ29tcGF0aWJsZUF2YWlsYWJsZSguLikvaXNHTEVTM1sxMl1Db21w
YXRpYmxlKCkKICAgICAgICAvLyAgIEluY2x1ZGVzIFsgR0wgJmdlOyA0LjUsIEdMICZnZTsgMy4x
IHcvIEdMX0FSQl9FUzNfWzEyXV9jb21wYXRpYmlsaXR5IGFuZCBHTEVTICZnZTsgMy5bMTJdIF0K
ICAgICAgICBpZiggaXNFeHRlbnNpb25BdmFpbGFibGUoIEdMRXh0ZW5zaW9ucy5BUkJfRVMzXzJf
Y29tcGF0aWJpbGl0eSApICkgewogICAgICAgICAgICBjdHhQcm9maWxlQml0cyB8PSBDVFhfSU1Q
TF9FUzMyX0NPTVBBVCB8IENUWF9JTVBMX0VTMzFfQ09NUEFUOwogICAgICAgIH0gZWxzZSBpZigg
aXNFeHRlbnNpb25BdmFpbGFibGUoIEdMRXh0ZW5zaW9ucy5BUkJfRVMzXzFfY29tcGF0aWJpbGl0
eSApICkgewogICAgICAgICAgICBjdHhQcm9maWxlQml0cyB8PSBDVFhfSU1QTF9FUzMxX0NPTVBB
VDsKICAgICAgICB9CiAgICAgICAgY3R4UHJvZmlsZUJpdHMgfD0gQ1RYX0lNUExfRVMzX0NPTVBB
VCB8IENUWF9JTVBMX0VTMl9DT01QQVQ7CiAgICAgICAgY3R4UHJvZmlsZUJpdHMgfD0gQ1RYX0lN
UExfRkJPOwogICAgfSBlbHNlIGlmKCAoIG1ham9yID4gNCB8fCBtYWpvciA9PSA0ICYmIG1pbm9y
ID49IDMgKSB8fAogICAgICAgICAgICAgICAoICggbWFqb3IgPiAzIHx8IG1ham9yID09IDMgJiYg
bWlub3IgPj0gMSApICYmIGlzRXh0ZW5zaW9uQXZhaWxhYmxlKCBHTEV4dGVuc2lvbnMuQVJCX0VT
M19jb21wYXRpYmlsaXR5ICkgKSApIHsKICAgICAgICAvLyBTZWUgR0xDb250ZXh0LmlzR0xFUzND
b21wYXRpYmxlQXZhaWxhYmxlKC4uKS9pc0dMRVMzQ29tcGF0aWJsZSgpCiAgICAgICAgLy8gICBJ
bmNsdWRlcyBbIEdMICZnZTsgNC4zLCBHTCAmZ2U7IDMuMSB3LyBHTF9BUkJfRVMzX2NvbXBhdGli
aWxpdHkgYW5kIEdMRVMzIF0KICAgICAgICBjdHhQcm9maWxlQml0cyB8PSBDVFhfSU1QTF9FUzNf
Q09NUEFUIHwgQ1RYX0lNUExfRVMyX0NPTVBBVCA7CiAgICAgICAgY3R4UHJvZmlsZUJpdHMgfD0g
Q1RYX0lNUExfRkJPOwogICAgfSBlbHNlIGlmKCBpc0V4dGVuc2lvbkF2YWlsYWJsZSggR0xFeHRl
bnNpb25zLkFSQl9FUzJfY29tcGF0aWJpbGl0eSApICkgewogICAgICAgIGN0eFByb2ZpbGVCaXRz
IHw9IENUWF9JTVBMX0VTMl9DT01QQVQ7CiAgICAgICAgY3R4UHJvZmlsZUJpdHMgfD0gQ1RYX0lN
UExfRkJPOwogICAgfSBlbHNlIGlmKCBoYXNGQk9JbXBsKG1ham9yLCBjdHhQcm9maWxlQml0cywg
ZXh0ZW5zaW9uQXZhaWxhYmlsaXR5KSApIHsKICAgICAgICBjdHhQcm9maWxlQml0cyB8PSBDVFhf
SU1QTF9GQk87CiAgICB9CgogICAgaWYoICggaXNFUyAmJiBtYWpvciA9PSAxICkgfHwgIGlzRXh0
ZW5zaW9uQXZhaWxhYmxlKEdMRXh0ZW5zaW9ucy5PRVNfc2luZ2xlX3ByZWNpc2lvbikgKSB7CiAg
ICAgICAgY3R4UHJvZmlsZUJpdHMgfD0gQ1RYX0lNUExfRlAzMl9DT01QQVRfQVBJOwogICAgfQoK
ICAgIGlmKEZPUkNFX05PX0ZCT19TVVBQT1JUKSB7CiAgICAgICAgY3R4UHJvZmlsZUJpdHMgJj0g
fkNUWF9JTVBMX0ZCTyA7CiAgICB9CgogICAgLy8KICAgIC8vIFNldCBHTCBWZXJzaW9uIChjb21w
bGV0ZSB3LyB2ZXJzaW9uIHN0cmluZykKICAgIC8vCiAgICBzZXRDb250ZXh0VmVyc2lvbihtYWpv
ciwgbWlub3IsIGN0eFByb2ZpbGVCaXRzLCB2ZW5kb3JWZXJzaW9uLCB0cnVlKTsKCiAgICBmaW5h
bGl6ZUluaXQoZ2wpOwoKICAgIHNldERlZmF1bHRTd2FwSW50ZXJ2YWwoKTsKCiAgICBmaW5hbCBp
bnQgZ2xFcnJYID0gZ2wuZ2xHZXRFcnJvcigpOyAvLyBjbGVhciBHTCBlcnJvciwgbWF5YmUgY2F1
c2VkIGJ5IGFib3ZlIG9wZXJhdGlvbnMKCiAgICBpZihERUJVRykgewogICAgICAgIFN5c3RlbS5l
cnIucHJpbnRsbihnZXRUaHJlYWROYW1lKCkgKyAiOiBHTENvbnRleHQuc2V0R0xGdW5jQXZhaWwu
WDogT0sgIitjb250ZXh0RlFOKyIgLSAiK0dMQ29udGV4dC5nZXRHTFZlcnNpb24oY3R4VmVyc2lv
bi5nZXRNYWpvcigpLCBjdHhWZXJzaW9uLmdldE1pbm9yKCksIGN0eE9wdGlvbnMsIG51bGwpKyIg
LSBnbEVyciAiK3RvSGV4U3RyaW5nKGdsRXJyWCkpOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAg
fQoKICBwcml2YXRlIHN0YXRpYyBmaW5hbCB2b2lkIGFkZFN0aWNreVF1aXJrQWx3YXlzKGZpbmFs
IEFic3RyYWN0R3JhcGhpY3NEZXZpY2UgYWRldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIEdMUmVuZGVyZXJRdWlya3MgcXVpcmtzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50
IHF1aXJrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmluYWwgYm9vbGVhbiB3aXRoaW5HTFZlcnNpb25zTWFwcGluZykgewogICAgICAgIHF1aXJrcy5h
ZGRRdWlyayggcXVpcmsgKTsKICAgICAgICBpZiggd2l0aGluR0xWZXJzaW9uc01hcHBpbmcgKSB7
CiAgICAgICAgICAgIC8vIFRocmVhZCBzYWZlIGR1ZSB0byBzaW5nbGUgdGhyZWFkZWQgaW5pdGlh
bGl6YXRpb24hCiAgICAgICAgICAgIEdMUmVuZGVyZXJRdWlya3MuYWRkU3RpY2t5RGV2aWNlUXVp
cmsoYWRldmljZSwgcXVpcmspOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIEZJWE1F
OiBSZW1vdmUgd2hlbiBtb3ZpbmcgRUdML0VTIHRvIEFSQiBjdHggY3JlYXRpb24KICAgICAgICAg
ICAgc3luY2hyb25pemVkKEdMQ29udGV4dEltcGwuY2xhc3MpIHsKICAgICAgICAgICAgICAgIEdM
UmVuZGVyZXJRdWlya3MuYWRkU3RpY2t5RGV2aWNlUXVpcmsoYWRldmljZSwgcXVpcmspOwogICAg
ICAgICAgICB9CiAgICAgICAgfQogIH0KICBwcml2YXRlIHN0YXRpYyBmaW5hbCB2b2lkIGFkZFN0
aWNreVF1aXJrQXRNYXBwaW5nKGZpbmFsIEFic3RyYWN0R3JhcGhpY3NEZXZpY2UgYWRldmljZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFs
IEdMUmVuZGVyZXJRdWlya3MgcXVpcmtzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IHF1aXJrLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiB3aXRoaW5HTFZl
cnNpb25zTWFwcGluZykgewogICAgICAgIHF1aXJrcy5hZGRRdWlyayggcXVpcmsgKTsKICAgICAg
ICBpZiggd2l0aGluR0xWZXJzaW9uc01hcHBpbmcgKSB7CiAgICAgICAgICAgIC8vIFRocmVhZCBz
YWZlIGR1ZSB0byBzaW5nbGUgdGhyZWFkZWQgaW5pdGlhbGl6YXRpb24hCiAgICAgICAgICAgIEdM
UmVuZGVyZXJRdWlya3MuYWRkU3RpY2t5RGV2aWNlUXVpcmsoYWRldmljZSwgcXVpcmspOwogICAg
ICAgIH0KICB9CiAgcHJpdmF0ZSBmaW5hbCB2b2lkIHNldFJlbmRlcmVyUXVpcmtzKGZpbmFsIEFi
c3RyYWN0R3JhcGhpY3NEZXZpY2UgYWRldmljZSwgZmluYWwgR0xEcmF3YWJsZUZhY3RvcnlJbXBs
IGZhY3RvcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGlu
dCByZXFNYWpvciwgZmluYWwgaW50IHJlcU1pbm9yLCBmaW5hbCBpbnQgcmVxQ1RQLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbWFqb3IsIGZpbmFsIGlu
dCBtaW5vciwgZmluYWwgaW50IGN0cCwgZmluYWwgVmVyc2lvbk51bWJlclN0cmluZyB2ZW5kb3JW
ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29s
ZWFuIHdpdGhpbkdMVmVyc2lvbnNNYXBwaW5nKSB7CiAgICBmaW5hbCBTdHJpbmcgTWVzYVNQID0g
Ik1lc2EgIjsKICAgIC8vIGZpbmFsIFN0cmluZyBNZXNhUmVuZGVyZXJBTURzcCA9ICIgQU1EICI7
CiAgICBmaW5hbCBTdHJpbmcgTWVzYVJlbmRlcmVySW50ZWxzcCA9ICJJbnRlbChSKSI7CiAgICBm
aW5hbCBib29sZWFuIGh3QWNjZWwgPSAwID09ICggY3RwICYgR0xDb250ZXh0LkNUWF9JTVBMX0FD
Q0VMX1NPRlQgKTsKICAgIGZpbmFsIGJvb2xlYW4gY29tcGF0Q3R4ID0gMCAhPSAoIGN0cCAmIEdM
Q29udGV4dC5DVFhfUFJPRklMRV9DT01QQVQgKTsKICAgIGZpbmFsIGJvb2xlYW4gaXNFUyA9IDAg
IT0gKCBjdHAgJiBHTENvbnRleHQuQ1RYX1BST0ZJTEVfRVMgKTsKICAgIGZpbmFsIGJvb2xlYW4g
aXNYMTEgPSBOYXRpdmVXaW5kb3dGYWN0b3J5LlRZUEVfWDExID09IE5hdGl2ZVdpbmRvd0ZhY3Rv
cnkuZ2V0TmF0aXZlV2luZG93VHlwZSh0cnVlKTsKICAgIGZpbmFsIGJvb2xlYW4gaXNXaW5kb3dz
ID0gUGxhdGZvcm0uZ2V0T1NUeXBlKCkgPT0gUGxhdGZvcm0uT1NUeXBlLldJTkRPV1M7CiAgICBm
aW5hbCBib29sZWFuIGlzRHJpdmVyTWVzYSA9IGdsUmVuZGVyZXIuY29udGFpbnMoTWVzYVNQKSB8
fCBnbFJlbmRlcmVyLmNvbnRhaW5zKCJHYWxsaXVtICIpIHx8IGdsVmVyc2lvbi5jb250YWlucyhN
ZXNhU1ApOwoKICAgIGZpbmFsIGJvb2xlYW4gaXNEcml2ZXJBVElDYXRhbHlzdDsKICAgIGZpbmFs
IGJvb2xlYW4gaXNEcml2ZXJOVklESUFHZUZvcmNlOwogICAgZmluYWwgYm9vbGVhbiBpc0RyaXZl
ckludGVsOwogICAgaWYoICFpc0RyaXZlck1lc2EgKSB7CiAgICAgICAgaXNEcml2ZXJBVElDYXRh
bHlzdCA9IGdsVmVuZG9yLmNvbnRhaW5zKCJBVEkgVGVjaG5vbG9naWVzIikgfHwgZ2xSZW5kZXJl
ci5zdGFydHNXaXRoKCJBVEkgIik7CiAgICAgICAgaXNEcml2ZXJOVklESUFHZUZvcmNlID0gZ2xW
ZW5kb3IuY29udGFpbnMoIk5WSURJQSBDb3Jwb3JhdGlvbiIpIHx8IGdsUmVuZGVyZXIuY29udGFp
bnMoIk5WSURJQSAiKTsKICAgICAgICBpc0RyaXZlckludGVsID0gZ2xWZW5kb3Iuc3RhcnRzV2l0
aCgiSW50ZWwiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgaXNEcml2ZXJBVElDYXRhbHlzdCA9IGZh
bHNlOwogICAgICAgIGlzRHJpdmVyTlZJRElBR2VGb3JjZSA9IGZhbHNlOwogICAgICAgIGlzRHJp
dmVySW50ZWwgPSBmYWxzZTsKICAgIH0KCiAgICBmaW5hbCBHTFJlbmRlcmVyUXVpcmtzIHF1aXJr
cyA9IG5ldyBHTFJlbmRlcmVyUXVpcmtzKCk7CgogICAgLy8KICAgIC8vIEdlbmVyYWwgUXVpcmtz
CiAgICAvLwogICAgaWYoIGlzRVMgKSB7CiAgICAgICAgaWYoIDIgPT0gcmVxTWFqb3IgJiYgMiA8
IG1ham9yICkgewogICAgICAgICAgICBmaW5hbCBpbnQgcXVpcmsgPSBHTFJlbmRlcmVyUXVpcmtz
LkdMRVMzVmlhRUdMRVMyQ29uZmlnOwogICAgICAgICAgICBpZihERUJVRykgewogICAgICAgICAg
ICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJRdWlyazogIitHTFJlbmRlcmVyUXVpcmtzLnRvU3Ry
aW5nKHF1aXJrKSsiOiBjYXVzZTogRVMgcmVxICIrcmVxTWFqb3IrIiBhbmQgMiA8ICIrbWFqb3Ip
OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGFkZFN0aWNreVF1aXJrQWx3YXlzKGFkZXZpY2Us
IHF1aXJrcywgcXVpcmssIHdpdGhpbkdMVmVyc2lvbnNNYXBwaW5nKTsKICAgICAgICB9CiAgICB9
CiAgICBpZiggR0xQcm9maWxlLmRpc2FibGVTdXJmYWNlbGVzc0NvbnRleHQgKSB7CiAgICAgICAg
ZmluYWwgaW50IHF1aXJrID0gR0xSZW5kZXJlclF1aXJrcy5Ob1N1cmZhY2VsZXNzQ3R4OwogICAg
ICAgIGlmKERFQlVHKSB7CiAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiUXVpcms6ICIr
R0xSZW5kZXJlclF1aXJrcy50b1N0cmluZyhxdWlyaykrIjogY2F1c2U6IGRpc2FibGVkIik7CiAg
ICAgICAgfQogICAgICAgIGFkZFN0aWNreVF1aXJrQWx3YXlzKGFkZXZpY2UsIHF1aXJrcywgcXVp
cmssIHdpdGhpbkdMVmVyc2lvbnNNYXBwaW5nKTsKICAgIH0KICAgIGlmKCBHTFByb2ZpbGUuZGlz
YWJsZU9wZW5HTEFSQkNvbnRleHQgKSB7CiAgICAgICAgZmluYWwgaW50IHF1aXJrID0gR0xSZW5k
ZXJlclF1aXJrcy5Ob0FSQkNyZWF0ZUNvbnRleHQ7CiAgICAgICAgaWYoREVCVUcpIHsKICAgICAg
ICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJRdWlyazogIitHTFJlbmRlcmVyUXVpcmtzLnRvU3Ry
aW5nKHF1aXJrKSsiOiBjYXVzZTogZGlzYWJsZWQiKTsKICAgICAgICB9CiAgICAgICAgYWRkU3Rp
Y2t5UXVpcmtBbHdheXMoYWRldmljZSwgcXVpcmtzLCBxdWlyaywgd2l0aGluR0xWZXJzaW9uc01h
cHBpbmcpOwogICAgfQoKICAgIC8vCiAgICAvLyBPUyByZWxhdGVkIHF1aXJrcwogICAgLy8KICAg
IGlmKCBQbGF0Zm9ybS5nZXRPU1R5cGUoKSA9PSBQbGF0Zm9ybS5PU1R5cGUuTUFDT1MgKSB7CiAg
ICAgICAgLy8KICAgICAgICAvLyBPU1gKICAgICAgICAvLwogICAgICAgIHsKICAgICAgICAgICAg
ZmluYWwgaW50IHF1aXJrID0gR0xSZW5kZXJlclF1aXJrcy5Ob09mZnNjcmVlbkJpdG1hcDsKICAg
ICAgICAgICAgaWYoREVCVUcpIHsKICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigi
UXVpcms6ICIrR0xSZW5kZXJlclF1aXJrcy50b1N0cmluZyhxdWlyaykrIjogY2F1c2U6IE9TICIr
UGxhdGZvcm0uZ2V0T1NUeXBlKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHF1aXJrcy5h
ZGRRdWlyayggcXVpcmsgKTsKICAgICAgICB9CiAgICAgICAgewogICAgICAgICAgICBmaW5hbCBp
bnQgcXVpcmsgPSBHTFJlbmRlcmVyUXVpcmtzLk5lZWRTaGFyZWRPYmplY3RTeW5jOwogICAgICAg
ICAgICBpZihERUJVRykgewogICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJRdWly
azogIitHTFJlbmRlcmVyUXVpcmtzLnRvU3RyaW5nKHF1aXJrKSsiOiBjYXVzZTogT1MgIitQbGF0
Zm9ybS5nZXRPU1R5cGUoKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcXVpcmtzLmFkZFF1
aXJrKCBxdWlyayApOwogICAgICAgIH0KICAgICAgICBpZiggUGxhdGZvcm0uZ2V0T1NWZXJzaW9u
TnVtYmVyKCkuY29tcGFyZVRvKFBsYXRmb3JtLk9TWFZlcnNpb24uTWF2ZXJpY2tzKSA+PSAwICYm
IDM9PXJlcU1ham9yICYmIDQ9PW1ham9yICkgewogICAgICAgICAgICBmaW5hbCBpbnQgcXVpcmsg
PSBHTFJlbmRlcmVyUXVpcmtzLkdMNE5lZWRzR0wzUmVxdWVzdDsKICAgICAgICAgICAgaWYoREVC
VUcpIHsKICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiUXVpcms6ICIrR0xSZW5k
ZXJlclF1aXJrcy50b1N0cmluZyhxdWlyaykrIjogY2F1c2U6IE9TICIrUGxhdGZvcm0uZ2V0T1NU
eXBlKCkrIiwgT1MgVmVyc2lvbiAiK1BsYXRmb3JtLmdldE9TVmVyc2lvbk51bWJlcigpKyIsIHJl
cSAiK3JlcU1ham9yKyIuIityZXFNaW5vcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYWRk
U3RpY2t5UXVpcmtBdE1hcHBpbmcoYWRldmljZSwgcXVpcmtzLCBxdWlyaywgd2l0aGluR0xWZXJz
aW9uc01hcHBpbmcpOwogICAgICAgIH0KICAgICAgICBpZiggaXNEcml2ZXJOVklESUFHZUZvcmNl
ICkgewogICAgICAgICAgICBmaW5hbCBWZXJzaW9uTnVtYmVyIG9zeFZlcnNpb25OVkZsdXNoQ2xl
YW4gPSBuZXcgVmVyc2lvbk51bWJlcigxMCw3LDMpOyAvLyA8IE9TWCAxMC43LjMgdy8gTlYgbmVl
ZHMgZ2xGbHVzaAogICAgICAgICAgICBpZiggUGxhdGZvcm0uZ2V0T1NWZXJzaW9uTnVtYmVyKCku
Y29tcGFyZVRvKG9zeFZlcnNpb25OVkZsdXNoQ2xlYW4pIDwgMCApIHsKICAgICAgICAgICAgICAg
IGZpbmFsIGludCBxdWlyayA9IEdMUmVuZGVyZXJRdWlya3MuR0xGbHVzaEJlZm9yZVJlbGVhc2U7
CiAgICAgICAgICAgICAgICBpZihERUJVRykgewogICAgICAgICAgICAgICAgICAgIFN5c3RlbS5l
cnIucHJpbnRsbigiUXVpcms6ICIrR0xSZW5kZXJlclF1aXJrcy50b1N0cmluZyhxdWlyaykrIjog
Y2F1c2U6IE9TICIrUGxhdGZvcm0uZ2V0T1NUeXBlKCkrIiwgT1MgVmVyc2lvbiAiK1BsYXRmb3Jt
LmdldE9TVmVyc2lvbk51bWJlcigpKyIsIFJlbmRlcmVyICIrZ2xSZW5kZXJlcik7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICBxdWlya3MuYWRkUXVpcmsoIHF1aXJrICk7CiAgICAg
ICAgICAgIH0KICAgICAgICAgICAgaWYoIFBsYXRmb3JtLmdldE9TVmVyc2lvbk51bWJlcigpLmNv
bXBhcmVUbyhQbGF0Zm9ybS5PU1hWZXJzaW9uLkxpb24pIDwgMCApIHsgLy8gPCBPU1ggMTAuNy4w
IHcvIE5WIGhhcyB1bnN0YWJsZSBHTFNMCiAgICAgICAgICAgICAgICBmaW5hbCBpbnQgcXVpcmsg
PSBHTFJlbmRlcmVyUXVpcmtzLkdMU0xOb25Db21wbGlhbnQ7CiAgICAgICAgICAgICAgICBpZihE
RUJVRykgewogICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiUXVpcms6ICIr
R0xSZW5kZXJlclF1aXJrcy50b1N0cmluZyhxdWlyaykrIjogY2F1c2U6IE9TICIrUGxhdGZvcm0u
Z2V0T1NUeXBlKCkrIiwgT1MgVmVyc2lvbiAiK1BsYXRmb3JtLmdldE9TVmVyc2lvbk51bWJlcigp
KyIsIFJlbmRlcmVyICIrZ2xSZW5kZXJlcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICBxdWlya3MuYWRkUXVpcmsoIHF1aXJrICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICB9IGVsc2UgaWYoIGlzV2luZG93cyApIHsKICAgICAgICAvLwogICAgICAgIC8vIFdJTkRPV1MK
ICAgICAgICAvLwogICAgICAgIHsKICAgICAgICAgICAgZmluYWwgaW50IHF1aXJrID0gR0xSZW5k
ZXJlclF1aXJrcy5Ob0RvdWJsZUJ1ZmZlcmVkQml0bWFwOwogICAgICAgICAgICBpZihERUJVRykg
ewogICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJRdWlyazogIitHTFJlbmRlcmVy
UXVpcmtzLnRvU3RyaW5nKHF1aXJrKSsiOiBjYXVzZTogT1MgIitQbGF0Zm9ybS5nZXRPU1R5cGUo
KSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcXVpcmtzLmFkZFF1aXJrKCBxdWlyayApOwog
ICAgICAgIH0KCiAgICAgICAgaWYoIGlzRHJpdmVyQVRJQ2F0YWx5c3QgKSB7CiAgICAgICAgICAg
IGZpbmFsIFZlcnNpb25OdW1iZXIgd2luWFBWZXJzaW9uTnVtYmVyID0gbmV3IFZlcnNpb25OdW1i
ZXIgKCA1LCAxLCAwKTsKICAgICAgICAgICAgZmluYWwgVmVyc2lvbk51bWJlciBhbWRTYWZlTW9i
aWxpdHlWZXJzaW9uID0gbmV3IFZlcnNpb25OdW1iZXIoMTIsIDEwMiwgMyk7CgogICAgICAgICAg
ICBpZiAoIHZlbmRvclZlcnNpb24uY29tcGFyZVRvKGFtZFNhZmVNb2JpbGl0eVZlcnNpb24pIDwg
MCApIHsgLy8gaW5jbHVkZXM6IHZlbmRvclZlcnNpb24uaXNaZXJvKCkKICAgICAgICAgICAgICAg
IGZpbmFsIGludCBxdWlyayA9IEdMUmVuZGVyZXJRdWlya3MuTmVlZEN1cnJDdHg0QVJCQ3JlYXRl
Q29udGV4dDsKICAgICAgICAgICAgICAgIGlmKERFQlVHKSB7CiAgICAgICAgICAgICAgICAgICAg
U3lzdGVtLmVyci5wcmludGxuKCJRdWlyazogIitHTFJlbmRlcmVyUXVpcmtzLnRvU3RyaW5nKHF1
aXJrKSsiOiBjYXVzZTogT1MgIitQbGF0Zm9ybS5nZXRPU1R5cGUoKSsiLCBbVmVuZG9yICIrZ2xW
ZW5kb3IrIiBvciBSZW5kZXJlciAiK2dsUmVuZGVyZXIrIl0sIGRyaXZlclZlcnNpb24gIit2ZW5k
b3JWZXJzaW9uKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHF1aXJrcy5hZGRR
dWlyayggcXVpcmsgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYoIFBsYXRmb3JtLmdl
dE9TVmVyc2lvbk51bWJlcigpLmNvbXBhcmVUbyh3aW5YUFZlcnNpb25OdW1iZXIpIDw9IDAgKSB7
CiAgICAgICAgICAgICAgICBmaW5hbCBpbnQgcXVpcmsgPSBHTFJlbmRlcmVyUXVpcmtzLk5lZWRD
dXJyQ3R4NEFSQlBpeEZtdFF1ZXJpZXM7CiAgICAgICAgICAgICAgICBpZihERUJVRykgewogICAg
ICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiUXVpcms6ICIrR0xSZW5kZXJlclF1
aXJrcy50b1N0cmluZyhxdWlyaykrIjogY2F1c2U6IE9TLVZlcnNpb24gIitQbGF0Zm9ybS5nZXRP
U1R5cGUoKSsiICIrUGxhdGZvcm0uZ2V0T1NWZXJzaW9uTnVtYmVyKCkrIiwgW1ZlbmRvciAiK2ds
VmVuZG9yKyIgb3IgUmVuZGVyZXIgIitnbFJlbmRlcmVyKyJdIik7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICBxdWlya3MuYWRkUXVpcmsoIHF1aXJrICk7CiAgICAgICAgICAgIH0K
CiAgICAgICAgICAgIGlmICggIHZlbmRvclZlcnNpb24uY29tcGFyZVRvKFZlcnNpb25OdW1iZXJT
dHJpbmcuemVyb1ZlcnNpb24pID09IDAgKSB7CiAgICAgICAgICAgICAgICBmaW5hbCBWZXJzaW9u
TnVtYmVyIGdsVmVyc2lvbk51bWJlciA9IG5ldyBWZXJzaW9uTnVtYmVyKGdsVmVyc2lvbik7CiAg
ICAgICAgICAgICAgICBpZiAoIGdsVmVyc2lvbk51bWJlci5nZXRTdWIoKSA8PSA4Nzg3ICYmIGds
UmVuZGVyZXIuZXF1YWxzKCJBVEkgUmFkZW9uIDMxMDAgR3JhcGhpY3MiKSApIHsgLy8gIm9sZCIg
ZHJpdmVyIC0+IHN1Yi1taW5vciA9IHZlbmRvciB2ZXJzaW9uCiAgICAgICAgICAgICAgICAgICAg
ZmluYWwgaW50IHF1aXJrID0gR0xSZW5kZXJlclF1aXJrcy5Ob0FSQkNyZWF0ZUNvbnRleHQ7CiAg
ICAgICAgICAgICAgICAgICAgaWYoREVCVUcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgU3lz
dGVtLmVyci5wcmludGxuKCJRdWlyazogIitHTFJlbmRlcmVyUXVpcmtzLnRvU3RyaW5nKHF1aXJr
KSsiOiBjYXVzZTogT1MgIitQbGF0Zm9ybS5nZXRPU1R5cGUoKSsiLCBbVmVuZG9yICIrZ2xWZW5k
b3IrIiwgUmVuZGVyZXIgIitnbFJlbmRlcmVyKyIgYW5kIFZlcnNpb24gIitnbFZlcnNpb24rIl0i
KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYWRkU3RpY2t5UXVp
cmtBdE1hcHBpbmcoYWRldmljZSwgcXVpcmtzLCBxdWlyaywgd2l0aGluR0xWZXJzaW9uc01hcHBp
bmcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmKCBp
c0RyaXZlckludGVsICYmIGdsUmVuZGVyZXIuZXF1YWxzKCJJbnRlbCBCZWFyIExha2UgQiIpICkg
ewogICAgICAgICAgCWZpbmFsIGludCBxdWlyayA9IEdMUmVuZGVyZXJRdWlya3MuTm9QQnVmZmVy
V2l0aEFjY3VtOwogICAgICAgICAgCWlmKERFQlVHKSB7CiAgICAgICAgICAgICAgICBTeXN0ZW0u
ZXJyLnByaW50bG4oIlF1aXJrOiAiK0dMUmVuZGVyZXJRdWlya3MudG9TdHJpbmcocXVpcmspKyI6
IGNhdXNlOiBPUyAiK1BsYXRmb3JtLmdldE9TVHlwZSgpKyIsIFtWZW5kb3IgIitnbFZlbmRvcisi
IGFuZCBSZW5kZXJlciAiK2dsUmVuZGVyZXIrIl0iKTsKICAgICAgICAgICAgfQogICAgICAgICAg
IAlxdWlya3MuYWRkUXVpcmsoIHF1aXJrICk7CiAgICAgICAgfQogICAgfSBlbHNlIGlmKCBQbGF0
Zm9ybS5PU1R5cGUuQU5EUk9JRCA9PSBQbGF0Zm9ybS5nZXRPU1R5cGUoKSApIHsKICAgICAgICAv
LwogICAgICAgIC8vIEFORFJPSUQKICAgICAgICAvLwogICAgICAgIC8vIFJlbmRlcmVyIHJlbGF0
ZWQgcXVpcmtzLCBtYXkgYWxzbyBpbnZvbHZlIE9TCiAgICAgICAgaWYoIGdsUmVuZGVyZXIuY29u
dGFpbnMoIlBvd2VyVlIiKSApIHsKICAgICAgICAgICAgZmluYWwgaW50IHF1aXJrID0gR0xSZW5k
ZXJlclF1aXJrcy5Ob1NldFN3YXBJbnRlcnZhbDsKICAgICAgICAgICAgaWYoREVCVUcpIHsKICAg
ICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiUXVpcms6ICIrR0xSZW5kZXJlclF1aXJr
cy50b1N0cmluZyhxdWlyaykrIjogY2F1c2U6IE9TICIrUGxhdGZvcm0uZ2V0T1NUeXBlKCkgKyAi
LCBSZW5kZXJlciAiICsgZ2xSZW5kZXJlcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcXVp
cmtzLmFkZFF1aXJrKCBxdWlyayApOwogICAgICAgIH0KICAgICAgICBpZiggZ2xSZW5kZXJlci5j
b250YWlucygiSW1tZXJzaW9uLjE2IikgKSB7CiAgICAgICAgICAgIGZpbmFsIGludCBxdWlyayA9
IEdMUmVuZGVyZXJRdWlya3MuR0xTaGFyZWRDb250ZXh0QnVnZ3k7CiAgICAgICAgICAgIGlmKERF
QlVHKSB7CiAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlF1aXJrOiAiK0dMUmVu
ZGVyZXJRdWlya3MudG9TdHJpbmcocXVpcmspKyI6IGNhdXNlOiBPUyAiK1BsYXRmb3JtLmdldE9T
VHlwZSgpICsgIiwgUmVuZGVyZXIgIiArIGdsUmVuZGVyZXIpOwogICAgICAgICAgICB9CiAgICAg
ICAgICAgIHF1aXJrcy5hZGRRdWlyayggcXVpcmsgKTsKICAgICAgICB9CiAgICB9CgogICAgLy8K
ICAgIC8vIFdpbmRvd2luZyBUb29sa2l0IHJlbGF0ZWQgcXVpcmtzCiAgICAvLwogICAgaWYoIGlz
WDExICkgewogICAgICAgIC8vCiAgICAgICAgLy8gWDExCiAgICAgICAgLy8KICAgICAgICB7CiAg
ICAgICAgICAgIC8vCiAgICAgICAgICAgIC8vIFF1aXJrOiBEb250Q2xvc2VYMTFEaXNwbGF5CiAg
ICAgICAgICAgIC8vCiAgICAgICAgICAgIGZpbmFsIGludCBxdWlyayA9IEdMUmVuZGVyZXJRdWly
a3MuRG9udENsb3NlWDExRGlzcGxheTsKICAgICAgICAgICAgaWYoIGdsUmVuZGVyZXIuY29udGFp
bnMoTWVzYVNQKSApIHsKICAgICAgICAgICAgICAgIGlmICggZ2xSZW5kZXJlci5jb250YWlucygi
WDExIikgJiYgdmVuZG9yVmVyc2lvbi5jb21wYXJlVG8oVmVyc2lvbjhfMCkgPCAwICkgewogICAg
ICAgICAgICAgICAgICAgIGlmKERFQlVHKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN5c3Rl
bS5lcnIucHJpbnRsbigiUXVpcms6ICIrR0xSZW5kZXJlclF1aXJrcy50b1N0cmluZyhxdWlyaykr
IjogY2F1c2U6IFgxMSBSZW5kZXJlcj0iICsgZ2xSZW5kZXJlciArICIsIFZlcnNpb249W3ZlbmRv
ciAiICsgdmVuZG9yVmVyc2lvbiArICIsIEdMICIgKyBnbFZlcnNpb24rIl0iKTsKICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcXVpcmtzLmFkZFF1aXJrKCBxdWlyayAp
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYoIGlzRHJpdmVyQVRJQ2F0
YWx5c3QgKSB7CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYoREVCVUcp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJRdWlyazogIitH
TFJlbmRlcmVyUXVpcmtzLnRvU3RyaW5nKHF1aXJrKSsiOiBjYXVzZTogWDExIFJlbmRlcmVyPSIg
KyBnbFJlbmRlcmVyKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
cXVpcmtzLmFkZFF1aXJrKCBxdWlyayApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9
IGVsc2UgaWYoIGpvZ2FtcC5uYXRpdmV3aW5kb3cueDExLlgxMVV0aWwuZ2V0TWFya0FsbERpc3Bs
YXlzVW5jbG9zYWJsZSgpICkgewogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
IGlmKERFQlVHKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigi
UXVpcms6ICIrR0xSZW5kZXJlclF1aXJrcy50b1N0cmluZyhxdWlyaykrIjogY2F1c2U6IFgxMVV0
aWwgRG93bnN0cmVhbSIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICBxdWlya3MuYWRkUXVpcmsoIHF1aXJrICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgICAgaWYoIGlzRHJpdmVyTlZJRElBR2VGb3JjZSApIHsKICAgICAg
ICAgICAgLy8gQnVnIDEyMDA6IENyYXNoIG9uIEdOVS9MaW51eCB4ODZfNjQgJ05WaWRpYSBiZXRh
IGRyaXZlciAzNTUuMDYnIEAgcHJvYmVTdXJmYWNlbGVzc0N0eAogICAgICAgICAgICAvLyBmaW5h
bCBWZXJzaW9uTnVtYmVyIG52U2FmZVZlcnNpb24gPSBuZXcgVmVyc2lvbk51bWJlcigzNTYsIDAs
IDApOyAvLyBGSVhNRTogQWRkIHNhZmUgdmVyc2lvbiEKICAgICAgICAgICAgaWYoICFpc0VTICYm
ICEoYWRldmljZSBpbnN0YW5jZW9mIEVHTEdyYXBoaWNzRGV2aWNlKSAvKiAmJiAgdmVuZG9yVmVy
c2lvbi5jb21wYXJlVG8obnZTYWZlVmVyc2lvbikgPCAwICovICkgewogICAgICAgICAgICAgICAg
ZmluYWwgaW50IHF1aXJrID0gR0xSZW5kZXJlclF1aXJrcy5Ob1N1cmZhY2VsZXNzQ3R4OwogICAg
ICAgICAgICAgICAgaWYoREVCVUcpIHsKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnBy
aW50KCJRdWlyazogIitHTFJlbmRlcmVyUXVpcmtzLnRvU3RyaW5nKHF1aXJrKSsiOiBjYXVzZTog
IUVTLCAhRUdMLCBWZW5kb3IgIiArIGdsVmVuZG9yICsiLCBYMTEgUmVuZGVyZXIgIiArIGdsUmVu
ZGVyZXIrIiwgVmVyc2lvbj1bdmVuZG9yICIgKyB2ZW5kb3JWZXJzaW9uICsgIiwgR0wgIiArIGds
VmVyc2lvbisiXSIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYWRkU3RpY2t5
UXVpcmtBdE1hcHBpbmcoYWRldmljZSwgcXVpcmtzLCBxdWlyaywgd2l0aGluR0xWZXJzaW9uc01h
cHBpbmcpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKCiAgICAvLwogICAgLy8gUkVO
REVSRVIgcmVsYXRlZCBxdWlya3MKICAgIC8vCiAgICBpZiggaXNEcml2ZXJNZXNhICkgewogICAg
ICAgIGZpbmFsIFZlcnNpb25OdW1iZXIgbWVzYVNhZmVGQk9WZXJzaW9uID0gbmV3IFZlcnNpb25O
dW1iZXIoOCwgMCwgMCk7CiAgICAgICAgZmluYWwgVmVyc2lvbk51bWJlciBtZXNhSW50ZWxCdWdn
eVNoYXJlZEN0eDkyMSA9IG5ldyBWZXJzaW9uTnVtYmVyKDksIDIsIDEpOwogICAgICAgIGZpbmFs
IFZlcnNpb25OdW1iZXIgbWVzYVNhZmVEb3VibGVCdWZmZXJlZFBCdWZmZXIgPSBuZXcgVmVyc2lv
bk51bWJlcigxOCwgMiwgMik7CiAgICAgICAgZmluYWwgVmVyc2lvbk51bWJlciBtZXNhU2FmZVNl
dFN3YXBJbnRlcnZhbFBvc3RSZXRhcmdldCA9IG5ldyBWZXJzaW9uTnVtYmVyKDE4LCAyLCAyKTsK
CiAgICAgICAgaWYoIHZlbmRvclZlcnNpb24uY29tcGFyZVRvKG1lc2FTYWZlU2V0U3dhcEludGVy
dmFsUG9zdFJldGFyZ2V0KSA8IDAgKSB7CiAgICAgICAgICAgIGZpbmFsIGludCBxdWlyayA9IEdM
UmVuZGVyZXJRdWlya3MuTm9TZXRTd2FwSW50ZXJ2YWxQb3N0UmV0YXJnZXQ7CiAgICAgICAgICAg
IGlmKERFQlVHKSB7CiAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlF1aXJrOiAi
K0dMUmVuZGVyZXJRdWlya3MudG9TdHJpbmcocXVpcmspKyI6IGNhdXNlOiBSZW5kZXJlciAiICsg
Z2xSZW5kZXJlcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcXVpcmtzLmFkZFF1aXJrKCBx
dWlyayApOwogICAgICAgIH0KICAgICAgICBpZiggaHdBY2NlbCApIHsKICAgICAgICAgICAgLy8g
aGFyZHdhcmUtYWNjZWxlcmF0aW9uCiAgICAgICAgICAgIGlmKCB2ZW5kb3JWZXJzaW9uLmNvbXBh
cmVUbyhtZXNhU2FmZURvdWJsZUJ1ZmZlcmVkUEJ1ZmZlcikgPCAwICkgewogICAgICAgICAgICAg
ICAgZmluYWwgaW50IHF1aXJrID0gR0xSZW5kZXJlclF1aXJrcy5Ob0RvdWJsZUJ1ZmZlcmVkUEJ1
ZmZlcjsKICAgICAgICAgICAgICAgIGlmKERFQlVHKSB7CiAgICAgICAgICAgICAgICAgICAgU3lz
dGVtLmVyci5wcmludGxuKCJRdWlyazogIitHTFJlbmRlcmVyUXVpcmtzLnRvU3RyaW5nKHF1aXJr
KSsiOiBjYXVzZTogUmVuZGVyZXIgIiArIGdsUmVuZGVyZXIpOwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgcXVpcmtzLmFkZFF1aXJrKCBxdWlyayApOwogICAgICAgICAgICB9CiAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gc29mdHdhcmUKICAgICAgICAgICAgaWYoIHZl
bmRvclZlcnNpb24uY29tcGFyZVRvKG1lc2FTYWZlRkJPVmVyc2lvbikgPCAwICkgeyAvLyBGSVhN
RTogSXMgaXQgZml4ZWQgaW4gPj0gOC4wLjAgPwogICAgICAgICAgICAgICAgZmluYWwgaW50IHF1
aXJrID0gR0xSZW5kZXJlclF1aXJrcy5CdWdneUNvbG9yUmVuZGVyYnVmZmVyOwogICAgICAgICAg
ICAgICAgaWYoREVCVUcpIHsKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4o
IlF1aXJrOiAiK0dMUmVuZGVyZXJRdWlya3MudG9TdHJpbmcocXVpcmspKyI6IGNhdXNlOiBSZW5k
ZXJlciAiICsgZ2xSZW5kZXJlciArICIgLyBNZXNhLVZlcnNpb24gIit2ZW5kb3JWZXJzaW9uKTsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHF1aXJrcy5hZGRRdWlyayggcXVpcmsg
KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoY29tcGF0Q3R4ICYmIChtYWpv
ciA+IDMgfHwgKG1ham9yID09IDMgJiYgbWlub3IgPj0gMSkpKSB7CiAgICAgICAgICAgIC8vIEZJ
WE1FOiBBcHBseSB2ZW5kb3IgdmVyc2lvbiBjb25zdHJhaW50cyEKICAgICAgICAgICAgZmluYWwg
aW50IHF1aXJrID0gR0xSZW5kZXJlclF1aXJrcy5HTE5vbkNvbXBsaWFudDsKICAgICAgICAgICAg
aWYoREVCVUcpIHsKICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiUXVpcms6ICIr
R0xSZW5kZXJlclF1aXJrcy50b1N0cmluZyhxdWlyaykrIjogY2F1c2U6IFJlbmRlcmVyICIgKyBn
bFJlbmRlcmVyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBxdWlya3MuYWRkUXVpcmsoIHF1
aXJrICk7CiAgICAgICAgfQogICAgICAgIGlmKCBnbFJlbmRlcmVyLmNvbnRhaW5zKCBNZXNhUmVu
ZGVyZXJJbnRlbHNwICkgJiYKICAgICAgICAgICAgdmVuZG9yVmVyc2lvbi5jb21wYXJlVG8obWVz
YUludGVsQnVnZ3lTaGFyZWRDdHg5MjEpID49IDAgJiYgaXNYMTEgKSB7IC8vIEZJWE1FOiBXaGVu
IGlzIGl0IGZpeGVkID8KICAgICAgICAgICAgZmluYWwgaW50IHF1aXJrID0gR0xSZW5kZXJlclF1
aXJrcy5HTFNoYXJlZENvbnRleHRCdWdneTsKICAgICAgICAgICAgaWYoREVCVUcpIHsKICAgICAg
ICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiUXVpcms6ICIrR0xSZW5kZXJlclF1aXJrcy50
b1N0cmluZyhxdWlyaykrIjogY2F1c2U6IFgxMSAvIFJlbmRlcmVyICIgKyBnbFJlbmRlcmVyICsg
IiAvIE1lc2EtVmVyc2lvbiAiK3ZlbmRvclZlcnNpb24pOwogICAgICAgICAgICB9CiAgICAgICAg
ICAgIHF1aXJrcy5hZGRRdWlyayggcXVpcmsgKTsKICAgICAgICB9CiAgICAgICAgaWYoIGdsVmVu
ZG9yLmNvbnRhaW5zKCAibm91dmVhdSIgKQogICAgICAgICAgICAvLyBGSVhNRTogJiYgdmVuZG9y
VmVyc2lvbi5jb21wYXJlVG8obm91dmVhdUJ1Z2d5TVNBQUZpeGVkKSA8IDAKICAgICAgICAgICkg
ewogICAgICAgICAgICBmaW5hbCBpbnQgcXVpcmsgPSBHTFJlbmRlcmVyUXVpcmtzLk5vTXVsdGlT
YW1wbGluZ0J1ZmZlcnM7CiAgICAgICAgICAgIGlmKERFQlVHKSB7CiAgICAgICAgICAgICAgICBT
eXN0ZW0uZXJyLnByaW50bG4oIlF1aXJrOiAiK0dMUmVuZGVyZXJRdWlya3MudG9TdHJpbmcocXVp
cmspKyI6IGNhdXNlOiBYMTEgLyBSZW5kZXJlciAiICsgZ2xSZW5kZXJlciArICIgLyBWZW5kb3Ig
IitnbFZlbmRvcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYWRkU3RpY2t5UXVpcmtBdE1h
cHBpbmcoYWRldmljZSwgcXVpcmtzLCBxdWlyaywgd2l0aGluR0xWZXJzaW9uc01hcHBpbmcpOwog
ICAgICAgIH0KICAgICAgICBpZiggaXNXaW5kb3dzICYmIGdsUmVuZGVyZXIuY29udGFpbnMoIlNW
R0EzRCIpICYmIHZlbmRvclZlcnNpb24uY29tcGFyZVRvKG1lc2FTYWZlRkJPVmVyc2lvbikgPCAw
ICkgewogICAgICAgICAgICBmaW5hbCBpbnQgcXVpcmsgPSBHTFJlbmRlcmVyUXVpcmtzLk5vRnVs
bEZCT1N1cHBvcnQ7CiAgICAgICAgICAgIGlmKERFQlVHKSB7CiAgICAgICAgICAgICAgICBTeXN0
ZW0uZXJyLnByaW50bG4oIlF1aXJrOiAiK0dMUmVuZGVyZXJRdWlya3MudG9TdHJpbmcocXVpcmsp
KyI6IGNhdXNlOiBPUyAiK1BsYXRmb3JtLmdldE9TVHlwZSgpICsgIiAvIFJlbmRlcmVyICIgKyBn
bFJlbmRlcmVyICsgIiAvIE1lc2EtVmVyc2lvbiAiK3ZlbmRvclZlcnNpb24pOwogICAgICAgICAg
ICB9CiAgICAgICAgICAgIHF1aXJrcy5hZGRRdWlyayggcXVpcmsgKTsKICAgICAgICB9CiAgICB9
CgogICAgLy8KICAgIC8vIFByb3BlcnR5IHJlbGF0ZWQgcXVpcmtzCiAgICAvLwogICAgaWYoIEZP
UkNFX05PX0NPTE9SX1JFTkRFUkJVRkZFUiApIHsKICAgICAgICBmaW5hbCBpbnQgcXVpcmsgPSBH
TFJlbmRlcmVyUXVpcmtzLkJ1Z2d5Q29sb3JSZW5kZXJidWZmZXI7CiAgICAgICAgaWYoREVCVUcp
IHsKICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJRdWlyazogIitHTFJlbmRlcmVyUXVp
cmtzLnRvU3RyaW5nKHF1aXJrKSsiOiBjYXVzZTogcHJvcGVydHkiKTsKICAgICAgICB9CiAgICAg
ICAgcXVpcmtzLmFkZFF1aXJrKCBxdWlyayApOwogICAgfQogICAgaWYoIEZPUkNFX01JTl9GQk9f
U1VQUE9SVCB8fCBxdWlya3MuZXhpc3QoR0xSZW5kZXJlclF1aXJrcy5CdWdneUNvbG9yUmVuZGVy
YnVmZmVyKSApIHsKICAgICAgICBmaW5hbCBpbnQgcXVpcmsgPSBHTFJlbmRlcmVyUXVpcmtzLk5v
RnVsbEZCT1N1cHBvcnQ7CiAgICAgICAgaWYoREVCVUcpIHsKICAgICAgICAgICAgZmluYWwgU3Ry
aW5nIGNhdXNlUHJvcHMgPSBGT1JDRV9NSU5fRkJPX1NVUFBPUlQgPyAicHJvcGVydHksICIgOiAi
IjsKICAgICAgICAgICAgZmluYWwgU3RyaW5nIGNhdXNlUXVpcmsgPSBxdWlya3MuZXhpc3QoR0xS
ZW5kZXJlclF1aXJrcy5CdWdneUNvbG9yUmVuZGVyYnVmZmVyKSA/ICJCdWdneUNvbG9yUmVuZGVy
YnVmZmVyIiA6ICIiOwogICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlF1aXJrOiAiK0dM
UmVuZGVyZXJRdWlya3MudG9TdHJpbmcocXVpcmspKyI6IGNhdXNlOiAiK2NhdXNlUHJvcHMrY2F1
c2VRdWlyayk7CiAgICAgICAgfQogICAgICAgIHF1aXJrcy5hZGRRdWlyayggcXVpcmsgKTsKICAg
IH0KCiAgICBpZihERUJVRykgewogICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiUXVpcmtzIGxv
Y2FsLjA6ICIrcXVpcmtzKTsKICAgIH0KICAgIHsKICAgICAgICAvLyBNZXJnZSBzdGlja3kgcXVp
cmtzLCB0aHJlYWQgc2FmZSBkdWUgdG8gc2luZ2xlIHRocmVhZGVkIGluaXRpYWxpemF0aW9uIQog
ICAgICAgIEdMUmVuZGVyZXJRdWlya3MucHVzaFN0aWNreURldmljZVF1aXJrcyhhZGV2aWNlLCBx
dWlya3MpOwoKICAgICAgICBmaW5hbCBBYnN0cmFjdEdyYXBoaWNzRGV2aWNlIGZhY3RvcnlEZWZh
dWx0RGV2aWNlID0gZmFjdG9yeS5nZXREZWZhdWx0RGV2aWNlKCk7CiAgICAgICAgaWYoICFHTFJl
bmRlcmVyUXVpcmtzLmFyZVNhbWVTdGlja3lEZXZpY2UoZmFjdG9yeURlZmF1bHREZXZpY2UsIGFk
ZXZpY2UpICkgewogICAgICAgICAgICBHTFJlbmRlcmVyUXVpcmtzLnB1c2hTdGlja3lEZXZpY2VR
dWlya3MoZmFjdG9yeURlZmF1bHREZXZpY2UsIHF1aXJrcyk7CiAgICAgICAgfQogICAgICAgIGlm
KCBpc0VTICkgewogICAgICAgICAgICBmaW5hbCBBYnN0cmFjdEdyYXBoaWNzRGV2aWNlIGVnbEZh
Y3RvcnlEZWZhdWx0RGV2aWNlID0gR0xEcmF3YWJsZUZhY3RvcnkuZ2V0RUdMRmFjdG9yeSgpLmdl
dERlZmF1bHREZXZpY2UoKTsKICAgICAgICAgICAgaWYoICFHTFJlbmRlcmVyUXVpcmtzLmFyZVNh
bWVTdGlja3lEZXZpY2UoZWdsRmFjdG9yeURlZmF1bHREZXZpY2UsIGFkZXZpY2UpICYmCiAgICAg
ICAgICAgICAgICAhR0xSZW5kZXJlclF1aXJrcy5hcmVTYW1lU3RpY2t5RGV2aWNlKGVnbEZhY3Rv
cnlEZWZhdWx0RGV2aWNlLCBmYWN0b3J5RGVmYXVsdERldmljZSkgKSB7CiAgICAgICAgICAgICAg
ICBHTFJlbmRlcmVyUXVpcmtzLnB1c2hTdGlja3lEZXZpY2VRdWlya3MoZWdsRmFjdG9yeURlZmF1
bHREZXZpY2UsIHF1aXJrcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBnbFJl
bmRlcmVyUXVpcmtzID0gcXVpcmtzOwogICAgaWYoREVCVUcpIHsKICAgICAgICBTeXN0ZW0uZXJy
LnByaW50bG4oIlF1aXJrcyBsb2NhbC5YOiAiK2dsUmVuZGVyZXJRdWlya3MpOwogICAgICAgIFN5
c3RlbS5lcnIucHJpbnRsbigiUXVpcmtzIHN0aWNreSBvbiAiK2FkZXZpY2UrIjogIitHTFJlbmRl
cmVyUXVpcmtzLmdldFN0aWNreURldmljZVF1aXJrcyhhZGV2aWNlKSk7CiAgICB9CiAgfQoKICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIGhhc0ZCT0ltcGwoZmluYWwgaW50IG1ham9yLCBm
aW5hbCBpbnQgY3RwLCBmaW5hbCBFeHRlbnNpb25BdmFpbGFiaWxpdHlDYWNoZSBleHRDYWNoZSkg
ewogICAgcmV0dXJuICggMCAhPSAoY3RwICYgQ1RYX1BST0ZJTEVfRVMpICYmIG1ham9yID49IDIg
KSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVTID49IDIuMAoKICAgICAgICAgICBt
YWpvciA+PSAzIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBhbnkgPj0gMy4wIEdMIGN0eCAoY29yZSwgY29tcGF0IGFuZCBF
UykKCiAgICAgICAgICAgKCBudWxsICE9IGV4dENhY2hlICYmCiAgICAgICAgICAgICAoCiAgICAg
ICAgICAgICAgIGV4dENhY2hlLmlzRXh0ZW5zaW9uQXZhaWxhYmxlKEdMRXh0ZW5zaW9ucy5BUkJf
RVMyX2NvbXBhdGliaWxpdHkpICB8fCAgLy8gRVMgMi4wIGNvbXBhdGlibGUKCiAgICAgICAgICAg
ICAgIGV4dENhY2hlLmlzRXh0ZW5zaW9uQXZhaWxhYmxlKEdMRXh0ZW5zaW9ucy5BUkJfZnJhbWVi
dWZmZXJfb2JqZWN0KSB8fCAgLy8gQVJCX2ZyYW1lYnVmZmVyX29iamVjdAoKICAgICAgICAgICAg
ICAgZXh0Q2FjaGUuaXNFeHRlbnNpb25BdmFpbGFibGUoR0xFeHRlbnNpb25zLkVYVF9mcmFtZWJ1
ZmZlcl9vYmplY3QpIHx8ICAvLyBFWFRfZnJhbWVidWZmZXJfb2JqZWN0CgogICAgICAgICAgICAg
ICBleHRDYWNoZS5pc0V4dGVuc2lvbkF2YWlsYWJsZShHTEV4dGVuc2lvbnMuT0VTX2ZyYW1lYnVm
ZmVyX29iamVjdCkgICAgIC8vIE9FU19mcmFtZWJ1ZmZlcl9vYmplY3QKICAgICAgICAgICAgICkg
KTsKICB9CgogIHByaXZhdGUgZmluYWwgdm9pZCByZW1vdmVDYWNoZWRWZXJzaW9uKGZpbmFsIGlu
dCBtYWpvciwgZmluYWwgaW50IG1pbm9yLCBpbnQgY3R4UHJvZmlsZUJpdHMpIHsKICAgIGlmKCFp
c0N1cnJlbnRDb250ZXh0SGFyZHdhcmVSYXN0ZXJpemVyKCkpIHsKICAgICAgICBjdHhQcm9maWxl
Qml0cyB8PSBHTENvbnRleHQuQ1RYX0lNUExfQUNDRUxfU09GVDsKICAgIH0KICAgIGZpbmFsIEFi
c3RyYWN0R3JhcGhpY3NDb25maWd1cmF0aW9uIGFjb25maWcgPSBkcmF3YWJsZS5nZXROYXRpdmVT
dXJmYWNlKCkuZ2V0R3JhcGhpY3NDb25maWd1cmF0aW9uKCk7CiAgICBmaW5hbCBBYnN0cmFjdEdy
YXBoaWNzRGV2aWNlIGFkZXZpY2UgPSBhY29uZmlnLmdldFNjcmVlbigpLmdldERldmljZSgpOwoK
ICAgIGNvbnRleHRGUU4gPSBnZXRDb250ZXh0RlFOKGFkZXZpY2UsIG1ham9yLCBtaW5vciwgY3R4
UHJvZmlsZUJpdHMpOwogICAgaWYgKERFQlVHKSB7CiAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihn
ZXRUaHJlYWROYW1lKCkgKyAiOiBSTSBDb250ZXh0IEZRTjogIitjb250ZXh0RlFOKyIgLSAiK0dM
Q29udGV4dC5nZXRHTFZlcnNpb24obWFqb3IsIG1pbm9yLCBjdHhQcm9maWxlQml0cywgbnVsbCkp
OwogICAgfQoKICAgIHN5bmNocm9uaXplZChtYXBwZWRDb250ZXh0VHlwZU9iamVjdExvY2spIHsK
ICAgICAgICBmaW5hbCBQcm9jQWRkcmVzc1RhYmxlIHRhYmxlID0gbWFwcGVkR0xQcm9jQWRkcmVz
cy5yZW1vdmUoIGNvbnRleHRGUU4gKTsKICAgICAgICBpZihERUJVRykgewogICAgICAgICAgICBm
aW5hbCBpbnQgaGMgPSBudWxsICE9IHRhYmxlID8gdGFibGUuaGFzaENvZGUoKSA6IDA7CiAgICAg
ICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihnZXRUaHJlYWROYW1lKCkgKyAiOiBSTSBHTENvbnRl
eHQgR0wgUHJvY0FkZHJlc3NUYWJsZSBtYXBwaW5nIGtleSgiK2NvbnRleHRGUU4rIikgLT4gIit0
b0hleFN0cmluZyhoYykpOwogICAgICAgIH0KICAgIH0KCiAgICBzeW5jaHJvbml6ZWQobWFwcGVk
Q29udGV4dFR5cGVPYmplY3RMb2NrKSB7CiAgICAgICAgZmluYWwgRXh0ZW5zaW9uQXZhaWxhYmls
aXR5Q2FjaGUgIGVDYWNoZSA9IG1hcHBlZEV4dGVuc2lvbkF2YWlsYWJpbGl0eUNhY2hlLnJlbW92
ZSggY29udGV4dEZRTiApOwogICAgICAgIGlmKERFQlVHKSB7CiAgICAgICAgICAgIGZpbmFsIGlu
dCBoYyA9IG51bGwgIT0gZUNhY2hlID8gZUNhY2hlLmhhc2hDb2RlKCkgOiAwOwogICAgICAgICAg
ICBTeXN0ZW0uZXJyLnByaW50bG4oZ2V0VGhyZWFkTmFtZSgpICsgIjogUk0gR0xDb250ZXh0IEdM
IEV4dGVuc2lvbkF2YWlsYWJpbGl0eUNhY2hlIG1hcHBpbmcga2V5KCIrY29udGV4dEZRTisiKSAt
PiAiK3RvSGV4U3RyaW5nKGhjKSk7CiAgICAgICAgfQogICAgfQogIH0KCiAgcHJpdmF0ZSBmaW5h
bCBib29sZWFuIGlzQ3VycmVudENvbnRleHRIYXJkd2FyZVJhc3Rlcml6ZXIoKSAgewogICAgYm9v
bGVhbiBpc0hhcmR3YXJlUmFzdGVyaXplciA9IHRydWU7CgogICAgaWYoIWRyYXdhYmxlLmdldENo
b3NlbkdMQ2FwYWJpbGl0aWVzKCkuZ2V0SGFyZHdhcmVBY2NlbGVyYXRlZCgpKSB7CiAgICAgICAg
aXNIYXJkd2FyZVJhc3Rlcml6ZXIgPSBmYWxzZTsKICAgIH0gZWxzZSB7CiAgICAgICAgaXNIYXJk
d2FyZVJhc3Rlcml6ZXIgPSAhICggZ2xSZW5kZXJlckxvd2VyQ2FzZS5jb250YWlucygic29mdHdh
cmUiKSAvKiBNZXNhM0QsIEFwcGxlICovIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2xSZW5kZXJlckxvd2VyQ2FzZS5jb250YWlucygibWVzYSB4MTEiKSAvKiBNZXNhM0Qg
ICovIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xSZW5kZXJlckxvd2Vy
Q2FzZS5jb250YWlucygic29mdHBpcGUiKSAvKiBHYWxsaXVtICovIHx8CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2xSZW5kZXJlckxvd2VyQ2FzZS5jb250YWlucygibGx2bXBp
cGUiKSAvKiBHYWxsaXVtICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAg
ICB9CiAgICByZXR1cm4gaXNIYXJkd2FyZVJhc3Rlcml6ZXI7CiAgfQoKICBwcm90ZWN0ZWQgYWJz
dHJhY3QgU3RyaW5nQnVpbGRlciBnZXRQbGF0Zm9ybUV4dGVuc2lvbnNTdHJpbmdJbXBsKCk7Cgog
IEBPdmVycmlkZQogIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzRnVuY3Rpb25BdmFpbGFibGUoZmlu
YWwgU3RyaW5nIGdsRnVuY3Rpb25OYW1lKSB7CiAgICAvLyBDaGVjayBHTCAxc3QgKGNhY2hlZCkK
ICAgIGlmKCBudWxsICE9IGdsUHJvY0FkZHJlc3NUYWJsZSApIHsgLy8gbnVsbCBpZiB0aGlzIGNv
bnRleHQgd2Fzbid0IG5vdCBjcmVhdGVkCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYoIGds
UHJvY0FkZHJlc3NUYWJsZS5pc0Z1bmN0aW9uQXZhaWxhYmxlKCBnbEZ1bmN0aW9uTmFtZSApICkg
ewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNh
dGNoIChmaW5hbCBFeGNlcHRpb24gZSkge30KICAgIH0KCiAgICAvLyBDaGVjayBwbGF0Zm9ybSBl
eHRlbnNpb25zIDJuZCAoY2FjaGVkKSAtIGNvbnRleHQgaGFkIHRvIGJlIGVuYWJsZWQgb25jZQog
ICAgZmluYWwgUHJvY0FkZHJlc3NUYWJsZSBwVGFibGUgPSBnZXRQbGF0Zm9ybUV4dFByb2NBZGRy
ZXNzVGFibGUoKTsKICAgIGlmKG51bGwhPXBUYWJsZSkgewogICAgICAgIHRyeSB7CiAgICAgICAg
ICAgIGlmKCBwVGFibGUuaXNGdW5jdGlvbkF2YWlsYWJsZSggZ2xGdW5jdGlvbk5hbWUgKSApIHsK
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRj
aCAoZmluYWwgRXhjZXB0aW9uIGUpIHt9CiAgICB9CgogICAgLy8gZHluYW1pYyBmdW5jdGlvbiBs
b29rdXAgYXQgbGFzdCBpbmNsIG5hbWUgYWxpYXNpbmcgKG5vdCBjYWNoZWQpCiAgICBmaW5hbCBE
eW5hbWljTG9va3VwSGVscGVyIGR5bkxvb2t1cCA9IGdldEdMRHluYW1pY0xvb2t1cEhlbHBlcihj
dHhWZXJzaW9uLmdldE1ham9yKCksIGN0eE9wdGlvbnMpOwogICAgaWYoIG51bGwgPT0gZHluTG9v
a3VwICkgewogICAgICAgIHRocm93IG5ldyBHTEV4Y2VwdGlvbigiTm8gR0xEeW5hbWljTG9va3Vw
SGVscGVyIGZvciAiK3RoaXMpOwogICAgfQogICAgZmluYWwgU3RyaW5nIHRtcEJhc2UgPSBHTE5h
bWVSZXNvbHZlci5ub3JtYWxpemVWRU4oR0xOYW1lUmVzb2x2ZXIubm9ybWFsaXplQVJCKGdsRnVu
Y3Rpb25OYW1lLCB0cnVlKSwgdHJ1ZSk7CiAgICByZXR1cm4gQWNjZXNzQ29udHJvbGxlci5kb1By
aXZpbGVnZWQobmV3IFByaXZpbGVnZWRBY3Rpb248Qm9vbGVhbj4oKSB7CiAgICAgICAgQE92ZXJy
aWRlCiAgICAgICAgcHVibGljIEJvb2xlYW4gcnVuKCkgewogICAgICAgICAgICBib29sZWFuIHJl
cyA9IGZhbHNlOwogICAgICAgICAgICBkeW5Mb29rdXAuY2xhaW1BbGxMaW5rUGVybWlzc2lvbigp
OwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgZmluYWwgaW50ICB2YXJpYW50cyA9
IEdMTmFtZVJlc29sdmVyLmdldEZ1bmNOYW1lUGVybXV0YXRpb25OdW1iZXIodG1wQmFzZSk7CiAg
ICAgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyAhcmVzICYmIGkgPCB2YXJpYW50czsgaSsrKSB7
CiAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHRtcCA9IEdMTmFtZVJlc29sdmVyLmdl
dEZ1bmNOYW1lUGVybXV0YXRpb24odG1wQmFzZSwgaSk7CiAgICAgICAgICAgICAgICAgICAgdHJ5
IHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gZHluTG9va3VwLmlzRnVuY3Rpb25BdmFp
bGFibGUodG1wKTsKICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChmaW5hbCBFeGNlcHRpb24g
ZSkgeyB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAg
ICAgICAgICBkeW5Mb29rdXAucmVsZWFzZUFsbExpbmtQZXJtaXNzaW9uKCk7CiAgICAgICAgICAg
IH0KICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4udmFsdWVPZihyZXMpOwogICAgICAgIH0gfSAp
LmJvb2xlYW5WYWx1ZSgpOwogIH0KCiAgQE92ZXJyaWRlCiAgcHVibGljIGZpbmFsIGJvb2xlYW4g
aXNFeHRlbnNpb25BdmFpbGFibGUoZmluYWwgU3RyaW5nIGdsRXh0ZW5zaW9uTmFtZSkgewogICAg
ICBpZihudWxsIT1leHRlbnNpb25BdmFpbGFiaWxpdHkpIHsKICAgICAgICByZXR1cm4gZXh0ZW5z
aW9uQXZhaWxhYmlsaXR5LmlzRXh0ZW5zaW9uQXZhaWxhYmxlKG1hcFRvUmVhbEdMRXh0ZW5zaW9u
TmFtZShnbEV4dGVuc2lvbk5hbWUpKTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgfQoK
ICBAT3ZlcnJpZGUKICBwdWJsaWMgZmluYWwgaW50IGdldFBsYXRmb3JtRXh0ZW5zaW9uQ291bnQo
KSB7CiAgICAgIHJldHVybiBudWxsICE9IGV4dGVuc2lvbkF2YWlsYWJpbGl0eSA/IGV4dGVuc2lv
bkF2YWlsYWJpbGl0eS5nZXRQbGF0Zm9ybUV4dGVuc2lvbkNvdW50KCkgOiAwOwogIH0KCiAgQE92
ZXJyaWRlCiAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRQbGF0Zm9ybUV4dGVuc2lvbnNTdHJpbmco
KSB7CiAgICAgIGlmKG51bGwhPWV4dGVuc2lvbkF2YWlsYWJpbGl0eSkgewogICAgICAgIHJldHVy
biBleHRlbnNpb25BdmFpbGFiaWxpdHkuZ2V0UGxhdGZvcm1FeHRlbnNpb25zU3RyaW5nKCk7CiAg
ICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgfQoKICBAT3ZlcnJpZGUKICBwdWJsaWMgZmluYWwg
aW50IGdldEdMRXh0ZW5zaW9uQ291bnQoKSB7CiAgICAgIHJldHVybiBudWxsICE9IGV4dGVuc2lv
bkF2YWlsYWJpbGl0eSA/IGV4dGVuc2lvbkF2YWlsYWJpbGl0eS5nZXRHTEV4dGVuc2lvbkNvdW50
KCkgOiAwOwogIH0KCiAgQE92ZXJyaWRlCiAgcHVibGljIGZpbmFsIFN0cmluZyBnZXRHTEV4dGVu
c2lvbnNTdHJpbmcoKSB7CiAgICAgIGlmKG51bGwhPWV4dGVuc2lvbkF2YWlsYWJpbGl0eSkgewog
ICAgICAgIHJldHVybiBleHRlbnNpb25BdmFpbGFiaWxpdHkuZ2V0R0xFeHRlbnNpb25zU3RyaW5n
KCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgfQoKICBwdWJsaWMgZmluYWwgYm9vbGVh
biBpc0V4dGVuc2lvbkNhY2hlSW5pdGlhbGl6ZWQoKSB7CiAgICAgIGlmKG51bGwhPWV4dGVuc2lv
bkF2YWlsYWJpbGl0eSkgewogICAgICAgIHJldHVybiBleHRlbnNpb25BdmFpbGFiaWxpdHkuaXNJ
bml0aWFsaXplZCgpOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIHByb3RlY3Rl
ZCBzdGF0aWMgU3RyaW5nIGdldENvbnRleHRGUU4oZmluYWwgQWJzdHJhY3RHcmFwaGljc0Rldmlj
ZSBkZXZpY2UsIGZpbmFsIGludCBtYWpvciwgZmluYWwgaW50IG1pbm9yLCBpbnQgY3R4UHJvZmls
ZUJpdHMpIHsKICAgICAgLy8gcmVtb3ZlIG5vbi1rZXkgdmFsdWVzCiAgICAgIGN0eFByb2ZpbGVC
aXRzICY9IENUWF9JTVBMX0NBQ0hFX01BU0s7CgogICAgICByZXR1cm4gZGV2aWNlLmdldFVuaXF1
ZUlEKCkgKyAiLSIgKyB0b0hleFN0cmluZyhjb21wb3NlQml0cyhtYWpvciwgbWlub3IsIGN0eFBy
b2ZpbGVCaXRzKSk7CiAgfQoKICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIGdldENvbnRleHRGUU4o
KSB7CiAgICAgIHJldHVybiBjb250ZXh0RlFOOwogIH0KCiAgQE92ZXJyaWRlCiAgcHVibGljIGlu
dCBnZXREZWZhdWx0UGl4ZWxEYXRhVHlwZSgpIHsKICAgICAgZXZhbFBpeGVsRGF0YVR5cGUoKTsK
ICAgICAgcmV0dXJuIHBpeGVsRGF0YVR5cGU7CiAgfQoKICBAT3ZlcnJpZGUKICBwdWJsaWMgaW50
IGdldERlZmF1bHRQaXhlbERhdGFGb3JtYXQoKSB7CiAgICAgIGV2YWxQaXhlbERhdGFUeXBlKCk7
CiAgICAgIHJldHVybiBwaXhlbERhdGFGb3JtYXQ7CiAgfQoKICBwcml2YXRlIGZpbmFsIHZvaWQg
ZXZhbFBpeGVsRGF0YVR5cGUoKSB7CiAgICBpZighcGl4ZWxEYXRhRXZhbHVhdGVkKSB7IC8vIG9u
bHkgdmFsaWQgd2hpbGUgY29udGV4dCBpcyBtYWRlIGN1cnJlbnQKICAgICAgICBib29sZWFuIG9r
ID0gZmFsc2U7CiAgICAgICAgLyogaWYoaXNHTDJHTDMoKSAmJiAzID09IGNvbXBvbmVudHMpIHsK
ICAgICAgICAgICAgcGl4ZWxEYXRhSW50ZXJuYWxGb3JtYXQ9R0wuR0xfUkdCOwogICAgICAgICAg
ICBwaXhlbERhdGFGb3JtYXQ9R0wuR0xfUkdCOwogICAgICAgICAgICBwaXhlbERhdGFUeXBlID0g
R0wuR0xfVU5TSUdORURfQllURTsKICAgICAgICAgICAgb2sgPSB0cnVlOwogICAgICAgIH0gZWxz
ZSAqLyBpZiggaXNHTEVTMkNvbXBhdGlibGUoKSB8fCBpc0V4dGVuc2lvbkF2YWlsYWJsZShHTEV4
dGVuc2lvbnMuT0VTX3JlYWRfZm9ybWF0KSApIHsKICAgICAgICAgICAgZmluYWwgaW50W10gZ2xJ
bXBsQ29sb3JSZWFkVmFscyA9IG5ldyBpbnRbXSB7IDAsIDAgfTsKICAgICAgICAgICAgZ2wuZ2xH
ZXRJbnRlZ2VydihHTC5HTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVCwgZ2xJbXBs
Q29sb3JSZWFkVmFscywgMCk7CiAgICAgICAgICAgIGdsLmdsR2V0SW50ZWdlcnYoR0wuR0xfSU1Q
TEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFLCBnbEltcGxDb2xvclJlYWRWYWxzLCAxKTsKICAg
ICAgICAgICAgLy8gcGl4ZWxEYXRhSW50ZXJuYWxGb3JtYXQgPSAoNCA9PSBjb21wb25lbnRzKSA/
IEdMLkdMX1JHQkEgOiBHTC5HTF9SR0I7CiAgICAgICAgICAgIHBpeGVsRGF0YUZvcm1hdCA9IGds
SW1wbENvbG9yUmVhZFZhbHNbMF07CiAgICAgICAgICAgIHBpeGVsRGF0YVR5cGUgPSBnbEltcGxD
b2xvclJlYWRWYWxzWzFdOwogICAgICAgICAgICBvayA9IDAgIT0gcGl4ZWxEYXRhRm9ybWF0ICYm
IDAgIT0gcGl4ZWxEYXRhVHlwZTsKICAgICAgICB9CiAgICAgICAgaWYoICFvayApIHsKICAgICAg
ICAgICAgLy8gUkdCQSByZWFkIGlzIHNhZmUgZm9yIGFsbCBHTCBwcm9maWxlcwogICAgICAgICAg
ICAvLyBwaXhlbERhdGFJbnRlcm5hbEZvcm1hdCA9ICg0ID09IGNvbXBvbmVudHMpID8gR0wuR0xf
UkdCQSA6IEdMLkdMX1JHQjsKICAgICAgICAgICAgcGl4ZWxEYXRhRm9ybWF0PUdMLkdMX1JHQkE7
CiAgICAgICAgICAgIHBpeGVsRGF0YVR5cGUgPSBHTC5HTF9VTlNJR05FRF9CWVRFOwogICAgICAg
IH0KICAgICAgICAvLyBUT0RPOiBDb25zaWRlcjoKICAgICAgICAvLyByZXR1cm4gZ2wuaXNHTDJH
TDMoKT9HTDJHTDMuR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWOkdMLkdMX1VOU0lHTkVEX1NI
T1JUXzVfNV81XzE7CiAgICAgICAgcGl4ZWxEYXRhRXZhbHVhdGVkID0gdHJ1ZTsKICAgIH0KICB9
CgogIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogIC8vIFN3YXBCdWZmZXIKCiAgQE92ZXJyaWRlCiAgcHVibGlj
IGZpbmFsIGJvb2xlYW4gc2V0U3dhcEludGVydmFsKGZpbmFsIGludCBpbnRlcnZhbCkgdGhyb3dz
IEdMRXhjZXB0aW9uIHsKICAgIHZhbGlkYXRlQ3VycmVudCgpOwogICAgcmV0dXJuIHNldFN3YXBJ
bnRlcnZhbE5DKGludGVydmFsKTsKICB9CiAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gc2V0U3dh
cEludGVydmFsTkMoZmluYWwgaW50IGludGVydmFsKSB0aHJvd3MgR0xFeGNlcHRpb24gewogICAg
aWYoICFkcmF3YWJsZVJldGFyZ2V0ZWQgfHwKICAgICAgICAhaGFzUmVuZGVyZXJRdWlyayhHTFJl
bmRlcmVyUXVpcmtzLk5vU2V0U3dhcEludGVydmFsUG9zdFJldGFyZ2V0KQogICAgICApCiAgICB7
CiAgICAgICAgZmluYWwgSW50ZWdlciB1c2VkSW50ZXJ2YWwgPSBzZXRTd2FwSW50ZXJ2YWxJbXBs
MihpbnRlcnZhbCk7CiAgICAgICAgaWYoIG51bGwgIT0gdXNlZEludGVydmFsICkgewogICAgICAg
ICAgICBjdXJyZW50U3dhcEludGVydmFsID0gdXNlZEludGVydmFsLmludFZhbHVlKCk7CiAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9
CiAgcHJvdGVjdGVkIGFic3RyYWN0IEludGVnZXIgc2V0U3dhcEludGVydmFsSW1wbDIoZmluYWwg
aW50IGludGVydmFsKTsKCiAgQE92ZXJyaWRlCiAgcHVibGljIGZpbmFsIGludCBnZXRTd2FwSW50
ZXJ2YWwoKSB7CiAgICByZXR1cm4gY3VycmVudFN3YXBJbnRlcnZhbDsKICB9CiAgQE92ZXJyaWRl
CiAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgc2V0RGVmYXVsdFN3YXBJbnRlcnZhbCgpIHsKICAgIGN1
cnJlbnRTd2FwSW50ZXJ2YWwgPSAwOwogICAgc2V0U3dhcEludGVydmFsTkMoMSk7CiAgfQoKCiAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAgLy8gSGVscGVycyBmb3IgYnVmZmVyIG9iamVjdCBvcHRpbWl6YXRp
b25zCgogIHB1YmxpYyBmaW5hbCBHTEJ1ZmZlck9iamVjdFRyYWNrZXIgZ2V0QnVmZmVyT2JqZWN0
VHJhY2tlcigpIHsKICAgIHJldHVybiBidWZmZXJPYmplY3RUcmFja2VyOwogIH0KCiAgcHVibGlj
IGZpbmFsIEdMQnVmZmVyU3RhdGVUcmFja2VyIGdldEJ1ZmZlclN0YXRlVHJhY2tlcigpIHsKICAg
IHJldHVybiBidWZmZXJTdGF0ZVRyYWNrZXI7CiAgfQoKICBwdWJsaWMgZmluYWwgR0xTdGF0ZVRy
YWNrZXIgZ2V0R0xTdGF0ZVRyYWNrZXIoKSB7CiAgICByZXR1cm4gZ2xTdGF0ZVRyYWNrZXI7CiAg
fQoKICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIC8vIEhlbHBlcnMgZm9yIGNvbnRleHQgb3B0aW1p
emF0aW9uIHdoZXJlIHRoZSBsYXN0IGNvbnRleHQgaXMgbGVmdAogIC8vIGN1cnJlbnQgb24gdGhl
IE9wZW5HTCB3b3JrZXIgdGhyZWFkCiAgLy8KCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRo
ZSBnaXZlbiB0aHJlYWQgaXMgb3duZXIsIG90aGVyd2lzZSBmYWxzZS4KICAgKiA8cD4KICAgKiBN
ZXRob2QgZXhpc3RzIG1lcmVseSBmb3IgY29kZSB2YWxpZGF0aW9uIG9mIHtAbGluayAjaXNDdXJy
ZW50KCl9LgogICAqIDwvcD4KICAgKi8KICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc093bmVyKGZp
bmFsIFRocmVhZCB0aHJlYWQpIHsKICAgICAgcmV0dXJuIGxvY2suaXNPd25lcih0aHJlYWQpOwog
IH0KCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZSBvdGhlciB0aHJlYWRzIHdh
aXRpbmcgZm9yIHRoaXMgR0xDb250ZXh0IHRvIHtAbGluayAjbWFrZUN1cnJlbnQoKX0sIG90aGVy
d2lzZSBmYWxzZS4KICAgKiA8cD4KICAgKiBTaW5jZSBtZXRob2QgZG9lcyBub3QgcGVyZm9ybSBh
bnkgc3luY2hyb25pemF0aW9uLCBhY2N1cmF0ZSByZXN1bHQgYXJlIHJldHVybmVkIGlmIGxvY2sg
aXMgaG9sZCAtIG9ubHkuCiAgICogPC9wPgogICAqLwogIHB1YmxpYyBmaW5hbCBib29sZWFuIGhh
c1dhaXRlcnMoKSB7CiAgICByZXR1cm4gbG9jay5nZXRRdWV1ZUxlbmd0aCgpPjA7CiAgfQoKICAv
KioKICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgaG9sZCBsb2Nrcy4gU2VlIHtAbGluayBSZWN1
cnNpdmVMb2NrI2dldEhvbGRDb3VudCgpfSBmb3Igc2VtYW50aWNzLgogICAqIDxwPgogICAqIFNp
bmNlIG1ldGhvZCBkb2VzIG5vdCBwZXJmb3JtIGFueSBzeW5jaHJvbml6YXRpb24sIGFjY3VyYXRl
IHJlc3VsdCBhcmUgcmV0dXJuZWQgaWYgbG9jayBpcyBob2xkIC0gb25seS4KICAgKiA8L3A+CiAg
ICovCiAgcHVibGljIGZpbmFsIGludCBnZXRMb2NrQ291bnQoKSB7CiAgICAgIHJldHVybiBsb2Nr
LmdldEhvbGRDb3VudCgpOwogIH0KCiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAvLyBTcGVjaWFs
IEZCTyBob29rCiAgLy8KCiAgLyoqCiAgICogVHJhY2tzIHtAbGluayBHTCNHTF9GUkFNRUJVRkZF
Un0sIHtAbGluayBHTDJHTDMjR0xfRFJBV19GUkFNRUJVRkZFUn0gYW5kIHtAbGluayBHTDJHTDMj
R0xfUkVBRF9GUkFNRUJVRkZFUn0KICAgKiB0byBiZSByZXR1cm5lZCB2aWEge0BsaW5rICNnZXRC
b3VuZEZyYW1lYnVmZmVyKGludCl9LgogICAqCiAgICogPHA+SW52b2tlZCBieSB7QGxpbmsgR0wj
Z2xCaW5kRnJhbWVidWZmZXIoaW50LCBpbnQpfS4gPC9wPgogICAqCiAgICogPHA+QXNzdW1lcyB2
YWxpZCA8Y29kZT5mcmFtZWJ1ZmZlck5hbWU8L2NvZGU+IHJhbmdlIG9mIFswLi57QGxpbmsgSW50
ZWdlciNNQVhfVkFMVUV9XTwvcD4KICAgKgogICAqIDxwPkRvZXMgbm90IHRocm93IGFuIGV4Y2Vw
dGlvbiBpZiA8Y29kZT50YXJnZXQ8L2NvZGU+IGlzIHVua25vd24gb3IgPGNvZGU+ZnJhbWVidWZm
ZXJOYW1lPC9jb2RlPiBpbnZhbGlkLjwvcD4KICAgKi8KICBwdWJsaWMgZmluYWwgdm9pZCBzZXRC
b3VuZEZyYW1lYnVmZmVyKGZpbmFsIGludCB0YXJnZXQsIGZpbmFsIGludCBmcmFtZWJ1ZmZlck5h
bWUpIHsKICAgICAgaWYoMCA+IGZyYW1lYnVmZmVyTmFtZSkgewogICAgICAgICAgcmV0dXJuOyAv
LyBpZ25vcmUgaW52YWxpZCBuYW1lCiAgICAgIH0KICAgICAgc3dpdGNoKHRhcmdldCkgewogICAg
ICAgICAgY2FzZSBHTC5HTF9GUkFNRUJVRkZFUjoKICAgICAgICAgIGNhc2UgR0wuR0xfRFJBV19G
UkFNRUJVRkZFUjoKICAgICAgICAgICAgICBib3VuZEZCT1RhcmdldFswXSA9IGZyYW1lYnVmZmVy
TmFtZTsgLy8gZHJhdwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBHTC5HTF9S
RUFEX0ZSQU1FQlVGRkVSOgogICAgICAgICAgICAgIGJvdW5kRkJPVGFyZ2V0WzFdID0gZnJhbWVi
dWZmZXJOYW1lOyAvLyByZWFkCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBkZWZhdWx0
OiAvLyBpZ25vcmUgdW50cmFja2VkIHRhcmdldAogICAgICB9CiAgfQogIEBPdmVycmlkZQogIHB1
YmxpYyBmaW5hbCBpbnQgZ2V0Qm91bmRGcmFtZWJ1ZmZlcihmaW5hbCBpbnQgdGFyZ2V0KSB7CiAg
ICAgIHN3aXRjaCh0YXJnZXQpIHsKICAgICAgICAgIGNhc2UgR0wuR0xfRlJBTUVCVUZGRVI6CiAg
ICAgICAgICBjYXNlIEdMLkdMX0RSQVdfRlJBTUVCVUZGRVI6CiAgICAgICAgICAgICAgcmV0dXJu
IGJvdW5kRkJPVGFyZ2V0WzBdOyAvLyBkcmF3CiAgICAgICAgICBjYXNlIEdMLkdMX1JFQURfRlJB
TUVCVUZGRVI6CiAgICAgICAgICAgICAgcmV0dXJuIGJvdW5kRkJPVGFyZ2V0WzFdOyAvLyByZWFk
CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9y
KCJJbnZhbGlkIEZCTyB0YXJnZXQgbmFtZTogIit0b0hleFN0cmluZyh0YXJnZXQpKTsKICAgICAg
fQogIH0KCiAgQE92ZXJyaWRlCiAgcHVibGljIGZpbmFsIGludCBnZXREZWZhdWx0RHJhd0ZyYW1l
YnVmZmVyKCkgeyByZXR1cm4gZHJhd2FibGUuZ2V0RGVmYXVsdERyYXdGcmFtZWJ1ZmZlcigpOyB9
CiAgQE92ZXJyaWRlCiAgcHVibGljIGZpbmFsIGludCBnZXREZWZhdWx0UmVhZEZyYW1lYnVmZmVy
KCkgeyByZXR1cm4gZHJhd2FibGUuZ2V0RGVmYXVsdFJlYWRGcmFtZWJ1ZmZlcigpOyB9CiAgQE92
ZXJyaWRlCiAgcHVibGljIGZpbmFsIGludCBnZXREZWZhdWx0UmVhZEJ1ZmZlcigpIHsgcmV0dXJu
IGRyYXdhYmxlLmdldERlZmF1bHRSZWFkQnVmZmVyKGdsLCBkcmF3YWJsZVJlYWQgIT0gZHJhd2Fi
bGUpOyB9CgogIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgLy8gR0xfQVJCX2RlYnVnX291dHB1dCwg
R0xfQU1EX2RlYnVnX291dHB1dCBoZWxwZXJzCiAgLy8KCiAgQE92ZXJyaWRlCiAgcHVibGljIGZp
bmFsIFN0cmluZyBnZXRHTERlYnVnTWVzc2FnZUV4dGVuc2lvbigpIHsKICAgICAgcmV0dXJuIGds
RGVidWdIYW5kbGVyLmdldEV4dGVuc2lvbigpOwogIH0KCiAgQE92ZXJyaWRlCiAgcHVibGljIGZp
bmFsIGJvb2xlYW4gaXNHTERlYnVnTWVzc2FnZUVuYWJsZWQoKSB7CiAgICAgIHJldHVybiBnbERl
YnVnSGFuZGxlci5pc0VuYWJsZWQoKTsKICB9CgogIEBPdmVycmlkZQogIHB1YmxpYyBmaW5hbCBp
bnQgZ2V0Q29udGV4dENyZWF0aW9uRmxhZ3MoKSB7CiAgICAgIHJldHVybiBhZGRpdGlvbmFsQ3R4
Q3JlYXRpb25GbGFnczsKICB9CgogIEBPdmVycmlkZQogIHB1YmxpYyBmaW5hbCB2b2lkIHNldENv
bnRleHRDcmVhdGlvbkZsYWdzKGZpbmFsIGludCBmbGFncykgewogICAgICBpZighaXNDcmVhdGVk
KCkpIHsKICAgICAgICAgIGFkZGl0aW9uYWxDdHhDcmVhdGlvbkZsYWdzID0gZmxhZ3MgJiBHTENv
bnRleHQuQ1RYX09QVElPTl9ERUJVRzsKICAgICAgfQogIH0KCiAgQE92ZXJyaWRlCiAgcHVibGlj
IGZpbmFsIGJvb2xlYW4gaXNHTERlYnVnU3luY2hyb25vdXMoKSB7IHJldHVybiBnbERlYnVnSGFu
ZGxlci5pc1N5bmNocm9ub3VzKCk7IH0KCiAgQE92ZXJyaWRlCiAgcHVibGljIGZpbmFsIHZvaWQg
c2V0R0xEZWJ1Z1N5bmNocm9ub3VzKGZpbmFsIGJvb2xlYW4gc3luY2hyb25vdXMpIHsKICAgICAg
Z2xEZWJ1Z0hhbmRsZXIuc2V0U3luY2hyb25vdXMoc3luY2hyb25vdXMpOwogIH0KCiAgQE92ZXJy
aWRlCiAgcHVibGljIGZpbmFsIHZvaWQgZW5hYmxlR0xEZWJ1Z01lc3NhZ2UoZmluYWwgYm9vbGVh
biBlbmFibGUpIHRocm93cyBHTEV4Y2VwdGlvbiB7CiAgICAgIGlmKCFpc0NyZWF0ZWQoKSkgewog
ICAgICAgICAgaWYoZW5hYmxlKSB7CiAgICAgICAgICAgICAgYWRkaXRpb25hbEN0eENyZWF0aW9u
RmxhZ3MgfD0gIEdMQ29udGV4dC5DVFhfT1BUSU9OX0RFQlVHOwogICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICBhZGRpdGlvbmFsQ3R4Q3JlYXRpb25GbGFncyAmPSB+R0xDb250ZXh0LkNU
WF9PUFRJT05fREVCVUc7CiAgICAgICAgICB9CiAgICAgIH0gZWxzZSBpZigwICE9IChhZGRpdGlv
bmFsQ3R4Q3JlYXRpb25GbGFncyAmIEdMQ29udGV4dC5DVFhfT1BUSU9OX0RFQlVHKSAmJgogICAg
ICAgICAgICAgICAgbnVsbCAhPSBnZXRHTERlYnVnTWVzc2FnZUV4dGVuc2lvbigpKSB7CiAgICAg
ICAgICBnbERlYnVnSGFuZGxlci5lbmFibGUoZW5hYmxlKTsKICAgICAgfQogIH0KCiAgQE92ZXJy
aWRlCiAgcHVibGljIGZpbmFsIHZvaWQgYWRkR0xEZWJ1Z0xpc3RlbmVyKGZpbmFsIEdMRGVidWdM
aXN0ZW5lciBsaXN0ZW5lcikgewogICAgICBnbERlYnVnSGFuZGxlci5hZGRMaXN0ZW5lcihsaXN0
ZW5lcik7CiAgfQoKICBAT3ZlcnJpZGUKICBwdWJsaWMgZmluYWwgdm9pZCByZW1vdmVHTERlYnVn
TGlzdGVuZXIoZmluYWwgR0xEZWJ1Z0xpc3RlbmVyIGxpc3RlbmVyKSB7CiAgICAgIGdsRGVidWdI
YW5kbGVyLnJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTsKICB9CgogIEBPdmVycmlkZQogIHB1Ymxp
YyBmaW5hbCB2b2lkIGdsRGVidWdNZXNzYWdlQ29udHJvbChmaW5hbCBpbnQgc291cmNlLCBmaW5h
bCBpbnQgdHlwZSwgZmluYWwgaW50IHNldmVyaXR5LCBmaW5hbCBpbnQgY291bnQsIGZpbmFsIElu
dEJ1ZmZlciBpZHMsIGZpbmFsIGJvb2xlYW4gZW5hYmxlZCkgewogICAgICBpZihnbERlYnVnSGFu
ZGxlci5pc0V4dGVuc2lvbktIUkFSQigpKSB7CiAgICAgICAgICBnbC5nZXRHTDJFUzIoKS5nbERl
YnVnTWVzc2FnZUNvbnRyb2woc291cmNlLCB0eXBlLCBzZXZlcml0eSwgY291bnQsIGlkcywgZW5h
YmxlZCk7CiAgICAgIH0gZWxzZSBpZihnbERlYnVnSGFuZGxlci5pc0V4dGVuc2lvbkFNRCgpKSB7
CiAgICAgICAgICBnbC5nZXRHTDJHTDMoKS5nbERlYnVnTWVzc2FnZUVuYWJsZUFNRChHTERlYnVn
TWVzc2FnZS50cmFuc2xhdGVBUkIyQU1EQ2F0ZWdvcnkoc291cmNlLCB0eXBlKSwgc2V2ZXJpdHks
IGNvdW50LCBpZHMsIGVuYWJsZWQpOwogICAgICB9CiAgfQoKICBAT3ZlcnJpZGUKICBwdWJsaWMg
ZmluYWwgdm9pZCBnbERlYnVnTWVzc2FnZUNvbnRyb2woZmluYWwgaW50IHNvdXJjZSwgZmluYWwg
aW50IHR5cGUsIGZpbmFsIGludCBzZXZlcml0eSwgZmluYWwgaW50IGNvdW50LCBmaW5hbCBpbnRb
XSBpZHMsIGZpbmFsIGludCBpZHNfb2Zmc2V0LCBmaW5hbCBib29sZWFuIGVuYWJsZWQpIHsKICAg
ICAgaWYoZ2xEZWJ1Z0hhbmRsZXIuaXNFeHRlbnNpb25LSFJBUkIoKSkgewogICAgICAgICAgZ2wu
Z2V0R0wyRVMyKCkuZ2xEZWJ1Z01lc3NhZ2VDb250cm9sKHNvdXJjZSwgdHlwZSwgc2V2ZXJpdHks
IGNvdW50LCBpZHMsIGlkc19vZmZzZXQsIGVuYWJsZWQpOwogICAgICB9IGVsc2UgaWYoZ2xEZWJ1
Z0hhbmRsZXIuaXNFeHRlbnNpb25BTUQoKSkgewogICAgICAgICAgZ2wuZ2V0R0wyR0wzKCkuZ2xE
ZWJ1Z01lc3NhZ2VFbmFibGVBTUQoR0xEZWJ1Z01lc3NhZ2UudHJhbnNsYXRlQVJCMkFNRENhdGVn
b3J5KHNvdXJjZSwgdHlwZSksIHNldmVyaXR5LCBjb3VudCwgaWRzLCBpZHNfb2Zmc2V0LCBlbmFi
bGVkKTsKICAgICAgfQogIH0KCiAgQE92ZXJyaWRlCiAgcHVibGljIGZpbmFsIHZvaWQgZ2xEZWJ1
Z01lc3NhZ2VJbnNlcnQoZmluYWwgaW50IHNvdXJjZSwgZmluYWwgaW50IHR5cGUsIGZpbmFsIGlu
dCBpZCwgZmluYWwgaW50IHNldmVyaXR5LCBmaW5hbCBTdHJpbmcgYnVmKSB7CiAgICAgIGZpbmFs
IGludCBsZW4gPSAobnVsbCAhPSBidWYpID8gYnVmLmxlbmd0aCgpIDogMDsKICAgICAgaWYoZ2xE
ZWJ1Z0hhbmRsZXIuaXNFeHRlbnNpb25LSFJBUkIoKSkgewogICAgICAgICAgZ2wuZ2V0R0wyRVMy
KCkuZ2xEZWJ1Z01lc3NhZ2VJbnNlcnQoc291cmNlLCB0eXBlLCBpZCwgc2V2ZXJpdHksIGxlbiwg
YnVmKTsKICAgICAgfSBlbHNlIGlmKGdsRGVidWdIYW5kbGVyLmlzRXh0ZW5zaW9uQU1EKCkpIHsK
ICAgICAgICAgIGdsLmdldEdMMkdMMygpLmdsRGVidWdNZXNzYWdlSW5zZXJ0QU1EKEdMRGVidWdN
ZXNzYWdlLnRyYW5zbGF0ZUFSQjJBTURDYXRlZ29yeShzb3VyY2UsIHR5cGUpLCBzZXZlcml0eSwg
aWQsIGxlbiwgYnVmKTsKICAgICAgfQogIH0KCiAgLyoqIEludGVybmFsIGJvb3RzdHJhcGluZyBn
bEdldFN0cmluZyhHTF9SRU5ERVJFUikgKi8KICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgU3RyaW5n
IGdsR2V0U3RyaW5nSW50KGludCBuYW1lLCBsb25nIHByb2NBZGRyZXNzKTsKCiAgLyoqIEludGVy
bmFsIGJvb3RzdHJhcGluZyBnbEdldEludGVnZXJ2KC4uKSBmb3IgdmVyc2lvbiAqLwogIHByaXZh
dGUgc3RhdGljIG5hdGl2ZSB2b2lkIGdsR2V0SW50ZWdlcnZJbnQoaW50IHBuYW1lLCBpbnRbXSBw
YXJhbXMsIGludCBwYXJhbXNfb2Zmc2V0LCBsb25nIHByb2NBZGRyZXNzKTsKfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>803</attachid>
            <date>2019-03-24 20:55:05 +0100</date>
            <delta_ts>2019-03-24 20:55:05 +0100</delta_ts>
            <desc>Diff of GLContextImpl</desc>
            <filename>bug1357patch.txt</filename>
            <type>text/plain</type>
            <size>4317</size>
            <attacher name="Julien Gouesse">gouessej</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL3NyYy9qb2dsL2NsYXNzZXMvam9nYW1wL29wZW5nbC9HTENvbnRleHRJbXBs
LmphdmEgYi9zcmMvam9nbC9jbGFzc2VzL2pvZ2FtcC9vcGVuZ2wvR0xDb250ZXh0SW1wbC5qYXZh
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAppbmRleCAzMWE4ZTQ4OWUuLmY2ZDM3ZmIzMSAxMDA2NDQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCi0tLSBhL3NyYy9qb2dsL2NsYXNzZXMvam9nYW1wL29wZW5nbC9HTENvbnRleHRJbXBsLmph
dmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKKysrIGIvc3JjL2pvZ2wvY2xhc3Nlcy9qb2dhbXAvb3BlbmdsL0dMQ29udGV4dEltcGwu
amF2YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIApAQCAtMjEzMyw3ICsyMTMzLDcgQEAgcHVibGljIGFic3RyYWN0IGNsYXNzIEdMQ29u
dGV4dEltcGwgZXh0ZW5kcyBHTENvbnRleHQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgZmluYWwgYm9vbGVhbiBpc0VTID0gMCAhPSAoIGN0cCAmIEdMQ29udGV4
dC5DVFhfUFJPRklMRV9FUyApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICBmaW5hbCBib29sZWFuIGlzWDExID0gTmF0aXZlV2luZG93RmFjdG9y
eS5UWVBFX1gxMSA9PSBOYXRpdmVXaW5kb3dGYWN0b3J5LmdldE5hdGl2ZVdpbmRvd1R5cGUodHJ1
ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgIGZpbmFsIGJvb2xlYW4gaXNXaW5kb3dzID0gUGxhdGZvcm0uZ2V0
T1NUeXBlKCkgPT0gUGxhdGZvcm0uT1NUeXBlLldJTkRPV1M7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgZmluYWwgYm9vbGVhbiBpc0RyaXZlck1lc2EgPSBnbFJlbmRl
cmVyLmNvbnRhaW5zKE1lc2FTUCkgfHwgZ2xSZW5kZXJlci5jb250YWlucygiR2FsbGl1bSAiKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICBmaW5hbCBib29sZWFuIGlzRHJpdmVyTWVzYSA9IGdsUmVu
ZGVyZXIuY29udGFpbnMoTWVzYVNQKSB8fCBnbFJlbmRlcmVyLmNvbnRhaW5zKCJHYWxsaXVtICIp
IHx8IGdsVmVyc2lvbi5jb250YWlucyhNZXNhU1ApOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgZmluYWwgYm9vbGVhbiBpc0RyaXZlckFUSUNhdGFs
eXN0OwogICAgIGZpbmFsIGJvb2xlYW4gaXNEcml2ZXJOVklESUFHZUZvcmNlOwpAQCAtMjM0Nyw4
ICsyMzQ3LDEwIEBAIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBHTENvbnRleHRJbXBsIGV4dGVuZHMg
R0xDb250ZXh0IHsKICAgICBpZiggaXNEcml2ZXJNZXNhICkgewogICAgICAgICBmaW5hbCBWZXJz
aW9uTnVtYmVyIG1lc2FTYWZlRkJPVmVyc2lvbiA9IG5ldyBWZXJzaW9uTnVtYmVyKDgsIDAsIDAp
OwogICAgICAgICBmaW5hbCBWZXJzaW9uTnVtYmVyIG1lc2FJbnRlbEJ1Z2d5U2hhcmVkQ3R4OTIx
ID0gbmV3IFZlcnNpb25OdW1iZXIoOSwgMiwgMSk7CisgICAgICAgIGZpbmFsIFZlcnNpb25OdW1i
ZXIgbWVzYVNhZmVEb3VibGVCdWZmZXJlZFBCdWZmZXIgPSBuZXcgVmVyc2lvbk51bWJlcigxOCwg
MiwgMik7CisgICAgICAgIGZpbmFsIFZlcnNpb25OdW1iZXIgbWVzYVNhZmVTZXRTd2FwSW50ZXJ2
YWxQb3N0UmV0YXJnZXQgPSBuZXcgVmVyc2lvbk51bWJlcigxOCwgMiwgMik7CiAKLSAgICAgICAg
eworICAgICAgICBpZiggdmVuZG9yVmVyc2lvbi5jb21wYXJlVG8obWVzYVNhZmVTZXRTd2FwSW50
ZXJ2YWxQb3N0UmV0YXJnZXQpIDwgMCApIHsKICAgICAgICAgICAgIGZpbmFsIGludCBxdWlyayA9
IEdMUmVuZGVyZXJRdWlya3MuTm9TZXRTd2FwSW50ZXJ2YWxQb3N0UmV0YXJnZXQ7CiAgICAgICAg
ICAgICBpZihERUJVRykgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiUXVp
cms6ICIrR0xSZW5kZXJlclF1aXJrcy50b1N0cmluZyhxdWlyaykrIjogY2F1c2U6IFJlbmRlcmVy
ICIgKyBnbFJlbmRlcmVyKTsKQEAgLTIzNTcsMTEgKzIzNTksMTMgQEAgcHVibGljIGFic3RyYWN0
IGNsYXNzIEdMQ29udGV4dEltcGwgZXh0ZW5kcyBHTENvbnRleHQgewogICAgICAgICB9CiAgICAg
ICAgIGlmKCBod0FjY2VsICkgewogICAgICAgICAgICAgLy8gaGFyZHdhcmUtYWNjZWxlcmF0aW9u
Ci0gICAgICAgICAgICBmaW5hbCBpbnQgcXVpcmsgPSBHTFJlbmRlcmVyUXVpcmtzLk5vRG91Ymxl
QnVmZmVyZWRQQnVmZmVyOwotICAgICAgICAgICAgaWYoREVCVUcpIHsKLSAgICAgICAgICAgICAg
ICBTeXN0ZW0uZXJyLnByaW50bG4oIlF1aXJrOiAiK0dMUmVuZGVyZXJRdWlya3MudG9TdHJpbmco
cXVpcmspKyI6IGNhdXNlOiBSZW5kZXJlciAiICsgZ2xSZW5kZXJlcik7CisgICAgICAgICAgICBp
ZiggdmVuZG9yVmVyc2lvbi5jb21wYXJlVG8obWVzYVNhZmVEb3VibGVCdWZmZXJlZFBCdWZmZXIp
IDwgMCApIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgcXVpcmsgPSBHTFJlbmRlcmVyUXVp
cmtzLk5vRG91YmxlQnVmZmVyZWRQQnVmZmVyOworICAgICAgICAgICAgICAgIGlmKERFQlVHKSB7
CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiUXVpcms6ICIrR0xSZW5k
ZXJlclF1aXJrcy50b1N0cmluZyhxdWlyaykrIjogY2F1c2U6IFJlbmRlcmVyICIgKyBnbFJlbmRl
cmVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcXVpcmtzLmFkZFF1aXJr
KCBxdWlyayApOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcXVpcmtzLmFkZFF1aXJrKCBx
dWlyayApOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gc29mdHdhcmUKICAgICAg
ICAgICAgIGlmKCB2ZW5kb3JWZXJzaW9uLmNvbXBhcmVUbyhtZXNhU2FmZUZCT1ZlcnNpb24pIDwg
MCApIHsgLy8gRklYTUU6IElzIGl0IGZpeGVkIGluID49IDguMC4wID8K
</data>

          </attachment>
      

    </bug>

</bugzilla>