<?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>7604</bug_id>
          
          <creation_ts>2006-03-04 19:28:04 -0800</creation_ts>
          <short_desc>calcAbsoluteHorizontalValues() is being getting passed arguments in the wrong order in calcAbsoluteHorizontal()</short_desc>
          <delta_ts>2006-05-13 10:28:31 -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>Layout and Rendering</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>35106</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-03-04 19:28:04 -0800</bug_when>
    <thetext>In the function calcAbsoluteHorizontal() in render_box.cpp, the function call to calculate the horizontal values for the MaxWidth case:
calcAbsoluteHorizontalValues(MaxWidth, cb, cw, static_distance, pab, l, r, maxW, maxML, maxMR, maxX);

should read:
calcAbsoluteHorizontalValues(MaxWidth, cb, cw, pab, static_distance, l, r, maxW, maxML, maxMR, maxX);

(ie. flip the variables pab and static_distance)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35295</commentid>
    <comment_count>1</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-03-06 09:45:01 -0800</bug_when>
    <thetext>Now this is fun.  Upon closer inspection of the code, it seems to me that the static_distance variable is not even needed in calcAbsoluteHorizontalValues() as the case when it might be used (when left == AUTO &amp;&amp; width != AUTO &amp;&amp; right == AUTO ) is never used.  This is because in calcAbsoluteHorizontal(), if both left and right == AUTO, one is always set to the static distance before calcAbsoluteHorizontalValues() is called.

This, however, does not solve the problem of passing the wrong value for pab (which is the sum of the padding and borders), unless it can somehow be shown that it is always equal to the static distance, which I can&apos;t imagine is true.

The is no way around it, this code is in need of a good cleaning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36478</commentid>
    <comment_count>2</comment_count>
      <attachid>7094</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-03-15 11:53:10 -0800</bug_when>
    <thetext>Created attachment 7094
first attempt at cleanup

I am attaching a first go at a clean up of the absolute positioning code in RenderBox.  Among other things, it splits out the replaced element code-path to correspond with the separation in the css 2.1 spec, it gets rid of the use of a constant for AUTO, instead using the Length class, and generally cleans up the code by making variable names more clear, adding comments, and getting rid of dead code.  

As it is right now, the code has a lot of FIXME&apos;s left in it in places where I was unsure what the correct change should be.  I would appreciate any feedback on any of these.  If your not sure what I am talking about in the FIXME, please let me know and I will elaborate. 

The comments are also quite verbose as I have included the text of the spec completely.  I found having the text in the code very useful while coding it, but if it is too much, will remove it.  Additionally, I went a little &apos;const&apos; crazy, but found it useful in that the compiler would tell me if I was changing something I really wanted to be const.

Finally, although I said that this patch is just a first attempt, it does work.  By that I mean it compiles fine and causes no regressions.  I can&apos;t attest to preformance, but my assumption is that it should be a little faster, due to some straight forward optimizations made and the exclusion of deadcode paths.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37069</commentid>
    <comment_count>3</comment_count>
      <attachid>7194</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-03-20 13:27:40 -0800</bug_when>
    <thetext>Created attachment 7194
update patch

This updates the previous patch to work after darin&apos;s big rename.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37073</commentid>
    <comment_count>4</comment_count>
      <attachid>7197</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-03-20 13:55:31 -0800</bug_when>
    <thetext>Created attachment 7197
test case for bad &apos;auto&apos; value

Adding a test case which demonstrates what happens if some decides to use a length of &apos;-666666px&apos; on an absolutely positioned element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37550</commentid>
    <comment_count>5</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-03-25 03:47:02 -0800</bug_when>
    <thetext>I&apos;d like to review this but I think it really needs hyatt to look at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38426</commentid>
    <comment_count>6</comment_count>
      <attachid>7194</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-04-03 15:06:46 -0700</bug_when>
    <thetext>Comment on attachment 7194
update patch

This looks like a really nice cleanup to me.  I can&apos;t answer all of your FIXMEs actually, since many of them are questions I had as well that warrant more research.

My inclination would be for a first cut to attempt to keep the behavior as close as possible to the original, calling out the problems just as you have.  Then after landing this we can iterate.

I assume you made sure this passes the layout tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38631</commentid>
    <comment_count>7</comment_count>
      <attachid>7532</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-04-05 14:59:08 -0700</bug_when>
    <thetext>Created attachment 7532
patch 3

This is a slightly cleaner version of the patch which removes most of the repeated FIXME&apos;s with 3 big FIXME&apos;s at the top and makes a few more slight optimizations such as not calculating for &apos;right&apos; and &apos;bottom&apos; when they are not needed.  It also includes some changes that were made to the current code regarding the static distance for &apos;top&apos; when inside a table row.

This patch compiles fine and passes all the layout tests, but is quite a big patch and therefore I&apos;m woried that some behavior might have changed from the origanal as many of the corner cases are not tested in the suite.  I agree with hyatt in that we should try to stick as closely to the origanal behavior as possible, but I don&apos;t really understand what he is proposing in his comment (if you could elaborate that would be great),</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38730</commentid>
    <comment_count>8</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-04-06 20:05:28 -0700</bug_when>
    <thetext>I think hyatt means to try to avoid deliberately changing the behavior for any corner cases, or at least add tests for anything that was changed. I&apos;m assuming you didn&apos;t do anything of that sort on purpose.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38838</commentid>
    <comment_count>9</comment_count>
      <attachid>7605</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-04-09 15:38:55 -0700</bug_when>
    <thetext>Created attachment 7605
Test case show new margin behavior

This is a test case which shows the incorrect current behavior of using the direction property of itself and not it&apos;s containing block when choosing which value (left or right) to ignore when overconstrained.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39576</commentid>
    <comment_count>10</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-04-17 17:42:53 -0700</bug_when>
    <thetext>Ok, let&apos;s get a new patch that includes the new test cases and layout test results as part of the patch.  Then I can + it.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39578</commentid>
    <comment_count>11</comment_count>
      <attachid>7532</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-04-17 17:49:06 -0700</bug_when>
    <thetext>Comment on attachment 7532
patch 3

Will minus for now while waiting for test cases and layout tests results to be included in the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41475</commentid>
    <comment_count>12</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-05-07 15:22:07 -0700</bug_when>
    <thetext>Any update here?  This is great cleanup.  Just need some tests.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41562</commentid>
    <comment_count>13</comment_count>
      <attachid>8177</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-05-08 18:56:10 -0700</bug_when>
    <thetext>Created attachment 8177
Patch (now with testcases)

This beast of a patch now includes two new test cases and two updated ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42042</commentid>
    <comment_count>14</comment_count>
      <attachid>8177</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-05-11 14:24:35 -0700</bug_when>
    <thetext>Comment on attachment 8177
Patch (now with testcases)

r=me.  Love this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42206</commentid>
    <comment_count>15</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2006-05-13 10:27:05 -0700</bug_when>
    <thetext>Landed in r14351, r14355, r14356 and r14357</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42209</commentid>
    <comment_count>16</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2006-05-13 10:28:31 -0700</bug_when>
    <thetext>Layout tests updated in r14360.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7094</attachid>
            <date>2006-03-15 11:53:10 -0800</date>
            <delta_ts>2006-03-20 13:27:40 -0800</delta_ts>
            <desc>first attempt at cleanup</desc>
            <filename>pos.diff</filename>
            <type>text/plain</type>
            <size>54056</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfYm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL3Jl
bmRlcl9ib3guaAkocmV2aXNpb24gMTMzMDYpCisrKyByZW5kZXJpbmcvcmVuZGVyX2JveC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjIsMTEgKzE2MiwxOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBv
dXRsaW5lQm94KEdyYXBoaWNzQ29udGV4dCosIGludCBfdHgsIGludCBfdHksIGNvbnN0IGNoYXIg
KmNvbG9yID0gInJlZCIpOwogCiAgICAgdm9pZCBjYWxjQWJzb2x1dGVIb3Jpem9udGFsKCk7Cisg
ICAgdm9pZCBjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKExlbmd0aCB3aWR0aCwgY29uc3Qg
UmVuZGVyT2JqZWN0KiBjYiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGludCBjb250YWluZXJXaWR0aCwgY29uc3QgaW50IGJvcmRlcnNQbHVzUGFkZGluZywg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExlbmd0aCBsZWZ0
LCBjb25zdCBMZW5ndGggcmlnaHQsIGNvbnN0IExlbmd0aCBtYXJnaW5MZWZ0LCBjb25zdCBMZW5n
dGggbWFyZ2luUmlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCYgd2lkdGhWYWx1ZSwgaW50JiBtYXJnaW5MZWZ0VmFsdWUsIGludCYgbWFyZ2luUmlnaHRWYWx1
ZSwgaW50JiB4UG9zKTsKKyAgICB2b2lkIGNhbGNBYnNvbHV0ZUhvcml6b250YWxSZXBsYWNlZCgp
OworICAgIAogICAgIHZvaWQgY2FsY0Fic29sdXRlVmVydGljYWwoKTsKLSAgICB2b2lkIGNhbGNB
YnNvbHV0ZUhvcml6b250YWxWYWx1ZXMoV2lkdGhUeXBlIHdpZHRoVHlwZSwgUmVuZGVyT2JqZWN0
KiBjYiwgaW50IGN3LCBpbnQgcGFiLCBpbnQgc3RhdGljX2Rpc3RhbmNlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbCwgaW50IHIsIGludCYgdywgaW50JiBtbCwg
aW50JiBtciwgaW50JiB4KTsKLSAgICB2b2lkIGNhbGNBYnNvbHV0ZVZlcnRpY2FsVmFsdWVzKEhl
aWdodFR5cGUgaGVpZ2h0VHlwZSwgUmVuZGVyT2JqZWN0KiBjYiwgaW50IGNoLCBpbnQgcGFiLCAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0LCBpbnQgYiwgaW50JiBo
LCBpbnQmIG10LCBpbnQmIG1iLCBpbnQmIHkpOyAKKyAgICB2b2lkIGNhbGNBYnNvbHV0ZVZlcnRp
Y2FsVmFsdWVzKExlbmd0aCBoZWlnaHQsIGNvbnN0IFJlbmRlck9iamVjdCogY2IsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGNvbnRhaW5lckhlaWdodCwg
Y29uc3QgaW50IGJvcmRlcnNQbHVzUGFkZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IExlbmd0aCB0b3AsIGNvbnN0IExlbmd0aCBib3R0b20sIGNvbnN0IExl
bmd0aCBtYXJnaW5Ub3AsIGNvbnN0IExlbmd0aCBtYXJnaW5Cb3R0b20sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGhlaWdodFZhbHVlLCBpbnQmIG1hcmdpblRvcFZh
bHVlLCBpbnQmIG1hcmdpbkJvdHRvbVZhbHVlLCBpbnQmIHlQb3MpOworICAgIHZvaWQgY2FsY0Fi
c29sdXRlVmVydGljYWxSZXBsYWNlZCgpOwogICAgIAogICAgIHZpcnR1YWwgSW50UmVjdCBnZXRP
dmVyZmxvd0NsaXBSZWN0KGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIEludFJlY3QgZ2V0
Q2xpcFJlY3QoaW50IHR4LCBpbnQgdHkpOwpJbmRleDogcmVuZGVyaW5nL3JlbmRlcl9ib3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9yZW5kZXJfYm94LmNwcAkocmV2aXNpb24gMTMzMDYp
CisrKyByZW5kZXJpbmcvcmVuZGVyX2JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQw
LDEyIEBACiAjaW5jbHVkZSAicmVuZGVyX2xpbmUuaCIKICNpbmNsdWRlICJyZW5kZXJfcmVwbGFj
ZWQuaCIKICNpbmNsdWRlICJyZW5kZXJfdGhlbWUuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CiAj
aW5jbHVkZSA8YXNzZXJ0Lmg+CiAKK3VzaW5nIHN0ZDo6bWF4OwordXNpbmcgc3RkOjptaW47CisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKQEAgLTEz
NjAsMzYwICsxMzY0LDgxNSBAQCB2b2lkIFJlbmRlckJveDo6c2V0U3RhdGljWShpbnQgc3RhdGlj
WSkKIAogdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWwoKQogewotICAgIGNv
bnN0IGludCBBVVRPID0gLTY2NjY2NjsKLSAgICBpbnQgbCwgciwgY3c7Ci0KLSAgICBpbnQgcGFi
ID0gYm9yZGVyTGVmdCgpKyBib3JkZXJSaWdodCgpKyBwYWRkaW5nTGVmdCgpKyBwYWRkaW5nUmln
aHQoKTsKLQotICAgIGwgPSByID0gQVVUTzsKLSAKLSAgICAvLyBXZSBkb24ndCB1c2UgY29udGFp
bmluZ0Jsb2NrKCksIHNpbmNlIHdlIG1heSBiZSBwb3NpdGlvbmVkIGJ5IGFuIGVuY2xvc2luZyBy
ZWxwb3NpdGlvbmVkIGlubGluZS4KLSAgICBSZW5kZXJPYmplY3QqIGNiID0gY29udGFpbmVyKCk7
Ci0gICAgY3cgPSBjb250YWluaW5nQmxvY2tXaWR0aCgpICsgY2ItPnBhZGRpbmdMZWZ0KCkgKyBj
Yi0+cGFkZGluZ1JpZ2h0KCk7CisgICAgaWYgKGlzUmVwbGFjZWQoKSkgeworICAgICAgICBjYWxj
QWJzb2x1dGVIb3Jpem9udGFsUmVwbGFjZWQoKTsKKyAgICAgICAgcmV0dXJuOyAKKyAgICB9Cisg
ICAgCisgICAgLy8gVGhlIGZvbGxvd2luZyBpcyBiYXNlZCBvZmYgb2YgdGhlIFczQyBXb3JraW5n
IERyYWZ0IGZyb20gSnVuZSAxMywgMjAwNSBvZgorICAgIC8vIENTUyAyLjE6IFNlY3Rpb24gMTAu
My43ICJBYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyIKKyAgICAv
LyA8aHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvdmlzdWRldC5odG1sI2Ficy1ub24tcmVwbGFj
ZWQtd2lkdGg+CisgICAgLy8gKGJsb2NrLXN0eWxlLWNvbW1lbnRzIGluIHRoaXMgZnVuY3Rpb24g
YW5kIGluIGNhbGNBYnNvbHV0ZUhvcml6b250YWxWYWx1ZXMoKSAKKyAgICAvLyBjb3JyZXNwb25k
IHRvIHRleHQgZnJvbSB0aGUgc3BlYykKKworCisgICAgLy8gV2UgZG9uJ3QgdXNlIGNvbnRhaW5p
bmdCbG9jaygpLCBzaW5jZSB3ZSBtYXkgYmUgcG9zaXRpb25lZCBieSBhbiBlbmNsb3NpbmcKKyAg
ICAvLyByZWxhdGl2ZSBwb3NpdGlvbmVkIGlubGluZS4KKyAgICBjb25zdCBSZW5kZXJPYmplY3Qq
IGNiID0gY29udGFpbmVyKCk7CisgICAgY29uc3QgaW50IGJvcmRlcnNQbHVzUGFkZGluZyA9IGJv
cmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nTGVmdCgpICsgcGFkZGluZ1JpZ2h0
KCk7CisgICAgY29uc3QgaW50IGNvbnRhaW5lcldpZHRoID0gY29udGFpbmluZ0Jsb2NrV2lkdGgo
KSArIGNiLT5wYWRkaW5nTGVmdCgpICsgY2ItPnBhZGRpbmdSaWdodCgpOworCisgICAgY29uc3Qg
TGVuZ3RoIG1hcmdpbkxlZnQgPSBzdHlsZSgpLT5tYXJnaW5MZWZ0KCk7CisgICAgY29uc3QgTGVu
Z3RoIG1hcmdpblJpZ2h0ID0gc3R5bGUoKS0+bWFyZ2luUmlnaHQoKTsKKyAgICBMZW5ndGggbGVm
dCA9IHN0eWxlKCktPmxlZnQoKTsKKyAgICBMZW5ndGggcmlnaHQgPSBzdHlsZSgpLT5yaWdodCgp
OworCisKKyAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCisgICAgICogRm9yIHRoZSBwdXJwb3Nl
cyBvZiB0aGlzIHNlY3Rpb24gYW5kIHRoZSBuZXh0LCB0aGUgdGVybSAic3RhdGljIHBvc2l0aW9u
IgorICAgICAqIChvZiBhbiBlbGVtZW50KSByZWZlcnMsIHJvdWdobHksIHRvIHRoZSBwb3NpdGlv
biBhbiBlbGVtZW50IHdvdWxkIGhhdmUgaGFkCisgICAgICogaW4gdGhlIG5vcm1hbCBmbG93LiBN
b3JlIHByZWNpc2VseToKKyAgICAgKiAKKyAgICAgKiAqIFRoZSBzdGF0aWMgcG9zaXRpb24gZm9y
ICdsZWZ0JyBpcyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgbGVmdCBlZGdlIG9mIHRoZQorICAgICAq
ICAgY29udGFpbmluZyBibG9jayB0byB0aGUgbGVmdCBtYXJnaW4gZWRnZSBvZiBhIGh5cG90aGV0
aWNhbCBib3ggdGhhdCB3b3VsZAorICAgICAqICAgaGF2ZSBiZWVuIHRoZSBmaXJzdCBib3ggb2Yg
dGhlIGVsZW1lbnQgaWYgaXRzICdwb3NpdGlvbicgcHJvcGVydHkgaGFkIGJlZW4KKyAgICAgKiAg
ICdzdGF0aWMnIGFuZCAnZmxvYXQnIGhhZCBiZWVuICdub25lJy4gVGhlIHZhbHVlIGlzIG5lZ2F0
aXZlIGlmIHRoZSAKKyAgICAgKiAgIGh5cG90aGV0aWNhbCBib3ggaXMgdG8gdGhlIGxlZnQgb2Yg
dGhlIGNvbnRhaW5pbmcgYmxvY2suCisgICAgICogKiBUaGUgc3RhdGljIHBvc2l0aW9uIGZvciAn
cmlnaHQnIGlzIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSByaWdodCBlZGdlIG9mIHRoZQorICAgICAq
ICAgY29udGFpbmluZyBibG9jayB0byB0aGUgcmlnaHQgbWFyZ2luIGVkZ2Ugb2YgdGhlIHNhbWUg
aHlwb3RoZXRpY2FsIGJveCBhcworICAgICAqICAgYWJvdmUuIFRoZSB2YWx1ZSBpcyBwb3NpdGl2
ZSBpZiB0aGUgaHlwb3RoZXRpY2FsIGJveCBpcyB0byB0aGUgbGVmdCBvZiB0aGUKKyAgICAgKiAg
IGNvbnRhaW5pbmcgYmxvY2sncyBlZGdlLgorICAgICAqCisgICAgICogQnV0IHJhdGhlciB0aGFu
IGFjdHVhbGx5IGNhbGN1bGF0aW5nIHRoZSBkaW1lbnNpb25zIG9mIHRoYXQgaHlwb3RoZXRpY2Fs
IGJveCwKKyAgICAgKiB1c2VyIGFnZW50cyBhcmUgZnJlZSB0byBtYWtlIGEgZ3Vlc3MgYXQgaXRz
IHByb2JhYmxlIHBvc2l0aW9uLgorICAgICAqIAorICAgICAqIEZvciB0aGUgcHVycG9zZXMgb2Yg
Y2FsY3VsYXRpbmcgdGhlIHN0YXRpYyBwb3NpdGlvbiwgdGhlIGNvbnRhaW5pbmcgYmxvY2sgb2YK
KyAgICAgKiBmaXhlZCBwb3NpdGlvbmVkIGVsZW1lbnRzIGlzIHRoZSBpbml0aWFsIGNvbnRhaW5p
bmcgYmxvY2sgaW5zdGVhZCBvZiB0aGUKKyAgICAgKiB2aWV3cG9ydCwgYW5kIGFsbCBzY3JvbGxh
YmxlIGJveGVzIHNob3VsZCBiZSBhc3N1bWVkIHRvIGJlIHNjcm9sbGVkIHRvIHRoZWlyIAorICAg
ICAqIG9yaWdpbi4KKyAgICBcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyAgICAvLyBGSVhNRTog
c2hvdWxkIHdlIHN0aWxsIGRlYWwgd2l0aCB0aGVzZT8KKyAgICAvLyAgfHwgc3R5bGUoKS0+bGVm
dCgpLmlzU3RhdGljKCkgCisgICAgLy8gIHx8IHN0eWxlKCktPnJpZ2h0KCkuaXNTdGF0aWMoKQor
ICAgIC8vIE5PVEU6ICdzdGF0aWMnIGlzIG5vdCBhIGxlZ2FsIHZhbHVlIGZvciBsZWZ0IG9yIHJp
Z2h0IGFzIG9mIGNzcyAyLjEKKworICAgIC8vIENhbGN1bGF0ZSB0aGUgc3RhdGljIGRpc3RhbmNl
IGlmIG5lZWRlZC4KKyAgICBpZiAobGVmdC5pc0F1dG8oKSAmJiByaWdodC5pc0F1dG8oKSkgewor
ICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHRoaXMgYmUgY2Igb3IgcGFyZW50KCkgZm9yIHRleHQt
ZGlyZWN0aW9uPworICAgICAgICBpZiAocGFyZW50KCktPnN0eWxlKCktPmRpcmVjdGlvbigpID09
IExUUikgeworICAgICAgICAgICAgLy8gJ21fc3RhdGljWCcgc2hvdWxkIGFscmVhZHkgaGF2ZSBi
ZWVuIHNldCB0aHJvdWdoIGxheW91dCBvZiB0aGUgcGFyZW50LgorICAgICAgICAgICAgaW50IHN0
YXRpY1Bvc2l0aW9uID0gbV9zdGF0aWNYIC0gY2ItPmJvcmRlckxlZnQoKTsKKyAgICAgICAgICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBwbyA9IHBhcmVudCgpOyBwbyAmJiBwbyAhPSBjYjsgcG8gPSBw
by0+cGFyZW50KCkpCisgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gKz0gcG8tPnhQb3Mo
KTsKIAotICAgIGlmICghc3R5bGUoKS0+bGVmdCgpLmlzQXV0bygpKQotICAgICAgICBsID0gc3R5
bGUoKS0+bGVmdCgpLmNhbGNWYWx1ZShjdyk7Ci0gICAgaWYgKCFzdHlsZSgpLT5yaWdodCgpLmlz
QXV0bygpKQotICAgICAgICByID0gc3R5bGUoKS0+cmlnaHQoKS5jYWxjVmFsdWUoY3cpOwotCi0g
ICAgaW50IHN0YXRpY19kaXN0YW5jZT0wOwotICAgIGlmICgocGFyZW50KCktPnN0eWxlKCktPmRp
cmVjdGlvbigpPT1MVFIgJiYgKGwgPT0gQVVUTyAmJiByID09IEFVVE8pKQotICAgICAgICAgICAg
fHwgc3R5bGUoKS0+bGVmdCgpLmlzU3RhdGljKCkpCi0gICAgewotICAgICAgICBzdGF0aWNfZGlz
dGFuY2UgPSBtX3N0YXRpY1ggLSBjYi0+Ym9yZGVyTGVmdCgpOyAvLyBTaG91bGQgYWxyZWFkeSBo
YXZlIGJlZW4gc2V0IHRocm91Z2ggbGF5b3V0IG9mIHRoZSBwYXJlbnQoKS4KLSAgICAgICAgUmVu
ZGVyT2JqZWN0KiBwbyA9IHBhcmVudCgpOwotICAgICAgICBmb3IgKDsgcG8gJiYgcG8gIT0gY2I7
IHBvID0gcG8tPnBhcmVudCgpKQotICAgICAgICAgICAgc3RhdGljX2Rpc3RhbmNlICs9IHBvLT54
UG9zKCk7Ci0KLSAgICAgICAgbCA9IHN0YXRpY19kaXN0YW5jZTsKLSAgICB9CisgICAgICAgICAg
ICBsZWZ0LnNldFZhbHVlKEZpeGVkLCBzdGF0aWNQb3NpdGlvbik7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHBvID0gcGFyZW50KCk7CisgICAgICAgICAgICAv
LyAnbV9zdGF0aWNYJyBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gc2V0IHRocm91Z2ggbGF5b3V0
IG9mIHRoZSBwYXJlbnQuCisgICAgICAgICAgICBpbnQgc3RhdGljUG9zaXRpb24gPSBtX3N0YXRp
Y1ggKyBjb250YWluZXJXaWR0aCArIGNiLT5ib3JkZXJSaWdodCgpIC0gcG8tPndpZHRoKCk7Cisg
ICAgICAgICAgICBmb3IgKDsgcG8gJiYgcG8gIT0gY2I7IHBvID0gcG8tPnBhcmVudCgpKQorICAg
ICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uIC09IHBvLT54UG9zKCk7CisKKyAgICAgICAgICAg
IHJpZ2h0LnNldFZhbHVlKEZpeGVkLCBzdGF0aWNQb3NpdGlvbik7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBDYWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlvbiB2YWx1ZXMgZm9yICd3aWR0
aCcgY2FzZS4KKyAgICBjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKHN0eWxlKCktPndpZHRo
KCksIGNiLCBjb250YWluZXJXaWR0aCwgYm9yZGVyc1BsdXNQYWRkaW5nLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGVmdCwgcmlnaHQsIG1hcmdpbkxlZnQsIG1hcmdpblJpZ2h0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV93aWR0aCwgbV9tYXJnaW5MZWZ0
LCBtX21hcmdpblJpZ2h0LCBtX3gpOworCisgICAgCisgICAgLy8gQXZvaWQgZG9pbmcgYW55IHdv
cmsgaW4gdGhlIGNvbW1vbiBjYXNlICh3aGVyZSB0aGUgdmFsdWVzIG9mIG1heC13aWR0aCBhbmQg
bWluLXdpZHRoIGFyZSB0aGVpciBkZWZhdWx0cykuIAorICAgIC8vIEZJWE1FOiBDYW4gcGVyaGFw
cyBvcHRpbWl6ZSBvdXQgY2FzZXMgd2hlbiBtYXgtd2lkdGgvbWluLXdpZHRoIGFyZSBncmVhdGVy
IHRoYW4gb3IgbGVzcyB0aGFuIHRoZSAKKyAgICAvLyBjb21wdXRlZCBtX3dpZHRoLiAgQmUgY2Fy
ZWZ1bCBvZiBib3gtc2l6aW5nIGFuZCBwZXJjZW50YWdlIGlzc3Vlcy4KKyAgICAKKyAgICAvLyBD
YWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlvbiB2YWx1ZXMgZm9yICdtYXgtd2lkdGgnIGNhc2Uu
CisgICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgp
IHsKKyAgICAgICAgaW50IG1heFdpZHRoOworICAgICAgICBpbnQgbWF4TWFyZ2luTGVmdDsKKyAg
ICAgICAgaW50IG1heE1hcmdpblJpZ2h0OworICAgICAgICBpbnQgbWF4WFBvczsKKworICAgICAg
ICBjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKHN0eWxlKCktPm1heFdpZHRoKCksIGNiLCBj
b250YWluZXJXaWR0aCwgYm9yZGVyc1BsdXNQYWRkaW5nLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxlZnQsIHJpZ2h0LCBtYXJnaW5MZWZ0LCBtYXJnaW5SaWdodCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aCwgbWF4TWFyZ2luTGVm
dCwgbWF4TWFyZ2luUmlnaHQsIG1heFhQb3MpOworCisgICAgICAgIGlmIChtX3dpZHRoID4gbWF4
V2lkdGgpIHsKKyAgICAgICAgICAgIG1fd2lkdGggPSBtYXhXaWR0aDsKKyAgICAgICAgICAgIG1f
bWFyZ2luTGVmdCA9IG1heE1hcmdpbkxlZnQ7CisgICAgICAgICAgICBtX21hcmdpblJpZ2h0ID0g
bWF4TWFyZ2luUmlnaHQ7CisgICAgICAgICAgICBtX3ggPSBtYXhYUG9zOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gQ2FsY3VsYXRlIGNvbnN0cmFpbnQgZXF1YXRpb24gdmFsdWVzIGZvciAn
bWluLXdpZHRoJyBjYXNlLgorICAgIGlmIChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpIHsK
KyAgICAgICAgaW50IG1pbldpZHRoOworICAgICAgICBpbnQgbWluTWFyZ2luTGVmdDsKKyAgICAg
ICAgaW50IG1pbk1hcmdpblJpZ2h0OworICAgICAgICBpbnQgbWluWFBvczsKKworICAgICAgICBj
YWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKHN0eWxlKCktPm1pbldpZHRoKCksIGNiLCBjb250
YWluZXJXaWR0aCwgYm9yZGVyc1BsdXNQYWRkaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxlZnQsIHJpZ2h0LCBtYXJnaW5MZWZ0LCBtYXJnaW5SaWdodCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aCwgbWluTWFyZ2luTGVmdCwg
bWluTWFyZ2luUmlnaHQsIG1pblhQb3MpOworICAgIAorICAgICAgICBpZiAobV93aWR0aCA8IG1p
bldpZHRoKSB7CisgICAgICAgICAgICBtX3dpZHRoID0gbWluV2lkdGg7CisgICAgICAgICAgICBt
X21hcmdpbkxlZnQgPSBtaW5NYXJnaW5MZWZ0OworICAgICAgICAgICAgbV9tYXJnaW5SaWdodCA9
IG1pbk1hcmdpblJpZ2h0OworICAgICAgICAgICAgbV94ID0gbWluWFBvczsKKyAgICAgICAgfQor
ICAgIH0gICAgCisgICAgCisgICAgLy8gUHV0IG1fd2lkdGggaW50byBjb3JyZWN0IGZvcm0uCisg
ICAgbV93aWR0aCArPSBib3JkZXJzUGx1c1BhZGRpbmc7Cit9CisKK3ZvaWQgUmVuZGVyQm94Ojpj
YWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKExlbmd0aCB3aWR0aCwgY29uc3QgUmVuZGVyT2Jq
ZWN0KiBjYiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBpbnQgY29udGFpbmVyV2lkdGgsIGNvbnN0IGludCBib3JkZXJzUGx1c1BhZGRpbmcsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGVuZ3Ro
IGxlZnQsIGNvbnN0IExlbmd0aCByaWdodCwgY29uc3QgTGVuZ3RoIG1hcmdpbkxlZnQsIGNvbnN0
IExlbmd0aCBtYXJnaW5SaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCYgd2lkdGhWYWx1ZSwgaW50JiBtYXJnaW5MZWZ0VmFsdWUsIGludCYgbWFy
Z2luUmlnaHRWYWx1ZSwgaW50JiB4UG9zKQoreworICAgIC8vICdsZWZ0JyBhbmQgJ3JpZ2h0JyBj
YW5ub3QgYm90aCBiZSAnYXV0bycgYmVjYXVzZSBvbmUgd291bGQgb2YgYmVlbgorICAgIC8vIGNv
bnZlcnRlZCB0byB0aGUgc3RhdGljIHBvc3Rpb24gYWxyZWFkeQorICAgIGFzc2VydCghKGxlZnQu
aXNBdXRvKCkgJiYgcmlnaHQuaXNBdXRvKCkpKTsKKyAgICAKKyAgICBpbnQgbGVmdFZhbHVlOwor
ICAgIGludCByaWdodFZhbHVlOworICAgIAorICAgIGJvb2wgd2lkdGhJc0F1dG8gPSB3aWR0aC5p
c0ludHJpbnNpY09yQXV0bygpOworICAgIGJvb2wgbGVmdElzQXV0byA9IGxlZnQuaXNBdXRvKCk7
CisgICAgYm9vbCByaWdodElzQXV0byA9IHJpZ2h0LmlzQXV0bygpOworCisgICAgaWYgKCFsZWZ0
SXNBdXRvICYmICF3aWR0aElzQXV0byAmJiAhcmlnaHRJc0F1dG8pIHsKKyAgICAgICAgLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSpcCisgICAgICAgICAqIElmIG5vbmUgb2YgdGhlIHRocmVlIGlzICdhdXRvJzog
SWYgYm90aCAnbWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2luLQorICAgICAgICAgKiByaWdodCcgYXJl
ICdhdXRvJywgc29sdmUgdGhlIGVxdWF0aW9uIHVuZGVyIHRoZSBleHRyYSBjb25zdHJhaW50IHRo
YXQKKyAgICAgICAgICogdGhlIHR3byBtYXJnaW5zIGdldCBlcXVhbCB2YWx1ZXMsIHVubGVzcyB0
aGlzIHdvdWxkIG1ha2UgdGhlbSBuZWdhdGl2ZSwKKyAgICAgICAgICogaW4gd2hpY2ggY2FzZSB3
aGVuIGRpcmVjdGlvbiBvZiB0aGUgY29udGFpbmluZyBibG9jayBpcyAnbHRyJyAoJ3J0bCcpLAor
ICAgICAgICAgKiBzZXQgJ21hcmdpbi1sZWZ0JyAoJ21hcmdpbi1yaWdodCcpIHRvIHplcm8gYW5k
IHNvbHZlIGZvciAnbWFyZ2luLXJpZ2h0JworICAgICAgICAgKiAoJ21hcmdpbi1sZWZ0JykuIElm
IG9uZSBvZiAnbWFyZ2luLWxlZnQnIG9yICdtYXJnaW4tcmlnaHQnIGlzICdhdXRvJywKKyAgICAg
ICAgICogc29sdmUgdGhlIGVxdWF0aW9uIGZvciB0aGF0IHZhbHVlLiBJZiB0aGUgdmFsdWVzIGFy
ZSBvdmVyLWNvbnN0cmFpbmVkLAorICAgICAgICAgKiBpZ25vcmUgdGhlIHZhbHVlIGZvciAnbGVm
dCcgKGluIGNhc2UgdGhlICdkaXJlY3Rpb24nIHByb3BlcnR5IG9mIHRoZQorICAgICAgICAgKiBj
b250YWluaW5nIGJsb2NrIGlzICdydGwnKSBvciAncmlnaHQnIChpbiBjYXNlICdkaXJlY3Rpb24n
IGlzICdsdHInKSAKKyAgICAgICAgICogYW5kIHNvbHZlIGZvciB0aGF0IHZhbHVlLgorICAgICAg
ICBcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8gICAKKworICAgICAgICBsZWZ0VmFsdWUgPSBsZWZ0LmNhbGNW
YWx1ZShjb250YWluZXJXaWR0aCk7CisgICAgICAgIHJpZ2h0VmFsdWUgPSByaWdodC5jYWxjVmFs
dWUoY29udGFpbmVyV2lkdGgpOworICAgICAgICB3aWR0aFZhbHVlID0gY2FsY0NvbnRlbnRCb3hX
aWR0aCh3aWR0aC5jYWxjVmFsdWUoY29udGFpbmVyV2lkdGgpKTsKKyAgICAgICAgCisgICAgICAg
IGNvbnN0IGludCBhdmFpbGFibGVTcGFjZSA9IGNvbnRhaW5lcldpZHRoIC0gKGxlZnRWYWx1ZSAr
IHdpZHRoVmFsdWUgKyByaWdodFZhbHVlICsgYm9yZGVyc1BsdXNQYWRkaW5nKTsKIAotICAgIGVs
c2UgaWYgKChwYXJlbnQoKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCk9PVJUTCAmJiAobD09QVVUTyAm
JiByPT1BVVRPICkpCi0gICAgICAgICAgICB8fCBzdHlsZSgpLT5yaWdodCgpLmlzU3RhdGljKCkp
Ci0gICAgewotICAgICAgICBSZW5kZXJPYmplY3QqIHBvID0gcGFyZW50KCk7Ci0gICAgICAgIHN0
YXRpY19kaXN0YW5jZSA9IG1fc3RhdGljWCArIGN3ICsgY2ItPmJvcmRlclJpZ2h0KCkgLSBwby0+
d2lkdGgoKTsgLy8gU2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIHNldCB0aHJvdWdoIGxheW91dCBv
ZiB0aGUgcGFyZW50KCkuCi0gICAgICAgIHdoaWxlIChwbyAmJiBwbyE9Y29udGFpbmluZ0Jsb2Nr
KCkpIHsKLSAgICAgICAgICAgIHN0YXRpY19kaXN0YW5jZSAtPSBwby0+eFBvcygpOwotICAgICAg
ICAgICAgcG89cG8tPnBhcmVudCgpOworICAgICAgICAvLyBNYXJnaW5zIGFyZSBub3cgdGhlIG9u
bHkgdW5rbm93bgorICAgICAgICBpZiAobWFyZ2luTGVmdC5pc0F1dG8oKSAmJiBtYXJnaW5SaWdo
dC5pc0F1dG8oKSkgeworICAgICAgICAgICAgLy8gQm90aCBtYXJnaW5zIGF1dG8sIHNvbHZlIGZv
ciBlcXVhbGl0eQorICAgICAgICAgICAgaWYgKGF2YWlsYWJsZVNwYWNlID49IDApIHsKKyAgICAg
ICAgICAgICAgICBtYXJnaW5MZWZ0VmFsdWUgPSBhdmFpbGFibGVTcGFjZSAvIDI7IC8vIHNwbGl0
IHRoZSBkaWZlcmVuY2UKKyAgICAgICAgICAgICAgICBtYXJnaW5SaWdodFZhbHVlID0gbWFyZ2lu
TGVmdFZhbHVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogc2hvdWxkIHRoaXMgYmUgY29udGFpbmVyLCBwYXJlbnQoKSwgb3IgdGhpcyBmb3IgdGV4dC1k
aXJlY3Rpb24/CisgICAgICAgICAgICAgICAgaWYgKHBhcmVudCgpLT5zdHlsZSgpLT5kaXJlY3Rp
b24oKSA9PSBMVFIpIHsKKyAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdFZhbHVlID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHRWYWx1ZSA9IGF2YWlsYWJsZVNwYWNlOyAv
LyB3aWxsIGJlIG5lZ2F0aXZlICAgCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgbWFyZ2luTGVmdFZhbHVlID0gYXZhaWxhYmxlU3BhY2U7IC8vIHdpbGwgYmUg
bmVnYXRpdmUKKyAgICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHRWYWx1ZSA9IDA7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG1hcmdpbkxl
ZnQuaXNBdXRvKCkpIHsKKyAgICAgICAgICAgIC8vIFNvbHZlIGZvciBsZWZ0IG1hcmdpbgorICAg
ICAgICAgICAgbWFyZ2luUmlnaHRWYWx1ZSA9IG1hcmdpblJpZ2h0LmNhbGNWYWx1ZShjb250YWlu
ZXJXaWR0aCk7CisgICAgICAgICAgICBtYXJnaW5MZWZ0VmFsdWUgPSBhdmFpbGFibGVTcGFjZSAt
IG1hcmdpblJpZ2h0VmFsdWU7CisgICAgICAgIH0gZWxzZSBpZiAobWFyZ2luUmlnaHQuaXNBdXRv
KCkpIHsKKyAgICAgICAgICAgIC8vIFNvbHZlIGZvciByaWdodCBtYXJnaW4KKyAgICAgICAgICAg
IG1hcmdpbkxlZnRWYWx1ZSA9IG1hcmdpbkxlZnQuY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRoKTsK
KyAgICAgICAgICAgIG1hcmdpblJpZ2h0VmFsdWUgPSBhdmFpbGFibGVTcGFjZSAtIG1hcmdpbkxl
ZnRWYWx1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE92ZXItY29uc3RyYWlu
ZWQsIHNvbHZlIGFjY29yZGluZyB0byBjb250YWluZXIncyB0ZXh0IGRpcmVjdGlvbgorICAgICAg
ICAgICAgbWFyZ2luTGVmdFZhbHVlID0gbWFyZ2luTGVmdC5jYWxjVmFsdWUoY29udGFpbmVyV2lk
dGgpOworICAgICAgICAgICAgbWFyZ2luUmlnaHRWYWx1ZSA9IG1hcmdpblJpZ2h0LmNhbGNWYWx1
ZShjb250YWluZXJXaWR0aCk7CisgICAgICAgICAgICBpZiAocGFyZW50KCktPnN0eWxlKCktPmRp
cmVjdGlvbigpID09IExUUikKKyAgICAgICAgICAgICAgICByaWdodFZhbHVlID0gKGF2YWlsYWJs
ZVNwYWNlICsgcmlnaHRWYWx1ZSkgLSBtYXJnaW5MZWZ0VmFsdWUgLSBtYXJnaW5SaWdodFZhbHVl
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxlZnRWYWx1ZSA9IChhdmFpbGFi
bGVTcGFjZSArIGxlZnRWYWx1ZSkgLSBtYXJnaW5MZWZ0VmFsdWUgLSBtYXJnaW5SaWdodFZhbHVl
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCisgICAg
ICAgICAqIE90aGVyd2lzZSwgc2V0ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tbGVmdCcgYW5k
ICdtYXJnaW4tcmlnaHQnCisgICAgICAgICAqIHRvIDAsIGFuZCBwaWNrIHRoZSBvbmUgb2YgdGhl
IGZvbGxvd2luZyBzaXggcnVsZXMgdGhhdCBhcHBsaWVzLgorICAgICAgICAgKiAKKyAgICAgICAg
ICogMS4gJ2xlZnQnIGFuZCAnd2lkdGgnIGFyZSAnYXV0bycgYW5kICdyaWdodCcgaXMgbm90ICdh
dXRvJywgdGhlbiB0aGUKKyAgICAgICAgICogICAgd2lkdGggaXMgc2hyaW5rLXRvLWZpdC4gVGhl
biBzb2x2ZSBmb3IgJ2xlZnQnCisgICAgICAgICAqIAorICAgICAgICAgKiAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICAgICAgICogMi4gJ2xlZnQnIGFuZCAncmlnaHQnIGFyZSAnYXV0bycgYW5kICd3aWR0aCcgaXMg
bm90ICdhdXRvJywgdGhlbiBpZgorICAgICAgICAgKiAgICB0aGUgJ2RpcmVjdGlvbicgcHJvcGVy
dHkgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgc2V0IAorICAgICAgICAgKiAgICAn
bGVmdCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbiwgb3RoZXJ3aXNlIHNldCAncmlnaHQnIHRvIHRo
ZSAKKyAgICAgICAgICogICAgc3RhdGljIHBvc2l0aW9uLiBUaGVuIHNvbHZlIGZvciAnbGVmdCcg
KGlmICdkaXJlY3Rpb24gaXMgJ3J0bCcpCisgICAgICAgICAqICAgIG9yICdyaWdodCcgKGlmICdk
aXJlY3Rpb24nIGlzICdsdHInKS4KKyAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAqIAor
ICAgICAgICAgKiAzLiAnd2lkdGgnIGFuZCAncmlnaHQnIGFyZSAnYXV0bycgYW5kICdsZWZ0JyBp
cyBub3QgJ2F1dG8nLCB0aGVuIHRoZSAKKyAgICAgICAgICogICAgd2lkdGggaXMgc2hyaW5rLXRv
LWZpdCAuIFRoZW4gc29sdmUgZm9yICdyaWdodCcKKyAgICAgICAgICogNC4gJ2xlZnQnIGlzICdh
dXRvJywgJ3dpZHRoJyBhbmQgJ3JpZ2h0JyBhcmUgbm90ICdhdXRvJywgdGhlbiBzb2x2ZQorICAg
ICAgICAgKiAgICBmb3IgJ2xlZnQnCisgICAgICAgICAqIDUuICd3aWR0aCcgaXMgJ2F1dG8nLCAn
bGVmdCcgYW5kICdyaWdodCcgYXJlIG5vdCAnYXV0bycsIHRoZW4gc29sdmUKKyAgICAgICAgICog
ICAgZm9yICd3aWR0aCcKKyAgICAgICAgICogNi4gJ3JpZ2h0JyBpcyAnYXV0bycsICdsZWZ0JyBh
bmQgJ3dpZHRoJyBhcmUgbm90ICdhdXRvJywgdGhlbiBzb2x2ZQorICAgICAgICAgKiAgICBmb3Ig
J3JpZ2h0JworICAgICAgICAgKiAKKyAgICAgICAgICogQ2FsY3VsYXRpb24gb2YgdGhlIHNocmlu
ay10by1maXQgd2lkdGggaXMgc2ltaWxhciB0byBjYWxjdWxhdGluZyB0aGUgCisgICAgICAgICAq
IHdpZHRoIG9mIGEgdGFibGUgY2VsbCB1c2luZyB0aGUgYXV0b21hdGljIHRhYmxlIGxheW91dCBh
bGdvcml0aG0uCisgICAgICAgICAqIFJvdWdobHk6IGNhbGN1bGF0ZSB0aGUgcHJlZmVycmVkIHdp
ZHRoIGJ5IGZvcm1hdHRpbmcgdGhlIGNvbnRlbnQgCisgICAgICAgICAqIHdpdGhvdXQgYnJlYWtp
bmcgbGluZXMgb3RoZXIgdGhhbiB3aGVyZSBleHBsaWNpdCBsaW5lIGJyZWFrcyBvY2N1ciwgCisg
ICAgICAgICAqIGFuZCBhbHNvIGNhbGN1bGF0ZSB0aGUgcHJlZmVycmVkIG1pbmltdW0gd2lkdGgs
IGUuZy4sIGJ5IHRyeWluZyBhbGwKKyAgICAgICAgICogcG9zc2libGUgbGluZSBicmVha3MuIENT
UyAyLjEgZG9lcyBub3QgZGVmaW5lIHRoZSBleGFjdCBhbGdvcml0aG0uIAorICAgICAgICAgKiBU
aGlyZGx5LCBjYWxjdWxhdGUgdGhlIGF2YWlsYWJsZSB3aWR0aDogdGhpcyBpcyBmb3VuZCBieSBz
b2x2aW5nCisgICAgICAgICAqIGZvciAnd2lkdGgnIGFmdGVyIHNldHRpbmcgJ2xlZnQnIChpbiBj
YXNlIDEpIG9yICdyaWdodCcgKGluIGNhc2UgMykKKyAgICAgICAgICogdG8gMC4KKyAgICAgICAg
ICogCisgICAgICAgICAqIFRoZW4gdGhlIHNocmluay10by1maXQgd2lkdGggaXM6IAorICAgICAg
ICAgKiBtaW4obWF4KHByZWZlcnJlZCBtaW5pbXVtIHdpZHRoLCBhdmFpbGFibGUgd2lkdGgpLCBw
cmVmZXJyZWQgd2lkdGgpLgorICAgICAgICBcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworICAgIAorICAgICAg
ICAvLyBDYWxjdWxhdGUgbWFyZ2lucywgJ2F1dG8nIG1hcmdpbnMgYXJlIGlnbm9yZWQuCisgICAg
ICAgIG1hcmdpbkxlZnRWYWx1ZSA9IG1hcmdpbkxlZnQuY2FsY01pblZhbHVlKGNvbnRhaW5lcldp
ZHRoKTsKKyAgICAgICAgbWFyZ2luUmlnaHRWYWx1ZSA9IG1hcmdpblJpZ2h0LmNhbGNNaW5WYWx1
ZShjb250YWluZXJXaWR0aCk7CisKKyAgICAgICAgY29uc3QgaW50IGF2YWlsYWJsZVNwYWNlID0g
Y29udGFpbmVyV2lkdGggLSAobWFyZ2luTGVmdFZhbHVlICsgbWFyZ2luUmlnaHRWYWx1ZSArIGJv
cmRlcnNQbHVzUGFkZGluZyk7CisKKyAgICAgICAgLy8gVXNlIHJ1bGUvY2FzZSB0aGF0IGFwcGxp
ZXMuCisgICAgICAgIGlmIChsZWZ0SXNBdXRvICYmIHdpZHRoSXNBdXRvICYmICFyaWdodElzQXV0
bykgeworICAgICAgICAgICAgLy8gUlVMRSAxOiAodXNlIHNocmluay10by1maXQgZm9yIHdpZHRo
LCBhbmQgc29sdmUgb2YgbGVmdCkKKyAgICAgICAgICAgIHJpZ2h0VmFsdWUgPSByaWdodC5jYWxj
VmFsdWUoY29udGFpbmVyV2lkdGgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhN
RTogd291bGQgaXQgYmUgYmV0dGVyIHRvIGhhdmUgc2hyaW5rLXRvLWZpdCBpbiBvbmUgc3RlcD8g
CisgICAgICAgICAgICBpbnQgcHJlZmVycmVkV2lkdGggPSBtX21heFdpZHRoIC0gYm9yZGVyc1Bs
dXNQYWRkaW5nOworICAgICAgICAgICAgaW50IHByZWZlcnJlZE1pbldpZHRoID0gbV9taW5XaWR0
aCAtIGJvcmRlcnNQbHVzUGFkZGluZzsKKyAgICAgICAgICAgIGludCBhdmFpbGFibGVXaWR0aCA9
IGF2YWlsYWJsZVNwYWNlIC0gcmlnaHRWYWx1ZTsKKyAgICAgICAgICAgIHdpZHRoVmFsdWUgPSBt
aW4obWF4KHByZWZlcnJlZE1pbldpZHRoLCBhdmFpbGFibGVXaWR0aCksIHByZWZlcnJlZFdpZHRo
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbGVmdFZhbHVlID0gYXZhaWxhYmxlU3BhY2Ug
LSAocmlnaHRWYWx1ZSArIHdpZHRoVmFsdWUpOworICAgICAgICB9IGVsc2UgaWYgKCFsZWZ0SXNB
dXRvICYmIHdpZHRoSXNBdXRvICYmIHJpZ2h0SXNBdXRvKSB7IAorICAgICAgICAgICAgLy8gUlVM
RSAzOiAodXNlIHNocmluay10by1maXQgZm9yIHdpZHRoLCBhbmQgc29sdmUgb2YgcmlnaHQpCisg
ICAgICAgICAgICBsZWZ0VmFsdWUgPSBsZWZ0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCk7CisK
KyAgICAgICAgICAgIC8vIEZJWE1FOiB3b3VsZCBpdCBiZSBiZXR0ZXIgdG8gaGF2ZSBzaHJpbmst
dG8tZml0IGluIG9uZSBzdGVwPyAKKyAgICAgICAgICAgIGludCBwcmVmZXJyZWRXaWR0aCA9IG1f
bWF4V2lkdGggLSBib3JkZXJzUGx1c1BhZGRpbmc7CisgICAgICAgICAgICBpbnQgcHJlZmVycmVk
TWluV2lkdGggPSBtX21pbldpZHRoIC0gYm9yZGVyc1BsdXNQYWRkaW5nOworICAgICAgICAgICAg
aW50IGF2YWlsYWJsZVdpZHRoID0gYXZhaWxhYmxlU3BhY2UgLSBsZWZ0VmFsdWU7ICAgICAgICAg
ICAgCisgICAgICAgICAgICB3aWR0aFZhbHVlID0gbWluKG1heChwcmVmZXJyZWRNaW5XaWR0aCwg
YXZhaWxhYmxlV2lkdGgpLCBwcmVmZXJyZWRXaWR0aCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJpZ2h0VmFsdWUgPSAgYXZhaWxhYmxlU3BhY2UgLSAobGVmdFZhbHVlICsgd2lkdGhWYWx1
ZSk7CisgICAgICAgIH0gZWxzZSBpZiAobGVmdElzQXV0byAmJiAhd2lkdGguaXNBdXRvKCkgJiYg
IXJpZ2h0SXNBdXRvKSB7CisgICAgICAgICAgICAvLyBSVUxFIDQ6IChzb2x2ZSBmb3IgbGVmdCkK
KyAgICAgICAgICAgIHdpZHRoVmFsdWUgPSBjYWxjQ29udGVudEJveFdpZHRoKHdpZHRoLmNhbGNW
YWx1ZShjb250YWluZXJXaWR0aCkpOworICAgICAgICAgICAgcmlnaHRWYWx1ZSA9IHJpZ2h0LmNh
bGNWYWx1ZShjb250YWluZXJXaWR0aCk7CisgICAgICAgICAgICBsZWZ0VmFsdWUgPSBhdmFpbGFi
bGVTcGFjZSAtIChyaWdodFZhbHVlICsgd2lkdGhWYWx1ZSk7CisgICAgICAgIH0gZWxzZSBpZiAo
IWxlZnRJc0F1dG8gJiYgd2lkdGhJc0F1dG8gJiYgIXJpZ2h0SXNBdXRvKSB7CisgICAgICAgICAg
ICAvLyBSVUxFIDU6IChzb2x2ZSBmb3Igd2lkdGgpICAgICAgICAgICAgCisgICAgICAgICAgICBs
ZWZ0VmFsdWUgPSBsZWZ0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCk7CisgICAgICAgICAgICBy
aWdodFZhbHVlID0gcmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRoKTsKKyAgICAgICAgICAg
IHdpZHRoVmFsdWUgPSBhdmFpbGFibGVTcGFjZSAtIChyaWdodFZhbHVlICsgbGVmdFZhbHVlKTsK
KyAgICAgICAgfSBlbHNlIGlmICghbGVmdElzQXV0byYmICF3aWR0aElzQXV0byAmJiByaWdodElz
QXV0bykgeworICAgICAgICAgICAgLy8gUlVMRSA2OiAoc29sdmUgZm9yIHJpZ2h0KQorICAgICAg
ICAgICAgbGVmdFZhbHVlID0gbGVmdC5jYWxjVmFsdWUoY29udGFpbmVyV2lkdGgpOworICAgICAg
ICAgICAgd2lkdGhWYWx1ZSA9IGNhbGNDb250ZW50Qm94V2lkdGgod2lkdGguY2FsY1ZhbHVlKGNv
bnRhaW5lcldpZHRoKSk7CisgICAgICAgICAgICByaWdodFZhbHVlID0gYXZhaWxhYmxlU3BhY2Ug
LSAobGVmdFZhbHVlICsgd2lkdGhWYWx1ZSk7CiAgICAgICAgIH0KLQotICAgICAgICByID0gc3Rh
dGljX2Rpc3RhbmNlOwotICAgIH0KLQotICAgIGNhbGNBYnNvbHV0ZUhvcml6b250YWxWYWx1ZXMo
V2lkdGgsIGNiLCBjdywgcGFiLCBzdGF0aWNfZGlzdGFuY2UsIGwsIHIsIG1fd2lkdGgsIG1fbWFy
Z2luTGVmdCwgbV9tYXJnaW5SaWdodCwgbV94KTsKLQotICAgIC8vIEF2b2lkIGRvaW5nIGFueSB3
b3JrIGluIHRoZSBjb21tb24gY2FzZSAod2hlcmUgdGhlIHZhbHVlcyBvZiBtaW4td2lkdGggYW5k
IG1heC13aWR0aCBhcmUgdGhlaXIgZGVmYXVsdHMpLgotICAgIGludCBtaW5XID0gbV93aWR0aCwg
bWluTUwsIG1pbk1SLCBtaW5YOwotICAgIGNhbGNBYnNvbHV0ZUhvcml6b250YWxWYWx1ZXMoTWlu
V2lkdGgsIGNiLCBjdywgcGFiLCBzdGF0aWNfZGlzdGFuY2UsIGwsIHIsIG1pblcsIG1pbk1MLCBt
aW5NUiwgbWluWCk7Ci0KLSAgICBpbnQgbWF4VyA9IG1fd2lkdGgsIG1heE1MLCBtYXhNUiwgbWF4
WDsKLSAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0
aCkKLSAgICAgICAgY2FsY0Fic29sdXRlSG9yaXpvbnRhbFZhbHVlcyhNYXhXaWR0aCwgY2IsIGN3
LCBzdGF0aWNfZGlzdGFuY2UsIHBhYiwgbCwgciwgbWF4VywgbWF4TUwsIG1heE1SLCBtYXhYKTsK
LQotICAgIGlmIChtX3dpZHRoID4gbWF4VykgewotICAgICAgICBtX3dpZHRoID0gbWF4VzsKLSAg
ICAgICAgbV9tYXJnaW5MZWZ0ID0gbWF4TUw7Ci0gICAgICAgIG1fbWFyZ2luUmlnaHQgPSBtYXhN
UjsKLSAgICAgICAgbV94ID0gbWF4WDsKICAgICB9CiAgICAgCi0gICAgaWYgKG1fd2lkdGggPCBt
aW5XKSB7Ci0gICAgICAgIG1fd2lkdGggPSBtaW5XOwotICAgICAgICBtX21hcmdpbkxlZnQgPSBt
aW5NTDsKLSAgICAgICAgbV9tYXJnaW5SaWdodCA9IG1pbk1SOwotICAgICAgICBtX3ggPSBtaW5Y
OwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWxWYWx1
ZXMoV2lkdGhUeXBlIHdpZHRoVHlwZSwgUmVuZGVyT2JqZWN0KiBjYiwgaW50IGN3LCBpbnQgcGFi
LCBpbnQgc3RhdGljX2Rpc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGwsIGludCByLCBpbnQmIHcsIGludCYgbWwsIGludCYgbXIsIGludCYg
eCkKLXsKLSAgICBjb25zdCBpbnQgQVVUTyA9IC02NjY2NjY7Ci0gICAgdyA9IG1sID0gbXIgPSBB
VVRPOwotCi0gICAgaWYgKCFzdHlsZSgpLT5tYXJnaW5MZWZ0KCkuaXNBdXRvKCkpCi0gICAgICAg
IG1sID0gc3R5bGUoKS0+bWFyZ2luTGVmdCgpLmNhbGNWYWx1ZShjdyk7Ci0gICAgaWYgKCFzdHls
ZSgpLT5tYXJnaW5SaWdodCgpLmlzQXV0bygpKQotICAgICAgICBtciA9IHN0eWxlKCktPm1hcmdp
blJpZ2h0KCkuY2FsY1ZhbHVlKGN3KTsKLQotICAgIExlbmd0aCB3aWR0aDsKLSAgICBpZiAod2lk
dGhUeXBlID09IFdpZHRoKQotICAgICAgICB3aWR0aCA9IHN0eWxlKCktPndpZHRoKCk7Ci0gICAg
ZWxzZSBpZiAod2lkdGhUeXBlID09IE1pbldpZHRoKQotICAgICAgICB3aWR0aCA9IHN0eWxlKCkt
Pm1pbldpZHRoKCk7Ci0gICAgZWxzZQotICAgICAgICB3aWR0aCA9IHN0eWxlKCktPm1heFdpZHRo
KCk7CisgICAgLy8gRklYTUU6IFRISVMgU0VFTVMgV1JPTkcuICBJZiBpcyBjb3JyZWN0LCB3aGF0
IGlzIHRoZSBwb2ludCBvZiBhbHdheXMgCisgICAgLy8gY2FsY3VsYXRpbmcgYm90aCAnbGVmdCcg
YW5kICdyaWdodCcgaWYgb25seSAnbGVmdCcgaXMgZXZlciB1c2VkLgorICAgIHhQb3MgPSBsZWZ0
VmFsdWUgKyBtYXJnaW5MZWZ0VmFsdWUgKyBjYi0+Ym9yZGVyTGVmdCgpOworfQorCit2b2lkIFJl
bmRlckJveDo6Y2FsY0Fic29sdXRlSG9yaXpvbnRhbFJlcGxhY2VkKCkKK3sgICAKKyAgICAvLyBU
aGUgZm9sbG93aW5nIGlzIGJhc2VkIG9mZiBvZiB0aGUgVzNDIFdvcmtpbmcgRHJhZnQgZnJvbSBK
dW5lIDEzLCAyMDA1IG9mCisgICAgLy8gQ1NTIDIuMTogU2VjdGlvbiAxMC4zLjggIkFic29sdXRs
eSBwb3NpdGlvbmVkLCByZXBsYWNlZCBlbGVtZW50cyIKKyAgICAvLyA8aHR0cDovL3d3dy53My5v
cmcvVFIvMjAwNS9XRC1DU1MyMS0yMDA1MDYxMy92aXN1ZGV0Lmh0bWwjYWJzLXJlcGxhY2VkLXdp
ZHRoPgorICAgIC8vIChudW1iZXJlZCBjb21tZW50cyBjb3JyZXNwb25kIHRvIG51bWJlcnMgaW4g
c3BlYykKKyAgICAKKyAgICAKKyAgICAvLyBXZSBkb24ndCB1c2UgY29udGFpbmluZ0Jsb2NrKCks
IHNpbmNlIHdlIG1heSBiZSBwb3NpdGlvbmVkIGJ5IGFuIGVuY2xvc2luZyByZWxwb3NpdGlvbmVk
IGlubGluZS4KKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIGNiID0gY29udGFpbmVyKCk7CisgICAg
Y29uc3QgaW50IGNvbnRhaW5lcldpZHRoID0gY29udGFpbmluZ0Jsb2NrV2lkdGgoKSArIGNiLT5w
YWRkaW5nTGVmdCgpICsgY2ItPnBhZGRpbmdSaWdodCgpOworICAgIAorICAgIC8vIFZhcmlhYmxl
cyB0byBzb2x2ZS4KKyAgICBMZW5ndGggbGVmdCA9IHN0eWxlKCktPmxlZnQoKTsKKyAgICBMZW5n
dGggcmlnaHQgPSBzdHlsZSgpLT5yaWdodCgpOworICAgIExlbmd0aCBtYXJnaW5MZWZ0ID0gc3R5
bGUoKS0+bWFyZ2luTGVmdCgpOworICAgIExlbmd0aCBtYXJnaW5SaWdodCA9IHN0eWxlKCktPm1h
cmdpblJpZ2h0KCk7CisgICAgCisgICAgaW50IGxlZnRWYWx1ZTsKKyAgICBpbnQgcmlnaHRWYWx1
ZTsKKworCisgICAgLy8gMTAuMy44CisgICAgLy8gMS4gVGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRo
JyBpcyBkZXRlcm1pbmVkIGFzIGZvciBpbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMuCisgICAgCisg
ICAgLy8gTk9URTogVGhpcyB2YWx1ZSBvZiB3aWR0aCBpcyBGSU5BTCBpbiB0aGF0IHRoZSBtaW4v
bWF4IHdpZHRoIGNhbGN1bGF0aW9ucworICAgIC8vIGFyZSBkZWFsdCB3aXRoIGluIGNhbGNSZXBs
YWNlZFdpZHRoKCkuICBUaGlzIG1lYW5zIHRoYXQgdGhlIHN0ZXBzIHRvIHByb2R1Y2UKKyAgICAv
LyBjb3JyZWN0IG1heC9taW4gaW4gdGhlIG5vbi1yZXBsYWNlZCB2ZXJzaW9uLCBhcmUgbm90IG5l
Y2Vzc2FyeS4KKyAgICBtX3dpZHRoID0gY2FsY1JlcGxhY2VkV2lkdGgoKSArIGJvcmRlckxlZnQo
KSArIGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nTGVmdCgpICsgcGFkZGluZ1JpZ2h0KCk7CisgICAg
Y29uc3QgaW50IGF2YWlsYWJsZVNwYWNlID0gY29udGFpbmVyV2lkdGggLSBtX3dpZHRoOworCisg
ICAgLy8gMi4gSWYgYm90aCAnbGVmdCcgYW5kICdyaWdodCcgaGF2ZSB0aGUgdmFsdWUgJ2F1dG8n
LCB0aGVuIGlmICdkaXJlY3Rpb24nIG9mIAorICAgIC8vIHRoZSBjb250YWluaW5nIGJsb2NrIGlz
ICdsdHInLCBzZXQgJ2xlZnQnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb247IGVsc2UgaWYgCisgICAg
Ly8gJ2RpcmVjdGlvbicgaXMgJ3J0bCcsIHNldCAncmlnaHQnIHRvIHRoZSBzdGF0aWMgcG9zaXRp
b24uIAorICAgIGlmIChsZWZ0LmlzQXV0bygpICYmIHJpZ2h0LmlzQXV0bygpKSB7CisgICAgICAg
IC8vIEZJWE1FOiBzaG91bGQgdGhpcyBiZSBjYiBvciBwYXJlbnQoKSBmb3IgdGV4dC1kaXJlY3Rp
b24/CisgICAgICAgIGlmIChwYXJlbnQoKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7
CisgICAgICAgICAgICAvLyAnbV9zdGF0aWNYJyBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gc2V0
IHRocm91Z2ggbGF5b3V0IG9mIHRoZSBwYXJlbnQuCisgICAgICAgICAgICBpbnQgc3RhdGljUG9z
aXRpb24gPSBtX3N0YXRpY1ggLSBjYi0+Ym9yZGVyTGVmdCgpOworICAgICAgICAgICAgZm9yIChS
ZW5kZXJPYmplY3QqIHBvID0gcGFyZW50KCk7IHBvICYmIHBvICE9IGNiOyBwbyA9IHBvLT5wYXJl
bnQoKSkKKyAgICAgICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiArPSBwby0+eFBvcygpOwogCi0g
ICAgaWYgKCF3aWR0aC5pc0ludHJpbnNpY09yQXV0bygpKQotICAgICAgICB3ID0gY2FsY0NvbnRl
bnRCb3hXaWR0aCh3aWR0aC5jYWxjVmFsdWUoY3cpKTsKLSAgICBlbHNlIGlmIChpc1JlcGxhY2Vk
KCkpCi0gICAgICAgIHcgPSBjYWxjUmVwbGFjZWRXaWR0aCgpOwotCi0gICAgaWYgKGwgIT0gQVVU
TyAmJiB3ICE9IEFVVE8gJiYgciAhPSBBVVRPKSB7Ci0gICAgICAgIC8vIGxlZnQsIHdpZHRoLCBy
aWdodCBhbGwgZ2l2ZW4sIHBsYXkgd2l0aCBtYXJnaW5zCi0gICAgICAgIGludCBvdCA9IGwgKyB3
ICsgciArIHBhYjsKLQotICAgICAgICBpZiAobWw9PUFVVE8gJiYgbXI9PUFVVE8pIHsKLSAgICAg
ICAgICAgIC8vIGJvdGggbWFyZ2lucyBhdXRvLCBzb2x2ZSBmb3IgZXF1YWxpdHkKLSAgICAgICAg
ICAgIG1sID0gKGN3IC0gb3QpLzI7Ci0gICAgICAgICAgICBtciA9IGN3IC0gb3QgLSBtbDsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlIGlmIChtbD09QVVUTykKLSAgICAgICAgICAgIC8vIHNvbHZl
IGZvciBsZWZ0IG1hcmdpbgotICAgICAgICAgICAgbWwgPSBjdyAtIG90IC0gbXI7Ci0gICAgICAg
IGVsc2UgaWYgKG1yPT1BVVRPKQotICAgICAgICAgICAgLy8gc29sdmUgZm9yIHJpZ2h0IG1hcmdp
bgotICAgICAgICAgICAgbXIgPSBjdyAtIG90IC0gbWw7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgLy8gb3ZlcmNvbnN0cmFpbmVkLCBzb2x2ZSBhY2NvcmRpbmcgdG8gZGlyCi0gICAgICAg
ICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQotICAgICAgICAgICAgICAgIHIg
PSBjdyAtICggbCArIHcgKyBtbCArIG1yICsgcGFiKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBsID0gY3cgLSAoIHIgKyB3ICsgbWwgKyBtciArIHBhYik7Ci0gICAgICAgIH0K
KyAgICAgICAgICAgIGxlZnQuc2V0VmFsdWUoRml4ZWQsIHN0YXRpY1Bvc2l0aW9uKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJlbmRlck9iamVjdCogcG8gPSBwYXJlbnQoKTsKKyAg
ICAgICAgICAgIC8vICdtX3N0YXRpY1gnIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBzZXQgdGhy
b3VnaCBsYXlvdXQgb2YgdGhlIHBhcmVudC4KKyAgICAgICAgICAgIGludCBzdGF0aWNQb3NpdGlv
biA9IG1fc3RhdGljWCArIGNvbnRhaW5lcldpZHRoICsgY2ItPmJvcmRlclJpZ2h0KCkgLSBwby0+
d2lkdGgoKTsKKyAgICAgICAgICAgIGZvciAoOyBwbyAmJiBwbyAhPSBjYjsgcG8gPSBwby0+cGFy
ZW50KCkpCisgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gLT0gcG8tPnhQb3MoKTsKKwor
ICAgICAgICAgICAgcmlnaHQuc2V0VmFsdWUoRml4ZWQsIHN0YXRpY1Bvc2l0aW9uKTsKKyAgICAg
ICAgfQorICAgIH0gICAgCisgICAgCisgICAgLy8gMy4gSWYgJ2xlZnQnIG9yICdyaWdodCcgYXJl
ICdhdXRvJywgcmVwbGFjZSBhbnkgJ2F1dG8nIG9uICdtYXJnaW4tbGVmdCcgb3IgCisgICAgLy8g
J21hcmdpbi1yaWdodCcgd2l0aCAnMCcuCisgICAgaWYgKGxlZnQuaXNBdXRvKCkgfHwgcmlnaHQu
aXNBdXRvKCkpIHsKKyAgICAgICAgaWYgKG1hcmdpbkxlZnQuaXNBdXRvKCkpCisgICAgICAgICAg
ICBtYXJnaW5MZWZ0LnNldFZhbHVlKEZpeGVkLCAwKTsKKyAgICAgICAgaWYgKG1hcmdpblJpZ2h0
LmlzQXV0bygpKQorICAgICAgICAgICAgbWFyZ2luUmlnaHQuc2V0VmFsdWUoRml4ZWQsIDApOwog
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICAvLyBvbmUgb3IgdHdvIG9mIChsZWZ0LCB3
aWR0aCwgcmlnaHQpIG1pc3NpbmcsIHNvbHZlCi0KLSAgICAgICAgLy8gYXV0byBtYXJnaW5zIGFy
ZSBpZ25vcmVkCi0gICAgICAgIGlmIChtbD09QVVUTykgbWwgPSAwOwotICAgICAgICBpZiAobXI9
PUFVVE8pIG1yID0gMDsKLQotICAgICAgICAvLzEuIHNvbHZlIGxlZnQgJiB3aWR0aC4KLSAgICAg
ICAgaWYgKGwgPT0gQVVUTyAmJiB3ID09IEFVVE8gJiYgciAhPSBBVVRPKSB7Ci0gICAgICAgICAg
ICAvLyBGcm9tIHNlY3Rpb24gMTAuMy43IG9mIHRoZSBDU1MyLjEgc3BlY2lmaWNhdGlvbi4KLSAg
ICAgICAgICAgIC8vICJUaGUgc2hyaW5rLXRvLWZpdCB3aWR0aCBpczogbWluKG1heChwcmVmZXJy
ZWQgbWluaW11bSB3aWR0aCwgYXZhaWxhYmxlIHdpZHRoKSwgcHJlZmVycmVkIHdpZHRoKS4iCi0g
ICAgICAgICAgICB3ID0ga01pbihrTWF4KG1fbWluV2lkdGggLSBwYWIsIGN3IC0gKHIgKyBtbCAr
IG1yICsgcGFiKSksIG1fbWF4V2lkdGggLSBwYWIpOwotICAgICAgICAgICAgbCA9IGN3IC0gKHIg
KyB3ICsgbWwgKyBtciArIHBhYik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQorICAgIAogCi0g
ICAgICAgIC8vMi4gc29sdmUgbGVmdCAmIHJpZ2h0LiB1c2Ugc3RhdGljIHBvc2l0aW9uaW5nLgot
ICAgICAgICBpZiAobCA9PSBBVVRPICYmIHcgIT0gQVVUTyAmJiByID09IEFVVE8pIHsKLSAgICAg
ICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKT09UlRMKSB7Ci0gICAgICAgICAgICAgICAg
ciA9IHN0YXRpY19kaXN0YW5jZTsKLSAgICAgICAgICAgICAgICBsID0gY3cgLSAociArIHcgKyBt
bCArIG1yICsgcGFiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgIGwgPSBzdGF0aWNfZGlzdGFuY2U7Ci0gICAgICAgICAgICAgICAgciA9IGN3IC0g
KGwgKyB3ICsgbWwgKyBtciArIHBhYik7CisgICAgLy8gNC4gSWYgYXQgdGhpcyBwb2ludCBib3Ro
ICdtYXJnaW4tbGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIGFyZSBzdGlsbCAnYXV0bycsIAorICAg
IC8vIHNvbHZlIHRoZSBlcXVhdGlvbiB1bmRlciB0aGUgZXh0cmEgY29uc3RyYWludCB0aGF0IHRo
ZSB0d28gbWFyZ2lucyBtdXN0IGdldCAKKyAgICAvLyBlcXVhbCB2YWx1ZXMsIHVubGVzcyB0aGlz
IHdvdWxkIG1ha2UgdGhlbSBuZWdhdGl2ZSwgaW4gd2hpY2ggY2FzZSB3aGVuIHRoZSAKKyAgICAv
LyBkaXJlY3Rpb24gb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgKCdydGwnKSwgc2V0
ICdtYXJnaW4tbGVmdCcgCisgICAgLy8gKCdtYXJnaW4tcmlnaHQnKSB0byB6ZXJvIGFuZCBzb2x2
ZSBmb3IgJ21hcmdpbi1yaWdodCcgKCdtYXJnaW4tbGVmdCcpLgorICAgIGlmIChtYXJnaW5MZWZ0
LmlzQXV0bygpICYmIG1hcmdpblJpZ2h0LmlzQXV0bygpKSB7CisgICAgICAgIC8vICdsZWZ0JyBh
bmQgJ3JpZ2h0JyBjYW5ub3QgYmUgJ2F1dG8nIGR1ZSB0byBzdGVwIDMKKyAgICAgICAgYXNzZXJ0
KCEobGVmdC5pc0F1dG8oKSAmJiByaWdodC5pc0F1dG8oKSkpOworICAgICAgICAKKyAgICAgICAg
bGVmdFZhbHVlID0gbGVmdC5jYWxjVmFsdWUoY29udGFpbmVyV2lkdGgpOworICAgICAgICByaWdo
dFZhbHVlID0gcmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRoKTsKKyAgICAgICAgCisgICAg
ICAgIGludCBkaWZmZXJlbmNlID0gYXZhaWxhYmxlU3BhY2UgLSAobGVmdFZhbHVlICsgcmlnaHRW
YWx1ZSk7CisgICAgICAgIGlmIChkaWZmZXJlbmNlID4gMCkgeworICAgICAgICAgICAgbV9tYXJn
aW5MZWZ0ID0gZGlmZmVyZW5jZSAvIDI7IC8vIHNwbGl0IHRoZSBkaWZlcmVuY2UKKyAgICAgICAg
ICAgIG1fbWFyZ2luUmlnaHQgPSBtX21hcmdpbkxlZnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHRoaXMgYmUgY2Igb3IgcGFyZW50KCkgZm9yIHRleHQt
ZGlyZWN0aW9uPworICAgICAgICAgICAgaWYgKHBhcmVudCgpLT5zdHlsZSgpLT5kaXJlY3Rpb24o
KSA9PSBMVFIpIHsKKyAgICAgICAgICAgICAgICBtX21hcmdpbkxlZnQgPSAwOworICAgICAgICAg
ICAgICAgIG1fbWFyZ2luUmlnaHQgPSBkaWZmZXJlbmNlOyAgLy8gd2lsbCBiZSBuZWdhdGl2ZQor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX21hcmdpbkxlZnQgPSBkaWZm
ZXJlbmNlOyAgLy8gd2lsbCBiZSBuZWdhdGl2ZQorICAgICAgICAgICAgICAgIG1fbWFyZ2luUmln
aHQgPSAwOwogICAgICAgICAgICAgfQotCi0gICAgICAgIH0gLy8zLiBzb2x2ZSB3aWR0aCAmIHJp
Z2h0LgotICAgICAgICBlbHNlIGlmIChsICE9IEFVVE8gJiYgdyA9PSBBVVRPICYmIHIgPT0gQVVU
TykgewotICAgICAgICAgICAgLy8gRnJvbSBzZWN0aW9uIDEwLjMuNyBvZiB0aGUgQ1NTMi4xIHNw
ZWNpZmljYXRpb24uCi0gICAgICAgICAgICAvLyAiVGhlIHNocmluay10by1maXQgd2lkdGggaXM6
IG1pbihtYXgocHJlZmVycmVkIG1pbmltdW0gd2lkdGgsIGF2YWlsYWJsZSB3aWR0aCksIHByZWZl
cnJlZCB3aWR0aCkuIgotICAgICAgICAgICAgdyA9IGtNaW4oa01heChtX21pbldpZHRoIC0gcGFi
LCBjdyAtIChsICsgbWwgKyBtciArIHBhYikpLCBtX21heFdpZHRoIC0gcGFiKTsKLSAgICAgICAg
ICAgIHIgPSBjdyAtIChsICsgdyArIG1sICsgbXIgKyBwYWIpOwogICAgICAgICB9CisgICAgCisg
ICAgLy8gNS4gSWYgYXQgdGhpcyBwb2ludCB0aGVyZSBpcyBhbiAnYXV0bycgbGVmdCwgc29sdmUg
dGhlIGVxdWF0aW9uIGZvciB0aGF0IHZhbHVlLgorICAgIH0gZWxzZSBpZiAobGVmdC5pc0F1dG8o
KSkgeworICAgICAgICBtX21hcmdpbkxlZnQgPSBtYXJnaW5MZWZ0LmNhbGNWYWx1ZShjb250YWlu
ZXJXaWR0aCk7CisgICAgICAgIG1fbWFyZ2luUmlnaHQgPSBtYXJnaW5SaWdodC5jYWxjVmFsdWUo
Y29udGFpbmVyV2lkdGgpOworICAgICAgICByaWdodFZhbHVlID0gcmlnaHQuY2FsY1ZhbHVlKGNv
bnRhaW5lcldpZHRoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNvbHZlIGZvciAnbGVmdCcKKyAg
ICAgICAgbGVmdFZhbHVlID0gYXZhaWxhYmxlU3BhY2UgLSAocmlnaHRWYWx1ZSArIG1fbWFyZ2lu
TGVmdCArIG1fbWFyZ2luUmlnaHQpOworICAgIH0gZWxzZSBpZiAocmlnaHQuaXNBdXRvKCkpIHsK
KyAgICAgICAgbV9tYXJnaW5MZWZ0ID0gbWFyZ2luTGVmdC5jYWxjVmFsdWUoY29udGFpbmVyV2lk
dGgpOworICAgICAgICBtX21hcmdpblJpZ2h0ID0gbWFyZ2luUmlnaHQuY2FsY1ZhbHVlKGNvbnRh
aW5lcldpZHRoKTsKKyAgICAgICAgbGVmdFZhbHVlID0gbGVmdC5jYWxjVmFsdWUoY29udGFpbmVy
V2lkdGgpOworICAgICAgICAKKyAgICAgICAgLy8gU29sdmUgZm9yICdyaWdodCcKKyAgICAgICAg
cmlnaHRWYWx1ZSA9IGF2YWlsYWJsZVNwYWNlIC0gKGxlZnRWYWx1ZSArIG1fbWFyZ2luTGVmdCAr
IG1fbWFyZ2luUmlnaHQpOworICAgIH0gZWxzZSBpZiAobWFyZ2luTGVmdC5pc0F1dG8oKSkgewor
ICAgICAgICBtX21hcmdpblJpZ2h0ID0gbWFyZ2luUmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lcldp
ZHRoKTsKKyAgICAgICAgbGVmdFZhbHVlID0gbGVmdC5jYWxjVmFsdWUoY29udGFpbmVyV2lkdGgp
OworICAgICAgICByaWdodFZhbHVlID0gcmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRoKTsK
KyAgICAgICAgCisgICAgICAgIC8vIFNvbHZlIGZvciAnbWFyZ2luLWxlZnQnCisgICAgICAgIG1f
bWFyZ2luTGVmdCA9IGF2YWlsYWJsZVNwYWNlIC0gKGxlZnRWYWx1ZSArIHJpZ2h0VmFsdWUgKyBt
X21hcmdpblJpZ2h0KTsKKyAgICB9IGVsc2UgaWYgKG1hcmdpblJpZ2h0LmlzQXV0bygpKSB7Cisg
ICAgICAgIG1fbWFyZ2luTGVmdCA9IG1hcmdpbkxlZnQuY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRo
KTsKKyAgICAgICAgbGVmdFZhbHVlID0gbGVmdC5jYWxjVmFsdWUoY29udGFpbmVyV2lkdGgpOwor
ICAgICAgICByaWdodFZhbHVlID0gcmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRoKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIFNvbHZlIGZvciAnbWFyZ2luLXJpZ2h0JworICAgICAgICBtX21h
cmdpblJpZ2h0ID0gYXZhaWxhYmxlU3BhY2UgLSAobGVmdFZhbHVlICsgcmlnaHRWYWx1ZSArIG1f
bWFyZ2luTGVmdCk7CisgICAgfQorICAgIAorICAgIC8vIDYuIElmIGF0IHRoaXMgcG9pbnQgdGhl
IHZhbHVlcyBhcmUgb3Zlci1jb25zdHJhaW5lZCwgaWdub3JlIHRoZSB2YWx1ZSBmb3IgZWl0aGVy
CisgICAgLy8gJ2xlZnQnIChpbiBjYXNlIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUg
Y29udGFpbmluZyBibG9jayBpcyAncnRsJykgb3IgCisgICAgLy8gJ3JpZ2h0JyAoaW4gY2FzZSAn
ZGlyZWN0aW9uJyBpcyAnbHRyJykgYW5kIHNvbHZlIGZvciB0aGF0IHZhbHVlLgorICAgIGludCB0
b3RhbFdpZHRoID0gbV93aWR0aCArIGxlZnRWYWx1ZSArIHJpZ2h0VmFsdWUgKyAgbV9tYXJnaW5M
ZWZ0ICsgbV9tYXJnaW5SaWdodDsKKyAgICBpZiAodG90YWxXaWR0aCA+IGNvbnRhaW5lcldpZHRo
KSB7CisgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgdGhpcyBiZSBjYiBvciBwYXJlbnQoKSBmb3Ig
dGV4dC1kaXJlY3Rpb24/CisgICAgICAgIGlmIChwYXJlbnQoKS0+c3R5bGUoKS0+ZGlyZWN0aW9u
KCkgPT0gTFRSKQorICAgICAgICAgICAgLy8gRklYTUU6IGlzIGNhbGN1bGF0aW5nIHJpZ2h0VmFs
dWUgdW5uZWNjZXNzYXJ5IGJlY2F1c2UgaXQgaXMgbmV2ZXIgdXNlZD8KKyAgICAgICAgICAgIHJp
Z2h0VmFsdWUgPSBjb250YWluZXJXaWR0aCAtICh0b3RhbFdpZHRoIC0gcmlnaHRWYWx1ZSk7CiAg
ICAgICAgIGVsc2UKLQotICAgICAgICAvLzQuIHNvbHZlIGxlZnQKLSAgICAgICAgaWYgKGw9PUFV
VE8gJiYgdyE9QVVUTyAmJiByIT1BVVRPKQotICAgICAgICAgICAgbCA9IGN3IC0gKHIgKyB3ICsg
bWwgKyBtciArIHBhYik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgLy81LiBzb2x2ZSB3aWR0aAot
ICAgICAgICBpZiAobCE9QVVUTyAmJiB3PT1BVVRPICYmIHIhPUFVVE8pCi0gICAgICAgICAgICB3
ID0gY3cgLSAociArIGwgKyBtbCArIG1yICsgcGFiKTsKLSAgICAgICAgZWxzZQotCi0gICAgICAg
IC8vNi4gc29sdmUgcmlnaHQKLSAgICAgICAgaWYgKGwhPUFVVE8gJiYgdyE9QVVUTyAmJiByPT1B
VVRPKQotICAgICAgICAgICAgciA9IGN3IC0gKGwgKyB3ICsgbWwgKyBtciArIHBhYik7CisgICAg
ICAgICAgICBsZWZ0VmFsdWUgPSBjb250YWluZXJXaWR0aCAtICh0b3RhbFdpZHRoIC0gbGVmdFZh
bHVlKTsKICAgICB9Ci0KLSAgICB3ICs9IHBhYjsKLSAgICB4ID0gbCArIG1sICsgY2ItPmJvcmRl
ckxlZnQoKTsKKyAgICAKKyAgICAvLyBGSVhNRTogdGhpcyBzZWVtcyB3cm9uZyAobGlrZSBpbiBS
VEwgY2FzZXMpCisgICAgbV94ID0gbGVmdFZhbHVlICsgbV9tYXJnaW5MZWZ0ICsgY2ItPmJvcmRl
ckxlZnQoKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZVZlcnRpY2FsKCkKIHsK
LSAgICAvLyBjc3MyIHNwZWMgMTAuNi40ICYgMTAuNi41Ci0KLSAgICAvLyBiYXNlZCBvbgotICAg
IC8vIGh0dHA6Ly93d3cudzMub3JnL1N0eWxlL2NzczItdXBkYXRlcy9SRUMtQ1NTMi0xOTk4MDUx
Mi1lcnJhdGEKLSAgICAvLyAoYWN0dWFsbHkgdXBkYXRlZCAyMDAwLTEwLTI0KQotICAgIC8vIHRo
YXQgaW50cm9kdWNlcyBzdGF0aWMtcG9zaXRpb24gdmFsdWUgZm9yIHRvcCwgbGVmdCAmIHJpZ2h0
Ci0KLSAgICBjb25zdCBpbnQgQVVUTyA9IC02NjY2NjY7Ci0gICAgaW50IHQsIGIsIGNoOwotCi0g
ICAgdCA9IGIgPSBBVVRPOworICAgIGlmIChpc1JlcGxhY2VkKCkpIHsKKyAgICAgICAgY2FsY0Fi
c29sdXRlVmVydGljYWxSZXBsYWNlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAg
aW50IHBhYiA9IGJvcmRlclRvcCgpK2JvcmRlckJvdHRvbSgpK3BhZGRpbmdUb3AoKStwYWRkaW5n
Qm90dG9tKCk7CisgICAgLy8gVGhlIGZvbGxvd2luZyBpcyBiYXNlZCBvZmYgb2YgdGhlIFczQyBX
b3JraW5nIERyYWZ0IGZyb20gSnVuZSAxMywgMjAwNSBvZgorICAgIC8vIENTUyAyLjE6IFNlY3Rp
b24gMTAuNi40ICJBYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyIK
KyAgICAvLyA8aHR0cDovL3d3dy53My5vcmcvVFIvMjAwNS9XRC1DU1MyMS0yMDA1MDYxMy92aXN1
ZGV0Lmh0bWwjYWJzLW5vbi1yZXBsYWNlZC1oZWlnaHQ+CisgICAgLy8gKGJsb2NrLXN0eWxlLWNv
bW1lbnRzIGluIHRoaXMgZnVuY3Rpb24gYW5kIGluIGNhbGNBYnNvbHV0ZVZlcnRpY2FsVmFsdWVz
KCkgCisgICAgLy8gY29ycmVzcG9uZCB0byB0ZXh0IGZyb20gdGhlIHNwZWMpCiAKICAgICAvLyBX
ZSBkb24ndCB1c2UgY29udGFpbmluZ0Jsb2NrKCksIHNpbmNlIHdlIG1heSBiZSBwb3NpdGlvbmVk
IGJ5IGFuIGVuY2xvc2luZyByZWxwb3NpdGlvbmVkIGlubGluZS4KLSAgICBSZW5kZXJPYmplY3Qq
IGNiID0gY29udGFpbmVyKCk7Ci0gICAgaWYgKGNiLT5pc1Jvb3QoKSkgLy8gRXZlbiBpbiBzdHJp
Y3QgbW9kZSAod2hlcmUgd2UgZG9uJ3QgZ3JvdyB0aGUgcm9vdCB0byBmaWxsIHRoZSB2aWV3cG9y
dCkgb3RoZXIgYnJvd3NlcnMKLSAgICAgICAgICAgICAgICAgICAgICAvLyBwb3NpdGlvbiBhcyB0
aG91Z2ggdGhlIHJvb3QgZmlsbHMgdGhlIHZpZXdwb3J0LgotICAgICAgICBjaCA9IGNiLT5hdmFp
bGFibGVIZWlnaHQoKTsKLSAgICBlbHNlCi0gICAgICAgIGNoID0gY2ItPmhlaWdodCgpIC0gY2It
PmJvcmRlclRvcCgpIC0gY2ItPmJvcmRlckJvdHRvbSgpOworICAgIGNvbnN0IFJlbmRlck9iamVj
dCogY2IgPSBjb250YWluZXIoKTsKKyAgICBjb25zdCBpbnQgYm9yZGVyc1BsdXNQYWRkaW5nID0g
Ym9yZGVyVG9wKCkgKyBib3JkZXJCb3R0b20oKSArIHBhZGRpbmdUb3AoKSArIHBhZGRpbmdCb3R0
b20oKTsKKyAgICAKKyAgICAvLyBFdmVuIGluIHN0cmljdCBtb2RlICh3aGVyZSB3ZSBkb24ndCBn
cm93IHRoZSByb290IHRvIGZpbGwgdGhlIHZpZXdwb3J0KSBvdGhlciBicm93c2VycworICAgIC8v
IHBvc2l0aW9uIGFzIHRob3VnaCB0aGUgcm9vdCBmaWxscyB0aGUgdmlld3BvcnQuCisgICAgY29u
c3QgaW50IGNvbnRhaW5lckhlaWdodCA9IGNiLT5pc1Jvb3QoKSA/IGNiLT5hdmFpbGFibGVIZWln
aHQoKSA6IChjYi0+aGVpZ2h0KCkgLSBjYi0+Ym9yZGVyVG9wKCkgLSBjYi0+Ym9yZGVyQm90dG9t
KCkpOworCisgICAgY29uc3QgTGVuZ3RoIG1hcmdpblRvcCA9IHN0eWxlKCktPm1hcmdpblRvcCgp
OworICAgIGNvbnN0IExlbmd0aCBtYXJnaW5Cb3R0b20gPSBzdHlsZSgpLT5tYXJnaW5Cb3R0b20o
KTsKKyAgICBMZW5ndGggdG9wID0gc3R5bGUoKS0+dG9wKCk7CisgICAgTGVuZ3RoIGJvdHRvbSA9
IHN0eWxlKCktPmJvdHRvbSgpOyAgICAKKworICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKKyAg
ICAgKiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgc2VjdGlvbiBhbmQgdGhlIG5leHQsIHRoZSB0
ZXJtICJzdGF0aWMgcG9zaXRpb24iIAorICAgICAqIChvZiBhbiBlbGVtZW50KSByZWZlcnMsIHJv
dWdobHksIHRvIHRoZSBwb3NpdGlvbiBhbiBlbGVtZW50IHdvdWxkIGhhdmUgaGFkIAorICAgICAq
IGluIHRoZSBub3JtYWwgZmxvdy4gTW9yZSBwcmVjaXNlbHksIHRoZSBzdGF0aWMgcG9zaXRpb24g
Zm9yICd0b3AnIGlzIHRoZSAKKyAgICAgKiBkaXN0YW5jZSBmcm9tIHRoZSB0b3AgZWRnZSBvZiB0
aGUgY29udGFpbmluZyBibG9jayB0byB0aGUgdG9wIG1hcmdpbiBlZGdlIAorICAgICAqIG9mIGEg
aHlwb3RoZXRpY2FsIGJveCB0aGF0IHdvdWxkIGhhdmUgYmVlbiB0aGUgZmlyc3QgYm94IG9mIHRo
ZSBlbGVtZW50IGlmIAorICAgICAqIGl0cyAncG9zaXRpb24nIHByb3BlcnR5IGhhZCBiZWVuICdz
dGF0aWMnIGFuZCAnZmxvYXQnIGhhZCBiZWVuICdub25lJy4gVGhlCisgICAgICogdmFsdWUgaXMg
bmVnYXRpdmUgaWYgdGhlIGh5cG90aGV0aWNhbCBib3ggaXMgYWJvdmUgdGhlIGNvbnRhaW5pbmcg
YmxvY2suCisgICAgICoKKyAgICAgKiBCdXQgcmF0aGVyIHRoYW4gYWN0dWFsbHkgY2FsY3VsYXRp
bmcgdGhlIGRpbWVuc2lvbnMgb2YgdGhhdCBoeXBvdGhldGljYWwgCisgICAgICogYm94LCB1c2Vy
IGFnZW50cyBhcmUgZnJlZSB0byBtYWtlIGEgZ3Vlc3MgYXQgaXRzIHByb2JhYmxlIHBvc2l0aW9u
LgorICAgICAqCisgICAgICogRm9yIHRoZSBwdXJwb3NlcyBvZiBjYWxjdWxhdGluZyB0aGUgc3Rh
dGljIHBvc2l0aW9uLCB0aGUgY29udGFpbmluZyBibG9jaworICAgICAqIG9mIGZpeGVkIHBvc2l0
aW9uZWQgZWxlbWVudHMgaXMgdGhlIGluaXRpYWwgY29udGFpbmluZyBibG9jayBpbnN0ZWFkIG9m
IAorICAgICAqIHRoZSB2aWV3cG9ydC4KKyAgICBcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyAg
ICBpZiAodG9wLmlzQXV0bygpICYmIGJvdHRvbS5pc0F1dG8oKSkgeworICAgICAgICAvLyBtX3N0
YXRpY1kgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIHNldCB0aHJvdWdoIGxheW91dCBvZiB0aGUg
cGFyZW50KCkKKyAgICAgICAgaW50IHN0YXRpY1RvcCA9IG1fc3RhdGljWSAtIGNiLT5ib3JkZXJU
b3AoKTsgCisgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBwbyA9IHBhcmVudCgpOyBwbyAmJiBw
byAhPSBjYjsgcG8gPSBwby0+cGFyZW50KCkpCisgICAgICAgICAgICBzdGF0aWNUb3AgKz0gcG8t
PnlQb3MoKTsKKyAgICAgICAgICAgIAorICAgICAgICB0b3Auc2V0VmFsdWUoRml4ZWQsIHN0YXRp
Y1RvcCk7CisgICAgfQogCi0gICAgaWYgKCFzdHlsZSgpLT50b3AoKS5pc0F1dG8oKSkKLSAgICAg
ICAgdCA9IHN0eWxlKCktPnRvcCgpLmNhbGNWYWx1ZShjaCk7Ci0gICAgaWYgKCFzdHlsZSgpLT5i
b3R0b20oKS5pc0F1dG8oKSkKLSAgICAgICAgYiA9IHN0eWxlKCktPmJvdHRvbSgpLmNhbGNWYWx1
ZShjaCk7CisgICAgLy8gTmVlZGVkIHRvIGNvbXB1dGUgb3ZlcmZsb3cuCisgICAgaW50IGhlaWdo
dDsKKyAgICAKKyAgICAvLyBDYWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlvbiB2YWx1ZXMgZm9y
ICdoZWlnaHQnIGNhc2UuCisgICAgY2FsY0Fic29sdXRlVmVydGljYWxWYWx1ZXMoc3R5bGUoKS0+
aGVpZ2h0KCksIGNiLCBjb250YWluZXJIZWlnaHQsIGJvcmRlcnNQbHVzUGFkZGluZywgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wLCBib3R0b20sIG1hcmdpblRvcCwgbWFyZ2lu
Qm90dG9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCwgbV9tYXJnaW5U
b3AsIG1fbWFyZ2luQm90dG9tLCBtX3kpOwogCi0gICAgaW50IGgsIG10LCBtYiwgeTsKLSAgICBj
YWxjQWJzb2x1dGVWZXJ0aWNhbFZhbHVlcyhIZWlnaHQsIGNiLCBjaCwgcGFiLCB0LCBiLCBoLCBt
dCwgbWIsIHkpOwogCi0gICAgLy8gQXZvaWQgZG9pbmcgYW55IHdvcmsgaW4gdGhlIGNvbW1vbiBj
YXNlICh3aGVyZSB0aGUgdmFsdWVzIG9mIG1pbi1oZWlnaHQgYW5kIG1heC1oZWlnaHQgYXJlIHRo
ZWlyIGRlZmF1bHRzKS4KLSAgICBpbnQgbWluSCA9IGgsIG1pbk1ULCBtaW5NQiwgbWluWTsKLSAg
ICBjYWxjQWJzb2x1dGVWZXJ0aWNhbFZhbHVlcyhNaW5IZWlnaHQsIGNiLCBjaCwgcGFiLCB0LCBi
LCBtaW5ILCBtaW5NVCwgbWluTUIsIG1pblkpOworICAgIC8vIEF2b2lkIGRvaW5nIGFueSB3b3Jr
IGluIHRoZSBjb21tb24gY2FzZSAod2hlcmUgdGhlIHZhbHVlcyBvZiBtaW4taGVpZ2h0IGFuZCBt
YXgtaGVpZ2h0IGFyZSB0aGVpciBkZWZhdWx0cykuICAgIAorICAgIC8vIENhbGN1bGF0ZSBjb25z
dHJhaW50IGVxdWF0aW9uIHZhbHVlcyBmb3IgJ21heC1oZWlnaHQnIGNhc2UuCisgICAgaWYgKHN0
eWxlKCktPm1heEhlaWdodCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKSB7CisgICAgICAg
IGludCBtYXhIZWlnaHQ7CisgICAgICAgIGludCBtYXhNYXJnaW5Ub3A7CisgICAgICAgIGludCBt
YXhNYXJnaW5Cb3R0b207CisgICAgICAgIGludCBtYXhZUG9zOwogCi0gICAgaW50IG1heEggPSBo
LCBtYXhNVCwgbWF4TUIsIG1heFk7Ci0gICAgaWYgKHN0eWxlKCktPm1heEhlaWdodCgpLnZhbHVl
KCkgIT0gdW5kZWZpbmVkTGVuZ3RoKQotICAgICAgICBjYWxjQWJzb2x1dGVWZXJ0aWNhbFZhbHVl
cyhNYXhIZWlnaHQsIGNiLCBjaCwgcGFiLCB0LCBiLCBtYXhILCBtYXhNVCwgbWF4TUIsIG1heFkp
OworICAgICAgICBjYWxjQWJzb2x1dGVWZXJ0aWNhbFZhbHVlcyhzdHlsZSgpLT5tYXhIZWlnaHQo
KSwgY2IsIGNvbnRhaW5lckhlaWdodCwgYm9yZGVyc1BsdXNQYWRkaW5nLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b3AsIGJvdHRvbSwgbWFyZ2luVG9wLCBtYXJnaW5Cb3R0
b20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodCwgbWF4TWFy
Z2luVG9wLCBtYXhNYXJnaW5Cb3R0b20sIG1heFlQb3MpOwogCi0gICAgaWYgKGggPiBtYXhIKSB7
Ci0gICAgICAgIGggPSBtYXhIOwotICAgICAgICBtdCA9IG1heE1UOwotICAgICAgICBtYiA9IG1h
eE1COwotICAgICAgICB5ID0gbWF4WTsKKyAgICAgICAgIGlmIChoZWlnaHQgPiBtYXhIZWlnaHQp
IHsKKyAgICAgICAgICAgIGhlaWdodCA9IG1heEhlaWdodDsKKyAgICAgICAgICAgIG1fbWFyZ2lu
VG9wID0gbWF4TWFyZ2luVG9wOworICAgICAgICAgICAgbV9tYXJnaW5Cb3R0b20gPSBtYXhNYXJn
aW5Cb3R0b207CisgICAgICAgICAgICBtX3kgPSBtYXhZUG9zOworICAgICAgICB9CiAgICAgfQot
ICAgIAotICAgIGlmIChoIDwgbWluSCkgewotICAgICAgICBoID0gbWluSDsKLSAgICAgICAgbXQg
PSBtaW5NVDsKLSAgICAgICAgbWIgPSBtaW5NQjsKLSAgICAgICAgeSA9IG1pblk7CisKKyAgICAv
LyBDYWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlvbiB2YWx1ZXMgZm9yICdtaW4taGVpZ2h0JyBj
YXNlLgorICAgIGlmIChzdHlsZSgpLT5taW5IZWlnaHQoKS52YWx1ZSgpKSB7CisgICAgICAgIGlu
dCBtaW5IZWlnaHQ7CisgICAgICAgIGludCBtaW5NYXJnaW5Ub3A7CisgICAgICAgIGludCBtaW5N
YXJnaW5Cb3R0b207CisgICAgICAgIGludCBtaW5ZUG9zOworICAgICAgICAKKyAgICAgICAgY2Fs
Y0Fic29sdXRlVmVydGljYWxWYWx1ZXMoc3R5bGUoKS0+bWluSGVpZ2h0KCksIGNiLCBjb250YWlu
ZXJIZWlnaHQsIGJvcmRlcnNQbHVzUGFkZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9wLCBib3R0b20sIG1hcmdpblRvcCwgbWFyZ2luQm90dG9tLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQsIG1pbk1hcmdpblRvcCwgbWluTWFy
Z2luQm90dG9tLCBtaW5ZUG9zKTsKKworICAgICAgICBpZiAoaGVpZ2h0IDwgbWluSGVpZ2h0KSB7
CisgICAgICAgICAgICBoZWlnaHQgPSBtaW5IZWlnaHQ7CisgICAgICAgICAgICBtX21hcmdpblRv
cCA9IG1pbk1hcmdpblRvcDsKKyAgICAgICAgICAgIG1fbWFyZ2luQm90dG9tID0gbWluTWFyZ2lu
Qm90dG9tOworICAgICAgICAgICAgbV95ID0gbWluWVBvczsKKyAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICAvLyBJZiBvdXIgbmF0dXJhbCBoZWlnaHQgZXhjZWVkcyB0aGUgbmV3IGhlaWdodCBv
bmNlIHdlJ3ZlIHNldCBpdCwgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byB1cGRhdGUKLSAg
ICAvLyBvdmVyZmxvdyB0byB0cmFjayB0aGUgc3BpbGxvdXQuCi0gICAgaWYgKG1faGVpZ2h0ID4g
aCkKKyAgICAvLyBJZiBvdXIgbmF0dXJhbCBoZWlnaHQgZXhjZWVkcyB0aGUgbmV3IGhlaWdodCBv
bmNlIHdlJ3ZlIHNldCBpdCwgdGhlbiB3ZQorICAgIC8vIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHVw
ZGF0ZSBvdmVyZmxvdyB0byB0cmFjayB0aGUgc3BpbGxvdXQuCisgICAgaWYgKG1faGVpZ2h0ID4g
aGVpZ2h0KQogICAgICAgICBzZXRPdmVyZmxvd0hlaWdodChtX2hlaWdodCk7Ci0gICAgICAgIAot
ICAgIC8vIFNldCBvdXIgZmluYWwgdmFsdWVzLgotICAgIG1faGVpZ2h0ID0gaDsKLSAgICBtX21h
cmdpblRvcCA9IG10OwotICAgIG1fbWFyZ2luQm90dG9tID0gbWI7Ci0gICAgbV95ID0geTsKKyAg
ICAKKyAgICBtX2hlaWdodCA9IGhlaWdodDsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNv
bHV0ZVZlcnRpY2FsVmFsdWVzKEhlaWdodFR5cGUgaGVpZ2h0VHlwZSwgUmVuZGVyT2JqZWN0KiBj
YiwgaW50IGNoLCBpbnQgcGFiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgdCwgaW50IGIsIGludCYgaCwgaW50JiBtdCwgaW50JiBtYiwgaW50JiB5KQot
ewotICAgIGNvbnN0IGludCBBVVRPID0gLTY2NjY2NjsKLSAgICBoID0gbXQgPSBtYiA9IEFVVE87
Ci0KLSAgICBpZiAoIXN0eWxlKCktPm1hcmdpblRvcCgpLmlzQXV0bygpKQotICAgICAgICBtdCA9
IHN0eWxlKCktPm1hcmdpblRvcCgpLmNhbGNWYWx1ZShjaCk7Ci0gICAgaWYgKCFzdHlsZSgpLT5t
YXJnaW5Cb3R0b20oKS5pc0F1dG8oKSkKLSAgICAgICAgbWIgPSBzdHlsZSgpLT5tYXJnaW5Cb3R0
b20oKS5jYWxjVmFsdWUoY2gpOwotCi0gICAgTGVuZ3RoIGhlaWdodDsKLSAgICBpZiAoaGVpZ2h0
VHlwZSA9PSBIZWlnaHQpCi0gICAgICAgIGhlaWdodCA9IHN0eWxlKCktPmhlaWdodCgpOwotICAg
IGVsc2UgaWYgKGhlaWdodFR5cGUgPT0gTWluSGVpZ2h0KQotICAgICAgICBoZWlnaHQgPSBzdHls
ZSgpLT5taW5IZWlnaHQoKTsKLSAgICBlbHNlCi0gICAgICAgIGhlaWdodCA9IHN0eWxlKCktPm1h
eEhlaWdodCgpOwordm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZVZlcnRpY2FsVmFsdWVzKExl
bmd0aCBoZWlnaHQsIGNvbnN0IFJlbmRlck9iamVjdCogY2IsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBjb250YWluZXJIZWlnaHQsIGNvbnN0
IGludCBib3JkZXJzUGx1c1BhZGRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgTGVuZ3RoIHRvcCwgY29uc3QgTGVuZ3RoIGJvdHRvbSwgY29uc3Qg
TGVuZ3RoIG1hcmdpblRvcCwgY29uc3QgTGVuZ3RoIG1hcmdpbkJvdHRvbSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGhlaWdodFZhbHVlLCBpbnQmIG1h
cmdpblRvcFZhbHVlLCBpbnQmIG1hcmdpbkJvdHRvbVZhbHVlLCBpbnQmIHlQb3MpCit7CisgICAg
Ly8gJ3RvcCcgYW5kICdib3R0b20nIGNhbm5vdCBib3RoIGJlICdhdXRvJyBiZWNhdXNlICd0b3Ag
d291bGQgb2YgYmVlbgorICAgIC8vIGNvbnZlcnRlZCB0byB0aGUgc3RhdGljIHBvc2l0aW9uIGlu
IGNhbGNBYnNvbHV0ZVZlcnRpY2FsKCkKKyAgICBhc3NlcnQoISh0b3AuaXNBdXRvKCkgJiYgYm90
dG9tLmlzQXV0bygpKSk7CisKKyAgICBpbnQgdG9wVmFsdWU7CisgICAgaW50IGJvdHRvbVZhbHVl
OworICAgIGludCBjb250ZW50SGVpZ2h0ID0gbV9oZWlnaHQgLSBib3JkZXJzUGx1c1BhZGRpbmc7
ICAgIAorCisgICAgYm9vbCBoZWlnaHRJc0F1dG8gPSBoZWlnaHQuaXNBdXRvKCk7CisgICAgYm9v
bCB0b3BJc0F1dG8gPSB0b3AuaXNBdXRvKCk7CisgICAgYm9vbCBib3R0b21Jc0F1dG8gPSBib3R0
b20uaXNBdXRvKCk7CisKKyAgICAvLyBIZWlnaHQgaXMgbmV2ZXIgdW5zb2x2ZWQgZm9yIHRhYmxl
cy4KKyAgICBpZiAoaXNUYWJsZSgpICYmIGhlaWdodElzQXV0bykgeworICAgICAgICBoZWlnaHQu
c2V0VmFsdWUoRml4ZWQsIGNvbnRlbnRIZWlnaHQpOworICAgICAgICAvL2hlaWdodFZhbHVlID0g
Y29udGVudEhlaWdodDsKKyAgICAgICAgaGVpZ2h0SXNBdXRvID0gZmFsc2U7CisgICAgfSBlbHNl
IGlmICghaGVpZ2h0SXNBdXRvKSB7CisgICAgICAgIC8vaGVpZ2h0VmFsdWUgPSBjYWxjQ29udGVu
dEJveEhlaWdodChoZWlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCkpOworICAgICAgICBj
b250ZW50SGVpZ2h0ID0gbWluKGNvbnRlbnRIZWlnaHQsIGNhbGNDb250ZW50Qm94SGVpZ2h0KGhl
aWdodC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KSkpOworICAgIH0KIAotICAgIGludCBvdXJI
ZWlnaHQgPSBtX2hlaWdodDsKIAotICAgIGlmIChpc1RhYmxlKCkgJiYgaGVpZ2h0LmlzQXV0bygp
KQotICAgICAgICAvLyBIZWlnaHQgaXMgbmV2ZXIgdW5zb2x2ZWQgZm9yIHRhYmxlcy4gImF1dG8i
IG1lYW5zIHNocmluayB0byBmaXQuICBVc2Ugb3VyCi0gICAgICAgIC8vIGhlaWdodCBpbnN0ZWFk
LgotICAgICAgICBoID0gb3VySGVpZ2h0IC0gcGFiOwotICAgIGVsc2UgaWYgKCFoZWlnaHQuaXNB
dXRvKCkpCi0gICAgewotICAgICAgICBoID0gY2FsY0NvbnRlbnRCb3hIZWlnaHQoaGVpZ2h0LmNh
bGNWYWx1ZShjaCkpOwotICAgICAgICBpZiAob3VySGVpZ2h0IC0gcGFiID4gaCkKLSAgICAgICAg
ICAgIG91ckhlaWdodCA9IGggKyBwYWI7Ci0gICAgfQotICAgIGVsc2UgaWYgKGlzUmVwbGFjZWQo
KSkKLSAgICAgICAgaCA9IGNhbGNSZXBsYWNlZEhlaWdodCgpOwotCi0gICAgaW50IHN0YXRpY190
b3A9MDsKLSAgICBpZiAoKHQgPT0gQVVUTyAmJiBiID09IEFVVE8pIHx8IHN0eWxlKCktPnRvcCgp
LmlzU3RhdGljKCkpIHsKLSAgICAgICAgLy8gY2FsYyBoeXBvdGhldGljYWwgbG9jYXRpb24gaW4g
dGhlIG5vcm1hbCBmbG93Ci0gICAgICAgIC8vIHVzZWQgZm9yIDEpIHRvcD1zdGF0aWMtcG9zaXRp
b24KLSAgICAgICAgLy8gICAgICAgICAgMikgdG9wLCBib3R0b20sIGhlaWdodCBhcmUgYWxsIGF1
dG8gLT4gY2FsYyB0b3AgLT4gMy4KLSAgICAgICAgLy8gICAgICAgICAgMykgcHJlY2FsYyBmb3Ig
Y2FzZSAyIGJlbG93Ci0gICAgICAgIHN0YXRpY190b3AgPSBtX3N0YXRpY1kgLSBjYi0+Ym9yZGVy
VG9wKCk7IC8vIFNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBzZXQgdGhyb3VnaCBsYXlvdXQgb2Yg
dGhlIHBhcmVudCgpLgotICAgICAgICBSZW5kZXJPYmplY3QqIHBvID0gcGFyZW50KCk7Ci0gICAg
ICAgIGZvciAoOyBwbyAmJiBwbyAhPSBjYjsgcG8gPSBwby0+cGFyZW50KCkpCi0gICAgICAgICAg
ICBzdGF0aWNfdG9wICs9IHBvLT55UG9zKCk7Ci0KLSAgICAgICAgaWYgKGggPT0gQVVUTyB8fCBz
dHlsZSgpLT50b3AoKS5pc1N0YXRpYygpKQotICAgICAgICAgICAgdCA9IHN0YXRpY190b3A7Ci0g
ICAgfQotCi0gICAgaWYgKHQgIT0gQVVUTyAmJiBoICE9IEFVVE8gJiYgYiAhPSBBVVRPKSB7Ci0g
ICAgICAgIC8vIHRvcCwgaGVpZ2h0LCBib3R0b20gYWxsIGdpdmVuLCBwbGF5IHdpdGggbWFyZ2lu
cwotICAgICAgICBpbnQgb3QgPSBoICsgdCArIGIgKyBwYWI7Ci0KLSAgICAgICAgaWYgKG10ID09
IEFVVE8gJiYgbWIgPT0gQVVUTykgewotICAgICAgICAgICAgLy8gYm90aCBtYXJnaW5zIGF1dG8s
IHNvbHZlIGZvciBlcXVhbGl0eQotICAgICAgICAgICAgbXQgPSAoY2ggLSBvdCkvMjsKLSAgICAg
ICAgICAgIG1iID0gY2ggLSBvdCAtIG10OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG10
PT1BVVRPKQotICAgICAgICAgICAgLy8gc29sdmUgZm9yIHRvcCBtYXJnaW4KLSAgICAgICAgICAg
IG10ID0gY2ggLSBvdCAtIG1iOwotICAgICAgICBlbHNlIGlmIChtYj09QVVUTykKLSAgICAgICAg
ICAgIC8vIHNvbHZlIGZvciBib3R0b20gbWFyZ2luCi0gICAgICAgICAgICBtYiA9IGNoIC0gb3Qg
LSBtdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgLy8gb3ZlcmNvbnN0cmFpbmVkLCBzb2x2
ZSBmb3IgYm90dG9tCi0gICAgICAgICAgICBiID0gY2ggLSAoaCArIHQgKyBtdCArIG1iICsgcGFi
KTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIG9uZSBvciB0d28gb2YgKHRvcCwgaGVp
Z2h0LCBib3R0b20pIG1pc3NpbmcsIHNvbHZlCisgICAgaWYgKCF0b3BJc0F1dG8gJiYgIWhlaWdo
dElzQXV0byAmJiAhYm90dG9tSXNBdXRvKSB7CisgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAor
ICAgICAgICAgKiBJZiBub25lIG9mIHRoZSB0aHJlZSBhcmUgJ2F1dG8nOiBJZiBib3RoICdtYXJn
aW4tdG9wJyBhbmQgJ21hcmdpbi0KKyAgICAgICAgICogYm90dG9tJyBhcmUgJ2F1dG8nLCBzb2x2
ZSB0aGUgZXF1YXRpb24gdW5kZXIgdGhlIGV4dHJhIGNvbnN0cmFpbnQgdGhhdAorICAgICAgICAg
KiB0aGUgdHdvIG1hcmdpbnMgZ2V0IGVxdWFsIHZhbHVlcy4gSWYgb25lIG9mICdtYXJnaW4tdG9w
JyBvciAnbWFyZ2luLQorICAgICAgICAgKiBib3R0b20nIGlzICdhdXRvJywgc29sdmUgdGhlIGVx
dWF0aW9uIGZvciB0aGF0IHZhbHVlLiBJZiB0aGUgdmFsdWVzIAorICAgICAgICAgKiBhcmUgb3Zl
ci1jb25zdHJhaW5lZCwgaWdub3JlIHRoZSB2YWx1ZSBmb3IgJ2JvdHRvbScgYW5kIHNvbHZlIGZv
ciB0aGF0CisgICAgICAgICAqIHZhbHVlLgorICAgICAgICBcKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gCisg
ICAgICAgIAorICAgICAgICBoZWlnaHRWYWx1ZSA9IGNhbGNDb250ZW50Qm94SGVpZ2h0KGhlaWdo
dC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KSk7CisgICAgICAgIHRvcFZhbHVlID0gdG9wLmNh
bGNWYWx1ZShjb250YWluZXJIZWlnaHQpOworICAgICAgICBib3R0b21WYWx1ZSA9IGJvdHRvbS5j
YWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKyAgICAgICAgCisgICAgICAgIGNvbnN0IGludCBh
dmFpbGFibGVTcGFjZSA9IGNvbnRhaW5lckhlaWdodCAtICh0b3BWYWx1ZSArIGhlaWdodFZhbHVl
ICsgYm90dG9tVmFsdWUgKyBib3JkZXJzUGx1c1BhZGRpbmcpOwogCi0gICAgICAgIC8vIGF1dG8g
bWFyZ2lucyBhcmUgaWdub3JlZAotICAgICAgICBpZiAobXQgPT0gQVVUTykKLSAgICAgICAgICAg
IG10ID0gMDsKLSAgICAgICAgaWYgKG1iID09IEFVVE8pCi0gICAgICAgICAgICBtYiA9IDA7Ci0K
LSAgICAgICAgLy8xLiBzb2x2ZSB0b3AgJiBoZWlnaHQuIHVzZSBjb250ZW50IGhlaWdodC4KLSAg
ICAgICAgaWYgKHQgPT0gQVVUTyAmJiBoID09IEFVVE8gJiYgYiAhPSBBVVRPKSB7Ci0gICAgICAg
ICAgICBoID0gb3VySGVpZ2h0IC0gcGFiOwotICAgICAgICAgICAgdCA9IGNoIC0gKGggKyBiICsg
bXQgKyBtYiArIHBhYik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodCA9PSBBVVRPICYm
IGggIT0gQVVUTyAmJiBiID09IEFVVE8pIC8vMi4gc29sdmUgdG9wICYgYm90dG9tLiB1c2Ugc3Rh
dGljIHBvc2l0aW9uaW5nLgotICAgICAgICB7Ci0gICAgICAgICAgICB0ID0gc3RhdGljX3RvcDsK
LSAgICAgICAgICAgIGIgPSBjaCAtIChoICsgdCArIG10ICsgbWIgKyBwYWIpOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UgaWYgKHQgIT0gQVVUTyAmJiBoID09IEFVVE8gJiYgYiA9PSBBVVRPKSAv
LzMuIHNvbHZlIGhlaWdodCAmIGJvdHRvbS4gdXNlIGNvbnRlbnQgaGVpZ2h0LgotICAgICAgICB7
Ci0gICAgICAgICAgICBoID0gb3VySGVpZ2h0IC0gcGFiOwotICAgICAgICAgICAgYiA9IGNoIC0g
KGggKyB0ICsgbXQgKyBtYiArIHBhYik7CisgICAgICAgIC8vIE1hcmdpbnMgYXJlIG5vdyB0aGUg
b25seSB1bmtub3duCisgICAgICAgIGlmIChtYXJnaW5Ub3AuaXNBdXRvKCkgJiYgbWFyZ2luQm90
dG9tLmlzQXV0bygpKSB7CisgICAgICAgICAgICAvLyBCb3RoIG1hcmdpbnMgYXV0bywgc29sdmUg
Zm9yIGVxdWFsaXR5CisgICAgICAgICAgICBtYXJnaW5Ub3BWYWx1ZSA9IGF2YWlsYWJsZVNwYWNl
IC8gMjsKKyAgICAgICAgICAgIG1hcmdpbkJvdHRvbVZhbHVlID0gbWFyZ2luVG9wVmFsdWU7Cisg
ICAgICAgIH0gZWxzZSBpZiAobWFyZ2luVG9wLmlzQXV0bygpKSB7CisgICAgICAgICAgICAvLyBT
b2x2ZSBmb3IgdG9wIG1hcmdpbgorICAgICAgICAgICAgbWFyZ2luQm90dG9tVmFsdWUgPSBtYXJn
aW5Cb3R0b20uY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCk7CisgICAgICAgICAgICBtYXJnaW5U
b3BWYWx1ZSA9IGF2YWlsYWJsZVNwYWNlIC0gbWFyZ2luQm90dG9tVmFsdWU7CisgICAgICAgIH0g
ZWxzZSBpZiAobWFyZ2luQm90dG9tLmlzQXV0bygpKSB7CisgICAgICAgICAgICAvLyBTb2x2ZSBm
b3IgYm90dG9tIG1hcmdpbgorICAgICAgICAgICAgbWFyZ2luVG9wVmFsdWUgPSBtYXJnaW5Ub3Au
Y2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCk7CisgICAgICAgICAgICBtYXJnaW5Cb3R0b21WYWx1
ZSA9IGF2YWlsYWJsZVNwYWNlIC0gbWFyZ2luVG9wVmFsdWU7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBPdmVyLWNvbnN0cmFpbmVkLCBzb2x2ZSBmb3IgYm90dG9tCisgICAgICAg
ICAgICBtYXJnaW5Ub3BWYWx1ZSA9IG1hcmdpblRvcC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0
KTsKKyAgICAgICAgICAgIG1hcmdpbkJvdHRvbVZhbHVlID0gbWFyZ2luQm90dG9tLmNhbGNWYWx1
ZShjb250YWluZXJIZWlnaHQpOworICAgICAgICAgICAgYm90dG9tVmFsdWUgPSAoYXZhaWxhYmxl
U3BhY2UgKyBib3R0b21WYWx1ZSkgLSBtYXJnaW5Ub3BWYWx1ZSAtIG1hcmdpbkJvdHRvbVZhbHVl
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCisgICAg
ICAgICAqIE90aGVyd2lzZSwgc2V0ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBhbmQg
J21hcmdpbi1ib3R0b20nCisgICAgICAgICAqIHRvIDAsIGFuZCBwaWNrIHRoZSBvbmUgb2YgdGhl
IGZvbGxvd2luZyBzaXggcnVsZXMgdGhhdCBhcHBsaWVzLgorICAgICAgICAgKgorICAgICAgICAg
KiAxLiAndG9wJyBhbmQgJ2hlaWdodCcgYXJlICdhdXRvJyBhbmQgJ2JvdHRvbScgaXMgbm90ICdh
dXRvJywgdGhlbiAgCisgICAgICAgICAqICAgIHRoZSBoZWlnaHQgaXMgYmFzZWQgb24gdGhlIGNv
bnRlbnQsIGFuZCBzb2x2ZSBmb3IgJ3RvcCcuCisgICAgICAgICAqIAorICAgICAgICAgKiAgICAg
ICAgICAgICAgT01JVCBSVUxFIDIgQVMgSVQgU0hPVUxEIE5FVkVSIEJFIEhJVAorICAgICAgICAg
KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKyAgICAgICAgICogMi4gJ3RvcCcgYW5kICdib3R0b20nIGFyZSAnYXV0bycg
YW5kICdoZWlnaHQnIGlzIG5vdCAnYXV0bycsIHRoZW4gCisgICAgICAgICAqICAgIHNldCAndG9w
JyB0byB0aGUgc3RhdGljIHBvc2l0aW9uLCBhbmQgc29sdmUgZm9yICdib3R0b20nLgorICAgICAg
ICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICoKKyAgICAgICAgICogMy4gJ2hlaWdodCcgYW5kICdi
b3R0b20nIGFyZSAnYXV0bycgYW5kICd0b3AnIGlzIG5vdCAnYXV0bycsIHRoZW4KKyAgICAgICAg
ICogICAgdGhlIGhlaWdodCBpcyBiYXNlZCBvbiB0aGUgY29udGVudCwgYW5kIHNvbHZlIGZvciAn
Ym90dG9tJy4KKyAgICAgICAgICogNC4gJ3RvcCcgaXMgJ2F1dG8nLCAnaGVpZ2h0JyBhbmQgJ2Jv
dHRvbScgYXJlIG5vdCAnYXV0bycsIGFuZCAKKyAgICAgICAgICogICAgc29sdmUgZm9yICd0b3An
LgorICAgICAgICAgKiA1LiAnaGVpZ2h0JyBpcyAnYXV0bycsICd0b3AnIGFuZCAnYm90dG9tJyBh
cmUgbm90ICdhdXRvJywgYW5kIAorICAgICAgICAgKiAgICBzb2x2ZSBmb3IgJ2hlaWdodCcuCisg
ICAgICAgICAqIDYuICdib3R0b20nIGlzICdhdXRvJywgJ3RvcCcgYW5kICdoZWlnaHQnIGFyZSBu
b3QgJ2F1dG8nLCBhbmQgCisgICAgICAgICAqICAgIHNvbHZlIGZvciAnYm90dG9tJy4KKyAgICAg
ICAgXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCisKKyAgICAgICAgLy8gQ2FsY3VsYXRlIG1hcmdpbnMsICdhdXRv
JyBtYXJnaW5zIGFyZSBpZ25vcmVkLgorICAgICAgICBtYXJnaW5Ub3BWYWx1ZSA9IG1hcmdpblRv
cC5jYWxjTWluVmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKyAgICAgICAgbWFyZ2luQm90dG9tVmFs
dWUgPSBtYXJnaW5Cb3R0b20uY2FsY01pblZhbHVlKGNvbnRhaW5lckhlaWdodCk7CisgICAgICAg
IAorICAgICAgICBjb25zdCBpbnQgYXZhaWxhYmxlU3BhY2UgPSBjb250YWluZXJIZWlnaHQgLSAo
bWFyZ2luVG9wVmFsdWUgKyBtYXJnaW5Cb3R0b21WYWx1ZSArIGJvcmRlcnNQbHVzUGFkZGluZyk7
CisgICAgICAgIAorICAgICAgICAvLyBVc2UgcnVsZS9jYXNlIHRoYXQgYXBwbGllcy4KKyAgICAg
ICAgaWYgKHRvcElzQXV0byAmJiBoZWlnaHRJc0F1dG8gJiYgIWJvdHRvbUlzQXV0bykgeyAgICAg
CisgICAgICAgICAgICAvLyBSVUxFIDE6IChoZWlnaHQgaXMgY29udGVudCBiYXNlZCwgc29sdmUg
b2YgdG9wKQorICAgICAgICAgICAgaGVpZ2h0VmFsdWUgPSBjb250ZW50SGVpZ2h0OworICAgICAg
ICAgICAgYm90dG9tVmFsdWUgPSBib3R0b20uY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCk7Cisg
ICAgICAgICAgICB0b3BWYWx1ZSA9IGF2YWlsYWJsZVNwYWNlIC0gKGhlaWdodFZhbHVlICsgYm90
dG9tVmFsdWUpOworCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBkZWFkIGNvZGUs
IGFzIGlmIHRvcCBhbmQgYm90dG9tIGFyZSBib3RoICdhdXRvJywgdG9wCisgICAgICAgIC8vIHdp
bGwgYWx3YXlzIGJlIHNldCB0byB0aGUgc3RhdGljIHBvc3Rpb24uICBTZWUgdGhlIGFzc2VydCBh
dCB0b3Agb2YgZnVuY3Rpb24uCisgICAgICAgIC8vIH0gZWxzZSBpZiAodG9wLmlzQXV0bygpICYm
ICFoZWlnaHQuaXNBdXRvKCkgJiYgYm90dG9tLmlzQXV0bygpKSB7CisgICAgICAgIC8vICAgIC8v
IFJVTEUgMjogKHVzZSBzdGF0aWMgcG9zaXRpb25pbmcgZm9yIHRvcCwgc29sdmUgb2YgYm90dG9t
KQorICAgICAgICAvLyAgICBoZWlnaHRWYWx1ZSA9IGhlaWdodC5jYWxjVmFsdWUoY29udGFpbmVy
SGVpZ2h0KTsKKyAgICAgICAgLy8gICAgCisgICAgICAgIC8vICAgIHRvcFZhbHVlID0gc3RhdGlj
VG9wOworICAgICAgICAvLyAgICBib3R0b21WYWx1ZSA9IGNvbnRhaW5lckhlaWdodCAtIChoZWln
aHRWYWx1ZSArIHRvcFZhbHVlICsga25vd24pOworICAgICAgICAgICAgCisgICAgICAgIH0gZWxz
ZSBpZiAoIXRvcElzQXV0byAmJiBoZWlnaHRJc0F1dG8gJiYgYm90dG9tSXNBdXRvKSB7CisgICAg
ICAgICAgICAvLyBSVUxFIDM6IChoZWlnaHQgaXMgY29udGVudCBiYXNlZCwgc29sdmUgb2YgYm90
dG9tKQorICAgICAgICAgICAgdG9wVmFsdWUgPSB0b3AuY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdo
dCk7CisgICAgICAgICAgICBoZWlnaHRWYWx1ZSA9IGNvbnRlbnRIZWlnaHQ7CisgICAgICAgICAg
ICBib3R0b21WYWx1ZSA9IGF2YWlsYWJsZVNwYWNlIC0gKHRvcFZhbHVlICsgaGVpZ2h0VmFsdWUp
OworICAgICAgICB9IGVsc2UgaWYgKHRvcElzQXV0byAmJiAhaGVpZ2h0SXNBdXRvICYmICFib3R0
b21Jc0F1dG8pIHsKKyAgICAgICAgICAgIC8vIFJVTEUgNDogKHNvbHZlIG9mIHRvcCkKKyAgICAg
ICAgICAgIGhlaWdodFZhbHVlID0gY2FsY0NvbnRlbnRCb3hIZWlnaHQoaGVpZ2h0LmNhbGNWYWx1
ZShjb250YWluZXJIZWlnaHQpKTsKKyAgICAgICAgICAgIGJvdHRvbVZhbHVlID0gYm90dG9tLmNh
bGNWYWx1ZShjb250YWluZXJIZWlnaHQpOworICAgICAgICAgICAgdG9wVmFsdWUgPSBhdmFpbGFi
bGVTcGFjZSAtIChoZWlnaHRWYWx1ZSArIGJvdHRvbVZhbHVlKTsKKyAgICAgICAgfSBlbHNlIGlm
ICghdG9wSXNBdXRvICYmIGhlaWdodElzQXV0byAmJiAhYm90dG9tSXNBdXRvKSB7CisgICAgICAg
ICAgICAvLyBSVUxFIDU6IChzb2x2ZSBvZiBoZWlnaHQpCisgICAgICAgICAgICB0b3BWYWx1ZSA9
IHRvcC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKyAgICAgICAgICAgIGJvdHRvbVZhbHVl
ID0gYm90dG9tLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpOworICAgICAgICAgICAgaGVpZ2h0
VmFsdWUgPSBhdmFpbGFibGVTcGFjZSAtICh0b3BWYWx1ZSArIGJvdHRvbVZhbHVlKTsKKyAgICAg
ICAgfSBlbHNlIGlmICghdG9wSXNBdXRvICYmICFoZWlnaHRJc0F1dG8gJiYgYm90dG9tSXNBdXRv
KSB7CisgICAgICAgICAgICAvLyBSVUxFIDQ6IChzb2x2ZSBvZiBib3R0b20pCisgICAgICAgICAg
ICBoZWlnaHRWYWx1ZSA9IGNhbGNDb250ZW50Qm94SGVpZ2h0KGhlaWdodC5jYWxjVmFsdWUoY29u
dGFpbmVySGVpZ2h0KSk7CisgICAgICAgICAgICB0b3BWYWx1ZSA9IHRvcC5jYWxjVmFsdWUoY29u
dGFpbmVySGVpZ2h0KTsKKyAgICAgICAgICAgIGJvdHRvbVZhbHVlID0gYXZhaWxhYmxlU3BhY2Ug
LSAodG9wVmFsdWUgKyBoZWlnaHRWYWx1ZSk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZQotICAg
ICAgICAvLzQuIHNvbHZlIHRvcAotICAgICAgICBpZiAodCA9PSBBVVRPICYmIGggIT0gQVVUTyAm
JiBiICE9IEFVVE8pCi0gICAgICAgICAgICB0ID0gY2ggLSAoaCArIGIgKyBtdCArIG1iICsgcGFi
KTsKLSAgICAgICAgZWxzZQorICAgIH0KIAotICAgICAgICAvLzUuIHNvbHZlIGhlaWdodAotICAg
ICAgICBpZiAodCAhPSBBVVRPICYmIGggPT0gQVVUTyAmJiBiICE9IEFVVE8pCi0gICAgICAgICAg
ICBoID0gY2ggLSAodCArIGIgKyBtdCArIG1iICsgcGFiKTsKLSAgICAgICAgZWxzZQorICAgIC8v
IE1ha2UgZmluYWwgYWRqdXN0bWVudHMgdG8gaGVpZ2h0LgorICAgIGlmICghKGNvbnRlbnRIZWln
aHQgPCBoZWlnaHRWYWx1ZSkgJiYgIShoYXNPdmVyZmxvd0NsaXAoKSAmJiBjb250ZW50SGVpZ2h0
ID4gaGVpZ2h0VmFsdWUpKQorICAgICAgICBoZWlnaHRWYWx1ZSA9IGNvbnRlbnRIZWlnaHQ7CisK
KyAgICAvLyBEbyBub3QgYWxsb3cgdGhlIGhlaWdodCB0byBiZSBuZWdhdGl2ZS4gIFRoaXMgY2Fu
IGhhcHBlbiB3aGVuIHNvbWVvbmUKKyAgICAvLyBzcGVjaWZpZXMgYm90aCB0b3AgYW5kIGJvdHRv
bSBidXQgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaGVpZ2h0IGlzIGxlc3MKKyAgICAvLyB0aGFuIHRv
cCwgZS5nLiwgdG9wOiAyMHB4LCBib3R0b206IDAsIGNvbnRhaW5pbmcgYmxvY2sgaGVpZ2h0IDE2
LgorICAgIGhlaWdodFZhbHVlID0gbWF4KDAsIGhlaWdodFZhbHVlICsgYm9yZGVyc1BsdXNQYWRk
aW5nKTsgICAgCisgICAgCisgICAgLy8gRklYTUU6IFRISVMgU0VFTVMgV1JPTkcuICBXaGF0IGlz
IHRoZSBwb2ludCBvZiBhbHdheXMgY2FsY3VsYXRpbmcgZm9yICdib3R0b20nIGlmIGl0IGlzIG5l
dmVyIHVzZWQ/CisgICAgeVBvcyA9IHRvcFZhbHVlICsgbWFyZ2luVG9wVmFsdWUgKyBjYi0+Ym9y
ZGVyVG9wKCk7Cit9CisKK3ZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0aWNhbFJlcGxh
Y2VkKCkKK3sKKyAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGJhc2VkIG9mZiBvZiB0aGUgVzNDIFdv
cmtpbmcgRHJhZnQgZnJvbSBKdW5lIDEzLCAyMDA1IG9mCisgICAgLy8gQ1NTIDIuMTogU2VjdGlv
biAxMC42LjUgIkFic29sdXRseSBwb3NpdGlvbmVkLCByZXBsYWNlZCBlbGVtZW50cyIKKyAgICAv
LyA8aHR0cDovL3d3dy53My5vcmcvVFIvMjAwNS9XRC1DU1MyMS0yMDA1MDYxMy92aXN1ZGV0Lmh0
bWwjYWJzLXJlcGxhY2VkLWhlaWdodD4KKyAgICAvLyAobnVtYmVyZWQgY29tbWVudHMgY29ycmVz
cG9uZCB0byBudW1iZXJzIGluIHNwZWMpCiAKLSAgICAgICAgLy82LiBzb2x2ZSBib3R0b20KLSAg
ICAgICAgaWYgKHQgIT0gQVVUTyAmJiBoICE9IEFVVE8gJiYgYiA9PSBBVVRPKQotICAgICAgICAg
ICAgYiA9IGNoIC0gKGggKyB0ICsgbXQgKyBtYiArIHBhYik7CisgICAgLy8gV2UgZG9uJ3QgdXNl
IGNvbnRhaW5pbmdCbG9jaygpLCBzaW5jZSB3ZSBtYXkgYmUgcG9zaXRpb25lZCBieSBhbiBlbmNs
b3NpbmcgcmVscG9zaXRpb25lZCBpbmxpbmUuCisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBjYiA9
IGNvbnRhaW5lcigpOworICAgIAorICAgIC8vIEV2ZW4gaW4gc3RyaWN0IG1vZGUgKHdoZXJlIHdl
IGRvbid0IGdyb3cgdGhlIHJvb3QgdG8gZmlsbCB0aGUgdmlld3BvcnQpIAorICAgIC8vIG90aGVy
IGJyb3dzZXJzIHBvc2l0aW9uIGFzIHRob3VnaCB0aGUgcm9vdCBmaWxscyB0aGUgdmlld3BvcnQu
CisgICAgY29uc3QgaW50IGNvbnRhaW5lckhlaWdodCA9IGNiLT5pc1Jvb3QoKSA/IGNiLT5hdmFp
bGFibGVIZWlnaHQoKSA6IChjYi0+aGVpZ2h0KCkgLSBjYi0+Ym9yZGVyVG9wKCkgLSBjYi0+Ym9y
ZGVyQm90dG9tKCkpOworCisgICAgLy8gVmFyaWFibGVzIHRvIHNvbHZlLgorICAgIExlbmd0aCB0
b3AgPSBzdHlsZSgpLT50b3AoKTsKKyAgICBMZW5ndGggYm90dG9tID0gc3R5bGUoKS0+Ym90dG9t
KCk7CisgICAgTGVuZ3RoIG1hcmdpblRvcCA9IHN0eWxlKCktPm1hcmdpblRvcCgpOworICAgIExl
bmd0aCBtYXJnaW5Cb3R0b20gPSBzdHlsZSgpLT5tYXJnaW5Cb3R0b20oKTsKKyAgICAKKyAgICBp
bnQgdG9wVmFsdWU7CisgICAgaW50IGJvdHRvbVZhbHVlOworCisKKyAgICAvLyAxMC42LjUKKyAg
ICAvLyAxLiBUaGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0JyBpcyBkZXRlcm1pbmVkIGFzIGZvciBp
bmxpbmUgcmVwbGFjZWQgZWxlbWVudHMuCisgICAgCisgICAgLy8gTk9URTogVGhpcyB2YWx1ZSBv
ZiBoZWlnaHQgaXMgRklOQUwgaW4gdGhhdCB0aGUgbWluL21heCBoZWlnaHQgY2FsY3VsYXRpb25z
CisgICAgLy8gYXJlIGRlYWx0IHdpdGggaW4gY2FsY1JlcGxhY2VkSGVpZ2h0KCkuICBUaGlzIG1l
YW5zIHRoYXQgdGhlIHN0ZXBzIHRvIHByb2R1Y2UKKyAgICAvLyBjb3JyZWN0IG1heC9taW4gaW4g
dGhlIG5vbi1yZXBsYWNlZCB2ZXJzaW9uLCBhcmUgbm90IG5lY2Vzc2FyeS4gCisgICAgaW50IGhl
aWdodFZhbHVlID0gY2FsY1JlcGxhY2VkSGVpZ2h0KCkgKyBib3JkZXJUb3AoKSArIGJvcmRlckJv
dHRvbSgpICsgcGFkZGluZ1RvcCgpICsgcGFkZGluZ0JvdHRvbSgpOworICAgIGludCBhdmFpbGFi
bGVTcGFjZSA9IGNvbnRhaW5lckhlaWdodCAtIGhlaWdodFZhbHVlOworICAgIAorICAgIAorICAg
IC8vIDIuIElmIGJvdGggJ3RvcCcgYW5kICdib3R0b20nIGhhdmUgdGhlIHZhbHVlICdhdXRvJywg
cmVwbGFjZSAndG9wJyB3aXRoIHRoZSAKKyAgICAvLyBlbGVtZW50J3Mgc3RhdGljIHBvc2l0aW9u
LgorICAgIGlmICh0b3AuaXNBdXRvKCkgJiYgYm90dG9tLmlzQXV0bygpKSB7CisgICAgCS8vIG1f
c3RhdGljWSBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gc2V0IHRocm91Z2ggbGF5b3V0IG9mIHRo
ZSBwYXJlbnQoKS4KKyAgICAgICAgaW50IHN0YXRpY1RvcCA9IG1fc3RhdGljWSAtIGNiLT5ib3Jk
ZXJUb3AoKTsKKyAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIHBvID0gcGFyZW50KCk7IHBvICYm
IHBvICE9IGNiOyBwbyA9IHBvLT5wYXJlbnQoKSkKKyAgICAgICAgICAgIHN0YXRpY1RvcCArPSBw
by0+eVBvcygpOworCisgICAgICAgIHRvcC5zZXRWYWx1ZShGaXhlZCwgc3RhdGljVG9wKTsKICAg
ICB9CiAKLSAgICBpZiAob3VySGVpZ2h0IDwgaCArIHBhYikgLy9jb250ZW50IG11c3Qgc3RpbGwg
Zml0Ci0gICAgICAgIG91ckhlaWdodCA9IGggKyBwYWI7CiAKLSAgICBpZiAoaGFzT3ZlcmZsb3dD
bGlwKCkgJiYgb3VySGVpZ2h0ID4gaCArIHBhYikKLSAgICAgICAgb3VySGVpZ2h0ID0gaCArIHBh
YjsKLSAgICAKLSAgICAvLyBEbyBub3QgYWxsb3cgdGhlIGhlaWdodCB0byBiZSBuZWdhdGl2ZS4g
IFRoaXMgY2FuIGhhcHBlbiB3aGVuIHNvbWVvbmUgc3BlY2lmaWVzIGJvdGggdG9wIGFuZCBib3R0
b20KLSAgICAvLyBidXQgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaGVpZ2h0IGlzIGxlc3MgdGhhbiB0
b3AsIGUuZy4sIHRvcDoyMHB4LCBib3R0b206MCwgY29udGFpbmluZyBibG9jayBoZWlnaHQgMTYu
Ci0gICAgb3VySGVpZ2h0ID0ga01heCgwLCBvdXJIZWlnaHQpOwotICAgIAotICAgIGggPSBvdXJI
ZWlnaHQ7Ci0gICAgeSA9IHQgKyBtdCArIGNiLT5ib3JkZXJUb3AoKTsKKyAgICAvLyAzLiBJZiAn
Ym90dG9tJyBpcyAnYXV0bycsIHJlcGxhY2UgYW55ICdhdXRvJyBvbiAnbWFyZ2luLXRvcCcgb3Ig
J21hcmdpbi1ib3R0b20nCisgICAgLy8gd2l0aCAnMCcuCisgICAgLy8gRklYTUU6IHRoZSBzcGVj
LiBzYXlzIHRoYXQgdGhpcyBzdGVwIHNob3VsZCBvbmx5IGJlIHRha2VuIHdoZW4gYm90dG9tIGlz
IGF1dG8sIGJ1dAorICAgIC8vIGlmIG9ubHkgdG9wIGlzIGF1dG8sIHRoaXMgbWFrZXMgc3RlcCA0
IGltcG9zc2libGUuCisgICAgaWYgKHRvcC5pc0F1dG8oKSB8fCBib3R0b20uaXNBdXRvKCkpIHsK
KyAgICAgICAgaWYgKG1hcmdpblRvcC5pc0F1dG8oKSkKKyAgICAgICAgICAgIG1hcmdpblRvcC5z
ZXRWYWx1ZShGaXhlZCwgMCk7CisgICAgICAgIGlmIChtYXJnaW5Cb3R0b20uaXNBdXRvKCkpCisg
ICAgICAgICAgICBtYXJnaW5Cb3R0b20uc2V0VmFsdWUoRml4ZWQsIDApOworICAgIH0KKyAgIAor
ICAgIC8vIDQuIElmIGF0IHRoaXMgcG9pbnQgYm90aCAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4t
Ym90dG9tJyBhcmUgc3RpbGwgJ2F1dG8nLAorICAgIC8vIHNvbHZlIHRoZSBlcXVhdGlvbiB1bmRl
ciB0aGUgZXh0cmEgY29uc3RyYWludCB0aGF0IHRoZSB0d28gbWFyZ2lucyBtdXN0IGdldCAKKyAg
ICAvLyBlcXVhbCB2YWx1ZXMuCisgICAgaWYgKG1hcmdpblRvcC5pc0F1dG8oKSAmJiBtYXJnaW5C
b3R0b20uaXNBdXRvKCkpIHsKKyAgICAgICAgLy8gJ3RvcCcgYW5kICdib3R0b20nIGNhbm5vdCBi
ZSAnYXV0bycgZHVlIHRvIHN0ZXAgMiBhbmQgMyBjb21iaW5kZWQuCisgICAgICAgIGFzc2VydCgh
KHRvcC5pc0F1dG8oKSAmJiBib3R0b20uaXNBdXRvKCkpKTsKKyAgICAgICAgCisgICAgICAgIHRv
cFZhbHVlID0gdG9wLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpOworICAgICAgICBib3R0b21W
YWx1ZSA9IGJvdHRvbS5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKyAgICAgICAgCisgICAg
ICAgIGludCBkaWZmZXJlbmNlID0gYXZhaWxhYmxlU3BhY2UgLSAodG9wVmFsdWUgKyBib3R0b21W
YWx1ZSk7CisgICAgICAgIC8vIEZJWE1FOiB3aGF0IGFib3V0IHRoZSBjYXNlIHdoZW4gZGlmZmVy
ZW5jZSBpcyBuZWdhdGl2ZT8gSW4gaG9yaXpvbnRhbCAKKyAgICAgICAgLy8gdmVyc2lvbiB0aGlz
IGlzIGRlYWx0IHdpdGggZGlmZmVyZW50bHkKKyAgICAgICAgbV9tYXJnaW5Ub3AgPSAgZGlmZmVy
ZW5jZSAvIDI7CisgICAgICAgIG1fbWFyZ2luQm90dG9tID0gbV9tYXJnaW5Ub3A7CisKKyAgICAv
LyA1LiBJZiBhdCB0aGlzIHBvaW50IHRoZXJlIGlzIG9ubHkgb25lICdhdXRvJyBsZWZ0LCBzb2x2
ZSB0aGUgZXF1YXRpb24gZm9yIAorICAgIC8vIHRoYXQgdmFsdWUuCisgICAgfSBlbHNlIGlmICh0
b3AuaXNBdXRvKCkpIHsKKyAgICAgICAgbV9tYXJnaW5Ub3AgPSBtYXJnaW5Ub3AuY2FsY1ZhbHVl
KGNvbnRhaW5lckhlaWdodCk7CisgICAgICAgIG1fbWFyZ2luQm90dG9tID0gbWFyZ2luQm90dG9t
LmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpOworICAgICAgICBib3R0b21WYWx1ZSA9IGJvdHRv
bS5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKyAgICAgICAgCisgICAgICAgIC8vIFNvbHZl
IGZvciAndG9wJworICAgICAgICB0b3BWYWx1ZSA9IGF2YWlsYWJsZVNwYWNlIC0gKGJvdHRvbVZh
bHVlICsgbV9tYXJnaW5Ub3AgKyBtX21hcmdpbkJvdHRvbSk7CisgICAgfSBlbHNlIGlmIChib3R0
b20uaXNBdXRvKCkpIHsKKyAgICAgICAgbV9tYXJnaW5Ub3AgPSBtYXJnaW5Ub3AuY2FsY1ZhbHVl
KGNvbnRhaW5lckhlaWdodCk7CisgICAgICAgIG1fbWFyZ2luQm90dG9tID0gbWFyZ2luQm90dG9t
LmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpOworICAgICAgICB0b3BWYWx1ZSA9IHRvcC5jYWxj
VmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKyAgICAgICAgCisgICAgICAgIC8vIFNvbHZlIGZvciAn
Ym90dG9tJworICAgICAgICBib3R0b21WYWx1ZSA9IGF2YWlsYWJsZVNwYWNlIC0gKHRvcFZhbHVl
ICsgbV9tYXJnaW5Ub3AgKyBtX21hcmdpbkJvdHRvbSk7CisgICAgfSBlbHNlIGlmIChtYXJnaW5U
b3AuaXNBdXRvKCkpIHsKKyAgICAgICAgbV9tYXJnaW5Cb3R0b20gPSBtYXJnaW5Cb3R0b20uY2Fs
Y1ZhbHVlKGNvbnRhaW5lckhlaWdodCk7CisgICAgICAgIHRvcFZhbHVlID0gdG9wLmNhbGNWYWx1
ZShjb250YWluZXJIZWlnaHQpOworICAgICAgICBib3R0b21WYWx1ZSA9IGJvdHRvbS5jYWxjVmFs
dWUoY29udGFpbmVySGVpZ2h0KTsKKyAgICAgICAgCisgICAgICAgIC8vIFNvbHZlIGZvciAnbWFy
Z2luLXRvcCcKKyAgICAgICAgbV9tYXJnaW5Ub3AgPSBhdmFpbGFibGVTcGFjZSAtICh0b3BWYWx1
ZSArIGJvdHRvbVZhbHVlICsgbV9tYXJnaW5Cb3R0b20pOworICAgIH0gZWxzZSBpZiAobWFyZ2lu
Qm90dG9tLmlzQXV0bygpKSB7CisgICAgICAgIG1fbWFyZ2luVG9wID0gbWFyZ2luVG9wLmNhbGNW
YWx1ZShjb250YWluZXJIZWlnaHQpOworICAgICAgICB0b3BWYWx1ZSA9IHRvcC5jYWxjVmFsdWUo
Y29udGFpbmVySGVpZ2h0KTsKKyAgICAgICAgYm90dG9tVmFsdWUgPSBib3R0b20uY2FsY1ZhbHVl
KGNvbnRhaW5lckhlaWdodCk7CisgICAgICAgIAorICAgICAgICAvLyBTb2x2ZSBmb3IgJ21hcmdp
bi1ib3R0b20nCisgICAgICAgIG1fbWFyZ2luQm90dG9tID0gYXZhaWxhYmxlU3BhY2UgLSAodG9w
VmFsdWUgKyBib3R0b21WYWx1ZSArIG1fbWFyZ2luVG9wKTsKKyAgICB9ICAgICAgICAKKworCisg
ICAgLy8gNi4gSWYgYXQgdGhpcyBwb2ludCB0aGUgdmFsdWVzIGFyZSBvdmVyLWNvbnN0cmFpbmVk
LCBpZ25vcmUgdGhlIHZhbHVlIGZvciAKKyAgICAvLyAnYm90dG9tJyBhbmQgc29sdmUgZm9yIHRo
YXQgdmFsdWUuCisgICAgY29uc3QgaW50IHRvdGFsSGVpZ2h0ID0gaGVpZ2h0VmFsdWUgKyB0b3BW
YWx1ZSArIGJvdHRvbVZhbHVlICsgbV9tYXJnaW5Ub3AgKyBtX21hcmdpbkJvdHRvbTsKKyAgICBp
ZiAodG90YWxIZWlnaHQgPiBjb250YWluZXJIZWlnaHQpCisgICAgICAgIG1fbWFyZ2luQm90dG9t
ID0gY29udGFpbmVySGVpZ2h0IC0gKHRvdGFsSGVpZ2h0IC0gbV9tYXJnaW5Cb3R0b20pOworCisK
KyAgICBpbnQgY29udGVudEhlaWdodCA9IG1faGVpZ2h0OworICAgIGlmICgoY29udGVudEhlaWdo
dCA8IGhlaWdodFZhbHVlKSB8fCAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgY29udGVudEhlaWdodCA+
IGhlaWdodFZhbHVlKSkKKyAgICAgICAgY29udGVudEhlaWdodCA9IGhlaWdodFZhbHVlOworCisg
ICAgLy8gRG8gbm90IGFsbG93IHRoZSBoZWlnaHQgdG8gYmUgbmVnYXRpdmUuICBUaGlzIGNhbiBo
YXBwZW4gd2hlbiBzb21lb25lCisgICAgLy8gc3BlY2lmaWVzIGJvdGggdG9wIGFuZCBib3R0b20g
YnV0IHRoZSBjb250YWluaW5nIGJsb2NrIGhlaWdodCBpcyBsZXNzCisgICAgLy8gdGhhbiB0b3As
IGUuZy4sIHRvcDogMjBweCwgYm90dG9tOiAwLCBjb250YWluaW5nIGJsb2NrIGhlaWdodCAxNi4K
KyAgICBoZWlnaHRWYWx1ZSA9IG1heCgwLCBjb250ZW50SGVpZ2h0KTsgICAgCisKKyAgICAvLyBJ
ZiBvdXIgY29udGVudCBoZWlnaHQgZXhjZWVkcyB0aGUgbmV3IGhlaWdodCBvbmNlIHdlJ3ZlIHNl
dCBpdCwgdGhlbiB3ZQorICAgIC8vIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHVwZGF0ZSBvdmVyZmxv
dyB0byB0cmFjayB0aGUgc3BpbGxvdXQuCisgICAgaWYgKG1faGVpZ2h0ID4gaGVpZ2h0VmFsdWUp
CisgICAgICAgIHNldE92ZXJmbG93SGVpZ2h0KG1faGVpZ2h0KTsKKworICAgIC8vIFNldCBmaW5h
bCB2YWx1ZXMuCisgICAgbV9oZWlnaHQgPSBoZWlnaHRWYWx1ZTsKKyAgICBtX3kgPSB0b3BWYWx1
ZSArIG1fbWFyZ2luVG9wICsgY2ItPmJvcmRlclRvcCgpOyAgICAKIH0KIAogSW50UmVjdCBSZW5k
ZXJCb3g6OmNhcmV0UmVjdChpbnQgb2Zmc2V0LCBFQWZmaW5pdHkgYWZmaW5pdHksIGludCAqZXh0
cmFXaWR0aFRvRW5kT2ZMaW5lKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7194</attachid>
            <date>2006-03-20 13:27:40 -0800</date>
            <delta_ts>2006-04-05 14:59:08 -0700</delta_ts>
            <desc>update patch</desc>
            <filename>boxNew.diff</filename>
            <type>text/plain</type>
            <size>54273</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFJlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUmVuZGVyQm94LmNwcAkocmV2aXNp
b24gMTM0MDIpCisrKyBSZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNiArMzIs
MjAgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5o
IgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlJlbmRlckFyZW5hLmgiCiAjaW5j
bHVkZSAiUmVuZGVyQ2FudmFzLmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxleGlibGVCb3guaCIKKyNp
bmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2lu
Y2x1ZGUgInJlbmRlcl9saW5lLmgiCiAjaW5jbHVkZSAicmVuZGVyX3JlcGxhY2VkLmgiCi0jaW5j
bHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8YXNz
ZXJ0Lmg+CiAKK3VzaW5nIHN0ZDo6bWF4OwordXNpbmcgc3RkOjptaW47CisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKQEAgLTEzNjMsMzYwICsxMzY3
LDgxNSBAQCB2b2lkIFJlbmRlckJveDo6c2V0U3RhdGljWShpbnQgc3RhdGljWSkKIAogdm9pZCBS
ZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWwoKQogewotICAgIGNvbnN0IGludCBBVVRP
ID0gLTY2NjY2NjsKLSAgICBpbnQgbCwgciwgY3c7Ci0KLSAgICBpbnQgcGFiID0gYm9yZGVyTGVm
dCgpKyBib3JkZXJSaWdodCgpKyBwYWRkaW5nTGVmdCgpKyBwYWRkaW5nUmlnaHQoKTsKLQotICAg
IGwgPSByID0gQVVUTzsKLSAKLSAgICAvLyBXZSBkb24ndCB1c2UgY29udGFpbmluZ0Jsb2NrKCks
IHNpbmNlIHdlIG1heSBiZSBwb3NpdGlvbmVkIGJ5IGFuIGVuY2xvc2luZyByZWxwb3NpdGlvbmVk
IGlubGluZS4KLSAgICBSZW5kZXJPYmplY3QqIGNiID0gY29udGFpbmVyKCk7Ci0gICAgY3cgPSBj
b250YWluaW5nQmxvY2tXaWR0aCgpICsgY2ItPnBhZGRpbmdMZWZ0KCkgKyBjYi0+cGFkZGluZ1Jp
Z2h0KCk7CisgICAgaWYgKGlzUmVwbGFjZWQoKSkgeworICAgICAgICBjYWxjQWJzb2x1dGVIb3Jp
em9udGFsUmVwbGFjZWQoKTsKKyAgICAgICAgcmV0dXJuOyAKKyAgICB9CisgICAgCisgICAgLy8g
VGhlIGZvbGxvd2luZyBpcyBiYXNlZCBvZmYgb2YgdGhlIFczQyBXb3JraW5nIERyYWZ0IGZyb20g
SnVuZSAxMywgMjAwNSBvZgorICAgIC8vIENTUyAyLjE6IFNlY3Rpb24gMTAuMy43ICJBYnNvbHV0
ZWx5IHBvc2l0aW9uZWQsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyIKKyAgICAvLyA8aHR0cDovL3d3
dy53My5vcmcvVFIvQ1NTMjEvdmlzdWRldC5odG1sI2Ficy1ub24tcmVwbGFjZWQtd2lkdGg+Cisg
ICAgLy8gKGJsb2NrLXN0eWxlLWNvbW1lbnRzIGluIHRoaXMgZnVuY3Rpb24gYW5kIGluIGNhbGNB
YnNvbHV0ZUhvcml6b250YWxWYWx1ZXMoKSAKKyAgICAvLyBjb3JyZXNwb25kIHRvIHRleHQgZnJv
bSB0aGUgc3BlYykKKworCisgICAgLy8gV2UgZG9uJ3QgdXNlIGNvbnRhaW5pbmdCbG9jaygpLCBz
aW5jZSB3ZSBtYXkgYmUgcG9zaXRpb25lZCBieSBhbiBlbmNsb3NpbmcKKyAgICAvLyByZWxhdGl2
ZSBwb3NpdGlvbmVkIGlubGluZS4KKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIGNiID0gY29udGFp
bmVyKCk7CisgICAgY29uc3QgaW50IGJvcmRlcnNQbHVzUGFkZGluZyA9IGJvcmRlckxlZnQoKSAr
IGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nTGVmdCgpICsgcGFkZGluZ1JpZ2h0KCk7CisgICAgY29u
c3QgaW50IGNvbnRhaW5lcldpZHRoID0gY29udGFpbmluZ0Jsb2NrV2lkdGgoKSArIGNiLT5wYWRk
aW5nTGVmdCgpICsgY2ItPnBhZGRpbmdSaWdodCgpOworCisgICAgY29uc3QgTGVuZ3RoIG1hcmdp
bkxlZnQgPSBzdHlsZSgpLT5tYXJnaW5MZWZ0KCk7CisgICAgY29uc3QgTGVuZ3RoIG1hcmdpblJp
Z2h0ID0gc3R5bGUoKS0+bWFyZ2luUmlnaHQoKTsKKyAgICBMZW5ndGggbGVmdCA9IHN0eWxlKCkt
PmxlZnQoKTsKKyAgICBMZW5ndGggcmlnaHQgPSBzdHlsZSgpLT5yaWdodCgpOworCisKKyAgICAv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSpcCisgICAgICogRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIHNl
Y3Rpb24gYW5kIHRoZSBuZXh0LCB0aGUgdGVybSAic3RhdGljIHBvc2l0aW9uIgorICAgICAqIChv
ZiBhbiBlbGVtZW50KSByZWZlcnMsIHJvdWdobHksIHRvIHRoZSBwb3NpdGlvbiBhbiBlbGVtZW50
IHdvdWxkIGhhdmUgaGFkCisgICAgICogaW4gdGhlIG5vcm1hbCBmbG93LiBNb3JlIHByZWNpc2Vs
eToKKyAgICAgKiAKKyAgICAgKiAqIFRoZSBzdGF0aWMgcG9zaXRpb24gZm9yICdsZWZ0JyBpcyB0
aGUgZGlzdGFuY2UgZnJvbSB0aGUgbGVmdCBlZGdlIG9mIHRoZQorICAgICAqICAgY29udGFpbmlu
ZyBibG9jayB0byB0aGUgbGVmdCBtYXJnaW4gZWRnZSBvZiBhIGh5cG90aGV0aWNhbCBib3ggdGhh
dCB3b3VsZAorICAgICAqICAgaGF2ZSBiZWVuIHRoZSBmaXJzdCBib3ggb2YgdGhlIGVsZW1lbnQg
aWYgaXRzICdwb3NpdGlvbicgcHJvcGVydHkgaGFkIGJlZW4KKyAgICAgKiAgICdzdGF0aWMnIGFu
ZCAnZmxvYXQnIGhhZCBiZWVuICdub25lJy4gVGhlIHZhbHVlIGlzIG5lZ2F0aXZlIGlmIHRoZSAK
KyAgICAgKiAgIGh5cG90aGV0aWNhbCBib3ggaXMgdG8gdGhlIGxlZnQgb2YgdGhlIGNvbnRhaW5p
bmcgYmxvY2suCisgICAgICogKiBUaGUgc3RhdGljIHBvc2l0aW9uIGZvciAncmlnaHQnIGlzIHRo
ZSBkaXN0YW5jZSBmcm9tIHRoZSByaWdodCBlZGdlIG9mIHRoZQorICAgICAqICAgY29udGFpbmlu
ZyBibG9jayB0byB0aGUgcmlnaHQgbWFyZ2luIGVkZ2Ugb2YgdGhlIHNhbWUgaHlwb3RoZXRpY2Fs
IGJveCBhcworICAgICAqICAgYWJvdmUuIFRoZSB2YWx1ZSBpcyBwb3NpdGl2ZSBpZiB0aGUgaHlw
b3RoZXRpY2FsIGJveCBpcyB0byB0aGUgbGVmdCBvZiB0aGUKKyAgICAgKiAgIGNvbnRhaW5pbmcg
YmxvY2sncyBlZGdlLgorICAgICAqCisgICAgICogQnV0IHJhdGhlciB0aGFuIGFjdHVhbGx5IGNh
bGN1bGF0aW5nIHRoZSBkaW1lbnNpb25zIG9mIHRoYXQgaHlwb3RoZXRpY2FsIGJveCwKKyAgICAg
KiB1c2VyIGFnZW50cyBhcmUgZnJlZSB0byBtYWtlIGEgZ3Vlc3MgYXQgaXRzIHByb2JhYmxlIHBv
c2l0aW9uLgorICAgICAqIAorICAgICAqIEZvciB0aGUgcHVycG9zZXMgb2YgY2FsY3VsYXRpbmcg
dGhlIHN0YXRpYyBwb3NpdGlvbiwgdGhlIGNvbnRhaW5pbmcgYmxvY2sgb2YKKyAgICAgKiBmaXhl
ZCBwb3NpdGlvbmVkIGVsZW1lbnRzIGlzIHRoZSBpbml0aWFsIGNvbnRhaW5pbmcgYmxvY2sgaW5z
dGVhZCBvZiB0aGUKKyAgICAgKiB2aWV3cG9ydCwgYW5kIGFsbCBzY3JvbGxhYmxlIGJveGVzIHNo
b3VsZCBiZSBhc3N1bWVkIHRvIGJlIHNjcm9sbGVkIHRvIHRoZWlyIAorICAgICAqIG9yaWdpbi4K
KyAgICBcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyAgICAvLyBGSVhNRTogc2hvdWxkIHdlIHN0
aWxsIGRlYWwgd2l0aCB0aGVzZT8KKyAgICAvLyAgfHwgc3R5bGUoKS0+bGVmdCgpLmlzU3RhdGlj
KCkgCisgICAgLy8gIHx8IHN0eWxlKCktPnJpZ2h0KCkuaXNTdGF0aWMoKQorICAgIC8vIE5PVEU6
ICdzdGF0aWMnIGlzIG5vdCBhIGxlZ2FsIHZhbHVlIGZvciBsZWZ0IG9yIHJpZ2h0IGFzIG9mIGNz
cyAyLjEKKworICAgIC8vIENhbGN1bGF0ZSB0aGUgc3RhdGljIGRpc3RhbmNlIGlmIG5lZWRlZC4K
KyAgICBpZiAobGVmdC5pc0F1dG8oKSAmJiByaWdodC5pc0F1dG8oKSkgeworICAgICAgICAvLyBG
SVhNRTogc2hvdWxkIHRoaXMgYmUgY2Igb3IgcGFyZW50KCkgZm9yIHRleHQtZGlyZWN0aW9uPwor
ICAgICAgICBpZiAocGFyZW50KCktPnN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgeworICAg
ICAgICAgICAgLy8gJ21fc3RhdGljWCcgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIHNldCB0aHJv
dWdoIGxheW91dCBvZiB0aGUgcGFyZW50LgorICAgICAgICAgICAgaW50IHN0YXRpY1Bvc2l0aW9u
ID0gbV9zdGF0aWNYIC0gY2ItPmJvcmRlckxlZnQoKTsKKyAgICAgICAgICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBwbyA9IHBhcmVudCgpOyBwbyAmJiBwbyAhPSBjYjsgcG8gPSBwby0+cGFyZW50KCkp
CisgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gKz0gcG8tPnhQb3MoKTsKIAotICAgIGlm
ICghc3R5bGUoKS0+bGVmdCgpLmlzQXV0bygpKQotICAgICAgICBsID0gc3R5bGUoKS0+bGVmdCgp
LmNhbGNWYWx1ZShjdyk7Ci0gICAgaWYgKCFzdHlsZSgpLT5yaWdodCgpLmlzQXV0bygpKQotICAg
ICAgICByID0gc3R5bGUoKS0+cmlnaHQoKS5jYWxjVmFsdWUoY3cpOwotCi0gICAgaW50IHN0YXRp
Y19kaXN0YW5jZT0wOwotICAgIGlmICgocGFyZW50KCktPnN0eWxlKCktPmRpcmVjdGlvbigpPT1M
VFIgJiYgKGwgPT0gQVVUTyAmJiByID09IEFVVE8pKQotICAgICAgICAgICAgfHwgc3R5bGUoKS0+
bGVmdCgpLmlzU3RhdGljKCkpCi0gICAgewotICAgICAgICBzdGF0aWNfZGlzdGFuY2UgPSBtX3N0
YXRpY1ggLSBjYi0+Ym9yZGVyTGVmdCgpOyAvLyBTaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gc2V0
IHRocm91Z2ggbGF5b3V0IG9mIHRoZSBwYXJlbnQoKS4KLSAgICAgICAgUmVuZGVyT2JqZWN0KiBw
byA9IHBhcmVudCgpOwotICAgICAgICBmb3IgKDsgcG8gJiYgcG8gIT0gY2I7IHBvID0gcG8tPnBh
cmVudCgpKQotICAgICAgICAgICAgc3RhdGljX2Rpc3RhbmNlICs9IHBvLT54UG9zKCk7Ci0KLSAg
ICAgICAgbCA9IHN0YXRpY19kaXN0YW5jZTsKLSAgICB9CisgICAgICAgICAgICBsZWZ0LnNldFZh
bHVlKEZpeGVkLCBzdGF0aWNQb3NpdGlvbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBSZW5kZXJPYmplY3QqIHBvID0gcGFyZW50KCk7CisgICAgICAgICAgICAvLyAnbV9zdGF0aWNY
JyBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gc2V0IHRocm91Z2ggbGF5b3V0IG9mIHRoZSBwYXJl
bnQuCisgICAgICAgICAgICBpbnQgc3RhdGljUG9zaXRpb24gPSBtX3N0YXRpY1ggKyBjb250YWlu
ZXJXaWR0aCArIGNiLT5ib3JkZXJSaWdodCgpIC0gcG8tPndpZHRoKCk7CisgICAgICAgICAgICBm
b3IgKDsgcG8gJiYgcG8gIT0gY2I7IHBvID0gcG8tPnBhcmVudCgpKQorICAgICAgICAgICAgICAg
IHN0YXRpY1Bvc2l0aW9uIC09IHBvLT54UG9zKCk7CisKKyAgICAgICAgICAgIHJpZ2h0LnNldFZh
bHVlKEZpeGVkLCBzdGF0aWNQb3NpdGlvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBD
YWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlvbiB2YWx1ZXMgZm9yICd3aWR0aCcgY2FzZS4KKyAg
ICBjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKHN0eWxlKCktPndpZHRoKCksIGNiLCBjb250
YWluZXJXaWR0aCwgYm9yZGVyc1BsdXNQYWRkaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGVmdCwgcmlnaHQsIG1hcmdpbkxlZnQsIG1hcmdpblJpZ2h0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV93aWR0aCwgbV9tYXJnaW5MZWZ0LCBtX21hcmdpblJp
Z2h0LCBtX3gpOworCisgICAgCisgICAgLy8gQXZvaWQgZG9pbmcgYW55IHdvcmsgaW4gdGhlIGNv
bW1vbiBjYXNlICh3aGVyZSB0aGUgdmFsdWVzIG9mIG1heC13aWR0aCBhbmQgbWluLXdpZHRoIGFy
ZSB0aGVpciBkZWZhdWx0cykuIAorICAgIC8vIEZJWE1FOiBDYW4gcGVyaGFwcyBvcHRpbWl6ZSBv
dXQgY2FzZXMgd2hlbiBtYXgtd2lkdGgvbWluLXdpZHRoIGFyZSBncmVhdGVyIHRoYW4gb3IgbGVz
cyB0aGFuIHRoZSAKKyAgICAvLyBjb21wdXRlZCBtX3dpZHRoLiAgQmUgY2FyZWZ1bCBvZiBib3gt
c2l6aW5nIGFuZCBwZXJjZW50YWdlIGlzc3Vlcy4KKyAgICAKKyAgICAvLyBDYWxjdWxhdGUgY29u
c3RyYWludCBlcXVhdGlvbiB2YWx1ZXMgZm9yICdtYXgtd2lkdGgnIGNhc2UuCisgICAgaWYgKHN0
eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpIHsKKyAgICAgICAg
aW50IG1heFdpZHRoOworICAgICAgICBpbnQgbWF4TWFyZ2luTGVmdDsKKyAgICAgICAgaW50IG1h
eE1hcmdpblJpZ2h0OworICAgICAgICBpbnQgbWF4WFBvczsKKworICAgICAgICBjYWxjQWJzb2x1
dGVIb3Jpem9udGFsVmFsdWVzKHN0eWxlKCktPm1heFdpZHRoKCksIGNiLCBjb250YWluZXJXaWR0
aCwgYm9yZGVyc1BsdXNQYWRkaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxlZnQsIHJpZ2h0LCBtYXJnaW5MZWZ0LCBtYXJnaW5SaWdodCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aCwgbWF4TWFyZ2luTGVmdCwgbWF4TWFyZ2lu
UmlnaHQsIG1heFhQb3MpOworCisgICAgICAgIGlmIChtX3dpZHRoID4gbWF4V2lkdGgpIHsKKyAg
ICAgICAgICAgIG1fd2lkdGggPSBtYXhXaWR0aDsKKyAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9
IG1heE1hcmdpbkxlZnQ7CisgICAgICAgICAgICBtX21hcmdpblJpZ2h0ID0gbWF4TWFyZ2luUmln
aHQ7CisgICAgICAgICAgICBtX3ggPSBtYXhYUG9zOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gQ2FsY3VsYXRlIGNvbnN0cmFpbnQgZXF1YXRpb24gdmFsdWVzIGZvciAnbWluLXdpZHRoJyBj
YXNlLgorICAgIGlmIChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpIHsKKyAgICAgICAgaW50
IG1pbldpZHRoOworICAgICAgICBpbnQgbWluTWFyZ2luTGVmdDsKKyAgICAgICAgaW50IG1pbk1h
cmdpblJpZ2h0OworICAgICAgICBpbnQgbWluWFBvczsKKworICAgICAgICBjYWxjQWJzb2x1dGVI
b3Jpem9udGFsVmFsdWVzKHN0eWxlKCktPm1pbldpZHRoKCksIGNiLCBjb250YWluZXJXaWR0aCwg
Ym9yZGVyc1BsdXNQYWRkaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxlZnQsIHJpZ2h0LCBtYXJnaW5MZWZ0LCBtYXJnaW5SaWdodCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aCwgbWluTWFyZ2luTGVmdCwgbWluTWFyZ2luUmln
aHQsIG1pblhQb3MpOworICAgIAorICAgICAgICBpZiAobV93aWR0aCA8IG1pbldpZHRoKSB7Cisg
ICAgICAgICAgICBtX3dpZHRoID0gbWluV2lkdGg7CisgICAgICAgICAgICBtX21hcmdpbkxlZnQg
PSBtaW5NYXJnaW5MZWZ0OworICAgICAgICAgICAgbV9tYXJnaW5SaWdodCA9IG1pbk1hcmdpblJp
Z2h0OworICAgICAgICAgICAgbV94ID0gbWluWFBvczsKKyAgICAgICAgfQorICAgIH0gICAgCisg
ICAgCisgICAgLy8gUHV0IG1fd2lkdGggaW50byBjb3JyZWN0IGZvcm0uCisgICAgbV93aWR0aCAr
PSBib3JkZXJzUGx1c1BhZGRpbmc7Cit9CisKK3ZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVI
b3Jpem9udGFsVmFsdWVzKExlbmd0aCB3aWR0aCwgY29uc3QgUmVuZGVyT2JqZWN0KiBjYiwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgY29u
dGFpbmVyV2lkdGgsIGNvbnN0IGludCBib3JkZXJzUGx1c1BhZGRpbmcsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGVuZ3RoIGxlZnQsIGNvbnN0
IExlbmd0aCByaWdodCwgY29uc3QgTGVuZ3RoIG1hcmdpbkxlZnQsIGNvbnN0IExlbmd0aCBtYXJn
aW5SaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCYgd2lkdGhWYWx1ZSwgaW50JiBtYXJnaW5MZWZ0VmFsdWUsIGludCYgbWFyZ2luUmlnaHRWYWx1
ZSwgaW50JiB4UG9zKQoreworICAgIC8vICdsZWZ0JyBhbmQgJ3JpZ2h0JyBjYW5ub3QgYm90aCBi
ZSAnYXV0bycgYmVjYXVzZSBvbmUgd291bGQgb2YgYmVlbgorICAgIC8vIGNvbnZlcnRlZCB0byB0
aGUgc3RhdGljIHBvc3Rpb24gYWxyZWFkeQorICAgIEFTU0VSVCghKGxlZnQuaXNBdXRvKCkgJiYg
cmlnaHQuaXNBdXRvKCkpKTsKKyAgICAKKyAgICBpbnQgbGVmdFZhbHVlOworICAgIGludCByaWdo
dFZhbHVlOworICAgIAorICAgIGJvb2wgd2lkdGhJc0F1dG8gPSB3aWR0aC5pc0ludHJpbnNpY09y
QXV0bygpOworICAgIGJvb2wgbGVmdElzQXV0byA9IGxlZnQuaXNBdXRvKCk7CisgICAgYm9vbCBy
aWdodElzQXV0byA9IHJpZ2h0LmlzQXV0bygpOworCisgICAgaWYgKCFsZWZ0SXNBdXRvICYmICF3
aWR0aElzQXV0byAmJiAhcmlnaHRJc0F1dG8pIHsKKyAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpc
CisgICAgICAgICAqIElmIG5vbmUgb2YgdGhlIHRocmVlIGlzICdhdXRvJzogSWYgYm90aCAnbWFy
Z2luLWxlZnQnIGFuZCAnbWFyZ2luLQorICAgICAgICAgKiByaWdodCcgYXJlICdhdXRvJywgc29s
dmUgdGhlIGVxdWF0aW9uIHVuZGVyIHRoZSBleHRyYSBjb25zdHJhaW50IHRoYXQKKyAgICAgICAg
ICogdGhlIHR3byBtYXJnaW5zIGdldCBlcXVhbCB2YWx1ZXMsIHVubGVzcyB0aGlzIHdvdWxkIG1h
a2UgdGhlbSBuZWdhdGl2ZSwKKyAgICAgICAgICogaW4gd2hpY2ggY2FzZSB3aGVuIGRpcmVjdGlv
biBvZiB0aGUgY29udGFpbmluZyBibG9jayBpcyAnbHRyJyAoJ3J0bCcpLAorICAgICAgICAgKiBz
ZXQgJ21hcmdpbi1sZWZ0JyAoJ21hcmdpbi1yaWdodCcpIHRvIHplcm8gYW5kIHNvbHZlIGZvciAn
bWFyZ2luLXJpZ2h0JworICAgICAgICAgKiAoJ21hcmdpbi1sZWZ0JykuIElmIG9uZSBvZiAnbWFy
Z2luLWxlZnQnIG9yICdtYXJnaW4tcmlnaHQnIGlzICdhdXRvJywKKyAgICAgICAgICogc29sdmUg
dGhlIGVxdWF0aW9uIGZvciB0aGF0IHZhbHVlLiBJZiB0aGUgdmFsdWVzIGFyZSBvdmVyLWNvbnN0
cmFpbmVkLAorICAgICAgICAgKiBpZ25vcmUgdGhlIHZhbHVlIGZvciAnbGVmdCcgKGluIGNhc2Ug
dGhlICdkaXJlY3Rpb24nIHByb3BlcnR5IG9mIHRoZQorICAgICAgICAgKiBjb250YWluaW5nIGJs
b2NrIGlzICdydGwnKSBvciAncmlnaHQnIChpbiBjYXNlICdkaXJlY3Rpb24nIGlzICdsdHInKSAK
KyAgICAgICAgICogYW5kIHNvbHZlIGZvciB0aGF0IHZhbHVlLgorICAgICAgICBcKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8gICAKKworICAgICAgICBsZWZ0VmFsdWUgPSBsZWZ0LmNhbGNWYWx1ZShjb250YWlu
ZXJXaWR0aCk7CisgICAgICAgIHJpZ2h0VmFsdWUgPSByaWdodC5jYWxjVmFsdWUoY29udGFpbmVy
V2lkdGgpOworICAgICAgICB3aWR0aFZhbHVlID0gY2FsY0NvbnRlbnRCb3hXaWR0aCh3aWR0aC5j
YWxjVmFsdWUoY29udGFpbmVyV2lkdGgpKTsKKyAgICAgICAgCisgICAgICAgIGNvbnN0IGludCBh
dmFpbGFibGVTcGFjZSA9IGNvbnRhaW5lcldpZHRoIC0gKGxlZnRWYWx1ZSArIHdpZHRoVmFsdWUg
KyByaWdodFZhbHVlICsgYm9yZGVyc1BsdXNQYWRkaW5nKTsKIAotICAgIGVsc2UgaWYgKChwYXJl
bnQoKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCk9PVJUTCAmJiAobD09QVVUTyAmJiByPT1BVVRPICkp
Ci0gICAgICAgICAgICB8fCBzdHlsZSgpLT5yaWdodCgpLmlzU3RhdGljKCkpCi0gICAgewotICAg
ICAgICBSZW5kZXJPYmplY3QqIHBvID0gcGFyZW50KCk7Ci0gICAgICAgIHN0YXRpY19kaXN0YW5j
ZSA9IG1fc3RhdGljWCArIGN3ICsgY2ItPmJvcmRlclJpZ2h0KCkgLSBwby0+d2lkdGgoKTsgLy8g
U2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIHNldCB0aHJvdWdoIGxheW91dCBvZiB0aGUgcGFyZW50
KCkuCi0gICAgICAgIHdoaWxlIChwbyAmJiBwbyE9Y29udGFpbmluZ0Jsb2NrKCkpIHsKLSAgICAg
ICAgICAgIHN0YXRpY19kaXN0YW5jZSAtPSBwby0+eFBvcygpOwotICAgICAgICAgICAgcG89cG8t
PnBhcmVudCgpOworICAgICAgICAvLyBNYXJnaW5zIGFyZSBub3cgdGhlIG9ubHkgdW5rbm93bgor
ICAgICAgICBpZiAobWFyZ2luTGVmdC5pc0F1dG8oKSAmJiBtYXJnaW5SaWdodC5pc0F1dG8oKSkg
eworICAgICAgICAgICAgLy8gQm90aCBtYXJnaW5zIGF1dG8sIHNvbHZlIGZvciBlcXVhbGl0eQor
ICAgICAgICAgICAgaWYgKGF2YWlsYWJsZVNwYWNlID49IDApIHsKKyAgICAgICAgICAgICAgICBt
YXJnaW5MZWZ0VmFsdWUgPSBhdmFpbGFibGVTcGFjZSAvIDI7IC8vIHNwbGl0IHRoZSBkaWZlcmVu
Y2UKKyAgICAgICAgICAgICAgICBtYXJnaW5SaWdodFZhbHVlID0gbWFyZ2luTGVmdFZhbHVlOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHRo
aXMgYmUgY29udGFpbmVyLCBwYXJlbnQoKSwgb3IgdGhpcyBmb3IgdGV4dC1kaXJlY3Rpb24/Cisg
ICAgICAgICAgICAgICAgaWYgKHBhcmVudCgpLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIp
IHsKKyAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdFZhbHVlID0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgbWFyZ2luUmlnaHRWYWx1ZSA9IGF2YWlsYWJsZVNwYWNlOyAvLyB3aWxsIGJlIG5l
Z2F0aXZlICAgCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
bWFyZ2luTGVmdFZhbHVlID0gYXZhaWxhYmxlU3BhY2U7IC8vIHdpbGwgYmUgbmVnYXRpdmUKKyAg
ICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHRWYWx1ZSA9IDA7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG1hcmdpbkxlZnQuaXNBdXRvKCkp
IHsKKyAgICAgICAgICAgIC8vIFNvbHZlIGZvciBsZWZ0IG1hcmdpbgorICAgICAgICAgICAgbWFy
Z2luUmlnaHRWYWx1ZSA9IG1hcmdpblJpZ2h0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCk7Cisg
ICAgICAgICAgICBtYXJnaW5MZWZ0VmFsdWUgPSBhdmFpbGFibGVTcGFjZSAtIG1hcmdpblJpZ2h0
VmFsdWU7CisgICAgICAgIH0gZWxzZSBpZiAobWFyZ2luUmlnaHQuaXNBdXRvKCkpIHsKKyAgICAg
ICAgICAgIC8vIFNvbHZlIGZvciByaWdodCBtYXJnaW4KKyAgICAgICAgICAgIG1hcmdpbkxlZnRW
YWx1ZSA9IG1hcmdpbkxlZnQuY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRoKTsKKyAgICAgICAgICAg
IG1hcmdpblJpZ2h0VmFsdWUgPSBhdmFpbGFibGVTcGFjZSAtIG1hcmdpbkxlZnRWYWx1ZTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE92ZXItY29uc3RyYWluZWQsIHNvbHZlIGFj
Y29yZGluZyB0byBjb250YWluZXIncyB0ZXh0IGRpcmVjdGlvbgorICAgICAgICAgICAgbWFyZ2lu
TGVmdFZhbHVlID0gbWFyZ2luTGVmdC5jYWxjVmFsdWUoY29udGFpbmVyV2lkdGgpOworICAgICAg
ICAgICAgbWFyZ2luUmlnaHRWYWx1ZSA9IG1hcmdpblJpZ2h0LmNhbGNWYWx1ZShjb250YWluZXJX
aWR0aCk7CisgICAgICAgICAgICBpZiAocGFyZW50KCktPnN0eWxlKCktPmRpcmVjdGlvbigpID09
IExUUikKKyAgICAgICAgICAgICAgICByaWdodFZhbHVlID0gKGF2YWlsYWJsZVNwYWNlICsgcmln
aHRWYWx1ZSkgLSBtYXJnaW5MZWZ0VmFsdWUgLSBtYXJnaW5SaWdodFZhbHVlOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGxlZnRWYWx1ZSA9IChhdmFpbGFibGVTcGFjZSArIGxl
ZnRWYWx1ZSkgLSBtYXJnaW5MZWZ0VmFsdWUgLSBtYXJnaW5SaWdodFZhbHVlOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCisgICAgICAgICAqIE90aGVy
d2lzZSwgc2V0ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tbGVmdCcgYW5kICdtYXJnaW4tcmln
aHQnCisgICAgICAgICAqIHRvIDAsIGFuZCBwaWNrIHRoZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBz
aXggcnVsZXMgdGhhdCBhcHBsaWVzLgorICAgICAgICAgKiAKKyAgICAgICAgICogMS4gJ2xlZnQn
IGFuZCAnd2lkdGgnIGFyZSAnYXV0bycgYW5kICdyaWdodCcgaXMgbm90ICdhdXRvJywgdGhlbiB0
aGUKKyAgICAgICAgICogICAgd2lkdGggaXMgc2hyaW5rLXRvLWZpdC4gVGhlbiBzb2x2ZSBmb3Ig
J2xlZnQnCisgICAgICAgICAqIAorICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICogMi4g
J2xlZnQnIGFuZCAncmlnaHQnIGFyZSAnYXV0bycgYW5kICd3aWR0aCcgaXMgbm90ICdhdXRvJywg
dGhlbiBpZgorICAgICAgICAgKiAgICB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlIGNv
bnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgc2V0IAorICAgICAgICAgKiAgICAnbGVmdCcgdG8gdGhl
IHN0YXRpYyBwb3NpdGlvbiwgb3RoZXJ3aXNlIHNldCAncmlnaHQnIHRvIHRoZSAKKyAgICAgICAg
ICogICAgc3RhdGljIHBvc2l0aW9uLiBUaGVuIHNvbHZlIGZvciAnbGVmdCcgKGlmICdkaXJlY3Rp
b24gaXMgJ3J0bCcpCisgICAgICAgICAqICAgIG9yICdyaWdodCcgKGlmICdkaXJlY3Rpb24nIGlz
ICdsdHInKS4KKyAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAqIAorICAgICAgICAgKiAz
LiAnd2lkdGgnIGFuZCAncmlnaHQnIGFyZSAnYXV0bycgYW5kICdsZWZ0JyBpcyBub3QgJ2F1dG8n
LCB0aGVuIHRoZSAKKyAgICAgICAgICogICAgd2lkdGggaXMgc2hyaW5rLXRvLWZpdCAuIFRoZW4g
c29sdmUgZm9yICdyaWdodCcKKyAgICAgICAgICogNC4gJ2xlZnQnIGlzICdhdXRvJywgJ3dpZHRo
JyBhbmQgJ3JpZ2h0JyBhcmUgbm90ICdhdXRvJywgdGhlbiBzb2x2ZQorICAgICAgICAgKiAgICBm
b3IgJ2xlZnQnCisgICAgICAgICAqIDUuICd3aWR0aCcgaXMgJ2F1dG8nLCAnbGVmdCcgYW5kICdy
aWdodCcgYXJlIG5vdCAnYXV0bycsIHRoZW4gc29sdmUKKyAgICAgICAgICogICAgZm9yICd3aWR0
aCcKKyAgICAgICAgICogNi4gJ3JpZ2h0JyBpcyAnYXV0bycsICdsZWZ0JyBhbmQgJ3dpZHRoJyBh
cmUgbm90ICdhdXRvJywgdGhlbiBzb2x2ZQorICAgICAgICAgKiAgICBmb3IgJ3JpZ2h0JworICAg
ICAgICAgKiAKKyAgICAgICAgICogQ2FsY3VsYXRpb24gb2YgdGhlIHNocmluay10by1maXQgd2lk
dGggaXMgc2ltaWxhciB0byBjYWxjdWxhdGluZyB0aGUgCisgICAgICAgICAqIHdpZHRoIG9mIGEg
dGFibGUgY2VsbCB1c2luZyB0aGUgYXV0b21hdGljIHRhYmxlIGxheW91dCBhbGdvcml0aG0uCisg
ICAgICAgICAqIFJvdWdobHk6IGNhbGN1bGF0ZSB0aGUgcHJlZmVycmVkIHdpZHRoIGJ5IGZvcm1h
dHRpbmcgdGhlIGNvbnRlbnQgCisgICAgICAgICAqIHdpdGhvdXQgYnJlYWtpbmcgbGluZXMgb3Ro
ZXIgdGhhbiB3aGVyZSBleHBsaWNpdCBsaW5lIGJyZWFrcyBvY2N1ciwgCisgICAgICAgICAqIGFu
ZCBhbHNvIGNhbGN1bGF0ZSB0aGUgcHJlZmVycmVkIG1pbmltdW0gd2lkdGgsIGUuZy4sIGJ5IHRy
eWluZyBhbGwKKyAgICAgICAgICogcG9zc2libGUgbGluZSBicmVha3MuIENTUyAyLjEgZG9lcyBu
b3QgZGVmaW5lIHRoZSBleGFjdCBhbGdvcml0aG0uIAorICAgICAgICAgKiBUaGlyZGx5LCBjYWxj
dWxhdGUgdGhlIGF2YWlsYWJsZSB3aWR0aDogdGhpcyBpcyBmb3VuZCBieSBzb2x2aW5nCisgICAg
ICAgICAqIGZvciAnd2lkdGgnIGFmdGVyIHNldHRpbmcgJ2xlZnQnIChpbiBjYXNlIDEpIG9yICdy
aWdodCcgKGluIGNhc2UgMykKKyAgICAgICAgICogdG8gMC4KKyAgICAgICAgICogCisgICAgICAg
ICAqIFRoZW4gdGhlIHNocmluay10by1maXQgd2lkdGggaXM6IAorICAgICAgICAgKiBtaW4obWF4
KHByZWZlcnJlZCBtaW5pbXVtIHdpZHRoLCBhdmFpbGFibGUgd2lkdGgpLCBwcmVmZXJyZWQgd2lk
dGgpLgorICAgICAgICBcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworICAgIAorICAgICAgICAvLyBDYWxjdWxh
dGUgbWFyZ2lucywgJ2F1dG8nIG1hcmdpbnMgYXJlIGlnbm9yZWQuCisgICAgICAgIG1hcmdpbkxl
ZnRWYWx1ZSA9IG1hcmdpbkxlZnQuY2FsY01pblZhbHVlKGNvbnRhaW5lcldpZHRoKTsKKyAgICAg
ICAgbWFyZ2luUmlnaHRWYWx1ZSA9IG1hcmdpblJpZ2h0LmNhbGNNaW5WYWx1ZShjb250YWluZXJX
aWR0aCk7CisKKyAgICAgICAgY29uc3QgaW50IGF2YWlsYWJsZVNwYWNlID0gY29udGFpbmVyV2lk
dGggLSAobWFyZ2luTGVmdFZhbHVlICsgbWFyZ2luUmlnaHRWYWx1ZSArIGJvcmRlcnNQbHVzUGFk
ZGluZyk7CisKKyAgICAgICAgLy8gVXNlIHJ1bGUvY2FzZSB0aGF0IGFwcGxpZXMuCisgICAgICAg
IGlmIChsZWZ0SXNBdXRvICYmIHdpZHRoSXNBdXRvICYmICFyaWdodElzQXV0bykgeworICAgICAg
ICAgICAgLy8gUlVMRSAxOiAodXNlIHNocmluay10by1maXQgZm9yIHdpZHRoLCBhbmQgc29sdmUg
b2YgbGVmdCkKKyAgICAgICAgICAgIHJpZ2h0VmFsdWUgPSByaWdodC5jYWxjVmFsdWUoY29udGFp
bmVyV2lkdGgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTogd291bGQgaXQg
YmUgYmV0dGVyIHRvIGhhdmUgc2hyaW5rLXRvLWZpdCBpbiBvbmUgc3RlcD8gCisgICAgICAgICAg
ICBpbnQgcHJlZmVycmVkV2lkdGggPSBtX21heFdpZHRoIC0gYm9yZGVyc1BsdXNQYWRkaW5nOwor
ICAgICAgICAgICAgaW50IHByZWZlcnJlZE1pbldpZHRoID0gbV9taW5XaWR0aCAtIGJvcmRlcnNQ
bHVzUGFkZGluZzsKKyAgICAgICAgICAgIGludCBhdmFpbGFibGVXaWR0aCA9IGF2YWlsYWJsZVNw
YWNlIC0gcmlnaHRWYWx1ZTsKKyAgICAgICAgICAgIHdpZHRoVmFsdWUgPSBtaW4obWF4KHByZWZl
cnJlZE1pbldpZHRoLCBhdmFpbGFibGVXaWR0aCksIHByZWZlcnJlZFdpZHRoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbGVmdFZhbHVlID0gYXZhaWxhYmxlU3BhY2UgLSAocmlnaHRWYWx1
ZSArIHdpZHRoVmFsdWUpOworICAgICAgICB9IGVsc2UgaWYgKCFsZWZ0SXNBdXRvICYmIHdpZHRo
SXNBdXRvICYmIHJpZ2h0SXNBdXRvKSB7IAorICAgICAgICAgICAgLy8gUlVMRSAzOiAodXNlIHNo
cmluay10by1maXQgZm9yIHdpZHRoLCBhbmQgc29sdmUgb2YgcmlnaHQpCisgICAgICAgICAgICBs
ZWZ0VmFsdWUgPSBsZWZ0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCk7CisKKyAgICAgICAgICAg
IC8vIEZJWE1FOiB3b3VsZCBpdCBiZSBiZXR0ZXIgdG8gaGF2ZSBzaHJpbmstdG8tZml0IGluIG9u
ZSBzdGVwPyAKKyAgICAgICAgICAgIGludCBwcmVmZXJyZWRXaWR0aCA9IG1fbWF4V2lkdGggLSBi
b3JkZXJzUGx1c1BhZGRpbmc7CisgICAgICAgICAgICBpbnQgcHJlZmVycmVkTWluV2lkdGggPSBt
X21pbldpZHRoIC0gYm9yZGVyc1BsdXNQYWRkaW5nOworICAgICAgICAgICAgaW50IGF2YWlsYWJs
ZVdpZHRoID0gYXZhaWxhYmxlU3BhY2UgLSBsZWZ0VmFsdWU7ICAgICAgICAgICAgCisgICAgICAg
ICAgICB3aWR0aFZhbHVlID0gbWluKG1heChwcmVmZXJyZWRNaW5XaWR0aCwgYXZhaWxhYmxlV2lk
dGgpLCBwcmVmZXJyZWRXaWR0aCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJpZ2h0VmFs
dWUgPSAgYXZhaWxhYmxlU3BhY2UgLSAobGVmdFZhbHVlICsgd2lkdGhWYWx1ZSk7CisgICAgICAg
IH0gZWxzZSBpZiAobGVmdElzQXV0byAmJiAhd2lkdGguaXNBdXRvKCkgJiYgIXJpZ2h0SXNBdXRv
KSB7CisgICAgICAgICAgICAvLyBSVUxFIDQ6IChzb2x2ZSBmb3IgbGVmdCkKKyAgICAgICAgICAg
IHdpZHRoVmFsdWUgPSBjYWxjQ29udGVudEJveFdpZHRoKHdpZHRoLmNhbGNWYWx1ZShjb250YWlu
ZXJXaWR0aCkpOworICAgICAgICAgICAgcmlnaHRWYWx1ZSA9IHJpZ2h0LmNhbGNWYWx1ZShjb250
YWluZXJXaWR0aCk7CisgICAgICAgICAgICBsZWZ0VmFsdWUgPSBhdmFpbGFibGVTcGFjZSAtIChy
aWdodFZhbHVlICsgd2lkdGhWYWx1ZSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWxlZnRJc0F1dG8g
JiYgd2lkdGhJc0F1dG8gJiYgIXJpZ2h0SXNBdXRvKSB7CisgICAgICAgICAgICAvLyBSVUxFIDU6
IChzb2x2ZSBmb3Igd2lkdGgpICAgICAgICAgICAgCisgICAgICAgICAgICBsZWZ0VmFsdWUgPSBs
ZWZ0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCk7CisgICAgICAgICAgICByaWdodFZhbHVlID0g
cmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRoKTsKKyAgICAgICAgICAgIHdpZHRoVmFsdWUg
PSBhdmFpbGFibGVTcGFjZSAtIChyaWdodFZhbHVlICsgbGVmdFZhbHVlKTsKKyAgICAgICAgfSBl
bHNlIGlmICghbGVmdElzQXV0byYmICF3aWR0aElzQXV0byAmJiByaWdodElzQXV0bykgeworICAg
ICAgICAgICAgLy8gUlVMRSA2OiAoc29sdmUgZm9yIHJpZ2h0KQorICAgICAgICAgICAgbGVmdFZh
bHVlID0gbGVmdC5jYWxjVmFsdWUoY29udGFpbmVyV2lkdGgpOworICAgICAgICAgICAgd2lkdGhW
YWx1ZSA9IGNhbGNDb250ZW50Qm94V2lkdGgod2lkdGguY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRo
KSk7CisgICAgICAgICAgICByaWdodFZhbHVlID0gYXZhaWxhYmxlU3BhY2UgLSAobGVmdFZhbHVl
ICsgd2lkdGhWYWx1ZSk7CiAgICAgICAgIH0KLQotICAgICAgICByID0gc3RhdGljX2Rpc3RhbmNl
OwogICAgIH0KKyAgICAKKyAgICAvLyBGSVhNRTogVEhJUyBTRUVNUyBXUk9ORy4gIElmIGlzIGNv
cnJlY3QsIHdoYXQgaXMgdGhlIHBvaW50IG9mIGFsd2F5cyAKKyAgICAvLyBjYWxjdWxhdGluZyBi
b3RoICdsZWZ0JyBhbmQgJ3JpZ2h0JyBpZiBvbmx5ICdsZWZ0JyBpcyBldmVyIHVzZWQuCisgICAg
eFBvcyA9IGxlZnRWYWx1ZSArIG1hcmdpbkxlZnRWYWx1ZSArIGNiLT5ib3JkZXJMZWZ0KCk7Cit9
CiAKLSAgICBjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKFdpZHRoLCBjYiwgY3csIHBhYiwg
c3RhdGljX2Rpc3RhbmNlLCBsLCByLCBtX3dpZHRoLCBtX21hcmdpbkxlZnQsIG1fbWFyZ2luUmln
aHQsIG1feCk7Ci0KLSAgICAvLyBBdm9pZCBkb2luZyBhbnkgd29yayBpbiB0aGUgY29tbW9uIGNh
c2UgKHdoZXJlIHRoZSB2YWx1ZXMgb2YgbWluLXdpZHRoIGFuZCBtYXgtd2lkdGggYXJlIHRoZWly
IGRlZmF1bHRzKS4KLSAgICBpbnQgbWluVyA9IG1fd2lkdGgsIG1pbk1MLCBtaW5NUiwgbWluWDsK
LSAgICBjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKE1pbldpZHRoLCBjYiwgY3csIHBhYiwg
c3RhdGljX2Rpc3RhbmNlLCBsLCByLCBtaW5XLCBtaW5NTCwgbWluTVIsIG1pblgpOwordm9pZCBS
ZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZVZlcnRpY2FsKCkKK3sKKyAgICBpZiAoaXNSZXBsYWNlZCgp
KSB7CisgICAgICAgIGNhbGNBYnNvbHV0ZVZlcnRpY2FsUmVwbGFjZWQoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KIAotICAgIGludCBtYXhXID0gbV93aWR0aCwgbWF4TUwsIG1heE1SLCBtYXhY
OwotICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3Ro
KQotICAgICAgICBjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKE1heFdpZHRoLCBjYiwgY3cs
IHN0YXRpY19kaXN0YW5jZSwgcGFiLCBsLCByLCBtYXhXLCBtYXhNTCwgbWF4TVIsIG1heFgpOwor
ICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgYmFzZWQgb2ZmIG9mIHRoZSBXM0MgV29ya2luZyBEcmFm
dCBmcm9tIEp1bmUgMTMsIDIwMDUgb2YKKyAgICAvLyBDU1MgMi4xOiBTZWN0aW9uIDEwLjYuNCAi
QWJzb2x1dGVseSBwb3NpdGlvbmVkLCBub24tcmVwbGFjZWQgZWxlbWVudHMiCisgICAgLy8gPGh0
dHA6Ly93d3cudzMub3JnL1RSLzIwMDUvV0QtQ1NTMjEtMjAwNTA2MTMvdmlzdWRldC5odG1sI2Fi
cy1ub24tcmVwbGFjZWQtaGVpZ2h0PgorICAgIC8vIChibG9jay1zdHlsZS1jb21tZW50cyBpbiB0
aGlzIGZ1bmN0aW9uIGFuZCBpbiBjYWxjQWJzb2x1dGVWZXJ0aWNhbFZhbHVlcygpIAorICAgIC8v
IGNvcnJlc3BvbmQgdG8gdGV4dCBmcm9tIHRoZSBzcGVjKQogCi0gICAgaWYgKG1fd2lkdGggPiBt
YXhXKSB7Ci0gICAgICAgIG1fd2lkdGggPSBtYXhXOwotICAgICAgICBtX21hcmdpbkxlZnQgPSBt
YXhNTDsKLSAgICAgICAgbV9tYXJnaW5SaWdodCA9IG1heE1SOwotICAgICAgICBtX3ggPSBtYXhY
OwotICAgIH0KKyAgICAvLyBXZSBkb24ndCB1c2UgY29udGFpbmluZ0Jsb2NrKCksIHNpbmNlIHdl
IG1heSBiZSBwb3NpdGlvbmVkIGJ5IGFuIGVuY2xvc2luZyByZWxwb3NpdGlvbmVkIGlubGluZS4K
KyAgICBjb25zdCBSZW5kZXJPYmplY3QqIGNiID0gY29udGFpbmVyKCk7CisgICAgY29uc3QgaW50
IGJvcmRlcnNQbHVzUGFkZGluZyA9IGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCkgKyBwYWRk
aW5nVG9wKCkgKyBwYWRkaW5nQm90dG9tKCk7CiAgICAgCi0gICAgaWYgKG1fd2lkdGggPCBtaW5X
KSB7Ci0gICAgICAgIG1fd2lkdGggPSBtaW5XOwotICAgICAgICBtX21hcmdpbkxlZnQgPSBtaW5N
TDsKLSAgICAgICAgbV9tYXJnaW5SaWdodCA9IG1pbk1SOwotICAgICAgICBtX3ggPSBtaW5YOwor
ICAgIC8vIEV2ZW4gaW4gc3RyaWN0IG1vZGUgKHdoZXJlIHdlIGRvbid0IGdyb3cgdGhlIHJvb3Qg
dG8gZmlsbCB0aGUgdmlld3BvcnQpIG90aGVyIGJyb3dzZXJzCisgICAgLy8gcG9zaXRpb24gYXMg
dGhvdWdoIHRoZSByb290IGZpbGxzIHRoZSB2aWV3cG9ydC4KKyAgICBjb25zdCBpbnQgY29udGFp
bmVySGVpZ2h0ID0gY2ItPmlzUm9vdCgpID8gY2ItPmF2YWlsYWJsZUhlaWdodCgpIDogKGNiLT5o
ZWlnaHQoKSAtIGNiLT5ib3JkZXJUb3AoKSAtIGNiLT5ib3JkZXJCb3R0b20oKSk7CisKKyAgICBj
b25zdCBMZW5ndGggbWFyZ2luVG9wID0gc3R5bGUoKS0+bWFyZ2luVG9wKCk7CisgICAgY29uc3Qg
TGVuZ3RoIG1hcmdpbkJvdHRvbSA9IHN0eWxlKCktPm1hcmdpbkJvdHRvbSgpOworICAgIExlbmd0
aCB0b3AgPSBzdHlsZSgpLT50b3AoKTsKKyAgICBMZW5ndGggYm90dG9tID0gc3R5bGUoKS0+Ym90
dG9tKCk7ICAgIAorCisgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorICAgICAqIEZvciB0aGUg
cHVycG9zZXMgb2YgdGhpcyBzZWN0aW9uIGFuZCB0aGUgbmV4dCwgdGhlIHRlcm0gInN0YXRpYyBw
b3NpdGlvbiIgCisgICAgICogKG9mIGFuIGVsZW1lbnQpIHJlZmVycywgcm91Z2hseSwgdG8gdGhl
IHBvc2l0aW9uIGFuIGVsZW1lbnQgd291bGQgaGF2ZSBoYWQgCisgICAgICogaW4gdGhlIG5vcm1h
bCBmbG93LiBNb3JlIHByZWNpc2VseSwgdGhlIHN0YXRpYyBwb3NpdGlvbiBmb3IgJ3RvcCcgaXMg
dGhlIAorICAgICAqIGRpc3RhbmNlIGZyb20gdGhlIHRvcCBlZGdlIG9mIHRoZSBjb250YWluaW5n
IGJsb2NrIHRvIHRoZSB0b3AgbWFyZ2luIGVkZ2UgCisgICAgICogb2YgYSBoeXBvdGhldGljYWwg
Ym94IHRoYXQgd291bGQgaGF2ZSBiZWVuIHRoZSBmaXJzdCBib3ggb2YgdGhlIGVsZW1lbnQgaWYg
CisgICAgICogaXRzICdwb3NpdGlvbicgcHJvcGVydHkgaGFkIGJlZW4gJ3N0YXRpYycgYW5kICdm
bG9hdCcgaGFkIGJlZW4gJ25vbmUnLiBUaGUKKyAgICAgKiB2YWx1ZSBpcyBuZWdhdGl2ZSBpZiB0
aGUgaHlwb3RoZXRpY2FsIGJveCBpcyBhYm92ZSB0aGUgY29udGFpbmluZyBibG9jay4KKyAgICAg
KgorICAgICAqIEJ1dCByYXRoZXIgdGhhbiBhY3R1YWxseSBjYWxjdWxhdGluZyB0aGUgZGltZW5z
aW9ucyBvZiB0aGF0IGh5cG90aGV0aWNhbCAKKyAgICAgKiBib3gsIHVzZXIgYWdlbnRzIGFyZSBm
cmVlIHRvIG1ha2UgYSBndWVzcyBhdCBpdHMgcHJvYmFibGUgcG9zaXRpb24uCisgICAgICoKKyAg
ICAgKiBGb3IgdGhlIHB1cnBvc2VzIG9mIGNhbGN1bGF0aW5nIHRoZSBzdGF0aWMgcG9zaXRpb24s
IHRoZSBjb250YWluaW5nIGJsb2NrCisgICAgICogb2YgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50
cyBpcyB0aGUgaW5pdGlhbCBjb250YWluaW5nIGJsb2NrIGluc3RlYWQgb2YgCisgICAgICogdGhl
IHZpZXdwb3J0LgorICAgIFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworICAgIGlmICh0b3AuaXNB
dXRvKCkgJiYgYm90dG9tLmlzQXV0bygpKSB7CisgICAgICAgIC8vIG1fc3RhdGljWSBzaG91bGQg
YWxyZWFkeSBoYXZlIGJlZW4gc2V0IHRocm91Z2ggbGF5b3V0IG9mIHRoZSBwYXJlbnQoKQorICAg
ICAgICBpbnQgc3RhdGljVG9wID0gbV9zdGF0aWNZIC0gY2ItPmJvcmRlclRvcCgpOyAKKyAgICAg
ICAgZm9yIChSZW5kZXJPYmplY3QqIHBvID0gcGFyZW50KCk7IHBvICYmIHBvICE9IGNiOyBwbyA9
IHBvLT5wYXJlbnQoKSkKKyAgICAgICAgICAgIHN0YXRpY1RvcCArPSBwby0+eVBvcygpOworICAg
ICAgICAgICAgCisgICAgICAgIHRvcC5zZXRWYWx1ZShGaXhlZCwgc3RhdGljVG9wKTsKICAgICB9
Ci19CiAKLXZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKFdpZHRo
VHlwZSB3aWR0aFR5cGUsIFJlbmRlck9iamVjdCogY2IsIGludCBjdywgaW50IHBhYiwgaW50IHN0
YXRpY19kaXN0YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBsLCBpbnQgciwgaW50JiB3LCBpbnQmIG1sLCBpbnQmIG1yLCBpbnQmIHgpCi17Ci0g
ICAgY29uc3QgaW50IEFVVE8gPSAtNjY2NjY2OwotICAgIHcgPSBtbCA9IG1yID0gQVVUTzsKKyAg
ICAvLyBOZWVkZWQgdG8gY29tcHV0ZSBvdmVyZmxvdy4KKyAgICBpbnQgaGVpZ2h0OworICAgIAor
ICAgIC8vIENhbGN1bGF0ZSBjb25zdHJhaW50IGVxdWF0aW9uIHZhbHVlcyBmb3IgJ2hlaWdodCcg
Y2FzZS4KKyAgICBjYWxjQWJzb2x1dGVWZXJ0aWNhbFZhbHVlcyhzdHlsZSgpLT5oZWlnaHQoKSwg
Y2IsIGNvbnRhaW5lckhlaWdodCwgYm9yZGVyc1BsdXNQYWRkaW5nLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b3AsIGJvdHRvbSwgbWFyZ2luVG9wLCBtYXJnaW5Cb3R0b20sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LCBtX21hcmdpblRvcCwgbV9tYXJn
aW5Cb3R0b20sIG1feSk7CiAKLSAgICBpZiAoIXN0eWxlKCktPm1hcmdpbkxlZnQoKS5pc0F1dG8o
KSkKLSAgICAgICAgbWwgPSBzdHlsZSgpLT5tYXJnaW5MZWZ0KCkuY2FsY1ZhbHVlKGN3KTsKLSAg
ICBpZiAoIXN0eWxlKCktPm1hcmdpblJpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIG1yID0gc3R5
bGUoKS0+bWFyZ2luUmlnaHQoKS5jYWxjVmFsdWUoY3cpOwogCi0gICAgTGVuZ3RoIHdpZHRoOwot
ICAgIGlmICh3aWR0aFR5cGUgPT0gV2lkdGgpCi0gICAgICAgIHdpZHRoID0gc3R5bGUoKS0+d2lk
dGgoKTsKLSAgICBlbHNlIGlmICh3aWR0aFR5cGUgPT0gTWluV2lkdGgpCi0gICAgICAgIHdpZHRo
ID0gc3R5bGUoKS0+bWluV2lkdGgoKTsKLSAgICBlbHNlCi0gICAgICAgIHdpZHRoID0gc3R5bGUo
KS0+bWF4V2lkdGgoKTsKKyAgICAvLyBBdm9pZCBkb2luZyBhbnkgd29yayBpbiB0aGUgY29tbW9u
IGNhc2UgKHdoZXJlIHRoZSB2YWx1ZXMgb2YgbWluLWhlaWdodCBhbmQgbWF4LWhlaWdodCBhcmUg
dGhlaXIgZGVmYXVsdHMpLiAgICAKKyAgICAvLyBDYWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlv
biB2YWx1ZXMgZm9yICdtYXgtaGVpZ2h0JyBjYXNlLgorICAgIGlmIChzdHlsZSgpLT5tYXhIZWln
aHQoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkgeworICAgICAgICBpbnQgbWF4SGVpZ2h0
OworICAgICAgICBpbnQgbWF4TWFyZ2luVG9wOworICAgICAgICBpbnQgbWF4TWFyZ2luQm90dG9t
OworICAgICAgICBpbnQgbWF4WVBvczsKIAotICAgIGlmICghd2lkdGguaXNJbnRyaW5zaWNPckF1
dG8oKSkKLSAgICAgICAgdyA9IGNhbGNDb250ZW50Qm94V2lkdGgod2lkdGguY2FsY1ZhbHVlKGN3
KSk7Ci0gICAgZWxzZSBpZiAoaXNSZXBsYWNlZCgpKQotICAgICAgICB3ID0gY2FsY1JlcGxhY2Vk
V2lkdGgoKTsKLQotICAgIGlmIChsICE9IEFVVE8gJiYgdyAhPSBBVVRPICYmIHIgIT0gQVVUTykg
ewotICAgICAgICAvLyBsZWZ0LCB3aWR0aCwgcmlnaHQgYWxsIGdpdmVuLCBwbGF5IHdpdGggbWFy
Z2lucwotICAgICAgICBpbnQgb3QgPSBsICsgdyArIHIgKyBwYWI7Ci0KLSAgICAgICAgaWYgKG1s
PT1BVVRPICYmIG1yPT1BVVRPKSB7Ci0gICAgICAgICAgICAvLyBib3RoIG1hcmdpbnMgYXV0bywg
c29sdmUgZm9yIGVxdWFsaXR5Ci0gICAgICAgICAgICBtbCA9IChjdyAtIG90KS8yOwotICAgICAg
ICAgICAgbXIgPSBjdyAtIG90IC0gbWw7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobWw9
PUFVVE8pCi0gICAgICAgICAgICAvLyBzb2x2ZSBmb3IgbGVmdCBtYXJnaW4KLSAgICAgICAgICAg
IG1sID0gY3cgLSBvdCAtIG1yOwotICAgICAgICBlbHNlIGlmIChtcj09QVVUTykKLSAgICAgICAg
ICAgIC8vIHNvbHZlIGZvciByaWdodCBtYXJnaW4KLSAgICAgICAgICAgIG1yID0gY3cgLSBvdCAt
IG1sOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIG92ZXJjb25zdHJhaW5lZCwgc29s
dmUgYWNjb3JkaW5nIHRvIGRpcgotICAgICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigp
ID09IExUUikKLSAgICAgICAgICAgICAgICByID0gY3cgLSAoIGwgKyB3ICsgbWwgKyBtciArIHBh
Yik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbCA9IGN3IC0gKCByICsgdyAr
IG1sICsgbXIgKyBwYWIpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIC8vIG9uZSBvciB0d28gb2YgKGxlZnQsIHdpZHRoLCByaWdodCkgbWlzc2luZywgc29sdmUK
KyAgICAgICAgY2FsY0Fic29sdXRlVmVydGljYWxWYWx1ZXMoc3R5bGUoKS0+bWF4SGVpZ2h0KCks
IGNiLCBjb250YWluZXJIZWlnaHQsIGJvcmRlcnNQbHVzUGFkZGluZywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9wLCBib3R0b20sIG1hcmdpblRvcCwgbWFyZ2luQm90dG9t
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQsIG1heE1hcmdp
blRvcCwgbWF4TWFyZ2luQm90dG9tLCBtYXhZUG9zKTsKIAotICAgICAgICAvLyBhdXRvIG1hcmdp
bnMgYXJlIGlnbm9yZWQKLSAgICAgICAgaWYgKG1sPT1BVVRPKSBtbCA9IDA7Ci0gICAgICAgIGlm
IChtcj09QVVUTykgbXIgPSAwOwotCi0gICAgICAgIC8vMS4gc29sdmUgbGVmdCAmIHdpZHRoLgot
ICAgICAgICBpZiAobCA9PSBBVVRPICYmIHcgPT0gQVVUTyAmJiByICE9IEFVVE8pIHsKLSAgICAg
ICAgICAgIC8vIEZyb20gc2VjdGlvbiAxMC4zLjcgb2YgdGhlIENTUzIuMSBzcGVjaWZpY2F0aW9u
LgotICAgICAgICAgICAgLy8gIlRoZSBzaHJpbmstdG8tZml0IHdpZHRoIGlzOiBtaW4obWF4KHBy
ZWZlcnJlZCBtaW5pbXVtIHdpZHRoLCBhdmFpbGFibGUgd2lkdGgpLCBwcmVmZXJyZWQgd2lkdGgp
LiIKLSAgICAgICAgICAgIHcgPSBrTWluKGtNYXgobV9taW5XaWR0aCAtIHBhYiwgY3cgLSAociAr
IG1sICsgbXIgKyBwYWIpKSwgbV9tYXhXaWR0aCAtIHBhYik7Ci0gICAgICAgICAgICBsID0gY3cg
LSAociArIHcgKyBtbCArIG1yICsgcGFiKTsKKyAgICAgICAgIGlmIChoZWlnaHQgPiBtYXhIZWln
aHQpIHsKKyAgICAgICAgICAgIGhlaWdodCA9IG1heEhlaWdodDsKKyAgICAgICAgICAgIG1fbWFy
Z2luVG9wID0gbWF4TWFyZ2luVG9wOworICAgICAgICAgICAgbV9tYXJnaW5Cb3R0b20gPSBtYXhN
YXJnaW5Cb3R0b207CisgICAgICAgICAgICBtX3kgPSBtYXhZUG9zOwogICAgICAgICB9Ci0gICAg
ICAgIGVsc2UKKyAgICB9CiAKLSAgICAgICAgLy8yLiBzb2x2ZSBsZWZ0ICYgcmlnaHQuIHVzZSBz
dGF0aWMgcG9zaXRpb25pbmcuCi0gICAgICAgIGlmIChsID09IEFVVE8gJiYgdyAhPSBBVVRPICYm
IHIgPT0gQVVUTykgewotICAgICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpPT1SVEwp
IHsKLSAgICAgICAgICAgICAgICByID0gc3RhdGljX2Rpc3RhbmNlOwotICAgICAgICAgICAgICAg
IGwgPSBjdyAtIChyICsgdyArIG1sICsgbXIgKyBwYWIpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbCA9IHN0YXRpY19kaXN0YW5jZTsKLSAgICAg
ICAgICAgICAgICByID0gY3cgLSAobCArIHcgKyBtbCArIG1yICsgcGFiKTsKLSAgICAgICAgICAg
IH0KKyAgICAvLyBDYWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlvbiB2YWx1ZXMgZm9yICdtaW4t
aGVpZ2h0JyBjYXNlLgorICAgIGlmIChzdHlsZSgpLT5taW5IZWlnaHQoKS52YWx1ZSgpKSB7Cisg
ICAgICAgIGludCBtaW5IZWlnaHQ7CisgICAgICAgIGludCBtaW5NYXJnaW5Ub3A7CisgICAgICAg
IGludCBtaW5NYXJnaW5Cb3R0b207CisgICAgICAgIGludCBtaW5ZUG9zOworICAgICAgICAKKyAg
ICAgICAgY2FsY0Fic29sdXRlVmVydGljYWxWYWx1ZXMoc3R5bGUoKS0+bWluSGVpZ2h0KCksIGNi
LCBjb250YWluZXJIZWlnaHQsIGJvcmRlcnNQbHVzUGFkZGluZywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9wLCBib3R0b20sIG1hcmdpblRvcCwgbWFyZ2luQm90dG9tLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQsIG1pbk1hcmdpblRv
cCwgbWluTWFyZ2luQm90dG9tLCBtaW5ZUG9zKTsKIAotICAgICAgICB9IC8vMy4gc29sdmUgd2lk
dGggJiByaWdodC4KLSAgICAgICAgZWxzZSBpZiAobCAhPSBBVVRPICYmIHcgPT0gQVVUTyAmJiBy
ID09IEFVVE8pIHsKLSAgICAgICAgICAgIC8vIEZyb20gc2VjdGlvbiAxMC4zLjcgb2YgdGhlIENT
UzIuMSBzcGVjaWZpY2F0aW9uLgotICAgICAgICAgICAgLy8gIlRoZSBzaHJpbmstdG8tZml0IHdp
ZHRoIGlzOiBtaW4obWF4KHByZWZlcnJlZCBtaW5pbXVtIHdpZHRoLCBhdmFpbGFibGUgd2lkdGgp
LCBwcmVmZXJyZWQgd2lkdGgpLiIKLSAgICAgICAgICAgIHcgPSBrTWluKGtNYXgobV9taW5XaWR0
aCAtIHBhYiwgY3cgLSAobCArIG1sICsgbXIgKyBwYWIpKSwgbV9tYXhXaWR0aCAtIHBhYik7Ci0g
ICAgICAgICAgICByID0gY3cgLSAobCArIHcgKyBtbCArIG1yICsgcGFiKTsKKyAgICAgICAgaWYg
KGhlaWdodCA8IG1pbkhlaWdodCkgeworICAgICAgICAgICAgaGVpZ2h0ID0gbWluSGVpZ2h0Owor
ICAgICAgICAgICAgbV9tYXJnaW5Ub3AgPSBtaW5NYXJnaW5Ub3A7CisgICAgICAgICAgICBtX21h
cmdpbkJvdHRvbSA9IG1pbk1hcmdpbkJvdHRvbTsKKyAgICAgICAgICAgIG1feSA9IG1pbllQb3M7
CiAgICAgICAgIH0KLSAgICAgICAgZWxzZQotCi0gICAgICAgIC8vNC4gc29sdmUgbGVmdAotICAg
ICAgICBpZiAobD09QVVUTyAmJiB3IT1BVVRPICYmIHIhPUFVVE8pCi0gICAgICAgICAgICBsID0g
Y3cgLSAociArIHcgKyBtbCArIG1yICsgcGFiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAvLzUu
IHNvbHZlIHdpZHRoCi0gICAgICAgIGlmIChsIT1BVVRPICYmIHc9PUFVVE8gJiYgciE9QVVUTykK
LSAgICAgICAgICAgIHcgPSBjdyAtIChyICsgbCArIG1sICsgbXIgKyBwYWIpOwotICAgICAgICBl
bHNlCi0KLSAgICAgICAgLy82LiBzb2x2ZSByaWdodAotICAgICAgICBpZiAobCE9QVVUTyAmJiB3
IT1BVVRPICYmIHI9PUFVVE8pCi0gICAgICAgICAgICByID0gY3cgLSAobCArIHcgKyBtbCArIG1y
ICsgcGFiKTsKICAgICB9Ci0KLSAgICB3ICs9IHBhYjsKLSAgICB4ID0gbCArIG1sICsgY2ItPmJv
cmRlckxlZnQoKTsKKyAgICAKKyAgICAvLyBJZiBvdXIgbmF0dXJhbCBoZWlnaHQgZXhjZWVkcyB0
aGUgbmV3IGhlaWdodCBvbmNlIHdlJ3ZlIHNldCBpdCwgdGhlbiB3ZQorICAgIC8vIG5lZWQgdG8g
bWFrZSBzdXJlIHRvIHVwZGF0ZSBvdmVyZmxvdyB0byB0cmFjayB0aGUgc3BpbGxvdXQuCisgICAg
aWYgKG1faGVpZ2h0ID4gaGVpZ2h0KQorICAgICAgICBzZXRPdmVyZmxvd0hlaWdodChtX2hlaWdo
dCk7CisgICAgCisgICAgbV9oZWlnaHQgPSBoZWlnaHQ7CiB9CiAKLXZvaWQgUmVuZGVyQm94Ojpj
YWxjQWJzb2x1dGVWZXJ0aWNhbCgpCi17Ci0gICAgLy8gY3NzMiBzcGVjIDEwLjYuNCAmIDEwLjYu
NQotCi0gICAgLy8gYmFzZWQgb24KLSAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9TdHlsZS9jc3My
LXVwZGF0ZXMvUkVDLUNTUzItMTk5ODA1MTItZXJyYXRhCi0gICAgLy8gKGFjdHVhbGx5IHVwZGF0
ZWQgMjAwMC0xMC0yNCkKLSAgICAvLyB0aGF0IGludHJvZHVjZXMgc3RhdGljLXBvc2l0aW9uIHZh
bHVlIGZvciB0b3AsIGxlZnQgJiByaWdodAordm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZVZl
cnRpY2FsVmFsdWVzKExlbmd0aCBoZWlnaHQsIGNvbnN0IFJlbmRlck9iamVjdCogY2IsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBjb250YWlu
ZXJIZWlnaHQsIGNvbnN0IGludCBib3JkZXJzUGx1c1BhZGRpbmcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGVuZ3RoIHRvcCwgY29uc3QgTGVuZ3Ro
IGJvdHRvbSwgY29uc3QgTGVuZ3RoIG1hcmdpblRvcCwgY29uc3QgTGVuZ3RoIG1hcmdpbkJvdHRv
bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGhlaWdo
dFZhbHVlLCBpbnQmIG1hcmdpblRvcFZhbHVlLCBpbnQmIG1hcmdpbkJvdHRvbVZhbHVlLCBpbnQm
IHlQb3MpCit7CisgICAgLy8gJ3RvcCcgYW5kICdib3R0b20nIGNhbm5vdCBib3RoIGJlICdhdXRv
JyBiZWNhdXNlICd0b3Agd291bGQgb2YgYmVlbgorICAgIC8vIGNvbnZlcnRlZCB0byB0aGUgc3Rh
dGljIHBvc2l0aW9uIGluIGNhbGNBYnNvbHV0ZVZlcnRpY2FsKCkKKyAgICBBU1NFUlQoISh0b3Au
aXNBdXRvKCkgJiYgYm90dG9tLmlzQXV0bygpKSk7CisKKyAgICBpbnQgdG9wVmFsdWU7CisgICAg
aW50IGJvdHRvbVZhbHVlOworICAgIGludCBjb250ZW50SGVpZ2h0ID0gbV9oZWlnaHQgLSBib3Jk
ZXJzUGx1c1BhZGRpbmc7ICAgIAorCisgICAgYm9vbCBoZWlnaHRJc0F1dG8gPSBoZWlnaHQuaXNB
dXRvKCk7CisgICAgYm9vbCB0b3BJc0F1dG8gPSB0b3AuaXNBdXRvKCk7CisgICAgYm9vbCBib3R0
b21Jc0F1dG8gPSBib3R0b20uaXNBdXRvKCk7CisKKyAgICAvLyBIZWlnaHQgaXMgbmV2ZXIgdW5z
b2x2ZWQgZm9yIHRhYmxlcy4KKyAgICBpZiAoaXNUYWJsZSgpICYmIGhlaWdodElzQXV0bykgewor
ICAgICAgICBoZWlnaHQuc2V0VmFsdWUoRml4ZWQsIGNvbnRlbnRIZWlnaHQpOworICAgICAgICAv
L2hlaWdodFZhbHVlID0gY29udGVudEhlaWdodDsKKyAgICAgICAgaGVpZ2h0SXNBdXRvID0gZmFs
c2U7CisgICAgfSBlbHNlIGlmICghaGVpZ2h0SXNBdXRvKSB7CisgICAgICAgIC8vaGVpZ2h0VmFs
dWUgPSBjYWxjQ29udGVudEJveEhlaWdodChoZWlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdo
dCkpOworICAgICAgICBjb250ZW50SGVpZ2h0ID0gbWluKGNvbnRlbnRIZWlnaHQsIGNhbGNDb250
ZW50Qm94SGVpZ2h0KGhlaWdodC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KSkpOworICAgIH0K
IAotICAgIGNvbnN0IGludCBBVVRPID0gLTY2NjY2NjsKLSAgICBpbnQgdCwgYiwgY2g7CiAKLSAg
ICB0ID0gYiA9IEFVVE87CisgICAgaWYgKCF0b3BJc0F1dG8gJiYgIWhlaWdodElzQXV0byAmJiAh
Ym90dG9tSXNBdXRvKSB7CisgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorICAgICAgICAgKiBJ
ZiBub25lIG9mIHRoZSB0aHJlZSBhcmUgJ2F1dG8nOiBJZiBib3RoICdtYXJnaW4tdG9wJyBhbmQg
J21hcmdpbi0KKyAgICAgICAgICogYm90dG9tJyBhcmUgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRp
b24gdW5kZXIgdGhlIGV4dHJhIGNvbnN0cmFpbnQgdGhhdAorICAgICAgICAgKiB0aGUgdHdvIG1h
cmdpbnMgZ2V0IGVxdWFsIHZhbHVlcy4gSWYgb25lIG9mICdtYXJnaW4tdG9wJyBvciAnbWFyZ2lu
LQorICAgICAgICAgKiBib3R0b20nIGlzICdhdXRvJywgc29sdmUgdGhlIGVxdWF0aW9uIGZvciB0
aGF0IHZhbHVlLiBJZiB0aGUgdmFsdWVzIAorICAgICAgICAgKiBhcmUgb3Zlci1jb25zdHJhaW5l
ZCwgaWdub3JlIHRoZSB2YWx1ZSBmb3IgJ2JvdHRvbScgYW5kIHNvbHZlIGZvciB0aGF0CisgICAg
ICAgICAqIHZhbHVlLgorICAgICAgICBcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gCisgICAgICAgIAorICAg
ICAgICBoZWlnaHRWYWx1ZSA9IGNhbGNDb250ZW50Qm94SGVpZ2h0KGhlaWdodC5jYWxjVmFsdWUo
Y29udGFpbmVySGVpZ2h0KSk7CisgICAgICAgIHRvcFZhbHVlID0gdG9wLmNhbGNWYWx1ZShjb250
YWluZXJIZWlnaHQpOworICAgICAgICBib3R0b21WYWx1ZSA9IGJvdHRvbS5jYWxjVmFsdWUoY29u
dGFpbmVySGVpZ2h0KTsKKyAgICAgICAgCisgICAgICAgIGNvbnN0IGludCBhdmFpbGFibGVTcGFj
ZSA9IGNvbnRhaW5lckhlaWdodCAtICh0b3BWYWx1ZSArIGhlaWdodFZhbHVlICsgYm90dG9tVmFs
dWUgKyBib3JkZXJzUGx1c1BhZGRpbmcpOwogCi0gICAgaW50IHBhYiA9IGJvcmRlclRvcCgpK2Jv
cmRlckJvdHRvbSgpK3BhZGRpbmdUb3AoKStwYWRkaW5nQm90dG9tKCk7CisgICAgICAgIC8vIE1h
cmdpbnMgYXJlIG5vdyB0aGUgb25seSB1bmtub3duCisgICAgICAgIGlmIChtYXJnaW5Ub3AuaXNB
dXRvKCkgJiYgbWFyZ2luQm90dG9tLmlzQXV0bygpKSB7CisgICAgICAgICAgICAvLyBCb3RoIG1h
cmdpbnMgYXV0bywgc29sdmUgZm9yIGVxdWFsaXR5CisgICAgICAgICAgICBtYXJnaW5Ub3BWYWx1
ZSA9IGF2YWlsYWJsZVNwYWNlIC8gMjsKKyAgICAgICAgICAgIG1hcmdpbkJvdHRvbVZhbHVlID0g
bWFyZ2luVG9wVmFsdWU7CisgICAgICAgIH0gZWxzZSBpZiAobWFyZ2luVG9wLmlzQXV0bygpKSB7
CisgICAgICAgICAgICAvLyBTb2x2ZSBmb3IgdG9wIG1hcmdpbgorICAgICAgICAgICAgbWFyZ2lu
Qm90dG9tVmFsdWUgPSBtYXJnaW5Cb3R0b20uY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCk7Cisg
ICAgICAgICAgICBtYXJnaW5Ub3BWYWx1ZSA9IGF2YWlsYWJsZVNwYWNlIC0gbWFyZ2luQm90dG9t
VmFsdWU7CisgICAgICAgIH0gZWxzZSBpZiAobWFyZ2luQm90dG9tLmlzQXV0bygpKSB7CisgICAg
ICAgICAgICAvLyBTb2x2ZSBmb3IgYm90dG9tIG1hcmdpbgorICAgICAgICAgICAgbWFyZ2luVG9w
VmFsdWUgPSBtYXJnaW5Ub3AuY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCk7CisgICAgICAgICAg
ICBtYXJnaW5Cb3R0b21WYWx1ZSA9IGF2YWlsYWJsZVNwYWNlIC0gbWFyZ2luVG9wVmFsdWU7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPdmVyLWNvbnN0cmFpbmVkLCBzb2x2ZSBm
b3IgYm90dG9tCisgICAgICAgICAgICBtYXJnaW5Ub3BWYWx1ZSA9IG1hcmdpblRvcC5jYWxjVmFs
dWUoY29udGFpbmVySGVpZ2h0KTsKKyAgICAgICAgICAgIG1hcmdpbkJvdHRvbVZhbHVlID0gbWFy
Z2luQm90dG9tLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpOworICAgICAgICAgICAgYm90dG9t
VmFsdWUgPSAoYXZhaWxhYmxlU3BhY2UgKyBib3R0b21WYWx1ZSkgLSBtYXJnaW5Ub3BWYWx1ZSAt
IG1hcmdpbkJvdHRvbVZhbHVlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSpcCisgICAgICAgICAqIE90aGVyd2lzZSwgc2V0ICdhdXRvJyB2YWx1ZXMgZm9y
ICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nCisgICAgICAgICAqIHRvIDAsIGFuZCBw
aWNrIHRoZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzaXggcnVsZXMgdGhhdCBhcHBsaWVzLgorICAg
ICAgICAgKgorICAgICAgICAgKiAxLiAndG9wJyBhbmQgJ2hlaWdodCcgYXJlICdhdXRvJyBhbmQg
J2JvdHRvbScgaXMgbm90ICdhdXRvJywgdGhlbiAgCisgICAgICAgICAqICAgIHRoZSBoZWlnaHQg
aXMgYmFzZWQgb24gdGhlIGNvbnRlbnQsIGFuZCBzb2x2ZSBmb3IgJ3RvcCcuCisgICAgICAgICAq
IAorICAgICAgICAgKiAgICAgICAgICAgICAgT01JVCBSVUxFIDIgQVMgSVQgU0hPVUxEIE5FVkVS
IEJFIEhJVAorICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICogMi4gJ3RvcCcgYW5kICdi
b3R0b20nIGFyZSAnYXV0bycgYW5kICdoZWlnaHQnIGlzIG5vdCAnYXV0bycsIHRoZW4gCisgICAg
ICAgICAqICAgIHNldCAndG9wJyB0byB0aGUgc3RhdGljIHBvc2l0aW9uLCBhbmQgc29sdmUgZm9y
ICdib3R0b20nLgorICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICoKKyAgICAgICAgICog
My4gJ2hlaWdodCcgYW5kICdib3R0b20nIGFyZSAnYXV0bycgYW5kICd0b3AnIGlzIG5vdCAnYXV0
bycsIHRoZW4KKyAgICAgICAgICogICAgdGhlIGhlaWdodCBpcyBiYXNlZCBvbiB0aGUgY29udGVu
dCwgYW5kIHNvbHZlIGZvciAnYm90dG9tJy4KKyAgICAgICAgICogNC4gJ3RvcCcgaXMgJ2F1dG8n
LCAnaGVpZ2h0JyBhbmQgJ2JvdHRvbScgYXJlIG5vdCAnYXV0bycsIGFuZCAKKyAgICAgICAgICog
ICAgc29sdmUgZm9yICd0b3AnLgorICAgICAgICAgKiA1LiAnaGVpZ2h0JyBpcyAnYXV0bycsICd0
b3AnIGFuZCAnYm90dG9tJyBhcmUgbm90ICdhdXRvJywgYW5kIAorICAgICAgICAgKiAgICBzb2x2
ZSBmb3IgJ2hlaWdodCcuCisgICAgICAgICAqIDYuICdib3R0b20nIGlzICdhdXRvJywgJ3RvcCcg
YW5kICdoZWlnaHQnIGFyZSBub3QgJ2F1dG8nLCBhbmQgCisgICAgICAgICAqICAgIHNvbHZlIGZv
ciAnYm90dG9tJy4KKyAgICAgICAgXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyAgICAgICAgLy8gQ2FsY3Vs
YXRlIG1hcmdpbnMsICdhdXRvJyBtYXJnaW5zIGFyZSBpZ25vcmVkLgorICAgICAgICBtYXJnaW5U
b3BWYWx1ZSA9IG1hcmdpblRvcC5jYWxjTWluVmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKyAgICAg
ICAgbWFyZ2luQm90dG9tVmFsdWUgPSBtYXJnaW5Cb3R0b20uY2FsY01pblZhbHVlKGNvbnRhaW5l
ckhlaWdodCk7CisgICAgICAgIAorICAgICAgICBjb25zdCBpbnQgYXZhaWxhYmxlU3BhY2UgPSBj
b250YWluZXJIZWlnaHQgLSAobWFyZ2luVG9wVmFsdWUgKyBtYXJnaW5Cb3R0b21WYWx1ZSArIGJv
cmRlcnNQbHVzUGFkZGluZyk7CisgICAgICAgIAorICAgICAgICAvLyBVc2UgcnVsZS9jYXNlIHRo
YXQgYXBwbGllcy4KKyAgICAgICAgaWYgKHRvcElzQXV0byAmJiBoZWlnaHRJc0F1dG8gJiYgIWJv
dHRvbUlzQXV0bykgeyAgICAgCisgICAgICAgICAgICAvLyBSVUxFIDE6IChoZWlnaHQgaXMgY29u
dGVudCBiYXNlZCwgc29sdmUgb2YgdG9wKQorICAgICAgICAgICAgaGVpZ2h0VmFsdWUgPSBjb250
ZW50SGVpZ2h0OworICAgICAgICAgICAgYm90dG9tVmFsdWUgPSBib3R0b20uY2FsY1ZhbHVlKGNv
bnRhaW5lckhlaWdodCk7CisgICAgICAgICAgICB0b3BWYWx1ZSA9IGF2YWlsYWJsZVNwYWNlIC0g
KGhlaWdodFZhbHVlICsgYm90dG9tVmFsdWUpOworCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBiZSBkZWFkIGNvZGUsIGFzIGlmIHRvcCBhbmQgYm90dG9tIGFyZSBib3RoICdhdXRvJywg
dG9wCisgICAgICAgIC8vIHdpbGwgYWx3YXlzIGJlIHNldCB0byB0aGUgc3RhdGljIHBvc3Rpb24u
ICBTZWUgdGhlIEFTU0VSVCBhdCB0b3Agb2YgZnVuY3Rpb24uCisgICAgICAgIC8vIH0gZWxzZSBp
ZiAodG9wLmlzQXV0bygpICYmICFoZWlnaHQuaXNBdXRvKCkgJiYgYm90dG9tLmlzQXV0bygpKSB7
CisgICAgICAgIC8vICAgIC8vIFJVTEUgMjogKHVzZSBzdGF0aWMgcG9zaXRpb25pbmcgZm9yIHRv
cCwgc29sdmUgb2YgYm90dG9tKQorICAgICAgICAvLyAgICBoZWlnaHRWYWx1ZSA9IGhlaWdodC5j
YWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKyAgICAgICAgLy8gICAgCisgICAgICAgIC8vICAg
IHRvcFZhbHVlID0gc3RhdGljVG9wOworICAgICAgICAvLyAgICBib3R0b21WYWx1ZSA9IGNvbnRh
aW5lckhlaWdodCAtIChoZWlnaHRWYWx1ZSArIHRvcFZhbHVlICsga25vd24pOworICAgICAgICAg
ICAgCisgICAgICAgIH0gZWxzZSBpZiAoIXRvcElzQXV0byAmJiBoZWlnaHRJc0F1dG8gJiYgYm90
dG9tSXNBdXRvKSB7CisgICAgICAgICAgICAvLyBSVUxFIDM6IChoZWlnaHQgaXMgY29udGVudCBi
YXNlZCwgc29sdmUgb2YgYm90dG9tKQorICAgICAgICAgICAgdG9wVmFsdWUgPSB0b3AuY2FsY1Zh
bHVlKGNvbnRhaW5lckhlaWdodCk7CisgICAgICAgICAgICBoZWlnaHRWYWx1ZSA9IGNvbnRlbnRI
ZWlnaHQ7CisgICAgICAgICAgICBib3R0b21WYWx1ZSA9IGF2YWlsYWJsZVNwYWNlIC0gKHRvcFZh
bHVlICsgaGVpZ2h0VmFsdWUpOworICAgICAgICB9IGVsc2UgaWYgKHRvcElzQXV0byAmJiAhaGVp
Z2h0SXNBdXRvICYmICFib3R0b21Jc0F1dG8pIHsKKyAgICAgICAgICAgIC8vIFJVTEUgNDogKHNv
bHZlIG9mIHRvcCkKKyAgICAgICAgICAgIGhlaWdodFZhbHVlID0gY2FsY0NvbnRlbnRCb3hIZWln
aHQoaGVpZ2h0LmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpKTsKKyAgICAgICAgICAgIGJvdHRv
bVZhbHVlID0gYm90dG9tLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpOworICAgICAgICAgICAg
dG9wVmFsdWUgPSBhdmFpbGFibGVTcGFjZSAtIChoZWlnaHRWYWx1ZSArIGJvdHRvbVZhbHVlKTsK
KyAgICAgICAgfSBlbHNlIGlmICghdG9wSXNBdXRvICYmIGhlaWdodElzQXV0byAmJiAhYm90dG9t
SXNBdXRvKSB7CisgICAgICAgICAgICAvLyBSVUxFIDU6IChzb2x2ZSBvZiBoZWlnaHQpCisgICAg
ICAgICAgICB0b3BWYWx1ZSA9IHRvcC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKyAgICAg
ICAgICAgIGJvdHRvbVZhbHVlID0gYm90dG9tLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpOwor
ICAgICAgICAgICAgaGVpZ2h0VmFsdWUgPSBhdmFpbGFibGVTcGFjZSAtICh0b3BWYWx1ZSArIGJv
dHRvbVZhbHVlKTsKKyAgICAgICAgfSBlbHNlIGlmICghdG9wSXNBdXRvICYmICFoZWlnaHRJc0F1
dG8gJiYgYm90dG9tSXNBdXRvKSB7CisgICAgICAgICAgICAvLyBSVUxFIDQ6IChzb2x2ZSBvZiBi
b3R0b20pCisgICAgICAgICAgICBoZWlnaHRWYWx1ZSA9IGNhbGNDb250ZW50Qm94SGVpZ2h0KGhl
aWdodC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KSk7CisgICAgICAgICAgICB0b3BWYWx1ZSA9
IHRvcC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKyAgICAgICAgICAgIGJvdHRvbVZhbHVl
ID0gYXZhaWxhYmxlU3BhY2UgLSAodG9wVmFsdWUgKyBoZWlnaHRWYWx1ZSk7CisgICAgICAgIH0K
KyAgICB9CiAKKyAgICAvLyBNYWtlIGZpbmFsIGFkanVzdG1lbnRzIHRvIGhlaWdodC4KKyAgICBp
ZiAoIShjb250ZW50SGVpZ2h0IDwgaGVpZ2h0VmFsdWUpICYmICEoaGFzT3ZlcmZsb3dDbGlwKCkg
JiYgY29udGVudEhlaWdodCA+IGhlaWdodFZhbHVlKSkKKyAgICAgICAgaGVpZ2h0VmFsdWUgPSBj
b250ZW50SGVpZ2h0OworCisgICAgLy8gRG8gbm90IGFsbG93IHRoZSBoZWlnaHQgdG8gYmUgbmVn
YXRpdmUuICBUaGlzIGNhbiBoYXBwZW4gd2hlbiBzb21lb25lCisgICAgLy8gc3BlY2lmaWVzIGJv
dGggdG9wIGFuZCBib3R0b20gYnV0IHRoZSBjb250YWluaW5nIGJsb2NrIGhlaWdodCBpcyBsZXNz
CisgICAgLy8gdGhhbiB0b3AsIGUuZy4sIHRvcDogMjBweCwgYm90dG9tOiAwLCBjb250YWluaW5n
IGJsb2NrIGhlaWdodCAxNi4KKyAgICBoZWlnaHRWYWx1ZSA9IG1heCgwLCBoZWlnaHRWYWx1ZSAr
IGJvcmRlcnNQbHVzUGFkZGluZyk7ICAgIAorICAgIAorICAgIC8vIEZJWE1FOiBUSElTIFNFRU1T
IFdST05HLiAgV2hhdCBpcyB0aGUgcG9pbnQgb2YgYWx3YXlzIGNhbGN1bGF0aW5nIGZvciAnYm90
dG9tJyBpZiBpdCBpcyBuZXZlciB1c2VkPworICAgIHlQb3MgPSB0b3BWYWx1ZSArIG1hcmdpblRv
cFZhbHVlICsgY2ItPmJvcmRlclRvcCgpOworfQorCit2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29s
dXRlSG9yaXpvbnRhbFJlcGxhY2VkKCkKK3sgICAKKyAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGJh
c2VkIG9mZiBvZiB0aGUgVzNDIFdvcmtpbmcgRHJhZnQgZnJvbSBKdW5lIDEzLCAyMDA1IG9mCisg
ICAgLy8gQ1NTIDIuMTogU2VjdGlvbiAxMC4zLjggIkFic29sdXRseSBwb3NpdGlvbmVkLCByZXBs
YWNlZCBlbGVtZW50cyIKKyAgICAvLyA8aHR0cDovL3d3dy53My5vcmcvVFIvMjAwNS9XRC1DU1My
MS0yMDA1MDYxMy92aXN1ZGV0Lmh0bWwjYWJzLXJlcGxhY2VkLXdpZHRoPgorICAgIC8vIChudW1i
ZXJlZCBjb21tZW50cyBjb3JyZXNwb25kIHRvIG51bWJlcnMgaW4gc3BlYykKKyAgICAKKyAgICAK
ICAgICAvLyBXZSBkb24ndCB1c2UgY29udGFpbmluZ0Jsb2NrKCksIHNpbmNlIHdlIG1heSBiZSBw
b3NpdGlvbmVkIGJ5IGFuIGVuY2xvc2luZyByZWxwb3NpdGlvbmVkIGlubGluZS4KLSAgICBSZW5k
ZXJPYmplY3QqIGNiID0gY29udGFpbmVyKCk7Ci0gICAgaWYgKGNiLT5pc1Jvb3QoKSkgLy8gRXZl
biBpbiBzdHJpY3QgbW9kZSAod2hlcmUgd2UgZG9uJ3QgZ3JvdyB0aGUgcm9vdCB0byBmaWxsIHRo
ZSB2aWV3cG9ydCkgb3RoZXIgYnJvd3NlcnMKLSAgICAgICAgICAgICAgICAgICAgICAvLyBwb3Np
dGlvbiBhcyB0aG91Z2ggdGhlIHJvb3QgZmlsbHMgdGhlIHZpZXdwb3J0LgotICAgICAgICBjaCA9
IGNiLT5hdmFpbGFibGVIZWlnaHQoKTsKLSAgICBlbHNlCi0gICAgICAgIGNoID0gY2ItPmhlaWdo
dCgpIC0gY2ItPmJvcmRlclRvcCgpIC0gY2ItPmJvcmRlckJvdHRvbSgpOwotCi0gICAgaWYgKCFz
dHlsZSgpLT50b3AoKS5pc0F1dG8oKSkKLSAgICAgICAgdCA9IHN0eWxlKCktPnRvcCgpLmNhbGNW
YWx1ZShjaCk7Ci0gICAgaWYgKCFzdHlsZSgpLT5ib3R0b20oKS5pc0F1dG8oKSkKLSAgICAgICAg
YiA9IHN0eWxlKCktPmJvdHRvbSgpLmNhbGNWYWx1ZShjaCk7Ci0KLSAgICBpbnQgaCwgbXQsIG1i
LCB5OwotICAgIGNhbGNBYnNvbHV0ZVZlcnRpY2FsVmFsdWVzKEhlaWdodCwgY2IsIGNoLCBwYWIs
IHQsIGIsIGgsIG10LCBtYiwgeSk7Ci0KLSAgICAvLyBBdm9pZCBkb2luZyBhbnkgd29yayBpbiB0
aGUgY29tbW9uIGNhc2UgKHdoZXJlIHRoZSB2YWx1ZXMgb2YgbWluLWhlaWdodCBhbmQgbWF4LWhl
aWdodCBhcmUgdGhlaXIgZGVmYXVsdHMpLgotICAgIGludCBtaW5IID0gaCwgbWluTVQsIG1pbk1C
LCBtaW5ZOwotICAgIGNhbGNBYnNvbHV0ZVZlcnRpY2FsVmFsdWVzKE1pbkhlaWdodCwgY2IsIGNo
LCBwYWIsIHQsIGIsIG1pbkgsIG1pbk1ULCBtaW5NQiwgbWluWSk7CisgICAgY29uc3QgUmVuZGVy
T2JqZWN0KiBjYiA9IGNvbnRhaW5lcigpOworICAgIGNvbnN0IGludCBjb250YWluZXJXaWR0aCA9
IGNvbnRhaW5pbmdCbG9ja1dpZHRoKCkgKyBjYi0+cGFkZGluZ0xlZnQoKSArIGNiLT5wYWRkaW5n
UmlnaHQoKTsKKyAgICAKKyAgICAvLyBWYXJpYWJsZXMgdG8gc29sdmUuCisgICAgTGVuZ3RoIGxl
ZnQgPSBzdHlsZSgpLT5sZWZ0KCk7CisgICAgTGVuZ3RoIHJpZ2h0ID0gc3R5bGUoKS0+cmlnaHQo
KTsKKyAgICBMZW5ndGggbWFyZ2luTGVmdCA9IHN0eWxlKCktPm1hcmdpbkxlZnQoKTsKKyAgICBM
ZW5ndGggbWFyZ2luUmlnaHQgPSBzdHlsZSgpLT5tYXJnaW5SaWdodCgpOworICAgIAorICAgIGlu
dCBsZWZ0VmFsdWU7CisgICAgaW50IHJpZ2h0VmFsdWU7CisKKworICAgIC8vIDEwLjMuOAorICAg
IC8vIDEuIFRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXMgZGV0ZXJtaW5lZCBhcyBmb3IgaW5s
aW5lIHJlcGxhY2VkIGVsZW1lbnRzLgorICAgIAorICAgIC8vIE5PVEU6IFRoaXMgdmFsdWUgb2Yg
d2lkdGggaXMgRklOQUwgaW4gdGhhdCB0aGUgbWluL21heCB3aWR0aCBjYWxjdWxhdGlvbnMKKyAg
ICAvLyBhcmUgZGVhbHQgd2l0aCBpbiBjYWxjUmVwbGFjZWRXaWR0aCgpLiAgVGhpcyBtZWFucyB0
aGF0IHRoZSBzdGVwcyB0byBwcm9kdWNlCisgICAgLy8gY29ycmVjdCBtYXgvbWluIGluIHRoZSBu
b24tcmVwbGFjZWQgdmVyc2lvbiwgYXJlIG5vdCBuZWNlc3NhcnkuCisgICAgbV93aWR0aCA9IGNh
bGNSZXBsYWNlZFdpZHRoKCkgKyBib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpICsgcGFkZGlu
Z0xlZnQoKSArIHBhZGRpbmdSaWdodCgpOworICAgIGNvbnN0IGludCBhdmFpbGFibGVTcGFjZSA9
IGNvbnRhaW5lcldpZHRoIC0gbV93aWR0aDsKKworICAgIC8vIDIuIElmIGJvdGggJ2xlZnQnIGFu
ZCAncmlnaHQnIGhhdmUgdGhlIHZhbHVlICdhdXRvJywgdGhlbiBpZiAnZGlyZWN0aW9uJyBvZiAK
KyAgICAvLyB0aGUgY29udGFpbmluZyBibG9jayBpcyAnbHRyJywgc2V0ICdsZWZ0JyB0byB0aGUg
c3RhdGljIHBvc2l0aW9uOyBlbHNlIGlmIAorICAgIC8vICdkaXJlY3Rpb24nIGlzICdydGwnLCBz
ZXQgJ3JpZ2h0JyB0byB0aGUgc3RhdGljIHBvc2l0aW9uLiAKKyAgICBpZiAobGVmdC5pc0F1dG8o
KSAmJiByaWdodC5pc0F1dG8oKSkgeworICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHRoaXMgYmUg
Y2Igb3IgcGFyZW50KCkgZm9yIHRleHQtZGlyZWN0aW9uPworICAgICAgICBpZiAocGFyZW50KCkt
PnN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgeworICAgICAgICAgICAgLy8gJ21fc3RhdGlj
WCcgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIHNldCB0aHJvdWdoIGxheW91dCBvZiB0aGUgcGFy
ZW50LgorICAgICAgICAgICAgaW50IHN0YXRpY1Bvc2l0aW9uID0gbV9zdGF0aWNYIC0gY2ItPmJv
cmRlckxlZnQoKTsKKyAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBwbyA9IHBhcmVudCgp
OyBwbyAmJiBwbyAhPSBjYjsgcG8gPSBwby0+cGFyZW50KCkpCisgICAgICAgICAgICAgICAgc3Rh
dGljUG9zaXRpb24gKz0gcG8tPnhQb3MoKTsKIAotICAgIGludCBtYXhIID0gaCwgbWF4TVQsIG1h
eE1CLCBtYXhZOwotICAgIGlmIChzdHlsZSgpLT5tYXhIZWlnaHQoKS52YWx1ZSgpICE9IHVuZGVm
aW5lZExlbmd0aCkKLSAgICAgICAgY2FsY0Fic29sdXRlVmVydGljYWxWYWx1ZXMoTWF4SGVpZ2h0
LCBjYiwgY2gsIHBhYiwgdCwgYiwgbWF4SCwgbWF4TVQsIG1heE1CLCBtYXhZKTsKKyAgICAgICAg
ICAgIGxlZnQuc2V0VmFsdWUoRml4ZWQsIHN0YXRpY1Bvc2l0aW9uKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFJlbmRlck9iamVjdCogcG8gPSBwYXJlbnQoKTsKKyAgICAgICAgICAg
IC8vICdtX3N0YXRpY1gnIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBzZXQgdGhyb3VnaCBsYXlv
dXQgb2YgdGhlIHBhcmVudC4KKyAgICAgICAgICAgIGludCBzdGF0aWNQb3NpdGlvbiA9IG1fc3Rh
dGljWCArIGNvbnRhaW5lcldpZHRoICsgY2ItPmJvcmRlclJpZ2h0KCkgLSBwby0+d2lkdGgoKTsK
KyAgICAgICAgICAgIGZvciAoOyBwbyAmJiBwbyAhPSBjYjsgcG8gPSBwby0+cGFyZW50KCkpCisg
ICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gLT0gcG8tPnhQb3MoKTsKKworICAgICAgICAg
ICAgcmlnaHQuc2V0VmFsdWUoRml4ZWQsIHN0YXRpY1Bvc2l0aW9uKTsKKyAgICAgICAgfQorICAg
IH0gICAgCisgICAgCisgICAgLy8gMy4gSWYgJ2xlZnQnIG9yICdyaWdodCcgYXJlICdhdXRvJywg
cmVwbGFjZSBhbnkgJ2F1dG8nIG9uICdtYXJnaW4tbGVmdCcgb3IgCisgICAgLy8gJ21hcmdpbi1y
aWdodCcgd2l0aCAnMCcuCisgICAgaWYgKGxlZnQuaXNBdXRvKCkgfHwgcmlnaHQuaXNBdXRvKCkp
IHsKKyAgICAgICAgaWYgKG1hcmdpbkxlZnQuaXNBdXRvKCkpCisgICAgICAgICAgICBtYXJnaW5M
ZWZ0LnNldFZhbHVlKEZpeGVkLCAwKTsKKyAgICAgICAgaWYgKG1hcmdpblJpZ2h0LmlzQXV0bygp
KQorICAgICAgICAgICAgbWFyZ2luUmlnaHQuc2V0VmFsdWUoRml4ZWQsIDApOworICAgIH0KKyAg
ICAKIAotICAgIGlmIChoID4gbWF4SCkgewotICAgICAgICBoID0gbWF4SDsKLSAgICAgICAgbXQg
PSBtYXhNVDsKLSAgICAgICAgbWIgPSBtYXhNQjsKLSAgICAgICAgeSA9IG1heFk7CisgICAgLy8g
NC4gSWYgYXQgdGhpcyBwb2ludCBib3RoICdtYXJnaW4tbGVmdCcgYW5kICdtYXJnaW4tcmlnaHQn
IGFyZSBzdGlsbCAnYXV0bycsIAorICAgIC8vIHNvbHZlIHRoZSBlcXVhdGlvbiB1bmRlciB0aGUg
ZXh0cmEgY29uc3RyYWludCB0aGF0IHRoZSB0d28gbWFyZ2lucyBtdXN0IGdldCAKKyAgICAvLyBl
cXVhbCB2YWx1ZXMsIHVubGVzcyB0aGlzIHdvdWxkIG1ha2UgdGhlbSBuZWdhdGl2ZSwgaW4gd2hp
Y2ggY2FzZSB3aGVuIHRoZSAKKyAgICAvLyBkaXJlY3Rpb24gb2YgdGhlIGNvbnRhaW5pbmcgYmxv
Y2sgaXMgJ2x0cicgKCdydGwnKSwgc2V0ICdtYXJnaW4tbGVmdCcgCisgICAgLy8gKCdtYXJnaW4t
cmlnaHQnKSB0byB6ZXJvIGFuZCBzb2x2ZSBmb3IgJ21hcmdpbi1yaWdodCcgKCdtYXJnaW4tbGVm
dCcpLgorICAgIGlmIChtYXJnaW5MZWZ0LmlzQXV0bygpICYmIG1hcmdpblJpZ2h0LmlzQXV0bygp
KSB7CisgICAgICAgIC8vICdsZWZ0JyBhbmQgJ3JpZ2h0JyBjYW5ub3QgYmUgJ2F1dG8nIGR1ZSB0
byBzdGVwIDMKKyAgICAgICAgQVNTRVJUKCEobGVmdC5pc0F1dG8oKSAmJiByaWdodC5pc0F1dG8o
KSkpOworICAgICAgICAKKyAgICAgICAgbGVmdFZhbHVlID0gbGVmdC5jYWxjVmFsdWUoY29udGFp
bmVyV2lkdGgpOworICAgICAgICByaWdodFZhbHVlID0gcmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5l
cldpZHRoKTsKKyAgICAgICAgCisgICAgICAgIGludCBkaWZmZXJlbmNlID0gYXZhaWxhYmxlU3Bh
Y2UgLSAobGVmdFZhbHVlICsgcmlnaHRWYWx1ZSk7CisgICAgICAgIGlmIChkaWZmZXJlbmNlID4g
MCkgeworICAgICAgICAgICAgbV9tYXJnaW5MZWZ0ID0gZGlmZmVyZW5jZSAvIDI7IC8vIHNwbGl0
IHRoZSBkaWZlcmVuY2UKKyAgICAgICAgICAgIG1fbWFyZ2luUmlnaHQgPSBtX21hcmdpbkxlZnQ7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHRoaXMgYmUg
Y2Igb3IgcGFyZW50KCkgZm9yIHRleHQtZGlyZWN0aW9uPworICAgICAgICAgICAgaWYgKHBhcmVu
dCgpLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKKyAgICAgICAgICAgICAgICBtX21h
cmdpbkxlZnQgPSAwOworICAgICAgICAgICAgICAgIG1fbWFyZ2luUmlnaHQgPSBkaWZmZXJlbmNl
OyAgLy8gd2lsbCBiZSBuZWdhdGl2ZQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBtX21hcmdpbkxlZnQgPSBkaWZmZXJlbmNlOyAgLy8gd2lsbCBiZSBuZWdhdGl2ZQorICAg
ICAgICAgICAgICAgIG1fbWFyZ2luUmlnaHQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgCisgICAgLy8gNS4gSWYgYXQgdGhpcyBwb2ludCB0aGVyZSBpcyBhbiAnYXV0bycgbGVm
dCwgc29sdmUgdGhlIGVxdWF0aW9uIGZvciB0aGF0IHZhbHVlLgorICAgIH0gZWxzZSBpZiAobGVm
dC5pc0F1dG8oKSkgeworICAgICAgICBtX21hcmdpbkxlZnQgPSBtYXJnaW5MZWZ0LmNhbGNWYWx1
ZShjb250YWluZXJXaWR0aCk7CisgICAgICAgIG1fbWFyZ2luUmlnaHQgPSBtYXJnaW5SaWdodC5j
YWxjVmFsdWUoY29udGFpbmVyV2lkdGgpOworICAgICAgICByaWdodFZhbHVlID0gcmlnaHQuY2Fs
Y1ZhbHVlKGNvbnRhaW5lcldpZHRoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNvbHZlIGZvciAn
bGVmdCcKKyAgICAgICAgbGVmdFZhbHVlID0gYXZhaWxhYmxlU3BhY2UgLSAocmlnaHRWYWx1ZSAr
IG1fbWFyZ2luTGVmdCArIG1fbWFyZ2luUmlnaHQpOworICAgIH0gZWxzZSBpZiAocmlnaHQuaXNB
dXRvKCkpIHsKKyAgICAgICAgbV9tYXJnaW5MZWZ0ID0gbWFyZ2luTGVmdC5jYWxjVmFsdWUoY29u
dGFpbmVyV2lkdGgpOworICAgICAgICBtX21hcmdpblJpZ2h0ID0gbWFyZ2luUmlnaHQuY2FsY1Zh
bHVlKGNvbnRhaW5lcldpZHRoKTsKKyAgICAgICAgbGVmdFZhbHVlID0gbGVmdC5jYWxjVmFsdWUo
Y29udGFpbmVyV2lkdGgpOworICAgICAgICAKKyAgICAgICAgLy8gU29sdmUgZm9yICdyaWdodCcK
KyAgICAgICAgcmlnaHRWYWx1ZSA9IGF2YWlsYWJsZVNwYWNlIC0gKGxlZnRWYWx1ZSArIG1fbWFy
Z2luTGVmdCArIG1fbWFyZ2luUmlnaHQpOworICAgIH0gZWxzZSBpZiAobWFyZ2luTGVmdC5pc0F1
dG8oKSkgeworICAgICAgICBtX21hcmdpblJpZ2h0ID0gbWFyZ2luUmlnaHQuY2FsY1ZhbHVlKGNv
bnRhaW5lcldpZHRoKTsKKyAgICAgICAgbGVmdFZhbHVlID0gbGVmdC5jYWxjVmFsdWUoY29udGFp
bmVyV2lkdGgpOworICAgICAgICByaWdodFZhbHVlID0gcmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5l
cldpZHRoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNvbHZlIGZvciAnbWFyZ2luLWxlZnQnCisg
ICAgICAgIG1fbWFyZ2luTGVmdCA9IGF2YWlsYWJsZVNwYWNlIC0gKGxlZnRWYWx1ZSArIHJpZ2h0
VmFsdWUgKyBtX21hcmdpblJpZ2h0KTsKKyAgICB9IGVsc2UgaWYgKG1hcmdpblJpZ2h0LmlzQXV0
bygpKSB7CisgICAgICAgIG1fbWFyZ2luTGVmdCA9IG1hcmdpbkxlZnQuY2FsY1ZhbHVlKGNvbnRh
aW5lcldpZHRoKTsKKyAgICAgICAgbGVmdFZhbHVlID0gbGVmdC5jYWxjVmFsdWUoY29udGFpbmVy
V2lkdGgpOworICAgICAgICByaWdodFZhbHVlID0gcmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lcldp
ZHRoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNvbHZlIGZvciAnbWFyZ2luLXJpZ2h0JworICAg
ICAgICBtX21hcmdpblJpZ2h0ID0gYXZhaWxhYmxlU3BhY2UgLSAobGVmdFZhbHVlICsgcmlnaHRW
YWx1ZSArIG1fbWFyZ2luTGVmdCk7CiAgICAgfQogICAgIAotICAgIGlmIChoIDwgbWluSCkgewot
ICAgICAgICBoID0gbWluSDsKLSAgICAgICAgbXQgPSBtaW5NVDsKLSAgICAgICAgbWIgPSBtaW5N
QjsKLSAgICAgICAgeSA9IG1pblk7CisgICAgLy8gNi4gSWYgYXQgdGhpcyBwb2ludCB0aGUgdmFs
dWVzIGFyZSBvdmVyLWNvbnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZhbHVlIGZvciBlaXRoZXIKKyAg
ICAvLyAnbGVmdCcgKGluIGNhc2UgdGhlICdkaXJlY3Rpb24nIHByb3BlcnR5IG9mIHRoZSBjb250
YWluaW5nIGJsb2NrIGlzICdydGwnKSBvciAKKyAgICAvLyAncmlnaHQnIChpbiBjYXNlICdkaXJl
Y3Rpb24nIGlzICdsdHInKSBhbmQgc29sdmUgZm9yIHRoYXQgdmFsdWUuCisgICAgaW50IHRvdGFs
V2lkdGggPSBtX3dpZHRoICsgbGVmdFZhbHVlICsgcmlnaHRWYWx1ZSArICBtX21hcmdpbkxlZnQg
KyBtX21hcmdpblJpZ2h0OworICAgIGlmICh0b3RhbFdpZHRoID4gY29udGFpbmVyV2lkdGgpIHsK
KyAgICAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGJlIGNiIG9yIHBhcmVudCgpIGZvciB0ZXh0
LWRpcmVjdGlvbj8KKyAgICAgICAgaWYgKHBhcmVudCgpLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9
PSBMVFIpCisgICAgICAgICAgICAvLyBGSVhNRTogaXMgY2FsY3VsYXRpbmcgcmlnaHRWYWx1ZSB1
bm5lY2Nlc3NhcnkgYmVjYXVzZSBpdCBpcyBuZXZlciB1c2VkPworICAgICAgICAgICAgcmlnaHRW
YWx1ZSA9IGNvbnRhaW5lcldpZHRoIC0gKHRvdGFsV2lkdGggLSByaWdodFZhbHVlKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbGVmdFZhbHVlID0gY29udGFpbmVyV2lkdGggLSAodG90YWxX
aWR0aCAtIGxlZnRWYWx1ZSk7CiAgICAgfQogICAgIAotICAgIC8vIElmIG91ciBuYXR1cmFsIGhl
aWdodCBleGNlZWRzIHRoZSBuZXcgaGVpZ2h0IG9uY2Ugd2UndmUgc2V0IGl0LCB0aGVuIHdlIG5l
ZWQgdG8gbWFrZSBzdXJlIHRvIHVwZGF0ZQotICAgIC8vIG92ZXJmbG93IHRvIHRyYWNrIHRoZSBz
cGlsbG91dC4KLSAgICBpZiAobV9oZWlnaHQgPiBoKQotICAgICAgICBzZXRPdmVyZmxvd0hlaWdo
dChtX2hlaWdodCk7Ci0gICAgICAgIAotICAgIC8vIFNldCBvdXIgZmluYWwgdmFsdWVzLgotICAg
IG1faGVpZ2h0ID0gaDsKLSAgICBtX21hcmdpblRvcCA9IG10OwotICAgIG1fbWFyZ2luQm90dG9t
ID0gbWI7Ci0gICAgbV95ID0geTsKKyAgICAvLyBGSVhNRTogdGhpcyBzZWVtcyB3cm9uZyAobGlr
ZSBpbiBSVEwgY2FzZXMpCisgICAgbV94ID0gbGVmdFZhbHVlICsgbV9tYXJnaW5MZWZ0ICsgY2It
PmJvcmRlckxlZnQoKTsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZVZlcnRpY2Fs
VmFsdWVzKEhlaWdodFR5cGUgaGVpZ2h0VHlwZSwgUmVuZGVyT2JqZWN0KiBjYiwgaW50IGNoLCBp
bnQgcGFiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
dCwgaW50IGIsIGludCYgaCwgaW50JiBtdCwgaW50JiBtYiwgaW50JiB5KQordm9pZCBSZW5kZXJC
b3g6OmNhbGNBYnNvbHV0ZVZlcnRpY2FsUmVwbGFjZWQoKQogewotICAgIGNvbnN0IGludCBBVVRP
ID0gLTY2NjY2NjsKLSAgICBoID0gbXQgPSBtYiA9IEFVVE87Ci0KLSAgICBpZiAoIXN0eWxlKCkt
Pm1hcmdpblRvcCgpLmlzQXV0bygpKQotICAgICAgICBtdCA9IHN0eWxlKCktPm1hcmdpblRvcCgp
LmNhbGNWYWx1ZShjaCk7Ci0gICAgaWYgKCFzdHlsZSgpLT5tYXJnaW5Cb3R0b20oKS5pc0F1dG8o
KSkKLSAgICAgICAgbWIgPSBzdHlsZSgpLT5tYXJnaW5Cb3R0b20oKS5jYWxjVmFsdWUoY2gpOwot
Ci0gICAgTGVuZ3RoIGhlaWdodDsKLSAgICBpZiAoaGVpZ2h0VHlwZSA9PSBIZWlnaHQpCi0gICAg
ICAgIGhlaWdodCA9IHN0eWxlKCktPmhlaWdodCgpOwotICAgIGVsc2UgaWYgKGhlaWdodFR5cGUg
PT0gTWluSGVpZ2h0KQotICAgICAgICBoZWlnaHQgPSBzdHlsZSgpLT5taW5IZWlnaHQoKTsKLSAg
ICBlbHNlCi0gICAgICAgIGhlaWdodCA9IHN0eWxlKCktPm1heEhlaWdodCgpOworICAgIC8vIFRo
ZSBmb2xsb3dpbmcgaXMgYmFzZWQgb2ZmIG9mIHRoZSBXM0MgV29ya2luZyBEcmFmdCBmcm9tIEp1
bmUgMTMsIDIwMDUgb2YKKyAgICAvLyBDU1MgMi4xOiBTZWN0aW9uIDEwLjYuNSAiQWJzb2x1dGx5
IHBvc2l0aW9uZWQsIHJlcGxhY2VkIGVsZW1lbnRzIgorICAgIC8vIDxodHRwOi8vd3d3LnczLm9y
Zy9UUi8yMDA1L1dELUNTUzIxLTIwMDUwNjEzL3Zpc3VkZXQuaHRtbCNhYnMtcmVwbGFjZWQtaGVp
Z2h0PgorICAgIC8vIChudW1iZXJlZCBjb21tZW50cyBjb3JyZXNwb25kIHRvIG51bWJlcnMgaW4g
c3BlYykKIAotICAgIGludCBvdXJIZWlnaHQgPSBtX2hlaWdodDsKLQotICAgIGlmIChpc1RhYmxl
KCkgJiYgaGVpZ2h0LmlzQXV0bygpKQotICAgICAgICAvLyBIZWlnaHQgaXMgbmV2ZXIgdW5zb2x2
ZWQgZm9yIHRhYmxlcy4gImF1dG8iIG1lYW5zIHNocmluayB0byBmaXQuICBVc2Ugb3VyCi0gICAg
ICAgIC8vIGhlaWdodCBpbnN0ZWFkLgotICAgICAgICBoID0gb3VySGVpZ2h0IC0gcGFiOwotICAg
IGVsc2UgaWYgKCFoZWlnaHQuaXNBdXRvKCkpCi0gICAgewotICAgICAgICBoID0gY2FsY0NvbnRl
bnRCb3hIZWlnaHQoaGVpZ2h0LmNhbGNWYWx1ZShjaCkpOwotICAgICAgICBpZiAob3VySGVpZ2h0
IC0gcGFiID4gaCkKLSAgICAgICAgICAgIG91ckhlaWdodCA9IGggKyBwYWI7Ci0gICAgfQotICAg
IGVsc2UgaWYgKGlzUmVwbGFjZWQoKSkKLSAgICAgICAgaCA9IGNhbGNSZXBsYWNlZEhlaWdodCgp
OwotCi0gICAgaW50IHN0YXRpY190b3A9MDsKLSAgICBpZiAoKHQgPT0gQVVUTyAmJiBiID09IEFV
VE8pIHx8IHN0eWxlKCktPnRvcCgpLmlzU3RhdGljKCkpIHsKLSAgICAgICAgLy8gY2FsYyBoeXBv
dGhldGljYWwgbG9jYXRpb24gaW4gdGhlIG5vcm1hbCBmbG93Ci0gICAgICAgIC8vIHVzZWQgZm9y
IDEpIHRvcD1zdGF0aWMtcG9zaXRpb24KLSAgICAgICAgLy8gICAgICAgICAgMikgdG9wLCBib3R0
b20sIGhlaWdodCBhcmUgYWxsIGF1dG8gLT4gY2FsYyB0b3AgLT4gMy4KLSAgICAgICAgLy8gICAg
ICAgICAgMykgcHJlY2FsYyBmb3IgY2FzZSAyIGJlbG93Ci0gICAgICAgIHN0YXRpY190b3AgPSBt
X3N0YXRpY1kgLSBjYi0+Ym9yZGVyVG9wKCk7IC8vIFNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBz
ZXQgdGhyb3VnaCBsYXlvdXQgb2YgdGhlIHBhcmVudCgpLgotICAgICAgICBSZW5kZXJPYmplY3Qq
IHBvID0gcGFyZW50KCk7Ci0gICAgICAgIGZvciAoOyBwbyAmJiBwbyAhPSBjYjsgcG8gPSBwby0+
cGFyZW50KCkpCi0gICAgICAgICAgICBzdGF0aWNfdG9wICs9IHBvLT55UG9zKCk7Ci0KLSAgICAg
ICAgaWYgKGggPT0gQVVUTyB8fCBzdHlsZSgpLT50b3AoKS5pc1N0YXRpYygpKQotICAgICAgICAg
ICAgdCA9IHN0YXRpY190b3A7Ci0gICAgfQotCi0gICAgaWYgKHQgIT0gQVVUTyAmJiBoICE9IEFV
VE8gJiYgYiAhPSBBVVRPKSB7Ci0gICAgICAgIC8vIHRvcCwgaGVpZ2h0LCBib3R0b20gYWxsIGdp
dmVuLCBwbGF5IHdpdGggbWFyZ2lucwotICAgICAgICBpbnQgb3QgPSBoICsgdCArIGIgKyBwYWI7
Ci0KLSAgICAgICAgaWYgKG10ID09IEFVVE8gJiYgbWIgPT0gQVVUTykgewotICAgICAgICAgICAg
Ly8gYm90aCBtYXJnaW5zIGF1dG8sIHNvbHZlIGZvciBlcXVhbGl0eQotICAgICAgICAgICAgbXQg
PSAoY2ggLSBvdCkvMjsKLSAgICAgICAgICAgIG1iID0gY2ggLSBvdCAtIG10OwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UgaWYgKG10PT1BVVRPKQotICAgICAgICAgICAgLy8gc29sdmUgZm9yIHRv
cCBtYXJnaW4KLSAgICAgICAgICAgIG10ID0gY2ggLSBvdCAtIG1iOwotICAgICAgICBlbHNlIGlm
IChtYj09QVVUTykKLSAgICAgICAgICAgIC8vIHNvbHZlIGZvciBib3R0b20gbWFyZ2luCi0gICAg
ICAgICAgICBtYiA9IGNoIC0gb3QgLSBtdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgLy8g
b3ZlcmNvbnN0cmFpbmVkLCBzb2x2ZSBmb3IgYm90dG9tCi0gICAgICAgICAgICBiID0gY2ggLSAo
aCArIHQgKyBtdCArIG1iICsgcGFiKTsKKyAgICAvLyBXZSBkb24ndCB1c2UgY29udGFpbmluZ0Js
b2NrKCksIHNpbmNlIHdlIG1heSBiZSBwb3NpdGlvbmVkIGJ5IGFuIGVuY2xvc2luZyByZWxwb3Np
dGlvbmVkIGlubGluZS4KKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIGNiID0gY29udGFpbmVyKCk7
CisgICAgCisgICAgLy8gRXZlbiBpbiBzdHJpY3QgbW9kZSAod2hlcmUgd2UgZG9uJ3QgZ3JvdyB0
aGUgcm9vdCB0byBmaWxsIHRoZSB2aWV3cG9ydCkgCisgICAgLy8gb3RoZXIgYnJvd3NlcnMgcG9z
aXRpb24gYXMgdGhvdWdoIHRoZSByb290IGZpbGxzIHRoZSB2aWV3cG9ydC4KKyAgICBjb25zdCBp
bnQgY29udGFpbmVySGVpZ2h0ID0gY2ItPmlzUm9vdCgpID8gY2ItPmF2YWlsYWJsZUhlaWdodCgp
IDogKGNiLT5oZWlnaHQoKSAtIGNiLT5ib3JkZXJUb3AoKSAtIGNiLT5ib3JkZXJCb3R0b20oKSk7
CisKKyAgICAvLyBWYXJpYWJsZXMgdG8gc29sdmUuCisgICAgTGVuZ3RoIHRvcCA9IHN0eWxlKCkt
PnRvcCgpOworICAgIExlbmd0aCBib3R0b20gPSBzdHlsZSgpLT5ib3R0b20oKTsKKyAgICBMZW5n
dGggbWFyZ2luVG9wID0gc3R5bGUoKS0+bWFyZ2luVG9wKCk7CisgICAgTGVuZ3RoIG1hcmdpbkJv
dHRvbSA9IHN0eWxlKCktPm1hcmdpbkJvdHRvbSgpOworICAgIAorICAgIGludCB0b3BWYWx1ZTsK
KyAgICBpbnQgYm90dG9tVmFsdWU7CisKKworICAgIC8vIDEwLjYuNQorICAgIC8vIDEuIFRoZSB1
c2VkIHZhbHVlIG9mICdoZWlnaHQnIGlzIGRldGVybWluZWQgYXMgZm9yIGlubGluZSByZXBsYWNl
ZCBlbGVtZW50cy4KKyAgICAKKyAgICAvLyBOT1RFOiBUaGlzIHZhbHVlIG9mIGhlaWdodCBpcyBG
SU5BTCBpbiB0aGF0IHRoZSBtaW4vbWF4IGhlaWdodCBjYWxjdWxhdGlvbnMKKyAgICAvLyBhcmUg
ZGVhbHQgd2l0aCBpbiBjYWxjUmVwbGFjZWRIZWlnaHQoKS4gIFRoaXMgbWVhbnMgdGhhdCB0aGUg
c3RlcHMgdG8gcHJvZHVjZQorICAgIC8vIGNvcnJlY3QgbWF4L21pbiBpbiB0aGUgbm9uLXJlcGxh
Y2VkIHZlcnNpb24sIGFyZSBub3QgbmVjZXNzYXJ5LiAKKyAgICBpbnQgaGVpZ2h0VmFsdWUgPSBj
YWxjUmVwbGFjZWRIZWlnaHQoKSArIGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCkgKyBwYWRk
aW5nVG9wKCkgKyBwYWRkaW5nQm90dG9tKCk7CisgICAgaW50IGF2YWlsYWJsZVNwYWNlID0gY29u
dGFpbmVySGVpZ2h0IC0gaGVpZ2h0VmFsdWU7CisgICAgCisgICAgCisgICAgLy8gMi4gSWYgYm90
aCAndG9wJyBhbmQgJ2JvdHRvbScgaGF2ZSB0aGUgdmFsdWUgJ2F1dG8nLCByZXBsYWNlICd0b3An
IHdpdGggdGhlIAorICAgIC8vIGVsZW1lbnQncyBzdGF0aWMgcG9zaXRpb24uCisgICAgaWYgKHRv
cC5pc0F1dG8oKSAmJiBib3R0b20uaXNBdXRvKCkpIHsKKyAgICAJLy8gbV9zdGF0aWNZIHNob3Vs
ZCBhbHJlYWR5IGhhdmUgYmVlbiBzZXQgdGhyb3VnaCBsYXlvdXQgb2YgdGhlIHBhcmVudCgpLgor
ICAgICAgICBpbnQgc3RhdGljVG9wID0gbV9zdGF0aWNZIC0gY2ItPmJvcmRlclRvcCgpOworICAg
ICAgICBmb3IgKFJlbmRlck9iamVjdCogcG8gPSBwYXJlbnQoKTsgcG8gJiYgcG8gIT0gY2I7IHBv
ID0gcG8tPnBhcmVudCgpKQorICAgICAgICAgICAgc3RhdGljVG9wICs9IHBvLT55UG9zKCk7CisK
KyAgICAgICAgdG9wLnNldFZhbHVlKEZpeGVkLCBzdGF0aWNUb3ApOwogICAgIH0KLSAgICBlbHNl
IHsKLSAgICAgICAgLy8gb25lIG9yIHR3byBvZiAodG9wLCBoZWlnaHQsIGJvdHRvbSkgbWlzc2lu
Zywgc29sdmUKLQotICAgICAgICAvLyBhdXRvIG1hcmdpbnMgYXJlIGlnbm9yZWQKLSAgICAgICAg
aWYgKG10ID09IEFVVE8pCi0gICAgICAgICAgICBtdCA9IDA7Ci0gICAgICAgIGlmIChtYiA9PSBB
VVRPKQotICAgICAgICAgICAgbWIgPSAwOwotCi0gICAgICAgIC8vMS4gc29sdmUgdG9wICYgaGVp
Z2h0LiB1c2UgY29udGVudCBoZWlnaHQuCi0gICAgICAgIGlmICh0ID09IEFVVE8gJiYgaCA9PSBB
VVRPICYmIGIgIT0gQVVUTykgewotICAgICAgICAgICAgaCA9IG91ckhlaWdodCAtIHBhYjsKLSAg
ICAgICAgICAgIHQgPSBjaCAtIChoICsgYiArIG10ICsgbWIgKyBwYWIpOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UgaWYgKHQgPT0gQVVUTyAmJiBoICE9IEFVVE8gJiYgYiA9PSBBVVRPKSAvLzIu
IHNvbHZlIHRvcCAmIGJvdHRvbS4gdXNlIHN0YXRpYyBwb3NpdGlvbmluZy4KLSAgICAgICAgewot
ICAgICAgICAgICAgdCA9IHN0YXRpY190b3A7Ci0gICAgICAgICAgICBiID0gY2ggLSAoaCArIHQg
KyBtdCArIG1iICsgcGFiKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0ICE9IEFVVE8g
JiYgaCA9PSBBVVRPICYmIGIgPT0gQVVUTykgLy8zLiBzb2x2ZSBoZWlnaHQgJiBib3R0b20uIHVz
ZSBjb250ZW50IGhlaWdodC4KLSAgICAgICAgewotICAgICAgICAgICAgaCA9IG91ckhlaWdodCAt
IHBhYjsKLSAgICAgICAgICAgIGIgPSBjaCAtIChoICsgdCArIG10ICsgbWIgKyBwYWIpOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgLy80LiBzb2x2ZSB0b3AKLSAgICAgICAgaWYg
KHQgPT0gQVVUTyAmJiBoICE9IEFVVE8gJiYgYiAhPSBBVVRPKQotICAgICAgICAgICAgdCA9IGNo
IC0gKGggKyBiICsgbXQgKyBtYiArIHBhYik7Ci0gICAgICAgIGVsc2UKIAotICAgICAgICAvLzUu
IHNvbHZlIGhlaWdodAotICAgICAgICBpZiAodCAhPSBBVVRPICYmIGggPT0gQVVUTyAmJiBiICE9
IEFVVE8pCi0gICAgICAgICAgICBoID0gY2ggLSAodCArIGIgKyBtdCArIG1iICsgcGFiKTsKLSAg
ICAgICAgZWxzZQotCi0gICAgICAgIC8vNi4gc29sdmUgYm90dG9tCi0gICAgICAgIGlmICh0ICE9
IEFVVE8gJiYgaCAhPSBBVVRPICYmIGIgPT0gQVVUTykKLSAgICAgICAgICAgIGIgPSBjaCAtICho
ICsgdCArIG10ICsgbWIgKyBwYWIpOwotICAgIH0KIAotICAgIGlmIChvdXJIZWlnaHQgPCBoICsg
cGFiKSAvL2NvbnRlbnQgbXVzdCBzdGlsbCBmaXQKLSAgICAgICAgb3VySGVpZ2h0ID0gaCArIHBh
YjsKKyAgICAvLyAzLiBJZiAnYm90dG9tJyBpcyAnYXV0bycsIHJlcGxhY2UgYW55ICdhdXRvJyBv
biAnbWFyZ2luLXRvcCcgb3IgJ21hcmdpbi1ib3R0b20nCisgICAgLy8gd2l0aCAnMCcuCisgICAg
Ly8gRklYTUU6IHRoZSBzcGVjLiBzYXlzIHRoYXQgdGhpcyBzdGVwIHNob3VsZCBvbmx5IGJlIHRh
a2VuIHdoZW4gYm90dG9tIGlzIGF1dG8sIGJ1dAorICAgIC8vIGlmIG9ubHkgdG9wIGlzIGF1dG8s
IHRoaXMgbWFrZXMgc3RlcCA0IGltcG9zc2libGUuCisgICAgaWYgKHRvcC5pc0F1dG8oKSB8fCBi
b3R0b20uaXNBdXRvKCkpIHsKKyAgICAgICAgaWYgKG1hcmdpblRvcC5pc0F1dG8oKSkKKyAgICAg
ICAgICAgIG1hcmdpblRvcC5zZXRWYWx1ZShGaXhlZCwgMCk7CisgICAgICAgIGlmIChtYXJnaW5C
b3R0b20uaXNBdXRvKCkpCisgICAgICAgICAgICBtYXJnaW5Cb3R0b20uc2V0VmFsdWUoRml4ZWQs
IDApOworICAgIH0KKyAgIAorICAgIC8vIDQuIElmIGF0IHRoaXMgcG9pbnQgYm90aCAnbWFyZ2lu
LXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyBhcmUgc3RpbGwgJ2F1dG8nLAorICAgIC8vIHNvbHZl
IHRoZSBlcXVhdGlvbiB1bmRlciB0aGUgZXh0cmEgY29uc3RyYWludCB0aGF0IHRoZSB0d28gbWFy
Z2lucyBtdXN0IGdldCAKKyAgICAvLyBlcXVhbCB2YWx1ZXMuCisgICAgaWYgKG1hcmdpblRvcC5p
c0F1dG8oKSAmJiBtYXJnaW5Cb3R0b20uaXNBdXRvKCkpIHsKKyAgICAgICAgLy8gJ3RvcCcgYW5k
ICdib3R0b20nIGNhbm5vdCBiZSAnYXV0bycgZHVlIHRvIHN0ZXAgMiBhbmQgMyBjb21iaW5kZWQu
CisgICAgICAgIEFTU0VSVCghKHRvcC5pc0F1dG8oKSAmJiBib3R0b20uaXNBdXRvKCkpKTsKKyAg
ICAgICAgCisgICAgICAgIHRvcFZhbHVlID0gdG9wLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQp
OworICAgICAgICBib3R0b21WYWx1ZSA9IGJvdHRvbS5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0
KTsKKyAgICAgICAgCisgICAgICAgIGludCBkaWZmZXJlbmNlID0gYXZhaWxhYmxlU3BhY2UgLSAo
dG9wVmFsdWUgKyBib3R0b21WYWx1ZSk7CisgICAgICAgIC8vIEZJWE1FOiB3aGF0IGFib3V0IHRo
ZSBjYXNlIHdoZW4gZGlmZmVyZW5jZSBpcyBuZWdhdGl2ZT8gSW4gaG9yaXpvbnRhbCAKKyAgICAg
ICAgLy8gdmVyc2lvbiB0aGlzIGlzIGRlYWx0IHdpdGggZGlmZmVyZW50bHkKKyAgICAgICAgbV9t
YXJnaW5Ub3AgPSAgZGlmZmVyZW5jZSAvIDI7CisgICAgICAgIG1fbWFyZ2luQm90dG9tID0gbV9t
YXJnaW5Ub3A7CisKKyAgICAvLyA1LiBJZiBhdCB0aGlzIHBvaW50IHRoZXJlIGlzIG9ubHkgb25l
ICdhdXRvJyBsZWZ0LCBzb2x2ZSB0aGUgZXF1YXRpb24gZm9yIAorICAgIC8vIHRoYXQgdmFsdWUu
CisgICAgfSBlbHNlIGlmICh0b3AuaXNBdXRvKCkpIHsKKyAgICAgICAgbV9tYXJnaW5Ub3AgPSBt
YXJnaW5Ub3AuY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCk7CisgICAgICAgIG1fbWFyZ2luQm90
dG9tID0gbWFyZ2luQm90dG9tLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpOworICAgICAgICBi
b3R0b21WYWx1ZSA9IGJvdHRvbS5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKyAgICAgICAg
CisgICAgICAgIC8vIFNvbHZlIGZvciAndG9wJworICAgICAgICB0b3BWYWx1ZSA9IGF2YWlsYWJs
ZVNwYWNlIC0gKGJvdHRvbVZhbHVlICsgbV9tYXJnaW5Ub3AgKyBtX21hcmdpbkJvdHRvbSk7Cisg
ICAgfSBlbHNlIGlmIChib3R0b20uaXNBdXRvKCkpIHsKKyAgICAgICAgbV9tYXJnaW5Ub3AgPSBt
YXJnaW5Ub3AuY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCk7CisgICAgICAgIG1fbWFyZ2luQm90
dG9tID0gbWFyZ2luQm90dG9tLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpOworICAgICAgICB0
b3BWYWx1ZSA9IHRvcC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKyAgICAgICAgCisgICAg
ICAgIC8vIFNvbHZlIGZvciAnYm90dG9tJworICAgICAgICBib3R0b21WYWx1ZSA9IGF2YWlsYWJs
ZVNwYWNlIC0gKHRvcFZhbHVlICsgbV9tYXJnaW5Ub3AgKyBtX21hcmdpbkJvdHRvbSk7CisgICAg
fSBlbHNlIGlmIChtYXJnaW5Ub3AuaXNBdXRvKCkpIHsKKyAgICAgICAgbV9tYXJnaW5Cb3R0b20g
PSBtYXJnaW5Cb3R0b20uY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCk7CisgICAgICAgIHRvcFZh
bHVlID0gdG9wLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpOworICAgICAgICBib3R0b21WYWx1
ZSA9IGJvdHRvbS5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKyAgICAgICAgCisgICAgICAg
IC8vIFNvbHZlIGZvciAnbWFyZ2luLXRvcCcKKyAgICAgICAgbV9tYXJnaW5Ub3AgPSBhdmFpbGFi
bGVTcGFjZSAtICh0b3BWYWx1ZSArIGJvdHRvbVZhbHVlICsgbV9tYXJnaW5Cb3R0b20pOworICAg
IH0gZWxzZSBpZiAobWFyZ2luQm90dG9tLmlzQXV0bygpKSB7CisgICAgICAgIG1fbWFyZ2luVG9w
ID0gbWFyZ2luVG9wLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpOworICAgICAgICB0b3BWYWx1
ZSA9IHRvcC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKyAgICAgICAgYm90dG9tVmFsdWUg
PSBib3R0b20uY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCk7CisgICAgICAgIAorICAgICAgICAv
LyBTb2x2ZSBmb3IgJ21hcmdpbi1ib3R0b20nCisgICAgICAgIG1fbWFyZ2luQm90dG9tID0gYXZh
aWxhYmxlU3BhY2UgLSAodG9wVmFsdWUgKyBib3R0b21WYWx1ZSArIG1fbWFyZ2luVG9wKTsKKyAg
ICB9ICAgICAgICAKKworCisgICAgLy8gNi4gSWYgYXQgdGhpcyBwb2ludCB0aGUgdmFsdWVzIGFy
ZSBvdmVyLWNvbnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZhbHVlIGZvciAKKyAgICAvLyAnYm90dG9t
JyBhbmQgc29sdmUgZm9yIHRoYXQgdmFsdWUuCisgICAgY29uc3QgaW50IHRvdGFsSGVpZ2h0ID0g
aGVpZ2h0VmFsdWUgKyB0b3BWYWx1ZSArIGJvdHRvbVZhbHVlICsgbV9tYXJnaW5Ub3AgKyBtX21h
cmdpbkJvdHRvbTsKKyAgICBpZiAodG90YWxIZWlnaHQgPiBjb250YWluZXJIZWlnaHQpCisgICAg
ICAgIG1fbWFyZ2luQm90dG9tID0gY29udGFpbmVySGVpZ2h0IC0gKHRvdGFsSGVpZ2h0IC0gbV9t
YXJnaW5Cb3R0b20pOworCisKKyAgICBpbnQgY29udGVudEhlaWdodCA9IG1faGVpZ2h0OworICAg
IGlmICgoY29udGVudEhlaWdodCA8IGhlaWdodFZhbHVlKSB8fCAoaGFzT3ZlcmZsb3dDbGlwKCkg
JiYgY29udGVudEhlaWdodCA+IGhlaWdodFZhbHVlKSkKKyAgICAgICAgY29udGVudEhlaWdodCA9
IGhlaWdodFZhbHVlOworCisgICAgLy8gRG8gbm90IGFsbG93IHRoZSBoZWlnaHQgdG8gYmUgbmVn
YXRpdmUuICBUaGlzIGNhbiBoYXBwZW4gd2hlbiBzb21lb25lCisgICAgLy8gc3BlY2lmaWVzIGJv
dGggdG9wIGFuZCBib3R0b20gYnV0IHRoZSBjb250YWluaW5nIGJsb2NrIGhlaWdodCBpcyBsZXNz
CisgICAgLy8gdGhhbiB0b3AsIGUuZy4sIHRvcDogMjBweCwgYm90dG9tOiAwLCBjb250YWluaW5n
IGJsb2NrIGhlaWdodCAxNi4KKyAgICBoZWlnaHRWYWx1ZSA9IG1heCgwLCBjb250ZW50SGVpZ2h0
KTsgICAgCisKKyAgICAvLyBJZiBvdXIgY29udGVudCBoZWlnaHQgZXhjZWVkcyB0aGUgbmV3IGhl
aWdodCBvbmNlIHdlJ3ZlIHNldCBpdCwgdGhlbiB3ZQorICAgIC8vIG5lZWQgdG8gbWFrZSBzdXJl
IHRvIHVwZGF0ZSBvdmVyZmxvdyB0byB0cmFjayB0aGUgc3BpbGxvdXQuCisgICAgaWYgKG1faGVp
Z2h0ID4gaGVpZ2h0VmFsdWUpCisgICAgICAgIHNldE92ZXJmbG93SGVpZ2h0KG1faGVpZ2h0KTsK
IAotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBvdXJIZWlnaHQgPiBoICsgcGFiKQotICAg
ICAgICBvdXJIZWlnaHQgPSBoICsgcGFiOwotICAgIAotICAgIC8vIERvIG5vdCBhbGxvdyB0aGUg
aGVpZ2h0IHRvIGJlIG5lZ2F0aXZlLiAgVGhpcyBjYW4gaGFwcGVuIHdoZW4gc29tZW9uZSBzcGVj
aWZpZXMgYm90aCB0b3AgYW5kIGJvdHRvbQotICAgIC8vIGJ1dCB0aGUgY29udGFpbmluZyBibG9j
ayBoZWlnaHQgaXMgbGVzcyB0aGFuIHRvcCwgZS5nLiwgdG9wOjIwcHgsIGJvdHRvbTowLCBjb250
YWluaW5nIGJsb2NrIGhlaWdodCAxNi4KLSAgICBvdXJIZWlnaHQgPSBrTWF4KDAsIG91ckhlaWdo
dCk7Ci0gICAgCi0gICAgaCA9IG91ckhlaWdodDsKLSAgICB5ID0gdCArIG10ICsgY2ItPmJvcmRl
clRvcCgpOworICAgIC8vIFNldCBmaW5hbCB2YWx1ZXMuCisgICAgbV9oZWlnaHQgPSBoZWlnaHRW
YWx1ZTsKKyAgICBtX3kgPSB0b3BWYWx1ZSArIG1fbWFyZ2luVG9wICsgY2ItPmJvcmRlclRvcCgp
OyAgICAKIH0KIAogSW50UmVjdCBSZW5kZXJCb3g6OmNhcmV0UmVjdChpbnQgb2Zmc2V0LCBFQWZm
aW5pdHkgYWZmaW5pdHksIGludCAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQpJbmRleDogUmVuZGVy
Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gUmVuZGVyQm94LmgJKHJldmlzaW9uIDEzNDAyKQorKysgUmVu
ZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MywxMSArMTYzLDE4IEBAIHByb3RlY3RlZDoK
IAogICAgIHZvaWQgY2FsY0Fic29sdXRlSG9yaXpvbnRhbCgpOwogICAgIHZvaWQgY2FsY0Fic29s
dXRlVmVydGljYWwoKTsKLSAgICB2b2lkIGNhbGNBYnNvbHV0ZUhvcml6b250YWxWYWx1ZXMoV2lk
dGhUeXBlIHdpZHRoVHlwZSwgUmVuZGVyT2JqZWN0KiBjYiwgaW50IGN3LCBpbnQgcGFiLCBpbnQg
c3RhdGljX2Rpc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgbCwgaW50IHIsIGludCYgdywgaW50JiBtbCwgaW50JiBtciwgaW50JiB4KTsKLSAgICB2b2lk
IGNhbGNBYnNvbHV0ZVZlcnRpY2FsVmFsdWVzKEhlaWdodFR5cGUgaGVpZ2h0VHlwZSwgUmVuZGVy
T2JqZWN0KiBjYiwgaW50IGNoLCBpbnQgcGFiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCB0LCBpbnQgYiwgaW50JiBoLCBpbnQmIG10LCBpbnQmIG1iLCBpbnQmIHkp
OyAKLSAgICAKKyAgICB2b2lkIGNhbGNBYnNvbHV0ZUhvcml6b250YWxWYWx1ZXMoTGVuZ3RoIHdp
ZHRoLCBjb25zdCBSZW5kZXJPYmplY3QqIGNiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgaW50IGNvbnRhaW5lcldpZHRoLCBjb25zdCBpbnQgYm9yZGVyc1Bs
dXNQYWRkaW5nLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
TGVuZ3RoIGxlZnQsIGNvbnN0IExlbmd0aCByaWdodCwgY29uc3QgTGVuZ3RoIG1hcmdpbkxlZnQs
IGNvbnN0IExlbmd0aCBtYXJnaW5SaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50JiB3aWR0aFZhbHVlLCBpbnQmIG1hcmdpbkxlZnRWYWx1ZSwgaW50JiBtYXJn
aW5SaWdodFZhbHVlLCBpbnQmIHhQb3MpOworICAgIHZvaWQgY2FsY0Fic29sdXRlVmVydGljYWxW
YWx1ZXMoTGVuZ3RoIGhlaWdodCwgY29uc3QgUmVuZGVyT2JqZWN0KiBjYiwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgY29udGFpbmVySGVpZ2h0LCBjb25z
dCBpbnQgYm9yZGVyc1BsdXNQYWRkaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgTGVuZ3RoIHRvcCwgY29uc3QgTGVuZ3RoIGJvdHRvbSwgY29uc3QgTGVuZ3Ro
IG1hcmdpblRvcCwgY29uc3QgTGVuZ3RoIG1hcmdpbkJvdHRvbSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCYgaGVpZ2h0VmFsdWUsIGludCYgbWFyZ2luVG9wVmFsdWUs
IGludCYgbWFyZ2luQm90dG9tVmFsdWUsIGludCYgeVBvcyk7CisKKyAgICB2b2lkIGNhbGNBYnNv
bHV0ZVZlcnRpY2FsUmVwbGFjZWQoKTsKKyAgICB2b2lkIGNhbGNBYnNvbHV0ZUhvcml6b250YWxS
ZXBsYWNlZCgpOworCiAgICAgdmlydHVhbCBJbnRSZWN0IGdldE92ZXJmbG93Q2xpcFJlY3QoaW50
IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwgSW50UmVjdCBnZXRDbGlwUmVjdChpbnQgdHgsIGlu
dCB0eSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>7197</attachid>
            <date>2006-03-20 13:55:31 -0800</date>
            <delta_ts>2006-03-20 13:55:31 -0800</delta_ts>
            <desc>test case for bad &apos;auto&apos; value</desc>
            <filename>absolute-length-of-neg-666666.html</filename>
            <type>text/html</type>
            <size>842</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC10eXBlIiBjb250ZW50
PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+CiAgICA8dGl0bGU+VGVzdCBjYXNlIGZvciBs
ZW5ndGhzIG9mIG1hZ2ljIG51bWJlciAnLTY2NjY2Nic8L3RpdGxlPgogICAgPHN0eWxlIHR5cGU9
InRleHQvY3NzIj4KICAgICAgICAuY29udGFpbmVyIHsgcG9zaXRpb246IHJlbGF0aXZlOyB9CiAg
ICAgICAgLmNvbnRyb2wgeyBwb3NpdGlvbjogYWJzb2x1dGU7IG1hcmdpbi1sZWZ0OiBhdXRvOyBj
b2xvcjogZ3JlZW47IH0KICAgICAgICAudGVzdDEgeyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDog
MWVtOyBtYXJnaW4tbGVmdDogLTY2NjY2NnB4OyBjb2xvcjogcmVkOyB9CiAgICAgICAgLnRlc3Qy
IHsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDJlbTsgbWFyZ2luLWxlZnQ6IC02NjY2NjVweDsg
Y29sb3I6IHJlZDsgfQogICAgPC9zdHlsZT4KICAgIAo8L2hlYWQ+Cjxib2R5PgogICAgPHA+SW4g
dGhpcyB0ZXN0IGNhc2UgeW91IHNob3VsZCBvbmx5IHNlZSBvbmUgbGluZSBncmVlbiB0ZXh0LiAg
SWYgdGhlcmUgaXMgYW55IHJlZCB0aGUgdGVzdCBoYXMgZmFpbGVkLjwvcD4KICAgIDxkaXYgY2xh
c3M9ImNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbCI+WW91IHNob3VsZCBz
ZWUgdGhpcy48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXN0MSI+WW91IHNob3VsZCBub3Qg
c2VlIHRoaXMhPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idGVzdDIiPllvdSBzaG91bGQgbm90
IHNlZSB0aGlzITwvZGl2PgogICAgPC9kaXY+CjwvYm9keT4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7532</attachid>
            <date>2006-04-05 14:59:08 -0700</date>
            <delta_ts>2006-05-08 18:56:10 -0700</delta_ts>
            <desc>patch 3</desc>
            <filename>boxabs.diff</filename>
            <type>text/plain</type>
            <size>59751</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiAxMzcwMikKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsMTEgKzE2MywxOCBAQCBw
cm90ZWN0ZWQ6CiAKICAgICB2b2lkIGNhbGNBYnNvbHV0ZUhvcml6b250YWwoKTsKICAgICB2b2lk
IGNhbGNBYnNvbHV0ZVZlcnRpY2FsKCk7Ci0gICAgdm9pZCBjYWxjQWJzb2x1dGVIb3Jpem9udGFs
VmFsdWVzKFdpZHRoVHlwZSB3aWR0aFR5cGUsIFJlbmRlck9iamVjdCogY2IsIGludCBjdywgaW50
IHBhYiwgaW50IHN0YXRpY19kaXN0YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGwsIGludCByLCBpbnQmIHcsIGludCYgbWwsIGludCYgbXIsIGludCYgeCk7
Ci0gICAgdm9pZCBjYWxjQWJzb2x1dGVWZXJ0aWNhbFZhbHVlcyhIZWlnaHRUeXBlIGhlaWdodFR5
cGUsIFJlbmRlck9iamVjdCogY2IsIGludCBjaCwgaW50IHBhYiwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgdCwgaW50IGIsIGludCYgaCwgaW50JiBtdCwgaW50JiBt
YiwgaW50JiB5KTsgCi0gICAgCisgICAgdm9pZCBjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVz
KExlbmd0aCB3aWR0aCwgY29uc3QgUmVuZGVyT2JqZWN0KiBjYiwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBjb250YWluZXJXaWR0aCwgY29uc3QgaW50
IGJvcmRlcnNQbHVzUGFkZGluZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IExlbmd0aCBsZWZ0LCBjb25zdCBMZW5ndGggcmlnaHQsIGNvbnN0IExlbmd0aCBt
YXJnaW5MZWZ0LCBjb25zdCBMZW5ndGggbWFyZ2luUmlnaHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCYgd2lkdGhWYWx1ZSwgaW50JiBtYXJnaW5MZWZ0VmFsdWUs
IGludCYgbWFyZ2luUmlnaHRWYWx1ZSwgaW50JiB4UG9zKTsKKyAgICB2b2lkIGNhbGNBYnNvbHV0
ZVZlcnRpY2FsVmFsdWVzKExlbmd0aCBoZWlnaHQsIGNvbnN0IFJlbmRlck9iamVjdCogY2IsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGNvbnRhaW5lckhl
aWdodCwgY29uc3QgaW50IGJvcmRlcnNQbHVzUGFkZGluZywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IExlbmd0aCB0b3AsIGNvbnN0IExlbmd0aCBib3R0b20sIGNv
bnN0IExlbmd0aCBtYXJnaW5Ub3AsIGNvbnN0IExlbmd0aCBtYXJnaW5Cb3R0b20sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGhlaWdodFZhbHVlLCBpbnQmIG1hcmdp
blRvcFZhbHVlLCBpbnQmIG1hcmdpbkJvdHRvbVZhbHVlLCBpbnQmIHlQb3MpOworCisgICAgdm9p
ZCBjYWxjQWJzb2x1dGVWZXJ0aWNhbFJlcGxhY2VkKCk7CisgICAgdm9pZCBjYWxjQWJzb2x1dGVI
b3Jpem9udGFsUmVwbGFjZWQoKTsKKwogICAgIHZpcnR1YWwgSW50UmVjdCBnZXRPdmVyZmxvd0Ns
aXBSZWN0KGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIEludFJlY3QgZ2V0Q2xpcFJlY3Qo
aW50IHR4LCBpbnQgdHkpOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9u
IDEzNzAyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsMTYgKzMyLDIwIEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKLSNpbmNsdWRlICJS
ZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJSZW5k
ZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlbmRlckNhbnZhcy5oIgogI2luY2x1ZGUgIlJlbmRlckZs
ZXhpYmxlQm94LmgiCisjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCisjaW5jbHVkZSAiUmVu
ZGVyVGhlbWUuaCIKICNpbmNsdWRlICJyZW5kZXJfbGluZS5oIgogI2luY2x1ZGUgInJlbmRlcl9y
ZXBsYWNlZC5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSA8YWxnb3JpdGht
PgogI2luY2x1ZGUgPGFzc2VydC5oPgogCit1c2luZyBzdGQ6Om1heDsKK3VzaW5nIHN0ZDo6bWlu
OworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBA
IC0xMzY0LDM2MSArMTM2OCw4NjcgQEAgdm9pZCBSZW5kZXJCb3g6OnNldFN0YXRpY1koaW50IHN0
YXRpY1kpCiAKIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsKCkKIHsKLSAg
ICBjb25zdCBpbnQgQVVUTyA9IC02NjY2NjY7Ci0gICAgaW50IGwsIHIsIGN3OwotCi0gICAgaW50
IHBhYiA9IGJvcmRlckxlZnQoKSsgYm9yZGVyUmlnaHQoKSsgcGFkZGluZ0xlZnQoKSsgcGFkZGlu
Z1JpZ2h0KCk7Ci0KLSAgICBsID0gciA9IEFVVE87Ci0gCi0gICAgLy8gV2UgZG9uJ3QgdXNlIGNv
bnRhaW5pbmdCbG9jaygpLCBzaW5jZSB3ZSBtYXkgYmUgcG9zaXRpb25lZCBieSBhbiBlbmNsb3Np
bmcgcmVscG9zaXRpb25lZCBpbmxpbmUuCi0gICAgUmVuZGVyT2JqZWN0KiBjYiA9IGNvbnRhaW5l
cigpOwotICAgIGN3ID0gY29udGFpbmluZ0Jsb2NrV2lkdGgoKSArIGNiLT5wYWRkaW5nTGVmdCgp
ICsgY2ItPnBhZGRpbmdSaWdodCgpOwotCi0gICAgaWYgKCFzdHlsZSgpLT5sZWZ0KCkuaXNBdXRv
KCkpCi0gICAgICAgIGwgPSBzdHlsZSgpLT5sZWZ0KCkuY2FsY1ZhbHVlKGN3KTsKLSAgICBpZiAo
IXN0eWxlKCktPnJpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHIgPSBzdHlsZSgpLT5yaWdodCgp
LmNhbGNWYWx1ZShjdyk7Ci0KLSAgICBpbnQgc3RhdGljX2Rpc3RhbmNlPTA7Ci0gICAgaWYgKChw
YXJlbnQoKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCk9PUxUUiAmJiAobCA9PSBBVVRPICYmIHIgPT0g
QVVUTykpCi0gICAgICAgICAgICB8fCBzdHlsZSgpLT5sZWZ0KCkuaXNTdGF0aWMoKSkKLSAgICB7
Ci0gICAgICAgIHN0YXRpY19kaXN0YW5jZSA9IG1fc3RhdGljWCAtIGNiLT5ib3JkZXJMZWZ0KCk7
IC8vIFNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBzZXQgdGhyb3VnaCBsYXlvdXQgb2YgdGhlIHBh
cmVudCgpLgotICAgICAgICBSZW5kZXJPYmplY3QqIHBvID0gcGFyZW50KCk7Ci0gICAgICAgIGZv
ciAoOyBwbyAmJiBwbyAhPSBjYjsgcG8gPSBwby0+cGFyZW50KCkpCi0gICAgICAgICAgICBzdGF0
aWNfZGlzdGFuY2UgKz0gcG8tPnhQb3MoKTsKLQotICAgICAgICBsID0gc3RhdGljX2Rpc3RhbmNl
OwotICAgIH0KLQotICAgIGVsc2UgaWYgKChwYXJlbnQoKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCk9
PVJUTCAmJiAobD09QVVUTyAmJiByPT1BVVRPICkpCi0gICAgICAgICAgICB8fCBzdHlsZSgpLT5y
aWdodCgpLmlzU3RhdGljKCkpCi0gICAgewotICAgICAgICBSZW5kZXJPYmplY3QqIHBvID0gcGFy
ZW50KCk7Ci0gICAgICAgIHN0YXRpY19kaXN0YW5jZSA9IG1fc3RhdGljWCArIGN3ICsgY2ItPmJv
cmRlclJpZ2h0KCkgLSBwby0+d2lkdGgoKTsgLy8gU2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIHNl
dCB0aHJvdWdoIGxheW91dCBvZiB0aGUgcGFyZW50KCkuCi0gICAgICAgIHdoaWxlIChwbyAmJiBw
byE9Y29udGFpbmluZ0Jsb2NrKCkpIHsKLSAgICAgICAgICAgIHN0YXRpY19kaXN0YW5jZSAtPSBw
by0+eFBvcygpOwotICAgICAgICAgICAgcG89cG8tPnBhcmVudCgpOworICAgIGlmIChpc1JlcGxh
Y2VkKCkpIHsKKyAgICAgICAgY2FsY0Fic29sdXRlSG9yaXpvbnRhbFJlcGxhY2VkKCk7CisgICAg
ICAgIHJldHVybjsgCisgICAgfQorCisKKyAgICAvLyBRVUVTVElPTlMKKyAgICAvLyBGSVhNRSAx
OiBXaGljaCBSZW5kZXJPYmplY3QncyAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBzaG91bGQgdXNlZDog
dGhlCisgICAgLy8gY29udGFpbmluZyBibG9jayAoY2IpIGFzIHRoZSBzcGVjIHNlZW1zIHRvIGlt
cGx5LCB0aGUgcGFyZW50IChwYXJlbnQoKSkgYXMKKyAgICAvLyB3YXMgcHJldmlvdXNseSBkb25l
IGluIGNhbGN1bGF0aW5nIHRoZSBzdGF0aWMgZGlzdGFuY2VzLCBvciBvdXJzZWxmLCB3aGljaAor
ICAgIC8vIHdhcyBhbHNvIHByZXZpb3VzbHkgZG9uZSBmb3IgZGVjaWRpbmcgd2hhdCB0byBvdmVy
cmlkZSB3aGVuIHlvdSBoYWQKKyAgICAvLyBvdmVyLWNvbnN0cmFpbmVkIG1hcmdpbnM/ICBBbHNv
IG5vdGUgdGhhdCB0aGUgY29udGFpbmVyIGJsb2NrIGlzIHVzZWQKKyAgICAvLyBpbiBzaW1pbGFy
IHNpdHVhdGlvbnMgaW4gb3RoZXIgcGFydHMgb2YgdGhlIFJlbmRlckJveCBjbGFzcyAoc2VlIGNh
bGNXaWR0aCgpCisgICAgLy8gYW5kIGNhbGNIb3Jpem9udGFsTWFyZ2lucygpKS4KKworICAgIC8v
IEZJWE1FIDI6IFNob3VsZCB3ZSBzdGlsbCBkZWFsIHdpdGggdGhlc2UgdGhlIGNhc2VzIG9mICds
ZWZ0JyBvciAncmlnaHQnIGhhdmluZworICAgIC8vIHRoZSB0eXBlICdzdGF0aWMnIGluIGRldGVy
bWluaW5nIHdoZXRoZXIgdG8gY2FsY3VsYXRlIHRoZSBzdGF0aWMgZGlzdGFuY2U/CisgICAgLy8g
Tk9URTogJ3N0YXRpYycgaXMgbm90IGEgbGVnYWwgdmFsdWUgZm9yICdsZWZ0JyBvciAncmlnaHQn
IGFzIG9mIENTUyAyLjEuCisKKyAgICAvLyBGSVhNRSAzOiBDYW4gcGVyaGFwcyBvcHRpbWl6ZSBv
dXQgY2FzZXMgd2hlbiBtYXgtd2lkdGgvbWluLXdpZHRoIGFyZSBncmVhdGVyCisgICAgLy8gdGhh
biBvciBsZXNzIHRoYW4gdGhlIGNvbXB1dGVkIG1fd2lkdGguICBCZSBjYXJlZnVsIG9mIGJveC1z
aXppbmcgYW5kCisgICAgLy8gcGVyY2VudGFnZSBpc3N1ZXMuCisKKworICAgIC8vIFRoZSBmb2xs
b3dpbmcgaXMgYmFzZWQgb2ZmIG9mIHRoZSBXM0MgV29ya2luZyBEcmFmdCBmcm9tIEp1bmUgMTMs
IDIwMDUgb2YKKyAgICAvLyBDU1MgMi4xOiBTZWN0aW9uIDEwLjMuNyAiQWJzb2x1dGVseSBwb3Np
dGlvbmVkLCBub24tcmVwbGFjZWQgZWxlbWVudHMiCisgICAgLy8gPGh0dHA6Ly93d3cudzMub3Jn
L1RSL0NTUzIxL3Zpc3VkZXQuaHRtbCNhYnMtbm9uLXJlcGxhY2VkLXdpZHRoPgorICAgIC8vIChi
bG9jay1zdHlsZS1jb21tZW50cyBpbiB0aGlzIGZ1bmN0aW9uIGFuZCBpbiBjYWxjQWJzb2x1dGVI
b3Jpem9udGFsVmFsdWVzKCkKKyAgICAvLyBjb3JyZXNwb25kIHRvIHRleHQgZnJvbSB0aGUgc3Bl
YykKKworCisgICAgLy8gV2UgZG9uJ3QgdXNlIGNvbnRhaW5pbmdCbG9jaygpLCBzaW5jZSB3ZSBt
YXkgYmUgcG9zaXRpb25lZCBieSBhbiBlbmNsb3NpbmcKKyAgICAvLyByZWxhdGl2ZSBwb3NpdGlv
bmVkIGlubGluZS4KKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIGNvbnRhaW5lckJsb2NrID0gY29u
dGFpbmVyKCk7CisgICAgY29uc3QgaW50IGJvcmRlcnNQbHVzUGFkZGluZyA9IGJvcmRlckxlZnQo
KSArIGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nTGVmdCgpICsgcGFkZGluZ1JpZ2h0KCk7CisgICAg
Y29uc3QgaW50IGNvbnRhaW5lcldpZHRoID0gY29udGFpbmluZ0Jsb2NrV2lkdGgoKSArIGNvbnRh
aW5lckJsb2NrLT5wYWRkaW5nTGVmdCgpICsgY29udGFpbmVyQmxvY2stPnBhZGRpbmdSaWdodCgp
OworCisgICAgY29uc3QgTGVuZ3RoIG1hcmdpbkxlZnQgPSBzdHlsZSgpLT5tYXJnaW5MZWZ0KCk7
CisgICAgY29uc3QgTGVuZ3RoIG1hcmdpblJpZ2h0ID0gc3R5bGUoKS0+bWFyZ2luUmlnaHQoKTsK
KyAgICBMZW5ndGggbGVmdCA9IHN0eWxlKCktPmxlZnQoKTsKKyAgICBMZW5ndGggcmlnaHQgPSBz
dHlsZSgpLT5yaWdodCgpOworCisgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorICAgICAqIEZv
ciB0aGUgcHVycG9zZXMgb2YgdGhpcyBzZWN0aW9uIGFuZCB0aGUgbmV4dCwgdGhlIHRlcm0gInN0
YXRpYyBwb3NpdGlvbiIKKyAgICAgKiAob2YgYW4gZWxlbWVudCkgcmVmZXJzLCByb3VnaGx5LCB0
byB0aGUgcG9zaXRpb24gYW4gZWxlbWVudCB3b3VsZCBoYXZlIGhhZAorICAgICAqIGluIHRoZSBu
b3JtYWwgZmxvdy4gTW9yZSBwcmVjaXNlbHk6CisgICAgICoKKyAgICAgKiAqIFRoZSBzdGF0aWMg
cG9zaXRpb24gZm9yICdsZWZ0JyBpcyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgbGVmdCBlZGdlIG9m
IHRoZQorICAgICAqICAgY29udGFpbmluZyBibG9jayB0byB0aGUgbGVmdCBtYXJnaW4gZWRnZSBv
ZiBhIGh5cG90aGV0aWNhbCBib3ggdGhhdCB3b3VsZAorICAgICAqICAgaGF2ZSBiZWVuIHRoZSBm
aXJzdCBib3ggb2YgdGhlIGVsZW1lbnQgaWYgaXRzICdwb3NpdGlvbicgcHJvcGVydHkgaGFkCisg
ICAgICogICBiZWVuICdzdGF0aWMnIGFuZCAnZmxvYXQnIGhhZCBiZWVuICdub25lJy4gVGhlIHZh
bHVlIGlzIG5lZ2F0aXZlIGlmIHRoZQorICAgICAqICAgaHlwb3RoZXRpY2FsIGJveCBpcyB0byB0
aGUgbGVmdCBvZiB0aGUgY29udGFpbmluZyBibG9jay4KKyAgICAgKiAqIFRoZSBzdGF0aWMgcG9z
aXRpb24gZm9yICdyaWdodCcgaXMgdGhlIGRpc3RhbmNlIGZyb20gdGhlIHJpZ2h0IGVkZ2Ugb2Yg
dGhlCisgICAgICogICBjb250YWluaW5nIGJsb2NrIHRvIHRoZSByaWdodCBtYXJnaW4gZWRnZSBv
ZiB0aGUgc2FtZSBoeXBvdGhldGljYWwgYm94IGFzCisgICAgICogICBhYm92ZS4gVGhlIHZhbHVl
IGlzIHBvc2l0aXZlIGlmIHRoZSBoeXBvdGhldGljYWwgYm94IGlzIHRvIHRoZSBsZWZ0IG9mIHRo
ZQorICAgICAqICAgY29udGFpbmluZyBibG9jaydzIGVkZ2UuCisgICAgICoKKyAgICAgKiBCdXQg
cmF0aGVyIHRoYW4gYWN0dWFsbHkgY2FsY3VsYXRpbmcgdGhlIGRpbWVuc2lvbnMgb2YgdGhhdCBo
eXBvdGhldGljYWwgYm94LAorICAgICAqIHVzZXIgYWdlbnRzIGFyZSBmcmVlIHRvIG1ha2UgYSBn
dWVzcyBhdCBpdHMgcHJvYmFibGUgcG9zaXRpb24uCisgICAgICoKKyAgICAgKiBGb3IgdGhlIHB1
cnBvc2VzIG9mIGNhbGN1bGF0aW5nIHRoZSBzdGF0aWMgcG9zaXRpb24sIHRoZSBjb250YWluaW5n
IGJsb2NrIG9mCisgICAgICogZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cyBpcyB0aGUgaW5pdGlh
bCBjb250YWluaW5nIGJsb2NrIGluc3RlYWQgb2YgdGhlCisgICAgICogdmlld3BvcnQsIGFuZCBh
bGwgc2Nyb2xsYWJsZSBib3hlcyBzaG91bGQgYmUgYXNzdW1lZCB0byBiZSBzY3JvbGxlZCB0byB0
aGVpcgorICAgICAqIG9yaWdpbi4KKyAgICBcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyAgICAv
LyBzZWUgRklYTUUgMgorICAgIC8vIENhbGN1bGF0ZSB0aGUgc3RhdGljIGRpc3RhbmNlIGlmIG5l
ZWRlZC4KKyAgICBpZiAoKGxlZnQuaXNBdXRvKCkgJiYgcmlnaHQuaXNBdXRvKCkgJiYgKHBhcmVu
dCgpLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpKSB8fCBsZWZ0LmlzU3RhdGljKCkpIHsK
KyAgICAgICAgICAgIC8vICdtX3N0YXRpY1gnIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBzZXQg
dGhyb3VnaCBsYXlvdXQgb2YgdGhlIHBhcmVudC4KKyAgICAgICAgICAgIGludCBzdGF0aWNQb3Np
dGlvbiA9IG1fc3RhdGljWCAtIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJMZWZ0KCk7CisgICAgICAg
ICAgICBmb3IgKFJlbmRlck9iamVjdCogcG8gPSBwYXJlbnQoKTsgcG8gJiYgcG8gIT0gY29udGFp
bmVyQmxvY2s7IHBvID0gcG8tPnBhcmVudCgpKQorICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0
aW9uICs9IHBvLT54UG9zKCk7CisKKyAgICAgICAgICAgIGxlZnQuc2V0VmFsdWUoRml4ZWQsIHN0
YXRpY1Bvc2l0aW9uKTsKKyAgICB9IGVsc2UgaWYgKChsZWZ0LmlzQXV0bygpICYmIHJpZ2h0Lmlz
QXV0bygpICYmIChwYXJlbnQoKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMKSkgfHwgcmln
aHQuaXNTdGF0aWMoKSkgeworICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBwbyA9IHBhcmVudCgp
OworICAgICAgICAgICAgLy8gJ21fc3RhdGljWCcgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIHNl
dCB0aHJvdWdoIGxheW91dCBvZiB0aGUgcGFyZW50LgorICAgICAgICAgICAgaW50IHN0YXRpY1Bv
c2l0aW9uID0gbV9zdGF0aWNYICsgY29udGFpbmVyV2lkdGggKyBjb250YWluZXJCbG9jay0+Ym9y
ZGVyUmlnaHQoKSAtIHBvLT53aWR0aCgpOworICAgICAgICAgICAgZm9yICg7IHBvICYmIHBvICE9
IGNvbnRhaW5lckJsb2NrOyBwbyA9IHBvLT5wYXJlbnQoKSkKKyAgICAgICAgICAgICAgICBzdGF0
aWNQb3NpdGlvbiAtPSBwby0+eFBvcygpOworCisgICAgICAgICAgICByaWdodC5zZXRWYWx1ZShG
aXhlZCwgc3RhdGljUG9zaXRpb24pOworICAgIH0KKworLy8gICAgaWYgKGxlZnQuaXNBdXRvKCkg
JiYgcmlnaHQuaXNBdXRvKCkpIHsKKy8vICAgICAgICBpZiAocGFyZW50KCktPnN0eWxlKCktPmRp
cmVjdGlvbigpID09IExUUikgeworLy8gICAgICAgICAgICAvLyAnbV9zdGF0aWNYJyBzaG91bGQg
YWxyZWFkeSBoYXZlIGJlZW4gc2V0IHRocm91Z2ggbGF5b3V0IG9mIHRoZSBwYXJlbnQuCisvLyAg
ICAgICAgICAgIGludCBzdGF0aWNQb3NpdGlvbiA9IG1fc3RhdGljWCAtIGNvbnRhaW5lckJsb2Nr
LT5ib3JkZXJMZWZ0KCk7CisvLyAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBwbyA9IHBh
cmVudCgpOyBwbyAmJiBwbyAhPSBjb250YWluZXJCbG9jazsgcG8gPSBwby0+cGFyZW50KCkpCisv
LyAgICAgICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiArPSBwby0+eFBvcygpOworLy8gICAgICAg
ICAgICBsZWZ0LnNldFZhbHVlKEZpeGVkLCBzdGF0aWNQb3NpdGlvbik7CisvLyAgICAgICAgfSBl
bHNlIHsKKy8vICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBwbyA9IHBhcmVudCgpOworLy8gICAg
ICAgICAgICAvLyAnbV9zdGF0aWNYJyBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gc2V0IHRocm91
Z2ggbGF5b3V0IG9mIHRoZSBwYXJlbnQuCisvLyAgICAgICAgICAgIGludCBzdGF0aWNQb3NpdGlv
biA9IG1fc3RhdGljWCArIGNvbnRhaW5lcldpZHRoICsgY29udGFpbmVyQmxvY2stPmJvcmRlclJp
Z2h0KCkgLSBwby0+d2lkdGgoKTsKKy8vICAgICAgICAgICAgZm9yICg7IHBvICYmIHBvICE9IGNv
bnRhaW5lckJsb2NrOyBwbyA9IHBvLT5wYXJlbnQoKSkKKy8vICAgICAgICAgICAgICAgIHN0YXRp
Y1Bvc2l0aW9uIC09IHBvLT54UG9zKCk7CisvLyAgICAgICAgICAgIHJpZ2h0LnNldFZhbHVlKEZp
eGVkLCBzdGF0aWNQb3NpdGlvbik7CisvLyAgICAgICAgfQorLy8gICAgfQorCisgICAgLy8gQ2Fs
Y3VsYXRlIGNvbnN0cmFpbnQgZXF1YXRpb24gdmFsdWVzIGZvciAnd2lkdGgnIGNhc2UuCisgICAg
Y2FsY0Fic29sdXRlSG9yaXpvbnRhbFZhbHVlcyhzdHlsZSgpLT53aWR0aCgpLCBjb250YWluZXJC
bG9jaywgY29udGFpbmVyV2lkdGgsIGJvcmRlcnNQbHVzUGFkZGluZywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxlZnQsIHJpZ2h0LCBtYXJnaW5MZWZ0LCBtYXJnaW5SaWdodCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fd2lkdGgsIG1fbWFyZ2luTGVmdCwg
bV9tYXJnaW5SaWdodCwgbV94KTsKKworICAgIC8vIEF2b2lkIGRvaW5nIGFueSB3b3JrIGluIHRo
ZSBjb21tb24gY2FzZSAod2hlcmUgdGhlIHZhbHVlcyBvZiBtYXgtd2lkdGggYW5kIG1pbi13aWR0
aCBhcmUgdGhlaXIgZGVmYXVsdHMpLgorICAgIC8vIHNlZSBGSVhNRSAzCisKKyAgICAvLyBDYWxj
dWxhdGUgY29uc3RyYWludCBlcXVhdGlvbiB2YWx1ZXMgZm9yICdtYXgtd2lkdGgnIGNhc2UuCisg
ICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpIHsK
KyAgICAgICAgaW50IG1heFdpZHRoOworICAgICAgICBpbnQgbWF4TWFyZ2luTGVmdDsKKyAgICAg
ICAgaW50IG1heE1hcmdpblJpZ2h0OworICAgICAgICBpbnQgbWF4WFBvczsKKworICAgICAgICBj
YWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKHN0eWxlKCktPm1heFdpZHRoKCksIGNvbnRhaW5l
ckJsb2NrLCBjb250YWluZXJXaWR0aCwgYm9yZGVyc1BsdXNQYWRkaW5nLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQsIHJpZ2h0LCBtYXJnaW5MZWZ0LCBtYXJnaW5S
aWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aCwgbWF4
TWFyZ2luTGVmdCwgbWF4TWFyZ2luUmlnaHQsIG1heFhQb3MpOworCisgICAgICAgIGlmIChtX3dp
ZHRoID4gbWF4V2lkdGgpIHsKKyAgICAgICAgICAgIG1fd2lkdGggPSBtYXhXaWR0aDsKKyAgICAg
ICAgICAgIG1fbWFyZ2luTGVmdCA9IG1heE1hcmdpbkxlZnQ7CisgICAgICAgICAgICBtX21hcmdp
blJpZ2h0ID0gbWF4TWFyZ2luUmlnaHQ7CisgICAgICAgICAgICBtX3ggPSBtYXhYUG9zOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gQ2FsY3VsYXRlIGNvbnN0cmFpbnQgZXF1YXRpb24gdmFs
dWVzIGZvciAnbWluLXdpZHRoJyBjYXNlLgorICAgIGlmIChzdHlsZSgpLT5taW5XaWR0aCgpLnZh
bHVlKCkpIHsKKyAgICAgICAgaW50IG1pbldpZHRoOworICAgICAgICBpbnQgbWluTWFyZ2luTGVm
dDsKKyAgICAgICAgaW50IG1pbk1hcmdpblJpZ2h0OworICAgICAgICBpbnQgbWluWFBvczsKKwor
ICAgICAgICBjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKHN0eWxlKCktPm1pbldpZHRoKCks
IGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJXaWR0aCwgYm9yZGVyc1BsdXNQYWRkaW5nLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQsIHJpZ2h0LCBtYXJnaW5MZWZ0
LCBtYXJnaW5SaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5X
aWR0aCwgbWluTWFyZ2luTGVmdCwgbWluTWFyZ2luUmlnaHQsIG1pblhQb3MpOworCisgICAgICAg
IGlmIChtX3dpZHRoIDwgbWluV2lkdGgpIHsKKyAgICAgICAgICAgIG1fd2lkdGggPSBtaW5XaWR0
aDsKKyAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IG1pbk1hcmdpbkxlZnQ7CisgICAgICAgICAg
ICBtX21hcmdpblJpZ2h0ID0gbWluTWFyZ2luUmlnaHQ7CisgICAgICAgICAgICBtX3ggPSBtaW5Y
UG9zOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUHV0IG1fd2lkdGggaW50byBjb3JyZWN0
IGZvcm0uCisgICAgbV93aWR0aCArPSBib3JkZXJzUGx1c1BhZGRpbmc7Cit9CisKK3ZvaWQgUmVu
ZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKExlbmd0aCB3aWR0aCwgY29uc3Qg
UmVuZGVyT2JqZWN0KiBjb250YWluZXJCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBjb250YWluZXJXaWR0aCwgY29uc3QgaW50IGJv
cmRlcnNQbHVzUGFkZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IExlbmd0aCBsZWZ0LCBjb25zdCBMZW5ndGggcmlnaHQsIGNvbnN0IExlbmd0
aCBtYXJnaW5MZWZ0LCBjb25zdCBMZW5ndGggbWFyZ2luUmlnaHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIHdpZHRoVmFsdWUsIGludCYgbWFyZ2lu
TGVmdFZhbHVlLCBpbnQmIG1hcmdpblJpZ2h0VmFsdWUsIGludCYgeFBvcykKK3sKKyAgICAvLyAn
bGVmdCcgYW5kICdyaWdodCcgY2Fubm90IGJvdGggYmUgJ2F1dG8nIGJlY2F1c2Ugb25lIHdvdWxk
IG9mIGJlZW4KKyAgICAvLyBjb252ZXJ0ZWQgdG8gdGhlIHN0YXRpYyBwb3N0aW9uIGFscmVhZHkK
KyAgICBBU1NFUlQoIShsZWZ0LmlzQXV0bygpICYmIHJpZ2h0LmlzQXV0bygpKSk7CisKKyAgICBp
bnQgbGVmdFZhbHVlOworCisgICAgYm9vbCB3aWR0aElzQXV0byA9IHdpZHRoLmlzSW50cmluc2lj
T3JBdXRvKCk7CisgICAgYm9vbCBsZWZ0SXNBdXRvID0gbGVmdC5pc0F1dG8oKTsKKyAgICBib29s
IHJpZ2h0SXNBdXRvID0gcmlnaHQuaXNBdXRvKCk7CisKKyAgICBpZiAoIWxlZnRJc0F1dG8gJiYg
IXdpZHRoSXNBdXRvICYmICFyaWdodElzQXV0bykgeworICAgICAgICAvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KlwKKyAgICAgICAgICogSWYgbm9uZSBvZiB0aGUgdGhyZWUgaXMgJ2F1dG8nOiBJZiBib3RoICdt
YXJnaW4tbGVmdCcgYW5kICdtYXJnaW4tCisgICAgICAgICAqIHJpZ2h0JyBhcmUgJ2F1dG8nLCBz
b2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIgdGhlIGV4dHJhIGNvbnN0cmFpbnQgdGhhdAorICAgICAg
ICAgKiB0aGUgdHdvIG1hcmdpbnMgZ2V0IGVxdWFsIHZhbHVlcywgdW5sZXNzIHRoaXMgd291bGQg
bWFrZSB0aGVtIG5lZ2F0aXZlLAorICAgICAgICAgKiBpbiB3aGljaCBjYXNlIHdoZW4gZGlyZWN0
aW9uIG9mIHRoZSBjb250YWluaW5nIGJsb2NrIGlzICdsdHInICgncnRsJyksCisgICAgICAgICAq
IHNldCAnbWFyZ2luLWxlZnQnICgnbWFyZ2luLXJpZ2h0JykgdG8gemVybyBhbmQgc29sdmUgZm9y
ICdtYXJnaW4tcmlnaHQnCisgICAgICAgICAqICgnbWFyZ2luLWxlZnQnKS4gSWYgb25lIG9mICdt
YXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1yaWdodCcgaXMgJ2F1dG8nLAorICAgICAgICAgKiBzb2x2
ZSB0aGUgZXF1YXRpb24gZm9yIHRoYXQgdmFsdWUuIElmIHRoZSB2YWx1ZXMgYXJlIG92ZXItY29u
c3RyYWluZWQsCisgICAgICAgICAqIGlnbm9yZSB0aGUgdmFsdWUgZm9yICdsZWZ0JyAoaW4gY2Fz
ZSB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlCisgICAgICAgICAqIGNvbnRhaW5pbmcg
YmxvY2sgaXMgJ3J0bCcpIG9yICdyaWdodCcgKGluIGNhc2UgJ2RpcmVjdGlvbicgaXMgJ2x0cicp
CisgICAgICAgICAqIGFuZCBzb2x2ZSBmb3IgdGhhdCB2YWx1ZS4KKyAgICAgICAgXCotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCisgICAgICAgIC8vIE5PVEU6ICBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHNvbHZl
IGZvciAncmlnaHQnIGluIHRoZSBvdmVyIGNvbnN0cmFpbmVkCisgICAgICAgIC8vIGNhc2UgYmVj
YXVzZSB0aGUgdmFsdWUgaXMgbm90IHVzZWQgZm9yIGFueSBmdXJ0aGVyIGNhbGN1bGF0aW9ucy4K
KworICAgICAgICBsZWZ0VmFsdWUgPSBsZWZ0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCk7Cisg
ICAgICAgIHdpZHRoVmFsdWUgPSBjYWxjQ29udGVudEJveFdpZHRoKHdpZHRoLmNhbGNWYWx1ZShj
b250YWluZXJXaWR0aCkpOworCisgICAgICAgIGNvbnN0IGludCBhdmFpbGFibGVTcGFjZSA9IGNv
bnRhaW5lcldpZHRoIC0gKGxlZnRWYWx1ZSArIHdpZHRoVmFsdWUgKyByaWdodC5jYWxjVmFsdWUo
Y29udGFpbmVyV2lkdGgpICsgYm9yZGVyc1BsdXNQYWRkaW5nKTsKKworICAgICAgICAvLyBNYXJn
aW5zIGFyZSBub3cgdGhlIG9ubHkgdW5rbm93bgorICAgICAgICBpZiAobWFyZ2luTGVmdC5pc0F1
dG8oKSAmJiBtYXJnaW5SaWdodC5pc0F1dG8oKSkgeworICAgICAgICAgICAgLy8gQm90aCBtYXJn
aW5zIGF1dG8sIHNvbHZlIGZvciBlcXVhbGl0eQorICAgICAgICAgICAgaWYgKGF2YWlsYWJsZVNw
YWNlID49IDApIHsKKyAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0VmFsdWUgPSBhdmFpbGFibGVT
cGFjZSAvIDI7IC8vIHNwbGl0IHRoZSBkaWZlcmVuY2UKKyAgICAgICAgICAgICAgICBtYXJnaW5S
aWdodFZhbHVlID0gbWFyZ2luTGVmdFZhbHVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAvLyBzZWUgRklYTUUgMQorICAgICAgICAgICAgICAgIGlmIChwYXJlbnQoKS0+
c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7CisgICAgICAgICAgICAgICAgICAgIG1hcmdp
bkxlZnRWYWx1ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0VmFsdWUgPSBh
dmFpbGFibGVTcGFjZTsgLy8gd2lsbCBiZSBuZWdhdGl2ZQorICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnRWYWx1ZSA9IGF2YWlsYWJsZVNwYWNl
OyAvLyB3aWxsIGJlIG5lZ2F0aXZlCisgICAgICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0VmFs
dWUgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmIChtYXJnaW5MZWZ0LmlzQXV0bygpKSB7CisgICAgICAgICAgICAvLyBTb2x2ZSBmb3IgbGVm
dCBtYXJnaW4KKyAgICAgICAgICAgIG1hcmdpblJpZ2h0VmFsdWUgPSBtYXJnaW5SaWdodC5jYWxj
VmFsdWUoY29udGFpbmVyV2lkdGgpOworICAgICAgICAgICAgbWFyZ2luTGVmdFZhbHVlID0gYXZh
aWxhYmxlU3BhY2UgLSBtYXJnaW5SaWdodFZhbHVlOworICAgICAgICB9IGVsc2UgaWYgKG1hcmdp
blJpZ2h0LmlzQXV0bygpKSB7CisgICAgICAgICAgICAvLyBTb2x2ZSBmb3IgcmlnaHQgbWFyZ2lu
CisgICAgICAgICAgICBtYXJnaW5MZWZ0VmFsdWUgPSBtYXJnaW5MZWZ0LmNhbGNWYWx1ZShjb250
YWluZXJXaWR0aCk7CisgICAgICAgICAgICBtYXJnaW5SaWdodFZhbHVlID0gYXZhaWxhYmxlU3Bh
Y2UgLSBtYXJnaW5MZWZ0VmFsdWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBP
dmVyLWNvbnN0cmFpbmVkLCBzb2x2ZSBmb3IgbGVmdCBpZiBkaXJlY3Rpb24gaXMgUlRMCisgICAg
ICAgICAgICBtYXJnaW5MZWZ0VmFsdWUgPSBtYXJnaW5MZWZ0LmNhbGNWYWx1ZShjb250YWluZXJX
aWR0aCk7CisgICAgICAgICAgICBtYXJnaW5SaWdodFZhbHVlID0gbWFyZ2luUmlnaHQuY2FsY1Zh
bHVlKGNvbnRhaW5lcldpZHRoKTsKKworICAgICAgICAgICAgLy8gc2VlIEZJWE1FIDEgLS0gdXNl
ZCB0byBiZSAidGhpcy0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkiCisgICAgICAgICAgICBpZiAocGFy
ZW50KCktPnN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCkKKyAgICAgICAgICAgICAgICBsZWZ0
VmFsdWUgPSAoYXZhaWxhYmxlU3BhY2UgKyBsZWZ0VmFsdWUpIC0gbWFyZ2luTGVmdFZhbHVlIC0g
bWFyZ2luUmlnaHRWYWx1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qXAorICAgICAgICAgKiBPdGhlcndpc2UsIHNldCAnYXV0bycgdmFsdWVzIGZvciAn
bWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JworICAgICAgICAgKiB0byAwLCBhbmQgcGlj
ayB0aGUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc2l4IHJ1bGVzIHRoYXQgYXBwbGllcy4KKyAgICAg
ICAgICoKKyAgICAgICAgICogMS4gJ2xlZnQnIGFuZCAnd2lkdGgnIGFyZSAnYXV0bycgYW5kICdy
aWdodCcgaXMgbm90ICdhdXRvJywgdGhlbiB0aGUKKyAgICAgICAgICogICAgd2lkdGggaXMgc2hy
aW5rLXRvLWZpdC4gVGhlbiBzb2x2ZSBmb3IgJ2xlZnQnCisgICAgICAgICAqCisgICAgICAgICAq
ICAgICAgICAgICAgICBPTUlUIFJVTEUgMiBBUyBJVCBTSE9VTEQgTkVWRVIgQkUgSElUCisgICAg
ICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgKiAyLiAnbGVmdCcgYW5kICdyaWdodCcgYXJlICdh
dXRvJyBhbmQgJ3dpZHRoJyBpcyBub3QgJ2F1dG8nLCB0aGVuIGlmCisgICAgICAgICAqICAgIHRo
ZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgY29udGFpbmluZyBibG9jayBpcyAnbHRyJyBz
ZXQKKyAgICAgICAgICogICAgJ2xlZnQnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24sIG90aGVyd2lz
ZSBzZXQgJ3JpZ2h0JyB0byB0aGUKKyAgICAgICAgICogICAgc3RhdGljIHBvc2l0aW9uLiBUaGVu
IHNvbHZlIGZvciAnbGVmdCcgKGlmICdkaXJlY3Rpb24gaXMgJ3J0bCcpCisgICAgICAgICAqICAg
IG9yICdyaWdodCcgKGlmICdkaXJlY3Rpb24nIGlzICdsdHInKS4KKyAgICAgICAgICogLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisgICAgICAgICAqCisgICAgICAgICAqIDMuICd3aWR0aCcgYW5kICdyaWdodCcgYXJlICdh
dXRvJyBhbmQgJ2xlZnQnIGlzIG5vdCAnYXV0bycsIHRoZW4gdGhlCisgICAgICAgICAqICAgIHdp
ZHRoIGlzIHNocmluay10by1maXQgLiBUaGVuIHNvbHZlIGZvciAncmlnaHQnCisgICAgICAgICAq
IDQuICdsZWZ0JyBpcyAnYXV0bycsICd3aWR0aCcgYW5kICdyaWdodCcgYXJlIG5vdCAnYXV0bycs
IHRoZW4gc29sdmUKKyAgICAgICAgICogICAgZm9yICdsZWZ0JworICAgICAgICAgKiA1LiAnd2lk
dGgnIGlzICdhdXRvJywgJ2xlZnQnIGFuZCAncmlnaHQnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNv
bHZlCisgICAgICAgICAqICAgIGZvciAnd2lkdGgnCisgICAgICAgICAqIDYuICdyaWdodCcgaXMg
J2F1dG8nLCAnbGVmdCcgYW5kICd3aWR0aCcgYXJlIG5vdCAnYXV0bycsIHRoZW4gc29sdmUKKyAg
ICAgICAgICogICAgZm9yICdyaWdodCcKKyAgICAgICAgICoKKyAgICAgICAgICogQ2FsY3VsYXRp
b24gb2YgdGhlIHNocmluay10by1maXQgd2lkdGggaXMgc2ltaWxhciB0byBjYWxjdWxhdGluZyB0
aGUKKyAgICAgICAgICogd2lkdGggb2YgYSB0YWJsZSBjZWxsIHVzaW5nIHRoZSBhdXRvbWF0aWMg
dGFibGUgbGF5b3V0IGFsZ29yaXRobS4KKyAgICAgICAgICogUm91Z2hseTogY2FsY3VsYXRlIHRo
ZSBwcmVmZXJyZWQgd2lkdGggYnkgZm9ybWF0dGluZyB0aGUgY29udGVudAorICAgICAgICAgKiB3
aXRob3V0IGJyZWFraW5nIGxpbmVzIG90aGVyIHRoYW4gd2hlcmUgZXhwbGljaXQgbGluZSBicmVh
a3Mgb2NjdXIsCisgICAgICAgICAqIGFuZCBhbHNvIGNhbGN1bGF0ZSB0aGUgcHJlZmVycmVkIG1p
bmltdW0gd2lkdGgsIGUuZy4sIGJ5IHRyeWluZyBhbGwKKyAgICAgICAgICogcG9zc2libGUgbGlu
ZSBicmVha3MuIENTUyAyLjEgZG9lcyBub3QgZGVmaW5lIHRoZSBleGFjdCBhbGdvcml0aG0uCisg
ICAgICAgICAqIFRoaXJkbHksIGNhbGN1bGF0ZSB0aGUgYXZhaWxhYmxlIHdpZHRoOiB0aGlzIGlz
IGZvdW5kIGJ5IHNvbHZpbmcKKyAgICAgICAgICogZm9yICd3aWR0aCcgYWZ0ZXIgc2V0dGluZyAn
bGVmdCcgKGluIGNhc2UgMSkgb3IgJ3JpZ2h0JyAoaW4gY2FzZSAzKQorICAgICAgICAgKiB0byAw
LgorICAgICAgICAgKgorICAgICAgICAgKiBUaGVuIHRoZSBzaHJpbmstdG8tZml0IHdpZHRoIGlz
OgorICAgICAgICAgKiBtaW4obWF4KHByZWZlcnJlZCBtaW5pbXVtIHdpZHRoLCBhdmFpbGFibGUg
d2lkdGgpLCBwcmVmZXJyZWQgd2lkdGgpLgorICAgICAgICBcKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAg
ICAgLy8gTk9URTogRm9yIHJ1bGVzIDMgYW5kIDYgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBzb2x2
ZSBmb3IgJ3JpZ2h0JworICAgICAgICAvLyBiZWNhdXNlIHRoZSB2YWx1ZSBpcyBub3QgdXNlZCBm
b3IgYW55IGZ1cnRoZXIgY2FsY3VsYXRpb25zLgorCisgICAgICAgIC8vIENhbGN1bGF0ZSBtYXJn
aW5zLCAnYXV0bycgbWFyZ2lucyBhcmUgaWdub3JlZC4KKyAgICAgICAgbWFyZ2luTGVmdFZhbHVl
ID0gbWFyZ2luTGVmdC5jYWxjTWluVmFsdWUoY29udGFpbmVyV2lkdGgpOworICAgICAgICBtYXJn
aW5SaWdodFZhbHVlID0gbWFyZ2luUmlnaHQuY2FsY01pblZhbHVlKGNvbnRhaW5lcldpZHRoKTsK
KworICAgICAgICBjb25zdCBpbnQgYXZhaWxhYmxlU3BhY2UgPSBjb250YWluZXJXaWR0aCAtICht
YXJnaW5MZWZ0VmFsdWUgKyBtYXJnaW5SaWdodFZhbHVlICsgYm9yZGVyc1BsdXNQYWRkaW5nKTsK
KworICAgICAgICAvLyBVc2UgcnVsZS9jYXNlIHRoYXQgYXBwbGllcy4KKyAgICAgICAgaWYgKGxl
ZnRJc0F1dG8gJiYgd2lkdGhJc0F1dG8gJiYgIXJpZ2h0SXNBdXRvKSB7CisgICAgICAgICAgICAv
LyBSVUxFIDE6ICh1c2Ugc2hyaW5rLXRvLWZpdCBmb3Igd2lkdGgsIGFuZCBzb2x2ZSBvZiBsZWZ0
KQorICAgICAgICAgICAgaW50IHJpZ2h0VmFsdWUgPSByaWdodC5jYWxjVmFsdWUoY29udGFpbmVy
V2lkdGgpOworCisgICAgICAgICAgICAvLyBGSVhNRTogd291bGQgaXQgYmUgYmV0dGVyIHRvIGhh
dmUgc2hyaW5rLXRvLWZpdCBpbiBvbmUgc3RlcD8KKyAgICAgICAgICAgIGludCBwcmVmZXJyZWRX
aWR0aCA9IG1fbWF4V2lkdGggLSBib3JkZXJzUGx1c1BhZGRpbmc7CisgICAgICAgICAgICBpbnQg
cHJlZmVycmVkTWluV2lkdGggPSBtX21pbldpZHRoIC0gYm9yZGVyc1BsdXNQYWRkaW5nOworICAg
ICAgICAgICAgaW50IGF2YWlsYWJsZVdpZHRoID0gYXZhaWxhYmxlU3BhY2UgLSByaWdodFZhbHVl
OworICAgICAgICAgICAgd2lkdGhWYWx1ZSA9IG1pbihtYXgocHJlZmVycmVkTWluV2lkdGgsIGF2
YWlsYWJsZVdpZHRoKSwgcHJlZmVycmVkV2lkdGgpOworICAgICAgICAgICAgbGVmdFZhbHVlID0g
YXZhaWxhYmxlU3BhY2UgLSAod2lkdGhWYWx1ZSArIHJpZ2h0VmFsdWUpOworICAgICAgICB9IGVs
c2UgaWYgKCFsZWZ0SXNBdXRvICYmIHdpZHRoSXNBdXRvICYmIHJpZ2h0SXNBdXRvKSB7CisgICAg
ICAgICAgICAvLyBSVUxFIDM6ICh1c2Ugc2hyaW5rLXRvLWZpdCBmb3Igd2lkdGgsIGFuZCBubyBu
ZWVkIHNvbHZlIG9mIHJpZ2h0KQorICAgICAgICAgICAgbGVmdFZhbHVlID0gbGVmdC5jYWxjVmFs
dWUoY29udGFpbmVyV2lkdGgpOworCisgICAgICAgICAgICAvLyBGSVhNRTogd291bGQgaXQgYmUg
YmV0dGVyIHRvIGhhdmUgc2hyaW5rLXRvLWZpdCBpbiBvbmUgc3RlcD8KKyAgICAgICAgICAgIGlu
dCBwcmVmZXJyZWRXaWR0aCA9IG1fbWF4V2lkdGggLSBib3JkZXJzUGx1c1BhZGRpbmc7CisgICAg
ICAgICAgICBpbnQgcHJlZmVycmVkTWluV2lkdGggPSBtX21pbldpZHRoIC0gYm9yZGVyc1BsdXNQ
YWRkaW5nOworICAgICAgICAgICAgaW50IGF2YWlsYWJsZVdpZHRoID0gYXZhaWxhYmxlU3BhY2Ug
LSBsZWZ0VmFsdWU7CisgICAgICAgICAgICB3aWR0aFZhbHVlID0gbWluKG1heChwcmVmZXJyZWRN
aW5XaWR0aCwgYXZhaWxhYmxlV2lkdGgpLCBwcmVmZXJyZWRXaWR0aCk7CisgICAgICAgIH0gZWxz
ZSBpZiAobGVmdElzQXV0byAmJiAhd2lkdGguaXNBdXRvKCkgJiYgIXJpZ2h0SXNBdXRvKSB7Cisg
ICAgICAgICAgICAvLyBSVUxFIDQ6IChzb2x2ZSBmb3IgbGVmdCkKKyAgICAgICAgICAgIHdpZHRo
VmFsdWUgPSBjYWxjQ29udGVudEJveFdpZHRoKHdpZHRoLmNhbGNWYWx1ZShjb250YWluZXJXaWR0
aCkpOworICAgICAgICAgICAgbGVmdFZhbHVlID0gYXZhaWxhYmxlU3BhY2UgLSAod2lkdGhWYWx1
ZSArIHJpZ2h0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCkpOworICAgICAgICB9IGVsc2UgaWYg
KCFsZWZ0SXNBdXRvICYmIHdpZHRoSXNBdXRvICYmICFyaWdodElzQXV0bykgeworICAgICAgICAg
ICAgLy8gUlVMRSA1OiAoc29sdmUgZm9yIHdpZHRoKQorICAgICAgICAgICAgbGVmdFZhbHVlID0g
bGVmdC5jYWxjVmFsdWUoY29udGFpbmVyV2lkdGgpOworICAgICAgICAgICAgd2lkdGhWYWx1ZSA9
IGF2YWlsYWJsZVNwYWNlIC0gKGxlZnRWYWx1ZSArIHJpZ2h0LmNhbGNWYWx1ZShjb250YWluZXJX
aWR0aCkpOworICAgICAgICB9IGVsc2UgaWYgKCFsZWZ0SXNBdXRvJiYgIXdpZHRoSXNBdXRvICYm
IHJpZ2h0SXNBdXRvKSB7CisgICAgICAgICAgICAvLyBSVUxFIDY6IChubyBuZWVkIHNvbHZlIGZv
ciByaWdodCkKKyAgICAgICAgICAgIGxlZnRWYWx1ZSA9IGxlZnQuY2FsY1ZhbHVlKGNvbnRhaW5l
cldpZHRoKTsKKyAgICAgICAgICAgIHdpZHRoVmFsdWUgPSBjYWxjQ29udGVudEJveFdpZHRoKHdp
ZHRoLmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCkpOwogICAgICAgICB9Ci0KLSAgICAgICAgciA9
IHN0YXRpY19kaXN0YW5jZTsKICAgICB9CiAKLSAgICBjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFs
dWVzKFdpZHRoLCBjYiwgY3csIHBhYiwgc3RhdGljX2Rpc3RhbmNlLCBsLCByLCBtX3dpZHRoLCBt
X21hcmdpbkxlZnQsIG1fbWFyZ2luUmlnaHQsIG1feCk7Ci0KLSAgICAvLyBBdm9pZCBkb2luZyBh
bnkgd29yayBpbiB0aGUgY29tbW9uIGNhc2UgKHdoZXJlIHRoZSB2YWx1ZXMgb2YgbWluLXdpZHRo
IGFuZCBtYXgtd2lkdGggYXJlIHRoZWlyIGRlZmF1bHRzKS4KLSAgICBpbnQgbWluVyA9IG1fd2lk
dGgsIG1pbk1MLCBtaW5NUiwgbWluWDsKLSAgICBjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVz
KE1pbldpZHRoLCBjYiwgY3csIHBhYiwgc3RhdGljX2Rpc3RhbmNlLCBsLCByLCBtaW5XLCBtaW5N
TCwgbWluTVIsIG1pblgpOwotCi0gICAgaW50IG1heFcgPSBtX3dpZHRoLCBtYXhNTCwgbWF4TVIs
IG1heFg7Ci0gICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRM
ZW5ndGgpCi0gICAgICAgIGNhbGNBYnNvbHV0ZUhvcml6b250YWxWYWx1ZXMoTWF4V2lkdGgsIGNi
LCBjdywgc3RhdGljX2Rpc3RhbmNlLCBwYWIsIGwsIHIsIG1heFcsIG1heE1MLCBtYXhNUiwgbWF4
WCk7Ci0KLSAgICBpZiAobV93aWR0aCA+IG1heFcpIHsKLSAgICAgICAgbV93aWR0aCA9IG1heFc7
Ci0gICAgICAgIG1fbWFyZ2luTGVmdCA9IG1heE1MOwotICAgICAgICBtX21hcmdpblJpZ2h0ID0g
bWF4TVI7Ci0gICAgICAgIG1feCA9IG1heFg7Ci0gICAgfQotICAgIAotICAgIGlmIChtX3dpZHRo
IDwgbWluVykgewotICAgICAgICBtX3dpZHRoID0gbWluVzsKLSAgICAgICAgbV9tYXJnaW5MZWZ0
ID0gbWluTUw7Ci0gICAgICAgIG1fbWFyZ2luUmlnaHQgPSBtaW5NUjsKLSAgICAgICAgbV94ID0g
bWluWDsKLSAgICB9CisgICAgLy8gVXNlIGNvbXB1dGVkIHZhbHVlcyB0byBjYWxjdWxhdGUgdGhl
IGhvcml6b250YWwgcG9zaXRpb24uCisgICAgeFBvcyA9IGxlZnRWYWx1ZSArIG1hcmdpbkxlZnRW
YWx1ZSArIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJMZWZ0KCk7CiB9CiAKLXZvaWQgUmVuZGVyQm94
OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKFdpZHRoVHlwZSB3aWR0aFR5cGUsIFJlbmRl
ck9iamVjdCogY2IsIGludCBjdywgaW50IHBhYiwgaW50IHN0YXRpY19kaXN0YW5jZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsLCBpbnQgciwgaW50
JiB3LCBpbnQmIG1sLCBpbnQmIG1yLCBpbnQmIHgpCit2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29s
dXRlVmVydGljYWwoKQogewotICAgIGNvbnN0IGludCBBVVRPID0gLTY2NjY2NjsKLSAgICB3ID0g
bWwgPSBtciA9IEFVVE87Ci0KLSAgICBpZiAoIXN0eWxlKCktPm1hcmdpbkxlZnQoKS5pc0F1dG8o
KSkKLSAgICAgICAgbWwgPSBzdHlsZSgpLT5tYXJnaW5MZWZ0KCkuY2FsY1ZhbHVlKGN3KTsKLSAg
ICBpZiAoIXN0eWxlKCktPm1hcmdpblJpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIG1yID0gc3R5
bGUoKS0+bWFyZ2luUmlnaHQoKS5jYWxjVmFsdWUoY3cpOwotCi0gICAgTGVuZ3RoIHdpZHRoOwot
ICAgIGlmICh3aWR0aFR5cGUgPT0gV2lkdGgpCi0gICAgICAgIHdpZHRoID0gc3R5bGUoKS0+d2lk
dGgoKTsKLSAgICBlbHNlIGlmICh3aWR0aFR5cGUgPT0gTWluV2lkdGgpCi0gICAgICAgIHdpZHRo
ID0gc3R5bGUoKS0+bWluV2lkdGgoKTsKLSAgICBlbHNlCi0gICAgICAgIHdpZHRoID0gc3R5bGUo
KS0+bWF4V2lkdGgoKTsKLQotICAgIGlmICghd2lkdGguaXNJbnRyaW5zaWNPckF1dG8oKSkKLSAg
ICAgICAgdyA9IGNhbGNDb250ZW50Qm94V2lkdGgod2lkdGguY2FsY1ZhbHVlKGN3KSk7Ci0gICAg
ZWxzZSBpZiAoaXNSZXBsYWNlZCgpKQotICAgICAgICB3ID0gY2FsY1JlcGxhY2VkV2lkdGgoKTsK
LQotICAgIGlmIChsICE9IEFVVE8gJiYgdyAhPSBBVVRPICYmIHIgIT0gQVVUTykgewotICAgICAg
ICAvLyBsZWZ0LCB3aWR0aCwgcmlnaHQgYWxsIGdpdmVuLCBwbGF5IHdpdGggbWFyZ2lucwotICAg
ICAgICBpbnQgb3QgPSBsICsgdyArIHIgKyBwYWI7Ci0KLSAgICAgICAgaWYgKG1sPT1BVVRPICYm
IG1yPT1BVVRPKSB7Ci0gICAgICAgICAgICAvLyBib3RoIG1hcmdpbnMgYXV0bywgc29sdmUgZm9y
IGVxdWFsaXR5Ci0gICAgICAgICAgICBtbCA9IChjdyAtIG90KS8yOwotICAgICAgICAgICAgbXIg
PSBjdyAtIG90IC0gbWw7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobWw9PUFVVE8pCi0g
ICAgICAgICAgICAvLyBzb2x2ZSBmb3IgbGVmdCBtYXJnaW4KLSAgICAgICAgICAgIG1sID0gY3cg
LSBvdCAtIG1yOwotICAgICAgICBlbHNlIGlmIChtcj09QVVUTykKLSAgICAgICAgICAgIC8vIHNv
bHZlIGZvciByaWdodCBtYXJnaW4KLSAgICAgICAgICAgIG1yID0gY3cgLSBvdCAtIG1sOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIG92ZXJjb25zdHJhaW5lZCwgc29sdmUgYWNjb3Jk
aW5nIHRvIGRpcgotICAgICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikK
LSAgICAgICAgICAgICAgICByID0gY3cgLSAoIGwgKyB3ICsgbWwgKyBtciArIHBhYik7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbCA9IGN3IC0gKCByICsgdyArIG1sICsgbXIg
KyBwYWIpOwotICAgICAgICB9CisgICAgaWYgKGlzUmVwbGFjZWQoKSkgeworICAgICAgICBjYWxj
QWJzb2x1dGVWZXJ0aWNhbFJlcGxhY2VkKCk7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgLy8gb25lIG9yIHR3byBvZiAobGVmdCwgd2lkdGgsIHJpZ2h0
KSBtaXNzaW5nLCBzb2x2ZQotCi0gICAgICAgIC8vIGF1dG8gbWFyZ2lucyBhcmUgaWdub3JlZAot
ICAgICAgICBpZiAobWw9PUFVVE8pIG1sID0gMDsKLSAgICAgICAgaWYgKG1yPT1BVVRPKSBtciA9
IDA7Ci0KLSAgICAgICAgLy8xLiBzb2x2ZSBsZWZ0ICYgd2lkdGguCi0gICAgICAgIGlmIChsID09
IEFVVE8gJiYgdyA9PSBBVVRPICYmIHIgIT0gQVVUTykgewotICAgICAgICAgICAgLy8gRnJvbSBz
ZWN0aW9uIDEwLjMuNyBvZiB0aGUgQ1NTMi4xIHNwZWNpZmljYXRpb24uCi0gICAgICAgICAgICAv
LyAiVGhlIHNocmluay10by1maXQgd2lkdGggaXM6IG1pbihtYXgocHJlZmVycmVkIG1pbmltdW0g
d2lkdGgsIGF2YWlsYWJsZSB3aWR0aCksIHByZWZlcnJlZCB3aWR0aCkuIgotICAgICAgICAgICAg
dyA9IGtNaW4oa01heChtX21pbldpZHRoIC0gcGFiLCBjdyAtIChyICsgbWwgKyBtciArIHBhYikp
LCBtX21heFdpZHRoIC0gcGFiKTsKLSAgICAgICAgICAgIGwgPSBjdyAtIChyICsgdyArIG1sICsg
bXIgKyBwYWIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKIAotICAgICAgICAvLzIuIHNvbHZl
IGxlZnQgJiByaWdodC4gdXNlIHN0YXRpYyBwb3NpdGlvbmluZy4KLSAgICAgICAgaWYgKGwgPT0g
QVVUTyAmJiB3ICE9IEFVVE8gJiYgciA9PSBBVVRPKSB7Ci0gICAgICAgICAgICBpZiAoc3R5bGUo
KS0+ZGlyZWN0aW9uKCk9PVJUTCkgewotICAgICAgICAgICAgICAgIHIgPSBzdGF0aWNfZGlzdGFu
Y2U7Ci0gICAgICAgICAgICAgICAgbCA9IGN3IC0gKHIgKyB3ICsgbWwgKyBtciArIHBhYik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBsID0gc3Rh
dGljX2Rpc3RhbmNlOwotICAgICAgICAgICAgICAgIHIgPSBjdyAtIChsICsgdyArIG1sICsgbXIg
KyBwYWIpOwotICAgICAgICAgICAgfQorICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgYmFzZWQgb2Zm
IG9mIHRoZSBXM0MgV29ya2luZyBEcmFmdCBmcm9tIEp1bmUgMTMsIDIwMDUgb2YKKyAgICAvLyBD
U1MgMi4xOiBTZWN0aW9uIDEwLjYuNCAiQWJzb2x1dGVseSBwb3NpdGlvbmVkLCBub24tcmVwbGFj
ZWQgZWxlbWVudHMiCisgICAgLy8gPGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDUvV0QtQ1NTMjEt
MjAwNTA2MTMvdmlzdWRldC5odG1sI2Ficy1ub24tcmVwbGFjZWQtaGVpZ2h0PgorICAgIC8vIChi
bG9jay1zdHlsZS1jb21tZW50cyBpbiB0aGlzIGZ1bmN0aW9uIGFuZCBpbiBjYWxjQWJzb2x1dGVW
ZXJ0aWNhbFZhbHVlcygpCisgICAgLy8gY29ycmVzcG9uZCB0byB0ZXh0IGZyb20gdGhlIHNwZWMp
CiAKLSAgICAgICAgfSAvLzMuIHNvbHZlIHdpZHRoICYgcmlnaHQuCi0gICAgICAgIGVsc2UgaWYg
KGwgIT0gQVVUTyAmJiB3ID09IEFVVE8gJiYgciA9PSBBVVRPKSB7Ci0gICAgICAgICAgICAvLyBG
cm9tIHNlY3Rpb24gMTAuMy43IG9mIHRoZSBDU1MyLjEgc3BlY2lmaWNhdGlvbi4KLSAgICAgICAg
ICAgIC8vICJUaGUgc2hyaW5rLXRvLWZpdCB3aWR0aCBpczogbWluKG1heChwcmVmZXJyZWQgbWlu
aW11bSB3aWR0aCwgYXZhaWxhYmxlIHdpZHRoKSwgcHJlZmVycmVkIHdpZHRoKS4iCi0gICAgICAg
ICAgICB3ID0ga01pbihrTWF4KG1fbWluV2lkdGggLSBwYWIsIGN3IC0gKGwgKyBtbCArIG1yICsg
cGFiKSksIG1fbWF4V2lkdGggLSBwYWIpOwotICAgICAgICAgICAgciA9IGN3IC0gKGwgKyB3ICsg
bWwgKyBtciArIHBhYik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQogCi0gICAgICAgIC8vNC4g
c29sdmUgbGVmdAotICAgICAgICBpZiAobD09QVVUTyAmJiB3IT1BVVRPICYmIHIhPUFVVE8pCi0g
ICAgICAgICAgICBsID0gY3cgLSAociArIHcgKyBtbCArIG1yICsgcGFiKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAvLzUuIHNvbHZlIHdpZHRoCi0gICAgICAgIGlmIChsIT1BVVRPICYmIHc9PUFV
VE8gJiYgciE9QVVUTykKLSAgICAgICAgICAgIHcgPSBjdyAtIChyICsgbCArIG1sICsgbXIgKyBw
YWIpOwotICAgICAgICBlbHNlCisgICAgLy8gV2UgZG9uJ3QgdXNlIGNvbnRhaW5pbmdCbG9jaygp
LCBzaW5jZSB3ZSBtYXkgYmUgcG9zaXRpb25lZCBieSBhbiBlbmNsb3NpbmcgcmVscG9zaXRpb25l
ZCBpbmxpbmUuCisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXJCbG9jayA9IGNvbnRh
aW5lcigpOworICAgIGNvbnN0IGludCBib3JkZXJzUGx1c1BhZGRpbmcgPSBib3JkZXJUb3AoKSAr
IGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ1RvcCgpICsgcGFkZGluZ0JvdHRvbSgpOwogCi0gICAg
ICAgIC8vNi4gc29sdmUgcmlnaHQKLSAgICAgICAgaWYgKGwhPUFVVE8gJiYgdyE9QVVUTyAmJiBy
PT1BVVRPKQotICAgICAgICAgICAgciA9IGN3IC0gKGwgKyB3ICsgbWwgKyBtciArIHBhYik7Cisg
ICAgLy8gRXZlbiBpbiBzdHJpY3QgbW9kZSAod2hlcmUgd2UgZG9uJ3QgZ3JvdyB0aGUgcm9vdCB0
byBmaWxsIHRoZSB2aWV3cG9ydCkgb3RoZXIgYnJvd3NlcnMKKyAgICAvLyBwb3NpdGlvbiBhcyB0
aG91Z2ggdGhlIHJvb3QgZmlsbHMgdGhlIHZpZXdwb3J0LgorICAgIGNvbnN0IGludCBjb250YWlu
ZXJIZWlnaHQgPSBjb250YWluZXJCbG9jay0+aXNSb290KCkgPyBjb250YWluZXJCbG9jay0+YXZh
aWxhYmxlSGVpZ2h0KCkgOiAoY29udGFpbmVyQmxvY2stPmhlaWdodCgpIC0gY29udGFpbmVyQmxv
Y2stPmJvcmRlclRvcCgpIC0gY29udGFpbmVyQmxvY2stPmJvcmRlckJvdHRvbSgpKTsKKworICAg
IGNvbnN0IExlbmd0aCBtYXJnaW5Ub3AgPSBzdHlsZSgpLT5tYXJnaW5Ub3AoKTsKKyAgICBjb25z
dCBMZW5ndGggbWFyZ2luQm90dG9tID0gc3R5bGUoKS0+bWFyZ2luQm90dG9tKCk7CisgICAgTGVu
Z3RoIHRvcCA9IHN0eWxlKCktPnRvcCgpOworICAgIExlbmd0aCBib3R0b20gPSBzdHlsZSgpLT5i
b3R0b20oKTsKKworICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKKyAgICAgKiBGb3IgdGhlIHB1
cnBvc2VzIG9mIHRoaXMgc2VjdGlvbiBhbmQgdGhlIG5leHQsIHRoZSB0ZXJtICJzdGF0aWMgcG9z
aXRpb24iCisgICAgICogKG9mIGFuIGVsZW1lbnQpIHJlZmVycywgcm91Z2hseSwgdG8gdGhlIHBv
c2l0aW9uIGFuIGVsZW1lbnQgd291bGQgaGF2ZSBoYWQKKyAgICAgKiBpbiB0aGUgbm9ybWFsIGZs
b3cuIE1vcmUgcHJlY2lzZWx5LCB0aGUgc3RhdGljIHBvc2l0aW9uIGZvciAndG9wJyBpcyB0aGUK
KyAgICAgKiBkaXN0YW5jZSBmcm9tIHRoZSB0b3AgZWRnZSBvZiB0aGUgY29udGFpbmluZyBibG9j
ayB0byB0aGUgdG9wIG1hcmdpbiBlZGdlCisgICAgICogb2YgYSBoeXBvdGhldGljYWwgYm94IHRo
YXQgd291bGQgaGF2ZSBiZWVuIHRoZSBmaXJzdCBib3ggb2YgdGhlIGVsZW1lbnQgaWYKKyAgICAg
KiBpdHMgJ3Bvc2l0aW9uJyBwcm9wZXJ0eSBoYWQgYmVlbiAnc3RhdGljJyBhbmQgJ2Zsb2F0JyBo
YWQgYmVlbiAnbm9uZScuIFRoZQorICAgICAqIHZhbHVlIGlzIG5lZ2F0aXZlIGlmIHRoZSBoeXBv
dGhldGljYWwgYm94IGlzIGFib3ZlIHRoZSBjb250YWluaW5nIGJsb2NrLgorICAgICAqCisgICAg
ICogQnV0IHJhdGhlciB0aGFuIGFjdHVhbGx5IGNhbGN1bGF0aW5nIHRoZSBkaW1lbnNpb25zIG9m
IHRoYXQgaHlwb3RoZXRpY2FsCisgICAgICogYm94LCB1c2VyIGFnZW50cyBhcmUgZnJlZSB0byBt
YWtlIGEgZ3Vlc3MgYXQgaXRzIHByb2JhYmxlIHBvc2l0aW9uLgorICAgICAqCisgICAgICogRm9y
IHRoZSBwdXJwb3NlcyBvZiBjYWxjdWxhdGluZyB0aGUgc3RhdGljIHBvc2l0aW9uLCB0aGUgY29u
dGFpbmluZyBibG9jaworICAgICAqIG9mIGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudHMgaXMgdGhl
IGluaXRpYWwgY29udGFpbmluZyBibG9jayBpbnN0ZWFkIG9mCisgICAgICogdGhlIHZpZXdwb3J0
LgorICAgIFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworICAgIC8vIHNlZSBGSVhNRSAyCisgICAg
Ly8gQ2FsY3VsYXRlIHRoZSBzdGF0aWMgZGlzdGFuY2UgaWYgbmVlZGVkLgorICAgIGlmICgodG9w
LmlzQXV0bygpICYmIGJvdHRvbS5pc0F1dG8oKSkgfHwgdG9wLmlzU3RhdGljKCkpIHsKKyAgICAg
ICAgLy8gbV9zdGF0aWNZIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBzZXQgdGhyb3VnaCBsYXlv
dXQgb2YgdGhlIHBhcmVudCgpCisgICAgICAgIGludCBzdGF0aWNUb3AgPSBtX3N0YXRpY1kgLSBj
b250YWluZXJCbG9jay0+Ym9yZGVyVG9wKCk7CisgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBw
byA9IHBhcmVudCgpOyBwbyAmJiBwbyAhPSBjb250YWluZXJCbG9jazsgcG8gPSBwby0+cGFyZW50
KCkpIHsKKyAgICAgICAgICAgIGlmICghcG8tPmlzVGFibGVSb3coKSkKKyAgICAgICAgICAgICAg
ICBzdGF0aWNUb3AgKz0gcG8tPnlQb3MoKTsKKyAgICAgICAgfQorICAgICAgICB0b3Auc2V0VmFs
dWUoRml4ZWQsIHN0YXRpY1RvcCk7CiAgICAgfQogCi0gICAgdyArPSBwYWI7Ci0gICAgeCA9IGwg
KyBtbCArIGNiLT5ib3JkZXJMZWZ0KCk7Ci19CiAKLXZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1
dGVWZXJ0aWNhbCgpCi17Ci0gICAgLy8gY3NzMiBzcGVjIDEwLjYuNCAmIDEwLjYuNQorICAgIGlu
dCBoZWlnaHQ7IC8vIE5lZWRlZCB0byBjb21wdXRlIG92ZXJmbG93LgogCi0gICAgLy8gYmFzZWQg
b24KLSAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9TdHlsZS9jc3MyLXVwZGF0ZXMvUkVDLUNTUzIt
MTk5ODA1MTItZXJyYXRhCi0gICAgLy8gKGFjdHVhbGx5IHVwZGF0ZWQgMjAwMC0xMC0yNCkKLSAg
ICAvLyB0aGF0IGludHJvZHVjZXMgc3RhdGljLXBvc2l0aW9uIHZhbHVlIGZvciB0b3AsIGxlZnQg
JiByaWdodAorICAgIC8vIENhbGN1bGF0ZSBjb25zdHJhaW50IGVxdWF0aW9uIHZhbHVlcyBmb3Ig
J2hlaWdodCcgY2FzZS4KKyAgICBjYWxjQWJzb2x1dGVWZXJ0aWNhbFZhbHVlcyhzdHlsZSgpLT5o
ZWlnaHQoKSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckhlaWdodCwgYm9yZGVyc1BsdXNQYWRk
aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCwgYm90dG9tLCBtYXJnaW5U
b3AsIG1hcmdpbkJvdHRvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQs
IG1fbWFyZ2luVG9wLCBtX21hcmdpbkJvdHRvbSwgbV95KTsKIAotICAgIGNvbnN0IGludCBBVVRP
ID0gLTY2NjY2NjsKLSAgICBpbnQgdCwgYiwgY2g7CisgICAgLy8gQXZvaWQgZG9pbmcgYW55IHdv
cmsgaW4gdGhlIGNvbW1vbiBjYXNlICh3aGVyZSB0aGUgdmFsdWVzIG9mIG1pbi1oZWlnaHQgYW5k
IG1heC1oZWlnaHQgYXJlIHRoZWlyIGRlZmF1bHRzKS4gICAgCisgICAgLy8gc2VlIEZJWE1FIDMK
IAotICAgIHQgPSBiID0gQVVUTzsKKyAgICAvLyBDYWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlv
biB2YWx1ZXMgZm9yICdtYXgtaGVpZ2h0JyBjYXNlLgorICAgIGlmIChzdHlsZSgpLT5tYXhIZWln
aHQoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkgeworICAgICAgICBpbnQgbWF4SGVpZ2h0
OworICAgICAgICBpbnQgbWF4TWFyZ2luVG9wOworICAgICAgICBpbnQgbWF4TWFyZ2luQm90dG9t
OworICAgICAgICBpbnQgbWF4WVBvczsKIAotICAgIGludCBwYWIgPSBib3JkZXJUb3AoKStib3Jk
ZXJCb3R0b20oKStwYWRkaW5nVG9wKCkrcGFkZGluZ0JvdHRvbSgpOworICAgICAgICBjYWxjQWJz
b2x1dGVWZXJ0aWNhbFZhbHVlcyhzdHlsZSgpLT5tYXhIZWlnaHQoKSwgY29udGFpbmVyQmxvY2ss
IGNvbnRhaW5lckhlaWdodCwgYm9yZGVyc1BsdXNQYWRkaW5nLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b3AsIGJvdHRvbSwgbWFyZ2luVG9wLCBtYXJnaW5Cb3R0b20sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodCwgbWF4TWFyZ2luVG9w
LCBtYXhNYXJnaW5Cb3R0b20sIG1heFlQb3MpOwogCi0gICAgLy8gV2UgZG9uJ3QgdXNlIGNvbnRh
aW5pbmdCbG9jaygpLCBzaW5jZSB3ZSBtYXkgYmUgcG9zaXRpb25lZCBieSBhbiBlbmNsb3Npbmcg
cmVscG9zaXRpb25lZCBpbmxpbmUuCi0gICAgUmVuZGVyT2JqZWN0KiBjYiA9IGNvbnRhaW5lcigp
OwotICAgIGlmIChjYi0+aXNSb290KCkpIC8vIEV2ZW4gaW4gc3RyaWN0IG1vZGUgKHdoZXJlIHdl
IGRvbid0IGdyb3cgdGhlIHJvb3QgdG8gZmlsbCB0aGUgdmlld3BvcnQpIG90aGVyIGJyb3dzZXJz
Ci0gICAgICAgICAgICAgICAgICAgICAgLy8gcG9zaXRpb24gYXMgdGhvdWdoIHRoZSByb290IGZp
bGxzIHRoZSB2aWV3cG9ydC4KLSAgICAgICAgY2ggPSBjYi0+YXZhaWxhYmxlSGVpZ2h0KCk7Ci0g
ICAgZWxzZQotICAgICAgICBjaCA9IGNiLT5oZWlnaHQoKSAtIGNiLT5ib3JkZXJUb3AoKSAtIGNi
LT5ib3JkZXJCb3R0b20oKTsKLQotICAgIGlmICghc3R5bGUoKS0+dG9wKCkuaXNBdXRvKCkpCi0g
ICAgICAgIHQgPSBzdHlsZSgpLT50b3AoKS5jYWxjVmFsdWUoY2gpOwotICAgIGlmICghc3R5bGUo
KS0+Ym90dG9tKCkuaXNBdXRvKCkpCi0gICAgICAgIGIgPSBzdHlsZSgpLT5ib3R0b20oKS5jYWxj
VmFsdWUoY2gpOwotCi0gICAgaW50IGgsIG10LCBtYiwgeTsKLSAgICBjYWxjQWJzb2x1dGVWZXJ0
aWNhbFZhbHVlcyhIZWlnaHQsIGNiLCBjaCwgcGFiLCB0LCBiLCBoLCBtdCwgbWIsIHkpOworICAg
ICAgICBpZiAoaGVpZ2h0ID4gbWF4SGVpZ2h0KSB7CisgICAgICAgICAgICBoZWlnaHQgPSBtYXhI
ZWlnaHQ7CisgICAgICAgICAgICBtX21hcmdpblRvcCA9IG1heE1hcmdpblRvcDsKKyAgICAgICAg
ICAgIG1fbWFyZ2luQm90dG9tID0gbWF4TWFyZ2luQm90dG9tOworICAgICAgICAgICAgbV95ID0g
bWF4WVBvczsKKyAgICAgICAgfQorICAgIH0KIAotICAgIC8vIEF2b2lkIGRvaW5nIGFueSB3b3Jr
IGluIHRoZSBjb21tb24gY2FzZSAod2hlcmUgdGhlIHZhbHVlcyBvZiBtaW4taGVpZ2h0IGFuZCBt
YXgtaGVpZ2h0IGFyZSB0aGVpciBkZWZhdWx0cykuCi0gICAgaW50IG1pbkggPSBoLCBtaW5NVCwg
bWluTUIsIG1pblk7Ci0gICAgY2FsY0Fic29sdXRlVmVydGljYWxWYWx1ZXMoTWluSGVpZ2h0LCBj
YiwgY2gsIHBhYiwgdCwgYiwgbWluSCwgbWluTVQsIG1pbk1CLCBtaW5ZKTsKKyAgICAvLyBDYWxj
dWxhdGUgY29uc3RyYWludCBlcXVhdGlvbiB2YWx1ZXMgZm9yICdtaW4taGVpZ2h0JyBjYXNlLgor
ICAgIGlmIChzdHlsZSgpLT5taW5IZWlnaHQoKS52YWx1ZSgpKSB7CisgICAgICAgIGludCBtaW5I
ZWlnaHQ7CisgICAgICAgIGludCBtaW5NYXJnaW5Ub3A7CisgICAgICAgIGludCBtaW5NYXJnaW5C
b3R0b207CisgICAgICAgIGludCBtaW5ZUG9zOwogCi0gICAgaW50IG1heEggPSBoLCBtYXhNVCwg
bWF4TUIsIG1heFk7Ci0gICAgaWYgKHN0eWxlKCktPm1heEhlaWdodCgpLnZhbHVlKCkgIT0gdW5k
ZWZpbmVkTGVuZ3RoKQotICAgICAgICBjYWxjQWJzb2x1dGVWZXJ0aWNhbFZhbHVlcyhNYXhIZWln
aHQsIGNiLCBjaCwgcGFiLCB0LCBiLCBtYXhILCBtYXhNVCwgbWF4TUIsIG1heFkpOworICAgICAg
ICBjYWxjQWJzb2x1dGVWZXJ0aWNhbFZhbHVlcyhzdHlsZSgpLT5taW5IZWlnaHQoKSwgY29udGFp
bmVyQmxvY2ssIGNvbnRhaW5lckhlaWdodCwgYm9yZGVyc1BsdXNQYWRkaW5nLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AsIGJvdHRvbSwgbWFyZ2luVG9wLCBtYXJnaW5C
b3R0b20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodCwgbWlu
TWFyZ2luVG9wLCBtaW5NYXJnaW5Cb3R0b20sIG1pbllQb3MpOwogCi0gICAgaWYgKGggPiBtYXhI
KSB7Ci0gICAgICAgIGggPSBtYXhIOwotICAgICAgICBtdCA9IG1heE1UOwotICAgICAgICBtYiA9
IG1heE1COwotICAgICAgICB5ID0gbWF4WTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGggPCBtaW5I
KSB7Ci0gICAgICAgIGggPSBtaW5IOwotICAgICAgICBtdCA9IG1pbk1UOwotICAgICAgICBtYiA9
IG1pbk1COwotICAgICAgICB5ID0gbWluWTsKKyAgICAgICAgaWYgKGhlaWdodCA8IG1pbkhlaWdo
dCkgeworICAgICAgICAgICAgaGVpZ2h0ID0gbWluSGVpZ2h0OworICAgICAgICAgICAgbV9tYXJn
aW5Ub3AgPSBtaW5NYXJnaW5Ub3A7CisgICAgICAgICAgICBtX21hcmdpbkJvdHRvbSA9IG1pbk1h
cmdpbkJvdHRvbTsKKyAgICAgICAgICAgIG1feSA9IG1pbllQb3M7CisgICAgICAgIH0KICAgICB9
Ci0gICAgCi0gICAgLy8gSWYgb3VyIG5hdHVyYWwgaGVpZ2h0IGV4Y2VlZHMgdGhlIG5ldyBoZWln
aHQgb25jZSB3ZSd2ZSBzZXQgaXQsIHRoZW4gd2UgbmVlZCB0byBtYWtlIHN1cmUgdG8gdXBkYXRl
Ci0gICAgLy8gb3ZlcmZsb3cgdG8gdHJhY2sgdGhlIHNwaWxsb3V0LgotICAgIGlmIChtX2hlaWdo
dCA+IGgpCisKKyAgICAvLyBJZiBvdXIgbmF0dXJhbCBoZWlnaHQgZXhjZWVkcyB0aGUgbmV3IGhl
aWdodCBvbmNlIHdlJ3ZlIHNldCBpdCwgdGhlbiB3ZQorICAgIC8vIG5lZWQgdG8gbWFrZSBzdXJl
IHRvIHVwZGF0ZSBvdmVyZmxvdyB0byB0cmFjayB0aGUgc3BpbGxvdXQuCisgICAgaWYgKG1faGVp
Z2h0ID4gaGVpZ2h0KQogICAgICAgICBzZXRPdmVyZmxvd0hlaWdodChtX2hlaWdodCk7Ci0gICAg
ICAgIAotICAgIC8vIFNldCBvdXIgZmluYWwgdmFsdWVzLgotICAgIG1faGVpZ2h0ID0gaDsKLSAg
ICBtX21hcmdpblRvcCA9IG10OwotICAgIG1fbWFyZ2luQm90dG9tID0gbWI7Ci0gICAgbV95ID0g
eTsKLX0KIAotdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZVZlcnRpY2FsVmFsdWVzKEhlaWdo
dFR5cGUgaGVpZ2h0VHlwZSwgUmVuZGVyT2JqZWN0KiBjYiwgaW50IGNoLCBpbnQgcGFiLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdCwgaW50IGIsIGlu
dCYgaCwgaW50JiBtdCwgaW50JiBtYiwgaW50JiB5KQotewotICAgIGNvbnN0IGludCBBVVRPID0g
LTY2NjY2NjsKLSAgICBoID0gbXQgPSBtYiA9IEFVVE87CisgICAgLy8gU2V0IGZpbmFsIGhlaWdo
dCB2YWx1ZS4KKyAgICBtX2hlaWdodCA9IGhlaWdodDsKK30KIAotICAgIGlmICghc3R5bGUoKS0+
bWFyZ2luVG9wKCkuaXNBdXRvKCkpCi0gICAgICAgIG10ID0gc3R5bGUoKS0+bWFyZ2luVG9wKCku
Y2FsY1ZhbHVlKGNoKTsKLSAgICBpZiAoIXN0eWxlKCktPm1hcmdpbkJvdHRvbSgpLmlzQXV0bygp
KQotICAgICAgICBtYiA9IHN0eWxlKCktPm1hcmdpbkJvdHRvbSgpLmNhbGNWYWx1ZShjaCk7Cit2
b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlVmVydGljYWxWYWx1ZXMoTGVuZ3RoIGhlaWdodCwg
Y29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXJCbG9jaywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgY29udGFpbmVySGVpZ2h0LCBjb25zdCBp
bnQgYm9yZGVyc1BsdXNQYWRkaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IExlbmd0aCB0b3AsIGNvbnN0IExlbmd0aCBib3R0b20sIGNvbnN0IExl
bmd0aCBtYXJnaW5Ub3AsIGNvbnN0IExlbmd0aCBtYXJnaW5Cb3R0b20sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBoZWlnaHRWYWx1ZSwgaW50JiBtYXJn
aW5Ub3BWYWx1ZSwgaW50JiBtYXJnaW5Cb3R0b21WYWx1ZSwgaW50JiB5UG9zKQoreworICAgIC8v
ICd0b3AnIGFuZCAnYm90dG9tJyBjYW5ub3QgYm90aCBiZSAnYXV0bycgYmVjYXVzZSAndG9wIHdv
dWxkIG9mIGJlZW4KKyAgICAvLyBjb252ZXJ0ZWQgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbiBpbiBj
YWxjQWJzb2x1dGVWZXJ0aWNhbCgpCisgICAgQVNTRVJUKCEodG9wLmlzQXV0bygpICYmIGJvdHRv
bS5pc0F1dG8oKSkpOworCisgICAgaW50IGNvbnRlbnRIZWlnaHQgPSBtX2hlaWdodCAtIGJvcmRl
cnNQbHVzUGFkZGluZzsgICAgCisKKyAgICBpbnQgdG9wVmFsdWU7CisKKyAgICBib29sIGhlaWdo
dElzQXV0byA9IGhlaWdodC5pc0F1dG8oKTsKKyAgICBib29sIHRvcElzQXV0byA9IHRvcC5pc0F1
dG8oKTsKKyAgICBib29sIGJvdHRvbUlzQXV0byA9IGJvdHRvbS5pc0F1dG8oKTsKKworICAgIC8v
IEhlaWdodCBpcyBuZXZlciB1bnNvbHZlZCBmb3IgdGFibGVzLgorICAgIGlmIChpc1RhYmxlKCkg
JiYgaGVpZ2h0SXNBdXRvKSB7CisgICAgICAgIGhlaWdodC5zZXRWYWx1ZShGaXhlZCwgY29udGVu
dEhlaWdodCk7CisgICAgICAgIGhlaWdodElzQXV0byA9IGZhbHNlOworICAgIH0gZWxzZSBpZiAo
IWhlaWdodElzQXV0bykKKyAgICAgICAgY29udGVudEhlaWdodCA9IG1pbihjb250ZW50SGVpZ2h0
LCBjYWxjQ29udGVudEJveEhlaWdodChoZWlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCkp
KTsKKworICAgIGlmICghdG9wSXNBdXRvICYmICFoZWlnaHRJc0F1dG8gJiYgIWJvdHRvbUlzQXV0
bykgeworICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKKyAgICAgICAgICogSWYgbm9uZSBvZiB0
aGUgdGhyZWUgYXJlICdhdXRvJzogSWYgYm90aCAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tCisg
ICAgICAgICAqIGJvdHRvbScgYXJlICdhdXRvJywgc29sdmUgdGhlIGVxdWF0aW9uIHVuZGVyIHRo
ZSBleHRyYSBjb25zdHJhaW50IHRoYXQKKyAgICAgICAgICogdGhlIHR3byBtYXJnaW5zIGdldCBl
cXVhbCB2YWx1ZXMuIElmIG9uZSBvZiAnbWFyZ2luLXRvcCcgb3IgJ21hcmdpbi0KKyAgICAgICAg
ICogYm90dG9tJyBpcyAnYXV0bycsIHNvbHZlIHRoZSBlcXVhdGlvbiBmb3IgdGhhdCB2YWx1ZS4g
SWYgdGhlIHZhbHVlcworICAgICAgICAgKiBhcmUgb3Zlci1jb25zdHJhaW5lZCwgaWdub3JlIHRo
ZSB2YWx1ZSBmb3IgJ2JvdHRvbScgYW5kIHNvbHZlIGZvciB0aGF0CisgICAgICAgICAqIHZhbHVl
LgorICAgICAgICBcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgICAgLy8gTk9URTogIEl0IGlzIG5v
dCBuZWNlc3NhcnkgdG8gc29sdmUgZm9yICdib3R0b20nIGluIHRoZSBvdmVyIGNvbnN0cmFpbmVk
CisgICAgICAgIC8vIGNhc2UgYmVjYXVzZSB0aGUgdmFsdWUgaXMgbm90IHVzZWQgZm9yIGFueSBm
dXJ0aGVyIGNhbGN1bGF0aW9ucy4KKworICAgICAgICBoZWlnaHRWYWx1ZSA9IGNhbGNDb250ZW50
Qm94SGVpZ2h0KGhlaWdodC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KSk7CisgICAgICAgIHRv
cFZhbHVlID0gdG9wLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpOworCisgICAgICAgIGNvbnN0
IGludCBhdmFpbGFibGVTcGFjZSA9IGNvbnRhaW5lckhlaWdodCAtICh0b3BWYWx1ZSArIGhlaWdo
dFZhbHVlICsgYm90dG9tLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpICsgYm9yZGVyc1BsdXNQ
YWRkaW5nKTsKKworICAgICAgICAvLyBNYXJnaW5zIGFyZSBub3cgdGhlIG9ubHkgdW5rbm93bgor
ICAgICAgICBpZiAobWFyZ2luVG9wLmlzQXV0bygpICYmIG1hcmdpbkJvdHRvbS5pc0F1dG8oKSkg
eworICAgICAgICAgICAgLy8gQm90aCBtYXJnaW5zIGF1dG8sIHNvbHZlIGZvciBlcXVhbGl0eQor
ICAgICAgICAgICAgLy8gTk9URTogVGhpcyBtYXkgcmVzdWx0IGluIG5lZ2F0aXZlIHZhbHVlcy4K
KyAgICAgICAgICAgIG1hcmdpblRvcFZhbHVlID0gYXZhaWxhYmxlU3BhY2UgLyAyOworICAgICAg
ICAgICAgbWFyZ2luQm90dG9tVmFsdWUgPSBtYXJnaW5Ub3BWYWx1ZTsKKyAgICAgICAgfSBlbHNl
IGlmIChtYXJnaW5Ub3AuaXNBdXRvKCkpIHsKKyAgICAgICAgICAgIC8vIFNvbHZlIGZvciB0b3Ag
bWFyZ2luCisgICAgICAgICAgICBtYXJnaW5Cb3R0b21WYWx1ZSA9IG1hcmdpbkJvdHRvbS5jYWxj
VmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKyAgICAgICAgICAgIG1hcmdpblRvcFZhbHVlID0gYXZh
aWxhYmxlU3BhY2UgLSBtYXJnaW5Cb3R0b21WYWx1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChtYXJn
aW5Cb3R0b20uaXNBdXRvKCkpIHsKKyAgICAgICAgICAgIC8vIFNvbHZlIGZvciBib3R0b20gbWFy
Z2luCisgICAgICAgICAgICBtYXJnaW5Ub3BWYWx1ZSA9IG1hcmdpblRvcC5jYWxjVmFsdWUoY29u
dGFpbmVySGVpZ2h0KTsKKyAgICAgICAgICAgIG1hcmdpbkJvdHRvbVZhbHVlID0gYXZhaWxhYmxl
U3BhY2UgLSBtYXJnaW5Ub3BWYWx1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IE92ZXItY29uc3RyYWluZWQsIChubyBuZWVkIHNvbHZlIGZvciBib3R0b20pCisgICAgICAgICAg
ICBtYXJnaW5Ub3BWYWx1ZSA9IG1hcmdpblRvcC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KTsK
KyAgICAgICAgICAgIG1hcmdpbkJvdHRvbVZhbHVlID0gbWFyZ2luQm90dG9tLmNhbGNWYWx1ZShj
b250YWluZXJIZWlnaHQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSpcCisgICAgICAgICAqIE90aGVyd2lzZSwgc2V0ICdhdXRvJyB2YWx1ZXMgZm9yICdt
YXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nCisgICAgICAgICAqIHRvIDAsIGFuZCBwaWNr
IHRoZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzaXggcnVsZXMgdGhhdCBhcHBsaWVzLgorICAgICAg
ICAgKgorICAgICAgICAgKiAxLiAndG9wJyBhbmQgJ2hlaWdodCcgYXJlICdhdXRvJyBhbmQgJ2Jv
dHRvbScgaXMgbm90ICdhdXRvJywgdGhlbiAKKyAgICAgICAgICogICAgdGhlIGhlaWdodCBpcyBi
YXNlZCBvbiB0aGUgY29udGVudCwgYW5kIHNvbHZlIGZvciAndG9wJy4KKyAgICAgICAgICoKKyAg
ICAgICAgICogICAgICAgICAgICAgIE9NSVQgUlVMRSAyIEFTIElUIFNIT1VMRCBORVZFUiBCRSBI
SVQKKyAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAqIDIuICd0b3AnIGFuZCAnYm90dG9t
JyBhcmUgJ2F1dG8nIGFuZCAnaGVpZ2h0JyBpcyBub3QgJ2F1dG8nLCB0aGVuCisgICAgICAgICAq
ICAgIHNldCAndG9wJyB0byB0aGUgc3RhdGljIHBvc2l0aW9uLCBhbmQgc29sdmUgZm9yICdib3R0
b20nLgorICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICoKKyAgICAgICAgICogMy4gJ2hl
aWdodCcgYW5kICdib3R0b20nIGFyZSAnYXV0bycgYW5kICd0b3AnIGlzIG5vdCAnYXV0bycsIHRo
ZW4KKyAgICAgICAgICogICAgdGhlIGhlaWdodCBpcyBiYXNlZCBvbiB0aGUgY29udGVudCwgYW5k
IHNvbHZlIGZvciAnYm90dG9tJy4KKyAgICAgICAgICogNC4gJ3RvcCcgaXMgJ2F1dG8nLCAnaGVp
Z2h0JyBhbmQgJ2JvdHRvbScgYXJlIG5vdCAnYXV0bycsIGFuZAorICAgICAgICAgKiAgICBzb2x2
ZSBmb3IgJ3RvcCcuCisgICAgICAgICAqIDUuICdoZWlnaHQnIGlzICdhdXRvJywgJ3RvcCcgYW5k
ICdib3R0b20nIGFyZSBub3QgJ2F1dG8nLCBhbmQKKyAgICAgICAgICogICAgc29sdmUgZm9yICdo
ZWlnaHQnLgorICAgICAgICAgKiA2LiAnYm90dG9tJyBpcyAnYXV0bycsICd0b3AnIGFuZCAnaGVp
Z2h0JyBhcmUgbm90ICdhdXRvJywgYW5kCisgICAgICAgICAqICAgIHNvbHZlIGZvciAnYm90dG9t
Jy4KKyAgICAgICAgXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICAgIC8vIE5PVEU6IEZvciBydWxlcyAz
IGFuZCA2IGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gc29sdmUgZm9yICdib3R0b20nCisgICAgICAg
IC8vIGJlY2F1c2UgdGhlIHZhbHVlIGlzIG5vdCB1c2VkIGZvciBhbnkgZnVydGhlciBjYWxjdWxh
dGlvbnMuCisKKyAgICAgICAgLy8gQ2FsY3VsYXRlIG1hcmdpbnMsICdhdXRvJyBtYXJnaW5zIGFy
ZSBpZ25vcmVkLgorICAgICAgICBtYXJnaW5Ub3BWYWx1ZSA9IG1hcmdpblRvcC5jYWxjTWluVmFs
dWUoY29udGFpbmVySGVpZ2h0KTsKKyAgICAgICAgbWFyZ2luQm90dG9tVmFsdWUgPSBtYXJnaW5C
b3R0b20uY2FsY01pblZhbHVlKGNvbnRhaW5lckhlaWdodCk7CisKKyAgICAgICAgY29uc3QgaW50
IGF2YWlsYWJsZVNwYWNlID0gY29udGFpbmVySGVpZ2h0IC0gKG1hcmdpblRvcFZhbHVlICsgbWFy
Z2luQm90dG9tVmFsdWUgKyBib3JkZXJzUGx1c1BhZGRpbmcpOworCisgICAgICAgIC8vIFVzZSBy
dWxlL2Nhc2UgdGhhdCBhcHBsaWVzLgorICAgICAgICBpZiAodG9wSXNBdXRvICYmIGhlaWdodElz
QXV0byAmJiAhYm90dG9tSXNBdXRvKSB7CisgICAgICAgICAgICAvLyBSVUxFIDE6IChoZWlnaHQg
aXMgY29udGVudCBiYXNlZCwgc29sdmUgb2YgdG9wKQorICAgICAgICAgICAgaGVpZ2h0VmFsdWUg
PSBjb250ZW50SGVpZ2h0OworICAgICAgICAgICAgdG9wVmFsdWUgPSBhdmFpbGFibGVTcGFjZSAt
IChoZWlnaHRWYWx1ZSArIGJvdHRvbS5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KSk7CisgICAg
ICAgIH0gZWxzZSBpZiAoIXRvcElzQXV0byAmJiBoZWlnaHRJc0F1dG8gJiYgYm90dG9tSXNBdXRv
KSB7CisgICAgICAgICAgICAvLyBSVUxFIDM6IChoZWlnaHQgaXMgY29udGVudCBiYXNlZCwgbm8g
bmVlZCBzb2x2ZSBvZiBib3R0b20pCisgICAgICAgICAgICB0b3BWYWx1ZSA9IHRvcC5jYWxjVmFs
dWUoY29udGFpbmVySGVpZ2h0KTsKKyAgICAgICAgICAgIGhlaWdodFZhbHVlID0gY29udGVudEhl
aWdodDsKKyAgICAgICAgfSBlbHNlIGlmICh0b3BJc0F1dG8gJiYgIWhlaWdodElzQXV0byAmJiAh
Ym90dG9tSXNBdXRvKSB7CisgICAgICAgICAgICAvLyBSVUxFIDQ6IChzb2x2ZSBvZiB0b3ApCisg
ICAgICAgICAgICBoZWlnaHRWYWx1ZSA9IGNhbGNDb250ZW50Qm94SGVpZ2h0KGhlaWdodC5jYWxj
VmFsdWUoY29udGFpbmVySGVpZ2h0KSk7CisgICAgICAgICAgICB0b3BWYWx1ZSA9IGF2YWlsYWJs
ZVNwYWNlIC0gKGhlaWdodFZhbHVlICsgYm90dG9tLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQp
KTsKKyAgICAgICAgfSBlbHNlIGlmICghdG9wSXNBdXRvICYmIGhlaWdodElzQXV0byAmJiAhYm90
dG9tSXNBdXRvKSB7CisgICAgICAgICAgICAvLyBSVUxFIDU6IChzb2x2ZSBvZiBoZWlnaHQpCisg
ICAgICAgICAgICB0b3BWYWx1ZSA9IHRvcC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKyAg
ICAgICAgICAgIGhlaWdodFZhbHVlID0gYXZhaWxhYmxlU3BhY2UgLSAodG9wVmFsdWUgKyBib3R0
b20uY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCkpOworICAgICAgICB9IGVsc2UgaWYgKCF0b3BJ
c0F1dG8gJiYgIWhlaWdodElzQXV0byAmJiBib3R0b21Jc0F1dG8pIHsKKyAgICAgICAgICAgIC8v
IFJVTEUgNjogKG5vIG5lZWQgc29sdmUgb2YgYm90dG9tKQorICAgICAgICAgICAgaGVpZ2h0VmFs
dWUgPSBjYWxjQ29udGVudEJveEhlaWdodChoZWlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdo
dCkpOworICAgICAgICAgICAgdG9wVmFsdWUgPSB0b3AuY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdo
dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBNYWtlIGZpbmFsIGFkanVzdG1lbnRzIHRv
IGhlaWdodC4KKyAgICBpZiAoIShjb250ZW50SGVpZ2h0IDwgaGVpZ2h0VmFsdWUpICYmICEoaGFz
T3ZlcmZsb3dDbGlwKCkgJiYgY29udGVudEhlaWdodCA+IGhlaWdodFZhbHVlKSkKKyAgICAgICAg
aGVpZ2h0VmFsdWUgPSBjb250ZW50SGVpZ2h0OworCisgICAgLy8gRG8gbm90IGFsbG93IHRoZSBo
ZWlnaHQgdG8gYmUgbmVnYXRpdmUuICBUaGlzIGNhbiBoYXBwZW4gd2hlbiBzb21lb25lCisgICAg
Ly8gc3BlY2lmaWVzIGJvdGggdG9wIGFuZCBib3R0b20gYnV0IHRoZSBjb250YWluaW5nIGJsb2Nr
IGhlaWdodCBpcyBsZXNzCisgICAgLy8gdGhhbiB0b3AsIGUuZy4sIHRvcDogMjBweCwgYm90dG9t
OiAwLCBjb250YWluaW5nIGJsb2NrIGhlaWdodCAxNi4KKyAgICBoZWlnaHRWYWx1ZSA9IG1heCgw
LCBoZWlnaHRWYWx1ZSArIGJvcmRlcnNQbHVzUGFkZGluZyk7CisKKyAgICAvLyBVc2UgY29tcHV0
ZWQgdmFsdWVzIHRvIGNhbGN1bGF0ZSB0aGUgdmVydGljYWwgcG9zaXRpb24uCisgICAgeVBvcyA9
IHRvcFZhbHVlICsgbWFyZ2luVG9wVmFsdWUgKyBjb250YWluZXJCbG9jay0+Ym9yZGVyVG9wKCk7
Cit9CisKK3ZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsUmVwbGFjZWQoKQor
eyAgIAorICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgYmFzZWQgb2ZmIG9mIHRoZSBXM0MgV29ya2lu
ZyBEcmFmdCBmcm9tIEp1bmUgMTMsIDIwMDUgb2YKKyAgICAvLyBDU1MgMi4xOiBTZWN0aW9uIDEw
LjMuOCAiQWJzb2x1dGx5IHBvc2l0aW9uZWQsIHJlcGxhY2VkIGVsZW1lbnRzIgorICAgIC8vIDxo
dHRwOi8vd3d3LnczLm9yZy9UUi8yMDA1L1dELUNTUzIxLTIwMDUwNjEzL3Zpc3VkZXQuaHRtbCNh
YnMtcmVwbGFjZWQtd2lkdGg+CisgICAgLy8gKGJsb2NrLXN0eWxlLWNvbW1lbnRzIGluIHRoaXMg
ZnVuY3Rpb24gY29ycmVzcG9uZCB0byB0ZXh0IGZyb20gdGhlIHNwZWMgYW5kCisgICAgLy8gdGhl
IG51bWJlcnMgY29ycmVzcG9uZCB0byBudW1iZXJzIGluIHNwZWMpCiAKLSAgICBMZW5ndGggaGVp
Z2h0OwotICAgIGlmIChoZWlnaHRUeXBlID09IEhlaWdodCkKLSAgICAgICAgaGVpZ2h0ID0gc3R5
bGUoKS0+aGVpZ2h0KCk7Ci0gICAgZWxzZSBpZiAoaGVpZ2h0VHlwZSA9PSBNaW5IZWlnaHQpCi0g
ICAgICAgIGhlaWdodCA9IHN0eWxlKCktPm1pbkhlaWdodCgpOwotICAgIGVsc2UKLSAgICAgICAg
aGVpZ2h0ID0gc3R5bGUoKS0+bWF4SGVpZ2h0KCk7CisgICAgLy8gV2UgZG9uJ3QgdXNlIGNvbnRh
aW5pbmdCbG9jaygpLCBzaW5jZSB3ZSBtYXkgYmUgcG9zaXRpb25lZCBieSBhbiBlbmNsb3Npbmcg
cmVscG9zaXRpb25lZCBpbmxpbmUuCisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXJC
bG9jayA9IGNvbnRhaW5lcigpOworICAgIGNvbnN0IGludCBjb250YWluZXJXaWR0aCA9IGNvbnRh
aW5pbmdCbG9ja1dpZHRoKCkgKyBjb250YWluZXJCbG9jay0+cGFkZGluZ0xlZnQoKSArIGNvbnRh
aW5lckJsb2NrLT5wYWRkaW5nUmlnaHQoKTsKIAotICAgIGludCBvdXJIZWlnaHQgPSBtX2hlaWdo
dDsKKyAgICAvLyBWYXJpYWJsZXMgdG8gc29sdmUuCisgICAgTGVuZ3RoIGxlZnQgPSBzdHlsZSgp
LT5sZWZ0KCk7CisgICAgTGVuZ3RoIHJpZ2h0ID0gc3R5bGUoKS0+cmlnaHQoKTsKKyAgICBMZW5n
dGggbWFyZ2luTGVmdCA9IHN0eWxlKCktPm1hcmdpbkxlZnQoKTsKKyAgICBMZW5ndGggbWFyZ2lu
UmlnaHQgPSBzdHlsZSgpLT5tYXJnaW5SaWdodCgpOworCisKKyAgICAvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KlwKKyAgICAgKiAxLiBUaGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnIGlzIGRldGVybWluZWQgYXMg
Zm9yIGlubGluZSByZXBsYWNlZAorICAgICAqICAgIGVsZW1lbnRzLgorICAgIFwqLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLworICAgIC8vIE5PVEU6IFRoaXMgdmFsdWUgb2Ygd2lkdGggaXMgRklOQUwgaW4gdGhh
dCB0aGUgbWluL21heCB3aWR0aCBjYWxjdWxhdGlvbnMKKyAgICAvLyBhcmUgZGVhbHQgd2l0aCBp
biBjYWxjUmVwbGFjZWRXaWR0aCgpLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBzdGVwcyB0byBwcm9k
dWNlCisgICAgLy8gY29ycmVjdCBtYXgvbWluIGluIHRoZSBub24tcmVwbGFjZWQgdmVyc2lvbiwg
YXJlIG5vdCBuZWNlc3NhcnkuCisgICAgbV93aWR0aCA9IGNhbGNSZXBsYWNlZFdpZHRoKCkgKyBi
b3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpICsgcGFkZGluZ0xlZnQoKSArIHBhZGRpbmdSaWdo
dCgpOworICAgIGNvbnN0IGludCBhdmFpbGFibGVTcGFjZSA9IGNvbnRhaW5lcldpZHRoIC0gbV93
aWR0aDsKKworICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorICAgICAqIDIuIElmIGJvdGggJ2xlZnQn
IGFuZCAncmlnaHQnIGhhdmUgdGhlIHZhbHVlICdhdXRvJywgdGhlbiBpZiAnZGlyZWN0aW9uJwor
ICAgICAqICAgIG9mIHRoZSBjb250YWluaW5nIGJsb2NrIGlzICdsdHInLCBzZXQgJ2xlZnQnIHRv
IHRoZSBzdGF0aWMgcG9zaXRpb247CisgICAgICogICAgZWxzZSBpZiAnZGlyZWN0aW9uJyBpcyAn
cnRsJywgc2V0ICdyaWdodCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbi4KKyAgICBcKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KKyAgICAvLyBzZWUgRklYTUUgMSBhbmQgRklYTUUgMgorICAgIGlmICgobGVmdC5p
c0F1dG8oKSAmJiByaWdodC5pc0F1dG8oKSAmJiAocGFyZW50KCktPnN0eWxlKCktPmRpcmVjdGlv
bigpID09IExUUikpIHx8IGxlZnQuaXNTdGF0aWMoKSkgeworICAgICAgICAvLyAnbV9zdGF0aWNY
JyBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gc2V0IHRocm91Z2ggbGF5b3V0IG9mIHRoZSBwYXJl
bnQuCisgICAgICAgIGludCBzdGF0aWNQb3NpdGlvbiA9IG1fc3RhdGljWCAtIGNvbnRhaW5lckJs
b2NrLT5ib3JkZXJMZWZ0KCk7CisgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBwbyA9IHBhcmVu
dCgpOyBwbyAmJiBwbyAhPSBjb250YWluZXJCbG9jazsgcG8gPSBwby0+cGFyZW50KCkpCisgICAg
ICAgICAgICBzdGF0aWNQb3NpdGlvbiArPSBwby0+eFBvcygpOwogCi0gICAgaWYgKGlzVGFibGUo
KSAmJiBoZWlnaHQuaXNBdXRvKCkpCi0gICAgICAgIC8vIEhlaWdodCBpcyBuZXZlciB1bnNvbHZl
ZCBmb3IgdGFibGVzLiAiYXV0byIgbWVhbnMgc2hyaW5rIHRvIGZpdC4gIFVzZSBvdXIKLSAgICAg
ICAgLy8gaGVpZ2h0IGluc3RlYWQuCi0gICAgICAgIGggPSBvdXJIZWlnaHQgLSBwYWI7Ci0gICAg
ZWxzZSBpZiAoIWhlaWdodC5pc0F1dG8oKSkKLSAgICB7Ci0gICAgICAgIGggPSBjYWxjQ29udGVu
dEJveEhlaWdodChoZWlnaHQuY2FsY1ZhbHVlKGNoKSk7Ci0gICAgICAgIGlmIChvdXJIZWlnaHQg
LSBwYWIgPiBoKQotICAgICAgICAgICAgb3VySGVpZ2h0ID0gaCArIHBhYjsKLSAgICB9Ci0gICAg
ZWxzZSBpZiAoaXNSZXBsYWNlZCgpKQotICAgICAgICBoID0gY2FsY1JlcGxhY2VkSGVpZ2h0KCk7
Ci0KLSAgICBpbnQgc3RhdGljX3RvcD0wOwotICAgIGlmICgodCA9PSBBVVRPICYmIGIgPT0gQVVU
TykgfHwgc3R5bGUoKS0+dG9wKCkuaXNTdGF0aWMoKSkgewotICAgICAgICAvLyBjYWxjIGh5cG90
aGV0aWNhbCBsb2NhdGlvbiBpbiB0aGUgbm9ybWFsIGZsb3cKLSAgICAgICAgLy8gdXNlZCBmb3Ig
MSkgdG9wPXN0YXRpYy1wb3NpdGlvbgotICAgICAgICAvLyAgICAgICAgICAyKSB0b3AsIGJvdHRv
bSwgaGVpZ2h0IGFyZSBhbGwgYXV0byAtPiBjYWxjIHRvcCAtPiAzLgotICAgICAgICAvLyAgICAg
ICAgICAzKSBwcmVjYWxjIGZvciBjYXNlIDIgYmVsb3cKLSAgICAgICAgc3RhdGljX3RvcCA9IG1f
c3RhdGljWSAtIGNiLT5ib3JkZXJUb3AoKTsgLy8gU2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIHNl
dCB0aHJvdWdoIGxheW91dCBvZiB0aGUgcGFyZW50KCkuCisgICAgICAgIGxlZnQuc2V0VmFsdWUo
Rml4ZWQsIHN0YXRpY1Bvc2l0aW9uKTsKKyAgICB9IGVsc2UgaWYgKChsZWZ0LmlzQXV0bygpICYm
IHJpZ2h0LmlzQXV0bygpICYmIChwYXJlbnQoKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRM
KSkgfHwgcmlnaHQuaXNTdGF0aWMoKSkgewogICAgICAgICBSZW5kZXJPYmplY3QqIHBvID0gcGFy
ZW50KCk7Ci0gICAgICAgIGZvciAoOyBwbyAmJiBwbyAhPSBjYjsgcG8gPSBwby0+cGFyZW50KCkp
Ci0gICAgICAgICAgICBpZiAoIXBvLT5pc1RhYmxlUm93KCkpCi0gICAgICAgICAgICAgICAgc3Rh
dGljX3RvcCArPSBwby0+eVBvcygpOworICAgICAgICAvLyAnbV9zdGF0aWNYJyBzaG91bGQgYWxy
ZWFkeSBoYXZlIGJlZW4gc2V0IHRocm91Z2ggbGF5b3V0IG9mIHRoZSBwYXJlbnQuCisgICAgICAg
IGludCBzdGF0aWNQb3NpdGlvbiA9IG1fc3RhdGljWCArIGNvbnRhaW5lcldpZHRoICsgY29udGFp
bmVyQmxvY2stPmJvcmRlclJpZ2h0KCkgLSBwby0+d2lkdGgoKTsKKyAgICAgICAgZm9yICg7IHBv
ICYmIHBvICE9IGNvbnRhaW5lckJsb2NrOyBwbyA9IHBvLT5wYXJlbnQoKSkKKyAgICAgICAgICAg
IHN0YXRpY1Bvc2l0aW9uIC09IHBvLT54UG9zKCk7CisKKyAgICAgICAgcmlnaHQuc2V0VmFsdWUo
Rml4ZWQsIHN0YXRpY1Bvc2l0aW9uKTsKKyAgICB9CisKKy8vICAgIGlmIChsZWZ0LmlzQXV0bygp
ICYmIHJpZ2h0LmlzQXV0bygpKSB7CisvLyAgICAgICAgLy8gc2VlIEZJWE1FIDEKKy8vICAgICAg
ICBpZiAocGFyZW50KCktPnN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgeworLy8gICAgICAg
ICAgICAvLyAnbV9zdGF0aWNYJyBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gc2V0IHRocm91Z2gg
bGF5b3V0IG9mIHRoZSBwYXJlbnQuCisvLyAgICAgICAgICAgIGludCBzdGF0aWNQb3NpdGlvbiA9
IG1fc3RhdGljWCAtIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJMZWZ0KCk7CisvLyAgICAgICAgICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBwbyA9IHBhcmVudCgpOyBwbyAmJiBwbyAhPSBjb250YWluZXJC
bG9jazsgcG8gPSBwby0+cGFyZW50KCkpCisvLyAgICAgICAgICAgICAgICBzdGF0aWNQb3NpdGlv
biArPSBwby0+eFBvcygpOworLy8gICAgICAgICAgICBsZWZ0LnNldFZhbHVlKEZpeGVkLCBzdGF0
aWNQb3NpdGlvbik7CisvLyAgICAgICAgfSBlbHNlIHsKKy8vICAgICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBwbyA9IHBhcmVudCgpOworLy8gICAgICAgICAgICAvLyAnbV9zdGF0aWNYJyBzaG91bGQg
YWxyZWFkeSBoYXZlIGJlZW4gc2V0IHRocm91Z2ggbGF5b3V0IG9mIHRoZSBwYXJlbnQuCisvLyAg
ICAgICAgICAgIGludCBzdGF0aWNQb3NpdGlvbiA9IG1fc3RhdGljWCArIGNvbnRhaW5lcldpZHRo
ICsgY29udGFpbmVyQmxvY2stPmJvcmRlclJpZ2h0KCkgLSBwby0+d2lkdGgoKTsKKy8vICAgICAg
ICAgICAgZm9yICg7IHBvICYmIHBvICE9IGNvbnRhaW5lckJsb2NrOyBwbyA9IHBvLT5wYXJlbnQo
KSkKKy8vICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uIC09IHBvLT54UG9zKCk7CisvLyAg
ICAgICAgICAgIHJpZ2h0LnNldFZhbHVlKEZpeGVkLCBzdGF0aWNQb3NpdGlvbik7CisvLyAgICAg
ICAgfQorLy8gICAgfQorCisgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCisgICAgICogMy4gSWYgJ2xl
ZnQnIG9yICdyaWdodCcgYXJlICdhdXRvJywgcmVwbGFjZSBhbnkgJ2F1dG8nIG9uICdtYXJnaW4t
bGVmdCcKKyAgICAgKiAgICBvciAnbWFyZ2luLXJpZ2h0JyB3aXRoICcwJy4KKyAgICBcKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KKyAgICBpZiAobGVmdC5pc0F1dG8oKSB8fCByaWdodC5pc0F1dG8oKSkgewor
ICAgICAgICBpZiAobWFyZ2luTGVmdC5pc0F1dG8oKSkKKyAgICAgICAgICAgIG1hcmdpbkxlZnQu
c2V0VmFsdWUoRml4ZWQsIDApOworICAgICAgICBpZiAobWFyZ2luUmlnaHQuaXNBdXRvKCkpCisg
ICAgICAgICAgICBtYXJnaW5SaWdodC5zZXRWYWx1ZShGaXhlZCwgMCk7CisgICAgfQorCisgICAg
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSpcCisgICAgICogNC4gSWYgYXQgdGhpcyBwb2ludCBib3RoICdtYXJn
aW4tbGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIGFyZSBzdGlsbAorICAgICAqICAgICdhdXRvJywg
c29sdmUgdGhlIGVxdWF0aW9uIHVuZGVyIHRoZSBleHRyYSBjb25zdHJhaW50IHRoYXQgdGhlIHR3
bworICAgICAqICAgIG1hcmdpbnMgbXVzdCBnZXQgZXF1YWwgdmFsdWVzLCB1bmxlc3MgdGhpcyB3
b3VsZCBtYWtlIHRoZW0gbmVnYXRpdmUsCisgICAgICogICAgaW4gd2hpY2ggY2FzZSB3aGVuIHRo
ZSBkaXJlY3Rpb24gb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicKKyAgICAgKiAgICAo
J3J0bCcpLCBzZXQgJ21hcmdpbi1sZWZ0JyAoJ21hcmdpbi1yaWdodCcpIHRvIHplcm8gYW5kIHNv
bHZlIGZvcgorICAgICAqICAgICdtYXJnaW4tcmlnaHQnICgnbWFyZ2luLWxlZnQnKS4KKyAgICBc
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KKyAgICBpbnQgbGVmdFZhbHVlOworICAgIGludCByaWdodFZhbHVl
OworCisgICAgaWYgKG1hcmdpbkxlZnQuaXNBdXRvKCkgJiYgbWFyZ2luUmlnaHQuaXNBdXRvKCkp
IHsKKyAgICAgICAgLy8gJ2xlZnQnIGFuZCAncmlnaHQnIGNhbm5vdCBiZSAnYXV0bycgZHVlIHRv
IHN0ZXAgMworICAgICAgICBBU1NFUlQoIShsZWZ0LmlzQXV0bygpICYmIHJpZ2h0LmlzQXV0bygp
KSk7CisKKyAgICAgICAgbGVmdFZhbHVlID0gbGVmdC5jYWxjVmFsdWUoY29udGFpbmVyV2lkdGgp
OworICAgICAgICByaWdodFZhbHVlID0gcmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRoKTsK
KworICAgICAgICBpbnQgZGlmZmVyZW5jZSA9IGF2YWlsYWJsZVNwYWNlIC0gKGxlZnRWYWx1ZSAr
IHJpZ2h0VmFsdWUpOworICAgICAgICBpZiAoZGlmZmVyZW5jZSA+IDApIHsKKyAgICAgICAgICAg
IG1fbWFyZ2luTGVmdCA9IGRpZmZlcmVuY2UgLyAyOyAvLyBzcGxpdCB0aGUgZGlmZXJlbmNlCisg
ICAgICAgICAgICBtX21hcmdpblJpZ2h0ID0gbV9tYXJnaW5MZWZ0OworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLy8gc2VlIEZJWE1FIDEKKyAgICAgICAgICAgIGlmIChwYXJlbnQoKS0+
c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7CisgICAgICAgICAgICAgICAgbV9tYXJnaW5M
ZWZ0ID0gMDsKKyAgICAgICAgICAgICAgICBtX21hcmdpblJpZ2h0ID0gZGlmZmVyZW5jZTsgIC8v
IHdpbGwgYmUgbmVnYXRpdmUKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
bV9tYXJnaW5MZWZ0ID0gZGlmZmVyZW5jZTsgIC8vIHdpbGwgYmUgbmVnYXRpdmUKKyAgICAgICAg
ICAgICAgICBtX21hcmdpblJpZ2h0ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0g
ICAgICAgIGlmIChoID09IEFVVE8gfHwgc3R5bGUoKS0+dG9wKCkuaXNTdGF0aWMoKSkKLSAgICAg
ICAgICAgIHQgPSBzdGF0aWNfdG9wOwotICAgIH0KKyAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKKyAg
ICAgKiA1LiBJZiBhdCB0aGlzIHBvaW50IHRoZXJlIGlzIGFuICdhdXRvJyBsZWZ0LCBzb2x2ZSB0
aGUgZXF1YXRpb24gZm9yCisgICAgICogICAgdGhhdCB2YWx1ZS4KKyAgICBcKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KKyAgICB9IGVsc2UgaWYgKGxlZnQuaXNBdXRvKCkpIHsKKyAgICAgICAgbV9tYXJnaW5M
ZWZ0ID0gbWFyZ2luTGVmdC5jYWxjVmFsdWUoY29udGFpbmVyV2lkdGgpOworICAgICAgICBtX21h
cmdpblJpZ2h0ID0gbWFyZ2luUmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRoKTsKKyAgICAg
ICAgcmlnaHRWYWx1ZSA9IHJpZ2h0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCk7CisKKyAgICAg
ICAgLy8gU29sdmUgZm9yICdsZWZ0JworICAgICAgICBsZWZ0VmFsdWUgPSBhdmFpbGFibGVTcGFj
ZSAtIChyaWdodFZhbHVlICsgbV9tYXJnaW5MZWZ0ICsgbV9tYXJnaW5SaWdodCk7CisgICAgfSBl
bHNlIGlmIChyaWdodC5pc0F1dG8oKSkgeworICAgICAgICBtX21hcmdpbkxlZnQgPSBtYXJnaW5M
ZWZ0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCk7CisgICAgICAgIG1fbWFyZ2luUmlnaHQgPSBt
YXJnaW5SaWdodC5jYWxjVmFsdWUoY29udGFpbmVyV2lkdGgpOworICAgICAgICBsZWZ0VmFsdWUg
PSBsZWZ0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCk7CisKKyAgICAgICAgLy8gU29sdmUgZm9y
ICdyaWdodCcKKyAgICAgICAgcmlnaHRWYWx1ZSA9IGF2YWlsYWJsZVNwYWNlIC0gKGxlZnRWYWx1
ZSArIG1fbWFyZ2luTGVmdCArIG1fbWFyZ2luUmlnaHQpOworICAgIH0gZWxzZSBpZiAobWFyZ2lu
TGVmdC5pc0F1dG8oKSkgeworICAgICAgICBtX21hcmdpblJpZ2h0ID0gbWFyZ2luUmlnaHQuY2Fs
Y1ZhbHVlKGNvbnRhaW5lcldpZHRoKTsKKyAgICAgICAgbGVmdFZhbHVlID0gbGVmdC5jYWxjVmFs
dWUoY29udGFpbmVyV2lkdGgpOworICAgICAgICByaWdodFZhbHVlID0gcmlnaHQuY2FsY1ZhbHVl
KGNvbnRhaW5lcldpZHRoKTsKKworICAgICAgICAvLyBTb2x2ZSBmb3IgJ21hcmdpbi1sZWZ0Jwor
ICAgICAgICBtX21hcmdpbkxlZnQgPSBhdmFpbGFibGVTcGFjZSAtIChsZWZ0VmFsdWUgKyByaWdo
dFZhbHVlICsgbV9tYXJnaW5SaWdodCk7CisgICAgfSBlbHNlIGlmIChtYXJnaW5SaWdodC5pc0F1
dG8oKSkgeworICAgICAgICBtX21hcmdpbkxlZnQgPSBtYXJnaW5MZWZ0LmNhbGNWYWx1ZShjb250
YWluZXJXaWR0aCk7CisgICAgICAgIGxlZnRWYWx1ZSA9IGxlZnQuY2FsY1ZhbHVlKGNvbnRhaW5l
cldpZHRoKTsKKyAgICAgICAgcmlnaHRWYWx1ZSA9IHJpZ2h0LmNhbGNWYWx1ZShjb250YWluZXJX
aWR0aCk7CisKKyAgICAgICAgLy8gU29sdmUgZm9yICdtYXJnaW4tcmlnaHQnCisgICAgICAgIG1f
bWFyZ2luUmlnaHQgPSBhdmFpbGFibGVTcGFjZSAtIChsZWZ0VmFsdWUgKyByaWdodFZhbHVlICsg
bV9tYXJnaW5MZWZ0KTsKKyAgICB9CisKKyAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKKyAgICAgKiA2
LiBJZiBhdCB0aGlzIHBvaW50IHRoZSB2YWx1ZXMgYXJlIG92ZXItY29uc3RyYWluZWQsIGlnbm9y
ZSB0aGUgdmFsdWUKKyAgICAgKiAgICBmb3IgZWl0aGVyICdsZWZ0JyAoaW4gY2FzZSB0aGUgJ2Rp
cmVjdGlvbicgcHJvcGVydHkgb2YgdGhlCisgICAgICogICAgY29udGFpbmluZyBibG9jayBpcyAn
cnRsJykgb3IgJ3JpZ2h0JyAoaW4gY2FzZSAnZGlyZWN0aW9uJyBpcworICAgICAqICAgICdsdHIn
KSBhbmQgc29sdmUgZm9yIHRoYXQgdmFsdWUuCisgICAgXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAg
Ly8gTk9URTogIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gc29sdmUgZm9yICdyaWdodCcgd2hlbiB0
aGUgZGlyZWN0aW9uIGlzCisgICAgLy8gTFRSIGJlY2F1c2UgdGhlIHZhbHVlIGlzIG5vdCB1c2Vk
LgorICAgIGludCB0b3RhbFdpZHRoID0gbV93aWR0aCArIGxlZnRWYWx1ZSArIHJpZ2h0VmFsdWUg
KyAgbV9tYXJnaW5MZWZ0ICsgbV9tYXJnaW5SaWdodDsKKyAgICAvLyBzZWUgRklYTUUgMQorICAg
IGlmICh0b3RhbFdpZHRoID4gY29udGFpbmVyV2lkdGggJiYgKHBhcmVudCgpLT5zdHlsZSgpLT5k
aXJlY3Rpb24oKSA9PSBSVEwpKQorICAgICAgICBsZWZ0VmFsdWUgPSBjb250YWluZXJXaWR0aCAt
ICh0b3RhbFdpZHRoIC0gbGVmdFZhbHVlKTsKKworCisgICAgLy8gVXNlIGNvbXB1dGVkIHZhbHVl
cyB0byBjYWx1Y3VsYXRlIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uLgorICAgIG1feCA9IGxlZnRW
YWx1ZSArIG1fbWFyZ2luTGVmdCArIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJMZWZ0KCk7Cit9CisK
K3ZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0aWNhbFJlcGxhY2VkKCkKK3sKKyAgICAv
LyBUaGUgZm9sbG93aW5nIGlzIGJhc2VkIG9mZiBvZiB0aGUgVzNDIFdvcmtpbmcgRHJhZnQgZnJv
bSBKdW5lIDEzLCAyMDA1IG9mCisgICAgLy8gQ1NTIDIuMTogU2VjdGlvbiAxMC42LjUgIkFic29s
dXRseSBwb3NpdGlvbmVkLCByZXBsYWNlZCBlbGVtZW50cyIKKyAgICAvLyA8aHR0cDovL3d3dy53
My5vcmcvVFIvMjAwNS9XRC1DU1MyMS0yMDA1MDYxMy92aXN1ZGV0Lmh0bWwjYWJzLXJlcGxhY2Vk
LWhlaWdodD4KKyAgICAvLyAoYmxvY2stc3R5bGUtY29tbWVudHMgaW4gdGhpcyBmdW5jdGlvbiBj
b3JyZXNwb25kIHRvIHRleHQgZnJvbSB0aGUgc3BlYyBhbmQKKyAgICAvLyB0aGUgbnVtYmVycyBj
b3JyZXNwb25kIHRvIG51bWJlcnMgaW4gc3BlYykKIAotICAgIGlmICh0ICE9IEFVVE8gJiYgaCAh
PSBBVVRPICYmIGIgIT0gQVVUTykgewotICAgICAgICAvLyB0b3AsIGhlaWdodCwgYm90dG9tIGFs
bCBnaXZlbiwgcGxheSB3aXRoIG1hcmdpbnMKLSAgICAgICAgaW50IG90ID0gaCArIHQgKyBiICsg
cGFiOwotCi0gICAgICAgIGlmIChtdCA9PSBBVVRPICYmIG1iID09IEFVVE8pIHsKLSAgICAgICAg
ICAgIC8vIGJvdGggbWFyZ2lucyBhdXRvLCBzb2x2ZSBmb3IgZXF1YWxpdHkKLSAgICAgICAgICAg
IG10ID0gKGNoIC0gb3QpLzI7Ci0gICAgICAgICAgICBtYiA9IGNoIC0gb3QgLSBtdDsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlIGlmIChtdD09QVVUTykKLSAgICAgICAgICAgIC8vIHNvbHZlIGZv
ciB0b3AgbWFyZ2luCi0gICAgICAgICAgICBtdCA9IGNoIC0gb3QgLSBtYjsKLSAgICAgICAgZWxz
ZSBpZiAobWI9PUFVVE8pCi0gICAgICAgICAgICAvLyBzb2x2ZSBmb3IgYm90dG9tIG1hcmdpbgot
ICAgICAgICAgICAgbWIgPSBjaCAtIG90IC0gbXQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IC8vIG92ZXJjb25zdHJhaW5lZCwgc29sdmUgZm9yIGJvdHRvbQotICAgICAgICAgICAgYiA9IGNo
IC0gKGggKyB0ICsgbXQgKyBtYiArIHBhYik7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICAv
LyBvbmUgb3IgdHdvIG9mICh0b3AsIGhlaWdodCwgYm90dG9tKSBtaXNzaW5nLCBzb2x2ZQorICAg
IC8vIFdlIGRvbid0IHVzZSBjb250YWluaW5nQmxvY2soKSwgc2luY2Ugd2UgbWF5IGJlIHBvc2l0
aW9uZWQgYnkgYW4gZW5jbG9zaW5nIHJlbHBvc2l0aW9uZWQgaW5saW5lLgorICAgIGNvbnN0IFJl
bmRlck9iamVjdCogY29udGFpbmVyQmxvY2sgPSBjb250YWluZXIoKTsKIAotICAgICAgICAvLyBh
dXRvIG1hcmdpbnMgYXJlIGlnbm9yZWQKLSAgICAgICAgaWYgKG10ID09IEFVVE8pCi0gICAgICAg
ICAgICBtdCA9IDA7Ci0gICAgICAgIGlmIChtYiA9PSBBVVRPKQotICAgICAgICAgICAgbWIgPSAw
OwotCi0gICAgICAgIC8vMS4gc29sdmUgdG9wICYgaGVpZ2h0LiB1c2UgY29udGVudCBoZWlnaHQu
Ci0gICAgICAgIGlmICh0ID09IEFVVE8gJiYgaCA9PSBBVVRPICYmIGIgIT0gQVVUTykgewotICAg
ICAgICAgICAgaCA9IG91ckhlaWdodCAtIHBhYjsKLSAgICAgICAgICAgIHQgPSBjaCAtIChoICsg
YiArIG10ICsgbWIgKyBwYWIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHQgPT0gQVVU
TyAmJiBoICE9IEFVVE8gJiYgYiA9PSBBVVRPKSAvLzIuIHNvbHZlIHRvcCAmIGJvdHRvbS4gdXNl
IHN0YXRpYyBwb3NpdGlvbmluZy4KLSAgICAgICAgewotICAgICAgICAgICAgdCA9IHN0YXRpY190
b3A7Ci0gICAgICAgICAgICBiID0gY2ggLSAoaCArIHQgKyBtdCArIG1iICsgcGFiKTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlIGlmICh0ICE9IEFVVE8gJiYgaCA9PSBBVVRPICYmIGIgPT0gQVVU
TykgLy8zLiBzb2x2ZSBoZWlnaHQgJiBib3R0b20uIHVzZSBjb250ZW50IGhlaWdodC4KLSAgICAg
ICAgewotICAgICAgICAgICAgaCA9IG91ckhlaWdodCAtIHBhYjsKLSAgICAgICAgICAgIGIgPSBj
aCAtIChoICsgdCArIG10ICsgbWIgKyBwYWIpOworICAgIC8vIEV2ZW4gaW4gc3RyaWN0IG1vZGUg
KHdoZXJlIHdlIGRvbid0IGdyb3cgdGhlIHJvb3QgdG8gZmlsbCB0aGUgdmlld3BvcnQpCisgICAg
Ly8gb3RoZXIgYnJvd3NlcnMgcG9zaXRpb24gYXMgdGhvdWdoIHRoZSByb290IGZpbGxzIHRoZSB2
aWV3cG9ydC4KKyAgICBjb25zdCBpbnQgY29udGFpbmVySGVpZ2h0ID0gY29udGFpbmVyQmxvY2st
PmlzUm9vdCgpID8gY29udGFpbmVyQmxvY2stPmF2YWlsYWJsZUhlaWdodCgpIDogKGNvbnRhaW5l
ckJsb2NrLT5oZWlnaHQoKSAtIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJUb3AoKSAtIGNvbnRhaW5l
ckJsb2NrLT5ib3JkZXJCb3R0b20oKSk7CisKKyAgICAvLyBWYXJpYWJsZXMgdG8gc29sdmUuCisg
ICAgTGVuZ3RoIHRvcCA9IHN0eWxlKCktPnRvcCgpOworICAgIExlbmd0aCBib3R0b20gPSBzdHls
ZSgpLT5ib3R0b20oKTsKKyAgICBMZW5ndGggbWFyZ2luVG9wID0gc3R5bGUoKS0+bWFyZ2luVG9w
KCk7CisgICAgTGVuZ3RoIG1hcmdpbkJvdHRvbSA9IHN0eWxlKCktPm1hcmdpbkJvdHRvbSgpOwor
CisKKyAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKKyAgICAgKiAxLiBUaGUgdXNlZCB2YWx1ZSBvZiAn
aGVpZ2h0JyBpcyBkZXRlcm1pbmVkIGFzIGZvciBpbmxpbmUgcmVwbGFjZWQKKyAgICAgKiAgICBl
bGVtZW50cy4KKyAgICBcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAvLyBOT1RFOiBUaGlzIHZhbHVl
IG9mIGhlaWdodCBpcyBGSU5BTCBpbiB0aGF0IHRoZSBtaW4vbWF4IGhlaWdodCBjYWxjdWxhdGlv
bnMKKyAgICAvLyBhcmUgZGVhbHQgd2l0aCBpbiBjYWxjUmVwbGFjZWRIZWlnaHQoKS4gIFRoaXMg
bWVhbnMgdGhhdCB0aGUgc3RlcHMgdG8gcHJvZHVjZQorICAgIC8vIGNvcnJlY3QgbWF4L21pbiBp
biB0aGUgbm9uLXJlcGxhY2VkIHZlcnNpb24sIGFyZSBub3QgbmVjZXNzYXJ5LgorICAgIGludCBo
ZWlnaHRWYWx1ZSA9IGNhbGNSZXBsYWNlZEhlaWdodCgpICsgYm9yZGVyVG9wKCkgKyBib3JkZXJC
b3R0b20oKSArIHBhZGRpbmdUb3AoKSArIHBhZGRpbmdCb3R0b20oKTsKKyAgICBpbnQgYXZhaWxh
YmxlU3BhY2UgPSBjb250YWluZXJIZWlnaHQgLSBoZWlnaHRWYWx1ZTsKKworICAgIC8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qXAorICAgICAqIDIuIElmIGJvdGggJ3RvcCcgYW5kICdib3R0b20nIGhhdmUgdGhl
IHZhbHVlICdhdXRvJywgcmVwbGFjZSAndG9wJworICAgICAqICAgIHdpdGggdGhlIGVsZW1lbnQn
cyBzdGF0aWMgcG9zaXRpb24uCisgICAgXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgLy8gc2VlIEZJ
WE1FIDIKKyAgICBpZiAodG9wLmlzQXV0bygpICYmIGJvdHRvbS5pc0F1dG8oKSB8fCB0b3AuaXNT
dGF0aWMoKSkgeworICAgICAgICAvLyBtX3N0YXRpY1kgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVu
IHNldCB0aHJvdWdoIGxheW91dCBvZiB0aGUgcGFyZW50KCkuCisgICAgICAgIGludCBzdGF0aWNU
b3AgPSBtX3N0YXRpY1kgLSBjb250YWluZXJCbG9jay0+Ym9yZGVyVG9wKCk7CisgICAgICAgIGZv
ciAoUmVuZGVyT2JqZWN0KiBwbyA9IHBhcmVudCgpOyBwbyAmJiBwbyAhPSBjb250YWluZXJCbG9j
azsgcG8gPSBwby0+cGFyZW50KCkpIHsKKyAgICAgICAgICAgIGlmICghcG8tPmlzVGFibGVSb3co
KSkKKyAgICAgICAgICAgICAgICBzdGF0aWNUb3AgKz0gcG8tPnlQb3MoKTsKICAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIC8vNC4gc29sdmUgdG9wCi0gICAgICAgIGlmICh0ID09IEFV
VE8gJiYgaCAhPSBBVVRPICYmIGIgIT0gQVVUTykKLSAgICAgICAgICAgIHQgPSBjaCAtIChoICsg
YiArIG10ICsgbWIgKyBwYWIpOwotICAgICAgICBlbHNlCi0KLSAgICAgICAgLy81LiBzb2x2ZSBo
ZWlnaHQKLSAgICAgICAgaWYgKHQgIT0gQVVUTyAmJiBoID09IEFVVE8gJiYgYiAhPSBBVVRPKQot
ICAgICAgICAgICAgaCA9IGNoIC0gKHQgKyBiICsgbXQgKyBtYiArIHBhYik7Ci0gICAgICAgIGVs
c2UKLQotICAgICAgICAvLzYuIHNvbHZlIGJvdHRvbQotICAgICAgICBpZiAodCAhPSBBVVRPICYm
IGggIT0gQVVUTyAmJiBiID09IEFVVE8pCi0gICAgICAgICAgICBiID0gY2ggLSAoaCArIHQgKyBt
dCArIG1iICsgcGFiKTsKKyAgICAgICAgdG9wLnNldFZhbHVlKEZpeGVkLCBzdGF0aWNUb3ApOwog
ICAgIH0KIAotICAgIGlmIChvdXJIZWlnaHQgPCBoICsgcGFiKSAvL2NvbnRlbnQgbXVzdCBzdGls
bCBmaXQKLSAgICAgICAgb3VySGVpZ2h0ID0gaCArIHBhYjsKKyAgICAvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KlwKKyAgICAgKiAzLiBJZiAnYm90dG9tJyBpcyAnYXV0bycsIHJlcGxhY2UgYW55ICdhdXRvJyBv
biAnbWFyZ2luLXRvcCcgb3IKKyAgICAgKiAgICAnbWFyZ2luLWJvdHRvbScgd2l0aCAnMCcuCisg
ICAgXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgLy8gRklYTUU6IFRoZSBzcGVjLiBzYXlzIHRoYXQg
dGhpcyBzdGVwIHNob3VsZCBvbmx5IGJlIHRha2VuIHdoZW4gYm90dG9tIGlzCisgICAgLy8gYXV0
bywgYnV0IGlmIG9ubHkgdG9wIGlzIGF1dG8sIHRoaXMgbWFrZXMgc3RlcCA0IGltcG9zc2libGUu
CisgICAgaWYgKHRvcC5pc0F1dG8oKSB8fCBib3R0b20uaXNBdXRvKCkpIHsKKyAgICAgICAgaWYg
KG1hcmdpblRvcC5pc0F1dG8oKSkKKyAgICAgICAgICAgIG1hcmdpblRvcC5zZXRWYWx1ZShGaXhl
ZCwgMCk7CisgICAgICAgIGlmIChtYXJnaW5Cb3R0b20uaXNBdXRvKCkpCisgICAgICAgICAgICBt
YXJnaW5Cb3R0b20uc2V0VmFsdWUoRml4ZWQsIDApOworICAgIH0KKworICAgIC8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qXAorICAgICAqIDQuIElmIGF0IHRoaXMgcG9pbnQgYm90aCAnbWFyZ2luLXRvcCcgYW5k
ICdtYXJnaW4tYm90dG9tJyBhcmUgc3RpbGwKKyAgICAgKiAgICAnYXV0bycsIHNvbHZlIHRoZSBl
cXVhdGlvbiB1bmRlciB0aGUgZXh0cmEgY29uc3RyYWludCB0aGF0IHRoZSB0d28KKyAgICAgKiAg
ICBtYXJnaW5zIG11c3QgZ2V0IGVxdWFsIHZhbHVlcy4KKyAgICBcKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
KyAgICBpbnQgdG9wVmFsdWU7CisgICAgaW50IGJvdHRvbVZhbHVlOworCisgICAgaWYgKG1hcmdp
blRvcC5pc0F1dG8oKSAmJiBtYXJnaW5Cb3R0b20uaXNBdXRvKCkpIHsKKyAgICAgICAgLy8gJ3Rv
cCcgYW5kICdib3R0b20nIGNhbm5vdCBiZSAnYXV0bycgZHVlIHRvIHN0ZXAgMiBhbmQgMyBjb21i
aW5kZWQuCisgICAgICAgIEFTU0VSVCghKHRvcC5pc0F1dG8oKSAmJiBib3R0b20uaXNBdXRvKCkp
KTsKKworICAgICAgICB0b3BWYWx1ZSA9IHRvcC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KTsK
KyAgICAgICAgYm90dG9tVmFsdWUgPSBib3R0b20uY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCk7
CisKKyAgICAgICAgaW50IGRpZmZlcmVuY2UgPSBhdmFpbGFibGVTcGFjZSAtICh0b3BWYWx1ZSAr
IGJvdHRvbVZhbHVlKTsKKyAgICAgICAgLy8gTk9URTogVGhpcyBtYXkgcmVzdWx0IGluIG5lZ2F0
aXZlIHZhbHVlcy4KKyAgICAgICAgbV9tYXJnaW5Ub3AgPSAgZGlmZmVyZW5jZSAvIDI7CisgICAg
ICAgIG1fbWFyZ2luQm90dG9tID0gbV9tYXJnaW5Ub3A7CisKKyAgICAvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KlwKKyAgICAgKiA1LiBJZiBhdCB0aGlzIHBvaW50IHRoZXJlIGlzIG9ubHkgb25lICdhdXRvJyBs
ZWZ0LCBzb2x2ZSB0aGUgZXF1YXRpb24KKyAgICAgKiAgICBmb3IgdGhhdCB2YWx1ZS4KKyAgICBc
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KKyAgICB9IGVsc2UgaWYgKHRvcC5pc0F1dG8oKSkgeworICAgICAg
ICBtX21hcmdpblRvcCA9IG1hcmdpblRvcC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKyAg
ICAgICAgbV9tYXJnaW5Cb3R0b20gPSBtYXJnaW5Cb3R0b20uY2FsY1ZhbHVlKGNvbnRhaW5lckhl
aWdodCk7CisgICAgICAgIGJvdHRvbVZhbHVlID0gYm90dG9tLmNhbGNWYWx1ZShjb250YWluZXJI
ZWlnaHQpOworCisgICAgICAgIC8vIFNvbHZlIGZvciAndG9wJworICAgICAgICB0b3BWYWx1ZSA9
IGF2YWlsYWJsZVNwYWNlIC0gKGJvdHRvbVZhbHVlICsgbV9tYXJnaW5Ub3AgKyBtX21hcmdpbkJv
dHRvbSk7CisgICAgfSBlbHNlIGlmIChib3R0b20uaXNBdXRvKCkpIHsKKyAgICAgICAgbV9tYXJn
aW5Ub3AgPSBtYXJnaW5Ub3AuY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCk7CisgICAgICAgIG1f
bWFyZ2luQm90dG9tID0gbWFyZ2luQm90dG9tLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpOwor
ICAgICAgICB0b3BWYWx1ZSA9IHRvcC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKworICAg
ICAgICAvLyBTb2x2ZSBmb3IgJ2JvdHRvbScKKyAgICAgICAgLy8gTk9URTogSXQgaXMgbm90IG5l
Y2Vzc2FyeSB0byBzb2x2ZSBmb3IgJ2JvdHRvbScgYmVjYXVzZSB3ZSBkb24ndCBldmVyCisgICAg
ICAgIC8vIHVzZSB0aGUgdmFsdWUuCisgICAgfSBlbHNlIGlmIChtYXJnaW5Ub3AuaXNBdXRvKCkp
IHsKKyAgICAgICAgbV9tYXJnaW5Cb3R0b20gPSBtYXJnaW5Cb3R0b20uY2FsY1ZhbHVlKGNvbnRh
aW5lckhlaWdodCk7CisgICAgICAgIHRvcFZhbHVlID0gdG9wLmNhbGNWYWx1ZShjb250YWluZXJI
ZWlnaHQpOworICAgICAgICBib3R0b21WYWx1ZSA9IGJvdHRvbS5jYWxjVmFsdWUoY29udGFpbmVy
SGVpZ2h0KTsKKworICAgICAgICAvLyBTb2x2ZSBmb3IgJ21hcmdpbi10b3AnCisgICAgICAgIG1f
bWFyZ2luVG9wID0gYXZhaWxhYmxlU3BhY2UgLSAodG9wVmFsdWUgKyBib3R0b21WYWx1ZSArIG1f
bWFyZ2luQm90dG9tKTsKKyAgICB9IGVsc2UgaWYgKG1hcmdpbkJvdHRvbS5pc0F1dG8oKSkgewor
ICAgICAgICBtX21hcmdpblRvcCA9IG1hcmdpblRvcC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0
KTsKKyAgICAgICAgdG9wVmFsdWUgPSB0b3AuY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCk7Cisg
ICAgICAgIGJvdHRvbVZhbHVlID0gYm90dG9tLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpOwor
CisgICAgICAgIC8vIFNvbHZlIGZvciAnbWFyZ2luLWJvdHRvbScKKyAgICAgICAgbV9tYXJnaW5C
b3R0b20gPSBhdmFpbGFibGVTcGFjZSAtICh0b3BWYWx1ZSArIGJvdHRvbVZhbHVlICsgbV9tYXJn
aW5Ub3ApOworICAgIH0KKworICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorICAgICAqIDYuIElmIGF0
IHRoaXMgcG9pbnQgdGhlIHZhbHVlcyBhcmUgb3Zlci1jb25zdHJhaW5lZCwgaWdub3JlIHRoZSB2
YWx1ZQorICAgICAqICAgIGZvciAnYm90dG9tJyBhbmQgc29sdmUgZm9yIHRoYXQgdmFsdWUuCisg
ICAgXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgLy8gTk9URTogSXQgaXMgbm90IG5lY2Vzc2FyeSB0
byBkbyB0aGlzIHN0ZXAgYmVjYXVzZSB3ZSBkb24ndCBlbmQgdXAgdXNpbmcKKyAgICAvLyB0aGUg
dmFsdWUgb2YgJ2JvdHRvbScgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSB2YWx1ZXMgYXJlIG92
ZXItY29uc3RyYWluZWQKKyAgICAvLyBvciBub3QuCisKKworICAgIC8vIE1ha2UgZmluYWwgYWRq
dXN0bWVudHMgdG8gaGVpZ2h0LgorICAgIGludCBjb250ZW50SGVpZ2h0ID0gbV9oZWlnaHQ7Cisg
ICAgaWYgKChjb250ZW50SGVpZ2h0IDwgaGVpZ2h0VmFsdWUpIHx8IChoYXNPdmVyZmxvd0NsaXAo
KSAmJiBjb250ZW50SGVpZ2h0ID4gaGVpZ2h0VmFsdWUpKQorICAgICAgICBjb250ZW50SGVpZ2h0
ID0gaGVpZ2h0VmFsdWU7CisKKyAgICAvLyBEbyBub3QgYWxsb3cgdGhlIGhlaWdodCB0byBiZSBu
ZWdhdGl2ZS4gIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHNvbWVvbmUKKyAgICAvLyBzcGVjaWZpZXMg
Ym90aCB0b3AgYW5kIGJvdHRvbSBidXQgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaGVpZ2h0IGlzIGxl
c3MKKyAgICAvLyB0aGFuIHRvcCwgZS5nLiwgdG9wOiAyMHB4LCBib3R0b206IDAsIGNvbnRhaW5p
bmcgYmxvY2sgaGVpZ2h0IDE2LgorICAgIGhlaWdodFZhbHVlID0gbWF4KDAsIGNvbnRlbnRIZWln
aHQpOworCisgICAgLy8gSWYgb3VyIGNvbnRlbnQgaGVpZ2h0IGV4Y2VlZHMgdGhlIG5ldyBoZWln
aHQgb25jZSB3ZSd2ZSBzZXQgaXQsIHRoZW4gd2UKKyAgICAvLyBuZWVkIHRvIG1ha2Ugc3VyZSB0
byB1cGRhdGUgb3ZlcmZsb3cgdG8gdHJhY2sgdGhlIHNwaWxsb3V0LgorICAgIGlmIChtX2hlaWdo
dCA+IGhlaWdodFZhbHVlKQorICAgICAgICBzZXRPdmVyZmxvd0hlaWdodChtX2hlaWdodCk7CisK
KyAgICAvLyBTZXQgZmluYWwgdmFsdWVzLgorICAgIG1faGVpZ2h0ID0gaGVpZ2h0VmFsdWU7CiAK
LSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgb3VySGVpZ2h0ID4gaCArIHBhYikKLSAgICAg
ICAgb3VySGVpZ2h0ID0gaCArIHBhYjsKLSAgICAKLSAgICAvLyBEbyBub3QgYWxsb3cgdGhlIGhl
aWdodCB0byBiZSBuZWdhdGl2ZS4gIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHNvbWVvbmUgc3BlY2lm
aWVzIGJvdGggdG9wIGFuZCBib3R0b20KLSAgICAvLyBidXQgdGhlIGNvbnRhaW5pbmcgYmxvY2sg
aGVpZ2h0IGlzIGxlc3MgdGhhbiB0b3AsIGUuZy4sIHRvcDoyMHB4LCBib3R0b206MCwgY29udGFp
bmluZyBibG9jayBoZWlnaHQgMTYuCi0gICAgb3VySGVpZ2h0ID0ga01heCgwLCBvdXJIZWlnaHQp
OwotICAgIAotICAgIGggPSBvdXJIZWlnaHQ7Ci0gICAgeSA9IHQgKyBtdCArIGNiLT5ib3JkZXJU
b3AoKTsKKyAgICAvLyBVc2UgY29tcHV0ZWQgdmFsdWVzIHRvIGNhbHVjdWxhdGUgdGhlIHZlcnRp
Y2FsIHBvc2l0aW9uLgorICAgIG1feSA9IHRvcFZhbHVlICsgbV9tYXJnaW5Ub3AgKyBjb250YWlu
ZXJCbG9jay0+Ym9yZGVyVG9wKCk7CiB9CiAKIEludFJlY3QgUmVuZGVyQm94OjpjYXJldFJlY3Qo
aW50IG9mZnNldCwgRUFmZmluaXR5IGFmZmluaXR5LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGlu
ZSkKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxMzcwMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjQgQEAKKzIwMDYtMDQtMDUgIFNhbSBXZWluaWcgIDxzYW0ud2VpbmlnQGdt
YWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBQYXRjaCBmb3IgaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9p
ZD03NjA0CisgICAgICAgIGNhbGNBYnNvbHV0ZUhvcml6b250YWxWYWx1ZXMoKSBpcyBiZWluZyBn
ZXR0aW5nIHBhc3NlZCBhcmd1bWVudHMKKyAgICAgICAgaW4gdGhlIHdyb25nIG9yZGVyIGluIGNh
bGNBYnNvbHV0ZUhvcml6b250YWwoKQorCisgICAgICAgIENsZWFucyB1cCB0aGUgUmVuZGVyQm94
IGNvZGUgZm9yIGFic29sdXRlbHkgcG9zaXRpb25lZCBlbGVtZW50cworICAgICAgICBhbmQgYWRk
cyBuZXcgZnVuY3Rpb25zIGZvciByZXBsYWNlZCBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgCisgICAg
ICAgIGVsZW1lbnRzLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWwpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2FsY0Fic29sdXRlVmVydGljYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0aWNhbFZhbHVlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWxSZXBsYWNlZCk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0aWNh
bFJlcGxhY2VkKTogQWRkZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorCiAy
MDA2LTA0LTA1ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbi4K
</data>
<flag name="review"
          id="2061"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>7605</attachid>
            <date>2006-04-09 15:38:55 -0700</date>
            <delta_ts>2006-04-09 15:38:55 -0700</delta_ts>
            <desc>Test case show new margin behavior</desc>
            <filename>overconstrained.html</filename>
            <type>text/html</type>
            <size>1080</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIj4KPGh0bWw+
CjxoZWFkPgogICAgPHRpdGxlPk92ZXItY29uc3RyYWluZWQgZGltZW5zaW9ucyB0ZXN0IGZvciBh
YnNvbHV0ZWx5IHBvc2l0aW9uZWQgZWxlbWVudHM8L3RpdGxlPgogICAgPHN0eWxlIHR5cGU9InRl
eHQvY3NzIj4KICAgICAgICAuY29udGFpbmVyIHsKICAgICAgICAgICAgZGlyZWN0aW9uOiBydGw7
CiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgICAgd2lkdGg6IDIwMHB4
OwogICAgICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9y
OiBibHVlOwogICAgICAgIH0KICAgICAgICAudG9UZXN0IHsKICAgICAgICAgICAgcG9zaXRpb246
IGFic29sdXRlOwogICAgICAgICAgICAvKiBPdmVyLWNvbnN0cmFpbmVkIC0tIDUwcHggKyA3NXB4
ICsgMTAwcHggKyAyNXB4ICsgMjVweCA+IDIwMHB4ICovCiAgICAgICAgICAgIGxlZnQ6IDUwcHg7
CiAgICAgICAgICAgIHJpZ2h0OiA3NXB4OwogICAgICAgICAgICB3aWR0aDogMTAwcHg7CiAgICAg
ICAgICAgIG1hcmdpbi1sZWZ0OiAyNXB4OwogICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDI1cHg7
CgogICAgICAgICAgICBoZWlnaHQ6IDUwcHg7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6
IGdyZWVuOwogICAgICAgIH0KICAgICAgICAjdGVzdCB7IGxlZnQ6IDMwMHB4OyB9CiAgICAgICAg
I2NvbnRyb2wgZGl2IHsgZGlyZWN0aW9uOiBsdHI7IH0KICAgICAgICAjdGVzdCBkaXYgeyBkaXJl
Y3Rpb246IHJ0bDsgfQogICAgPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KICAgIDxwPlRoZSB0d28g
Ym94ZXMgYmVsb3cgc2hvdWxkIGxvb2sgaWRlbnRpY2FsLjwvcD4KICAgIDxkaXYgaWQ9ImNvbnRy
b2wiIGNsYXNzPSJjb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InRvVGVzdCI+PC9kaXY+
CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9InRlc3QiIGNsYXNzPSJjb250YWluZXIiPgogICAgICAg
IDxkaXYgY2xhc3M9InRvVGVzdCI+PC9kaXY+CiAgICA8L2Rpdj4KPC9ib2R5Pgo8L2h0bWw+
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8177</attachid>
            <date>2006-05-08 18:56:10 -0700</date>
            <delta_ts>2006-05-11 14:24:35 -0700</delta_ts>
            <desc>Patch (now with testcases)</desc>
            <filename>absbox.diff</filename>
            <type>text/plain</type>
            <size>66369</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE0MjQ5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDYtMDUtMDggIFNhbSBXZWluaWcgIDxzYW0u
d2VpbmlnQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAtdGVzdHMgZm9yIGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzYwNAorICAgICAgICAKKyAgICAgICAgKiBmYXN0L2Jsb2NrL3Bvc2l0aW9u
aW5nL2Fic29sdXRlLWxlbmd0aC1vZi1uZWctNjY2NjY2Lmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvYmxvY2svcG9zaXRpb25pbmcvYWJzb2x1dGUtcG9zaXRpb25lZC1vdmVyY29uc3RyYWlu
ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ibG9jay9wb3NpdGlvbmluZy9hdXRvLzAw
Ni5odG1sOiBVcGRhdGVkIHRvIHJlZmxlY3QgdGhhdCB0aGUgY29udGFpbmluZworICAgICAgICBi
bG9jaydzIGRpcmVjdGlvbiwgbm90IHRoZSBwYXJlbnQncyBpcyB1c2VkLgorICAgICAgICAqIGZh
c3QvY3NzL2Fic29sdXRlLXBvaXRpb24taW4tcnRsLXBhcmVudC5odG1sOiBVcGRhdGVkIGFuZCBj
bGVhbmVkIHVwLgorCiAyMDA2LTA1LTA4ICBMZXZpIFdlaW50cmF1YiAgPGx3ZWludHJhdWJAYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IGp1c3Rpbi4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvY3NzL2Fic29sdXRlLXBvaXRpb24taW4tcnRsLXBhcmVudC5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvY3NzL2Fic29sdXRlLXBvaXRpb24taW4tcnRsLXBhcmVudC5o
dG1sCShyZXZpc2lvbiAxNDI0OSkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL2Fic29sdXRlLXBv
aXRpb24taW4tcnRsLXBhcmVudC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMyICsxLDQ0IEBA
CiA8aHRtbD4KLTxib2R5PgotPHA+Ci1PbiB0aGUgbGVmdCwgeW91IHNob3VsZCBzZWUgdGhyZWUg
YmxvY2tzIHRoYXQgYXJlIGFsaWduZWQgbGVmdCB3aXRoaW4gYSBibGFjayBib3guICBUaGV5IHNo
b3VsZAotYmUgc3RhY2tlZCB2ZXJ0aWNhbGx5IHdpdGggdGhlIGdyZWVuIGJveCBpbiBiZXR3ZWVu
IHR3byBvbGl2ZSBib3hlcy4gIFRoZSBvbGl2ZSBib3hlcyBhbmQgdGhlIGdyZWVuIGJveAotc2hv
dWxkIGJlIDEwMHgxMDAsIGFuZCB0aGVyZSBzaG91bGQgYmUgMTAwIHBpeGVscyBvZiBwYWRkaW5n
IG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBib3ggc3RhY2suCi08L3A+Ci08cD4KLU9uIHRoZSBy
aWdodCwgeW91IHNob3VsZCBzZWUgdHdvIGJsb2NrcyB0aGF0IGFyZSBjZW50ZXJlZCB3aXRoaW4g
YSBibGFjayBib3guICBUaGV5IHNob3VsZCBiZQotc3RhY2tlZCB2ZXJ0aWNhbGx5IHdpdGggdGhl
IGdyZWVuIGJveCBiZWxvdyB0aGUgb2xpdmUgYm94LiBUaGUgb2xpdmUgYm94IGFuZCB0aGUgZ3Jl
ZW4gYm94IHNob3VsZAotYmUgMTAweDEwMCwgYW5kIHRoZXJlIHNob3VsZCBiZSAxMDAgcGl4ZWxz
IG9mIHBhZGRpbmcgb24gZWl0aGVyIHNpZGUgb2YgdGhlIGJveCBzdGFjay4KLTwvcD4KLTxkaXYg
c3R5bGU9InBvc2l0aW9uOmZpeGVkO3dpZHRoOjIwMHB4O2hlaWdodDozMDBweDtib3JkZXI6MjBw
eCBzb2xpZCBibGFjazsiPgotPHRhYmxlIHN0eWxlPSJkaXJlY3Rpb246cnRsOyB3aWR0aDoxMDBw
eDsiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+Ci08dHI+IAotPHRkPgotPGRpdiBz
dHlsZT0id2lkdGg6MTAwcHg7IGhlaWdodDoxMDBweDsgYmFja2dyb3VuZDpvbGl2ZTsiPjwvZGl2
PgotPGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjEwMHB4OyBoZWlnaHQ6MTAw
cHg7IGJhY2tncm91bmQ6Z3JlZW47Ij48L2Rpdj4KLTxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29s
dXRlOyB3aWR0aDoxMDBweDsgaGVpZ2h0OjEwMHB4OyBiYWNrZ3JvdW5kOm9saXZlOyBib3R0b206
MDsgcmlnaHQ6MTAwcHg7Ij48L2Rpdj4KLTwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2Pgot
PGRpdiBzdHlsZT0icG9zaXRpb246Zml4ZWQ7d2lkdGg6MzAwcHg7aGVpZ2h0OjIwMHB4O2JvcmRl
cjoyMHB4IHNvbGlkIGJsYWNrOyBsZWZ0OjMwMHB4OyI+Ci08ZGl2IHN0eWxlPSJkaXJlY3Rpb246
cnRsOyB3aWR0aDoyMDBweDsiPgotPGRpdiBzdHlsZT0id2lkdGg6MTAwcHg7IGhlaWdodDoxMDBw
eDsgYmFja2dyb3VuZDpvbGl2ZTsiPjwvZGl2PgotPGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1
dGU7IHdpZHRoOjEwMHB4OyBoZWlnaHQ6MTAwcHg7IGJhY2tncm91bmQ6Z3JlZW47Ij48L2Rpdj4K
LTwvZGl2PgotPC9kaXY+Cis8aGVhZD4KKyAgPHRpdGxlPkFic29sdXRlIFBvc2l0aW9uIGluIFJU
TCBwYXJlbnQ8L3RpdGxlPgorICA8c3R5bGU+CisgICAgLmNvbnRhaW5pbmdCbG9jayB7IHBvc2l0
aW9uOiBmaXhlZDsgYm9yZGVyOiAyMHB4IHNvbGlkIGJsYWNrOyB9CisgICAgI2NiT25lIHsgd2lk
dGg6IDIwMHB4OyBoZWlnaHQ6IDMwMHB4OyB9CisgICAgI2NiT25lID4gdGFibGUgeyBkaXJlY3Rp
b246IHJ0bDsgd2lkdGg6IDEwMHB4OyB9CisgICAgI2NiVHdvIHsgd2lkdGg6IDMwMHB4OyBoZWln
aHQ6IDIwMHB4OyBsZWZ0OiAzMDBweDsgfQorICAgICNjYlR3byA+IGRpdiB7IHBvc2l0aW9uOiBy
ZWxhdGl2ZTsgZGlyZWN0aW9uOiBydGw7IHdpZHRoOiAyMDBweDsgfQogCisgICAgLmJveCB7IHdp
ZHRoOiAxMDBweDsgaGVpZ2h0OiAxMDBweDsgfQorICAgICN0ZXN0MSB7IGJhY2tncm91bmQ6IG9s
aXZlOyB9CisgICAgI3Rlc3QyIHsgcG9zaXRpb246IGFic29sdXRlOyBiYWNrZ3JvdW5kOiBncmVl
bjsgfQorICAgICN0ZXN0MyB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgYm90dG9tOiAwOyByaWdodDog
MTAwcHg7IGJhY2tncm91bmQ6IG9saXZlOyB9ICAgCisgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9k
eT4KKyAgPHA+T24gdGhlIGxlZnQsIHlvdSBzaG91bGQgc2VlIHRocmVlIGJsb2NrcyB0aGF0IGFy
ZSBhbGlnbmVkIGxlZnQgd2l0aGluIGEgYmxhY2sgYm94LiAgVGhleSBzaG91bGQKKyAgICBiZSBz
dGFja2VkIHZlcnRpY2FsbHkgd2l0aCB0aGUgZ3JlZW4gYm94IGluIGJldHdlZW4gdHdvIG9saXZl
IGJveGVzLiAgVGhlIG9saXZlIGJveGVzIGFuZCB0aGUgZ3JlZW4KKyAgICBib3ggc2hvdWxkIGJl
IDEwMHgxMDAsIGFuZCB0aGVyZSBzaG91bGQgYmUgMTAwIHBpeGVscyBvZiBwYWRkaW5nIG9uIHRo
ZSByaWdodCBzaWRlIG9mIHRoZSBib3ggc3RhY2suCisgIDwvcD4KKyAgPHA+T24gdGhlIHJpZ2h0
LCB5b3Ugc2hvdWxkIHNlZSB0d28gYmxvY2tzIHRoYXQgYXJlIGNlbnRlcmVkIHdpdGhpbiBhIGJs
YWNrIGJveC4gIFRoZXkgc2hvdWxkIGJlCisgICAgc3RhY2tlZCB2ZXJ0aWNhbGx5IHdpdGggdGhl
IGdyZWVuIGJveCBiZWxvdyB0aGUgb2xpdmUgYm94LiBUaGUgb2xpdmUgYm94IGFuZCB0aGUgZ3Jl
ZW4gYm94IHNob3VsZAorICAgIGJlIDEwMHgxMDAsIGFuZCB0aGVyZSBzaG91bGQgYmUgMTAwIHBp
eGVscyBvZiBwYWRkaW5nIG9uIGVpdGhlciBzaWRlIG9mIHRoZSBib3ggc3RhY2suCisgIDwvcD4K
KyAgPGRpdiBpZD0iY2JPbmUiIGNsYXNzPSJjb250YWluaW5nQmxvY2siPgorICAgIDx0YWJsZSBj
ZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPgorICAgICAgPHRyPiAKKyAgICAgICAgPHRk
PgorICAgICAgICAgIDxkaXYgaWQ9InRlc3QxIiBjbGFzcz0iYm94Ij48L2Rpdj4KKyAgICAgICAg
ICA8ZGl2IGlkPSJ0ZXN0MiIgY2xhc3M9ImJveCI+PC9kaXY+CisgICAgICAgICAgPGRpdiBpZD0i
dGVzdDMiIGNsYXNzPSJib3giPjwvZGl2PgorICAgICAgICA8L3RkPgorICAgICAgPC90cj4KKyAg
ICA8L3RhYmxlPgorICA8L2Rpdj4KKyAgPGRpdiBpZD0iY2JUd28iIGNsYXNzPSJjb250YWluaW5n
QmxvY2siPgorICAgIDxkaXY+CisgICAgICA8ZGl2IGlkPSJ0ZXN0MSIgY2xhc3M9ImJveCI+PC9k
aXY+CisgICAgICA8ZGl2IGlkPSJ0ZXN0MiIgY2xhc3M9ImJveCI+PC9kaXY+CisgICAgPC9kaXY+
CisgIDwvZGl2PgogPC9ib2R5PgogPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ibG9j
ay9wb3NpdGlvbmluZy9hYnNvbHV0ZS1sZW5ndGgtb2YtbmVnLTY2NjY2Ni5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvYmxvY2svcG9zaXRpb25pbmcvYWJzb2x1dGUtbGVuZ3Ro
LW9mLW5lZy02NjY2NjYuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvYmxv
Y2svcG9zaXRpb25pbmcvYWJzb2x1dGUtbGVuZ3RoLW9mLW5lZy02NjY2NjYuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyMCBAQAorPGh0bWw+Cis8aGVhZD4KKyAgICA8bWV0YSBodHRwLWVx
dWl2PSJDb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4K
KyAgICA8dGl0bGU+VGVzdCBjYXNlIGZvciBsZW5ndGhzIG9mIG1hZ2ljIG51bWJlciAnLTY2NjY2
Nic8L3RpdGxlPgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgICAgICNjb250YWlu
ZXIgeyBwb3NpdGlvbjogcmVsYXRpdmU7IH0KKyAgICAgICAgI2NvbnRyb2wgeyBwb3NpdGlvbjog
YWJzb2x1dGU7IG1hcmdpbi1sZWZ0OiBhdXRvOyBjb2xvcjogZ3JlZW47IH0KKyAgICAgICAgI3Rl
c3QxIHsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDFlbTsgbWFyZ2luLWxlZnQ6IC02NjY2NjZw
eDsgY29sb3I6IHJlZDsgfQorICAgICAgICAjdGVzdDIgeyBwb3NpdGlvbjogYWJzb2x1dGU7IHRv
cDogMmVtOyBtYXJnaW4tbGVmdDogLTY2NjY2NXB4OyBjb2xvcjogcmVkOyB9CisgICAgPC9zdHls
ZT4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxwPkluIHRoaXMgdGVzdCBjYXNlIHlvdSBzaG91bGQg
b25seSBzZWUgb25lIGxpbmUgZ3JlZW4gdGV4dC4gIElmIHRoZXJlIGlzIGFueSByZWQgdGhlIHRl
c3QgaGFzIGZhaWxlZC48L3A+CisgICAgPGRpdiBpZD0iY29udGFpbmVyIj4KKyAgICAgICAgPGRp
diBpZD0iY29udHJvbCI+WW91IHNob3VsZCBzZWUgdGhpcy48L2Rpdj4KKyAgICAgICAgPGRpdiBp
ZD0idGVzdDEiPllvdSBzaG91bGQgbm90IHNlZSB0aGlzITwvZGl2PgorICAgICAgICA8ZGl2IGlk
PSJ0ZXN0MiI+WW91IHNob3VsZCBub3Qgc2VlIHRoaXMhPC9kaXY+CisgICAgPC9kaXY+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Jsb2NrL3Bvc2l0aW9uaW5nL2Fi
c29sdXRlLXBvc2l0aW9uZWQtb3ZlcmNvbnN0cmFpbmVkLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9ibG9jay9wb3NpdGlvbmluZy9hYnNvbHV0ZS1wb3NpdGlvbmVkLW92ZXJj
b25zdHJhaW5lZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ibG9jay9w
b3NpdGlvbmluZy9hYnNvbHV0ZS1wb3NpdGlvbmVkLW92ZXJjb25zdHJhaW5lZC5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDM4IEBACis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5PdmVy
LWNvbnN0cmFpbmVkIGRpbWVuc2lvbnMgdGVzdCBmb3IgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGVs
ZW1lbnRzPC90aXRsZT4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgICAgICAuY29u
dGFpbmVyIHsKKyAgICAgICAgICAgIGRpcmVjdGlvbjogcnRsOworICAgICAgICAgICAgcG9zaXRp
b246IGFic29sdXRlOworICAgICAgICAgICAgd2lkdGg6IDIwMHB4OworICAgICAgICAgICAgaGVp
Z2h0OiAyMDBweDsKKyAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsdWU7CisgICAgICAg
IH0KKyAgICAgICAgLnRvVGVzdCB7CisgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7Cisg
ICAgICAgICAgICAvKiBPdmVyLWNvbnN0cmFpbmVkIC0tIDUwcHggKyA3NXB4ICsgMTAwcHggKyAy
NXB4ICsgMjVweCA+IDIwMHB4ICovCisgICAgICAgICAgICBsZWZ0OiA1MHB4OworICAgICAgICAg
ICAgcmlnaHQ6IDc1cHg7CisgICAgICAgICAgICB3aWR0aDogMTAwcHg7CisgICAgICAgICAgICBt
YXJnaW4tbGVmdDogMjVweDsKKyAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMjVweDsKKworICAg
ICAgICAgICAgaGVpZ2h0OiA1MHB4OworICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZ3Jl
ZW47CisgICAgICAgIH0KKyAgICAgICAgI3Rlc3QgeyBsZWZ0OiAzMDBweDsgfQorICAgICAgICAj
Y29udHJvbCBkaXYgeyBkaXJlY3Rpb246IGx0cjsgfQorICAgICAgICAjdGVzdCBkaXYgeyBkaXJl
Y3Rpb246IHJ0bDsgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8cD5UaGUg
dHdvIGJveGVzIGJlbG93IHNob3VsZCBsb29rIGlkZW50aWNhbC48L3A+CisgICAgPGRpdiBpZD0i
Y29udHJvbCIgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgICAgIDxkaXYgY2xhc3M9InRvVGVzdCI+
PC9kaXY+CisgICAgPC9kaXY+CisgICAgPGRpdiBpZD0idGVzdCIgY2xhc3M9ImNvbnRhaW5lciI+
CisgICAgICAgIDxkaXYgY2xhc3M9InRvVGVzdCI+PC9kaXY+CisgICAgPC9kaXY+Cis8L2JvZHk+
Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9ibG9jay9wb3NpdGlvbmluZy9hdXRvLzAwNi5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvYmxvY2svcG9zaXRpb25pbmcvYXV0by8wMDYuaHRtbAkocmV2aXNpb24gMTQy
NDkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Jsb2NrL3Bvc2l0aW9uaW5nL2F1dG8vMDA2Lmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTIsMTAgKzIsMTAgQEAKIDxib2R5PgogSW4gdGhpcyB0ZXN0LCB5
b3Ugc2hvdWxkIHNlZSB0aHJlZSBibG9ja3MgdGhhdCBhcmUgYWxpZ25lZCByaWdodCB3aXRoaW4g
YSBibGFjayBib3guICBUaGV5IHNob3VsZAogYmUgc3RhY2tlZCB2ZXJ0aWNhbGx5IHdpdGggdGhl
IGdyZWVuIGJveCBpbiBiZXR3ZWVuIHR3byBvbGl2ZSBib3hlcy4gIFRoZSBvbGl2ZSBib3hlcyBh
bmQgdGhlIGdyZWVuIGJveAotc2hvdWxkIGJlIDEwMHgxMDAsIGFuZCB0aGVyZSBzaG91bGQgYmUg
MTAwIHBpeGVscyBvZiBwYWRkaW5nIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBib3ggc3RhY2su
ICAKK3Nob3VsZCBiZSAxMDB4MTAwLCBhbmQgdGhlcmUgc2hvdWxkIGJlIDEwMCBwaXhlbHMgb2Yg
cGFkZGluZyBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBib3ggc3RhY2suICAKIAotPHAgc3R5bGU9
ImRpcmVjdGlvbjpydGwiPlRoZQotYmxhY2sgYm94J3MgdG9wIHNob3VsZCBiZSBhbGlnbmVkIHdp
dGggdGhlIGVuZCBvZiB0aGUgbGFzdCBsaW5lIGluIHRoaXMgcGFyYXJnYXBoIGFuZCBpdHMgbGVm
dCBzaWRlIHNob3VsZCBiZWdpbiByaWdodCBhZnRlciB0aGUgZW5kIG9mIHRoaXMgc2VudGVuY2Uu
Cis8cCBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlOyBkaXJlY3Rpb246cnRsIj5UaGUKK2JsYWNr
IGJveCdzIHRvcCBzaG91bGQgYmUgYWxpZ25lZCB3aXRoIHRoZSBlbmQgb2YgdGhlIGxhc3QgbGlu
ZSBpbiB0aGlzIHBhcmFyZ2FwaCBhbmQgaXRzIHJpZ2h0IHNpZGUgc2hvdWxkIGJlZ2luIHJpZ2h0
IGFmdGVyIHRoZSBlbmQgb2YgdGhpcyBzZW50ZW5jZS4KIAogIDxzcGFuIHN0eWxlPSJkaXJlY3Rp
b246cnRsOyBwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDBweDtoZWlnaHQ6MjAwcHg7Ym9yZGVy
OjIwcHggc29saWQgYmxhY2s7cGFkZGluZy10b3A6NTBweDtwYWRkaW5nLWJvdHRvbTo1MHB4O3Bh
ZGRpbmctbGVmdDoxMDBweDtwYWRkaW5nLXJpZ2h0OjBweCI+CiA8ZGl2IHN0eWxlPSJtYXJnaW4t
bGVmdDo4MDBweDtwb3NpdGlvbjphYnNvbHV0ZTttYXJnaW4tdG9wOjUwcHg7d2lkdGg6MTAwcHg7
aGVpZ2h0OjEwMHB4O2JhY2tncm91bmQtY29sb3I6Z3JlZW4iPjwvZGl2PgpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmgJKHJldmlzaW9uIDE0MjQ5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OCwxMSArMTU4LDE4IEBAIHByb3RlY3RlZDoKIAog
ICAgIHZvaWQgY2FsY0Fic29sdXRlSG9yaXpvbnRhbCgpOwogICAgIHZvaWQgY2FsY0Fic29sdXRl
VmVydGljYWwoKTsKLSAgICB2b2lkIGNhbGNBYnNvbHV0ZUhvcml6b250YWxWYWx1ZXMoV2lkdGhU
eXBlIHdpZHRoVHlwZSwgUmVuZGVyT2JqZWN0KiBjYiwgaW50IGN3LCBpbnQgcGFiLCBpbnQgc3Rh
dGljX2Rpc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
bCwgaW50IHIsIGludCYgdywgaW50JiBtbCwgaW50JiBtciwgaW50JiB4KTsKLSAgICB2b2lkIGNh
bGNBYnNvbHV0ZVZlcnRpY2FsVmFsdWVzKEhlaWdodFR5cGUgaGVpZ2h0VHlwZSwgUmVuZGVyT2Jq
ZWN0KiBjYiwgaW50IGNoLCBpbnQgcGFiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCB0LCBpbnQgYiwgaW50JiBoLCBpbnQmIG10LCBpbnQmIG1iLCBpbnQmIHkpOyAK
LSAgICAKKyAgICB2b2lkIGNhbGNBYnNvbHV0ZUhvcml6b250YWxWYWx1ZXMoTGVuZ3RoIHdpZHRo
LCBjb25zdCBSZW5kZXJPYmplY3QqIGNiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgaW50IGNvbnRhaW5lcldpZHRoLCBjb25zdCBpbnQgYm9yZGVyc1BsdXNQ
YWRkaW5nLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGVu
Z3RoIGxlZnQsIGNvbnN0IExlbmd0aCByaWdodCwgY29uc3QgTGVuZ3RoIG1hcmdpbkxlZnQsIGNv
bnN0IExlbmd0aCBtYXJnaW5SaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50JiB3aWR0aFZhbHVlLCBpbnQmIG1hcmdpbkxlZnRWYWx1ZSwgaW50JiBtYXJnaW5S
aWdodFZhbHVlLCBpbnQmIHhQb3MpOworICAgIHZvaWQgY2FsY0Fic29sdXRlVmVydGljYWxWYWx1
ZXMoTGVuZ3RoIGhlaWdodCwgY29uc3QgUmVuZGVyT2JqZWN0KiBjYiwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgY29udGFpbmVySGVpZ2h0LCBjb25zdCBp
bnQgYm9yZGVyc1BsdXNQYWRkaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgTGVuZ3RoIHRvcCwgY29uc3QgTGVuZ3RoIGJvdHRvbSwgY29uc3QgTGVuZ3RoIG1h
cmdpblRvcCwgY29uc3QgTGVuZ3RoIG1hcmdpbkJvdHRvbSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCYgaGVpZ2h0VmFsdWUsIGludCYgbWFyZ2luVG9wVmFsdWUsIGlu
dCYgbWFyZ2luQm90dG9tVmFsdWUsIGludCYgeVBvcyk7CisKKyAgICB2b2lkIGNhbGNBYnNvbHV0
ZVZlcnRpY2FsUmVwbGFjZWQoKTsKKyAgICB2b2lkIGNhbGNBYnNvbHV0ZUhvcml6b250YWxSZXBs
YWNlZCgpOworCiAgICAgdmlydHVhbCBJbnRSZWN0IGdldE92ZXJmbG93Q2xpcFJlY3QoaW50IHR4
LCBpbnQgdHkpOwogICAgIHZpcnR1YWwgSW50UmVjdCBnZXRDbGlwUmVjdChpbnQgdHgsIGludCB0
eSk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMTQyNDkpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNiAr
MzIsMTggQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2Vs
bC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlJlbmRlckFyZW5hLmgiCiAj
aW5jbHVkZSAiUmVuZGVyQ2FudmFzLmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxleGlibGVCb3guaCIK
LSNpbmNsdWRlICJyZW5kZXJfcmVwbGFjZWQuaCIKKyNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwu
aCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgInJlbmRlcl9yZXBsYWNlZC5o
IgorI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxt
YXRoLmg+CiAKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMTQxNSwzNjEgKzE0MTcsODMzIEBAIHZvaWQgUmVuZGVyQm94OjpzZXRTdGF0aWNZKGludCBz
dGF0aWNZKQogCiB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlSG9yaXpvbnRhbCgpCiB7Ci0g
ICAgY29uc3QgaW50IEFVVE8gPSAtNjY2NjY2OwotICAgIGludCBsLCByLCBjdzsKLQotICAgIGlu
dCBwYWIgPSBib3JkZXJMZWZ0KCkrIGJvcmRlclJpZ2h0KCkrIHBhZGRpbmdMZWZ0KCkrIHBhZGRp
bmdSaWdodCgpOwotCi0gICAgbCA9IHIgPSBBVVRPOwotIAotICAgIC8vIFdlIGRvbid0IHVzZSBj
b250YWluaW5nQmxvY2soKSwgc2luY2Ugd2UgbWF5IGJlIHBvc2l0aW9uZWQgYnkgYW4gZW5jbG9z
aW5nIHJlbHBvc2l0aW9uZWQgaW5saW5lLgotICAgIFJlbmRlck9iamVjdCogY2IgPSBjb250YWlu
ZXIoKTsKLSAgICBjdyA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoKCkgKyBjYi0+cGFkZGluZ0xlZnQo
KSArIGNiLT5wYWRkaW5nUmlnaHQoKTsKLQotICAgIGlmICghc3R5bGUoKS0+bGVmdCgpLmlzQXV0
bygpKQotICAgICAgICBsID0gc3R5bGUoKS0+bGVmdCgpLmNhbGNWYWx1ZShjdyk7Ci0gICAgaWYg
KCFzdHlsZSgpLT5yaWdodCgpLmlzQXV0bygpKQotICAgICAgICByID0gc3R5bGUoKS0+cmlnaHQo
KS5jYWxjVmFsdWUoY3cpOwotCi0gICAgaW50IHN0YXRpY19kaXN0YW5jZT0wOwotICAgIGlmICgo
cGFyZW50KCktPnN0eWxlKCktPmRpcmVjdGlvbigpPT1MVFIgJiYgKGwgPT0gQVVUTyAmJiByID09
IEFVVE8pKQotICAgICAgICAgICAgfHwgc3R5bGUoKS0+bGVmdCgpLmlzU3RhdGljKCkpCi0gICAg
ewotICAgICAgICBzdGF0aWNfZGlzdGFuY2UgPSBtX3N0YXRpY1ggLSBjYi0+Ym9yZGVyTGVmdCgp
OyAvLyBTaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gc2V0IHRocm91Z2ggbGF5b3V0IG9mIHRoZSBw
YXJlbnQoKS4KLSAgICAgICAgUmVuZGVyT2JqZWN0KiBwbyA9IHBhcmVudCgpOwotICAgICAgICBm
b3IgKDsgcG8gJiYgcG8gIT0gY2I7IHBvID0gcG8tPnBhcmVudCgpKQotICAgICAgICAgICAgc3Rh
dGljX2Rpc3RhbmNlICs9IHBvLT54UG9zKCk7Ci0KLSAgICAgICAgbCA9IHN0YXRpY19kaXN0YW5j
ZTsKKyAgICBpZiAoaXNSZXBsYWNlZCgpKSB7CisgICAgICAgIGNhbGNBYnNvbHV0ZUhvcml6b250
YWxSZXBsYWNlZCgpOworICAgICAgICByZXR1cm47IAorICAgIH0KKworCisgICAgLy8gUVVFU1RJ
T05TCisgICAgLy8gRklYTUUgMTogV2hpY2ggUmVuZGVyT2JqZWN0J3MgJ2RpcmVjdGlvbicgcHJv
cGVydHkgc2hvdWxkIHVzZWQ6IHRoZQorICAgIC8vIGNvbnRhaW5pbmcgYmxvY2sgKGNiKSBhcyB0
aGUgc3BlYyBzZWVtcyB0byBpbXBseSwgdGhlIHBhcmVudCAocGFyZW50KCkpIGFzCisgICAgLy8g
d2FzIHByZXZpb3VzbHkgZG9uZSBpbiBjYWxjdWxhdGluZyB0aGUgc3RhdGljIGRpc3RhbmNlcywg
b3Igb3Vyc2VsZiwgd2hpY2gKKyAgICAvLyB3YXMgYWxzbyBwcmV2aW91c2x5IGRvbmUgZm9yIGRl
Y2lkaW5nIHdoYXQgdG8gb3ZlcnJpZGUgd2hlbiB5b3UgaGFkCisgICAgLy8gb3Zlci1jb25zdHJh
aW5lZCBtYXJnaW5zPyAgQWxzbyBub3RlIHRoYXQgdGhlIGNvbnRhaW5lciBibG9jayBpcyB1c2Vk
CisgICAgLy8gaW4gc2ltaWxhciBzaXR1YXRpb25zIGluIG90aGVyIHBhcnRzIG9mIHRoZSBSZW5k
ZXJCb3ggY2xhc3MgKHNlZSBjYWxjV2lkdGgoKQorICAgIC8vIGFuZCBjYWxjSG9yaXpvbnRhbE1h
cmdpbnMoKSkuCisKKyAgICAvLyBGSVhNRSAyOiBTaG91bGQgd2Ugc3RpbGwgZGVhbCB3aXRoIHRo
ZXNlIHRoZSBjYXNlcyBvZiAnbGVmdCcgb3IgJ3JpZ2h0JyBoYXZpbmcKKyAgICAvLyB0aGUgdHlw
ZSAnc3RhdGljJyBpbiBkZXRlcm1pbmluZyB3aGV0aGVyIHRvIGNhbGN1bGF0ZSB0aGUgc3RhdGlj
IGRpc3RhbmNlPworICAgIC8vIE5PVEU6ICdzdGF0aWMnIGlzIG5vdCBhIGxlZ2FsIHZhbHVlIGZv
ciAnbGVmdCcgb3IgJ3JpZ2h0JyBhcyBvZiBDU1MgMi4xLgorCisgICAgLy8gRklYTUUgMzogQ2Fu
IHBlcmhhcHMgb3B0aW1pemUgb3V0IGNhc2VzIHdoZW4gbWF4LXdpZHRoL21pbi13aWR0aCBhcmUg
Z3JlYXRlcgorICAgIC8vIHRoYW4gb3IgbGVzcyB0aGFuIHRoZSBjb21wdXRlZCBtX3dpZHRoLiAg
QmUgY2FyZWZ1bCBvZiBib3gtc2l6aW5nIGFuZAorICAgIC8vIHBlcmNlbnRhZ2UgaXNzdWVzLgor
CisgICAgLy8gVGhlIGZvbGxvd2luZyBpcyBiYXNlZCBvZmYgb2YgdGhlIFczQyBXb3JraW5nIERy
YWZ0IGZyb20gQXByaWwgMTEsIDIwMDYgb2YKKyAgICAvLyBDU1MgMi4xOiBTZWN0aW9uIDEwLjMu
NyAiQWJzb2x1dGVseSBwb3NpdGlvbmVkLCBub24tcmVwbGFjZWQgZWxlbWVudHMiCisgICAgLy8g
PGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3Zpc3VkZXQuaHRtbCNhYnMtbm9uLXJlcGxhY2Vk
LXdpZHRoPgorICAgIC8vIChibG9jay1zdHlsZS1jb21tZW50cyBpbiB0aGlzIGZ1bmN0aW9uIGFu
ZCBpbiBjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKCkKKyAgICAvLyBjb3JyZXNwb25kIHRv
IHRleHQgZnJvbSB0aGUgc3BlYykKKworCisgICAgLy8gV2UgZG9uJ3QgdXNlIGNvbnRhaW5pbmdC
bG9jaygpLCBzaW5jZSB3ZSBtYXkgYmUgcG9zaXRpb25lZCBieSBhbiBlbmNsb3NpbmcKKyAgICAv
LyByZWxhdGl2ZSBwb3NpdGlvbmVkIGlubGluZS4KKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIGNv
bnRhaW5lckJsb2NrID0gY29udGFpbmVyKCk7CisgICAgCisgICAgLy8gRklYTUU6IFRoaXMgaXMg
aW5jb3JyZWN0IGZvciBjYXNlcyB3aGVyZSB0aGUgY29udGFpbmVyIGJsb2NrIGlzIGEgcmVsYXRp
dmVseQorICAgIC8vIHBvc2l0aW9uZWQgaW5saW5lLgorICAgIGNvbnN0IGludCBjb250YWluZXJX
aWR0aCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoKCkgKyBjb250YWluZXJCbG9jay0+cGFkZGluZ0xl
ZnQoKSArIGNvbnRhaW5lckJsb2NrLT5wYWRkaW5nUmlnaHQoKTsKKyAgICAKKyAgICBjb25zdCBp
bnQgYm9yZGVyc1BsdXNQYWRkaW5nID0gYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSArIHBh
ZGRpbmdMZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKTsKKyAgICBjb25zdCBMZW5ndGggbWFyZ2luTGVm
dCA9IHN0eWxlKCktPm1hcmdpbkxlZnQoKTsKKyAgICBjb25zdCBMZW5ndGggbWFyZ2luUmlnaHQg
PSBzdHlsZSgpLT5tYXJnaW5SaWdodCgpOworICAgIExlbmd0aCBsZWZ0ID0gc3R5bGUoKS0+bGVm
dCgpOworICAgIExlbmd0aCByaWdodCA9IHN0eWxlKCktPnJpZ2h0KCk7CisKKyAgICAvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSpcCisgICAgICogRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIHNlY3Rpb24g
YW5kIHRoZSBuZXh0LCB0aGUgdGVybSAic3RhdGljIHBvc2l0aW9uIgorICAgICAqIChvZiBhbiBl
bGVtZW50KSByZWZlcnMsIHJvdWdobHksIHRvIHRoZSBwb3NpdGlvbiBhbiBlbGVtZW50IHdvdWxk
IGhhdmUgaGFkCisgICAgICogaW4gdGhlIG5vcm1hbCBmbG93LiBNb3JlIHByZWNpc2VseToKKyAg
ICAgKgorICAgICAqICogVGhlIHN0YXRpYyBwb3NpdGlvbiBmb3IgJ2xlZnQnIGlzIHRoZSBkaXN0
YW5jZSBmcm9tIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlCisgICAgICogICBjb250YWluaW5nIGJsb2Nr
IHRvIHRoZSBsZWZ0IG1hcmdpbiBlZGdlIG9mIGEgaHlwb3RoZXRpY2FsIGJveCB0aGF0IHdvdWxk
CisgICAgICogICBoYXZlIGJlZW4gdGhlIGZpcnN0IGJveCBvZiB0aGUgZWxlbWVudCBpZiBpdHMg
J3Bvc2l0aW9uJyBwcm9wZXJ0eSBoYWQKKyAgICAgKiAgIGJlZW4gJ3N0YXRpYycgYW5kICdmbG9h
dCcgaGFkIGJlZW4gJ25vbmUnLiBUaGUgdmFsdWUgaXMgbmVnYXRpdmUgaWYgdGhlCisgICAgICog
ICBoeXBvdGhldGljYWwgYm94IGlzIHRvIHRoZSBsZWZ0IG9mIHRoZSBjb250YWluaW5nIGJsb2Nr
LgorICAgICAqICogVGhlIHN0YXRpYyBwb3NpdGlvbiBmb3IgJ3JpZ2h0JyBpcyB0aGUgZGlzdGFu
Y2UgZnJvbSB0aGUgcmlnaHQgZWRnZSBvZiB0aGUKKyAgICAgKiAgIGNvbnRhaW5pbmcgYmxvY2sg
dG8gdGhlIHJpZ2h0IG1hcmdpbiBlZGdlIG9mIHRoZSBzYW1lIGh5cG90aGV0aWNhbCBib3ggYXMK
KyAgICAgKiAgIGFib3ZlLiBUaGUgdmFsdWUgaXMgcG9zaXRpdmUgaWYgdGhlIGh5cG90aGV0aWNh
bCBib3ggaXMgdG8gdGhlIGxlZnQgb2YgdGhlCisgICAgICogICBjb250YWluaW5nIGJsb2NrJ3Mg
ZWRnZS4KKyAgICAgKgorICAgICAqIEJ1dCByYXRoZXIgdGhhbiBhY3R1YWxseSBjYWxjdWxhdGlu
ZyB0aGUgZGltZW5zaW9ucyBvZiB0aGF0IGh5cG90aGV0aWNhbCBib3gsCisgICAgICogdXNlciBh
Z2VudHMgYXJlIGZyZWUgdG8gbWFrZSBhIGd1ZXNzIGF0IGl0cyBwcm9iYWJsZSBwb3NpdGlvbi4K
KyAgICAgKgorICAgICAqIEZvciB0aGUgcHVycG9zZXMgb2YgY2FsY3VsYXRpbmcgdGhlIHN0YXRp
YyBwb3NpdGlvbiwgdGhlIGNvbnRhaW5pbmcgYmxvY2sgb2YKKyAgICAgKiBmaXhlZCBwb3NpdGlv
bmVkIGVsZW1lbnRzIGlzIHRoZSBpbml0aWFsIGNvbnRhaW5pbmcgYmxvY2sgaW5zdGVhZCBvZiB0
aGUKKyAgICAgKiB2aWV3cG9ydCwgYW5kIGFsbCBzY3JvbGxhYmxlIGJveGVzIHNob3VsZCBiZSBh
c3N1bWVkIHRvIGJlIHNjcm9sbGVkIHRvIHRoZWlyCisgICAgICogb3JpZ2luLgorICAgIFwqLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KKworICAgIC8vIHNlZSBGSVhNRSAyCisgICAgLy8gQ2FsY3VsYXRl
IHRoZSBzdGF0aWMgZGlzdGFuY2UgaWYgbmVlZGVkLgorICAgIGlmIChsZWZ0LmlzQXV0bygpICYm
IHJpZ2h0LmlzQXV0bygpKSB7CisgICAgICAgIGlmIChjb250YWluZXJCbG9jay0+c3R5bGUoKS0+
ZGlyZWN0aW9uKCkgPT0gTFRSKSB7CisgICAgICAgICAgICAvLyAnbV9zdGF0aWNYJyBzaG91bGQg
YWxyZWFkeSBoYXZlIGJlZW4gc2V0IHRocm91Z2ggbGF5b3V0IG9mIHRoZSBwYXJlbnQuCisgICAg
ICAgICAgICBpbnQgc3RhdGljUG9zaXRpb24gPSBtX3N0YXRpY1ggLSBjb250YWluZXJCbG9jay0+
Ym9yZGVyTGVmdCgpOworICAgICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIHBvID0gcGFyZW50
KCk7IHBvICYmIHBvICE9IGNvbnRhaW5lckJsb2NrOyBwbyA9IHBvLT5wYXJlbnQoKSkKKyAgICAg
ICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiArPSBwby0+eFBvcygpOworICAgICAgICAgICAgbGVm
dC5zZXRWYWx1ZShGaXhlZCwgc3RhdGljUG9zaXRpb24pOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgUmVuZGVyT2JqZWN0KiBwbyA9IHBhcmVudCgpOworICAgICAgICAgICAgLy8gJ21f
c3RhdGljWCcgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIHNldCB0aHJvdWdoIGxheW91dCBvZiB0
aGUgcGFyZW50LgorICAgICAgICAgICAgaW50IHN0YXRpY1Bvc2l0aW9uID0gbV9zdGF0aWNYICsg
Y29udGFpbmVyV2lkdGggKyBjb250YWluZXJCbG9jay0+Ym9yZGVyUmlnaHQoKSAtIHBvLT53aWR0
aCgpOworICAgICAgICAgICAgZm9yICg7IHBvICYmIHBvICE9IGNvbnRhaW5lckJsb2NrOyBwbyA9
IHBvLT5wYXJlbnQoKSkKKyAgICAgICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiAtPSBwby0+eFBv
cygpOworICAgICAgICAgICAgcmlnaHQuc2V0VmFsdWUoRml4ZWQsIHN0YXRpY1Bvc2l0aW9uKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENhbGN1bGF0ZSBjb25zdHJhaW50IGVxdWF0aW9u
IHZhbHVlcyBmb3IgJ3dpZHRoJyBjYXNlLgorICAgIGNhbGNBYnNvbHV0ZUhvcml6b250YWxWYWx1
ZXMoc3R5bGUoKS0+d2lkdGgoKSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lcldpZHRoLCBib3Jk
ZXJzUGx1c1BhZGRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LCBy
aWdodCwgbWFyZ2luTGVmdCwgbWFyZ2luUmlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3dpZHRoLCBtX21hcmdpbkxlZnQsIG1fbWFyZ2luUmlnaHQsIG1feCk7CisKKyAg
ICAvLyBDYWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlvbiB2YWx1ZXMgZm9yICdtYXgtd2lkdGgn
IGNhc2UuY2FsY0NvbnRlbnRCb3hXaWR0aCh3aWR0aC5jYWxjVmFsdWUoY29udGFpbmVyV2lkdGgp
KTsKKyAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0
aCkgeworICAgICAgICBpbnQgbWF4V2lkdGg7CisgICAgICAgIGludCBtYXhNYXJnaW5MZWZ0Owor
ICAgICAgICBpbnQgbWF4TWFyZ2luUmlnaHQ7CisgICAgICAgIGludCBtYXhYUG9zOworCisgICAg
ICAgIGNhbGNBYnNvbHV0ZUhvcml6b250YWxWYWx1ZXMoc3R5bGUoKS0+bWF4V2lkdGgoKSwgY29u
dGFpbmVyQmxvY2ssIGNvbnRhaW5lcldpZHRoLCBib3JkZXJzUGx1c1BhZGRpbmcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCwgcmlnaHQsIG1hcmdpbkxlZnQsIG1h
cmdpblJpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRo
LCBtYXhNYXJnaW5MZWZ0LCBtYXhNYXJnaW5SaWdodCwgbWF4WFBvcyk7CisKKyAgICAgICAgaWYg
KG1fd2lkdGggPiBtYXhXaWR0aCkgeworICAgICAgICAgICAgbV93aWR0aCA9IG1heFdpZHRoOwor
ICAgICAgICAgICAgbV9tYXJnaW5MZWZ0ID0gbWF4TWFyZ2luTGVmdDsKKyAgICAgICAgICAgIG1f
bWFyZ2luUmlnaHQgPSBtYXhNYXJnaW5SaWdodDsKKyAgICAgICAgICAgIG1feCA9IG1heFhQb3M7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDYWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlv
biB2YWx1ZXMgZm9yICdtaW4td2lkdGgnIGNhc2UuCisgICAgaWYgKHN0eWxlKCktPm1pbldpZHRo
KCkudmFsdWUoKSkgeworICAgICAgICBpbnQgbWluV2lkdGg7CisgICAgICAgIGludCBtaW5NYXJn
aW5MZWZ0OworICAgICAgICBpbnQgbWluTWFyZ2luUmlnaHQ7CisgICAgICAgIGludCBtaW5YUG9z
OworCisgICAgICAgIGNhbGNBYnNvbHV0ZUhvcml6b250YWxWYWx1ZXMoc3R5bGUoKS0+bWluV2lk
dGgoKSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lcldpZHRoLCBib3JkZXJzUGx1c1BhZGRpbmcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCwgcmlnaHQsIG1hcmdp
bkxlZnQsIG1hcmdpblJpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1pbldpZHRoLCBtaW5NYXJnaW5MZWZ0LCBtaW5NYXJnaW5SaWdodCwgbWluWFBvcyk7CisKKyAg
ICAgICAgaWYgKG1fd2lkdGggPCBtaW5XaWR0aCkgeworICAgICAgICAgICAgbV93aWR0aCA9IG1p
bldpZHRoOworICAgICAgICAgICAgbV9tYXJnaW5MZWZ0ID0gbWluTWFyZ2luTGVmdDsKKyAgICAg
ICAgICAgIG1fbWFyZ2luUmlnaHQgPSBtaW5NYXJnaW5SaWdodDsKKyAgICAgICAgICAgIG1feCA9
IG1pblhQb3M7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBQdXQgbV93aWR0aCBpbnRvIGNv
cnJlY3QgZm9ybS4KKyAgICBtX3dpZHRoICs9IGJvcmRlcnNQbHVzUGFkZGluZzsKK30KKwordm9p
ZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWxWYWx1ZXMoTGVuZ3RoIHdpZHRoLCBj
b25zdCBSZW5kZXJPYmplY3QqIGNvbnRhaW5lckJsb2NrLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGNvbnRhaW5lcldpZHRoLCBjb25zdCBp
bnQgYm9yZGVyc1BsdXNQYWRkaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgTGVuZ3RoIGxlZnQsIGNvbnN0IExlbmd0aCByaWdodCwgY29uc3Qg
TGVuZ3RoIG1hcmdpbkxlZnQsIGNvbnN0IExlbmd0aCBtYXJnaW5SaWdodCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgd2lkdGhWYWx1ZSwgaW50JiBt
YXJnaW5MZWZ0VmFsdWUsIGludCYgbWFyZ2luUmlnaHRWYWx1ZSwgaW50JiB4UG9zKQoreworICAg
IC8vICdsZWZ0JyBhbmQgJ3JpZ2h0JyBjYW5ub3QgYm90aCBiZSAnYXV0bycgYmVjYXVzZSBvbmUg
d291bGQgb2YgYmVlbgorICAgIC8vIGNvbnZlcnRlZCB0byB0aGUgc3RhdGljIHBvc3Rpb24gYWxy
ZWFkeQorICAgIEFTU0VSVCghKGxlZnQuaXNBdXRvKCkgJiYgcmlnaHQuaXNBdXRvKCkpKTsKKwor
ICAgIGludCBsZWZ0VmFsdWU7CisKKyAgICBib29sIHdpZHRoSXNBdXRvID0gd2lkdGguaXNJbnRy
aW5zaWNPckF1dG8oKTsKKyAgICBib29sIGxlZnRJc0F1dG8gPSBsZWZ0LmlzQXV0bygpOworICAg
IGJvb2wgcmlnaHRJc0F1dG8gPSByaWdodC5pc0F1dG8oKTsKKworICAgIGlmICghbGVmdElzQXV0
byAmJiAhd2lkdGhJc0F1dG8gJiYgIXJpZ2h0SXNBdXRvKSB7CisgICAgICAgIC8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qXAorICAgICAgICAgKiBJZiBub25lIG9mIHRoZSB0aHJlZSBpcyAnYXV0byc6IElmIGJv
dGggJ21hcmdpbi1sZWZ0JyBhbmQgJ21hcmdpbi0KKyAgICAgICAgICogcmlnaHQnIGFyZSAnYXV0
bycsIHNvbHZlIHRoZSBlcXVhdGlvbiB1bmRlciB0aGUgZXh0cmEgY29uc3RyYWludCB0aGF0Cisg
ICAgICAgICAqIHRoZSB0d28gbWFyZ2lucyBnZXQgZXF1YWwgdmFsdWVzLCB1bmxlc3MgdGhpcyB3
b3VsZCBtYWtlIHRoZW0gbmVnYXRpdmUsCisgICAgICAgICAqIGluIHdoaWNoIGNhc2Ugd2hlbiBk
aXJlY3Rpb24gb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgKCdydGwnKSwKKyAgICAg
ICAgICogc2V0ICdtYXJnaW4tbGVmdCcgKCdtYXJnaW4tcmlnaHQnKSB0byB6ZXJvIGFuZCBzb2x2
ZSBmb3IgJ21hcmdpbi1yaWdodCcKKyAgICAgICAgICogKCdtYXJnaW4tbGVmdCcpLiBJZiBvbmUg
b2YgJ21hcmdpbi1sZWZ0JyBvciAnbWFyZ2luLXJpZ2h0JyBpcyAnYXV0bycsCisgICAgICAgICAq
IHNvbHZlIHRoZSBlcXVhdGlvbiBmb3IgdGhhdCB2YWx1ZS4gSWYgdGhlIHZhbHVlcyBhcmUgb3Zl
ci1jb25zdHJhaW5lZCwKKyAgICAgICAgICogaWdub3JlIHRoZSB2YWx1ZSBmb3IgJ2xlZnQnIChp
biBjYXNlIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUKKyAgICAgICAgICogY29udGFp
bmluZyBibG9jayBpcyAncnRsJykgb3IgJ3JpZ2h0JyAoaW4gY2FzZSAnZGlyZWN0aW9uJyBpcyAn
bHRyJykKKyAgICAgICAgICogYW5kIHNvbHZlIGZvciB0aGF0IHZhbHVlLgorICAgICAgICBcKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KKyAgICAgICAgLy8gTk9URTogIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8g
c29sdmUgZm9yICdyaWdodCcgaW4gdGhlIG92ZXIgY29uc3RyYWluZWQKKyAgICAgICAgLy8gY2Fz
ZSBiZWNhdXNlIHRoZSB2YWx1ZSBpcyBub3QgdXNlZCBmb3IgYW55IGZ1cnRoZXIgY2FsY3VsYXRp
b25zLgorCisgICAgICAgIGxlZnRWYWx1ZSA9IGxlZnQuY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRo
KTsKKyAgICAgICAgd2lkdGhWYWx1ZSA9IGNhbGNDb250ZW50Qm94V2lkdGgod2lkdGguY2FsY1Zh
bHVlKGNvbnRhaW5lcldpZHRoKSk7CisKKyAgICAgICAgY29uc3QgaW50IGF2YWlsYWJsZVNwYWNl
ID0gY29udGFpbmVyV2lkdGggLSAobGVmdFZhbHVlICsgd2lkdGhWYWx1ZSArIHJpZ2h0LmNhbGNW
YWx1ZShjb250YWluZXJXaWR0aCkgKyBib3JkZXJzUGx1c1BhZGRpbmcpOworCisgICAgICAgIC8v
IE1hcmdpbnMgYXJlIG5vdyB0aGUgb25seSB1bmtub3duCisgICAgICAgIGlmIChtYXJnaW5MZWZ0
LmlzQXV0bygpICYmIG1hcmdpblJpZ2h0LmlzQXV0bygpKSB7CisgICAgICAgICAgICAvLyBCb3Ro
IG1hcmdpbnMgYXV0bywgc29sdmUgZm9yIGVxdWFsaXR5CisgICAgICAgICAgICBpZiAoYXZhaWxh
YmxlU3BhY2UgPj0gMCkgeworICAgICAgICAgICAgICAgIG1hcmdpbkxlZnRWYWx1ZSA9IGF2YWls
YWJsZVNwYWNlIC8gMjsgLy8gc3BsaXQgdGhlIGRpZmVyZW5jZQorICAgICAgICAgICAgICAgIG1h
cmdpblJpZ2h0VmFsdWUgPSBhdmFpbGFibGVTcGFjZSAtIG1hcmdpbkxlZnRWYWx1ZTsgIC8vIGFj
Y291bnQgZm9yIG9kZCB2YWx1ZWQgZGlmZmVyZW5jZXMKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgLy8gc2VlIEZJWE1FIDEKKyAgICAgICAgICAgICAgICBpZiAoY29udGFp
bmVyQmxvY2stPnN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgeworICAgICAgICAgICAgICAg
ICAgICBtYXJnaW5MZWZ0VmFsdWUgPSAwOworICAgICAgICAgICAgICAgICAgICBtYXJnaW5SaWdo
dFZhbHVlID0gYXZhaWxhYmxlU3BhY2U7IC8vIHdpbGwgYmUgbmVnYXRpdmUKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0VmFsdWUgPSBhdmFp
bGFibGVTcGFjZTsgLy8gd2lsbCBiZSBuZWdhdGl2ZQorICAgICAgICAgICAgICAgICAgICBtYXJn
aW5SaWdodFZhbHVlID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSBpZiAobWFyZ2luTGVmdC5pc0F1dG8oKSkgeworICAgICAgICAgICAgLy8gU29s
dmUgZm9yIGxlZnQgbWFyZ2luCisgICAgICAgICAgICBtYXJnaW5SaWdodFZhbHVlID0gbWFyZ2lu
UmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRoKTsKKyAgICAgICAgICAgIG1hcmdpbkxlZnRW
YWx1ZSA9IGF2YWlsYWJsZVNwYWNlIC0gbWFyZ2luUmlnaHRWYWx1ZTsKKyAgICAgICAgfSBlbHNl
IGlmIChtYXJnaW5SaWdodC5pc0F1dG8oKSkgeworICAgICAgICAgICAgLy8gU29sdmUgZm9yIHJp
Z2h0IG1hcmdpbgorICAgICAgICAgICAgbWFyZ2luTGVmdFZhbHVlID0gbWFyZ2luTGVmdC5jYWxj
VmFsdWUoY29udGFpbmVyV2lkdGgpOworICAgICAgICAgICAgbWFyZ2luUmlnaHRWYWx1ZSA9IGF2
YWlsYWJsZVNwYWNlIC0gbWFyZ2luTGVmdFZhbHVlOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gT3Zlci1jb25zdHJhaW5lZCwgc29sdmUgZm9yIGxlZnQgaWYgZGlyZWN0aW9uIGlz
IFJUTAorICAgICAgICAgICAgbWFyZ2luTGVmdFZhbHVlID0gbWFyZ2luTGVmdC5jYWxjVmFsdWUo
Y29udGFpbmVyV2lkdGgpOworICAgICAgICAgICAgbWFyZ2luUmlnaHRWYWx1ZSA9IG1hcmdpblJp
Z2h0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCk7CisKKyAgICAgICAgICAgIC8vIHNlZSBGSVhN
RSAxIC0tIHVzZWQgdG8gYmUgInRoaXMtPnN0eWxlKCktPmRpcmVjdGlvbigpIgorICAgICAgICAg
ICAgaWYgKGNvbnRhaW5lckJsb2NrLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAg
ICAgICAgICAgICAgbGVmdFZhbHVlID0gKGF2YWlsYWJsZVNwYWNlICsgbGVmdFZhbHVlKSAtIG1h
cmdpbkxlZnRWYWx1ZSAtIG1hcmdpblJpZ2h0VmFsdWU7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKKyAgICAgICAgICogT3RoZXJ3aXNlLCBzZXQgJ2F1
dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi1sZWZ0JyBhbmQgJ21hcmdpbi1yaWdodCcKKyAgICAgICAg
ICogdG8gMCwgYW5kIHBpY2sgdGhlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHNpeCBydWxlcyB0aGF0
IGFwcGxpZXMuCisgICAgICAgICAqCisgICAgICAgICAqIDEuICdsZWZ0JyBhbmQgJ3dpZHRoJyBh
cmUgJ2F1dG8nIGFuZCAncmlnaHQnIGlzIG5vdCAnYXV0bycsIHRoZW4gdGhlCisgICAgICAgICAq
ICAgIHdpZHRoIGlzIHNocmluay10by1maXQuIFRoZW4gc29sdmUgZm9yICdsZWZ0JworICAgICAg
ICAgKgorICAgICAgICAgKiAgICAgICAgICAgICAgT01JVCBSVUxFIDIgQVMgSVQgU0hPVUxEIE5F
VkVSIEJFIEhJVAorICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICogMi4gJ2xlZnQnIGFu
ZCAncmlnaHQnIGFyZSAnYXV0bycgYW5kICd3aWR0aCcgaXMgbm90ICdhdXRvJywgdGhlbiBpZgor
ICAgICAgICAgKiAgICB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlIGNvbnRhaW5pbmcg
YmxvY2sgaXMgJ2x0cicgc2V0CisgICAgICAgICAqICAgICdsZWZ0JyB0byB0aGUgc3RhdGljIHBv
c2l0aW9uLCBvdGhlcndpc2Ugc2V0ICdyaWdodCcgdG8gdGhlCisgICAgICAgICAqICAgIHN0YXRp
YyBwb3NpdGlvbi4gVGhlbiBzb2x2ZSBmb3IgJ2xlZnQnIChpZiAnZGlyZWN0aW9uIGlzICdydGwn
KQorICAgICAgICAgKiAgICBvciAncmlnaHQnIChpZiAnZGlyZWN0aW9uJyBpcyAnbHRyJykuCisg
ICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgKgorICAgICAgICAgKiAzLiAnd2lkdGgnIGFu
ZCAncmlnaHQnIGFyZSAnYXV0bycgYW5kICdsZWZ0JyBpcyBub3QgJ2F1dG8nLCB0aGVuIHRoZQor
ICAgICAgICAgKiAgICB3aWR0aCBpcyBzaHJpbmstdG8tZml0IC4gVGhlbiBzb2x2ZSBmb3IgJ3Jp
Z2h0JworICAgICAgICAgKiA0LiAnbGVmdCcgaXMgJ2F1dG8nLCAnd2lkdGgnIGFuZCAncmlnaHQn
IGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNvbHZlCisgICAgICAgICAqICAgIGZvciAnbGVmdCcKKyAg
ICAgICAgICogNS4gJ3dpZHRoJyBpcyAnYXV0bycsICdsZWZ0JyBhbmQgJ3JpZ2h0JyBhcmUgbm90
ICdhdXRvJywgdGhlbiBzb2x2ZQorICAgICAgICAgKiAgICBmb3IgJ3dpZHRoJworICAgICAgICAg
KiA2LiAncmlnaHQnIGlzICdhdXRvJywgJ2xlZnQnIGFuZCAnd2lkdGgnIGFyZSBub3QgJ2F1dG8n
LCB0aGVuIHNvbHZlCisgICAgICAgICAqICAgIGZvciAncmlnaHQnCisgICAgICAgICAqCisgICAg
ICAgICAqIENhbGN1bGF0aW9uIG9mIHRoZSBzaHJpbmstdG8tZml0IHdpZHRoIGlzIHNpbWlsYXIg
dG8gY2FsY3VsYXRpbmcgdGhlCisgICAgICAgICAqIHdpZHRoIG9mIGEgdGFibGUgY2VsbCB1c2lu
ZyB0aGUgYXV0b21hdGljIHRhYmxlIGxheW91dCBhbGdvcml0aG0uCisgICAgICAgICAqIFJvdWdo
bHk6IGNhbGN1bGF0ZSB0aGUgcHJlZmVycmVkIHdpZHRoIGJ5IGZvcm1hdHRpbmcgdGhlIGNvbnRl
bnQKKyAgICAgICAgICogd2l0aG91dCBicmVha2luZyBsaW5lcyBvdGhlciB0aGFuIHdoZXJlIGV4
cGxpY2l0IGxpbmUgYnJlYWtzIG9jY3VyLAorICAgICAgICAgKiBhbmQgYWxzbyBjYWxjdWxhdGUg
dGhlIHByZWZlcnJlZCBtaW5pbXVtIHdpZHRoLCBlLmcuLCBieSB0cnlpbmcgYWxsCisgICAgICAg
ICAqIHBvc3NpYmxlIGxpbmUgYnJlYWtzLiBDU1MgMi4xIGRvZXMgbm90IGRlZmluZSB0aGUgZXhh
Y3QgYWxnb3JpdGhtLgorICAgICAgICAgKiBUaGlyZGx5LCBjYWxjdWxhdGUgdGhlIGF2YWlsYWJs
ZSB3aWR0aDogdGhpcyBpcyBmb3VuZCBieSBzb2x2aW5nCisgICAgICAgICAqIGZvciAnd2lkdGgn
IGFmdGVyIHNldHRpbmcgJ2xlZnQnIChpbiBjYXNlIDEpIG9yICdyaWdodCcgKGluIGNhc2UgMykK
KyAgICAgICAgICogdG8gMC4KKyAgICAgICAgICoKKyAgICAgICAgICogVGhlbiB0aGUgc2hyaW5r
LXRvLWZpdCB3aWR0aCBpczoKKyAgICAgICAgICogbWluKG1heChwcmVmZXJyZWQgbWluaW11bSB3
aWR0aCwgYXZhaWxhYmxlIHdpZHRoKSwgcHJlZmVycmVkIHdpZHRoKS4KKyAgICAgICAgXCotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCisgICAgICAgIC8vIE5PVEU6IEZvciBydWxlcyAzIGFuZCA2IGl0IGlzIG5vdCBu
ZWNlc3NhcnkgdG8gc29sdmUgZm9yICdyaWdodCcKKyAgICAgICAgLy8gYmVjYXVzZSB0aGUgdmFs
dWUgaXMgbm90IHVzZWQgZm9yIGFueSBmdXJ0aGVyIGNhbGN1bGF0aW9ucy4KKworICAgICAgICAv
LyBDYWxjdWxhdGUgbWFyZ2lucywgJ2F1dG8nIG1hcmdpbnMgYXJlIGlnbm9yZWQuCisgICAgICAg
IG1hcmdpbkxlZnRWYWx1ZSA9IG1hcmdpbkxlZnQuY2FsY01pblZhbHVlKGNvbnRhaW5lcldpZHRo
KTsKKyAgICAgICAgbWFyZ2luUmlnaHRWYWx1ZSA9IG1hcmdpblJpZ2h0LmNhbGNNaW5WYWx1ZShj
b250YWluZXJXaWR0aCk7CisKKyAgICAgICAgY29uc3QgaW50IGF2YWlsYWJsZVNwYWNlID0gY29u
dGFpbmVyV2lkdGggLSAobWFyZ2luTGVmdFZhbHVlICsgbWFyZ2luUmlnaHRWYWx1ZSArIGJvcmRl
cnNQbHVzUGFkZGluZyk7CisKKyAgICAgICAgLy8gRklYTUU6IElzIHRoZXJlIGEgZmFzdGVyIHdh
eSB0byBmaW5kIHRoZSBjb3JyZWN0IGNhc2U/CisgICAgICAgIC8vIFVzZSBydWxlL2Nhc2UgdGhh
dCBhcHBsaWVzLgorICAgICAgICBpZiAobGVmdElzQXV0byAmJiB3aWR0aElzQXV0byAmJiAhcmln
aHRJc0F1dG8pIHsKKyAgICAgICAgICAgIC8vIFJVTEUgMTogKHVzZSBzaHJpbmstdG8tZml0IGZv
ciB3aWR0aCwgYW5kIHNvbHZlIG9mIGxlZnQpCisgICAgICAgICAgICBpbnQgcmlnaHRWYWx1ZSA9
IHJpZ2h0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCk7CisKKyAgICAgICAgICAgIC8vIEZJWE1F
OiB3b3VsZCBpdCBiZSBiZXR0ZXIgdG8gaGF2ZSBzaHJpbmstdG8tZml0IGluIG9uZSBzdGVwPwor
ICAgICAgICAgICAgaW50IHByZWZlcnJlZFdpZHRoID0gbV9tYXhXaWR0aCAtIGJvcmRlcnNQbHVz
UGFkZGluZzsKKyAgICAgICAgICAgIGludCBwcmVmZXJyZWRNaW5XaWR0aCA9IG1fbWluV2lkdGgg
LSBib3JkZXJzUGx1c1BhZGRpbmc7CisgICAgICAgICAgICBpbnQgYXZhaWxhYmxlV2lkdGggPSBh
dmFpbGFibGVTcGFjZSAtIHJpZ2h0VmFsdWU7CisgICAgICAgICAgICB3aWR0aFZhbHVlID0gbWlu
KG1heChwcmVmZXJyZWRNaW5XaWR0aCwgYXZhaWxhYmxlV2lkdGgpLCBwcmVmZXJyZWRXaWR0aCk7
CisgICAgICAgICAgICBsZWZ0VmFsdWUgPSBhdmFpbGFibGVTcGFjZSAtICh3aWR0aFZhbHVlICsg
cmlnaHRWYWx1ZSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWxlZnRJc0F1dG8gJiYgd2lkdGhJc0F1
dG8gJiYgcmlnaHRJc0F1dG8pIHsKKyAgICAgICAgICAgIC8vIFJVTEUgMzogKHVzZSBzaHJpbmst
dG8tZml0IGZvciB3aWR0aCwgYW5kIG5vIG5lZWQgc29sdmUgb2YgcmlnaHQpCisgICAgICAgICAg
ICBsZWZ0VmFsdWUgPSBsZWZ0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCk7CisKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiB3b3VsZCBpdCBiZSBiZXR0ZXIgdG8gaGF2ZSBzaHJpbmstdG8tZml0IGlu
IG9uZSBzdGVwPworICAgICAgICAgICAgaW50IHByZWZlcnJlZFdpZHRoID0gbV9tYXhXaWR0aCAt
IGJvcmRlcnNQbHVzUGFkZGluZzsKKyAgICAgICAgICAgIGludCBwcmVmZXJyZWRNaW5XaWR0aCA9
IG1fbWluV2lkdGggLSBib3JkZXJzUGx1c1BhZGRpbmc7CisgICAgICAgICAgICBpbnQgYXZhaWxh
YmxlV2lkdGggPSBhdmFpbGFibGVTcGFjZSAtIGxlZnRWYWx1ZTsKKyAgICAgICAgICAgIHdpZHRo
VmFsdWUgPSBtaW4obWF4KHByZWZlcnJlZE1pbldpZHRoLCBhdmFpbGFibGVXaWR0aCksIHByZWZl
cnJlZFdpZHRoKTsKKyAgICAgICAgfSBlbHNlIGlmIChsZWZ0SXNBdXRvICYmICF3aWR0aC5pc0F1
dG8oKSAmJiAhcmlnaHRJc0F1dG8pIHsKKyAgICAgICAgICAgIC8vIFJVTEUgNDogKHNvbHZlIGZv
ciBsZWZ0KQorICAgICAgICAgICAgd2lkdGhWYWx1ZSA9IGNhbGNDb250ZW50Qm94V2lkdGgod2lk
dGguY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRoKSk7CisgICAgICAgICAgICBsZWZ0VmFsdWUgPSBh
dmFpbGFibGVTcGFjZSAtICh3aWR0aFZhbHVlICsgcmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lcldp
ZHRoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWxlZnRJc0F1dG8gJiYgd2lkdGhJc0F1dG8gJiYg
IXJpZ2h0SXNBdXRvKSB7CisgICAgICAgICAgICAvLyBSVUxFIDU6IChzb2x2ZSBmb3Igd2lkdGgp
CisgICAgICAgICAgICBsZWZ0VmFsdWUgPSBsZWZ0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCk7
CisgICAgICAgICAgICB3aWR0aFZhbHVlID0gYXZhaWxhYmxlU3BhY2UgLSAobGVmdFZhbHVlICsg
cmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWxl
ZnRJc0F1dG8mJiAhd2lkdGhJc0F1dG8gJiYgcmlnaHRJc0F1dG8pIHsKKyAgICAgICAgICAgIC8v
IFJVTEUgNjogKG5vIG5lZWQgc29sdmUgZm9yIHJpZ2h0KQorICAgICAgICAgICAgbGVmdFZhbHVl
ID0gbGVmdC5jYWxjVmFsdWUoY29udGFpbmVyV2lkdGgpOworICAgICAgICAgICAgd2lkdGhWYWx1
ZSA9IGNhbGNDb250ZW50Qm94V2lkdGgod2lkdGguY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRoKSk7
CisgICAgICAgIH0KICAgICB9CiAKLSAgICBlbHNlIGlmICgocGFyZW50KCktPnN0eWxlKCktPmRp
cmVjdGlvbigpPT1SVEwgJiYgKGw9PUFVVE8gJiYgcj09QVVUTyApKQotICAgICAgICAgICAgfHwg
c3R5bGUoKS0+cmlnaHQoKS5pc1N0YXRpYygpKQotICAgIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0
KiBwbyA9IHBhcmVudCgpOwotICAgICAgICBzdGF0aWNfZGlzdGFuY2UgPSBtX3N0YXRpY1ggKyBj
dyArIGNiLT5ib3JkZXJSaWdodCgpIC0gcG8tPndpZHRoKCk7IC8vIFNob3VsZCBhbHJlYWR5IGhh
dmUgYmVlbiBzZXQgdGhyb3VnaCBsYXlvdXQgb2YgdGhlIHBhcmVudCgpLgotICAgICAgICB3aGls
ZSAocG8gJiYgcG8hPWNvbnRhaW5pbmdCbG9jaygpKSB7Ci0gICAgICAgICAgICBzdGF0aWNfZGlz
dGFuY2UgLT0gcG8tPnhQb3MoKTsKLSAgICAgICAgICAgIHBvPXBvLT5wYXJlbnQoKTsKLSAgICAg
ICAgfQorICAgIC8vIFVzZSBjb21wdXRlZCB2YWx1ZXMgdG8gY2FsY3VsYXRlIHRoZSBob3Jpem9u
dGFsIHBvc2l0aW9uLgorICAgIHhQb3MgPSBsZWZ0VmFsdWUgKyBtYXJnaW5MZWZ0VmFsdWUgKyBj
b250YWluZXJCbG9jay0+Ym9yZGVyTGVmdCgpOworfQogCi0gICAgICAgIHIgPSBzdGF0aWNfZGlz
dGFuY2U7Cit2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlVmVydGljYWwoKQoreworICAgIGlm
IChpc1JlcGxhY2VkKCkpIHsKKyAgICAgICAgY2FsY0Fic29sdXRlVmVydGljYWxSZXBsYWNlZCgp
OworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY2FsY0Fic29sdXRlSG9yaXpvbnRhbFZh
bHVlcyhXaWR0aCwgY2IsIGN3LCBwYWIsIHN0YXRpY19kaXN0YW5jZSwgbCwgciwgbV93aWR0aCwg
bV9tYXJnaW5MZWZ0LCBtX21hcmdpblJpZ2h0LCBtX3gpOworICAgIC8vIFRoZSBmb2xsb3dpbmcg
aXMgYmFzZWQgb2ZmIG9mIHRoZSBXM0MgV29ya2luZyBEcmFmdCBmcm9tIEFwcmlsIDExLCAyMDA2
IG9mCisgICAgLy8gQ1NTIDIuMTogU2VjdGlvbiAxMC42LjQgIkFic29sdXRlbHkgcG9zaXRpb25l
ZCwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzIgorICAgIC8vIDxodHRwOi8vd3d3LnczLm9yZy9UUi8y
MDA1L1dELUNTUzIxLTIwMDUwNjEzL3Zpc3VkZXQuaHRtbCNhYnMtbm9uLXJlcGxhY2VkLWhlaWdo
dD4KKyAgICAvLyAoYmxvY2stc3R5bGUtY29tbWVudHMgaW4gdGhpcyBmdW5jdGlvbiBhbmQgaW4g
Y2FsY0Fic29sdXRlVmVydGljYWxWYWx1ZXMoKQorICAgIC8vIGNvcnJlc3BvbmQgdG8gdGV4dCBm
cm9tIHRoZSBzcGVjKQogCi0gICAgLy8gQXZvaWQgZG9pbmcgYW55IHdvcmsgaW4gdGhlIGNvbW1v
biBjYXNlICh3aGVyZSB0aGUgdmFsdWVzIG9mIG1pbi13aWR0aCBhbmQgbWF4LXdpZHRoIGFyZSB0
aGVpciBkZWZhdWx0cykuCi0gICAgaW50IG1pblcgPSBtX3dpZHRoLCBtaW5NTCwgbWluTVIsIG1p
blg7Ci0gICAgY2FsY0Fic29sdXRlSG9yaXpvbnRhbFZhbHVlcyhNaW5XaWR0aCwgY2IsIGN3LCBw
YWIsIHN0YXRpY19kaXN0YW5jZSwgbCwgciwgbWluVywgbWluTUwsIG1pbk1SLCBtaW5YKTsKIAot
ICAgIGludCBtYXhXID0gbV93aWR0aCwgbWF4TUwsIG1heE1SLCBtYXhYOwotICAgIGlmIChzdHls
ZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKQotICAgICAgICBjYWxj
QWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKE1heFdpZHRoLCBjYiwgY3csIHN0YXRpY19kaXN0YW5j
ZSwgcGFiLCBsLCByLCBtYXhXLCBtYXhNTCwgbWF4TVIsIG1heFgpOworICAgIC8vIFdlIGRvbid0
IHVzZSBjb250YWluaW5nQmxvY2soKSwgc2luY2Ugd2UgbWF5IGJlIHBvc2l0aW9uZWQgYnkgYW4g
ZW5jbG9zaW5nIHJlbHBvc2l0aW9uZWQgaW5saW5lLgorICAgIGNvbnN0IFJlbmRlck9iamVjdCog
Y29udGFpbmVyQmxvY2sgPSBjb250YWluZXIoKTsKIAotICAgIGlmIChtX3dpZHRoID4gbWF4Vykg
ewotICAgICAgICBtX3dpZHRoID0gbWF4VzsKLSAgICAgICAgbV9tYXJnaW5MZWZ0ID0gbWF4TUw7
Ci0gICAgICAgIG1fbWFyZ2luUmlnaHQgPSBtYXhNUjsKLSAgICAgICAgbV94ID0gbWF4WDsKLSAg
ICB9Ci0gICAgCi0gICAgaWYgKG1fd2lkdGggPCBtaW5XKSB7Ci0gICAgICAgIG1fd2lkdGggPSBt
aW5XOwotICAgICAgICBtX21hcmdpbkxlZnQgPSBtaW5NTDsKLSAgICAgICAgbV9tYXJnaW5SaWdo
dCA9IG1pbk1SOwotICAgICAgICBtX3ggPSBtaW5YOworICAgIC8vIEV2ZW4gaW4gc3RyaWN0IG1v
ZGUgKHdoZXJlIHdlIGRvbid0IGdyb3cgdGhlIHJvb3QgdG8gZmlsbCB0aGUgdmlld3BvcnQpIG90
aGVyIGJyb3dzZXJzCisgICAgLy8gcG9zaXRpb24gYXMgdGhvdWdoIHRoZSByb290IGZpbGxzIHRo
ZSB2aWV3cG9ydC4KKyAgICBjb25zdCBpbnQgY29udGFpbmVySGVpZ2h0ID0gY29udGFpbmVyQmxv
Y2stPmlzUm9vdCgpID8gY29udGFpbmVyQmxvY2stPmF2YWlsYWJsZUhlaWdodCgpIDogKGNvbnRh
aW5lckJsb2NrLT5oZWlnaHQoKSAtIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJUb3AoKSAtIGNvbnRh
aW5lckJsb2NrLT5ib3JkZXJCb3R0b20oKSk7CisgICAgCisgICAgY29uc3QgaW50IGJvcmRlcnNQ
bHVzUGFkZGluZyA9IGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nVG9wKCkg
KyBwYWRkaW5nQm90dG9tKCk7CisgICAgY29uc3QgTGVuZ3RoIG1hcmdpblRvcCA9IHN0eWxlKCkt
Pm1hcmdpblRvcCgpOworICAgIGNvbnN0IExlbmd0aCBtYXJnaW5Cb3R0b20gPSBzdHlsZSgpLT5t
YXJnaW5Cb3R0b20oKTsKKyAgICBMZW5ndGggdG9wID0gc3R5bGUoKS0+dG9wKCk7CisgICAgTGVu
Z3RoIGJvdHRvbSA9IHN0eWxlKCktPmJvdHRvbSgpOworCisgICAgLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qXAorICAgICAqIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBzZWN0aW9uIGFuZCB0aGUgbmV4
dCwgdGhlIHRlcm0gInN0YXRpYyBwb3NpdGlvbiIKKyAgICAgKiAob2YgYW4gZWxlbWVudCkgcmVm
ZXJzLCByb3VnaGx5LCB0byB0aGUgcG9zaXRpb24gYW4gZWxlbWVudCB3b3VsZCBoYXZlIGhhZAor
ICAgICAqIGluIHRoZSBub3JtYWwgZmxvdy4gTW9yZSBwcmVjaXNlbHksIHRoZSBzdGF0aWMgcG9z
aXRpb24gZm9yICd0b3AnIGlzIHRoZQorICAgICAqIGRpc3RhbmNlIGZyb20gdGhlIHRvcCBlZGdl
IG9mIHRoZSBjb250YWluaW5nIGJsb2NrIHRvIHRoZSB0b3AgbWFyZ2luIGVkZ2UKKyAgICAgKiBv
ZiBhIGh5cG90aGV0aWNhbCBib3ggdGhhdCB3b3VsZCBoYXZlIGJlZW4gdGhlIGZpcnN0IGJveCBv
ZiB0aGUgZWxlbWVudCBpZgorICAgICAqIGl0cyAncG9zaXRpb24nIHByb3BlcnR5IGhhZCBiZWVu
ICdzdGF0aWMnIGFuZCAnZmxvYXQnIGhhZCBiZWVuICdub25lJy4gVGhlCisgICAgICogdmFsdWUg
aXMgbmVnYXRpdmUgaWYgdGhlIGh5cG90aGV0aWNhbCBib3ggaXMgYWJvdmUgdGhlIGNvbnRhaW5p
bmcgYmxvY2suCisgICAgICoKKyAgICAgKiBCdXQgcmF0aGVyIHRoYW4gYWN0dWFsbHkgY2FsY3Vs
YXRpbmcgdGhlIGRpbWVuc2lvbnMgb2YgdGhhdCBoeXBvdGhldGljYWwKKyAgICAgKiBib3gsIHVz
ZXIgYWdlbnRzIGFyZSBmcmVlIHRvIG1ha2UgYSBndWVzcyBhdCBpdHMgcHJvYmFibGUgcG9zaXRp
b24uCisgICAgICoKKyAgICAgKiBGb3IgdGhlIHB1cnBvc2VzIG9mIGNhbGN1bGF0aW5nIHRoZSBz
dGF0aWMgcG9zaXRpb24sIHRoZSBjb250YWluaW5nIGJsb2NrCisgICAgICogb2YgZml4ZWQgcG9z
aXRpb25lZCBlbGVtZW50cyBpcyB0aGUgaW5pdGlhbCBjb250YWluaW5nIGJsb2NrIGluc3RlYWQg
b2YKKyAgICAgKiB0aGUgdmlld3BvcnQuCisgICAgXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisg
ICAgLy8gc2VlIEZJWE1FIDIKKyAgICAvLyBDYWxjdWxhdGUgdGhlIHN0YXRpYyBkaXN0YW5jZSBp
ZiBuZWVkZWQuCisgICAgaWYgKHRvcC5pc0F1dG8oKSAmJiBib3R0b20uaXNBdXRvKCkpIHsKKyAg
ICAgICAgLy8gbV9zdGF0aWNZIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBzZXQgdGhyb3VnaCBs
YXlvdXQgb2YgdGhlIHBhcmVudCgpCisgICAgICAgIGludCBzdGF0aWNUb3AgPSBtX3N0YXRpY1kg
LSBjb250YWluZXJCbG9jay0+Ym9yZGVyVG9wKCk7CisgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBwbyA9IHBhcmVudCgpOyBwbyAmJiBwbyAhPSBjb250YWluZXJCbG9jazsgcG8gPSBwby0+cGFy
ZW50KCkpIHsKKyAgICAgICAgICAgIGlmICghcG8tPmlzVGFibGVSb3coKSkKKyAgICAgICAgICAg
ICAgICBzdGF0aWNUb3AgKz0gcG8tPnlQb3MoKTsKKyAgICAgICAgfQorICAgICAgICB0b3Auc2V0
VmFsdWUoRml4ZWQsIHN0YXRpY1RvcCk7CiAgICAgfQotfQogCi12b2lkIFJlbmRlckJveDo6Y2Fs
Y0Fic29sdXRlSG9yaXpvbnRhbFZhbHVlcyhXaWR0aFR5cGUgd2lkdGhUeXBlLCBSZW5kZXJPYmpl
Y3QqIGNiLCBpbnQgY3csIGludCBwYWIsIGludCBzdGF0aWNfZGlzdGFuY2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbCwgaW50IHIsIGludCYgdywg
aW50JiBtbCwgaW50JiBtciwgaW50JiB4KQotewotICAgIGNvbnN0IGludCBBVVRPID0gLTY2NjY2
NjsKLSAgICB3ID0gbWwgPSBtciA9IEFVVE87CiAKLSAgICBpZiAoIXN0eWxlKCktPm1hcmdpbkxl
ZnQoKS5pc0F1dG8oKSkKLSAgICAgICAgbWwgPSBzdHlsZSgpLT5tYXJnaW5MZWZ0KCkuY2FsY1Zh
bHVlKGN3KTsKLSAgICBpZiAoIXN0eWxlKCktPm1hcmdpblJpZ2h0KCkuaXNBdXRvKCkpCi0gICAg
ICAgIG1yID0gc3R5bGUoKS0+bWFyZ2luUmlnaHQoKS5jYWxjVmFsdWUoY3cpOworICAgIGludCBo
ZWlnaHQ7IC8vIE5lZWRlZCB0byBjb21wdXRlIG92ZXJmbG93LgogCi0gICAgTGVuZ3RoIHdpZHRo
OwotICAgIGlmICh3aWR0aFR5cGUgPT0gV2lkdGgpCi0gICAgICAgIHdpZHRoID0gc3R5bGUoKS0+
d2lkdGgoKTsKLSAgICBlbHNlIGlmICh3aWR0aFR5cGUgPT0gTWluV2lkdGgpCi0gICAgICAgIHdp
ZHRoID0gc3R5bGUoKS0+bWluV2lkdGgoKTsKLSAgICBlbHNlCi0gICAgICAgIHdpZHRoID0gc3R5
bGUoKS0+bWF4V2lkdGgoKTsKKyAgICAvLyBDYWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlvbiB2
YWx1ZXMgZm9yICdoZWlnaHQnIGNhc2UuCisgICAgY2FsY0Fic29sdXRlVmVydGljYWxWYWx1ZXMo
c3R5bGUoKS0+aGVpZ2h0KCksIGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJIZWlnaHQsIGJvcmRl
cnNQbHVzUGFkZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AsIGJvdHRv
bSwgbWFyZ2luVG9wLCBtYXJnaW5Cb3R0b20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVpZ2h0LCBtX21hcmdpblRvcCwgbV9tYXJnaW5Cb3R0b20sIG1feSk7CiAKLSAgICBpZiAo
IXdpZHRoLmlzSW50cmluc2ljT3JBdXRvKCkpCi0gICAgICAgIHcgPSBjYWxjQ29udGVudEJveFdp
ZHRoKHdpZHRoLmNhbGNWYWx1ZShjdykpOwotICAgIGVsc2UgaWYgKGlzUmVwbGFjZWQoKSkKLSAg
ICAgICAgdyA9IGNhbGNSZXBsYWNlZFdpZHRoKCk7Ci0KLSAgICBpZiAobCAhPSBBVVRPICYmIHcg
IT0gQVVUTyAmJiByICE9IEFVVE8pIHsKLSAgICAgICAgLy8gbGVmdCwgd2lkdGgsIHJpZ2h0IGFs
bCBnaXZlbiwgcGxheSB3aXRoIG1hcmdpbnMKLSAgICAgICAgaW50IG90ID0gbCArIHcgKyByICsg
cGFiOwotCi0gICAgICAgIGlmIChtbD09QVVUTyAmJiBtcj09QVVUTykgewotICAgICAgICAgICAg
Ly8gYm90aCBtYXJnaW5zIGF1dG8sIHNvbHZlIGZvciBlcXVhbGl0eQotICAgICAgICAgICAgbWwg
PSAoY3cgLSBvdCkvMjsKLSAgICAgICAgICAgIG1yID0gY3cgLSBvdCAtIG1sOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UgaWYgKG1sPT1BVVRPKQotICAgICAgICAgICAgLy8gc29sdmUgZm9yIGxl
ZnQgbWFyZ2luCi0gICAgICAgICAgICBtbCA9IGN3IC0gb3QgLSBtcjsKLSAgICAgICAgZWxzZSBp
ZiAobXI9PUFVVE8pCi0gICAgICAgICAgICAvLyBzb2x2ZSBmb3IgcmlnaHQgbWFyZ2luCi0gICAg
ICAgICAgICBtciA9IGN3IC0gb3QgLSBtbDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAv
LyBvdmVyY29uc3RyYWluZWQsIHNvbHZlIGFjY29yZGluZyB0byBkaXIKLSAgICAgICAgICAgIGlm
IChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpCi0gICAgICAgICAgICAgICAgciA9IGN3IC0g
KCBsICsgdyArIG1sICsgbXIgKyBwYWIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGwgPSBjdyAtICggciArIHcgKyBtbCArIG1yICsgcGFiKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICAvLyBvbmUgb3IgdHdvIG9mIChsZWZ0LCB3aWR0aCwg
cmlnaHQpIG1pc3NpbmcsIHNvbHZlCisgICAgLy8gQXZvaWQgZG9pbmcgYW55IHdvcmsgaW4gdGhl
IGNvbW1vbiBjYXNlICh3aGVyZSB0aGUgdmFsdWVzIG9mIG1pbi1oZWlnaHQgYW5kIG1heC1oZWln
aHQgYXJlIHRoZWlyIGRlZmF1bHRzKS4gICAgCisgICAgLy8gc2VlIEZJWE1FIDMKIAotICAgICAg
ICAvLyBhdXRvIG1hcmdpbnMgYXJlIGlnbm9yZWQKLSAgICAgICAgaWYgKG1sPT1BVVRPKSBtbCA9
IDA7Ci0gICAgICAgIGlmIChtcj09QVVUTykgbXIgPSAwOwotCi0gICAgICAgIC8vMS4gc29sdmUg
bGVmdCAmIHdpZHRoLgotICAgICAgICBpZiAobCA9PSBBVVRPICYmIHcgPT0gQVVUTyAmJiByICE9
IEFVVE8pIHsKLSAgICAgICAgICAgIC8vIEZyb20gc2VjdGlvbiAxMC4zLjcgb2YgdGhlIENTUzIu
MSBzcGVjaWZpY2F0aW9uLgotICAgICAgICAgICAgLy8gIlRoZSBzaHJpbmstdG8tZml0IHdpZHRo
IGlzOiBtaW4obWF4KHByZWZlcnJlZCBtaW5pbXVtIHdpZHRoLCBhdmFpbGFibGUgd2lkdGgpLCBw
cmVmZXJyZWQgd2lkdGgpLiIKLSAgICAgICAgICAgIHcgPSBtaW4obWF4KG1fbWluV2lkdGggLSBw
YWIsIGN3IC0gKHIgKyBtbCArIG1yICsgcGFiKSksIG1fbWF4V2lkdGggLSBwYWIpOwotICAgICAg
ICAgICAgbCA9IGN3IC0gKHIgKyB3ICsgbWwgKyBtciArIHBhYik7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQorICAgIC8vIENhbGN1bGF0ZSBjb25zdHJhaW50IGVxdWF0aW9uIHZhbHVlcyBmb3Ig
J21heC1oZWlnaHQnIGNhc2UuCisgICAgaWYgKHN0eWxlKCktPm1heEhlaWdodCgpLnZhbHVlKCkg
IT0gdW5kZWZpbmVkTGVuZ3RoKSB7CisgICAgICAgIGludCBtYXhIZWlnaHQ7CisgICAgICAgIGlu
dCBtYXhNYXJnaW5Ub3A7CisgICAgICAgIGludCBtYXhNYXJnaW5Cb3R0b207CisgICAgICAgIGlu
dCBtYXhZUG9zOwogCi0gICAgICAgIC8vMi4gc29sdmUgbGVmdCAmIHJpZ2h0LiB1c2Ugc3RhdGlj
IHBvc2l0aW9uaW5nLgotICAgICAgICBpZiAobCA9PSBBVVRPICYmIHcgIT0gQVVUTyAmJiByID09
IEFVVE8pIHsKLSAgICAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKT09UlRMKSB7Ci0g
ICAgICAgICAgICAgICAgciA9IHN0YXRpY19kaXN0YW5jZTsKLSAgICAgICAgICAgICAgICBsID0g
Y3cgLSAociArIHcgKyBtbCArIG1yICsgcGFiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgIGwgPSBzdGF0aWNfZGlzdGFuY2U7Ci0gICAgICAgICAg
ICAgICAgciA9IGN3IC0gKGwgKyB3ICsgbWwgKyBtciArIHBhYik7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgIGNhbGNBYnNvbHV0ZVZlcnRpY2FsVmFsdWVzKHN0eWxlKCktPm1heEhlaWdodCgpLCBj
b250YWluZXJCbG9jaywgY29udGFpbmVySGVpZ2h0LCBib3JkZXJzUGx1c1BhZGRpbmcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCwgYm90dG9tLCBtYXJnaW5Ub3AsIG1h
cmdpbkJvdHRvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0
LCBtYXhNYXJnaW5Ub3AsIG1heE1hcmdpbkJvdHRvbSwgbWF4WVBvcyk7CiAKLSAgICAgICAgfSAv
LzMuIHNvbHZlIHdpZHRoICYgcmlnaHQuCi0gICAgICAgIGVsc2UgaWYgKGwgIT0gQVVUTyAmJiB3
ID09IEFVVE8gJiYgciA9PSBBVVRPKSB7Ci0gICAgICAgICAgICAvLyBGcm9tIHNlY3Rpb24gMTAu
My43IG9mIHRoZSBDU1MyLjEgc3BlY2lmaWNhdGlvbi4KLSAgICAgICAgICAgIC8vICJUaGUgc2hy
aW5rLXRvLWZpdCB3aWR0aCBpczogbWluKG1heChwcmVmZXJyZWQgbWluaW11bSB3aWR0aCwgYXZh
aWxhYmxlIHdpZHRoKSwgcHJlZmVycmVkIHdpZHRoKS4iCi0gICAgICAgICAgICB3ID0gbWluKG1h
eChtX21pbldpZHRoIC0gcGFiLCBjdyAtIChsICsgbWwgKyBtciArIHBhYikpLCBtX21heFdpZHRo
IC0gcGFiKTsKLSAgICAgICAgICAgIHIgPSBjdyAtIChsICsgdyArIG1sICsgbXIgKyBwYWIpOwor
ICAgICAgICBpZiAoaGVpZ2h0ID4gbWF4SGVpZ2h0KSB7CisgICAgICAgICAgICBoZWlnaHQgPSBt
YXhIZWlnaHQ7CisgICAgICAgICAgICBtX21hcmdpblRvcCA9IG1heE1hcmdpblRvcDsKKyAgICAg
ICAgICAgIG1fbWFyZ2luQm90dG9tID0gbWF4TWFyZ2luQm90dG9tOworICAgICAgICAgICAgbV95
ID0gbWF4WVBvczsKICAgICAgICAgfQotICAgICAgICBlbHNlCi0KLSAgICAgICAgLy80LiBzb2x2
ZSBsZWZ0Ci0gICAgICAgIGlmIChsPT1BVVRPICYmIHchPUFVVE8gJiYgciE9QVVUTykKLSAgICAg
ICAgICAgIGwgPSBjdyAtIChyICsgdyArIG1sICsgbXIgKyBwYWIpOwotICAgICAgICBlbHNlCi0g
ICAgICAgIC8vNS4gc29sdmUgd2lkdGgKLSAgICAgICAgaWYgKGwhPUFVVE8gJiYgdz09QVVUTyAm
JiByIT1BVVRPKQotICAgICAgICAgICAgdyA9IGN3IC0gKHIgKyBsICsgbWwgKyBtciArIHBhYik7
Ci0gICAgICAgIGVsc2UKLQotICAgICAgICAvLzYuIHNvbHZlIHJpZ2h0Ci0gICAgICAgIGlmIChs
IT1BVVRPICYmIHchPUFVVE8gJiYgcj09QVVUTykKLSAgICAgICAgICAgIHIgPSBjdyAtIChsICsg
dyArIG1sICsgbXIgKyBwYWIpOwogICAgIH0KIAotICAgIHcgKz0gcGFiOwotICAgIHggPSBsICsg
bWwgKyBjYi0+Ym9yZGVyTGVmdCgpOwotfQorICAgIC8vIENhbGN1bGF0ZSBjb25zdHJhaW50IGVx
dWF0aW9uIHZhbHVlcyBmb3IgJ21pbi1oZWlnaHQnIGNhc2UuCisgICAgaWYgKHN0eWxlKCktPm1p
bkhlaWdodCgpLnZhbHVlKCkpIHsKKyAgICAgICAgaW50IG1pbkhlaWdodDsKKyAgICAgICAgaW50
IG1pbk1hcmdpblRvcDsKKyAgICAgICAgaW50IG1pbk1hcmdpbkJvdHRvbTsKKyAgICAgICAgaW50
IG1pbllQb3M7CiAKLXZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0aWNhbCgpCi17Ci0g
ICAgLy8gY3NzMiBzcGVjIDEwLjYuNCAmIDEwLjYuNQorICAgICAgICBjYWxjQWJzb2x1dGVWZXJ0
aWNhbFZhbHVlcyhzdHlsZSgpLT5taW5IZWlnaHQoKSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5l
ckhlaWdodCwgYm9yZGVyc1BsdXNQYWRkaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b3AsIGJvdHRvbSwgbWFyZ2luVG9wLCBtYXJnaW5Cb3R0b20sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodCwgbWluTWFyZ2luVG9wLCBtaW5NYXJn
aW5Cb3R0b20sIG1pbllQb3MpOwogCi0gICAgLy8gYmFzZWQgb24KLSAgICAvLyBodHRwOi8vd3d3
LnczLm9yZy9TdHlsZS9jc3MyLXVwZGF0ZXMvUkVDLUNTUzItMTk5ODA1MTItZXJyYXRhCi0gICAg
Ly8gKGFjdHVhbGx5IHVwZGF0ZWQgMjAwMC0xMC0yNCkKLSAgICAvLyB0aGF0IGludHJvZHVjZXMg
c3RhdGljLXBvc2l0aW9uIHZhbHVlIGZvciB0b3AsIGxlZnQgJiByaWdodAorICAgICAgICBpZiAo
aGVpZ2h0IDwgbWluSGVpZ2h0KSB7CisgICAgICAgICAgICBoZWlnaHQgPSBtaW5IZWlnaHQ7Cisg
ICAgICAgICAgICBtX21hcmdpblRvcCA9IG1pbk1hcmdpblRvcDsKKyAgICAgICAgICAgIG1fbWFy
Z2luQm90dG9tID0gbWluTWFyZ2luQm90dG9tOworICAgICAgICAgICAgbV95ID0gbWluWVBvczsK
KyAgICAgICAgfQorICAgIH0KIAotICAgIGNvbnN0IGludCBBVVRPID0gLTY2NjY2NjsKLSAgICBp
bnQgdCwgYiwgY2g7CisgICAgLy8gSWYgb3VyIG5hdHVyYWwgaGVpZ2h0IGV4Y2VlZHMgdGhlIG5l
dyBoZWlnaHQgb25jZSB3ZSd2ZSBzZXQgaXQsIHRoZW4gd2UKKyAgICAvLyBuZWVkIHRvIG1ha2Ug
c3VyZSB0byB1cGRhdGUgb3ZlcmZsb3cgdG8gdHJhY2sgdGhlIHNwaWxsb3V0LgorICAgIGlmICht
X2hlaWdodCA+IGhlaWdodCkKKyAgICAgICAgc2V0T3ZlcmZsb3dIZWlnaHQobV9oZWlnaHQpOwog
Ci0gICAgdCA9IGIgPSBBVVRPOworICAgIC8vIFNldCBmaW5hbCBoZWlnaHQgdmFsdWUuCisgICAg
bV9oZWlnaHQgPSBoZWlnaHQ7Cit9CiAKLSAgICBpbnQgcGFiID0gYm9yZGVyVG9wKCkrYm9yZGVy
Qm90dG9tKCkrcGFkZGluZ1RvcCgpK3BhZGRpbmdCb3R0b20oKTsKK3ZvaWQgUmVuZGVyQm94Ojpj
YWxjQWJzb2x1dGVWZXJ0aWNhbFZhbHVlcyhMZW5ndGggaGVpZ2h0LCBjb25zdCBSZW5kZXJPYmpl
Y3QqIGNvbnRhaW5lckJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGludCBjb250YWluZXJIZWlnaHQsIGNvbnN0IGludCBib3JkZXJzUGx1c1Bh
ZGRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
TGVuZ3RoIHRvcCwgY29uc3QgTGVuZ3RoIGJvdHRvbSwgY29uc3QgTGVuZ3RoIG1hcmdpblRvcCwg
Y29uc3QgTGVuZ3RoIG1hcmdpbkJvdHRvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQmIGhlaWdodFZhbHVlLCBpbnQmIG1hcmdpblRvcFZhbHVlLCBpbnQm
IG1hcmdpbkJvdHRvbVZhbHVlLCBpbnQmIHlQb3MpCit7CisgICAgLy8gJ3RvcCcgYW5kICdib3R0
b20nIGNhbm5vdCBib3RoIGJlICdhdXRvJyBiZWNhdXNlICd0b3Agd291bGQgb2YgYmVlbgorICAg
IC8vIGNvbnZlcnRlZCB0byB0aGUgc3RhdGljIHBvc2l0aW9uIGluIGNhbGNBYnNvbHV0ZVZlcnRp
Y2FsKCkKKyAgICBBU1NFUlQoISh0b3AuaXNBdXRvKCkgJiYgYm90dG9tLmlzQXV0bygpKSk7CisK
KyAgICBpbnQgY29udGVudEhlaWdodCA9IG1faGVpZ2h0IC0gYm9yZGVyc1BsdXNQYWRkaW5nOyAg
ICAKKworICAgIGludCB0b3BWYWx1ZTsKKworICAgIGJvb2wgaGVpZ2h0SXNBdXRvID0gaGVpZ2h0
LmlzQXV0bygpOworICAgIGJvb2wgdG9wSXNBdXRvID0gdG9wLmlzQXV0bygpOworICAgIGJvb2wg
Ym90dG9tSXNBdXRvID0gYm90dG9tLmlzQXV0bygpOworCisgICAgLy8gSGVpZ2h0IGlzIG5ldmVy
IHVuc29sdmVkIGZvciB0YWJsZXMuCisgICAgaWYgKGlzVGFibGUoKSAmJiBoZWlnaHRJc0F1dG8p
IHsKKyAgICAgICAgaGVpZ2h0LnNldFZhbHVlKEZpeGVkLCBjb250ZW50SGVpZ2h0KTsKKyAgICAg
ICAgaGVpZ2h0SXNBdXRvID0gZmFsc2U7CisgICAgfSBlbHNlIGlmICghaGVpZ2h0SXNBdXRvKQor
ICAgICAgICBjb250ZW50SGVpZ2h0ID0gbWluKGNvbnRlbnRIZWlnaHQsIGNhbGNDb250ZW50Qm94
SGVpZ2h0KGhlaWdodC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KSkpOworCisgICAgaWYgKCF0
b3BJc0F1dG8gJiYgIWhlaWdodElzQXV0byAmJiAhYm90dG9tSXNBdXRvKSB7CisgICAgICAgIC8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qXAorICAgICAgICAgKiBJZiBub25lIG9mIHRoZSB0aHJlZSBhcmUgJ2F1
dG8nOiBJZiBib3RoICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi0KKyAgICAgICAgICogYm90dG9t
JyBhcmUgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIgdGhlIGV4dHJhIGNvbnN0cmFp
bnQgdGhhdAorICAgICAgICAgKiB0aGUgdHdvIG1hcmdpbnMgZ2V0IGVxdWFsIHZhbHVlcy4gSWYg
b25lIG9mICdtYXJnaW4tdG9wJyBvciAnbWFyZ2luLQorICAgICAgICAgKiBib3R0b20nIGlzICdh
dXRvJywgc29sdmUgdGhlIGVxdWF0aW9uIGZvciB0aGF0IHZhbHVlLiBJZiB0aGUgdmFsdWVzCisg
ICAgICAgICAqIGFyZSBvdmVyLWNvbnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZhbHVlIGZvciAnYm90
dG9tJyBhbmQgc29sdmUgZm9yIHRoYXQKKyAgICAgICAgICogdmFsdWUuCisgICAgICAgIFwqLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLworICAgICAgICAvLyBOT1RFOiAgSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBz
b2x2ZSBmb3IgJ2JvdHRvbScgaW4gdGhlIG92ZXIgY29uc3RyYWluZWQKKyAgICAgICAgLy8gY2Fz
ZSBiZWNhdXNlIHRoZSB2YWx1ZSBpcyBub3QgdXNlZCBmb3IgYW55IGZ1cnRoZXIgY2FsY3VsYXRp
b25zLgorCisgICAgICAgIGhlaWdodFZhbHVlID0gY2FsY0NvbnRlbnRCb3hIZWlnaHQoaGVpZ2h0
LmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpKTsKKyAgICAgICAgdG9wVmFsdWUgPSB0b3AuY2Fs
Y1ZhbHVlKGNvbnRhaW5lckhlaWdodCk7CisKKyAgICAgICAgY29uc3QgaW50IGF2YWlsYWJsZVNw
YWNlID0gY29udGFpbmVySGVpZ2h0IC0gKHRvcFZhbHVlICsgaGVpZ2h0VmFsdWUgKyBib3R0b20u
Y2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCkgKyBib3JkZXJzUGx1c1BhZGRpbmcpOworCisgICAg
ICAgIC8vIE1hcmdpbnMgYXJlIG5vdyB0aGUgb25seSB1bmtub3duCisgICAgICAgIGlmIChtYXJn
aW5Ub3AuaXNBdXRvKCkgJiYgbWFyZ2luQm90dG9tLmlzQXV0bygpKSB7CisgICAgICAgICAgICAv
LyBCb3RoIG1hcmdpbnMgYXV0bywgc29sdmUgZm9yIGVxdWFsaXR5CisgICAgICAgICAgICAvLyBO
T1RFOiBUaGlzIG1heSByZXN1bHQgaW4gbmVnYXRpdmUgdmFsdWVzLgorICAgICAgICAgICAgbWFy
Z2luVG9wVmFsdWUgPSBhdmFpbGFibGVTcGFjZSAvIDI7IC8vIHNwbGl0IHRoZSBkaWZlcmVuY2UK
KyAgICAgICAgICAgIG1hcmdpbkJvdHRvbVZhbHVlID0gYXZhaWxhYmxlU3BhY2UgLSBtYXJnaW5U
b3BWYWx1ZTsgLy8gYWNjb3VudCBmb3Igb2RkIHZhbHVlZCBkaWZmZXJlbmNlcworICAgICAgICB9
IGVsc2UgaWYgKG1hcmdpblRvcC5pc0F1dG8oKSkgeworICAgICAgICAgICAgLy8gU29sdmUgZm9y
IHRvcCBtYXJnaW4KKyAgICAgICAgICAgIG1hcmdpbkJvdHRvbVZhbHVlID0gbWFyZ2luQm90dG9t
LmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpOworICAgICAgICAgICAgbWFyZ2luVG9wVmFsdWUg
PSBhdmFpbGFibGVTcGFjZSAtIG1hcmdpbkJvdHRvbVZhbHVlOworICAgICAgICB9IGVsc2UgaWYg
KG1hcmdpbkJvdHRvbS5pc0F1dG8oKSkgeworICAgICAgICAgICAgLy8gU29sdmUgZm9yIGJvdHRv
bSBtYXJnaW4KKyAgICAgICAgICAgIG1hcmdpblRvcFZhbHVlID0gbWFyZ2luVG9wLmNhbGNWYWx1
ZShjb250YWluZXJIZWlnaHQpOworICAgICAgICAgICAgbWFyZ2luQm90dG9tVmFsdWUgPSBhdmFp
bGFibGVTcGFjZSAtIG1hcmdpblRvcFZhbHVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLy8gT3Zlci1jb25zdHJhaW5lZCwgKG5vIG5lZWQgc29sdmUgZm9yIGJvdHRvbSkKKyAgICAg
ICAgICAgIG1hcmdpblRvcFZhbHVlID0gbWFyZ2luVG9wLmNhbGNWYWx1ZShjb250YWluZXJIZWln
aHQpOworICAgICAgICAgICAgbWFyZ2luQm90dG9tVmFsdWUgPSBtYXJnaW5Cb3R0b20uY2FsY1Zh
bHVlKGNvbnRhaW5lckhlaWdodCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKlwKKyAgICAgICAgICogT3RoZXJ3aXNlLCBzZXQgJ2F1dG8nIHZhbHVlcyBm
b3IgJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScKKyAgICAgICAgICogdG8gMCwgYW5k
IHBpY2sgdGhlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHNpeCBydWxlcyB0aGF0IGFwcGxpZXMuCisg
ICAgICAgICAqCisgICAgICAgICAqIDEuICd0b3AnIGFuZCAnaGVpZ2h0JyBhcmUgJ2F1dG8nIGFu
ZCAnYm90dG9tJyBpcyBub3QgJ2F1dG8nLCB0aGVuIAorICAgICAgICAgKiAgICB0aGUgaGVpZ2h0
IGlzIGJhc2VkIG9uIHRoZSBjb250ZW50LCBhbmQgc29sdmUgZm9yICd0b3AnLgorICAgICAgICAg
KgorICAgICAgICAgKiAgICAgICAgICAgICAgT01JVCBSVUxFIDIgQVMgSVQgU0hPVUxEIE5FVkVS
IEJFIEhJVAorICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICogMi4gJ3RvcCcgYW5kICdi
b3R0b20nIGFyZSAnYXV0bycgYW5kICdoZWlnaHQnIGlzIG5vdCAnYXV0bycsIHRoZW4KKyAgICAg
ICAgICogICAgc2V0ICd0b3AnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24sIGFuZCBzb2x2ZSBmb3Ig
J2JvdHRvbScuCisgICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgKgorICAgICAgICAgKiAz
LiAnaGVpZ2h0JyBhbmQgJ2JvdHRvbScgYXJlICdhdXRvJyBhbmQgJ3RvcCcgaXMgbm90ICdhdXRv
JywgdGhlbgorICAgICAgICAgKiAgICB0aGUgaGVpZ2h0IGlzIGJhc2VkIG9uIHRoZSBjb250ZW50
LCBhbmQgc29sdmUgZm9yICdib3R0b20nLgorICAgICAgICAgKiA0LiAndG9wJyBpcyAnYXV0bycs
ICdoZWlnaHQnIGFuZCAnYm90dG9tJyBhcmUgbm90ICdhdXRvJywgYW5kCisgICAgICAgICAqICAg
IHNvbHZlIGZvciAndG9wJy4KKyAgICAgICAgICogNS4gJ2hlaWdodCcgaXMgJ2F1dG8nLCAndG9w
JyBhbmQgJ2JvdHRvbScgYXJlIG5vdCAnYXV0bycsIGFuZAorICAgICAgICAgKiAgICBzb2x2ZSBm
b3IgJ2hlaWdodCcuCisgICAgICAgICAqIDYuICdib3R0b20nIGlzICdhdXRvJywgJ3RvcCcgYW5k
ICdoZWlnaHQnIGFyZSBub3QgJ2F1dG8nLCBhbmQKKyAgICAgICAgICogICAgc29sdmUgZm9yICdi
b3R0b20nLgorICAgICAgICBcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgICAgLy8gTk9URTogRm9yIHJ1
bGVzIDMgYW5kIDYgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBzb2x2ZSBmb3IgJ2JvdHRvbScKKyAg
ICAgICAgLy8gYmVjYXVzZSB0aGUgdmFsdWUgaXMgbm90IHVzZWQgZm9yIGFueSBmdXJ0aGVyIGNh
bGN1bGF0aW9ucy4KKworICAgICAgICAvLyBDYWxjdWxhdGUgbWFyZ2lucywgJ2F1dG8nIG1hcmdp
bnMgYXJlIGlnbm9yZWQuCisgICAgICAgIG1hcmdpblRvcFZhbHVlID0gbWFyZ2luVG9wLmNhbGNN
aW5WYWx1ZShjb250YWluZXJIZWlnaHQpOworICAgICAgICBtYXJnaW5Cb3R0b21WYWx1ZSA9IG1h
cmdpbkJvdHRvbS5jYWxjTWluVmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKworICAgICAgICBjb25z
dCBpbnQgYXZhaWxhYmxlU3BhY2UgPSBjb250YWluZXJIZWlnaHQgLSAobWFyZ2luVG9wVmFsdWUg
KyBtYXJnaW5Cb3R0b21WYWx1ZSArIGJvcmRlcnNQbHVzUGFkZGluZyk7CisKKyAgICAgICAgLy8g
VXNlIHJ1bGUvY2FzZSB0aGF0IGFwcGxpZXMuCisgICAgICAgIGlmICh0b3BJc0F1dG8gJiYgaGVp
Z2h0SXNBdXRvICYmICFib3R0b21Jc0F1dG8pIHsKKyAgICAgICAgICAgIC8vIFJVTEUgMTogKGhl
aWdodCBpcyBjb250ZW50IGJhc2VkLCBzb2x2ZSBvZiB0b3ApCisgICAgICAgICAgICBoZWlnaHRW
YWx1ZSA9IGNvbnRlbnRIZWlnaHQ7CisgICAgICAgICAgICB0b3BWYWx1ZSA9IGF2YWlsYWJsZVNw
YWNlIC0gKGhlaWdodFZhbHVlICsgYm90dG9tLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpKTsK
KyAgICAgICAgfSBlbHNlIGlmICghdG9wSXNBdXRvICYmIGhlaWdodElzQXV0byAmJiBib3R0b21J
c0F1dG8pIHsKKyAgICAgICAgICAgIC8vIFJVTEUgMzogKGhlaWdodCBpcyBjb250ZW50IGJhc2Vk
LCBubyBuZWVkIHNvbHZlIG9mIGJvdHRvbSkKKyAgICAgICAgICAgIHRvcFZhbHVlID0gdG9wLmNh
bGNWYWx1ZShjb250YWluZXJIZWlnaHQpOworICAgICAgICAgICAgaGVpZ2h0VmFsdWUgPSBjb250
ZW50SGVpZ2h0OworICAgICAgICB9IGVsc2UgaWYgKHRvcElzQXV0byAmJiAhaGVpZ2h0SXNBdXRv
ICYmICFib3R0b21Jc0F1dG8pIHsKKyAgICAgICAgICAgIC8vIFJVTEUgNDogKHNvbHZlIG9mIHRv
cCkKKyAgICAgICAgICAgIGhlaWdodFZhbHVlID0gY2FsY0NvbnRlbnRCb3hIZWlnaHQoaGVpZ2h0
LmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpKTsKKyAgICAgICAgICAgIHRvcFZhbHVlID0gYXZh
aWxhYmxlU3BhY2UgLSAoaGVpZ2h0VmFsdWUgKyBib3R0b20uY2FsY1ZhbHVlKGNvbnRhaW5lckhl
aWdodCkpOworICAgICAgICB9IGVsc2UgaWYgKCF0b3BJc0F1dG8gJiYgaGVpZ2h0SXNBdXRvICYm
ICFib3R0b21Jc0F1dG8pIHsKKyAgICAgICAgICAgIC8vIFJVTEUgNTogKHNvbHZlIG9mIGhlaWdo
dCkKKyAgICAgICAgICAgIHRvcFZhbHVlID0gdG9wLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQp
OworICAgICAgICAgICAgaGVpZ2h0VmFsdWUgPSBhdmFpbGFibGVTcGFjZSAtICh0b3BWYWx1ZSAr
IGJvdHRvbS5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KSk7CisgICAgICAgIH0gZWxzZSBpZiAo
IXRvcElzQXV0byAmJiAhaGVpZ2h0SXNBdXRvICYmIGJvdHRvbUlzQXV0bykgeworICAgICAgICAg
ICAgLy8gUlVMRSA2OiAobm8gbmVlZCBzb2x2ZSBvZiBib3R0b20pCisgICAgICAgICAgICBoZWln
aHRWYWx1ZSA9IGNhbGNDb250ZW50Qm94SGVpZ2h0KGhlaWdodC5jYWxjVmFsdWUoY29udGFpbmVy
SGVpZ2h0KSk7CisgICAgICAgICAgICB0b3BWYWx1ZSA9IHRvcC5jYWxjVmFsdWUoY29udGFpbmVy
SGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE1ha2UgZmluYWwgYWRqdXN0bWVu
dHMgdG8gaGVpZ2h0LgorICAgIGlmICghKGNvbnRlbnRIZWlnaHQgPCBoZWlnaHRWYWx1ZSkgJiYg
IShoYXNPdmVyZmxvd0NsaXAoKSAmJiBjb250ZW50SGVpZ2h0ID4gaGVpZ2h0VmFsdWUpKQorICAg
ICAgICBoZWlnaHRWYWx1ZSA9IGNvbnRlbnRIZWlnaHQ7CisKKyAgICAvLyBEbyBub3QgYWxsb3cg
dGhlIGhlaWdodCB0byBiZSBuZWdhdGl2ZS4gIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHNvbWVvbmUK
KyAgICAvLyBzcGVjaWZpZXMgYm90aCB0b3AgYW5kIGJvdHRvbSBidXQgdGhlIGNvbnRhaW5pbmcg
YmxvY2sgaGVpZ2h0IGlzIGxlc3MKKyAgICAvLyB0aGFuIHRvcCwgZS5nLiwgdG9wOiAyMHB4LCBi
b3R0b206IDAsIGNvbnRhaW5pbmcgYmxvY2sgaGVpZ2h0IDE2LgorICAgIGhlaWdodFZhbHVlID0g
bWF4KDAsIGhlaWdodFZhbHVlICsgYm9yZGVyc1BsdXNQYWRkaW5nKTsKKworICAgIC8vIFVzZSBj
b21wdXRlZCB2YWx1ZXMgdG8gY2FsY3VsYXRlIHRoZSB2ZXJ0aWNhbCBwb3NpdGlvbi4KKyAgICB5
UG9zID0gdG9wVmFsdWUgKyBtYXJnaW5Ub3BWYWx1ZSArIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJU
b3AoKTsKK30KKwordm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWxSZXBsYWNl
ZCgpCit7ICAgCisgICAgLy8gVGhlIGZvbGxvd2luZyBpcyBiYXNlZCBvZmYgb2YgdGhlIFczQyBX
b3JraW5nIERyYWZ0IGZyb20gQXByaWwgMTEsIDIwMDYgb2YKKyAgICAvLyBDU1MgMi4xOiBTZWN0
aW9uIDEwLjMuOCAiQWJzb2x1dGx5IHBvc2l0aW9uZWQsIHJlcGxhY2VkIGVsZW1lbnRzIgorICAg
IC8vIDxodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA1L1dELUNTUzIxLTIwMDUwNjEzL3Zpc3VkZXQu
aHRtbCNhYnMtcmVwbGFjZWQtd2lkdGg+CisgICAgLy8gKGJsb2NrLXN0eWxlLWNvbW1lbnRzIGlu
IHRoaXMgZnVuY3Rpb24gY29ycmVzcG9uZCB0byB0ZXh0IGZyb20gdGhlIHNwZWMgYW5kCisgICAg
Ly8gdGhlIG51bWJlcnMgY29ycmVzcG9uZCB0byBudW1iZXJzIGluIHNwZWMpCiAKICAgICAvLyBX
ZSBkb24ndCB1c2UgY29udGFpbmluZ0Jsb2NrKCksIHNpbmNlIHdlIG1heSBiZSBwb3NpdGlvbmVk
IGJ5IGFuIGVuY2xvc2luZyByZWxwb3NpdGlvbmVkIGlubGluZS4KLSAgICBSZW5kZXJPYmplY3Qq
IGNiID0gY29udGFpbmVyKCk7Ci0gICAgaWYgKGNiLT5pc1Jvb3QoKSkgLy8gRXZlbiBpbiBzdHJp
Y3QgbW9kZSAod2hlcmUgd2UgZG9uJ3QgZ3JvdyB0aGUgcm9vdCB0byBmaWxsIHRoZSB2aWV3cG9y
dCkgb3RoZXIgYnJvd3NlcnMKLSAgICAgICAgICAgICAgICAgICAgICAvLyBwb3NpdGlvbiBhcyB0
aG91Z2ggdGhlIHJvb3QgZmlsbHMgdGhlIHZpZXdwb3J0LgotICAgICAgICBjaCA9IGNiLT5hdmFp
bGFibGVIZWlnaHQoKTsKLSAgICBlbHNlCi0gICAgICAgIGNoID0gY2ItPmhlaWdodCgpIC0gY2It
PmJvcmRlclRvcCgpIC0gY2ItPmJvcmRlckJvdHRvbSgpOwotCi0gICAgaWYgKCFzdHlsZSgpLT50
b3AoKS5pc0F1dG8oKSkKLSAgICAgICAgdCA9IHN0eWxlKCktPnRvcCgpLmNhbGNWYWx1ZShjaCk7
Ci0gICAgaWYgKCFzdHlsZSgpLT5ib3R0b20oKS5pc0F1dG8oKSkKLSAgICAgICAgYiA9IHN0eWxl
KCktPmJvdHRvbSgpLmNhbGNWYWx1ZShjaCk7Ci0KLSAgICBpbnQgaCwgbXQsIG1iLCB5OwotICAg
IGNhbGNBYnNvbHV0ZVZlcnRpY2FsVmFsdWVzKEhlaWdodCwgY2IsIGNoLCBwYWIsIHQsIGIsIGgs
IG10LCBtYiwgeSk7Ci0KLSAgICAvLyBBdm9pZCBkb2luZyBhbnkgd29yayBpbiB0aGUgY29tbW9u
IGNhc2UgKHdoZXJlIHRoZSB2YWx1ZXMgb2YgbWluLWhlaWdodCBhbmQgbWF4LWhlaWdodCBhcmUg
dGhlaXIgZGVmYXVsdHMpLgotICAgIGludCBtaW5IID0gaCwgbWluTVQsIG1pbk1CLCBtaW5ZOwot
ICAgIGNhbGNBYnNvbHV0ZVZlcnRpY2FsVmFsdWVzKE1pbkhlaWdodCwgY2IsIGNoLCBwYWIsIHQs
IGIsIG1pbkgsIG1pbk1ULCBtaW5NQiwgbWluWSk7Ci0KLSAgICBpbnQgbWF4SCA9IGgsIG1heE1U
LCBtYXhNQiwgbWF4WTsKLSAgICBpZiAoc3R5bGUoKS0+bWF4SGVpZ2h0KCkudmFsdWUoKSAhPSB1
bmRlZmluZWRMZW5ndGgpCi0gICAgICAgIGNhbGNBYnNvbHV0ZVZlcnRpY2FsVmFsdWVzKE1heEhl
aWdodCwgY2IsIGNoLCBwYWIsIHQsIGIsIG1heEgsIG1heE1ULCBtYXhNQiwgbWF4WSk7CisgICAg
Y29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXJCbG9jayA9IGNvbnRhaW5lcigpOworICAgIGNv
bnN0IGludCBjb250YWluZXJXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoKCkgKyBjb250YWlu
ZXJCbG9jay0+cGFkZGluZ0xlZnQoKSArIGNvbnRhaW5lckJsb2NrLT5wYWRkaW5nUmlnaHQoKTsK
IAotICAgIGlmIChoID4gbWF4SCkgewotICAgICAgICBoID0gbWF4SDsKLSAgICAgICAgbXQgPSBt
YXhNVDsKLSAgICAgICAgbWIgPSBtYXhNQjsKLSAgICAgICAgeSA9IG1heFk7Ci0gICAgfQotICAg
IAotICAgIGlmIChoIDwgbWluSCkgewotICAgICAgICBoID0gbWluSDsKLSAgICAgICAgbXQgPSBt
aW5NVDsKLSAgICAgICAgbWIgPSBtaW5NQjsKLSAgICAgICAgeSA9IG1pblk7CisgICAgLy8gVmFy
aWFibGVzIHRvIHNvbHZlLgorICAgIExlbmd0aCBsZWZ0ID0gc3R5bGUoKS0+bGVmdCgpOworICAg
IExlbmd0aCByaWdodCA9IHN0eWxlKCktPnJpZ2h0KCk7CisgICAgTGVuZ3RoIG1hcmdpbkxlZnQg
PSBzdHlsZSgpLT5tYXJnaW5MZWZ0KCk7CisgICAgTGVuZ3RoIG1hcmdpblJpZ2h0ID0gc3R5bGUo
KS0+bWFyZ2luUmlnaHQoKTsKKworCisgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCisgICAgICogMS4g
VGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyBkZXRlcm1pbmVkIGFzIGZvciBpbmxpbmUgcmVw
bGFjZWQKKyAgICAgKiAgICBlbGVtZW50cy4KKyAgICBcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAv
LyBOT1RFOiBUaGlzIHZhbHVlIG9mIHdpZHRoIGlzIEZJTkFMIGluIHRoYXQgdGhlIG1pbi9tYXgg
d2lkdGggY2FsY3VsYXRpb25zCisgICAgLy8gYXJlIGRlYWx0IHdpdGggaW4gY2FsY1JlcGxhY2Vk
V2lkdGgoKS4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgc3RlcHMgdG8gcHJvZHVjZQorICAgIC8vIGNv
cnJlY3QgbWF4L21pbiBpbiB0aGUgbm9uLXJlcGxhY2VkIHZlcnNpb24sIGFyZSBub3QgbmVjZXNz
YXJ5LgorICAgIG1fd2lkdGggPSBjYWxjUmVwbGFjZWRXaWR0aCgpICsgYm9yZGVyTGVmdCgpICsg
Ym9yZGVyUmlnaHQoKSArIHBhZGRpbmdMZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKTsKKyAgICBjb25z
dCBpbnQgYXZhaWxhYmxlU3BhY2UgPSBjb250YWluZXJXaWR0aCAtIG1fd2lkdGg7CisKKyAgICAv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKlwKKyAgICAgKiAyLiBJZiBib3RoICdsZWZ0JyBhbmQgJ3JpZ2h0JyBo
YXZlIHRoZSB2YWx1ZSAnYXV0bycsIHRoZW4gaWYgJ2RpcmVjdGlvbicKKyAgICAgKiAgICBvZiB0
aGUgY29udGFpbmluZyBibG9jayBpcyAnbHRyJywgc2V0ICdsZWZ0JyB0byB0aGUgc3RhdGljIHBv
c2l0aW9uOworICAgICAqICAgIGVsc2UgaWYgJ2RpcmVjdGlvbicgaXMgJ3J0bCcsIHNldCAncmln
aHQnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24uCisgICAgXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAg
Ly8gc2VlIEZJWE1FIDIKKyAgICBpZiAobGVmdC5pc0F1dG8oKSAmJiByaWdodC5pc0F1dG8oKSkg
eworICAgICAgICAvLyBzZWUgRklYTUUgMQorICAgICAgICBpZiAoY29udGFpbmVyQmxvY2stPnN0
eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgeworICAgICAgICAgICAgLy8gJ21fc3RhdGljWCcg
c2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIHNldCB0aHJvdWdoIGxheW91dCBvZiB0aGUgcGFyZW50
LgorICAgICAgICAgICAgaW50IHN0YXRpY1Bvc2l0aW9uID0gbV9zdGF0aWNYIC0gY29udGFpbmVy
QmxvY2stPmJvcmRlckxlZnQoKTsKKyAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBwbyA9
IHBhcmVudCgpOyBwbyAmJiBwbyAhPSBjb250YWluZXJCbG9jazsgcG8gPSBwby0+cGFyZW50KCkp
CisgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gKz0gcG8tPnhQb3MoKTsKKyAgICAgICAg
ICAgIGxlZnQuc2V0VmFsdWUoRml4ZWQsIHN0YXRpY1Bvc2l0aW9uKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFJlbmRlck9iamVjdCogcG8gPSBwYXJlbnQoKTsKKyAgICAgICAgICAg
IC8vICdtX3N0YXRpY1gnIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBzZXQgdGhyb3VnaCBsYXlv
dXQgb2YgdGhlIHBhcmVudC4KKyAgICAgICAgICAgIGludCBzdGF0aWNQb3NpdGlvbiA9IG1fc3Rh
dGljWCArIGNvbnRhaW5lcldpZHRoICsgY29udGFpbmVyQmxvY2stPmJvcmRlclJpZ2h0KCkgLSBw
by0+d2lkdGgoKTsKKyAgICAgICAgICAgIGZvciAoOyBwbyAmJiBwbyAhPSBjb250YWluZXJCbG9j
azsgcG8gPSBwby0+cGFyZW50KCkpCisgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gLT0g
cG8tPnhQb3MoKTsKKyAgICAgICAgICAgIHJpZ2h0LnNldFZhbHVlKEZpeGVkLCBzdGF0aWNQb3Np
dGlvbik7CisgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgLy8gSWYgb3VyIG5hdHVyYWwgaGVp
Z2h0IGV4Y2VlZHMgdGhlIG5ldyBoZWlnaHQgb25jZSB3ZSd2ZSBzZXQgaXQsIHRoZW4gd2UgbmVl
ZCB0byBtYWtlIHN1cmUgdG8gdXBkYXRlCi0gICAgLy8gb3ZlcmZsb3cgdG8gdHJhY2sgdGhlIHNw
aWxsb3V0LgotICAgIGlmIChtX2hlaWdodCA+IGgpCi0gICAgICAgIHNldE92ZXJmbG93SGVpZ2h0
KG1faGVpZ2h0KTsKLSAgICAgICAgCi0gICAgLy8gU2V0IG91ciBmaW5hbCB2YWx1ZXMuCi0gICAg
bV9oZWlnaHQgPSBoOwotICAgIG1fbWFyZ2luVG9wID0gbXQ7Ci0gICAgbV9tYXJnaW5Cb3R0b20g
PSBtYjsKLSAgICBtX3kgPSB5OwotfQotCi12b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlVmVy
dGljYWxWYWx1ZXMoSGVpZ2h0VHlwZSBoZWlnaHRUeXBlLCBSZW5kZXJPYmplY3QqIGNiLCBpbnQg
Y2gsIGludCBwYWIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCB0LCBpbnQgYiwgaW50JiBoLCBpbnQmIG10LCBpbnQmIG1iLCBpbnQmIHkpCi17Ci0gICAg
Y29uc3QgaW50IEFVVE8gPSAtNjY2NjY2OwotICAgIGggPSBtdCA9IG1iID0gQVVUTzsKIAotICAg
IGlmICghc3R5bGUoKS0+bWFyZ2luVG9wKCkuaXNBdXRvKCkpCi0gICAgICAgIG10ID0gc3R5bGUo
KS0+bWFyZ2luVG9wKCkuY2FsY1ZhbHVlKGNoKTsKLSAgICBpZiAoIXN0eWxlKCktPm1hcmdpbkJv
dHRvbSgpLmlzQXV0bygpKQotICAgICAgICBtYiA9IHN0eWxlKCktPm1hcmdpbkJvdHRvbSgpLmNh
bGNWYWx1ZShjaCk7CisgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCisgICAgICogMy4gSWYgJ2xlZnQn
IG9yICdyaWdodCcgYXJlICdhdXRvJywgcmVwbGFjZSBhbnkgJ2F1dG8nIG9uICdtYXJnaW4tbGVm
dCcKKyAgICAgKiAgICBvciAnbWFyZ2luLXJpZ2h0JyB3aXRoICcwJy4KKyAgICBcKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KKyAgICBpZiAobGVmdC5pc0F1dG8oKSB8fCByaWdodC5pc0F1dG8oKSkgeworICAg
ICAgICBpZiAobWFyZ2luTGVmdC5pc0F1dG8oKSkKKyAgICAgICAgICAgIG1hcmdpbkxlZnQuc2V0
VmFsdWUoRml4ZWQsIDApOworICAgICAgICBpZiAobWFyZ2luUmlnaHQuaXNBdXRvKCkpCisgICAg
ICAgICAgICBtYXJnaW5SaWdodC5zZXRWYWx1ZShGaXhlZCwgMCk7CisgICAgfQorCisgICAgLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSpcCisgICAgICogNC4gSWYgYXQgdGhpcyBwb2ludCBib3RoICdtYXJnaW4t
bGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIGFyZSBzdGlsbAorICAgICAqICAgICdhdXRvJywgc29s
dmUgdGhlIGVxdWF0aW9uIHVuZGVyIHRoZSBleHRyYSBjb25zdHJhaW50IHRoYXQgdGhlIHR3bwor
ICAgICAqICAgIG1hcmdpbnMgbXVzdCBnZXQgZXF1YWwgdmFsdWVzLCB1bmxlc3MgdGhpcyB3b3Vs
ZCBtYWtlIHRoZW0gbmVnYXRpdmUsCisgICAgICogICAgaW4gd2hpY2ggY2FzZSB3aGVuIHRoZSBk
aXJlY3Rpb24gb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicKKyAgICAgKiAgICAoJ3J0
bCcpLCBzZXQgJ21hcmdpbi1sZWZ0JyAoJ21hcmdpbi1yaWdodCcpIHRvIHplcm8gYW5kIHNvbHZl
IGZvcgorICAgICAqICAgICdtYXJnaW4tcmlnaHQnICgnbWFyZ2luLWxlZnQnKS4KKyAgICBcKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KKyAgICBpbnQgbGVmdFZhbHVlOworICAgIGludCByaWdodFZhbHVlOwor
CisgICAgaWYgKG1hcmdpbkxlZnQuaXNBdXRvKCkgJiYgbWFyZ2luUmlnaHQuaXNBdXRvKCkpIHsK
KyAgICAgICAgLy8gJ2xlZnQnIGFuZCAncmlnaHQnIGNhbm5vdCBiZSAnYXV0bycgZHVlIHRvIHN0
ZXAgMworICAgICAgICBBU1NFUlQoIShsZWZ0LmlzQXV0bygpICYmIHJpZ2h0LmlzQXV0bygpKSk7
CisKKyAgICAgICAgbGVmdFZhbHVlID0gbGVmdC5jYWxjVmFsdWUoY29udGFpbmVyV2lkdGgpOwor
ICAgICAgICByaWdodFZhbHVlID0gcmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRoKTsKKwor
ICAgICAgICBpbnQgZGlmZmVyZW5jZSA9IGF2YWlsYWJsZVNwYWNlIC0gKGxlZnRWYWx1ZSArIHJp
Z2h0VmFsdWUpOworICAgICAgICBpZiAoZGlmZmVyZW5jZSA+IDApIHsKKyAgICAgICAgICAgIG1f
bWFyZ2luTGVmdCA9IGRpZmZlcmVuY2UgLyAyOyAvLyBzcGxpdCB0aGUgZGlmZXJlbmNlCisgICAg
ICAgICAgICBtX21hcmdpblJpZ2h0ID0gZGlmZmVyZW5jZSAtIG1fbWFyZ2luTGVmdDsgLy8gYWNj
b3VudCBmb3Igb2RkIHZhbHVlZCBkaWZmZXJlbmNlcworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gc2VlIEZJWE1FIDEKKyAgICAgICAgICAgIGlmIChjb250YWluZXJCbG9jay0+c3R5
bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7CisgICAgICAgICAgICAgICAgbV9tYXJnaW5MZWZ0
ID0gMDsKKyAgICAgICAgICAgICAgICBtX21hcmdpblJpZ2h0ID0gZGlmZmVyZW5jZTsgIC8vIHdp
bGwgYmUgbmVnYXRpdmUKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9t
YXJnaW5MZWZ0ID0gZGlmZmVyZW5jZTsgIC8vIHdpbGwgYmUgbmVnYXRpdmUKKyAgICAgICAgICAg
ICAgICBtX21hcmdpblJpZ2h0ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAg
TGVuZ3RoIGhlaWdodDsKLSAgICBpZiAoaGVpZ2h0VHlwZSA9PSBIZWlnaHQpCi0gICAgICAgIGhl
aWdodCA9IHN0eWxlKCktPmhlaWdodCgpOwotICAgIGVsc2UgaWYgKGhlaWdodFR5cGUgPT0gTWlu
SGVpZ2h0KQotICAgICAgICBoZWlnaHQgPSBzdHlsZSgpLT5taW5IZWlnaHQoKTsKLSAgICBlbHNl
Ci0gICAgICAgIGhlaWdodCA9IHN0eWxlKCktPm1heEhlaWdodCgpOworICAgIC8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qXAorICAgICAqIDUuIElmIGF0IHRoaXMgcG9pbnQgdGhlcmUgaXMgYW4gJ2F1dG8nIGxl
ZnQsIHNvbHZlIHRoZSBlcXVhdGlvbiBmb3IKKyAgICAgKiAgICB0aGF0IHZhbHVlLgorICAgIFwq
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLworICAgIH0gZWxzZSBpZiAobGVmdC5pc0F1dG8oKSkgeworICAgICAg
ICBtX21hcmdpbkxlZnQgPSBtYXJnaW5MZWZ0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCk7Cisg
ICAgICAgIG1fbWFyZ2luUmlnaHQgPSBtYXJnaW5SaWdodC5jYWxjVmFsdWUoY29udGFpbmVyV2lk
dGgpOworICAgICAgICByaWdodFZhbHVlID0gcmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRo
KTsKKworICAgICAgICAvLyBTb2x2ZSBmb3IgJ2xlZnQnCisgICAgICAgIGxlZnRWYWx1ZSA9IGF2
YWlsYWJsZVNwYWNlIC0gKHJpZ2h0VmFsdWUgKyBtX21hcmdpbkxlZnQgKyBtX21hcmdpblJpZ2h0
KTsKKyAgICB9IGVsc2UgaWYgKHJpZ2h0LmlzQXV0bygpKSB7CisgICAgICAgIG1fbWFyZ2luTGVm
dCA9IG1hcmdpbkxlZnQuY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRoKTsKKyAgICAgICAgbV9tYXJn
aW5SaWdodCA9IG1hcmdpblJpZ2h0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCk7CisgICAgICAg
IGxlZnRWYWx1ZSA9IGxlZnQuY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRoKTsKKworICAgICAgICAv
LyBTb2x2ZSBmb3IgJ3JpZ2h0JworICAgICAgICByaWdodFZhbHVlID0gYXZhaWxhYmxlU3BhY2Ug
LSAobGVmdFZhbHVlICsgbV9tYXJnaW5MZWZ0ICsgbV9tYXJnaW5SaWdodCk7CisgICAgfSBlbHNl
IGlmIChtYXJnaW5MZWZ0LmlzQXV0bygpKSB7CisgICAgICAgIG1fbWFyZ2luUmlnaHQgPSBtYXJn
aW5SaWdodC5jYWxjVmFsdWUoY29udGFpbmVyV2lkdGgpOworICAgICAgICBsZWZ0VmFsdWUgPSBs
ZWZ0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCk7CisgICAgICAgIHJpZ2h0VmFsdWUgPSByaWdo
dC5jYWxjVmFsdWUoY29udGFpbmVyV2lkdGgpOworCisgICAgICAgIC8vIFNvbHZlIGZvciAnbWFy
Z2luLWxlZnQnCisgICAgICAgIG1fbWFyZ2luTGVmdCA9IGF2YWlsYWJsZVNwYWNlIC0gKGxlZnRW
YWx1ZSArIHJpZ2h0VmFsdWUgKyBtX21hcmdpblJpZ2h0KTsKKyAgICB9IGVsc2UgaWYgKG1hcmdp
blJpZ2h0LmlzQXV0bygpKSB7CisgICAgICAgIG1fbWFyZ2luTGVmdCA9IG1hcmdpbkxlZnQuY2Fs
Y1ZhbHVlKGNvbnRhaW5lcldpZHRoKTsKKyAgICAgICAgbGVmdFZhbHVlID0gbGVmdC5jYWxjVmFs
dWUoY29udGFpbmVyV2lkdGgpOworICAgICAgICByaWdodFZhbHVlID0gcmlnaHQuY2FsY1ZhbHVl
KGNvbnRhaW5lcldpZHRoKTsKKworICAgICAgICAvLyBTb2x2ZSBmb3IgJ21hcmdpbi1yaWdodCcK
KyAgICAgICAgbV9tYXJnaW5SaWdodCA9IGF2YWlsYWJsZVNwYWNlIC0gKGxlZnRWYWx1ZSArIHJp
Z2h0VmFsdWUgKyBtX21hcmdpbkxlZnQpOworICAgIH0KKworICAgIC8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
XAorICAgICAqIDYuIElmIGF0IHRoaXMgcG9pbnQgdGhlIHZhbHVlcyBhcmUgb3Zlci1jb25zdHJh
aW5lZCwgaWdub3JlIHRoZSB2YWx1ZQorICAgICAqICAgIGZvciBlaXRoZXIgJ2xlZnQnIChpbiBj
YXNlIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUKKyAgICAgKiAgICBjb250YWluaW5n
IGJsb2NrIGlzICdydGwnKSBvciAncmlnaHQnIChpbiBjYXNlICdkaXJlY3Rpb24nIGlzCisgICAg
ICogICAgJ2x0cicpIGFuZCBzb2x2ZSBmb3IgdGhhdCB2YWx1ZS4KKyAgICBcKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KKyAgICAvLyBOT1RFOiAgSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBzb2x2ZSBmb3IgJ3Jp
Z2h0JyB3aGVuIHRoZSBkaXJlY3Rpb24gaXMKKyAgICAvLyBMVFIgYmVjYXVzZSB0aGUgdmFsdWUg
aXMgbm90IHVzZWQuCisgICAgaW50IHRvdGFsV2lkdGggPSBtX3dpZHRoICsgbGVmdFZhbHVlICsg
cmlnaHRWYWx1ZSArICBtX21hcmdpbkxlZnQgKyBtX21hcmdpblJpZ2h0OworICAgIC8vIHNlZSBG
SVhNRSAxCisgICAgaWYgKHRvdGFsV2lkdGggPiBjb250YWluZXJXaWR0aCAmJiAoY29udGFpbmVy
QmxvY2stPnN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCkpCisgICAgICAgIGxlZnRWYWx1ZSA9
IGNvbnRhaW5lcldpZHRoIC0gKHRvdGFsV2lkdGggLSBsZWZ0VmFsdWUpOworCisKKyAgICAvLyBV
c2UgY29tcHV0ZWQgdmFsdWVzIHRvIGNhbHVjdWxhdGUgdGhlIGhvcml6b250YWwgcG9zaXRpb24u
CisgICAgbV94ID0gbGVmdFZhbHVlICsgbV9tYXJnaW5MZWZ0ICsgY29udGFpbmVyQmxvY2stPmJv
cmRlckxlZnQoKTsKK30KKwordm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZVZlcnRpY2FsUmVw
bGFjZWQoKQoreworICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgYmFzZWQgb2ZmIG9mIHRoZSBXM0Mg
V29ya2luZyBEcmFmdCBmcm9tIEFwcmlsIDExLCAyMDA2IG9mCisgICAgLy8gQ1NTIDIuMTogU2Vj
dGlvbiAxMC42LjUgIkFic29sdXRseSBwb3NpdGlvbmVkLCByZXBsYWNlZCBlbGVtZW50cyIKKyAg
ICAvLyA8aHR0cDovL3d3dy53My5vcmcvVFIvMjAwNS9XRC1DU1MyMS0yMDA1MDYxMy92aXN1ZGV0
Lmh0bWwjYWJzLXJlcGxhY2VkLWhlaWdodD4KKyAgICAvLyAoYmxvY2stc3R5bGUtY29tbWVudHMg
aW4gdGhpcyBmdW5jdGlvbiBjb3JyZXNwb25kIHRvIHRleHQgZnJvbSB0aGUgc3BlYyBhbmQKKyAg
ICAvLyB0aGUgbnVtYmVycyBjb3JyZXNwb25kIHRvIG51bWJlcnMgaW4gc3BlYykKIAotICAgIGlu
dCBvdXJIZWlnaHQgPSBtX2hlaWdodDsKKyAgICAvLyBXZSBkb24ndCB1c2UgY29udGFpbmluZ0Js
b2NrKCksIHNpbmNlIHdlIG1heSBiZSBwb3NpdGlvbmVkIGJ5IGFuIGVuY2xvc2luZyByZWxwb3Np
dGlvbmVkIGlubGluZS4KKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIGNvbnRhaW5lckJsb2NrID0g
Y29udGFpbmVyKCk7CiAKLSAgICBpZiAoaXNUYWJsZSgpICYmIGhlaWdodC5pc0F1dG8oKSkKLSAg
ICAgICAgLy8gSGVpZ2h0IGlzIG5ldmVyIHVuc29sdmVkIGZvciB0YWJsZXMuICJhdXRvIiBtZWFu
cyBzaHJpbmsgdG8gZml0LiAgVXNlIG91cgotICAgICAgICAvLyBoZWlnaHQgaW5zdGVhZC4KLSAg
ICAgICAgaCA9IG91ckhlaWdodCAtIHBhYjsKLSAgICBlbHNlIGlmICghaGVpZ2h0LmlzQXV0bygp
KQotICAgIHsKLSAgICAgICAgaCA9IGNhbGNDb250ZW50Qm94SGVpZ2h0KGhlaWdodC5jYWxjVmFs
dWUoY2gpKTsKLSAgICAgICAgaWYgKG91ckhlaWdodCAtIHBhYiA+IGgpCi0gICAgICAgICAgICBv
dXJIZWlnaHQgPSBoICsgcGFiOwotICAgIH0KLSAgICBlbHNlIGlmIChpc1JlcGxhY2VkKCkpCi0g
ICAgICAgIGggPSBjYWxjUmVwbGFjZWRIZWlnaHQoKTsKLQotICAgIGludCBzdGF0aWNfdG9wPTA7
Ci0gICAgaWYgKCh0ID09IEFVVE8gJiYgYiA9PSBBVVRPKSB8fCBzdHlsZSgpLT50b3AoKS5pc1N0
YXRpYygpKSB7Ci0gICAgICAgIC8vIGNhbGMgaHlwb3RoZXRpY2FsIGxvY2F0aW9uIGluIHRoZSBu
b3JtYWwgZmxvdwotICAgICAgICAvLyB1c2VkIGZvciAxKSB0b3A9c3RhdGljLXBvc2l0aW9uCi0g
ICAgICAgIC8vICAgICAgICAgIDIpIHRvcCwgYm90dG9tLCBoZWlnaHQgYXJlIGFsbCBhdXRvIC0+
IGNhbGMgdG9wIC0+IDMuCi0gICAgICAgIC8vICAgICAgICAgIDMpIHByZWNhbGMgZm9yIGNhc2Ug
MiBiZWxvdwotICAgICAgICBzdGF0aWNfdG9wID0gbV9zdGF0aWNZIC0gY2ItPmJvcmRlclRvcCgp
OyAvLyBTaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gc2V0IHRocm91Z2ggbGF5b3V0IG9mIHRoZSBw
YXJlbnQoKS4KLSAgICAgICAgUmVuZGVyT2JqZWN0KiBwbyA9IHBhcmVudCgpOwotICAgICAgICBm
b3IgKDsgcG8gJiYgcG8gIT0gY2I7IHBvID0gcG8tPnBhcmVudCgpKQorICAgIC8vIEV2ZW4gaW4g
c3RyaWN0IG1vZGUgKHdoZXJlIHdlIGRvbid0IGdyb3cgdGhlIHJvb3QgdG8gZmlsbCB0aGUgdmll
d3BvcnQpCisgICAgLy8gb3RoZXIgYnJvd3NlcnMgcG9zaXRpb24gYXMgdGhvdWdoIHRoZSByb290
IGZpbGxzIHRoZSB2aWV3cG9ydC4KKyAgICBjb25zdCBpbnQgY29udGFpbmVySGVpZ2h0ID0gY29u
dGFpbmVyQmxvY2stPmlzUm9vdCgpID8gY29udGFpbmVyQmxvY2stPmF2YWlsYWJsZUhlaWdodCgp
IDogKGNvbnRhaW5lckJsb2NrLT5oZWlnaHQoKSAtIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJUb3Ao
KSAtIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJCb3R0b20oKSk7CisKKyAgICAvLyBWYXJpYWJsZXMg
dG8gc29sdmUuCisgICAgTGVuZ3RoIHRvcCA9IHN0eWxlKCktPnRvcCgpOworICAgIExlbmd0aCBi
b3R0b20gPSBzdHlsZSgpLT5ib3R0b20oKTsKKyAgICBMZW5ndGggbWFyZ2luVG9wID0gc3R5bGUo
KS0+bWFyZ2luVG9wKCk7CisgICAgTGVuZ3RoIG1hcmdpbkJvdHRvbSA9IHN0eWxlKCktPm1hcmdp
bkJvdHRvbSgpOworCisKKyAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKKyAgICAgKiAxLiBUaGUgdXNl
ZCB2YWx1ZSBvZiAnaGVpZ2h0JyBpcyBkZXRlcm1pbmVkIGFzIGZvciBpbmxpbmUgcmVwbGFjZWQK
KyAgICAgKiAgICBlbGVtZW50cy4KKyAgICBcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAvLyBOT1RF
OiBUaGlzIHZhbHVlIG9mIGhlaWdodCBpcyBGSU5BTCBpbiB0aGF0IHRoZSBtaW4vbWF4IGhlaWdo
dCBjYWxjdWxhdGlvbnMKKyAgICAvLyBhcmUgZGVhbHQgd2l0aCBpbiBjYWxjUmVwbGFjZWRIZWln
aHQoKS4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgc3RlcHMgdG8gcHJvZHVjZQorICAgIC8vIGNvcnJl
Y3QgbWF4L21pbiBpbiB0aGUgbm9uLXJlcGxhY2VkIHZlcnNpb24sIGFyZSBub3QgbmVjZXNzYXJ5
LgorICAgIGludCBoZWlnaHRWYWx1ZSA9IGNhbGNSZXBsYWNlZEhlaWdodCgpICsgYm9yZGVyVG9w
KCkgKyBib3JkZXJCb3R0b20oKSArIHBhZGRpbmdUb3AoKSArIHBhZGRpbmdCb3R0b20oKTsKKyAg
ICBpbnQgYXZhaWxhYmxlU3BhY2UgPSBjb250YWluZXJIZWlnaHQgLSBoZWlnaHRWYWx1ZTsKKwor
ICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorICAgICAqIDIuIElmIGJvdGggJ3RvcCcgYW5kICdib3R0
b20nIGhhdmUgdGhlIHZhbHVlICdhdXRvJywgcmVwbGFjZSAndG9wJworICAgICAqICAgIHdpdGgg
dGhlIGVsZW1lbnQncyBzdGF0aWMgcG9zaXRpb24uCisgICAgXCotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisg
ICAgLy8gc2VlIEZJWE1FIDIKKyAgICBpZiAodG9wLmlzQXV0bygpICYmIGJvdHRvbS5pc0F1dG8o
KSkgeworICAgICAgICAvLyBtX3N0YXRpY1kgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIHNldCB0
aHJvdWdoIGxheW91dCBvZiB0aGUgcGFyZW50KCkuCisgICAgICAgIGludCBzdGF0aWNUb3AgPSBt
X3N0YXRpY1kgLSBjb250YWluZXJCbG9jay0+Ym9yZGVyVG9wKCk7CisgICAgICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBwbyA9IHBhcmVudCgpOyBwbyAmJiBwbyAhPSBjb250YWluZXJCbG9jazsgcG8g
PSBwby0+cGFyZW50KCkpIHsKICAgICAgICAgICAgIGlmICghcG8tPmlzVGFibGVSb3coKSkKLSAg
ICAgICAgICAgICAgICBzdGF0aWNfdG9wICs9IHBvLT55UG9zKCk7Ci0KLSAgICAgICAgaWYgKGgg
PT0gQVVUTyB8fCBzdHlsZSgpLT50b3AoKS5pc1N0YXRpYygpKQotICAgICAgICAgICAgdCA9IHN0
YXRpY190b3A7Ci0gICAgfQotCi0gICAgaWYgKHQgIT0gQVVUTyAmJiBoICE9IEFVVE8gJiYgYiAh
PSBBVVRPKSB7Ci0gICAgICAgIC8vIHRvcCwgaGVpZ2h0LCBib3R0b20gYWxsIGdpdmVuLCBwbGF5
IHdpdGggbWFyZ2lucwotICAgICAgICBpbnQgb3QgPSBoICsgdCArIGIgKyBwYWI7Ci0KLSAgICAg
ICAgaWYgKG10ID09IEFVVE8gJiYgbWIgPT0gQVVUTykgewotICAgICAgICAgICAgLy8gYm90aCBt
YXJnaW5zIGF1dG8sIHNvbHZlIGZvciBlcXVhbGl0eQotICAgICAgICAgICAgbXQgPSAoY2ggLSBv
dCkvMjsKLSAgICAgICAgICAgIG1iID0gY2ggLSBvdCAtIG10OwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UgaWYgKG10PT1BVVRPKQotICAgICAgICAgICAgLy8gc29sdmUgZm9yIHRvcCBtYXJnaW4K
LSAgICAgICAgICAgIG10ID0gY2ggLSBvdCAtIG1iOwotICAgICAgICBlbHNlIGlmIChtYj09QVVU
TykKLSAgICAgICAgICAgIC8vIHNvbHZlIGZvciBib3R0b20gbWFyZ2luCi0gICAgICAgICAgICBt
YiA9IGNoIC0gb3QgLSBtdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgLy8gb3ZlcmNvbnN0
cmFpbmVkLCBzb2x2ZSBmb3IgYm90dG9tCi0gICAgICAgICAgICBiID0gY2ggLSAoaCArIHQgKyBt
dCArIG1iICsgcGFiKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIG9uZSBvciB0d28g
b2YgKHRvcCwgaGVpZ2h0LCBib3R0b20pIG1pc3NpbmcsIHNvbHZlCi0KLSAgICAgICAgLy8gYXV0
byBtYXJnaW5zIGFyZSBpZ25vcmVkCi0gICAgICAgIGlmIChtdCA9PSBBVVRPKQotICAgICAgICAg
ICAgbXQgPSAwOwotICAgICAgICBpZiAobWIgPT0gQVVUTykKLSAgICAgICAgICAgIG1iID0gMDsK
LQotICAgICAgICAvLzEuIHNvbHZlIHRvcCAmIGhlaWdodC4gdXNlIGNvbnRlbnQgaGVpZ2h0Lgot
ICAgICAgICBpZiAodCA9PSBBVVRPICYmIGggPT0gQVVUTyAmJiBiICE9IEFVVE8pIHsKLSAgICAg
ICAgICAgIGggPSBvdXJIZWlnaHQgLSBwYWI7Ci0gICAgICAgICAgICB0ID0gY2ggLSAoaCArIGIg
KyBtdCArIG1iICsgcGFiKTsKKyAgICAgICAgICAgICAgICBzdGF0aWNUb3AgKz0gcG8tPnlQb3Mo
KTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0ID09IEFVVE8gJiYgaCAhPSBBVVRPICYm
IGIgPT0gQVVUTykgLy8yLiBzb2x2ZSB0b3AgJiBib3R0b20uIHVzZSBzdGF0aWMgcG9zaXRpb25p
bmcuCi0gICAgICAgIHsKLSAgICAgICAgICAgIHQgPSBzdGF0aWNfdG9wOwotICAgICAgICAgICAg
YiA9IGNoIC0gKGggKyB0ICsgbXQgKyBtYiArIHBhYik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZSBpZiAodCAhPSBBVVRPICYmIGggPT0gQVVUTyAmJiBiID09IEFVVE8pIC8vMy4gc29sdmUgaGVp
Z2h0ICYgYm90dG9tLiB1c2UgY29udGVudCBoZWlnaHQuCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGggPSBvdXJIZWlnaHQgLSBwYWI7Ci0gICAgICAgICAgICBiID0gY2ggLSAoaCArIHQgKyBtdCAr
IG1iICsgcGFiKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIC8vNC4gc29sdmUg
dG9wCi0gICAgICAgIGlmICh0ID09IEFVVE8gJiYgaCAhPSBBVVRPICYmIGIgIT0gQVVUTykKLSAg
ICAgICAgICAgIHQgPSBjaCAtIChoICsgYiArIG10ICsgbWIgKyBwYWIpOwotICAgICAgICBlbHNl
Ci0KLSAgICAgICAgLy81LiBzb2x2ZSBoZWlnaHQKLSAgICAgICAgaWYgKHQgIT0gQVVUTyAmJiBo
ID09IEFVVE8gJiYgYiAhPSBBVVRPKQotICAgICAgICAgICAgaCA9IGNoIC0gKHQgKyBiICsgbXQg
KyBtYiArIHBhYik7Ci0gICAgICAgIGVsc2UKLQotICAgICAgICAvLzYuIHNvbHZlIGJvdHRvbQot
ICAgICAgICBpZiAodCAhPSBBVVRPICYmIGggIT0gQVVUTyAmJiBiID09IEFVVE8pCi0gICAgICAg
ICAgICBiID0gY2ggLSAoaCArIHQgKyBtdCArIG1iICsgcGFiKTsKKyAgICAgICAgdG9wLnNldFZh
bHVlKEZpeGVkLCBzdGF0aWNUb3ApOwogICAgIH0KIAotICAgIGlmIChvdXJIZWlnaHQgPCBoICsg
cGFiKSAvL2NvbnRlbnQgbXVzdCBzdGlsbCBmaXQKLSAgICAgICAgb3VySGVpZ2h0ID0gaCArIHBh
YjsKKyAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKKyAgICAgKiAzLiBJZiAnYm90dG9tJyBpcyAnYXV0
bycsIHJlcGxhY2UgYW55ICdhdXRvJyBvbiAnbWFyZ2luLXRvcCcgb3IKKyAgICAgKiAgICAnbWFy
Z2luLWJvdHRvbScgd2l0aCAnMCcuCisgICAgXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgLy8gRklY
TUU6IFRoZSBzcGVjLiBzYXlzIHRoYXQgdGhpcyBzdGVwIHNob3VsZCBvbmx5IGJlIHRha2VuIHdo
ZW4gYm90dG9tIGlzCisgICAgLy8gYXV0bywgYnV0IGlmIG9ubHkgdG9wIGlzIGF1dG8sIHRoaXMg
bWFrZXMgc3RlcCA0IGltcG9zc2libGUuCisgICAgaWYgKHRvcC5pc0F1dG8oKSB8fCBib3R0b20u
aXNBdXRvKCkpIHsKKyAgICAgICAgaWYgKG1hcmdpblRvcC5pc0F1dG8oKSkKKyAgICAgICAgICAg
IG1hcmdpblRvcC5zZXRWYWx1ZShGaXhlZCwgMCk7CisgICAgICAgIGlmIChtYXJnaW5Cb3R0b20u
aXNBdXRvKCkpCisgICAgICAgICAgICBtYXJnaW5Cb3R0b20uc2V0VmFsdWUoRml4ZWQsIDApOwor
ICAgIH0KKworICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorICAgICAqIDQuIElmIGF0IHRoaXMgcG9p
bnQgYm90aCAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyBhcmUgc3RpbGwKKyAgICAg
KiAgICAnYXV0bycsIHNvbHZlIHRoZSBlcXVhdGlvbiB1bmRlciB0aGUgZXh0cmEgY29uc3RyYWlu
dCB0aGF0IHRoZSB0d28KKyAgICAgKiAgICBtYXJnaW5zIG11c3QgZ2V0IGVxdWFsIHZhbHVlcy4K
KyAgICBcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICBpbnQgdG9wVmFsdWU7CisgICAgaW50IGJvdHRv
bVZhbHVlOworCisgICAgaWYgKG1hcmdpblRvcC5pc0F1dG8oKSAmJiBtYXJnaW5Cb3R0b20uaXNB
dXRvKCkpIHsKKyAgICAgICAgLy8gJ3RvcCcgYW5kICdib3R0b20nIGNhbm5vdCBiZSAnYXV0bycg
ZHVlIHRvIHN0ZXAgMiBhbmQgMyBjb21iaW5kZWQuCisgICAgICAgIEFTU0VSVCghKHRvcC5pc0F1
dG8oKSAmJiBib3R0b20uaXNBdXRvKCkpKTsKKworICAgICAgICB0b3BWYWx1ZSA9IHRvcC5jYWxj
VmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKyAgICAgICAgYm90dG9tVmFsdWUgPSBib3R0b20uY2Fs
Y1ZhbHVlKGNvbnRhaW5lckhlaWdodCk7CisKKyAgICAgICAgaW50IGRpZmZlcmVuY2UgPSBhdmFp
bGFibGVTcGFjZSAtICh0b3BWYWx1ZSArIGJvdHRvbVZhbHVlKTsKKyAgICAgICAgLy8gTk9URTog
VGhpcyBtYXkgcmVzdWx0IGluIG5lZ2F0aXZlIHZhbHVlcy4KKyAgICAgICAgbV9tYXJnaW5Ub3Ag
PSAgZGlmZmVyZW5jZSAvIDI7IC8vIHNwbGl0IHRoZSBkaWZmZXJlbmNlCisgICAgICAgIG1fbWFy
Z2luQm90dG9tID0gZGlmZmVyZW5jZSAtIG1fbWFyZ2luVG9wOyAvLyBhY2NvdW50IGZvciBvZGQg
dmFsdWVkIGRpZmZlcmVuY2VzCisKKyAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKKyAgICAgKiA1LiBJ
ZiBhdCB0aGlzIHBvaW50IHRoZXJlIGlzIG9ubHkgb25lICdhdXRvJyBsZWZ0LCBzb2x2ZSB0aGUg
ZXF1YXRpb24KKyAgICAgKiAgICBmb3IgdGhhdCB2YWx1ZS4KKyAgICBcKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KKyAgICB9IGVsc2UgaWYgKHRvcC5pc0F1dG8oKSkgeworICAgICAgICBtX21hcmdpblRvcCA9
IG1hcmdpblRvcC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKyAgICAgICAgbV9tYXJnaW5C
b3R0b20gPSBtYXJnaW5Cb3R0b20uY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCk7CisgICAgICAg
IGJvdHRvbVZhbHVlID0gYm90dG9tLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpOworCisgICAg
ICAgIC8vIFNvbHZlIGZvciAndG9wJworICAgICAgICB0b3BWYWx1ZSA9IGF2YWlsYWJsZVNwYWNl
IC0gKGJvdHRvbVZhbHVlICsgbV9tYXJnaW5Ub3AgKyBtX21hcmdpbkJvdHRvbSk7CisgICAgfSBl
bHNlIGlmIChib3R0b20uaXNBdXRvKCkpIHsKKyAgICAgICAgbV9tYXJnaW5Ub3AgPSBtYXJnaW5U
b3AuY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCk7CisgICAgICAgIG1fbWFyZ2luQm90dG9tID0g
bWFyZ2luQm90dG9tLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpOworICAgICAgICB0b3BWYWx1
ZSA9IHRvcC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKworICAgICAgICAvLyBTb2x2ZSBm
b3IgJ2JvdHRvbScKKyAgICAgICAgLy8gTk9URTogSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBzb2x2
ZSBmb3IgJ2JvdHRvbScgYmVjYXVzZSB3ZSBkb24ndCBldmVyCisgICAgICAgIC8vIHVzZSB0aGUg
dmFsdWUuCisgICAgfSBlbHNlIGlmIChtYXJnaW5Ub3AuaXNBdXRvKCkpIHsKKyAgICAgICAgbV9t
YXJnaW5Cb3R0b20gPSBtYXJnaW5Cb3R0b20uY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCk7Cisg
ICAgICAgIHRvcFZhbHVlID0gdG9wLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpOworICAgICAg
ICBib3R0b21WYWx1ZSA9IGJvdHRvbS5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKworICAg
ICAgICAvLyBTb2x2ZSBmb3IgJ21hcmdpbi10b3AnCisgICAgICAgIG1fbWFyZ2luVG9wID0gYXZh
aWxhYmxlU3BhY2UgLSAodG9wVmFsdWUgKyBib3R0b21WYWx1ZSArIG1fbWFyZ2luQm90dG9tKTsK
KyAgICB9IGVsc2UgaWYgKG1hcmdpbkJvdHRvbS5pc0F1dG8oKSkgeworICAgICAgICBtX21hcmdp
blRvcCA9IG1hcmdpblRvcC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KTsKKyAgICAgICAgdG9w
VmFsdWUgPSB0b3AuY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCk7CisgICAgICAgIGJvdHRvbVZh
bHVlID0gYm90dG9tLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpOworCisgICAgICAgIC8vIFNv
bHZlIGZvciAnbWFyZ2luLWJvdHRvbScKKyAgICAgICAgbV9tYXJnaW5Cb3R0b20gPSBhdmFpbGFi
bGVTcGFjZSAtICh0b3BWYWx1ZSArIGJvdHRvbVZhbHVlICsgbV9tYXJnaW5Ub3ApOworICAgIH0K
KworICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorICAgICAqIDYuIElmIGF0IHRoaXMgcG9pbnQgdGhl
IHZhbHVlcyBhcmUgb3Zlci1jb25zdHJhaW5lZCwgaWdub3JlIHRoZSB2YWx1ZQorICAgICAqICAg
IGZvciAnYm90dG9tJyBhbmQgc29sdmUgZm9yIHRoYXQgdmFsdWUuCisgICAgXCotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCisgICAgLy8gTk9URTogSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBkbyB0aGlzIHN0ZXAg
YmVjYXVzZSB3ZSBkb24ndCBlbmQgdXAgdXNpbmcKKyAgICAvLyB0aGUgdmFsdWUgb2YgJ2JvdHRv
bScgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSB2YWx1ZXMgYXJlIG92ZXItY29uc3RyYWluZWQK
KyAgICAvLyBvciBub3QuCisKKworICAgIC8vIE1ha2UgZmluYWwgYWRqdXN0bWVudHMgdG8gaGVp
Z2h0LgorICAgIGludCBjb250ZW50SGVpZ2h0ID0gbV9oZWlnaHQ7CisgICAgaWYgKChjb250ZW50
SGVpZ2h0IDwgaGVpZ2h0VmFsdWUpIHx8IChoYXNPdmVyZmxvd0NsaXAoKSAmJiBjb250ZW50SGVp
Z2h0ID4gaGVpZ2h0VmFsdWUpKQorICAgICAgICBjb250ZW50SGVpZ2h0ID0gaGVpZ2h0VmFsdWU7
CisKKyAgICAvLyBEbyBub3QgYWxsb3cgdGhlIGhlaWdodCB0byBiZSBuZWdhdGl2ZS4gIFRoaXMg
Y2FuIGhhcHBlbiB3aGVuIHNvbWVvbmUKKyAgICAvLyBzcGVjaWZpZXMgYm90aCB0b3AgYW5kIGJv
dHRvbSBidXQgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaGVpZ2h0IGlzIGxlc3MKKyAgICAvLyB0aGFu
IHRvcCwgZS5nLiwgdG9wOiAyMHB4LCBib3R0b206IDAsIGNvbnRhaW5pbmcgYmxvY2sgaGVpZ2h0
IDE2LgorICAgIGhlaWdodFZhbHVlID0gbWF4KDAsIGNvbnRlbnRIZWlnaHQpOworCisgICAgLy8g
SWYgb3VyIGNvbnRlbnQgaGVpZ2h0IGV4Y2VlZHMgdGhlIG5ldyBoZWlnaHQgb25jZSB3ZSd2ZSBz
ZXQgaXQsIHRoZW4gd2UKKyAgICAvLyBuZWVkIHRvIG1ha2Ugc3VyZSB0byB1cGRhdGUgb3ZlcmZs
b3cgdG8gdHJhY2sgdGhlIHNwaWxsb3V0LgorICAgIGlmIChtX2hlaWdodCA+IGhlaWdodFZhbHVl
KQorICAgICAgICBzZXRPdmVyZmxvd0hlaWdodChtX2hlaWdodCk7CisKKyAgICAvLyBTZXQgZmlu
YWwgdmFsdWVzLgorICAgIG1faGVpZ2h0ID0gaGVpZ2h0VmFsdWU7CiAKLSAgICBpZiAoaGFzT3Zl
cmZsb3dDbGlwKCkgJiYgb3VySGVpZ2h0ID4gaCArIHBhYikKLSAgICAgICAgb3VySGVpZ2h0ID0g
aCArIHBhYjsKLSAgICAKLSAgICAvLyBEbyBub3QgYWxsb3cgdGhlIGhlaWdodCB0byBiZSBuZWdh
dGl2ZS4gIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHNvbWVvbmUgc3BlY2lmaWVzIGJvdGggdG9wIGFu
ZCBib3R0b20KLSAgICAvLyBidXQgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaGVpZ2h0IGlzIGxlc3Mg
dGhhbiB0b3AsIGUuZy4sIHRvcDoyMHB4LCBib3R0b206MCwgY29udGFpbmluZyBibG9jayBoZWln
aHQgMTYuCi0gICAgb3VySGVpZ2h0ID0gbWF4KDAsIG91ckhlaWdodCk7Ci0gICAgCi0gICAgaCA9
IG91ckhlaWdodDsKLSAgICB5ID0gdCArIG10ICsgY2ItPmJvcmRlclRvcCgpOworICAgIC8vIFVz
ZSBjb21wdXRlZCB2YWx1ZXMgdG8gY2FsdWN1bGF0ZSB0aGUgdmVydGljYWwgcG9zaXRpb24uCisg
ICAgbV95ID0gdG9wVmFsdWUgKyBtX21hcmdpblRvcCArIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJU
b3AoKTsKIH0KIAogSW50UmVjdCBSZW5kZXJCb3g6OmNhcmV0UmVjdChpbnQgb2Zmc2V0LCBFQWZm
aW5pdHkgYWZmaW5pdHksIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQpJbmRleDogV2ViQ29y
ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0
MjQ5KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNiBA
QAorMjAwNi0wNS0wOCAgU2FtIFdlaW5pZyAgPHNhbS53ZWluaWdAZ21haWwuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhdGNoIGZvciBodHRw
Oi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDQKKyAgICAgICAg
Y2FsY0Fic29sdXRlSG9yaXpvbnRhbFZhbHVlcygpIGlzIGJlaW5nIGdldHRpbmcgcGFzc2VkIGFy
Z3VtZW50cworICAgICAgICBpbiB0aGUgd3Jvbmcgb3JkZXIgaW4gY2FsY0Fic29sdXRlSG9yaXpv
bnRhbCgpCisKKyAgICAgICAgQ2xlYW5zIHVwIHRoZSBSZW5kZXJCb3ggY29kZSBmb3IgYWJzb2x1
dGVseSBwb3NpdGlvbmVkIGVsZW1lbnRzCisgICAgICAgIGFuZCBhZGRzIG5ldyBmdW5jdGlvbnMg
Zm9yIHJlcGxhY2VkIGFic29sdXRlbHkgcG9zaXRpb25lZCAKKyAgICAgICAgZWxlbWVudHMuIE5v
dyB1c2VzIExlbmd0aCBzbyB0aGF0IG1hZ2ljIG51bWJlciAtNjY2NjY2IGZvciAKKyAgICAgICAg
YXV0byBsZW5ndGhzIGlzIG5vIGxvbmdlciB1c2VkLgorCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhv
cml6b250YWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jp
em9udGFsVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2FsY0Fic29sdXRl
VmVydGljYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0
aWNhbFZhbHVlcyk6IAorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjQWJzb2x1dGVI
b3Jpem9udGFsUmVwbGFjZWQpOiBIYW5kbGUgcmVwbGFjZWQKKyAgICAgICAgY2FzZSBzZXBhcmF0
ZWx5LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0aWNhbFJl
cGxhY2VkKTogZGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorCiAyMDA2
LTA1LTA4ICBMZXZpIFdlaW50cmF1YiAgPGx3ZWludHJhdWJAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IGp1c3Rpbi4K
</data>
<flag name="review"
          id="2276"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>