<?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>8331</bug_id>
          
          <creation_ts>2006-04-11 14:52:44 -0700</creation_ts>
          <short_desc>DOMNodeLists returned to Objective-C are not properly wrapped</short_desc>
          <delta_ts>2006-06-24 15:19:47 -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>WebCore JavaScript</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James G. Speth">speth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>38978</commentid>
    <comment_count>0</comment_count>
    <who name="James G. Speth">speth</who>
    <bug_when>2006-04-11 14:52:44 -0700</bug_when>
    <thetext>if you use valueForKey: or evaluateWebScript: from objective-c to access a DOMNodeList, the returned value is not properly wrapped and shows up as an instance of WebScriptObject, not DOMNodeList.

For example:

id nodes = [domDocument valueForKey:@&quot;childNodes&quot;];    // returns instance of class WebScriptObject
id nodes2 = [domDocument childNodes];  // returns instance of class DOMNodeList</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38979</commentid>
    <comment_count>1</comment_count>
      <attachid>7650</attachid>
    <who name="James G. Speth">speth</who>
    <bug_when>2006-04-11 14:55:26 -0700</bug_when>
    <thetext>Created attachment 7650
patch for WebCore/bindings/objc/DOMUtility.mm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38982</commentid>
    <comment_count>2</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2006-04-11 15:11:43 -0700</bug_when>
    <thetext>This is the right approach. We should look at other classes that need to be handled in this function to get the proper wrapper allocated. Some that come to mind are DOMCSSStyleDeclaration, DOMCSSRuleList, DOMCSSRule, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39208</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-04-13 18:09:01 -0700</bug_when>
    <thetext>If this patch is for review, we&apos;ll need to mark it with a review ? flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42444</commentid>
    <comment_count>4</comment_count>
      <attachid>8343</attachid>
    <who name="James G. Speth">speth</who>
    <bug_when>2006-05-15 23:31:31 -0700</bug_when>
    <thetext>Created attachment 8343
patch, please review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42498</commentid>
    <comment_count>5</comment_count>
      <attachid>8343</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-05-16 10:16:29 -0700</bug_when>
    <thetext>Comment on attachment 8343
patch, please review

Lets not check in the RGBColor, Rect, and Counter stuff commented-out. I don&apos;t like landing code with #if 0 around it.

Best way to keep track of that loose end is to write a bug report about it.

In valueForKey: it seems to me that we should be calling super in the &quot;!isSafeScript&quot; case too.

Otherwise, this patch looks perfect!

I think I&apos;m going to review+ this even though it has the #if 0 in it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>43258</commentid>
    <comment_count>6</comment_count>
      <attachid>8480</attachid>
    <who name="James G. Speth">speth</who>
    <bug_when>2006-05-23 04:11:24 -0700</bug_when>
    <thetext>Created attachment 8480
removed #if 0 code, improved array accessors, please review

i&apos;ve opened bug 9058 to track the changes the had been in the #if 0 code.  also in here are improvements to the indexed array accessors we use for cocoa bindings.  this makes communicating with the NSTreeController a much smoother process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>43274</commentid>
    <comment_count>7</comment_count>
      <attachid>8480</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-05-23 09:11:09 -0700</bug_when>
    <thetext>Comment on attachment 8480
removed #if 0 code, improved array accessors, please review

The createObjCDOM* methods seem a bit odd.  They end up as 4 lines of code instead of 1.

Otherwise the code looks fine.  I think xenon or darin shoudl comment however.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>43367</commentid>
    <comment_count>8</comment_count>
      <attachid>8505</attachid>
    <who name="James G. Speth">speth</who>
    <bug_when>2006-05-23 17:21:48 -0700</bug_when>
    <thetext>Created attachment 8505
much cleaner DOMUtility.mm in this one

this one also has KVO hooks for notifying observers when a nodeList changes.  please look at Node.cpp, Node.h, and DOM.mm closely and let me know if this is the right way to go about calling out from the Node to the Obj-C API.  thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>44351</commentid>
    <comment_count>9</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-06-02 00:22:43 -0700</bug_when>
    <thetext>The fix to wrap the miscellaneous DOM objects properly is a great one. However, it&apos;s mixed in with a bunch of other KVO-related changes which should really be separate patches.

Some specific comments about some of the changes:

I don&apos;t think it&apos;s a good idea to sprinkle KVO-specific changes into the core DOM code, such as this change in Node.cpp:

+    
+    willChangeValueForKey(&quot;childNodesArray&quot;);
+    
     NodeListSet::iterator end = m_nodeLists-&gt;end();
     for (NodeListSet::iterator i = m_nodeLists-&gt;begin(); i != end; ++i)
         (*i)-&gt;rootNodeChildrenChanged();
+    
+    didChangeValueForKey(&quot;childNodesArray&quot;);

It also doesn&apos;t seem right; the willChange is getting called after the value actually gets changed.

I think it would be better for KVO to hook in using a more general DOM mechanism.

I think the change to create the right wrapper is great, so please re-upload that, and put the other stuff in a separate patch in its own bug please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46926</commentid>
    <comment_count>10</comment_count>
      <attachid>8995</attachid>
    <who name="James G. Speth">speth</who>
    <bug_when>2006-06-23 23:43:26 -0700</bug_when>
    <thetext>Created attachment 8995
patch addressing this bug only

Here&apos;s a patch for the additional wrapper support without the KVO calls (since you&apos;re right, and they are unrelated to this bug, I&apos;ll resubmit them on a separate report).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46949</commentid>
    <comment_count>11</comment_count>
      <attachid>8995</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-06-24 07:33:49 -0700</bug_when>
    <thetext>Comment on attachment 8995
patch addressing this bug only

This all looks great except for one thing I don&apos;t understand.

Why the use of objc_getClass in DOMUtility.mm instead of the usual syntax for invoking class methods?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46960</commentid>
    <comment_count>12</comment_count>
      <attachid>8995</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-06-24 07:52:35 -0700</bug_when>
    <thetext>Comment on attachment 8995
patch addressing this bug only

Oh, I see now -- you wanted to avoid having to create separate inline functions for each class -- I guess that&apos;s OK. It&apos;s slightly better to have the compile-time checking that you get with the usual syntax, but this is a great improvement so lets land it.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46976</commentid>
    <comment_count>13</comment_count>
      <attachid>8995</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-06-24 09:43:15 -0700</bug_when>
    <thetext>Comment on attachment 8995
patch addressing this bug only

I really do like the DOMUtility.mm from http://bugzilla.opendarwin.org/attachment.cgi?id=8480 better, but it&apos;s no big deal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>47013</commentid>
    <comment_count>14</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2006-06-24 13:46:10 -0700</bug_when>
    <thetext>Committed revision 15018.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>47058</commentid>
    <comment_count>15</comment_count>
    <who name="James G. Speth">speth</who>
    <bug_when>2006-06-24 15:19:47 -0700</bug_when>
    <thetext>i know it just landed, but if you really don&apos;t want to use the objc_getClass function, we can get rid of it and use the compile-time @compatibility_alias directive like this:

@compatibility_alias ObjC_DOMNode DOMNode;

then the code below looks like this:

    if (value-&gt;inherits(&amp;DOMNode::info))
        newObj = [ObjC_DOMNode _nodeWith:static_cast&lt;DOMNode *&gt;(value)-&gt;impl()];

this reads cleanly, is checked at compile-time, and @compatibility_alias is documented at file:///Developer/ADC%20Reference%20Library/documentation/DeveloperTools/gcc-4.0.1/gcc/compatibility_005falias.html#compatibility_005falias

let me know if you want another patch, otherwise, i&apos;m going to move on with my life. :)
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7650</attachid>
            <date>2006-04-11 14:55:26 -0700</date>
            <delta_ts>2006-05-15 23:31:31 -0700</delta_ts>
            <desc>patch for WebCore/bindings/objc/DOMUtility.mm</desc>
            <filename>nodelistpatch</filename>
            <type>text/plain</type>
            <size>972</size>
            <attacher name="James G. Speth">speth</attacher>
            
              <data encoding="base64">SW5kZXg6IERPTVV0aWxpdHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gRE9NVXRpbGl0eS5tbSAgICAgICAo
cmV2aXNpb24gMTM3NTIpCisrKyBET01VdGlsaXR5Lm1tICAgICAgICh3b3JraW5nIGNvcHkpCkBA
IC0zOSw2ICszOSwxMCBAQCBzdGF0aWMgaW5saW5lIGlkIGNyZWF0ZU9iakNET01Ob2RlKFdlYkNv
CiB7CiAgICAgcmV0dXJuIFtET01Ob2RlIF9ub2RlV2l0aDpub2RlXTsKIH0KK3N0YXRpYyBpbmxp
bmUgaWQgY3JlYXRlT2JqQ0RPTU5vZGVMaXN0KFdlYkNvcmU6Ok5vZGVMaXN0ICpub2RlTGlzdCkK
K3sKKyAgICByZXR1cm4gW0RPTU5vZGVMaXN0IF9ub2RlTGlzdFdpdGg6bm9kZUxpc3RdOworfQog
CiBuYW1lc3BhY2UgS0pTIHsKIApAQCAtNTAsNiArNTQsMTIgQEAgdm9pZCAqU2NyaXB0SW50ZXJw
cmV0ZXI6OmNyZWF0ZU9iamNJbnN0YQogICAgICAgICBbbmV3T2JqY05vZGUgX2luaXRpYWxpemVX
aXRoT2JqZWN0SW1wOmltcCBvcmlnaW5FeGVjdXRpb25Db250ZXh0Om9yaWdpbiBleGVjdXRpb25D
b250ZXh0OmN1cnJlbnRdOwogICAgICAgICByZXR1cm4gbmV3T2JqY05vZGU7CiAgICAgfQorICAg
IGlmICh2YWx1ZS0+aW5oZXJpdHMoJkRPTU5vZGVMaXN0OjppbmZvKSkgeworICAgICAgICBET01O
b2RlTGlzdCAqaW1wID0gc3RhdGljX2Nhc3Q8RE9NTm9kZUxpc3QgKj4odmFsdWUpOworICAgICAg
ICBpZCBuZXdPYmpjTm9kZUxpc3QgPSBjcmVhdGVPYmpDRE9NTm9kZUxpc3QoaW1wLT5pbXBsKCkp
OworICAgICAgICBbbmV3T2JqY05vZGVMaXN0IF9pbml0aWFsaXplV2l0aE9iamVjdEltcDppbXAg
b3JpZ2luRXhlY3V0aW9uQ29udGV4dDpvcmlnaW4gZXhlY3V0aW9uQ29udGV4dDpjdXJyZW50XTsK
KyAgICAgICAgcmV0dXJuIG5ld09iamNOb2RlTGlzdDsKKyAgICB9CiAgICAgcmV0dXJuIDA7CiB9
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8343</attachid>
            <date>2006-05-15 23:31:31 -0700</date>
            <delta_ts>2006-05-25 14:58:18 -0700</delta_ts>
            <desc>patch, please review</desc>
            <filename>dom-wrappers-patch</filename>
            <type>text/plain</type>
            <size>14863</size>
            <attacher name="James G. Speth">speth</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NDA3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDYtMDUtMTUgIEphbWVzIEcu
IFNwZXRoICA8c3BldGhAZW5kLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKyAgICAgICAgCisgICAgICAgIEFsbG93IGtleS12YWx1ZSBjb2RpbmcgYWNjZXNzb3Jz
IHRvIGdldCBhIERPTUNTU1J1bGVMaXN0IG9iamVjdCBmcm9tIGEgRE9NQ1NTU3R5bGVTaGVldAor
ICAgICAgICBzZWU6IGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODMzMQorICAgICAgICAKKyAgICAgICAgVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IHdoZW4g
dmFsdWVGb3JLZXk6IGlzIGNhbGxlZCwgdGhlIERPTUNTU1N0eWxlU2hlZXQgaGFzIG5vIGluaXRp
YWxpemVkCisgICAgICAgIGV4ZWN1dGlvbiBjb250ZXh0IGFuZCBjYW5ub3QgY29udGludWUsIHNv
IGhhZCBwcmV2aW91c2x5IHJldHVybmVkIG5pbC4gIFRoaXMgY2hhbmdlIGNhdXNlcworICAgICAg
ICB2YWx1ZUZvcktleTogdG8gY2FsbCB0aGUgc3VwZXJjbGFzcyBpbXBsZW1lbnRhdGlvbiB3aGVu
IHRoZSBvYmplY3QgaGFzIG5vIGV4ZWN1dGlvbiBjb250ZXh0LgorICAgICAgICBJbiB0aGlzIGNh
c2UsIGl0IGVuZHMgdXAgaW52b2tpbmcgdGhlIGNzc1J1bGVzIHNlbGVjdG9yIG9uIHRoZSBzdHls
ZVNoZWV0IGFuZCBnZXR0aW5nIHRoZSBydWxlIGxpc3QuCisgICAgICAgIAorICAgICAgICBUaGlz
IGlzIGNsZWFybHkgYSB3b3JrYXJvdW5kIHVudGlsIGEgYmV0dGVyIHNvbHV0aW9uIGlzIGZvdW5k
LgorICAgICAgICAKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbToK
KyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHZhbHVlRm9yS2V5Ol0pOgorCiAyMDA2LTA1LTE1
ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAbnlwb3AuY29tPgogCiAgICAgICAgICogbWFrZS1n
ZW5lcmF0ZWQtc291cmNlcy5zaDogQ2hhbmdlZCB0byBiZSBleGVjdXRhYmxlIGFuZCByZW1vdmVk
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVj
dC5tbQkocmV2aXNpb24gMTQzOTIpCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL1dl
YlNjcmlwdE9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSmFtZXMgRy4gU3BldGggKHNwZXRoQGVuZC5jb20p
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2Niw3ICsyNjcsNyBAQCBzdGF0
aWMgTGlzdCBsaXN0RnJvbU5TQXJyYXkoRXhlY1N0YXRlICplCiAtIChpZCl2YWx1ZUZvcktleToo
TlNTdHJpbmcgKilrZXkKIHsKICAgICBpZiAoIVtzZWxmIF9leGVjdXRpb25Db250ZXh0XSkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgcmV0dXJuIFtzdXBlciB2YWx1ZUZvcktleTprZXld
OyAgICAgLy8gd29ya2Fyb3VuZCBmb3IgZ2V0dGluZyBhIERPTUNTU1J1bGVMaXN0IGZyb20gYSBz
dHlsZXNoZWV0CiAgICAgICAgIAogICAgIGlmICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAJcmV0
dXJuIG5pbDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkocmV2aXNpb24gMTQzOTIpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBKYW1lcyBHLiBT
cGV0aCAoc3BldGhAZW5kLmNvbSkKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
OTYsMTAgKzk3LDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIC0gKERP
TUltcGxlbWVudGF0aW9uRnJvbnQgKilfRE9NSW1wbGVtZW50YXRpb247CiBAZW5kCiAKLUBpbnRl
cmZhY2UgRE9NTmFtZWROb2RlTWFwIChXZWJDb3JlSW50ZXJuYWwpCi0rIChET01OYW1lZE5vZGVN
YXAgKilfbmFtZWROb2RlTWFwV2l0aDooTmFtZWROb2RlTWFwICopaW1wbDsKLUBlbmQKLQogY2xh
c3MgT2JqQ0V2ZW50TGlzdGVuZXIgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIE9iakNFdmVudExpc3RlbmVyICpmaW5kKGlkIDxET01FdmVudExpc3RlbmVyPik7
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NQ1NTLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3Mvb2JqYy9ET01DU1MubW0JKHJldmlzaW9uIDE0MzkyKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9vYmpjL0RPTUNTUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSmFtZXMgRy4gU3BldGggKHNwZXRo
QGVuZC5jb20pCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDQyICs0Miw2
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiB0eXBlZGVmIERPTVdpbmRvdyBBYnN0cmFj
dFZpZXc7CiAKLUBpbnRlcmZhY2UgRE9NU3R5bGVTaGVldCAoV2ViQ29yZUludGVybmFsKQotKyAo
RE9NU3R5bGVTaGVldCAqKV9ET01TdHlsZVNoZWV0V2l0aDooU3R5bGVTaGVldCAqKWltcGw7Ci1A
ZW5kCi0KLUBpbnRlcmZhY2UgRE9NTWVkaWFMaXN0IChXZWJDb3JlSW50ZXJuYWwpCi0rIChET01N
ZWRpYUxpc3QgKilfbWVkaWFMaXN0V2l0aDooTWVkaWFMaXN0ICopaW1wbDsKLUBlbmQKLQotQGlu
dGVyZmFjZSBET01DU1NSdWxlTGlzdCAoV2ViQ29yZUludGVybmFsKQotKyAoRE9NQ1NTUnVsZUxp
c3QgKilfcnVsZUxpc3RXaXRoOihDU1NSdWxlTGlzdCAqKWltcGw7Ci1AZW5kCi0KLUBpbnRlcmZh
Y2UgRE9NQ1NTUnVsZSAoV2ViQ29yZUludGVybmFsKQotKyAoRE9NQ1NTUnVsZSAqKV9ydWxlV2l0
aDooQ1NTUnVsZSAqKWltcGw7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgRE9NQ1NTVmFsdWUgKFdlYkNv
cmVJbnRlcm5hbCkKLSsgKERPTUNTU1ZhbHVlICopX3ZhbHVlV2l0aDooQ1NTVmFsdWUgKilpbXBs
OwotQGVuZAotCi1AaW50ZXJmYWNlIERPTUNTU1ByaW1pdGl2ZVZhbHVlIChXZWJDb3JlSW50ZXJu
YWwpCi0rIChET01DU1NQcmltaXRpdmVWYWx1ZSAqKV92YWx1ZVdpdGg6KENTU1ZhbHVlICopaW1w
bDsKLUBlbmQKLQotQGludGVyZmFjZSBET01SR0JDb2xvciAoV2ViQ29yZUludGVybmFsKQotKyAo
RE9NUkdCQ29sb3IgKilfUkdCQ29sb3JXaXRoUkdCOihSR0JBMzIpdmFsdWU7Ci1AZW5kCi0KLUBp
bnRlcmZhY2UgRE9NUmVjdCAoV2ViQ29yZUludGVybmFsKQotKyAoRE9NUmVjdCAqKV9yZWN0V2l0
aDooUmVjdEltcGwgKilpbXBsOwotQGVuZAotCi1AaW50ZXJmYWNlIERPTUNvdW50ZXIgKFdlYkNv
cmVJbnRlcm5hbCkKLSsgKERPTUNvdW50ZXIgKilfY291bnRlcldpdGg6KENvdW50ZXIgKilpbXBs
OwotQGVuZAotCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gRE9NU3R5
bGVTaGVldAogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwuaAkocmV2aXNpb24g
MTQzOTIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgSmFtZXMgRy4gU3BldGggKHNwZXRoQGVuZC5jb20pCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI3LDEzIEBACiAjaW1wb3J0ICJET00uaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgeworICAgIGNsYXNzIFJlY3RJbXBsOworICAgIGNsYXNzIENvdW50ZXI7Cisg
ICAgY2xhc3MgQ1NTVmFsdWU7CisgICAgY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWU7CisgICAgY2xh
c3MgQ1NTUnVsZTsKKyAgICBjbGFzcyBDU1NSdWxlTGlzdDsKKyAgICBjbGFzcyBNZWRpYUxpc3Q7
CiAgICAgY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKICAgICBjbGFzcyBDU1NTdHlsZVNoZWV0
OwogICAgIGNsYXNzIERvY3VtZW50RnJhZ21lbnQ7CkBAIC0zNiwxMSArNDQsMTQgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIE5vZGU7CiAgICAgY2xhc3MgTm9kZUl0ZXJhdG9yOwog
ICAgIGNsYXNzIE5vZGVMaXN0OworICAgIGNsYXNzIE5hbWVkTm9kZU1hcDsKICAgICBjbGFzcyBS
YW5nZTsKKyAgICBjbGFzcyBTdHlsZVNoZWV0OwogICAgIGNsYXNzIFN0eWxlU2hlZXRMaXN0Owog
ICAgIGNsYXNzIFRyZWVXYWxrZXI7CiAKICAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwor
ICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IFJHQkEzMjsKIH0KIAogQGludGVyZmFjZSBET01Ob2Rl
IChXZWJDb3JlSW50ZXJuYWwpCkBAIC01Miw2ICs2MywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiArIChET01Ob2RlTGlzdCAqKV9ub2RlTGlzdFdpdGg6KFdlYkNvcmU6Ok5vZGVMaXN0ICopaW1w
bDsKIEBlbmQKIAorQGludGVyZmFjZSBET01OYW1lZE5vZGVNYXAgKFdlYkNvcmVJbnRlcm5hbCkK
KysgKERPTU5hbWVkTm9kZU1hcCAqKV9uYW1lZE5vZGVNYXBXaXRoOihXZWJDb3JlOjpOYW1lZE5v
ZGVNYXAgKilpbXBsOworQGVuZAorCiBAaW50ZXJmYWNlIERPTUVsZW1lbnQgKFdlYkNvcmVJbnRl
cm5hbCkKICsgKERPTUVsZW1lbnQgKilfZWxlbWVudFdpdGg6KFdlYkNvcmU6OkVsZW1lbnQgKilp
bXBsOwogLSAoV2ViQ29yZTo6RWxlbWVudCAqKV9lbGVtZW50OwpAQCAtODUsMjEgKzEwMCw1NyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAtIChpZClfaW5pdDsKIEBlbmQKIAotQGludGVyZmFjZSBE
T01DU1NTdHlsZURlY2xhcmF0aW9uIChXZWJDb3JlSW50ZXJuYWwpCi0rIChET01DU1NTdHlsZURl
Y2xhcmF0aW9uICopX3N0eWxlRGVjbGFyYXRpb25XaXRoOihXZWJDb3JlOjpDU1NTdHlsZURlY2xh
cmF0aW9uICopaW1wbDsKLS0gKFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24gKilfc3R5bGVE
ZWNsYXJhdGlvbjsKK0BpbnRlcmZhY2UgRE9NTm9kZUZpbHRlciA6IERPTU9iamVjdCA8RE9NTm9k
ZUZpbHRlcj4KKysgKERPTU5vZGVGaWx0ZXIgKilfbm9kZUZpbHRlcldpdGg6KFdlYkNvcmU6Ok5v
ZGVGaWx0ZXIgKilpbXBsOwogQGVuZAogCiBAaW50ZXJmYWNlIERPTVN0eWxlU2hlZXRMaXN0IChX
ZWJDb3JlSW50ZXJuYWwpCiArIChET01TdHlsZVNoZWV0TGlzdCAqKV9zdHlsZVNoZWV0TGlzdFdp
dGg6KFdlYkNvcmU6OlN0eWxlU2hlZXRMaXN0ICopaW1wbDsKIEBlbmQKIAorQGludGVyZmFjZSBE
T01TdHlsZVNoZWV0IChXZWJDb3JlSW50ZXJuYWwpCisrIChET01TdHlsZVNoZWV0ICopX0RPTVN0
eWxlU2hlZXRXaXRoOihXZWJDb3JlOjpTdHlsZVNoZWV0ICopaW1wbDsKK0BlbmQKKwogQGludGVy
ZmFjZSBET01DU1NTdHlsZVNoZWV0IChXZWJDb3JlSW50ZXJuYWwpCiArIChET01DU1NTdHlsZVNo
ZWV0ICopX0NTU1N0eWxlU2hlZXRXaXRoOihXZWJDb3JlOjpDU1NTdHlsZVNoZWV0ICopaW1wbDsK
IEBlbmQKIAotQGludGVyZmFjZSBET01Ob2RlRmlsdGVyIDogRE9NT2JqZWN0IDxET01Ob2RlRmls
dGVyPgotKyAoRE9NTm9kZUZpbHRlciAqKV9ub2RlRmlsdGVyV2l0aDooV2ViQ29yZTo6Tm9kZUZp
bHRlciAqKWltcGw7CitAaW50ZXJmYWNlIERPTU1lZGlhTGlzdCAoV2ViQ29yZUludGVybmFsKQor
KyAoRE9NTWVkaWFMaXN0ICopX21lZGlhTGlzdFdpdGg6KFdlYkNvcmU6Ok1lZGlhTGlzdCAqKWlt
cGw7CitAZW5kCisKK0BpbnRlcmZhY2UgRE9NQ1NTUnVsZUxpc3QgKFdlYkNvcmVJbnRlcm5hbCkK
KysgKERPTUNTU1J1bGVMaXN0ICopX3J1bGVMaXN0V2l0aDooV2ViQ29yZTo6Q1NTUnVsZUxpc3Qg
KilpbXBsOworQGVuZAorCitAaW50ZXJmYWNlIERPTUNTU1J1bGUgKFdlYkNvcmVJbnRlcm5hbCkK
KysgKERPTUNTU1J1bGUgKilfcnVsZVdpdGg6KFdlYkNvcmU6OkNTU1J1bGUgKilpbXBsOworQGVu
ZAorCitAaW50ZXJmYWNlIERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKFdlYkNvcmVJbnRlcm5hbCkK
KysgKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfc3R5bGVEZWNsYXJhdGlvbldpdGg6KFdlYkNv
cmU6OkNTU1N0eWxlRGVjbGFyYXRpb24gKilpbXBsOworLSAoV2ViQ29yZTo6Q1NTU3R5bGVEZWNs
YXJhdGlvbiAqKV9zdHlsZURlY2xhcmF0aW9uOworQGVuZAorCitAaW50ZXJmYWNlIERPTUNTU1Zh
bHVlIChXZWJDb3JlSW50ZXJuYWwpCisrIChET01DU1NWYWx1ZSAqKV92YWx1ZVdpdGg6KFdlYkNv
cmU6OkNTU1ZhbHVlICopaW1wbDsKK0BlbmQKKworQGludGVyZmFjZSBET01DU1NQcmltaXRpdmVW
YWx1ZSAoV2ViQ29yZUludGVybmFsKQorKyAoRE9NQ1NTUHJpbWl0aXZlVmFsdWUgKilfdmFsdWVX
aXRoOihXZWJDb3JlOjpDU1NWYWx1ZSAqKWltcGw7CitAZW5kCisKK0BpbnRlcmZhY2UgRE9NUkdC
Q29sb3IgKFdlYkNvcmVJbnRlcm5hbCkKKysgKERPTVJHQkNvbG9yICopX1JHQkNvbG9yV2l0aFJH
QjooV2ViQ29yZTo6UkdCQTMyKXZhbHVlOworQGVuZAorCitAaW50ZXJmYWNlIERPTVJlY3QgKFdl
YkNvcmVJbnRlcm5hbCkKKysgKERPTVJlY3QgKilfcmVjdFdpdGg6KFdlYkNvcmU6OlJlY3RJbXBs
ICopaW1wbDsKK0BlbmQKKworQGludGVyZmFjZSBET01Db3VudGVyIChXZWJDb3JlSW50ZXJuYWwp
CisrIChET01Db3VudGVyICopX2NvdW50ZXJXaXRoOihXZWJDb3JlOjpDb3VudGVyICopaW1wbDsK
IEBlbmQKIAogLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgRE9NIHdyYXBwZXJzIGFuZCBnbHVpbmcg
dG8gT2JqZWN0aXZlLUMKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VdGlsaXR5Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VdGlsaXR5Lm1tCShyZXZp
c2lvbiAxNDM5MikKKysrIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VdGlsaXR5Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBKYW1lcyBHLiBTcGV0aCAoc3BldGhAZW5kLmNvbSkKICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjYsNiArMjcsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2ltcG9y
dCAia2pzX2RvbS5oIgogI2ltcG9ydCAiTm9kZS5oIgorI2ltcG9ydCAiY3NzX3ZhbHVlaW1wbC5o
IgorI2ltcG9ydCAia2pzX2Nzcy5oIgogCiAjaW1wb3J0ICJET01JbnRlcm5hbC5oIgogCkBAIC0z
NCwyMiArMzcsMTEyIEBACiAvLyBUaGlzIGZpbGUgbWFrZXMgdXNlIG9mIHRoZSBPYmpDIERPTSBB
UEksIGFuZCB0aGUgQysrIERPTSBBUEksIHNvIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3
aGF0CiAvLyBoZWFkZXJzIGFyZSBpbmNsdWRlZCB0byBhdm9pZCBuYW1pbmcgY29uZmxpY3RzLgog
Ci1zdGF0aWMgaW5saW5lIGlkIGNyZWF0ZU9iakNET01Ob2RlKFdlYkNvcmU6Ok5vZGUgKm5vZGUp
CitzdGF0aWMgaW5saW5lIGlkIGNyZWF0ZU9iakNET01Ob2RlKFdlYkNvcmU6Ok5vZGUgKmltcGwp
CiB7Ci0gICAgcmV0dXJuIFtET01Ob2RlIF9ub2RlV2l0aDpub2RlXTsKKyAgICByZXR1cm4gW0RP
TU5vZGUgX25vZGVXaXRoOmltcGxdOwogfQogCitzdGF0aWMgaW5saW5lIGlkIGNyZWF0ZU9iakNE
T01Ob2RlTGlzdChXZWJDb3JlOjpOb2RlTGlzdCAqaW1wbCkKK3sKKyAgICByZXR1cm4gW0RPTU5v
ZGVMaXN0IF9ub2RlTGlzdFdpdGg6aW1wbF07Cit9CisKK3N0YXRpYyBpbmxpbmUgaWQgY3JlYXRl
T2JqQ0RPTU5hbWVkTm9kZU1hcChXZWJDb3JlOjpOYW1lZE5vZGVNYXAgKmltcGwpCit7CisgICAg
cmV0dXJuIFtET01OYW1lZE5vZGVNYXAgX25hbWVkTm9kZU1hcFdpdGg6aW1wbF07Cit9CisKK3N0
YXRpYyBpbmxpbmUgaWQgY3JlYXRlT2JqQ0RPTVN0eWxlU2hlZXQoV2ViQ29yZTo6U3R5bGVTaGVl
dCAqaW1wbCkKK3sKKyAgICByZXR1cm4gW0RPTVN0eWxlU2hlZXQgX0RPTVN0eWxlU2hlZXRXaXRo
OmltcGxdOworfQorCitzdGF0aWMgaW5saW5lIGlkIGNyZWF0ZU9iakNET01TdHlsZVNoZWV0TGlz
dChXZWJDb3JlOjpTdHlsZVNoZWV0TGlzdCAqaW1wbCkKK3sKKyAgICByZXR1cm4gW0RPTVN0eWxl
U2hlZXRMaXN0IF9zdHlsZVNoZWV0TGlzdFdpdGg6aW1wbF07Cit9CisKK3N0YXRpYyBpbmxpbmUg
aWQgY3JlYXRlT2JqQ0RPTUNTU1J1bGUoV2ViQ29yZTo6Q1NTUnVsZSAqaW1wbCkKK3sKKyAgICBy
ZXR1cm4gW0RPTUNTU1J1bGUgX3J1bGVXaXRoOmltcGxdOworfQorCitzdGF0aWMgaW5saW5lIGlk
IGNyZWF0ZU9iakNET01DU1NSdWxlTGlzdChXZWJDb3JlOjpDU1NSdWxlTGlzdCAqaW1wbCkKK3sK
KyAgICByZXR1cm4gW0RPTUNTU1J1bGVMaXN0IF9ydWxlTGlzdFdpdGg6aW1wbF07Cit9CisKK3N0
YXRpYyBpbmxpbmUgaWQgY3JlYXRlT2JqQ0RPTUNTU1N0eWxlRGVjbGFyYXRpb24oV2ViQ29yZTo6
Q1NTU3R5bGVEZWNsYXJhdGlvbiAqaW1wbCkKK3sKKyAgICByZXR1cm4gW0RPTUNTU1N0eWxlRGVj
bGFyYXRpb24gX3N0eWxlRGVjbGFyYXRpb25XaXRoOmltcGxdOworfQorCitzdGF0aWMgaW5saW5l
IGlkIGNyZWF0ZU9iakNET01NZWRpYUxpc3QoV2ViQ29yZTo6TWVkaWFMaXN0ICppbXBsKQorewor
ICAgIHJldHVybiBbRE9NTWVkaWFMaXN0IF9tZWRpYUxpc3RXaXRoOmltcGxdOworfQorCitzdGF0
aWMgaW5saW5lIGlkIGNyZWF0ZU9iakNET01DU1NWYWx1ZShXZWJDb3JlOjpDU1NWYWx1ZSAqaW1w
bCkKK3sKKyAgICByZXR1cm4gW0RPTUNTU1ZhbHVlIF92YWx1ZVdpdGg6aW1wbF07Cit9CisKKyNp
ZiAwICAgLy8gSkdTIC0gdGhlc2UgZG9uJ3Qgd29yaworc3RhdGljIGlubGluZSBpZCBjcmVhdGVP
YmpDRE9NUkdCQ29sb3IoV2ViQ29yZTo6UkdCQ29sb3IgKmltcGwpCit7CisgICAgcmV0dXJuIFtE
T01SR0JDb2xvciBfY29sb3JXaXRoOmltcGxdOworfQorCitzdGF0aWMgaW5saW5lIGlkIGNyZWF0
ZU9iakNET01SZWN0KFdlYkNvcmU6OlJlY3RJbXBsICppbXBsKQoreworICAgIHJldHVybiBbRE9N
UmVjdCBfcmVjdFdpdGg6aW1wbF07Cit9CisKK3N0YXRpYyBpbmxpbmUgaWQgY3JlYXRlT2JqQ0RP
TUNvdW50ZXIoV2ViQ29yZTo6Q291bnRlciAqaW1wbCkKK3sKKyAgICByZXR1cm4gW0RPTUNvdW50
ZXIgX2NvdW50ZXJXaXRoOmltcGxdOworfQorI2VuZGlmCisKIG5hbWVzcGFjZSBLSlMgewogCiB2
b2lkICpTY3JpcHRJbnRlcnByZXRlcjo6Y3JlYXRlT2JqY0luc3RhbmNlRm9yVmFsdWUoRXhlY1N0
YXRlICpleGVjLCBKU09iamVjdCAqdmFsdWUsIGNvbnN0IEJpbmRpbmdzOjpSb290T2JqZWN0ICpv
cmlnaW4sIGNvbnN0IEJpbmRpbmdzOjpSb290T2JqZWN0ICpjdXJyZW50KQogewotICAgIGlmICh2
YWx1ZS0+aW5oZXJpdHMoJkRPTU5vZGU6OmluZm8pKSB7Ci0gICAgICAgIERPTU5vZGUgKmltcCA9
IHN0YXRpY19jYXN0PERPTU5vZGUgKj4odmFsdWUpOwotICAgICAgICBpZCBuZXdPYmpjTm9kZSA9
IGNyZWF0ZU9iakNET01Ob2RlKGltcC0+aW1wbCgpKTsKLSAgICAgICAgW25ld09iamNOb2RlIF9p
bml0aWFsaXplV2l0aE9iamVjdEltcDppbXAgb3JpZ2luRXhlY3V0aW9uQ29udGV4dDpvcmlnaW4g
ZXhlY3V0aW9uQ29udGV4dDpjdXJyZW50XTsKLSAgICAgICAgcmV0dXJuIG5ld09iamNOb2RlOwot
ICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICBpZCBuZXdPYmogPSBuaWw7CisgICAgCisgICAgaWYg
KHZhbHVlLT5pbmhlcml0cygmRE9NTm9kZTo6aW5mbykpCisgICAgICAgIG5ld09iaiA9IGNyZWF0
ZU9iakNET01Ob2RlKHN0YXRpY19jYXN0PERPTU5vZGUgKj4odmFsdWUpLT5pbXBsKCkpOworICAg
IGVsc2UgaWYgKHZhbHVlLT5pbmhlcml0cygmRE9NTm9kZUxpc3Q6OmluZm8pKQorICAgICAgICBu
ZXdPYmogPSBjcmVhdGVPYmpDRE9NTm9kZUxpc3Qoc3RhdGljX2Nhc3Q8RE9NTm9kZUxpc3QgKj4o
dmFsdWUpLT5pbXBsKCkpOworICAgIGVsc2UgaWYgKHZhbHVlLT5pbmhlcml0cygmRE9NTmFtZWRO
b2RlTWFwOjppbmZvKSkKKyAgICAgICAgbmV3T2JqID0gY3JlYXRlT2JqQ0RPTU5hbWVkTm9kZU1h
cChzdGF0aWNfY2FzdDxET01OYW1lZE5vZGVNYXAgKj4odmFsdWUpLT5pbXBsKCkpOworICAgIGVs
c2UgaWYgKHZhbHVlLT5pbmhlcml0cygmRE9NU3R5bGVTaGVldDo6aW5mbykpCisgICAgICAgIG5l
d09iaiA9IGNyZWF0ZU9iakNET01TdHlsZVNoZWV0KHN0YXRpY19jYXN0PERPTVN0eWxlU2hlZXQg
Kj4odmFsdWUpLT5pbXBsKCkpOworICAgIGVsc2UgaWYgKHZhbHVlLT5pbmhlcml0cygmRE9NU3R5
bGVTaGVldExpc3Q6OmluZm8pKQorICAgICAgICBuZXdPYmogPSBjcmVhdGVPYmpDRE9NU3R5bGVT
aGVldExpc3Qoc3RhdGljX2Nhc3Q8RE9NU3R5bGVTaGVldExpc3QgKj4odmFsdWUpLT5pbXBsKCkp
OworICAgIGVsc2UgaWYgKHZhbHVlLT5pbmhlcml0cygmRE9NQ1NTUnVsZTo6aW5mbykpCisgICAg
ICAgIG5ld09iaiA9IGNyZWF0ZU9iakNET01DU1NSdWxlKHN0YXRpY19jYXN0PERPTUNTU1J1bGUg
Kj4odmFsdWUpLT5pbXBsKCkpOworICAgIGVsc2UgaWYgKHZhbHVlLT5pbmhlcml0cygmRE9NQ1NT
UnVsZUxpc3Q6OmluZm8pKQorICAgICAgICBuZXdPYmogPSBjcmVhdGVPYmpDRE9NQ1NTUnVsZUxp
c3Qoc3RhdGljX2Nhc3Q8RE9NQ1NTUnVsZUxpc3QgKj4odmFsdWUpLT5pbXBsKCkpOworICAgIGVs
c2UgaWYgKHZhbHVlLT5pbmhlcml0cygmRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjo6aW5mbykpCisg
ICAgICAgIG5ld09iaiA9IGNyZWF0ZU9iakNET01DU1NTdHlsZURlY2xhcmF0aW9uKHN0YXRpY19j
YXN0PERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKj4odmFsdWUpLT5pbXBsKCkpOworICAgIGVsc2Ug
aWYgKHZhbHVlLT5pbmhlcml0cygmRE9NTWVkaWFMaXN0OjppbmZvKSkKKyAgICAgICAgbmV3T2Jq
ID0gY3JlYXRlT2JqQ0RPTU1lZGlhTGlzdChzdGF0aWNfY2FzdDxET01NZWRpYUxpc3QgKj4odmFs
dWUpLT5pbXBsKCkpOworICAgIGVsc2UgaWYgKHZhbHVlLT5pbmhlcml0cygmRE9NQ1NTVmFsdWU6
OmluZm8pKQorICAgICAgICBuZXdPYmogPSBjcmVhdGVPYmpDRE9NQ1NTVmFsdWUoc3RhdGljX2Nh
c3Q8RE9NQ1NTVmFsdWUgKj4odmFsdWUpLT5pbXBsKCkpOworI2lmIDAgICAvLyBKR1MgLSB0aGVz
ZSBkb24ndCB3b3JrCisgICAgZWxzZSBpZiAodmFsdWUtPmluaGVyaXRzKCZET01SR0JDb2xvcjo6
aW5mbykpCisgICAgICAgIG5ld09iaiA9IGNyZWF0ZU9iakNET01SR0JDb2xvcihzdGF0aWNfY2Fz
dDxET01SR0JDb2xvciAqPih2YWx1ZSktPmltcGwoKSk7CisgICAgZWxzZSBpZiAodmFsdWUtPmlu
aGVyaXRzKCZET01SZWN0OjppbmZvKSkKKyAgICAgICAgbmV3T2JqID0gY3JlYXRlT2JqQ0RPTVJl
Y3Qoc3RhdGljX2Nhc3Q8RE9NUmVjdCAqPih2YWx1ZSktPmltcGwoKSk7CisgICAgZWxzZSBpZiAo
dmFsdWUtPmluaGVyaXRzKCZET01Db3VudGVyOjppbmZvKSkKKyAgICAgICAgbmV3T2JqID0gY3Jl
YXRlT2JqQ0RPTUNvdW50ZXIoc3RhdGljX2Nhc3Q8RE9NQ291bnRlciAqPih2YWx1ZSktPmltcGwo
KSk7CisjZW5kaWYKKyAgICAKKyAgICBpZiAobmV3T2JqKQorICAgICAgICBbbmV3T2JqIF9pbml0
aWFsaXplV2l0aE9iamVjdEltcDp2YWx1ZSBvcmlnaW5FeGVjdXRpb25Db250ZXh0Om9yaWdpbiBl
eGVjdXRpb25Db250ZXh0OmN1cnJlbnRdOworICAgIAorICAgIHJldHVybiBuZXdPYmo7CiB9CiAK
IH0KSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxNDQwNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMzUgQEAKKzIwMDYtMDUtMTUgIEphbWVzIEcuIFNwZXRoICA8c3BldGhAZW5k
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGRlZCBvYmpjLWRvbS13cmFwcGVycy5odG1sIHRlc3QgY2FzZSB0byBMYXlvdXRUZXN0cy9mYXN0
L2RvbSAocmVxdWlyZXMgcHl0aG9uc2NyaXB0IHBsdWdpbikKKyAgICAgICAgCisgICAgICAgIEFk
ZGVkIGZ1bmN0aW9ucyB0byBwcm9wZXJseSB3cmFwIHNvbWUgb2JqZWN0cyB3aGVuIHRoZXkgYXJl
IHJldHVybmVkIHRvIGFuIE9iamVjdGl2ZS1DIGNhbGxlcgorICAgICAgICBmcm9tIEphdmFTY3Jp
cHQuICBQcmV2aW91c2x5IHdoZW4gdGhlc2Ugb2JqZWN0cyBjcm9zc2VkIHRoZSBicmlkZ2UgdG8g
T2JqLUMgdGhleSB3b3VsZCBhcHBlYXIgYXMKKyAgICAgICAgZ2VuZXJpYyBXZWJTY3JpcHRPYmpl
Y3QgaW5zdGFuY2VzCisgICAgICAgIAorICAgICAgICBodHRwOi8vYnVnemlsbGEub3BlbmRhcndp
bi5vcmcvc2hvd19idWcuY2dpP2lkPTgzMzEKKworICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9N
Lm1tOiAgICAgICAgIG1vdmVkIGludGVybmFsIGludGVyZmFjZXMgZnJvbSBoZXJlIHRvIERPTUlu
dGVybmFsLmgKKyAgICAgICAgKC1bRE9NRG9jdW1lbnRUeXBlIDpdKToKKyAgICAgICAgKiBiaW5k
aW5ncy9vYmpjL0RPTUNTUy5tbTogICAgICBtb3ZlZCBpbnRlcm5hbCBpbnRlcmZhY2VzIGZyb20g
aGVyZSB0byBET01JbnRlcm5hbC5oCisgICAgICAgICogYmluZGluZ3Mvb2JqYy9ET01JbnRlcm5h
bC5oOiAgbW92ZWQgc2V2ZXJhbCBpbnRlcm5hbCBpbnRlcmZhY2VzIGhlcmUKKyAgICAgICAgKiBi
aW5kaW5ncy9vYmpjL0RPTVV0aWxpdHkubW06ICBhZGRlZCBzdXBwb3J0IGZ1bmN0aW9ucyBmb3Ig
dGhlIHdyYXBwaW5nCisgICAgICAgIChjcmVhdGVPYmpDRE9NTm9kZSk6CisgICAgICAgIChjcmVh
dGVPYmpDRE9NTm9kZUxpc3QpOgorICAgICAgICAoY3JlYXRlT2JqQ0RPTU5hbWVkTm9kZU1hcCk6
CisgICAgICAgIChjcmVhdGVPYmpDRE9NU3R5bGVTaGVldCk6CisgICAgICAgIChjcmVhdGVPYmpD
RE9NU3R5bGVTaGVldExpc3QpOgorICAgICAgICAoY3JlYXRlT2JqQ0RPTUNTU1J1bGUpOgorICAg
ICAgICAoY3JlYXRlT2JqQ0RPTUNTU1J1bGVMaXN0KToKKyAgICAgICAgKGNyZWF0ZU9iakNET01D
U1NTdHlsZURlY2xhcmF0aW9uKToKKyAgICAgICAgKGNyZWF0ZU9iakNET01NZWRpYUxpc3QpOgor
ICAgICAgICAoY3JlYXRlT2JqQ0RPTUNTU1ZhbHVlKToKKyAgICAgICAgKGNyZWF0ZU9iakNET01S
R0JDb2xvcik6CisgICAgICAgIChjcmVhdGVPYmpDRE9NUmVjdCk6CisgICAgICAgIChjcmVhdGVP
YmpDRE9NQ291bnRlcik6CisgICAgICAgIChLSlM6OlNjcmlwdEludGVycHJldGVyOjpjcmVhdGVP
YmpjSW5zdGFuY2VGb3JWYWx1ZSk6CisKIDIwMDYtMDUtMTUgIEVyaWMgU2VpZGVsICA8ZXNlaWRl
bEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgaHlhdHQuCg==
</data>
<flag name="review"
          id="2353"
          type_id="1"
          status="-"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8480</attachid>
            <date>2006-05-23 04:11:24 -0700</date>
            <delta_ts>2006-05-23 17:21:48 -0700</delta_ts>
            <desc>removed #if 0 code, improved array accessors, please review</desc>
            <filename>p8331+</filename>
            <type>text/plain</type>
            <size>17213</size>
            <attacher name="James G. Speth">speth</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NTI4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMDYtMDUtMTUgIEphbWVzIEcu
IFNwZXRoICA8c3BldGhAZW5kLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKyAgICAgICAgCisgICAgICAgIEFsbG93IGtleS12YWx1ZSBjb2RpbmcgYWNjZXNzb3Jz
IHRvIGdldCBhIERPTUNTU1J1bGVMaXN0IG9iamVjdCBmcm9tIGEgRE9NQ1NTU3R5bGVTaGVldAor
ICAgICAgICBzZWU6IGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODMzMQorICAgICAgICAKKyAgICAgICAgVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IHdoZW4g
dmFsdWVGb3JLZXk6IGlzIGNhbGxlZCwgdGhlIERPTUNTU1N0eWxlU2hlZXQgaGFzIG5vIGluaXRp
YWxpemVkCisgICAgICAgIGV4ZWN1dGlvbiBjb250ZXh0IGFuZCBjYW5ub3QgY29udGludWUsIHNv
IGhhZCBwcmV2aW91c2x5IHJldHVybmVkIG5pbC4gIFRoaXMgY2hhbmdlIGNhdXNlcworICAgICAg
ICB2YWx1ZUZvcktleTogdG8gY2FsbCB0aGUgc3VwZXJjbGFzcyBpbXBsZW1lbnRhdGlvbiB3aGVu
IHRoZSBvYmplY3QgaGFzIG5vIGV4ZWN1dGlvbiBjb250ZXh0LgorICAgICAgICBJbiB0aGlzIGNh
c2UsIGl0IGVuZHMgdXAgaW52b2tpbmcgdGhlIGNzc1J1bGVzIHNlbGVjdG9yIG9uIHRoZSBzdHls
ZVNoZWV0IGFuZCBnZXR0aW5nIHRoZSBydWxlIGxpc3QuCisgICAgICAgIAorICAgICAgICBUaGlz
IGlzIGNsZWFybHkgYSB3b3JrYXJvdW5kIHVudGlsIGEgYmV0dGVyIHNvbHV0aW9uIGlzIGZvdW5k
LgorICAgICAgICAKKyAgICAgICAgQWxzbyBpbXByb3ZlZCBLVkMgYWNjZXNzIHRvIGFycmF5LWxp
a2Ugb2JqZWN0cyBpbiB0aGUgRE9NIGJ5IGFkZGluZyBjb3VudE9mSXRlbXMgYW5kCisgICAgICAg
IG9iamVjdEluSXRlbXNBdEluZGV4OiBhY2Nlc3NvcnMgdG8gV2ViU2NyaXB0T2JqZWN0LgorICAg
ICAgICAKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbToKKyAgICAg
ICAgKC1bV2ViU2NyaXB0T2JqZWN0IHZhbHVlRm9yS2V5Ol0pOgorCiAyMDA2LTA1LTIyICBUaW1v
dGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBF
cmljLCBLZXZpbiBhbmQgR2VvZmYuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpj
L1dlYlNjcmlwdE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5n
cy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkocmV2aXNpb24gMTQ1MjgpCisrKyBKYXZhU2NyaXB0
Q29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSmFtZXMgRy4g
U3BldGggKHNwZXRoQGVuZC5jb20pCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI2NSwxMSArMjY2LDE2IEBAIHN0YXRpYyBMaXN0IGxpc3RGcm9tTlNBcnJheShFeGVjU3RhdGUg
KmUKIAogLSAoaWQpdmFsdWVGb3JLZXk6KE5TU3RyaW5nICopa2V5CiB7CisgICAgLy8gZmlyc3Qg
Y2hlY2sgdGhhdCBhY2Nlc3NpbmcgdGhlIG9iamVjdCBpcyBwb3NzaWJsZSBhbmQgYWxsb3dlZAor
ICAgIC8vIGlmIG5vdCwgaGFuZCB0aGlzIHJlcXVlc3QgdG8gdGhlIHN1cGVyY2xhc3MgZm9yIGZ1
cnRoZXIgcHJvY2Vzc2luZworICAgIC8vICh0aGlzIHdvcmtzIGFyb3VuZCB0aGUgcHJvYmxlbSBv
ZiBzb21lIERPTU9iamVjdHMgbm90IGhhdmluZyBhbiBleGVjdXRpb24gY29udGV4dCwKKyAgICAv
LyBmb3IgaW5zdGFuY2UsIGF0dGVtcHRpbmcgdG8gcmV0cmlldmUgYSBET01DU1NSdWxlTGlzdCBm
cm9tIGEgRE9NQ1NTU3R5bGVTaGVldCkKKyAgICAKICAgICBpZiAoIVtzZWxmIF9leGVjdXRpb25D
b250ZXh0XSkKLSAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgcmV0dXJuIFtzdXBlciB2YWx1
ZUZvcktleTprZXldOwogICAgICAgICAKICAgICBpZiAoIVtzZWxmIF9pc1NhZmVTY3JpcHRdKQot
CXJldHVybiBuaWw7CisgICAgICAgIHJldHVybiBbc3VwZXIgdmFsdWVGb3JLZXk6a2V5XTsKIAog
ICAgIEV4ZWNTdGF0ZSAqZXhlYyA9IFtzZWxmIF9leGVjdXRpb25Db250ZXh0XS0+aW50ZXJwcmV0
ZXIoKS0+Z2xvYmFsRXhlYygpOwogCkBAIC0yODQsNyArMjkwLDcgQEAgc3RhdGljIExpc3QgbGlz
dEZyb21OU0FycmF5KEV4ZWNTdGF0ZSAqZQogCiAgICAgaWQgcmVzdWx0T2JqID0gW1dlYlNjcmlw
dE9iamVjdCBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6cmVzdWx0IG9yaWdpbkV4ZWN1dGlvbkNv
bnRleHQ6W3NlbGYgX29yaWdpbkV4ZWN1dGlvbkNvbnRleHRdIGV4ZWN1dGlvbkNvbnRleHQ6W3Nl
bGYgX2V4ZWN1dGlvbkNvbnRleHRdXTsKICAgICBpZiAoW3Jlc3VsdE9iaiBpc0tpbmRPZkNsYXNz
OltXZWJVbmRlZmluZWQgY2xhc3NdXSkKLSAgICAgICAgcmVzdWx0T2JqID0gW3N1cGVyIHZhbHVl
Rm9yS2V5OmtleV07ICAgIC8vIGVuc3VyZSBjb3JyZWN0IG5vdC1hcHBsaWNhYmxlIGtleSBiZWhh
dmlvcgorICAgICAgICByZXN1bHRPYmogPSBbc3VwZXIgdmFsdWVGb3JLZXk6a2V5XTsgICAgLy8g
ZW5zdXJlIGNvcnJlY3QgYmVoYXZpb3IgZm9yICJOb3QgQXBwbGljYWJsZSIga2V5cwogCiAgICAg
X2RpZEV4ZWN1dGUoc2VsZik7CiAgICAgCkBAIC00MjYsMTQgKzQzMiwyNyBAQCBzdGF0aWMgTGlz
dCBsaXN0RnJvbU5TQXJyYXkoRXhlY1N0YXRlICplCiAKIEBpbnRlcmZhY2UgV2ViU2NyaXB0T2Jq
ZWN0IChXZWJLaXRDb2NvYUJpbmRpbmdzKQogCi0tICh1bnNpZ25lZCBpbnQpY291bnQ7CistICh1
bnNpZ25lZCBpbnQpY291bnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOU0FycmF5IGlu
dGVyZmFjZSBmb3IgaW1tdXRhYmxlIGFycmF5cwogLSAoaWQpb2JqZWN0QXRJbmRleDoodW5zaWdu
ZWQgaW50KWluZGV4OwogCistICh1bnNpZ25lZCljb3VudE9mSXRlbXM7ICAgICAgICAgICAgICAg
ICAgICAgICAvLyB0aGVzZSBhbGxvdyBiaW5kaW5nIHRvIHRoZSBrZXkgIml0ZW0iLCBhbmQgd2ls
bAorLSAoaWQpb2JqZWN0SW5JdGVtc0F0SW5kZXg6KHVuc2lnbmVkKWluZGV4OyAgICAgLy8gYXV0
b21hdGljYWxseSBnZW5lcmF0ZSBhbiBOU0tleVZhbHVlQXJyYXkgcHJveHkKKwogQGVuZAogCiBA
aW1wbGVtZW50YXRpb24gV2ViU2NyaXB0T2JqZWN0IChXZWJLaXRDb2NvYUJpbmRpbmdzKQogCi0t
ICh1bnNpZ25lZCBpbnQpY291bnQKKy0gKHVuc2lnbmVkKWNvdW50Cit7CisgICAgcmV0dXJuIFtz
ZWxmIGNvdW50T2ZJdGVtc107Cit9CisKKy0gKGlkKW9iamVjdEF0SW5kZXg6KHVuc2lnbmVkKWlu
ZGV4Cit7CisgICAgcmV0dXJuIFtzZWxmIG9iamVjdEluSXRlbXNBdEluZGV4OmluZGV4XTsKK30K
KworLSAodW5zaWduZWQpY291bnRPZkl0ZW1zCiB7CiAgICAgaWQgbGVuZ3RoID0gW3NlbGYgdmFs
dWVGb3JLZXk6QCJsZW5ndGgiXTsKICAgICBpZiAoW2xlbmd0aCByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKGludFZhbHVlKV0pCkBAIC00NDIsNyArNDYxLDcgQEAgc3RhdGljIExpc3QgbGlz
dEZyb21OU0FycmF5KEV4ZWNTdGF0ZSAqZQogICAgICAgICByZXR1cm4gMDsKIH0KIAotLSAoaWQp
b2JqZWN0QXRJbmRleDoodW5zaWduZWQgaW50KWluZGV4CistIChpZClvYmplY3RJbkl0ZW1zQXRJ
bmRleDoodW5zaWduZWQpaW5kZXgKIHsKICAgICByZXR1cm4gW3NlbGYgd2ViU2NyaXB0VmFsdWVB
dEluZGV4OmluZGV4XTsKIH0KSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDQxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMDYtMDUtMTUgIEphbWVzIEcuIFNw
ZXRoICA8c3BldGhAZW5kLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRlZCBmdW5jdGlvbnMgdG8gcHJvcGVybHkgd3JhcCBzb21lIG9iamVj
dHMgd2hlbiB0aGV5IGFyZSByZXR1cm5lZCB0byBhbiBPYmplY3RpdmUtQyBjYWxsZXIKKyAgICAg
ICAgZnJvbSBKYXZhU2NyaXB0LiAgUHJldmlvdXNseSB3aGVuIHRoZXNlIG9iamVjdHMgY3Jvc3Nl
ZCB0aGUgYnJpZGdlIHRvIE9iai1DIHRoZXkgd291bGQgYXBwZWFyIGFzCisgICAgICAgIGdlbmVy
aWMgV2ViU2NyaXB0T2JqZWN0IGluc3RhbmNlcy4gIEFkZGVkIGluZGV4ZWQgYXJyYXkgYWNjZXNz
b3IgZm9yIGtleS12YWx1ZSBjb2RpbmcuCisgICAgICAgIAorICAgICAgICBodHRwOi8vYnVnemls
bGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTgzMzEKKworICAgICAgICAqIGJpbmRp
bmdzL29iamMvRE9NLm1tOiAgICAgICAgIG1vdmVkIGludGVybmFsIGludGVyZmFjZXMgZnJvbSBo
ZXJlIHRvIERPTUludGVybmFsLmgKKyAgICAgICAgKC1bRE9NRG9jdW1lbnRUeXBlIDpdKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTUNTUy5tbTogICAgICBtb3ZlZCBpbnRlcm5hbCBpbnRl
cmZhY2VzIGZyb20gaGVyZSB0byBET01JbnRlcm5hbC5oCisgICAgICAgICogYmluZGluZ3Mvb2Jq
Yy9ET01JbnRlcm5hbC5oOiAgbW92ZWQgc2V2ZXJhbCBpbnRlcm5hbCBpbnRlcmZhY2VzIGhlcmUK
KyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTVV0aWxpdHkubW06ICBhZGRlZCBzdXBwb3J0IGZ1
bmN0aW9ucyBmb3IgdGhlIHdyYXBwaW5nCisgICAgICAgIChjcmVhdGVPYmpDRE9NTm9kZSk6Cisg
ICAgICAgIChjcmVhdGVPYmpDRE9NTm9kZUxpc3QpOgorICAgICAgICAoY3JlYXRlT2JqQ0RPTU5h
bWVkTm9kZU1hcCk6CisgICAgICAgIChjcmVhdGVPYmpDRE9NU3R5bGVTaGVldCk6CisgICAgICAg
IChjcmVhdGVPYmpDRE9NU3R5bGVTaGVldExpc3QpOgorICAgICAgICAoY3JlYXRlT2JqQ0RPTUNT
U1J1bGUpOgorICAgICAgICAoY3JlYXRlT2JqQ0RPTUNTU1J1bGVMaXN0KToKKyAgICAgICAgKGNy
ZWF0ZU9iakNET01DU1NTdHlsZURlY2xhcmF0aW9uKToKKyAgICAgICAgKGNyZWF0ZU9iakNET01N
ZWRpYUxpc3QpOgorICAgICAgICAoY3JlYXRlT2JqQ0RPTUNTU1ZhbHVlKToKKyAgICAgICAgKGNy
ZWF0ZU9iakNET01SR0JDb2xvcik6CisgICAgICAgIChjcmVhdGVPYmpDRE9NUmVjdCk6CisgICAg
ICAgIChjcmVhdGVPYmpDRE9NQ291bnRlcik6CisgICAgICAgIChLSlM6OlNjcmlwdEludGVycHJl
dGVyOjpjcmVhdGVPYmpjSW5zdGFuY2VGb3JWYWx1ZSk6CisKIDIwMDYtMDUtMTYgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEh5YXR0LgpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL29iamMvRE9NLm1tCShyZXZpc2lvbiAxNDQxNikKKysrIFdlYkNvcmUvYmluZGluZ3Mv
b2JqYy9ET00ubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEphbWVzIEcuIFNwZXRoIChzcGV0aEBl
bmQuY29tKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05OSwxMCArMTAwLDYg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIC0gKERPTUltcGxlbWVudGF0
aW9uRnJvbnQgKilfRE9NSW1wbGVtZW50YXRpb247CiBAZW5kCiAKLUBpbnRlcmZhY2UgRE9NTmFt
ZWROb2RlTWFwIChXZWJDb3JlSW50ZXJuYWwpCi0rIChET01OYW1lZE5vZGVNYXAgKilfbmFtZWRO
b2RlTWFwV2l0aDooTmFtZWROb2RlTWFwICopaW1wbDsKLUBlbmQKLQogY2xhc3MgT2JqQ0V2ZW50
TGlzdGVuZXIgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIE9i
akNFdmVudExpc3RlbmVyICpmaW5kKGlkIDxET01FdmVudExpc3RlbmVyPik7CkBAIC02NDMsNiAr
NjQwLDExIEBAIHN0YXRpYyBDbGFzcyBlbGVtZW50Q2xhc3MoY29uc3QgQXRvbWljU3QKICAgICBy
ZXR1cm4gMDsKIH0KIAorLSAoTlNBcnJheSAqKWNoaWxkTm9kZXNBcnJheQoreworICAgIHJldHVy
biBbW3NlbGYgY2hpbGROb2Rlc10gdmFsdWVGb3JLZXk6QCJpdGVtcyJdOworfQorCiBAZW5kCiAK
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC03NjYsNiArNzY4LDE2IEBA
IHN0YXRpYyBDbGFzcyBlbGVtZW50Q2xhc3MoY29uc3QgQXRvbWljU3QKICAgICByZXR1cm4gW1tb
c2VsZiBhbGxvY10gX2luaXRXaXRoTmFtZWROb2RlTWFwOmltcGxdIGF1dG9yZWxlYXNlXTsKIH0K
IAorLSAodW5zaWduZWQpY291bnRPZkl0ZW1zCit7CisgICAgcmV0dXJuIFtzZWxmIGxlbmd0aF07
Cit9CisKKy0gKGlkKW9iamVjdEluSXRlbXNBdEluZGV4Oih1bnNpZ25lZClpbmRleAoreworICAg
IHJldHVybiBbc2VsZiBpdGVtOmluZGV4XTsKK30KKwogQGVuZAogCiAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtODMyLDYgKzg0NCwxNiBAQCBzdGF0aWMgQ2xhc3MgZWxl
bWVudENsYXNzKGNvbnN0IEF0b21pY1N0CiAgICAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIF9pbml0
V2l0aE5vZGVMaXN0OmltcGxdIGF1dG9yZWxlYXNlXTsKIH0KIAorLSAodW5zaWduZWQpY291bnRP
Zkl0ZW1zCit7CisgICAgcmV0dXJuIFtzZWxmIGxlbmd0aF07Cit9CisKKy0gKGlkKW9iamVjdElu
SXRlbXNBdEluZGV4Oih1bnNpZ25lZClpbmRleAoreworICAgIHJldHVybiBbc2VsZiBpdGVtOmlu
ZGV4XTsKK30KKwogQGVuZAogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUNTUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NQ1NTLm1tCShyZXZpc2lvbiAxNDQxNikKKysrIFdlYkNvcmUv
YmluZGluZ3Mvb2JqYy9ET01DU1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEphbWVzIEcuIFNwZXRoIChzcGV0aEBl
bmQuY29tKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSw0MiArNTYsNiBA
QCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogdHlwZWRlZiBET01XaW5kb3cgQWJzdHJhY3RW
aWV3OwogCi1AaW50ZXJmYWNlIERPTVN0eWxlU2hlZXQgKFdlYkNvcmVJbnRlcm5hbCkKLSsgKERP
TVN0eWxlU2hlZXQgKilfRE9NU3R5bGVTaGVldFdpdGg6KFN0eWxlU2hlZXQgKilpbXBsOwotQGVu
ZAotCi1AaW50ZXJmYWNlIERPTU1lZGlhTGlzdCAoV2ViQ29yZUludGVybmFsKQotKyAoRE9NTWVk
aWFMaXN0ICopX21lZGlhTGlzdFdpdGg6KE1lZGlhTGlzdCAqKWltcGw7Ci1AZW5kCi0KLUBpbnRl
cmZhY2UgRE9NQ1NTUnVsZUxpc3QgKFdlYkNvcmVJbnRlcm5hbCkKLSsgKERPTUNTU1J1bGVMaXN0
ICopX3J1bGVMaXN0V2l0aDooQ1NTUnVsZUxpc3QgKilpbXBsOwotQGVuZAotCi1AaW50ZXJmYWNl
IERPTUNTU1J1bGUgKFdlYkNvcmVJbnRlcm5hbCkKLSsgKERPTUNTU1J1bGUgKilfcnVsZVdpdGg6
KENTU1J1bGUgKilpbXBsOwotQGVuZAotCi1AaW50ZXJmYWNlIERPTUNTU1ZhbHVlIChXZWJDb3Jl
SW50ZXJuYWwpCi0rIChET01DU1NWYWx1ZSAqKV92YWx1ZVdpdGg6KENTU1ZhbHVlICopaW1wbDsK
LUBlbmQKLQotQGludGVyZmFjZSBET01DU1NQcmltaXRpdmVWYWx1ZSAoV2ViQ29yZUludGVybmFs
KQotKyAoRE9NQ1NTUHJpbWl0aXZlVmFsdWUgKilfdmFsdWVXaXRoOihDU1NWYWx1ZSAqKWltcGw7
Ci1AZW5kCi0KLUBpbnRlcmZhY2UgRE9NUkdCQ29sb3IgKFdlYkNvcmVJbnRlcm5hbCkKLSsgKERP
TVJHQkNvbG9yICopX1JHQkNvbG9yV2l0aFJHQjooUkdCQTMyKXZhbHVlOwotQGVuZAotCi1AaW50
ZXJmYWNlIERPTVJlY3QgKFdlYkNvcmVJbnRlcm5hbCkKLSsgKERPTVJlY3QgKilfcmVjdFdpdGg6
KFJlY3RJbXBsICopaW1wbDsKLUBlbmQKLQotQGludGVyZmFjZSBET01Db3VudGVyIChXZWJDb3Jl
SW50ZXJuYWwpCi0rIChET01Db3VudGVyICopX2NvdW50ZXJXaXRoOihDb3VudGVyICopaW1wbDsK
LUBlbmQKLQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIERPTVN0eWxl
U2hlZXQKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLmgJKHJldmlzaW9uIDE0
NDE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEphbWVzIEcuIFNwZXRoIChzcGV0aEBlbmQuY29tKQogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiw2ICsyNywxMyBAQAogI2ltcG9ydCAiRE9NLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBSZWN0SW1wbDsKKyAgICBjbGFzcyBDb3VudGVyOworICAg
IGNsYXNzIENTU1ZhbHVlOworICAgIGNsYXNzIENTU1ByaW1pdGl2ZVZhbHVlOworICAgIGNsYXNz
IENTU1J1bGU7CisgICAgY2xhc3MgQ1NTUnVsZUxpc3Q7CisgICAgY2xhc3MgTWVkaWFMaXN0Owog
ICAgIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CiAgICAgY2xhc3MgQ1NTU3R5bGVTaGVldDsK
ICAgICBjbGFzcyBEb2N1bWVudEZyYWdtZW50OwpAQCAtMzYsMjAgKzQ0LDMwIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIE5vZGVJdGVyYXRvcjsKICAg
ICBjbGFzcyBOb2RlTGlzdDsKKyAgICBjbGFzcyBOYW1lZE5vZGVNYXA7CiAgICAgY2xhc3MgUmFu
Z2U7CisgICAgY2xhc3MgU3R5bGVTaGVldDsKICAgICBjbGFzcyBTdHlsZVNoZWV0TGlzdDsKICAg
ICBjbGFzcyBUcmVlV2Fsa2VyOwogCiAgICAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKyAg
ICB0eXBlZGVmIHVuc2lnbmVkIGludCBSR0JBMzI7CiB9CiAKIEBpbnRlcmZhY2UgRE9NTm9kZSAo
V2ViQ29yZUludGVybmFsKQogKyAoRE9NTm9kZSAqKV9ub2RlV2l0aDooV2ViQ29yZTo6Tm9kZSAq
KWltcGw7CiAtIChXZWJDb3JlOjpOb2RlICopX25vZGU7CistIChOU0FycmF5ICopY2hpbGROb2Rl
c0FycmF5OwogQGVuZAogCiBAaW50ZXJmYWNlIERPTU5vZGVMaXN0IChXZWJDb3JlSW50ZXJuYWwp
CiArIChET01Ob2RlTGlzdCAqKV9ub2RlTGlzdFdpdGg6KFdlYkNvcmU6Ok5vZGVMaXN0ICopaW1w
bDsKKy0gKHVuc2lnbmVkKWNvdW50T2ZJdGVtczsKKy0gKGlkKW9iamVjdEluSXRlbXNBdEluZGV4
Oih1bnNpZ25lZClpbmRleDsKK0BlbmQKKworQGludGVyZmFjZSBET01OYW1lZE5vZGVNYXAgKFdl
YkNvcmVJbnRlcm5hbCkKKysgKERPTU5hbWVkTm9kZU1hcCAqKV9uYW1lZE5vZGVNYXBXaXRoOihX
ZWJDb3JlOjpOYW1lZE5vZGVNYXAgKilpbXBsOwogQGVuZAogCiBAaW50ZXJmYWNlIERPTUVsZW1l
bnQgKFdlYkNvcmVJbnRlcm5hbCkKQEAgLTg1LDIxICsxMDMsNTcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogLSAoaWQpX2luaXQ7CiBAZW5kCiAKLUBpbnRlcmZhY2UgRE9NQ1NTU3R5bGVEZWNsYXJh
dGlvbiAoV2ViQ29yZUludGVybmFsKQotKyAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKV9zdHls
ZURlY2xhcmF0aW9uV2l0aDooV2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbiAqKWltcGw7Ci0t
IChXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9uICopX3N0eWxlRGVjbGFyYXRpb247CitAaW50
ZXJmYWNlIERPTU5vZGVGaWx0ZXIgOiBET01PYmplY3QgPERPTU5vZGVGaWx0ZXI+CisrIChET01O
b2RlRmlsdGVyICopX25vZGVGaWx0ZXJXaXRoOihXZWJDb3JlOjpOb2RlRmlsdGVyICopaW1wbDsK
IEBlbmQKIAogQGludGVyZmFjZSBET01TdHlsZVNoZWV0TGlzdCAoV2ViQ29yZUludGVybmFsKQog
KyAoRE9NU3R5bGVTaGVldExpc3QgKilfc3R5bGVTaGVldExpc3RXaXRoOihXZWJDb3JlOjpTdHls
ZVNoZWV0TGlzdCAqKWltcGw7CiBAZW5kCiAKK0BpbnRlcmZhY2UgRE9NU3R5bGVTaGVldCAoV2Vi
Q29yZUludGVybmFsKQorKyAoRE9NU3R5bGVTaGVldCAqKV9ET01TdHlsZVNoZWV0V2l0aDooV2Vi
Q29yZTo6U3R5bGVTaGVldCAqKWltcGw7CitAZW5kCisKIEBpbnRlcmZhY2UgRE9NQ1NTU3R5bGVT
aGVldCAoV2ViQ29yZUludGVybmFsKQogKyAoRE9NQ1NTU3R5bGVTaGVldCAqKV9DU1NTdHlsZVNo
ZWV0V2l0aDooV2ViQ29yZTo6Q1NTU3R5bGVTaGVldCAqKWltcGw7CiBAZW5kCiAKLUBpbnRlcmZh
Y2UgRE9NTm9kZUZpbHRlciA6IERPTU9iamVjdCA8RE9NTm9kZUZpbHRlcj4KLSsgKERPTU5vZGVG
aWx0ZXIgKilfbm9kZUZpbHRlcldpdGg6KFdlYkNvcmU6Ok5vZGVGaWx0ZXIgKilpbXBsOworQGlu
dGVyZmFjZSBET01NZWRpYUxpc3QgKFdlYkNvcmVJbnRlcm5hbCkKKysgKERPTU1lZGlhTGlzdCAq
KV9tZWRpYUxpc3RXaXRoOihXZWJDb3JlOjpNZWRpYUxpc3QgKilpbXBsOworQGVuZAorCitAaW50
ZXJmYWNlIERPTUNTU1J1bGVMaXN0IChXZWJDb3JlSW50ZXJuYWwpCisrIChET01DU1NSdWxlTGlz
dCAqKV9ydWxlTGlzdFdpdGg6KFdlYkNvcmU6OkNTU1J1bGVMaXN0ICopaW1wbDsKK0BlbmQKKwor
QGludGVyZmFjZSBET01DU1NSdWxlIChXZWJDb3JlSW50ZXJuYWwpCisrIChET01DU1NSdWxlICop
X3J1bGVXaXRoOihXZWJDb3JlOjpDU1NSdWxlICopaW1wbDsKK0BlbmQKKworQGludGVyZmFjZSBE
T01DU1NTdHlsZURlY2xhcmF0aW9uIChXZWJDb3JlSW50ZXJuYWwpCisrIChET01DU1NTdHlsZURl
Y2xhcmF0aW9uICopX3N0eWxlRGVjbGFyYXRpb25XaXRoOihXZWJDb3JlOjpDU1NTdHlsZURlY2xh
cmF0aW9uICopaW1wbDsKKy0gKFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24gKilfc3R5bGVE
ZWNsYXJhdGlvbjsKK0BlbmQKKworQGludGVyZmFjZSBET01DU1NWYWx1ZSAoV2ViQ29yZUludGVy
bmFsKQorKyAoRE9NQ1NTVmFsdWUgKilfdmFsdWVXaXRoOihXZWJDb3JlOjpDU1NWYWx1ZSAqKWlt
cGw7CitAZW5kCisKK0BpbnRlcmZhY2UgRE9NQ1NTUHJpbWl0aXZlVmFsdWUgKFdlYkNvcmVJbnRl
cm5hbCkKKysgKERPTUNTU1ByaW1pdGl2ZVZhbHVlICopX3ZhbHVlV2l0aDooV2ViQ29yZTo6Q1NT
VmFsdWUgKilpbXBsOworQGVuZAorCitAaW50ZXJmYWNlIERPTVJHQkNvbG9yIChXZWJDb3JlSW50
ZXJuYWwpCisrIChET01SR0JDb2xvciAqKV9SR0JDb2xvcldpdGhSR0I6KFdlYkNvcmU6OlJHQkEz
Mil2YWx1ZTsKK0BlbmQKKworQGludGVyZmFjZSBET01SZWN0IChXZWJDb3JlSW50ZXJuYWwpCisr
IChET01SZWN0ICopX3JlY3RXaXRoOihXZWJDb3JlOjpSZWN0SW1wbCAqKWltcGw7CitAZW5kCisK
K0BpbnRlcmZhY2UgRE9NQ291bnRlciAoV2ViQ29yZUludGVybmFsKQorKyAoRE9NQ291bnRlciAq
KV9jb3VudGVyV2l0aDooV2ViQ29yZTo6Q291bnRlciAqKWltcGw7CiBAZW5kCiAKIC8vIEhlbHBl
ciBmdW5jdGlvbnMgZm9yIERPTSB3cmFwcGVycyBhbmQgZ2x1aW5nIHRvIE9iamVjdGl2ZS1DCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NVXRpbGl0eS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NVXRpbGl0eS5tbQkocmV2aXNpb24gMTQ0MTYpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NVXRpbGl0eS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSmFtZXMgRy4gU3Bl
dGggKHNwZXRoQGVuZC5jb20pCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2
LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbXBvcnQgImtqc19kb20uaCIKICNp
bXBvcnQgIk5vZGUuaCIKKyNpbXBvcnQgImtqc19jc3MuaCIKIAogI2ltcG9ydCAiRE9NSW50ZXJu
YWwuaCIKIApAQCAtMzQsMjIgKzM2LDg3IEBACiAvLyBUaGlzIGZpbGUgbWFrZXMgdXNlIG9mIHRo
ZSBPYmpDIERPTSBBUEksIGFuZCB0aGUgQysrIERPTSBBUEksIHNvIHdlIG5lZWQgdG8gYmUgY2Fy
ZWZ1bCBhYm91dCB3aGF0CiAvLyBoZWFkZXJzIGFyZSBpbmNsdWRlZCB0byBhdm9pZCBuYW1pbmcg
Y29uZmxpY3RzLgogCi1zdGF0aWMgaW5saW5lIGlkIGNyZWF0ZU9iakNET01Ob2RlKFdlYkNvcmU6
Ok5vZGUgKm5vZGUpCitzdGF0aWMgaW5saW5lIGlkIGNyZWF0ZU9iakNET01Ob2RlKFdlYkNvcmU6
Ok5vZGUgKmltcGwpCiB7Ci0gICAgcmV0dXJuIFtET01Ob2RlIF9ub2RlV2l0aDpub2RlXTsKKyAg
ICByZXR1cm4gW0RPTU5vZGUgX25vZGVXaXRoOmltcGxdOworfQorCitzdGF0aWMgaW5saW5lIGlk
IGNyZWF0ZU9iakNET01Ob2RlTGlzdChXZWJDb3JlOjpOb2RlTGlzdCAqaW1wbCkKK3sKKyAgICBy
ZXR1cm4gW0RPTU5vZGVMaXN0IF9ub2RlTGlzdFdpdGg6aW1wbF07Cit9CisKK3N0YXRpYyBpbmxp
bmUgaWQgY3JlYXRlT2JqQ0RPTU5hbWVkTm9kZU1hcChXZWJDb3JlOjpOYW1lZE5vZGVNYXAgKmlt
cGwpCit7CisgICAgcmV0dXJuIFtET01OYW1lZE5vZGVNYXAgX25hbWVkTm9kZU1hcFdpdGg6aW1w
bF07Cit9CisKK3N0YXRpYyBpbmxpbmUgaWQgY3JlYXRlT2JqQ0RPTVN0eWxlU2hlZXQoV2ViQ29y
ZTo6U3R5bGVTaGVldCAqaW1wbCkKK3sKKyAgICByZXR1cm4gW0RPTVN0eWxlU2hlZXQgX0RPTVN0
eWxlU2hlZXRXaXRoOmltcGxdOworfQorCitzdGF0aWMgaW5saW5lIGlkIGNyZWF0ZU9iakNET01T
dHlsZVNoZWV0TGlzdChXZWJDb3JlOjpTdHlsZVNoZWV0TGlzdCAqaW1wbCkKK3sKKyAgICByZXR1
cm4gW0RPTVN0eWxlU2hlZXRMaXN0IF9zdHlsZVNoZWV0TGlzdFdpdGg6aW1wbF07Cit9CisKK3N0
YXRpYyBpbmxpbmUgaWQgY3JlYXRlT2JqQ0RPTUNTU1J1bGUoV2ViQ29yZTo6Q1NTUnVsZSAqaW1w
bCkKK3sKKyAgICByZXR1cm4gW0RPTUNTU1J1bGUgX3J1bGVXaXRoOmltcGxdOworfQorCitzdGF0
aWMgaW5saW5lIGlkIGNyZWF0ZU9iakNET01DU1NSdWxlTGlzdChXZWJDb3JlOjpDU1NSdWxlTGlz
dCAqaW1wbCkKK3sKKyAgICByZXR1cm4gW0RPTUNTU1J1bGVMaXN0IF9ydWxlTGlzdFdpdGg6aW1w
bF07Cit9CisKK3N0YXRpYyBpbmxpbmUgaWQgY3JlYXRlT2JqQ0RPTUNTU1N0eWxlRGVjbGFyYXRp
b24oV2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbiAqaW1wbCkKK3sKKyAgICByZXR1cm4gW0RP
TUNTU1N0eWxlRGVjbGFyYXRpb24gX3N0eWxlRGVjbGFyYXRpb25XaXRoOmltcGxdOworfQorCitz
dGF0aWMgaW5saW5lIGlkIGNyZWF0ZU9iakNET01NZWRpYUxpc3QoV2ViQ29yZTo6TWVkaWFMaXN0
ICppbXBsKQoreworICAgIHJldHVybiBbRE9NTWVkaWFMaXN0IF9tZWRpYUxpc3RXaXRoOmltcGxd
OworfQorCitzdGF0aWMgaW5saW5lIGlkIGNyZWF0ZU9iakNET01DU1NWYWx1ZShXZWJDb3JlOjpD
U1NWYWx1ZSAqaW1wbCkKK3sKKyAgICByZXR1cm4gW0RPTUNTU1ZhbHVlIF92YWx1ZVdpdGg6aW1w
bF07CiB9CiAKIG5hbWVzcGFjZSBLSlMgewogCiB2b2lkICpTY3JpcHRJbnRlcnByZXRlcjo6Y3Jl
YXRlT2JqY0luc3RhbmNlRm9yVmFsdWUoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqdmFsdWUs
IGNvbnN0IEJpbmRpbmdzOjpSb290T2JqZWN0ICpvcmlnaW4sIGNvbnN0IEJpbmRpbmdzOjpSb290
T2JqZWN0ICpjdXJyZW50KQogewotICAgIGlmICh2YWx1ZS0+aW5oZXJpdHMoJkRPTU5vZGU6Omlu
Zm8pKSB7Ci0gICAgICAgIERPTU5vZGUgKmltcCA9IHN0YXRpY19jYXN0PERPTU5vZGUgKj4odmFs
dWUpOwotICAgICAgICBpZCBuZXdPYmpjTm9kZSA9IGNyZWF0ZU9iakNET01Ob2RlKGltcC0+aW1w
bCgpKTsKLSAgICAgICAgW25ld09iamNOb2RlIF9pbml0aWFsaXplV2l0aE9iamVjdEltcDppbXAg
b3JpZ2luRXhlY3V0aW9uQ29udGV4dDpvcmlnaW4gZXhlY3V0aW9uQ29udGV4dDpjdXJyZW50XTsK
LSAgICAgICAgcmV0dXJuIG5ld09iamNOb2RlOwotICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICBp
ZCBuZXdPYmogPSBuaWw7CisgICAgCisgICAgaWYgKHZhbHVlLT5pbmhlcml0cygmRE9NTm9kZTo6
aW5mbykpCisgICAgICAgIG5ld09iaiA9IGNyZWF0ZU9iakNET01Ob2RlKHN0YXRpY19jYXN0PERP
TU5vZGUgKj4odmFsdWUpLT5pbXBsKCkpOworICAgIGVsc2UgaWYgKHZhbHVlLT5pbmhlcml0cygm
RE9NTm9kZUxpc3Q6OmluZm8pKQorICAgICAgICBuZXdPYmogPSBjcmVhdGVPYmpDRE9NTm9kZUxp
c3Qoc3RhdGljX2Nhc3Q8RE9NTm9kZUxpc3QgKj4odmFsdWUpLT5pbXBsKCkpOworICAgIGVsc2Ug
aWYgKHZhbHVlLT5pbmhlcml0cygmRE9NTmFtZWROb2RlTWFwOjppbmZvKSkKKyAgICAgICAgbmV3
T2JqID0gY3JlYXRlT2JqQ0RPTU5hbWVkTm9kZU1hcChzdGF0aWNfY2FzdDxET01OYW1lZE5vZGVN
YXAgKj4odmFsdWUpLT5pbXBsKCkpOworICAgIGVsc2UgaWYgKHZhbHVlLT5pbmhlcml0cygmRE9N
U3R5bGVTaGVldDo6aW5mbykpCisgICAgICAgIG5ld09iaiA9IGNyZWF0ZU9iakNET01TdHlsZVNo
ZWV0KHN0YXRpY19jYXN0PERPTVN0eWxlU2hlZXQgKj4odmFsdWUpLT5pbXBsKCkpOworICAgIGVs
c2UgaWYgKHZhbHVlLT5pbmhlcml0cygmRE9NU3R5bGVTaGVldExpc3Q6OmluZm8pKQorICAgICAg
ICBuZXdPYmogPSBjcmVhdGVPYmpDRE9NU3R5bGVTaGVldExpc3Qoc3RhdGljX2Nhc3Q8RE9NU3R5
bGVTaGVldExpc3QgKj4odmFsdWUpLT5pbXBsKCkpOworICAgIGVsc2UgaWYgKHZhbHVlLT5pbmhl
cml0cygmRE9NQ1NTUnVsZTo6aW5mbykpCisgICAgICAgIG5ld09iaiA9IGNyZWF0ZU9iakNET01D
U1NSdWxlKHN0YXRpY19jYXN0PERPTUNTU1J1bGUgKj4odmFsdWUpLT5pbXBsKCkpOworICAgIGVs
c2UgaWYgKHZhbHVlLT5pbmhlcml0cygmRE9NQ1NTUnVsZUxpc3Q6OmluZm8pKQorICAgICAgICBu
ZXdPYmogPSBjcmVhdGVPYmpDRE9NQ1NTUnVsZUxpc3Qoc3RhdGljX2Nhc3Q8RE9NQ1NTUnVsZUxp
c3QgKj4odmFsdWUpLT5pbXBsKCkpOworICAgIGVsc2UgaWYgKHZhbHVlLT5pbmhlcml0cygmRE9N
Q1NTU3R5bGVEZWNsYXJhdGlvbjo6aW5mbykpCisgICAgICAgIG5ld09iaiA9IGNyZWF0ZU9iakNE
T01DU1NTdHlsZURlY2xhcmF0aW9uKHN0YXRpY19jYXN0PERPTUNTU1N0eWxlRGVjbGFyYXRpb24g
Kj4odmFsdWUpLT5pbXBsKCkpOworICAgIGVsc2UgaWYgKHZhbHVlLT5pbmhlcml0cygmRE9NTWVk
aWFMaXN0OjppbmZvKSkKKyAgICAgICAgbmV3T2JqID0gY3JlYXRlT2JqQ0RPTU1lZGlhTGlzdChz
dGF0aWNfY2FzdDxET01NZWRpYUxpc3QgKj4odmFsdWUpLT5pbXBsKCkpOworICAgIGVsc2UgaWYg
KHZhbHVlLT5pbmhlcml0cygmRE9NQ1NTVmFsdWU6OmluZm8pKQorICAgICAgICBuZXdPYmogPSBj
cmVhdGVPYmpDRE9NQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8RE9NQ1NTVmFsdWUgKj4odmFsdWUpLT5p
bXBsKCkpOworICAgIAorICAgIGlmIChuZXdPYmopCisgICAgICAgIFtuZXdPYmogX2luaXRpYWxp
emVXaXRoT2JqZWN0SW1wOnZhbHVlIG9yaWdpbkV4ZWN1dGlvbkNvbnRleHQ6b3JpZ2luIGV4ZWN1
dGlvbkNvbnRleHQ6Y3VycmVudF07CisgICAgCisgICAgcmV0dXJuIG5ld09iajsKIH0KIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8505</attachid>
            <date>2006-05-23 17:21:48 -0700</date>
            <delta_ts>2006-06-23 23:43:26 -0700</delta_ts>
            <desc>much cleaner DOMUtility.mm in this one</desc>
            <filename>p+</filename>
            <type>text/plain</type>
            <size>19364</size>
            <attacher name="James G. Speth">speth</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NTI4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMDYtMDUtMTUgIEphbWVzIEcu
IFNwZXRoICA8c3BldGhAZW5kLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKyAgICAgICAgCisgICAgICAgIEFsbG93IGtleS12YWx1ZSBjb2RpbmcgYWNjZXNzb3Jz
IHRvIGdldCBhIERPTUNTU1J1bGVMaXN0IG9iamVjdCBmcm9tIGEgRE9NQ1NTU3R5bGVTaGVldAor
ICAgICAgICBzZWU6IGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODMzMQorICAgICAgICAKKyAgICAgICAgVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IHdoZW4g
dmFsdWVGb3JLZXk6IGlzIGNhbGxlZCwgdGhlIERPTUNTU1N0eWxlU2hlZXQgaGFzIG5vIGluaXRp
YWxpemVkCisgICAgICAgIGV4ZWN1dGlvbiBjb250ZXh0IGFuZCBjYW5ub3QgY29udGludWUsIHNv
IGhhZCBwcmV2aW91c2x5IHJldHVybmVkIG5pbC4gIFRoaXMgY2hhbmdlIGNhdXNlcworICAgICAg
ICB2YWx1ZUZvcktleTogdG8gY2FsbCB0aGUgc3VwZXJjbGFzcyBpbXBsZW1lbnRhdGlvbiB3aGVu
IHRoZSBvYmplY3QgaGFzIG5vIGV4ZWN1dGlvbiBjb250ZXh0LgorICAgICAgICBJbiB0aGlzIGNh
c2UsIGl0IGVuZHMgdXAgaW52b2tpbmcgdGhlIGNzc1J1bGVzIHNlbGVjdG9yIG9uIHRoZSBzdHls
ZVNoZWV0IGFuZCBnZXR0aW5nIHRoZSBydWxlIGxpc3QuCisgICAgICAgIAorICAgICAgICBUaGlz
IGlzIGNsZWFybHkgYSB3b3JrYXJvdW5kIHVudGlsIGEgYmV0dGVyIHNvbHV0aW9uIGlzIGZvdW5k
LgorICAgICAgICAKKyAgICAgICAgQWxzbyBpbXByb3ZlZCBLVkMgYWNjZXNzIHRvIGFycmF5LWxp
a2Ugb2JqZWN0cyBpbiB0aGUgRE9NIGJ5IGFkZGluZyBjb3VudE9mSXRlbXMgYW5kCisgICAgICAg
IG9iamVjdEluSXRlbXNBdEluZGV4OiBhY2Nlc3NvcnMgdG8gV2ViU2NyaXB0T2JqZWN0LgorICAg
ICAgICAKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbToKKyAgICAg
ICAgKC1bV2ViU2NyaXB0T2JqZWN0IHZhbHVlRm9yS2V5Ol0pOgorCiAyMDA2LTA1LTIyICBUaW1v
dGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBF
cmljLCBLZXZpbiBhbmQgR2VvZmYuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpj
L1dlYlNjcmlwdE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5n
cy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkocmV2aXNpb24gMTQ1MjgpCisrKyBKYXZhU2NyaXB0
Q29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSmFtZXMgRy4g
U3BldGggKHNwZXRoQGVuZC5jb20pCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI2NSwxMSArMjY2LDE2IEBAIHN0YXRpYyBMaXN0IGxpc3RGcm9tTlNBcnJheShFeGVjU3RhdGUg
KmUKIAogLSAoaWQpdmFsdWVGb3JLZXk6KE5TU3RyaW5nICopa2V5CiB7CisgICAgLy8gZmlyc3Qg
Y2hlY2sgdGhhdCBhY2Nlc3NpbmcgdGhlIG9iamVjdCBpcyBwb3NzaWJsZSBhbmQgYWxsb3dlZAor
ICAgIC8vIGlmIG5vdCwgaGFuZCB0aGlzIHJlcXVlc3QgdG8gdGhlIHN1cGVyY2xhc3MgZm9yIGZ1
cnRoZXIgcHJvY2Vzc2luZworICAgIC8vICh0aGlzIHdvcmtzIGFyb3VuZCB0aGUgcHJvYmxlbSBv
ZiBzb21lIERPTU9iamVjdHMgbm90IGhhdmluZyBhbiBleGVjdXRpb24gY29udGV4dCwKKyAgICAv
LyBmb3IgaW5zdGFuY2UsIGF0dGVtcHRpbmcgdG8gcmV0cmlldmUgYSBET01DU1NSdWxlTGlzdCBm
cm9tIGEgRE9NQ1NTU3R5bGVTaGVldCkKKyAgICAKICAgICBpZiAoIVtzZWxmIF9leGVjdXRpb25D
b250ZXh0XSkKLSAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgcmV0dXJuIFtzdXBlciB2YWx1
ZUZvcktleTprZXldOwogICAgICAgICAKICAgICBpZiAoIVtzZWxmIF9pc1NhZmVTY3JpcHRdKQot
CXJldHVybiBuaWw7CisgICAgICAgIHJldHVybiBbc3VwZXIgdmFsdWVGb3JLZXk6a2V5XTsKIAog
ICAgIEV4ZWNTdGF0ZSAqZXhlYyA9IFtzZWxmIF9leGVjdXRpb25Db250ZXh0XS0+aW50ZXJwcmV0
ZXIoKS0+Z2xvYmFsRXhlYygpOwogCkBAIC0yODQsNyArMjkwLDcgQEAgc3RhdGljIExpc3QgbGlz
dEZyb21OU0FycmF5KEV4ZWNTdGF0ZSAqZQogCiAgICAgaWQgcmVzdWx0T2JqID0gW1dlYlNjcmlw
dE9iamVjdCBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6cmVzdWx0IG9yaWdpbkV4ZWN1dGlvbkNv
bnRleHQ6W3NlbGYgX29yaWdpbkV4ZWN1dGlvbkNvbnRleHRdIGV4ZWN1dGlvbkNvbnRleHQ6W3Nl
bGYgX2V4ZWN1dGlvbkNvbnRleHRdXTsKICAgICBpZiAoW3Jlc3VsdE9iaiBpc0tpbmRPZkNsYXNz
OltXZWJVbmRlZmluZWQgY2xhc3NdXSkKLSAgICAgICAgcmVzdWx0T2JqID0gW3N1cGVyIHZhbHVl
Rm9yS2V5OmtleV07ICAgIC8vIGVuc3VyZSBjb3JyZWN0IG5vdC1hcHBsaWNhYmxlIGtleSBiZWhh
dmlvcgorICAgICAgICByZXN1bHRPYmogPSBbc3VwZXIgdmFsdWVGb3JLZXk6a2V5XTsgICAgLy8g
ZW5zdXJlIGNvcnJlY3QgYmVoYXZpb3IgZm9yICJOb3QgQXBwbGljYWJsZSIga2V5cwogCiAgICAg
X2RpZEV4ZWN1dGUoc2VsZik7CiAgICAgCkBAIC00MjYsMTQgKzQzMiwyNyBAQCBzdGF0aWMgTGlz
dCBsaXN0RnJvbU5TQXJyYXkoRXhlY1N0YXRlICplCiAKIEBpbnRlcmZhY2UgV2ViU2NyaXB0T2Jq
ZWN0IChXZWJLaXRDb2NvYUJpbmRpbmdzKQogCi0tICh1bnNpZ25lZCBpbnQpY291bnQ7CistICh1
bnNpZ25lZCBpbnQpY291bnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOU0FycmF5IGlu
dGVyZmFjZSBmb3IgaW1tdXRhYmxlIGFycmF5cwogLSAoaWQpb2JqZWN0QXRJbmRleDoodW5zaWdu
ZWQgaW50KWluZGV4OwogCistICh1bnNpZ25lZCljb3VudE9mSXRlbXM7ICAgICAgICAgICAgICAg
ICAgICAgICAvLyB0aGVzZSBhbGxvdyBiaW5kaW5nIHRvIHRoZSBrZXkgIml0ZW0iLCBhbmQgd2ls
bAorLSAoaWQpb2JqZWN0SW5JdGVtc0F0SW5kZXg6KHVuc2lnbmVkKWluZGV4OyAgICAgLy8gYXV0
b21hdGljYWxseSBnZW5lcmF0ZSBhbiBOU0tleVZhbHVlQXJyYXkgcHJveHkKKwogQGVuZAogCiBA
aW1wbGVtZW50YXRpb24gV2ViU2NyaXB0T2JqZWN0IChXZWJLaXRDb2NvYUJpbmRpbmdzKQogCi0t
ICh1bnNpZ25lZCBpbnQpY291bnQKKy0gKHVuc2lnbmVkKWNvdW50Cit7CisgICAgcmV0dXJuIFtz
ZWxmIGNvdW50T2ZJdGVtc107Cit9CisKKy0gKGlkKW9iamVjdEF0SW5kZXg6KHVuc2lnbmVkKWlu
ZGV4Cit7CisgICAgcmV0dXJuIFtzZWxmIG9iamVjdEluSXRlbXNBdEluZGV4OmluZGV4XTsKK30K
KworLSAodW5zaWduZWQpY291bnRPZkl0ZW1zCiB7CiAgICAgaWQgbGVuZ3RoID0gW3NlbGYgdmFs
dWVGb3JLZXk6QCJsZW5ndGgiXTsKICAgICBpZiAoW2xlbmd0aCByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKGludFZhbHVlKV0pCkBAIC00NDIsNyArNDYxLDcgQEAgc3RhdGljIExpc3QgbGlz
dEZyb21OU0FycmF5KEV4ZWNTdGF0ZSAqZQogICAgICAgICByZXR1cm4gMDsKIH0KIAotLSAoaWQp
b2JqZWN0QXRJbmRleDoodW5zaWduZWQgaW50KWluZGV4CistIChpZClvYmplY3RJbkl0ZW1zQXRJ
bmRleDoodW5zaWduZWQpaW5kZXgKIHsKICAgICByZXR1cm4gW3NlbGYgd2ViU2NyaXB0VmFsdWVB
dEluZGV4OmluZGV4XTsKIH0KSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDQxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAgQEAKKzIwMDYtMDUtMTUgIEphbWVzIEcuIFNw
ZXRoICA8c3BldGhAZW5kLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRlZCBmdW5jdGlvbnMgdG8gcHJvcGVybHkgd3JhcCBzb21lIG9iamVj
dHMgd2hlbiB0aGV5IGFyZSByZXR1cm5lZCB0byBhbiBPYmplY3RpdmUtQyBjYWxsZXIKKyAgICAg
ICAgZnJvbSBKYXZhU2NyaXB0LiAgUHJldmlvdXNseSB3aGVuIHRoZXNlIG9iamVjdHMgY3Jvc3Nl
ZCB0aGUgYnJpZGdlIHRvIE9iai1DIHRoZXkgd291bGQgYXBwZWFyIGFzCisgICAgICAgIGdlbmVy
aWMgV2ViU2NyaXB0T2JqZWN0IGluc3RhbmNlcy4gIEFkZGVkIGluZGV4ZWQgYXJyYXkgYWNjZXNz
b3IgZm9yIGtleS12YWx1ZSBjb2RpbmcuCisgICAgICAgIAorICAgICAgICBBbHNvIGFkZGVkIEtW
TyBtZXNzYWdlcyB0byBOb2RlIHNvIHRoYXQgb2JzZXJ2ZXJzIG9mIHRoZSBub2RlJ3MgY2hpbGRO
b2RlcyB3aWxsIGJlIGluZm9ybWVkCisgICAgICAgIG9mIGNoYW5nZXMuICBOb2RlIG5vdyBoYXMg
dGhlIG1ldGhvZHMgd2lsbENoYW5nZVZhbHVlRm9yS2V5OiBhbmQgZGlkQ2hhbmdlVmFsdWVGb3JL
ZXk6IHdoaWNoCisgICAgICAgIGFyZSBkZWZpbmVkIGluIERPTS5tbS4gIFRoZSBpbXBsZW1lbnRh
dGlvbiBzaW1wbHkgY2FsbHMgdGhlIGNvcnJlc3BvbmRpbmcgbWV0aG9kcyBvbiB0aGUKKyAgICAg
ICAgT2JqZWN0aXZlLUMgRE9NTm9kZSB3cmFwcGVyLgorICAgICAgICAKKyAgICAgICAgaHR0cDov
L2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD04MzMxCisKKyAgICAgICAg
KiBkb20vTm9kZS5oOiAgICAgICAgICAgICAgICAgICBhZGRlZCB3aWxsL2RpZENoYW5nZVZhbHVl
Rm9yS2V5OgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDogICAgICAgICAgICAgICAgIGNhbGxzIEtW
TyBob29rcyBpbiBub3RpZnlMb2NhbE5vZGVMaXN0c0NoaWxkcmVuQ2hhbmdlZAorICAgICAgICAq
IGJpbmRpbmdzL29iamMvRE9NLm1tOiAgICAgICAgIG1vdmVkIGludGVybmFsIGludGVyZmFjZXMg
ZnJvbSBoZXJlIHRvIERPTUludGVybmFsLmgKKyAgICAgICAgKC1bRE9NRG9jdW1lbnRUeXBlIDpd
KToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTUNTUy5tbTogICAgICBtb3ZlZCBpbnRlcm5h
bCBpbnRlcmZhY2VzIGZyb20gaGVyZSB0byBET01JbnRlcm5hbC5oCisgICAgICAgICogYmluZGlu
Z3Mvb2JqYy9ET01JbnRlcm5hbC5oOiAgbW92ZWQgc2V2ZXJhbCBpbnRlcm5hbCBpbnRlcmZhY2Vz
IGhlcmUKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTVV0aWxpdHkubW06ICBhZGRlZCBzdXBw
b3J0IGZ1bmN0aW9ucyBmb3IgdGhlIHdyYXBwaW5nCisgICAgICAgIChjcmVhdGVPYmpDRE9NTm9k
ZSk6CisgICAgICAgIChjcmVhdGVPYmpDRE9NTm9kZUxpc3QpOgorICAgICAgICAoY3JlYXRlT2Jq
Q0RPTU5hbWVkTm9kZU1hcCk6CisgICAgICAgIChjcmVhdGVPYmpDRE9NU3R5bGVTaGVldCk6Cisg
ICAgICAgIChjcmVhdGVPYmpDRE9NU3R5bGVTaGVldExpc3QpOgorICAgICAgICAoY3JlYXRlT2Jq
Q0RPTUNTU1J1bGUpOgorICAgICAgICAoY3JlYXRlT2JqQ0RPTUNTU1J1bGVMaXN0KToKKyAgICAg
ICAgKGNyZWF0ZU9iakNET01DU1NTdHlsZURlY2xhcmF0aW9uKToKKyAgICAgICAgKGNyZWF0ZU9i
akNET01NZWRpYUxpc3QpOgorICAgICAgICAoY3JlYXRlT2JqQ0RPTUNTU1ZhbHVlKToKKyAgICAg
ICAgKGNyZWF0ZU9iakNET01SR0JDb2xvcik6CisgICAgICAgIChjcmVhdGVPYmpDRE9NUmVjdCk6
CisgICAgICAgIChjcmVhdGVPYmpDRE9NQ291bnRlcik6CisgICAgICAgIChLSlM6OlNjcmlwdElu
dGVycHJldGVyOjpjcmVhdGVPYmpjSW5zdGFuY2VGb3JWYWx1ZSk6CisKIDIwMDYtMDUtMTYgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEh5YXR0
LgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCShyZXZpc2lvbiAxNDQxNikKKysrIFdlYkNvcmUvYmlu
ZGluZ3Mvb2JqYy9ET00ubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEphbWVzIEcuIFNwZXRoIChz
cGV0aEBlbmQuY29tKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05OSwxMCAr
MTAwLDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIC0gKERPTUltcGxl
bWVudGF0aW9uRnJvbnQgKilfRE9NSW1wbGVtZW50YXRpb247CiBAZW5kCiAKLUBpbnRlcmZhY2Ug
RE9NTmFtZWROb2RlTWFwIChXZWJDb3JlSW50ZXJuYWwpCi0rIChET01OYW1lZE5vZGVNYXAgKilf
bmFtZWROb2RlTWFwV2l0aDooTmFtZWROb2RlTWFwICopaW1wbDsKLUBlbmQKLQogY2xhc3MgT2Jq
Q0V2ZW50TGlzdGVuZXIgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIE9iakNFdmVudExpc3RlbmVyICpmaW5kKGlkIDxET01FdmVudExpc3RlbmVyPik7CkBAIC01
NDksNiArNTQ2LDI2IEBAIHN0YXRpYyBDbGFzcyBlbGVtZW50Q2xhc3MoY29uc3QgQXRvbWljU3QK
ICAgICByZXR1cm4gb2JqY0NsYXNzOwogfQogCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQg
Tm9kZTo6d2lsbENoYW5nZVZhbHVlRm9yS2V5KGNvbnN0IGNoYXIgKmtleSkKK3sKKyAgICBET01O
b2RlICpjYWNoZWROb2RlOworICAgIGNhY2hlZE5vZGUgPSBnZXRET01XcmFwcGVyKHRoaXMpOwor
ICAgIGlmIChjYWNoZWROb2RlKQorICAgICAgICBbY2FjaGVkTm9kZSB3aWxsQ2hhbmdlVmFsdWVG
b3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmtleV1dOworfQorCit2b2lkIE5v
ZGU6OmRpZENoYW5nZVZhbHVlRm9yS2V5KGNvbnN0IGNoYXIgKmtleSkKK3sKKyAgICBET01Ob2Rl
ICpjYWNoZWROb2RlOworICAgIGNhY2hlZE5vZGUgPSBnZXRET01XcmFwcGVyKHRoaXMpOworICAg
IGlmIChjYWNoZWROb2RlKQorICAgICAgICBbY2FjaGVkTm9kZSBkaWRDaGFuZ2VWYWx1ZUZvcktl
eTpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6a2V5XV07Cit9CisKK30KKwogQGltcGxl
bWVudGF0aW9uIERPTU5vZGUgKFdlYkNvcmVJbnRlcm5hbCkKIAogLSAoaWQpX2luaXRXaXRoTm9k
ZTooTm9kZSAqKWltcGwKQEAgLTY0Myw2ICs2NjAsMTEgQEAgc3RhdGljIENsYXNzIGVsZW1lbnRD
bGFzcyhjb25zdCBBdG9taWNTdAogICAgIHJldHVybiAwOwogfQogCistIChOU0FycmF5ICopY2hp
bGROb2Rlc0FycmF5Cit7CisgICAgcmV0dXJuIFtbc2VsZiBjaGlsZE5vZGVzXSB2YWx1ZUZvcktl
eTpAIml0ZW1zIl07Cit9CisKIEBlbmQKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KQEAgLTc2Niw2ICs3ODgsMTYgQEAgc3RhdGljIENsYXNzIGVsZW1lbnRDbGFzcyhjb25z
dCBBdG9taWNTdAogICAgIHJldHVybiBbW1tzZWxmIGFsbG9jXSBfaW5pdFdpdGhOYW1lZE5vZGVN
YXA6aW1wbF0gYXV0b3JlbGVhc2VdOwogfQogCistICh1bnNpZ25lZCljb3VudE9mSXRlbXMKK3sK
KyAgICByZXR1cm4gW3NlbGYgbGVuZ3RoXTsKK30KKworLSAoaWQpb2JqZWN0SW5JdGVtc0F0SW5k
ZXg6KHVuc2lnbmVkKWluZGV4Cit7CisgICAgcmV0dXJuIFtzZWxmIGl0ZW06aW5kZXhdOworfQor
CiBAZW5kCiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04MzIsNiAr
ODY0LDE2IEBAIHN0YXRpYyBDbGFzcyBlbGVtZW50Q2xhc3MoY29uc3QgQXRvbWljU3QKICAgICBy
ZXR1cm4gW1tbc2VsZiBhbGxvY10gX2luaXRXaXRoTm9kZUxpc3Q6aW1wbF0gYXV0b3JlbGVhc2Vd
OwogfQogCistICh1bnNpZ25lZCljb3VudE9mSXRlbXMKK3sKKyAgICByZXR1cm4gW3NlbGYgbGVu
Z3RoXTsKK30KKworLSAoaWQpb2JqZWN0SW5JdGVtc0F0SW5kZXg6KHVuc2lnbmVkKWluZGV4Cit7
CisgICAgcmV0dXJuIFtzZWxmIGl0ZW06aW5kZXhdOworfQorCiBAZW5kCiAKIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9N
Q1NTLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01DU1MubW0JKHJl
dmlzaW9uIDE0NDE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUNTUy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgSmFtZXMgRy4gU3BldGggKHNwZXRoQGVuZC5jb20pCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU1LDQyICs1Niw2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiB0
eXBlZGVmIERPTVdpbmRvdyBBYnN0cmFjdFZpZXc7CiAKLUBpbnRlcmZhY2UgRE9NU3R5bGVTaGVl
dCAoV2ViQ29yZUludGVybmFsKQotKyAoRE9NU3R5bGVTaGVldCAqKV9ET01TdHlsZVNoZWV0V2l0
aDooU3R5bGVTaGVldCAqKWltcGw7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgRE9NTWVkaWFMaXN0IChX
ZWJDb3JlSW50ZXJuYWwpCi0rIChET01NZWRpYUxpc3QgKilfbWVkaWFMaXN0V2l0aDooTWVkaWFM
aXN0ICopaW1wbDsKLUBlbmQKLQotQGludGVyZmFjZSBET01DU1NSdWxlTGlzdCAoV2ViQ29yZUlu
dGVybmFsKQotKyAoRE9NQ1NTUnVsZUxpc3QgKilfcnVsZUxpc3RXaXRoOihDU1NSdWxlTGlzdCAq
KWltcGw7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgRE9NQ1NTUnVsZSAoV2ViQ29yZUludGVybmFsKQot
KyAoRE9NQ1NTUnVsZSAqKV9ydWxlV2l0aDooQ1NTUnVsZSAqKWltcGw7Ci1AZW5kCi0KLUBpbnRl
cmZhY2UgRE9NQ1NTVmFsdWUgKFdlYkNvcmVJbnRlcm5hbCkKLSsgKERPTUNTU1ZhbHVlICopX3Zh
bHVlV2l0aDooQ1NTVmFsdWUgKilpbXBsOwotQGVuZAotCi1AaW50ZXJmYWNlIERPTUNTU1ByaW1p
dGl2ZVZhbHVlIChXZWJDb3JlSW50ZXJuYWwpCi0rIChET01DU1NQcmltaXRpdmVWYWx1ZSAqKV92
YWx1ZVdpdGg6KENTU1ZhbHVlICopaW1wbDsKLUBlbmQKLQotQGludGVyZmFjZSBET01SR0JDb2xv
ciAoV2ViQ29yZUludGVybmFsKQotKyAoRE9NUkdCQ29sb3IgKilfUkdCQ29sb3JXaXRoUkdCOihS
R0JBMzIpdmFsdWU7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgRE9NUmVjdCAoV2ViQ29yZUludGVybmFs
KQotKyAoRE9NUmVjdCAqKV9yZWN0V2l0aDooUmVjdEltcGwgKilpbXBsOwotQGVuZAotCi1AaW50
ZXJmYWNlIERPTUNvdW50ZXIgKFdlYkNvcmVJbnRlcm5hbCkKLSsgKERPTUNvdW50ZXIgKilfY291
bnRlcldpdGg6KENvdW50ZXIgKilpbXBsOwotQGVuZAotCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogLy8gRE9NU3R5bGVTaGVldAogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L29iamMvRE9NSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29iamMv
RE9NSW50ZXJuYWwuaAkocmV2aXNpb24gMTQ0MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL29iamMv
RE9NSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSmFtZXMgRy4gU3BldGggKHNwZXRoQGVuZC5j
b20pCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI3LDEzIEBACiAj
aW1wb3J0ICJET00uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIFJlY3RJbXBs
OworICAgIGNsYXNzIENvdW50ZXI7CisgICAgY2xhc3MgQ1NTVmFsdWU7CisgICAgY2xhc3MgQ1NT
UHJpbWl0aXZlVmFsdWU7CisgICAgY2xhc3MgQ1NTUnVsZTsKKyAgICBjbGFzcyBDU1NSdWxlTGlz
dDsKKyAgICBjbGFzcyBNZWRpYUxpc3Q7CiAgICAgY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsK
ICAgICBjbGFzcyBDU1NTdHlsZVNoZWV0OwogICAgIGNsYXNzIERvY3VtZW50RnJhZ21lbnQ7CkBA
IC0zNiwyMCArNDQsMzAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIE5vZGU7CiAg
ICAgY2xhc3MgTm9kZUl0ZXJhdG9yOwogICAgIGNsYXNzIE5vZGVMaXN0OworICAgIGNsYXNzIE5h
bWVkTm9kZU1hcDsKICAgICBjbGFzcyBSYW5nZTsKKyAgICBjbGFzcyBTdHlsZVNoZWV0OwogICAg
IGNsYXNzIFN0eWxlU2hlZXRMaXN0OwogICAgIGNsYXNzIFRyZWVXYWxrZXI7CiAKICAgICB0eXBl
ZGVmIGludCBFeGNlcHRpb25Db2RlOworICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IFJHQkEzMjsK
IH0KIAogQGludGVyZmFjZSBET01Ob2RlIChXZWJDb3JlSW50ZXJuYWwpCiArIChET01Ob2RlICop
X25vZGVXaXRoOihXZWJDb3JlOjpOb2RlICopaW1wbDsKIC0gKFdlYkNvcmU6Ok5vZGUgKilfbm9k
ZTsKKy0gKE5TQXJyYXkgKiljaGlsZE5vZGVzQXJyYXk7CiBAZW5kCiAKIEBpbnRlcmZhY2UgRE9N
Tm9kZUxpc3QgKFdlYkNvcmVJbnRlcm5hbCkKICsgKERPTU5vZGVMaXN0ICopX25vZGVMaXN0V2l0
aDooV2ViQ29yZTo6Tm9kZUxpc3QgKilpbXBsOworLSAodW5zaWduZWQpY291bnRPZkl0ZW1zOwor
LSAoaWQpb2JqZWN0SW5JdGVtc0F0SW5kZXg6KHVuc2lnbmVkKWluZGV4OworQGVuZAorCitAaW50
ZXJmYWNlIERPTU5hbWVkTm9kZU1hcCAoV2ViQ29yZUludGVybmFsKQorKyAoRE9NTmFtZWROb2Rl
TWFwICopX25hbWVkTm9kZU1hcFdpdGg6KFdlYkNvcmU6Ok5hbWVkTm9kZU1hcCAqKWltcGw7CiBA
ZW5kCiAKIEBpbnRlcmZhY2UgRE9NRWxlbWVudCAoV2ViQ29yZUludGVybmFsKQpAQCAtODUsMjEg
KzEwMyw1NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAtIChpZClfaW5pdDsKIEBlbmQKIAotQGlu
dGVyZmFjZSBET01DU1NTdHlsZURlY2xhcmF0aW9uIChXZWJDb3JlSW50ZXJuYWwpCi0rIChET01D
U1NTdHlsZURlY2xhcmF0aW9uICopX3N0eWxlRGVjbGFyYXRpb25XaXRoOihXZWJDb3JlOjpDU1NT
dHlsZURlY2xhcmF0aW9uICopaW1wbDsKLS0gKFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24g
Kilfc3R5bGVEZWNsYXJhdGlvbjsKK0BpbnRlcmZhY2UgRE9NTm9kZUZpbHRlciA6IERPTU9iamVj
dCA8RE9NTm9kZUZpbHRlcj4KKysgKERPTU5vZGVGaWx0ZXIgKilfbm9kZUZpbHRlcldpdGg6KFdl
YkNvcmU6Ok5vZGVGaWx0ZXIgKilpbXBsOwogQGVuZAogCiBAaW50ZXJmYWNlIERPTVN0eWxlU2hl
ZXRMaXN0IChXZWJDb3JlSW50ZXJuYWwpCiArIChET01TdHlsZVNoZWV0TGlzdCAqKV9zdHlsZVNo
ZWV0TGlzdFdpdGg6KFdlYkNvcmU6OlN0eWxlU2hlZXRMaXN0ICopaW1wbDsKIEBlbmQKIAorQGlu
dGVyZmFjZSBET01TdHlsZVNoZWV0IChXZWJDb3JlSW50ZXJuYWwpCisrIChET01TdHlsZVNoZWV0
ICopX0RPTVN0eWxlU2hlZXRXaXRoOihXZWJDb3JlOjpTdHlsZVNoZWV0ICopaW1wbDsKK0BlbmQK
KwogQGludGVyZmFjZSBET01DU1NTdHlsZVNoZWV0IChXZWJDb3JlSW50ZXJuYWwpCiArIChET01D
U1NTdHlsZVNoZWV0ICopX0NTU1N0eWxlU2hlZXRXaXRoOihXZWJDb3JlOjpDU1NTdHlsZVNoZWV0
ICopaW1wbDsKIEBlbmQKIAotQGludGVyZmFjZSBET01Ob2RlRmlsdGVyIDogRE9NT2JqZWN0IDxE
T01Ob2RlRmlsdGVyPgotKyAoRE9NTm9kZUZpbHRlciAqKV9ub2RlRmlsdGVyV2l0aDooV2ViQ29y
ZTo6Tm9kZUZpbHRlciAqKWltcGw7CitAaW50ZXJmYWNlIERPTU1lZGlhTGlzdCAoV2ViQ29yZUlu
dGVybmFsKQorKyAoRE9NTWVkaWFMaXN0ICopX21lZGlhTGlzdFdpdGg6KFdlYkNvcmU6Ok1lZGlh
TGlzdCAqKWltcGw7CitAZW5kCisKK0BpbnRlcmZhY2UgRE9NQ1NTUnVsZUxpc3QgKFdlYkNvcmVJ
bnRlcm5hbCkKKysgKERPTUNTU1J1bGVMaXN0ICopX3J1bGVMaXN0V2l0aDooV2ViQ29yZTo6Q1NT
UnVsZUxpc3QgKilpbXBsOworQGVuZAorCitAaW50ZXJmYWNlIERPTUNTU1J1bGUgKFdlYkNvcmVJ
bnRlcm5hbCkKKysgKERPTUNTU1J1bGUgKilfcnVsZVdpdGg6KFdlYkNvcmU6OkNTU1J1bGUgKilp
bXBsOworQGVuZAorCitAaW50ZXJmYWNlIERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKFdlYkNvcmVJ
bnRlcm5hbCkKKysgKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfc3R5bGVEZWNsYXJhdGlvbldp
dGg6KFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24gKilpbXBsOworLSAoV2ViQ29yZTo6Q1NT
U3R5bGVEZWNsYXJhdGlvbiAqKV9zdHlsZURlY2xhcmF0aW9uOworQGVuZAorCitAaW50ZXJmYWNl
IERPTUNTU1ZhbHVlIChXZWJDb3JlSW50ZXJuYWwpCisrIChET01DU1NWYWx1ZSAqKV92YWx1ZVdp
dGg6KFdlYkNvcmU6OkNTU1ZhbHVlICopaW1wbDsKK0BlbmQKKworQGludGVyZmFjZSBET01DU1NQ
cmltaXRpdmVWYWx1ZSAoV2ViQ29yZUludGVybmFsKQorKyAoRE9NQ1NTUHJpbWl0aXZlVmFsdWUg
KilfdmFsdWVXaXRoOihXZWJDb3JlOjpDU1NWYWx1ZSAqKWltcGw7CitAZW5kCisKK0BpbnRlcmZh
Y2UgRE9NUkdCQ29sb3IgKFdlYkNvcmVJbnRlcm5hbCkKKysgKERPTVJHQkNvbG9yICopX1JHQkNv
bG9yV2l0aFJHQjooV2ViQ29yZTo6UkdCQTMyKXZhbHVlOworQGVuZAorCitAaW50ZXJmYWNlIERP
TVJlY3QgKFdlYkNvcmVJbnRlcm5hbCkKKysgKERPTVJlY3QgKilfcmVjdFdpdGg6KFdlYkNvcmU6
OlJlY3RJbXBsICopaW1wbDsKK0BlbmQKKworQGludGVyZmFjZSBET01Db3VudGVyIChXZWJDb3Jl
SW50ZXJuYWwpCisrIChET01Db3VudGVyICopX2NvdW50ZXJXaXRoOihXZWJDb3JlOjpDb3VudGVy
ICopaW1wbDsKIEBlbmQKIAogLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgRE9NIHdyYXBwZXJzIGFu
ZCBnbHVpbmcgdG8gT2JqZWN0aXZlLUMKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01V
dGlsaXR5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VdGlsaXR5
Lm1tCShyZXZpc2lvbiAxNDQxNikKKysrIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VdGlsaXR5
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBKYW1lcyBHLiBTcGV0aCAoc3BldGhAZW5kLmNvbSkKICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMzAgKzI3LDQ3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW1wb3J0ICJranNfZG9tLmgiCiAjaW1wb3J0ICJOb2RlLmgiCisjaW1wb3J0ICJranNf
Y3NzLmgiCiAKICNpbXBvcnQgIkRPTUludGVybmFsLmgiCiAKKyNpbXBvcnQgPG9iamMvb2JqYy1y
dW50aW1lLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9XZWJTY3JpcHRPYmplY3RQcml2YXRl
Lmg+CiAKIC8vIFRoaXMgZmlsZSBtYWtlcyB1c2Ugb2YgdGhlIE9iakMgRE9NIEFQSSwgYW5kIHRo
ZSBDKysgRE9NIEFQSSwgc28gd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQKIC8vIGhl
YWRlcnMgYXJlIGluY2x1ZGVkIHRvIGF2b2lkIG5hbWluZyBjb25mbGljdHMuCiAKLXN0YXRpYyBp
bmxpbmUgaWQgY3JlYXRlT2JqQ0RPTU5vZGUoV2ViQ29yZTo6Tm9kZSAqbm9kZSkKLXsKLSAgICBy
ZXR1cm4gW0RPTU5vZGUgX25vZGVXaXRoOm5vZGVdOwotfQotCiBuYW1lc3BhY2UgS0pTIHsKIAog
dm9pZCAqU2NyaXB0SW50ZXJwcmV0ZXI6OmNyZWF0ZU9iamNJbnN0YW5jZUZvclZhbHVlKEV4ZWNT
dGF0ZSAqZXhlYywgSlNPYmplY3QgKnZhbHVlLCBjb25zdCBCaW5kaW5nczo6Um9vdE9iamVjdCAq
b3JpZ2luLCBjb25zdCBCaW5kaW5nczo6Um9vdE9iamVjdCAqY3VycmVudCkKIHsKLSAgICBpZiAo
dmFsdWUtPmluaGVyaXRzKCZET01Ob2RlOjppbmZvKSkgewotICAgICAgICBET01Ob2RlICppbXAg
PSBzdGF0aWNfY2FzdDxET01Ob2RlICo+KHZhbHVlKTsKLSAgICAgICAgaWQgbmV3T2JqY05vZGUg
PSBjcmVhdGVPYmpDRE9NTm9kZShpbXAtPmltcGwoKSk7Ci0gICAgICAgIFtuZXdPYmpjTm9kZSBf
aW5pdGlhbGl6ZVdpdGhPYmplY3RJbXA6aW1wIG9yaWdpbkV4ZWN1dGlvbkNvbnRleHQ6b3JpZ2lu
IGV4ZWN1dGlvbkNvbnRleHQ6Y3VycmVudF07Ci0gICAgICAgIHJldHVybiBuZXdPYmpjTm9kZTsK
LSAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgaWQgbmV3T2JqID0gbmlsOworICAgIAorICAgIGlm
ICh2YWx1ZS0+aW5oZXJpdHMoJkRPTU5vZGU6OmluZm8pKQorICAgICAgICBuZXdPYmogPSBbb2Jq
Y19nZXRDbGFzcygiRE9NTm9kZSIpIF9ub2RlV2l0aDpzdGF0aWNfY2FzdDxET01Ob2RlICo+KHZh
bHVlKS0+aW1wbCgpXTsKKyAgICBlbHNlIGlmICh2YWx1ZS0+aW5oZXJpdHMoJkRPTU5vZGVMaXN0
OjppbmZvKSkKKyAgICAgICAgbmV3T2JqID0gW29iamNfZ2V0Q2xhc3MoIkRPTU5vZGVMaXN0Iikg
X25vZGVMaXN0V2l0aDpzdGF0aWNfY2FzdDxET01Ob2RlTGlzdCAqPih2YWx1ZSktPmltcGwoKV07
CisgICAgZWxzZSBpZiAodmFsdWUtPmluaGVyaXRzKCZET01OYW1lZE5vZGVNYXA6OmluZm8pKQor
ICAgICAgICBuZXdPYmogPSBbb2JqY19nZXRDbGFzcygiRE9NTmFtZWROb2RlTWFwIikgX25hbWVk
Tm9kZU1hcFdpdGg6c3RhdGljX2Nhc3Q8RE9NTmFtZWROb2RlTWFwICo+KHZhbHVlKS0+aW1wbCgp
XTsKKyAgICBlbHNlIGlmICh2YWx1ZS0+aW5oZXJpdHMoJkRPTVN0eWxlU2hlZXQ6OmluZm8pKQor
ICAgICAgICBuZXdPYmogPSBbb2JqY19nZXRDbGFzcygiRE9NU3R5bGVTaGVldCIpIF9ET01TdHls
ZVNoZWV0V2l0aDpzdGF0aWNfY2FzdDxET01TdHlsZVNoZWV0ICo+KHZhbHVlKS0+aW1wbCgpXTsK
KyAgICBlbHNlIGlmICh2YWx1ZS0+aW5oZXJpdHMoJkRPTVN0eWxlU2hlZXRMaXN0OjppbmZvKSkK
KyAgICAgICAgbmV3T2JqID0gW29iamNfZ2V0Q2xhc3MoIkRPTVN0eWxlU2hlZXRMaXN0IikgX3N0
eWxlU2hlZXRMaXN0V2l0aDpzdGF0aWNfY2FzdDxET01TdHlsZVNoZWV0TGlzdCAqPih2YWx1ZSkt
PmltcGwoKV07CisgICAgZWxzZSBpZiAodmFsdWUtPmluaGVyaXRzKCZET01DU1NSdWxlOjppbmZv
KSkKKyAgICAgICAgbmV3T2JqID0gW29iamNfZ2V0Q2xhc3MoIkRPTUNTU1J1bGUiKSBfcnVsZVdp
dGg6c3RhdGljX2Nhc3Q8RE9NQ1NTUnVsZSAqPih2YWx1ZSktPmltcGwoKV07CisgICAgZWxzZSBp
ZiAodmFsdWUtPmluaGVyaXRzKCZET01DU1NSdWxlTGlzdDo6aW5mbykpCisgICAgICAgIG5ld09i
aiA9IFtvYmpjX2dldENsYXNzKCJET01DU1NSdWxlTGlzdCIpIF9ydWxlTGlzdFdpdGg6c3RhdGlj
X2Nhc3Q8RE9NQ1NTUnVsZUxpc3QgKj4odmFsdWUpLT5pbXBsKCldOworICAgIGVsc2UgaWYgKHZh
bHVlLT5pbmhlcml0cygmRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjo6aW5mbykpCisgICAgICAgIG5l
d09iaiA9IFtvYmpjX2dldENsYXNzKCJET01DU1NTdHlsZURlY2xhcmF0aW9uIikgX3N0eWxlRGVj
bGFyYXRpb25XaXRoOnN0YXRpY19jYXN0PERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKj4odmFsdWUp
LT5pbXBsKCldOworICAgIGVsc2UgaWYgKHZhbHVlLT5pbmhlcml0cygmRE9NTWVkaWFMaXN0Ojpp
bmZvKSkKKyAgICAgICAgbmV3T2JqID0gW29iamNfZ2V0Q2xhc3MoIkRPTU1lZGlhTGlzdCIpIF9t
ZWRpYUxpc3RXaXRoOnN0YXRpY19jYXN0PERPTU1lZGlhTGlzdCAqPih2YWx1ZSktPmltcGwoKV07
CisgICAgZWxzZSBpZiAodmFsdWUtPmluaGVyaXRzKCZET01DU1NWYWx1ZTo6aW5mbykpCisgICAg
ICAgIG5ld09iaiA9IFtvYmpjX2dldENsYXNzKCJET01DU1NWYWx1ZSIpIF92YWx1ZVdpdGg6c3Rh
dGljX2Nhc3Q8RE9NQ1NTVmFsdWUgKj4odmFsdWUpLT5pbXBsKCldOworICAgIAorICAgIGlmIChu
ZXdPYmopCisgICAgICAgIFtuZXdPYmogX2luaXRpYWxpemVXaXRoT2JqZWN0SW1wOnZhbHVlIG9y
aWdpbkV4ZWN1dGlvbkNvbnRleHQ6b3JpZ2luIGV4ZWN1dGlvbkNvbnRleHQ6Y3VycmVudF07Cisg
ICAgCisgICAgcmV0dXJuIG5ld09iajsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMTQ0MTYpCisrKyBX
ZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUsNiArNSw3IEBACiAgKiAgICAg
ICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAg
ICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBKYW1lcyBHLiBTcGV0aCAoc3BldGhAZW5kLmNvbSkKICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtNDE3LDYgKzQxOCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG5vdGlmeU5vZGVMaXN0
c0F0dHJpYnV0ZUNoYW5nZWQoKTsKICAgICB2b2lkIG5vdGlmeUxvY2FsTm9kZUxpc3RzQXR0cmli
dXRlQ2hhbmdlZCgpOwogICAgIAorICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2hhbmdlVmFsdWVGb3JL
ZXkoY29uc3QgY2hhciAqa2V5KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVmFsdWVGb3JL
ZXkoY29uc3QgY2hhciAqa2V5KTsKKyAgICAKICAgICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBnZXRF
bGVtZW50c0J5VGFnTmFtZShjb25zdCBTdHJpbmcmKTsKICAgICBQYXNzUmVmUHRyPE5vZGVMaXN0
PiBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25z
dCBTdHJpbmcmIGxvY2FsTmFtZSk7CiAKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAxNDQxNikKKysrIFdlYkNv
cmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01LDYgKzUsNyBAQAogICogICAgICAg
ICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgSmFtZXMgRy4gU3BldGggKHNwZXRoQGVuZC5jb20pCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTQwOSwxMCArNDEwLDE0IEBAIHZvaWQgTm9kZTo6bm90aWZ5TG9jYWxOb2RlTGlzdHND
aGlsZHJlbkMKIHsKICAgICBpZiAoIW1fbm9kZUxpc3RzKQogICAgICAgICByZXR1cm47Ci0KKyAg
ICAKKyAgICB3aWxsQ2hhbmdlVmFsdWVGb3JLZXkoImNoaWxkTm9kZXNBcnJheSIpOworICAgIAog
ICAgIE5vZGVMaXN0U2V0OjppdGVyYXRvciBlbmQgPSBtX25vZGVMaXN0cy0+ZW5kKCk7CiAgICAg
Zm9yIChOb2RlTGlzdFNldDo6aXRlcmF0b3IgaSA9IG1fbm9kZUxpc3RzLT5iZWdpbigpOyBpICE9
IGVuZDsgKytpKQogICAgICAgICAoKmkpLT5yb290Tm9kZUNoaWxkcmVuQ2hhbmdlZCgpOworICAg
IAorICAgIGRpZENoYW5nZVZhbHVlRm9yS2V5KCJjaGlsZE5vZGVzQXJyYXkiKTsKIH0KIAogdm9p
ZCBOb2RlOjpub3RpZnlOb2RlTGlzdHNDaGlsZHJlbkNoYW5nZWQoKQo=
</data>
<flag name="review"
          id="2418"
          type_id="1"
          status="-"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8995</attachid>
            <date>2006-06-23 23:43:26 -0700</date>
            <delta_ts>2006-06-24 07:52:35 -0700</delta_ts>
            <desc>patch addressing this bug only</desc>
            <filename>p2.txt</filename>
            <type>text/plain</type>
            <size>15822</size>
            <attacher name="James G. Speth">speth</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE1MDA0
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMDYtMDYt
MjQgIEphbWVzIEcuIFNwZXRoICA8c3BldGhAZW5kLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEJ1ZyA4MzMxOiBET01Ob2RlTGlz
dHMgcmV0dXJuZWQgdG8gT2JqZWN0aXZlLUMgYXJlIG5vdCBwcm9wZXJseSB3cmFwcGVkCisgICAg
ICAgIGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODMzMQor
ICAgICAgICAKKyAgICAgICAgRE9NTm9kZXMgd2VyZSB0aGUgb25seSBvYmplY3RzIGhhbmRsZWQg
YnkgY3JlYXRlT2JqY0luc3RhbmNlRm9yVmFsdWUuCisgICAgICAgIG5vdyBpdCBoYW5kbGVzIGFs
bCBvZiB0aGVzZTogRE9NTm9kZSwgRE9NTm9kZUxpc3QsIERPTU5hbWVkTm9kZU1hcCwgRE9NU3R5
bGVTaGVldExpc3QsCisgICAgICAgIERPTVN0eWxlU2hlZXQsIERPTU1lZGlhTGlzdCwgRE9NQ1NT
UnVsZUxpc3QsIERPTUNTU1J1bGUsIERPTUNTU1N0eWxlRGVjbGFyYXRpb24sIGFuZCBET01DU1NW
YWx1ZQorICAgICAgICAKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6IGFkZGVkIGZpbGUgRE9NQ1NTSW50ZXJuYWwuaCB0byBwcm9qZWN0CisgICAgICAgICogYmlu
ZGluZ3MvanMva2pzX2Nzcy5jcHA6CisgICAgICAgIChLSlM6Oik6IGNoYW5nZWQgQ2xhc3NJbmZv
IGZvciBET01DU1NTdHlsZVNoZWV0IHRvIGhhdmUgRE9NU3R5bGVTaGVldCBhcyBpdHMgcGFyZW50
IGNsYXNzCisgICAgICAgICogYmluZGluZ3Mvb2JqYy9ET00ubW06CisgICAgICAgICgtW0RPTURv
Y3VtZW50VHlwZSA6XSk6ICBtb3ZlZCBET01OYW1lZE5vZGVNYXAgKFdlYkNvcmVJbnRlcm5hbCkg
aW50ZXJmYWNlIHRvIERPTUludGVybmFsLmgKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTUNT
Uy5tbTogbW92ZWQgV2ViQ29yZUludGVybmFsIGludGVyZmFjZXMgdG8gRE9NQ1NTSW50ZXJuYWwu
aAorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NQ1NTSW50ZXJuYWwuaDogQWRkZWQgZmlsZSwg
Y29udGFpbnMgV2ViQ29yZUludGVybmFsIGludGVyZmFjZSBmb3IgQ1NTIGNsYXNzZXMKKyAgICAg
ICAgKiBiaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLmg6IGFkZGVkIERPTU5hbWVkTm9kZU1hcCAo
V2ViQ29yZUludGVybmFsKSBpbnRlcmZhY2UKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTVV0
aWxpdHkubW06CisgICAgICAgIChLSlM6OlNjcmlwdEludGVycHJldGVyOjpjcmVhdGVPYmpjSW5z
dGFuY2VGb3JWYWx1ZSk6IHN1cHBvcnQgZm9yIG1vcmUgY2xhc3NlcworCiAyMDA2LTA2LTIzICBU
aW0gT21lcm5pY2sgIDx0aW1vQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW0g
SGF0Y2hlci4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAxNDk4NikKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSw3IEBACiAJCTFBNzYyQzc4MEEwNzRG
MjYwMDk4OUY1QiAvKiBKU1hQYXRoTlNSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjJDNzAwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBh
dGhOU1Jlc29sdmVyLmggKi87IH07CiAJCTFBNzYyQzc5MEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQ
YXRoUmVzdWx0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBNzYyQzcxMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoUmVzdWx0LmNwcCAqLzsgfTsK
IAkJMUE3NjJDN0EwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhSZXN1bHQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyQzcyMEEwNzRGMjYwMDk4
OUY1QiAvKiBKU1hQYXRoUmVzdWx0LmggKi87IH07CisJCTFBODA4NkNDMEE0RDA5NzYwMERGQjZB
NyAvKiBET01DU1NJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUE4MDgzNzMwQTRDN0NEQTAwREZCNkE3IC8qIERPTUNTU0ludGVybmFsLmgg
Ki87IH07CiAJCTFBODIwRDkxMEExM0VCQTYwMEFGODQzQyAvKiBJbWFnZURvY3VtZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBODIwRDhGMEEx
M0VCQTYwMEFGODQzQyAvKiBJbWFnZURvY3VtZW50LmNwcCAqLzsgc2V0dGluZ3MgPSB7Q09NUElM
RVJfRkxBR1MgPSAiLXhvYmplY3RpdmUtYysrIjsgfTsgfTsKIAkJMUE4MjBEOTIwQTEzRUJBNjAw
QUY4NDNDIC8qIEltYWdlRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBODIwRDkwMEExM0VCQTYwMEFGODQzQyAvKiBJbWFnZURvY3VtZW50
LmggKi87IH07CiAJCTFBODVCMThGMEExQjE4QTIwMEQ4Qzg3QyAvKiBKU0hUTUxIdG1sRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTg1
QjE4RDBBMUIxOEEyMDBEOEM4N0MgLyogSlNIVE1MSHRtbEVsZW1lbnQuY3BwICovOyB9OwpAQCAt
MTY1OSw2ICsxNjYwLDcgQEAKIAkJMUE3NjJDNzAwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhO
U1Jlc29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1hQYXRoTlNS
ZXNvbHZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTc2MkM3MTBBMDc0RjI2
MDA5ODlGNUIgLyogSlNYUGF0aFJlc3VsdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNYUGF0aFJlc3VsdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFBNzYyQzcyMEEwNzRGMjYwMDk4OUY1QiAvKiBKU1hQYXRoUmVzdWx0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1hQYXRoUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTFBODA4MzczMEE0QzdDREEwMERGQjZBNyAvKiBET01DU1NJbnRlcm5h
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NQ1NTSW50ZXJuYWwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE4MjBEOEYwQTEzRUJBNjAwQUY4NDNDIC8q
IEltYWdlRG9jdW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEltYWdlRG9jdW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTgyMEQ5
MDBBMTNFQkE2MDBBRjg0M0MgLyogSW1hZ2VEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW1hZ2VEb2N1bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQTg1QjE3RDBBMUIxODM2MDBEOEM4N0MgLyogSFRNTEh0bWxFbGVtZW50LmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBIVE1MSHRtbEVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNDg5MSw2ICs0ODkzLDcgQEAKIAkJCQlCQzFBMzc5OTA5N0M3MTVGMDAx
OUYzRDggLyogRE9NQ29yZS5oICovLAogCQkJCUJDMUEzNzlBMDk3QzcxNUYwMDE5RjNEOCAvKiBE
T01DU1MuaCAqLywKIAkJCQlCQzFBMzc5QjA5N0M3MTVGMDAxOUYzRDggLyogRE9NQ1NTLm1tICov
LAorCQkJCTFBODA4MzczMEE0QzdDREEwMERGQjZBNyAvKiBET01DU1NJbnRlcm5hbC5oICovLAog
CQkJCUJDMUEzNzlDMDk3QzcxNUYwMDE5RjNEOCAvKiBET01FdmVudHMuaCAqLywKIAkJCQlCQzFB
Mzc5RDA5N0M3MTVGMDAxOUYzRDggLyogRE9NRXZlbnRzLm1tICovLAogCQkJCUJDMUEzNzlFMDk3
QzcxNUYwMDE5RjNEOCAvKiBET01FdmVudHNJbnRlcm5hbC5oICovLApAQCAtNjI5OSw2ICs2MzAy
LDcgQEAKIAkJCQk4NTAzMUI0RjBBNDRFRkM3MDBGOTkyRTAgLyogVUlFdmVudFdpdGhLZXlTdGF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUwMzFCNTEwQTQ0RUZDNzAwRjk5MkUwIC8qIFdoZWVs
RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFCRTdCNTI0MEE0ODlGODMwMDMxODgxQyAvKiBE
ZXByZWNhdGVkUmVuZGVyU2VsZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTgwODZDQzBBNEQw
OTc2MDBERkI2QTcgLyogRE9NQ1NTSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ranNfY3NzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL2tqc19jc3MuY3BwCShyZXZpc2lvbiAxNDk4NikKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMva2pzX2Nzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQsNiArNCw3IEBACiAgKiAgQ29weXJp
Z2h0IChDKSAyMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0
IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEphbWVzIEcu
IFNwZXRoIChzcGV0aEBlbmQuY29tKQogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNTY1LDcgKzU2
Niw3IEBAIEpTVmFsdWUqIEtKUzo6RE9NTWVkaWFMaXN0UHJvdG9GdW5jOjpjYWwKIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCi1jb25zdCBDbGFzc0luZm8gRE9NQ1NTU3R5bGVTaGVldDo6aW5mbyA9
IHsgIkNTU1N0eWxlU2hlZXQiLCAwLCAmRE9NQ1NTU3R5bGVTaGVldFRhYmxlLCAwIH07Citjb25z
dCBDbGFzc0luZm8gRE9NQ1NTU3R5bGVTaGVldDo6aW5mbyA9IHsgIkNTU1N0eWxlU2hlZXQiLCAm
RE9NU3R5bGVTaGVldDo6aW5mbywgJkRPTUNTU1N0eWxlU2hlZXRUYWJsZSwgMCB9OwogCiAvKgog
QGJlZ2luIERPTUNTU1N0eWxlU2hlZXRUYWJsZSA1CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29i
amMvRE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHJl
dmlzaW9uIDE0OTg2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgSmFtZXMgRy4gU3BldGggKHNwZXRoQGVuZC5jb20pCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwNiwxMCArMTA3LDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU6OkhUTUxOYW1lczsKIC0gKERPTUltcGxlbWVudGF0aW9uRnJvbnQgKilfRE9NSW1wbGVt
ZW50YXRpb247CiBAZW5kCiAKLUBpbnRlcmZhY2UgRE9NTmFtZWROb2RlTWFwIChXZWJDb3JlSW50
ZXJuYWwpCi0rIChET01OYW1lZE5vZGVNYXAgKilfbmFtZWROb2RlTWFwV2l0aDooTmFtZWROb2Rl
TWFwICopaW1wbDsKLUBlbmQKLQogY2xhc3MgT2JqQ0V2ZW50TGlzdGVuZXIgOiBwdWJsaWMgRXZl
bnRMaXN0ZW5lciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIE9iakNFdmVudExpc3RlbmVyICpmaW5k
KGlkIDxET01FdmVudExpc3RlbmVyPik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9N
Q1NTLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01DU1MubW0JKHJl
dmlzaW9uIDE0OTg2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUNTUy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgSmFtZXMgRy4gU3BldGggKHNwZXRoQGVuZC5jb20pCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI2LDYgKzI3LDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAi
RE9NQ1NTLmgiCiAKKyNpbXBvcnQgIkRPTUNTU0ludGVybmFsLmgiCiAjaW1wb3J0ICJDU1NDaGFy
c2V0UnVsZS5oIgogI2ltcG9ydCAiQ1NTRm9udEZhY2VSdWxlLmgiCiAjaW1wb3J0ICJDU1NJbXBv
cnRSdWxlLmgiCkBAIC01NSw0MiArNTcsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
dHlwZWRlZiBET01XaW5kb3cgQWJzdHJhY3RWaWV3OwogCi1AaW50ZXJmYWNlIERPTVN0eWxlU2hl
ZXQgKFdlYkNvcmVJbnRlcm5hbCkKLSsgKERPTVN0eWxlU2hlZXQgKilfRE9NU3R5bGVTaGVldFdp
dGg6KFN0eWxlU2hlZXQgKilpbXBsOwotQGVuZAotCi1AaW50ZXJmYWNlIERPTU1lZGlhTGlzdCAo
V2ViQ29yZUludGVybmFsKQotKyAoRE9NTWVkaWFMaXN0ICopX21lZGlhTGlzdFdpdGg6KE1lZGlh
TGlzdCAqKWltcGw7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgRE9NQ1NTUnVsZUxpc3QgKFdlYkNvcmVJ
bnRlcm5hbCkKLSsgKERPTUNTU1J1bGVMaXN0ICopX3J1bGVMaXN0V2l0aDooQ1NTUnVsZUxpc3Qg
KilpbXBsOwotQGVuZAotCi1AaW50ZXJmYWNlIERPTUNTU1J1bGUgKFdlYkNvcmVJbnRlcm5hbCkK
LSsgKERPTUNTU1J1bGUgKilfcnVsZVdpdGg6KENTU1J1bGUgKilpbXBsOwotQGVuZAotCi1AaW50
ZXJmYWNlIERPTUNTU1ZhbHVlIChXZWJDb3JlSW50ZXJuYWwpCi0rIChET01DU1NWYWx1ZSAqKV92
YWx1ZVdpdGg6KENTU1ZhbHVlICopaW1wbDsKLUBlbmQKLQotQGludGVyZmFjZSBET01DU1NQcmlt
aXRpdmVWYWx1ZSAoV2ViQ29yZUludGVybmFsKQotKyAoRE9NQ1NTUHJpbWl0aXZlVmFsdWUgKilf
dmFsdWVXaXRoOihDU1NWYWx1ZSAqKWltcGw7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgRE9NUkdCQ29s
b3IgKFdlYkNvcmVJbnRlcm5hbCkKLSsgKERPTVJHQkNvbG9yICopX1JHQkNvbG9yV2l0aFJHQjoo
UkdCQTMyKXZhbHVlOwotQGVuZAotCi1AaW50ZXJmYWNlIERPTVJlY3QgKFdlYkNvcmVJbnRlcm5h
bCkKLSsgKERPTVJlY3QgKilfcmVjdFdpdGg6KFJlY3RJbXBsICopaW1wbDsKLUBlbmQKLQotQGlu
dGVyZmFjZSBET01Db3VudGVyIChXZWJDb3JlSW50ZXJuYWwpCi0rIChET01Db3VudGVyICopX2Nv
dW50ZXJXaXRoOihDb3VudGVyICopaW1wbDsKLUBlbmQKLQogLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIC8vIERPTVN0eWxlU2hlZXQKIApJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9vYmpjL0RPTUNTU0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9v
YmpjL0RPTUNTU0ludGVybmFsLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL29i
amMvRE9NQ1NTSW50ZXJuYWwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBKYW1lcyBHLiBTcGV0aCAoc3BldGhAZW5kLmNv
bSkKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgZWMgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbXBvcnQgIkRPTUNTUy5oIgorI2ltcG9ydCAiQ29sb3IuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworICAgIGNsYXNzIFN0eWxlU2hlZXQ7CisgICAgY2xhc3MgTWVkaWFMaXN0
OworICAgIGNsYXNzIENTU1J1bGVMaXN0OworICAgIGNsYXNzIENTU1J1bGU7CisgICAgY2xhc3Mg
Q1NTVmFsdWU7CisgICAgY2xhc3MgUmVjdEltcGw7CisgICAgY2xhc3MgQ291bnRlcjsKK30KKwor
QGludGVyZmFjZSBET01TdHlsZVNoZWV0IChXZWJDb3JlSW50ZXJuYWwpCisrIChET01TdHlsZVNo
ZWV0ICopX0RPTVN0eWxlU2hlZXRXaXRoOihXZWJDb3JlOjpTdHlsZVNoZWV0ICopaW1wbDsKK0Bl
bmQKKworQGludGVyZmFjZSBET01NZWRpYUxpc3QgKFdlYkNvcmVJbnRlcm5hbCkKKysgKERPTU1l
ZGlhTGlzdCAqKV9tZWRpYUxpc3RXaXRoOihXZWJDb3JlOjpNZWRpYUxpc3QgKilpbXBsOworQGVu
ZAorCitAaW50ZXJmYWNlIERPTUNTU1J1bGVMaXN0IChXZWJDb3JlSW50ZXJuYWwpCisrIChET01D
U1NSdWxlTGlzdCAqKV9ydWxlTGlzdFdpdGg6KFdlYkNvcmU6OkNTU1J1bGVMaXN0ICopaW1wbDsK
K0BlbmQKKworQGludGVyZmFjZSBET01DU1NSdWxlIChXZWJDb3JlSW50ZXJuYWwpCisrIChET01D
U1NSdWxlICopX3J1bGVXaXRoOihXZWJDb3JlOjpDU1NSdWxlICopaW1wbDsKK0BlbmQKKworQGlu
dGVyZmFjZSBET01DU1NWYWx1ZSAoV2ViQ29yZUludGVybmFsKQorKyAoRE9NQ1NTVmFsdWUgKilf
dmFsdWVXaXRoOihXZWJDb3JlOjpDU1NWYWx1ZSAqKWltcGw7CitAZW5kCisKK0BpbnRlcmZhY2Ug
RE9NQ1NTUHJpbWl0aXZlVmFsdWUgKFdlYkNvcmVJbnRlcm5hbCkKKysgKERPTUNTU1ByaW1pdGl2
ZVZhbHVlICopX3ZhbHVlV2l0aDooV2ViQ29yZTo6Q1NTVmFsdWUgKilpbXBsOworQGVuZAorCitA
aW50ZXJmYWNlIERPTVJHQkNvbG9yIChXZWJDb3JlSW50ZXJuYWwpCisrIChET01SR0JDb2xvciAq
KV9SR0JDb2xvcldpdGhSR0I6KFdlYkNvcmU6OlJHQkEzMil2YWx1ZTsKK0BlbmQKKworQGludGVy
ZmFjZSBET01SZWN0IChXZWJDb3JlSW50ZXJuYWwpCisrIChET01SZWN0ICopX3JlY3RXaXRoOihX
ZWJDb3JlOjpSZWN0SW1wbCAqKWltcGw7CitAZW5kCisKK0BpbnRlcmZhY2UgRE9NQ291bnRlciAo
V2ViQ29yZUludGVybmFsKQorKyAoRE9NQ291bnRlciAqKV9jb3VudGVyV2l0aDooV2ViQ29yZTo6
Q291bnRlciAqKWltcGw7CitAZW5kCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSW50
ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwu
aAkocmV2aXNpb24gMTQ5ODYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgSmFtZXMgRy4gU3BldGggKHNwZXRoQGVuZC5jb20pCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDYgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIGNsYXNzIE5vZGVGaWx0ZXI7CiAgICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBO
b2RlSXRlcmF0b3I7CisgICAgY2xhc3MgTmFtZWROb2RlTWFwOwogICAgIGNsYXNzIE5vZGVMaXN0
OwogICAgIGNsYXNzIFJhbmdlOwogICAgIGNsYXNzIFN0eWxlU2hlZXRMaXN0OwpAQCAtNDgsNiAr
NTAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLSAoV2ViQ29yZTo6Tm9kZSAqKV9ub2RlOwog
QGVuZAogCitAaW50ZXJmYWNlIERPTU5hbWVkTm9kZU1hcCAoV2ViQ29yZUludGVybmFsKQorKyAo
RE9NTmFtZWROb2RlTWFwICopX25hbWVkTm9kZU1hcFdpdGg6KFdlYkNvcmU6Ok5hbWVkTm9kZU1h
cCAqKWltcGw7CitAZW5kCisKIEBpbnRlcmZhY2UgRE9NTm9kZUxpc3QgKFdlYkNvcmVJbnRlcm5h
bCkKICsgKERPTU5vZGVMaXN0ICopX25vZGVMaXN0V2l0aDooV2ViQ29yZTo6Tm9kZUxpc3QgKilp
bXBsOwogQGVuZApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVV0aWxpdHkubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVV0aWxpdHkubW0JKHJldmlzaW9u
IDE0OTg2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVV0aWxpdHkubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2
IEphbWVzIEcuIFNwZXRoIChzcGV0aEBlbmQuY29tKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNiwzMCArMjcsNDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbXBvcnQg
Imtqc19kb20uaCIKICNpbXBvcnQgIk5vZGUuaCIKKyNpbXBvcnQgImtqc19jc3MuaCIKKyNpbXBv
cnQgIkpTQ1NTUnVsZUxpc3QuaCIKIAogI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKKyNpbXBvcnQg
IkRPTUNTU0ludGVybmFsLmgiCiAKKyNpbXBvcnQgPG9iamMvb2JqYy1ydW50aW1lLmg+CiAjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9XZWJTY3JpcHRPYmplY3RQcml2YXRlLmg+CiAKIC8vIFRoaXMg
ZmlsZSBtYWtlcyB1c2Ugb2YgdGhlIE9iakMgRE9NIEFQSSwgYW5kIHRoZSBDKysgRE9NIEFQSSwg
c28gd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQKIC8vIGhlYWRlcnMgYXJlIGluY2x1
ZGVkIHRvIGF2b2lkIG5hbWluZyBjb25mbGljdHMuCiAKLXN0YXRpYyBpbmxpbmUgaWQgY3JlYXRl
T2JqQ0RPTU5vZGUoV2ViQ29yZTo6Tm9kZSAqbm9kZSkKLXsKLSAgICByZXR1cm4gW0RPTU5vZGUg
X25vZGVXaXRoOm5vZGVdOwotfQotCiBuYW1lc3BhY2UgS0pTIHsKIAogdm9pZCAqU2NyaXB0SW50
ZXJwcmV0ZXI6OmNyZWF0ZU9iamNJbnN0YW5jZUZvclZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgSlNP
YmplY3QgKnZhbHVlLCBjb25zdCBCaW5kaW5nczo6Um9vdE9iamVjdCAqb3JpZ2luLCBjb25zdCBC
aW5kaW5nczo6Um9vdE9iamVjdCAqY3VycmVudCkKIHsKLSAgICBpZiAodmFsdWUtPmluaGVyaXRz
KCZET01Ob2RlOjppbmZvKSkgewotICAgICAgICBET01Ob2RlICppbXAgPSBzdGF0aWNfY2FzdDxE
T01Ob2RlICo+KHZhbHVlKTsKLSAgICAgICAgaWQgbmV3T2JqY05vZGUgPSBjcmVhdGVPYmpDRE9N
Tm9kZShpbXAtPmltcGwoKSk7Ci0gICAgICAgIFtuZXdPYmpjTm9kZSBfaW5pdGlhbGl6ZVdpdGhP
YmplY3RJbXA6aW1wIG9yaWdpbkV4ZWN1dGlvbkNvbnRleHQ6b3JpZ2luIGV4ZWN1dGlvbkNvbnRl
eHQ6Y3VycmVudF07Ci0gICAgICAgIHJldHVybiBuZXdPYmpjTm9kZTsKLSAgICB9Ci0gICAgcmV0
dXJuIDA7CisgICAgaWQgbmV3T2JqID0gbmlsOworICAgIAorICAgIGlmICh2YWx1ZS0+aW5oZXJp
dHMoJkRPTU5vZGU6OmluZm8pKQorICAgICAgICBuZXdPYmogPSBbb2JqY19nZXRDbGFzcygiRE9N
Tm9kZSIpIF9ub2RlV2l0aDpzdGF0aWNfY2FzdDxET01Ob2RlICo+KHZhbHVlKS0+aW1wbCgpXTsK
KyAgICBlbHNlIGlmICh2YWx1ZS0+aW5oZXJpdHMoJkRPTU5vZGVMaXN0OjppbmZvKSkKKyAgICAg
ICAgbmV3T2JqID0gW29iamNfZ2V0Q2xhc3MoIkRPTU5vZGVMaXN0IikgX25vZGVMaXN0V2l0aDpz
dGF0aWNfY2FzdDxET01Ob2RlTGlzdCAqPih2YWx1ZSktPmltcGwoKV07CisgICAgZWxzZSBpZiAo
dmFsdWUtPmluaGVyaXRzKCZET01OYW1lZE5vZGVNYXA6OmluZm8pKQorICAgICAgICBuZXdPYmog
PSBbb2JqY19nZXRDbGFzcygiRE9NTmFtZWROb2RlTWFwIikgX25hbWVkTm9kZU1hcFdpdGg6c3Rh
dGljX2Nhc3Q8RE9NTmFtZWROb2RlTWFwICo+KHZhbHVlKS0+aW1wbCgpXTsKKyAgICBlbHNlIGlm
ICh2YWx1ZS0+aW5oZXJpdHMoJkRPTVN0eWxlU2hlZXRMaXN0OjppbmZvKSkKKyAgICAgICAgbmV3
T2JqID0gW29iamNfZ2V0Q2xhc3MoIkRPTVN0eWxlU2hlZXRMaXN0IikgX3N0eWxlU2hlZXRMaXN0
V2l0aDpzdGF0aWNfY2FzdDxET01TdHlsZVNoZWV0TGlzdCAqPih2YWx1ZSktPmltcGwoKV07Cisg
ICAgZWxzZSBpZiAodmFsdWUtPmluaGVyaXRzKCZET01TdHlsZVNoZWV0OjppbmZvKSkKKyAgICAg
ICAgbmV3T2JqID0gW29iamNfZ2V0Q2xhc3MoIkRPTVN0eWxlU2hlZXQiKSBfRE9NU3R5bGVTaGVl
dFdpdGg6c3RhdGljX2Nhc3Q8RE9NU3R5bGVTaGVldCAqPih2YWx1ZSktPmltcGwoKV07CisgICAg
ZWxzZSBpZiAodmFsdWUtPmluaGVyaXRzKCZET01NZWRpYUxpc3Q6OmluZm8pKQorICAgICAgICBu
ZXdPYmogPSBbb2JqY19nZXRDbGFzcygiRE9NTWVkaWFMaXN0IikgX21lZGlhTGlzdFdpdGg6c3Rh
dGljX2Nhc3Q8RE9NTWVkaWFMaXN0ICo+KHZhbHVlKS0+aW1wbCgpXTsKKyAgICBlbHNlIGlmICh2
YWx1ZS0+aW5oZXJpdHMoJldlYkNvcmU6OkpTQ1NTUnVsZUxpc3Q6OmluZm8pKQorICAgICAgICBu
ZXdPYmogPSBbb2JqY19nZXRDbGFzcygiRE9NQ1NTUnVsZUxpc3QiKSBfcnVsZUxpc3RXaXRoOnN0
YXRpY19jYXN0PFdlYkNvcmU6OkpTQ1NTUnVsZUxpc3QgKj4odmFsdWUpLT5pbXBsKCldOworICAg
IGVsc2UgaWYgKHZhbHVlLT5pbmhlcml0cygmRE9NQ1NTUnVsZTo6aW5mbykpCisgICAgICAgIG5l
d09iaiA9IFtvYmpjX2dldENsYXNzKCJET01DU1NSdWxlIikgX3J1bGVXaXRoOnN0YXRpY19jYXN0
PERPTUNTU1J1bGUgKj4odmFsdWUpLT5pbXBsKCldOworICAgIGVsc2UgaWYgKHZhbHVlLT5pbmhl
cml0cygmRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjo6aW5mbykpCisgICAgICAgIG5ld09iaiA9IFtv
YmpjX2dldENsYXNzKCJET01DU1NTdHlsZURlY2xhcmF0aW9uIikgX3N0eWxlRGVjbGFyYXRpb25X
aXRoOnN0YXRpY19jYXN0PERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKj4odmFsdWUpLT5pbXBsKCld
OworICAgIGVsc2UgaWYgKHZhbHVlLT5pbmhlcml0cygmRE9NQ1NTVmFsdWU6OmluZm8pKQorICAg
ICAgICBuZXdPYmogPSBbb2JqY19nZXRDbGFzcygiRE9NQ1NTVmFsdWUiKSBfdmFsdWVXaXRoOnN0
YXRpY19jYXN0PERPTUNTU1ZhbHVlICo+KHZhbHVlKS0+aW1wbCgpXTsKKyAgICAKKyAgICBpZiAo
bmV3T2JqKQorICAgICAgICBbbmV3T2JqIF9pbml0aWFsaXplV2l0aE9iamVjdEltcDp2YWx1ZSBv
cmlnaW5FeGVjdXRpb25Db250ZXh0Om9yaWdpbiBleGVjdXRpb25Db250ZXh0OmN1cnJlbnRdOwor
ICAgIAorICAgIHJldHVybiBuZXdPYmo7CiB9CiAKIH0K
</data>
<flag name="review"
          id="2654"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>