<?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>88465</bug_id>
          
          <creation_ts>2012-06-06 15:35:47 -0700</creation_ts>
          <short_desc>Don&apos;t rely on weak pointers for eager CodeBlock finalization</short_desc>
          <delta_ts>2012-06-08 11:17:22 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>gustavo</cc>
    
    <cc>philn</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>642896</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-06-06 15:35:47 -0700</bug_when>
    <thetext>Don&apos;t rely on weak pointers for eager CodeBlock finalization</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642996</commentid>
    <comment_count>1</comment_count>
      <attachid>146157</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-06-06 17:27:16 -0700</bug_when>
    <thetext>Created attachment 146157
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643048</commentid>
    <comment_count>2</comment_count>
      <attachid>146157</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-06 18:23:08 -0700</bug_when>
    <thetext>Comment on attachment 146157
Patch

Attachment 146157 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12897991</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643056</commentid>
    <comment_count>3</comment_count>
      <attachid>146157</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-06 18:30:16 -0700</bug_when>
    <thetext>Comment on attachment 146157
Patch

Attachment 146157 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12917030</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643062</commentid>
    <comment_count>4</comment_count>
      <attachid>146157</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-06 18:36:35 -0700</bug_when>
    <thetext>Comment on attachment 146157
Patch

Attachment 146157 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12909127</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643076</commentid>
    <comment_count>5</comment_count>
      <attachid>146157</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-06 18:52:01 -0700</bug_when>
    <thetext>Comment on attachment 146157
Patch

Attachment 146157 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12900995</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643111</commentid>
    <comment_count>6</comment_count>
      <attachid>146157</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-06-06 19:47:35 -0700</bug_when>
    <thetext>Comment on attachment 146157
Patch

Attachment 146157 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12905990</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643708</commentid>
    <comment_count>7</comment_count>
      <attachid>146331</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-06-07 11:12:50 -0700</bug_when>
    <thetext>Created attachment 146331
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643750</commentid>
    <comment_count>8</comment_count>
      <attachid>146331</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-07 11:46:25 -0700</bug_when>
    <thetext>Comment on attachment 146331
Patch

Attachment 146331 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12922225</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643759</commentid>
    <comment_count>9</comment_count>
      <attachid>146345</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-06-07 11:51:49 -0700</bug_when>
    <thetext>Created attachment 146345
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644859</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-06-08 11:17:22 -0700</bug_when>
    <thetext>Committed r119844: &lt;http://trac.webkit.org/changeset/119844&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146157</attachid>
            <date>2012-06-06 17:27:16 -0700</date>
            <delta_ts>2012-06-07 11:12:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88465-20120606172716.patch</filename>
            <type>text/plain</type>
            <size>24028</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE5NjI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg3IEBA
CisyMDEyLTA2LTA2ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgRG9uJ3QgcmVseSBvbiB3ZWFrIHBvaW50ZXJzIGZvciBlYWdlciBDb2RlQmxvY2sgZmluYWxp
emF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
ODQ2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgaXMgaW5jb21wYXRpYmxlIHdpdGggbGF6eSB3ZWFrIHBvaW50ZXIgZmluYWxpemF0aW9uLgor
CisgICAgICAgIEkgY29uc2lkZXJlZCBqdXN0IG1ha2luZyBDb2RlQmxvY2sgZmluYWxpemF0aW9u
IGxhenktZnJpZW5kbHksIGJ1dCBpdAorICAgICAgICB0dXJucyBvdXQgdGhhdCB0aGUgaGVhcCBp
cyBhbHJlYWR5IHdheSB1cCBpbiBDb2RlQmxvY2sncyBidXNpbmVzcyB3aGVuCisgICAgICAgIGl0
IGNvbWVzIHRvIGZpbmFsaXphdGlvbiwgc28gSSBkZWNpZGVkIHRvIGZpbmlzaCB0aGUgam9iIGFu
ZCBtb3ZlIGZ1bGwKKyAgICAgICAgcmVzcG9uc2liaWxpdHkgZm9yIENvZGVCbG9jayBmaW5hbGl6
YXRpb24gaW50byB0aGUgaGVhcC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWY6IE1heWJlIHRoaXMKKyAgICAgICAgd2ls
bCBidWlsZC4KKworICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDogVXBkYXRlZCBmb3Ig
cmVuYW1lLgorCisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6
ZGVsZXRlQWxsQ29tcGlsZWRDb2RlKTogUmVuYW1lZCBmb3IgY29uc2lzdGVuY3kuIEZpeGVkIGEg
YnVnCisgICAgICAgIHdoZXJlIHdlIHdvdWxkIG5vdCBkZWxldGUgY29kZSBmb3IgYSBjb2RlIGJs
b2NrIHRoYXQgaGFkIGJlZW4gcHJldmlvdXNseQorICAgICAgICBqZXR0aXNvbmVkLiBJIGRvbid0
IGtub3cgaWYgdGhpcyBoYXBwZW5zIGluIHByYWN0aWNlIC0tIEkgbW9zdGx5IGRpZAorICAgICAg
ICB0aGlzIHRvIGltcHJvdmUgY29uc2lzdGVuY3kgd2l0aCBkZWxldGVVbm1hcmtlZENvbXBpbGVk
Q29kZS4KKworICAgICAgICAoSlNDOjpIZWFwOjpkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSk6
IE5ldyBmdW5jdGlvbiwgcmVzcG9uc2libGUgZm9yCisgICAgICAgIGVhZ2VyIGZpbmFsaXphdGlv
biBvZiB1bm1hcmtlZCBjb2RlIGJsb2Nrcy4KKworICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0
KTogVXBkYXRlZCBmb3IgcmVuYW1lLiBVcGRhdGVkIHRvIGNhbGwKKyAgICAgICAgZGVsZXRlVW5t
YXJrZWRDb21waWxlZENvZGUoKSwgd2hpY2ggdGFrZXMgY2FyZSBvZiBqZXR0aXNvbmVkIERGRyBj
b2RlCisgICAgICAgIGJsb2NrcyB0b28uCisKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkQ29tcGls
ZWRDb2RlKTogUmVuYW1lZCwgc2luY2UgdGhpcyBwb2ludHMgdG8gYWxsIGNvZGUKKyAgICAgICAg
bm93LCBub3QganVzdCBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAg
ICAgKEhlYXApOiBLZWVwIHRyYWNrIG9mIGFsbCB1c2VyIGNvZGUsIG5vdCBqdXN0IGZ1bmN0aW9u
cy4gVGhpcyBpcyBhCisgICAgICAgIG5lZ2xpZ2libGUgYWRkaXRpb25hbCBvdmVyaGVhZCwgc2lu
Y2UgbW9zdCBjb2RlIGlzIGZ1bmN0aW9uIGNvZGUuCisKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1
dGFibGUuY3BwOgorICAgICAgICAoSlNDOjoqOjpmaW5hbGl6ZSk6IFJlbW92ZWQgdGhlc2UgZnVu
Y3Rpb25zLCBzaW5jZSB3ZSBkb24ndCByZWx5IG9uCisgICAgICAgIHdlYWsgcG9pbnRlciBmaW5h
bGl6YXRpb24gYW55bW9yZS4KKworICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OkZ1
bmN0aW9uRXhlY3V0YWJsZSk6IE1vdmVkIGxpbmtlZC1saXN0IHN0dWZmCisgICAgICAgIGludG8g
YmFzZSBjbGFzcyBzbyBhbGwgZXhlY3V0YWJsZXMgY2FuIGJlIGluIHRoZSBsaXN0LgorCisgICAg
ICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpjbGVhckNvZGUpOgorICAgICAgICAoSlNDOjpQcm9n
cmFtRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRh
YmxlOjpjbGVhckNvZGUpOiBBbGwgd2UgbmVlZCB0byBkbyBpcyBkZWxldGUgb3VyCisgICAgICAg
IENvZGVCbG9jayAtLSB0aGEgd2lsbCBkZWxldGUgYWxsIG9mIGl0cyBpbnRlcm5hbCBkYXRhIHN0
cnVjdHVyZXMuCisKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjbGVhckNvZGVJ
Zk5vdENvbXBpbGluZyk6IEZhY3RvcmVkIG91dCBhIGhlbHBlcgorICAgICAgICBmdW5jdGlvbiB0
byBpbXByb3ZlIGNsYXJpdHkuCisKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUJhc2UpOiBNb3ZlZCBsaW5rZWQtbGlzdCBzdHVmZgorICAg
ICAgICBpbnRvIGJhc2UgY2xhc3Mgc28gYWxsIGV4ZWN1dGFibGVzIGNhbiBiZSBpbiB0aGUgbGlz
dC4KKworICAgICAgICAoSlNDOjpOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAgICAo
TmF0aXZlRXhlY3V0YWJsZSk6CisgICAgICAgIChTY3JpcHRFeGVjdXRhYmxlKToKKyAgICAgICAg
KEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpF
dmFsRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEV2YWxFeGVjdXRhYmxlKToKKyAgICAg
ICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChQcm9ncmFtRXhl
Y3V0YWJsZSk6CisgICAgICAgIChGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpG
dW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSk6IERvbid0IHVzZSBhIGZpbmFsaXplciAtLSB0aGUg
aGVhcAorICAgICAgICB3aWxsIGNhbGwgdXMgYmFjayB0byBkZXN0cm95IG91ciBjb2RlIGJsb2Nr
LgorCisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGlzY2FyZENvZGUpOiBSZW5h
bWVkIHRvIGNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCkKKyAgICAgICAgZm9yIGNsYXJpdHkuCisK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjppc0NvbXBpbGluZyk6IE5ldyBoZWxw
ZXIgZnVuY3Rpb24sIGZvciBjbGFyaXR5LgorCisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFi
bGU6OmNsZWFyQ29kZVZpcnR1YWwpOiBOZXcgaGVscGVyIGZ1bmN0aW9uLCBzaW5jZQorICAgICAg
ICB0aGUgaGVhcCBuZWVkcyB0byBtYWtlIHBvbHltb3JwaGljIGNhbGxzIHRvIGNsZWFyIGNvZGUu
CisKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChKU0M6OlN0
YWNrUHJlc2VydmluZ1JlY29tcGlsZXI6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpEeW5hbWljR2xvYmFsT2JqZWN0U2Nv
cGU6OkR5bmFtaWNHbG9iYWxPYmplY3RTY29wZSk6IFVwZGF0ZWQgZm9yCisgICAgICAgIHJlbmFt
ZXMuCisKIDIwMTItMDYtMDYgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUu
Y29tPgogCiAgICAgICAgIEFzc2lnbmluZyB0byBhIHN0YXRpYyBwcm9wZXJ0eSBzaG91bGQgbm90
IGNoYW5nZSBpdGVyYXRpb24gb3JkZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCShyZXZpc2lvbiAxMTk2MjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLmRlZgkod29ya2luZyBjb3B5KQpAQCAtMTUxLDcgKzE1MSw3IEBAIEVYUE9S
VFMKICAgICA/ZGV0YWNoQERlYnVnZ2VyQEpTQ0BAVUFFWFBBVkpTR2xvYmFsT2JqZWN0QDJAQFoK
ICAgICA/ZGV0YWNoVGhyZWFkQFdURkBAWUFYSUBaCiAgICAgP2RpZFRpbWVPdXRAVGltZW91dENo
ZWNrZXJASlNDQEBRQUVfTlBBVkV4ZWNTdGF0ZUAyQEBaCi0gICAgP2Rpc2NhcmRBbGxDb21waWxl
ZENvZGVASGVhcEBKU0NAQFFBRVhYWgorICAgID9kZWxldGVBbGxDb21waWxlZENvZGVASGVhcEBK
U0NAQFFBRVhYWgogICAgID9kaXNwbGF5TmFtZUBKU0Z1bmN0aW9uQEpTQ0BAUUFFP0JWVVN0cmlu
Z0AyQFBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP2R0b2FAV1RGQEBZQVhRQUROQUFfTkFBSEFBSUBa
CiAgICAgP2R1bXBTYW1wbGVEYXRhQEpTR2xvYmFsRGF0YUBKU0NAQFFBRVhQQVZFeGVjU3RhdGVA
MkBAWgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3Bw
CShyZXZpc2lvbiAxMTk2MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIGlubGluZSB2b2lkIFJl
Y29tcGlsZXI6Om9wZXJhdG9yKCkoSlNDZWwKICAgICAgICAgcmV0dXJuOwogCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gZnVuY3Rpb24tPnNjb3BlKCktPmdsb2JhbE9iamVjdC0+SlNHbG9iYWxPYmpl
Y3Q6Omdsb2JhbEV4ZWMoKTsKLSAgICBleGVjdXRhYmxlLT5kaXNjYXJkQ29kZSgpOworICAgIGV4
ZWN1dGFibGUtPmNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCk7CiAgICAgaWYgKG1fZGVidWdnZXIg
PT0gZnVuY3Rpb24tPnNjb3BlKCktPmdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSkKICAgICAgICAg
bV9zb3VyY2VQcm92aWRlcnMuYWRkKGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCksIGV4
ZWMpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDEx
OTYyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MTcsMTUgKzYxNywzOCBAQCBQYXNzT3duUHRyPFR5cGVDb3VudFNldD4gSGVhcDo6
b2JqZWN0VHlwCiAgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuZm9yRWFjaENlbGw8UmVjb3JkVHlw
ZT4oKTsKIH0KIAotdm9pZCBIZWFwOjpkaXNjYXJkQWxsQ29tcGlsZWRDb2RlKCkKK3ZvaWQgSGVh
cDo6ZGVsZXRlQWxsQ29tcGlsZWRDb2RlKCkKIHsKLSAgICAvLyBJZiBKYXZhU2NyaXB0IGlzIHJ1
bm5pbmcsIGl0J3Mgbm90IHNhZmUgdG8gcmVjb21waWxlLCBzaW5jZSB3ZSdsbCBlbmQKLSAgICAv
LyB1cCB0aHJvd2luZyBhd2F5IGNvZGUgdGhhdCBpcyBsaXZlIG9uIHRoZSBzdGFjay4KKyAgICAv
LyBJZiBKYXZhU2NyaXB0IGlzIHJ1bm5pbmcsIGl0J3Mgbm90IHNhZmUgdG8gZGVsZXRlIGNvZGUs
IHNpbmNlIHdlJ2xsIGVuZAorICAgIC8vIHVwIGRlbGV0aW5nIGNvZGUgdGhhdCBpcyBsaXZlIG9u
IHRoZSBzdGFjay4KICAgICBpZiAobV9nbG9iYWxEYXRhLT5keW5hbWljR2xvYmFsT2JqZWN0KQog
ICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKEZ1bmN0aW9uRXhlY3V0YWJsZSogY3VycmVudCA9
IG1fZnVuY3Rpb25zLmhlYWQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHQoKSkK
LSAgICAgICAgY3VycmVudC0+ZGlzY2FyZENvZGUoKTsKKyAgICBmb3IgKEV4ZWN1dGFibGVCYXNl
KiBjdXJyZW50ID0gbV9jb21waWxlZENvZGUuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3Vy
cmVudC0+bmV4dCgpKSB7CisgICAgICAgIGlmICghY3VycmVudC0+aXNGdW5jdGlvbkV4ZWN1dGFi
bGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBzdGF0aWNfY2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihjdXJyZW50KS0+Y2xlYXJDb2RlSWZOb3RDb21waWxpbmcoKTsKKyAgICB9
CisKKyAgICBtX2RmZ0NvZGVCbG9ja3MuY2xlYXJNYXJrcygpOworICAgIG1fZGZnQ29kZUJsb2Nr
cy5kZWxldGVVbm1hcmtlZEpldHRpc29uZWRDb2RlQmxvY2tzKCk7Cit9CisKK3ZvaWQgSGVhcDo6
ZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKQoreworICAgIEV4ZWN1dGFibGVCYXNlKiBuZXh0
OworICAgIGZvciAoRXhlY3V0YWJsZUJhc2UqIGN1cnJlbnQgPSBtX2NvbXBpbGVkQ29kZS5oZWFk
KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSBjdXJyZW50LT5u
ZXh0KCk7CisgICAgICAgIGlmIChpc01hcmtlZChjdXJyZW50KSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIC8vIFdlIGRvIHRoaXMgYmVjYXVzZSBpdCdzIGEgbWVtb3J5IHNhdmlu
Z3MgYW5kIGJlY2F1c2UgQ29kZUJsb2NrIHJlcXVpcmVzIGVhZ2VyCisgICAgICAgIC8vIGZpbmFs
aXphdGlvbi4KKyAgICAgICAgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZVZpcnR1YWwoY3VycmVu
dCk7CisgICAgICAgIG1fY29tcGlsZWRDb2RlLnJlbW92ZShjdXJyZW50KTsKKyAgICB9CisKKyAg
ICBtX2RmZ0NvZGVCbG9ja3MuZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2NrcygpOwog
fQogCiB2b2lkIEhlYXA6OmNvbGxlY3RBbGxHYXJiYWdlKCkKQEAgLTY1NCw3ICs2NzcsNyBAQCB2
b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAKICAgICBkb3VibGUgbGFz
dEdDU3RhcnRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpOwogICAgIGlmIChsYXN0R0NTdGFydFRp
bWUgLSBtX2xhc3RDb2RlRGlzY2FyZFRpbWUgPiBtaW51dGUpIHsKLSAgICAgICAgZGlzY2FyZEFs
bENvbXBpbGVkQ29kZSgpOworICAgICAgICBkZWxldGVBbGxDb21waWxlZENvZGUoKTsKICAgICAg
ICAgbV9sYXN0Q29kZURpc2NhcmRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpOwogICAgIH0KIApA
QCAtNjc3LDYgKzcwMCw4IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRv
Z2cKICAgICAgICAgbV9vYmplY3RTcGFjZS5yZWFwV2Vha1NldHMoKTsKICAgICB9CiAKKyAgICBK
QVZBU0NSSVBUQ09SRV9HQ19NQVJLRUQoKTsKKwogICAgIHsKICAgICAgICAgR0NQSEFTRShGaW5h
bGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKTsKICAgICAgICAgZmluYWxpemVVbmNvbmRpdGlv
bmFsRmluYWxpemVycygpOwpAQCAtNjg3LDEyICs3MTIsMTAgQEAgdm9pZCBIZWFwOjpjb2xsZWN0
KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgICAgICBtX29iamVjdFNwYWNlLnN3ZWVwV2Vha1Nl
dHMoKTsKICAgICAgICAgbV9nbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuZmluYWxpemVTbWFsbFN0
cmluZ3MoKTsKICAgICB9Ci0gICAgCi0gICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7CiAK
ICAgICB7CiAgICAgICAgIEdDUEhBU0UoRGVsZXRlQ29kZUJsb2Nrcyk7Ci0gICAgICAgIG1fZGZn
Q29kZUJsb2Nrcy5kZWxldGVVbm1hcmtlZEpldHRpc29uZWRDb2RlQmxvY2tzKCk7CisgICAgICAg
IGRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCk7CiAgICAgfQogCiAgICAgaWYgKHN3ZWVwVG9n
Z2xlID09IERvU3dlZXApIHsKQEAgLTc4MiwxNCArODA1LDkgQEAgdm9pZCBIZWFwOjpGaW5hbGl6
ZXJPd25lcjo6ZmluYWxpemUoSGFuZAogICAgIFdlYWtTZXQ6OmRlYWxsb2NhdGUoV2Vha0ltcGw6
OmFzV2Vha0ltcGwoc2xvdCkpOwogfQogCi12b2lkIEhlYXA6OmFkZEZ1bmN0aW9uRXhlY3V0YWJs
ZShGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUpCi17Ci0gICAgbV9mdW5jdGlvbnMuYXBw
ZW5kKGV4ZWN1dGFibGUpOwotfQotCi12b2lkIEhlYXA6OnJlbW92ZUZ1bmN0aW9uRXhlY3V0YWJs
ZShGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUpCit2b2lkIEhlYXA6OmFkZENvbXBpbGVk
Q29kZShFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSkKIHsKLSAgICBtX2Z1bmN0aW9ucy5yZW1v
dmUoZXhlY3V0YWJsZSk7CisgICAgbV9jb21waWxlZENvZGUuYXBwZW5kKGV4ZWN1dGFibGUpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJ
KHJldmlzaW9uIDExOTYyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNs
YXNzIENvcGllZFNwYWNlOwogICAgIGNsYXNzIENvZGVCbG9jazsKLSAgICBjbGFzcyBGdW5jdGlv
bkV4ZWN1dGFibGU7CisgICAgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CiAgICAgY2xhc3MgR0NBY3Rp
dml0eUNhbGxiYWNrOwogICAgIGNsYXNzIEdsb2JhbENvZGVCbG9jazsKICAgICBjbGFzcyBIZWFw
OwpAQCAtMTE1LDggKzExNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHR5cGVkZWYg
dm9pZCAoKkZpbmFsaXplcikoSlNDZWxsKik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgYWRkRmluYWxpemVyKEpTQ2VsbCosIEZpbmFsaXplcik7Ci0gICAgICAgIHZvaWQgYWRkRnVu
Y3Rpb25FeGVjdXRhYmxlKEZ1bmN0aW9uRXhlY3V0YWJsZSopOwotICAgICAgICB2b2lkIHJlbW92
ZUZ1bmN0aW9uRXhlY3V0YWJsZShGdW5jdGlvbkV4ZWN1dGFibGUqKTsKKyAgICAgICAgdm9pZCBh
ZGRDb21waWxlZENvZGUoRXhlY3V0YWJsZUJhc2UqKTsKIAogICAgICAgICB2b2lkIG5vdGlmeUlz
U2FmZVRvQ29sbGVjdCgpIHsgbV9pc1NhZmVUb0NvbGxlY3QgPSB0cnVlOyB9CiAKQEAgLTE1OCw3
ICsxNTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZG91YmxlIGxhc3RHQ0xlbmd0aCgp
IHsgcmV0dXJuIG1fbGFzdEdDTGVuZ3RoOyB9CiAgICAgICAgIHZvaWQgaW5jcmVhc2VMYXN0R0NM
ZW5ndGgoZG91YmxlIGFtb3VudCkgeyBtX2xhc3RHQ0xlbmd0aCArPSBhbW91bnQ7IH0KIAotICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGRpc2NhcmRBbGxDb21waWxlZENvZGUoKTsKKyAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZWxldGVBbGxDb21waWxlZENvZGUoKTsKIAog
ICAgICAgICB2b2lkIGRpZEFsbG9jYXRlKHNpemVfdCk7CiAgICAgICAgIHZvaWQgZGlkQWJhbmRv
bihzaXplX3QpOwpAQCAtMTkzLDYgKzE5Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIG1hcmtUZW1wU29ydFZlY3RvcnMoSGVhcFJvb3RWaXNpdG9yJik7CiAgICAgICAgIHZvaWQg
aGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlv
bmFsRmluYWxpemVycygpOworICAgICAgICB2b2lkIGRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2Rl
KCk7CiAgICAgICAgIAogICAgICAgICBSZWdpc3RlckZpbGUmIHJlZ2lzdGVyRmlsZSgpOwogICAg
ICAgICBCbG9ja0FsbG9jYXRvciYgYmxvY2tBbGxvY2F0b3IoKTsKQEAgLTIzOCw3ICsyMzgsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZG91YmxlIG1fbGFzdEdDTGVuZ3RoOwogICAgICAg
ICBkb3VibGUgbV9sYXN0Q29kZURpc2NhcmRUaW1lOwogCi0gICAgICAgIERvdWJseUxpbmtlZExp
c3Q8RnVuY3Rpb25FeGVjdXRhYmxlPiBtX2Z1bmN0aW9uczsKKyAgICAgICAgRG91Ymx5TGlua2Vk
TGlzdDxFeGVjdXRhYmxlQmFzZT4gbV9jb21waWxlZENvZGU7CiAgICAgfTsKIAogICAgIGlubGlu
ZSBib29sIEhlYXA6OnNob3VsZENvbGxlY3QoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDExOTYyNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw3ICs0Nyw3IEBAIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmRlc3Ryb3koSlNDZWxsKiBjZWwKIH0K
ICNlbmRpZgogCi1pbmxpbmUgdm9pZCBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlKCkKK3ZvaWQg
RXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZSgpCiB7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBtX2pp
dENvZGVGb3JDYWxsLmNsZWFyKCk7CkBAIC05OCwxMSArOTgsNiBAQCBzdGF0aWMgdm9pZCBqZXR0
aXNvbkNvZGVCbG9jayhKU0dsb2JhbERhCiB9CiAjZW5kaWYKIAotdm9pZCBOYXRpdmVFeGVjdXRh
YmxlOjpmaW5hbGl6ZShKU0NlbGwqIGNlbGwpCi17Ci0gICAganNDYXN0PE5hdGl2ZUV4ZWN1dGFi
bGUqPihjZWxsKS0+Y2xlYXJDb2RlKCk7Ci19Ci0KIGNvbnN0IENsYXNzSW5mbyBTY3JpcHRFeGVj
dXRhYmxlOjpzX2luZm8gPSB7ICJTY3JpcHRFeGVjdXRhYmxlIiwgJkV4ZWN1dGFibGVCYXNlOjpz
X2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoU2NyaXB0RXhlY3V0YWJsZSkgfTsKIAog
I2lmIEVOQUJMRShKSVQpCkBAIC0xNDYsOCArMTQxLDYgQEAgRnVuY3Rpb25FeGVjdXRhYmxlOjpG
dW5jdGlvbkV4ZWN1dGFibGUoSgogICAgICwgbV9uYW1lKG5hbWUpCiAgICAgLCBtX2luZmVycmVk
TmFtZShpbmZlcnJlZE5hbWUuaXNOdWxsKCkgPyBnbG9iYWxEYXRhLnByb3BlcnR5TmFtZXMtPmVt
cHR5SWRlbnRpZmllciA6IGluZmVycmVkTmFtZSkKICAgICAsIG1fc3ltYm9sVGFibGUoMCkKLSAg
ICAsIG1fbmV4dCgwKQotICAgICwgbV9wcmV2KDApCiB7CiB9CiAKQEAgLTE1OSw4ICsxNTIsNiBA
QCBGdW5jdGlvbkV4ZWN1dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShFCiAgICAgLCBtX25hbWUo
bmFtZSkKICAgICAsIG1faW5mZXJyZWROYW1lKGluZmVycmVkTmFtZS5pc051bGwoKSA/IGV4ZWMt
Pmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXIgOiBpbmZlcnJlZE5h
bWUpCiAgICAgLCBtX3N5bWJvbFRhYmxlKDApCi0gICAgLCBtX25leHQoMCkKLSAgICAsIG1fcHJl
digwKQogewogfQogCkBAIC0yOTIsMTcgKzI4Myw5IEBAIHZvaWQgRXZhbEV4ZWN1dGFibGU6OnVu
bGlua0NhbGxzKCkKICNlbmRpZgogfQogCi12b2lkIEV2YWxFeGVjdXRhYmxlOjpmaW5hbGl6ZShK
U0NlbGwqIGNlbGwpCi17Ci0gICAganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4oY2VsbCktPmNsZWFy
Q29kZSgpOwotfQotCi1pbmxpbmUgdm9pZCBFdmFsRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKK3Zv
aWQgRXZhbEV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCiB7Ci0gICAgaWYgKG1fZXZhbENvZGVCbG9j
aykgewotICAgICAgICBtX2V2YWxDb2RlQmxvY2stPmNsZWFyRXZhbENhY2hlKCk7Ci0gICAgICAg
IG1fZXZhbENvZGVCbG9jay5jbGVhcigpOwotICAgIH0KKyAgICBtX2V2YWxDb2RlQmxvY2suY2xl
YXIoKTsKICAgICBCYXNlOjpjbGVhckNvZGUoKTsKIH0KIApAQCAtNDI0LDE3ICs0MDcsOSBAQCB2
b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTCiAgICAgICAgIHRoaXNPYmpl
Y3QtPm1fcHJvZ3JhbUNvZGVCbG9jay0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKLXZv
aWQgUHJvZ3JhbUV4ZWN1dGFibGU6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkKLXsKLSAgICBqc0Nh
c3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihjZWxsKS0+Y2xlYXJDb2RlKCk7Ci19Ci0KLWlubGluZSB2
b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpjbGVhckNvZGUoKQordm9pZCBQcm9ncmFtRXhlY3V0YWJs
ZTo6Y2xlYXJDb2RlKCkKIHsKLSAgICBpZiAobV9wcm9ncmFtQ29kZUJsb2NrKSB7Ci0gICAgICAg
IG1fcHJvZ3JhbUNvZGVCbG9jay0+Y2xlYXJFdmFsQ2FjaGUoKTsKLSAgICAgICAgbV9wcm9ncmFt
Q29kZUJsb2NrLmNsZWFyKCk7Ci0gICAgfQorICAgIG1fcHJvZ3JhbUNvZGVCbG9jay5jbGVhcigp
OwogICAgIEJhc2U6OmNsZWFyQ29kZSgpOwogfQogCkBAIC02NDIsMzcgKzYxNywxNyBAQCB2b2lk
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKCiAgICAgICAgIHRoaXNPYmplY3Qt
Pm1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAot
dm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmRpc2NhcmRDb2RlKCkKK3ZvaWQgRnVuY3Rpb25FeGVj
dXRhYmxlOjpjbGVhckNvZGVJZk5vdENvbXBpbGluZygpCiB7Ci0jaWYgRU5BQkxFKEpJVCkKLSAg
ICAvLyBUaGVzZSBmaXJzdCB0d28gY2hlY2tzIGFyZSB0byBoYW5kbGUgdGhlIHJhcmUgY2FzZSB3
aGVyZQotICAgIC8vIHdlIGFyZSB0cnlpbmcgdG8gZXZpY3QgY29kZSBmb3IgYSBmdW5jdGlvbiBk
dXJpbmcgaXRzCi0gICAgLy8gY29kZWdlbi4KLSAgICBpZiAoIW1faml0Q29kZUZvckNhbGwgJiYg
bV9jb2RlQmxvY2tGb3JDYWxsKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX2ppdENvZGVG
b3JDb25zdHJ1Y3QgJiYgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpCisgICAgaWYgKGlzQ29tcGls
aW5nKCkpCiAgICAgICAgIHJldHVybjsKLSNlbmRpZgogICAgIGNsZWFyQ29kZSgpOwogfQogCi12
b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZmluYWxpemUoSlNDZWxsKiBjZWxsKQordm9pZCBGdW5j
dGlvbkV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCiB7Ci0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBl
eGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpOwotICAgIEhlYXA6
OmhlYXAoZXhlY3V0YWJsZSktPnJlbW92ZUZ1bmN0aW9uRXhlY3V0YWJsZShleGVjdXRhYmxlKTsK
LSAgICBleGVjdXRhYmxlLT5jbGVhckNvZGUoKTsKLX0KLQotaW5saW5lIHZvaWQgRnVuY3Rpb25F
eGVjdXRhYmxlOjpjbGVhckNvZGUoKQotewotICAgIGlmIChtX2NvZGVCbG9ja0ZvckNhbGwpIHsK
LSAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLT5jbGVhckV2YWxDYWNoZSgpOwotICAgICAgICBt
X2NvZGVCbG9ja0ZvckNhbGwuY2xlYXIoKTsKLSAgICB9Ci0gICAgaWYgKG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0KSB7Ci0gICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5jbGVhckV2YWxD
YWNoZSgpOwotICAgICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5jbGVhcigpOwotICAgIH0K
KyAgICBtX2NvZGVCbG9ja0ZvckNhbGwuY2xlYXIoKTsKKyAgICBtX2NvZGVCbG9ja0ZvckNvbnN0
cnVjdC5jbGVhcigpOwogICAgIEJhc2U6OmNsZWFyQ29kZSgpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxMTk2MjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU0LDcgKzU0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICBjbGFzcyBFeGVjdXRhYmxlQmFzZSA6IHB1YmxpYyBKU0NlbGwgewor
ICAgIGNsYXNzIEV4ZWN1dGFibGVCYXNlIDogcHVibGljIEpTQ2VsbCwgcHVibGljIERvdWJseUxp
bmtlZExpc3ROb2RlPEV4ZWN1dGFibGVCYXNlPiB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBXVEY6
OkRvdWJseUxpbmtlZExpc3ROb2RlPEV4ZWN1dGFibGVCYXNlPjsKICAgICAgICAgZnJpZW5kIGNs
YXNzIEpJVDsKIAogICAgIHByb3RlY3RlZDoKQEAgLTgwLDYgKzgxLDExIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogI2VuZGlmCiAKKyAg
ICAgICAgYm9vbCBpc0Z1bmN0aW9uRXhlY3V0YWJsZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gRnVuY3Rpb25FeGVjdXRh
YmxlVHlwZTsKKyAgICAgICAgfQorCiAgICAgICAgIGJvb2wgaXNIb3N0RnVuY3Rpb24oKSBjb25z
dAogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoKG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwg
PT0gTlVNX1BBUkFNRVRFUlNfSVNfSE9TVCkgPT0gKG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVj
dCA9PSBOVU1fUEFSQU1FVEVSU19JU19IT1NUKSk7CkBAIC04OCw2ICs5NCw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9i
amVjdCwgcHJvdG8sIFR5cGVJbmZvKENvbXBvdW5kVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsgfQogICAgICAgICAKKyAgICAgICAgdm9pZCBjbGVhckNvZGUoKTsKKwogICAgICAgICBz
dGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCiAgICAgcHJvdGVj
dGVkOgpAQCAtOTcsNiArMTA1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoSklU
KQogICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIHZvaWQgY2xlYXJDb2RlVmlydHVhbChFeGVj
dXRhYmxlQmFzZSopOworCiAgICAgICAgIEpJVENvZGUmIGdlbmVyYXRlZEpJVENvZGVGb3JDYWxs
KCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKG1faml0Q29kZUZvckNhbGwpOwpAQCAt
MTY4LDEyICsxNzgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgRXhlY3V0YWJsZUJhc2UqIG1fcHJldjsKKyAgICAgICAgRXhlY3V0YWJs
ZUJhc2UqIG1fbmV4dDsKKwogICAgICAgICBKSVRDb2RlIG1faml0Q29kZUZvckNhbGw7CiAgICAg
ICAgIEpJVENvZGUgbV9qaXRDb2RlRm9yQ29uc3RydWN0OwogICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrOwogICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2s7CiAjZW5k
aWYKLSAgICAgICAgdm9pZCBjbGVhckNvZGUoKTsKICAgICB9OwogCiAgICAgY2xhc3MgTmF0aXZl
RXhlY3V0YWJsZSA6IHB1YmxpYyBFeGVjdXRhYmxlQmFzZSB7CkBAIC0xOTQsNyArMjA2LDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPE5hdGl2ZUV4ZWN1dGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIE5hdGl2
ZUV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKICAgICAgICAg
ICAgICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBKSVRDb2RlOjpI
b3N0RnVuY3Rpb24oY2FsbFRodW5rKSwgSklUQ29kZTo6SG9zdEZ1bmN0aW9uKGNvbnN0cnVjdFRo
dW5rKSwgaW50cmluc2ljKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGdsb2JhbERhdGEu
aGVhcC5hZGRGaW5hbGl6ZXIoZXhlY3V0YWJsZSwgJmZpbmFsaXplKTsKICAgICAgICAgICAgIHJl
dHVybiBleGVjdXRhYmxlOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTIwNSw3ICsyMTYsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVCghZ2xvYmFsRGF0YS5jYW5Vc2VKSVQo
KSk7CiAgICAgICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8TmF0aXZlRXhlY3V0YWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgTmF0
aXZlRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBmdW5jdGlvbiwgY29uc3RydWN0b3IpOwogICAgICAg
ICAgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgICAg
ICBnbG9iYWxEYXRhLmhlYXAuYWRkRmluYWxpemVyKGV4ZWN1dGFibGUsICZmaW5hbGl6ZSk7CiAg
ICAgICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTsKICAgICAgICAgfQogI2VuZGlmCkBAIC0yNDYs
OCArMjU2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNlbmRpZgogCi0gICAgICAg
IHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTQ2VsbCopOwotIAogICAgIHByaXZhdGU6CiAgICAgICAg
IE5hdGl2ZUV4ZWN1dGFibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlv
biBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpCiAgICAgICAgICAgICA6IEV4
ZWN1dGFibGVCYXNlKGdsb2JhbERhdGEsIGdsb2JhbERhdGEubmF0aXZlRXhlY3V0YWJsZVN0cnVj
dHVyZS5nZXQoKSwgTlVNX1BBUkFNRVRFUlNfSVNfSE9TVCkKQEAgLTMwMyw2ICszMTEsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGdsb2JhbERhdGEpOworICAgICAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLmFkZENvbXBpbGVkQ29k
ZSh0aGlzKTsgLy8gQmFsYW5jZWQgYnkgSGVhcDo6ZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUo
KS4KKwogI2lmIEVOQUJMRShDT0RFQkxPQ0tfU0FNUExJTkcpCiAgICAgICAgICAgICBpZiAoU2Ft
cGxpbmdUb29sKiBzYW1wbGVyID0gZ2xvYmFsRGF0YS5pbnRlcnByZXRlci0+c2FtcGxlcigpKQog
ICAgICAgICAgICAgICAgIHNhbXBsZXItPm5vdGlmeU9mU2NvcGUoZ2xvYmFsRGF0YSwgdGhpcyk7
CkBAIC0zNTgsNyArMzY4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAg
ICAgIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8RXZhbEV4ZWN1dGFibGU+KCpleGVjLT5oZWFwKCkpKSBFdmFsRXhlY3V0YWJsZShleGVjLCBz
b3VyY2UsIGlzSW5TdHJpY3RDb250ZXh0KTsKICAgICAgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlz
aENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgICAgICBleGVjLT5nbG9iYWxE
YXRhKCkuaGVhcC5hZGRGaW5hbGl6ZXIoZXhlY3V0YWJsZSwgJmZpbmFsaXplKTsKICAgICAgICAg
ICAgIHJldHVybiBleGVjdXRhYmxlOwogICAgICAgICB9CiAKQEAgLTM3Nyw5ICszODYsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHVubGlua0NhbGxzKCk7CiAKLSAgICBwcm90
ZWN0ZWQ6CiAgICAgICAgIHZvaWQgY2xlYXJDb2RlKCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGZp
bmFsaXplKEpTQ2VsbCopOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFNjcmlwdEV4
ZWN1dGFibGU6OlN0cnVjdHVyZUZsYWdzOwpAQCAtNDAwLDcgKzQwNyw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB7CiAgICAgICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb2dyYW1FeGVjdXRhYmxlPigqZXhlYy0+
aGVhcCgpKSkgUHJvZ3JhbUV4ZWN1dGFibGUoZXhlYywgc291cmNlKTsKICAgICAgICAgICAgIGV4
ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgICAg
ICBleGVjLT5nbG9iYWxEYXRhKCkuaGVhcC5hZGRGaW5hbGl6ZXIoZXhlY3V0YWJsZSwgJmZpbmFs
aXplKTsKICAgICAgICAgICAgIHJldHVybiBleGVjdXRhYmxlOwogICAgICAgICB9CiAKQEAgLTQ0
Nyw5ICs0NTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgdW5s
aW5rQ2FsbHMoKTsKIAotICAgIHByb3RlY3RlZDoKICAgICAgICAgdm9pZCBjbGVhckNvZGUoKTsK
LSAgICAgICAgc3RhdGljIHZvaWQgZmluYWxpemUoSlNDZWxsKik7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNW
aXNpdENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CkBAIC00NjEs
MTAgKzQ2NSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBPd25QdHI8UHJvZ3JhbUNvZGVC
bG9jaz4gbV9wcm9ncmFtQ29kZUJsb2NrOwogICAgIH07CiAKLSAgICBjbGFzcyBGdW5jdGlvbkV4
ZWN1dGFibGUgOiBwdWJsaWMgU2NyaXB0RXhlY3V0YWJsZSwgcHVibGljIERvdWJseUxpbmtlZExp
c3ROb2RlPEZ1bmN0aW9uRXhlY3V0YWJsZT4geworICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJs
ZSA6IHB1YmxpYyBTY3JpcHRFeGVjdXRhYmxlIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLSAgICAgICAgZnJp
ZW5kIGNsYXNzIFdURjo6RG91Ymx5TGlua2VkTGlzdE5vZGU8RnVuY3Rpb25FeGVjdXRhYmxlPjsK
ICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgU2NyaXB0RXhlY3V0YWJsZSBCYXNlOwogCkBA
IC00NzIsOCArNDc1LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEZ1bmN0aW9uRXhlY3V0YWJsZT4oKmV4ZWMtPmhlYXAoKSkpIEZ1bmN0aW9uRXhlY3V0YWJs
ZShleGVjLCBuYW1lLCBpbmZlcnJlZE5hbWUsIHNvdXJjZSwgZm9yY2VVc2VzQXJndW1lbnRzLCBw
YXJhbWV0ZXJzLCBpc0luU3RyaWN0Q29udGV4dCk7CiAgICAgICAgICAgICBleGVjdXRhYmxlLT5m
aW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUsIGZpcnN0TGluZSwgbGFzdExp
bmUpOwotICAgICAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmhlYXAuYWRkRnVuY3Rpb25FeGVj
dXRhYmxlKGV4ZWN1dGFibGUpOwotICAgICAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmhlYXAu
YWRkRmluYWxpemVyKGV4ZWN1dGFibGUsICZmaW5hbGl6ZSk7CiAgICAgICAgICAgICByZXR1cm4g
ZXhlY3V0YWJsZTsKICAgICAgICAgfQogCkBAIC00ODEsOCArNDgyLDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uRXhlY3V0YWJsZT4oZ2xvYmFs
RGF0YS5oZWFwKSkgRnVuY3Rpb25FeGVjdXRhYmxlKGdsb2JhbERhdGEsIG5hbWUsIGluZmVycmVk
TmFtZSwgc291cmNlLCBmb3JjZVVzZXNBcmd1bWVudHMsIHBhcmFtZXRlcnMsIGlzSW5TdHJpY3RD
b250ZXh0KTsKICAgICAgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEsIG5hbWUsIGZpcnN0TGluZSwgbGFzdExpbmUpOwotICAgICAgICAgICAgZ2xvYmFsRGF0YS5o
ZWFwLmFkZEZ1bmN0aW9uRXhlY3V0YWJsZShleGVjdXRhYmxlKTsKLSAgICAgICAgICAgIGdsb2Jh
bERhdGEuaGVhcC5hZGRGaW5hbGl6ZXIoZXhlY3V0YWJsZSwgJmZpbmFsaXplKTsKICAgICAgICAg
ICAgIHJldHVybiBleGVjdXRhYmxlOwogICAgICAgICB9CiAKQEAgLTYzOSw3ICs2MzgsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgVVN0cmluZyBwYXJhbVN0cmluZygpIGNvbnN0OwogICAg
ICAgICBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiBtX3N5
bWJvbFRhYmxlOyB9CiAKLSAgICAgICAgdm9pZCBkaXNjYXJkQ29kZSgpOworICAgICAgICB2b2lk
IGNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCk7CiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICAgICAgc3RhdGljIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnJvbUdsb2JhbENvZGUoY29uc3QgSWRlbnRpZmllciYsIEV4ZWNTdGF0ZSosIERl
YnVnZ2VyKiwgY29uc3QgU291cmNlQ29kZSYsIEpTT2JqZWN0KiogZXhjZXB0aW9uKTsKICAgICAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKQEAgLTY1
MSwxMCArNjUwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB2b2lkIHVu
bGlua0NhbGxzKCk7CiAKLSAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZvaWQgY2xlYXJDb2RlKCk7
Ci0gICAgICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTQ2VsbCopOwogCisgICAgcHJvdGVjdGVk
OgogICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
Y29uc3QgSWRlbnRpZmllciYgbmFtZSwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQogICAg
ICAgICB7CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKQEAg
LTY3Nyw3ICs2NzUsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoa2lu
ZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKICAgICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdDsKICAgICAgICAgfQotICAgICAgICAKKyAKKyAgICAgICAgYm9vbCBpc0NvbXBp
bGluZygpCisgICAgICAgIHsKKyNpZiBFTkFCTEUoSklUKQorICAgICAgICAgICAgaWYgKCFtX2pp
dENvZGVGb3JDYWxsICYmIG1fY29kZUJsb2NrRm9yQ2FsbCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmICghbV9qaXRDb2RlRm9yQ29uc3RydWN0ICYmIG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlm
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwogICAgICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwg
U2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIHVuc2lnbmVkIG1fbnVt
Q2FwdHVyZWRWYXJpYWJsZXMgOiAzMTsKICAgICAgICAgYm9vbCBtX2ZvcmNlVXNlc0FyZ3VtZW50
cyA6IDE7CkBAIC02ODksOCArNjk4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIElkZW50
aWZpZXIgbV9pbmZlcnJlZE5hbWU7CiAgICAgICAgIFdyaXRlQmFycmllcjxKU1N0cmluZz4gbV9u
YW1lVmFsdWU7CiAgICAgICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOwotICAg
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIG1fbmV4dDsKLSAgICAgICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBtX3ByZXY7CiAgICAgfTsKIAogICAgIGlubGluZSBGdW5jdGlvbkV4ZWN1dGFibGUqIEpT
RnVuY3Rpb246OmpzRXhlY3V0YWJsZSgpIGNvbnN0CkBAIC03MjUsNiArNzMyLDIwIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICByZXR1cm4gZnVuY3Rpb24tPm5hdGl2ZUZ1bmN0aW9uKCkgPT0g
bmF0aXZlRnVuY3Rpb247CiAgICAgfQogCisgICAgaW5saW5lIHZvaWQgRXhlY3V0YWJsZUJhc2U6
OmNsZWFyQ29kZVZpcnR1YWwoRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKGV4ZWN1dGFibGUtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSkg
eworICAgICAgICBjYXNlIEV2YWxFeGVjdXRhYmxlVHlwZToKKyAgICAgICAgICAgIHJldHVybiBq
c0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y2xlYXJDb2RlKCk7CisgICAgICAg
IGNhc2UgUHJvZ3JhbUV4ZWN1dGFibGVUeXBlOgorICAgICAgICAgICAgcmV0dXJuIGpzQ2FzdDxQ
cm9ncmFtRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5jbGVhckNvZGUoKTsKKyAgICAgICAgY2Fz
ZSBGdW5jdGlvbkV4ZWN1dGFibGVUeXBlOgorICAgICAgICAgICAgcmV0dXJuIGpzQ2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y2xlYXJDb2RlKCk7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4ganNDYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihleGVjdXRh
YmxlKS0+Y2xlYXJDb2RlKCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBpbmxpbmUgdm9pZCBT
Y3JpcHRFeGVjdXRhYmxlOjp1bmxpbmtDYWxscygpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHN0
cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiAxMTk2MjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MTksNyArNDE5LDcgQEAgc3RydWN0IFN0YWNrUHJlc2VydmluZ1JlY29tcGlsZXIg
OiBwdWJsaQogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgICAgIGlmIChjdXJyZW50bHlFeGVjdXRp
bmdGdW5jdGlvbnMuY29udGFpbnMoZXhlY3V0YWJsZSkpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGV4ZWN1dGFibGUtPmRpc2NhcmRDb2RlKCk7CisgICAgICAgIGV4ZWN1dGFibGUtPmNs
ZWFyQ29kZUlmTm90Q29tcGlsaW5nKCk7CiAgICAgfQogfTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTE5
NjI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NzEsNyArNDcxLDcgQEAgRHluYW1pY0dsb2JhbE9iamVjdFNj
b3BlOjpEeW5hbWljR2xvYmFsTwogICAgIGlmICghbV9keW5hbWljR2xvYmFsT2JqZWN0U2xvdCkg
ewogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAgICAgICAgIGlmIChFeGVjdXRhYmxlQWxsb2NhdG9y
Ojp1bmRlck1lbW9yeVByZXNzdXJlKCkpCi0gICAgICAgICAgICBnbG9iYWxEYXRhLmhlYXAuZGlz
Y2FyZEFsbENvbXBpbGVkQ29kZSgpOworICAgICAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLmRlbGV0
ZUFsbENvbXBpbGVkQ29kZSgpOwogI2VuZGlmCiAKICAgICAgICAgbV9keW5hbWljR2xvYmFsT2Jq
ZWN0U2xvdCA9IGR5bmFtaWNHbG9iYWxPYmplY3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146331</attachid>
            <date>2012-06-07 11:12:50 -0700</date>
            <delta_ts>2012-06-07 11:51:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88465-20120607111250.patch</filename>
            <type>text/plain</type>
            <size>24028</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE5NjI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg3IEBA
CisyMDEyLTA2LTA2ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgRG9uJ3QgcmVseSBvbiB3ZWFrIHBvaW50ZXJzIGZvciBlYWdlciBDb2RlQmxvY2sgZmluYWxp
emF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
ODQ2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgaXMgaW5jb21wYXRpYmxlIHdpdGggbGF6eSB3ZWFrIHBvaW50ZXIgZmluYWxpemF0aW9uLgor
CisgICAgICAgIEkgY29uc2lkZXJlZCBqdXN0IG1ha2luZyBDb2RlQmxvY2sgZmluYWxpemF0aW9u
IGxhenktZnJpZW5kbHksIGJ1dCBpdAorICAgICAgICB0dXJucyBvdXQgdGhhdCB0aGUgaGVhcCBp
cyBhbHJlYWR5IHdheSB1cCBpbiBDb2RlQmxvY2sncyBidXNpbmVzcyB3aGVuCisgICAgICAgIGl0
IGNvbWVzIHRvIGZpbmFsaXphdGlvbiwgc28gSSBkZWNpZGVkIHRvIGZpbmlzaCB0aGUgam9iIGFu
ZCBtb3ZlIGZ1bGwKKyAgICAgICAgcmVzcG9uc2liaWxpdHkgZm9yIENvZGVCbG9jayBmaW5hbGl6
YXRpb24gaW50byB0aGUgaGVhcC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWY6IE1heWJlIHRoaXMKKyAgICAgICAgd2ls
bCBidWlsZC4KKworICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDogVXBkYXRlZCBmb3Ig
cmVuYW1lLgorCisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6
ZGVsZXRlQWxsQ29tcGlsZWRDb2RlKTogUmVuYW1lZCBmb3IgY29uc2lzdGVuY3kuIEZpeGVkIGEg
YnVnCisgICAgICAgIHdoZXJlIHdlIHdvdWxkIG5vdCBkZWxldGUgY29kZSBmb3IgYSBjb2RlIGJs
b2NrIHRoYXQgaGFkIGJlZW4gcHJldmlvdXNseQorICAgICAgICBqZXR0aXNvbmVkLiBJIGRvbid0
IGtub3cgaWYgdGhpcyBoYXBwZW5zIGluIHByYWN0aWNlIC0tIEkgbW9zdGx5IGRpZAorICAgICAg
ICB0aGlzIHRvIGltcHJvdmUgY29uc2lzdGVuY3kgd2l0aCBkZWxldGVVbm1hcmtlZENvbXBpbGVk
Q29kZS4KKworICAgICAgICAoSlNDOjpIZWFwOjpkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSk6
IE5ldyBmdW5jdGlvbiwgcmVzcG9uc2libGUgZm9yCisgICAgICAgIGVhZ2VyIGZpbmFsaXphdGlv
biBvZiB1bm1hcmtlZCBjb2RlIGJsb2Nrcy4KKworICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0
KTogVXBkYXRlZCBmb3IgcmVuYW1lLiBVcGRhdGVkIHRvIGNhbGwKKyAgICAgICAgZGVsZXRlVW5t
YXJrZWRDb21waWxlZENvZGUoKSwgd2hpY2ggdGFrZXMgY2FyZSBvZiBqZXR0aXNvbmVkIERGRyBj
b2RlCisgICAgICAgIGJsb2NrcyB0b28uCisKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkQ29tcGls
ZWRDb2RlKTogUmVuYW1lZCwgc2luY2UgdGhpcyBwb2ludHMgdG8gYWxsIGNvZGUKKyAgICAgICAg
bm93LCBub3QganVzdCBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAg
ICAgKEhlYXApOiBLZWVwIHRyYWNrIG9mIGFsbCB1c2VyIGNvZGUsIG5vdCBqdXN0IGZ1bmN0aW9u
cy4gVGhpcyBpcyBhCisgICAgICAgIG5lZ2xpZ2libGUgYWRkaXRpb25hbCBvdmVyaGVhZCwgc2lu
Y2UgbW9zdCBjb2RlIGlzIGZ1bmN0aW9uIGNvZGUuCisKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1
dGFibGUuY3BwOgorICAgICAgICAoSlNDOjoqOjpmaW5hbGl6ZSk6IFJlbW92ZWQgdGhlc2UgZnVu
Y3Rpb25zLCBzaW5jZSB3ZSBkb24ndCByZWx5IG9uCisgICAgICAgIHdlYWsgcG9pbnRlciBmaW5h
bGl6YXRpb24gYW55bW9yZS4KKworICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OkZ1
bmN0aW9uRXhlY3V0YWJsZSk6IE1vdmVkIGxpbmtlZC1saXN0IHN0dWZmCisgICAgICAgIGludG8g
YmFzZSBjbGFzcyBzbyBhbGwgZXhlY3V0YWJsZXMgY2FuIGJlIGluIHRoZSBsaXN0LgorCisgICAg
ICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpjbGVhckNvZGUpOgorICAgICAgICAoSlNDOjpQcm9n
cmFtRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRh
YmxlOjpjbGVhckNvZGUpOiBBbGwgd2UgbmVlZCB0byBkbyBpcyBkZWxldGUgb3VyCisgICAgICAg
IENvZGVCbG9jayAtLSB0aGEgd2lsbCBkZWxldGUgYWxsIG9mIGl0cyBpbnRlcm5hbCBkYXRhIHN0
cnVjdHVyZXMuCisKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjbGVhckNvZGVJ
Zk5vdENvbXBpbGluZyk6IEZhY3RvcmVkIG91dCBhIGhlbHBlcgorICAgICAgICBmdW5jdGlvbiB0
byBpbXByb3ZlIGNsYXJpdHkuCisKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUJhc2UpOiBNb3ZlZCBsaW5rZWQtbGlzdCBzdHVmZgorICAg
ICAgICBpbnRvIGJhc2UgY2xhc3Mgc28gYWxsIGV4ZWN1dGFibGVzIGNhbiBiZSBpbiB0aGUgbGlz
dC4KKworICAgICAgICAoSlNDOjpOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAgICAo
TmF0aXZlRXhlY3V0YWJsZSk6CisgICAgICAgIChTY3JpcHRFeGVjdXRhYmxlKToKKyAgICAgICAg
KEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpF
dmFsRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEV2YWxFeGVjdXRhYmxlKToKKyAgICAg
ICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChQcm9ncmFtRXhl
Y3V0YWJsZSk6CisgICAgICAgIChGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpG
dW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSk6IERvbid0IHVzZSBhIGZpbmFsaXplciAtLSB0aGUg
aGVhcAorICAgICAgICB3aWxsIGNhbGwgdXMgYmFjayB0byBkZXN0cm95IG91ciBjb2RlIGJsb2Nr
LgorCisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGlzY2FyZENvZGUpOiBSZW5h
bWVkIHRvIGNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCkKKyAgICAgICAgZm9yIGNsYXJpdHkuCisK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjppc0NvbXBpbGluZyk6IE5ldyBoZWxw
ZXIgZnVuY3Rpb24sIGZvciBjbGFyaXR5LgorCisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFi
bGU6OmNsZWFyQ29kZVZpcnR1YWwpOiBOZXcgaGVscGVyIGZ1bmN0aW9uLCBzaW5jZQorICAgICAg
ICB0aGUgaGVhcCBuZWVkcyB0byBtYWtlIHBvbHltb3JwaGljIGNhbGxzIHRvIGNsZWFyIGNvZGUu
CisKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChKU0M6OlN0
YWNrUHJlc2VydmluZ1JlY29tcGlsZXI6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpEeW5hbWljR2xvYmFsT2JqZWN0U2Nv
cGU6OkR5bmFtaWNHbG9iYWxPYmplY3RTY29wZSk6IFVwZGF0ZWQgZm9yCisgICAgICAgIHJlbmFt
ZXMuCisKIDIwMTItMDYtMDYgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUu
Y29tPgogCiAgICAgICAgIEFzc2lnbmluZyB0byBhIHN0YXRpYyBwcm9wZXJ0eSBzaG91bGQgbm90
IGNoYW5nZSBpdGVyYXRpb24gb3JkZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCShyZXZpc2lvbiAxMTk2MjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLmRlZgkod29ya2luZyBjb3B5KQpAQCAtMTUxLDcgKzE1MSw3IEBAIEVYUE9S
VFMKICAgICA/ZGV0YWNoQERlYnVnZ2VyQEpTQ0BAVUFFWFBBVkpTR2xvYmFsT2JqZWN0QDJAQFoK
ICAgICA/ZGV0YWNoVGhyZWFkQFdURkBAWUFYSUBaCiAgICAgP2RpZFRpbWVPdXRAVGltZW91dENo
ZWNrZXJASlNDQEBRQUVfTlBBVkV4ZWNTdGF0ZUAyQEBaCi0gICAgP2Rpc2NhcmRBbGxDb21waWxl
ZENvZGVASGVhcEBKU0NAQFFBRVhYWgorICAgID9kZWxldGVBbGxDb21waWxlZENvZGVASGVhcEBK
U0NAQFFBRVhYWgogICAgID9kaXNwbGF5TmFtZUBKU0Z1bmN0aW9uQEpTQ0BAUUFFP0JWVVN0cmlu
Z0AyQFBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP2R0b2FAV1RGQEBZQVhRQUROQUFfTkFBSEFBSUBa
CiAgICAgP2R1bXBTYW1wbGVEYXRhQEpTR2xvYmFsRGF0YUBKU0NAQFFBRVhQQVZFeGVjU3RhdGVA
MkBAWgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3Bw
CShyZXZpc2lvbiAxMTk2MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIGlubGluZSB2b2lkIFJl
Y29tcGlsZXI6Om9wZXJhdG9yKCkoSlNDZWwKICAgICAgICAgcmV0dXJuOwogCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gZnVuY3Rpb24tPnNjb3BlKCktPmdsb2JhbE9iamVjdC0+SlNHbG9iYWxPYmpl
Y3Q6Omdsb2JhbEV4ZWMoKTsKLSAgICBleGVjdXRhYmxlLT5kaXNjYXJkQ29kZSgpOworICAgIGV4
ZWN1dGFibGUtPmNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCk7CiAgICAgaWYgKG1fZGVidWdnZXIg
PT0gZnVuY3Rpb24tPnNjb3BlKCktPmdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSkKICAgICAgICAg
bV9zb3VyY2VQcm92aWRlcnMuYWRkKGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCksIGV4
ZWMpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDEx
OTYyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MTcsMTUgKzYxNywzOCBAQCBQYXNzT3duUHRyPFR5cGVDb3VudFNldD4gSGVhcDo6
b2JqZWN0VHlwCiAgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuZm9yRWFjaENlbGw8UmVjb3JkVHlw
ZT4oKTsKIH0KIAotdm9pZCBIZWFwOjpkaXNjYXJkQWxsQ29tcGlsZWRDb2RlKCkKK3ZvaWQgSGVh
cDo6ZGVsZXRlQWxsQ29tcGlsZWRDb2RlKCkKIHsKLSAgICAvLyBJZiBKYXZhU2NyaXB0IGlzIHJ1
bm5pbmcsIGl0J3Mgbm90IHNhZmUgdG8gcmVjb21waWxlLCBzaW5jZSB3ZSdsbCBlbmQKLSAgICAv
LyB1cCB0aHJvd2luZyBhd2F5IGNvZGUgdGhhdCBpcyBsaXZlIG9uIHRoZSBzdGFjay4KKyAgICAv
LyBJZiBKYXZhU2NyaXB0IGlzIHJ1bm5pbmcsIGl0J3Mgbm90IHNhZmUgdG8gZGVsZXRlIGNvZGUs
IHNpbmNlIHdlJ2xsIGVuZAorICAgIC8vIHVwIGRlbGV0aW5nIGNvZGUgdGhhdCBpcyBsaXZlIG9u
IHRoZSBzdGFjay4KICAgICBpZiAobV9nbG9iYWxEYXRhLT5keW5hbWljR2xvYmFsT2JqZWN0KQog
ICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKEZ1bmN0aW9uRXhlY3V0YWJsZSogY3VycmVudCA9
IG1fZnVuY3Rpb25zLmhlYWQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHQoKSkK
LSAgICAgICAgY3VycmVudC0+ZGlzY2FyZENvZGUoKTsKKyAgICBmb3IgKEV4ZWN1dGFibGVCYXNl
KiBjdXJyZW50ID0gbV9jb21waWxlZENvZGUuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3Vy
cmVudC0+bmV4dCgpKSB7CisgICAgICAgIGlmICghY3VycmVudC0+aXNGdW5jdGlvbkV4ZWN1dGFi
bGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBzdGF0aWNfY2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihjdXJyZW50KS0+Y2xlYXJDb2RlSWZOb3RDb21waWxpbmcoKTsKKyAgICB9
CisKKyAgICBtX2RmZ0NvZGVCbG9ja3MuY2xlYXJNYXJrcygpOworICAgIG1fZGZnQ29kZUJsb2Nr
cy5kZWxldGVVbm1hcmtlZEpldHRpc29uZWRDb2RlQmxvY2tzKCk7Cit9CisKK3ZvaWQgSGVhcDo6
ZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKQoreworICAgIEV4ZWN1dGFibGVCYXNlKiBuZXh0
OworICAgIGZvciAoRXhlY3V0YWJsZUJhc2UqIGN1cnJlbnQgPSBtX2NvbXBpbGVkQ29kZS5oZWFk
KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSBjdXJyZW50LT5u
ZXh0KCk7CisgICAgICAgIGlmIChpc01hcmtlZChjdXJyZW50KSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIC8vIFdlIGRvIHRoaXMgYmVjYXVzZSBpdCdzIGEgbWVtb3J5IHNhdmlu
Z3MgYW5kIGJlY2F1c2UgQ29kZUJsb2NrIHJlcXVpcmVzIGVhZ2VyCisgICAgICAgIC8vIGZpbmFs
aXphdGlvbi4KKyAgICAgICAgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZVZpcnR1YWwoY3VycmVu
dCk7CisgICAgICAgIG1fY29tcGlsZWRDb2RlLnJlbW92ZShjdXJyZW50KTsKKyAgICB9CisKKyAg
ICBtX2RmZ0NvZGVCbG9ja3MuZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2NrcygpOwog
fQogCiB2b2lkIEhlYXA6OmNvbGxlY3RBbGxHYXJiYWdlKCkKQEAgLTY1NCw3ICs2NzcsNyBAQCB2
b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAKICAgICBkb3VibGUgbGFz
dEdDU3RhcnRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpOwogICAgIGlmIChsYXN0R0NTdGFydFRp
bWUgLSBtX2xhc3RDb2RlRGlzY2FyZFRpbWUgPiBtaW51dGUpIHsKLSAgICAgICAgZGlzY2FyZEFs
bENvbXBpbGVkQ29kZSgpOworICAgICAgICBkZWxldGVBbGxDb21waWxlZENvZGUoKTsKICAgICAg
ICAgbV9sYXN0Q29kZURpc2NhcmRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpOwogICAgIH0KIApA
QCAtNjc3LDYgKzcwMCw4IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRv
Z2cKICAgICAgICAgbV9vYmplY3RTcGFjZS5yZWFwV2Vha1NldHMoKTsKICAgICB9CiAKKyAgICBK
QVZBU0NSSVBUQ09SRV9HQ19NQVJLRUQoKTsKKwogICAgIHsKICAgICAgICAgR0NQSEFTRShGaW5h
bGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKTsKICAgICAgICAgZmluYWxpemVVbmNvbmRpdGlv
bmFsRmluYWxpemVycygpOwpAQCAtNjg3LDEyICs3MTIsMTAgQEAgdm9pZCBIZWFwOjpjb2xsZWN0
KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgICAgICBtX29iamVjdFNwYWNlLnN3ZWVwV2Vha1Nl
dHMoKTsKICAgICAgICAgbV9nbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuZmluYWxpemVTbWFsbFN0
cmluZ3MoKTsKICAgICB9Ci0gICAgCi0gICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7CiAK
ICAgICB7CiAgICAgICAgIEdDUEhBU0UoRGVsZXRlQ29kZUJsb2Nrcyk7Ci0gICAgICAgIG1fZGZn
Q29kZUJsb2Nrcy5kZWxldGVVbm1hcmtlZEpldHRpc29uZWRDb2RlQmxvY2tzKCk7CisgICAgICAg
IGRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCk7CiAgICAgfQogCiAgICAgaWYgKHN3ZWVwVG9n
Z2xlID09IERvU3dlZXApIHsKQEAgLTc4MiwxNCArODA1LDkgQEAgdm9pZCBIZWFwOjpGaW5hbGl6
ZXJPd25lcjo6ZmluYWxpemUoSGFuZAogICAgIFdlYWtTZXQ6OmRlYWxsb2NhdGUoV2Vha0ltcGw6
OmFzV2Vha0ltcGwoc2xvdCkpOwogfQogCi12b2lkIEhlYXA6OmFkZEZ1bmN0aW9uRXhlY3V0YWJs
ZShGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUpCi17Ci0gICAgbV9mdW5jdGlvbnMuYXBw
ZW5kKGV4ZWN1dGFibGUpOwotfQotCi12b2lkIEhlYXA6OnJlbW92ZUZ1bmN0aW9uRXhlY3V0YWJs
ZShGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUpCit2b2lkIEhlYXA6OmFkZENvbXBpbGVk
Q29kZShFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSkKIHsKLSAgICBtX2Z1bmN0aW9ucy5yZW1v
dmUoZXhlY3V0YWJsZSk7CisgICAgbV9jb21waWxlZENvZGUuYXBwZW5kKGV4ZWN1dGFibGUpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJ
KHJldmlzaW9uIDExOTYyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNs
YXNzIENvcGllZFNwYWNlOwogICAgIGNsYXNzIENvZGVCbG9jazsKLSAgICBjbGFzcyBGdW5jdGlv
bkV4ZWN1dGFibGU7CisgICAgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CiAgICAgY2xhc3MgR0NBY3Rp
dml0eUNhbGxiYWNrOwogICAgIGNsYXNzIEdsb2JhbENvZGVCbG9jazsKICAgICBjbGFzcyBIZWFw
OwpAQCAtMTE1LDggKzExNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHR5cGVkZWYg
dm9pZCAoKkZpbmFsaXplcikoSlNDZWxsKik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgYWRkRmluYWxpemVyKEpTQ2VsbCosIEZpbmFsaXplcik7Ci0gICAgICAgIHZvaWQgYWRkRnVu
Y3Rpb25FeGVjdXRhYmxlKEZ1bmN0aW9uRXhlY3V0YWJsZSopOwotICAgICAgICB2b2lkIHJlbW92
ZUZ1bmN0aW9uRXhlY3V0YWJsZShGdW5jdGlvbkV4ZWN1dGFibGUqKTsKKyAgICAgICAgdm9pZCBh
ZGRDb21waWxlZENvZGUoRXhlY3V0YWJsZUJhc2UqKTsKIAogICAgICAgICB2b2lkIG5vdGlmeUlz
U2FmZVRvQ29sbGVjdCgpIHsgbV9pc1NhZmVUb0NvbGxlY3QgPSB0cnVlOyB9CiAKQEAgLTE1OCw3
ICsxNTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZG91YmxlIGxhc3RHQ0xlbmd0aCgp
IHsgcmV0dXJuIG1fbGFzdEdDTGVuZ3RoOyB9CiAgICAgICAgIHZvaWQgaW5jcmVhc2VMYXN0R0NM
ZW5ndGgoZG91YmxlIGFtb3VudCkgeyBtX2xhc3RHQ0xlbmd0aCArPSBhbW91bnQ7IH0KIAotICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGRpc2NhcmRBbGxDb21waWxlZENvZGUoKTsKKyAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZWxldGVBbGxDb21waWxlZENvZGUoKTsKIAog
ICAgICAgICB2b2lkIGRpZEFsbG9jYXRlKHNpemVfdCk7CiAgICAgICAgIHZvaWQgZGlkQWJhbmRv
bihzaXplX3QpOwpAQCAtMTkzLDYgKzE5Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIG1hcmtUZW1wU29ydFZlY3RvcnMoSGVhcFJvb3RWaXNpdG9yJik7CiAgICAgICAgIHZvaWQg
aGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlv
bmFsRmluYWxpemVycygpOworICAgICAgICB2b2lkIGRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2Rl
KCk7CiAgICAgICAgIAogICAgICAgICBSZWdpc3RlckZpbGUmIHJlZ2lzdGVyRmlsZSgpOwogICAg
ICAgICBCbG9ja0FsbG9jYXRvciYgYmxvY2tBbGxvY2F0b3IoKTsKQEAgLTIzOCw3ICsyMzgsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZG91YmxlIG1fbGFzdEdDTGVuZ3RoOwogICAgICAg
ICBkb3VibGUgbV9sYXN0Q29kZURpc2NhcmRUaW1lOwogCi0gICAgICAgIERvdWJseUxpbmtlZExp
c3Q8RnVuY3Rpb25FeGVjdXRhYmxlPiBtX2Z1bmN0aW9uczsKKyAgICAgICAgRG91Ymx5TGlua2Vk
TGlzdDxFeGVjdXRhYmxlQmFzZT4gbV9jb21waWxlZENvZGU7CiAgICAgfTsKIAogICAgIGlubGlu
ZSBib29sIEhlYXA6OnNob3VsZENvbGxlY3QoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDExOTYyNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw3ICs0Nyw3IEBAIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmRlc3Ryb3koSlNDZWxsKiBjZWwKIH0K
ICNlbmRpZgogCi1pbmxpbmUgdm9pZCBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlKCkKK3ZvaWQg
RXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZSgpCiB7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBtX2pp
dENvZGVGb3JDYWxsLmNsZWFyKCk7CkBAIC05OCwxMSArOTgsNiBAQCBzdGF0aWMgdm9pZCBqZXR0
aXNvbkNvZGVCbG9jayhKU0dsb2JhbERhCiB9CiAjZW5kaWYKIAotdm9pZCBOYXRpdmVFeGVjdXRh
YmxlOjpmaW5hbGl6ZShKU0NlbGwqIGNlbGwpCi17Ci0gICAganNDYXN0PE5hdGl2ZUV4ZWN1dGFi
bGUqPihjZWxsKS0+Y2xlYXJDb2RlKCk7Ci19Ci0KIGNvbnN0IENsYXNzSW5mbyBTY3JpcHRFeGVj
dXRhYmxlOjpzX2luZm8gPSB7ICJTY3JpcHRFeGVjdXRhYmxlIiwgJkV4ZWN1dGFibGVCYXNlOjpz
X2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoU2NyaXB0RXhlY3V0YWJsZSkgfTsKIAog
I2lmIEVOQUJMRShKSVQpCkBAIC0xNDYsOCArMTQxLDYgQEAgRnVuY3Rpb25FeGVjdXRhYmxlOjpG
dW5jdGlvbkV4ZWN1dGFibGUoSgogICAgICwgbV9uYW1lKG5hbWUpCiAgICAgLCBtX2luZmVycmVk
TmFtZShpbmZlcnJlZE5hbWUuaXNOdWxsKCkgPyBnbG9iYWxEYXRhLnByb3BlcnR5TmFtZXMtPmVt
cHR5SWRlbnRpZmllciA6IGluZmVycmVkTmFtZSkKICAgICAsIG1fc3ltYm9sVGFibGUoMCkKLSAg
ICAsIG1fbmV4dCgwKQotICAgICwgbV9wcmV2KDApCiB7CiB9CiAKQEAgLTE1OSw4ICsxNTIsNiBA
QCBGdW5jdGlvbkV4ZWN1dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShFCiAgICAgLCBtX25hbWUo
bmFtZSkKICAgICAsIG1faW5mZXJyZWROYW1lKGluZmVycmVkTmFtZS5pc051bGwoKSA/IGV4ZWMt
Pmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXIgOiBpbmZlcnJlZE5h
bWUpCiAgICAgLCBtX3N5bWJvbFRhYmxlKDApCi0gICAgLCBtX25leHQoMCkKLSAgICAsIG1fcHJl
digwKQogewogfQogCkBAIC0yOTIsMTcgKzI4Myw5IEBAIHZvaWQgRXZhbEV4ZWN1dGFibGU6OnVu
bGlua0NhbGxzKCkKICNlbmRpZgogfQogCi12b2lkIEV2YWxFeGVjdXRhYmxlOjpmaW5hbGl6ZShK
U0NlbGwqIGNlbGwpCi17Ci0gICAganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4oY2VsbCktPmNsZWFy
Q29kZSgpOwotfQotCi1pbmxpbmUgdm9pZCBFdmFsRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKK3Zv
aWQgRXZhbEV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCiB7Ci0gICAgaWYgKG1fZXZhbENvZGVCbG9j
aykgewotICAgICAgICBtX2V2YWxDb2RlQmxvY2stPmNsZWFyRXZhbENhY2hlKCk7Ci0gICAgICAg
IG1fZXZhbENvZGVCbG9jay5jbGVhcigpOwotICAgIH0KKyAgICBtX2V2YWxDb2RlQmxvY2suY2xl
YXIoKTsKICAgICBCYXNlOjpjbGVhckNvZGUoKTsKIH0KIApAQCAtNDI0LDE3ICs0MDcsOSBAQCB2
b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTCiAgICAgICAgIHRoaXNPYmpl
Y3QtPm1fcHJvZ3JhbUNvZGVCbG9jay0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKLXZv
aWQgUHJvZ3JhbUV4ZWN1dGFibGU6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkKLXsKLSAgICBqc0Nh
c3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihjZWxsKS0+Y2xlYXJDb2RlKCk7Ci19Ci0KLWlubGluZSB2
b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpjbGVhckNvZGUoKQordm9pZCBQcm9ncmFtRXhlY3V0YWJs
ZTo6Y2xlYXJDb2RlKCkKIHsKLSAgICBpZiAobV9wcm9ncmFtQ29kZUJsb2NrKSB7Ci0gICAgICAg
IG1fcHJvZ3JhbUNvZGVCbG9jay0+Y2xlYXJFdmFsQ2FjaGUoKTsKLSAgICAgICAgbV9wcm9ncmFt
Q29kZUJsb2NrLmNsZWFyKCk7Ci0gICAgfQorICAgIG1fcHJvZ3JhbUNvZGVCbG9jay5jbGVhcigp
OwogICAgIEJhc2U6OmNsZWFyQ29kZSgpOwogfQogCkBAIC02NDIsMzcgKzYxNywxNyBAQCB2b2lk
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKCiAgICAgICAgIHRoaXNPYmplY3Qt
Pm1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAot
dm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmRpc2NhcmRDb2RlKCkKK3ZvaWQgRnVuY3Rpb25FeGVj
dXRhYmxlOjpjbGVhckNvZGVJZk5vdENvbXBpbGluZygpCiB7Ci0jaWYgRU5BQkxFKEpJVCkKLSAg
ICAvLyBUaGVzZSBmaXJzdCB0d28gY2hlY2tzIGFyZSB0byBoYW5kbGUgdGhlIHJhcmUgY2FzZSB3
aGVyZQotICAgIC8vIHdlIGFyZSB0cnlpbmcgdG8gZXZpY3QgY29kZSBmb3IgYSBmdW5jdGlvbiBk
dXJpbmcgaXRzCi0gICAgLy8gY29kZWdlbi4KLSAgICBpZiAoIW1faml0Q29kZUZvckNhbGwgJiYg
bV9jb2RlQmxvY2tGb3JDYWxsKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX2ppdENvZGVG
b3JDb25zdHJ1Y3QgJiYgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpCisgICAgaWYgKGlzQ29tcGls
aW5nKCkpCiAgICAgICAgIHJldHVybjsKLSNlbmRpZgogICAgIGNsZWFyQ29kZSgpOwogfQogCi12
b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZmluYWxpemUoSlNDZWxsKiBjZWxsKQordm9pZCBGdW5j
dGlvbkV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCiB7Ci0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBl
eGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpOwotICAgIEhlYXA6
OmhlYXAoZXhlY3V0YWJsZSktPnJlbW92ZUZ1bmN0aW9uRXhlY3V0YWJsZShleGVjdXRhYmxlKTsK
LSAgICBleGVjdXRhYmxlLT5jbGVhckNvZGUoKTsKLX0KLQotaW5saW5lIHZvaWQgRnVuY3Rpb25F
eGVjdXRhYmxlOjpjbGVhckNvZGUoKQotewotICAgIGlmIChtX2NvZGVCbG9ja0ZvckNhbGwpIHsK
LSAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLT5jbGVhckV2YWxDYWNoZSgpOwotICAgICAgICBt
X2NvZGVCbG9ja0ZvckNhbGwuY2xlYXIoKTsKLSAgICB9Ci0gICAgaWYgKG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0KSB7Ci0gICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5jbGVhckV2YWxD
YWNoZSgpOwotICAgICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5jbGVhcigpOwotICAgIH0K
KyAgICBtX2NvZGVCbG9ja0ZvckNhbGwuY2xlYXIoKTsKKyAgICBtX2NvZGVCbG9ja0ZvckNvbnN0
cnVjdC5jbGVhcigpOwogICAgIEJhc2U6OmNsZWFyQ29kZSgpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxMTk2MjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU0LDcgKzU0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICBjbGFzcyBFeGVjdXRhYmxlQmFzZSA6IHB1YmxpYyBKU0NlbGwgewor
ICAgIGNsYXNzIEV4ZWN1dGFibGVCYXNlIDogcHVibGljIEpTQ2VsbCwgcHVibGljIERvdWJseUxp
bmtlZExpc3ROb2RlPEV4ZWN1dGFibGVCYXNlPiB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBXVEY6
OkRvdWJseUxpbmtlZExpc3ROb2RlPEV4ZWN1dGFibGVCYXNlPjsKICAgICAgICAgZnJpZW5kIGNs
YXNzIEpJVDsKIAogICAgIHByb3RlY3RlZDoKQEAgLTgwLDYgKzgxLDExIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogI2VuZGlmCiAKKyAg
ICAgICAgYm9vbCBpc0Z1bmN0aW9uRXhlY3V0YWJsZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gRnVuY3Rpb25FeGVjdXRh
YmxlVHlwZTsKKyAgICAgICAgfQorCiAgICAgICAgIGJvb2wgaXNIb3N0RnVuY3Rpb24oKSBjb25z
dAogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoKG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwg
PT0gTlVNX1BBUkFNRVRFUlNfSVNfSE9TVCkgPT0gKG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVj
dCA9PSBOVU1fUEFSQU1FVEVSU19JU19IT1NUKSk7CkBAIC04OCw2ICs5NCw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9i
amVjdCwgcHJvdG8sIFR5cGVJbmZvKENvbXBvdW5kVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsgfQogICAgICAgICAKKyAgICAgICAgdm9pZCBjbGVhckNvZGUoKTsKKwogICAgICAgICBz
dGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCiAgICAgcHJvdGVj
dGVkOgpAQCAtOTcsNiArMTA1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoSklU
KQogICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIHZvaWQgY2xlYXJDb2RlVmlydHVhbChFeGVj
dXRhYmxlQmFzZSopOworCiAgICAgICAgIEpJVENvZGUmIGdlbmVyYXRlZEpJVENvZGVGb3JDYWxs
KCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKG1faml0Q29kZUZvckNhbGwpOwpAQCAt
MTY4LDEyICsxNzgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgRXhlY3V0YWJsZUJhc2UqIG1fcHJldjsKKyAgICAgICAgRXhlY3V0YWJs
ZUJhc2UqIG1fbmV4dDsKKwogICAgICAgICBKSVRDb2RlIG1faml0Q29kZUZvckNhbGw7CiAgICAg
ICAgIEpJVENvZGUgbV9qaXRDb2RlRm9yQ29uc3RydWN0OwogICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrOwogICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2s7CiAjZW5k
aWYKLSAgICAgICAgdm9pZCBjbGVhckNvZGUoKTsKICAgICB9OwogCiAgICAgY2xhc3MgTmF0aXZl
RXhlY3V0YWJsZSA6IHB1YmxpYyBFeGVjdXRhYmxlQmFzZSB7CkBAIC0xOTQsNyArMjA2LDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPE5hdGl2ZUV4ZWN1dGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIE5hdGl2
ZUV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKICAgICAgICAg
ICAgICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBKSVRDb2RlOjpI
b3N0RnVuY3Rpb24oY2FsbFRodW5rKSwgSklUQ29kZTo6SG9zdEZ1bmN0aW9uKGNvbnN0cnVjdFRo
dW5rKSwgaW50cmluc2ljKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGdsb2JhbERhdGEu
aGVhcC5hZGRGaW5hbGl6ZXIoZXhlY3V0YWJsZSwgJmZpbmFsaXplKTsKICAgICAgICAgICAgIHJl
dHVybiBleGVjdXRhYmxlOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTIwNSw3ICsyMTYsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVCghZ2xvYmFsRGF0YS5jYW5Vc2VKSVQo
KSk7CiAgICAgICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8TmF0aXZlRXhlY3V0YWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgTmF0
aXZlRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBmdW5jdGlvbiwgY29uc3RydWN0b3IpOwogICAgICAg
ICAgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgICAg
ICBnbG9iYWxEYXRhLmhlYXAuYWRkRmluYWxpemVyKGV4ZWN1dGFibGUsICZmaW5hbGl6ZSk7CiAg
ICAgICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTsKICAgICAgICAgfQogI2VuZGlmCkBAIC0yNDYs
OCArMjU2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNlbmRpZgogCi0gICAgICAg
IHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTQ2VsbCopOwotIAogICAgIHByaXZhdGU6CiAgICAgICAg
IE5hdGl2ZUV4ZWN1dGFibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlv
biBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpCiAgICAgICAgICAgICA6IEV4
ZWN1dGFibGVCYXNlKGdsb2JhbERhdGEsIGdsb2JhbERhdGEubmF0aXZlRXhlY3V0YWJsZVN0cnVj
dHVyZS5nZXQoKSwgTlVNX1BBUkFNRVRFUlNfSVNfSE9TVCkKQEAgLTMwMyw2ICszMTEsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGdsb2JhbERhdGEpOworICAgICAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLmFkZENvbXBpbGVkQ29k
ZSh0aGlzKTsgLy8gQmFsYW5jZWQgYnkgSGVhcDo6ZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUo
KS4KKwogI2lmIEVOQUJMRShDT0RFQkxPQ0tfU0FNUExJTkcpCiAgICAgICAgICAgICBpZiAoU2Ft
cGxpbmdUb29sKiBzYW1wbGVyID0gZ2xvYmFsRGF0YS5pbnRlcnByZXRlci0+c2FtcGxlcigpKQog
ICAgICAgICAgICAgICAgIHNhbXBsZXItPm5vdGlmeU9mU2NvcGUoZ2xvYmFsRGF0YSwgdGhpcyk7
CkBAIC0zNTgsNyArMzY4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAg
ICAgIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8RXZhbEV4ZWN1dGFibGU+KCpleGVjLT5oZWFwKCkpKSBFdmFsRXhlY3V0YWJsZShleGVjLCBz
b3VyY2UsIGlzSW5TdHJpY3RDb250ZXh0KTsKICAgICAgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlz
aENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgICAgICBleGVjLT5nbG9iYWxE
YXRhKCkuaGVhcC5hZGRGaW5hbGl6ZXIoZXhlY3V0YWJsZSwgJmZpbmFsaXplKTsKICAgICAgICAg
ICAgIHJldHVybiBleGVjdXRhYmxlOwogICAgICAgICB9CiAKQEAgLTM3Nyw5ICszODYsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHVubGlua0NhbGxzKCk7CiAKLSAgICBwcm90
ZWN0ZWQ6CiAgICAgICAgIHZvaWQgY2xlYXJDb2RlKCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGZp
bmFsaXplKEpTQ2VsbCopOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFNjcmlwdEV4
ZWN1dGFibGU6OlN0cnVjdHVyZUZsYWdzOwpAQCAtNDAwLDcgKzQwNyw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB7CiAgICAgICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb2dyYW1FeGVjdXRhYmxlPigqZXhlYy0+
aGVhcCgpKSkgUHJvZ3JhbUV4ZWN1dGFibGUoZXhlYywgc291cmNlKTsKICAgICAgICAgICAgIGV4
ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgICAg
ICBleGVjLT5nbG9iYWxEYXRhKCkuaGVhcC5hZGRGaW5hbGl6ZXIoZXhlY3V0YWJsZSwgJmZpbmFs
aXplKTsKICAgICAgICAgICAgIHJldHVybiBleGVjdXRhYmxlOwogICAgICAgICB9CiAKQEAgLTQ0
Nyw5ICs0NTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgdW5s
aW5rQ2FsbHMoKTsKIAotICAgIHByb3RlY3RlZDoKICAgICAgICAgdm9pZCBjbGVhckNvZGUoKTsK
LSAgICAgICAgc3RhdGljIHZvaWQgZmluYWxpemUoSlNDZWxsKik7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNW
aXNpdENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CkBAIC00NjEs
MTAgKzQ2NSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBPd25QdHI8UHJvZ3JhbUNvZGVC
bG9jaz4gbV9wcm9ncmFtQ29kZUJsb2NrOwogICAgIH07CiAKLSAgICBjbGFzcyBGdW5jdGlvbkV4
ZWN1dGFibGUgOiBwdWJsaWMgU2NyaXB0RXhlY3V0YWJsZSwgcHVibGljIERvdWJseUxpbmtlZExp
c3ROb2RlPEZ1bmN0aW9uRXhlY3V0YWJsZT4geworICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJs
ZSA6IHB1YmxpYyBTY3JpcHRFeGVjdXRhYmxlIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLSAgICAgICAgZnJp
ZW5kIGNsYXNzIFdURjo6RG91Ymx5TGlua2VkTGlzdE5vZGU8RnVuY3Rpb25FeGVjdXRhYmxlPjsK
ICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgU2NyaXB0RXhlY3V0YWJsZSBCYXNlOwogCkBA
IC00NzIsOCArNDc1LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEZ1bmN0aW9uRXhlY3V0YWJsZT4oKmV4ZWMtPmhlYXAoKSkpIEZ1bmN0aW9uRXhlY3V0YWJs
ZShleGVjLCBuYW1lLCBpbmZlcnJlZE5hbWUsIHNvdXJjZSwgZm9yY2VVc2VzQXJndW1lbnRzLCBw
YXJhbWV0ZXJzLCBpc0luU3RyaWN0Q29udGV4dCk7CiAgICAgICAgICAgICBleGVjdXRhYmxlLT5m
aW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUsIGZpcnN0TGluZSwgbGFzdExp
bmUpOwotICAgICAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmhlYXAuYWRkRnVuY3Rpb25FeGVj
dXRhYmxlKGV4ZWN1dGFibGUpOwotICAgICAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmhlYXAu
YWRkRmluYWxpemVyKGV4ZWN1dGFibGUsICZmaW5hbGl6ZSk7CiAgICAgICAgICAgICByZXR1cm4g
ZXhlY3V0YWJsZTsKICAgICAgICAgfQogCkBAIC00ODEsOCArNDgyLDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uRXhlY3V0YWJsZT4oZ2xvYmFs
RGF0YS5oZWFwKSkgRnVuY3Rpb25FeGVjdXRhYmxlKGdsb2JhbERhdGEsIG5hbWUsIGluZmVycmVk
TmFtZSwgc291cmNlLCBmb3JjZVVzZXNBcmd1bWVudHMsIHBhcmFtZXRlcnMsIGlzSW5TdHJpY3RD
b250ZXh0KTsKICAgICAgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEsIG5hbWUsIGZpcnN0TGluZSwgbGFzdExpbmUpOwotICAgICAgICAgICAgZ2xvYmFsRGF0YS5o
ZWFwLmFkZEZ1bmN0aW9uRXhlY3V0YWJsZShleGVjdXRhYmxlKTsKLSAgICAgICAgICAgIGdsb2Jh
bERhdGEuaGVhcC5hZGRGaW5hbGl6ZXIoZXhlY3V0YWJsZSwgJmZpbmFsaXplKTsKICAgICAgICAg
ICAgIHJldHVybiBleGVjdXRhYmxlOwogICAgICAgICB9CiAKQEAgLTYzOSw3ICs2MzgsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgVVN0cmluZyBwYXJhbVN0cmluZygpIGNvbnN0OwogICAg
ICAgICBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiBtX3N5
bWJvbFRhYmxlOyB9CiAKLSAgICAgICAgdm9pZCBkaXNjYXJkQ29kZSgpOworICAgICAgICB2b2lk
IGNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCk7CiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICAgICAgc3RhdGljIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnJvbUdsb2JhbENvZGUoY29uc3QgSWRlbnRpZmllciYsIEV4ZWNTdGF0ZSosIERl
YnVnZ2VyKiwgY29uc3QgU291cmNlQ29kZSYsIEpTT2JqZWN0KiogZXhjZXB0aW9uKTsKICAgICAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKQEAgLTY1
MSwxMCArNjUwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB2b2lkIHVu
bGlua0NhbGxzKCk7CiAKLSAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZvaWQgY2xlYXJDb2RlKCk7
Ci0gICAgICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTQ2VsbCopOwogCisgICAgcHJvdGVjdGVk
OgogICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
Y29uc3QgSWRlbnRpZmllciYgbmFtZSwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQogICAg
ICAgICB7CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKQEAg
LTY3Nyw3ICs2NzUsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoa2lu
ZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKICAgICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdDsKICAgICAgICAgfQotICAgICAgICAKKyAKKyAgICAgICAgYm9vbCBpc0NvbXBp
bGluZygpCisgICAgICAgIHsKKyNpZiBFTkFCTEUoSklUKQorICAgICAgICAgICAgaWYgKCFtX2pp
dENvZGVGb3JDYWxsICYmIG1fY29kZUJsb2NrRm9yQ2FsbCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmICghbV9qaXRDb2RlRm9yQ29uc3RydWN0ICYmIG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlm
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwogICAgICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwg
U2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIHVuc2lnbmVkIG1fbnVt
Q2FwdHVyZWRWYXJpYWJsZXMgOiAzMTsKICAgICAgICAgYm9vbCBtX2ZvcmNlVXNlc0FyZ3VtZW50
cyA6IDE7CkBAIC02ODksOCArNjk4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIElkZW50
aWZpZXIgbV9pbmZlcnJlZE5hbWU7CiAgICAgICAgIFdyaXRlQmFycmllcjxKU1N0cmluZz4gbV9u
YW1lVmFsdWU7CiAgICAgICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOwotICAg
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIG1fbmV4dDsKLSAgICAgICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBtX3ByZXY7CiAgICAgfTsKIAogICAgIGlubGluZSBGdW5jdGlvbkV4ZWN1dGFibGUqIEpT
RnVuY3Rpb246OmpzRXhlY3V0YWJsZSgpIGNvbnN0CkBAIC03MjUsNiArNzMyLDIwIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICByZXR1cm4gZnVuY3Rpb24tPm5hdGl2ZUZ1bmN0aW9uKCkgPT0g
bmF0aXZlRnVuY3Rpb247CiAgICAgfQogCisgICAgaW5saW5lIHZvaWQgRXhlY3V0YWJsZUJhc2U6
OmNsZWFyQ29kZVZpcnR1YWwoRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKGV4ZWN1dGFibGUtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSkg
eworICAgICAgICBjYXNlIEV2YWxFeGVjdXRhYmxlVHlwZToKKyAgICAgICAgICAgIHJldHVybiBq
c0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y2xlYXJDb2RlKCk7CisgICAgICAg
IGNhc2UgUHJvZ3JhbUV4ZWN1dGFibGVUeXBlOgorICAgICAgICAgICAgcmV0dXJuIGpzQ2FzdDxQ
cm9ncmFtRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5jbGVhckNvZGUoKTsKKyAgICAgICAgY2Fz
ZSBGdW5jdGlvbkV4ZWN1dGFibGVUeXBlOgorICAgICAgICAgICAgcmV0dXJuIGpzQ2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y2xlYXJDb2RlKCk7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4ganNDYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihleGVjdXRh
YmxlKS0+Y2xlYXJDb2RlKCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBpbmxpbmUgdm9pZCBT
Y3JpcHRFeGVjdXRhYmxlOjp1bmxpbmtDYWxscygpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHN0
cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiAxMTk2MjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MTksNyArNDE5LDcgQEAgc3RydWN0IFN0YWNrUHJlc2VydmluZ1JlY29tcGlsZXIg
OiBwdWJsaQogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CiAgICAgICAgIGlmIChjdXJyZW50bHlFeGVjdXRp
bmdGdW5jdGlvbnMuY29udGFpbnMoZXhlY3V0YWJsZSkpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGV4ZWN1dGFibGUtPmRpc2NhcmRDb2RlKCk7CisgICAgICAgIGV4ZWN1dGFibGUtPmNs
ZWFyQ29kZUlmTm90Q29tcGlsaW5nKCk7CiAgICAgfQogfTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTE5
NjI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NzEsNyArNDcxLDcgQEAgRHluYW1pY0dsb2JhbE9iamVjdFNj
b3BlOjpEeW5hbWljR2xvYmFsTwogICAgIGlmICghbV9keW5hbWljR2xvYmFsT2JqZWN0U2xvdCkg
ewogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAgICAgICAgIGlmIChFeGVjdXRhYmxlQWxsb2NhdG9y
Ojp1bmRlck1lbW9yeVByZXNzdXJlKCkpCi0gICAgICAgICAgICBnbG9iYWxEYXRhLmhlYXAuZGlz
Y2FyZEFsbENvbXBpbGVkQ29kZSgpOworICAgICAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLmRlbGV0
ZUFsbENvbXBpbGVkQ29kZSgpOwogI2VuZGlmCiAKICAgICAgICAgbV9keW5hbWljR2xvYmFsT2Jq
ZWN0U2xvdCA9IGR5bmFtaWNHbG9iYWxPYmplY3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146345</attachid>
            <date>2012-06-07 11:51:49 -0700</date>
            <delta_ts>2012-06-07 16:22:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88465-20120607115150.patch</filename>
            <type>text/plain</type>
            <size>24597</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE5NjI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg3IEBA
CisyMDEyLTA2LTA2ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgRG9uJ3QgcmVseSBvbiB3ZWFrIHBvaW50ZXJzIGZvciBlYWdlciBDb2RlQmxvY2sgZmluYWxp
emF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
ODQ2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgaXMgaW5jb21wYXRpYmxlIHdpdGggbGF6eSB3ZWFrIHBvaW50ZXIgZmluYWxpemF0aW9uLgor
CisgICAgICAgIEkgY29uc2lkZXJlZCBqdXN0IG1ha2luZyBDb2RlQmxvY2sgZmluYWxpemF0aW9u
IGxhenktZnJpZW5kbHksIGJ1dCBpdAorICAgICAgICB0dXJucyBvdXQgdGhhdCB0aGUgaGVhcCBp
cyBhbHJlYWR5IHdheSB1cCBpbiBDb2RlQmxvY2sncyBidXNpbmVzcyB3aGVuCisgICAgICAgIGl0
IGNvbWVzIHRvIGZpbmFsaXphdGlvbiwgc28gSSBkZWNpZGVkIHRvIGZpbmlzaCB0aGUgam9iIGFu
ZCBtb3ZlIGZ1bGwKKyAgICAgICAgcmVzcG9uc2liaWxpdHkgZm9yIENvZGVCbG9jayBmaW5hbGl6
YXRpb24gaW50byB0aGUgaGVhcC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWY6IE1heWJlIHRoaXMKKyAgICAgICAgd2ls
bCBidWlsZC4KKworICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDogVXBkYXRlZCBmb3Ig
cmVuYW1lLgorCisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6
ZGVsZXRlQWxsQ29tcGlsZWRDb2RlKTogUmVuYW1lZCBmb3IgY29uc2lzdGVuY3kuIEZpeGVkIGEg
YnVnCisgICAgICAgIHdoZXJlIHdlIHdvdWxkIG5vdCBkZWxldGUgY29kZSBmb3IgYSBjb2RlIGJs
b2NrIHRoYXQgaGFkIGJlZW4gcHJldmlvdXNseQorICAgICAgICBqZXR0aXNvbmVkLiBJIGRvbid0
IGtub3cgaWYgdGhpcyBoYXBwZW5zIGluIHByYWN0aWNlIC0tIEkgbW9zdGx5IGRpZAorICAgICAg
ICB0aGlzIHRvIGltcHJvdmUgY29uc2lzdGVuY3kgd2l0aCBkZWxldGVVbm1hcmtlZENvbXBpbGVk
Q29kZS4KKworICAgICAgICAoSlNDOjpIZWFwOjpkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSk6
IE5ldyBmdW5jdGlvbiwgcmVzcG9uc2libGUgZm9yCisgICAgICAgIGVhZ2VyIGZpbmFsaXphdGlv
biBvZiB1bm1hcmtlZCBjb2RlIGJsb2Nrcy4KKworICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0
KTogVXBkYXRlZCBmb3IgcmVuYW1lLiBVcGRhdGVkIHRvIGNhbGwKKyAgICAgICAgZGVsZXRlVW5t
YXJrZWRDb21waWxlZENvZGUoKSwgd2hpY2ggdGFrZXMgY2FyZSBvZiBqZXR0aXNvbmVkIERGRyBj
b2RlCisgICAgICAgIGJsb2NrcyB0b28uCisKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkQ29tcGls
ZWRDb2RlKTogUmVuYW1lZCwgc2luY2UgdGhpcyBwb2ludHMgdG8gYWxsIGNvZGUKKyAgICAgICAg
bm93LCBub3QganVzdCBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAg
ICAgKEhlYXApOiBLZWVwIHRyYWNrIG9mIGFsbCB1c2VyIGNvZGUsIG5vdCBqdXN0IGZ1bmN0aW9u
cy4gVGhpcyBpcyBhCisgICAgICAgIG5lZ2xpZ2libGUgYWRkaXRpb25hbCBvdmVyaGVhZCwgc2lu
Y2UgbW9zdCBjb2RlIGlzIGZ1bmN0aW9uIGNvZGUuCisKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1
dGFibGUuY3BwOgorICAgICAgICAoSlNDOjoqOjpmaW5hbGl6ZSk6IFJlbW92ZWQgdGhlc2UgZnVu
Y3Rpb25zLCBzaW5jZSB3ZSBkb24ndCByZWx5IG9uCisgICAgICAgIHdlYWsgcG9pbnRlciBmaW5h
bGl6YXRpb24gYW55bW9yZS4KKworICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OkZ1
bmN0aW9uRXhlY3V0YWJsZSk6IE1vdmVkIGxpbmtlZC1saXN0IHN0dWZmCisgICAgICAgIGludG8g
YmFzZSBjbGFzcyBzbyBhbGwgZXhlY3V0YWJsZXMgY2FuIGJlIGluIHRoZSBsaXN0LgorCisgICAg
ICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpjbGVhckNvZGUpOgorICAgICAgICAoSlNDOjpQcm9n
cmFtRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRh
YmxlOjpjbGVhckNvZGUpOiBBbGwgd2UgbmVlZCB0byBkbyBpcyBkZWxldGUgb3VyCisgICAgICAg
IENvZGVCbG9jayAtLSB0aGF0IHdpbGwgZGVsZXRlIGFsbCBvZiBpdHMgaW50ZXJuYWwgZGF0YSBz
dHJ1Y3R1cmVzLgorCisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y2xlYXJDb2Rl
SWZOb3RDb21waWxpbmcpOiBGYWN0b3JlZCBvdXQgYSBoZWxwZXIKKyAgICAgICAgZnVuY3Rpb24g
dG8gaW1wcm92ZSBjbGFyaXR5LgorCisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6Cisg
ICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlKTogTW92ZWQgbGlua2VkLWxpc3Qgc3R1ZmYKKyAg
ICAgICAgaW50byBiYXNlIGNsYXNzIHNvIGFsbCBleGVjdXRhYmxlcyBjYW4gYmUgaW4gdGhlIGxp
c3QuCisKKyAgICAgICAgKEpTQzo6TmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAgICAgICAg
KE5hdGl2ZUV4ZWN1dGFibGUpOgorICAgICAgICAoU2NyaXB0RXhlY3V0YWJsZSk6CisgICAgICAg
IChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
RXZhbEV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChFdmFsRXhlY3V0YWJsZSk6CisgICAg
ICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAgICAoUHJvZ3JhbUV4
ZWN1dGFibGUpOgorICAgICAgICAoRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6
RnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUpOiBEb24ndCB1c2UgYSBmaW5hbGl6ZXIgLS0gdGhl
IGhlYXAKKyAgICAgICAgd2lsbCBjYWxsIHVzIGJhY2sgdG8gZGVzdHJveSBvdXIgY29kZSBibG9j
ay4KKworICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmRpc2NhcmRDb2RlKTogUmVu
YW1lZCB0byBjbGVhckNvZGVJZk5vdENvbXBpbGluZygpCisgICAgICAgIGZvciBjbGFyaXR5Lgor
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6aXNDb21waWxpbmcpOiBOZXcgaGVs
cGVyIGZ1bmN0aW9uLCBmb3IgY2xhcml0eS4KKworICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRh
YmxlOjpjbGVhckNvZGVWaXJ0dWFsKTogTmV3IGhlbHBlciBmdW5jdGlvbiwgc2luY2UKKyAgICAg
ICAgdGhlIGhlYXAgbmVlZHMgdG8gbWFrZSBwb2x5bW9ycGhpYyBjYWxscyB0byBjbGVhciBjb2Rl
LgorCisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuY3BwOgorICAgICAgICAoSlNDOjpT
dGFja1ByZXNlcnZpbmdSZWNvbXBpbGVyOjpvcGVyYXRvcigpKToKKyAgICAgICAgKiBydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6RHluYW1pY0dsb2JhbE9iamVjdFNj
b3BlOjpEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUpOiBVcGRhdGVkIGZvcgorICAgICAgICByZW5h
bWVzLgorCiAyMDEyLTA2LTA2ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxl
LmNvbT4KIAogICAgICAgICBBc3NpZ25pbmcgdG8gYSBzdGF0aWMgcHJvcGVydHkgc2hvdWxkIG5v
dCBjaGFuZ2UgaXRlcmF0aW9uIG9yZGVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkocmV2aXNpb24gMTE5NjI1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw3ICsxNTEsNyBAQCBFWFBP
UlRTCiAgICAgP2RldGFjaEBEZWJ1Z2dlckBKU0NAQFVBRVhQQVZKU0dsb2JhbE9iamVjdEAyQEBa
CiAgICAgP2RldGFjaFRocmVhZEBXVEZAQFlBWElAWgogICAgID9kaWRUaW1lT3V0QFRpbWVvdXRD
aGVja2VyQEpTQ0BAUUFFX05QQVZFeGVjU3RhdGVAMkBAWgotICAgID9kaXNjYXJkQWxsQ29tcGls
ZWRDb2RlQEhlYXBASlNDQEBRQUVYWFoKKyAgICA/ZGVsZXRlQWxsQ29tcGlsZWRDb2RlQEhlYXBA
SlNDQEBRQUVYWFoKICAgICA/ZGlzcGxheU5hbWVASlNGdW5jdGlvbkBKU0NAQFFBRT9CVlVTdHJp
bmdAMkBQQVZFeGVjU3RhdGVAMkBAWgogICAgID9kdG9hQFdURkBAWUFYUUFETkFBX05BQUhBQUlA
WgogICAgID9kdW1wU2FtcGxlRGF0YUBKU0dsb2JhbERhdGFASlNDQEBRQUVYUEFWRXhlY1N0YXRl
QDJAQFoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNw
cAkocmV2aXNpb24gMTE5NjI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBpbmxpbmUgdm9pZCBS
ZWNvbXBpbGVyOjpvcGVyYXRvcigpKEpTQ2VsCiAgICAgICAgIHJldHVybjsKIAogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IGZ1bmN0aW9uLT5zY29wZSgpLT5nbG9iYWxPYmplY3QtPkpTR2xvYmFsT2Jq
ZWN0OjpnbG9iYWxFeGVjKCk7Ci0gICAgZXhlY3V0YWJsZS0+ZGlzY2FyZENvZGUoKTsKKyAgICBl
eGVjdXRhYmxlLT5jbGVhckNvZGVJZk5vdENvbXBpbGluZygpOwogICAgIGlmIChtX2RlYnVnZ2Vy
ID09IGZ1bmN0aW9uLT5zY29wZSgpLT5nbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCkpCiAgICAgICAg
IG1fc291cmNlUHJvdmlkZXJzLmFkZChleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigpLCBl
eGVjKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAx
MTk2MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjE3LDE1ICs2MTcsMzggQEAgUGFzc093blB0cjxUeXBlQ291bnRTZXQ+IEhlYXA6
Om9iamVjdFR5cAogICAgIHJldHVybiBtX29iamVjdFNwYWNlLmZvckVhY2hDZWxsPFJlY29yZFR5
cGU+KCk7CiB9CiAKLXZvaWQgSGVhcDo6ZGlzY2FyZEFsbENvbXBpbGVkQ29kZSgpCit2b2lkIEhl
YXA6OmRlbGV0ZUFsbENvbXBpbGVkQ29kZSgpCiB7Ci0gICAgLy8gSWYgSmF2YVNjcmlwdCBpcyBy
dW5uaW5nLCBpdCdzIG5vdCBzYWZlIHRvIHJlY29tcGlsZSwgc2luY2Ugd2UnbGwgZW5kCi0gICAg
Ly8gdXAgdGhyb3dpbmcgYXdheSBjb2RlIHRoYXQgaXMgbGl2ZSBvbiB0aGUgc3RhY2suCisgICAg
Ly8gSWYgSmF2YVNjcmlwdCBpcyBydW5uaW5nLCBpdCdzIG5vdCBzYWZlIHRvIGRlbGV0ZSBjb2Rl
LCBzaW5jZSB3ZSdsbCBlbmQKKyAgICAvLyB1cCBkZWxldGluZyBjb2RlIHRoYXQgaXMgbGl2ZSBv
biB0aGUgc3RhY2suCiAgICAgaWYgKG1fZ2xvYmFsRGF0YS0+ZHluYW1pY0dsb2JhbE9iamVjdCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChGdW5jdGlvbkV4ZWN1dGFibGUqIGN1cnJlbnQg
PSBtX2Z1bmN0aW9ucy5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0KCkp
Ci0gICAgICAgIGN1cnJlbnQtPmRpc2NhcmRDb2RlKCk7CisgICAgZm9yIChFeGVjdXRhYmxlQmFz
ZSogY3VycmVudCA9IG1fY29tcGlsZWRDb2RlLmhlYWQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1
cnJlbnQtPm5leHQoKSkgeworICAgICAgICBpZiAoIWN1cnJlbnQtPmlzRnVuY3Rpb25FeGVjdXRh
YmxlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4oY3VycmVudCktPmNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCk7CisgICAg
fQorCisgICAgbV9kZmdDb2RlQmxvY2tzLmNsZWFyTWFya3MoKTsKKyAgICBtX2RmZ0NvZGVCbG9j
a3MuZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2NrcygpOworfQorCit2b2lkIEhlYXA6
OmRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCkKK3sKKyAgICBFeGVjdXRhYmxlQmFzZSogbmV4
dDsKKyAgICBmb3IgKEV4ZWN1dGFibGVCYXNlKiBjdXJyZW50ID0gbV9jb21waWxlZENvZGUuaGVh
ZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gY3VycmVudC0+
bmV4dCgpOworICAgICAgICBpZiAoaXNNYXJrZWQoY3VycmVudCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAvLyBXZSBkbyB0aGlzIGJlY2F1c2UgaXQncyBhIG1lbW9yeSBzYXZp
bmdzIGFuZCBiZWNhdXNlIENvZGVCbG9jayByZXF1aXJlcyBlYWdlcgorICAgICAgICAvLyBmaW5h
bGl6YXRpb24uCisgICAgICAgIEV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGVWaXJ0dWFsKGN1cnJl
bnQpOworICAgICAgICBtX2NvbXBpbGVkQ29kZS5yZW1vdmUoY3VycmVudCk7CisgICAgfQorCisg
ICAgbV9kZmdDb2RlQmxvY2tzLmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZENvZGVCbG9ja3MoKTsK
IH0KIAogdm9pZCBIZWFwOjpjb2xsZWN0QWxsR2FyYmFnZSgpCkBAIC02NTQsNyArNjc3LDcgQEAg
dm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogCiAgICAgZG91YmxlIGxh
c3RHQ1N0YXJ0VGltZSA9IFdURjo6Y3VycmVudFRpbWUoKTsKICAgICBpZiAobGFzdEdDU3RhcnRU
aW1lIC0gbV9sYXN0Q29kZURpc2NhcmRUaW1lID4gbWludXRlKSB7Ci0gICAgICAgIGRpc2NhcmRB
bGxDb21waWxlZENvZGUoKTsKKyAgICAgICAgZGVsZXRlQWxsQ29tcGlsZWRDb2RlKCk7CiAgICAg
ICAgIG1fbGFzdENvZGVEaXNjYXJkVGltZSA9IFdURjo6Y3VycmVudFRpbWUoKTsKICAgICB9CiAK
QEAgLTY3Nyw2ICs3MDAsOCBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBU
b2dnCiAgICAgICAgIG1fb2JqZWN0U3BhY2UucmVhcFdlYWtTZXRzKCk7CiAgICAgfQogCisgICAg
SkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7CisKICAgICB7CiAgICAgICAgIEdDUEhBU0UoRmlu
YWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyk7CiAgICAgICAgIGZpbmFsaXplVW5jb25kaXRp
b25hbEZpbmFsaXplcnMoKTsKQEAgLTY4NywxMiArNzEyLDEwIEBAIHZvaWQgSGVhcDo6Y29sbGVj
dChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICAgICAgbV9vYmplY3RTcGFjZS5zd2VlcFdlYWtT
ZXRzKCk7CiAgICAgICAgIG1fZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLmZpbmFsaXplU21hbGxT
dHJpbmdzKCk7CiAgICAgfQotICAgIAotICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktFRCgpOwog
CiAgICAgewogICAgICAgICBHQ1BIQVNFKERlbGV0ZUNvZGVCbG9ja3MpOwotICAgICAgICBtX2Rm
Z0NvZGVCbG9ja3MuZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2NrcygpOworICAgICAg
ICBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOwogICAgIH0KIAogICAgIGlmIChzd2VlcFRv
Z2dsZSA9PSBEb1N3ZWVwKSB7CkBAIC03ODIsMTQgKzgwNSw5IEBAIHZvaWQgSGVhcDo6RmluYWxp
emVyT3duZXI6OmZpbmFsaXplKEhhbmQKICAgICBXZWFrU2V0OjpkZWFsbG9jYXRlKFdlYWtJbXBs
Ojphc1dlYWtJbXBsKHNsb3QpKTsKIH0KIAotdm9pZCBIZWFwOjphZGRGdW5jdGlvbkV4ZWN1dGFi
bGUoRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlKQotewotICAgIG1fZnVuY3Rpb25zLmFw
cGVuZChleGVjdXRhYmxlKTsKLX0KLQotdm9pZCBIZWFwOjpyZW1vdmVGdW5jdGlvbkV4ZWN1dGFi
bGUoRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlKQordm9pZCBIZWFwOjphZGRDb21waWxl
ZENvZGUoRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUpCiB7Ci0gICAgbV9mdW5jdGlvbnMucmVt
b3ZlKGV4ZWN1dGFibGUpOworICAgIG1fY29tcGlsZWRDb2RlLmFwcGVuZChleGVjdXRhYmxlKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5o
CShyZXZpc2lvbiAxMTk2MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBj
bGFzcyBDb3BpZWRTcGFjZTsKICAgICBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgY2xhc3MgRnVuY3Rp
b25FeGVjdXRhYmxlOworICAgIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwogICAgIGNsYXNzIEdDQWN0
aXZpdHlDYWxsYmFjazsKICAgICBjbGFzcyBHbG9iYWxDb2RlQmxvY2s7CiAgICAgY2xhc3MgSGVh
cDsKQEAgLTExNSw4ICsxMTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB0eXBlZGVm
IHZvaWQgKCpGaW5hbGl6ZXIpKEpTQ2VsbCopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGFkZEZpbmFsaXplcihKU0NlbGwqLCBGaW5hbGl6ZXIpOwotICAgICAgICB2b2lkIGFkZEZ1
bmN0aW9uRXhlY3V0YWJsZShGdW5jdGlvbkV4ZWN1dGFibGUqKTsKLSAgICAgICAgdm9pZCByZW1v
dmVGdW5jdGlvbkV4ZWN1dGFibGUoRnVuY3Rpb25FeGVjdXRhYmxlKik7CisgICAgICAgIHZvaWQg
YWRkQ29tcGlsZWRDb2RlKEV4ZWN1dGFibGVCYXNlKik7CiAKICAgICAgICAgdm9pZCBub3RpZnlJ
c1NhZmVUb0NvbGxlY3QoKSB7IG1faXNTYWZlVG9Db2xsZWN0ID0gdHJ1ZTsgfQogCkBAIC0xNTgs
NyArMTU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGRvdWJsZSBsYXN0R0NMZW5ndGgo
KSB7IHJldHVybiBtX2xhc3RHQ0xlbmd0aDsgfQogICAgICAgICB2b2lkIGluY3JlYXNlTGFzdEdD
TGVuZ3RoKGRvdWJsZSBhbW91bnQpIHsgbV9sYXN0R0NMZW5ndGggKz0gYW1vdW50OyB9CiAKLSAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkaXNjYXJkQWxsQ29tcGlsZWRDb2RlKCk7Cisg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVsZXRlQWxsQ29tcGlsZWRDb2RlKCk7CiAK
ICAgICAgICAgdm9pZCBkaWRBbGxvY2F0ZShzaXplX3QpOwogICAgICAgICB2b2lkIGRpZEFiYW5k
b24oc2l6ZV90KTsKQEAgLTE5Myw2ICsxOTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBtYXJrVGVtcFNvcnRWZWN0b3JzKEhlYXBSb290VmlzaXRvciYpOwogICAgICAgICB2b2lk
IGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwogICAgICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRp
b25hbEZpbmFsaXplcnMoKTsKKyAgICAgICAgdm9pZCBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29k
ZSgpOwogICAgICAgICAKICAgICAgICAgUmVnaXN0ZXJGaWxlJiByZWdpc3RlckZpbGUoKTsKICAg
ICAgICAgQmxvY2tBbGxvY2F0b3ImIGJsb2NrQWxsb2NhdG9yKCk7CkBAIC0yMzgsNyArMjM4LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGRvdWJsZSBtX2xhc3RHQ0xlbmd0aDsKICAgICAg
ICAgZG91YmxlIG1fbGFzdENvZGVEaXNjYXJkVGltZTsKIAotICAgICAgICBEb3VibHlMaW5rZWRM
aXN0PEZ1bmN0aW9uRXhlY3V0YWJsZT4gbV9mdW5jdGlvbnM7CisgICAgICAgIERvdWJseUxpbmtl
ZExpc3Q8RXhlY3V0YWJsZUJhc2U+IG1fY29tcGlsZWRDb2RlOwogICAgIH07CiAKICAgICBpbmxp
bmUgYm9vbCBIZWFwOjpzaG91bGRDb2xsZWN0KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxMTk2MjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNyArNDcsNyBAQCB2b2lkIEV4ZWN1dGFibGVCYXNlOjpkZXN0cm95KEpTQ2VsbCogY2VsCiB9
CiAjZW5kaWYKIAotaW5saW5lIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZSgpCit2b2lk
IEV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGUoKQogewogI2lmIEVOQUJMRShKSVQpCiAgICAgbV9q
aXRDb2RlRm9yQ2FsbC5jbGVhcigpOwpAQCAtOTgsMTEgKzk4LDYgQEAgc3RhdGljIHZvaWQgamV0
dGlzb25Db2RlQmxvY2soSlNHbG9iYWxEYQogfQogI2VuZGlmCiAKLXZvaWQgTmF0aXZlRXhlY3V0
YWJsZTo6ZmluYWxpemUoSlNDZWxsKiBjZWxsKQotewotICAgIGpzQ2FzdDxOYXRpdmVFeGVjdXRh
YmxlKj4oY2VsbCktPmNsZWFyQ29kZSgpOwotfQotCiBjb25zdCBDbGFzc0luZm8gU2NyaXB0RXhl
Y3V0YWJsZTo6c19pbmZvID0geyAiU2NyaXB0RXhlY3V0YWJsZSIsICZFeGVjdXRhYmxlQmFzZTo6
c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFNjcmlwdEV4ZWN1dGFibGUpIH07CiAK
ICNpZiBFTkFCTEUoSklUKQpAQCAtMTQ2LDggKzE0MSw2IEBAIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
RnVuY3Rpb25FeGVjdXRhYmxlKEoKICAgICAsIG1fbmFtZShuYW1lKQogICAgICwgbV9pbmZlcnJl
ZE5hbWUoaW5mZXJyZWROYW1lLmlzTnVsbCgpID8gZ2xvYmFsRGF0YS5wcm9wZXJ0eU5hbWVzLT5l
bXB0eUlkZW50aWZpZXIgOiBpbmZlcnJlZE5hbWUpCiAgICAgLCBtX3N5bWJvbFRhYmxlKDApCi0g
ICAgLCBtX25leHQoMCkKLSAgICAsIG1fcHJldigwKQogewogfQogCkBAIC0xNTksOCArMTUyLDYg
QEAgRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUoRQogICAgICwgbV9uYW1l
KG5hbWUpCiAgICAgLCBtX2luZmVycmVkTmFtZShpbmZlcnJlZE5hbWUuaXNOdWxsKCkgPyBleGVj
LT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyIDogaW5mZXJyZWRO
YW1lKQogICAgICwgbV9zeW1ib2xUYWJsZSgwKQotICAgICwgbV9uZXh0KDApCi0gICAgLCBtX3By
ZXYoMCkKIHsKIH0KIApAQCAtMjkyLDE3ICsyODMsOSBAQCB2b2lkIEV2YWxFeGVjdXRhYmxlOjp1
bmxpbmtDYWxscygpCiAjZW5kaWYKIH0KIAotdm9pZCBFdmFsRXhlY3V0YWJsZTo6ZmluYWxpemUo
SlNDZWxsKiBjZWxsKQotewotICAgIGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KGNlbGwpLT5jbGVh
ckNvZGUoKTsKLX0KLQotaW5saW5lIHZvaWQgRXZhbEV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCit2
b2lkIEV2YWxFeGVjdXRhYmxlOjpjbGVhckNvZGUoKQogewotICAgIGlmIChtX2V2YWxDb2RlQmxv
Y2spIHsKLSAgICAgICAgbV9ldmFsQ29kZUJsb2NrLT5jbGVhckV2YWxDYWNoZSgpOwotICAgICAg
ICBtX2V2YWxDb2RlQmxvY2suY2xlYXIoKTsKLSAgICB9CisgICAgbV9ldmFsQ29kZUJsb2NrLmNs
ZWFyKCk7CiAgICAgQmFzZTo6Y2xlYXJDb2RlKCk7CiB9CiAKQEAgLTQyNCwxNyArNDA3LDkgQEAg
dm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKUwogICAgICAgICB0aGlzT2Jq
ZWN0LT5tX3Byb2dyYW1Db2RlQmxvY2stPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi12
b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpmaW5hbGl6ZShKU0NlbGwqIGNlbGwpCi17Ci0gICAganND
YXN0PFByb2dyYW1FeGVjdXRhYmxlKj4oY2VsbCktPmNsZWFyQ29kZSgpOwotfQotCi1pbmxpbmUg
dm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKK3ZvaWQgUHJvZ3JhbUV4ZWN1dGFi
bGU6OmNsZWFyQ29kZSgpCiB7Ci0gICAgaWYgKG1fcHJvZ3JhbUNvZGVCbG9jaykgewotICAgICAg
ICBtX3Byb2dyYW1Db2RlQmxvY2stPmNsZWFyRXZhbENhY2hlKCk7Ci0gICAgICAgIG1fcHJvZ3Jh
bUNvZGVCbG9jay5jbGVhcigpOwotICAgIH0KKyAgICBtX3Byb2dyYW1Db2RlQmxvY2suY2xlYXIo
KTsKICAgICBCYXNlOjpjbGVhckNvZGUoKTsKIH0KIApAQCAtNjQyLDM3ICs2MTcsMTcgQEAgdm9p
ZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSgogICAgICAgICB0aGlzT2JqZWN0
LT5tX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAK
LXZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpkaXNjYXJkQ29kZSgpCit2b2lkIEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6Y2xlYXJDb2RlSWZOb3RDb21waWxpbmcoKQogewotI2lmIEVOQUJMRShKSVQpCi0g
ICAgLy8gVGhlc2UgZmlyc3QgdHdvIGNoZWNrcyBhcmUgdG8gaGFuZGxlIHRoZSByYXJlIGNhc2Ug
d2hlcmUKLSAgICAvLyB3ZSBhcmUgdHJ5aW5nIHRvIGV2aWN0IGNvZGUgZm9yIGEgZnVuY3Rpb24g
ZHVyaW5nIGl0cwotICAgIC8vIGNvZGVnZW4uCi0gICAgaWYgKCFtX2ppdENvZGVGb3JDYWxsICYm
IG1fY29kZUJsb2NrRm9yQ2FsbCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghbV9qaXRDb2Rl
Rm9yQ29uc3RydWN0ICYmIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KQorICAgIGlmIChpc0NvbXBp
bGluZygpKQogICAgICAgICByZXR1cm47Ci0jZW5kaWYKICAgICBjbGVhckNvZGUoKTsKIH0KIAot
dm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkKK3ZvaWQgRnVu
Y3Rpb25FeGVjdXRhYmxlOjpjbGVhckNvZGUoKQogewotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKLSAgICBIZWFw
OjpoZWFwKGV4ZWN1dGFibGUpLT5yZW1vdmVGdW5jdGlvbkV4ZWN1dGFibGUoZXhlY3V0YWJsZSk7
Ci0gICAgZXhlY3V0YWJsZS0+Y2xlYXJDb2RlKCk7Ci19Ci0KLWlubGluZSB2b2lkIEZ1bmN0aW9u
RXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKLXsKLSAgICBpZiAobV9jb2RlQmxvY2tGb3JDYWxsKSB7
Ci0gICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+Y2xlYXJFdmFsQ2FjaGUoKTsKLSAgICAgICAg
bV9jb2RlQmxvY2tGb3JDYWxsLmNsZWFyKCk7Ci0gICAgfQotICAgIGlmIChtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdCkgewotICAgICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+Y2xlYXJFdmFs
Q2FjaGUoKTsKLSAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuY2xlYXIoKTsKLSAgICB9
CisgICAgbV9jb2RlQmxvY2tGb3JDYWxsLmNsZWFyKCk7CisgICAgbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QuY2xlYXIoKTsKICAgICBCYXNlOjpjbGVhckNvZGUoKTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gMTE5NjI1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw3ICs1NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgY2xhc3MgRXhlY3V0YWJsZUJhc2UgOiBwdWJsaWMgSlNDZWxsIHsK
KyAgICBjbGFzcyBFeGVjdXRhYmxlQmFzZSA6IHB1YmxpYyBKU0NlbGwsIHB1YmxpYyBEb3VibHlM
aW5rZWRMaXN0Tm9kZTxFeGVjdXRhYmxlQmFzZT4geworICAgICAgICBmcmllbmQgY2xhc3MgV1RG
OjpEb3VibHlMaW5rZWRMaXN0Tm9kZTxFeGVjdXRhYmxlQmFzZT47CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBKSVQ7CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC04MCw2ICs4MSwxMSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICNlbmRpZgogCisg
ICAgICAgIGJvb2wgaXNGdW5jdGlvbkV4ZWN1dGFibGUoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09IEZ1bmN0aW9uRXhlY3V0
YWJsZVR5cGU7CisgICAgICAgIH0KKwogICAgICAgICBib29sIGlzSG9zdEZ1bmN0aW9uKCkgY29u
c3QKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKChtX251bVBhcmFtZXRlcnNGb3JDYWxs
ID09IE5VTV9QQVJBTUVURVJTX0lTX0hPU1QpID09IChtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1
Y3QgPT0gTlVNX1BBUkFNRVRFUlNfSVNfSE9TVCkpOwpAQCAtODgsNiArOTQsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIHByb3RvLCBUeXBlSW5mbyhDb21wb3VuZFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7IH0KICAgICAgICAgCisgICAgICAgIHZvaWQgY2xlYXJDb2RlKCk7CisKICAgICAgICAg
c3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAogICAgIHByb3Rl
Y3RlZDoKQEAgLTk3LDYgKzEwNSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEpJ
VCkKICAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyB2b2lkIGNsZWFyQ29kZVZpcnR1YWwoRXhl
Y3V0YWJsZUJhc2UqKTsKKwogICAgICAgICBKSVRDb2RlJiBnZW5lcmF0ZWRKSVRDb2RlRm9yQ2Fs
bCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChtX2ppdENvZGVGb3JDYWxsKTsKQEAg
LTE2OCwxMiArMTc4LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICBwcm90
ZWN0ZWQ6CisgICAgICAgIEV4ZWN1dGFibGVCYXNlKiBtX3ByZXY7CisgICAgICAgIEV4ZWN1dGFi
bGVCYXNlKiBtX25leHQ7CisKICAgICAgICAgSklUQ29kZSBtX2ppdENvZGVGb3JDYWxsOwogICAg
ICAgICBKSVRDb2RlIG1faml0Q29kZUZvckNvbnN0cnVjdDsKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjazsKICAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrOwogI2Vu
ZGlmCi0gICAgICAgIHZvaWQgY2xlYXJDb2RlKCk7CiAgICAgfTsKIAogICAgIGNsYXNzIE5hdGl2
ZUV4ZWN1dGFibGUgOiBwdWJsaWMgRXhlY3V0YWJsZUJhc2UgewpAQCAtMTk0LDcgKzIwNiw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxOYXRpdmVFeGVjdXRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBOYXRp
dmVFeGVjdXRhYmxlKGdsb2JhbERhdGEsIGZ1bmN0aW9uLCBjb25zdHJ1Y3Rvcik7CiAgICAgICAg
ICAgICAgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgSklUQ29kZTo6
SG9zdEZ1bmN0aW9uKGNhbGxUaHVuayksIEpJVENvZGU6Okhvc3RGdW5jdGlvbihjb25zdHJ1Y3RU
aHVuayksIGludHJpbnNpYyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBnbG9iYWxEYXRh
LmhlYXAuYWRkRmluYWxpemVyKGV4ZWN1dGFibGUsICZmaW5hbGl6ZSk7CiAgICAgICAgICAgICBy
ZXR1cm4gZXhlY3V0YWJsZTsKICAgICAgICAgfQogI2VuZGlmCkBAIC0yMDUsNyArMjE2LDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoIWdsb2JhbERhdGEuY2FuVXNlSklU
KCkpOwogICAgICAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPE5hdGl2ZUV4ZWN1dGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIE5h
dGl2ZUV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKICAgICAg
ICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICAg
ICAgZ2xvYmFsRGF0YS5oZWFwLmFkZEZpbmFsaXplcihleGVjdXRhYmxlLCAmZmluYWxpemUpOwog
ICAgICAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtMjQ2
LDggKzI1Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAjZW5kaWYKIAotICAgICAg
ICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU0NlbGwqKTsKLSAKICAgICBwcml2YXRlOgogICAgICAg
ICBOYXRpdmVFeGVjdXRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rp
b24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQogICAgICAgICAgICAgOiBF
eGVjdXRhYmxlQmFzZShnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLm5hdGl2ZUV4ZWN1dGFibGVTdHJ1
Y3R1cmUuZ2V0KCksIE5VTV9QQVJBTUVURVJTX0lTX0hPU1QpCkBAIC0zMDMsNiArMzExLDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQogICAgICAgICB7CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bihnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIGdsb2JhbERhdGEuaGVhcC5hZGRDb21waWxlZENv
ZGUodGhpcyk7IC8vIEJhbGFuY2VkIGJ5IEhlYXA6OmRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2Rl
KCkuCisKICNpZiBFTkFCTEUoQ09ERUJMT0NLX1NBTVBMSU5HKQogICAgICAgICAgICAgaWYgKFNh
bXBsaW5nVG9vbCogc2FtcGxlciA9IGdsb2JhbERhdGEuaW50ZXJwcmV0ZXItPnNhbXBsZXIoKSkK
ICAgICAgICAgICAgICAgICBzYW1wbGVyLT5ub3RpZnlPZlNjb3BlKGdsb2JhbERhdGEsIHRoaXMp
OwpAQCAtMzU4LDcgKzM2OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAg
ICAgICBFdmFsRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEV2YWxFeGVjdXRhYmxlPigqZXhlYy0+aGVhcCgpKSkgRXZhbEV4ZWN1dGFibGUoZXhlYywg
c291cmNlLCBpc0luU3RyaWN0Q29udGV4dCk7CiAgICAgICAgICAgICBleGVjdXRhYmxlLT5maW5p
c2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICAgICAgZXhlYy0+Z2xvYmFs
RGF0YSgpLmhlYXAuYWRkRmluYWxpemVyKGV4ZWN1dGFibGUsICZmaW5hbGl6ZSk7CiAgICAgICAg
ICAgICByZXR1cm4gZXhlY3V0YWJsZTsKICAgICAgICAgfQogCkBAIC0zNzcsOSArMzg2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCB1bmxpbmtDYWxscygpOwogCi0gICAgcHJv
dGVjdGVkOgogICAgICAgICB2b2lkIGNsZWFyQ29kZSgpOwotICAgICAgICBzdGF0aWMgdm9pZCBm
aW5hbGl6ZShKU0NlbGwqKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRF
eGVjdXRhYmxlOjpTdHJ1Y3R1cmVGbGFnczsKQEAgLTQwMCw3ICs0MDcsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFi
bGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9ncmFtRXhlY3V0YWJsZT4oKmV4ZWMt
PmhlYXAoKSkpIFByb2dyYW1FeGVjdXRhYmxlKGV4ZWMsIHNvdXJjZSk7CiAgICAgICAgICAgICBl
eGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICAg
ICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmhlYXAuYWRkRmluYWxpemVyKGV4ZWN1dGFibGUsICZmaW5h
bGl6ZSk7CiAgICAgICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTsKICAgICAgICAgfQogCkBAIC00
NDcsOSArNDUzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB2b2lkIHVu
bGlua0NhbGxzKCk7CiAKLSAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZvaWQgY2xlYXJDb2RlKCk7
Ci0gICAgICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTQ2VsbCopOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbiB8IFNjcmlwdEV4ZWN1dGFibGU6OlN0cnVjdHVyZUZsYWdzOwpAQCAtNDYx
LDEwICs0NjUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgT3duUHRyPFByb2dyYW1Db2Rl
QmxvY2s+IG1fcHJvZ3JhbUNvZGVCbG9jazsKICAgICB9OwogCi0gICAgY2xhc3MgRnVuY3Rpb25F
eGVjdXRhYmxlIDogcHVibGljIFNjcmlwdEV4ZWN1dGFibGUsIHB1YmxpYyBEb3VibHlMaW5rZWRM
aXN0Tm9kZTxGdW5jdGlvbkV4ZWN1dGFibGU+IHsKKyAgICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFi
bGUgOiBwdWJsaWMgU2NyaXB0RXhlY3V0YWJsZSB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Ci0gICAgICAgIGZy
aWVuZCBjbGFzcyBXVEY6OkRvdWJseUxpbmtlZExpc3ROb2RlPEZ1bmN0aW9uRXhlY3V0YWJsZT47
CiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIFNjcmlwdEV4ZWN1dGFibGUgQmFzZTsKIApA
QCAtNDcyLDggKzQ3NSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxGdW5jdGlvbkV4ZWN1dGFibGU+KCpleGVjLT5oZWFwKCkpKSBGdW5jdGlvbkV4ZWN1dGFi
bGUoZXhlYywgbmFtZSwgaW5mZXJyZWROYW1lLCBzb3VyY2UsIGZvcmNlVXNlc0FyZ3VtZW50cywg
cGFyYW1ldGVycywgaXNJblN0cmljdENvbnRleHQpOwogICAgICAgICAgICAgZXhlY3V0YWJsZS0+
ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBuYW1lLCBmaXJzdExpbmUsIGxhc3RM
aW5lKTsKLSAgICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5oZWFwLmFkZEZ1bmN0aW9uRXhl
Y3V0YWJsZShleGVjdXRhYmxlKTsKLSAgICAgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5oZWFw
LmFkZEZpbmFsaXplcihleGVjdXRhYmxlLCAmZmluYWxpemUpOwogICAgICAgICAgICAgcmV0dXJu
IGV4ZWN1dGFibGU7CiAgICAgICAgIH0KIApAQCAtNDgxLDggKzQ4Miw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB7CiAgICAgICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFi
bGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxGdW5jdGlvbkV4ZWN1dGFibGU+KGdsb2Jh
bERhdGEuaGVhcCkpIEZ1bmN0aW9uRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBuYW1lLCBpbmZlcnJl
ZE5hbWUsIHNvdXJjZSwgZm9yY2VVc2VzQXJndW1lbnRzLCBwYXJhbWV0ZXJzLCBpc0luU3RyaWN0
Q29udGV4dCk7CiAgICAgICAgICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxE
YXRhLCBuYW1lLCBmaXJzdExpbmUsIGxhc3RMaW5lKTsKLSAgICAgICAgICAgIGdsb2JhbERhdGEu
aGVhcC5hZGRGdW5jdGlvbkV4ZWN1dGFibGUoZXhlY3V0YWJsZSk7Ci0gICAgICAgICAgICBnbG9i
YWxEYXRhLmhlYXAuYWRkRmluYWxpemVyKGV4ZWN1dGFibGUsICZmaW5hbGl6ZSk7CiAgICAgICAg
ICAgICByZXR1cm4gZXhlY3V0YWJsZTsKICAgICAgICAgfQogCkBAIC02MzksNyArNjM4LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFVTdHJpbmcgcGFyYW1TdHJpbmcoKSBjb25zdDsKICAg
ICAgICAgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9z
eW1ib2xUYWJsZTsgfQogCi0gICAgICAgIHZvaWQgZGlzY2FyZENvZGUoKTsKKyAgICAgICAgdm9p
ZCBjbGVhckNvZGVJZk5vdENvbXBpbGluZygpOwogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgICAgIHN0YXRpYyBGdW5jdGlvbkV4
ZWN1dGFibGUqIGZyb21HbG9iYWxDb2RlKGNvbnN0IElkZW50aWZpZXImLCBFeGVjU3RhdGUqLCBE
ZWJ1Z2dlciosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU09iamVjdCoqIGV4Y2VwdGlvbik7CiAgICAg
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCkBAIC02
NTEsMTAgKzY1MCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCB1
bmxpbmtDYWxscygpOwogCi0gICAgcHJvdGVjdGVkOgogICAgICAgICB2b2lkIGNsZWFyQ29kZSgp
OwotICAgICAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU0NlbGwqKTsKIAorICAgIHByb3RlY3Rl
ZDoKICAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSkKICAg
ICAgICAgewogICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CkBA
IC02NzcsNyArNjc1LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQVNTRVJUKGtp
bmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CiAgICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tG
b3JDb25zdHJ1Y3Q7CiAgICAgICAgIH0KLSAgICAgICAgCisgCisgICAgICAgIGJvb2wgaXNDb21w
aWxpbmcoKQorICAgICAgICB7CisjaWYgRU5BQkxFKEpJVCkKKyAgICAgICAgICAgIGlmICghbV9q
aXRDb2RlRm9yQ2FsbCAmJiBtX2NvZGVCbG9ja0ZvckNhbGwpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICBpZiAoIW1faml0Q29kZUZvckNvbnN0cnVjdCAmJiBtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRp
ZgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKICAgICAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8
IFNjcmlwdEV4ZWN1dGFibGU6OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICB1bnNpZ25lZCBtX251
bUNhcHR1cmVkVmFyaWFibGVzIDogMzE7CiAgICAgICAgIGJvb2wgbV9mb3JjZVVzZXNBcmd1bWVu
dHMgOiAxOwpAQCAtNjg5LDggKzY5OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBJZGVu
dGlmaWVyIG1faW5mZXJyZWROYW1lOwogICAgICAgICBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+IG1f
bmFtZVZhbHVlOwogICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSogbV9zeW1ib2xUYWJsZTsKLSAg
ICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBtX25leHQ7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0
YWJsZSogbV9wcmV2OwogICAgIH07CiAKICAgICBpbmxpbmUgRnVuY3Rpb25FeGVjdXRhYmxlKiBK
U0Z1bmN0aW9uOjpqc0V4ZWN1dGFibGUoKSBjb25zdApAQCAtNzI1LDYgKzczMiwyMCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uLT5uYXRpdmVGdW5jdGlvbigpID09
IG5hdGl2ZUZ1bmN0aW9uOwogICAgIH0KIAorICAgIGlubGluZSB2b2lkIEV4ZWN1dGFibGVCYXNl
OjpjbGVhckNvZGVWaXJ0dWFsKEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChleGVjdXRhYmxlLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkp
IHsKKyAgICAgICAgY2FzZSBFdmFsRXhlY3V0YWJsZVR5cGU6CisgICAgICAgICAgICByZXR1cm4g
anNDYXN0PEV2YWxFeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNsZWFyQ29kZSgpOworICAgICAg
ICBjYXNlIFByb2dyYW1FeGVjdXRhYmxlVHlwZToKKyAgICAgICAgICAgIHJldHVybiBqc0Nhc3Q8
UHJvZ3JhbUV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y2xlYXJDb2RlKCk7CisgICAgICAgIGNh
c2UgRnVuY3Rpb25FeGVjdXRhYmxlVHlwZToKKyAgICAgICAgICAgIHJldHVybiBqc0Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNsZWFyQ29kZSgpOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGpzQ2FzdDxOYXRpdmVFeGVjdXRhYmxlKj4oZXhlY3V0
YWJsZSktPmNsZWFyQ29kZSgpOworICAgICAgICB9CisgICAgfQorCiAgICAgaW5saW5lIHZvaWQg
U2NyaXB0RXhlY3V0YWJsZTo6dW5saW5rQ2FsbHMoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMTE5NjI1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDE5LDcgKzQxOSw3IEBAIHN0cnVjdCBTdGFja1ByZXNlcnZpbmdSZWNvbXBpbGVy
IDogcHVibGkKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgICAgICBpZiAoY3VycmVudGx5RXhlY3V0
aW5nRnVuY3Rpb25zLmNvbnRhaW5zKGV4ZWN1dGFibGUpKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBleGVjdXRhYmxlLT5kaXNjYXJkQ29kZSgpOworICAgICAgICBleGVjdXRhYmxlLT5j
bGVhckNvZGVJZk5vdENvbXBpbGluZygpOwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDEx
OTYyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDcxLDcgKzQ3MSw3IEBAIER5bmFtaWNHbG9iYWxPYmplY3RT
Y29wZTo6RHluYW1pY0dsb2JhbE8KICAgICBpZiAoIW1fZHluYW1pY0dsb2JhbE9iamVjdFNsb3Qp
IHsKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogICAgICAgICBpZiAoRXhlY3V0YWJsZUFsbG9jYXRv
cjo6dW5kZXJNZW1vcnlQcmVzc3VyZSgpKQotICAgICAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLmRp
c2NhcmRBbGxDb21waWxlZENvZGUoKTsKKyAgICAgICAgICAgIGdsb2JhbERhdGEuaGVhcC5kZWxl
dGVBbGxDb21waWxlZENvZGUoKTsKICNlbmRpZgogCiAgICAgICAgIG1fZHluYW1pY0dsb2JhbE9i
amVjdFNsb3QgPSBkeW5hbWljR2xvYmFsT2JqZWN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMTk2MjUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDUsNyArMTA1LDcgQEAgdm9pZCBHQ0NvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRHYXJiYWdlQwog
dm9pZCBHQ0NvbnRyb2xsZXI6OmRpc2NhcmRBbGxDb21waWxlZENvZGUoKQogewogICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgSlNET01XaW5kb3c6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpLT5oZWFwLmRpc2NhcmRBbGxDb21waWxlZENvZGUoKTsKKyAgICBKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuZGVsZXRlQWxsQ29tcGlsZWRDb2RlKCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="153636"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>