<?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>61508</bug_id>
          
          <creation_ts>2011-05-26 00:50:56 -0700</creation_ts>
          <short_desc>DFG JIT - Add support for get by id self caching.</short_desc>
          <delta_ts>2011-05-26 14:38:02 -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>JavaScriptCore</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="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>410262</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-05-26 00:50:56 -0700</bug_when>
    <thetext>Change the call out to be an unexpected call (using silent spill/fill mechanisms), add a structure check &amp; compact load to the JIT code, and add patching mechanisms.  Since DFGOperations may want to be be implemented in asm, make these symbols be extern &quot;C&quot;.  Add an asm wrapper to pass the return address to the optimizing get-by-id operation, so that it can look up its StructureStubInfo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410272</commentid>
    <comment_count>1</comment_count>
      <attachid>94936</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-05-26 01:03:07 -0700</bug_when>
    <thetext>Created attachment 94936
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410274</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-26 01:05:08 -0700</bug_when>
    <thetext>Attachment 94936 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGOperations.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/dfg/DFGOperations.cpp:39:  Extra space before ( in function call  [whitespace/parens] [4]
Source/JavaScriptCore/dfg/DFGRepatch.h:35:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGRepatch.h:35:  The parameter name &quot;slot&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGRepatch.h:35:  The parameter name &quot;stubInfo&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 5 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410604</commentid>
    <comment_count>3</comment_count>
      <attachid>94936</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-05-26 11:07:06 -0700</bug_when>
    <thetext>Comment on attachment 94936
The patch

View in context: https://bugs.webkit.org/attachment.cgi?id=94936&amp;action=review

Please fix style bot issues and change C-style casts to C++-style casts.

r=me

&gt; Source/JavaScriptCore/dfg/DFGRepatch.cpp:46
&gt; +    // Only optimize once!

I still think it&apos;s crazy that all of this stuff is called &quot;repatch&quot; even though it can only happen once. This comment fills me with sad irony.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410846</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-05-26 14:38:02 -0700</bug_when>
    <thetext>fixed in r87431</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94936</attachid>
            <date>2011-05-26 01:03:07 -0700</date>
            <delta_ts>2011-05-26 11:07:06 -0700</delta_ts>
            <desc>The patch</desc>
            <filename>61508.patch</filename>
            <type>text/plain</type>
            <size>30541</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODczNjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTMgQEAK
KzIwMTEtMDUtMjYgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTUwOAorICAgICAgICBERkcgSklUIC0g
QWRkIHN1cHBvcnQgZm9yIGdldCBieSBpZCBzZWxmIGNhY2hpbmcuCisKKyAgICAgICAgQ2hhbmdl
IHRoZSBjYWxsIG91dCB0byBiZSBhbiB1bmV4cGVjdGVkIGNhbGwgKHVzaW5nIHNpbGVudCBzcGls
bC9maWxsIGZ1bmN0aW9ucyksCisgICAgICAgIGFkZCBhIHN0cnVjdHVyZSBjaGVjayAmIGNvbXBh
Y3QgbG9hZCB0byB0aGUgSklUIGNvZGUsIGFuZCBhZGQgcmVwYXRjaGluZyBtZWNoYW5pc21zLgor
ICAgICAgICBTaW5jZSBERkdPcGVyYXRpb25zIG1heSB3YW50IHRvIGJlIGJlIGltcGxlbWVudGVk
IGluIGFzbSwgbWFrZSB0aGVzZSBzeW1ib2xzIGJlIGV4dGVybgorICAgICAgICAiQyIuIEFkZCBh
biBhc20gd3JhcHBlciB0byBwYXNzIHRoZSByZXR1cm4gYWRkcmVzcyB0byB0aGUgb3B0aW1pemlu
ZyBnZXQtYnktaWQgb3BlcmF0aW9uLAorICAgICAgICBzbyB0aGF0IGl0IGNhbiBsb29rIHVwIGl0
cyBTdHJ1Y3R1cmVTdHViSW5mby4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICAgICAtIEFkZGVkIG5ldyBmaWxlcy4KKyAgICAg
ICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAgICAgICAgLSBBZGRlZCAn
dW5zZXQnIGVudHJpZXMgdG8gdW5pb24uCisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0
b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjphcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgICAgIC0gUmV0dXJuIHRoZSBjYWxsLCB3ZSBuZWVk
IHRoaXMgdG8gcG9wdWxhdGUgdGhlIFN0cnVjdHVyZVN0dWJJbmZvLgorICAgICAgICAqIGRmZy9E
RkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBp
bGVGdW5jdGlvbik6CisgICAgICAgICAgICAtIFBvcHVsYXRlIHRoZSBDb2RlYkJsb2NrJ3MgU3Ry
dWN0dXJlU3R1YkluZm8gVmVjdG9yLgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKToKKyAgICAgICAgICAgIC0gUmV0dXJuIHRoZSBjYWxsLCB3ZSBuZWVkIHRoaXMgdG8gcG9w
dWxhdGUgdGhlIFN0cnVjdHVyZVN0dWJJbmZvLgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjphZGRQcm9wZXJ0eUFjY2Vzcyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6
OlByb3BlcnR5QWNjZXNzUmVjb3JkOjpQcm9wZXJ0eUFjY2Vzc1JlY29yZCk6CisgICAgICAgICAg
ICAtIEFkZCBzdHJ1Y3R1cmVzIHRvIHJlY29yZCBwcm9wZXJ0eSBhY2Nlc3MgaW5mbyBkdXJpbmcg
Y29tcGlsYXRpb24uCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAg
ICAgLSBNYWRlIGFsbCBleHRlcm5hbCBtZXRob2RzIGV4dGVybiAiQyIuCisgICAgICAgIChKU0M6
OkRGRzo6b3BlcmF0aW9uUHV0QnlWYWxJbnRlcm5hbCk6CisgICAgICAgICAgICAtIE1vdmVkIG91
dHNpZGUgb2YgdGhlIGV4dGVybiAiQyIgYmxvY2suCisgICAgICAgICogZGZnL0RGR09wZXJhdGlv
bnMuaDoKKyAgICAgICAgICAgIC0gTWFkZSBhbGwgZXh0ZXJuYWwgbWV0aG9kcyBleHRlcm4gIkMi
LgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6ZGZnUmVwYXRjaENhbGwpOgorICAgICAgICAgICAgLSByZXBhdGNoIGEgY2FsbCB0byBsaW5r
IHRvIGEgbmV3IGNhbGxlZSBmdW5jdGlvbi4KKyAgICAgICAgKEpTQzo6REZHOjpkZmdSZXBhdGNo
R2V0QnlJZFNlbGYpOgorICAgICAgICAgICAgLSBNb2RpZnkgdGhlIEpJVCBjb2RlIHRvIG9wdGlt
aXplIHNlbGYgYWNjZXNzZXMuCisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVHZXRCeUlEKToK
KyAgICAgICAgICAgIC0gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgZGZnUmVwYXRjaEdldEJ5
SUQgKGZhY3RvciBvdXQgZmFpbGluZyBjYXNlcykuCisgICAgICAgIChKU0M6OkRGRzo6ZGZnUmVw
YXRjaEdldEJ5SUQpOgorICAgICAgICAgICAgLSBVc2VkIHRvIG9wdGltaXplICdvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUnIC0gcmVwYXRjaGVzIHRvICdvcGVyYXRpb25HZXRCeUlkJywgYW5kIHRy
aWVzIHRvIG9wdGltaXplIHNlbGYgYWNjZXNzZXMhCisgICAgICAgICogZGZnL0RGR1JlcGF0Y2gu
aDogQWRkZWQuCisgICAgICAgICAgICAtIEV4cG9zZSBkZmdSZXBhdGNoR2V0QnlJRC4KKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgICAgIC0gQ2hhbmdlZCBpbXBsZW1lbnRhdGlv
biBvZiBHZXRCeUlkIG9wcy4KKwogMjAxMS0wNS0yNSAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJy
YWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA4NzM2NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0yODMsNiArMjgzLDggQEAKIAkJODZCOTlBQjkxMTdFMzkxRTAw
REY1QTkwIC8qIFJvcGVJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NkI5OUFCNzExN0UzOTFFMDBERjVBOTAgLyogUm9wZUltcGwuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NkI5OUFFMzExN0U1
NzgxMDBERjVBOTAgLyogU3RyaW5nQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NkI5OUFFMTExN0U1NzgxMDBERjVBOTAgLyogU3RyaW5nQnVm
ZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
ODZCOTlBRTQxMTdFNTc4MTAwREY1QTkwIC8qIFN0cmluZ0ltcGxCYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkI5OUFFMjExN0U1NzgxMDBERjVB
OTAgLyogU3RyaW5nSW1wbEJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk4NkJCMDlDMDEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkJCMDlC
RTEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5jcHAgKi87IH07CisJCTg2QkIwOUMxMTM4
RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NkJCMDlCRjEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRj
aC5oICovOyB9OwogCQk4NkMzNkVFQTBFRTEyODlEMDBCM0RGNTkgLyogTWFjcm9Bc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QzM2RUU5
MEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oICovOyB9OwogCQk4NkM1NjhFMDEx
QTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZDNTY4REQxMUEyMTNFRTAwMDdGN0YwIC8q
IE1hY3JvQXNzZW1ibGVyQVJNLmNwcCAqLzsgfTsKIAkJODZDNTY4RTExMUEyMTNFRTAwMDdGN0Yw
IC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODZDNTY4REUxMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVy
TUlQUy5oICovOyB9OwpAQCAtOTY0LDYgKzk2Niw4IEBACiAJCTg2Qjk5QUI3MTE3RTM5MUUwMERG
NUE5MCAvKiBSb3BlSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSb3Bl
SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkI5OUFFMTExN0U1NzgxMDBE
RjVBOTAgLyogU3RyaW5nQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFN0cmluZ0J1ZmZlci5oOyBwYXRoID0gdGV4dC9TdHJpbmdCdWZmZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODZCOTlBRTIxMTdFNTc4MTAwREY1QTkwIC8qIFN0cmluZ0ltcGxC
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0cmluZ0ltcGxCYXNlLmg7
IHBhdGggPSB0ZXh0L1N0cmluZ0ltcGxCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTg2QkIwOUJFMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1JlcGF0Y2guY3BwOyBwYXRoID0gZGZnL0RG
R1JlcGF0Y2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkJCMDlCRjEzOEUz
ODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdSZXBhdGNoLmg7IHBhdGggPSBkZmcvREZHUmVwYXRjaC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NkMzNkVFOTBFRTEyODlEMDBCM0RGNTkgLyogTWFjcm9Bc3NlbWJs
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZDNTY4REQxMUEyMTNFRTAwMDdGN0YwIC8q
IE1hY3JvQXNzZW1ibGVyQVJNLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1hY3JvQXNzZW1ibGVyQVJNLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODZDNTY4REUxMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlck1JUFMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNjAsNiArMjA2NCw4IEBACiAJCQkJODZFQzlEQkYxMzI4
REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwICovLAogCQkJCTg2RUM5REMwMTMyOERG
ODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmggKi8sCiAJCQkJODZFQzlEQzExMzI4REY4MjAw
MkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oICovLAorCQkJCTg2QkIwOUJFMTM4RTM4MUIwMDU2
NzAyRiAvKiBERkdSZXBhdGNoLmNwcCAqLywKKwkJCQk4NkJCMDlCRjEzOEUzODFCMDA1NjcwMkYg
LyogREZHUmVwYXRjaC5oICovLAogCQkJCTg2RUNBM0Y5MTMyREYyNUEwMDJCMkFENyAvKiBERkdT
Y29yZUJvYXJkLmggKi8sCiAJCQkJODZFQzlEQzIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1
bGF0aXZlSklULmNwcCAqLywKIAkJCQk4NkVDOURDMzEzMjhERjgyMDAyQjJBRDcgLyogREZHU3Bl
Y3VsYXRpdmVKSVQuaCAqLywKQEAgLTI1NDAsNiArMjU0Niw3IEBACiAJCQkJNzkzNEJCN0YxMzYx
OTc5NDAwQ0I5OUExIC8qIFBhcmFsbGVsSm9ic09wZW5NUC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NjUxRENBMDQxMzZBNkZFRjAwRjc0MTk0IC8qIFBhc3NUcmFpdHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0Rjk3NDQ3MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTg2QkIwOUMxMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggaW4g
SGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKQEAgLTI5ODYsNiArMjk5Myw3IEBACiAJCQkJMTQyRDZGMTExMzUzOUE0MTAw
QjAyRTg2IC8qIE1hcmtTdGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkFFNjRBODEzNUU1
RTFDMDA5NjMwMTIgLyogTWFjcm9Bc3NlbWJsZXJTSDQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NzkzNEJCN0MxMzYxOTc5NDAwQ0I5OUExIC8qIFBhcmFsbGVsSm9ic0dlbmVyaWMuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJODZCQjA5QzAxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gODczNjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtMTMyLDYgKzEzMiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB1bmlvbiB7CiAg
ICAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgIGludHB0cl90IGRlbHRhQ2hlY2tU
b0NhbGw7CisgICAgICAgICAgICAgICAgaW50cHRyX3QgZGVsdGFDYWxsVG9Mb2FkOworICAgICAg
ICAgICAgfSB1bnNldDsKKyAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgV3Jp
dGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CiAgICAgICAgICAg
ICB9IGdldEJ5SWRTZWxmOwogICAgICAgICAgICAgc3RydWN0IHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA4NzM2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC03OTMsOSArNzkzLDkgQEAgcHJvdGVjdGVkOgogICAgICAgICBtX2pp
dC5tb3ZlRG91YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCByZXN1bHQpOwogICAgIH0KIAot
ICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYg
ZnVuY3Rpb24pCisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24pCiAgICAgewotICAgICAgICBtX2ppdC5h
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uLCBtX2ppdC5ncmFwaCgpW21fY29t
cGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICAgICAgcmV0dXJuIG1faml0LmFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24sIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5k
ZXhdLmV4Y2VwdGlvbkluZm8pOwogICAgIH0KIAogICAgIHZvaWQgYWRkQnJhbmNoKGNvbnN0IE1h
Y3JvQXNzZW1ibGVyOjpKdW1wJiBqdW1wLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9u
IDg3MzY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4Miw2ICsyODIsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21w
aWxlRnVuY3Rpb24oSklUQ29kCiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gSWYgY29tcGlsYXRp
b24gdGhyb3VnaCB0aGUgU3BlY3VsYXRpdmVKSVQgZmFpbGVkLCB0aHJvdyBhd2F5IHRoZSBjb2Rl
IHdlIGdlbmVyYXRlZC4KICAgICAgICAgbV9jYWxscy5jbGVhcigpOworICAgICAgICBtX3Byb3Bl
cnR5QWNjZXNzZXMuY2xlYXIoKTsKICAgICAgICAgcmV3aW5kVG9MYWJlbChzcGVjdWxhdGl2ZVBh
dGhCZWdpbik7CiAKICAgICAgICAgU3BlY3VsYXRpb25DaGVja1ZlY3RvciBub0NoZWNrczsKQEAg
LTM3MSw2ICszNzIsMTQgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENv
ZAogICAgICAgICB9CiAgICAgfQogCisgICAgbV9jb2RlQmxvY2stPnNldE51bWJlck9mU3RydWN0
dXJlU3R1YkluZm9zKG1fcHJvcGVydHlBY2Nlc3Nlcy5zaXplKCkpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3Byb3BlcnR5QWNjZXNzZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
U3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+c3RydWN0dXJlU3R1YkluZm8o
aSk7CisgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2Z1bmN0aW9uQ2FsbCk7CisgICAgICAgIGluZm8u
dS51bnNldC5kZWx0YUNoZWNrVG9DYWxsID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVsdGFD
aGVja1RvQ2FsbDsKKyAgICAgICAgaW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvTG9hZCA9IG1fcHJv
cGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvTG9hZDsKKyAgICB9CisKICAgICAvLyBGSVhN
RTogc3dpdGNoIHRoZSByZWdpc3RlciBmaWxlIGNoZWNrICYgYXJpdHkgY2hlY2sgb3ZlciB0byBE
RkdPcGVydGFpb24gc3R5bGUgY2FsbHMsIG5vdCBKSVQgc3R1YnMuCiAgICAgbGlua0J1ZmZlci5s
aW5rKGNhbGxSZWdpc3RlckZpbGVDaGVjaywgY3RpX3JlZ2lzdGVyX2ZpbGVfY2hlY2spOwogICAg
IGxpbmtCdWZmZXIubGluayhjYWxsQXJpdHlDaGVjaywgbV9jb2RlQmxvY2stPm1faXNDb25zdHJ1
Y3RvciA/IGN0aV9vcF9jb25zdHJ1Y3RfYXJpdHlDaGVjayA6IGN0aV9vcF9jYWxsX2FyaXR5Q2hl
Y2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAko
cmV2aXNpb24gODczNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NiwxMSArMTY2LDEyIEBAIHB1YmxpYzoKICAgICB9
CiAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRoIGFuIGV4Y2VwdGlv
biBjaGVjay4KLSAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVu
Y3Rpb25QdHImIGZ1bmN0aW9uLCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgIENhbGwgYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIHVu
c2lnbmVkIGV4Y2VwdGlvbkluZm8pCiAgICAgewogICAgICAgICBDYWxsIGZ1bmN0aW9uQ2FsbCA9
IGNhbGwoKTsKICAgICAgICAgSnVtcCBleGNlcHRpb25DaGVjayA9IGJyYW5jaFRlc3RQdHIoTm9u
WmVybywgQWJzb2x1dGVBZGRyZXNzKCZnbG9iYWxEYXRhKCktPmV4Y2VwdGlvbikpOwogICAgICAg
ICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZnVuY3Rpb24sIGV4Y2Vw
dGlvbkNoZWNrLCBleGNlcHRpb25JbmZvKSk7CisgICAgICAgIHJldHVybiBmdW5jdGlvbkNhbGw7
CiAgICAgfQogCiAgICAgLy8gSGVscGVyIG1ldGhvZHMgdG8gY2hlY2sgbm9kZXMgZm9yIGNvbnN0
YW50cy4KQEAgLTIzMiw2ICsyMzMsMTEgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJTYW1wbGlu
Z0ZsYWcoaW50MzJfdCBmbGFnKTsKICNlbmRpZgogCisgICAgdm9pZCBhZGRQcm9wZXJ0eUFjY2Vz
cyhKSVRDb21waWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwsIGludHB0cl90IGRlbHRhQ2hlY2tUb0Nh
bGwsIGludHB0cl90IGRlbHRhQ2FsbFRvTG9hZCkKKyAgICB7CisgICAgICAgIG1fcHJvcGVydHlB
Y2Nlc3Nlcy5hcHBlbmQoUHJvcGVydHlBY2Nlc3NSZWNvcmQoZnVuY3Rpb25DYWxsLCBkZWx0YUNo
ZWNrVG9DYWxsLCBkZWx0YUNhbGxUb0xvYWQpKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgLy8g
VGhlc2UgbWV0aG9kcyB1c2VkIGluIGxpbmtpbmcgdGhlIHNwZWN1bGF0aXZlICYgbm9uLXNwZWN1
bGF0aXZlIHBhdGhzIHRvZ2V0aGVyLgogICAgIHZvaWQgZmlsbE51bWVyaWNUb0RvdWJsZShOb2Rl
SW5kZXgsIEZQUlJlZywgR1BSUmVnIHRlbXBvcmFyeSk7CkBAIC0yNTEsNiArMjU3LDIxIEBAIHBy
aXZhdGU6CiAKICAgICAvLyBWZWN0b3Igb2YgY2FsbHMgb3V0IGZyb20gSklUIGNvZGUsIGluY2x1
ZGluZyBleGNlcHRpb24gaGFuZGxlciBpbmZvcm1hdGlvbi4KICAgICBWZWN0b3I8Q2FsbFJlY29y
ZD4gbV9jYWxsczsKKworICAgIHN0cnVjdCBQcm9wZXJ0eUFjY2Vzc1JlY29yZCB7CisgICAgICAg
IFByb3BlcnR5QWNjZXNzUmVjb3JkKEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCwgaW50
cHRyX3QgZGVsdGFDaGVja1RvQ2FsbCwgaW50cHRyX3QgZGVsdGFDYWxsVG9Mb2FkKQorICAgICAg
ICAgICAgOiBtX2Z1bmN0aW9uQ2FsbChmdW5jdGlvbkNhbGwpCisgICAgICAgICAgICAsIG1fZGVs
dGFDaGVja1RvQ2FsbChkZWx0YUNoZWNrVG9DYWxsKQorICAgICAgICAgICAgLCBtX2RlbHRhQ2Fs
bFRvTG9hZChkZWx0YUNhbGxUb0xvYWQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IEpJVENvbXBpbGVyOjpDYWxsIG1fZnVuY3Rpb25DYWxsOworICAgICAgICBpbnRwdHJfdCBtX2Rl
bHRhQ2hlY2tUb0NhbGw7CisgICAgICAgIGludHB0cl90IG1fZGVsdGFDYWxsVG9Mb2FkOworICAg
IH07CisKKyAgICBWZWN0b3I8UHJvcGVydHlBY2Nlc3NSZWNvcmQsIDQ+IG1fcHJvcGVydHlBY2Nl
c3NlczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gODczNjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw5ICszMyw3MSBAQAogI2luY2x1ZGUgIkpTQnl0ZUFycmF5LmgiCiAjaW5jbHVkZSAi
SlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkRGR1Jl
cGF0Y2guaCIKKworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1Mo
ZnVuY3Rpb24sIHJlZ2lzdGVyKSBcCisgICAgYXNtICggXAorICAgICIuZ2xvYmwgXyIgU1RSSU5H
SVpFKGZ1bmN0aW9uKSAiXG4iIFwKKyAgICAiXyIgU1RSSU5HSVpFKGZ1bmN0aW9uKSAiOiIgIlxu
IiBcCisgICAgICAgICJtb3YgKCVyc3ApLCAlIiBTVFJJTkdJWkUocmVnaXN0ZXIpICJcbiIgXAor
ICAgICAgICAiam1wIF8iIFNUUklOR0laRShmdW5jdGlvbikgIldpdGhSZXR1cm5BZGRyZXNzIiAi
XG4iIFwKKyAgICApOworI2RlZmluZSBGVU5DVElPTl9XUkFQUEVSX1dJVEhfQVJHNF9SRVRVUk5f
QUREUkVTUyhmdW5jdGlvbikgRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTKGZ1
bmN0aW9uLCByY3gpCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAordGVtcGxh
dGU8Ym9vbCBzdHJpY3Q+CitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIG9wZXJhdGlvblB1dEJ5
VmFsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCit7CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEo
KTsKKworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNl
KTsKKyAgICBKU1ZhbHVlIHByb3BlcnR5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm9wZXJ0
eSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwor
CisgICAgaWYgKExJS0VMWShwcm9wZXJ0eS5pc1VJbnQzMigpKSkgeworICAgICAgICB1aW50MzJf
dCBpID0gcHJvcGVydHkuYXNVSW50MzIoKTsKKworICAgICAgICBpZiAoaXNKU0FycmF5KGdsb2Jh
bERhdGEsIGJhc2VWYWx1ZSkpIHsKKyAgICAgICAgICAgIEpTQXJyYXkqIGpzQXJyYXkgPSBhc0Fy
cmF5KGJhc2VWYWx1ZSk7CisgICAgICAgICAgICBpZiAoanNBcnJheS0+Y2FuU2V0SW5kZXgoaSkp
IHsKKyAgICAgICAgICAgICAgICBqc0FycmF5LT5zZXRJbmRleCgqZ2xvYmFsRGF0YSwgaSwgdmFs
dWUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAganNBcnJheS0+SlNBcnJheTo6cHV0KGV4ZWMsIGksIHZhbHVlKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0pTQnl0ZUFycmF5KGdsb2JhbERhdGEs
IGJhc2VWYWx1ZSkgJiYgYXNCeXRlQXJyYXkoYmFzZVZhbHVlKS0+Y2FuQWNjZXNzSW5kZXgoaSkp
IHsKKyAgICAgICAgICAgIEpTQnl0ZUFycmF5KiBqc0J5dGVBcnJheSA9IGFzQnl0ZUFycmF5KGJh
c2VWYWx1ZSk7CisgICAgICAgICAgICAvLyBGSVhNRTogdGhlIEpJVHN0dWIgdXNlZCB0byByZWxp
bmsgdGhpcyB0byBhbiBvcHRpbWl6ZWQgZm9ybSEKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0lu
dDMyKCkpIHsKKyAgICAgICAgICAgICAgICBqc0J5dGVBcnJheS0+c2V0SW5kZXgoaSwgdmFsdWUu
YXNJbnQzMigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGRvdWJsZSBkVmFsdWUgPSAwOworICAgICAgICAgICAgaWYgKHZhbHVlLmdldE51
bWJlcihkVmFsdWUpKSB7CisgICAgICAgICAgICAgICAganNCeXRlQXJyYXktPnNldEluZGV4KGks
IGRWYWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgYmFzZVZhbHVlLnB1dChleGVjLCBpLCB2YWx1ZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5n
IHRocm93cyBhbiBleGNlcHRpb24uCisgICAgSWRlbnRpZmllciBpZGVudChleGVjLCBwcm9wZXJ0
eS50b1N0cmluZyhleGVjKSk7CisgICAgaWYgKCFnbG9iYWxEYXRhLT5leGNlcHRpb24pIHsKKyAg
ICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc3RyaWN0KTsKKyAgICAgICAgYmFzZVZhbHVlLnB1
dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOworICAgIH0KK30KKworZXh0ZXJuICJDIiB7CisK
IEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkNvbnZlcnRUaGlzKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wKQogewogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRPcCkudG9UaGlzT2JqZWN0KGV4ZWMpKTsKQEAgLTEwMSw2MSAr
MTYzLDI4IEBAIEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkdldEJ5VmFsKEV4ZWNTdGEKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQpKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uR2V0QnlJZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRCYXNlLCBJZGVudGlmaWVyKiBpZGVudGlmaWVyKQorRW5jb2RlZEpTVmFs
dWUgb3BlcmF0aW9uR2V0QnlJZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNWYWx1ZSBiYXNlVmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwogICAgIFByb3BlcnR5U2xvdCBzbG90
KGJhc2VWYWx1ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0KGV4
ZWMsICppZGVudGlmaWVyLCBzbG90KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNl
VmFsdWUuZ2V0KGV4ZWMsICpwcm9wZXJ0eU5hbWUsIHNsb3QpKTsKIH0KIAotdGVtcGxhdGU8Ym9v
bCBzdHJpY3Q+Ci1BTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIG9wZXJhdGlvblB1dEJ5VmFsSW50
ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitF
bmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSWRlbnRpZmllciosIFJldHVybkFkZHJlc3NQdHIp
OworRlVOQ1RJT05fV1JBUFBFUl9XSVRIX0FSRzRfUkVUVVJOX0FERFJFU1Mob3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplKTsKK0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZVdp
dGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzKQogewotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRh
KCk7Ci0KICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFz
ZSk7Ci0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkUHJvcGVy
dHkpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
LQotICAgIGlmIChMSUtFTFkocHJvcGVydHkuaXNVSW50MzIoKSkpIHsKLSAgICAgICAgdWludDMy
X3QgaSA9IHByb3BlcnR5LmFzVUludDMyKCk7Ci0KLSAgICAgICAgaWYgKGlzSlNBcnJheShnbG9i
YWxEYXRhLCBiYXNlVmFsdWUpKSB7Ci0gICAgICAgICAgICBKU0FycmF5KiBqc0FycmF5ID0gYXNB
cnJheShiYXNlVmFsdWUpOwotICAgICAgICAgICAgaWYgKGpzQXJyYXktPmNhblNldEluZGV4KGkp
KSB7Ci0gICAgICAgICAgICAgICAganNBcnJheS0+c2V0SW5kZXgoKmdsb2JhbERhdGEsIGksIHZh
bHVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGpzQXJyYXktPkpTQXJyYXk6OnB1dChleGVjLCBpLCB2YWx1ZSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNKU0J5dGVBcnJheShnbG9iYWxEYXRh
LCBiYXNlVmFsdWUpICYmIGFzQnl0ZUFycmF5KGJhc2VWYWx1ZSktPmNhbkFjY2Vzc0luZGV4KGkp
KSB7Ci0gICAgICAgICAgICBKU0J5dGVBcnJheSoganNCeXRlQXJyYXkgPSBhc0J5dGVBcnJheShi
YXNlVmFsdWUpOwotICAgICAgICAgICAgLy8gRklYTUU6IHRoZSBKSVRzdHViIHVzZWQgdG8gcmVs
aW5rIHRoaXMgdG8gYW4gb3B0aW1pemVkIGZvcm0hCi0gICAgICAgICAgICBpZiAodmFsdWUuaXNJ
bnQzMigpKSB7Ci0gICAgICAgICAgICAgICAganNCeXRlQXJyYXktPnNldEluZGV4KGksIHZhbHVl
LmFzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBkb3VibGUgZFZhbHVlID0gMDsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5nZXRO
dW1iZXIoZFZhbHVlKSkgewotICAgICAgICAgICAgICAgIGpzQnl0ZUFycmF5LT5zZXRJbmRleChp
LCBkVmFsdWUpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQorICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSBiYXNlVmFsdWUuZ2V0KGV4ZWMsICpwcm9wZXJ0eU5hbWUsIHNsb3QpOwogCi0gICAgICAg
IGJhc2VWYWx1ZS5wdXQoZXhlYywgaSwgdmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRT
dHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBpZiAoc3R1YkluZm8uc2VlbikKKyAgICAgICAg
ZGZnUmVwYXRjaEdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCAqcHJvcGVydHlOYW1lLCBzbG90LCBz
dHViSW5mbyk7CisgICAgZWxzZQorICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKIAotICAg
IC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyb3dzIGFuIGV4Y2VwdGlv
bi4KLSAgICBJZGVudGlmaWVyIGlkZW50KGV4ZWMsIHByb3BlcnR5LnRvU3RyaW5nKGV4ZWMpKTsK
LSAgICBpZiAoIWdsb2JhbERhdGEtPmV4Y2VwdGlvbikgewotICAgICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdChzdHJpY3QpOwotICAgICAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1
ZSwgc2xvdCk7Ci0gICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0K
IAogdm9pZCBvcGVyYXRpb25QdXRCeVZhbFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKQEAgLTE2OCwyOCArMTk3LDI4IEBAIHZvaWQgb3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3QoRXhlY1N0YXQKICAgICBvcGVyYXRpb25QdXRCeVZhbEludGVy
bmFsPGZhbHNlPihleGVjLCBlbmNvZGVkQmFzZSwgZW5jb2RlZFByb3BlcnR5LCBlbmNvZGVkVmFs
dWUpOwogfQogCi12b2lkIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBJ
ZGVudGlmaWVyKiBpZGVudGlmaWVyKQordm9pZCBvcGVyYXRpb25QdXRCeUlkU3RyaWN0KEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkQmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lKQogewogICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KHRydWUpOwotICAgIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSkucHV0KGV4
ZWMsICppZGVudGlmaWVyLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7Cisg
ICAgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKS5wdXQoZXhlYywgKnByb3BlcnR5TmFtZSwg
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCi12b2lkIG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBJZGVudGlmaWVyKiBpZGVudGlmaWVy
KQordm9pZCBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRp
ZmllciogcHJvcGVydHlOYW1lKQogewogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZhbHNlKTsK
LSAgICBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpLnB1dChleGVjLCAqaWRlbnRpZmllciwg
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworICAgIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkQmFzZSkucHV0KGV4ZWMsICpwcm9wZXJ0eU5hbWUsIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciogaWRlbnRpZmllcikKK3ZvaWQgb3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqIHByb3Bl
cnR5TmFtZSkKIHsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0cnVlKTsKLSAgICBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZEJhc2UpLnB1dERpcmVjdChleGVjLCAqaWRlbnRpZmllciwgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworICAgIEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkQmFzZSkucHV0RGlyZWN0KGV4ZWMsICpwcm9wZXJ0eU5hbWUsIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciogaWRlbnRpZmllcikKK3ZvaWQgb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIq
IHByb3BlcnR5TmFtZSkKIHsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChmYWxzZSk7Ci0gICAg
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKS5wdXREaXJlY3QoZXhlYywgKmlkZW50aWZpZXIs
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKKyAgICBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZEJhc2UpLnB1dERpcmVjdChleGVjLCAqcHJvcGVydHlOYW1lLCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAKIGJvb2wgb3BlcmF0aW9uQ29tcGFyZUxl
c3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AyKQpAQCAtMjQwLDYgKzI2OSw3IEBAIGJvb2wgZGZnQ29udmVydEpTVmFs
dWVUb0Jvb2xlYW4oRXhlY1N0YXQKICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cCkudG9Cb29sZWFuKGV4ZWMpOwogfQogCit9IC8vIGV4dGVybiAiQyIKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuaAkocmV2aXNpb24gODczNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDggQEAKIAog
I2luY2x1ZGUgPGRmZy9ERkdKSVRDb21waWxlci5oPgogCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xh
c3MgSWRlbnRpZmllcjsKLQotbmFtZXNwYWNlIERGRyB7CituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CitleHRlcm4gIkMiIHsKIAogLy8gVGhlc2UgdHlwZWRlZnMgcHJvdmlkZSB0eXBl
Y2hlY2tpbmcgd2hlbiBnZW5lcmF0aW5nIGNhbGxzIG91dCB0byBoZWxwZXIgcm91dGluZXM7CiAv
LyB0aGlzIGhlbHBzIHByZXZlbnQgY2FsbGluZyBhIGhlbHBlciByb3V0aW5lIHdpdGggdGhlIHdy
b25nIGFyZ3VtZW50cyEKQEAgLTU0LDYgKzUxLDcgQEAgRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9u
Q29udmVydFRoaXMoRXhlYwogRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uVmFsdWVBZGQoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
Mik7CiBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25HZXRCeVZhbChFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KTsKIEVu
Y29kZWRKU1ZhbHVlIG9wZXJhdGlvbkdldEJ5SWQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqKTsKK0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRp
ZmllciopOwogdm9pZCBvcGVyYXRpb25QdXRCeVZhbFN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpOwogdm9pZCBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmlj
dChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpOwogdm9pZCBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqKTsKQEAgLTg0LDYgKzgy
LDcgQEAgZG91YmxlIGRmZ0NvbnZlcnRKU1ZhbHVlVG9OdW1iZXIoRXhlY1N0YQogaW50MzJfdCBk
ZmdDb252ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwogYm9v
bCBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7
CiAKK30gLy8gZXh0ZXJuICJDIgogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1JlcGF0Y2guaCIK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2lu
Y2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitzdGF0aWMgdm9pZCBkZmdSZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvZGVibG9jaywgQ29k
ZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBuZXdDYWxsZWVGdW5jdGlvbikKK3sKKyAg
ICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZWJsb2NrKTsKKyAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhjYWxsLCBuZXdDYWxsZWVGdW5jdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkIGRm
Z1JlcGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAg
ICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKKworICAgIC8vIE9ubHkg
b3B0aW1pemUgb25jZSEKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOworCisgICAgLy8gUGF0Y2ggdGhlIHN0cnVj
dHVyZSBjaGVjayAmIHRoZSBvZmZzZXQgb2YgdGhlIGxvYWQuCisgICAgcmVwYXRjaEJ1ZmZlci5y
ZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJBdE9mZnNldCgt
KGludHB0cl90KXN0dWJJbmZvLnUudW5zZXQuZGVsdGFDaGVja1RvQ2FsbCksIHN0cnVjdHVyZSk7
CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5k
YXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8udS51bnNldC5kZWx0YUNhbGxUb0xvYWQp
LCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXQpOworfQorCitzdGF0aWMgYm9vbCB0cnlDYWNoZUdl
dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQoreworICAgIC8vIEZJWE1FOiBXcml0ZSBhIHRlc3QgdGhhdCBwcm92ZXMgd2UgbmVlZCB0byBj
aGVjayBmb3IgcmVjdXJzaW9uIGhlcmUganVzdAorICAgIC8vIGxpa2UgdGhlIGludGVycHJldGVy
IGRvZXMsIHRoZW4gYWRkIGEgY2hlY2sgZm9yIHJlY3Vyc2lvbi4KKworICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8vIEZJWE1FOiBzaG91bGQgc3VwcG9y
dCBsZW5ndGggYWNjZXNzIGZvciBBcnJheSAmIFN0cmluZy4KKworICAgIC8vIEZJWE1FOiBDYWNo
ZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMuCisgICAgaWYgKCFiYXNlVmFsdWUuaXND
ZWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFz
ZVZhbHVlLmFzQ2VsbCgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0
cnVjdHVyZSgpOworICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCisgICAg
aWYgKHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKKyAgICAgICAgaWYgKChzbG90LmNh
Y2hlZFByb3BlcnR5VHlwZSgpICE9IFByb3BlcnR5U2xvdDo6VmFsdWUpIHx8ICgoc2xvdC5jYWNo
ZWRPZmZzZXQoKSAqIHNpemVvZihKU1ZhbHVlKSkgPiAodW5zaWduZWQpTWFjcm9Bc3NlbWJsZXI6
Ok1heGltdW1Db21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIGRmZ1JlcGF0Y2hHZXRCeUlkU2VsZihjb2RlQmxvY2ssIHN0
dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICBzdHViSW5m
by5pbml0R2V0QnlJZFNlbGYoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIHN0cnVjdHVyZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIEZJ
WE1FOiBzaG91bGQgc3VwcG9ydCBwcm90b3R5cGUgJiBjaGFpbiBhY2Nlc3NlcyEKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgZGZnUmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBi
b29sIGNhY2hlZCA9IHRyeUNhY2hlR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFt
ZSwgc2xvdCwgc3R1YkluZm8pOworICAgIGlmICghY2FjaGVkKQorICAgICAgICBkZmdSZXBhdGNo
Q2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVy
YXRpb25HZXRCeUlkKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBERkdSZXBhdGNoX2gKKyNkZWZpbmUgREZHUmVwYXRjaF9oCisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPGRmZy9ERkdKSVRDb21waWxlci5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgZGZnUmVwYXRjaEdldEJ5SUQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbyk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmCisjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CShyZXZpc2lvbiA4NzM2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDUsMTMgKzgwNSwzNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBHZXRC
eUlkOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEpOwor
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKKwogICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKLSAgICAgICAgR1BSUmVzdWx0IHJl
c3VsdCh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeUlkLCByZXN1
bHQuZ3ByKCksIGJhc2VHUFIsIGlkZW50aWZpZXIobm9kZS5pZGVudGlmaWVyTnVtYmVyKCkpKTsK
LSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAg
ICAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7CisgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIHN0cnVjdHVyZUNoZWNrID0gbV9qaXQuYnJhbmNoUHRyV2l0
aFBhdGNoKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKSk7CisKKyAgICAg
ICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSLCBiYXNlR1BSKTsKKyAgICAgICAg
bV9qaXQubW92ZShiYXNlR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBtX2pp
dC5tb3ZlKEpJVENvbXBpbGVyOjpJbW1QdHIoaWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1i
ZXIoKSkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBK
SVRDb21waWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdp
c3RlcnMocmVzdWx0R1BSKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBoYW5kbGVkQnlD
ID0gbV9qaXQuanVtcCgpOworICAgICAgICBzdHJ1Y3R1cmVDaGVjay5saW5rKCZtX2ppdCk7CisK
KyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgIEpJ
VENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0IGxvYWRXaXRoUGF0Y2ggPSBtX2ppdC5sb2FkUHRy
V2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0
R1BSLCAwKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBpbnRwdHJfdCBjaGVja1RvQ2FsbCA9IG1f
aml0LmRpZmZlcmVuY2VCZXR3ZWVuKHN0cnVjdHVyZVRvQ29tcGFyZSwgZnVuY3Rpb25DYWxsKTsK
KyAgICAgICAgaW50cHRyX3QgY2FsbFRvTG9hZCA9IG1faml0LmRpZmZlcmVuY2VCZXR3ZWVuKGZ1
bmN0aW9uQ2FsbCwgbG9hZFdpdGhQYXRjaCk7CisKKyAgICAgICAgaGFuZGxlZEJ5Qy5saW5rKCZt
X2ppdCk7CisKKyAgICAgICAgbV9qaXQuYWRkUHJvcGVydHlBY2Nlc3MoZnVuY3Rpb25DYWxsLCBj
aGVja1RvQ2FsbCwgY2FsbFRvTG9hZCk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRH
UFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCg==
</data>
<flag name="review"
          id="88328"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>