lavf/srtdec: rewrite parsing logic
authorClément Bœsch <u@pkh.me>
Tue, 22 Dec 2015 22:11:41 +0000 (23:11 +0100)
committerClément Bœsch <u@pkh.me>
Fri, 1 Jan 2016 17:31:49 +0000 (18:31 +0100)
Fixes Ticket #5032

The samples in Ticket #5032 is using \r\r\n as line breaks.  Since we
already are handling \r, or \n, or \r\n as line breaks, \r\n\n will be
considered as a double line breaks. This is an issue because
ff_subtitles_read_text_chunk() will as a result stop extracting a chunk
after just one line.

So instead of parsing the SRT by "chunks" (which means splitting every
double LB), this new parser is detecting timing lines, and split the
events on this basis. While this sounds safe and simple, it needs to
take into account the event number preceding the timing line while
handling situations such as:

 - event number starting at 0 or actually any number instead of 1
 - event numbers not being ordered at all
 - event number being followed by text garbage (this really happened,
   see Ticket #4898)
 - event payload containing one or multiple number (a protagonist saying
   a count-down, a date or whatever) which could be confused with a
   chapter number
 - event number being empty (see Ticket #2167)
 - all kind of weird line breaks can appear randomly like wild pokémons
 - untrustable line breaks (Ticket #5032)

The sample madness.srt tries to sum up most of this into one sample,
ticket5032-rrn.srt is the file containing \r\r\n line breaks. and
empty-events-2167.srt contains empty events.

libavformat/srtdec.c
tests/fate/subtitles.mak
tests/ref/fate/sub-srt-empty-events [new file with mode: 0644]
tests/ref/fate/sub-srt-madness-timeshift [new file with mode: 0644]
tests/ref/fate/sub-srt-rrn-remux [new file with mode: 0644]

index f08ed1d..6113f70 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * SubRip subtitle demuxer
  * Copyright (c) 2010  Aurelien Jacobs <aurel@gnuage.org>
+ * Copyright (c) 2015  Clément Bœsch <u pkh me>
  *
  * This file is part of FFmpeg.
  *
@@ -58,28 +59,65 @@ static int srt_probe(AVProbeData *p)
     return 0;
 }
 
-static int64_t get_pts(const char **buf, int *duration,
-                       int32_t *x1, int32_t *y1, int32_t *x2, int32_t *y2)
+struct event_info {
+    int32_t x1, x2, y1, y2;
+    int duration;
+    int64_t pts;
+    int64_t pos;
+};
+
+static int get_event_info(const char *line, struct event_info *ei)
+{
+    int hh1, mm1, ss1, ms1;
+    int hh2, mm2, ss2, ms2;
+
+    ei->x1 = ei->x2 = ei->y1 = ei->y2 = ei->duration = -1;
+    ei->pts = AV_NOPTS_VALUE;
+    ei->pos = -1;
+    if (sscanf(line, "%d:%2d:%2d%*1[,.]%3d --> %d:%2d:%2d%*1[,.]%3d"
+               "%*[ ]X1:%u X2:%u Y1:%u Y2:%u",
+               &hh1, &mm1, &ss1, &ms1,
+               &hh2, &mm2, &ss2, &ms2,
+               &ei->x1, &ei->x2, &ei->y1, &ei->y2) >= 8) {
+        const int64_t start = (hh1*3600LL + mm1*60LL + ss1) * 1000LL + ms1;
+        const int64_t end   = (hh2*3600LL + mm2*60LL + ss2) * 1000LL + ms2;
+        ei->duration = end - start;
+        ei->pts = start;
+        return 0;
+    }
+    return -1;
+}
+
+static int add_event(FFDemuxSubtitlesQueue *q, AVBPrint *buf, char *line_cache,
+                     const struct event_info *ei, int append_cache)
 {
-    int i;
-
-    for (i=0; i<2; i++) {
-        int hh1, mm1, ss1, ms1;
-        int hh2, mm2, ss2, ms2;
-        if (sscanf(*buf, "%d:%2d:%2d%*1[,.]%3d --> %d:%2d:%2d%*1[,.]%3d"
-                   "%*[ ]X1:%u X2:%u Y1:%u Y2:%u",
-                   &hh1, &mm1, &ss1, &ms1,
-                   &hh2, &mm2, &ss2, &ms2,
-                   x1, x2, y1, y2) >= 8) {
-            int64_t start = (hh1*3600LL + mm1*60LL + ss1) * 1000LL + ms1;
-            int64_t end   = (hh2*3600LL + mm2*60LL + ss2) * 1000LL + ms2;
-            *duration = end - start;
-            *buf += ff_subtitles_next_line(*buf);
-            return start;
+    if (append_cache && line_cache[0])
+        av_bprintf(buf, "%s\n", line_cache);
+    line_cache[0] = 0;
+
+    while (buf->len > 0 && buf->str[buf->len - 1] == '\n')
+        buf->str[--buf->len] = 0;
+
+    if (buf->len) {
+        AVPacket *sub = ff_subtitles_queue_insert(q, buf->str, buf->len, 0);
+        if (!sub)
+            return AVERROR(ENOMEM);
+        av_bprint_clear(buf);
+        sub->pos = ei->pos;
+        sub->pts = ei->pts;
+        sub->duration = ei->duration;
+        if (ei->x1 != -1) {
+            uint8_t *p = av_packet_new_side_data(sub, AV_PKT_DATA_SUBTITLE_POSITION, 16);
+            if (p) {
+                AV_WL32(p,      ei->x1);
+                AV_WL32(p +  4, ei->y1);
+                AV_WL32(p +  8, ei->x2);
+                AV_WL32(p + 12, ei->y2);
+            }
         }
-        *buf += ff_subtitles_next_line(*buf);
     }
-    return AV_NOPTS_VALUE;
+
+    return 0;
 }
 
 static int srt_read_header(AVFormatContext *s)
@@ -88,6 +126,9 @@ static int srt_read_header(AVFormatContext *s)
     AVBPrint buf;
     AVStream *st = avformat_new_stream(s, NULL);
     int res = 0;
+    char line[4096], line_cache[4096];
+    int has_event_info = 0;
+    struct event_info ei;
     FFTextReader tr;
     ff_text_init_avio(s, &tr, s->pb);
 
@@ -99,43 +140,67 @@ static int srt_read_header(AVFormatContext *s)
 
     av_bprint_init(&buf, 0, AV_BPRINT_SIZE_UNLIMITED);
 
+    line_cache[0] = 0;
+
     while (!ff_text_eof(&tr)) {
-        ff_subtitles_read_text_chunk(&tr, &buf);
-
-        if (buf.len) {
-            int64_t pos = ff_text_pos(&tr);
-            int64_t pts;
-            int duration;
-            const char *ptr = buf.str;
-            int32_t x1 = -1, y1 = -1, x2 = -1, y2 = -1;
-            AVPacket *sub;
-
-            pts = get_pts(&ptr, &duration, &x1, &y1, &x2, &y2);
-            if (pts != AV_NOPTS_VALUE) {
-                int len = buf.len - (ptr - buf.str);
-                if (len <= 0)
-                    continue;
-                sub = ff_subtitles_queue_insert(&srt->q, ptr, len, 0);
-                if (!sub) {
-                    res = AVERROR(ENOMEM);
+        struct event_info tmp_ei;
+        const int64_t pos = ff_text_pos(&tr);
+        ptrdiff_t len = ff_subtitles_read_line(&tr, line, sizeof(line));
+
+        if (len < 0)
+            break;
+
+        if (!len || !line[0])
+            continue;
+
+        if (get_event_info(line, &tmp_ei) < 0) {
+            char *pline;
+
+            if (!has_event_info)
+                continue;
+
+            if (line_cache[0]) {
+                /* We got some cache and a new line so we assume the cached
+                 * line was actually part of the payload */
+                av_bprintf(&buf, "%s\n", line_cache);
+                line_cache[0] = 0;
+            }
+
+            /* If the line doesn't start with a number, we assume it's part of
+             * the payload, otherwise is likely an event number preceding the
+             * timing information... but we can't be sure of this yet, so we
+             * cache it */
+            if (strtol(line, &pline, 10) < 0 || line == pline)
+                av_bprintf(&buf, "%s\n", line);
+            else
+                strcpy(line_cache, line);
+        } else {
+            if (has_event_info) {
+                /* We have the information of previous event, append it to the
+                 * queue. We insert the cached line if and only if the payload
+                 * is empty and the cached line is not a standalone number. */
+                char *pline = NULL;
+                const int standalone_number = strtol(line_cache, &pline, 10) >= 0 && pline && !*pline;
+                res = add_event(&srt->q, &buf, line_cache, &ei, !buf.len && !standalone_number);
+                if (res < 0)
                     goto end;
-                }
-                sub->pos = pos;
-                sub->pts = pts;
-                sub->duration = duration;
-                if (x1 != -1) {
-                    uint8_t *p = av_packet_new_side_data(sub, AV_PKT_DATA_SUBTITLE_POSITION, 16);
-                    if (p) {
-                        AV_WL32(p,      x1);
-                        AV_WL32(p +  4, y1);
-                        AV_WL32(p +  8, x2);
-                        AV_WL32(p + 12, y2);
-                    }
-                }
+            } else {
+                has_event_info = 1;
             }
+            tmp_ei.pos = pos;
+            ei = tmp_ei;
         }
     }
 
+    /* Append the last event. Here we force the cache to be flushed, because a
+     * trailing number is more likely to be geniune (for example a copyright
+     * date) and not the event index of an inexistant event */
+    if (has_event_info) {
+        res = add_event(&srt->q, &buf, line_cache, &ei, 1);
+        if (res < 0)
+            goto end;
+    }
+
     ff_subtitles_queue_finalize(s, &srt->q);
 
 end:
index 267c09e..d273f2e 100644 (file)
@@ -52,6 +52,15 @@ fate-sub-sami2: CMD = fmtstdout ass -i $(TARGET_SAMPLES)/sub/SAMI_multilang_twea
 FATE_SUBTITLES_ASS-$(call DEMDEC, SRT, SUBRIP) += fate-sub-srt
 fate-sub-srt: CMD = fmtstdout ass -i $(TARGET_SAMPLES)/sub/SubRip_capability_tester.srt
 
+FATE_SUBTITLES-$(call ALLYES, SRT_DEMUXER SUBRIP_DECODER SRT_MUXER) += fate-sub-srt-rrn-remux
+fate-sub-srt-rrn-remux: CMD = fmtstdout srt -i $(TARGET_SAMPLES)/sub/ticket5032-rrn.srt -c:s copy
+
+FATE_SUBTITLES-$(call ALLYES, SRT_DEMUXER SUBRIP_DECODER SRT_MUXER) += fate-sub-srt-madness-timeshift
+fate-sub-srt-madness-timeshift: CMD = fmtstdout srt -itsoffset 3.14 -i $(TARGET_SAMPLES)/sub/madness.srt -c:s copy
+
+FATE_SUBTITLES-$(call ALLYES, SRT_DEMUXER SUBRIP_DECODER SRT_MUXER) += fate-sub-srt-empty-events
+fate-sub-srt-empty-events: CMD = fmtstdout srt -i $(TARGET_SAMPLES)/sub/empty-events-2167.srt -c:s copy
+
 FATE_SUBTITLES_ASS-$(call DEMDEC, STL, STL) += fate-sub-stl
 fate-sub-stl: CMD = fmtstdout ass -i $(TARGET_SAMPLES)/sub/STL_capability_tester.stl
 
diff --git a/tests/ref/fate/sub-srt-empty-events b/tests/ref/fate/sub-srt-empty-events
new file mode 100644 (file)
index 0000000..11af2da
--- /dev/null
@@ -0,0 +1,24 @@
+1
+00:00:51,940 --> 00:00:53,320
+我们期待一些事
+
+2
+00:00:53,340 --> 00:00:56,020
+比从前更好的事
+
+3
+00:00:56,140 --> 00:00:58,920
+我们期待的更多
+
+4
+00:00:59,540 --> 00:01:02,020
+你真以为藏到壁画后面
+
+5
+02:09:09,350 --> 02:09:10,850
+就失去你
+
+6
+02:11:34,350 --> 02:11:37,850
+(怀念我们的朋友“面具”小查尔斯·刘易斯)
+
diff --git a/tests/ref/fate/sub-srt-madness-timeshift b/tests/ref/fate/sub-srt-madness-timeshift
new file mode 100644 (file)
index 0000000..13a3085
--- /dev/null
@@ -0,0 +1,36 @@
+1
+00:00:04,251 --> 00:00:05,362
+okay, let's make things easy
+
+2
+00:00:05,160 --> 00:00:05,263
+31 i'm a number but the only payload so please keep me :)
+
+3
+00:00:06,473 --> 00:00:07,584
+hello
+5
+don't forget me.
+
+4
+00:00:08,695 --> 00:00:09,806
+no.
+let's add some fun
+
+5
+00:00:10,917 --> 00:00:12,028
+let's do it in reverse bc wtf not
+45 yes this is a number but i'm actually part of the sub
+
+6
+00:00:12,028 --> 00:00:13,139
+1
+0
+next is negative, not a chapnum ;)
+-1
+
+7
+00:00:13,241 --> 00:00:13,263
+credits
+2015
+
diff --git a/tests/ref/fate/sub-srt-rrn-remux b/tests/ref/fate/sub-srt-rrn-remux
new file mode 100644 (file)
index 0000000..1cb66d2
--- /dev/null
@@ -0,0 +1,2113 @@
+1
+00:00:01,000 --> 00:00:04,074
+Subtitles downloaded from Podnapisi.NET
+
+2
+00:00:17,317 --> 00:00:19,551
+Wooldoor: who's it gonna
+be?! Who's it gonna be?!
+
+3
+00:00:19,552 --> 00:00:21,053
+Wheeeeee!
+
+4
+00:00:21,054 --> 00:00:23,122
+Wooldoor:
+the producers decided
+to surprise one of us
+
+5
+00:00:23,123 --> 00:00:24,990
+With a visit from
+a family member.
+
+6
+00:00:24,991 --> 00:00:26,191
+I hope it's someone
+from my family
+
+7
+00:00:26,192 --> 00:00:27,493
+Like flagfred cheesewheel,
+
+8
+00:00:27,494 --> 00:00:30,262
+Lintsue brickshade,
+or prom-queen dumpsterbaby.
+
+9
+00:00:30,263 --> 00:00:32,197
+[speaking japanese]
+
+10
+00:00:38,905 --> 00:00:41,407
+Look, everyone!
+Someone's coming!
+
+11
+00:00:41,408 --> 00:00:43,575
+Clara: the second I saw
+the horse and carriage,
+
+12
+00:00:43,576 --> 00:00:47,079
+I just knew it had
+to be someone from
+my kingdom.
+
+13
+00:00:47,080 --> 00:00:50,683
+But when I saw it was
+the short carriage,
+my heart sank.
+
+14
+00:00:50,684 --> 00:00:53,786
+Why?! Why did she
+have to come?!
+
+15
+00:00:55,221 --> 00:00:56,588
+Oh, fuck me.
+
+16
+00:00:56,589 --> 00:00:58,223
+[garbled speech]
+
+17
+00:00:58,224 --> 00:01:03,362
+Um, everyone, this is
+my special cousin bleh.
+
+18
+00:01:03,363 --> 00:01:04,530
+Foxxy: no one knew clara
+
+19
+00:01:04,531 --> 00:01:07,132
+Had a mentally-challenged
+cousin, but it was cool.
+
+20
+00:01:07,133 --> 00:01:10,269
+The foxxy five used to perform
+for special needs kids,
+
+21
+00:01:10,270 --> 00:01:14,306
+And those people got
+hearts as big as they
+oversized foreheads.
+
+22
+00:01:14,307 --> 00:01:18,610
+<i>"I am sam is a well-written
+and exceptionally well-acted
+tearjerker,"</i>
+
+23
+00:01:18,611 --> 00:01:21,213
+<i>Raves adam nayman
+of eye weekly.</i>
+
+24
+00:01:23,149 --> 00:01:25,250
+What the shoebazzle
+was that?
+
+25
+00:01:25,251 --> 00:01:29,755
+<i>She, um, only
+quotes reviews from
+the movie I am sam.</i>
+
+26
+00:01:29,756 --> 00:01:31,690
+Huh?
+Hmm.
+
+27
+00:01:31,691 --> 00:01:33,525
+Well, this has
+been fun. Bye!
+
+28
+00:01:35,195 --> 00:01:38,397
+Well, i've never seen
+someone that slow
+go that fast.
+
+29
+00:01:38,398 --> 00:01:40,132
+Oh, yeah! Give it up!
+
+30
+00:01:40,133 --> 00:01:41,066
+Yeah!
+
+31
+00:01:45,705 --> 00:01:47,639
+[speaking japanese]
+
+32
+00:01:55,215 --> 00:01:59,952
+Oh, poor ling-ling.
+He's so disappointed
+his father didn't show.
+
+33
+00:01:59,953 --> 00:02:01,387
+Oh!
+
+34
+00:02:01,388 --> 00:02:04,590
+Oh, sweetie,
+i'm so sorry your
+father's not coming.
+
+35
+00:02:04,591 --> 00:02:08,127
+We still love ya!
+Don't we, toot?!
+
+36
+00:02:08,128 --> 00:02:10,963
+Fine!
+
+37
+00:02:10,964 --> 00:02:12,197
+[kiss]
+
+38
+00:02:12,198 --> 00:02:16,035
+Ling-ling,
+you taste so weird.
+
+39
+00:02:17,470 --> 00:02:19,204
+[giggling]
+
+40
+00:02:19,205 --> 00:02:21,140
+[giggling]
+
+41
+00:02:22,208 --> 00:02:25,177
+Let's go, bleh.
+The coast is clear.
+
+42
+00:02:25,178 --> 00:02:27,746
+But after this,
+no more potty breaks.
+
+43
+00:02:27,747 --> 00:02:30,082
+<i>"I am sam plays like
+a made-for-tv weep--"</i>
+
+44
+00:02:30,083 --> 00:02:31,316
+Shh!
+
+45
+00:02:31,317 --> 00:02:33,786
+I know it seemed
+like I was ashamed
+of my cousin,
+
+46
+00:02:33,787 --> 00:02:35,921
+But nothing could be
+further from the truth.
+
+47
+00:02:35,922 --> 00:02:39,591
+Aah!
+Foxxy:
+hey, clara!
+
+48
+00:02:39,592 --> 00:02:41,060
+What's up, girlfriend?
+
+49
+00:02:41,061 --> 00:02:43,062
+You know,
+none of us have
+really had a chance
+
+50
+00:02:43,063 --> 00:02:44,763
+To hang out
+with bleh yet.
+
+51
+00:02:44,764 --> 00:02:47,232
+Bleh? What's a bleh?
+
+52
+00:02:47,233 --> 00:02:49,835
+Is that one of your
+jive words like
+"emancipation"?
+
+53
+00:02:49,836 --> 00:02:51,603
+No, bleh your cousin.
+
+54
+00:02:51,604 --> 00:02:55,808
+Uh, clara?
+Why is the lamp drooling?
+
+55
+00:02:55,809 --> 00:02:59,044
+I guess to remind us
+to conserve electricity.
+
+56
+00:02:59,045 --> 00:03:03,248
+Clara, there is
+no reason to be
+embarrassed by your cousin.
+
+57
+00:03:03,249 --> 00:03:06,085
+Embarrassed?
+I'm not embarrassed.
+
+58
+00:03:06,086 --> 00:03:09,321
+Stop pretending
+bleh is a lamp.
+
+59
+00:03:09,322 --> 00:03:11,824
+She is not a lamp,
+clara.
+
+60
+00:03:11,825 --> 00:03:15,160
+She is a real person
+with real feelings.
+
+61
+00:03:15,161 --> 00:03:17,096
+Foxxy was probably right.
+
+62
+00:03:17,097 --> 00:03:18,864
+Damn that ms. Know-it-all!
+
+63
+00:03:18,865 --> 00:03:21,400
+I should have killed her
+when I had the chance.
+
+64
+00:03:21,401 --> 00:03:22,835
+Give me your hand!
+
+65
+00:03:22,836 --> 00:03:24,603
+First, give me the ring!
+
+66
+00:03:24,604 --> 00:03:27,206
+[kisses]
+
+67
+00:03:27,207 --> 00:03:29,208
+Xandir:
+it just didn't make sense.
+
+68
+00:03:29,209 --> 00:03:30,709
+When we licked ling-ling
+last time,
+
+69
+00:03:30,710 --> 00:03:31,877
+We got all [bleep]ed up.
+
+70
+00:03:31,878 --> 00:03:33,479
+But this time, nothing happened.
+
+71
+00:03:33,480 --> 00:03:35,047
+Well, we got a little aroused,
+
+72
+00:03:35,048 --> 00:03:36,982
+But not [bleep]ed up.
+
+73
+00:03:36,983 --> 00:03:38,517
+Uhh! What's the deal-e-o?
+
+74
+00:03:38,518 --> 00:03:40,085
+I don't feel
+anything. You?
+
+75
+00:03:40,086 --> 00:03:41,086
+Nothing.
+
+76
+00:03:41,087 --> 00:03:42,755
+[kisses]
+
+77
+00:03:42,756 --> 00:03:45,858
+Hmm. Maybe we have to
+eat ling-ling.
+
+78
+00:03:45,859 --> 00:03:47,326
+Why is it when
+something doesn't work,
+
+79
+00:03:47,327 --> 00:03:49,228
+Your first reaction
+is to eat it?
+
+80
+00:03:49,229 --> 00:03:52,631
+What?! What
+are you doing?
+
+81
+00:03:52,632 --> 00:03:55,067
+I couldn't find
+the remote.
+
+82
+00:03:55,068 --> 00:03:56,735
+You know,
+there is one person
+
+83
+00:03:56,736 --> 00:03:58,203
+Who can figure this out.
+
+84
+00:03:58,204 --> 00:03:59,705
+The professor!
+The professor!
+
+85
+00:03:59,706 --> 00:04:01,674
+[hums]
+
+86
+00:04:01,675 --> 00:04:02,675
+Ooh!
+
+87
+00:04:02,676 --> 00:04:03,876
+Aha!
+[whistle blows]
+
+88
+00:04:03,877 --> 00:04:05,577
+Got it.
+Hit the lights.
+
+89
+00:04:09,416 --> 00:04:11,717
+Here you see
+the african camel toad.
+
+90
+00:04:11,718 --> 00:04:13,118
+It secretes
+a hallucinogen
+
+91
+00:04:13,119 --> 00:04:14,153
+Whenever it's scared.
+
+92
+00:04:14,154 --> 00:04:15,320
+Ahh!
+
+93
+00:04:15,321 --> 00:04:17,423
+Yeah, that's--oh,
+I didn't know that.
+
+94
+00:04:17,424 --> 00:04:21,360
+When "cool" kids feel
+like catching a "buzz,"
+
+95
+00:04:21,361 --> 00:04:25,064
+They scare the amphibian
+and then lick its skin.
+
+96
+00:04:25,065 --> 00:04:27,166
+All the cool kids,
+you say?
+
+97
+00:04:27,167 --> 00:04:31,036
+Now take ling-ling,
+the asian trading card
+battle monster.
+
+98
+00:04:31,037 --> 00:04:32,638
+It creates a similar
+hallucinogen
+
+99
+00:04:32,639 --> 00:04:34,807
+Whenever it's
+disappointed.
+
+100
+00:04:34,808 --> 00:04:37,443
+Ahh!
+Oh, I want to
+be cool!
+
+101
+00:04:37,444 --> 00:04:40,946
+So, ling-ling
+was experiencing
+disappointment
+
+102
+00:04:40,947 --> 00:04:42,614
+Due to its
+father's absence,
+
+103
+00:04:42,615 --> 00:04:44,183
+Then, upon kissing
+ling-ling,
+
+104
+00:04:44,184 --> 00:04:47,186
+You became...[wacky
+noises] technically
+speaking.
+
+105
+00:04:47,187 --> 00:04:53,692
+So, only when ling-ling
+is disappointed, eh? Hmm.
+
+106
+00:04:55,662 --> 00:04:59,932
+[screaming]
+[alarm]
+[siren]
+
+107
+00:04:59,933 --> 00:05:02,067
+[bagpipes playing]
+
+108
+00:05:02,068 --> 00:05:03,635
+[harps playing]
+
+109
+00:05:03,636 --> 00:05:05,938
+[crickets chirping]
+
+110
+00:05:05,939 --> 00:05:09,942
+Oh! Don't look,
+but corky at 3:00.
+
+111
+00:05:09,943 --> 00:05:13,045
+Foxxy: it looked like I got
+through to the princess.
+
+112
+00:05:13,046 --> 00:05:15,881
+Clara would see that
+there ain't no reason
+to be ashamed of bleh.
+
+113
+00:05:15,882 --> 00:05:17,316
+We all adults.
+
+114
+00:05:17,317 --> 00:05:19,985
+Dude, let's egg
+the trainable.
+
+115
+00:05:19,986 --> 00:05:21,854
+Mind if we
+join you guys?
+
+116
+00:05:21,855 --> 00:05:24,189
+No, no, no.
+Of course not.
+
+117
+00:05:24,190 --> 00:05:25,891
+Don't be stupid.
+
+118
+00:05:25,892 --> 00:05:28,027
+[both snicker]
+
+119
+00:05:43,176 --> 00:05:44,543
+[eggshells crack]
+
+120
+00:05:48,915 --> 00:05:52,217
+Man, clara's cousin
+is so hot!
+
+121
+00:05:52,218 --> 00:05:55,454
+<i>Damn! She's like
+retarded hot!</i>
+
+122
+00:06:01,127 --> 00:06:03,595
+[whimpers] sam! Aah!
+
+123
+00:06:05,432 --> 00:06:06,365
+Clara: i'm really glad
+I brought bleh
+
+124
+00:06:06,366 --> 00:06:08,367
+Down to hang out
+with everyone.
+
+125
+00:06:08,368 --> 00:06:10,803
+They treated her
+like she was one
+of the gang.
+
+126
+00:06:10,804 --> 00:06:12,771
+I hadn't seen bleh
+have this much fun
+
+127
+00:06:12,772 --> 00:06:15,207
+<i>Since they cancelled
+the pretty, shiny
+object show.</i>
+
+128
+00:06:15,208 --> 00:06:18,210
+You sure you don't
+want to stay and
+play a few rounds?
+
+129
+00:06:18,211 --> 00:06:21,280
+Nah, it's getting late,
+and we don't want to
+intrude on guy time.
+
+130
+00:06:21,281 --> 00:06:22,648
+'night!
+
+131
+00:06:22,649 --> 00:06:25,751
+<i>"I am sam works magic
+'cause of penn,"</i>
+
+132
+00:06:25,752 --> 00:06:28,153
+<i>Raves lou lumenick
+of the new york post.</i>
+
+133
+00:06:28,154 --> 00:06:30,022
+I go first.
+Whee!
+
+134
+00:06:30,023 --> 00:06:32,291
+Holy shit!
+
+135
+00:06:32,292 --> 00:06:34,293
+She is so hot!
+
+136
+00:06:34,294 --> 00:06:36,161
+Oh, spanky.
+
+137
+00:06:36,162 --> 00:06:38,564
+What? Oh. Ok.
+
+138
+00:06:38,565 --> 00:06:39,498
+[kiss]
+
+139
+00:06:40,700 --> 00:06:42,568
+Oh, that bleh, man.
+
+140
+00:06:42,569 --> 00:06:45,037
+I would totally dip
+my wick in that.
+
+141
+00:06:45,038 --> 00:06:47,906
+Listen, dude. No matter
+how hot she is,
+
+142
+00:06:47,907 --> 00:06:50,009
+You would not
+punch holes in a sped.
+
+143
+00:06:50,010 --> 00:06:51,210
+Oh, hell,
+yeah, I would.
+
+144
+00:06:51,211 --> 00:06:52,544
+I mean, she's
+the perfect girl.
+
+145
+00:06:52,545 --> 00:06:54,480
+All the sweater meat
+of a regular chick
+
+146
+00:06:54,481 --> 00:06:56,181
+And half
+the pillow talk.
+
+147
+00:06:58,385 --> 00:06:59,752
+[kiss]
+
+148
+00:06:59,753 --> 00:07:01,987
+Man, you're all talk.
+
+149
+00:07:01,988 --> 00:07:04,757
+Look, I got 20 large
+that says you won't
+sleep with her.
+
+150
+00:07:04,758 --> 00:07:07,659
+Make it 50
+and you're on.
+
+151
+00:07:07,660 --> 00:07:10,262
+Oh, ha ha!
+Wheeeeeee!
+
+152
+00:07:10,263 --> 00:07:13,198
+Hey, if you're gonna
+be gay about this,
+you can't play.
+
+153
+00:07:13,199 --> 00:07:14,333
+Sorry.
+
+154
+00:07:15,402 --> 00:07:16,635
+[kiss]
+
+155
+00:07:16,636 --> 00:07:20,205
+Fine. 50 bucks says you
+won't have sex with bleh.
+
+156
+00:07:20,206 --> 00:07:22,207
+Easy money.
+
+157
+00:07:22,208 --> 00:07:24,076
+Captain hero is
+gonna show you guys
+
+158
+00:07:24,077 --> 00:07:26,679
+What being a real man
+is all about.
+
+159
+00:07:26,680 --> 00:07:28,681
+All: triple kiss!
+
+160
+00:07:28,682 --> 00:07:30,516
+[kisses]
+
+161
+00:07:37,657 --> 00:07:41,293
+[snarls]
+
+162
+00:07:41,294 --> 00:07:43,228
+[speaking japanese]
+
+163
+00:07:48,601 --> 00:07:52,571
+¶ ling-ling
+into battle go ¶
+
+164
+00:07:52,572 --> 00:07:55,140
+¶ fulfill destiny
+of the soul ¶
+
+165
+00:07:55,141 --> 00:07:56,542
+¶ all the children sing ¶
+
+166
+00:07:56,543 --> 00:08:00,045
+Kids: ¶ kill,
+kill, kill, kill,
+die, die, die ¶
+
+167
+00:08:00,046 --> 00:08:01,580
+¶ kill, kill,
+kill, kill... ¶
+
+168
+00:08:01,581 --> 00:08:04,583
+Wait, ling-ling.
+It's just us.
+
+169
+00:08:04,584 --> 00:08:08,087
+We're not really
+a 3-headed, acid-spitting
+needle monster.
+
+170
+00:08:08,088 --> 00:08:11,190
+[speaking japanese]
+
+171
+00:08:11,191 --> 00:08:12,825
+Oh.
+
+172
+00:08:12,826 --> 00:08:14,960
+Oh, no, ling-ling.
+
+173
+00:08:14,961 --> 00:08:16,228
+Instead of
+cheering you up,
+
+174
+00:08:16,229 --> 00:08:21,367
+We accidentally
+disappointed you.
+
+175
+00:08:21,368 --> 00:08:24,069
+Oh, poor baby.
+
+176
+00:08:24,070 --> 00:08:25,471
+Triple kiss!
+
+177
+00:08:25,472 --> 00:08:27,373
+Oh! Hee hee!
+[kisses]
+
+178
+00:08:27,374 --> 00:08:31,310
+[sighing and giggling]
+
+179
+00:08:38,184 --> 00:08:39,585
+[knocks]
+
+180
+00:08:39,586 --> 00:08:41,420
+Clara:
+I found it a bit odd
+
+181
+00:08:41,421 --> 00:08:44,023
+That captain hero
+wanted to take bleh
+out on a date,
+
+182
+00:08:44,024 --> 00:08:45,691
+And it was
+my responsibility
+
+183
+00:08:45,692 --> 00:08:48,127
+To make sure his
+intentions were pure.
+
+184
+00:08:48,128 --> 00:08:50,329
+So, captain hero, is it?
+
+185
+00:08:50,330 --> 00:08:52,464
+Oh. Heh heh! Yeah?
+
+186
+00:08:52,465 --> 00:08:53,966
+Coming to take
+my little bleh out
+
+187
+00:08:53,967 --> 00:08:55,634
+For a night
+on the town, eh?
+
+188
+00:08:55,635 --> 00:08:57,770
+You know, I don't
+know what'd I do
+
+189
+00:08:57,771 --> 00:08:59,805
+If anything happened
+to my little bleh.
+
+190
+00:08:59,806 --> 00:09:02,341
+Yes, ma'am.
+I mean, no, ma'am.
+
+191
+00:09:02,342 --> 00:09:04,943
+Son, do you know
+what it's like
+
+192
+00:09:04,944 --> 00:09:08,147
+To kill a man with
+your bare hands?
+
+193
+00:09:08,148 --> 00:09:09,748
+I do.
+
+194
+00:09:09,749 --> 00:09:10,883
+I...
+
+195
+00:09:10,884 --> 00:09:12,151
+Oh!
+
+196
+00:09:12,152 --> 00:09:13,986
+Here's bleh now!
+
+197
+00:09:13,987 --> 00:09:16,155
+¶ there she is... ¶
+
+198
+00:09:16,156 --> 00:09:19,825
+Wow! You look...
+Stunning.
+
+199
+00:09:19,826 --> 00:09:25,497
+<i>"I am sam's dakota
+fanning is worth the
+price of admission."</i>
+
+200
+00:09:25,498 --> 00:09:27,700
+[blow dart]
+
+201
+00:09:27,701 --> 00:09:29,501
+Ow! What the hell?!
+
+202
+00:09:29,502 --> 00:09:31,904
+A little
+added protection.
+
+203
+00:09:31,905 --> 00:09:34,807
+You'll get the antidote
+when I get my bleh back.
+
+204
+00:09:34,808 --> 00:09:39,311
+[all giggling]
+
+205
+00:09:39,312 --> 00:09:42,748
+Hey, ling-ling,
+you excited for
+christmas?
+
+206
+00:09:42,749 --> 00:09:45,317
+Too bad there's
+no such thing
+as santa claus!
+
+207
+00:09:45,318 --> 00:09:46,985
+I bet you're
+disappointed.
+
+208
+00:09:46,986 --> 00:09:48,153
+Oh.
+
+209
+00:09:48,154 --> 00:09:50,889
+[laughs]
+
+210
+00:09:50,890 --> 00:09:53,659
+Hey, look what
+I found in your ear!
+
+211
+00:09:53,660 --> 00:09:55,427
+Is it a quarter?
+
+212
+00:09:55,428 --> 00:09:58,330
+Oh, no!
+It's a tumor!
+
+213
+00:09:58,331 --> 00:09:59,765
+Oh.
+
+214
+00:09:59,766 --> 00:10:02,601
+[slurps]
+
+215
+00:10:02,602 --> 00:10:04,370
+[giggles]
+
+216
+00:10:04,371 --> 00:10:09,008
+Hey, ling-ling,
+you excited for
+christmas?
+
+217
+00:10:09,009 --> 00:10:11,443
+Oh, no!
+It's a tumor!
+
+218
+00:10:11,444 --> 00:10:12,845
+Oh.
+
+219
+00:10:12,846 --> 00:10:16,181
+[slurps]
+
+220
+00:10:16,182 --> 00:10:19,418
+¶ girly, girly,
+girly, girly... ¶
+
+221
+00:10:19,419 --> 00:10:23,689
+[bleh shouts happily
+and incoherently]
+
+222
+00:10:23,690 --> 00:10:25,357
+Captain hero:
+yes, I was confident
+
+223
+00:10:25,358 --> 00:10:28,327
+That by the end of the
+night, i'd have another
+notch on my utility belt
+
+224
+00:10:28,328 --> 00:10:30,095
+And 50 bucks in my pocket.
+
+225
+00:10:30,096 --> 00:10:33,565
+Then I realized
+something. Bleh...
+
+226
+00:10:33,566 --> 00:10:35,034
+She was really special,
+
+227
+00:10:35,035 --> 00:10:36,635
+But not like in
+a retarded way,
+
+228
+00:10:36,636 --> 00:10:39,004
+In a traditionally
+special way.
+
+229
+00:10:39,005 --> 00:10:44,943
+¶ did you ever know
+that you're my hero? ¶
+
+230
+00:10:44,944 --> 00:10:46,245
+Oh!
+
+231
+00:10:46,246 --> 00:10:47,546
+Ok!
+
+232
+00:10:47,547 --> 00:10:53,352
+¶ you're everything
+I wish I could be ¶
+
+233
+00:10:53,353 --> 00:10:56,088
+¶ I could fly higher
+than an eagle ¶
+
+234
+00:10:56,089 --> 00:10:57,556
+[both giggle]
+
+235
+00:10:57,557 --> 00:10:59,558
+Sam.
+
+236
+00:10:59,559 --> 00:11:02,761
+I don't like
+these things.
+They scare me!
+
+237
+00:11:02,762 --> 00:11:05,631
+¶ beneath my wings ¶
+
+238
+00:11:05,632 --> 00:11:09,468
+Eeeeeeh! Aah! Sam!
+¶ oh, oh, fly ¶
+
+239
+00:11:09,469 --> 00:11:14,340
+¶ so high
+against the sky ¶
+
+240
+00:11:14,341 --> 00:11:16,942
+¶ so high I almost... ¶
+
+241
+00:11:16,943 --> 00:11:20,646
+Bleh, you are the wind
+beneath my wings.
+
+242
+00:11:20,647 --> 00:11:22,681
+"contrived, manipulative,
+
+243
+00:11:22,682 --> 00:11:28,721
+<i>And shamelessly
+sentimental," raves peter
+travers from rolling stone.</i>
+
+244
+00:11:34,627 --> 00:11:37,596
+Hey, ling-ling,
+I got a penny.
+No, I don't.
+
+245
+00:11:37,597 --> 00:11:39,198
+[licks dry fur]
+
+246
+00:11:39,199 --> 00:11:40,866
+[rattles]
+
+247
+00:11:40,867 --> 00:11:41,867
+[bam bam]
+
+248
+00:11:41,868 --> 00:11:43,702
+[licks dry fur]
+
+249
+00:11:43,703 --> 00:11:46,138
+Whoa, guys. Guys!
+
+250
+00:11:46,139 --> 00:11:47,840
+Ling-ling is
+totally kicked!
+
+251
+00:11:47,841 --> 00:11:48,841
+What?!
+
+252
+00:11:48,842 --> 00:11:50,209
+[pants]
+
+253
+00:11:50,210 --> 00:11:52,978
+[licks dry fur]
+
+254
+00:11:52,979 --> 00:11:54,747
+Don't hold out
+on me, man.
+
+255
+00:11:54,748 --> 00:11:57,449
+I need my fix.
+Come on! Please,
+man, come on!
+
+256
+00:11:57,450 --> 00:11:59,618
+What do you want?
+I'll do anything!
+
+257
+00:11:59,619 --> 00:12:01,253
+I'll suck your dick!
+
+258
+00:12:03,156 --> 00:12:04,556
+Ooh! Ooh, sam!
+
+259
+00:12:04,557 --> 00:12:05,991
+Hee hee!
+Shh!
+
+260
+00:12:05,992 --> 00:12:08,861
+Are you crazy?
+They'll hear us!
+
+261
+00:12:08,862 --> 00:12:11,764
+Captain hero:
+bleh and I got home way
+past midnight.
+
+262
+00:12:11,765 --> 00:12:15,701
+I was like, we are gonna
+get in so much trouble!
+
+263
+00:12:15,702 --> 00:12:19,672
+So, this was
+really fantastic.
+
+264
+00:12:19,673 --> 00:12:23,842
+Um, I,
+uh...Good night.
+
+265
+00:12:23,843 --> 00:12:24,777
+[kiss]
+
+266
+00:12:25,879 --> 00:12:27,513
+¶ girly, girly,
+girly, girly... ¶
+
+267
+00:12:27,514 --> 00:12:29,415
+Ahh!
+
+268
+00:12:29,416 --> 00:12:32,951
+Hey, super stud.
+Did you sleep
+with her?
+
+269
+00:12:32,952 --> 00:12:34,453
+Dude, back off!
+
+270
+00:12:34,454 --> 00:12:36,922
+I did not, as you
+so crudely put it...
+
+271
+00:12:36,923 --> 00:12:38,857
+"nail her
+in the stink tube."
+
+272
+00:12:38,858 --> 00:12:40,592
+It's not like that.
+
+273
+00:12:40,593 --> 00:12:42,961
+So you kids are
+taking it slow?
+
+274
+00:12:42,962 --> 00:12:43,996
+See what I did
+there? I--
+
+275
+00:12:43,997 --> 00:12:45,998
+You just don't get it,
+spanky.
+
+276
+00:12:45,999 --> 00:12:47,299
+Nobody gets it!
+
+277
+00:12:47,300 --> 00:12:48,467
+[wails]
+
+278
+00:12:48,468 --> 00:12:50,069
+[door slams]
+
+279
+00:12:50,070 --> 00:12:51,470
+Captain hero:
+I was lying in bed,
+
+280
+00:12:51,471 --> 00:12:54,273
+Replaying the date over
+and over in my head,
+
+281
+00:12:54,274 --> 00:12:56,842
+When there was a knock
+at the door.
+[knocks]
+
+282
+00:12:56,843 --> 00:12:57,776
+Who's there?
+
+283
+00:12:58,845 --> 00:13:01,080
+Bleh! What are you--
+
+284
+00:13:02,415 --> 00:13:04,983
+Listen, bleh,
+i'm not that kind of guy.
+
+285
+00:13:04,984 --> 00:13:05,984
+[pulls pants down]
+
+286
+00:13:05,985 --> 00:13:08,153
+Oh, my!
+
+287
+00:13:08,154 --> 00:13:12,057
+Oh, no, no, no...
+
+288
+00:13:12,058 --> 00:13:14,293
+Leave the helmet on.
+
+289
+00:13:17,330 --> 00:13:18,697
+Ahh.
+
+290
+00:13:18,698 --> 00:13:21,433
+Clara: that morning,
+I woke up feeling great.
+
+291
+00:13:21,434 --> 00:13:24,269
+Everyone had accepted
+me and my cousin,
+
+292
+00:13:24,270 --> 00:13:25,971
+And that was swell.
+
+293
+00:13:25,972 --> 00:13:29,875
+Oh, what a glorious day,
+isn't it, bleh?
+
+294
+00:13:29,876 --> 00:13:31,877
+Bleh?
+
+295
+00:13:31,878 --> 00:13:33,612
+Bleh?!
+
+296
+00:13:33,613 --> 00:13:37,683
+Captain hero!
+Clara, it's not
+what you think!
+
+297
+00:13:37,684 --> 00:13:38,684
+[gibberish]
+
+298
+00:13:38,685 --> 00:13:40,552
+Get up! Get up
+right now!
+
+299
+00:13:40,553 --> 00:13:43,856
+<i>"I am sam reduces penn to
+a mugging embarrassment,"</i>
+
+300
+00:13:43,857 --> 00:13:46,091
+<i>Raves mike clark
+of usa today.</i>
+
+301
+00:13:46,092 --> 00:13:47,860
+I don't care.
+Let's go!
+
+302
+00:13:47,861 --> 00:13:49,561
+Yeeeh...
+
+303
+00:13:49,562 --> 00:13:52,297
+Go back to your
+cage right now!
+
+304
+00:13:52,298 --> 00:13:55,434
+Spanky: well,
+look who's doing
+the limp of shame!
+
+305
+00:13:55,435 --> 00:13:57,169
+You bastard!
+
+306
+00:13:57,170 --> 00:13:59,338
+Captain hero:
+clara totally overreacted.
+
+307
+00:13:59,339 --> 00:14:00,639
+I mean, bleh was an adult,
+
+308
+00:14:00,640 --> 00:14:02,374
+And completely capable
+of making her own decisions.
+
+309
+00:14:02,375 --> 00:14:03,809
+Or not.
+
+310
+00:14:03,810 --> 00:14:06,945
+Still, I needed to
+sit clara down and
+explain what happened.
+
+311
+00:14:06,946 --> 00:14:09,948
+Clara, I never expected
+this to happen.
+
+312
+00:14:09,949 --> 00:14:14,720
+It's just that I have
+real feelings for her.
+
+313
+00:14:14,721 --> 00:14:17,389
+Well...
+
+314
+00:14:17,390 --> 00:14:20,025
+¶ there she is ¶
+
+315
+00:14:20,026 --> 00:14:23,295
+¶ she's a girl ¶
+
+316
+00:14:23,296 --> 00:14:25,497
+If that is the truth--
+
+317
+00:14:25,498 --> 00:14:26,932
+It is.
+
+318
+00:14:26,933 --> 00:14:28,967
+Then i'm truly happy
+for the two of you.
+
+319
+00:14:28,968 --> 00:14:31,170
+You're a good man,
+captain hero.
+
+320
+00:14:31,171 --> 00:14:33,005
+I knew I could
+trust you.
+
+321
+00:14:33,006 --> 00:14:35,107
+Here's the antidote.
+
+322
+00:14:35,108 --> 00:14:36,342
+[gulp]
+
+323
+00:14:36,343 --> 00:14:38,977
+Well, nice work,
+captain hero.
+
+324
+00:14:38,978 --> 00:14:41,980
+Here's the $50
+I bet you to have
+sex with bleh.
+
+325
+00:14:41,981 --> 00:14:42,981
+[gasps]
+
+326
+00:14:42,982 --> 00:14:44,049
+Yeeeeeh!
+
+327
+00:14:44,050 --> 00:14:45,184
+Oh, um, I mean, uh...
+
+328
+00:14:45,185 --> 00:14:49,655
+Here is the $50
+captain hero won off me
+
+329
+00:14:49,656 --> 00:14:52,291
+Because I bet him
+he would not have sex
+
+330
+00:14:52,292 --> 00:14:53,926
+With your
+special cousin bleh.
+
+331
+00:14:53,927 --> 00:14:56,128
+But he did, in fact,
+have sex with her.
+
+332
+00:14:56,129 --> 00:14:58,564
+Oh, yes, he did.
+For $50.
+
+333
+00:14:58,565 --> 00:15:01,133
+Oh, man. Saved it.
+
+334
+00:15:01,134 --> 00:15:07,539
+Captain hero, I forbid you
+to see my cousin ever again!
+
+335
+00:15:07,540 --> 00:15:08,774
+Uhh!
+
+336
+00:15:08,775 --> 00:15:10,676
+I would have been
+more pissed at spanky,
+
+337
+00:15:10,677 --> 00:15:13,679
+But you know,
+I just won $50!
+
+338
+00:15:13,680 --> 00:15:16,382
+[cash register bell]
+ah! Who's your daddy?
+
+339
+00:15:16,383 --> 00:15:19,485
+Ooh, I like the big one
+and that one over there
+
+340
+00:15:19,486 --> 00:15:20,986
+And...Ooh!
+
+341
+00:15:20,987 --> 00:15:25,057
+Yeah. Hell, yeah!
+[girls talking and laughing]
+
+342
+00:15:25,058 --> 00:15:26,925
+Ehhhh.
+
+343
+00:15:26,926 --> 00:15:28,394
+Ehhhh.
+
+344
+00:15:28,395 --> 00:15:30,362
+Ehhhh.
+
+345
+00:15:30,363 --> 00:15:32,164
+Oh, look at
+poor ling-ling.
+
+346
+00:15:32,165 --> 00:15:33,932
+We've licked
+the life out of it.
+
+347
+00:15:33,933 --> 00:15:35,234
+What should we do?
+
+348
+00:15:35,235 --> 00:15:36,235
+Poke it harder.
+
+349
+00:15:36,236 --> 00:15:37,236
+Uhh!
+
+350
+00:15:37,237 --> 00:15:38,237
+[gasps]
+
+351
+00:15:38,238 --> 00:15:39,571
+Look at me!
+
+352
+00:15:39,572 --> 00:15:42,608
+I've become the very
+thing I hate most.
+
+353
+00:15:42,609 --> 00:15:44,576
+A guy who pokes things
+with sticks?
+
+354
+00:15:44,577 --> 00:15:49,181
+Oh, we've abused ling-ling
+to the point where the
+little guy is just numb.
+
+355
+00:15:49,182 --> 00:15:50,649
+And for what?
+
+356
+00:15:50,650 --> 00:15:52,551
+To catch a buzz?!
+
+357
+00:15:52,552 --> 00:15:55,654
+I guess being cool
+just isn't worth it.
+
+358
+00:15:55,655 --> 00:15:59,024
+["what you already know"
+jingle plays]
+
+359
+00:15:59,025 --> 00:16:01,293
+Come on. We've got to
+make this right!
+
+360
+00:16:02,529 --> 00:16:04,396
+Sorry, wooldoor.
+You stay here
+
+361
+00:16:04,397 --> 00:16:06,899
+Until all that ling-ling
+is out of your system.
+
+362
+00:16:06,900 --> 00:16:10,135
+It's gonna be
+the hardest thing
+you've ever done.
+
+363
+00:16:10,136 --> 00:16:11,136
+Toodles!
+
+364
+00:16:11,137 --> 00:16:13,405
+[slam]
+
+365
+00:16:13,406 --> 00:16:15,474
+Aah! I can't take it!
+
+366
+00:16:15,475 --> 00:16:18,477
+[wacky noises]
+
+367
+00:16:21,047 --> 00:16:24,416
+Ha ha ha ha ha ha!
+Wooldoor: I can't take it!
+
+368
+00:16:24,417 --> 00:16:26,285
+Aaaaaaaaaaaaaaaah!
+
+369
+00:16:26,286 --> 00:16:29,154
+Captain hero:
+oh, sure, the money
+helped dull the pain,
+
+370
+00:16:29,155 --> 00:16:33,692
+But later, you know, when
+the stores are all closed,
+
+371
+00:16:33,693 --> 00:16:35,294
+Who do I have
+to share it with?
+
+372
+00:16:35,295 --> 00:16:41,433
+Bleh? No. Not anymore.
+Not anymore.
+
+373
+00:16:41,434 --> 00:16:43,635
+It just wasn't
+worth it, spanky!
+
+374
+00:16:43,636 --> 00:16:46,705
+Bleh, she--
+she was special.
+
+375
+00:16:46,706 --> 00:16:48,807
+What are you--
+what are you saying?
+
+376
+00:16:48,808 --> 00:16:52,678
+Oh, spanky,
+I love her.
+
+377
+00:16:53,880 --> 00:16:59,018
+Then go to her.
+
+378
+00:16:59,019 --> 00:17:00,719
+Xandir:
+we knew what we had done
+to ling-ling was wrong.
+
+379
+00:17:00,720 --> 00:17:02,488
+Hopefully, this was gonna
+
+380
+00:17:02,489 --> 00:17:03,622
+Make it up to that lovable,
+
+381
+00:17:03,623 --> 00:17:06,258
+Fortune cookie cat thing.
+
+382
+00:17:06,259 --> 00:17:11,096
+Ling-ling, there's
+a special warrior
+here to see you.
+
+383
+00:17:11,097 --> 00:17:15,567
+[japanese song playing]
+
+384
+00:17:15,568 --> 00:17:17,503
+[speaking japanese]
+
+385
+00:17:19,739 --> 00:17:21,674
+[speaking japanese]
+
+386
+00:17:33,086 --> 00:17:35,654
+Toot:
+sure, we have our issues,
+
+387
+00:17:35,655 --> 00:17:39,224
+But really, this is
+a house drawn together
+
+388
+00:17:39,225 --> 00:17:40,659
+With love.
+
+389
+00:17:40,660 --> 00:17:43,595
+[speaking japanese]
+
+390
+00:18:05,752 --> 00:18:07,753
+Yah!
+Uhh!
+
+391
+00:18:07,754 --> 00:18:10,189
+[slurping]
+
+392
+00:18:10,190 --> 00:18:12,991
+All right, clara,
+where is she?!
+
+393
+00:18:12,992 --> 00:18:15,828
+Hah! You're too late,
+captain jerko!
+
+394
+00:18:15,829 --> 00:18:18,630
+She left for the front door
+well over 2 minutes ago!
+
+395
+00:18:18,631 --> 00:18:21,066
+You'll never catch her!
+Never!
+
+396
+00:18:21,067 --> 00:18:23,202
+Oh. Oh, well.
+
+397
+00:18:23,203 --> 00:18:24,903
+I guess it wasn't
+meant to be.
+
+398
+00:18:24,904 --> 00:18:26,939
+Easy come, easy go.
+
+399
+00:18:26,940 --> 00:18:28,807
+Well, i'll be
+seeing you, clara.
+
+400
+00:18:28,808 --> 00:18:31,143
+Wait! Damn you!
+I've got to try!
+
+401
+00:18:31,144 --> 00:18:32,578
+Yahh!
+
+402
+00:18:34,447 --> 00:18:36,448
+Captain hero: bleh!
+Wait! I'm coming!
+
+403
+00:18:36,449 --> 00:18:37,950
+Dude, where are you--uhh!
+
+404
+00:18:37,951 --> 00:18:39,518
+Watch it, pig!
+
+405
+00:18:39,519 --> 00:18:41,086
+Go get her, man.
+
+406
+00:18:41,087 --> 00:18:42,087
+Uhh!
+
+407
+00:18:42,088 --> 00:18:43,355
+Watch it,
+hot black girl!
+
+408
+00:18:43,356 --> 00:18:45,157
+Go get her, man.
+
+409
+00:18:45,158 --> 00:18:49,895
+[muzak playing]
+
+410
+00:18:49,896 --> 00:18:56,168
+[blissful sighs and moans]
+
+411
+00:18:56,169 --> 00:18:57,770
+Oh, come on!
+
+412
+00:19:00,206 --> 00:19:05,444
+Bleh! Bleh!
+Bleh! Bleh!
+
+413
+00:19:05,445 --> 00:19:06,812
+Oh.
+
+414
+00:19:06,813 --> 00:19:08,747
+Bleh! Bleh, wait!
+
+415
+00:19:08,748 --> 00:19:11,350
+Listen, I don't know
+what clara told you,
+
+416
+00:19:11,351 --> 00:19:14,453
+But I love you.
+
+417
+00:19:14,454 --> 00:19:16,555
+Yehhhhhhhh.
+
+418
+00:19:18,458 --> 00:19:20,192
+[splat]
+
+419
+00:19:20,193 --> 00:19:22,127
+"one of the year's
+10 best!"
+
+420
+00:19:22,128 --> 00:19:25,631
+"delivers in ways
+you never expected!"
+
+421
+00:19:25,632 --> 00:19:29,134
+Yes, well, maybe
+it wouldn't work out.
+
+422
+00:19:29,135 --> 00:19:31,637
+I mean, we come
+from different worlds.
+
+423
+00:19:31,638 --> 00:19:33,772
+I come from
+planet zebulon
+
+424
+00:19:33,773 --> 00:19:36,909
+And you come from
+a mom who drank when
+she was pregnant.
+
+425
+00:19:36,910 --> 00:19:40,446
+Well, farewell,
+my sweet.
+
+426
+00:19:40,447 --> 00:19:41,947
+Mwah!
+
+427
+00:19:41,948 --> 00:19:44,983
+Mnnnh deh
+nnnh.
+
+428
+00:19:44,984 --> 00:19:47,186
+Yeah! She kissed him!
+
+429
+00:19:47,187 --> 00:19:49,488
+She kissed him!
+
+430
+00:19:49,489 --> 00:19:51,657
+Ha ha! Ha ha!
+
+431
+00:19:51,658 --> 00:19:55,994
+Bleh, you nailed
+the dry-mouth
+from reality tv show!
+
+432
+00:19:55,995 --> 00:19:59,264
+Well, I guess I owe you
+that 50 bucks now.
+
+433
+00:19:59,265 --> 00:20:02,801
+Oh! 50 bucks! Yeah!
+
+434
+00:20:02,802 --> 00:20:06,438
+[cash register bell]
+ooh, yeah,
+who's your daddy?
+
+435
+00:20:06,439 --> 00:20:09,908
+I like the big one
+and I like the one
+over there. Ooh!
+
+436
+00:20:09,909 --> 00:20:13,245
+Yeah. Hell, yeah!
+[girls talking and laughing]
+
+437
+00:20:13,246 --> 00:20:14,880
+Bleh: sam, bye-bye!
+
+438
+00:20:14,881 --> 00:20:16,048
+Bye-bye, sam!
+
+439
+00:20:16,049 --> 00:20:18,150
+[choked up] bye.
+
+440
+00:20:19,786 --> 00:20:21,854
+Good-bye.
+
+441
+00:20:23,189 --> 00:20:24,823
+You ok, man?
+
+442
+00:20:24,824 --> 00:20:28,560
+I...Don't know
+if i'll ever be ok.
+
+443
+00:20:28,561 --> 00:20:30,062
+Yeah, i'm sorry.
+
+444
+00:20:30,063 --> 00:20:32,031
+Hey, you want to go
+grab a beer,
+
+445
+00:20:32,032 --> 00:20:34,533
+Spin it, and kiss
+whoever it points to?
+
+446
+00:20:34,534 --> 00:20:39,271
+No. Not now, spanky.
+Not now.
+
+447
+00:20:43,543 --> 00:20:44,543
+How about now?
+
+448
+00:20:44,544 --> 00:20:45,811
+Yeah. Ok.
+
+449
+00:20:45,812 --> 00:20:51,550
+¶ girly, girly,
+girly, girly girl ¶
+
+450
+00:20:51,551 --> 00:20:53,052
+¶ girl ¶
+
+451
+00:20:53,053 --> 00:20:55,954
+¶ girly, girly girl-- ¶
+