<?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>70981</bug_id>
          
          <creation_ts>2011-10-26 16:44:50 -0700</creation_ts>
          <short_desc>Implement new restrictions on uniform and attribute location lengths</short_desc>
          <delta_ts>2011-10-27 16:55:34 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>70989</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>491279</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-10-26 16:44:50 -0700</bug_when>
    <thetext>The WebGL spec was just updated with new restrictions on the lengths of uniform and attribute locations. These restrictions need to be implemented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491333</commentid>
    <comment_count>1</comment_count>
      <attachid>112634</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-10-26 19:52:23 -0700</bug_when>
    <thetext>Created attachment 112634
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491579</commentid>
    <comment_count>2</comment_count>
      <attachid>112634</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-10-27 08:04:43 -0700</bug_when>
    <thetext>Comment on attachment 112634
Patch

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

Looks good, but I&apos;m leaving this for other ports and WebGL experts to have a look.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:4216
&gt; +    const unsigned MaxWebGLLocationLength = 256;

OCD nit:  According to the style guidelines, all variables should start with lower case, and there&apos;s no exception for const.  Also, it looks like there is already a start of a collection of constants in this file at line 14, so perhaps this should be moved there.  OTOH, it is kind of nice to be defined close to where it&apos;s used.  I couldn&apos;t really find a style guideline for that.  (Must wash hands again...)

&gt; LayoutTests/fast/canvas/webgl/resources/webgl-test-utils.js:286
&gt; +      indices[tbase + 0] = index + 0;
&gt; +      indices[tbase + 1] = index + 1;
&gt; +      indices[tbase + 2] = index + vertsAcross;
&gt; +      indices[tbase + 3] = index + vertsAcross;

[After writing this, I realized this code all came from Khronos.  Feel free to upstream my comments, or not.]

Nit:  Since it&apos;s only positions, could this mesh be a tri-strip instead of triangles?  Might save on index buffer size.  If you don&apos;t mind adding some degenerate triangles, you could even get rid of the index buffer entirely by repeating a vertex at the end of each row and reversing direction.

&gt; LayoutTests/fast/canvas/webgl/resources/webgl-test-utils.js:595
&gt; +    //gl.deleteProgram(fragmentShader);
&gt; +    //gl.deleteProgram(vertexShader);

Why are these commented out?  (blame Khronos)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491635</commentid>
    <comment_count>3</comment_count>
      <attachid>112634</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-10-27 09:19:22 -0700</bug_when>
    <thetext>Comment on attachment 112634
Patch

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

Looks good to me.

&gt;&gt; LayoutTests/fast/canvas/webgl/resources/webgl-test-utils.js:595

&gt; 
&gt; Why are these commented out?  (blame Khronos)

Those two lines are simply wrong and should just be deleted upstream.  That&apos;s the problem syncing with khronos: so many changes unrelated with the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491962</commentid>
    <comment_count>4</comment_count>
      <attachid>112753</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-10-27 14:35:14 -0700</bug_when>
    <thetext>Created attachment 112753
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491966</commentid>
    <comment_count>5</comment_count>
      <attachid>112634</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-10-27 14:37:25 -0700</bug_when>
    <thetext>Comment on attachment 112634
Patch

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

&gt;&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:4216
&gt;&gt; +    const unsigned MaxWebGLLocationLength = 256;
&gt; 
&gt; OCD nit:  According to the style guidelines, all variables should start with lower case, and there&apos;s no exception for const.  Also, it looks like there is already a start of a collection of constants in this file at line 14, so perhaps this should be moved there.  OTOH, it is kind of nice to be defined close to where it&apos;s used.  I couldn&apos;t really find a style guideline for that.  (Must wash hands again...)

You&apos;re right. When I wrote this I was thinking about the enum naming guidelines. Fixed. Leaving the const here as there are several other examples in this file of the constant being defined near its use.

&gt;&gt; LayoutTests/fast/canvas/webgl/resources/webgl-test-utils.js:286
&gt;&gt; +      indices[tbase + 3] = index + vertsAcross;
&gt; 
&gt; [After writing this, I realized this code all came from Khronos.  Feel free to upstream my comments, or not.]
&gt; 
&gt; Nit:  Since it&apos;s only positions, could this mesh be a tri-strip instead of triangles?  Might save on index buffer size.  If you don&apos;t mind adding some degenerate triangles, you could even get rid of the index buffer entirely by repeating a vertex at the end of each row and reversing direction.

I&apos;ll forward your comments on to Gregg, who&apos;s the author.

&gt;&gt;&gt; LayoutTests/fast/canvas/webgl/resources/webgl-test-utils.js:595
&gt;&gt;&gt; +    //gl.deleteProgram(vertexShader);
&gt;&gt; 
&gt;&gt; Why are these commented out?  (blame Khronos)
&gt; 
&gt; 

I&apos;ve deleted these upstream and synced again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491979</commentid>
    <comment_count>6</comment_count>
      <attachid>112753</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-10-27 14:49:02 -0700</bug_when>
    <thetext>Comment on attachment 112753
Patch

All looks good</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492101</commentid>
    <comment_count>7</comment_count>
      <attachid>112753</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-27 16:55:29 -0700</bug_when>
    <thetext>Comment on attachment 112753
Patch

Clearing flags on attachment: 112753

Committed r98660: &lt;http://trac.webkit.org/changeset/98660&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492103</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-27 16:55:34 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112634</attachid>
            <date>2011-10-26 19:52:23 -0700</date>
            <delta_ts>2011-10-27 14:37:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70981-20111026195222.patch</filename>
            <type>text/plain</type>
            <size>36578</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4NTMyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMTAtMjYgIEtlbm5ldGgg
UnVzc2VsbCAgPGtickBnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBuZXcgcmVzdHJp
Y3Rpb25zIG9uIHVuaWZvcm0gYW5kIGF0dHJpYnV0ZSBsb2NhdGlvbiBsZW5ndGhzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDk4MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2NhbnZh
cy93ZWJnbC9hdHRyaWItbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sCisgICAgICAgICAgICAg
ICBmYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMuaHRtbAor
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEF0dHJpYkxvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0cmliTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3Jt
TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZUxvY2F0aW9uTGVuZ3RoKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaDoKKwogMjAxMS0xMC0yNiAgU3RldmUgRmFsa2VuYnVyZyAgPHNmYWxrZW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFJlc291cmNlRXJyb3IgZG9lc24ndCBzdXBwb3J0IGN1c3RvbSBk
b21haW5zIG9uIFdpbmRvd3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gOTg1MjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02OTQsNiArNjk0LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJp
bmRBdHRyaWJMbwogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3Qo
KSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuOworICAg
IGlmICghdmFsaWRhdGVMb2NhdGlvbkxlbmd0aChuYW1lKSkKKyAgICAgICAgcmV0dXJuOwogICAg
IGlmICghdmFsaWRhdGVTdHJpbmcobmFtZSkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRl
eHQtPmJpbmRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBuYW1l
KTsKQEAgLTE5MzMsNiArMTkzNSw4IEBAIEdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRBdHRyaWIKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gLTE7
CisgICAgaWYgKCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKG5hbWUpKQorICAgICAgICByZXR1cm4g
LTE7CiAgICAgaWYgKCF2YWxpZGF0ZVN0cmluZyhuYW1lKSkKICAgICAgICAgcmV0dXJuIC0xOwog
ICAgIHJldHVybiBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9n
cmFtKSwgbmFtZSk7CkBAIC0yNjMzLDYgKzI2MzcsOCBAQCBQYXNzUmVmUHRyPFdlYkdMVW5pZm9y
bUxvY2F0aW9uPiBXZWJHTFJlCiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250
ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAgICByZXR1
cm4gMDsKKyAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgobmFtZSkpCisgICAgICAgIHJl
dHVybiAwOwogICAgIGlmICghdmFsaWRhdGVTdHJpbmcobmFtZSkpCiAgICAgICAgIHJldHVybiAw
OwogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7CkBAIC00MjA1LDYgKzQyMTEs
MTYgQEAgV2ViR0xUZXh0dXJlKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbAogICAgIHJldHVy
biB0ZXg7CiB9CiAKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUxvY2F0aW9u
TGVuZ3RoKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIGNvbnN0IHVuc2lnbmVkIE1heFdl
YkdMTG9jYXRpb25MZW5ndGggPSAyNTY7CisgICAgaWYgKHN0cmluZy5sZW5ndGgoKSA+IE1heFdl
YkdMTG9jYXRpb25MZW5ndGgpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZVNpemUoR0MzRGludCB4LCBHQzNEaW50IHkpCiB7CiAgICAgaWYgKHggPCAw
IHx8IHkgPCAwKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gOTg1MjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAt
NTI2LDYgKzUyNiw5IEBAIHB1YmxpYzoKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRo
ZSBib3VuZCBmcmFtZWJ1ZmZlcidzIGhlaWdodC4KICAgICBpbnQgZ2V0Qm91bmRGcmFtZWJ1ZmZl
ckhlaWdodCgpOwogCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZlcmlmeSBsaW1pdHMgb24g
dGhlIGxlbmd0aCBvZiB1bmlmb3JtIGFuZCBhdHRyaWJ1dGUgbG9jYXRpb25zLgorICAgIGJvb2wg
dmFsaWRhdGVMb2NhdGlvbkxlbmd0aChjb25zdCBTdHJpbmcmKTsKKwogICAgIC8vIEhlbHBlciBm
dW5jdGlvbiB0byBjaGVjayBpZiBzaXplIGlzIG5vbi1uZWdhdGl2ZS4KICAgICAvLyBHZW5lcmF0
ZSBHTCBlcnJvciBhbmQgcmV0dXJuIGZhbHNlIGZvciBuZWdhdGl2ZSBpbnB1dHM7IG90aGVyd2lz
ZSwgcmV0dXJuIHRydWUuCiAgICAgYm9vbCB2YWxpZGF0ZVNpemUoR0MzRGludCB4LCBHQzNEaW50
IHkpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4NTMyKQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNSBAQAorMjAxMS0xMC0yNiAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+CisK
KyAgICAgICAgSW1wbGVtZW50IG5ldyByZXN0cmljdGlvbnMgb24gdW5pZm9ybSBhbmQgYXR0cmli
dXRlIGxvY2F0aW9uIGxlbmd0aHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTcwOTgxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUm9sbGVkIGZvcndhcmQgQ2hyb21pdW0gREVQUyBpbiBXZWJLaXQgdG8gcGlj
ayB1cCBuZWVkZWQgQU5HTEUKKyAgICAgICAgZml4ZXMgZm9yIG5ldyBsYXlvdXQgdGVzdHMuCisK
KyAgICAgICAgKiBERVBTOgorCiAyMDExLTEwLTI2ICBDaHJpcyBSb2dlcnMgIDxjcm9nZXJzQGdv
b2dsZS5jb20+CiAKICAgICAgICAgQWRkIGNocm9taXVtIGJyaWRnaW5nIGZvciBBdWRpb1NvdXJj
ZVByb3ZpZGVyQ2xpZW50IGFuZCBzZXRGb3JtYXQoKSBtZXRob2Qgc28gd2UgY2FuIGtub3cgYXVk
aW8gc3RyZWFtIGZvcm1hdApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9ERVBTCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vREVQUwkocmV2aXNpb24gOTg1MjkpCisr
KyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0RFUFMJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMy
LDcgQEAKIAogdmFycyA9IHsKICAgJ2Nocm9taXVtX3N2bic6ICdodHRwOi8vc3JjLmNocm9taXVt
Lm9yZy9zdm4vdHJ1bmsvc3JjJywKLSAgJ2Nocm9taXVtX3Jldic6ICcxMDcxMTMnCisgICdjaHJv
bWl1bV9yZXYnOiAnMTA3Mzk3JwogfQogCiBkZXBzID0gewpJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gOTg1
MzIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
OSBAQAorMjAxMS0xMC0yNiAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+CisKKyAg
ICAgICAgSW1wbGVtZW50IG5ldyByZXN0cmljdGlvbnMgb24gdW5pZm9ybSBhbmQgYXR0cmlidXRl
IGxvY2F0aW9uIGxlbmd0aHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcwOTgxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9jYXRpb24tbGVuZ3RoLWxpbWl0
cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2F0dHJp
Yi1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLmh0bWw6IEFkZGVkIChpbXBvcnRlZCBmcm9tIFdlYkdM
IGNvbmZvcm1hbmNlIHN1aXRlKS4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJj
ZXMvd2ViZ2wtdGVzdC11dGlscy5qczoKKyAgICAgICAgKFdlYkdMVGVzdFV0aWxzKToKKyAgICAg
ICAgKFdlYkdMVGVzdFV0aWxzLik6IFVwZGF0ZWQgdG8gbGF0ZXN0IHZlcnNpb24gaW4gV2ViR0wg
Y29uZm9ybWFuY2Ugc3VpdGUuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1s
b2NhdGlvbi1sZW5ndGgtbGltaXRzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLmh0bWw6IEFkZGVk
IChpbXBvcnRlZCBmcm9tIFdlYkdMIGNvbmZvcm1hbmNlIHN1aXRlKS4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvU2tpcHBlZDogVGVtcG9yYXJpbHkgc2tpcCBuZXcgdGVzdHMgb24gTWFjIHVudGls
IFdlYktpdCdzIGNvcHkgb2YgQU5HTEUgaXMgdXBncmFkZWQuCisKIDIwMTEtMTAtMjYgIEp1bGll
biBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFzc2l2ZSBn
YXJkZW5pbmcuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9j
YXRpb24tbGVuZ3RoLWxpbWl0cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvYXR0cmliLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXR0
cmliLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE4IEBACitWZXJpZnkgbGltaXRzIG9uIHRoZSBsZW5ndGhzIG9mIGF0dHJpYiBsb2Nh
dGlvbnMuCitUZXN0IGF0dHJpYiBsb2NhdGlvbiB1bmRlcm5lYXRoIHRoZSBsZW5ndGggbGltaXQK
K1BBU1MgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykgaXMg
dHJ1ZQorUEFTUyBhdHRyaWIgbG9jYXRpb24gc2hvdWxkIG5vdCBiZSAtMQorUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCitUZXN0IGF0dHJpYiBsb2NhdGlvbiBv
dmVyIHRoZSBsZW5ndGggbGltaXQKK1NoYWRlciBjb21waWxhdGlvbiBzaG91bGQgZmFpbAorUEFT
UyB3dHUubG9hZFNoYWRlckZyb21TY3JpcHQoZ2wsICJiYWRWZXJ0ZXhTaGFkZXIiLCBnbC5WRVJU
RVhfU0hBREVSLCBmdW5jdGlvbiAoZXJyKSB7fSkgaXMgbnVsbAorUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCitBdHRlbXB0IHRvIGJpbmQgdG9vLWxvbmcgYXR0
cmliIGxvY2F0aW9uIHNob3VsZCBwcm9kdWNlIGVycm9yCitQQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogSU5WQUxJRF9WQUxVRSA6IAorQXR0ZW1wdCB0byBmZXRjaCB0b28tbG9uZyBh
dHRyaWIgbG9jYXRpb24gc2hvdWxkIHByb2R1Y2UgZXJyb3IKK1BBU1MgZ2wuZ2V0QXR0cmliTG9j
YXRpb24ocHJvZ3JhbSwgInZQb3NpdGlvbjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEy
MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3IikgaXMgLTEKK1BB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX1ZBTFVFIDogCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXR0cmliLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9j
YXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvYXR0cmliLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PG1ldGEgY2hhcnNldD0idXRmLTgiPgorPHRpdGxlPldlYkdMIGF0dHJpYiBsb2NhdGlvbiBsZW5n
dGggdGVzdHM8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy93
ZWJnbC10ZXN0LmpzIj4gPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRl
c3QtdXRpbHMuanMiPiA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iZXhh
bXBsZSIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIj4KK1RoZXJlIGlzIHN1cHBvc2VkIHRvIGJlIGFu
IGV4YW1wbGUgZHJhd2luZyBoZXJlLCBidXQgaXQncyBub3QgaW1wb3J0YW50LgorPC9jYW52YXM+
Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+VmVyaWZ5IGxpbWl0cyBvbiB0aGUgbGVuZ3RocyBvZiBh
dHRyaWIgbG9jYXRpb25zLjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0
IGlkPSJnb29kVmVydGV4U2hhZGVyIiB0eXBlPSJ4LXNoYWRlci94LXZlcnRleCI+CisvLyBBIHZl
cnRleCBzaGFkZXIgd2hlcmUgdGhlIG5lZWRlZCBhdHRyaWIgbG9jYXRpb24gaXMgZXhhY3RseSAy
NTYgY2hhcmFjdGVycy4KK2F0dHJpYnV0ZSB2ZWM0IHZQb3NpdGlvbjAxMjM0NTY3ODkwMTIzNDU2
Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIz
NDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3
ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY7CisKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfUG9zaXRpb24gPSB2UG9zaXRpb24wMTIzNDU2
Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIz
NDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3
ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2OworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJiYWRWZXJ0ZXhTaGFkZXIi
IHR5cGU9Ingtc2hhZGVyL3gtdmVydGV4Ij4KKy8vIEEgdmVydGV4IHNoYWRlciB3aGVyZSB0aGUg
bmVlZGVkIGF0dHJpYiBsb2NhdGlvbiBpcyAyNTcgY2hhcmFjdGVycy4KK2F0dHJpYnV0ZSB2ZWM0
IHZQb3NpdGlvbjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2
Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIz
NDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3
ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3OworCit2b2lkIG1haW4oKQoreworICAgIGds
X1Bvc2l0aW9uID0gdlBvc2l0aW9uMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEy
MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5
MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2
Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc7Cit9Cis8L3NjcmlwdD4K
KzxzY3JpcHQgaWQ9ImZyYWdtZW50U2hhZGVyIiB0eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4K
K3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OworCit2b2lkIG1haW4oKSB7CisgICAgZ2xfRnJhZ0Nv
bG9yID0gdmVjNCgxLjAsIDAuMCwgMC4wLCAxLjApOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0Pgor
aWYgKHdpbmRvdy5pbml0Tm9uS2hyb25vc0ZyYW1ld29yaykgeworICAgIHdpbmRvdy5pbml0Tm9u
S2hyb25vc0ZyYW1ld29yayhmYWxzZSk7Cit9CisKK3ZhciB3dHUgPSBXZWJHTFRlc3RVdGlsczsK
K3ZhciBnbCA9IHd0dS5jcmVhdGUzRENvbnRleHQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImV4
YW1wbGUiKSk7CisKK2RlYnVnKCJUZXN0IGF0dHJpYiBsb2NhdGlvbiB1bmRlcm5lYXRoIHRoZSBs
ZW5ndGggbGltaXQiKTsKK3ZhciBwcm9ncmFtID0gd3R1LmxvYWRQcm9ncmFtRnJvbVNjcmlwdChn
bCwgImdvb2RWZXJ0ZXhTaGFkZXIiLCAiZnJhZ21lbnRTaGFkZXIiKTsKK3Nob3VsZEJlKCdnbC5n
ZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKScsICd0cnVlJyk7Cit2
YXIgYXR0cmliTG9jID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgInZQb3NpdGlvbjAx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEy
MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5
MDEyMzQ1Njc4OTAxMjM0NTYiKTsKK2lmIChhdHRyaWJMb2MgPT0gLTEpIHsKKyAgICB0ZXN0RmFp
bGVkKCJhdHRyaWIgbG9jYXRpb24gd2FzIC0xLCBzaG91bGQgbm90IGJlIik7Cit9IGVsc2Ugewor
ICAgIHRlc3RQYXNzZWQoImF0dHJpYiBsb2NhdGlvbiBzaG91bGQgbm90IGJlIC0xIik7Cit9Cit3
dHUuZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT05FKTsKKworZGVidWcoIlRlc3QgYXR0cmliIGxv
Y2F0aW9uIG92ZXIgdGhlIGxlbmd0aCBsaW1pdCIpOworZGVidWcoIlNoYWRlciBjb21waWxhdGlv
biBzaG91bGQgZmFpbCIpOworc2hvdWxkQmUoJ3d0dS5sb2FkU2hhZGVyRnJvbVNjcmlwdChnbCwg
ImJhZFZlcnRleFNoYWRlciIsIGdsLlZFUlRFWF9TSEFERVIsIGZ1bmN0aW9uIChlcnIpIHt9KScs
ICdudWxsJyk7Cit3dHUuZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT05FKTsKKworZGVidWcoIkF0
dGVtcHQgdG8gYmluZCB0b28tbG9uZyBhdHRyaWIgbG9jYXRpb24gc2hvdWxkIHByb2R1Y2UgZXJy
b3IiKTsKK3ZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworZ2wuYmluZEF0dHJpYkxv
Y2F0aW9uKHByb2dyYW0sIDAsICJ2UG9zaXRpb24wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3
ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2NyIpOword3R1
LmdsRXJyb3JTaG91bGRCZShnbCwgZ2wuSU5WQUxJRF9WQUxVRSk7CisKK2RlYnVnKCJBdHRlbXB0
IHRvIGZldGNoIHRvby1sb25nIGF0dHJpYiBsb2NhdGlvbiBzaG91bGQgcHJvZHVjZSBlcnJvciIp
Oworc2hvdWxkQmUoJ2dsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sICJ2UG9zaXRpb24wMTIz
NDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3
ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx
MjM0NTY3ODkwMTIzNDU2NyIpJywgJy0xJyk7Cit3dHUuZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5J
TlZBTElEX1ZBTFVFKTsKKworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
dW5pZm9ybS1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLWxlbmd0aC1s
aW1pdHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorVmVyaWZ5IGxpbWl0cyBvbiB0aGUgbGVuZ3RocyBv
ZiB1bmlmb3JtIGxvY2F0aW9ucy4KK1Rlc3QgdW5pZm9ybSBsb2NhdGlvbiB1bmRlcm5lYXRoIHRo
ZSBsZW5ndGggbGltaXQKK1BBU1MgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5M
SU5LX1NUQVRVUykgaXMgdHJ1ZQorUEFTUyB1bmlmb3JtTG9jIGlzIG5vbi1udWxsLgorUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCitUZXN0IHVuaWZvcm0gbG9j
YXRpb24gb3ZlciB0aGUgbGVuZ3RoIGxpbWl0CitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiAKK1BBU1MgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBn
bC5MSU5LX1NUQVRVUykgaXMgdHJ1ZQorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IElOVkFMSURfVkFMVUUgOiAKK1BBU1MgdW5pZm9ybUxvYyBpcyBudWxsCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlv
bi1sZW5ndGgtbGltaXRzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw4NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPG1l
dGEgY2hhcnNldD0idXRmLTgiPgorPHRpdGxlPldlYkdMIHVuaWZvcm0gbG9jYXRpb24gbGVuZ3Ro
IHRlc3RzPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd2Vi
Z2wtdGVzdC5qcyI+IDwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWJnbC10ZXN0
LXV0aWxzLmpzIj4gPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImV4YW1w
bGUiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCI+CitUaGVyZSBpcyBzdXBwb3NlZCB0byBiZSBhbiBl
eGFtcGxlIGRyYXdpbmcgaGVyZSwgYnV0IGl0J3Mgbm90IGltcG9ydGFudC4KKzwvY2FudmFzPgor
PGRpdiBpZD0iZGVzY3JpcHRpb24iPlZlcmlmeSBsaW1pdHMgb24gdGhlIGxlbmd0aHMgb2YgdW5p
Zm9ybSBsb2NhdGlvbnMuPC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQg
aWQ9Imdvb2RWZXJ0ZXhTaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtdmVydGV4Ij4KKy8vIEEgdmVy
dGV4IHNoYWRlciB3aGVyZSB0aGUgbmVlZGVkIHVuaWZvcm0gbG9jYXRpb24gaXMgZXhhY3RseSAy
NTYgY2hhcmFjdGVycy4KK3N0cnVjdCBOZXN0aW5nMiB7CisgICAgdmVjNCBpZGVudGlmaWVyNjJD
aGFyYWN0ZXJzTG9uZ18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDsKK307CisK
K3N0cnVjdCBOZXN0aW5nMSB7CisgICAgTmVzdGluZzIgaWRlbnRpZmllcjY0Q2hhcmFjdGVyc0xv
bmdfMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjsKK307CisKK3VuaWZvcm0g
TmVzdGluZzEgaWRlbnRpZmllcjEyOENoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5
MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2
Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODk7CisKK3ZvaWQgbWFpbigpIHsKKyAgICBnbF9Qb3NpdGlv
biA9IGlkZW50aWZpZXIxMjhDaGFyYWN0ZXJzTG9uZ18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx
MjM0NTY3ODkwMTIzNDU2Nzg5LmlkZW50aWZpZXI2NENoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTYuaWRlbnRpZmllcjYyQ2hhcmFjdGVyc0xvbmdfMDEy
MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQg
aWQ9ImJhZFZlcnRleFNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC12ZXJ0ZXgiPgorLy8gQSB2ZXJ0
ZXggc2hhZGVyIHdoZXJlIHRoZSBuZWVkZWQgdW5pZm9ybSBsb2NhdGlvbiBpcyAyNTcgY2hhcmFj
dGVycy4KK3N0cnVjdCBOZXN0aW5nMiB7CisgICAgdmVjNCBpZGVudGlmaWVyNjNDaGFyYWN0ZXJz
TG9uZ18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU7Cit9OworCitzdHJ1Y3Qg
TmVzdGluZzEgeworICAgIE5lc3RpbmcyIGlkZW50aWZpZXI2NENoYXJhY3RlcnNMb25nXzAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY7Cit9OworCit1bmlmb3JtIE5lc3Rpbmcx
IGlkZW50aWZpZXIxMjhDaGFyYWN0ZXJzTG9uZ18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3
ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5OworCit2b2lkIG1haW4oKSB7CisgICAgTmVzdGluZzIgdGVtcCA9IGlk
ZW50aWZpZXIxMjhDaGFyYWN0ZXJzTG9uZ18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3
ODkwMTIzNDU2Nzg5LmlkZW50aWZpZXI2NENoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2
Nzg5MDEyMzQ1Njc4OTAxMjM0NTY7CisgICAgZ2xfUG9zaXRpb24gPSB0ZW1wLmlkZW50aWZpZXI2
M0NoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTsKK30K
Kzwvc2NyaXB0PgorPHNjcmlwdCBpZD0iZnJhZ21lbnRTaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gt
ZnJhZ21lbnQiPgorcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisKK3ZvaWQgbWFpbigpIHsKKyAg
ICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwgMC4wLCAwLjAsIDEuMCk7Cit9Cis8L3NjcmlwdD4K
KzxzY3JpcHQ+CitpZiAod2luZG93LmluaXROb25LaHJvbm9zRnJhbWV3b3JrKSB7CisgICAgd2lu
ZG93LmluaXROb25LaHJvbm9zRnJhbWV3b3JrKGZhbHNlKTsKK30KKwordmFyIHd0dSA9IFdlYkdM
VGVzdFV0aWxzOwordmFyIGdsID0gd3R1LmNyZWF0ZTNEQ29udGV4dChkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiZXhhbXBsZSIpKTsKKworZGVidWcoIlRlc3QgdW5pZm9ybSBsb2NhdGlvbiB1bmRl
cm5lYXRoIHRoZSBsZW5ndGggbGltaXQiKTsKK3ZhciBwcm9ncmFtID0gd3R1LmxvYWRQcm9ncmFt
RnJvbVNjcmlwdChnbCwgImdvb2RWZXJ0ZXhTaGFkZXIiLCAiZnJhZ21lbnRTaGFkZXIiKTsKK3No
b3VsZEJlKCdnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKScs
ICd0cnVlJyk7Cit2YXIgdW5pZm9ybUxvYyA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFt
LCAiaWRlbnRpZmllcjEyOENoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEy
MzQ1Njc4OTAxMjM0NTY3ODkuaWRlbnRpZmllcjY0Q2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4OTAx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Ni5pZGVudGlmaWVyNjJDaGFyYWN0ZXJzTG9uZ18wMTIz
NDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCIpOworc2hvdWxkQmVOb25OdWxsKCd1bmlm
b3JtTG9jJyk7Cit3dHUuZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT05FKTsKKworZGVidWcoIlRl
c3QgdW5pZm9ybSBsb2NhdGlvbiBvdmVyIHRoZSBsZW5ndGggbGltaXQiKTsKK3Byb2dyYW0gPSB3
dHUubG9hZFByb2dyYW1Gcm9tU2NyaXB0KGdsLCAiYmFkVmVydGV4U2hhZGVyIiwgImZyYWdtZW50
U2hhZGVyIik7Cit3dHUuZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT05FKTsKK3Nob3VsZEJlKCdn
bC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKScsICd0cnVlJyk7
Cit2YXIgdW5pZm9ybUxvYyA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAiaWRlbnRp
ZmllcjEyOENoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx
MjM0NTY3ODkuaWRlbnRpZmllcjY0Q2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Ni5pZGVudGlmaWVyNjNDaGFyYWN0ZXJzTG9uZ18wMTIzNDU2Nzg5MDEy
MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUiKTsKK3d0dS5nbEVycm9yU2hvdWxkQmUoZ2wsIGdsLklO
VkFMSURfVkFMVUUpOworc2hvdWxkQmVOdWxsKCd1bmlmb3JtTG9jJyk7CisKK3N1Y2Nlc3NmdWxs
eVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy93ZWJnbC10ZXN0LXV0aWxzLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy93
ZWJnbC10ZXN0LXV0aWxzLmpzCShyZXZpc2lvbiA5ODUyOSkKKysrIExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3dlYmdsL3Jlc291cmNlcy93ZWJnbC10ZXN0LXV0aWxzLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDQgKzEsNCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDA5IFRoZSBDaHJvbWl1bSBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBDaHJv
bWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIApAQCAtODYsMjggKzg2LDI2IEBAIHZhciBzdGFy
dHNXaXRoID0gZnVuY3Rpb24oaGF5c3RhY2ssIG5lZWQKICAqIEEgdmVydGV4IHNoYWRlciBmb3Ig
YSBzaW5nbGUgdGV4dHVyZS4KICAqIEB0eXBlIHtzdHJpbmd9CiAgKi8KLXZhciBzaW1wbGVUZXh0
dXJlVmVydGV4U2hhZGVyID0gJycgKwotICAnYXR0cmlidXRlIHZlYzQgdlBvc2l0aW9uO1xuJyAr
Ci0gICdhdHRyaWJ1dGUgdmVjMiB0ZXhDb29yZDA7XG4nICsKLSAgJ3ZhcnlpbmcgdmVjMiB0ZXhD
b29yZDtcbicgKwotICAndm9pZCBtYWluKCkge1xuJyArCi0gICcgICAgZ2xfUG9zaXRpb24gPSB2
UG9zaXRpb247XG4nICsKLSAgJyAgICB0ZXhDb29yZCA9IHRleENvb3JkMDtcbicgKwotICAnfVxu
JzsKK3ZhciBzaW1wbGVUZXh0dXJlVmVydGV4U2hhZGVyID0gWworICAnYXR0cmlidXRlIHZlYzQg
dlBvc2l0aW9uOycsCisgICdhdHRyaWJ1dGUgdmVjMiB0ZXhDb29yZDA7JywKKyAgJ3Zhcnlpbmcg
dmVjMiB0ZXhDb29yZDsnLAorICAndm9pZCBtYWluKCkgeycsCisgICcgICAgZ2xfUG9zaXRpb24g
PSB2UG9zaXRpb247JywKKyAgJyAgICB0ZXhDb29yZCA9IHRleENvb3JkMDsnLAorICAnfSddLmpv
aW4oJ1xuJyk7CiAKIC8qKgogICogQSBmcmFnbWVudCBzaGFkZXIgZm9yIGEgc2luZ2xlIHRleHR1
cmUuCiAgKiBAdHlwZSB7c3RyaW5nfQogICovCi12YXIgc2ltcGxlVGV4dHVyZUZyYWdtZW50U2hh
ZGVyID0gJycgKwotICAnI2lmZGVmIEdMX0VTXG4nICsKLSAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0O1xuJyArCi0gICcjZW5kaWZcbicgKwotICAndW5pZm9ybSBzYW1wbGVyMkQgdGV4O1xuJyAr
Ci0gICd2YXJ5aW5nIHZlYzIgdGV4Q29vcmQ7XG4nICsKLSAgJ3ZvaWQgbWFpbigpIHtcbicgKwot
ICAnICAgIGdsX0ZyYWdEYXRhWzBdID0gdGV4dHVyZTJEKHRleCwgdGV4Q29vcmQpO1xuJyArCi0g
ICd9XG4nOwordmFyIHNpbXBsZVRleHR1cmVGcmFnbWVudFNoYWRlciA9IFsKKyAgJ3ByZWNpc2lv
biBtZWRpdW1wIGZsb2F0OycsCisgICd1bmlmb3JtIHNhbXBsZXIyRCB0ZXg7JywKKyAgJ3Zhcnlp
bmcgdmVjMiB0ZXhDb29yZDsnLAorICAndm9pZCBtYWluKCkgeycsCisgICcgICAgZ2xfRnJhZ0Rh
dGFbMF0gPSB0ZXh0dXJlMkQodGV4LCB0ZXhDb29yZCk7JywKKyAgJ30nXS5qb2luKCdcbicpOwog
CiAvKioKICAqIENyZWF0ZXMgYSBzaW1wbGUgdGV4dHVyZSB2ZXJ0ZXggc2hhZGVyLgpAQCAtMjUx
LDYgKzI0OSw3MCBAQCB2YXIgc2V0dXBUZXh0dXJlZFF1YWQgPSBmdW5jdGlvbigKIH07CiAKIC8q
KgorICogQ3JlYXRlcyBhIHVuaXQgcXVhZCB3aXRoIG9ubHkgcG9zaXRpb25zIG9mIGEgZ2l2ZW4g
cmV6CisgKiBAcGFyYW0geyFXZWJHTENvbnRleHR9IGdsIFRoZSBXZWJHTENvbnRleHQgdG8gdXNl
LgorICogQHBhcmFtIHtudW1iZXJ9IGdyaWRSZXogVGhlIHJlc29sdXRpb24gb2YgdGhlIG1lc2gg
Z3JpZC4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfcG9zaXRpb25Mb2NhdGlvbiBUaGUgYXR0cmli
IGxvY2F0aW9uIGZvciBwb3NpdGlvbi4KKyAqLwordmFyIHNldHVwUXVhZCA9IGZ1bmN0aW9uICgK
KyAgICBnbCwgZ3JpZFJlcywgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF9mbGlwT2RkVHJpYW5n
bGVzKSB7CisgIHZhciBwb3NpdGlvbkxvY2F0aW9uID0gb3B0X3Bvc2l0aW9uTG9jYXRpb24gfHwg
MDsKKyAgdmFyIG9iamVjdHMgPSBbXTsKKworICB2YXIgdmVydHNBY3Jvc3MgPSBncmlkUmVzICsg
MTsKKyAgdmFyIG51bVZlcnRzID0gdmVydHNBY3Jvc3MgKiB2ZXJ0c0Fjcm9zczsKKyAgdmFyIHBv
c2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJyYXkobnVtVmVydHMgKiAzKTsKKyAgdmFyIGluZGljZXMg
PSBuZXcgVWludDE2QXJyYXkoNiAqIGdyaWRSZXMgKiBncmlkUmVzKTsKKworICB2YXIgcG9mZnNl
dCA9IDA7CisKKyAgZm9yICh2YXIgeXkgPSAwOyB5eSA8PSBncmlkUmVzOyArK3l5KSB7CisgICAg
Zm9yICh2YXIgeHggPSAwOyB4eCA8PSBncmlkUmVzOyArK3h4KSB7CisgICAgICBwb3NpdGlvbnNb
cG9mZnNldCArIDBdID0gLTEgKyAyICogeHggLyBncmlkUmVzOworICAgICAgcG9zaXRpb25zW3Bv
ZmZzZXQgKyAxXSA9IC0xICsgMiAqIHl5IC8gZ3JpZFJlczsKKyAgICAgIHBvc2l0aW9uc1twb2Zm
c2V0ICsgMl0gPSAwOworCisgICAgICBwb2Zmc2V0ICs9IDM7CisgICAgfQorICB9CisKKyAgdmFy
IHRiYXNlID0gMDsKKyAgZm9yICh2YXIgeXkgPSAwOyB5eSA8IGdyaWRSZXM7ICsreXkpIHsKKyAg
ICB2YXIgaW5kZXggPSB5eSAqIHZlcnRzQWNyb3NzOworICAgIGZvciAodmFyIHh4ID0gMDsgeHgg
PCBncmlkUmVzOyArK3h4KSB7CisgICAgICBpbmRpY2VzW3RiYXNlICsgMF0gPSBpbmRleCArIDA7
CisgICAgICBpbmRpY2VzW3RiYXNlICsgMV0gPSBpbmRleCArIDE7CisgICAgICBpbmRpY2VzW3Ri
YXNlICsgMl0gPSBpbmRleCArIHZlcnRzQWNyb3NzOworICAgICAgaW5kaWNlc1t0YmFzZSArIDNd
ID0gaW5kZXggKyB2ZXJ0c0Fjcm9zczsKKyAgICAgIGluZGljZXNbdGJhc2UgKyA0XSA9IGluZGV4
ICsgMTsKKyAgICAgIGluZGljZXNbdGJhc2UgKyA1XSA9IGluZGV4ICsgdmVydHNBY3Jvc3MgKyAx
OworCisgICAgICBpZiAob3B0X2ZsaXBPZGRUcmlhbmdsZXMpIHsKKyAgICAgICAgaW5kaWNlc1t0
YmFzZSArIDRdID0gaW5kZXggKyB2ZXJ0c0Fjcm9zcyArIDE7CisgICAgICAgIGluZGljZXNbdGJh
c2UgKyA1XSA9IGluZGV4ICsgMTsKKyAgICAgIH0KKworICAgICAgaW5kZXggKz0gMTsKKyAgICAg
IHRiYXNlICs9IDY7CisgICAgfQorICB9CisKKyAgdmFyIGJ1ZiA9IGdsLmNyZWF0ZUJ1ZmZlcigp
OworICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgYnVmKTsKKyAgZ2wuYnVmZmVyRGF0
YShnbC5BUlJBWV9CVUZGRVIsIHBvc2l0aW9ucywgZ2wuU1RBVElDX0RSQVcpOworICBnbC5lbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShwb3NpdGlvbkxvY2F0aW9uKTsKKyAgZ2wudmVydGV4QXR0cmli
UG9pbnRlcihwb3NpdGlvbkxvY2F0aW9uLCAzLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOworICBv
YmplY3RzLnB1c2goYnVmKTsKKworICB2YXIgYnVmID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgIGds
LmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGJ1Zik7CisgIGdsLmJ1ZmZlckRh
dGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTsKKyAg
b2JqZWN0cy5wdXNoKGJ1Zik7CisKKyAgcmV0dXJuIG9iamVjdHM7Cit9OworCisvKioKICAqIEZp
bGxzIHRoZSBnaXZlbiB0ZXh0dXJlIHdpdGggYSBzb2xpZCBjb2xvcgogICogQHBhcmFtIHshV2Vi
R0xDb250ZXh0fSBnbCBUaGUgV2ViR0xDb250ZXh0IHRvIHVzZS4KICAqIEBwYXJhbSB7IVdlYkdM
VGV4dHVyZX0gdGV4IFRoZSB0ZXh0dXJlIHRvIGZpbGwuCkBAIC0zMzcsNyArMzk5LDggQEAgdmFy
IGNoZWNrQ2FudmFzUmVjdCA9IGZ1bmN0aW9uKGdsLCB4LCB5LAogICAgICAgICBmb3IgKGogPSAx
OyBqIDwgY29sb3IubGVuZ3RoOyArK2opIHsKICAgICAgICAgICB3YXMgKz0gIiwiICsgYnVmW29m
ZnNldCArIGpdOwogICAgICAgICB9Ci0gICAgICAgIGRlYnVnKCdleHBlY3RlZDogJyArIGNvbG9y
ICsgJyB3YXMgJyArIHdhcyk7CisgICAgICAgIGRlYnVnKCdhdCAoJyArIChpICUgd2lkdGgpICsg
JywgJyArIE1hdGguZmxvb3IoaSAvIHdpZHRoKSArCisgICAgICAgICAgICAgICcpIGV4cGVjdGVk
OiAnICsgY29sb3IgKyAnIHdhcyAnICsgd2FzKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgfQog
ICAgIH0KQEAgLTUxMyw4ICs1NzYsOSBAQCB2YXIgZ2xFcnJvclNob3VsZEJlID0gZnVuY3Rpb24o
Z2wsIGdsRXJyCiAgKiBMaW5rcyBhIFdlYkdMIHByb2dyYW0sIHRocm93cyBpZiB0aGVyZSBhcmUg
ZXJyb3JzLgogICogQHBhcmFtIHshV2ViR0xDb250ZXh0fSBnbCBUaGUgV2ViR0xDb250ZXh0IHRv
IHVzZS4KICAqIEBwYXJhbSB7IVdlYkdMUHJvZ3JhbX0gcHJvZ3JhbSBUaGUgV2ViR0xQcm9ncmFt
IHRvIGxpbmsuCisgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZyk6IHZvaWQpIG9wdF9lcnJvckNh
bGxiYWNrIGNhbGxiYWNrIGZvciBlcnJvcnMuIAogICovCi12YXIgbGlua1Byb2dyYW0gPSBmdW5j
dGlvbihnbCwgcHJvZ3JhbSkgewordmFyIGxpbmtQcm9ncmFtID0gZnVuY3Rpb24oZ2wsIHByb2dy
YW0sIG9wdF9lcnJvckNhbGxiYWNrKSB7CiAgIC8vIExpbmsgdGhlIHByb2dyYW0KICAgZ2wubGlu
a1Byb2dyYW0ocHJvZ3JhbSk7CiAKQEAgLTUyNyw4ICs1OTEsOCBAQCB2YXIgbGlua1Byb2dyYW0g
PSBmdW5jdGlvbihnbCwgcHJvZ3JhbSkgCiAgICAgdGVzdEZhaWxlZCgiRXJyb3IgaW4gcHJvZ3Jh
bSBsaW5raW5nOiIgKyBlcnJvcik7CiAKICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pOwot
ICAgIGdsLmRlbGV0ZVByb2dyYW0oZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsLmRlbGV0ZVByb2dy
YW0odmVydGV4U2hhZGVyKTsKKyAgICAvL2dsLmRlbGV0ZVByb2dyYW0oZnJhZ21lbnRTaGFkZXIp
OworICAgIC8vZ2wuZGVsZXRlUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXIpOwogICB9CiB9OwogCkBAIC01
OTIsNiArNjU2LDE0OCBAQCB2YXIgc2V0dXBXZWJHTFdpdGhTaGFkZXJzID0gZnVuY3Rpb24oCiB9
OwogCiAvKioKKyAqIExvYWRzIHRleHQgZnJvbSBhbiBleHRlcm5hbCBmaWxlLiBUaGlzIGZ1bmN0
aW9uIGlzIHN5bmNocm9ub3VzLgorICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgdXJsIG9mIHRo
ZSBleHRlcm5hbCBmaWxlLgorICogQHBhcmFtIHshZnVuY3Rpb24oYm9vbCwgc3RyaW5nKTogdm9p
ZH0gY2FsbGJhY2sgdGhhdCBpcyBzZW50IGEgYm9vbCBmb3IKKyAqICAgICBzdWNjZXNzIGFuZCB0
aGUgc3RyaW5nLgorICovCit2YXIgbG9hZFRleHRGaWxlQXN5bmMgPSBmdW5jdGlvbih1cmwsIGNh
bGxiYWNrKSB7CisgIGxvZyAoImxvYWRpbmc6ICIgKyB1cmwpOworICB2YXIgZXJyb3IgPSAnbG9h
ZFRleHRGaWxlU3luY2hyb25vdXMgZmFpbGVkIHRvIGxvYWQgdXJsICInICsgdXJsICsgJyInOwor
ICB2YXIgcmVxdWVzdDsKKyAgaWYgKHdpbmRvdy5YTUxIdHRwUmVxdWVzdCkgeworICAgIHJlcXVl
c3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICBpZiAocmVxdWVzdC5vdmVycmlkZU1pbWVU
eXBlKSB7CisgICAgICByZXF1ZXN0Lm92ZXJyaWRlTWltZVR5cGUoJ3RleHQvcGxhaW4nKTsKKyAg
ICB9CisgIH0gZWxzZSB7CisgICAgdGhyb3cgJ1hNTEh0dHBSZXF1ZXN0IGlzIGRpc2FibGVkJzsK
KyAgfQorICB0cnkgeworICAgIHJlcXVlc3Qub3BlbignR0VUJywgdXJsLCB0cnVlKTsKKyAgICBy
ZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKHJlcXVl
c3QucmVhZHlTdGF0ZSA9PSA0KSB7CisgICAgICAgIHZhciB0ZXh0ID0gJyc7CisgICAgICAgIC8v
IEhUVFAgcmVwb3J0cyBzdWNjZXNzIHdpdGggYSAyMDAgc3RhdHVzLiBUaGUgZmlsZSBwcm90b2Nv
bCByZXBvcnRzCisgICAgICAgIC8vIHN1Y2Nlc3Mgd2l0aCB6ZXJvLiBIVFRQIGRvZXMgbm90IHVz
ZSB6ZXJvIGFzIGEgc3RhdHVzIGNvZGUgKHRoZXkKKyAgICAgICAgLy8gc3RhcnQgYXQgMTAwKS4K
KyAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1MSHR0
cFJlcXVlc3QKKyAgICAgICAgdmFyIHN1Y2Nlc3MgPSByZXF1ZXN0LnN0YXR1cyA9PSAyMDAgfHwg
cmVxdWVzdC5zdGF0dXMgPT0gMDsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICB0
ZXh0ID0gcmVxdWVzdC5yZXNwb25zZVRleHQ7CisgICAgICAgIH0KKyAgICAgICAgbG9nKCJsb2Fk
ZWQ6ICIgKyB1cmwpOworICAgICAgICBjYWxsYmFjayhzdWNjZXNzLCB0ZXh0KTsKKyAgICAgIH0K
KyAgICB9OworICAgIHJlcXVlc3Quc2VuZChudWxsKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGxv
ZygiZmFpbGVkIHRvIGxvYWQ6ICIgKyB1cmwpOworICAgIGNhbGxiYWNrKGZhbHNlLCAnJyk7Cisg
IH0KK307CisKKy8qKgorICogUmVjdXJzaXZlbHkgbG9hZHMgYSBmaWxlIGFzIGEgbGlzdC4gRWFj
aCBsaW5lIGlzIHBhcnNlZCBmb3IgYSByZWxhdGl2ZQorICogcGF0aC4gSWYgdGhlIGZpbGUgZW5k
cyBpbiAudHh0IHRoZSBjb250ZW50cyBvZiB0aGF0IGZpbGUgaXMgaW5zZXJ0ZWQgaW4KKyAqIHRo
ZSBsaXN0LgorICoKKyAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0aGUgZXh0ZXJu
YWwgZmlsZS4KKyAqIEBwYXJhbSB7IWZ1bmN0aW9uKGJvb2wsIEFycmF5PHN0cmluZz4pOiB2b2lk
fSBjYWxsYmFjayB0aGF0IGlzIHNlbnQgYSBib29sCisgKiAgICAgZm9yIHN1Y2Nlc3MgYW5kIHRo
ZSBhcnJheSBvZiBzdHJpbmdzLgorICovCit2YXIgZ2V0RmlsZUxpc3RBc3luYyA9IGZ1bmN0aW9u
KHVybCwgY2FsbGJhY2spIHsKKyAgdmFyIGZpbGVzID0gW107CisKKyAgdmFyIGdldEZpbGVMaXN0
SW1wbCA9IGZ1bmN0aW9uKHVybCwgY2FsbGJhY2spIHsKKyAgICB2YXIgZmlsZXMgPSBbXTsKKyAg
ICBpZiAodXJsLnN1YnN0cih1cmwubGVuZ3RoIC0gNCkgPT0gJy50eHQnKSB7CisgICAgICBsb2Fk
VGV4dEZpbGVBc3luYyh1cmwsIGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24o
c3VjY2VzcywgdGV4dCkgeworICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAg
Y2FsbGJhY2soZmFsc2UsICcnKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICB9Cisg
ICAgICAgICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgnXG4nKTsKKyAgICAgICAgICB2YXIgcHJl
Zml4ID0gJyc7CisgICAgICAgICAgdmFyIGxhc3RTbGFzaCA9IHVybC5sYXN0SW5kZXhPZignLycp
OworICAgICAgICAgIGlmIChsYXN0U2xhc2ggPj0gMCkgeworICAgICAgICAgICAgcHJlZml4ID0g
dXJsLnN1YnN0cigwLCBsYXN0U2xhc2ggKyAxKTsKKyAgICAgICAgICB9CisgICAgICAgICAgdmFy
IGZhaWwgPSBmYWxzZTsKKyAgICAgICAgICB2YXIgY291bnQgPSAxOworICAgICAgICAgIHZhciBp
bmRleCA9IDA7CisgICAgICAgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGxpbmVzLmxlbmd0aDsg
KytpaSkgeworICAgICAgICAgICAgdmFyIHN0ciA9IGxpbmVzW2lpXS5yZXBsYWNlKC9eXHNccyov
LCAnJykucmVwbGFjZSgvXHNccyokLywgJycpOworICAgICAgICAgICAgaWYgKHN0ci5sZW5ndGgg
PiA0ICYmCisgICAgICAgICAgICAgICAgc3RyWzBdICE9ICcjJyAmJgorICAgICAgICAgICAgICAg
IHN0clswXSAhPSAiOyIgJiYKKyAgICAgICAgICAgICAgICBzdHIuc3Vic3RyKDAsIDIpICE9ICIv
LyIpIHsKKyAgICAgICAgICAgICAgdmFyIG5hbWVzID0gc3RyLnNwbGl0KC8gKy8pOworICAgICAg
ICAgICAgICBuZXdfdXJsID0gcHJlZml4ICsgc3RyOworICAgICAgICAgICAgICBpZiAobmFtZXMu
bGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgICAgICBuZXdfdXJsID0gcHJlZml4ICsgc3RyOwor
ICAgICAgICAgICAgICAgICsrY291bnQ7CisgICAgICAgICAgICAgICAgZ2V0RmlsZUxpc3RJbXBs
KG5ld191cmwsIGZ1bmN0aW9uKGluZGV4KSB7CisgICAgICAgICAgICAgICAgICByZXR1cm4gZnVu
Y3Rpb24oc3VjY2VzcywgbmV3X2ZpbGVzKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZygiZ290
IGZpbGVzOiAiICsgbmV3X2ZpbGVzLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChz
dWNjZXNzKSB7CisgICAgICAgICAgICAgICAgICAgICAgZmlsZXNbaW5kZXhdID0gbmV3X2ZpbGVz
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZpbmlzaChzdWNj
ZXNzKTsKKyAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfShpbmRleCsrKSk7
CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIHMgPSAiIjsKKyAg
ICAgICAgICAgICAgICB2YXIgcCA9ICIiOworICAgICAgICAgICAgICAgIGZvciAodmFyIGpqID0g
MDsgamogPCBuYW1lcy5sZW5ndGg7ICsramopIHsKKyAgICAgICAgICAgICAgICAgIHMgKz0gcCAr
IHByZWZpeCArIG5hbWVzW2pqXTsKKyAgICAgICAgICAgICAgICAgIHAgPSAiICI7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZpbGVzW2luZGV4KytdID0gczsKKyAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBmaW5pc2godHJ1
ZSk7CisKKyAgICAgICAgICBmdW5jdGlvbiBmaW5pc2goc3VjY2VzcykgeworICAgICAgICAgICAg
aWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgIGZhaWwgPSB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgLS1jb3VudDsKKyAgICAgICAgICAgIGxvZygiY291bnQ6ICIgKyBjb3Vu
dCk7CisgICAgICAgICAgICBpZiAoIWNvdW50KSB7CisgICAgICAgICAgICAgIGNhbGxiYWNrKCFm
YWlsLCBmaWxlcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICB9KCkpOworCisgICAgfSBlbHNlIHsKKyAgICAgIGZpbGVzLnB1c2godXJsKTsKKyAgICAgIGNh
bGxiYWNrKHRydWUsIGZpbGVzKTsKKyAgICB9CisgIH07CisKKyAgZ2V0RmlsZUxpc3RJbXBsKHVy
bCwgZnVuY3Rpb24oc3VjY2VzcywgZmlsZXMpIHsKKyAgICAvLyBmbGF0dGVuCisgICAgdmFyIGZs
YXQgPSBbXTsKKyAgICBmbGF0dGVuKGZpbGVzKTsKKyAgICBmdW5jdGlvbiBmbGF0dGVuKGZpbGVz
KSB7CisgICAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgZmlsZXMubGVuZ3RoOyArK2lpKSB7Cisg
ICAgICAgIHZhciB2YWx1ZSA9IGZpbGVzW2lpXTsKKyAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkg
PT0gInN0cmluZyIpIHsKKyAgICAgICAgICBmbGF0LnB1c2godmFsdWUpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgIGZsYXR0ZW4odmFsdWUpOworICAgICAgICB9CisgICAgICB9CisgICAg
fQorICAgIGNhbGxiYWNrKHN1Y2Nlc3MsIGZsYXQpOworICB9KTsKK307CisKKy8qKgogICogR2V0
cyBhIGZpbGUgZnJvbSBhIGZpbGUvVVJMCiAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZSB0aGUgVVJM
IG9mIHRoZSBmaWxlIHRvIGdldC4KICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNvbnRlbnRzIG9m
IHRoZSBmaWxlLgpAQCAtNjAzLDEwICs4MDksNiBAQCB2YXIgcmVhZEZpbGUgPSBmdW5jdGlvbihm
aWxlKSB7CiAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0LnJlcGxhY2UoL1xyL2csICIiKTsKIH07
CiAKLS8qKgotICogR2V0cyBhIGZpbGUgZnJvbSBhIFVSTCBhbmQgcGFyc2VzIGl0IGZvciBmaWxl
bmFtZXMuIElGIGEgZmlsZSBuYW1lIGVuZHMKLSAqIGluIC50eHQgcmVjdXJzaXZlbHkgcmVhZHMg
dGhhdCBmaWxlIGFuZCBhZGRzIGl0IHRvIHRoZSBsaXN0LgotICovCiB2YXIgcmVhZEZpbGVMaXN0
ID0gZnVuY3Rpb24odXJsKSB7CiAgIHZhciBmaWxlcyA9IFtdOwogICBpZiAodXJsLnN1YnN0cih1
cmwubGVuZ3RoIC0gNCkgPT0gJy50eHQnKSB7CkBAIC02NDcsMTQgKzg0OSwxNiBAQCB2YXIgcmVh
ZEZpbGVMaXN0ID0gZnVuY3Rpb24odXJsKSB7CiAgKiBMb2FkcyBhIHNoYWRlci4KICAqIEBwYXJh
bSB7IVdlYkdMQ29udGV4dH0gZ2wgVGhlIFdlYkdMQ29udGV4dCB0byB1c2UuCiAgKiBAcGFyYW0g
e3N0cmluZ30gc2hhZGVyU291cmNlIFRoZSBzaGFkZXIgc291cmNlLgotICogQHBhcmFtIHtudW1i
ZXJ9IHNoYWRlclR5cGUgVGhlIHR5cGUgb2Ygc2hhZGVyLgorICogQHBhcmFtIHtudW1iZXJ9IHNo
YWRlclR5cGUgVGhlIHR5cGUgb2Ygc2hhZGVyLiAKKyAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5n
KTogdm9pZCkgb3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJhY2sgZm9yIGVycm9ycy4gCiAgKiBAcmV0
dXJuIHshV2ViR0xTaGFkZXJ9IFRoZSBjcmVhdGVkIHNoYWRlci4KICAqLwotdmFyIGxvYWRTaGFk
ZXIgPSBmdW5jdGlvbihnbCwgc2hhZGVyU291cmNlLCBzaGFkZXJUeXBlKSB7Cit2YXIgbG9hZFNo
YWRlciA9IGZ1bmN0aW9uKGdsLCBzaGFkZXJTb3VyY2UsIHNoYWRlclR5cGUsIG9wdF9lcnJvckNh
bGxiYWNrKSB7CisgIHZhciBlcnJGbiA9IG9wdF9lcnJvckNhbGxiYWNrIHx8IGVycm9yOwogICAv
LyBDcmVhdGUgdGhlIHNoYWRlciBvYmplY3QKICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRl
cihzaGFkZXJUeXBlKTsKICAgaWYgKHNoYWRlciA9PSBudWxsKSB7Ci0gICAgZXJyb3IoIioqKiBF
cnJvcjogdW5hYmxlIHRvIGNyZWF0ZSBzaGFkZXIgJyIrc2hhZGVyU291cmNlKyInIik7CisgICAg
ZXJyRm4oIioqKiBFcnJvcjogdW5hYmxlIHRvIGNyZWF0ZSBzaGFkZXIgJyIrc2hhZGVyU291cmNl
KyInIik7CiAgICAgcmV0dXJuIG51bGw7CiAgIH0KIApAQCAtNjYyLDcgKzg2Niw3IEBAIHZhciBs
b2FkU2hhZGVyID0gZnVuY3Rpb24oZ2wsIHNoYWRlclNvdXIKICAgZ2wuc2hhZGVyU291cmNlKHNo
YWRlciwgc2hhZGVyU291cmNlKTsKICAgdmFyIGVyciA9IGdsLmdldEVycm9yKCk7CiAgIGlmIChl
cnIgIT0gZ2wuTk9fRVJST1IpIHsKLSAgICBlcnJvcigiKioqIEVycm9yIGxvYWRpbmcgc2hhZGVy
ICciICsgc2hhZGVyICsgIic6IiArIGdsRW51bVRvU3RyaW5nKGdsLCBlcnIpKTsKKyAgICBlcnJG
bigiKioqIEVycm9yIGxvYWRpbmcgc2hhZGVyICciICsgc2hhZGVyICsgIic6IiArIGdsRW51bVRv
U3RyaW5nKGdsLCBlcnIpKTsKICAgICByZXR1cm4gbnVsbDsKICAgfQogCkBAIC02NzQsNyArODc4
LDcgQEAgdmFyIGxvYWRTaGFkZXIgPSBmdW5jdGlvbihnbCwgc2hhZGVyU291cgogICBpZiAoIWNv
bXBpbGVkKSB7CiAgICAgLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgZHVyaW5nIGNvbXBpbGF0aW9u
OyBnZXQgdGhlIGVycm9yCiAgICAgbGFzdEVycm9yID0gZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFk
ZXIpOwotICAgIGVycm9yKCIqKiogRXJyb3IgY29tcGlsaW5nIHNoYWRlciAnIiArIHNoYWRlciAr
ICInOiIgKyBsYXN0RXJyb3IpOworICAgIGVyckZuKCIqKiogRXJyb3IgY29tcGlsaW5nIHNoYWRl
ciAnIiArIHNoYWRlciArICInOiIgKyBsYXN0RXJyb3IpOwogICAgIGdsLmRlbGV0ZVNoYWRlcihz
aGFkZXIpOwogICAgIHJldHVybiBudWxsOwogICB9CkBAIC02ODcsMTEgKzg5MSwxMiBAQCB2YXIg
bG9hZFNoYWRlciA9IGZ1bmN0aW9uKGdsLCBzaGFkZXJTb3VyCiAgKiBAcGFyYW0geyFXZWJHTENv
bnRleHR9IGdsIFRoZSBXZWJHTENvbnRleHQgdG8gdXNlLgogICogQHBhcmFtIHtmaWxlfSBmaWxl
IFRoZSBVUkwgb2YgdGhlIHNoYWRlciBzb3VyY2UuCiAgKiBAcGFyYW0ge251bWJlcn0gdHlwZSBU
aGUgdHlwZSBvZiBzaGFkZXIuCisgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZyk6IHZvaWQpIG9w
dF9lcnJvckNhbGxiYWNrIGNhbGxiYWNrIGZvciBlcnJvcnMuIAogICogQHJldHVybiB7IVdlYkdM
U2hhZGVyfSBUaGUgY3JlYXRlZCBzaGFkZXIuCiAgKi8KLXZhciBsb2FkU2hhZGVyRnJvbUZpbGUg
PSBmdW5jdGlvbihnbCwgZmlsZSwgdHlwZSkgewordmFyIGxvYWRTaGFkZXJGcm9tRmlsZSA9IGZ1
bmN0aW9uKGdsLCBmaWxlLCB0eXBlLCBvcHRfZXJyb3JDYWxsYmFjaykgewogICB2YXIgc2hhZGVy
U291cmNlID0gcmVhZEZpbGUoZmlsZSk7Ci0gIHJldHVybiBsb2FkU2hhZGVyKGdsLCBzaGFkZXJT
b3VyY2UsIHR5cGUpOworICByZXR1cm4gbG9hZFNoYWRlcihnbCwgc2hhZGVyU291cmNlLCB0eXBl
LCBvcHRfZXJyb3JDYWxsYmFjayk7CiB9OwogCiAvKioKQEAgLTcwMCw5ICs5MDUsMTEgQEAgdmFy
IGxvYWRTaGFkZXJGcm9tRmlsZSA9IGZ1bmN0aW9uKGdsLCBmaQogICogQHBhcmFtIHtzdHJpbmd9
IHNjcmlwdElkIFRoZSBpZCBvZiB0aGUgc2NyaXB0IHRhZy4KICAqIEBwYXJhbSB7bnVtYmVyfSBv
cHRfc2hhZGVyVHlwZSBUaGUgdHlwZSBvZiBzaGFkZXIuIElmIG5vdCBwYXNzZWQgaW4gaXQgd2ls
bAogICogICAgIGJlIGRlcml2ZWQgZnJvbSB0aGUgdHlwZSBvZiB0aGUgc2NyaXB0IHRhZy4KKyAq
IEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nKTogdm9pZCkgb3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJh
Y2sgZm9yIGVycm9ycy4gCiAgKiBAcmV0dXJuIHshV2ViR0xTaGFkZXJ9IFRoZSBjcmVhdGVkIHNo
YWRlci4KICAqLwotdmFyIGxvYWRTaGFkZXJGcm9tU2NyaXB0ID0gZnVuY3Rpb24oZ2wsIHNjcmlw
dElkLCBvcHRfc2hhZGVyVHlwZSkgewordmFyIGxvYWRTaGFkZXJGcm9tU2NyaXB0ID0gZnVuY3Rp
b24oCisgICAgZ2wsIHNjcmlwdElkLCBvcHRfc2hhZGVyVHlwZSwgb3B0X2Vycm9yQ2FsbGJhY2sp
IHsKICAgdmFyIHNoYWRlclNvdXJjZSA9ICIiOwogICB2YXIgc2hhZGVyVHlwZTsKICAgdmFyIHNo
YWRlclNjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNjcmlwdElkKTsKQEAgLTcyMyw3
ICs5MzAsOCBAQCB2YXIgbG9hZFNoYWRlckZyb21TY3JpcHQgPSBmdW5jdGlvbihnbCwgCiAgIH0K
IAogICByZXR1cm4gbG9hZFNoYWRlcigKLSAgICAgIGdsLCBzaGFkZXJTb3VyY2UsIG9wdF9zaGFk
ZXJUeXBlID8gb3B0X3NoYWRlclR5cGUgOiBzaGFkZXJUeXBlKTsKKyAgICAgIGdsLCBzaGFkZXJT
b3VyY2UsIG9wdF9zaGFkZXJUeXBlID8gb3B0X3NoYWRlclR5cGUgOiBzaGFkZXJUeXBlLAorICAg
ICAgb3B0X2Vycm9yQ2FsbGJhY2spOwogfTsKIAogdmFyIGxvYWRTdGFuZGFyZFByb2dyYW0gPSBm
dW5jdGlvbihnbCkgewpAQCAtNzM5LDE3ICs5NDcsMjEgQEAgdmFyIGxvYWRTdGFuZGFyZFByb2dy
YW0gPSBmdW5jdGlvbihnbCkgewogICogQHBhcmFtIHshV2ViR0xDb250ZXh0fSBnbCBUaGUgV2Vi
R0xDb250ZXh0IHRvIHVzZS4KICAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJ0ZXhTaGFkZXJQYXRoIFRo
ZSBVUkwgb2YgdGhlIHZlcnRleCBzaGFkZXIuCiAgKiBAcGFyYW0ge3N0cmluZ30gZnJhZ21lbnRT
aGFkZXJQYXRoIFRoZSBVUkwgb2YgdGhlIGZyYWdtZW50IHNoYWRlci4KKyAqIEBwYXJhbSB7ZnVu
Y3Rpb24oc3RyaW5nKTogdm9pZCkgb3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJhY2sgZm9yIGVycm9y
cy4gCiAgKiBAcmV0dXJuIHshV2ViR0xQcm9ncmFtfSBUaGUgY3JlYXRlZCBwcm9ncmFtLgogICov
Ci12YXIgbG9hZFByb2dyYW1Gcm9tRmlsZSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTaGFkZXJQYXRo
LCBmcmFnbWVudFNoYWRlclBhdGgpIHsKK3ZhciBsb2FkUHJvZ3JhbUZyb21GaWxlID0gZnVuY3Rp
b24oCisgICAgZ2wsIHZlcnRleFNoYWRlclBhdGgsIGZyYWdtZW50U2hhZGVyUGF0aCwgb3B0X2Vy
cm9yQ2FsbGJhY2spIHsKICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7CiAgIGds
LmF0dGFjaFNoYWRlcigKICAgICAgIHByb2dyYW0sCi0gICAgICBsb2FkU2hhZGVyRnJvbUZpbGUo
Z2wsIHZlcnRleFNoYWRlclBhdGgsIGdsLlZFUlRFWF9TSEFERVIpKTsKKyAgICAgIGxvYWRTaGFk
ZXJGcm9tRmlsZSgKKyAgICAgICAgICBnbCwgdmVydGV4U2hhZGVyUGF0aCwgZ2wuVkVSVEVYX1NI
QURFUiwgb3B0X2Vycm9yQ2FsbGJhY2spKTsKICAgZ2wuYXR0YWNoU2hhZGVyKAogICAgICAgcHJv
Z3JhbSwKLSAgICAgIGxvYWRTaGFkZXJGcm9tRmlsZShnbCwgZnJhZ21lbnRTaGFkZXJQYXRoLCBn
bC5GUkFHTUVOVF9TSEFERVIpKTsKLSAgbGlua1Byb2dyYW0oZ2wsIHByb2dyYW0pOworICAgICAg
bG9hZFNoYWRlckZyb21GaWxlKAorICAgICAgICAgIGdsLCBmcmFnbWVudFNoYWRlclBhdGgsIGds
LkZSQUdNRU5UX1NIQURFUiwgb3B0X2Vycm9yQ2FsbGJhY2spKTsKKyAgbGlua1Byb2dyYW0oZ2ws
IHByb2dyYW0sIG9wdF9lcnJvckNhbGxiYWNrKTsKICAgcmV0dXJuIHByb2dyYW07CiB9OwogCkBA
IC03NjEsNDkgKzk3Myw3MiBAQCB2YXIgbG9hZFByb2dyYW1Gcm9tRmlsZSA9IGZ1bmN0aW9uKGds
LCB2CiAgKiAgICAgICAgdmVydGV4IHNoYWRlci4KICAqIEBwYXJhbSB7c3RyaW5nfSBmcmFnbWVu
dFNjcmlwdElkIFRoZSBpZCBvZiB0aGUgc2NyaXB0IHRhZyB0aGF0IGNvbnRhaW5zIHRoZQogICog
ICAgICAgIGZyYWdtZW50IHNoYWRlci4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nKTogdm9p
ZCkgb3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJhY2sgZm9yIGVycm9ycy4gCiAgKiBAcmV0dXJuIHsh
V2ViR0xQcm9ncmFtfSBUaGUgY3JlYXRlZCBwcm9ncmFtLgogICovCiB2YXIgbG9hZFByb2dyYW1G
cm9tU2NyaXB0ID0gZnVuY3Rpb24gbG9hZFByb2dyYW1Gcm9tU2NyaXB0KAotICBnbCwgdmVydGV4
U2NyaXB0SWQsIGZyYWdtZW50U2NyaXB0SWQpIHsKKyAgICBnbCwgdmVydGV4U2NyaXB0SWQsIGZy
YWdtZW50U2NyaXB0SWQsIG9wdF9lcnJvckNhbGxiYWNrKSB7CiAgIHZhciBwcm9ncmFtID0gZ2wu
Y3JlYXRlUHJvZ3JhbSgpOwogICBnbC5hdHRhY2hTaGFkZXIoCiAgICAgICBwcm9ncmFtLAotICAg
ICAgbG9hZFNoYWRlckZyb21TY3JpcHQoZ2wsIHZlcnRleFNjcmlwdElkLCBnbC5WRVJURVhfU0hB
REVSKSk7CisgICAgICBsb2FkU2hhZGVyRnJvbVNjcmlwdCgKKyAgICAgICAgICBnbCwgdmVydGV4
U2NyaXB0SWQsIGdsLlZFUlRFWF9TSEFERVIsIG9wdF9lcnJvckNhbGxiYWNrKSk7CiAgIGdsLmF0
dGFjaFNoYWRlcigKICAgICAgIHByb2dyYW0sCi0gICAgICBsb2FkU2hhZGVyRnJvbVNjcmlwdChn
bCwgZnJhZ21lbnRTY3JpcHRJZCwgIGdsLkZSQUdNRU5UX1NIQURFUikpOwotICBsaW5rUHJvZ3Jh
bShnbCwgcHJvZ3JhbSk7CisgICAgICBsb2FkU2hhZGVyRnJvbVNjcmlwdCgKKyAgICAgICAgICBn
bCwgZnJhZ21lbnRTY3JpcHRJZCwgIGdsLkZSQUdNRU5UX1NIQURFUiwgb3B0X2Vycm9yQ2FsbGJh
Y2spKTsKKyAgbGlua1Byb2dyYW0oZ2wsIHByb2dyYW0sIG9wdF9lcnJvckNhbGxiYWNrKTsKICAg
cmV0dXJuIHByb2dyYW07CiB9OwogCiAvKioKLSAqIExvYWRzIHNoYWRlcnMgZnJvbSBzY3JpcHQg
dGFncywgY3JlYXRlcyBhIHByb2dyYW0sIGF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZAorICogTG9h
ZHMgc2hhZGVycyBmcm9tIHNvdXJjZSwgY3JlYXRlcyBhIHByb2dyYW0sIGF0dGFjaGVzIHRoZSBz
aGFkZXJzIGFuZAogICogbGlua3MuCiAgKiBAcGFyYW0geyFXZWJHTENvbnRleHR9IGdsIFRoZSBX
ZWJHTENvbnRleHQgdG8gdXNlLgogICogQHBhcmFtIHtzdHJpbmd9IHZlcnRleFNoYWRlciBUaGUg
dmVydGV4IHNoYWRlci4KICAqIEBwYXJhbSB7c3RyaW5nfSBmcmFnbWVudFNoYWRlciBUaGUgZnJh
Z21lbnQgc2hhZGVyLgorICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmcpOiB2b2lkKSBvcHRfZXJy
b3JDYWxsYmFjayBjYWxsYmFjayBmb3IgZXJyb3JzLiAKICAqIEByZXR1cm4geyFXZWJHTFByb2dy
YW19IFRoZSBjcmVhdGVkIHByb2dyYW0uCiAgKi8KLXZhciBsb2FkUHJvZ3JhbSA9IGZ1bmN0aW9u
KGdsLCB2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVyKSB7Cit2YXIgbG9hZFByb2dyYW0gPSBm
dW5jdGlvbigKKyAgICBnbCwgdmVydGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlciwgb3B0X2Vycm9y
Q2FsbGJhY2spIHsKICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7CiAgIGdsLmF0
dGFjaFNoYWRlcigKICAgICAgIHByb2dyYW0sCi0gICAgICBsb2FkU2hhZGVyKGdsLCB2ZXJ0ZXhT
aGFkZXIsIGdsLlZFUlRFWF9TSEFERVIpKTsKKyAgICAgIGxvYWRTaGFkZXIoCisgICAgICAgICAg
Z2wsIHZlcnRleFNoYWRlciwgZ2wuVkVSVEVYX1NIQURFUiwgb3B0X2Vycm9yQ2FsbGJhY2spKTsK
ICAgZ2wuYXR0YWNoU2hhZGVyKAogICAgICAgcHJvZ3JhbSwKLSAgICAgIGxvYWRTaGFkZXIoZ2ws
IGZyYWdtZW50U2hhZGVyLCAgZ2wuRlJBR01FTlRfU0hBREVSKSk7Ci0gIGxpbmtQcm9ncmFtKGds
LCBwcm9ncmFtKTsKKyAgICAgIGxvYWRTaGFkZXIoCisgICAgICAgICAgZ2wsIGZyYWdtZW50U2hh
ZGVyLCBnbC5GUkFHTUVOVF9TSEFERVIsIG9wdF9lcnJvckNhbGxiYWNrKSk7CisgIGxpbmtQcm9n
cmFtKGdsLCBwcm9ncmFtLCBvcHRfZXJyb3JDYWxsYmFjayk7CiAgIHJldHVybiBwcm9ncmFtOwog
fTsKIAordmFyIGJhc2VQYXRoOwordmFyIGdldEJhc2VQYXRoID0gZnVuY3Rpb24oKSB7CisgIGlm
ICghYmFzZVBhdGgpIHsKKyAgICB2YXIgZXhwZWN0ZWRCYXNlID0gIndlYmdsLXRlc3QtdXRpbHMu
anMiOworICAgIHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3Nj
cmlwdCcpOworICAgIGZvciAodmFyIHNjcmlwdCwgaSA9IDA7IHNjcmlwdCA9IHNjcmlwdHNbaV07
IGkrKykgeworICAgICAgdmFyIHNyYyA9IHNjcmlwdC5zcmM7CisgICAgICB2YXIgbCA9IHNyYy5s
ZW5ndGg7CisgICAgICBpZiAoc3JjLnN1YnN0cihsIC0gZXhwZWN0ZWRCYXNlLmxlbmd0aCkgPT0g
ZXhwZWN0ZWRCYXNlKSB7CisgICAgICAgIGJhc2VQYXRoID0gc3JjLnN1YnN0cigwLCBsIC0gZXhw
ZWN0ZWRCYXNlLmxlbmd0aCk7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBiYXNlUGF0
aDsKK307CisKIHZhciBsb2FkU3RhbmRhcmRWZXJ0ZXhTaGFkZXIgPSBmdW5jdGlvbihnbCkgewog
ICByZXR1cm4gbG9hZFNoYWRlckZyb21GaWxlKAotICAgICAgZ2wsICJyZXNvdXJjZXMvdmVydGV4
U2hhZGVyLnZlcnQiLCBnbC5WRVJURVhfU0hBREVSKTsKKyAgICAgIGdsLCBnZXRCYXNlUGF0aCgp
ICsgInZlcnRleFNoYWRlci52ZXJ0IiwgZ2wuVkVSVEVYX1NIQURFUik7CiB9OwogCiB2YXIgbG9h
ZFN0YW5kYXJkRnJhZ21lbnRTaGFkZXIgPSBmdW5jdGlvbihnbCkgewogICByZXR1cm4gbG9hZFNo
YWRlckZyb21GaWxlKAotICAgICAgZ2wsICJyZXNvdXJjZXMvZnJhZ21lbnRTaGFkZXIuZnJhZyIs
IGdsLkZSQUdNRU5UX1NIQURFUik7CisgICAgICBnbCwgZ2V0QmFzZVBhdGgoKSArICJmcmFnbWVu
dFNoYWRlci5mcmFnIiwgZ2wuRlJBR01FTlRfU0hBREVSKTsKIH07CiAKIC8qKgpAQCAtODQ4LDYg
KzEwODMsMjkgQEAgdmFyIGxvYWRJbWFnZXNBc3luYyA9IGZ1bmN0aW9uKHVybHMsIGNhbAogICBj
b3VudERvd24oKTsKIH07CiAKK3ZhciBnZXRVcmxBcmd1bWVudHMgPSBmdW5jdGlvbigpIHsKKyAg
dmFyIGFyZ3MgPSB7fTsKKyAgdHJ5IHsKKyAgICB2YXIgcyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVm
OworICAgIHZhciBxID0gcy5pbmRleE9mKCI/Iik7CisgICAgdmFyIGUgPSBzLmluZGV4T2YoIiMi
KTsKKyAgICBpZiAoZSA8IDApIHsKKyAgICAgIGUgPSBzLmxlbmd0aDsKKyAgICB9CisgICAgdmFy
IHF1ZXJ5ID0gcy5zdWJzdHJpbmcocSArIDEsIGUpOworICAgIHZhciBwYWlycyA9IHF1ZXJ5LnNw
bGl0KCImIik7CisgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHBhaXJzLmxlbmd0aDsgKytpaSkg
eworICAgICAgdmFyIGtleVZhbHVlID0gcGFpcnNbaWldLnNwbGl0KCI9Iik7CisgICAgICB2YXIg
a2V5ID0ga2V5VmFsdWVbMF07CisgICAgICB2YXIgdmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQo
a2V5VmFsdWVbMV0pOworICAgICAgYXJnc1trZXldID0gdmFsdWU7CisgICAgfQorICB9IGNhdGNo
IChlKSB7CisgICAgdGhyb3cgImNvdWxkIG5vdCBwYXJzZSB1cmwiOworICB9CisgIHJldHVybiBh
cmdzOworfTsKKwogcmV0dXJuIHsKICAgY3JlYXRlM0RDb250ZXh0OiBjcmVhdGUzRENvbnRleHQs
CiAgIGNyZWF0ZTNEQ29udGV4dFdpdGhXcmFwcGVyVGhhdFRocm93c09uR0xFcnJvcjoKQEAgLTg1
Nyw3ICsxMTE1LDkgQEAgcmV0dXJuIHsKICAgY3JlYXRlQ29sb3JlZFRleHR1cmU6IGNyZWF0ZUNv
bG9yZWRUZXh0dXJlLAogICBkcmF3UXVhZDogZHJhd1F1YWQsCiAgIGVuZHNXaXRoOiBlbmRzV2l0
aCwKKyAgZ2V0RmlsZUxpc3RBc3luYzogZ2V0RmlsZUxpc3RBc3luYywKICAgZ2V0TGFzdEVycm9y
OiBnZXRMYXN0RXJyb3IsCisgIGdldFVybEFyZ3VtZW50czogZ2V0VXJsQXJndW1lbnRzLAogICBn
bEVudW1Ub1N0cmluZzogZ2xFbnVtVG9TdHJpbmcsCiAgIGdsRXJyb3JTaG91bGRCZTogZ2xFcnJv
clNob3VsZEJlLAogICBmaWxsVGV4dHVyZTogZmlsbFRleHR1cmUsCkBAIC04NzIsMTEgKzExMzIs
MTMgQEAgcmV0dXJuIHsKICAgbG9hZFN0YW5kYXJkUHJvZ3JhbTogbG9hZFN0YW5kYXJkUHJvZ3Jh
bSwKICAgbG9hZFN0YW5kYXJkVmVydGV4U2hhZGVyOiBsb2FkU3RhbmRhcmRWZXJ0ZXhTaGFkZXIs
CiAgIGxvYWRTdGFuZGFyZEZyYWdtZW50U2hhZGVyOiBsb2FkU3RhbmRhcmRGcmFnbWVudFNoYWRl
ciwKKyAgbG9hZFRleHRGaWxlQXN5bmM6IGxvYWRUZXh0RmlsZUFzeW5jLAogICBsb2FkVGV4dHVy
ZTogbG9hZFRleHR1cmUsCiAgIGxvZzogbG9nLAogICBsb2dnaW5nT2ZmOiBsb2dnaW5nT2ZmLAog
ICBlcnJvcjogZXJyb3IsCiAgIHNldHVwUHJvZ3JhbTogc2V0dXBQcm9ncmFtLAorICBzZXR1cFF1
YWQ6IHNldHVwUXVhZCwKICAgc2V0dXBTaW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXI6IHNldHVw
U2ltcGxlVGV4dHVyZUZyYWdtZW50U2hhZGVyLAogICBzZXR1cFNpbXBsZVRleHR1cmVQcm9ncmFt
OiBzZXR1cFNpbXBsZVRleHR1cmVQcm9ncmFtLAogICBzZXR1cFNpbXBsZVRleHR1cmVWZXJ0ZXhT
aGFkZXI6IHNldHVwU2ltcGxlVGV4dHVyZVZlcnRleFNoYWRlciwKSW5kZXg6IExheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9Ta2lwcGVkCShyZXZpc2lvbiA5ODUyOSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC00NTAsMyArNDUwLDcgQEAgaHR0cC90ZXN0cy9o
aXN0b3J5L2JhY2std2l0aC1mcmFnbWVudC1jaAogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Njg1NjYKIGZhc3QvY3NzL3dlYmtpdC1tYXNrLWNyYXNoLWZpZWxkc2V0
LWxlZ2VuZC5odG1sCiBmYXN0L2Nzcy93ZWJraXQtbWFzay1jcmFzaC10YWJsZS5odG1sCisKKyMg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwOTg5CitmYXN0L2NhbnZh
cy93ZWJnbC9hdHRyaWItbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sCitmYXN0L2NhbnZhcy93
ZWJnbC91bmlmb3JtLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMuaHRtbAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112753</attachid>
            <date>2011-10-27 14:35:14 -0700</date>
            <delta_ts>2011-10-27 16:55:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70981-20111027143513.patch</filename>
            <type>text/plain</type>
            <size>35521</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4NjM4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMTAtMjcgIEtlbm5ldGgg
UnVzc2VsbCAgPGtickBnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBuZXcgcmVzdHJp
Y3Rpb25zIG9uIHVuaWZvcm0gYW5kIGF0dHJpYnV0ZSBsb2NhdGlvbiBsZW5ndGhzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDk4MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2NhbnZh
cy93ZWJnbC9hdHRyaWItbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sCisgICAgICAgICAgICAg
ICBmYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMuaHRtbAor
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEF0dHJpYkxvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0cmliTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3Jt
TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZUxvY2F0aW9uTGVuZ3RoKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaDoKKwogMjAxMS0xMC0yNyAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+
CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMDYx
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDk4NjM4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjk0LDYg
KzY5NCw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kQXR0cmliTG8KICAgICBV
TlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2Vi
R0xPYmplY3QocHJvZ3JhbSkpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlTG9j
YXRpb25MZW5ndGgobmFtZSkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAoIXZhbGlkYXRlU3Ry
aW5nKG5hbWUpKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5iaW5kQXR0cmliTG9j
YXRpb24ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgbmFtZSk7CkBAIC0xOTMzLDYgKzE5
MzUsOCBAQCBHQzNEaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0cmliCiB7CiAgICAg
aWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuIC0xOworICAgIGlmICghdmFsaWRh
dGVMb2NhdGlvbkxlbmd0aChuYW1lKSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmICghdmFs
aWRhdGVTdHJpbmcobmFtZSkpCiAgICAgICAgIHJldHVybiAtMTsKICAgICByZXR1cm4gbV9jb250
ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOwpAQCAt
MjYzMyw2ICsyNjM3LDggQEAgUGFzc1JlZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4gV2ViR0xS
ZQogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFs
aWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCF2
YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKG5hbWUpKQorICAgICAgICByZXR1cm4gMDsKICAgICBpZiAo
IXZhbGlkYXRlU3RyaW5nKG5hbWUpKQogICAgICAgICByZXR1cm4gMDsKICAgICBXZWJHTFN0YXRl
UmVzdG9yZXIodGhpcywgZmFsc2UpOwpAQCAtNDIwNSw2ICs0MjExLDE2IEBAIFdlYkdMVGV4dHVy
ZSogV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWwKICAgICByZXR1cm4gdGV4OwogfQogCitib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVMb2NhdGlvbkxlbmd0aChjb25zdCBTdHJp
bmcmIHN0cmluZykKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBtYXhXZWJHTExvY2F0aW9uTGVuZ3Ro
ID0gMjU2OworICAgIGlmIChzdHJpbmcubGVuZ3RoKCkgPiBtYXhXZWJHTExvY2F0aW9uTGVuZ3Ro
KSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVTaXpl
KEdDM0RpbnQgeCwgR0MzRGludCB5KQogewogICAgIGlmICh4IDwgMCB8fCB5IDwgMCkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgJKHJldmlzaW9uIDk4NjM4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyNiw2ICs1MjYsOSBAQCBw
dWJsaWM6CiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgYm91bmQgZnJhbWVidWZm
ZXIncyBoZWlnaHQuCiAgICAgaW50IGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKTsKIAorICAg
IC8vIEhlbHBlciBmdW5jdGlvbiB0byB2ZXJpZnkgbGltaXRzIG9uIHRoZSBsZW5ndGggb2YgdW5p
Zm9ybSBhbmQgYXR0cmlidXRlIGxvY2F0aW9ucy4KKyAgICBib29sIHZhbGlkYXRlTG9jYXRpb25M
ZW5ndGgoY29uc3QgU3RyaW5nJik7CisKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sg
aWYgc2l6ZSBpcyBub24tbmVnYXRpdmUuCiAgICAgLy8gR2VuZXJhdGUgR0wgZXJyb3IgYW5kIHJl
dHVybiBmYWxzZSBmb3IgbmVnYXRpdmUgaW5wdXRzOyBvdGhlcndpc2UsIHJldHVybiB0cnVlLgog
ICAgIGJvb2wgdmFsaWRhdGVTaXplKEdDM0RpbnQgeCwgR0MzRGludCB5KTsKSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDk4NjM4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTEtMTAtMjcgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIEltcGxlbWVudCBuZXcgcmVzdHJpY3Rpb25zIG9uIHVuaWZvcm0gYW5k
IGF0dHJpYnV0ZSBsb2NhdGlvbiBsZW5ndGhzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03MDk4MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvYXR0cmliLWxvY2F0aW9uLWxl
bmd0aC1saW1pdHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93
ZWJnbC9hdHRyaWItbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sOiBBZGRlZCAoaW1wb3J0ZWQg
ZnJvbSBXZWJHTCBjb25mb3JtYW5jZSBzdWl0ZSkuCisgICAgICAgICogZmFzdC9jYW52YXMvd2Vi
Z2wvcmVzb3VyY2VzL3dlYmdsLXRlc3QtdXRpbHMuanM6CisgICAgICAgIChXZWJHTFRlc3RVdGls
cyk6CisgICAgICAgIChXZWJHTFRlc3RVdGlscy4pOiBVcGRhdGVkIHRvIGxhdGVzdCB2ZXJzaW9u
IGluIFdlYkdMIGNvbmZvcm1hbmNlIHN1aXRlLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmds
L3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5o
dG1sOiBBZGRlZCAoaW1wb3J0ZWQgZnJvbSBXZWJHTCBjb25mb3JtYW5jZSBzdWl0ZSkuCisgICAg
ICAgICogcGxhdGZvcm0vbWFjL1NraXBwZWQ6IFRlbXBvcmFyaWx5IHNraXAgbmV3IHRlc3RzIG9u
IE1hYyB1bnRpbCBXZWJLaXQncyBjb3B5IG9mIEFOR0xFIGlzIHVwZ3JhZGVkLgorCiAyMDExLTEw
LTI3ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwNjEKQEAgLTI2NCw3ICsyODAsNiBAQAog
CiAgICAgICAgICogcGxhdGZvcm0vZWZsL3RhYmxlczogWy4uLl0KIAotPj4+Pj4+PiAucjk4NTk4
CiAyMDExLTEwLTI3ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCBHVEsgcmViYXNlbGluZS4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL2F0dHJpYi1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9j
YXRpb24tbGVuZ3RoLWxpbWl0cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTggQEAKK1ZlcmlmeSBsaW1pdHMgb24g
dGhlIGxlbmd0aHMgb2YgYXR0cmliIGxvY2F0aW9ucy4KK1Rlc3QgYXR0cmliIGxvY2F0aW9uIHVu
ZGVybmVhdGggdGhlIGxlbmd0aCBsaW1pdAorUEFTUyBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHBy
b2dyYW0sIGdsLkxJTktfU1RBVFVTKSBpcyB0cnVlCitQQVNTIGF0dHJpYiBsb2NhdGlvbiBzaG91
bGQgbm90IGJlIC0xCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Ig
OiAKK1Rlc3QgYXR0cmliIGxvY2F0aW9uIG92ZXIgdGhlIGxlbmd0aCBsaW1pdAorU2hhZGVyIGNv
bXBpbGF0aW9uIHNob3VsZCBmYWlsCitQQVNTIHd0dS5sb2FkU2hhZGVyRnJvbVNjcmlwdChnbCwg
ImJhZFZlcnRleFNoYWRlciIsIGdsLlZFUlRFWF9TSEFERVIsIGZ1bmN0aW9uIChlcnIpIHt9KSBp
cyBudWxsCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKK0F0
dGVtcHQgdG8gYmluZCB0b28tbG9uZyBhdHRyaWIgbG9jYXRpb24gc2hvdWxkIHByb2R1Y2UgZXJy
b3IKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX1ZBTFVFIDogCitB
dHRlbXB0IHRvIGZldGNoIHRvby1sb25nIGF0dHJpYiBsb2NhdGlvbiBzaG91bGQgcHJvZHVjZSBl
cnJvcgorUEFTUyBnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAidlBvc2l0aW9uMDEyMzQ1
Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEy
MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5
MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2
Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIz
NDU2Nzg5MDEyMzQ1NjciKSBpcyAtMQorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IElOVkFMSURfVkFMVUUgOiAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWIt
bG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL2F0dHJpYi1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9jYXRpb24t
bGVuZ3RoLWxpbWl0cy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc5IEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8dGl0bGU+
V2ViR0wgYXR0cmliIGxvY2F0aW9uIGxlbmd0aCB0ZXN0czwvdGl0bGU+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPiA8L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvd2ViZ2wtdGVzdC11dGlscy5qcyI+IDwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8Y2FudmFzIGlkPSJleGFtcGxlIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiPgor
VGhlcmUgaXMgc3VwcG9zZWQgdG8gYmUgYW4gZXhhbXBsZSBkcmF3aW5nIGhlcmUsIGJ1dCBpdCdz
IG5vdCBpbXBvcnRhbnQuCis8L2NhbnZhcz4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj5WZXJpZnkg
bGltaXRzIG9uIHRoZSBsZW5ndGhzIG9mIGF0dHJpYiBsb2NhdGlvbnMuPC9kaXY+Cis8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgaWQ9Imdvb2RWZXJ0ZXhTaGFkZXIiIHR5cGU9Ingt
c2hhZGVyL3gtdmVydGV4Ij4KKy8vIEEgdmVydGV4IHNoYWRlciB3aGVyZSB0aGUgbmVlZGVkIGF0
dHJpYiBsb2NhdGlvbiBpcyBleGFjdGx5IDI1NiBjaGFyYWN0ZXJzLgorYXR0cmlidXRlIHZlYzQg
dlBvc2l0aW9uMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3
ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjsKKwordm9pZCBtYWluKCkKK3sKKyAgICBnbF9Q
b3NpdGlvbiA9IHZQb3NpdGlvbjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3
ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY7Cit9Cis8L3NjcmlwdD4KKzxz
Y3JpcHQgaWQ9ImJhZFZlcnRleFNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC12ZXJ0ZXgiPgorLy8g
QSB2ZXJ0ZXggc2hhZGVyIHdoZXJlIHRoZSBuZWVkZWQgYXR0cmliIGxvY2F0aW9uIGlzIDI1NyBj
aGFyYWN0ZXJzLgorYXR0cmlidXRlIHZlYzQgdlBvc2l0aW9uMDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3
ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc7
CisKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfUG9zaXRpb24gPSB2UG9zaXRpb24wMTIzNDU2Nzg5
MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2
Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIz
NDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3
ODkwMTIzNDU2NzsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCBpZD0iZnJhZ21lbnRTaGFkZXIiIHR5
cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQiPgorcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisKK3Zv
aWQgbWFpbigpIHsKKyAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwgMC4wLCAwLjAsIDEuMCk7
Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmluaXROb25LaHJvbm9zRnJhbWV3
b3JrKSB7CisgICAgd2luZG93LmluaXROb25LaHJvbm9zRnJhbWV3b3JrKGZhbHNlKTsKK30KKwor
dmFyIHd0dSA9IFdlYkdMVGVzdFV0aWxzOwordmFyIGdsID0gd3R1LmNyZWF0ZTNEQ29udGV4dChk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXhhbXBsZSIpKTsKKworZGVidWcoIlRlc3QgYXR0cmli
IGxvY2F0aW9uIHVuZGVybmVhdGggdGhlIGxlbmd0aCBsaW1pdCIpOwordmFyIHByb2dyYW0gPSB3
dHUubG9hZFByb2dyYW1Gcm9tU2NyaXB0KGdsLCAiZ29vZFZlcnRleFNoYWRlciIsICJmcmFnbWVu
dFNoYWRlciIpOworc2hvdWxkQmUoJ2dsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wu
TElOS19TVEFUVVMpJywgJ3RydWUnKTsKK3ZhciBhdHRyaWJMb2MgPSBnbC5nZXRBdHRyaWJMb2Nh
dGlvbihwcm9ncmFtLCAidlBvc2l0aW9uMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEy
MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5
MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2
Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIz
NDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NiIpOworaWYgKGF0dHJp
YkxvYyA9PSAtMSkgeworICAgIHRlc3RGYWlsZWQoImF0dHJpYiBsb2NhdGlvbiB3YXMgLTEsIHNo
b3VsZCBub3QgYmUiKTsKK30gZWxzZSB7CisgICAgdGVzdFBhc3NlZCgiYXR0cmliIGxvY2F0aW9u
IHNob3VsZCBub3QgYmUgLTEiKTsKK30KK3d0dS5nbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PTkUp
OworCitkZWJ1ZygiVGVzdCBhdHRyaWIgbG9jYXRpb24gb3ZlciB0aGUgbGVuZ3RoIGxpbWl0Iik7
CitkZWJ1ZygiU2hhZGVyIGNvbXBpbGF0aW9uIHNob3VsZCBmYWlsIik7CitzaG91bGRCZSgnd3R1
LmxvYWRTaGFkZXJGcm9tU2NyaXB0KGdsLCAiYmFkVmVydGV4U2hhZGVyIiwgZ2wuVkVSVEVYX1NI
QURFUiwgZnVuY3Rpb24gKGVycikge30pJywgJ251bGwnKTsKK3d0dS5nbEVycm9yU2hvdWxkQmUo
Z2wsIGdsLk5PTkUpOworCitkZWJ1ZygiQXR0ZW1wdCB0byBiaW5kIHRvby1sb25nIGF0dHJpYiBs
b2NhdGlvbiBzaG91bGQgcHJvZHVjZSBlcnJvciIpOwordmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQ
cm9ncmFtKCk7CitnbC5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgMCwgInZQb3NpdGlvbjAx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEy
MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5
MDEyMzQ1Njc4OTAxMjM0NTY3Iik7Cit3dHUuZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5JTlZBTElE
X1ZBTFVFKTsKKworZGVidWcoIkF0dGVtcHQgdG8gZmV0Y2ggdG9vLWxvbmcgYXR0cmliIGxvY2F0
aW9uIHNob3VsZCBwcm9kdWNlIGVycm9yIik7CitzaG91bGRCZSgnZ2wuZ2V0QXR0cmliTG9jYXRp
b24ocHJvZ3JhbSwgInZQb3NpdGlvbjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3IiknLCAnLTEnKTsKK3d0
dS5nbEVycm9yU2hvdWxkQmUoZ2wsIGdsLklOVkFMSURfVkFMVUUpOworCitzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLWxlbmd0
aC1saW1pdHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACitWZXJp
ZnkgbGltaXRzIG9uIHRoZSBsZW5ndGhzIG9mIHVuaWZvcm0gbG9jYXRpb25zLgorVGVzdCB1bmlm
b3JtIGxvY2F0aW9uIHVuZGVybmVhdGggdGhlIGxlbmd0aCBsaW1pdAorUEFTUyBnbC5nZXRQcm9n
cmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSBpcyB0cnVlCitQQVNTIHVuaWZv
cm1Mb2MgaXMgbm9uLW51bGwuCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiAKK1Rlc3QgdW5pZm9ybSBsb2NhdGlvbiBvdmVyIHRoZSBsZW5ndGggbGltaXQKK1BB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAorUEFTUyBnbC5nZXRQ
cm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSBpcyB0cnVlCitQQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9WQUxVRSA6IAorUEFTUyB1bmlmb3Jt
TG9jIGlzIG51bGwKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0
aW9uLWxlbmd0aC1saW1pdHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVu
Z3RoLWxpbWl0cy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg0IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8dGl0bGU+V2Vi
R0wgdW5pZm9ybSBsb2NhdGlvbiBsZW5ndGggdGVzdHM8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWJnbC10ZXN0LmpzIj4gPC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QtdXRpbHMuanMiPiA8L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPGNhbnZhcyBpZD0iZXhhbXBsZSIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIj4KK1Ro
ZXJlIGlzIHN1cHBvc2VkIHRvIGJlIGFuIGV4YW1wbGUgZHJhd2luZyBoZXJlLCBidXQgaXQncyBu
b3QgaW1wb3J0YW50LgorPC9jYW52YXM+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+VmVyaWZ5IGxp
bWl0cyBvbiB0aGUgbGVuZ3RocyBvZiB1bmlmb3JtIGxvY2F0aW9ucy48L2Rpdj4KKzxkaXYgaWQ9
ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBpZD0iZ29vZFZlcnRleFNoYWRlciIgdHlwZT0ieC1z
aGFkZXIveC12ZXJ0ZXgiPgorLy8gQSB2ZXJ0ZXggc2hhZGVyIHdoZXJlIHRoZSBuZWVkZWQgdW5p
Zm9ybSBsb2NhdGlvbiBpcyBleGFjdGx5IDI1NiBjaGFyYWN0ZXJzLgorc3RydWN0IE5lc3Rpbmcy
IHsKKyAgICB2ZWM0IGlkZW50aWZpZXI2MkNoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2
Nzg5MDEyMzQ1Njc4OTAxMjM0OworfTsKKworc3RydWN0IE5lc3RpbmcxIHsKKyAgICBOZXN0aW5n
MiBpZGVudGlmaWVyNjRDaGFyYWN0ZXJzTG9uZ18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3
ODkwMTIzNDU2OworfTsKKwordW5pZm9ybSBOZXN0aW5nMSBpZGVudGlmaWVyMTI4Q2hhcmFjdGVy
c0xvbmdfMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTsKKwordm9p
ZCBtYWluKCkgeworICAgIGdsX1Bvc2l0aW9uID0gaWRlbnRpZmllcjEyOENoYXJhY3RlcnNMb25n
XzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkuaWRlbnRpZmllcjY0
Q2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Ni5pZGVu
dGlmaWVyNjJDaGFyYWN0ZXJzTG9uZ18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIz
NDsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCBpZD0iYmFkVmVydGV4U2hhZGVyIiB0eXBlPSJ4LXNo
YWRlci94LXZlcnRleCI+CisvLyBBIHZlcnRleCBzaGFkZXIgd2hlcmUgdGhlIG5lZWRlZCB1bmlm
b3JtIGxvY2F0aW9uIGlzIDI1NyBjaGFyYWN0ZXJzLgorc3RydWN0IE5lc3RpbmcyIHsKKyAgICB2
ZWM0IGlkZW50aWZpZXI2M0NoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAxMjM0NTsKK307CisKK3N0cnVjdCBOZXN0aW5nMSB7CisgICAgTmVzdGluZzIgaWRlbnRp
ZmllcjY0Q2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
NjsKK307CisKK3VuaWZvcm0gTmVzdGluZzEgaWRlbnRpZmllcjEyOENoYXJhY3RlcnNMb25nXzAx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODk7CisKK3ZvaWQgbWFpbigp
IHsKKyAgICBOZXN0aW5nMiB0ZW1wID0gaWRlbnRpZmllcjEyOENoYXJhY3RlcnNMb25nXzAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkuaWRlbnRpZmllcjY0Q2hhcmFj
dGVyc0xvbmdfMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjsKKyAgICBnbF9Q
b3NpdGlvbiA9IHRlbXAuaWRlbnRpZmllcjYzQ2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1OworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJmcmFnbWVu
dFNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC1mcmFnbWVudCI+CitwcmVjaXNpb24gbWVkaXVtcCBm
bG9hdDsKKwordm9pZCBtYWluKCkgeworICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wLCAwLjAs
IDAuMCwgMS4wKTsKK30KKzwvc2NyaXB0PgorPHNjcmlwdD4KK2lmICh3aW5kb3cuaW5pdE5vbkto
cm9ub3NGcmFtZXdvcmspIHsKKyAgICB3aW5kb3cuaW5pdE5vbktocm9ub3NGcmFtZXdvcmsoZmFs
c2UpOworfQorCit2YXIgd3R1ID0gV2ViR0xUZXN0VXRpbHM7Cit2YXIgZ2wgPSB3dHUuY3JlYXRl
M0RDb250ZXh0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJleGFtcGxlIikpOworCitkZWJ1Zygi
VGVzdCB1bmlmb3JtIGxvY2F0aW9uIHVuZGVybmVhdGggdGhlIGxlbmd0aCBsaW1pdCIpOwordmFy
IHByb2dyYW0gPSB3dHUubG9hZFByb2dyYW1Gcm9tU2NyaXB0KGdsLCAiZ29vZFZlcnRleFNoYWRl
ciIsICJmcmFnbWVudFNoYWRlciIpOworc2hvdWxkQmUoJ2dsLmdldFByb2dyYW1QYXJhbWV0ZXIo
cHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpJywgJ3RydWUnKTsKK3ZhciB1bmlmb3JtTG9jID0gZ2wu
Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJpZGVudGlmaWVyMTI4Q2hhcmFjdGVyc0xvbmdf
MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2
Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OS5pZGVudGlmaWVyNjRD
aGFyYWN0ZXJzTG9uZ18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2LmlkZW50
aWZpZXI2MkNoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
Iik7CitzaG91bGRCZU5vbk51bGwoJ3VuaWZvcm1Mb2MnKTsKK3d0dS5nbEVycm9yU2hvdWxkQmUo
Z2wsIGdsLk5PTkUpOworCitkZWJ1ZygiVGVzdCB1bmlmb3JtIGxvY2F0aW9uIG92ZXIgdGhlIGxl
bmd0aCBsaW1pdCIpOworcHJvZ3JhbSA9IHd0dS5sb2FkUHJvZ3JhbUZyb21TY3JpcHQoZ2wsICJi
YWRWZXJ0ZXhTaGFkZXIiLCAiZnJhZ21lbnRTaGFkZXIiKTsKK3d0dS5nbEVycm9yU2hvdWxkQmUo
Z2wsIGdsLk5PTkUpOworc2hvdWxkQmUoJ2dsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwg
Z2wuTElOS19TVEFUVVMpJywgJ3RydWUnKTsKK3ZhciB1bmlmb3JtTG9jID0gZ2wuZ2V0VW5pZm9y
bUxvY2F0aW9uKHByb2dyYW0sICJpZGVudGlmaWVyMTI4Q2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OS5pZGVudGlmaWVyNjRDaGFyYWN0ZXJz
TG9uZ18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2LmlkZW50aWZpZXI2M0No
YXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NSIpOword3R1
LmdsRXJyb3JTaG91bGRCZShnbCwgZ2wuSU5WQUxJRF9WQUxVRSk7CitzaG91bGRCZU51bGwoJ3Vu
aWZvcm1Mb2MnKTsKKworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVz
b3VyY2VzL3dlYmdsLXRlc3QtdXRpbHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsLXRlc3QtdXRpbHMuanMJKHJldmlzaW9uIDk4
NjM4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsLXRl
c3QtdXRpbHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDkgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogCkBA
IC04NiwyOCArODYsMjYgQEAgdmFyIHN0YXJ0c1dpdGggPSBmdW5jdGlvbihoYXlzdGFjaywgbmVl
ZAogICogQSB2ZXJ0ZXggc2hhZGVyIGZvciBhIHNpbmdsZSB0ZXh0dXJlLgogICogQHR5cGUge3N0
cmluZ30KICAqLwotdmFyIHNpbXBsZVRleHR1cmVWZXJ0ZXhTaGFkZXIgPSAnJyArCi0gICdhdHRy
aWJ1dGUgdmVjNCB2UG9zaXRpb247XG4nICsKLSAgJ2F0dHJpYnV0ZSB2ZWMyIHRleENvb3JkMDtc
bicgKwotICAndmFyeWluZyB2ZWMyIHRleENvb3JkO1xuJyArCi0gICd2b2lkIG1haW4oKSB7XG4n
ICsKLSAgJyAgICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjtcbicgKwotICAnICAgIHRleENvb3Jk
ID0gdGV4Q29vcmQwO1xuJyArCi0gICd9XG4nOwordmFyIHNpbXBsZVRleHR1cmVWZXJ0ZXhTaGFk
ZXIgPSBbCisgICdhdHRyaWJ1dGUgdmVjNCB2UG9zaXRpb247JywKKyAgJ2F0dHJpYnV0ZSB2ZWMy
IHRleENvb3JkMDsnLAorICAndmFyeWluZyB2ZWMyIHRleENvb3JkOycsCisgICd2b2lkIG1haW4o
KSB7JywKKyAgJyAgICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsnLAorICAnICAgIHRleENvb3Jk
ID0gdGV4Q29vcmQwOycsCisgICd9J10uam9pbignXG4nKTsKIAogLyoqCiAgKiBBIGZyYWdtZW50
IHNoYWRlciBmb3IgYSBzaW5nbGUgdGV4dHVyZS4KICAqIEB0eXBlIHtzdHJpbmd9CiAgKi8KLXZh
ciBzaW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXIgPSAnJyArCi0gICcjaWZkZWYgR0xfRVNcbicg
KwotICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4nICsKLSAgJyNlbmRpZlxuJyArCi0gICd1
bmlmb3JtIHNhbXBsZXIyRCB0ZXg7XG4nICsKLSAgJ3ZhcnlpbmcgdmVjMiB0ZXhDb29yZDtcbicg
KwotICAndm9pZCBtYWluKCkge1xuJyArCi0gICcgICAgZ2xfRnJhZ0RhdGFbMF0gPSB0ZXh0dXJl
MkQodGV4LCB0ZXhDb29yZCk7XG4nICsKLSAgJ31cbic7Cit2YXIgc2ltcGxlVGV4dHVyZUZyYWdt
ZW50U2hhZGVyID0gWworICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JywKKyAgJ3VuaWZvcm0g
c2FtcGxlcjJEIHRleDsnLAorICAndmFyeWluZyB2ZWMyIHRleENvb3JkOycsCisgICd2b2lkIG1h
aW4oKSB7JywKKyAgJyAgICBnbF9GcmFnRGF0YVswXSA9IHRleHR1cmUyRCh0ZXgsIHRleENvb3Jk
KTsnLAorICAnfSddLmpvaW4oJ1xuJyk7CiAKIC8qKgogICogQ3JlYXRlcyBhIHNpbXBsZSB0ZXh0
dXJlIHZlcnRleCBzaGFkZXIuCkBAIC0yNTEsNiArMjQ5LDcwIEBAIHZhciBzZXR1cFRleHR1cmVk
UXVhZCA9IGZ1bmN0aW9uKAogfTsKIAogLyoqCisgKiBDcmVhdGVzIGEgdW5pdCBxdWFkIHdpdGgg
b25seSBwb3NpdGlvbnMgb2YgYSBnaXZlbiByZXoKKyAqIEBwYXJhbSB7IVdlYkdMQ29udGV4dH0g
Z2wgVGhlIFdlYkdMQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0gZ3JpZFJleiBU
aGUgcmVzb2x1dGlvbiBvZiB0aGUgbWVzaCBncmlkLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9w
b3NpdGlvbkxvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHBvc2l0aW9uLgorICovCit2
YXIgc2V0dXBRdWFkID0gZnVuY3Rpb24gKAorICAgIGdsLCBncmlkUmVzLCBvcHRfcG9zaXRpb25M
b2NhdGlvbiwgb3B0X2ZsaXBPZGRUcmlhbmdsZXMpIHsKKyAgdmFyIHBvc2l0aW9uTG9jYXRpb24g
PSBvcHRfcG9zaXRpb25Mb2NhdGlvbiB8fCAwOworICB2YXIgb2JqZWN0cyA9IFtdOworCisgIHZh
ciB2ZXJ0c0Fjcm9zcyA9IGdyaWRSZXMgKyAxOworICB2YXIgbnVtVmVydHMgPSB2ZXJ0c0Fjcm9z
cyAqIHZlcnRzQWNyb3NzOworICB2YXIgcG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheShudW1W
ZXJ0cyAqIDMpOworICB2YXIgaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSg2ICogZ3JpZFJlcyAq
IGdyaWRSZXMpOworCisgIHZhciBwb2Zmc2V0ID0gMDsKKworICBmb3IgKHZhciB5eSA9IDA7IHl5
IDw9IGdyaWRSZXM7ICsreXkpIHsKKyAgICBmb3IgKHZhciB4eCA9IDA7IHh4IDw9IGdyaWRSZXM7
ICsreHgpIHsKKyAgICAgIHBvc2l0aW9uc1twb2Zmc2V0ICsgMF0gPSAtMSArIDIgKiB4eCAvIGdy
aWRSZXM7CisgICAgICBwb3NpdGlvbnNbcG9mZnNldCArIDFdID0gLTEgKyAyICogeXkgLyBncmlk
UmVzOworICAgICAgcG9zaXRpb25zW3BvZmZzZXQgKyAyXSA9IDA7CisKKyAgICAgIHBvZmZzZXQg
Kz0gMzsKKyAgICB9CisgIH0KKworICB2YXIgdGJhc2UgPSAwOworICBmb3IgKHZhciB5eSA9IDA7
IHl5IDwgZ3JpZFJlczsgKyt5eSkgeworICAgIHZhciBpbmRleCA9IHl5ICogdmVydHNBY3Jvc3M7
CisgICAgZm9yICh2YXIgeHggPSAwOyB4eCA8IGdyaWRSZXM7ICsreHgpIHsKKyAgICAgIGluZGlj
ZXNbdGJhc2UgKyAwXSA9IGluZGV4ICsgMDsKKyAgICAgIGluZGljZXNbdGJhc2UgKyAxXSA9IGlu
ZGV4ICsgMTsKKyAgICAgIGluZGljZXNbdGJhc2UgKyAyXSA9IGluZGV4ICsgdmVydHNBY3Jvc3M7
CisgICAgICBpbmRpY2VzW3RiYXNlICsgM10gPSBpbmRleCArIHZlcnRzQWNyb3NzOworICAgICAg
aW5kaWNlc1t0YmFzZSArIDRdID0gaW5kZXggKyAxOworICAgICAgaW5kaWNlc1t0YmFzZSArIDVd
ID0gaW5kZXggKyB2ZXJ0c0Fjcm9zcyArIDE7CisKKyAgICAgIGlmIChvcHRfZmxpcE9kZFRyaWFu
Z2xlcykgeworICAgICAgICBpbmRpY2VzW3RiYXNlICsgNF0gPSBpbmRleCArIHZlcnRzQWNyb3Nz
ICsgMTsKKyAgICAgICAgaW5kaWNlc1t0YmFzZSArIDVdID0gaW5kZXggKyAxOworICAgICAgfQor
CisgICAgICBpbmRleCArPSAxOworICAgICAgdGJhc2UgKz0gNjsKKyAgICB9CisgIH0KKworICB2
YXIgYnVmID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVG
RkVSLCBidWYpOworICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgcG9zaXRpb25zLCBn
bC5TVEFUSUNfRFJBVyk7CisgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHBvc2l0aW9uTG9j
YXRpb24pOworICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHBvc2l0aW9uTG9jYXRpb24sIDMsIGds
LkZMT0FULCBmYWxzZSwgMCwgMCk7CisgIG9iamVjdHMucHVzaChidWYpOworCisgIHZhciBidWYg
PSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JV
RkZFUiwgYnVmKTsKKyAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgaW5k
aWNlcywgZ2wuU1RBVElDX0RSQVcpOworICBvYmplY3RzLnB1c2goYnVmKTsKKworICByZXR1cm4g
b2JqZWN0czsKK307CisKKy8qKgogICogRmlsbHMgdGhlIGdpdmVuIHRleHR1cmUgd2l0aCBhIHNv
bGlkIGNvbG9yCiAgKiBAcGFyYW0geyFXZWJHTENvbnRleHR9IGdsIFRoZSBXZWJHTENvbnRleHQg
dG8gdXNlLgogICogQHBhcmFtIHshV2ViR0xUZXh0dXJlfSB0ZXggVGhlIHRleHR1cmUgdG8gZmls
bC4KQEAgLTMzNyw3ICszOTksOCBAQCB2YXIgY2hlY2tDYW52YXNSZWN0ID0gZnVuY3Rpb24oZ2ws
IHgsIHksCiAgICAgICAgIGZvciAoaiA9IDE7IGogPCBjb2xvci5sZW5ndGg7ICsraikgewogICAg
ICAgICAgIHdhcyArPSAiLCIgKyBidWZbb2Zmc2V0ICsgal07CiAgICAgICAgIH0KLSAgICAgICAg
ZGVidWcoJ2V4cGVjdGVkOiAnICsgY29sb3IgKyAnIHdhcyAnICsgd2FzKTsKKyAgICAgICAgZGVi
dWcoJ2F0ICgnICsgKGkgJSB3aWR0aCkgKyAnLCAnICsgTWF0aC5mbG9vcihpIC8gd2lkdGgpICsK
KyAgICAgICAgICAgICAgJykgZXhwZWN0ZWQ6ICcgKyBjb2xvciArICcgd2FzICcgKyB3YXMpOwog
ICAgICAgICByZXR1cm47CiAgICAgICB9CiAgICAgfQpAQCAtNTEzLDggKzU3Niw5IEBAIHZhciBn
bEVycm9yU2hvdWxkQmUgPSBmdW5jdGlvbihnbCwgZ2xFcnIKICAqIExpbmtzIGEgV2ViR0wgcHJv
Z3JhbSwgdGhyb3dzIGlmIHRoZXJlIGFyZSBlcnJvcnMuCiAgKiBAcGFyYW0geyFXZWJHTENvbnRl
eHR9IGdsIFRoZSBXZWJHTENvbnRleHQgdG8gdXNlLgogICogQHBhcmFtIHshV2ViR0xQcm9ncmFt
fSBwcm9ncmFtIFRoZSBXZWJHTFByb2dyYW0gdG8gbGluay4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24o
c3RyaW5nKTogdm9pZCkgb3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJhY2sgZm9yIGVycm9ycy4gCiAg
Ki8KLXZhciBsaW5rUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKSB7Cit2YXIgbGlua1By
b2dyYW0gPSBmdW5jdGlvbihnbCwgcHJvZ3JhbSwgb3B0X2Vycm9yQ2FsbGJhY2spIHsKICAgLy8g
TGluayB0aGUgcHJvZ3JhbQogICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTsKIApAQCAtNTI3LDgg
KzU5MSw2IEBAIHZhciBsaW5rUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKSAKICAgICB0
ZXN0RmFpbGVkKCJFcnJvciBpbiBwcm9ncmFtIGxpbmtpbmc6IiArIGVycm9yKTsKIAogICAgIGds
LmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci0gICAgZ2wuZGVsZXRlUHJvZ3JhbShmcmFnbWVudFNo
YWRlcik7Ci0gICAgZ2wuZGVsZXRlUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXIpOwogICB9CiB9OwogCkBA
IC01OTIsNiArNjU0LDE0OCBAQCB2YXIgc2V0dXBXZWJHTFdpdGhTaGFkZXJzID0gZnVuY3Rpb24o
CiB9OwogCiAvKioKKyAqIExvYWRzIHRleHQgZnJvbSBhbiBleHRlcm5hbCBmaWxlLiBUaGlzIGZ1
bmN0aW9uIGlzIHN5bmNocm9ub3VzLgorICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgdXJsIG9m
IHRoZSBleHRlcm5hbCBmaWxlLgorICogQHBhcmFtIHshZnVuY3Rpb24oYm9vbCwgc3RyaW5nKTog
dm9pZH0gY2FsbGJhY2sgdGhhdCBpcyBzZW50IGEgYm9vbCBmb3IKKyAqICAgICBzdWNjZXNzIGFu
ZCB0aGUgc3RyaW5nLgorICovCit2YXIgbG9hZFRleHRGaWxlQXN5bmMgPSBmdW5jdGlvbih1cmws
IGNhbGxiYWNrKSB7CisgIGxvZyAoImxvYWRpbmc6ICIgKyB1cmwpOworICB2YXIgZXJyb3IgPSAn
bG9hZFRleHRGaWxlU3luY2hyb25vdXMgZmFpbGVkIHRvIGxvYWQgdXJsICInICsgdXJsICsgJyIn
OworICB2YXIgcmVxdWVzdDsKKyAgaWYgKHdpbmRvdy5YTUxIdHRwUmVxdWVzdCkgeworICAgIHJl
cXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICBpZiAocmVxdWVzdC5vdmVycmlkZU1p
bWVUeXBlKSB7CisgICAgICByZXF1ZXN0Lm92ZXJyaWRlTWltZVR5cGUoJ3RleHQvcGxhaW4nKTsK
KyAgICB9CisgIH0gZWxzZSB7CisgICAgdGhyb3cgJ1hNTEh0dHBSZXF1ZXN0IGlzIGRpc2FibGVk
JzsKKyAgfQorICB0cnkgeworICAgIHJlcXVlc3Qub3BlbignR0VUJywgdXJsLCB0cnVlKTsKKyAg
ICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKHJl
cXVlc3QucmVhZHlTdGF0ZSA9PSA0KSB7CisgICAgICAgIHZhciB0ZXh0ID0gJyc7CisgICAgICAg
IC8vIEhUVFAgcmVwb3J0cyBzdWNjZXNzIHdpdGggYSAyMDAgc3RhdHVzLiBUaGUgZmlsZSBwcm90
b2NvbCByZXBvcnRzCisgICAgICAgIC8vIHN1Y2Nlc3Mgd2l0aCB6ZXJvLiBIVFRQIGRvZXMgbm90
IHVzZSB6ZXJvIGFzIGEgc3RhdHVzIGNvZGUgKHRoZXkKKyAgICAgICAgLy8gc3RhcnQgYXQgMTAw
KS4KKyAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1M
SHR0cFJlcXVlc3QKKyAgICAgICAgdmFyIHN1Y2Nlc3MgPSByZXF1ZXN0LnN0YXR1cyA9PSAyMDAg
fHwgcmVxdWVzdC5zdGF0dXMgPT0gMDsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAg
ICB0ZXh0ID0gcmVxdWVzdC5yZXNwb25zZVRleHQ7CisgICAgICAgIH0KKyAgICAgICAgbG9nKCJs
b2FkZWQ6ICIgKyB1cmwpOworICAgICAgICBjYWxsYmFjayhzdWNjZXNzLCB0ZXh0KTsKKyAgICAg
IH0KKyAgICB9OworICAgIHJlcXVlc3Quc2VuZChudWxsKTsKKyAgfSBjYXRjaCAoZSkgeworICAg
IGxvZygiZmFpbGVkIHRvIGxvYWQ6ICIgKyB1cmwpOworICAgIGNhbGxiYWNrKGZhbHNlLCAnJyk7
CisgIH0KK307CisKKy8qKgorICogUmVjdXJzaXZlbHkgbG9hZHMgYSBmaWxlIGFzIGEgbGlzdC4g
RWFjaCBsaW5lIGlzIHBhcnNlZCBmb3IgYSByZWxhdGl2ZQorICogcGF0aC4gSWYgdGhlIGZpbGUg
ZW5kcyBpbiAudHh0IHRoZSBjb250ZW50cyBvZiB0aGF0IGZpbGUgaXMgaW5zZXJ0ZWQgaW4KKyAq
IHRoZSBsaXN0LgorICoKKyAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0aGUgZXh0
ZXJuYWwgZmlsZS4KKyAqIEBwYXJhbSB7IWZ1bmN0aW9uKGJvb2wsIEFycmF5PHN0cmluZz4pOiB2
b2lkfSBjYWxsYmFjayB0aGF0IGlzIHNlbnQgYSBib29sCisgKiAgICAgZm9yIHN1Y2Nlc3MgYW5k
IHRoZSBhcnJheSBvZiBzdHJpbmdzLgorICovCit2YXIgZ2V0RmlsZUxpc3RBc3luYyA9IGZ1bmN0
aW9uKHVybCwgY2FsbGJhY2spIHsKKyAgdmFyIGZpbGVzID0gW107CisKKyAgdmFyIGdldEZpbGVM
aXN0SW1wbCA9IGZ1bmN0aW9uKHVybCwgY2FsbGJhY2spIHsKKyAgICB2YXIgZmlsZXMgPSBbXTsK
KyAgICBpZiAodXJsLnN1YnN0cih1cmwubGVuZ3RoIC0gNCkgPT0gJy50eHQnKSB7CisgICAgICBs
b2FkVGV4dEZpbGVBc3luYyh1cmwsIGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gZnVuY3Rp
b24oc3VjY2VzcywgdGV4dCkgeworICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAg
ICAgY2FsbGJhY2soZmFsc2UsICcnKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICB9
CisgICAgICAgICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgnXG4nKTsKKyAgICAgICAgICB2YXIg
cHJlZml4ID0gJyc7CisgICAgICAgICAgdmFyIGxhc3RTbGFzaCA9IHVybC5sYXN0SW5kZXhPZign
LycpOworICAgICAgICAgIGlmIChsYXN0U2xhc2ggPj0gMCkgeworICAgICAgICAgICAgcHJlZml4
ID0gdXJsLnN1YnN0cigwLCBsYXN0U2xhc2ggKyAxKTsKKyAgICAgICAgICB9CisgICAgICAgICAg
dmFyIGZhaWwgPSBmYWxzZTsKKyAgICAgICAgICB2YXIgY291bnQgPSAxOworICAgICAgICAgIHZh
ciBpbmRleCA9IDA7CisgICAgICAgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGxpbmVzLmxlbmd0
aDsgKytpaSkgeworICAgICAgICAgICAgdmFyIHN0ciA9IGxpbmVzW2lpXS5yZXBsYWNlKC9eXHNc
cyovLCAnJykucmVwbGFjZSgvXHNccyokLywgJycpOworICAgICAgICAgICAgaWYgKHN0ci5sZW5n
dGggPiA0ICYmCisgICAgICAgICAgICAgICAgc3RyWzBdICE9ICcjJyAmJgorICAgICAgICAgICAg
ICAgIHN0clswXSAhPSAiOyIgJiYKKyAgICAgICAgICAgICAgICBzdHIuc3Vic3RyKDAsIDIpICE9
ICIvLyIpIHsKKyAgICAgICAgICAgICAgdmFyIG5hbWVzID0gc3RyLnNwbGl0KC8gKy8pOworICAg
ICAgICAgICAgICBuZXdfdXJsID0gcHJlZml4ICsgc3RyOworICAgICAgICAgICAgICBpZiAobmFt
ZXMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgICAgICBuZXdfdXJsID0gcHJlZml4ICsgc3Ry
OworICAgICAgICAgICAgICAgICsrY291bnQ7CisgICAgICAgICAgICAgICAgZ2V0RmlsZUxpc3RJ
bXBsKG5ld191cmwsIGZ1bmN0aW9uKGluZGV4KSB7CisgICAgICAgICAgICAgICAgICByZXR1cm4g
ZnVuY3Rpb24oc3VjY2VzcywgbmV3X2ZpbGVzKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZygi
Z290IGZpbGVzOiAiICsgbmV3X2ZpbGVzLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgICAgICAgZmlsZXNbaW5kZXhdID0gbmV3X2Zp
bGVzOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZpbmlzaChz
dWNjZXNzKTsKKyAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfShpbmRleCsr
KSk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIHMgPSAiIjsK
KyAgICAgICAgICAgICAgICB2YXIgcCA9ICIiOworICAgICAgICAgICAgICAgIGZvciAodmFyIGpq
ID0gMDsgamogPCBuYW1lcy5sZW5ndGg7ICsramopIHsKKyAgICAgICAgICAgICAgICAgIHMgKz0g
cCArIHByZWZpeCArIG5hbWVzW2pqXTsKKyAgICAgICAgICAgICAgICAgIHAgPSAiICI7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZpbGVzW2luZGV4KytdID0gczsKKyAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBmaW5pc2go
dHJ1ZSk7CisKKyAgICAgICAgICBmdW5jdGlvbiBmaW5pc2goc3VjY2VzcykgeworICAgICAgICAg
ICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgIGZhaWwgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLS1jb3VudDsKKyAgICAgICAgICAgIGxvZygiY291bnQ6ICIgKyBj
b3VudCk7CisgICAgICAgICAgICBpZiAoIWNvdW50KSB7CisgICAgICAgICAgICAgIGNhbGxiYWNr
KCFmYWlsLCBmaWxlcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICB9KCkpOworCisgICAgfSBlbHNlIHsKKyAgICAgIGZpbGVzLnB1c2godXJsKTsKKyAgICAg
IGNhbGxiYWNrKHRydWUsIGZpbGVzKTsKKyAgICB9CisgIH07CisKKyAgZ2V0RmlsZUxpc3RJbXBs
KHVybCwgZnVuY3Rpb24oc3VjY2VzcywgZmlsZXMpIHsKKyAgICAvLyBmbGF0dGVuCisgICAgdmFy
IGZsYXQgPSBbXTsKKyAgICBmbGF0dGVuKGZpbGVzKTsKKyAgICBmdW5jdGlvbiBmbGF0dGVuKGZp
bGVzKSB7CisgICAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgZmlsZXMubGVuZ3RoOyArK2lpKSB7
CisgICAgICAgIHZhciB2YWx1ZSA9IGZpbGVzW2lpXTsKKyAgICAgICAgaWYgKHR5cGVvZih2YWx1
ZSkgPT0gInN0cmluZyIpIHsKKyAgICAgICAgICBmbGF0LnB1c2godmFsdWUpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgIGZsYXR0ZW4odmFsdWUpOworICAgICAgICB9CisgICAgICB9Cisg
ICAgfQorICAgIGNhbGxiYWNrKHN1Y2Nlc3MsIGZsYXQpOworICB9KTsKK307CisKKy8qKgogICog
R2V0cyBhIGZpbGUgZnJvbSBhIGZpbGUvVVJMCiAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZSB0aGUg
VVJMIG9mIHRoZSBmaWxlIHRvIGdldC4KICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNvbnRlbnRz
IG9mIHRoZSBmaWxlLgpAQCAtNjAzLDEwICs4MDcsNiBAQCB2YXIgcmVhZEZpbGUgPSBmdW5jdGlv
bihmaWxlKSB7CiAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0LnJlcGxhY2UoL1xyL2csICIiKTsK
IH07CiAKLS8qKgotICogR2V0cyBhIGZpbGUgZnJvbSBhIFVSTCBhbmQgcGFyc2VzIGl0IGZvciBm
aWxlbmFtZXMuIElGIGEgZmlsZSBuYW1lIGVuZHMKLSAqIGluIC50eHQgcmVjdXJzaXZlbHkgcmVh
ZHMgdGhhdCBmaWxlIGFuZCBhZGRzIGl0IHRvIHRoZSBsaXN0LgotICovCiB2YXIgcmVhZEZpbGVM
aXN0ID0gZnVuY3Rpb24odXJsKSB7CiAgIHZhciBmaWxlcyA9IFtdOwogICBpZiAodXJsLnN1YnN0
cih1cmwubGVuZ3RoIC0gNCkgPT0gJy50eHQnKSB7CkBAIC02NDcsMTQgKzg0NywxNiBAQCB2YXIg
cmVhZEZpbGVMaXN0ID0gZnVuY3Rpb24odXJsKSB7CiAgKiBMb2FkcyBhIHNoYWRlci4KICAqIEBw
YXJhbSB7IVdlYkdMQ29udGV4dH0gZ2wgVGhlIFdlYkdMQ29udGV4dCB0byB1c2UuCiAgKiBAcGFy
YW0ge3N0cmluZ30gc2hhZGVyU291cmNlIFRoZSBzaGFkZXIgc291cmNlLgotICogQHBhcmFtIHtu
dW1iZXJ9IHNoYWRlclR5cGUgVGhlIHR5cGUgb2Ygc2hhZGVyLgorICogQHBhcmFtIHtudW1iZXJ9
IHNoYWRlclR5cGUgVGhlIHR5cGUgb2Ygc2hhZGVyLiAKKyAqIEBwYXJhbSB7ZnVuY3Rpb24oc3Ry
aW5nKTogdm9pZCkgb3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJhY2sgZm9yIGVycm9ycy4gCiAgKiBA
cmV0dXJuIHshV2ViR0xTaGFkZXJ9IFRoZSBjcmVhdGVkIHNoYWRlci4KICAqLwotdmFyIGxvYWRT
aGFkZXIgPSBmdW5jdGlvbihnbCwgc2hhZGVyU291cmNlLCBzaGFkZXJUeXBlKSB7Cit2YXIgbG9h
ZFNoYWRlciA9IGZ1bmN0aW9uKGdsLCBzaGFkZXJTb3VyY2UsIHNoYWRlclR5cGUsIG9wdF9lcnJv
ckNhbGxiYWNrKSB7CisgIHZhciBlcnJGbiA9IG9wdF9lcnJvckNhbGxiYWNrIHx8IGVycm9yOwog
ICAvLyBDcmVhdGUgdGhlIHNoYWRlciBvYmplY3QKICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNo
YWRlcihzaGFkZXJUeXBlKTsKICAgaWYgKHNoYWRlciA9PSBudWxsKSB7Ci0gICAgZXJyb3IoIioq
KiBFcnJvcjogdW5hYmxlIHRvIGNyZWF0ZSBzaGFkZXIgJyIrc2hhZGVyU291cmNlKyInIik7Cisg
ICAgZXJyRm4oIioqKiBFcnJvcjogdW5hYmxlIHRvIGNyZWF0ZSBzaGFkZXIgJyIrc2hhZGVyU291
cmNlKyInIik7CiAgICAgcmV0dXJuIG51bGw7CiAgIH0KIApAQCAtNjYyLDcgKzg2NCw3IEBAIHZh
ciBsb2FkU2hhZGVyID0gZnVuY3Rpb24oZ2wsIHNoYWRlclNvdXIKICAgZ2wuc2hhZGVyU291cmNl
KHNoYWRlciwgc2hhZGVyU291cmNlKTsKICAgdmFyIGVyciA9IGdsLmdldEVycm9yKCk7CiAgIGlm
IChlcnIgIT0gZ2wuTk9fRVJST1IpIHsKLSAgICBlcnJvcigiKioqIEVycm9yIGxvYWRpbmcgc2hh
ZGVyICciICsgc2hhZGVyICsgIic6IiArIGdsRW51bVRvU3RyaW5nKGdsLCBlcnIpKTsKKyAgICBl
cnJGbigiKioqIEVycm9yIGxvYWRpbmcgc2hhZGVyICciICsgc2hhZGVyICsgIic6IiArIGdsRW51
bVRvU3RyaW5nKGdsLCBlcnIpKTsKICAgICByZXR1cm4gbnVsbDsKICAgfQogCkBAIC02NzQsNyAr
ODc2LDcgQEAgdmFyIGxvYWRTaGFkZXIgPSBmdW5jdGlvbihnbCwgc2hhZGVyU291cgogICBpZiAo
IWNvbXBpbGVkKSB7CiAgICAgLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgZHVyaW5nIGNvbXBpbGF0
aW9uOyBnZXQgdGhlIGVycm9yCiAgICAgbGFzdEVycm9yID0gZ2wuZ2V0U2hhZGVySW5mb0xvZyhz
aGFkZXIpOwotICAgIGVycm9yKCIqKiogRXJyb3IgY29tcGlsaW5nIHNoYWRlciAnIiArIHNoYWRl
ciArICInOiIgKyBsYXN0RXJyb3IpOworICAgIGVyckZuKCIqKiogRXJyb3IgY29tcGlsaW5nIHNo
YWRlciAnIiArIHNoYWRlciArICInOiIgKyBsYXN0RXJyb3IpOwogICAgIGdsLmRlbGV0ZVNoYWRl
cihzaGFkZXIpOwogICAgIHJldHVybiBudWxsOwogICB9CkBAIC02ODcsMTEgKzg4OSwxMiBAQCB2
YXIgbG9hZFNoYWRlciA9IGZ1bmN0aW9uKGdsLCBzaGFkZXJTb3VyCiAgKiBAcGFyYW0geyFXZWJH
TENvbnRleHR9IGdsIFRoZSBXZWJHTENvbnRleHQgdG8gdXNlLgogICogQHBhcmFtIHtmaWxlfSBm
aWxlIFRoZSBVUkwgb2YgdGhlIHNoYWRlciBzb3VyY2UuCiAgKiBAcGFyYW0ge251bWJlcn0gdHlw
ZSBUaGUgdHlwZSBvZiBzaGFkZXIuCisgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZyk6IHZvaWQp
IG9wdF9lcnJvckNhbGxiYWNrIGNhbGxiYWNrIGZvciBlcnJvcnMuIAogICogQHJldHVybiB7IVdl
YkdMU2hhZGVyfSBUaGUgY3JlYXRlZCBzaGFkZXIuCiAgKi8KLXZhciBsb2FkU2hhZGVyRnJvbUZp
bGUgPSBmdW5jdGlvbihnbCwgZmlsZSwgdHlwZSkgewordmFyIGxvYWRTaGFkZXJGcm9tRmlsZSA9
IGZ1bmN0aW9uKGdsLCBmaWxlLCB0eXBlLCBvcHRfZXJyb3JDYWxsYmFjaykgewogICB2YXIgc2hh
ZGVyU291cmNlID0gcmVhZEZpbGUoZmlsZSk7Ci0gIHJldHVybiBsb2FkU2hhZGVyKGdsLCBzaGFk
ZXJTb3VyY2UsIHR5cGUpOworICByZXR1cm4gbG9hZFNoYWRlcihnbCwgc2hhZGVyU291cmNlLCB0
eXBlLCBvcHRfZXJyb3JDYWxsYmFjayk7CiB9OwogCiAvKioKQEAgLTcwMCw5ICs5MDMsMTEgQEAg
dmFyIGxvYWRTaGFkZXJGcm9tRmlsZSA9IGZ1bmN0aW9uKGdsLCBmaQogICogQHBhcmFtIHtzdHJp
bmd9IHNjcmlwdElkIFRoZSBpZCBvZiB0aGUgc2NyaXB0IHRhZy4KICAqIEBwYXJhbSB7bnVtYmVy
fSBvcHRfc2hhZGVyVHlwZSBUaGUgdHlwZSBvZiBzaGFkZXIuIElmIG5vdCBwYXNzZWQgaW4gaXQg
d2lsbAogICogICAgIGJlIGRlcml2ZWQgZnJvbSB0aGUgdHlwZSBvZiB0aGUgc2NyaXB0IHRhZy4K
KyAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nKTogdm9pZCkgb3B0X2Vycm9yQ2FsbGJhY2sgY2Fs
bGJhY2sgZm9yIGVycm9ycy4gCiAgKiBAcmV0dXJuIHshV2ViR0xTaGFkZXJ9IFRoZSBjcmVhdGVk
IHNoYWRlci4KICAqLwotdmFyIGxvYWRTaGFkZXJGcm9tU2NyaXB0ID0gZnVuY3Rpb24oZ2wsIHNj
cmlwdElkLCBvcHRfc2hhZGVyVHlwZSkgewordmFyIGxvYWRTaGFkZXJGcm9tU2NyaXB0ID0gZnVu
Y3Rpb24oCisgICAgZ2wsIHNjcmlwdElkLCBvcHRfc2hhZGVyVHlwZSwgb3B0X2Vycm9yQ2FsbGJh
Y2spIHsKICAgdmFyIHNoYWRlclNvdXJjZSA9ICIiOwogICB2YXIgc2hhZGVyVHlwZTsKICAgdmFy
IHNoYWRlclNjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNjcmlwdElkKTsKQEAgLTcy
Myw3ICs5MjgsOCBAQCB2YXIgbG9hZFNoYWRlckZyb21TY3JpcHQgPSBmdW5jdGlvbihnbCwgCiAg
IH0KIAogICByZXR1cm4gbG9hZFNoYWRlcigKLSAgICAgIGdsLCBzaGFkZXJTb3VyY2UsIG9wdF9z
aGFkZXJUeXBlID8gb3B0X3NoYWRlclR5cGUgOiBzaGFkZXJUeXBlKTsKKyAgICAgIGdsLCBzaGFk
ZXJTb3VyY2UsIG9wdF9zaGFkZXJUeXBlID8gb3B0X3NoYWRlclR5cGUgOiBzaGFkZXJUeXBlLAor
ICAgICAgb3B0X2Vycm9yQ2FsbGJhY2spOwogfTsKIAogdmFyIGxvYWRTdGFuZGFyZFByb2dyYW0g
PSBmdW5jdGlvbihnbCkgewpAQCAtNzM5LDE3ICs5NDUsMjEgQEAgdmFyIGxvYWRTdGFuZGFyZFBy
b2dyYW0gPSBmdW5jdGlvbihnbCkgewogICogQHBhcmFtIHshV2ViR0xDb250ZXh0fSBnbCBUaGUg
V2ViR0xDb250ZXh0IHRvIHVzZS4KICAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJ0ZXhTaGFkZXJQYXRo
IFRoZSBVUkwgb2YgdGhlIHZlcnRleCBzaGFkZXIuCiAgKiBAcGFyYW0ge3N0cmluZ30gZnJhZ21l
bnRTaGFkZXJQYXRoIFRoZSBVUkwgb2YgdGhlIGZyYWdtZW50IHNoYWRlci4KKyAqIEBwYXJhbSB7
ZnVuY3Rpb24oc3RyaW5nKTogdm9pZCkgb3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJhY2sgZm9yIGVy
cm9ycy4gCiAgKiBAcmV0dXJuIHshV2ViR0xQcm9ncmFtfSBUaGUgY3JlYXRlZCBwcm9ncmFtLgog
ICovCi12YXIgbG9hZFByb2dyYW1Gcm9tRmlsZSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTaGFkZXJQ
YXRoLCBmcmFnbWVudFNoYWRlclBhdGgpIHsKK3ZhciBsb2FkUHJvZ3JhbUZyb21GaWxlID0gZnVu
Y3Rpb24oCisgICAgZ2wsIHZlcnRleFNoYWRlclBhdGgsIGZyYWdtZW50U2hhZGVyUGF0aCwgb3B0
X2Vycm9yQ2FsbGJhY2spIHsKICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7CiAg
IGdsLmF0dGFjaFNoYWRlcigKICAgICAgIHByb2dyYW0sCi0gICAgICBsb2FkU2hhZGVyRnJvbUZp
bGUoZ2wsIHZlcnRleFNoYWRlclBhdGgsIGdsLlZFUlRFWF9TSEFERVIpKTsKKyAgICAgIGxvYWRT
aGFkZXJGcm9tRmlsZSgKKyAgICAgICAgICBnbCwgdmVydGV4U2hhZGVyUGF0aCwgZ2wuVkVSVEVY
X1NIQURFUiwgb3B0X2Vycm9yQ2FsbGJhY2spKTsKICAgZ2wuYXR0YWNoU2hhZGVyKAogICAgICAg
cHJvZ3JhbSwKLSAgICAgIGxvYWRTaGFkZXJGcm9tRmlsZShnbCwgZnJhZ21lbnRTaGFkZXJQYXRo
LCBnbC5GUkFHTUVOVF9TSEFERVIpKTsKLSAgbGlua1Byb2dyYW0oZ2wsIHByb2dyYW0pOworICAg
ICAgbG9hZFNoYWRlckZyb21GaWxlKAorICAgICAgICAgIGdsLCBmcmFnbWVudFNoYWRlclBhdGgs
IGdsLkZSQUdNRU5UX1NIQURFUiwgb3B0X2Vycm9yQ2FsbGJhY2spKTsKKyAgbGlua1Byb2dyYW0o
Z2wsIHByb2dyYW0sIG9wdF9lcnJvckNhbGxiYWNrKTsKICAgcmV0dXJuIHByb2dyYW07CiB9Owog
CkBAIC03NjEsNDkgKzk3MSw3MiBAQCB2YXIgbG9hZFByb2dyYW1Gcm9tRmlsZSA9IGZ1bmN0aW9u
KGdsLCB2CiAgKiAgICAgICAgdmVydGV4IHNoYWRlci4KICAqIEBwYXJhbSB7c3RyaW5nfSBmcmFn
bWVudFNjcmlwdElkIFRoZSBpZCBvZiB0aGUgc2NyaXB0IHRhZyB0aGF0IGNvbnRhaW5zIHRoZQog
ICogICAgICAgIGZyYWdtZW50IHNoYWRlci4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nKTog
dm9pZCkgb3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJhY2sgZm9yIGVycm9ycy4gCiAgKiBAcmV0dXJu
IHshV2ViR0xQcm9ncmFtfSBUaGUgY3JlYXRlZCBwcm9ncmFtLgogICovCiB2YXIgbG9hZFByb2dy
YW1Gcm9tU2NyaXB0ID0gZnVuY3Rpb24gbG9hZFByb2dyYW1Gcm9tU2NyaXB0KAotICBnbCwgdmVy
dGV4U2NyaXB0SWQsIGZyYWdtZW50U2NyaXB0SWQpIHsKKyAgICBnbCwgdmVydGV4U2NyaXB0SWQs
IGZyYWdtZW50U2NyaXB0SWQsIG9wdF9lcnJvckNhbGxiYWNrKSB7CiAgIHZhciBwcm9ncmFtID0g
Z2wuY3JlYXRlUHJvZ3JhbSgpOwogICBnbC5hdHRhY2hTaGFkZXIoCiAgICAgICBwcm9ncmFtLAot
ICAgICAgbG9hZFNoYWRlckZyb21TY3JpcHQoZ2wsIHZlcnRleFNjcmlwdElkLCBnbC5WRVJURVhf
U0hBREVSKSk7CisgICAgICBsb2FkU2hhZGVyRnJvbVNjcmlwdCgKKyAgICAgICAgICBnbCwgdmVy
dGV4U2NyaXB0SWQsIGdsLlZFUlRFWF9TSEFERVIsIG9wdF9lcnJvckNhbGxiYWNrKSk7CiAgIGds
LmF0dGFjaFNoYWRlcigKICAgICAgIHByb2dyYW0sCi0gICAgICBsb2FkU2hhZGVyRnJvbVNjcmlw
dChnbCwgZnJhZ21lbnRTY3JpcHRJZCwgIGdsLkZSQUdNRU5UX1NIQURFUikpOwotICBsaW5rUHJv
Z3JhbShnbCwgcHJvZ3JhbSk7CisgICAgICBsb2FkU2hhZGVyRnJvbVNjcmlwdCgKKyAgICAgICAg
ICBnbCwgZnJhZ21lbnRTY3JpcHRJZCwgIGdsLkZSQUdNRU5UX1NIQURFUiwgb3B0X2Vycm9yQ2Fs
bGJhY2spKTsKKyAgbGlua1Byb2dyYW0oZ2wsIHByb2dyYW0sIG9wdF9lcnJvckNhbGxiYWNrKTsK
ICAgcmV0dXJuIHByb2dyYW07CiB9OwogCiAvKioKLSAqIExvYWRzIHNoYWRlcnMgZnJvbSBzY3Jp
cHQgdGFncywgY3JlYXRlcyBhIHByb2dyYW0sIGF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZAorICog
TG9hZHMgc2hhZGVycyBmcm9tIHNvdXJjZSwgY3JlYXRlcyBhIHByb2dyYW0sIGF0dGFjaGVzIHRo
ZSBzaGFkZXJzIGFuZAogICogbGlua3MuCiAgKiBAcGFyYW0geyFXZWJHTENvbnRleHR9IGdsIFRo
ZSBXZWJHTENvbnRleHQgdG8gdXNlLgogICogQHBhcmFtIHtzdHJpbmd9IHZlcnRleFNoYWRlciBU
aGUgdmVydGV4IHNoYWRlci4KICAqIEBwYXJhbSB7c3RyaW5nfSBmcmFnbWVudFNoYWRlciBUaGUg
ZnJhZ21lbnQgc2hhZGVyLgorICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmcpOiB2b2lkKSBvcHRf
ZXJyb3JDYWxsYmFjayBjYWxsYmFjayBmb3IgZXJyb3JzLiAKICAqIEByZXR1cm4geyFXZWJHTFBy
b2dyYW19IFRoZSBjcmVhdGVkIHByb2dyYW0uCiAgKi8KLXZhciBsb2FkUHJvZ3JhbSA9IGZ1bmN0
aW9uKGdsLCB2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVyKSB7Cit2YXIgbG9hZFByb2dyYW0g
PSBmdW5jdGlvbigKKyAgICBnbCwgdmVydGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlciwgb3B0X2Vy
cm9yQ2FsbGJhY2spIHsKICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7CiAgIGds
LmF0dGFjaFNoYWRlcigKICAgICAgIHByb2dyYW0sCi0gICAgICBsb2FkU2hhZGVyKGdsLCB2ZXJ0
ZXhTaGFkZXIsIGdsLlZFUlRFWF9TSEFERVIpKTsKKyAgICAgIGxvYWRTaGFkZXIoCisgICAgICAg
ICAgZ2wsIHZlcnRleFNoYWRlciwgZ2wuVkVSVEVYX1NIQURFUiwgb3B0X2Vycm9yQ2FsbGJhY2sp
KTsKICAgZ2wuYXR0YWNoU2hhZGVyKAogICAgICAgcHJvZ3JhbSwKLSAgICAgIGxvYWRTaGFkZXIo
Z2wsIGZyYWdtZW50U2hhZGVyLCAgZ2wuRlJBR01FTlRfU0hBREVSKSk7Ci0gIGxpbmtQcm9ncmFt
KGdsLCBwcm9ncmFtKTsKKyAgICAgIGxvYWRTaGFkZXIoCisgICAgICAgICAgZ2wsIGZyYWdtZW50
U2hhZGVyLCBnbC5GUkFHTUVOVF9TSEFERVIsIG9wdF9lcnJvckNhbGxiYWNrKSk7CisgIGxpbmtQ
cm9ncmFtKGdsLCBwcm9ncmFtLCBvcHRfZXJyb3JDYWxsYmFjayk7CiAgIHJldHVybiBwcm9ncmFt
OwogfTsKIAordmFyIGJhc2VQYXRoOwordmFyIGdldEJhc2VQYXRoID0gZnVuY3Rpb24oKSB7Cisg
IGlmICghYmFzZVBhdGgpIHsKKyAgICB2YXIgZXhwZWN0ZWRCYXNlID0gIndlYmdsLXRlc3QtdXRp
bHMuanMiOworICAgIHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
J3NjcmlwdCcpOworICAgIGZvciAodmFyIHNjcmlwdCwgaSA9IDA7IHNjcmlwdCA9IHNjcmlwdHNb
aV07IGkrKykgeworICAgICAgdmFyIHNyYyA9IHNjcmlwdC5zcmM7CisgICAgICB2YXIgbCA9IHNy
Yy5sZW5ndGg7CisgICAgICBpZiAoc3JjLnN1YnN0cihsIC0gZXhwZWN0ZWRCYXNlLmxlbmd0aCkg
PT0gZXhwZWN0ZWRCYXNlKSB7CisgICAgICAgIGJhc2VQYXRoID0gc3JjLnN1YnN0cigwLCBsIC0g
ZXhwZWN0ZWRCYXNlLmxlbmd0aCk7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBiYXNl
UGF0aDsKK307CisKIHZhciBsb2FkU3RhbmRhcmRWZXJ0ZXhTaGFkZXIgPSBmdW5jdGlvbihnbCkg
ewogICByZXR1cm4gbG9hZFNoYWRlckZyb21GaWxlKAotICAgICAgZ2wsICJyZXNvdXJjZXMvdmVy
dGV4U2hhZGVyLnZlcnQiLCBnbC5WRVJURVhfU0hBREVSKTsKKyAgICAgIGdsLCBnZXRCYXNlUGF0
aCgpICsgInZlcnRleFNoYWRlci52ZXJ0IiwgZ2wuVkVSVEVYX1NIQURFUik7CiB9OwogCiB2YXIg
bG9hZFN0YW5kYXJkRnJhZ21lbnRTaGFkZXIgPSBmdW5jdGlvbihnbCkgewogICByZXR1cm4gbG9h
ZFNoYWRlckZyb21GaWxlKAotICAgICAgZ2wsICJyZXNvdXJjZXMvZnJhZ21lbnRTaGFkZXIuZnJh
ZyIsIGdsLkZSQUdNRU5UX1NIQURFUik7CisgICAgICBnbCwgZ2V0QmFzZVBhdGgoKSArICJmcmFn
bWVudFNoYWRlci5mcmFnIiwgZ2wuRlJBR01FTlRfU0hBREVSKTsKIH07CiAKIC8qKgpAQCAtODQ4
LDYgKzEwODEsMjkgQEAgdmFyIGxvYWRJbWFnZXNBc3luYyA9IGZ1bmN0aW9uKHVybHMsIGNhbAog
ICBjb3VudERvd24oKTsKIH07CiAKK3ZhciBnZXRVcmxBcmd1bWVudHMgPSBmdW5jdGlvbigpIHsK
KyAgdmFyIGFyZ3MgPSB7fTsKKyAgdHJ5IHsKKyAgICB2YXIgcyA9IHdpbmRvdy5sb2NhdGlvbi5o
cmVmOworICAgIHZhciBxID0gcy5pbmRleE9mKCI/Iik7CisgICAgdmFyIGUgPSBzLmluZGV4T2Yo
IiMiKTsKKyAgICBpZiAoZSA8IDApIHsKKyAgICAgIGUgPSBzLmxlbmd0aDsKKyAgICB9CisgICAg
dmFyIHF1ZXJ5ID0gcy5zdWJzdHJpbmcocSArIDEsIGUpOworICAgIHZhciBwYWlycyA9IHF1ZXJ5
LnNwbGl0KCImIik7CisgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHBhaXJzLmxlbmd0aDsgKytp
aSkgeworICAgICAgdmFyIGtleVZhbHVlID0gcGFpcnNbaWldLnNwbGl0KCI9Iik7CisgICAgICB2
YXIga2V5ID0ga2V5VmFsdWVbMF07CisgICAgICB2YXIgdmFsdWUgPSBkZWNvZGVVUklDb21wb25l
bnQoa2V5VmFsdWVbMV0pOworICAgICAgYXJnc1trZXldID0gdmFsdWU7CisgICAgfQorICB9IGNh
dGNoIChlKSB7CisgICAgdGhyb3cgImNvdWxkIG5vdCBwYXJzZSB1cmwiOworICB9CisgIHJldHVy
biBhcmdzOworfTsKKwogcmV0dXJuIHsKICAgY3JlYXRlM0RDb250ZXh0OiBjcmVhdGUzRENvbnRl
eHQsCiAgIGNyZWF0ZTNEQ29udGV4dFdpdGhXcmFwcGVyVGhhdFRocm93c09uR0xFcnJvcjoKQEAg
LTg1Nyw3ICsxMTEzLDkgQEAgcmV0dXJuIHsKICAgY3JlYXRlQ29sb3JlZFRleHR1cmU6IGNyZWF0
ZUNvbG9yZWRUZXh0dXJlLAogICBkcmF3UXVhZDogZHJhd1F1YWQsCiAgIGVuZHNXaXRoOiBlbmRz
V2l0aCwKKyAgZ2V0RmlsZUxpc3RBc3luYzogZ2V0RmlsZUxpc3RBc3luYywKICAgZ2V0TGFzdEVy
cm9yOiBnZXRMYXN0RXJyb3IsCisgIGdldFVybEFyZ3VtZW50czogZ2V0VXJsQXJndW1lbnRzLAog
ICBnbEVudW1Ub1N0cmluZzogZ2xFbnVtVG9TdHJpbmcsCiAgIGdsRXJyb3JTaG91bGRCZTogZ2xF
cnJvclNob3VsZEJlLAogICBmaWxsVGV4dHVyZTogZmlsbFRleHR1cmUsCkBAIC04NzIsMTEgKzEx
MzAsMTMgQEAgcmV0dXJuIHsKICAgbG9hZFN0YW5kYXJkUHJvZ3JhbTogbG9hZFN0YW5kYXJkUHJv
Z3JhbSwKICAgbG9hZFN0YW5kYXJkVmVydGV4U2hhZGVyOiBsb2FkU3RhbmRhcmRWZXJ0ZXhTaGFk
ZXIsCiAgIGxvYWRTdGFuZGFyZEZyYWdtZW50U2hhZGVyOiBsb2FkU3RhbmRhcmRGcmFnbWVudFNo
YWRlciwKKyAgbG9hZFRleHRGaWxlQXN5bmM6IGxvYWRUZXh0RmlsZUFzeW5jLAogICBsb2FkVGV4
dHVyZTogbG9hZFRleHR1cmUsCiAgIGxvZzogbG9nLAogICBsb2dnaW5nT2ZmOiBsb2dnaW5nT2Zm
LAogICBlcnJvcjogZXJyb3IsCiAgIHNldHVwUHJvZ3JhbTogc2V0dXBQcm9ncmFtLAorICBzZXR1
cFF1YWQ6IHNldHVwUXVhZCwKICAgc2V0dXBTaW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXI6IHNl
dHVwU2ltcGxlVGV4dHVyZUZyYWdtZW50U2hhZGVyLAogICBzZXR1cFNpbXBsZVRleHR1cmVQcm9n
cmFtOiBzZXR1cFNpbXBsZVRleHR1cmVQcm9ncmFtLAogICBzZXR1cFNpbXBsZVRleHR1cmVWZXJ0
ZXhTaGFkZXI6IHNldHVwU2ltcGxlVGV4dHVyZVZlcnRleFNoYWRlciwKSW5kZXg6IExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9Ta2lwcGVkCShyZXZpc2lvbiA5ODYzOCkKKysrIExheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC00NTMsMyArNDUzLDcgQEAgZmFzdC9jc3Mv
d2Via2l0LW1hc2stY3Jhc2gtdGFibGUuaHRtbAogCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03MTAzMgogdGFibGVzL21vemlsbGFfZXhwZWN0ZWRfZmFpbHVyZXMv
YnVncy9idWcxNDAwNy0yLmh0bWwKKworIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzA5ODkKK2Zhc3QvY2FudmFzL3dlYmdsL2F0dHJpYi1sb2NhdGlvbi1sZW5ndGgt
bGltaXRzLmh0bWwKK2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxp
bWl0cy5odG1sCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>