<?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>40064</bug_id>
          
          <creation_ts>2010-06-02 08:22:01 -0700</creation_ts>
          <short_desc>Web Inspector: Implement JSON parsing for InspectorValue.</short_desc>
          <delta_ts>2010-06-07 04:33:30 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Pavel Podivilov">podivilov</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>233274</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-06-02 08:22:01 -0700</bug_when>
    <thetext>Web Inspector: Implement JSON parsing for InspectorValue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233280</commentid>
    <comment_count>1</comment_count>
      <attachid>57658</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-06-02 08:37:17 -0700</bug_when>
    <thetext>Created attachment 57658
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233295</commentid>
    <comment_count>2</comment_count>
      <attachid>57661</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-06-02 09:02:46 -0700</bug_when>
    <thetext>Created attachment 57661
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233736</commentid>
    <comment_count>3</comment_count>
      <attachid>57761</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-06-03 06:31:42 -0700</bug_when>
    <thetext>Created attachment 57761
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233744</commentid>
    <comment_count>4</comment_count>
      <attachid>57761</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-03 06:55:51 -0700</bug_when>
    <thetext>Comment on attachment 57761
Proposed patch.

Function names should start with lower case.

WebCore/inspector/InspectorValues.cpp:40
 +  static const int kStackLimit = 100;
1000 ?

WebCore/inspector/InspectorValues.cpp:40
 +  static const int kStackLimit = 100;
no k prefix, start from capital.

WebCore/inspector/InspectorValues.cpp:57
 +  const char* const kNullString = &quot;null&quot;;
no k prefix here and below.

WebCore/inspector/InspectorValues.cpp:63
 +      while (start &lt; end &amp;&amp; *token != &apos;\0&apos; &amp;&amp; *start++ == *token++) {
{ } on same line.

Overall looks good. Please make the code conform to the WebKit style guidelines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233758</commentid>
    <comment_count>5</comment_count>
      <attachid>57768</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-06-03 08:02:44 -0700</bug_when>
    <thetext>Created attachment 57768
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233764</commentid>
    <comment_count>6</comment_count>
      <attachid>57768</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-03 08:32:25 -0700</bug_when>
    <thetext>Comment on attachment 57768
Proposed patch.

This looks good to me. I think we need tests for this. We might need to wire this code to the actual inspector transport in order to use layout tests infrastructure...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234786</commentid>
    <comment_count>7</comment_count>
      <attachid>57768</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-07 04:33:25 -0700</bug_when>
    <thetext>Comment on attachment 57768
Proposed patch.

Clearing flags on attachment: 57768

Committed r60774: &lt;http://trac.webkit.org/changeset/60774&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234787</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-07 04:33:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57658</attachid>
            <date>2010-06-02 08:37:17 -0700</date>
            <delta_ts>2010-06-02 09:02:46 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>json.reader.diff</filename>
            <type>text/plain</type>
            <size>17844</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzJlNzE5Ni4uYjc3NDExOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMC0wNi0wMiAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbXBsZW1lbnQgSlNPTiBwYXJz
aW5nIGZvciBJbnNwZWN0b3JWYWx1ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQwMDY0CisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFs
dWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JWYWx1ZTo6YXNCb29sKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclZhbHVlOjphc051
bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JWYWx1ZTo6YXNTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVmFsdWU6OnJlYWRKU09OKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckJhc2ljVmFsdWU6OmFzQm9vbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JT
dHJpbmc6OmFzU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdDo6Z2V0
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdDo6Z2V0KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JWYWx1ZTo6aXNUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdDo6
YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT2JqZWN0OjplbmQpOgorCiAyMDEw
LTA2LTAyICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBHdXN0YXZvIE5vcm9uaGEuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcApp
bmRleCBmNTllOTAwLi4wOWI0YzU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5j
cHAKQEAgLTM1LDYgKzM1LDM5NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK25hbWVzcGFj
ZSB7CisKK3N0YXRpYyBjb25zdCBpbnQga1N0YWNrTGltaXQgPSAxMDA7CisKK2VudW0gVG9rZW4g
eworICAgIE9CSkVDVF9CRUdJTiwgICAgICAgICAgIC8vIHsKKyAgICBPQkpFQ1RfRU5ELCAgICAg
ICAgICAgICAvLyB9CisgICAgQVJSQVlfQkVHSU4sICAgICAgICAgICAgLy8gWworICAgIEFSUkFZ
X0VORCwgICAgICAgICAgICAgIC8vIF0KKyAgICBTVFJJTkcsCisgICAgTlVNQkVSLAorICAgIEJP
T0xfVFJVRSwgICAgICAgICAgICAgIC8vIHRydWUKKyAgICBCT09MX0ZBTFNFLCAgICAgICAgICAg
ICAvLyBmYWxzZQorICAgIE5VTExfVE9LRU4sICAgICAgICAgICAgIC8vIG51bGwKKyAgICBMSVNU
X1NFUEFSQVRPUiwgICAgICAgICAvLyAsCisgICAgT0JKRUNUX1BBSVJfU0VQQVJBVE9SLCAgLy8g
OgorICAgIElOVkFMSURfVE9LRU4sCit9OworCitib29sIFBhcnNlQ29uc3RUb2tlbihjb25zdCBV
Q2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyKiogdG9rZW5FbmQsIGNv
bnN0IFN0cmluZyYgdG9rZW4pIHsKKyAgICBpZiAoZW5kIC0gc3RhcnQgPCAoaW50KSB0b2tlbi5s
ZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdG9rZW4ubGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAoKnN0YXJ0KysgIT0gdG9rZW5b
aV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgICp0b2tlbkVuZCA9IHN0
YXJ0OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlYWRJbnQoY29uc3QgVUNoYXIqIHN0
YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhcioqIHRva2VuRW5kLCBib29sIGNhbkhh
dmVMZWFkaW5nWmVyb3MpIHsKKyAgICBpZiAoc3RhcnQgPT0gZW5kKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgYm9vbCBoYXZlTGVhZGluZ1plcm8gPSAnMCcgPT0gKnN0YXJ0OworICAgIGlu
dCBsZW5ndGggPSAwOworICAgIHdoaWxlIChzdGFydCA8IGVuZCAmJiAnMCcgPD0gKnN0YXJ0ICYm
ICpzdGFydCA8PSAnOScpIHsKKyAgICAgICAgKytzdGFydDsKKyAgICAgICAgKytsZW5ndGg7Cisg
ICAgfQorICAgIGlmIChsZW5ndGggPT0gMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
ICghY2FuSGF2ZUxlYWRpbmdaZXJvcyAmJiBsZW5ndGggPiAxICYmIGhhdmVMZWFkaW5nWmVybykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICp0b2tlbkVuZCA9IHN0YXJ0OworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFBhcnNlTnVtYmVyVG9rZW4oY29uc3QgVUNoYXIqIHN0YXJ0LCBj
b25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhcioqIHRva2VuRW5kKSB7CisgICAgLy8gV2UganVz
dCBncmFiIHRoZSBudW1iZXIgaGVyZS4gIFdlIHZhbGlkYXRlIHRoZSBzaXplIGluIERlY29kZU51
bWJlci4KKyAgICAvLyBBY2NvcmRpbmcgICB0byBSRkM0NjI3LCBhIHZhbGlkIG51bWJlciBpczog
W21pbnVzXSBpbnQgW2ZyYWNdIFtleHBdCisgICAgaWYgKHN0YXJ0ID09IGVuZCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIFVDaGFyIGMgPSAqc3RhcnQ7CisgICAgaWYgKCctJyA9PSBjKQor
ICAgICAgICArK3N0YXJ0OworCisgICAgaWYgKCFSZWFkSW50KHN0YXJ0LCBlbmQsICZzdGFydCwg
ZmFsc2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHN0YXJ0ID09IGVuZCkgewor
ICAgICAgICAqdG9rZW5FbmQgPSBzdGFydDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgLy8gT3B0aW9uYWwgZnJhY3Rpb24gcGFydAorICAgIGMgPSAqc3RhcnQ7CisgICAgaWYg
KCcuJyA9PSBjKSB7CisgICAgICAgICsrc3RhcnQ7CisgICAgICAgIGlmICghUmVhZEludChzdGFy
dCwgZW5kLCAmc3RhcnQsIHRydWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBpZiAoc3RhcnQgPT0gZW5kKSB7CisgICAgICAgICAgICAqdG9rZW5FbmQgPSBzdGFydDsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGMgPSAqc3RhcnQ7Cisg
ICAgfQorCisgICAgLy8gT3B0aW9uYWwgZXhwb25lbnQgcGFydAorICAgIGlmICgnZScgPT0gYyB8
fCAnRScgPT0gYykgeworICAgICAgICArK3N0YXJ0OworICAgICAgICBpZiAoc3RhcnQgPT0gZW5k
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjID0gKnN0YXJ0OworICAgICAg
ICBpZiAoJy0nID09IGMgfHwgJysnID09IGMpIHsKKyAgICAgICAgICAgICsrc3RhcnQ7CisgICAg
ICAgICAgICBpZiAoc3RhcnQgPT0gZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoIVJlYWRJbnQoc3RhcnQsIGVuZCwgJnN0YXJ0LCB0cnVl
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAqdG9rZW5FbmQgPSBz
dGFydDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZWFkSGV4RGlnaXRzKGNvbnN0IFVD
aGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tlbkVuZCwgaW50
IGRpZ2l0cykgeworICAgIGlmIChlbmQgLSBzdGFydCA8IGRpZ2l0cykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGlnaXRzOyArK2kpIHsKKyAgICAgICAg
VUNoYXIgYyA9ICpzdGFydCsrOworICAgICAgICBpZiAoISgoJzAnIDw9IGMgJiYgYyA8PSAnOScp
IHx8ICgnYScgPD0gYyAmJiBjIDw9ICdmJykgfHwKKyAgICAgICAgICAgICgnQScgPD0gYyAmJiBj
IDw9ICdGJykpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAqdG9rZW5F
bmQgPSBzdGFydDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQYXJzZVN0cmluZ1Rva2Vu
KGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tl
bkVuZCkgeworICAgIHdoaWxlKHN0YXJ0IDwgZW5kKSB7CisgICAgICAgIFVDaGFyIGMgPSAqc3Rh
cnQrKzsKKyAgICAgICAgaWYgKCdcXCcgPT0gYykgeworICAgICAgICAgICAgYyA9ICpzdGFydCsr
OworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBlc2NhcGVkIGNoYXIgaXMgdmFsaWQuCisg
ICAgICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICAgICAgICBjYXNlICd4JzoKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFSZWFkSGV4RGlnaXRzKHN0YXJ0LCBlbmQsICZzdGFydCwgMikp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ3UnOgorICAgICAgICAgICAgICAgICAg
ICBpZiAoIVJlYWRIZXhEaWdpdHMoc3RhcnQsIGVuZCwgJnN0YXJ0LCA0KSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSAnXFwnOgorICAgICAgICAgICAgICAgIGNhc2UgJy8nOgorICAg
ICAgICAgICAgICAgIGNhc2UgJ2InOgorICAgICAgICAgICAgICAgIGNhc2UgJ2YnOgorICAgICAg
ICAgICAgICAgIGNhc2UgJ24nOgorICAgICAgICAgICAgICAgIGNhc2UgJ3InOgorICAgICAgICAg
ICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgICAgIGNhc2UgJ3YnOgorICAgICAgICAgICAg
ICAgIGNhc2UgJyInOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSBpZiAoJyInID09IGMpIHsKKyAgICAgICAgICAgICp0b2tlbkVu
ZCA9IHN0YXJ0OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitUb2tlbiBQYXJzZVRva2VuKGNvbnN0IFVDaGFyKiBzdGFy
dCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tlbkVuZCkgeworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBrTnVsbFN0cmluZywgKCJudWxsIikpOworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBrVHJ1ZVN0cmluZywgKCJ0cnVlIikpOworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBrRmFsc2VTdHJpbmcsICgiZmFsc2UiKSk7CisKKyAgICBp
ZiAoc3RhcnQgPj0gZW5kKQorICAgICAgICByZXR1cm4gSU5WQUxJRF9UT0tFTjsKKworICAgIHN3
aXRjaCAoKnN0YXJ0KSB7CisgICAgICAgIGNhc2UgJ24nOgorICAgICAgICAgICAgaWYgKFBhcnNl
Q29uc3RUb2tlbihzdGFydCwgZW5kLCB0b2tlbkVuZCwga051bGxTdHJpbmcpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBOVUxMX1RPS0VOOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSAndCc6CisgICAgICAgICAgICBpZiAoUGFyc2VDb25zdFRva2VuKHN0YXJ0LCBlbmQsIHRv
a2VuRW5kLCBrVHJ1ZVN0cmluZykpCisgICAgICAgICAgICAgICAgcmV0dXJuIEJPT0xfVFJVRTsK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJ2YnOgorICAgICAgICAgICAgaWYg
KFBhcnNlQ29uc3RUb2tlbihzdGFydCwgZW5kLCB0b2tlbkVuZCwga0ZhbHNlU3RyaW5nKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gQk9PTF9GQUxTRTsKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgJ1snOgorICAgICAgICAgICAgKnRva2VuRW5kID0gc3RhcnQgKyAxOworICAg
ICAgICAgICAgcmV0dXJuIEFSUkFZX0JFR0lOOworCisgICAgICAgIGNhc2UgJ10nOgorICAgICAg
ICAgICAgKnRva2VuRW5kID0gc3RhcnQgKyAxOworICAgICAgICAgICAgcmV0dXJuIEFSUkFZX0VO
RDsKKworICAgICAgICBjYXNlICcsJzoKKyAgICAgICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0ICsg
MTsKKyAgICAgICAgICAgIHJldHVybiBMSVNUX1NFUEFSQVRPUjsKKworICAgICAgICBjYXNlICd7
JzoKKyAgICAgICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0ICsgMTsKKyAgICAgICAgICAgIHJldHVy
biBPQkpFQ1RfQkVHSU47CisKKyAgICAgICAgY2FzZSAnfSc6CisgICAgICAgICAgICAqdG9rZW5F
bmQgPSBzdGFydCArIDE7CisgICAgICAgICAgICByZXR1cm4gT0JKRUNUX0VORDsKKworICAgICAg
ICBjYXNlICc6JzoKKyAgICAgICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0ICsgMTsKKyAgICAgICAg
ICAgIHJldHVybiBPQkpFQ1RfUEFJUl9TRVBBUkFUT1I7CisKKyAgICAgICAgY2FzZSAnMCc6Cisg
ICAgICAgIGNhc2UgJzEnOgorICAgICAgICBjYXNlICcyJzoKKyAgICAgICAgY2FzZSAnMyc6Cisg
ICAgICAgIGNhc2UgJzQnOgorICAgICAgICBjYXNlICc1JzoKKyAgICAgICAgY2FzZSAnNic6Cisg
ICAgICAgIGNhc2UgJzcnOgorICAgICAgICBjYXNlICc4JzoKKyAgICAgICAgY2FzZSAnOSc6Cisg
ICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgaWYgKFBhcnNlTnVtYmVyVG9rZW4oc3RhcnQs
IGVuZCwgdG9rZW5FbmQpKSAKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVNQkVSOworICAgICAg
ICAgICAgYnJlYWs7ICAgICAgICAgICAgCisKKyAgICAgICAgY2FzZSAnIic6CisgICAgICAgICAg
ICBpZiAoUGFyc2VTdHJpbmdUb2tlbihzdGFydCArIDEsIGVuZCwgdG9rZW5FbmQpKSAKKyAgICAg
ICAgICAgICAgICByZXR1cm4gU1RSSU5HOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IHJldHVybiBJTlZBTElEX1RPS0VOOworfQorCitpbmxpbmUgaW50IEhleFRvSW50KFVDaGFyIGMp
IHsKKyAgICBpZiAoJzAnIDw9IGMgJiYgYyA8PSAnOScpIHsKKyAgICAgICAgcmV0dXJuIGMgLSAn
MCc7CisgICAgfSBlbHNlIGlmICgnQScgPD0gYyAmJiBjIDw9ICdGJykgeworICAgICAgICByZXR1
cm4gYyAtICdBJyArIDEwOworICAgIH0gZWxzZSBpZiAoJ2EnIDw9IGMgJiYgYyA8PSAnZicpIHsK
KyAgICAgICAgcmV0dXJuIGMgLSAnYScgKyAxMDsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgRGVjb2RlU3RyaW5nKGNvbnN0IFVDaGFy
KiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nKiBvdXRwdXQpIHsKKyAgICB3aGlsZShz
dGFydCA8IGVuZCkgeworICAgICAgICBVQ2hhciBjID0gKnN0YXJ0Kys7CisgICAgICAgIGlmICgn
XFwnICE9IGMpIHsKKyAgICAgICAgICAgIG91dHB1dC0+YXBwZW5kKGMpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgYyA9ICpzdGFydCsrOworICAgICAgICBzd2l0
Y2ggKGMpIHsKKyAgICAgICAgICAgIGNhc2UgJyInOgorICAgICAgICAgICAgY2FzZSAnLyc6Cisg
ICAgICAgICAgICBjYXNlICdcXCc6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlICdiJzoKKyAgICAgICAgICAgICAgICBjID0gJ1xiJzsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2YnOgorICAgICAgICAgICAgICAgIGMgPSAnXGYnOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnbic6CisgICAgICAgICAg
ICAgICAgYyA9ICdcbic7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
ICdyJzoKKyAgICAgICAgICAgICAgICBjID0gJ1xyJzsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgICAgIGMgPSAnXHQnOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAndic6CisgICAgICAgICAgICAgICAg
YyA9ICdcdic7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICd4JzoK
KyAgICAgICAgICAgICAgICBjID0gKEhleFRvSW50KCpzdGFydCkgPDwgNCkgKworICAgICAgICAg
ICAgICAgICAgICBIZXhUb0ludCgqKHN0YXJ0ICsgMSkpOworICAgICAgICAgICAgICAgIHN0YXJ0
ICs9IDI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICd1JzoKKyAg
ICAgICAgICAgICAgICBjID0gKEhleFRvSW50KCpzdGFydCkgPDwgMTIgKSArCisgICAgICAgICAg
ICAgICAgICAgIChIZXhUb0ludCgqKHN0YXJ0ICsgMSkpIDw8IDgpICsKKyAgICAgICAgICAgICAg
ICAgICAgKEhleFRvSW50KCooc3RhcnQgKyAyKSkgPDwgNCkgKworICAgICAgICAgICAgICAgICAg
ICBIZXhUb0ludCgqKHN0YXJ0ICsgMykpOworICAgICAgICAgICAgICAgIHN0YXJ0ICs9IDQ7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBvdXRwdXQtPmFwcGVuZChjKTsK
KyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IEJ1aWxkVmFsdWUoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBV
Q2hhcioqIHZhbHVlVG9rZW5FbmQsIGludCBkZXB0aCkgeworICAgIGlmIChkZXB0aCA+IGtTdGFj
a0xpbWl0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gcmVzdWx0OworICAgIGNvbnN0IFVDaGFyKiB0b2tlbkVuZDsKKyAgICBUb2tlbiB0b2tlbiA9
IFBhcnNlVG9rZW4oc3RhcnQsIGVuZCwgJnRva2VuRW5kKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7
CisgICAgICAgIGNhc2UgSU5WQUxJRF9UT0tFTjoKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwor
ICAgICAgICBjYXNlIE5VTExfVE9LRU46CisgICAgICAgICAgICByZXN1bHQgPSBJbnNwZWN0b3JW
YWx1ZTo6bnVsbCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQk9PTF9UUlVF
OgorICAgICAgICAgICAgcmVzdWx0ID0gSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKHRydWUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQk9PTF9GQUxTRToKKyAgICAgICAg
ICAgIHJlc3VsdCA9IEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZShmYWxzZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOVU1CRVI6IHsKKyAgICAgICAgICAgIGJvb2wgb2s7
CisgICAgICAgICAgICBkb3VibGUgdmFsdWUgPSBjaGFyYWN0ZXJzVG9Eb3VibGUoc3RhcnQsIHRv
a2VuRW5kIC0gc3RhcnQsICZvayk7CisgICAgICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAg
ICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgcmVzdWx0ID0gSW5zcGVjdG9yQmFzaWNWYWx1
ZTo6Y3JlYXRlKHZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgU1RSSU5HOiB7CisgICAgICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgICAgICAgICBi
b29sIG9rID0gRGVjb2RlU3RyaW5nKHN0YXJ0ICsgMSwgdG9rZW5FbmQgLSAxLCAmdmFsdWUpOwor
ICAgICAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IEluc3BlY3RvclN0cmluZzo6Y3JlYXRlKHZhbHVlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQVJSQVlfQkVHSU46IHsKKyAgICAg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CisgICAgICAgICAgICBzdGFydCA9IHRva2VuRW5kOworICAgICAgICAgICAgdG9rZW4g
PSBQYXJzZVRva2VuKHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCk7CisgICAgICAgICAgICB3aGlsZSAo
dG9rZW4gIT0gQVJSQVlfRU5EKSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiBhcnJheU5vZGUgPSBCdWlsZFZhbHVlKHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCwgZGVwdGgg
KyAxKTsKKyAgICAgICAgICAgICAgICBpZiAoIWFycmF5Tm9kZSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgYXJyYXktPnB1c2goYXJyYXlOb2RlKTsK
KworICAgICAgICAgICAgICAgIC8vIEFmdGVyIGEgbGlzdCB2YWx1ZSwgd2UgZXhwZWN0IGEgY29t
bWEgb3IgdGhlIGVuZCBvZiB0aGUgbGlzdC4KKyAgICAgICAgICAgICAgICBzdGFydCA9IHRva2Vu
RW5kOworICAgICAgICAgICAgICAgIHRva2VuID0gUGFyc2VUb2tlbihzdGFydCwgZW5kLCAmdG9r
ZW5FbmQpOworICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PSBMSVNUX1NFUEFSQVRPUikgewor
ICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHRva2VuRW5kOworICAgICAgICAgICAgICAgICAg
ICB0b2tlbiA9IFBhcnNlVG9rZW4oc3RhcnQsIGVuZCwgJnRva2VuRW5kKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHRva2VuID09IEFSUkFZX0VORCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4gIT0gQVJSQVlf
RU5EKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFVuZXhwZWN0ZWQgdmFsdWUgYWZ0ZXIgbGlz
dCB2YWx1ZS4gIEJhaWwgb3V0LgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodG9rZW4gIT0g
QVJSQVlfRU5EKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgcmVz
dWx0ID0gYXJyYXkucmVsZWFzZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBPQkpFQ1RfQkVHSU46IHsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBz
dGFydCA9IHRva2VuRW5kOworICAgICAgICAgICAgdG9rZW4gPSBQYXJzZVRva2VuKHN0YXJ0LCBl
bmQsICZ0b2tlbkVuZCk7CisgICAgICAgICAgICB3aGlsZSAodG9rZW4gIT0gT0JKRUNUX0VORCkg
eworICAgICAgICAgICAgICAgIGlmICh0b2tlbiAhPSBTVFJJTkcpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIFN0cmluZyBrZXk7CisgICAgICAgICAg
ICAgICAgaWYgKCFEZWNvZGVTdHJpbmcoc3RhcnQgKyAxLCB0b2tlbkVuZCAtIDEsICZrZXkpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICBzdGFydCA9
IHRva2VuRW5kOworCisgICAgICAgICAgICAgICAgdG9rZW4gPSBQYXJzZVRva2VuKHN0YXJ0LCBl
bmQsICZ0b2tlbkVuZCk7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuICE9IE9CSkVDVF9QQUlS
X1NFUEFSQVRPUikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAg
ICAgICAgc3RhcnQgPSB0b2tlbkVuZDsKKworICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gdmFsdWUgPSBCdWlsZFZhbHVlKHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCwgZGVwdGgg
KyAxKTsKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICBvYmplY3QtPnNldChrZXksIHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBzdGFydCA9IHRva2VuRW5kOworCisgICAgICAgICAgICAgICAgLy8gQWZ0
ZXIgYSBrZXkvdmFsdWUgcGFpciwgd2UgZXhwZWN0IGEgY29tbWEgb3IgdGhlIGVuZCBvZiB0aGUK
KyAgICAgICAgICAgICAgICAvLyBvYmplY3QuCisgICAgICAgICAgICAgICAgdG9rZW4gPSBQYXJz
ZVRva2VuKHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCk7CisgICAgICAgICAgICAgICAgaWYgKHRva2Vu
ID09IExJU1RfU0VQQVJBVE9SKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gdG9rZW5F
bmQ7CisgICAgICAgICAgICAgICAgICAgIHRva2VuID0gUGFyc2VUb2tlbihzdGFydCwgZW5kLCAm
dG9rZW5FbmQpOworICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuID09IE9CSkVDVF9FTkQp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKHRva2VuICE9IE9CSkVDVF9FTkQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
VW5leHBlY3RlZCB2YWx1ZSBhZnRlciBsYXN0IG9iamVjdCB2YWx1ZS4gIEJhaWwgb3V0LgorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAodG9rZW4gIT0gT0JKRUNUX0VORCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIHJlc3VsdCA9IG9iamVjdC5yZWxlYXNlKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAvLyBXZSBnb3QgYSB0b2tlbiB0aGF0J3Mgbm90IGEgdmFsdWUuCisgICAgICAgICAg
ICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgKnZhbHVlVG9rZW5FbmQgPSB0b2tlbkVuZDsKKyAg
ICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKwogaW5saW5lIGJvb2wgZXNjYXBlQ2hhcihV
Q2hhciBjLCBWZWN0b3I8VUNoYXI+KiBkc3QpCiB7CiAgICAgc3dpdGNoIChjKSB7CkBAIC03MSw2
ICs0NjIsMzIgQEAgaW5saW5lIHZvaWQgZG91YmxlUXVvdGVTdHJpbmcoY29uc3QgU3RyaW5nJiBz
dHIsIFZlY3RvcjxVQ2hhcj4qIGRzdCkKICAgICBkc3QtPmFwcGVuZCgnIicpOwogfQogCit9ICAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2Jvb2wgSW5zcGVjdG9yVmFsdWU6OmFzQm9vbChib29s
KikgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW5zcGVjdG9yVmFsdWU6
OmFzTnVtYmVyKGRvdWJsZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IEluc3BlY3RvclZhbHVlOjphc1N0cmluZyhTdHJpbmcqKSBjb25zdAoreworICAgIHJldHVybiBm
YWxzZTsKK30KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yVmFsdWU6OnJl
YWRKU09OKGNvbnN0IFN0cmluZyYganNvbikKK3sKKyAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBq
c29uLmNoYXJhY3RlcnMoKSwgKmVuZCA9IGpzb24uY2hhcmFjdGVycygpICsganNvbi5sZW5ndGgo
KSwgKnRva2VuRW5kOworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBCdWlsZFZh
bHVlKHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCwgMCk7CisgICAgaWYgKCF2YWx1ZSB8fCB0b2tlbkVu
ZCAhPSBlbmQpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiB2YWx1ZS5yZWxlYXNl
KCk7Cit9CisKIFN0cmluZyBJbnNwZWN0b3JWYWx1ZTo6dG9KU09OU3RyaW5nKCkgY29uc3QKIHsK
ICAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKQEAgLTg1LDYgKzUwMiwyMiBAQCB2b2lkIEluc3Bl
Y3RvclZhbHVlOjp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdAogICAgIG91
dHB1dC0+YXBwZW5kKCJudWxsIiwgNCk7CiB9CiAKK2Jvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6
YXNCb29sKGJvb2wqIG91dHB1dCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVHlwZShUeXBlQm9vbGVh
bikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAqb3V0cHV0ID0gbV9ib29sVmFsdWU7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIo
ZG91YmxlKiBvdXRwdXQpIGNvbnN0Cit7CisgICAgaWYgKCFpc1R5cGUoVHlwZURvdWJsZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAqb3V0cHV0ID0gbV9kb3VibGVWYWx1ZTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjp3cml0ZUpTT04oVmVj
dG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdAogewogICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlwZUJv
b2xlYW4gfHwgdHlwZSgpID09IFR5cGVEb3VibGUpOwpAQCAtOTksMTIgKzUzMiwzNCBAQCB2b2lk
IEluc3BlY3RvckJhc2ljVmFsdWU6OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNv
bnN0CiAgICAgfQogfQogCitib29sIEluc3BlY3RvclN0cmluZzo6YXNTdHJpbmcoU3RyaW5nKiBv
dXRwdXQpIGNvbnN0Cit7CisgICAgKm91dHB1dCA9IG1fc3RyaW5nVmFsdWU7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKIHZvaWQgSW5zcGVjdG9yU3RyaW5nOjp3cml0ZUpTT04oVmVjdG9yPFVDaGFy
Piogb3V0cHV0KSBjb25zdAogewogICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlwZVN0cmluZyk7CiAg
ICAgZG91YmxlUXVvdGVTdHJpbmcobV9zdHJpbmdWYWx1ZSwgb3V0cHV0KTsKIH0KIAorUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3Rvck9iamVjdDo6Z2V0T2JqZWN0KGNvbnN0IFN0
cmluZyYgbmFtZSkgY29uc3QKK3sKKyAgICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1
ZSA9IGdldChuYW1lKTsKKyAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNUeXBlKFR5cGVPYmpl
Y3QpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2Fz
dDxJbnNwZWN0b3JPYmplY3Q+KHZhbHVlKTsKK30KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gSW5zcGVjdG9yT2JqZWN0OjpnZXQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAg
IERpY3Rpb25hcnk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhLmZpbmQobmFtZSk7CisgICAg
aWYgKGl0ID09IG1fZGF0YS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJu
IGl0LT5zZWNvbmQ7Cit9CisKIHZvaWQgSW5zcGVjdG9yT2JqZWN0Ojp3cml0ZUpTT04oVmVjdG9y
PFVDaGFyPiogb3V0cHV0KSBjb25zdAogewogICAgIG91dHB1dC0+YXBwZW5kKCd7Jyk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCmluZGV4IGE2MGJiMmMuLjU5NjY5ZjQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCkBAIC00Myw2ICs0Myw3IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIFN0cmluZzsKK2NsYXNzIEluc3BlY3Rvck9iamVjdDsKIAogY2xhc3Mg
SW5zcGVjdG9yVmFsdWUgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JWYWx1ZT4gewogcHVi
bGljOgpAQCAtNjQsNiArNjUsMTMgQEAgcHVibGljOgogICAgIH0gVHlwZTsKIAogICAgIFR5cGUg
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIGJvb2wgaXNUeXBlKFR5cGUgdHlw
ZSkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IHR5cGU7IH0KKworICAgIHZpcnR1YWwgYm9vbCBh
c0Jvb2woYm9vbCogb3V0cHV0KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgYXNOdW1iZXIoZG91
YmxlKiBvdXRwdXQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBhc1N0cmluZyhTdHJpbmcqIG91
dHB1dCkgY29uc3Q7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVh
ZEpTT04oY29uc3QgU3RyaW5nJiBqc29uKTsKIAogICAgIFN0cmluZyB0b0pTT05TdHJpbmcoKSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkg
Y29uc3Q7CkBAIC05Myw2ICsxMDEsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5zcGVjdG9yQmFzaWNWYWx1ZSh2YWx1ZSkpOwogICAgIH0KIAorICAgIHZpcnR1YWwg
Ym9vbCBhc0Jvb2woYm9vbCogb3V0cHV0KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgYXNOdW1i
ZXIoZG91YmxlKiBvdXRwdXQpIGNvbnN0OworCiAgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihW
ZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0OwogCiBwcml2YXRlOgpAQCAtMTE3LDYgKzEyOCw5
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9y
U3RyaW5nKHZhbHVlKSk7CiAgICAgfQorCisgICAgdmlydHVhbCBib29sIGFzU3RyaW5nKFN0cmlu
Zyogb3V0cHV0KSBjb25zdDsgICAgCisKICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFZlY3Rv
cjxVQ2hhcj4qIG91dHB1dCkgY29uc3Q7CiAKIHByaXZhdGU6CkBAIC0xMjcsNiArMTQxLDEzIEBA
IHByaXZhdGU6CiB9OwogCiBjbGFzcyBJbnNwZWN0b3JPYmplY3QgOiBwdWJsaWMgSW5zcGVjdG9y
VmFsdWUgeworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+ID4gRGljdGlvbmFyeTsKKworcHVibGljOgorICAgIHR5cGVkZWYgRGljdGlv
bmFyeTo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgdHlwZWRlZiBEaWN0aW9uYXJ5Ojpjb25zdF9p
dGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gY3JlYXRlKCkKICAgICB7CkBAIC0xMzksMTEgKzE2MCwxOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmKTsKICAgICB2b2lkIHNldChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KTsKIAorICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBnZXRPYmplY3Qo
Y29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBnZXQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKwogICAgIHZpcnR1YWwgdm9pZCB3cml0
ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdDsKIAorICAgIGl0ZXJhdG9yIGJlZ2lu
KCkgeyByZXR1cm4gbV9kYXRhLmJlZ2luKCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVy
biBtX2RhdGEuZW5kKCk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIG1fZGF0YS5iZWdpbigpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhLmVuZCgpOyB9CisKIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yT2JqZWN0KCkg
OiBJbnNwZWN0b3JWYWx1ZShUeXBlT2JqZWN0KSB7IH0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3Ry
aW5nLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+ID4gRGljdGlvbmFyeTsKICAgICBEaWN0aW9uYXJ5
IG1fZGF0YTsKIH07CiAKQEAgLTIxMiw0ICsyNDAsMyBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JB
cnJheTo6cHVzaChQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKIAogI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1IpCiAjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVmFsdWVzX2gp
Ci0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57661</attachid>
            <date>2010-06-02 09:02:46 -0700</date>
            <delta_ts>2010-06-03 06:31:42 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>json.reader.diff</filename>
            <type>text/plain</type>
            <size>16853</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzJlNzE5Ni4uYjc3NDExOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMC0wNi0wMiAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbXBsZW1lbnQgSlNPTiBwYXJz
aW5nIGZvciBJbnNwZWN0b3JWYWx1ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQwMDY0CisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFs
dWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JWYWx1ZTo6YXNCb29sKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclZhbHVlOjphc051
bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JWYWx1ZTo6YXNTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVmFsdWU6OnJlYWRKU09OKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckJhc2ljVmFsdWU6OmFzQm9vbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JT
dHJpbmc6OmFzU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdDo6Z2V0
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdDo6Z2V0KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JWYWx1ZTo6aXNUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdDo6
YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT2JqZWN0OjplbmQpOgorCiAyMDEw
LTA2LTAyICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBHdXN0YXZvIE5vcm9uaGEuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcApp
bmRleCBmNTllOTAwLi5hYzBkMmJiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5j
cHAKQEAgLTM1LDYgKzM1LDQwNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK25hbWVzcGFj
ZSB7CisKK3N0YXRpYyBjb25zdCBpbnQga1N0YWNrTGltaXQgPSAxMDA7CisKK2VudW0gVG9rZW4g
eworICAgIE9CSkVDVF9CRUdJTiwKKyAgICBPQkpFQ1RfRU5ELAorICAgIEFSUkFZX0JFR0lOLAor
ICAgIEFSUkFZX0VORCwKKyAgICBTVFJJTkcsCisgICAgTlVNQkVSLAorICAgIEJPT0xfVFJVRSwK
KyAgICBCT09MX0ZBTFNFLAorICAgIE5VTExfVE9LRU4sCisgICAgTElTVF9TRVBBUkFUT1IsCisg
ICAgT0JKRUNUX1BBSVJfU0VQQVJBVE9SLAorICAgIElOVkFMSURfVE9LRU4sCit9OworCitib29s
IFBhcnNlQ29uc3RUb2tlbihjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNv
bnN0IFVDaGFyKiogdG9rZW5FbmQsIGNvbnN0IFN0cmluZyYgdG9rZW4pCit7CisgICAgaWYgKGVu
ZCAtIHN0YXJ0IDwgKGludCkgdG9rZW4ubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRva2VuLmxlbmd0aCgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKCpzdGFydCsrICE9IHRva2VuW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICAqdG9rZW5FbmQgPSBzdGFydDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBSZWFkSW50KGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNo
YXIqKiB0b2tlbkVuZCwgYm9vbCBjYW5IYXZlTGVhZGluZ1plcm9zKQoreworICAgIGlmIChzdGFy
dCA9PSBlbmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBib29sIGhhdmVMZWFkaW5nWmVy
byA9ICcwJyA9PSAqc3RhcnQ7CisgICAgaW50IGxlbmd0aCA9IDA7CisgICAgd2hpbGUgKHN0YXJ0
IDwgZW5kICYmICcwJyA8PSAqc3RhcnQgJiYgKnN0YXJ0IDw9ICc5JykgeworICAgICAgICArK3N0
YXJ0OworICAgICAgICArK2xlbmd0aDsKKyAgICB9CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWNhbkhhdmVMZWFkaW5nWmVyb3MgJiYgbGVuZ3RoID4g
MSAmJiBoYXZlTGVhZGluZ1plcm8pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAqdG9rZW5F
bmQgPSBzdGFydDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQYXJzZU51bWJlclRva2Vu
KGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tl
bkVuZCkKK3sKKyAgICAvLyBXZSBqdXN0IGdyYWIgdGhlIG51bWJlciBoZXJlLiAgV2UgdmFsaWRh
dGUgdGhlIHNpemUgaW4gRGVjb2RlTnVtYmVyLgorICAgIC8vIEFjY29yZGluZyAgIHRvIFJGQzQ2
MjcsIGEgdmFsaWQgbnVtYmVyIGlzOiBbbWludXNdIGludCBbZnJhY10gW2V4cF0KKyAgICBpZiAo
c3RhcnQgPT0gZW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgVUNoYXIgYyA9ICpzdGFy
dDsKKyAgICBpZiAoJy0nID09IGMpCisgICAgICAgICsrc3RhcnQ7CisKKyAgICBpZiAoIVJlYWRJ
bnQoc3RhcnQsIGVuZCwgJnN0YXJ0LCBmYWxzZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoc3RhcnQgPT0gZW5kKSB7CisgICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0OworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBPcHRpb25hbCBmcmFjdGlvbiBwYXJ0Cisg
ICAgYyA9ICpzdGFydDsKKyAgICBpZiAoJy4nID09IGMpIHsKKyAgICAgICAgKytzdGFydDsKKyAg
ICAgICAgaWYgKCFSZWFkSW50KHN0YXJ0LCBlbmQsICZzdGFydCwgdHJ1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChzdGFydCA9PSBlbmQpIHsKKyAgICAgICAgICAg
ICp0b2tlbkVuZCA9IHN0YXJ0OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgYyA9ICpzdGFydDsKKyAgICB9CisKKyAgICAvLyBPcHRpb25hbCBleHBvbmVudCBw
YXJ0CisgICAgaWYgKCdlJyA9PSBjIHx8ICdFJyA9PSBjKSB7CisgICAgICAgICsrc3RhcnQ7Cisg
ICAgICAgIGlmIChzdGFydCA9PSBlbmQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGMgPSAqc3RhcnQ7CisgICAgICAgIGlmICgnLScgPT0gYyB8fCAnKycgPT0gYykgeworICAg
ICAgICAgICAgKytzdGFydDsKKyAgICAgICAgICAgIGlmIChzdGFydCA9PSBlbmQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghUmVhZEludChz
dGFydCwgZW5kLCAmc3RhcnQsIHRydWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgICp0b2tlbkVuZCA9IHN0YXJ0OworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFJlYWRIZXhEaWdpdHMoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25z
dCBVQ2hhcioqIHRva2VuRW5kLCBpbnQgZGlnaXRzKQoreworICAgIGlmIChlbmQgLSBzdGFydCA8
IGRpZ2l0cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
ZGlnaXRzOyArK2kpIHsKKyAgICAgICAgVUNoYXIgYyA9ICpzdGFydCsrOworICAgICAgICBpZiAo
ISgoJzAnIDw9IGMgJiYgYyA8PSAnOScpIHx8ICgnYScgPD0gYyAmJiBjIDw9ICdmJykgfHwgKCdB
JyA8PSBjICYmIGMgPD0gJ0YnKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgICp0b2tlbkVuZCA9IHN0YXJ0OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBhcnNl
U3RyaW5nVG9rZW4oY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBV
Q2hhcioqIHRva2VuRW5kKQoreworICAgIHdoaWxlIChzdGFydCA8IGVuZCkgeworICAgICAgICBV
Q2hhciBjID0gKnN0YXJ0Kys7CisgICAgICAgIGlmICgnXFwnID09IGMpIHsKKyAgICAgICAgICAg
IGMgPSAqc3RhcnQrKzsKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZXNjYXBlZCBjaGFy
IGlzIHZhbGlkLgorICAgICAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgICBjYXNlICd4
JzoKKyAgICAgICAgICAgICAgICBpZiAoIVJlYWRIZXhEaWdpdHMoc3RhcnQsIGVuZCwgJnN0YXJ0
LCAyKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSAndSc6CisgICAgICAgICAgICAgICAgaWYgKCFSZWFk
SGV4RGlnaXRzKHN0YXJ0LCBlbmQsICZzdGFydCwgNCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ1xc
JzoKKyAgICAgICAgICAgIGNhc2UgJy8nOgorICAgICAgICAgICAgY2FzZSAnYic6CisgICAgICAg
ICAgICBjYXNlICdmJzoKKyAgICAgICAgICAgIGNhc2UgJ24nOgorICAgICAgICAgICAgY2FzZSAn
cic6CisgICAgICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgIGNhc2UgJ3YnOgorICAgICAg
ICAgICAgY2FzZSAnIic6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIGlmICgnIicgPT0gYykgeworICAgICAgICAgICAgKnRva2VuRW5kID0gc3RhcnQ7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK1Rva2VuIFBhcnNlVG9rZW4oY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBV
Q2hhciogZW5kLCBjb25zdCBVQ2hhcioqIHRva2VuRW5kKQoreworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoU3RyaW5nLCBrTnVsbFN0cmluZywgKCIwIikpOworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoU3RyaW5nLCBrVHJ1ZVN0cmluZywgKCJ0cnVlIikpOworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoU3RyaW5nLCBrRmFsc2VTdHJpbmcsICgiZmFsc2UiKSk7CisKKyAgICBpZiAoc3RhcnQgPj0g
ZW5kKQorICAgICAgICByZXR1cm4gSU5WQUxJRF9UT0tFTjsKKworICAgIHN3aXRjaCAoKnN0YXJ0
KSB7CisgICAgY2FzZSAnbic6CisgICAgICAgIGlmIChQYXJzZUNvbnN0VG9rZW4oc3RhcnQsIGVu
ZCwgdG9rZW5FbmQsIGtOdWxsU3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMX1RPS0VO
OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgJ3QnOgorICAgICAgICBpZiAoUGFyc2VDb25z
dFRva2VuKHN0YXJ0LCBlbmQsIHRva2VuRW5kLCBrVHJ1ZVN0cmluZykpCisgICAgICAgICAgICBy
ZXR1cm4gQk9PTF9UUlVFOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgJ2YnOgorICAgICAg
ICBpZiAoUGFyc2VDb25zdFRva2VuKHN0YXJ0LCBlbmQsIHRva2VuRW5kLCBrRmFsc2VTdHJpbmcp
KQorICAgICAgICAgICAgcmV0dXJuIEJPT0xfRkFMU0U7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSAnWyc6CisgICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0ICsgMTsKKyAgICAgICAgcmV0dXJu
IEFSUkFZX0JFR0lOOworCisgICAgY2FzZSAnXSc6CisgICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0
ICsgMTsKKyAgICAgICAgcmV0dXJuIEFSUkFZX0VORDsKKworICAgIGNhc2UgJywnOgorICAgICAg
ICAqdG9rZW5FbmQgPSBzdGFydCArIDE7CisgICAgICAgIHJldHVybiBMSVNUX1NFUEFSQVRPUjsK
KworICAgIGNhc2UgJ3snOgorICAgICAgICAqdG9rZW5FbmQgPSBzdGFydCArIDE7CisgICAgICAg
IHJldHVybiBPQkpFQ1RfQkVHSU47CisKKyAgICBjYXNlICd9JzoKKyAgICAgICAgKnRva2VuRW5k
ID0gc3RhcnQgKyAxOworICAgICAgICByZXR1cm4gT0JKRUNUX0VORDsKKworICAgIGNhc2UgJzon
OgorICAgICAgICAqdG9rZW5FbmQgPSBzdGFydCArIDE7CisgICAgICAgIHJldHVybiBPQkpFQ1Rf
UEFJUl9TRVBBUkFUT1I7CisKKyAgICBjYXNlICcwJzoKKyAgICBjYXNlICcxJzoKKyAgICBjYXNl
ICcyJzoKKyAgICBjYXNlICczJzoKKyAgICBjYXNlICc0JzoKKyAgICBjYXNlICc1JzoKKyAgICBj
YXNlICc2JzoKKyAgICBjYXNlICc3JzoKKyAgICBjYXNlICc4JzoKKyAgICBjYXNlICc5JzoKKyAg
ICBjYXNlICctJzoKKyAgICAgICAgaWYgKFBhcnNlTnVtYmVyVG9rZW4oc3RhcnQsIGVuZCwgdG9r
ZW5FbmQpKSAKKyAgICAgICAgICAgIHJldHVybiBOVU1CRVI7CisgICAgICAgIGJyZWFrOyAgICAg
ICAgICAgIAorCisgICAgY2FzZSAnIic6CisgICAgICAgIGlmIChQYXJzZVN0cmluZ1Rva2VuKHN0
YXJ0ICsgMSwgZW5kLCB0b2tlbkVuZCkpIAorICAgICAgICAgICAgcmV0dXJuIFNUUklORzsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBJTlZBTElEX1RPS0VOOworfQorCitpbmxp
bmUgaW50IEhleFRvSW50KFVDaGFyIGMpCit7CisgICAgaWYgKCcwJyA8PSBjICYmIGMgPD0gJzkn
KQorICAgICAgICByZXR1cm4gYyAtICcwJzsKKyAgICBpZiAoJ0EnIDw9IGMgJiYgYyA8PSAnRicp
CisgICAgICAgIHJldHVybiBjIC0gJ0EnICsgMTA7CisgICAgaWYgKCdhJyA8PSBjICYmIGMgPD0g
J2YnKQorICAgICAgICByZXR1cm4gYyAtICdhJyArIDEwOworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiAwOworfQorCitib29sIERlY29kZVN0cmluZyhjb25zdCBVQ2hhciog
c3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyogb3V0cHV0KQoreworICAgIHdoaWxlIChz
dGFydCA8IGVuZCkgeworICAgICAgICBVQ2hhciBjID0gKnN0YXJ0Kys7CisgICAgICAgIGlmICgn
XFwnICE9IGMpIHsKKyAgICAgICAgICAgIG91dHB1dC0+YXBwZW5kKGMpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgYyA9ICpzdGFydCsrOworICAgICAgICBzd2l0
Y2ggKGMpIHsKKyAgICAgICAgY2FzZSAnIic6CisgICAgICAgIGNhc2UgJy8nOgorICAgICAgICBj
YXNlICdcXCc6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnYic6CisgICAgICAg
ICAgICBjID0gJ1xiJzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdmJzoKKyAg
ICAgICAgICAgIGMgPSAnXGYnOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ24n
OgorICAgICAgICAgICAgYyA9ICdcbic7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSAncic6CisgICAgICAgICAgICBjID0gJ1xyJzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlICd0JzoKKyAgICAgICAgICAgIGMgPSAnXHQnOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgJ3YnOgorICAgICAgICAgICAgYyA9ICdcdic7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAneCc6CisgICAgICAgICAgICBjID0gKEhleFRvSW50KCpzdGFydCkg
PDwgNCkgKworICAgICAgICAgICAgICAgIEhleFRvSW50KCooc3RhcnQgKyAxKSk7CisgICAgICAg
ICAgICBzdGFydCArPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3UnOgor
ICAgICAgICAgICAgYyA9IChIZXhUb0ludCgqc3RhcnQpIDw8IDEyKSArCisgICAgICAgICAgICAg
ICAgKEhleFRvSW50KCooc3RhcnQgKyAxKSkgPDwgOCkgKworICAgICAgICAgICAgICAgIChIZXhU
b0ludCgqKHN0YXJ0ICsgMikpIDw8IDQpICsKKyAgICAgICAgICAgICAgICBIZXhUb0ludCgqKHN0
YXJ0ICsgMykpOworICAgICAgICAgICAgc3RhcnQgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIG91dHB1dC0+YXBwZW5kKGMpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gQnVpbGRWYWx1ZShjb25zdCBVQ2hhciogc3RhcnQs
IGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyKiogdmFsdWVUb2tlbkVuZCwgaW50IGRlcHRo
KQoreworICAgIGlmIChkZXB0aCA+IGtTdGFja0xpbWl0KQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0OworICAgIGNvbnN0IFVDaGFyKiB0b2tl
bkVuZDsKKyAgICBUb2tlbiB0b2tlbiA9IFBhcnNlVG9rZW4oc3RhcnQsIGVuZCwgJnRva2VuRW5k
KTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgY2FzZSBJTlZBTElEX1RPS0VOOgorICAgICAg
ICByZXR1cm4gMDsKKyAgICBjYXNlIE5VTExfVE9LRU46CisgICAgICAgIHJlc3VsdCA9IEluc3Bl
Y3RvclZhbHVlOjpudWxsKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQk9PTF9UUlVFOgor
ICAgICAgICByZXN1bHQgPSBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUodHJ1ZSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQk9PTF9GQUxTRToKKyAgICAgICAgcmVzdWx0ID0gSW5zcGVj
dG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBO
VU1CRVI6IHsKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgZG91YmxlIHZhbHVlID0gY2hhcmFj
dGVyc1RvRG91YmxlKHN0YXJ0LCB0b2tlbkVuZCAtIHN0YXJ0LCAmb2spOworICAgICAgICBpZiAo
IW9rKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJlc3VsdCA9IEluc3BlY3RvckJh
c2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IFNUUklORzogeworICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgICAgIGJvb2wgb2sgPSBEZWNv
ZGVTdHJpbmcoc3RhcnQgKyAxLCB0b2tlbkVuZCAtIDEsICZ2YWx1ZSk7CisgICAgICAgIGlmICgh
b2spCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmVzdWx0ID0gSW5zcGVjdG9yU3Ry
aW5nOjpjcmVhdGUodmFsdWUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBUlJB
WV9CRUdJTjogeworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFycmF5ID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBzdGFydCA9IHRva2VuRW5kOworICAgICAgICB0
b2tlbiA9IFBhcnNlVG9rZW4oc3RhcnQsIGVuZCwgJnRva2VuRW5kKTsKKyAgICAgICAgd2hpbGUg
KHRva2VuICE9IEFSUkFZX0VORCkgeworICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBhcnJheU5vZGUgPSBCdWlsZFZhbHVlKHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCwgZGVwdGggKyAx
KTsKKyAgICAgICAgICAgIGlmICghYXJyYXlOb2RlKQorICAgICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICAgICAgYXJyYXktPnB1c2goYXJyYXlOb2RlKTsKKworICAgICAgICAgICAgLy8g
QWZ0ZXIgYSBsaXN0IHZhbHVlLCB3ZSBleHBlY3QgYSBjb21tYSBvciB0aGUgZW5kIG9mIHRoZSBs
aXN0LgorICAgICAgICAgICAgc3RhcnQgPSB0b2tlbkVuZDsKKyAgICAgICAgICAgIHRva2VuID0g
UGFyc2VUb2tlbihzdGFydCwgZW5kLCAmdG9rZW5FbmQpOworICAgICAgICAgICAgaWYgKHRva2Vu
ID09IExJU1RfU0VQQVJBVE9SKSB7CisgICAgICAgICAgICAgICAgc3RhcnQgPSB0b2tlbkVuZDsK
KyAgICAgICAgICAgICAgICB0b2tlbiA9IFBhcnNlVG9rZW4oc3RhcnQsIGVuZCwgJnRva2VuRW5k
KTsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gQVJSQVlfRU5EKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4gIT0gQVJSQVlf
RU5EKSB7CisgICAgICAgICAgICAgICAgLy8gVW5leHBlY3RlZCB2YWx1ZSBhZnRlciBsaXN0IHZh
bHVlLiAgQmFpbCBvdXQuCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRva2VuICE9IEFSUkFZX0VORCkKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICByZXN1bHQgPSBhcnJheS5yZWxlYXNlKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIE9CSkVDVF9CRUdJTjogeworICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBvYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAg
ICBzdGFydCA9IHRva2VuRW5kOworICAgICAgICB0b2tlbiA9IFBhcnNlVG9rZW4oc3RhcnQsIGVu
ZCwgJnRva2VuRW5kKTsKKyAgICAgICAgd2hpbGUgKHRva2VuICE9IE9CSkVDVF9FTkQpIHsKKyAg
ICAgICAgICAgIGlmICh0b2tlbiAhPSBTVFJJTkcpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICBTdHJpbmcga2V5OworICAgICAgICAgICAgaWYgKCFEZWNvZGVTdHJpbmco
c3RhcnQgKyAxLCB0b2tlbkVuZCAtIDEsICZrZXkpKQorICAgICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICAgICAgc3RhcnQgPSB0b2tlbkVuZDsKKworICAgICAgICAgICAgdG9rZW4gPSBQ
YXJzZVRva2VuKHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCk7CisgICAgICAgICAgICBpZiAodG9rZW4g
IT0gT0JKRUNUX1BBSVJfU0VQQVJBVE9SKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgc3RhcnQgPSB0b2tlbkVuZDsKKworICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiB2YWx1ZSA9IEJ1aWxkVmFsdWUoc3RhcnQsIGVuZCwgJnRva2VuRW5kLCBkZXB0aCAr
IDEpOworICAgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgIG9iamVjdC0+c2V0KGtleSwgdmFsdWUpOworICAgICAgICAgICAgc3RhcnQg
PSB0b2tlbkVuZDsKKworICAgICAgICAgICAgLy8gQWZ0ZXIgYSBrZXkvdmFsdWUgcGFpciwgd2Ug
ZXhwZWN0IGEgY29tbWEgb3IgdGhlIGVuZCBvZiB0aGUKKyAgICAgICAgICAgIC8vIG9iamVjdC4K
KyAgICAgICAgICAgIHRva2VuID0gUGFyc2VUb2tlbihzdGFydCwgZW5kLCAmdG9rZW5FbmQpOwor
ICAgICAgICAgICAgaWYgKHRva2VuID09IExJU1RfU0VQQVJBVE9SKSB7CisgICAgICAgICAgICAg
ICAgc3RhcnQgPSB0b2tlbkVuZDsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IFBhcnNlVG9rZW4o
c3RhcnQsIGVuZCwgJnRva2VuRW5kKTsKKyAgICAgICAgICAgICAgICAgaWYgKHRva2VuID09IE9C
SkVDVF9FTkQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfSBl
bHNlIGlmICh0b2tlbiAhPSBPQkpFQ1RfRU5EKSB7CisgICAgICAgICAgICAgICAgLy8gVW5leHBl
Y3RlZCB2YWx1ZSBhZnRlciBsYXN0IG9iamVjdCB2YWx1ZS4gIEJhaWwgb3V0LgorICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0
b2tlbiAhPSBPQkpFQ1RfRU5EKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJlc3Vs
dCA9IG9iamVjdC5yZWxlYXNlKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1
bHQ6CisgICAgICAgIC8vIFdlIGdvdCBhIHRva2VuIHRoYXQncyBub3QgYSB2YWx1ZS4KKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorICAgICp2YWx1ZVRva2VuRW5kID0gdG9rZW5FbmQ7CisgICAg
cmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKIGlubGluZSBib29sIGVzY2FwZUNoYXIoVUNo
YXIgYywgVmVjdG9yPFVDaGFyPiogZHN0KQogewogICAgIHN3aXRjaCAoYykgewpAQCAtNzEsNiAr
NDY5LDMyIEBAIGlubGluZSB2b2lkIGRvdWJsZVF1b3RlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3Ry
LCBWZWN0b3I8VUNoYXI+KiBkc3QpCiAgICAgZHN0LT5hcHBlbmQoJyInKTsKIH0KIAorfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCisKK2Jvb2wgSW5zcGVjdG9yVmFsdWU6OmFzQm9vbChib29sKikg
Y29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW5zcGVjdG9yVmFsdWU6OmFz
TnVtYmVyKGRvdWJsZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElu
c3BlY3RvclZhbHVlOjphc1N0cmluZyhTdHJpbmcqKSBjb25zdAoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yVmFsdWU6OnJlYWRK
U09OKGNvbnN0IFN0cmluZyYganNvbikKK3sKKyAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBqc29u
LmNoYXJhY3RlcnMoKSwgKmVuZCA9IGpzb24uY2hhcmFjdGVycygpICsganNvbi5sZW5ndGgoKSwg
KnRva2VuRW5kOworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBCdWlsZFZhbHVl
KHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCwgMCk7CisgICAgaWYgKCF2YWx1ZSB8fCB0b2tlbkVuZCAh
PSBlbmQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiB2YWx1ZS5yZWxlYXNlKCk7Cit9
CisKIFN0cmluZyBJbnNwZWN0b3JWYWx1ZTo6dG9KU09OU3RyaW5nKCkgY29uc3QKIHsKICAgICBW
ZWN0b3I8VUNoYXI+IHJlc3VsdDsKQEAgLTgyLDcgKzUwNiwyMyBAQCBTdHJpbmcgSW5zcGVjdG9y
VmFsdWU6OnRvSlNPTlN0cmluZygpIGNvbnN0CiB2b2lkIEluc3BlY3RvclZhbHVlOjp3cml0ZUpT
T04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdAogewogICAgIEFTU0VSVChtX3R5cGUgPT0g
VHlwZU51bGwpOwotICAgIG91dHB1dC0+YXBwZW5kKCJudWxsIiwgNCk7CisgICAgb3V0cHV0LT5h
cHBlbmQoIjAiLCA0KTsKK30KKworYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc0Jvb2woYm9v
bCogb3V0cHV0KSBjb25zdAoreworICAgIGlmICghaXNUeXBlKFR5cGVCb29sZWFuKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICpvdXRwdXQgPSBtX2Jvb2xWYWx1ZTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcihkb3VibGUqIG91
dHB1dCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVHlwZShUeXBlRG91YmxlKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICpvdXRwdXQgPSBtX2RvdWJsZVZhbHVlOworICAgIHJldHVybiB0cnVl
OwogfQogCiB2b2lkIEluc3BlY3RvckJhc2ljVmFsdWU6OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+
KiBvdXRwdXQpIGNvbnN0CkBAIC05OSwxMiArNTM5LDM0IEBAIHZvaWQgSW5zcGVjdG9yQmFzaWNW
YWx1ZTo6d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3QKICAgICB9CiB9CiAK
K2Jvb2wgSW5zcGVjdG9yU3RyaW5nOjphc1N0cmluZyhTdHJpbmcqIG91dHB1dCkgY29uc3QKK3sK
KyAgICAqb3V0cHV0ID0gbV9zdHJpbmdWYWx1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdm9p
ZCBJbnNwZWN0b3JTdHJpbmc6OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKHR5cGUoKSA9PSBUeXBlU3RyaW5nKTsKICAgICBkb3VibGVRdW90ZVN0
cmluZyhtX3N0cmluZ1ZhbHVlLCBvdXRwdXQpOwogfQogCitQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gSW5zcGVjdG9yT2JqZWN0OjpnZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25z
dAoreworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gZ2V0KG5hbWUpOwor
ICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5pc1R5cGUoVHlwZU9iamVjdCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiBzdGF0aWNfcG9pbnRlcl9jYXN0PEluc3BlY3Rvck9iamVjdD4o
dmFsdWUpOworfQorCitQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0b3JPYmplY3Q6
OmdldChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAgRGljdGlvbmFyeTo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2RhdGEuZmluZChuYW1lKTsKKyAgICBpZiAoaXQgPT0gbV9kYXRhLmVu
ZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaXQtPnNlY29uZDsKK30KKwogdm9p
ZCBJbnNwZWN0b3JPYmplY3Q6OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0
CiB7CiAgICAgb3V0cHV0LT5hcHBlbmQoJ3snKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
LmgKaW5kZXggYTYwYmIyYy4uNTk2NjlmNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
LmgKQEAgLTQzLDYgKzQzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU3RyaW5n
OworY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwogCiBjbGFzcyBJbnNwZWN0b3JWYWx1ZSA6IHB1Ymxp
YyBSZWZDb3VudGVkPEluc3BlY3RvclZhbHVlPiB7CiBwdWJsaWM6CkBAIC02NCw2ICs2NSwxMyBA
QCBwdWJsaWM6CiAgICAgfSBUeXBlOwogCiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9CisgICAgYm9vbCBpc1R5cGUoVHlwZSB0eXBlKSBjb25zdCB7IHJldHVybiBtX3R5
cGUgPT0gdHlwZTsgfQorCisgICAgdmlydHVhbCBib29sIGFzQm9vbChib29sKiBvdXRwdXQpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBhc051bWJlcihkb3VibGUqIG91dHB1dCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIGFzU3RyaW5nKFN0cmluZyogb3V0cHV0KSBjb25zdDsKKworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZWFkSlNPTihjb25zdCBTdHJpbmcmIGpz
b24pOwogCiAgICAgU3RyaW5nIHRvSlNPTlN0cmluZygpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCB3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdDsKQEAgLTkzLDYgKzEwMSw5
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JCYXNpY1Zh
bHVlKHZhbHVlKSk7CiAgICAgfQogCisgICAgdmlydHVhbCBib29sIGFzQm9vbChib29sKiBvdXRw
dXQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBhc051bWJlcihkb3VibGUqIG91dHB1dCkgY29u
c3Q7CisKICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkg
Y29uc3Q7CiAKIHByaXZhdGU6CkBAIC0xMTcsNiArMTI4LDkgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JTdHJpbmcodmFsdWUpKTsKICAgICB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgYXNTdHJpbmcoU3RyaW5nKiBvdXRwdXQpIGNvbnN0OyAgICAK
KwogICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25z
dDsKIAogcHJpdmF0ZToKQEAgLTEyNyw2ICsxNDEsMTMgQEAgcHJpdmF0ZToKIH07CiAKIGNsYXNz
IEluc3BlY3Rvck9iamVjdCA6IHB1YmxpYyBJbnNwZWN0b3JWYWx1ZSB7Citwcml2YXRlOgorICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gPiBEaWN0aW9u
YXJ5OworCitwdWJsaWM6CisgICAgdHlwZWRlZiBEaWN0aW9uYXJ5OjppdGVyYXRvciBpdGVyYXRv
cjsKKyAgICB0eXBlZGVmIERpY3Rpb25hcnk6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9y
OworCiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVh
dGUoKQogICAgIHsKQEAgLTEzOSwxMSArMTYwLDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0
cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0KGNv
bnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4pOwogCisgICAgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGdldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUpIGNv
bnN0OworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGdldChjb25zdCBTdHJpbmcmIG5h
bWUpIGNvbnN0OworCiAgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBv
dXRwdXQpIGNvbnN0OwogCisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2RhdGEuYmVn
aW4oKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fZGF0YS5lbmQoKTsgfQorICAg
IGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmJlZ2luKCk7IH0K
KyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZW5kKCk7IH0K
KwogcHJpdmF0ZToKICAgICBJbnNwZWN0b3JPYmplY3QoKSA6IEluc3BlY3RvclZhbHVlKFR5cGVP
YmplY3QpIHsgfQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gPiBEaWN0aW9uYXJ5OwogICAgIERpY3Rpb25hcnkgbV9kYXRhOwogfTsKIApAQCAtMjEy
LDQgKzI0MCwzIEBAIGlubGluZSB2b2lkIEluc3BlY3RvckFycmF5OjpwdXNoKFBhc3NSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKICNl
bmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JWYWx1ZXNfaCkKLQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57761</attachid>
            <date>2010-06-03 06:31:42 -0700</date>
            <delta_ts>2010-06-03 08:02:44 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>json.reader.diff</filename>
            <type>text/plain</type>
            <size>19637</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzJlNzE5Ni4uYjc3NDExOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMC0wNi0wMiAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbXBsZW1lbnQgSlNPTiBwYXJz
aW5nIGZvciBJbnNwZWN0b3JWYWx1ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQwMDY0CisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFs
dWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JWYWx1ZTo6YXNCb29sKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclZhbHVlOjphc051
bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JWYWx1ZTo6YXNTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVmFsdWU6OnJlYWRKU09OKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckJhc2ljVmFsdWU6OmFzQm9vbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JT
dHJpbmc6OmFzU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdDo6Z2V0
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdDo6Z2V0KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JWYWx1ZTo6aXNUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdDo6
YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT2JqZWN0OjplbmQpOgorCiAyMDEw
LTA2LTAyICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBHdXN0YXZvIE5vcm9uaGEuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcApp
bmRleCBmNTllOTAwLi5mNzdmY2M0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5j
cHAKQEAgLTM1LDYgKzM1LDQxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK25hbWVzcGFj
ZSB7CisKK3N0YXRpYyBjb25zdCBpbnQga1N0YWNrTGltaXQgPSAxMDA7CisKK2VudW0gVG9rZW4g
eworICAgIE9CSkVDVF9CRUdJTiwKKyAgICBPQkpFQ1RfRU5ELAorICAgIEFSUkFZX0JFR0lOLAor
ICAgIEFSUkFZX0VORCwKKyAgICBTVFJJTkcsCisgICAgTlVNQkVSLAorICAgIEJPT0xfVFJVRSwK
KyAgICBCT09MX0ZBTFNFLAorICAgIE5VTExfVE9LRU4sCisgICAgTElTVF9TRVBBUkFUT1IsCisg
ICAgT0JKRUNUX1BBSVJfU0VQQVJBVE9SLAorICAgIElOVkFMSURfVE9LRU4sCit9OworICAgIAor
Y29uc3QgY2hhciogY29uc3Qga051bGxTdHJpbmcgPSAibnVsbCI7Citjb25zdCBjaGFyKiBjb25z
dCBrVHJ1ZVN0cmluZyA9ICJ0cnVlIjsKK2NvbnN0IGNoYXIqIGNvbnN0IGtGYWxzZVN0cmluZyA9
ICJmYWxzZSI7CisKK2Jvb2wgUGFyc2VDb25zdFRva2VuKGNvbnN0IFVDaGFyKiBzdGFydCwgY29u
c3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tlbkVuZCwgY29uc3QgY2hhciogdG9rZW4p
Cit7CisgICAgd2hpbGUgKHN0YXJ0IDwgZW5kICYmICp0b2tlbiAhPSAnXDAnICYmICpzdGFydCsr
ID09ICp0b2tlbisrKSB7CisgICAgfQorICAgIGlmICgqdG9rZW4gIT0gJ1wwJykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICp0b2tlbkVuZCA9IHN0YXJ0OworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFJlYWRJbnQoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBj
b25zdCBVQ2hhcioqIHRva2VuRW5kLCBib29sIGNhbkhhdmVMZWFkaW5nWmVyb3MpCit7CisgICAg
aWYgKHN0YXJ0ID09IGVuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGJvb2wgaGF2ZUxl
YWRpbmdaZXJvID0gJzAnID09ICpzdGFydDsKKyAgICBpbnQgbGVuZ3RoID0gMDsKKyAgICB3aGls
ZSAoc3RhcnQgPCBlbmQgJiYgJzAnIDw9ICpzdGFydCAmJiAqc3RhcnQgPD0gJzknKSB7CisgICAg
ICAgICsrc3RhcnQ7CisgICAgICAgICsrbGVuZ3RoOworICAgIH0KKyAgICBpZiAoIWxlbmd0aCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghY2FuSGF2ZUxlYWRpbmdaZXJvcyAmJiBs
ZW5ndGggPiAxICYmIGhhdmVMZWFkaW5nWmVybykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICp0b2tlbkVuZCA9IHN0YXJ0OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBhcnNlTnVt
YmVyVG9rZW4oY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hh
cioqIHRva2VuRW5kKQoreworICAgIC8vIFdlIGp1c3QgZ3JhYiB0aGUgbnVtYmVyIGhlcmUuICBX
ZSB2YWxpZGF0ZSB0aGUgc2l6ZSBpbiBEZWNvZGVOdW1iZXIuCisgICAgLy8gQWNjb3JkaW5nICAg
dG8gUkZDNDYyNywgYSB2YWxpZCBudW1iZXIgaXM6IFttaW51c10gaW50IFtmcmFjXSBbZXhwXQor
ICAgIGlmIChzdGFydCA9PSBlbmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBVQ2hhciBj
ID0gKnN0YXJ0OworICAgIGlmICgnLScgPT0gYykKKyAgICAgICAgKytzdGFydDsKKworICAgIGlm
ICghUmVhZEludChzdGFydCwgZW5kLCAmc3RhcnQsIGZhbHNlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChzdGFydCA9PSBlbmQpIHsKKyAgICAgICAgKnRva2VuRW5kID0gc3RhcnQ7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIE9wdGlvbmFsIGZyYWN0aW9u
IHBhcnQKKyAgICBjID0gKnN0YXJ0OworICAgIGlmICgnLicgPT0gYykgeworICAgICAgICArK3N0
YXJ0OworICAgICAgICBpZiAoIVJlYWRJbnQoc3RhcnQsIGVuZCwgJnN0YXJ0LCB0cnVlKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHN0YXJ0ID09IGVuZCkgeworICAg
ICAgICAgICAgKnRva2VuRW5kID0gc3RhcnQ7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBjID0gKnN0YXJ0OworICAgIH0KKworICAgIC8vIE9wdGlvbmFsIGV4
cG9uZW50IHBhcnQKKyAgICBpZiAoJ2UnID09IGMgfHwgJ0UnID09IGMpIHsKKyAgICAgICAgKytz
dGFydDsKKyAgICAgICAgaWYgKHN0YXJ0ID09IGVuZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgYyA9ICpzdGFydDsKKyAgICAgICAgaWYgKCctJyA9PSBjIHx8ICcrJyA9PSBj
KSB7CisgICAgICAgICAgICArK3N0YXJ0OworICAgICAgICAgICAgaWYgKHN0YXJ0ID09IGVuZCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFS
ZWFkSW50KHN0YXJ0LCBlbmQsICZzdGFydCwgdHJ1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgKnRva2VuRW5kID0gc3RhcnQ7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgUmVhZEhleERpZ2l0cyhjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBl
bmQsIGNvbnN0IFVDaGFyKiogdG9rZW5FbmQsIGludCBkaWdpdHMpCit7CisgICAgaWYgKGVuZCAt
IHN0YXJ0IDwgZGlnaXRzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBkaWdpdHM7ICsraSkgeworICAgICAgICBVQ2hhciBjID0gKnN0YXJ0Kys7CisgICAg
ICAgIGlmICghKCgnMCcgPD0gYyAmJiBjIDw9ICc5JykgfHwgKCdhJyA8PSBjICYmIGMgPD0gJ2Yn
KSB8fCAoJ0EnIDw9IGMgJiYgYyA8PSAnRicpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgKnRva2VuRW5kID0gc3RhcnQ7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUGFyc2VTdHJpbmdUb2tlbihjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQs
IGNvbnN0IFVDaGFyKiogdG9rZW5FbmQpCit7CisgICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7Cisg
ICAgICAgIFVDaGFyIGMgPSAqc3RhcnQrKzsKKyAgICAgICAgaWYgKCdcXCcgPT0gYykgeworICAg
ICAgICAgICAgYyA9ICpzdGFydCsrOworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBlc2Nh
cGVkIGNoYXIgaXMgdmFsaWQuCisgICAgICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICAg
IGNhc2UgJ3gnOgorICAgICAgICAgICAgICAgIGlmICghUmVhZEhleERpZ2l0cyhzdGFydCwgZW5k
LCAmc3RhcnQsIDIpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgICAgICBp
ZiAoIVJlYWRIZXhEaWdpdHMoc3RhcnQsIGVuZCwgJnN0YXJ0LCA0KSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSAnXFwnOgorICAgICAgICAgICAgY2FzZSAnLyc6CisgICAgICAgICAgICBjYXNlICdiJzoK
KyAgICAgICAgICAgIGNhc2UgJ2YnOgorICAgICAgICAgICAgY2FzZSAnbic6CisgICAgICAgICAg
ICBjYXNlICdyJzoKKyAgICAgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgY2FzZSAndic6
CisgICAgICAgICAgICBjYXNlICciJzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgaWYgKCciJyA9PSBjKSB7CisgICAgICAgICAgICAqdG9rZW5FbmQg
PSBzdGFydDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKworVG9rZW4gUGFyc2VUb2tlbihjb25zdCBVQ2hhciogc3RhcnQs
IGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyKiogdG9rZW5FbmQpCit7CisgICAgaWYgKHN0
YXJ0ID49IGVuZCkKKyAgICAgICAgcmV0dXJuIElOVkFMSURfVE9LRU47CisKKyAgICBzd2l0Y2gg
KCpzdGFydCkgeworICAgIGNhc2UgJ24nOgorICAgICAgICBpZiAoUGFyc2VDb25zdFRva2VuKHN0
YXJ0LCBlbmQsIHRva2VuRW5kLCBrTnVsbFN0cmluZykpCisgICAgICAgICAgICByZXR1cm4gTlVM
TF9UT0tFTjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlICd0JzoKKyAgICAgICAgaWYgKFBh
cnNlQ29uc3RUb2tlbihzdGFydCwgZW5kLCB0b2tlbkVuZCwga1RydWVTdHJpbmcpKQorICAgICAg
ICAgICAgcmV0dXJuIEJPT0xfVFJVRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlICdmJzoK
KyAgICAgICAgaWYgKFBhcnNlQ29uc3RUb2tlbihzdGFydCwgZW5kLCB0b2tlbkVuZCwga0ZhbHNl
U3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVybiBCT09MX0ZBTFNFOworICAgICAgICBicmVhazsK
KworICAgIGNhc2UgJ1snOgorICAgICAgICAqdG9rZW5FbmQgPSBzdGFydCArIDE7CisgICAgICAg
IHJldHVybiBBUlJBWV9CRUdJTjsKKworICAgIGNhc2UgJ10nOgorICAgICAgICAqdG9rZW5FbmQg
PSBzdGFydCArIDE7CisgICAgICAgIHJldHVybiBBUlJBWV9FTkQ7CisKKyAgICBjYXNlICcsJzoK
KyAgICAgICAgKnRva2VuRW5kID0gc3RhcnQgKyAxOworICAgICAgICByZXR1cm4gTElTVF9TRVBB
UkFUT1I7CisKKyAgICBjYXNlICd7JzoKKyAgICAgICAgKnRva2VuRW5kID0gc3RhcnQgKyAxOwor
ICAgICAgICByZXR1cm4gT0JKRUNUX0JFR0lOOworCisgICAgY2FzZSAnfSc6CisgICAgICAgICp0
b2tlbkVuZCA9IHN0YXJ0ICsgMTsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9FTkQ7CisKKyAgICBj
YXNlICc6JzoKKyAgICAgICAgKnRva2VuRW5kID0gc3RhcnQgKyAxOworICAgICAgICByZXR1cm4g
T0JKRUNUX1BBSVJfU0VQQVJBVE9SOworCisgICAgY2FzZSAnMCc6CisgICAgY2FzZSAnMSc6Cisg
ICAgY2FzZSAnMic6CisgICAgY2FzZSAnMyc6CisgICAgY2FzZSAnNCc6CisgICAgY2FzZSAnNSc6
CisgICAgY2FzZSAnNic6CisgICAgY2FzZSAnNyc6CisgICAgY2FzZSAnOCc6CisgICAgY2FzZSAn
OSc6CisgICAgY2FzZSAnLSc6CisgICAgICAgIGlmIChQYXJzZU51bWJlclRva2VuKHN0YXJ0LCBl
bmQsIHRva2VuRW5kKSkgCisgICAgICAgICAgICByZXR1cm4gTlVNQkVSOworICAgICAgICBicmVh
azsgICAgICAgICAgICAKKworICAgIGNhc2UgJyInOgorICAgICAgICBpZiAoUGFyc2VTdHJpbmdU
b2tlbihzdGFydCArIDEsIGVuZCwgdG9rZW5FbmQpKSAKKyAgICAgICAgICAgIHJldHVybiBTVFJJ
Tkc7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gSU5WQUxJRF9UT0tFTjsKK30K
KworaW5saW5lIGludCBIZXhUb0ludChVQ2hhciBjKQoreworICAgIGlmICgnMCcgPD0gYyAmJiBj
IDw9ICc5JykKKyAgICAgICAgcmV0dXJuIGMgLSAnMCc7CisgICAgaWYgKCdBJyA8PSBjICYmIGMg
PD0gJ0YnKQorICAgICAgICByZXR1cm4gYyAtICdBJyArIDEwOworICAgIGlmICgnYScgPD0gYyAm
JiBjIDw9ICdmJykKKyAgICAgICAgcmV0dXJuIGMgLSAnYScgKyAxMDsKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBEZWNvZGVTdHJpbmcoY29uc3Qg
VUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBWZWN0b3I8VUNoYXI+KiBvdXRwdXQpCit7
CisgICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CisgICAgICAgIFVDaGFyIGMgPSAqc3RhcnQrKzsK
KyAgICAgICAgaWYgKCdcXCcgIT0gYykgeworICAgICAgICAgICAgb3V0cHV0LT5hcHBlbmQoYyk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBjID0gKnN0YXJ0Kys7
CisgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICBjYXNlICciJzoKKyAgICAgICAgY2FzZSAn
Lyc6CisgICAgICAgIGNhc2UgJ1xcJzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
ICdiJzoKKyAgICAgICAgICAgIGMgPSAnXGInOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgJ2YnOgorICAgICAgICAgICAgYyA9ICdcZic7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSAnbic6CisgICAgICAgICAgICBjID0gJ1xuJzsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgIGMgPSAnXHInOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgYyA9ICdcdCc7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAndic6CisgICAgICAgICAgICBjID0gJ1x2JzsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd4JzoKKyAgICAgICAgICAgIGMgPSAoSGV4
VG9JbnQoKnN0YXJ0KSA8PCA0KSArCisgICAgICAgICAgICAgICAgSGV4VG9JbnQoKihzdGFydCAr
IDEpKTsKKyAgICAgICAgICAgIHN0YXJ0ICs9IDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAndSc6CisgICAgICAgICAgICBjID0gKEhleFRvSW50KCpzdGFydCkgPDwgMTIpICsK
KyAgICAgICAgICAgICAgICAoSGV4VG9JbnQoKihzdGFydCArIDEpKSA8PCA4KSArCisgICAgICAg
ICAgICAgICAgKEhleFRvSW50KCooc3RhcnQgKyAyKSkgPDwgNCkgKworICAgICAgICAgICAgICAg
IEhleFRvSW50KCooc3RhcnQgKyAzKSk7CisgICAgICAgICAgICBzdGFydCArPSA0OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgb3V0cHV0LT5hcHBlbmQoYyk7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCitib29sIERlY29kZVN0cmluZyhjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0
IFVDaGFyKiBlbmQsIFN0cmluZyogb3V0cHV0KQoreworICAgIGlmIChzdGFydCA9PSBlbmQpIHsK
KyAgICAgICAgKm91dHB1dCA9ICIiOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
aWYgKHN0YXJ0ID4gZW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgVmVjdG9yPFVDaGFy
PiBidWZmZXI7CisgICAgYnVmZmVyLnJlc2VydmVDYXBhY2l0eShlbmQgLSBzdGFydCk7CisgICAg
aWYgKCFEZWNvZGVTdHJpbmcoc3RhcnQsIGVuZCwgJmJ1ZmZlcikpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAqb3V0cHV0ID0gU3RyaW5nKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkp
OyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4g
QnVpbGRWYWx1ZShjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVD
aGFyKiogdmFsdWVUb2tlbkVuZCwgaW50IGRlcHRoKQoreworICAgIGlmIChkZXB0aCA+IGtTdGFj
a0xpbWl0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4g
cmVzdWx0OworICAgIGNvbnN0IFVDaGFyKiB0b2tlbkVuZDsKKyAgICBUb2tlbiB0b2tlbiA9IFBh
cnNlVG9rZW4oc3RhcnQsIGVuZCwgJnRva2VuRW5kKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7Cisg
ICAgY2FzZSBJTlZBTElEX1RPS0VOOgorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIE5VTExf
VE9LRU46CisgICAgICAgIHJlc3VsdCA9IEluc3BlY3RvclZhbHVlOjpudWxsKCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQk9PTF9UUlVFOgorICAgICAgICByZXN1bHQgPSBJbnNwZWN0b3JC
YXNpY1ZhbHVlOjpjcmVhdGUodHJ1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQk9PTF9G
QUxTRToKKyAgICAgICAgcmVzdWx0ID0gSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKGZhbHNl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOVU1CRVI6IHsKKyAgICAgICAgYm9vbCBvazsK
KyAgICAgICAgZG91YmxlIHZhbHVlID0gY2hhcmFjdGVyc1RvRG91YmxlKHN0YXJ0LCB0b2tlbkVu
ZCAtIHN0YXJ0LCAmb2spOworICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHJlc3VsdCA9IEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFNUUklORzogeworICAgICAgICBTdHJpbmcg
dmFsdWU7CisgICAgICAgIGJvb2wgb2sgPSBEZWNvZGVTdHJpbmcoc3RhcnQgKyAxLCB0b2tlbkVu
ZCAtIDEsICZ2YWx1ZSk7CisgICAgICAgIGlmICghb2spCisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmVzdWx0ID0gSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUodmFsdWUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBUlJBWV9CRUdJTjogeworICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGFycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgICAg
ICBzdGFydCA9IHRva2VuRW5kOworICAgICAgICB0b2tlbiA9IFBhcnNlVG9rZW4oc3RhcnQsIGVu
ZCwgJnRva2VuRW5kKTsKKyAgICAgICAgd2hpbGUgKHRva2VuICE9IEFSUkFZX0VORCkgeworICAg
ICAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBhcnJheU5vZGUgPSBCdWlsZFZhbHVlKHN0
YXJ0LCBlbmQsICZ0b2tlbkVuZCwgZGVwdGggKyAxKTsKKyAgICAgICAgICAgIGlmICghYXJyYXlO
b2RlKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgYXJyYXktPnB1c2go
YXJyYXlOb2RlKTsKKworICAgICAgICAgICAgLy8gQWZ0ZXIgYSBsaXN0IHZhbHVlLCB3ZSBleHBl
Y3QgYSBjb21tYSBvciB0aGUgZW5kIG9mIHRoZSBsaXN0LgorICAgICAgICAgICAgc3RhcnQgPSB0
b2tlbkVuZDsKKyAgICAgICAgICAgIHRva2VuID0gUGFyc2VUb2tlbihzdGFydCwgZW5kLCAmdG9r
ZW5FbmQpOworICAgICAgICAgICAgaWYgKHRva2VuID09IExJU1RfU0VQQVJBVE9SKSB7CisgICAg
ICAgICAgICAgICAgc3RhcnQgPSB0b2tlbkVuZDsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IFBh
cnNlVG9rZW4oc3RhcnQsIGVuZCwgJnRva2VuRW5kKTsKKyAgICAgICAgICAgICAgICBpZiAodG9r
ZW4gPT0gQVJSQVlfRU5EKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAodG9rZW4gIT0gQVJSQVlfRU5EKSB7CisgICAgICAgICAgICAgICAgLy8g
VW5leHBlY3RlZCB2YWx1ZSBhZnRlciBsaXN0IHZhbHVlLiAgQmFpbCBvdXQuCisgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRv
a2VuICE9IEFSUkFZX0VORCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXN1bHQg
PSBhcnJheS5yZWxlYXNlKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIE9CSkVD
VF9CRUdJTjogeworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBzdGFydCA9IHRva2VuRW5kOworICAgICAg
ICB0b2tlbiA9IFBhcnNlVG9rZW4oc3RhcnQsIGVuZCwgJnRva2VuRW5kKTsKKyAgICAgICAgd2hp
bGUgKHRva2VuICE9IE9CSkVDVF9FTkQpIHsKKyAgICAgICAgICAgIGlmICh0b2tlbiAhPSBTVFJJ
TkcpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBTdHJpbmcga2V5Owor
ICAgICAgICAgICAgaWYgKCFEZWNvZGVTdHJpbmcoc3RhcnQgKyAxLCB0b2tlbkVuZCAtIDEsICZr
ZXkpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgc3RhcnQgPSB0b2tl
bkVuZDsKKworICAgICAgICAgICAgdG9rZW4gPSBQYXJzZVRva2VuKHN0YXJ0LCBlbmQsICZ0b2tl
bkVuZCk7CisgICAgICAgICAgICBpZiAodG9rZW4gIT0gT0JKRUNUX1BBSVJfU0VQQVJBVE9SKQor
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgc3RhcnQgPSB0b2tlbkVuZDsK
KworICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IEJ1aWxkVmFsdWUo
c3RhcnQsIGVuZCwgJnRva2VuRW5kLCBkZXB0aCArIDEpOworICAgICAgICAgICAgaWYgKCF2YWx1
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIG9iamVjdC0+c2V0KGtl
eSwgdmFsdWUpOworICAgICAgICAgICAgc3RhcnQgPSB0b2tlbkVuZDsKKworICAgICAgICAgICAg
Ly8gQWZ0ZXIgYSBrZXkvdmFsdWUgcGFpciwgd2UgZXhwZWN0IGEgY29tbWEgb3IgdGhlIGVuZCBv
ZiB0aGUKKyAgICAgICAgICAgIC8vIG9iamVjdC4KKyAgICAgICAgICAgIHRva2VuID0gUGFyc2VU
b2tlbihzdGFydCwgZW5kLCAmdG9rZW5FbmQpOworICAgICAgICAgICAgaWYgKHRva2VuID09IExJ
U1RfU0VQQVJBVE9SKSB7CisgICAgICAgICAgICAgICAgc3RhcnQgPSB0b2tlbkVuZDsKKyAgICAg
ICAgICAgICAgICB0b2tlbiA9IFBhcnNlVG9rZW4oc3RhcnQsIGVuZCwgJnRva2VuRW5kKTsKKyAg
ICAgICAgICAgICAgICAgaWYgKHRva2VuID09IE9CSkVDVF9FTkQpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbiAhPSBPQkpFQ1RfRU5E
KSB7CisgICAgICAgICAgICAgICAgLy8gVW5leHBlY3RlZCB2YWx1ZSBhZnRlciBsYXN0IG9iamVj
dCB2YWx1ZS4gIEJhaWwgb3V0LgorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0b2tlbiAhPSBPQkpFQ1RfRU5EKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJlc3VsdCA9IG9iamVjdC5yZWxlYXNlKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFdlIGdvdCBhIHRv
a2VuIHRoYXQncyBub3QgYSB2YWx1ZS4KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgICp2
YWx1ZVRva2VuRW5kID0gdG9rZW5FbmQ7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9
CisKIGlubGluZSBib29sIGVzY2FwZUNoYXIoVUNoYXIgYywgVmVjdG9yPFVDaGFyPiogZHN0KQog
ewogICAgIHN3aXRjaCAoYykgewpAQCAtNzEsNiArNDgzLDQyIEBAIGlubGluZSB2b2lkIGRvdWJs
ZVF1b3RlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyLCBWZWN0b3I8VUNoYXI+KiBkc3QpCiAgICAg
ZHN0LT5hcHBlbmQoJyInKTsKIH0KIAorfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2Jvb2wg
SW5zcGVjdG9yVmFsdWU6OmFzQm9vbChib29sKikgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgSW5zcGVjdG9yVmFsdWU6OmFzTnVtYmVyKGRvdWJsZSopIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEluc3BlY3RvclZhbHVlOjphc1N0cmluZyhTdHJp
bmcqKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IEluc3BlY3RvclZhbHVlOjphc09iamVjdCgpCit7CisgICAgcmV0dXJuIDA7Cit9
CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvclZhbHVlOjphc0FycmF5KCkK
K3sKKyAgICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVj
dG9yVmFsdWU6OnJlYWRKU09OKGNvbnN0IFN0cmluZyYganNvbikKK3sKKyAgICBjb25zdCBVQ2hh
ciogc3RhcnQgPSBqc29uLmNoYXJhY3RlcnMoKSwgKmVuZCA9IGpzb24uY2hhcmFjdGVycygpICsg
anNvbi5sZW5ndGgoKSwgKnRva2VuRW5kOworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFs
dWUgPSBCdWlsZFZhbHVlKHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCwgMCk7CisgICAgaWYgKCF2YWx1
ZSB8fCB0b2tlbkVuZCAhPSBlbmQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiB2YWx1
ZS5yZWxlYXNlKCk7Cit9CisKIFN0cmluZyBJbnNwZWN0b3JWYWx1ZTo6dG9KU09OU3RyaW5nKCkg
Y29uc3QKIHsKICAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKQEAgLTgyLDcgKzUzMCwyMyBAQCBT
dHJpbmcgSW5zcGVjdG9yVmFsdWU6OnRvSlNPTlN0cmluZygpIGNvbnN0CiB2b2lkIEluc3BlY3Rv
clZhbHVlOjp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdAogewogICAgIEFT
U0VSVChtX3R5cGUgPT0gVHlwZU51bGwpOwotICAgIG91dHB1dC0+YXBwZW5kKCJudWxsIiwgNCk7
CisgICAgb3V0cHV0LT5hcHBlbmQoa051bGxTdHJpbmcsIDQpOworfQorCitib29sIEluc3BlY3Rv
ckJhc2ljVmFsdWU6OmFzQm9vbChib29sKiBvdXRwdXQpIGNvbnN0Cit7CisgICAgaWYgKHR5cGUo
KSAhPSBUeXBlQm9vbGVhbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICpvdXRwdXQgPSBt
X2Jvb2xWYWx1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnNwZWN0b3JCYXNpY1Zh
bHVlOjphc051bWJlcihkb3VibGUqIG91dHB1dCkgY29uc3QKK3sKKyAgICBpZiAodHlwZSgpICE9
IFR5cGVEb3VibGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAqb3V0cHV0ID0gbV9kb3Vi
bGVWYWx1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBJbnNwZWN0b3JCYXNpY1ZhbHVl
Ojp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdApAQCAtOTAsMjEgKzU1NCw4
MCBAQCB2b2lkIEluc3BlY3RvckJhc2ljVmFsdWU6OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBv
dXRwdXQpIGNvbnN0CiAgICAgQVNTRVJUKHR5cGUoKSA9PSBUeXBlQm9vbGVhbiB8fCB0eXBlKCkg
PT0gVHlwZURvdWJsZSk7CiAgICAgaWYgKHR5cGUoKSA9PSBUeXBlQm9vbGVhbikgewogICAgICAg
ICBpZiAobV9ib29sVmFsdWUpCi0gICAgICAgICAgICBvdXRwdXQtPmFwcGVuZCgidHJ1ZSIsIDQp
OworICAgICAgICAgICAgb3V0cHV0LT5hcHBlbmQoa1RydWVTdHJpbmcsIDQpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBvdXRwdXQtPmFwcGVuZCgiZmFsc2UiLCA1KTsKKyAgICAgICAgICAg
IG91dHB1dC0+YXBwZW5kKGtGYWxzZVN0cmluZywgNSk7CiAgICAgfSBlbHNlIGlmICh0eXBlKCkg
PT0gVHlwZURvdWJsZSkgewogICAgICAgICBTdHJpbmcgdmFsdWUgPSBTdHJpbmc6OmZvcm1hdCgi
JWYiLCBtX2RvdWJsZVZhbHVlKTsKICAgICAgICAgb3V0cHV0LT5hcHBlbmQodmFsdWUuY2hhcmFj
dGVycygpLCB2YWx1ZS5sZW5ndGgoKSk7CiAgICAgfQogfQogCitib29sIEluc3BlY3RvclN0cmlu
Zzo6YXNTdHJpbmcoU3RyaW5nKiBvdXRwdXQpIGNvbnN0Cit7CisgICAgKm91dHB1dCA9IG1fc3Ry
aW5nVmFsdWU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgSW5zcGVjdG9yU3RyaW5nOjp3
cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdAogewogICAgIEFTU0VSVCh0eXBl
KCkgPT0gVHlwZVN0cmluZyk7CiAgICAgZG91YmxlUXVvdGVTdHJpbmcobV9zdHJpbmdWYWx1ZSwg
b3V0cHV0KTsKIH0KIAorUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3Rvck9iamVj
dDo6YXNPYmplY3QoKQoreworICAgIHJldHVybiB0aGlzOworfQorCitib29sIEluc3BlY3Rvck9i
amVjdDo6Z2V0Qm9vbChjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIG91dHB1dCkgY29uc3QKK3sK
KyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gZ2V0KG5hbWUpOworICAgIGlmICgh
dmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdmFsdWUtPmFzQm9vbChv
dXRwdXQpOworfQorCitib29sIEluc3BlY3Rvck9iamVjdDo6Z2V0TnVtYmVyKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgZG91YmxlKiBvdXRwdXQpIGNvbnN0Cit7CisgICAgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiB2YWx1ZSA9IGdldChuYW1lKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIHZhbHVlLT5hc051bWJlcihvdXRwdXQpOworfQorCitib29sIElu
c3BlY3Rvck9iamVjdDo6Z2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nKiBvdXRw
dXQpIGNvbnN0Cit7CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IGdldChuYW1l
KTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHZh
bHVlLT5hc1N0cmluZyhvdXRwdXQpOworfQorCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
SW5zcGVjdG9yT2JqZWN0OjpnZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAorewor
ICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gZ2V0KG5hbWUpOworICAgIGlm
ICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdmFsdWUtPmFzT2Jq
ZWN0KCk7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3Rvck9iamVjdDo6
Z2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIFBhc3NSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+IHZhbHVlID0gZ2V0KG5hbWUpOworICAgIGlmICghdmFsdWUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdmFsdWUtPmFzQXJyYXkoKTsKK30KKworUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yT2JqZWN0OjpnZXQoY29uc3QgU3RyaW5nJiBu
YW1lKSBjb25zdAoreworICAgIERpY3Rpb25hcnk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRh
LmZpbmQobmFtZSk7CisgICAgaWYgKGl0ID09IG1fZGF0YS5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIGl0LT5zZWNvbmQ7Cit9CisKIHZvaWQgSW5zcGVjdG9yT2JqZWN0Ojp3
cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdAogewogICAgIG91dHB1dC0+YXBw
ZW5kKCd7Jyk7CkBAIC0xMTgsNiArNjQxLDExIEBAIHZvaWQgSW5zcGVjdG9yT2JqZWN0Ojp3cml0
ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdAogICAgIG91dHB1dC0+YXBwZW5kKCd9
Jyk7CiB9CiAKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvckFycmF5Ojphc0Fy
cmF5KCkKK3sKKyAgICByZXR1cm4gdGhpczsKK30KKwogdm9pZCBJbnNwZWN0b3JBcnJheTo6d3Jp
dGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3QKIHsKICAgICBvdXRwdXQtPmFwcGVu
ZCgnWycpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAppbmRleCBhNjBiYjJjLi5lMTQy
MjRjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaApAQCAtNDIsNiArNDIsOCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEluc3BlY3RvckFycmF5OworY2xhc3MgSW5z
cGVjdG9yT2JqZWN0OwogY2xhc3MgU3RyaW5nOwogCiBjbGFzcyBJbnNwZWN0b3JWYWx1ZSA6IHB1
YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvclZhbHVlPiB7CkBAIC02NSw2ICs2NywxNCBAQCBwdWJs
aWM6CiAKICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KIAorICAgIHZp
cnR1YWwgYm9vbCBhc0Jvb2woYm9vbCogb3V0cHV0KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
YXNOdW1iZXIoZG91YmxlKiBvdXRwdXQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBhc1N0cmlu
ZyhTdHJpbmcqIG91dHB1dCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gYXNPYmplY3QoKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGFzQXJyYXkoKTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBy
ZWFkSlNPTihjb25zdCBTdHJpbmcmIGpzb24pOworCiAgICAgU3RyaW5nIHRvSlNPTlN0cmluZygp
IGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0
KSBjb25zdDsKIApAQCAtOTMsNiArMTAzLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEluc3BlY3RvckJhc2ljVmFsdWUodmFsdWUpKTsKICAgICB9CiAKKyAgICB2aXJ0
dWFsIGJvb2wgYXNCb29sKGJvb2wqIG91dHB1dCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGFz
TnVtYmVyKGRvdWJsZSogb3V0cHV0KSBjb25zdDsKKwogICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpT
T04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdDsKIAogcHJpdmF0ZToKQEAgLTExNyw2ICsx
MzAsOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3Bl
Y3RvclN0cmluZyh2YWx1ZSkpOwogICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBhc1N0cmluZyhT
dHJpbmcqIG91dHB1dCkgY29uc3Q7ICAgIAorCiAgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihW
ZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0OwogCiBwcml2YXRlOgpAQCAtMTI3LDYgKzE0Mywx
MyBAQCBwcml2YXRlOgogfTsKIAogY2xhc3MgSW5zcGVjdG9yT2JqZWN0IDogcHVibGljIEluc3Bl
Y3RvclZhbHVlIHsKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRy
PEluc3BlY3RvclZhbHVlPiA+IERpY3Rpb25hcnk7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERp
Y3Rpb25hcnk6Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAgIHR5cGVkZWYgRGljdGlvbmFyeTo6Y29u
c3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZSgpCiAgICAgewpAQCAtMTM0LDE2ICsxNTcsMjkg
QEAgcHVibGljOgogICAgIH0KICAgICB+SW5zcGVjdG9yT2JqZWN0KCkgeyB9CiAKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhc09iamVjdCgpOworCiAgICAgdm9pZCBz
ZXRCb29sKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCk7CiAgICAgdm9pZCBzZXROdW1iZXIoY29u
c3QgU3RyaW5nJiBuYW1lLCBkb3VibGUpOwogICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXQoY29uc3QgU3RyaW5nJiBuYW1l
LCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPik7CiAKKyAgICBib29sIGdldEJvb2woY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sKiBvdXRwdXQpIGNvbnN0OworICAgIGJvb2wgZ2V0TnVtYmVyKGNv
bnN0IFN0cmluZyYgbmFtZSwgZG91YmxlKiBvdXRwdXQpIGNvbnN0OworICAgIGJvb2wgZ2V0U3Ry
aW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nKiBvdXRwdXQpIGNvbnN0OworICAgIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBnZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25z
dDsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBnZXRBcnJheShjb25zdCBTdHJpbmcm
IG5hbWUpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGdldChjb25zdCBT
dHJpbmcmIG5hbWUpIGNvbnN0OworCiAgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihWZWN0b3I8
VUNoYXI+KiBvdXRwdXQpIGNvbnN0OwogCisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBt
X2RhdGEuYmVnaW4oKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fZGF0YS5lbmQo
KTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmJl
Z2luKCk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEu
ZW5kKCk7IH0KKwogcHJpdmF0ZToKICAgICBJbnNwZWN0b3JPYmplY3QoKSA6IEluc3BlY3RvclZh
bHVlKFR5cGVPYmplY3QpIHsgfQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gPiBEaWN0aW9uYXJ5OwogICAgIERpY3Rpb25hcnkgbV9kYXRhOwogfTsK
IApAQCAtMTU1LDYgKzE5MSw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAgfkluc3BlY3RvckFycmF5
KCkgeyB9CiAKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFzQXJyYXko
KTsKKwogICAgIHZvaWQgcHVzaEJvb2woYm9vbCk7CiAgICAgdm9pZCBwdXNoTnVtYmVyKGRvdWJs
ZSk7CiAgICAgdm9pZCBwdXNoU3RyaW5nKGNvbnN0IFN0cmluZyYpOwpAQCAtMjEyLDQgKzI1MCwz
IEBAIGlubGluZSB2b2lkIEluc3BlY3RvckFycmF5OjpwdXNoKFBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IHZhbHVlKQogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKICNlbmRpZiAvLyAh
ZGVmaW5lZChJbnNwZWN0b3JWYWx1ZXNfaCkKLQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57768</attachid>
            <date>2010-06-03 08:02:44 -0700</date>
            <delta_ts>2010-06-07 04:33:25 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>json.reader.diff</filename>
            <type>text/plain</type>
            <size>20063</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzJlNzE5Ni4uYTRhYmY5OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAxMC0wNi0wMyAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbXBsZW1lbnQgSlNPTiBwYXJz
aW5nIGZvciBJbnNwZWN0b3JWYWx1ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQwMDY0CisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFs
dWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JWYWx1ZTo6YXNCb29sKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclZhbHVlOjphc051
bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JWYWx1ZTo6YXNTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVmFsdWU6OmFzT2JqZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclZhbHVlOjphc0FycmF5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clZhbHVlOjpyZWFkSlNPTik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JWYWx1ZTo6d3Jp
dGVKU09OKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhc2ljVmFsdWU6OmFzQm9vbCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcik6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNpY1ZhbHVlOjp3cml0ZUpTT04pOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yU3RyaW5nOjphc1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JPYmplY3Q6OmFzT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9i
amVjdDo6Z2V0Qm9vbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPYmplY3Q6OmdldE51
bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPYmplY3Q6OmdldFN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPYmplY3Q6OmdldE9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JPYmplY3Q6OmdldEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvck9iamVjdDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFycmF5Ojph
c0FycmF5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JPYmplY3Q6OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvck9iamVjdDo6ZW5kKToKKwogMjAxMC0wNi0wMiAgWGFuIExvcGV6ICA8eGxvcGV6QGln
YWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR3VzdGF2byBOb3JvbmhhLgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKaW5kZXggZjU5ZTkwMC4uYmZhZjM1MSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCkBAIC0zNSw2ICszNSw0MDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCituYW1lc3BhY2UgeworCitzdGF0aWMgY29uc3QgaW50IHN0YWNr
TGltaXQgPSAxMDAwOworCitlbnVtIFRva2VuIHsKKyAgICBPQkpFQ1RfQkVHSU4sCisgICAgT0JK
RUNUX0VORCwKKyAgICBBUlJBWV9CRUdJTiwKKyAgICBBUlJBWV9FTkQsCisgICAgU1RSSU5HLAor
ICAgIE5VTUJFUiwKKyAgICBCT09MX1RSVUUsCisgICAgQk9PTF9GQUxTRSwKKyAgICBOVUxMX1RP
S0VOLAorICAgIExJU1RfU0VQQVJBVE9SLAorICAgIE9CSkVDVF9QQUlSX1NFUEFSQVRPUiwKKyAg
ICBJTlZBTElEX1RPS0VOLAorfTsKKyAgICAKK2NvbnN0IGNoYXIqIGNvbnN0IG51bGxTdHJpbmcg
PSAibnVsbCI7Citjb25zdCBjaGFyKiBjb25zdCB0cnVlU3RyaW5nID0gInRydWUiOworY29uc3Qg
Y2hhciogY29uc3QgZmFsc2VTdHJpbmcgPSAiZmFsc2UiOworCitib29sIHBhcnNlQ29uc3RUb2tl
bihjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyKiogdG9r
ZW5FbmQsIGNvbnN0IGNoYXIqIHRva2VuKQoreworICAgIHdoaWxlIChzdGFydCA8IGVuZCAmJiAq
dG9rZW4gIT0gJ1wwJyAmJiAqc3RhcnQrKyA9PSAqdG9rZW4rKykgeyB9CisgICAgaWYgKCp0b2tl
biAhPSAnXDAnKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgKnRva2VuRW5kID0gc3RhcnQ7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgcmVhZEludChjb25zdCBVQ2hhciogc3RhcnQs
IGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyKiogdG9rZW5FbmQsIGJvb2wgY2FuSGF2ZUxl
YWRpbmdaZXJvcykKK3sKKyAgICBpZiAoc3RhcnQgPT0gZW5kKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgYm9vbCBoYXZlTGVhZGluZ1plcm8gPSAnMCcgPT0gKnN0YXJ0OworICAgIGludCBs
ZW5ndGggPSAwOworICAgIHdoaWxlIChzdGFydCA8IGVuZCAmJiAnMCcgPD0gKnN0YXJ0ICYmICpz
dGFydCA8PSAnOScpIHsKKyAgICAgICAgKytzdGFydDsKKyAgICAgICAgKytsZW5ndGg7CisgICAg
fQorICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFjYW5I
YXZlTGVhZGluZ1plcm9zICYmIGxlbmd0aCA+IDEgJiYgaGF2ZUxlYWRpbmdaZXJvKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgKnRva2VuRW5kID0gc3RhcnQ7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgcGFyc2VOdW1iZXJUb2tlbihjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVD
aGFyKiBlbmQsIGNvbnN0IFVDaGFyKiogdG9rZW5FbmQpCit7CisgICAgLy8gV2UganVzdCBncmFi
IHRoZSBudW1iZXIgaGVyZS4gIFdlIHZhbGlkYXRlIHRoZSBzaXplIGluIERlY29kZU51bWJlci4K
KyAgICAvLyBBY2NvcmRpbmcgICB0byBSRkM0NjI3LCBhIHZhbGlkIG51bWJlciBpczogW21pbnVz
XSBpbnQgW2ZyYWNdIFtleHBdCisgICAgaWYgKHN0YXJ0ID09IGVuZCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIFVDaGFyIGMgPSAqc3RhcnQ7CisgICAgaWYgKCctJyA9PSBjKQorICAgICAg
ICArK3N0YXJ0OworCisgICAgaWYgKCFyZWFkSW50KHN0YXJ0LCBlbmQsICZzdGFydCwgZmFsc2Up
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHN0YXJ0ID09IGVuZCkgeworICAgICAg
ICAqdG9rZW5FbmQgPSBzdGFydDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
Ly8gT3B0aW9uYWwgZnJhY3Rpb24gcGFydAorICAgIGMgPSAqc3RhcnQ7CisgICAgaWYgKCcuJyA9
PSBjKSB7CisgICAgICAgICsrc3RhcnQ7CisgICAgICAgIGlmICghcmVhZEludChzdGFydCwgZW5k
LCAmc3RhcnQsIHRydWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
c3RhcnQgPT0gZW5kKSB7CisgICAgICAgICAgICAqdG9rZW5FbmQgPSBzdGFydDsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGMgPSAqc3RhcnQ7CisgICAgfQor
CisgICAgLy8gT3B0aW9uYWwgZXhwb25lbnQgcGFydAorICAgIGlmICgnZScgPT0gYyB8fCAnRScg
PT0gYykgeworICAgICAgICArK3N0YXJ0OworICAgICAgICBpZiAoc3RhcnQgPT0gZW5kKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjID0gKnN0YXJ0OworICAgICAgICBpZiAo
Jy0nID09IGMgfHwgJysnID09IGMpIHsKKyAgICAgICAgICAgICsrc3RhcnQ7CisgICAgICAgICAg
ICBpZiAoc3RhcnQgPT0gZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIXJlYWRJbnQoc3RhcnQsIGVuZCwgJnN0YXJ0LCB0cnVlKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAqdG9rZW5FbmQgPSBzdGFydDsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCByZWFkSGV4RGlnaXRzKGNvbnN0IFVDaGFyKiBz
dGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tlbkVuZCwgaW50IGRpZ2l0
cykKK3sKKyAgICBpZiAoZW5kIC0gc3RhcnQgPCBkaWdpdHMpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGRpZ2l0czsgKytpKSB7CisgICAgICAgIFVDaGFy
IGMgPSAqc3RhcnQrKzsKKyAgICAgICAgaWYgKCEoKCcwJyA8PSBjICYmIGMgPD0gJzknKSB8fCAo
J2EnIDw9IGMgJiYgYyA8PSAnZicpIHx8ICgnQScgPD0gYyAmJiBjIDw9ICdGJykpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAqdG9rZW5FbmQgPSBzdGFydDsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBwYXJzZVN0cmluZ1Rva2VuKGNvbnN0IFVDaGFyKiBzdGFy
dCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tlbkVuZCkKK3sKKyAgICB3aGls
ZSAoc3RhcnQgPCBlbmQpIHsKKyAgICAgICAgVUNoYXIgYyA9ICpzdGFydCsrOworICAgICAgICBp
ZiAoJ1xcJyA9PSBjKSB7CisgICAgICAgICAgICBjID0gKnN0YXJ0Kys7CisgICAgICAgICAgICAv
LyBNYWtlIHN1cmUgdGhlIGVzY2FwZWQgY2hhciBpcyB2YWxpZC4KKyAgICAgICAgICAgIHN3aXRj
aCAoYykgeworICAgICAgICAgICAgY2FzZSAneCc6CisgICAgICAgICAgICAgICAgaWYgKCFyZWFk
SGV4RGlnaXRzKHN0YXJ0LCBlbmQsICZzdGFydCwgMikpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3Un
OgorICAgICAgICAgICAgICAgIGlmICghcmVhZEhleERpZ2l0cyhzdGFydCwgZW5kLCAmc3RhcnQs
IDQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlICdcXCc6CisgICAgICAgICAgICBjYXNlICcvJzoKKyAg
ICAgICAgICAgIGNhc2UgJ2InOgorICAgICAgICAgICAgY2FzZSAnZic6CisgICAgICAgICAgICBj
YXNlICduJzoKKyAgICAgICAgICAgIGNhc2UgJ3InOgorICAgICAgICAgICAgY2FzZSAndCc6Cisg
ICAgICAgICAgICBjYXNlICd2JzoKKyAgICAgICAgICAgIGNhc2UgJyInOgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoJyInID09IGMpIHsKKyAg
ICAgICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0OworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitUb2tlbiBwYXJzZVRva2Vu
KGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tl
bkVuZCkKK3sKKyAgICBpZiAoc3RhcnQgPT0gZW5kKQorICAgICAgICByZXR1cm4gSU5WQUxJRF9U
T0tFTjsKKworICAgIHN3aXRjaCAoKnN0YXJ0KSB7CisgICAgY2FzZSAnbic6CisgICAgICAgIGlm
IChwYXJzZUNvbnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5FbmQsIG51bGxTdHJpbmcpKQorICAg
ICAgICAgICAgcmV0dXJuIE5VTExfVE9LRU47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ3Qn
OgorICAgICAgICBpZiAocGFyc2VDb25zdFRva2VuKHN0YXJ0LCBlbmQsIHRva2VuRW5kLCB0cnVl
U3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVybiBCT09MX1RSVUU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgJ2YnOgorICAgICAgICBpZiAocGFyc2VDb25zdFRva2VuKHN0YXJ0LCBlbmQsIHRv
a2VuRW5kLCBmYWxzZVN0cmluZykpCisgICAgICAgICAgICByZXR1cm4gQk9PTF9GQUxTRTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSAnWyc6CisgICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0ICsg
MTsKKyAgICAgICAgcmV0dXJuIEFSUkFZX0JFR0lOOworICAgIGNhc2UgJ10nOgorICAgICAgICAq
dG9rZW5FbmQgPSBzdGFydCArIDE7CisgICAgICAgIHJldHVybiBBUlJBWV9FTkQ7CisgICAgY2Fz
ZSAnLCc6CisgICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0ICsgMTsKKyAgICAgICAgcmV0dXJuIExJ
U1RfU0VQQVJBVE9SOworICAgIGNhc2UgJ3snOgorICAgICAgICAqdG9rZW5FbmQgPSBzdGFydCAr
IDE7CisgICAgICAgIHJldHVybiBPQkpFQ1RfQkVHSU47CisgICAgY2FzZSAnfSc6CisgICAgICAg
ICp0b2tlbkVuZCA9IHN0YXJ0ICsgMTsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9FTkQ7CisgICAg
Y2FzZSAnOic6CisgICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0ICsgMTsKKyAgICAgICAgcmV0dXJu
IE9CSkVDVF9QQUlSX1NFUEFSQVRPUjsKKyAgICBjYXNlICcwJzoKKyAgICBjYXNlICcxJzoKKyAg
ICBjYXNlICcyJzoKKyAgICBjYXNlICczJzoKKyAgICBjYXNlICc0JzoKKyAgICBjYXNlICc1JzoK
KyAgICBjYXNlICc2JzoKKyAgICBjYXNlICc3JzoKKyAgICBjYXNlICc4JzoKKyAgICBjYXNlICc5
JzoKKyAgICBjYXNlICctJzoKKyAgICAgICAgaWYgKHBhcnNlTnVtYmVyVG9rZW4oc3RhcnQsIGVu
ZCwgdG9rZW5FbmQpKSAKKyAgICAgICAgICAgIHJldHVybiBOVU1CRVI7CisgICAgICAgIGJyZWFr
OyAgICAgICAgICAgIAorICAgIGNhc2UgJyInOgorICAgICAgICBpZiAocGFyc2VTdHJpbmdUb2tl
bihzdGFydCArIDEsIGVuZCwgdG9rZW5FbmQpKSAKKyAgICAgICAgICAgIHJldHVybiBTVFJJTkc7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gSU5WQUxJRF9UT0tFTjsKK30KKwor
aW5saW5lIGludCBoZXhUb0ludChVQ2hhciBjKQoreworICAgIGlmICgnMCcgPD0gYyAmJiBjIDw9
ICc5JykKKyAgICAgICAgcmV0dXJuIGMgLSAnMCc7CisgICAgaWYgKCdBJyA8PSBjICYmIGMgPD0g
J0YnKQorICAgICAgICByZXR1cm4gYyAtICdBJyArIDEwOworICAgIGlmICgnYScgPD0gYyAmJiBj
IDw9ICdmJykKKyAgICAgICAgcmV0dXJuIGMgLSAnYScgKyAxMDsKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBkZWNvZGVTdHJpbmcoY29uc3QgVUNo
YXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBWZWN0b3I8VUNoYXI+KiBvdXRwdXQpCit7Cisg
ICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CisgICAgICAgIFVDaGFyIGMgPSAqc3RhcnQrKzsKKyAg
ICAgICAgaWYgKCdcXCcgIT0gYykgeworICAgICAgICAgICAgb3V0cHV0LT5hcHBlbmQoYyk7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBjID0gKnN0YXJ0Kys7Cisg
ICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICBjYXNlICciJzoKKyAgICAgICAgY2FzZSAnLyc6
CisgICAgICAgIGNhc2UgJ1xcJzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdi
JzoKKyAgICAgICAgICAgIGMgPSAnXGInOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgJ2YnOgorICAgICAgICAgICAgYyA9ICdcZic7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAnbic6CisgICAgICAgICAgICBjID0gJ1xuJzsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgIGMgPSAnXHInOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgYyA9ICdcdCc7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAndic6CisgICAgICAgICAgICBjID0gJ1x2JzsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd4JzoKKyAgICAgICAgICAgIGMgPSAoaGV4VG9J
bnQoKnN0YXJ0KSA8PCA0KSArCisgICAgICAgICAgICAgICAgaGV4VG9JbnQoKihzdGFydCArIDEp
KTsKKyAgICAgICAgICAgIHN0YXJ0ICs9IDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAndSc6CisgICAgICAgICAgICBjID0gKGhleFRvSW50KCpzdGFydCkgPDwgMTIpICsKKyAg
ICAgICAgICAgICAgICAoaGV4VG9JbnQoKihzdGFydCArIDEpKSA8PCA4KSArCisgICAgICAgICAg
ICAgICAgKGhleFRvSW50KCooc3RhcnQgKyAyKSkgPDwgNCkgKworICAgICAgICAgICAgICAgIGhl
eFRvSW50KCooc3RhcnQgKyAzKSk7CisgICAgICAgICAgICBzdGFydCArPSA0OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgb3V0cHV0LT5hcHBlbmQoYyk7CisgICAgfQorICAgIHJldHVybiB0
cnVlOworfQorCitib29sIGRlY29kZVN0cmluZyhjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVD
aGFyKiBlbmQsIFN0cmluZyogb3V0cHV0KQoreworICAgIGlmIChzdGFydCA9PSBlbmQpIHsKKyAg
ICAgICAgKm91dHB1dCA9ICIiOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYg
KHN0YXJ0ID4gZW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgVmVjdG9yPFVDaGFyPiBi
dWZmZXI7CisgICAgYnVmZmVyLnJlc2VydmVDYXBhY2l0eShlbmQgLSBzdGFydCk7CisgICAgaWYg
KCFkZWNvZGVTdHJpbmcoc3RhcnQsIGVuZCwgJmJ1ZmZlcikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAqb3V0cHV0ID0gU3RyaW5nKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpOyAg
ICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gYnVp
bGRWYWx1ZShjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFy
KiogdmFsdWVUb2tlbkVuZCwgaW50IGRlcHRoKQoreworICAgIGlmIChkZXB0aCA+IHN0YWNrTGlt
aXQpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1
bHQ7CisgICAgY29uc3QgVUNoYXIqIHRva2VuRW5kOworICAgIFRva2VuIHRva2VuID0gcGFyc2VU
b2tlbihzdGFydCwgZW5kLCAmdG9rZW5FbmQpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICBj
YXNlIElOVkFMSURfVE9LRU46CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2UgTlVMTF9UT0tF
TjoKKyAgICAgICAgcmVzdWx0ID0gSW5zcGVjdG9yVmFsdWU6Om51bGwoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBCT09MX1RSVUU6CisgICAgICAgIHJlc3VsdCA9IEluc3BlY3RvckJhc2lj
VmFsdWU6OmNyZWF0ZSh0cnVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCT09MX0ZBTFNF
OgorICAgICAgICByZXN1bHQgPSBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUoZmFsc2UpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIE5VTUJFUjogeworICAgICAgICBib29sIG9rOworICAg
ICAgICBkb3VibGUgdmFsdWUgPSBjaGFyYWN0ZXJzVG9Eb3VibGUoc3RhcnQsIHRva2VuRW5kIC0g
c3RhcnQsICZvayk7CisgICAgICAgIGlmICghb2spCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgcmVzdWx0ID0gSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKHZhbHVlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgU1RSSU5HOiB7CisgICAgICAgIFN0cmluZyB2YWx1
ZTsKKyAgICAgICAgYm9vbCBvayA9IGRlY29kZVN0cmluZyhzdGFydCArIDEsIHRva2VuRW5kIC0g
MSwgJnZhbHVlKTsKKyAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICByZXN1bHQgPSBJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZSh2YWx1ZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIEFSUkFZX0JFR0lOOiB7CisgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gYXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIHN0
YXJ0ID0gdG9rZW5FbmQ7CisgICAgICAgIHRva2VuID0gcGFyc2VUb2tlbihzdGFydCwgZW5kLCAm
dG9rZW5FbmQpOworICAgICAgICB3aGlsZSAodG9rZW4gIT0gQVJSQVlfRU5EKSB7CisgICAgICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGFycmF5Tm9kZSA9IGJ1aWxkVmFsdWUoc3RhcnQs
IGVuZCwgJnRva2VuRW5kLCBkZXB0aCArIDEpOworICAgICAgICAgICAgaWYgKCFhcnJheU5vZGUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBhcnJheS0+cHVzaChhcnJh
eU5vZGUpOworCisgICAgICAgICAgICAvLyBBZnRlciBhIGxpc3QgdmFsdWUsIHdlIGV4cGVjdCBh
IGNvbW1hIG9yIHRoZSBlbmQgb2YgdGhlIGxpc3QuCisgICAgICAgICAgICBzdGFydCA9IHRva2Vu
RW5kOworICAgICAgICAgICAgdG9rZW4gPSBwYXJzZVRva2VuKHN0YXJ0LCBlbmQsICZ0b2tlbkVu
ZCk7CisgICAgICAgICAgICBpZiAodG9rZW4gPT0gTElTVF9TRVBBUkFUT1IpIHsKKyAgICAgICAg
ICAgICAgICBzdGFydCA9IHRva2VuRW5kOworICAgICAgICAgICAgICAgIHRva2VuID0gcGFyc2VU
b2tlbihzdGFydCwgZW5kLCAmdG9rZW5FbmQpOworICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9
PSBBUlJBWV9FTkQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAg
fSBlbHNlIGlmICh0b2tlbiAhPSBBUlJBWV9FTkQpIHsKKyAgICAgICAgICAgICAgICAvLyBVbmV4
cGVjdGVkIHZhbHVlIGFmdGVyIGxpc3QgdmFsdWUuICBCYWlsIG91dC4KKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodG9rZW4g
IT0gQVJSQVlfRU5EKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJlc3VsdCA9IGFy
cmF5LnJlbGVhc2UoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgT0JKRUNUX0JF
R0lOOiB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHN0YXJ0ID0gdG9rZW5FbmQ7CisgICAgICAgIHRv
a2VuID0gcGFyc2VUb2tlbihzdGFydCwgZW5kLCAmdG9rZW5FbmQpOworICAgICAgICB3aGlsZSAo
dG9rZW4gIT0gT0JKRUNUX0VORCkgeworICAgICAgICAgICAgaWYgKHRva2VuICE9IFNUUklORykK
KyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIFN0cmluZyBrZXk7CisgICAg
ICAgICAgICBpZiAoIWRlY29kZVN0cmluZyhzdGFydCArIDEsIHRva2VuRW5kIC0gMSwgJmtleSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBzdGFydCA9IHRva2VuRW5k
OworCisgICAgICAgICAgICB0b2tlbiA9IHBhcnNlVG9rZW4oc3RhcnQsIGVuZCwgJnRva2VuRW5k
KTsKKyAgICAgICAgICAgIGlmICh0b2tlbiAhPSBPQkpFQ1RfUEFJUl9TRVBBUkFUT1IpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBzdGFydCA9IHRva2VuRW5kOworCisg
ICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gYnVpbGRWYWx1ZShzdGFy
dCwgZW5kLCAmdG9rZW5FbmQsIGRlcHRoICsgMSk7CisgICAgICAgICAgICBpZiAoIXZhbHVlKQor
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgb2JqZWN0LT5zZXQoa2V5LCB2
YWx1ZSk7CisgICAgICAgICAgICBzdGFydCA9IHRva2VuRW5kOworCisgICAgICAgICAgICAvLyBB
ZnRlciBhIGtleS92YWx1ZSBwYWlyLCB3ZSBleHBlY3QgYSBjb21tYSBvciB0aGUgZW5kIG9mIHRo
ZQorICAgICAgICAgICAgLy8gb2JqZWN0LgorICAgICAgICAgICAgdG9rZW4gPSBwYXJzZVRva2Vu
KHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCk7CisgICAgICAgICAgICBpZiAodG9rZW4gPT0gTElTVF9T
RVBBUkFUT1IpIHsKKyAgICAgICAgICAgICAgICBzdGFydCA9IHRva2VuRW5kOworICAgICAgICAg
ICAgICAgIHRva2VuID0gcGFyc2VUb2tlbihzdGFydCwgZW5kLCAmdG9rZW5FbmQpOworICAgICAg
ICAgICAgICAgICBpZiAodG9rZW4gPT0gT0JKRUNUX0VORCkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuICE9IE9CSkVDVF9FTkQpIHsK
KyAgICAgICAgICAgICAgICAvLyBVbmV4cGVjdGVkIHZhbHVlIGFmdGVyIGxhc3Qgb2JqZWN0IHZh
bHVlLiAgQmFpbCBvdXQuCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRva2VuICE9IE9CSkVDVF9FTkQpCisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgcmVzdWx0ID0gb2JqZWN0LnJlbGVhc2UoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gV2UgZ290IGEgdG9rZW4g
dGhhdCdzIG5vdCBhIHZhbHVlLgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgKnZhbHVl
VG9rZW5FbmQgPSB0b2tlbkVuZDsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKwog
aW5saW5lIGJvb2wgZXNjYXBlQ2hhcihVQ2hhciBjLCBWZWN0b3I8VUNoYXI+KiBkc3QpCiB7CiAg
ICAgc3dpdGNoIChjKSB7CkBAIC03MSw2ICs0NzIsNDQgQEAgaW5saW5lIHZvaWQgZG91YmxlUXVv
dGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIsIFZlY3RvcjxVQ2hhcj4qIGRzdCkKICAgICBkc3Qt
PmFwcGVuZCgnIicpOwogfQogCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworYm9vbCBJbnNw
ZWN0b3JWYWx1ZTo6YXNCb29sKGJvb2wqKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBJbnNwZWN0b3JWYWx1ZTo6YXNOdW1iZXIoZG91YmxlKikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW5zcGVjdG9yVmFsdWU6OmFzU3RyaW5nKFN0cmluZyop
IGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gSW5zcGVjdG9yVmFsdWU6OmFzT2JqZWN0KCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwor
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yVmFsdWU6OmFzQXJyYXkoKQorewor
ICAgIHJldHVybiAwOworfQorCitQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0b3JW
YWx1ZTo6cmVhZEpTT04oY29uc3QgU3RyaW5nJiBqc29uKQoreworICAgIGNvbnN0IFVDaGFyKiBz
dGFydCA9IGpzb24uY2hhcmFjdGVycygpOworICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBqc29uLmNo
YXJhY3RlcnMoKSArIGpzb24ubGVuZ3RoKCk7CisgICAgY29uc3QgVUNoYXIgKnRva2VuRW5kOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBidWlsZFZhbHVlKHN0YXJ0LCBlbmQs
ICZ0b2tlbkVuZCwgMCk7CisgICAgaWYgKCF2YWx1ZSB8fCB0b2tlbkVuZCAhPSBlbmQpCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiB2YWx1ZS5yZWxlYXNlKCk7Cit9CisKIFN0cmluZyBJ
bnNwZWN0b3JWYWx1ZTo6dG9KU09OU3RyaW5nKCkgY29uc3QKIHsKICAgICBWZWN0b3I8VUNoYXI+
IHJlc3VsdDsKQEAgLTgyLDcgKzUyMSwyMyBAQCBTdHJpbmcgSW5zcGVjdG9yVmFsdWU6OnRvSlNP
TlN0cmluZygpIGNvbnN0CiB2b2lkIEluc3BlY3RvclZhbHVlOjp3cml0ZUpTT04oVmVjdG9yPFVD
aGFyPiogb3V0cHV0KSBjb25zdAogewogICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZU51bGwpOwot
ICAgIG91dHB1dC0+YXBwZW5kKCJudWxsIiwgNCk7CisgICAgb3V0cHV0LT5hcHBlbmQobnVsbFN0
cmluZywgNCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNCb29sKGJvb2wqIG91
dHB1dCkgY29uc3QKK3sKKyAgICBpZiAodHlwZSgpICE9IFR5cGVCb29sZWFuKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgKm91dHB1dCA9IG1fYm9vbFZhbHVlOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKGRvdWJsZSogb3V0cHV0
KSBjb25zdAoreworICAgIGlmICh0eXBlKCkgIT0gVHlwZURvdWJsZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICpvdXRwdXQgPSBtX2RvdWJsZVZhbHVlOworICAgIHJldHVybiB0cnVlOwog
fQogCiB2b2lkIEluc3BlY3RvckJhc2ljVmFsdWU6OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBv
dXRwdXQpIGNvbnN0CkBAIC05MCwyMSArNTQ1LDgwIEBAIHZvaWQgSW5zcGVjdG9yQmFzaWNWYWx1
ZTo6d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3QKICAgICBBU1NFUlQodHlw
ZSgpID09IFR5cGVCb29sZWFuIHx8IHR5cGUoKSA9PSBUeXBlRG91YmxlKTsKICAgICBpZiAodHlw
ZSgpID09IFR5cGVCb29sZWFuKSB7CiAgICAgICAgIGlmIChtX2Jvb2xWYWx1ZSkKLSAgICAgICAg
ICAgIG91dHB1dC0+YXBwZW5kKCJ0cnVlIiwgNCk7CisgICAgICAgICAgICBvdXRwdXQtPmFwcGVu
ZCh0cnVlU3RyaW5nLCA0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgb3V0cHV0LT5hcHBl
bmQoImZhbHNlIiwgNSk7CisgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZChmYWxzZVN0cmluZywg
NSk7CiAgICAgfSBlbHNlIGlmICh0eXBlKCkgPT0gVHlwZURvdWJsZSkgewogICAgICAgICBTdHJp
bmcgdmFsdWUgPSBTdHJpbmc6OmZvcm1hdCgiJWYiLCBtX2RvdWJsZVZhbHVlKTsKICAgICAgICAg
b3V0cHV0LT5hcHBlbmQodmFsdWUuY2hhcmFjdGVycygpLCB2YWx1ZS5sZW5ndGgoKSk7CiAgICAg
fQogfQogCitib29sIEluc3BlY3RvclN0cmluZzo6YXNTdHJpbmcoU3RyaW5nKiBvdXRwdXQpIGNv
bnN0Cit7CisgICAgKm91dHB1dCA9IG1fc3RyaW5nVmFsdWU7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKIHZvaWQgSW5zcGVjdG9yU3RyaW5nOjp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0
KSBjb25zdAogewogICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlwZVN0cmluZyk7CiAgICAgZG91Ymxl
UXVvdGVTdHJpbmcobV9zdHJpbmdWYWx1ZSwgb3V0cHV0KTsKIH0KIAorUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IEluc3BlY3Rvck9iamVjdDo6YXNPYmplY3QoKQoreworICAgIHJldHVybiB0
aGlzOworfQorCitib29sIEluc3BlY3Rvck9iamVjdDo6Z2V0Qm9vbChjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wqIG91dHB1dCkgY29uc3QKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZh
bHVlID0gZ2V0KG5hbWUpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gdmFsdWUtPmFzQm9vbChvdXRwdXQpOworfQorCitib29sIEluc3BlY3Rvck9i
amVjdDo6Z2V0TnVtYmVyKGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlKiBvdXRwdXQpIGNvbnN0
Cit7CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IGdldChuYW1lKTsKKyAgICBp
ZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHZhbHVlLT5hc051
bWJlcihvdXRwdXQpOworfQorCitib29sIEluc3BlY3Rvck9iamVjdDo6Z2V0U3RyaW5nKGNvbnN0
IFN0cmluZyYgbmFtZSwgU3RyaW5nKiBvdXRwdXQpIGNvbnN0Cit7CisgICAgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiB2YWx1ZSA9IGdldChuYW1lKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHZhbHVlLT5hc1N0cmluZyhvdXRwdXQpOworfQorCitQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yT2JqZWN0OjpnZXRPYmplY3QoY29u
c3QgU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IHZhbHVlID0gZ2V0KG5hbWUpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gdmFsdWUtPmFzT2JqZWN0KCk7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IEluc3BlY3Rvck9iamVjdDo6Z2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lKSBj
b25zdAoreworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gZ2V0KG5hbWUp
OworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdmFs
dWUtPmFzQXJyYXkoKTsKK30KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9y
T2JqZWN0OjpnZXQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIERpY3Rpb25hcnk6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ID09IG1f
ZGF0YS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGl0LT5zZWNvbmQ7Cit9
CisKIHZvaWQgSW5zcGVjdG9yT2JqZWN0Ojp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0
KSBjb25zdAogewogICAgIG91dHB1dC0+YXBwZW5kKCd7Jyk7CkBAIC0xMTgsNiArNjMyLDExIEBA
IHZvaWQgSW5zcGVjdG9yT2JqZWN0Ojp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBj
b25zdAogICAgIG91dHB1dC0+YXBwZW5kKCd9Jyk7CiB9CiAKK1Bhc3NSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IEluc3BlY3RvckFycmF5Ojphc0FycmF5KCkKK3sKKyAgICByZXR1cm4gdGhpczsKK30K
Kwogdm9pZCBJbnNwZWN0b3JBcnJheTo6d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkg
Y29uc3QKIHsKICAgICBvdXRwdXQtPmFwcGVuZCgnWycpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaAppbmRleCBhNjBiYjJjLi5lMTQyMjRjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaApAQCAtNDIsNiArNDIsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNz
IEluc3BlY3RvckFycmF5OworY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwogY2xhc3MgU3RyaW5nOwog
CiBjbGFzcyBJbnNwZWN0b3JWYWx1ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvclZhbHVl
PiB7CkBAIC02NSw2ICs2NywxNCBAQCBwdWJsaWM6CiAKICAgICBUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KIAorICAgIHZpcnR1YWwgYm9vbCBhc0Jvb2woYm9vbCogb3V0cHV0
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgYXNOdW1iZXIoZG91YmxlKiBvdXRwdXQpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBhc1N0cmluZyhTdHJpbmcqIG91dHB1dCkgY29uc3Q7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXNPYmplY3QoKTsKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFzQXJyYXkoKTsKKworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZWFkSlNPTihjb25zdCBTdHJpbmcmIGpzb24pOwor
CiAgICAgU3RyaW5nIHRvSlNPTlN0cmluZygpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCB3cml0
ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdDsKIApAQCAtOTMsNiArMTAzLDkgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckJhc2ljVmFsdWUo
dmFsdWUpKTsKICAgICB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgYXNCb29sKGJvb2wqIG91dHB1dCkg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIGFzTnVtYmVyKGRvdWJsZSogb3V0cHV0KSBjb25zdDsK
KwogICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25z
dDsKIAogcHJpdmF0ZToKQEAgLTExNyw2ICsxMzAsOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclN0cmluZyh2YWx1ZSkpOwogICAgIH0KKwor
ICAgIHZpcnR1YWwgYm9vbCBhc1N0cmluZyhTdHJpbmcqIG91dHB1dCkgY29uc3Q7ICAgIAorCiAg
ICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0Owog
CiBwcml2YXRlOgpAQCAtMTI3LDYgKzE0MywxMyBAQCBwcml2YXRlOgogfTsKIAogY2xhc3MgSW5z
cGVjdG9yT2JqZWN0IDogcHVibGljIEluc3BlY3RvclZhbHVlIHsKK3ByaXZhdGU6CisgICAgdHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3RvclZhbHVlPiA+IERpY3Rpb25hcnk7
CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERpY3Rpb25hcnk6Oml0ZXJhdG9yIGl0ZXJhdG9yOwor
ICAgIHR5cGVkZWYgRGljdGlvbmFyeTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisK
IHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZSgp
CiAgICAgewpAQCAtMTM0LDE2ICsxNTcsMjkgQEAgcHVibGljOgogICAgIH0KICAgICB+SW5zcGVj
dG9yT2JqZWN0KCkgeyB9CiAKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBhc09iamVjdCgpOworCiAgICAgdm9pZCBzZXRCb29sKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9v
bCk7CiAgICAgdm9pZCBzZXROdW1iZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUpOwogICAg
IHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJik7CiAgICAg
dm9pZCBzZXQoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPik7
CiAKKyAgICBib29sIGdldEJvb2woY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiBvdXRwdXQpIGNv
bnN0OworICAgIGJvb2wgZ2V0TnVtYmVyKGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlKiBvdXRw
dXQpIGNvbnN0OworICAgIGJvb2wgZ2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5n
KiBvdXRwdXQpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBnZXRPYmpl
Y3QoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBnZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IGdldChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OworCiAgICAgdmly
dHVhbCB2b2lkIHdyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0OwogCisgICAg
aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2RhdGEuYmVnaW4oKTsgfQorICAgIGl0ZXJhdG9y
IGVuZCgpIHsgcmV0dXJuIG1fZGF0YS5lbmQoKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmJlZ2luKCk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBl
bmQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZW5kKCk7IH0KKwogcHJpdmF0ZToKICAgICBJbnNw
ZWN0b3JPYmplY3QoKSA6IEluc3BlY3RvclZhbHVlKFR5cGVPYmplY3QpIHsgfQotICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gPiBEaWN0aW9uYXJ5Owog
ICAgIERpY3Rpb25hcnkgbV9kYXRhOwogfTsKIApAQCAtMTU1LDYgKzE5MSw4IEBAIHB1YmxpYzoK
ICAgICB9CiAgICAgfkluc3BlY3RvckFycmF5KCkgeyB9CiAKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGFzQXJyYXkoKTsKKwogICAgIHZvaWQgcHVzaEJvb2woYm9vbCk7
CiAgICAgdm9pZCBwdXNoTnVtYmVyKGRvdWJsZSk7CiAgICAgdm9pZCBwdXNoU3RyaW5nKGNvbnN0
IFN0cmluZyYpOwpAQCAtMjEyLDQgKzI1MCwzIEBAIGlubGluZSB2b2lkIEluc3BlY3RvckFycmF5
OjpwdXNoKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQogCiAjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUikKICNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JWYWx1ZXNfaCkKLQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>