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

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>223734</bug_id>
          
          <creation_ts>2021-03-25 01:19:32 -0700</creation_ts>
          <short_desc>Depth test affects WebGL rendering when context has depth == false, stencil == true</short_desc>
          <delta_ts>2022-08-11 02:40:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>CONFIGURATION CHANGED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>223735</dependson>
    
    <dependson>242657</dependson>
          <blocked>222812</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kimmo Kinnunen">kkinnunen</reporter>
          <assigned_to name="Kimmo Kinnunen">kkinnunen</assigned_to>
          <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jdarpinian</cc>
    
    <cc>kbr</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>kpiddington</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1743689</commentid>
    <comment_count>0</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-03-25 01:19:32 -0700</bug_when>
    <thetext>Depth test affects WebGL rendering when context has depth == false, stencil == true

Happens when stencil is enabled and stencil is stencil+depth.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743725</commentid>
    <comment_count>1</comment_count>
      <attachid>424231</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-03-25 03:45:46 -0700</bug_when>
    <thetext>Created attachment 424231
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743827</commentid>
    <comment_count>2</comment_count>
      <attachid>424231</attachid>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2021-03-25 10:59:57 -0700</bug_when>
    <thetext>Comment on attachment 424231
Patch

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

Overall, this should certainly work to keep depth and stencil correctly set.

&gt; Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:7694
&gt; +    enableOrDisable(GraphicsContextGL::DEPTH_TEST, enable);

The logic here is sound. I also believe that you could get a similar result in Metal_Angle by attaching a d24s8 attachment to just STENCIL_ATTACHMENT instead of always DEPTH_STENCIL_ATTACHMENT when available. See void GraphicsContextGLOpenGL::attachDepthAndStencilBufferIfNeeded(GLuint internalDepthStencilFormat, int width, int height) in GraphicsContextANGLE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744967</commentid>
    <comment_count>3</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2021-03-29 15:43:58 -0700</bug_when>
    <thetext>Great work on this Kimmo - would be great if you could propose the conformance test changes as a pull request against https://github.com/KhronosGroup/WebGL .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745072</commentid>
    <comment_count>4</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-03-30 03:45:17 -0700</bug_when>
    <thetext>(In reply to Kyle Piddington from comment #2)
&gt; The logic here is sound. I also believe that you could get a similar result
&gt; in Metal_Angle by attaching a d24s8 attachment to just STENCIL_ATTACHMENT
&gt; instead of always DEPTH_STENCIL_ATTACHMENT when available. See void
&gt; GraphicsContextGLOpenGL::attachDepthAndStencilBufferIfNeeded(GLuint
&gt; internalDepthStencilFormat, int width, int height) in GraphicsContextANGLE

Kyle, thanks for the review.
I&apos;m hesitant to do that cleanup yet since there&apos;s this comment
        // WebGL 1.0&apos;s rules state that combined depth/stencil renderbuffers
        // have to be attached to the synthetic DEPTH_STENCIL_ATTACHMENT point.

I don&apos;t know enough of the spec / implementation to say if storing the stencil depth buffer in stencil for the case stencil=true, depth=false would satisfy the getter behavior we currently have or should have.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745183</commentid>
    <comment_count>5</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2021-03-30 10:58:04 -0700</bug_when>
    <thetext>(In reply to Kimmo Kinnunen from comment #4)
&gt; (In reply to Kyle Piddington from comment #2)
&gt; &gt; The logic here is sound. I also believe that you could get a similar result
&gt; &gt; in Metal_Angle by attaching a d24s8 attachment to just STENCIL_ATTACHMENT
&gt; &gt; instead of always DEPTH_STENCIL_ATTACHMENT when available. See void
&gt; &gt; GraphicsContextGLOpenGL::attachDepthAndStencilBufferIfNeeded(GLuint
&gt; &gt; internalDepthStencilFormat, int width, int height) in GraphicsContextANGLE
&gt; 
&gt; Kyle, thanks for the review.
&gt; I&apos;m hesitant to do that cleanup yet since there&apos;s this comment
&gt;         // WebGL 1.0&apos;s rules state that combined depth/stencil renderbuffers
&gt;         // have to be attached to the synthetic DEPTH_STENCIL_ATTACHMENT
&gt; point.
&gt; 
&gt; I don&apos;t know enough of the spec / implementation to say if storing the
&gt; stencil depth buffer in stencil for the case stencil=true, depth=false would
&gt; satisfy the getter behavior we currently have or should have.

Hopefully the WebGL 1.0 and 2.0 conformance tests should cover this behavior well.

The bookkeeping for WebGL 1.0&apos;s synthetic DEPTH_STENCIL_ATTACHMENT can / should be managed entirely at the WebGLRenderingContextBase / WebGL2RenderingContext level, so maybe GraphicsContextANGLE can offer the semantic that Kyle suggests (depth/stencil are combined, and the same object is attached separately to the DEPTH and STENCIL attachment points). See the associated code in Chromium:

https://source.chromium.org/search?q=DEPTH_STENCIL_ATTACHMENT%20f:third_party%2Fblink%2Frenderer%2Fmodules%2Fwebgl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745958</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-01 01:20:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/76093639&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786388</commentid>
    <comment_count>7</comment_count>
      <attachid>436182</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-08-23 04:14:03 -0700</bug_when>
    <thetext>Created attachment 436182
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786475</commentid>
    <comment_count>8</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-08-23 11:01:12 -0700</bug_when>
    <thetext>https://github.com/KhronosGroup/WebGL/issues/3277</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1890525</commentid>
    <comment_count>9</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-08-11 02:40:08 -0700</bug_when>
    <thetext>This is fixed in bug 242657 and the patch is not needed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424231</attachid>
            <date>2021-03-25 03:45:46 -0700</date>
            <delta_ts>2021-08-23 04:13:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223734-20210325124544.patch</filename>
            <type>text/plain</type>
            <size>26393</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MDEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjMwMjcyZDA5MjQ3MDI4
NWZiZTk4NjVlMDVjYWI2ZmU2MGJjODk0MC4uYjI2NTY4ZDJjYTZmMTMyNjQ0YjIwOGE2OGYxOTdi
ZjQ1Y2Q5YmI0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDIxLTAzLTI1ICBLaW1t
byBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgRGVwdGggdGVzdCBh
ZmZlY3RzIFdlYkdMIHJlbmRlcmluZyB3aGVuIGNvbnRleHQgaGFzIGRlcHRoID09IGZhbHNlLCBz
dGVuY2lsID09IHRydWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMzczNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdoZW4gdGhlIGNvbnRleHQgZGVmYXVsdCBmcmFtZWJ1ZmZlciBkb2VzIG5vdCBoYXZl
IGRlcHRoIGJ1ZmZlciwgREVQVEhfVEVTVCBzaG91bGQgbm90IGFmZmVjdAorICAgICAgICB0aGUg
cmVuZGVyaW5nIHJlc3VsdC4KKworICAgICAgICBCZWZvcmUgdGhlIGNoYW5nZSwgdGhlIERFUFRI
X1RFU1Qgd291bGQgYWZmZWN0IHRoZSByZW5kZXJpbmcgcmVzdWx0IGlmIGNsaWVudCBoYWQgcmVx
dWVzdGVkCisgICAgICAgIHN0ZW5jaWwgYnVmZmVyIGJ1dCBub3QgYSBkZXB0aCBidWZmZXIuIFRo
aXMgaXMgZHVlIHRvIHRoZSBmYWN0IHRoYXQgdGhlIGltcGxlbWVudGF0aW9uCisgICAgICAgIGNv
bWJpbmVzIGRlcHRoIGFuZCBzdGVuY2lsLgorCisgICAgICAgIFNpbXVsYXRlIHRoYXQgdGhlIHVu
ZGVybHlpbmcgZnJhbWVidWZmZXIgd291bGQgbm90IGhhdmUgZGVwdGggYnVmZmVyIGJ5IGRpc2Fi
bGluZyBERVBUSF9URVNUCisgICAgICAgIGFsd2F5cyB3aGVuIGRlZmF1bHQgZnJhbWVidWZmZXIg
aXMgYWN0aXZhdGVkLiBUaGlzIGNvcGllcyB0aGUgYWxyZWFkeSB3b3JraW5nIHNpbWlsYXIgbG9n
aWMKKyAgICAgICAgZm9yIFNURU5DSUxfVEVTVC4KKworICAgICAgICBBZGRzIHRlc3QgaW4gTGF5
b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9jb25mb3JtYW5jZS9jb250ZXh0L2NvbnRleHQtYXR0cmli
dXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sCisKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJh
bWVidWZmZXI6Omhhc0RlcHRoQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTEZyYW1lYnVmZmVyLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjppbml0aWFsaXplTmV3Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmVuYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQYXJhbWV0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVuZGVyYnVmZmVy
U3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjph
cHBseVN0ZW5jaWxUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmFwcGx5RGVwdGhUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnNldEZyYW1lYnVmZmVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmg6CisKIDIwMjEtMDMtMjQgIFl1c3VrZSBTdXp1a2kgIDx5
c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBBbGwgc3RyaW5nIHJlc291cmNlcyBmcm9tIFVz
ZXJBZ2VudFN0eWxlU2hlZXRzIC8gVXNlckFnZW50U2NyaXB0cyBzaG91bGQgYmUgdXNlZCBhcyBu
b24tY29weWluZyBTdHJpbmdJbXBsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMRnJhbWVidWZmZXIuY3BwCmluZGV4IDk1YWJjMDMzZTJjNmVkNGZlYTI1OTQ5NDMzY2QxMzBk
N2YzNWZiNTcuLjUzMDBiNjk3NzBmMmNiMDRiMDFlZGI2YTM4NGY5YTdmNGJkOTdhMGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCkBAIC01
ODcsNiArNTg3LDE1IEBAIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aGFzU3RlbmNpbEJ1ZmZlcigp
IGNvbnN0CiAgICAgcmV0dXJuIGF0dGFjaG1lbnQgJiYgYXR0YWNobWVudC0+aXNWYWxpZCgpOwog
fQogCisKK2Jvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aGFzRGVwdGhCdWZmZXIoKSBjb25zdAorewor
ICAgIFJlZlB0cjxXZWJHTEF0dGFjaG1lbnQ+IGF0dGFjaG1lbnQgPSBnZXRBdHRhY2htZW50KEdy
YXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpOworICAgIGlmICghYXR0
YWNobWVudCkKKyAgICAgICAgYXR0YWNobWVudCA9IGdldEF0dGFjaG1lbnQoR3JhcGhpY3NDb250
ZXh0R0w6OkRFUFRIX0FUVEFDSE1FTlQpOworICAgIHJldHVybiBhdHRhY2htZW50ICYmIGF0dGFj
aG1lbnQtPmlzVmFsaWQoKTsKK30KKwogdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVPYmpl
Y3RJbXBsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIEdyYXBoaWNzQ29udGV4dEdMKiBj
b250ZXh0M2QsIFBsYXRmb3JtR0xPYmplY3Qgb2JqZWN0KQogewogICAgIGZvciAoYXV0byYgYXR0
YWNobWVudCA6IG1fYXR0YWNobWVudHMudmFsdWVzKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKaW5kZXggYzUzODkzOTEwOWE5ODA4NDBhNzIxNDhk
MjNmODcyMTAzZTJiZmVmYi4uYjdhYjRjZDg2OGFlNjdiMzYzNjM3NTNmZTgyMzRlYzgyYmVlNWQw
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaApA
QCAtMTExLDYgKzExMSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc0V2ZXJCZWVuQm91bmQo
KSB7IG1faGFzRXZlckJlZW5Cb3VuZCA9IHRydWU7IH0KIAogICAgIGJvb2wgaGFzU3RlbmNpbEJ1
ZmZlcigpIGNvbnN0OworICAgIGJvb2wgaGFzRGVwdGhCdWZmZXIoKSBjb25zdDsKIAogICAgIC8v
IFdyYXBwZXIgZm9yIGRyYXdCdWZmZXJzRVhUL2RyYXdCdWZmZXJzQVJCIHRvIHdvcmsgYXJvdW5k
IGEgZHJpdmVyIGJ1Zy4KICAgICB2b2lkIGRyYXdCdWZmZXJzKGNvbnN0IFZlY3RvcjxHQ0dMZW51
bT4mIGJ1ZnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCAyZGQ3MDcxNDAzNzY1ZmQ4MmFhZDkyMjQ2
Y2ZmOWMyOGE3NDMyYjQ3Li4wNGQwNDZiOTA5NGYxYTFhY2VmZGJlNTY0Mjk1Y2ViNGQ1MWJmYzIz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmNwcApAQCAtODczLDYgKzg3Myw3IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6aW5pdGlhbGl6ZU5ld0NvbnRleHQoKQogICAgIG1fcmVuZGVyYnVmZmVy
QmluZGluZyA9IG51bGxwdHI7CiAgICAgbV9kZXB0aE1hc2sgPSB0cnVlOwogICAgIG1fc3RlbmNp
bEVuYWJsZWQgPSBmYWxzZTsKKyAgICBtX2RlcHRoRW5hYmxlZCA9IGZhbHNlOwogICAgIG1fc3Rl
bmNpbE1hc2sgPSAweEZGRkZGRkZGOwogICAgIG1fc3RlbmNpbE1hc2tCYWNrID0gMHhGRkZGRkZG
RjsKICAgICBtX3N0ZW5jaWxGdW5jUmVmID0gMDsKQEAgLTIxODMsMTQgKzIxODQsMTMgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNhYmxlKEdDR0xlbnVtIGNhcCkKIHsKICAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoImRp
c2FibGUiLCBjYXApKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKGNhcCA9PSBHcmFwaGljc0Nv
bnRleHRHTDo6U1RFTkNJTF9URVNUKSB7CisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHRH
TDo6U1RFTkNJTF9URVNUKQogICAgICAgICBtX3N0ZW5jaWxFbmFibGVkID0gZmFsc2U7Ci0gICAg
ICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAo
Y2FwID09IEdyYXBoaWNzQ29udGV4dEdMOjpTQ0lTU09SX1RFU1QpCisgICAgZWxzZSBpZiAoY2Fw
ID09IEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9URVNUKQorICAgICAgICBtX2RlcHRoRW5hYmxl
ZCA9IGZhbHNlOworICAgIGVsc2UgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHRHTDo6U0NJU1NP
Ul9URVNUKQogICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7Ci0gICAgaWYgKGNhcCA9
PSBHcmFwaGljc0NvbnRleHRHTDo6UkFTVEVSSVpFUl9ESVNDQVJEKQorICAgIGVsc2UgaWYgKGNh
cCA9PSBHcmFwaGljc0NvbnRleHRHTDo6UkFTVEVSSVpFUl9ESVNDQVJEKQogICAgICAgICBtX3Jh
c3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCA9IGZhbHNlOwogICAgIG1fY29udGV4dC0+ZGlzYWJsZShj
YXApOwogfQpAQCAtMjY4Miw5ICsyNjgyLDE0IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKICAgICAgICAgYXBwbHlTdGVuY2lsVGVzdCgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0R0w6
OkRFUFRIX1RFU1QpIHsKKyAgICAgICAgbV9kZXB0aEVuYWJsZWQgPSB0cnVlOworICAgICAgICBh
cHBseURlcHRoVGVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlmIChjYXAgPT0g
R3JhcGhpY3NDb250ZXh0R0w6OlNDSVNTT1JfVEVTVCkKICAgICAgICAgbV9zY2lzc29yRW5hYmxl
ZCA9IHRydWU7Ci0gICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHRHTDo6UkFTVEVSSVpFUl9E
SVNDQVJEKQorICAgIGVsc2UgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHRHTDo6UkFTVEVSSVpF
Ul9ESVNDQVJEKQogICAgICAgICBtX3Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCA9IHRydWU7CiAg
ICAgbV9jb250ZXh0LT5lbmFibGUoY2FwKTsKIH0KQEAgLTI3NTEsNiArMjc1Niw3IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51CiAKICAgICBmcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0dGFjaG1l
bnRGb3JCb3VuZEZyYW1lYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgYnVmZmVyKTsKICAgICBh
cHBseVN0ZW5jaWxUZXN0KCk7CisgICAgYXBwbHlEZXB0aFRlc3QoKTsKIH0KIAogdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdldCwgV2ViR0xUZXh0dXJl
KiB0ZXh0dXJlLCBHQ0dMaW50IGxldmVsKQpAQCAtMjc4MSw2ICsyNzg3LDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIGEKIAogICAgIGZyYW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNobWVudEZv
ckJvdW5kRnJhbWVidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUs
IGxldmVsLCAwKTsKICAgICBhcHBseVN0ZW5jaWxUZXN0KCk7CisgICAgYXBwbHlEZXB0aFRlc3Qo
KTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmcm9udEZhY2UoR0NHTGVu
dW0gbW9kZSkKQEAgLTMwMjAsNyArMzAyNyw3IEBAIFdlYkdMQW55IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldFBhcmFtZXRlcihHQ0dMZW51bSBwbmFtZSkKICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpERVBUSF9SQU5HRToKICAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJh
eVBhcmFtZXRlcihwbmFtZSk7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfVEVT
VDoKLSAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOworICAgICAgICBy
ZXR1cm4gbV9kZXB0aEVuYWJsZWQ7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhf
V1JJVEVNQVNLOgogICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CiAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RElUSEVSOgpAQCAtNDQ1OSw2ICs0NDY2LDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGVudW0gaW4KICAgICAgICAgcmV0dXJuOwogICAgIHJlbmRlcmJ1ZmZl
clN0b3JhZ2VJbXBsKHRhcmdldCwgMCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZ1
bmN0aW9uTmFtZSk7CiAgICAgYXBwbHlTdGVuY2lsVGVzdCgpOworICAgIGFwcGx5RGVwdGhUZXN0
KCk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVuZGVyYnVmZmVyU3Rv
cmFnZUltcGwoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgc2FtcGxlcywgR0NHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lKQpAQCAtNzY3MiwxNiArNzY4MCwxOCBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnN5bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9yLCBjb25zdCBj
aGFyKiBmdQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFwcGx5U3RlbmNpbFRl
c3QoKQogewotICAgIGJvb2wgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBmYWxzZTsKKyAgICBib29sIGVu
YWJsZSA9IG1fc3RlbmNpbEVuYWJsZWQ7CisgICAgaWYgKGVuYWJsZSkKKyAgICAgICAgZW5hYmxl
ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPyBtX2ZyYW1lYnVmZmVyQmluZGluZy0+aGFzU3RlbmNp
bEJ1ZmZlcigpIDogZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKS0+c3RlbmNpbDsKKyAgICBlbmFibGVP
ckRpc2FibGUoR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfVEVTVCwgZW5hYmxlKTsKK30KIAot
ICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIg
PSBtX2ZyYW1lYnVmZmVyQmluZGluZy0+aGFzU3RlbmNpbEJ1ZmZlcigpOwotICAgIGVsc2Ugewot
ICAgICAgICBhdXRvIGF0dHJpYnV0ZXMgPSBnZXRDb250ZXh0QXR0cmlidXRlcygpOwotICAgICAg
ICBBU1NFUlQoYXR0cmlidXRlcyk7Ci0gICAgICAgIGhhdmVTdGVuY2lsQnVmZmVyID0gYXR0cmli
dXRlcy0+c3RlbmNpbDsKLSAgICB9Ci0gICAgZW5hYmxlT3JEaXNhYmxlKEdyYXBoaWNzQ29udGV4
dEdMOjpTVEVOQ0lMX1RFU1QsIG1fc3RlbmNpbEVuYWJsZWQgJiYgaGF2ZVN0ZW5jaWxCdWZmZXIp
Owordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphcHBseURlcHRoVGVzdCgpCit7Cisg
ICAgYm9vbCBlbmFibGUgPSBtX2RlcHRoRW5hYmxlZDsKKyAgICBpZiAoZW5hYmxlKQorICAgICAg
ICBlbmFibGUgPSBtX2ZyYW1lYnVmZmVyQmluZGluZyA/IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5o
YXNEZXB0aEJ1ZmZlcigpIDogZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKS0+ZGVwdGg7CisgICAgZW5h
YmxlT3JEaXNhYmxlKEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9URVNULCBlbmFibGUpOwogfQog
CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmVuYWJsZU9yRGlzYWJsZShHQ0dMZW51
bSBjYXBhYmlsaXR5LCBib29sIGVuYWJsZSkKQEAgLTc3MzIsNiArNzc0Miw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2V0RnJhbWVidWZmZXIoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImLCBHQ0dMZW51bSB0CiAgICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6RlJB
TUVCVUZGRVIgfHwgdGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpEUkFXX0ZSQU1FQlVGRkVS
KSB7CiAgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gYnVmZmVyOwogICAgICAgICBhcHBs
eVN0ZW5jaWxUZXN0KCk7CisgICAgICAgIGFwcGx5RGVwdGhUZXN0KCk7CiAgICAgfQogICAgIG1f
Y29udGV4dC0+YmluZEZyYW1lYnVmZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5oCmluZGV4IGExYjQ5ZGUzNzZhNzU4NWQ3M2MxYTAzMjNlMTYzYmQ1ZDIzODk3
NDguLmE5Y2IzMjFkYTA4M2Q4YTNjZTFhZGRhOGI0MzZlNTc1N2ExYzY4YzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmgKQEAgLTY1Myw3ICs2NTMsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgR0NHTGJvb2xlYW4gbV9jb2xv
ck1hc2tbNF07CiAgICAgR0NHTGJvb2xlYW4gbV9kZXB0aE1hc2s7CiAKLSAgICBib29sIG1fc3Rl
bmNpbEVuYWJsZWQ7CisgICAgYm9vbCBtX3N0ZW5jaWxFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBi
b29sIG1fZGVwdGhFbmFibGVkIHsgZmFsc2UgfTsKICAgICBHQ0dMdWludCBtX3N0ZW5jaWxNYXNr
LCBtX3N0ZW5jaWxNYXNrQmFjazsKICAgICBHQ0dMaW50IG1fc3RlbmNpbEZ1bmNSZWYsIG1fc3Rl
bmNpbEZ1bmNSZWZCYWNrOyAvLyBOb3RlIHRoYXQgdGhlc2UgYXJlIHRoZSB1c2VyIHNwZWNpZmll
ZCB2YWx1ZXMsIG5vdCB0aGUgaW50ZXJuYWwgY2xhbXBlZCB2YWx1ZS4KICAgICBHQ0dMdWludCBt
X3N0ZW5jaWxGdW5jTWFzaywgbV9zdGVuY2lsRnVuY01hc2tCYWNrOwpAQCAtMTA5MCw2ICsxMDkx
LDggQEAgcHJvdGVjdGVkOgogCiAgICAgLy8gRW5hYmxlIG9yIGRpc2FibGUgc3RlbmNpbCB0ZXN0
IGJhc2VkIG9uIHVzZXIgc2V0dGluZyBhbmQgd2hldGhlciB0aGUgY3VycmVudCBGQk8gaGFzIGEg
c3RlbmNpbCBidWZmZXIuCiAgICAgdm9pZCBhcHBseVN0ZW5jaWxUZXN0KCk7CisgICAgLy8gRW5h
YmxlIG9yIGRpc2FibGUgc3RlbmNpbCB0ZXN0IGJhc2VkIG9uIHVzZXIgc2V0dGluZyBhbmQgd2hl
dGhlciB0aGUgY3VycmVudCBGQk8gaGFzIGEgc3RlbmNpbCBidWZmZXIuCisgICAgdm9pZCBhcHBs
eURlcHRoVGVzdCgpOwogCiAgICAgLy8gSGVscGVyIGZvciBlbmFibGluZyBvciBkaXNhYmxpbmcg
YSBjYXBhYmlsaXR5LgogICAgIHZvaWQgZW5hYmxlT3JEaXNhYmxlKEdDR0xlbnVtIGNhcGFiaWxp
dHksIGJvb2wgZW5hYmxlKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBiYmUxYWIzNjYyNTJlYzVhNGQ1ZGE1OTcxOGQyNjMw
NjBkNzE1NjcwLi4xYTQ0OTVhMjdlYzMzYzY5OTMwODc0YzU0NDYxMmM4YjdjZTY0YmU3IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDMtMjUgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVu
QGFwcGxlLmNvbT4KKworICAgICAgICBEZXB0aCB0ZXN0IGFmZmVjdHMgV2ViR0wgcmVuZGVyaW5n
IHdoZW4gY29udGV4dCBoYXMgZGVwdGggPT0gZmFsc2UsIHN0ZW5jaWwgPT0gdHJ1ZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzNzM0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdCB0aGUgZml4IGlu
OgorICAgICAgICAgIHdlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvY29udGV4dC9jb250ZXh0LWF0
dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbAorCisgICAgICAgIFRo
ZSBjaGFuZ2UgaXMgZG9uZSB0byBmb3JrZWQgV2ViR0wgY29uZm9ybWFuY2UgdGVzdCBpbiBhIHdh
eSB0aGF0IGl0IGNhbiB0aGVuIGxhdGVyIGJlIHVwc3RyZWFtZWQgYmFjaworICAgICAgICB0byB0
aGUgY29uZm9ybWFuY2UgdGVzdCByZXBvLCBpbXBvcnRlZCBiYWNrIHRoZW4gdGhlIGZvcmsgY2Fu
IGJlIGRlbGV0ZWQuCisKKyAgICAgICAgVGhlIHRlc3QgaGFkIGZvbGxvd2luZyBwcm9ibGVtczoK
KyAgICAgICAgIC0gRGlkIG5vdCB0ZXN0IGlmIGRlcHRoIHdvdWxkIGFmZmVjdCB0aGUgcmVuZGVy
aW5nIGluIGNhc2UgZGVwdGggPT0gZmFsc2V8dHJ1ZSwgc3RlbmNpbCA9PSB0cnVlCisgICAgICAg
ICAtIERpZCBub3QgdGVzdCBwb3NpdGl2ZSBjYXNlLCBlLmcuIHJlbmRlcmluZyBwcm9kdWNlcyBj
aGFuZ2VzLiBUaGlzIHdvdWxkIG1lYW4gdGhhdCB0aGlzIHBhcnRpY3VsYXIKKyAgICAgICAgICAg
dGVzdCB3b3VsZCBwYXNzIGV2ZW4gaWYgdGhlIGltcGxlbWVudGF0aW9uIHdvdWxkIG5ldmVyIHBy
b2R1Y2UgYW55IHJlbmRlcmluZworICAgICAgICAgLSBEaWQgbm90IHRlc3QgdGhlIGZsYWdzIGlu
IGNvbnRleHQgb2Ygb3RoZXIgZmxhZ3MsIG9ubHkgaW4gY29udGV4dCBvZiB0aGUgc2luZ2xlIGZs
YWcgZGV2aWF0aW5nIGZyb20KKyAgICAgICAgICAgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCisKKyAg
ICAgICAgKiB3ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1h
bmNlL2NvbnRleHQvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFs
aWFzLmh0bWw6CisKIDIwMjEtMDMtMjUgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxl
LmNvbT4KIAogICAgICAgICBBZGQgd2ViZ2wvcGVuZGluZy9jb25mb3JtYW5jZS9jb250ZXh0L2Nv
bnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sIGZvciB0
ZXN0IHVwZGF0ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJj
ZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9jb250ZXh0L2NvbnRleHQtYXR0cmlidXRl
cy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ2wv
cGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9jb250ZXh0L2Nv
bnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sCmluZGV4
IGFjNzk2OTg4Y2UwY2FmMjg1Mjc1ZjZkODgyYTQxNDRhZTJjNWZiMmQuLjYzNTRiN2QzZDQ3ZWZm
NmE3ODZhODk2N2RlZTNmYjNlNzUzNTAwYzQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmds
L3BlbmRpbmcvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvY29udGV4dC9j
b250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2Nv
bmZvcm1hbmNlL2NvbnRleHQvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwt
YW50aWFsaWFzLmh0bWwKQEAgLTQ3LDYgKzQ3LDcgQEAgdmFyIGZyYW1lYnVmZmVyOwogdmFyIGZi
SGFzQ29sb3I7CiB2YXIgZmJIYXNEZXB0aDsKIHZhciBmYkhhc1N0ZW5jaWw7Cit2YXIgY29udGV4
dFZlcnNpb24gPSB3dHUuZ2V0RGVmYXVsdDNEQ29udGV4dFZlcnNpb24oKTsKIAogZnVuY3Rpb24g
aW5pdCgpCiB7CkBAIC01NSw2ICs1NiwyMyBAQCBmdW5jdGlvbiBpbml0KCkKICAgICBydW5UZXN0
KCk7CiB9CiAKK3ZhciB2ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoWworICAgIDEuMCwgMS4w
LCAwLjAsCisgICAgLTEuMCwgMS4wLCAwLjAsCisgICAgLTEuMCwgLTEuMCwgMC4wLAorICAgIDEu
MCwgMS4wLCAwLjAsCisgICAgLTEuMCwgLTEuMCwgMC4wLAorICAgIDEuMCwgLTEuMCwgMC4wXSk7
CisKK3ZhciBjb2xvcnMgPSBuZXcgVWludDhBcnJheShbCisgICAgMjU1LCAwLCAwLCAyNTUsCisg
ICAgMjU1LCAwLCAwLCAyNTUsCisgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgMjU1LCAwLCAwLCAy
NTUsCisgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgMjU1LCAwLCAwLCAyNTVdKTsKKworCiBmdW5j
dGlvbiBnZXRXZWJHTChjYW52YXNXaWR0aCwgY2FudmFzSGVpZ2h0LCBjb250ZXh0QXR0cmlicywg
Y2xlYXJDb2xvciwgY2xlYXJEZXB0aCwgY2xlYXJTdGVuY2lsKQogewogICAgIHZhciBjYW52YXMg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKQEAgLTYzLDcgKzgxLDcgQEAgZnVu
Y3Rpb24gZ2V0V2ViR0woY2FudmFzV2lkdGgsIGNhbnZhc0hlaWdodCwgY29udGV4dEF0dHJpYnMs
IGNsZWFyQ29sb3IsIGNsZWFyRGUKICAgICBjYW52YXMud2lkdGggPSBjYW52YXNXaWR0aDsKICAg
ICBjYW52YXMuaGVpZ2h0ID0gY2FudmFzSGVpZ2h0OwogCi0gICAgZ2wgPSB3dHUuY3JlYXRlM0RD
b250ZXh0KGNhbnZhcywgY29udGV4dEF0dHJpYnMpOworICAgIGdsID0gd3R1LmNyZWF0ZTNEQ29u
dGV4dChjYW52YXMsIGNvbnRleHRBdHRyaWJzLCBjb250ZXh0VmVyc2lvbik7CiAgICAgaWYgKCFn
bCkKICAgICAgICAgcmV0dXJuIG51bGw7CiAKQEAgLTEwMiwyMjcgKzEyMCwxNTIgQEAgZnVuY3Rp
b24gZ2V0V2ViR0woY2FudmFzV2lkdGgsIGNhbnZhc0hlaWdodCwgY29udGV4dEF0dHJpYnMsIGNs
ZWFyQ29sb3IsIGNsZWFyRGUKICAgICAgIH0KICAgICB9CiAgICAgZ2wuYmluZEZyYW1lYnVmZmVy
KGdsLkZSQU1FQlVGRkVSLCBudWxsKTsKLSAgICB3dHUuZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5O
T19FUlJPUiwgInNob3VsZCBiZSBubyBlcnJvcnMiKTsKIAotICAgIHJldHVybiBnbDsKLX0KLQot
ZnVuY3Rpb24gZHJhd0FuZFJlYWRQaXhlbChnbCwgdmVydGljZXMsIGNvbG9ycykKLXsKICAgICB2
YXIgY29sb3JPZmZzZXQgPSB2ZXJ0aWNlcy5ieXRlTGVuZ3RoOwotCiAgICAgdmFyIHZibyA9IGds
LmNyZWF0ZUJ1ZmZlcigpOwogICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB2Ym8p
OwogICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBjb2xvck9mZnNldCArIGNvbG9y
cy5ieXRlTGVuZ3RoLCBnbC5TVEFUSUNfRFJBVyk7CiAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5B
UlJBWV9CVUZGRVIsIDAsIHZlcnRpY2VzKTsKICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZ
X0JVRkZFUiwgY29sb3JPZmZzZXQsIGNvbG9ycyk7Ci0KICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2lu
dGVyKDAsIDMsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CiAgICAgZ2wuZW5hYmxlVmVydGV4QXR0
cmliQXJyYXkoMCk7CiAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigxLCA0LCBnbC5VTlNJR05F
RF9CWVRFLCB0cnVlLCAwLCBjb2xvck9mZnNldCk7CiAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmli
QXJyYXkoMSk7CiAKLSAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgdmVydGljZXMu
bGVuZ3RoIC8gMyk7CisgICAgd3R1LmdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJz
aG91bGQgYmUgbm8gZXJyb3JzIik7CisgICAgcmV0dXJuIGdsOwogfQogCi1mdW5jdGlvbiB0ZXN0
RGVmYXVsdCgpCitmdW5jdGlvbiBkcmF3KGdsLCB2ZXJ0aWNlc0NvdW50KQogewotICAgIGRlYnVn
KCJUZXN0aW5nIGRlZmF1bHQgYXR0cmlidXRlczogeyBzdGVuY2lsOmZhbHNlIH0iKTsKLSAgICBz
aG91bGRCZU5vbk51bGwoImdsID0gZ2V0V2ViR0woMSwgMSwgbnVsbCwgWyAwLCAwLCAwLCAwIF0s
IDEsIDApIik7Ci0gICAgc2hvdWxkQmVGYWxzZSgiZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5z
dGVuY2lsIik7Ci0gICAgc2hvdWxkQmVUcnVlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuU1RFTkNJTF9C
SVRTKSA9PSAwIik7CisgICAgdmVydGljZXNDb3VudCA9IHZlcnRpY2VzQ291bnQgfHwgdmVydGlj
ZXMubGVuZ3RoIC8gMzsKKyAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgdmVydGlj
ZXNDb3VudCk7CiB9CiAKLWZ1bmN0aW9uIHRlc3RBbHBoYShhbHBoYSkKK2Z1bmN0aW9uIGNoZWNr
RHJhdyhoYXNBbHBoYSwgaGFzU3RlbmNpbCwgaGFzRGVwdGgsIGhhc0FudGlhbGlhcykKIHsKLSAg
ICBkZWJ1ZygiVGVzdGluZyBhbHBoYSA9ICIgKyBhbHBoYSk7Ci0gICAgaWYgKGFscGhhKSB7Ci0g
ICAgICAgIHNob3VsZEJlTm9uTnVsbCgiZ2wgPSBnZXRXZWJHTCgxLCAxLCB7IGFscGhhOiB0cnVl
LCBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwg
MCwgMCwgMCBdLCAxLCAwKSIpOwotICAgICAgICBzaG91bGRCZVRydWUoImdsLmdldFBhcmFtZXRl
cihnbC5BTFBIQV9CSVRTKSA+PSA4Iik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2hvdWxkQmVO
b25OdWxsKCJnbCA9IGdldFdlYkdMKDEsIDEsIHsgYWxwaGE6IGZhbHNlLCBkZXB0aDogZmFsc2Us
IHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMCBdLCAxLCAw
KSIpOwotICAgICAgICBzaG91bGRCZVRydWUoImdsLmdldFBhcmFtZXRlcihnbC5BTFBIQV9CSVRT
KSA9PSAwIik7Ci0gICAgfQotICAgIHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLlJF
RF9CSVRTKSA+PSA4Iik7Ci0gICAgc2hvdWxkQmVUcnVlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuR1JF
RU5fQklUUykgPj0gOCIpOwotICAgIHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLkJM
VUVfQklUUykgPj0gOCIpOwotICAgIHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLkRF
UFRIX0JJVFMpID09IDAiKTsKLSAgICBzaG91bGRCZVRydWUoImdsLmdldFBhcmFtZXRlcihnbC5T
VEVOQ0lMX0JJVFMpID09IDAiKTsKLQotICAgIHNob3VsZEJlTm9uTnVsbCgiY29udGV4dEF0dHJp
YnMgPSBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpIik7Ci0gICAgc2hvdWxkQmVUcnVlKCJjb250
ZXh0QXR0cmlicy5hbHBoYSA9PSAiICsgYWxwaGEpOworICAgIGxldCByZWQgPSBbMjU1LCAwLCAw
LCAyNTUgXTsKKyAgICBsZXQgYmxhY2sgPSBbMCwgMCwgMCwgaGFzQWxwaGEgPyAwIDogMjU1IF07
CisgICAgZGVidWcoYFRlc3RpbmcgdGhhdCBzdGVuY2lsICR7IGhhc1N0ZW5jaWwgPyAnYWZmZWN0
cyc6ICdkb2VzIG5vdCBhZmZlY3QnfSB0aGUgcmVuZGVyaW5nLmApOworICAgIGdsLnN0ZW5jaWxG
dW5jKGdsLk5FVkVSLCAxLCAxKTsKKyAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCwgZ2wuS0VFUCwg
Z2wuS0VFUCk7CisgICAgZHJhdyhnbCk7CisgICAgY29ycmVjdENvbG9yID0gaGFzU3RlbmNpbCA/
IGJsYWNrIDogcmVkOworICAgIHd0dS5jaGVja0NhbnZhcyhnbCwgY29ycmVjdENvbG9yKQorICAg
IGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQgfCBnbC5ERVBUSF9CVUZGRVJfQklUIHwgZ2wu
U1RFTkNJTF9CVUZGRVJfQklUKTsKKyAgICB3dHUuY2hlY2tDYW52YXMoZ2wsIGJsYWNrKTsKKyAg
ICBnbC5zdGVuY2lsRnVuYyhnbC5BTFdBWVMsIDEsIDEpOwogCi0gICAgdmFyIGNvcnJlY3RDb2xv
ciA9IChjb250ZXh0QXR0cmlicy5hbHBoYSA/IFswLCAwLCAwLCAwXSA6IFswLCAwLCAwLCAyNTVd
KTsKLSAgICB3dHUuY2hlY2tDYW52YXNSZWN0KGdsLCAwLCAwLCAxLCAxLCBjb3JyZWN0Q29sb3Ip
OworICAgIGRlYnVnKGBUZXN0aW5nIHRoYXQgZGVwdGggJHsgaGFzRGVwdGggPyAnYWZmZWN0cyc6
ICdkb2VzIG5vdCBhZmZlY3QnfSB0aGUgcmVuZGVyaW5nLmApOworICAgIGdsLmRlcHRoRnVuYyhn
bC5ORVZFUik7CisgICAgZHJhdyhnbCk7CisgICAgY29ycmVjdENvbG9yID0gaGFzRGVwdGggPyBi
bGFjayA6IHJlZDsKKyAgICB3dHUuY2hlY2tDYW52YXMoZ2wsIGNvcnJlY3RDb2xvcik7CisgICAg
Z2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZFUl9CSVQgfCBnbC5T
VEVOQ0lMX0JVRkZFUl9CSVQpOworICAgIHd0dS5jaGVja0NhbnZhcyhnbCwgYmxhY2spOworICAg
IGdsLmRlcHRoRnVuYyhnbC5BTFdBWVMpOwogCi0gICAgaWYgKGZiSGFzQ29sb3IpIHsKLSAgICAg
IGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZnJhbWVidWZmZXIpOwotICAgICAg
Z2wuY2xlYXJDb2xvcigwLjUsIDAuNSwgMC41LCAwLjUpOwotICAgICAgZ2wuY2xlYXIoZ2wuQ09M
T1JfQlVGRkVSX0JJVCk7Ci0gICAgICB3dHUuY2hlY2tDYW52YXNSZWN0KGdsLCAwLCAwLCAxLCAx
LCBbMTI3LCAxMjcsIDEyNywgMTI3XSwgdW5kZWZpbmVkLCAxKTsKLSAgICAgIGdsLmJpbmRGcmFt
ZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7CisgICAgZGVidWcoYFRlc3RpbmcgdGhhdCBy
ZW5kZXJpbmcgaXMgJHtoYXNBbnRpYWxpYXMgPyAnYW50aWFsaWFzZWQnIDogJ2FsaWFzZWQnfS5g
KTsKKyAgICBkcmF3KGdsLCAzKTsKKyAgICBsZXQgTiA9IDI7CisgICAgbGV0IGJ1ZiA9IG5ldyBV
aW50OEFycmF5KE4gKiBOICogNCk7CisgICAgZ2wucmVhZFBpeGVscygwLCAwLCBOLCBOLCBnbC5S
R0JBLCBnbC5VTlNJR05FRF9CWVRFLCBidWYpOworICAgIHJlZENoYW5uZWxzWzBdID0gYnVmWzQg
KiAoTiArIDEpXTsgLy8gKDEsIDEpCisgICAgcmVkQ2hhbm5lbHNbMV0gPSBidWZbNCAqIE4gKiAo
TiAtIDEpXTsgLy8gbGVmdCB0b3AKKyAgICByZWRDaGFubmVsc1syXSA9IGJ1Zls0ICogKE4gLSAx
KV07IC8vIHJpZ2h0IGJvdHRvbQorICAgIHNob3VsZEJlKCJyZWRDaGFubmVsc1sxXSIsICIyNTUi
KTsKKyAgICBzaG91bGRCZSgicmVkQ2hhbm5lbHNbMl0iLCAiMCIpOworICAgIGlmIChoYXNBbnRp
YWxpYXMpIHsKKyAgICAgICAgc2hvdWxkTm90QmUoInJlZENoYW5uZWxzWzBdIiwgIjI1NSIpOwor
ICAgICAgICBzaG91bGROb3RCZSgicmVkQ2hhbm5lbHNbMF0iLCAiMCIpOworICAgIH0gZWxzZSB7
CisgICAgICAgIHNob3VsZEJlVHJ1ZSgicmVkQ2hhbm5lbHNbMF0gPT0gMjU1IHx8IHJlZENoYW5u
ZWxzWzBdID09IDAiKTsKICAgICB9CisgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8
IGdsLkRFUFRIX0JVRkZFUl9CSVQgfCBnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpOworICAgIHd0dS5j
aGVja0NhbnZhcyhnbCwgYmxhY2spOworCisgICAgZGVidWcoIlRlc3RpbmcgdGhhdCByZW5kZXJp
bmcgd29ya3MuIik7CisgICAgZHJhdyhnbCk7CisgICAgd3R1LmNoZWNrQ2FudmFzKGdsLCByZWQp
OworICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQgfCBnbC5ERVBUSF9CVUZGRVJfQklU
IHwgZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTsKKyAgICB3dHUuY2hlY2tDYW52YXMoZ2wsIGJsYWNr
KTsKIH0KIAotZnVuY3Rpb24gdGVzdERlcHRoKGRlcHRoKQorZnVuY3Rpb24gdGVzdERlZmF1bHQo
KQogewotICAgIGRlYnVnKCJUZXN0aW5nIGRlcHRoID0gIiArIGRlcHRoKTsKLSAgICBpZiAoZGVw
dGgpIHsKLSAgICAgICAgc2hvdWxkQmVOb25OdWxsKCJnbCA9IGdldFdlYkdMKDEsIDEsIHsgc3Rl
bmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIik7
Ci0gICAgICAgIHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLkRFUFRIX0JJVFMpID49
IDE2Iik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2hvdWxkQmVOb25OdWxsKCJnbCA9IGdldFdl
YkdMKDEsIDEsIHsgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxz
ZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkiKTsKLSAgICAgICAgc2hvdWxkQmVUcnVlKCJnbC5n
ZXRQYXJhbWV0ZXIoZ2wuREVQVEhfQklUUykgPT0gMCIpOwotICAgIH0KLSAgICBzaG91bGRCZVRy
dWUoImdsLmdldFBhcmFtZXRlcihnbC5SRURfQklUUykgPj0gOCIpOwotICAgIHNob3VsZEJlVHJ1
ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLkdSRUVOX0JJVFMpID49IDgiKTsKLSAgICBzaG91bGRCZVRy
dWUoImdsLmdldFBhcmFtZXRlcihnbC5CTFVFX0JJVFMpID49IDgiKTsKLSAgICBzaG91bGRCZVRy
dWUoImdsLmdldFBhcmFtZXRlcihnbC5BTFBIQV9CSVRTKSA+PSA4Iik7CisgICAgZGVidWcoIlRl
c3RpbmcgZGVmYXVsdCBhdHRyaWJ1dGVzOiB7IHN0ZW5jaWw6ZmFsc2UgfSIpOworICAgIHNob3Vs
ZEJlTm9uTnVsbCgiZ2wgPSBnZXRXZWJHTCgxLCAxLCBudWxsLCBbIDAsIDAsIDAsIDAgXSwgMSwg
MCkiKTsKKyAgICBzaG91bGRCZUZhbHNlKCJnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnN0ZW5j
aWwiKTsKKyAgICBzaG91bGRCZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLlNURU5DSUxfQklUUykiLCAi
MCIpOworfQogCitmdW5jdGlvbiB0ZXN0QXR0cmlidXRlc0FmZmVjdENvbnRleHQoYWxwaGEsIHN0
ZW5jaWwsIGRlcHRoLCBhbnRpYWxpYXMpCit7CisgICAgc2hvdWxkQmVOb25OdWxsKGBnbCA9IGdl
dFdlYkdMKDIsIDIsIHsgZGVwdGg6ICR7ZGVwdGh9LCBzdGVuY2lsOiAke3N0ZW5jaWx9LCBhbnRp
YWxpYXM6ICR7YW50aWFsaWFzfSwgYWxwaGE6ICR7YWxwaGF9IH0sIFsgMCwgMCwgMCwgMCBdLCAx
LCAwKWApOwogICAgIHNob3VsZEJlTm9uTnVsbCgiY29udGV4dEF0dHJpYnMgPSBnbC5nZXRDb250
ZXh0QXR0cmlidXRlcygpIik7CiAKLSAgICBnbC5kZXB0aEZ1bmMoZ2wuTkVWRVIpOwotCi0gICAg
dmFyIHZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbCi0gICAgICAgICAxLjAsICAxLjAsIDAu
MCwKLSAgICAgICAgLTEuMCwgIDEuMCwgMC4wLAotICAgICAgICAtMS4wLCAtMS4wLCAwLjAsCi0g
ICAgICAgICAxLjAsICAxLjAsIDAuMCwKLSAgICAgICAgLTEuMCwgLTEuMCwgMC4wLAotICAgICAg
ICAgMS4wLCAtMS4wLCAwLjBdKTsKLSAgICB2YXIgY29sb3JzID0gbmV3IFVpbnQ4QXJyYXkoWwot
ICAgICAgICAyNTUsIDAsIDAsIDI1NSwKLSAgICAgICAgMjU1LCAwLCAwLCAyNTUsCi0gICAgICAg
IDI1NSwgMCwgMCwgMjU1LAotICAgICAgICAyNTUsIDAsIDAsIDI1NSwKLSAgICAgICAgMjU1LCAw
LCAwLCAyNTUsCi0gICAgICAgIDI1NSwgMCwgMCwgMjU1XSk7Ci0KLSAgICBkcmF3QW5kUmVhZFBp
eGVsKGdsLCB2ZXJ0aWNlcywgY29sb3JzLCAwLCAwKTsKLSAgICBjb3JyZWN0Q29sb3IgPSAoY29u
dGV4dEF0dHJpYnMuZGVwdGggPyBbMCwgMCwgMCwgMjU1XSA6IFsyNTUsIDAsIDAsIDI1NV0pOwot
ICAgIHd0dS5jaGVja0NhbnZhc1JlY3QoZ2wsIDAsIDAsIDEsIDEsIGNvcnJlY3RDb2xvcik7Ci0K
LSAgICBpZiAoZmJIYXNEZXB0aCkgewotICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1F
QlVGRkVSLCBmcmFtZWJ1ZmZlcik7Ci0gICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklU
IHwgZ2wuREVQVEhfQlVGRkVSX0JJVCk7Ci0gICAgICBkcmF3QW5kUmVhZFBpeGVsKGdsLCB2ZXJ0
aWNlcywgY29sb3JzLCAwLCAwKTsKLSAgICAgIHd0dS5jaGVja0NhbnZhc1JlY3QoZ2wsIDAsIDAs
IDEsIDEsIFswLCAwLCAwLCAyNTVdKTsKLSAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFN
RUJVRkZFUiwgbnVsbCk7CisgICAgc2hvdWxkQmVHcmVhdGVyVGhhbk9yRXF1YWwoImdsLmdldFBh
cmFtZXRlcihnbC5SRURfQklUUykiLCAiOCIpOworICAgIHNob3VsZEJlR3JlYXRlclRoYW5PckVx
dWFsKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuR1JFRU5fQklUUykiLCAiOCIpOworICAgIHNob3VsZEJl
R3JlYXRlclRoYW5PckVxdWFsKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuQkxVRV9CSVRTKSIsICI4Iik7
CisKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuYWxwaGEiLCAiIiArIGFscGhhKTsKKyAg
ICBpZiAoY29udGV4dFZlcnNpb24gPCAyKSB7CisgICAgICAgIGlmICghc3RlbmNpbCkKKyAgICAg
ICAgICAgIHNob3VsZEJlRmFsc2UoImNvbnRleHRBdHRyaWJzLnN0ZW5jaWwiKTsKKyAgICAgICAg
aWYgKCFkZXB0aCkKKyAgICAgICAgICAgIHNob3VsZEJlRmFsc2UoImNvbnRleHRBdHRyaWJzLmRl
cHRoIik7CisgICAgICAgIGlmICghYW50aWFsaWFzKQorICAgICAgICAgICAgc2hvdWxkQmVGYWxz
ZSgiY29udGV4dEF0dHJpYnMuYW50aWFsaWFzIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2hv
dWxkQmUoImNvbnRleHRBdHRyaWJzLnN0ZW5jaWwiLCAiIiArIHN0ZW5jaWwpOworICAgICAgICBz
aG91bGRCZSgiY29udGV4dEF0dHJpYnMuZGVwdGgiLCAiIiArIGRlcHRoKTsKKyAgICAgICAgc2hv
dWxkQmUoImNvbnRleHRBdHRyaWJzLmFudGlhbGlhcyIsICIiICsgYW50aWFsaWFzKTsKICAgICB9
Ci19CiAKLWZ1bmN0aW9uIHRlc3RTdGVuY2lsQW5kRGVwdGgoc3RlbmNpbCwgZGVwdGgpCi17Ci0g
ICAgZGVidWcoIlRlc3Rpbmcgc3RlbmNpbCA9ICIgKyBzdGVuY2lsICsgIiwgZGVwdGggPSAiICsg
ZGVwdGgpOwotICAgIHZhciBjcmVhdGlvblN0cmluZyA9Ci0gICAgICAgICJnbCA9IGdldFdlYkdM
KDEsIDEsIHsgZGVwdGg6ICIgKyBkZXB0aCArICIsIHN0ZW5jaWw6ICIgKyBzdGVuY2lsICsgIiwg
YW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkiOwotICAgIHNob3VsZEJl
Tm9uTnVsbChjcmVhdGlvblN0cmluZyk7Ci0KLSAgICBzaG91bGRCZVRydWUoImdsLmdldFBhcmFt
ZXRlcihnbC5SRURfQklUUykgPj0gOCIpOwotICAgIHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1l
dGVyKGdsLkdSRUVOX0JJVFMpID49IDgiKTsKLSAgICBzaG91bGRCZVRydWUoImdsLmdldFBhcmFt
ZXRlcihnbC5CTFVFX0JJVFMpID49IDgiKTsKLSAgICBzaG91bGRCZVRydWUoImdsLmdldFBhcmFt
ZXRlcihnbC5BTFBIQV9CSVRTKSA+PSA4Iik7Ci0gICAgaWYgKGRlcHRoKQotICAgICAgICBzaG91
bGRCZVRydWUoImdsLmdldFBhcmFtZXRlcihnbC5ERVBUSF9CSVRTKSA+PSAxNiIpOworICAgIGlm
IChjb250ZXh0QXR0cmlicy5hbHBoYSkKKyAgICAgICAgc2hvdWxkQmVHcmVhdGVyVGhhbk9yRXF1
YWwoImdsLmdldFBhcmFtZXRlcihnbC5BTFBIQV9CSVRTKSIsICI4Iik7CiAgICAgZWxzZQotICAg
ICAgICBzaG91bGRCZVRydWUoImdsLmdldFBhcmFtZXRlcihnbC5ERVBUSF9CSVRTKSA9PSAwIik7
Ci0KLSAgICBpZiAoc3RlbmNpbCkKLSAgICAgICAgc2hvdWxkQmVUcnVlKCJnbC5nZXRQYXJhbWV0
ZXIoZ2wuU1RFTkNJTF9CSVRTKSA+PSA4Iik7CisgICAgICAgIHNob3VsZEJlKCJnbC5nZXRQYXJh
bWV0ZXIoZ2wuQUxQSEFfQklUUykiLCAiMCIpOworICAgIGlmIChjb250ZXh0QXR0cmlicy5zdGVu
Y2lsKQorICAgICAgICBzaG91bGRCZUdyZWF0ZXJUaGFuT3JFcXVhbCgiZ2wuZ2V0UGFyYW1ldGVy
KGdsLlNURU5DSUxfQklUUykiLCAiOCIpOworICAgIGVsc2UKKyAgICAgICAgc2hvdWxkQmUoImds
LmdldFBhcmFtZXRlcihnbC5TVEVOQ0lMX0JJVFMpIiwgIjAiKTsKKyAgICBpZiAoY29udGV4dEF0
dHJpYnMuZGVwdGgpCisgICAgICAgIHNob3VsZEJlR3JlYXRlclRoYW5PckVxdWFsKCJnbC5nZXRQ
YXJhbWV0ZXIoZ2wuREVQVEhfQklUUykiLCAiMTYiKTsKICAgICBlbHNlCi0gICAgICAgIHNob3Vs
ZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLlNURU5DSUxfQklUUykgPT0gMCIpOworICAgICAg
ICBzaG91bGRCZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLkRFUFRIX0JJVFMpIiwgIjAiKTsKIAotICAg
IHNob3VsZEJlTm9uTnVsbCgiY29udGV4dEF0dHJpYnMgPSBnbC5nZXRDb250ZXh0QXR0cmlidXRl
cygpIik7Ci0gICAgaWYgKCFkZXB0aCAmJiBjb250ZXh0QXR0cmlicy5kZXB0aCkgewotICAgICAg
ICB0ZXN0RmFpbGVkKCJXZWJHTCBpbXBsZW1lbnRhdGlvbiBwcm92aWRlZCBhIGRlcHRoIGJ1ZmZl
ciB3aGVuIGl0IHNob3VsZCBub3QgaGF2ZSIpOwotICAgIH0KLSAgICBpZiAoIWNvbnRleHRBdHRy
aWJzLmRlcHRoKQotICAgICAgICBkZXB0aCA9IGZhbHNlOwotICAgIGlmICghc3RlbmNpbCAmJiBj
b250ZXh0QXR0cmlicy5zdGVuY2lsKSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoIldlYkdMIGltcGxl
bWVudGF0aW9uIHByb3ZpZGVkIGEgc3RlbmNpbCBidWZmZXIgd2hlbiBpdCBzaG91bGQgbm90IGhh
dmUiKTsKLSAgICB9Ci0gICAgaWYgKCFjb250ZXh0QXR0cmlicy5zdGVuY2lsKQotICAgICAgICBz
dGVuY2lsID0gZmFsc2U7CisgICAgdmFyIGNvcnJlY3RDb2xvciA9IGNvbnRleHRBdHRyaWJzLmFs
cGhhID8gWzAsIDAsIDAsIDBdIDogWzAsIDAsIDAsIDI1NV07CisgICAgd3R1LmNoZWNrQ2FudmFz
KGdsLCBjb3JyZWN0Q29sb3IpOwogCi0gICAgZ2wuZGVwdGhGdW5jKGdsLkFMV0FZUyk7CisgICAg
ZGVidWcoIlRlc3RpbmcgZGVmYXVsdCBmcmFtZWJ1ZmZlci4iKTsKKyAgICBjaGVja0RyYXcoYWxw
aGEsIHN0ZW5jaWwsIGRlcHRoLCBhbnRpYWxpYXMpOwogCi0gICAgZ2wuc3RlbmNpbEZ1bmMoZ2wu
TkVWRVIsIDEsIDEpOwotICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLCBnbC5LRUVQLCBnbC5LRUVQ
KTsKLQotICAgIHZhciB2ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoWwotICAgICAgICAgMS4w
LCAxLjAsIDAuMCwKLSAgICAgICAgLTEuMCwgMS4wLCAwLjAsCi0gICAgICAgIC0xLjAsIC0xLjAs
IDAuMCwKLSAgICAgICAgIDEuMCwgMS4wLCAwLjAsCi0gICAgICAgIC0xLjAsIC0xLjAsIDAuMCwK
LSAgICAgICAgIDEuMCwgLTEuMCwgMC4wXSk7Ci0gICAgdmFyIGNvbG9ycyA9IG5ldyBVaW50OEFy
cmF5KFsKLSAgICAgICAgMjU1LCAwLCAwLCAyNTUsCi0gICAgICAgIDI1NSwgMCwgMCwgMjU1LAot
ICAgICAgICAyNTUsIDAsIDAsIDI1NSwKLSAgICAgICAgMjU1LCAwLCAwLCAyNTUsCi0gICAgICAg
IDI1NSwgMCwgMCwgMjU1LAotICAgICAgICAyNTUsIDAsIDAsIDI1NV0pOwotCi0gICAgZHJhd0Fu
ZFJlYWRQaXhlbChnbCwgdmVydGljZXMsIGNvbG9ycywgMCwgMCk7Ci0gICAgY29ycmVjdENvbG9y
ID0gKHN0ZW5jaWwgPyBbMCwgMCwgMCwgMjU1XSA6IFsyNTUsIDAsIDAsIDI1NV0pOwotICAgIHd0
dS5jaGVja0NhbnZhc1JlY3QoZ2wsIDAsIDAsIDEsIDEsIGNvcnJlY3RDb2xvcikKLQotICAgIGlm
IChmYkhhc1N0ZW5jaWwpIHsKLSAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZF
UiwgZnJhbWVidWZmZXIpOwotICAgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGds
LkRFUFRIX0JVRkZFUl9CSVQpOwotICAgICAgZHJhd0FuZFJlYWRQaXhlbChnbCwgdmVydGljZXMs
IGNvbG9ycywgMCwgMCk7Ci0gICAgICB3dHUuY2hlY2tDYW52YXNSZWN0KGdsLCAwLCAwLCAxLCAx
LCBbMCwgMCwgMCwgMjU1XSk7Ci0gICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZG
RVIsIG51bGwpOworICAgIGlmIChmYkhhc0NvbG9yKSB7CisgICAgICAgIGRlYnVnKCJUZXN0aW5n
IGJvdW5kIGZyYW1lYnVmZmVyIG9iamVjdC4iKTsKKyAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVy
KGdsLkZSQU1FQlVGRkVSLCBmcmFtZWJ1ZmZlcik7CisgICAgICAgIGdsLmNsZWFyQ29sb3IoMCwg
MCwgMCwgMCk7CisgICAgICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQgfCBnbC5ERVBU
SF9CVUZGRVJfQklUIHwgZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTsKKyAgICAgICAgY2hlY2tEcmF3
KHRydWUsIGZiSGFzU3RlbmNpbCwgZmJIYXNEZXB0aCwgZmFsc2UpOworICAgICAgICBnbC5iaW5k
RnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwpOwogICAgIH0KIH0KIAotZnVuY3Rpb24g
dGVzdEFudGlhbGlhcyhhbnRpYWxpYXMpCi17Ci0gICAgZGVidWcoIlRlc3RpbmcgYW50aWFsaWFz
ID0gIiArIGFudGlhbGlhcyk7Ci0gICAgLy8gQm90aCB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiBj
YW52YXMgYXJlIE4uCi0gICAgdmFyIE4gPSAyOwotICAgIGlmIChhbnRpYWxpYXMpCi0gICAgICAg
IHNob3VsZEJlTm9uTnVsbCgiZ2wgPSBnZXRXZWJHTCgiICsgTiArICIsICIgKyBOICsgIiwgeyBk
ZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbHBoYTogZmFsc2UsIGFudGlhbGlhczogdHJ1
ZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkiKTsKLSAgICBlbHNlCi0gICAgICAgIHNob3VsZEJl
Tm9uTnVsbCgiZ2wgPSBnZXRXZWJHTCgiICsgTiArICIsICIgKyBOICsgIiwgeyBkZXB0aDogZmFs
c2UsIHN0ZW5jaWw6IGZhbHNlLCBhbHBoYTogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwgWyAw
LCAwLCAwLCAxIF0sIDEsIDApIik7Ci0gICAgc2hvdWxkQmVOb25OdWxsKCJjb250ZXh0QXR0cmli
cyA9IGdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCkiKTsKLQotICAgIHZhciB2ZXJ0aWNlcyA9IG5l
dyBGbG9hdDMyQXJyYXkoWwotICAgICAgICAgMS4wLCAxLjAsIDAuMCwKLSAgICAgICAgLTEuMCwg
MS4wLCAwLjAsCi0gICAgICAgIC0xLjAsIC0xLjAsIDAuMF0pOwotICAgIHZhciBjb2xvcnMgPSBu
ZXcgVWludDhBcnJheShbCi0gICAgICAgIDI1NSwgMCwgMCwgMjU1LAotICAgICAgICAyNTUsIDAs
IDAsIDI1NSwKLSAgICAgICAgMjU1LCAwLCAwLCAyNTVdKTsKLSAgICBkcmF3QW5kUmVhZFBpeGVs
KGdsLCB2ZXJ0aWNlcywgY29sb3JzLCAwLCAwKTsKLSAgICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJy
YXkoTiAqIE4gKiA0KTsKLSAgICBnbC5yZWFkUGl4ZWxzKDAsIDAsIE4sIE4sIGdsLlJHQkEsIGds
LlVOU0lHTkVEX0JZVEUsIGJ1Zik7Ci0gICAgcmVkQ2hhbm5lbHNbMF0gPSBidWZbNCAqIChOICsg
MSldOyAvLyAoMSwgMSkKLSAgICByZWRDaGFubmVsc1sxXSA9IGJ1Zls0ICogTiAqIChOIC0gMSld
OyAvLyBsZWZ0IHRvcAotICAgIHJlZENoYW5uZWxzWzJdID0gYnVmWzQgKiAoTiAtIDEpXTsgLy8g
cmlnaHQgYm90dG9tCi0gICAgc2hvdWxkQmVUcnVlKCJyZWRDaGFubmVsc1sxXSA9PSAyNTUgJiYg
cmVkQ2hhbm5lbHNbMl0gPT0gMCIpOwotICAgIHNob3VsZEJlKCJyZWRDaGFubmVsc1swXSAhPSAy
NTUgJiYgcmVkQ2hhbm5lbHNbMF0gIT0gMCIsICJjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMiKTsK
LX0KLQogZnVuY3Rpb24gcnVuVGVzdCgpCiB7CiAgICAgdGVzdERlZmF1bHQoKTsKLSAgICB0ZXN0
QWxwaGEodHJ1ZSk7Ci0gICAgdGVzdEFscGhhKGZhbHNlKTsKLSAgICB0ZXN0RGVwdGgodHJ1ZSk7
Ci0gICAgdGVzdERlcHRoKGZhbHNlKTsKLSAgICB0ZXN0U3RlbmNpbEFuZERlcHRoKHRydWUsIGZh
bHNlKTsKLSAgICB0ZXN0U3RlbmNpbEFuZERlcHRoKGZhbHNlLCBmYWxzZSk7Ci0gICAgdGVzdFN0
ZW5jaWxBbmREZXB0aCh0cnVlLCB0cnVlKTsKLSAgICB0ZXN0U3RlbmNpbEFuZERlcHRoKGZhbHNl
LCB0cnVlKTsKLSAgICB0ZXN0QW50aWFsaWFzKHRydWUpOwotICAgIHRlc3RBbnRpYWxpYXMoZmFs
c2UpOwotCisgICAgbGV0IGNhc2VzID0gW2ZhbHNlLCB0cnVlXTsKKyAgICBmb3IgKGxldCBhbHBo
YSBvZiBjYXNlcykgeworICAgICAgICBmb3IgKGxldCBzdGVuY2lsIG9mIGNhc2VzKSB7CisgICAg
ICAgICAgICBmb3IgKGxldCBkZXB0aCBvZiBjYXNlcykgeworICAgICAgICAgICAgICAgIGZvciAo
bGV0IGFudGlhbGlhcyBvZiBjYXNlcykgeworICAgICAgICAgICAgICAgICAgICB0ZXN0QXR0cmli
dXRlc0FmZmVjdENvbnRleHQoYWxwaGEsIHN0ZW5jaWwsIGRlcHRoLCBhbnRpYWxpYXMpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KICAgICBmaW5p
c2hUZXN0KCk7CiB9Ci0KIDwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHkgb25sb2FkPSJpbml0KCki
Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436182</attachid>
            <date>2021-08-23 04:14:03 -0700</date>
            <delta_ts>2021-08-23 04:14:03 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-223734-20210823141402.patch</filename>
            <type>text/plain</type>
            <size>26290</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzE4NDdlMjAyNTA0ZTFk
N2EyNGNlMzA2YzQ1Nzc1MzY0NTA5ODg0My4uNmI0NzY0M2ExZmVhZDM0NzZlMTRjMWE1OWQxZDRm
NTg2NzA1NjdhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDIxLTA4LTIzICBLaW1t
byBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgRGVwdGggdGVzdCBh
ZmZlY3RzIFdlYkdMIHJlbmRlcmluZyB3aGVuIGNvbnRleHQgaGFzIGRlcHRoID09IGZhbHNlLCBz
dGVuY2lsID09IHRydWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMzczNAorCisgICAgICAgIFJldmlld2VkIGJ5IERlYW4gSmFja3Nvbi4KKworICAg
ICAgICBXaGVuIHRoZSBjb250ZXh0IGRlZmF1bHQgZnJhbWVidWZmZXIgZG9lcyBub3QgaGF2ZSBk
ZXB0aCBidWZmZXIsIERFUFRIX1RFU1Qgc2hvdWxkIG5vdCBhZmZlY3QKKyAgICAgICAgdGhlIHJl
bmRlcmluZyByZXN1bHQuCisKKyAgICAgICAgQmVmb3JlIHRoZSBjaGFuZ2UsIHRoZSBERVBUSF9U
RVNUIHdvdWxkIGFmZmVjdCB0aGUgcmVuZGVyaW5nIHJlc3VsdCBpZiBjbGllbnQgaGFkIHJlcXVl
c3RlZAorICAgICAgICBzdGVuY2lsIGJ1ZmZlciBidXQgbm90IGEgZGVwdGggYnVmZmVyLiBUaGlz
IGlzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBjb21i
aW5lcyBkZXB0aCBhbmQgc3RlbmNpbC4KKworICAgICAgICBTaW11bGF0ZSB0aGF0IHRoZSB1bmRl
cmx5aW5nIGZyYW1lYnVmZmVyIHdvdWxkIG5vdCBoYXZlIGRlcHRoIGJ1ZmZlciBieSBkaXNhYmxp
bmcgREVQVEhfVEVTVAorICAgICAgICBhbHdheXMgd2hlbiBkZWZhdWx0IGZyYW1lYnVmZmVyIGlz
IGFjdGl2YXRlZC4gVGhpcyBjb3BpZXMgdGhlIGFscmVhZHkgd29ya2luZyBzaW1pbGFyIGxvZ2lj
CisgICAgICAgIGZvciBTVEVOQ0lMX1RFU1QuCisKKyAgICAgICAgQWRkcyB0ZXN0IGluIExheW91
dFRlc3RzL3dlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvY29udGV4dC9jb250ZXh0LWF0dHJpYnV0
ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbAorCisgICAgICAgICogaHRtbC9j
YW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1l
YnVmZmVyOjpoYXNEZXB0aEJ1ZmZlciBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xGcmFtZWJ1ZmZlci5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6aW5pdGlhbGl6ZU5ld0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UGFyYW1ldGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlbmRlcmJ1ZmZlclN0
b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YXBw
bHlTdGVuY2lsVGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjphcHBseURlcHRoVGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpzZXRGcmFtZWJ1ZmZlcik6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZS5oOgorCiAyMDIxLTA4LTIzICBLaW1tbyBLaW5udW5lbiAgPGtr
aW5udW5lbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViR0wgY2FsbHMgaW50byBzdGF0aWMgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wgZnVuY3Rpb25zIG5lZWRsZXNzbHkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKaW5kZXggNTBiYWNmNTY0ZmNh
ZjY2NmY4NTdiZDQ5MTU2Mjc5NDJjZmM1MjA3My4uMzExMjk0MTU3M2VmZGQ0NDg0MjM1Yjc5ZjI3
NmZkNDM5YjhkOGQ5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xGcmFtZWJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xG
cmFtZWJ1ZmZlci5jcHAKQEAgLTY5NCw2ICs2OTQsMTUgQEAgYm9vbCBXZWJHTEZyYW1lYnVmZmVy
OjpoYXNTdGVuY2lsQnVmZmVyKCkgY29uc3QKICAgICByZXR1cm4gYXR0YWNobWVudCAmJiBhdHRh
Y2htZW50LT5pc1ZhbGlkKCk7CiB9CiAKKworYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjpoYXNEZXB0
aEJ1ZmZlcigpIGNvbnN0Cit7CisgICAgUmVmUHRyPFdlYkdMQXR0YWNobWVudD4gYXR0YWNobWVu
dCA9IGdldEF0dGFjaG1lbnQoR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUxfQVRUQUNI
TUVOVCk7CisgICAgaWYgKCFhdHRhY2htZW50KQorICAgICAgICBhdHRhY2htZW50ID0gZ2V0QXR0
YWNobWVudChHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQVRUQUNITUVOVCk7CisgICAgcmV0dXJu
IGF0dGFjaG1lbnQgJiYgYXR0YWNobWVudC0+aXNWYWxpZCgpOworfQorCiB2b2lkIFdlYkdMRnJh
bWVidWZmZXI6OmRlbGV0ZU9iamVjdEltcGwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwg
R3JhcGhpY3NDb250ZXh0R0wqIGNvbnRleHQzZCwgUGxhdGZvcm1HTE9iamVjdCBvYmplY3QpCiB7
CiAgICAgZm9yIChhdXRvJiBhdHRhY2htZW50IDogbV9hdHRhY2htZW50cy52YWx1ZXMoKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAppbmRleCBjNTM4
OTM5MTA5YTk4MDg0MGE3MjE0OGQyM2Y4NzIxMDNlMmJmZWZiLi5iN2FiNGNkODY4YWU2N2IzNjM2
Mzc1M2ZlODIzNGVjODJiZWU1ZDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xGcmFtZWJ1ZmZlci5oCkBAIC0xMTEsNiArMTExLDcgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0SGFzRXZlckJlZW5Cb3VuZCgpIHsgbV9oYXNFdmVyQmVlbkJvdW5kID0gdHJ1ZTsgfQogCiAg
ICAgYm9vbCBoYXNTdGVuY2lsQnVmZmVyKCkgY29uc3Q7CisgICAgYm9vbCBoYXNEZXB0aEJ1ZmZl
cigpIGNvbnN0OwogCiAgICAgLy8gV3JhcHBlciBmb3IgZHJhd0J1ZmZlcnNFWFQvZHJhd0J1ZmZl
cnNBUkIgdG8gd29yayBhcm91bmQgYSBkcml2ZXIgYnVnLgogICAgIHZvaWQgZHJhd0J1ZmZlcnMo
Y29uc3QgVmVjdG9yPEdDR0xlbnVtPiYgYnVmcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCmluZGV4IDc3Zjc1
OWE5ZmY4YTU2YjhkOWVhOWMwZTc3ZTNjMTRjODEwYjUyZjUuLjlkZDE3M2UwMzIyNmVhN2YxNDJl
YTIwZTBmMzc1YmI2MjRjMjg5MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCkBAIC05ODYsNiArOTg2LDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppbml0aWFsaXplTmV3Q29udGV4dCgp
CiAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0gbnVsbHB0cjsKICAgICBtX2RlcHRoTWFzayA9
IHRydWU7CiAgICAgbV9zdGVuY2lsRW5hYmxlZCA9IGZhbHNlOworICAgIG1fZGVwdGhFbmFibGVk
ID0gZmFsc2U7CiAgICAgbV9zdGVuY2lsTWFzayA9IDB4RkZGRkZGRkY7CiAgICAgbV9zdGVuY2ls
TWFza0JhY2sgPSAweEZGRkZGRkZGOwogICAgIG1fc3RlbmNpbEZ1bmNSZWYgPSAwOwpAQCAtMjMw
NywxNCArMjMwOCwxMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpc2FibGUo
R0NHTGVudW0gY2FwKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlQ2FwYWJpbGl0eSgiZGlzYWJsZSIsIGNhcCkpCiAgICAgICAgIHJldHVybjsKLSAgICBp
ZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX1RFU1QpIHsKKyAgICBpZiAoY2Fw
ID09IEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX1RFU1QpCiAgICAgICAgIG1fc3RlbmNpbEVu
YWJsZWQgPSBmYWxzZTsKLSAgICAgICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlNDSVNTT1JfVEVT
VCkKKyAgICBlbHNlIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1RFU1QpCisg
ICAgICAgIG1fZGVwdGhFbmFibGVkID0gZmFsc2U7CisgICAgZWxzZSBpZiAoY2FwID09IEdyYXBo
aWNzQ29udGV4dEdMOjpTQ0lTU09SX1RFU1QpCiAgICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSBm
YWxzZTsKLSAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dEdMOjpSQVNURVJJWkVSX0RJU0NB
UkQpCisgICAgZWxzZSBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dEdMOjpSQVNURVJJWkVSX0RJ
U0NBUkQpCiAgICAgICAgIG1fcmFzdGVyaXplckRpc2NhcmRFbmFibGVkID0gZmFsc2U7CiAgICAg
bV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7CiB9CkBAIC0yODA2LDkgKzI4MDYsMTQgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjplbmFibGUoR0NHTGVudW0gY2FwKQogICAgICAgICBh
cHBseVN0ZW5jaWxUZXN0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKGNhcCA9
PSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfVEVTVCkgeworICAgICAgICBtX2RlcHRoRW5hYmxl
ZCA9IHRydWU7CisgICAgICAgIGFwcGx5RGVwdGhUZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHRHTDo6U0NJU1NPUl9URVNUKQogICAg
ICAgICBtX3NjaXNzb3JFbmFibGVkID0gdHJ1ZTsKLSAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29u
dGV4dEdMOjpSQVNURVJJWkVSX0RJU0NBUkQpCisgICAgZWxzZSBpZiAoY2FwID09IEdyYXBoaWNz
Q29udGV4dEdMOjpSQVNURVJJWkVSX0RJU0NBUkQpCiAgICAgICAgIG1fcmFzdGVyaXplckRpc2Nh
cmRFbmFibGVkID0gdHJ1ZTsKICAgICBtX2NvbnRleHQtPmVuYWJsZShjYXApOwogfQpAQCAtMjg3
NSw2ICsyODgwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnUKIAogICAgIGZyYW1lYnVmZmVy
QmluZGluZy0+c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIodGFyZ2V0LCBhdHRhY2ht
ZW50LCBidWZmZXIpOwogICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKKyAgICBhcHBseURlcHRoVGVz
dCgpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZyYW1lYnVmZmVyVGV4
dHVyZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gdGV4
dGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwpCkBAIC0yOTA1LDYg
KzI5MTEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZyYW1lYnVmZmVyVGV4
dHVyZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYQogCiAgICAgZnJhbWVidWZmZXJCaW5k
aW5nLT5zZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQs
IHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwsIDApOwogICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsK
KyAgICBhcHBseURlcHRoVGVzdCgpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmZyb250RmFjZShHQ0dMZW51bSBtb2RlKQpAQCAtMzE0NCw3ICszMTUxLDcgQEAgV2ViR0xB
bnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UGFyYW1ldGVyKEdDR0xlbnVtIHBuYW1l
KQogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1JBTkdFOgogICAgICAgICByZXR1
cm4gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpERVBUSF9URVNUOgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRl
cihwbmFtZSk7CisgICAgICAgIHJldHVybiBtX2RlcHRoRW5hYmxlZDsKICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpERVBUSF9XUklURU1BU0s6CiAgICAgICAgIHJldHVybiBnZXRCb29sZWFu
UGFyYW1ldGVyKHBuYW1lKTsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpESVRIRVI6CkBA
IC00NTgzLDYgKzQ1OTAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlbmRl
cmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbgogICAgICAgICByZXR1
cm47CiAgICAgcmVuZGVyYnVmZmVyU3RvcmFnZUltcGwodGFyZ2V0LCAwLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgZnVuY3Rpb25OYW1lKTsKICAgICBhcHBseVN0ZW5jaWxUZXN0KCk7
CisgICAgYXBwbHlEZXB0aFRlc3QoKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpyZW5kZXJidWZmZXJTdG9yYWdlSW1wbChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBz
YW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCkBAIC03ODI1LDE2ICs3ODMzLDE4
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3ludGhlc2l6ZUdMRXJyb3IoR0NH
TGVudW0gZXJyb3IsIGNvbnN0IGNoYXIqIGZ1CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6YXBwbHlTdGVuY2lsVGVzdCgpCiB7Ci0gICAgYm9vbCBoYXZlU3RlbmNpbEJ1ZmZlciA9
IGZhbHNlOworICAgIGJvb2wgZW5hYmxlID0gbV9zdGVuY2lsRW5hYmxlZDsKKyAgICBpZiAoZW5h
YmxlKQorICAgICAgICBlbmFibGUgPSBtX2ZyYW1lYnVmZmVyQmluZGluZyA/IG1fZnJhbWVidWZm
ZXJCaW5kaW5nLT5oYXNTdGVuY2lsQnVmZmVyKCkgOiBnZXRDb250ZXh0QXR0cmlidXRlcygpLT5z
dGVuY2lsOworICAgIGVuYWJsZU9yRGlzYWJsZShHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9U
RVNULCBlbmFibGUpOworfQogCi0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAg
ICBoYXZlU3RlbmNpbEJ1ZmZlciA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5oYXNTdGVuY2lsQnVm
ZmVyKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGF1dG8gYXR0cmlidXRlcyA9IGdldENvbnRleHRB
dHRyaWJ1dGVzKCk7Ci0gICAgICAgIEFTU0VSVChhdHRyaWJ1dGVzKTsKLSAgICAgICAgaGF2ZVN0
ZW5jaWxCdWZmZXIgPSBhdHRyaWJ1dGVzLT5zdGVuY2lsOwotICAgIH0KLSAgICBlbmFibGVPckRp
c2FibGUoR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfVEVTVCwgbV9zdGVuY2lsRW5hYmxlZCAm
JiBoYXZlU3RlbmNpbEJ1ZmZlcik7Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFw
cGx5RGVwdGhUZXN0KCkKK3sKKyAgICBib29sIGVuYWJsZSA9IG1fZGVwdGhFbmFibGVkOworICAg
IGlmIChlbmFibGUpCisgICAgICAgIGVuYWJsZSA9IG1fZnJhbWVidWZmZXJCaW5kaW5nID8gbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPmhhc0RlcHRoQnVmZmVyKCkgOiBnZXRDb250ZXh0QXR0cmlidXRl
cygpLT5kZXB0aDsKKyAgICBlbmFibGVPckRpc2FibGUoR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRI
X1RFU1QsIGVuYWJsZSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZW5h
YmxlT3JEaXNhYmxlKEdDR0xlbnVtIGNhcGFiaWxpdHksIGJvb2wgZW5hYmxlKQpAQCAtNzg4NSw2
ICs3ODk1LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzZXRGcmFtZWJ1ZmZl
cihjb25zdCBBYnN0cmFjdExvY2tlciYsIEdDR0xlbnVtIHQKICAgICBpZiAodGFyZ2V0ID09IEdy
YXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiB8fCB0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0
R0w6OkRSQVdfRlJBTUVCVUZGRVIpIHsKICAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSBi
dWZmZXI7CiAgICAgICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKKyAgICAgICAgYXBwbHlEZXB0aFRl
c3QoKTsKICAgICB9CiAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBvYmpl
Y3RPclplcm8oYnVmZmVyKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgKaW5kZXggNGQ5MzRkZDkyMWQ4NzYyY2Iw
ZmU3MGM0NDRjODAyNjk3Y2Y5NWY4ZC4uZTc2NGJmM2ZjMmU3MDBjOWYwZGEyMTJmMzMyYjM2ZjMz
ZmI0MjVlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuaApAQCAtNjU0LDcgKzY1NCw4IEBAIHByb3RlY3RlZDoKICAg
ICBHQ0dMYm9vbGVhbiBtX2NvbG9yTWFza1s0XTsKICAgICBHQ0dMYm9vbGVhbiBtX2RlcHRoTWFz
azsKIAotICAgIGJvb2wgbV9zdGVuY2lsRW5hYmxlZDsKKyAgICBib29sIG1fc3RlbmNpbEVuYWJs
ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9kZXB0aEVuYWJsZWQgeyBmYWxzZSB9OwogICAgIEdD
R0x1aW50IG1fc3RlbmNpbE1hc2ssIG1fc3RlbmNpbE1hc2tCYWNrOwogICAgIEdDR0xpbnQgbV9z
dGVuY2lsRnVuY1JlZiwgbV9zdGVuY2lsRnVuY1JlZkJhY2s7IC8vIE5vdGUgdGhhdCB0aGVzZSBh
cmUgdGhlIHVzZXIgc3BlY2lmaWVkIHZhbHVlcywgbm90IHRoZSBpbnRlcm5hbCBjbGFtcGVkIHZh
bHVlLgogICAgIEdDR0x1aW50IG1fc3RlbmNpbEZ1bmNNYXNrLCBtX3N0ZW5jaWxGdW5jTWFza0Jh
Y2s7CkBAIC0xMDkxLDYgKzEwOTIsOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBFbmFibGUgb3Ig
ZGlzYWJsZSBzdGVuY2lsIHRlc3QgYmFzZWQgb24gdXNlciBzZXR0aW5nIGFuZCB3aGV0aGVyIHRo
ZSBjdXJyZW50IEZCTyBoYXMgYSBzdGVuY2lsIGJ1ZmZlci4KICAgICB2b2lkIGFwcGx5U3RlbmNp
bFRlc3QoKTsKKyAgICAvLyBFbmFibGUgb3IgZGlzYWJsZSBzdGVuY2lsIHRlc3QgYmFzZWQgb24g
dXNlciBzZXR0aW5nIGFuZCB3aGV0aGVyIHRoZSBjdXJyZW50IEZCTyBoYXMgYSBzdGVuY2lsIGJ1
ZmZlci4KKyAgICB2b2lkIGFwcGx5RGVwdGhUZXN0KCk7CiAKICAgICAvLyBIZWxwZXIgZm9yIGVu
YWJsaW5nIG9yIGRpc2FibGluZyBhIGNhcGFiaWxpdHkuCiAgICAgdm9pZCBlbmFibGVPckRpc2Fi
bGUoR0NHTGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGQ3YzU4YTYxNTM4
NGE4YjI2N2JlZDI4MzJhMGQzYjJlOGRjNDZlNjkuLmZjYmMxYTI0OWNmZjkzNzdhMjc2NTIzYzgy
N2M1MzI5MzMxOTYxYTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAyMS0wOC0yMyAgS2ltbW8g
S2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgorCisgICAgICAgIERlcHRoIHRlc3QgYWZm
ZWN0cyBXZWJHTCByZW5kZXJpbmcgd2hlbiBjb250ZXh0IGhhcyBkZXB0aCA9PSBmYWxzZSwgc3Rl
bmNpbCA9PSB0cnVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjM3MzQKKworICAgICAgICBSZXZpZXdlZCBieSBEZWFuIEphY2tzb24uCisKKyAgICAg
ICAgVGVzdCB0aGUgZml4IGluOgorICAgICAgICAgIHdlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2Uv
Y29udGV4dC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMu
aHRtbAorCisgICAgICAgIFRoZSBjaGFuZ2UgaXMgZG9uZSB0byBmb3JrZWQgV2ViR0wgY29uZm9y
bWFuY2UgdGVzdCBpbiBhIHdheSB0aGF0IGl0IGNhbiB0aGVuIGxhdGVyIGJlIHVwc3RyZWFtZWQg
YmFjaworICAgICAgICB0byB0aGUgY29uZm9ybWFuY2UgdGVzdCByZXBvLCBpbXBvcnRlZCBiYWNr
IHRoZW4gdGhlIGZvcmsgY2FuIGJlIGRlbGV0ZWQuCisKKyAgICAgICAgVGhlIHRlc3QgaGFkIGZv
bGxvd2luZyBwcm9ibGVtczoKKyAgICAgICAgIC0gRGlkIG5vdCB0ZXN0IGlmIGRlcHRoIHdvdWxk
IGFmZmVjdCB0aGUgcmVuZGVyaW5nIGluIGNhc2UgZGVwdGggPT0gZmFsc2V8dHJ1ZSwgc3RlbmNp
bCA9PSB0cnVlCisgICAgICAgICAtIERpZCBub3QgdGVzdCBwb3NpdGl2ZSBjYXNlLCBlLmcuIHJl
bmRlcmluZyBwcm9kdWNlcyBjaGFuZ2VzLiBUaGlzIHdvdWxkIG1lYW4gdGhhdCB0aGlzIHBhcnRp
Y3VsYXIKKyAgICAgICAgICAgdGVzdCB3b3VsZCBwYXNzIGV2ZW4gaWYgdGhlIGltcGxlbWVudGF0
aW9uIHdvdWxkIG5ldmVyIHByb2R1Y2UgYW55IHJlbmRlcmluZworICAgICAgICAgLSBEaWQgbm90
IHRlc3QgdGhlIGZsYWdzIGluIGNvbnRleHQgb2Ygb3RoZXIgZmxhZ3MsIG9ubHkgaW4gY29udGV4
dCBvZiB0aGUgc2luZ2xlIGZsYWcgZGV2aWF0aW5nIGZyb20KKyAgICAgICAgICAgdGhlIGRlZmF1
bHQgc2V0dGluZ3MuCisKKyAgICAgICAgKiB3ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90
ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2NvbnRleHQvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRl
cHRoLXN0ZW5jaWwtYW50aWFsaWFzLmh0bWw6CisKIDIwMjEtMDgtMjIgIFl1c3VrZSBTdXp1a2kg
IDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBSZW1vdmUgYWxyZWFkeS1zaGlw
cGVkIHdhc20gb3B0aW9uIGZsYWdzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJnbC9wZW5k
aW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2NvbnRleHQvY29udGV4
dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFzLmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNl
L2NvbnRleHQvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFz
Lmh0bWwKaW5kZXggYWM3OTY5ODhjZTBjYWYyODUyNzVmNmQ4ODJhNDE0NGFlMmM1ZmIyZC4uNjM1
NGI3ZDNkNDdlZmY2YTc4NmE4OTY3ZGVlM2ZiM2U3NTM1MDBjNCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5j
ZS9jb250ZXh0L2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlh
cy5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dlYmdsX3Rl
c3RfZmlsZXMvY29uZm9ybWFuY2UvY29udGV4dC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVw
dGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbApAQCAtNDcsNiArNDcsNyBAQCB2YXIgZnJhbWVidWZm
ZXI7CiB2YXIgZmJIYXNDb2xvcjsKIHZhciBmYkhhc0RlcHRoOwogdmFyIGZiSGFzU3RlbmNpbDsK
K3ZhciBjb250ZXh0VmVyc2lvbiA9IHd0dS5nZXREZWZhdWx0M0RDb250ZXh0VmVyc2lvbigpOwog
CiBmdW5jdGlvbiBpbml0KCkKIHsKQEAgLTU1LDYgKzU2LDIzIEBAIGZ1bmN0aW9uIGluaXQoKQog
ICAgIHJ1blRlc3QoKTsKIH0KIAordmFyIHZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbCisg
ICAgMS4wLCAxLjAsIDAuMCwKKyAgICAtMS4wLCAxLjAsIDAuMCwKKyAgICAtMS4wLCAtMS4wLCAw
LjAsCisgICAgMS4wLCAxLjAsIDAuMCwKKyAgICAtMS4wLCAtMS4wLCAwLjAsCisgICAgMS4wLCAt
MS4wLCAwLjBdKTsKKwordmFyIGNvbG9ycyA9IG5ldyBVaW50OEFycmF5KFsKKyAgICAyNTUsIDAs
IDAsIDI1NSwKKyAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAy
NTUsIDAsIDAsIDI1NSwKKyAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAyNTUsIDAsIDAsIDI1NV0p
OworCisKIGZ1bmN0aW9uIGdldFdlYkdMKGNhbnZhc1dpZHRoLCBjYW52YXNIZWlnaHQsIGNvbnRl
eHRBdHRyaWJzLCBjbGVhckNvbG9yLCBjbGVhckRlcHRoLCBjbGVhclN0ZW5jaWwpCiB7CiAgICAg
dmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwpAQCAtNjMsNyAr
ODEsNyBAQCBmdW5jdGlvbiBnZXRXZWJHTChjYW52YXNXaWR0aCwgY2FudmFzSGVpZ2h0LCBjb250
ZXh0QXR0cmlicywgY2xlYXJDb2xvciwgY2xlYXJEZQogICAgIGNhbnZhcy53aWR0aCA9IGNhbnZh
c1dpZHRoOwogICAgIGNhbnZhcy5oZWlnaHQgPSBjYW52YXNIZWlnaHQ7CiAKLSAgICBnbCA9IHd0
dS5jcmVhdGUzRENvbnRleHQoY2FudmFzLCBjb250ZXh0QXR0cmlicyk7CisgICAgZ2wgPSB3dHUu
Y3JlYXRlM0RDb250ZXh0KGNhbnZhcywgY29udGV4dEF0dHJpYnMsIGNvbnRleHRWZXJzaW9uKTsK
ICAgICBpZiAoIWdsKQogICAgICAgICByZXR1cm4gbnVsbDsKIApAQCAtMTAyLDIyNyArMTIwLDE1
MiBAQCBmdW5jdGlvbiBnZXRXZWJHTChjYW52YXNXaWR0aCwgY2FudmFzSGVpZ2h0LCBjb250ZXh0
QXR0cmlicywgY2xlYXJDb2xvciwgY2xlYXJEZQogICAgICAgfQogICAgIH0KICAgICBnbC5iaW5k
RnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwpOwotICAgIHd0dS5nbEVycm9yU2hvdWxk
QmUoZ2wsIGdsLk5PX0VSUk9SLCAic2hvdWxkIGJlIG5vIGVycm9ycyIpOwogCi0gICAgcmV0dXJu
IGdsOwotfQotCi1mdW5jdGlvbiBkcmF3QW5kUmVhZFBpeGVsKGdsLCB2ZXJ0aWNlcywgY29sb3Jz
KQotewogICAgIHZhciBjb2xvck9mZnNldCA9IHZlcnRpY2VzLmJ5dGVMZW5ndGg7Ci0KICAgICB2
YXIgdmJvID0gZ2wuY3JlYXRlQnVmZmVyKCk7CiAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9C
VUZGRVIsIHZibyk7CiAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIGNvbG9yT2Zm
c2V0ICsgY29sb3JzLmJ5dGVMZW5ndGgsIGdsLlNUQVRJQ19EUkFXKTsKICAgICBnbC5idWZmZXJT
dWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdmVydGljZXMpOwogICAgIGdsLmJ1ZmZlclN1YkRh
dGEoZ2wuQVJSQVlfQlVGRkVSLCBjb2xvck9mZnNldCwgY29sb3JzKTsKLQogICAgIGdsLnZlcnRl
eEF0dHJpYlBvaW50ZXIoMCwgMywgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKICAgICBnbC5lbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDEsIDQs
IGdsLlVOU0lHTkVEX0JZVEUsIHRydWUsIDAsIGNvbG9yT2Zmc2V0KTsKICAgICBnbC5lbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheSgxKTsKIAotICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAw
LCB2ZXJ0aWNlcy5sZW5ndGggLyAzKTsKKyAgICB3dHUuZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5O
T19FUlJPUiwgInNob3VsZCBiZSBubyBlcnJvcnMiKTsKKyAgICByZXR1cm4gZ2w7CiB9CiAKLWZ1
bmN0aW9uIHRlc3REZWZhdWx0KCkKK2Z1bmN0aW9uIGRyYXcoZ2wsIHZlcnRpY2VzQ291bnQpCiB7
Ci0gICAgZGVidWcoIlRlc3RpbmcgZGVmYXVsdCBhdHRyaWJ1dGVzOiB7IHN0ZW5jaWw6ZmFsc2Ug
fSIpOwotICAgIHNob3VsZEJlTm9uTnVsbCgiZ2wgPSBnZXRXZWJHTCgxLCAxLCBudWxsLCBbIDAs
IDAsIDAsIDAgXSwgMSwgMCkiKTsKLSAgICBzaG91bGRCZUZhbHNlKCJnbC5nZXRDb250ZXh0QXR0
cmlidXRlcygpLnN0ZW5jaWwiKTsKLSAgICBzaG91bGRCZVRydWUoImdsLmdldFBhcmFtZXRlcihn
bC5TVEVOQ0lMX0JJVFMpID09IDAiKTsKKyAgICB2ZXJ0aWNlc0NvdW50ID0gdmVydGljZXNDb3Vu
dCB8fCB2ZXJ0aWNlcy5sZW5ndGggLyAzOworICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVT
LCAwLCB2ZXJ0aWNlc0NvdW50KTsKIH0KIAotZnVuY3Rpb24gdGVzdEFscGhhKGFscGhhKQorZnVu
Y3Rpb24gY2hlY2tEcmF3KGhhc0FscGhhLCBoYXNTdGVuY2lsLCBoYXNEZXB0aCwgaGFzQW50aWFs
aWFzKQogewotICAgIGRlYnVnKCJUZXN0aW5nIGFscGhhID0gIiArIGFscGhhKTsKLSAgICBpZiAo
YWxwaGEpIHsKLSAgICAgICAgc2hvdWxkQmVOb25OdWxsKCJnbCA9IGdldFdlYkdMKDEsIDEsIHsg
YWxwaGE6IHRydWUsIGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFs
c2UgfSwgWyAwLCAwLCAwLCAwIF0sIDEsIDApIik7Ci0gICAgICAgIHNob3VsZEJlVHJ1ZSgiZ2wu
Z2V0UGFyYW1ldGVyKGdsLkFMUEhBX0JJVFMpID49IDgiKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBzaG91bGRCZU5vbk51bGwoImdsID0gZ2V0V2ViR0woMSwgMSwgeyBhbHBoYTogZmFsc2UsIGRl
cHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAw
LCAwIF0sIDEsIDApIik7Ci0gICAgICAgIHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGds
LkFMUEhBX0JJVFMpID09IDAiKTsKLSAgICB9Ci0gICAgc2hvdWxkQmVUcnVlKCJnbC5nZXRQYXJh
bWV0ZXIoZ2wuUkVEX0JJVFMpID49IDgiKTsKLSAgICBzaG91bGRCZVRydWUoImdsLmdldFBhcmFt
ZXRlcihnbC5HUkVFTl9CSVRTKSA+PSA4Iik7Ci0gICAgc2hvdWxkQmVUcnVlKCJnbC5nZXRQYXJh
bWV0ZXIoZ2wuQkxVRV9CSVRTKSA+PSA4Iik7Ci0gICAgc2hvdWxkQmVUcnVlKCJnbC5nZXRQYXJh
bWV0ZXIoZ2wuREVQVEhfQklUUykgPT0gMCIpOwotICAgIHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFy
YW1ldGVyKGdsLlNURU5DSUxfQklUUykgPT0gMCIpOwotCi0gICAgc2hvdWxkQmVOb25OdWxsKCJj
b250ZXh0QXR0cmlicyA9IGdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCkiKTsKLSAgICBzaG91bGRC
ZVRydWUoImNvbnRleHRBdHRyaWJzLmFscGhhID09ICIgKyBhbHBoYSk7CisgICAgbGV0IHJlZCA9
IFsyNTUsIDAsIDAsIDI1NSBdOworICAgIGxldCBibGFjayA9IFswLCAwLCAwLCBoYXNBbHBoYSA/
IDAgOiAyNTUgXTsKKyAgICBkZWJ1ZyhgVGVzdGluZyB0aGF0IHN0ZW5jaWwgJHsgaGFzU3RlbmNp
bCA/ICdhZmZlY3RzJzogJ2RvZXMgbm90IGFmZmVjdCd9IHRoZSByZW5kZXJpbmcuYCk7CisgICAg
Z2wuc3RlbmNpbEZ1bmMoZ2wuTkVWRVIsIDEsIDEpOworICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQ
LCBnbC5LRUVQLCBnbC5LRUVQKTsKKyAgICBkcmF3KGdsKTsKKyAgICBjb3JyZWN0Q29sb3IgPSBo
YXNTdGVuY2lsID8gYmxhY2sgOiByZWQ7CisgICAgd3R1LmNoZWNrQ2FudmFzKGdsLCBjb3JyZWN0
Q29sb3IpCisgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZF
Ul9CSVQgfCBnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpOworICAgIHd0dS5jaGVja0NhbnZhcyhnbCwg
YmxhY2spOworICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywgMSwgMSk7CiAKLSAgICB2YXIg
Y29ycmVjdENvbG9yID0gKGNvbnRleHRBdHRyaWJzLmFscGhhID8gWzAsIDAsIDAsIDBdIDogWzAs
IDAsIDAsIDI1NV0pOwotICAgIHd0dS5jaGVja0NhbnZhc1JlY3QoZ2wsIDAsIDAsIDEsIDEsIGNv
cnJlY3RDb2xvcik7CisgICAgZGVidWcoYFRlc3RpbmcgdGhhdCBkZXB0aCAkeyBoYXNEZXB0aCA/
ICdhZmZlY3RzJzogJ2RvZXMgbm90IGFmZmVjdCd9IHRoZSByZW5kZXJpbmcuYCk7CisgICAgZ2wu
ZGVwdGhGdW5jKGdsLk5FVkVSKTsKKyAgICBkcmF3KGdsKTsKKyAgICBjb3JyZWN0Q29sb3IgPSBo
YXNEZXB0aCA/IGJsYWNrIDogcmVkOworICAgIHd0dS5jaGVja0NhbnZhcyhnbCwgY29ycmVjdENv
bG9yKTsKKyAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQVEhfQlVGRkVS
X0JJVCB8IGdsLlNURU5DSUxfQlVGRkVSX0JJVCk7CisgICAgd3R1LmNoZWNrQ2FudmFzKGdsLCBi
bGFjayk7CisgICAgZ2wuZGVwdGhGdW5jKGdsLkFMV0FZUyk7CiAKLSAgICBpZiAoZmJIYXNDb2xv
cikgewotICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBmcmFtZWJ1ZmZl
cik7Ci0gICAgICBnbC5jbGVhckNvbG9yKDAuNSwgMC41LCAwLjUsIDAuNSk7Ci0gICAgICBnbC5j
bGVhcihnbC5DT0xPUl9CVUZGRVJfQklUKTsKLSAgICAgIHd0dS5jaGVja0NhbnZhc1JlY3QoZ2ws
IDAsIDAsIDEsIDEsIFsxMjcsIDEyNywgMTI3LCAxMjddLCB1bmRlZmluZWQsIDEpOwotICAgICAg
Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTsKKyAgICBkZWJ1ZyhgVGVz
dGluZyB0aGF0IHJlbmRlcmluZyBpcyAke2hhc0FudGlhbGlhcyA/ICdhbnRpYWxpYXNlZCcgOiAn
YWxpYXNlZCd9LmApOworICAgIGRyYXcoZ2wsIDMpOworICAgIGxldCBOID0gMjsKKyAgICBsZXQg
YnVmID0gbmV3IFVpbnQ4QXJyYXkoTiAqIE4gKiA0KTsKKyAgICBnbC5yZWFkUGl4ZWxzKDAsIDAs
IE4sIE4sIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJ1Zik7CisgICAgcmVkQ2hhbm5lbHNb
MF0gPSBidWZbNCAqIChOICsgMSldOyAvLyAoMSwgMSkKKyAgICByZWRDaGFubmVsc1sxXSA9IGJ1
Zls0ICogTiAqIChOIC0gMSldOyAvLyBsZWZ0IHRvcAorICAgIHJlZENoYW5uZWxzWzJdID0gYnVm
WzQgKiAoTiAtIDEpXTsgLy8gcmlnaHQgYm90dG9tCisgICAgc2hvdWxkQmUoInJlZENoYW5uZWxz
WzFdIiwgIjI1NSIpOworICAgIHNob3VsZEJlKCJyZWRDaGFubmVsc1syXSIsICIwIik7CisgICAg
aWYgKGhhc0FudGlhbGlhcykgeworICAgICAgICBzaG91bGROb3RCZSgicmVkQ2hhbm5lbHNbMF0i
LCAiMjU1Iik7CisgICAgICAgIHNob3VsZE5vdEJlKCJyZWRDaGFubmVsc1swXSIsICIwIik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCJyZWRDaGFubmVsc1swXSA9PSAyNTUg
fHwgcmVkQ2hhbm5lbHNbMF0gPT0gMCIpOwogICAgIH0KKyAgICBnbC5jbGVhcihnbC5DT0xPUl9C
VUZGRVJfQklUIHwgZ2wuREVQVEhfQlVGRkVSX0JJVCB8IGdsLlNURU5DSUxfQlVGRkVSX0JJVCk7
CisgICAgd3R1LmNoZWNrQ2FudmFzKGdsLCBibGFjayk7CisKKyAgICBkZWJ1ZygiVGVzdGluZyB0
aGF0IHJlbmRlcmluZyB3b3Jrcy4iKTsKKyAgICBkcmF3KGdsKTsKKyAgICB3dHUuY2hlY2tDYW52
YXMoZ2wsIHJlZCk7CisgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRI
X0JVRkZFUl9CSVQgfCBnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpOworICAgIHd0dS5jaGVja0NhbnZh
cyhnbCwgYmxhY2spOwogfQogCi1mdW5jdGlvbiB0ZXN0RGVwdGgoZGVwdGgpCitmdW5jdGlvbiB0
ZXN0RGVmYXVsdCgpCiB7Ci0gICAgZGVidWcoIlRlc3RpbmcgZGVwdGggPSAiICsgZGVwdGgpOwot
ICAgIGlmIChkZXB0aCkgewotICAgICAgICBzaG91bGRCZU5vbk51bGwoImdsID0gZ2V0V2ViR0wo
MSwgMSwgeyBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDEg
XSwgMSwgMCkiKTsKLSAgICAgICAgc2hvdWxkQmVUcnVlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuREVQ
VEhfQklUUykgPj0gMTYiKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzaG91bGRCZU5vbk51bGwo
ImdsID0gZ2V0V2ViR0woMSwgMSwgeyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbnRp
YWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSIpOwotICAgICAgICBzaG91bGRC
ZVRydWUoImdsLmdldFBhcmFtZXRlcihnbC5ERVBUSF9CSVRTKSA9PSAwIik7Ci0gICAgfQotICAg
IHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLlJFRF9CSVRTKSA+PSA4Iik7Ci0gICAg
c2hvdWxkQmVUcnVlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuR1JFRU5fQklUUykgPj0gOCIpOwotICAg
IHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLkJMVUVfQklUUykgPj0gOCIpOwotICAg
IHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLkFMUEhBX0JJVFMpID49IDgiKTsKKyAg
ICBkZWJ1ZygiVGVzdGluZyBkZWZhdWx0IGF0dHJpYnV0ZXM6IHsgc3RlbmNpbDpmYWxzZSB9Iik7
CisgICAgc2hvdWxkQmVOb25OdWxsKCJnbCA9IGdldFdlYkdMKDEsIDEsIG51bGwsIFsgMCwgMCwg
MCwgMCBdLCAxLCAwKSIpOworICAgIHNob3VsZEJlRmFsc2UoImdsLmdldENvbnRleHRBdHRyaWJ1
dGVzKCkuc3RlbmNpbCIpOworICAgIHNob3VsZEJlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuU1RFTkNJ
TF9CSVRTKSIsICIwIik7Cit9CiAKK2Z1bmN0aW9uIHRlc3RBdHRyaWJ1dGVzQWZmZWN0Q29udGV4
dChhbHBoYSwgc3RlbmNpbCwgZGVwdGgsIGFudGlhbGlhcykKK3sKKyAgICBzaG91bGRCZU5vbk51
bGwoYGdsID0gZ2V0V2ViR0woMiwgMiwgeyBkZXB0aDogJHtkZXB0aH0sIHN0ZW5jaWw6ICR7c3Rl
bmNpbH0sIGFudGlhbGlhczogJHthbnRpYWxpYXN9LCBhbHBoYTogJHthbHBoYX0gfSwgWyAwLCAw
LCAwLCAwIF0sIDEsIDApYCk7CiAgICAgc2hvdWxkQmVOb25OdWxsKCJjb250ZXh0QXR0cmlicyA9
IGdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCkiKTsKIAotICAgIGdsLmRlcHRoRnVuYyhnbC5ORVZF
Uik7Ci0KLSAgICB2YXIgdmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KFsKLSAgICAgICAgIDEu
MCwgIDEuMCwgMC4wLAotICAgICAgICAtMS4wLCAgMS4wLCAwLjAsCi0gICAgICAgIC0xLjAsIC0x
LjAsIDAuMCwKLSAgICAgICAgIDEuMCwgIDEuMCwgMC4wLAotICAgICAgICAtMS4wLCAtMS4wLCAw
LjAsCi0gICAgICAgICAxLjAsIC0xLjAsIDAuMF0pOwotICAgIHZhciBjb2xvcnMgPSBuZXcgVWlu
dDhBcnJheShbCi0gICAgICAgIDI1NSwgMCwgMCwgMjU1LAotICAgICAgICAyNTUsIDAsIDAsIDI1
NSwKLSAgICAgICAgMjU1LCAwLCAwLCAyNTUsCi0gICAgICAgIDI1NSwgMCwgMCwgMjU1LAotICAg
ICAgICAyNTUsIDAsIDAsIDI1NSwKLSAgICAgICAgMjU1LCAwLCAwLCAyNTVdKTsKLQotICAgIGRy
YXdBbmRSZWFkUGl4ZWwoZ2wsIHZlcnRpY2VzLCBjb2xvcnMsIDAsIDApOwotICAgIGNvcnJlY3RD
b2xvciA9IChjb250ZXh0QXR0cmlicy5kZXB0aCA/IFswLCAwLCAwLCAyNTVdIDogWzI1NSwgMCwg
MCwgMjU1XSk7Ci0gICAgd3R1LmNoZWNrQ2FudmFzUmVjdChnbCwgMCwgMCwgMSwgMSwgY29ycmVj
dENvbG9yKTsKLQotICAgIGlmIChmYkhhc0RlcHRoKSB7Ci0gICAgICBnbC5iaW5kRnJhbWVidWZm
ZXIoZ2wuRlJBTUVCVUZGRVIsIGZyYW1lYnVmZmVyKTsKLSAgICAgIGdsLmNsZWFyKGdsLkNPTE9S
X0JVRkZFUl9CSVQgfCBnbC5ERVBUSF9CVUZGRVJfQklUKTsKLSAgICAgIGRyYXdBbmRSZWFkUGl4
ZWwoZ2wsIHZlcnRpY2VzLCBjb2xvcnMsIDAsIDApOwotICAgICAgd3R1LmNoZWNrQ2FudmFzUmVj
dChnbCwgMCwgMCwgMSwgMSwgWzAsIDAsIDAsIDI1NV0pOwotICAgICAgZ2wuYmluZEZyYW1lYnVm
ZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTsKKyAgICBzaG91bGRCZUdyZWF0ZXJUaGFuT3JFcXVh
bCgiZ2wuZ2V0UGFyYW1ldGVyKGdsLlJFRF9CSVRTKSIsICI4Iik7CisgICAgc2hvdWxkQmVHcmVh
dGVyVGhhbk9yRXF1YWwoImdsLmdldFBhcmFtZXRlcihnbC5HUkVFTl9CSVRTKSIsICI4Iik7Cisg
ICAgc2hvdWxkQmVHcmVhdGVyVGhhbk9yRXF1YWwoImdsLmdldFBhcmFtZXRlcihnbC5CTFVFX0JJ
VFMpIiwgIjgiKTsKKworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5hbHBoYSIsICIiICsg
YWxwaGEpOworICAgIGlmIChjb250ZXh0VmVyc2lvbiA8IDIpIHsKKyAgICAgICAgaWYgKCFzdGVu
Y2lsKQorICAgICAgICAgICAgc2hvdWxkQmVGYWxzZSgiY29udGV4dEF0dHJpYnMuc3RlbmNpbCIp
OworICAgICAgICBpZiAoIWRlcHRoKQorICAgICAgICAgICAgc2hvdWxkQmVGYWxzZSgiY29udGV4
dEF0dHJpYnMuZGVwdGgiKTsKKyAgICAgICAgaWYgKCFhbnRpYWxpYXMpCisgICAgICAgICAgICBz
aG91bGRCZUZhbHNlKCJjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMiKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuc3RlbmNpbCIsICIiICsgc3RlbmNpbCk7
CisgICAgICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5kZXB0aCIsICIiICsgZGVwdGgpOwor
ICAgICAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuYW50aWFsaWFzIiwgIiIgKyBhbnRpYWxp
YXMpOwogICAgIH0KLX0KIAotZnVuY3Rpb24gdGVzdFN0ZW5jaWxBbmREZXB0aChzdGVuY2lsLCBk
ZXB0aCkKLXsKLSAgICBkZWJ1ZygiVGVzdGluZyBzdGVuY2lsID0gIiArIHN0ZW5jaWwgKyAiLCBk
ZXB0aCA9ICIgKyBkZXB0aCk7Ci0gICAgdmFyIGNyZWF0aW9uU3RyaW5nID0KLSAgICAgICAgImds
ID0gZ2V0V2ViR0woMSwgMSwgeyBkZXB0aDogIiArIGRlcHRoICsgIiwgc3RlbmNpbDogIiArIHN0
ZW5jaWwgKyAiLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSI7Ci0g
ICAgc2hvdWxkQmVOb25OdWxsKGNyZWF0aW9uU3RyaW5nKTsKLQotICAgIHNob3VsZEJlVHJ1ZSgi
Z2wuZ2V0UGFyYW1ldGVyKGdsLlJFRF9CSVRTKSA+PSA4Iik7Ci0gICAgc2hvdWxkQmVUcnVlKCJn
bC5nZXRQYXJhbWV0ZXIoZ2wuR1JFRU5fQklUUykgPj0gOCIpOwotICAgIHNob3VsZEJlVHJ1ZSgi
Z2wuZ2V0UGFyYW1ldGVyKGdsLkJMVUVfQklUUykgPj0gOCIpOwotICAgIHNob3VsZEJlVHJ1ZSgi
Z2wuZ2V0UGFyYW1ldGVyKGdsLkFMUEhBX0JJVFMpID49IDgiKTsKLSAgICBpZiAoZGVwdGgpCi0g
ICAgICAgIHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLkRFUFRIX0JJVFMpID49IDE2
Iik7CisgICAgaWYgKGNvbnRleHRBdHRyaWJzLmFscGhhKQorICAgICAgICBzaG91bGRCZUdyZWF0
ZXJUaGFuT3JFcXVhbCgiZ2wuZ2V0UGFyYW1ldGVyKGdsLkFMUEhBX0JJVFMpIiwgIjgiKTsKICAg
ICBlbHNlCi0gICAgICAgIHNob3VsZEJlVHJ1ZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLkRFUFRIX0JJ
VFMpID09IDAiKTsKLQotICAgIGlmIChzdGVuY2lsKQotICAgICAgICBzaG91bGRCZVRydWUoImds
LmdldFBhcmFtZXRlcihnbC5TVEVOQ0lMX0JJVFMpID49IDgiKTsKKyAgICAgICAgc2hvdWxkQmUo
ImdsLmdldFBhcmFtZXRlcihnbC5BTFBIQV9CSVRTKSIsICIwIik7CisgICAgaWYgKGNvbnRleHRB
dHRyaWJzLnN0ZW5jaWwpCisgICAgICAgIHNob3VsZEJlR3JlYXRlclRoYW5PckVxdWFsKCJnbC5n
ZXRQYXJhbWV0ZXIoZ2wuU1RFTkNJTF9CSVRTKSIsICI4Iik7CisgICAgZWxzZQorICAgICAgICBz
aG91bGRCZSgiZ2wuZ2V0UGFyYW1ldGVyKGdsLlNURU5DSUxfQklUUykiLCAiMCIpOworICAgIGlm
IChjb250ZXh0QXR0cmlicy5kZXB0aCkKKyAgICAgICAgc2hvdWxkQmVHcmVhdGVyVGhhbk9yRXF1
YWwoImdsLmdldFBhcmFtZXRlcihnbC5ERVBUSF9CSVRTKSIsICIxNiIpOwogICAgIGVsc2UKLSAg
ICAgICAgc2hvdWxkQmVUcnVlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuU1RFTkNJTF9CSVRTKSA9PSAw
Iik7CisgICAgICAgIHNob3VsZEJlKCJnbC5nZXRQYXJhbWV0ZXIoZ2wuREVQVEhfQklUUykiLCAi
MCIpOwogCi0gICAgc2hvdWxkQmVOb25OdWxsKCJjb250ZXh0QXR0cmlicyA9IGdsLmdldENvbnRl
eHRBdHRyaWJ1dGVzKCkiKTsKLSAgICBpZiAoIWRlcHRoICYmIGNvbnRleHRBdHRyaWJzLmRlcHRo
KSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoIldlYkdMIGltcGxlbWVudGF0aW9uIHByb3ZpZGVkIGEg
ZGVwdGggYnVmZmVyIHdoZW4gaXQgc2hvdWxkIG5vdCBoYXZlIik7Ci0gICAgfQotICAgIGlmICgh
Y29udGV4dEF0dHJpYnMuZGVwdGgpCi0gICAgICAgIGRlcHRoID0gZmFsc2U7Ci0gICAgaWYgKCFz
dGVuY2lsICYmIGNvbnRleHRBdHRyaWJzLnN0ZW5jaWwpIHsKLSAgICAgICAgdGVzdEZhaWxlZCgi
V2ViR0wgaW1wbGVtZW50YXRpb24gcHJvdmlkZWQgYSBzdGVuY2lsIGJ1ZmZlciB3aGVuIGl0IHNo
b3VsZCBub3QgaGF2ZSIpOwotICAgIH0KLSAgICBpZiAoIWNvbnRleHRBdHRyaWJzLnN0ZW5jaWwp
Ci0gICAgICAgIHN0ZW5jaWwgPSBmYWxzZTsKKyAgICB2YXIgY29ycmVjdENvbG9yID0gY29udGV4
dEF0dHJpYnMuYWxwaGEgPyBbMCwgMCwgMCwgMF0gOiBbMCwgMCwgMCwgMjU1XTsKKyAgICB3dHUu
Y2hlY2tDYW52YXMoZ2wsIGNvcnJlY3RDb2xvcik7CiAKLSAgICBnbC5kZXB0aEZ1bmMoZ2wuQUxX
QVlTKTsKKyAgICBkZWJ1ZygiVGVzdGluZyBkZWZhdWx0IGZyYW1lYnVmZmVyLiIpOworICAgIGNo
ZWNrRHJhdyhhbHBoYSwgc3RlbmNpbCwgZGVwdGgsIGFudGlhbGlhcyk7CiAKLSAgICBnbC5zdGVu
Y2lsRnVuYyhnbC5ORVZFUiwgMSwgMSk7Ci0gICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsIGdsLktF
RVAsIGdsLktFRVApOwotCi0gICAgdmFyIHZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbCi0g
ICAgICAgICAxLjAsIDEuMCwgMC4wLAotICAgICAgICAtMS4wLCAxLjAsIDAuMCwKLSAgICAgICAg
LTEuMCwgLTEuMCwgMC4wLAotICAgICAgICAgMS4wLCAxLjAsIDAuMCwKLSAgICAgICAgLTEuMCwg
LTEuMCwgMC4wLAotICAgICAgICAgMS4wLCAtMS4wLCAwLjBdKTsKLSAgICB2YXIgY29sb3JzID0g
bmV3IFVpbnQ4QXJyYXkoWwotICAgICAgICAyNTUsIDAsIDAsIDI1NSwKLSAgICAgICAgMjU1LCAw
LCAwLCAyNTUsCi0gICAgICAgIDI1NSwgMCwgMCwgMjU1LAotICAgICAgICAyNTUsIDAsIDAsIDI1
NSwKLSAgICAgICAgMjU1LCAwLCAwLCAyNTUsCi0gICAgICAgIDI1NSwgMCwgMCwgMjU1XSk7Ci0K
LSAgICBkcmF3QW5kUmVhZFBpeGVsKGdsLCB2ZXJ0aWNlcywgY29sb3JzLCAwLCAwKTsKLSAgICBj
b3JyZWN0Q29sb3IgPSAoc3RlbmNpbCA/IFswLCAwLCAwLCAyNTVdIDogWzI1NSwgMCwgMCwgMjU1
XSk7Ci0gICAgd3R1LmNoZWNrQ2FudmFzUmVjdChnbCwgMCwgMCwgMSwgMSwgY29ycmVjdENvbG9y
KQotCi0gICAgaWYgKGZiSGFzU3RlbmNpbCkgewotICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGds
LkZSQU1FQlVGRkVSLCBmcmFtZWJ1ZmZlcik7Ci0gICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZG
RVJfQklUIHwgZ2wuREVQVEhfQlVGRkVSX0JJVCk7Ci0gICAgICBkcmF3QW5kUmVhZFBpeGVsKGds
LCB2ZXJ0aWNlcywgY29sb3JzLCAwLCAwKTsKLSAgICAgIHd0dS5jaGVja0NhbnZhc1JlY3QoZ2ws
IDAsIDAsIDEsIDEsIFswLCAwLCAwLCAyNTVdKTsKLSAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihn
bC5GUkFNRUJVRkZFUiwgbnVsbCk7CisgICAgaWYgKGZiSGFzQ29sb3IpIHsKKyAgICAgICAgZGVi
dWcoIlRlc3RpbmcgYm91bmQgZnJhbWVidWZmZXIgb2JqZWN0LiIpOworICAgICAgICBnbC5iaW5k
RnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGZyYW1lYnVmZmVyKTsKKyAgICAgICAgZ2wuY2xl
YXJDb2xvcigwLCAwLCAwLCAwKTsKKyAgICAgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJ
VCB8IGdsLkRFUFRIX0JVRkZFUl9CSVQgfCBnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpOworICAgICAg
ICBjaGVja0RyYXcodHJ1ZSwgZmJIYXNTdGVuY2lsLCBmYkhhc0RlcHRoLCBmYWxzZSk7CisgICAg
ICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7CiAgICAgfQogfQog
Ci1mdW5jdGlvbiB0ZXN0QW50aWFsaWFzKGFudGlhbGlhcykKLXsKLSAgICBkZWJ1ZygiVGVzdGlu
ZyBhbnRpYWxpYXMgPSAiICsgYW50aWFsaWFzKTsKLSAgICAvLyBCb3RoIHRoZSB3aWR0aCBhbmQg
aGVpZ2h0IG9mIGNhbnZhcyBhcmUgTi4KLSAgICB2YXIgTiA9IDI7Ci0gICAgaWYgKGFudGlhbGlh
cykKLSAgICAgICAgc2hvdWxkQmVOb25OdWxsKCJnbCA9IGdldFdlYkdMKCIgKyBOICsgIiwgIiAr
IE4gKyAiLCB7IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFscGhhOiBmYWxzZSwgYW50
aWFsaWFzOiB0cnVlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSIpOwotICAgIGVsc2UKLSAgICAg
ICAgc2hvdWxkQmVOb25OdWxsKCJnbCA9IGdldFdlYkdMKCIgKyBOICsgIiwgIiArIE4gKyAiLCB7
IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFscGhhOiBmYWxzZSwgYW50aWFsaWFzOiBm
YWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkiKTsKLSAgICBzaG91bGRCZU5vbk51bGwoImNv
bnRleHRBdHRyaWJzID0gZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSIpOwotCi0gICAgdmFyIHZl
cnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbCi0gICAgICAgICAxLjAsIDEuMCwgMC4wLAotICAg
ICAgICAtMS4wLCAxLjAsIDAuMCwKLSAgICAgICAgLTEuMCwgLTEuMCwgMC4wXSk7Ci0gICAgdmFy
IGNvbG9ycyA9IG5ldyBVaW50OEFycmF5KFsKLSAgICAgICAgMjU1LCAwLCAwLCAyNTUsCi0gICAg
ICAgIDI1NSwgMCwgMCwgMjU1LAotICAgICAgICAyNTUsIDAsIDAsIDI1NV0pOwotICAgIGRyYXdB
bmRSZWFkUGl4ZWwoZ2wsIHZlcnRpY2VzLCBjb2xvcnMsIDAsIDApOwotICAgIHZhciBidWYgPSBu
ZXcgVWludDhBcnJheShOICogTiAqIDQpOwotICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgTiwgTiwg
Z2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgYnVmKTsKLSAgICByZWRDaGFubmVsc1swXSA9IGJ1
Zls0ICogKE4gKyAxKV07IC8vICgxLCAxKQotICAgIHJlZENoYW5uZWxzWzFdID0gYnVmWzQgKiBO
ICogKE4gLSAxKV07IC8vIGxlZnQgdG9wCi0gICAgcmVkQ2hhbm5lbHNbMl0gPSBidWZbNCAqIChO
IC0gMSldOyAvLyByaWdodCBib3R0b20KLSAgICBzaG91bGRCZVRydWUoInJlZENoYW5uZWxzWzFd
ID09IDI1NSAmJiByZWRDaGFubmVsc1syXSA9PSAwIik7Ci0gICAgc2hvdWxkQmUoInJlZENoYW5u
ZWxzWzBdICE9IDI1NSAmJiByZWRDaGFubmVsc1swXSAhPSAwIiwgImNvbnRleHRBdHRyaWJzLmFu
dGlhbGlhcyIpOwotfQotCiBmdW5jdGlvbiBydW5UZXN0KCkKIHsKICAgICB0ZXN0RGVmYXVsdCgp
OwotICAgIHRlc3RBbHBoYSh0cnVlKTsKLSAgICB0ZXN0QWxwaGEoZmFsc2UpOwotICAgIHRlc3RE
ZXB0aCh0cnVlKTsKLSAgICB0ZXN0RGVwdGgoZmFsc2UpOwotICAgIHRlc3RTdGVuY2lsQW5kRGVw
dGgodHJ1ZSwgZmFsc2UpOwotICAgIHRlc3RTdGVuY2lsQW5kRGVwdGgoZmFsc2UsIGZhbHNlKTsK
LSAgICB0ZXN0U3RlbmNpbEFuZERlcHRoKHRydWUsIHRydWUpOwotICAgIHRlc3RTdGVuY2lsQW5k
RGVwdGgoZmFsc2UsIHRydWUpOwotICAgIHRlc3RBbnRpYWxpYXModHJ1ZSk7Ci0gICAgdGVzdEFu
dGlhbGlhcyhmYWxzZSk7Ci0KKyAgICBsZXQgY2FzZXMgPSBbZmFsc2UsIHRydWVdOworICAgIGZv
ciAobGV0IGFscGhhIG9mIGNhc2VzKSB7CisgICAgICAgIGZvciAobGV0IHN0ZW5jaWwgb2YgY2Fz
ZXMpIHsKKyAgICAgICAgICAgIGZvciAobGV0IGRlcHRoIG9mIGNhc2VzKSB7CisgICAgICAgICAg
ICAgICAgZm9yIChsZXQgYW50aWFsaWFzIG9mIGNhc2VzKSB7CisgICAgICAgICAgICAgICAgICAg
IHRlc3RBdHRyaWJ1dGVzQWZmZWN0Q29udGV4dChhbHBoYSwgc3RlbmNpbCwgZGVwdGgsIGFudGlh
bGlhcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQogICAgIGZpbmlzaFRlc3QoKTsKIH0KLQogPC9zY3JpcHQ+CiA8L2hlYWQ+CiA8Ym9keSBvbmxv
YWQ9ImluaXQoKSI+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>