<?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>23151</bug_id>
          
          <creation_ts>2009-01-06 14:57:03 -0800</creation_ts>
          <short_desc>Finish rename of AffineTransform</short_desc>
          <delta_ts>2009-03-02 11:51:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>104644</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2009-01-06 14:57:03 -0800</bug_when>
    <thetext>The platform interfaces kept the old name. They should be renamed.

While I&apos;m in there, I&apos;ll also remove the trailing whitespaces that zecke complained about (seems to have been in the file for a while).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104653</commentid>
    <comment_count>1</comment_count>
      <attachid>26477</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2009-01-06 15:20:18 -0800</bug_when>
    <thetext>Created attachment 26477
patch

Hopefully this finishes the rename makes zecke happier at the same time :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104654</commentid>
    <comment_count>2</comment_count>
      <attachid>26477</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2009-01-06 15:22:09 -0800</bug_when>
    <thetext>Comment on attachment 26477
patch

arrgh. wrong file uploaded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104659</commentid>
    <comment_count>3</comment_count>
      <attachid>26478</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2009-01-06 15:40:54 -0800</bug_when>
    <thetext>Created attachment 26478
patch to finish renaming

Hopefully got the right file this time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104661</commentid>
    <comment_count>4</comment_count>
      <attachid>26478</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-06 16:02:31 -0800</bug_when>
    <thetext>Comment on attachment 26478
patch to finish renaming

Best way to do this:

    1) Use do-webcore-rename
    2) grep for AffineTransform in tree after rename
    3) Update list of things in do-webcore-rename to cover more
    4) Revert your changes to the tree
    5) Use do-webcore-rename

Repeat until done.

Then send patch.

Then do any hand changes, separately, in another patch.

For next time.

It&apos;s a little strange that this patch includes stripping trailing whitespace in TransformationMatrix.h and TransformationMatrics.cpp.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104791</commentid>
    <comment_count>5</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2009-01-07 15:09:40 -0800</bug_when>
    <thetext>See above comments for reasoning on whitespace changes.

Sending        WebCore/ChangeLog
Sending        WebCore/GNUmakefile.am
Sending        WebCore/WebCore.pro
Sending        WebCore/WebCore.scons
Sending        WebCore/WebCore.vcproj/WebCore.vcproj
Sending        WebCore/WebCore.xcodeproj/project.pbxproj
Deleting       WebCore/platform/graphics/cairo/AffineTransformCairo.cpp
Adding         WebCore/platform/graphics/cairo/TransformationMatrixCairo.cpp
Deleting       WebCore/platform/graphics/cg/AffineTransformCG.cpp
Adding         WebCore/platform/graphics/cg/TransformationMatrixCG.cpp
Deleting       WebCore/platform/graphics/qt/AffineTransformQt.cpp
Adding         WebCore/platform/graphics/qt/TransformationMatrixQt.cpp
Sending        WebCore/platform/graphics/transforms/TransformationMatrix.cpp
Sending        WebCore/platform/graphics/transforms/TransformationMatrix.h
Deleting       WebCore/platform/graphics/wx/AffineTransformWx.cpp
Adding         WebCore/platform/graphics/wx/TransformationMatrixWx.cpp
Sending        WebCore/webcore-wx.bkl
Transmitting file data ..........
Committed revision 39688.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26477</attachid>
            <date>2009-01-06 15:20:18 -0800</date>
            <delta_ts>2009-01-06 15:22:09 -0800</delta_ts>
            <desc>patch</desc>
            <filename>rename.patch</filename>
            <type>text/plain</type>
            <size>40649</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5zY29ucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUuc2NvbnMJKHJldmlzaW9uIDM5NjY1KQorKysgV2ViQ29yZS9XZWJDb3JlLnNjb25zCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MjksNyArODI5LDcgQEAKIAogaWYgZW52WydQTEFURk9STSddID09ICdk
YXJ3aW4nOgogICAgIHNvdXJjZXNbJ3BsYXRmb3JtL2dyYXBoaWNzL2NnJ10gPSBbCi0gICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9BZmZpbmVUcmFuc2Zvcm1DRy5jcHAnLAorICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAnLAogICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAnLAogICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2cvRmxvYXRQb2ludENHLmNwcCcsCiAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9GbG9hdFJlY3RDRy5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiAzOTY2NSkKKysrIFdlYkNvcmUv
V2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEwNzEsNyArMTA3MSw3IEBACiAgICAgcGFn
ZS9xdC9EcmFnQ29udHJvbGxlclF0LmNwcCBcCiAgICAgcGFnZS9xdC9FdmVudEhhbmRsZXJRdC5j
cHAgXAogICAgIHBhZ2UvcXQvRnJhbWVRdC5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L0FmZmluZVRyYW5zZm9ybVF0LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNm
b3JtYXRpb25NYXRyaXhRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbG9yUXQu
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwIFwKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9Gb250UXQ0My5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCShyZXZpc2lvbiAzOTY2NSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ2MTIsNyArNDYxMiw3IEBACiAJCQkJ
CU5hbWU9ImNnIg0KIAkJCQkJPg0KIAkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXGNnXEFmZmluZVRyYW5zZm9ybUNHLmNwcCINCisJCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXFRyYW5zZm9ybWF0aW9uTWF0cml4Q0cu
Y3BwIg0KIAkJCQkJCT4NCiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCiAJCQkJCQkJTmFtZT0i
RGVidWdfQ2Fpcm98V2luMzIiDQpAQCAtNTAxNiw3ICs1MDE2LDcgQEAKIAkJCQkJTmFtZT0iY2Fp
cm8iDQogCQkJCQk+DQogCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcY2Fpcm9cQWZmaW5lVHJhbnNmb3JtQ2Fpcm8uY3BwIg0KKwkJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2Fpcm9cVHJhbnNmb3JtYXRpb25NYXRyaXhD
YWlyby5jcHAiDQogCQkJCQkJPg0KIAkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KIAkJCQkJCQlO
YW1lPSJEZWJ1Z3xXaW4zMiINCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDM5NjY1KQorKysgV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTY3MCw3ICsxNjcwLDcgQEAKIAlX
ZWJDb3JlL3BhZ2UvZ3RrL0RyYWdDb250cm9sbGVyR3RrLmNwcCBcCiAJV2ViQ29yZS9wYWdlL2d0
ay9FdmVudEhhbmRsZXJHdGsuY3BwIFwKIAlXZWJDb3JlL3BhZ2UvZ3RrL0ZyYW1lR3RrLmNwcCBc
Ci0JV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9BZmZpbmVUcmFuc2Zvcm1DYWlyby5j
cHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRy
aXhDYWlyby5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9QYXRo
LmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcCBcCiAJ
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcCBcCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0FmZmluZVRyYW5zZm9ybVF0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0FmZmluZVRyYW5zZm9ybVF0
LmNwcAkocmV2aXNpb24gMzk2NjUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0Fm
ZmluZVRyYW5zZm9ybVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyMDIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCi0KLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotVHJhbnNmb3JtYXRpb25NYXRyaXg6OlRyYW5z
Zm9ybWF0aW9uTWF0cml4KCkKLSAgICA6IG1fdHJhbnNmb3JtKCkKLXsKLX0KLQotVHJhbnNmb3Jt
YXRpb25NYXRyaXg6OlRyYW5zZm9ybWF0aW9uTWF0cml4KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91
YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgdHgsIGRvdWJsZSB0eSkKLSAgICA6IG1fdHJhbnNmb3Jt
KGEsIGIsIGMsIGQsIHR4LCB0eSkKLXsKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRyaXg6OlRyYW5z
Zm9ybWF0aW9uTWF0cml4KGNvbnN0IFBsYXRmb3JtVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJp
eCkKLSAgICA6IG1fdHJhbnNmb3JtKG1hdHJpeCkKLXsKLX0KLQotdm9pZCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeDo6c2V0TWF0cml4KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBk
LCBkb3VibGUgdHgsIGRvdWJsZSB0eSkKLXsKLSAgICBtX3RyYW5zZm9ybS5zZXRNYXRyaXgoYSwg
YiwgYywgZCwgdHgsIHR5KTsKLX0KLQotdm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwKGRv
dWJsZSB4LCBkb3VibGUgeSwgZG91YmxlKiB4MiwgZG91YmxlKiB5MikgY29uc3QKLXsKLSAgICBx
cmVhbCB0eDIsIHR5MjsKLSAgICBtX3RyYW5zZm9ybS5tYXAocXJlYWwoeCksIHFyZWFsKHkpLCAm
dHgyLCAmdHkyKTsKLSAgICAqeDIgPSB0eDI7Ci0gICAgKnkyID0gdHkyOwotfQotCi1JbnRSZWN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fdHJhbnNmb3JtLm1hcFJlY3QocmVjdCk7Ci19Ci0KLUZsb2F0UmVj
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fdHJhbnNmb3JtLm1hcFJlY3QocmVjdCk7Ci19Ci0KLWJvb2wg
VHJhbnNmb3JtYXRpb25NYXRyaXg6OmlzSWRlbnRpdHkoKSBjb25zdAotewotICAgIHJldHVybiBt
X3RyYW5zZm9ybS5pc0lkZW50aXR5KCk7Ci19Ci0KLWRvdWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdHJhbnNmb3JtLm0xMSgpOwotfQotCi12b2lk
IFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRBKGRvdWJsZSBhKQotewotICAgIG1fdHJhbnNmb3Jt
LnNldE1hdHJpeChhLCBiKCksIGMoKSwgZCgpLCBlKCksIGYoKSk7Ci19Ci0KLWRvdWJsZSBUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6YigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdHJhbnNmb3JtLm0x
MigpOwotfQotCi12b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRCKGRvdWJsZSBiKQotewot
ICAgIG1fdHJhbnNmb3JtLnNldE1hdHJpeChhKCksIGIsIGMoKSwgZCgpLCBlKCksIGYoKSk7Ci19
Ci0KLWRvdWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6YygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fdHJhbnNmb3JtLm0yMSgpOwotfQotCi12b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRD
KGRvdWJsZSBjKQotewotICAgIG1fdHJhbnNmb3JtLnNldE1hdHJpeChhKCksIGIoKSwgYywgZCgp
LCBlKCksIGYoKSk7Ci19Ci0KLWRvdWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6ZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fdHJhbnNmb3JtLm0yMigpOwotfQotCi12b2lkIFRyYW5zZm9ybWF0
aW9uTWF0cml4OjpzZXREKGRvdWJsZSBkKQotewotICAgIG1fdHJhbnNmb3JtLnNldE1hdHJpeChh
KCksIGIoKSwgYygpLCBkLCBlKCksIGYoKSk7Ci19Ci0KLWRvdWJsZSBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdHJhbnNmb3JtLmR4KCk7Ci19Ci0KLXZv
aWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldEUoZG91YmxlIGUpCi17Ci0gICAgbV90cmFuc2Zv
cm0uc2V0TWF0cml4KGEoKSwgYigpLCBjKCksIGQoKSwgZSwgZigpKTsKLX0KLQotZG91YmxlIFRy
YW5zZm9ybWF0aW9uTWF0cml4OjpmKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90cmFuc2Zvcm0u
ZHkoKTsKLX0KLQotdm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0Rihkb3VibGUgZikKLXsK
LSAgICBtX3RyYW5zZm9ybS5zZXRNYXRyaXgoYSgpLCBiKCksIGMoKSwgZCgpLCBlKCksIGYpOwot
fQotCi12b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZXNldCgpCi17Ci0gICAgbV90cmFuc2Zv
cm0ucmVzZXQoKTsKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0
cml4OjpzY2FsZShkb3VibGUgc3gsIGRvdWJsZSBzeSkKLXsKLSAgICBtX3RyYW5zZm9ybS5zY2Fs
ZShzeCwgc3kpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRyaXgm
IFRyYW5zZm9ybWF0aW9uTWF0cml4Ojpyb3RhdGUoZG91YmxlIGQpCi17Ci0gICAgbV90cmFuc2Zv
cm0ucm90YXRlKGQpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRy
aXgmIFRyYW5zZm9ybWF0aW9uTWF0cml4Ojp0cmFuc2xhdGUoZG91YmxlIHR4LCBkb3VibGUgdHkp
Ci17Ci0gICAgbV90cmFuc2Zvcm0udHJhbnNsYXRlKHR4LCB0eSk7Ci0gICAgcmV0dXJuICp0aGlz
OwotfQotCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCYgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNoZWFy
KGRvdWJsZSBzeCwgZG91YmxlIHN5KQotewotICAgIG1fdHJhbnNmb3JtLnNoZWFyKHN4LCBzeSk7
Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1kb3VibGUgVHJhbnNmb3JtYXRpb25NYXRyaXg6OmRl
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdHJhbnNmb3JtLmRldCgpOwotfQotCi1UcmFuc2Zv
cm1hdGlvbk1hdHJpeCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6aW52ZXJzZSgpIGNvbnN0Ci17Ci0g
ICAgaWYoIWlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRy
aXgoKTsKLQotICAgIHJldHVybiBtX3RyYW5zZm9ybS5pbnZlcnRlZCgpOwotfQotCi1UcmFuc2Zv
cm1hdGlvbk1hdHJpeDo6b3BlcmF0b3IgUU1hdHJpeCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
dHJhbnNmb3JtOwotfQotCi1ib29sIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvcj09KGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gbV90
cmFuc2Zvcm0gPT0gb3RoZXIubV90cmFuc2Zvcm07Ci19Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4
JiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0b3IqPShjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgb3RoZXIpCi17Ci0gICAgbV90cmFuc2Zvcm0gKj0gb3RoZXIubV90cmFuc2Zvcm07Ci0g
ICAgcmV0dXJuICp0aGlzOwotfQotCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeDo6b3BlcmF0b3IqKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBvdGhlcikKLXsK
LSAgICByZXR1cm4gbV90cmFuc2Zvcm0gKiBvdGhlci5tX3RyYW5zZm9ybTsKLX0KLQotfQotCi0v
LyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9B
ZmZpbmVUcmFuc2Zvcm1DRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9BZmZpbmVUcmFuc2Zvcm1DRy5jcHAJKHJldmlzaW9uIDM5NjY1KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9BZmZpbmVUcmFuc2Zvcm1DRy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMjE2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCi0KLSNpZiBQTEFURk9S
TShDRykKLQotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLQotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotVHJhbnNmb3JtYXRpb25NYXRyaXg6OlRyYW5zZm9y
bWF0aW9uTWF0cml4KCkKLSAgICA6IG1fdHJhbnNmb3JtKENHQWZmaW5lVHJhbnNmb3JtSWRlbnRp
dHkpCi17Ci19Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4OjpUcmFuc2Zvcm1hdGlvbk1hdHJpeChk
b3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIHR4LCBkb3VibGUg
dHkpCi17Ci0gICAgbV90cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2UobmFycm93UHJl
Y2lzaW9uVG9DR0Zsb2F0KGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChiKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoYyksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KGQp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lv
blRvQ0dGbG9hdCh0eCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KHR5KSk7Ci19Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4
OjpUcmFuc2Zvcm1hdGlvbk1hdHJpeChjb25zdCBQbGF0Zm9ybVRyYW5zZm9ybWF0aW9uTWF0cml4
JiB0KQotICAgIDogbV90cmFuc2Zvcm0odCkKLXsKLX0KLQotdm9pZCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6c2V0TWF0cml4KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBk
b3VibGUgdHgsIGRvdWJsZSB0eSkKLXsKLSAgICBtX3RyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNm
b3JtTWFrZShuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoYSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KGIpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9h
dChjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0NHRmxvYXQoZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KHR4KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQodHkpKTsKLX0KLQotdm9p
ZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlICp4
MiwgZG91YmxlICp5MikgY29uc3QKLXsKLSAgICBDR1BvaW50IHJlc3VsdCA9IENHUG9pbnRBcHBs
eUFmZmluZVRyYW5zZm9ybShDR1BvaW50TWFrZShuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoeCks
IG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdCh5KSksIG1fdHJhbnNmb3JtKTsKLSAgICAqeDIgPSBy
ZXN1bHQueDsKLSAgICAqeTIgPSByZXN1bHQueTsKLX0KLQotSW50UmVjdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeDo6bWFwUmVjdChjb25zdCBJbnRSZWN0ICZyZWN0KSBjb25zdAotewotICAgIHJldHVy
biBlbmNsb3NpbmdJbnRSZWN0KENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKENHUmVjdChyZWN0
KSwgbV90cmFuc2Zvcm0pKTsKLX0KLQotRmxvYXRSZWN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Ojpt
YXBSZWN0KGNvbnN0IEZsb2F0UmVjdCAmcmVjdCkgY29uc3QKLXsKLSAgICByZXR1cm4gRmxvYXRS
ZWN0KENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKENHUmVjdChyZWN0KSwgbV90cmFuc2Zvcm0p
KTsKLX0KLQotYm9vbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6aXNJZGVudGl0eSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIENHQWZmaW5lVHJhbnNmb3JtSXNJZGVudGl0eShtX3RyYW5zZm9ybSk7Ci19
Ci0KLWRvdWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fdHJhbnNmb3JtLmE7Ci19Ci0KLXZvaWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldEEoZG91
YmxlIGEpCi17Ci0gICAgbV90cmFuc2Zvcm0uYSA9IG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChh
KTsKLX0KLQotZG91YmxlIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpiKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV90cmFuc2Zvcm0uYjsKLX0KLQotdm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0
Qihkb3VibGUgYikKLXsKLSAgICBtX3RyYW5zZm9ybS5iID0gbmFycm93UHJlY2lzaW9uVG9DR0Zs
b2F0KGIpOwotfQotCi1kb3VibGUgVHJhbnNmb3JtYXRpb25NYXRyaXg6OmMoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3RyYW5zZm9ybS5jOwotfQotCi12b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4
OjpzZXRDKGRvdWJsZSBjKQotewotICAgIG1fdHJhbnNmb3JtLmMgPSBuYXJyb3dQcmVjaXNpb25U
b0NHRmxvYXQoYyk7Ci19Ci0KLWRvdWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6ZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fdHJhbnNmb3JtLmQ7Ci19Ci0KLXZvaWQgVHJhbnNmb3JtYXRpb25N
YXRyaXg6OnNldEQoZG91YmxlIGQpCi17Ci0gICAgbV90cmFuc2Zvcm0uZCA9IG5hcnJvd1ByZWNp
c2lvblRvQ0dGbG9hdChkKTsKLX0KLQotZG91YmxlIFRyYW5zZm9ybWF0aW9uTWF0cml4OjplKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV90cmFuc2Zvcm0udHg7Ci19Ci0KLXZvaWQgVHJhbnNmb3Jt
YXRpb25NYXRyaXg6OnNldEUoZG91YmxlIGUpCi17Ci0gICAgbV90cmFuc2Zvcm0udHggPSBuYXJy
b3dQcmVjaXNpb25Ub0NHRmxvYXQoZSk7Ci19Ci0KLWRvdWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6ZigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdHJhbnNmb3JtLnR5OwotfQotCi12b2lkIFRy
YW5zZm9ybWF0aW9uTWF0cml4OjpzZXRGKGRvdWJsZSBmKQotewotICAgIG1fdHJhbnNmb3JtLnR5
ID0gbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KGYpOwotfQotCi12b2lkIFRyYW5zZm9ybWF0aW9u
TWF0cml4OjpyZXNldCgpCi17Ci0gICAgbV90cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybUlk
ZW50aXR5OwotfQotCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCAmVHJhbnNmb3JtYXRpb25NYXRyaXg6
OnNjYWxlKGRvdWJsZSBzeCwgZG91YmxlIHN5KQotewotICAgIG1fdHJhbnNmb3JtID0gQ0dBZmZp
bmVUcmFuc2Zvcm1TY2FsZShtX3RyYW5zZm9ybSwgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KHN4
KSwgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KHN5KSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQot
Ci1UcmFuc2Zvcm1hdGlvbk1hdHJpeCAmVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJvdGF0ZShkb3Vi
bGUgZCkKLXsKLSAgICBtX3RyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtUm90YXRlKG1fdHJh
bnNmb3JtLCBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoZGVnMnJhZChkKSkpOwotICAgIHJldHVy
biAqdGhpczsKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRyaXggJlRyYW5zZm9ybWF0aW9uTWF0cml4
Ojp0cmFuc2xhdGUoZG91YmxlIHR4LCBkb3VibGUgdHkpCi17Ci0gICAgbV90cmFuc2Zvcm0gPSBD
R0FmZmluZVRyYW5zZm9ybVRyYW5zbGF0ZShtX3RyYW5zZm9ybSwgbmFycm93UHJlY2lzaW9uVG9D
R0Zsb2F0KHR4KSwgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KHR5KSk7Ci0gICAgcmV0dXJuICp0
aGlzOwotfQotCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCAmVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNo
ZWFyKGRvdWJsZSBzeCwgZG91YmxlIHN5KQotewotICAgIENHQWZmaW5lVHJhbnNmb3JtIHNoZWFy
ID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKDEuMGYsIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChz
eSksIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChzeCksIDEuMGYsIDAuMGYsIDAuMGYpOwotICAg
IG1fdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQoc2hlYXIsIG1fdHJhbnNmb3Jt
KTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLWRvdWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
ZGV0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90cmFuc2Zvcm0uYSAqIG1fdHJhbnNmb3JtLmQg
LSBtX3RyYW5zZm9ybS5iICogbV90cmFuc2Zvcm0uYzsKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRy
aXggVHJhbnNmb3JtYXRpb25NYXRyaXg6OmludmVyc2UoKSBjb25zdAotewotICAgIGlmIChpc0lu
dmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4KENHQWZmaW5l
VHJhbnNmb3JtSW52ZXJ0KG1fdHJhbnNmb3JtKSk7Ci0gICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9u
TWF0cml4KCk7Ci19Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvciBQbGF0Zm9ybVRy
YW5zZm9ybWF0aW9uTWF0cml4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90cmFuc2Zvcm07Ci19
Ci0KLWJvb2wgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yPT0gKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4ICZtMikgY29uc3QKLXsKLSAgICByZXR1cm4gQ0dBZmZpbmVUcmFuc2Zvcm1F
cXVhbFRvVHJhbnNmb3JtKG1fdHJhbnNmb3JtLCBDR0FmZmluZVRyYW5zZm9ybShtMikpOwotfQot
Ci1UcmFuc2Zvcm1hdGlvbk1hdHJpeCAmVHJhbnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yKj0g
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4ICZtMikKLXsKLSAgICBtX3RyYW5zZm9ybSA9IENH
QWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1fdHJhbnNmb3JtLCBDR0FmZmluZVRyYW5zZm9ybShtMikp
OwotICAgIHJldHVybiAqdGhpczsKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRyaXggVHJhbnNmb3Jt
YXRpb25NYXRyaXg6Om9wZXJhdG9yKiAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggJm0yKQot
ewotICAgIHJldHVybiBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChtX3RyYW5zZm9ybSwgQ0dBZmZp
bmVUcmFuc2Zvcm0obTIpKTsKLX0KLQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oQ0cpCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0FmZmluZVRyYW5zZm9ybVd4LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0FmZmluZVRyYW5zZm9ybVd4
LmNwcAkocmV2aXNpb24gMzk2NjUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0Fm
ZmluZVRyYW5zZm9ybVd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyNzEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNyBLZXZpbiBPbGxpdmllciAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9u
TWF0cml4LmgiCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0Lmgi
Ci0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5j
bHVkZSA8d3gvZGVmcy5oPgotI2luY2x1ZGUgPHd4L2dyYXBoaWNzLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotI2lmIFVTRShXWEdDKQotVHJhbnNmb3JtYXRpb25NYXRyaXg6OlRyYW5zZm9y
bWF0aW9uTWF0cml4KGNvbnN0IFBsYXRmb3JtQWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgpCi17Ci0g
ICAgbV90cmFuc2Zvcm0gPSBtYXRyaXg7Ci19Ci0jZW5kaWYKLQotVHJhbnNmb3JtYXRpb25NYXRy
aXg6OlRyYW5zZm9ybWF0aW9uTWF0cml4KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRv
dWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpCi17Ci0jaWYgVVNFKFdYR0MpCi0gICAgd3hHcmFw
aGljc1JlbmRlcmVyKiByZW5kZXJlciA9IHd4R3JhcGhpY3NSZW5kZXJlcjo6R2V0RGVmYXVsdFJl
bmRlcmVyKCk7IAotICAgIG1fdHJhbnNmb3JtID0gcmVuZGVyZXItPkNyZWF0ZU1hdHJpeCgpOwot
I2VuZGlmCi0gICAgc2V0TWF0cml4KGEsIGIsIGMsIGQsIGUsIGYpOwotfQotCi1UcmFuc2Zvcm1h
dGlvbk1hdHJpeDo6VHJhbnNmb3JtYXRpb25NYXRyaXgoKSAKLXsgCi0gICAgLy8gTkI6IElmIHdl
IGV2ZXIgc3VwcG9ydCB1c2luZyBDYWlybyBiYWNrZW5kIG9uIFdpbi9NYWMsIHRoaXMgd2lsbCBu
ZWVkIHRvIGJlCi0gICAgLy8gY2hhbmdlZCBzb21laG93ICh0aG91Z2ggSSdtIG5vdCBzdXJlIGhv
dyBhcyB3ZSBkb24ndCBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZQotICAgIC8vIGdyYXBoaWNzIGNv
bnRleHQgaGVyZS4KLSNpZiBVU0UoV1hHQykKLSAgICB3eEdyYXBoaWNzUmVuZGVyZXIqIHJlbmRl
cmVyID0gd3hHcmFwaGljc1JlbmRlcmVyOjpHZXREZWZhdWx0UmVuZGVyZXIoKTsgCi0gICAgbV90
cmFuc2Zvcm0gPSByZW5kZXJlci0+Q3JlYXRlTWF0cml4KCk7Ci0jZW5kaWYKLX0KLQotVHJhbnNm
b3JtYXRpb25NYXRyaXggVHJhbnNmb3JtYXRpb25NYXRyaXg6OmludmVyc2UoKSBjb25zdAotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi12b2lkIFRyYW5z
Zm9ybWF0aW9uTWF0cml4OjpzZXRNYXRyaXgoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywg
ZG91YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUgZikKLXsKLSNpZiBVU0UoV1hHQykKLSAgICBtX3Ry
YW5zZm9ybS5TZXQoYSwgYiwgYywgZCwgZSwgZik7Ci0jZW5kaWYKLX0KLQotdm9pZCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeDo6bWFwKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlICp4MiwgZG91Ymxl
ICp5MikgY29uc3QgCi17IAotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLUludFJlY3QgVHJh
bnNmb3JtYXRpb25NYXRyaXg6Om1hcFJlY3QoY29uc3QgSW50UmVjdCAmcmVjdCkgY29uc3QKLXsK
LSNpZiBVU0UoV1hHQykKLSAgICBkb3VibGUgeCwgeSwgd2lkdGgsIGhlaWdodDsKLSAgICB4ID0g
cmVjdC54KCk7Ci0gICAgeSA9IHJlY3QueSgpOwotICAgIHdpZHRoID0gcmVjdC53aWR0aCgpOwot
ICAgIGhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgCi0gICAgbV90cmFuc2Zvcm0uVHJhbnNm
b3JtUG9pbnQoJngsICZ5KTsKLSAgICBtX3RyYW5zZm9ybS5UcmFuc2Zvcm1EaXN0YW5jZSgmd2lk
dGgsICZoZWlnaHQpOwotICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwot
I2VuZGlmCi0gICAgcmV0dXJuIEludFJlY3QoKTsKLX0KLQotRmxvYXRSZWN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4OjptYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCAmcmVjdCkgY29uc3QKLXsKLSNpZiBV
U0UoV1hHQykKLSAgICBkb3VibGUgeCwgeSwgd2lkdGgsIGhlaWdodDsKLSAgICB4ID0gcmVjdC54
KCk7Ci0gICAgeSA9IHJlY3QueSgpOwotICAgIHdpZHRoID0gcmVjdC53aWR0aCgpOwotICAgIGhl
aWdodCA9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgCi0gICAgbV90cmFuc2Zvcm0uVHJhbnNmb3JtUG9p
bnQoJngsICZ5KTsKLSAgICBtX3RyYW5zZm9ybS5UcmFuc2Zvcm1EaXN0YW5jZSgmd2lkdGgsICZo
ZWlnaHQpOwotICAgIHJldHVybiBGbG9hdFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0jZW5k
aWYKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci19Ci0KLQotVHJhbnNmb3JtYXRpb25NYXRyaXgm
IFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzY2FsZShkb3VibGUgc3gsIGRvdWJsZSBzeSkgCi17Ci0j
aWYgVVNFKFdYR0MpCi0gICAgbV90cmFuc2Zvcm0uU2NhbGUoKHd4RG91YmxlKXN4LCAod3hEb3Vi
bGUpc3kpOyAKLSNlbmRpZgotICAgIHJldHVybiAqdGhpczsgCi19Ci0KLXZvaWQgVHJhbnNmb3Jt
YXRpb25NYXRyaXg6OnJlc2V0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1UcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJvdGF0ZShkb3VibGUgZCkg
Ci17IAotI2lmIFVTRShXWEdDKQotICAgIG1fdHJhbnNmb3JtLlJvdGF0ZSgod3hEb3VibGUpZCk7
IAotI2VuZGlmCi0gICAgcmV0dXJuICp0aGlzOyAKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRyaXgm
IFRyYW5zZm9ybWF0aW9uTWF0cml4Ojp0cmFuc2xhdGUoZG91YmxlIHR4LCBkb3VibGUgdHkpIAot
eyAKLSNpZiBVU0UoV1hHQykKLSAgICBtX3RyYW5zZm9ybS5UcmFuc2xhdGUoKHd4RG91YmxlKXR4
LCAod3hEb3VibGUpdHkpOyAKLSNlbmRpZgotICAgIHJldHVybiAqdGhpczsgCi19Ci0KLVRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2hlYXIoZG91YmxlIHN4LCBk
b3VibGUgc3kpIAoteyAKLSAgICBub3RJbXBsZW1lbnRlZCgpOyAKLSAgICByZXR1cm4gKnRoaXM7
IAotfQotCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCYgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om9wZXJh
dG9yKj0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG90aGVyKSAKLXsgCi0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gKnRoaXM7IAotfQotCi1ib29sIFRyYW5zZm9ybWF0aW9u
TWF0cml4OjpvcGVyYXRvcj09IChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCAmb3RoZXIpIGNv
bnN0Ci17Ci0jaWYgVVNFKFdYR0MpCi0gICAgcmV0dXJuIG1fdHJhbnNmb3JtLklzRXF1YWwoKHd4
R3JhcGhpY3NNYXRyaXgpb3RoZXIpOwotI2Vsc2UKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiB0cnVlOwotI2VuZGlmCi19Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4IFRyYW5zZm9y
bWF0aW9uTWF0cml4OjpvcGVyYXRvciogKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4ICZvdGhl
cikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAqdGhpczsgLy9tX3RyYW5z
Zm9ybSAqIG90aGVyLm1fdHJhbnNmb3JtOwotfQotCi1kb3VibGUgVHJhbnNmb3JtYXRpb25NYXRy
aXg6OmRldCgpIGNvbnN0IAoteyAKLSAgICBub3RJbXBsZW1lbnRlZCgpOyAKLSAgICByZXR1cm4g
MDsKLX0KLQotI2lmIFVTRShXWEdDKQotVHJhbnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yIHd4
R3JhcGhpY3NNYXRyaXgoKSBjb25zdAotewotICAgIHJldHVybiBtX3RyYW5zZm9ybTsKLX0KLSNl
bmRpZgotCi1kb3VibGUgVHJhbnNmb3JtYXRpb25NYXRyaXg6OmEoKSBjb25zdAotewotICAgIGRv
dWJsZSBhID0gMDsKLSNpZiBVU0UoV1hHQykKLSAgICBtX3RyYW5zZm9ybS5HZXQoJmEpOwotI2Vu
ZGlmCi0gICAgcmV0dXJuIGE7Ci19Ci0KLXZvaWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldEEo
ZG91YmxlIGEpCi17Ci0gICAgc2V0TWF0cml4KGEsIGIoKSwgYygpLCBkKCksIGUoKSwgZigpKTsK
LX0KLQotZG91YmxlIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpiKCkgY29uc3QKLXsKLSAgICBkb3Vi
bGUgYiA9IDA7Ci0jaWYgVVNFKFdYR0MpCi0gICAgbV90cmFuc2Zvcm0uR2V0KCZiKTsKLSNlbmRp
ZgotICAgIHJldHVybiBiOwotfQotCi12b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRCKGRv
dWJsZSBiKQotewotICAgIHNldE1hdHJpeChhKCksIGIsIGMoKSwgZCgpLCBlKCksIGYoKSk7Ci19
Ci0KLWRvdWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6YygpIGNvbnN0Ci17Ci0gICAgZG91Ymxl
IGMgPSAwOwotI2lmIFVTRShXWEdDKQotICAgIG1fdHJhbnNmb3JtLkdldCgmYyk7Ci0jZW5kaWYK
LSAgICByZXR1cm4gYzsKLX0KLQotdm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0Qyhkb3Vi
bGUgYykKLXsKLSAgICBzZXRNYXRyaXgoYSgpLCBiKCksIGMsIGQoKSwgZSgpLCBmKCkpOwotfQot
Ci1kb3VibGUgVHJhbnNmb3JtYXRpb25NYXRyaXg6OmQoKSBjb25zdAotewotICAgIGRvdWJsZSBk
ID0gMDsKLSNpZiBVU0UoV1hHQykKLSAgICBtX3RyYW5zZm9ybS5HZXQoJmQpOwotI2VuZGlmCi0g
ICAgcmV0dXJuIGQ7Ci19Ci0KLXZvaWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldEQoZG91Ymxl
IGQpCi17Ci0gICAgc2V0TWF0cml4KGEoKSwgYigpLCBjKCksIGQsIGUoKSwgZigpKTsKLX0KLQot
ZG91YmxlIFRyYW5zZm9ybWF0aW9uTWF0cml4OjplKCkgY29uc3QKLXsKLSAgICBkb3VibGUgZSA9
IDA7Ci0jaWYgVVNFKFdYR0MpCi0gICAgbV90cmFuc2Zvcm0uR2V0KCZlKTsKLSNlbmRpZgotICAg
IHJldHVybiBlOwotfQotCi12b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRFKGRvdWJsZSBl
KSAKLXsKLSAgICBzZXRNYXRyaXgoYSgpLCBiKCksIGMoKSwgZCgpLCBlLCBmKCkpOwotfQotCi1k
b3VibGUgVHJhbnNmb3JtYXRpb25NYXRyaXg6OmYoKSBjb25zdAotewotICAgIGRvdWJsZSBmID0g
MDsKLSNpZiBVU0UoV1hHQykKLSAgICBtX3RyYW5zZm9ybS5HZXQoJmYpOwotI2VuZGlmCi0gICAg
cmV0dXJuIGY7Ci19Ci0KLXZvaWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldEYoZG91YmxlIGYp
Ci17Ci0gICAgc2V0TWF0cml4KGEoKSwgYigpLCBjKCksIGQoKSwgZSgpLCBmKTsKLX0KLQotfQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFd4
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L1RyYW5zZm9y
bWF0aW9uTWF0cml4V3guY3BwCShyZXZpc2lvbiAzOTY2NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd3gvVHJhbnNmb3JtYXRpb25NYXRyaXhXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgpAQCAtNDYsMTkgKzQ2LDE5IEBACiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6VHJhbnNmb3JtYXRp
b25NYXRyaXgoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBl
LCBkb3VibGUgZikKIHsKICNpZiBVU0UoV1hHQykKLSAgICB3eEdyYXBoaWNzUmVuZGVyZXIqIHJl
bmRlcmVyID0gd3hHcmFwaGljc1JlbmRlcmVyOjpHZXREZWZhdWx0UmVuZGVyZXIoKTsgCisgICAg
d3hHcmFwaGljc1JlbmRlcmVyKiByZW5kZXJlciA9IHd4R3JhcGhpY3NSZW5kZXJlcjo6R2V0RGVm
YXVsdFJlbmRlcmVyKCk7CiAgICAgbV90cmFuc2Zvcm0gPSByZW5kZXJlci0+Q3JlYXRlTWF0cml4
KCk7CiAjZW5kaWYKICAgICBzZXRNYXRyaXgoYSwgYiwgYywgZCwgZSwgZik7CiB9CiAKLVRyYW5z
Zm9ybWF0aW9uTWF0cml4OjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpIAoteyAKK1RyYW5zZm9ybWF0
aW9uTWF0cml4OjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpCit7CiAgICAgLy8gTkI6IElmIHdlIGV2
ZXIgc3VwcG9ydCB1c2luZyBDYWlybyBiYWNrZW5kIG9uIFdpbi9NYWMsIHRoaXMgd2lsbCBuZWVk
IHRvIGJlCiAgICAgLy8gY2hhbmdlZCBzb21laG93ICh0aG91Z2ggSSdtIG5vdCBzdXJlIGhvdyBh
cyB3ZSBkb24ndCBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZQogICAgIC8vIGdyYXBoaWNzIGNvbnRl
eHQgaGVyZS4KICNpZiBVU0UoV1hHQykKLSAgICB3eEdyYXBoaWNzUmVuZGVyZXIqIHJlbmRlcmVy
ID0gd3hHcmFwaGljc1JlbmRlcmVyOjpHZXREZWZhdWx0UmVuZGVyZXIoKTsgCisgICAgd3hHcmFw
aGljc1JlbmRlcmVyKiByZW5kZXJlciA9IHd4R3JhcGhpY3NSZW5kZXJlcjo6R2V0RGVmYXVsdFJl
bmRlcmVyKCk7CiAgICAgbV90cmFuc2Zvcm0gPSByZW5kZXJlci0+Q3JlYXRlTWF0cml4KCk7CiAj
ZW5kaWYKIH0KQEAgLTc2LDggKzc2LDggQEAKICNlbmRpZgogfQogCi12b2lkIFRyYW5zZm9ybWF0
aW9uTWF0cml4OjptYXAoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgKngyLCBkb3VibGUgKnky
KSBjb25zdCAKLXsgCit2b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXAoZG91YmxlIHgsIGRv
dWJsZSB5LCBkb3VibGUgKngyLCBkb3VibGUgKnkyKSBjb25zdAorewogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKQEAgLTg5LDcgKzg5LDcgQEAKICAgICB5ID0gcmVjdC55KCk7CiAgICAgd2lk
dGggPSByZWN0LndpZHRoKCk7CiAgICAgaGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKLSAgICAKKwog
ICAgIG1fdHJhbnNmb3JtLlRyYW5zZm9ybVBvaW50KCZ4LCAmeSk7CiAgICAgbV90cmFuc2Zvcm0u
VHJhbnNmb3JtRGlzdGFuY2UoJndpZHRoLCAmaGVpZ2h0KTsKICAgICByZXR1cm4gSW50UmVjdCh4
LCB5LCB3aWR0aCwgaGVpZ2h0KTsKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgIHkgPSByZWN0Lnko
KTsKICAgICB3aWR0aCA9IHJlY3Qud2lkdGgoKTsKICAgICBoZWlnaHQgPSByZWN0LmhlaWdodCgp
OwotICAgIAorCiAgICAgbV90cmFuc2Zvcm0uVHJhbnNmb3JtUG9pbnQoJngsICZ5KTsKICAgICBt
X3RyYW5zZm9ybS5UcmFuc2Zvcm1EaXN0YW5jZSgmd2lkdGgsICZoZWlnaHQpOwogICAgIHJldHVy
biBGbG9hdFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CkBAIC0xMTQsMTIgKzExNCwxMiBAQAog
fQogCiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4JiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2NhbGUo
ZG91YmxlIHN4LCBkb3VibGUgc3kpIAorVHJhbnNmb3JtYXRpb25NYXRyaXgmIFRyYW5zZm9ybWF0
aW9uTWF0cml4OjpzY2FsZShkb3VibGUgc3gsIGRvdWJsZSBzeSkKIHsKICNpZiBVU0UoV1hHQykK
LSAgICBtX3RyYW5zZm9ybS5TY2FsZSgod3hEb3VibGUpc3gsICh3eERvdWJsZSlzeSk7IAorICAg
IG1fdHJhbnNmb3JtLlNjYWxlKCh3eERvdWJsZSlzeCwgKHd4RG91YmxlKXN5KTsKICNlbmRpZgot
ICAgIHJldHVybiAqdGhpczsgCisgICAgcmV0dXJuICp0aGlzOwogfQogCiB2b2lkIFRyYW5zZm9y
bWF0aW9uTWF0cml4OjpyZXNldCgpCkBAIC0xMjcsMzIgKzEyNywzMiBAQAogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4JiBUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6cm90YXRlKGRvdWJsZSBkKSAKLXsgCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgVHJhbnNmb3Jt
YXRpb25NYXRyaXg6OnJvdGF0ZShkb3VibGUgZCkKK3sKICNpZiBVU0UoV1hHQykKLSAgICBtX3Ry
YW5zZm9ybS5Sb3RhdGUoKHd4RG91YmxlKWQpOyAKKyAgICBtX3RyYW5zZm9ybS5Sb3RhdGUoKHd4
RG91YmxlKWQpOwogI2VuZGlmCi0gICAgcmV0dXJuICp0aGlzOyAKKyAgICByZXR1cm4gKnRoaXM7
CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4JiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6dHJhbnNs
YXRlKGRvdWJsZSB0eCwgZG91YmxlIHR5KSAKLXsgCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgVHJh
bnNmb3JtYXRpb25NYXRyaXg6OnRyYW5zbGF0ZShkb3VibGUgdHgsIGRvdWJsZSB0eSkKK3sKICNp
ZiBVU0UoV1hHQykKLSAgICBtX3RyYW5zZm9ybS5UcmFuc2xhdGUoKHd4RG91YmxlKXR4LCAod3hE
b3VibGUpdHkpOyAKKyAgICBtX3RyYW5zZm9ybS5UcmFuc2xhdGUoKHd4RG91YmxlKXR4LCAod3hE
b3VibGUpdHkpOwogI2VuZGlmCi0gICAgcmV0dXJuICp0aGlzOyAKKyAgICByZXR1cm4gKnRoaXM7
CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4JiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2hlYXIo
ZG91YmxlIHN4LCBkb3VibGUgc3kpIAoteyAKLSAgICBub3RJbXBsZW1lbnRlZCgpOyAKLSAgICBy
ZXR1cm4gKnRoaXM7IAorVHJhbnNmb3JtYXRpb25NYXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0cml4
OjpzaGVhcihkb3VibGUgc3gsIGRvdWJsZSBzeSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiAqdGhpczsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXgmIFRyYW5zZm9ybWF0
aW9uTWF0cml4OjpvcGVyYXRvcio9KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBvdGhlcikg
Ci17IAorVHJhbnNmb3JtYXRpb25NYXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRv
cio9KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBvdGhlcikKK3sKICAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiAqdGhpczsgCisgICAgcmV0dXJuICp0aGlzOwogfQogCiBib29s
IFRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvcj09IChjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCAmb3RoZXIpIGNvbnN0CkBAIC0xNzEsOSArMTcxLDkgQEAKICAgICByZXR1cm4gKnRoaXM7
IC8vbV90cmFuc2Zvcm0gKiBvdGhlci5tX3RyYW5zZm9ybTsKIH0KIAotZG91YmxlIFRyYW5zZm9y
bWF0aW9uTWF0cml4OjpkZXQoKSBjb25zdCAKLXsgCi0gICAgbm90SW1wbGVtZW50ZWQoKTsgCitk
b3VibGUgVHJhbnNmb3JtYXRpb25NYXRyaXg6OmRldCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMjQ5LDcgKzI0OSw3IEBACiAgICAgcmV0
dXJuIGU7CiB9CiAKLXZvaWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldEUoZG91YmxlIGUpIAor
dm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0RShkb3VibGUgZSkKIHsKICAgICBzZXRNYXRy
aXgoYSgpLCBiKCksIGMoKSwgZCgpLCBlLCBmKCkpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0
cml4LmgJKHJldmlzaW9uIDM5NjY1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIw
LDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBUcmFuc2Zvcm1hdGlvbk1hdHJp
eF9oCkBAIC05OSw4ICs5OSw4IEBACiAgICAgdm9pZCByZXNldCgpOwogCiAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG11bHRpcGx5KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0gICAg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHNjYWxlKGRvdWJsZSk7IAotICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBzY2FsZShkb3VibGUgc3gsIGRvdWJsZSBzeSk7IAorICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBzY2FsZShkb3VibGUpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzY2FsZShk
b3VibGUgc3gsIGRvdWJsZSBzeSk7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHNjYWxlTm9u
VW5pZm9ybShkb3VibGUgc3gsIGRvdWJsZSBzeSk7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHJvdGF0ZShkb3VibGUgZCk7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHJvdGF0ZUZyb21W
ZWN0b3IoZG91YmxlIHgsIGRvdWJsZSB5KTsKQEAgLTExMSw3ICsxMTEsNyBAQAogICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBza2V3KGRvdWJsZSBhbmdsZVgsIGRvdWJsZSBhbmdsZVkpOwogICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBza2V3WChkb3VibGUgYW5nbGUpOwogICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBza2V3WShkb3VibGUgYW5nbGUpOwotIAorCiAgICAgZG91YmxlIGRldCgp
IGNvbnN0OwogICAgIGJvb2wgaXNJbnZlcnRpYmxlKCkgY29uc3Q7CiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggaW52ZXJzZSgpIGNvbnN0OwpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBvdGhlcikgY29uc3QgeyByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgb3BlcmF0
b3IqPShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IG9wZXJhdG9yKihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwotICAgIAorCiBwcml2
YXRlOgogI2lmICFQTEFURk9STShXWCkgfHwgVVNFKFdYR0MpCiAgICAgUGxhdGZvcm1UcmFuc2Zv
cm1hdGlvbk1hdHJpeCBtX3RyYW5zZm9ybTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNw
cAkocmV2aXNpb24gMzk2NjUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4
LDcgQEAKIHsKICAgICBkb3VibGUgeDIsIHkyOwogICAgIG1hcChwb2ludC54KCksIHBvaW50Lnko
KSwgJngyLCAmeTIpOwotICAgIAorCiAgICAgLy8gUm91bmQgdGhlIHBvaW50LgogICAgIHJldHVy
biBJbnRQb2ludChscm91bmQoeDIpLCBscm91bmQoeTIpKTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQWZmaW5lVHJhbnNmb3JtQ2Fpcm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQWZmaW5lVHJhbnNmb3JtQ2Fpcm8u
Y3BwCShyZXZpc2lvbiAzOTY2NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
QWZmaW5lVHJhbnNmb3JtQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI4MSArMCwwIEBA
Ci0vKgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlv
bk1hdHJpeC5oIgotCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgotCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMg
Y29uc3QgZG91YmxlIGRlZzJyYWQgPSAwLjAxNzQ1MzI5MjUxOTk0MzI5NTc2OTsgLy8gcGkvMTgw
Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4OjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpCi17Ci0gICAg
Y2Fpcm9fbWF0cml4X2luaXRfaWRlbnRpdHkoJm1fdHJhbnNmb3JtKTsKLX0KLQotVHJhbnNmb3Jt
YXRpb25NYXRyaXg6OlRyYW5zZm9ybWF0aW9uTWF0cml4KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91
YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgdHgsIGRvdWJsZSB0eSkKLXsKLSAgICBjYWlyb19tYXRy
aXhfaW5pdCgmbV90cmFuc2Zvcm0sIGEsIGIsIGMsIGQsIHR4LCB0eSk7Ci19Ci0KLVRyYW5zZm9y
bWF0aW9uTWF0cml4OjpUcmFuc2Zvcm1hdGlvbk1hdHJpeChjb25zdCBQbGF0Zm9ybVRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtYXRyaXgpCi17Ci0gICAgbV90cmFuc2Zvcm0gPSBtYXRyaXg7Ci19Ci0K
LXZvaWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE1hdHJpeChkb3VibGUgYSwgZG91YmxlIGIs
IGRvdWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIHR4LCBkb3VibGUgdHkpCi17Ci0gICAgY2Fpcm9f
bWF0cml4X2luaXQoJm1fdHJhbnNmb3JtLCBhLCBiLCBjLCBkLCB0eCwgdHkpOwotfQotCi12b2lk
IFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXAoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUqIHgy
LCBkb3VibGUqIHkyKSBjb25zdAotewotICAgICp4MiA9IHg7Ci0gICAgKnkyID0geTsKLSAgICBj
YWlyb19tYXRyaXhfdHJhbnNmb3JtX3BvaW50KCZtX3RyYW5zZm9ybSwgeDIsIHkyKTsKLX0KLQot
SW50UmVjdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUmVjdChjb25zdCBJbnRSZWN0ICZyZWN0
KSBjb25zdAotewotICAgIEZsb2F0UmVjdCBmbG9hdFJlY3QocmVjdCk7Ci0gICAgRmxvYXRSZWN0
IGVuY2xvc2luZ0Zsb2F0UmVjdCA9IHRoaXMtPm1hcFJlY3QoZmxvYXRSZWN0KTsKLQotICAgIHJl
dHVybiBlbmNsb3NpbmdJbnRSZWN0KGVuY2xvc2luZ0Zsb2F0UmVjdCk7Ci19Ci0KLUZsb2F0UmVj
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUmVjdChjb25zdCBGbG9hdFJlY3QgJnJlY3QpIGNv
bnN0Ci17Ci0gICAgZG91YmxlIHJlY3RNaW5YID0gcmVjdC54KCk7Ci0gICAgZG91YmxlIHJlY3RN
YXhYID0gcmVjdC54KCkgKyByZWN0LndpZHRoKCk7Ci0gICAgZG91YmxlIHJlY3RNaW5ZID0gcmVj
dC55KCk7Ci0gICAgZG91YmxlIHJlY3RNYXhZID0gcmVjdC55KCkgKyByZWN0LmhlaWdodCgpOwot
Ci0gICAgZG91YmxlIHB4ID0gcmVjdE1pblg7Ci0gICAgZG91YmxlIHB5ID0gcmVjdE1pblk7Ci0g
ICAgY2Fpcm9fbWF0cml4X3RyYW5zZm9ybV9wb2ludCgmbV90cmFuc2Zvcm0sICZweCwgJnB5KTsK
LQotICAgIGRvdWJsZSBlbmNsb3NpbmdSZWN0TWluWCA9IHB4OwotICAgIGRvdWJsZSBlbmNsb3Np
bmdSZWN0TWluWSA9IHB5OwotICAgIGRvdWJsZSBlbmNsb3NpbmdSZWN0TWF4WCA9IHB4OwotICAg
IGRvdWJsZSBlbmNsb3NpbmdSZWN0TWF4WSA9IHB5OwotCi0gICAgcHggPSByZWN0TWF4WDsKLSAg
ICBweSA9IHJlY3RNaW5ZOwotICAgIGNhaXJvX21hdHJpeF90cmFuc2Zvcm1fcG9pbnQoJm1fdHJh
bnNmb3JtLCAmcHgsICZweSk7Ci0gICAgaWYgKHB4IDwgZW5jbG9zaW5nUmVjdE1pblgpCi0gICAg
ICAgIGVuY2xvc2luZ1JlY3RNaW5YID0gcHg7Ci0gICAgZWxzZSBpZiAocHggPiBlbmNsb3NpbmdS
ZWN0TWF4WCkKLSAgICAgICAgZW5jbG9zaW5nUmVjdE1heFggPSBweDsKLSAgICBpZiAocHkgPCBl
bmNsb3NpbmdSZWN0TWluWSkKLSAgICAgICAgZW5jbG9zaW5nUmVjdE1pblkgPSBweTsKLSAgICBl
bHNlIGlmIChweSA+IGVuY2xvc2luZ1JlY3RNYXhZKQotICAgICAgICBlbmNsb3NpbmdSZWN0TWF4
WSA9IHB5OwotCi0gICAgcHggPSByZWN0TWF4WDsKLSAgICBweSA9IHJlY3RNYXhZOwotICAgIGNh
aXJvX21hdHJpeF90cmFuc2Zvcm1fcG9pbnQoJm1fdHJhbnNmb3JtLCAmcHgsICZweSk7Ci0gICAg
aWYgKHB4IDwgZW5jbG9zaW5nUmVjdE1pblgpCi0gICAgICAgIGVuY2xvc2luZ1JlY3RNaW5YID0g
cHg7Ci0gICAgZWxzZSBpZiAocHggPiBlbmNsb3NpbmdSZWN0TWF4WCkKLSAgICAgICAgZW5jbG9z
aW5nUmVjdE1heFggPSBweDsKLSAgICBpZiAocHkgPCBlbmNsb3NpbmdSZWN0TWluWSkKLSAgICAg
ICAgZW5jbG9zaW5nUmVjdE1pblkgPSBweTsKLSAgICBlbHNlIGlmIChweSA+IGVuY2xvc2luZ1Jl
Y3RNYXhZKQotICAgICAgICBlbmNsb3NpbmdSZWN0TWF4WSA9IHB5OwotCi0gICAgcHggPSByZWN0
TWluWDsKLSAgICBweSA9IHJlY3RNYXhZOwotICAgIGNhaXJvX21hdHJpeF90cmFuc2Zvcm1fcG9p
bnQoJm1fdHJhbnNmb3JtLCAmcHgsICZweSk7Ci0gICAgaWYgKHB4IDwgZW5jbG9zaW5nUmVjdE1p
blgpCi0gICAgICAgIGVuY2xvc2luZ1JlY3RNaW5YID0gcHg7Ci0gICAgZWxzZSBpZiAocHggPiBl
bmNsb3NpbmdSZWN0TWF4WCkKLSAgICAgICAgZW5jbG9zaW5nUmVjdE1heFggPSBweDsKLSAgICBp
ZiAocHkgPCBlbmNsb3NpbmdSZWN0TWluWSkKLSAgICAgICAgZW5jbG9zaW5nUmVjdE1pblkgPSBw
eTsKLSAgICBlbHNlIGlmIChweSA+IGVuY2xvc2luZ1JlY3RNYXhZKQotICAgICAgICBlbmNsb3Np
bmdSZWN0TWF4WSA9IHB5OwotCi0KLSAgICBkb3VibGUgZW5jbG9zaW5nUmVjdFdpZHRoID0gZW5j
bG9zaW5nUmVjdE1heFggLSBlbmNsb3NpbmdSZWN0TWluWDsKLSAgICBkb3VibGUgZW5jbG9zaW5n
UmVjdEhlaWdodCA9IGVuY2xvc2luZ1JlY3RNYXhZIC0gZW5jbG9zaW5nUmVjdE1pblk7Ci0KLSAg
ICByZXR1cm4gRmxvYXRSZWN0KGVuY2xvc2luZ1JlY3RNaW5YLCBlbmNsb3NpbmdSZWN0TWluWSwg
ZW5jbG9zaW5nUmVjdFdpZHRoLCBlbmNsb3NpbmdSZWN0SGVpZ2h0KTsKLX0KLQotYm9vbCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6aXNJZGVudGl0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICgobV90
cmFuc2Zvcm0ueHggPT0gMSkgJiYgKG1fdHJhbnNmb3JtLnl5ID09IDEpCi0gICAgICAgICAmJiAo
bV90cmFuc2Zvcm0ueHkgPT0gMCkgJiYgKG1fdHJhbnNmb3JtLnl4ID09IDApCi0gICAgICAgICAm
JiAobV90cmFuc2Zvcm0ueDAgPT0gMCkgJiYgKG1fdHJhbnNmb3JtLnkwID09IDApKTsKLX0KLQot
ZG91YmxlIFRyYW5zZm9ybWF0aW9uTWF0cml4OjphKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90
cmFuc2Zvcm0ueHg7Ci19Ci0KLXZvaWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldEEoZG91Ymxl
IGEpCi17Ci0gICAgbV90cmFuc2Zvcm0ueHggPSBhOwotfQotCi1kb3VibGUgVHJhbnNmb3JtYXRp
b25NYXRyaXg6OmIoKSBjb25zdAotewotICAgIHJldHVybiBtX3RyYW5zZm9ybS55eDsKLX0KLQot
dm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0Qihkb3VibGUgYikKLXsKLSAgICBtX3RyYW5z
Zm9ybS55eCA9IGI7Ci19Ci0KLWRvdWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6YygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fdHJhbnNmb3JtLnh5OwotfQotCi12b2lkIFRyYW5zZm9ybWF0aW9u
TWF0cml4OjpzZXRDKGRvdWJsZSBjKQotewotICAgIG1fdHJhbnNmb3JtLnh5ID0gYzsKLX0KLQot
ZG91YmxlIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90
cmFuc2Zvcm0ueXk7Ci19Ci0KLXZvaWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldEQoZG91Ymxl
IGQpCi17Ci0gICAgbV90cmFuc2Zvcm0ueXkgPSBkOwotfQotCi1kb3VibGUgVHJhbnNmb3JtYXRp
b25NYXRyaXg6OmUoKSBjb25zdAotewotICAgIHJldHVybiBtX3RyYW5zZm9ybS54MDsKLX0KLQot
dm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0RShkb3VibGUgZSkKLXsKLSAgICBtX3RyYW5z
Zm9ybS54MCA9IGU7Ci19Ci0KLWRvdWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6ZigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fdHJhbnNmb3JtLnkwOwotfQotCi12b2lkIFRyYW5zZm9ybWF0aW9u
TWF0cml4OjpzZXRGKGRvdWJsZSBmKQotewotICAgIG1fdHJhbnNmb3JtLnkwID0gZjsKLX0KLQot
dm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVzZXQoKQotewotICAgIGNhaXJvX21hdHJpeF9p
bml0X2lkZW50aXR5KCZtX3RyYW5zZm9ybSk7Ci19Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4ICZU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2NhbGUoZG91YmxlIHN4LCBkb3VibGUgc3kpCi17Ci0gICAg
Y2Fpcm9fbWF0cml4X3NjYWxlKCZtX3RyYW5zZm9ybSwgc3gsIHN5KTsKLSAgICByZXR1cm4gKnRo
aXM7Ci19Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4ICZUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cm90
YXRlKGRvdWJsZSBkKQotewotICAgIGNhaXJvX21hdHJpeF9yb3RhdGUoJm1fdHJhbnNmb3JtLCBk
ICogZGVnMnJhZCk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1UcmFuc2Zvcm1hdGlvbk1hdHJp
eCAmVHJhbnNmb3JtYXRpb25NYXRyaXg6OnRyYW5zbGF0ZShkb3VibGUgdHgsIGRvdWJsZSB0eSkK
LXsKLSAgICBjYWlyb19tYXRyaXhfdHJhbnNsYXRlKCZtX3RyYW5zZm9ybSwgdHgsIHR5KTsKLSAg
ICByZXR1cm4gKnRoaXM7Ci19Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4ICZUcmFuc2Zvcm1hdGlv
bk1hdHJpeDo6c2hlYXIoZG91YmxlIHN4LCBkb3VibGUgc3kpCi17Ci0gICAgY2Fpcm9fbWF0cml4
X3Qgc2hlYXI7Ci0gICAgY2Fpcm9fbWF0cml4X2luaXQoJnNoZWFyLCAxLCBzeSwgc3gsIDEsIDAs
IDApOwotCi0gICAgY2Fpcm9fbWF0cml4X3QgcmVzdWx0OwotICAgIGNhaXJvX21hdHJpeF9tdWx0
aXBseSgmcmVzdWx0LCAmc2hlYXIsICZtX3RyYW5zZm9ybSk7Ci0gICAgbV90cmFuc2Zvcm0gPSBy
ZXN1bHQ7Ci0KLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLWRvdWJsZSBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6ZGV0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90cmFuc2Zvcm0ueHggKiBtX3RyYW5z
Zm9ybS55eSAtIG1fdHJhbnNmb3JtLnh5ICogbV90cmFuc2Zvcm0ueXg7Ci19Ci0KLVRyYW5zZm9y
bWF0aW9uTWF0cml4IFRyYW5zZm9ybWF0aW9uTWF0cml4OjppbnZlcnNlKCkgY29uc3QKLXsKLSAg
ICBpZiAoIWlzSW52ZXJ0aWJsZSgpKSByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKLQot
ICAgIGNhaXJvX21hdHJpeF90IHJlc3VsdCA9IG1fdHJhbnNmb3JtOwotICAgIGNhaXJvX21hdHJp
eF9pbnZlcnQoJnJlc3VsdCk7Ci0gICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4KHJlc3Vs
dCk7Ci19Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvciBjYWlyb19tYXRyaXhfdCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdHJhbnNmb3JtOwotfQotCi1ib29sIFRyYW5zZm9ybWF0
aW9uTWF0cml4OjpvcGVyYXRvcj09IChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCAmbTIpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuICgobV90cmFuc2Zvcm0ueHggPT0gbTIubV90cmFuc2Zvcm0ueHgp
Ci0gICAgICAgICAmJiAobV90cmFuc2Zvcm0ueXkgPT0gbTIubV90cmFuc2Zvcm0ueXkpCi0gICAg
ICAgICAmJiAobV90cmFuc2Zvcm0ueHkgPT0gbTIubV90cmFuc2Zvcm0ueHkpCi0gICAgICAgICAm
JiAobV90cmFuc2Zvcm0ueXggPT0gbTIubV90cmFuc2Zvcm0ueXgpCi0gICAgICAgICAmJiAobV90
cmFuc2Zvcm0ueDAgPT0gbTIubV90cmFuc2Zvcm0ueDApCi0gICAgICAgICAmJiAobV90cmFuc2Zv
cm0ueTAgPT0gbTIubV90cmFuc2Zvcm0ueTApKTsKLQotfQotCi1UcmFuc2Zvcm1hdGlvbk1hdHJp
eCAmVHJhbnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yKj0gKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4ICZtMikKLXsKLSAgICBjYWlyb19tYXRyaXhfdCByZXN1bHQ7Ci0gICAgY2Fpcm9fbWF0
cml4X211bHRpcGx5KCZyZXN1bHQsICZtX3RyYW5zZm9ybSwgJm0yLm1fdHJhbnNmb3JtKTsKLSAg
ICBtX3RyYW5zZm9ybSA9IHJlc3VsdDsKLQotICAgIHJldHVybiAqdGhpczsKLX0KLQotVHJhbnNm
b3JtYXRpb25NYXRyaXggVHJhbnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yKiAoY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXggJm0yKQotewotICAgIGNhaXJvX21hdHJpeF90IHJlc3VsdDsKLSAg
ICBjYWlyb19tYXRyaXhfbXVsdGlwbHkoJnJlc3VsdCwgJm1fdHJhbnNmb3JtLCAmbTIubV90cmFu
c2Zvcm0pOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLX0KLQotLy8gdmltOiB0cz00IHN3PTQg
ZXQKSW5kZXg6IFdlYkNvcmUvd2ViY29yZS13eC5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93
ZWJjb3JlLXd4LmJrbAkocmV2aXNpb24gMzk2NjUpCisrKyBXZWJDb3JlL3dlYmNvcmUtd3guYmts
CSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICBwYWdlL3d4L0Ry
YWdDb250cm9sbGVyV3guY3BwCiAgICAgICAgICAgICBwYWdlL3d4L0V2ZW50SGFuZGxlcld4LmNw
cAogICAgICAgICAgICAKLSAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0FmZmluZVRy
YW5zZm9ybVd4LmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvVHJhbnNmb3Jt
YXRpb25NYXRyaXhXeC5jcHAKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0NvbG9y
V3guY3BwCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93eC9GbG9hdFJlY3RXeC5jcHAK
ICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYWRpZW50V3guY3BwCkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzk2NjUp
CisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMzMwOCw3ICszMzA4LDcgQEAKIAkJQjI2NTU0RUIwQjgwRDc0OTAwQTUwRUMzIC8q
IFJlbmRlclNWR1RleHRQYXRoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMjY1NTRFOTBCODBENzQ5MDBBNTBFQzMgLyogUmVuZGVyU1ZHVGV4dFBhdGgu
aCAqLzsgfTsKIAkJQjI2NkNENEQwQzNBRUM2NTAwRUIwOEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNjZDRDRC
MEMzQUVDNjUwMEVCMDhEMiAvKiBKU1NWR0V4Y2VwdGlvbi5jcHAgKi87IH07CiAJCUIyNjZDRDRF
MEMzQUVDNjUwMEVCMDhEMiAvKiBKU1NWR0V4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI2NkNENEMwQzNBRUM2NTAwRUIwOEQyIC8qIEpT
U1ZHRXhjZXB0aW9uLmggKi87IH07Ci0JCUIyNzUzNTU4MEIwNTM4MTQwMDJDRTY0RiAvKiBBZmZp
bmVUcmFuc2Zvcm1DRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjc1MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogQWZmaW5lVHJhbnNmb3JtQ0cuY3Bw
ICovOyB9OworCQlCMjc1MzU1ODBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25NYXRy
aXhDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Mjc1MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAgKi87
IH07CiAJCUIyNzUzNTU5MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkIwQjA1Mzgx
NDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRDRy5jcHAgKi87IH07CiAJCUIyNzUzNTVBMEIwNTM4MTQw
MDJDRTY0RiAvKiBGbG9hdFJlY3RDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cu
Y3BwICovOyB9OwogCQlCMjc1MzU1QjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplQ0cuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkQw
QjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZUNHLmNwcCAqLzsgfTsKQEAgLTgwMDgsNyArODAw
OCw3IEBACiAJCUIyNjU1NEU5MEI4MEQ3NDkwMEE1MEVDMyAvKiBSZW5kZXJTVkdUZXh0UGF0aC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHVGV4dFBhdGguaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI2NkNENEIwQzNBRUM2NTAwRUIwOEQyIC8q
IEpTU1ZHRXhjZXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1NWR0V4Y2VwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNjZD
RDRDMEMzQUVDNjUwMEVCMDhEMiAvKiBKU1NWR0V4Y2VwdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNTVkdFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQjI3NTM1MkEwQjA1MzgxNDAwMkNFNjRGIC8qIEFmZmluZVRyYW5zZm9ybUNHLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBZmZpbmVUcmFuc2Zvcm1D
Ry5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyNzUzNTJBMEIwNTM4MTQwMDJD
RTY0RiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRD
Ry5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmxvYXRQb2ludENH
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1MkMwQjA1MzgxNDAwMkNF
NjRGIC8qIEZsb2F0UmVjdENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGbG9hdFJlY3RDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUz
NTJEMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRmxvYXRTaXplQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTI4MjcsNyArMTI4MjcsNyBAQAogCQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2
NEYgLyogY2cgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJ
CUIyNzUzNTJBMEIwNTM4MTQwMDJDRTY0RiAvKiBBZmZpbmVUcmFuc2Zvcm1DRy5jcHAgKi8sCisJ
CQkJQjI3NTM1MkEwQjA1MzgxNDAwMkNFNjRGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3Bw
ICovLAogCQkJCUIyNzUzNTJCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwICov
LAogCQkJCUIyNzUzNTJDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RDRy5jcHAgKi8sCiAJ
CQkJQjI3NTM1MkQwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZUNHLmNwcCAqLywKQEAgLTE2
NzcyLDcgKzE2NzcyLDcgQEAKIAkJCQkyOTgwMEM5NjBFNTI0QzhCMDAwMjU1MzYgLyogQWNjZXNz
aWJpbGl0eVRhYmxlUm93LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQzRERTZFMEVBNzVDNjUw
MDIzQ0NENiAvKiBBY3RpdmVET01PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlFOTEx
QzMwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4LmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUIyNzUzNTU4MEIwNTM4MTQwMDJDRTY0RiAvKiBBZmZpbmVUcmFuc2Zvcm1DRy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlCMjc1MzU1ODBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNm
b3JtYXRpb25NYXRyaXhDRy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUU5MTJBQTBFRkFDOTA2
MDA5RDBDQUYgLyogQW5pbWF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxNkZFMTExMEU2
RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRpb25CYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMx
NkZFMTEzMEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRpb25Db250cm9sbGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26478</attachid>
            <date>2009-01-06 15:40:54 -0800</date>
            <delta_ts>2009-01-06 16:02:31 -0800</delta_ts>
            <desc>patch to finish renaming</desc>
            <filename>rename.patch</filename>
            <type>text/plain</type>
            <size>70138</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTY2NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMDktMDEtMDYgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpbmlz
aCByZW5hbWluZyBvZiBBZmZpbmVUcmFuc2Zvcm0gdG8gVHJhbnNmb3JtYXRpb25NYXRyaXgsIHRo
aXMKKyAgICAgICAgdGltZSBlbnN1cmluZyB0aGF0IHRoZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlv
bnMgZ2V0IHRoZSBjb3JyZWN0CisgICAgICAgIG5hbWUuIEFsc28sIGNsZWFuIHVwIHNvbWUgd2hp
dGVzcGFjZSBjcnVmdCBpbiBvbGQgY29udGVudC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFt
OgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUuc2NvbnM6CisgICAg
ICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0FmZmluZVRyYW5zZm9ybUNhaXJvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcDogQ29waWVkIGZy
b20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9BZmZpbmVUcmFuc2Zvcm1DYWlyby5j
cHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQWZmaW5lVHJhbnNmb3JtQ0cuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1RyYW5zZm9ybWF0aW9u
TWF0cml4Q0cuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Fm
ZmluZVRyYW5zZm9ybUNHLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9BZmZp
bmVUcmFuc2Zvcm1RdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvVHJhbnNmb3JtYXRpb25NYXRyaXhRdC5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvQWZmaW5lVHJhbnNmb3JtUXQuY3BwLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9BZmZpbmVUcmFuc2Zvcm1XeC5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvVHJhbnNmb3JtYXRpb25NYXRyaXhX
eC5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvQWZmaW5lVHJh
bnNmb3JtV3guY3BwLgorICAgICAgICAqIHdlYmNvcmUtd3guYmtsOgorCiAyMDA5LTAxLTA2ICBK
dWxpZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE5pa29sYXMgWmltbWVybWFubi4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMzk2NjUpCisr
KyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcwLDcgKzE2NzAs
NyBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGFnZS9ndGsvRHJhZ0NvbnRy
b2xsZXJHdGsuY3BwIFwKIAlXZWJDb3JlL3BhZ2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHAgXAog
CVdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0FmZmluZVRyYW5zZm9ybUNhaXJvLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1BhdGguaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gMzk2NjUpCisrKyBXZWJD
b3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcxLDcgKzEwNzEsNyBAQCBTT1VS
Q0VTICs9IFwKICAgICBwYWdlL3F0L0RyYWdDb250cm9sbGVyUXQuY3BwIFwKICAgICBwYWdlL3F0
L0V2ZW50SGFuZGxlclF0LmNwcCBcCiAgICAgcGFnZS9xdC9GcmFtZVF0LmNwcCBcCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvQWZmaW5lVHJhbnNmb3JtUXQuY3BwIFwKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvQ29sb3JRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5j
cHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdDQzLmNwcCBcCkluZGV4OiBXZWJD
b3JlL1dlYkNvcmUuc2NvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnNjb25zCShy
ZXZpc2lvbiAzOTY2NSkKKysrIFdlYkNvcmUvV2ViQ29yZS5zY29ucwkod29ya2luZyBjb3B5KQpA
QCAtODI5LDcgKzgyOSw3IEBAIGJ1aWxkaW5nX29uX3dpbjMyID0gZW52WydQTEFURk9STSddID09
ICcKIAogaWYgZW52WydQTEFURk9STSddID09ICdkYXJ3aW4nOgogICAgIHNvdXJjZXNbJ3BsYXRm
b3JtL2dyYXBoaWNzL2NnJ10gPSBbCi0gICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9BZmZp
bmVUcmFuc2Zvcm1DRy5jcHAnLAorICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvVHJhbnNm
b3JtYXRpb25NYXRyaXhDRy5jcHAnLAogICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29s
b3JDRy5jcHAnLAogICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQb2ludENHLmNw
cCcsCiAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAnLApJbmRl
eDogV2ViQ29yZS93ZWJjb3JlLXd4LmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dlYmNvcmUt
d3guYmtsCShyZXZpc2lvbiAzOTY2NSkKKysrIFdlYkNvcmUvd2ViY29yZS13eC5ia2wJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgd3hXZWJDb3JlIHBvcnQgQmFrZWZpbGUgcHJvamVj
dCBmaWxlLgogICAgICAgICAgICAgcGFnZS93eC9EcmFnQ29udHJvbGxlcld4LmNwcAogICAgICAg
ICAgICAgcGFnZS93eC9FdmVudEhhbmRsZXJXeC5jcHAKICAgICAgICAgICAgCi0gICAgICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93eC9BZmZpbmVUcmFuc2Zvcm1XeC5jcHAKKyAgICAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3d4L1RyYW5zZm9ybWF0aW9uTWF0cml4V3guY3BwCiAgICAgICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93eC9Db2xvcld4LmNwcAogICAgICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd3gvRmxvYXRSZWN0V3guY3BwCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy93eC9HcmFkaWVudFd4LmNwcApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCShyZXZpc2lvbiAzOTY2NSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ2MTIsNyArNDYxMiw3IEBACiAJCQkJCU5hbWU9
ImNnIg0KIAkJCQkJPg0KIAkJCQkJPEZpbGUNCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXGNnXEFmZmluZVRyYW5zZm9ybUNHLmNwcCINCisJCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXFRyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwIg0K
IAkJCQkJCT4NCiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCiAJCQkJCQkJTmFtZT0iRGVidWdf
Q2Fpcm98V2luMzIiDQpAQCAtNTAxNiw3ICs1MDE2LDcgQEAKIAkJCQkJTmFtZT0iY2Fpcm8iDQog
CQkJCQk+DQogCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcY2Fpcm9cQWZmaW5lVHJhbnNmb3JtQ2Fpcm8uY3BwIg0KKwkJCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2Fpcm9cVHJhbnNmb3JtYXRpb25NYXRyaXhDYWlyby5j
cHAiDQogCQkJCQkJPg0KIAkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KIAkJCQkJCQlOYW1lPSJE
ZWJ1Z3xXaW4zMiINCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMzk2NjUpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzMwOCw3ICszMzA4LDcgQEAKIAkJQjI2NTU0
RUIwQjgwRDc0OTAwQTUwRUMzIC8qIFJlbmRlclNWR1RleHRQYXRoLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjY1NTRFOTBCODBENzQ5MDBBNTBFQzMg
LyogUmVuZGVyU1ZHVGV4dFBhdGguaCAqLzsgfTsKIAkJQjI2NkNENEQwQzNBRUM2NTAwRUIwOEQy
IC8qIEpTU1ZHRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyNjZDRDRCMEMzQUVDNjUwMEVCMDhEMiAvKiBKU1NWR0V4Y2VwdGlvbi5j
cHAgKi87IH07CiAJCUIyNjZDRDRFMEMzQUVDNjUwMEVCMDhEMiAvKiBKU1NWR0V4Y2VwdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI2NkNENEMw
QzNBRUM2NTAwRUIwOEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmggKi87IH07Ci0JCUIyNzUzNTU4MEIw
NTM4MTQwMDJDRTY0RiAvKiBBZmZpbmVUcmFuc2Zvcm1DRy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyog
QWZmaW5lVHJhbnNmb3JtQ0cuY3BwICovOyB9OworCQlCMjc1MzU1ODBCMDUzODE0MDAyQ0U2NEYg
LyogVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3Jt
YXRpb25NYXRyaXhDRy5jcHAgKi87IH07CiAJCUIyNzUzNTU5MEIwNTM4MTQwMDJDRTY0RiAvKiBG
bG9hdFBvaW50Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRDRy5jcHAgKi87IH07
CiAJCUIyNzUzNTVBMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RDRy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUyQzBCMDUzODE0MDAy
Q0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovOyB9OwogCQlCMjc1MzU1QjBCMDUzODE0MDAyQ0U2
NEYgLyogRmxvYXRTaXplQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjI3NTM1MkQwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZUNHLmNwcCAq
LzsgfTsKQEAgLTgwMDgsNyArODAwOCw3IEBACiAJCUIyNjU1NEU5MEI4MEQ3NDkwMEE1MEVDMyAv
KiBSZW5kZXJTVkdUZXh0UGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyU1ZHVGV4dFBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI2NkNE
NEIwQzNBRUM2NTAwRUIwOEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0V4Y2VwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIyNjZDRDRDMEMzQUVDNjUwMEVCMDhEMiAvKiBKU1NWR0V4Y2VwdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTVkdFeGNlcHRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI3NTM1MkEwQjA1MzgxNDAwMkNFNjRGIC8q
IEFmZmluZVRyYW5zZm9ybUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBBZmZpbmVUcmFuc2Zvcm1DRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUIyNzUzNTJBMEIwNTM4MTQwMDJDRTY0RiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2Zvcm1hdGlvbk1hdHJp
eENHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1MkIwQjA1MzgxNDAw
MkNFNjRGIC8qIEZsb2F0UG9pbnRDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRmxvYXRQb2ludENHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENHLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFJlY3RDRy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIyNzUzNTJEMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVDRy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmxvYXRTaXplQ0cuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI4MjcsNyArMTI4MjcsNyBAQAogCQlC
Mjc1MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAotCQkJCUIyNzUzNTJBMEIwNTM4MTQwMDJDRTY0RiAvKiBBZmZpbmVU
cmFuc2Zvcm1DRy5jcHAgKi8sCisJCQkJQjI3NTM1MkEwQjA1MzgxNDAwMkNFNjRGIC8qIFRyYW5z
Zm9ybWF0aW9uTWF0cml4Q0cuY3BwICovLAogCQkJCUIyNzUzNTJCMEIwNTM4MTQwMDJDRTY0RiAv
KiBGbG9hdFBvaW50Q0cuY3BwICovLAogCQkJCUIyNzUzNTJDMEIwNTM4MTQwMDJDRTY0RiAvKiBG
bG9hdFJlY3RDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkQwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0
U2l6ZUNHLmNwcCAqLywKQEAgLTE2NzcyLDcgKzE2NzcyLDcgQEAKIAkJCQkyOTgwMEM5NjBFNTI0
QzhCMDAwMjU1MzYgLyogQWNjZXNzaWJpbGl0eVRhYmxlUm93LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUUxQzRERTZFMEVBNzVDNjUwMDIzQ0NENiAvKiBBY3RpdmVET01PYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDlFOTExQzMwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybWF0aW9u
TWF0cml4LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNzUzNTU4MEIwNTM4MTQwMDJDRTY0RiAv
KiBBZmZpbmVUcmFuc2Zvcm1DRy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMjc1MzU1ODBCMDUz
ODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk0OUU5MTJBQTBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTMxNkZFMTExMEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRpb25CYXNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTMxNkZFMTEzMEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRpb25D
b250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9BZmZpbmVUcmFuc2Zvcm1DYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9BZmZpbmVUcmFuc2Zvcm1DYWlyby5jcHAJKHJldmlz
aW9uIDM5NjY1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9BZmZpbmVUcmFu
c2Zvcm1DYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjgxICswLDAgQEAKLS8qCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4Lmgi
Ci0KLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0KLSNpbmNs
dWRlIDxjYWlyby5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBkb3Vi
bGUgZGVnMnJhZCA9IDAuMDE3NDUzMjkyNTE5OTQzMjk1NzY5OyAvLyBwaS8xODAKLQotVHJhbnNm
b3JtYXRpb25NYXRyaXg6OlRyYW5zZm9ybWF0aW9uTWF0cml4KCkKLXsKLSAgICBjYWlyb19tYXRy
aXhfaW5pdF9pZGVudGl0eSgmbV90cmFuc2Zvcm0pOwotfQotCi1UcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6VHJhbnNmb3JtYXRpb25NYXRyaXgoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91
YmxlIGQsIGRvdWJsZSB0eCwgZG91YmxlIHR5KQotewotICAgIGNhaXJvX21hdHJpeF9pbml0KCZt
X3RyYW5zZm9ybSwgYSwgYiwgYywgZCwgdHgsIHR5KTsKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRy
aXg6OlRyYW5zZm9ybWF0aW9uTWF0cml4KGNvbnN0IFBsYXRmb3JtVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1hdHJpeCkKLXsKLSAgICBtX3RyYW5zZm9ybSA9IG1hdHJpeDsKLX0KLQotdm9pZCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6c2V0TWF0cml4KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMs
IGRvdWJsZSBkLCBkb3VibGUgdHgsIGRvdWJsZSB0eSkKLXsKLSAgICBjYWlyb19tYXRyaXhfaW5p
dCgmbV90cmFuc2Zvcm0sIGEsIGIsIGMsIGQsIHR4LCB0eSk7Ci19Ci0KLXZvaWQgVHJhbnNmb3Jt
YXRpb25NYXRyaXg6Om1hcChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSogeDIsIGRvdWJsZSog
eTIpIGNvbnN0Ci17Ci0gICAgKngyID0geDsKLSAgICAqeTIgPSB5OwotICAgIGNhaXJvX21hdHJp
eF90cmFuc2Zvcm1fcG9pbnQoJm1fdHJhbnNmb3JtLCB4MiwgeTIpOwotfQotCi1JbnRSZWN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4OjptYXBSZWN0KGNvbnN0IEludFJlY3QgJnJlY3QpIGNvbnN0Ci17
Ci0gICAgRmxvYXRSZWN0IGZsb2F0UmVjdChyZWN0KTsKLSAgICBGbG9hdFJlY3QgZW5jbG9zaW5n
RmxvYXRSZWN0ID0gdGhpcy0+bWFwUmVjdChmbG9hdFJlY3QpOwotCi0gICAgcmV0dXJuIGVuY2xv
c2luZ0ludFJlY3QoZW5jbG9zaW5nRmxvYXRSZWN0KTsKLX0KLQotRmxvYXRSZWN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4OjptYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCAmcmVjdCkgY29uc3QKLXsKLSAg
ICBkb3VibGUgcmVjdE1pblggPSByZWN0LngoKTsKLSAgICBkb3VibGUgcmVjdE1heFggPSByZWN0
LngoKSArIHJlY3Qud2lkdGgoKTsKLSAgICBkb3VibGUgcmVjdE1pblkgPSByZWN0LnkoKTsKLSAg
ICBkb3VibGUgcmVjdE1heFkgPSByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCk7Ci0KLSAgICBkb3Vi
bGUgcHggPSByZWN0TWluWDsKLSAgICBkb3VibGUgcHkgPSByZWN0TWluWTsKLSAgICBjYWlyb19t
YXRyaXhfdHJhbnNmb3JtX3BvaW50KCZtX3RyYW5zZm9ybSwgJnB4LCAmcHkpOwotCi0gICAgZG91
YmxlIGVuY2xvc2luZ1JlY3RNaW5YID0gcHg7Ci0gICAgZG91YmxlIGVuY2xvc2luZ1JlY3RNaW5Z
ID0gcHk7Ci0gICAgZG91YmxlIGVuY2xvc2luZ1JlY3RNYXhYID0gcHg7Ci0gICAgZG91YmxlIGVu
Y2xvc2luZ1JlY3RNYXhZID0gcHk7Ci0KLSAgICBweCA9IHJlY3RNYXhYOwotICAgIHB5ID0gcmVj
dE1pblk7Ci0gICAgY2Fpcm9fbWF0cml4X3RyYW5zZm9ybV9wb2ludCgmbV90cmFuc2Zvcm0sICZw
eCwgJnB5KTsKLSAgICBpZiAocHggPCBlbmNsb3NpbmdSZWN0TWluWCkKLSAgICAgICAgZW5jbG9z
aW5nUmVjdE1pblggPSBweDsKLSAgICBlbHNlIGlmIChweCA+IGVuY2xvc2luZ1JlY3RNYXhYKQot
ICAgICAgICBlbmNsb3NpbmdSZWN0TWF4WCA9IHB4OwotICAgIGlmIChweSA8IGVuY2xvc2luZ1Jl
Y3RNaW5ZKQotICAgICAgICBlbmNsb3NpbmdSZWN0TWluWSA9IHB5OwotICAgIGVsc2UgaWYgKHB5
ID4gZW5jbG9zaW5nUmVjdE1heFkpCi0gICAgICAgIGVuY2xvc2luZ1JlY3RNYXhZID0gcHk7Ci0K
LSAgICBweCA9IHJlY3RNYXhYOwotICAgIHB5ID0gcmVjdE1heFk7Ci0gICAgY2Fpcm9fbWF0cml4
X3RyYW5zZm9ybV9wb2ludCgmbV90cmFuc2Zvcm0sICZweCwgJnB5KTsKLSAgICBpZiAocHggPCBl
bmNsb3NpbmdSZWN0TWluWCkKLSAgICAgICAgZW5jbG9zaW5nUmVjdE1pblggPSBweDsKLSAgICBl
bHNlIGlmIChweCA+IGVuY2xvc2luZ1JlY3RNYXhYKQotICAgICAgICBlbmNsb3NpbmdSZWN0TWF4
WCA9IHB4OwotICAgIGlmIChweSA8IGVuY2xvc2luZ1JlY3RNaW5ZKQotICAgICAgICBlbmNsb3Np
bmdSZWN0TWluWSA9IHB5OwotICAgIGVsc2UgaWYgKHB5ID4gZW5jbG9zaW5nUmVjdE1heFkpCi0g
ICAgICAgIGVuY2xvc2luZ1JlY3RNYXhZID0gcHk7Ci0KLSAgICBweCA9IHJlY3RNaW5YOwotICAg
IHB5ID0gcmVjdE1heFk7Ci0gICAgY2Fpcm9fbWF0cml4X3RyYW5zZm9ybV9wb2ludCgmbV90cmFu
c2Zvcm0sICZweCwgJnB5KTsKLSAgICBpZiAocHggPCBlbmNsb3NpbmdSZWN0TWluWCkKLSAgICAg
ICAgZW5jbG9zaW5nUmVjdE1pblggPSBweDsKLSAgICBlbHNlIGlmIChweCA+IGVuY2xvc2luZ1Jl
Y3RNYXhYKQotICAgICAgICBlbmNsb3NpbmdSZWN0TWF4WCA9IHB4OwotICAgIGlmIChweSA8IGVu
Y2xvc2luZ1JlY3RNaW5ZKQotICAgICAgICBlbmNsb3NpbmdSZWN0TWluWSA9IHB5OwotICAgIGVs
c2UgaWYgKHB5ID4gZW5jbG9zaW5nUmVjdE1heFkpCi0gICAgICAgIGVuY2xvc2luZ1JlY3RNYXhZ
ID0gcHk7Ci0KLQotICAgIGRvdWJsZSBlbmNsb3NpbmdSZWN0V2lkdGggPSBlbmNsb3NpbmdSZWN0
TWF4WCAtIGVuY2xvc2luZ1JlY3RNaW5YOwotICAgIGRvdWJsZSBlbmNsb3NpbmdSZWN0SGVpZ2h0
ID0gZW5jbG9zaW5nUmVjdE1heFkgLSBlbmNsb3NpbmdSZWN0TWluWTsKLQotICAgIHJldHVybiBG
bG9hdFJlY3QoZW5jbG9zaW5nUmVjdE1pblgsIGVuY2xvc2luZ1JlY3RNaW5ZLCBlbmNsb3NpbmdS
ZWN0V2lkdGgsIGVuY2xvc2luZ1JlY3RIZWlnaHQpOwotfQotCi1ib29sIFRyYW5zZm9ybWF0aW9u
TWF0cml4Ojppc0lkZW50aXR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKChtX3RyYW5zZm9ybS54
eCA9PSAxKSAmJiAobV90cmFuc2Zvcm0ueXkgPT0gMSkKLSAgICAgICAgICYmIChtX3RyYW5zZm9y
bS54eSA9PSAwKSAmJiAobV90cmFuc2Zvcm0ueXggPT0gMCkKLSAgICAgICAgICYmIChtX3RyYW5z
Zm9ybS54MCA9PSAwKSAmJiAobV90cmFuc2Zvcm0ueTAgPT0gMCkpOwotfQotCi1kb3VibGUgVHJh
bnNmb3JtYXRpb25NYXRyaXg6OmEoKSBjb25zdAotewotICAgIHJldHVybiBtX3RyYW5zZm9ybS54
eDsKLX0KLQotdm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0QShkb3VibGUgYSkKLXsKLSAg
ICBtX3RyYW5zZm9ybS54eCA9IGE7Ci19Ci0KLWRvdWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
YigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdHJhbnNmb3JtLnl4OwotfQotCi12b2lkIFRyYW5z
Zm9ybWF0aW9uTWF0cml4OjpzZXRCKGRvdWJsZSBiKQotewotICAgIG1fdHJhbnNmb3JtLnl4ID0g
YjsKLX0KLQotZG91YmxlIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpjKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV90cmFuc2Zvcm0ueHk7Ci19Ci0KLXZvaWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNl
dEMoZG91YmxlIGMpCi17Ci0gICAgbV90cmFuc2Zvcm0ueHkgPSBjOwotfQotCi1kb3VibGUgVHJh
bnNmb3JtYXRpb25NYXRyaXg6OmQoKSBjb25zdAotewotICAgIHJldHVybiBtX3RyYW5zZm9ybS55
eTsKLX0KLQotdm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0RChkb3VibGUgZCkKLXsKLSAg
ICBtX3RyYW5zZm9ybS55eSA9IGQ7Ci19Ci0KLWRvdWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdHJhbnNmb3JtLngwOwotfQotCi12b2lkIFRyYW5z
Zm9ybWF0aW9uTWF0cml4OjpzZXRFKGRvdWJsZSBlKQotewotICAgIG1fdHJhbnNmb3JtLngwID0g
ZTsKLX0KLQotZG91YmxlIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpmKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV90cmFuc2Zvcm0ueTA7Ci19Ci0KLXZvaWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNl
dEYoZG91YmxlIGYpCi17Ci0gICAgbV90cmFuc2Zvcm0ueTAgPSBmOwotfQotCi12b2lkIFRyYW5z
Zm9ybWF0aW9uTWF0cml4OjpyZXNldCgpCi17Ci0gICAgY2Fpcm9fbWF0cml4X2luaXRfaWRlbnRp
dHkoJm1fdHJhbnNmb3JtKTsKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRyaXggJlRyYW5zZm9ybWF0
aW9uTWF0cml4OjpzY2FsZShkb3VibGUgc3gsIGRvdWJsZSBzeSkKLXsKLSAgICBjYWlyb19tYXRy
aXhfc2NhbGUoJm1fdHJhbnNmb3JtLCBzeCwgc3kpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQot
VHJhbnNmb3JtYXRpb25NYXRyaXggJlRyYW5zZm9ybWF0aW9uTWF0cml4Ojpyb3RhdGUoZG91Ymxl
IGQpCi17Ci0gICAgY2Fpcm9fbWF0cml4X3JvdGF0ZSgmbV90cmFuc2Zvcm0sIGQgKiBkZWcycmFk
KTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4ICZUcmFuc2Zv
cm1hdGlvbk1hdHJpeDo6dHJhbnNsYXRlKGRvdWJsZSB0eCwgZG91YmxlIHR5KQotewotICAgIGNh
aXJvX21hdHJpeF90cmFuc2xhdGUoJm1fdHJhbnNmb3JtLCB0eCwgdHkpOwotICAgIHJldHVybiAq
dGhpczsKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRyaXggJlRyYW5zZm9ybWF0aW9uTWF0cml4Ojpz
aGVhcihkb3VibGUgc3gsIGRvdWJsZSBzeSkKLXsKLSAgICBjYWlyb19tYXRyaXhfdCBzaGVhcjsK
LSAgICBjYWlyb19tYXRyaXhfaW5pdCgmc2hlYXIsIDEsIHN5LCBzeCwgMSwgMCwgMCk7Ci0KLSAg
ICBjYWlyb19tYXRyaXhfdCByZXN1bHQ7Ci0gICAgY2Fpcm9fbWF0cml4X211bHRpcGx5KCZyZXN1
bHQsICZzaGVhciwgJm1fdHJhbnNmb3JtKTsKLSAgICBtX3RyYW5zZm9ybSA9IHJlc3VsdDsKLQot
ICAgIHJldHVybiAqdGhpczsKLX0KLQotZG91YmxlIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpkZXQo
KSBjb25zdAotewotICAgIHJldHVybiBtX3RyYW5zZm9ybS54eCAqIG1fdHJhbnNmb3JtLnl5IC0g
bV90cmFuc2Zvcm0ueHkgKiBtX3RyYW5zZm9ybS55eDsKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRy
aXggVHJhbnNmb3JtYXRpb25NYXRyaXg6OmludmVyc2UoKSBjb25zdAotewotICAgIGlmICghaXNJ
bnZlcnRpYmxlKCkpIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOwotCi0gICAgY2Fpcm9f
bWF0cml4X3QgcmVzdWx0ID0gbV90cmFuc2Zvcm07Ci0gICAgY2Fpcm9fbWF0cml4X2ludmVydCgm
cmVzdWx0KTsKLSAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgocmVzdWx0KTsKLX0KLQot
VHJhbnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yIGNhaXJvX21hdHJpeF90KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV90cmFuc2Zvcm07Ci19Ci0KLWJvb2wgVHJhbnNmb3JtYXRpb25NYXRyaXg6
Om9wZXJhdG9yPT0gKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4ICZtMikgY29uc3QKLXsKLSAg
ICByZXR1cm4gKChtX3RyYW5zZm9ybS54eCA9PSBtMi5tX3RyYW5zZm9ybS54eCkKLSAgICAgICAg
ICYmIChtX3RyYW5zZm9ybS55eSA9PSBtMi5tX3RyYW5zZm9ybS55eSkKLSAgICAgICAgICYmICht
X3RyYW5zZm9ybS54eSA9PSBtMi5tX3RyYW5zZm9ybS54eSkKLSAgICAgICAgICYmIChtX3RyYW5z
Zm9ybS55eCA9PSBtMi5tX3RyYW5zZm9ybS55eCkKLSAgICAgICAgICYmIChtX3RyYW5zZm9ybS54
MCA9PSBtMi5tX3RyYW5zZm9ybS54MCkKLSAgICAgICAgICYmIChtX3RyYW5zZm9ybS55MCA9PSBt
Mi5tX3RyYW5zZm9ybS55MCkpOwotCi19Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4ICZUcmFuc2Zv
cm1hdGlvbk1hdHJpeDo6b3BlcmF0b3IqPSAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggJm0y
KQotewotICAgIGNhaXJvX21hdHJpeF90IHJlc3VsdDsKLSAgICBjYWlyb19tYXRyaXhfbXVsdGlw
bHkoJnJlc3VsdCwgJm1fdHJhbnNmb3JtLCAmbTIubV90cmFuc2Zvcm0pOwotICAgIG1fdHJhbnNm
b3JtID0gcmVzdWx0OwotCi0gICAgcmV0dXJuICp0aGlzOwotfQotCi1UcmFuc2Zvcm1hdGlvbk1h
dHJpeCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0b3IqIChjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCAmbTIpCi17Ci0gICAgY2Fpcm9fbWF0cml4X3QgcmVzdWx0OwotICAgIGNhaXJvX21h
dHJpeF9tdWx0aXBseSgmcmVzdWx0LCAmbV90cmFuc2Zvcm0sICZtMi5tX3RyYW5zZm9ybSk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJv
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RyYW5z
Zm9ybWF0aW9uTWF0cml4Q2Fpcm8uY3BwCShyZXZpc2lvbiAzOTY2NSkJKGZyb20gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9BZmZpbmVUcmFuc2Zvcm1DYWlyby5jcHA6Mzk2NjUpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4Q2Fp
cm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjgxIEBACisvKgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorCisjaW5j
bHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorCisjaW5jbHVkZSA8Y2Fp
cm8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgZG91YmxlIGRlZzJy
YWQgPSAwLjAxNzQ1MzI5MjUxOTk0MzI5NTc2OTsgLy8gcGkvMTgwCisKK1RyYW5zZm9ybWF0aW9u
TWF0cml4OjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpCit7CisgICAgY2Fpcm9fbWF0cml4X2luaXRf
aWRlbnRpdHkoJm1fdHJhbnNmb3JtKTsKK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXg6OlRyYW5z
Zm9ybWF0aW9uTWF0cml4KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBk
b3VibGUgdHgsIGRvdWJsZSB0eSkKK3sKKyAgICBjYWlyb19tYXRyaXhfaW5pdCgmbV90cmFuc2Zv
cm0sIGEsIGIsIGMsIGQsIHR4LCB0eSk7Cit9CisKK1RyYW5zZm9ybWF0aW9uTWF0cml4OjpUcmFu
c2Zvcm1hdGlvbk1hdHJpeChjb25zdCBQbGF0Zm9ybVRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRy
aXgpCit7CisgICAgbV90cmFuc2Zvcm0gPSBtYXRyaXg7Cit9CisKK3ZvaWQgVHJhbnNmb3JtYXRp
b25NYXRyaXg6OnNldE1hdHJpeChkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUg
ZCwgZG91YmxlIHR4LCBkb3VibGUgdHkpCit7CisgICAgY2Fpcm9fbWF0cml4X2luaXQoJm1fdHJh
bnNmb3JtLCBhLCBiLCBjLCBkLCB0eCwgdHkpOworfQorCit2b2lkIFRyYW5zZm9ybWF0aW9uTWF0
cml4OjptYXAoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUqIHgyLCBkb3VibGUqIHkyKSBjb25z
dAoreworICAgICp4MiA9IHg7CisgICAgKnkyID0geTsKKyAgICBjYWlyb19tYXRyaXhfdHJhbnNm
b3JtX3BvaW50KCZtX3RyYW5zZm9ybSwgeDIsIHkyKTsKK30KKworSW50UmVjdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeDo6bWFwUmVjdChjb25zdCBJbnRSZWN0ICZyZWN0KSBjb25zdAoreworICAgIEZs
b2F0UmVjdCBmbG9hdFJlY3QocmVjdCk7CisgICAgRmxvYXRSZWN0IGVuY2xvc2luZ0Zsb2F0UmVj
dCA9IHRoaXMtPm1hcFJlY3QoZmxvYXRSZWN0KTsKKworICAgIHJldHVybiBlbmNsb3NpbmdJbnRS
ZWN0KGVuY2xvc2luZ0Zsb2F0UmVjdCk7Cit9CisKK0Zsb2F0UmVjdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6bWFwUmVjdChjb25zdCBGbG9hdFJlY3QgJnJlY3QpIGNvbnN0Cit7CisgICAgZG91Ymxl
IHJlY3RNaW5YID0gcmVjdC54KCk7CisgICAgZG91YmxlIHJlY3RNYXhYID0gcmVjdC54KCkgKyBy
ZWN0LndpZHRoKCk7CisgICAgZG91YmxlIHJlY3RNaW5ZID0gcmVjdC55KCk7CisgICAgZG91Ymxl
IHJlY3RNYXhZID0gcmVjdC55KCkgKyByZWN0LmhlaWdodCgpOworCisgICAgZG91YmxlIHB4ID0g
cmVjdE1pblg7CisgICAgZG91YmxlIHB5ID0gcmVjdE1pblk7CisgICAgY2Fpcm9fbWF0cml4X3Ry
YW5zZm9ybV9wb2ludCgmbV90cmFuc2Zvcm0sICZweCwgJnB5KTsKKworICAgIGRvdWJsZSBlbmNs
b3NpbmdSZWN0TWluWCA9IHB4OworICAgIGRvdWJsZSBlbmNsb3NpbmdSZWN0TWluWSA9IHB5Owor
ICAgIGRvdWJsZSBlbmNsb3NpbmdSZWN0TWF4WCA9IHB4OworICAgIGRvdWJsZSBlbmNsb3NpbmdS
ZWN0TWF4WSA9IHB5OworCisgICAgcHggPSByZWN0TWF4WDsKKyAgICBweSA9IHJlY3RNaW5ZOwor
ICAgIGNhaXJvX21hdHJpeF90cmFuc2Zvcm1fcG9pbnQoJm1fdHJhbnNmb3JtLCAmcHgsICZweSk7
CisgICAgaWYgKHB4IDwgZW5jbG9zaW5nUmVjdE1pblgpCisgICAgICAgIGVuY2xvc2luZ1JlY3RN
aW5YID0gcHg7CisgICAgZWxzZSBpZiAocHggPiBlbmNsb3NpbmdSZWN0TWF4WCkKKyAgICAgICAg
ZW5jbG9zaW5nUmVjdE1heFggPSBweDsKKyAgICBpZiAocHkgPCBlbmNsb3NpbmdSZWN0TWluWSkK
KyAgICAgICAgZW5jbG9zaW5nUmVjdE1pblkgPSBweTsKKyAgICBlbHNlIGlmIChweSA+IGVuY2xv
c2luZ1JlY3RNYXhZKQorICAgICAgICBlbmNsb3NpbmdSZWN0TWF4WSA9IHB5OworCisgICAgcHgg
PSByZWN0TWF4WDsKKyAgICBweSA9IHJlY3RNYXhZOworICAgIGNhaXJvX21hdHJpeF90cmFuc2Zv
cm1fcG9pbnQoJm1fdHJhbnNmb3JtLCAmcHgsICZweSk7CisgICAgaWYgKHB4IDwgZW5jbG9zaW5n
UmVjdE1pblgpCisgICAgICAgIGVuY2xvc2luZ1JlY3RNaW5YID0gcHg7CisgICAgZWxzZSBpZiAo
cHggPiBlbmNsb3NpbmdSZWN0TWF4WCkKKyAgICAgICAgZW5jbG9zaW5nUmVjdE1heFggPSBweDsK
KyAgICBpZiAocHkgPCBlbmNsb3NpbmdSZWN0TWluWSkKKyAgICAgICAgZW5jbG9zaW5nUmVjdE1p
blkgPSBweTsKKyAgICBlbHNlIGlmIChweSA+IGVuY2xvc2luZ1JlY3RNYXhZKQorICAgICAgICBl
bmNsb3NpbmdSZWN0TWF4WSA9IHB5OworCisgICAgcHggPSByZWN0TWluWDsKKyAgICBweSA9IHJl
Y3RNYXhZOworICAgIGNhaXJvX21hdHJpeF90cmFuc2Zvcm1fcG9pbnQoJm1fdHJhbnNmb3JtLCAm
cHgsICZweSk7CisgICAgaWYgKHB4IDwgZW5jbG9zaW5nUmVjdE1pblgpCisgICAgICAgIGVuY2xv
c2luZ1JlY3RNaW5YID0gcHg7CisgICAgZWxzZSBpZiAocHggPiBlbmNsb3NpbmdSZWN0TWF4WCkK
KyAgICAgICAgZW5jbG9zaW5nUmVjdE1heFggPSBweDsKKyAgICBpZiAocHkgPCBlbmNsb3NpbmdS
ZWN0TWluWSkKKyAgICAgICAgZW5jbG9zaW5nUmVjdE1pblkgPSBweTsKKyAgICBlbHNlIGlmIChw
eSA+IGVuY2xvc2luZ1JlY3RNYXhZKQorICAgICAgICBlbmNsb3NpbmdSZWN0TWF4WSA9IHB5Owor
CisKKyAgICBkb3VibGUgZW5jbG9zaW5nUmVjdFdpZHRoID0gZW5jbG9zaW5nUmVjdE1heFggLSBl
bmNsb3NpbmdSZWN0TWluWDsKKyAgICBkb3VibGUgZW5jbG9zaW5nUmVjdEhlaWdodCA9IGVuY2xv
c2luZ1JlY3RNYXhZIC0gZW5jbG9zaW5nUmVjdE1pblk7CisKKyAgICByZXR1cm4gRmxvYXRSZWN0
KGVuY2xvc2luZ1JlY3RNaW5YLCBlbmNsb3NpbmdSZWN0TWluWSwgZW5jbG9zaW5nUmVjdFdpZHRo
LCBlbmNsb3NpbmdSZWN0SGVpZ2h0KTsKK30KKworYm9vbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
aXNJZGVudGl0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICgobV90cmFuc2Zvcm0ueHggPT0gMSkg
JiYgKG1fdHJhbnNmb3JtLnl5ID09IDEpCisgICAgICAgICAmJiAobV90cmFuc2Zvcm0ueHkgPT0g
MCkgJiYgKG1fdHJhbnNmb3JtLnl4ID09IDApCisgICAgICAgICAmJiAobV90cmFuc2Zvcm0ueDAg
PT0gMCkgJiYgKG1fdHJhbnNmb3JtLnkwID09IDApKTsKK30KKworZG91YmxlIFRyYW5zZm9ybWF0
aW9uTWF0cml4OjphKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90cmFuc2Zvcm0ueHg7Cit9CisK
K3ZvaWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldEEoZG91YmxlIGEpCit7CisgICAgbV90cmFu
c2Zvcm0ueHggPSBhOworfQorCitkb3VibGUgVHJhbnNmb3JtYXRpb25NYXRyaXg6OmIoKSBjb25z
dAoreworICAgIHJldHVybiBtX3RyYW5zZm9ybS55eDsKK30KKwordm9pZCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeDo6c2V0Qihkb3VibGUgYikKK3sKKyAgICBtX3RyYW5zZm9ybS55eCA9IGI7Cit9CisK
K2RvdWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6YygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
dHJhbnNmb3JtLnh5OworfQorCit2b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRDKGRvdWJs
ZSBjKQoreworICAgIG1fdHJhbnNmb3JtLnh5ID0gYzsKK30KKworZG91YmxlIFRyYW5zZm9ybWF0
aW9uTWF0cml4OjpkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90cmFuc2Zvcm0ueXk7Cit9CisK
K3ZvaWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldEQoZG91YmxlIGQpCit7CisgICAgbV90cmFu
c2Zvcm0ueXkgPSBkOworfQorCitkb3VibGUgVHJhbnNmb3JtYXRpb25NYXRyaXg6OmUoKSBjb25z
dAoreworICAgIHJldHVybiBtX3RyYW5zZm9ybS54MDsKK30KKwordm9pZCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeDo6c2V0RShkb3VibGUgZSkKK3sKKyAgICBtX3RyYW5zZm9ybS54MCA9IGU7Cit9CisK
K2RvdWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6ZigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
dHJhbnNmb3JtLnkwOworfQorCit2b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRGKGRvdWJs
ZSBmKQoreworICAgIG1fdHJhbnNmb3JtLnkwID0gZjsKK30KKwordm9pZCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeDo6cmVzZXQoKQoreworICAgIGNhaXJvX21hdHJpeF9pbml0X2lkZW50aXR5KCZtX3Ry
YW5zZm9ybSk7Cit9CisKK1RyYW5zZm9ybWF0aW9uTWF0cml4ICZUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6c2NhbGUoZG91YmxlIHN4LCBkb3VibGUgc3kpCit7CisgICAgY2Fpcm9fbWF0cml4X3NjYWxl
KCZtX3RyYW5zZm9ybSwgc3gsIHN5KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1RyYW5zZm9y
bWF0aW9uTWF0cml4ICZUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cm90YXRlKGRvdWJsZSBkKQorewor
ICAgIGNhaXJvX21hdHJpeF9yb3RhdGUoJm1fdHJhbnNmb3JtLCBkICogZGVnMnJhZCk7CisgICAg
cmV0dXJuICp0aGlzOworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCAmVHJhbnNmb3JtYXRpb25N
YXRyaXg6OnRyYW5zbGF0ZShkb3VibGUgdHgsIGRvdWJsZSB0eSkKK3sKKyAgICBjYWlyb19tYXRy
aXhfdHJhbnNsYXRlKCZtX3RyYW5zZm9ybSwgdHgsIHR5KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9
CisKK1RyYW5zZm9ybWF0aW9uTWF0cml4ICZUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2hlYXIoZG91
YmxlIHN4LCBkb3VibGUgc3kpCit7CisgICAgY2Fpcm9fbWF0cml4X3Qgc2hlYXI7CisgICAgY2Fp
cm9fbWF0cml4X2luaXQoJnNoZWFyLCAxLCBzeSwgc3gsIDEsIDAsIDApOworCisgICAgY2Fpcm9f
bWF0cml4X3QgcmVzdWx0OworICAgIGNhaXJvX21hdHJpeF9tdWx0aXBseSgmcmVzdWx0LCAmc2hl
YXIsICZtX3RyYW5zZm9ybSk7CisgICAgbV90cmFuc2Zvcm0gPSByZXN1bHQ7CisKKyAgICByZXR1
cm4gKnRoaXM7Cit9CisKK2RvdWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6ZGV0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV90cmFuc2Zvcm0ueHggKiBtX3RyYW5zZm9ybS55eSAtIG1fdHJhbnNm
b3JtLnh5ICogbV90cmFuc2Zvcm0ueXg7Cit9CisKK1RyYW5zZm9ybWF0aW9uTWF0cml4IFRyYW5z
Zm9ybWF0aW9uTWF0cml4OjppbnZlcnNlKCkgY29uc3QKK3sKKyAgICBpZiAoIWlzSW52ZXJ0aWJs
ZSgpKSByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKKworICAgIGNhaXJvX21hdHJpeF90
IHJlc3VsdCA9IG1fdHJhbnNmb3JtOworICAgIGNhaXJvX21hdHJpeF9pbnZlcnQoJnJlc3VsdCk7
CisgICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4KHJlc3VsdCk7Cit9CisKK1RyYW5zZm9y
bWF0aW9uTWF0cml4OjpvcGVyYXRvciBjYWlyb19tYXRyaXhfdCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdHJhbnNmb3JtOworfQorCitib29sIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRv
cj09IChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCAmbTIpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICgobV90cmFuc2Zvcm0ueHggPT0gbTIubV90cmFuc2Zvcm0ueHgpCisgICAgICAgICAmJiAobV90
cmFuc2Zvcm0ueXkgPT0gbTIubV90cmFuc2Zvcm0ueXkpCisgICAgICAgICAmJiAobV90cmFuc2Zv
cm0ueHkgPT0gbTIubV90cmFuc2Zvcm0ueHkpCisgICAgICAgICAmJiAobV90cmFuc2Zvcm0ueXgg
PT0gbTIubV90cmFuc2Zvcm0ueXgpCisgICAgICAgICAmJiAobV90cmFuc2Zvcm0ueDAgPT0gbTIu
bV90cmFuc2Zvcm0ueDApCisgICAgICAgICAmJiAobV90cmFuc2Zvcm0ueTAgPT0gbTIubV90cmFu
c2Zvcm0ueTApKTsKKworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCAmVHJhbnNmb3JtYXRpb25N
YXRyaXg6Om9wZXJhdG9yKj0gKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4ICZtMikKK3sKKyAg
ICBjYWlyb19tYXRyaXhfdCByZXN1bHQ7CisgICAgY2Fpcm9fbWF0cml4X211bHRpcGx5KCZyZXN1
bHQsICZtX3RyYW5zZm9ybSwgJm0yLm1fdHJhbnNmb3JtKTsKKyAgICBtX3RyYW5zZm9ybSA9IHJl
c3VsdDsKKworICAgIHJldHVybiAqdGhpczsKK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXggVHJh
bnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yKiAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgg
Jm0yKQoreworICAgIGNhaXJvX21hdHJpeF90IHJlc3VsdDsKKyAgICBjYWlyb19tYXRyaXhfbXVs
dGlwbHkoJnJlc3VsdCwgJm1fdHJhbnNmb3JtLCAmbTIubV90cmFuc2Zvcm0pOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvQWZmaW5lVHJhbnNmb3JtQ0cuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQWZmaW5lVHJhbnNmb3JtQ0cuY3BwCShyZXZp
c2lvbiAzOTY2NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQWZmaW5lVHJhbnNm
b3JtQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIxNiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oIgotCi0jaWYgUExBVEZPUk0oQ0cpCi0KLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24u
aCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0KLSNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVRyYW5zZm9y
bWF0aW9uTWF0cml4OjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpCi0gICAgOiBtX3RyYW5zZm9ybShD
R0FmZmluZVRyYW5zZm9ybUlkZW50aXR5KQotewotfQotCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
VHJhbnNmb3JtYXRpb25NYXRyaXgoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91Ymxl
IGQsIGRvdWJsZSB0eCwgZG91YmxlIHR5KQotewotICAgIG1fdHJhbnNmb3JtID0gQ0dBZmZpbmVU
cmFuc2Zvcm1NYWtlKG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChhKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoYiksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9D
R0Zsb2F0KGMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvQ0dGbG9hdChkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQodHgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdCh0eSkpOwotfQot
Ci1UcmFuc2Zvcm1hdGlvbk1hdHJpeDo6VHJhbnNmb3JtYXRpb25NYXRyaXgoY29uc3QgUGxhdGZv
cm1UcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKLSAgICA6IG1fdHJhbnNmb3JtKHQpCi17Ci19Ci0K
LXZvaWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE1hdHJpeChkb3VibGUgYSwgZG91YmxlIGIs
IGRvdWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIHR4LCBkb3VibGUgdHkpCi17Ci0gICAgbV90cmFu
c2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2UobmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KGEp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lv
blRvQ0dGbG9hdChiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
YXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoYyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KGQpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdCh0eCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9D
R0Zsb2F0KHR5KSk7Ci19Ci0KLXZvaWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcChkb3VibGUg
eCwgZG91YmxlIHksIGRvdWJsZSAqeDIsIGRvdWJsZSAqeTIpIGNvbnN0Ci17Ci0gICAgQ0dQb2lu
dCByZXN1bHQgPSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0oQ0dQb2ludE1ha2UobmFycm93
UHJlY2lzaW9uVG9DR0Zsb2F0KHgpLCBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoeSkpLCBtX3Ry
YW5zZm9ybSk7Ci0gICAgKngyID0gcmVzdWx0Lng7Ci0gICAgKnkyID0gcmVzdWx0Lnk7Ci19Ci0K
LUludFJlY3QgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFJlY3QoY29uc3QgSW50UmVjdCAmcmVj
dCkgY29uc3QKLXsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChDR1JlY3RBcHBseUFmZmlu
ZVRyYW5zZm9ybShDR1JlY3QocmVjdCksIG1fdHJhbnNmb3JtKSk7Ci19Ci0KLUZsb2F0UmVjdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUmVjdChjb25zdCBGbG9hdFJlY3QgJnJlY3QpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShDR1Jl
Y3QocmVjdCksIG1fdHJhbnNmb3JtKSk7Ci19Ci0KLWJvb2wgVHJhbnNmb3JtYXRpb25NYXRyaXg6
OmlzSWRlbnRpdHkoKSBjb25zdAotewotICAgIHJldHVybiBDR0FmZmluZVRyYW5zZm9ybUlzSWRl
bnRpdHkobV90cmFuc2Zvcm0pOwotfQotCi1kb3VibGUgVHJhbnNmb3JtYXRpb25NYXRyaXg6OmEo
KSBjb25zdAotewotICAgIHJldHVybiBtX3RyYW5zZm9ybS5hOwotfQotCi12b2lkIFRyYW5zZm9y
bWF0aW9uTWF0cml4OjpzZXRBKGRvdWJsZSBhKQotewotICAgIG1fdHJhbnNmb3JtLmEgPSBuYXJy
b3dQcmVjaXNpb25Ub0NHRmxvYXQoYSk7Ci19Ci0KLWRvdWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6YigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdHJhbnNmb3JtLmI7Ci19Ci0KLXZvaWQgVHJh
bnNmb3JtYXRpb25NYXRyaXg6OnNldEIoZG91YmxlIGIpCi17Ci0gICAgbV90cmFuc2Zvcm0uYiA9
IG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChiKTsKLX0KLQotZG91YmxlIFRyYW5zZm9ybWF0aW9u
TWF0cml4OjpjKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90cmFuc2Zvcm0uYzsKLX0KLQotdm9p
ZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0Qyhkb3VibGUgYykKLXsKLSAgICBtX3RyYW5zZm9y
bS5jID0gbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KGMpOwotfQotCi1kb3VibGUgVHJhbnNmb3Jt
YXRpb25NYXRyaXg6OmQoKSBjb25zdAotewotICAgIHJldHVybiBtX3RyYW5zZm9ybS5kOwotfQot
Ci12b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXREKGRvdWJsZSBkKQotewotICAgIG1fdHJh
bnNmb3JtLmQgPSBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoZCk7Ci19Ci0KLWRvdWJsZSBUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdHJhbnNmb3JtLnR4
OwotfQotCi12b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRFKGRvdWJsZSBlKQotewotICAg
IG1fdHJhbnNmb3JtLnR4ID0gbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KGUpOwotfQotCi1kb3Vi
bGUgVHJhbnNmb3JtYXRpb25NYXRyaXg6OmYoKSBjb25zdAotewotICAgIHJldHVybiBtX3RyYW5z
Zm9ybS50eTsKLX0KLQotdm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0Rihkb3VibGUgZikK
LXsKLSAgICBtX3RyYW5zZm9ybS50eSA9IG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChmKTsKLX0K
LQotdm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVzZXQoKQotewotICAgIG1fdHJhbnNmb3Jt
ID0gQ0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl0eTsKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRyaXgg
JlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzY2FsZShkb3VibGUgc3gsIGRvdWJsZSBzeSkKLXsKLSAg
ICBtX3RyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtU2NhbGUobV90cmFuc2Zvcm0sIG5hcnJv
d1ByZWNpc2lvblRvQ0dGbG9hdChzeCksIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChzeSkpOwot
ICAgIHJldHVybiAqdGhpczsKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRyaXggJlRyYW5zZm9ybWF0
aW9uTWF0cml4Ojpyb3RhdGUoZG91YmxlIGQpCi17Ci0gICAgbV90cmFuc2Zvcm0gPSBDR0FmZmlu
ZVRyYW5zZm9ybVJvdGF0ZShtX3RyYW5zZm9ybSwgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KGRl
ZzJyYWQoZCkpKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4
ICZUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6dHJhbnNsYXRlKGRvdWJsZSB0eCwgZG91YmxlIHR5KQot
ewotICAgIG1fdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1UcmFuc2xhdGUobV90cmFuc2Zv
cm0sIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdCh0eCksIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9h
dCh0eSkpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRyaXggJlRy
YW5zZm9ybWF0aW9uTWF0cml4OjpzaGVhcihkb3VibGUgc3gsIGRvdWJsZSBzeSkKLXsKLSAgICBD
R0FmZmluZVRyYW5zZm9ybSBzaGVhciA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZSgxLjBmLCBuYXJy
b3dQcmVjaXNpb25Ub0NHRmxvYXQoc3kpLCBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoc3gpLCAx
LjBmLCAwLjBmLCAwLjBmKTsKLSAgICBtX3RyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtQ29u
Y2F0KHNoZWFyLCBtX3RyYW5zZm9ybSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1kb3VibGUg
VHJhbnNmb3JtYXRpb25NYXRyaXg6OmRldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdHJhbnNm
b3JtLmEgKiBtX3RyYW5zZm9ybS5kIC0gbV90cmFuc2Zvcm0uYiAqIG1fdHJhbnNmb3JtLmM7Ci19
Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4IFRyYW5zZm9ybWF0aW9uTWF0cml4OjppbnZlcnNlKCkg
Y29uc3QKLXsKLSAgICBpZiAoaXNJbnZlcnRpYmxlKCkpCi0gICAgICAgIHJldHVybiBUcmFuc2Zv
cm1hdGlvbk1hdHJpeChDR0FmZmluZVRyYW5zZm9ybUludmVydChtX3RyYW5zZm9ybSkpOwotICAg
IHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOwotfQotCi1UcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6b3BlcmF0b3IgUGxhdGZvcm1UcmFuc2Zvcm1hdGlvbk1hdHJpeCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fdHJhbnNmb3JtOwotfQotCi1ib29sIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVy
YXRvcj09IChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCAmbTIpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIENHQWZmaW5lVHJhbnNmb3JtRXF1YWxUb1RyYW5zZm9ybShtX3RyYW5zZm9ybSwgQ0dBZmZp
bmVUcmFuc2Zvcm0obTIpKTsKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRyaXggJlRyYW5zZm9ybWF0
aW9uTWF0cml4OjpvcGVyYXRvcio9IChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCAmbTIpCi17
Ci0gICAgbV90cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChtX3RyYW5zZm9ybSwg
Q0dBZmZpbmVUcmFuc2Zvcm0obTIpKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVRyYW5zZm9y
bWF0aW9uTWF0cml4IFRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvciogKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4ICZtMikKLXsKLSAgICByZXR1cm4gQ0dBZmZpbmVUcmFuc2Zvcm1Db25j
YXQobV90cmFuc2Zvcm0sIENHQWZmaW5lVHJhbnNmb3JtKG0yKSk7Ci19Ci0KLX0KLQotI2VuZGlm
IC8vIFBMQVRGT1JNKENHKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFu
c2Zvcm1hdGlvbk1hdHJpeENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwCShyZXZpc2lvbiAzOTY2NSkJKGZy
b20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9BZmZpbmVUcmFuc2Zvcm1DRy5jcHA6Mzk2
NjUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4
Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgorCisjaWYgUExBVEZPUk0oQ0cpCisKKyNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIK
KyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisKKyNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1RyYW5zZm9ybWF0
aW9uTWF0cml4OjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpCisgICAgOiBtX3RyYW5zZm9ybShDR0Fm
ZmluZVRyYW5zZm9ybUlkZW50aXR5KQoreworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6VHJh
bnNmb3JtYXRpb25NYXRyaXgoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQs
IGRvdWJsZSB0eCwgZG91YmxlIHR5KQoreworICAgIG1fdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFu
c2Zvcm1NYWtlKG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChhKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoYiksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9DR0Zs
b2F0KGMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvQ0dGbG9hdChkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQodHgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdCh0eSkpOworfQorCitU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6VHJhbnNmb3JtYXRpb25NYXRyaXgoY29uc3QgUGxhdGZvcm1U
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKKyAgICA6IG1fdHJhbnNmb3JtKHQpCit7Cit9CisKK3Zv
aWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE1hdHJpeChkb3VibGUgYSwgZG91YmxlIGIsIGRv
dWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIHR4LCBkb3VibGUgdHkpCit7CisgICAgbV90cmFuc2Zv
cm0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2UobmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KGEpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
Q0dGbG9hdChiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0NHRmxvYXQoYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KGQpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdCh0eCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9DR0Zs
b2F0KHR5KSk7Cit9CisKK3ZvaWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcChkb3VibGUgeCwg
ZG91YmxlIHksIGRvdWJsZSAqeDIsIGRvdWJsZSAqeTIpIGNvbnN0Cit7CisgICAgQ0dQb2ludCBy
ZXN1bHQgPSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0oQ0dQb2ludE1ha2UobmFycm93UHJl
Y2lzaW9uVG9DR0Zsb2F0KHgpLCBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoeSkpLCBtX3RyYW5z
Zm9ybSk7CisgICAgKngyID0gcmVzdWx0Lng7CisgICAgKnkyID0gcmVzdWx0Lnk7Cit9CisKK0lu
dFJlY3QgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFJlY3QoY29uc3QgSW50UmVjdCAmcmVjdCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChDR1JlY3RBcHBseUFmZmluZVRy
YW5zZm9ybShDR1JlY3QocmVjdCksIG1fdHJhbnNmb3JtKSk7Cit9CisKK0Zsb2F0UmVjdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6bWFwUmVjdChjb25zdCBGbG9hdFJlY3QgJnJlY3QpIGNvbnN0Cit7
CisgICAgcmV0dXJuIEZsb2F0UmVjdChDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShDR1JlY3Qo
cmVjdCksIG1fdHJhbnNmb3JtKSk7Cit9CisKK2Jvb2wgVHJhbnNmb3JtYXRpb25NYXRyaXg6Omlz
SWRlbnRpdHkoKSBjb25zdAoreworICAgIHJldHVybiBDR0FmZmluZVRyYW5zZm9ybUlzSWRlbnRp
dHkobV90cmFuc2Zvcm0pOworfQorCitkb3VibGUgVHJhbnNmb3JtYXRpb25NYXRyaXg6OmEoKSBj
b25zdAoreworICAgIHJldHVybiBtX3RyYW5zZm9ybS5hOworfQorCit2b2lkIFRyYW5zZm9ybWF0
aW9uTWF0cml4OjpzZXRBKGRvdWJsZSBhKQoreworICAgIG1fdHJhbnNmb3JtLmEgPSBuYXJyb3dQ
cmVjaXNpb25Ub0NHRmxvYXQoYSk7Cit9CisKK2RvdWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
YigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNmb3JtLmI7Cit9CisKK3ZvaWQgVHJhbnNm
b3JtYXRpb25NYXRyaXg6OnNldEIoZG91YmxlIGIpCit7CisgICAgbV90cmFuc2Zvcm0uYiA9IG5h
cnJvd1ByZWNpc2lvblRvQ0dGbG9hdChiKTsKK30KKworZG91YmxlIFRyYW5zZm9ybWF0aW9uTWF0
cml4OjpjKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90cmFuc2Zvcm0uYzsKK30KKwordm9pZCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0Qyhkb3VibGUgYykKK3sKKyAgICBtX3RyYW5zZm9ybS5j
ID0gbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KGMpOworfQorCitkb3VibGUgVHJhbnNmb3JtYXRp
b25NYXRyaXg6OmQoKSBjb25zdAoreworICAgIHJldHVybiBtX3RyYW5zZm9ybS5kOworfQorCit2
b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXREKGRvdWJsZSBkKQoreworICAgIG1fdHJhbnNm
b3JtLmQgPSBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoZCk7Cit9CisKK2RvdWJsZSBUcmFuc2Zv
cm1hdGlvbk1hdHJpeDo6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNmb3JtLnR4Owor
fQorCit2b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRFKGRvdWJsZSBlKQoreworICAgIG1f
dHJhbnNmb3JtLnR4ID0gbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KGUpOworfQorCitkb3VibGUg
VHJhbnNmb3JtYXRpb25NYXRyaXg6OmYoKSBjb25zdAoreworICAgIHJldHVybiBtX3RyYW5zZm9y
bS50eTsKK30KKwordm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0Rihkb3VibGUgZikKK3sK
KyAgICBtX3RyYW5zZm9ybS50eSA9IG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChmKTsKK30KKwor
dm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVzZXQoKQoreworICAgIG1fdHJhbnNmb3JtID0g
Q0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl0eTsKK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXggJlRy
YW5zZm9ybWF0aW9uTWF0cml4OjpzY2FsZShkb3VibGUgc3gsIGRvdWJsZSBzeSkKK3sKKyAgICBt
X3RyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtU2NhbGUobV90cmFuc2Zvcm0sIG5hcnJvd1By
ZWNpc2lvblRvQ0dGbG9hdChzeCksIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdChzeSkpOworICAg
IHJldHVybiAqdGhpczsKK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXggJlRyYW5zZm9ybWF0aW9u
TWF0cml4Ojpyb3RhdGUoZG91YmxlIGQpCit7CisgICAgbV90cmFuc2Zvcm0gPSBDR0FmZmluZVRy
YW5zZm9ybVJvdGF0ZShtX3RyYW5zZm9ybSwgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KGRlZzJy
YWQoZCkpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1RyYW5zZm9ybWF0aW9uTWF0cml4ICZU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6dHJhbnNsYXRlKGRvdWJsZSB0eCwgZG91YmxlIHR5KQorewor
ICAgIG1fdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1UcmFuc2xhdGUobV90cmFuc2Zvcm0s
IG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdCh0eCksIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdCh0
eSkpOworICAgIHJldHVybiAqdGhpczsKK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXggJlRyYW5z
Zm9ybWF0aW9uTWF0cml4OjpzaGVhcihkb3VibGUgc3gsIGRvdWJsZSBzeSkKK3sKKyAgICBDR0Fm
ZmluZVRyYW5zZm9ybSBzaGVhciA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZSgxLjBmLCBuYXJyb3dQ
cmVjaXNpb25Ub0NHRmxvYXQoc3kpLCBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoc3gpLCAxLjBm
LCAwLjBmLCAwLjBmKTsKKyAgICBtX3RyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0
KHNoZWFyLCBtX3RyYW5zZm9ybSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitkb3VibGUgVHJh
bnNmb3JtYXRpb25NYXRyaXg6OmRldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNmb3Jt
LmEgKiBtX3RyYW5zZm9ybS5kIC0gbV90cmFuc2Zvcm0uYiAqIG1fdHJhbnNmb3JtLmM7Cit9CisK
K1RyYW5zZm9ybWF0aW9uTWF0cml4IFRyYW5zZm9ybWF0aW9uTWF0cml4OjppbnZlcnNlKCkgY29u
c3QKK3sKKyAgICBpZiAoaXNJbnZlcnRpYmxlKCkpCisgICAgICAgIHJldHVybiBUcmFuc2Zvcm1h
dGlvbk1hdHJpeChDR0FmZmluZVRyYW5zZm9ybUludmVydChtX3RyYW5zZm9ybSkpOworICAgIHJl
dHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
b3BlcmF0b3IgUGxhdGZvcm1UcmFuc2Zvcm1hdGlvbk1hdHJpeCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdHJhbnNmb3JtOworfQorCitib29sIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRv
cj09IChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCAmbTIpIGNvbnN0Cit7CisgICAgcmV0dXJu
IENHQWZmaW5lVHJhbnNmb3JtRXF1YWxUb1RyYW5zZm9ybShtX3RyYW5zZm9ybSwgQ0dBZmZpbmVU
cmFuc2Zvcm0obTIpKTsKK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXggJlRyYW5zZm9ybWF0aW9u
TWF0cml4OjpvcGVyYXRvcio9IChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCAmbTIpCit7Cisg
ICAgbV90cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChtX3RyYW5zZm9ybSwgQ0dB
ZmZpbmVUcmFuc2Zvcm0obTIpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1RyYW5zZm9ybWF0
aW9uTWF0cml4IFRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvciogKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4ICZtMikKK3sKKyAgICByZXR1cm4gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQo
bV90cmFuc2Zvcm0sIENHQWZmaW5lVHJhbnNmb3JtKG0yKSk7Cit9CisKK30KKworI2VuZGlmIC8v
IFBMQVRGT1JNKENHKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9BZmZpbmVU
cmFuc2Zvcm1RdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9BZmZpbmVUcmFuc2Zvcm1RdC5jcHAJKHJldmlzaW9uIDM5NjY1KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9BZmZpbmVUcmFuc2Zvcm1RdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsMjAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotCi0jaW5jbHVkZSAiSW50UmVjdC5oIgot
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVRyYW5zZm9y
bWF0aW9uTWF0cml4OjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpCi0gICAgOiBtX3RyYW5zZm9ybSgp
Ci17Ci19Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4OjpUcmFuc2Zvcm1hdGlvbk1hdHJpeChkb3Vi
bGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIHR4LCBkb3VibGUgdHkp
Ci0gICAgOiBtX3RyYW5zZm9ybShhLCBiLCBjLCBkLCB0eCwgdHkpCi17Ci19Ci0KLVRyYW5zZm9y
bWF0aW9uTWF0cml4OjpUcmFuc2Zvcm1hdGlvbk1hdHJpeChjb25zdCBQbGF0Zm9ybVRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtYXRyaXgpCi0gICAgOiBtX3RyYW5zZm9ybShtYXRyaXgpCi17Ci19Ci0K
LXZvaWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE1hdHJpeChkb3VibGUgYSwgZG91YmxlIGIs
IGRvdWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIHR4LCBkb3VibGUgdHkpCi17Ci0gICAgbV90cmFu
c2Zvcm0uc2V0TWF0cml4KGEsIGIsIGMsIGQsIHR4LCB0eSk7Ci19Ci0KLXZvaWQgVHJhbnNmb3Jt
YXRpb25NYXRyaXg6Om1hcChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSogeDIsIGRvdWJsZSog
eTIpIGNvbnN0Ci17Ci0gICAgcXJlYWwgdHgyLCB0eTI7Ci0gICAgbV90cmFuc2Zvcm0ubWFwKHFy
ZWFsKHgpLCBxcmVhbCh5KSwgJnR4MiwgJnR5Mik7Ci0gICAgKngyID0gdHgyOwotICAgICp5MiA9
IHR5MjsKLX0KLQotSW50UmVjdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0KSBjb25zdAotewotICAgIHJldHVybiBtX3RyYW5zZm9ybS5tYXBSZWN0KHJl
Y3QpOwotfQotCi1GbG9hdFJlY3QgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KSBjb25zdAotewotICAgIHJldHVybiBtX3RyYW5zZm9ybS5tYXBSZWN0
KHJlY3QpOwotfQotCi1ib29sIFRyYW5zZm9ybWF0aW9uTWF0cml4Ojppc0lkZW50aXR5KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV90cmFuc2Zvcm0uaXNJZGVudGl0eSgpOwotfQotCi1kb3VibGUg
VHJhbnNmb3JtYXRpb25NYXRyaXg6OmEoKSBjb25zdAotewotICAgIHJldHVybiBtX3RyYW5zZm9y
bS5tMTEoKTsKLX0KLQotdm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0QShkb3VibGUgYSkK
LXsKLSAgICBtX3RyYW5zZm9ybS5zZXRNYXRyaXgoYSwgYigpLCBjKCksIGQoKSwgZSgpLCBmKCkp
OwotfQotCi1kb3VibGUgVHJhbnNmb3JtYXRpb25NYXRyaXg6OmIoKSBjb25zdAotewotICAgIHJl
dHVybiBtX3RyYW5zZm9ybS5tMTIoKTsKLX0KLQotdm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
c2V0Qihkb3VibGUgYikKLXsKLSAgICBtX3RyYW5zZm9ybS5zZXRNYXRyaXgoYSgpLCBiLCBjKCks
IGQoKSwgZSgpLCBmKCkpOwotfQotCi1kb3VibGUgVHJhbnNmb3JtYXRpb25NYXRyaXg6OmMoKSBj
b25zdAotewotICAgIHJldHVybiBtX3RyYW5zZm9ybS5tMjEoKTsKLX0KLQotdm9pZCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeDo6c2V0Qyhkb3VibGUgYykKLXsKLSAgICBtX3RyYW5zZm9ybS5zZXRNYXRy
aXgoYSgpLCBiKCksIGMsIGQoKSwgZSgpLCBmKCkpOwotfQotCi1kb3VibGUgVHJhbnNmb3JtYXRp
b25NYXRyaXg6OmQoKSBjb25zdAotewotICAgIHJldHVybiBtX3RyYW5zZm9ybS5tMjIoKTsKLX0K
LQotdm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0RChkb3VibGUgZCkKLXsKLSAgICBtX3Ry
YW5zZm9ybS5zZXRNYXRyaXgoYSgpLCBiKCksIGMoKSwgZCwgZSgpLCBmKCkpOwotfQotCi1kb3Vi
bGUgVHJhbnNmb3JtYXRpb25NYXRyaXg6OmUoKSBjb25zdAotewotICAgIHJldHVybiBtX3RyYW5z
Zm9ybS5keCgpOwotfQotCi12b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRFKGRvdWJsZSBl
KQotewotICAgIG1fdHJhbnNmb3JtLnNldE1hdHJpeChhKCksIGIoKSwgYygpLCBkKCksIGUsIGYo
KSk7Ci19Ci0KLWRvdWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6ZigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fdHJhbnNmb3JtLmR5KCk7Ci19Ci0KLXZvaWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6
OnNldEYoZG91YmxlIGYpCi17Ci0gICAgbV90cmFuc2Zvcm0uc2V0TWF0cml4KGEoKSwgYigpLCBj
KCksIGQoKSwgZSgpLCBmKTsKLX0KLQotdm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVzZXQo
KQotewotICAgIG1fdHJhbnNmb3JtLnJlc2V0KCk7Ci19Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4
JiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2NhbGUoZG91YmxlIHN4LCBkb3VibGUgc3kpCi17Ci0g
ICAgbV90cmFuc2Zvcm0uc2NhbGUoc3gsIHN5KTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVRy
YW5zZm9ybWF0aW9uTWF0cml4JiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cm90YXRlKGRvdWJsZSBk
KQotewotICAgIG1fdHJhbnNmb3JtLnJvdGF0ZShkKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0K
LVRyYW5zZm9ybWF0aW9uTWF0cml4JiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6dHJhbnNsYXRlKGRv
dWJsZSB0eCwgZG91YmxlIHR5KQotewotICAgIG1fdHJhbnNmb3JtLnRyYW5zbGF0ZSh0eCwgdHkp
OwotICAgIHJldHVybiAqdGhpczsKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRyaXgmIFRyYW5zZm9y
bWF0aW9uTWF0cml4OjpzaGVhcihkb3VibGUgc3gsIGRvdWJsZSBzeSkKLXsKLSAgICBtX3RyYW5z
Zm9ybS5zaGVhcihzeCwgc3kpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotZG91YmxlIFRyYW5z
Zm9ybWF0aW9uTWF0cml4OjpkZXQoKSBjb25zdAotewotICAgIHJldHVybiBtX3RyYW5zZm9ybS5k
ZXQoKTsKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRyaXggVHJhbnNmb3JtYXRpb25NYXRyaXg6Omlu
dmVyc2UoKSBjb25zdAotewotICAgIGlmKCFpc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJu
IFRyYW5zZm9ybWF0aW9uTWF0cml4KCk7Ci0KLSAgICByZXR1cm4gbV90cmFuc2Zvcm0uaW52ZXJ0
ZWQoKTsKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yIFFNYXRyaXgoKSBjb25z
dAotewotICAgIHJldHVybiBtX3RyYW5zZm9ybTsKLX0KLQotYm9vbCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6b3BlcmF0b3I9PShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgb3RoZXIpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fdHJhbnNmb3JtID09IG90aGVyLm1fdHJhbnNmb3JtOwotfQotCi1U
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yKj0oY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG90aGVyKQotewotICAgIG1fdHJhbnNmb3JtICo9IG90
aGVyLm1fdHJhbnNmb3JtOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotVHJhbnNmb3JtYXRpb25N
YXRyaXggVHJhbnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yKihjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgb3RoZXIpCi17Ci0gICAgcmV0dXJuIG1fdHJhbnNmb3JtICogb3RoZXIubV90cmFu
c2Zvcm07Ci19Ci0KLX0KLQotLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNmb3JtYXRpb25NYXRyaXhRdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFF0LmNw
cAkocmV2aXNpb24gMzk2NjUpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQWZm
aW5lVHJhbnNmb3JtUXQuY3BwOjM5NjY1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIw
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRy
YW5zZm9ybWF0aW9uTWF0cml4LmgiCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVHJhbnNmb3JtYXRpb25NYXRy
aXg6OlRyYW5zZm9ybWF0aW9uTWF0cml4KCkKKyAgICA6IG1fdHJhbnNmb3JtKCkKK3sKK30KKwor
VHJhbnNmb3JtYXRpb25NYXRyaXg6OlRyYW5zZm9ybWF0aW9uTWF0cml4KGRvdWJsZSBhLCBkb3Vi
bGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgdHgsIGRvdWJsZSB0eSkKKyAgICA6IG1f
dHJhbnNmb3JtKGEsIGIsIGMsIGQsIHR4LCB0eSkKK3sKK30KKworVHJhbnNmb3JtYXRpb25NYXRy
aXg6OlRyYW5zZm9ybWF0aW9uTWF0cml4KGNvbnN0IFBsYXRmb3JtVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1hdHJpeCkKKyAgICA6IG1fdHJhbnNmb3JtKG1hdHJpeCkKK3sKK30KKwordm9pZCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6c2V0TWF0cml4KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMs
IGRvdWJsZSBkLCBkb3VibGUgdHgsIGRvdWJsZSB0eSkKK3sKKyAgICBtX3RyYW5zZm9ybS5zZXRN
YXRyaXgoYSwgYiwgYywgZCwgdHgsIHR5KTsKK30KKwordm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6bWFwKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlKiB4MiwgZG91YmxlKiB5MikgY29uc3QK
K3sKKyAgICBxcmVhbCB0eDIsIHR5MjsKKyAgICBtX3RyYW5zZm9ybS5tYXAocXJlYWwoeCksIHFy
ZWFsKHkpLCAmdHgyLCAmdHkyKTsKKyAgICAqeDIgPSB0eDI7CisgICAgKnkyID0gdHkyOworfQor
CitJbnRSZWN0IFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBSZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNmb3JtLm1hcFJlY3QocmVjdCk7Cit9CisK
K0Zsb2F0UmVjdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNmb3JtLm1hcFJlY3QocmVjdCk7Cit9
CisKK2Jvb2wgVHJhbnNmb3JtYXRpb25NYXRyaXg6OmlzSWRlbnRpdHkoKSBjb25zdAoreworICAg
IHJldHVybiBtX3RyYW5zZm9ybS5pc0lkZW50aXR5KCk7Cit9CisKK2RvdWJsZSBUcmFuc2Zvcm1h
dGlvbk1hdHJpeDo6YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNmb3JtLm0xMSgpOwor
fQorCit2b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRBKGRvdWJsZSBhKQoreworICAgIG1f
dHJhbnNmb3JtLnNldE1hdHJpeChhLCBiKCksIGMoKSwgZCgpLCBlKCksIGYoKSk7Cit9CisKK2Rv
dWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6YigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJh
bnNmb3JtLm0xMigpOworfQorCit2b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRCKGRvdWJs
ZSBiKQoreworICAgIG1fdHJhbnNmb3JtLnNldE1hdHJpeChhKCksIGIsIGMoKSwgZCgpLCBlKCks
IGYoKSk7Cit9CisKK2RvdWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6YygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fdHJhbnNmb3JtLm0yMSgpOworfQorCit2b2lkIFRyYW5zZm9ybWF0aW9uTWF0
cml4OjpzZXRDKGRvdWJsZSBjKQoreworICAgIG1fdHJhbnNmb3JtLnNldE1hdHJpeChhKCksIGIo
KSwgYywgZCgpLCBlKCksIGYoKSk7Cit9CisKK2RvdWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNmb3JtLm0yMigpOworfQorCit2b2lkIFRy
YW5zZm9ybWF0aW9uTWF0cml4OjpzZXREKGRvdWJsZSBkKQoreworICAgIG1fdHJhbnNmb3JtLnNl
dE1hdHJpeChhKCksIGIoKSwgYygpLCBkLCBlKCksIGYoKSk7Cit9CisKK2RvdWJsZSBUcmFuc2Zv
cm1hdGlvbk1hdHJpeDo6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNmb3JtLmR4KCk7
Cit9CisKK3ZvaWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldEUoZG91YmxlIGUpCit7CisgICAg
bV90cmFuc2Zvcm0uc2V0TWF0cml4KGEoKSwgYigpLCBjKCksIGQoKSwgZSwgZigpKTsKK30KKwor
ZG91YmxlIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpmKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90
cmFuc2Zvcm0uZHkoKTsKK30KKwordm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0Rihkb3Vi
bGUgZikKK3sKKyAgICBtX3RyYW5zZm9ybS5zZXRNYXRyaXgoYSgpLCBiKCksIGMoKSwgZCgpLCBl
KCksIGYpOworfQorCit2b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZXNldCgpCit7CisgICAg
bV90cmFuc2Zvcm0ucmVzZXQoKTsKK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXgmIFRyYW5zZm9y
bWF0aW9uTWF0cml4OjpzY2FsZShkb3VibGUgc3gsIGRvdWJsZSBzeSkKK3sKKyAgICBtX3RyYW5z
Zm9ybS5zY2FsZShzeCwgc3kpOworICAgIHJldHVybiAqdGhpczsKK30KKworVHJhbnNmb3JtYXRp
b25NYXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0cml4Ojpyb3RhdGUoZG91YmxlIGQpCit7CisgICAg
bV90cmFuc2Zvcm0ucm90YXRlKGQpOworICAgIHJldHVybiAqdGhpczsKK30KKworVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0cml4Ojp0cmFuc2xhdGUoZG91YmxlIHR4LCBk
b3VibGUgdHkpCit7CisgICAgbV90cmFuc2Zvcm0udHJhbnNsYXRlKHR4LCB0eSk7CisgICAgcmV0
dXJuICp0aGlzOworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgVHJhbnNmb3JtYXRpb25NYXRy
aXg6OnNoZWFyKGRvdWJsZSBzeCwgZG91YmxlIHN5KQoreworICAgIG1fdHJhbnNmb3JtLnNoZWFy
KHN4LCBzeSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitkb3VibGUgVHJhbnNmb3JtYXRpb25N
YXRyaXg6OmRldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNmb3JtLmRldCgpOworfQor
CitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6aW52ZXJzZSgpIGNv
bnN0Cit7CisgICAgaWYoIWlzSW52ZXJ0aWJsZSgpKQorICAgICAgICByZXR1cm4gVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKTsKKworICAgIHJldHVybiBtX3RyYW5zZm9ybS5pbnZlcnRlZCgpOworfQor
CitUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0b3IgUU1hdHJpeCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fdHJhbnNmb3JtOworfQorCitib29sIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVy
YXRvcj09KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBvdGhlcikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV90cmFuc2Zvcm0gPT0gb3RoZXIubV90cmFuc2Zvcm07Cit9CisKK1RyYW5zZm9ybWF0
aW9uTWF0cml4JiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0b3IqPShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgb3RoZXIpCit7CisgICAgbV90cmFuc2Zvcm0gKj0gb3RoZXIubV90cmFu
c2Zvcm07CisgICAgcmV0dXJuICp0aGlzOworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0b3IqKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBv
dGhlcikKK3sKKyAgICByZXR1cm4gbV90cmFuc2Zvcm0gKiBvdGhlci5tX3RyYW5zZm9ybTsKK30K
KworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXgu
Y3BwCShyZXZpc2lvbiAzOTY2NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw3ICsx
NDgsNyBAQCBJbnRQb2ludCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUG9pbnQoCiB7CiAgICAg
ZG91YmxlIHgyLCB5MjsKICAgICBtYXAocG9pbnQueCgpLCBwb2ludC55KCksICZ4MiwgJnkyKTsK
LSAgICAKKwogICAgIC8vIFJvdW5kIHRoZSBwb2ludC4KICAgICByZXR1cm4gSW50UG9pbnQobHJv
dW5kKHgyKSwgbHJvdW5kKHkyKSk7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguaAkocmV2
aXNpb24gMzk2NjUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJh
bnNmb3JtYXRpb25NYXRyaXguaAkod29ya2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBAQAogICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIFRyYW5zZm9ybWF0aW9uTWF0cml4X2gKQEAgLTk5
LDggKzk5LDggQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXQoKTsKIAogICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtdWx0aXBseShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwotICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBzY2FsZShkb3VibGUpOyAKLSAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgc2NhbGUoZG91YmxlIHN4LCBkb3VibGUgc3kpOyAKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgc2NhbGUoZG91YmxlKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc2NhbGUoZG91
YmxlIHN4LCBkb3VibGUgc3kpOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzY2FsZU5vblVu
aWZvcm0oZG91YmxlIHN4LCBkb3VibGUgc3kpOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBy
b3RhdGUoZG91YmxlIGQpOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4JiByb3RhdGVGcm9tVmVj
dG9yKGRvdWJsZSB4LCBkb3VibGUgeSk7CkBAIC0xMTEsNyArMTExLDcgQEAgcHVibGljOgogICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBza2V3KGRvdWJsZSBhbmdsZVgsIGRvdWJsZSBhbmdsZVkp
OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBza2V3WChkb3VibGUgYW5nbGUpOwogICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBza2V3WShkb3VibGUgYW5nbGUpOwotIAorCiAgICAgZG91Ymxl
IGRldCgpIGNvbnN0OwogICAgIGJvb2wgaXNJbnZlcnRpYmxlKCkgY29uc3Q7CiAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggaW52ZXJzZSgpIGNvbnN0OwpAQCAtMTI2LDcgKzEyNiw3IEBAIHB1Ymxp
YzoKICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG90aGVy
KSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQogICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBvcGVyYXRvcio9KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggb3BlcmF0b3IqKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7
Ci0gICAgCisKIHByaXZhdGU6CiAjaWYgIVBMQVRGT1JNKFdYKSB8fCBVU0UoV1hHQykKICAgICBQ
bGF0Zm9ybVRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93eC9BZmZpbmVUcmFuc2Zvcm1XeC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9BZmZpbmVUcmFuc2Zvcm1XeC5jcHAJKHJldmlz
aW9uIDM5NjY1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9BZmZpbmVUcmFuc2Zv
cm1XeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcgS2V2aW4gT2xsaXZpZXIgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgot
Ci0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHd4L2Rl
ZnMuaD4KLSNpbmNsdWRlIDx3eC9ncmFwaGljcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LSNpZiBVU0UoV1hHQykKLVRyYW5zZm9ybWF0aW9uTWF0cml4OjpUcmFuc2Zvcm1hdGlvbk1hdHJp
eChjb25zdCBQbGF0Zm9ybUFmZmluZVRyYW5zZm9ybSYgbWF0cml4KQotewotICAgIG1fdHJhbnNm
b3JtID0gbWF0cml4OwotfQotI2VuZGlmCi0KLVRyYW5zZm9ybWF0aW9uTWF0cml4OjpUcmFuc2Zv
cm1hdGlvbk1hdHJpeChkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUgZCwgZG91
YmxlIGUsIGRvdWJsZSBmKQotewotI2lmIFVTRShXWEdDKQotICAgIHd4R3JhcGhpY3NSZW5kZXJl
ciogcmVuZGVyZXIgPSB3eEdyYXBoaWNzUmVuZGVyZXI6OkdldERlZmF1bHRSZW5kZXJlcigpOyAK
LSAgICBtX3RyYW5zZm9ybSA9IHJlbmRlcmVyLT5DcmVhdGVNYXRyaXgoKTsKLSNlbmRpZgotICAg
IHNldE1hdHJpeChhLCBiLCBjLCBkLCBlLCBmKTsKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRyaXg6
OlRyYW5zZm9ybWF0aW9uTWF0cml4KCkgCi17IAotICAgIC8vIE5COiBJZiB3ZSBldmVyIHN1cHBv
cnQgdXNpbmcgQ2Fpcm8gYmFja2VuZCBvbiBXaW4vTWFjLCB0aGlzIHdpbGwgbmVlZCB0byBiZQot
ICAgIC8vIGNoYW5nZWQgc29tZWhvdyAodGhvdWdoIEknbSBub3Qgc3VyZSBob3cgYXMgd2UgZG9u
J3QgaGF2ZSBhIHJlZmVyZW5jZSB0byB0aGUKLSAgICAvLyBncmFwaGljcyBjb250ZXh0IGhlcmUu
Ci0jaWYgVVNFKFdYR0MpCi0gICAgd3hHcmFwaGljc1JlbmRlcmVyKiByZW5kZXJlciA9IHd4R3Jh
cGhpY3NSZW5kZXJlcjo6R2V0RGVmYXVsdFJlbmRlcmVyKCk7IAotICAgIG1fdHJhbnNmb3JtID0g
cmVuZGVyZXItPkNyZWF0ZU1hdHJpeCgpOwotI2VuZGlmCi19Ci0KLVRyYW5zZm9ybWF0aW9uTWF0
cml4IFRyYW5zZm9ybWF0aW9uTWF0cml4OjppbnZlcnNlKCkgY29uc3QKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotdm9pZCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6c2V0TWF0cml4KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBk
b3VibGUgZSwgZG91YmxlIGYpCi17Ci0jaWYgVVNFKFdYR0MpCi0gICAgbV90cmFuc2Zvcm0uU2V0
KGEsIGIsIGMsIGQsIGUsIGYpOwotI2VuZGlmCi19Ci0KLXZvaWQgVHJhbnNmb3JtYXRpb25NYXRy
aXg6Om1hcChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSAqeDIsIGRvdWJsZSAqeTIpIGNvbnN0
IAoteyAKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1JbnRSZWN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4OjptYXBSZWN0KGNvbnN0IEludFJlY3QgJnJlY3QpIGNvbnN0Ci17Ci0jaWYgVVNFKFdY
R0MpCi0gICAgZG91YmxlIHgsIHksIHdpZHRoLCBoZWlnaHQ7Ci0gICAgeCA9IHJlY3QueCgpOwot
ICAgIHkgPSByZWN0LnkoKTsKLSAgICB3aWR0aCA9IHJlY3Qud2lkdGgoKTsKLSAgICBoZWlnaHQg
PSByZWN0LmhlaWdodCgpOwotICAgIAotICAgIG1fdHJhbnNmb3JtLlRyYW5zZm9ybVBvaW50KCZ4
LCAmeSk7Ci0gICAgbV90cmFuc2Zvcm0uVHJhbnNmb3JtRGlzdGFuY2UoJndpZHRoLCAmaGVpZ2h0
KTsKLSAgICByZXR1cm4gSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSNlbmRpZgotICAg
IHJldHVybiBJbnRSZWN0KCk7Ci19Ci0KLUZsb2F0UmVjdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
bWFwUmVjdChjb25zdCBGbG9hdFJlY3QgJnJlY3QpIGNvbnN0Ci17Ci0jaWYgVVNFKFdYR0MpCi0g
ICAgZG91YmxlIHgsIHksIHdpZHRoLCBoZWlnaHQ7Ci0gICAgeCA9IHJlY3QueCgpOwotICAgIHkg
PSByZWN0LnkoKTsKLSAgICB3aWR0aCA9IHJlY3Qud2lkdGgoKTsKLSAgICBoZWlnaHQgPSByZWN0
LmhlaWdodCgpOwotICAgIAotICAgIG1fdHJhbnNmb3JtLlRyYW5zZm9ybVBvaW50KCZ4LCAmeSk7
Ci0gICAgbV90cmFuc2Zvcm0uVHJhbnNmb3JtRGlzdGFuY2UoJndpZHRoLCAmaGVpZ2h0KTsKLSAg
ICByZXR1cm4gRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotI2VuZGlmCi0gICAgcmV0
dXJuIEZsb2F0UmVjdCgpOwotfQotCi0KLVRyYW5zZm9ybWF0aW9uTWF0cml4JiBUcmFuc2Zvcm1h
dGlvbk1hdHJpeDo6c2NhbGUoZG91YmxlIHN4LCBkb3VibGUgc3kpIAotewotI2lmIFVTRShXWEdD
KQotICAgIG1fdHJhbnNmb3JtLlNjYWxlKCh3eERvdWJsZSlzeCwgKHd4RG91YmxlKXN5KTsgCi0j
ZW5kaWYKLSAgICByZXR1cm4gKnRoaXM7IAotfQotCi12b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4
OjpyZXNldCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotVHJhbnNmb3JtYXRpb25N
YXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0cml4Ojpyb3RhdGUoZG91YmxlIGQpIAoteyAKLSNpZiBV
U0UoV1hHQykKLSAgICBtX3RyYW5zZm9ybS5Sb3RhdGUoKHd4RG91YmxlKWQpOyAKLSNlbmRpZgot
ICAgIHJldHVybiAqdGhpczsgCi19Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4JiBUcmFuc2Zvcm1h
dGlvbk1hdHJpeDo6dHJhbnNsYXRlKGRvdWJsZSB0eCwgZG91YmxlIHR5KSAKLXsgCi0jaWYgVVNF
KFdYR0MpCi0gICAgbV90cmFuc2Zvcm0uVHJhbnNsYXRlKCh3eERvdWJsZSl0eCwgKHd4RG91Ymxl
KXR5KTsgCi0jZW5kaWYKLSAgICByZXR1cm4gKnRoaXM7IAotfQotCi1UcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNoZWFyKGRvdWJsZSBzeCwgZG91YmxlIHN5KSAK
LXsgCi0gICAgbm90SW1wbGVtZW50ZWQoKTsgCi0gICAgcmV0dXJuICp0aGlzOyAKLX0KLQotVHJh
bnNmb3JtYXRpb25NYXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvcio9KGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBvdGhlcikgCi17IAotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuICp0aGlzOyAKLX0KLQotYm9vbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3Bl
cmF0b3I9PSAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggJm90aGVyKSBjb25zdAotewotI2lm
IFVTRShXWEdDKQotICAgIHJldHVybiBtX3RyYW5zZm9ybS5Jc0VxdWFsKCh3eEdyYXBoaWNzTWF0
cml4KW90aGVyKTsKLSNlbHNlCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLSNlbmRpZgotfQotCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6b3BlcmF0b3IqIChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCAmb3RoZXIpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gKnRoaXM7IC8vbV90cmFuc2Zvcm0gKiBvdGhl
ci5tX3RyYW5zZm9ybTsKLX0KLQotZG91YmxlIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpkZXQoKSBj
b25zdCAKLXsgCi0gICAgbm90SW1wbGVtZW50ZWQoKTsgCi0gICAgcmV0dXJuIDA7Ci19Ci0KLSNp
ZiBVU0UoV1hHQykKLVRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvciB3eEdyYXBoaWNzTWF0
cml4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90cmFuc2Zvcm07Ci19Ci0jZW5kaWYKLQotZG91
YmxlIFRyYW5zZm9ybWF0aW9uTWF0cml4OjphKCkgY29uc3QKLXsKLSAgICBkb3VibGUgYSA9IDA7
Ci0jaWYgVVNFKFdYR0MpCi0gICAgbV90cmFuc2Zvcm0uR2V0KCZhKTsKLSNlbmRpZgotICAgIHJl
dHVybiBhOwotfQotCi12b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRBKGRvdWJsZSBhKQot
ewotICAgIHNldE1hdHJpeChhLCBiKCksIGMoKSwgZCgpLCBlKCksIGYoKSk7Ci19Ci0KLWRvdWJs
ZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6YigpIGNvbnN0Ci17Ci0gICAgZG91YmxlIGIgPSAwOwot
I2lmIFVTRShXWEdDKQotICAgIG1fdHJhbnNmb3JtLkdldCgmYik7Ci0jZW5kaWYKLSAgICByZXR1
cm4gYjsKLX0KLQotdm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0Qihkb3VibGUgYikKLXsK
LSAgICBzZXRNYXRyaXgoYSgpLCBiLCBjKCksIGQoKSwgZSgpLCBmKCkpOwotfQotCi1kb3VibGUg
VHJhbnNmb3JtYXRpb25NYXRyaXg6OmMoKSBjb25zdAotewotICAgIGRvdWJsZSBjID0gMDsKLSNp
ZiBVU0UoV1hHQykKLSAgICBtX3RyYW5zZm9ybS5HZXQoJmMpOwotI2VuZGlmCi0gICAgcmV0dXJu
IGM7Ci19Ci0KLXZvaWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldEMoZG91YmxlIGMpCi17Ci0g
ICAgc2V0TWF0cml4KGEoKSwgYigpLCBjLCBkKCksIGUoKSwgZigpKTsKLX0KLQotZG91YmxlIFRy
YW5zZm9ybWF0aW9uTWF0cml4OjpkKCkgY29uc3QKLXsKLSAgICBkb3VibGUgZCA9IDA7Ci0jaWYg
VVNFKFdYR0MpCi0gICAgbV90cmFuc2Zvcm0uR2V0KCZkKTsKLSNlbmRpZgotICAgIHJldHVybiBk
OwotfQotCi12b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXREKGRvdWJsZSBkKQotewotICAg
IHNldE1hdHJpeChhKCksIGIoKSwgYygpLCBkLCBlKCksIGYoKSk7Ci19Ci0KLWRvdWJsZSBUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6ZSgpIGNvbnN0Ci17Ci0gICAgZG91YmxlIGUgPSAwOwotI2lmIFVT
RShXWEdDKQotICAgIG1fdHJhbnNmb3JtLkdldCgmZSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gZTsK
LX0KLQotdm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0RShkb3VibGUgZSkgCi17Ci0gICAg
c2V0TWF0cml4KGEoKSwgYigpLCBjKCksIGQoKSwgZSwgZigpKTsKLX0KLQotZG91YmxlIFRyYW5z
Zm9ybWF0aW9uTWF0cml4OjpmKCkgY29uc3QKLXsKLSAgICBkb3VibGUgZiA9IDA7Ci0jaWYgVVNF
KFdYR0MpCi0gICAgbV90cmFuc2Zvcm0uR2V0KCZmKTsKLSNlbmRpZgotICAgIHJldHVybiBmOwot
fQotCi12b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRGKGRvdWJsZSBmKQotewotICAgIHNl
dE1hdHJpeChhKCksIGIoKSwgYygpLCBkKCksIGUoKSwgZik7Ci19Ci0KLX0KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvVHJhbnNmb3JtYXRpb25NYXRyaXhXeC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9UcmFuc2Zvcm1hdGlvbk1hdHJp
eFd4LmNwcAkocmV2aXNpb24gMzk2NjUpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d3gvQWZmaW5lVHJhbnNmb3JtV3guY3BwOjM5NjY1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93eC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDI3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBLZXZpbiBPbGxpdmllciAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUg
PHN0ZGlvLmg+CisjaW5jbHVkZSA8d3gvZGVmcy5oPgorI2luY2x1ZGUgPHd4L2dyYXBoaWNzLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFVTRShXWEdDKQorVHJhbnNmb3JtYXRpb25N
YXRyaXg6OlRyYW5zZm9ybWF0aW9uTWF0cml4KGNvbnN0IFBsYXRmb3JtQWZmaW5lVHJhbnNmb3Jt
JiBtYXRyaXgpCit7CisgICAgbV90cmFuc2Zvcm0gPSBtYXRyaXg7Cit9CisjZW5kaWYKKworVHJh
bnNmb3JtYXRpb25NYXRyaXg6OlRyYW5zZm9ybWF0aW9uTWF0cml4KGRvdWJsZSBhLCBkb3VibGUg
YiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpCit7CisjaWYgVVNFKFdY
R0MpCisgICAgd3hHcmFwaGljc1JlbmRlcmVyKiByZW5kZXJlciA9IHd4R3JhcGhpY3NSZW5kZXJl
cjo6R2V0RGVmYXVsdFJlbmRlcmVyKCk7IAorICAgIG1fdHJhbnNmb3JtID0gcmVuZGVyZXItPkNy
ZWF0ZU1hdHJpeCgpOworI2VuZGlmCisgICAgc2V0TWF0cml4KGEsIGIsIGMsIGQsIGUsIGYpOwor
fQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6VHJhbnNmb3JtYXRpb25NYXRyaXgoKSAKK3sgCisg
ICAgLy8gTkI6IElmIHdlIGV2ZXIgc3VwcG9ydCB1c2luZyBDYWlybyBiYWNrZW5kIG9uIFdpbi9N
YWMsIHRoaXMgd2lsbCBuZWVkIHRvIGJlCisgICAgLy8gY2hhbmdlZCBzb21laG93ICh0aG91Z2gg
SSdtIG5vdCBzdXJlIGhvdyBhcyB3ZSBkb24ndCBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZQorICAg
IC8vIGdyYXBoaWNzIGNvbnRleHQgaGVyZS4KKyNpZiBVU0UoV1hHQykKKyAgICB3eEdyYXBoaWNz
UmVuZGVyZXIqIHJlbmRlcmVyID0gd3hHcmFwaGljc1JlbmRlcmVyOjpHZXREZWZhdWx0UmVuZGVy
ZXIoKTsgCisgICAgbV90cmFuc2Zvcm0gPSByZW5kZXJlci0+Q3JlYXRlTWF0cml4KCk7CisjZW5k
aWYKK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXggVHJhbnNmb3JtYXRpb25NYXRyaXg6OmludmVy
c2UoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuICp0aGlzOwor
fQorCit2b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRNYXRyaXgoZG91YmxlIGEsIGRvdWJs
ZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUgZikKK3sKKyNpZiBVU0Uo
V1hHQykKKyAgICBtX3RyYW5zZm9ybS5TZXQoYSwgYiwgYywgZCwgZSwgZik7CisjZW5kaWYKK30K
Kwordm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91
YmxlICp4MiwgZG91YmxlICp5MikgY29uc3QgCit7IAorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK0ludFJlY3QgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFJlY3QoY29uc3QgSW50UmVjdCAm
cmVjdCkgY29uc3QKK3sKKyNpZiBVU0UoV1hHQykKKyAgICBkb3VibGUgeCwgeSwgd2lkdGgsIGhl
aWdodDsKKyAgICB4ID0gcmVjdC54KCk7CisgICAgeSA9IHJlY3QueSgpOworICAgIHdpZHRoID0g
cmVjdC53aWR0aCgpOworICAgIGhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisgICAgCisgICAgbV90
cmFuc2Zvcm0uVHJhbnNmb3JtUG9pbnQoJngsICZ5KTsKKyAgICBtX3RyYW5zZm9ybS5UcmFuc2Zv
cm1EaXN0YW5jZSgmd2lkdGgsICZoZWlnaHQpOworICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHdp
ZHRoLCBoZWlnaHQpOworI2VuZGlmCisgICAgcmV0dXJuIEludFJlY3QoKTsKK30KKworRmxvYXRS
ZWN0IFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCAmcmVjdCkg
Y29uc3QKK3sKKyNpZiBVU0UoV1hHQykKKyAgICBkb3VibGUgeCwgeSwgd2lkdGgsIGhlaWdodDsK
KyAgICB4ID0gcmVjdC54KCk7CisgICAgeSA9IHJlY3QueSgpOworICAgIHdpZHRoID0gcmVjdC53
aWR0aCgpOworICAgIGhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisgICAgCisgICAgbV90cmFuc2Zv
cm0uVHJhbnNmb3JtUG9pbnQoJngsICZ5KTsKKyAgICBtX3RyYW5zZm9ybS5UcmFuc2Zvcm1EaXN0
YW5jZSgmd2lkdGgsICZoZWlnaHQpOworICAgIHJldHVybiBGbG9hdFJlY3QoeCwgeSwgd2lkdGgs
IGhlaWdodCk7CisjZW5kaWYKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisKKworVHJhbnNm
b3JtYXRpb25NYXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzY2FsZShkb3VibGUgc3gsIGRv
dWJsZSBzeSkgCit7CisjaWYgVVNFKFdYR0MpCisgICAgbV90cmFuc2Zvcm0uU2NhbGUoKHd4RG91
YmxlKXN4LCAod3hEb3VibGUpc3kpOyAKKyNlbmRpZgorICAgIHJldHVybiAqdGhpczsgCit9CisK
K3ZvaWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlc2V0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJv
dGF0ZShkb3VibGUgZCkgCit7IAorI2lmIFVTRShXWEdDKQorICAgIG1fdHJhbnNmb3JtLlJvdGF0
ZSgod3hEb3VibGUpZCk7IAorI2VuZGlmCisgICAgcmV0dXJuICp0aGlzOyAKK30KKworVHJhbnNm
b3JtYXRpb25NYXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0cml4Ojp0cmFuc2xhdGUoZG91YmxlIHR4
LCBkb3VibGUgdHkpIAoreyAKKyNpZiBVU0UoV1hHQykKKyAgICBtX3RyYW5zZm9ybS5UcmFuc2xh
dGUoKHd4RG91YmxlKXR4LCAod3hEb3VibGUpdHkpOyAKKyNlbmRpZgorICAgIHJldHVybiAqdGhp
czsgCit9CisKK1RyYW5zZm9ybWF0aW9uTWF0cml4JiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2hl
YXIoZG91YmxlIHN4LCBkb3VibGUgc3kpIAoreyAKKyAgICBub3RJbXBsZW1lbnRlZCgpOyAKKyAg
ICByZXR1cm4gKnRoaXM7IAorfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgVHJhbnNmb3JtYXRp
b25NYXRyaXg6Om9wZXJhdG9yKj0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG90aGVyKSAK
K3sgCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gKnRoaXM7IAorfQorCitib29s
IFRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvcj09IChjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCAmb3RoZXIpIGNvbnN0Cit7CisjaWYgVVNFKFdYR0MpCisgICAgcmV0dXJuIG1fdHJhbnNm
b3JtLklzRXF1YWwoKHd4R3JhcGhpY3NNYXRyaXgpb3RoZXIpOworI2Vsc2UKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworI2VuZGlmCit9CisKK1RyYW5zZm9ybWF0aW9u
TWF0cml4IFRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvciogKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4ICZvdGhlcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAq
dGhpczsgLy9tX3RyYW5zZm9ybSAqIG90aGVyLm1fdHJhbnNmb3JtOworfQorCitkb3VibGUgVHJh
bnNmb3JtYXRpb25NYXRyaXg6OmRldCgpIGNvbnN0IAoreyAKKyAgICBub3RJbXBsZW1lbnRlZCgp
OyAKKyAgICByZXR1cm4gMDsKK30KKworI2lmIFVTRShXWEdDKQorVHJhbnNmb3JtYXRpb25NYXRy
aXg6Om9wZXJhdG9yIHd4R3JhcGhpY3NNYXRyaXgoKSBjb25zdAoreworICAgIHJldHVybiBtX3Ry
YW5zZm9ybTsKK30KKyNlbmRpZgorCitkb3VibGUgVHJhbnNmb3JtYXRpb25NYXRyaXg6OmEoKSBj
b25zdAoreworICAgIGRvdWJsZSBhID0gMDsKKyNpZiBVU0UoV1hHQykKKyAgICBtX3RyYW5zZm9y
bS5HZXQoJmEpOworI2VuZGlmCisgICAgcmV0dXJuIGE7Cit9CisKK3ZvaWQgVHJhbnNmb3JtYXRp
b25NYXRyaXg6OnNldEEoZG91YmxlIGEpCit7CisgICAgc2V0TWF0cml4KGEsIGIoKSwgYygpLCBk
KCksIGUoKSwgZigpKTsKK30KKworZG91YmxlIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpiKCkgY29u
c3QKK3sKKyAgICBkb3VibGUgYiA9IDA7CisjaWYgVVNFKFdYR0MpCisgICAgbV90cmFuc2Zvcm0u
R2V0KCZiKTsKKyNlbmRpZgorICAgIHJldHVybiBiOworfQorCit2b2lkIFRyYW5zZm9ybWF0aW9u
TWF0cml4OjpzZXRCKGRvdWJsZSBiKQoreworICAgIHNldE1hdHJpeChhKCksIGIsIGMoKSwgZCgp
LCBlKCksIGYoKSk7Cit9CisKK2RvdWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6YygpIGNvbnN0
Cit7CisgICAgZG91YmxlIGMgPSAwOworI2lmIFVTRShXWEdDKQorICAgIG1fdHJhbnNmb3JtLkdl
dCgmYyk7CisjZW5kaWYKKyAgICByZXR1cm4gYzsKK30KKwordm9pZCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6c2V0Qyhkb3VibGUgYykKK3sKKyAgICBzZXRNYXRyaXgoYSgpLCBiKCksIGMsIGQoKSwg
ZSgpLCBmKCkpOworfQorCitkb3VibGUgVHJhbnNmb3JtYXRpb25NYXRyaXg6OmQoKSBjb25zdAor
eworICAgIGRvdWJsZSBkID0gMDsKKyNpZiBVU0UoV1hHQykKKyAgICBtX3RyYW5zZm9ybS5HZXQo
JmQpOworI2VuZGlmCisgICAgcmV0dXJuIGQ7Cit9CisKK3ZvaWQgVHJhbnNmb3JtYXRpb25NYXRy
aXg6OnNldEQoZG91YmxlIGQpCit7CisgICAgc2V0TWF0cml4KGEoKSwgYigpLCBjKCksIGQsIGUo
KSwgZigpKTsKK30KKworZG91YmxlIFRyYW5zZm9ybWF0aW9uTWF0cml4OjplKCkgY29uc3QKK3sK
KyAgICBkb3VibGUgZSA9IDA7CisjaWYgVVNFKFdYR0MpCisgICAgbV90cmFuc2Zvcm0uR2V0KCZl
KTsKKyNlbmRpZgorICAgIHJldHVybiBlOworfQorCit2b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4
OjpzZXRFKGRvdWJsZSBlKSAKK3sKKyAgICBzZXRNYXRyaXgoYSgpLCBiKCksIGMoKSwgZCgpLCBl
LCBmKCkpOworfQorCitkb3VibGUgVHJhbnNmb3JtYXRpb25NYXRyaXg6OmYoKSBjb25zdAorewor
ICAgIGRvdWJsZSBmID0gMDsKKyNpZiBVU0UoV1hHQykKKyAgICBtX3RyYW5zZm9ybS5HZXQoJmYp
OworI2VuZGlmCisgICAgcmV0dXJuIGY7Cit9CisKK3ZvaWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6
OnNldEYoZG91YmxlIGYpCit7CisgICAgc2V0TWF0cml4KGEoKSwgYigpLCBjKCksIGQoKSwgZSgp
LCBmKTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9UcmFuc2Zv
cm1hdGlvbk1hdHJpeFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3d4L1RyYW5zZm9ybWF0aW9uTWF0cml4V3guY3BwCShyZXZpc2lvbiAzOTY2NSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvVHJhbnNmb3JtYXRpb25NYXRyaXhXeC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgpAQCAtNDYsMTkgKzQ2LDE5IEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4
OjpUcmFuc2Zvcm1hdGlvbk1hdHIKIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpUcmFuc2Zvcm1hdGlv
bk1hdHJpeChkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIGUs
IGRvdWJsZSBmKQogewogI2lmIFVTRShXWEdDKQotICAgIHd4R3JhcGhpY3NSZW5kZXJlciogcmVu
ZGVyZXIgPSB3eEdyYXBoaWNzUmVuZGVyZXI6OkdldERlZmF1bHRSZW5kZXJlcigpOyAKKyAgICB3
eEdyYXBoaWNzUmVuZGVyZXIqIHJlbmRlcmVyID0gd3hHcmFwaGljc1JlbmRlcmVyOjpHZXREZWZh
dWx0UmVuZGVyZXIoKTsKICAgICBtX3RyYW5zZm9ybSA9IHJlbmRlcmVyLT5DcmVhdGVNYXRyaXgo
KTsKICNlbmRpZgogICAgIHNldE1hdHJpeChhLCBiLCBjLCBkLCBlLCBmKTsKIH0KIAotVHJhbnNm
b3JtYXRpb25NYXRyaXg6OlRyYW5zZm9ybWF0aW9uTWF0cml4KCkgCi17IAorVHJhbnNmb3JtYXRp
b25NYXRyaXg6OlRyYW5zZm9ybWF0aW9uTWF0cml4KCkKK3sKICAgICAvLyBOQjogSWYgd2UgZXZl
ciBzdXBwb3J0IHVzaW5nIENhaXJvIGJhY2tlbmQgb24gV2luL01hYywgdGhpcyB3aWxsIG5lZWQg
dG8gYmUKICAgICAvLyBjaGFuZ2VkIHNvbWVob3cgKHRob3VnaCBJJ20gbm90IHN1cmUgaG93IGFz
IHdlIGRvbid0IGhhdmUgYSByZWZlcmVuY2UgdG8gdGhlCiAgICAgLy8gZ3JhcGhpY3MgY29udGV4
dCBoZXJlLgogI2lmIFVTRShXWEdDKQotICAgIHd4R3JhcGhpY3NSZW5kZXJlciogcmVuZGVyZXIg
PSB3eEdyYXBoaWNzUmVuZGVyZXI6OkdldERlZmF1bHRSZW5kZXJlcigpOyAKKyAgICB3eEdyYXBo
aWNzUmVuZGVyZXIqIHJlbmRlcmVyID0gd3hHcmFwaGljc1JlbmRlcmVyOjpHZXREZWZhdWx0UmVu
ZGVyZXIoKTsKICAgICBtX3RyYW5zZm9ybSA9IHJlbmRlcmVyLT5DcmVhdGVNYXRyaXgoKTsKICNl
bmRpZgogfQpAQCAtNzYsOCArNzYsOCBAQCB2b2lkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRN
YXRyaXgoZG91CiAjZW5kaWYKIH0KIAotdm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwKGRv
dWJsZSB4LCBkb3VibGUgeSwgZG91YmxlICp4MiwgZG91YmxlICp5MikgY29uc3QgCi17IAordm9p
ZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlICp4
MiwgZG91YmxlICp5MikgY29uc3QKK3sKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCkBAIC04
OSw3ICs4OSw3IEBAIEludFJlY3QgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFJlY3QoY28KICAg
ICB5ID0gcmVjdC55KCk7CiAgICAgd2lkdGggPSByZWN0LndpZHRoKCk7CiAgICAgaGVpZ2h0ID0g
cmVjdC5oZWlnaHQoKTsKLSAgICAKKwogICAgIG1fdHJhbnNmb3JtLlRyYW5zZm9ybVBvaW50KCZ4
LCAmeSk7CiAgICAgbV90cmFuc2Zvcm0uVHJhbnNmb3JtRGlzdGFuY2UoJndpZHRoLCAmaGVpZ2h0
KTsKICAgICByZXR1cm4gSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKQEAgLTEwNSw3ICsx
MDUsNyBAQCBGbG9hdFJlY3QgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFJlY3QoCiAgICAgeSA9
IHJlY3QueSgpOwogICAgIHdpZHRoID0gcmVjdC53aWR0aCgpOwogICAgIGhlaWdodCA9IHJlY3Qu
aGVpZ2h0KCk7Ci0gICAgCisKICAgICBtX3RyYW5zZm9ybS5UcmFuc2Zvcm1Qb2ludCgmeCwgJnkp
OwogICAgIG1fdHJhbnNmb3JtLlRyYW5zZm9ybURpc3RhbmNlKCZ3aWR0aCwgJmhlaWdodCk7CiAg
ICAgcmV0dXJuIEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKQEAgLTExNCwxMiArMTE0
LDEyIEBAIEZsb2F0UmVjdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUmVjdCgKIH0KIAogCi1U
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNjYWxlKGRvdWJsZSBz
eCwgZG91YmxlIHN5KSAKK1RyYW5zZm9ybWF0aW9uTWF0cml4JiBUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6c2NhbGUoZG91YmxlIHN4LCBkb3VibGUgc3kpCiB7CiAjaWYgVVNFKFdYR0MpCi0gICAgbV90
cmFuc2Zvcm0uU2NhbGUoKHd4RG91YmxlKXN4LCAod3hEb3VibGUpc3kpOyAKKyAgICBtX3RyYW5z
Zm9ybS5TY2FsZSgod3hEb3VibGUpc3gsICh3eERvdWJsZSlzeSk7CiAjZW5kaWYKLSAgICByZXR1
cm4gKnRoaXM7IAorICAgIHJldHVybiAqdGhpczsKIH0KIAogdm9pZCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6cmVzZXQoKQpAQCAtMTI3LDMyICsxMjcsMzIgQEAgdm9pZCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6cmVzZXQoKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLVRyYW5zZm9ybWF0aW9u
TWF0cml4JiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cm90YXRlKGRvdWJsZSBkKSAKLXsgCitUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJvdGF0ZShkb3VibGUgZCkK
K3sKICNpZiBVU0UoV1hHQykKLSAgICBtX3RyYW5zZm9ybS5Sb3RhdGUoKHd4RG91YmxlKWQpOyAK
KyAgICBtX3RyYW5zZm9ybS5Sb3RhdGUoKHd4RG91YmxlKWQpOwogI2VuZGlmCi0gICAgcmV0dXJu
ICp0aGlzOyAKKyAgICByZXR1cm4gKnRoaXM7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4JiBU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6dHJhbnNsYXRlKGRvdWJsZSB0eCwgZG91YmxlIHR5KSAKLXsg
CitUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnRyYW5zbGF0ZShk
b3VibGUgdHgsIGRvdWJsZSB0eSkKK3sKICNpZiBVU0UoV1hHQykKLSAgICBtX3RyYW5zZm9ybS5U
cmFuc2xhdGUoKHd4RG91YmxlKXR4LCAod3hEb3VibGUpdHkpOyAKKyAgICBtX3RyYW5zZm9ybS5U
cmFuc2xhdGUoKHd4RG91YmxlKXR4LCAod3hEb3VibGUpdHkpOwogI2VuZGlmCi0gICAgcmV0dXJu
ICp0aGlzOyAKKyAgICByZXR1cm4gKnRoaXM7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4JiBU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2hlYXIoZG91YmxlIHN4LCBkb3VibGUgc3kpIAoteyAKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOyAKLSAgICByZXR1cm4gKnRoaXM7IAorVHJhbnNmb3JtYXRpb25N
YXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpzaGVhcihkb3VibGUgc3gsIGRvdWJsZSBzeSkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAqdGhpczsKIH0KIAotVHJhbnNm
b3JtYXRpb25NYXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvcio9KGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBvdGhlcikgCi17IAorVHJhbnNmb3JtYXRpb25NYXRyaXgmIFRy
YW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvcio9KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBvdGhlcikKK3sKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAqdGhpczsgCisg
ICAgcmV0dXJuICp0aGlzOwogfQogCiBib29sIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRv
cj09IChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCAmb3RoZXIpIGNvbnN0CkBAIC0xNzEsOSAr
MTcxLDkgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggVHJhbnNmb3JtYXRpb25NYXRyaQogICAgIHJl
dHVybiAqdGhpczsgLy9tX3RyYW5zZm9ybSAqIG90aGVyLm1fdHJhbnNmb3JtOwogfQogCi1kb3Vi
bGUgVHJhbnNmb3JtYXRpb25NYXRyaXg6OmRldCgpIGNvbnN0IAoteyAKLSAgICBub3RJbXBsZW1l
bnRlZCgpOyAKK2RvdWJsZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6ZGV0KCkgY29uc3QKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0yNDksNyArMjQ5LDcg
QEAgZG91YmxlIFRyYW5zZm9ybWF0aW9uTWF0cml4OjplKCkgY29uc3QKICAgICByZXR1cm4gZTsK
IH0KIAotdm9pZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0RShkb3VibGUgZSkgCit2b2lkIFRy
YW5zZm9ybWF0aW9uTWF0cml4OjpzZXRFKGRvdWJsZSBlKQogewogICAgIHNldE1hdHJpeChhKCks
IGIoKSwgYygpLCBkKCksIGUsIGYoKSk7CiB9Cg==
</data>
<flag name="review"
          id="12564"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>