<?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>41383</bug_id>
          
          <creation_ts>2010-06-29 16:39:10 -0700</creation_ts>
          <short_desc>Need to validate the size of the incoming arrays for uniform* functions</short_desc>
          <delta_ts>2010-07-02 09:21:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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="Zhenyao Mo">zmo</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gman</cc>
    
    <cc>kbr</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>244552</commentid>
    <comment_count>0</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-29 16:39:10 -0700</bug_when>
    <thetext>either Float32Arrays or (float*, int size) argument pairs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245081</commentid>
    <comment_count>1</comment_count>
      <attachid>60191</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-30 21:14:12 -0700</bug_when>
    <thetext>Created attachment 60191
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245590</commentid>
    <comment_count>2</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-07-01 15:26:35 -0700</bug_when>
    <thetext>Gregg and I talked about this at length. The GL ES spec has this to say if you pass in too much data when setting elements in a uniform array (section 2.10, &quot;Vertex Shaders&quot;, pp.36-37):

&quot;When loading N elements starting at an arbitrary position k in a uniform declared as an array, elements k through k + N − 1 in the array will be replaced with the new values. Values for any array element that exceeds the highest array element index used, as reported by GetActiveUniform, will be ignored by the GL.&quot;

I think the only requirement should be that the incoming data (int*, Int32Array, float*, Float32Array) have at least one element of the given size (1, 2, 3, 4 for uniform[1234][fi]v, 1, 4, 9, 16 for uniformMatrix[1234]fv). I think the requirement that the number of elements in the array be a multiple of the size of the uniform should be dropped. The tests should then verify that passing in too little data raises INVALID_VALUE.

Sorry about the confusion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245599</commentid>
    <comment_count>3</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-01 15:35:22 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Gregg and I talked about this at length. The GL ES spec has this to say if you pass in too much data when setting elements in a uniform array (section 2.10, &quot;Vertex Shaders&quot;, pp.36-37):
&gt; 
&gt; &quot;When loading N elements starting at an arbitrary position k in a uniform declared as an array, elements k through k + N − 1 in the array will be replaced with the new values. Values for any array element that exceeds the highest array element index used, as reported by GetActiveUniform, will be ignored by the GL.&quot;
&gt; 
&gt; I think the only requirement should be that the incoming data (int*, Int32Array, float*, Float32Array) have at least one element of the given size (1, 2, 3, 4 for uniform[1234][fi]v, 1, 4, 9, 16 for uniformMatrix[1234]fv). I think the requirement that the number of elements in the array be a multiple of the size of the uniform should be dropped. The tests should then verify that passing in too little data raises INVALID_VALUE.
&gt; 
&gt; Sorry about the confusion.

No problem.  I&apos;ll revise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245614</commentid>
    <comment_count>4</comment_count>
      <attachid>60305</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-01 15:49:05 -0700</bug_when>
    <thetext>Created attachment 60305
revised patch after kbr&apos;s clarification</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245636</commentid>
    <comment_count>5</comment_count>
      <attachid>60305</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-07-01 16:29:43 -0700</bug_when>
    <thetext>Comment on attachment 60305
revised patch after kbr&apos;s clarification

Code looks good. A couple of small typos in the test, not really necessary to fix.


LayoutTests/fast/canvas/webgl/gl-uniform-arrays.html:165
 +      srcValues: [16, 15, 14, 13, 12, 11, 10, 11, 9],
11, 10, 11, 9 : did you mean to write 11, 10, 9, 8?


LayoutTests/fast/canvas/webgl/gl-uniform-arrays.html:198
 +      srcValues: [16, 15, 14, 13, 12, 11, 10, 11, 9, 8, 7, 6],
11, 10, 11, 9, 8, 7, 6: did you mean 11, 10, 9, 8, 7, 6, 5?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245665</commentid>
    <comment_count>6</comment_count>
      <attachid>60317</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-01 17:07:59 -0700</bug_when>
    <thetext>Created attachment 60317
revised patch: fixed the typo in the test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245669</commentid>
    <comment_count>7</comment_count>
      <attachid>60317</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-07-01 17:09:47 -0700</bug_when>
    <thetext>Comment on attachment 60317
revised patch: fixed the typo in the test.

Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245924</commentid>
    <comment_count>8</comment_count>
      <attachid>60317</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-07-02 08:46:15 -0700</bug_when>
    <thetext>Comment on attachment 60317
revised patch: fixed the typo in the test.

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245928</commentid>
    <comment_count>9</comment_count>
      <attachid>60317</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-02 09:21:11 -0700</bug_when>
    <thetext>Comment on attachment 60317
revised patch: fixed the typo in the test.

Clearing flags on attachment: 60317

Committed r62384: &lt;http://trac.webkit.org/changeset/62384&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245929</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-02 09:21:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60191</attachid>
            <date>2010-06-30 21:14:12 -0700</date>
            <delta_ts>2010-07-01 15:49:05 -0700</delta_ts>
            <desc>patch</desc>
            <filename>uniform.patch</filename>
            <type>text/plain</type>
            <size>26405</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjIyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTAtMDYtMzAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZWVkIHRv
IHZhbGlkYXRlIHRoZSBzaXplIG9mIHRoZSBpbmNvbWluZyBhcnJheXMgZm9yIHVuaWZvcm0qIGZ1
bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDEzODMKKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6
IFZhbGlkYXRlIGlucHV0IGFycmF5IHNpemUuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTNpdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm00ZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtNGl2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybU1hdHJpeDJmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm1NYXRyaXgzZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMpOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOiBBZGQgaGVscGVy
IGZ1bmN0aW9ucy4KKwogMjAxMC0wNi0zMCAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGRmaXggYWZ0ZXIgcjYyMTk2IGFuZCBy
NjIyMTQuCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwCShyZXZpc2lvbiA2MjIyMykKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5OCwxOCArMjQ5OCw5IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYoY28KIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmICghbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChs
b2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04pOworICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMSkp
CiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBpZiAoIXYpIHsKLSAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0
aW9uLT5sb2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMjUxNywxOCArMjUwOCw5IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGMKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxv
YXQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0o
ZWMpOwotICAgIGlmICghbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04p
OworICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwg
MSkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBpZiAoIXYpIHsKLSAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQpAQCAtMjU1MSwxOCArMjUzMyw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtMWkoY28KIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
MWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIWxv
Y2F0aW9uKQorICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwg
MSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1f
Y3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKCF2KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQogICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+
ZGF0YSgpLCB2LT5sZW5ndGgoKSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKIH0KQEAgLTI1NzAsMTggKzI1NDMsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTFpdihjCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCogdiwgaW50IHNpemUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCFsb2NhdGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9j
dXJyZW50UHJvZ3JhbSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgaWYgKCF2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCAxKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KIAotICAgIGlmICghdikgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KICAgICBtX2NvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYs
IHNpemUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0yNjA0
LDE5ICsyNTY4LDkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZihjbwog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCFsb2NhdGlvbikKKyAgICBpZiAoIXZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDIpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0g
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghdikg
ewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGSVhNRTog
bGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMgogICAgIG1fY29udGV4dC0+dW5pZm9y
bTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDIpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0yNjI0LDE5ICsyNTc4
LDkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoYwogdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTik7CisgICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0
aW9uLCB2LCBzaXplLCAyKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGlmICghdikg
ewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGSVhNRTog
bGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMgogICAgIG1fY29udGV4dC0+dW5pZm9y
bTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSAvIDIpOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0yNjU5LDE5ICsyNjAzLDkgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaShjbwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQz
MkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmICghbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+
cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAg
IGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMikpCiAgICAgICAg
IHJldHVybjsKLSAgICB9CiAKLSAgICBpZiAoIXYpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRp
cGxlIG9mIDIKICAgICBtX2NvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAyKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQpAQCAtMjY3OSwxOSArMjYxMyw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtMml2KGMKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
Mml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
IWxvY2F0aW9uKQorICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwg
diwgc2l6ZSwgMikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3Jh
bSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBs
ZSBvZiAyCiAgICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2
LCBzaXplIC8gMik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAg
LTI3MTQsMTkgKzI2MzgsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNm
KGNvCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIWxvY2F0aW9uKQorICAgIGlm
ICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMykpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0p
IHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KCF2KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZJ
WE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzCiAgICAgbV9jb250ZXh0LT51
bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8g
Myk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTI3MzQsMTkg
KzI2NDgsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihjCiB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIWxvY2F0aW9uKQorICAgIGlmICghdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgMykpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0p
IHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KCF2KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZJ
WE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzCiAgICAgbV9jb250ZXh0LT51
bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplIC8gMyk7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTI3NjksMTkgKzI2NzMsOSBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpKGNvCiB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKCFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0
aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7
CisgICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAzKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGlmICghdikgewotICAgICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEg
bXVsdGlwbGUgb2YgMwogICAgIG1fY29udGV4dC0+dW5pZm9ybTNpdihsb2NhdGlvbi0+bG9jYXRp
b24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDMpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0yNzg5LDE5ICsyNjgzLDkgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoYwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQqIHYsIGlu
dCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmICghbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJv
Z3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgIGlm
ICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgMykpCiAgICAg
ICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBpZiAoIXYpIHsKLSAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11
bHRpcGxlIG9mIDMKICAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24tPmxvY2F0aW9u
KCksIHYsIHNpemUgLyAzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQpAQCAtMjgyNCwxOSArMjcwOCw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtNGYoY28KIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghbG9jYXRpb24pCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVu
dFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgIGlmICghdmFsaWRhdGVVbmlmb3Jt
UGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgNCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAg
ICBpZiAoIXYpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Ly8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKICAgICBtX2NvbnRl
eHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVuZ3Ro
KCkgLyA0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMjg0
NCwxOSArMjcxOCw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KGMK
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghbG9jYXRpb24pCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dy
YW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1l
dGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgNCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAg
ICBpZiAoIXYpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Ly8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKICAgICBtX2NvbnRl
eHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUgLyA0KTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMjg3OSwxOSArMjc0Myw5IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGkoY28KIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoIWxvY2F0aW9uKQorICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFy
YW1ldGVycyhsb2NhdGlvbiwgdiwgNCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2KSB7Ci0gICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8g
YmUgYSBtdWx0aXBsZSBvZiA0CiAgICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5s
b2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gNCk7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTI4OTksMTkgKzI3NTMsOSBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihjCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCog
diwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKCFsb2NhdGlvbikKKyAgICBpZiAoIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMo
bG9jYXRpb24sIHYsIHNpemUsIDQpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobG9jYXRp
b24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghdikgewotICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJl
IGEgbXVsdGlwbGUgb2YgNAogICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbi0+bG9j
YXRpb24oKSwgdiwgc2l6ZSAvIDQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CiB9CkBAIC0yOTE5LDkgKzI3NjMsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTRpdihjCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBG
bG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0
cmFuc3Bvc2UsIHYpKQorICAgIGlmICghdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhs
b2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA0KSkKICAgICAgICAgcmV0dXJuOwotICAgIC8vIEZJWE1F
OiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0CiAgICAgbV9jb250ZXh0LT51bmlm
b3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwg
di0+bGVuZ3RoKCkgLyA0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQpAQCAtMjkyOSw5ICsyNzcyLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm1NYXRyaQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQq
IHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmICghdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJh
bnNwb3NlLCB2KSkKKyAgICBpZiAoIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9j
YXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgNCkpCiAgICAgICAgIHJldHVybjsKLSAgICAvLyBG
SVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAogICAgIG1fY29udGV4dC0+
dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdHJhbnNwb3NlLCB2LCBzaXpl
IC8gNCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTI5Mzks
OSArMjc4MSw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cmkKIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZh
bGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdikpCisg
ICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bv
c2UsIHYsIDkpKQogICAgICAgICByZXR1cm47Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0
byBiZSBhIG11bHRpcGxlIG9mIDkKICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9j
YXRpb24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDkp
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0yOTQ5LDkgKzI3
OTAsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpCiB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdiwgaW50IHNpemUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxp
ZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYpKQorICAg
IGlmICghdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNwb3Nl
LCB2LCBzaXplLCA5KSkKICAgICAgICAgcmV0dXJuOwotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVl
ZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA5CiAgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2
KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB0cmFuc3Bvc2UsIHYsIHNpemUgLyA5KTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMjk1OSw5ICsyNzk5LDggQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaQogdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBib29sIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVVbmlmb3JtTWF0
cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2KSkKKyAgICBpZiAoIXZhbGlkYXRl
VW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgMTYpKQogICAg
ICAgICByZXR1cm47Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxl
IG9mIDE2CiAgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAxNik7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTI5NjksOSArMjgwOCw4IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cmkKIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pZm9ybU1h
dHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdikpCisgICAgaWYgKCF2YWxpZGF0
ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDE2
KSkKICAgICAgICAgcmV0dXJuOwotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBt
dWx0aXBsZSBvZiAxNgogICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdHJhbnNwb3NlLCB2LCBzaXplIC8gMTYpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0zNjI2LDcgKzM0NjQsMzkgQEAgYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ2FwYQogICAgIH0KIH0KIAotYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgdm9pZCogdikKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBpbnQgbW9kKQor
eworICAgIGlmICghdikgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlv
biwgZmFsc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIG1vZCk7Cit9CisKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgaW50IG1vZCkKK3sKKyAgICBp
ZiAoIXYpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIGZhbHNl
LCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpLCBtb2QpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIHZvaWQqIHYsIGludCBzaXplLCBpbnQgbW9kKQoreworICAgIHJldHVy
biB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCBmYWxzZSwgdiwgc2l6
ZSwgbW9kKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9y
bU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBi
b29sIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBpbnQgbW9kKQoreworICAgIGlmICghdikg
eworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2
LT5kYXRhKCksIHYtPmxlbmd0aCgpLCBtb2QpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCB2b2lkKiB2LCBpbnQgc2l6ZSwgaW50
IG1vZCkKIHsKICAgICBpZiAoIWxvY2F0aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0z
NjQyLDYgKzM1MTIsMTAgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5p
ZgogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICBpZiAo
c2l6ZSA8PSAwIHx8IChzaXplICUgbW9kKSkgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiA2MjIyMykKKysr
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2Niw4ICs0NjYsMTIgQEAgY2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogICAgICAgICAv
LyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYSBHTCBjYXBhYmlsaXR5LgogICAgICAgICBi
b29sIHZhbGlkYXRlQ2FwYWJpbGl0eSh1bnNpZ25lZCBsb25nKTsKIAotICAgICAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgdW5pZm9ybU1hdHJp
eCBmdW5jdGlvbnMuCi0gICAgICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVy
cyhjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCB2
b2lkKiB2KTsKKyAgICAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlucHV0IHBh
cmFtZXRlcnMgZm9yIHVuaWZvcm0gZnVuY3Rpb25zLgorICAgICAgICBib29sIHZhbGlkYXRlVW5p
Zm9ybVBhcmFtZXRlcnMoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9h
dDMyQXJyYXkqIHYsIGludCBtb2QpOworICAgICAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFt
ZXRlcnMoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2
LCBpbnQgbW9kKTsKKyAgICAgICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwgaW50IHNpemUsIGludCBt
b2QpOworICAgICAgICBib29sIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgRmxvYXQzMkFy
cmF5KiB2LCBpbnQgbW9kKTsKKyAgICAgICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJh
bWV0ZXJzKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bv
c2UsIHZvaWQqIHYsIGludCBzaXplLCBpbnQgbW9kKTsKIAogICAgICAgICBmcmllbmQgY2xhc3Mg
V2ViR0xTdGF0ZVJlc3RvcmVyOwogICAgIH07CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MjIyMykKKysr
IExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisy
MDEwLTA2LTMwICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVlZCB0byB2YWxpZGF0ZSB0aGUgc2l6
ZSBvZiB0aGUgaW5jb21pbmcgYXJyYXlzIGZvciB1bmlmb3JtKiBmdW5jdGlvbnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMzgzCisKKyAgICAgICAg
KiBmYXN0L2NhbnZhcy93ZWJnbC9nbC11bmlmb3JtLWFycmF5cy1leHBlY3RlZC50eHQ6IFRlc3Qg
YWdhaW5zdCBpbnZhbGlkIGFycmF5IHNpemUuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wv
Z2wtdW5pZm9ybS1hcnJheXMuaHRtbDogRGl0dG8uCisgICAgICAgICogZmFzdC9jYW52YXMvd2Vi
Z2wvZ2wtdW5pZm9ybW1hdHJpeDRmdi1leHBlY3RlZC50eHQ6IERpdHRvLgorICAgICAgICAqIGZh
c3QvY2FudmFzL3dlYmdsL2dsLXVuaWZvcm1tYXRyaXg0ZnYuaHRtbDogRGl0dG8uCisKIDIwMTAt
MDYtMzAgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBV
bnJldmlld2VkIGZpeC4gVXBkYXRlIFF0IHNwZWNpZmljIGV4cGVjdGVkIGZpbGVzIGFmdGVyIHI2
MjIxNS4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXVuaWZvcm0tYXJy
YXlzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9nbC11bmlmb3JtLWFycmF5cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDYyMjIzKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdW5pZm9ybS1hcnJheXMtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC04LDYgKzgsNyBAQCBjaGVjayBmbG9hdAogUEFTUyAxIHVu
aWZvcm0gZm91bmQKIFBBU1MgdW5pZm9ybSBuYW1lIGlzICdjb2xvclswXScgbm90ICdjb2xvcicg
YXMgcGVyIE9wZW5HTCBFUyAyLjAuMjQgc2VjdGlvbiAyLjEwCiBQQVNTIHNob3VsZCBmYWlsIGlm
IHRoZXJlIGlzIG5vIGN1cnJlbnQgcHJvZ3JhbQorUEFTUyBzaG91bGQgZmFpbCB3aXRoIGludmFs
aWQgYXJyYXkgc2l6ZSB3aXRoIGdsLnVuaWZvcm0xZnYKIFBBU1MgY2FuIHNldCBhbiBhcnJheSBv
ZiB1bmlmb3JtcyB3aXRoIGdsLnVuaWZvcm0xZnYKIFBBU1MgY2FuIGNhbGwgZ2wuZ2V0VW5pZm9y
bQogUEFTUyBnbC5nZXRVbmlmb3JtIHJldHVybnMgdGhlIGNvcnJlY3QgdHlwZS4KQEAgLTI3LDYg
KzI4LDcgQEAgY2hlY2sgdmVjMgogUEFTUyAxIHVuaWZvcm0gZm91bmQKIFBBU1MgdW5pZm9ybSBu
YW1lIGlzICdjb2xvclswXScgbm90ICdjb2xvcicgYXMgcGVyIE9wZW5HTCBFUyAyLjAuMjQgc2Vj
dGlvbiAyLjEwCiBQQVNTIHNob3VsZCBmYWlsIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgcHJvZ3Jh
bQorUEFTUyBzaG91bGQgZmFpbCB3aXRoIGludmFsaWQgYXJyYXkgc2l6ZSB3aXRoIGdsLnVuaWZv
cm0yZnYKIFBBU1MgY2FuIHNldCBhbiBhcnJheSBvZiB1bmlmb3JtcyB3aXRoIGdsLnVuaWZvcm0y
ZnYKIFBBU1MgY2FuIGNhbGwgZ2wuZ2V0VW5pZm9ybQogUEFTUyBnbC5nZXRVbmlmb3JtIHJldHVy
bnMgdGhlIGNvcnJlY3QgdHlwZS4KQEAgLTQ2LDYgKzQ4LDcgQEAgY2hlY2sgdmVjMwogUEFTUyAx
IHVuaWZvcm0gZm91bmQKIFBBU1MgdW5pZm9ybSBuYW1lIGlzICdjb2xvclswXScgbm90ICdjb2xv
cicgYXMgcGVyIE9wZW5HTCBFUyAyLjAuMjQgc2VjdGlvbiAyLjEwCiBQQVNTIHNob3VsZCBmYWls
IGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgcHJvZ3JhbQorUEFTUyBzaG91bGQgZmFpbCB3aXRoIGlu
dmFsaWQgYXJyYXkgc2l6ZSB3aXRoIGdsLnVuaWZvcm0zZnYKIFBBU1MgY2FuIHNldCBhbiBhcnJh
eSBvZiB1bmlmb3JtcyB3aXRoIGdsLnVuaWZvcm0zZnYKIFBBU1MgY2FuIGNhbGwgZ2wuZ2V0VW5p
Zm9ybQogUEFTUyBnbC5nZXRVbmlmb3JtIHJldHVybnMgdGhlIGNvcnJlY3QgdHlwZS4KQEAgLTY1
LDYgKzY4LDcgQEAgY2hlY2sgdmVjNAogUEFTUyAxIHVuaWZvcm0gZm91bmQKIFBBU1MgdW5pZm9y
bSBuYW1lIGlzICdjb2xvclswXScgbm90ICdjb2xvcicgYXMgcGVyIE9wZW5HTCBFUyAyLjAuMjQg
c2VjdGlvbiAyLjEwCiBQQVNTIHNob3VsZCBmYWlsIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgcHJv
Z3JhbQorUEFTUyBzaG91bGQgZmFpbCB3aXRoIGludmFsaWQgYXJyYXkgc2l6ZSB3aXRoIGdsLnVu
aWZvcm00ZnYKIFBBU1MgY2FuIHNldCBhbiBhcnJheSBvZiB1bmlmb3JtcyB3aXRoIGdsLnVuaWZv
cm00ZnYKIFBBU1MgY2FuIGNhbGwgZ2wuZ2V0VW5pZm9ybQogUEFTUyBnbC5nZXRVbmlmb3JtIHJl
dHVybnMgdGhlIGNvcnJlY3QgdHlwZS4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL2dsLXVuaWZvcm0tYXJyYXlzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvZ2wtdW5pZm9ybS1hcnJheXMuaHRtbAkocmV2aXNpb24gNjIyMjMpCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC11bmlmb3JtLWFycmF5cy5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDggQEAgdmFyIHR5cGVJbmZvcyA9IFsKICAgICBj
aGVja1ZhbHVlOiBmdW5jdGlvbih0eXBlSW5mbywgaW5kZXgsIHZhbHVlKSB7CiAgICAgICByZXR1
cm4gdHlwZUluZm8uc3JjVmFsdWVzW2luZGV4XSA9PSB2YWx1ZTsKICAgICB9LAotICAgIHNyY1Zh
bHVlczogWzE2LCAxNSwgMTRdCisgICAgc3JjVmFsdWVzOiBbMTYsIDE1LCAxNF0sCisgICAgc3Jj
VmFsdWVzQmFkOiBbXSwKICAgfSwKICAgeyB0eXBlOiAndmVjMicsCiAgICAganNUeXBlT2Y6ICdG
bG9hdDMyQXJyYXknLApAQCAtMTMyLDYgKzEzMyw3IEBAIHZhciB0eXBlSW5mb3MgPSBbCiAgICAg
ICAgICAgICAgdHlwZUluZm8uc3JjVmFsdWVzW2luZGV4ICogMiArIDFdID09IHZhbHVlWzFdOwog
ICAgIH0sCiAgICAgc3JjVmFsdWVzOiBbMTYsIDE1LCAxNCwgMTMsIDEyLCAxMV0sCisgICAgc3Jj
VmFsdWVzQmFkOiBbMTYsIDE1LCAxNCwgMTMsIDEyXSwKICAgfSwKICAgeyB0eXBlOiAndmVjMycs
CiAgICAganNUeXBlT2Y6ICdGbG9hdDMyQXJyYXknLApAQCAtMTYxLDYgKzE2Myw3IEBAIHZhciB0
eXBlSW5mb3MgPSBbCiAgICAgICAgICAgICAgdHlwZUluZm8uc3JjVmFsdWVzW2luZGV4ICogMyAr
IDJdID09IHZhbHVlWzJdOwogICAgIH0sCiAgICAgc3JjVmFsdWVzOiBbMTYsIDE1LCAxNCwgMTMs
IDEyLCAxMSwgMTAsIDExLCA5XSwKKyAgICBzcmNWYWx1ZXNCYWQ6IFsxNiwgMTUsIDE0LCAxMywg
MTIsIDExLCAxMCwgMTFdLAogICB9LAogICB7IHR5cGU6ICd2ZWM0JywKICAgICBqc1R5cGVPZjog
J0Zsb2F0MzJBcnJheScsCkBAIC0xOTIsNyArMTk1LDggQEAgdmFyIHR5cGVJbmZvcyA9IFsKICAg
ICAgICAgICAgICB0eXBlSW5mby5zcmNWYWx1ZXNbaW5kZXggKiA0ICsgMl0gPT0gdmFsdWVbMl0g
JiYKICAgICAgICAgICAgICB0eXBlSW5mby5zcmNWYWx1ZXNbaW5kZXggKiA0ICsgM10gPT0gdmFs
dWVbM107CiAgICAgfSwKLSAgICBzcmNWYWx1ZXM6IFsxNiwgMTUsIDE0LCAxMywgMTIsIDExLCAx
MCwgMTEsIDksIDgsIDcsIDYsIDVdLAorICAgIHNyY1ZhbHVlczogWzE2LCAxNSwgMTQsIDEzLCAx
MiwgMTEsIDEwLCAxMSwgOSwgOCwgNywgNl0sCisgICAgc3JjVmFsdWVzQmFkOiBbMTYsIDE1LCAx
NCwgMTMsIDEyLCAxMSwgMTAsIDExLCA5LCA4LCA3XSwKICAgfQogXTsKIApAQCAtMjEyLDYgKzIx
Niw3IEBAIGZvciAodmFyIHR0ID0gMDsgdHQgPCB0eXBlSW5mb3MubGVuZ3RoOyAKICAgICAgICAg
ICAgICJ1bmlmb3JtIG5hbWUgaXMgJ2NvbG9yWzBdJyBub3QgJ2NvbG9yJyBhcyBwZXIgT3BlbkdM
IEVTIDIuMC4yNCBzZWN0aW9uIDIuMTAiKTsKICAgdmFyIGxvYyA9IGdsLmdldFVuaWZvcm1Mb2Nh
dGlvbihwcm9ncmFtLCAiY29sb3IiKTsKICAgdmFyIHNyY1ZhbHVlcyA9IHR5cGVJbmZvLnNyY1Zh
bHVlczsKKyAgdmFyIHNyY1ZhbHVlc0JhZCA9IHR5cGVJbmZvLnNyY1ZhbHVlc0JhZDsKIAogICAv
LyBUcnkgc2V0dGluZyB0aGUgdmFsdWUgYmVmb3JlIHVzaW5nIHRoZSBwcm9ncmFtCiAgIGdsW3R5
cGVJbmZvLnNldHRlcl0obG9jLCBzcmNWYWx1ZXMpOwpAQCAtMjE5LDYgKzIyNCw5IEBAIGZvciAo
dmFyIHR0ID0gMDsgdHQgPCB0eXBlSW5mb3MubGVuZ3RoOyAKICAgICAgICAgICAgICJzaG91bGQg
ZmFpbCBpZiB0aGVyZSBpcyBubyBjdXJyZW50IHByb2dyYW0iKTsKIAogICBnbC51c2VQcm9ncmFt
KHByb2dyYW0pOworICBnbFt0eXBlSW5mby5zZXR0ZXJdKGxvYywgc3JjVmFsdWVzQmFkKTsKKyAg
YXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuSU5WQUxJRF9WQUxVRSwKKyAgICAgICAgICAg
ICJzaG91bGQgZmFpbCB3aXRoIGludmFsaWQgYXJyYXkgc2l6ZSB3aXRoIGdsLiIgKyB0eXBlSW5m
by5zZXR0ZXIpOwogICBnbFt0eXBlSW5mby5zZXR0ZXJdKGxvYywgc3JjVmFsdWVzKTsKICAgYXNz
ZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuTk9fRVJST1IsCiAgICAgICAgICAgICAiY2FuIHNl
dCBhbiBhcnJheSBvZiB1bmlmb3JtcyB3aXRoIGdsLiIgKyB0eXBlSW5mby5zZXR0ZXIpOwpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdW5pZm9ybW1hdHJpeDRmdi1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wt
dW5pZm9ybW1hdHJpeDRmdi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDYyMjIzKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdW5pZm9ybW1hdHJpeDRmdi1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTYsMTAgKzYsMTMgQEAgT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQQogQ2hlY2tpbmcgZ2wudW5pZm9ybU1hdHJpeC4KIFBBU1MgY2FuIGNh
bGwgdW5pZm9ybU1hdHJpeDJmdndpdGggdHJhbnNwb3NlID0gZmFsc2UKIFBBU1MgdW5pZm9ybU1h
dHJpeDJmdiBzaG91bGQgcmV0dXJuIElOVkFMSURfVkFMVUUgd2l0aCB0cmFuc3Bvc2UgPSB0cnVl
CitQQVNTIHNob3VsZCBmYWlsIHdpdGggaW52YWxpZCBhcnJheSBzaXplIGZvciB1bmlmb3JtTWF0
cml4MmZ2CiBQQVNTIGNhbiBjYWxsIHVuaWZvcm1NYXRyaXgzZnZ3aXRoIHRyYW5zcG9zZSA9IGZh
bHNlCiBQQVNTIHVuaWZvcm1NYXRyaXgzZnYgc2hvdWxkIHJldHVybiBJTlZBTElEX1ZBTFVFIHdp
dGggdHJhbnNwb3NlID0gdHJ1ZQorUEFTUyBzaG91bGQgZmFpbCB3aXRoIGludmFsaWQgYXJyYXkg
c2l6ZSBmb3IgdW5pZm9ybU1hdHJpeDNmdgogUEFTUyBjYW4gY2FsbCB1bmlmb3JtTWF0cml4NGZ2
d2l0aCB0cmFuc3Bvc2UgPSBmYWxzZQogUEFTUyB1bmlmb3JtTWF0cml4NGZ2IHNob3VsZCByZXR1
cm4gSU5WQUxJRF9WQUxVRSB3aXRoIHRyYW5zcG9zZSA9IHRydWUKK1BBU1Mgc2hvdWxkIGZhaWwg
d2l0aCBpbnZhbGlkIGFycmF5IHNpemUgZm9yIHVuaWZvcm1NYXRyaXg0ZnYKIAogUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9nbC11bmlmb3JtbWF0cml4NGZ2Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdW5pZm9ybW1hdHJpeDRmdi5odG1sCShyZXZpc2lvbiA2MjIy
MykKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXVuaWZvcm1tYXRyaXg0ZnYu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsOSBAQCBmb3IgKHZhciBpaSA9IDI7IGlp
IDw9IDQ7ICsraWkpIHsKICAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuTk9fRVJST1Is
ICJjYW4gY2FsbCAiICsgbmFtZSArICJ3aXRoIHRyYW5zcG9zZSA9IGZhbHNlIik7CiAgIGdsW25h
bWVdKGxvYywgdHJ1ZSwgbWF0KTsKICAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuSU5W
QUxJRF9WQUxVRSwgbmFtZSArICIgc2hvdWxkIHJldHVybiBJTlZBTElEX1ZBTFVFIHdpdGggdHJh
bnNwb3NlID0gdHJ1ZSIpOworICBtYXRbaWkgKiBpaV0gPSAxOworICBnbFtuYW1lXShsb2MsIGZh
bHNlLCBtYXQpOworICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5JTlZBTElEX1ZBTFVF
LCAic2hvdWxkIGZhaWwgd2l0aCBpbnZhbGlkIGFycmF5IHNpemUgZm9yICIgKyBuYW1lKTsKIH0K
IAogZGVidWcoIiIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60305</attachid>
            <date>2010-07-01 15:49:05 -0700</date>
            <delta_ts>2010-07-01 17:07:59 -0700</delta_ts>
            <desc>revised patch after kbr&apos;s clarification</desc>
            <filename>uniform.patch</filename>
            <type>text/plain</type>
            <size>26724</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjIyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTAtMDYtMzAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZWVkIHRv
IHZhbGlkYXRlIHRoZSBzaXplIG9mIHRoZSBpbmNvbWluZyBhcnJheXMgZm9yIHVuaWZvcm0qIGZ1
bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDEzODMKKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6
IFZhbGlkYXRlIGlucHV0IGFycmF5IHNpemUuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTNpdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm00ZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtNGl2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybU1hdHJpeDJmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm1NYXRyaXgzZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMpOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOiBBZGQgaGVscGVy
IGZ1bmN0aW9ucy4KKwogMjAxMC0wNi0zMCAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGRmaXggYWZ0ZXIgcjYyMTk2IGFuZCBy
NjIyMTQuCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwCShyZXZpc2lvbiA2MjIyMykKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5OCwxOCArMjQ5OCw5IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYoY28KIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmICghbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChs
b2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04pOworICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMSkp
CiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBpZiAoIXYpIHsKLSAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0
aW9uLT5sb2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMjUxNywxOCArMjUwOCw5IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGMKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxv
YXQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0o
ZWMpOwotICAgIGlmICghbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04p
OworICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwg
MSkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBpZiAoIXYpIHsKLSAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQpAQCAtMjU1MSwxOCArMjUzMyw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtMWkoY28KIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
MWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIWxv
Y2F0aW9uKQorICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwg
MSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1f
Y3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKCF2KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQogICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+
ZGF0YSgpLCB2LT5sZW5ndGgoKSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKIH0KQEAgLTI1NzAsMTggKzI1NDMsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTFpdihjCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCogdiwgaW50IHNpemUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCFsb2NhdGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9j
dXJyZW50UHJvZ3JhbSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgaWYgKCF2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCAxKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KIAotICAgIGlmICghdikgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KICAgICBtX2NvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYs
IHNpemUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0yNjA0
LDE5ICsyNTY4LDkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZihjbwog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCFsb2NhdGlvbikKKyAgICBpZiAoIXZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDIpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0g
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghdikg
ewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGSVhNRTog
bGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMgogICAgIG1fY29udGV4dC0+dW5pZm9y
bTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDIpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0yNjI0LDE5ICsyNTc4
LDkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoYwogdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTik7CisgICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0
aW9uLCB2LCBzaXplLCAyKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGlmICghdikg
ewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGSVhNRTog
bGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMgogICAgIG1fY29udGV4dC0+dW5pZm9y
bTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSAvIDIpOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0yNjU5LDE5ICsyNjAzLDkgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaShjbwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQz
MkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmICghbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+
cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAg
IGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMikpCiAgICAgICAg
IHJldHVybjsKLSAgICB9CiAKLSAgICBpZiAoIXYpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRp
cGxlIG9mIDIKICAgICBtX2NvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAyKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQpAQCAtMjY3OSwxOSArMjYxMyw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtMml2KGMKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
Mml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
IWxvY2F0aW9uKQorICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwg
diwgc2l6ZSwgMikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3Jh
bSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBs
ZSBvZiAyCiAgICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2
LCBzaXplIC8gMik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAg
LTI3MTQsMTkgKzI2MzgsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNm
KGNvCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIWxvY2F0aW9uKQorICAgIGlm
ICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMykpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0p
IHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KCF2KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZJ
WE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzCiAgICAgbV9jb250ZXh0LT51
bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8g
Myk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTI3MzQsMTkg
KzI2NDgsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihjCiB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIWxvY2F0aW9uKQorICAgIGlmICghdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgMykpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0p
IHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KCF2KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZJ
WE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzCiAgICAgbV9jb250ZXh0LT51
bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplIC8gMyk7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTI3NjksMTkgKzI2NzMsOSBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpKGNvCiB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKCFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0
aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7
CisgICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAzKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGlmICghdikgewotICAgICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEg
bXVsdGlwbGUgb2YgMwogICAgIG1fY29udGV4dC0+dW5pZm9ybTNpdihsb2NhdGlvbi0+bG9jYXRp
b24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDMpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0yNzg5LDE5ICsyNjgzLDkgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoYwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQqIHYsIGlu
dCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmICghbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJv
Z3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgIGlm
ICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgMykpCiAgICAg
ICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBpZiAoIXYpIHsKLSAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11
bHRpcGxlIG9mIDMKICAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24tPmxvY2F0aW9u
KCksIHYsIHNpemUgLyAzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQpAQCAtMjgyNCwxOSArMjcwOCw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtNGYoY28KIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghbG9jYXRpb24pCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVu
dFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgIGlmICghdmFsaWRhdGVVbmlmb3Jt
UGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgNCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAg
ICBpZiAoIXYpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Ly8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKICAgICBtX2NvbnRl
eHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVuZ3Ro
KCkgLyA0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMjg0
NCwxOSArMjcxOCw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KGMK
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghbG9jYXRpb24pCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dy
YW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1l
dGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgNCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAg
ICBpZiAoIXYpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Ly8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKICAgICBtX2NvbnRl
eHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUgLyA0KTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMjg3OSwxOSArMjc0Myw5IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGkoY28KIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoIWxvY2F0aW9uKQorICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFy
YW1ldGVycyhsb2NhdGlvbiwgdiwgNCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2KSB7Ci0gICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8g
YmUgYSBtdWx0aXBsZSBvZiA0CiAgICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5s
b2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gNCk7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTI4OTksMTkgKzI3NTMsOSBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihjCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCog
diwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKCFsb2NhdGlvbikKKyAgICBpZiAoIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMo
bG9jYXRpb24sIHYsIHNpemUsIDQpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobG9jYXRp
b24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghdikgewotICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJl
IGEgbXVsdGlwbGUgb2YgNAogICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbi0+bG9j
YXRpb24oKSwgdiwgc2l6ZSAvIDQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CiB9CkBAIC0yOTE5LDkgKzI3NjMsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTRpdihjCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBG
bG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0
cmFuc3Bvc2UsIHYpKQorICAgIGlmICghdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhs
b2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA0KSkKICAgICAgICAgcmV0dXJuOwotICAgIC8vIEZJWE1F
OiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0CiAgICAgbV9jb250ZXh0LT51bmlm
b3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwg
di0+bGVuZ3RoKCkgLyA0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQpAQCAtMjkyOSw5ICsyNzcyLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm1NYXRyaQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQq
IHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmICghdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJh
bnNwb3NlLCB2KSkKKyAgICBpZiAoIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9j
YXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgNCkpCiAgICAgICAgIHJldHVybjsKLSAgICAvLyBG
SVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAogICAgIG1fY29udGV4dC0+
dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdHJhbnNwb3NlLCB2LCBzaXpl
IC8gNCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTI5Mzks
OSArMjc4MSw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cmkKIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZh
bGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdikpCisg
ICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bv
c2UsIHYsIDkpKQogICAgICAgICByZXR1cm47Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0
byBiZSBhIG11bHRpcGxlIG9mIDkKICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9j
YXRpb24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDkp
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0yOTQ5LDkgKzI3
OTAsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpCiB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdiwgaW50IHNpemUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxp
ZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYpKQorICAg
IGlmICghdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNwb3Nl
LCB2LCBzaXplLCA5KSkKICAgICAgICAgcmV0dXJuOwotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVl
ZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA5CiAgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2
KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB0cmFuc3Bvc2UsIHYsIHNpemUgLyA5KTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMjk1OSw5ICsyNzk5LDggQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaQogdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBib29sIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVVbmlmb3JtTWF0
cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2KSkKKyAgICBpZiAoIXZhbGlkYXRl
VW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgMTYpKQogICAg
ICAgICByZXR1cm47Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxl
IG9mIDE2CiAgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAxNik7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTI5NjksOSArMjgwOCw4IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cmkKIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pZm9ybU1h
dHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdikpCisgICAgaWYgKCF2YWxpZGF0
ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDE2
KSkKICAgICAgICAgcmV0dXJuOwotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBt
dWx0aXBsZSBvZiAxNgogICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdHJhbnNwb3NlLCB2LCBzaXplIC8gMTYpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0zNjI2LDcgKzM0NjQsMzkgQEAgYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ2FwYQogICAgIH0KIH0KIAotYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgdm9pZCogdikKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBpbnQgcmVxdWly
ZWRNaW5TaXplKQoreworICAgIGlmICghdikgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1l
dGVycyhsb2NhdGlvbiwgZmFsc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIHJlcXVpcmVkTWlu
U2l6ZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1Q
YXJhbWV0ZXJzKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJh
eSogdiwgaW50IHJlcXVpcmVkTWluU2l6ZSkKK3sKKyAgICBpZiAoIXYpIHsKKyAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHZhbGlkYXRlVW5p
Zm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIGZhbHNlLCB2LT5kYXRhKCksIHYtPmxlbmd0
aCgpLCByZXF1aXJlZE1pblNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIHZvaWQqIHYsIGludCBzaXplLCBpbnQgcmVxdWlyZWRNaW5TaXplKQoreworICAgIHJl
dHVybiB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCBmYWxzZSwgdiwg
c2l6ZSwgcmVxdWlyZWRNaW5TaXplKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBpbnQgcmVxdWly
ZWRNaW5TaXplKQoreworICAgIGlmICghdikgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1l
dGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpLCByZXF1aXJl
ZE1pblNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlm
b3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IGJvb2wgdHJhbnNwb3NlLCB2b2lkKiB2LCBpbnQgc2l6ZSwgaW50IHJlcXVpcmVkTWluU2l6ZSkK
IHsKICAgICBpZiAoIWxvY2F0aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNjQyLDYg
KzM1MTIsMTAgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZgogICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICBpZiAoc2l6ZSA8
IHJlcXVpcmVkTWluU2l6ZSkgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiA2MjIyMykKKysrIFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
Niw4ICs0NjYsMTIgQEAgY2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogICAgICAgICAvLyBIZWxwZXIg
ZnVuY3Rpb24gdG8gdmFsaWRhdGUgYSBHTCBjYXBhYmlsaXR5LgogICAgICAgICBib29sIHZhbGlk
YXRlQ2FwYWJpbGl0eSh1bnNpZ25lZCBsb25nKTsKIAotICAgICAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gdG8gdmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgdW5pZm9ybU1hdHJpeCBmdW5jdGlv
bnMuCi0gICAgICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCB2b2lkKiB2KTsK
KyAgICAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlucHV0IHBhcmFtZXRlcnMg
Zm9yIHVuaWZvcm0gZnVuY3Rpb25zLgorICAgICAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFt
ZXRlcnMoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkq
IHYsIGludCBtb2QpOworICAgICAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBpbnQgbW9k
KTsKKyAgICAgICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwgaW50IHNpemUsIGludCBtb2QpOworICAg
ICAgICBib29sIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBp
bnQgbW9kKTsKKyAgICAgICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIHZvaWQq
IHYsIGludCBzaXplLCBpbnQgbW9kKTsKIAogICAgICAgICBmcmllbmQgY2xhc3MgV2ViR0xTdGF0
ZVJlc3RvcmVyOwogICAgIH07CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MjIyMykKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEwLTA2LTMw
ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmVlZCB0byB2YWxpZGF0ZSB0aGUgc2l6ZSBvZiB0aGUg
aW5jb21pbmcgYXJyYXlzIGZvciB1bmlmb3JtKiBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMzgzCisKKyAgICAgICAgKiBmYXN0L2Nh
bnZhcy93ZWJnbC9nbC11bmlmb3JtLWFycmF5cy1leHBlY3RlZC50eHQ6IFRlc3QgYWdhaW5zdCBp
bnZhbGlkIGFycmF5IHNpemUuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdW5pZm9y
bS1hcnJheXMuaHRtbDogRGl0dG8uCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdW5p
Zm9ybW1hdHJpeDRmdi1leHBlY3RlZC50eHQ6IERpdHRvLgorICAgICAgICAqIGZhc3QvY2FudmFz
L3dlYmdsL2dsLXVuaWZvcm1tYXRyaXg0ZnYuaHRtbDogRGl0dG8uCisKIDIwMTAtMDYtMzAgIENz
YWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
IGZpeC4gVXBkYXRlIFF0IHNwZWNpZmljIGV4cGVjdGVkIGZpbGVzIGFmdGVyIHI2MjIxNS4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXVuaWZvcm0tYXJyYXlzLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC11
bmlmb3JtLWFycmF5cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDYyMjIzKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdW5pZm9ybS1hcnJheXMtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC04LDYgKzgsNyBAQCBjaGVjayBmbG9hdAogUEFTUyAxIHVuaWZvcm0gZm91
bmQKIFBBU1MgdW5pZm9ybSBuYW1lIGlzICdjb2xvclswXScgbm90ICdjb2xvcicgYXMgcGVyIE9w
ZW5HTCBFUyAyLjAuMjQgc2VjdGlvbiAyLjEwCiBQQVNTIHNob3VsZCBmYWlsIGlmIHRoZXJlIGlz
IG5vIGN1cnJlbnQgcHJvZ3JhbQorUEFTUyBzaG91bGQgZmFpbCB3aXRoIGluc3VmZmljaWVudCBh
cnJheSBzaXplIHdpdGggZ2wudW5pZm9ybTFmdgogUEFTUyBjYW4gc2V0IGFuIGFycmF5IG9mIHVu
aWZvcm1zIHdpdGggZ2wudW5pZm9ybTFmdgogUEFTUyBjYW4gY2FsbCBnbC5nZXRVbmlmb3JtCiBQ
QVNTIGdsLmdldFVuaWZvcm0gcmV0dXJucyB0aGUgY29ycmVjdCB0eXBlLgpAQCAtMjcsNiArMjgs
NyBAQCBjaGVjayB2ZWMyCiBQQVNTIDEgdW5pZm9ybSBmb3VuZAogUEFTUyB1bmlmb3JtIG5hbWUg
aXMgJ2NvbG9yWzBdJyBub3QgJ2NvbG9yJyBhcyBwZXIgT3BlbkdMIEVTIDIuMC4yNCBzZWN0aW9u
IDIuMTAKIFBBU1Mgc2hvdWxkIGZhaWwgaWYgdGhlcmUgaXMgbm8gY3VycmVudCBwcm9ncmFtCitQ
QVNTIHNob3VsZCBmYWlsIHdpdGggaW5zdWZmaWNpZW50IGFycmF5IHNpemUgd2l0aCBnbC51bmlm
b3JtMmZ2CiBQQVNTIGNhbiBzZXQgYW4gYXJyYXkgb2YgdW5pZm9ybXMgd2l0aCBnbC51bmlmb3Jt
MmZ2CiBQQVNTIGNhbiBjYWxsIGdsLmdldFVuaWZvcm0KIFBBU1MgZ2wuZ2V0VW5pZm9ybSByZXR1
cm5zIHRoZSBjb3JyZWN0IHR5cGUuCkBAIC00Niw2ICs0OCw3IEBAIGNoZWNrIHZlYzMKIFBBU1Mg
MSB1bmlmb3JtIGZvdW5kCiBQQVNTIHVuaWZvcm0gbmFtZSBpcyAnY29sb3JbMF0nIG5vdCAnY29s
b3InIGFzIHBlciBPcGVuR0wgRVMgMi4wLjI0IHNlY3Rpb24gMi4xMAogUEFTUyBzaG91bGQgZmFp
bCBpZiB0aGVyZSBpcyBubyBjdXJyZW50IHByb2dyYW0KK1BBU1Mgc2hvdWxkIGZhaWwgd2l0aCBp
bnN1ZmZpY2llbnQgYXJyYXkgc2l6ZSB3aXRoIGdsLnVuaWZvcm0zZnYKIFBBU1MgY2FuIHNldCBh
biBhcnJheSBvZiB1bmlmb3JtcyB3aXRoIGdsLnVuaWZvcm0zZnYKIFBBU1MgY2FuIGNhbGwgZ2wu
Z2V0VW5pZm9ybQogUEFTUyBnbC5nZXRVbmlmb3JtIHJldHVybnMgdGhlIGNvcnJlY3QgdHlwZS4K
QEAgLTY1LDYgKzY4LDcgQEAgY2hlY2sgdmVjNAogUEFTUyAxIHVuaWZvcm0gZm91bmQKIFBBU1Mg
dW5pZm9ybSBuYW1lIGlzICdjb2xvclswXScgbm90ICdjb2xvcicgYXMgcGVyIE9wZW5HTCBFUyAy
LjAuMjQgc2VjdGlvbiAyLjEwCiBQQVNTIHNob3VsZCBmYWlsIGlmIHRoZXJlIGlzIG5vIGN1cnJl
bnQgcHJvZ3JhbQorUEFTUyBzaG91bGQgZmFpbCB3aXRoIGluc3VmZmljaWVudCBhcnJheSBzaXpl
IHdpdGggZ2wudW5pZm9ybTRmdgogUEFTUyBjYW4gc2V0IGFuIGFycmF5IG9mIHVuaWZvcm1zIHdp
dGggZ2wudW5pZm9ybTRmdgogUEFTUyBjYW4gY2FsbCBnbC5nZXRVbmlmb3JtCiBQQVNTIGdsLmdl
dFVuaWZvcm0gcmV0dXJucyB0aGUgY29ycmVjdCB0eXBlLgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvZ2wtdW5pZm9ybS1hcnJheXMuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC11bmlmb3JtLWFycmF5cy5odG1sCShyZXZpc2lv
biA2MjIyMykKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXVuaWZvcm0tYXJy
YXlzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsOCBAQCB2YXIgdHlwZUluZm9z
ID0gWwogICAgIGNoZWNrVmFsdWU6IGZ1bmN0aW9uKHR5cGVJbmZvLCBpbmRleCwgdmFsdWUpIHsK
ICAgICAgIHJldHVybiB0eXBlSW5mby5zcmNWYWx1ZXNbaW5kZXhdID09IHZhbHVlOwogICAgIH0s
Ci0gICAgc3JjVmFsdWVzOiBbMTYsIDE1LCAxNF0KKyAgICBzcmNWYWx1ZXM6IFsxNiwgMTUsIDE0
XSwKKyAgICBzcmNWYWx1ZXNCYWQ6IFtdLAogICB9LAogICB7IHR5cGU6ICd2ZWMyJywKICAgICBq
c1R5cGVPZjogJ0Zsb2F0MzJBcnJheScsCkBAIC0xMzIsNiArMTMzLDcgQEAgdmFyIHR5cGVJbmZv
cyA9IFsKICAgICAgICAgICAgICB0eXBlSW5mby5zcmNWYWx1ZXNbaW5kZXggKiAyICsgMV0gPT0g
dmFsdWVbMV07CiAgICAgfSwKICAgICBzcmNWYWx1ZXM6IFsxNiwgMTUsIDE0LCAxMywgMTIsIDEx
XSwKKyAgICBzcmNWYWx1ZXNCYWQ6IFsxNl0sCiAgIH0sCiAgIHsgdHlwZTogJ3ZlYzMnLAogICAg
IGpzVHlwZU9mOiAnRmxvYXQzMkFycmF5JywKQEAgLTE2MSw2ICsxNjMsNyBAQCB2YXIgdHlwZUlu
Zm9zID0gWwogICAgICAgICAgICAgIHR5cGVJbmZvLnNyY1ZhbHVlc1tpbmRleCAqIDMgKyAyXSA9
PSB2YWx1ZVsyXTsKICAgICB9LAogICAgIHNyY1ZhbHVlczogWzE2LCAxNSwgMTQsIDEzLCAxMiwg
MTEsIDEwLCAxMSwgOV0sCisgICAgc3JjVmFsdWVzQmFkOiBbMTYsIDE1XSwKICAgfSwKICAgeyB0
eXBlOiAndmVjNCcsCiAgICAganNUeXBlT2Y6ICdGbG9hdDMyQXJyYXknLApAQCAtMTkyLDcgKzE5
NSw4IEBAIHZhciB0eXBlSW5mb3MgPSBbCiAgICAgICAgICAgICAgdHlwZUluZm8uc3JjVmFsdWVz
W2luZGV4ICogNCArIDJdID09IHZhbHVlWzJdICYmCiAgICAgICAgICAgICAgdHlwZUluZm8uc3Jj
VmFsdWVzW2luZGV4ICogNCArIDNdID09IHZhbHVlWzNdOwogICAgIH0sCi0gICAgc3JjVmFsdWVz
OiBbMTYsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDExLCA5LCA4LCA3LCA2LCA1XSwKKyAgICBz
cmNWYWx1ZXM6IFsxNiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgMTEsIDksIDgsIDcsIDZdLAor
ICAgIHNyY1ZhbHVlc0JhZDogWzE2LCAxNSwgMTRdLAogICB9CiBdOwogCkBAIC0yMTIsNiArMjE2
LDcgQEAgZm9yICh2YXIgdHQgPSAwOyB0dCA8IHR5cGVJbmZvcy5sZW5ndGg7IAogICAgICAgICAg
ICAgInVuaWZvcm0gbmFtZSBpcyAnY29sb3JbMF0nIG5vdCAnY29sb3InIGFzIHBlciBPcGVuR0wg
RVMgMi4wLjI0IHNlY3Rpb24gMi4xMCIpOwogICB2YXIgbG9jID0gZ2wuZ2V0VW5pZm9ybUxvY2F0
aW9uKHByb2dyYW0sICJjb2xvciIpOwogICB2YXIgc3JjVmFsdWVzID0gdHlwZUluZm8uc3JjVmFs
dWVzOworICB2YXIgc3JjVmFsdWVzQmFkID0gdHlwZUluZm8uc3JjVmFsdWVzQmFkOwogCiAgIC8v
IFRyeSBzZXR0aW5nIHRoZSB2YWx1ZSBiZWZvcmUgdXNpbmcgdGhlIHByb2dyYW0KICAgZ2xbdHlw
ZUluZm8uc2V0dGVyXShsb2MsIHNyY1ZhbHVlcyk7CkBAIC0yMTksNiArMjI0LDkgQEAgZm9yICh2
YXIgdHQgPSAwOyB0dCA8IHR5cGVJbmZvcy5sZW5ndGg7IAogICAgICAgICAgICAgInNob3VsZCBm
YWlsIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgcHJvZ3JhbSIpOwogCiAgIGdsLnVzZVByb2dyYW0o
cHJvZ3JhbSk7CisgIGdsW3R5cGVJbmZvLnNldHRlcl0obG9jLCBzcmNWYWx1ZXNCYWQpOworICBh
c3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5JTlZBTElEX1ZBTFVFLAorICAgICAgICAgICAg
InNob3VsZCBmYWlsIHdpdGggaW5zdWZmaWNpZW50IGFycmF5IHNpemUgd2l0aCBnbC4iICsgdHlw
ZUluZm8uc2V0dGVyKTsKICAgZ2xbdHlwZUluZm8uc2V0dGVyXShsb2MsIHNyY1ZhbHVlcyk7CiAg
IGFzc2VydE1zZyhnbC5nZXRFcnJvcigpID09IGdsLk5PX0VSUk9SLAogICAgICAgICAgICAgImNh
biBzZXQgYW4gYXJyYXkgb2YgdW5pZm9ybXMgd2l0aCBnbC4iICsgdHlwZUluZm8uc2V0dGVyKTsK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXVuaWZvcm1tYXRyaXg0ZnYt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L2dsLXVuaWZvcm1tYXRyaXg0ZnYtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2MjIyMykKKysrIExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXVuaWZvcm1tYXRyaXg0ZnYtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDEwICs0LDEzIEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEEKIAogCiBDaGVja2luZyBnbC51bmlmb3JtTWF0cml4LgorUEFT
UyBzaG91bGQgZmFpbCB3aXRoIGluc3VmZmljaWVudCBhcnJheSBzaXplIGZvciB1bmlmb3JtTWF0
cml4MmZ2CiBQQVNTIGNhbiBjYWxsIHVuaWZvcm1NYXRyaXgyZnZ3aXRoIHRyYW5zcG9zZSA9IGZh
bHNlCiBQQVNTIHVuaWZvcm1NYXRyaXgyZnYgc2hvdWxkIHJldHVybiBJTlZBTElEX1ZBTFVFIHdp
dGggdHJhbnNwb3NlID0gdHJ1ZQorUEFTUyBzaG91bGQgZmFpbCB3aXRoIGluc3VmZmljaWVudCBh
cnJheSBzaXplIGZvciB1bmlmb3JtTWF0cml4M2Z2CiBQQVNTIGNhbiBjYWxsIHVuaWZvcm1NYXRy
aXgzZnZ3aXRoIHRyYW5zcG9zZSA9IGZhbHNlCiBQQVNTIHVuaWZvcm1NYXRyaXgzZnYgc2hvdWxk
IHJldHVybiBJTlZBTElEX1ZBTFVFIHdpdGggdHJhbnNwb3NlID0gdHJ1ZQorUEFTUyBzaG91bGQg
ZmFpbCB3aXRoIGluc3VmZmljaWVudCBhcnJheSBzaXplIGZvciB1bmlmb3JtTWF0cml4NGZ2CiBQ
QVNTIGNhbiBjYWxsIHVuaWZvcm1NYXRyaXg0ZnZ3aXRoIHRyYW5zcG9zZSA9IGZhbHNlCiBQQVNT
IHVuaWZvcm1NYXRyaXg0ZnYgc2hvdWxkIHJldHVybiBJTlZBTElEX1ZBTFVFIHdpdGggdHJhbnNw
b3NlID0gdHJ1ZQogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC11bmlm
b3JtbWF0cml4NGZ2Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvZ2wtdW5pZm9ybW1hdHJpeDRmdi5odG1sCShyZXZpc2lvbiA2MjIyMykKKysrIExheW91
dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXVuaWZvcm1tYXRyaXg0ZnYuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsMTEgKzQ0LDE2IEBAIGZvciAodmFyIGlpID0gMjsgaWkgPD0gNDsgKytp
aSkgewogICB2YXIgbWF0ID0gW107CiAgIGZvciAodmFyIGpqID0gMDsgamogPCBpaTsgKytqaikg
ewogICAgIGZvciAodmFyIGxsID0gMDsgbGwgPCBpaTsgKytsbCkgeworICAgICAgaWYgKGpqID09
IGlpIC0xICYmIGxsID09IGlpIC0gMSkKKyAgICAgICAgY29udGludWU7CiAgICAgICBtYXRbamog
KiBpaSArIGxsXSA9IChqaiA9PSBsbCkgPyAxIDogMDsKICAgICB9CiAgIH0KICAgbmFtZSA9ICJ1
bmlmb3JtTWF0cml4IiArIGlpICsgImZ2IjsKICAgZ2xbbmFtZV0obG9jLCBmYWxzZSwgbWF0KTsK
KyAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuSU5WQUxJRF9WQUxVRSwgInNob3VsZCBm
YWlsIHdpdGggaW5zdWZmaWNpZW50IGFycmF5IHNpemUgZm9yICIgKyBuYW1lKTsKKyAgbWF0W2lp
ICogaWkgLSAxXSA9IDE7CisgIGdsW25hbWVdKGxvYywgZmFsc2UsIG1hdCk7CiAgIGFzc2VydE1z
ZyhnbC5nZXRFcnJvcigpID09IGdsLk5PX0VSUk9SLCAiY2FuIGNhbGwgIiArIG5hbWUgKyAid2l0
aCB0cmFuc3Bvc2UgPSBmYWxzZSIpOwogICBnbFtuYW1lXShsb2MsIHRydWUsIG1hdCk7CiAgIGFz
c2VydE1zZyhnbC5nZXRFcnJvcigpID09IGdsLklOVkFMSURfVkFMVUUsIG5hbWUgKyAiIHNob3Vs
ZCByZXR1cm4gSU5WQUxJRF9WQUxVRSB3aXRoIHRyYW5zcG9zZSA9IHRydWUiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60317</attachid>
            <date>2010-07-01 17:07:59 -0700</date>
            <delta_ts>2010-07-02 09:21:11 -0700</delta_ts>
            <desc>revised patch: fixed the typo in the test.</desc>
            <filename>uniform.patch</filename>
            <type>text/plain</type>
            <size>28133</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjIyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTAtMDYtMzAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZWVkIHRv
IHZhbGlkYXRlIHRoZSBzaXplIG9mIHRoZSBpbmNvbWluZyBhcnJheXMgZm9yIHVuaWZvcm0qIGZ1
bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDEzODMKKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6
IFZhbGlkYXRlIGlucHV0IGFycmF5IHNpemUuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTNpdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm00ZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtNGl2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybU1hdHJpeDJmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm1NYXRyaXgzZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMpOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOiBBZGQgaGVscGVy
IGZ1bmN0aW9ucy4KKwogMjAxMC0wNi0zMCAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGRmaXggYWZ0ZXIgcjYyMTk2IGFuZCBy
NjIyMTQuCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwCShyZXZpc2lvbiA2MjIyMykKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5OCwxOCArMjQ5OCw5IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYoY28KIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmICghbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChs
b2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04pOworICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMSkp
CiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBpZiAoIXYpIHsKLSAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0
aW9uLT5sb2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMjUxNywxOCArMjUwOCw5IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGMKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxv
YXQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0o
ZWMpOwotICAgIGlmICghbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04p
OworICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwg
MSkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBpZiAoIXYpIHsKLSAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQpAQCAtMjU1MSwxOCArMjUzMyw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtMWkoY28KIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
MWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIWxv
Y2F0aW9uKQorICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwg
MSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1f
Y3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKCF2KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQogICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+
ZGF0YSgpLCB2LT5sZW5ndGgoKSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKIH0KQEAgLTI1NzAsMTggKzI1NDMsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTFpdihjCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCogdiwgaW50IHNpemUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCFsb2NhdGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9j
dXJyZW50UHJvZ3JhbSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgaWYgKCF2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCBzaXplLCAxKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KIAotICAgIGlmICghdikgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KICAgICBtX2NvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYs
IHNpemUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0yNjA0
LDE5ICsyNTY4LDkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZihjbwog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCFsb2NhdGlvbikKKyAgICBpZiAoIXZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMobG9jYXRpb24sIHYsIDIpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0g
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghdikg
ewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGSVhNRTog
bGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMgogICAgIG1fY29udGV4dC0+dW5pZm9y
bTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDIpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0yNjI0LDE5ICsyNTc4
LDkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoYwogdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTik7CisgICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0
aW9uLCB2LCBzaXplLCAyKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGlmICghdikg
ewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGSVhNRTog
bGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMgogICAgIG1fY29udGV4dC0+dW5pZm9y
bTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdiwgc2l6ZSAvIDIpOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0yNjU5LDE5ICsyNjAzLDkgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaShjbwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQz
MkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmICghbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+
cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAg
IGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMikpCiAgICAgICAg
IHJldHVybjsKLSAgICB9CiAKLSAgICBpZiAoIXYpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRp
cGxlIG9mIDIKICAgICBtX2NvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAyKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQpAQCAtMjY3OSwxOSArMjYxMyw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtMml2KGMKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
Mml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
IWxvY2F0aW9uKQorICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwg
diwgc2l6ZSwgMikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3Jh
bSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBs
ZSBvZiAyCiAgICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2
LCBzaXplIC8gMik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAg
LTI3MTQsMTkgKzI2MzgsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNm
KGNvCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIWxvY2F0aW9uKQorICAgIGlm
ICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgMykpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0p
IHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KCF2KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZJ
WE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzCiAgICAgbV9jb250ZXh0LT51
bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8g
Myk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTI3MzQsMTkg
KzI2NDgsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihjCiB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIWxvY2F0aW9uKQorICAgIGlmICghdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgMykpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0p
IHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KCF2KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZJ
WE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzCiAgICAgbV9jb250ZXh0LT51
bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LCBzaXplIC8gMyk7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTI3NjksMTkgKzI2NzMsOSBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpKGNvCiB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKCFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0
aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7
CisgICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGxvY2F0aW9uLCB2LCAzKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGlmICghdikgewotICAgICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEg
bXVsdGlwbGUgb2YgMwogICAgIG1fY29udGV4dC0+dW5pZm9ybTNpdihsb2NhdGlvbi0+bG9jYXRp
b24oKSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDMpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0yNzg5LDE5ICsyNjgzLDkgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoYwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBpbnQqIHYsIGlu
dCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmICghbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJv
Z3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgIGlm
ICghdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgMykpCiAgICAg
ICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBpZiAoIXYpIHsKLSAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11
bHRpcGxlIG9mIDMKICAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24tPmxvY2F0aW9u
KCksIHYsIHNpemUgLyAzKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQpAQCAtMjgyNCwxOSArMjcwOCw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtNGYoY28KIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghbG9jYXRpb24pCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVu
dFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgIGlmICghdmFsaWRhdGVVbmlmb3Jt
UGFyYW1ldGVycyhsb2NhdGlvbiwgdiwgNCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAg
ICBpZiAoIXYpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Ly8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKICAgICBtX2NvbnRl
eHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmRhdGEoKSwgdi0+bGVuZ3Ro
KCkgLyA0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMjg0
NCwxOSArMjcxOCw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KGMK
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghbG9jYXRpb24pCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dy
YW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFyYW1l
dGVycyhsb2NhdGlvbiwgdiwgc2l6ZSwgNCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAg
ICBpZiAoIXYpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Ly8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKICAgICBtX2NvbnRl
eHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYsIHNpemUgLyA0KTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMjg3OSwxOSArMjc0Myw5IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGkoY28KIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoIWxvY2F0aW9uKQorICAgIGlmICghdmFsaWRhdGVVbmlmb3JtUGFy
YW1ldGVycyhsb2NhdGlvbiwgdiwgNCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2KSB7Ci0gICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8g
YmUgYSBtdWx0aXBsZSBvZiA0CiAgICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5s
b2NhdGlvbigpLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gNCk7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTI4OTksMTkgKzI3NTMsOSBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihjCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGludCog
diwgaW50IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKCFsb2NhdGlvbikKKyAgICBpZiAoIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMo
bG9jYXRpb24sIHYsIHNpemUsIDQpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobG9jYXRp
b24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghdikgewotICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJl
IGEgbXVsdGlwbGUgb2YgNAogICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbi0+bG9j
YXRpb24oKSwgdiwgc2l6ZSAvIDQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CiB9CkBAIC0yOTE5LDkgKzI3NjMsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTRpdihjCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBG
bG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0
cmFuc3Bvc2UsIHYpKQorICAgIGlmICghdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhs
b2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA0KSkKICAgICAgICAgcmV0dXJuOwotICAgIC8vIEZJWE1F
OiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0CiAgICAgbV9jb250ZXh0LT51bmlm
b3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwg
di0+bGVuZ3RoKCkgLyA0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQpAQCAtMjkyOSw5ICsyNzcyLDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm1NYXRyaQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQq
IHYsIGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmICghdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJh
bnNwb3NlLCB2KSkKKyAgICBpZiAoIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9j
YXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgNCkpCiAgICAgICAgIHJldHVybjsKLSAgICAvLyBG
SVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAogICAgIG1fY29udGV4dC0+
dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdHJhbnNwb3NlLCB2LCBzaXpl
IC8gNCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTI5Mzks
OSArMjc4MSw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cmkKIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZh
bGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdikpCisg
ICAgaWYgKCF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bv
c2UsIHYsIDkpKQogICAgICAgICByZXR1cm47Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0
byBiZSBhIG11bHRpcGxlIG9mIDkKICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9j
YXRpb24tPmxvY2F0aW9uKCksIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDkp
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0yOTQ5LDkgKzI3
OTAsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpCiB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdiwgaW50IHNpemUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKCF2YWxp
ZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYpKQorICAg
IGlmICghdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNwb3Nl
LCB2LCBzaXplLCA5KSkKICAgICAgICAgcmV0dXJuOwotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVl
ZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA5CiAgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2
KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB0cmFuc3Bvc2UsIHYsIHNpemUgLyA5KTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMjk1OSw5ICsyNzk5LDggQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaQogdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBib29sIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmICghdmFsaWRhdGVVbmlmb3JtTWF0
cml4UGFyYW1ldGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2KSkKKyAgICBpZiAoIXZhbGlkYXRl
VW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgMTYpKQogICAg
ICAgICByZXR1cm47Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxl
IG9mIDE2CiAgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAxNik7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTI5NjksOSArMjgwOCw4IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cmkKIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2LCBpbnQgc2l6ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pZm9ybU1h
dHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIHRyYW5zcG9zZSwgdikpCisgICAgaWYgKCF2YWxpZGF0
ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDE2
KSkKICAgICAgICAgcmV0dXJuOwotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBt
dWx0aXBsZSBvZiAxNgogICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdHJhbnNwb3NlLCB2LCBzaXplIC8gMTYpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0zNjI2LDcgKzM0NjQsMzkgQEAgYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ2FwYQogICAgIH0KIH0KIAotYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgdm9pZCogdikKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBpbnQgcmVxdWly
ZWRNaW5TaXplKQoreworICAgIGlmICghdikgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1l
dGVycyhsb2NhdGlvbiwgZmFsc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIHJlcXVpcmVkTWlu
U2l6ZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1Q
YXJhbWV0ZXJzKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJh
eSogdiwgaW50IHJlcXVpcmVkTWluU2l6ZSkKK3sKKyAgICBpZiAoIXYpIHsKKyAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHZhbGlkYXRlVW5p
Zm9ybU1hdHJpeFBhcmFtZXRlcnMobG9jYXRpb24sIGZhbHNlLCB2LT5kYXRhKCksIHYtPmxlbmd0
aCgpLCByZXF1aXJlZE1pblNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIHZvaWQqIHYsIGludCBzaXplLCBpbnQgcmVxdWlyZWRNaW5TaXplKQoreworICAgIHJl
dHVybiB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGxvY2F0aW9uLCBmYWxzZSwgdiwg
c2l6ZSwgcmVxdWlyZWRNaW5TaXplKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBpbnQgcmVxdWly
ZWRNaW5TaXplKQoreworICAgIGlmICghdikgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1l
dGVycyhsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpLCByZXF1aXJl
ZE1pblNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlm
b3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IGJvb2wgdHJhbnNwb3NlLCB2b2lkKiB2LCBpbnQgc2l6ZSwgaW50IHJlcXVpcmVkTWluU2l6ZSkK
IHsKICAgICBpZiAoIWxvY2F0aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNjQyLDYg
KzM1MTIsMTAgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZgogICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICBpZiAoc2l6ZSA8
IHJlcXVpcmVkTWluU2l6ZSkgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiA2MjIyMykKKysrIFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
Niw4ICs0NjYsMTIgQEAgY2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogICAgICAgICAvLyBIZWxwZXIg
ZnVuY3Rpb24gdG8gdmFsaWRhdGUgYSBHTCBjYXBhYmlsaXR5LgogICAgICAgICBib29sIHZhbGlk
YXRlQ2FwYWJpbGl0eSh1bnNpZ25lZCBsb25nKTsKIAotICAgICAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gdG8gdmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgdW5pZm9ybU1hdHJpeCBmdW5jdGlv
bnMuCi0gICAgICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCB2b2lkKiB2KTsK
KyAgICAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlucHV0IHBhcmFtZXRlcnMg
Zm9yIHVuaWZvcm0gZnVuY3Rpb25zLgorICAgICAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFt
ZXRlcnMoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkq
IHYsIGludCBtb2QpOworICAgICAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBpbnQgbW9k
KTsKKyAgICAgICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwgaW50IHNpemUsIGludCBtb2QpOworICAg
ICAgICBib29sIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBp
bnQgbW9kKTsKKyAgICAgICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIHZvaWQq
IHYsIGludCBzaXplLCBpbnQgbW9kKTsKIAogICAgICAgICBmcmllbmQgY2xhc3MgV2ViR0xTdGF0
ZVJlc3RvcmVyOwogICAgIH07CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MjIyMykKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEwLTA2LTMw
ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmVlZCB0byB2YWxpZGF0ZSB0aGUgc2l6ZSBvZiB0aGUg
aW5jb21pbmcgYXJyYXlzIGZvciB1bmlmb3JtKiBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMzgzCisKKyAgICAgICAgKiBmYXN0L2Nh
bnZhcy93ZWJnbC9nbC11bmlmb3JtLWFycmF5cy1leHBlY3RlZC50eHQ6IFRlc3QgYWdhaW5zdCBp
bnZhbGlkIGFycmF5IHNpemUuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdW5pZm9y
bS1hcnJheXMuaHRtbDogRGl0dG8uCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdW5p
Zm9ybW1hdHJpeDRmdi1leHBlY3RlZC50eHQ6IERpdHRvLgorICAgICAgICAqIGZhc3QvY2FudmFz
L3dlYmdsL2dsLXVuaWZvcm1tYXRyaXg0ZnYuaHRtbDogRGl0dG8uCisKIDIwMTAtMDYtMzAgIENz
YWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
IGZpeC4gVXBkYXRlIFF0IHNwZWNpZmljIGV4cGVjdGVkIGZpbGVzIGFmdGVyIHI2MjIxNS4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXVuaWZvcm0tYXJyYXlzLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC11
bmlmb3JtLWFycmF5cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDYyMjIzKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdW5pZm9ybS1hcnJheXMtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC04LDYgKzgsNyBAQCBjaGVjayBmbG9hdAogUEFTUyAxIHVuaWZvcm0gZm91
bmQKIFBBU1MgdW5pZm9ybSBuYW1lIGlzICdjb2xvclswXScgbm90ICdjb2xvcicgYXMgcGVyIE9w
ZW5HTCBFUyAyLjAuMjQgc2VjdGlvbiAyLjEwCiBQQVNTIHNob3VsZCBmYWlsIGlmIHRoZXJlIGlz
IG5vIGN1cnJlbnQgcHJvZ3JhbQorUEFTUyBzaG91bGQgZmFpbCB3aXRoIGluc3VmZmljaWVudCBh
cnJheSBzaXplIHdpdGggZ2wudW5pZm9ybTFmdgogUEFTUyBjYW4gc2V0IGFuIGFycmF5IG9mIHVu
aWZvcm1zIHdpdGggZ2wudW5pZm9ybTFmdgogUEFTUyBjYW4gY2FsbCBnbC5nZXRVbmlmb3JtCiBQ
QVNTIGdsLmdldFVuaWZvcm0gcmV0dXJucyB0aGUgY29ycmVjdCB0eXBlLgpAQCAtMjcsNiArMjgs
NyBAQCBjaGVjayB2ZWMyCiBQQVNTIDEgdW5pZm9ybSBmb3VuZAogUEFTUyB1bmlmb3JtIG5hbWUg
aXMgJ2NvbG9yWzBdJyBub3QgJ2NvbG9yJyBhcyBwZXIgT3BlbkdMIEVTIDIuMC4yNCBzZWN0aW9u
IDIuMTAKIFBBU1Mgc2hvdWxkIGZhaWwgaWYgdGhlcmUgaXMgbm8gY3VycmVudCBwcm9ncmFtCitQ
QVNTIHNob3VsZCBmYWlsIHdpdGggaW5zdWZmaWNpZW50IGFycmF5IHNpemUgd2l0aCBnbC51bmlm
b3JtMmZ2CiBQQVNTIGNhbiBzZXQgYW4gYXJyYXkgb2YgdW5pZm9ybXMgd2l0aCBnbC51bmlmb3Jt
MmZ2CiBQQVNTIGNhbiBjYWxsIGdsLmdldFVuaWZvcm0KIFBBU1MgZ2wuZ2V0VW5pZm9ybSByZXR1
cm5zIHRoZSBjb3JyZWN0IHR5cGUuCkBAIC00Niw2ICs0OCw3IEBAIGNoZWNrIHZlYzMKIFBBU1Mg
MSB1bmlmb3JtIGZvdW5kCiBQQVNTIHVuaWZvcm0gbmFtZSBpcyAnY29sb3JbMF0nIG5vdCAnY29s
b3InIGFzIHBlciBPcGVuR0wgRVMgMi4wLjI0IHNlY3Rpb24gMi4xMAogUEFTUyBzaG91bGQgZmFp
bCBpZiB0aGVyZSBpcyBubyBjdXJyZW50IHByb2dyYW0KK1BBU1Mgc2hvdWxkIGZhaWwgd2l0aCBp
bnN1ZmZpY2llbnQgYXJyYXkgc2l6ZSB3aXRoIGdsLnVuaWZvcm0zZnYKIFBBU1MgY2FuIHNldCBh
biBhcnJheSBvZiB1bmlmb3JtcyB3aXRoIGdsLnVuaWZvcm0zZnYKIFBBU1MgY2FuIGNhbGwgZ2wu
Z2V0VW5pZm9ybQogUEFTUyBnbC5nZXRVbmlmb3JtIHJldHVybnMgdGhlIGNvcnJlY3QgdHlwZS4K
QEAgLTU3LDcgKzYwLDcgQEAgUEFTUyBjYW4gZ2V0IHZhbHVlIG9mIGVsZW1lbnQgMSBvZiBhcnJh
eQogUEFTUyB2YWx1ZSBwdXQgaW4gKFsxMywgMTIsIDExXSkgbWF0Y2hlcyB2YWx1ZSBwdWxsZWQg
b3V0IChbMTMsIDEyLCAxMV0pCiBQQVNTIGNhbiBnZXQgbG9jYXRpb24gb2YgZWxlbWVudCAyIG9m
IGFycmF5IGZyb20gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uCiBQQVNTIGNhbiBnZXQgdmFsdWUgb2Yg
ZWxlbWVudCAyIG9mIGFycmF5IGZyb20gZ2wuZ2V0VW5pZm9ybQotUEFTUyB2YWx1ZSBwdXQgaW4g
KFsxMCwgMTEsIDldKSBtYXRjaGVzIHZhbHVlIHB1bGxlZCBvdXQgKFsxMCwgMTEsIDldKQorUEFT
UyB2YWx1ZSBwdXQgaW4gKFsxMCwgOSwgOF0pIG1hdGNoZXMgdmFsdWUgcHVsbGVkIG91dCAoWzEw
LCA5LCA4XSkKIFBBU1MgdXNpbmcgdGhlIHdyb25nIHNpemUgb2YgZ2wuVW5pZm9ybSBmYWlscwog
UEFTUyBjYW4gY2FsbCBnbC51c2VQcm9ncmFtKG51bGwpCiAKQEAgLTY1LDYgKzY4LDcgQEAgY2hl
Y2sgdmVjNAogUEFTUyAxIHVuaWZvcm0gZm91bmQKIFBBU1MgdW5pZm9ybSBuYW1lIGlzICdjb2xv
clswXScgbm90ICdjb2xvcicgYXMgcGVyIE9wZW5HTCBFUyAyLjAuMjQgc2VjdGlvbiAyLjEwCiBQ
QVNTIHNob3VsZCBmYWlsIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgcHJvZ3JhbQorUEFTUyBzaG91
bGQgZmFpbCB3aXRoIGluc3VmZmljaWVudCBhcnJheSBzaXplIHdpdGggZ2wudW5pZm9ybTRmdgog
UEFTUyBjYW4gc2V0IGFuIGFycmF5IG9mIHVuaWZvcm1zIHdpdGggZ2wudW5pZm9ybTRmdgogUEFT
UyBjYW4gY2FsbCBnbC5nZXRVbmlmb3JtCiBQQVNTIGdsLmdldFVuaWZvcm0gcmV0dXJucyB0aGUg
Y29ycmVjdCB0eXBlLgpAQCAtNzMsMTAgKzc3LDEwIEBAIFBBU1MgY2FuIGdldCB2YWx1ZSBvZiBl
bGVtZW50IDAgb2YgYXJyYXkKIFBBU1MgdmFsdWUgcHV0IGluIChbMTYsIDE1LCAxNCwgMTNdKSBt
YXRjaGVzIHZhbHVlIHB1bGxlZCBvdXQgKFsxNiwgMTUsIDE0LCAxM10pCiBQQVNTIGNhbiBnZXQg
bG9jYXRpb24gb2YgZWxlbWVudCAxIG9mIGFycmF5IGZyb20gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9u
CiBQQVNTIGNhbiBnZXQgdmFsdWUgb2YgZWxlbWVudCAxIG9mIGFycmF5IGZyb20gZ2wuZ2V0VW5p
Zm9ybQotUEFTUyB2YWx1ZSBwdXQgaW4gKFsxMiwgMTEsIDEwLCAxMV0pIG1hdGNoZXMgdmFsdWUg
cHVsbGVkIG91dCAoWzEyLCAxMSwgMTAsIDExXSkKK1BBU1MgdmFsdWUgcHV0IGluIChbMTIsIDEx
LCAxMCwgOV0pIG1hdGNoZXMgdmFsdWUgcHVsbGVkIG91dCAoWzEyLCAxMSwgMTAsIDldKQogUEFT
UyBjYW4gZ2V0IGxvY2F0aW9uIG9mIGVsZW1lbnQgMiBvZiBhcnJheSBmcm9tIGdsLmdldFVuaWZv
cm1Mb2NhdGlvbgogUEFTUyBjYW4gZ2V0IHZhbHVlIG9mIGVsZW1lbnQgMiBvZiBhcnJheSBmcm9t
IGdsLmdldFVuaWZvcm0KLVBBU1MgdmFsdWUgcHV0IGluIChbOSwgOCwgNywgNl0pIG1hdGNoZXMg
dmFsdWUgcHVsbGVkIG91dCAoWzksIDgsIDcsIDZdKQorUEFTUyB2YWx1ZSBwdXQgaW4gKFs4LCA3
LCA2LCA1XSkgbWF0Y2hlcyB2YWx1ZSBwdWxsZWQgb3V0IChbOCwgNywgNiwgNV0pCiBQQVNTIHVz
aW5nIHRoZSB3cm9uZyBzaXplIG9mIGdsLlVuaWZvcm0gZmFpbHMKIFBBU1MgY2FuIGNhbGwgZ2wu
dXNlUHJvZ3JhbShudWxsKQogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9n
bC11bmlmb3JtLWFycmF5cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL2dsLXVuaWZvcm0tYXJyYXlzLmh0bWwJKHJldmlzaW9uIDYyMjIzKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdW5pZm9ybS1hcnJheXMuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw4IEBAIHZhciB0eXBlSW5mb3MgPSBbCiAgICAgY2hlY2tW
YWx1ZTogZnVuY3Rpb24odHlwZUluZm8sIGluZGV4LCB2YWx1ZSkgewogICAgICAgcmV0dXJuIHR5
cGVJbmZvLnNyY1ZhbHVlc1tpbmRleF0gPT0gdmFsdWU7CiAgICAgfSwKLSAgICBzcmNWYWx1ZXM6
IFsxNiwgMTUsIDE0XQorICAgIHNyY1ZhbHVlczogWzE2LCAxNSwgMTRdLAorICAgIHNyY1ZhbHVl
c0JhZDogW10sCiAgIH0sCiAgIHsgdHlwZTogJ3ZlYzInLAogICAgIGpzVHlwZU9mOiAnRmxvYXQz
MkFycmF5JywKQEAgLTEzMiw2ICsxMzMsNyBAQCB2YXIgdHlwZUluZm9zID0gWwogICAgICAgICAg
ICAgIHR5cGVJbmZvLnNyY1ZhbHVlc1tpbmRleCAqIDIgKyAxXSA9PSB2YWx1ZVsxXTsKICAgICB9
LAogICAgIHNyY1ZhbHVlczogWzE2LCAxNSwgMTQsIDEzLCAxMiwgMTFdLAorICAgIHNyY1ZhbHVl
c0JhZDogWzE2XSwKICAgfSwKICAgeyB0eXBlOiAndmVjMycsCiAgICAganNUeXBlT2Y6ICdGbG9h
dDMyQXJyYXknLApAQCAtMTYwLDcgKzE2Miw4IEBAIHZhciB0eXBlSW5mb3MgPSBbCiAgICAgICAg
ICAgICAgdHlwZUluZm8uc3JjVmFsdWVzW2luZGV4ICogMyArIDFdID09IHZhbHVlWzFdICYmCiAg
ICAgICAgICAgICAgdHlwZUluZm8uc3JjVmFsdWVzW2luZGV4ICogMyArIDJdID09IHZhbHVlWzJd
OwogICAgIH0sCi0gICAgc3JjVmFsdWVzOiBbMTYsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDEx
LCA5XSwKKyAgICBzcmNWYWx1ZXM6IFsxNiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOF0s
CisgICAgc3JjVmFsdWVzQmFkOiBbMTYsIDE1XSwKICAgfSwKICAgeyB0eXBlOiAndmVjNCcsCiAg
ICAganNUeXBlT2Y6ICdGbG9hdDMyQXJyYXknLApAQCAtMTkyLDcgKzE5NSw4IEBAIHZhciB0eXBl
SW5mb3MgPSBbCiAgICAgICAgICAgICAgdHlwZUluZm8uc3JjVmFsdWVzW2luZGV4ICogNCArIDJd
ID09IHZhbHVlWzJdICYmCiAgICAgICAgICAgICAgdHlwZUluZm8uc3JjVmFsdWVzW2luZGV4ICog
NCArIDNdID09IHZhbHVlWzNdOwogICAgIH0sCi0gICAgc3JjVmFsdWVzOiBbMTYsIDE1LCAxNCwg
MTMsIDEyLCAxMSwgMTAsIDExLCA5LCA4LCA3LCA2LCA1XSwKKyAgICBzcmNWYWx1ZXM6IFsxNiwg
MTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNV0sCisgICAgc3JjVmFsdWVzQmFk
OiBbMTYsIDE1LCAxNF0sCiAgIH0KIF07CiAKQEAgLTIxMiw2ICsyMTYsNyBAQCBmb3IgKHZhciB0
dCA9IDA7IHR0IDwgdHlwZUluZm9zLmxlbmd0aDsgCiAgICAgICAgICAgICAidW5pZm9ybSBuYW1l
IGlzICdjb2xvclswXScgbm90ICdjb2xvcicgYXMgcGVyIE9wZW5HTCBFUyAyLjAuMjQgc2VjdGlv
biAyLjEwIik7CiAgIHZhciBsb2MgPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgImNv
bG9yIik7CiAgIHZhciBzcmNWYWx1ZXMgPSB0eXBlSW5mby5zcmNWYWx1ZXM7CisgIHZhciBzcmNW
YWx1ZXNCYWQgPSB0eXBlSW5mby5zcmNWYWx1ZXNCYWQ7CiAKICAgLy8gVHJ5IHNldHRpbmcgdGhl
IHZhbHVlIGJlZm9yZSB1c2luZyB0aGUgcHJvZ3JhbQogICBnbFt0eXBlSW5mby5zZXR0ZXJdKGxv
Yywgc3JjVmFsdWVzKTsKQEAgLTIxOSw2ICsyMjQsOSBAQCBmb3IgKHZhciB0dCA9IDA7IHR0IDwg
dHlwZUluZm9zLmxlbmd0aDsgCiAgICAgICAgICAgICAic2hvdWxkIGZhaWwgaWYgdGhlcmUgaXMg
bm8gY3VycmVudCBwcm9ncmFtIik7CiAKICAgZ2wudXNlUHJvZ3JhbShwcm9ncmFtKTsKKyAgZ2xb
dHlwZUluZm8uc2V0dGVyXShsb2MsIHNyY1ZhbHVlc0JhZCk7CisgIGFzc2VydE1zZyhnbC5nZXRF
cnJvcigpID09IGdsLklOVkFMSURfVkFMVUUsCisgICAgICAgICAgICAic2hvdWxkIGZhaWwgd2l0
aCBpbnN1ZmZpY2llbnQgYXJyYXkgc2l6ZSB3aXRoIGdsLiIgKyB0eXBlSW5mby5zZXR0ZXIpOwog
ICBnbFt0eXBlSW5mby5zZXR0ZXJdKGxvYywgc3JjVmFsdWVzKTsKICAgYXNzZXJ0TXNnKGdsLmdl
dEVycm9yKCkgPT0gZ2wuTk9fRVJST1IsCiAgICAgICAgICAgICAiY2FuIHNldCBhbiBhcnJheSBv
ZiB1bmlmb3JtcyB3aXRoIGdsLiIgKyB0eXBlSW5mby5zZXR0ZXIpOwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdW5pZm9ybW1hdHJpeDRmdi1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdW5pZm9ybW1hdHJp
eDRmdi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDYyMjIzKQorKysgTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvZ2wtdW5pZm9ybW1hdHJpeDRmdi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTQsMTAgKzQsMTMgQEAgT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQQogCiAKIENoZWNraW5nIGdsLnVuaWZvcm1NYXRyaXguCitQQVNTIHNob3VsZCBmYWlsIHdp
dGggaW5zdWZmaWNpZW50IGFycmF5IHNpemUgZm9yIHVuaWZvcm1NYXRyaXgyZnYKIFBBU1MgY2Fu
IGNhbGwgdW5pZm9ybU1hdHJpeDJmdndpdGggdHJhbnNwb3NlID0gZmFsc2UKIFBBU1MgdW5pZm9y
bU1hdHJpeDJmdiBzaG91bGQgcmV0dXJuIElOVkFMSURfVkFMVUUgd2l0aCB0cmFuc3Bvc2UgPSB0
cnVlCitQQVNTIHNob3VsZCBmYWlsIHdpdGggaW5zdWZmaWNpZW50IGFycmF5IHNpemUgZm9yIHVu
aWZvcm1NYXRyaXgzZnYKIFBBU1MgY2FuIGNhbGwgdW5pZm9ybU1hdHJpeDNmdndpdGggdHJhbnNw
b3NlID0gZmFsc2UKIFBBU1MgdW5pZm9ybU1hdHJpeDNmdiBzaG91bGQgcmV0dXJuIElOVkFMSURf
VkFMVUUgd2l0aCB0cmFuc3Bvc2UgPSB0cnVlCitQQVNTIHNob3VsZCBmYWlsIHdpdGggaW5zdWZm
aWNpZW50IGFycmF5IHNpemUgZm9yIHVuaWZvcm1NYXRyaXg0ZnYKIFBBU1MgY2FuIGNhbGwgdW5p
Zm9ybU1hdHJpeDRmdndpdGggdHJhbnNwb3NlID0gZmFsc2UKIFBBU1MgdW5pZm9ybU1hdHJpeDRm
diBzaG91bGQgcmV0dXJuIElOVkFMSURfVkFMVUUgd2l0aCB0cmFuc3Bvc2UgPSB0cnVlCiAKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXVuaWZvcm1tYXRyaXg0ZnYuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC11bmlmb3Jt
bWF0cml4NGZ2Lmh0bWwJKHJldmlzaW9uIDYyMjIzKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvZ2wtdW5pZm9ybW1hdHJpeDRmdi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC00NCwx
MSArNDQsMTYgQEAgZm9yICh2YXIgaWkgPSAyOyBpaSA8PSA0OyArK2lpKSB7CiAgIHZhciBtYXQg
PSBbXTsKICAgZm9yICh2YXIgamogPSAwOyBqaiA8IGlpOyArK2pqKSB7CiAgICAgZm9yICh2YXIg
bGwgPSAwOyBsbCA8IGlpOyArK2xsKSB7CisgICAgICBpZiAoamogPT0gaWkgLTEgJiYgbGwgPT0g
aWkgLSAxKQorICAgICAgICBjb250aW51ZTsKICAgICAgIG1hdFtqaiAqIGlpICsgbGxdID0gKGpq
ID09IGxsKSA/IDEgOiAwOwogICAgIH0KICAgfQogICBuYW1lID0gInVuaWZvcm1NYXRyaXgiICsg
aWkgKyAiZnYiOwogICBnbFtuYW1lXShsb2MsIGZhbHNlLCBtYXQpOworICBhc3NlcnRNc2coZ2wu
Z2V0RXJyb3IoKSA9PSBnbC5JTlZBTElEX1ZBTFVFLCAic2hvdWxkIGZhaWwgd2l0aCBpbnN1ZmZp
Y2llbnQgYXJyYXkgc2l6ZSBmb3IgIiArIG5hbWUpOworICBtYXRbaWkgKiBpaSAtIDFdID0gMTsK
KyAgZ2xbbmFtZV0obG9jLCBmYWxzZSwgbWF0KTsKICAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkg
PT0gZ2wuTk9fRVJST1IsICJjYW4gY2FsbCAiICsgbmFtZSArICJ3aXRoIHRyYW5zcG9zZSA9IGZh
bHNlIik7CiAgIGdsW25hbWVdKGxvYywgdHJ1ZSwgbWF0KTsKICAgYXNzZXJ0TXNnKGdsLmdldEVy
cm9yKCkgPT0gZ2wuSU5WQUxJRF9WQUxVRSwgbmFtZSArICIgc2hvdWxkIHJldHVybiBJTlZBTElE
X1ZBTFVFIHdpdGggdHJhbnNwb3NlID0gdHJ1ZSIpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>