<?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>96427</bug_id>
          
          <creation_ts>2012-09-11 14:37:19 -0700</creation_ts>
          <short_desc>JSActivation should inline allocate its registers, and eliminate &apos;arguments&apos; registers in the common case</short_desc>
          <delta_ts>2012-09-11 21:07:45 -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>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>717560</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-11 14:37:19 -0700</bug_when>
    <thetext>JSActivation should inline allocate its registers, and eliminate &apos;arguments&apos; registers in the common case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717579</commentid>
    <comment_count>1</comment_count>
      <attachid>163449</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-11 14:50:04 -0700</bug_when>
    <thetext>Created attachment 163449
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717885</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-11 21:07:45 -0700</bug_when>
    <thetext>Committed r128260: &lt;http://trac.webkit.org/changeset/128260&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163449</attachid>
            <date>2012-09-11 14:50:04 -0700</date>
            <delta_ts>2012-09-11 16:01:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96427-20120911144943.patch</filename>
            <type>text/plain</type>
            <size>40850</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI4MjI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNiBA
QAorMjAxMi0wOS0xMSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEpTQWN0aXZhdGlvbiBzaG91bGQgaW5saW5lIGFsbG9jYXRlIGl0cyByZWdpc3RlcnMsIGFu
ZCBlbGltaW5hdGUKKyAgICAgICAgJ2FyZ3VtZW50cycgcmVnaXN0ZXJzIGluIHRoZSBjb21tb24g
Y2FzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY0
MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IGN1dHMgdGhlIHNpemUgY2xhc3MgZm9yIHNpbXBsZSBjbG9zdXJlcyBkb3duIHRvIDY0IGJ5dGVz
LgorCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKTogU2V0IHRoZSB1
c2VzTm9uU3RyaWN0RXZhbAorICAgICAgICBmbGFnLCB3aGljaCBpcyBuZXcuIFVzZSBhIG1vcmUg
c3BlY2lmaWMgdGVzdCBmb3Igd2hldGhlciBhIGZ1bmN0aW9uCisgICAgICAgIHVzZXMgJ2FyZ3Vt
ZW50cycsIHNvIHdlIGNhbiBhdm9pZCBhbGxvY2F0aW5nLCBpbml0aWFsaXppbmcsIGFuZCB0ZWFy
aW5nCisgICAgICAgIG9mZiB0aG9zZSByZWdpc3RlcnMgaW4gdGhlIGNvbW1vbiBjYXNlLiBEaXN0
aW5ndWlzaCBiZXR3ZWVuIGNhcHR1cmluZworICAgICAgICBhcmd1bWVudHMgYW5kIG5vdCwgc28g
d2UgY2FuIGF2b2lkIGFsbG9jYXRpbmcgc3BhY2UgZm9yIGFyZ3VtZW50cyBpbgorICAgICAgICB0
aGUgdG9ybi1vZmYgb2JqZWN0LgorCisgICAgICAgIFdlIGNhbiBtYWtlIHRoaXMgZXZlbiBtb3Jl
IGdlbmVyYWwgaW4gdGhlIGZ1dHVyZSwgd2l0aCBzb21lIGJ5dGVjb2RlCisgICAgICAgIGdlbmVy
YXRvciByZWZhY3RvcmluZy4KKworICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVz
b2x2ZSk6IFVwZGF0ZWQgZm9yIG5ldyBpbnRlcmZhY2UuCisKKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEJ5dGVjb2RlR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnN5bWJvbFRhYmxlKTogVXBkYXRlZCBzb21l
IHR5cGVzLgorCisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6
aXNWYWxpZEFsbG9jYXRpb24pOiBBbGxvdyBsYXJnZSBhbGxvY2F0aW9ucywgbm93IHRoYXQgdGhl
eQorICAgICAgICBhcmUgYm90aCBzdXBwb3J0ZWQgYW5kIHVzZWQuCisKKyAgICAgICAgKiBoZWFw
L0hlYXAuaDoKKyAgICAgICAgKEhlYXApOiBBZGRlZCBhIG5ldyBmb3JtIG9mIGFsbG9jYXRlQ2Vs
bCB0aGF0IHNwZWNpZmllcyB0aGUgZnVsbCBzaXplCisgICAgICAgIG9mIHRoZSBhbGxvY2F0aW9u
LCB0byBhbGxvdyBmb3IgZXh0cmEgc3BhY2Ugb24gdGhlIGVuZC4KKworICAgICAgICAqIGludGVy
cHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmFyZ3VtZW50T2Zm
c2V0KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1Ro
aXMpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6SW50ZXJwcmV0ZXI6OnVud2luZENhbGxGcmFtZSk6IFJlZmFjdG9yZWQgdGhpcyBjb2RlIHRv
IGJlIG1vcmUKKyAgICAgICAgc3BlY2lmaWMgYWJvdXQgdGVhcmluZyBvZmYgJ2FyZ3VtZW50cycg
dnMgYWN0aXZhdGlvbnMuIFRoaXMgaXMgc29tZXRoaW5nCisgICAgICAgIEkgZm9yZ290IGluIG15
IGxhc3QgcGF0Y2gsIGFuZCBpdCBpcyByZXF1aXJlZCBub3cgdGhhdCB3ZSBjYW4gaGF2ZQorICAg
ICAgICBhY2l0dmF0aW9ucyB3aXRob3V0ICdhcmd1bWVudHMnIHJlZ2lzdGVycy4KKworICAgICAg
ICAqIHJ1bnRpbWUvQXJndW1lbnRzLmg6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6c2V0UmVn
aXN0ZXJzKTogTm8gbmVlZCBmb3Igc2V0UmVnaXN0ZXJzIGFueW1vcmUgYmVjYXVzZQorICAgICAg
ICB0aGUgYWN0aXZhdGlvbiBvYmplY3QncyBzdG9yYWdlIGRvZXNuJ3QgY2hhbmdlLgorCisgICAg
ICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRp
b246OkpTQWN0aXZhdGlvbik6IEluaXRpYWxpemUgb3VyIHN0b3JhZ2UgbWFudWFsbHkgYmVjYXVz
ZQorICAgICAgICBpdCdzIG5vdCBkZWNsYXJlZCB0byB0aGUgQysrIGNvbXBpbGVyLgorCisgICAg
ICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6dmlzaXRDaGlsZHJlbik6IE5vIGNvcHlBbmRBcHBlbmQg
YmVjYXVzZSBvdXIgc3RvcmFnZQorICAgICAgICBpcyBub3Qgb3V0LW9mLWxpbmUgYW55bW9yZS4K
KworICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlR2V0KToKKyAgICAgICAg
KEpTQzo6SlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1dCk6CisgICAgICAgIChKU0M6OkpTQWN0
aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlv
bjo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6OkpTQWN0aXZh
dGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmFy
Z3VtZW50c0dldHRlcik6IFJlZmFjdG9yZWQgaXNUb3JuT2ZmKCkgdGVzdGluZyB0bworICAgICAg
ICBhdm9pZCB1c2luZyBhIGRhdGEgbWVtYmVyIGFuZCB0byBhdm9pZCBoYXJkLWNvZGluZyBhbnkg
b2Zmc2V0IGFzc3VtcHRpb25zLgorCisgICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uaDoK
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0FjdGl2YXRpb24pOgorICAgICAgICAoSlNDOjpK
U0FjdGl2YXRpb246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6aXNEeW5h
bWljU2NvcGUpOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmNhcHR1cmVTdGFydCk6Cisg
ICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6c3RvcmFnZVNpemUpOgorICAgICAgICAoSlNDOjpK
U0FjdGl2YXRpb246OnN0b3JhZ2VTaXplSW5CeXRlcyk6CisgICAgICAgIChKU0M6OkpTQWN0aXZh
dGlvbjo6cmVnaXN0ZXJPZmZzZXQpOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OnRlYXJP
ZmYpOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmlzVG9ybk9mZik6CisgICAgICAgIChK
U0M6OkpTQWN0aXZhdGlvbjo6c3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6
YWxsb2NhdGlvblNpemUpOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmlzVmFsaWQpOiBO
ZXcgaGVscGVyIGZ1bmN0aW9ucyBmb3IgZG9pbmcgdGhlIG1hdGgKKyAgICAgICAgb24gb3VyIGlu
bGluZSBzdG9yYWdlLiBOb3RlIHRoYXQgaW4gdGhlICJBbGxPZlRoZVRoaW5ncyIgdGVhci1vZmYg
Y2FzZSwKKyAgICAgICAgdGhlIG51bWJlciBvZiB0aGluZ3MgaXMgbm90IGtub3duIGF0IGNvbXBp
bGUgdGltZSwgc28gd2Ugc3RvcmUgdGhlCisgICAgICAgIG51bWJlciBpbiB0aGUgYXJndW1lbnQg
Y291bnQgcmVnaXN0ZXIuIFdlIGNhbid0IGp1c3QgY29weSB0aGUgcmF3IGNvbnRlbnRzCisgICAg
ICAgIG9mIHRoZSByZWdpc3RlciBiZWFjdXNlIHdlIG5lZWQgYSB2YWx1ZSB0aGF0IGlzIHNhZmUg
Zm9yIHByZWNpc2UgbWFya2luZywKKyAgICAgICAgYW5kIHRoZSB2YWx1ZSBpbiB0aGUgcmVnaXN0
ZXIgZmlsZSBoYXMgYW4gaW52YWxpZCB0YWcuCisKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5o
OgorICAgICAgICAoSlNDOjphbGxvY2F0ZUNlbGwpOiBOZXcgZnVuY3Rpb24gZm9yIGFsbG9jYXRp
bmcgd2l0aCBleHRyYSBzdG9yYWdlCisgICAgICAgIG9uIHRoZSBlbmQuCisKKyAgICAgICAgKiBy
dW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJs
ZU9iamVjdDo6SlNTeW1ib2xUYWJsZU9iamVjdCk6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFi
bGVPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTVmFyaWFibGVP
YmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNWYXJpYWJsZU9iamVjdDo6SlNWYXJpYWJsZU9iamVj
dCk6CisgICAgICAgIChKU1ZhcmlhYmxlT2JqZWN0KTogTWFrZSBpdCBlYXNpZXIgZm9yIHN1YmNs
YXNzZXMgdG8gdXNlIHRoZWlyIHN5bWJvbAorICAgICAgICB0YWJsZXMgZHVyaW5nIGNvbnN0cnVj
dGlvbiwgYnkgcGFzc2luZyB0aGUgdGFibGUgYXMgYSBjb25zdHJ1Y3RvciBhcmd1bWVudC4KKwor
ICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUuaDoKKyAgICAgICAgKEpTQzo6U2hhcmVkU3lt
Ym9sVGFibGU6OnVzZXNOb25TdHJpY3RFdmFsKToKKyAgICAgICAgKEpTQzo6U2hhcmVkU3ltYm9s
VGFibGU6OnNldFVzZXNOb25TdHJpY3RFdmFsKToKKyAgICAgICAgKFNoYXJlZFN5bWJvbFRhYmxl
KToKKyAgICAgICAgKEpTQzo6U2hhcmVkU3ltYm9sVGFibGU6OmNhcHR1cmVNb2RlKToKKyAgICAg
ICAgKEpTQzo6U2hhcmVkU3ltYm9sVGFibGU6OnNldENhcHR1cmVNb2RlKToKKyAgICAgICAgKEpT
Qzo6U2hhcmVkU3ltYm9sVGFibGU6OmNhcHR1cmVTdGFydCk6CisgICAgICAgIChKU0M6OlNoYXJl
ZFN5bWJvbFRhYmxlOjpzZXRDYXB0dXJlU3RhcnQpOgorICAgICAgICAoSlNDOjpTaGFyZWRTeW1i
b2xUYWJsZTo6Y2FwdHVyZUVuZCk6CisgICAgICAgIChKU0M6OlNoYXJlZFN5bWJvbFRhYmxlOjpz
ZXRDYXB0dXJlRW5kKToKKyAgICAgICAgKEpTQzo6U2hhcmVkU3ltYm9sVGFibGU6OnBhcmFtZXRl
ckNvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OlNoYXJlZFN5bWJvbFRhYmxlOjpz
ZXRQYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpTaGFyZWRTeW1i
b2xUYWJsZTo6U2hhcmVkU3ltYm9sVGFibGUpOiBBZGRlZCBkYXRhIG1lbWJlcnMgdG8gbW9yZQor
ICAgICAgICBwcmVjaXNlbHkgZGVzY3JpYmUgd2hhdCBraW5kIG9mIGNhcHR1cmUgaXMgaW4gcGxh
eSwgYW5kIHRvIGF2b2lkIGhhdmluZworICAgICAgICBkYXRhIG1lbWJlcnMgaW4gdGhlIGFjdGl2
YXRpb24uIFdlIGV4cGVjdCBOIGFjdGl2YXRpb25zIHBlciBzeW1ib2wgdGFibGUsCisgICAgICAg
IHNvIHRoaXMgY2FuIGJlIGEgYmlnIHNhdmluZ3MgaW4gaGVhdnkgY2xvc3VyZSB1c2FnZS4KKwog
MjAxMi0wOS0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIExM
SW50IHNob3VsZCBvcHRpbWl6ZSBhbmQgcHJvZmlsZSBhcnJheSBsZW5ndGggYWNjZXNzZXMKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxMjgyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYwLDcgKzI2MCw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnByZXNlcnZlTGFzdFZh
cigKICAgICAgICAgbV9sYXN0VmFyID0gJm1fY2FsbGVlUmVnaXN0ZXJzLmxhc3QoKTsKIH0KIAot
Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlKiBwcm9ncmFt
Tm9kZSwgSlNTY29wZSogc2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgUHJvZ3JhbUNv
ZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbktpbmQgY29tcGlsYXRpb25LaW5kKQorQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlKiBwcm9ncmFtTm9k
ZSwgSlNTY29wZSogc2NvcGUsIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgUHJvZ3Jh
bUNvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbktpbmQgY29tcGlsYXRpb25LaW5kKQog
ICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29rcyhzY29wZS0+Z2xvYmFsT2JqZWN0KCktPmRlYnVn
Z2VyKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3Moc2NvcGUtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5zdXBwb3J0c1Byb2ZpbGluZyhzY29wZS0+
Z2xvYmFsT2JqZWN0KCkpKQogICAgICwgbV9zaG91bGRFbWl0UmljaFNvdXJjZUluZm8oc2NvcGUt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5zdXBwb3J0c1JpY2hT
b3VyY2VJbmZvKHNjb3BlLT5nbG9iYWxPYmplY3QoKSkpCkBAIC0yOTUsMTMgKzI5NSwxNSBAQCBC
eXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvCiAgICAgaWYgKG1fc2hvdWxk
RW1pdERlYnVnSG9va3MpCiAgICAgICAgIG1fY29kZUJsb2NrLT5zZXROZWVkc0Z1bGxTY29wZUNo
YWluKHRydWUpOwogCisgICAgY29kZUJsb2NrLT5zZXRHbG9iYWxEYXRhKG1fZ2xvYmFsRGF0YSk7
CisgICAgc3ltYm9sVGFibGUtPnNldFVzZXNOb25TdHJpY3RFdmFsKGNvZGVCbG9jay0+dXNlc0V2
YWwoKSAmJiAhY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSk7ICAgIAorICAgIG1fY29kZUJsb2Nr
LT5zZXROdW1QYXJhbWV0ZXJzKDEpOyAvLyBBbGxvY2F0ZSBzcGFjZSBmb3IgInRoaXMiCisKICAg
ICBwcmVwZW5kQ29tbWVudCgiZW50ZXJpbmcgUHJvZ3JhbSBibG9jayIpOwogICAgIGVtaXRPcGNv
ZGUob3BfZW50ZXIpOwotICAgIGNvZGVCbG9jay0+c2V0R2xvYmFsRGF0YShtX2dsb2JhbERhdGEp
OwogCiAgICAgLy8gRklYTUU6IE1vdmUgY29kZSB0aGF0IG1vZGlmaWVzIHRoZSBnbG9iYWwgb2Jq
ZWN0IHRvIEludGVycHJldGVyOjpleGVjdXRlLgogICAgIAotICAgIG1fY29kZUJsb2NrLT5zZXRO
dW1QYXJhbWV0ZXJzKDEpOyAvLyBBbGxvY2F0ZSBzcGFjZSBmb3IgInRoaXMiCiAgICAgY29kZUJs
b2NrLT5tX251bUNhcHR1cmVkVmFycyA9IGNvZGVCbG9jay0+bV9udW1WYXJzOwogICAgIAogICAg
IGlmIChjb21waWxhdGlvbktpbmQgPT0gT3B0aW1pemluZ0NvbXBpbGF0aW9uKQpAQCAtMzQyLDcg
KzM0NCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihQcm8KICAgICB9
CiB9CiAKLUJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlO
b2RlKiBmdW5jdGlvbkJvZHksIEpTU2NvcGUqIHNjb3BlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFi
bGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbktpbmQpCitCeXRlY29kZUdlbmVy
YXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBK
U1Njb3BlKiBzY29wZSwgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQ29tcGlsYXRpb25LaW5kKQogICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29r
cyhzY29wZS0+Z2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRQ
cm9maWxlSG9va3Moc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxPYmplY3RNZXRob2RUYWJs
ZSgpLT5zdXBwb3J0c1Byb2ZpbGluZyhzY29wZS0+Z2xvYmFsT2JqZWN0KCkpKQogICAgICwgbV9z
aG91bGRFbWl0UmljaFNvdXJjZUluZm8oc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxPYmpl
Y3RNZXRob2RUYWJsZSgpLT5zdXBwb3J0c1JpY2hTb3VyY2VJbmZvKHNjb3BlLT5nbG9iYWxPYmpl
Y3QoKSkpCkBAIC0zNzgsNyArMzgwLDkgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2Vu
ZXJhdG9yKEZ1bgogICAgICAgICBtX2NvZGVCbG9jay0+c2V0TmVlZHNGdWxsU2NvcGVDaGFpbih0
cnVlKTsKIAogICAgIGNvZGVCbG9jay0+c2V0R2xvYmFsRGF0YShtX2dsb2JhbERhdGEpOwotICAg
IAorICAgIHN5bWJvbFRhYmxlLT5zZXRVc2VzTm9uU3RyaWN0RXZhbChjb2RlQmxvY2stPnVzZXNF
dmFsKCkgJiYgIWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOworICAgIHN5bWJvbFRhYmxlLT5z
ZXRQYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoZnVuY3Rpb25Cb2R5LT5wYXJhbWV0ZXJzKCkt
PnNpemUoKSArIDEpOworCiAgICAgcHJlcGVuZENvbW1lbnQoImVudGVyaW5nIEZ1bmN0aW9uIGJs
b2NrIik7CiAgICAgZW1pdE9wY29kZShvcF9lbnRlcik7CiAgICAgaWYgKG1fY29kZUJsb2NrLT5u
ZWVkc0Z1bGxTY29wZUNoYWluKCkpIHsKQEAgLTM4OCw3ICszOTIsNyBAQCBCeXRlY29kZUdlbmVy
YXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuCiAgICAgICAgIG1fY29kZUJsb2NrLT5zZXRBY3Rp
dmF0aW9uUmVnaXN0ZXIobV9hY3RpdmF0aW9uUmVnaXN0ZXItPmluZGV4KCkpOwogICAgIH0KIAot
ICAgIGlmIChtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpIHx8IGZ1bmN0aW9uQm9k
eS0+dXNlc0FyZ3VtZW50cygpKSB7CisgICAgaWYgKGZ1bmN0aW9uQm9keS0+dXNlc0FyZ3VtZW50
cygpIHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKSB8fCBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKSB7
IC8vIE1heSByZWlmeSBhcmd1bWVudHMgb2JqZWN0LgogICAgICAgICBSZWdpc3RlcklEKiB1bm1v
ZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRWYXIoKTsgLy8gQW5vbnltb3VzLCBzbyBpdCBj
YW4ndCBiZSBtb2RpZmllZCBieSB1c2VyIGNvZGUuCiAgICAgICAgIFJlZ2lzdGVySUQqIGFyZ3Vt
ZW50c1JlZ2lzdGVyID0gYWRkVmFyKHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMsIGZhbHNlKTsg
Ly8gQ2FuIGJlIGNoYW5nZWQgYnkgYXNzaWduaW5nIHRvICdhcmd1bWVudHMnLgogCkBAIC00MTks
NiArNDIzLDI1IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW4KICAg
ICAgICAgfQogICAgIH0KIAorICAgIGJvb2wgY2FwdHVyZXNBbnlBcmd1bWVudCA9IGNvZGVCbG9j
ay0+dXNlc0FyZ3VtZW50cygpIHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKSB8fCBtX3Nob3VsZEVt
aXREZWJ1Z0hvb2tzOyAvLyBNYXkgcmVpZnkgYXJndW1lbnRzIG9iamVjdC4KKyAgICBpZiAoIWNh
cHR1cmVzQW55QXJndW1lbnQgJiYgZnVuY3Rpb25Cb2R5LT5oYXNDYXB0dXJlZFZhcmlhYmxlcygp
KSB7CisgICAgICAgIEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycyA9ICpmdW5jdGlvbkJv
ZHktPnBhcmFtZXRlcnMoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0
ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIWZ1bmN0aW9uQm9keS0+Y2FwdHVy
ZXMocGFyYW1ldGVyc1tpXSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBjYXB0dXJlc0FueUFyZ3VtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKGNhcHR1cmVzQW55QXJndW1lbnQpIHsKKyAgICAgICAgc3lt
Ym9sVGFibGUtPnNldENhcHR1cmVNb2RlKFNoYXJlZFN5bWJvbFRhYmxlOjpBbGxPZlRoZVRoaW5n
cyk7CisgICAgICAgIHN5bWJvbFRhYmxlLT5zZXRDYXB0dXJlU3RhcnQoLUNhbGxGcmFtZTo6b2Zm
c2V0Rm9yKHN5bWJvbFRhYmxlLT5wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoKSkpOworICAg
IH0gZWxzZSB7CisgICAgICAgIHN5bWJvbFRhYmxlLT5zZXRDYXB0dXJlTW9kZShTaGFyZWRTeW1i
b2xUYWJsZTo6U29tZU9mVGhlVGhpbmdzKTsKKyAgICAgICAgc3ltYm9sVGFibGUtPnNldENhcHR1
cmVTdGFydChtX2NvZGVCbG9jay0+bV9udW1WYXJzKTsKKyAgICB9CisKICAgICBSZWdpc3RlcklE
KiBjYWxsZWVSZWdpc3RlciA9IHJlc29sdmVDYWxsZWUoZnVuY3Rpb25Cb2R5KTsgLy8gTWF5IHB1
c2ggdG8gdGhlIHNjb3BlIGNoYWluIGFuZC9vciBhZGQgYSBjYXB0dXJlZCB2YXIuCiAKICAgICBj
b25zdCBEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjayYgZnVuY3Rpb25TdGFjayA9IGZ1
bmN0aW9uQm9keS0+ZnVuY3Rpb25TdGFjaygpOwpAQCAtNDg0LDkgKzUwNywxMSBAQCBCeXRlY29k
ZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuCiAgICAgICAgICAgICBhZGRWYXIoaWRl
bnQsIHZhclN0YWNrW2ldLnNlY29uZCAmIERlY2xhcmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50KTsK
ICAgICB9CiAKLSAgICBpZiAobV9zaG91bGRFbWl0RGVidWdIb29rcykKKyAgICBpZiAobV9zaG91
bGRFbWl0RGVidWdIb29rcyB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCkpCiAgICAgICAgIGNvZGVC
bG9jay0+bV9udW1DYXB0dXJlZFZhcnMgPSBjb2RlQmxvY2stPm1fbnVtVmFyczsKIAorICAgIHN5
bWJvbFRhYmxlLT5zZXRDYXB0dXJlRW5kKGNvZGVCbG9jay0+bV9udW1DYXB0dXJlZFZhcnMpOwor
CiAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzID0gKmZ1bmN0aW9uQm9keS0+cGFy
YW1ldGVycygpOwogICAgIG1fcGFyYW1ldGVycy5ncm93KHBhcmFtZXRlcnMuc2l6ZSgpICsgMSk7
IC8vIHJlc2VydmUgc3BhY2UgZm9yICJ0aGlzIgogCkBAIC01MTQsNyArNTM5LDcgQEAgQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bgogICAgIH0KIH0KIAotQnl0ZWNvZGVH
ZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgSlNTY29wZSog
c2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgRXZhbENvZGVCbG9jayogY29kZUJsb2Nr
LCBDb21waWxhdGlvbktpbmQpCitCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3Io
RXZhbE5vZGUqIGV2YWxOb2RlLCBKU1Njb3BlKiBzY29wZSwgU2hhcmVkU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlLCBFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uS2luZCkKICAg
ICA6IG1fc2hvdWxkRW1pdERlYnVnSG9va3Moc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dl
cigpKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzKHNjb3BlLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+c3VwcG9ydHNQcm9maWxpbmcoc2NvcGUtPmds
b2JhbE9iamVjdCgpKSkKICAgICAsIG1fc2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZvKHNjb3BlLT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+c3VwcG9ydHNSaWNoU291
cmNlSW5mbyhzY29wZS0+Z2xvYmFsT2JqZWN0KCkpKQpAQCAtNTQ5LDExICs1NzQsMTMgQEAgQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YQogICAgIGlmIChtX3Nob3VsZEVt
aXREZWJ1Z0hvb2tzIHx8IG1fYmFzZVNjb3BlRGVwdGgpCiAgICAgICAgIG1fY29kZUJsb2NrLT5z
ZXROZWVkc0Z1bGxTY29wZUNoYWluKHRydWUpOwogCi0gICAgcHJlcGVuZENvbW1lbnQoImVudGVy
aW5nIEV2YWwgYmxvY2siKTsKLSAgICBlbWl0T3Bjb2RlKG9wX2VudGVyKTsKICAgICBjb2RlQmxv
Y2stPnNldEdsb2JhbERhdGEobV9nbG9iYWxEYXRhKTsKKyAgICBzeW1ib2xUYWJsZS0+c2V0VXNl
c05vblN0cmljdEV2YWwoY29kZUJsb2NrLT51c2VzRXZhbCgpICYmICFjb2RlQmxvY2stPmlzU3Ry
aWN0TW9kZSgpKTsgICAgCiAgICAgbV9jb2RlQmxvY2stPnNldE51bVBhcmFtZXRlcnMoMSk7CiAK
KyAgICBwcmVwZW5kQ29tbWVudCgiZW50ZXJpbmcgRXZhbCBibG9jayIpOworICAgIGVtaXRPcGNv
ZGUob3BfZW50ZXIpOworCiAgICAgY29uc3QgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3Rh
Y2smIGZ1bmN0aW9uU3RhY2sgPSBldmFsTm9kZS0+ZnVuY3Rpb25TdGFjaygpOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25TdGFjay5zaXplKCk7ICsraSkKICAgICAgICAgbV9j
b2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVjbChGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqbV9n
bG9iYWxEYXRhLCBmdW5jdGlvblN0YWNrW2ldKSk7CkBAIC0xMzU1LDcgKzEzODIsNyBAQCBSZXNv
bHZlUmVzdWx0IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlCiAgICAgICAgICAgICB9CiAjaWYg
IUFTU0VSVF9ESVNBQkxFRAogICAgICAgICAgICAgaWYgKEpTQWN0aXZhdGlvbiogYWN0aXZhdGlv
biA9IGpzRHluYW1pY0Nhc3Q8SlNBY3RpdmF0aW9uKj4oY3VycmVudFZhcmlhYmxlT2JqZWN0KSkK
LSAgICAgICAgICAgICAgICBBU1NFUlQoYWN0aXZhdGlvbi0+aXNWYWxpZFNjb3BlZExvb2t1cChl
bnRyeS5nZXRJbmRleCgpKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGFjdGl2YXRpb24tPmlz
VmFsaWQoZW50cnkpKTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6
OmxleGljYWxSZXNvbHZlKGVudHJ5LmdldEluZGV4KCksIGRlcHRoLCBmbGFncyk7CiAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDEyODIyNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMjYxLDkgKzI2MSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBzZXREdW1wc0dlbmVyYXRlZENvZGUoYm9vbCBkdW1wc0dlbmVyYXRl
ZENvZGUpOwogICAgICAgICBzdGF0aWMgYm9vbCBkdW1wc0dlbmVyYXRlZENvZGUoKTsKIAotICAg
ICAgICBCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSosIEpTU2NvcGUqLCBTeW1ib2xUYWJs
ZSosIFByb2dyYW1Db2RlQmxvY2sqLCBDb21waWxhdGlvbktpbmQpOwotICAgICAgICBCeXRlY29k
ZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiwgSlNTY29wZSosIFN5bWJvbFRhYmxlKiwgQ29k
ZUJsb2NrKiwgQ29tcGlsYXRpb25LaW5kKTsKLSAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoRXZh
bE5vZGUqLCBKU1Njb3BlKiwgU3ltYm9sVGFibGUqLCBFdmFsQ29kZUJsb2NrKiwgQ29tcGlsYXRp
b25LaW5kKTsKKyAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUqLCBKU1Njb3Bl
KiwgU2hhcmVkU3ltYm9sVGFibGUqLCBQcm9ncmFtQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25LaW5k
KTsKKyAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSosIEpTU2NvcGUq
LCBTaGFyZWRTeW1ib2xUYWJsZSosIENvZGVCbG9jayosIENvbXBpbGF0aW9uS2luZCk7CisgICAg
ICAgIEJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiwgSlNTY29wZSosIFNoYXJlZFN5bWJvbFRh
YmxlKiwgRXZhbENvZGVCbG9jayosIENvbXBpbGF0aW9uS2luZCk7CiAKICAgICAgICAgfkJ5dGVj
b2RlR2VuZXJhdG9yKCk7CiAgICAgICAgIApAQCAtNjU0LDcgKzY1NCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIHB1YmxpYzoKICAgICAgICAgVmVjdG9yPEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rp
b25zKCkgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KIAotICAgICAgICBTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGUoKSB7IHJldHVybiAqbV9zeW1ib2xUYWJsZTsgfQorICAgICAgICBTaGFyZWRT
eW1ib2xUYWJsZSYgc3ltYm9sVGFibGUoKSB7IHJldHVybiAqbV9zeW1ib2xUYWJsZTsgfQogI2lm
IEVOQUJMRShCWVRFQ09ERV9DT01NRU5UUykKICAgICAgICAgVmVjdG9yPENvbW1lbnQ+JiBjb21t
ZW50cygpIHsgcmV0dXJuIG1fY29tbWVudHM7IH0KICNlbmRpZgpAQCAtNjk3LDcgKzY5Nyw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZv
OwogCiAgICAgICAgIFN0cm9uZzxKU1Njb3BlPiBtX3Njb3BlOwotICAgICAgICBTeW1ib2xUYWJs
ZSogbV9zeW1ib2xUYWJsZTsKKyAgICAgICAgU2hhcmVkU3ltYm9sVGFibGUqIG1fc3ltYm9sVGFi
bGU7CiAKICNpZiBFTkFCTEUoQllURUNPREVfQ09NTUVOVFMpCiAgICAgICAgIFZlY3RvcjxDb21t
ZW50PiBtX2NvbW1lbnRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJl
dmlzaW9uIDEyODIyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MDEsMTQgKzgwMSwxMSBAQCB2b2lkIEhlYXA6OmRpZEFsbG9jYXRl
KHNpemVfdCBieXRlcykKICAgICBtX2J5dGVzQWxsb2NhdGVkICs9IGJ5dGVzOwogfQogCi1ib29s
IEhlYXA6OmlzVmFsaWRBbGxvY2F0aW9uKHNpemVfdCBieXRlcykKK2Jvb2wgSGVhcDo6aXNWYWxp
ZEFsbG9jYXRpb24oc2l6ZV90KQogewogICAgIGlmICghaXNWYWxpZFRocmVhZFN0YXRlKG1fZ2xv
YmFsRGF0YSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChieXRlcyA+IE1hcmtl
ZFNwYWNlOjptYXhDZWxsU2l6ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgaWYgKG1f
b3BlcmF0aW9uSW5Qcm9ncmVzcyAhPSBOb09wZXJhdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTI4MjI2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xODIsNiArMTgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBD
b3BpZWRTcGFjZTsKICAgICAgICAgZnJpZW5kIGNsYXNzIFNsb3RWaXNpdG9yOwogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmKTsKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFw
Jiwgc2l6ZV90KTsKIAogICAgICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKHNpemVf
dCk7CiAgICAgICAgIHZvaWQqIGFsbG9jYXRlV2l0aG91dERlc3RydWN0b3Ioc2l6ZV90KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHJl
dmlzaW9uIDEyODIyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxs
RnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDggKzE5MCw4IEBAIG5hbWVzcGFjZSBKU0Mg
IHsKICAgICAgICAgLy8gQWNjZXNzIHRvIGFyZ3VtZW50cy4KICAgICAgICAgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQoKSBjb25zdCB7IHJldHVybiBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIC0g
MTsgfQogICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSBjb25zdCB7
IHJldHVybiB0aGlzW1JlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudF0ucGF5bG9hZCgpOyB9Ci0g
ICAgICAgIHN0YXRpYyBpbnQgYXJndW1lbnRPZmZzZXQoc2l6ZV90IGFyZ3VtZW50KSB7IHJldHVy
biBzX2ZpcnN0QXJndW1lbnRPZmZzZXQgLSBhcmd1bWVudDsgfQotICAgICAgICBzdGF0aWMgaW50
IGFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhzaXplX3QgYXJndW1lbnQpIHsgcmV0dXJuIHNf
dGhpc0FyZ3VtZW50T2Zmc2V0IC0gYXJndW1lbnQ7IH0KKyAgICAgICAgc3RhdGljIGludCBhcmd1
bWVudE9mZnNldChpbnQgYXJndW1lbnQpIHsgcmV0dXJuIHNfZmlyc3RBcmd1bWVudE9mZnNldCAt
IGFyZ3VtZW50OyB9CisgICAgICAgIHN0YXRpYyBpbnQgYXJndW1lbnRPZmZzZXRJbmNsdWRpbmdU
aGlzKGludCBhcmd1bWVudCkgeyByZXR1cm4gc190aGlzQXJndW1lbnRPZmZzZXQgLSBhcmd1bWVu
dDsgfQogCiAgICAgICAgIEpTVmFsdWUgYXJndW1lbnQoc2l6ZV90IGFyZ3VtZW50KQogICAgICAg
ICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAJKHJldmlzaW9uIDEyODIyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2MywyMyArNDYz
LDIwIEBAIE5FVkVSX0lOTElORSBib29sIEludGVycHJldGVyOjp1bndpbmRDYWwKICAgICAgICAg
ICAgIGRlYnVnZ2VyLT5kaWRFeGVjdXRlUHJvZ3JhbShkZWJ1Z2dlckNhbGxGcmFtZSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKS0+c291cmNlSUQoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKS0+bGFzdExpbmUoKSwgMCk7CiAgICAgfQogCi0gICAgLy8gSWYgdGhpcyBjYWxsIGZy
YW1lIGNyZWF0ZWQgYW4gYWN0aXZhdGlvbiBvciBhbiAnYXJndW1lbnRzJyBvYmplY3QsIHRlYXIg
aXQgb2ZmLgotICAgIGlmIChvbGRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2Rl
ICYmIG9sZENvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpKSB7Ci0gICAgICAgIGlmICgh
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKG9sZENvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkp
LmpzVmFsdWUoKSkgewotICAgICAgICAgICAgb2xkQ29kZUJsb2NrLT5jcmVhdGVBY3RpdmF0aW9u
KGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKLSAg
ICAgICAgfQotICAgICAgICB3aGlsZSAoIXNjb3BlLT5pbmhlcml0cygmSlNBY3RpdmF0aW9uOjpz
X2luZm8pKQotICAgICAgICAgICAgc2NvcGUgPSBzY29wZS0+bmV4dCgpOwotCi0gICAgICAgIGNh
bGxGcmFtZS0+c2V0U2NvcGUoc2NvcGUpOwotICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRp
b24gPSBhc0FjdGl2YXRpb24oc2NvcGUpOwotICAgICAgICBhY3RpdmF0aW9uLT50ZWFyT2ZmKCpz
Y29wZS0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgaWYgKEpTVmFsdWUgYXJndW1lbnRzID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihvbGRDb2RlQmxv
Y2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpKS5qc1ZhbHVlKCkpCi0gICAgICAgICAgICBhc0FyZ3Vt
ZW50cyhhcmd1bWVudHMpLT5kaWRUZWFyT2ZmQWN0aXZhdGlvbihjYWxsRnJhbWUtPmdsb2JhbERh
dGEoKSwgYWN0aXZhdGlvbik7Ci0gICAgfSBlbHNlIGlmIChvbGRDb2RlQmxvY2stPnVzZXNBcmd1
bWVudHMoKSAmJiAhb2xkQ29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkgewotICAgICAgICBpZiAo
SlNWYWx1ZSBhcmd1bWVudHMgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIodW5tb2RpZmllZEFyZ3Vt
ZW50c1JlZ2lzdGVyKG9sZENvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSkpLmpzVmFsdWUo
KSkKLSAgICAgICAgICAgIGFzQXJndW1lbnRzKGFyZ3VtZW50cyktPnRlYXJPZmYoY2FsbEZyYW1l
KTsKKyAgICBKU1ZhbHVlIGFjdGl2YXRpb247CisgICAgaWYgKG9sZENvZGVCbG9jay0+Y29kZVR5
cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgb2xkQ29kZUJsb2NrLT5uZWVkc0FjdGl2YXRpb24oKSkg
eworICAgICAgICBhY3RpdmF0aW9uID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9sZENvZGVCbG9j
ay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpLmpzVmFsdWUoKTsKKyAgICAgICAgaWYgKGFjdGl2YXRp
b24pCisgICAgICAgICAgICBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4oYWN0aXZhdGlvbiktPnRlYXJP
ZmYoKnNjb3BlLT5nbG9iYWxEYXRhKCkpOworICAgIH0KKworICAgIGlmIChvbGRDb2RlQmxvY2st
PmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIG9sZENvZGVCbG9jay0+dXNlc0FyZ3VtZW50
cygpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlIGFyZ3VtZW50cyA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkUih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIob2xkQ29kZUJsb2NrLT5hcmd1bWVudHNS
ZWdpc3RlcigpKSkuanNWYWx1ZSgpKSB7CisgICAgICAgICAgICBpZiAoYWN0aXZhdGlvbikKKyAg
ICAgICAgICAgICAgICBqc0Nhc3Q8QXJndW1lbnRzKj4oYXJndW1lbnRzKS0+ZGlkVGVhck9mZkFj
dGl2YXRpb24oY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGpzQ2FzdDxKU0FjdGl2YXRpb24qPihh
Y3RpdmF0aW9uKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAganNDYXN0PEFy
Z3VtZW50cyo+KGFyZ3VtZW50cyktPnRlYXJPZmYoY2FsbEZyYW1lKTsKKyAgICAgICAgfQogICAg
IH0KIAogICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1l
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAkocmV2
aXNpb24gMTI4MjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIGQtPmFjdGl2YXRpb24uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGFjdGl2YXRpb24p
OwogICAgICAgICAgICAgZC0+cmVnaXN0ZXJzID0gJmFjdGl2YXRpb24tPnJlZ2lzdGVyQXQoMCk7
CiAgICAgICAgIH0KLSAgICAgICAgdm9pZCBzZXRSZWdpc3RlcnMoV3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duPiogcmVnaXN0ZXJzKSB7IGQtPnJlZ2lzdGVycyA9IHJlZ2lzdGVyczsgfQogCiAgICAg
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAK
ICAgICAgICAgeyAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZh
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
Y3RpdmF0aW9uLmNwcAkocmV2aXNpb24gMTI4MjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMjYgKzQxLDE3
IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNBY3RpdmF0aW9uKTsKIAogY29uc3QgQ2xh
c3NJbmZvIEpTQWN0aXZhdGlvbjo6c19pbmZvID0geyAiSlNBY3RpdmF0aW9uIiwgJkJhc2U6OnNf
aW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FjdGl2YXRpb24pIH07CiAKLUpTQWN0
aXZhdGlvbjo6SlNBY3RpdmF0aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lLCBGdW5jdGlvbkV4ZWN1
dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKK0pTQWN0aXZhdGlvbjo6SlNBY3RpdmF0aW9uKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCiAgICAg
OiBCYXNlKAogICAgICAgICBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwKICAgICAgICAgY2FsbEZy
YW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSwKICAgICAg
ICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSwKLSAgICAgICAgY2FsbEZyYW1lLT5zY29wZSgpCisg
ICAgICAgIGNhbGxGcmFtZS0+c2NvcGUoKSwKKyAgICAgICAgc3ltYm9sVGFibGUKICAgICApCi0g
ICAgLCBtX3JlZ2lzdGVyQXJyYXkoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHRoaXMsIDApCi0g
ICAgLCBtX251bUNhcHR1cmVkQXJncyhtYXgoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCksIGZ1
bmN0aW9uRXhlY3V0YWJsZS0+cGFyYW1ldGVyQ291bnQoKSkpCi0gICAgLCBtX251bUNhcHR1cmVk
VmFycyhmdW5jdGlvbkV4ZWN1dGFibGUtPmNhcHR1cmVkVmFyaWFibGVDb3VudCgpKQotICAgICwg
bV9pc1Rvcm5PZmYoZmFsc2UpCi0gICAgLCBtX3JlcXVpcmVzRHluYW1pY0NoZWNrcyhmdW5jdGlv
bkV4ZWN1dGFibGUtPnVzZXNFdmFsKCkgJiYgIWZ1bmN0aW9uRXhlY3V0YWJsZS0+aXNTdHJpY3RN
b2RlKCkpCi0gICAgLCBtX2FyZ3VtZW50c1JlZ2lzdGVyKGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2Vu
ZXJhdGVkQnl0ZWNvZGUoKS5hcmd1bWVudHNSZWdpc3RlcigpKQogewotfQotCi12b2lkIEpTQWN0
aXZhdGlvbjo6ZmluaXNoQ3JlYXRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbkV4ZWN1dGFibGUtPnN5bWJvbFRhYmxl
KCkpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzdG9yYWdlU2l6ZSgpOyArK2kpCisgICAgICAgIG5ldygmc3RvcmFnZSgpW2ldKSBX
cml0ZUJhcnJpZXI8VW5rbm93bj47CiB9CiAKIHZvaWQgSlNBY3RpdmF0aW9uOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC03MiwxOCArNjMsMTEg
QEAgdm9pZCBKU0FjdGl2YXRpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKgogICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKICAgICAvLyBObyBuZWVkIHRvIG1h
cmsgb3VyIHJlZ2lzdGVycyBpZiB0aGV5J3JlIHN0aWxsIGluIHRoZSBSZWdpc3RlckZpbGUuCi0g
ICAgUHJvcGVydHlTdG9yYWdlIHJlZ2lzdGVyQXJyYXkgPSB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVy
QXJyYXkuZ2V0KCk7Ci0gICAgaWYgKCFyZWdpc3RlckFycmF5KQorICAgIGlmICghdGhpc09iamVj
dC0+aXNUb3JuT2ZmKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHZpc2l0b3IuY29weUFuZEFw
cGVuZChiaXR3aXNlX2Nhc3Q8dm9pZCoqPigmcmVnaXN0ZXJBcnJheSksIHRoaXNPYmplY3QtPnJl
Z2lzdGVyQXJyYXlTaXplSW5CeXRlcygpLCByZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihyZWdp
c3RlckFycmF5KSwgdGhpc09iamVjdC0+cmVnaXN0ZXJBcnJheVNpemUoKSk7Ci0gICAgdGhpc09i
amVjdC0+bV9yZWdpc3RlckFycmF5LnNldChyZWdpc3RlckFycmF5LCBTdG9yYWdlQmFycmllcjo6
VW5jaGVja2VkKTsKLSAgICB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVycyA9IHJlZ2lzdGVyQXJyYXkg
KyB0aGlzT2JqZWN0LT5yZWdpc3Rlck9mZnNldCgpOwotCi0gICAgLy8gVXBkYXRlIHRoZSBhcmd1
bWVudHMgb2JqZWN0LCBzaW5jZSBpdCBwb2ludHMgYXQgb3VyIGJ1ZmZlci4KLSAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0
ZXIqPih0aGlzT2JqZWN0LT5tX3JlZ2lzdGVycykpOwotICAgIGlmIChKU1ZhbHVlIHYgPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZFIodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKHRoaXNPYmplY3Qt
Pm1fYXJndW1lbnRzUmVnaXN0ZXIpKS5qc1ZhbHVlKCkpCi0gICAgICAgIGpzQ2FzdDxBcmd1bWVu
dHMqPih2KS0+c2V0UmVnaXN0ZXJzKHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJzKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPnN0b3JhZ2VTaXplKCk7ICsraSkKKyAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPnN0b3JhZ2UoKVtpXSk7CiB9CiAKIGlubGlu
ZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVHZXQoUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtOTMsNyArNzcsNyBAQCBpbmxpbmUgYm9vbCBK
U0FjdGl2YXRpb246OnN5bWJvbFRhYmxlR2V0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IC8vIERlZmVuZCBhZ2FpbnN0IHRoZSBpbnNwZWN0b3IgYXNraW5nIGZvciBhIHZhciBhZnRlciBp
dCBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0LgotICAgIGlmIChtX2lzVG9ybk9mZiAmJiBlbnRyeS5n
ZXRJbmRleCgpID49IG1fbnVtQ2FwdHVyZWRWYXJzKQorICAgIGlmIChpc1Rvcm5PZmYoKSAmJiAh
aXNWYWxpZChlbnRyeSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHNsb3Quc2V0VmFs
dWUocmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSk7CkBAIC0xMDcsNyArOTEsNyBA
QCBpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlR2V0CiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIC8vIERlZmVuZCBhZ2FpbnN0IHRoZSBpbnNwZWN0b3IgYXNraW5nIGZv
ciBhIHZhciBhZnRlciBpdCBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0LgotICAgIGlmIChtX2lzVG9y
bk9mZiAmJiBlbnRyeS5nZXRJbmRleCgpID49IG1fbnVtQ2FwdHVyZWRWYXJzKQorICAgIGlmIChp
c1Rvcm5PZmYoKSAmJiAhaXNWYWxpZChlbnRyeSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihyZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkp
LmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkpOwpAQCAtMTI5LDcgKzExMyw3IEBAIGlubGlu
ZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXQKICAgICB9CiAKICAgICAvLyBEZWZl
bmQgYWdhaW5zdCB0aGUgaW5zcGVjdG9yIGFza2luZyBmb3IgYSB2YXIgYWZ0ZXIgaXQgaGFzIGJl
ZW4gb3B0aW1pemVkIG91dC4KLSAgICBpZiAobV9pc1Rvcm5PZmYgJiYgZW50cnkuZ2V0SW5kZXgo
KSA+PSBtX251bUNhcHR1cmVkVmFycykKKyAgICBpZiAoaXNUb3JuT2ZmKCkgJiYgIWlzVmFsaWQo
ZW50cnkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZWdpc3RlckF0KGVudHJ5Lmdl
dEluZGV4KCkpLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CkBAIC0xNDAsMTQgKzEyNCwx
NCBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKCiB7CiAgICAgSlNB
Y3RpdmF0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQWN0aXZhdGlvbio+KG9iamVjdCk7CiAK
LSAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgIGlmIChtb2Rl
ID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgJiYgIXRoaXNPYmplY3QtPmlzVG9ybk9mZigp
KQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1l
bnRzKTsKIAogICAgIFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0
LT5zeW1ib2xUYWJsZSgpLT5lbmQoKTsKICAgICBmb3IgKFN5bWJvbFRhYmxlOjpjb25zdF9pdGVy
YXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewogICAgICAgICBpZiAoaXQtPnNlY29uZC5nZXRBdHRyaWJ1dGVzKCkgJiBEb250RW51
bSAmJiBtb2RlICE9IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCiAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQuZ2V0SW5kZXgoKSA+PSB0aGlzT2JqZWN0LT5t
X251bUNhcHR1cmVkVmFycykKKyAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc1ZhbGlkKGl0LT5z
ZWNvbmQpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXIoZXhlYywgaXQtPmZpcnN0LmdldCgpKSk7CiAgICAgfQpAQCAtMTY0LDcgKzE0
OCw3IEBAIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXQKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+c2Vjb25k
OwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwotICAgIGlmIChlbnRyeS5nZXRJbmRleCgp
ID49IG1fbnVtQ2FwdHVyZWRWYXJzKQorICAgIGlmICghaXNWYWxpZChlbnRyeSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CkBA
IC0xNzgsNyArMTYyLDcgQEAgYm9vbCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5U2xvdChK
UwogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1l
bnRzKSB7CiAgICAgICAgIC8vIERlZmVuZCBhZ2FpbnN0IHRoZSBpbnNwZWN0b3IgYXNraW5nIGZv
ciB0aGUgYXJndW1lbnRzIG9iamVjdCBhZnRlciBpdCBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0Lgot
ICAgICAgICBpZiAoIXRoaXNPYmplY3QtPm1faXNUb3JuT2ZmKSB7CisgICAgICAgIGlmICghdGhp
c09iamVjdC0+aXNUb3JuT2ZmKCkpIHsKICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNP
YmplY3QsIHRoaXNPYmplY3QtPmdldEFyZ3VtZW50c0dldHRlcigpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CkBAIC0yMDUsNyArMTg5LDcgQEAgYm9vbCBKU0FjdGl2YXRp
b246OmdldE93blByb3BlcnR5RGVzY3JpcAogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSB7CiAgICAgICAgIC8vIERlZmVuZCBhZ2FpbnN0
IHRoZSBpbnNwZWN0b3IgYXNraW5nIGZvciB0aGUgYXJndW1lbnRzIG9iamVjdCBhZnRlciBpdCBo
YXMgYmVlbiBvcHRpbWl6ZWQgb3V0LgotICAgICAgICBpZiAoIXRoaXNPYmplY3QtPm1faXNUb3Ju
T2ZmKSB7CisgICAgICAgIGlmICghdGhpc09iamVjdC0+aXNUb3JuT2ZmKCkpIHsKICAgICAgICAg
ICAgIFByb3BlcnR5U2xvdCBzbG90OwogICAgICAgICAgICAgSlNBY3RpdmF0aW9uOjpnZXRPd25Q
cm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAg
ICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3Bl
cnR5TmFtZSksIERvbnRFbnVtKTsKQEAgLTI2NSw5ICsyNDksMTIgQEAgSlNPYmplY3QqIEpTQWN0
aXZhdGlvbjo6dG9UaGlzT2JqZWN0KEpTQwogCiBKU1ZhbHVlIEpTQWN0aXZhdGlvbjo6YXJndW1l
bnRzR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUgc2xvdEJhc2UsIFByb3BlcnR5TmFtZSkKIHsK
LSAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBhc0FjdGl2YXRpb24oc2xvdEJhc2UpOwor
ICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IGpzQ2FzdDxKU0FjdGl2YXRpb24qPihzbG90
QmFzZSk7CisgICAgaWYgKGFjdGl2YXRpb24tPmlzVG9ybk9mZigpKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpj
cmVhdGUocmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KGFjdGl2YXRpb24tPm1fcmVnaXN0ZXJz
KSk7Ci0gICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyID0gYWN0aXZhdGlvbi0+bV9hcmd1bWVudHNS
ZWdpc3RlcjsKKyAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT5hcmd1bWVudHNSZWdpc3RlcigpOwogICAgIGlmIChKU1ZhbHVlIGFyZ3VtZW50cyA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkUihhcmd1bWVudHNSZWdpc3RlcikuanNWYWx1ZSgpKQogICAgICAg
ICByZXR1cm4gYXJndW1lbnRzOwogICAgIGludCByZWFsQXJndW1lbnRzUmVnaXN0ZXIgPSB1bm1v
ZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHJldmlzaW9uIDEyODIy
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNywyMCArMzcsMjUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBj
bGFzcyBBcmd1bWVudHM7CiAgICAgY2xhc3MgUmVnaXN0ZXI7CiAgICAgCiAgICAgY2xhc3MgSlNB
Y3RpdmF0aW9uIDogcHVibGljIEpTVmFyaWFibGVPYmplY3QgewogICAgIHByaXZhdGU6Ci0gICAg
ICAgIEpTQWN0aXZhdGlvbihDYWxsRnJhbWUqLCBGdW5jdGlvbkV4ZWN1dGFibGUqKTsKKyAgICAg
ICAgSlNBY3RpdmF0aW9uKENhbGxGcmFtZSosIFNoYXJlZFN5bWJvbFRhYmxlKik7CiAgICAgCiAg
ICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEpTVmFyaWFibGVPYmplY3QgQmFzZTsKIAotICAg
ICAgICBzdGF0aWMgSlNBY3RpdmF0aW9uKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYykKKyAg
ICAgICAgc3RhdGljIEpTQWN0aXZhdGlvbiogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVj
dXRhYmxlKQogICAgICAgICB7Ci0gICAgICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24g
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FjdGl2YXRpb24+KGdsb2JhbERhdGEuaGVh
cCkpIEpTQWN0aXZhdGlvbihjYWxsRnJhbWUsIGZ1bmNFeGVjKTsKLSAgICAgICAgICAgIGFjdGl2
YXRpb24tPmZpbmlzaENyZWF0aW9uKGNhbGxGcmFtZSwgZnVuY0V4ZWMpOworICAgICAgICAgICAg
SlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gbmV3ICgKKyAgICAgICAgICAgICAgICBOb3ROdWxs
LAorICAgICAgICAgICAgICAgIGFsbG9jYXRlQ2VsbDxKU0FjdGl2YXRpb24+KAorICAgICAgICAg
ICAgICAgICAgICBnbG9iYWxEYXRhLmhlYXAsCisgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRp
b25TaXplKGNhbGxGcmFtZSwgZnVuY3Rpb25FeGVjdXRhYmxlLT5zeW1ib2xUYWJsZSgpKQorICAg
ICAgICAgICAgICAgICkKKyAgICAgICAgICAgICkgSlNBY3RpdmF0aW9uKGNhbGxGcmFtZSwgZnVu
Y3Rpb25FeGVjdXRhYmxlLT5zeW1ib2xUYWJsZSgpKTsKKyAgICAgICAgICAgIGFjdGl2YXRpb24t
PmZpbmlzaENyZWF0aW9uKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgIHJl
dHVybiBhY3RpdmF0aW9uOwogICAgICAgICB9CiAKQEAgLTc1LDEwICs4MCwxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIHByb3RvLCBUeXBlSW5mbyhBY3RpdmF0aW9uT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCAmc19pbmZvKTsgfQogCi0gICAgICAgIGJvb2wgaXNWYWxpZFNjb3BlZExvb2t1cChpbnQg
aW5kZXgpIHsgcmV0dXJuIGluZGV4IDwgbV9udW1DYXB0dXJlZFZhcnM7IH0KKyAgICAgICAgYm9v
bCBpc1ZhbGlkKGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmKTsKKyAgICAgICAgYm9vbCBpc1Rvcm5P
ZmYoKTsKIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihDYWxs
RnJhbWUqLCBGdW5jdGlvbkV4ZWN1dGFibGUqKTsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBCYXNlOjpTdHJ1
Y3R1cmVGbGFnczsKIAogICAgIHByaXZhdGU6CkBAIC05MSwxNiArOTYsMTQgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHN0YXRpYyBKU1ZhbHVlIGFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUq
LCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwogICAgICAgICBORVZFUl9JTkxJTkUgUHJvcGVydHlT
bG90OjpHZXRWYWx1ZUZ1bmMgZ2V0QXJndW1lbnRzR2V0dGVyKCk7CiAKLSAgICAgICAgc2l6ZV90
IHJlZ2lzdGVyT2Zmc2V0KCk7Ci0gICAgICAgIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZSgpOwot
ICAgICAgICBzaXplX3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKCk7Ci0KLSAgICAgICAgU3Rv
cmFnZUJhcnJpZXIgbV9yZWdpc3RlckFycmF5OyAvLyBJbmRlcGVuZGVudCBjb3B5IG9mIHJlZ2lz
dGVycywgdXNlZCB3aGVuIGEgdmFyaWFibGUgb2JqZWN0IGNvcGllcyBpdHMgcmVnaXN0ZXJzIG91
dCBvZiB0aGUgcmVnaXN0ZXIgZmlsZS4KLSAgICAgICAgaW50IG1fbnVtQ2FwdHVyZWRBcmdzOwot
ICAgICAgICBpbnQgbV9udW1DYXB0dXJlZFZhcnMgOiAzMDsKLSAgICAgICAgYm9vbCBtX2lzVG9y
bk9mZiA6IDE7Ci0gICAgICAgIGJvb2wgbV9yZXF1aXJlc0R5bmFtaWNDaGVja3MgOiAxOwotICAg
ICAgICBpbnQgbV9hcmd1bWVudHNSZWdpc3RlcjsKKyAgICAgICAgc3RhdGljIHNpemVfdCBhbGxv
Y2F0aW9uU2l6ZShDYWxsRnJhbWUqLCBTaGFyZWRTeW1ib2xUYWJsZSopOworICAgICAgICBzdGF0
aWMgc2l6ZV90IHN0b3JhZ2VTaXplKENhbGxGcmFtZSosIFNoYXJlZFN5bWJvbFRhYmxlKik7Cisg
ICAgICAgIHN0YXRpYyBzaXplX3Qgc3RvcmFnZVNpemVJbkJ5dGVzKENhbGxGcmFtZSosIFNoYXJl
ZFN5bWJvbFRhYmxlKik7CisgICAgICAgIHN0YXRpYyBpbnQgY2FwdHVyZVN0YXJ0KENhbGxGcmFt
ZSosIFNoYXJlZFN5bWJvbFRhYmxlKik7CisKKyAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0KCk7
CisgICAgICAgIHNpemVfdCBzdG9yYWdlU2l6ZSgpOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIHN0b3JhZ2UoKTsgLy8gc3RvcmFnZVNpemUoKSBudW1iZXIgb2YgcmVnaXN0ZXJzLgog
ICAgIH07CiAKICAgICBKU0FjdGl2YXRpb24qIGFzQWN0aXZhdGlvbihKU1ZhbHVlKTsKQEAgLTEx
OCw1NSArMTIxLDkxIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIGJvb2wgSlNBY3Rp
dmF0aW9uOjppc0R5bmFtaWNTY29wZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0
CiAgICAgewotICAgICAgICByZXF1aXJlc0R5bmFtaWNDaGVja3MgPSBtX3JlcXVpcmVzRHluYW1p
Y0NoZWNrczsKKyAgICAgICAgcmVxdWlyZXNEeW5hbWljQ2hlY2tzID0gc3ltYm9sVGFibGUoKS0+
dXNlc05vblN0cmljdEV2YWwoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IGlubGluZSBzaXplX3QgSlNBY3RpdmF0aW9uOjpyZWdpc3Rlck9mZnNldCgpCisgICAgaW5saW5l
IGludCBKU0FjdGl2YXRpb246OmNhcHR1cmVTdGFydChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgU2hh
cmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQogICAgIHsKLSAgICAgICAgaWYgKCFtX251bUNh
cHR1cmVkQXJncykKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoc3ltYm9sVGFi
bGUtPmNhcHR1cmVNb2RlKCkgPT0gU2hhcmVkU3ltYm9sVGFibGU6OkFsbE9mVGhlVGhpbmdzKQor
ICAgICAgICAgICAgcmV0dXJuIC1DYWxsRnJhbWU6Om9mZnNldEZvcihzdGQ6Om1heDxzaXplX3Q+
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgc3ltYm9sVGFibGUtPnBh
cmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcygpKSk7CisgICAgICAgIHJldHVybiBzeW1ib2xUYWJs
ZS0+Y2FwdHVyZVN0YXJ0KCk7CisgICAgfQogCi0gICAgICAgIHNpemVfdCBjYXB0dXJlZEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID0gbV9udW1DYXB0dXJlZEFyZ3MgKyAxOwotICAgICAgICBy
ZXR1cm4gQ2FsbEZyYW1lOjpvZmZzZXRGb3IoY2FwdHVyZWRBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyk7CisgICAgaW5saW5lIHNpemVfdCBKU0FjdGl2YXRpb246OnN0b3JhZ2VTaXplKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCisgICAgewor
ICAgICAgICByZXR1cm4gc3ltYm9sVGFibGUtPmNhcHR1cmVFbmQoKSAtIGNhcHR1cmVTdGFydChj
YWxsRnJhbWUsIHN5bWJvbFRhYmxlKTsKKyAgICB9CisKKyAgICBpbmxpbmUgc2l6ZV90IEpTQWN0
aXZhdGlvbjo6c3RvcmFnZVNpemVJbkJ5dGVzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBTaGFyZWRT
eW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCisgICAgeworICAgICAgICByZXR1cm4gc3RvcmFnZVNp
emUoY2FsbEZyYW1lLCBzeW1ib2xUYWJsZSkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KTsKICAgICB9CiAKLSAgICBpbmxpbmUgc2l6ZV90IEpTQWN0aXZhdGlvbjo6cmVnaXN0ZXJBcnJh
eVNpemUoKQorICAgIGlubGluZSBpbnQgSlNBY3RpdmF0aW9uOjpyZWdpc3Rlck9mZnNldCgpCiAg
ICAgewotICAgICAgICByZXR1cm4gcmVnaXN0ZXJPZmZzZXQoKSArIG1fbnVtQ2FwdHVyZWRWYXJz
OworICAgICAgICByZXR1cm4gLWNhcHR1cmVTdGFydChDYWxsRnJhbWU6OmNyZWF0ZShyZWludGVy
cHJldF9jYXN0PFJlZ2lzdGVyKj4obV9yZWdpc3RlcnMpKSwgc3ltYm9sVGFibGUoKSk7CiAgICAg
fQogCi0gICAgaW5saW5lIHNpemVfdCBKU0FjdGl2YXRpb246OnJlZ2lzdGVyQXJyYXlTaXplSW5C
eXRlcygpCisgICAgaW5saW5lIHNpemVfdCBKU0FjdGl2YXRpb246OnN0b3JhZ2VTaXplKCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiByZWdpc3RlckFycmF5U2l6ZSgpICogc2l6ZW9mKFdyaXRlQmFy
cmllckJhc2U8VW5rbm93bj4pOworICAgICAgICByZXR1cm4gc3RvcmFnZVNpemUoQ2FsbEZyYW1l
OjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KG1fcmVnaXN0ZXJzKSksIHN5bWJv
bFRhYmxlKCkpOwogICAgIH0KIAogICAgIGlubGluZSB2b2lkIEpTQWN0aXZhdGlvbjo6dGVhck9m
ZihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgewotICAgICAgICBBU1NFUlQoIW1fcmVn
aXN0ZXJBcnJheSk7Ci0gICAgICAgIEFTU0VSVChtX251bUNhcHR1cmVkVmFycyArIG1fbnVtQ2Fw
dHVyZWRBcmdzKTsKKyAgICAgICAgQVNTRVJUKCFpc1Rvcm5PZmYoKSk7CiAKLSAgICAgICAgdm9p
ZCogYWxsb2NhdGlvbiA9IDA7Ci0gICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9j
YXRlU3RvcmFnZShyZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoKSwgJmFsbG9jYXRpb24pKQotICAg
ICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIHJlZ2lzdGVyQXJyYXkg
PSBzdGF0aWNfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+KGFsbG9jYXRpb24pOwotICAgICAgICBQcm9w
ZXJ0eVN0b3JhZ2UgcmVnaXN0ZXJzID0gcmVnaXN0ZXJBcnJheSArIHJlZ2lzdGVyT2Zmc2V0KCk7
Ci0KLSAgICAgICAgLy8gYXJndW1lbnRzCi0gICAgICAgIGludCBmcm9tID0gQ2FsbEZyYW1lOjph
cmd1bWVudE9mZnNldChtX251bUNhcHR1cmVkQXJncyAtIDEpOwotICAgICAgICBpbnQgdG8gPSBD
YWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOyAvLyBTa2lwICd0aGlzJyBiZWNhdXNlIGl0
J3Mgbm90IGxleGljYWxseSBhY2Nlc3NpYmxlLgotICAgICAgICBmb3IgKGludCBpID0gZnJvbTsg
aSA8IHRvOyArK2kpCi0gICAgICAgICAgICByZWdpc3RlcnNbaV0uc2V0KGdsb2JhbERhdGEsIHRo
aXMsIG1fcmVnaXN0ZXJzW2ldLmdldCgpKTsKLQotICAgICAgICAvLyB2YXJzCi0gICAgICAgIGZy
b20gPSAwOwotICAgICAgICB0byA9IG1fbnVtQ2FwdHVyZWRWYXJzOwotICAgICAgICBmb3IgKGlu
dCBpID0gZnJvbTsgaSA8IHRvOyArK2kpCi0gICAgICAgICAgICByZWdpc3RlcnNbaV0uc2V0KGds
b2JhbERhdGEsIHRoaXMsIG1fcmVnaXN0ZXJzW2ldLmdldCgpKTsKKyAgICAgICAgaW50IHJlZ2lz
dGVyT2Zmc2V0ID0gdGhpcy0+cmVnaXN0ZXJPZmZzZXQoKTsKKyAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiByZWdpc3RlcnMgPSBzdG9yYWdlKCkgKyByZWdpc3Rlck9mZnNldDsKKworICAg
ICAgICBpZiAoc3ltYm9sVGFibGUoKS0+Y2FwdHVyZU1vZGUoKSA9PSBTaGFyZWRTeW1ib2xUYWJs
ZTo6QWxsT2ZUaGVUaGluZ3MpIHsKKyAgICAgICAgICAgIGludCBmcm9tID0gLXJlZ2lzdGVyT2Zm
c2V0OworICAgICAgICAgICAgaW50IHRvID0gQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQo
KTsgLy8gU2tpcCAndGhpcycgYmVjYXVzZSBpdCdzIG5vdCBsZXhpY2FsbHkgYWNjZXNzaWJsZS4K
KyAgICAgICAgICAgIGZvciAoaW50IGkgPSBmcm9tOyBpIDwgdG87ICsraSkKKyAgICAgICAgICAg
ICAgICByZWdpc3RlcnNbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIG1fcmVnaXN0ZXJzW2ldLmdl
dCgpKTsKKworICAgICAgICAgICAgcmVnaXN0ZXJzW1JlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3Vu
dF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIEpTVmFsdWUoCisgICAgICAgICAgICAgICAgQ2FsbEZy
YW1lOjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KG1fcmVnaXN0ZXJzKSktPmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpKTsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlRW5kKCk7ICsraSkKKyAgICAgICAgICAgICAg
ICByZWdpc3RlcnNbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIG1fcmVnaXN0ZXJzW2ldLmdldCgp
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBzeW1ib2xUYWJs
ZSgpLT5jYXB0dXJlU3RhcnQoKTsgaSA8IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVFbmQoKTsgKytp
KQorICAgICAgICAgICAgICAgIHJlZ2lzdGVyc1tpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgbV9y
ZWdpc3RlcnNbaV0uZ2V0KCkpOworICAgICAgICB9CiAKLSAgICAgICAgbV9yZWdpc3RlckFycmF5
LnNldChnbG9iYWxEYXRhLCB0aGlzLCByZWdpc3RlckFycmF5KTsKICAgICAgICAgbV9yZWdpc3Rl
cnMgPSByZWdpc3RlcnM7Ci0gICAgICAgIG1faXNUb3JuT2ZmID0gdHJ1ZTsKKyAgICAgICAgQVNT
RVJUKGlzVG9ybk9mZigpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246
OmlzVG9ybk9mZigpCisgICAgeworICAgICAgICByZXR1cm4gbV9yZWdpc3RlcnMgPT0gc3RvcmFn
ZSgpICsgcmVnaXN0ZXJPZmZzZXQoKTsKKyAgICB9CisKKyAgICBpbmxpbmUgV3JpdGVCYXJyaWVy
PFVua25vd24+KiBKU0FjdGl2YXRpb246OnN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oCisgICAgICAgICAgICBy
ZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArCisgICAgICAgICAgICAgICAgV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pPihzaXplb2YoSlNB
Y3RpdmF0aW9uKSkKKyAgICAgICAgKTsKKyAgICB9CisKKyAgICBpbmxpbmUgc2l6ZV90IEpTQWN0
aXZhdGlvbjo6YWxsb2NhdGlvblNpemUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFNoYXJlZFN5bWJv
bFRhYmxlKiBzeW1ib2xUYWJsZSkKKyAgICB7CisgICAgICAgIHNpemVfdCBvYmplY3RTaXplID0g
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pPihz
aXplb2YoSlNBY3RpdmF0aW9uKSk7CisgICAgICAgIHNpemVfdCBzdG9yYWdlU2l6ZSA9IEpTQWN0
aXZhdGlvbjo6c3RvcmFnZVNpemVJbkJ5dGVzKGNhbGxGcmFtZSwgc3ltYm9sVGFibGUpOworICAg
ICAgICByZXR1cm4gb2JqZWN0U2l6ZSArIHN0b3JhZ2VTaXplOworICAgIH0KKworICAgIGlubGlu
ZSBib29sIEpTQWN0aXZhdGlvbjo6aXNWYWxpZChjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBlbnRy
eSkKKyAgICB7CisgICAgICAgIGlmIChlbnRyeS5nZXRJbmRleCgpIDwgY2FwdHVyZVN0YXJ0KENh
bGxGcmFtZTo6Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPihtX3JlZ2lzdGVycykp
LCBzeW1ib2xUYWJsZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYg
KGVudHJ5LmdldEluZGV4KCkgPj0gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUVuZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJ
KHJldmlzaW9uIDEyODIyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBmcmllbmQgY2xhc3MgSlNWYWx1ZTsKICAgICAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJs
b2NrOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVD
ZWxsKEhlYXAmKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5kIHZvaWQqIGFs
bG9jYXRlQ2VsbChIZWFwJiwgc2l6ZV90KTsKIAogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gMDsKQEAgLTMzNyw2ICszMzgsMjUgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmIGhlYXAs
IHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHNpemUgPj0gc2l6ZW9mKFQpKTsK
KyNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKKyAgICAgICAgQVNTRVJUKCFoZWFwLmdsb2JhbERh
dGEoKS0+aXNJbml0aWFsaXppbmdPYmplY3QoKSk7CisgICAgICAgIGhlYXAuZ2xvYmFsRGF0YSgp
LT5zZXRJbml0aWFsaXppbmdPYmplY3RDbGFzcygmVDo6c19pbmZvKTsKKyNlbmRpZgorICAgICAg
ICBKU0NlbGwqIHJlc3VsdCA9IDA7CisgICAgICAgIGlmIChOZWVkc0Rlc3RydWN0b3I8VD46OnZh
bHVlKQorICAgICAgICAgICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcC5hbGxv
Y2F0ZVdpdGhEZXN0cnVjdG9yKHNpemUpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBB
U1NFUlQoVDo6c19pbmZvLm1ldGhvZFRhYmxlLmRlc3Ryb3kgPT0gSlNDZWxsOjpkZXN0cm95KTsK
KyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXAuYWxsb2NhdGVX
aXRob3V0RGVzdHJ1Y3RvcihzaXplKSk7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0LT5jbGVh
clN0cnVjdHVyZSgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKICAgICBp
bmxpbmUgYm9vbCBpc1phcHBlZChjb25zdCBKU0NlbGwqIGNlbGwpCiAgICAgewogICAgICAgICBy
ZXR1cm4gY2VsbC0+aXNaYXBwZWQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDEyODIyNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNDksMTcgKzQ5LDE4IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBJc0Vudmlyb25tZW50UmVjb3Jk
IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBC
YXNlOjpTdHJ1Y3R1cmVGbGFnczsKICAgICAKLSAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU2NvcGUqIHNjb3Bl
KQorICAgIEpTU3ltYm9sVGFibGVPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNTY29wZSogc2NvcGUsIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1i
b2xUYWJsZSA9IDApCiAgICAgICAgIDogQmFzZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIHNjb3Bl
KQogICAgIHsKKyAgICAgICAgaWYgKHN5bWJvbFRhYmxlKQorICAgICAgICAgICAgbV9zeW1ib2xU
YWJsZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgc3ltYm9sVGFibGUpOwogICAgIH0KIAotICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTaGFyZWRTeW1ib2xU
YWJsZSogc3ltYm9sVGFibGUgPSAwKQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQogICAgIHsKICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xv
YmFsRGF0YSk7Ci0gICAgICAgIGlmICghc3ltYm9sVGFibGUpCi0gICAgICAgICAgICBzeW1ib2xU
YWJsZSA9IFNoYXJlZFN5bWJvbFRhYmxlOjpjcmVhdGUoZ2xvYmFsRGF0YSk7Ci0gICAgICAgIG1f
c3ltYm9sVGFibGUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHN5bWJvbFRhYmxlKTsKKyAgICAgICAg
aWYgKCFtX3N5bWJvbFRhYmxlKQorICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywgU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZShnbG9iYWxEYXRhKSk7CiAgICAg
fQogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVP
YmplY3QuaAkocmV2aXNpb24gMTI4MjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNWYXJpYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxOSArNjAsMTQgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsCiAg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKICAgICAgICAgICAgIFJlZ2lzdGVyKiBy
ZWdpc3RlcnMsCi0gICAgICAgICAgICBKU1Njb3BlKiBzY29wZQorICAgICAgICAgICAgSlNTY29w
ZSogc2NvcGUsCisgICAgICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSAw
CiAgICAgICAgICkKLSAgICAgICAgICAgIDogQmFzZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIHNj
b3BlKQorICAgICAgICAgICAgOiBCYXNlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgc2NvcGUsIHN5
bWJvbFRhYmxlKQogICAgICAgICAgICAgLCBtX3JlZ2lzdGVycyhyZWludGVycHJldF9jYXN0PFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4qPihyZWdpc3RlcnMpKQogICAgICAgICB7CiAgICAgICAg
IH0KIAotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgc3ltYm9sVGFibGUpOwotICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4p
ID09IHNpemVvZihSZWdpc3RlciksIFJlZ2lzdGVyX3Nob3VsZF9iZV9zYW1lX3NpemVfYXNfV3Jp
dGVCYXJyaWVyQmFzZSk7Ci0gICAgICAgIH0KLQogICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24+KiBtX3JlZ2lzdGVyczsgLy8gInIiIGluIHRoZSByZWdpc3RlciBmaWxlLgogICAgIH07
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAko
cmV2aXNpb24gMTI4MjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9s
VGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQwLDEzICszNDAsNDUgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKExlYWZUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOwogICAgICAgICB9CiAKKyAgICAgICAgYm9vbCB1c2VzTm9uU3RyaWN0RXZhbCgp
IHsgcmV0dXJuIG1fdXNlc05vblN0cmljdEV2YWw7IH0KKyAgICAgICAgdm9pZCBzZXRVc2VzTm9u
U3RyaWN0RXZhbChib29sIHVzZXNOb25TdHJpY3RFdmFsKSB7IG1fdXNlc05vblN0cmljdEV2YWwg
PSB1c2VzTm9uU3RyaWN0RXZhbDsgfQorCisgICAgICAgIGVudW0gQ2FwdHVyZU1vZGUgeworICAg
ICAgICAgICAgU29tZU9mVGhlVGhpbmdzLAorICAgICAgICAgICAgQWxsT2ZUaGVUaGluZ3MKKyAg
ICAgICAgfTsKKworICAgICAgICBDYXB0dXJlTW9kZSBjYXB0dXJlTW9kZSgpIHsgcmV0dXJuIG1f
Y2FwdHVyZU1vZGU7IH0KKyAgICAgICAgdm9pZCBzZXRDYXB0dXJlTW9kZShDYXB0dXJlTW9kZSBj
YXB0dXJlTW9kZSkgeyBtX2NhcHR1cmVNb2RlID0gY2FwdHVyZU1vZGU7IH0KKworICAgICAgICBp
bnQgY2FwdHVyZVN0YXJ0KCkgeyByZXR1cm4gbV9jYXB0dXJlU3RhcnQ7IH0KKyAgICAgICAgdm9p
ZCBzZXRDYXB0dXJlU3RhcnQoaW50IGNhcHR1cmVTdGFydCkgeyBtX2NhcHR1cmVTdGFydCA9IGNh
cHR1cmVTdGFydDsgfQorCisgICAgICAgIGludCBjYXB0dXJlRW5kKCkgeyByZXR1cm4gbV9jYXB0
dXJlRW5kOyB9CisgICAgICAgIHZvaWQgc2V0Q2FwdHVyZUVuZChpbnQgY2FwdHVyZUVuZCkgeyBt
X2NhcHR1cmVFbmQgPSBjYXB0dXJlRW5kOyB9CisKKyAgICAgICAgaW50IHBhcmFtZXRlckNvdW50
SW5jbHVkaW5nVGhpcygpIHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOyB9
CisgICAgICAgIHZvaWQgc2V0UGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzKGludCBwYXJhbWV0
ZXJDb3VudEluY2x1ZGluZ1RoaXMpIHsgbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMgPSBw
YXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXM7IH0KKwogICAgICAgICBzdGF0aWMgSlNfRVhQT1JU
REFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgU2hh
cmVkU3ltYm9sVGFibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICAgICAgOiBK
U0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zaGFyZWRTeW1ib2xUYWJsZVN0cnVjdHVyZS5n
ZXQoKSkKKyAgICAgICAgICAgICwgbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoMCkKKyAg
ICAgICAgICAgICwgbV91c2VzTm9uU3RyaWN0RXZhbChmYWxzZSkKKyAgICAgICAgICAgICwgbV9j
YXB0dXJlTW9kZShTb21lT2ZUaGVUaGluZ3MpCisgICAgICAgICAgICAsIG1fY2FwdHVyZVN0YXJ0
KDApCisgICAgICAgICAgICAsIG1fY2FwdHVyZUVuZCgwKQogICAgICAgICB7CiAgICAgICAgIH0K
KworICAgICAgICBpbnQgbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXM7CisgICAgICAgIGJv
b2wgbV91c2VzTm9uU3RyaWN0RXZhbDsKKworICAgICAgICBDYXB0dXJlTW9kZSBtX2NhcHR1cmVN
b2RlOworICAgICAgICBpbnQgbV9jYXB0dXJlU3RhcnQ7CisgICAgICAgIGludCBtX2NhcHR1cmVF
bmQ7CiAgICAgfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwo=
</data>
<flag name="review"
          id="174892"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>