<?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>109853</bug_id>
          
          <creation_ts>2013-02-14 12:35:38 -0800</creation_ts>
          <short_desc>[WEBGL] Implement OES_texture_half_float in WebKit</short_desc>
          <delta_ts>2014-01-10 10:45:57 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>124871</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>110818</dependson>
    
    <dependson>110936</dependson>
    
    <dependson>111194</dependson>
          <blocked>111196</blocked>
    
    <blocked>111197</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nayan Kumar K">nayankk</reporter>
          <assigned_to name="Nayan Kumar K">nayankk</assigned_to>
          <cc>bajones</cc>
    
    <cc>bfulgham</cc>
    
    <cc>dino</cc>
    
    <cc>gman</cc>
    
    <cc>kbr</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>833326</commentid>
    <comment_count>0</comment_count>
    <who name="Nayan Kumar K">nayankk</who>
    <bug_when>2013-02-14 12:35:38 -0800</bug_when>
    <thetext>OES_texture_half_float is now a community approved WebGL extension - http://www.khronos.org/registry/webgl/extensions/OES_texture_half_float/. Implement the support for OES_texture_half_float in WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833334</commentid>
    <comment_count>1</comment_count>
      <attachid>188407</attachid>
    <who name="Nayan Kumar K">nayankk</who>
    <bug_when>2013-02-14 12:51:07 -0800</bug_when>
    <thetext>Created attachment 188407
An attemp to implement OES_texture_half_float</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833340</commentid>
    <comment_count>2</comment_count>
    <who name="Nayan Kumar K">nayankk</who>
    <bug_when>2013-02-14 12:58:12 -0800</bug_when>
    <thetext>PFA a WIP patch to implement OES_texture_half_float. Code closely follows the implementation of OES_texture_float. However, I still do not see the expected results. Am I missing something? Please help.

BTW, OES_texture_half_float expects the texture data in 16-bit floating point representation. However, the only floating point TypedArray representation is Float32Array. Shouldn&apos;t we need something like Float16Array to support OES_texture_half_float?

Thanks,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833626</commentid>
    <comment_count>3</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2013-02-14 19:30:28 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; PFA a WIP patch to implement OES_texture_half_float. Code closely follows the implementation of OES_texture_float. However, I still do not see the expected results. Am I missing something? Please help.
&gt; 
&gt; BTW, OES_texture_half_float expects the texture data in 16-bit floating point representation. However, the only floating point TypedArray representation is Float32Array. Shouldn&apos;t we need something like Float16Array to support OES_texture_half_float?

The working group discussed this and decided not to add such a type. No CPU supports 16-bit floating point values efficiently, so the performance of Float16Array would be very poor. For this reason, the WebGL extension OES_texture_half_float does not support uploading data from typed arrays, only HTML elements.

I&apos;ll comment on the patch separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833630</commentid>
    <comment_count>4</comment_count>
      <attachid>188407</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2013-02-14 19:45:07 -0800</bug_when>
    <thetext>Comment on attachment 188407
An attemp to implement OES_texture_half_float

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

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:5125
&gt; +    case GraphicsContext3D::HALF_FLOAT_OES: // OES_texture_half_float

This is incorrect; per the spec, only NULL is allowed when calling the overload taking ArrayBufferView with HALF_FLOAT_OES type.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.cpp:646
&gt; +template&lt;&gt; ALWAYS_INLINE void unpack&lt;GraphicsContext3D::DataFormatR16F, float, float&gt;(const float* source, float* destination, unsigned pixelsPerRow)

All of these conversions are incorrect. You need to define a GC3DhalfFloat typedef (probably to short) and add routines which create half-floats. Because the WebGL OES_texture_half_float extension doesn&apos;t support typed arrays being passed in, you don&apos;t need the unpacking routines; you&apos;ll never see one of the half-float formats used as a source, only a destination. However, you need to support all of the formats of HTML elements. I think this amounts to just doing unsigned byte to half-float conversion but am not sure.

For references see

http://en.wikipedia.org/wiki/Half-precision_floating-point_format
ftp://ftp.fox-toolkit.org/pub/fasthalffloatconversion.pdf

I think the conversion you need (uint8 to half float) is essentially just an unsigned cast because the low 8 bits of the half-float are the mantissa and you won&apos;t have an exponent. Again, I&apos;m not 100% sure.

&gt; LayoutTests/fast/canvas/webgl/oes-texture-half-float.html:5
&gt; +&lt;title&gt;WebGL OES_texture_float Conformance Tests&lt;/title&gt;

You&apos;ll need to modify this test more extensively for half-float. In particular, you can only upload HTML elements, not typed arrays. You still should test that rendering to a half-float texture, when supported, preserves the extended range.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834172</commentid>
    <comment_count>5</comment_count>
    <who name="Nayan Kumar K">nayankk</who>
    <bug_when>2013-02-15 10:53:10 -0800</bug_when>
    <thetext>
&gt; The working group discussed this and decided not to add such a type. No CPU supports 16-bit floating point values efficiently, so the performance of Float16Array would be very poor. For this reason, the WebGL extension OES_texture_half_float does not support uploading data from typed arrays, only HTML elements.
&gt; 
&gt; I&apos;ll comment on the patch separately.

Thanks for the pointers. I will modify the patch accordingly and resubmit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966181</commentid>
    <comment_count>6</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-01-09 19:50:11 -0800</bug_when>
    <thetext>I think this support is now landed in WebKit. We can probably close this patch out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966438</commentid>
    <comment_count>7</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-01-10 10:45:57 -0800</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 124871 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188407</attachid>
            <date>2013-02-14 12:51:07 -0800</date>
            <delta_ts>2013-02-14 19:45:07 -0800</delta_ts>
            <desc>An attemp to implement OES_texture_half_float</desc>
            <filename>bug-109853-20130214124735.patch</filename>
            <type>text/plain</type>
            <size>47087</size>
            <attacher name="Nayan Kumar K">nayankk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmYyZGM3MTc5MDA4OTlh
OTQyZjY0ZmE0OWI5OGM2NzE3MjY4M2UyOC4uNjE5M2I4NzIxYTdkYTMwNTUxMGZmMjE1MjkxNDA1
NTA1ODY1OTJiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEzLTAyLTE0ICBOYXlh
biBLdW1hciBLICA8bmF5YW5ra0Btb3Rvcm9sYS5jb20+CisKKyAgICAgICAgW1dFQkdMXSBJbXBs
ZW1lbnQgT0VTX3RleHR1cmVfaGFsZl9mbG9hdCBpbiBXZWJLaXQuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk4NTMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGlz
IG5vdyBhIGNvbW11bml0eSBhcHByb3ZlZCBXZWJHTCBleHRlbnNpb24uCisgICAgICAgIFRoaXMg
cGF0Y2ggaW1wbGVtZW50IHRoZSBzdXBwb3J0IGZvciBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGlu
IFdlYktpdC4KKyAgICAgICAgU3BlY2lmaWNhdG9uOiBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3Jl
Z2lzdHJ5L3dlYmdsL2V4dGVuc2lvbnMvT0VTX3RleHR1cmVfaGFsZl9mbG9hdC8KKworICAgICAg
ICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9vZXMtdGV4dHVyZS1oYWxmLWZsb2F0Lmh0bWwKKwor
ICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6dG9WOE9iamVjdCk6CisgICAgICAgICogaHRtbC9jYW52YXMv
T0VTVGV4dHVyZUhhbGZGbG9hdC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMRXh0ZW5zaW9uLmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok9FU1RleHR1cmVIYWxmRmxvYXQ6Ok9FU1RleHR1cmVIYWxmRmxvYXQpOgorICAgICAg
ICAoV2ViQ29yZTo6T0VTVGV4dHVyZUhhbGZGbG9hdDo6fk9FU1RleHR1cmVIYWxmRmxvYXQpOgor
ICAgICAgICAoV2ViQ29yZTo6T0VTVGV4dHVyZUhhbGZGbG9hdDo6Z2V0TmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpPRVNUZXh0dXJlSGFsZkZsb2F0OjpjcmVhdGUpOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24uaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoT0VTVGV4dHVyZUhhbGZGbG9hdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvT0VTVGV4dHVy
ZUhhbGZGbG9hdC5pZGw6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMRXh0ZW5zaW9uLmguCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24uaDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dEV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZh
bGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNEYXRhKToKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViR0xSZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuaWRsOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMz
RC5oOgorICAgICAgICAoRXh0ZW5zaW9uczNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisKIDIw
MTMtMDItMTIgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAg
ICAgQVg6IGNyYXNoIHdoZW4gYWNjZXNzaW5nIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIgYWZ0ZXIg
cGFnZSBoYXMgYmVlbiB1bmxvYWRlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDg5OTNkMTVmODgyYTIx
NGQ0YzNkZDAyZmVmZjg2NTY4NGY5NDljMDIuLjhmZjY2ZmRiMTBjMzM1ZGU1OTdiNGVmNmYwOTQ0
MGM3MTRiZDJjNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM3NSw2ICszNzUsNyBAQAogICAgICAg
ICAgICAgJ2h0bWwvY2FudmFzL0ludDhBcnJheS5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvY2Fu
dmFzL09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaWRsJywKICAgICAgICAgICAgICdodG1sL2NhbnZh
cy9PRVNUZXh0dXJlRmxvYXQuaWRsJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9PRVNUZXh0
dXJlSGFsZkZsb2F0LmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvT0VTVmVydGV4QXJy
YXlPYmplY3QuaWRsJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhV
aW50LmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvVWludDE2QXJyYXkuaWRsJywKQEAg
LTMzMDYsNiArMzMwNyw4IEBACiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvT0VTU3RhbmRhcmRE
ZXJpdmF0aXZlcy5oJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQu
Y3BwJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQuaCcsCisgICAg
ICAgICAgICAnaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhhbGZGbG9hdC5jcHAnLAorICAgICAgICAg
ICAgJ2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuaCcsCiAgICAgICAgICAgICAnaHRt
bC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuY3BwJywKICAgICAgICAgICAgICdodG1sL2Nh
bnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5oJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9P
RVNFbGVtZW50SW5kZXhVaW50LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKaW5kZXggNTI3
M2IzODg5OWU4ZTAxOGIxZmJlMzk4NTNhMGFiNzQ3NjBiZWNhZS4uZGEzODQxZjA5ZGNkYThmMWQ4
NjU5MmNlMzg1OTM2ZDZiZjFkNjEyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcApAQCAtNjEs
NiArNjEsNyBAQAogI2luY2x1ZGUgIk9FU0VsZW1lbnRJbmRleFVpbnQuaCIKICNpbmNsdWRlICJP
RVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCiAjaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0LmgiCisj
aW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgogI2luY2x1ZGUgIk9FU1ZlcnRleEFycmF5
T2JqZWN0LmgiCiAjaW5jbHVkZSAiV2ViR0xCdWZmZXIuaCIKICNpbmNsdWRlICJXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUzNUQy5oIgpAQCAtMjAwLDYgKzIwMSw4IEBAIHN0YXRpYyBKU1ZhbHVlIHRv
SlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBXZWJH
TEV4dGVuCiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nh
c3Q8T0VTU3RhbmRhcmREZXJpdmF0aXZlcyo+KGV4dGVuc2lvbikpOwogICAgIGNhc2UgV2ViR0xF
eHRlbnNpb246Ok9FU1RleHR1cmVGbG9hdE5hbWU6CiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUZsb2F0Kj4oZXh0ZW5zaW9uKSk7
CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdE5hbWU6CisgICAg
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVy
ZUhhbGZGbG9hdCo+KGV4dGVuc2lvbikpOwogICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1Zl
cnRleEFycmF5T2JqZWN0TmFtZToKICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBzdGF0aWNfY2FzdDxPRVNWZXJ0ZXhBcnJheU9iamVjdCo+KGV4dGVuc2lvbikpOwogICAg
IGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU0VsZW1lbnRJbmRleFVpbnROYW1lOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250
ZXh0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdM
UmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKaW5kZXggYWJjODU3NDYxOTdjYjM5MDgwNGYwNjgz
NmI5MTg3MTQ3ZGRiNDMxNC4uOWFhZTY3MDQ1OGMzYjljNDIzNWRkMmJhYjc0NmRmYTA2OGJkYzNl
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCkBAIC01MCw2ICs1MCw3
IEBACiAjaW5jbHVkZSAiVjhPRVNFbGVtZW50SW5kZXhVaW50LmgiCiAjaW5jbHVkZSAiVjhPRVNT
dGFuZGFyZERlcml2YXRpdmVzLmgiCiAjaW5jbHVkZSAiVjhPRVNUZXh0dXJlRmxvYXQuaCIKKyNp
bmNsdWRlICJWOE9FU1RleHR1cmVIYWxmRmxvYXQuaCIKICNpbmNsdWRlICJWOE9FU1ZlcnRleEFy
cmF5T2JqZWN0LmgiCiAjaW5jbHVkZSAiVjhVaW50MTZBcnJheS5oIgogI2luY2x1ZGUgIlY4VWlu
dDMyQXJyYXkuaCIKQEAgLTE4OCw2ICsxODksMTAgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4T2JqZWN0KFdlYkdMRXh0ZW5zaW9uKiBleHRlbnNpb24sIHY4OjpIYW5kbGU8djgK
ICAgICAgICAgZXh0ZW5zaW9uT2JqZWN0ID0gdG9WOChzdGF0aWNfY2FzdDxPRVNUZXh0dXJlRmxv
YXQqPihleHRlbnNpb24pLCBjb250ZXh0T2JqZWN0LCBpc29sYXRlKTsKICAgICAgICAgcmVmZXJl
bmNlTmFtZSA9ICJvZXNUZXh0dXJlRmxvYXROYW1lIjsKICAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdE5hbWU6CisgICAgICAgIGV4dGVu
c2lvbk9iamVjdCA9IHRvVjgoc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUhhbGZGbG9hdCo+KGV4dGVu
c2lvbiksIGNvbnRleHRPYmplY3QsIGlzb2xhdGUpOworICAgICAgICByZWZlcmVuY2VOYW1lID0g
Im9lc1RleHR1cmVIYWxmRmxvYXROYW1lIjsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6T0VTVmVydGV4QXJyYXlPYmplY3ROYW1lOgogICAgICAgICBleHRlbnNpb25P
YmplY3QgPSB0b1Y4KHN0YXRpY19jYXN0PE9FU1ZlcnRleEFycmF5T2JqZWN0Kj4oZXh0ZW5zaW9u
KSwgY29udGV4dE9iamVjdCwgaXNvbGF0ZSk7CiAgICAgICAgIHJlZmVyZW5jZU5hbWUgPSAib2Vz
VmVydGV4QXJyYXlPYmplY3ROYW1lIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvT0VTVGV4dHVyZUhhbGZGbG9hdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTJhZWNkMzQyZmZjMzEyOTE1
OGQxMmZiMzcyZDgzMjRhZGU5YTIxOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuY3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRl
ICJPRVNUZXh0dXJlSGFsZkZsb2F0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworT0VTVGV4
dHVyZUhhbGZGbG9hdDo6T0VTVGV4dHVyZUhhbGZGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHQq
IGNvbnRleHQpCisgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQoreworfQorCitPRVNUZXh0
dXJlSGFsZkZsb2F0Ojp+T0VTVGV4dHVyZUhhbGZGbG9hdCgpCit7Cit9CisKK1dlYkdMRXh0ZW5z
aW9uOjpFeHRlbnNpb25OYW1lIE9FU1RleHR1cmVIYWxmRmxvYXQ6OmdldE5hbWUoKSBjb25zdAor
eworICAgIHJldHVybiBPRVNUZXh0dXJlSGFsZkZsb2F0TmFtZTsKK30KKworUGFzc093blB0cjxP
RVNUZXh0dXJlSGFsZkZsb2F0PiBPRVNUZXh0dXJlSGFsZkZsb2F0OjpjcmVhdGUoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgT0VTVGV4
dHVyZUhhbGZGbG9hdChjb250ZXh0KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L09FU1RleHR1cmVIYWxmRmxvYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZTkzMDJmNjIwOGQ2ZTMyZmNlMTcz
ZTlhMjJjZTIzOTUyYjRhYTdlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvT0VTVGV4dHVyZUhhbGZGbG9hdC5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIE9FU1RleHR1cmVIYWxmRmxvYXRfaAorI2RlZmluZSBPRVNUZXh0dXJlSGFsZkZsb2F0
X2gKKworI2luY2x1ZGUgIldlYkdMRXh0ZW5zaW9uLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBPRVNUZXh0dXJlSGFsZkZsb2F0
IDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0
cjxPRVNUZXh0dXJlSGFsZkZsb2F0PiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisK
KyAgICB2aXJ0dWFsIH5PRVNUZXh0dXJlSGFsZkZsb2F0KCk7CisgICAgdmlydHVhbCBFeHRlbnNp
b25OYW1lIGdldE5hbWUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBPRVNUZXh0dXJlSGFsZkZs
b2F0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gT0VTVGV4dHVyZUhhbGZGbG9hdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmlkbCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuaWRsCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlZjJm
YjFhYmJiZmM2OGUwYzgxOTdkMmUzZjViMDI2ZWJiYjUxYzQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmlkbApAQCAtMCww
ICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworWworICAgIENvbmRpdGlvbmFsPVdFQkdMLAorICAgIEpTR2VuZXJh
dGVJc1JlYWNoYWJsZT1JbXBsQ29udGV4dCwKKyAgICBPbWl0Q29uc3RydWN0b3IKK10gaW50ZXJm
YWNlIE9FU1RleHR1cmVIYWxmRmxvYXQgeworfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV4dGVuc2lvbi5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24uaAppbmRleCA0Yjgz
Mjg0YmE2MzU5YjQ1NTM3MGEwY2U1MGZlZjAwMTExMTkzMzIwLi5mYWJkZmM5MzlkOTZjYWY2NTUy
OWY3MDY4MGMwZWNiNzI5ZTU2NmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEV4dGVuc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMRXh0ZW5zaW9uLmgKQEAgLTM4LDYgKzM4LDcgQEAgcHVibGljOgogICAgICAgICBXZWJHTExv
c2VDb250ZXh0TmFtZSwKICAgICAgICAgRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljTmFtZSwK
ICAgICAgICAgT0VTVGV4dHVyZUZsb2F0TmFtZSwKKyAgICAgICAgT0VTVGV4dHVyZUhhbGZGbG9h
dE5hbWUsCiAgICAgICAgIE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXNOYW1lLAogICAgICAgICBPRVNW
ZXJ0ZXhBcnJheU9iamVjdE5hbWUsCiAgICAgICAgIFdlYkdMRGVidWdSZW5kZXJlckluZm9OYW1l
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5jcHAKaW5kZXggOTUzZTVkYjk3OTY0Y2JjNGFkOWQ2OTk4ZjdlYzY0MmIxYjUwYTM5Ny4u
NmQxOWI5NGQ1NmUwMjE1MmNkNWZlY2ZjN2M5NTViYmYzNTdmN2EzNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC00
OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiT0VTRWxlbWVudEluZGV4VWludC5oIgogI2luY2x1ZGUg
Ik9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCIKICNpbmNsdWRlICJPRVNUZXh0dXJlRmxvYXQuaCIK
KyNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0LmgiCiAjaW5jbHVkZSAiT0VTVmVydGV4QXJy
YXlPYmplY3QuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCkBA
IC0yMzgwLDYgKzIzODEsMTQgQEAgV2ViR0xFeHRlbnNpb24qIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gbV9vZXNUZXh0dXJlRmxvYXQuZ2V0KCk7CiAgICAgfQorICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShuYW1lLCAiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpCisgICAgICAgICYmIG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9h
dCIpKSB7CisgICAgICAgIGlmICghbV9vZXNUZXh0dXJlSGFsZkZsb2F0KSB7CisgICAgICAgICAg
ICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3RleHR1
cmVfaGFsZl9mbG9hdCIpOworICAgICAgICAgICAgbV9vZXNUZXh0dXJlSGFsZkZsb2F0ID0gT0VT
VGV4dHVyZUhhbGZGbG9hdDo6Y3JlYXRlKHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBtX29lc1RleHR1cmVIYWxmRmxvYXQuZ2V0KCk7CisgICAgfQogICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShuYW1lLCAiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKQogICAgICAgICAmJiBtX2Nv
bnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2Jq
ZWN0IikpIHsKICAgICAgICAgaWYgKCFtX29lc1ZlcnRleEFycmF5T2JqZWN0KSB7CkBAIC00OTA1
LDYgKzQ5MTQsMTEgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVu
Y0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW0KICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVM6Cisg
ICAgICAgIGlmIChtX29lc1RleHR1cmVIYWxmRmxvYXQpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfODoKICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKQEAgLTQ5MjMsNyArNDkzNyw4IEBAIGJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtCiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgog
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKICAgICAgICAgaWYg
KHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKLSAgICAgICAgICAgICYm
IHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUKSB7CisgICAgICAgICAgICAmJiB0eXBl
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFw
aGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKICAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAiaW52YWxpZCB0eXBlIGZvciBmb3JtYXQiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQpAQCAtNDkzMSw3ICs0OTQ2LDggQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW0K
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6CiAgICAgICAgIGlmICh0eXBlICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCiAgICAgICAgICAgICAmJiB0eXBlICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNQotICAgICAgICAgICAgJiYgdHlw
ZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQpIHsKKyAgICAgICAgICAgICYmIHR5cGUgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUykgewogICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJp
bnZhbGlkIHR5cGUgZm9yIFJHQiBmb3JtYXQiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQpAQCAtNDk0MCw3ICs0OTU2LDggQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW0K
ICAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKICAg
ICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRf
NF80XzQKICAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X1NIT1JUXzVfNV81XzEKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkZMT0FUKSB7CisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VAorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9P
RVMpIHsKICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBSR0JBIGZv
cm1hdCIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC01MTA1LDYg
KzUxMjIsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jRGF0
YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbgogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9m
bG9hdAorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTOiAvLyBPRVNf
dGV4dHVyZV9oYWxmX2Zsb2F0CiAgICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBBcnJh
eUJ1ZmZlclZpZXc6OlR5cGVGbG9hdDMyKSB7CiAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5
cGUgRkxPQVQgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgRmxvYXQzMkFycmF5Iik7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5oCmluZGV4IDc5M2IzZDQ0OTcxNzYyNWMzYzM3ZGJlZjg3YTEz
ODlhOWQ3NDk2YTYuLjkzNTZhNWZmOGRiMDFjNWJkNDg4ZjM3MTRhMWJhNzIwYmQ1YjAwMWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5oCkBAIC01MCw2ICs1MCw3IEBAIGNsYXNzIEltYWdlRGF0YTsKIGNsYXNzIEludFNpemU7CiBj
bGFzcyBPRVNTdGFuZGFyZERlcml2YXRpdmVzOwogY2xhc3MgT0VTVGV4dHVyZUZsb2F0OworY2xh
c3MgT0VTVGV4dHVyZUhhbGZGbG9hdDsKIGNsYXNzIE9FU1ZlcnRleEFycmF5T2JqZWN0OwogY2xh
c3MgT0VTRWxlbWVudEluZGV4VWludDsKIGNsYXNzIFdlYkdMQWN0aXZlSW5mbzsKQEAgLTUxMSw2
ICs1MTIsNyBAQCBwdWJsaWM6CiAgICAgLy8gRW5hYmxlZCBleHRlbnNpb24gb2JqZWN0cy4KICAg
ICBPd25QdHI8RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljPiBtX2V4dFRleHR1cmVGaWx0ZXJB
bmlzb3Ryb3BpYzsKICAgICBPd25QdHI8T0VTVGV4dHVyZUZsb2F0PiBtX29lc1RleHR1cmVGbG9h
dDsKKyAgICBPd25QdHI8T0VTVGV4dHVyZUhhbGZGbG9hdD4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0
OwogICAgIE93blB0cjxPRVNTdGFuZGFyZERlcml2YXRpdmVzPiBtX29lc1N0YW5kYXJkRGVyaXZh
dGl2ZXM7CiAgICAgT3duUHRyPE9FU1ZlcnRleEFycmF5T2JqZWN0PiBtX29lc1ZlcnRleEFycmF5
T2JqZWN0OwogICAgIE93blB0cjxPRVNFbGVtZW50SW5kZXhVaW50PiBtX29lc0VsZW1lbnRJbmRl
eFVpbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmlkbAppbmRleCBmYzgwMTEwYzc2MWI4OTc4NTc3NmJlNzY5MzA2YTMzZmYzYjFm
ZWI3Li40ODY5MjNhMGIzZTUwMTZiNGM4YzY5ZTQ2ZmZkMzAwNGFmODQ0NzQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwK
QEAgLTIyMiw2ICsyMjIsNyBAQAogICAgIGNvbnN0IHVuc2lnbmVkIGludCBJTlQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDE0MDQ7CiAgICAgY29uc3QgdW5zaWduZWQgaW50IFVOU0lH
TkVEX0lOVCAgICAgICAgICAgICAgICAgICA9IDB4MTQwNTsKICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDA2OworICAgIGNvbnN0IHVu
c2lnbmVkIGludCBIQUxGX0ZMT0FUX09FUyAgICAgICAgICAgICAgICAgPSAweDhENjE7CiAKICAg
ICAvKiBQaXhlbEZvcm1hdCAqLwogICAgIGNvbnN0IHVuc2lnbmVkIGludCBERVBUSF9DT01QT05F
TlQgICAgICAgICAgICAgICAgPSAweDE5MDI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5oCmluZGV4IDJmNGMxMmMwMzk5OTliZDg3YTIzYWQ0N2Jj
ZWRmZWIzZWEwNGMxZjEuLjAyNzJiYzA1NjEwYWRmNDk1YWVmNWFiZGUwM2Y0ZjJkZjc2NWJjOGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMz
RC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5o
CkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICAvLyAgIEdMX0VYVF9wYWNrZWRfZGVwdGhf
c3RlbmNpbCAvIEdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbAogICAgIC8vICAgR0xfQU5HTEVf
ZnJhbWVidWZmZXJfYmxpdCAvIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlCiAgICAg
Ly8gICBHTF9PRVNfdGV4dHVyZV9mbG9hdAorICAgIC8vICAgR0xfT0VTX3RleHR1cmVfaGFsZl9m
bG9hdAogICAgIC8vICAgR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzCiAgICAgLy8gICBHTF9P
RVNfcmdiOF9yZ2JhOAogICAgIC8vICAgR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmNwcAppbmRleCA1OWRhZDI2Zjc4ODI2Y2Y4NDc5YTIzN2M1YjM2YzYzYzQ3NjFhYjM4Li43NjAy
YjhkYTdjMzdhNDRiNjU3YzMxMzM5ZTg5MGUxYTNkZjNkMmRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCkBAIC0x
MDIsNiArMTAyLDI3IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IGdldERhdGFGb3Jt
YXQoR0MzRGVudW0gZGVzdGluYXRpb25Gb3JtYXQsIEdDM0RlbnVtCiAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgc3dpdGNoIChkZXN0aW5h
dGlvbkZvcm1hdCkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6CisgICAg
ICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQjE2RjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
OgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRS
R0JBMTZGOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkFMUEhBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXRBMTZGOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkxVTUlOQU5DRToKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0UjE2RjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICBkc3RGb3Jt
YXQgPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJBMTZGOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0xNzYsNiArMTk3LDkgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKEdDM0RlbnVtIGZvcm1hdCwK
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDogLy8gT0VTX3RleHR1cmVfZmxvYXQK
ICAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDM0RmbG9hdCk7CiAgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTOiAvLyBP
RVNfdGV4dHVyZV9oYWxmX2Zsb2F0CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVv
ZihHQzNEZmxvYXQpIC8gMjsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTYxOSw2ICs2NDMsNDIgQEAgdGVtcGxhdGU8PiBBTFdB
WVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QTMyRiwg
ZmxvYXQsIGYKICAgICB9CiB9CiAKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFj
azxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFIxNkYsIGZsb2F0LCBmbG9hdD4oY29uc3Qg
ZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cp
Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7Cisg
ICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBdOworICAgICAgICBkZXN0aW5hdGlvblsx
XSA9IHNvdXJjZVswXTsKKyAgICAgICAgZGVzdGluYXRpb25bMl0gPSBzb3VyY2VbMF07CisgICAg
ICAgIGRlc3RpbmF0aW9uWzNdID0gMTsKKyAgICAgICAgc291cmNlICs9IDE7CisgICAgICAgIGRl
c3RpbmF0aW9uICs9IDQ7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9p
ZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSQTE2RiwgZmxvYXQsIGZsb2F0
Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVs
c1BlclJvdykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyAr
K2kpIHsKKyAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07CisgICAgICAgIGRlc3Rp
bmF0aW9uWzFdID0gc291cmNlWzBdOworICAgICAgICBkZXN0aW5hdGlvblsyXSA9IHNvdXJjZVsw
XTsKKyAgICAgICAgZGVzdGluYXRpb25bM10gPSBzb3VyY2VbMV07CisgICAgICAgIHNvdXJjZSAr
PSAyOworICAgICAgICBkZXN0aW5hdGlvbiArPSA0OworICAgIH0KK30KKwordGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QTE2
RiwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24s
IHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cGl4ZWxzUGVyUm93OyArK2kpIHsKKyAgICAgICAgZGVzdGluYXRpb25bMF0gPSAwOworICAgICAg
ICBkZXN0aW5hdGlvblsxXSA9IDA7CisgICAgICAgIGRlc3RpbmF0aW9uWzJdID0gMDsKKyAgICAg
ICAgZGVzdGluYXRpb25bM10gPSBzb3VyY2VbMF07CisgICAgICAgIHNvdXJjZSArPSAxOworICAg
ICAgICBkZXN0aW5hdGlvbiArPSA0OworICAgIH0KK30KKwogLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBQ
aXhlbCBwYWNraW5nIHJvdXRpbmVzLgogLy8KQEAgLTEwNjQsMTggKzExMjQsMTU4IEBAIHRlbXBs
YXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXRSQTMyRiwgR3JhcGhpY3NDCiAgICAgfQogfQogCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCMTZGLCBHcmFwaGljc0Nv
bnRleHQzRDo6QWxwaGFEb05vdGhpbmcsIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJj
ZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CisgICAgICAgIGRlc3Rp
bmF0aW9uWzBdID0gc291cmNlWzBdOworICAgICAgICBkZXN0aW5hdGlvblsxXSA9IHNvdXJjZVsx
XTsKKyAgICAgICAgZGVzdGluYXRpb25bMl0gPSBzb3VyY2VbMl07CisgICAgICAgIHNvdXJjZSAr
PSA0OworICAgICAgICBkZXN0aW5hdGlvbiArPSAzOworICAgIH0KK30KKwordGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQjE2
RiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9QcmVtdWx0aXBseSwgZmxvYXQsIGZsb2F0Pihj
b25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1Bl
clJvdykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kp
IHsKKyAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM107CisgICAgICAgIGRlc3Rp
bmF0aW9uWzBdID0gc291cmNlWzBdICogc2NhbGVGYWN0b3I7CisgICAgICAgIGRlc3RpbmF0aW9u
WzFdID0gc291cmNlWzFdICogc2NhbGVGYWN0b3I7CisgICAgICAgIGRlc3RpbmF0aW9uWzJdID0g
c291cmNlWzJdICogc2NhbGVGYWN0b3I7CisgICAgICAgIHNvdXJjZSArPSA0OworICAgICAgICBk
ZXN0aW5hdGlvbiArPSAzOworICAgIH0KK30KKwordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZv
aWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQjE2RiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkFscGhhRG9Vbm11bHRpcGx5LCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3Vy
Y2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQoreworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgeworICAgICAgICBmbG9h
dCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSA/IDEuMGYgLyBzb3VyY2VbM10gOiAxLjBmOworICAg
ICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXSAqIHNjYWxlRmFjdG9yOworICAgICAgICBk
ZXN0aW5hdGlvblsxXSA9IHNvdXJjZVsxXSAqIHNjYWxlRmFjdG9yOworICAgICAgICBkZXN0aW5h
dGlvblsyXSA9IHNvdXJjZVsyXSAqIHNjYWxlRmFjdG9yOworICAgICAgICBzb3VyY2UgKz0gNDsK
KyAgICAgICAgZGVzdGluYXRpb24gKz0gMzsKKyAgICB9Cit9CisKKy8vIFVzZWQgb25seSBkdXJp
bmcgUkdCQTggb3IgQkdSQTggLT4gZmxvYXRpbmctcG9pbnQgdXBsb2Fkcy4KK3RlbXBsYXRlPD4g
QUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JB
MTZGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcsIGZsb2F0LCBmbG9hdD4oY29u
c3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJS
b3cpCit7CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UsIHBpeGVsc1BlclJvdyAqIDQg
KiBzaXplb2YoZmxvYXQpKTsKK30KKwordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFj
azxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkExNkYsIEdyYXBoaWNzQ29udGV4dDNE
OjpBbHBoYURvUHJlbXVsdGlwbHksIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwg
ZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CisgICAgICAgIGZsb2F0IHNj
YWxlRmFjdG9yID0gc291cmNlWzNdOworICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVsw
XSAqIHNjYWxlRmFjdG9yOworICAgICAgICBkZXN0aW5hdGlvblsxXSA9IHNvdXJjZVsxXSAqIHNj
YWxlRmFjdG9yOworICAgICAgICBkZXN0aW5hdGlvblsyXSA9IHNvdXJjZVsyXSAqIHNjYWxlRmFj
dG9yOworICAgICAgICBkZXN0aW5hdGlvblszXSA9IHNvdXJjZVszXTsKKyAgICAgICAgc291cmNl
ICs9IDQ7CisgICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+
IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdC
QTE2RiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Vbm11bHRpcGx5LCBmbG9hdCwgZmxvYXQ+
KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxz
UGVyUm93KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsr
aSkgeworICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSA/IDEuMGYgLyBzb3Vy
Y2VbM10gOiAxLjBmOworICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXSAqIHNjYWxl
RmFjdG9yOworICAgICAgICBkZXN0aW5hdGlvblsxXSA9IHNvdXJjZVsxXSAqIHNjYWxlRmFjdG9y
OworICAgICAgICBkZXN0aW5hdGlvblsyXSA9IHNvdXJjZVsyXSAqIHNjYWxlRmFjdG9yOworICAg
ICAgICBkZXN0aW5hdGlvblszXSA9IHNvdXJjZVszXTsKKyAgICAgICAgc291cmNlICs9IDQ7Cisg
ICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+IEFMV0FZU19J
TkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QTE2RiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nLCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBz
b3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQoreworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgeworICAgICAgICBk
ZXN0aW5hdGlvblswXSA9IHNvdXJjZVszXTsKKyAgICAgICAgc291cmNlICs9IDQ7CisgICAgICAg
IGRlc3RpbmF0aW9uICs9IDE7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UjE2RiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nLCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2Us
IGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQoreworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgeworICAgICAgICBkZXN0aW5h
dGlvblswXSA9IHNvdXJjZVswXTsKKyAgICAgICAgc291cmNlICs9IDQ7CisgICAgICAgIGRlc3Rp
bmF0aW9uICs9IDE7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBw
YWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UjE2RiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkFscGhhRG9QcmVtdWx0aXBseSwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBm
bG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3sKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKKyAgICAgICAgZmxvYXQgc2Nh
bGVGYWN0b3IgPSBzb3VyY2VbM107CisgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBd
ICogc2NhbGVGYWN0b3I7CisgICAgICAgIHNvdXJjZSArPSA0OworICAgICAgICBkZXN0aW5hdGlv
biArPSAxOworICAgIH0KK30KKwordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFIxNkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBo
YURvVW5tdWx0aXBseSwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCog
ZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3sKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKKyAgICAgICAgZmxvYXQgc2NhbGVGYWN0
b3IgPSBzb3VyY2VbM10gPyAxLjBmIC8gc291cmNlWzNdIDogMS4wZjsKKyAgICAgICAgZGVzdGlu
YXRpb25bMF0gPSBzb3VyY2VbMF0gKiBzY2FsZUZhY3RvcjsKKyAgICAgICAgc291cmNlICs9IDQ7
CisgICAgICAgIGRlc3RpbmF0aW9uICs9IDE7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkExNkYsIEdy
YXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGluZywgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9h
dCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3sK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKKyAgICAg
ICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07CisgICAgICAgIGRlc3RpbmF0aW9uWzFdID0g
c291cmNlWzNdOworICAgICAgICBzb3VyY2UgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb24gKz0g
MjsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSQTE2RiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Q
cmVtdWx0aXBseSwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVz
dGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKKyAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3Ig
PSBzb3VyY2VbM107CisgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBdICogc2NhbGVG
YWN0b3I7CisgICAgICAgIGRlc3RpbmF0aW9uWzFdID0gc291cmNlWzNdOworICAgICAgICBzb3Vy
Y2UgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb24gKz0gMjsKKyAgICB9Cit9CisKK3RlbXBsYXRl
PD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRS
QTE2RiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Vbm11bHRpcGx5LCBmbG9hdCwgZmxvYXQ+
KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxz
UGVyUm93KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsr
aSkgeworICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSA/IDEuMGYgLyBzb3Vy
Y2VbM10gOiAxLjBmOworICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXSAqIHNjYWxl
RmFjdG9yOworICAgICAgICBkZXN0aW5hdGlvblsxXSA9IHNvdXJjZVszXTsKKyAgICAgICAgc291
cmNlICs9IDQ7CisgICAgICAgIGRlc3RpbmF0aW9uICs9IDI7CisgICAgfQorfQorCiBBTFdBWVNf
SU5MSU5FIGJvb2wgSGFzQWxwaGEoaW50IGZvcm1hdCkKIHsKICAgICByZXR1cm4gZm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QTgKICAgICAgICAgfHwgZm9ybWF0ID09IEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QTMyRgorICAgICAgICB8fCBmb3JtYXQgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBMTZGCiAgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJBOAogICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBUjgKICAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0UkEzMkYKKyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0UkExNkYKICAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTgKICAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0QkdSQTgKICAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0QVJHQjgKICAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0QUJHUjgKICAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTMyRgorICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBMzJGCiAgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE0NDQ0CiAgICAgICAgIHx8IGZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE1NTUxOwogfQpAQCAtMTA4NCw4ICsxMjg0
LDEwIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBIYXNDb2xvcihpbnQgZm9ybWF0KQogewogICAgIHJl
dHVybiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOAogICAgICAg
ICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBMzJGCisgICAg
ICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkExNkYKICAg
ICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCOAogICAg
ICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0IzMkYKKyAg
ICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCMTZGCiAg
ICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEJHUjgKICAg
ICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QkdSQTgKICAg
ICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QVJHQjgKQEAg
LTEwOTUsOCArMTI5NywxMCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSGFzQ29sb3IoaW50IGZvcm1h
dCkKICAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdC
NTY1CiAgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFI4
CiAgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFIzMkYK
KyAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UjE2Rgog
ICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSQTgKICAg
ICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkEzMkYKKyAg
ICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkExNkYKICAg
ICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QVI4OwogfQog
CkBAIC0xMTA3LDcgKzEzMTEsMTMgQEAgc3RydWN0IElzRmxvYXRGb3JtYXQgewogICAgICAgICB8
fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0IzMkYKICAgICAgICAg
fHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkEzMkYKICAgICAgICAg
fHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UjMyRgotICAgICAgICB8
fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBMzJGOworICAgICAgICB8
fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRBMzJGCisgICAgICAgIHx8
IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkExNkYKKyAgICAgICAg
fHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCMTZGCisgICAgICAg
IHx8IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJBMTZGCisgICAgICAg
IHx8IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFIxNkYKKyAgICAgICAg
fHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QTE2RjsKKwogfTsKIAog
dGVtcGxhdGU8aW50IEZvcm1hdD4KQEAgLTExNDksNiArMTM1OSw4IEBAIEFMV0FZU19JTkxJTkUg
dW5zaWduZWQgVGV4ZWxCeXRlc0ZvckZvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dCBmb3JtYXQpCiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE1NTUx
OgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBNDQ0NDoKICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCNTY1OgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXRBMTZGOgogICAgICAgICByZXR1cm4gMjsKICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0UkdCODoKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0QkdSODoKQEAgLTExNTksOCArMTM3MSwxMiBAQCBBTFdBWVNfSU5MSU5FIHVuc2lnbmVk
IFRleGVsQnl0ZXNGb3JGb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgZm9ybWF0
KQogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRCR1JBODoKICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UjMyRjoKICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0QTMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0UkExNkY6CiAgICAgICAgIHJldHVybiA0OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXRSR0IxNkY6CisgICAgICAgIHJldHVybiA2OwogICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSQTMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0UkdCQTE2RjoKICAgICAgICAgcmV0dXJuIDg7CiAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQjMyRjoKICAgICAgICAgcmV0dXJuIDEyOwpAQCAtMTIx
NiwxMyArMTQzMiwxNyBAQCB2b2lkIEZvcm1hdENvbnZlcnRlcjo6Y29udmVydChHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdCBzcmNGb3JtYXQsIEdyYXBoaWNzQwogICAgICAgICAgICAgRk9S
TUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
UjgpCiAgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXRBOCkKICAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNF
X1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFIzMkYpCisgICAgICAgICAg
ICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXRSMTZGKQogICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QTMyRikKKyAgICAgICAgICAgIEZPUk1BVENPTlZF
UlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEExNkYpCiAg
ICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXRSQTgpCiAgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNG
T1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSQTMyRikKKyAgICAgICAgICAgIEZP
Uk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dFJBMTZGKQogICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCOCkKICAgICAgICAgICAgIEZPUk1BVENPTlZFUlRF
Ul9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEJHUjgpCiAgICAg
ICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXRSR0I1NjUpCiAgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNG
T1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0IzMkYpCisgICAgICAgICAgICBG
T1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXRSR0IxNkYpCiAgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCkKICAgICAgICAgICAgIEZPUk1BVENPTlZF
UlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEFSR0I4KQog
ICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0QUJHUjgpCkBAIC0xMjMxLDYgKzE0NTEsNyBAQCB2b2lkIEZvcm1hdENv
bnZlcnRlcjo6Y29udmVydChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBzcmNGb3JtYXQs
IEdyYXBoaWNzQwogICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTU1NTEpCiAgICAgICAgICAgICBGT1JNQVRD
T05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JB
NDQ0NCkKICAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkEzMkYpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJU
RVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBMTZGKQog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIH0KQEAgLTEyNDgsMTYgKzE0NjksMjEgQEAgQUxXQVlTX0lOTElORSB2b2lkIEZvcm1hdENv
bnZlcnRlcjo6Y29udmVydChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBkc3RGb3IKICAg
ICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdFI4KQogICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9S
TUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0QTgpCiAgICAgICAgICAgICBGT1JNQVRD
T05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSMzJG
KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0UjE2RikKICAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNF
X0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdEEzMkYpCisgICAgICAgICAg
ICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXRBMTZGKQogICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkE4KQogICAgICAgICAgICAgRk9STUFUQ09OVkVS
VEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkEzMkYpCisg
ICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXRSQTE2RikKICAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RT
VEZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQjgpCiAgICAgICAgICAgICBG
T1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXRSR0I1NjUpCiAgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0IzMkYpCisgICAgICAgICAgICBGT1JNQVRDT05W
RVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0IxNkYp
CiAgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCkKICAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNF
X0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE1NTUxKQogICAgICAg
ICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0UkdCQTQ0NDQpCiAgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RG
T1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBMzJGKQorICAgICAgICAgICAg
Rk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0UkdCQTE2RikKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICB9CkBAIC0xMzE4LDggKzE1NDQsOCBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgRm9ybWF0Q29udmVydGVyOjpjb252ZXJ0KCkKICAgICB0eXBlZGVmIHR5cGVuYW1lIERhdGFU
eXBlRm9yRm9ybWF0PEludGVybWVkaWF0ZVNyY0Zvcm1hdD46OlR5cGUgSW50ZXJtZWRpYXRlU3Jj
VHlwZTsKICAgICBjb25zdCBwdHJkaWZmX3Qgc3JjU3RyaWRlSW5FbGVtZW50cyA9IG1fc3JjU3Ry
aWRlIC8gc2l6ZW9mKFNyY1R5cGUpOwogICAgIGNvbnN0IHB0cmRpZmZfdCBkc3RTdHJpZGVJbkVs
ZW1lbnRzID0gbV9kc3RTdHJpZGUgLyBzaXplb2YoRHN0VHlwZSk7Ci0gICAgY29uc3QgYm9vbCB0
cml2aWFsVW5wYWNrID0gKFNyY0Zvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dFJHQkE4ICYmICFJc0Zsb2F0Rm9ybWF0PERzdEZvcm1hdD46OlZhbHVlKSB8fCBTcmNGb3JtYXQg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBMzJGOwotICAgIGNvbnN0IGJvb2wg
dHJpdmlhbFBhY2sgPSAoRHN0Rm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
UkdCQTggfHwgRHN0Rm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTMy
RikgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcgJiYgbV9k
c3RTdHJpZGUgPiAwOworICAgIGNvbnN0IGJvb2wgdHJpdmlhbFVucGFjayA9IChTcmNGb3JtYXQg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCAmJiAhSXNGbG9hdEZvcm1hdDxE
c3RGb3JtYXQ+OjpWYWx1ZSkgfHwgU3JjRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0UkdCQTMyRiB8fCBTcmNGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXRSR0IxNkY7CisgICAgY29uc3QgYm9vbCB0cml2aWFsUGFjayA9IChEc3RGb3JtYXQgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCB8fCBEc3RGb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBMzJGIHx8IERzdEZvcm1hdCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdFJHQkExNkYpICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkFscGhhRG9Ob3RoaW5nICYmIG1fZHN0U3RyaWRlID4gMDsKICAgICBBU1NFUlQoIXRyaXZpYWxV
bnBhY2sgfHwgIXRyaXZpYWxQYWNrKTsKIAogICAgIGNvbnN0IFNyY1R5cGUgKnNyY1Jvd1N0YXJ0
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgU3JjVHlwZSo+KG1fc3JjU3RhcnQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXgg
YWVkZTRmZDg1NWZjNmM0YzQ2Zjg2NmJiMDg5ZGM0NDJiMmVhYzU1ZS4uNDNjN2NmZWU4MDBkYmQz
ZWNjYmViZTcxZTg0MGI0NDdjNGFiZmQ5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC0yNTEsNiArMjUxLDcgQEAg
cHVibGljOgogICAgICAgICBJTlQgPSAweDE0MDQsCiAgICAgICAgIFVOU0lHTkVEX0lOVCA9IDB4
MTQwNSwKICAgICAgICAgRkxPQVQgPSAweDE0MDYsCisgICAgICAgIEhBTEZfRkxPQVRfT0VTID0g
MHg4RDYxLAogICAgICAgICBGSVhFRCA9IDB4MTQwQywKICAgICAgICAgREVQVEhfQ09NUE9ORU5U
ID0gMHgxOTAyLAogICAgICAgICBBTFBIQSA9IDB4MTkwNiwKQEAgLTYwMywxMCArNjA0LDEyIEBA
IHB1YmxpYzoKICAgICAgICAgRGF0YUZvcm1hdFJHQkExNkxpdHRsZSwKICAgICAgICAgRGF0YUZv
cm1hdFJHQkExNkJpZywKICAgICAgICAgRGF0YUZvcm1hdFJHQkEzMkYsCisgICAgICAgIERhdGFG
b3JtYXRSR0JBMTZGLAogICAgICAgICBEYXRhRm9ybWF0UkdCOCwKICAgICAgICAgRGF0YUZvcm1h
dFJHQjE2TGl0dGxlLAogICAgICAgICBEYXRhRm9ybWF0UkdCMTZCaWcsCiAgICAgICAgIERhdGFG
b3JtYXRSR0IzMkYsCisgICAgICAgIERhdGFGb3JtYXRSR0IxNkYsCiAgICAgICAgIERhdGFGb3Jt
YXRCR1I4LAogICAgICAgICBEYXRhRm9ybWF0QkdSQTgsCiAgICAgICAgIERhdGFGb3JtYXRCR1JB
MTZMaXR0bGUsCkBAIC02MjIsMTAgKzYyNSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIERhdGFGb3Jt
YXRSMTZMaXR0bGUsCiAgICAgICAgIERhdGFGb3JtYXRSMTZCaWcsCiAgICAgICAgIERhdGFGb3Jt
YXRSMzJGLAorICAgICAgICBEYXRhRm9ybWF0UjE2RiwKICAgICAgICAgRGF0YUZvcm1hdFJBOCwK
ICAgICAgICAgRGF0YUZvcm1hdFJBMTZMaXR0bGUsCiAgICAgICAgIERhdGFGb3JtYXRSQTE2Qmln
LAogICAgICAgICBEYXRhRm9ybWF0UkEzMkYsCisgICAgICAgIERhdGFGb3JtYXRSQTE2RiwKICAg
ICAgICAgRGF0YUZvcm1hdEFSOCwKICAgICAgICAgRGF0YUZvcm1hdEFSMTZMaXR0bGUsCiAgICAg
ICAgIERhdGFGb3JtYXRBUjE2QmlnLApAQCAtNjMzLDYgKzYzOCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgRGF0YUZvcm1hdEExNkxpdHRsZSwKICAgICAgICAgRGF0YUZvcm1hdEExNkJpZywKICAgICAg
ICAgRGF0YUZvcm1hdEEzMkYsCisgICAgICAgIERhdGFGb3JtYXRBMTZGLAogICAgICAgICBEYXRh
Rm9ybWF0TnVtRm9ybWF0cwogICAgIH07CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBiMjlkODEyOWYzYzdiNWFmMjZjNmRk
ZjMyMzVlYmE0NWM1Y2E3ZWEzLi4zYjIyZjFkOGVmNjZjN2JhMzc1ZDQ3Yjk2MzA1ZTA4ZGViNzJl
MWJjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTMtMDItMTQgIE5heWFuIEt1bWFyIEsgIDxu
YXlhbmtrQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBbV0VCR0xdIEltcGxlbWVudCBPRVNfdGV4
dHVyZV9oYWxmX2Zsb2F0IGluIFdlYktpdC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwOTg1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQgaXMgbm93IGEgY29tbXVu
aXR5IGFwcHJvdmVkIFdlYkdMIGV4dGVuc2lvbi4KKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1l
bnQgdGhlIHN1cHBvcnQgZm9yIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQgaW4gV2ViS2l0LgorICAg
ICAgICBTcGVjaWZpY2F0b246IGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wv
ZXh0ZW5zaW9ucy9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0LworCisgICAgICAgICogZmFzdC9jYW52
YXMvd2ViZ2wvb2VzLXRleHR1cmUtaGFsZi1mbG9hdC5odG1sOiBBZGRlZC4KKwogMjAxMy0wMi0x
MiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEVyYWRpY2F0ZSBm
YXN0L2pzL2RmZy1wb2lzb24tZnV6ei5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC9vZXMtdGV4dHVyZS1oYWxmLWZsb2F0Lmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC9vZXMtdGV4dHVyZS1oYWxmLWZsb2F0Lmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjMyNTMyYTRkYTVlZmU1NzIwOTY3ZWYxNWI2Mjc4YmY2ODdiODkyMwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL29lcy10ZXh0dXJlLWhhbGYtZmxvYXQu
aHRtbApAQCAtMCwwICsxLDIwMiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PG1ldGEgY2hhcnNldD0idXRmLTgiPgorPHRpdGxlPldlYkdMIE9FU190ZXh0dXJlX2Zsb2F0IENv
bmZvcm1hbmNlIFRlc3RzPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL2Rlc2t0b3AtZ2wtY29uc3RhbnRzLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWJnbC10ZXN0LXV0aWxzLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGNhbnZhcyBpZD0i
Y2FudmFzIiBzdHlsZT0id2lkdGg6IDUwcHg7IGhlaWdodDogNTBweDsiPiA8L2NhbnZhcz4KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPCEtLSBTaGFkZXJzIGZvciB0ZXN0aW5nIGhhbGYtZmxv
YXRpbmctcG9pbnQgdGV4dHVyZXMgLS0+Cis8c2NyaXB0IGlkPSJ0ZXN0RnJhZ21lbnRTaGFkZXIi
IHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQiPgorcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cit1
bmlmb3JtIHNhbXBsZXIyRCB0ZXg7Cit1bmlmb3JtIHZlYzQgc3VidHJhY3RvcjsKK3Zhcnlpbmcg
dmVjMiB0ZXhDb29yZDsKK3ZvaWQgbWFpbigpCit7CisgICAgdmVjNCBjb2xvciA9IHRleHR1cmUy
RCh0ZXgsIHRleENvb3JkKTsKKyAgICBpZiAoYWJzKGNvbG9yLnIgLSBzdWJ0cmFjdG9yLnIpICsK
KyAgICAgICAgYWJzKGNvbG9yLmcgLSBzdWJ0cmFjdG9yLmcpICsKKyAgICAgICAgYWJzKGNvbG9y
LmIgLSBzdWJ0cmFjdG9yLmIpICsKKyAgICAgICAgYWJzKGNvbG9yLmEgLSBzdWJ0cmFjdG9yLmEp
IDwgOC4wKSB7CisgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAxLjAsIDAuMCwgMS4w
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwgMC4wLCAw
LjAsIDEuMCk7CisgICAgfQorfQorPC9zY3JpcHQ+Cis8IS0tIFNoYWRlcnMgZm9yIHRlc3Rpbmcg
ZmxvYXRpbmctcG9pbnQgcmVuZGVyIHRhcmdldHMgLS0+Cis8c2NyaXB0IGlkPSJwb3NpdGlvblZl
cnRleFNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC12ZXJ0ZXgiPgorYXR0cmlidXRlIHZlYzQgdlBv
c2l0aW9uOwordm9pZCBtYWluKCkKK3sKKyAgICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsKK30K
Kzwvc2NyaXB0PgorPHNjcmlwdCBpZD0iZmxvYXRpbmdQb2ludEZyYWdtZW50U2hhZGVyIiB0eXBl
PSJ4LXNoYWRlci94LWZyYWdtZW50Ij4KK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfRnJhZ0NvbG9y
ID0gdmVjNCgxMDAwMC4wLCAxMDAwMC4wLCAxMDAwMC4wLCAxMDAwMC4wKTsKK30KKzwvc2NyaXB0
PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgdmVyaWZpZXMgdGhlIGZ1bmN0aW9u
YWxpdHkgb2YgdGhlIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQgZXh0ZW5zaW9uLCBpZiBpdCBpcyBh
dmFpbGFibGUuIik7CisKK2RlYnVnKCIiKTsKKwordmFyIHd0dSA9IFdlYkdMVGVzdFV0aWxzOwor
dmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK3ZhciBnbCA9
IHd0dS5jcmVhdGUzRENvbnRleHQoY2FudmFzKTsKKworaWYgKCFnbCkgeworICB0ZXN0RmFpbGVk
KCJXZWJHTCBjb250ZXh0IGRvZXMgbm90IGV4aXN0Iik7Cit9IGVsc2UgeworICB0ZXN0UGFzc2Vk
KCJXZWJHTCBjb250ZXh0IGV4aXN0cyIpOworCisgIHZhciB0ZXh0dXJlZFNoYWRlcnMgPSBbCisg
ICAgICB3dHUuc2V0dXBTaW1wbGVUZXh0dXJlVmVydGV4U2hhZGVyKGdsKSwKKyAgICAgICJ0ZXN0
RnJhZ21lbnRTaGFkZXIiCisgIF07CisgIHZhciB0ZXN0UHJvZ3JhbSA9CisgICAgICB3dHUuc2V0
dXBQcm9ncmFtKGdsLAorICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlZFNoYWRlcnMsCisg
ICAgICAgICAgICAgICAgICAgICAgIFsndlBvc2l0aW9uJywgJ3RleENvb3JkMCddLAorICAgICAg
ICAgICAgICAgICAgICAgICBbMCwgMV0pOworICB2YXIgcXVhZFBhcmFtZXRlcnMgPSB3dHUuc2V0
dXBVbml0UXVhZChnbCwgMCwgMSk7CisKKyAgLy8gRmlyc3QgdmVyaWZ5IHRoYXQgYWxsb2NhdGlv
biBvZiBoYWxmLWZsb2F0aW5nLXBvaW50IHRleHR1cmVzIGZhaWxzIGlmCisgIC8vIHRoZSBleHRl
bnNpb24gaGFzIG5vdCBiZWVuIGVuYWJsZWQgeWV0LgorICBydW5UZXh0dXJlQ3JlYXRpb25UZXN0
KHRlc3RQcm9ncmFtLCBmYWxzZSk7CisKKyAgaWYgKCFnbC5nZXRFeHRlbnNpb24oIk9FU190ZXh0
dXJlX2hhbGZfZmxvYXQiKSkgeworICAgICAgdGVzdFBhc3NlZCgiTm8gT0VTX3RleHR1cmVfZmxv
YXQgc3VwcG9ydCAtLSB0aGlzIGlzIGxlZ2FsIik7CisgIH0gZWxzZSB7CisgICAgICB0ZXN0UGFz
c2VkKCJTdWNjZXNzZnVsbHkgZW5hYmxlZCBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGV4dGVuc2lv
biIpOworICAgICAgcnVuVGV4dHVyZUNyZWF0aW9uVGVzdCh0ZXN0UHJvZ3JhbSwgdHJ1ZSwgZ2wu
UkdCQSwgNCwgWzEwMDAwLCAxMDAwMCwgMTAwMDAsIDEwMDAwXSk7CisgICAgICBydW5UZXh0dXJl
Q3JlYXRpb25UZXN0KHRlc3RQcm9ncmFtLCB0cnVlLCBnbC5SR0IsIDMsIFsxMDAwMCwgMTAwMDAs
IDEwMDAwLCAwXSk7CisgICAgICBydW5UZXh0dXJlQ3JlYXRpb25UZXN0KHRlc3RQcm9ncmFtLCB0
cnVlLCBnbC5MVU1JTkFOQ0UsIDEsIFsxMDAwMCwgMTAwMDAsIDEwMDAwLCAwXSk7CisgICAgICBy
dW5UZXh0dXJlQ3JlYXRpb25UZXN0KHRlc3RQcm9ncmFtLCB0cnVlLCBnbC5BTFBIQSwgMSwgWzAs
IDAsIDAsIDEwMDAwXSk7CisgICAgICBydW5UZXh0dXJlQ3JlYXRpb25UZXN0KHRlc3RQcm9ncmFt
LCB0cnVlLCBnbC5MVU1JTkFOQ0VfQUxQSEEsIDIsIFsxMDAwMCwgMTAwMDAsIDEwMDAwLCAxMDAw
MF0pOworICAgICAgcnVuUmVuZGVyVGFyZ2V0VGVzdCh0ZXN0UHJvZ3JhbSk7CisgICAgICBydW5V
bmlxdWVPYmplY3RUZXN0KCk7CisgIH0KK30KKworLy8gTmVlZHMgdG8gYmUgZ2xvYmFsIGZvciBz
aG91bGRCZSB0byBzZWUgaXQuCit2YXIgcGl4ZWxzOworCitmdW5jdGlvbiBhbGxvY2F0ZVRleHR1
cmUoKQoreworICAgIHZhciB0ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworICAgIGdsLmJp
bmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpOworICAgIGdsLnRleFBhcmFtZXRlcmko
Z2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBnbC5ORUFSRVNUKTsKKyAgICBn
bC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wu
TkVBUkVTVCk7CisgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJF
X1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7CisgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhU
VVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xFcnJv
clNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgInRleHR1cmUgcGFyYW1ldGVyIHNldHVwIHNob3Vs
ZCBzdWNjZWVkIik7CisgICAgcmV0dXJuIHRleHR1cmU7Cit9CisKK2Z1bmN0aW9uIGNoZWNrUmVu
ZGVyaW5nUmVzdWx0cygpCit7CisgICAgd3R1LmNoZWNrQ2FudmFzKGdsLCBbMCwgMjU1LCAwLCAy
NTVdLCAic2hvdWxkIGJlIGdyZWVuIik7Cit9CisKK2Z1bmN0aW9uIHJ1blRleHR1cmVDcmVhdGlv
blRlc3QodGVzdFByb2dyYW0sIGV4dGVuc2lvbkVuYWJsZWQsIG9wdF9mb3JtYXQsIG9wdF9udW1D
aGFubmVscywgb3B0X3N1YnRyYWN0b3IpCit7CisgICAgdmFyIGZvcm1hdCA9IG9wdF9mb3JtYXQg
fHwgZ2wuUkdCQTsKKyAgICB2YXIgbnVtYmVyT2ZDaGFubmVscyA9IG9wdF9udW1DaGFubmVscyB8
fCA0OworICAgIHZhciBleHBlY3RGYWlsdXJlID0gIWV4dGVuc2lvbkVuYWJsZWQ7CisgICAgdmFy
IHN1YnRyYWN0b3IgPSBvcHRfc3VidHJhY3RvciB8fCBbMTAwMDAsIDEwMDAwLCAxMDAwMCwgMTAw
MDBdOworCisgICAgZGVidWcoIiIpOworICAgIGRlYnVnKCJ0ZXN0aW5nIGZvcm1hdDogIiArIHd0
dS5nbEVudW1Ub1N0cmluZyhnbCwgZm9ybWF0KSArCisgICAgICAgICAgIiBleHBlY3Q6IiArIChl
eHRlbnNpb25FbmFibGVkID8gInN1Y2Nlc3MiIDogImZhaWx1cmUiKSk7CisKKyAgICB2YXIgdGV4
dHVyZSA9IGFsbG9jYXRlVGV4dHVyZSgpOworICAgIC8vIEdlbmVyYXRlIGRhdGEuCisgICAgdmFy
IHdpZHRoID0gMjsKKyAgICB2YXIgaGVpZ2h0ID0gMjsKKyAgICB2YXIgZGF0YSA9IG5ldyBGbG9h
dDMyQXJyYXkod2lkdGggKiBoZWlnaHQgKiBudW1iZXJPZkNoYW5uZWxzKTsKKyAgICBmb3IgKHZh
ciBpaSA9IDA7IGlpIDwgZGF0YS5sZW5ndGg7ICsraWkpIHsKKyAgICAgICAgZGF0YVtpaV0gPSAx
MDAwMDsKKyAgICB9CisgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBmb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgZ2wuSEFMRl9GTE9BVF9PRVMsIGRhdGEpOworICAg
IGlmIChleHBlY3RGYWlsdXJlKSB7CisgICAgICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuSU5W
QUxJRF9FTlVNLCAiaGFsZi1mbG9hdGluZy1wb2ludCB0ZXh0dXJlIGFsbG9jYXRpb24gbXVzdCBi
ZSBkaXNhbGxvd2VkIGlmIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQgaXNuJ3QgZW5hYmxlZCIpOwor
ICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIHsKKyAgICAgICAgZ2xFcnJvclNob3VsZEJlKGds
LCBnbC5OT19FUlJPUiwgImhhbGYtZmxvYXRpbmctcG9pbnQgdGV4dHVyZSBhbGxvY2F0aW9uIHNo
b3VsZCBzdWNjZWVkIGlmIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQgaXMgZW5hYmxlZCIpOworICAg
IH0KKyAgICAvLyBWZXJpZnkgdGhhdCB0aGUgdGV4dHVyZSBhY3R1YWxseSB3b3JrcyBmb3Igc2Ft
cGxpbmcgYW5kIGNvbnRhaW5zIHRoZSBleHBlY3RlZCBkYXRhLgorICAgIGdsLnVuaWZvcm0xaShn
bC5nZXRVbmlmb3JtTG9jYXRpb24odGVzdFByb2dyYW0sICJ0ZXgiKSwgMCk7CisgICAgZ2wudW5p
Zm9ybTRmdihnbC5nZXRVbmlmb3JtTG9jYXRpb24odGVzdFByb2dyYW0sICJzdWJ0cmFjdG9yIiks
IHN1YnRyYWN0b3IpOworICAgIHd0dS5jbGVhckFuZERyYXdVbml0UXVhZChnbCk7CisgICAgY2hl
Y2tSZW5kZXJpbmdSZXN1bHRzKCk7Cit9CisKK2Z1bmN0aW9uIHJ1blJlbmRlclRhcmdldFRlc3Qo
dGVzdFByb2dyYW0pCit7CisgICAgZGVidWcoIiIpOworICAgIGRlYnVnKCJ0ZXN0aW5nIGhhbGYt
ZmxvYXRpbmctcG9pbnQgcmVuZGVyIHRhcmdldHMiKTsKKworICAgIHZhciB0ZXh0dXJlID0gYWxs
b2NhdGVUZXh0dXJlKCk7CisgICAgdmFyIHdpZHRoID0gMjsKKyAgICB2YXIgaGVpZ2h0ID0gMjsK
KyAgICB2YXIgbnVtYmVyT2ZDaGFubmVscyA9IDQ7CisgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhU
VVJFXzJELCAwLCBnbC5SR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5GTE9BVCwg
bnVsbCk7CisgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgImhhbGYtZmxvYXRp
bmctcG9pbnQgdGV4dHVyZSBhbGxvY2F0aW9uIHNob3VsZCBzdWNjZWVkIGlmIE9FU190ZXh0dXJl
X2hhbGZfZmxvYXQgaXMgZW5hYmxlZCIpOworCisgICAgLy8gVHJ5IHRvIHVzZSB0aGlzIHRleHR1
cmUgYXMgYSByZW5kZXIgdGFyZ2V0LgorICAgIHZhciBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZl
cigpOworICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZmJvKTsKKyAgICBn
bC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVO
VDAsIGdsLlRFWFRVUkVfMkQsIHRleHR1cmUsIDApOworICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRF
WFRVUkVfMkQsIG51bGwpOworICAgIC8vIEl0IGlzIGxlZ2FsIGZvciBhIFdlYkdMIGltcGxlbWVu
dGF0aW9uIGV4cG9zaW5nIHRoZSBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGV4dGVuc2lvbiB0bwor
ICAgIC8vIHN1cHBvcnQgaGFsZi1mbG9hdGluZy1wb2ludCB0ZXh0dXJlcyBidXQgbm90IGFzIGF0
dGFjaG1lbnRzIHRvIGZyYW1lYnVmZmVyIG9iamVjdHMuCisgICAgaWYgKGdsLmNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpICE9IGdsLkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7
CisgICAgICAgIGRlYnVnKCJoYWxmLWZsb2F0aW5nLXBvaW50IHJlbmRlciB0YXJnZXRzIG5vdCBz
dXBwb3J0ZWQgLS0gdGhpcyBpcyBsZWdhbCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgdmFyIHJlbmRlclByb2dyYW0gPQorICAgICAgICB3dHUuc2V0dXBQcm9ncmFtKGdsLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIFsicG9zaXRpb25WZXJ0ZXhTaGFkZXIiLCAiZmxvYXRpbmdQ
b2ludEZyYWdtZW50U2hhZGVyIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgWyd2UG9zaXRp
b24nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbMF0pOworICAgIHd0dS5jbGVhckFuZERy
YXdVbml0UXVhZChnbCk7CisgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgInJl
bmRlcmluZyB0byBoYWxmLWZsb2F0aW5nLXBvaW50IHRleHR1cmUgc2hvdWxkIHN1Y2NlZWQiKTsK
KworICAgIC8vIE5vdyBzYW1wbGUgZnJvbSB0aGUgaGFsZi1mbG9hdGluZy1wb2ludCB0ZXh0dXJl
IGFuZCB2ZXJpZnkgd2UgZ290IHRoZSBjb3JyZWN0IHZhbHVlcy4KKyAgICBnbC5iaW5kRnJhbWVi
dWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwpOworICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRV
UkVfMkQsIHRleHR1cmUpOworICAgIGdsLnVzZVByb2dyYW0odGVzdFByb2dyYW0pOworICAgIGds
LnVuaWZvcm0xaShnbC5nZXRVbmlmb3JtTG9jYXRpb24odGVzdFByb2dyYW0sICJ0ZXgiKSwgMCk7
CisgICAgd3R1LmNsZWFyQW5kRHJhd1VuaXRRdWFkKGdsKTsKKyAgICBnbEVycm9yU2hvdWxkQmUo
Z2wsIGdsLk5PX0VSUk9SLCAicmVuZGVyaW5nIGZyb20gaGFsZi1mbG9hdGluZy1wb2ludCB0ZXh0
dXJlIHNob3VsZCBzdWNjZWVkIik7CisgICAgY2hlY2tSZW5kZXJpbmdSZXN1bHRzKCk7Cit9CisK
K2Z1bmN0aW9uIHJ1blVuaXF1ZU9iamVjdFRlc3QoKQoreworICAgIGRlYnVnKCJUZXN0aW5nIHRo
YXQgZ2V0RXh0ZW5zaW9uKCkgcmV0dXJucyB0aGUgc2FtZSBvYmplY3QgZWFjaCB0aW1lIik7Cisg
ICAgZ2wuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IikubXlQcm9wZXJ0eSA9
IDI7CisgICAgZ2MoKTsKKyAgICBzaG91bGRCZSgnZ2wuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVy
ZV9oYWxmX2Zsb2F0IikubXlQcm9wZXJ0eScsICcyJyk7Cit9CisKKworZGVidWcoIiIpOwordmFy
IHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKworPC9ib2R5PgorPC9o
dG1sPgo=
</data>
<flag name="review"
          id="208595"
          type_id="1"
          status="-"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>