<?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>15969</bug_id>
          
          <creation_ts>2007-11-13 06:58:43 -0800</creation_ts>
          <short_desc>Eliminate Editor::deleteRange()</short_desc>
          <delta_ts>2007-11-17 00:59:42 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>61076</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-13 06:58:43 -0800</bug_when>
    <thetext>There are a lot of deleteThisOrThat functions and classes around, too many to my liking. Editor::deleteRange() seems to be designed as a bottleneck/dispatcher for those, but doesn&apos;t help in my opinion:
- It&apos;s called incorrectly, as it doesn&apos;t work with ranges. It works with selections.
- It tries to unify too many different operations - as a result, it has to re-select what is already selected etc. Makes data flow hard to follow.
- It isn&apos;t a bottleneck anyway, as many code paths bypass it.

I think we can get rid of it. Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61077</commentid>
    <comment_count>1</comment_count>
      <attachid>17226</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-13 07:15:34 -0800</bug_when>
    <thetext>Created attachment 17226
proposed patch

I did notice that SelectionController was used improperly in one place here, but adding the needed functionality to Selection seemed too involved for this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61410</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-16 12:21:04 -0800</bug_when>
    <thetext>&gt; - It tries to unify too many different operations - as a result, it has to
&gt; re-select what is already selected etc. Makes data flow hard to follow.

Also, complicates fixing bugs that require deleting a range that&apos;s smaller than selection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61438</commentid>
    <comment_count>3</comment_count>
      <attachid>17226</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-11-16 20:16:11 -0800</bug_when>
    <thetext>Comment on attachment 17226
proposed patch

+    void yank();
+    void yankAndSelect();
+    void setMark();
+    void deleteToMark();
+    void selectToMark();
+    void swapWithMark();

I was hoping that at some point these would be added to platforms other that Macintosh. The mark ones, for example, don&apos;t rely on anything Macintosh-specific -- they just happen to be unused on other platforms at the moment. But people might later want to add key bindings for them, since they mimic emacs.

The yank ones simply rely on the existence of a kill ring, something that we could create a small platform-independent abstraction for, so the kill ring itself would be platform-specific, but the operations could be platform independent.

+    if (Frame* coreFrame = core([self _frame]))
+        coreFrame-&gt;editor()-&gt;swapWithMark();

A better way to handle these would be to add &quot;SwapWithMark&quot; to the named commands that Editor handles by adding it to the CommandMap. Then swapWithMark: could be added to the list of commands using the WEBCORE_COMMAND macro instead of having hand-written code to forward to a particular named command.

r=me, as-is, but I think this could be made even better</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61461</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-17 00:59:42 -0800</bug_when>
    <thetext>&gt; A better way to handle these would be to add &quot;SwapWithMark&quot; to the named
&gt; commands that Editor handles by adding it to the CommandMap.

Ah, that would definitely be better - I didn&apos;t understand the architecture well enough. I&apos;ll keep that in mind when working on editing next time.

Committed revision 27873.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17226</attachid>
            <date>2007-11-13 07:15:34 -0800</date>
            <delta_ts>2007-11-16 20:16:11 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>15969r1_patch.txt</filename>
            <type>text/plain</type>
            <size>22597</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzc1MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMDctMTEtMTMgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTY5CisgICAgICAgIEVs
aW1pbmF0ZSBFZGl0b3I6OmRlbGV0ZVJhbmdlKCkKKworICAgICAgICBObyBjaGFuZ2UgaW4gZnVu
Y3Rpb25hbGl0eS4KKworICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaDog
UmVtb3ZlZCB1bmltcGxlbWVudGVkIGRlbGV0ZUtleVByZXNzZWQoKS4KKworICAgICAgICAqIGVk
aXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGVsZXRlV2l0aERp
cmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmN1dCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnBlcmZvcm1EZWxldGUpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6
CisgICAgICAgIE1vdmVkIHJlbGV2YW50IEVkaXRvcjo6ZGVsZXRlUmFuZ2UoKSBmdW5jdGlvbmFs
aXR5IHRvIGl0cyBjYWxsZXJzLgorICAgICAgICBSZW1vdmVkIGRlbGV0ZVNlbGVjdGlvbldpdGhT
bWFydERlbGV0ZSh2b2lkKSwgd2hpY2ggd2FzIG1vcmUgY29uZnVzaW5nIHRoYW4gaGVscGZ1bAor
ICAgICAgICBpbiBteSBvcGluaW9uLgorCisgICAgICAgICogZWRpdGluZy9tYWMvRWRpdG9yTWFj
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZUtpbGxSaW5nSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjphZGRUb0tpbGxSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6eWFuayk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnlhbmtBbmRTZWxlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRNYXJrKToKKyAgICAgICAgKFdlYkNvcmU6
OnVuaW9uRE9NUmFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGVsZXRlVG9NYXJr
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0VG9NYXJrKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6c3dhcFdpdGhNYXJrKToKKyAgICAgICAgUHVzaGVkIGtpbGwgcmluZyBo
YW5kbGluZyBkb3duIGZyb20gV2ViQ29yZS4KKworICAgICAgICAqIHBhZ2UvbWFjL1dlYkNvcmVG
cmFtZUJyaWRnZS5oOgorICAgICAgICAqIHBhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbToK
KyAgICAgICAgUmVtb3ZlZCBzZXRNYXJrRE9NUmFuZ2UgKHRoZSBjb3JyZXNwb25kaW5nIGdldHRl
ciBpcyBzdGlsbCBuZWVkZWQpLgorCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDogTm8gbG9u
Z2VyIG5lZWQgdG8gZXhwb3J0IEVkaXRvcjo6ZGVsZXRlUmFuZ2UoKSBhbmQgRWRpdG9yOjppbnNl
cnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQoKS4KKyAgICAgICAgRXhwb3J0IHRoZSBuZXcg
a2lsbCByaW5nIGZ1bmN0aW9ucy4KKwogMjAwNy0xMS0xMiAgQWxleGV5IFByb3NrdXJ5YWtvdiAg
PGFwQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4uCkluZGV4OiBXZWJD
b3JlL1dlYkNvcmUuYmFzZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCShyZXZpc2lvbiAyNzc0NSkKKysrIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkod29ya2lu
ZyBjb3B5KQpAQCAtNDA3LDcgKzQwNyw2IEBAIF9fWk43V2ViQ29yZTVlcXVhbEVQS05TXzEwU3Ry
aW5nSW1wbEVTMl8KIF9fWk43V2ViQ29yZTZFZGl0b3IxMGFwcGx5U3R5bGVFUE5TXzE5Q1NTU3R5
bGVEZWNsYXJhdGlvbkVOU18xMEVkaXRBY3Rpb25FCiBfX1pON1dlYkNvcmU2RWRpdG9yMTBpbnNl
cnRUZXh0RVJLTlNfNlN0cmluZ0VQTlNfNUV2ZW50RQogX19aTjdXZWJDb3JlNkVkaXRvcjExY2Fu
REhUTUxDdXRFdgotX19aTjdXZWJDb3JlNkVkaXRvcjExZGVsZXRlUmFuZ2VFUE5TXzVSYW5nZUVi
YmJOU18xOEVkaXRvckRlbGV0ZUFjdGlvbkVOU18xNVRleHRHcmFudWxhcml0eUUKIF9fWk43V2Vi
Q29yZTZFZGl0b3IxMWV4ZWNDb21tYW5kRVJLTlNfMTJBdG9taWNTdHJpbmdFUE5TXzVFdmVudEUK
IF9fWk43V2ViQ29yZTZFZGl0b3IxMXRyeURIVE1MQ3V0RXYKIF9fWk43V2ViQ29yZTZFZGl0b3Ix
MmNhbkRIVE1MQ29weUV2CkBAIC00MzUsNyArNDM0LDEyIEBAIF9fWk43V2ViQ29yZTZFZGl0b3Iz
MGFwcGx5UGFyYWdyYXBoU3R5bGUKIF9fWk43V2ViQ29yZTZFZGl0b3IzMGRlbGV0ZVNlbGVjdGlv
bldpdGhTbWFydERlbGV0ZUViCiBfX1pON1dlYkNvcmU2RWRpdG9yMzJndWVzc2VzRm9yVW5ncmFt
bWF0aWNhbFNlbGVjdGlvbkV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMzNpbmNyZWFzZVNlbGVjdGlv
bkxpc3RMZXZlbE9yZGVyZWRFdgotX19aTjdXZWJDb3JlNkVkaXRvcjMzaW5zZXJ0VGV4dFdpdGhv
dXRTZW5kaW5nVGV4dEV2ZW50RVJLTlNfNlN0cmluZ0ViUE5TXzVFdmVudEUKK19fWk43V2ViQ29y
ZTZFZGl0b3IxMmRlbGV0ZVRvTWFya0V2CitfX1pON1dlYkNvcmU2RWRpdG9yMTJzZWxlY3RUb01h
cmtFdgorX19aTjdXZWJDb3JlNkVkaXRvcjEyc3dhcFdpdGhNYXJrRXYKK19fWk43V2ViQ29yZTZF
ZGl0b3IxM3lhbmtBbmRTZWxlY3RFdgorX19aTjdXZWJDb3JlNkVkaXRvcjR5YW5rRXYKK19fWk43
V2ViQ29yZTZFZGl0b3I3c2V0TWFya0V2CiBfX1pON1dlYkNvcmU2RWRpdG9yMzVpbmNyZWFzZVNl
bGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMzVzZXRJZ25v
cmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZUViCiBfX1pON1dlYkNvcmU2RWRpdG9yM2N1dEV2
CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAkocmV2aXNpb24gMjc3
NDUpCisrKyBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAkod29ya2luZyBj
b3B5KQpAQCAtNTAsNyArNTAsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBhcHBseVN0eWxlKENT
U1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9u
JiBlbmQsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uQ2hhbmdlQXR0cmlidXRlcyk7CiAgICAgdm9p
ZCBhcHBseVN0eWxlZEVsZW1lbnQoRWxlbWVudCopOwogICAgIHZvaWQgcmVtb3ZlU3R5bGVkRWxl
bWVudChFbGVtZW50Kik7Ci0gICAgdm9pZCBkZWxldGVLZXlQcmVzc2VkKCk7CiAgICAgdm9pZCBk
ZWxldGVTZWxlY3Rpb24oYm9vbCBzbWFydERlbGV0ZSA9IGZhbHNlLCBib29sIG1lcmdlQmxvY2tz
QWZ0ZXJEZWxldGUgPSB0cnVlLCBib29sIHJlcGxhY2UgPSBmYWxzZSwgYm9vbCBleHBhbmRGb3JT
cGVjaWFsRWxlbWVudHMgPSB0cnVlKTsKICAgICB2b2lkIGRlbGV0ZVNlbGVjdGlvbihjb25zdCBT
ZWxlY3Rpb24mLCBib29sIHNtYXJ0RGVsZXRlID0gZmFsc2UsIGJvb2wgbWVyZ2VCbG9ja3NBZnRl
ckRlbGV0ZSA9IHRydWUsIGJvb2wgcmVwbGFjZSA9IGZhbHNlLCBib29sIGV4cGFuZEZvclNwZWNp
YWxFbGVtZW50cyA9IHRydWUpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0RnJvbU5vZGUo
VGV4dCogbm9kZSwgaW50IG9mZnNldCwgaW50IGNvdW50KTsKSW5kZXg6IFdlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCShy
ZXZpc2lvbiAyNzc0NSkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzIsNDMgKzIzMiw2IEBAIGJvb2wgRWRpdG9yOjpjYW5TbWFydENvcHlPckRlbGV0
ZSgpCiAgICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zbWFydEluc2VydERlbGV0ZUVu
YWJsZWQoKSAmJiBtX2ZyYW1lLT5zZWxlY3Rpb25HcmFudWxhcml0eSgpID09IFdvcmRHcmFudWxh
cml0eTsKIH0KIAotdm9pZCBFZGl0b3I6OmRlbGV0ZVJhbmdlKFJhbmdlKiByYW5nZSwgYm9vbCBr
aWxsUmluZywgYm9vbCBwcmVwZW5kLCBib29sIHNtYXJ0RGVsZXRlT0ssIEVkaXRvckRlbGV0ZUFj
dGlvbiBkZWxldGlvbkFjdGlvbiwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQotewotICAg
IGlmIChraWxsUmluZykKLSAgICAgICAgYWRkVG9LaWxsUmluZyhyYW5nZSwgcHJlcGVuZCk7Ci0K
LSAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb25Db250cm9sbGVyID0gbV9mcmFtZS0+
c2VsZWN0aW9uQ29udHJvbGxlcigpOwotICAgIGJvb2wgc21hcnREZWxldGUgPSBzbWFydERlbGV0
ZU9LICYmIGNhblNtYXJ0Q29weU9yRGVsZXRlKCk7Ci0gICAgc3dpdGNoIChkZWxldGlvbkFjdGlv
bikgewotICAgICAgICBjYXNlIGRlbGV0ZVNlbGVjdGlvbkFjdGlvbjoKLSAgICAgICAgICAgIGlm
ICghc2VsZWN0aW9uQ29udHJvbGxlci0+c2V0U2VsZWN0ZWRSYW5nZShyYW5nZSwgRE9XTlNUUkVB
TSwgdHJ1ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgZGVsZXRlU2Vs
ZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKHNtYXJ0RGVsZXRlKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIGRlbGV0ZUtleUFjdGlvbjoKLSAgICAgICAgICAgIGlmICghc2VsZWN0aW9u
Q29udHJvbGxlci0+c2V0U2VsZWN0ZWRSYW5nZShyYW5nZSwgRE9XTlNUUkVBTSwgKGdyYW51bGFy
aXR5ICE9IENoYXJhY3RlckdyYW51bGFyaXR5KSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBU
eXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKG1fZnJhbWUtPmRvY3VtZW50KCksIHNtYXJ0
RGVsZXRlLCBncmFudWxhcml0eSk7Ci0gICAgICAgICAgICAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0
ZXJFZGl0aW5nT3BlcmF0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBmb3J3YXJkRGVsZXRlS2V5QWN0aW9uOgotICAgICAgICAgICAgaWYgKCFz
ZWxlY3Rpb25Db250cm9sbGVyLT5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLCBET1dOU1RSRUFNLCAo
Z3JhbnVsYXJpdHkgIT0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkpKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSkgewotICAgICAgICAg
ICAgICAgIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKG1fZnJhbWUtPmRv
Y3VtZW50KCksIHNtYXJ0RGVsZXRlLCBncmFudWxhcml0eSk7Ci0gICAgICAgICAgICAgICAgcmV2
ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICAvLyBjbGVhciB0aGUgInN0YXJ0IG5ldyBraWxs
IHJpbmcgc2VxdWVuY2UiIHNldHRpbmcsIGJlY2F1c2UgaXQgd2FzIHNldCB0byB0cnVlCi0gICAg
Ly8gd2hlbiB0aGUgc2VsZWN0aW9uIHdhcyB1cGRhdGVkIGJ5IGRlbGV0aW5nIHRoZSByYW5nZQot
ICAgIGlmIChraWxsUmluZykKLSAgICAgICAgc2V0U3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlKGZh
bHNlKTsKLX0KLQogYm9vbCBFZGl0b3I6OmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uQ29u
dHJvbGxlcjo6RURpcmVjdGlvbiBkaXJlY3Rpb24sIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0
eSwgYm9vbCBraWxsUmluZywgYm9vbCBpc1R5cGluZ0FjdGlvbikKIHsKICAgICAvLyBEZWxldGUg
dGhlIHNlbGVjdGlvbiwgaWYgdGhlcmUgaXMgb25lLgpAQCAtMjc3LDQ3ICsyNDAsNTYgQEAgYm9v
bCBFZGl0b3I6OmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aQogICAgIGlmICghY2FuRWRpdCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwotICAg
IEVkaXRvckRlbGV0ZUFjdGlvbiBkZWxldGlvbkFjdGlvbiA9IGRlbGV0ZVNlbGVjdGlvbkFjdGlv
bjsKLQotICAgIGJvb2wgc21hcnREZWxldGVPSyA9IGZhbHNlOwotICAgIAogICAgIGlmIChtX2Zy
YW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPmlzUmFuZ2UoKSkgewotICAgICAgICByYW5nZSA9
IHNlbGVjdGVkUmFuZ2UoKTsKLSAgICAgICAgc21hcnREZWxldGVPSyA9IHRydWU7Ci0gICAgICAg
IGlmIChpc1R5cGluZ0FjdGlvbikKLSAgICAgICAgICAgIGRlbGV0aW9uQWN0aW9uID0gZGVsZXRl
S2V5QWN0aW9uOworICAgICAgICBpZiAoa2lsbFJpbmcpCisgICAgICAgICAgICBhZGRUb0tpbGxS
aW5nKHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgZmFsc2UpOworICAgICAgICBpZiAoaXNUeXBpbmdB
Y3Rpb24pIHsKKyAgICAgICAgICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpKSB7CisgICAgICAg
ICAgICAgICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChtX2ZyYW1lLT5kb2N1bWVu
dCgpLCB0cnVlLCBncmFudWxhcml0eSk7CisgICAgICAgICAgICAgICAgcmV2ZWFsU2VsZWN0aW9u
QWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBkZWxldGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGUoY2FuU21hcnRDb3B5
T3JEZWxldGUoKSk7CisgICAgICAgICAgICAvLyBJbXBsaWNpdGx5IGNhbGxzIHJldmVhbFNlbGVj
dGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpLgorICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb25Db250cm9sbGVyOwotICAgICAgICBz
ZWxlY3Rpb25Db250cm9sbGVyLnNldFNlbGVjdGlvbihtX2ZyYW1lLT5zZWxlY3Rpb25Db250cm9s
bGVyKCktPnNlbGVjdGlvbigpKTsKLSAgICAgICAgc2VsZWN0aW9uQ29udHJvbGxlci5tb2RpZnko
U2VsZWN0aW9uQ29udHJvbGxlcjo6RVhURU5ELCBkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKLSAg
ICAgICAgaWYgKGtpbGxSaW5nICYmIHNlbGVjdGlvbkNvbnRyb2xsZXIuaXNDYXJldCgpICYmIGdy
YW51bGFyaXR5ICE9IENoYXJhY3RlckdyYW51bGFyaXR5KQotICAgICAgICAgICAgc2VsZWN0aW9u
Q29udHJvbGxlci5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6RVhURU5ELCBkaXJlY3Rpb24s
IENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxl
Y3Rpb25Ub0RlbGV0ZTsKKyAgICAgICAgc2VsZWN0aW9uVG9EZWxldGUuc2V0U2VsZWN0aW9uKG1f
ZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+c2VsZWN0aW9uKCkpOworICAgICAgICBzZWxl
Y3Rpb25Ub0RlbGV0ZS5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6RVhURU5ELCBkaXJlY3Rp
b24sIGdyYW51bGFyaXR5KTsKKyAgICAgICAgaWYgKGtpbGxSaW5nICYmIHNlbGVjdGlvblRvRGVs
ZXRlLmlzQ2FyZXQoKSAmJiBncmFudWxhcml0eSAhPSBDaGFyYWN0ZXJHcmFudWxhcml0eSkKKyAg
ICAgICAgICAgIHNlbGVjdGlvblRvRGVsZXRlLm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpF
WFRFTkQsIGRpcmVjdGlvbiwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOworCisgICAgICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb25Ub0RlbGV0ZS50b1JhbmdlKCk7CisKKyAgICAgICAg
aWYgKGtpbGxSaW5nKQorICAgICAgICAgICAgYWRkVG9LaWxsUmluZyhyYW5nZS5nZXQoKSwgZmFs
c2UpOworCisgICAgICAgIGlmICghbV9mcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5zZXRT
ZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBET1dOU1RSRUFNLCAoZ3JhbnVsYXJpdHkgIT0gQ2hh
cmFjdGVyR3JhbnVsYXJpdHkpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAg
IHJhbmdlID0gc2VsZWN0aW9uQ29udHJvbGxlci50b1JhbmdlKCk7Ci0gICAgICAgIAogICAgICAg
ICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgICAgICAgICAgY2FzZSBTZWxlY3Rpb25Db250cm9s
bGVyOjpGT1JXQVJEOgogICAgICAgICAgICAgY2FzZSBTZWxlY3Rpb25Db250cm9sbGVyOjpSSUdI
VDoKLSAgICAgICAgICAgICAgICBkZWxldGlvbkFjdGlvbiA9IGZvcndhcmREZWxldGVLZXlBY3Rp
b247CisgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgICAg
ICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKG1fZnJhbWUt
PmRvY3VtZW50KCksIGZhbHNlLCBncmFudWxhcml0eSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkJBQ0tXQVJEOgogICAgICAg
ICAgICAgY2FzZSBTZWxlY3Rpb25Db250cm9sbGVyOjpMRUZUOgotICAgICAgICAgICAgICAgIGRl
bGV0aW9uQWN0aW9uID0gZGVsZXRlS2V5QWN0aW9uOworICAgICAgICAgICAgICAgIGlmIChtX2Zy
YW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgICAgICAgICBUeXBpbmdDb21tYW5kOjpkZWxl
dGVLZXlQcmVzc2VkKG1fZnJhbWUtPmRvY3VtZW50KCksIGZhbHNlLCBncmFudWxhcml0eSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgcmV2ZWFsU2VsZWN0aW9u
QWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAgICAgfQogCi0gICAgZGVsZXRlUmFuZ2UocmFuZ2Uu
Z2V0KCksIGtpbGxSaW5nLCBmYWxzZSwgc21hcnREZWxldGVPSywgZGVsZXRpb25BY3Rpb24sIGdy
YW51bGFyaXR5KTsKKyAgICAvLyBjbGVhciB0aGUgInN0YXJ0IG5ldyBraWxsIHJpbmcgc2VxdWVu
Y2UiIHNldHRpbmcsIGJlY2F1c2UgaXQgd2FzIHNldCB0byB0cnVlCisgICAgLy8gd2hlbiB0aGUg
c2VsZWN0aW9uIHdhcyB1cGRhdGVkIGJ5IGRlbGV0aW5nIHRoZSByYW5nZQorICAgIGlmIChraWxs
UmluZykKKyAgICAgICAgc2V0U3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlKGZhbHNlKTsKIAogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIEVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0
RGVsZXRlKCkKLXsKLSAgICBkZWxldGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGUoY2FuU21hcnRD
b3B5T3JEZWxldGUoKSk7Ci19Ci0KIHZvaWQgRWRpdG9yOjpkZWxldGVTZWxlY3Rpb25XaXRoU21h
cnREZWxldGUoYm9vbCBzbWFydERlbGV0ZSkKIHsKICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9u
Q29udHJvbGxlcigpLT5pc05vbmUoKSkKQEAgLTE0NzYsNyArMTQ0OCw3IEBAIHZvaWQgRWRpdG9y
OjpjdXQoKQogICAgIGlmIChzaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24uZ2V0KCkpKSB7CiAg
ICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPndyaXRlU2VsZWN0aW9uKHNl
bGVjdGlvbi5nZXQoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgbV9mcmFtZSk7CiAgICAgICAg
IGRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCk7Ci0gICAgICAgIGRlbGV0ZVNlbGVjdGlv
bldpdGhTbWFydERlbGV0ZSgpOworICAgICAgICBkZWxldGVTZWxlY3Rpb25XaXRoU21hcnREZWxl
dGUoY2FuU21hcnRDb3B5T3JEZWxldGUoKSk7CiAgICAgfQogfQogCkBAIC0xNTM1LDcgKzE1MDcs
MTMgQEAgdm9pZCBFZGl0b3I6OnBlcmZvcm1EZWxldGUoKQogICAgICAgICBzeXN0ZW1CZWVwKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgZGVsZXRlUmFuZ2Uoc2VsZWN0ZWRSYW5nZSgp
LmdldCgpLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZGVsZXRlU2VsZWN0aW9uQWN0aW9uLCBDaGFyYWN0
ZXJHcmFudWxhcml0eSk7CisKKyAgICBhZGRUb0tpbGxSaW5nKHNlbGVjdGVkUmFuZ2UoKS5nZXQo
KSwgZmFsc2UpOworICAgIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShjYW5TbWFydENv
cHlPckRlbGV0ZSgpKTsKKworICAgIC8vIGNsZWFyIHRoZSAic3RhcnQgbmV3IGtpbGwgcmluZyBz
ZXF1ZW5jZSIgc2V0dGluZywgYmVjYXVzZSBpdCB3YXMgc2V0IHRvIHRydWUKKyAgICAvLyB3aGVu
IHRoZSBzZWxlY3Rpb24gd2FzIHVwZGF0ZWQgYnkgZGVsZXRpbmcgdGhlIHJhbmdlCisgICAgc2V0
U3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlKGZhbHNlKTsKIH0KIAogdm9pZCBFZGl0b3I6OmNvcHlV
UkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKQpJbmRleDogV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAko
cmV2aXNpb24gMjc3NDUpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNyw5ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRMYXN0RWRpdENvbW1h
bmQoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4gbGFzdEVkaXRDb21tYW5kKTsKIAogICAgIGJvb2wg
ZGVsZXRlV2l0aERpcmVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyOjpFRGlyZWN0aW9uLCBUZXh0
R3JhbnVsYXJpdHksIGJvb2wga2lsbFJpbmcsIGJvb2wgaXNUeXBpbmdBY3Rpb24pOwotICAgIHZv
aWQgZGVsZXRlUmFuZ2UoUmFuZ2UqLCBib29sIGtpbGxSaW5nLCBib29sIHByZXBlbmQsIGJvb2wg
c21hcnREZWxldGVPSywgRWRpdG9yRGVsZXRlQWN0aW9uLCBUZXh0R3JhbnVsYXJpdHkpOwogICAg
IHZvaWQgZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGJvb2wgc21hcnREZWxldGUpOwot
ICAgIHZvaWQgZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKCk7CiAgICAgYm9vbCBkaXNw
YXRjaENQUEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYsIENsaXBib2FyZEFjY2Vzc1BvbGljeSk7
CiAgICAgCiAgICAgTm9kZSogcmVtb3ZlZEFuY2hvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVtb3Zl
ZEFuY2hvci5nZXQoKTsgfQpAQCAtMjI3LDYgKzIyNSwxNCBAQCBwdWJsaWM6CiAKICNpZiBQTEFU
Rk9STShNQUMpCiAgICAgTlNTdHJpbmcqIHVzZXJWaXNpYmxlU3RyaW5nKE5TVVJMKik7CisKKyAg
ICB2b2lkIHlhbmsoKTsKKyAgICB2b2lkIHlhbmtBbmRTZWxlY3QoKTsKKyAgICB2b2lkIHNldE1h
cmsoKTsKKyAgICB2b2lkIGRlbGV0ZVRvTWFyaygpOworICAgIHZvaWQgc2VsZWN0VG9NYXJrKCk7
CisgICAgdm9pZCBzd2FwV2l0aE1hcmsoKTsKKwogI2VuZGlmCiAKICAgICBQYXNzUmVmUHRyPFJh
bmdlPiByYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCk7CkluZGV4OiBX
ZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Vk
aXRpbmcvbWFjL0VkaXRvck1hYy5tbQkocmV2aXNpb24gMjc3NDUpCisrKyBXZWJDb3JlL2VkaXRp
bmcvbWFjL0VkaXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2lt
cG9ydCAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbXBvcnQgIlNlbGVjdGlvbi5oIgogI2ltcG9ydCAi
U2VsZWN0aW9uQ29udHJvbGxlci5oIgorI2ltcG9ydCAiU291bmQuaCIKICNpbXBvcnQgIlR5cGlu
Z0NvbW1hbmQuaCIKICNpbXBvcnQgIlRleHRJdGVyYXRvci5oIgogI2ltcG9ydCAiaHRtbGVkaXRp
bmcuaCIKQEAgLTQ2LDExICs0NywxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGV4dGVybiAi
QyIgewogCi0vLyBLaWxsIHJpbmcgY2FsbHMuIFdvdWxkIGJlIGJldHRlciB0byB1c2UgTlNLaWxs
UmluZy5oLCBidXQgdGhhdCdzIG5vdCBhdmFpbGFibGUgaW4gU1BJLgorLy8gS2lsbCByaW5nIGNh
bGxzLiBXb3VsZCBiZSBiZXR0ZXIgdG8gdXNlIE5TS2lsbFJpbmcuaCwgYnV0IHRoYXQncyBub3Qg
YXZhaWxhYmxlIGFzIEFQSSBvciBTUEkuCiAKK3ZvaWQgX05TSW5pdGlhbGl6ZUtpbGxSaW5nKCk7
CiB2b2lkIF9OU0FwcGVuZFRvS2lsbFJpbmcoTlNTdHJpbmcgKik7CiB2b2lkIF9OU1ByZXBlbmRU
b0tpbGxSaW5nKE5TU3RyaW5nICopOwotdm9pZCBfTlNOZXdLaWxsUmluZ1NlcXVlbmNlKHZvaWQp
OworTlNTdHJpbmcgKl9OU1lhbmtGcm9tS2lsbFJpbmcoKTsKK05TU3RyaW5nICpfTlNZYW5rUHJl
dmlvdXNGcm9tS2lsbFJpbmcoKTsKK3ZvaWQgX05TTmV3S2lsbFJpbmdTZXF1ZW5jZSgpOwordm9p
ZCBfTlNTZXRLaWxsUmluZ1RvWWFua2VkU3RhdGUoKTsKK3ZvaWQgX05TUmVzZXRLaWxsUmluZ09w
ZXJhdGlvbkZsYWcoKTsKKwogfQogCiBQYXNzUmVmUHRyPENsaXBib2FyZD4gRWRpdG9yOjpuZXdH
ZW5lcmFsQ2xpcGJvYXJkKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3kpCkBAIC01OCw2ICs2
NSwxNSBAQCBQYXNzUmVmUHRyPENsaXBib2FyZD4gRWRpdG9yOjpuZXdHZW5lcmFsCiAgICAgcmV0
dXJuIG5ldyBDbGlwYm9hcmRNYWMoZmFsc2UsIFtOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9h
cmRdLCBwb2xpY3kpOwogfQogCitzdGF0aWMgdm9pZCBpbml0aWFsaXplS2lsbFJpbmdJZk5lZWRl
ZCgpCit7CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWRLaWxsUmluZyA9IGZhbHNlOworICAg
IGlmICghaW5pdGlhbGl6ZWRLaWxsUmluZykgeworICAgICAgICBpbml0aWFsaXplZEtpbGxSaW5n
ID0gdHJ1ZTsKKyAgICAgICAgX05TSW5pdGlhbGl6ZUtpbGxSaW5nKCk7CisgICAgfQorfQorCiBO
U1N0cmluZyogRWRpdG9yOjp1c2VyVmlzaWJsZVN0cmluZyhOU1VSTCogbnNVUkwpCiB7CiAgICAg
aWYgKGNsaWVudCgpKQpAQCAtNjcsNiArODMsOCBAQCBOU1N0cmluZyogRWRpdG9yOjp1c2VyVmlz
aWJsZVN0cmluZyhOU1VSCiAKIHZvaWQgRWRpdG9yOjphZGRUb0tpbGxSaW5nKFJhbmdlKiByYW5n
ZSwgYm9vbCBwcmVwZW5kKQogeworICAgIGluaXRpYWxpemVLaWxsUmluZ0lmTmVlZGVkKCk7CisK
ICAgICBpZiAobV9zdGFydE5ld0tpbGxSaW5nU2VxdWVuY2UpCiAgICAgICAgIF9OU05ld0tpbGxS
aW5nU2VxdWVuY2UoKTsKIApAQCAtNzksNiArOTcsODggQEAgdm9pZCBFZGl0b3I6OmFkZFRvS2ls
bFJpbmcoUmFuZ2UqIHJhbmdlLAogICAgIG1fc3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlID0gZmFs
c2U7CiB9CiAKK3ZvaWQgRWRpdG9yOjp5YW5rKCkKK3sKKyAgICBpbml0aWFsaXplS2lsbFJpbmdJ
Zk5lZWRlZCgpOworCisgICAgaWYgKCFjYW5FZGl0KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IE5TU3RyaW5nKiB5YW5rZWUgPSBfTlNZYW5rRnJvbUtpbGxSaW5nKCk7CisgICAgaW5zZXJ0VGV4
dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KHlhbmtlZSwgZmFsc2UpOworICAgIF9OU1NldEtpbGxS
aW5nVG9ZYW5rZWRTdGF0ZSgpOworfQorCit2b2lkIEVkaXRvcjo6eWFua0FuZFNlbGVjdCgpCit7
CisgICAgaW5pdGlhbGl6ZUtpbGxSaW5nSWZOZWVkZWQoKTsKKworICAgIGlmICghY2FuRWRpdCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBOU1N0cmluZyogeWFua2VlID0gX05TWWFua0Zyb21L
aWxsUmluZygpOworICAgIGluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudCh5YW5rZWUs
IHRydWUpOworICAgIF9OU1NldEtpbGxSaW5nVG9ZYW5rZWRTdGF0ZSgpOworfQorCit2b2lkIEVk
aXRvcjo6c2V0TWFyaygpCit7CisgICAgbV9mcmFtZS0+c2V0TWFyayhtX2ZyYW1lLT5zZWxlY3Rp
b25Db250cm9sbGVyKCktPnNlbGVjdGlvbigpKTsKK30KKworc3RhdGljIFJlZlB0cjxSYW5nZT4g
dW5pb25ET01SYW5nZXMoUmFuZ2UqIGEsIFJhbmdlKiBiKQoreworICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIFJhbmdlKiBzdGFydCA9IGEtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5n
ZTo6U1RBUlRfVE9fU1RBUlQsIGIsIGVjKSA8PSAwID8gYSA6IGI7CisgICAgQVNTRVJUKCFlYyk7
CisgICAgUmFuZ2UqIGVuZCA9IGEtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RP
X0VORCwgYiwgZWMpIDw9IDAgPyBiIDogYTsKKyAgICBBU1NFUlQoIWVjKTsKKworICAgIHJldHVy
biBuZXcgUmFuZ2UoYS0+c3RhcnRDb250YWluZXIoZWMpLT5vd25lckRvY3VtZW50KCksIHN0YXJ0
LT5zdGFydENvbnRhaW5lcihlYyksIHN0YXJ0LT5zdGFydE9mZnNldChlYyksIGVuZC0+ZW5kQ29u
dGFpbmVyKGVjKSwgZW5kLT5lbmRPZmZzZXQoZWMpKTsKK30KKwordm9pZCBFZGl0b3I6OmRlbGV0
ZVRvTWFyaygpCit7CisgICAgaWYgKCFjYW5FZGl0KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFJlZlB0cjxSYW5nZT4gbWFyayA9IG1fZnJhbWUtPm1hcmsoKS50b1JhbmdlKCk7CisgICAgaWYg
KG1hcmspIHsKKyAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlciogc2VsZWN0aW9uQ29udHJvbGxl
ciA9IG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKTsKKyAgICAgICAgYm9vbCBzZWxlY3Rl
ZCA9IHNlbGVjdGlvbkNvbnRyb2xsZXItPnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMo
bWFyay5nZXQoKSwgc2VsZWN0ZWRSYW5nZSgpLmdldCgpKS5nZXQoKSwgRE9XTlNUUkVBTSwgdHJ1
ZSk7CisgICAgICAgIEFTU0VSVChzZWxlY3RlZCk7CisgICAgICAgIGlmICghc2VsZWN0ZWQpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcGVyZm9ybURlbGV0ZSgpOworICAgIG1f
ZnJhbWUtPnNldE1hcmsobV9mcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5zZWxlY3Rpb24o
KSk7Cit9CisKK3ZvaWQgRWRpdG9yOjpzZWxlY3RUb01hcmsoKQoreworICAgIFJlZlB0cjxSYW5n
ZT4gbWFyayA9IG1fZnJhbWUtPm1hcmsoKS50b1JhbmdlKCk7CisgICAgUmVmUHRyPFJhbmdlPiBz
ZWxlY3Rpb24gPSBzZWxlY3RlZFJhbmdlKCk7CisgICAgaWYgKCFtYXJrIHx8ICFzZWxlY3Rpb24p
IHsKKyAgICAgICAgc3lzdGVtQmVlcCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1f
ZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+c2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJh
bmdlcyhtYXJrLmdldCgpLCBzZWxlY3Rpb24uZ2V0KCkpLmdldCgpLCBET1dOU1RSRUFNLCB0cnVl
KTsKK30KKwordm9pZCBFZGl0b3I6OnN3YXBXaXRoTWFyaygpCit7CisgICAgY29uc3QgU2VsZWN0
aW9uJiBtYXJrID0gbV9mcmFtZS0+bWFyaygpOworICAgIFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBt
X2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPnNlbGVjdGlvbigpOworICAgIGlmIChtYXJr
LmlzTm9uZSgpIHx8IHNlbGVjdGlvbi5pc05vbmUoKSkgeworICAgICAgICBzeXN0ZW1CZWVwKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb25Db250cm9s
bGVyKCktPnNldFNlbGVjdGlvbihtYXJrKTsKKyAgICBtX2ZyYW1lLT5zZXRNYXJrKHNlbGVjdGlv
bik7Cit9CisKIHZvaWQgRWRpdG9yOjpzaG93Rm9udFBhbmVsKCkKIHsKICAgICBbW05TRm9udE1h
bmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIG9yZGVyRnJvbnRGb250UGFuZWw6bmlsXTsKSW5kZXg6
IFdlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UuaAkocmV2aXNpb24gMjc3NDUpCisrKyBX
ZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjUsNyArMTY1LDYgQEAgZW51bSBXZWJTY3JvbGxHcmFudWxhcml0eSB7CiAtICh2b2lkKXNjcm9s
bERPTVJhbmdlVG9WaXNpYmxlOihET01SYW5nZSAqKXJhbmdlOwogCiAvLyBFbWFjcy1zdHlsZS1l
ZGl0aW5nICJtYXJrIgotLSAodm9pZClzZXRNYXJrRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2U7
CiAtIChET01SYW5nZSAqKW1hcmtET01SYW5nZTsKIAogLSAoTlNGb250ICopZm9udEZvclNlbGVj
dGlvbjooQk9PTCAqKWhhc011bHRpcGxlRm9udHM7CkluZGV4OiBXZWJDb3JlL3BhZ2UvbWFjL1dl
YkNvcmVGcmFtZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvbWFjL1dlYkNv
cmVGcmFtZUJyaWRnZS5tbQkocmV2aXNpb24gMjc3NDUpCisrKyBXZWJDb3JlL3BhZ2UvbWFjL1dl
YkNvcmVGcmFtZUJyaWRnZS5tbQkod29ya2luZyBjb3B5KQpAQCAtOTI1LDEyICs5MjUsNiBAQCBz
dGF0aWMgSFRNTEZvcm1FbGVtZW50ICpmb3JtRWxlbWVudEZyb21ECiAgICAgcmV0dXJuIFtzZWxm
IGNvbnZlcnRUb05TUmFuZ2U6bV9mcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT50b1Jhbmdl
KCkuZ2V0KCldOwogfQogCi0tICh2b2lkKXNldE1hcmtET01SYW5nZTooRE9NUmFuZ2UgKilyYW5n
ZQotewotICAgIFJhbmdlKiByID0gW3JhbmdlIF9yYW5nZV07Ci0gICAgbV9mcmFtZS0+c2V0TWFy
ayhTZWxlY3Rpb24oc3RhcnRQb3NpdGlvbihyKSwgZW5kUG9zaXRpb24ociksIFNFTF9ERUZBVUxU
X0FGRklOSVRZKSk7Ci19Ci0KIC0gKERPTVJhbmdlICopbWFya0RPTVJhbmdlCiB7CiAgICAgcmV0
dXJuIFtET01SYW5nZSBfd3JhcFJhbmdlOm1fZnJhbWUtPm1hcmsoKS50b1JhbmdlKCkuZ2V0KCld
OwpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDI3NzUwKQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAwNy0xMS0xMyAgQWxleGV5IFByb3NrdXJ5YWtv
diAgPGFwQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5NjkK
KyAgICAgICAgRWxpbWluYXRlIEVkaXRvcjo6ZGVsZXRlUmFuZ2UoKQorCisgICAgICAgICogV2Vi
Vmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKCtbV2ViSFRNTFZpZXcgaW5pdGlhbGl6ZV0p
OgorICAgICAgICAoLVtXZWJIVE1MVmlldyB5YW5rOl0pOgorICAgICAgICAoLVtXZWJIVE1MVmll
dyB5YW5rQW5kU2VsZWN0Ol0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBzZXRNYXJrOl0pOgor
ICAgICAgICAoLVtXZWJIVE1MVmlldyBkZWxldGVUb01hcms6XSk6CisgICAgICAgICgtW1dlYkhU
TUxWaWV3IHNlbGVjdFRvTWFyazpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgc3dhcFdpdGhN
YXJrOl0pOgorICAgICAgICBQdXNoZWQgYWxsIGtpbGwgcmluZyBtZXRob2RzIHRvIFdlYkNvcmUu
IFRoZXkgd2VyZSBndWlsdHkgb2YgdXNpbmcgRWRpdG9yOjpkZWxldGVSYW5nZSgpIQorCiAyMDA3
LTExLTEyICBKb3NoIEFhcyAgPGpvc2htb3pAZ21haWwuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluLgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkocmV2aXNpb24gMjc3
NDUpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkK
QEAgLTE3NywxNyArMTc3LDYgQEAgZXh0ZXJuICJDIiB7CiBleHRlcm4gTlNTdHJpbmcgKk5TTWFy
a2VkQ2xhdXNlU2VnbWVudEF0dHJpYnV0ZU5hbWU7IAogZXh0ZXJuIE5TU3RyaW5nICpOU1RleHRJ
bnB1dFJlcGxhY2VtZW50UmFuZ2VBdHRyaWJ1dGVOYW1lOyAKIAotLy8gS2lsbCByaW5nIGNhbGxz
LiBXb3VsZCBiZSBiZXR0ZXIgdG8gdXNlIE5TS2lsbFJpbmcuaCwgYnV0IHRoYXQncyBub3QgYXZh
aWxhYmxlIGFzIEFQSSBvciBTUEkuCi0KLXZvaWQgX05TSW5pdGlhbGl6ZUtpbGxSaW5nKHZvaWQp
Owotdm9pZCBfTlNBcHBlbmRUb0tpbGxSaW5nKE5TU3RyaW5nICopOwotdm9pZCBfTlNQcmVwZW5k
VG9LaWxsUmluZyhOU1N0cmluZyAqKTsKLU5TU3RyaW5nICpfTlNZYW5rRnJvbUtpbGxSaW5nKHZv
aWQpOwotTlNTdHJpbmcgKl9OU1lhbmtQcmV2aW91c0Zyb21LaWxsUmluZyh2b2lkKTsKLXZvaWQg
X05TTmV3S2lsbFJpbmdTZXF1ZW5jZSh2b2lkKTsKLXZvaWQgX05TU2V0S2lsbFJpbmdUb1lhbmtl
ZFN0YXRlKHZvaWQpOwotdm9pZCBfTlNSZXNldEtpbGxSaW5nT3BlcmF0aW9uRmxhZyh2b2lkKTsK
LQogfQogCiBAaW50ZXJmYWNlIE5TVmlldyAoQXBwS2l0U2VjcmV0c0lLbm93QWJvdXQpCkBAIC0y
MDAwLDcgKzE5ODksNiBAQCBzdGF0aWMgdm9pZCBfdXBkYXRlTW91c2VvdmVyVGltZXJDYWxsYmFj
CiB7CiAgICAgW05TQXBwIHJlZ2lzdGVyU2VydmljZXNNZW51U2VuZFR5cGVzOltbc2VsZiBjbGFz
c10gX3NlbGVjdGlvblBhc3RlYm9hcmRUeXBlc10gCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVyblR5cGVzOltbc2VsZiBjbGFzc10gX2luc2VydGFibGVQYXN0ZWJvYXJkVHlwZXNd
XTsKLSAgICBfTlNJbml0aWFsaXplS2lsbFJpbmcoKTsKICNpZm5kZWYgQlVJTERJTkdfT05fVElH
RVIKICAgICBXZWJDb3JlT2JqQ0ZpbmFsaXplT25NYWluVGhyZWFkKHNlbGYpOwogI2VuZGlmCkBA
IC00NTkxLDEwOCArNDU3OSw0OCBAQCBOU1N0cm9rZUNvbG9yQXR0cmlidXRlTmFtZSAgICAgICAg
LyogTlNDCiB7CiAgICAgQ09NTUFORF9QUk9MT0dVRQogCi0gICAgaWYgKCFbc2VsZiBfY2FuRWRp
dF0pCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgTlNTdHJpbmcqIHlhbmtlZSA9IF9O
U1lhbmtGcm9tS2lsbFJpbmcoKTsKLQogICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKSkKLSAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0VGV4dFdp
dGhvdXRTZW5kaW5nVGV4dEV2ZW50KHlhbmtlZSwgZmFsc2UpOwotCi0gICAgX05TU2V0S2lsbFJp
bmdUb1lhbmtlZFN0YXRlKCk7CisgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnlhbmsoKTsK
IH0KIAogLSAodm9pZCl5YW5rQW5kU2VsZWN0OihpZClzZW5kZXIKIHsKICAgICBDT01NQU5EX1BS
T0xPR1VFCiAKLSAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgTlNTdHJpbmcqIHlhbmtlZSA9IF9OU1lhbmtGcm9tS2lsbFJpbmcoKTsKLSAgICAKICAgICBp
ZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgIGNvcmVG
cmFtZS0+ZWRpdG9yKCktPmluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudCh5YW5rZWUs
IHRydWUpOwotICAgICAgICAKLSAgICBfTlNTZXRLaWxsUmluZ1RvWWFua2VkU3RhdGUoKTsKKyAg
ICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+eWFua0FuZFNlbGVjdCgpOwogfQogCiAtICh2b2lk
KXNldE1hcms6KGlkKXNlbmRlcgogewogICAgIENPTU1BTkRfUFJPTE9HVUUKIAotICAgIFtbc2Vs
ZiBfYnJpZGdlXSBzZXRNYXJrRE9NUmFuZ2U6W3NlbGYgX3NlbGVjdGVkUmFuZ2VdXTsKLX0KLQot
c3RhdGljIERPTVJhbmdlICp1bmlvbkRPTVJhbmdlcyhET01SYW5nZSAqYSwgRE9NUmFuZ2UgKmIp
Ci17Ci0gICAgQVNTRVJUKGEpOwotICAgIEFTU0VSVChiKTsKLSAgICBET01SYW5nZSAqcyA9IFth
IGNvbXBhcmVCb3VuZGFyeVBvaW50czpET01fU1RBUlRfVE9fU1RBUlQgc291cmNlUmFuZ2U6Yl0g
PD0gMCA/IGEgOiBiOwotICAgIERPTVJhbmdlICplID0gW2EgY29tcGFyZUJvdW5kYXJ5UG9pbnRz
OkRPTV9FTkRfVE9fRU5EIHNvdXJjZVJhbmdlOmJdIDw9IDAgPyBiIDogYTsKLSAgICBET01SYW5n
ZSAqciA9IFtbW2Egc3RhcnRDb250YWluZXJdIG93bmVyRG9jdW1lbnRdIGNyZWF0ZVJhbmdlXTsK
LSAgICBbciBzZXRTdGFydDpbcyBzdGFydENvbnRhaW5lcl0gb2Zmc2V0OltzIHN0YXJ0T2Zmc2V0
XV07Ci0gICAgW3Igc2V0RW5kOltlIGVuZENvbnRhaW5lcl0gb2Zmc2V0OltlIGVuZE9mZnNldF1d
OwotICAgIHJldHVybiByOworICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKSkKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+c2V0TWFyaygpOwogfQogCiAt
ICh2b2lkKWRlbGV0ZVRvTWFyazooaWQpc2VuZGVyCiB7CiAgICAgQ09NTUFORF9QUk9MT0dVRQog
Ci0gICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIERPTVJh
bmdlICptYXJrID0gW1tzZWxmIF9icmlkZ2VdIG1hcmtET01SYW5nZV07Ci0gICAgaWYgKG1hcmsg
PT0gbmlsKSB7Ci0gICAgICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKSkKLSAgICAgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnBlcmZvcm1EZWxldGUoKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBET01SYW5nZSAqc2VsZWN0aW9uID0gW3NlbGYgX3NlbGVj
dGVkUmFuZ2VdOwotICAgICAgICBET01SYW5nZSAqcjsKLSAgICAgICAgQHRyeSB7Ci0gICAgICAg
ICAgICByID0gdW5pb25ET01SYW5nZXMobWFyaywgc2VsZWN0aW9uKTsKLSAgICAgICAgfSBAY2F0
Y2ggKE5TRXhjZXB0aW9uICpsb2NhbEV4Y2VwdGlvbikgewotICAgICAgICAgICAgciA9IHNlbGVj
dGlvbjsKLSAgICAgICAgfQotICAgICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKTsKLSAgICAgICAgaWYgKGNvcmVGcmFtZSkKLSAgICAgICAgICAgIGNvcmVGcmFtZS0+
ZWRpdG9yKCktPmRlbGV0ZVJhbmdlKFtyIF9yYW5nZV0sIHRydWUsIHRydWUsIGZhbHNlLCBkZWxl
dGVTZWxlY3Rpb25BY3Rpb24sIENoYXJhY3RlckdyYW51bGFyaXR5KTsKLQotICAgIH0KLSAgICBb
W3NlbGYgX2JyaWRnZV0gc2V0TWFya0RPTVJhbmdlOltzZWxmIF9zZWxlY3RlZFJhbmdlXV07Cisg
ICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICBj
b3JlRnJhbWUtPmVkaXRvcigpLT5kZWxldGVUb01hcmsoKTsKIH0KIAogLSAodm9pZClzZWxlY3RU
b01hcms6KGlkKXNlbmRlcgogewogICAgIENPTU1BTkRfUFJPTE9HVUUKIAotICAgIFdlYkZyYW1l
QnJpZGdlICpicmlkZ2UgPSBbc2VsZiBfYnJpZGdlXTsKLSAgICBET01SYW5nZSAqbWFyayA9IFti
cmlkZ2UgbWFya0RPTVJhbmdlXTsKLSAgICBET01SYW5nZSAqc2VsZWN0aW9uID0gW3NlbGYgX3Nl
bGVjdGVkUmFuZ2VdOwotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0p
OwotICAgIGlmICghbWFyayB8fCAhc2VsZWN0aW9uIHx8ICFjb3JlRnJhbWUpIHsKLSAgICAgICAg
TlNCZWVwKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29yZUZyYW1lLT5zZWxlY3Rp
b25Db250cm9sbGVyKCktPnNldFNlbGVjdGVkUmFuZ2UoY29yZSh1bmlvbkRPTVJhbmdlcyhtYXJr
LCBbc2VsZiBfc2VsZWN0ZWRSYW5nZV0pKSwgRE9XTlNUUkVBTSwgdHJ1ZSk7CisgICAgaWYgKEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICBjb3JlRnJhbWUt
PmVkaXRvcigpLT5zZWxlY3RUb01hcmsoKTsKIH0KIAogLSAodm9pZClzd2FwV2l0aE1hcms6KGlk
KXNlbmRlcgogewogICAgIENPTU1BTkRfUFJPTE9HVUUKIAotICAgIFdlYkZyYW1lQnJpZGdlICpi
cmlkZ2UgPSBbc2VsZiBfYnJpZGdlXTsKLSAgICBET01SYW5nZSAqbWFyayA9IFticmlkZ2UgbWFy
a0RPTVJhbmdlXTsKLSAgICBET01SYW5nZSAqc2VsZWN0aW9uID0gW3NlbGYgX3NlbGVjdGVkUmFu
Z2VdOwotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlm
ICghbWFyayB8fCAhc2VsZWN0aW9uIHx8ICFjb3JlRnJhbWUpIHsKLSAgICAgICAgTlNCZWVwKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoY29yZUZyYW1lLT5zZWxlY3Rpb25D
b250cm9sbGVyKCktPnNldFNlbGVjdGVkUmFuZ2UoY29yZShtYXJrKSwgRE9XTlNUUkVBTSwgdHJ1
ZSkpCi0gICAgICAgIFticmlkZ2Ugc2V0TWFya0RPTVJhbmdlOnNlbGVjdGlvbl07CisgICAgaWYg
KEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICBjb3JlRnJh
bWUtPmVkaXRvcigpLT5zd2FwV2l0aE1hcmsoKTsKIH0KIAogLSAodm9pZCl0b2dnbGVCYXNlV3Jp
dGluZ0RpcmVjdGlvbjooaWQpc2VuZGVyCg==
</data>
<flag name="review"
          id="7347"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>