<?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>71439</bug_id>
          
          <creation_ts>2011-11-02 23:45:26 -0700</creation_ts>
          <short_desc>ValueRecovery should be moved out of the DFG JIT</short_desc>
          <delta_ts>2011-11-02 23:56:12 -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>All</rep_platform>
          <op_sys>All</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>
          
          <blocked>71436</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>495218</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-02 23:45:26 -0700</bug_when>
    <thetext>The ValueRecovery functionality (and associated classes and enums such as DataFormat and VirtualRegister) should be moved out of the dfg/ directory and into the bytecode/ directory, since this information will need to be saved in CodeBlocks to support features such as function.arguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495221</commentid>
    <comment_count>1</comment_count>
      <attachid>113436</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-02 23:47:21 -0700</bug_when>
    <thetext>Created attachment 113436
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495223</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-02 23:49:35 -0700</bug_when>
    <thetext>Attachment 113436 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/bytecode/ValueRecovery.h:325:  &quot;DataFormat.h&quot; already included at Source/JavaScriptCore/bytecode/ValueRecovery.h:29  [build/include] [4]
Source/JavaScriptCore/bytecode/ValueRecovery.h:326:  &quot;JSValue.h&quot; already included at Source/JavaScriptCore/bytecode/ValueRecovery.h:30  [build/include] [4]
Source/JavaScriptCore/bytecode/ValueRecovery.h:327:  &quot;MacroAssembler.h&quot; already included at Source/JavaScriptCore/bytecode/ValueRecovery.h:31  [build/include] [4]
Source/JavaScriptCore/bytecode/ValueRecovery.h:328:  &quot;VirtualRegister.h&quot; already included at Source/JavaScriptCore/bytecode/ValueRecovery.h:32  [build/include] [4]
Source/JavaScriptCore/bytecode/ValueRecovery.h:329:  &quot;wtf/Platform.h&quot; already included at Source/JavaScriptCore/bytecode/ValueRecovery.h:33  [build/include] [4]
Source/JavaScriptCore/bytecode/VirtualRegister.h:69:  &quot;wtf/Platform.h&quot; already included at Source/JavaScriptCore/bytecode/VirtualRegister.h:29  [build/include] [4]
Source/JavaScriptCore/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Source/JavaScriptCore/bytecode/DataFormat.h:211:  &quot;wtf/Assertions.h&quot; already included at Source/JavaScriptCore/bytecode/DataFormat.h:29  [build/include] [4]
Total errors found: 8 in 8 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>495224</commentid>
    <comment_count>3</comment_count>
      <attachid>113437</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-02 23:50:58 -0700</bug_when>
    <thetext>Created attachment 113437
the patch

Fixed changelog and merge issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495225</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-02 23:56:12 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/99144</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113436</attachid>
            <date>2011-11-02 23:47:21 -0700</date>
            <delta_ts>2011-11-02 23:50:58 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>valuerecmove_patch_1.diff</filename>
            <type>text/plain</type>
            <size>53253</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTkxNDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTEtMTEtMDIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBO
ZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gYW5kIGJ1ZyBVUkwgKE9PUFMhKQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZHR2VuZXJhdGlvbkluZm8u
aDoKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6aXNKU0Zvcm1hdCk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1
ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAg
ICAgICogZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOgorCiAyMDExLTExLTAyICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcigpIGRvZXMgbm90IHJldHJpZXZlIHRoZSBnZXR0ZXIvc2V0dGVyIGZyb20gYSBwcm9w
ZXJ0eSBvbiB0aGUgd2luZG93IHRoYXQgaGFzIGJlZW4gb3ZlcnJpZGRlbiB3aXRoIGEgZ2V0dGVy
L3NldHRlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk5MTM5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDkgQEAKIAkJMEJGMjhBMjkx
MUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVM
aW1pdHMuY3BwICovOyB9OwogCQkwRjE2RDcyNjE0MkMzOUMwMDBDRjc4NEEgLyogQml0VmVjdG9y
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTZE
NzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovOyB9OwogCQkwRjI0MkRBNzEz
RjNCMUU4MDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNDJEQTUxM0YzQjFCQjAwN0FERDRD
IC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVS
ZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjQyNkE0OTE0NjBDQkI3MDAx
MzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lz
dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAv
KiBEYXRhRm9ybWF0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAx
NzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjIwMTc1MTQzRkNEMzcw
MDY4Qjc3QyAvKiBERkdPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY2MjAxNzExNDNGQ0QyRjAwNjhCNzdDIC8qIERGR09wZXJhbmRzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2MjAx
NzYxNDNGQ0QzQjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTcwMTQzRkNEMkYwMDY4Qjc3QyAvKiBE
RkdCYXNpY0Jsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTgxMCw2ICs4MTMsOSBAQAogCQkwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyog
U2l6ZUxpbWl0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaXpl
TGltaXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNkQ3MjQxNDJDMzlB
MjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBCaXRWZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0
MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1
ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUmVjb3Zl
cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0MjZBNDYxNDYwQ0JBQjAwMTMx
RjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBWaXJ0dWFsUmVnaXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0MjZB
NEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRGF0YUZvcm1hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjYyMDE2RDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBYnN0cmFjdFN0YXRlLmNwcDsgcGF0aCA9
IGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY2MjAxNkUxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJzdHJhY3RTdGF0ZS5oOyBwYXRoID0gZGZnL0RG
R0Fic3RyYWN0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNkYx
NDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQWJzdHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0
VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzOTAsNiArMjM5Niw5IEBA
CiAJCTk2OUEwNzhGMEVEMUQzQUUwMEYxRjY4MSAvKiBieXRlY29kZSAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhG
IC8qIERhdGFGb3JtYXQuaCAqLywKKwkJCQkwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFs
dWVSZWNvdmVyeS5oICovLAorCQkJCTBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFs
UmVnaXN0ZXIuaCAqLywKIAkJCQkwRkJEN0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29kZU9yaWdp
bi5oICovLAogCQkJCTBGRDgyRThFMTQyMDdBNTEwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3Bw
ICovLAogCQkJCTBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAq
LywKQEAgLTI4ODUsNiArMjg5NCw5IEBACiAJCQkJMEY2MjAxNzgxNDNGQ0Q0NDAwNjhCNzdDIC8q
IERGR0Fic3RyYWN0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkQ3RTY5MTQ0Nzk5OTYw
MDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTMwM0Q2NDE0NDdC
OUUxMDBEM0Y5MDQgLyogUGFyc2VyVG9rZW5zLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjQyNkE0
ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RhdGFGb3JtYXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGF0YUZvcm1h
dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RhdGFG
b3JtYXQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEYXRhRm9ybWF0X2gKKyNkZWZp
bmUgRGF0YUZvcm1hdF9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworLy8gPT09IERhdGFGb3JtYXQgPT09CisvLworLy8gVGhpcyBlbnVtIHRyYWNr
cyB0aGUgY3VycmVudCByZXByZXNlbnRhdGlvbiBpbiB3aGljaCBhIHZhbHVlIGlzIGJlaW5nIGhl
bGQuCisvLyBWYWx1ZXMgbWF5IGJlIHVuYm94ZWQgcHJpbWl0aXZlcyAoaW50MzIsIGRvdWJsZSwg
b3IgY2VsbCksIG9yIGJveGVkIGFzIGEgSlNWYWx1ZS4KKy8vIEZvciBib3hlZCB2YWx1ZXMsIHdl
IG1heSBrbm93IHRoZSB0eXBlIG9mIGJveGluZyB0aGF0IGhhcyB0YWtlbiBwbGFjZS4KKy8vIChN
YXkgYWxzbyBuZWVkIGJvb2wsIGFycmF5LCBvYmplY3QsIHN0cmluZyB0eXBlcyEpCitlbnVtIERh
dGFGb3JtYXQgeworICAgIERhdGFGb3JtYXROb25lID0gMCwKKyAgICBEYXRhRm9ybWF0SW50ZWdl
ciA9IDEsCisgICAgRGF0YUZvcm1hdERvdWJsZSA9IDIsCisgICAgRGF0YUZvcm1hdEJvb2xlYW4g
PSAzLAorICAgIERhdGFGb3JtYXRDZWxsID0gNCwKKyAgICBEYXRhRm9ybWF0U3RvcmFnZSA9IDUs
CisgICAgRGF0YUZvcm1hdEpTID0gOCwKKyAgICBEYXRhRm9ybWF0SlNJbnRlZ2VyID0gRGF0YUZv
cm1hdEpTIHwgRGF0YUZvcm1hdEludGVnZXIsCisgICAgRGF0YUZvcm1hdEpTRG91YmxlID0gRGF0
YUZvcm1hdEpTIHwgRGF0YUZvcm1hdERvdWJsZSwKKyAgICBEYXRhRm9ybWF0SlNDZWxsID0gRGF0
YUZvcm1hdEpTIHwgRGF0YUZvcm1hdENlbGwsCisgICAgRGF0YUZvcm1hdEpTQm9vbGVhbiA9IERh
dGFGb3JtYXRKUyB8IERhdGFGb3JtYXRCb29sZWFuCit9OworCisjaWZuZGVmIE5ERUJVRworaW5s
aW5lIGNvbnN0IGNoYXIqIGRhdGFGb3JtYXRUb1N0cmluZyhEYXRhRm9ybWF0IGRhdGFGb3JtYXQp
Cit7CisgICAgc3dpdGNoIChkYXRhRm9ybWF0KSB7CisgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZToK
KyAgICAgICAgcmV0dXJuICJOb25lIjsKKyAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2VyOgorICAg
ICAgICByZXR1cm4gIkludGVnZXIiOworICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKKyAgICAg
ICAgcmV0dXJuICJEb3VibGUiOworICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6CisgICAgICAgIHJl
dHVybiAiQ2VsbCI7CisgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKKyAgICAgICAgcmV0dXJu
ICJCb29sZWFuIjsKKyAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOgorICAgICAgICByZXR1cm4g
IlN0b3JhZ2UiOworICAgIGNhc2UgRGF0YUZvcm1hdEpTOgorICAgICAgICByZXR1cm4gIkpTIjsK
KyAgICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6CisgICAgICAgIHJldHVybiAiSlNJbnRlZ2Vy
IjsKKyAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZToKKyAgICAgICAgcmV0dXJuICJKU0RvdWJs
ZSI7CisgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgorICAgICAgICByZXR1cm4gIkpTQ2VsbCI7
CisgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOgorICAgICAgICByZXR1cm4gIkpTQm9vbGVh
biI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuICJVbmtub3duIjsKKyAgICB9Cit9Cisj
ZW5kaWYKKworI2lmIFVTRShKU1ZBTFVFNjQpCitpbmxpbmUgYm9vbCBuZWVkRGF0YUZvcm1hdENv
bnZlcnNpb24oRGF0YUZvcm1hdCBmcm9tLCBEYXRhRm9ybWF0IHRvKQoreworICAgIEFTU0VSVChm
cm9tICE9IERhdGFGb3JtYXROb25lKTsKKyAgICBBU1NFUlQodG8gIT0gRGF0YUZvcm1hdE5vbmUp
OworICAgIHN3aXRjaCAoZnJvbSkgeworICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6CisgICAg
Y2FzZSBEYXRhRm9ybWF0RG91YmxlOgorICAgICAgICByZXR1cm4gdG8gIT0gZnJvbTsKKyAgICBj
YXNlIERhdGFGb3JtYXRDZWxsOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTOgorICAgIGNhc2UgRGF0
YUZvcm1hdEpTSW50ZWdlcjoKKyAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZToKKyAgICBjYXNl
IERhdGFGb3JtYXRKU0NlbGw6CisgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOgorICAgICAg
ICBzd2l0Y2ggKHRvKSB7CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6CisgICAgICAg
IGNhc2UgRGF0YUZvcm1hdERvdWJsZToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBjYXNlIERhdGFGb3JtYXRDZWxsOgorICAgICAgICBjYXNlIERhdGFGb3JtYXRKUzoKKyAgICAg
ICAgY2FzZSBEYXRhRm9ybWF0SlNJbnRlZ2VyOgorICAgICAgICBjYXNlIERhdGFGb3JtYXRKU0Rv
dWJsZToKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgorICAgICAgICBjYXNlIERhdGFG
b3JtYXRKU0Jvb2xlYW46CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAvLyBUaGlzIGNhcHR1cmVzIERhdGFGb3JtYXRCb29sZWFuLCB3aGlj
aCBpcyBjdXJyZW50bHkgdW51c2VkLgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIH0KKyAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOgorICAgICAgICBBU1NFUlQo
dG8gPT0gRGF0YUZvcm1hdFN0b3JhZ2UpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgLy8gVGhpcyBjYXB0dXJlcyBEYXRhRm9ybWF0Qm9vbGVhbiwgd2hpY2gg
aXMgY3VycmVudGx5IHVudXNlZC4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQoraW5saW5l
IGJvb2wgbmVlZERhdGFGb3JtYXRDb252ZXJzaW9uKERhdGFGb3JtYXQgZnJvbSwgRGF0YUZvcm1h
dCB0bykKK3sKKyAgICBBU1NFUlQoZnJvbSAhPSBEYXRhRm9ybWF0Tm9uZSk7CisgICAgQVNTRVJU
KHRvICE9IERhdGFGb3JtYXROb25lKTsKKyAgICBzd2l0Y2ggKGZyb20pIHsKKyAgICBjYXNlIERh
dGFGb3JtYXRJbnRlZ2VyOgorICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6CisgICAgY2FzZSBEYXRh
Rm9ybWF0Qm9vbGVhbjoKKyAgICAgICAgcmV0dXJuICgodG8gJiBEYXRhRm9ybWF0SlMpIHx8IHRv
ID09IERhdGFGb3JtYXREb3VibGUpOworICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKKyAgICBj
YXNlIERhdGFGb3JtYXRKU0RvdWJsZToKKyAgICAgICAgcmV0dXJuICh0byAhPSBEYXRhRm9ybWF0
RG91YmxlICYmIHRvICE9IERhdGFGb3JtYXRKU0RvdWJsZSk7CisgICAgY2FzZSBEYXRhRm9ybWF0
SlM6CisgICAgY2FzZSBEYXRhRm9ybWF0SlNJbnRlZ2VyOgorICAgIGNhc2UgRGF0YUZvcm1hdEpT
Q2VsbDoKKyAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46CisgICAgICAgIHJldHVybiAoISh0
byAmIERhdGFGb3JtYXRKUykgfHwgdG8gPT0gRGF0YUZvcm1hdEpTRG91YmxlKTsKKyAgICBjYXNl
IERhdGFGb3JtYXRTdG9yYWdlOgorICAgICAgICBBU1NFUlQodG8gPT0gRGF0YUZvcm1hdFN0b3Jh
Z2UpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK2lu
bGluZSBib29sIGlzSlNGb3JtYXQoRGF0YUZvcm1hdCBmb3JtYXQsIERhdGFGb3JtYXQgZXhwZWN0
ZWRGb3JtYXQpCit7CisgICAgQVNTRVJUKGV4cGVjdGVkRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsK
KyAgICByZXR1cm4gKGZvcm1hdCB8IERhdGFGb3JtYXRKUykgPT0gZXhwZWN0ZWRGb3JtYXQ7Cit9
CisKK2lubGluZSBib29sIGlzSlNJbnRlZ2VyKERhdGFGb3JtYXQgZm9ybWF0KQoreworICAgIHJl
dHVybiBpc0pTRm9ybWF0KGZvcm1hdCwgRGF0YUZvcm1hdEpTSW50ZWdlcik7Cit9CisKK2lubGlu
ZSBib29sIGlzSlNEb3VibGUoRGF0YUZvcm1hdCBmb3JtYXQpCit7CisgICAgcmV0dXJuIGlzSlNG
b3JtYXQoZm9ybWF0LCBEYXRhRm9ybWF0SlNEb3VibGUpOworfQorCitpbmxpbmUgYm9vbCBpc0pT
Q2VsbChEYXRhRm9ybWF0IGZvcm1hdCkKK3sKKyAgICByZXR1cm4gaXNKU0Zvcm1hdChmb3JtYXQs
IERhdGFGb3JtYXRKU0NlbGwpOworfQorCitpbmxpbmUgYm9vbCBpc0pTQm9vbGVhbihEYXRhRm9y
bWF0IGZvcm1hdCkKK3sKKyAgICByZXR1cm4gaXNKU0Zvcm1hdChmb3JtYXQsIERhdGFGb3JtYXRK
U0Jvb2xlYW4pOworfQorCit9CisKKyNlbmRpZiAvLyBEYXRhRm9ybWF0X2gKKworLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERhdGFGb3JtYXRf
aAorI2RlZmluZSBEYXRhRm9ybWF0X2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCisvLyA9PT0gRGF0YUZvcm1hdCA9PT0KKy8vCisvLyBUaGlzIGVu
dW0gdHJhY2tzIHRoZSBjdXJyZW50IHJlcHJlc2VudGF0aW9uIGluIHdoaWNoIGEgdmFsdWUgaXMg
YmVpbmcgaGVsZC4KKy8vIFZhbHVlcyBtYXkgYmUgdW5ib3hlZCBwcmltaXRpdmVzIChpbnQzMiwg
ZG91YmxlLCBvciBjZWxsKSwgb3IgYm94ZWQgYXMgYSBKU1ZhbHVlLgorLy8gRm9yIGJveGVkIHZh
bHVlcywgd2UgbWF5IGtub3cgdGhlIHR5cGUgb2YgYm94aW5nIHRoYXQgaGFzIHRha2VuIHBsYWNl
LgorLy8gKE1heSBhbHNvIG5lZWQgYm9vbCwgYXJyYXksIG9iamVjdCwgc3RyaW5nIHR5cGVzISkK
K2VudW0gRGF0YUZvcm1hdCB7CisgICAgRGF0YUZvcm1hdE5vbmUgPSAwLAorICAgIERhdGFGb3Jt
YXRJbnRlZ2VyID0gMSwKKyAgICBEYXRhRm9ybWF0RG91YmxlID0gMiwKKyAgICBEYXRhRm9ybWF0
Qm9vbGVhbiA9IDMsCisgICAgRGF0YUZvcm1hdENlbGwgPSA0LAorICAgIERhdGFGb3JtYXRTdG9y
YWdlID0gNSwKKyAgICBEYXRhRm9ybWF0SlMgPSA4LAorICAgIERhdGFGb3JtYXRKU0ludGVnZXIg
PSBEYXRhRm9ybWF0SlMgfCBEYXRhRm9ybWF0SW50ZWdlciwKKyAgICBEYXRhRm9ybWF0SlNEb3Vi
bGUgPSBEYXRhRm9ybWF0SlMgfCBEYXRhRm9ybWF0RG91YmxlLAorICAgIERhdGFGb3JtYXRKU0Nl
bGwgPSBEYXRhRm9ybWF0SlMgfCBEYXRhRm9ybWF0Q2VsbCwKKyAgICBEYXRhRm9ybWF0SlNCb29s
ZWFuID0gRGF0YUZvcm1hdEpTIHwgRGF0YUZvcm1hdEJvb2xlYW4KK307CisKKyNpZm5kZWYgTkRF
QlVHCitpbmxpbmUgY29uc3QgY2hhciogZGF0YUZvcm1hdFRvU3RyaW5nKERhdGFGb3JtYXQgZGF0
YUZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGRhdGFGb3JtYXQpIHsKKyAgICBjYXNlIERhdGFGb3Jt
YXROb25lOgorICAgICAgICByZXR1cm4gIk5vbmUiOworICAgIGNhc2UgRGF0YUZvcm1hdEludGVn
ZXI6CisgICAgICAgIHJldHVybiAiSW50ZWdlciI7CisgICAgY2FzZSBEYXRhRm9ybWF0RG91Ymxl
OgorICAgICAgICByZXR1cm4gIkRvdWJsZSI7CisgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKKyAg
ICAgICAgcmV0dXJuICJDZWxsIjsKKyAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgorICAgICAg
ICByZXR1cm4gIkJvb2xlYW4iOworICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6CisgICAgICAg
IHJldHVybiAiU3RvcmFnZSI7CisgICAgY2FzZSBEYXRhRm9ybWF0SlM6CisgICAgICAgIHJldHVy
biAiSlMiOworICAgIGNhc2UgRGF0YUZvcm1hdEpTSW50ZWdlcjoKKyAgICAgICAgcmV0dXJuICJK
U0ludGVnZXIiOworICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgorICAgICAgICByZXR1cm4g
IkpTRG91YmxlIjsKKyAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6CisgICAgICAgIHJldHVybiAi
SlNDZWxsIjsKKyAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46CisgICAgICAgIHJldHVybiAi
SlNCb29sZWFuIjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gIlVua25vd24iOworICAg
IH0KK30KKyNlbmRpZgorCisjaWYgVVNFKEpTVkFMVUU2NCkKK2lubGluZSBib29sIG5lZWREYXRh
Rm9ybWF0Q29udmVyc2lvbihEYXRhRm9ybWF0IGZyb20sIERhdGFGb3JtYXQgdG8pCit7CisgICAg
QVNTRVJUKGZyb20gIT0gRGF0YUZvcm1hdE5vbmUpOworICAgIEFTU0VSVCh0byAhPSBEYXRhRm9y
bWF0Tm9uZSk7CisgICAgc3dpdGNoIChmcm9tKSB7CisgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdl
cjoKKyAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CisgICAgICAgIHJldHVybiB0byAhPSBmcm9t
OworICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6CisgICAgY2FzZSBEYXRhRm9ybWF0SlM6CisgICAg
Y2FzZSBEYXRhRm9ybWF0SlNJbnRlZ2VyOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgor
ICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKKyAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46
CisgICAgICAgIHN3aXRjaCAodG8pIHsKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjoK
KyAgICAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEpT
OgorICAgICAgICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6CisgICAgICAgIGNhc2UgRGF0YUZv
cm1hdEpTRG91YmxlOgorICAgICAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6CisgICAgICAgIGNh
c2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIFRoaXMgY2FwdHVyZXMgRGF0YUZvcm1hdEJvb2xl
YW4sIHdoaWNoIGlzIGN1cnJlbnRseSB1bnVzZWQuCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6CisgICAgICAg
IEFTU0VSVCh0byA9PSBEYXRhRm9ybWF0U3RvcmFnZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICAvLyBUaGlzIGNhcHR1cmVzIERhdGFGb3JtYXRCb29sZWFu
LCB3aGljaCBpcyBjdXJyZW50bHkgdW51c2VkLgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQp
CitpbmxpbmUgYm9vbCBuZWVkRGF0YUZvcm1hdENvbnZlcnNpb24oRGF0YUZvcm1hdCBmcm9tLCBE
YXRhRm9ybWF0IHRvKQoreworICAgIEFTU0VSVChmcm9tICE9IERhdGFGb3JtYXROb25lKTsKKyAg
ICBBU1NFUlQodG8gIT0gRGF0YUZvcm1hdE5vbmUpOworICAgIHN3aXRjaCAoZnJvbSkgeworICAg
IGNhc2UgRGF0YUZvcm1hdEludGVnZXI6CisgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKKyAgICBj
YXNlIERhdGFGb3JtYXRCb29sZWFuOgorICAgICAgICByZXR1cm4gKCh0byAmIERhdGFGb3JtYXRK
UykgfHwgdG8gPT0gRGF0YUZvcm1hdERvdWJsZSk7CisgICAgY2FzZSBEYXRhRm9ybWF0RG91Ymxl
OgorICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgorICAgICAgICByZXR1cm4gKHRvICE9IERh
dGFGb3JtYXREb3VibGUgJiYgdG8gIT0gRGF0YUZvcm1hdEpTRG91YmxlKTsKKyAgICBjYXNlIERh
dGFGb3JtYXRKUzoKKyAgICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6CisgICAgY2FzZSBEYXRh
Rm9ybWF0SlNDZWxsOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoKKyAgICAgICAgcmV0
dXJuICghKHRvICYgRGF0YUZvcm1hdEpTKSB8fCB0byA9PSBEYXRhRm9ybWF0SlNEb3VibGUpOwor
ICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6CisgICAgICAgIEFTU0VSVCh0byA9PSBEYXRhRm9y
bWF0U3RvcmFnZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5k
aWYKKworaW5saW5lIGJvb2wgaXNKU0Zvcm1hdChEYXRhRm9ybWF0IGZvcm1hdCwgRGF0YUZvcm1h
dCBleHBlY3RlZEZvcm1hdCkKK3sKKyAgICBBU1NFUlQoZXhwZWN0ZWRGb3JtYXQgJiBEYXRhRm9y
bWF0SlMpOworICAgIHJldHVybiAoZm9ybWF0IHwgRGF0YUZvcm1hdEpTKSA9PSBleHBlY3RlZEZv
cm1hdDsKK30KKworaW5saW5lIGJvb2wgaXNKU0ludGVnZXIoRGF0YUZvcm1hdCBmb3JtYXQpCit7
CisgICAgcmV0dXJuIGlzSlNGb3JtYXQoZm9ybWF0LCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKK30K
KworaW5saW5lIGJvb2wgaXNKU0RvdWJsZShEYXRhRm9ybWF0IGZvcm1hdCkKK3sKKyAgICByZXR1
cm4gaXNKU0Zvcm1hdChmb3JtYXQsIERhdGFGb3JtYXRKU0RvdWJsZSk7Cit9CisKK2lubGluZSBi
b29sIGlzSlNDZWxsKERhdGFGb3JtYXQgZm9ybWF0KQoreworICAgIHJldHVybiBpc0pTRm9ybWF0
KGZvcm1hdCwgRGF0YUZvcm1hdEpTQ2VsbCk7Cit9CisKK2lubGluZSBib29sIGlzSlNCb29sZWFu
KERhdGFGb3JtYXQgZm9ybWF0KQoreworICAgIHJldHVybiBpc0pTRm9ybWF0KGZvcm1hdCwgRGF0
YUZvcm1hdEpTQm9vbGVhbik7Cit9CisKK30KKworI2VuZGlmIC8vIERhdGFGb3JtYXRfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNv
dmVyeS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFZhbHVlUmVjb3ZlcnlfaAorI2Rl
ZmluZSBWYWx1ZVJlY292ZXJ5X2gKKworI2luY2x1ZGUgIkRhdGFGb3JtYXQuaCIKKyNpbmNsdWRl
ICJKU1ZhbHVlLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJWaXJ0
dWFsUmVnaXN0ZXIuaCIKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKKy8vIERlc2NyaWJlcyBob3cgdG8gcmVjb3ZlciBhIGdpdmVuIGJ5dGVjb2RlIHZpcnR1
YWwgcmVnaXN0ZXIgYXQgYSBnaXZlbgorLy8gY29kZSBwb2ludC4KK2VudW0gVmFsdWVSZWNvdmVy
eVRlY2huaXF1ZSB7CisgICAgLy8gSXQncyBhbHJlYWR5IGluIHRoZSByZWdpc3RlciBmaWxlIGF0
IHRoZSByaWdodCBsb2NhdGlvbi4KKyAgICBBbHJlYWR5SW5SZWdpc3RlckZpbGUsCisgICAgLy8g
SXQncyBhbHJlYWR5IGluIHRoZSByZWdpc3RlciBmaWxlIGJ1dCB1bmJveGVkLgorICAgIEFscmVh
ZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyLAorICAgIEFscmVhZHlJblJlZ2lzdGVyRmls
ZUFzVW5ib3hlZENlbGwsCisgICAgQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQm9vbGVh
biwKKyAgICAvLyBJdCdzIGluIGEgcmVnaXN0ZXIuCisgICAgSW5HUFIsCisgICAgVW5ib3hlZElu
dDMySW5HUFIsCisgICAgVW5ib3hlZEJvb2xlYW5JbkdQUiwKKyNpZiBVU0UoSlNWQUxVRTMyXzY0
KQorICAgIEluUGFpciwKKyNlbmRpZgorICAgIEluRlBSLAorICAgIC8vIEl0J3MgaW4gdGhlIHJl
Z2lzdGVyIGZpbGUsIGJ1dCBhdCBhIGRpZmZlcmVudCBsb2NhdGlvbi4KKyAgICBEaXNwbGFjZWRJ
blJlZ2lzdGVyRmlsZSwKKyAgICAvLyBJdCdzIGluIHRoZSByZWdpc3RlciBmaWxlLCBhdCBhIGRp
ZmZlcmVudCBsb2NhdGlvbiwgYW5kIGl0J3MgdW5ib3hlZC4KKyAgICBJbnQzMkRpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlLAorICAgIERvdWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlLAorICAgIC8v
IEl0J3MgYSBjb25zdGFudC4KKyAgICBDb25zdGFudCwKKyAgICAvLyBEb24ndCBrbm93IGhvdyB0
byByZWNvdmVyIGl0LgorICAgIERvbnRLbm93Cit9OworCitjbGFzcyBWYWx1ZVJlY292ZXJ5IHsK
K3B1YmxpYzoKKyAgICBWYWx1ZVJlY292ZXJ5KCkKKyAgICAgICAgOiBtX3RlY2huaXF1ZShEb250
S25vdykKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGFscmVh
ZHlJblJlZ2lzdGVyRmlsZSgpCisgICAgeworICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gQWxyZWFkeUluUmVnaXN0ZXJGaWxlOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVSZWNvdmVy
eSBhbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRJbnQzMigpCisgICAgeworICAgICAgICBW
YWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gQWxyZWFk
eUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkSW50MzI7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGFscmVhZHlJblJlZ2lzdGVyRmls
ZUFzVW5ib3hlZENlbGwoKQorICAgIHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hl
ZENlbGw7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBW
YWx1ZVJlY292ZXJ5IGFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEJvb2xlYW4oKQorICAg
IHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3RlY2hu
aXF1ZSA9IEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEJvb2xlYW47CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGluR1BS
KE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGdwciwgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGRhdGFGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpOworI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIEFTU0VSVChkYXRhRm9ybWF0ID09IERhdGFGb3Jt
YXRJbnRlZ2VyIHx8IGRhdGFGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwgfHwgZGF0YUZvcm1hdCA9
PSBEYXRhRm9ybWF0Qm9vbGVhbik7CisjZW5kaWYKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1
bHQ7CisgICAgICAgIGlmIChkYXRhRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKQorICAgICAg
ICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gVW5ib3hlZEludDMySW5HUFI7CisgICAgICAgIGVs
c2UgaWYgKGRhdGFGb3JtYXQgPT0gRGF0YUZvcm1hdEJvb2xlYW4pCisgICAgICAgICAgICByZXN1
bHQubV90ZWNobmlxdWUgPSBVbmJveGVkQm9vbGVhbkluR1BSOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBJbkdQUjsKKyAgICAgICAgcmVzdWx0Lm1fc291
cmNlLmdwciA9IGdwcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisjaWYg
VVNFKEpTVkFMVUUzMl82NCkKKyAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBpblBhaXIoTWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQgdGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBw
YXlsb2FkR1BSKQorICAgIHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX3RlY2huaXF1ZSA9IEluUGFpcjsKKyAgICAgICAgcmVzdWx0Lm1fc291cmNlLnBh
aXIudGFnR1BSID0gdGFnR1BSOworICAgICAgICByZXN1bHQubV9zb3VyY2UucGFpci5wYXlsb2Fk
R1BSID0gcGF5bG9hZEdQUjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisjZW5kaWYK
KworICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGluRlBSKE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lz
dGVySUQgZnByKQorICAgIHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX3RlY2huaXF1ZSA9IEluRlBSOworICAgICAgICByZXN1bHQubV9zb3VyY2UuZnBy
ID0gZnByOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
VmFsdWVSZWNvdmVyeSBkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZywgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KQorICAgIHsKKyAgICAgICAgVmFsdWVSZWNv
dmVyeSByZXN1bHQ7CisgICAgICAgIHN3aXRjaCAoZGF0YUZvcm1hdCkgeworICAgICAgICBjYXNl
IERhdGFGb3JtYXRJbnRlZ2VyOgorICAgICAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gSW50
MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKKyAgICAgICAgICAgIHJlc3VsdC5t
X3RlY2huaXF1ZSA9IERvdWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVChkYXRhRm9ybWF0
ICE9IERhdGFGb3JtYXROb25lICYmIGRhdGFGb3JtYXQgIT0gRGF0YUZvcm1hdFN0b3JhZ2UpOwor
ICAgICAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQubV9zb3VyY2Uu
dmlydHVhbFJlZyA9IHZpcnR1YWxSZWc7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGNvbnN0YW50KEpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVj
aG5pcXVlID0gQ29uc3RhbnQ7CisgICAgICAgIHJlc3VsdC5tX3NvdXJjZS5jb25zdGFudCA9IEpT
VmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IAorICAgIFZhbHVlUmVjb3ZlcnlUZWNobmlxdWUgdGVjaG5pcXVlKCkgY29uc3QgeyByZXR1cm4g
bV90ZWNobmlxdWU7IH0KKyAgICAKKyAgICBib29sIGlzSW5SZWdpc3RlcnMoKSBjb25zdAorICAg
IHsKKyAgICAgICAgc3dpdGNoIChtX3RlY2huaXF1ZSkgeworICAgICAgICBjYXNlIEluR1BSOgor
ICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICBjYXNlIFVuYm94ZWRCb29s
ZWFuSW5HUFI6CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgY2FzZSBJblBhaXI6Cisj
ZW5kaWYKKyAgICAgICAgY2FzZSBJbkZQUjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGdwcigpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQobV90ZWNobmlxdWUgPT0gSW5HUFIgfHwgbV90ZWNobmlxdWUgPT0g
VW5ib3hlZEludDMySW5HUFIgfHwgbV90ZWNobmlxdWUgPT0gVW5ib3hlZEJvb2xlYW5JbkdQUik7
CisgICAgICAgIHJldHVybiBtX3NvdXJjZS5ncHI7CisgICAgfQorICAgIAorI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCisgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgdGFnR1BSKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBJblBhaXIpOworICAgICAgICBy
ZXR1cm4gbV9zb3VyY2UucGFpci50YWdHUFI7CisgICAgfQorICAgIAorICAgIE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEIHBheWxvYWRHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fdGVjaG5pcXVlID09IEluUGFpcik7CisgICAgICAgIHJldHVybiBtX3NvdXJjZS5wYWlyLnBh
eWxvYWRHUFI7CisgICAgfQorI2VuZGlmCisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVn
aXN0ZXJJRCBmcHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdGVjaG5pcXVlID09
IEluRlBSKTsKKyAgICAgICAgcmV0dXJuIG1fc291cmNlLmZwcjsKKyAgICB9CisgICAgCisgICAg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQobV90ZWNobmlxdWUgPT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUgfHwgbV90ZWNobmlx
dWUgPT0gSW50MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSB8fCBtX3RlY2huaXF1ZSA9PSBEb3Vi
bGVEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgIHJldHVybiBtX3NvdXJjZS52aXJ0
dWFsUmVnOworICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIGNvbnN0YW50KCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBDb25zdGFudCk7CisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjpkZWNvZGUobV9zb3VyY2UuY29uc3RhbnQpOworICAgIH0KKyAgICAKKyNpZm5k
ZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkgY29uc3QKKyAgICB7CisgICAgICAg
IHN3aXRjaCAodGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZp
bGU6CisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIi0iKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgorICAgICAg
ICAgICAgZnByaW50ZihvdXQsICIoaW50MzIpIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRDZWxsOgorICAgICAgICAgICAg
ZnByaW50ZihvdXQsICIoY2VsbCkiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEJvb2xlYW46CisgICAgICAgICAgICBmcHJp
bnRmKG91dCwgIihib29sKSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5H
UFI6CisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiUlciVkIiwgZ3ByKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgICAgICBm
cHJpbnRmKG91dCwgImludDMyKCUlciVkKSIsIGdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6CisgICAgICAgICAgICBmcHJpbnRmKG91
dCwgImJvb2woJSVyJWQpIiwgZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSW5GUFI6CisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiUlciVkIiwgZnByKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgY2FzZSBJblBh
aXI6CisgICAgICAgICAgICBmcHJpbnRmKG91dCwgInBhaXIoJSVyJWQsICUlciVkKSIsIHRhZ0dQ
UigpLCBwYXlsb2FkR1BSKCkpOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAg
Y2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAi
KiVkIiwgdmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSW50MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIGZwcmludGYob3V0
LCAiKmludDMyKCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAg
ZnByaW50ZihvdXQsICIqZG91YmxlKCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnN0YW50OgorICAgICAgICAgICAgZnByaW50Zihv
dXQsICJbJXNdIiwgY29uc3RhbnQoKS5kZXNjcmlwdGlvbigpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIERvbnRLbm93OgorICAgICAgICAgICAgZnByaW50ZihvdXQsICIhIik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGZwcmlu
dGYob3V0LCAiPyVkIiwgdGVjaG5pcXVlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisjZW5kaWYKKyAgICAKK3ByaXZhdGU6CisgICAgVmFsdWVSZWNvdmVyeVRlY2hu
aXF1ZSBtX3RlY2huaXF1ZTsKKyAgICB1bmlvbiB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpS
ZWdpc3RlcklEIGdwcjsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBmcHI7
CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHRhZ0dQUjsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEIHBheWxvYWRHUFI7CisgICAgICAgIH0gcGFpcjsKKyNlbmRpZgorICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZzsKKyAgICAgICAgRW5jb2RlZEpTVmFsdWUg
Y29uc3RhbnQ7CisgICAgfSBtX3NvdXJjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gVmFsdWVSZWNvdmVyeV9oCisKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFZhbHVlUmVjb3ZlcnlfaAorI2RlZmluZSBWYWx1
ZVJlY292ZXJ5X2gKKworI2luY2x1ZGUgIkRhdGFGb3JtYXQuaCIKKyNpbmNsdWRlICJKU1ZhbHVl
LmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8v
IERlc2NyaWJlcyBob3cgdG8gcmVjb3ZlciBhIGdpdmVuIGJ5dGVjb2RlIHZpcnR1YWwgcmVnaXN0
ZXIgYXQgYSBnaXZlbgorLy8gY29kZSBwb2ludC4KK2VudW0gVmFsdWVSZWNvdmVyeVRlY2huaXF1
ZSB7CisgICAgLy8gSXQncyBhbHJlYWR5IGluIHRoZSByZWdpc3RlciBmaWxlIGF0IHRoZSByaWdo
dCBsb2NhdGlvbi4KKyAgICBBbHJlYWR5SW5SZWdpc3RlckZpbGUsCisgICAgLy8gSXQncyBhbHJl
YWR5IGluIHRoZSByZWdpc3RlciBmaWxlIGJ1dCB1bmJveGVkLgorICAgIEFscmVhZHlJblJlZ2lz
dGVyRmlsZUFzVW5ib3hlZEludDMyLAorICAgIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hl
ZENlbGwsCisgICAgQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQm9vbGVhbiwKKyAgICAv
LyBJdCdzIGluIGEgcmVnaXN0ZXIuCisgICAgSW5HUFIsCisgICAgVW5ib3hlZEludDMySW5HUFIs
CisgICAgVW5ib3hlZEJvb2xlYW5JbkdQUiwKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIElu
UGFpciwKKyNlbmRpZgorICAgIEluRlBSLAorICAgIC8vIEl0J3MgaW4gdGhlIHJlZ2lzdGVyIGZp
bGUsIGJ1dCBhdCBhIGRpZmZlcmVudCBsb2NhdGlvbi4KKyAgICBEaXNwbGFjZWRJblJlZ2lzdGVy
RmlsZSwKKyAgICAvLyBJdCdzIGluIHRoZSByZWdpc3RlciBmaWxlLCBhdCBhIGRpZmZlcmVudCBs
b2NhdGlvbiwgYW5kIGl0J3MgdW5ib3hlZC4KKyAgICBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJG
aWxlLAorICAgIERvdWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlLAorICAgIC8vIEl0J3MgYSBj
b25zdGFudC4KKyAgICBDb25zdGFudCwKKyAgICAvLyBEb24ndCBrbm93IGhvdyB0byByZWNvdmVy
IGl0LgorICAgIERvbnRLbm93Cit9OworCitjbGFzcyBWYWx1ZVJlY292ZXJ5IHsKK3B1YmxpYzoK
KyAgICBWYWx1ZVJlY292ZXJ5KCkKKyAgICAgICAgOiBtX3RlY2huaXF1ZShEb250S25vdykKKyAg
ICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGFscmVhZHlJblJlZ2lz
dGVyRmlsZSgpCisgICAgeworICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fdGVjaG5pcXVlID0gQWxyZWFkeUluUmVnaXN0ZXJGaWxlOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBhbHJlYWR5
SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRJbnQzMigpCisgICAgeworICAgICAgICBWYWx1ZVJlY292
ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gQWxyZWFkeUluUmVnaXN0
ZXJGaWxlQXNVbmJveGVkSW50MzI7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hl
ZENlbGwoKQorICAgIHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5tX3RlY2huaXF1ZSA9IEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZENlbGw7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292
ZXJ5IGFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEJvb2xlYW4oKQorICAgIHsKKyAgICAg
ICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IEFs
cmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEJvb2xlYW47CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGluR1BSKE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIGdwciwgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGRhdGFGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpOworI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCisgICAgICAgIEFTU0VSVChkYXRhRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2Vy
IHx8IGRhdGFGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwgfHwgZGF0YUZvcm1hdCA9PSBEYXRhRm9y
bWF0Qm9vbGVhbik7CisjZW5kaWYKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7CisgICAg
ICAgIGlmIChkYXRhRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKQorICAgICAgICAgICAgcmVz
dWx0Lm1fdGVjaG5pcXVlID0gVW5ib3hlZEludDMySW5HUFI7CisgICAgICAgIGVsc2UgaWYgKGRh
dGFGb3JtYXQgPT0gRGF0YUZvcm1hdEJvb2xlYW4pCisgICAgICAgICAgICByZXN1bHQubV90ZWNo
bmlxdWUgPSBVbmJveGVkQm9vbGVhbkluR1BSOworICAgICAgICBlbHNlCisgICAgICAgICAgICBy
ZXN1bHQubV90ZWNobmlxdWUgPSBJbkdQUjsKKyAgICAgICAgcmVzdWx0Lm1fc291cmNlLmdwciA9
IGdwcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisjaWYgVVNFKEpTVkFM
VUUzMl82NCkKKyAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBpblBhaXIoTWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgdGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXlsb2FkR1BS
KQorICAgIHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X3RlY2huaXF1ZSA9IEluUGFpcjsKKyAgICAgICAgcmVzdWx0Lm1fc291cmNlLnBhaXIudGFnR1BS
ID0gdGFnR1BSOworICAgICAgICByZXN1bHQubV9zb3VyY2UucGFpci5wYXlsb2FkR1BSID0gcGF5
bG9hZEdQUjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisjZW5kaWYKKworICAgIHN0
YXRpYyBWYWx1ZVJlY292ZXJ5IGluRlBSKE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgZnBy
KQorICAgIHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X3RlY2huaXF1ZSA9IEluRlBSOworICAgICAgICByZXN1bHQubV9zb3VyY2UuZnByID0gZnByOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVSZWNv
dmVyeSBkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZywg
RGF0YUZvcm1hdCBkYXRhRm9ybWF0KQorICAgIHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1
bHQ7CisgICAgICAgIHN3aXRjaCAoZGF0YUZvcm1hdCkgeworICAgICAgICBjYXNlIERhdGFGb3Jt
YXRJbnRlZ2VyOgorICAgICAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gSW50MzJEaXNwbGFj
ZWRJblJlZ2lzdGVyRmlsZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKKyAgICAgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1
ZSA9IERvdWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVChkYXRhRm9ybWF0ICE9IERhdGFG
b3JtYXROb25lICYmIGRhdGFGb3JtYXQgIT0gRGF0YUZvcm1hdFN0b3JhZ2UpOworICAgICAgICAg
ICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQubV9zb3VyY2UudmlydHVhbFJl
ZyA9IHZpcnR1YWxSZWc7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGNvbnN0YW50KEpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0g
Q29uc3RhbnQ7CisgICAgICAgIHJlc3VsdC5tX3NvdXJjZS5jb25zdGFudCA9IEpTVmFsdWU6OmVu
Y29kZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIFZh
bHVlUmVjb3ZlcnlUZWNobmlxdWUgdGVjaG5pcXVlKCkgY29uc3QgeyByZXR1cm4gbV90ZWNobmlx
dWU7IH0KKyAgICAKKyAgICBib29sIGlzSW5SZWdpc3RlcnMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChtX3RlY2huaXF1ZSkgeworICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICBj
YXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6
CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgY2FzZSBJblBhaXI6CisjZW5kaWYKKyAg
ICAgICAgY2FzZSBJbkZQUjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGdwcigpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQobV90ZWNobmlxdWUgPT0gSW5HUFIgfHwgbV90ZWNobmlxdWUgPT0gVW5ib3hlZElu
dDMySW5HUFIgfHwgbV90ZWNobmlxdWUgPT0gVW5ib3hlZEJvb2xlYW5JbkdQUik7CisgICAgICAg
IHJldHVybiBtX3NvdXJjZS5ncHI7CisgICAgfQorICAgIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CisgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgdGFnR1BSKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBJblBhaXIpOworICAgICAgICByZXR1cm4gbV9z
b3VyY2UucGFpci50YWdHUFI7CisgICAgfQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIHBheWxvYWRHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdGVjaG5p
cXVlID09IEluUGFpcik7CisgICAgICAgIHJldHVybiBtX3NvdXJjZS5wYWlyLnBheWxvYWRHUFI7
CisgICAgfQorI2VuZGlmCisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBm
cHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdGVjaG5pcXVlID09IEluRlBSKTsK
KyAgICAgICAgcmV0dXJuIG1fc291cmNlLmZwcjsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90
ZWNobmlxdWUgPT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUgfHwgbV90ZWNobmlxdWUgPT0gSW50
MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSB8fCBtX3RlY2huaXF1ZSA9PSBEb3VibGVEaXNwbGFj
ZWRJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgIHJldHVybiBtX3NvdXJjZS52aXJ0dWFsUmVnOwor
ICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIGNvbnN0YW50KCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX3RlY2huaXF1ZSA9PSBDb25zdGFudCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjpkZWNvZGUobV9zb3VyY2UuY29uc3RhbnQpOworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRFQlVH
CisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
dGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZpbGU6CisgICAg
ICAgICAgICBmcHJpbnRmKG91dCwgIi0iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgorICAgICAgICAgICAgZnBy
aW50ZihvdXQsICIoaW50MzIpIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBB
bHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRDZWxsOgorICAgICAgICAgICAgZnByaW50Zihv
dXQsICIoY2VsbCkiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFscmVhZHlJ
blJlZ2lzdGVyRmlsZUFzVW5ib3hlZEJvb2xlYW46CisgICAgICAgICAgICBmcHJpbnRmKG91dCwg
Iihib29sKSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5HUFI6CisgICAg
ICAgICAgICBmcHJpbnRmKG91dCwgIiUlciVkIiwgZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgICAgICBmcHJpbnRmKG91
dCwgImludDMyKCUlciVkKSIsIGdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6CisgICAgICAgICAgICBmcHJpbnRmKG91dCwgImJvb2wo
JSVyJWQpIiwgZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5GUFI6
CisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiUlciVkIiwgZnByKCkpOworICAgICAgICAgICAg
YnJlYWs7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgY2FzZSBJblBhaXI6CisgICAg
ICAgICAgICBmcHJpbnRmKG91dCwgInBhaXIoJSVyJWQsICUlciVkKSIsIHRhZ0dQUigpLCBwYXls
b2FkR1BSKCkpOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgY2FzZSBEaXNw
bGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiKiVkIiwgdmly
dHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50MzJE
aXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiKmludDMy
KCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIERvdWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgZnByaW50Zihv
dXQsICIqZG91YmxlKCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENvbnN0YW50OgorICAgICAgICAgICAgZnByaW50ZihvdXQsICJbJXNd
IiwgY29uc3RhbnQoKS5kZXNjcmlwdGlvbigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIERvbnRLbm93OgorICAgICAgICAgICAgZnByaW50ZihvdXQsICIhIik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAi
PyVkIiwgdGVjaG5pcXVlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisjZW5kaWYKKyAgICAKK3ByaXZhdGU6CisgICAgVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSBtX3Rl
Y2huaXF1ZTsKKyAgICB1bmlvbiB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
IGdwcjsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBmcHI7CisjaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEIHRhZ0dQUjsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIHBheWxvYWRHUFI7CisgICAgICAgIH0gcGFpcjsKKyNlbmRpZgorICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZzsKKyAgICAgICAgRW5jb2RlZEpTVmFsdWUgY29uc3RhbnQ7
CisgICAgfSBtX3NvdXJjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
VmFsdWVSZWNvdmVyeV9oCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZpcnR1YWxSZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIFZpcnR1YWxSZWdpc3Rlcl9oCisjZGVmaW5lIFZpcnR1YWxSZWdpc3Rlcl9oCisKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFR5cGUgZm9y
IGEgdmlydHVhbCByZWdpc3RlciBudW1iZXIgKHNwaWxsIGxvY2F0aW9uKS4KKy8vIFVzaW5nIGFu
IGVudW0gdG8gbWFrZSB0aGlzIHR5cGUtY2hlY2tlZCBhdCBjb21waWxlIHRpbWUsIHRvIGF2ZXJ0
IHByb2dyYW1tZXIgZXJyb3JzLgorZW51bSBWaXJ0dWFsUmVnaXN0ZXIgeyBJbnZhbGlkVmlydHVh
bFJlZ2lzdGVyID0gLTEgfTsKK0NPTVBJTEVfQVNTRVJUKHNpemVvZihWaXJ0dWFsUmVnaXN0ZXIp
ID09IHNpemVvZihpbnQpLCBWaXJ0dWFsUmVnaXN0ZXJfaXNfMzJiaXQpOworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIFZpcnR1YWxSZWdpc3Rlcl9oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVmlydHVhbFJlZ2lzdGVyX2gK
KyNkZWZpbmUgVmlydHVhbFJlZ2lzdGVyX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworLy8gVHlwZSBmb3IgYSB2aXJ0dWFsIHJlZ2lzdGVyIG51bWJl
ciAoc3BpbGwgbG9jYXRpb24pLgorLy8gVXNpbmcgYW4gZW51bSB0byBtYWtlIHRoaXMgdHlwZS1j
aGVja2VkIGF0IGNvbXBpbGUgdGltZSwgdG8gYXZlcnQgcHJvZ3JhbW1lciBlcnJvcnMuCitlbnVt
IFZpcnR1YWxSZWdpc3RlciB7IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAtMSB9OworQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKFZpcnR1YWxSZWdpc3RlcikgPT0gc2l6ZW9mKGludCksIFZpcnR1YWxS
ZWdpc3Rlcl9pc18zMmJpdCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVmly
dHVhbFJlZ2lzdGVyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJh
dGlvbkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dl
bmVyYXRpb25JbmZvLmgJKHJldmlzaW9uIDk5MTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxNTYgKzI4LDEx
IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRhdGFGb3JtYXQuaCIKICNp
bmNsdWRlIDxkZmcvREZHSklUQ29tcGlsZXIuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCi0vLyA9PT0gRGF0YUZvcm1hdCA9PT0KLS8vCi0vLyBUaGlzIGVudW0gdHJhY2tz
IHRoZSBjdXJyZW50IHJlcHJlc2VudGF0aW9uIGluIHdoaWNoIGEgdmFsdWUgaXMgYmVpbmcgaGVs
ZC4KLS8vIFZhbHVlcyBtYXkgYmUgdW5ib3hlZCBwcmltaXRpdmVzIChpbnQzMiwgZG91YmxlLCBv
ciBjZWxsKSwgb3IgYm94ZWQgYXMgYSBKU1ZhbHVlLgotLy8gRm9yIGJveGVkIHZhbHVlcywgd2Ug
bWF5IGtub3cgdGhlIHR5cGUgb2YgYm94aW5nIHRoYXQgaGFzIHRha2VuIHBsYWNlLgotLy8gKE1h
eSBhbHNvIG5lZWQgYm9vbCwgYXJyYXksIG9iamVjdCwgc3RyaW5nIHR5cGVzISkKLWVudW0gRGF0
YUZvcm1hdCB7Ci0gICAgRGF0YUZvcm1hdE5vbmUgPSAwLAotICAgIERhdGFGb3JtYXRJbnRlZ2Vy
ID0gMSwKLSAgICBEYXRhRm9ybWF0RG91YmxlID0gMiwKLSAgICBEYXRhRm9ybWF0Qm9vbGVhbiA9
IDMsCi0gICAgRGF0YUZvcm1hdENlbGwgPSA0LAotICAgIERhdGFGb3JtYXRTdG9yYWdlID0gNSwK
LSAgICBEYXRhRm9ybWF0SlMgPSA4LAotICAgIERhdGFGb3JtYXRKU0ludGVnZXIgPSBEYXRhRm9y
bWF0SlMgfCBEYXRhRm9ybWF0SW50ZWdlciwKLSAgICBEYXRhRm9ybWF0SlNEb3VibGUgPSBEYXRh
Rm9ybWF0SlMgfCBEYXRhRm9ybWF0RG91YmxlLAotICAgIERhdGFGb3JtYXRKU0NlbGwgPSBEYXRh
Rm9ybWF0SlMgfCBEYXRhRm9ybWF0Q2VsbCwKLSAgICBEYXRhRm9ybWF0SlNCb29sZWFuID0gRGF0
YUZvcm1hdEpTIHwgRGF0YUZvcm1hdEJvb2xlYW4KLX07Ci0KLSNpZm5kZWYgTkRFQlVHCi1pbmxp
bmUgY29uc3QgY2hhciogZGF0YUZvcm1hdFRvU3RyaW5nKERhdGFGb3JtYXQgZGF0YUZvcm1hdCkK
LXsKLSAgICBzd2l0Y2ggKGRhdGFGb3JtYXQpIHsKLSAgICBjYXNlIERhdGFGb3JtYXROb25lOgot
ICAgICAgICByZXR1cm4gIk5vbmUiOwotICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6Ci0gICAg
ICAgIHJldHVybiAiSW50ZWdlciI7Ci0gICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgotICAgICAg
ICByZXR1cm4gIkRvdWJsZSI7Ci0gICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKLSAgICAgICAgcmV0
dXJuICJDZWxsIjsKLSAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgotICAgICAgICByZXR1cm4g
IkJvb2xlYW4iOwotICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiAi
U3RvcmFnZSI7Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlM6Ci0gICAgICAgIHJldHVybiAiSlMiOwot
ICAgIGNhc2UgRGF0YUZvcm1hdEpTSW50ZWdlcjoKLSAgICAgICAgcmV0dXJuICJKU0ludGVnZXIi
OwotICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgotICAgICAgICByZXR1cm4gIkpTRG91Ymxl
IjsKLSAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6Ci0gICAgICAgIHJldHVybiAiSlNDZWxsIjsK
LSAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46Ci0gICAgICAgIHJldHVybiAiSlNCb29sZWFu
IjsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gIlVua25vd24iOwotICAgIH0KLX0KLSNl
bmRpZgotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSBib29sIG5lZWREYXRhRm9ybWF0Q29u
dmVyc2lvbihEYXRhRm9ybWF0IGZyb20sIERhdGFGb3JtYXQgdG8pCi17Ci0gICAgQVNTRVJUKGZy
b20gIT0gRGF0YUZvcm1hdE5vbmUpOwotICAgIEFTU0VSVCh0byAhPSBEYXRhRm9ybWF0Tm9uZSk7
Ci0gICAgc3dpdGNoIChmcm9tKSB7Ci0gICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjoKLSAgICBj
YXNlIERhdGFGb3JtYXREb3VibGU6Ci0gICAgICAgIHJldHVybiB0byAhPSBmcm9tOwotICAgIGNh
c2UgRGF0YUZvcm1hdENlbGw6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlM6Ci0gICAgY2FzZSBEYXRh
Rm9ybWF0SlNJbnRlZ2VyOgotICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgotICAgIGNhc2Ug
RGF0YUZvcm1hdEpTQ2VsbDoKLSAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46Ci0gICAgICAg
IHN3aXRjaCAodG8pIHsKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjoKLSAgICAgICAg
Y2FzZSBEYXRhRm9ybWF0RG91YmxlOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGNhc2UgRGF0YUZvcm1hdENlbGw6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTOgotICAgICAg
ICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91
YmxlOgotICAgICAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6Ci0gICAgICAgIGNhc2UgRGF0YUZv
cm1hdEpTQm9vbGVhbjoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIC8vIFRoaXMgY2FwdHVyZXMgRGF0YUZvcm1hdEJvb2xlYW4sIHdoaWNo
IGlzIGN1cnJlbnRseSB1bnVzZWQuCi0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgfQotICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6Ci0gICAgICAgIEFTU0VSVCh0
byA9PSBEYXRhRm9ybWF0U3RvcmFnZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZh
dWx0OgotICAgICAgICAvLyBUaGlzIGNhcHR1cmVzIERhdGFGb3JtYXRCb29sZWFuLCB3aGljaCBp
cyBjdXJyZW50bHkgdW51c2VkLgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi1pbmxpbmUg
Ym9vbCBuZWVkRGF0YUZvcm1hdENvbnZlcnNpb24oRGF0YUZvcm1hdCBmcm9tLCBEYXRhRm9ybWF0
IHRvKQotewotICAgIEFTU0VSVChmcm9tICE9IERhdGFGb3JtYXROb25lKTsKLSAgICBBU1NFUlQo
dG8gIT0gRGF0YUZvcm1hdE5vbmUpOwotICAgIHN3aXRjaCAoZnJvbSkgewotICAgIGNhc2UgRGF0
YUZvcm1hdEludGVnZXI6Ci0gICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKLSAgICBjYXNlIERhdGFG
b3JtYXRCb29sZWFuOgotICAgICAgICByZXR1cm4gKCh0byAmIERhdGFGb3JtYXRKUykgfHwgdG8g
PT0gRGF0YUZvcm1hdERvdWJsZSk7Ci0gICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgotICAgIGNh
c2UgRGF0YUZvcm1hdEpTRG91YmxlOgotICAgICAgICByZXR1cm4gKHRvICE9IERhdGFGb3JtYXRE
b3VibGUgJiYgdG8gIT0gRGF0YUZvcm1hdEpTRG91YmxlKTsKLSAgICBjYXNlIERhdGFGb3JtYXRK
UzoKLSAgICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlND
ZWxsOgotICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoKLSAgICAgICAgcmV0dXJuICghKHRv
ICYgRGF0YUZvcm1hdEpTKSB8fCB0byA9PSBEYXRhRm9ybWF0SlNEb3VibGUpOwotICAgIGNhc2Ug
RGF0YUZvcm1hdFN0b3JhZ2U6Ci0gICAgICAgIEFTU0VSVCh0byA9PSBEYXRhRm9ybWF0U3RvcmFn
ZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYKLQotaW5s
aW5lIGJvb2wgaXNKU0Zvcm1hdChEYXRhRm9ybWF0IGZvcm1hdCwgRGF0YUZvcm1hdCBleHBlY3Rl
ZEZvcm1hdCkKLXsKLSAgICBBU1NFUlQoZXhwZWN0ZWRGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwot
ICAgIHJldHVybiAoZm9ybWF0IHwgRGF0YUZvcm1hdEpTKSA9PSBleHBlY3RlZEZvcm1hdDsKLX0K
LQotaW5saW5lIGJvb2wgaXNKU0ludGVnZXIoRGF0YUZvcm1hdCBmb3JtYXQpCi17Ci0gICAgcmV0
dXJuIGlzSlNGb3JtYXQoZm9ybWF0LCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKLX0KLQotaW5saW5l
IGJvb2wgaXNKU0RvdWJsZShEYXRhRm9ybWF0IGZvcm1hdCkKLXsKLSAgICByZXR1cm4gaXNKU0Zv
cm1hdChmb3JtYXQsIERhdGFGb3JtYXRKU0RvdWJsZSk7Ci19Ci0KLWlubGluZSBib29sIGlzSlND
ZWxsKERhdGFGb3JtYXQgZm9ybWF0KQotewotICAgIHJldHVybiBpc0pTRm9ybWF0KGZvcm1hdCwg
RGF0YUZvcm1hdEpTQ2VsbCk7Ci19Ci0KLWlubGluZSBib29sIGlzSlNCb29sZWFuKERhdGFGb3Jt
YXQgZm9ybWF0KQotewotICAgIHJldHVybiBpc0pTRm9ybWF0KGZvcm1hdCwgRGF0YUZvcm1hdEpT
Qm9vbGVhbik7Ci19Ci0KIC8vID09PSBHZW5lcmF0aW9uSW5mbyA9PT0KIC8vCiAvLyBUaGlzIGNs
YXNzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIGEgbGl2ZSB2YWx1ZXMg
ZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbi4KQEAgLTMwNiw3ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAg
CiAgICAgYm9vbCBpc0pTRm9ybWF0KERhdGFGb3JtYXQgZXhwZWN0ZWRGb3JtYXQpCiAgICAgewot
ICAgICAgICByZXR1cm4gREZHOjppc0pTRm9ybWF0KHJlZ2lzdGVyRm9ybWF0KCksIGV4cGVjdGVk
Rm9ybWF0KSB8fCBERkc6OmlzSlNGb3JtYXQoc3BpbGxGb3JtYXQoKSwgZXhwZWN0ZWRGb3JtYXQp
OworICAgICAgICByZXR1cm4gSlNDOjppc0pTRm9ybWF0KHJlZ2lzdGVyRm9ybWF0KCksIGV4cGVj
dGVkRm9ybWF0KSB8fCBKU0M6OmlzSlNGb3JtYXQoc3BpbGxGb3JtYXQoKSwgZXhwZWN0ZWRGb3Jt
YXQpOwogICAgIH0KICAgICAKICAgICBib29sIGlzSlNJbnRlZ2VyKCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5
OTEzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MCw1OSArNjAsNiBAQCB2b2lkIFZhbHVlU291cmNlOjpkdW1w
KEZJTEUqIG91dCkgY29uc3QKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQotCi12b2lkIFZhbHVl
UmVjb3Zlcnk6OmR1bXAoRklMRSogb3V0KSBjb25zdAotewotICAgIHN3aXRjaCAodGVjaG5pcXVl
KCkpIHsKLSAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgZnByaW50Zihv
dXQsICItIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxl
QXNVbmJveGVkSW50MzI6Ci0gICAgICAgIGZwcmludGYob3V0LCAiKGludDMyKSIpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZENlbGw6Ci0g
ICAgICAgIGZwcmludGYob3V0LCAiKGNlbGwpIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
QWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQm9vbGVhbjoKLSAgICAgICAgZnByaW50Zihv
dXQsICIoYm9vbCkiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbkdQUjoKLSAgICAgICAg
ZnByaW50ZihvdXQsICIlJSVzIiwgR1BSSW5mbzo6ZGVidWdOYW1lKGdwcigpKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Ci0gICAgICAgIGZwcmludGYob3V0
LCAiaW50MzIoJSUlcykiLCBHUFJJbmZvOjpkZWJ1Z05hbWUoZ3ByKCkpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOgotICAgICAgICBmcHJpbnRmKG91dCwg
ImJvb2woJSUlcykiLCBHUFJJbmZvOjpkZWJ1Z05hbWUoZ3ByKCkpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJbkZQUjoKLSAgICAgICAgZnByaW50ZihvdXQsICIlJSVzIiwgRlBSSW5mbzo6
ZGVidWdOYW1lKGZwcigpKSk7Ci0gICAgICAgIGJyZWFrOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQp
Ci0gICAgY2FzZSBJblBhaXI6Ci0gICAgICAgIGZwcmludGYob3V0LCAicGFpciglJSVzLCAlJSVz
KSIsIEdQUkluZm86OmRlYnVnTmFtZSh0YWdHUFIoKSksIEdQUkluZm86OmRlYnVnTmFtZShwYXls
b2FkR1BSKCkpKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIERpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlOgotICAgICAgICBmcHJpbnRmKG91dCwgIiolZCIsIHZpcnR1YWxSZWdpc3Rl
cigpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJG
aWxlOgotICAgICAgICBmcHJpbnRmKG91dCwgIippbnQzMiglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIo
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZp
bGU6Ci0gICAgICAgIGZwcmludGYob3V0LCAiKmRvdWJsZSglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIo
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29uc3RhbnQ6Ci0gICAgICAgIGZwcmludGYo
b3V0LCAiWyVzXSIsIGNvbnN0YW50KCkuZGVzY3JpcHRpb24oKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRG9udEtub3c6Ci0gICAgICAgIGZwcmludGYob3V0LCAiISIpOwotICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBmcHJpbnRmKG91dCwgIj8lZCIsIHRlY2huaXF1
ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQogI2VuZGlmCiAKIE9TUkV4aXQ6Ok9TUkV4
aXQoSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmls
ZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2ssIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2ln
bmVkIHJlY292ZXJ5SW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiA5OTEzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
NyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJWYWx1ZVJlY292ZXJ5Lmgi
CiAjaW5jbHVkZSA8ZGZnL0RGR0Fic3RyYWN0U3RhdGUuaD4KICNpbmNsdWRlIDxkZmcvREZHSklU
Q29kZUdlbmVyYXRvci5oPgogCkBAIC0xNDUsMTk0ICsxNDYsNiBAQCBwcml2YXRlOgogICAgIE5v
ZGVJbmRleCBtX25vZGVJbmRleDsKIH07CiAgICAgCi0vLyBEZXNjcmliZXMgaG93IHRvIHJlY292
ZXIgYSBnaXZlbiBieXRlY29kZSB2aXJ0dWFsIHJlZ2lzdGVyIGF0IGEgZ2l2ZW4KLS8vIGNvZGUg
cG9pbnQuCi1lbnVtIFZhbHVlUmVjb3ZlcnlUZWNobmlxdWUgewotICAgIC8vIEl0J3MgYWxyZWFk
eSBpbiB0aGUgcmVnaXN0ZXIgZmlsZSBhdCB0aGUgcmlnaHQgbG9jYXRpb24uCi0gICAgQWxyZWFk
eUluUmVnaXN0ZXJGaWxlLAotICAgIC8vIEl0J3MgYWxyZWFkeSBpbiB0aGUgcmVnaXN0ZXIgZmls
ZSBidXQgdW5ib3hlZC4KLSAgICBBbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRJbnQzMiwK
LSAgICBBbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRDZWxsLAotICAgIEFscmVhZHlJblJl
Z2lzdGVyRmlsZUFzVW5ib3hlZEJvb2xlYW4sCi0gICAgLy8gSXQncyBpbiBhIHJlZ2lzdGVyLgot
ICAgIEluR1BSLAotICAgIFVuYm94ZWRJbnQzMkluR1BSLAotICAgIFVuYm94ZWRCb29sZWFuSW5H
UFIsCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBJblBhaXIsCi0jZW5kaWYKLSAgICBJbkZQ
UiwKLSAgICAvLyBJdCdzIGluIHRoZSByZWdpc3RlciBmaWxlLCBidXQgYXQgYSBkaWZmZXJlbnQg
bG9jYXRpb24uCi0gICAgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUsCi0gICAgLy8gSXQncyBpbiB0
aGUgcmVnaXN0ZXIgZmlsZSwgYXQgYSBkaWZmZXJlbnQgbG9jYXRpb24sIGFuZCBpdCdzIHVuYm94
ZWQuCi0gICAgSW50MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSwKLSAgICBEb3VibGVEaXNwbGFj
ZWRJblJlZ2lzdGVyRmlsZSwKLSAgICAvLyBJdCdzIGEgY29uc3RhbnQuCi0gICAgQ29uc3RhbnQs
Ci0gICAgLy8gRG9uJ3Qga25vdyBob3cgdG8gcmVjb3ZlciBpdC4KLSAgICBEb250S25vdwotfTsK
LQotY2xhc3MgVmFsdWVSZWNvdmVyeSB7Ci1wdWJsaWM6Ci0gICAgVmFsdWVSZWNvdmVyeSgpCi0g
ICAgICAgIDogbV90ZWNobmlxdWUoRG9udEtub3cpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBz
dGF0aWMgVmFsdWVSZWNvdmVyeSBhbHJlYWR5SW5SZWdpc3RlckZpbGUoKQotICAgIHsKLSAgICAg
ICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IEFs
cmVhZHlJblJlZ2lzdGVyRmlsZTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAg
Ci0gICAgc3RhdGljIFZhbHVlUmVjb3ZlcnkgYWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVk
SW50MzIoKQotICAgIHsKLSAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7Ci0gICAgICAgIHJl
c3VsdC5tX3RlY2huaXF1ZSA9IEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOwot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgVmFsdWVSZWNv
dmVyeSBhbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRDZWxsKCkKLSAgICB7Ci0gICAgICAg
IFZhbHVlUmVjb3ZlcnkgcmVzdWx0OwotICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBBbHJl
YWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRDZWxsOwotICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgIH0KLSAgICAKLSAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBhbHJlYWR5SW5SZWdpc3RlckZp
bGVBc1VuYm94ZWRCb29sZWFuKCkKLSAgICB7Ci0gICAgICAgIFZhbHVlUmVjb3ZlcnkgcmVzdWx0
OwotICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBBbHJlYWR5SW5SZWdpc3RlckZpbGVBc1Vu
Ym94ZWRCb29sZWFuOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBz
dGF0aWMgVmFsdWVSZWNvdmVyeSBpbkdQUihHUFJSZWcgZ3ByLCBEYXRhRm9ybWF0IGRhdGFGb3Jt
YXQpCi0gICAgewotICAgICAgICBBU1NFUlQoZGF0YUZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSk7
Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgQVNTRVJUKGRhdGFGb3JtYXQgPT0gRGF0
YUZvcm1hdEludGVnZXIgfHwgZGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCB8fCBkYXRhRm9y
bWF0ID09IERhdGFGb3JtYXRCb29sZWFuKTsKLSNlbmRpZgotICAgICAgICBWYWx1ZVJlY292ZXJ5
IHJlc3VsdDsKLSAgICAgICAgaWYgKGRhdGFGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpCi0g
ICAgICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBVbmJveGVkSW50MzJJbkdQUjsKLSAgICAg
ICAgZWxzZSBpZiAoZGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0Qm9vbGVhbikKLSAgICAgICAgICAg
IHJlc3VsdC5tX3RlY2huaXF1ZSA9IFVuYm94ZWRCb29sZWFuSW5HUFI7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IEluR1BSOwotICAgICAgICByZXN1bHQu
bV9zb3VyY2UuZ3ByID0gZ3ByOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAK
LSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGluUGFpcihH
UFJSZWcgdGFnR1BSLCBHUFJSZWcgcGF5bG9hZEdQUikKLSAgICB7Ci0gICAgICAgIFZhbHVlUmVj
b3ZlcnkgcmVzdWx0OwotICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBJblBhaXI7Ci0gICAg
ICAgIHJlc3VsdC5tX3NvdXJjZS5wYWlyLnRhZ0dQUiA9IHRhZ0dQUjsKLSAgICAgICAgcmVzdWx0
Lm1fc291cmNlLnBhaXIucGF5bG9hZEdQUiA9IHBheWxvYWRHUFI7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBpbkZQUihG
UFJSZWcgZnByKQotICAgIHsKLSAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7Ci0gICAgICAg
IHJlc3VsdC5tX3RlY2huaXF1ZSA9IEluRlBSOwotICAgICAgICByZXN1bHQubV9zb3VyY2UuZnBy
ID0gZnByOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMg
VmFsdWVSZWNvdmVyeSBkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZywgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KQotICAgIHsKLSAgICAgICAgVmFsdWVSZWNv
dmVyeSByZXN1bHQ7Ci0gICAgICAgIHN3aXRjaCAoZGF0YUZvcm1hdCkgewotICAgICAgICBjYXNl
IERhdGFGb3JtYXRJbnRlZ2VyOgotICAgICAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gSW50
MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKLSAgICAgICAgICAgIHJlc3VsdC5t
X3RlY2huaXF1ZSA9IERvdWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOwotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVChkYXRhRm9ybWF0
ICE9IERhdGFGb3JtYXROb25lICYmIGRhdGFGb3JtYXQgIT0gRGF0YUZvcm1hdFN0b3JhZ2UpOwot
ICAgICAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICByZXN1bHQubV9zb3VyY2Uu
dmlydHVhbFJlZyA9IHZpcnR1YWxSZWc7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQot
ICAgIAotICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGNvbnN0YW50KEpTVmFsdWUgdmFsdWUpCi0g
ICAgewotICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKLSAgICAgICAgcmVzdWx0Lm1fdGVj
aG5pcXVlID0gQ29uc3RhbnQ7Ci0gICAgICAgIHJlc3VsdC5tX3NvdXJjZS5jb25zdGFudCA9IEpT
VmFsdWU6OmVuY29kZSh2YWx1ZSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAg
IAotICAgIFZhbHVlUmVjb3ZlcnlUZWNobmlxdWUgdGVjaG5pcXVlKCkgY29uc3QgeyByZXR1cm4g
bV90ZWNobmlxdWU7IH0KLSAgICAKLSAgICBHUFJSZWcgZ3ByKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBJbkdQUiB8fCBtX3RlY2huaXF1ZSA9PSBVbmJveGVk
SW50MzJJbkdQUiB8fCBtX3RlY2huaXF1ZSA9PSBVbmJveGVkQm9vbGVhbkluR1BSKTsKLSAgICAg
ICAgcmV0dXJuIG1fc291cmNlLmdwcjsKLSAgICB9Ci0gICAgCi0jaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICBHUFJSZWcgdGFnR1BSKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3Rl
Y2huaXF1ZSA9PSBJblBhaXIpOwotICAgICAgICByZXR1cm4gbV9zb3VyY2UucGFpci50YWdHUFI7
Ci0gICAgfQotICAgIAotICAgIEdQUlJlZyBwYXlsb2FkR1BSKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBJblBhaXIpOwotICAgICAgICByZXR1cm4gbV9zb3Vy
Y2UucGFpci5wYXlsb2FkR1BSOwotICAgIH0KLSNlbmRpZgotICAgIAotICAgIEZQUlJlZyBmcHIo
KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdGVjaG5pcXVlID09IEluRlBSKTsKLSAg
ICAgICAgcmV0dXJuIG1fc291cmNlLmZwcjsKLSAgICB9Ci0gICAgCi0gICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlcigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90ZWNo
bmlxdWUgPT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUgfHwgbV90ZWNobmlxdWUgPT0gSW50MzJE
aXNwbGFjZWRJblJlZ2lzdGVyRmlsZSB8fCBtX3RlY2huaXF1ZSA9PSBEb3VibGVEaXNwbGFjZWRJ
blJlZ2lzdGVyRmlsZSk7Ci0gICAgICAgIHJldHVybiBtX3NvdXJjZS52aXJ0dWFsUmVnOwotICAg
IH0KLSAgICAKLSAgICBKU1ZhbHVlIGNvbnN0YW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChtX3RlY2huaXF1ZSA9PSBDb25zdGFudCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpk
ZWNvZGUobV9zb3VyY2UuY29uc3RhbnQpOwotICAgIH0KLSAgICAKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgdm9pZCBkdW1wKEZJTEUqIG91dCkgY29uc3Q7Ci0jZW5kaWYKLSAgICAKLXByaXZhdGU6Ci0g
ICAgVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSBtX3RlY2huaXF1ZTsKLSAgICB1bmlvbiB7Ci0gICAg
ICAgIEdQUlJlZyBncHI7Ci0gICAgICAgIEZQUlJlZyBmcHI7Ci0jaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIEdQUlJlZyB0YWdHUFI7Ci0gICAgICAg
ICAgICBHUFJSZWcgcGF5bG9hZEdQUjsKLSAgICAgICAgfSBwYWlyOwotI2VuZGlmCi0gICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnOwotICAgICAgICBFbmNvZGVkSlNWYWx1ZSBjb25z
dGFudDsKLSAgICB9IG1fc291cmNlOwotfTsKLQogLy8gPT09IE9TUkV4aXQgPT09CiAvLwogLy8g
VGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGhvdyB0byBleGl0IHRoZSBzcGVjdWxhdGl2ZSBwYXRo
IGJ5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVB
Y2Nlc3NEYXRhLmgJKHJldmlzaW9uIDk5MTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTkgKzI2LDEz
IEBACiAjaWZuZGVmIERGR1ZhcmlhYmxlQWNjZXNzRGF0YV9oCiAjZGVmaW5lIERGR1ZhcmlhYmxl
QWNjZXNzRGF0YV9oCiAKKyNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgiCisjaW5jbHVkZSAiVmly
dHVhbFJlZ2lzdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+Ci0KLSNpZiBFTkFCTEUo
REZHX0pJVCkKLQogI2luY2x1ZGUgPHd0Zi9VbmlvbkZpbmQuaD4KIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogCi0vLyBUeXBlIGZvciBhIHZpcnR1YWwgcmVnaXN0ZXIgbnVtYmVy
IChzcGlsbCBsb2NhdGlvbikuCi0vLyBVc2luZyBhbiBlbnVtIHRvIG1ha2UgdGhpcyB0eXBlLWNo
ZWNrZWQgYXQgY29tcGlsZSB0aW1lLCB0byBhdmVydCBwcm9ncmFtbWVyIGVycm9ycy4KLWVudW0g
VmlydHVhbFJlZ2lzdGVyIHsgSW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IC0xIH07Ci1DT01QSUxF
X0FTU0VSVChzaXplb2YoVmlydHVhbFJlZ2lzdGVyKSA9PSBzaXplb2YoaW50KSwgVmlydHVhbFJl
Z2lzdGVyX2lzXzMyYml0KTsKLQogY2xhc3MgVmFyaWFibGVBY2Nlc3NEYXRhOiBwdWJsaWMgVW5p
b25GaW5kPFZhcmlhYmxlQWNjZXNzRGF0YT4gewogcHVibGljOgogICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSgpCkBAIC04Niw2ICs4MCw0IEBAIHByaXZhdGU6CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKIAotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCiAjZW5kaWYgLy8gREZHVmFyaWFi
bGVBY2Nlc3NEYXRhX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113437</attachid>
            <date>2011-11-02 23:50:58 -0700</date>
            <delta_ts>2011-11-02 23:54:05 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>valuerecmove_patch_2.diff</filename>
            <type>text/plain</type>
            <size>37995</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTkxNDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAK
KzIwMTEtMTEtMDIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBW
YWx1ZVJlY292ZXJ5IHNob3VsZCBiZSBtb3ZlZCBvdXQgb2YgdGhlIERGRyBKSVQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNDM5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0RhdGFGb3JtYXQu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OmRhdGFGb3JtYXRUb1N0cmluZyk6CisgICAgICAgIChK
U0M6Om5lZWREYXRhRm9ybWF0Q29udmVyc2lvbik6CisgICAgICAgIChKU0M6OmlzSlNGb3JtYXQp
OgorICAgICAgICAoSlNDOjppc0pTSW50ZWdlcik6CisgICAgICAgIChKU0M6OmlzSlNEb3VibGUp
OgorICAgICAgICAoSlNDOjppc0pTQ2VsbCk6CisgICAgICAgIChKU0M6OmlzSlNCb29sZWFuKToK
KyAgICAgICAgKiBieXRlY29kZS9WYWx1ZVJlY292ZXJ5Lmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpWYWx1ZVJlY292ZXJ5OjpWYWx1ZVJlY292ZXJ5KToKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNv
dmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNvdmVy
eTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkSW50MzIpOgorICAgICAgICAoSlNDOjpW
YWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRDZWxsKToKKyAgICAg
ICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQm9v
bGVhbik6CisgICAgICAgIChKU0M6OlZhbHVlUmVjb3Zlcnk6OmluR1BSKToKKyAgICAgICAgKEpT
Qzo6VmFsdWVSZWNvdmVyeTo6aW5QYWlyKToKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6
aW5GUFIpOgorICAgICAgICAoSlNDOjpWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJblJlZ2lzdGVy
RmlsZSk6CisgICAgICAgIChKU0M6OlZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6VmFsdWVSZWNvdmVyeTo6dGVjaG5pcXVlKToKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNv
dmVyeTo6aXNJblJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OlZhbHVlUmVjb3Zlcnk6Omdwcik6
CisgICAgICAgIChKU0M6OlZhbHVlUmVjb3Zlcnk6OnRhZ0dQUik6CisgICAgICAgIChKU0M6OlZh
bHVlUmVjb3Zlcnk6OnBheWxvYWRHUFIpOgorICAgICAgICAoSlNDOjpWYWx1ZVJlY292ZXJ5Ojpm
cHIpOgorICAgICAgICAoSlNDOjpWYWx1ZVJlY292ZXJ5Ojp2aXJ0dWFsUmVnaXN0ZXIpOgorICAg
ICAgICAoSlNDOjpWYWx1ZVJlY292ZXJ5OjpkdW1wKToKKyAgICAgICAgKiBieXRlY29kZS9WaXJ0
dWFsUmVnaXN0ZXIuaDogQWRkZWQuCisgICAgICAgICogZGZnL0RGR0dlbmVyYXRpb25JbmZvLmg6
CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OmlzSlNGb3JtYXQpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVT
b3VyY2U6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAg
ICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDoKKwogMjAxMS0xMS0wMiAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoKSBkb2VzIG5vdCByZXRyaWV2ZSB0aGUgZ2V0dGVyL3NldHRlciBmcm9tIGEgcHJvcGVy
dHkgb24gdGhlIHdpbmRvdyB0aGF0IGhhcyBiZWVuIG92ZXJyaWRkZW4gd2l0aCBhIGdldHRlci9z
ZXR0ZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5OTEzOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw5IEBACiAJCTBCRjI4QTI5MTFB
MzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGlt
aXRzLmNwcCAqLzsgfTsKIAkJMEYxNkQ3MjYxNDJDMzlDMDAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE2RDcy
NDE0MkMzOUEyMDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCAqLzsgfTsKIAkJMEYyNDJEQTcxM0Yz
QjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAv
KiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVj
b3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMx
RjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
NDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyog
RGF0YUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNjIwMTc0MTQzRkNEMzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTcy
MTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYyMDE3NTE0M0ZDRDM3MDA2
OEI3N0MgLyogREZHT3BlcmFuZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjIwMTcxMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdPcGVyYW5kcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjIwMTc2
MTQzRkNEM0IwMDY4Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE3MDE0M0ZDRDJGMDA2OEI3N0MgLyogREZH
QmFzaWNCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC04MTAsNiArODEzLDkgQEAKIAkJMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNp
emVMaW1pdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l6ZUxp
bWl0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTZENzI0MTQyQzM5QTIw
MENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQml0VmVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNDJE
QTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVS
ZWNvdmVyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVJlY292ZXJ5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4
RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VmlydHVhbFJlZ2lzdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDI2QTRB
MTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERhdGFGb3JtYXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2
MjAxNkQxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQWJzdHJhY3RTdGF0ZS5jcHA7IHBhdGggPSBk
ZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NjIwMTZFMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fic3RyYWN0U3RhdGUuaDsgcGF0aCA9IGRmZy9ERkdB
YnN0cmFjdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjIwMTZGMTQz
RkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0Fic3RyYWN0VmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdFZh
bHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzkwLDYgKzIzOTYsOSBAQAog
CQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAv
KiBEYXRhRm9ybWF0LmggKi8sCisJCQkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVl
UmVjb3ZlcnkuaCAqLywKKwkJCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJl
Z2lzdGVyLmggKi8sCiAJCQkJMEZCRDdFNjcxNDQ3OTk4RjAwNDgxMzE1IC8qIENvZGVPcmlnaW4u
aCAqLywKIAkJCQkwRkQ4MkU4RTE0MjA3QTUxMDAxNzlDOTQgLyogVmFsdWVQcm9maWxlLmNwcCAq
LywKIAkJCQkwRkQ4MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi8s
CkBAIC0yODg1LDYgKzI4OTQsOSBAQAogCQkJCTBGNjIwMTc4MTQzRkNENDQwMDY4Qjc3QyAvKiBE
RkdBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJEN0U2OTE0NDc5OTk2MDA0
ODEzMTUgLyogQ29kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUzMDNENjQxNDQ3QjlF
MTAwRDNGOTA0IC8qIFBhcnNlclRva2Vucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0MjZBNDgx
NDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EYXRhRm9ybWF0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RhdGFGb3JtYXQu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EYXRhRm9y
bWF0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRGF0YUZvcm1hdF9oCisjZGVmaW5l
IERhdGFGb3JtYXRfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKKy8vID09PSBEYXRhRm9ybWF0ID09PQorLy8KKy8vIFRoaXMgZW51bSB0cmFja3Mg
dGhlIGN1cnJlbnQgcmVwcmVzZW50YXRpb24gaW4gd2hpY2ggYSB2YWx1ZSBpcyBiZWluZyBoZWxk
LgorLy8gVmFsdWVzIG1heSBiZSB1bmJveGVkIHByaW1pdGl2ZXMgKGludDMyLCBkb3VibGUsIG9y
IGNlbGwpLCBvciBib3hlZCBhcyBhIEpTVmFsdWUuCisvLyBGb3IgYm94ZWQgdmFsdWVzLCB3ZSBt
YXkga25vdyB0aGUgdHlwZSBvZiBib3hpbmcgdGhhdCBoYXMgdGFrZW4gcGxhY2UuCisvLyAoTWF5
IGFsc28gbmVlZCBib29sLCBhcnJheSwgb2JqZWN0LCBzdHJpbmcgdHlwZXMhKQorZW51bSBEYXRh
Rm9ybWF0IHsKKyAgICBEYXRhRm9ybWF0Tm9uZSA9IDAsCisgICAgRGF0YUZvcm1hdEludGVnZXIg
PSAxLAorICAgIERhdGFGb3JtYXREb3VibGUgPSAyLAorICAgIERhdGFGb3JtYXRCb29sZWFuID0g
MywKKyAgICBEYXRhRm9ybWF0Q2VsbCA9IDQsCisgICAgRGF0YUZvcm1hdFN0b3JhZ2UgPSA1LAor
ICAgIERhdGFGb3JtYXRKUyA9IDgsCisgICAgRGF0YUZvcm1hdEpTSW50ZWdlciA9IERhdGFGb3Jt
YXRKUyB8IERhdGFGb3JtYXRJbnRlZ2VyLAorICAgIERhdGFGb3JtYXRKU0RvdWJsZSA9IERhdGFG
b3JtYXRKUyB8IERhdGFGb3JtYXREb3VibGUsCisgICAgRGF0YUZvcm1hdEpTQ2VsbCA9IERhdGFG
b3JtYXRKUyB8IERhdGFGb3JtYXRDZWxsLAorICAgIERhdGFGb3JtYXRKU0Jvb2xlYW4gPSBEYXRh
Rm9ybWF0SlMgfCBEYXRhRm9ybWF0Qm9vbGVhbgorfTsKKworI2lmbmRlZiBOREVCVUcKK2lubGlu
ZSBjb25zdCBjaGFyKiBkYXRhRm9ybWF0VG9TdHJpbmcoRGF0YUZvcm1hdCBkYXRhRm9ybWF0KQor
eworICAgIHN3aXRjaCAoZGF0YUZvcm1hdCkgeworICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6Cisg
ICAgICAgIHJldHVybiAiTm9uZSI7CisgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjoKKyAgICAg
ICAgcmV0dXJuICJJbnRlZ2VyIjsKKyAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CisgICAgICAg
IHJldHVybiAiRG91YmxlIjsKKyAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgorICAgICAgICByZXR1
cm4gIkNlbGwiOworICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46CisgICAgICAgIHJldHVybiAi
Qm9vbGVhbiI7CisgICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJT
dG9yYWdlIjsKKyAgICBjYXNlIERhdGFGb3JtYXRKUzoKKyAgICAgICAgcmV0dXJuICJKUyI7Cisg
ICAgY2FzZSBEYXRhRm9ybWF0SlNJbnRlZ2VyOgorICAgICAgICByZXR1cm4gIkpTSW50ZWdlciI7
CisgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6CisgICAgICAgIHJldHVybiAiSlNEb3VibGUi
OworICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKKyAgICAgICAgcmV0dXJuICJKU0NlbGwiOwor
ICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoKKyAgICAgICAgcmV0dXJuICJKU0Jvb2xlYW4i
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAiVW5rbm93biI7CisgICAgfQorfQorI2Vu
ZGlmCisKKyNpZiBVU0UoSlNWQUxVRTY0KQoraW5saW5lIGJvb2wgbmVlZERhdGFGb3JtYXRDb252
ZXJzaW9uKERhdGFGb3JtYXQgZnJvbSwgRGF0YUZvcm1hdCB0bykKK3sKKyAgICBBU1NFUlQoZnJv
bSAhPSBEYXRhRm9ybWF0Tm9uZSk7CisgICAgQVNTRVJUKHRvICE9IERhdGFGb3JtYXROb25lKTsK
KyAgICBzd2l0Y2ggKGZyb20pIHsKKyAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2VyOgorICAgIGNh
c2UgRGF0YUZvcm1hdERvdWJsZToKKyAgICAgICAgcmV0dXJuIHRvICE9IGZyb207CisgICAgY2Fz
ZSBEYXRhRm9ybWF0Q2VsbDoKKyAgICBjYXNlIERhdGFGb3JtYXRKUzoKKyAgICBjYXNlIERhdGFG
b3JtYXRKU0ludGVnZXI6CisgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6CisgICAgY2FzZSBE
YXRhRm9ybWF0SlNDZWxsOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoKKyAgICAgICAg
c3dpdGNoICh0bykgeworICAgICAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2VyOgorICAgICAgICBj
YXNlIERhdGFGb3JtYXREb3VibGU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
Y2FzZSBEYXRhRm9ybWF0Q2VsbDoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0SlM6CisgICAgICAg
IGNhc2UgRGF0YUZvcm1hdEpTSW50ZWdlcjoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3Vi
bGU6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKKyAgICAgICAgY2FzZSBEYXRhRm9y
bWF0SlNCb29sZWFuOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgLy8gVGhpcyBjYXB0dXJlcyBEYXRhRm9ybWF0Qm9vbGVhbiwgd2hpY2gg
aXMgY3VycmVudGx5IHVudXNlZC4KKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisgICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZToKKyAgICAgICAgQVNTRVJUKHRv
ID09IERhdGFGb3JtYXRTdG9yYWdlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIC8vIFRoaXMgY2FwdHVyZXMgRGF0YUZvcm1hdEJvb2xlYW4sIHdoaWNoIGlz
IGN1cnJlbnRseSB1bnVzZWQuCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKK2lubGluZSBi
b29sIG5lZWREYXRhRm9ybWF0Q29udmVyc2lvbihEYXRhRm9ybWF0IGZyb20sIERhdGFGb3JtYXQg
dG8pCit7CisgICAgQVNTRVJUKGZyb20gIT0gRGF0YUZvcm1hdE5vbmUpOworICAgIEFTU0VSVCh0
byAhPSBEYXRhRm9ybWF0Tm9uZSk7CisgICAgc3dpdGNoIChmcm9tKSB7CisgICAgY2FzZSBEYXRh
Rm9ybWF0SW50ZWdlcjoKKyAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgorICAgIGNhc2UgRGF0YUZv
cm1hdEJvb2xlYW46CisgICAgICAgIHJldHVybiAoKHRvICYgRGF0YUZvcm1hdEpTKSB8fCB0byA9
PSBEYXRhRm9ybWF0RG91YmxlKTsKKyAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CisgICAgY2Fz
ZSBEYXRhRm9ybWF0SlNEb3VibGU6CisgICAgICAgIHJldHVybiAodG8gIT0gRGF0YUZvcm1hdERv
dWJsZSAmJiB0byAhPSBEYXRhRm9ybWF0SlNEb3VibGUpOworICAgIGNhc2UgRGF0YUZvcm1hdEpT
OgorICAgIGNhc2UgRGF0YUZvcm1hdEpTSW50ZWdlcjoKKyAgICBjYXNlIERhdGFGb3JtYXRKU0Nl
bGw6CisgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOgorICAgICAgICByZXR1cm4gKCEodG8g
JiBEYXRhRm9ybWF0SlMpIHx8IHRvID09IERhdGFGb3JtYXRKU0RvdWJsZSk7CisgICAgY2FzZSBE
YXRhRm9ybWF0U3RvcmFnZToKKyAgICAgICAgQVNTRVJUKHRvID09IERhdGFGb3JtYXRTdG9yYWdl
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCitpbmxp
bmUgYm9vbCBpc0pTRm9ybWF0KERhdGFGb3JtYXQgZm9ybWF0LCBEYXRhRm9ybWF0IGV4cGVjdGVk
Rm9ybWF0KQoreworICAgIEFTU0VSVChleHBlY3RlZEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7Cisg
ICAgcmV0dXJuIChmb3JtYXQgfCBEYXRhRm9ybWF0SlMpID09IGV4cGVjdGVkRm9ybWF0OworfQor
CitpbmxpbmUgYm9vbCBpc0pTSW50ZWdlcihEYXRhRm9ybWF0IGZvcm1hdCkKK3sKKyAgICByZXR1
cm4gaXNKU0Zvcm1hdChmb3JtYXQsIERhdGFGb3JtYXRKU0ludGVnZXIpOworfQorCitpbmxpbmUg
Ym9vbCBpc0pTRG91YmxlKERhdGFGb3JtYXQgZm9ybWF0KQoreworICAgIHJldHVybiBpc0pTRm9y
bWF0KGZvcm1hdCwgRGF0YUZvcm1hdEpTRG91YmxlKTsKK30KKworaW5saW5lIGJvb2wgaXNKU0Nl
bGwoRGF0YUZvcm1hdCBmb3JtYXQpCit7CisgICAgcmV0dXJuIGlzSlNGb3JtYXQoZm9ybWF0LCBE
YXRhRm9ybWF0SlNDZWxsKTsKK30KKworaW5saW5lIGJvb2wgaXNKU0Jvb2xlYW4oRGF0YUZvcm1h
dCBmb3JtYXQpCit7CisgICAgcmV0dXJuIGlzSlNGb3JtYXQoZm9ybWF0LCBEYXRhRm9ybWF0SlNC
b29sZWFuKTsKK30KKworfQorCisjZW5kaWYgLy8gRGF0YUZvcm1hdF9oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDI5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIFZhbHVlUmVjb3ZlcnlfaAorI2RlZmluZSBWYWx1ZVJl
Y292ZXJ5X2gKKworI2luY2x1ZGUgIkRhdGFGb3JtYXQuaCIKKyNpbmNsdWRlICJKU1ZhbHVlLmgi
CisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIu
aCIKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIERl
c2NyaWJlcyBob3cgdG8gcmVjb3ZlciBhIGdpdmVuIGJ5dGVjb2RlIHZpcnR1YWwgcmVnaXN0ZXIg
YXQgYSBnaXZlbgorLy8gY29kZSBwb2ludC4KK2VudW0gVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSB7
CisgICAgLy8gSXQncyBhbHJlYWR5IGluIHRoZSByZWdpc3RlciBmaWxlIGF0IHRoZSByaWdodCBs
b2NhdGlvbi4KKyAgICBBbHJlYWR5SW5SZWdpc3RlckZpbGUsCisgICAgLy8gSXQncyBhbHJlYWR5
IGluIHRoZSByZWdpc3RlciBmaWxlIGJ1dCB1bmJveGVkLgorICAgIEFscmVhZHlJblJlZ2lzdGVy
RmlsZUFzVW5ib3hlZEludDMyLAorICAgIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZENl
bGwsCisgICAgQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQm9vbGVhbiwKKyAgICAvLyBJ
dCdzIGluIGEgcmVnaXN0ZXIuCisgICAgSW5HUFIsCisgICAgVW5ib3hlZEludDMySW5HUFIsCisg
ICAgVW5ib3hlZEJvb2xlYW5JbkdQUiwKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIEluUGFp
ciwKKyNlbmRpZgorICAgIEluRlBSLAorICAgIC8vIEl0J3MgaW4gdGhlIHJlZ2lzdGVyIGZpbGUs
IGJ1dCBhdCBhIGRpZmZlcmVudCBsb2NhdGlvbi4KKyAgICBEaXNwbGFjZWRJblJlZ2lzdGVyRmls
ZSwKKyAgICAvLyBJdCdzIGluIHRoZSByZWdpc3RlciBmaWxlLCBhdCBhIGRpZmZlcmVudCBsb2Nh
dGlvbiwgYW5kIGl0J3MgdW5ib3hlZC4KKyAgICBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxl
LAorICAgIERvdWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlLAorICAgIC8vIEl0J3MgYSBjb25z
dGFudC4KKyAgICBDb25zdGFudCwKKyAgICAvLyBEb24ndCBrbm93IGhvdyB0byByZWNvdmVyIGl0
LgorICAgIERvbnRLbm93Cit9OworCitjbGFzcyBWYWx1ZVJlY292ZXJ5IHsKK3B1YmxpYzoKKyAg
ICBWYWx1ZVJlY292ZXJ5KCkKKyAgICAgICAgOiBtX3RlY2huaXF1ZShEb250S25vdykKKyAgICB7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGFscmVhZHlJblJlZ2lzdGVy
RmlsZSgpCisgICAgeworICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fdGVjaG5pcXVlID0gQWxyZWFkeUluUmVnaXN0ZXJGaWxlOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBhbHJlYWR5SW5S
ZWdpc3RlckZpbGVBc1VuYm94ZWRJbnQzMigpCisgICAgeworICAgICAgICBWYWx1ZVJlY292ZXJ5
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gQWxyZWFkeUluUmVnaXN0ZXJG
aWxlQXNVbmJveGVkSW50MzI7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZENl
bGwoKQorICAgIHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX3RlY2huaXF1ZSA9IEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZENlbGw7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5
IGFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEJvb2xlYW4oKQorICAgIHsKKyAgICAgICAg
VmFsdWVSZWNvdmVyeSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IEFscmVh
ZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEJvb2xlYW47CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGluR1BSKE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEIGdwciwgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGRhdGFGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpOworI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCisgICAgICAgIEFTU0VSVChkYXRhRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyIHx8
IGRhdGFGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwgfHwgZGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0
Qm9vbGVhbik7CisjZW5kaWYKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7CisgICAgICAg
IGlmIChkYXRhRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKQorICAgICAgICAgICAgcmVzdWx0
Lm1fdGVjaG5pcXVlID0gVW5ib3hlZEludDMySW5HUFI7CisgICAgICAgIGVsc2UgaWYgKGRhdGFG
b3JtYXQgPT0gRGF0YUZvcm1hdEJvb2xlYW4pCisgICAgICAgICAgICByZXN1bHQubV90ZWNobmlx
dWUgPSBVbmJveGVkQm9vbGVhbkluR1BSOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1
bHQubV90ZWNobmlxdWUgPSBJbkdQUjsKKyAgICAgICAgcmVzdWx0Lm1fc291cmNlLmdwciA9IGdw
cjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBpblBhaXIoTWFjcm9Bc3NlbWJsZXI6OlJl
Z2lzdGVySUQgdGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXlsb2FkR1BSKQor
ICAgIHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3Rl
Y2huaXF1ZSA9IEluUGFpcjsKKyAgICAgICAgcmVzdWx0Lm1fc291cmNlLnBhaXIudGFnR1BSID0g
dGFnR1BSOworICAgICAgICByZXN1bHQubV9zb3VyY2UucGFpci5wYXlsb2FkR1BSID0gcGF5bG9h
ZEdQUjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisjZW5kaWYKKworICAgIHN0YXRp
YyBWYWx1ZVJlY292ZXJ5IGluRlBSKE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgZnByKQor
ICAgIHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3Rl
Y2huaXF1ZSA9IEluRlBSOworICAgICAgICByZXN1bHQubV9zb3VyY2UuZnByID0gZnByOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVSZWNvdmVy
eSBkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZywgRGF0
YUZvcm1hdCBkYXRhRm9ybWF0KQorICAgIHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7
CisgICAgICAgIHN3aXRjaCAoZGF0YUZvcm1hdCkgeworICAgICAgICBjYXNlIERhdGFGb3JtYXRJ
bnRlZ2VyOgorICAgICAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gSW50MzJEaXNwbGFjZWRJ
blJlZ2lzdGVyRmlsZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgRGF0YUZvcm1hdERvdWJsZToKKyAgICAgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9
IERvdWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVChkYXRhRm9ybWF0ICE9IERhdGFGb3Jt
YXROb25lICYmIGRhdGFGb3JtYXQgIT0gRGF0YUZvcm1hdFN0b3JhZ2UpOworICAgICAgICAgICAg
cmVzdWx0Lm1fdGVjaG5pcXVlID0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQubV9zb3VyY2UudmlydHVhbFJlZyA9
IHZpcnR1YWxSZWc7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBWYWx1ZVJlY292ZXJ5IGNvbnN0YW50KEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gQ29u
c3RhbnQ7CisgICAgICAgIHJlc3VsdC5tX3NvdXJjZS5jb25zdGFudCA9IEpTVmFsdWU6OmVuY29k
ZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIFZhbHVl
UmVjb3ZlcnlUZWNobmlxdWUgdGVjaG5pcXVlKCkgY29uc3QgeyByZXR1cm4gbV90ZWNobmlxdWU7
IH0KKyAgICAKKyAgICBib29sIGlzSW5SZWdpc3RlcnMoKSBjb25zdAorICAgIHsKKyAgICAgICAg
c3dpdGNoIChtX3RlY2huaXF1ZSkgeworICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICBjYXNl
IFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6Cisj
aWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgY2FzZSBJblBhaXI6CisjZW5kaWYKKyAgICAg
ICAgY2FzZSBJbkZQUjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGdwcigpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQobV90ZWNobmlxdWUgPT0gSW5HUFIgfHwgbV90ZWNobmlxdWUgPT0gVW5ib3hlZEludDMy
SW5HUFIgfHwgbV90ZWNobmlxdWUgPT0gVW5ib3hlZEJvb2xlYW5JbkdQUik7CisgICAgICAgIHJl
dHVybiBtX3NvdXJjZS5ncHI7CisgICAgfQorICAgIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisg
ICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgdGFnR1BSKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBJblBhaXIpOworICAgICAgICByZXR1cm4gbV9zb3Vy
Y2UucGFpci50YWdHUFI7CisgICAgfQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIHBheWxvYWRHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdGVjaG5pcXVl
ID09IEluUGFpcik7CisgICAgICAgIHJldHVybiBtX3NvdXJjZS5wYWlyLnBheWxvYWRHUFI7Cisg
ICAgfQorI2VuZGlmCisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBmcHIo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdGVjaG5pcXVlID09IEluRlBSKTsKKyAg
ICAgICAgcmV0dXJuIG1fc291cmNlLmZwcjsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90ZWNo
bmlxdWUgPT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUgfHwgbV90ZWNobmlxdWUgPT0gSW50MzJE
aXNwbGFjZWRJblJlZ2lzdGVyRmlsZSB8fCBtX3RlY2huaXF1ZSA9PSBEb3VibGVEaXNwbGFjZWRJ
blJlZ2lzdGVyRmlsZSk7CisgICAgICAgIHJldHVybiBtX3NvdXJjZS52aXJ0dWFsUmVnOworICAg
IH0KKyAgICAKKyAgICBKU1ZhbHVlIGNvbnN0YW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX3RlY2huaXF1ZSA9PSBDb25zdGFudCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpk
ZWNvZGUobV9zb3VyY2UuY29uc3RhbnQpOworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisg
ICAgdm9pZCBkdW1wKEZJTEUqIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAodGVj
aG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZpbGU6CisgICAgICAg
ICAgICBmcHJpbnRmKG91dCwgIi0iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyOgorICAgICAgICAgICAgZnByaW50
ZihvdXQsICIoaW50MzIpIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBbHJl
YWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRDZWxsOgorICAgICAgICAgICAgZnByaW50ZihvdXQs
ICIoY2VsbCkiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFscmVhZHlJblJl
Z2lzdGVyRmlsZUFzVW5ib3hlZEJvb2xlYW46CisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIihi
b29sKSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAg
ICAgICBmcHJpbnRmKG91dCwgIiUlciVkIiwgZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgICAgICBmcHJpbnRmKG91dCwg
ImludDMyKCUlciVkKSIsIGdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFVuYm94ZWRCb29sZWFuSW5HUFI6CisgICAgICAgICAgICBmcHJpbnRmKG91dCwgImJvb2woJSVy
JWQpIiwgZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5GUFI6Cisg
ICAgICAgICAgICBmcHJpbnRmKG91dCwgIiUlciVkIiwgZnByKCkpOworICAgICAgICAgICAgYnJl
YWs7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgY2FzZSBJblBhaXI6CisgICAgICAg
ICAgICBmcHJpbnRmKG91dCwgInBhaXIoJSVyJWQsICUlciVkKSIsIHRhZ0dQUigpLCBwYXlsb2Fk
R1BSKCkpOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgY2FzZSBEaXNwbGFj
ZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiKiVkIiwgdmlydHVh
bFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50MzJEaXNw
bGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiKmludDMyKCVk
KSIsIHZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IERvdWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgZnByaW50ZihvdXQs
ICIqZG91YmxlKCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENvbnN0YW50OgorICAgICAgICAgICAgZnByaW50ZihvdXQsICJbJXNdIiwg
Y29uc3RhbnQoKS5kZXNjcmlwdGlvbigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIERvbnRLbm93OgorICAgICAgICAgICAgZnByaW50ZihvdXQsICIhIik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiPyVk
IiwgdGVjaG5pcXVlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisj
ZW5kaWYKKyAgICAKK3ByaXZhdGU6CisgICAgVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSBtX3RlY2hu
aXF1ZTsKKyAgICB1bmlvbiB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGdw
cjsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBmcHI7CisjaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpSZWdpc3RlcklEIHRhZ0dQUjsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIHBheWxvYWRHUFI7CisgICAgICAgIH0gcGFpcjsKKyNlbmRpZgorICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZzsKKyAgICAgICAgRW5jb2RlZEpTVmFsdWUgY29uc3RhbnQ7Cisg
ICAgfSBtX3NvdXJjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVmFs
dWVSZWNvdmVyeV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVh
bFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
VmlydHVhbFJlZ2lzdGVyX2gKKyNkZWZpbmUgVmlydHVhbFJlZ2lzdGVyX2gKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVHlwZSBmb3IgYSB2aXJ0
dWFsIHJlZ2lzdGVyIG51bWJlciAoc3BpbGwgbG9jYXRpb24pLgorLy8gVXNpbmcgYW4gZW51bSB0
byBtYWtlIHRoaXMgdHlwZS1jaGVja2VkIGF0IGNvbXBpbGUgdGltZSwgdG8gYXZlcnQgcHJvZ3Jh
bW1lciBlcnJvcnMuCitlbnVtIFZpcnR1YWxSZWdpc3RlciB7IEludmFsaWRWaXJ0dWFsUmVnaXN0
ZXIgPSAtMSB9OworQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFZpcnR1YWxSZWdpc3RlcikgPT0gc2l6
ZW9mKGludCksIFZpcnR1YWxSZWdpc3Rlcl9pc18zMmJpdCk7CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gVmlydHVhbFJlZ2lzdGVyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHJldmlzaW9uIDk5MTM5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCwxNTYgKzI4LDExIEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUg
IkRhdGFGb3JtYXQuaCIKICNpbmNsdWRlIDxkZmcvREZHSklUQ29tcGlsZXIuaD4KIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi0vLyA9PT0gRGF0YUZvcm1hdCA9PT0KLS8vCi0v
LyBUaGlzIGVudW0gdHJhY2tzIHRoZSBjdXJyZW50IHJlcHJlc2VudGF0aW9uIGluIHdoaWNoIGEg
dmFsdWUgaXMgYmVpbmcgaGVsZC4KLS8vIFZhbHVlcyBtYXkgYmUgdW5ib3hlZCBwcmltaXRpdmVz
IChpbnQzMiwgZG91YmxlLCBvciBjZWxsKSwgb3IgYm94ZWQgYXMgYSBKU1ZhbHVlLgotLy8gRm9y
IGJveGVkIHZhbHVlcywgd2UgbWF5IGtub3cgdGhlIHR5cGUgb2YgYm94aW5nIHRoYXQgaGFzIHRh
a2VuIHBsYWNlLgotLy8gKE1heSBhbHNvIG5lZWQgYm9vbCwgYXJyYXksIG9iamVjdCwgc3RyaW5n
IHR5cGVzISkKLWVudW0gRGF0YUZvcm1hdCB7Ci0gICAgRGF0YUZvcm1hdE5vbmUgPSAwLAotICAg
IERhdGFGb3JtYXRJbnRlZ2VyID0gMSwKLSAgICBEYXRhRm9ybWF0RG91YmxlID0gMiwKLSAgICBE
YXRhRm9ybWF0Qm9vbGVhbiA9IDMsCi0gICAgRGF0YUZvcm1hdENlbGwgPSA0LAotICAgIERhdGFG
b3JtYXRTdG9yYWdlID0gNSwKLSAgICBEYXRhRm9ybWF0SlMgPSA4LAotICAgIERhdGFGb3JtYXRK
U0ludGVnZXIgPSBEYXRhRm9ybWF0SlMgfCBEYXRhRm9ybWF0SW50ZWdlciwKLSAgICBEYXRhRm9y
bWF0SlNEb3VibGUgPSBEYXRhRm9ybWF0SlMgfCBEYXRhRm9ybWF0RG91YmxlLAotICAgIERhdGFG
b3JtYXRKU0NlbGwgPSBEYXRhRm9ybWF0SlMgfCBEYXRhRm9ybWF0Q2VsbCwKLSAgICBEYXRhRm9y
bWF0SlNCb29sZWFuID0gRGF0YUZvcm1hdEpTIHwgRGF0YUZvcm1hdEJvb2xlYW4KLX07Ci0KLSNp
Zm5kZWYgTkRFQlVHCi1pbmxpbmUgY29uc3QgY2hhciogZGF0YUZvcm1hdFRvU3RyaW5nKERhdGFG
b3JtYXQgZGF0YUZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGRhdGFGb3JtYXQpIHsKLSAgICBjYXNl
IERhdGFGb3JtYXROb25lOgotICAgICAgICByZXR1cm4gIk5vbmUiOwotICAgIGNhc2UgRGF0YUZv
cm1hdEludGVnZXI6Ci0gICAgICAgIHJldHVybiAiSW50ZWdlciI7Ci0gICAgY2FzZSBEYXRhRm9y
bWF0RG91YmxlOgotICAgICAgICByZXR1cm4gIkRvdWJsZSI7Ci0gICAgY2FzZSBEYXRhRm9ybWF0
Q2VsbDoKLSAgICAgICAgcmV0dXJuICJDZWxsIjsKLSAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFu
OgotICAgICAgICByZXR1cm4gIkJvb2xlYW4iOwotICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6
Ci0gICAgICAgIHJldHVybiAiU3RvcmFnZSI7Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlM6Ci0gICAg
ICAgIHJldHVybiAiSlMiOwotICAgIGNhc2UgRGF0YUZvcm1hdEpTSW50ZWdlcjoKLSAgICAgICAg
cmV0dXJuICJKU0ludGVnZXIiOwotICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgotICAgICAg
ICByZXR1cm4gIkpTRG91YmxlIjsKLSAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6Ci0gICAgICAg
IHJldHVybiAiSlNDZWxsIjsKLSAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46Ci0gICAgICAg
IHJldHVybiAiSlNCb29sZWFuIjsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gIlVua25v
d24iOwotICAgIH0KLX0KLSNlbmRpZgotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSBib29s
IG5lZWREYXRhRm9ybWF0Q29udmVyc2lvbihEYXRhRm9ybWF0IGZyb20sIERhdGFGb3JtYXQgdG8p
Ci17Ci0gICAgQVNTRVJUKGZyb20gIT0gRGF0YUZvcm1hdE5vbmUpOwotICAgIEFTU0VSVCh0byAh
PSBEYXRhRm9ybWF0Tm9uZSk7Ci0gICAgc3dpdGNoIChmcm9tKSB7Ci0gICAgY2FzZSBEYXRhRm9y
bWF0SW50ZWdlcjoKLSAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6Ci0gICAgICAgIHJldHVybiB0
byAhPSBmcm9tOwotICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6Ci0gICAgY2FzZSBEYXRhRm9ybWF0
SlM6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlNJbnRlZ2VyOgotICAgIGNhc2UgRGF0YUZvcm1hdEpT
RG91YmxlOgotICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKLSAgICBjYXNlIERhdGFGb3JtYXRK
U0Jvb2xlYW46Ci0gICAgICAgIHN3aXRjaCAodG8pIHsKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0
SW50ZWdlcjoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6Ci0gICAgICAgIGNhc2UgRGF0
YUZvcm1hdEpTOgotICAgICAgICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6Ci0gICAgICAgIGNh
c2UgRGF0YUZvcm1hdEpTRG91YmxlOgotICAgICAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6Ci0g
ICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vIFRoaXMgY2FwdHVyZXMgRGF0YUZv
cm1hdEJvb2xlYW4sIHdoaWNoIGlzIGN1cnJlbnRseSB1bnVzZWQuCi0gICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6
Ci0gICAgICAgIEFTU0VSVCh0byA9PSBEYXRhRm9ybWF0U3RvcmFnZSk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICAvLyBUaGlzIGNhcHR1cmVzIERhdGFGb3Jt
YXRCb29sZWFuLCB3aGljaCBpcyBjdXJyZW50bHkgdW51c2VkLgotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNlbGlmIFVTRShKU1ZB
TFVFMzJfNjQpCi1pbmxpbmUgYm9vbCBuZWVkRGF0YUZvcm1hdENvbnZlcnNpb24oRGF0YUZvcm1h
dCBmcm9tLCBEYXRhRm9ybWF0IHRvKQotewotICAgIEFTU0VSVChmcm9tICE9IERhdGFGb3JtYXRO
b25lKTsKLSAgICBBU1NFUlQodG8gIT0gRGF0YUZvcm1hdE5vbmUpOwotICAgIHN3aXRjaCAoZnJv
bSkgewotICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6Ci0gICAgY2FzZSBEYXRhRm9ybWF0Q2Vs
bDoKLSAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgotICAgICAgICByZXR1cm4gKCh0byAmIERh
dGFGb3JtYXRKUykgfHwgdG8gPT0gRGF0YUZvcm1hdERvdWJsZSk7Ci0gICAgY2FzZSBEYXRhRm9y
bWF0RG91YmxlOgotICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgotICAgICAgICByZXR1cm4g
KHRvICE9IERhdGFGb3JtYXREb3VibGUgJiYgdG8gIT0gRGF0YUZvcm1hdEpTRG91YmxlKTsKLSAg
ICBjYXNlIERhdGFGb3JtYXRKUzoKLSAgICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6Ci0gICAg
Y2FzZSBEYXRhRm9ybWF0SlNDZWxsOgotICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoKLSAg
ICAgICAgcmV0dXJuICghKHRvICYgRGF0YUZvcm1hdEpTKSB8fCB0byA9PSBEYXRhRm9ybWF0SlNE
b3VibGUpOwotICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6Ci0gICAgICAgIEFTU0VSVCh0byA9
PSBEYXRhRm9ybWF0U3RvcmFnZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0
OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0jZW5kaWYKLQotaW5saW5lIGJvb2wgaXNKU0Zvcm1hdChEYXRhRm9ybWF0IGZvcm1hdCwg
RGF0YUZvcm1hdCBleHBlY3RlZEZvcm1hdCkKLXsKLSAgICBBU1NFUlQoZXhwZWN0ZWRGb3JtYXQg
JiBEYXRhRm9ybWF0SlMpOwotICAgIHJldHVybiAoZm9ybWF0IHwgRGF0YUZvcm1hdEpTKSA9PSBl
eHBlY3RlZEZvcm1hdDsKLX0KLQotaW5saW5lIGJvb2wgaXNKU0ludGVnZXIoRGF0YUZvcm1hdCBm
b3JtYXQpCi17Ci0gICAgcmV0dXJuIGlzSlNGb3JtYXQoZm9ybWF0LCBEYXRhRm9ybWF0SlNJbnRl
Z2VyKTsKLX0KLQotaW5saW5lIGJvb2wgaXNKU0RvdWJsZShEYXRhRm9ybWF0IGZvcm1hdCkKLXsK
LSAgICByZXR1cm4gaXNKU0Zvcm1hdChmb3JtYXQsIERhdGFGb3JtYXRKU0RvdWJsZSk7Ci19Ci0K
LWlubGluZSBib29sIGlzSlNDZWxsKERhdGFGb3JtYXQgZm9ybWF0KQotewotICAgIHJldHVybiBp
c0pTRm9ybWF0KGZvcm1hdCwgRGF0YUZvcm1hdEpTQ2VsbCk7Ci19Ci0KLWlubGluZSBib29sIGlz
SlNCb29sZWFuKERhdGFGb3JtYXQgZm9ybWF0KQotewotICAgIHJldHVybiBpc0pTRm9ybWF0KGZv
cm1hdCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Ci19Ci0KIC8vID09PSBHZW5lcmF0aW9uSW5mbyA9
PT0KIC8vCiAvLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGN1cnJlbnQgc3RhdHVz
IG9mIGEgbGl2ZSB2YWx1ZXMgZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbi4KQEAgLTMwNiw3ICsxNjEs
NyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0pTRm9ybWF0KERhdGFGb3JtYXQgZXhwZWN0
ZWRGb3JtYXQpCiAgICAgewotICAgICAgICByZXR1cm4gREZHOjppc0pTRm9ybWF0KHJlZ2lzdGVy
Rm9ybWF0KCksIGV4cGVjdGVkRm9ybWF0KSB8fCBERkc6OmlzSlNGb3JtYXQoc3BpbGxGb3JtYXQo
KSwgZXhwZWN0ZWRGb3JtYXQpOworICAgICAgICByZXR1cm4gSlNDOjppc0pTRm9ybWF0KHJlZ2lz
dGVyRm9ybWF0KCksIGV4cGVjdGVkRm9ybWF0KSB8fCBKU0M6OmlzSlNGb3JtYXQoc3BpbGxGb3Jt
YXQoKSwgZXhwZWN0ZWRGb3JtYXQpOwogICAgIH0KICAgICAKICAgICBib29sIGlzSlNJbnRlZ2Vy
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCShyZXZpc2lvbiA5OTEzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw1OSArNjAsNiBAQCB2b2lk
IFZhbHVlU291cmNlOjpkdW1wKEZJTEUqIG91dCkgY29uc3QKICAgICAgICAgYnJlYWs7CiAgICAg
fQogfQotCi12b2lkIFZhbHVlUmVjb3Zlcnk6OmR1bXAoRklMRSogb3V0KSBjb25zdAotewotICAg
IHN3aXRjaCAodGVjaG5pcXVlKCkpIHsKLSAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZToK
LSAgICAgICAgZnByaW50ZihvdXQsICItIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQWxy
ZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkSW50MzI6Ci0gICAgICAgIGZwcmludGYob3V0LCAi
KGludDMyKSIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmls
ZUFzVW5ib3hlZENlbGw6Ci0gICAgICAgIGZwcmludGYob3V0LCAiKGNlbGwpIik7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQm9vbGVhbjoK
LSAgICAgICAgZnByaW50ZihvdXQsICIoYm9vbCkiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJbkdQUjoKLSAgICAgICAgZnByaW50ZihvdXQsICIlJSVzIiwgR1BSSW5mbzo6ZGVidWdOYW1l
KGdwcigpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Ci0g
ICAgICAgIGZwcmludGYob3V0LCAiaW50MzIoJSUlcykiLCBHUFJJbmZvOjpkZWJ1Z05hbWUoZ3By
KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOgotICAg
ICAgICBmcHJpbnRmKG91dCwgImJvb2woJSUlcykiLCBHUFJJbmZvOjpkZWJ1Z05hbWUoZ3ByKCkp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbkZQUjoKLSAgICAgICAgZnByaW50ZihvdXQs
ICIlJSVzIiwgRlBSSW5mbzo6ZGVidWdOYW1lKGZwcigpKSk7Ci0gICAgICAgIGJyZWFrOwotI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgY2FzZSBJblBhaXI6Ci0gICAgICAgIGZwcmludGYob3V0
LCAicGFpciglJSVzLCAlJSVzKSIsIEdQUkluZm86OmRlYnVnTmFtZSh0YWdHUFIoKSksIEdQUklu
Zm86OmRlYnVnTmFtZShwYXlsb2FkR1BSKCkpKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAg
ICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgotICAgICAgICBmcHJpbnRmKG91dCwgIiol
ZCIsIHZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnQzMkRp
c3BsYWNlZEluUmVnaXN0ZXJGaWxlOgotICAgICAgICBmcHJpbnRmKG91dCwgIippbnQzMiglZCki
LCB2aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG91YmxlRGlz
cGxhY2VkSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgIGZwcmludGYob3V0LCAiKmRvdWJsZSglZCki
LCB2aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29uc3RhbnQ6
Ci0gICAgICAgIGZwcmludGYob3V0LCAiWyVzXSIsIGNvbnN0YW50KCkuZGVzY3JpcHRpb24oKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG9udEtub3c6Ci0gICAgICAgIGZwcmludGYob3V0
LCAiISIpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBmcHJpbnRmKG91
dCwgIj8lZCIsIHRlY2huaXF1ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQogI2VuZGlm
CiAKIE9TUkV4aXQ6Ok9TUkV4aXQoSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBWYWx1ZVBy
b2ZpbGUqIHZhbHVlUHJvZmlsZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2ssIFNwZWN1bGF0
aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiA5OTEzOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRl
ICJWYWx1ZVJlY292ZXJ5LmgiCiAjaW5jbHVkZSA8ZGZnL0RGR0Fic3RyYWN0U3RhdGUuaD4KICNp
bmNsdWRlIDxkZmcvREZHSklUQ29kZUdlbmVyYXRvci5oPgogCkBAIC0xNDUsMTk0ICsxNDYsNiBA
QCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBtX25vZGVJbmRleDsKIH07CiAgICAgCi0vLyBEZXNj
cmliZXMgaG93IHRvIHJlY292ZXIgYSBnaXZlbiBieXRlY29kZSB2aXJ0dWFsIHJlZ2lzdGVyIGF0
IGEgZ2l2ZW4KLS8vIGNvZGUgcG9pbnQuCi1lbnVtIFZhbHVlUmVjb3ZlcnlUZWNobmlxdWUgewot
ICAgIC8vIEl0J3MgYWxyZWFkeSBpbiB0aGUgcmVnaXN0ZXIgZmlsZSBhdCB0aGUgcmlnaHQgbG9j
YXRpb24uCi0gICAgQWxyZWFkeUluUmVnaXN0ZXJGaWxlLAotICAgIC8vIEl0J3MgYWxyZWFkeSBp
biB0aGUgcmVnaXN0ZXIgZmlsZSBidXQgdW5ib3hlZC4KLSAgICBBbHJlYWR5SW5SZWdpc3RlckZp
bGVBc1VuYm94ZWRJbnQzMiwKLSAgICBBbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRDZWxs
LAotICAgIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEJvb2xlYW4sCi0gICAgLy8gSXQn
cyBpbiBhIHJlZ2lzdGVyLgotICAgIEluR1BSLAotICAgIFVuYm94ZWRJbnQzMkluR1BSLAotICAg
IFVuYm94ZWRCb29sZWFuSW5HUFIsCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBJblBhaXIs
Ci0jZW5kaWYKLSAgICBJbkZQUiwKLSAgICAvLyBJdCdzIGluIHRoZSByZWdpc3RlciBmaWxlLCBi
dXQgYXQgYSBkaWZmZXJlbnQgbG9jYXRpb24uCi0gICAgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUs
Ci0gICAgLy8gSXQncyBpbiB0aGUgcmVnaXN0ZXIgZmlsZSwgYXQgYSBkaWZmZXJlbnQgbG9jYXRp
b24sIGFuZCBpdCdzIHVuYm94ZWQuCi0gICAgSW50MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSwK
LSAgICBEb3VibGVEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSwKLSAgICAvLyBJdCdzIGEgY29uc3Rh
bnQuCi0gICAgQ29uc3RhbnQsCi0gICAgLy8gRG9uJ3Qga25vdyBob3cgdG8gcmVjb3ZlciBpdC4K
LSAgICBEb250S25vdwotfTsKLQotY2xhc3MgVmFsdWVSZWNvdmVyeSB7Ci1wdWJsaWM6Ci0gICAg
VmFsdWVSZWNvdmVyeSgpCi0gICAgICAgIDogbV90ZWNobmlxdWUoRG9udEtub3cpCi0gICAgewot
ICAgIH0KLSAgICAKLSAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBhbHJlYWR5SW5SZWdpc3RlckZp
bGUoKQotICAgIHsKLSAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7Ci0gICAgICAgIHJlc3Vs
dC5tX3RlY2huaXF1ZSA9IEFscmVhZHlJblJlZ2lzdGVyRmlsZTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIFZhbHVlUmVjb3ZlcnkgYWxyZWFkeUluUmVn
aXN0ZXJGaWxlQXNVbmJveGVkSW50MzIoKQotICAgIHsKLSAgICAgICAgVmFsdWVSZWNvdmVyeSBy
ZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IEFscmVhZHlJblJlZ2lzdGVyRmls
ZUFzVW5ib3hlZEludDMyOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAg
ICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBhbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRDZWxs
KCkKLSAgICB7Ci0gICAgICAgIFZhbHVlUmVjb3ZlcnkgcmVzdWx0OwotICAgICAgICByZXN1bHQu
bV90ZWNobmlxdWUgPSBBbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRDZWxsOwotICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBh
bHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRCb29sZWFuKCkKLSAgICB7Ci0gICAgICAgIFZh
bHVlUmVjb3ZlcnkgcmVzdWx0OwotICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBBbHJlYWR5
SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRCb29sZWFuOwotICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgIH0KLSAgICAKLSAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBpbkdQUihHUFJSZWcgZ3ByLCBE
YXRhRm9ybWF0IGRhdGFGb3JtYXQpCi0gICAgewotICAgICAgICBBU1NFUlQoZGF0YUZvcm1hdCAh
PSBEYXRhRm9ybWF0Tm9uZSk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgQVNTRVJU
KGRhdGFGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIgfHwgZGF0YUZvcm1hdCA9PSBEYXRhRm9y
bWF0Q2VsbCB8fCBkYXRhRm9ybWF0ID09IERhdGFGb3JtYXRCb29sZWFuKTsKLSNlbmRpZgotICAg
ICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKLSAgICAgICAgaWYgKGRhdGFGb3JtYXQgPT0gRGF0
YUZvcm1hdEludGVnZXIpCi0gICAgICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBVbmJveGVk
SW50MzJJbkdQUjsKLSAgICAgICAgZWxzZSBpZiAoZGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0Qm9v
bGVhbikKLSAgICAgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IFVuYm94ZWRCb29sZWFuSW5H
UFI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IEluR1BS
OwotICAgICAgICByZXN1bHQubV9zb3VyY2UuZ3ByID0gZ3ByOwotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0KLSAgICAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHN0YXRpYyBWYWx1
ZVJlY292ZXJ5IGluUGFpcihHUFJSZWcgdGFnR1BSLCBHUFJSZWcgcGF5bG9hZEdQUikKLSAgICB7
Ci0gICAgICAgIFZhbHVlUmVjb3ZlcnkgcmVzdWx0OwotICAgICAgICByZXN1bHQubV90ZWNobmlx
dWUgPSBJblBhaXI7Ci0gICAgICAgIHJlc3VsdC5tX3NvdXJjZS5wYWlyLnRhZ0dQUiA9IHRhZ0dQ
UjsKLSAgICAgICAgcmVzdWx0Lm1fc291cmNlLnBhaXIucGF5bG9hZEdQUiA9IHBheWxvYWRHUFI7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBzdGF0aWMgVmFs
dWVSZWNvdmVyeSBpbkZQUihGUFJSZWcgZnByKQotICAgIHsKLSAgICAgICAgVmFsdWVSZWNvdmVy
eSByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IEluRlBSOwotICAgICAgICBy
ZXN1bHQubV9zb3VyY2UuZnByID0gZnByOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0K
LSAgICAKLSAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZywgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KQotICAgIHsK
LSAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7Ci0gICAgICAgIHN3aXRjaCAoZGF0YUZvcm1h
dCkgewotICAgICAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2VyOgotICAgICAgICAgICAgcmVzdWx0
Lm1fdGVjaG5pcXVlID0gSW50MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKLSAg
ICAgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IERvdWJsZURpc3BsYWNlZEluUmVnaXN0ZXJG
aWxlOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IEFTU0VSVChkYXRhRm9ybWF0ICE9IERhdGFGb3JtYXROb25lICYmIGRhdGFGb3JtYXQgIT0gRGF0
YUZvcm1hdFN0b3JhZ2UpOwotICAgICAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gRGlzcGxh
Y2VkSW5SZWdpc3RlckZpbGU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICByZXN1bHQubV9zb3VyY2UudmlydHVhbFJlZyA9IHZpcnR1YWxSZWc7Ci0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGNvbnN0YW50
KEpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKLSAg
ICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gQ29uc3RhbnQ7Ci0gICAgICAgIHJlc3VsdC5tX3Nv
dXJjZS5jb25zdGFudCA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIFZhbHVlUmVjb3ZlcnlUZWNobmlxdWUgdGVjaG5pcXVl
KCkgY29uc3QgeyByZXR1cm4gbV90ZWNobmlxdWU7IH0KLSAgICAKLSAgICBHUFJSZWcgZ3ByKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBJbkdQUiB8fCBtX3Rl
Y2huaXF1ZSA9PSBVbmJveGVkSW50MzJJbkdQUiB8fCBtX3RlY2huaXF1ZSA9PSBVbmJveGVkQm9v
bGVhbkluR1BSKTsKLSAgICAgICAgcmV0dXJuIG1fc291cmNlLmdwcjsKLSAgICB9Ci0gICAgCi0j
aWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBHUFJSZWcgdGFnR1BSKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBJblBhaXIpOwotICAgICAgICByZXR1cm4gbV9z
b3VyY2UucGFpci50YWdHUFI7Ci0gICAgfQotICAgIAotICAgIEdQUlJlZyBwYXlsb2FkR1BSKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBJblBhaXIpOwotICAg
ICAgICByZXR1cm4gbV9zb3VyY2UucGFpci5wYXlsb2FkR1BSOwotICAgIH0KLSNlbmRpZgotICAg
IAotICAgIEZQUlJlZyBmcHIoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdGVjaG5p
cXVlID09IEluRlBSKTsKLSAgICAgICAgcmV0dXJuIG1fc291cmNlLmZwcjsKLSAgICB9Ci0gICAg
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpIGNvbnN0Ci0gICAgewotICAg
ICAgICBBU1NFUlQobV90ZWNobmlxdWUgPT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUgfHwgbV90
ZWNobmlxdWUgPT0gSW50MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSB8fCBtX3RlY2huaXF1ZSA9
PSBEb3VibGVEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSk7Ci0gICAgICAgIHJldHVybiBtX3NvdXJj
ZS52aXJ0dWFsUmVnOwotICAgIH0KLSAgICAKLSAgICBKU1ZhbHVlIGNvbnN0YW50KCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBDb25zdGFudCk7Ci0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjpkZWNvZGUobV9zb3VyY2UuY29uc3RhbnQpOwotICAgIH0KLSAgICAK
LSNpZm5kZWYgTkRFQlVHCi0gICAgdm9pZCBkdW1wKEZJTEUqIG91dCkgY29uc3Q7Ci0jZW5kaWYK
LSAgICAKLXByaXZhdGU6Ci0gICAgVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSBtX3RlY2huaXF1ZTsK
LSAgICB1bmlvbiB7Ci0gICAgICAgIEdQUlJlZyBncHI7Ci0gICAgICAgIEZQUlJlZyBmcHI7Ci0j
aWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIEdQUlJl
ZyB0YWdHUFI7Ci0gICAgICAgICAgICBHUFJSZWcgcGF5bG9hZEdQUjsKLSAgICAgICAgfSBwYWly
OwotI2VuZGlmCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnOwotICAgICAgICBF
bmNvZGVkSlNWYWx1ZSBjb25zdGFudDsKLSAgICB9IG1fc291cmNlOwotfTsKLQogLy8gPT09IE9T
UkV4aXQgPT09CiAvLwogLy8gVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGhvdyB0byBleGl0IHRo
ZSBzcGVjdWxhdGl2ZSBwYXRoIGJ5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlQWNjZXNzRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHJldmlzaW9uIDk5MTM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsMTkgKzI2LDEzIEBACiAjaWZuZGVmIERGR1ZhcmlhYmxlQWNjZXNzRGF0YV9oCiAj
ZGVmaW5lIERGR1ZhcmlhYmxlQWNjZXNzRGF0YV9oCiAKKyNpbmNsdWRlICJQcmVkaWN0ZWRUeXBl
LmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQogI2luY2x1ZGUgPHd0Zi9VbmlvbkZpbmQuaD4K
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi0vLyBUeXBlIGZvciBhIHZpcnR1
YWwgcmVnaXN0ZXIgbnVtYmVyIChzcGlsbCBsb2NhdGlvbikuCi0vLyBVc2luZyBhbiBlbnVtIHRv
IG1ha2UgdGhpcyB0eXBlLWNoZWNrZWQgYXQgY29tcGlsZSB0aW1lLCB0byBhdmVydCBwcm9ncmFt
bWVyIGVycm9ycy4KLWVudW0gVmlydHVhbFJlZ2lzdGVyIHsgSW52YWxpZFZpcnR1YWxSZWdpc3Rl
ciA9IC0xIH07Ci1DT01QSUxFX0FTU0VSVChzaXplb2YoVmlydHVhbFJlZ2lzdGVyKSA9PSBzaXpl
b2YoaW50KSwgVmlydHVhbFJlZ2lzdGVyX2lzXzMyYml0KTsKLQogY2xhc3MgVmFyaWFibGVBY2Nl
c3NEYXRhOiBwdWJsaWMgVW5pb25GaW5kPFZhcmlhYmxlQWNjZXNzRGF0YT4gewogcHVibGljOgog
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSgpCkBAIC04Niw2ICs4MCw0IEBAIHByaXZhdGU6CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCiAj
ZW5kaWYgLy8gREZHVmFyaWFibGVBY2Nlc3NEYXRhX2gK
</data>
<flag name="review"
          id="111805"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>