diff options
| author | Vi Grey <vi@vigrey.com> | 2022-09-24 18:31:00 -0500 |
|---|---|---|
| committer | Vi Grey <vi@vigrey.com> | 2022-09-24 18:31:00 -0500 |
| commit | bc9dbaba7f33ef2775c0db6a17ce2329cabf4044 (patch) | |
| tree | 63546b504d8a0436bbffd891bd9a41197edceeca | |
| parent | 03df989d36e47bfd38e7e4b5e752144b18913e7d (diff) | |
| download | tasd-bc9dbaba7f33ef2775c0db6a17ce2329cabf4044.tar.gz tasd-bc9dbaba7f33ef2775c0db6a17ce2329cabf4044.zip | |
Initial version 0001 spec documents (RFC)
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | CHANGELOG.md | 6 | ||||
| -rw-r--r-- | LICENSES.txt | 84 | ||||
| -rw-r--r-- | Makefile | 37 | ||||
| -rw-r--r-- | README.md | 70 | ||||
| -rw-r--r-- | data-summary.md | 75 | ||||
| -rw-r--r-- | docs/draft-tasd-0001.html | 5055 | ||||
| -rw-r--r-- | docs/draft-tasd-0001.pdf | 8682 | ||||
| -rw-r--r-- | docs/draft-tasd-0001.txt | 2158 | ||||
| -rw-r--r-- | inputmaps.txt | 338 | ||||
| -rw-r--r-- | spec.md | 247 | ||||
| -rw-r--r-- | src/docs/draft-tasd-0001.xml | 1824 | ||||
| -rw-r--r-- | tools/lua/tasd-fceux-dumpscript.lua | 428 | ||||
| -rwxr-xr-x | tools/tasd2r08/tasd2r08.py | 137 |
14 files changed, 18470 insertions, 672 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..567609b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build/ diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..3d1b55d --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,6 @@ +# Change Log +All notable changes to this project will be documented in this file. + +## 2022-09-24 +### Added +- Initial release
\ No newline at end of file diff --git a/LICENSES.txt b/LICENSES.txt new file mode 100644 index 0000000..81f5ed2 --- /dev/null +++ b/LICENSES.txt @@ -0,0 +1,84 @@ +TASD File Format Specification Version 1 + Copyright (c) 2021-2022, Vi Grey and Bigbass + + All rights reserved. + + Redistribution and use of this documentation in source (XML format) + and/or "compiled" forms (TXT, PDF, HTML, etc), with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code (XML format) of this documentation + must retain the above copyright notice, this list of conditions, + and the following disclaimer in the documentation. + + 2. Redistributions in compiled form (Converted to TXT, PDF, HTML, + and other formats) of this documentation must reproduce the above + copyright notice, this list of conditions, and the following + disclaimer in the documentation. + + THIS DOCUMENTATION IS PROVIDED BY THE AUTHOR(S) "AS IS" AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +tools/lua/tasd-fceux-dumpscript.lua + Copyright (c) 2022, Vi Grey + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + + +tools/tasd2r08/tasd2r08.py + Copyright (c) 2022, Vi Grey + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..8028f64 --- /dev/null +++ b/Makefile @@ -0,0 +1,37 @@ +# Copyright (C) 2021-2022, Vi Grey and Bigbass +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. + +DOC_NAME := draft-tasd-0001 +CURRENTDIR := $(dir $(realpath $(firstword $(MAKEFILE_LIST)))) + +documents: + mkdir -p $(CURRENTDIR)build/docs; \ + cd $(CURRENTDIR)src/docs; \ + xml2rfc $(DOC_NAME).xml --text --html --pdf --no-external-js --no-external-css --v3 --id-is-work-in-progress --no-pagination; \ + mv $(DOC_NAME).pdf $(DOC_NAME).html $(DOC_NAME).txt $(CURRENTDIR)build/docs; \ + cd $(CURRENTDIR); \ + +clean: + rm -rf -- $(CURRENTDIR)build; \ @@ -1,12 +1,58 @@ -The **TASD (Tool Assisted Speedrun Dump)**, is a dump file format for replaying TASes on real hardware. It is structured to be independent on any given console, replay-device, or emulator. It can contain any amount of data, including attributions, emulation context, inputs, transitions, replay constraints, and much more.
-
-Specification details and examples can be found in [Spec.md](Spec.md). Controller input maps are defined in [inputmaps.txt](inputmaps.txt).
-
-**Latest Version:** 0x0001
-
-## Tools and Scripts
-[TASD-Edit](https://github.com/bigbass1997/TASD-Edit) is a cross-platform, CLI-based editor for TASD files. Can create/edit TASD files, and import or export legacy formats: r08, r16m, and GBI.
-
-ViGreyTech has created a single-file [Lua dump script]() that works across multiple emulators and consoles.
-
-If you'd like to create your own Lua script, Bigbass has created a [Lua API/library]() to aid in generating TASD files.
+# **TASD File Format Specification And Tools** + +Specification and Tools for the Tool Assisted Speedrun Dump (TASD) interchange format + +<ins>**IMPORTANT**</ins> - This specification is in a DRAFT phase. Expect inaccuracies, typos, and considerable changes. Nothing is set in stone. + +### Description: + +The Tool Assisted Speedrun Dump (TASD) interchange format is a file format designed by [Vi Grey](https://github.com/vigrey) and [bigbass](https://github.com/bigbass1997) for storing data to allow "Tool Assisted Speedruns" or "Tool Assited Superplays" to be played on physical video game console hardware using TAS replay devices. Created to be hardware and software agnostic, the TASD interchange format uses a key-based, binary, packet format to break up pieces of information into easily-parsable and forward-compatible chunks. The format is extensible by simply defining additional keys or value types as necessary. When parsing the file, software can skip any packets whose key is unknown or unsupported. + +Keys can be used multiple times or completely omitted as needed. This reusability eliminates the need of a predefined delimiter to separate pieces of data such as a list of TAS authors. + +While files generated by emulator dump scripts should provide as much information as possible, because keys are optional, the file can be expanded later with any additional data as desired. No intermediary file format is necessary. + + +## **READING THE SPECIFICATION DOCUMENTATION** + +The specification documentation can be found at `docs/draft-tasd-0001.html`, `docs/draft-tasd-0001.pdf`, and `docs/draft-tasd-0001.txt` and is presented in a format quite similar to IETF (Internet Engineering Task Force) RFC (Request For Comment) documents. + + +## **BUILDING THE SPECIFICATION DOCUMENTATION** + +### Documentation Build Dependencies +- xml2rfc + + pango (for PDF build support) + + weasyprint (for PDF build support) + +All 3 dependencies can be installed from the Python3 PIP package manager. + +### Build the Documentation +From a terminal, go to the the main directory of this project (the directory this README.md file exists in). You can then build the NES ROM with the following command. + +```sh +make +``` + +After building the documentation, you should find `draft-tasd-0001.html`, `draft-tasd-0001.pdf`, and `draft-tasd-0001.txt` in the `build/docs/` directory. + +The source code for the documentation can be found in `src/docs/draft-tasd-0001.xml`. The xml2rfc vocabulary of the xml file is explained in [RFC 7991](https://www.rfc-editor.org/rfc/rfc7991). + + +## Tools and Scripts + +Included in this repository is a small set of tools, which will hopefully grow to a larger set of tools over time. + +A lua script to dump a FCEUX TAS to a TASD file can be found at `tools/lua/tasd-fceux-dumpscript.lua`. + +A tool to convert a TASD file to an r08 file can be found at `tools/tasd2r08/tasd2r08.py`. + +[TASD-Edit](https://github.com/bigbass1997/TASD-Edit) is a cross-platform, CLI-based editor for TASD files. Can create/edit TASD files, and import or export legacy formats: r08, r16m, and GBI. + +## TODO + +- Add usage explanation for tools +- Add dump script support for more emulators and for more consoles +- Add `CONTRIBUTIONS.md` file with general rules for contributing to this project, especially for updating `CHANGELOG.md` and the end changelog at `src/docs/draft-tasd-0001.xml` +- Develop and add tools that make TASD file editing easier +- Possibly split this TODO into another file
\ No newline at end of file diff --git a/data-summary.md b/data-summary.md deleted file mode 100644 index e874ae2..0000000 --- a/data-summary.md +++ /dev/null @@ -1,75 +0,0 @@ -## Unique Data
-- Magic Number
-- Spec Version Number
-- Key Size or Delimiter
-
-## Packet Format:
-`[Key] [Length Exponent] [Payload Length] [Payload Data]`
-
-## Common Packets:
-| Type | Size | Description |
-| --- | --- | --- |
-| ConsoleType | 1 byte | Possible values: NES, SNES, N64, Gamecube, GB, GBC, GBA, Genesis, A2600,... |
-| ConsoleRegion | 1 byte | Possible values: NTSC, PAL |
-| GameTitle | 0-65535 bytes | May be ROM file name, or game name retrieved from a database? |
-| Hashes | ? | Should probably include MD5, SHA-1, SHA-254, or others |
-| Author | 0-65535 bytes | Either reusable key/entry (preferable), or a single list delimited by something |
-| Category | 0-65535 bytes | Category of TAS (e.g. any%) |
-| EmulatorName | 0-255 bytes | Name of emulator (e.g. BizHawk, FCEUX,...)
-| EmulatorVersion | 0-255 bytes | Probably a string? Might contain decimals |
-| TASLastModified | 8 bytes | Unix Epoch (seconds) |
-| DumpLastModified | 8 bytes | Unix Epoch (seconds) |
-| NumberOfFrames | 4 bytes | 32bit unsigned number |
-| RAMInitType | 1 byte | Does RAM need to be initialized? If yes, in what pattern? |
-| SaveInitType | 1 byte | Does Save Memory need to be initialized? If yes, in what pattern? |
-| Rerecords | 4 bytes | 32bit unsigned number of rerecords |
-| SourceLink | ? | Link to TAS Publication or Video |
-| BlankFrames | 2 bytes | 16bit signed number to add blank frames, or subtract from movie |
-| Verified | 1 byte | boolean whether this TAS has been verified before |
-
-## NES Specific Packets:
-| Type | Size | Description |
-| --- | --- | --- |
-| LatchFilter | 1 byte | Latch Filter time span (value multiplied by 0.1ms; inclusive range of 0.0ms to 25.5ms) |
-| ClockFilter | 1 byte | Clock Filter time span (value multiplied by 0.25us; inclusive range of 0.0us to 63.75us) |
-| Overread | 1 byte | If overread occurs, whether to give a 0 or a 1 |
-| DPCM | 1 byte | Is DPCM used in this TAS? |
-| GameGenieCode | 8 bytes | A Game Genie code |
-| ControllerPortType | 2 bytes | Port Number (1-indexed) in first byte. Controller Type in second byte. Possible types: Standard, Multitap (Four Score), Zapper |
-
-## SNES Specific Packets:
-| Type | Size | Description |
-| --- | --- | --- |
-| LatchTrains | ? | More info needed... |
-| ControllerPortType | 2 bytes | Port Number (1-indexed) in first byte. Controller Type in second byte. Possible types: Standard, Multitap, Mouse, Superscope |
-
-## N64 Specific Packets:
-| Type | Size | Description |
-| --- | --- | --- |
-| ControllerPortType | 2 bytes | Port Number (1-indexed) in first byte. Controller Type in second byte. Possible types: Standard, Standard with Controller Pak, Standard with Transfer Pak, RandNet Keyboard, Voice Recognition Unit (VRU), Mouse, Densha de Go (only used for 1 game), Dancepad (more research needed) |
-
-## Gamecube Specific Packets:
-More research required...
-
-## Wii Specific Packets:
-More research required...
-
-## GB/C/A Specific Packets:
-More research required...
-
-## Genesis Specific Packets:
-| Type | Size | Description |
-| --- | --- | --- |
-| ControllerPortType | 2 bytes | Port Number (1-indexed) in first byte. Controller Type in second byte. Possible types: 3-Button (uses 8 bits), 6-Button (uses 12 bits) |
-
-## A2600 Specific Packets:
-| Type | Size | Description |
-| --- | --- | --- |
-| ControllerPortType | 2 bytes | Port Number (1-indexed) in first byte. Controller Type in second byte. Possible types: Joystick (uses 5 bits), Paddles (uses 2 bits, and 2 pots?), many others... |
-
-## Input Related Packets:
-| Type | Size | Description |
-| --- | --- | --- |
-| Input | 1 + n bytes | Specify port number; then 1 or more input frames for this port |
-| LagFrame | 4 + 4 bytes | 4 bytes specifying frame number, 4 bytes specifying number of lag frames including first. |
-| TransitionFrame | 4 + 2 bytes | 4 bytes specifying frame number, 2 bytes specifying transition type. Types include: "Soft" Reset, Power Reset, possibly others... |
\ No newline at end of file diff --git a/docs/draft-tasd-0001.html b/docs/draft-tasd-0001.html new file mode 100644 index 0000000..e067cef --- /dev/null +++ b/docs/draft-tasd-0001.html @@ -0,0 +1,5055 @@ +<!DOCTYPE html> +<html lang="en" class="Internet-Draft"> +<head> +<meta charset="utf-8"> +<meta content="Common,Latin" name="scripts"> +<meta content="initial-scale=1.0" name="viewport"> +<title>TASD File Format Specification Version 1</title> +<meta content="Vi Grey" name="author"> +<meta content="Bigbass" name="author"> +<meta content=' + The TASD file format is used for storing "Tool Assisted Speedrun" or "Tool Assisted Superplay" (TAS) data for TAS replay devices to replay on physical video game console hardware. The format is defined to be expandable for future needs. The format is also defined to be parsable by programs that do not understand portions of the format, whether that is due to incomplete support of the format specification or due to new features being added to later versions of the specification at a later date. + This document defines the file format specification for TASD files. + ' name="description"> +<meta content="xml2rfc 3.15.0" name="generator"> +<meta content="draft-tasd-v0001-00" name="ietf.draft"> +<!-- Generator version information: + xml2rfc 3.15.0 + Python 3.10.7 + appdirs 1.4.4 + ConfigArgParse 1.5.3 + google-i18n-address 2.5.2 + html5lib 1.1 + intervaltree 3.1.0 + Jinja2 3.1.2 + kitchen 1.2.6 + lxml 4.9.1 + MarkupSafe 2.1.1 + pycountry 22.3.5 + PyYAML 6.0 + requests 2.28.1 + setuptools 65.3.0 + six 1.16.0 + weasyprint 56.1 +--> +<link href="draft-tasd-0001.xml" rel="alternate" type="application/rfc+xml"> +<link href="#copyright" rel="license"> +<style type="text/css">/* + + NOTE: Changes at the bottom of this file overrides some earlier settings. + + Once the style has stabilized and has been adopted as an official RFC style, + this can be consolidated so that style settings occur only in one place, but + for now the contents of this file consists first of the initial CSS work as + provided to the RFC Formatter (xml2rfc) work, followed by itemized and + commented changes found necssary during the development of the v3 + formatters. + +*/ + +/* fonts */ +@import url('https://fonts.googleapis.com/css?family=Noto+Sans'); /* Sans-serif */ +@import url('https://fonts.googleapis.com/css?family=Noto+Serif'); /* Serif (print) */ +@import url('https://fonts.googleapis.com/css?family=Roboto+Mono'); /* Monospace */ + +@viewport { + zoom: 1.0; + width: extend-to-zoom; +} +@-ms-viewport { + width: extend-to-zoom; + zoom: 1.0; +} +/* general and mobile first */ +html { +} +body { + max-width: 90%; + margin: 1.5em auto; + color: #222; + background-color: #fff; + font-size: 14px; + font-family: 'Noto Sans', Arial, Helvetica, sans-serif; + line-height: 1.6; + scroll-behavior: smooth; +} +.ears { + display: none; +} + +/* headings */ +#title, h1, h2, h3, h4, h5, h6 { + margin: 1em 0 0.5em; + font-weight: bold; + line-height: 1.3; +} +#title { + clear: both; + border-bottom: 1px solid #ddd; + margin: 0 0 0.5em 0; + padding: 1em 0 0.5em; +} +.author { + padding-bottom: 4px; +} +h1 { + font-size: 26px; + margin: 1em 0; +} +h2 { + font-size: 22px; + margin-top: -20px; /* provide offset for in-page anchors */ + padding-top: 33px; +} +h3 { + font-size: 18px; + margin-top: -36px; /* provide offset for in-page anchors */ + padding-top: 42px; +} +h4 { + font-size: 16px; + margin-top: -36px; /* provide offset for in-page anchors */ + padding-top: 42px; +} +h5, h6 { + font-size: 14px; +} +#n-copyright-notice { + border-bottom: 1px solid #ddd; + padding-bottom: 1em; + margin-bottom: 1em; +} +/* general structure */ +p { + padding: 0; + margin: 0 0 1em 0; + text-align: left; +} +div, span { + position: relative; +} +div { + margin: 0; +} +.alignRight.art-text { + background-color: #f9f9f9; + border: 1px solid #eee; + border-radius: 3px; + padding: 1em 1em 0; + margin-bottom: 1.5em; +} +.alignRight.art-text pre { + padding: 0; +} +.alignRight { + margin: 1em 0; +} +.alignRight > *:first-child { + border: none; + margin: 0; + float: right; + clear: both; +} +.alignRight > *:nth-child(2) { + clear: both; + display: block; + border: none; +} +svg { + display: block; +} +.alignCenter.art-text { + background-color: #f9f9f9; + border: 1px solid #eee; + border-radius: 3px; + padding: 1em 1em 0; + margin-bottom: 1.5em; +} +.alignCenter.art-text pre { + padding: 0; +} +.alignCenter { + margin: 1em 0; +} +.alignCenter > *:first-child { + display: table; + border: none; + margin: 0 auto; +} + +/* lists */ +ol, ul { + padding: 0; + margin: 0 0 1em 2em; +} +ol ol, ul ul, ol ul, ul ol { + margin-left: 1em; +} +li { + margin: 0 0 0.25em 0; +} +.ulCompact li { + margin: 0; +} +ul.empty, .ulEmpty { + list-style-type: none; +} +ul.empty li, .ulEmpty li { + margin-top: 0.5em; +} +ul.ulBare, li.ulBare { + margin-left: 0em !important; +} +ul.compact, .ulCompact, +ol.compact, .olCompact { + line-height: 100%; + margin: 0 0 0 2em; +} + +/* definition lists */ +dl { +} +dl > dt { + float: left; + margin-right: 1em; +} +/* +dl.nohang > dt { + float: none; +} +*/ +dl > dd { + margin-bottom: .8em; + min-height: 1.3em; +} +dl.compact > dd, .dlCompact > dd { + margin-bottom: 0em; +} +dl > dd > dl { + margin-top: 0.5em; + margin-bottom: 0em; +} + +/* links */ +a { + text-decoration: none; +} +a[href] { + color: #22e; /* Arlen: WCAG 2019 */ +} +a[href]:hover { + background-color: #f2f2f2; +} +figcaption a[href], +a[href].selfRef { + color: #222; +} +/* XXX probably not this: +a.selfRef:hover { + background-color: transparent; + cursor: default; +} */ + +/* Figures */ +tt, code, pre, code { + background-color: #f9f9f9; + font-family: 'Roboto Mono', monospace; +} +pre { + border: 1px solid #eee; + margin: 0; + padding: 1em; +} +img { + max-width: 100%; +} +figure { + margin: 0; +} +figure blockquote { + margin: 0.8em 0.4em 0.4em; +} +figcaption { + font-style: italic; + margin: 0 0 1em 0; +} +@media screen { + pre { + overflow-x: auto; + max-width: 100%; + max-width: calc(100% - 22px); + } +} + +/* aside, blockquote */ +aside, blockquote { + margin-left: 0; + padding: 1.2em 2em; +} +blockquote { + background-color: #f9f9f9; + color: #111; /* Arlen: WCAG 2019 */ + border: 1px solid #ddd; + border-radius: 3px; + margin: 1em 0; +} +cite { + display: block; + text-align: right; + font-style: italic; +} + +/* tables */ +table { + width: 100%; + margin: 0 0 1em; + border-collapse: collapse; + border: 1px solid #eee; +} +th, td { + text-align: left; + vertical-align: top; + padding: 0.5em 0.75em; +} +th { + text-align: left; + background-color: #e9e9e9; +} +tr:nth-child(2n+1) > td { + background-color: #f5f5f5; +} +table caption { + font-style: italic; + margin: 0; + padding: 0; + text-align: left; +} +table p { + /* XXX to avoid bottom margin on table row signifiers. If paragraphs should + be allowed within tables more generally, it would be far better to select on a class. */ + margin: 0; +} + +/* pilcrow */ +a.pilcrow { + color: #666; /* Arlen: AHDJ 2019 */ + text-decoration: none; + visibility: hidden; + user-select: none; + -ms-user-select: none; + -o-user-select:none; + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: none; + -webkit-touch-callout: none; +} +@media screen { + aside:hover > a.pilcrow, + p:hover > a.pilcrow, + blockquote:hover > a.pilcrow, + div:hover > a.pilcrow, + li:hover > a.pilcrow, + pre:hover > a.pilcrow { + visibility: visible; + } + a.pilcrow:hover { + background-color: transparent; + } +} + +/* misc */ +hr { + border: 0; + border-top: 1px solid #eee; +} +.bcp14 { + font-variant: small-caps; +} + +.role { + font-variant: all-small-caps; +} + +/* info block */ +#identifiers { + margin: 0; + font-size: 0.9em; +} +#identifiers dt { + width: 3em; + clear: left; +} +#identifiers dd { + float: left; + margin-bottom: 0; +} +/* Fix PDF info block run off issue */ +@media print { + #identifiers dd { + float: none; + } +} +#identifiers .authors .author { + display: inline-block; + margin-right: 1.5em; +} +#identifiers .authors .org { + font-style: italic; +} + +/* The prepared/rendered info at the very bottom of the page */ +.docInfo { + color: #666; /* Arlen: WCAG 2019 */ + font-size: 0.9em; + font-style: italic; + margin-top: 2em; +} +.docInfo .prepared { + float: left; +} +.docInfo .prepared { + float: right; +} + +/* table of contents */ +#toc { + padding: 0.75em 0 2em 0; + margin-bottom: 1em; +} +nav.toc ul { + margin: 0 0.5em 0 0; + padding: 0; + list-style: none; +} +nav.toc li { + line-height: 1.3em; + margin: 0.75em 0; + padding-left: 1.2em; + text-indent: -1.2em; +} +/* references */ +.references dt { + text-align: right; + font-weight: bold; + min-width: 7em; +} +.references dd { + margin-left: 8em; + overflow: auto; +} + +.refInstance { + margin-bottom: 1.25em; +} + +.references .ascii { + margin-bottom: 0.25em; +} + +/* index */ +.index ul { + margin: 0 0 0 1em; + padding: 0; + list-style: none; +} +.index ul ul { + margin: 0; +} +.index li { + margin: 0; + text-indent: -2em; + padding-left: 2em; + padding-bottom: 5px; +} +.indexIndex { + margin: 0.5em 0 1em; +} +.index a { + font-weight: 700; +} +/* make the index two-column on all but the smallest screens */ +@media (min-width: 600px) { + .index ul { + -moz-column-count: 2; + -moz-column-gap: 20px; + } + .index ul ul { + -moz-column-count: 1; + -moz-column-gap: 0; + } +} + +/* authors */ +address.vcard { + font-style: normal; + margin: 1em 0; +} + +address.vcard .nameRole { + font-weight: 700; + margin-left: 0; +} +address.vcard .label { + font-family: "Noto Sans",Arial,Helvetica,sans-serif; + margin: 0.5em 0; +} +address.vcard .type { + display: none; +} +.alternative-contact { + margin: 1.5em 0 1em; +} +hr.addr { + border-top: 1px dashed; + margin: 0; + color: #ddd; + max-width: calc(100% - 16px); +} + +/* temporary notes */ +.rfcEditorRemove::before { + position: absolute; + top: 0.2em; + right: 0.2em; + padding: 0.2em; + content: "The RFC Editor will remove this note"; + color: #9e2a00; /* Arlen: WCAG 2019 */ + background-color: #ffd; /* Arlen: WCAG 2019 */ +} +.rfcEditorRemove { + position: relative; + padding-top: 1.8em; + background-color: #ffd; /* Arlen: WCAG 2019 */ + border-radius: 3px; +} +.cref { + background-color: #ffd; /* Arlen: WCAG 2019 */ + padding: 2px 4px; +} +.crefSource { + font-style: italic; +} +/* alternative layout for smaller screens */ +@media screen and (max-width: 1023px) { + body { + padding-top: 2em; + } + #title { + padding: 1em 0; + } + h1 { + font-size: 24px; + } + h2 { + font-size: 20px; + margin-top: -18px; /* provide offset for in-page anchors */ + padding-top: 38px; + } + #identifiers dd { + max-width: 60%; + } + #toc { + position: fixed; + z-index: 2; + top: 0; + right: 0; + padding: 0; + margin: 0; + background-color: inherit; + border-bottom: 1px solid #ccc; + } + #toc h2 { + margin: -1px 0 0 0; + padding: 4px 0 4px 6px; + padding-right: 1em; + min-width: 190px; + font-size: 1.1em; + text-align: right; + background-color: #444; + color: white; + cursor: pointer; + } + #toc h2::before { /* css hamburger */ + float: right; + position: relative; + width: 1em; + height: 1px; + left: -164px; + margin: 6px 0 0 0; + background: white none repeat scroll 0 0; + box-shadow: 0 4px 0 0 white, 0 8px 0 0 white; + content: ""; + } + #toc nav { + display: none; + padding: 0.5em 1em 1em; + overflow: auto; + height: calc(100vh - 48px); + border-left: 1px solid #ddd; + } +} + +/* alternative layout for wide screens */ +@media screen and (min-width: 1024px) { + body { + max-width: 724px; + margin: 42px auto; + padding-left: 1.5em; + padding-right: 29em; + } + #toc { + position: fixed; + top: 42px; + right: 42px; + width: 25%; + margin: 0; + padding: 0 1em; + z-index: 1; + } + #toc h2 { + border-top: none; + border-bottom: 1px solid #ddd; + font-size: 1em; + font-weight: normal; + margin: 0; + padding: 0.25em 1em 1em 0; + } + #toc nav { + display: block; + height: calc(90vh - 84px); + bottom: 0; + padding: 0.5em 0 0; + overflow: auto; + } + img { /* future proofing */ + max-width: 100%; + height: auto; + } +} + +/* pagination */ +@media print { + body { + + width: 100%; + } + p { + orphans: 3; + widows: 3; + } + #n-copyright-notice { + border-bottom: none; + } + #toc, #n-introduction { + page-break-before: always; + } + #toc { + border-top: none; + padding-top: 0; + } + figure, pre { + page-break-inside: avoid; + } + figure { + overflow: scroll; + } + pre.breakable { + break-inside: auto; + } + h1, h2, h3, h4, h5, h6 { + page-break-after: avoid; + } + h2+*, h3+*, h4+*, h5+*, h6+* { + page-break-before: avoid; + } + pre { + white-space: pre-wrap; + word-wrap: break-word; + font-size: 10pt; + } + table { + border: 1px solid #ddd; + } + td { + border-top: 1px solid #ddd; + } +} + +/* This is commented out here, as the string-set: doesn't + pass W3C validation currently */ +/* +.ears thead .left { + string-set: ears-top-left content(); +} + +.ears thead .center { + string-set: ears-top-center content(); +} + +.ears thead .right { + string-set: ears-top-right content(); +} + +.ears tfoot .left { + string-set: ears-bottom-left content(); +} + +.ears tfoot .center { + string-set: ears-bottom-center content(); +} + +.ears tfoot .right { + string-set: ears-bottom-right content(); +} +*/ + +@page :first { + padding-top: 0; + @top-left { + content: normal; + border: none; + } + @top-center { + content: normal; + border: none; + } + @top-right { + content: normal; + border: none; + } +} + +@page { + size: A4; + margin-bottom: 45mm; + padding-top: 20px; + /* The follwing is commented out here, but set appropriately by in code, as + the content depends on the document */ + /* + @top-left { + content: 'Internet-Draft'; + vertical-align: bottom; + border-bottom: solid 1px #ccc; + } + @top-left { + content: string(ears-top-left); + vertical-align: bottom; + border-bottom: solid 1px #ccc; + } + @top-center { + content: string(ears-top-center); + vertical-align: bottom; + border-bottom: solid 1px #ccc; + } + @top-right { + content: string(ears-top-right); + vertical-align: bottom; + border-bottom: solid 1px #ccc; + } + @bottom-left { + content: string(ears-bottom-left); + vertical-align: top; + border-top: solid 1px #ccc; + } + @bottom-center { + content: string(ears-bottom-center); + vertical-align: top; + border-top: solid 1px #ccc; + } + @bottom-right { + content: '[Page ' counter(page) ']'; + vertical-align: top; + border-top: solid 1px #ccc; + } + */ + +} + +/* Changes introduced to fix issues found during implementation */ +/* Make sure links are clickable even if overlapped by following H* */ +a { + z-index: 2; +} +/* Separate body from document info even without intervening H1 */ +section { + clear: both; +} + + +/* Top align author divs, to avoid names without organization dropping level with org names */ +.author { + vertical-align: top; +} + +/* Leave room in document info to show Internet-Draft on one line */ +#identifiers dt { + width: 8em; +} + +/* Don't waste quite as much whitespace between label and value in doc info */ +#identifiers dd { + margin-left: 1em; +} + +/* Give floating toc a background color (needed when it's a div inside section */ +#toc { + background-color: white; +} + +/* Make the collapsed ToC header render white on gray also when it's a link */ +@media screen and (max-width: 1023px) { + #toc h2 a, + #toc h2 a:link, + #toc h2 a:focus, + #toc h2 a:hover, + #toc a.toplink, + #toc a.toplink:hover { + color: white; + background-color: #444; + text-decoration: none; + } +} + +/* Give the bottom of the ToC some whitespace */ +@media screen and (min-width: 1024px) { + #toc { + padding: 0 0 1em 1em; + } +} + +/* Style section numbers with more space between number and title */ +.section-number { + padding-right: 0.5em; +} + +/* prevent monospace from becoming overly large */ +tt, code, pre, code { + font-size: 95%; +} + +/* Fix the height/width aspect for ascii art*/ +pre.sourcecode, +.art-text pre { + line-height: 1.12; +} + + +/* Add styling for a link in the ToC that points to the top of the document */ +a.toplink { + float: right; + margin-right: 0.5em; +} + +/* Fix the dl styling to match the RFC 7992 attributes */ +dl > dt, +dl.dlParallel > dt { + float: left; + margin-right: 1em; +} +dl.dlNewline > dt { + float: none; +} + +/* Provide styling for table cell text alignment */ +table td.text-left, +table th.text-left { + text-align: left; +} +table td.text-center, +table th.text-center { + text-align: center; +} +table td.text-right, +table th.text-right { + text-align: right; +} + +/* Make the alternative author contact informatio look less like just another + author, and group it closer with the primary author contact information */ +.alternative-contact { + margin: 0.5em 0 0.25em 0; +} +address .non-ascii { + margin: 0 0 0 2em; +} + +/* With it being possible to set tables with alignment + left, center, and right, { width: 100%; } does not make sense */ +table { + width: auto; +} + +/* Avoid reference text that sits in a block with very wide left margin, + because of a long floating dt label.*/ +.references dd { + overflow: visible; +} + +/* Control caption placement */ +caption { + caption-side: bottom; +} + +/* Limit the width of the author address vcard, so names in right-to-left + script don't end up on the other side of the page. */ + +address.vcard { + max-width: 30em; + margin-right: auto; +} + +/* For address alignment dependent on LTR or RTL scripts */ +address div.left { + text-align: left; +} +address div.right { + text-align: right; +} + +/* Provide table alignment support. We can't use the alignX classes above + since they do unwanted things with caption and other styling. */ +table.right { + margin-left: auto; + margin-right: 0; +} +table.center { + margin-left: auto; + margin-right: auto; +} +table.left { + margin-left: 0; + margin-right: auto; +} + +/* Give the table caption label the same styling as the figcaption */ +caption a[href] { + color: #222; +} + +@media print { + .toplink { + display: none; + } + + /* avoid overwriting the top border line with the ToC header */ + #toc { + padding-top: 1px; + } + + /* Avoid page breaks inside dl and author address entries */ + .vcard { + page-break-inside: avoid; + } + +} +/* Tweak the bcp14 keyword presentation */ +.bcp14 { + font-variant: small-caps; + font-weight: bold; + font-size: 0.9em; +} +/* Tweak the invisible space above H* in order not to overlay links in text above */ + h2 { + margin-top: -18px; /* provide offset for in-page anchors */ + padding-top: 31px; + } + h3 { + margin-top: -18px; /* provide offset for in-page anchors */ + padding-top: 24px; + } + h4 { + margin-top: -18px; /* provide offset for in-page anchors */ + padding-top: 24px; + } +/* Float artwork pilcrow to the right */ +@media screen { + .artwork a.pilcrow { + display: block; + line-height: 0.7; + margin-top: 0.15em; + } +} +/* Make pilcrows on dd visible */ +@media screen { + dd:hover > a.pilcrow { + visibility: visible; + } +} +/* Make the placement of figcaption match that of a table's caption + by removing the figure's added bottom margin */ +.alignLeft.art-text, +.alignCenter.art-text, +.alignRight.art-text { + margin-bottom: 0; +} +.alignLeft, +.alignCenter, +.alignRight { + margin: 1em 0 0 0; +} +/* In print, the pilcrow won't show on hover, so prevent it from taking up space, + possibly even requiring a new line */ +@media print { + a.pilcrow { + display: none; + } +} +/* Styling for the external metadata */ +div#external-metadata { + background-color: #eee; + padding: 0.5em; + margin-bottom: 0.5em; + display: none; +} +div#internal-metadata { + padding: 0.5em; /* to match the external-metadata padding */ +} +/* Styling for title RFC Number */ +h1#rfcnum { + clear: both; + margin: 0 0 -1em; + padding: 1em 0 0 0; +} +/* Make .olPercent look the same as <ol><li> */ +dl.olPercent > dd { + margin-bottom: 0.25em; + min-height: initial; +} +/* Give aside some styling to set it apart */ +aside { + border-left: 1px solid #ddd; + margin: 1em 0 1em 2em; + padding: 0.2em 2em; +} +aside > dl, +aside > ol, +aside > ul, +aside > table, +aside > p { + margin-bottom: 0.5em; +} +/* Additional page break settings */ +@media print { + figcaption, table caption { + page-break-before: avoid; + } +} +/* Font size adjustments for print */ +@media print { + body { font-size: 10pt; line-height: normal; max-width: 96%; } + h1 { font-size: 1.72em; padding-top: 1.5em; } /* 1*1.2*1.2*1.2 */ + h2 { font-size: 1.44em; padding-top: 1.5em; } /* 1*1.2*1.2 */ + h3 { font-size: 1.2em; padding-top: 1.5em; } /* 1*1.2 */ + h4 { font-size: 1em; padding-top: 1.5em; } + h5, h6 { font-size: 1em; margin: initial; padding: 0.5em 0 0.3em; } +} +/* Sourcecode margin in print, when there's no pilcrow */ +@media print { + .artwork, + .sourcecode { + margin-bottom: 1em; + } +} +/* Avoid narrow tables forcing too narrow table captions, which may render badly */ +table { + min-width: 20em; +} +/* ol type a */ +ol.type-a { list-style-type: lower-alpha; } +ol.type-A { list-style-type: upper-alpha; } +ol.type-i { list-style-type: lower-roman; } +ol.type-I { list-style-type: lower-roman; } +/* Apply the print table and row borders in general, on request from the RPC, +and increase the contrast between border and odd row background sligthtly */ +table { + border: 1px solid #ddd; +} +td { + border-top: 1px solid #ddd; +} +tr { + break-inside: avoid; +} +tr:nth-child(2n+1) > td { + background-color: #f8f8f8; +} +/* Use style rules to govern display of the TOC. */ +@media screen and (max-width: 1023px) { + #toc nav { display: none; } + #toc.active nav { display: block; } +} +/* Add support for keepWithNext */ +.keepWithNext { + break-after: avoid-page; + break-after: avoid-page; +} +/* Add support for keepWithPrevious */ +.keepWithPrevious { + break-before: avoid-page; +} +/* Change the approach to avoiding breaks inside artwork etc. */ +figure, pre, table, .artwork, .sourcecode { + break-before: auto; + break-after: auto; +} +/* Avoid breaks between <dt> and <dd> */ +dl { + break-before: auto; + break-inside: auto; +} +dt { + break-before: auto; + break-after: avoid-page; +} +dd { + break-before: avoid-page; + break-after: auto; + orphans: 3; + widows: 3 +} +span.break, dd.break { + margin-bottom: 0; + min-height: 0; + break-before: auto; + break-inside: auto; + break-after: auto; +} +/* Undo break-before ToC */ +@media print { + #toc { + break-before: auto; + } +} +/* Text in compact lists should not get extra bottim margin space, + since that would makes the list not compact */ +ul.compact p, .ulCompact p, +ol.compact p, .olCompact p { + margin: 0; +} +/* But the list as a whole needs the extra space at the end */ +section ul.compact, +section .ulCompact, +section ol.compact, +section .olCompact { + margin-bottom: 1em; /* same as p not within ul.compact etc. */ +} +/* The tt and code background above interferes with for instance table cell + backgrounds. Changed to something a bit more selective. */ +tt, code { + background-color: transparent; +} +p tt, p code, li tt, li code { + background-color: #f8f8f8; +} +/* Tweak the pre margin -- 0px doesn't come out well */ +pre { + margin-top: 0.5px; +} +/* Tweak the comact list text */ +ul.compact, .ulCompact, +ol.compact, .olCompact, +dl.compact, .dlCompact { + line-height: normal; +} +/* Don't add top margin for nested lists */ +li > ul, li > ol, li > dl, +dd > ul, dd > ol, dd > dl, +dl > dd > dl { + margin-top: initial; +} +/* Elements that should not be rendered on the same line as a <dt> */ +/* This should match the element list in writer.text.TextWriter.render_dl() */ +dd > div.artwork:first-child, +dd > aside:first-child, +dd > figure:first-child, +dd > ol:first-child, +dd > div:first-child > pre.sourcecode, +dd > table:first-child, +dd > ul:first-child { + clear: left; +} +/* fix for weird browser behaviour when <dd/> is empty */ +dt+dd:empty::before{ + content: "\00a0"; +} +/* Make paragraph spacing inside <li> smaller than in body text, to fit better within the list */ +li > p { + margin-bottom: 0.5em +} +/* Don't let p margin spill out from inside list items */ +li > p:last-of-type { + margin-bottom: 0; +} +</style> +<script type="application/javascript">async function addMetadata(){try{const e=document.styleSheets[0].cssRules;for(let t=0;t<e.length;t++)if(/#identifiers/.exec(e[t].selectorText)){const a=e[t].cssText.replace("#identifiers","#external-updates");document.styleSheets[0].insertRule(a,document.styleSheets[0].cssRules.length)}}catch(e){console.log(e)}const e=document.getElementById("external-metadata");if(e)try{var t,a="",o=function(e){const t=document.getElementsByTagName("meta");for(let a=0;a<t.length;a++)if(t[a].getAttribute("name")===e)return t[a].getAttribute("content");return""}("rfc.number");if(o){t="https://www.rfc-editor.org/rfc/rfc"+o+".json";try{const e=await fetch(t);a=await e.json()}catch(e){t=document.URL.indexOf("html")>=0?document.URL.replace(/html$/,"json"):document.URL+".json";const o=await fetch(t);a=await o.json()}}if(!a)return;e.style.display="block";const s="",d="https://datatracker.ietf.org/doc",n="https://datatracker.ietf.org/ipr/search",c="https://www.rfc-editor.org/info",l=a.doc_id.toLowerCase(),i=a.doc_id.slice(0,3).toLowerCase(),f=a.doc_id.slice(3).replace(/^0+/,""),u={status:"Status",obsoletes:"Obsoletes",obsoleted_by:"Obsoleted By",updates:"Updates",updated_by:"Updated By",see_also:"See Also",errata_url:"Errata"};let h="<dl style='overflow:hidden' id='external-updates'>";["status","obsoletes","obsoleted_by","updates","updated_by","see_also","errata_url"].forEach(e=>{if("status"==e){a[e]=a[e].toLowerCase();var t=a[e].split(" "),o=t.length,w="",p=1;for(let e=0;e<o;e++)p<o?w=w+r(t[e])+" ":w+=r(t[e]),p++;a[e]=w}else if("obsoletes"==e||"obsoleted_by"==e||"updates"==e||"updated_by"==e){var g,m="",b=1;g=a[e].length;for(let t=0;t<g;t++)a[e][t]&&(a[e][t]=String(a[e][t]).toLowerCase(),m=b<g?m+"<a href='"+s+"/rfc/".concat(a[e][t])+"'>"+a[e][t].slice(3)+"</a>, ":m+"<a href='"+s+"/rfc/".concat(a[e][t])+"'>"+a[e][t].slice(3)+"</a>",b++);a[e]=m}else if("see_also"==e){var y,L="",C=1;y=a[e].length;for(let t=0;t<y;t++)if(a[e][t]){a[e][t]=String(a[e][t]);var _=a[e][t].slice(0,3),v=a[e][t].slice(3).replace(/^0+/,"");L=C<y?"RFC"!=_?L+"<a href='"+s+"/info/"+_.toLowerCase().concat(v.toLowerCase())+"'>"+_+" "+v+"</a>, ":L+"<a href='"+s+"/info/"+_.toLowerCase().concat(v.toLowerCase())+"'>"+v+"</a>, ":"RFC"!=_?L+"<a href='"+s+"/info/"+_.toLowerCase().concat(v.toLowerCase())+"'>"+_+" "+v+"</a>":L+"<a href='"+s+"/info/"+_.toLowerCase().concat(v.toLowerCase())+"'>"+v+"</a>",C++}a[e]=L}else if("errata_url"==e){var R="";R=a[e]?R+"<a href='"+a[e]+"'>Errata exist</a> | <a href='"+d+"/"+l+"'>Datatracker</a>| <a href='"+n+"/?"+i+"="+f+"&submit="+i+"'>IPR</a> | <a href='"+c+"/"+l+"'>Info page</a>":"<a href='"+d+"/"+l+"'>Datatracker</a> | <a href='"+n+"/?"+i+"="+f+"&submit="+i+"'>IPR</a> | <a href='"+c+"/"+l+"'>Info page</a>",a[e]=R}""!=a[e]?"Errata"==u[e]?h+=`<dt>More info:</dt><dd>${a[e]}</dd>`:h+=`<dt>${u[e]}:</dt><dd>${a[e]}</dd>`:"Errata"==u[e]&&(h+=`<dt>More info:</dt><dd>${a[e]}</dd>`)}),h+="</dl>",e.innerHTML=h}catch(e){console.log(e)}else console.log("Could not locate metadata <div> element");function r(e){return e.charAt(0).toUpperCase()+e.slice(1)}}window.removeEventListener("load",addMetadata),window.addEventListener("load",addMetadata);</script> +</head> +<body class="xml2rfc"> +<script src="metadata.min.js"></script> +<table class="ears"> +<thead><tr> +<td class="left"></td> +<td class="center">TASD File Format Specification</td> +<td class="right">September 2022</td> +</tr></thead> +<tfoot><tr> +<td class="left">Grey & Bigbass</td> +<td class="center">Informational</td> +<td class="right">[Page]</td> +</tr></tfoot> +</table> +<div id="external-metadata" class="document-information"></div> +<div id="internal-metadata" class="document-information"> +<dl id="identifiers"> +<dt class="label-workgroup">Workgroup:</dt> +<dd class="workgroup">Independent TAS Console Replay Research Group</dd> +<dt class="label-published">Published:</dt> +<dd class="published"> +<time datetime="2022-09-24" class="published">24 September 2022</time> + </dd> +<dt class="label-authors">Authors:</dt> +<dd class="authors"> +<div class="author"> + <div class="author-name">V. Grey</div> +<div class="org">VG Interactive</div> +</div> +<div class="author"> + <div class="author-name">Bigbass</div> +</div> +</dd> +</dl> +</div> +<h1 id="title">TASD File Format Specification Version 1</h1> +<section id="section-abstract"> + <h2 id="abstract"><a href="#abstract" class="selfRef">Abstract</a></h2> +<p id="section-abstract-1">The <strong>TASD</strong> file format is used for storing "Tool Assisted Speedrun" or "Tool Assisted Superplay" (TAS) data for TAS replay devices to replay on physical video game console hardware. The format is defined to be expandable for future needs. The format is also defined to be parsable by programs that do not understand portions of the format, whether that is due to incomplete support of the format specification or due to new features being added to later versions of the specification at a later date.<a href="#section-abstract-1" class="pilcrow">¶</a></p> +<p id="section-abstract-2">This document defines the file format specification for <strong>TASD</strong> files.<a href="#section-abstract-2" class="pilcrow">¶</a></p> +</section> +<div id="toc"> +<section id="section-toc.1"> + <a href="#" onclick="scroll(0,0)" class="toplink">â–²</a><h2 id="name-table-of-contents-2"> +<a href="#name-table-of-contents-2" class="section-name selfRef">Table of Contents</a> + </h2> +<nav class="toc"><ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.1"> + <p id="section-toc.1-1.1.1"><a href="#section-1" class="auto internal xref">1</a>.  <a href="#name-introduction-2" class="internal xref">Introduction</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.1.2.1"> + <p id="section-toc.1-1.1.2.1.1" class="keepWithNext"><a href="#section-1.1" class="auto internal xref">1.1</a>.  <a href="#name-overview-and-preliminaries-2" class="internal xref">Overview and Preliminaries</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.1.2.1.2.1"> + <p id="section-toc.1-1.1.2.1.2.1.1" class="keepWithNext"><a href="#section-1.1.1" class="auto internal xref">1.1.1</a>.  <a href="#name-notation-and-vocabulary-2" class="internal xref">Notation and Vocabulary</a></p> +</li> + </ul> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.1.2.2"> + <p id="section-toc.1-1.1.2.2.1"><a href="#section-1.2" class="auto internal xref">1.2</a>.  <a href="#name-motivations-2" class="internal xref">Motivations</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.1.2.2.2.1"> + <p id="section-toc.1-1.1.2.2.2.1.1" class="keepWithNext"><a href="#section-1.2.1" class="auto internal xref">1.2.1</a>.  <a href="#name-problems-with-existing-forma" class="internal xref">Problems With Existing Formats</a></p> +</li> + </ul> +</li> + </ul> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.2"> + <p id="section-toc.1-1.2.1"><a href="#section-2" class="auto internal xref">2</a>.  <a href="#name-header-2" class="internal xref">Header</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3"> + <p id="section-toc.1-1.3.1"><a href="#section-3" class="auto internal xref">3</a>.  <a href="#name-packets-2" class="internal xref">Packets</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.1"> + <p id="section-toc.1-1.3.2.1.1"><a href="#section-3.1" class="auto internal xref">3.1</a>.  <a href="#name-assigned-packet-keys-without" class="internal xref">Assigned Packet Keys Without Descriptions</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.1.2.1"> + <p id="section-toc.1-1.3.2.1.2.1.1"><a href="#section-3.1.1" class="auto internal xref">3.1.1</a>.  <a href="#name-general-keys-2" class="internal xref">General Keys</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.1.2.2"> + <p id="section-toc.1-1.3.2.1.2.2.1"><a href="#section-3.1.2" class="auto internal xref">3.1.2</a>.  <a href="#name-nes-specific-keys-2" class="internal xref">NES Specific Keys</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.1.2.3"> + <p id="section-toc.1-1.3.2.1.2.3.1"><a href="#section-3.1.3" class="auto internal xref">3.1.3</a>.  <a href="#name-snes-specific-keys-2" class="internal xref">SNES Specific Keys</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.1.2.4"> + <p id="section-toc.1-1.3.2.1.2.4.1"><a href="#section-3.1.4" class="auto internal xref">3.1.4</a>.  <a href="#name-genesis-specific-keys-2" class="internal xref">Genesis Specific Keys</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.1.2.5"> + <p id="section-toc.1-1.3.2.1.2.5.1"><a href="#section-3.1.5" class="auto internal xref">3.1.5</a>.  <a href="#name-input-frame-timing-keys-2" class="internal xref">Input Frame/Timing Keys</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.1.2.6"> + <p id="section-toc.1-1.3.2.1.2.6.1"><a href="#section-3.1.6" class="auto internal xref">3.1.6</a>.  <a href="#name-extraneous-keys-2" class="internal xref">Extraneous Keys</a></p> +</li> + </ul> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.2"> + <p id="section-toc.1-1.3.2.2.1"><a href="#section-3.2" class="auto internal xref">3.2</a>.  <a href="#name-assigned-packet-keys-with-de" class="internal xref">Assigned Packet Keys With Descriptions</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.2.2.1"> + <p id="section-toc.1-1.3.2.2.2.1.1"><a href="#section-3.2.1" class="auto internal xref">3.2.1</a>.  <a href="#name-general-key-descriptions-2" class="internal xref">General Key Descriptions</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.2.2.2"> + <p id="section-toc.1-1.3.2.2.2.2.1"><a href="#section-3.2.2" class="auto internal xref">3.2.2</a>.  <a href="#name-nes-specific-key-description" class="internal xref">NES Specific Key Descriptions</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.2.2.3"> + <p id="section-toc.1-1.3.2.2.2.3.1"><a href="#section-3.2.3" class="auto internal xref">3.2.3</a>.  <a href="#name-snes-specific-key-descriptio" class="internal xref">SNES Specific Key Descriptions</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.2.2.4"> + <p id="section-toc.1-1.3.2.2.2.4.1"><a href="#section-3.2.4" class="auto internal xref">3.2.4</a>.  <a href="#name-genesis-specific-key-descrip" class="internal xref">Genesis Specific Key Descriptions</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.2.2.5"> + <p id="section-toc.1-1.3.2.2.2.5.1"><a href="#section-3.2.5" class="auto internal xref">3.2.5</a>.  <a href="#name-input-frame-timing-key-descr" class="internal xref">Input Frame/Timing Key Descriptions</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.2.2.6"> + <p id="section-toc.1-1.3.2.2.2.6.1"><a href="#section-3.2.6" class="auto internal xref">3.2.6</a>.  <a href="#name-extraneous-key-descriptions-2" class="internal xref">Extraneous Key Descriptions</a></p> +</li> + </ul> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3"> + <p id="section-toc.1-1.3.2.3.1"><a href="#section-3.3" class="auto internal xref">3.3</a>.  <a href="#name-packet-payload-formats-2" class="internal xref">Packet Payload Formats</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1"> + <p id="section-toc.1-1.3.2.3.2.1.1"><a href="#section-3.3.1" class="auto internal xref">3.3.1</a>.  <a href="#name-general-key-payload-formats-2" class="internal xref">General Key Payload Formats</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1.2.1"> + <p id="section-toc.1-1.3.2.3.2.1.2.1.1"><a href="#section-3.3.1.1" class="auto internal xref">3.3.1.1</a>.  <a href="#name-console_type-packet-2" class="internal xref">CONSOLE_TYPE Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1.2.2"> + <p id="section-toc.1-1.3.2.3.2.1.2.2.1"><a href="#section-3.3.1.2" class="auto internal xref">3.3.1.2</a>.  <a href="#name-console_region-packet-2" class="internal xref">CONSOLE_REGION Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1.2.3"> + <p id="section-toc.1-1.3.2.3.2.1.2.3.1"><a href="#section-3.3.1.3" class="auto internal xref">3.3.1.3</a>.  <a href="#name-game_title-packet-2" class="internal xref">GAME_TITLE Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1.2.4"> + <p id="section-toc.1-1.3.2.3.2.1.2.4.1"><a href="#section-3.3.1.4" class="auto internal xref">3.3.1.4</a>.  <a href="#name-rom_name-packet-2" class="internal xref">ROM_NAME Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1.2.5"> + <p id="section-toc.1-1.3.2.3.2.1.2.5.1"><a href="#section-3.3.1.5" class="auto internal xref">3.3.1.5</a>.  <a href="#name-attribution-packet-2" class="internal xref">ATTRIBUTION Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1.2.6"> + <p id="section-toc.1-1.3.2.3.2.1.2.6.1"><a href="#section-3.3.1.6" class="auto internal xref">3.3.1.6</a>.  <a href="#name-category-packet-2" class="internal xref">CATEGORY Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1.2.7"> + <p id="section-toc.1-1.3.2.3.2.1.2.7.1"><a href="#section-3.3.1.7" class="auto internal xref">3.3.1.7</a>.  <a href="#name-emulator_name-packet-2" class="internal xref">EMULATOR_NAME Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1.2.8"> + <p id="section-toc.1-1.3.2.3.2.1.2.8.1"><a href="#section-3.3.1.8" class="auto internal xref">3.3.1.8</a>.  <a href="#name-emulator_version-packet-2" class="internal xref">EMULATOR_VERSION Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1.2.9"> + <p id="section-toc.1-1.3.2.3.2.1.2.9.1"><a href="#section-3.3.1.9" class="auto internal xref">3.3.1.9</a>.  <a href="#name-emulator_core-packet-2" class="internal xref">EMULATOR_CORE Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1.2.10"> + <p id="section-toc.1-1.3.2.3.2.1.2.10.1"><a href="#section-3.3.1.10" class="auto internal xref">3.3.1.10</a>. <a href="#name-tas_last_modified-packet-2" class="internal xref">TAS_LAST_MODIFIED Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1.2.11"> + <p id="section-toc.1-1.3.2.3.2.1.2.11.1"><a href="#section-3.3.1.11" class="auto internal xref">3.3.1.11</a>. <a href="#name-dump_created-packet-2" class="internal xref">DUMP_CREATED Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1.2.12"> + <p id="section-toc.1-1.3.2.3.2.1.2.12.1"><a href="#section-3.3.1.12" class="auto internal xref">3.3.1.12</a>. <a href="#name-dump_last_modified-packet-2" class="internal xref">DUMP_LAST_MODIFIED Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1.2.13"> + <p id="section-toc.1-1.3.2.3.2.1.2.13.1"><a href="#section-3.3.1.13" class="auto internal xref">3.3.1.13</a>. <a href="#name-total_frames-packet-2" class="internal xref">TOTAL_FRAMES Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1.2.14"> + <p id="section-toc.1-1.3.2.3.2.1.2.14.1"><a href="#section-3.3.1.14" class="auto internal xref">3.3.1.14</a>. <a href="#name-rerecords-packet-2" class="internal xref">RERECORDS Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1.2.15"> + <p id="section-toc.1-1.3.2.3.2.1.2.15.1"><a href="#section-3.3.1.15" class="auto internal xref">3.3.1.15</a>. <a href="#name-source_link-packet-2" class="internal xref">SOURCE_LINK Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1.2.16"> + <p id="section-toc.1-1.3.2.3.2.1.2.16.1"><a href="#section-3.3.1.16" class="auto internal xref">3.3.1.16</a>. <a href="#name-blank_frames-packet-2" class="internal xref">BLANK_FRAMES Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1.2.17"> + <p id="section-toc.1-1.3.2.3.2.1.2.17.1"><a href="#section-3.3.1.17" class="auto internal xref">3.3.1.17</a>. <a href="#name-verified-packet-2" class="internal xref">VERIFIED Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1.2.18"> + <p id="section-toc.1-1.3.2.3.2.1.2.18.1"><a href="#section-3.3.1.18" class="auto internal xref">3.3.1.18</a>. <a href="#name-memory_init-packet-2" class="internal xref">MEMORY_INIT Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1.2.19"> + <p id="section-toc.1-1.3.2.3.2.1.2.19.1"><a href="#section-3.3.1.19" class="auto internal xref">3.3.1.19</a>. <a href="#name-game_identifier-packet-2" class="internal xref">GAME_IDENTIFIER Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1.2.20"> + <p id="section-toc.1-1.3.2.3.2.1.2.20.1"><a href="#section-3.3.1.20" class="auto internal xref">3.3.1.20</a>. <a href="#name-movie_license-packet-2" class="internal xref">MOVIE_LICENSE Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1.2.21"> + <p id="section-toc.1-1.3.2.3.2.1.2.21.1"><a href="#section-3.3.1.21" class="auto internal xref">3.3.1.21</a>. <a href="#name-movie_file-packet-2" class="internal xref">MOVIE_FILE Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1.2.22"> + <p id="section-toc.1-1.3.2.3.2.1.2.22.1"><a href="#section-3.3.1.22" class="auto internal xref">3.3.1.22</a>. <a href="#name-port_controller-packet-2" class="internal xref">PORT_CONTROLLER Packet</a></p> +</li> + </ul> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.2"> + <p id="section-toc.1-1.3.2.3.2.2.1"><a href="#section-3.3.2" class="auto internal xref">3.3.2</a>.  <a href="#name-nes-specific-key-payload-for" class="internal xref">NES Specific Key Payload Formats</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.2.2.1"> + <p id="section-toc.1-1.3.2.3.2.2.2.1.1"><a href="#section-3.3.2.1" class="auto internal xref">3.3.2.1</a>.  <a href="#name-nes_latch_filter-packet-2" class="internal xref">NES_LATCH_FILTER Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.2.2.2"> + <p id="section-toc.1-1.3.2.3.2.2.2.2.1"><a href="#section-3.3.2.2" class="auto internal xref">3.3.2.2</a>.  <a href="#name-nes_clock_filter-packet-2" class="internal xref">NES_CLOCK_FILTER Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.2.2.3"> + <p id="section-toc.1-1.3.2.3.2.2.2.3.1"><a href="#section-3.3.2.3" class="auto internal xref">3.3.2.3</a>.  <a href="#name-nes_overread-packet-2" class="internal xref">NES_OVERREAD Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.2.2.4"> + <p id="section-toc.1-1.3.2.3.2.2.2.4.1"><a href="#section-3.3.2.4" class="auto internal xref">3.3.2.4</a>.  <a href="#name-nes_game_genie_code-packet-2" class="internal xref">NES_GAME_GENIE_CODE Packet</a></p> +</li> + </ul> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.3"> + <p id="section-toc.1-1.3.2.3.2.3.1"><a href="#section-3.3.3" class="auto internal xref">3.3.3</a>.  <a href="#name-snes-specific-key-payload-fo" class="internal xref">SNES Specific Key Payload Formats</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.3.2.1"> + <p id="section-toc.1-1.3.2.3.2.3.2.1.1"><a href="#section-3.3.3.1" class="auto internal xref">3.3.3.1</a>.  <a href="#name-snes_clock_filter-packet-2" class="internal xref">SNES_CLOCK_FILTER Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.3.2.2"> + <p id="section-toc.1-1.3.2.3.2.3.2.2.1"><a href="#section-3.3.3.2" class="auto internal xref">3.3.3.2</a>.  <a href="#name-snes_overread-packet-2" class="internal xref">SNES_OVERREAD Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.3.2.3"> + <p id="section-toc.1-1.3.2.3.2.3.2.3.1"><a href="#section-3.3.3.3" class="auto internal xref">3.3.3.3</a>.  <a href="#name-snes_game_genie_code-packet-2" class="internal xref">SNES_GAME_GENIE_CODE Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.3.2.4"> + <p id="section-toc.1-1.3.2.3.2.3.2.4.1"><a href="#section-3.3.3.4" class="auto internal xref">3.3.3.4</a>.  <a href="#name-snes_latch_train-packet-rese" class="internal xref">SNES_LATCH_TRAIN Packet (RESERVED)</a></p> +</li> + </ul> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.4"> + <p id="section-toc.1-1.3.2.3.2.4.1"><a href="#section-3.3.4" class="auto internal xref">3.3.4</a>.  <a href="#name-genesis-specific-key-payload" class="internal xref">Genesis Specific Key Payload Formats</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.4.2.1"> + <p id="section-toc.1-1.3.2.3.2.4.2.1.1"><a href="#section-3.3.4.1" class="auto internal xref">3.3.4.1</a>.  <a href="#name-genesis_game_genie_code-pack" class="internal xref">GENESIS_GAME_GENIE_CODE Packet</a></p> +</li> + </ul> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.5"> + <p id="section-toc.1-1.3.2.3.2.5.1"><a href="#section-3.3.5" class="auto internal xref">3.3.5</a>.  <a href="#name-input-frame-timing-key-paylo" class="internal xref">Input Frame/Timing Key Payload Formats</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.5.2.1"> + <p id="section-toc.1-1.3.2.3.2.5.2.1.1"><a href="#section-3.3.5.1" class="auto internal xref">3.3.5.1</a>.  <a href="#name-input_chunk-packet-2" class="internal xref">INPUT_CHUNK Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.5.2.2"> + <p id="section-toc.1-1.3.2.3.2.5.2.2.1"><a href="#section-3.3.5.2" class="auto internal xref">3.3.5.2</a>.  <a href="#name-input_moment-packet-2" class="internal xref">INPUT_MOMENT Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.5.2.3"> + <p id="section-toc.1-1.3.2.3.2.5.2.3.1"><a href="#section-3.3.5.3" class="auto internal xref">3.3.5.3</a>.  <a href="#name-transition-packet-2" class="internal xref">TRANSITION Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.5.2.4"> + <p id="section-toc.1-1.3.2.3.2.5.2.4.1"><a href="#section-3.3.5.4" class="auto internal xref">3.3.5.4</a>.  <a href="#name-lag_frame_chunk-packet-2" class="internal xref">LAG_FRAME_CHUNK Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.5.2.5"> + <p id="section-toc.1-1.3.2.3.2.5.2.5.1"><a href="#section-3.3.5.5" class="auto internal xref">3.3.5.5</a>.  <a href="#name-movie_transition-2" class="internal xref">MOVIE_TRANSITION</a></p> +</li> + </ul> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.6"> + <p id="section-toc.1-1.3.2.3.2.6.1"><a href="#section-3.3.6" class="auto internal xref">3.3.6</a>.  <a href="#name-extraneous-key-payload-forma" class="internal xref">Extraneous Key Payload Formats</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.6.2.1"> + <p id="section-toc.1-1.3.2.3.2.6.2.1.1"><a href="#section-3.3.6.1" class="auto internal xref">3.3.6.1</a>.  <a href="#name-comment-packet-2" class="internal xref">COMMENT Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.6.2.2"> + <p id="section-toc.1-1.3.2.3.2.6.2.2.1"><a href="#section-3.3.6.2" class="auto internal xref">3.3.6.2</a>.  <a href="#name-experimental-packet-2" class="internal xref">EXPERIMENTAL Packet</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.6.2.3"> + <p id="section-toc.1-1.3.2.3.2.6.2.3.1"><a href="#section-3.3.6.3" class="auto internal xref">3.3.6.3</a>.  <a href="#name-unspecified-packet-2" class="internal xref">UNSPECIFIED Packet</a></p> +</li> + </ul> +</li> + </ul> +</li> + </ul> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4"> + <p id="section-toc.1-1.4.1"><a href="#section-4" class="auto internal xref">4</a>.  <a href="#name-controller-input-formats-2" class="internal xref">Controller Input Formats</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.1"> + <p id="section-toc.1-1.4.2.1.1"><a href="#section-4.1" class="auto internal xref">4.1</a>.  <a href="#name-nes-famicom-controller-types" class="internal xref">NES/Famicom Controller Types</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.1.2.1"> + <p id="section-toc.1-1.4.2.1.2.1.1"><a href="#section-4.1.1" class="auto internal xref">4.1.1</a>.  <a href="#name-nes-standard-controller-2" class="internal xref">NES Standard Controller</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.1.2.2"> + <p id="section-toc.1-1.4.2.1.2.2.1"><a href="#section-4.1.2" class="auto internal xref">4.1.2</a>.  <a href="#name-nes-four-score-2" class="internal xref">NES Four Score</a></p> +</li> + </ul> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.2"> + <p id="section-toc.1-1.4.2.2.1"><a href="#section-4.2" class="auto internal xref">4.2</a>.  <a href="#name-snes-controller-types-2" class="internal xref">SNES Controller Types</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.2.2.1"> + <p id="section-toc.1-1.4.2.2.2.1.1"><a href="#section-4.2.1" class="auto internal xref">4.2.1</a>.  <a href="#name-snes-standard-controller-2" class="internal xref">SNES Standard Controller</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.2.2.2"> + <p id="section-toc.1-1.4.2.2.2.2.1"><a href="#section-4.2.2" class="auto internal xref">4.2.2</a>.  <a href="#name-snes-mouse-2" class="internal xref">SNES Mouse</a></p> +</li> + </ul> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3"> + <p id="section-toc.1-1.4.2.3.1"><a href="#section-4.3" class="auto internal xref">4.3</a>.  <a href="#name-n64-controller-types-2" class="internal xref">N64 Controller Types</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.1"> + <p id="section-toc.1-1.4.2.3.2.1.1"><a href="#section-4.3.1" class="auto internal xref">4.3.1</a>.  <a href="#name-n64-standard-controller-2" class="internal xref">N64 Standard Controller</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.2"> + <p id="section-toc.1-1.4.2.3.2.2.1"><a href="#section-4.3.2" class="auto internal xref">4.3.2</a>.  <a href="#name-n64-standard-controller-with-r" class="internal xref">N64 Standard Controller with Rumble</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.3"> + <p id="section-toc.1-1.4.2.3.2.3.1"><a href="#section-4.3.3" class="auto internal xref">4.3.3</a>.  <a href="#name-n64-standard-controller-with-c" class="internal xref">N64 Standard Controller with Controller Pak</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.4"> + <p id="section-toc.1-1.4.2.3.2.4.1"><a href="#section-4.3.4" class="auto internal xref">4.3.4</a>.  <a href="#name-n64-standard-controller-with-t" class="internal xref">N64 Standard Controller with Transfer Pak</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.5"> + <p id="section-toc.1-1.4.2.3.2.5.1"><a href="#section-4.3.5" class="auto internal xref">4.3.5</a>.  <a href="#name-n64-mouse-2" class="internal xref">N64 Mouse</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.6"> + <p id="section-toc.1-1.4.2.3.2.6.1"><a href="#section-4.3.6" class="auto internal xref">4.3.6</a>.  <a href="#name-n64-densha-de-go-2" class="internal xref">N64 Densha de Go</a></p> +</li> + </ul> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.4"> + <p id="section-toc.1-1.4.2.4.1"><a href="#section-4.4" class="auto internal xref">4.4</a>.  <a href="#name-gamecube-controller-types-2" class="internal xref">GameCube Controller Types</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.4.2.1"> + <p id="section-toc.1-1.4.2.4.2.1.1"><a href="#section-4.4.1" class="auto internal xref">4.4.1</a>.  <a href="#name-gamecube-standard-controller" class="internal xref">GameCube Standard Controller</a></p> +</li> + </ul> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.5"> + <p id="section-toc.1-1.4.2.5.1"><a href="#section-4.5" class="auto internal xref">4.5</a>.  <a href="#name-game-boy-controller-types-2" class="internal xref">Game Boy Controller Types</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.5.2.1"> + <p id="section-toc.1-1.4.2.5.2.1.1"><a href="#section-4.5.1" class="auto internal xref">4.5.1</a>.  <a href="#name-gb-standard-controller-2" class="internal xref">GB Standard Controller</a></p> +</li> + </ul> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.6"> + <p id="section-toc.1-1.4.2.6.1"><a href="#section-4.6" class="auto internal xref">4.6</a>.  <a href="#name-game-boy-color-controller-ty" class="internal xref">Game Boy Color Controller Types</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.6.2.1"> + <p id="section-toc.1-1.4.2.6.2.1.1"><a href="#section-4.6.1" class="auto internal xref">4.6.1</a>.  <a href="#name-gbc-standard-controller-2" class="internal xref">GBC Standard Controller</a></p> +</li> + </ul> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.7"> + <p id="section-toc.1-1.4.2.7.1"><a href="#section-4.7" class="auto internal xref">4.7</a>.  <a href="#name-game-boy-advance-controller-" class="internal xref">Game Boy Advance Controller Types</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.7.2.1"> + <p id="section-toc.1-1.4.2.7.2.1.1"><a href="#section-4.7.1" class="auto internal xref">4.7.1</a>.  <a href="#name-gba-standard-controller-2" class="internal xref">GBA Standard Controller</a></p> +</li> + </ul> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.8"> + <p id="section-toc.1-1.4.2.8.1"><a href="#section-4.8" class="auto internal xref">4.8</a>.  <a href="#name-genesis-controller-types-2" class="internal xref">Genesis Controller Types</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.8.2.1"> + <p id="section-toc.1-1.4.2.8.2.1.1"><a href="#section-4.8.1" class="auto internal xref">4.8.1</a>.  <a href="#name-genesis-mega-drive-3-button-2" class="internal xref">Genesis (Mega Drive) 3-Button</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.8.2.2"> + <p id="section-toc.1-1.4.2.8.2.2.1"><a href="#section-4.8.2" class="auto internal xref">4.8.2</a>.  <a href="#name-genesis-mega-drive-6-button-2" class="internal xref">Genesis (Mega Drive) 6-Button</a></p> +</li> + </ul> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.9"> + <p id="section-toc.1-1.4.2.9.1"><a href="#section-4.9" class="auto internal xref">4.9</a>.  <a href="#name-atari-2600-controller-types-2" class="internal xref">Atari 2600 Controller Types</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.9.2.1"> + <p id="section-toc.1-1.4.2.9.2.1.1"><a href="#section-4.9.1" class="auto internal xref">4.9.1</a>.  <a href="#name-a2600-joystick-2" class="internal xref">A2600 Joystick</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.9.2.2"> + <p id="section-toc.1-1.4.2.9.2.2.1"><a href="#section-4.9.2" class="auto internal xref">4.9.2</a>.  <a href="#name-a2600-keyboard-controller-2" class="internal xref">A2600 Keyboard Controller</a></p> +</li> + </ul> +</li> + </ul> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.5"> + <p id="section-toc.1-1.5.1"><a href="#section-5" class="auto internal xref">5</a>.  <a href="#name-references-2" class="internal xref">References</a></p> +<ul class="compact toc ulBare ulEmpty"> +<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.5.2.1"> + <p id="section-toc.1-1.5.2.1.1"><a href="#section-5.1" class="auto internal xref">5.1</a>.  <a href="#name-normative-references-2" class="internal xref">Normative References</a></p> +</li> + </ul> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.6"> + <p id="section-toc.1-1.6.1"><a href="#appendix-A" class="auto internal xref"></a><a href="#name-copyright-notice-2" class="internal xref">Copyright Notice</a></p> +</li> + <li class="compact toc ulBare ulEmpty" id="section-toc.1-1.7"> + <p id="section-toc.1-1.7.1"><a href="#appendix-B" class="auto internal xref"></a><a href="#name-authors-addresses-2" class="internal xref">Authors' Addresses</a></p> +</li> + </ul> +</nav> +</section> +</div> +<div id="introduction"> +<section id="section-1"> + <h2 id="name-introduction-2"> +<a href="#section-1" class="section-number selfRef">1. </a><a href="#name-introduction-2" class="section-name selfRef">Introduction</a> + </h2> +<p id="section-1-1">The Tool Assisted Speedrun Dump (<strong>TASD</strong>) interchange format is a file format for storing data to allow "Tool Assisted Speedruns" or "Tool Assited Superplays" to be played on physical video game console hardware using TAS replay devices. Created to be hardware and software agnostic, the <strong>TASD</strong> interchange format uses a key-based, binary, packet format to break up pieces of information into easily-parsable and forward-compatible chunks. The format is extensible by simply defining additional keys or value types as necessary. When parsing the file, software can skip any packets whose key is unknown or unsupported.<a href="#section-1-1" class="pilcrow">¶</a></p> +<p id="section-1-2">Keys can be used multiple times or completely omitted as needed. This reusability eliminates the need of a predefined delimiter to separate pieces of data such as a list of TAS authors.<a href="#section-1-2" class="pilcrow">¶</a></p> +<p id="section-1-3">While files generated by emulator dump scripts should provide as much information as possible, because keys are optional, the file can be expanded later with any additional data as desired. No intermediary file format is necessary.<a href="#section-1-3" class="pilcrow">¶</a></p> +<section id="section-1.1"> + <h3 id="name-overview-and-preliminaries-2"> +<a href="#section-1.1" class="section-number selfRef">1.1. </a><a href="#name-overview-and-preliminaries-2" class="section-name selfRef">Overview and Preliminaries</a> + </h3> +<p id="section-1.1-1">The key words "<span class="bcp14">MUST</span>", "<span class="bcp14">MUST NOT</span>", "<span class="bcp14">REQUIRED</span>", "<span class="bcp14">SHALL</span>", "<span class="bcp14">SHALL NOT</span>", "<span class="bcp14">SHOULD</span>", "<span class="bcp14">SHOULD NOT</span>", "<span class="bcp14">RECOMMENDED</span>", "<span class="bcp14">NOT RECOMMENDED</span>", "<span class="bcp14">MAY</span>", and "<span class="bcp14">OPTIONAL</span>" in this document are to be interpreted as described in BCP 14 <span>[<a href="#RFC2119" class="cite xref">RFC2119</a>]</span> <span>[<a href="#RFC8174" class="cite xref">RFC8174</a>]</span> when, and only when, they appear in all capitals, as shown here.<a href="#section-1.1-1" class="pilcrow">¶</a></p> +<section id="section-1.1.1"> + <h4 id="name-notation-and-vocabulary-2"> +<a href="#section-1.1.1" class="section-number selfRef">1.1.1. </a><a href="#name-notation-and-vocabulary-2" class="section-name selfRef">Notation and Vocabulary</a> + </h4> +<p id="section-1.1.1-1">Data Types:<a href="#section-1.1.1-1" class="pilcrow">¶</a></p> +<ul class="compact ulEmpty"> +<li class="compact ulEmpty" id="section-1.1.1-2.1">(S) = String<a href="#section-1.1.1-2.1" class="pilcrow">¶</a> +</li> + <li class="compact ulEmpty" id="section-1.1.1-2.2">(A) = Binary Data<a href="#section-1.1.1-2.2" class="pilcrow">¶</a> +</li> + <li class="compact ulEmpty" id="section-1.1.1-2.3">(I) = Signed Integer<a href="#section-1.1.1-2.3" class="pilcrow">¶</a> +</li> + <li class="compact ulEmpty" id="section-1.1.1-2.4">(N) = Unsigned Integer<a href="#section-1.1.1-2.4" class="pilcrow">¶</a> +</li> + <li class="compact ulEmpty" id="section-1.1.1-2.5">(B) = Boolean<a href="#section-1.1.1-2.5" class="pilcrow">¶</a> +</li> + </ul> +<p id="section-1.1.1-3">We use the terms <strong>byte</strong> and <strong>octet</strong> interchangeably in this document.<a href="#section-1.1.1-3" class="pilcrow">¶</a></p> +<p id="section-1.1.1-4">Unless specified otherwise, all multi-octet integers are big-endian.<a href="#section-1.1.1-4" class="pilcrow">¶</a></p> +<p id="section-1.1.1-5">We use the terms <strong>Tool Assisted Speedrun</strong>, <strong>Tool Assisted Superplay</strong> and <strong>TAS</strong> interchangeably in this document.<a href="#section-1.1.1-5" class="pilcrow">¶</a></p> +<p id="section-1.1.1-6">In subsections of (<a href="#descriptions" class="auto internal xref">Section 3.2</a>), the term "in direct form" is used. That term is defined to mean a packet in a <strong>TASD</strong> file directly (first order packet) rather than a packet inside a TRANSITION or MOVIE_TRANSITION packet (second order packet).<a href="#section-1.1.1-6" class="pilcrow">¶</a></p> +<p id="section-1.1.1-7">String values <span class="bcp14">MUST</span> use UTF-8 encoding. If an example of a string value is given, the example will be between quotation marks. The quotation marks are not included in the string. Not all content between quotations will be string value examples, so be aware of that when continuing through this document.<a href="#section-1.1.1-7" class="pilcrow">¶</a></p> +<p id="section-1.1.1-8">Unsigned and signed integers can have different bit widths. For instance, an 8-bit integer can be used in one part of the specification and a 64-bit integer can be used in another part of the specification.<a href="#section-1.1.1-8" class="pilcrow">¶</a></p> +<p id="section-1.1.1-9">Boolean values <span class="bcp14">MUST</span> be a single octet with the value of <code>0</code> for <strong>FALSE</strong> or <code>1</code> for <strong>TRUE</strong>.<a href="#section-1.1.1-9" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlParallel" id="section-1.1.1-10"> + <dt id="section-1.1.1-10.1"><code>[N octets]</code></dt> + <dd style="margin-left: 1.5em" id="section-1.1.1-10.2">A sequence of octets with a length of N<a href="#section-1.1.1-10.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-1.1.1-10.3"><code>[00 7F FF]</code></dt> + <dd style="margin-left: 1.5em" id="section-1.1.1-10.4">A sequence of octets <code>00</code>, <code>7F</code>, and <code>FF</code> in that order.<a href="#section-1.1.1-10.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-1.1.1-10.5"><strong>0-indexed</strong></dt> + <dd style="margin-left: 1.5em" id="section-1.1.1-10.6">When counting sequentially, start counting at 0.<a href="#section-1.1.1-10.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-1.1.1-10.7"><strong>1-indexed</strong></dt> + <dd style="margin-left: 1.5em" id="section-1.1.1-10.8">When counting sequentially, start counting at 1.<a href="#section-1.1.1-10.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-1.1.1-11">In packet diagrams, a single octet is represented with a box like this:<a href="#section-1.1.1-11" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-1.1.1-12"> +<pre> + +-----+ + | Var | <-- Vertical bars MAY be missing + +-----+ +</pre><a href="#section-1.1.1-12" class="pilcrow">¶</a> +</div> +<ul class="compact ulEmpty"> +<li class="compact ulEmpty" id="section-1.1.1-13.1"> + <strong>Var</strong> is a variable name.<a href="#section-1.1.1-13.1" class="pilcrow">¶</a> +</li> + </ul> +<p id="section-1.1.1-14">In packet diagrams, an arbitrary number of octets are represented with a box like this:<a href="#section-1.1.1-14" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-1.1.1-15"> +<pre> + +=====+ + | Var | + +=====+ +</pre><a href="#section-1.1.1-15" class="pilcrow">¶</a> +</div> +<ul class="compact ulEmpty"> +<li class="compact ulEmpty" id="section-1.1.1-16.1"> + <strong>Var</strong> is a variable name.<a href="#section-1.1.1-16.1" class="pilcrow">¶</a> +</li> + </ul> +<p id="section-1.1.1-17">In packet diagrams, boxes can be connected like these examples:<a href="#section-1.1.1-17" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-1.1.1-18"> +<pre> + +-----------+-----------+ + | Var 1 (B) | Var 2 (I) | + +-----------+-----------+ +</pre><a href="#section-1.1.1-18" class="pilcrow">¶</a> +</div> +<ul class="compact ulEmpty"> +<li class="compact ulEmpty" id="section-1.1.1-19.1">In this example, <strong>Var 1</strong> is a 1 octet long boolean value and <strong>Var 2</strong> is a 1 octet long signed integer.<a href="#section-1.1.1-19.1" class="pilcrow">¶</a> +</li> + </ul> +<div class="alignLeft art-text artwork" id="section-1.1.1-20"> +<pre> + +-----+-----+===========+ + | Var 1 (N) | Var 2 (S) | + +-----+-----+===========+ +</pre><a href="#section-1.1.1-20" class="pilcrow">¶</a> +</div> +<ul class="compact ulEmpty"> +<li class="compact ulEmpty" id="section-1.1.1-21.1">In this example, <strong>Var 1</strong> is a 2 octet long unsigned integer and <strong>Var 2</strong> is an arbitrary octet length string.<a href="#section-1.1.1-21.1" class="pilcrow">¶</a> +</li> + </ul> +<p id="section-1.1.1-22">In packet diagrams, boxes <span class="bcp14">MAY</span> have relative offset values above them like in the following example:<a href="#section-1.1.1-22" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-1.1.1-23"> +<pre> + 0 1 2... + +-----+-----+===========+ + | Var 1 (N) | Var 2 (S) | + +-----+-----+===========+ +</pre><a href="#section-1.1.1-23" class="pilcrow">¶</a> +</div> +<ul class="compact ulEmpty"> +<li class="compact ulEmpty" id="section-1.1.1-24.1">In this example, <strong>Var 1</strong> is a 2 octet long unsigned integer and <strong>Var 2</strong> is an arbitrary octet length string.<a href="#section-1.1.1-24.1" class="pilcrow">¶</a> +</li> + </ul> +<p id="section-1.1.1-25">Packet diagrams <span class="bcp14">MAY</span> be split into multiple lined sections like in the following example:<a href="#section-1.1.1-25" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-1.1.1-26"> +<pre> + 0 1 2 3 + +-----------+-----------+-----------+-----------+ + | Var 1 (N) | Var 2 (I) | Var 3 (B) | Var 4 (I) | ... + +-----------+-----------+-----------+-----------+ + 4 5 + +-----------+===========+ + | Var 5 (N) | Var 6 (S) | + +-----------+===========+ +</pre><a href="#section-1.1.1-26" class="pilcrow">¶</a> +</div> +<ul class="compact ulEmpty"> +<li class="compact ulEmpty" id="section-1.1.1-27.1">In this example, enough variable boxes are in the packet diagram to require being split into 2 sections to take up less horizontal space in this documentation. The packet diagram is seperated by an ellipsis (<code>...</code>) on the same text row as the variable names to signify that the packet diagram is continuing.<a href="#section-1.1.1-27.1" class="pilcrow">¶</a> +</li> + </ul> +</section> +</section> +<section id="section-1.2"> + <h3 id="name-motivations-2"> +<a href="#section-1.2" class="section-number selfRef">1.2. </a><a href="#name-motivations-2" class="section-name selfRef">Motivations</a> + </h3> +<p id="section-1.2-1">This file format's primary goal is to provide a comprehensive and replay device agnostic TAS movie controller input dump format that is usable for any console. Additional goals include:<a href="#section-1.2-1" class="pilcrow">¶</a></p> +<ul class="normal"> +<li class="normal" id="section-1.2-2.1">No intermediary formats<a href="#section-1.2-2.1" class="pilcrow">¶</a> +</li> + <li class="normal" id="section-1.2-2.2">Forward compatibility<a href="#section-1.2-2.2" class="pilcrow">¶</a> +</li> + <li class="normal" id="section-1.2-2.3">High extensibility<a href="#section-1.2-2.3" class="pilcrow">¶</a> +</li> + <li class="normal" id="section-1.2-2.4">Ability to easily generate using lua scripting in emulators<a href="#section-1.2-2.4" class="pilcrow">¶</a> +</li> + </ul> +<p id="section-1.2-3">Consideration was also given to how usable the format would be for the software that interacts with replay devices (examples: methods of ingestion/parsing, ease of ingestion/parsing in various languages).<a href="#section-1.2-3" class="pilcrow">¶</a></p> +<section id="section-1.2.1"> + <h4 id="name-problems-with-existing-forma"> +<a href="#section-1.2.1" class="section-number selfRef">1.2.1. </a><a href="#name-problems-with-existing-forma" class="section-name selfRef">Problems With Existing Formats</a> + </h4> +<p id="section-1.2.1-1">Most existing formats are either incomplete for some verification needs or don't exist at all for some consoles. A format commonly used for NES console verifications (r08) only encodes 2 standard controllers worth of sequential data and a format commonly used for SNES console verifications (r16m) only encodes up to 8 standard controllers worth of sequential data. There is no built in way to store <strong>RESET</strong> press timing information or indicate additional settings/information. Non-standard controllers are also not supported in commonly used formats.<a href="#section-1.2.1-1" class="pilcrow">¶</a></p> +<p id="section-1.2.1-2">For consoles not as popular as the NES and SNES, controller input formats would frequently be written in a way that is meant only to work and not in a "standard" way. While that process works, it's less than ideal for redistribution of console replays so that others (especially with differing TAS replay devices) can also verify the same TAS.<a href="#section-1.2.1-2" class="pilcrow">¶</a></p> +</section> +</section> +</section> +</div> +<section id="section-2"> + <h2 id="name-header-2"> +<a href="#section-2" class="section-number selfRef">2. </a><a href="#name-header-2" class="section-name selfRef">Header</a> + </h2> +<p id="section-2-1"><strong>TASD</strong> files <span class="bcp14">MUST</span> include a header, which <span class="bcp14">MUST</span> be in the following format:<a href="#section-2-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-2-2"> +<pre> + 0 1 2 3 4 5 6 + +----+----+----+----+------+------+--------------+ + | Magic Number (A) | Version (N) | G_KEYLEN (N) | + +----+----+----+----+------+------+--------------+ + + Magic Number (Binary Data) [4 octets] + Version (Unsigned Integer) [2 octets] + G_KEYLEN (Unsigned Integer) [1 octet] +</pre><a href="#section-2-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-2-3"> + <dt id="section-2-3.1"><strong>Magic Number</strong></dt> + <dd style="margin-left: 1.5em" id="section-2-3.2">4 octet value that <span class="bcp14">MUST</span> be <code>[54 41 53 44]</code>(ASCII value <code>TASD</code>).<a href="#section-2-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-2-3.3"><strong>Version</strong></dt> + <dd style="margin-left: 1.5em" id="section-2-3.4">Version of the <strong>TASD</strong> file format. Version currently <span class="bcp14">MUST</span> be a value of 1.<a href="#section-2-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-2-3.5"><strong>G_KEYLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-2-3.6">Global length of <strong>Key</strong> values of packets. G_KEYLEN currently <span class="bcp14">MUST</span> be a value of 2.<a href="#section-2-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +<section id="section-3"> + <h2 id="name-packets-2"> +<a href="#section-3" class="section-number selfRef">3. </a><a href="#name-packets-2" class="section-name selfRef">Packets</a> + </h2> +<p id="section-3-1">Packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3-2"> +<pre> + +=========+----------+==========+=============+ + | Key (A) | PEXP (N) | PLEN (N) | Payload (A) | + +=========+----------+==========+=============+ + + Key (Binary Data) [G_KEYLEN octets] + PEXP (Unsigned Integer) [1 octet] + PLEN (Unsigned Integer) [PEXP octets] + Payload (Binary Data) [PLEN octets] +</pre><a href="#section-3-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3-3"> + <dt id="section-3-3.1"><strong>Key</strong></dt> + <dd style="margin-left: 1.5em" id="section-3-3.2">Packet type (Packet key).<a href="#section-3-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3-3.3"><strong>PEXP</strong></dt> + <dd style="margin-left: 1.5em" id="section-3-3.4">Length of <strong>PLEN</strong>.<a href="#section-3-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3-3.5"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3-3.6">Length of <strong>Payload</strong>.<a href="#section-3-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3-3.7"><strong>Payload</strong></dt> + <dd style="margin-left: 1.5em" id="section-3-3.8">Payload/Content of the packet.<a href="#section-3-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3-3.9"><strong>G_KEYLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3-3.10">Length of <strong>Key</strong> in packets and is specified in the <strong>TASD</strong> file header.<a href="#section-3-3.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-3-4">All packets are <span class="bcp14">OPTIONAL</span>.<a href="#section-3-4" class="pilcrow">¶</a></p> +<section id="section-3.1"> + <h3 id="name-assigned-packet-keys-without"> +<a href="#section-3.1" class="section-number selfRef">3.1. </a><a href="#name-assigned-packet-keys-without" class="section-name selfRef">Assigned Packet Keys Without Descriptions</a> + </h3> +<section id="section-3.1.1"> + <h4 id="name-general-keys-2"> +<a href="#section-3.1.1" class="section-number selfRef">3.1.1. </a><a href="#name-general-keys-2" class="section-name selfRef">General Keys</a> + </h4> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-3.1.1-1"> + <dt id="section-3.1.1-1.1"><code>[00 01]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.1-1.2">CONSOLE_TYPE<a href="#section-3.1.1-1.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.1-1.3"><code>[00 02]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.1-1.4">CONSOLE_REGION<a href="#section-3.1.1-1.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.1-1.5"><code>[00 03]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.1-1.6">GAME_TITLE<a href="#section-3.1.1-1.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.1-1.7"><code>[00 04]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.1-1.8">ROM_NAME<a href="#section-3.1.1-1.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.1-1.9"><code>[00 05]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.1-1.10">ATTRIBUTION<a href="#section-3.1.1-1.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.1-1.11"><code>[00 06]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.1-1.12">CATEGORY<a href="#section-3.1.1-1.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.1-1.13"><code>[00 07]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.1-1.14">EMULATOR_NAME<a href="#section-3.1.1-1.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.1-1.15"><code>[00 08]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.1-1.16">EMULATOR_VERSION<a href="#section-3.1.1-1.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.1-1.17"><code>[00 09]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.1-1.18">EMULATOR_CORE<a href="#section-3.1.1-1.18" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.1-1.19"><code>[00 0A]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.1-1.20">TAS_LAST_MODIFIED<a href="#section-3.1.1-1.20" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.1-1.21"><code>[00 0B]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.1-1.22">DUMP_CREATED<a href="#section-3.1.1-1.22" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.1-1.23"><code>[00 0C]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.1-1.24">DUMP_LAST_MODIFIED<a href="#section-3.1.1-1.24" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.1-1.25"><code>[00 0D]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.1-1.26">TOTAL_FRAMES<a href="#section-3.1.1-1.26" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.1-1.27"><code>[00 0E]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.1-1.28">RERECORDS<a href="#section-3.1.1-1.28" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.1-1.29"><code>[00 0F]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.1-1.30">SOURCE_LINK<a href="#section-3.1.1-1.30" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.1-1.31"><code>[00 10]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.1-1.32">BLANK_FRAMES<a href="#section-3.1.1-1.32" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.1-1.33"><code>[00 11]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.1-1.34">VERIFIED<a href="#section-3.1.1-1.34" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.1-1.35"><code>[00 12]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.1-1.36">MEMORY_INIT<a href="#section-3.1.1-1.36" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.1-1.37"><code>[00 13]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.1-1.38">GAME_IDENIFIER<a href="#section-3.1.1-1.38" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.1-1.39"><code>[00 14]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.1-1.40">MOVIE_LICENSE<a href="#section-3.1.1-1.40" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.1-1.41"><code>[00 15]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.1-1.42">MOVIE_FILE<a href="#section-3.1.1-1.42" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.1-1.43"><code>[00 F0]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.1-1.44">PORT_CONTROLLER<a href="#section-3.1.1-1.44" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +<section id="section-3.1.2"> + <h4 id="name-nes-specific-keys-2"> +<a href="#section-3.1.2" class="section-number selfRef">3.1.2. </a><a href="#name-nes-specific-keys-2" class="section-name selfRef">NES Specific Keys</a> + </h4> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-3.1.2-1"> + <dt id="section-3.1.2-1.1"><code>[01 01]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.2-1.2">NES_LATCH_FILTER<a href="#section-3.1.2-1.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.2-1.3"><code>[01 02]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.2-1.4">NES_CLOCK_FILTER<a href="#section-3.1.2-1.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.2-1.5"><code>[01 03]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.2-1.6">NES_OVERREAD<a href="#section-3.1.2-1.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.2-1.7"><code>[01 04]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.2-1.8">NES_GAME_GENIE_CODE<a href="#section-3.1.2-1.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +<section id="section-3.1.3"> + <h4 id="name-snes-specific-keys-2"> +<a href="#section-3.1.3" class="section-number selfRef">3.1.3. </a><a href="#name-snes-specific-keys-2" class="section-name selfRef">SNES Specific Keys</a> + </h4> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-3.1.3-1"> + <dt id="section-3.1.3-1.1"><code>[02 02]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.3-1.2">SNES_CLOCK_FILTER<a href="#section-3.1.3-1.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.3-1.3"><code>[02 03]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.3-1.4">SNES_OVERREAD<a href="#section-3.1.3-1.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.3-1.5"><code>[02 04]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.3-1.6">SNES_GAME_GENIE_CODE<a href="#section-3.1.3-1.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.3-1.7"><code>[02 05]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.3-1.8">SNES_LATCH_TRAIN (RESERVED)<a href="#section-3.1.3-1.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +<section id="section-3.1.4"> + <h4 id="name-genesis-specific-keys-2"> +<a href="#section-3.1.4" class="section-number selfRef">3.1.4. </a><a href="#name-genesis-specific-keys-2" class="section-name selfRef">Genesis Specific Keys</a> + </h4> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-3.1.4-1"> + <dt id="section-3.1.4-1.1"><code>[08 04]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.4-1.2">GENESIS_GAME_GENIE_CODE<a href="#section-3.1.4-1.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +<section id="section-3.1.5"> + <h4 id="name-input-frame-timing-keys-2"> +<a href="#section-3.1.5" class="section-number selfRef">3.1.5. </a><a href="#name-input-frame-timing-keys-2" class="section-name selfRef">Input Frame/Timing Keys</a> + </h4> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-3.1.5-1"> + <dt id="section-3.1.5-1.1"><code>[FE 01]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.5-1.2">INPUT_CHUNK<a href="#section-3.1.5-1.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.5-1.3"><code>[FE 02]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.5-1.4">INPUT_MOMENT<a href="#section-3.1.5-1.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.5-1.5"><code>[FE 03]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.5-1.6">TRANSITION<a href="#section-3.1.5-1.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.5-1.7"><code>[FE 04]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.5-1.8">LAG_FRAME_CHUNK<a href="#section-3.1.5-1.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.5-1.9"><code>[FE 05]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.5-1.10">MOVIE_TRANSITION<a href="#section-3.1.5-1.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +<section id="section-3.1.6"> + <h4 id="name-extraneous-keys-2"> +<a href="#section-3.1.6" class="section-number selfRef">3.1.6. </a><a href="#name-extraneous-keys-2" class="section-name selfRef">Extraneous Keys</a> + </h4> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-3.1.6-1"> + <dt id="section-3.1.6-1.1"><code>[FF 01]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.6-1.2">COMMENT<a href="#section-3.1.6-1.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.6-1.3"><code>[FF FE]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.6-1.4">EXPERIMENTAL<a href="#section-3.1.6-1.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.1.6-1.5"><code>[FF FF]</code></dt> + <dd style="margin-left: 1.5em" id="section-3.1.6-1.6">UNSPECIFIED<a href="#section-3.1.6-1.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</section> +<div id="descriptions"> +<section id="section-3.2"> + <h3 id="name-assigned-packet-keys-with-de"> +<a href="#section-3.2" class="section-number selfRef">3.2. </a><a href="#name-assigned-packet-keys-with-de" class="section-name selfRef">Assigned Packet Keys With Descriptions</a> + </h3> +<section id="section-3.2.1"> + <h4 id="name-general-key-descriptions-2"> +<a href="#section-3.2.1" class="section-number selfRef">3.2.1. </a><a href="#name-general-key-descriptions-2" class="section-name selfRef">General Key Descriptions</a> + </h4> +<span class="break"></span><dl class="dlNewline" id="section-3.2.1-1"> + <dt id="section-3.2.1-1.1"> +<code>[00 01]</code> - CONSOLE_TYPE</dt> + <dd style="margin-left: 1.5em" id="section-3.2.1-1.2">Specifies console used on emulator when dumping the TAS controller inputs. This packet type is <span class="bcp14">OPTIONAL</span> but <span class="bcp14">SHOULD</span> be included in a <strong>TASD</strong> file and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#console_type" class="auto internal xref">Section 3.3.1.1</a>).<a href="#section-3.2.1-1.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.1-1.3"> +<code>[00 02]</code> - CONSOLE_REGION</dt> + <dd style="margin-left: 1.5em" id="section-3.2.1-1.4">Specifies video region of console used for the TAS. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">MAY</span> contain more than 1 of this packet type. Discussed in (<a href="#console_region" class="auto internal xref">Section 3.3.1.2</a>).<a href="#section-3.2.1-1.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.1-1.5"> +<code>[00 03]</code> - GAME_TITLE</dt> + <dd style="margin-left: 1.5em" id="section-3.2.1-1.6">Specifies the name of the game the TAS is written for. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">MAY</span> contain more than 1 of this packet type. Discussed in (<a href="#game_title" class="auto internal xref">Section 3.3.1.3</a>).<a href="#section-3.2.1-1.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.1-1.7"> +<code>[00 04]</code> - ROM_NAME</dt> + <dd style="margin-left: 1.5em" id="section-3.2.1-1.8">Specifies the name of the specific ROM file used for the TAS. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">MAY</span> contain more than 1 of this packet type. Discussed in (<a href="#rom_name" class="auto internal xref">Section 3.3.1.4</a>).<a href="#section-3.2.1-1.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.1-1.9"> +<code>[00 05]</code> - ATTRIBUTION</dt> + <dd style="margin-left: 1.5em" id="section-3.2.1-1.10">Specifies the name of someone involved in the TAS or the creation or management of the <strong>TASD</strong> file in order to provide proper attribution for work done. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">MAY</span> contain more than 1 of this packet type. Discussed in (<a href="#author" class="auto internal xref">Section 3.3.1.5</a>).<a href="#section-3.2.1-1.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.1-1.11"> +<code>[00 06]</code> - CATEGORY</dt> + <dd style="margin-left: 1.5em" id="section-3.2.1-1.12">Specifies the run category of the TAS. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#category" class="auto internal xref">Section 3.3.1.6</a>).<a href="#section-3.2.1-1.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.1-1.13"> +<code>[00 07]</code> - EMULATOR_NAME</dt> + <dd style="margin-left: 1.5em" id="section-3.2.1-1.14">Specifies the emulator used while dumping TAS controller inputs. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#emulator_name" class="auto internal xref">Section 3.3.1.7</a>).<a href="#section-3.2.1-1.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.1-1.15"> +<code>[00 08]</code> - EMULATOR_VERSION</dt> + <dd style="margin-left: 1.5em" id="section-3.2.1-1.16">Specifies the version of the emulator used while dump the TAS controller inputs. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#emulator_version" class="auto internal xref">Section 3.3.1.8</a>).<a href="#section-3.2.1-1.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.1-1.17"> +<code>[00 09]</code> - EMULATOR_CORE</dt> + <dd style="margin-left: 1.5em" id="section-3.2.1-1.18">Specifies the core of the emulator used while dumping the TAS controller inputs. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#emulator_core" class="auto internal xref">Section 3.3.1.9</a>).<a href="#section-3.2.1-1.18" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.1-1.19"> +<code>[00 0A]</code> - TAS_LAST_MODIFIED</dt> + <dd style="margin-left: 1.5em" id="section-3.2.1-1.20">Specifies when the TAS was last modified. Frequently used to specify the date and time when the TAS was published. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#tas_last_modified" class="auto internal xref">Section 3.3.1.10</a>).<a href="#section-3.2.1-1.20" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.1-1.21"> +<code>[00 0B]</code> - DUMP_CREATEED</dt> + <dd style="margin-left: 1.5em" id="section-3.2.1-1.22">Specifies when the <strong>TASD</strong> file was first created. This packet is <span class="bcp14">OPTIONAL</span> but <span class="bcp14">SHOULD</span> be included in a <strong>TASD</strong> file and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type. Discussed in (<a href="#dump_created" class="auto internal xref">Section 3.3.1.11</a>).<a href="#section-3.2.1-1.22" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.1-1.23"> +<code>[00 0C]</code> - DUMP_LAST_MODIFIED</dt> + <dd style="margin-left: 1.5em" id="section-3.2.1-1.24">Specifies when the <strong>TASD</strong> file was last modified. This packet is <span class="bcp14">OPTIONAL</span> but <span class="bcp14">SHOULD</span> be included in a <strong>TASD</strong> file and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type. Discussed in (<a href="#dump_last_modified" class="auto internal xref">Section 3.3.1.12</a>).<a href="#section-3.2.1-1.24" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.1-1.25"> +<code>[00 0D]</code> - TOTAL_FRAMES</dt> + <dd style="margin-left: 1.5em" id="section-3.2.1-1.26">Specifies the total number of frames in the TAS. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#total_frames" class="auto internal xref">Section 3.3.1.13</a>).<a href="#section-3.2.1-1.26" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.1-1.27"> +<code>[00 0E]</code> - RERECORDS</dt> + <dd style="margin-left: 1.5em" id="section-3.2.1-1.28">Specifies the total number of rerecords of the TAS. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#rerecords" class="auto internal xref">Section 3.3.1.14</a>).<a href="#section-3.2.1-1.28" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.1-1.29"> +<code>[00 0F]</code> - SOURCE_LINK</dt> + <dd style="margin-left: 1.5em" id="section-3.2.1-1.30">Specifies the source link for the TAS. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type. Discussed in (<a href="#source_link" class="auto internal xref">Section 3.3.1.15</a>).<a href="#section-3.2.1-1.30" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.1-1.31"> +<code>[00 10]</code> - BLANK_FRAMES</dt> + <dd style="margin-left: 1.5em" id="section-3.2.1-1.32">Specifies the number of blank controller inputs or frames to prepend to the inputs of the TAS when played on hardware. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#blank_frames" class="auto internal xref">Section 3.3.1.16</a>).<a href="#section-3.2.1-1.32" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.1-1.33"> +<code>[00 11]</code> - VERIFIED</dt> + <dd style="margin-left: 1.5em" id="section-3.2.1-1.34">Specifies whether the TAS is verified to run on hardware, also known as "console verified", using the <strong>TASD</strong> file. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#verified" class="auto internal xref">Section 3.3.1.17</a>).<a href="#section-3.2.1-1.34" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.1-1.35"> +<code>[00 12]</code> - MEMORY_INIT</dt> + <dd style="margin-left: 1.5em" id="section-3.2.1-1.36">Specifies initial memory values used for the TAS. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">MAY</span> contain more than 1 of this packet type. Discussed in (<a href="#memory_init" class="auto internal xref">Section 3.3.1.18</a>).<a href="#section-3.2.1-1.36" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.1-1.37"> +<code>[00 13]</code> - GAME_IDENTIFIER</dt> + <dd style="margin-left: 1.5em" id="section-3.2.1-1.38">Specifies an identifier for the game the TAS is written for. This can be checksums, hashes, or other identifying data. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">MAY</span> contain more than 1 of this packet type. Discussed in (<a href="#game_identifier" class="auto internal xref">Section 3.3.1.19</a>).<a href="#section-3.2.1-1.38" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.1-1.39"> +<code>[00 14]</code> - MOVIE_LICENSE</dt> + <dd style="margin-left: 1.5em" id="section-3.2.1-1.40">Specifies a copyright license for the TAS. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">MAY</span> contain more than 1 of this packet type. Discussed in (<a href="#movie_license" class="auto internal xref">Section 3.3.1.20</a>).<a href="#section-3.2.1-1.40" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.1-1.41"> +<code>[00 15]</code> - MOVIE_FILE</dt> + <dd style="margin-left: 1.5em" id="section-3.2.1-1.42">Specifies the TAS movie data. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type. Discussed in (<a href="#movie_file" class="auto internal xref">Section 3.3.1.21</a>).<a href="#section-3.2.1-1.42" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.1-1.43"> +<code>[00 F0]</code> - PORT_CONTROLLER</dt> + <dd style="margin-left: 1.5em" id="section-3.2.1-1.44">Specifies the controller type in specific console controller ports for the TAS when played on hardware. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#port_controller" class="auto internal xref">Section 3.3.1.22</a>).<a href="#section-3.2.1-1.44" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +<section id="section-3.2.2"> + <h4 id="name-nes-specific-key-description"> +<a href="#section-3.2.2" class="section-number selfRef">3.2.2. </a><a href="#name-nes-specific-key-description" class="section-name selfRef">NES Specific Key Descriptions</a> + </h4> +<span class="break"></span><dl class="dlNewline" id="section-3.2.2-1"> + <dt id="section-3.2.2-1.1"> +<code>[01 01]</code> - NES_LATCH_FILTER</dt> + <dd style="margin-left: 1.5em" id="section-3.2.2-1.2">Specifies a latch filter time in microseconds for how long how long to wait after a latch signal until new latch signals <span class="bcp14">SHOULD</span> be accepted by the replay device. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#nes_latch_filter" class="auto internal xref">Section 3.3.2.1</a>).<a href="#section-3.2.2-1.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.2-1.3"> +<code>[01 02]</code> - NES_CLOCK_FILTER</dt> + <dd style="margin-left: 1.5em" id="section-3.2.2-1.4">Specifies a clock filter time in tenths of a microsecond (0.1 microseconds or 100 nanoseconds) for how long to wait after a clock pulse until new clock pulses <span class="bcp14">SHOULD</span> be accepted by the replay device. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#nes_clock_filter" class="auto internal xref">Section 3.3.2.2</a>).<a href="#section-3.2.2-1.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.2-1.5"> +<code>[01 03]</code> - NES_OVERREAD</dt> + <dd style="margin-left: 1.5em" id="section-3.2.2-1.6">Specifies whether a high or low signal <span class="bcp14">SHOULD</span> be sent to the NES console if the console clocks the replay device for more input buttons than are expected for the latch. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#nes_overread" class="auto internal xref">Section 3.3.2.3</a>).<a href="#section-3.2.2-1.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.2-1.7"> +<code>[01 04]</code> - NES_GAME_GENIE_CODE</dt> + <dd style="margin-left: 1.5em" id="section-3.2.2-1.8">Specifies a Game Genie code for the TAS. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">MAY</span> contain more than 1 of this packet type. Discussed in (<a href="#nes_game_genie_code" class="auto internal xref">Section 3.3.2.4</a>).<a href="#section-3.2.2-1.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +<section id="section-3.2.3"> + <h4 id="name-snes-specific-key-descriptio"> +<a href="#section-3.2.3" class="section-number selfRef">3.2.3. </a><a href="#name-snes-specific-key-descriptio" class="section-name selfRef">SNES Specific Key Descriptions</a> + </h4> +<span class="break"></span><dl class="dlNewline" id="section-3.2.3-1"> + <dt id="section-3.2.3-1.1"> +<code>[02 02]</code> - SNES_CLOCK_FILTER</dt> + <dd style="margin-left: 1.5em" id="section-3.2.3-1.2">Specifies a clock filter time in tenths of a microsecond (0.1 microseconds or 100 nanoseconds) for long how to wait after a clock pulse before new clock pulses <span class="bcp14">SHOULD</span> be accepted by the replay device. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#nes_clock_filter" class="auto internal xref">Section 3.3.2.2</a>).<a href="#section-3.2.3-1.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.3-1.3"> +<code>[02 03]</code> - SNES_OVERREAD</dt> + <dd style="margin-left: 1.5em" id="section-3.2.3-1.4">Specifies whether a high or low signal <span class="bcp14">SHOULD</span> be sent to the SNES console if the console clocks the replay device for more input buttons than are expected for the latch. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type in direct form. Discussed in (<a href="#snes_overread" class="auto internal xref">Section 3.3.3.2</a>).<a href="#section-3.2.3-1.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.3-1.5"> +<code>[02 04]</code> - SNES_GAME_GENIE_CODE</dt> + <dd style="margin-left: 1.5em" id="section-3.2.3-1.6">Specifies a Game Genie code for the TAS. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">MAY</span> contain more than 1 of this packet type. Discussed in (<a href="#snes_game_genie_code" class="auto internal xref">Section 3.3.3.3</a>).<a href="#section-3.2.3-1.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.3-1.7"> +<code>[02 05]</code> - SNES_LATCH_TRAIN (RESERVED)</dt> + <dd style="margin-left: 1.5em" id="section-3.2.3-1.8">This packet type is not yet designed and is intended to be described in the future. Discussed in (<a href="#snes_latch_train" class="auto internal xref">Section 3.3.3.4</a>).<a href="#section-3.2.3-1.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +<section id="section-3.2.4"> + <h4 id="name-genesis-specific-key-descrip"> +<a href="#section-3.2.4" class="section-number selfRef">3.2.4. </a><a href="#name-genesis-specific-key-descrip" class="section-name selfRef">Genesis Specific Key Descriptions</a> + </h4> +<span class="break"></span><dl class="dlNewline" id="section-3.2.4-1"> + <dt id="section-3.2.4-1.1"> +<code>[08 04]</code> - GENESIS_GAME_GENIE_CODE</dt> + <dd style="margin-left: 1.5em" id="section-3.2.4-1.2">Specifies a Game Genie code for the TAS. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">MAY</span> contain more than 1 of this packet type. Discussed in (<a href="#genesis_game_genie_code" class="auto internal xref">Section 3.3.4.1</a>).<a href="#section-3.2.4-1.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +<section id="section-3.2.5"> + <h4 id="name-input-frame-timing-key-descr"> +<a href="#section-3.2.5" class="section-number selfRef">3.2.5. </a><a href="#name-input-frame-timing-key-descr" class="section-name selfRef">Input Frame/Timing Key Descriptions</a> + </h4> +<span class="break"></span><dl class="dlNewline" id="section-3.2.5-1"> + <dt id="section-3.2.5-1.1"> +<code>[FE 01]</code> - INPUT_CHUNK</dt> + <dd style="margin-left: 1.5em" id="section-3.2.5-1.2">Specifies a chunk of input data for the TAS when played on hardware. All data from INPUT_CHUNK packets are concatenated together in order of appearance in the <strong>TASD</strong> file. If the INPUT_CHUNK packet type is used, the PORT_CONTROLLER packet type <span class="bcp14">MUST</span> be used. If the INPUT_CHUNK packet type is used, the INPUT_MOMENT packet type <span class="bcp14">SHOULD NOT</span> be used. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">MAY</span> contain more than 1 of this packet type. Discussed in (<a href="#input_chunk" class="auto internal xref">Section 3.3.5.1</a>).<a href="#section-3.2.5-1.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.5-1.3"> +<code>[FE 02]</code> - INPUT_MOMENT</dt> + <dd style="margin-left: 1.5em" id="section-3.2.5-1.4">Specifies input data that is sent from the replay device to the console with specific timing. If the INPUT_MOMENT packet type is used, the PORT_CONTROLLER packet type <span class="bcp14">MUST</span> be used. If the INPUT_MOMENT packet type is used, the INPUT_CHUNK packet type <span class="bcp14">SHOULD NOT</span> be used. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">MAY</span> contain more than 1 of this packet type. Discussed in (<a href="#input_moment" class="auto internal xref">Section 3.3.5.2</a>).<a href="#section-3.2.5-1.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.5-1.5"> +<code>[FE 03]</code> - TRANSITION</dt> + <dd style="margin-left: 1.5em" id="section-3.2.5-1.6">Specifies when a transition or change occurs during a TAS replay (example: console reset or changing of controller types). This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">MAY</span> contain more than 1 of this packet type. Discussed in (<a href="#transition" class="auto internal xref">Section 3.3.5.3</a>).<a href="#section-3.2.5-1.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.5-1.7"> +<code>[FE 04]</code> - LAG_FRAME_CHUNK</dt> + <dd style="margin-left: 1.5em" id="section-3.2.5-1.8">Specifies a chunk of lag frames in a TAS based on the original TAS movie. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">MAY</span> contain more than 1 of this packet type. Discussed in (<a href="#lag_frame_chunk" class="auto internal xref">Section 3.3.5.4</a>).<a href="#section-3.2.5-1.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.5-1.9"> +<code>[FE 05]</code> - MOVIE_TRANSITION</dt> + <dd style="margin-left: 1.5em" id="section-3.2.5-1.10">Specifies when a transition or change occurs in the original TAS movie (example: console reset or changing of controller types). This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">MAY</span> contain more than 1 of this packet type. Discussed in (<a href="#movie_transition" class="auto internal xref">Section 3.3.5.5</a>).<a href="#section-3.2.5-1.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +<section id="section-3.2.6"> + <h4 id="name-extraneous-key-descriptions-2"> +<a href="#section-3.2.6" class="section-number selfRef">3.2.6. </a><a href="#name-extraneous-key-descriptions-2" class="section-name selfRef">Extraneous Key Descriptions</a> + </h4> +<span class="break"></span><dl class="dlNewline" id="section-3.2.6-1"> + <dt id="section-3.2.6-1.1"> +<code>[FF 01]</code> - COMMENT</dt> + <dd style="margin-left: 1.5em" id="section-3.2.6-1.2">Comment data. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">MAY</span> contain more than 1 of this packet type. Discussed in (<a href="#comment" class="auto internal xref">Section 3.3.6.1</a>).<a href="#section-3.2.6-1.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.6-1.3"> +<code>[FF FE]</code> - EXPERIMENTAL</dt> + <dd style="margin-left: 1.5em" id="section-3.2.6-1.4">TASD file is using experimental packets. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">SHOULD NOT</span> contain more than 1 of this packet type. Discussed in (<a href="#experimental" class="auto internal xref">Section 3.3.6.2</a>).<a href="#section-3.2.6-1.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.2.6-1.5"> +<code>[FF FF]</code> - UNSPECIFIED</dt> + <dd style="margin-left: 1.5em" id="section-3.2.6-1.6">Unspecified packet data. Can contain any arbitrary data. This packet type is <span class="bcp14">OPTIONAL</span> and a <strong>TASD</strong> file <span class="bcp14">MAY</span> contain more than 1 of this packet type. Discussed in (<a href="#unspecified" class="auto internal xref">Section 3.3.6.3</a>).<a href="#section-3.2.6-1.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</section> +</div> +<section id="section-3.3"> + <h3 id="name-packet-payload-formats-2"> +<a href="#section-3.3" class="section-number selfRef">3.3. </a><a href="#name-packet-payload-formats-2" class="section-name selfRef">Packet Payload Formats</a> + </h3> +<section id="section-3.3.1"> + <h4 id="name-general-key-payload-formats-2"> +<a href="#section-3.3.1" class="section-number selfRef">3.3.1. </a><a href="#name-general-key-payload-formats-2" class="section-name selfRef">General Key Payload Formats</a> + </h4> +<div id="console_type"> +<section id="section-3.3.1.1"> + <h5 id="name-console_type-packet-2"> +<a href="#section-3.3.1.1" class="section-number selfRef">3.3.1.1. </a><a href="#name-console_type-packet-2" class="section-name selfRef">CONSOLE_TYPE Packet</a> + </h5> +<p id="section-3.3.1.1-1">CONSOLE_TYPE packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.1.1-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.1.1-2"> +<pre> + 0 1... + +-------------+==========+ + | Console (A) | Name (S) | + +-------------+==========+ + + Console (Binary Data): [1 octet] + [01] - NES <Nintendo Entertainment System> + [02] - SNES <Super Nintendo> + [03] - N64 <Nintendo 64> + [04] - GC <GameCube> + [05] - GB <Game Boy> + [06] - GBC <Game Boy Color> + [07] - GBA <Game Boy Advance> + [08] - Genesis <Sega Genesis/Sega Mega Drive> + [09] - A2600 <Atari 2600> + [FF] - Custom + Name (String) [PLEN - 1 octets] +</pre><a href="#section-3.3.1.1-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.1.1-3"> + <dt id="section-3.3.1.1-3.1"><strong>Console</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.1-3.2">Game console the TAS movie is for. There are pre-specified console types, but a <strong>TASD</strong> file <span class="bcp14">MAY</span> use <code>[FF]</code> to specify a console that is not in the pre-specified console types.<a href="#section-3.3.1.1-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.1-3.3"><strong>Name</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.1-3.4">Name of the console the TAS movie is for. <span class="bcp14">SHOULD</span> be empty if <strong>Console</strong> is not set to <code>[FF]</code>.<a href="#section-3.3.1.1-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.1-3.5"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.1-3.6">Length of the packet payload.<a href="#section-3.3.1.1-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="console_region"> +<section id="section-3.3.1.2"> + <h5 id="name-console_region-packet-2"> +<a href="#section-3.3.1.2" class="section-number selfRef">3.3.1.2. </a><a href="#name-console_region-packet-2" class="section-name selfRef">CONSOLE_REGION Packet</a> + </h5> +<p id="section-3.3.1.2-1">CONSOLE_REGION packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.1.2-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.1.2-2"> +<pre> + 0 + +------------------+ + | Video Signal (A) | + +------------------+ + + Video Signal (Binary Data): [1 octet] + [01] - NTSC + [02] - PAL + [FF] - Other/Unknown +</pre><a href="#section-3.3.1.2-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.1.2-3"> + <dt id="section-3.3.1.2-3.1"><strong>Video Signal</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.2-3.2">Specifies the video signal of the game console being emulated while dumping the TAS movie controller inputs.<a href="#section-3.3.1.2-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="game_title"> +<section id="section-3.3.1.3"> + <h5 id="name-game_title-packet-2"> +<a href="#section-3.3.1.3" class="section-number selfRef">3.3.1.3. </a><a href="#name-game_title-packet-2" class="section-name selfRef">GAME_TITLE Packet</a> + </h5> +<p id="section-3.3.1.3-1">GAME_TITLE packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.1.3-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.1.3-2"> +<pre> + 0... + +===========+ + | Title (S) | + +===========+ + + Title (String) [PLEN octets] +</pre><a href="#section-3.3.1.3-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.1.3-3"> + <dt id="section-3.3.1.3-3.1"><strong>Title</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.3-3.2">Game title the TAS movie is for (example: "Super Mario Bros. 3").<a href="#section-3.3.1.3-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.3-3.3"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.3-3.4">Length of the packet payload.<a href="#section-3.3.1.3-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="rom_name"> +<section id="section-3.3.1.4"> + <h5 id="name-rom_name-packet-2"> +<a href="#section-3.3.1.4" class="section-number selfRef">3.3.1.4. </a><a href="#name-rom_name-packet-2" class="section-name selfRef">ROM_NAME Packet</a> + </h5> +<p id="section-3.3.1.4-1">ROM_NAME packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.1.4-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.1.4-2"> +<pre> + 0... + +==========+ + | Name (S) | + +==========+ + + Name (String) [PLEN octets] +</pre><a href="#section-3.3.1.4-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.1.4-3"> + <dt id="section-3.3.1.4-3.1"><strong>Name</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.4-3.2">File name of the ROM used for the TAS movie (example: "Super Mario Bros. 3 (J) [!].nes").<a href="#section-3.3.1.4-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.4-3.3"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.4-3.4">Length of the packet payload.<a href="#section-3.3.1.4-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="author"> +<section id="section-3.3.1.5"> + <h5 id="name-attribution-packet-2"> +<a href="#section-3.3.1.5" class="section-number selfRef">3.3.1.5. </a><a href="#name-attribution-packet-2" class="section-name selfRef">ATTRIBUTION Packet</a> + </h5> +<p id="section-3.3.1.5-1">ATTRIBUTION packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.1.5-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.1.5-2"> +<pre> + 0 1... + +----------+==========+ + | Type (A) | Name (S) | + +----------+==========+ + + Type (Binary Data) [1 octet] + [01] - Author + [02] - Verifier + [03] - TASD File Creator + [04] - TASD File Editor + [FF] - Other + Name (String) [PLEN - 1 octets] +</pre><a href="#section-3.3.1.5-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.1.5-3"> + <dt id="section-3.3.1.5-3.1"><strong>Type</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.5-3.2">Function of the person who is being attributed. <strong>Author</strong> is meant for a TAS movie author. <strong>Verifier</strong> is meant for a person who initially console verified the the TAS movie using the <strong>TASD file</strong>. <strong>TASD File Creator</strong> is meant for the person who initially dumped the TAS movie controller inputs into the <strong>TASD</strong> file. <strong>TASD File Editor</strong> is meant for a person who edited the <strong>TASD</strong> file.<a href="#section-3.3.1.5-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.5-3.3"><strong>Name</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.5-3.4">Name of the individual getting the attribution (example: "OnehundredthCoin").<a href="#section-3.3.1.5-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.5-3.5"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.5-3.6">Length of the packet payload.<a href="#section-3.3.1.5-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="category"> +<section id="section-3.3.1.6"> + <h5 id="name-category-packet-2"> +<a href="#section-3.3.1.6" class="section-number selfRef">3.3.1.6. </a><a href="#name-category-packet-2" class="section-name selfRef">CATEGORY Packet</a> + </h5> +<p id="section-3.3.1.6-1">CATEGORY packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.1.6-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.1.6-2"> +<pre> + 0... + +==============+ + | Category (S) | + +==============+ + + Category (String) [PLEN octets] +</pre><a href="#section-3.3.1.6-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.1.6-3"> + <dt id="section-3.3.1.6-3.1"><strong>Category</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.6-3.2">Name of the TAS movie run category (example: "Any %", "100%", "No Warps").<a href="#section-3.3.1.6-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.6-3.3"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.6-3.4">Length of the packet payload.<a href="#section-3.3.1.6-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="emulator_name"> +<section id="section-3.3.1.7"> + <h5 id="name-emulator_name-packet-2"> +<a href="#section-3.3.1.7" class="section-number selfRef">3.3.1.7. </a><a href="#name-emulator_name-packet-2" class="section-name selfRef">EMULATOR_NAME Packet</a> + </h5> +<p id="section-3.3.1.7-1">EMULATOR_NAME packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.1.7-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.1.7-2"> +<pre> + 0... + +==========+ + | Name (S) | + +==========+ + + Name (String) [PLEN octets] +</pre><a href="#section-3.3.1.7-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.1.7-3"> + <dt id="section-3.3.1.7-3.1"><strong>Name</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.7-3.2">Name of the emulator used to play the TAS movie while dumping controller inputs (example: "FCEUX", "Bizhawk").<a href="#section-3.3.1.7-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.7-3.3"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.7-3.4">Length of the packet payload.<a href="#section-3.3.1.7-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="emulator_version"> +<section id="section-3.3.1.8"> + <h5 id="name-emulator_version-packet-2"> +<a href="#section-3.3.1.8" class="section-number selfRef">3.3.1.8. </a><a href="#name-emulator_version-packet-2" class="section-name selfRef">EMULATOR_VERSION Packet</a> + </h5> +<p id="section-3.3.1.8-1">EMULATOR_VERSION packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.1.8-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.1.8-2"> +<pre> + 0... + +=============+ + | Version (S) | + +=============+ + + Version (String) [PLEN octets] +</pre><a href="#section-3.3.1.8-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.1.8-3"> + <dt id="section-3.3.1.8-3.1"><strong>Version</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.8-3.2">Version of the emulator used to play the TAS movie while dumping controller inputs (example: "2.7.0").<a href="#section-3.3.1.8-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.8-3.3"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.8-3.4">Length of the packet payload.<a href="#section-3.3.1.8-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="emulator_core"> +<section id="section-3.3.1.9"> + <h5 id="name-emulator_core-packet-2"> +<a href="#section-3.3.1.9" class="section-number selfRef">3.3.1.9. </a><a href="#name-emulator_core-packet-2" class="section-name selfRef">EMULATOR_CORE Packet</a> + </h5> +<p id="section-3.3.1.9-1">EMULATOR_CORE packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.1.9-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.1.9-2"> +<pre> + 0... + +==========+ + | Core (S) | + +==========+ + + Core (String) [PLEN octets] +</pre><a href="#section-3.3.1.9-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.1.9-3"> + <dt id="section-3.3.1.9-3.1"><strong>Core</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.9-3.2">Core of the emulator used to play the TAS movie while dumping controller inputs (example: "NESHawk", "Gambatte").<a href="#section-3.3.1.9-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.9-3.3"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.9-3.4">Length of the packet payload<a href="#section-3.3.1.9-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="tas_last_modified"> +<section id="section-3.3.1.10"> + <h5 id="name-tas_last_modified-packet-2"> +<a href="#section-3.3.1.10" class="section-number selfRef">3.3.1.10. </a><a href="#name-tas_last_modified-packet-2" class="section-name selfRef">TAS_LAST_MODIFIED Packet</a> + </h5> +<p id="section-3.3.1.10-1">TAS_LAST_MODIFIED packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.1.10-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.1.10-2"> +<pre> + 0 1 2 3 4 5 6 7 + +--+--+--+--+--+--+--+--+ + | Unix Timestamp (I) | + +--+--+--+--+--+--+--+--+ + + Unix Timestamp (Signed Integer) [8 octets] +</pre><a href="#section-3.3.1.10-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.1.10-3"> + <dt id="section-3.3.1.10-3.1"><strong>Unix Timestamp</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.10-3.2">64-bit Unix timestamp of when the TAS movie was last modified.<a href="#section-3.3.1.10-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="dump_created"> +<section id="section-3.3.1.11"> + <h5 id="name-dump_created-packet-2"> +<a href="#section-3.3.1.11" class="section-number selfRef">3.3.1.11. </a><a href="#name-dump_created-packet-2" class="section-name selfRef">DUMP_CREATED Packet</a> + </h5> +<p id="section-3.3.1.11-1">DUMP_CREATED packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.1.11-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.1.11-2"> +<pre> + 0 1 2 3 4 5 6 7 + +--+--+--+--+--+--+--+--+ + | Unix Timestamp (I) | + +--+--+--+--+--+--+--+--+ + + Unix Timestamp (Signed Integer) [8 octets] +</pre><a href="#section-3.3.1.11-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.1.11-3"> + <dt id="section-3.3.1.11-3.1"><strong>Unix Timestamp</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.11-3.2">64-bit Unix timestamp of when the <strong>TASD</strong> file was created.<a href="#section-3.3.1.11-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="dump_last_modified"> +<section id="section-3.3.1.12"> + <h5 id="name-dump_last_modified-packet-2"> +<a href="#section-3.3.1.12" class="section-number selfRef">3.3.1.12. </a><a href="#name-dump_last_modified-packet-2" class="section-name selfRef">DUMP_LAST_MODIFIED Packet</a> + </h5> +<p id="section-3.3.1.12-1">DUMP_LAST_MODIFIED packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.1.12-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.1.12-2"> +<pre> + 0 1 2 3 4 5 6 7 + +--+--+--+--+--+--+--+--+ + | Unix Timestamp (I) | + +--+--+--+--+--+--+--+--+ + + Unix Timestamp (Signed Integer) [8 octets] +</pre><a href="#section-3.3.1.12-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.1.12-3"> + <dt id="section-3.3.1.12-3.1"><strong>Unix Timestamp</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.12-3.2">64-bit Unix timestamp of when the <strong>TASD</strong> file was last modified.<a href="#section-3.3.1.12-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="total_frames"> +<section id="section-3.3.1.13"> + <h5 id="name-total_frames-packet-2"> +<a href="#section-3.3.1.13" class="section-number selfRef">3.3.1.13. </a><a href="#name-total_frames-packet-2" class="section-name selfRef">TOTAL_FRAMES Packet</a> + </h5> +<p id="section-3.3.1.13-1">TOTAL_FRAMES packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.1.13-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.1.13-2"> +<pre> + 0 1 2 3 + +---+---+---+---+ + | Frames (N) | + +---+---+---+---+ + + Frames (Unsigned Integer) [4 octets] +</pre><a href="#section-3.3.1.13-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.1.13-3"> + <dt id="section-3.3.1.13-3.1"><strong>Frames</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.13-3.2">Total number of frames of the TAS movie.<a href="#section-3.3.1.13-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="rerecords"> +<section id="section-3.3.1.14"> + <h5 id="name-rerecords-packet-2"> +<a href="#section-3.3.1.14" class="section-number selfRef">3.3.1.14. </a><a href="#name-rerecords-packet-2" class="section-name selfRef">RERECORDS Packet</a> + </h5> +<p id="section-3.3.1.14-1">RERECORDS packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.1.14-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.1.14-2"> +<pre> + 0 1 2 3 + +---+---+---+---+ + | Rerecords (N) | + +---+---+---+---+ + + Rerecords (Unsigned Integer) [4 octets] +</pre><a href="#section-3.3.1.14-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.1.14-3"> + <dt id="section-3.3.1.14-3.1"><strong>Rerecords</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.14-3.2">Total number of rerecords of the TAS movie.<a href="#section-3.3.1.14-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="source_link"> +<section id="section-3.3.1.15"> + <h5 id="name-source_link-packet-2"> +<a href="#section-3.3.1.15" class="section-number selfRef">3.3.1.15. </a><a href="#name-source_link-packet-2" class="section-name selfRef">SOURCE_LINK Packet</a> + </h5> +<p id="section-3.3.1.15-1">SOURCE_LINK packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.1.15-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.1.15-2"> +<pre> + 0... + +==========+ + | Link (S) | + +==========+ + + Link (String) [PLEN octets] +</pre><a href="#section-3.3.1.15-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.1.15-3"> + <dt id="section-3.3.1.15-3.1"><strong>Link</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.15-3.2">URL that points to the TAS movie or submission (example: "https://tasvideos.org/4567M").<a href="#section-3.3.1.15-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.15-3.3"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.15-3.4">Length of the packet payload.<a href="#section-3.3.1.15-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="blank_frames"> +<section id="section-3.3.1.16"> + <h5 id="name-blank_frames-packet-2"> +<a href="#section-3.3.1.16" class="section-number selfRef">3.3.1.16. </a><a href="#name-blank_frames-packet-2" class="section-name selfRef">BLANK_FRAMES Packet</a> + </h5> +<p id="section-3.3.1.16-1">BLANK_FRAMES packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.1.16-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.1.16-2"> +<pre> + 0 1 + +------+------+ + | Frames (I) | + +------+------+ + + Frames (Signed Integer) [2 octets] +</pre><a href="#section-3.3.1.16-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.1.16-3"> + <dt id="section-3.3.1.16-3.1"><strong>Frames</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.16-3.2">Number of blank frames (inputs where no buttons are being pressed) needed at the beginning of a TAS console replay of the TAS movie. If <strong>Frames</strong> is a negative value, the value of <strong>Frames</strong> amount of inputs of the TAS console replay of the TAS movie should be removed.<a href="#section-3.3.1.16-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="verified"> +<section id="section-3.3.1.17"> + <h5 id="name-verified-packet-2"> +<a href="#section-3.3.1.17" class="section-number selfRef">3.3.1.17. </a><a href="#name-verified-packet-2" class="section-name selfRef">VERIFIED Packet</a> + </h5> +<p id="section-3.3.1.17-1">VERIFIED packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.1.17-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.1.17-2"> +<pre> + 0 + +--------------+ + | Verified (B) | + +--------------+ + + Verified (Boolean) [1 octet] +</pre><a href="#section-3.3.1.17-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.1.17-3"> + <dt id="section-3.3.1.17-3.1"><strong>Verified</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.17-3.2">Boolean value that is <strong>TRUE</strong> if the <strong>TASD</strong> file has been successfully console verified and <strong>FALSE</strong> if it has not been verified.<a href="#section-3.3.1.17-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="memory_init"> +<section id="section-3.3.1.18"> + <h5 id="name-memory_init-packet-2"> +<a href="#section-3.3.1.18" class="section-number selfRef">3.3.1.18. </a><a href="#name-memory_init-packet-2" class="section-name selfRef">MEMORY_INIT Packet</a> + </h5> +<p id="section-3.3.1.18-1">MEMORY_INIT packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.1.18-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.1.18-2"> +<pre> + 0 1 2 3 + +---------------+------+------+--------------+ + | Data Type (A) | Device (A) | Required (B) | ... + +---------------+------+------+--------------+ + 4 5... 6... + +----------+==========+==========+ + | NLEN (N) | Name (S) | Data (A) | + +----------+==========+==========+ + + Data Type (Binary Data): [1 octet] + [01] - No Initialization Required + [02] - All [00] + [03] - All [FF] + [04] - [00 00 00 00 FF FF FF FF] Repeating + [05] - Random + [FF] - Custom + Device (Binary Data): [2 octets] + [01 01] - NES CPU RAM + [01 02] - NES Cartridge Save Data + [02 01] - SNES CPU RAM + [02 02] - SNES Cartridge Save Data + [05 01] - GB CPU RAM + [05 02] - GB Cartridge Save Data + [06 01] - GBC CPU RAM + [06 02] - GBC Cartridge Save Data + [07 01] - GBA CPU RAM + [07 02] - GBA Cartridge Save Data + [08 01] - Genesis CPU RAM + [08 02] - Genesis Cartridge Save Data + [09 01] - A2600 CPU RAM + [09 02] - A2600 Cartridge Save Data + [FF FF] - Custom/Other Device + Required (Boolean) [1 octet] + NLEN (Unsigned Integer) [1 octet] + Name (String) [NLEN octets] + Data (Binary Data) [PLEN - NLEN - + 4 octets] +</pre><a href="#section-3.3.1.18-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.1.18-3"> + <dt id="section-3.3.1.18-3.1"><strong>Data Type</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.18-3.2">Content type of initial memory. If <strong>Type</strong> is not <code>[FF]</code>, <strong>Data</strong> <span class="bcp14">SHOULD</span> be empty (0 octet length binary data).<a href="#section-3.3.1.18-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.18-3.3"><strong>Device</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.18-3.4">Device/Location that is to have memory initialized.<a href="#section-3.3.1.18-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.18-3.5"><strong>Required</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.18-3.6">Boolean value that is <strong>TRUE</strong> if this memory initialization data is known to be required and <strong>FALSE</strong> if the memory initialization data is not known to be required.<a href="#section-3.3.1.18-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.18-3.7"><strong>NLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.18-3.8">Length of <strong>Name</strong><a href="#section-3.3.1.18-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.18-3.9"><strong>Name</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.18-3.10">Label for the memory initialization data (example: "CPU RAM", "SAVE RAM"). If <strong>Device</strong> is <code>[FF FF]</code>, <strong>Name</strong> <span class="bcp14">SHOULD NOT</span> be empty (0 octet length string).<a href="#section-3.3.1.18-3.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.18-3.11"><strong>Data</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.18-3.12">Raw memory initialization data. If <strong>Data Type</strong> is not <code>[FF]</code>, <strong>Data</strong> <span class="bcp14">SHOULD</span> be empty (0 octet length binary data).<a href="#section-3.3.1.18-3.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.18-3.13"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.18-3.14">Length of the packet payload.<a href="#section-3.3.1.18-3.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="game_identifier"> +<section id="section-3.3.1.19"> + <h5 id="name-game_identifier-packet-2"> +<a href="#section-3.3.1.19" class="section-number selfRef">3.3.1.19. </a><a href="#name-game_identifier-packet-2" class="section-name selfRef">GAME_IDENTIFIER Packet</a> + </h5> +<p id="section-3.3.1.19-1">GAME_IDENTIFIER packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.1.19-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.1.19-2"> +<pre> + 0 1 2... + +----------+----------+================+ + | Type (A) | Base (A) | Identifier (A) | + +----------+----------+================+ + + Type (Binary Data): [1 octet] + [01] - CRC-8 Checksum + [02] - CRC-16 Checksum + [03] - CRC-32 Checksum + [04] - MD5 Hash + [05] - SHA1 Hash + [06] - SHA224 Hash + [07] - SHA256 Hash + [08] - SHA384 Hash + [09] - SHA512 Hash + [0A] - SHA512/224 Hash + [0B] - SHA512/256 Hash + [0C] - SHA3-224 Hash + [0D] - SHA3-256 Hash + [0E] - SHA3-384 Hash + [0F] - SHA3-512 Hash + [10] - SHAKE-128 Hash + [11] - SHAKE-256 Hash + [FF] - Other + Base (Binary Data): [1 octet] + [01] - Raw Binary + [02] - Case Insensitive Base 16 (Hex) - RFC 4648 + [03] - Case Insensitive Base 32 - RFC 4648 + [04] - Base 64 - RFC 4648 + [FF] - Other + Identifier (Binary Data) [PLEN - 2 octets] +</pre><a href="#section-3.3.1.19-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.1.19-3"> + <dt id="section-3.3.1.19-3.1"><strong>Type</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.19-3.2">Hash, checksum, or identifier algorithm <strong>Identifier</strong> is using.<a href="#section-3.3.1.19-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.19-3.3"><strong>Base</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.19-3.4">Describes the data encoding of <strong>Identifier</strong>.<a href="#section-3.3.1.19-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.19-3.5"><strong>Identifier</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.19-3.6">Game hash, checksum, or identifier data.<a href="#section-3.3.1.19-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.19-3.7"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.19-3.8">Length of the packet payload<a href="#section-3.3.1.19-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="movie_license"> +<section id="section-3.3.1.20"> + <h5 id="name-movie_license-packet-2"> +<a href="#section-3.3.1.20" class="section-number selfRef">3.3.1.20. </a><a href="#name-movie_license-packet-2" class="section-name selfRef">MOVIE_LICENSE Packet</a> + </h5> +<p id="section-3.3.1.20-1">MOVIE_LICENSE packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.1.20-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.1.20-2"> +<pre> + 0 + +=============+ + | License (S) | + +=============+ + + License (String) [PLEN octet] +</pre><a href="#section-3.3.1.20-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.1.20-3"> + <dt id="section-3.3.1.20-3.1"><strong>License</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.20-3.2">License information for the TAS movie (example: "Creative Commons Attribution 2.0").<a href="#section-3.3.1.20-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.20-3.3"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.20-3.4">Length of the packet payload.<a href="#section-3.3.1.20-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="movie_file"> +<section id="section-3.3.1.21"> + <h5 id="name-movie_file-packet-2"> +<a href="#section-3.3.1.21" class="section-number selfRef">3.3.1.21. </a><a href="#name-movie_file-packet-2" class="section-name selfRef">MOVIE_FILE Packet</a> + </h5> +<p id="section-3.3.1.21-1">MOVIE_FILE packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.1.21-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.1.21-2"> +<pre> + 0 1... 1+NLEN... + +----------+==========+=============+ + | NLEN (N) | Name (S) | Data (A) | + +----------+==========+=============+ + + NLEN (Unsigned Integer) [1 octet] + Name (String) [NLEN + 1 octets] + Data (Binary Data) [PLEN - NLEN - + 1 octets] +</pre><a href="#section-3.3.1.21-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.1.21-3"> + <dt id="section-3.3.1.21-3.1"><strong>NLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.21-3.2">Length of <strong>Name</strong>.<a href="#section-3.3.1.21-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.21-3.3"><strong>Name</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.21-3.4">Name of the TAS movie (<span class="bcp14">RECOMMENDED</span> to use TAS movie file name, for example: "100thcoinv2-smb3j-geg.bk2").<a href="#section-3.3.1.21-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.21-3.5"><strong>Data</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.21-3.6">TAS movie file data/content.<a href="#section-3.3.1.21-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.21-3.7"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.21-3.8">Length of the packet payload.<a href="#section-3.3.1.21-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="port_controller"> +<section id="section-3.3.1.22"> + <h5 id="name-port_controller-packet-2"> +<a href="#section-3.3.1.22" class="section-number selfRef">3.3.1.22. </a><a href="#name-port_controller-packet-2" class="section-name selfRef">PORT_CONTROLLER Packet</a> + </h5> +<p id="section-3.3.1.22-1">PORT_CONTROLLER packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.1.22-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.1.22-2"> +<pre> + 0 1 2 + +----------+-----+-----+ + | Port (N) | Type (A) | + +----------+-----+-----+ + + Port (Unsigned Integer) [1 octet] + Type (Binary Data): [2 octets] + [01 01] - NES Standard Controller + [01 02] - NES Four Score + [01 03] - (RESERVED) NES Zapper + [01 04] - (RESERVED) NES Power Pad + [01 05] - (RESERVED) Famicom Family BASIC Keyboard + [02 01] - SNES Standard Controller + [02 02] - SNES Super Multitap + [02 03] - SNES Mouse + [02 04] - (RESERVED) SNES Superscope + [03 01] - N64 Standard Controller + [03 02] - N64 Standard Controller with Rumble Pak + [03 03] - N64 Standard Controller with Controller Pak + [03 04] - N64 Standard Controller with Transfer Pak + [03 05] - N64 Mouse + [03 06] - (RESERVED) N64 Voice Recognition Unit (VRU) + [03 07] - (RESERVED) N64 RandNet Keyboard + [03 08] - N64 Densha de Go + [04 01] - GC Standard Controller + [04 02] - (RESERVED) GC Keyboard + [05 01] - GB Gamepad + [06 01] - GBC Gamepad + [07 01] - GBA Gamepad + [08 01] - Genesis (Mega Drive) 3-Button + [08 02] - Genesis (Mega Drive) 6-Button + [09 01] - A2600 Joystick + [09 02] - (RESERVED) A2600 Paddle + [09 03] - A2600 Keyboard Controller + [FF FF] - Other/Unspecified +</pre><a href="#section-3.3.1.22-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.1.22-3"> + <dt id="section-3.3.1.22-3.1"><strong>Port</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.22-3.2">Controller port number (<strong>Port</strong> number <span class="bcp14">MUST</span> be <strong>1-indexed</strong>).<a href="#section-3.3.1.22-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.1.22-3.3"><strong>Type</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.1.22-3.4">Specifies the controller type connected to the <strong>Port</strong>. <strong>(RESERVED)</strong> specifies that the controller type is not described in this document, but the byte values are reserved for a later version of the <strong>TASD</strong> file format protocol. Input formats for specific controller types are described in (<a href="#controller_inputs" class="auto internal xref">Section 4</a>).<a href="#section-3.3.1.22-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +</section> +<section id="section-3.3.2"> + <h4 id="name-nes-specific-key-payload-for"> +<a href="#section-3.3.2" class="section-number selfRef">3.3.2. </a><a href="#name-nes-specific-key-payload-for" class="section-name selfRef">NES Specific Key Payload Formats</a> + </h4> +<div id="nes_latch_filter"> +<section id="section-3.3.2.1"> + <h5 id="name-nes_latch_filter-packet-2"> +<a href="#section-3.3.2.1" class="section-number selfRef">3.3.2.1. </a><a href="#name-nes_latch_filter-packet-2" class="section-name selfRef">NES_LATCH_FILTER Packet</a> + </h5> +<p id="section-3.3.2.1-1">NES_LATCH_FILTER packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.2.1-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.2.1-2"> +<pre> + 0 1 + +-----+-----+ + | Time (N) | + +-----+-----+ + + Time (Unsigned Integer) [2 octets] +</pre><a href="#section-3.3.2.1-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.2.1-3"> + <dt id="section-3.3.2.1-3.1"><strong>Time</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.2.1-3.2">Latch filter length of time in microseconds.<a href="#section-3.3.2.1-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="nes_clock_filter"> +<section id="section-3.3.2.2"> + <h5 id="name-nes_clock_filter-packet-2"> +<a href="#section-3.3.2.2" class="section-number selfRef">3.3.2.2. </a><a href="#name-nes_clock_filter-packet-2" class="section-name selfRef">NES_CLOCK_FILTER Packet</a> + </h5> +<p id="section-3.3.2.2-1">NES_CLOCK_FILTER packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.2.2-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.2.2-2"> +<pre> + 0 + +----------+ + | Time (N) | + +----------+ + + Time (Unsigned Integer) [1 octet] +</pre><a href="#section-3.3.2.2-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.2.2-3"> + <dt id="section-3.3.2.2-3.1"><strong>Time</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.2.2-3.2">Clock filter length of time in tenths of a microsecond (units of 0.1 microseconds or 100 nanoseconds).<a href="#section-3.3.2.2-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="nes_overread"> +<section id="section-3.3.2.3"> + <h5 id="name-nes_overread-packet-2"> +<a href="#section-3.3.2.3" class="section-number selfRef">3.3.2.3. </a><a href="#name-nes_overread-packet-2" class="section-name selfRef">NES_OVERREAD Packet</a> + </h5> +<p id="section-3.3.2.3-1">NES_OVERREAD packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.2.3-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.2.3-2"> +<pre> + 0 + +----------+ + | High (B) | + +----------+ + + High (Boolean) [1 octet] +</pre><a href="#section-3.3.2.3-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.2.3-3"> + <dt id="section-3.3.2.3-3.1"><strong>High</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.2.3-3.2">Boolean value that is <strong>TRUE</strong> if overread bits are set to high and <strong>FALSE</strong> if overread bits are set to low.<a href="#section-3.3.2.3-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="nes_game_genie_code"> +<section id="section-3.3.2.4"> + <h5 id="name-nes_game_genie_code-packet-2"> +<a href="#section-3.3.2.4" class="section-number selfRef">3.3.2.4. </a><a href="#name-nes_game_genie_code-packet-2" class="section-name selfRef">NES_GAME_GENIE_CODE Packet</a> + </h5> +<p id="section-3.3.2.4-1">NES_GAME_GENIE_CODE packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.2.4-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.2.4-2"> +<pre> + 0... + +==========+ + | Code (S) | + +==========+ + + Code (String) [PLEN octets] +</pre><a href="#section-3.3.2.4-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.2.4-3"> + <dt id="section-3.3.2.4-3.1"><strong>Code</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.2.4-3.2">Game Genie code (example: "AATOZA").<a href="#section-3.3.2.4-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.2.4-3.3"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.2.4-3.4">Length of the packet payload.<a href="#section-3.3.2.4-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +</section> +<section id="section-3.3.3"> + <h4 id="name-snes-specific-key-payload-fo"> +<a href="#section-3.3.3" class="section-number selfRef">3.3.3. </a><a href="#name-snes-specific-key-payload-fo" class="section-name selfRef">SNES Specific Key Payload Formats</a> + </h4> +<div id="snes_clock_filter"> +<section id="section-3.3.3.1"> + <h5 id="name-snes_clock_filter-packet-2"> +<a href="#section-3.3.3.1" class="section-number selfRef">3.3.3.1. </a><a href="#name-snes_clock_filter-packet-2" class="section-name selfRef">SNES_CLOCK_FILTER Packet</a> + </h5> +<p id="section-3.3.3.1-1">SNES_CLOCK_FILTER packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.3.1-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.3.1-2"> +<pre> + 0 + +----------+ + | Time (N) | + +----------+ + + Time (Unsigned Integer) [1 octet] +</pre><a href="#section-3.3.3.1-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.3.1-3"> + <dt id="section-3.3.3.1-3.1"><strong>Time</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.3.1-3.2">Clock filter length of time in tenths of a microsecond (units of 0.1 microseconds or 100 nanoseconds).<a href="#section-3.3.3.1-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="snes_overread"> +<section id="section-3.3.3.2"> + <h5 id="name-snes_overread-packet-2"> +<a href="#section-3.3.3.2" class="section-number selfRef">3.3.3.2. </a><a href="#name-snes_overread-packet-2" class="section-name selfRef">SNES_OVERREAD Packet</a> + </h5> +<p id="section-3.3.3.2-1">SNES_OVERREAD packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.3.2-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.3.2-2"> +<pre> + 0 + +----------+ + | High (B) | + +----------+ + + High (Boolean) [1 octet] +</pre><a href="#section-3.3.3.2-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.3.2-3"> + <dt id="section-3.3.3.2-3.1"><strong>High</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.3.2-3.2">Boolean value that is <strong>TRUE</strong> if overread bits are set to high and <strong>FALSE</strong> if overread bits are set to low.<a href="#section-3.3.3.2-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="snes_game_genie_code"> +<section id="section-3.3.3.3"> + <h5 id="name-snes_game_genie_code-packet-2"> +<a href="#section-3.3.3.3" class="section-number selfRef">3.3.3.3. </a><a href="#name-snes_game_genie_code-packet-2" class="section-name selfRef">SNES_GAME_GENIE_CODE Packet</a> + </h5> +<p id="section-3.3.3.3-1">SNES_GAME_GENIE_CODE packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.3.3-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.3.3-2"> +<pre> + 0... + +==========+ + | Code (S) | + +==========+ + + Code (String) [PLEN octets] +</pre><a href="#section-3.3.3.3-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.3.3-3"> + <dt id="section-3.3.3.3-3.1"><strong>Code</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.3.3-3.2">Game Genie code (example: "DDB4-6F07").<a href="#section-3.3.3.3-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.3.3-3.3"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.3.3-3.4">Length of the packet payload.<a href="#section-3.3.3.3-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="snes_latch_train"> +<section id="section-3.3.3.4"> + <h5 id="name-snes_latch_train-packet-rese"> +<a href="#section-3.3.3.4" class="section-number selfRef">3.3.3.4. </a><a href="#name-snes_latch_train-packet-rese" class="section-name selfRef">SNES_LATCH_TRAIN Packet (RESERVED)</a> + </h5> +<p id="section-3.3.3.4-1">This packet type is not yet designed and is intended to be described in the future.<a href="#section-3.3.3.4-1" class="pilcrow">¶</a></p> +</section> +</div> +</section> +<section id="section-3.3.4"> + <h4 id="name-genesis-specific-key-payload"> +<a href="#section-3.3.4" class="section-number selfRef">3.3.4. </a><a href="#name-genesis-specific-key-payload" class="section-name selfRef">Genesis Specific Key Payload Formats</a> + </h4> +<div id="genesis_game_genie_code"> +<section id="section-3.3.4.1"> + <h5 id="name-genesis_game_genie_code-pack"> +<a href="#section-3.3.4.1" class="section-number selfRef">3.3.4.1. </a><a href="#name-genesis_game_genie_code-pack" class="section-name selfRef">GENESIS_GAME_GENIE_CODE Packet</a> + </h5> +<p id="section-3.3.4.1-1">GENESIS_GAME_GENIE_CODE packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.4.1-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.4.1-2"> +<pre> + 0... + +==========+ + | Code (S) | + +==========+ + + Code (String) [PLEN octets] +</pre><a href="#section-3.3.4.1-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.4.1-3"> + <dt id="section-3.3.4.1-3.1"><strong>Code</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.4.1-3.2">Game Genie code (example: "ATBT-AA32").<a href="#section-3.3.4.1-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.4.1-3.3"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.4.1-3.4">Length of the packet payload.<a href="#section-3.3.4.1-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +</section> +<section id="section-3.3.5"> + <h4 id="name-input-frame-timing-key-paylo"> +<a href="#section-3.3.5" class="section-number selfRef">3.3.5. </a><a href="#name-input-frame-timing-key-paylo" class="section-name selfRef">Input Frame/Timing Key Payload Formats</a> + </h4> +<div id="input_chunk"> +<section id="section-3.3.5.1"> + <h5 id="name-input_chunk-packet-2"> +<a href="#section-3.3.5.1" class="section-number selfRef">3.3.5.1. </a><a href="#name-input_chunk-packet-2" class="section-name selfRef">INPUT_CHUNK Packet</a> + </h5> +<p id="section-3.3.5.1-1">INPUT_CHUNK packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.5.1-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.5.1-2"> +<pre> + 0 1... + +----------+============+ + | Port (N) | Inputs (A) | + +----------+============+ + + Port (Unsigned Integer) [1 octet] + Inputs (Binary Data) [PLEN - 1 octets] +</pre><a href="#section-3.3.5.1-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.5.1-3"> + <dt id="section-3.3.5.1-3.1"><strong>Port</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.5.1-3.2">Controller port number (<strong>Port</strong> number <span class="bcp14">MUST</span> be <strong>1-indexed</strong>).<a href="#section-3.3.5.1-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.5.1-3.3"><strong>Inputs</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.5.1-3.4">Controller input data for controller on <strong>Port</strong>. Input values are usually in native format (usually active-low). Input formats for specific controller types are described in (<a href="#controller_inputs" class="auto internal xref">Section 4</a>).<a href="#section-3.3.5.1-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.5.1-3.5"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.5.1-3.6">Length of the packet payload.<a href="#section-3.3.5.1-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-3.3.5.1-4">A single INPUT_CHUNK packet <span class="bcp14">MAY</span> contain up to every input of a TAS movie console replay and <span class="bcp14">MAY</span> contain fewer than every input of a TAS movie console replay. If there are more than 1 INPUT_CHUNK packets, the INPUT_CHUNK packets <span class="bcp14">MUST</span> be in order of the TAS movie console replay inputs, where earlier inputs in the TAS movie console replay are earlier in the <strong>TASD</strong> file and later inputs in the TAS movie console replay are later in the <strong>TASD</strong> file.<a href="#section-3.3.5.1-4" class="pilcrow">¶</a></p> +</section> +</div> +<div id="input_moment"> +<section id="section-3.3.5.2"> + <h5 id="name-input_moment-packet-2"> +<a href="#section-3.3.5.2" class="section-number selfRef">3.3.5.2. </a><a href="#name-input_moment-packet-2" class="section-name selfRef">INPUT_MOMENT Packet</a> + </h5> +<p id="section-3.3.5.2-1">INPUT_MOMENT packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.5.2-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.5.2-2"> +<pre> + 0 1 2 3 4 5 7 8 9 10 + +----------+----------------+--+--+--+--+--+--+--+--+ + | Port (N) | Index Type (A) | Index (N) | ... + +----------+----------------+--+--+--+--+--+--+--+--+ + 11... + +============+ + | Inputs (B) | + +============+ + + Port (Unsigned Integer) [1 octet] + Index Type (Binary Data): [1 octet] + [01] - Frame + [02] - Cycle Count + [03] - Milliseconds + [04] - Microseconds * 10 + Index (Unsigned Integer) [8 octets] + Inputs (Binary Data) [PLEN - 10 octets] + +</pre><a href="#section-3.3.5.2-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.5.2-3"> + <dt id="section-3.3.5.2-3.1"><strong>Port</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.5.2-3.2">Controller port number (<strong>Port</strong> number <span class="bcp14">MUST</span> be <strong>1-indexed</strong>).<a href="#section-3.3.5.2-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.5.2-3.3"><strong>Type</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.5.2-3.4">Determines specific timing type for start of <strong>Inputs</strong>.<a href="#section-3.3.5.2-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.5.2-3.5"><strong>Index</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.5.2-3.6">Time value to start sending <strong>Inputs</strong> data.<a href="#section-3.3.5.2-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.5.2-3.7"><strong>Inputs</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.5.2-3.8">Controller input data for controller on <strong>Port</strong>. Input values are usually in native format (usually active-low). Input formats for specific controller types are described in (<a href="#controller_inputs" class="auto internal xref">Section 4</a>).<a href="#section-3.3.5.2-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.5.2-3.9"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.5.2-3.10">Length of the packet payload.<a href="#section-3.3.5.2-3.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="transition"> +<section id="section-3.3.5.3"> + <h5 id="name-transition-packet-2"> +<a href="#section-3.3.5.3" class="section-number selfRef">3.3.5.3. </a><a href="#name-transition-packet-2" class="section-name selfRef">TRANSITION Packet</a> + </h5> +<p id="section-3.3.5.3-1">TRANSITION packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.5.3-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.5.3-2"> +<pre> + 0 1 2 3 4 5 6 7 8 9 + +----------------+--+--+--+--+--+--+--+--+----------+ + | Index Type (A) | Index (N) | Type (A) | ... + +----------------+--+--+--+--+--+--+--+--+----------+ + 10... + +============+ + | Packet (A) | + +============+ + + Index Type (Binary Data): [1 octet] + [01] - Frame + [02] - Cycle Count + [03] - Milliseconds + [04] - Microseconds * 10 + [05] - INPUT_CHUNK Index + Index (Unsigned Integer) [8 octets] + Type (Binary Data): [1 octet] + [01] - Soft Reset + [02] - Power Reset + [03] - Restart TASD File + [FF] - Packet Derived + Inner Packet (Binary Data) [PLEN - 10 octets] +</pre><a href="#section-3.3.5.3-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.5.3-3"> + <dt id="section-3.3.5.3-3.1"><strong>Input Type</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.5.3-3.2">Determines specific timing type for start of transition.<a href="#section-3.3.5.3-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.5.3-3.3"><strong>Index</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.5.3-3.4">Time or offset value to start transition.<a href="#section-3.3.5.3-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.5.3-3.5"><strong>Type</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.5.3-3.6">Type of transition. If <strong>Type</strong> is <code>[FF]</code>, the transition action will be interpreting a <strong>TASD</strong> packet.<a href="#section-3.3.5.3-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.5.3-3.7"><strong>Inner Packet</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.5.3-3.8">If <strong>Type</strong> is <code>[FF]</code>, <strong>Inner Packet</strong> <span class="bcp14">SHOULD</span> be a <strong>TASD</strong> packet. <strong>Inner Packet</strong> <span class="bcp14">MUST NOT</span> be a <strong>INPUT_CHUNK</strong>, <strong>INPUT_MOMENT</strong>, <strong>TRANSITION</strong>, <strong>LAG_FRAME_CHUNK</strong>, or <strong>MOVIE_TRANSITION</strong> packet.<a href="#section-3.3.5.3-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.5.3-3.9"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.5.3-3.10">Length of the packet payload (Not <strong>Inner Packet</strong> length).<a href="#section-3.3.5.3-3.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="lag_frame_chunk"> +<section id="section-3.3.5.4"> + <h5 id="name-lag_frame_chunk-packet-2"> +<a href="#section-3.3.5.4" class="section-number selfRef">3.3.5.4. </a><a href="#name-lag_frame_chunk-packet-2" class="section-name selfRef">LAG_FRAME_CHUNK Packet</a> + </h5> +<p id="section-3.3.5.4-1">LAG_FRAME_CHUNK packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.5.4-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.5.4-2"> +<pre> + 0 1 2 3 4 5 6 7 + +----+----+----+----+--+--+--+--+ + | Movie Frame (N) | Count (N) | + +----+----+----+----+--+--+--+--+ + + Movie Frame (Unsigned Integer) [4 octets] + Count (Unsigned Integer) [4 octets] +</pre><a href="#section-3.3.5.4-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.5.4-3"> + <dt id="section-3.3.5.4-3.1"><strong>Movie Frame</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.5.4-3.2">Frame number of the TAS movie where Lag Frames start (<strong>Movie Frame</strong> MUST be <strong>0-indexed</strong>).<a href="#section-3.3.5.4-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.5.4-3.3"><strong>Count</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.5.4-3.4">Number of Lag Frames in a row starting from <strong>Movie Frame</strong>.<a href="#section-3.3.5.4-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="movie_transition"> +<section id="section-3.3.5.5"> + <h5 id="name-movie_transition-2"> +<a href="#section-3.3.5.5" class="section-number selfRef">3.3.5.5. </a><a href="#name-movie_transition-2" class="section-name selfRef">MOVIE_TRANSITION</a> + </h5> +<p id="section-3.3.5.5-1">MOVIE_TRANSITION packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.5.5-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.5.5-2"> +<pre> + 0 1 2 3 4 5... + +----+----+----+----+----------+==================+ + | Movie Frame (N) | Type (A) | Inner Packet (A) | + +----+----+----+----+----------+==================+ + + Movie Frame (Unsigned Integer) [4 octets] + Type (Binary Data): [1 octet] + [01] - Soft Reset + [02] - Power Reset + [03] - Restart TASD File + [FF] - Packet Derived + Inner Packet (Binary Data) [PLEN - 5 octets] +</pre><a href="#section-3.3.5.5-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.5.5-3"> + <dt id="section-3.3.5.5-3.1"><strong>Movie Frame</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.5.5-3.2">Frame number of the TAS movie (<strong>Movie Frame</strong> MUST be <strong>0-indexed</strong>).<a href="#section-3.3.5.5-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.5.5-3.3"><strong>Type</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.5.5-3.4">Type of transition. If <strong>Type</strong> is <code>[FF]</code>, the transition action will be interpreting a <strong>TASD</strong> packet.<a href="#section-3.3.5.5-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.5.5-3.5"><strong>Inner Packet</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.5.5-3.6">If <strong>Type</strong> is <code>[FF]</code>, <strong>Inner Packet</strong> <span class="bcp14">SHOULD</span> be a <strong>TASD</strong> packet. <strong>Inner Packet</strong> <span class="bcp14">MUST NOT</span> be a <strong>INPUT_CHUNK</strong>, <strong>INPUT_MOMENT</strong>, <strong>TRANSITION</strong>, <strong>LAG_FRAME_CHUNK</strong>, or <strong>MOVIE_TRANSITION</strong> packet.<a href="#section-3.3.5.5-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.5.5-3.7"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.5.5-3.8">Length of the packet payload (Not <strong>Inner Packet</strong> length).<a href="#section-3.3.5.5-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +</section> +<section id="section-3.3.6"> + <h4 id="name-extraneous-key-payload-forma"> +<a href="#section-3.3.6" class="section-number selfRef">3.3.6. </a><a href="#name-extraneous-key-payload-forma" class="section-name selfRef">Extraneous Key Payload Formats</a> + </h4> +<div id="comment"> +<section id="section-3.3.6.1"> + <h5 id="name-comment-packet-2"> +<a href="#section-3.3.6.1" class="section-number selfRef">3.3.6.1. </a><a href="#name-comment-packet-2" class="section-name selfRef">COMMENT Packet</a> + </h5> +<p id="section-3.3.6.1-1">COMMENT packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.6.1-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.6.1-2"> +<pre> + 0 + +=============+ + | Comment (S) | + +=============+ + + Comment (String) [PLEN octet] +</pre><a href="#section-3.3.6.1-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.6.1-3"> + <dt id="section-3.3.6.1-3.1"><strong>Comment</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.6.1-3.2">Comment text.<a href="#section-3.3.6.1-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.6.1-3.3"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.6.1-3.4">Length of the packet payload.<a href="#section-3.3.6.1-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="experimental"> +<section id="section-3.3.6.2"> + <h5 id="name-experimental-packet-2"> +<a href="#section-3.3.6.2" class="section-number selfRef">3.3.6.2. </a><a href="#name-experimental-packet-2" class="section-name selfRef">EXPERIMENTAL Packet</a> + </h5> +<p id="section-3.3.6.2-1">EXPERIMENTAL packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.6.2-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.6.2-2"> +<pre> + 0... + +==================+ + | Experimental (B) | + +==================+ + + Experimental (Boolean) [PLEN octet] +</pre><a href="#section-3.3.6.2-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.6.2-3"> + <dt id="section-3.3.6.2-3.1"><strong>Experimental</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.6.2-3.2">Boolean data that is <strong>TRUE</strong> if the TASD file is using experimental features (Currently SHOULD be TRUE).<a href="#section-3.3.6.2-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.6.2-3.3"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.6.2-3.4">Length of the packet payload.<a href="#section-3.3.6.2-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +<div id="unspecified"> +<section id="section-3.3.6.3"> + <h5 id="name-unspecified-packet-2"> +<a href="#section-3.3.6.3" class="section-number selfRef">3.3.6.3. </a><a href="#name-unspecified-packet-2" class="section-name selfRef">UNSPECIFIED Packet</a> + </h5> +<p id="section-3.3.6.3-1">UNSPECIFIED packets <span class="bcp14">MUST</span> be in the following format:<a href="#section-3.3.6.3-1" class="pilcrow">¶</a></p> +<div class="alignLeft art-text artwork" id="section-3.3.6.3-2"> +<pre> + 0... + +======================+ + | Unspecified Data (A) | + +======================+ + + Unspecified Data (Binary Data) [PLEN octets] +</pre><a href="#section-3.3.6.3-2" class="pilcrow">¶</a> +</div> +<span class="break"></span><dl class="dlNewline" id="section-3.3.6.3-3"> + <dt id="section-3.3.6.3-3.1"><strong>Unspecified Data</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.6.3-3.2">Arbitrary data. Can be used for any data. Because this is unspecified data, there there is no guarantee any software to control a TAS replay device will support data in this packet type.<a href="#section-3.3.6.3-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-3.3.6.3-3.3"><strong>PLEN</strong></dt> + <dd style="margin-left: 1.5em" id="section-3.3.6.3-3.4">Length of the packet payload.<a href="#section-3.3.6.3-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</div> +</section> +</section> +</section> +<div id="controller_inputs"> +<section id="section-4"> + <h2 id="name-controller-input-formats-2"> +<a href="#section-4" class="section-number selfRef">4. </a><a href="#name-controller-input-formats-2" class="section-name selfRef">Controller Input Formats</a> + </h2> +<p id="section-4-1">A forward slash (<strong>/</strong>) is used to signify <strong>active low</strong>. As an example, if a bit is labeled as <strong>/A</strong>, the bit <span class="bcp14">MUST</span> be 0 if the A button is pressed and <span class="bcp14">MUST</span> be 1 if the A button is not pressed.<a href="#section-4-1" class="pilcrow">¶</a></p> +<p id="section-4-2">Multi-octet controller inputs are in little-endian order<a href="#section-4-2" class="pilcrow">¶</a></p> +<p id="section-4-3">Bit order for octets in controller inputs are high-order (MSB) (Most significant bit to least significant bit), so bit 7 <span class="bcp14">MUST</span> be the left-most bit of the octet and bit 0 <span class="bcp14">MUST</span> be the right-most bit of the octet.<a href="#section-4-3" class="pilcrow">¶</a></p> +<section id="section-4.1"> + <h3 id="name-nes-famicom-controller-types"> +<a href="#section-4.1" class="section-number selfRef">4.1. </a><a href="#name-nes-famicom-controller-types" class="section-name selfRef">NES/Famicom Controller Types</a> + </h3> +<section id="section-4.1.1"> + <h4 id="name-nes-standard-controller-2"> +<a href="#section-4.1.1" class="section-number selfRef">4.1.1. </a><a href="#name-nes-standard-controller-2" class="section-name selfRef">NES Standard Controller</a> + </h4> +<p id="section-4.1.1-1">Single Input Length: 1 Octet<a href="#section-4.1.1-1" class="pilcrow">¶</a></p> +<p id="section-4.1.1-2"><strong>Octet 0</strong><a href="#section-4.1.1-2" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.1.1-3"> + <dt id="section-4.1.1-3.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.1-3.2">/A<a href="#section-4.1.1-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.1-3.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.1-3.4">/B<a href="#section-4.1.1-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.1-3.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.1-3.6">/Select<a href="#section-4.1.1-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.1-3.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.1-3.8">/Start<a href="#section-4.1.1-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.1-3.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.1-3.10">/Up<a href="#section-4.1.1-3.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.1-3.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.1-3.12">/Down<a href="#section-4.1.1-3.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.1-3.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.1-3.14">/Left<a href="#section-4.1.1-3.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.1-3.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.1-3.16">/Right<a href="#section-4.1.1-3.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +<section id="section-4.1.2"> + <h4 id="name-nes-four-score-2"> +<a href="#section-4.1.2" class="section-number selfRef">4.1.2. </a><a href="#name-nes-four-score-2" class="section-name selfRef">NES Four Score</a> + </h4> +<p id="section-4.1.2-1">Single Input Length: 3 Octets<a href="#section-4.1.2-1" class="pilcrow">¶</a></p> +<p id="section-4.1.2-2"><strong>Octet 0</strong><a href="#section-4.1.2-2" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.1.2-3"> + <dt id="section-4.1.2-3.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-3.2">Controller N-1 /A<a href="#section-4.1.2-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.2-3.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-3.4">Controller N-1 /B<a href="#section-4.1.2-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.2-3.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-3.6">Controller N-1 /Select<a href="#section-4.1.2-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.2-3.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-3.8">Controller N-1 /Start<a href="#section-4.1.2-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.2-3.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-3.10">Controller N-1 /Up<a href="#section-4.1.2-3.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.2-3.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-3.12">Controller N-1 /Down<a href="#section-4.1.2-3.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.2-3.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-3.14">Controller N-1 /Left<a href="#section-4.1.2-3.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.2-3.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-3.16">Controller N-1 /Right<a href="#section-4.1.2-3.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.1.2-4"><strong>Octet 1</strong><a href="#section-4.1.2-4" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.1.2-5"> + <dt id="section-4.1.2-5.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-5.2">Controller N-2 /A<a href="#section-4.1.2-5.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.2-5.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-5.4">Controller N-2 /B<a href="#section-4.1.2-5.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.2-5.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-5.6">Controller N-2 /Select<a href="#section-4.1.2-5.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.2-5.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-5.8">Controller N-2 /Start<a href="#section-4.1.2-5.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.2-5.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-5.10">Controller N-2 /Up<a href="#section-4.1.2-5.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.2-5.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-5.12">Controller N-2 /Down<a href="#section-4.1.2-5.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.2-5.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-5.14">Controller N-2 /Left<a href="#section-4.1.2-5.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.2-5.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-5.16">Controller N-2 /Right<a href="#section-4.1.2-5.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.1.2-6"><strong>Octet 2</strong><a href="#section-4.1.2-6" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.1.2-7"> + <dt id="section-4.1.2-7.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-7.2">1<a href="#section-4.1.2-7.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.2-7.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-7.4">1<a href="#section-4.1.2-7.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.2-7.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-7.6">0 if Controller Port is 2, otherwise 1<a href="#section-4.1.2-7.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.2-7.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-7.8">0 if Controller Port is 1, otherwise 1<a href="#section-4.1.2-7.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.2-7.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-7.10">1<a href="#section-4.1.2-7.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.2-7.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-7.12">1<a href="#section-4.1.2-7.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.2-7.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-7.14">1<a href="#section-4.1.2-7.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.1.2-7.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.1.2-7.16">1<a href="#section-4.1.2-7.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.1.2-8"><strong>Controller N</strong> is the controller port number. The NES Four Score allows players 1 and 3 to input buttons on controller port 1 and players 2 and 4 to input buttons on controller port 2. <strong>Controller N-1</strong> on controller port 1 is <strong>Player 1</strong>, <strong>Controller N-2</strong> on controller port 1 is <strong>Player 3</strong>, <strong>Controller N-1</strong> on controller port 2 is <strong>Player 2</strong>, and <strong>Controller N-2</strong> on controller port 2 is <strong>Player 4</strong>.<a href="#section-4.1.2-8" class="pilcrow">¶</a></p> +</section> +</section> +<section id="section-4.2"> + <h3 id="name-snes-controller-types-2"> +<a href="#section-4.2" class="section-number selfRef">4.2. </a><a href="#name-snes-controller-types-2" class="section-name selfRef">SNES Controller Types</a> + </h3> +<section id="section-4.2.1"> + <h4 id="name-snes-standard-controller-2"> +<a href="#section-4.2.1" class="section-number selfRef">4.2.1. </a><a href="#name-snes-standard-controller-2" class="section-name selfRef">SNES Standard Controller</a> + </h4> +<p id="section-4.2.1-1">Single Input Length: 2 Octets<a href="#section-4.2.1-1" class="pilcrow">¶</a></p> +<p id="section-4.2.1-2"><strong>Octet 0</strong><a href="#section-4.2.1-2" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.2.1-3"> + <dt id="section-4.2.1-3.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.1-3.2">/B<a href="#section-4.2.1-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.1-3.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.1-3.4">/Y<a href="#section-4.2.1-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.1-3.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.1-3.6">/Select<a href="#section-4.2.1-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.1-3.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.1-3.8">/Start<a href="#section-4.2.1-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.1-3.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.1-3.10">/Up<a href="#section-4.2.1-3.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.1-3.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.1-3.12">/Down<a href="#section-4.2.1-3.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.1-3.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.1-3.14">/Left<a href="#section-4.2.1-3.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.1-3.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.1-3.16">/Right<a href="#section-4.2.1-3.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.2.1-4"><strong>Octet 1</strong><a href="#section-4.2.1-4" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.2.1-5"> + <dt id="section-4.2.1-5.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.1-5.2">/A<a href="#section-4.2.1-5.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.1-5.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.1-5.4">/X<a href="#section-4.2.1-5.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.1-5.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.1-5.6">/L<a href="#section-4.2.1-5.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.1-5.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.1-5.8">/R<a href="#section-4.2.1-5.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.1-5.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.1-5.10">1<a href="#section-4.2.1-5.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.1-5.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.1-5.12">1<a href="#section-4.2.1-5.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.1-5.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.1-5.14">1<a href="#section-4.2.1-5.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.1-5.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.1-5.16">1<a href="#section-4.2.1-5.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +<section id="section-4.2.2"> + <h4 id="name-snes-mouse-2"> +<a href="#section-4.2.2" class="section-number selfRef">4.2.2. </a><a href="#name-snes-mouse-2" class="section-name selfRef">SNES Mouse</a> + </h4> +<p id="section-4.2.2-1">Single Input Length: 4 Octets<a href="#section-4.2.2-1" class="pilcrow">¶</a></p> +<p id="section-4.2.2-2"><strong>Octet 0</strong><a href="#section-4.2.2-2" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.2.2-3"> + <dt id="section-4.2.2-3.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.2-3.2">1<a href="#section-4.2.2-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.2-3.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.2-3.4">1<a href="#section-4.2.2-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.2-3.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.2-3.6">1<a href="#section-4.2.2-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.2-3.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.2-3.8">1<a href="#section-4.2.2-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.2-3.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.2-3.10">1<a href="#section-4.2.2-3.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.2-3.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.2-3.12">1<a href="#section-4.2.2-3.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.2-3.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.2-3.14">1<a href="#section-4.2.2-3.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.2-3.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.2-3.16">1<a href="#section-4.2.2-3.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.2.2-4"><strong>Octet 1</strong><a href="#section-4.2.2-4" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.2.2-5"> + <dt id="section-4.2.2-5.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.2-5.2">/Right button<a href="#section-4.2.2-5.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.2-5.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.2-5.4">/Left button<a href="#section-4.2.2-5.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.2-5.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.2-5.6">Current sensitivity (0: high sensitivity; 1: low or medium sensitivity)<a href="#section-4.2.2-5.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.2-5.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.2-5.8">Current sensitivity (0: medium sensitivity; 1: low or high sensitivity)<a href="#section-4.2.2-5.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.2-5.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.2-5.10">1<a href="#section-4.2.2-5.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.2-5.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.2-5.12">1<a href="#section-4.2.2-5.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.2-5.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.2-5.14">1<a href="#section-4.2.2-5.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.2-5.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.2-5.16">0<a href="#section-4.2.2-5.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.2.2-6"><strong>Octet 2</strong><a href="#section-4.2.2-6" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.2.2-7"> + <dt id="section-4.2.2-7.1">Bits 7-1:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.2-7.2">/Vertical displacement since last read<a href="#section-4.2.2-7.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.2-7.3">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.2-7.4">Direction (0: up; 1: down)<a href="#section-4.2.2-7.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.2.2-8"><strong>Octet 3</strong><a href="#section-4.2.2-8" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.2.2-9"> + <dt id="section-4.2.2-9.1">Bits 7-1:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.2-9.2">/Horizontal displacement since last read<a href="#section-4.2.2-9.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.2.2-9.3">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.2.2-9.4">Direction (0: up; 1: down)<a href="#section-4.2.2-9.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</section> +<section id="section-4.3"> + <h3 id="name-n64-controller-types-2"> +<a href="#section-4.3" class="section-number selfRef">4.3. </a><a href="#name-n64-controller-types-2" class="section-name selfRef">N64 Controller Types</a> + </h3> +<section id="section-4.3.1"> + <h4 id="name-n64-standard-controller-2"> +<a href="#section-4.3.1" class="section-number selfRef">4.3.1. </a><a href="#name-n64-standard-controller-2" class="section-name selfRef">N64 Standard Controller</a> + </h4> +<p id="section-4.3.1-1">Single Input Length: 4 Octets<a href="#section-4.3.1-1" class="pilcrow">¶</a></p> +<p id="section-4.3.1-2"><strong>Octet 0</strong><a href="#section-4.3.1-2" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.1-3"> + <dt id="section-4.3.1-3.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.1-3.2">A<a href="#section-4.3.1-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.1-3.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.1-3.4">B<a href="#section-4.3.1-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.1-3.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.1-3.6">Z<a href="#section-4.3.1-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.1-3.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.1-3.8">Start<a href="#section-4.3.1-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.1-3.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.1-3.10">D-Pad Up<a href="#section-4.3.1-3.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.1-3.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.1-3.12">D-Pad Down<a href="#section-4.3.1-3.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.1-3.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.1-3.14">D-Pad Left<a href="#section-4.3.1-3.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.1-3.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.1-3.16">D-Pad Right<a href="#section-4.3.1-3.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.3.1-4"><strong>Octet 1</strong><a href="#section-4.3.1-4" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.1-5"> + <dt id="section-4.3.1-5.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.1-5.2">RST (special controller reset bit)<a href="#section-4.3.1-5.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.1-5.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.1-5.4">0<a href="#section-4.3.1-5.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.1-5.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.1-5.6">Left Trigger<a href="#section-4.3.1-5.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.1-5.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.1-5.8">Right Trigger<a href="#section-4.3.1-5.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.1-5.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.1-5.10">C-Up<a href="#section-4.3.1-5.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.1-5.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.1-5.12">C-Down<a href="#section-4.3.1-5.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.1-5.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.1-5.14">C-Left<a href="#section-4.3.1-5.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.1-5.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.1-5.16">C-Right<a href="#section-4.3.1-5.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.3.1-6"><strong>Octet 2</strong><a href="#section-4.3.1-6" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.1-7"> + <dt id="section-4.3.1-7.1">Bits 7-0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.1-7.2">Analog Stick X-Axis (signed 8-bit number)<a href="#section-4.3.1-7.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.3.1-8"><strong>Octet 3</strong><a href="#section-4.3.1-8" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.1-9"> + <dt id="section-4.3.1-9.1">Bits 7-0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.1-9.2">Analog Stick Y-Axis (signed 8-bit number)<a href="#section-4.3.1-9.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +<section id="section-4.3.2"> + <h4 id="name-n64-standard-controller-with-r"> +<a href="#section-4.3.2" class="section-number selfRef">4.3.2. </a><a href="#name-n64-standard-controller-with-r" class="section-name selfRef">N64 Standard Controller with Rumble</a> + </h4> +<p id="section-4.3.2-1">Single Input Length: 4 Octets<a href="#section-4.3.2-1" class="pilcrow">¶</a></p> +<p id="section-4.3.2-2"><strong>Octet 0</strong><a href="#section-4.3.2-2" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.2-3"> + <dt id="section-4.3.2-3.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.2-3.2">A<a href="#section-4.3.2-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.2-3.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.2-3.4">B<a href="#section-4.3.2-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.2-3.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.2-3.6">Z<a href="#section-4.3.2-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.2-3.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.2-3.8">Start<a href="#section-4.3.2-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.2-3.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.2-3.10">D-Pad Up<a href="#section-4.3.2-3.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.2-3.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.2-3.12">D-Pad Down<a href="#section-4.3.2-3.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.2-3.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.2-3.14">D-Pad Left<a href="#section-4.3.2-3.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.2-3.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.2-3.16">D-Pad Right<a href="#section-4.3.2-3.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.3.2-4"><strong>Octet 1</strong><a href="#section-4.3.2-4" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.2-5"> + <dt id="section-4.3.2-5.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.2-5.2">RST (special controller reset bit)<a href="#section-4.3.2-5.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.2-5.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.2-5.4">0<a href="#section-4.3.2-5.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.2-5.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.2-5.6">Left Trigger<a href="#section-4.3.2-5.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.2-5.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.2-5.8">Right Trigger<a href="#section-4.3.2-5.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.2-5.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.2-5.10">C-Up<a href="#section-4.3.2-5.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.2-5.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.2-5.12">C-Down<a href="#section-4.3.2-5.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.2-5.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.2-5.14">C-Left<a href="#section-4.3.2-5.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.2-5.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.2-5.16">C-Right<a href="#section-4.3.2-5.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.3.2-6"><strong>Octet 2</strong><a href="#section-4.3.2-6" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.2-7"> + <dt id="section-4.3.2-7.1">Bits 7-0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.2-7.2">Analog Stick X-Axis (signed 8-bit number)<a href="#section-4.3.2-7.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.3.2-8"><strong>Octet 3</strong><a href="#section-4.3.2-8" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.2-9"> + <dt id="section-4.3.2-9.1">Bits 7-0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.2-9.2">Analog Stick Y-Axis (signed 8-bit number)<a href="#section-4.3.2-9.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +<section id="section-4.3.3"> + <h4 id="name-n64-standard-controller-with-c"> +<a href="#section-4.3.3" class="section-number selfRef">4.3.3. </a><a href="#name-n64-standard-controller-with-c" class="section-name selfRef">N64 Standard Controller with Controller Pak</a> + </h4> +<p id="section-4.3.3-1">Single Input Length: 4 Octets<a href="#section-4.3.3-1" class="pilcrow">¶</a></p> +<p id="section-4.3.3-2"><strong>Octet 0</strong><a href="#section-4.3.3-2" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.3-3"> + <dt id="section-4.3.3-3.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.3-3.2">A<a href="#section-4.3.3-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.3-3.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.3-3.4">B<a href="#section-4.3.3-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.3-3.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.3-3.6">Z<a href="#section-4.3.3-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.3-3.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.3-3.8">Start<a href="#section-4.3.3-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.3-3.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.3-3.10">D-Pad Up<a href="#section-4.3.3-3.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.3-3.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.3-3.12">D-Pad Down<a href="#section-4.3.3-3.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.3-3.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.3-3.14">D-Pad Left<a href="#section-4.3.3-3.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.3-3.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.3-3.16">D-Pad Right<a href="#section-4.3.3-3.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.3.3-4"><strong>Octet 1</strong><a href="#section-4.3.3-4" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.3-5"> + <dt id="section-4.3.3-5.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.3-5.2">RST (special controller reset bit)<a href="#section-4.3.3-5.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.3-5.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.3-5.4">0<a href="#section-4.3.3-5.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.3-5.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.3-5.6">Left Trigger<a href="#section-4.3.3-5.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.3-5.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.3-5.8">Right Trigger<a href="#section-4.3.3-5.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.3-5.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.3-5.10">C-Up<a href="#section-4.3.3-5.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.3-5.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.3-5.12">C-Down<a href="#section-4.3.3-5.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.3-5.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.3-5.14">C-Left<a href="#section-4.3.3-5.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.3-5.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.3-5.16">C-Right<a href="#section-4.3.3-5.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.3.3-6"><strong>Octet 2</strong><a href="#section-4.3.3-6" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.3-7"> + <dt id="section-4.3.3-7.1">Bits 7-0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.3-7.2">Analog Stick X-Axis (signed 8-bit number)<a href="#section-4.3.3-7.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.3.3-8"><strong>Octet 3</strong><a href="#section-4.3.3-8" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.3-9"> + <dt id="section-4.3.3-9.1">Bits 7-0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.3-9.2">Analog Stick Y-Axis (signed 8-bit number)<a href="#section-4.3.3-9.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +<section id="section-4.3.4"> + <h4 id="name-n64-standard-controller-with-t"> +<a href="#section-4.3.4" class="section-number selfRef">4.3.4. </a><a href="#name-n64-standard-controller-with-t" class="section-name selfRef">N64 Standard Controller with Transfer Pak</a> + </h4> +<p id="section-4.3.4-1">Single Input Length: 4 Octets<a href="#section-4.3.4-1" class="pilcrow">¶</a></p> +<p id="section-4.3.4-2"><strong>Octet 0</strong><a href="#section-4.3.4-2" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.4-3"> + <dt id="section-4.3.4-3.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.4-3.2">A<a href="#section-4.3.4-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.4-3.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.4-3.4">B<a href="#section-4.3.4-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.4-3.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.4-3.6">Z<a href="#section-4.3.4-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.4-3.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.4-3.8">Start<a href="#section-4.3.4-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.4-3.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.4-3.10">D-Pad Up<a href="#section-4.3.4-3.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.4-3.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.4-3.12">D-Pad Down<a href="#section-4.3.4-3.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.4-3.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.4-3.14">D-Pad Left<a href="#section-4.3.4-3.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.4-3.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.4-3.16">D-Pad Right<a href="#section-4.3.4-3.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.3.4-4"><strong>Octet 1</strong><a href="#section-4.3.4-4" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.4-5"> + <dt id="section-4.3.4-5.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.4-5.2">RST (special controller reset bit)<a href="#section-4.3.4-5.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.4-5.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.4-5.4">0<a href="#section-4.3.4-5.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.4-5.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.4-5.6">Left Trigger<a href="#section-4.3.4-5.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.4-5.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.4-5.8">Right Trigger<a href="#section-4.3.4-5.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.4-5.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.4-5.10">C-Up<a href="#section-4.3.4-5.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.4-5.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.4-5.12">C-Down<a href="#section-4.3.4-5.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.4-5.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.4-5.14">C-Left<a href="#section-4.3.4-5.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.4-5.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.4-5.16">C-Right<a href="#section-4.3.4-5.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.3.4-6"><strong>Octet 2</strong><a href="#section-4.3.4-6" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.4-7"> + <dt id="section-4.3.4-7.1">Bits 7-0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.4-7.2">Analog Stick X-Axis (signed 8-bit number)<a href="#section-4.3.4-7.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.3.4-8"><strong>Octet 3</strong><a href="#section-4.3.4-8" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.4-9"> + <dt id="section-4.3.4-9.1">Bits 7-0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.4-9.2">Analog Stick Y-Axis (signed 8-bit number)<a href="#section-4.3.4-9.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +<section id="section-4.3.5"> + <h4 id="name-n64-mouse-2"> +<a href="#section-4.3.5" class="section-number selfRef">4.3.5. </a><a href="#name-n64-mouse-2" class="section-name selfRef">N64 Mouse</a> + </h4> +<p id="section-4.3.5-1">Single Input Length: 4 Octets<a href="#section-4.3.5-1" class="pilcrow">¶</a></p> +<p id="section-4.3.5-2"><strong>Octet 0</strong><a href="#section-4.3.5-2" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.5-3"> + <dt id="section-4.3.5-3.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.5-3.2">A<a href="#section-4.3.5-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.5-3.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.5-3.4">B<a href="#section-4.3.5-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.5-3.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.5-3.6">0<a href="#section-4.3.5-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.5-3.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.5-3.8">0<a href="#section-4.3.5-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.5-3.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.5-3.10">0<a href="#section-4.3.5-3.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.5-3.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.5-3.12">0<a href="#section-4.3.5-3.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.5-3.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.5-3.14">0<a href="#section-4.3.5-3.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.5-3.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.5-3.16">0<a href="#section-4.3.5-3.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.3.5-4"><strong>Octet 1</strong><a href="#section-4.3.5-4" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.5-5"> + <dt id="section-4.3.5-5.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.5-5.2">0<a href="#section-4.3.5-5.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.5-5.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.5-5.4">0<a href="#section-4.3.5-5.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.5-5.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.5-5.6">0<a href="#section-4.3.5-5.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.5-5.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.5-5.8">0<a href="#section-4.3.5-5.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.5-5.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.5-5.10">0<a href="#section-4.3.5-5.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.5-5.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.5-5.12">0<a href="#section-4.3.5-5.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.5-5.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.5-5.14">0<a href="#section-4.3.5-5.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.5-5.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.5-5.16">0<a href="#section-4.3.5-5.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.3.5-6"><strong>Octet 2</strong><a href="#section-4.3.5-6" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.5-7"> + <dt id="section-4.3.5-7.1">Bits 7-0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.5-7.2">Relative X-Axis position (signed 8-bit number)<a href="#section-4.3.5-7.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.3.5-8"><strong>Octet 3</strong><a href="#section-4.3.5-8" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.5-9"> + <dt id="section-4.3.5-9.1">Bits 7-0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.5-9.2">Relative Y-Axis position (signed 8-bit number)<a href="#section-4.3.5-9.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +<section id="section-4.3.6"> + <h4 id="name-n64-densha-de-go-2"> +<a href="#section-4.3.6" class="section-number selfRef">4.3.6. </a><a href="#name-n64-densha-de-go-2" class="section-name selfRef">N64 Densha de Go</a> + </h4> +<p id="section-4.3.6-1">Single Input Length: 4 Octets<a href="#section-4.3.6-1" class="pilcrow">¶</a></p> +<p id="section-4.3.6-2"><strong>Octet 0</strong><a href="#section-4.3.6-2" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.6-3"> + <dt id="section-4.3.6-3.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-3.2">A<a href="#section-4.3.6-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-3.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-3.4">B<a href="#section-4.3.6-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-3.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-3.6">Accelerator<a href="#section-4.3.6-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-3.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-3.8">Start<a href="#section-4.3.6-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-3.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-3.10">Accelerator<a href="#section-4.3.6-3.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-3.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-3.12">0<a href="#section-4.3.6-3.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-3.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-3.14">0<a href="#section-4.3.6-3.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-3.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-3.16">Accelerator<a href="#section-4.3.6-3.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.3.6-4"><strong>Octet 1</strong><a href="#section-4.3.6-4" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.6-5"> + <dt id="section-4.3.6-5.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-5.2">0<a href="#section-4.3.6-5.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-5.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-5.4">0<a href="#section-4.3.6-5.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-5.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-5.6">C<a href="#section-4.3.6-5.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-5.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-5.8">Select<a href="#section-4.3.6-5.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-5.9">Bits 3-0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-5.10">Brake<a href="#section-4.3.6-5.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.3.6-6"><strong>Octet 2</strong><a href="#section-4.3.6-6" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.6-7"> + <dt id="section-4.3.6-7.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-7.2">0<a href="#section-4.3.6-7.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-7.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-7.4">0<a href="#section-4.3.6-7.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-7.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-7.6">0<a href="#section-4.3.6-7.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-7.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-7.8">0<a href="#section-4.3.6-7.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-7.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-7.10">0<a href="#section-4.3.6-7.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-7.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-7.12">0<a href="#section-4.3.6-7.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-7.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-7.14">0<a href="#section-4.3.6-7.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-7.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-7.16">0<a href="#section-4.3.6-7.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.3.6-8"><strong>Octet 3</strong><a href="#section-4.3.6-8" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.3.6-9"> + <dt id="section-4.3.6-9.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-9.2">0<a href="#section-4.3.6-9.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-9.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-9.4">0<a href="#section-4.3.6-9.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-9.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-9.6">0<a href="#section-4.3.6-9.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-9.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-9.8">0<a href="#section-4.3.6-9.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-9.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-9.10">0<a href="#section-4.3.6-9.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-9.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-9.12">0<a href="#section-4.3.6-9.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-9.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-9.14">0<a href="#section-4.3.6-9.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.3.6-9.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.3.6-9.16">0<a href="#section-4.3.6-9.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</section> +<section id="section-4.4"> + <h3 id="name-gamecube-controller-types-2"> +<a href="#section-4.4" class="section-number selfRef">4.4. </a><a href="#name-gamecube-controller-types-2" class="section-name selfRef">GameCube Controller Types</a> + </h3> +<section id="section-4.4.1"> + <h4 id="name-gamecube-standard-controller"> +<a href="#section-4.4.1" class="section-number selfRef">4.4.1. </a><a href="#name-gamecube-standard-controller" class="section-name selfRef">GameCube Standard Controller</a> + </h4> +<p id="section-4.4.1-1">Single Input Length: 8 Octets<a href="#section-4.4.1-1" class="pilcrow">¶</a></p> +<p id="section-4.4.1-2"><strong>Octet 0</strong><a href="#section-4.4.1-2" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.4.1-3"> + <dt id="section-4.4.1-3.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.4.1-3.2">0<a href="#section-4.4.1-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.4.1-3.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.4.1-3.4">0<a href="#section-4.4.1-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.4.1-3.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.4.1-3.6">0<a href="#section-4.4.1-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.4.1-3.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.4.1-3.8">Start<a href="#section-4.4.1-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.4.1-3.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.4.1-3.10">Y<a href="#section-4.4.1-3.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.4.1-3.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.4.1-3.12">X<a href="#section-4.4.1-3.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.4.1-3.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.4.1-3.14">B<a href="#section-4.4.1-3.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.4.1-3.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.4.1-3.16">A<a href="#section-4.4.1-3.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.4.1-4"><strong>Octet 1</strong><a href="#section-4.4.1-4" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.4.1-5"> + <dt id="section-4.4.1-5.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.4.1-5.2">1<a href="#section-4.4.1-5.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.4.1-5.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.4.1-5.4">L<a href="#section-4.4.1-5.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.4.1-5.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.4.1-5.6">R<a href="#section-4.4.1-5.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.4.1-5.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.4.1-5.8">Z<a href="#section-4.4.1-5.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.4.1-5.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.4.1-5.10">D-Pad Up<a href="#section-4.4.1-5.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.4.1-5.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.4.1-5.12">D-Pad Down<a href="#section-4.4.1-5.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.4.1-5.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.4.1-5.14">D-Pad Right<a href="#section-4.4.1-5.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.4.1-5.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.4.1-5.16">D-Pad Left<a href="#section-4.4.1-5.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.4.1-6"><strong>Octet 2</strong><a href="#section-4.4.1-6" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.4.1-7"> + <dt id="section-4.4.1-7.1">Bits 7-0:</dt> + <dd style="margin-left: 1.5em" id="section-4.4.1-7.2">Analog Stick X-Axis (signed 8-bit number)<a href="#section-4.4.1-7.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.4.1-8"><strong>Octet 3</strong><a href="#section-4.4.1-8" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.4.1-9"> + <dt id="section-4.4.1-9.1">Bits 7-0:</dt> + <dd style="margin-left: 1.5em" id="section-4.4.1-9.2">Analog Stick Y-Axis (signed 8-bit number)<a href="#section-4.4.1-9.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.4.1-10"><strong>Octet 4</strong><a href="#section-4.4.1-10" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.4.1-11"> + <dt id="section-4.4.1-11.1">Bits 7-0:</dt> + <dd style="margin-left: 1.5em" id="section-4.4.1-11.2">C-Stick X-Axis (signed 8-bit number)<a href="#section-4.4.1-11.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.4.1-12"><strong>Octet 5</strong><a href="#section-4.4.1-12" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.4.1-13"> + <dt id="section-4.4.1-13.1">Bits 7-0:</dt> + <dd style="margin-left: 1.5em" id="section-4.4.1-13.2">C-Stick Y-Axis (signed 8-bit number)<a href="#section-4.4.1-13.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.4.1-14"><strong>Octet 6</strong><a href="#section-4.4.1-14" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.4.1-15"> + <dt id="section-4.4.1-15.1">Bits 7-0:</dt> + <dd style="margin-left: 1.5em" id="section-4.4.1-15.2">L Analog Value (unsigned 8-bit number)<a href="#section-4.4.1-15.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.4.1-16"><strong>Octet 7</strong><a href="#section-4.4.1-16" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.4.1-17"> + <dt id="section-4.4.1-17.1">Bits 7-0:</dt> + <dd style="margin-left: 1.5em" id="section-4.4.1-17.2">R Analog Value (unsigned 8-bit number)<a href="#section-4.4.1-17.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</section> +<section id="section-4.5"> + <h3 id="name-game-boy-controller-types-2"> +<a href="#section-4.5" class="section-number selfRef">4.5. </a><a href="#name-game-boy-controller-types-2" class="section-name selfRef">Game Boy Controller Types</a> + </h3> +<section id="section-4.5.1"> + <h4 id="name-gb-standard-controller-2"> +<a href="#section-4.5.1" class="section-number selfRef">4.5.1. </a><a href="#name-gb-standard-controller-2" class="section-name selfRef">GB Standard Controller</a> + </h4> +<p id="section-4.5.1-1">Single Input Length: 1 Octet<a href="#section-4.5.1-1" class="pilcrow">¶</a></p> +<p id="section-4.5.1-2"><strong>Octet 0</strong><a href="#section-4.5.1-2" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.5.1-3"> + <dt id="section-4.5.1-3.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.5.1-3.2">/Down<a href="#section-4.5.1-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.5.1-3.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.5.1-3.4">/Up<a href="#section-4.5.1-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.5.1-3.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.5.1-3.6">/Left<a href="#section-4.5.1-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.5.1-3.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.5.1-3.8">/Right<a href="#section-4.5.1-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.5.1-3.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.5.1-3.10">/Start<a href="#section-4.5.1-3.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.5.1-3.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.5.1-3.12">/Select<a href="#section-4.5.1-3.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.5.1-3.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.5.1-3.14">/B<a href="#section-4.5.1-3.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.5.1-3.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.5.1-3.16">/A<a href="#section-4.5.1-3.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</section> +<section id="section-4.6"> + <h3 id="name-game-boy-color-controller-ty"> +<a href="#section-4.6" class="section-number selfRef">4.6. </a><a href="#name-game-boy-color-controller-ty" class="section-name selfRef">Game Boy Color Controller Types</a> + </h3> +<section id="section-4.6.1"> + <h4 id="name-gbc-standard-controller-2"> +<a href="#section-4.6.1" class="section-number selfRef">4.6.1. </a><a href="#name-gbc-standard-controller-2" class="section-name selfRef">GBC Standard Controller</a> + </h4> +<p id="section-4.6.1-1">Single Input Length: 1 Octet<a href="#section-4.6.1-1" class="pilcrow">¶</a></p> +<p id="section-4.6.1-2"><strong>Octet 0</strong><a href="#section-4.6.1-2" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.6.1-3"> + <dt id="section-4.6.1-3.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.6.1-3.2">/Down<a href="#section-4.6.1-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.6.1-3.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.6.1-3.4">/Up<a href="#section-4.6.1-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.6.1-3.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.6.1-3.6">/Left<a href="#section-4.6.1-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.6.1-3.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.6.1-3.8">/Right<a href="#section-4.6.1-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.6.1-3.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.6.1-3.10">/Start<a href="#section-4.6.1-3.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.6.1-3.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.6.1-3.12">/Select<a href="#section-4.6.1-3.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.6.1-3.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.6.1-3.14">/B<a href="#section-4.6.1-3.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.6.1-3.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.6.1-3.16">/A<a href="#section-4.6.1-3.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</section> +<section id="section-4.7"> + <h3 id="name-game-boy-advance-controller-"> +<a href="#section-4.7" class="section-number selfRef">4.7. </a><a href="#name-game-boy-advance-controller-" class="section-name selfRef">Game Boy Advance Controller Types</a> + </h3> +<section id="section-4.7.1"> + <h4 id="name-gba-standard-controller-2"> +<a href="#section-4.7.1" class="section-number selfRef">4.7.1. </a><a href="#name-gba-standard-controller-2" class="section-name selfRef">GBA Standard Controller</a> + </h4> +<p id="section-4.7.1-1">Single Input Length: 2 Octets<a href="#section-4.7.1-1" class="pilcrow">¶</a></p> +<p id="section-4.7.1-2"><strong>Octet 0</strong><a href="#section-4.7.1-2" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.7.1-3"> + <dt id="section-4.7.1-3.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.7.1-3.2">1<a href="#section-4.7.1-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.7.1-3.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.7.1-3.4">1<a href="#section-4.7.1-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.7.1-3.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.7.1-3.6">1<a href="#section-4.7.1-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.7.1-3.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.7.1-3.8">1<a href="#section-4.7.1-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.7.1-3.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.7.1-3.10">1<a href="#section-4.7.1-3.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.7.1-3.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.7.1-3.12">1<a href="#section-4.7.1-3.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.7.1-3.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.7.1-3.14">/L<a href="#section-4.7.1-3.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.7.1-3.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.7.1-3.16">/R<a href="#section-4.7.1-3.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.7.1-4"><strong>Octet 1</strong><a href="#section-4.7.1-4" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.7.1-5"> + <dt id="section-4.7.1-5.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.7.1-5.2">/Down<a href="#section-4.7.1-5.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.7.1-5.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.7.1-5.4">/Up<a href="#section-4.7.1-5.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.7.1-5.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.7.1-5.6">/Left<a href="#section-4.7.1-5.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.7.1-5.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.7.1-5.8">/Right<a href="#section-4.7.1-5.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.7.1-5.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.7.1-5.10">/Start<a href="#section-4.7.1-5.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.7.1-5.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.7.1-5.12">/Select<a href="#section-4.7.1-5.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.7.1-5.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.7.1-5.14">/B<a href="#section-4.7.1-5.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.7.1-5.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.7.1-5.16">/A<a href="#section-4.7.1-5.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</section> +<section id="section-4.8"> + <h3 id="name-genesis-controller-types-2"> +<a href="#section-4.8" class="section-number selfRef">4.8. </a><a href="#name-genesis-controller-types-2" class="section-name selfRef">Genesis Controller Types</a> + </h3> +<section id="section-4.8.1"> + <h4 id="name-genesis-mega-drive-3-button-2"> +<a href="#section-4.8.1" class="section-number selfRef">4.8.1. </a><a href="#name-genesis-mega-drive-3-button-2" class="section-name selfRef">Genesis (Mega Drive) 3-Button</a> + </h4> +<p id="section-4.8.1-1">Single Input Length: 1 Octet<a href="#section-4.8.1-1" class="pilcrow">¶</a></p> +<p id="section-4.8.1-2"><strong>Octet 0</strong><a href="#section-4.8.1-2" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.8.1-3"> + <dt id="section-4.8.1-3.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.1-3.2">/A<a href="#section-4.8.1-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.8.1-3.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.1-3.4">/Start<a href="#section-4.8.1-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.8.1-3.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.1-3.6">/Up<a href="#section-4.8.1-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.8.1-3.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.1-3.8">/Down<a href="#section-4.8.1-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.8.1-3.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.1-3.10">/Left<a href="#section-4.8.1-3.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.8.1-3.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.1-3.12">/Right<a href="#section-4.8.1-3.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.8.1-3.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.1-3.14">/B<a href="#section-4.8.1-3.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.8.1-3.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.1-3.16">/C<a href="#section-4.8.1-3.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +<section id="section-4.8.2"> + <h4 id="name-genesis-mega-drive-6-button-2"> +<a href="#section-4.8.2" class="section-number selfRef">4.8.2. </a><a href="#name-genesis-mega-drive-6-button-2" class="section-name selfRef">Genesis (Mega Drive) 6-Button</a> + </h4> +<p id="section-4.8.2-1">Single Input Length: 2 Octets<a href="#section-4.8.2-1" class="pilcrow">¶</a></p> +<p id="section-4.8.2-2"><strong>Octet 0</strong><a href="#section-4.8.2-2" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.8.2-3"> + <dt id="section-4.8.2-3.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.2-3.2">/A<a href="#section-4.8.2-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.8.2-3.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.2-3.4">/Start<a href="#section-4.8.2-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.8.2-3.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.2-3.6">/Up<a href="#section-4.8.2-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.8.2-3.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.2-3.8">/Down<a href="#section-4.8.2-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.8.2-3.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.2-3.10">/Left<a href="#section-4.8.2-3.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.8.2-3.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.2-3.12">/Right<a href="#section-4.8.2-3.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.8.2-3.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.2-3.14">/B<a href="#section-4.8.2-3.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.8.2-3.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.2-3.16">/C<a href="#section-4.8.2-3.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +<p id="section-4.8.2-4"><strong>Octet 1</strong><a href="#section-4.8.2-4" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.8.2-5"> + <dt id="section-4.8.2-5.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.2-5.2">/Z<a href="#section-4.8.2-5.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.8.2-5.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.2-5.4">/Y<a href="#section-4.8.2-5.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.8.2-5.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.2-5.6">/X<a href="#section-4.8.2-5.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.8.2-5.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.2-5.8">/Mode<a href="#section-4.8.2-5.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.8.2-5.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.2-5.10">1<a href="#section-4.8.2-5.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.8.2-5.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.2-5.12">1<a href="#section-4.8.2-5.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.8.2-5.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.2-5.14">1<a href="#section-4.8.2-5.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.8.2-5.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.8.2-5.16">1<a href="#section-4.8.2-5.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</section> +<section id="section-4.9"> + <h3 id="name-atari-2600-controller-types-2"> +<a href="#section-4.9" class="section-number selfRef">4.9. </a><a href="#name-atari-2600-controller-types-2" class="section-name selfRef">Atari 2600 Controller Types</a> + </h3> +<section id="section-4.9.1"> + <h4 id="name-a2600-joystick-2"> +<a href="#section-4.9.1" class="section-number selfRef">4.9.1. </a><a href="#name-a2600-joystick-2" class="section-name selfRef">A2600 Joystick</a> + </h4> +<p id="section-4.9.1-1">Single Input Length: 1 Octet<a href="#section-4.9.1-1" class="pilcrow">¶</a></p> +<p id="section-4.9.1-2"><strong>Octet 0</strong><a href="#section-4.9.1-2" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.9.1-3"> + <dt id="section-4.9.1-3.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.9.1-3.2">/Up<a href="#section-4.9.1-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.9.1-3.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.9.1-3.4">/Down<a href="#section-4.9.1-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.9.1-3.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.9.1-3.6">/Left<a href="#section-4.9.1-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.9.1-3.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.9.1-3.8">/Right<a href="#section-4.9.1-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.9.1-3.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.9.1-3.10">1<a href="#section-4.9.1-3.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.9.1-3.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.9.1-3.12">/Button<a href="#section-4.9.1-3.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.9.1-3.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.9.1-3.14">1<a href="#section-4.9.1-3.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.9.1-3.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.9.1-3.16">1<a href="#section-4.9.1-3.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +<section id="section-4.9.2"> + <h4 id="name-a2600-keyboard-controller-2"> +<a href="#section-4.9.2" class="section-number selfRef">4.9.2. </a><a href="#name-a2600-keyboard-controller-2" class="section-name selfRef">A2600 Keyboard Controller</a> + </h4> +<p id="section-4.9.2-1">Single Input Length: 1 Octet<a href="#section-4.9.2-1" class="pilcrow">¶</a></p> +<p id="section-4.9.2-2"><strong>Octet 0</strong><a href="#section-4.9.2-2" class="pilcrow">¶</a></p> +<span class="break"></span><dl class="dlCompact dlParallel" id="section-4.9.2-3"> + <dt id="section-4.9.2-3.1">Bit 7:</dt> + <dd style="margin-left: 1.5em" id="section-4.9.2-3.2">/Row1 (key 1, 2, or 3 pressed)<a href="#section-4.9.2-3.2" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.9.2-3.3">Bit 6:</dt> + <dd style="margin-left: 1.5em" id="section-4.9.2-3.4">/Row2 (key 4, 5, or 6 pressed)<a href="#section-4.9.2-3.4" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.9.2-3.5">Bit 5:</dt> + <dd style="margin-left: 1.5em" id="section-4.9.2-3.6">/Row3 (key 7, 8, or 9 pressed)<a href="#section-4.9.2-3.6" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.9.2-3.7">Bit 4:</dt> + <dd style="margin-left: 1.5em" id="section-4.9.2-3.8">/Row4 (key *, 0, or # pressed)<a href="#section-4.9.2-3.8" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.9.2-3.9">Bit 3:</dt> + <dd style="margin-left: 1.5em" id="section-4.9.2-3.10">/Column1 (key 1, 4, 7, or * pressed)<a href="#section-4.9.2-3.10" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.9.2-3.11">Bit 2:</dt> + <dd style="margin-left: 1.5em" id="section-4.9.2-3.12">/Column3 (key 3, 6, 9, or # pressed)<a href="#section-4.9.2-3.12" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.9.2-3.13">Bit 1:</dt> + <dd style="margin-left: 1.5em" id="section-4.9.2-3.14">/Column2 (key 2, 5, 8, or 0 pressed)<a href="#section-4.9.2-3.14" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +<dt id="section-4.9.2-3.15">Bit 0:</dt> + <dd style="margin-left: 1.5em" id="section-4.9.2-3.16">1<a href="#section-4.9.2-3.16" class="pilcrow">¶</a> +</dd> + <dd class="break"></dd> +</dl> +</section> +</section> +</section> +</div> +<section id="section-5"> + <h2 id="name-references-2"> +<a href="#section-5" class="section-number selfRef">5. </a><a href="#name-references-2" class="section-name selfRef">References</a> + </h2> +<section id="section-5.1"> + <h3 id="name-normative-references-2"> +<a href="#section-5.1" class="section-number selfRef">5.1. </a><a href="#name-normative-references-2" class="section-name selfRef">Normative References</a> + </h3> +<dl class="references"> +<dt id="RFC2119">[RFC2119]</dt> + <dd> +<span class="refAuthor">Bradner, S.</span>, <span class="refTitle">"Key words for use in RFCs to Indicate Requirement Levels"</span>, <span class="seriesInfo">BCP 14</span>, <span class="seriesInfo">RFC 2119</span>, <span class="seriesInfo">DOI 10.17487/RFC2119</span>, <time datetime="1997-03" class="refDate">March 1997</time>, <span><<a href="https://www.rfc-editor.org/info/rfc2119">https://www.rfc-editor.org/info/rfc2119</a>></span>. </dd> +<dd class="break"></dd> +<dt id="RFC8174">[RFC8174]</dt> + <dd> +<span class="refAuthor">Leiba, B.</span>, <span class="refTitle">"Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words"</span>, <span class="seriesInfo">BCP 14</span>, <span class="seriesInfo">RFC 8174</span>, <span class="seriesInfo">DOI 10.17487/RFC8174</span>, <time datetime="2017-05" class="refDate">May 2017</time>, <span><<a href="https://www.rfc-editor.org/info/rfc8174">https://www.rfc-editor.org/info/rfc8174</a>></span>. </dd> +<dd class="break"></dd> +</dl> +</section> +</section> +<section id="appendix-A"> + <h2 id="name-copyright-notice-2"> +<a href="#name-copyright-notice-2" class="section-name selfRef">Copyright Notice</a> + </h2> +<p id="appendix-A-1">Copyright (c) 2021-2022, Vi Grey and Bigbass<a href="#appendix-A-1" class="pilcrow">¶</a></p> +<p id="appendix-A-2">All rights reserved.<a href="#appendix-A-2" class="pilcrow">¶</a></p> +<p id="appendix-A-3">Redistribution and use of this documentation in source (XML format) and/or "compiled" forms (TXT, PDF, HTML, etc), with or without modification, are permitted provided that the following conditions are met:<a href="#appendix-A-3" class="pilcrow">¶</a></p> +<ol start="1" type="1" class="normal type-1" id="appendix-A-4"> + <li id="appendix-A-4.1">Redistributions of source code (XML format) of this documentation must retain the above copyright notice, this list of conditions, and the following disclaimer in the documentation.<a href="#appendix-A-4.1" class="pilcrow">¶</a> +</li> + <li id="appendix-A-4.2">Redistributions in compiled form (Converted to TXT, PDF, HTML, and other formats) of this documentation must reproduce the above copyright notice, this list of conditions, and the following disclaimer in the documentation.<a href="#appendix-A-4.2" class="pilcrow">¶</a> +</li> + </ol> +<p id="appendix-A-5">THIS DOCUMENTATION IS PROVIDED BY THE AUTHOR(S) "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.<a href="#appendix-A-5" class="pilcrow">¶</a></p> +</section> +<div id="authors-addresses"> +<section id="appendix-B"> + <h2 id="name-authors-addresses-2"> +<a href="#name-authors-addresses-2" class="section-name selfRef">Authors' Addresses</a> + </h2> +<address class="vcard"> + <div dir="auto" class="left"><span class="fn nameRole">Vi Grey</span></div> +<div dir="auto" class="left"><span class="org">VG Interactive</span></div> +<div class="email"> +<span>Email:</span> +<a href="mailto:vi@vigrey.com" class="email">vi@vigrey.com</a> +</div> +<div class="url"> +<span>URI:</span> +<a href="https://vigrey.com" class="url">https://vigrey.com</a> +</div> +</address> +<address class="vcard"> + <div dir="auto" class="left"><span class="fn nameRole">Bigbass</span></div> +<div class="url"> +<span>URI:</span> +<a href="https://github.com/bigbass1997" class="url">https://github.com/bigbass1997</a> +</div> +</address> +</section> +</div> +<script>const toc = document.getElementById("toc"); +toc.querySelector("h2").addEventListener("click", e => { + toc.classList.toggle("active"); +}); +toc.querySelector("nav").addEventListener("click", e => { + toc.classList.remove("active"); +}); +</script> +</body> +</html> diff --git a/docs/draft-tasd-0001.pdf b/docs/draft-tasd-0001.pdf new file mode 100644 index 0000000..8614859 --- /dev/null +++ b/docs/draft-tasd-0001.pdf @@ -0,0 +1,8682 @@ +%PDF-1.7 +%🖤 +1 0 obj +<< +/Type /Pages +/Kids [ 6 0 R 38 0 R 100 0 R 162 0 R 214 0 R 225 0 R 227 0 R 231 0 R 239 0 R 245 0 R 262 0 R 275 0 R 291 0 R 305 0 R 320 0 R 331 0 R 337 0 R 345 0 R 351 0 R 361 0 R 369 0 R 375 0 R 377 0 R 381 0 R 387 0 R 396 0 R 404 0 R 414 0 R 426 0 R 432 0 R 438 0 R 446 0 R 452 0 R 462 0 R 468 0 R 472 0 R 480 0 R 484 0 R 488 0 R 494 0 R 500 0 R 502 0 R 516 0 R 524 0 R 536 0 R ] +/Count 45 +>> +endobj +2 0 obj +<< +/Producer (WeasyPrint 56.1) +/Title (TASD File Format Specification Version 1) +/Author (Vi Grey, Bigbass) +/Subject ( + The TASD file format is used for storing "Tool Assisted Speedrun" or "Tool Assisted Superplay" \(TAS\) data for TAS replay devices to replay on physical video game console hardware. The format is defined to be expandable for future needs. The format is also defined to be parsable by programs that do not understand portions of the format, whether that is due to incomplete support of the format specification or due to new features being added to later versions of the specification at a later date. + This document defines the file format specification for TASD files. + ) +/Creator (xml2rfc 3.15.0) +>> +endobj +3 0 obj +<< +/Type /Catalog +/Pages 1 0 R +/Outlines 648 0 R +/Names << +/Dests << +/Names [ (RFC2119) [ 536 0 R /XYZ 65.905512 771.389764 0 ] (RFC8174) [ 536 0 R /XYZ 65.905512 722.531609 0 ] (abstract) [ 6 0 R /XYZ 65.905512 663.848514 0 ] (appendix-A) [ 536 0 R /XYZ 65.905512 685.173455 0 ] (appendix-A-1) [ 536 0 R /XYZ 65.905512 637.653455 0 ] (appendix-A-2) [ 536 0 R /XYZ 65.905512 614.034070 0 ] (appendix-A-3) [ 536 0 R /XYZ 65.905512 590.414686 0 ] (appendix-A-4) [ 536 0 R /XYZ 85.905512 539.556531 0 ] (appendix-A-4.1) [ 536 0 R /XYZ 85.905512 539.556531 0 ] (appendix-A-4.2) [ 536 0 R /XYZ 85.905512 509.817762 0 ] (appendix-A-5) [ 536 0 R /XYZ 65.905512 458.959608 0 ] (appendix-B) [ 536 0 R /XYZ 65.905512 326.265760 0 ] (author) [ 337 0 R /XYZ 65.905512 771.389764 0 ] (authors-addresses) [ 536 0 R /XYZ 65.905512 326.265760 0 ] (blank_frames) [ 361 0 R /XYZ 65.905512 252.175916 0 ] (category) [ 337 0 R /XYZ 65.905512 406.396531 0 ] (comment) [ 438 0 R /XYZ 65.905512 201.438992 0 ] (console_region) [ 320 0 R /XYZ 65.905512 297.596531 0 ] (console_type) [ 320 0 R /XYZ 65.905512 674.931609 0 ] (controller_inputs) [ 452 0 R /XYZ 65.905512 771.389764 0 ] (descriptions) [ 245 0 R /XYZ 65.905512 291.382684 0 ] (dump_created) [ 351 0 R /XYZ 65.905512 595.191609 0 ] (dump_last_modified) [ 351 0 R /XYZ 65.905512 418.993455 0 ] (emulator_core) [ 345 0 R /XYZ 65.905512 365.896531 0 ] (emulator_name) [ 337 0 R /XYZ 65.905512 194.959608 0 ] (emulator_version) [ 345 0 R /XYZ 65.905512 590.952840 0 ] (experimental) [ 446 0 R /XYZ 65.905512 604.572225 0 ] (game_identifier) [ 377 0 R /XYZ 65.905512 636.434686 0 ] (game_title) [ 331 0 R /XYZ 65.905512 594.271609 0 ] (genesis_game_genie_code) [ 414 0 R /XYZ 65.905512 540.452840 0 ] (identifiers) [ 6 0 R /XYZ 70.905512 764.889764 0 ] (input_chunk) [ 414 0 R /XYZ 65.905512 309.515916 0 ] (input_moment) [ 426 0 R /XYZ 65.905512 571.957147 0 ] (internal-metadata) [ 6 0 R /XYZ 65.905512 769.889764 0 ] (introduction) [ 214 0 R /XYZ 65.905512 771.389764 0 ] (lag_frame_chunk) [ 432 0 R /XYZ 65.905512 219.518992 0 ] (memory_init) [ 369 0 R /XYZ 65.905512 422.754686 0 ] (movie_file) [ 381 0 R /XYZ 65.905512 487.475301 0 ] (movie_license) [ 381 0 R /XYZ 65.905512 698.912225 0 ] (movie_transition) [ 438 0 R /XYZ 65.905512 593.932225 0 ] (name-a2600-joystick-3) [ 524 0 R /XYZ 65.905512 606.215301 0 ] (name-a2600-keyboard-controller-3) [ 524 0 R /XYZ 65.905512 410.521453 0 ] (name-assigned-packet-keys-with-des) [ 245 0 R /XYZ 65.905512 291.382684 0 ] (name-assigned-packet-keys-without-) [ 239 0 R /XYZ 65.905512 467.456531 0 ] (name-atari-2600-controller-types-3) [ 524 0 R /XYZ 65.905512 632.315301 0 ] (name-attribution-packet-3) [ 337 0 R /XYZ 65.905512 771.389764 0 ] (name-authors-addresses-3) [ 536 0 R /XYZ 65.905512 326.265760 0 ] (name-blank_frames-packet-3) [ 361 0 R /XYZ 65.905512 252.175916 0 ] (name-category-packet-3) [ 337 0 R /XYZ 65.905512 406.396531 0 ] (name-comment-packet-3) [ 438 0 R /XYZ 65.905512 201.438992 0 ] (name-console_region-packet-3) [ 320 0 R /XYZ 65.905512 297.596531 0 ] (name-console_type-packet-3) [ 320 0 R /XYZ 65.905512 674.931609 0 ] (name-controller-input-formats-3) [ 452 0 R /XYZ 65.905512 771.389764 0 ] (name-copyright-notice-3) [ 536 0 R /XYZ 65.905512 685.173455 0 ] (name-dump_created-packet-3) [ 351 0 R /XYZ 65.905512 595.191609 0 ] (name-dump_last_modified-packet-3) [ 351 0 R /XYZ 65.905512 418.993455 0 ] (name-emulator_core-packet-3) [ 345 0 R /XYZ 65.905512 365.896531 0 ] (name-emulator_name-packet-3) [ 337 0 R /XYZ 65.905512 194.959608 0 ] (name-emulator_version-packet-3) [ 345 0 R /XYZ 65.905512 590.952840 0 ] (name-experimental-packet-3) [ 446 0 R /XYZ 65.905512 604.572225 0 ] (name-extraneous-key-descriptions-3) [ 305 0 R /XYZ 65.905512 322.046990 0 ] (name-extraneous-key-payload-format) [ 438 0 R /XYZ 65.905512 234.438992 0 ] (name-extraneous-keys-3) [ 245 0 R /XYZ 65.905512 371.740838 0 ] (name-game-boy-advance-controller-t) [ 502 0 R /XYZ 65.905512 327.802068 0 ] (name-game-boy-color-controller-typ) [ 502 0 R /XYZ 65.905512 549.595916 0 ] (name-game-boy-controller-types-3) [ 502 0 R /XYZ 65.905512 771.389764 0 ] (name-game_identifier-packet-3) [ 377 0 R /XYZ 65.905512 636.434686 0 ] (name-game_title-packet-3) [ 331 0 R /XYZ 65.905512 594.271609 0 ] (name-gamecube-controller-types-3) [ 494 0 R /XYZ 65.905512 303.546990 0 ] (name-gamecube-standard-controller-2) [ 494 0 R /XYZ 65.905512 277.446990 0 ] (name-gb-standard-controller-3) [ 502 0 R /XYZ 65.905512 745.289764 0 ] (name-gba-standard-controller-3) [ 502 0 R /XYZ 65.905512 301.702068 0 ] (name-gbc-standard-controller-3) [ 502 0 R /XYZ 65.905512 523.495916 0 ] (name-general-key-descriptions-3) [ 245 0 R /XYZ 65.905512 265.282684 0 ] (name-general-key-payload-formats-3) [ 320 0 R /XYZ 65.905512 707.931609 0 ] (name-general-keys-3) [ 239 0 R /XYZ 65.905512 441.356531 0 ] (name-genesis-controller-types-3) [ 516 0 R /XYZ 65.905512 567.837762 0 ] (name-genesis-mega-drive-3-button-3) [ 516 0 R /XYZ 65.905512 541.737762 0 ] (name-genesis-mega-drive-6-button-3) [ 516 0 R /XYZ 65.905512 346.043914 0 ] (name-genesis-specific-key-descript) [ 291 0 R /XYZ 65.905512 224.330682 0 ] (name-genesis-specific-key-payload-) [ 414 0 R /XYZ 65.905512 573.452840 0 ] (name-genesis-specific-keys-3) [ 245 0 R /XYZ 65.905512 532.457147 0 ] (name-genesis_game_genie_code-packe) [ 414 0 R /XYZ 65.905512 540.452840 0 ] (name-header-3) [ 231 0 R /XYZ 65.905512 595.695916 0 ] (name-input-frame-timing-key-descri) [ 305 0 R /XYZ 65.905512 734.031609 0 ] (name-input-frame-timing-key-payloa) [ 414 0 R /XYZ 65.905512 342.515916 0 ] (name-input-frame-timing-keys-3) [ 245 0 R /XYZ 65.905512 479.337762 0 ] (name-input_chunk-packet-3) [ 414 0 R /XYZ 65.905512 309.515916 0 ] (name-input_moment-packet-3) [ 426 0 R /XYZ 65.905512 571.957147 0 ] (name-introduction-3) [ 214 0 R /XYZ 65.905512 771.389764 0 ] (name-lag_frame_chunk-packet-3) [ 432 0 R /XYZ 65.905512 219.518992 0 ] (name-memory_init-packet-3) [ 369 0 R /XYZ 65.905512 422.754686 0 ] (name-motivations-3) [ 227 0 R /XYZ 65.905512 348.976531 0 ] (name-movie_file-packet-3) [ 381 0 R /XYZ 65.905512 487.475301 0 ] (name-movie_license-packet-3) [ 381 0 R /XYZ 65.905512 698.912225 0 ] (name-movie_transition-3) [ 438 0 R /XYZ 65.905512 593.932225 0 ] (name-n64-controller-types-3) [ 472 0 R /XYZ 65.905512 771.389764 0 ] (name-n64-densha-de-go-3) [ 488 0 R /XYZ 65.905512 298.524529 0 ] (name-n64-mouse-3) [ 488 0 R /XYZ 65.905512 761.270379 0 ] (name-n64-standard-controller-3) [ 472 0 R /XYZ 65.905512 745.289764 0 ] (name-n64-standard-controller-with-co) [ 480 0 R /XYZ 65.905512 439.740838 0 ] (name-n64-standard-controller-with-ru) [ 472 0 R /XYZ 65.905512 282.543914 0 ] (name-n64-standard-controller-with-tr) [ 484 0 R /XYZ 65.905512 592.315301 0 ] (name-nes-famicom-controller-types-2) [ 452 0 R /XYZ 65.905512 625.653455 0 ] (name-nes-four-score-3) [ 452 0 R /XYZ 65.905512 403.859608 0 ] (name-nes-specific-key-descriptions) [ 275 0 R /XYZ 65.905512 212.591912 0 ] (name-nes-specific-key-payload-form) [ 387 0 R /XYZ 65.905512 224.034686 0 ] (name-nes-specific-keys-3) [ 245 0 R /XYZ 65.905512 720.412225 0 ] (name-nes-standard-controller-3) [ 452 0 R /XYZ 65.905512 599.553455 0 ] (name-nes_clock_filter-packet-3) [ 396 0 R /XYZ 65.905512 639.810994 0 ] (name-nes_game_genie_code-packet-3) [ 396 0 R /XYZ 65.905512 260.175916 0 ] (name-nes_latch_filter-packet-3) [ 387 0 R /XYZ 65.905512 191.034686 0 ] (name-nes_overread-packet-3) [ 396 0 R /XYZ 65.905512 449.993455 0 ] (name-normative-references-3) [ 524 0 R /XYZ 65.905512 180.807606 0 ] (name-notation-and-vocabulary-3) [ 214 0 R /XYZ 65.905512 453.359608 0 ] (name-overview-and-preliminaries-3) [ 214 0 R /XYZ 65.905512 543.937147 0 ] (name-packet-payload-formats-3) [ 320 0 R /XYZ 65.905512 734.031609 0 ] (name-packets-3) [ 231 0 R /XYZ 65.905512 314.720223 0 ] (name-port_controller-packet-3) [ 387 0 R /XYZ 65.905512 771.389764 0 ] (name-problems-with-existing-format) [ 231 0 R /XYZ 65.905512 771.389764 0 ] (name-references-3) [ 524 0 R /XYZ 65.905512 214.827606 0 ] (name-rerecords-packet-3) [ 361 0 R /XYZ 65.905512 639.810994 0 ] (name-rom_name-packet-3) [ 331 0 R /XYZ 65.905512 382.834686 0 ] (name-snes-controller-types-3) [ 462 0 R /XYZ 65.905512 462.502068 0 ] (name-snes-mouse-3) [ 468 0 R /XYZ 65.905512 706.792840 0 ] (name-snes-specific-key-description) [ 291 0 R /XYZ 65.905512 505.740838 0 ] (name-snes-specific-key-payload-for) [ 404 0 R /XYZ 65.905512 618.072225 0 ] (name-snes-specific-keys-3) [ 245 0 R /XYZ 65.905512 626.434686 0 ] (name-snes-standard-controller-3) [ 462 0 R /XYZ 65.905512 436.402068 0 ] (name-snes_clock_filter-packet-3) [ 404 0 R /XYZ 65.905512 585.072225 0 ] (name-snes_game_genie_code-packet-3) [ 404 0 R /XYZ 65.905512 205.437147 0 ] (name-snes_latch_train-packet-reser) [ 414 0 R /XYZ 65.905512 604.572225 0 ] (name-snes_overread-packet-3) [ 404 0 R /XYZ 65.905512 395.254686 0 ] (name-source_link-packet-3) [ 361 0 R /XYZ 65.905512 463.612840 0 ] (name-table-of-contents-3) [ 6 0 R /XYZ 65.905512 513.742820 0 ] (name-tas_last_modified-packet-3) [ 351 0 R /XYZ 65.905512 771.389764 0 ] (name-total_frames-packet-3) [ 351 0 R /XYZ 65.905512 242.795301 0 ] (name-transition-packet-3) [ 432 0 R /XYZ 65.905512 734.150994 0 ] (name-unspecified-packet-3) [ 446 0 R /XYZ 65.905512 379.515916 0 ] (name-verified-packet-3) [ 369 0 R /XYZ 65.905512 612.572225 0 ] (nes_clock_filter) [ 396 0 R /XYZ 65.905512 639.810994 0 ] (nes_game_genie_code) [ 396 0 R /XYZ 65.905512 260.175916 0 ] (nes_latch_filter) [ 387 0 R /XYZ 65.905512 191.034686 0 ] (nes_overread) [ 396 0 R /XYZ 65.905512 449.993455 0 ] (port_controller) [ 387 0 R /XYZ 65.905512 771.389764 0 ] (rerecords) [ 361 0 R /XYZ 65.905512 639.810994 0 ] (rom_name) [ 331 0 R /XYZ 65.905512 382.834686 0 ] (section-1) [ 214 0 R /XYZ 65.905512 771.389764 0 ] (section-1-1) [ 214 0 R /XYZ 65.905512 723.869764 0 ] (section-1-2) [ 214 0 R /XYZ 65.905512 618.534070 0 ] (section-1-3) [ 214 0 R /XYZ 65.905512 581.295301 0 ] (section-1.1) [ 214 0 R /XYZ 65.905512 543.937147 0 ] (section-1.1-1) [ 214 0 R /XYZ 65.905512 504.337147 0 ] (section-1.1.1) [ 214 0 R /XYZ 65.905512 453.359608 0 ] (section-1.1.1-1) [ 214 0 R /XYZ 65.905512 420.359608 0 ] (section-1.1.1-10) [ 225 0 R /XYZ 65.905512 622.434686 0 ] (section-1.1.1-10.1) [ 225 0 R /XYZ 65.905512 622.434686 0 ] (section-1.1.1-10.2) [ 225 0 R /XYZ 80.905512 622.434686 0 ] (section-1.1.1-10.3) [ 225 0 R /XYZ 65.905512 600.815301 0 ] (section-1.1.1-10.4) [ 225 0 R /XYZ 80.905512 600.815301 0 ] (section-1.1.1-10.5) [ 225 0 R /XYZ 65.905512 579.195916 0 ] (section-1.1.1-10.6) [ 225 0 R /XYZ 80.905512 579.195916 0 ] (section-1.1.1-10.7) [ 225 0 R /XYZ 65.905512 557.576531 0 ] (section-1.1.1-10.8) [ 225 0 R /XYZ 80.905512 557.576531 0 ] (section-1.1.1-11) [ 225 0 R /XYZ 65.905512 533.957147 0 ] (section-1.1.1-12) [ 225 0 R /XYZ 65.905512 510.337762 0 ] (section-1.1.1-13.1) [ 225 0 R /XYZ 85.905512 452.917762 0 ] (section-1.1.1-14) [ 225 0 R /XYZ 65.905512 429.298377 0 ] (section-1.1.1-15) [ 225 0 R /XYZ 65.905512 405.678992 0 ] (section-1.1.1-16.1) [ 225 0 R /XYZ 85.905512 348.258992 0 ] (section-1.1.1-17) [ 225 0 R /XYZ 65.905512 324.639608 0 ] (section-1.1.1-18) [ 225 0 R /XYZ 65.905512 301.020223 0 ] (section-1.1.1-19.1) [ 225 0 R /XYZ 85.905512 243.600223 0 ] (section-1.1.1-2.1) [ 214 0 R /XYZ 85.905512 396.740223 0 ] (section-1.1.1-2.2) [ 214 0 R /XYZ 85.905512 378.120838 0 ] (section-1.1.1-2.3) [ 214 0 R /XYZ 85.905512 359.501453 0 ] (section-1.1.1-2.4) [ 214 0 R /XYZ 85.905512 340.882068 0 ] (section-1.1.1-2.5) [ 214 0 R /XYZ 85.905512 322.262684 0 ] (section-1.1.1-20) [ 227 0 R /XYZ 65.905512 771.389764 0 ] (section-1.1.1-21.1) [ 227 0 R /XYZ 85.905512 713.969764 0 ] (section-1.1.1-22) [ 227 0 R /XYZ 65.905512 676.730994 0 ] (section-1.1.1-23) [ 227 0 R /XYZ 65.905512 639.492225 0 ] (section-1.1.1-24.1) [ 227 0 R /XYZ 85.905512 571.432225 0 ] (section-1.1.1-25) [ 227 0 R /XYZ 65.905512 534.193455 0 ] (section-1.1.1-26) [ 227 0 R /XYZ 65.905512 510.574070 0 ] (section-1.1.1-27.1) [ 227 0 R /XYZ 85.905512 399.954070 0 ] (section-1.1.1-3) [ 214 0 R /XYZ 65.905512 298.643299 0 ] (section-1.1.1-4) [ 214 0 R /XYZ 65.905512 275.023914 0 ] (section-1.1.1-5) [ 214 0 R /XYZ 65.905512 251.404529 0 ] (section-1.1.1-6) [ 214 0 R /XYZ 65.905512 214.165760 0 ] (section-1.1.1-7) [ 225 0 R /XYZ 65.905512 771.389764 0 ] (section-1.1.1-8) [ 225 0 R /XYZ 65.905512 706.912225 0 ] (section-1.1.1-9) [ 225 0 R /XYZ 65.905512 656.054070 0 ] (section-1.2) [ 227 0 R /XYZ 65.905512 348.976531 0 ] (section-1.2-1) [ 227 0 R /XYZ 65.905512 309.376531 0 ] (section-1.2-2.1) [ 227 0 R /XYZ 85.905512 272.137762 0 ] (section-1.2-2.2) [ 227 0 R /XYZ 85.905512 256.018377 0 ] (section-1.2-2.3) [ 227 0 R /XYZ 85.905512 239.898992 0 ] (section-1.2-2.4) [ 227 0 R /XYZ 85.905512 223.779608 0 ] (section-1.2-3) [ 227 0 R /XYZ 65.905512 200.160223 0 ] (section-1.2.1) [ 231 0 R /XYZ 65.905512 771.389764 0 ] (section-1.2.1-1) [ 231 0 R /XYZ 65.905512 738.389764 0 ] (section-1.2.1-2) [ 231 0 R /XYZ 65.905512 646.673455 0 ] (section-2) [ 231 0 R /XYZ 65.905512 595.695916 0 ] (section-2-1) [ 231 0 R /XYZ 65.905512 548.175916 0 ] (section-2-2) [ 231 0 R /XYZ 65.905512 524.556531 0 ] (section-2-3) [ 231 0 R /XYZ 65.905512 408.936531 0 ] (section-2-3.1) [ 231 0 R /XYZ 65.905512 408.936531 0 ] (section-2-3.2) [ 231 0 R /XYZ 80.905512 395.317147 0 ] (section-2-3.3) [ 231 0 R /XYZ 65.905512 373.697762 0 ] (section-2-3.4) [ 231 0 R /XYZ 80.905512 360.078377 0 ] (section-2-3.5) [ 231 0 R /XYZ 65.905512 338.458992 0 ] (section-2-3.6) [ 231 0 R /XYZ 80.905512 324.839608 0 ] (section-3) [ 231 0 R /XYZ 65.905512 314.720223 0 ] (section-3-1) [ 231 0 R /XYZ 65.905512 267.200223 0 ] (section-3-2) [ 239 0 R /XYZ 65.905512 771.389764 0 ] (section-3-3) [ 239 0 R /XYZ 65.905512 655.769764 0 ] (section-3-3.1) [ 239 0 R /XYZ 65.905512 655.769764 0 ] (section-3-3.10) [ 239 0 R /XYZ 80.905512 501.195301 0 ] (section-3-3.2) [ 239 0 R /XYZ 80.905512 642.150379 0 ] (section-3-3.3) [ 239 0 R /XYZ 65.905512 620.530994 0 ] (section-3-3.4) [ 239 0 R /XYZ 80.905512 606.911609 0 ] (section-3-3.5) [ 239 0 R /XYZ 65.905512 585.292225 0 ] (section-3-3.6) [ 239 0 R /XYZ 80.905512 571.672840 0 ] (section-3-3.7) [ 239 0 R /XYZ 65.905512 550.053455 0 ] (section-3-3.8) [ 239 0 R /XYZ 80.905512 536.434070 0 ] (section-3-3.9) [ 239 0 R /XYZ 65.905512 514.814686 0 ] (section-3-4) [ 239 0 R /XYZ 65.905512 477.575916 0 ] (section-3.1) [ 239 0 R /XYZ 65.905512 467.456531 0 ] (section-3.1.1) [ 239 0 R /XYZ 65.905512 441.356531 0 ] (section-3.1.1-1) [ 239 0 R /XYZ 65.905512 398.356531 0 ] (section-3.1.1-1.1) [ 239 0 R /XYZ 65.905512 398.356531 0 ] (section-3.1.1-1.10) [ 239 0 R /XYZ 80.905512 343.878992 0 ] (section-3.1.1-1.11) [ 239 0 R /XYZ 65.905512 330.259608 0 ] (section-3.1.1-1.12) [ 239 0 R /XYZ 80.905512 330.259608 0 ] (section-3.1.1-1.13) [ 239 0 R /XYZ 65.905512 316.640223 0 ] (section-3.1.1-1.14) [ 239 0 R /XYZ 80.905512 316.640223 0 ] (section-3.1.1-1.15) [ 239 0 R /XYZ 65.905512 303.020838 0 ] (section-3.1.1-1.16) [ 239 0 R /XYZ 80.905512 303.020838 0 ] (section-3.1.1-1.17) [ 239 0 R /XYZ 65.905512 289.401453 0 ] (section-3.1.1-1.18) [ 239 0 R /XYZ 80.905512 289.401453 0 ] (section-3.1.1-1.19) [ 239 0 R /XYZ 65.905512 275.782068 0 ] (section-3.1.1-1.2) [ 239 0 R /XYZ 80.905512 398.356531 0 ] (section-3.1.1-1.20) [ 239 0 R /XYZ 80.905512 275.782068 0 ] (section-3.1.1-1.21) [ 239 0 R /XYZ 65.905512 262.162684 0 ] (section-3.1.1-1.22) [ 239 0 R /XYZ 80.905512 262.162684 0 ] (section-3.1.1-1.23) [ 239 0 R /XYZ 65.905512 248.543299 0 ] (section-3.1.1-1.24) [ 239 0 R /XYZ 80.905512 248.543299 0 ] (section-3.1.1-1.25) [ 239 0 R /XYZ 65.905512 234.923914 0 ] (section-3.1.1-1.26) [ 239 0 R /XYZ 80.905512 234.923914 0 ] (section-3.1.1-1.27) [ 239 0 R /XYZ 65.905512 221.304529 0 ] (section-3.1.1-1.28) [ 239 0 R /XYZ 80.905512 221.304529 0 ] (section-3.1.1-1.29) [ 239 0 R /XYZ 65.905512 207.685145 0 ] (section-3.1.1-1.3) [ 239 0 R /XYZ 65.905512 384.737147 0 ] (section-3.1.1-1.30) [ 239 0 R /XYZ 80.905512 207.685145 0 ] (section-3.1.1-1.31) [ 239 0 R /XYZ 65.905512 194.065760 0 ] (section-3.1.1-1.32) [ 239 0 R /XYZ 80.905512 194.065760 0 ] (section-3.1.1-1.33) [ 239 0 R /XYZ 65.905512 180.446375 0 ] (section-3.1.1-1.34) [ 239 0 R /XYZ 80.905512 180.446375 0 ] (section-3.1.1-1.35) [ 239 0 R /XYZ 65.905512 166.826990 0 ] (section-3.1.1-1.36) [ 239 0 R /XYZ 80.905512 166.826990 0 ] (section-3.1.1-1.37) [ 245 0 R /XYZ 65.905512 771.389764 0 ] (section-3.1.1-1.38) [ 245 0 R /XYZ 80.905512 771.389764 0 ] (section-3.1.1-1.39) [ 245 0 R /XYZ 65.905512 757.770379 0 ] (section-3.1.1-1.4) [ 239 0 R /XYZ 80.905512 384.737147 0 ] (section-3.1.1-1.40) [ 245 0 R /XYZ 80.905512 757.770379 0 ] (section-3.1.1-1.41) [ 245 0 R /XYZ 65.905512 744.150994 0 ] (section-3.1.1-1.42) [ 245 0 R /XYZ 80.905512 744.150994 0 ] (section-3.1.1-1.43) [ 245 0 R /XYZ 65.905512 730.531609 0 ] (section-3.1.1-1.44) [ 245 0 R /XYZ 80.905512 730.531609 0 ] (section-3.1.1-1.5) [ 239 0 R /XYZ 65.905512 371.117762 0 ] (section-3.1.1-1.6) [ 239 0 R /XYZ 80.905512 371.117762 0 ] (section-3.1.1-1.7) [ 239 0 R /XYZ 65.905512 357.498377 0 ] (section-3.1.1-1.8) [ 239 0 R /XYZ 80.905512 357.498377 0 ] (section-3.1.1-1.9) [ 239 0 R /XYZ 65.905512 343.878992 0 ] (section-3.1.2) [ 245 0 R /XYZ 65.905512 720.412225 0 ] (section-3.1.2-1) [ 245 0 R /XYZ 65.905512 677.412225 0 ] (section-3.1.2-1.1) [ 245 0 R /XYZ 65.905512 677.412225 0 ] (section-3.1.2-1.2) [ 245 0 R /XYZ 80.905512 677.412225 0 ] (section-3.1.2-1.3) [ 245 0 R /XYZ 65.905512 663.792840 0 ] (section-3.1.2-1.4) [ 245 0 R /XYZ 80.905512 663.792840 0 ] (section-3.1.2-1.5) [ 245 0 R /XYZ 65.905512 650.173455 0 ] (section-3.1.2-1.6) [ 245 0 R /XYZ 80.905512 650.173455 0 ] (section-3.1.2-1.7) [ 245 0 R /XYZ 65.905512 636.554070 0 ] (section-3.1.2-1.8) [ 245 0 R /XYZ 80.905512 636.554070 0 ] (section-3.1.3) [ 245 0 R /XYZ 65.905512 626.434686 0 ] (section-3.1.3-1) [ 245 0 R /XYZ 65.905512 583.434686 0 ] (section-3.1.3-1.1) [ 245 0 R /XYZ 65.905512 583.434686 0 ] (section-3.1.3-1.2) [ 245 0 R /XYZ 80.905512 583.434686 0 ] (section-3.1.3-1.3) [ 245 0 R /XYZ 65.905512 569.815301 0 ] (section-3.1.3-1.4) [ 245 0 R /XYZ 80.905512 569.815301 0 ] (section-3.1.3-1.5) [ 245 0 R /XYZ 65.905512 556.195916 0 ] (section-3.1.3-1.6) [ 245 0 R /XYZ 80.905512 556.195916 0 ] (section-3.1.3-1.7) [ 245 0 R /XYZ 65.905512 542.576531 0 ] (section-3.1.3-1.8) [ 245 0 R /XYZ 80.905512 542.576531 0 ] (section-3.1.4) [ 245 0 R /XYZ 65.905512 532.457147 0 ] (section-3.1.4-1) [ 245 0 R /XYZ 65.905512 489.457147 0 ] (section-3.1.4-1.1) [ 245 0 R /XYZ 65.905512 489.457147 0 ] (section-3.1.4-1.2) [ 245 0 R /XYZ 80.905512 489.457147 0 ] (section-3.1.5) [ 245 0 R /XYZ 65.905512 479.337762 0 ] (section-3.1.5-1) [ 245 0 R /XYZ 65.905512 436.337762 0 ] (section-3.1.5-1.1) [ 245 0 R /XYZ 65.905512 436.337762 0 ] (section-3.1.5-1.10) [ 245 0 R /XYZ 80.905512 381.860223 0 ] (section-3.1.5-1.2) [ 245 0 R /XYZ 80.905512 436.337762 0 ] (section-3.1.5-1.3) [ 245 0 R /XYZ 65.905512 422.718377 0 ] (section-3.1.5-1.4) [ 245 0 R /XYZ 80.905512 422.718377 0 ] (section-3.1.5-1.5) [ 245 0 R /XYZ 65.905512 409.098992 0 ] (section-3.1.5-1.6) [ 245 0 R /XYZ 80.905512 409.098992 0 ] (section-3.1.5-1.7) [ 245 0 R /XYZ 65.905512 395.479608 0 ] (section-3.1.5-1.8) [ 245 0 R /XYZ 80.905512 395.479608 0 ] (section-3.1.5-1.9) [ 245 0 R /XYZ 65.905512 381.860223 0 ] (section-3.1.6) [ 245 0 R /XYZ 65.905512 371.740838 0 ] (section-3.1.6-1) [ 245 0 R /XYZ 65.905512 328.740838 0 ] (section-3.1.6-1.1) [ 245 0 R /XYZ 65.905512 328.740838 0 ] (section-3.1.6-1.2) [ 245 0 R /XYZ 80.905512 328.740838 0 ] (section-3.1.6-1.3) [ 245 0 R /XYZ 65.905512 315.121453 0 ] (section-3.1.6-1.4) [ 245 0 R /XYZ 80.905512 315.121453 0 ] (section-3.1.6-1.5) [ 245 0 R /XYZ 65.905512 301.502068 0 ] (section-3.1.6-1.6) [ 245 0 R /XYZ 80.905512 301.502068 0 ] (section-3.2) [ 245 0 R /XYZ 65.905512 291.382684 0 ] (section-3.2.1) [ 245 0 R /XYZ 65.905512 265.282684 0 ] (section-3.2.1-1) [ 245 0 R /XYZ 65.905512 222.282684 0 ] (section-3.2.1-1.1) [ 245 0 R /XYZ 65.905512 222.282684 0 ] (section-3.2.1-1.10) [ 262 0 R /XYZ 80.905512 611.195916 0 ] (section-3.2.1-1.11) [ 262 0 R /XYZ 65.905512 562.337762 0 ] (section-3.2.1-1.12) [ 262 0 R /XYZ 80.905512 548.718377 0 ] (section-3.2.1-1.13) [ 262 0 R /XYZ 65.905512 513.479608 0 ] (section-3.2.1-1.14) [ 262 0 R /XYZ 80.905512 499.860223 0 ] (section-3.2.1-1.15) [ 262 0 R /XYZ 65.905512 451.002068 0 ] (section-3.2.1-1.16) [ 262 0 R /XYZ 80.905512 437.382684 0 ] (section-3.2.1-1.17) [ 262 0 R /XYZ 65.905512 388.524529 0 ] (section-3.2.1-1.18) [ 262 0 R /XYZ 80.905512 374.905145 0 ] (section-3.2.1-1.19) [ 262 0 R /XYZ 65.905512 326.046990 0 ] (section-3.2.1-1.2) [ 245 0 R /XYZ 80.905512 208.663299 0 ] (section-3.2.1-1.20) [ 262 0 R /XYZ 80.905512 312.427606 0 ] (section-3.2.1-1.21) [ 262 0 R /XYZ 65.905512 263.569451 0 ] (section-3.2.1-1.22) [ 262 0 R /XYZ 80.905512 249.950067 0 ] (section-3.2.1-1.23) [ 262 0 R /XYZ 65.905512 201.091912 0 ] (section-3.2.1-1.24) [ 262 0 R /XYZ 80.905512 187.472527 0 ] (section-3.2.1-1.25) [ 275 0 R /XYZ 65.905512 771.389764 0 ] (section-3.2.1-1.26) [ 275 0 R /XYZ 80.905512 757.770379 0 ] (section-3.2.1-1.27) [ 275 0 R /XYZ 65.905512 708.912225 0 ] (section-3.2.1-1.28) [ 275 0 R /XYZ 80.905512 695.292840 0 ] (section-3.2.1-1.29) [ 275 0 R /XYZ 65.905512 646.434686 0 ] (section-3.2.1-1.3) [ 262 0 R /XYZ 65.905512 771.389764 0 ] (section-3.2.1-1.30) [ 275 0 R /XYZ 80.905512 632.815301 0 ] (section-3.2.1-1.31) [ 275 0 R /XYZ 65.905512 597.576531 0 ] (section-3.2.1-1.32) [ 275 0 R /XYZ 80.905512 583.957147 0 ] (section-3.2.1-1.33) [ 275 0 R /XYZ 65.905512 535.098992 0 ] (section-3.2.1-1.34) [ 275 0 R /XYZ 80.905512 521.479608 0 ] (section-3.2.1-1.35) [ 275 0 R /XYZ 65.905512 472.621453 0 ] (section-3.2.1-1.36) [ 275 0 R /XYZ 80.905512 459.002068 0 ] (section-3.2.1-1.37) [ 275 0 R /XYZ 65.905512 423.763299 0 ] (section-3.2.1-1.38) [ 275 0 R /XYZ 80.905512 410.143914 0 ] (section-3.2.1-1.39) [ 275 0 R /XYZ 65.905512 361.285760 0 ] (section-3.2.1-1.4) [ 262 0 R /XYZ 80.905512 757.770379 0 ] (section-3.2.1-1.40) [ 275 0 R /XYZ 80.905512 347.666375 0 ] (section-3.2.1-1.41) [ 275 0 R /XYZ 65.905512 312.427606 0 ] (section-3.2.1-1.42) [ 275 0 R /XYZ 80.905512 298.808221 0 ] (section-3.2.1-1.43) [ 275 0 R /XYZ 65.905512 263.569451 0 ] (section-3.2.1-1.44) [ 275 0 R /XYZ 80.905512 249.950067 0 ] (section-3.2.1-1.5) [ 262 0 R /XYZ 65.905512 722.531609 0 ] (section-3.2.1-1.6) [ 262 0 R /XYZ 80.905512 708.912225 0 ] (section-3.2.1-1.7) [ 262 0 R /XYZ 65.905512 673.673455 0 ] (section-3.2.1-1.8) [ 262 0 R /XYZ 80.905512 660.054070 0 ] (section-3.2.1-1.9) [ 262 0 R /XYZ 65.905512 624.815301 0 ] (section-3.2.2) [ 275 0 R /XYZ 65.905512 212.591912 0 ] (section-3.2.2-1) [ 291 0 R /XYZ 65.905512 771.389764 0 ] (section-3.2.2-1.1) [ 291 0 R /XYZ 65.905512 771.389764 0 ] (section-3.2.2-1.2) [ 291 0 R /XYZ 80.905512 757.770379 0 ] (section-3.2.2-1.3) [ 291 0 R /XYZ 65.905512 695.292840 0 ] (section-3.2.2-1.4) [ 291 0 R /XYZ 80.905512 681.673455 0 ] (section-3.2.2-1.5) [ 291 0 R /XYZ 65.905512 619.195916 0 ] (section-3.2.2-1.6) [ 291 0 R /XYZ 80.905512 605.576531 0 ] (section-3.2.2-1.7) [ 291 0 R /XYZ 65.905512 543.098992 0 ] (section-3.2.2-1.8) [ 291 0 R /XYZ 80.905512 529.479608 0 ] (section-3.2.3) [ 291 0 R /XYZ 65.905512 505.740838 0 ] (section-3.2.3-1) [ 291 0 R /XYZ 65.905512 462.740838 0 ] (section-3.2.3-1.1) [ 291 0 R /XYZ 65.905512 462.740838 0 ] (section-3.2.3-1.2) [ 291 0 R /XYZ 80.905512 449.121453 0 ] (section-3.2.3-1.3) [ 291 0 R /XYZ 65.905512 386.643914 0 ] (section-3.2.3-1.4) [ 291 0 R /XYZ 80.905512 373.024529 0 ] (section-3.2.3-1.5) [ 291 0 R /XYZ 65.905512 310.546990 0 ] (section-3.2.3-1.6) [ 291 0 R /XYZ 80.905512 296.927606 0 ] (section-3.2.3-1.7) [ 291 0 R /XYZ 65.905512 261.688836 0 ] (section-3.2.3-1.8) [ 291 0 R /XYZ 80.905512 248.069451 0 ] (section-3.2.4) [ 291 0 R /XYZ 65.905512 224.330682 0 ] (section-3.2.4-1) [ 305 0 R /XYZ 65.905512 771.389764 0 ] (section-3.2.4-1.1) [ 305 0 R /XYZ 65.905512 771.389764 0 ] (section-3.2.4-1.2) [ 305 0 R /XYZ 80.905512 757.770379 0 ] (section-3.2.5) [ 305 0 R /XYZ 65.905512 734.031609 0 ] (section-3.2.5-1) [ 305 0 R /XYZ 65.905512 691.031609 0 ] (section-3.2.5-1.1) [ 305 0 R /XYZ 65.905512 691.031609 0 ] (section-3.2.5-1.10) [ 305 0 R /XYZ 80.905512 359.405145 0 ] (section-3.2.5-1.2) [ 305 0 R /XYZ 80.905512 677.412225 0 ] (section-3.2.5-1.3) [ 305 0 R /XYZ 65.905512 587.695916 0 ] (section-3.2.5-1.4) [ 305 0 R /XYZ 80.905512 574.076531 0 ] (section-3.2.5-1.5) [ 305 0 R /XYZ 65.905512 497.979608 0 ] (section-3.2.5-1.6) [ 305 0 R /XYZ 80.905512 484.360223 0 ] (section-3.2.5-1.7) [ 305 0 R /XYZ 65.905512 435.502068 0 ] (section-3.2.5-1.8) [ 305 0 R /XYZ 80.905512 421.882684 0 ] (section-3.2.5-1.9) [ 305 0 R /XYZ 65.905512 373.024529 0 ] (section-3.2.6) [ 305 0 R /XYZ 65.905512 322.046990 0 ] (section-3.2.6-1) [ 305 0 R /XYZ 65.905512 279.046990 0 ] (section-3.2.6-1.1) [ 305 0 R /XYZ 65.905512 279.046990 0 ] (section-3.2.6-1.2) [ 305 0 R /XYZ 80.905512 265.427606 0 ] (section-3.2.6-1.3) [ 305 0 R /XYZ 65.905512 230.188836 0 ] (section-3.2.6-1.4) [ 305 0 R /XYZ 80.905512 216.569451 0 ] (section-3.2.6-1.5) [ 320 0 R /XYZ 65.905512 771.389764 0 ] (section-3.2.6-1.6) [ 320 0 R /XYZ 80.905512 757.770379 0 ] (section-3.3) [ 320 0 R /XYZ 65.905512 734.031609 0 ] (section-3.3.1) [ 320 0 R /XYZ 65.905512 707.931609 0 ] (section-3.3.1.1) [ 320 0 R /XYZ 65.905512 674.931609 0 ] (section-3.3.1.1-1) [ 320 0 R /XYZ 65.905512 653.931609 0 ] (section-3.3.1.1-2) [ 320 0 R /XYZ 65.905512 630.312225 0 ] (section-3.3.1.1-3) [ 320 0 R /XYZ 65.905512 418.932225 0 ] (section-3.3.1.1-3.1) [ 320 0 R /XYZ 65.905512 418.932225 0 ] (section-3.3.1.1-3.2) [ 320 0 R /XYZ 80.905512 405.312840 0 ] (section-3.3.1.1-3.3) [ 320 0 R /XYZ 65.905512 370.074070 0 ] (section-3.3.1.1-3.4) [ 320 0 R /XYZ 80.905512 356.454686 0 ] (section-3.3.1.1-3.5) [ 320 0 R /XYZ 65.905512 334.835301 0 ] (section-3.3.1.1-3.6) [ 320 0 R /XYZ 80.905512 321.215916 0 ] (section-3.3.1.10) [ 351 0 R /XYZ 65.905512 771.389764 0 ] (section-3.3.1.10-1) [ 351 0 R /XYZ 65.905512 750.389764 0 ] (section-3.3.1.10-2) [ 351 0 R /XYZ 65.905512 726.770379 0 ] (section-3.3.1.10-3) [ 351 0 R /XYZ 65.905512 632.430379 0 ] (section-3.3.1.10-3.1) [ 351 0 R /XYZ 65.905512 632.430379 0 ] (section-3.3.1.10-3.2) [ 351 0 R /XYZ 80.905512 618.810994 0 ] (section-3.3.1.11) [ 351 0 R /XYZ 65.905512 595.191609 0 ] (section-3.3.1.11-1) [ 351 0 R /XYZ 65.905512 574.191609 0 ] (section-3.3.1.11-2) [ 351 0 R /XYZ 65.905512 550.572225 0 ] (section-3.3.1.11-3) [ 351 0 R /XYZ 65.905512 456.232225 0 ] (section-3.3.1.11-3.1) [ 351 0 R /XYZ 65.905512 456.232225 0 ] (section-3.3.1.11-3.2) [ 351 0 R /XYZ 80.905512 442.612840 0 ] (section-3.3.1.12) [ 351 0 R /XYZ 65.905512 418.993455 0 ] (section-3.3.1.12-1) [ 351 0 R /XYZ 65.905512 397.993455 0 ] (section-3.3.1.12-2) [ 351 0 R /XYZ 65.905512 374.374070 0 ] (section-3.3.1.12-3) [ 351 0 R /XYZ 65.905512 280.034070 0 ] (section-3.3.1.12-3.1) [ 351 0 R /XYZ 65.905512 280.034070 0 ] (section-3.3.1.12-3.2) [ 351 0 R /XYZ 80.905512 266.414686 0 ] (section-3.3.1.13) [ 351 0 R /XYZ 65.905512 242.795301 0 ] (section-3.3.1.13-1) [ 351 0 R /XYZ 65.905512 221.795301 0 ] (section-3.3.1.13-2) [ 361 0 R /XYZ 65.905512 771.389764 0 ] (section-3.3.1.13-3) [ 361 0 R /XYZ 65.905512 677.049764 0 ] (section-3.3.1.13-3.1) [ 361 0 R /XYZ 65.905512 677.049764 0 ] (section-3.3.1.13-3.2) [ 361 0 R /XYZ 80.905512 663.430379 0 ] (section-3.3.1.14) [ 361 0 R /XYZ 65.905512 639.810994 0 ] (section-3.3.1.14-1) [ 361 0 R /XYZ 65.905512 618.810994 0 ] (section-3.3.1.14-2) [ 361 0 R /XYZ 65.905512 595.191609 0 ] (section-3.3.1.14-3) [ 361 0 R /XYZ 65.905512 500.851609 0 ] (section-3.3.1.14-3.1) [ 361 0 R /XYZ 65.905512 500.851609 0 ] (section-3.3.1.14-3.2) [ 361 0 R /XYZ 80.905512 487.232225 0 ] (section-3.3.1.15) [ 361 0 R /XYZ 65.905512 463.612840 0 ] (section-3.3.1.15-1) [ 361 0 R /XYZ 65.905512 442.612840 0 ] (section-3.3.1.15-2) [ 361 0 R /XYZ 65.905512 418.993455 0 ] (section-3.3.1.15-3) [ 361 0 R /XYZ 65.905512 324.653455 0 ] (section-3.3.1.15-3.1) [ 361 0 R /XYZ 65.905512 324.653455 0 ] (section-3.3.1.15-3.2) [ 361 0 R /XYZ 80.905512 311.034070 0 ] (section-3.3.1.15-3.3) [ 361 0 R /XYZ 65.905512 289.414686 0 ] (section-3.3.1.15-3.4) [ 361 0 R /XYZ 80.905512 275.795301 0 ] (section-3.3.1.16) [ 361 0 R /XYZ 65.905512 252.175916 0 ] (section-3.3.1.16-1) [ 361 0 R /XYZ 65.905512 231.175916 0 ] (section-3.3.1.16-2) [ 369 0 R /XYZ 65.905512 771.389764 0 ] (section-3.3.1.16-3) [ 369 0 R /XYZ 65.905512 677.049764 0 ] (section-3.3.1.16-3.1) [ 369 0 R /XYZ 65.905512 677.049764 0 ] (section-3.3.1.16-3.2) [ 369 0 R /XYZ 80.905512 663.430379 0 ] (section-3.3.1.17) [ 369 0 R /XYZ 65.905512 612.572225 0 ] (section-3.3.1.17-1) [ 369 0 R /XYZ 65.905512 591.572225 0 ] (section-3.3.1.17-2) [ 369 0 R /XYZ 65.905512 567.952840 0 ] (section-3.3.1.17-3) [ 369 0 R /XYZ 65.905512 473.612840 0 ] (section-3.3.1.17-3.1) [ 369 0 R /XYZ 65.905512 473.612840 0 ] (section-3.3.1.17-3.2) [ 369 0 R /XYZ 80.905512 459.993455 0 ] (section-3.3.1.18) [ 369 0 R /XYZ 65.905512 422.754686 0 ] (section-3.3.1.18-1) [ 369 0 R /XYZ 65.905512 401.754686 0 ] (section-3.3.1.18-2) [ 375 0 R /XYZ 65.905512 771.389764 0 ] (section-3.3.1.18-3) [ 375 0 R /XYZ 65.905512 347.209764 0 ] (section-3.3.1.18-3.1) [ 375 0 R /XYZ 65.905512 347.209764 0 ] (section-3.3.1.18-3.10) [ 377 0 R /XYZ 80.905512 757.770379 0 ] (section-3.3.1.18-3.11) [ 377 0 R /XYZ 65.905512 722.531609 0 ] (section-3.3.1.18-3.12) [ 377 0 R /XYZ 80.905512 708.912225 0 ] (section-3.3.1.18-3.13) [ 377 0 R /XYZ 65.905512 673.673455 0 ] (section-3.3.1.18-3.14) [ 377 0 R /XYZ 80.905512 660.054070 0 ] (section-3.3.1.18-3.2) [ 375 0 R /XYZ 80.905512 333.590379 0 ] (section-3.3.1.18-3.3) [ 375 0 R /XYZ 65.905512 298.351609 0 ] (section-3.3.1.18-3.4) [ 375 0 R /XYZ 80.905512 284.732225 0 ] (section-3.3.1.18-3.5) [ 375 0 R /XYZ 65.905512 263.112840 0 ] (section-3.3.1.18-3.6) [ 375 0 R /XYZ 80.905512 249.493455 0 ] (section-3.3.1.18-3.7) [ 375 0 R /XYZ 65.905512 214.254686 0 ] (section-3.3.1.18-3.8) [ 375 0 R /XYZ 80.905512 200.635301 0 ] (section-3.3.1.18-3.9) [ 377 0 R /XYZ 65.905512 771.389764 0 ] (section-3.3.1.19) [ 377 0 R /XYZ 65.905512 636.434686 0 ] (section-3.3.1.19-1) [ 377 0 R /XYZ 65.905512 615.434686 0 ] (section-3.3.1.19-2) [ 377 0 R /XYZ 65.905512 591.815301 0 ] (section-3.3.1.19-3) [ 377 0 R /XYZ 65.905512 231.475301 0 ] (section-3.3.1.19-3.1) [ 377 0 R /XYZ 65.905512 231.475301 0 ] (section-3.3.1.19-3.2) [ 377 0 R /XYZ 80.905512 217.855916 0 ] (section-3.3.1.19-3.3) [ 377 0 R /XYZ 65.905512 196.236531 0 ] (section-3.3.1.19-3.4) [ 377 0 R /XYZ 80.905512 182.617147 0 ] (section-3.3.1.19-3.5) [ 381 0 R /XYZ 65.905512 771.389764 0 ] (section-3.3.1.19-3.6) [ 381 0 R /XYZ 80.905512 757.770379 0 ] (section-3.3.1.19-3.7) [ 381 0 R /XYZ 65.905512 736.150994 0 ] (section-3.3.1.19-3.8) [ 381 0 R /XYZ 80.905512 722.531609 0 ] (section-3.3.1.2) [ 320 0 R /XYZ 65.905512 297.596531 0 ] (section-3.3.1.2-1) [ 320 0 R /XYZ 65.905512 276.596531 0 ] (section-3.3.1.2-2) [ 331 0 R /XYZ 65.905512 771.389764 0 ] (section-3.3.1.2-3) [ 331 0 R /XYZ 65.905512 645.129764 0 ] (section-3.3.1.2-3.1) [ 331 0 R /XYZ 65.905512 645.129764 0 ] (section-3.3.1.2-3.2) [ 331 0 R /XYZ 80.905512 631.510379 0 ] (section-3.3.1.20) [ 381 0 R /XYZ 65.905512 698.912225 0 ] (section-3.3.1.20-1) [ 381 0 R /XYZ 65.905512 677.912225 0 ] (section-3.3.1.20-2) [ 381 0 R /XYZ 65.905512 654.292840 0 ] (section-3.3.1.20-3) [ 381 0 R /XYZ 65.905512 559.952840 0 ] (section-3.3.1.20-3.1) [ 381 0 R /XYZ 65.905512 559.952840 0 ] (section-3.3.1.20-3.2) [ 381 0 R /XYZ 80.905512 546.333455 0 ] (section-3.3.1.20-3.3) [ 381 0 R /XYZ 65.905512 524.714070 0 ] (section-3.3.1.20-3.4) [ 381 0 R /XYZ 80.905512 511.094686 0 ] (section-3.3.1.21) [ 381 0 R /XYZ 65.905512 487.475301 0 ] (section-3.3.1.21-1) [ 381 0 R /XYZ 65.905512 466.475301 0 ] (section-3.3.1.21-2) [ 381 0 R /XYZ 65.905512 442.855916 0 ] (section-3.3.1.21-3) [ 381 0 R /XYZ 65.905512 316.595916 0 ] (section-3.3.1.21-3.1) [ 381 0 R /XYZ 65.905512 316.595916 0 ] (section-3.3.1.21-3.2) [ 381 0 R /XYZ 80.905512 302.976531 0 ] (section-3.3.1.21-3.3) [ 381 0 R /XYZ 65.905512 281.357147 0 ] (section-3.3.1.21-3.4) [ 381 0 R /XYZ 80.905512 267.737762 0 ] (section-3.3.1.21-3.5) [ 381 0 R /XYZ 65.905512 232.498992 0 ] (section-3.3.1.21-3.6) [ 381 0 R /XYZ 80.905512 218.879608 0 ] (section-3.3.1.21-3.7) [ 381 0 R /XYZ 65.905512 197.260223 0 ] (section-3.3.1.21-3.8) [ 381 0 R /XYZ 80.905512 183.640838 0 ] (section-3.3.1.22) [ 387 0 R /XYZ 65.905512 771.389764 0 ] (section-3.3.1.22-1) [ 387 0 R /XYZ 65.905512 750.389764 0 ] (section-3.3.1.22-2) [ 387 0 R /XYZ 65.905512 726.770379 0 ] (section-3.3.1.22-3) [ 387 0 R /XYZ 65.905512 323.870379 0 ] (section-3.3.1.22-3.1) [ 387 0 R /XYZ 65.905512 323.870379 0 ] (section-3.3.1.22-3.2) [ 387 0 R /XYZ 80.905512 310.250994 0 ] (section-3.3.1.22-3.3) [ 387 0 R /XYZ 65.905512 288.631609 0 ] (section-3.3.1.22-3.4) [ 387 0 R /XYZ 80.905512 275.012225 0 ] (section-3.3.1.3) [ 331 0 R /XYZ 65.905512 594.271609 0 ] (section-3.3.1.3-1) [ 331 0 R /XYZ 65.905512 573.271609 0 ] (section-3.3.1.3-2) [ 331 0 R /XYZ 65.905512 549.652225 0 ] (section-3.3.1.3-3) [ 331 0 R /XYZ 65.905512 455.312225 0 ] (section-3.3.1.3-3.1) [ 331 0 R /XYZ 65.905512 455.312225 0 ] (section-3.3.1.3-3.2) [ 331 0 R /XYZ 80.905512 441.692840 0 ] (section-3.3.1.3-3.3) [ 331 0 R /XYZ 65.905512 420.073455 0 ] (section-3.3.1.3-3.4) [ 331 0 R /XYZ 80.905512 406.454070 0 ] (section-3.3.1.4) [ 331 0 R /XYZ 65.905512 382.834686 0 ] (section-3.3.1.4-1) [ 331 0 R /XYZ 65.905512 361.834686 0 ] (section-3.3.1.4-2) [ 331 0 R /XYZ 65.905512 338.215301 0 ] (section-3.3.1.4-3) [ 331 0 R /XYZ 65.905512 243.875301 0 ] (section-3.3.1.4-3.1) [ 331 0 R /XYZ 65.905512 243.875301 0 ] (section-3.3.1.4-3.2) [ 331 0 R /XYZ 80.905512 230.255916 0 ] (section-3.3.1.4-3.3) [ 331 0 R /XYZ 65.905512 208.636531 0 ] (section-3.3.1.4-3.4) [ 331 0 R /XYZ 80.905512 195.017147 0 ] (section-3.3.1.5) [ 337 0 R /XYZ 65.905512 771.389764 0 ] (section-3.3.1.5-1) [ 337 0 R /XYZ 65.905512 750.389764 0 ] (section-3.3.1.5-2) [ 337 0 R /XYZ 65.905512 726.770379 0 ] (section-3.3.1.5-3) [ 337 0 R /XYZ 65.905512 568.590379 0 ] (section-3.3.1.5-3.1) [ 337 0 R /XYZ 65.905512 568.590379 0 ] (section-3.3.1.5-3.2) [ 337 0 R /XYZ 80.905512 554.970994 0 ] (section-3.3.1.5-3.3) [ 337 0 R /XYZ 65.905512 478.874070 0 ] (section-3.3.1.5-3.4) [ 337 0 R /XYZ 80.905512 465.254686 0 ] (section-3.3.1.5-3.5) [ 337 0 R /XYZ 65.905512 443.635301 0 ] (section-3.3.1.5-3.6) [ 337 0 R /XYZ 80.905512 430.015916 0 ] (section-3.3.1.6) [ 337 0 R /XYZ 65.905512 406.396531 0 ] (section-3.3.1.6-1) [ 337 0 R /XYZ 65.905512 385.396531 0 ] (section-3.3.1.6-2) [ 337 0 R /XYZ 65.905512 361.777147 0 ] (section-3.3.1.6-3) [ 337 0 R /XYZ 65.905512 267.437147 0 ] (section-3.3.1.6-3.1) [ 337 0 R /XYZ 65.905512 267.437147 0 ] (section-3.3.1.6-3.2) [ 337 0 R /XYZ 80.905512 253.817762 0 ] (section-3.3.1.6-3.3) [ 337 0 R /XYZ 65.905512 232.198377 0 ] (section-3.3.1.6-3.4) [ 337 0 R /XYZ 80.905512 218.578992 0 ] (section-3.3.1.7) [ 337 0 R /XYZ 65.905512 194.959608 0 ] (section-3.3.1.7-1) [ 337 0 R /XYZ 65.905512 173.959608 0 ] (section-3.3.1.7-2) [ 345 0 R /XYZ 65.905512 771.389764 0 ] (section-3.3.1.7-3) [ 345 0 R /XYZ 65.905512 677.049764 0 ] (section-3.3.1.7-3.1) [ 345 0 R /XYZ 65.905512 677.049764 0 ] (section-3.3.1.7-3.2) [ 345 0 R /XYZ 80.905512 663.430379 0 ] (section-3.3.1.7-3.3) [ 345 0 R /XYZ 65.905512 628.191609 0 ] (section-3.3.1.7-3.4) [ 345 0 R /XYZ 80.905512 614.572225 0 ] (section-3.3.1.8) [ 345 0 R /XYZ 65.905512 590.952840 0 ] (section-3.3.1.8-1) [ 345 0 R /XYZ 65.905512 569.952840 0 ] (section-3.3.1.8-2) [ 345 0 R /XYZ 65.905512 546.333455 0 ] (section-3.3.1.8-3) [ 345 0 R /XYZ 65.905512 451.993455 0 ] (section-3.3.1.8-3.1) [ 345 0 R /XYZ 65.905512 451.993455 0 ] (section-3.3.1.8-3.2) [ 345 0 R /XYZ 80.905512 438.374070 0 ] (section-3.3.1.8-3.3) [ 345 0 R /XYZ 65.905512 403.135301 0 ] (section-3.3.1.8-3.4) [ 345 0 R /XYZ 80.905512 389.515916 0 ] (section-3.3.1.9) [ 345 0 R /XYZ 65.905512 365.896531 0 ] (section-3.3.1.9-1) [ 345 0 R /XYZ 65.905512 344.896531 0 ] (section-3.3.1.9-2) [ 345 0 R /XYZ 65.905512 321.277147 0 ] (section-3.3.1.9-3) [ 345 0 R /XYZ 65.905512 226.937147 0 ] (section-3.3.1.9-3.1) [ 345 0 R /XYZ 65.905512 226.937147 0 ] (section-3.3.1.9-3.2) [ 345 0 R /XYZ 80.905512 213.317762 0 ] (section-3.3.1.9-3.3) [ 345 0 R /XYZ 65.905512 178.078992 0 ] (section-3.3.1.9-3.4) [ 345 0 R /XYZ 80.905512 164.459608 0 ] (section-3.3.2) [ 387 0 R /XYZ 65.905512 224.034686 0 ] (section-3.3.2.1) [ 387 0 R /XYZ 65.905512 191.034686 0 ] (section-3.3.2.1-1) [ 387 0 R /XYZ 65.905512 170.034686 0 ] (section-3.3.2.1-2) [ 396 0 R /XYZ 65.905512 771.389764 0 ] (section-3.3.2.1-3) [ 396 0 R /XYZ 65.905512 677.049764 0 ] (section-3.3.2.1-3.1) [ 396 0 R /XYZ 65.905512 677.049764 0 ] (section-3.3.2.1-3.2) [ 396 0 R /XYZ 80.905512 663.430379 0 ] (section-3.3.2.2) [ 396 0 R /XYZ 65.905512 639.810994 0 ] (section-3.3.2.2-1) [ 396 0 R /XYZ 65.905512 618.810994 0 ] (section-3.3.2.2-2) [ 396 0 R /XYZ 65.905512 595.191609 0 ] (section-3.3.2.2-3) [ 396 0 R /XYZ 65.905512 500.851609 0 ] (section-3.3.2.2-3.1) [ 396 0 R /XYZ 65.905512 500.851609 0 ] (section-3.3.2.2-3.2) [ 396 0 R /XYZ 80.905512 487.232225 0 ] (section-3.3.2.3) [ 396 0 R /XYZ 65.905512 449.993455 0 ] (section-3.3.2.3-1) [ 396 0 R /XYZ 65.905512 428.993455 0 ] (section-3.3.2.3-2) [ 396 0 R /XYZ 65.905512 405.374070 0 ] (section-3.3.2.3-3) [ 396 0 R /XYZ 65.905512 311.034070 0 ] (section-3.3.2.3-3.1) [ 396 0 R /XYZ 65.905512 311.034070 0 ] (section-3.3.2.3-3.2) [ 396 0 R /XYZ 80.905512 297.414686 0 ] (section-3.3.2.4) [ 396 0 R /XYZ 65.905512 260.175916 0 ] (section-3.3.2.4-1) [ 396 0 R /XYZ 65.905512 239.175916 0 ] (section-3.3.2.4-2) [ 404 0 R /XYZ 65.905512 771.389764 0 ] (section-3.3.2.4-3) [ 404 0 R /XYZ 65.905512 677.049764 0 ] (section-3.3.2.4-3.1) [ 404 0 R /XYZ 65.905512 677.049764 0 ] (section-3.3.2.4-3.2) [ 404 0 R /XYZ 80.905512 663.430379 0 ] (section-3.3.2.4-3.3) [ 404 0 R /XYZ 65.905512 641.810994 0 ] (section-3.3.2.4-3.4) [ 404 0 R /XYZ 80.905512 628.191609 0 ] (section-3.3.3) [ 404 0 R /XYZ 65.905512 618.072225 0 ] (section-3.3.3.1) [ 404 0 R /XYZ 65.905512 585.072225 0 ] (section-3.3.3.1-1) [ 404 0 R /XYZ 65.905512 564.072225 0 ] (section-3.3.3.1-2) [ 404 0 R /XYZ 65.905512 540.452840 0 ] (section-3.3.3.1-3) [ 404 0 R /XYZ 65.905512 446.112840 0 ] (section-3.3.3.1-3.1) [ 404 0 R /XYZ 65.905512 446.112840 0 ] (section-3.3.3.1-3.2) [ 404 0 R /XYZ 80.905512 432.493455 0 ] (section-3.3.3.2) [ 404 0 R /XYZ 65.905512 395.254686 0 ] (section-3.3.3.2-1) [ 404 0 R /XYZ 65.905512 374.254686 0 ] (section-3.3.3.2-2) [ 404 0 R /XYZ 65.905512 350.635301 0 ] (section-3.3.3.2-3) [ 404 0 R /XYZ 65.905512 256.295301 0 ] (section-3.3.3.2-3.1) [ 404 0 R /XYZ 65.905512 256.295301 0 ] (section-3.3.3.2-3.2) [ 404 0 R /XYZ 80.905512 242.675916 0 ] (section-3.3.3.3) [ 404 0 R /XYZ 65.905512 205.437147 0 ] (section-3.3.3.3-1) [ 404 0 R /XYZ 65.905512 184.437147 0 ] (section-3.3.3.3-2) [ 414 0 R /XYZ 65.905512 771.389764 0 ] (section-3.3.3.3-3) [ 414 0 R /XYZ 65.905512 677.049764 0 ] (section-3.3.3.3-3.1) [ 414 0 R /XYZ 65.905512 677.049764 0 ] (section-3.3.3.3-3.2) [ 414 0 R /XYZ 80.905512 663.430379 0 ] (section-3.3.3.3-3.3) [ 414 0 R /XYZ 65.905512 641.810994 0 ] (section-3.3.3.3-3.4) [ 414 0 R /XYZ 80.905512 628.191609 0 ] (section-3.3.3.4) [ 414 0 R /XYZ 65.905512 604.572225 0 ] (section-3.3.3.4-1) [ 414 0 R /XYZ 65.905512 583.572225 0 ] (section-3.3.4) [ 414 0 R /XYZ 65.905512 573.452840 0 ] (section-3.3.4.1) [ 414 0 R /XYZ 65.905512 540.452840 0 ] (section-3.3.4.1-1) [ 414 0 R /XYZ 65.905512 519.452840 0 ] (section-3.3.4.1-2) [ 414 0 R /XYZ 65.905512 495.833455 0 ] (section-3.3.4.1-3) [ 414 0 R /XYZ 65.905512 401.493455 0 ] (section-3.3.4.1-3.1) [ 414 0 R /XYZ 65.905512 401.493455 0 ] (section-3.3.4.1-3.2) [ 414 0 R /XYZ 80.905512 387.874070 0 ] (section-3.3.4.1-3.3) [ 414 0 R /XYZ 65.905512 366.254686 0 ] (section-3.3.4.1-3.4) [ 414 0 R /XYZ 80.905512 352.635301 0 ] (section-3.3.5) [ 414 0 R /XYZ 65.905512 342.515916 0 ] (section-3.3.5.1) [ 414 0 R /XYZ 65.905512 309.515916 0 ] (section-3.3.5.1-1) [ 414 0 R /XYZ 65.905512 288.515916 0 ] (section-3.3.5.1-2) [ 414 0 R /XYZ 65.905512 264.896531 0 ] (section-3.3.5.1-3) [ 426 0 R /XYZ 65.905512 771.389764 0 ] (section-3.3.5.1-3.1) [ 426 0 R /XYZ 65.905512 771.389764 0 ] (section-3.3.5.1-3.2) [ 426 0 R /XYZ 80.905512 757.770379 0 ] (section-3.3.5.1-3.3) [ 426 0 R /XYZ 65.905512 736.150994 0 ] (section-3.3.5.1-3.4) [ 426 0 R /XYZ 80.905512 722.531609 0 ] (section-3.3.5.1-3.5) [ 426 0 R /XYZ 65.905512 687.292840 0 ] (section-3.3.5.1-3.6) [ 426 0 R /XYZ 80.905512 673.673455 0 ] (section-3.3.5.1-4) [ 426 0 R /XYZ 65.905512 650.054070 0 ] (section-3.3.5.2) [ 426 0 R /XYZ 65.905512 571.957147 0 ] (section-3.3.5.2-1) [ 426 0 R /XYZ 65.905512 550.957147 0 ] (section-3.3.5.2-2) [ 426 0 R /XYZ 65.905512 527.337762 0 ] (section-3.3.5.2-3) [ 426 0 R /XYZ 65.905512 305.317762 0 ] (section-3.3.5.2-3.1) [ 426 0 R /XYZ 65.905512 305.317762 0 ] (section-3.3.5.2-3.10) [ 432 0 R /XYZ 80.905512 757.770379 0 ] (section-3.3.5.2-3.2) [ 426 0 R /XYZ 80.905512 291.698377 0 ] (section-3.3.5.2-3.3) [ 426 0 R /XYZ 65.905512 270.078992 0 ] (section-3.3.5.2-3.4) [ 426 0 R /XYZ 80.905512 256.459608 0 ] (section-3.3.5.2-3.5) [ 426 0 R /XYZ 65.905512 234.840223 0 ] (section-3.3.5.2-3.6) [ 426 0 R /XYZ 80.905512 221.220838 0 ] (section-3.3.5.2-3.7) [ 426 0 R /XYZ 65.905512 199.601453 0 ] (section-3.3.5.2-3.8) [ 426 0 R /XYZ 80.905512 185.982068 0 ] (section-3.3.5.2-3.9) [ 432 0 R /XYZ 65.905512 771.389764 0 ] (section-3.3.5.3) [ 432 0 R /XYZ 65.905512 734.150994 0 ] (section-3.3.5.3-1) [ 432 0 R /XYZ 65.905512 713.150994 0 ] (section-3.3.5.3-2) [ 432 0 R /XYZ 65.905512 689.531609 0 ] (section-3.3.5.3-3) [ 432 0 R /XYZ 65.905512 424.951609 0 ] (section-3.3.5.3-3.1) [ 432 0 R /XYZ 65.905512 424.951609 0 ] (section-3.3.5.3-3.10) [ 432 0 R /XYZ 80.905512 243.138377 0 ] (section-3.3.5.3-3.2) [ 432 0 R /XYZ 80.905512 411.332225 0 ] (section-3.3.5.3-3.3) [ 432 0 R /XYZ 65.905512 389.712840 0 ] (section-3.3.5.3-3.4) [ 432 0 R /XYZ 80.905512 376.093455 0 ] (section-3.3.5.3-3.5) [ 432 0 R /XYZ 65.905512 354.474070 0 ] (section-3.3.5.3-3.6) [ 432 0 R /XYZ 80.905512 340.854686 0 ] (section-3.3.5.3-3.7) [ 432 0 R /XYZ 65.905512 319.235301 0 ] (section-3.3.5.3-3.8) [ 432 0 R /XYZ 80.905512 305.615916 0 ] (section-3.3.5.3-3.9) [ 432 0 R /XYZ 65.905512 256.757762 0 ] (section-3.3.5.4) [ 432 0 R /XYZ 65.905512 219.518992 0 ] (section-3.3.5.4-1) [ 432 0 R /XYZ 65.905512 198.518992 0 ] (section-3.3.5.4-2) [ 438 0 R /XYZ 65.905512 771.389764 0 ] (section-3.3.5.4-3) [ 438 0 R /XYZ 65.905512 666.409764 0 ] (section-3.3.5.4-3.1) [ 438 0 R /XYZ 65.905512 666.409764 0 ] (section-3.3.5.4-3.2) [ 438 0 R /XYZ 80.905512 652.790379 0 ] (section-3.3.5.4-3.3) [ 438 0 R /XYZ 65.905512 631.170994 0 ] (section-3.3.5.4-3.4) [ 438 0 R /XYZ 80.905512 617.551609 0 ] (section-3.3.5.5) [ 438 0 R /XYZ 65.905512 593.932225 0 ] (section-3.3.5.5-1) [ 438 0 R /XYZ 65.905512 572.932225 0 ] (section-3.3.5.5-2) [ 438 0 R /XYZ 65.905512 549.312840 0 ] (section-3.3.5.5-3) [ 438 0 R /XYZ 65.905512 391.132840 0 ] (section-3.3.5.5-3.1) [ 438 0 R /XYZ 65.905512 391.132840 0 ] (section-3.3.5.5-3.2) [ 438 0 R /XYZ 80.905512 377.513455 0 ] (section-3.3.5.5-3.3) [ 438 0 R /XYZ 65.905512 355.894070 0 ] (section-3.3.5.5-3.4) [ 438 0 R /XYZ 80.905512 342.274686 0 ] (section-3.3.5.5-3.5) [ 438 0 R /XYZ 65.905512 320.655301 0 ] (section-3.3.5.5-3.6) [ 438 0 R /XYZ 80.905512 307.035916 0 ] (section-3.3.5.5-3.7) [ 438 0 R /XYZ 65.905512 258.177762 0 ] (section-3.3.5.5-3.8) [ 438 0 R /XYZ 80.905512 244.558377 0 ] (section-3.3.6) [ 438 0 R /XYZ 65.905512 234.438992 0 ] (section-3.3.6.1) [ 438 0 R /XYZ 65.905512 201.438992 0 ] (section-3.3.6.1-1) [ 438 0 R /XYZ 65.905512 180.438992 0 ] (section-3.3.6.1-2) [ 446 0 R /XYZ 65.905512 771.389764 0 ] (section-3.3.6.1-3) [ 446 0 R /XYZ 65.905512 677.049764 0 ] (section-3.3.6.1-3.1) [ 446 0 R /XYZ 65.905512 677.049764 0 ] (section-3.3.6.1-3.2) [ 446 0 R /XYZ 80.905512 663.430379 0 ] (section-3.3.6.1-3.3) [ 446 0 R /XYZ 65.905512 641.810994 0 ] (section-3.3.6.1-3.4) [ 446 0 R /XYZ 80.905512 628.191609 0 ] (section-3.3.6.2) [ 446 0 R /XYZ 65.905512 604.572225 0 ] (section-3.3.6.2-1) [ 446 0 R /XYZ 65.905512 583.572225 0 ] (section-3.3.6.2-2) [ 446 0 R /XYZ 65.905512 559.952840 0 ] (section-3.3.6.2-3) [ 446 0 R /XYZ 65.905512 465.612840 0 ] (section-3.3.6.2-3.1) [ 446 0 R /XYZ 65.905512 465.612840 0 ] (section-3.3.6.2-3.2) [ 446 0 R /XYZ 80.905512 451.993455 0 ] (section-3.3.6.2-3.3) [ 446 0 R /XYZ 65.905512 416.754686 0 ] (section-3.3.6.2-3.4) [ 446 0 R /XYZ 80.905512 403.135301 0 ] (section-3.3.6.3) [ 446 0 R /XYZ 65.905512 379.515916 0 ] (section-3.3.6.3-1) [ 446 0 R /XYZ 65.905512 358.515916 0 ] (section-3.3.6.3-2) [ 446 0 R /XYZ 65.905512 334.896531 0 ] (section-3.3.6.3-3) [ 446 0 R /XYZ 65.905512 240.556531 0 ] (section-3.3.6.3-3.1) [ 446 0 R /XYZ 65.905512 240.556531 0 ] (section-3.3.6.3-3.2) [ 446 0 R /XYZ 80.905512 226.937147 0 ] (section-3.3.6.3-3.3) [ 446 0 R /XYZ 65.905512 191.698377 0 ] (section-3.3.6.3-3.4) [ 446 0 R /XYZ 80.905512 178.078992 0 ] (section-4) [ 452 0 R /XYZ 65.905512 771.389764 0 ] (section-4-1) [ 452 0 R /XYZ 65.905512 723.869764 0 ] (section-4-2) [ 452 0 R /XYZ 65.905512 686.630994 0 ] (section-4-3) [ 452 0 R /XYZ 65.905512 663.011609 0 ] (section-4.1) [ 452 0 R /XYZ 65.905512 625.653455 0 ] (section-4.1.1) [ 452 0 R /XYZ 65.905512 599.553455 0 ] (section-4.1.1-1) [ 452 0 R /XYZ 65.905512 566.553455 0 ] (section-4.1.1-2) [ 452 0 R /XYZ 65.905512 542.934070 0 ] (section-4.1.1-3) [ 452 0 R /XYZ 65.905512 509.314686 0 ] (section-4.1.1-3.1) [ 452 0 R /XYZ 65.905512 509.314686 0 ] (section-4.1.1-3.10) [ 452 0 R /XYZ 80.905512 454.837147 0 ] (section-4.1.1-3.11) [ 452 0 R /XYZ 65.905512 441.217762 0 ] (section-4.1.1-3.12) [ 452 0 R /XYZ 80.905512 441.217762 0 ] (section-4.1.1-3.13) [ 452 0 R /XYZ 65.905512 427.598377 0 ] (section-4.1.1-3.14) [ 452 0 R /XYZ 80.905512 427.598377 0 ] (section-4.1.1-3.15) [ 452 0 R /XYZ 65.905512 413.978992 0 ] (section-4.1.1-3.16) [ 452 0 R /XYZ 80.905512 413.978992 0 ] (section-4.1.1-3.2) [ 452 0 R /XYZ 80.905512 509.314686 0 ] (section-4.1.1-3.3) [ 452 0 R /XYZ 65.905512 495.695301 0 ] (section-4.1.1-3.4) [ 452 0 R /XYZ 80.905512 495.695301 0 ] (section-4.1.1-3.5) [ 452 0 R /XYZ 65.905512 482.075916 0 ] (section-4.1.1-3.6) [ 452 0 R /XYZ 80.905512 482.075916 0 ] (section-4.1.1-3.7) [ 452 0 R /XYZ 65.905512 468.456531 0 ] (section-4.1.1-3.8) [ 452 0 R /XYZ 80.905512 468.456531 0 ] (section-4.1.1-3.9) [ 452 0 R /XYZ 65.905512 454.837147 0 ] (section-4.1.2) [ 452 0 R /XYZ 65.905512 403.859608 0 ] (section-4.1.2-1) [ 452 0 R /XYZ 65.905512 370.859608 0 ] (section-4.1.2-2) [ 452 0 R /XYZ 65.905512 347.240223 0 ] (section-4.1.2-3) [ 452 0 R /XYZ 65.905512 313.620838 0 ] (section-4.1.2-3.1) [ 452 0 R /XYZ 65.905512 313.620838 0 ] (section-4.1.2-3.10) [ 452 0 R /XYZ 80.905512 259.143299 0 ] (section-4.1.2-3.11) [ 452 0 R /XYZ 65.905512 245.523914 0 ] (section-4.1.2-3.12) [ 452 0 R /XYZ 80.905512 245.523914 0 ] (section-4.1.2-3.13) [ 452 0 R /XYZ 65.905512 231.904529 0 ] (section-4.1.2-3.14) [ 452 0 R /XYZ 80.905512 231.904529 0 ] (section-4.1.2-3.15) [ 452 0 R /XYZ 65.905512 218.285145 0 ] (section-4.1.2-3.16) [ 452 0 R /XYZ 80.905512 218.285145 0 ] (section-4.1.2-3.2) [ 452 0 R /XYZ 80.905512 313.620838 0 ] (section-4.1.2-3.3) [ 452 0 R /XYZ 65.905512 300.001453 0 ] (section-4.1.2-3.4) [ 452 0 R /XYZ 80.905512 300.001453 0 ] (section-4.1.2-3.5) [ 452 0 R /XYZ 65.905512 286.382068 0 ] (section-4.1.2-3.6) [ 452 0 R /XYZ 80.905512 286.382068 0 ] (section-4.1.2-3.7) [ 452 0 R /XYZ 65.905512 272.762684 0 ] (section-4.1.2-3.8) [ 452 0 R /XYZ 80.905512 272.762684 0 ] (section-4.1.2-3.9) [ 452 0 R /XYZ 65.905512 259.143299 0 ] (section-4.1.2-4) [ 452 0 R /XYZ 65.905512 194.665760 0 ] (section-4.1.2-5) [ 452 0 R /XYZ 65.905512 161.046375 0 ] (section-4.1.2-5.1) [ 452 0 R /XYZ 65.905512 161.046375 0 ] (section-4.1.2-5.10) [ 462 0 R /XYZ 80.905512 730.531609 0 ] (section-4.1.2-5.11) [ 462 0 R /XYZ 65.905512 716.912225 0 ] (section-4.1.2-5.12) [ 462 0 R /XYZ 80.905512 716.912225 0 ] (section-4.1.2-5.13) [ 462 0 R /XYZ 65.905512 703.292840 0 ] (section-4.1.2-5.14) [ 462 0 R /XYZ 80.905512 703.292840 0 ] (section-4.1.2-5.15) [ 462 0 R /XYZ 65.905512 689.673455 0 ] (section-4.1.2-5.16) [ 462 0 R /XYZ 80.905512 689.673455 0 ] (section-4.1.2-5.2) [ 452 0 R /XYZ 80.905512 161.046375 0 ] (section-4.1.2-5.3) [ 462 0 R /XYZ 65.905512 771.389764 0 ] (section-4.1.2-5.4) [ 462 0 R /XYZ 80.905512 771.389764 0 ] (section-4.1.2-5.5) [ 462 0 R /XYZ 65.905512 757.770379 0 ] (section-4.1.2-5.6) [ 462 0 R /XYZ 80.905512 757.770379 0 ] (section-4.1.2-5.7) [ 462 0 R /XYZ 65.905512 744.150994 0 ] (section-4.1.2-5.8) [ 462 0 R /XYZ 80.905512 744.150994 0 ] (section-4.1.2-5.9) [ 462 0 R /XYZ 65.905512 730.531609 0 ] (section-4.1.2-6) [ 462 0 R /XYZ 65.905512 666.054070 0 ] (section-4.1.2-7) [ 462 0 R /XYZ 65.905512 632.434686 0 ] (section-4.1.2-7.1) [ 462 0 R /XYZ 65.905512 632.434686 0 ] (section-4.1.2-7.10) [ 462 0 R /XYZ 80.905512 577.957147 0 ] (section-4.1.2-7.11) [ 462 0 R /XYZ 65.905512 564.337762 0 ] (section-4.1.2-7.12) [ 462 0 R /XYZ 80.905512 564.337762 0 ] (section-4.1.2-7.13) [ 462 0 R /XYZ 65.905512 550.718377 0 ] (section-4.1.2-7.14) [ 462 0 R /XYZ 80.905512 550.718377 0 ] (section-4.1.2-7.15) [ 462 0 R /XYZ 65.905512 537.098992 0 ] (section-4.1.2-7.16) [ 462 0 R /XYZ 80.905512 537.098992 0 ] (section-4.1.2-7.2) [ 462 0 R /XYZ 80.905512 632.434686 0 ] (section-4.1.2-7.3) [ 462 0 R /XYZ 65.905512 618.815301 0 ] (section-4.1.2-7.4) [ 462 0 R /XYZ 80.905512 618.815301 0 ] (section-4.1.2-7.5) [ 462 0 R /XYZ 65.905512 605.195916 0 ] (section-4.1.2-7.6) [ 462 0 R /XYZ 80.905512 605.195916 0 ] (section-4.1.2-7.7) [ 462 0 R /XYZ 65.905512 591.576531 0 ] (section-4.1.2-7.8) [ 462 0 R /XYZ 80.905512 591.576531 0 ] (section-4.1.2-7.9) [ 462 0 R /XYZ 65.905512 577.957147 0 ] (section-4.1.2-8) [ 462 0 R /XYZ 65.905512 513.479608 0 ] (section-4.2) [ 462 0 R /XYZ 65.905512 462.502068 0 ] (section-4.2.1) [ 462 0 R /XYZ 65.905512 436.402068 0 ] (section-4.2.1-1) [ 462 0 R /XYZ 65.905512 403.402068 0 ] (section-4.2.1-2) [ 462 0 R /XYZ 65.905512 379.782684 0 ] (section-4.2.1-3) [ 462 0 R /XYZ 65.905512 346.163299 0 ] (section-4.2.1-3.1) [ 462 0 R /XYZ 65.905512 346.163299 0 ] (section-4.2.1-3.10) [ 462 0 R /XYZ 80.905512 291.685760 0 ] (section-4.2.1-3.11) [ 462 0 R /XYZ 65.905512 278.066375 0 ] (section-4.2.1-3.12) [ 462 0 R /XYZ 80.905512 278.066375 0 ] (section-4.2.1-3.13) [ 462 0 R /XYZ 65.905512 264.446990 0 ] (section-4.2.1-3.14) [ 462 0 R /XYZ 80.905512 264.446990 0 ] (section-4.2.1-3.15) [ 462 0 R /XYZ 65.905512 250.827606 0 ] (section-4.2.1-3.16) [ 462 0 R /XYZ 80.905512 250.827606 0 ] (section-4.2.1-3.2) [ 462 0 R /XYZ 80.905512 346.163299 0 ] (section-4.2.1-3.3) [ 462 0 R /XYZ 65.905512 332.543914 0 ] (section-4.2.1-3.4) [ 462 0 R /XYZ 80.905512 332.543914 0 ] (section-4.2.1-3.5) [ 462 0 R /XYZ 65.905512 318.924529 0 ] (section-4.2.1-3.6) [ 462 0 R /XYZ 80.905512 318.924529 0 ] (section-4.2.1-3.7) [ 462 0 R /XYZ 65.905512 305.305145 0 ] (section-4.2.1-3.8) [ 462 0 R /XYZ 80.905512 305.305145 0 ] (section-4.2.1-3.9) [ 462 0 R /XYZ 65.905512 291.685760 0 ] (section-4.2.1-4) [ 462 0 R /XYZ 65.905512 227.208221 0 ] (section-4.2.1-5) [ 462 0 R /XYZ 65.905512 193.588836 0 ] (section-4.2.1-5.1) [ 462 0 R /XYZ 65.905512 193.588836 0 ] (section-4.2.1-5.10) [ 468 0 R /XYZ 80.905512 757.770379 0 ] (section-4.2.1-5.11) [ 468 0 R /XYZ 65.905512 744.150994 0 ] (section-4.2.1-5.12) [ 468 0 R /XYZ 80.905512 744.150994 0 ] (section-4.2.1-5.13) [ 468 0 R /XYZ 65.905512 730.531609 0 ] (section-4.2.1-5.14) [ 468 0 R /XYZ 80.905512 730.531609 0 ] (section-4.2.1-5.15) [ 468 0 R /XYZ 65.905512 716.912225 0 ] (section-4.2.1-5.16) [ 468 0 R /XYZ 80.905512 716.912225 0 ] (section-4.2.1-5.2) [ 462 0 R /XYZ 80.905512 193.588836 0 ] (section-4.2.1-5.3) [ 462 0 R /XYZ 65.905512 179.969451 0 ] (section-4.2.1-5.4) [ 462 0 R /XYZ 80.905512 179.969451 0 ] (section-4.2.1-5.5) [ 462 0 R /XYZ 65.905512 166.350067 0 ] (section-4.2.1-5.6) [ 462 0 R /XYZ 80.905512 166.350067 0 ] (section-4.2.1-5.7) [ 468 0 R /XYZ 65.905512 771.389764 0 ] (section-4.2.1-5.8) [ 468 0 R /XYZ 80.905512 771.389764 0 ] (section-4.2.1-5.9) [ 468 0 R /XYZ 65.905512 757.770379 0 ] (section-4.2.2) [ 468 0 R /XYZ 65.905512 706.792840 0 ] (section-4.2.2-1) [ 468 0 R /XYZ 65.905512 673.792840 0 ] (section-4.2.2-2) [ 468 0 R /XYZ 65.905512 650.173455 0 ] (section-4.2.2-3) [ 468 0 R /XYZ 65.905512 616.554070 0 ] (section-4.2.2-3.1) [ 468 0 R /XYZ 65.905512 616.554070 0 ] (section-4.2.2-3.10) [ 468 0 R /XYZ 80.905512 562.076531 0 ] (section-4.2.2-3.11) [ 468 0 R /XYZ 65.905512 548.457147 0 ] (section-4.2.2-3.12) [ 468 0 R /XYZ 80.905512 548.457147 0 ] (section-4.2.2-3.13) [ 468 0 R /XYZ 65.905512 534.837762 0 ] (section-4.2.2-3.14) [ 468 0 R /XYZ 80.905512 534.837762 0 ] (section-4.2.2-3.15) [ 468 0 R /XYZ 65.905512 521.218377 0 ] (section-4.2.2-3.16) [ 468 0 R /XYZ 80.905512 521.218377 0 ] (section-4.2.2-3.2) [ 468 0 R /XYZ 80.905512 616.554070 0 ] (section-4.2.2-3.3) [ 468 0 R /XYZ 65.905512 602.934686 0 ] (section-4.2.2-3.4) [ 468 0 R /XYZ 80.905512 602.934686 0 ] (section-4.2.2-3.5) [ 468 0 R /XYZ 65.905512 589.315301 0 ] (section-4.2.2-3.6) [ 468 0 R /XYZ 80.905512 589.315301 0 ] (section-4.2.2-3.7) [ 468 0 R /XYZ 65.905512 575.695916 0 ] (section-4.2.2-3.8) [ 468 0 R /XYZ 80.905512 575.695916 0 ] (section-4.2.2-3.9) [ 468 0 R /XYZ 65.905512 562.076531 0 ] (section-4.2.2-4) [ 468 0 R /XYZ 65.905512 497.598992 0 ] (section-4.2.2-5) [ 468 0 R /XYZ 65.905512 463.979608 0 ] (section-4.2.2-5.1) [ 468 0 R /XYZ 65.905512 463.979608 0 ] (section-4.2.2-5.10) [ 468 0 R /XYZ 80.905512 409.502068 0 ] (section-4.2.2-5.11) [ 468 0 R /XYZ 65.905512 395.882684 0 ] (section-4.2.2-5.12) [ 468 0 R /XYZ 80.905512 395.882684 0 ] (section-4.2.2-5.13) [ 468 0 R /XYZ 65.905512 382.263299 0 ] (section-4.2.2-5.14) [ 468 0 R /XYZ 80.905512 382.263299 0 ] (section-4.2.2-5.15) [ 468 0 R /XYZ 65.905512 368.643914 0 ] (section-4.2.2-5.16) [ 468 0 R /XYZ 80.905512 368.643914 0 ] (section-4.2.2-5.2) [ 468 0 R /XYZ 80.905512 463.979608 0 ] (section-4.2.2-5.3) [ 468 0 R /XYZ 65.905512 450.360223 0 ] (section-4.2.2-5.4) [ 468 0 R /XYZ 80.905512 450.360223 0 ] (section-4.2.2-5.5) [ 468 0 R /XYZ 65.905512 436.740838 0 ] (section-4.2.2-5.6) [ 468 0 R /XYZ 80.905512 436.740838 0 ] (section-4.2.2-5.7) [ 468 0 R /XYZ 65.905512 423.121453 0 ] (section-4.2.2-5.8) [ 468 0 R /XYZ 80.905512 423.121453 0 ] (section-4.2.2-5.9) [ 468 0 R /XYZ 65.905512 409.502068 0 ] (section-4.2.2-6) [ 468 0 R /XYZ 65.905512 345.024529 0 ] (section-4.2.2-7) [ 468 0 R /XYZ 65.905512 311.405145 0 ] (section-4.2.2-7.1) [ 468 0 R /XYZ 65.905512 311.405145 0 ] (section-4.2.2-7.2) [ 468 0 R /XYZ 80.905512 311.405145 0 ] (section-4.2.2-7.3) [ 468 0 R /XYZ 65.905512 297.785760 0 ] (section-4.2.2-7.4) [ 468 0 R /XYZ 80.905512 297.785760 0 ] (section-4.2.2-8) [ 468 0 R /XYZ 65.905512 274.166375 0 ] (section-4.2.2-9) [ 468 0 R /XYZ 65.905512 240.546990 0 ] (section-4.2.2-9.1) [ 468 0 R /XYZ 65.905512 240.546990 0 ] (section-4.2.2-9.2) [ 468 0 R /XYZ 80.905512 240.546990 0 ] (section-4.2.2-9.3) [ 468 0 R /XYZ 65.905512 226.927606 0 ] (section-4.2.2-9.4) [ 468 0 R /XYZ 80.905512 226.927606 0 ] (section-4.3) [ 472 0 R /XYZ 65.905512 771.389764 0 ] (section-4.3.1) [ 472 0 R /XYZ 65.905512 745.289764 0 ] (section-4.3.1-1) [ 472 0 R /XYZ 65.905512 712.289764 0 ] (section-4.3.1-2) [ 472 0 R /XYZ 65.905512 688.670379 0 ] (section-4.3.1-3) [ 472 0 R /XYZ 65.905512 655.050994 0 ] (section-4.3.1-3.1) [ 472 0 R /XYZ 65.905512 655.050994 0 ] (section-4.3.1-3.10) [ 472 0 R /XYZ 80.905512 600.573455 0 ] (section-4.3.1-3.11) [ 472 0 R /XYZ 65.905512 586.954070 0 ] (section-4.3.1-3.12) [ 472 0 R /XYZ 80.905512 586.954070 0 ] (section-4.3.1-3.13) [ 472 0 R /XYZ 65.905512 573.334686 0 ] (section-4.3.1-3.14) [ 472 0 R /XYZ 80.905512 573.334686 0 ] (section-4.3.1-3.15) [ 472 0 R /XYZ 65.905512 559.715301 0 ] (section-4.3.1-3.16) [ 472 0 R /XYZ 80.905512 559.715301 0 ] (section-4.3.1-3.2) [ 472 0 R /XYZ 80.905512 655.050994 0 ] (section-4.3.1-3.3) [ 472 0 R /XYZ 65.905512 641.431609 0 ] (section-4.3.1-3.4) [ 472 0 R /XYZ 80.905512 641.431609 0 ] (section-4.3.1-3.5) [ 472 0 R /XYZ 65.905512 627.812225 0 ] (section-4.3.1-3.6) [ 472 0 R /XYZ 80.905512 627.812225 0 ] (section-4.3.1-3.7) [ 472 0 R /XYZ 65.905512 614.192840 0 ] (section-4.3.1-3.8) [ 472 0 R /XYZ 80.905512 614.192840 0 ] (section-4.3.1-3.9) [ 472 0 R /XYZ 65.905512 600.573455 0 ] (section-4.3.1-4) [ 472 0 R /XYZ 65.905512 536.095916 0 ] (section-4.3.1-5) [ 472 0 R /XYZ 65.905512 502.476531 0 ] (section-4.3.1-5.1) [ 472 0 R /XYZ 65.905512 502.476531 0 ] (section-4.3.1-5.10) [ 472 0 R /XYZ 80.905512 447.998992 0 ] (section-4.3.1-5.11) [ 472 0 R /XYZ 65.905512 434.379608 0 ] (section-4.3.1-5.12) [ 472 0 R /XYZ 80.905512 434.379608 0 ] (section-4.3.1-5.13) [ 472 0 R /XYZ 65.905512 420.760223 0 ] (section-4.3.1-5.14) [ 472 0 R /XYZ 80.905512 420.760223 0 ] (section-4.3.1-5.15) [ 472 0 R /XYZ 65.905512 407.140838 0 ] (section-4.3.1-5.16) [ 472 0 R /XYZ 80.905512 407.140838 0 ] (section-4.3.1-5.2) [ 472 0 R /XYZ 80.905512 502.476531 0 ] (section-4.3.1-5.3) [ 472 0 R /XYZ 65.905512 488.857147 0 ] (section-4.3.1-5.4) [ 472 0 R /XYZ 80.905512 488.857147 0 ] (section-4.3.1-5.5) [ 472 0 R /XYZ 65.905512 475.237762 0 ] (section-4.3.1-5.6) [ 472 0 R /XYZ 80.905512 475.237762 0 ] (section-4.3.1-5.7) [ 472 0 R /XYZ 65.905512 461.618377 0 ] (section-4.3.1-5.8) [ 472 0 R /XYZ 80.905512 461.618377 0 ] (section-4.3.1-5.9) [ 472 0 R /XYZ 65.905512 447.998992 0 ] (section-4.3.1-6) [ 472 0 R /XYZ 65.905512 383.521453 0 ] (section-4.3.1-7) [ 472 0 R /XYZ 65.905512 349.902068 0 ] (section-4.3.1-7.1) [ 472 0 R /XYZ 65.905512 349.902068 0 ] (section-4.3.1-7.2) [ 472 0 R /XYZ 80.905512 349.902068 0 ] (section-4.3.1-8) [ 472 0 R /XYZ 65.905512 326.282684 0 ] (section-4.3.1-9) [ 472 0 R /XYZ 65.905512 292.663299 0 ] (section-4.3.1-9.1) [ 472 0 R /XYZ 65.905512 292.663299 0 ] (section-4.3.1-9.2) [ 472 0 R /XYZ 80.905512 292.663299 0 ] (section-4.3.2) [ 472 0 R /XYZ 65.905512 282.543914 0 ] (section-4.3.2-1) [ 472 0 R /XYZ 65.905512 249.543914 0 ] (section-4.3.2-2) [ 472 0 R /XYZ 65.905512 225.924529 0 ] (section-4.3.2-3) [ 472 0 R /XYZ 65.905512 192.305145 0 ] (section-4.3.2-3.1) [ 472 0 R /XYZ 65.905512 192.305145 0 ] (section-4.3.2-3.10) [ 480 0 R /XYZ 80.905512 757.770379 0 ] (section-4.3.2-3.11) [ 480 0 R /XYZ 65.905512 744.150994 0 ] (section-4.3.2-3.12) [ 480 0 R /XYZ 80.905512 744.150994 0 ] (section-4.3.2-3.13) [ 480 0 R /XYZ 65.905512 730.531609 0 ] (section-4.3.2-3.14) [ 480 0 R /XYZ 80.905512 730.531609 0 ] (section-4.3.2-3.15) [ 480 0 R /XYZ 65.905512 716.912225 0 ] (section-4.3.2-3.16) [ 480 0 R /XYZ 80.905512 716.912225 0 ] (section-4.3.2-3.2) [ 472 0 R /XYZ 80.905512 192.305145 0 ] (section-4.3.2-3.3) [ 472 0 R /XYZ 65.905512 178.685760 0 ] (section-4.3.2-3.4) [ 472 0 R /XYZ 80.905512 178.685760 0 ] (section-4.3.2-3.5) [ 472 0 R /XYZ 65.905512 165.066375 0 ] (section-4.3.2-3.6) [ 472 0 R /XYZ 80.905512 165.066375 0 ] (section-4.3.2-3.7) [ 480 0 R /XYZ 65.905512 771.389764 0 ] (section-4.3.2-3.8) [ 480 0 R /XYZ 80.905512 771.389764 0 ] (section-4.3.2-3.9) [ 480 0 R /XYZ 65.905512 757.770379 0 ] (section-4.3.2-4) [ 480 0 R /XYZ 65.905512 693.292840 0 ] (section-4.3.2-5) [ 480 0 R /XYZ 65.905512 659.673455 0 ] (section-4.3.2-5.1) [ 480 0 R /XYZ 65.905512 659.673455 0 ] (section-4.3.2-5.10) [ 480 0 R /XYZ 80.905512 605.195916 0 ] (section-4.3.2-5.11) [ 480 0 R /XYZ 65.905512 591.576531 0 ] (section-4.3.2-5.12) [ 480 0 R /XYZ 80.905512 591.576531 0 ] (section-4.3.2-5.13) [ 480 0 R /XYZ 65.905512 577.957147 0 ] (section-4.3.2-5.14) [ 480 0 R /XYZ 80.905512 577.957147 0 ] (section-4.3.2-5.15) [ 480 0 R /XYZ 65.905512 564.337762 0 ] (section-4.3.2-5.16) [ 480 0 R /XYZ 80.905512 564.337762 0 ] (section-4.3.2-5.2) [ 480 0 R /XYZ 80.905512 659.673455 0 ] (section-4.3.2-5.3) [ 480 0 R /XYZ 65.905512 646.054070 0 ] (section-4.3.2-5.4) [ 480 0 R /XYZ 80.905512 646.054070 0 ] (section-4.3.2-5.5) [ 480 0 R /XYZ 65.905512 632.434686 0 ] (section-4.3.2-5.6) [ 480 0 R /XYZ 80.905512 632.434686 0 ] (section-4.3.2-5.7) [ 480 0 R /XYZ 65.905512 618.815301 0 ] (section-4.3.2-5.8) [ 480 0 R /XYZ 80.905512 618.815301 0 ] (section-4.3.2-5.9) [ 480 0 R /XYZ 65.905512 605.195916 0 ] (section-4.3.2-6) [ 480 0 R /XYZ 65.905512 540.718377 0 ] (section-4.3.2-7) [ 480 0 R /XYZ 65.905512 507.098992 0 ] (section-4.3.2-7.1) [ 480 0 R /XYZ 65.905512 507.098992 0 ] (section-4.3.2-7.2) [ 480 0 R /XYZ 80.905512 507.098992 0 ] (section-4.3.2-8) [ 480 0 R /XYZ 65.905512 483.479608 0 ] (section-4.3.2-9) [ 480 0 R /XYZ 65.905512 449.860223 0 ] (section-4.3.2-9.1) [ 480 0 R /XYZ 65.905512 449.860223 0 ] (section-4.3.2-9.2) [ 480 0 R /XYZ 80.905512 449.860223 0 ] (section-4.3.3) [ 480 0 R /XYZ 65.905512 439.740838 0 ] (section-4.3.3-1) [ 480 0 R /XYZ 65.905512 406.740838 0 ] (section-4.3.3-2) [ 480 0 R /XYZ 65.905512 383.121453 0 ] (section-4.3.3-3) [ 480 0 R /XYZ 65.905512 349.502068 0 ] (section-4.3.3-3.1) [ 480 0 R /XYZ 65.905512 349.502068 0 ] (section-4.3.3-3.10) [ 480 0 R /XYZ 80.905512 295.024529 0 ] (section-4.3.3-3.11) [ 480 0 R /XYZ 65.905512 281.405145 0 ] (section-4.3.3-3.12) [ 480 0 R /XYZ 80.905512 281.405145 0 ] (section-4.3.3-3.13) [ 480 0 R /XYZ 65.905512 267.785760 0 ] (section-4.3.3-3.14) [ 480 0 R /XYZ 80.905512 267.785760 0 ] (section-4.3.3-3.15) [ 480 0 R /XYZ 65.905512 254.166375 0 ] (section-4.3.3-3.16) [ 480 0 R /XYZ 80.905512 254.166375 0 ] (section-4.3.3-3.2) [ 480 0 R /XYZ 80.905512 349.502068 0 ] (section-4.3.3-3.3) [ 480 0 R /XYZ 65.905512 335.882684 0 ] (section-4.3.3-3.4) [ 480 0 R /XYZ 80.905512 335.882684 0 ] (section-4.3.3-3.5) [ 480 0 R /XYZ 65.905512 322.263299 0 ] (section-4.3.3-3.6) [ 480 0 R /XYZ 80.905512 322.263299 0 ] (section-4.3.3-3.7) [ 480 0 R /XYZ 65.905512 308.643914 0 ] (section-4.3.3-3.8) [ 480 0 R /XYZ 80.905512 308.643914 0 ] (section-4.3.3-3.9) [ 480 0 R /XYZ 65.905512 295.024529 0 ] (section-4.3.3-4) [ 480 0 R /XYZ 65.905512 230.546990 0 ] (section-4.3.3-5) [ 480 0 R /XYZ 65.905512 196.927606 0 ] (section-4.3.3-5.1) [ 480 0 R /XYZ 65.905512 196.927606 0 ] (section-4.3.3-5.10) [ 484 0 R /XYZ 80.905512 757.770379 0 ] (section-4.3.3-5.11) [ 484 0 R /XYZ 65.905512 744.150994 0 ] (section-4.3.3-5.12) [ 484 0 R /XYZ 80.905512 744.150994 0 ] (section-4.3.3-5.13) [ 484 0 R /XYZ 65.905512 730.531609 0 ] (section-4.3.3-5.14) [ 484 0 R /XYZ 80.905512 730.531609 0 ] (section-4.3.3-5.15) [ 484 0 R /XYZ 65.905512 716.912225 0 ] (section-4.3.3-5.16) [ 484 0 R /XYZ 80.905512 716.912225 0 ] (section-4.3.3-5.2) [ 480 0 R /XYZ 80.905512 196.927606 0 ] (section-4.3.3-5.3) [ 480 0 R /XYZ 65.905512 183.308221 0 ] (section-4.3.3-5.4) [ 480 0 R /XYZ 80.905512 183.308221 0 ] (section-4.3.3-5.5) [ 480 0 R /XYZ 65.905512 169.688836 0 ] (section-4.3.3-5.6) [ 480 0 R /XYZ 80.905512 169.688836 0 ] (section-4.3.3-5.7) [ 484 0 R /XYZ 65.905512 771.389764 0 ] (section-4.3.3-5.8) [ 484 0 R /XYZ 80.905512 771.389764 0 ] (section-4.3.3-5.9) [ 484 0 R /XYZ 65.905512 757.770379 0 ] (section-4.3.3-6) [ 484 0 R /XYZ 65.905512 693.292840 0 ] (section-4.3.3-7) [ 484 0 R /XYZ 65.905512 659.673455 0 ] (section-4.3.3-7.1) [ 484 0 R /XYZ 65.905512 659.673455 0 ] (section-4.3.3-7.2) [ 484 0 R /XYZ 80.905512 659.673455 0 ] (section-4.3.3-8) [ 484 0 R /XYZ 65.905512 636.054070 0 ] (section-4.3.3-9) [ 484 0 R /XYZ 65.905512 602.434686 0 ] (section-4.3.3-9.1) [ 484 0 R /XYZ 65.905512 602.434686 0 ] (section-4.3.3-9.2) [ 484 0 R /XYZ 80.905512 602.434686 0 ] (section-4.3.4) [ 484 0 R /XYZ 65.905512 592.315301 0 ] (section-4.3.4-1) [ 484 0 R /XYZ 65.905512 559.315301 0 ] (section-4.3.4-2) [ 484 0 R /XYZ 65.905512 535.695916 0 ] (section-4.3.4-3) [ 484 0 R /XYZ 65.905512 502.076531 0 ] (section-4.3.4-3.1) [ 484 0 R /XYZ 65.905512 502.076531 0 ] (section-4.3.4-3.10) [ 484 0 R /XYZ 80.905512 447.598992 0 ] (section-4.3.4-3.11) [ 484 0 R /XYZ 65.905512 433.979608 0 ] (section-4.3.4-3.12) [ 484 0 R /XYZ 80.905512 433.979608 0 ] (section-4.3.4-3.13) [ 484 0 R /XYZ 65.905512 420.360223 0 ] (section-4.3.4-3.14) [ 484 0 R /XYZ 80.905512 420.360223 0 ] (section-4.3.4-3.15) [ 484 0 R /XYZ 65.905512 406.740838 0 ] (section-4.3.4-3.16) [ 484 0 R /XYZ 80.905512 406.740838 0 ] (section-4.3.4-3.2) [ 484 0 R /XYZ 80.905512 502.076531 0 ] (section-4.3.4-3.3) [ 484 0 R /XYZ 65.905512 488.457147 0 ] (section-4.3.4-3.4) [ 484 0 R /XYZ 80.905512 488.457147 0 ] (section-4.3.4-3.5) [ 484 0 R /XYZ 65.905512 474.837762 0 ] (section-4.3.4-3.6) [ 484 0 R /XYZ 80.905512 474.837762 0 ] (section-4.3.4-3.7) [ 484 0 R /XYZ 65.905512 461.218377 0 ] (section-4.3.4-3.8) [ 484 0 R /XYZ 80.905512 461.218377 0 ] (section-4.3.4-3.9) [ 484 0 R /XYZ 65.905512 447.598992 0 ] (section-4.3.4-4) [ 484 0 R /XYZ 65.905512 383.121453 0 ] (section-4.3.4-5) [ 484 0 R /XYZ 65.905512 349.502068 0 ] (section-4.3.4-5.1) [ 484 0 R /XYZ 65.905512 349.502068 0 ] (section-4.3.4-5.10) [ 484 0 R /XYZ 80.905512 295.024529 0 ] (section-4.3.4-5.11) [ 484 0 R /XYZ 65.905512 281.405145 0 ] (section-4.3.4-5.12) [ 484 0 R /XYZ 80.905512 281.405145 0 ] (section-4.3.4-5.13) [ 484 0 R /XYZ 65.905512 267.785760 0 ] (section-4.3.4-5.14) [ 484 0 R /XYZ 80.905512 267.785760 0 ] (section-4.3.4-5.15) [ 484 0 R /XYZ 65.905512 254.166375 0 ] (section-4.3.4-5.16) [ 484 0 R /XYZ 80.905512 254.166375 0 ] (section-4.3.4-5.2) [ 484 0 R /XYZ 80.905512 349.502068 0 ] (section-4.3.4-5.3) [ 484 0 R /XYZ 65.905512 335.882684 0 ] (section-4.3.4-5.4) [ 484 0 R /XYZ 80.905512 335.882684 0 ] (section-4.3.4-5.5) [ 484 0 R /XYZ 65.905512 322.263299 0 ] (section-4.3.4-5.6) [ 484 0 R /XYZ 80.905512 322.263299 0 ] (section-4.3.4-5.7) [ 484 0 R /XYZ 65.905512 308.643914 0 ] (section-4.3.4-5.8) [ 484 0 R /XYZ 80.905512 308.643914 0 ] (section-4.3.4-5.9) [ 484 0 R /XYZ 65.905512 295.024529 0 ] (section-4.3.4-6) [ 484 0 R /XYZ 65.905512 230.546990 0 ] (section-4.3.4-7) [ 484 0 R /XYZ 65.905512 196.927606 0 ] (section-4.3.4-7.1) [ 484 0 R /XYZ 65.905512 196.927606 0 ] (section-4.3.4-7.2) [ 484 0 R /XYZ 80.905512 196.927606 0 ] (section-4.3.4-8) [ 484 0 R /XYZ 65.905512 173.308221 0 ] (section-4.3.4-9) [ 484 0 R /XYZ 65.905512 139.688836 0 ] (section-4.3.4-9.1) [ 488 0 R /XYZ 65.905512 771.389764 0 ] (section-4.3.4-9.2) [ 488 0 R /XYZ 80.905512 771.389764 0 ] (section-4.3.5) [ 488 0 R /XYZ 65.905512 761.270379 0 ] (section-4.3.5-1) [ 488 0 R /XYZ 65.905512 728.270379 0 ] (section-4.3.5-2) [ 488 0 R /XYZ 65.905512 704.650994 0 ] (section-4.3.5-3) [ 488 0 R /XYZ 65.905512 671.031609 0 ] (section-4.3.5-3.1) [ 488 0 R /XYZ 65.905512 671.031609 0 ] (section-4.3.5-3.10) [ 488 0 R /XYZ 80.905512 616.554070 0 ] (section-4.3.5-3.11) [ 488 0 R /XYZ 65.905512 602.934686 0 ] (section-4.3.5-3.12) [ 488 0 R /XYZ 80.905512 602.934686 0 ] (section-4.3.5-3.13) [ 488 0 R /XYZ 65.905512 589.315301 0 ] (section-4.3.5-3.14) [ 488 0 R /XYZ 80.905512 589.315301 0 ] (section-4.3.5-3.15) [ 488 0 R /XYZ 65.905512 575.695916 0 ] (section-4.3.5-3.16) [ 488 0 R /XYZ 80.905512 575.695916 0 ] (section-4.3.5-3.2) [ 488 0 R /XYZ 80.905512 671.031609 0 ] (section-4.3.5-3.3) [ 488 0 R /XYZ 65.905512 657.412225 0 ] (section-4.3.5-3.4) [ 488 0 R /XYZ 80.905512 657.412225 0 ] (section-4.3.5-3.5) [ 488 0 R /XYZ 65.905512 643.792840 0 ] (section-4.3.5-3.6) [ 488 0 R /XYZ 80.905512 643.792840 0 ] (section-4.3.5-3.7) [ 488 0 R /XYZ 65.905512 630.173455 0 ] (section-4.3.5-3.8) [ 488 0 R /XYZ 80.905512 630.173455 0 ] (section-4.3.5-3.9) [ 488 0 R /XYZ 65.905512 616.554070 0 ] (section-4.3.5-4) [ 488 0 R /XYZ 65.905512 552.076531 0 ] (section-4.3.5-5) [ 488 0 R /XYZ 65.905512 518.457147 0 ] (section-4.3.5-5.1) [ 488 0 R /XYZ 65.905512 518.457147 0 ] (section-4.3.5-5.10) [ 488 0 R /XYZ 80.905512 463.979608 0 ] (section-4.3.5-5.11) [ 488 0 R /XYZ 65.905512 450.360223 0 ] (section-4.3.5-5.12) [ 488 0 R /XYZ 80.905512 450.360223 0 ] (section-4.3.5-5.13) [ 488 0 R /XYZ 65.905512 436.740838 0 ] (section-4.3.5-5.14) [ 488 0 R /XYZ 80.905512 436.740838 0 ] (section-4.3.5-5.15) [ 488 0 R /XYZ 65.905512 423.121453 0 ] (section-4.3.5-5.16) [ 488 0 R /XYZ 80.905512 423.121453 0 ] (section-4.3.5-5.2) [ 488 0 R /XYZ 80.905512 518.457147 0 ] (section-4.3.5-5.3) [ 488 0 R /XYZ 65.905512 504.837762 0 ] (section-4.3.5-5.4) [ 488 0 R /XYZ 80.905512 504.837762 0 ] (section-4.3.5-5.5) [ 488 0 R /XYZ 65.905512 491.218377 0 ] (section-4.3.5-5.6) [ 488 0 R /XYZ 80.905512 491.218377 0 ] (section-4.3.5-5.7) [ 488 0 R /XYZ 65.905512 477.598992 0 ] (section-4.3.5-5.8) [ 488 0 R /XYZ 80.905512 477.598992 0 ] (section-4.3.5-5.9) [ 488 0 R /XYZ 65.905512 463.979608 0 ] (section-4.3.5-6) [ 488 0 R /XYZ 65.905512 399.502068 0 ] (section-4.3.5-7) [ 488 0 R /XYZ 65.905512 365.882684 0 ] (section-4.3.5-7.1) [ 488 0 R /XYZ 65.905512 365.882684 0 ] (section-4.3.5-7.2) [ 488 0 R /XYZ 80.905512 365.882684 0 ] (section-4.3.5-8) [ 488 0 R /XYZ 65.905512 342.263299 0 ] (section-4.3.5-9) [ 488 0 R /XYZ 65.905512 308.643914 0 ] (section-4.3.5-9.1) [ 488 0 R /XYZ 65.905512 308.643914 0 ] (section-4.3.5-9.2) [ 488 0 R /XYZ 80.905512 308.643914 0 ] (section-4.3.6) [ 488 0 R /XYZ 65.905512 298.524529 0 ] (section-4.3.6-1) [ 488 0 R /XYZ 65.905512 265.524529 0 ] (section-4.3.6-2) [ 488 0 R /XYZ 65.905512 241.905145 0 ] (section-4.3.6-3) [ 488 0 R /XYZ 65.905512 208.285760 0 ] (section-4.3.6-3.1) [ 488 0 R /XYZ 65.905512 208.285760 0 ] (section-4.3.6-3.10) [ 494 0 R /XYZ 80.905512 771.389764 0 ] (section-4.3.6-3.11) [ 494 0 R /XYZ 65.905512 757.770379 0 ] (section-4.3.6-3.12) [ 494 0 R /XYZ 80.905512 757.770379 0 ] (section-4.3.6-3.13) [ 494 0 R /XYZ 65.905512 744.150994 0 ] (section-4.3.6-3.14) [ 494 0 R /XYZ 80.905512 744.150994 0 ] (section-4.3.6-3.15) [ 494 0 R /XYZ 65.905512 730.531609 0 ] (section-4.3.6-3.16) [ 494 0 R /XYZ 80.905512 730.531609 0 ] (section-4.3.6-3.2) [ 488 0 R /XYZ 80.905512 208.285760 0 ] (section-4.3.6-3.3) [ 488 0 R /XYZ 65.905512 194.666375 0 ] (section-4.3.6-3.4) [ 488 0 R /XYZ 80.905512 194.666375 0 ] (section-4.3.6-3.5) [ 488 0 R /XYZ 65.905512 181.046990 0 ] (section-4.3.6-3.6) [ 488 0 R /XYZ 80.905512 181.046990 0 ] (section-4.3.6-3.7) [ 488 0 R /XYZ 65.905512 167.427606 0 ] (section-4.3.6-3.8) [ 488 0 R /XYZ 80.905512 167.427606 0 ] (section-4.3.6-3.9) [ 494 0 R /XYZ 65.905512 771.389764 0 ] (section-4.3.6-4) [ 494 0 R /XYZ 65.905512 706.912225 0 ] (section-4.3.6-5) [ 494 0 R /XYZ 65.905512 673.292840 0 ] (section-4.3.6-5.1) [ 494 0 R /XYZ 65.905512 673.292840 0 ] (section-4.3.6-5.10) [ 494 0 R /XYZ 80.905512 618.815301 0 ] (section-4.3.6-5.2) [ 494 0 R /XYZ 80.905512 673.292840 0 ] (section-4.3.6-5.3) [ 494 0 R /XYZ 65.905512 659.673455 0 ] (section-4.3.6-5.4) [ 494 0 R /XYZ 80.905512 659.673455 0 ] (section-4.3.6-5.5) [ 494 0 R /XYZ 65.905512 646.054070 0 ] (section-4.3.6-5.6) [ 494 0 R /XYZ 80.905512 646.054070 0 ] (section-4.3.6-5.7) [ 494 0 R /XYZ 65.905512 632.434686 0 ] (section-4.3.6-5.8) [ 494 0 R /XYZ 80.905512 632.434686 0 ] (section-4.3.6-5.9) [ 494 0 R /XYZ 65.905512 618.815301 0 ] (section-4.3.6-6) [ 494 0 R /XYZ 65.905512 595.195916 0 ] (section-4.3.6-7) [ 494 0 R /XYZ 65.905512 561.576531 0 ] (section-4.3.6-7.1) [ 494 0 R /XYZ 65.905512 561.576531 0 ] (section-4.3.6-7.10) [ 494 0 R /XYZ 80.905512 507.098992 0 ] (section-4.3.6-7.11) [ 494 0 R /XYZ 65.905512 493.479608 0 ] (section-4.3.6-7.12) [ 494 0 R /XYZ 80.905512 493.479608 0 ] (section-4.3.6-7.13) [ 494 0 R /XYZ 65.905512 479.860223 0 ] (section-4.3.6-7.14) [ 494 0 R /XYZ 80.905512 479.860223 0 ] (section-4.3.6-7.15) [ 494 0 R /XYZ 65.905512 466.240838 0 ] (section-4.3.6-7.16) [ 494 0 R /XYZ 80.905512 466.240838 0 ] (section-4.3.6-7.2) [ 494 0 R /XYZ 80.905512 561.576531 0 ] (section-4.3.6-7.3) [ 494 0 R /XYZ 65.905512 547.957147 0 ] (section-4.3.6-7.4) [ 494 0 R /XYZ 80.905512 547.957147 0 ] (section-4.3.6-7.5) [ 494 0 R /XYZ 65.905512 534.337762 0 ] (section-4.3.6-7.6) [ 494 0 R /XYZ 80.905512 534.337762 0 ] (section-4.3.6-7.7) [ 494 0 R /XYZ 65.905512 520.718377 0 ] (section-4.3.6-7.8) [ 494 0 R /XYZ 80.905512 520.718377 0 ] (section-4.3.6-7.9) [ 494 0 R /XYZ 65.905512 507.098992 0 ] (section-4.3.6-8) [ 494 0 R /XYZ 65.905512 442.621453 0 ] (section-4.3.6-9) [ 494 0 R /XYZ 65.905512 409.002068 0 ] (section-4.3.6-9.1) [ 494 0 R /XYZ 65.905512 409.002068 0 ] (section-4.3.6-9.10) [ 494 0 R /XYZ 80.905512 354.524529 0 ] (section-4.3.6-9.11) [ 494 0 R /XYZ 65.905512 340.905145 0 ] (section-4.3.6-9.12) [ 494 0 R /XYZ 80.905512 340.905145 0 ] (section-4.3.6-9.13) [ 494 0 R /XYZ 65.905512 327.285760 0 ] (section-4.3.6-9.14) [ 494 0 R /XYZ 80.905512 327.285760 0 ] (section-4.3.6-9.15) [ 494 0 R /XYZ 65.905512 313.666375 0 ] (section-4.3.6-9.16) [ 494 0 R /XYZ 80.905512 313.666375 0 ] (section-4.3.6-9.2) [ 494 0 R /XYZ 80.905512 409.002068 0 ] (section-4.3.6-9.3) [ 494 0 R /XYZ 65.905512 395.382684 0 ] (section-4.3.6-9.4) [ 494 0 R /XYZ 80.905512 395.382684 0 ] (section-4.3.6-9.5) [ 494 0 R /XYZ 65.905512 381.763299 0 ] (section-4.3.6-9.6) [ 494 0 R /XYZ 80.905512 381.763299 0 ] (section-4.3.6-9.7) [ 494 0 R /XYZ 65.905512 368.143914 0 ] (section-4.3.6-9.8) [ 494 0 R /XYZ 80.905512 368.143914 0 ] (section-4.3.6-9.9) [ 494 0 R /XYZ 65.905512 354.524529 0 ] (section-4.4) [ 494 0 R /XYZ 65.905512 303.546990 0 ] (section-4.4.1) [ 494 0 R /XYZ 65.905512 277.446990 0 ] (section-4.4.1-1) [ 494 0 R /XYZ 65.905512 244.446990 0 ] (section-4.4.1-10) [ 500 0 R /XYZ 65.905512 426.240838 0 ] (section-4.4.1-11) [ 500 0 R /XYZ 65.905512 392.621453 0 ] (section-4.4.1-11.1) [ 500 0 R /XYZ 65.905512 392.621453 0 ] (section-4.4.1-11.2) [ 500 0 R /XYZ 80.905512 392.621453 0 ] (section-4.4.1-12) [ 500 0 R /XYZ 65.905512 369.002068 0 ] (section-4.4.1-13) [ 500 0 R /XYZ 65.905512 335.382684 0 ] (section-4.4.1-13.1) [ 500 0 R /XYZ 65.905512 335.382684 0 ] (section-4.4.1-13.2) [ 500 0 R /XYZ 80.905512 335.382684 0 ] (section-4.4.1-14) [ 500 0 R /XYZ 65.905512 311.763299 0 ] (section-4.4.1-15) [ 500 0 R /XYZ 65.905512 278.143914 0 ] (section-4.4.1-15.1) [ 500 0 R /XYZ 65.905512 278.143914 0 ] (section-4.4.1-15.2) [ 500 0 R /XYZ 80.905512 278.143914 0 ] (section-4.4.1-16) [ 500 0 R /XYZ 65.905512 254.524529 0 ] (section-4.4.1-17) [ 500 0 R /XYZ 65.905512 220.905145 0 ] (section-4.4.1-17.1) [ 500 0 R /XYZ 65.905512 220.905145 0 ] (section-4.4.1-17.2) [ 500 0 R /XYZ 80.905512 220.905145 0 ] (section-4.4.1-2) [ 494 0 R /XYZ 65.905512 220.827606 0 ] (section-4.4.1-3) [ 494 0 R /XYZ 65.905512 187.208221 0 ] (section-4.4.1-3.1) [ 494 0 R /XYZ 65.905512 187.208221 0 ] (section-4.4.1-3.10) [ 500 0 R /XYZ 80.905512 757.770379 0 ] (section-4.4.1-3.11) [ 500 0 R /XYZ 65.905512 744.150994 0 ] (section-4.4.1-3.12) [ 500 0 R /XYZ 80.905512 744.150994 0 ] (section-4.4.1-3.13) [ 500 0 R /XYZ 65.905512 730.531609 0 ] (section-4.4.1-3.14) [ 500 0 R /XYZ 80.905512 730.531609 0 ] (section-4.4.1-3.15) [ 500 0 R /XYZ 65.905512 716.912225 0 ] (section-4.4.1-3.16) [ 500 0 R /XYZ 80.905512 716.912225 0 ] (section-4.4.1-3.2) [ 494 0 R /XYZ 80.905512 187.208221 0 ] (section-4.4.1-3.3) [ 494 0 R /XYZ 65.905512 173.588836 0 ] (section-4.4.1-3.4) [ 494 0 R /XYZ 80.905512 173.588836 0 ] (section-4.4.1-3.5) [ 494 0 R /XYZ 65.905512 159.969451 0 ] (section-4.4.1-3.6) [ 494 0 R /XYZ 80.905512 159.969451 0 ] (section-4.4.1-3.7) [ 500 0 R /XYZ 65.905512 771.389764 0 ] (section-4.4.1-3.8) [ 500 0 R /XYZ 80.905512 771.389764 0 ] (section-4.4.1-3.9) [ 500 0 R /XYZ 65.905512 757.770379 0 ] (section-4.4.1-4) [ 500 0 R /XYZ 65.905512 693.292840 0 ] (section-4.4.1-5) [ 500 0 R /XYZ 65.905512 659.673455 0 ] (section-4.4.1-5.1) [ 500 0 R /XYZ 65.905512 659.673455 0 ] (section-4.4.1-5.10) [ 500 0 R /XYZ 80.905512 605.195916 0 ] (section-4.4.1-5.11) [ 500 0 R /XYZ 65.905512 591.576531 0 ] (section-4.4.1-5.12) [ 500 0 R /XYZ 80.905512 591.576531 0 ] (section-4.4.1-5.13) [ 500 0 R /XYZ 65.905512 577.957147 0 ] (section-4.4.1-5.14) [ 500 0 R /XYZ 80.905512 577.957147 0 ] (section-4.4.1-5.15) [ 500 0 R /XYZ 65.905512 564.337762 0 ] (section-4.4.1-5.16) [ 500 0 R /XYZ 80.905512 564.337762 0 ] (section-4.4.1-5.2) [ 500 0 R /XYZ 80.905512 659.673455 0 ] (section-4.4.1-5.3) [ 500 0 R /XYZ 65.905512 646.054070 0 ] (section-4.4.1-5.4) [ 500 0 R /XYZ 80.905512 646.054070 0 ] (section-4.4.1-5.5) [ 500 0 R /XYZ 65.905512 632.434686 0 ] (section-4.4.1-5.6) [ 500 0 R /XYZ 80.905512 632.434686 0 ] (section-4.4.1-5.7) [ 500 0 R /XYZ 65.905512 618.815301 0 ] (section-4.4.1-5.8) [ 500 0 R /XYZ 80.905512 618.815301 0 ] (section-4.4.1-5.9) [ 500 0 R /XYZ 65.905512 605.195916 0 ] (section-4.4.1-6) [ 500 0 R /XYZ 65.905512 540.718377 0 ] (section-4.4.1-7) [ 500 0 R /XYZ 65.905512 507.098992 0 ] (section-4.4.1-7.1) [ 500 0 R /XYZ 65.905512 507.098992 0 ] (section-4.4.1-7.2) [ 500 0 R /XYZ 80.905512 507.098992 0 ] (section-4.4.1-8) [ 500 0 R /XYZ 65.905512 483.479608 0 ] (section-4.4.1-9) [ 500 0 R /XYZ 65.905512 449.860223 0 ] (section-4.4.1-9.1) [ 500 0 R /XYZ 65.905512 449.860223 0 ] (section-4.4.1-9.2) [ 500 0 R /XYZ 80.905512 449.860223 0 ] (section-4.5) [ 502 0 R /XYZ 65.905512 771.389764 0 ] (section-4.5.1) [ 502 0 R /XYZ 65.905512 745.289764 0 ] (section-4.5.1-1) [ 502 0 R /XYZ 65.905512 712.289764 0 ] (section-4.5.1-2) [ 502 0 R /XYZ 65.905512 688.670379 0 ] (section-4.5.1-3) [ 502 0 R /XYZ 65.905512 655.050994 0 ] (section-4.5.1-3.1) [ 502 0 R /XYZ 65.905512 655.050994 0 ] (section-4.5.1-3.10) [ 502 0 R /XYZ 80.905512 600.573455 0 ] (section-4.5.1-3.11) [ 502 0 R /XYZ 65.905512 586.954070 0 ] (section-4.5.1-3.12) [ 502 0 R /XYZ 80.905512 586.954070 0 ] (section-4.5.1-3.13) [ 502 0 R /XYZ 65.905512 573.334686 0 ] (section-4.5.1-3.14) [ 502 0 R /XYZ 80.905512 573.334686 0 ] (section-4.5.1-3.15) [ 502 0 R /XYZ 65.905512 559.715301 0 ] (section-4.5.1-3.16) [ 502 0 R /XYZ 80.905512 559.715301 0 ] (section-4.5.1-3.2) [ 502 0 R /XYZ 80.905512 655.050994 0 ] (section-4.5.1-3.3) [ 502 0 R /XYZ 65.905512 641.431609 0 ] (section-4.5.1-3.4) [ 502 0 R /XYZ 80.905512 641.431609 0 ] (section-4.5.1-3.5) [ 502 0 R /XYZ 65.905512 627.812225 0 ] (section-4.5.1-3.6) [ 502 0 R /XYZ 80.905512 627.812225 0 ] (section-4.5.1-3.7) [ 502 0 R /XYZ 65.905512 614.192840 0 ] (section-4.5.1-3.8) [ 502 0 R /XYZ 80.905512 614.192840 0 ] (section-4.5.1-3.9) [ 502 0 R /XYZ 65.905512 600.573455 0 ] (section-4.6) [ 502 0 R /XYZ 65.905512 549.595916 0 ] (section-4.6.1) [ 502 0 R /XYZ 65.905512 523.495916 0 ] (section-4.6.1-1) [ 502 0 R /XYZ 65.905512 490.495916 0 ] (section-4.6.1-2) [ 502 0 R /XYZ 65.905512 466.876531 0 ] (section-4.6.1-3) [ 502 0 R /XYZ 65.905512 433.257147 0 ] (section-4.6.1-3.1) [ 502 0 R /XYZ 65.905512 433.257147 0 ] (section-4.6.1-3.10) [ 502 0 R /XYZ 80.905512 378.779608 0 ] (section-4.6.1-3.11) [ 502 0 R /XYZ 65.905512 365.160223 0 ] (section-4.6.1-3.12) [ 502 0 R /XYZ 80.905512 365.160223 0 ] (section-4.6.1-3.13) [ 502 0 R /XYZ 65.905512 351.540838 0 ] (section-4.6.1-3.14) [ 502 0 R /XYZ 80.905512 351.540838 0 ] (section-4.6.1-3.15) [ 502 0 R /XYZ 65.905512 337.921453 0 ] (section-4.6.1-3.16) [ 502 0 R /XYZ 80.905512 337.921453 0 ] (section-4.6.1-3.2) [ 502 0 R /XYZ 80.905512 433.257147 0 ] (section-4.6.1-3.3) [ 502 0 R /XYZ 65.905512 419.637762 0 ] (section-4.6.1-3.4) [ 502 0 R /XYZ 80.905512 419.637762 0 ] (section-4.6.1-3.5) [ 502 0 R /XYZ 65.905512 406.018377 0 ] (section-4.6.1-3.6) [ 502 0 R /XYZ 80.905512 406.018377 0 ] (section-4.6.1-3.7) [ 502 0 R /XYZ 65.905512 392.398992 0 ] (section-4.6.1-3.8) [ 502 0 R /XYZ 80.905512 392.398992 0 ] (section-4.6.1-3.9) [ 502 0 R /XYZ 65.905512 378.779608 0 ] (section-4.7) [ 502 0 R /XYZ 65.905512 327.802068 0 ] (section-4.7.1) [ 502 0 R /XYZ 65.905512 301.702068 0 ] (section-4.7.1-1) [ 502 0 R /XYZ 65.905512 268.702068 0 ] (section-4.7.1-2) [ 502 0 R /XYZ 65.905512 245.082684 0 ] (section-4.7.1-3) [ 502 0 R /XYZ 65.905512 211.463299 0 ] (section-4.7.1-3.1) [ 502 0 R /XYZ 65.905512 211.463299 0 ] (section-4.7.1-3.10) [ 516 0 R /XYZ 80.905512 771.389764 0 ] (section-4.7.1-3.11) [ 516 0 R /XYZ 65.905512 757.770379 0 ] (section-4.7.1-3.12) [ 516 0 R /XYZ 80.905512 757.770379 0 ] (section-4.7.1-3.13) [ 516 0 R /XYZ 65.905512 744.150994 0 ] (section-4.7.1-3.14) [ 516 0 R /XYZ 80.905512 744.150994 0 ] (section-4.7.1-3.15) [ 516 0 R /XYZ 65.905512 730.531609 0 ] (section-4.7.1-3.16) [ 516 0 R /XYZ 80.905512 730.531609 0 ] (section-4.7.1-3.2) [ 502 0 R /XYZ 80.905512 211.463299 0 ] (section-4.7.1-3.3) [ 502 0 R /XYZ 65.905512 197.843914 0 ] (section-4.7.1-3.4) [ 502 0 R /XYZ 80.905512 197.843914 0 ] (section-4.7.1-3.5) [ 502 0 R /XYZ 65.905512 184.224529 0 ] (section-4.7.1-3.6) [ 502 0 R /XYZ 80.905512 184.224529 0 ] (section-4.7.1-3.7) [ 502 0 R /XYZ 65.905512 170.605145 0 ] (section-4.7.1-3.8) [ 502 0 R /XYZ 80.905512 170.605145 0 ] (section-4.7.1-3.9) [ 516 0 R /XYZ 65.905512 771.389764 0 ] (section-4.7.1-4) [ 516 0 R /XYZ 65.905512 706.912225 0 ] (section-4.7.1-5) [ 516 0 R /XYZ 65.905512 673.292840 0 ] (section-4.7.1-5.1) [ 516 0 R /XYZ 65.905512 673.292840 0 ] (section-4.7.1-5.10) [ 516 0 R /XYZ 80.905512 618.815301 0 ] (section-4.7.1-5.11) [ 516 0 R /XYZ 65.905512 605.195916 0 ] (section-4.7.1-5.12) [ 516 0 R /XYZ 80.905512 605.195916 0 ] (section-4.7.1-5.13) [ 516 0 R /XYZ 65.905512 591.576531 0 ] (section-4.7.1-5.14) [ 516 0 R /XYZ 80.905512 591.576531 0 ] (section-4.7.1-5.15) [ 516 0 R /XYZ 65.905512 577.957147 0 ] (section-4.7.1-5.16) [ 516 0 R /XYZ 80.905512 577.957147 0 ] (section-4.7.1-5.2) [ 516 0 R /XYZ 80.905512 673.292840 0 ] (section-4.7.1-5.3) [ 516 0 R /XYZ 65.905512 659.673455 0 ] (section-4.7.1-5.4) [ 516 0 R /XYZ 80.905512 659.673455 0 ] (section-4.7.1-5.5) [ 516 0 R /XYZ 65.905512 646.054070 0 ] (section-4.7.1-5.6) [ 516 0 R /XYZ 80.905512 646.054070 0 ] (section-4.7.1-5.7) [ 516 0 R /XYZ 65.905512 632.434686 0 ] (section-4.7.1-5.8) [ 516 0 R /XYZ 80.905512 632.434686 0 ] (section-4.7.1-5.9) [ 516 0 R /XYZ 65.905512 618.815301 0 ] (section-4.8) [ 516 0 R /XYZ 65.905512 567.837762 0 ] (section-4.8.1) [ 516 0 R /XYZ 65.905512 541.737762 0 ] (section-4.8.1-1) [ 516 0 R /XYZ 65.905512 508.737762 0 ] (section-4.8.1-2) [ 516 0 R /XYZ 65.905512 485.118377 0 ] (section-4.8.1-3) [ 516 0 R /XYZ 65.905512 451.498992 0 ] (section-4.8.1-3.1) [ 516 0 R /XYZ 65.905512 451.498992 0 ] (section-4.8.1-3.10) [ 516 0 R /XYZ 80.905512 397.021453 0 ] (section-4.8.1-3.11) [ 516 0 R /XYZ 65.905512 383.402068 0 ] (section-4.8.1-3.12) [ 516 0 R /XYZ 80.905512 383.402068 0 ] (section-4.8.1-3.13) [ 516 0 R /XYZ 65.905512 369.782684 0 ] (section-4.8.1-3.14) [ 516 0 R /XYZ 80.905512 369.782684 0 ] (section-4.8.1-3.15) [ 516 0 R /XYZ 65.905512 356.163299 0 ] (section-4.8.1-3.16) [ 516 0 R /XYZ 80.905512 356.163299 0 ] (section-4.8.1-3.2) [ 516 0 R /XYZ 80.905512 451.498992 0 ] (section-4.8.1-3.3) [ 516 0 R /XYZ 65.905512 437.879608 0 ] (section-4.8.1-3.4) [ 516 0 R /XYZ 80.905512 437.879608 0 ] (section-4.8.1-3.5) [ 516 0 R /XYZ 65.905512 424.260223 0 ] (section-4.8.1-3.6) [ 516 0 R /XYZ 80.905512 424.260223 0 ] (section-4.8.1-3.7) [ 516 0 R /XYZ 65.905512 410.640838 0 ] (section-4.8.1-3.8) [ 516 0 R /XYZ 80.905512 410.640838 0 ] (section-4.8.1-3.9) [ 516 0 R /XYZ 65.905512 397.021453 0 ] (section-4.8.2) [ 516 0 R /XYZ 65.905512 346.043914 0 ] (section-4.8.2-1) [ 516 0 R /XYZ 65.905512 313.043914 0 ] (section-4.8.2-2) [ 516 0 R /XYZ 65.905512 289.424529 0 ] (section-4.8.2-3) [ 516 0 R /XYZ 65.905512 255.805145 0 ] (section-4.8.2-3.1) [ 516 0 R /XYZ 65.905512 255.805145 0 ] (section-4.8.2-3.10) [ 516 0 R /XYZ 80.905512 201.327606 0 ] (section-4.8.2-3.11) [ 516 0 R /XYZ 65.905512 187.708221 0 ] (section-4.8.2-3.12) [ 516 0 R /XYZ 80.905512 187.708221 0 ] (section-4.8.2-3.13) [ 516 0 R /XYZ 65.905512 174.088836 0 ] (section-4.8.2-3.14) [ 516 0 R /XYZ 80.905512 174.088836 0 ] (section-4.8.2-3.15) [ 516 0 R /XYZ 65.905512 160.469451 0 ] (section-4.8.2-3.16) [ 516 0 R /XYZ 80.905512 160.469451 0 ] (section-4.8.2-3.2) [ 516 0 R /XYZ 80.905512 255.805145 0 ] (section-4.8.2-3.3) [ 516 0 R /XYZ 65.905512 242.185760 0 ] (section-4.8.2-3.4) [ 516 0 R /XYZ 80.905512 242.185760 0 ] (section-4.8.2-3.5) [ 516 0 R /XYZ 65.905512 228.566375 0 ] (section-4.8.2-3.6) [ 516 0 R /XYZ 80.905512 228.566375 0 ] (section-4.8.2-3.7) [ 516 0 R /XYZ 65.905512 214.946990 0 ] (section-4.8.2-3.8) [ 516 0 R /XYZ 80.905512 214.946990 0 ] (section-4.8.2-3.9) [ 516 0 R /XYZ 65.905512 201.327606 0 ] (section-4.8.2-4) [ 524 0 R /XYZ 65.905512 771.389764 0 ] (section-4.8.2-5) [ 524 0 R /XYZ 65.905512 737.770379 0 ] (section-4.8.2-5.1) [ 524 0 R /XYZ 65.905512 737.770379 0 ] (section-4.8.2-5.10) [ 524 0 R /XYZ 80.905512 683.292840 0 ] (section-4.8.2-5.11) [ 524 0 R /XYZ 65.905512 669.673455 0 ] (section-4.8.2-5.12) [ 524 0 R /XYZ 80.905512 669.673455 0 ] (section-4.8.2-5.13) [ 524 0 R /XYZ 65.905512 656.054070 0 ] (section-4.8.2-5.14) [ 524 0 R /XYZ 80.905512 656.054070 0 ] (section-4.8.2-5.15) [ 524 0 R /XYZ 65.905512 642.434686 0 ] (section-4.8.2-5.16) [ 524 0 R /XYZ 80.905512 642.434686 0 ] (section-4.8.2-5.2) [ 524 0 R /XYZ 80.905512 737.770379 0 ] (section-4.8.2-5.3) [ 524 0 R /XYZ 65.905512 724.150994 0 ] (section-4.8.2-5.4) [ 524 0 R /XYZ 80.905512 724.150994 0 ] (section-4.8.2-5.5) [ 524 0 R /XYZ 65.905512 710.531609 0 ] (section-4.8.2-5.6) [ 524 0 R /XYZ 80.905512 710.531609 0 ] (section-4.8.2-5.7) [ 524 0 R /XYZ 65.905512 696.912225 0 ] (section-4.8.2-5.8) [ 524 0 R /XYZ 80.905512 696.912225 0 ] (section-4.8.2-5.9) [ 524 0 R /XYZ 65.905512 683.292840 0 ] (section-4.9) [ 524 0 R /XYZ 65.905512 632.315301 0 ] (section-4.9.1) [ 524 0 R /XYZ 65.905512 606.215301 0 ] (section-4.9.1-1) [ 524 0 R /XYZ 65.905512 573.215301 0 ] (section-4.9.1-2) [ 524 0 R /XYZ 65.905512 549.595916 0 ] (section-4.9.1-3) [ 524 0 R /XYZ 65.905512 515.976531 0 ] (section-4.9.1-3.1) [ 524 0 R /XYZ 65.905512 515.976531 0 ] (section-4.9.1-3.10) [ 524 0 R /XYZ 80.905512 461.498992 0 ] (section-4.9.1-3.11) [ 524 0 R /XYZ 65.905512 447.879608 0 ] (section-4.9.1-3.12) [ 524 0 R /XYZ 80.905512 447.879608 0 ] (section-4.9.1-3.13) [ 524 0 R /XYZ 65.905512 434.260223 0 ] (section-4.9.1-3.14) [ 524 0 R /XYZ 80.905512 434.260223 0 ] (section-4.9.1-3.15) [ 524 0 R /XYZ 65.905512 420.640838 0 ] (section-4.9.1-3.16) [ 524 0 R /XYZ 80.905512 420.640838 0 ] (section-4.9.1-3.2) [ 524 0 R /XYZ 80.905512 515.976531 0 ] (section-4.9.1-3.3) [ 524 0 R /XYZ 65.905512 502.357147 0 ] (section-4.9.1-3.4) [ 524 0 R /XYZ 80.905512 502.357147 0 ] (section-4.9.1-3.5) [ 524 0 R /XYZ 65.905512 488.737762 0 ] (section-4.9.1-3.6) [ 524 0 R /XYZ 80.905512 488.737762 0 ] (section-4.9.1-3.7) [ 524 0 R /XYZ 65.905512 475.118377 0 ] (section-4.9.1-3.8) [ 524 0 R /XYZ 80.905512 475.118377 0 ] (section-4.9.1-3.9) [ 524 0 R /XYZ 65.905512 461.498992 0 ] (section-4.9.2) [ 524 0 R /XYZ 65.905512 410.521453 0 ] (section-4.9.2-1) [ 524 0 R /XYZ 65.905512 377.521453 0 ] (section-4.9.2-2) [ 524 0 R /XYZ 65.905512 353.902068 0 ] (section-4.9.2-3) [ 524 0 R /XYZ 65.905512 320.282684 0 ] (section-4.9.2-3.1) [ 524 0 R /XYZ 65.905512 320.282684 0 ] (section-4.9.2-3.10) [ 524 0 R /XYZ 80.905512 265.805145 0 ] (section-4.9.2-3.11) [ 524 0 R /XYZ 65.905512 252.185760 0 ] (section-4.9.2-3.12) [ 524 0 R /XYZ 80.905512 252.185760 0 ] (section-4.9.2-3.13) [ 524 0 R /XYZ 65.905512 238.566375 0 ] (section-4.9.2-3.14) [ 524 0 R /XYZ 80.905512 238.566375 0 ] (section-4.9.2-3.15) [ 524 0 R /XYZ 65.905512 224.946990 0 ] (section-4.9.2-3.16) [ 524 0 R /XYZ 80.905512 224.946990 0 ] (section-4.9.2-3.2) [ 524 0 R /XYZ 80.905512 320.282684 0 ] (section-4.9.2-3.3) [ 524 0 R /XYZ 65.905512 306.663299 0 ] (section-4.9.2-3.4) [ 524 0 R /XYZ 80.905512 306.663299 0 ] (section-4.9.2-3.5) [ 524 0 R /XYZ 65.905512 293.043914 0 ] (section-4.9.2-3.6) [ 524 0 R /XYZ 80.905512 293.043914 0 ] (section-4.9.2-3.7) [ 524 0 R /XYZ 65.905512 279.424529 0 ] (section-4.9.2-3.8) [ 524 0 R /XYZ 80.905512 279.424529 0 ] (section-4.9.2-3.9) [ 524 0 R /XYZ 65.905512 265.805145 0 ] (section-5) [ 524 0 R /XYZ 65.905512 214.827606 0 ] (section-5.1) [ 524 0 R /XYZ 65.905512 180.807606 0 ] (section-abstract) [ 6 0 R /XYZ 65.905512 663.848514 0 ] (section-abstract-1) [ 6 0 R /XYZ 65.905512 616.328514 0 ] (section-abstract-2) [ 6 0 R /XYZ 65.905512 524.612205 0 ] (section-toc.1) [ 6 0 R /XYZ 65.905512 513.742820 0 ] (section-toc.1-1.1) [ 6 0 R /XYZ 65.905512 465.922820 0 ] (section-toc.1-1.1.1) [ 6 0 R /XYZ 77.905512 465.922820 0 ] (section-toc.1-1.1.2.1) [ 6 0 R /XYZ 77.905512 445.422820 0 ] (section-toc.1-1.1.2.1.1) [ 6 0 R /XYZ 89.905512 445.422820 0 ] (section-toc.1-1.1.2.1.2.1) [ 6 0 R /XYZ 89.905512 424.922820 0 ] (section-toc.1-1.1.2.1.2.1.1) [ 6 0 R /XYZ 101.905512 424.922820 0 ] (section-toc.1-1.1.2.2) [ 6 0 R /XYZ 77.905512 401.922820 0 ] (section-toc.1-1.1.2.2.1) [ 6 0 R /XYZ 89.905512 401.922820 0 ] (section-toc.1-1.1.2.2.2.1) [ 6 0 R /XYZ 89.905512 381.422820 0 ] (section-toc.1-1.1.2.2.2.1.1) [ 6 0 R /XYZ 101.905512 381.422820 0 ] (section-toc.1-1.2) [ 6 0 R /XYZ 65.905512 358.422820 0 ] (section-toc.1-1.2.1) [ 6 0 R /XYZ 77.905512 358.422820 0 ] (section-toc.1-1.3) [ 6 0 R /XYZ 65.905512 337.922820 0 ] (section-toc.1-1.3.1) [ 6 0 R /XYZ 77.905512 337.922820 0 ] (section-toc.1-1.3.2.1) [ 6 0 R /XYZ 77.905512 317.422820 0 ] (section-toc.1-1.3.2.1.1) [ 6 0 R /XYZ 89.905512 317.422820 0 ] (section-toc.1-1.3.2.1.2.1) [ 6 0 R /XYZ 89.905512 296.922820 0 ] (section-toc.1-1.3.2.1.2.1.1) [ 6 0 R /XYZ 101.905512 296.922820 0 ] (section-toc.1-1.3.2.1.2.2) [ 6 0 R /XYZ 89.905512 276.422820 0 ] (section-toc.1-1.3.2.1.2.2.1) [ 6 0 R /XYZ 101.905512 276.422820 0 ] (section-toc.1-1.3.2.1.2.3) [ 6 0 R /XYZ 89.905512 255.922820 0 ] (section-toc.1-1.3.2.1.2.3.1) [ 6 0 R /XYZ 101.905512 255.922820 0 ] (section-toc.1-1.3.2.1.2.4) [ 6 0 R /XYZ 89.905512 235.422820 0 ] (section-toc.1-1.3.2.1.2.4.1) [ 6 0 R /XYZ 101.905512 235.422820 0 ] (section-toc.1-1.3.2.1.2.5) [ 6 0 R /XYZ 89.905512 214.922820 0 ] (section-toc.1-1.3.2.1.2.5.1) [ 6 0 R /XYZ 101.905512 214.922820 0 ] (section-toc.1-1.3.2.1.2.6) [ 6 0 R /XYZ 89.905512 194.422820 0 ] (section-toc.1-1.3.2.1.2.6.1) [ 6 0 R /XYZ 101.905512 194.422820 0 ] (section-toc.1-1.3.2.2) [ 38 0 R /XYZ 77.905512 771.389764 0 ] (section-toc.1-1.3.2.2.1) [ 38 0 R /XYZ 89.905512 771.389764 0 ] (section-toc.1-1.3.2.2.2.1) [ 38 0 R /XYZ 89.905512 750.889764 0 ] (section-toc.1-1.3.2.2.2.1.1) [ 38 0 R /XYZ 101.905512 750.889764 0 ] (section-toc.1-1.3.2.2.2.2) [ 38 0 R /XYZ 89.905512 730.389764 0 ] (section-toc.1-1.3.2.2.2.2.1) [ 38 0 R /XYZ 101.905512 730.389764 0 ] (section-toc.1-1.3.2.2.2.3) [ 38 0 R /XYZ 89.905512 709.889764 0 ] (section-toc.1-1.3.2.2.2.3.1) [ 38 0 R /XYZ 101.905512 709.889764 0 ] (section-toc.1-1.3.2.2.2.4) [ 38 0 R /XYZ 89.905512 689.389764 0 ] (section-toc.1-1.3.2.2.2.4.1) [ 38 0 R /XYZ 101.905512 689.389764 0 ] (section-toc.1-1.3.2.2.2.5) [ 38 0 R /XYZ 89.905512 668.889764 0 ] (section-toc.1-1.3.2.2.2.5.1) [ 38 0 R /XYZ 101.905512 668.889764 0 ] (section-toc.1-1.3.2.2.2.6) [ 38 0 R /XYZ 89.905512 648.389764 0 ] (section-toc.1-1.3.2.2.2.6.1) [ 38 0 R /XYZ 101.905512 648.389764 0 ] (section-toc.1-1.3.2.3) [ 38 0 R /XYZ 77.905512 625.389764 0 ] (section-toc.1-1.3.2.3.1) [ 38 0 R /XYZ 89.905512 625.389764 0 ] (section-toc.1-1.3.2.3.2.1) [ 38 0 R /XYZ 89.905512 604.889764 0 ] (section-toc.1-1.3.2.3.2.1.1) [ 38 0 R /XYZ 101.905512 604.889764 0 ] (section-toc.1-1.3.2.3.2.1.2.1) [ 38 0 R /XYZ 101.905512 584.389764 0 ] (section-toc.1-1.3.2.3.2.1.2.1.1) [ 38 0 R /XYZ 113.905512 584.389764 0 ] (section-toc.1-1.3.2.3.2.1.2.10) [ 38 0 R /XYZ 101.905512 399.889764 0 ] (section-toc.1-1.3.2.3.2.1.2.10.1) [ 38 0 R /XYZ 113.905512 399.889764 0 ] (section-toc.1-1.3.2.3.2.1.2.11) [ 38 0 R /XYZ 101.905512 379.389764 0 ] (section-toc.1-1.3.2.3.2.1.2.11.1) [ 38 0 R /XYZ 113.905512 379.389764 0 ] (section-toc.1-1.3.2.3.2.1.2.12) [ 38 0 R /XYZ 101.905512 358.889764 0 ] (section-toc.1-1.3.2.3.2.1.2.12.1) [ 38 0 R /XYZ 113.905512 358.889764 0 ] (section-toc.1-1.3.2.3.2.1.2.13) [ 38 0 R /XYZ 101.905512 338.389764 0 ] (section-toc.1-1.3.2.3.2.1.2.13.1) [ 38 0 R /XYZ 113.905512 338.389764 0 ] (section-toc.1-1.3.2.3.2.1.2.14) [ 38 0 R /XYZ 101.905512 317.889764 0 ] (section-toc.1-1.3.2.3.2.1.2.14.1) [ 38 0 R /XYZ 113.905512 317.889764 0 ] (section-toc.1-1.3.2.3.2.1.2.15) [ 38 0 R /XYZ 101.905512 297.389764 0 ] (section-toc.1-1.3.2.3.2.1.2.15.1) [ 38 0 R /XYZ 113.905512 297.389764 0 ] (section-toc.1-1.3.2.3.2.1.2.16) [ 38 0 R /XYZ 101.905512 276.889764 0 ] (section-toc.1-1.3.2.3.2.1.2.16.1) [ 38 0 R /XYZ 113.905512 276.889764 0 ] (section-toc.1-1.3.2.3.2.1.2.17) [ 38 0 R /XYZ 101.905512 256.389764 0 ] (section-toc.1-1.3.2.3.2.1.2.17.1) [ 38 0 R /XYZ 113.905512 256.389764 0 ] (section-toc.1-1.3.2.3.2.1.2.18) [ 38 0 R /XYZ 101.905512 235.889764 0 ] (section-toc.1-1.3.2.3.2.1.2.18.1) [ 38 0 R /XYZ 113.905512 235.889764 0 ] (section-toc.1-1.3.2.3.2.1.2.19) [ 38 0 R /XYZ 101.905512 215.389764 0 ] (section-toc.1-1.3.2.3.2.1.2.19.1) [ 38 0 R /XYZ 113.905512 215.389764 0 ] (section-toc.1-1.3.2.3.2.1.2.2) [ 38 0 R /XYZ 101.905512 563.889764 0 ] (section-toc.1-1.3.2.3.2.1.2.2.1) [ 38 0 R /XYZ 113.905512 563.889764 0 ] (section-toc.1-1.3.2.3.2.1.2.20) [ 38 0 R /XYZ 101.905512 194.889764 0 ] (section-toc.1-1.3.2.3.2.1.2.20.1) [ 38 0 R /XYZ 113.905512 194.889764 0 ] (section-toc.1-1.3.2.3.2.1.2.21) [ 38 0 R /XYZ 101.905512 174.389764 0 ] (section-toc.1-1.3.2.3.2.1.2.21.1) [ 38 0 R /XYZ 113.905512 174.389764 0 ] (section-toc.1-1.3.2.3.2.1.2.22) [ 100 0 R /XYZ 101.905512 771.389764 0 ] (section-toc.1-1.3.2.3.2.1.2.22.1) [ 100 0 R /XYZ 113.905512 771.389764 0 ] (section-toc.1-1.3.2.3.2.1.2.3) [ 38 0 R /XYZ 101.905512 543.389764 0 ] (section-toc.1-1.3.2.3.2.1.2.3.1) [ 38 0 R /XYZ 113.905512 543.389764 0 ] (section-toc.1-1.3.2.3.2.1.2.4) [ 38 0 R /XYZ 101.905512 522.889764 0 ] (section-toc.1-1.3.2.3.2.1.2.4.1) [ 38 0 R /XYZ 113.905512 522.889764 0 ] (section-toc.1-1.3.2.3.2.1.2.5) [ 38 0 R /XYZ 101.905512 502.389764 0 ] (section-toc.1-1.3.2.3.2.1.2.5.1) [ 38 0 R /XYZ 113.905512 502.389764 0 ] (section-toc.1-1.3.2.3.2.1.2.6) [ 38 0 R /XYZ 101.905512 481.889764 0 ] (section-toc.1-1.3.2.3.2.1.2.6.1) [ 38 0 R /XYZ 113.905512 481.889764 0 ] (section-toc.1-1.3.2.3.2.1.2.7) [ 38 0 R /XYZ 101.905512 461.389764 0 ] (section-toc.1-1.3.2.3.2.1.2.7.1) [ 38 0 R /XYZ 113.905512 461.389764 0 ] (section-toc.1-1.3.2.3.2.1.2.8) [ 38 0 R /XYZ 101.905512 440.889764 0 ] (section-toc.1-1.3.2.3.2.1.2.8.1) [ 38 0 R /XYZ 113.905512 440.889764 0 ] (section-toc.1-1.3.2.3.2.1.2.9) [ 38 0 R /XYZ 101.905512 420.389764 0 ] (section-toc.1-1.3.2.3.2.1.2.9.1) [ 38 0 R /XYZ 113.905512 420.389764 0 ] (section-toc.1-1.3.2.3.2.2) [ 100 0 R /XYZ 89.905512 748.389764 0 ] (section-toc.1-1.3.2.3.2.2.1) [ 100 0 R /XYZ 101.905512 748.389764 0 ] (section-toc.1-1.3.2.3.2.2.2.1) [ 100 0 R /XYZ 101.905512 727.889764 0 ] (section-toc.1-1.3.2.3.2.2.2.1.1) [ 100 0 R /XYZ 113.905512 727.889764 0 ] (section-toc.1-1.3.2.3.2.2.2.2) [ 100 0 R /XYZ 101.905512 707.389764 0 ] (section-toc.1-1.3.2.3.2.2.2.2.1) [ 100 0 R /XYZ 113.905512 707.389764 0 ] (section-toc.1-1.3.2.3.2.2.2.3) [ 100 0 R /XYZ 101.905512 686.889764 0 ] (section-toc.1-1.3.2.3.2.2.2.3.1) [ 100 0 R /XYZ 113.905512 686.889764 0 ] (section-toc.1-1.3.2.3.2.2.2.4) [ 100 0 R /XYZ 101.905512 666.389764 0 ] (section-toc.1-1.3.2.3.2.2.2.4.1) [ 100 0 R /XYZ 113.905512 666.389764 0 ] (section-toc.1-1.3.2.3.2.3) [ 100 0 R /XYZ 89.905512 643.389764 0 ] (section-toc.1-1.3.2.3.2.3.1) [ 100 0 R /XYZ 101.905512 643.389764 0 ] (section-toc.1-1.3.2.3.2.3.2.1) [ 100 0 R /XYZ 101.905512 622.889764 0 ] (section-toc.1-1.3.2.3.2.3.2.1.1) [ 100 0 R /XYZ 113.905512 622.889764 0 ] (section-toc.1-1.3.2.3.2.3.2.2) [ 100 0 R /XYZ 101.905512 602.389764 0 ] (section-toc.1-1.3.2.3.2.3.2.2.1) [ 100 0 R /XYZ 113.905512 602.389764 0 ] (section-toc.1-1.3.2.3.2.3.2.3) [ 100 0 R /XYZ 101.905512 581.889764 0 ] (section-toc.1-1.3.2.3.2.3.2.3.1) [ 100 0 R /XYZ 113.905512 581.889764 0 ] (section-toc.1-1.3.2.3.2.3.2.4) [ 100 0 R /XYZ 101.905512 561.389764 0 ] (section-toc.1-1.3.2.3.2.3.2.4.1) [ 100 0 R /XYZ 113.905512 561.389764 0 ] (section-toc.1-1.3.2.3.2.4) [ 100 0 R /XYZ 89.905512 538.389764 0 ] (section-toc.1-1.3.2.3.2.4.1) [ 100 0 R /XYZ 101.905512 538.389764 0 ] (section-toc.1-1.3.2.3.2.4.2.1) [ 100 0 R /XYZ 101.905512 517.889764 0 ] (section-toc.1-1.3.2.3.2.4.2.1.1) [ 100 0 R /XYZ 113.905512 517.889764 0 ] (section-toc.1-1.3.2.3.2.5) [ 100 0 R /XYZ 89.905512 494.889764 0 ] (section-toc.1-1.3.2.3.2.5.1) [ 100 0 R /XYZ 101.905512 494.889764 0 ] (section-toc.1-1.3.2.3.2.5.2.1) [ 100 0 R /XYZ 101.905512 474.389764 0 ] (section-toc.1-1.3.2.3.2.5.2.1.1) [ 100 0 R /XYZ 113.905512 474.389764 0 ] (section-toc.1-1.3.2.3.2.5.2.2) [ 100 0 R /XYZ 101.905512 453.889764 0 ] (section-toc.1-1.3.2.3.2.5.2.2.1) [ 100 0 R /XYZ 113.905512 453.889764 0 ] (section-toc.1-1.3.2.3.2.5.2.3) [ 100 0 R /XYZ 101.905512 433.389764 0 ] (section-toc.1-1.3.2.3.2.5.2.3.1) [ 100 0 R /XYZ 113.905512 433.389764 0 ] (section-toc.1-1.3.2.3.2.5.2.4) [ 100 0 R /XYZ 101.905512 412.889764 0 ] (section-toc.1-1.3.2.3.2.5.2.4.1) [ 100 0 R /XYZ 113.905512 412.889764 0 ] (section-toc.1-1.3.2.3.2.5.2.5) [ 100 0 R /XYZ 101.905512 392.389764 0 ] (section-toc.1-1.3.2.3.2.5.2.5.1) [ 100 0 R /XYZ 113.905512 392.389764 0 ] (section-toc.1-1.3.2.3.2.6) [ 100 0 R /XYZ 89.905512 369.389764 0 ] (section-toc.1-1.3.2.3.2.6.1) [ 100 0 R /XYZ 101.905512 369.389764 0 ] (section-toc.1-1.3.2.3.2.6.2.1) [ 100 0 R /XYZ 101.905512 348.889764 0 ] (section-toc.1-1.3.2.3.2.6.2.1.1) [ 100 0 R /XYZ 113.905512 348.889764 0 ] (section-toc.1-1.3.2.3.2.6.2.2) [ 100 0 R /XYZ 101.905512 328.389764 0 ] (section-toc.1-1.3.2.3.2.6.2.2.1) [ 100 0 R /XYZ 113.905512 328.389764 0 ] (section-toc.1-1.3.2.3.2.6.2.3) [ 100 0 R /XYZ 101.905512 307.889764 0 ] (section-toc.1-1.3.2.3.2.6.2.3.1) [ 100 0 R /XYZ 113.905512 307.889764 0 ] (section-toc.1-1.4) [ 100 0 R /XYZ 65.905512 284.889764 0 ] (section-toc.1-1.4.1) [ 100 0 R /XYZ 77.905512 284.889764 0 ] (section-toc.1-1.4.2.1) [ 100 0 R /XYZ 77.905512 264.389764 0 ] (section-toc.1-1.4.2.1.1) [ 100 0 R /XYZ 89.905512 264.389764 0 ] (section-toc.1-1.4.2.1.2.1) [ 100 0 R /XYZ 89.905512 243.889764 0 ] (section-toc.1-1.4.2.1.2.1.1) [ 100 0 R /XYZ 101.905512 243.889764 0 ] (section-toc.1-1.4.2.1.2.2) [ 100 0 R /XYZ 89.905512 223.389764 0 ] (section-toc.1-1.4.2.1.2.2.1) [ 100 0 R /XYZ 101.905512 223.389764 0 ] (section-toc.1-1.4.2.2) [ 100 0 R /XYZ 77.905512 200.389764 0 ] (section-toc.1-1.4.2.2.1) [ 100 0 R /XYZ 89.905512 200.389764 0 ] (section-toc.1-1.4.2.2.2.1) [ 100 0 R /XYZ 89.905512 179.889764 0 ] (section-toc.1-1.4.2.2.2.1.1) [ 100 0 R /XYZ 101.905512 179.889764 0 ] (section-toc.1-1.4.2.2.2.2) [ 100 0 R /XYZ 89.905512 159.389764 0 ] (section-toc.1-1.4.2.2.2.2.1) [ 100 0 R /XYZ 101.905512 159.389764 0 ] (section-toc.1-1.4.2.3) [ 162 0 R /XYZ 77.905512 771.389764 0 ] (section-toc.1-1.4.2.3.1) [ 162 0 R /XYZ 89.905512 771.389764 0 ] (section-toc.1-1.4.2.3.2.1) [ 162 0 R /XYZ 89.905512 750.889764 0 ] (section-toc.1-1.4.2.3.2.1.1) [ 162 0 R /XYZ 101.905512 750.889764 0 ] (section-toc.1-1.4.2.3.2.2) [ 162 0 R /XYZ 89.905512 730.389764 0 ] (section-toc.1-1.4.2.3.2.2.1) [ 162 0 R /XYZ 101.905512 730.389764 0 ] (section-toc.1-1.4.2.3.2.3) [ 162 0 R /XYZ 89.905512 709.889764 0 ] (section-toc.1-1.4.2.3.2.3.1) [ 162 0 R /XYZ 101.905512 709.889764 0 ] (section-toc.1-1.4.2.3.2.4) [ 162 0 R /XYZ 89.905512 689.389764 0 ] (section-toc.1-1.4.2.3.2.4.1) [ 162 0 R /XYZ 101.905512 689.389764 0 ] (section-toc.1-1.4.2.3.2.5) [ 162 0 R /XYZ 89.905512 668.889764 0 ] (section-toc.1-1.4.2.3.2.5.1) [ 162 0 R /XYZ 101.905512 668.889764 0 ] (section-toc.1-1.4.2.3.2.6) [ 162 0 R /XYZ 89.905512 648.389764 0 ] (section-toc.1-1.4.2.3.2.6.1) [ 162 0 R /XYZ 101.905512 648.389764 0 ] (section-toc.1-1.4.2.4) [ 162 0 R /XYZ 77.905512 625.389764 0 ] (section-toc.1-1.4.2.4.1) [ 162 0 R /XYZ 89.905512 625.389764 0 ] (section-toc.1-1.4.2.4.2.1) [ 162 0 R /XYZ 89.905512 604.889764 0 ] (section-toc.1-1.4.2.4.2.1.1) [ 162 0 R /XYZ 101.905512 604.889764 0 ] (section-toc.1-1.4.2.5) [ 162 0 R /XYZ 77.905512 581.889764 0 ] (section-toc.1-1.4.2.5.1) [ 162 0 R /XYZ 89.905512 581.889764 0 ] (section-toc.1-1.4.2.5.2.1) [ 162 0 R /XYZ 89.905512 561.389764 0 ] (section-toc.1-1.4.2.5.2.1.1) [ 162 0 R /XYZ 101.905512 561.389764 0 ] (section-toc.1-1.4.2.6) [ 162 0 R /XYZ 77.905512 538.389764 0 ] (section-toc.1-1.4.2.6.1) [ 162 0 R /XYZ 89.905512 538.389764 0 ] (section-toc.1-1.4.2.6.2.1) [ 162 0 R /XYZ 89.905512 517.889764 0 ] (section-toc.1-1.4.2.6.2.1.1) [ 162 0 R /XYZ 101.905512 517.889764 0 ] (section-toc.1-1.4.2.7) [ 162 0 R /XYZ 77.905512 494.889764 0 ] (section-toc.1-1.4.2.7.1) [ 162 0 R /XYZ 89.905512 494.889764 0 ] (section-toc.1-1.4.2.7.2.1) [ 162 0 R /XYZ 89.905512 474.389764 0 ] (section-toc.1-1.4.2.7.2.1.1) [ 162 0 R /XYZ 101.905512 474.389764 0 ] (section-toc.1-1.4.2.8) [ 162 0 R /XYZ 77.905512 451.389764 0 ] (section-toc.1-1.4.2.8.1) [ 162 0 R /XYZ 89.905512 451.389764 0 ] (section-toc.1-1.4.2.8.2.1) [ 162 0 R /XYZ 89.905512 430.889764 0 ] (section-toc.1-1.4.2.8.2.1.1) [ 162 0 R /XYZ 101.905512 430.889764 0 ] (section-toc.1-1.4.2.8.2.2) [ 162 0 R /XYZ 89.905512 410.389764 0 ] (section-toc.1-1.4.2.8.2.2.1) [ 162 0 R /XYZ 101.905512 410.389764 0 ] (section-toc.1-1.4.2.9) [ 162 0 R /XYZ 77.905512 387.389764 0 ] (section-toc.1-1.4.2.9.1) [ 162 0 R /XYZ 89.905512 387.389764 0 ] (section-toc.1-1.4.2.9.2.1) [ 162 0 R /XYZ 89.905512 366.889764 0 ] (section-toc.1-1.4.2.9.2.1.1) [ 162 0 R /XYZ 101.905512 366.889764 0 ] (section-toc.1-1.4.2.9.2.2) [ 162 0 R /XYZ 89.905512 346.389764 0 ] (section-toc.1-1.4.2.9.2.2.1) [ 162 0 R /XYZ 101.905512 346.389764 0 ] (section-toc.1-1.5) [ 162 0 R /XYZ 65.905512 323.389764 0 ] (section-toc.1-1.5.1) [ 162 0 R /XYZ 77.905512 323.389764 0 ] (section-toc.1-1.5.2.1) [ 162 0 R /XYZ 77.905512 302.889764 0 ] (section-toc.1-1.5.2.1.1) [ 162 0 R /XYZ 89.905512 302.889764 0 ] (section-toc.1-1.6) [ 162 0 R /XYZ 65.905512 279.889764 0 ] (section-toc.1-1.6.1) [ 162 0 R /XYZ 77.905512 279.889764 0 ] (section-toc.1-1.7) [ 162 0 R /XYZ 65.905512 259.389764 0 ] (section-toc.1-1.7.1) [ 162 0 R /XYZ 77.905512 259.389764 0 ] (snes_clock_filter) [ 404 0 R /XYZ 65.905512 585.072225 0 ] (snes_game_genie_code) [ 404 0 R /XYZ 65.905512 205.437147 0 ] (snes_latch_train) [ 414 0 R /XYZ 65.905512 604.572225 0 ] (snes_overread) [ 404 0 R /XYZ 65.905512 395.254686 0 ] (source_link) [ 361 0 R /XYZ 65.905512 463.612840 0 ] (tas_last_modified) [ 351 0 R /XYZ 65.905512 771.389764 0 ] (title) [ 6 0 R /XYZ 65.905512 707.858514 0 ] (toc) [ 6 0 R /XYZ 65.905512 500.992820 0 ] (total_frames) [ 351 0 R /XYZ 65.905512 242.795301 0 ] (transition) [ 432 0 R /XYZ 65.905512 734.150994 0 ] (unspecified) [ 446 0 R /XYZ 65.905512 379.515916 0 ] (verified) [ 369 0 R /XYZ 65.905512 612.572225 0 ] ] +>> +>> +>> +endobj +4 0 obj +<< +/ExtGState << +/a1.0 << +/ca 1 +>> +>> +/XObject << +>> +/Pattern << +>> +/Shading << +>> +/Font 669 0 R +>> +endobj +5 0 obj +<< +/Filter /FlateDecode +/Length 1907 +>> +stream +xœ½ZK‹9¾ûWô9°Šž% Â@³‡ÍxÉaÉÁãÍä2YHöÿÖÔ*uIí¶Û¯ÉàØÝ-©ª¾z—‰¿)ü/X%Bˆì°ÿ±ù¹‘Â;‰ÿòŠæ"?þŒ¯ŸïX#¼”>ø!x'¬•Ѻá×·Í—Í¿›´ÃǺ@)…SB^¡†ô÷ëûæíN 9|ÿoóŒG§Ã½ +´©üȤÜðRH¾4ÏÓõ—7Hì?ãÍcÏKä(åìCÃᛞÁè4“e×/ãµb×|»ÿêП—N
ÞëAãÉQ+ +Ñäm’y<ÑË +Á�`|“BX¬ì�¹Ê-gV�ç�¬Øí&>2;÷´ +j¹îs\¶l?ÎAÏxf<sEÆÖØÖÒ¢‚,Ö¸>zªQЙ@6–e�Ñ䮇—™3^è‹¢Â\�S½ù³&J’Ȩ0WîcÒÌõÃùÐE`51»Þ' +ky½÷u¾QRxˆ*†Ôf1 +I—o†úÞvwæÞŸŠñJÌ +÷Ç|9êúß>U;§Úá„—©d‘fŽ–Æ|釄Ȟ†(½\˜‚6sã‘¶¤aÞú éq>Œ<¨Óü�m-|+Èk¦±8“JĨ}�'y©uánv²J‹ôðùFœÑV +endstream +endobj +6 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 5 0 R +/Resources 4 0 R +/Annots [ 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R 29 0 R 30 0 R 31 0 R 32 0 R 33 0 R 34 0 R 35 0 R 36 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +7 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 642.248514 128.244867 623.528514 ] +/BS << +/W 0 +>> +/Dest (abstract) +>> +endobj +8 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 492.142820 192.886957 473.422820 ] +/BS << +/W 0 +>> +/Dest (name-table-of-contents-3) +>> +endobj +9 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 465.922820 71.495356 452.922820 ] +/BS << +/W 0 +>> +/Dest (section-1) +>> +endobj +10 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 79.195307 465.922820 139.664789 452.922820 ] +/BS << +/W 0 +>> +/Dest (name-introduction-3) +>> +endobj +11 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 77.905512 445.422820 91.584955 432.422820 ] +/BS << +/W 0 +>> +/Dest (section-1.1) +>> +endobj +12 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.284906 445.422820 233.832270 432.422820 ] +/BS << +/W 0 +>> +/Dest (name-overview-and-preliminaries-3) +>> +endobj +13 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 424.922820 111.674555 411.922820 ] +/BS << +/W 0 +>> +/Dest (section-1.1.1) +>> +endobj +14 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 424.922820 238.333734 411.922820 ] +/BS << +/W 0 +>> +/Dest (name-notation-and-vocabulary-3) +>> +endobj +15 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 77.905512 401.922820 91.584955 388.922820 ] +/BS << +/W 0 +>> +/Dest (section-1.2) +>> +endobj +16 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.284906 401.922820 156.024897 388.922820 ] +/BS << +/W 0 +>> +/Dest (name-motivations-3) +>> +endobj +17 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 381.422820 111.674555 368.422820 ] +/BS << +/W 0 +>> +/Dest (section-1.2.1) +>> +endobj +18 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 381.422820 273.142816 368.422820 ] +/BS << +/W 0 +>> +/Dest (name-problems-with-existing-format) +>> +endobj +19 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 358.422820 71.495356 345.422820 ] +/BS << +/W 0 +>> +/Dest (section-2) +>> +endobj +20 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 79.195307 358.422820 114.304682 345.422820 ] +/BS << +/W 0 +>> +/Dest (name-header-3) +>> +endobj +21 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 337.922820 71.495356 324.922820 ] +/BS << +/W 0 +>> +/Dest (section-3) +>> +endobj +22 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 79.195307 337.922820 114.814447 324.922820 ] +/BS << +/W 0 +>> +/Dest (name-packets-3) +>> +endobj +23 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 77.905512 317.422820 91.584955 304.422820 ] +/BS << +/W 0 +>> +/Dest (section-3.1) +>> +endobj +24 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.284906 317.422820 304.422358 304.422820 ] +/BS << +/W 0 +>> +/Dest (name-assigned-packet-keys-without-) +>> +endobj +25 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 296.922820 111.674555 283.922820 ] +/BS << +/W 0 +>> +/Dest (section-3.1.1) +>> +endobj +26 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 296.922820 181.812738 283.922820 ] +/BS << +/W 0 +>> +/Dest (name-general-keys-3) +>> +endobj +27 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 276.422820 111.674555 263.422820 ] +/BS << +/W 0 +>> +/Dest (section-3.1.2) +>> +endobj +28 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 276.422820 202.781977 263.422820 ] +/BS << +/W 0 +>> +/Dest (name-nes-specific-keys-3) +>> +endobj +29 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 255.922820 111.674555 242.922820 ] +/BS << +/W 0 +>> +/Dest (section-3.1.3) +>> +endobj +30 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 255.922820 208.221674 242.922820 ] +/BS << +/W 0 +>> +/Dest (name-snes-specific-keys-3) +>> +endobj +31 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 235.422820 111.674555 222.422820 ] +/BS << +/W 0 +>> +/Dest (section-3.1.4) +>> +endobj +32 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 235.422820 219.991693 222.422820 ] +/BS << +/W 0 +>> +/Dest (name-genesis-specific-keys-3) +>> +endobj +33 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 214.922820 111.674555 201.922820 ] +/BS << +/W 0 +>> +/Dest (section-3.1.5) +>> +endobj +34 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 214.922820 240.541986 201.922820 ] +/BS << +/W 0 +>> +/Dest (name-input-frame-timing-keys-3) +>> +endobj +35 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 194.422820 111.674555 181.422820 ] +/BS << +/W 0 +>> +/Dest (section-3.1.6) +>> +endobj +36 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 194.422820 198.383783 181.422820 ] +/BS << +/W 0 +>> +/Dest (name-extraneous-keys-3) +>> +endobj +37 0 obj +<< +/Filter /FlateDecode +/Length 1503 +>> +stream +xœÍšKkä8Çïþ>¬G¯ÒBÃÌe
sXöÐi’¹$™ýþ°¥—-uºã²…I�Ç/ÙùWåRIþþàøŸU|²ÖÆóóð2°É +íÁ$þÃ
Æ”/ópì.ž‡t^”ÇÎñ^áºS¼§/§îSY“Êéx?€TF¦r~[Ä:€Ž–Çãn6ž„‰)ó�WÛ)U‹½”�¬sŠ]*t²¸‰k¬¸¥Ê‰Sâ—lpàî.Ùçñº=Þ•»ÆW“imäMîMïIÁ½RèÏ�&'QN ?™}[Gvá=‰ïŽõÕQúl`]ñj_µ�ÞiƒJ¡¿
hržùïd�mÚJ2ûìP+t·QîUJmü6Qj->Ù�6©úÛ„&'Ή�çU¶Í®n#|rî9s¬šÌ\YZóØþw·‘ákñËí´Q¥ÐßF49·à>²ªl’ß#‘l×í=Y’_Én¶ãMmÇ’çÖwîžçåÖrØx>Úijö¹”箙ߥƒò×¾�Þ•ìù†¿Kq³½Îë�¹jÐÝ߉r¹êûÛsël¸Ùf϶Øcì„c·¤»Pêd¾WÍ§Ê ŸC‰˜GÉ´-clR©M�çhìíþßœíÍvø’sS¡àl? =.8ÓäV9CÜöïˆo»sÙVÞŠßlS/y7Å÷…wÔ�7Q.pT_åË�YØ7ó•Ž7šrþ‚o¥ÔŸ/MNBäü”%¾¼fÞÌVkj¬hÊݶ•R¶49¡:°5i�è·×Ò~¼7F8I�MùwÁ¹RêÏ™&çcrÉ:ÇßÀ2?·óÅÊPcÄißZ©;_¢\—aÑgC¼�Y±Þ7v +÷&æÏX¥U +ÙÆ!~èÄö1ï'î&ù<K¹wjCýxXXÛx¬Ù’QãŽjíK6¨ÔúÚ€&åÙÉìû²ðïܯ¹lg÷°C�1ªµ?Y°†
ßiw²¦I]eýÑþno~o½fƒ¦>fa»áÛëNФ–xÇ¥Êämlâ’ÿyÍü�ª�¹á·Çh¯0oêw.Ìkµ®Ì‰R9–Ì1¥l?ÍN¶r}L¶X7õ;¶rÃøìN¶4©<&âJêÛ‡þ‘-âË9åé;8kúxkk¿³à¬7Œ¹îäL“ò}ø9V'–]b…#�·ªÖþgÁÙmsÝÉ™&Uöm޳ݳ‚<®ªZû˜×Z+W¢Ôì›ìõ8Iðã#Ò8k3gE_U}É‚³Ú0ƺ“3MêÚøuðß”?‡ïWr:ïïÍÌ
yÜö÷#kµ¾ÌiRѧS>W0-Û¿Ü&æï8{ú펑Ç_aŸ±VëÊ›(õ&_á;
V÷{ú½„‰æqçžßš +endstream +endobj +38 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 37 0 R +/Resources 4 0 R +/Annots [ 39 0 R 40 0 R 41 0 R 42 0 R 43 0 R 44 0 R 45 0 R 46 0 R 47 0 R 48 0 R 49 0 R 50 0 R 51 0 R 52 0 R 53 0 R 54 0 R 55 0 R 56 0 R 57 0 R 58 0 R 59 0 R 60 0 R 61 0 R 62 0 R 63 0 R 64 0 R 65 0 R 66 0 R 67 0 R 68 0 R 69 0 R 70 0 R 71 0 R 72 0 R 73 0 R 74 0 R 75 0 R 76 0 R 77 0 R 78 0 R 79 0 R 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R 89 0 R 90 0 R 91 0 R 92 0 R 93 0 R 94 0 R 95 0 R 96 0 R 97 0 R 98 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +39 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 77.905512 771.389764 91.584955 758.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.2) +>> +endobj +40 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.284906 771.389764 288.782221 758.389764 ] +/BS << +/W 0 +>> +/Dest (name-assigned-packet-keys-with-des) +>> +endobj +41 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 750.889764 111.674555 737.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.2.1) +>> +endobj +42 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 750.889764 239.452143 737.889764 ] +/BS << +/W 0 +>> +/Dest (name-general-key-descriptions-3) +>> +endobj +43 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 730.389764 111.674555 717.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.2.2) +>> +endobj +44 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 730.389764 260.421381 717.389764 ] +/BS << +/W 0 +>> +/Dest (name-nes-specific-key-descriptions) +>> +endobj +45 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 709.889764 111.674555 696.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.2.3) +>> +endobj +46 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 709.889764 265.861078 696.889764 ] +/BS << +/W 0 +>> +/Dest (name-snes-specific-key-description) +>> +endobj +47 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 689.389764 111.674555 676.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.2.4) +>> +endobj +48 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 689.389764 277.631098 676.389764 ] +/BS << +/W 0 +>> +/Dest (name-genesis-specific-key-descript) +>> +endobj +49 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 668.889764 111.674555 655.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.2.5) +>> +endobj +50 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 668.889764 298.181391 655.889764 ] +/BS << +/W 0 +>> +/Dest (name-input-frame-timing-key-descri) +>> +endobj +51 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 648.389764 111.674555 635.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.2.6) +>> +endobj +52 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 648.389764 256.023188 635.389764 ] +/BS << +/W 0 +>> +/Dest (name-extraneous-key-descriptions-3) +>> +endobj +53 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 77.905512 625.389764 91.584955 612.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3) +>> +endobj +54 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.284906 625.389764 212.443354 612.389764 ] +/BS << +/W 0 +>> +/Dest (name-packet-payload-formats-3) +>> +endobj +55 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 604.889764 111.674555 591.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1) +>> +endobj +56 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 604.889764 259.352045 591.889764 ] +/BS << +/W 0 +>> +/Dest (name-general-key-payload-formats-3) +>> +endobj +57 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 584.389764 131.764154 571.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.1) +>> +endobj +58 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 584.389764 248.921625 571.389764 ] +/BS << +/W 0 +>> +/Dest (name-console_type-packet-3) +>> +endobj +59 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 563.889764 131.764154 550.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.2) +>> +endobj +60 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 563.889764 262.921869 550.889764 ] +/BS << +/W 0 +>> +/Dest (name-console_region-packet-3) +>> +endobj +61 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 543.389764 131.764154 530.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.3) +>> +endobj +62 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 543.389764 235.951899 530.389764 ] +/BS << +/W 0 +>> +/Dest (name-game_title-packet-3) +>> +endobj +63 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 522.889764 131.764154 509.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.4) +>> +endobj +64 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 522.889764 231.212397 509.889764 ] +/BS << +/W 0 +>> +/Dest (name-rom_name-packet-3) +>> +endobj +65 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 502.389764 131.764154 489.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.5) +>> +endobj +66 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 502.389764 240.670893 489.389764 ] +/BS << +/W 0 +>> +/Dest (name-attribution-packet-3) +>> +endobj +67 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 481.889764 131.764154 468.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.6) +>> +endobj +68 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 481.889764 225.191156 468.889764 ] +/BS << +/W 0 +>> +/Dest (name-category-packet-3) +>> +endobj +69 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 461.389764 131.764154 448.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.7) +>> +endobj +70 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 461.389764 263.421381 448.389764 ] +/BS << +/W 0 +>> +/Dest (name-emulator_name-packet-3) +>> +endobj +71 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 440.889764 131.764154 427.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.8) +>> +endobj +72 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 440.889764 276.831293 427.889764 ] +/BS << +/W 0 +>> +/Dest (name-emulator_version-packet-3) +>> +endobj +73 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 420.389764 131.764154 407.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.9) +>> +endobj +74 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 420.389764 259.481684 407.389764 ] +/BS << +/W 0 +>> +/Dest (name-emulator_core-packet-3) +>> +endobj +75 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 399.889764 137.353998 386.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.10) +>> +endobj +76 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 142.453852 399.889764 278.821283 386.889764 ] +/BS << +/W 0 +>> +/Dest (name-tas_last_modified-packet-3) +>> +endobj +77 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 379.389764 137.353998 366.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.11) +>> +endobj +78 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 142.453852 379.389764 255.621088 366.389764 ] +/BS << +/W 0 +>> +/Dest (name-dump_created-packet-3) +>> +endobj +79 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 358.889764 137.353998 345.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.12) +>> +endobj +80 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 142.453852 358.889764 290.661615 345.889764 ] +/BS << +/W 0 +>> +/Dest (name-dump_last_modified-packet-3) +>> +endobj +81 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 338.389764 137.353998 325.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.13) +>> +endobj +82 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 142.453852 338.389764 253.270746 325.389764 ] +/BS << +/W 0 +>> +/Dest (name-total_frames-packet-3) +>> +endobj +83 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 317.889764 137.353998 304.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.14) +>> +endobj +84 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 142.453852 317.889764 234.571283 304.889764 ] +/BS << +/W 0 +>> +/Dest (name-rerecords-packet-3) +>> +endobj +85 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 297.389764 137.353998 284.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.15) +>> +endobj +86 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 142.453852 297.389764 244.041498 284.389764 ] +/BS << +/W 0 +>> +/Dest (name-source_link-packet-3) +>> +endobj +87 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 276.889764 137.353998 263.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.16) +>> +endobj +88 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 142.453852 276.889764 255.760248 263.889764 ] +/BS << +/W 0 +>> +/Dest (name-blank_frames-packet-3) +>> +endobj +89 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 256.389764 137.353998 243.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.17) +>> +endobj +90 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 142.453852 256.389764 222.442377 243.389764 ] +/BS << +/W 0 +>> +/Dest (name-verified-packet-3) +>> +endobj +91 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 235.889764 137.353998 222.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.18) +>> +endobj +92 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 142.453852 235.889764 246.771967 222.889764 ] +/BS << +/W 0 +>> +/Dest (name-memory_init-packet-3) +>> +endobj +93 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 215.389764 137.353998 202.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.19) +>> +endobj +94 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 142.453852 215.389764 267.511225 202.389764 ] +/BS << +/W 0 +>> +/Dest (name-game_identifier-packet-3) +>> +endobj +95 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 194.889764 137.353998 181.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.20) +>> +endobj +96 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 142.453852 194.889764 255.572748 181.889764 ] +/BS << +/W 0 +>> +/Dest (name-movie_license-packet-3) +>> +endobj +97 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 174.389764 137.353998 161.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.21) +>> +endobj +98 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 142.453852 174.389764 236.033197 161.389764 ] +/BS << +/W 0 +>> +/Dest (name-movie_file-packet-3) +>> +endobj +99 0 obj +<< +/Filter /FlateDecode +/Length 1521 +>> +stream +xœÍZI‹ã8¾ûWøÜ0jmO4�ièË +}æP*}©¨žÿó´ÙRâ”;Ju—Éþž¿·J)þþ`øÏHFŒ±ZÉñð:¼
”h øç{'¾ù··Aèը¤ šRmôh4)©•0þz~ÿîm§ŒqN€Ye|6ºß¯ŸÃçGFèøó¿áˆ�v×̤{åÕCÁø!_Švwþã‚Uä Ï(šuÖL‰¡á-Ï + ?� +h�§ÇxA³ó—pβóü¾ìúÝ_`þMŒ–”©ÑÊQ1Mð4¨Ñq¢Íkú®Õ<%L¸¿1;°á ïþu?°d¾L@’ŠQPâ+ëqÿ:|þöýÏý÷¯Ø�ˆðˆýqøûÅž¸±l/ãܶûgÜÿ5|Û/ÊÂ&Y +ŒÀ£ÐZE@8Åß…² ,¶©l+”¸qÜ`Ç©;G�H<ç*^gáÚÔîÚŽq3î:BˆðT2•xŸ|}%¶ƒ¯1‹Èì¤aP¥´p".r¿Šoiˆ±VÒS„ +ßk9K˜B�M+œãÔs§"w¸øòü¨qâÈØÎs>9ß;f¿„kõ<ê@ÇûìNºûÜu@=9U¹vÀvP§zÉEAf:ËzI¾±F?¸ÐÕAؤNú1à"“¬.×�Lö.w*øGÐ…óþÛ-n×o§“ó�L™BÒªVùH¦ƒ©¿ÚàÎt ‚D:~îÇ=ç´—Òù6îK¤îÜ7Â�r/xˆ3ÂÎܺÍsä–ë
\KÝkôF®å¹÷\·Á�Ùùcà©ô×§k&ö=d×cŽæÑæ×æa®«yx•�Ïy¸D螇áç¿{.´š‹§:u›”HÝý£îTG÷Î(J-oªU3þÅ]óp#Üÿ=óbTcÑmro‰ÔŸï6¸E{¿[NÈô`ªy9í7æå©¿ÚàõP„qrô�C¸ÿ}þC;}šýÇaŸÚ šù˜÷©Ãå.Y5‡¯ÒÓœÃK„î9¼Îù�ç’Å}ÈÙ~ÿ;æs)«ù\ß&Ÿ—HÝýª®ˆ[ÉÞ[ÿJj¾c6úN�ÐßwÚà—Îoœ@�\ìßÛ4
²ã¼Ñ¸w~÷ø1¾TÔ|ÉÜÆ—J¤î¾Ô—rŒŸÃ5åÜËI"ùÌóú: +ç„1d[ž<¹×‚¡qëºÚàòÆgÞ¦ü!X¨ç‘Fn¯Ð�‹Þ.S¦Ù´sîçÊݳ8q¿EseR"t¯Lá¿&ê¬:IÇ�UM:x‡ëóUT§\o\Eeªî”ë"Näv«2»w¼›Ë1Ã({ÉnWq8ÇŒòÉÝcF#ÜÒðn1Áž§¼Äí�b‚½ë,k#ÜÅU�ã‚åóߦ•c3ß%Bw¾áù¦å¨PÎs
ñ÷æ—®‡}XÍ~iI± – Á’Ú…“F +t¸\">OjíÀÆ‚Üî³ vy˜ÕX+sj²R??!ïM¦x½ú+)® R,)T_IEËÒDQ¡ŒÞÆÒ®Ç-Œ×špe©¦Ër¸9,H˜qLOm¤"½�Q.´êJ9V¹Š+X]žô-Ä.«pVM+¯U‘aÄZ®
Ê2�GgóbêÌâþŠ+â +endstream +endobj +100 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 99 0 R +/Resources 4 0 R +/Annots [ 101 0 R 102 0 R 103 0 R 104 0 R 105 0 R 106 0 R 107 0 R 108 0 R 109 0 R 110 0 R 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 116 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R 128 0 R 129 0 R 130 0 R 131 0 R 132 0 R 133 0 R 134 0 R 135 0 R 136 0 R 137 0 R 138 0 R 139 0 R 140 0 R 141 0 R 142 0 R 143 0 R 144 0 R 145 0 R 146 0 R 147 0 R 148 0 R 149 0 R 150 0 R 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R 156 0 R 157 0 R 158 0 R 159 0 R 160 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +101 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 771.389764 137.353998 758.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.22) +>> +endobj +102 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 142.453852 771.389764 273.050531 758.389764 ] +/BS << +/W 0 +>> +/Dest (name-port_controller-packet-3) +>> +endobj +103 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 748.389764 111.674555 735.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.2) +>> +endobj +104 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 748.389764 280.321283 735.389764 ] +/BS << +/W 0 +>> +/Dest (name-nes-specific-key-payload-form) +>> +endobj +105 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 727.889764 131.764154 714.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.2.1) +>> +endobj +106 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 727.889764 268.350580 714.889764 ] +/BS << +/W 0 +>> +/Dest (name-nes_latch_filter-packet-3) +>> +endobj +107 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 707.389764 131.764154 694.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.2.2) +>> +endobj +108 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 707.389764 268.601068 694.389764 ] +/BS << +/W 0 +>> +/Dest (name-nes_clock_filter-packet-3) +>> +endobj +109 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 686.889764 131.764154 673.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.2.3) +>> +endobj +110 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 686.889764 250.931391 673.889764 ] +/BS << +/W 0 +>> +/Dest (name-nes_overread-packet-3) +>> +endobj +111 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 666.389764 131.764154 653.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.2.4) +>> +endobj +112 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 666.389764 294.001459 653.389764 ] +/BS << +/W 0 +>> +/Dest (name-nes_game_genie_code-packet-3) +>> +endobj +113 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 643.389764 111.674555 630.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.3) +>> +endobj +114 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 643.389764 285.760981 630.389764 ] +/BS << +/W 0 +>> +/Dest (name-snes-specific-key-payload-for) +>> +endobj +115 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 622.889764 131.764154 609.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.3.1) +>> +endobj +116 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 622.889764 274.040766 609.889764 ] +/BS << +/W 0 +>> +/Dest (name-snes_clock_filter-packet-3) +>> +endobj +117 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 602.389764 131.764154 589.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.3.2) +>> +endobj +118 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 602.389764 256.371088 589.389764 ] +/BS << +/W 0 +>> +/Dest (name-snes_overread-packet-3) +>> +endobj +119 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 581.889764 131.764154 568.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.3.3) +>> +endobj +120 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 581.889764 299.441156 568.889764 ] +/BS << +/W 0 +>> +/Dest (name-snes_game_genie_code-packet-3) +>> +endobj +121 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 561.389764 131.764154 548.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.3.4) +>> +endobj +122 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 561.389764 331.298578 548.389764 ] +/BS << +/W 0 +>> +/Dest (name-snes_latch_train-packet-reser) +>> +endobj +123 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 538.389764 111.674555 525.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.4) +>> +endobj +124 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 538.389764 297.531000 525.389764 ] +/BS << +/W 0 +>> +/Dest (name-genesis-specific-key-payload-) +>> +endobj +125 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 517.889764 131.764154 504.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.4.1) +>> +endobj +126 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 517.889764 316.480951 504.889764 ] +/BS << +/W 0 +>> +/Dest (name-genesis_game_genie_code-packe) +>> +endobj +127 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 494.889764 111.674555 481.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.5) +>> +endobj +128 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 494.889764 318.081293 481.889764 ] +/BS << +/W 0 +>> +/Dest (name-input-frame-timing-key-payloa) +>> +endobj +129 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 474.389764 131.764154 461.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.5.1) +>> +endobj +130 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 474.389764 244.270746 461.389764 ] +/BS << +/W 0 +>> +/Dest (name-input_chunk-packet-3) +>> +endobj +131 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 453.889764 131.764154 440.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.5.2) +>> +endobj +132 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 453.889764 254.571527 440.889764 ] +/BS << +/W 0 +>> +/Dest (name-input_moment-packet-3) +>> +endobj +133 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 433.389764 131.764154 420.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.5.3) +>> +endobj +134 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 433.389764 234.500971 420.389764 ] +/BS << +/W 0 +>> +/Dest (name-transition-packet-3) +>> +endobj +135 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 412.889764 131.764154 399.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.5.4) +>> +endobj +136 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 412.889764 273.560297 399.889764 ] +/BS << +/W 0 +>> +/Dest (name-lag_frame_chunk-packet-3) +>> +endobj +137 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 392.389764 131.764154 379.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.5.5) +>> +endobj +138 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 392.389764 238.632563 379.389764 ] +/BS << +/W 0 +>> +/Dest (name-movie_transition-3) +>> +endobj +139 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 369.389764 111.674555 356.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.6) +>> +endobj +140 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 369.389764 275.923090 356.389764 ] +/BS << +/W 0 +>> +/Dest (name-extraneous-key-payload-format) +>> +endobj +141 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 348.889764 131.764154 335.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.6.1) +>> +endobj +142 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 348.889764 225.482660 335.889764 ] +/BS << +/W 0 +>> +/Dest (name-comment-packet-3) +>> +endobj +143 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 328.389764 131.764154 315.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.6.2) +>> +endobj +144 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 328.389764 250.551264 315.389764 ] +/BS << +/W 0 +>> +/Dest (name-experimental-packet-3) +>> +endobj +145 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.905512 307.889764 131.764154 294.889764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.6.3) +>> +endobj +146 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 139.464106 307.889764 238.561518 294.889764 ] +/BS << +/W 0 +>> +/Dest (name-unspecified-packet-3) +>> +endobj +147 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 284.889764 71.495356 271.889764 ] +/BS << +/W 0 +>> +/Dest (section-4) +>> +endobj +148 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 79.195307 284.889764 198.234369 271.889764 ] +/BS << +/W 0 +>> +/Dest (name-controller-input-formats-3) +>> +endobj +149 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 77.905512 264.389764 91.584955 251.389764 ] +/BS << +/W 0 +>> +/Dest (section-4.1) +>> +endobj +150 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.284906 264.389764 246.981440 251.389764 ] +/BS << +/W 0 +>> +/Dest (name-nes-famicom-controller-types-2) +>> +endobj +151 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 243.889764 111.674555 230.889764 ] +/BS << +/W 0 +>> +/Dest (section-4.1.1) +>> +endobj +152 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 243.889764 236.152582 230.889764 ] +/BS << +/W 0 +>> +/Dest (name-nes-standard-controller-3) +>> +endobj +153 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 223.389764 111.674555 210.389764 ] +/BS << +/W 0 +>> +/Dest (section-4.1.2) +>> +endobj +154 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 223.389764 192.393305 210.389764 ] +/BS << +/W 0 +>> +/Dest (name-nes-four-score-3) +>> +endobj +155 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 77.905512 200.389764 91.584955 187.389764 ] +/BS << +/W 0 +>> +/Dest (section-4.2) +>> +endobj +156 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.284906 200.389764 205.622309 187.389764 ] +/BS << +/W 0 +>> +/Dest (name-snes-controller-types-3) +>> +endobj +157 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 179.889764 111.674555 166.889764 ] +/BS << +/W 0 +>> +/Dest (section-4.2.1) +>> +endobj +158 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 179.889764 241.592279 166.889764 ] +/BS << +/W 0 +>> +/Dest (name-snes-standard-controller-3) +>> +endobj +159 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 159.389764 111.674555 146.389764 ] +/BS << +/W 0 +>> +/Dest (section-4.2.2) +>> +endobj +160 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 159.389764 178.073725 146.389764 ] +/BS << +/W 0 +>> +/Dest (name-snes-mouse-3) +>> +endobj +161 0 obj +<< +/Filter /FlateDecode +/Length 1276 +>> +stream +xœÅZK‹9¾÷¯ès`•’TRI0l —=9,{°�q.3“ýÿ°zº%ÛmËnË™¦§Rë+}õ©ô2Áp÷Ï gÆXÒ8n߇�)p!Gõ’_Üù1�I�%# +pÒ×ÌÆZ‚@9xåÞ+÷N©øŒ»tšøÎç•>}ëN™Þ'†&s¸Ý“-ã$%‚7§æ5]ñ~Ñ0c-Â!B'~•e\;ƒM+Ü!¿RG^]Sc¾Wñ¾Ýg¸Ö®ù€Ö$g¹V¹®úsÝ×�ë˜WÝó6•¹I>¿ÏãQåoÎøÆØ¢YžôÍMq¦ðM…Ðß7mp¿Ã7WÅ2ññuÞwÂõab-ó]�ÐÝw�p¿¥]…ož¹}šp”+í
~C¼ÍB¿UýýÖwä7H>1‰Ë3qJ¿§ìBÎ*„þœµÁ�‡(é-ëoõæÓ0¥…|kÏí!ŸÓ`SÂlŸ|S̘ƕuÉÝÇ•�pž�Ðn!râ�I}¤é;Ö”b¶�Í×…cÍ¡»váZ8ï7þ,´®aNë7ÅÙBëUÉýµÞwÈ{à0pû/¯Û®z74§ws'½›Ì]½·ÁyÞ…zœ®‘›9]ßÔNº®Kî®ëF¸kuí9üª¾zGTsz·÷Ñ{�Ð]ï�pYïž×‡ižôœæ×5_•Ü_ómpÍšÇgO‘geèþãåÝsZÿëûè¿Fè®ÿF¸¨ÿÈ»Àǵ%gç�›em .¹{h„m Íy0Ï·ñÚU×zvι¹“®õCçœ�p—ø†M¼ø4\OóO‘¸yÓº¤øfé�b—I~¢ì·3>0vn�+û`áÚq�Ðßmp]|`¯ñÁo4Ÿ�¿n—Å›ºäîñ¦ÎÇrUÆíÌŸJÊxöŒ=g×v·÷‰=5BwÝ7ÂyîOòü£ó¨ÜÏnÓçÌz«¦Ùþr{ŸR#ôç²
n–Ë×4V4‘KÌš½Ç8eÚe'8Úb½e¹Å*æbG~P`'–†²’P´ÂÉ´šUîì#·žkéSt%y´»h•dŠ®uÉÝ£k#œ_Ñγò0«Á©%ï{,y#¯…ú´<Pß^Î2Ê?„‘ÞCº‰†ðldb·' +0{¸Â˜çc¹Ÿ
…çZû>|}<oC*j©SŸ_ÔÒ9æ%á‡LñÛ4÷ –9ìè”ÎU¥ÄÞ1ô¬l +~#r°‰ƒ]1•´Ïªw‘ûiPêæ0]Œ×X¸/^=Rõ.WIb."¨‹UÊÊYîŒ=sˆ’ùª®4ÇÿLŠˆ m�à´a7&c¦ÑØi6¿— Jôè#¯7xZi¦…&Í/Û³MíÈži‹)ò‡ÝÌݵ.2œY+ÈÀE[ö;¦ëI^ÅTVüËÿù•'; +endstream +endobj +162 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 161 0 R +/Resources 4 0 R +/Annots [ 163 0 R 164 0 R 165 0 R 166 0 R 167 0 R 168 0 R 169 0 R 170 0 R 171 0 R 172 0 R 173 0 R 174 0 R 175 0 R 176 0 R 177 0 R 178 0 R 179 0 R 180 0 R 181 0 R 182 0 R 183 0 R 184 0 R 185 0 R 186 0 R 187 0 R 188 0 R 189 0 R 190 0 R 191 0 R 192 0 R 193 0 R 194 0 R 195 0 R 196 0 R 197 0 R 198 0 R 199 0 R 200 0 R 201 0 R 202 0 R 203 0 R 204 0 R 205 0 R 206 0 R 207 0 R 208 0 R 209 0 R 210 0 R 211 0 R 212 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +163 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 77.905512 771.389764 91.584955 758.389764 ] +/BS << +/W 0 +>> +/Dest (section-4.3) +>> +endobj +164 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.284906 771.389764 199.692621 758.389764 ] +/BS << +/W 0 +>> +/Dest (name-n64-controller-types-3) +>> +endobj +165 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 750.889764 111.674555 737.889764 ] +/BS << +/W 0 +>> +/Dest (section-4.3.1) +>> +endobj +166 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 750.889764 235.662592 737.889764 ] +/BS << +/W 0 +>> +/Dest (name-n64-standard-controller-3) +>> +endobj +167 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 730.389764 111.674555 717.389764 ] +/BS << +/W 0 +>> +/Dest (section-4.3.2) +>> +endobj +168 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 730.389764 299.501215 717.389764 ] +/BS << +/W 0 +>> +/Dest (name-n64-standard-controller-with-ru) +>> +endobj +169 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 709.889764 111.674555 696.889764 ] +/BS << +/W 0 +>> +/Dest (section-4.3.3) +>> +endobj +170 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 709.889764 331.291254 696.889764 ] +/BS << +/W 0 +>> +/Dest (name-n64-standard-controller-with-co) +>> +endobj +171 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 689.389764 111.674555 676.389764 ] +/BS << +/W 0 +>> +/Dest (section-4.3.4) +>> +endobj +172 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 689.389764 323.652094 676.389764 ] +/BS << +/W 0 +>> +/Dest (name-n64-standard-controller-with-tr) +>> +endobj +173 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 668.889764 111.674555 655.889764 ] +/BS << +/W 0 +>> +/Dest (section-4.3.5) +>> +endobj +174 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 668.889764 172.144037 655.889764 ] +/BS << +/W 0 +>> +/Dest (name-n64-mouse-3) +>> +endobj +175 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 648.389764 111.674555 635.389764 ] +/BS << +/W 0 +>> +/Dest (section-4.3.6) +>> +endobj +176 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 648.389764 205.943109 635.389764 ] +/BS << +/W 0 +>> +/Dest (name-n64-densha-de-go-3) +>> +endobj +177 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 77.905512 625.389764 91.584955 612.389764 ] +/BS << +/W 0 +>> +/Dest (section-4.4) +>> +endobj +178 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.284906 625.389764 232.431879 612.389764 ] +/BS << +/W 0 +>> +/Dest (name-gamecube-controller-types-3) +>> +endobj +179 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 604.889764 111.674555 591.889764 ] +/BS << +/W 0 +>> +/Dest (section-4.4.1) +>> +endobj +180 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 604.889764 268.401850 591.889764 ] +/BS << +/W 0 +>> +/Dest (name-gamecube-standard-controller-2) +>> +endobj +181 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 77.905512 581.889764 91.584955 568.889764 ] +/BS << +/W 0 +>> +/Dest (section-4.5) +>> +endobj +182 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.284906 581.889764 228.812250 568.889764 ] +/BS << +/W 0 +>> +/Dest (name-game-boy-controller-types-3) +>> +endobj +183 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 561.389764 111.674555 548.389764 ] +/BS << +/W 0 +>> +/Dest (section-4.5.1) +>> +endobj +184 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 561.389764 230.532709 548.389764 ] +/BS << +/W 0 +>> +/Dest (name-gb-standard-controller-3) +>> +endobj +185 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 77.905512 538.389764 91.584955 525.389764 ] +/BS << +/W 0 +>> +/Dest (section-4.6) +>> +endobj +186 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.284906 538.389764 256.902094 525.389764 ] +/BS << +/W 0 +>> +/Dest (name-game-boy-color-controller-typ) +>> +endobj +187 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 517.889764 111.674555 504.889764 ] +/BS << +/W 0 +>> +/Dest (section-4.6.1) +>> +endobj +188 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 517.889764 236.672602 504.889764 ] +/BS << +/W 0 +>> +/Dest (name-gbc-standard-controller-3) +>> +endobj +189 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 77.905512 494.889764 91.584955 481.889764 ] +/BS << +/W 0 +>> +/Dest (section-4.7) +>> +endobj +190 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.284906 494.889764 272.540766 481.889764 ] +/BS << +/W 0 +>> +/Dest (name-game-boy-advance-controller-t) +>> +endobj +191 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 474.389764 111.674555 461.389764 ] +/BS << +/W 0 +>> +/Dest (section-4.7.1) +>> +endobj +192 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 474.389764 237.382318 461.389764 ] +/BS << +/W 0 +>> +/Dest (name-gba-standard-controller-3) +>> +endobj +193 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 77.905512 451.389764 91.584955 438.389764 ] +/BS << +/W 0 +>> +/Dest (section-4.8) +>> +endobj +194 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.284906 451.389764 217.392328 438.389764 ] +/BS << +/W 0 +>> +/Dest (name-genesis-controller-types-3) +>> +endobj +195 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 430.889764 111.674555 417.889764 ] +/BS << +/W 0 +>> +/Dest (section-4.8.1) +>> +endobj +196 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 430.889764 263.501947 417.889764 ] +/BS << +/W 0 +>> +/Dest (name-genesis-mega-drive-3-button-3) +>> +endobj +197 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 410.389764 111.674555 397.389764 ] +/BS << +/W 0 +>> +/Dest (section-4.8.2) +>> +endobj +198 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 410.389764 263.501947 397.389764 ] +/BS << +/W 0 +>> +/Dest (name-genesis-mega-drive-6-button-3) +>> +endobj +199 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 77.905512 387.389764 91.584955 374.389764 ] +/BS << +/W 0 +>> +/Dest (section-4.9) +>> +endobj +200 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.284906 387.389764 229.952631 374.389764 ] +/BS << +/W 0 +>> +/Dest (name-atari-2600-controller-types-3) +>> +endobj +201 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 366.889764 111.674555 353.889764 ] +/BS << +/W 0 +>> +/Dest (section-4.9.1) +>> +endobj +202 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 366.889764 188.173090 353.889764 ] +/BS << +/W 0 +>> +/Dest (name-a2600-joystick-3) +>> +endobj +203 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.905512 346.389764 111.674555 333.389764 ] +/BS << +/W 0 +>> +/Dest (section-4.9.2) +>> +endobj +204 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 119.374506 346.389764 248.791986 333.389764 ] +/BS << +/W 0 +>> +/Dest (name-a2600-keyboard-controller-3) +>> +endobj +205 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 323.389764 71.495356 310.389764 ] +/BS << +/W 0 +>> +/Dest (section-5) +>> +endobj +206 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 79.195307 323.389764 131.433100 310.389764 ] +/BS << +/W 0 +>> +/Dest (name-references-3) +>> +endobj +207 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 77.905512 302.889764 91.584955 289.889764 ] +/BS << +/W 0 +>> +/Dest (section-5.1) +>> +endobj +208 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.284906 302.889764 205.171869 289.889764 ] +/BS << +/W 0 +>> +/Dest (name-normative-references-3) +>> +endobj +209 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 279.889764 65.905512 266.889764 ] +/BS << +/W 0 +>> +/Dest (appendix-A) +>> +endobj +210 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 279.889764 145.554193 266.889764 ] +/BS << +/W 0 +>> +/Dest (name-copyright-notice-3) +>> +endobj +211 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 259.389764 65.905512 246.389764 ] +/BS << +/W 0 +>> +/Dest (appendix-B) +>> +endobj +212 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 259.389764 156.835688 246.389764 ] +/BS << +/W 0 +>> +/Dest (name-authors-addresses-3) +>> +endobj +213 0 obj +<< +/Filter /FlateDecode +/Length 2814 +>> +stream +xœÅ[K‹$7¾×¯¨³ae½Bl˜Ë.zñaÙCwí”/3Ûÿ6¤TH!¥2«²§zÜMMWe¥Bñüâ¡u–øû…ÿ«DÑ;{¾|=ýq’ƒğ|G÷!ý _œ<œ½;;k„—Ò„µ2Z8ÿùùôëé÷SZác½A)¨èB¾C�Ó�~|QBžûëtEÒ‰¸W�Öà._óVpþR¶üÒ}Ÿ>ÿúnvƒŸ…F÷µg_Kä"åêMÇá#ƒ4‘ÉŒ²Ï_–ÏŠ}æëØõï.@û•B™ôs^¿áë~~>)r˜àEðV*wVV¯£—þüüõôã¿ú×Çç�g…^v~¾žþóAJeñ¥ð‚yúïùùŸ�’B}kŒ¤Ò*}‘p ¼€.HÔ¦÷(–uËu{Y®ƒ(kÔ“5&z?¡¼âƒIä•pJG#³Dùéù—ŸÏʳè¤HdÒÞ¯øJ*6éóÈ…—Äçu¹®QrpË+óJ|‡E–¼6]3åZ¹žå
‹ü™N‘;Ebº7]“¯ƒFaxic‘÷A2ÌZŒ'—ØNl&6´IÚ @Fá^ÍÈËÂ�eÖKR%‰’Õ²Öìò�}i´±h)ó=žÑrå½Íƒ+Z¾k=û.}&+Ð5â5ñ“ï÷m}ٯܿí7! +ïµ’‘œ,-Ì^ËF…xâî=Ý%+ŠeBÚw¶ghûæýL‘Ï>©˜h^†½‹‚³B¡j¶Žïµ„3»÷µ§ŸøËŽdÿËur6Ú÷¥29DØ4ž–^DŒžÐŒç#àš²ª·‘C1ÀûL‚¦Pæ]cÐå{˺™rªG&¨+Ÿ!+Òs�Nõ^®Ø
ƒÜ#K�XÏ"H—ÈÚY“dÎ:ÔÌ™ÿòÚøjXºm$턌¸2~¤)mDpÒX;’Ü„´ÃYuŒ°‚5i??éÄ~þ÷L¶ÍƲmM6•’¬ +&c¸�þW¼NÃÌ~fò¶Eô ãâ0Û¶Vh�
5 +I°
[ö_©2˜ò.Ž‹bI1™.A +‘>x~Ç÷z_ŒEÈÁé“×�´‹t'…òˆ«Œ»sd¢÷ÊœU1ùG`qtšMÃ8,ieº¦Â y]AUNÐY¨1¹Úrp0$Çõ1¸'ÕdÛ~}YC +a‘V騵§’#ðHªyiérw¢AÞކ…"ô8%¾ÆR—*Hïï
õ¹0e¸G“ÕoCDUVž°¼26iôÆÎ»)¼0rc2o%XvÏij[©–W©ÚLlxRÓê¤Ra8]Ÿ,^vežkdRõº\ã º‚‰kS¸%ú¶N¶hûÔ£C�Ä¢¬R¸�¨ø y \Ö}ɸ�]'¾(ÿøAæêýÛÆ2Rh…ýY5Ö(DK}²Æü +v¸‚üÓ,™�É®&èÞKEÆ…¼/áíôÅË)ŒÆ¬Eñ]*¨‘ö¬¢ÌtB3@� ·9N ¯´V–ŒQ1�¼a‚c•á—†�‹b×J«F�‚,µ·d(ÛR£fÒgCQé[¢±ƒ-Ç@´}ï@ù»¡‡XEñÆ�u´@áô(²YßÕ%çë¶‘|Ä·ÊDS+%Š‚3]{‰tÕ³è¦ÀiRžÖì“n|Vku2TW�s0è"ô…E.�˜!Ÿ*2&‘ÙE!ƒ´Lƒ!N…՜׶
ƒÀÛÀ›±´åR¾ ¦[²¡ä;ËÁû«œM¬Io½ó®k¾°}Ê?ã o{à§=6W +EHf¤¡($}PDY§'c9nx +ØÊIÀè¸q ‚vÊÙ G;í¨uV�¬rhP8+–r1D£(†\Æ¡¦Æ=]HãÒ~ûÌ+´ð\4Ò çƒ—æðÊ…Õ*8t¥µA¸¨�‡£+
>Êh�®t2JæV)¼kÏ6`¿´v÷ÔFcý¢C0GW&w~Ñí±•VƒÐ˜¤¾±rŒ—‰®�Ш2 [”Xžë Ÿ§‘’§-•í²Õ‘ÆT³?PÅ;…³ÊZsÜØéó�d-ewJäÏYá`aXÄְÌ×L):2Àù @˜ˆ:„t*3‘`u7n/”Q©³žÝ-kÏUÎ
³Ö¼ÆÛ†�µ<wó|I½V�˜tÆß6T:ÑÒi˜M¾»b€ˆùv¸A¨YÕÆšÅÊx1ÖNÎH§šR+ØŽ9k;waœ+-Ò穱åÅĬúã¹+>AüÐ"‡ú®®^òóˆæRXƒÎ¨&œìä,ðëÑ(vs–žDf2MQÿ›`(ú¾:±à 6uòµ4'Ååò¡Y®Ñ_?;Ù¡Ž¦pø9zN=µ?#u=��–ïVrîìUîÓÔ˜ïx™Ë“áäE®Q=ÀVí—àÆîˆÌÚe§M5Ù}÷=��6•!¢„�`®u~ÆT!eWÍ?½ °¼±±5ŸKˆÌF2“>dUN/p2&ìµ=;nb„v•·XUféø/¦¤�äî¡B#IìÄ“À ïå²f`RÂxô¡£Å°Á‚CâòÀÑŸ w³Ào(v Þ{)$¾uº:MØd‚ç”šà–øXzªaÌÔ%HóÓé#›ÚŽyn6ÌÇ+»ÌËãp«A¯s¹—rÜ@òòžQí*-H%À! ¹ïeýŽ{Gwæ}NÅW=ŸQéT=¬mÆÁuVëa‡á‚ò¨Ó÷“04)‡3øù!`Ÿ€¾Ââì^Ioá€Þi©Ùxr$ÒC+Ú‚9Äá›1i;,B8vBÐêØ÷®€e6Õ¨Åñi§n.LGJ�+*gsfz*èãóôÑ®XíâOti‰õ”1Ø8œmÏ5vØÊ
R9ÆT°ËŽš³ƒ°ˆä>ÜËN.@æ³ÉZ-mpoÞ:'„^¬õ˜íÉʱ1æç\ì¸huä2«�<�®µušÑ�Rȱ¸Ê`°év. +ã½mGì7Ÿ
àJšÖÈØÂjÈOˆõÔ¿á �ˆm +2F†÷ a=Ý0)/M°~]T
sk +hü¼§-j»Ç3�×�w‡N³÷[£V÷ÃY¹›�¢^UT|Y®ç¿ºtUÎmwÁ·˜=\;øÏã½hâBP'åêƒß45òQ|£�’Ž>•aßð +Êh=½.oh +†¬›FlwnoåcüDÔãâ]µ‹jA�’.›´ûZ4›ÆBþ
Úµ˜º¦ÏîÕ.i¸j:SÞTªŒÁ×J4fÄð±é”˜ï¦Y·�gS[(#z8€•ü:.ÝÙÖCÝ�ˆ ++�ÿô�ë¿ð +endstream +endobj +214 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 213 0 R +/Resources 4 0 R +/Annots [ 215 0 R 216 0 R 217 0 R 218 0 R 219 0 R 220 0 R 221 0 R 222 0 R 223 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +215 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 749.789764 89.132367 731.069764 ] +/BS << +/W 0 +>> +/Dest (section-1) +>> +endobj +216 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.132367 749.789764 182.575483 731.069764 ] +/BS << +/W 0 +>> +/Dest (name-introduction-3) +>> +endobj +217 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 525.937147 95.498285 510.337147 ] +/BS << +/W 0 +>> +/Dest (section-1.1) +>> +endobj +218 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 95.498285 525.937147 266.869623 510.337147 ] +/BS << +/W 0 +>> +/Dest (name-overview-and-preliminaries-3) +>> +endobj +219 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 249.782221 477.098377 290.740717 463.478992 ] +/BS << +/W 0 +>> +/Dest (RFC2119) +>> +endobj +220 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 300.540522 477.098377 341.499018 463.478992 ] +/BS << +/W 0 +>> +/Dest (RFC8174) +>> +endobj +221 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 438.359608 99.094965 425.359608 ] +/BS << +/W 0 +>> +/Dest (section-1.1.1) +>> +endobj +222 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 438.359608 225.322748 425.359608 ] +/BS << +/W 0 +>> +/Dest (name-notation-and-vocabulary-3) +>> +endobj +223 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 151.975336 214.165760 202.903559 200.546375 ] +/BS << +/W 0 +>> +/Dest (descriptions) +>> +endobj +224 0 obj +<< +/Filter /FlateDecode +/Length 2118 +>> +stream +xœÕZY�7~ï_QÏ¢ˆ©0ˆ/»@ +h¼SÞ‘Ûm•çà4t÷_O?üë§ûOÿþ¥T6þsÝýõôë;áØ ++W9@k<ËéIÎr�:ŸåÞ¹»ßºûÿœ>Üg ¼”5ÃJÀÆävY3ùˆì™G9»þ:�ݰfI\L0‰µ_~üï‡ûez +™50=tÑšå‚„³òC¦×f+D’Þf‹nbëE,�ö +ƒéYúðó�÷?¿Ÿ³�ÇÂsÅ–àL‹9ȵ°L‚3ö™ÕhlÓ³9¬Š:(m�gËÆ¥<3Rˆ÷FÎFVÅÐ+úçi…ÈAä +³‚*® +ÏÀŒáŠ×LÇ,)~Íȃ<ízTŒ�ïí(»QŸìÖ�Dª Ÿé%†) +›"ejøg£z�l+Tge´k¦yçcV^7†Fe§9S]ÌžeHü¶òdšqÍ4Çg¯|X7ŽE匬2g`¬vm—™·Ù0º¶|DÏú�"�eS&Úl¹s–¢†0�CÑôêØ‹žÀ‘2¢’ì¨ÅI|,š•Õzíz¾Žók!+_‹]²‚Šö«ð€áŽô»l
nøµº‹Kû]5¿q_Hf³þ–ì‹r'™V�…’Û�`a@Cµa-Æ
’î«6(i öµ{f—£ÞÈÞbÅøBìlÁQ60ˆ›¨{MEÍ7í%”yC¸z˜Ò>®“uØÀÐh˜·á¢(1@ã™ +q,ÇÀWkçxB$:º´ÊRج�½„¶YâbG;¶ŽXt¹ˆµ•p?ÚbÈ:¿�HjZpΡëDÊyÑ tNY
l±*rzûŒíêV«à�)tóÉy¯ÏÍ‹k&'YnŒmlJ$E¨q?oH¬åÖɸ¡Ž‚-IG¢&©M}Kr‚�ÀjC<S_þÅô[ÿap +
Ð-œ¶\&8°ñ¢Ú`ÅÂáÖ j&¡Mô˜X9Iµy58H¶¨ØzÃx1
7|:ç3(ØXŽÉ„0t�ËYÀ·I™Œ£¦gñkÆá»b\¢*2Ö›{ûâY›ÚÖ1ÄÈ!Í1r÷*úô[K2iq¼�$ÍêFŠd +®*€Íè\òçòüšå©d�xUæ[�xŠdÏR=³Aå= +ž¶wÂpǃª¸%'Û½Dr¡%·l£í0Âh°7Z‡ÑbñÙdX¢‚Þ\ø3 3)ÞXO +ÆÉÜhÊË(ÐÐþ(á +b6õYOèo;Ù`¡Ã€¯»†Üß +endstream +endobj +225 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 224 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +226 0 obj +<< +/Filter /FlateDecode +/Length 2225 +>> +stream +xœå[Y‹G~ׯ˜ç@Ú}T_`âà6ø!äA+[y±Nþ?¤z¦«»ºçÐhµë,‰–±¤QOUu_3VƒÄ¿oþ@‰¢w0œ>¾¤ðVâk\Ñ|~‡Ç—ƒ·ƒwƒ#¼”>ø!x+ +„é‚T +e1øŽâÃ霛ÎJjÓ9Àw<eÓ¹ót^žÓš»ß‡ûŸªZEá�¤q½¿~÷óÛû·sL¼³ñufa'¶ +z²ÖˆU°°wg£ô|'�IgVã9—w¦w™w—~KZ�c^¦ï‰V¢™Î�¿ãyðŒ—ªôÒš‘®üÇkü‚Ö :Ü(-oÒšíÈZ£n%˜x‹ÖÈ?ˆØ¼Æ§ïwŠ‹aO—µ¡jwò¹NlæÆZj½V2&±“„ÖçªóDI©½/‚©Ü
pà´&B�ëçí%‘áã�–¯;±}6<d±ù¶eV×9¯µÙ�2
·&h¥¬Ö~A²‘ +]ÌÁfò–CV"då�º5Z{ήÊv0®�ìÞ�K–ϓԜB˜vYxjµÄÝ¿¿nü-f‡8³ð:ró›
AÛidQÎ"©ëžd<€Ó1,;Àc_Ëíɰ¯#û_þ[´¶�}7híßÄ>ƒšÔZ9u#ö�Fš +œ"džïfî¯�€µ• ¶8P'Æ™¹RRä¸VfÌ:3ÌãÁÈét®I8Xrª.^ý,˜vD¶àÊI#FHVOWÕýFi)PÚAÎEY¡Ñòbnc×íÐܹ–hïÈ|-ä=�:Y(kv–Ùç�ÒJ8½,*ðºÃçšø¼ÛÎÿFè5x8¦õ‡L—ààãC4ÏÝnIó[–â^å å: xQæÑïQezæ,?ɶa1›„$MÈšœ’£J ‹$°“TåM + Ê‹ü…,Í´%3œ¿½ÇN{ìб€±}%ë°2ÀrOc÷.„Aai“^žºòG\²ÝÈËT;[ˆÃü¶�SSÿˆ6“KÙ¨ûÕßß¿ÿñW&fNI=ÓÑç”ÝêAö¤V³4˲«ãªÓ4Ål†ÈRœ™¹Ý +Íð8Âã»ì}uÊÉäÔñ&g‘eÃñGÛTqqü'·üÙuðB@Ù�ë…jÄEü¨r¦)òœ�ã‹ì¬`¢”@u‘¢Ò]Cá6:’c�#³¬¼EZ€ª”h¬\�FÓÕ�]y¼ãÂz³é½f±X™vI6VX=‰<áÈ<Šß‰a5èhOݦ +4æfU£[
Ðe6¾'ÇöjþÖ�AÃW°è¨q°Îé +p88YçÙÈ[5°÷Øøj�+aªÛöMgÑb�
´5a±¢ñÅ~†K +�Õ½Ôqæñïþªm� +endstream +endobj +227 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 226 0 R +/Resources 4 0 R +/Annots [ 228 0 R 229 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +228 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 330.976531 95.498285 315.376531 ] +/BS << +/W 0 +>> +/Dest (section-1.2) +>> +endobj +229 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 95.498285 330.976531 168.122309 315.376531 ] +/BS << +/W 0 +>> +/Dest (name-motivations-3) +>> +endobj +230 0 obj +<< +/Filter /FlateDecode +/Length 2274 +>> +stream +xœåZY‹$7~¯_QÏk"$…Xì¥�Ùƒ¡Ì<,ûPÝÓå—™…±ÿ?8¤”R‘JeVU÷xÌâ.²óT(Ž/xþ}‹ü/XT!DïìñùÓáó”'à¿üÅâ&¿þ™�ÏOGïŽÎå|ðÇàIYÑÒñ·—ÃûÃÿ©…�óˆZ+ÂèBþ�é÷Û¯‡wgTpüõ÷Ã…I'âCmý|Ê]Ññcéòãâ}ºÿ
wv…Ÿ‰Æâµ¯A˜¤\],8ü¦g0’®d2£âþãt�â^¶Ï¿º +Þº£ñNÅÐãñôéðî—ïþýxz<bTzêõt9üç +MIù½-ç±QÇDè2}Dçòás!ø4`É«\ÖÅ-–Ht_ØËÔ}c#¿‹ü¬*à2]gªHçåwÄtSôI"$ZøaÓªÄj#m"¸}«jöÜdN
NŠÌ½Ñâ`îÎAd•${îZ}Q„žº¢j‡ú<vªC§8[¿íXÑDÊ0y‚Ž•µIú–7ˆ¬}Ëw?üóôþÇ_×Ê¥?_…ð̸afL²NgãËuzÅs>|ï)É=�·1ê[õOÂñÒñ<Û:뺴ÄR‚:Ü*eŠTÀfÂä>½å--¢áÀ{³Ï�¯AÖ™À<†hô>dã%—� 9E�ì0ÉAp¢äXÄÀiw—Ñ}ò¾qäÓ«à•qœç ïþÕaVF:VÔõav7¢ oÑBvàú¾Æ,I`|Ñé”±1ôìc§½„N¯,pM¤°k�b!SÖ/|„�Ìa’Ã]Ò}Š�Û ã4¥4a×$¹‹ð³ÀE¸,ô¥©2…å +°¥À=*Ø5ù +P÷m”ö$À±šá~0½béµdž‹HËኺ.þªÒêñ”Çã¢5_&hø]W«¡©"c3T¡Ñ +µã`Ý‘®ºÌ\Ö˜Qã4/3UB3’§P)i©Ö\�t|0É»FšXa†s'ô¾WÀÌ ¥¥£�}Ì@áõºÐÞ Ã–%«nò½DOXꪦº~L‘iB‰ZUçr|!úÍHmæø}¦=¥c×x\Xø+cEgý\óØäWpÞ×׬q]½c)Ƕ=1Q#Äjî‘°³Ò°½—C¼9¼Û}Ã-hA9 +ÝÖKèwMY#£¤T‘S†»Î㽫ÆIEzúSxšJÞÙhÏs‚¯}{X¤KÜ1Bà2Ù£K#øÂbí½"K^œ#ÉE‡ÒÎÂ(à +¤)�,´|�MA‹ªÆåY�F<~M@¸{@±i
Nyi* ã-ÈI‰!N‚½=Y¦%Æô
TTÖõ˜ydÒ…ëE1Ч*a(mÓ¤.×:³¡°)&åS*ù +ڢشvªBg¤ åV¥V%ŒgxŒËª
<Î^r´= ¤Ò|^
*˽º^ÈýZÝ4.3ç®I”¥†A†÷þ9&¯2j5µt Qeç÷•VGSÂc†’‡U5�“ŒÞ†‚5lƒZ¡{�`3Q<ƒ?ǧV%Kz8»Ê‡0,þOÂUÑv +°2�Ð~V‹y’†ôl Ü)5·œ'nq€&ÛÌåD.ÌEj~_êȪðÕ#DÊà+²�}m–Ï@7x2�ä{ˆ Àst�ë²®È_Cq�o!yÓ@Œ=(zXH(€$*‹Ñà,BËÆ±ÿ© ^ÛÖòb‘žûQµÐ G45Ãnå‰Z"\-Ì+«`³2<Ž®—/C.< ½”RË–ÉO9bšA¸qoLG•&=Ì9gRD ú„ÛO_SÀ\7¥÷Z¢!ó¹)yaäQ^YÖ±“Á{/MᙈÚñ^óÁã©,k¿jÁÉÕ…‡�uK-çLŽÏe +× Œ�ÊyÖ«œ¯aàóA¬Ãj“æ\£÷G‡^EÒžx´gÙÓu^˜)Û^Óf먴ÙÁ³Œ«‹õ~}Î�ÛÖ9Í�s…Û:¿�Uî¶š¡¿èVí÷-·@ iéëhmPžÑüîÊW.çvŽì‰ý3?xÏâÍóNO×yš¿ígò¥øN³YGŽy²nƒŠg?w~y|égo}wíð{šð^!ã[Ã5M„—rÍgLKzŠhXŸ_&?O… ~Ȧ ?-¦š‚ä
C½´^¿ÍËvZîÐQ´½´¶3Ü�«‘<EÕ„›ÓuN÷ö;šˆ¨U—ø;c‚áòúL¼¦Ø9–öüÎØÒ–Ê³Ët–˜¹÷ÈûJ<I˜Jüå%3(ç—Áž© cÒüþ
˜¸Åi+ÝÏïu¹OŸÄBi3s©Ý7k"¼Aœ0 Þ1oõË¿JY~[~]›¼¡HbŽ•5õÛC¾R•fµç^-9³µïâÏf ²œ£¸Z@ÿJä2,-B¿V{/+<ä.6ëcHg!)*¬ñ´˜ŒÔb§KÞbÒvº”Y.bÔ×Ïõ«f=ZÛ™x_ëwW$Ç`bçrÿªH®�Íæ +endstream +endobj +231 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 230 0 R +/Resources 4 0 R +/Annots [ 232 0 R 233 0 R 234 0 R 235 0 R 236 0 R 237 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +232 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 756.389764 99.094965 743.389764 ] +/BS << +/W 0 +>> +/Dest (section-1.2.1) +>> +endobj +233 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 756.389764 263.183832 743.389764 ] +/BS << +/W 0 +>> +/Dest (name-problems-with-existing-format) +>> +endobj +234 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 574.095916 89.132367 555.375916 ] +/BS << +/W 0 +>> +/Dest (section-2) +>> +endobj +235 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.132367 574.095916 142.873090 555.375916 ] +/BS << +/W 0 +>> +/Dest (name-header-3) +>> +endobj +236 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 293.120223 89.132367 274.400223 ] +/BS << +/W 0 +>> +/Dest (section-3) +>> +endobj +237 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.132367 293.120223 144.486615 274.400223 ] +/BS << +/W 0 +>> +/Dest (name-packets-3) +>> +endobj +238 0 obj +<< +/Filter /FlateDecode +/Length 1842 +>> +stream +xœÝZK�7¾ûWÌ9@‘¢^@±@RlQ´@€rzp¼v.I�¤ÿ(õòH3ö<¼;mÑ5fGã‘È�ER”¡“üùøŸ#Îyk¨;~Ý}ÛIaµä¿Ø£yˆ¯çëÛÎêΚÎ�VJëlç¬DғvvîÂë/ +ݸQ�{»ßA1g…³$�ÁJ-Œ’Úªnÿu÷úçŸö~yß +þl·?ï>þÈh�”*_r;Haþèö¿î÷yâŸY9lÇú8n8¼¬<9¯p=¿Ã�¥ãU¸Îa8Ö 4ýp>m +‡1MœJ:tvX_¼é*Cr‹ÁëæD{O¼tLx�}ò5ɲ©!.¢®S;¨ +�}ßI.Mi°(:zÙâŽmÏq’jSá‹þKçØ„‰2el5§IŠM‘.-·äËž&J"ŸN›Šæ%ZhjnE×5‡¢×HM?¨g§¨¶¥³HÕ%i¾¨Ç‡J;z½vÚªØjN>÷×9¶,ÔZ[üZËõbÍz�|M]ëZ<¤²âsæf³|2¯•lèóÝ¥ï&97%¬(cÞ´Fªª’¥¬¾¡ÕÌph«R79l [[€úØÌSr®µ–cˆ‰C”µ²ÍT±›àÔÔ–’?èm.bÁ. Ø”‡"ÅBÁõÞ&®bWið˜×Õi†zSí‰s¢«9ÈîÖFS¼‰Ø«¸vÛÚK¤Vpȱ¿Š˜‹²G/Ô÷ù(®*ìPgÀ +Ï{)m:ŽÜ‚•*:ù`uMßéCXv%6:àqãûç| ëÜ…—f^úÂK¹Š×2DL½Ô–†�Á1åt9ª®B�„° ŒC–ÎÞÞÒÌÁ@¨‚]»,O�ƒù+ô3vÙµ”¦[Á<n´ÝìU¢”pÄ^2ö[Ò»Snã±ï�³V(ŸSè¶_Ì&C–és»ô=ßèû”ú‡÷s}á˜øG{HÏp¾…gBzb—¢•%5'ýÿrîmH°–ÌýÕ9W9ù¤|ê߇£È�p/sñÒW¨]KvªÆ$ŒÑÞc[Š6rÊÁBæ{uòxU;^ +Klã–¥‡=V§¬©š‚bò�¿+È0ߟž¯5›HqKSÒ£¤ðêÓÈI鯬Ýÿ‚ô×fæ[@p»%+e‘wúVÎE+WFuõŒC)pœ9ˆ%¢K}/55Lùõp§˜²Ý« F +endstream +endobj +239 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 238 0 R +/Resources 4 0 R +/Annots [ 240 0 R 241 0 R 242 0 R 243 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +240 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 449.456531 95.498285 433.856531 ] +/BS << +/W 0 +>> +/Dest (section-3.1) +>> +endobj +241 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 95.498285 449.456531 357.695795 433.856531 ] +/BS << +/W 0 +>> +/Dest (name-assigned-packet-keys-without-) +>> +endobj +242 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 426.356531 99.094965 413.356531 ] +/BS << +/W 0 +>> +/Dest (section-3.1.1) +>> +endobj +243 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 426.356531 165.534418 413.356531 ] +/BS << +/W 0 +>> +/Dest (name-general-keys-3) +>> +endobj +244 0 obj +<< +/Filter /FlateDecode +/Length 1907 +>> +stream +xœ½ZK‹Ü8¾÷¯ð9°ŠJ*©$’%˲�À,9„=ô4Ó¹$ÉþØÒË–Ü~´{Ú;ÃÄv[®úTõÕËè$ÿþü�CÎy²Ø�¾~¤ #ù'®h.âíOü÷ã@¦#ÛYÔ‚¤$G�##¥GÓý|9|>üsO�ï +èÂïϯ‡·G²ûúïáÌ¢ƒpWža-ߣ*Ó}Ë*¿5÷Ãõç7¬lO’Ñܦê¶N¦]^œ4ߌz£Š˜´ºþ–®¡º®Ÿ«>ÿß70üJ:üt—'õsïŸPãH8B ¶é„2ÊkÙ=}?¼ýí×§Ï¿ÿÕ�6üP÷t>|y`´VJ�ÿ$ð‘w =N�wO><eÇ¿Ž²A�ôÛáw€ƒ(�r7ÀyÞŽU‚´D»
ޤt~o8JkaŒÕ`®ƒCÙ:ùüîp8 úà¸àXN-áv8;D–rNH�¹Î‘¥�Îx’p·¯³4gb ι+Ó Û×YÚ䤽ÎÎBÐBkRxœÒ :`µtö:8/ûZÇž›/Vá„L,í¾iÐ�€Ž[µípvˆ,ãAhIÊß +ÒÒ68ÅRw‡£Q›ÈÜ +nYIêmßÙ�Þa
–A¦´ã±Q�EÏeŒ°õ`ãh‚úBéUΣô}*Ñ:V-‡]ñÔÁ•Ú9]·Á“m^•<£Ñ{§óà0té~I´uh”õ2ËÝHXŸÃœ¸Urf\L¡PŸ£,[fŒ£n¦„OÁQg==…�’¾ÿ¹1¯�è¶L?kæ–â¹m“ÍJ +ˆ2NÅÆž!+ˆãÊöž´ŒŸb–Bx“¢'žŠû0u·8.t–í¼_xºX´·¸MÖ2Ùõ§Ë™-q¡Q³
`.v9›oÆŽTãhBDÅaͳöHäB4%^W¼íZ@�ä„äX•ænè¹[ìZ«ÇÜ€~$Ò*-8+(˜õê("g£ç8éy‚#ÍC@‘#1Gmý%*pàà�Ð�ÖÝ=|+é߬<ô¬w‰bE†¸ÞU…~†×ò¹ïr¦:ßw.u·ÿ2åYrñmO½�º²E³–:<î¡qLÂ3ä…Rœ +àZxáõE]ö«oD^Ñ×�T Œû3¦zû¨TâÆSIjsïñ5�#Pks
˜2�©Ô1Çz|—ïŠLè¼±~6嬀Èå +ªy¯vᶨz�æÁ•9‡Òód,С¦öe¼ªRŸñMêÞWÄ&ºÊ¾Ê?bˆ÷:FKg°öª¬äÒî‹[ +Ó±ä~Œ³úÚ–rLöÝfnHJ™,ÍCì�ËÑl„þ ‘PÖs©™Æºç’æJg,sjUf˜Q"®~vÙˆCž6Ã+XÇSZ?íÂ:w¥«‹Èå�Hbéç°ã@¯˜õë?ýócÔÊ +endstream +endobj +245 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 244 0 R +/Resources 4 0 R +/Annots [ 246 0 R 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R 253 0 R 254 0 R 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R 260 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +246 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 705.412225 99.094965 692.412225 ] +/BS << +/W 0 +>> +/Dest (section-3.1.2) +>> +endobj +247 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 705.412225 187.353998 692.412225 ] +/BS << +/W 0 +>> +/Dest (name-nes-specific-keys-3) +>> +endobj +248 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 611.434686 99.094965 598.434686 ] +/BS << +/W 0 +>> +/Dest (section-3.1.3) +>> +endobj +249 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 611.434686 193.214106 598.434686 ] +/BS << +/W 0 +>> +/Dest (name-snes-specific-keys-3) +>> +endobj +250 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 517.457147 99.094965 504.457147 ] +/BS << +/W 0 +>> +/Dest (section-3.1.4) +>> +endobj +251 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 517.457147 206.144281 504.457147 ] +/BS << +/W 0 +>> +/Dest (name-genesis-specific-keys-3) +>> +endobj +252 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 464.337762 99.094965 451.337762 ] +/BS << +/W 0 +>> +/Dest (section-3.1.5) +>> +endobj +253 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 464.337762 227.043940 451.337762 ] +/BS << +/W 0 +>> +/Dest (name-input-frame-timing-keys-3) +>> +endobj +254 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 356.740838 99.094965 343.740838 ] +/BS << +/W 0 +>> +/Dest (section-3.1.6) +>> +endobj +255 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 356.740838 183.333734 343.740838 ] +/BS << +/W 0 +>> +/Dest (name-extraneous-keys-3) +>> +endobj +256 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 273.382684 95.498285 257.782684 ] +/BS << +/W 0 +>> +/Dest (section-3.2) +>> +endobj +257 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 95.498285 273.382684 337.475824 257.782684 ] +/BS << +/W 0 +>> +/Dest (name-assigned-packet-keys-with-des) +>> +endobj +258 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 250.282684 99.094965 237.282684 ] +/BS << +/W 0 +>> +/Dest (section-3.2.1) +>> +endobj +259 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 250.282684 227.233637 237.282684 ] +/BS << +/W 0 +>> +/Dest (name-general-key-descriptions-3) +>> +endobj +260 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 367.313227 181.424529 434.420649 167.805145 ] +/BS << +/W 0 +>> +/Dest (console_type) +>> +endobj +261 0 obj +<< +/Filter /FlateDecode +/Length 2794 +>> +stream +xœí\[¯¹
~?¿ÂÏT‘(’’€Åv‹E,à,òPôÁqsö%)°Ûÿ”š‘ÆÍÅ3ã±�³HÛs¡(‰ü>’ÒØ´üýÅÈ�ò>8ÆÃéëÓïOZ9Òò¯¹¢÷¥9ýA^¿?9:8>0Zå´vÞ¼#…¨Òá�ÏOŸþûïp¡»À +‚Õ‡—¯Oïþö×—�ÿõ`@qüç/¯OÿúQ´emzi“>‹rÎ=ÿûðò�³d#†¨=²µè÷¿üôòËÏc•m•K¢µm$6ïÅ‚¼rò^å%Ma<Níg8Ê딯UÐçÞ+4`tˆ*ÄÖ¢T’–0J”ÏxÒž¡ýNÜjA¡9®Ñ¥ã�ŽSºïØž�ÇɤsQFh?G¹ù¥ÏøÚÞÛ\›Újd¹tOH÷Pº&¶ýé|�uϬEÀ¶ÆäãéºS¡”‡©ŸŸ!Þ×ôÃ�eÓé<MûÝýÕh²L˜Á¨ÖÈhêÔRìiדB¤,ª¤¼ûõ§¾y?4‹ºÃ0°´bš9>ÌYZ;ÏÝ<Ôâ((럨×õ³œU—FøTX€>Ï`7Óyvð|�Á¡Åг˜-ÜYN£s²¶�źëOíh¼E“СI "¤Q�fá4ó˜�²š…™dØÝ;¦wšUÏŒ«×ÐVh�h™zú”G±²�.�Üœ±´.øì‹^—Ç亀H— Ñeèœñ›`[C«à±‚¦Æù±u€îؘqg¨9Ž\îú%ïÇäh§äªM
§ÏÂ�÷ÄKÊ�5#û/‹I”3$6r%^JÜáY[ÄZ䌩]ÀÌà•·¾/ò;fNa¦L{¦á¼îŽ™¼3Ù +Ù³•àt±�\ÆL°^‹f=fç1³½3-µfÑ„Ž:a¦)qtƉcèN`4Õ�÷hè¶o-ätB׈ÁàȈ÷!tf®Dˆ§àtwç8ÐJ>çQòæPÝqÐ’È‘°È¹Zäf �Îèu.é×w Z™féÏ`^wZ·h%"5–�1‹mä2ÐZÉEzîÖí§y D/ +N±õ“Í‹ÚÀä=–º@õBoÁˆ‡¢wSÐÍ”Îç™ï�Ut®šÑU›:Á„Ñ. hçÀ·±Â\oÀq‹ìݯXÄdû¢?¦pÎI²™™ÔJdžw‹B+‘ËÁ±ék9(F´«Ü¤êMsmUÝœ·}9yô›WJ9�t�ÌÊ€V�…ŽŸÓ5®oaw£ÖrFÉ7±žç’ /g&ÈŠµC!羄+lƒ’$Â!Ô"·¦uŠ8Xð#ýüN˜c„)“€&„á¼îN˜~a:a�À(AÕRY@˜žUð^Ìd=až.f_ôÒâwIš¹ÐÝ$=ÛæøiÚ¡Q“2è��«ˆ2C›9;JG@©ø�#ì¥ìåaYY£dæœÅ‘‘Y\ˆ!gU`K})ÛáN¤© ñùZäöBŒE%kêr·và-Á]
a˜ñ$‡@|¾·$ب÷ý¡R°H± +¨F{¨[ ’µ"džq©z bsÆúõPùŸy¨¬D/‚JßÎ^Ì#š"w›E)$šÎŠâŽ˜‡’�²Æ_Ÿ9æŽÆ×¸kŽËˆp¤£ÄìD½H×¥ëuÒ%o„᩼¢vöÙ6r_«è6ç5Y/×êv¿ˆT +ú¬l»\‰ÜL1[° Ù‚›ê뛡�{ð’™tñ-ç á`ï+Í÷§�yõ&胅Ý|€ÈnËÔ[@÷@ÚÒ®Uôñ:O•è½é£Û_Hó¹ +D¢ÃU’¡¼¨À/ZJÎ{*3l¿ž¿w®•\99G×vüÞ9A8;
a¢¢bù¸YöÎUÿ1**]‡ým�ï4Þ/tº·Ò0Å�õëŽzc63#Öb&,icíÈfr‹KÀÍ(gÈø4Í›ÏÅA%ùxön1•¡§\cèKÙNeFÙ¸^gj‘›©Œm$\˜ìë$•ÍØ±’{¼=gŸßá^ñRJNáHÕHîOeñÝnyÀ³b¯™êɾŠÎ||œ…Eîz:³è¬/zQäÚì§¡*«Ï™N~Zª^T¾@]^K€"FC벟‹ÔU‡»#`Õâ4“Š;j‘kvU�ßœÏe¿Îõ¸pÉryüJøŸ^Φ Л¸Â1œŸæÎbOÒ<ã^+ã‘™»q&#öè̤mwW—Mr +Rï§ +’m3UB¿ç(y§·D™›ÑD¤ê !Ÿ,(?lª‚ò¾Aí‰âÎ=§Jì†Ú%ÊÜcª&Š×NUV®S²izRŸ&g”„¬YkAëú¥2(ŠzE‹T‹Ì�–uÏóùr�6/5êOU¹XXêÒâá¸Ïv‰ÁIí%j»Ø¥”‰S.Q¤}ƒ˜7ƒ¤=~†â:lz§•êÄÓ\1ÄÕŽç²JÞ(¢SéòÓ÷ǤW.AòJ=¬¤Y,`uYŸ\ÔãSXV,šÎˆÎO‘#�ƒ‹ºØ\&:žÍ«ZÈVÿáÿ°ä©Ì +endstream +endobj +262 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 261 0 R +/Resources 4 0 R +/Annots [ 263 0 R 264 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 272 0 R 273 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +263 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 378.175043 744.150994 445.282465 730.531609 ] +/BS << +/W 0 +>> +/Dest (console_region) +>> +endobj +264 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 407.764887 695.292840 474.872309 681.673455 ] +/BS << +/W 0 +>> +/Dest (game_title) +>> +endobj +265 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 415.995111 646.434686 483.102533 632.815301 ] +/BS << +/W 0 +>> +/Dest (rom_name) +>> +endobj +266 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 436.814936 583.957147 503.922358 570.337762 ] +/BS << +/W 0 +>> +/Dest (author) +>> +endobj +267 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 428.324701 535.098992 495.432123 521.479608 ] +/BS << +/W 0 +>> +/Dest (category) +>> +endobj +268 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 174.695063 472.621453 241.802484 459.002068 ] +/BS << +/W 0 +>> +/Dest (emulator_name) +>> +endobj +269 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 205.134516 410.143914 272.241938 396.524529 ] +/BS << +/W 0 +>> +/Dest (emulator_version) +>> +endobj +270 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 205.134516 347.666375 272.241938 334.046990 ] +/BS << +/W 0 +>> +/Dest (emulator_core) +>> +endobj +271 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 367.313227 285.188836 440.010492 271.569451 ] +/BS << +/W 0 +>> +/Dest (tas_last_modified) +>> +endobj +272 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 145.975336 222.711297 218.672602 209.091912 ] +/BS << +/W 0 +>> +/Dest (dump_created) +>> +endobj +273 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 145.975336 160.233758 218.672602 146.614373 ] +/BS << +/W 0 +>> +/Dest (dump_last_modified) +>> +endobj +274 0 obj +<< +/Filter /FlateDecode +/Length 2669 +>> +stream +xœí\K‹$¹¾×¯¨ó‚5RH¡�`hØ5cŒ
½ÌÁøÐ]tíeưëÿ)¥L¥ò¥Êª®îÁSEOV¾B¡ˆÐI£Ž’¿Qü�3J8çÉšãéÛá�ƒ„’?ñ‰ÑI¼ý™ÿþ8ÉÑ‚¤$GGG(Œ‘Þàñϗ×Ãá
òýJTÞºø„:†ïŸ¿><)!�¿ÿ÷pfÒ�8)—ßáV¾Å¦ðø55ùut?œù‰Ûà§£1ºMÅm)œìz9ù1âð§šA��ÉDF‹ó¯Ý¹*ÎË÷ŠëwïÀð•Béð9N”ïýòxPÙ` GF*{TÒ @ðZ¿>üí¯�_þþÛQ�°áCÇÇóá_™[+¥NR¥#Ñÿ��ÿ(+6DéŒG]“þôëÏ�¿þrTZ莹DZêH15=€äk”ÿÏm8Ãg)
ðÑóuì®ñ+\`§fC=+Œ%}`#´˜G~Õ𛆛“tºs´'È*2Ïݵ|Ž�®sËæœ®3ëè¢,¤ÁDÓ½@Ów¿Ã±ëUx?>_´Ç<DZsm—R¼+•¯§çNß:ñúõÒI3¶CE?NCÿû¶ãû•ѳ•6ÖÏHQ¦–׆†ó k¤�J[Ʀ1•¿ýüÏO�Ÿ¦&Qwj+³<®|ø@MrÅÊ:Ÿs¿k‹qžûÊrá¾#�¸q_m² +/e»ÊcÒM Œ dÓB“�Îi|AzA +¹é·_,îõ6”‡*íÎ
É·a«LDèæ¤ÙÂHÁ‚É©ŠÊ~.Õñ§%³fUë +X‘í^ZÒœ“M%Ó¬h½ +Ò²—Kl@&ѬAŸÛ}HV(dXÐ,6@ŸÙšÔ^ÚË �ºßkÐW‘n�>Ào&ÛÜUàðI(FÉUÐךìcŠ@^æYôþyØžÇô²1
Œ2NíŸÛ(,äØ9º>N}/nôlÕ÷-~Úâæ
±1k +٘ʱ za<ûp]“¼œZÁzpZÿ€³m8KëuàÌ\g�,¶À™CNB¬u—í¯‘
Ëi*ÒMpþº‚l·Ï†”Ùt=#i¾Ÿ#¿óvõÁÉ0jÑáUûl.Y"³5S�KíÛ™¶lÑÎ^úä_Ž–Æ\yæÊǾ…/+ÚÅ&‡ìÄzˆz/Ëc8íàP?Ãe{A¢0µ1•+æÃ=)KP“Ü_@@)Œ!àx¡¯¯â8VìB{á8•U=ÿws†Úƒp¬ÁX¯ãšpOñÁyAœ�ÉZa׸&G |˜þ[&}'p|œYcBç +‹p…Eäê°žªë¥†š¹c¯ê±îx7òz¥|N»kwìªEn‚æP\Øè½ArƩğ�o·ÑõÌ”ÛàÆ;ì¦Ìð{–ýƒèíÓèŠÁ°÷RâH�ÙÒ',ìDº§”tØÃËÕ6˜7–’±J ŽNqa[Á¥dƒa{ðVm33+¥tµÚ}ÊÄíÕ!A0Ü0/-¾½£:�Â2Evn2sW£Õœ6�ÿ¡ÁÒº{J‰!˜-6ì6ØdæÎ +�0òã8gÍÅö̦/Ê÷™ÊTþ«]²aϪt&,wÛèRž +ÍÉQZÍRï[ëf&¹i;áG" +{ˆ8µšçò2ž"‘“©’
åt.Ê~e
Úù�‡K nò“×Íøy–Id·ôRrhˆ`“�Ë*OƒyÅZÁXñû?ý�’k +endstream +endobj +275 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 274 0 R +/Resources 4 0 R +/Annots [ 276 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R 288 0 R 289 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +276 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 469.905024 744.150994 504.553705 730.531609 ] +/BS << +/W 0 +>> +/Dest (total_frames) +>> +endobj +277 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 80.905512 730.531609 116.353998 716.912225 ] +/BS << +/W 0 +>> +/Dest (total_frames) +>> +endobj +278 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 487.584223 681.673455 522.232904 668.054070 ] +/BS << +/W 0 +>> +/Dest (rerecords) +>> +endobj +279 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 80.905512 668.054070 116.353998 654.434686 ] +/BS << +/W 0 +>> +/Dest (rerecords) +>> +endobj +280 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 359.415522 619.195916 432.112787 605.576531 ] +/BS << +/W 0 +>> +/Dest (source_link) +>> +endobj +281 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 405.852533 556.718377 478.549799 543.098992 ] +/BS << +/W 0 +>> +/Dest (blank_frames) +>> +endobj +282 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 339.433588 494.240838 412.130854 480.621453 ] +/BS << +/W 0 +>> +/Dest (verified) +>> +endobj +283 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 378.175043 445.382684 450.872309 431.763299 ] +/BS << +/W 0 +>> +/Dest (memory_init) +>> +endobj +284 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 237.784418 382.905145 310.481684 369.285760 ] +/BS << +/W 0 +>> +/Dest (game_identifier) +>> +endobj +285 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 336.943354 334.046990 409.640619 320.427606 ] +/BS << +/W 0 +>> +/Dest (movie_license) +>> +endobj +286 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 336.943354 285.188836 409.640619 271.569451 ] +/BS << +/W 0 +>> +/Dest (movie_file) +>> +endobj +287 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 294.633539 222.711297 367.330805 209.091912 ] +/BS << +/W 0 +>> +/Dest (port_controller) +>> +endobj +288 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 197.591912 99.094965 184.591912 ] +/BS << +/W 0 +>> +/Dest (section-3.2.2) +>> +endobj +289 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 197.591912 249.053217 184.591912 ] +/BS << +/W 0 +>> +/Dest (name-nes-specific-key-descriptions) +>> +endobj +290 0 obj +<< +/Filter /FlateDecode +/Length 2387 +>> +stream +xœí\K‹$¹¾×¯¨ó‚5R(BvÍcÃÂB/s0>tÓ{™1ìúÿƒC¯L¥òYÙ9U½¦»©®Ì,eèS(ôÅCYÎ’ÿ¢ø�C%œóÖàùòíôûI +K’b‹ÁIüø~ý~²t¶ælP+¥uöì, Dé‘Î|9}>ýçî°¾k € å�‹-Ô9üþñÛéÓòüÛO/,:·Ê•{¸—o±+:Í]~|Î?ÿÀ�àI2Ûêc)œL£þÐôELZ�Mçª:¯ï«®ß| +m˜Aë<:7¤š%ÍvcýŽH&÷”•·tà6Þ;áFÉ,ÌZ�!«>»?(žª�LÑg!�âè;b¢þ¼h·ŒzŽvãq-;Üÿ<´¿‘›o1¶Ÿ¨bÜ#×׆v"ò¯Êõ‡RÉõ‘Gäú3cý?ÏõµÓÂ)dz‹¹þÝñÎÙ¼.×ßoƒsÆà‡Ã¢Û‘ë?-;çFô®\ÿ)¯J™®w×\n{©®H�̲ÔRXï�¤=9?ä,²Îáãµì"£ShÜWq[¸å¢›‘/‘Ö‘B?¡¡ÍäKž„w¤)ûÉ×h%¼UÆB+r7ùÖÖ€�“ó®¯3¼qâ½}΂^ +[e#º¨«
›g9)µ¥\*‹p•EPV½OÃ(LÖÚç5L \Ð)ϼ�N«mÄUd¥X܈Þä@U]0&m…çÕª®ÊøÞÆò»Œ‰ŒP<÷^NÅ“ƒ|yaoúÖã’i×X;§rxј
«£sk«Íû¿WјYE€^lÆ¢ñýæÐ¨*¥R4nDQ4žë
ŠÆœk„°Mø^4�‡šysEã�ð6`”à!ko®+VŠÆ�è½aÅk +džƒ-Όɚ?káx<‚Ö�\]8žˆ‚¿Oñxa^È2û‘%ª³Áq‰yºÇ÷â±<¨x¼0C–c@¯»ºÊ•ƒrBþÄMHÚìÊ9‹:$sº‘òг7a»-D�ÈÝ®%
N);7Ö7^éèm~Á¼i«RýŠ}Ë®,Gl +Œs
òã\¹y…+ׄwHn…·Á•[ +¦µTÒsÒÎ+5öYÒáô$ûÂciÞßEím–TKZ•ü.j¯ŠµE&ÖaœC
úÎ׈�äìâEå¾Ê\O(ûøÂl +e� Ï÷ЀbëGgÁÛFâñ4°g· $» £CÉm#¼
4à8íd9J™ëv›ìúnÓPt�2#*».özû�'†¨ +äb¼À·‘ +æ¦S….}!FÑÜAK&ÄÏ<ozö!¡ŒLágÔÄeÔùkx†Ý+²'
ÛqƒÍÐ;ñÌÌžà}xf̽xf¸ípSža†)Î� +´w˜*
zE×ÁÜ‹gf +3÷á™U0ë<3âœØÍìÉзÁ°²Ùdj;,¤BU™"?¨L嘺ìUû]àP~Ö°ËŽËZìÞíÌt±øXÇ‹CbnR:d®^RÙú+á¿ËPËYyˆò³@4¨Woƒþ=ŠåtÁxÙ<ôÐá©N·)—S™kdPRé§ŒKÚ{%ÍÞÀ±FãÉiz»
1ž9øOÛ§ˆÉ +endstream +endobj +291 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 290 0 R +/Resources 4 0 R +/Annots [ 292 0 R 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +292 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 174.695063 716.912225 241.802484 703.292840 ] +/BS << +/W 0 +>> +/Dest (nes_latch_filter) +>> +endobj +293 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 306.693598 640.815301 373.801020 627.195916 ] +/BS << +/W 0 +>> +/Dest (nes_clock_filter) +>> +endobj +294 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 174.695063 564.718377 241.802484 551.098992 ] +/BS << +/W 0 +>> +/Dest (nes_overread) +>> +endobj +295 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 336.943354 515.860223 404.050775 502.240838 ] +/BS << +/W 0 +>> +/Dest (nes_game_genie_code) +>> +endobj +296 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 490.740838 99.094965 477.740838 ] +/BS << +/W 0 +>> +/Dest (section-3.2.3) +>> +endobj +297 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 490.740838 254.913324 477.740838 ] +/BS << +/W 0 +>> +/Dest (name-snes-specific-key-description) +>> +endobj +298 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 306.693598 408.263299 373.801020 394.643914 ] +/BS << +/W 0 +>> +/Dest (nes_clock_filter) +>> +endobj +299 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 205.134516 332.166375 272.241938 318.546990 ] +/BS << +/W 0 +>> +/Dest (snes_overread) +>> +endobj +300 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 336.943354 283.308221 404.050775 269.688836 ] +/BS << +/W 0 +>> +/Dest (snes_game_genie_code) +>> +endobj +301 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 84.365473 234.450067 151.472895 220.830682 ] +/BS << +/W 0 +>> +/Dest (snes_latch_train) +>> +endobj +302 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 209.330682 99.094965 196.330682 ] +/BS << +/W 0 +>> +/Dest (section-3.2.4) +>> +endobj +303 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 209.330682 267.843500 196.330682 ] +/BS << +/W 0 +>> +/Dest (name-genesis-specific-key-descript) +>> +endobj +304 0 obj +<< +/Filter /FlateDecode +/Length 2664 +>> +stream +xœí\K‹9¾×¯¨óÀÊR(B!�i˜Y¼,»0`èÁ‡eÝµî¹Ø3ûÿaCJ)S©|Ö£Ëíaºigå+Š}ñRÙµüþÅÈ?�ò>°Ããéëá·ƒVLZ~Ò£“tû£üýv`:²;:´ŠµfÏGϤu@:þþùðéðßC|ƒCÿ€1 +°…—§|DšD“
»?r>â*{f–=²‚Ѐ×Nöô©H±±‹ +&©iÏëÆÛO€òÑ/P6”X¯XeC:R�¬¡¨aª4+èÁ„÷cÌ1�ñà”¯å÷ñ)¿W[Ñ©²_Yå÷ìTEäîG‚°ìg¸_‘"RVÖ®¥Mg£ãœ]ålxÝÙ4¤w9›Sç4l„SŸE˜<çk&‰o.ÀZE$�D—8�tÿ9+9*ìó"pÁ0CQ�¤KœIzæix¦‡4›Á;c£ÓBêµÛÃu÷é©:¯á 3Í—
þ)Ó×+R—È‹
‰âë%³O—Û [k©õÚ¤÷ +÷E{Õ9Ö`
ÝR,ô{iÓ�{GÂãgF�ÙŠ•a…??Cdg5Niü´�„¯pÖK‹ °1-ɽκ·ŸhƒaÅ&\ˆc±‰Öúoi#ÛáÔà€{{xYX•¶T-ucÔ|¥ë¦»Öß�÷^ò_ä™.å·UX%±š ùŒ4Óìê§™Ýn=y¯dÊž¾;=-ñã(›�%±|+��Ä9 +ƒCÎu×·u‹ß{heY‘äËZO%z�Góo¢0ªLÁw «×ûZ�8«PK?'ÅA'+²‰DòPûX +Š_=´¡)°%ܘrµ?´bPh�ø×†Êå¡j¯Ðpp¦%yyh%z“ÀŠ�—æúfB«ÛA«Û@¾ÆÕoZ×ðÂR@�
w·è‚ÐJ…2é¨ö}ìíP,žCˆµì³C«°Z5¤÷„V�+Ê«)“`‘ó1¹¬£ +¢[òÁã9!Õ\°¡ÚÚ¹*i4^WKu³‡ž§j¹å¥7hªB<®µ¥ìÂ×l%s#,ÓeŽ…']=-ó?;Ã0ä7ì4÷eí�’xãzíÌJ¨™ñ¨ò× +’@lÞœ
à±1ë´‹™É˜Êå +²Jt\É›ÌèT€w©~sš~$ñ6íIo÷žg"Uõ]ÙGu)�óÊtÕ·ñÞæJk:FR["¯œä]J…ë&ŒÅ�1LדýÀßÀVl5£YÜï¼×V.1T
ÙÇûÖîf#^âp'ÿÚf“Ö7·Éårkra¯Ôm$%@á€ÛÌÜÜFЈ^d‡I?ýH"‚š•t2vŒ·˜¹¹$êþæ|¯ëŽ’ +~.Õ(î‰âS +endstream +endobj +305 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 304 0 R +/Resources 4 0 R +/Annots [ 306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R 315 0 R 316 0 R 317 0 R 318 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +306 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 336.943354 744.150994 404.050775 730.531609 ] +/BS << +/W 0 +>> +/Dest (genesis_game_genie_code) +>> +endobj +307 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 719.031609 99.094965 706.031609 ] +/BS << +/W 0 +>> +/Dest (section-3.2.5) +>> +endobj +308 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 719.031609 288.743158 706.031609 ] +/BS << +/W 0 +>> +/Dest (name-input-frame-timing-key-descri) +>> +endobj +309 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 145.975336 609.315301 213.082758 595.695916 ] +/BS << +/W 0 +>> +/Dest (input_chunk) +>> +endobj +310 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 171.734613 519.598992 238.842035 505.979608 ] +/BS << +/W 0 +>> +/Dest (input_moment) +>> +endobj +311 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 270.524408 457.121453 337.631830 443.502068 ] +/BS << +/W 0 +>> +/Dest (transition) +>> +endobj +312 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 488.564203 408.263299 523.212885 394.643914 ] +/BS << +/W 0 +>> +/Dest (lag_frame_chunk) +>> +endobj +313 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 80.905512 394.643914 110.764154 381.024529 ] +/BS << +/W 0 +>> +/Dest (lag_frame_chunk) +>> +endobj +314 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 336.943354 332.166375 404.050775 318.546990 ] +/BS << +/W 0 +>> +/Dest (movie_transition) +>> +endobj +315 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 307.046990 99.094965 294.046990 ] +/BS << +/W 0 +>> +/Dest (section-3.2.6) +>> +endobj +316 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 307.046990 245.032953 294.046990 ] +/BS << +/W 0 +>> +/Dest (name-extraneous-key-descriptions-3) +>> +endobj +317 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 205.543940 251.808221 272.651361 238.188836 ] +/BS << +/W 0 +>> +/Dest (comment) +>> +endobj +318 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 400.995844 202.950067 468.103266 189.330682 ] +/BS << +/W 0 +>> +/Dest (experimental) +>> +endobj +319 0 obj +<< +/Filter /FlateDecode +/Length 2085 +>> +stream +xœÍZK‹$7¾×¯¨³aeEH +I`l3˲†�6s0{¨©îòeÆ0Þÿz¥”ÊLeVõ쬧©©|HŠ/">E„¤‚³ä¿¿ÿç4ç¼%}¾~>}9Ia�ä±Åì&¾~ÏŸ/'kΖΤ•°RZgÏΡµôÚœÿ|=}8ýq +=¬Ÿ +ž\lçð÷çï§ï/ äù÷ÿœn<tÜ‚+}XÊç(Êœ?e‘ŸfïÃý‡ïXØž4Æìµm^KádÒrq1Cø]Ð,ÃD Íý§tÍ}Û¯yþÍHR€ +ÿÎË‹¶ÏOÏ'(dqV8«%Мœòx~þ|úþ×ÿõîùÝHÈ$õùvúíÉ-ùõ[ª§ŸŸÿYG´B)�ÚvC†ÞJIÉ:JͽõëJ~¦Y-cÃHå}zn®|}ãoÌ}rôO:¾ç熩ØÞ‡1uhJAÒ+ZC³À^�Àn7ÒY?³†*Ùsà ·¬¢P +ÿl±›e{I›?P¯ííÆ¡L:í�ê‡~÷Ë�Ï¿ü´tIP:Œ
ÄÆb*JEÉXÈ÷È×x
†ÉßáÙB¬¬!1mäd•]ex$£’K"¡¯Òæûl~³CøÐ®¸COäI(ãó|úGBmËòêûضRazÆþÖ&·µsjE:\Ç8T¸ÿ˜ûÓ1�¢œkµMêßYš@°béªYµh¸_N¯Æ_ZcÝxæ*ûD8³=ÒcIŽÌŽ¤ÒºrÀ¼äÿ[Ñ»Ò;á” ž9éºãå0yËD.–5ÅC
[@çw�ïÚ½Á“;m'bvy6Мý-vùq +kyÊOyª
,†�@ŽÌÒ¯[NPe•¯Õ¤Ñ4}Äöå~Vá‘RHqú>Ì‘ë<A°¸÷9ƒ?�½�ã�ˆ^;ÝMž‰ö8ÙS:„½x‰ÿxû`Àr…â½–›s°‚‘Að…H¤®_Cx“¹™2 +…oâ1IÛ�'6”
æmX1Ö¶¤†Ãž.øKÛ”BŽØô�-UÞeðÙ~/üHçþ&?˶
v¤æÀ¦%)q>\lðšsŠLß˸±‚çÒZñ×Bb–j³d*»Ü·4õ kïtzV¬3!–º%ıuï_ªÅ¦¾®ö
ïB¿ 'X[¹�3ÛZkTÒ™ù«Z»¥Ö ×5�è¢�U«b¥‘E†è9n¡=ÄÜ5ô~Ýgq÷ãrŸÏJŸ!Ze„¦‡vYAëÒœœ�º.fe›ÃKº¢Ó^�y˜ 7Щ:ÈÑâ’x;DÇ+UΧ�zú:@7²_‡pmþ~ÙAÎÑUâÃ^ Ç;‘câlX"B>‹r�fÆëºSô’9båÈÕÆ‹øÚ½~Îoôy]yfrTÕÉ{àºQ(ÿ0ûn+À\±_sj|‰M¼Ï(cŒéÚ£Æ=ºº0ì—ø]²Kàþr¿¢"àe©=TSŽ*(饉¿M¥ö>¶ìõ„ŒUv$ËŒ*|UG³{ò�,ÏF^•ûÍ-Îÿá¹G`aWö–Â)åz•™±´Ä›¬&�Jz§;ü1r÷ðg.âЊÉT¤9z»ëH�Èöb//6[,ñ‚×Zž.o;èpÿa�·@£‘¼ÿ×aÐ÷e¹dv„¦·ö½û2‹hElÎ=é»XKÏ?l�);?‡ÀæLÃøÙ™F.Êþl³¿;úyUdìÖæ9ÕvõÐ}iß¡J„¼ú9ÏìªTvC-òÞo¡N€ÏûÔ.ßæN8á÷~Ö +$Ï pG˜ål¡ì7˼•ˆù‡7�†—ΛÆt'eH’%ØÇS¨¿Aùö÷é÷e÷ºÈ�N3Éw±LÁíRéC[°þý¼Á¹9 +endstream +endobj +320 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 319 0 R +/Resources 4 0 R +/Annots [ 321 0 R 322 0 R 323 0 R 324 0 R 325 0 R 326 0 R 327 0 R 328 0 R 329 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +321 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 407.764887 744.150994 474.872309 730.531609 ] +/BS << +/W 0 +>> +/Dest (unspecified) +>> +endobj +322 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 716.031609 95.498285 700.431609 ] +/BS << +/W 0 +>> +/Dest (section-3.3) +>> +endobj +323 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 95.498285 716.031609 240.457025 700.431609 ] +/BS << +/W 0 +>> +/Dest (name-packet-payload-formats-3) +>> +endobj +324 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 692.931609 99.094965 679.931609 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1) +>> +endobj +325 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 692.931609 247.893061 679.931609 ] +/BS << +/W 0 +>> +/Dest (name-general-key-payload-formats-3) +>> +endobj +326 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 669.931609 107.624750 656.931609 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.1) +>> +endobj +327 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 669.931609 223.972162 656.931609 ] +/BS << +/W 0 +>> +/Dest (name-console_type-packet-3) +>> +endobj +328 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 292.596531 107.624750 279.596531 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.2) +>> +endobj +329 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 292.596531 238.652094 279.596531 ] +/BS << +/W 0 +>> +/Dest (name-console_region-packet-3) +>> +endobj +330 0 obj +<< +/Filter /FlateDecode +/Length 1579 +>> +stream +xœÝY[‹ÛF~÷¯Ðs “93ç2e!)[J�‚CJï:/I!éÿ‡ž¹Y7[–÷–P{µ’F£ó�9×O2tV¿?�þ&„(ŒÝþËæëÆ!«Ÿ<ct’/ÿ©Û×�P'Ü1z#ÖJ�.D‘ºo÷››6é‰Ç +vAŸ"ctY— ¶¬rv0ÒðÕTÁH®‰ÉŠÎ?—sœïŒ¿øú¯5àÓ§›ï{»Ý@˜ &ZàÎ Š‘"wÛ/›×ïßüq»½íÀ_$l›¿~¶ÖGkq¯›jŽª9UËë×ñ�Ž�îQ·ÃÍßÝö÷
lQƒQ×]ànß½Ù¾{{NÅ’/PX » +Íš’*ËX>?£"�T±^K2ãiyi~š›Rç8Æåž$‡êq’u¼NUç}ÅÚÕñPäP¨ó±â…¢oÆßUüýD¦”ûòý~.{ª·—¶jC‡ÅŽyŽz7…ó.òàL‰”]”¼1ZuÒ†+¯š¦1;Ð.išµ–b)€t½ Þnk•Hß>#vb4ýD±�ÈX(Q\jÑ5s—ë–5©RŠ®~v0/f!A5y�zP? +žèkn}icu%ÃsžF[hŽLh¼Ëòk4ª…ý‚¾×³;JÝ#ù‰*?» +endstream +endobj +331 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 330 0 R +/Resources 4 0 R +/Annots [ 332 0 R 333 0 R 334 0 R 335 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +332 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 589.271609 107.624750 576.271609 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.3) +>> +endobj +333 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 589.271609 209.781488 576.271609 ] +/BS << +/W 0 +>> +/Dest (name-game_title-packet-3) +>> +endobj +334 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 377.834686 107.624750 364.834686 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.4) +>> +endobj +335 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 377.834686 204.093500 364.834686 ] +/BS << +/W 0 +>> +/Dest (name-rom_name-packet-3) +>> +endobj +336 0 obj +<< +/Filter /FlateDecode +/Length 1985 +>> +stream +xœÝZK‹7¾Ï¯è³!²^U%AX°Ã†�€Á0Á‡�Ãxv×;`çÿCJ¯–¦ß=ãµMvÝîéi©ž_•ª¤U�äߟÿç¬ÎyBÛ�?>¤ �üG\<Ä×oùú| è;´F�”ä¨sÂZé-t_ïÿÂòý +Ô_)” ?ÝøC;ïõñ +` GV*d�Z‘Lwütxùç«?î�÷�2Â$ +ǧÃ_?KÉ—jî6ß]ºKs÷wwü½rP¬¥õž XjÚÞ�绡|1<õ™/¾—¾ÏFó©ó?¾ØVÒ²öñNKžoy,Ѐ³få’hœGr6–0(4hod´Äý›WÇ7¯Ç–`ÙQî”feç'¤Ò€�Ú©�XIž
‰BüÌÜ pbŠö}óÎów,‰}JWø§:Çž.ÇÓ
¹"Hh©‡Y{rA+é‘ìçl7D‰¬ä< +ÇùÅùeóA]³Âç,|1‚N +M$‰‘ÅÁ¼S¾ë
‹—.*^�Þ‡±�ÝçÐL�pèNÚÌPý9k2úTˆœžüûâ·!ip" +[´m5‚ýzß¼£j�ÅØ`$RÊË¡T×dž‘Èáæ´±C’¸h‚fõÆ��ÄCázIPŸÝ]`2½üYv!z.ƒwhöíòù@…y/ “S¥
ƒnÄ@(ÔJcí�äM¨u¢õNh2ì² *ÛZ.G$(œÄXàE!/É×…}ò)n)ÈËɦ$¢8ö$kùNre‰ÛP#êW™çÂûªC„W1øC©Íˆ¼]†˜«zôkU™t)¢Ìw6`#28¯:,p'‘$—bô)Å©QŽDî¹Ä•~«äÔlà¢È¦B¦çªïs5�SL¤gå¨`¿?æm�«šmm4#V"ŒzÌbBÝÛNæ&“À†F|>4-+„&[ƒ2*4&žP)íâ\3gyçGа×D¬ãèÃx;ȹÊÜVæP™CÃ|Ÿ¨Ì¶¸aøa°i²ì¹ÖaJ*V¢Ó�"/i¯Óöȯ¿ßýö';L`ø¡>%ªíW,C¶Œcˇ¡éÅQ‘�dÀsÂê7f(ÃiÛÆ:µí¢ó¼tš,j 5éÜcº«�Õ8uÈV2KY~ˆû˜ÍXÉA«Î)×´cÃöT» �V‚Lqïg;`„Ê-¶›µ™I+¨£¢�Ò¸8òwÙ†Å^Ïq&<‡Ïš“¸zÌk„LwwmÕ +h{hƒ�F3WÊœ1ß[“9k“$ÒÃ�®VrÂÒ–›”À�%P”uÈþQù.W$ñ1ól@Ĥ$~BHö#(KCMÒfieEÍšÝB{áàjÏ�n�6lS?åï·HÊy€Ís…‡w9�1ÕâkÅ«Æpa¥7yu!ßEnOìiŸ7¦ç,§‡äƒ ok•¥ khê� +¯ZI [¡5üñªS/WO9.YÄÊ/O:¢ÓN©d7pgb�—÷4¶Ÿn W�ÜË’œà¸P¼#—o^1=³\mãå Ç’ÌûO5,ç‰Èì.Åù�N5È1¬œ'X>v*Ôb‹uj8�—ôJž›ac�7ú«v¯»6fKç™�kU‘;;Ò;Wäàî2B¢§árÎ~*cs€™tM½v(›&ætGb6Ëf2̶u¯NWò–he?yc÷ê¸æi–÷JþÝ«â™CUºa¹µ{EËÌ�×t¼h︹²0×½n�ó,Ý+ZU™×îUɆù>QŸ¹{EáG ~µî5®â¸3EÎ¥\êj³©»ÚÚ1íé ÐsïëÞÝg¨sûúV¦**U�µsÚÓa’ä„‡
È Übƒ=º�js®ºüÖÕ¤sFðj¥\WMžÖ«ÉKq%q5ÁFûÊ2'ÛX¡±óß�ÄR@¦y»*LÃÉÊ2^½›�ba�õÒ +§c]\Çzäjs›û«NO‚«:.œ"~¯ªóÆõ5‡³åµhhñ½ëñ(&"‹9¾FzN漨ù¼°Î†CíÖѺ9rŠÈÜt˜çÓÄ”½"j±ž¬Ùô×éì©-Zû㓱}UB. 9Z «*aY�E>~.Ð)‡�aB•;ì'ü©!‘Ðè%Éi9B¦+§:}]�KH]N–NY.›p§P FBµ.O�þäÛ“t‚¶×EÜîrÕ®WeéÜ©Â+¦ÜÓõoÿ™ÆÖ) +endstream +endobj +337 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 336 0 R +/Resources 4 0 R +/Annots [ 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +338 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 766.389764 107.624750 753.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.5) +>> +endobj +339 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 766.389764 215.332514 753.389764 ] +/BS << +/W 0 +>> +/Dest (name-attribution-packet-3) +>> +endobj +340 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 401.396531 107.624750 388.396531 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.6) +>> +endobj +341 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 401.396531 199.712152 388.396531 ] +/BS << +/W 0 +>> +/Dest (name-category-packet-3) +>> +endobj +342 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 189.959608 107.624750 176.959608 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.7) +>> +endobj +343 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 189.959608 238.092524 176.959608 ] +/BS << +/W 0 +>> +/Dest (name-emulator_name-packet-3) +>> +endobj +344 0 obj +<< +/Filter /FlateDecode +/Length 1497 +>> +stream +xœíšÝoÜ6Àßï¯ðs�©¢DŠ0h‡ÃpEŠ=\.¹¾$ÚýÿÀ(‰:û¾l_š\³¡gølŸ>HJù³è¬?�|Ecâ€Ýúqñea
“•O©±óPŠÿ”óË‚©ãÐô†åÈ]d2ˆ6!u_ï7‹¿¹§m +±Ô€._?/Þ®ÀØîó?‹�t�;gˆ�Hy,¢¨{P‘;åùùæ�›Ð§ö±S̃bk¢VÜìhøf_ÁD®uS<?Ôg<Û
~¿¸ýa
øüéo†íÞ/Ð&²‰ŒBç<ë¥Ð-o?¾ûãzyÝ�7¾ö°Ü,>ýlkES›ýãÕ_Ýò÷¾7°}w2v�Ä®ÚÝõ‡wË狀“//÷Nî“ÞË +•ÈÔµ¡óT1-<íßìÅ·ñˆ6d`ÁÚ �LˆÁøõ—åÍo;Ñ ä7°0ïÌK?¯²z¸^/Ö{[æí2:Ñ#‹gD˜wòzD"F#.Çè§$Æ{½„u]F9mÄ7A΂¥îˆÄàŒ„Cڋؘ¬ 0ÇÆ1ÛJ踫¡¼6×Û{©“ƒ®ÿ;u¦MýÝIü�{ÕÑêUž™âD»~S¢÷DÆÆä|�¸ ên¯¨×Û1g0¥¼ÂvE”€kÒÈ™¤ˆW”ƒ¤äØD½Xîs6Éפõ©.>·Örм|2ïiä=›¢r<¢ÑHNòLô„éF“È¡M…žbÓXb©9~ß6 Á!Ȭ¤=u«mÒš¢äp”¨Ò.qY!•ÔSV¡5%¯²èÇ‘)00ŽçöT}¡±Na·uã¢Ó¹ž1ûH8Ž˜£Ýÿ@Îó‘sdJ%QÖ§Ç+N‚i�“@bVzõ³1’#Åí³`dF„(aú¿„‘OH2& ’Ãý¨×†ÐmÇNC�ÞóÓ�M}’÷IɱçóìÜ6/µòîÛŸäÛ9ª¾0ç¢p.aŒÏ¹簮¬q“ÐÑsrà\&Dá^p1:7—{�•î*[\U<—�QX²¯ûÅmÏ<çØ>׿ïÅÆ¯…‡ƒ !ô0¾ñu’‡O%§ïŠ8—‡ó.L{v
f3°"½¿oèÉ ¤?ÿl|ÌŽ³¹×% õB}~_ÅWĽ1soLL~Ô£\è{ÛJ�¹cò{Z;ÝýàÚﱕ…Ib8¸áVj~É+%¿øÛ&n©®z©Å•Û¬°ŽÄ<ŽÂÃâ‰Æ_òçòpÊ<œ$–ÄWÉÃÏÄÂÄB‘À +ãr˜cã˜mÿ£=ßÞ-ƒv*Žy›Ä)ÚÔQ2ÑóîFfƸRgKËNãk)y�~]ºÂꎱPIñAãtÔ8¾¶18½×zû»zÃx=jRplÄoÐÒ¤IJ+äûœ¹Í¥({MíJgª“ÿ€Ù¸�,Ûãzän$Ö¨Èjúk6Í)r›ãC¿³6[OÁ'É +¦õi´tg‡;¢%nÎ�"&ã"2»I]¶//«Þ½ÊëÔíŽÌrüëÍ!t +endstream +endobj +345 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 344 0 R +/Resources 4 0 R +/Annots [ 346 0 R 347 0 R 348 0 R 349 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +346 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 585.952840 107.624750 572.952840 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.8) +>> +endobj +347 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 585.952840 252.832514 572.952840 ] +/BS << +/W 0 +>> +/Dest (name-emulator_version-packet-3) +>> +endobj +348 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 360.896531 107.624750 347.896531 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.9) +>> +endobj +349 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 360.896531 234.781977 347.896531 ] +/BS << +/W 0 +>> +/Dest (name-emulator_core-packet-3) +>> +endobj +350 0 obj +<< +/Filter /FlateDecode +/Length 1474 +>> +stream +xœíZß�Û6~Ï_áçSEŠ%`8 n6 @�}ö�¦—¾´ÚýÿÀ¨Ž;‰�ÜîšMà3mKä'’¢>+�ÕïO � !Чnûyõee�°ÕOnqp‘¿ÕãËJ¸ßyrF¬• ]6D6w_VïVÿ¬R‰û +ɰC°ñlÖ¹P-%‹ïkœ¥^Ûê_‘S¹Ç“,´{³ÀøâÙ‚Ò +°K|ùXÿ%v“ÛbÕ“íªþM½·«z°ž?L}~Ò‹ŠÏÕx£êƒ‡Fß®`“iM|Dqª�£hȉ&åõÄ�æ‰ß¡™¤1›\ôm%mÉqÉ\@wÜ“¿ëžÖWÊÎáˆõ3Ï +
ϲƒø½=‚ÿb"‡AMGÇ$#h7DäƒÑ²>+‘Ó€¯ÕÊÃw@äÆééÀhh!òx'½7â�8Éx/½Î8ZêEYèßî…ô%2E¬©ðt‘‚q¢¥Çð±tÑ)#tN)Übº¸´Ï“ÐEâ`|–..�úÄt‘ôU4Ñ7t‘´`é²5ë–)‘FQ0Þ2]$ÖZãûð߬/M¾üAOÓEdœázºÈótñÐÌIºõ,û„¬ïÂè¼¾XNQ�¡‘Þz@^èrù¬û„Î&œú65‚|CôR|¦À�éYé¥êPw>„·N/GÃø?èåBÏ,¢—ßn‡2êŠU9�'ëc)§Ç´¥s*,§œKû< åôHƒñYʹêSN¯oôš}Þ‡ï†r*E2úFæß2Mòé·H«.€[¦œ>ªûðߪ/¢Ñ‰¹À—?(çiÊÔ‹#F{=åôó”óÐL]K±Ç}Ñß/�iÐT�íj RÜ0ØýotË)fúU@| +zñ0�§Oý)?„¦NÚÝ¥!Íö@"8‹e_à6Czår»�dýÛÿ +endstream +endobj +351 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 350 0 R +/Resources 4 0 R +/Annots [ 352 0 R 353 0 R 354 0 R 355 0 R 356 0 R 357 0 R 358 0 R 359 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +352 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 766.389764 113.214594 753.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.10) +>> +endobj +353 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 113.214594 766.389764 257.622553 753.389764 ] +/BS << +/W 0 +>> +/Dest (name-tas_last_modified-packet-3) +>> +endobj +354 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 590.191609 113.214594 577.191609 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.11) +>> +endobj +355 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 113.214594 590.191609 232.942133 577.191609 ] +/BS << +/W 0 +>> +/Dest (name-dump_created-packet-3) +>> +endobj +356 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 413.993455 113.214594 400.993455 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.12) +>> +endobj +357 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 113.214594 413.993455 269.342768 400.993455 ] +/BS << +/W 0 +>> +/Dest (name-dump_last_modified-packet-3) +>> +endobj +358 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 237.795301 113.214594 224.795301 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.13) +>> +endobj +359 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 113.214594 237.795301 230.682611 224.795301 ] +/BS << +/W 0 +>> +/Dest (name-total_frames-packet-3) +>> +endobj +360 0 obj +<< +/Filter /FlateDecode +/Length 1502 +>> +stream +xœÍYÝ‹7÷_±Ï�*šÑŒF‚r�”+¥…@À!¡®ïœ—¤�ôÿ‡Ž¾¼ëÝóîúÌűÑd}ÌO3£™ßê ³úýôO 0!DñÔí¿n¾m¬¶úÉ#N¹û½–oáN|çɱV‚tAØÙHÜ}Ü|Üü»I3$ +�FÏI5ÏÍtñ°FKû_B[ú-�ÄÚNCu�]ýíPçc}>Luwi•ïv¥Žú„Ç�œCÁ%2‰9íy]äÑhæ±ÎÍFþ¤¢úŽO<å4,öÆb›ÃGÄ‘˜ð¹£=1)k[ú ì\MÚ¦Ç;LA:uIà ^=ÓSÒ&Øz
8 +xeãGC�œð‰qqxã+ÏÀFνN1ÞÑñvn¤¯ì©¾Z¼Þºéüà±Ö븞\Nõ;»%�b4V’¾-mÉW'knqæÒPOj~×ÎO¾NúŸ±ˆAاq¤¨v¼ŒÜWŽ\i_:LY½»Š«qb!ljšyQj¶ˆ§¹þ—òþrñz©‰„
ÁE,Ç ¶ëÝ«ØcâõïÿL0À} +endstream +endobj +361 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 360 0 R +/Resources 4 0 R +/Annots [ 362 0 R 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +362 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 634.810994 113.214594 621.810994 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.14) +>> +endobj +363 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 113.214594 634.810994 211.722406 621.810994 ] +/BS << +/W 0 +>> +/Dest (name-rerecords-packet-3) +>> +endobj +364 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 458.612840 113.214594 445.612840 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.15) +>> +endobj +365 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 113.214594 458.612840 221.012445 445.612840 ] +/BS << +/W 0 +>> +/Dest (name-source_link-packet-3) +>> +endobj +366 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 247.175916 113.214594 234.175916 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.16) +>> +endobj +367 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 113.214594 247.175916 232.693109 234.175916 ] +/BS << +/W 0 +>> +/Dest (name-blank_frames-packet-3) +>> +endobj +368 0 obj +<< +/Filter /FlateDecode +/Length 1524 +>> +stream +xœÍYKo7¾ëWì9@™>fH �.Š@�E²låbHúÿ�_ZîS’'ÕbMî’œ7g>®±¹~Aùã-*ï“íO›¯Pì@~iÆà!
’ûë†]ÇÔ‘5ŠØsçÙ)k!X×}{ØÜnþÙÄNµVù4»x}û²y»GÝ—7G!‰3úºF¸<%V®{,,ãñùö�0;#O¦1æf”‡¬å¤3�ðÍXÀàt%“mžó36ÏíºæýW ¿@¡‰¿nÚi×}Øm°ŒgåÙR§�U`‚Ôíž6o?¿ÿófwÓ¡Q&SØ7½ÐÀ¹-é‹ÄãÉŠp޶w»?zÊ=i±#Ñ1“¾ùø~÷ñÔ´A!ãIWÈÆ#–ç�ûiìXØËûPÞ/Š–ÇáNžy�3…÷ãn/ãw=ߨ¦÷˜ùWÞ§uœß§ñB#ñmÖV=*_»/4M?/®�wš'4áÐóMïÊûÓxåSú±rxî}±•aÅUÊ8.¹*ze`y›[Ã[‚òlªæ4´FZwl¬Xµ5Õ{ÙSî0õðX£9~Ñ»‰_ȚŹˆyL*‘¦Æ[åÀ³Ç‘¦/�w+û‡…éĈ‹ñž¬vÆÎÀïûÞÏi^h¬òX´¤+1ÇyëÍÎX|¤ +YPä´1U¾kVð^*£q«Vªä’¯}‰/žÆÌêξ2¶þ±œÞS^[uO¼jp3ò´tJ¶È{"»áfWªr¼úÔlGÈJÊ‹Ÿ¥´+ërÕȵÿš¹ë8TD&,á0éLÁƒÄGe*Å]Ϧ—‰&ljEwF%u½ˆ¶µ•³@^³ ȃEH±üÛ¯»Ûß?w"ÅŸv<ž¿SL,�ñd;õ"£<10×̽D…%Âdâì½>¶ÂÝz%Û�9ÇÝ?”¾PÔ÷ÒŽZb5X]Æ8fBÉ~ žÖp'd?óÿp݃¤K¼D÷s:£ÍyAëœRã8ËÚ}yw,ëtiï‡vzÉÍ{Æç¾~øÐð;fY™'¹¤¶/ŸF“ÒdLЫ•)§´Sk›v?Lw½³¤´ ´‡lìÙÆeà�Œ\T’)å9û°Õ1�§„;Þ�š` ”Ÿá4‘«Ñ>îdý:D¾@V·(k-ˆc™MP蜦±'�ÒÚRfg�ghJå±”¢„Vð[çŲ•�B9x¿hN `ðÚ¯F‡ [ª¾.qö¤k1\Æ"väü%“Öͯ]¼Áõ²Š´ª¡ÔÞ#¿±;äXè1Qu$Ö¢Ö#b‹ÑÓqûj?&é¥bzk¤]¨i•pÅŒQµ�HV¬s¹ÄC¤Ç¾1Žw +Û‰V$ήnpÚÉæ4dëŸQñ•»=‘…w{|w†¥ì‘~Ú<‡¾�UÞɆt—ZS‡-…b͘¦“EÇ1ÐF»EEÀèyy7þOÑÊóVçãÓøœ•W,²€PŸQM4X™"éÇ µšNŸ"ò^1”3¤™–µö’ücƒ6úr¨|éšW�̆¨g~:_"ê+Ch)m*hq˜~1„žBêeðf¥° ’‘‚ýèxî^ƒ�VÎFö0»K¡3rýÒžÇÒ6p‘ËÇ„ +
×ೕ£ƒõÕô?Å„rx¹Ä×è!lºË,ˆé{ÁåEÍËúµà³c‰"g¬µÏ‡Ïwçáó�MM¤ ’Æ…:“j¬:ÃÓøe7µWÃé Y\pÎq^�Ó$¡!0à:œ~†ì×Ãk–0’¯ÃH¬Ÿ¯_Xc
)ñį-C+_[c'ñŸX,ñ•ĵñdåBB³<üp¨pé +endstream +endobj +369 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 368 0 R +/Resources 4 0 R +/Annots [ 370 0 R 371 0 R 372 0 R 373 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +370 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 607.572225 113.214594 594.572225 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.17) +>> +endobj +371 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 113.214594 607.572225 198.382807 594.572225 ] +/BS << +/W 0 +>> +/Dest (name-verified-packet-3) +>> +endobj +372 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 417.754686 113.214594 404.754686 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.18) +>> +endobj +373 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 113.214594 417.754686 223.532709 404.754686 ] +/BS << +/W 0 +>> +/Dest (name-memory_init-packet-3) +>> +endobj +374 0 obj +<< +/Filter /FlateDecode +/Length 1929 +>> +stream +xœåZK‹7¾Ï¯è³!²J¯’ ,ØaCHÀ`ãCÈavvÇ;`çÿCªÔR·¦êÇîØ�ì¸Ýšnµê«ª¯J¥A#éóÐÞ€ð> 3ÍùËáëA +´’þb�«/ñö{:¾Ð6èg´@)ÑcãÑ +cd0¶ùötøxøûÀO`è: +á«!À`U&-¾n¿Cñ½|®¸þÝè?R€æ¿fÜ(Ÿ{{<@&ŒGáÑH °¨…WN9Ý¿^xóÇýñ¾-t;Âñrøóg)!&¤Ò¦³Ôô�ÚöLµ�¿û«9þÞK +Fñ~�‘°Mj‚V~«–µ½N¿šDª!”—Âx£)IÔ4#Ì3B§AI�çº~†’£PÒ<9ûtM厪E¶±UR¤þÉ‹fj(‰BE›¢ˆ·u�¨pçŸM…ÚMx,y%П»Ù+/Œ;=r=ƒ¾¼‡’ƒ§êQÊÁPh�AÑ@íŠ�] )ŸJ +YO“Ѱ˜ŠA(ÃPL
u´½œ˜/�æÆú0niâ¾?¦åzSÓ8@Jµ +k,•ïLa.›ÛEÌ–¾õ�¼ÄBReÔ¯‚¼ï„RÕ¶*¡ë ‘˜\ÚƒµA}5P.@‚ ò:¯HÍ eY�Õ*Q¾ƒ3Éê¾X¹ç7ŒFÁÒ«K•¨wH•nWìÍŒ‚ÔÔq÷Q{~ï½e™Í�TÁbQæÎhîŸR›bÎmæà3_£I@jž%(spfŒ–b®Ò—øªað|ÌžÐÎ,ð4ÿLù—ÔÜ�—d\]ÇYé±½—ây=–Étk�Š%\Œ¯DùÿÐ £Ö°2®N+û=”~Xè{^é³ …ƒ5ìÝb;îëaݱï¼&Š*Z®–Ù×Åsþ1©äÿe"æR¬rÑPÆ˜éøÆ÷8–+š +Ôk²Æ¤F~B#•ã ¯[°"¨U›BÖ!™}�W Ѽ¢–»½|#)msúŠvFº¦�åu,HqvÅf–ªhM¹J…ÝLxkÍh"ŽîÄóñš¹@ •0~†vè`R4ä_B`øeî*Ï/Un? ³�ü’VSYŽ-R�'…_UÏeºŽÏ3Y�çjÈa2c\Ïœµ2·jÊ\rU�ºˆp*‹M!L~Œö{L~ç¶ê}©_ä…œòwE#Ê€jsíYæâšÍÁ¼ŒÝ�Ô¬ª3QNØ}å�mo +³y¥ñ_=ò/K)~�Îç[3�£Q¡Ö³»äT÷+;§Zøè4ÑE@×`F€¢˜9ÙZA ËÈÐðüå�F{õÃ|/ïlÞ+a`bsÞÑué7J¨pgx—O·¹C^o*âçó¦Î¸ëë,½›Ý6²u]%§PÐÄh¤]T)mBËûûòž”¼çƒ¡3\~Ñùl7ÂáíĈB9.A§q0ͺ½%y�aÚ;£Ò.@Þºq™v?‹uqhë„S,ãÉ{p´Ë}7íÞœ.B®
¢ZÄ¢Ó®§¨¿/üaG¬ÿ/ ¸Œ` +endstream +endobj +375 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 374 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +376 0 obj +<< +/Filter /FlateDecode +/Length 2053 +>> +stream +xœÝZÉŠG½÷WÔYàTF.™ $#clÚè`|èééÖE2HþpD.UÕµwÍXOSS[./öˆÌ‚Fóï'àÁ� +!ºæüõðí yÍ©ÅÍMzý‘�oò
aƒÎ*Òš5�¼rNGç›ï—çÃßéA±m +ºÑ°sRm¥€S(Ù@Ãá~ùùøé×?¡Bþ¨G2ɱ oÎ)O`B*� |Ш—Õ +Ùê´ôš§ç:AX¶Y +‰ŽÛaöÙ¡"ÎŽ†›çò`ƒ†íÝ‘ÑÊÄwÔZO±®j=¢í`‹•™¬¾ª •¾Eó“•�:ëL}J{±ÈÖO}
î¹ b#�õëJÛÚè‚JDPÞ£¿ÈF1µ4ÜéǺ–Us¶&*ÇCàˆ”mœ)ž¤È6y¬¡Ò1·Ù#ûŒÜº5íL]¢’&(`eVDh}¿nê†ë0*ìbGÃÝe¸l *ãÀíãë`8Ïç°|·óp8rà‡’~9Ã�7££"ð.¶3.™·ë›µXÇPýÖMÞ°†xÇN–=§Í©‚„G´x””ÊXÏ:æü—©æ8‘uØbî&/9z÷ýb~ÿ +½=¯*ƒF½,ŠZ`ñVµVÂŽðÌæ’…•@QÛõë©”¸Ôà +Ã%ŸAVÏ\ŽˆIÅdqq|“V¸{mÅX%…3—
m%\s»”Ì\sòc œåùÓÜó²™(¤ªžÿG:«9íß"ÃYÙÙÂãXäõ”Û¥~¾<»æ³ðï´·§±³[IráRäóy¼lØ£ÖI¨Ø"ÏÑŒeV*3cõ®ï.?³—î¹±UBˆY“s:¾€Ðå`‹×˜D6 ”ãüL”ÄZoÑšI”qÊXÖ⟃2 â»WÚ§ ”—¬Óö±ÜW�T£2³CÂ]8|ï–ê㉸2»0¥�b[Ñpj +zS^6‰Òî@¹Cïx*®¢öJX<æšÞ!íç!×›ò¢Itþt{xg‚B¿[¸ÝNÛEgTØ”qM¢›ÈA&Ñí´aÙ3Öû2$Ê—ÐÉÆ‚ð·ÍCB/cÚŠ�½ŒÙ—!Ñt7‹p¯þ¯Ü®ì¨ÛA Ô%ǵµ–Y˜=Få·e=sÖÎè×d&×÷fúVÑþŒkJ…[ÖtÜsi‘!÷g]s™ý@~R § +øÒ«†/i©Šeé¿m?¡ý +�ŠmÈ;ÙÚ¨UsŸ+Ik‹~ˆ7”¾é¼PY{AØŸíÍUÿ7z•ȳ©ö¨ìþlrª"™B|î¢Ò³“V~W¦ù¾Œ‚S´-£¼wèN÷¾,-yáÎõ–+Uæüœ¹t¾®·Rý±üêuZ>OLœ[)·:*
ètl|T.8K·<tåôàã›b RnSaYýÞìÚíW˜øàd1}j/.íˆbÝI+Û\u#õÄ77ã�E’�½*gÚNûU’°ì]Ô-—²ËÖnÇ”�3Yç‚zöw‘�M‰”ÁȪ?�C$ìëœõ�òÝ‚©[D§‚«ìFy¼‡eGƒ‰ÍvOÝFšÙNí•wïy.e‘YÅÒnžŸ:õJr¸¥?ýþo’6§ +endstream +endobj +377 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 376 0 R +/Resources 4 0 R +/Annots [ 378 0 R 379 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +378 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 631.434686 113.214594 618.434686 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.19) +>> +endobj +379 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 113.214594 631.434686 245.681879 618.434686 ] +/BS << +/W 0 +>> +/Dest (name-game_identifier-packet-3) +>> +endobj +380 0 obj +<< +/Filter /FlateDecode +/Length 1660 +>> +stream +xœÝZK�Û6¾ûWè gøHŠ-ŠÀEEŽw�KR éÿ:$G&%Yï#McCkR"9Ãyéû¤…Nó÷'à?Á‚ +!’·ÝñóîËN+rš?yÄ “/¿ããËŽ\G¾óÖ(Òšu�œ²VG뺯÷»÷»¿wiÅó +LútÓF;ïÍ~}ÀR�¬ß� +F£»ýçÝË?^ÿ~»¿íÀ(SVØŸv¾Ò�Z[ÖÚ²BøHí£åœ»ù«ÛÿV%€®"Ð+:f·o_ïß¾¹ âÀKY^J—%µáßrΗ¶>Éyé§q¹}_ƸPæ÷ã&ÕdÎêd‰LùHçGÛkèœBCÑùE^Y+dIŒE<3·l¬S݈=ˆ²ê¦m”6UCå¾)›*F»AýJÖ¡öú
D>ï’ÁN²ž-†é
q»—Ddø!€kLÄEë�/~8ÿŠ_€}fÆG|Qq.¯=“ý‘&`1€‰%À“o,ŠŸRß÷þâCÚi¢™5âHž¨ÐGˆá‚1…S5÷6,�ì!;ëÚ=,Bʤ‰vX<F.V#õÊ^x¶kòöXBóR¦ÐÌ!uªáåuN +çv\ÊË\$'ánÖnl>ËÅì$ÕÀ7Õ ·çóÒr�4ÉxË.™_zh˜¹ÍåëX�׎»dLC7>¹mqo£eN]d¬–y®/ªZÂ@j ÜÉ8WÂÆ‰CºÅº^ƒ²Ž®z;Ñe^>œèâ¤H_ØkNf( �<®_kH�3ÁÙ')¾–k¹añÆ~—Å·5Æã +0Ú�6j}ךބ8(2Én^Š%Mø²kJ]ÀÈ«v(×_¾32nTÖ• +°|Èœe0ÊÅžá/ñ'�)B
¡ +‡*ÜUáº~�ª,¶wø1ÂqËžk”³Ú¾—1¦šVn™¿ü¼ÿëì0åÓ‡z¿i¸þ`�s£Š
QÅèMAqKˆC7Àõç¥mŒäÖ¤‡{iß• +ÜçÒ˜n�ÒÎZÚ#25Êó¤3è7¾7ù7ß»õŠì–½oÝs®…26�Áj‡ç<Hà[ÒS{�éP Öù$zó/MëÌ“ NË„oc¼í‡#Î9VРΡ˜UÄÙ÷O@™8÷öðMp*uáæéÀr!qÎÒÃQ潯G–Ž’7.ŽTúŽ�%±bÞZBZ°
hPºé&kú' +f#ʧjf®TkJŠŠÀ\ŽâÁrëXí:`=æ}žAŠÔf¤^Ñ9PÚaH®�\ž]œš�wyšF|î/Ò€cGÆ<6 +¯ŒÈ™Føuª>3#r ÙaúÉQÎâ-㨠+Oó±î—,ÃuaSýŽ1ò4Ïo�•#fá0&|Sxæ$ñRª£À5]ß‚%쟯œ(™EÏéctd|ãŽ�‹ÊkhøÂnàbÃ
P -ö¼ áolB”—Ndjè÷¯½û××þÒ¤),^Ü’GN\¬v«[ê_n™†žèúœ¦g™ç·³é×]©NúÇ¢ôúT“¾¬G +½þ%UbÙÍÂ4°át½ä¿œ¿Rã¼òèÉú>W¼ÜËæt‹È1º°D¸ªËùéᡆWöÃ4êßýìáid +endstream +endobj +381 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 380 0 R +/Resources 4 0 R +/Annots [ 382 0 R 383 0 R 384 0 R 385 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +382 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 693.912225 113.214594 680.912225 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.20) +>> +endobj +383 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 113.214594 693.912225 232.701899 680.912225 ] +/BS << +/W 0 +>> +/Dest (name-movie_license-packet-3) +>> +endobj +384 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 482.475301 113.214594 469.475301 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.21) +>> +endobj +385 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 113.214594 482.475301 211.962641 469.475301 ] +/BS << +/W 0 +>> +/Dest (name-movie_file-packet-3) +>> +endobj +386 0 obj +<< +/Filter /FlateDecode +/Length 2316 +>> +stream +xœÍ[[‹Ü6~Ÿ_áç@•#éHG‚°�””ÒB °!¥3³3yI +Iÿ?ôèfËw�g“t¯mY—sùÎÍÖÊø÷ÉJáœ'‹ÍùËáëàŸØ£w¿çãë�LC¶±¨�£Æ‘ˆàÑ4ß.‡�‡aù¶ƒ”J #½u±‡lÂï·O‡—G) ùôïáÊS‡ÉIº2†Wù—2Íç¼äçÞópÿñ/¶BOš£÷˜ªÇ $.G= +_ ôF•i"¡Õýçt/«ûz\ÕþÃH¿ ¤?Íø¢óæñ X GÒ6Î�°h‰¨yürxùáõŸoß6R�fx¼þzÜ“Y�M:ƒ~ø»yü£›Yj%¤²VÁ`ê0‹æŠÙÑ6ŒLgÃgä6äk<ƒã‘ñ:<W—¯ÒssÎcBLí¡
¯|c�Êãüƒö¯R»aJòÃsÃÏ�P¬�V2šq‚âÂßÛÇ(êiJ‰Â€µ¤o“!V²œ•§Á`$¯ËDyy0�Ú<ÈÀ¯fþ�ï•Íí2µµÏók>‚L-Ó¬ƒZæ4”•6³�Qf‚ší•„´Ê(¯!Jèí»×�ïÞŒ%TñiXà'=ŸáÇÌòô?A©+¬æ)Ì€ÔÄ�6i†xͨ32¯(<UÏ|FãµC¦9vcðØï7D§|š•! +öˆË(2lgêOB7�ÒB²„”ZTI}œNfñ™>ƒQ¬•Ø»¥s[ç2“¦ßNò”5±RÉÛÅòÈɸÜ.S<�s¼· Ó�A3‰„6Êh¹•Ïè+ ÂeÂ2öpÈ;#š•¥Í¼Ÿg\PAŽvlhý²R(¹æäÚ H Ày‹nÙ+ÌE W¬yÂo�m�܉ñ²[ÛP‘w5VMÑ0‹·‚u¨�²½Ú¨8©`üHÚ*ÅIÕ"Gëàì©‚Sr³%Œ'·û £;öé^áœKŽN[›õez‹î±r;»ð° +GEl.’…aN_ÌEµü‡5c”(Éüˆ€¯‡ªD0Z R7¼@¬yŒmç.Îò•·{Æ,¿Á`•“E’ÍøbüZƒã@»8v‹›nqY-~©-öƃâÿÀ€Á:®ÉÉV©€øí×Ç�¿`… ›((€‘Û�Xȯõ¡™öqfØ‘ÊÊ⺜cAk´3³ÃÛÒ¶c®ï|û<…Š=›¡2´F¡»¤s0BÅåŸzJk¤SÀŽïæê¾|¯ù™â°²Ë¶¯êú¦þ2Iuÿ/ehµ°E†s²¯RTÈ:/)+•ïC—ÜŽ¹íšÚcHsÕ²¼ç Ûá<Ð)/ÕzA¿ãB¼“‚EÁZÚ §YTèÌ=s)ω³Ð/Ž3¹íšÎ�cûÏJÁÍK!hiQäÒ«ZÉ¿\S¾·Åÿ<„WoY2á\¤%W®Ÿ*ì`Æ]ÁÏS¾§|D-pä£wÝ€ðUŽÜ:G@‰:�Ñ]¸Œz(ÖóÔ†·`ÎlAâ*µ~Lm´W]QlÓ½¤t�ÚÚãPW§¬›S‡þ%¹kö}LÄs éøÌœdÛЕ*í�Cy]àJ¡Ô³ ét'W”õá’çi榟[i=R„g^ã˜l,¶Ÿ“DB?™í¬³Ç© (w£Ö-{
‰?Çsh«…ñ»\s5á9渊ª9õ‘ —ÜN™“šûáÜš"An7Zk&¼Ép©üßeÅ×yÉIþ³ æN±U�£ÖÎNËÜñ_!7åÏ“Üùe›ÔêsâüGÙ*zS¾½ÊÑL$ý>åuUg7Jç5tÖ±ËþŽº¬®D5üXYKDsý¿)¿_•È„}ý‰Ü2~“„Ð ’Ïb6þS0cò|y�èåäÉX%ü¦ÊkU2™ÄP2·øe䨛ª¡UÊÎ÷gn=ýæìºÍwŠêtÝúæRƒÝU:�ýmÿyKeZl aAB¹Ôþ*©–ÐÓ3KH÷ÑUíûïÌð�û«¨šãË´šLu±¯ÌUäðÚé=¼ÖWǪ¥v5u¬¨žŠÁÚÌùGÄ_£µpû+ªš›‰ø{ê*Îw#Š#쯤Nt£»ë¶‚”¹Õy†½³Ú_Ñœ7R‡wPHVèýÕÉÓF +ÕzfõqY§°õ +Ú_ÉÔœNeÆßƒÓóNN¥~Us]Ñ©Jˆ± �‰í§œ½d®KL�ñ~!Dzì1åþŠ¥¦ö^�9ÃY÷Î)),p„$ôþŠ£æhªâ˜“ÿ¢�Ï}îŒnÖÊðAp²Â›.(äëÑ»Š‚qÝeê.ÄéúëÅ©Ê"1gõ˜Û®£/§w|ÂÕFàPN£�a{>áÞ·ùØ9¡¥FÄ]›�ËÚñ¦[}ø¨Ù_b¸ ËR|0imb4ìzÁ’ËÇ/(T6¥îÛ<÷lRr‚ª…]w^‚ +endstream +endobj +387 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 386 0 R +/Resources 4 0 R +/Annots [ 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R 394 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +388 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 766.389764 113.214594 753.389764 ] +/BS << +/W 0 +>> +/Dest (section-3.3.1.22) +>> +endobj +389 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 113.214594 766.389764 251.991693 753.389764 ] +/BS << +/W 0 +>> +/Dest (name-port_controller-packet-3) +>> +endobj +390 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 84.365473 234.154070 127.204096 220.534686 ] +/BS << +/W 0 +>> +/Dest (controller_inputs) +>> +endobj +391 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 209.034686 99.094965 196.034686 ] +/BS << +/W 0 +>> +/Dest (section-3.3.2) +>> +endobj +392 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 209.034686 269.712641 196.034686 ] +/BS << +/W 0 +>> +/Dest (name-nes-specific-key-payload-form) +>> +endobj +393 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 186.034686 107.624750 173.034686 ] +/BS << +/W 0 +>> +/Dest (section-3.3.2.1) +>> +endobj +394 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 186.034686 244.091791 173.034686 ] +/BS << +/W 0 +>> +/Dest (name-nes_latch_filter-packet-3) +>> +endobj +395 0 obj +<< +/Filter /FlateDecode +/Length 1535 +>> +stream +xœÕYYk$7~Ÿ_ÑÏѪTR•Á°B³ø!äÁžõì‹ØÍÿ‡”®>§{º}LœÚVKußÈÐhùþòÇ[PÞ&ÛwßwZ±ÓòI+éõg¹¾ïØ5L
YT¬5{n<;eÖ5?îw7»¿wq‡v€1ÊA ŸV@¿?¾íÞß‚ÒÍ·vG!‰3øºG¸<&V®y(,ïãóÍ;avFžLcðš{¯µò:k9$|708SÉ$A{ÏùzÏý}½ù‹+Ð}µŒŸf:èïû¸ßA
ÏʳÕ@�A«4¨Ù?îÞùðÇõþºT˜)ì�»?ÖEb{Ð:Æ‘õW5ûß;j ;rb;¢W&wýéÃþÓÇ)9s2VÈE²$×�ÐEíÉÈøXæEwçÒ|šKÏ ÷Ûò>ïÑ.î e<³ì=ä}é½ÎÏ‘g¤÷:ÊkÓœ)<8ÏCÚ—Õ½Þ—ØŽß΀Á6¬$hØQLe]¶}Î -k—³M«˜ß,fŸ¦)è}ËTB\ÇT÷˜®MØÔ¸F�¹Šý
ÊYMÞ³ Èk:Å̯¿ìo~ûÒˆ?\cFÃùifž'!Û±GTžX3GöKœX"GN®ùù®Ö+í�-žãêïó$^�䌑X5ºH$ÏZr#Õ÷výW2JhS_L× Á]çtñ«‘7÷å½)Ïqɱì¿-sÇ<ŸÖÄûס}žs±È�>��ðƒû¿c–�yR/êýy•Ú%�B#.Vj(e«½»á½–³ÎQÒ�l1Ó†,R݇쌘X6”²¢XÇ÷e>þß]±.ý"í+1üTìï¯L\“ +ú81Ñ�’ø$NH3‘½³( + {ÏKéãfõÉ�c")j+EŽÜDÔ¬—ìv3-«´ºö](-ïXZelY·ÝžØûëR›Ó]»…¯³6´ä¥¡ˆNáE°€Ê`Y¿Œ¨S$›óBX€;:•FvÝ�N4ÜVì×ëH¯Êyè‡Æ�>`IÐ'ðéÓ«ö‰tÍI¢w®qÚ)ã½7¾†`¢h‹5Îq<Ì"£'T8CÒþYû +6<¾l….è� +ÞÐK´%ˆ†Aª&W“^BGkœ×èø¿€g<Ï^š9�PHò? š�~iž‚fC§ šRCU╜�Â[¡˜–ZaÐÊÈ)÷(æÈ*ö€6A1‘ +ù7C/ãApÅS–¡hoz±´M²#ÈÜl¹ÞÍ÷wù«–[v�©ð¢*å;�Š©�ÊTC´†)е†;i~‰AºÕX¬%€‰î +R4Gï�A¦„„²Þ¢äÅJM«„-84E»,�ë´¯ +×îyê<vÌÏÂÐ5¢¾2% ‰iDwJ&þ³E +ð²Q´SöJQLÅãåMöçMêÖ%û§£µ©}U"ÃJª·Õî¬JpõÏ;u:í™a,õî6ŠÿEÎ,Ý"h֧刉R� ;džº€Kãz0ÙóDóÑF9Б"CLp^žú3!ß¹¦þ +endstream +endobj +396 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 395 0 R +/Resources 4 0 R +/Annots [ 397 0 R 398 0 R 399 0 R 400 0 R 401 0 R 402 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +397 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 634.810994 107.624750 621.810994 ] +/BS << +/W 0 +>> +/Dest (section-3.3.2.2) +>> +endobj +398 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 634.810994 244.531244 621.810994 ] +/BS << +/W 0 +>> +/Dest (name-nes_clock_filter-packet-3) +>> +endobj +399 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 444.993455 107.624750 431.993455 ] +/BS << +/W 0 +>> +/Dest (section-3.3.2.3) +>> +endobj +400 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 444.993455 225.692621 431.993455 ] +/BS << +/W 0 +>> +/Dest (name-nes_overread-packet-3) +>> +endobj +401 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 255.175916 107.624750 242.175916 ] +/BS << +/W 0 +>> +/Dest (section-3.3.2.4) +>> +endobj +402 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 255.175916 270.480951 242.175916 ] +/BS << +/W 0 +>> +/Dest (name-nes_game_genie_code-packet-3) +>> +endobj +403 0 obj +<< +/Filter /FlateDecode +/Length 1724 +>> +stream +xœÍZ[«Û8~ϯðsaU�¤™‘ Úå,Ë. +)}(û�“sÒ—v¡Ýÿ;ºÙ²;ιµ >¶ei.ŸF3Ÿ•�–ïo ¼å}`rÝáÛæûF+F-ŸÔct“�ãû†±cêÈYÅZ³çÎ3*çtpØý¸ß|Úü»‰#8ô +gðuŒhù–Ta÷µ¨ü:zï?½eìÉ2F�¹y¬•×ÙË“‹‘…¯¦4UL2´¹ÿšï¡¹oÇ5í/î@þj6~ºÓ‹vÌ»Ýj°xVž�ê¬5Ê�µÁt»o›×ßþ}³»éÀ*›%쎛Ïo´ô”NÏÚnÿév
’Aä�!2z":J±2ÊÊ(ãóµ¶ùŒrvÒæäÚ´—Ñé:>7÷[£ßäçx(cb—Ûc›;Ê9Žqrp¶6¼Éí(¡£?>GyŽ4±Ú’L‚¹pÆêêãÍ.Á}Gc�Ò6` E
K9z4ÅNâ$þ Hldq7ïßîÞ¿;#n_œÒ äø¾€ ̾Ý�Tç6}[úÞrÒds;Ü•~¸õlãâ±¥xm9O€™ö.µ§>IÈa&<À¼Ä¥qd–/Nµ9–��ÀBPà×f°cÎ>Gƒ»ÍN&pB¹.í¨Š+ÚF$·Ï·f"²CâèC¿|@‚ëXIæa¤˜e•üˆs¾¦ïrÊÖ* O.Nó¸÷½RÉ[€ƒRÝ(]gš¨© jz1ÉnË9]‚ A¡Óä�(мv SüñûîÓŸ;±€â‡khXwÄÌ“P>NBoPkòÄš¹Ï3Y"Ãúƒ�Wrìì%�þ¾\»œ .%]¬‘6�#ƒÔwA#IVtÚñ1hE°ÆÇ%ßRê¸+‰KÖ¶1ƒ¿/up•w%˜Ž¹=Ù|_lÔå,÷Ì'y¢žWêeCÌUáA¥>Ây¾ä™q!Ä6Vq®ä;“‹`tÖÖëûÒ'èŸm9W˜2Û². OËy\‘ˆ`§N·åüBÞ)b²€‹Eä)}Z*,Hg¬µ +äÌZÊXh‹ÓšHÖP6Yd +°Bú">¯Ð¬ñqηÈ5Rż/ÏkÕ™Þ¥ñûÒVi“)ç»§£v‘²Åê4GÓž‹¢�¼KN„‡Q4¼LÑÆ*æèŒ5%1†�®Ä#MXœ¾–’i¯ØR�ÄujÁ%#ËŠ‰,ñÕ”L|Hïã—|¸š‚I´–ƒ�y#ó~! +Æ•Ø�Ž—÷£nGˆZoçë¼—‘Fê¶YžSiFuÊd +ÔÇLiúí• +Œ¶Tgá—`ö¬ñS³–ˆ¦Å-¤ˆŽ³?%›Êy§q¥§Õž$šâ]!˜ˆƒ÷•È¥°˜¸äq.•.õKœe§¾£ÉjÆ÷dqâjTÌlíÉÎÆCØR¨}Ǽ–NÐBç•‹›¥ö×Ak!t-(K’¨§¨-¦ý²ËïgOHGQP�ZˆzšÄKGI¸DÄa=];æYè(!
Ê/ÒÑ5¦>3%ÉäeÂàEè('Î[mVí >Uc”@,ŠWï ††’Ù†ŽÚut”�d +W!}Á—|‹ô/\hè!ÓÏ—ÜEüYtÔSP²J�ìÃèèì�„«˜Ý]Ûç ŠsÛû6_úšv*»pe§í:šJRÚ„49<cÙMõA+�ä \¿søHß®ßAt¨¼–rd'fÿ,úú¸:+)1ûLgáÚ:{²v’ŠY½1…9y¿Æ�Ø#�·�µ¼ÅJª¡ê¢.¬è8`*Ì陟/ý\^û%üÓVÛ)¾‹.‘a©¼Þi¼èR%^íþ§B§ßCŒo¤õŒWšÿï‚Y +šõy;âB©„°þw€.$Ó`C—±Àá£+í°B_ÈKéºhO
ý™�¦¦¾];EŒÊxÇl.ÚÒ'½ý^iö'Qÿákug¬ +endstream +endobj +404 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 403 0 R +/Resources 4 0 R +/Annots [ 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +405 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 603.072225 99.094965 590.072225 ] +/BS << +/W 0 +>> +/Dest (section-3.3.3) +>> +endobj +406 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 603.072225 275.572748 590.072225 ] +/BS << +/W 0 +>> +/Dest (name-snes-specific-key-payload-for) +>> +endobj +407 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 580.072225 107.624750 567.072225 ] +/BS << +/W 0 +>> +/Dest (section-3.3.3.1) +>> +endobj +408 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 580.072225 250.391352 567.072225 ] +/BS << +/W 0 +>> +/Dest (name-snes_clock_filter-packet-3) +>> +endobj +409 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 390.254686 107.624750 377.254686 ] +/BS << +/W 0 +>> +/Dest (section-3.3.3.2) +>> +endobj +410 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 390.254686 231.552729 377.254686 ] +/BS << +/W 0 +>> +/Dest (name-snes_overread-packet-3) +>> +endobj +411 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 200.437147 107.624750 187.437147 ] +/BS << +/W 0 +>> +/Dest (section-3.3.3.3) +>> +endobj +412 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 200.437147 276.341059 187.437147 ] +/BS << +/W 0 +>> +/Dest (name-snes_game_genie_code-packet-3) +>> +endobj +413 0 obj +<< +/Filter /FlateDecode +/Length 1698 +>> +stream +xœíZK�Û6¾ûWè gø$ÅEà"‡¢¯w�KR éÿ:C-Y¶%9»ë¶@íh%Q$çÁá|ßÈ�Îò÷à?ɃI)SôÝîËêëÊ +–?¥ÇÑMyü��¯+ +Å.zgÈZJÔ% +Æ{›}è¾=®>®þ\Éʇ + [ɪ6Ü|–UúNHŒhÐ7×ÞÄÆlM„%6NÙVR'0ô5I!ööÞê ÅRû Á´¯íEçGÕÑê™ï‰NòD;?�7¹È»�óR¾Ž7Íò'f†>gÙaÇ"JþŽ’·5KòD5Ô¯ƒ$KG5™ +(â}}.TÀ]´]ßCþå$,HVÆ©¬rk'ý\®÷‚^vvžÓÓY—Ý&0Ì…Ä<!:“ ã˜xã, P’Æ-zǃҚÖw<¾!|ã«ì”Ã6zTÐ÷ƒùmèçôCQû‡�žCÙ±R¯¢CÉWç +ã¹ðD%ÉÊõÂö´riýÆÕ<\.ʬÔç,'=K…Y.fæ—ê6UÄ:•|ï×ÑjnÄP—ÎiEQò¾×ÍW‘Y‘çÐwþY* +¦Œ&dDðÿ¥Šâ;’!?ãâÀûm´¯›ñà;‘Y6r[±É’ÆGe›<ÀòÒfé˜)q¸í…Ï–:KT}á’dz66ñ‚áMKžÀ—l¬OéVå@àåàÕ�nUòäÄé›kob#ÓI®PØøÉ³ŒÝ‘³œ®çËëØ]ZÎîŽE´·ŸÂ^hJ²¤žÁH‰ã»y¼’ñjrî 8+u) ' OHÓHv¥ÞW³/$y‰m«ôO±¯§á&:2èØ|{ø©¸I1‡ž�},9!Én?‡›KǼnÙ^x�›è¯Sõ…q“2WüÌ£ðy^6ì\Ü—–ál²Ù@—½ZŒ´ì¸¯–àVBN%”8!,ÅfP,(8µïñKp¢Çf·U»×BQ1ã0—áyâíb[ò/#o·Ä——|( Vüõ¨ +Â$Î/á>�ámè…Ä{—¬Õlt¸ž Á®Z輎
Ú¶¯ç—`I—˜P¤>|3:aIʼn+<N#òš'dã“wtüƲ*ª¯eË[™¨¯Kõ—[¿ëËyýuÕÛ¿®Îý4ÞúÄ–ñg^ëMš‘†\fMŠJK‘Hªª’
Q]Ô•7
ÐÎáJuäÿ[Ó�˜rÍ=d…Û[Ìö#¶Õ—ØÞ�nU/_)Tû‘z±.0ˆb$æ$³ú4²t�$õK£4oíQ0ȤˆpV—ÞöáUÖáþHfùþ
ÖOeû +endstream +endobj +414 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 413 0 R +/Resources 4 0 R +/Annots [ 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R 424 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +415 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 599.572225 107.624750 586.572225 ] +/BS << +/W 0 +>> +/Dest (section-3.3.3.4) +>> +endobj +416 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 599.572225 311.320795 586.572225 ] +/BS << +/W 0 +>> +/Dest (name-snes_latch_train-packet-reser) +>> +endobj +417 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 558.452840 99.094965 545.452840 ] +/BS << +/W 0 +>> +/Dest (section-3.3.4) +>> +endobj +418 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 558.452840 288.502924 545.452840 ] +/BS << +/W 0 +>> +/Dest (name-genesis-specific-key-payload-) +>> +endobj +419 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 535.452840 107.624750 522.452840 ] +/BS << +/W 0 +>> +/Dest (section-3.3.4.1) +>> +endobj +420 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 535.452840 294.570307 522.452840 ] +/BS << +/W 0 +>> +/Dest (name-genesis_game_genie_code-packe) +>> +endobj +421 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 327.515916 99.094965 314.515916 ] +/BS << +/W 0 +>> +/Dest (section-3.3.5) +>> +endobj +422 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 327.515916 309.402582 314.515916 ] +/BS << +/W 0 +>> +/Dest (name-input-frame-timing-key-payloa) +>> +endobj +423 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 304.515916 107.624750 291.515916 ] +/BS << +/W 0 +>> +/Dest (section-3.3.5.1) +>> +endobj +424 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 304.515916 218.202875 291.515916 ] +/BS << +/W 0 +>> +/Dest (name-input_chunk-packet-3) +>> +endobj +425 0 obj +<< +/Filter /FlateDecode +/Length 2170 +>> +stream +xœí[[‹·~Ÿ_ÑÏ�£H¥RI³�BÃ?„<Ì®wóbpòÿ!¥[·Z}ÓÌŽí$';´GÝ#•¾ºªTj«Aòç?Šÿq¨„sÞ�NORX#ù/ö˜ÝÄŸßðõñdÍ`i ÔÂJi�œ5Qz4ÃïO§·§ÿ�ÂëÇJ£<¹ØC
áóûo§¯ÏJÈá·?NÏL:·Ê•1<ˇ8•Þç)ßÏ~÷o¿âÉð$³Ÿmõ³N&.�¯Z€Þ@!�V÷ïÓ½ªîëqÕóÏÎÀô‘Béð7,õ¸oïOªŒ³ÂY”Š%� +-Á¼Š)àCå�z2s|ºù*Ó±õïwÊ¿J&TÌ>ޱǰ’%¬�ÁâS€“}�kÐy²ÙâCZ%é Ÿ +Nª¼¿¨¶¤:?¯Ô8z¿*^ÝZ âJñX? +7�JK +I¨É©nè0qqx^�7Ÿg‘Ï¢äy˜Yárž 7NYDjåÜÜvbßmLf[M€¼oVœj=r5ÝÔqÞ°1WÙÙó|/‡s€ZˆŸD@D£+xZânBà…Â0¬ÑÈöÒܰ
mM¼»TZ9p-É�í`ÊÞL�÷ZÌ�®SÐ)HÑe–ÿî*>àåPµè�à]s(dÌ%w½jy'-<Zà�~C²Oµaq3Ñ7¹jsEµ&ìú¤ãÝÙb×]Xƒ‘'™/¥ +N²æÉÁAI‡RJ2~»üm6òs…Z ÷D¶™b/—ˆÌæoÈë¼ÎQIo®ómò-Q�!Çár9óÎ>%EÁÓöwAW`¿8GÇQ'ì Të0GiboÙò�ʼn\N¨·E{¥õnS^–=-Ð~}·Äk‘›¨oWW»e‰·�÷Òo'·×–xçä/)ñvòù’o/ïÇuˆ"¬È²ªMí˜`ÐÚƒ:ˆ�¼wÜNÖ²¨Ê_G%¶±Î$—>Ù–Ô6Kx¥L\›ù¸'Y«Í¦E¿a÷Erä‚&0½R<P^"
pÜn²¿mõÆÃL¥ÐÛý2`’’v®ÔŸÛÚ̦*rYq„9Só"ðë"¸/R�+0²n)ŒµÚêüáHeœÃ‘¶ñå€kµqXã\‰máyàÒ°÷Ò—Niý¿¸xN¯½a*³Ýî¿.ò“¸Ì¥þÅ\:a´‰Æ7µ†DèôbGqÍÞîã©Ú (/˜$‘HYælØ9;ä¤ôrÍ5cö_ÈaŽl\З�å[:€Êä §ÉÍ4¹¬&¿êh{ËFó.K¿Á(©„á•ÑÁÀ)iHޤM›áïþ{ÿöûŸYaœdRØÉƒQýW,x]Ðg;û¹ªí«ö¹j?TíwUû©j?ÏçÖËy“ñÈ[œ¶¤è,»Ù¾ë’¾=4>M{G*V4„JIÅe¹‡ ¬'x—W£ÄBÚÁíøj]ÕW†~¬_ÎseÊd.ÀhLG#áùHVhl]´[,GüSO׎”Øá ‹‹ýk;I*†›z<j-N„«GöF‘àHÛa¡·S—]»üi)8ÙíÐzkïñÈOæ÷ž*»Ôµ}ïÌŒ(´ë�U7åÙ‚°ÔÃóVÅÖ(ƒ§tš +endstream +endobj +426 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 425 0 R +/Resources 4 0 R +/Annots [ 427 0 R 428 0 R 429 0 R 430 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +427 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 422.940668 708.912225 465.779291 695.292840 ] +/BS << +/W 0 +>> +/Dest (controller_inputs) +>> +endobj +428 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 566.957147 107.624750 553.957147 ] +/BS << +/W 0 +>> +/Dest (section-3.3.5.2) +>> +endobj +429 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 566.957147 228.492670 553.957147 ] +/BS << +/W 0 +>> +/Dest (name-input_moment-packet-3) +>> +endobj +430 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 422.940668 172.362684 465.779291 158.743299 ] +/BS << +/W 0 +>> +/Dest (controller_inputs) +>> +endobj +431 0 obj +<< +/Filter /FlateDecode +/Length 2110 +>> +stream +xœíZK«#·ÞûWx¸Šªô( Â�ä2!$œ0‹�…���ÍÌ…Iþ?¤J·Ü¹Ûž“ÉâΡ§ånIõ©Þªì5ÿýø¿`A…ÉÛýñãîÓN+ršÿ¥W?Òë_øú´#·'¿÷Ö(Òší9eŽÖíÿ<íÞïþ·“/ +î’
òRÀsÏ0†ðVɇ‰Û?Kµ(p(åÝ*@¿pð¥ªEI`/YI
hÎÙa"ùÉrÞÌÍ[Iù+»YËÁ䬗¸xüœu1D«PKMs\ªìÀ+s
ñÅ$hàÓnÐ=Ôœ X¶•¼�‰ƒ”1Q¥0¤kÉúž1ý2·VRX'^ã¤1}‡0·q7§†ø6¨L¶ŠaÜUˆû’kœŸ:+ù.ËŽ±£õà»é®†û/qk7ûPÓM;6íCÓ~iÚǦýÚ´O7hž'^j`‹5Š-ÙÜj´01uO�]íoݾ�¥ÃDZ'r@ˆ·¸*ï9€ƒD�ý�<gW¦�Í\ž'NŠÎó�ôáª�céZ˜;Ísæ¹…qQå|u¸Ä› +W828ZcQs¾A|È*ÞǨÈÑPYW€mWo}†p´k¤~Ñ;¹$ŸJ2«sÚ3¯ÊìÂÁ¬õUŸuͼ÷tzÍš7û“Óâ4FRæ×Ü/Íåʳs¾�üJ]ZäŒb�l<’L΃L&%ž–¤•�[5;Q,T©Pö5 +R^1”Ív4ž=
§k4~–z˜¡n3¯h�‹<Þ¤M˜le:ñÓ°j¿J3æPÅT§¢T.iŸ2º„´Õ°ŽµX¶StwKë°Œ,¡x-H‘å1Ñ·¾ƒ–·ÐÖÜ-Ý—´’E�õðZ¬Çgéꘟ¥}ðqèm¹´”ÇGü�ؾ HúU%^Š +}ä`:�CŒær4æ˜iêòÉ]aï¡à²å™ßˆC¶ÿ=y¸�§ªþ‚Ê·Ç�ò™·""— +endstream +endobj +432 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 431 0 R +/Resources 4 0 R +/Annots [ 433 0 R 434 0 R 435 0 R 436 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +433 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 729.150994 107.624750 716.150994 ] +/BS << +/W 0 +>> +/Dest (section-3.3.5.3) +>> +endobj +434 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 729.150994 208.953119 716.150994 ] +/BS << +/W 0 +>> +/Dest (name-transition-packet-3) +>> +endobj +435 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 214.518992 107.624750 201.518992 ] +/BS << +/W 0 +>> +/Dest (section-3.3.5.4) +>> +endobj +436 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 214.518992 248.942621 201.518992 ] +/BS << +/W 0 +>> +/Dest (name-lag_frame_chunk-packet-3) +>> +endobj +437 0 obj +<< +/Filter /FlateDecode +/Length 2286 +>> +stream +xœåÙŠ$7ò½¾¢ž
–¥PH!�ið˜Y–]0´™‡eª{ºæeÆ`ïÿÃFè¨T*Ϫ>|u“�™Ê”â¾Ùæ¨ù÷[ÃB$�Çǯ‡_Z‘Óü“ÞÝ¤Çøøõ@îHþèÑ*Òš9…¨#ºãoO‡�‡_2ƒâåc +:S9¹aøM�`tP—Iˆ6÷_ò½iîÛyÍø›�µ2V~ŽÓ‹vλûƒ©ÊHBm<+
cBh}8Þ=|÷óÿ~ÿþh¬²y…ûóá?ßk~“Óœc>k{÷ßãý¿†•�eÀ{ÐÝÒ² +0)î�¦Ý¹;yŒi׎WBy|ÈÙËÊüþÓèï˳Ç<fÌÉã2†ç<OÖA*óâ�•µÓz¬ö¢ù ŽÀõÆÖ¡ç�¶3WúÞß'VÏó0( +´gAõ$¿Š"cˆÊ»hör¸={Æ—`4ˆ?âÑRGÉù#Gå1‡±œT\óîz¢•¤<ÄäL.¦YI …�€btj¦†Ûþ¢‹Õëº
*†EïØ¥`2Y,A£ÑIÿøñþã?f”—º˜¢Y?’›îÇhf,ÌŒÅîþÔ\?4×�Íõ§‰$Y«‚'Mt‰¯X¯È/ŽŽ—Ûw½B‡{í,e¹FExjîùNÙ;Iø]Æ|âËÇœÕq=c•Òö~=,kélââÉææ„§*<(Æ£¨×ŸVQ+oöÈâþK¶›øûTæ@¹—W +Ïõi��Œ§wt^³•ÝÖA~°/ÁÓ<5kž34
ŽN€F©vÈsM{Þ’â—àD}êùYå�åzÎOà®+‡Âø<-‹¸²ÀÅo�AÔèm¡äƒÂØ¢ŠÙU[W2îâÎ幌§³¼c:h@Q4Ôg äl–€ý3DV§Õ+㛲ŠÛðÕ9Y*‰ò;Ø–zT“®¾TÓÉ..ǨÖì›:£M×ú:&¥`�‹ÇZ@¦ze.U›)"MäJRÁµ ñæMŠAÏ!ÁX4èbpR¬YÎá´h(ö$¼NŽk´â¬Vª¨�»©XC’Jʱ†ï¥êêbÍ٨ȢeO²—’íbͧd€LXßúeÏ%îšRæ¶ö‚ãª-7¯pý6‘ø…Ä«ZXA7ÅÒÅÇäù½ODÍèYvX=z7Q,ig³—Ú‹Ošól¬ÄŠ}´£Ð/·”÷K””ÜEŽI^`�½¾5&Ë-bwž7òkd >÷¬zØêu—<¶«6à2óëîÑl1�3Üt1(kÑí—õØ—Ád�Ä¢²Âi¼FÞknÃ$‰c°—4¸¾RyfÆŽÛ.B^6[R676—L̈Ö9”-Ÿn©ÛŠã’?BäHº³Uc[UZRåÐ/w“‰§ÞÈÞ›&Ë›Ød™ À@v/Ïž-qˆ²q)Óöóµ÷/U´àu/éÙDlÎDm°¬+iÓi·®l˜(šx5]7˜(ŠÊ¾ï[IÌ9¯"#x³Ä<8Å€½ë±Þ-±ÖQ SL„£mºS
`KE¹F�=_x(c&µyz£�=ïè5ô ®³-~-Ä´CÿLŒsÅSJ悵�]¯¦�úç`ÍÏ•çÐ%ÂÞ‡õM5"“¥œ%óL£(“õñ +K �9£�òËÃ…=T“›šâ<)‡A*«¨ÊºU=÷²éÉm·‘^¶~GRÆó›¡Gáµ’�¬ÎÅ�6CéšdXæ[àjËG$Zo#¤Lò¹š{nžk„ϳ†-µˆõC–GRš3C�þ‘Ÿ�ójn�äO¬ìv/“³^âbWö5[e7l‘¡ò.˜èú]¢Ê™Ã¨j^í±Å(öBšF–ȆM¥iÇhïœWéq쀤èàסúÊ�$d,) +_l£iWc%>¿G[f±Š3XµÐσ]xæ²�~êjT4NÎ+ñÐ9â"ó©bS.ycÁ®òµBÙâW0$£‚Ý%å[ãÕÖùëK‰¸à%<�9W¿¤y›^7k¨òœGZÚ¾ùZ}C6›„Й�p^+„ÔÈÝDB÷ÕD–\*¦kúE�j>ŠæbÑpá~ÓGÑb�[_ŒAÔ/!ëÓxŸI_¹¿ëyiã¥û?…²² ÀN^™@×»ÿ[x^ÝÕO»‘§¹…ß««ÿÌJ™+C\cꞣ×VÊkO –àÊÇ,Fd‡é¢Â€¶Ô{U�Ð줻8ÚI/ΰvÖÏmwýõ§ôI+ýпÅÜÊ5ö}À)WIJß>뀬[$ù¢dU-¾g�˜iêÙ]‰Žü‘9 +endstream +endobj +438 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 437 0 R +/Resources 4 0 R +/Annots [ 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +439 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 588.932225 107.624750 575.932225 ] +/BS << +/W 0 +>> +/Dest (section-3.3.5.5) +>> +endobj +440 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 588.932225 212.093744 575.932225 ] +/BS << +/W 0 +>> +/Dest (name-movie_transition-3) +>> +endobj +441 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 219.438992 99.094965 206.438992 ] +/BS << +/W 0 +>> +/Dest (section-3.3.6) +>> +endobj +442 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 219.438992 265.692377 206.438992 ] +/BS << +/W 0 +>> +/Dest (name-extraneous-key-payload-format) +>> +endobj +443 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 196.438992 107.624750 183.438992 ] +/BS << +/W 0 +>> +/Dest (section-3.3.6.1) +>> +endobj +444 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 196.438992 198.312494 183.438992 ] +/BS << +/W 0 +>> +/Dest (name-comment-packet-3) +>> +endobj +445 0 obj +<< +/Filter /FlateDecode +/Length 1663 +>> +stream +xœÝZK�Û6¾ûWè 3$ÅE(à ‡ ¯³Î%)�ôÿ¾DJ²d)»¶µÁÕƒâ<93ßÈ«:Éß_ÿq „sž,t§¯»o;)%⃋8ý�o;ÂŽlgÁ’’uŽP +9ÖWƒÕzQ!Ôõ™S6jA ï…rÆI½¬Ä¹ +Ç,ô}V€•ß(sŸž�×<xH`#ÀÃ^ËW™µó{åù>žøüœé…5#cÜrð…o5ˆ‡Î*¼« mˆ`˜6G +ñ-Ï.§)B"6ãädš#œë™rL(¬LeÃt�h̦lüñÉ(r–c¥
%•@�Öifæ…u”Œ{à·_ï×±6|¨ì©¶c'[¯²5F8K’(°]â@¼3œÚ>è´ÀœàíG`®qwùœ÷¤>¦�ŠƒoiŸb#JÉóŠG,FqÝw«…†bòŸ®»—ª5º¯Õ9¦šO< Ïëj‡[²9G0oÉç2ËdVY.™ŽD“<RŽ�*1ÆXŽFÎ[~1#«,jôùˆ39_q!ïCYÄ„òú}ÎóᜩèSÌ©9çó ½
Wg…I3›�GÜù9A=g¯)÷…údÐ KÖ(\.(?(ÿRAA{A2&&¬æ=áG¢%=x5Ör§Tâ.•²Pâbi:×2…Ǻ&”Åö9Ä\ï!×õO³6ÃX<.ƒ”‚LÖ3÷ªˆö9Ï×|dL¤X‚eaV¤(í²2Ù@@U¹p
j��"^t
ï+B㼋4‹j(씽 +^71%�IÇŒrÞ¸µZ çL»
k¡“VÎ6VjÉG—Î'[c“ëvê-O™vÞ²…Ÿ¼Ï03Ïõó…Þ9¡«¨OÐ!žÎ&rå"£\¶ªC(AÓÌÔ!|ÿtÄb +Úo½½‰Ûœî3º+Ès„PÕ)çëŒTCP¬Aç +^Šd–K]¶‚<H@0F—A¶|ž7.àXÇùzÙM!Æ#î+˜2˜(�<W0๫lÐàÖÂoßcÚF…Ö�Ò”µÉåWyacÒ8·ÁÕŒ½ÒÔ“Nå<Ý@ˆx�îøÞzÁmŒ›
p'Ògì9’o=SPºk8]°$Ú +S£w�Õ³äá™H£¼xVe7Ôð(<.u8‘Né L§Þö
ó>wOçrÈ•0ìeÏôÐ4á7硹Po=p
–S’·ìŽ+=‰ãžD-¿ÆYÛ“pWVztÿ÷ž„á›UŽñÒ¸¢<¶'±´{é‰Ö÷$k×ܤ'±¡')̯ö$kD½qOÂ
87‘Ê8ºIO²µ7!6šã4�WßK?%îÞ‚ÃÉHÁ1Dúê{ûÒ«°aÒCÅäçL®ò1ÜË88 ’ˆ»3Fïñ¹^×»÷.Ú—>Kr/cå>™íLýe"Îsïaàòš-½Î–^&è0ÓÏLz›h´¹|Ë])Ã}Üœ¢àÀÐðU{M·´G?}uÍÐhWîí!‚�¸¸¼6¼³lS¸OpLëÊ¢JV‡¶Å�Ä«*ÙŠKúÎeEª‰ÆUÊ7Šþ'‚Hhë%ÉËr÷)c"éd{Jå<ÊÿØ�r´Âj.*êº<¥Å™imªkäàç�õ.âbÅ�&ÇîUYúÆõX·Wl™‡~ˆßóÂU— +endstream +endobj +446 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 445 0 R +/Resources 4 0 R +/Annots [ 447 0 R 448 0 R 449 0 R 450 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +447 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 599.572225 107.624750 586.572225 ] +/BS << +/W 0 +>> +/Dest (section-3.3.6.2) +>> +endobj +448 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 599.572225 225.551996 586.572225 ] +/BS << +/W 0 +>> +/Dest (name-experimental-packet-3) +>> +endobj +449 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 374.515916 107.624750 361.515916 ] +/BS << +/W 0 +>> +/Dest (section-3.3.6.3) +>> +endobj +450 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.624750 374.515916 213.012934 361.515916 ] +/BS << +/W 0 +>> +/Dest (name-unspecified-packet-3) +>> +endobj +451 0 obj +<< +/Filter /FlateDecode +/Length 1644 +>> +stream +xœÅZ[«7~÷¯ØçB�F£„ œ——<”>ø8u^’BÒÿÝv%ízí=±ãcïM£onŸF³�AòçWàœáœ·Fǯ»o;),Iþ‹O4'ñöüý¶³4X3�ÂJi�œ%¡µôš†ïÿì>îþÝ…Ö� +´) +J� +¥ÛÅÜŠvB;¥ÌF(t(Æ£As"o‚¢ï +¯ÊÂ*²ôx^ñ\„J6B™óÊÁ +ø`iÊaW²+Ìi¸d\E·zeëÊnÒª2ZyvL‰ãd”"7ÜŽò³›¢�«ô,”«f:obö'HãZÔåè\ØœÛËs½¡F%k¥îe¸—‰yÃqqÞvù’~Ð$}Ó—ëqœ©l0gug²¾Åðc`ôö«V‡‘Ót‘Þ1V +LJ£c^
âXQ•©À,TL³„08ÛÉëD}Âψ°¨ëÓ½è’óÎL¦ÎÆÙ|lhkA;\ÐŽ¸2ˆ¡Ú®Qp×ixÞá̧’·‹~røF3¬ð*ÇÛPEÞ5£r±z�[ŠÅ*–·(ˆÀVîDF +åÊ¥¬ŠK¬Ò2-±=VÙ/3ÿo`÷�‰
ß÷«“u¼�Bmüº•ªÉϳ8Z/:뜷*\�(Ù‰îµ*^¬¸¯“¯³RŸºžM€4. X³†�†%ºÕêÍÄÏ1NStžÝ£¬yL‰jøÔV8‹î³h5p=eذ껹ÄB3ß!o¤æñÊNyª&Ã`ÕtºÇQtaTÓ”.£°”8…]Gž9/©í)×’¨ +·‹Ršvð(Å%G¯Žlº·£þ¥Ð;”ò`EBÓt%t+̪„¦W:¢_`ñ•ä›
礂�TA—©¢½DÍ¿&FSk\±z*@Ú"?º0Ëš¶Z Þ>€ +Ì9*X þ +±Eaº=\ÛàÞ²¢A* +ï]C%msû&3^ ¡¶‡}‹_CamûúV(¶Ð_Ûµ¾ ‚+¨³mPßÄßh·íIßdö
”ݶ¡obñmtÞÙ+pʸ×ÑIßdªt»¶¯ý…i™NnÕ’o[?£UÔh™BÍ“ + +endstream +endobj +452 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 451 0 R +/Resources 4 0 R +/Annots [ 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +453 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 749.789764 89.132367 731.069764 ] +/BS << +/W 0 +>> +/Dest (section-4) +>> +endobj +454 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.132367 749.789764 273.269086 731.069764 ] +/BS << +/W 0 +>> +/Dest (name-controller-input-formats-3) +>> +endobj +455 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 607.653455 95.498285 592.053455 ] +/BS << +/W 0 +>> +/Dest (section-4.1) +>> +endobj +456 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 95.498285 607.653455 283.922602 592.053455 ] +/BS << +/W 0 +>> +/Dest (name-nes-famicom-controller-types-2) +>> +endobj +457 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 584.553455 99.094965 571.553455 ] +/BS << +/W 0 +>> +/Dest (section-4.1.1) +>> +endobj +458 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 584.553455 224.203608 571.553455 ] +/BS << +/W 0 +>> +/Dest (name-nes-standard-controller-3) +>> +endobj +459 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 388.859608 99.094965 375.859608 ] +/BS << +/W 0 +>> +/Dest (section-4.1.2) +>> +endobj +460 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 388.859608 176.604975 375.859608 ] +/BS << +/W 0 +>> +/Dest (name-nes-four-score-3) +>> +endobj +461 0 obj +<< +/Filter /FlateDecode +/Length 1558 +>> +stream +xœÍZI�Û6¾ûWè —·�@0@Ì¥p‘CÑÃdç’Húÿ�>R¢LÊ–,:ÖÄöxÆ’¸|o_8¦ÓòþÍÈ/Fy˜ {þ¶û¾ÓŠQË+�¨.Òã?åó}ÇØ1uN±Öì¹óŒ +@ÀîÇç݇ݿ»8ƒÃ8Àkš@>�0]|ÿø²{ýd”î¾ü·;ÈÒqq6>Ï‘]¾¥°û:lùµz¯?¼’Í.àéרsñX+¯{*O¾T_M´y™´¸þÚ_›âºœWÜqê·VÆÅWwú¥œûn¿3Yi<+Ï
uF{eѧ»ý·ÝëÇ÷o÷ïßuÆ)ׯ°?ìþ~£µ%‚gQÐk§µ òùôðO·ÿ}÷¸ÿ³P,)0ÖèÐÅo +m +ÜŠ5¬¬%l„â6€"Þ-9â6(O·‡âŒQ)¡làWœ
ʰm„²�_qà•,4ýr¿âˆ”!§}#”
üŠó œµ–¡làW@Kü÷âþñ—û°Zh²�P6ð+$©Œµ¡1màWH\œóšm#”
ü +‹‹CÂä+ÂE‚äòùŠÞRc8ÜÀ¯°¸8¡î _aqqFðÜA¾âÅÅ9‡bC¿Ü¯xöŠÌä+’Ö*/£¡1màW‚XвF(§~å +òX‘Õàpui(–‹V>¦Ç‚Ø_Ãaøøþ^ÄèdŒü$K˜mO‡v=î³0ª²ð;:êÇä±@™‹(ªŠðV(â<€aî%U!xñ¹»°kUóÝDÞ<Ìê×Xܽ*ón²{–y¸Ìñº²» Ç›¡>Î (ê9H
'´&Yà_oÿxÜ?žZ ³GNÆ@¶@ÛºR1 %ÕeÞªU5–f¸nbLè¿71Ú
cñHzrŒtŒçúÐOã¸g~^#*bïåÀ»HEUȽ°U
¸JzU©¶fF]QšQ>³3ŠJ mkÆùE3i3Þ)>ŽYSðîd»9Ó™ +°XzÖ +ÁJF·š‡3H�AÅÁk‘^—5M¶É4<8{·2D$ÅáDÍ®–!MÌH:NAÂÏOÉ�$³%òABØMe8k¬¨I vâ&cg½œ q½±N ^-è)ë +c]˅ùH2]$íGÃx²ì¶Æë‚¢Xýø»•)JfÞ‚�›Étš¯�ó’ãJ5½Z³Í4
-, +Hì–Ùë +$IY_ã +ÜÇëÙ¸m,˦FÔe²d"‘ΤŒ- +Á=[R&ïOý™c×–�›ÔëÀ<õ,Ò +‚eYDSêS?õ|ÏArz©j¬ž,=Ç…ª{3X[îääî*ŸéD3Íy$K â0fXîÖ¥Ä~È#SâpLîíL~™{&yN®ḑڶÎõ!N$^å8\�AîºîÆB ¹òÀjMû±>pʳÜóò¬úlhœuEã±>Ú)WjiÖ§2ã*+€õ!Êȵ†&^}ö1®ÐЈ«�,FômÍ4/ëyëE�®S·“<¥À·î#‘}¡ùQŸCŒ¤~\žU”,γŠÃ‰s§÷úÿœ;$H^Ûˆvc�¨)iy}HmGnòÆÒ7’uÖf—Ù•î§ìED�Öƒ~sárÝÑrd¾§AZy\rmÉåžžÉ,’Dµö ñ"Iƒ£+”¤êÁ•rþ‹�pâ¿2+KA³>�Ã>é±5ƒÏýž:7KÓÀ�=tôÆ«q8)iH�Tõñä¨Î‹ð(=´‘ZE�ºf{‹Ëª§£z¥f®öLïÿö”é˜ +endstream +endobj +462 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 461 0 R +/Resources 4 0 R +/Annots [ 463 0 R 464 0 R 465 0 R 466 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +463 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 444.502068 95.498285 428.902068 ] +/BS << +/W 0 +>> +/Dest (section-4.2) +>> +endobj +464 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 95.498285 444.502068 231.770502 428.902068 ] +/BS << +/W 0 +>> +/Dest (name-snes-controller-types-3) +>> +endobj +465 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 421.402068 99.094965 408.402068 ] +/BS << +/W 0 +>> +/Dest (section-4.2.1) +>> +endobj +466 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 421.402068 230.063715 408.402068 ] +/BS << +/W 0 +>> +/Dest (name-snes-standard-controller-3) +>> +endobj +467 0 obj +<< +/Filter /FlateDecode +/Length 1200 +>> +stream +xœÍYKoÛ8¾ëWè\`Ù!9Ãh�\v�xÑÃbvÚô’,ÐîÿvøŠHG¶É¦ªkE‘Dq†ç=¶œ��ß$ÿs(…sޜ¯KÀŸ8£yˆ¯ÿäóëdi¶f6¨…°ÎÎÎ’@�4û<}œþ�…õϤTJ�ôÆÅrÇ·/ÓÛ½0ùoz`Ö�¹•®Ðð*Oq)šó’�Íûðüñ
/vOâѼ¶ÕkÒ._Ü4ßô¤ +›´z~Lϲz®éªñŸ¾�ö +m +öƒP6ˆ+VIA†,Q72Ul�m$IJœ½î‡µ•„œ4P+�¿”„œF¡€¨Ö }~-Œb©PoŸ&/~�Ö^eÕôY‘ +/P4íPEÓµtQ4ÍÅIŠE3Š7ï
'È”ÿz÷ÇÝînE"!òËëªë +%X4çˆuà¢ÙÔ4S)—ù�>]2EtG7)\JHÔ+ÏíL;¡C=ßQÑæ²àCÀ�°©<N:ãËv©òœBÆñluÉ“qo¼/4ù½+îv1Wû|k²—œÒÅ×ä-§í¢³Ó»d^m—ÖEÑ4S]MÏÓEÑ´&=mÑEÑú]M=Þኜc…ËÕê÷©Océ,ÈKÜþ}á°°GZ| ž*Ùÿ9´ÅwY¡xúWroêé˜?LæBé,>ZVIñ%�™%×Ä«¯Râ}š‡’ƒ2ÊC+›Qžòs]¦ežy·ûÌO%ìñ²¤ +?—Ɔ÷rA’M;ð3$ù£v6*Ñ×jð¢$›n¦'L´MGEÓtQ4%|¤ÐgC‘±†ïó—Èሎ±pPa2öÖð1ù[ò7™5-J K"&EG¥e™”ªc +Ç<Ï-Æö€KÚ7KÊ/´dª¹Ù"O{^Ôm/]© +\Le^ÏanÅE\Úͪ‰ÛÅÄ#ýšYV
ŠeñK‹x¾È;©Îã’¥RggÃãþañŸùO‹ +Áë¢Ð,6¦wF->ÝŠñezvK12‚ãêîâ–ŠéÊÜ!Õ!%Ü<·S®4'üòià²,¬ãPû*¿–\é³(ëJŒ*6ƒ84¶eŽéò2žâ?~]…µ…'U‘åTä¸*V±h�ר/æ¿ösÍšñøIº“U +endstream +endobj +468 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 467 0 R +/Resources 4 0 R +/Annots [ 469 0 R 470 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +469 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 691.792840 99.094965 678.792840 ] +/BS << +/W 0 +>> +/Dest (section-4.2.2) +>> +endobj +470 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 691.792840 160.734858 678.792840 ] +/BS << +/W 0 +>> +/Dest (name-snes-mouse-3) +>> +endobj +471 0 obj +<< +/Filter /FlateDecode +/Length 1255 +>> +stream +xœÍYKo7¾ï¯Øs€2CrfH��ð¥P‘Cу¤Ä¹Ø’þ C.i‘»Òj×öÆ– k_~óúfÆÒ=Èû7-<jå}pŒýñ¡ûÑ�ròJO4'éöŸòùÑ9ê÷ŒV9 +=®„b_ +2� ~u^A�*°¿Ê¼B`•”QÃ+¡lÀ+d´ÆE©?¯Í+dC,…lVBÙ€Wˆœ¢<¬„²¯�ôŽ|ðøê¼BÒí5¯„²¯°e,“±‹¡WÜÛÀrÈJx×û·Ë{Pb,G+Ãy–@Vd0Ø•P6`á Yº;Ôz%”)?†¶¨H0þúøÇíî¶×±ÇJ�†‘Wgº‹�b�µq‚\ƒTýVd\mu¶aVˆ¹
¤sÒpŽwùã‡kñYïGØ|�G;›à”Óäµ=³óg¥9ÅÂSàÍÇkž¨í¬¬‘²Ê,›·¢ÏYÀò ¹Tœd,Ç4/·ÒkXƒžÍsÖ�C‘,̆cÄ�Â1bÞŸp$¼ùzôùSÈš‚5¯IzbŸªy²IÔØÅ~ºˆØÈ LHˆvÖç¤uaâ?«Äy(ܰtųapÓÌ’%›gW4#_‚ÿu~E;™QNƒÂ3š�*¡tC1°v�RÒúÁ¹³Òš™hNZ¼žÂ{?„ƬÔf¼™•šƒ
ÃÍ›IeVóÌÂ)ä$W;´µÁy`xZhâeÌGšØò��ƒF±pê}aR̹œ½žÁÌœ¸Ê2køX—¬ã¼Ú±(ñí• +)ä÷£R}Ì)ó-_?d“ŵ‡òܦZ1B’íO|¢óZuw)í¢jå^ ¨siT5þ •3A >Í€ã"[péLñߎ�Ô]‹èæ{‰I/H×{ÁVô¶½`¶Áþd“˜}¥€5vIkF¨mì=²ôSÔ3Öó€J�Úp¥&½�ÞÑ[’Î,/Þ;.�v¯ôŽí¤º¤wlÊqïX�K¾Ç׆Ÿî.�“‚³¢˜“¤ºy´®ÕÞ<ZÔÝPÈêÇx0ÅÏ!çzácÿ’âžrìbU�§½ŒŒ=ùOœ3äÍtzŸU‰ež•–�®ªTÚ[ʘ~Ê¿çÊ7„tNàà<³¯Z²c¦Ñ�MYdÊæáSŠ,ÆaI‚̰c}OIõpÞ…'×”²±ÖEÒÅ�Ι«Xûùý)¼‰‡fÏôþ�^È +endstream +endobj +472 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 471 0 R +/Resources 4 0 R +/Annots [ 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +473 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 753.389764 95.498285 737.789764 ] +/BS << +/W 0 +>> +/Dest (section-4.3) +>> +endobj +474 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 95.498285 753.389764 223.286859 737.789764 ] +/BS << +/W 0 +>> +/Dest (name-n64-controller-types-3) +>> +endobj +475 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 730.289764 99.094965 717.289764 ] +/BS << +/W 0 +>> +/Dest (section-4.3.1) +>> +endobj +476 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 730.289764 222.993647 717.289764 ] +/BS << +/W 0 +>> +/Dest (name-n64-standard-controller-3) +>> +endobj +477 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 267.543914 99.094965 254.543914 ] +/BS << +/W 0 +>> +/Dest (section-4.3.2) +>> +endobj +478 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 267.543914 290.313471 254.543914 ] +/BS << +/W 0 +>> +/Dest (name-n64-standard-controller-with-ru) +>> +endobj +479 0 obj +<< +/Filter /FlateDecode +/Length 1237 +>> +stream +xœÕYKk9¾÷¯ès J•T¥,†|Ù…ÀÂ,9,{�í\ì@²ÿ¶¤–<Ò<zZc÷nÖCÜÓUõúT_Œ#Èç=Ê/O¨¼ÎÒ¸{¾ ƒü¤'š“tûwù÷}p<:;Z2Ê8ïFïXA <_†oC\áÂˈZ+Æ`}zÇøùñuø°Eã׿‡G1�;ôe�¼å9½ŠÇ§üʧæ~<ÿòN^vÏd£¹íªÛ <L^}i¾;X3 huþ4�cu^¯«®ÿë´PhâÏxü¥^ûi3`)ï”whG¯4ë``Ü<n?Ü|þ4¢Qf²°yþü@KÑ€= +‘b‡ÚwBá Xœ²�Ph("ÑXò}PÌÛCÑì”é�N(Û HŸ+ÜÐ %¬ +¦N(+ðŠÑAy"§;¡¬À+†¼ãìÎ+ÆZ…ր¯OÊhm'”x…,(K`5/†Â¶âX«ûàé§‚e�Œ—6xîì¬XØz¯‚`:khvàx¯±Ê +,ì4+M΄N(+°°“ÑW‹]'”XØYT,Hxy“¯ÅÂÎå4Ó evA¾Š–ÄN(+ðŠdº“Â]NwkñŠZ¦;´Ü e^ 2Ý��o}¯\Cn+«�¤PJFc'"r�¹à™pœ4Ûȿ䉛¶.c&+”=2â›Ö7g-^—°Kõ0^°Úˆ±Y«�ò]pRXày£«f=Ϲ%ÁJwg,Wz +‘ÍNEG§g=%$M3<�Çû”C¯Ågã1�Û>Õ�°›OA+â"r¼P`ÖJI;Jùä3×IÛÖØÏ[oåS‰äqê_ñ†F%ü6Ý‚öj…L½º§�Z
ÒXéhŸV>4žôµ!+�${òu퇕ŽÓb]ASÐJ+¤’ßæD—WîrË<äëw9dqí].yÛ¶Z B²í÷|‚y-ì©í¢kå^)¨SmTP6KI] +órÕä|§l÷¸þ|=ò#W¥[øª¬)>ãý^Q%ŸN”>–}¥jE¿‰Âu
5ÚKµ;Í“o«»Ëü9·¢•Ç þý…�нf¶lÅçkgËV?¾ÕlÙJÁ·š-[U÷†³¥—ùÁ8¡–+¹~f¶\(ÿþ/³e+!—Ì–Ò{ÍlYiÏ%ÇÃkÓŸ�ÏiBAI)�(6Š<׎7ú%Uî†Cf“Ø»ºTrÈðkŠ
7SšRÄy¥Êíãôz›«¬<—R“R|,Ág]²ZÈ <_t©T„©Šûp·/ÿkTŽÜ 'þډвœÆ¡·U•îr„ʺ:8‡ÇîwœÅ8[©M+ÄwOÙ9ÃéîSSº²7E"Õ´—)]_ÄòBqÛ}y¥YiÛ¼3}þ·1ãy +endstream +endobj +480 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 479 0 R +/Resources 4 0 R +/Annots [ 481 0 R 482 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +481 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 424.740838 99.094965 411.740838 ] +/BS << +/W 0 +>> +/Dest (section-4.3.3) +>> +endobj +482 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 424.740838 325.192133 411.740838 ] +/BS << +/W 0 +>> +/Dest (name-n64-standard-controller-with-co) +>> +endobj +483 0 obj +<< +/Filter /FlateDecode +/Length 1223 +>> +stream +xœÕYK‹9¾÷¯ès`•*©J Ìe^rXö`{ƹÌ,$ùÿ�’Z²[¶§Ûr¦w²nzÜ=¾ªR}ªÏƒ=ÈñÊO¨¼ÎR¿{î¾v ƒ|R‹ê&½þSί�ãÞÙÞ’QÀy×{ÇŠqÿí±ûÜýÛÅ. jƒõ©öñøö¥{¿Aý—ïÝ^†Žƒ;ô¥�Ìòœ¦âþ)OùT½�÷ŸßÉd3x†1ª×nô”‡Áʳ‹ +á»S€�u&Ý?
÷8º÷=ÿÏ
¨Phâ§?¿÷ý¸î°,ï”wh{¯4ë` _?wïï?}XúØ£Qfa½ïþ¾Ð²ˆhÀ‚ +‘b‡Ú7Bá Xœ²�Ph("ÑXòmPÌëCÑì”É�ë¡°Íp6rÂ2°¤•bm�u¿,²N8M�I¾Y +ÎnLòX˜ÙÇÆh¡,ÀÂì¬ÒAl„² +t™r7LO�ùù6»,öÝæ…›-l‡ëâ„4vtk�œûÒIîÅvM+ïÊ‚ÚM;Чß1¤è¼Í�öeš+Ð-Üý24Ö*rÝó’Ó6ŠyÃãý…,ÑJ]ådèÌeŠ;ñOña¹æ£½1³RvcfGÎ>ÞçóÀ<ŸÄì;²Õ +ÃÝqžäßP÷5&ÇðñÄ"A0fÒ‹¦<„…Ñ{?ò9ÖÉþÍѦd{~¹‘G˶pUéSìŇcÑ“lº°ìùtÉ�múUM0·%Óc^+ÛišxkÉ]6Ωµ2NðfzT¶„ˆGKsn{¨ugBéòöPY Ð_-§FkÙk89jÃÆXºIËÛ6J+Õ�þ·-Mzó•Ê/6v¥ánà”1WÇ&ÞÎ{AlC-üUxÛÖð+®¿Äçcs*õ˜¸{f�Õ"/í,ä·W}µn[¢®¬åXk]Y+¨[ëÊZüÜZWÖºå'êJ¯ƒ2Nvaÿêu嵂æÿ]W`e?]ÍÕ•#Ùò}úlø—çKÊÎ@�BÃ’è*Š<Wë^}€ëVrpbt¡ø�;®=Š"×¥àì@eë9ïy›ÝQÚ¥@$î;Õ“&Y-”ž€gM*TiFQ8�uùÅ£|s#œøßS'rÊpp‡ÞŒè{—×lÈ®'/g÷Øc)v5ÃRj+”5�§””ár�¡)9Ú"'¼î¥LÒ³X{ÿ渼’�ØVs¦ãÑ"¢ +endstream +endobj +484 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 483 0 R +/Resources 4 0 R +/Annots [ 485 0 R 486 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +485 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 577.315301 99.094965 564.315301 ] +/BS << +/W 0 +>> +/Dest (section-4.3.4) +>> +endobj +486 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 577.315301 316.433100 564.315301 ] +/BS << +/W 0 +>> +/Dest (name-n64-standard-controller-with-tr) +>> +endobj +487 0 obj +<< +/Filter /FlateDecode +/Length 1182 +>> +stream +xœÍYKkG¾Ï¯˜³!íªêª~€Ø K†ÀB«µå‹°óÿ!Õ�ÑNï³ÇÑDÚeµóªî¯ýõWZAß¿ þ Œ&„è�»§áû +P¢3Âhy!ÿòP,rZTB¡¸ X2A¢‡…Pd(ÊPšùúv†Â+@qÑ àBY�W˜•”£cŒ¯Î+ì¬q"BY�W8¨‚@ö~!”x…c4ÑÛ(áÕyEt»×‡Ñ.„²¯ˆu†"Y\e^aÂý«óŠx2Áù…PVàÇÁDŠ`Ý›’QžÄërz[°t‹4 �ÜÂr^�…“'ôÌ¡¬ÀÂ!бÞ9ZeŽ:«X °pe³ðOÀ@U.D:2ww'J.‚ÉB?I +ê÷¶`²®àK8Y�ùk½¾+õ�m﫵öá¾g›m[ÃÌ“Ÿ÷Å–üOÏiÐ@¦{é8�ìÒý—S=˜6ðªuöò�¿ÝmÌÑźÁ`M<žU…"i!ÁÁÐi‹µz+æänŠWÆ�|£° A{±C i´K^91ž…Ù^Ì�qÎ1Þ–ü¥¸%`T¯‹ø*fªÏL69¿)'_öu˜}£’ó|?LüvqT.°>Š»˜‡S£–}å(ªð4|VºûY>™Îý0M/:-Á‹M˘ËÈ^±h:»‹¶ë²hú¤.‹¦�é²hºŽ³3é `œ×tÚŸK?ŸÇÒÙv\s©mº,eßeÑð‹V'wY4r¶Ë¢Q�]�8ìH¿SžC¥Çx™…Ϧ_±ì·±Nuhë–‘)�÷Û–Ä=%ÚûóÛV¦IÚo]ÏöT¨ò¶6À0¡pü¹ ’õ,¨�Ú¶+¨´Àªåtr1\Þ§ŽôB¼®Ú¡OéšR„Õçû×t�ýlïNq C-!d¼�ÄC'®h ÔÎÆ—ùó
i %]ÕºíÓ‹k‰Þî銖h;Ÿ-Ñ6(eŽ[‚›*¬Ýl¡åB¾Åx³_tyÁ\™¡í;¦”æàp±.:êvz¾¯•ßÄÎu!4ÊèXKNãÍ�—&ÞôœC+±<Á¥©²be„yÆ[N›‚‘W>ïóžÝµ5�¥šƒ«5Ò°WfŸã¦ï¢K޼rÕ¥šË¼X¦Ò<$©éLÓ·,„“~^K5è"x8�#“È4ç®’m¬¡”=áf\\iZ”Ý8¬8?çU"_Å3‘K<�ÂùÆPšÑ¥)òº©Õkt‹µuŽí¾¼2Õïš9óû_GÔ= +endstream +endobj +488 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 487 0 R +/Resources 4 0 R +/Annots [ 489 0 R 490 0 R 491 0 R 492 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +489 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 746.270379 99.094965 733.270379 ] +/BS << +/W 0 +>> +/Dest (section-4.3.5) +>> +endobj +490 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 746.270379 153.664789 733.270379 ] +/BS << +/W 0 +>> +/Dest (name-n64-mouse-3) +>> +endobj +491 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 283.524529 99.094965 270.524529 ] +/BS << +/W 0 +>> +/Dest (section-4.3.6) +>> +endobj +492 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 283.524529 189.564447 270.524529 ] +/BS << +/W 0 +>> +/Dest (name-n64-densha-de-go-3) +>> +endobj +493 0 obj +<< +/Filter /FlateDecode +/Length 1175 +>> +stream +xœÅYMk9½÷¯ès`•’êC, ø²�…YrXöàxã\ì…$ÿRR«=žñŒä¸3ÆýYª§ªÒÓ+ÛŽ Ÿß¬þ +dMÑ�w�Ã׌gПüFu‘ÿ¥ß¯ƒçÑË(„ÆøàÇàÙA$¿}>ÿÉÂǧ¬uΰ�òvLŸo_†··ÖÀøåûp¯C§Á½
³�zyÌ®x|(.ªçéúãuvÏ4FõØ/ƒ 0Íòè¤Bøf
0²›‡É@×Óµ]\/í÷ùê‹ég<>YÚ¾ßv.šàMðVFÁ8vaÜ?oo>¼Ûx?Z48�°¿þùÀiÑ +m +B脲A “#ƒÎ9鄲A é”ùê%LF4K®Ê[#yU1脲ÁÖHQLä]}kdËÆÚ`¥Ê¼ÂQõ +;¼:¯DÃQ=tBÙ€WÄym?T1tBÙ€W„ØD-B鄲¯ˆ��ŽÜÕyE‚3.!鄲¯èУN²Ê¼’ú<fíÒìÕy%è©+ÜIqðJÕ¹ª¹ñú¼ªHHÿY^y}lÄ!77Ï´s GÓWqÐýtdÞÙ˜žQÁ.ÝKx'œ'ÝV�rò�Jï¬EÕÏ6YTmç«ÍbÑ×F2*9c˜Öûßïþ¼ÙßÇN+.{K£fOOëþyì�}ê¥Ô=f“EÕ +æ É‹ªcË^…vžüñ(l5€)æ«fk.ýeRèsI^8›$4ÖxYRøù™6v^—B\wMMUsÓdQõ MU«ÐdQ)ú&‹Jx·XÔúøY‹…Š%1bA¼Yúå–6�|iJµ¸m²¨4h“E%›,*E×dQ ¯‹Z5YT2¦!ýžƒºð¡´vsúÅÀô—è9GIÛÃñƒ†ÑùÕ�™™nË6Sñ$†äÄs<³S¹—¶[¶ž®3'>m9Ó»˜ž§MËýu"“I«F7éc4ç¢t—Eßž]ëhdAz2*èŒîÜšœÕÐQÁyÉÑšÏy:o�Ü:Bª¢÷Ö“¾¡`Áh\]</NóŽvW0ßpd¼å~Ê/¨ÄÍX‹Mž÷§$ß +Õ|*19AEG°@¬ÌލŽ^HpgV[£R¿´hk•ÝdQ‰áµÅBrŸ;®ïMÿ/|N£²°†“T€rT焾þÔ{ФßqÌâqª7ç7N5QÕBÜQÒ(³xÌk�ÑÏõ�U¤öAJ¦æ÷r�åú?î8ÎN)mªôøâ”Š@Ë%;–êLL¹Iž�Ü 'ýëÑ«ü”NãH”Á³Ï»É'ÄÊÒùäåÆ%<rXÍ8�U8ñb/ã™—x<�ÂCjŠ$½ïM‘ªkH‰ê"ÄâãöP^™ ëU‘?? +endstream +endobj +494 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 493 0 R +/Resources 4 0 R +/Annots [ 495 0 R 496 0 R 497 0 R 498 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +495 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 285.546990 95.498285 269.946990 ] +/BS << +/W 0 +>> +/Dest (section-4.4) +>> +endobj +496 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 95.498285 285.546990 266.173822 269.946990 ] +/BS << +/W 0 +>> +/Dest (name-gamecube-controller-types-3) +>> +endobj +497 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 262.446990 99.094965 249.446990 ] +/BS << +/W 0 +>> +/Dest (section-4.4.1) +>> +endobj +498 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 262.446990 258.732904 249.446990 ] +/BS << +/W 0 +>> +/Dest (name-gamecube-standard-controller-2) +>> +endobj +499 0 obj +<< +/Filter /FlateDecode +/Length 996 +>> +stream +xœÍYÁŽÛ8½û+|.°*E‘h�¹´@�)zXì!I›^fh÷ÿ�¥%ybg’8ÎŽ»‰‘زDê鉢žß‚xûQòN5E¡vûÔülÀEûä£B®þlߟMä6J+\ˆ[�ìˆ ·¿¾7_›¿›Î"¦çÞ#:öI4·ðmwüúѼ]{í�š�¹îœG¯½�õò”»âö±vù8ªïÊ_ßXgxŠ�QuTƒS(£|q1Bøæ`bìÝd ƒòc)ûAyh7¸ÿÛ0>ÀùÐ}Ú—CÛ÷«Æ÷A£Ñi$ðÒzP‡Œ)@»zjÞ>|z·úô¾õÁ…âaµkþ¼@"Ú°¡‡ +Š#�Ò<(² +|©*
Rð˜Žæ>3GÝŽfö°�° Ál±™°éµž¹³#Y•-èˆÅ`›÷è‚¢ŸÙùòîãÃêá;hÌôé0…ŸÆr¡®òÇ +#[|›° �Œ*– +©y +endstream +endobj +500 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 499 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +501 0 obj +<< +/Filter /FlateDecode +/Length 1189 +>> +stream +xœÕYK‹Ü8¾ûWøX¥Jª*I˜Ë.zÉaÙCgv'—™…$ÿR’Ÿj{ÜöLwLÚxÚ’U¥¯ú¤êÁôú
õO 4!D/Tß?U_+0žA?yDÑȯÿÔûkå¹öR9ã|ðuðlˆ ×ßþ«>UÿWIÂÇ~ +…mPÂõ¡8ÔG +Án„âo +‹BcH2ŒíÁ‚¾çû¶ORŸÞØÌܴ顽CÓ—Æ:ßÈéI¸é—3D޼žMQÔ
SDü#�ˆ5¢`Á9̹G2ŸÌzÆYƒVD'/Uwž±�EÒX�=¥š¨{ææy½‡ÎØ”õ–DO^SKžÐGÕ,¦hÂ�S4a>
82Þ¶?E‰Ã�ƶÃÚÊd»?§ÔØ9û$ÙÖù%Ë?‹ÖjÕÉÄDn1nS� OâæŒ�¯-þPU[ßèÔ7“ƒÚ¢�ë4¸Ð¸kQ²¨»ú¹[§RìÌz^CY.õs·l“Ãøy…–¢Ò鵌™Wh)Š”±–lMg•¬ÐTÔ½_ø‚TQôR´¸8È�†ß +¯$Îx™8K•/!Î䫜}|B�b�Òð¤Kžâ`œ0º•„×j©zL¨Éò›’ªÊŽègP,y#Xã} +endstream +endobj +502 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 501 0 R +/Resources 4 0 R +/Annots [ 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +503 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 753.389764 95.498285 737.789764 ] +/BS << +/W 0 +>> +/Dest (section-4.5) +>> +endobj +504 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 95.498285 753.389764 260.761225 737.789764 ] +/BS << +/W 0 +>> +/Dest (name-game-boy-controller-types-3) +>> +endobj +505 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 730.289764 99.094965 717.289764 ] +/BS << +/W 0 +>> +/Dest (section-4.5.1) +>> +endobj +506 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 730.289764 218.343500 717.289764 ] +/BS << +/W 0 +>> +/Dest (name-gb-standard-controller-3) +>> +endobj +507 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 531.595916 95.498285 515.995916 ] +/BS << +/W 0 +>> +/Dest (section-4.6) +>> +endobj +508 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 95.498285 531.595916 297.109125 515.995916 ] +/BS << +/W 0 +>> +/Dest (name-game-boy-color-controller-typ) +>> +endobj +509 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 508.495916 99.094965 495.495916 ] +/BS << +/W 0 +>> +/Dest (section-4.6.1) +>> +endobj +510 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 508.495916 225.023188 495.495916 ] +/BS << +/W 0 +>> +/Dest (name-gbc-standard-controller-3) +>> +endobj +511 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 309.802068 95.498285 294.202068 ] +/BS << +/W 0 +>> +/Dest (section-4.7) +>> +endobj +512 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 95.498285 309.802068 316.104486 294.202068 ] +/BS << +/W 0 +>> +/Dest (name-game-boy-advance-controller-t) +>> +endobj +513 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 286.702068 99.094965 273.702068 ] +/BS << +/W 0 +>> +/Dest (section-4.7.1) +>> +endobj +514 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 286.702068 225.673578 273.702068 ] +/BS << +/W 0 +>> +/Dest (name-gba-standard-controller-3) +>> +endobj +515 0 obj +<< +/Filter /FlateDecode +/Length 1209 +>> +stream +xœÅYMoÛH½ëWè\`§œ’CA€Èe(°€=,ö�¤M/Éíþ`©ÑÈÖØŠ-¹QeÑõAÎ#‡|3/ö-Øû7o½ÑÄØ>¾4ßp‰À^ù‰ê$ßþÓ>ß›Dmâ–1º�$µ’È!‚"µ?¾6Ÿ››Î"éþïCpä•%?áÛîýã[óþÞ;h¿ý×<™ëÎyò2ØØ(/y(jŸË�ÏÕýîüó;ìžÞGu;�nƒè£<ùR!|wP)n2ÐÑùsîGçc»Ñõ_@ýçc÷jO¿Œm?î?�$' ÁsëA\ ÚÝKóþîӇݧ��.övOÍß7 + +Kwq+ðŠØ¨Bx{^‘œµ&âö¼"d'æ¥ÊxEXlTØžWDL)ªlÏ+ +è˜Ð/ÝP®À+‚³.ŠøÓ¼r»í8 +ÆDU
…}]¦[Ò›¾€ºrC·hI˸³ôá¦LYW.PJ§ØärЇm«Ù—ºžË];bŒ±ä<Û†Ñ$]©ì 3íÖA¥zg˜©u8ÒB8ÝïÍÉt+$˜ÆÑ‘0
c-©W•ôð�hfãˆÄVc¶ó—ñ„©ÓSx˜šþ>-�"“gA0¥pKŒeŒûCy奯Ž?¿ÿúŒÞ + +endstream +endobj +516 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 515 0 R +/Resources 4 0 R +/Annots [ 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +517 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 549.837762 95.498285 534.237762 ] +/BS << +/W 0 +>> +/Dest (section-4.8) +>> +endobj +518 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 95.498285 549.837762 247.284662 534.237762 ] +/BS << +/W 0 +>> +/Dest (name-genesis-controller-types-3) +>> +endobj +519 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 526.737762 99.094965 513.737762 ] +/BS << +/W 0 +>> +/Dest (section-4.8.1) +>> +endobj +520 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 526.737762 251.943354 513.737762 ] +/BS << +/W 0 +>> +/Dest (name-genesis-mega-drive-3-button-3) +>> +endobj +521 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 331.043914 99.094965 318.043914 ] +/BS << +/W 0 +>> +/Dest (section-4.8.2) +>> +endobj +522 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 331.043914 251.943354 318.043914 ] +/BS << +/W 0 +>> +/Dest (name-genesis-mega-drive-6-button-3) +>> +endobj +523 0 obj +<< +/Filter /FlateDecode +/Length 1375 +>> +stream +xœÕYY‹Ü8~÷¯ðs`]¥’ 4$0/»ô’‡eú˜ÎËÌB²ÿ¶tÙ’ÛG;ÓN³czÚG«ôÕõ©J-§ã7Aÿ¬ÌZ‡F·§×æ{ç¿ð‹ê"<þBŸï
B‹¦5Z1ä-¶�iÍ�†öÇsóµù§ñ#Ðu?BJÂ~!ZüøÖ¼?ÆÛoÿ6í…£°yÍò¦‚ö%MùR=÷×_ßÑdx¢Œê1�9³<jyuR!|7è@f1hqý¯Eq]Ž+îÿrâÁ™Pþ¯½>)Ç|Ú7"‹EfQsaZk5³B9sÿÚ¼ÿóãOû§V8&ã¬ûKó×Î�‚n¨Ýßíþ÷^’ [XEùQŠBNÓHíâ7¤k IÚ¤s3�(¥aZrÅaDâÕü½&ŽÂ’W+M㣚=¥‘D¦”à"ƒF4dÔÄçyŽyRŸè;iIÐNsÅ-“ +Q"�Ôë ÀP%ŸRVBÑ@±ôc§¸Z EÝŠÖÄôÄHüñ¼¢�aÎ]>žW´F‘4+¡lÀ+´\0i…Ö�ç�¡,2òñ¼Ê1pÎò•P6àZÙ© +·Î>žW€ŠR'¬0�ç䎡t\=žW�J?k�çZ • Ê=žW¨¡¤nÀÀÚ‚r^A+™"$ðx^!C3�Ú-(7àK=˜¡îmA¹¯Xe|;(Ý›yåmÕ¾ï¤@RáTõ‚CJÆn,tp¶´Ì°'TŠÉ59ûÆöJ�huk/QU{Ô�:-Œª:™nÔq~TÝtt£xlg5æÖuFBÕ+ zaDUÒß4¢ª¼oQÈ“#úÐ Ÿ±RÄ-l`Ú&8-oÔ"C|çm�ZÿS‘ý.Å»Š÷¤I[ +"Ž [Þ'—ôIÛa[Á?÷y£¦¶´cÒ�ýÆPÍY…Š{Žd~=›0C«Lo¢(Ie±!'
DgëŒZâì5ßIþ!i™Só”6Mž¯¶Š,£Ð%«ŒÌ2§-JF…»·Ò\+“XÊoÚzo¬é¾÷Ô!³ÇÒ˜€ÿèÙ'ÝàÉ+ê™D«©®wh¹ùI2›Éž{º@6*;—Œu_–GJL~ˆf™•PµS�„K¿›Õš–PwAú”„Á�ǤT
Ì-DT÷rèòlP· 7Í]Uó7� ¡õÑ9DX™î°œîµèÙtŽ©‚Õû&_&M\C�C"šgœ’#ˆæ,CVÕ‚ü_Pƒ¡Òœ:'²ìÝ©áÆ¶,'WNð¬?¾®Ü)yéWÃ|ž7Õs¹î©bãÜÄO ¡Jª[¹Q¤°€¤v©»ÒªÓEj� +¤Ç ¤§; ÁQ¤8�”Ÿw"Üìàªq¸ü!P5‹#›ž=Bvò˜‘«·�Äç·kP÷˜‹,…‰)P»âü´�êÖtQƒ¥”,£LÉÉ WwÐ êh‡kkÑ7�}ïÅ×ïSý«"Ê%/iîZpT j…uG/;BǸ´´ú¥Hæ%Æ¥2§\ŽÜN‡ŠzäµeXnLßO踬Y“ŒêõfX‚¯·fU2DÜ[MUÑ’Jù¨*Ö)«‚² +•Dþ†•pü›|Dê�G>ŽCŠXÉ´•h>o[„’yB<Ä¡ÀP|4bO®2ܸ{×Ä{ú²ÖET<J«å"¥Ò‡>¼B�ˆÕœáøua#Ö +endstream +endobj +524 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 523 0 R +/Resources 4 0 R +/Annots [ 525 0 R 526 0 R 527 0 R 528 0 R 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +525 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 614.315301 95.498285 598.715301 ] +/BS << +/W 0 +>> +/Dest (section-4.9) +>> +endobj +526 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 95.498285 614.315301 261.951410 598.715301 ] +/BS << +/W 0 +>> +/Dest (name-atari-2600-controller-types-3) +>> +endobj +527 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 591.215301 99.094965 578.215301 ] +/BS << +/W 0 +>> +/Dest (section-4.9.1) +>> +endobj +528 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 591.215301 171.352777 578.215301 ] +/BS << +/W 0 +>> +/Dest (name-a2600-joystick-3) +>> +endobj +529 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 395.521453 99.094965 382.521453 ] +/BS << +/W 0 +>> +/Dest (section-4.9.2) +>> +endobj +530 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.094965 395.521453 236.022699 382.521453 ] +/BS << +/W 0 +>> +/Dest (name-a2600-keyboard-controller-3) +>> +endobj +531 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 193.227606 89.132367 174.507606 ] +/BS << +/W 0 +>> +/Dest (section-5) +>> +endobj +532 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 89.132367 193.227606 169.815229 174.507606 ] +/BS << +/W 0 +>> +/Dest (name-references-3) +>> +endobj +533 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 162.807606 95.498285 147.207606 ] +/BS << +/W 0 +>> +/Dest (section-5.1) +>> +endobj +534 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 95.498285 162.807606 231.169184 147.207606 ] +/BS << +/W 0 +>> +/Dest (name-normative-references-3) +>> +endobj +535 0 obj +<< +/Filter /FlateDecode +/Length 2763 +>> +stream +xœÝ[I‹d7¾ç¯È³ad…v�)°¡/3`0ÔàÃ0‡¬t§/ÝÛÿ&´„z[¾Ìz5Œ§ª³ë-’bû"BK$œ%þþ
ð¿`@„½3çë×Óï')¼•ø“[7ùõOøùýäíÙ»³3Zx)}ðçà0FFcÏ|>ý|úí”zøØ +¢Vû{�¼^¢¡±ZZ´ˆAk˜7™Jòç21(áhãöò LÖ9éõŒÖƒ +ÀbtÛ¨œv`kß:›Ñ$Íìë¡dDovY—„µNÃ�Þ öMp»{¥…T>¦X¼·GAy~¡G±×D¼¶×j«äÙd³™¢:x½Ÿcf«¤ ÖD»i«àEðL‡xöÂãâP%,VK~oñ‘Õ/JVI2S\ºZ_¤ÓPÛúú>¡4Ìü„Òø&,d)7ø
eŘ6ãÃ#üʷ£œZ‡â¯œ<³dü˘éZ]*�Ð-�=0•–â<Øú>ñêV%Ö˜¥Ci€Ô£°“¹•OtI°4h{Ê}þ‹÷6–ëÄÀ:á+«¥6
˶wL3çž1�ÝòÙ°¬ ˘Ê÷Ø¡_®}„häþ¾¶qµ¯¬AmoVè^ûµ%T?CG�~+—ª*6ñ“ÛÛJ¯Ò�ÖÕÛæAlAž!šéQå'¯êQÚeZ[ˆp�\)h†ÉÌû*€‰ò;Ñ;ŸÒ÷(þBQ'’˜¤&’OÌ.U›¾g.ñô}Ó4Y\V+aH®X²Ü�iØ2”d‘J/÷'�Öv¹�ªp¿Vº¼
¡Ì0éYBî–Ç#9“å§Ñ›Y)X¼5Y©A˜MopŸ +NpOPûeB +/&·»vïμU… Í2Nèï2][³.sBœŠY×
M.âËÒx…çF¿Þý,óÉPï“�hÓØ²Fž[•/˶n£DÖÙnŒË‹oLÛJ”˜ò}PͰ� C1V"¬«BÛókk»òhÕÚŒBJ¸uaò߉‘ +SÔ?,Ðga‡)¶ï"{²
`¦ëa +1“òæ†~ÓC…¸©ç-˵®Ü�N9£ìgy|*EÚš.Æö:»Ù“éÀáÓk>Áަc[qî<NŒZ[æe¥¯ËÏPž«aVîêï8CW. +£• +f÷yuÒèçz"d;JkfÚC1´w¢Ç½•Ü®îb´õ0[+ó³ù¶iË6†Éù®—C#óeêNíb,¬µ)Žågt”t«´íúuaéó ¨:‡Lüås;H½åpt¾Ê·Gæe¨ã8ñÁÁnžZȺ2ýè²ðáµ¹¶ãRN³ÖkQŽ�Á„(¬ÀÿNàÖè.Ñ‹�Þ@&:½Q~Zù°J¦� úºI˜Äÿ¥¨ê6Wù”Œ“T˜]%×9ÙCöäÊ5tß6U×m߬ú=¨]:ŽÛ:æØŠ8V…Y¶ù¶˜% +Åb/‘ÜË8±n�Þ¯ì07LVõŽî²Ê›wfh„‰ø£ÎAZN£ÛoÏÆôÑ4ˆˆi±±“Õ«)ݯÍh¹HQ¼™<ì”Zá¯yB‡€e'YE»µr í6PÜ{¿
aDÎr¥�¬RÆ mqvö’¹›Ò?‰HF?¡•c€±�l;ˆº.âV,BLú>ÀVœ½WÙ}N½J;iú¡8ÝGæNÍ´(8õŒmWU¸üõ–‡0QƒZûô<HûÈn`z†ëLd�²Æ ,Ò52žÓ~a0Ú�9Y5’¾,Å©@ˆ—wð²Åò¬&-–ðÖ]vÚrÈ[›•Þs
oŠäTš\#í]‘h®¦Ùœ‚vPXÑÙøÅŽÙIß\ô^(¥—Ë|,})DÒùÎ!cÛÒÖ §œwpŸŸÉªmjB^@—ÓííQy+T0Þ«»¼¤ÍúLãÒá•Wôa†úŸþ�D +endstream +endobj +536 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 535 0 R +/Resources 4 0 R +/Annots [ 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +537 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 372.730707 757.770379 520.088129 744.150994 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (https://www.rfc-editor.org/info/rfc2119) +>> +>> +endobj +538 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 145.905512 744.150994 181.584711 730.531609 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (https://www.rfc-editor.org/info/rfc2119) +>> +>> +endobj +539 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 378.480219 708.912225 525.837641 695.292840 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (https://www.rfc-editor.org/info/rfc8174) +>> +>> +endobj +540 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 145.905512 695.292840 181.584711 681.673455 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (https://www.rfc-editor.org/info/rfc8174) +>> +>> +endobj +541 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 663.573455 188.422846 644.853455 ] +/BS << +/W 0 +>> +/Dest (name-copyright-notice-3) +>> +endobj +542 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 65.905512 304.665760 207.115717 285.945760 ] +/BS << +/W 0 +>> +/Dest (name-authors-addresses-3) +>> +endobj +543 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 98.975092 248.706990 168.992426 235.087606 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (mailto:vi@vigrey.com) +>> +>> +endobj +544 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 88.765131 235.087606 173.243402 221.468221 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (https://vigrey.com) +>> +>> +endobj +545 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 88.765131 197.848836 235.753412 184.229451 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (https://github.com/bigbass1997) +>> +>> +endobj +546 0 obj +<< +/Title (TASD File Format Specification Version 1) +/Dest [ 6 0 R /XYZ 65.905512 707.858514 0 ] +/Count 101 +/First 547 0 R +/Last 647 0 R +/Parent 648 0 R +>> +endobj +547 0 obj +<< +/Title (Abstract) +/Dest [ 6 0 R /XYZ 65.905512 663.848514 0 ] +/Count 0 +/Parent 546 0 R +/Next 548 0 R +>> +endobj +548 0 obj +<< +/Title (Table of Contents) +/Dest [ 6 0 R /XYZ 65.905512 513.742820 0 ] +/Count 0 +/Prev 547 0 R +/Parent 546 0 R +/Next 549 0 R +>> +endobj +549 0 obj +<< +/Title (1. Introduction) +/Dest [ 214 0 R /XYZ 65.905512 771.389764 0 ] +/Count 4 +/Prev 548 0 R +/First 550 0 R +/Last 552 0 R +/Parent 546 0 R +/Next 554 0 R +>> +endobj +550 0 obj +<< +/Title (1.1. Overview and Preliminaries) +/Dest [ 214 0 R /XYZ 65.905512 543.937147 0 ] +/Count 1 +/First 551 0 R +/Last 551 0 R +/Parent 549 0 R +/Next 552 0 R +>> +endobj +551 0 obj +<< +/Title (1.1.1. Notation and Vocabulary) +/Dest [ 214 0 R /XYZ 65.905512 453.359608 0 ] +/Count 0 +/Parent 550 0 R +>> +endobj +552 0 obj +<< +/Title (1.2. Motivations) +/Dest [ 227 0 R /XYZ 65.905512 348.976531 0 ] +/Count 1 +/Prev 550 0 R +/First 553 0 R +/Last 553 0 R +/Parent 549 0 R +>> +endobj +553 0 obj +<< +/Title (1.2.1. Problems With Existing Formats) +/Dest [ 231 0 R /XYZ 65.905512 771.389764 0 ] +/Count 0 +/Parent 552 0 R +>> +endobj +554 0 obj +<< +/Title (2. Header) +/Dest [ 231 0 R /XYZ 65.905512 595.695916 0 ] +/Count 0 +/Prev 549 0 R +/Parent 546 0 R +/Next 555 0 R +>> +endobj +555 0 obj +<< +/Title (3. Packets) +/Dest [ 231 0 R /XYZ 65.905512 314.720223 0 ] +/Count 60 +/Prev 554 0 R +/First 556 0 R +/Last 570 0 R +/Parent 546 0 R +/Next 616 0 R +>> +endobj +556 0 obj +<< +/Title (3.1. Assigned Packet Keys Without Descriptions) +/Dest [ 239 0 R /XYZ 65.905512 467.456531 0 ] +/Count 6 +/First 557 0 R +/Last 562 0 R +/Parent 555 0 R +/Next 563 0 R +>> +endobj +557 0 obj +<< +/Title (3.1.1. General Keys) +/Dest [ 239 0 R /XYZ 65.905512 441.356531 0 ] +/Count 0 +/Parent 556 0 R +/Next 558 0 R +>> +endobj +558 0 obj +<< +/Title (3.1.2. NES Specific Keys) +/Dest [ 245 0 R /XYZ 65.905512 720.412225 0 ] +/Count 0 +/Prev 557 0 R +/Parent 556 0 R +/Next 559 0 R +>> +endobj +559 0 obj +<< +/Title (3.1.3. SNES Specific Keys) +/Dest [ 245 0 R /XYZ 65.905512 626.434686 0 ] +/Count 0 +/Prev 558 0 R +/Parent 556 0 R +/Next 560 0 R +>> +endobj +560 0 obj +<< +/Title (3.1.4. Genesis Specific Keys) +/Dest [ 245 0 R /XYZ 65.905512 532.457147 0 ] +/Count 0 +/Prev 559 0 R +/Parent 556 0 R +/Next 561 0 R +>> +endobj +561 0 obj +<< +/Title (3.1.5. Input Frame/Timing Keys) +/Dest [ 245 0 R /XYZ 65.905512 479.337762 0 ] +/Count 0 +/Prev 560 0 R +/Parent 556 0 R +/Next 562 0 R +>> +endobj +562 0 obj +<< +/Title (3.1.6. Extraneous Keys) +/Dest [ 245 0 R /XYZ 65.905512 371.740838 0 ] +/Count 0 +/Prev 561 0 R +/Parent 556 0 R +>> +endobj +563 0 obj +<< +/Title (3.2. Assigned Packet Keys With Descriptions) +/Dest [ 245 0 R /XYZ 65.905512 291.382684 0 ] +/Count 6 +/Prev 556 0 R +/First 564 0 R +/Last 569 0 R +/Parent 555 0 R +/Next 570 0 R +>> +endobj +564 0 obj +<< +/Title (3.2.1. General Key Descriptions) +/Dest [ 245 0 R /XYZ 65.905512 265.282684 0 ] +/Count 0 +/Parent 563 0 R +/Next 565 0 R +>> +endobj +565 0 obj +<< +/Title (3.2.2. NES Specific Key Descriptions) +/Dest [ 275 0 R /XYZ 65.905512 212.591912 0 ] +/Count 0 +/Prev 564 0 R +/Parent 563 0 R +/Next 566 0 R +>> +endobj +566 0 obj +<< +/Title (3.2.3. SNES Specific Key Descriptions) +/Dest [ 291 0 R /XYZ 65.905512 505.740838 0 ] +/Count 0 +/Prev 565 0 R +/Parent 563 0 R +/Next 567 0 R +>> +endobj +567 0 obj +<< +/Title (3.2.4. Genesis Specific Key Descriptions) +/Dest [ 291 0 R /XYZ 65.905512 224.330682 0 ] +/Count 0 +/Prev 566 0 R +/Parent 563 0 R +/Next 568 0 R +>> +endobj +568 0 obj +<< +/Title (3.2.5. Input Frame/Timing Key Descriptions) +/Dest [ 305 0 R /XYZ 65.905512 734.031609 0 ] +/Count 0 +/Prev 567 0 R +/Parent 563 0 R +/Next 569 0 R +>> +endobj +569 0 obj +<< +/Title (3.2.6. Extraneous Key Descriptions) +/Dest [ 305 0 R /XYZ 65.905512 322.046990 0 ] +/Count 0 +/Prev 568 0 R +/Parent 563 0 R +>> +endobj +570 0 obj +<< +/Title (3.3. Packet Payload Formats) +/Dest [ 320 0 R /XYZ 65.905512 734.031609 0 ] +/Count 45 +/Prev 563 0 R +/First 571 0 R +/Last 612 0 R +/Parent 555 0 R +>> +endobj +571 0 obj +<< +/Title (3.3.1. General Key Payload Formats) +/Dest [ 320 0 R /XYZ 65.905512 707.931609 0 ] +/Count 22 +/First 572 0 R +/Last 593 0 R +/Parent 570 0 R +/Next 594 0 R +>> +endobj +572 0 obj +<< +/Title (3.3.1.1. CONSOLE_TYPE Packet) +/Dest [ 320 0 R /XYZ 65.905512 674.931609 0 ] +/Count 0 +/Parent 571 0 R +/Next 573 0 R +>> +endobj +573 0 obj +<< +/Title (3.3.1.2. CONSOLE_REGION Packet) +/Dest [ 320 0 R /XYZ 65.905512 297.596531 0 ] +/Count 0 +/Prev 572 0 R +/Parent 571 0 R +/Next 574 0 R +>> +endobj +574 0 obj +<< +/Title (3.3.1.3. GAME_TITLE Packet) +/Dest [ 331 0 R /XYZ 65.905512 594.271609 0 ] +/Count 0 +/Prev 573 0 R +/Parent 571 0 R +/Next 575 0 R +>> +endobj +575 0 obj +<< +/Title (3.3.1.4. ROM_NAME Packet) +/Dest [ 331 0 R /XYZ 65.905512 382.834686 0 ] +/Count 0 +/Prev 574 0 R +/Parent 571 0 R +/Next 576 0 R +>> +endobj +576 0 obj +<< +/Title (3.3.1.5. ATTRIBUTION Packet) +/Dest [ 337 0 R /XYZ 65.905512 771.389764 0 ] +/Count 0 +/Prev 575 0 R +/Parent 571 0 R +/Next 577 0 R +>> +endobj +577 0 obj +<< +/Title (3.3.1.6. CATEGORY Packet) +/Dest [ 337 0 R /XYZ 65.905512 406.396531 0 ] +/Count 0 +/Prev 576 0 R +/Parent 571 0 R +/Next 578 0 R +>> +endobj +578 0 obj +<< +/Title (3.3.1.7. EMULATOR_NAME Packet) +/Dest [ 337 0 R /XYZ 65.905512 194.959608 0 ] +/Count 0 +/Prev 577 0 R +/Parent 571 0 R +/Next 579 0 R +>> +endobj +579 0 obj +<< +/Title (3.3.1.8. EMULATOR_VERSION Packet) +/Dest [ 345 0 R /XYZ 65.905512 590.952840 0 ] +/Count 0 +/Prev 578 0 R +/Parent 571 0 R +/Next 580 0 R +>> +endobj +580 0 obj +<< +/Title (3.3.1.9. EMULATOR_CORE Packet) +/Dest [ 345 0 R /XYZ 65.905512 365.896531 0 ] +/Count 0 +/Prev 579 0 R +/Parent 571 0 R +/Next 581 0 R +>> +endobj +581 0 obj +<< +/Title (3.3.1.10. TAS_LAST_MODIFIED Packet) +/Dest [ 351 0 R /XYZ 65.905512 771.389764 0 ] +/Count 0 +/Prev 580 0 R +/Parent 571 0 R +/Next 582 0 R +>> +endobj +582 0 obj +<< +/Title (3.3.1.11. DUMP_CREATED Packet) +/Dest [ 351 0 R /XYZ 65.905512 595.191609 0 ] +/Count 0 +/Prev 581 0 R +/Parent 571 0 R +/Next 583 0 R +>> +endobj +583 0 obj +<< +/Title (3.3.1.12. DUMP_LAST_MODIFIED Packet) +/Dest [ 351 0 R /XYZ 65.905512 418.993455 0 ] +/Count 0 +/Prev 582 0 R +/Parent 571 0 R +/Next 584 0 R +>> +endobj +584 0 obj +<< +/Title (3.3.1.13. TOTAL_FRAMES Packet) +/Dest [ 351 0 R /XYZ 65.905512 242.795301 0 ] +/Count 0 +/Prev 583 0 R +/Parent 571 0 R +/Next 585 0 R +>> +endobj +585 0 obj +<< +/Title (3.3.1.14. RERECORDS Packet) +/Dest [ 361 0 R /XYZ 65.905512 639.810994 0 ] +/Count 0 +/Prev 584 0 R +/Parent 571 0 R +/Next 586 0 R +>> +endobj +586 0 obj +<< +/Title (3.3.1.15. SOURCE_LINK Packet) +/Dest [ 361 0 R /XYZ 65.905512 463.612840 0 ] +/Count 0 +/Prev 585 0 R +/Parent 571 0 R +/Next 587 0 R +>> +endobj +587 0 obj +<< +/Title (3.3.1.16. BLANK_FRAMES Packet) +/Dest [ 361 0 R /XYZ 65.905512 252.175916 0 ] +/Count 0 +/Prev 586 0 R +/Parent 571 0 R +/Next 588 0 R +>> +endobj +588 0 obj +<< +/Title (3.3.1.17. VERIFIED Packet) +/Dest [ 369 0 R /XYZ 65.905512 612.572225 0 ] +/Count 0 +/Prev 587 0 R +/Parent 571 0 R +/Next 589 0 R +>> +endobj +589 0 obj +<< +/Title (3.3.1.18. MEMORY_INIT Packet) +/Dest [ 369 0 R /XYZ 65.905512 422.754686 0 ] +/Count 0 +/Prev 588 0 R +/Parent 571 0 R +/Next 590 0 R +>> +endobj +590 0 obj +<< +/Title (3.3.1.19. GAME_IDENTIFIER Packet) +/Dest [ 377 0 R /XYZ 65.905512 636.434686 0 ] +/Count 0 +/Prev 589 0 R +/Parent 571 0 R +/Next 591 0 R +>> +endobj +591 0 obj +<< +/Title (3.3.1.20. MOVIE_LICENSE Packet) +/Dest [ 381 0 R /XYZ 65.905512 698.912225 0 ] +/Count 0 +/Prev 590 0 R +/Parent 571 0 R +/Next 592 0 R +>> +endobj +592 0 obj +<< +/Title (3.3.1.21. MOVIE_FILE Packet) +/Dest [ 381 0 R /XYZ 65.905512 487.475301 0 ] +/Count 0 +/Prev 591 0 R +/Parent 571 0 R +/Next 593 0 R +>> +endobj +593 0 obj +<< +/Title (3.3.1.22. PORT_CONTROLLER Packet) +/Dest [ 387 0 R /XYZ 65.905512 771.389764 0 ] +/Count 0 +/Prev 592 0 R +/Parent 571 0 R +>> +endobj +594 0 obj +<< +/Title (3.3.2. NES Specific Key Payload Formats) +/Dest [ 387 0 R /XYZ 65.905512 224.034686 0 ] +/Count 4 +/Prev 571 0 R +/First 595 0 R +/Last 598 0 R +/Parent 570 0 R +/Next 599 0 R +>> +endobj +595 0 obj +<< +/Title (3.3.2.1. NES_LATCH_FILTER Packet) +/Dest [ 387 0 R /XYZ 65.905512 191.034686 0 ] +/Count 0 +/Parent 594 0 R +/Next 596 0 R +>> +endobj +596 0 obj +<< +/Title (3.3.2.2. NES_CLOCK_FILTER Packet) +/Dest [ 396 0 R /XYZ 65.905512 639.810994 0 ] +/Count 0 +/Prev 595 0 R +/Parent 594 0 R +/Next 597 0 R +>> +endobj +597 0 obj +<< +/Title (3.3.2.3. NES_OVERREAD Packet) +/Dest [ 396 0 R /XYZ 65.905512 449.993455 0 ] +/Count 0 +/Prev 596 0 R +/Parent 594 0 R +/Next 598 0 R +>> +endobj +598 0 obj +<< +/Title (3.3.2.4. NES_GAME_GENIE_CODE Packet) +/Dest [ 396 0 R /XYZ 65.905512 260.175916 0 ] +/Count 0 +/Prev 597 0 R +/Parent 594 0 R +>> +endobj +599 0 obj +<< +/Title (3.3.3. SNES Specific Key Payload Formats) +/Dest [ 404 0 R /XYZ 65.905512 618.072225 0 ] +/Count 4 +/Prev 594 0 R +/First 600 0 R +/Last 603 0 R +/Parent 570 0 R +/Next 604 0 R +>> +endobj +600 0 obj +<< +/Title (3.3.3.1. SNES_CLOCK_FILTER Packet) +/Dest [ 404 0 R /XYZ 65.905512 585.072225 0 ] +/Count 0 +/Parent 599 0 R +/Next 601 0 R +>> +endobj +601 0 obj +<< +/Title (3.3.3.2. SNES_OVERREAD Packet) +/Dest [ 404 0 R /XYZ 65.905512 395.254686 0 ] +/Count 0 +/Prev 600 0 R +/Parent 599 0 R +/Next 602 0 R +>> +endobj +602 0 obj +<< +/Title (3.3.3.3. SNES_GAME_GENIE_CODE Packet) +/Dest [ 404 0 R /XYZ 65.905512 205.437147 0 ] +/Count 0 +/Prev 601 0 R +/Parent 599 0 R +/Next 603 0 R +>> +endobj +603 0 obj +<< +/Title (3.3.3.4. SNES_LATCH_TRAIN Packet \(RESERVED\)) +/Dest [ 414 0 R /XYZ 65.905512 604.572225 0 ] +/Count 0 +/Prev 602 0 R +/Parent 599 0 R +>> +endobj +604 0 obj +<< +/Title (3.3.4. Genesis Specific Key Payload Formats) +/Dest [ 414 0 R /XYZ 65.905512 573.452840 0 ] +/Count 1 +/Prev 599 0 R +/First 605 0 R +/Last 605 0 R +/Parent 570 0 R +/Next 606 0 R +>> +endobj +605 0 obj +<< +/Title (3.3.4.1. GENESIS_GAME_GENIE_CODE Packet) +/Dest [ 414 0 R /XYZ 65.905512 540.452840 0 ] +/Count 0 +/Parent 604 0 R +>> +endobj +606 0 obj +<< +/Title (3.3.5. Input Frame/Timing Key Payload Formats) +/Dest [ 414 0 R /XYZ 65.905512 342.515916 0 ] +/Count 5 +/Prev 604 0 R +/First 607 0 R +/Last 611 0 R +/Parent 570 0 R +/Next 612 0 R +>> +endobj +607 0 obj +<< +/Title (3.3.5.1. INPUT_CHUNK Packet) +/Dest [ 414 0 R /XYZ 65.905512 309.515916 0 ] +/Count 0 +/Parent 606 0 R +/Next 608 0 R +>> +endobj +608 0 obj +<< +/Title (3.3.5.2. INPUT_MOMENT Packet) +/Dest [ 426 0 R /XYZ 65.905512 571.957147 0 ] +/Count 0 +/Prev 607 0 R +/Parent 606 0 R +/Next 609 0 R +>> +endobj +609 0 obj +<< +/Title (3.3.5.3. TRANSITION Packet) +/Dest [ 432 0 R /XYZ 65.905512 734.150994 0 ] +/Count 0 +/Prev 608 0 R +/Parent 606 0 R +/Next 610 0 R +>> +endobj +610 0 obj +<< +/Title (3.3.5.4. LAG_FRAME_CHUNK Packet) +/Dest [ 432 0 R /XYZ 65.905512 219.518992 0 ] +/Count 0 +/Prev 609 0 R +/Parent 606 0 R +/Next 611 0 R +>> +endobj +611 0 obj +<< +/Title (3.3.5.5. MOVIE_TRANSITION) +/Dest [ 438 0 R /XYZ 65.905512 593.932225 0 ] +/Count 0 +/Prev 610 0 R +/Parent 606 0 R +>> +endobj +612 0 obj +<< +/Title (3.3.6. Extraneous Key Payload Formats) +/Dest [ 438 0 R /XYZ 65.905512 234.438992 0 ] +/Count 3 +/Prev 606 0 R +/First 613 0 R +/Last 615 0 R +/Parent 570 0 R +>> +endobj +613 0 obj +<< +/Title (3.3.6.1. COMMENT Packet) +/Dest [ 438 0 R /XYZ 65.905512 201.438992 0 ] +/Count 0 +/Parent 612 0 R +/Next 614 0 R +>> +endobj +614 0 obj +<< +/Title (3.3.6.2. EXPERIMENTAL Packet) +/Dest [ 446 0 R /XYZ 65.905512 604.572225 0 ] +/Count 0 +/Prev 613 0 R +/Parent 612 0 R +/Next 615 0 R +>> +endobj +615 0 obj +<< +/Title (3.3.6.3. UNSPECIFIED Packet) +/Dest [ 446 0 R /XYZ 65.905512 379.515916 0 ] +/Count 0 +/Prev 614 0 R +/Parent 612 0 R +>> +endobj +616 0 obj +<< +/Title (4. Controller Input Formats) +/Dest [ 452 0 R /XYZ 65.905512 771.389764 0 ] +/Count 27 +/Prev 555 0 R +/First 617 0 R +/Last 641 0 R +/Parent 546 0 R +/Next 644 0 R +>> +endobj +617 0 obj +<< +/Title (4.1. NES/Famicom Controller Types) +/Dest [ 452 0 R /XYZ 65.905512 625.653455 0 ] +/Count 2 +/First 618 0 R +/Last 619 0 R +/Parent 616 0 R +/Next 620 0 R +>> +endobj +618 0 obj +<< +/Title (4.1.1. NES Standard Controller) +/Dest [ 452 0 R /XYZ 65.905512 599.553455 0 ] +/Count 0 +/Parent 617 0 R +/Next 619 0 R +>> +endobj +619 0 obj +<< +/Title (4.1.2. NES Four Score) +/Dest [ 452 0 R /XYZ 65.905512 403.859608 0 ] +/Count 0 +/Prev 618 0 R +/Parent 617 0 R +>> +endobj +620 0 obj +<< +/Title (4.2. SNES Controller Types) +/Dest [ 462 0 R /XYZ 65.905512 462.502068 0 ] +/Count 2 +/Prev 617 0 R +/First 621 0 R +/Last 622 0 R +/Parent 616 0 R +/Next 623 0 R +>> +endobj +621 0 obj +<< +/Title (4.2.1. SNES Standard Controller) +/Dest [ 462 0 R /XYZ 65.905512 436.402068 0 ] +/Count 0 +/Parent 620 0 R +/Next 622 0 R +>> +endobj +622 0 obj +<< +/Title (4.2.2. SNES Mouse) +/Dest [ 468 0 R /XYZ 65.905512 706.792840 0 ] +/Count 0 +/Prev 621 0 R +/Parent 620 0 R +>> +endobj +623 0 obj +<< +/Title (4.3. N64 Controller Types) +/Dest [ 472 0 R /XYZ 65.905512 771.389764 0 ] +/Count 6 +/Prev 620 0 R +/First 624 0 R +/Last 629 0 R +/Parent 616 0 R +/Next 630 0 R +>> +endobj +624 0 obj +<< +/Title (4.3.1. N64 Standard Controller) +/Dest [ 472 0 R /XYZ 65.905512 745.289764 0 ] +/Count 0 +/Parent 623 0 R +/Next 625 0 R +>> +endobj +625 0 obj +<< +/Title (4.3.2. N64 Standard Controller with Rumble) +/Dest [ 472 0 R /XYZ 65.905512 282.543914 0 ] +/Count 0 +/Prev 624 0 R +/Parent 623 0 R +/Next 626 0 R +>> +endobj +626 0 obj +<< +/Title (4.3.3. N64 Standard Controller with Controller Pak) +/Dest [ 480 0 R /XYZ 65.905512 439.740838 0 ] +/Count 0 +/Prev 625 0 R +/Parent 623 0 R +/Next 627 0 R +>> +endobj +627 0 obj +<< +/Title (4.3.4. N64 Standard Controller with Transfer Pak) +/Dest [ 484 0 R /XYZ 65.905512 592.315301 0 ] +/Count 0 +/Prev 626 0 R +/Parent 623 0 R +/Next 628 0 R +>> +endobj +628 0 obj +<< +/Title (4.3.5. N64 Mouse) +/Dest [ 488 0 R /XYZ 65.905512 761.270379 0 ] +/Count 0 +/Prev 627 0 R +/Parent 623 0 R +/Next 629 0 R +>> +endobj +629 0 obj +<< +/Title (4.3.6. N64 Densha de Go) +/Dest [ 488 0 R /XYZ 65.905512 298.524529 0 ] +/Count 0 +/Prev 628 0 R +/Parent 623 0 R +>> +endobj +630 0 obj +<< +/Title (4.4. GameCube Controller Types) +/Dest [ 494 0 R /XYZ 65.905512 303.546990 0 ] +/Count 1 +/Prev 623 0 R +/First 631 0 R +/Last 631 0 R +/Parent 616 0 R +/Next 632 0 R +>> +endobj +631 0 obj +<< +/Title (4.4.1. GameCube Standard Controller) +/Dest [ 494 0 R /XYZ 65.905512 277.446990 0 ] +/Count 0 +/Parent 630 0 R +>> +endobj +632 0 obj +<< +/Title (4.5. Game Boy Controller Types) +/Dest [ 502 0 R /XYZ 65.905512 771.389764 0 ] +/Count 1 +/Prev 630 0 R +/First 633 0 R +/Last 633 0 R +/Parent 616 0 R +/Next 634 0 R +>> +endobj +633 0 obj +<< +/Title (4.5.1. GB Standard Controller) +/Dest [ 502 0 R /XYZ 65.905512 745.289764 0 ] +/Count 0 +/Parent 632 0 R +>> +endobj +634 0 obj +<< +/Title (4.6. Game Boy Color Controller Types) +/Dest [ 502 0 R /XYZ 65.905512 549.595916 0 ] +/Count 1 +/Prev 632 0 R +/First 635 0 R +/Last 635 0 R +/Parent 616 0 R +/Next 636 0 R +>> +endobj +635 0 obj +<< +/Title (4.6.1. GBC Standard Controller) +/Dest [ 502 0 R /XYZ 65.905512 523.495916 0 ] +/Count 0 +/Parent 634 0 R +>> +endobj +636 0 obj +<< +/Title (4.7. Game Boy Advance Controller Types) +/Dest [ 502 0 R /XYZ 65.905512 327.802068 0 ] +/Count 1 +/Prev 634 0 R +/First 637 0 R +/Last 637 0 R +/Parent 616 0 R +/Next 638 0 R +>> +endobj +637 0 obj +<< +/Title (4.7.1. GBA Standard Controller) +/Dest [ 502 0 R /XYZ 65.905512 301.702068 0 ] +/Count 0 +/Parent 636 0 R +>> +endobj +638 0 obj +<< +/Title (4.8. Genesis Controller Types) +/Dest [ 516 0 R /XYZ 65.905512 567.837762 0 ] +/Count 2 +/Prev 636 0 R +/First 639 0 R +/Last 640 0 R +/Parent 616 0 R +/Next 641 0 R +>> +endobj +639 0 obj +<< +/Title (4.8.1. Genesis \(Mega Drive\) 3-Button) +/Dest [ 516 0 R /XYZ 65.905512 541.737762 0 ] +/Count 0 +/Parent 638 0 R +/Next 640 0 R +>> +endobj +640 0 obj +<< +/Title (4.8.2. Genesis \(Mega Drive\) 6-Button) +/Dest [ 516 0 R /XYZ 65.905512 346.043914 0 ] +/Count 0 +/Prev 639 0 R +/Parent 638 0 R +>> +endobj +641 0 obj +<< +/Title (4.9. Atari 2600 Controller Types) +/Dest [ 524 0 R /XYZ 65.905512 632.315301 0 ] +/Count 2 +/Prev 638 0 R +/First 642 0 R +/Last 643 0 R +/Parent 616 0 R +>> +endobj +642 0 obj +<< +/Title (4.9.1. A2600 Joystick) +/Dest [ 524 0 R /XYZ 65.905512 606.215301 0 ] +/Count 0 +/Parent 641 0 R +/Next 643 0 R +>> +endobj +643 0 obj +<< +/Title (4.9.2. A2600 Keyboard Controller) +/Dest [ 524 0 R /XYZ 65.905512 410.521453 0 ] +/Count 0 +/Prev 642 0 R +/Parent 641 0 R +>> +endobj +644 0 obj +<< +/Title (5. References) +/Dest [ 524 0 R /XYZ 65.905512 214.827606 0 ] +/Count 1 +/Prev 616 0 R +/First 645 0 R +/Last 645 0 R +/Parent 546 0 R +/Next 646 0 R +>> +endobj +645 0 obj +<< +/Title (5.1. Normative References) +/Dest [ 524 0 R /XYZ 65.905512 180.807606 0 ] +/Count 0 +/Parent 644 0 R +>> +endobj +646 0 obj +<< +/Title (Copyright Notice) +/Dest [ 536 0 R /XYZ 65.905512 685.173455 0 ] +/Count 0 +/Prev 644 0 R +/Parent 546 0 R +/Next 647 0 R +>> +endobj +647 0 obj +<< +/Title (Authors' Addresses) +/Dest [ 536 0 R /XYZ 65.905512 326.265760 0 ] +/Count 0 +/Prev 646 0 R +/Parent 546 0 R +>> +endobj +648 0 obj +<< +/Count 102 +/First 546 0 R +/Last 546 0 R +>> +endobj +649 0 obj +<< +/Length1 21380 +/Filter /FlateDecode +/Length 5895 +>> +stream +xœí<itÅ™UÝs_šÑLÏh4w÷œšÍÙ�£ctX–¬ÃòmÙX¶dI¶„„mÀÆÆØ°ñ^`Ââ@Iv_’°À’cM®%›÷r 8�ð–<^² D£ýªçÐaÃÛ¿ûv¾zÝÕU]õ�U_}_[c„B*tѨ¥«½£Sÿ’¼ ¡¡ô®ëŠÄ§ÿÂA„ð +hoÛ1=2ûWZ{/B\Ú‡ÆGöÎB…ñn¨eãSvÞ{éµ%÷#d}xbldÔ)[÷¼û\5Ð!ëTÚŸÚî‰é}û/¼!}Ú�!äºcjfÇHçs}gÿ?ÚN�쟕�£ÕðÞã�W�L�±ï5Ù´Bß»³3{÷Í?ˆâ@Ÿàs""…_^}ësß»ª¬ñÏHJ¿=è·G^yžÔ¯¯mNο?¯i2^‚(”˜' +g÷ ¼R0-ÙÒ÷AÐS~Æ2Q¨ï 10p‚Ú +)¨÷‘–z–X +íoæù~ +£Ö|ÿÚMúç/-/ê‘+ü…Ég�QW¾½ëÐÃèèo8�§ñø�MõS§—•ŸÐ*:MOÒ÷Ð/ПˆÒ¢ÑqÑ�E‰£âíâÓâÄ“4JŽJ—¼!µH'¤ÏÉDP¬P’PZ •½(ûoy�|T~¯B¢èP\åyÅòjåyåoT.Õ�êNÕ·U¨ÝêkÔ/hä¥R*¥R*¥R*¥R*¥R*¥R*¥R*¥òÿª"Œ2øiô:u‘|GÑÓ z6|?�õÙà]Ýüµx–¡2„Ä^/Ÿ¬I1Š1�&<ûèÙ³�¦[M¦ÖôÉÌïþâ›™æÀÁóýýw�ßå8aæúÜLSšâ“^¯�7ƒDêÌM"Ó{ïîï?0Мyó‹ÿ>óÌèUlÄ›ïbÌXôêä$ô·Îÿ½…îEJÀÇNq‚í.6e]±˜ŒW³lu˜~4;©¿Œ>Aÿºó—èkþ~Qˆ�ÿ¥¦þ¸²€D¬ ÁDPI|ñà“c% ®Ø<‰L
¯ß�O¯eÙTÛþÒÌÌ#›6]˜™¹0ÜúЙ3<pæÌC„bܲÔO� ¡Ÿ +а‚�¸ KA™Àb¼FŸø¨æÉæ4-µS„öG=W…l{ÊUËô¤ÛZÓU·G�nŸ�Þ}hC«umxÕ6›rxý--•-uu+Óƒm5ép—/Xͯ\Û—Ùl”úºê›†âFòõN
7+¬=r4Ç»xœÐ%ŽÔæI�U§¡¥OZÙhö}l=91eÕÙ–ŸÒ"1c6Jxs¤© ÿ<okŠ˜ù¿=´³Zå{å §þ/øcÀ^µX΢ ¬DêÓ»LœÏBK‹ÊýsÏ&ÈÍD aW«7nªvâÄu2QyÅÏ´ÚfǾ;"«†\ÊÁ±ÖZ·³©§[)-Ç›žbË
ß’ÈwïnÝÀWÙ ehÙ�‚…µ–¦òk�ƒý@ÈS]XzR£{VΦ¹Î©«¸š6¥ÕÒÐ)1d›§¯�ñ†cAK“7+ºïÙ7tfw“#nsDì�¾ÛoÒ˜¦·ï>ÞÖ¿n°Ç¡;{¤�^šÅ+•r)ƒoĊדI£ÿ6ûGjK"þJlnvЏշfä%ë"¿7RÞ…uGxƒ;-h/¿Môß>‰°etCSÉÁ¶Æ–ÐÎu»vw§7õÞ:ìq1G TkM4u¬bÃiEr=ß:èâ6ÔG†’;z;�ÁM['ñיƘ-ɶD“uÙ=�©X+glçë»A‹ðE_v(Z1EŒ¨Ïí°âþÕPtœð+0v©q…³Â¬©�S;ãë®N�wu϶:;¦í\\ƒk«ƒ…+i5ÚÅá4fm¾]c+¦›:Ï_·úÜt�yìGö®]sŠØPD~a:t‘5$¬Ï”>¡7’…éÊïŸ�“ +òC�€ÅÚ�ŠT�öW·ÿG™§¢<û”¯Ì*¡¹�l"™UWe¾È+Ì2y¥Š·†©Þ¹oTÙy¾œQ™d£ëT.•ÞÀcÿ#ìÎ9È�U¬ä—s@¿b¼NØ¥®œM"»‹ÎŽÑçtÖ€Ñî`Ø}æLgmÇúì›®ÎDªÝÝ–©Mv´óÆ ~Ý_ÁoØÚÖ^.Ömì~ Ÿoloçÿ–ýrºwegömâ‰R ù} y×O¹°x™œÏH ¾ŸÛ÷ùÞ¾Ï_³÷š–&C´êªžÍ3±Î˜NWµ]1|afê–LÌwµT}áܹ3¶�Qc³6A¿D¾‚|zòt¹tÎW”§Êh³3Uxå—¾3ð…kMã““;ëˆoúþk_™~tkú™3wÌýáœ`�¬Že8ó{�ç¢#¦jbì6cuŠE6Çc|ðC»M,ë�ò?¾4òÏD<¾�³o]‘g +¸{ +š.*:•sÎ.†ô0 ñGýÓàšGo¸ñÆ¶æÆ–é-#×é=:7§Æõj‡µ~Qí\¼©´~-ºËïàygð‹%'m9ËäÈ¡w-&–;¿\yï¼ �ÃP…7;Û™ Þ˜ëÉ> +=ÙO §`¨_x…:kóHýÆDðøZàÂt%.tyJFXð5ÁúZ›ÃB~KŒ¯v ’ò‚{_ŠFCqL¹³ÞMÖ ±‡z¶%>¬gû2Ôæs_i®©È[÷µOÕJ*wp@µ4çÀ��.±¹@ä>§ÙìÀeþîægí —¨¦w(¤¿5dò‹ +.臱?ËùäÚZiQGŒîpUÏëy{ߟ;—àÒë/7²ŽæhÝ�œ_z[r„²Ï+œŽ‹í?÷q’‚ Y¾T°¯÷à�çþ‘Ï–-HAÓ@™]J9�—HÃaÝâ…õ!ËKáì
ÀBa5eÕøhÞhOP¾l?!B ;èUêÿ‹¸îÄž»{zîÙ3uO_ÿÝÓ[{{·líëËÅu›7ãºâºœÚ¼W’¸ìJþ)¿Ùéån*qòxݱ)ÖÉ4mZÙœÊø +ìïÙÞ8ÑúìܳjÓÀªìw�À½VྐྵsÜû– +ªµq¶WzëÍ9An¼NL»´óyi>ŒN¬a^<ŸèŽïÚºûíõØ·\ª€T^¹¢TRÓ¢¥}¹„1MÛé›ýiöúÊj«ÈÕ8À3×·9AoG²6SSXWmâWF5?úx�Ïóê÷ˆÔ³+»{[²¿#ë‚Dàõ¢‹,&x:r¨VSW:oŒ¦œE±lãx•3i[ÕØÐ:´¦s5×2ÓyõxSš©öù*WdÆ7dnP[�l |í†tu"ÍÚšWÅš6ÅÁF-Õ‘°5±Tm[Ù²£8�‰úèÃRÔ‰ÄH¼Tðê‚ +>¶³"iFL͈3RÈy$Êäu¥_|1íòÎý!¿êµ Ýo +Õøbª„¨ÉN Dyê©åÔiš[#wÙÔ¸ÏÔ(edZ5%ÕÊoî>¡³ˆeOK.ëm.Í}{;{ˆÚæq£2§æsSƒÑYgÃOd�E¶TºÇ¢¿T±²Jxk�Ï}ÿ"Dyk¾œ¥[Š^ªS‘¥„À’t! â¹b8§�¸ƒæ¯_кY5î¡Ys™rh½¼Üe¢ß“Û¶sÏzuö)q£Ò8<%×Y]4ïuþãJÏëT +§îÐ
V]®äyGàûÙKpŽ.e¥óä�j§V[Îçÿ÷ +ê›Àk¬˜ý,çu‘t˜cï‘Hû2h²_g·Ë%+µ™Ò¢WJÚLX¢7[M_q™b|yð$Þa«ày³AmSß创*Óì~£]Æ"ÙoÞÔ¼ŒÎÁ k†œÌ¤[|(Œb&HÒìàz?d[sÇ Ï‚ñ_Ÿ¿Ø‡è<¹Ñ˜9£©Ã$+»
NéOæ÷àŸÍ•dåRDŒqº¡!Ÿ'¥(ø¾êBnŸJ]–öæDæ|œ†J= FºØ¶yvv5ðÚ2íµ[k''+YѳŒÜè‹ë‚‰pcµb`h°OD§â-M»Çbz·Îì|‡…ÓuwÖ÷Ðt]Í:à@lI\(,ìVˆè¹ÅqDBpŠ‰Ë’5ržœªï6ÊÏIõœ1â½O‰(©±«nûøäéx0o1_¯°Û)q°‚¼,\]æ ÞrîÜ=»FwŽ�NìØEt�Lõ=з<,8¿B˜÷¾îÙæÖ™Ž‘1¦6©²šmASms²W§RÖ*ø;§&›BŒÏÌÕ»}ÛÖ��EX©YcN° k5Èzdu’ü°ø%Å” +F*E]²?™¼FÑ‹V¹±[Û +5ÄAÐ[Ξ»-ÌY;+R†ŸûœÝ®àûüÑž±ñ»ˆ¬ää‰Y¦1ä¿.0.cN:’_æò`¿éæc×Mߘ}†îH'Wè,Ûî`UœRœ;vêÌ
×'F‡#ll�stÝÐ +æ5UWð}¾Øñ;ÏÝôh"á²bi\=¶st×®ãc‚×R·7;ˆs±x ®ðUL°{Jp +ç8^,s ÜÓRfEíÈä®í
pˆ.ŠŒ^SÔUž} ïÑ?ä™@·³‚>~îì-‘ +Ôá`�ÓªÔ›;LÈÙÅH$ezœ‰2GÙБ#ÎÀiµÝŠÎ
¸%Q©uµjÏ^W‰EÒr"O%¬ÌcTEþÄ_töæ,YlåbLõqº©×œ¡h0h£/ym²ÅöAÅÈØ!Ÿ}¾eÕêÎçC>;4ð]I[!ºÜJ Y%‰ÑBôe‘y"™(<.\Så’Ð%#k¥íb‰Qg{Õ`°êÎÝŒ¿A’§ªBö]G{eE“áß5VµNqe4»â»9ðB�Zâ²<„ÐKs‚Ä¢x6±�t)6{Ôv»˜ö(´"Z¬QïlÝ®RÒ´X©‰ÄmÒ·Ô6»öèÔôÞiü5’è̲ +å1w¯ÙÌ{°-û+w\o{îTÛHhk‹ewãÞ,ÉU” ‡›€³†bFà[ÄÉ–¤¦OI”rwÐ~øpUH�ëiÖdª�@ˆM¿#·ù�ãw™¼�¼(nT›ë:å*ø&‹çÞ/ò$ÐÙÚëær¢)ßáo[Í$
°Ú;Ö«Ìj’�¯ÒRà2aù¢ +9€ïSr +iÐñü3
Yéùü³hÑ1z}?ÿ,AV¼"¸4‹ =h�ø}ÇÁ1�=,<ÅáÙ‰º`ÜŒ˜BcÐê…’�lÅ 'î'Z]œ¿Wh�A=X¯ƒû(ŒìƒÙûàr¢!¡í„ç6虂÷dü8ºžGà]ÆG¡¤`½v¡~(]ðTÀ°0?\œ¿NèÛ½3èjA‚N˜µF� +endstream +endobj +650 0 obj +<< +/Length1 22996 +/Filter /FlateDecode +/Length 6808 +>> +stream +xœí<y|Ź3»º,[²eYZºïÓº-ß¶lÙñÛ±cÇŽ¯8Žc'8q—„ +h~èÇR�Åu3ô� +ºÙ0<ãÉä êYî3úûp?í8*§†ùû5p7 + ,ê +-ƾ/#sðȈ†¼x
R†jDzaª ©à$r¡´Âjn¦dJ¦dJ¦dÊ¿xÁQàÿ›†LÉ”LÉ”LÉ”LÉ”LÉ”LÉ”LÉ”LÉ”LÉ”LÉ”LÉ”LÉ”µB=�Jú7²}òŸ#4´¸bö.@3pW£<!3r¡Z4„FÐÚ…î0˜Nád‘ÿä°"ªgÇÇÙq”L&ÿzZ}î/"”þ(l $“¬]2¢EN4 +¥mÒMÒK¡Þõ0Ô�³½ÙcÙ·e¿”�ÈÙ–sÎ[2‰¬K6#û‰ì¤\#“ß-+·(·1÷¹‡sOæµåíË{(S35Sÿë/25S35S35S35S35S35SÿUªBÃÖQD¡©äè]êED£\„¢tˆ›l‘pY(¨Vˆöéçô%ÅVk1´§ð|ò�Í®ÕÚmºdUà·ñÌ´!)BH×gÙs™"¸¨a¼é +EÍ®…ÄlS™ÙfŽšÅJø Ë6<eÛ´ÓRcÝg¶®ÝdݶÛVmÛgî³î;Zõ|ÕPàvôèQ,z!!ò&OÒ½Ôk(è-AvBH¹„b‡0,‹„mf“HU ÆK>³/ÿMg窞+*ðd,që°Ó w:M&JÄ÷ò¸ðüu“;wN®;?ñ>õâ|Žéïíë_“x<õ‰352´$ORÇ€:/ª@�@.‹½,j㉠TˆÄLYY$B0‰ÄäIÁƒ]$¢ËéSË¢0D8Èßy®£Åo³®«ï4›Újž�g=–eª”e1Š¹Ý‘uG¯eª©ªÜòø�¶ª•šc¥‘éÜhEG¸ÀÛhXa¯·»kƒÅG¼ÃV»K]jh·MäJ]Î +|¤¸>ì(»m5‰å¥æ�Š–ÇZ;ɹ¬,:ÄêRÚCâUº�:üö�O’{p%õO¤ +°</SZ°<Lš\Ò¿†·C©†¯O¤ÄºÓD!?XÅ×XXš4Xi62o×¢\9*ÍlÂzÇÐfü15ŠDY«J(Ä'zñƒ‰Gp÷æãæ÷ŸxðÇлøcü.¬¹ðƒ}B‹Á[ð&þ~UÕUU§ÃŠF +¿ó`™8wFV’—$¶ra?rÎ=£ñî_¿å†ŽêÕ¥žj¹PUr4»45ãM_®£0D¬…º*GËžÞÖËgêz.ïî¹ÈÍ®1yŠ„6‘!ß[çÈwíïºã¼��_ÖÞíКýËýn{ØÚQé(ÏÏQ%Õz¹ÙX»cåÀŽššíwMÍ^^Ö[¬µ8ÏZ©;*Ï+ëé7„ÃÜ7§©#À«ö +U†”l4a„'² ìF10tL ì ±R«ÍÿSç;Ùz,ñS-8_زæ�Ú¼b‰XpéüTÏüõzµËå—ägoÙP¨¸°ñaO§ÅÒà#s³Þ€·¼�kÁ³°fÚÈ©‰ŠÈÛȇaf…2Õ±ÉLþ€Q†s.þæ²H¼?‘4ÄšûÇûšc`-ñß=…®UÃ� +AÎ`÷|u}K[4ñyâPCwg{âu6þ8IÅaß™Nó“€Ó¼°ÿÙ¥ão˜¸¼©õê
ë×ê�gë˜{¸µµ·H’]:&¾{væî‘z¿Á¦¯²ºapoGÈ$Tæ…Y="<Þ<*ÉŽø:‡"³=�§à-÷·^³‰Ù±ãÜ)V~ôýMw„¸þ¶ù[Èn P› +ÃB�Ý{ß§Ÿñ¹…â°ØÅxðàNv‰“�Äë£ûa¶`kÏ›s\2!˜…ìôÝõé§~“‘@ýPü°|ÙÛ�׈Ûç¤ý$HÛuvir9m$JR¿vîæö®[·Ïn.³U¾9³õrm™*``�@ãnLý
wŠDwn�Úc“’Ó/¡4^8Æ¥ø¸(ÆÈ{è‡Ü’˜áŽ›ˆÍÜHâÜÏÀHj…àþâ‹À,Ü*Cîÿ;ó +>õ8˜ƒ’<‘ÌKAsaÌé`@—²³ÜÕ†Á5SõŸøŒ+š©I޼ù;×;y™üà„ÏHM”‹ « +œ’R¡gþw%.Uû<<ú€—fQBJe(}¡£ +ÚL+–²õ·—ý'Sâ$m°Qï–½o3Ñ)n柧ªSKâR;)õüEÔ…ó'8'|¼
xMix1ç�›±b©j=‰×Ãõ<,Kì]¢Nóoàgøe»�ªOYYQ¨öуÔëÿ‹ø~ûÆ+›š®Ú8¹¯µõÊÉ-CC³[FF¸ø~hh!¾¿ë.6¾ç¬T„]ó™¿åétcU´{gè܉º€ÑX;ÔÕÜOÑ?»¶jºþ0ìÜ´blåŠÄýõÅ,õÅ¡ÞÎe~ù¬ŽZÄÁ²Aù"“Íâ¡óª9V*6w‹ìu޼÷x†Ž;Æû¤c§8¦ÆoÏ�w|8�5޳€3+*MãÌÀ¥Ð¼†1ö¯3É©ºcO£eo±_OËk›\Ì·{a´ˆxœxJ3ŽDZ=9o9.™Ýö——ß;;»ã‰WˆFú!Jþ¬_éBFŒ²Hlö³¸†•Èçk'm&JSékìÐ6V�ULÔ
®u[TWe½6^9°öRig�ÎêlõÆj¬!O¡m}OÅ +wÜc0ê+mµaGÔ]h]>¶h(à}mÉ‚H,N¢æ”]gy¿�1ÖxL0éTˆØu“wÜob€MÊMüqó¿çwn.hãOXÙ²çéVmq¤,Þxîe)Û1ÚÚßëþnéô.| o-vjˆãýüÓܺmüÿÏPäÁQ�-…äÄ€�bÀ@(‰ÕJaÓæ•RƒV†•$,Ùœ«–HÔy›Âæ3¥V§x¹•:Ç â‚’Ä3ž•KO)®Ía$—K˜ˆàËBH |þ³á�1M›GR¸…ô°pÈv´\(W‹%JÙ +…‚°¿$” l˜?e9¢Q>?åO/XËÁc¶›åñv™Ý8°u{oŽÃisÈ\î@O`xHc¢¿�'Q9"Êš–ú¾˜´³§»C@W[¢MÀ 5™]ÊαļKçê׸‹jÛëWЂšªb¹ó�pd@v¯ÛÍbóRÎXS*;Ãñ(ž¨lU‹òï�!y +SXÀ´TNlذ½¡¢¢±³²R°wqÂŽJ d—–]z͵—ÕÏn8gÆ™éYþ„ã�ƒñk>ÏÌŸäpá#ª—4LUUMÖ¹ºÃ^�9h«Ð/ëö5)¶viùykÏ9?¤öšMZ_ܱnõÆ
v½¼ˆñh�CÀAÙ<\˜Ê\™ ãwÔ‚”Ó<-
̰LÒ4áÚál�ºÅ¼u�RÂMÀ^TSØCüú¹pY]ZVOX›Ý°q#âpãw�?2°EÜŸ.MA”Üé Öo:nãølâQª½%Üš/αuZÕÑ¡ôš‹¯Ü¿sGé¦ w �/+(5â¦îñ¡~¢‘`õñ“4µÄ»CÙ8'E•Šd
,“%`”‡†Æz:kK-›ÛpÕU~“�¸ö¾àà˜]_¢Õêª|‰½¬ÆÓˆIæQr*ŠÊQ\ÐUÛâ•Ȳl):î¼…$ÒÜòñÇÁÓ®9cÆ-°ú½ééŽ@�YorûFG-õryШÓidL�B=8”£—*5Œ}ë`ÇEÛgÀïrkZ:õáàZMÐ .ÿdySUuV–Ó óä÷û' +dy6½J¥ÏfrTî¶µ4%Õ1ù+cý“øÏÕ±x}Cc}ub…>j.Õç:Z_ È1–k´Ä�ã‘ +„¸UãÔDÁË”}Ê絟¢„¥“ýCnýP ¦¶*`¤SšÿÇ|»fhdêC�'Œµ´½ +1Ñ
’Æ„ +±ÄŠ †yó YQgv9[¬�)×�ݶàcGy`ÿMËBÔ"ä¢rFlN�²K]êýñR^�F“Ÿ87uKUʤœ^â§¼+ ”ô点)Bˆã›HöE€‰ŸÃ¿dý~újò‡ëœ •S¼<Œ4ÁCW)”邞hÄ,ÔjljiÀ¨I-ä„.¨µ™õ§ÕoÕÞÆi�üÎ�”yS›ÿË›˜,95§¸dØ¿±ý¶}µZ›ã«‰T¨"�P£qª¯¥ÍjvyBžŠÆHƒ~FZ.Ñå„ÛCŽ"ƒ^Ÿ+ÜñÖ2[‰1Xî5Ûœ%jO¥«³‹ð©üÔwˆw"øÁ'�·™‡RžU"Ñ'Mùž<…Z\úo¹Lùº<YXÚÔ�;¹Šü°íüŠÄÃ!¿€öˆ¤ +
äMÅþª�†¬#áÁrü8{¼(ø!
*´µº…n +|‚x±hʱQáãííÖ*‹¥êÕºžÞÚ’ºhY} ñÑRˆøÿûˆïì1 ‘Ÿµ4"h©æ"ÂiÁaâ(¼pÂoÊç¢Äœé.J\/þzÄȾÃÇŽ,¥Ô´x1[L§”÷YƳÓ5wþÈhÐYð„ÊU¸—Þ}L‹ä膿áµi~³¯Ý¥eã]ÀÓ@þçd5ùö� +°uA]½Ô¼ÅYÞ´yg‚lH{§Ÿýd;|6‹6³.â2Àì9˜3o8ÓðÖfV > +endstream +endobj +651 0 obj +<< +/Length1 3052 +/Filter /FlateDecode +/Length 1781 +>> +stream +xœÍV]lÛW?÷ÿ·ÿþŠ;¶ãø3¶ÿþŠ¿âØñßNݺi“8éÒ6#MÒ¦¥¥V›%Ùâ&k³*ÙDãMCTLBˆMÛš4¤jÒ64<À+eâ
i0!�ö0Ä´‰‡±/i6¿û·�%¥ð€Ä=º÷žsï=÷œs?ˆQí’HcS“Uq[¬™v1º>{f(·þÍË›}ùJ½¶©ñk +D¢ôS+µ›è�›¶ÑëWÖwxß7'ÒÌi-«Ëµ«þ·Ïþso *«Ð} } +ò4 ëõmWA8úEÔÕõ�+5·¹ÿ#Èó¯ÕkÛ›t‘ʘƒL +\«Õ—ÃÕ¯®bìÃÍ�[ͧ)ýçø<ñ½ì7¥á·l_ë9üÒ‰Åýi÷wŸðþÏGGšï5?§ %¨UÀ§I7ÞóÌ¿ 4À÷{Ú_Ϋ²ÏÓ¡6£»‹F8Ín‘2žÎ5ÿN3¼§ûØ%ʱ㴂¤ÕÍÝÜS³³SlÖßlÙ I³–<Ïç„~Ꮊ3².u8TïýŸØ;Â{¶Ñ|ï¿æýÍýÇkÇ)©êy·Ý¿ßê;…e©ò/<g)u`Í›-šmÒ¤:ï&+ïPET;Z¦öâùíF¦‹dD4¦è-R�®Ð2Ñ5ºN[t³Ù$úò¹æ;÷†{dÒÿºÔ¿^¼'|FŸ±4 Þ†Û{ðI„`ðmîPÁ)û¹ð&¥q„¢…‘Š�Ïõ9ì’<•CÝ‚ÃÞ—Ï)Å¢R + ÌbëˆlôYº\= ¾3d(î�;„3j‹îɃ0§¯Ï¡´ô`8χ%“ŸÑx|�mÑ;qÆâZ%æ~ÅVrê?6Øl^OoãÕÂCG"áé×Ût�_¤æÃṫȎp"Ñ~þ22 V„Åh”ÈŠr—Šp©³˜¹;ù�Ý‚Ì}eIŠå*B±åÞaÜíÔ!�+7}i4|Äž +LzmжõvgW8¡ÕJ¡KNwq8jˆ˜ÎøX6h ³gF†Vj³Cv‹«ñ+S"Õ�ï1ùÌ^[*fºNÍ�OÌ'_îíMßwn)\QàØÈÞ…�òž…‚.¶ƒÎG¤ +K…èÉ�3S™d$P’>KI)TÆÈIcæBµ´óàñrÄ›ÈV““gæcÓ·®·/iy‚ýZøy?¨G’±ñýZĜƒ�„ÓuÎ|k^f¬¤dg¸¶'Ê +‡¼¹¸OßÑ{DùjÉä0î)e±ÉÌxìØé¿*ÐÂûa¢Ad€êï–vQÅ¿Hê}�‘¤¿¸‚žþ@ôB<©7jbbÐk6¼º†¾áq�7õxcŸ?ZŠ9•m?ë1yz�_v<oäÙ—BT… ¿cÕsU,V„BëLéDÙ¦ttëòJÛ,~¬¸Ü +öFjÈf�z«o RˆHÊÅyQôé
¯{Œƒ¥rÖ¬uK:Ù'÷ö—�£ÉÌÒéîDÆj�e¦Où›Ä¾×íÑø‰oŸO¹Êî›^Å™uúìnŒûƒÚoÄ]Ç^§“wE1…/;Œ¶T%�ˆÇR–~wa(jŠ^ìÈ¿5XMÆüò`8©,å^ƒôIø|Kxš|<â<Ámr~…�,î…üi]Ò9iHÞïϸwºvŽhu^—#m±úÇ��ôÙX ~ôÔc£�w\i‹Ïm6DH·6?fŸ +>ÜÝí�·ùg¾"òm´£Ëm¿¬•}Fý÷3Zƒž‰áñ¼?äMõÂùÙ…Ðyö:Npã`uÔ*/.ÍÁúÁX2WÞ}l%däw®¼&ðUõ}á8£¨.P7=ÙÆERèm\³o�–nÓoÛ¸Dö(�ÓmÒ^™5ZÁº-ì"GY¦î^Žå€óWi°Bëx•t0N`Ç0²Ž~n�ÿ†J-£_†Ô›h¯båipo¡èŒ:¾F +endstream +endobj +652 0 obj +<< +/Length1 21312 +/Filter /FlateDecode +/Length 16549 +>> +stream +xœÅ¼w\ÇÖ0¼M��„$@€$Ôè]BtÑ‹mÜ{ǽ۱�z“X¬�ä¹Inzl'.¸Æ-6îÆ½w\SŒÍôÞ‘ô�ØÁ7÷~¿ç÷¾¼3Œ4»{fæœ3§ŽÖFPAìáƒ@�”q±£p¢B͸ë5|´ÐªïZ¿Aô+¸ž1zLì˜åƒñàÀõš™ïÏ|�¦A`°À n³–Ì\Θàå“%ÀõŹðüËòÛðü +Ú{Ð6A;40–‚ùÚh߬qg`L6Õ‡6uàþÇÐþì‡CSæø´cx@[ +-Z´ =€6Ú4hC � e9´ÃÐ~Aþ ¥‰ÈÅÜÿ~ߺÅÿóÍ�f€¶Úßèƒ9?ø÷þÔ‡qÈ‘{Þ÷÷1˜Ëÿ?H‚X54q€OÔúM ”ÎË ÖooÄ C‘hd2™ŒLE¦#@7ÿá.´X¬ˆ/hO8‰Ä"£� Vˆ™È¢~ËKërtDƒ –K–KÐwF–3–3ÿÙ*ëšnˆÒ +3øó¯² +Y�üŠü™:ø?ÈZĈ¬Cœ` òþ +dd‚˜ã$ˆH,×éBu:MˆZ£Vk´Ö‹P�õB.�‹Db‘ˆá@gÐé9�l½ö_@M=?Õ(äsCµC¤n +`’yøiT1WöFý=<懛ËLºyÿ +Åv£÷Qg‰Ë¸¨°q®nRäk‘¥Ž˜J»ŠÄ +:…ƒÂÝŠ¨ZÕ†ô#®¢P[o+ܘŸЊ9üQPÄÔ–�Jµ(5~¶JÀåÚÚr¹�*圸ÔE*•+‡3$:úÀ’É?†…�–¸HP>F‡‡ý4iÁþ˜ètôDÜ +O/?oµ*CºR—«[š¡Ryz{¿7ÿ@tT|°¯ï'))[FÞ¹%%åc_ßàø¨È½°g¿ï—ï… ‹o8Zz€�\üS±�þ{ÅïèÈÇS–**T£òüŸ‰†õc͇Îþ’¸Ê?n²D(DQñp]09â4À×ûã!)f,š��6~�§›Ý€º:+V$é>MXÿ‰6v�R¡¦øy° ll€ŸZ9O>Ððû¦,ìlß×øg¦lÛf4oKψÍåÎ)ßCDÁÖ_#‚yx¡i;v¥/óFnF[ +ìV<‚¨p¹PŽ[IѼ¥ô½cb‘uǦàfÔ'h4£Õqó5z>Ÿ‡ÚÙÛ©Õsãç«U~6'YéÃ�¹S~�ãBí›Tê6)2rý¤‰Û“<‡^ÀD›Ì9rO‡‰¢¾jõl½~uè~Ý*½~ŽZíëV/Š™»+"<FççÿyZÚ¶‘{GmKMûÌÏ_‹¢ž^ޱ@Ó·@L?Çä<�jÁðIÄ2í?xKË6ý{8°Í4�âÁA€wë‡�_Â~DÇš÷ãËÍ;Щ´ìm½?de˶Qð á"«n"(o°„+Én(Ÿˆi”ªùq†y uøYVZtÔsçì�‰IÅhÙ}6Ñ˼¼½4êùQsv„…G'FG훃·SóSº¿æ‡XEƒQ0+ ˜
zê¥é%jziûí¹sØNÓ<ûÔT��Ý +å¬ØØ¥’² (Ðg TfúïØq°µ»Ó³ÒÒŒ¡¡�Æ´´é»Ó·¼¹°ntì y/ÄOãç§QÏÕ‡¾¼'x…>tŽFíç«ÖÌ Õ¯ +ø1cæÏÁ¡ÉN\7·ñ1áÜÜÜ<Uªy1³·‡…Åhƒƒž6íëà d'ž—T6¨ +|]kõ×”íRŒ$ÖöÞD/£ñ·léi ñ)-øxP®”áƒeWàƒù@Žâ˜Z©Zœœ¼D©Ò D6†&EG\8ÿ`LL +˜uì‡~þ¡z?¿cñâ>õÜ£qñC‡ÅÇ™«@®@|«@r%§†U`‚mè�kæó"¡ùâuP¶+©ÉDÀŽØï¼€Rfƒ²Ø +óí"ôsz �Æš‡£ã«±“ŸÉK2�Æža�`tÔ€ì2ûG@§ØdóñÇè5ü +¥TªT®§Ÿ©Px¢‡âÂ#¶ÍøäTT4”¨SŸŒÛ•ŠB}Uªé™‰úЯ“½’þ©MTËåãG}¯
‰š�6äê"¯ÅWÒ†Lˆ +$S|‡¹¸Ê(^S:ç¼SQ™à¯ÕÅà¼xo°ÿ…/ï
�¿ŽÖë·fÌþUÇÜ—£ýaæ¬,}XTŽ»R±,}òÇJåÇS‡-U(Ý1µpÕ´´1 qïÑÓýèØQ©©wþ%þ]¨Î06ÎÌN£Óý‹ÂãKÀ#xä9B4o7S+×þ�C‚©î÷Ø7[žèVÿ6kÈ?|¼8-,<üÐꩇ“ÆMH¸0)yž»»ÚtÚ&ÔÃc¶Ãç£&Ä�Ðú}8œ1zÅå”ä‘C“Sî“^+.&%¥ã·C¼¼V±†¬ôÐxR6ièä"º7ä‡ aTÐ÷+B[]!¥®—O£ÛÌÓî²™1ÑK<EÎANêt�›BõQæÔßÿÝЄ¹2©Th·‘aCc° öÝ<èw@ý7æq„«U“‡¿³@œp°7`¶‚<câwdjp +Šš&uuËÑ~=6ve€›ßˆÍëAp¾Lëàì‚*²™ÓXlï’!!�à[…¡”TÝ�•ÆÒ®€E•ŽBqЇƒ¥êºÜü=þOóÖ‡¡úP½½½‡³³§=—ßfbdeá¿¡.¾‘‘¾N^v�,Ùr½€Šl˜{!Pñïñ$Ú‚~[kf '^š7tú4Úmf` WÌ›2ñ=ú>Å+^të™Ú_X½Å�Žlë�ÍÊ¢Í +œ½‡.’á½×ñ©ö.çqíy!î}ù¸�Esò´çÂHêFR)“£<®‡ØÉÃŽ/@
aov×0†Ý
þ;¾ƒ°Ó(æ‚ÝT‚#&ˤ²þ½�Y s´Ý�3á"'W©tv +ìë¡Å›ƒƒP…LæžEíìÇ`/FÁ*N”U}Gc´ƒ÷õÖ¥�1'W¾w“�c z1†„xòÞ°a+5Vm[9tØ*è`Ñê› øcÒÒn®;6-íÖ×¢á?„†ÆÆ††þ0\4ºt)Üþ4Ï b +xÀâï)%ƒ(‡\…pi4ï(˜c|åû9q(3û4?Tå¹4A;Sç䲌HŸ7QòCïuìDÐH™Ü†sœC¥iÖ(ƒŠžþq–¥A÷;’ôŽÏqê �.MóŸ¡ñÐ91‘–ÎØ¦Óm™=t–«›£››ëĈ°É2™2'J¯Ïš=õw½>:2T·qêйR©3*uöHŽŽéa‰k#ü¼¼ÞO‰Ÿ«Q‡ +¹2à¡4\$r–9;Ç+’?ñó òö^?G¥Ö ¸*‘H”ý(ó¤¬9Œ‚2.¼ÁÛª´qZÊ£a³O›ËQŸß§)Þã5š8±3Oë&5¸y¦º¸ÈÐMæÙ4ƒ¹ç;Ó±Ùßúøz2™¡IØÐh'ÇQ180Xó¬)%«ŸTðÞYDñø{Ns}Ý”ÑÚ‘...”ÒÿsìÂí:"¼¯K!tvuQ¸¯š€3}úÑŸz½vâêd +Ë;ê.¬"¨ƒƒ�0"£-_v(2Ê`ˆŠÊ^¶ü`d¤Ádã饘;Ë]áÉ$¼ýÜ3b"g¸«üX˜óEÇ~ý$-mذ´´'_›÷ý$uÈ�¡i©O²!Nj›û{ ÆSV-K1£‹¶*)å²Tô°ËX.Pù +Û5o9EÏi…R±(5rº»\!rvg0+Ö£{"?ŠŽþ<vüÏ:]TJTÔŽ) K5j/O…bºÎg´ŸÿÒdSÃ:Àbš¥ï, ãE…ƒ×Ð…ÿ`]þ7˜*Ð/Ö&®ôôðÕ(•scb¨‹œÔèè½32öFG'‰]\§'GŒ•Hœ
ááÛ3æìŠˆˆ=
“ÍŒˆš.“»C¦¼( üU&—ÏJHœãî.WÊåÓÂfü¢Õm™4×Ï/Mì4ÄÛk’לß`ëct¡?�›"—+¤RÙÌØPè©)Ï6x<ö�m=éâ�û¢Rù``w(ßtÍ´ +Û�s§ï0ú§Z�ßèã.1DGÇ6êMþÀ›3 }Ãa4è¨@¬û‰îÿ鴃∠+ñÓ&›Ý—}õjŸ×tÕüÅ�Ô~A®*b(ŠMÌ ÁWö}‹}iúèúÉ�èÇš¼6 +ºÏB(X Jn¨hi;6}—)ëSºo÷cÅ\Ìïa‡ûŸRô`‡1¿Çˆîºl�`Ð"ëo²”GAÅA(ªÒÐ +�Š�9™{Ì+øÑ‚ ŸéÌ¿¸q2ÿ¤Ã2ç,D3Ì¿,E¦ùÝož¼þõû¹DýúOP侀J0ÕG\õ÷1Xãö@‡Œºp O j”?Ч!Ψ~ OG”è¨þ> +y>¤îý}a¢™}qCÿ9ÐÇ6ºg O 2ôÈ@Ÿö׺èà90ç£�>qGŸ
ôYÀe#ns oƒp0õ@Ÿ3ÛAëÚ
Z‹;h~ûAsò`ž $Y~ã#ä=d2™�¬BdHøæ@D½1pg|�¨h« É�að¹ÔÚã–!f–ud,²¾çý÷�•Ö·)¨WÁ ++�ÓþPçÁ:Äj˜ÏF-C–Xï.ƒ:Y3͵ξ +Fø[g³î’�U=ÿ6£`ì<˜w12ÆÃìÖžn8Ôdè
ùfœï¿�üo´¾5®(XŸË÷¿Yc<\½á7Åã +a
opBz´‹ÈE¤fÿë¥p¬JjèÝcêm9°l +7jí·ëPP0Ô=¥l`ƒ‚Yì‡Aé(e�)sÉ·Žý~³6f}¯p½už”ޏ!¿£jô+4=�¥b3±�0ê·¥\Œã�g¨iLšŒ6‡¶êZ�¾šAc¼ÏÈg˜ß°´¬ÏXW¡V±LìLö-›p›Ã
g§Ïv¨í·¶»lóm;ìôvìJíÚ¸£¹möûŸxî¼0>�¿þÿºžåßz[Ÿð+ÿ[$ +v +N +n¿¯ÞÖvª:ðüjÔÛ:ôßêÇØ±5H‡“Õâ#;)ãÕã +ŠË*}÷ˆÝ£‡Œ_¸hñô1©žŽ{öìyÑæâ5jÔ¨x�ÑH…°õhg}S{Go{GWG¯ÉÂà²pŒtU«Õnbûžúâ3Ù»6nÜxyþüùÓÆ¤yò»‹Þ¼|™ËÆÅÅ…GD$¦¥OOO�ð��5$ÆÇzÙækˆî†§¥¥µf.D¥Z¦È�ÝóêÕ«Nš�=AÅ“!¦¶ÖÖú¶–êÒûõ=}fÔèZTTü¢¢Îlã䙘”ÄÎÉÉ9y4'÷Y=Ê`²Ùd?×Öåk�ò˜Ò™SÒ¢ü9�
Åo?´g[VÖ¶=‡ŽßxPÜÐiã‘:efé³W¯›:Íl®ÐÅM®„"wsqà²M�íõÕ•ÏI=“Ù~ÿâ‘YY{�¸ù°¸±›ÉS„
5aÆÌŒQ‰zëéêîEKowg[G§™Ù�ÙplYš‘°ÐY[2Æ)çüõ»�*:yA‘)#G
K†’”�”>*ÉX�Ÿ{ñŒ³‹D, ºq&Ý\]^^U¯kë›;;žÈEJÆðù|U@dzzºNÉ«xp÷ÞGǺMmUŽ=zå^áëêêVàŠ¢6|¾
Bà}xG]CSGO¯ +‚±¸2¸2¸â훦s`"�µ¯A$*k›ºUqIii¾»Ò¡ÚÈaã¦-€2}üÈ¡CSSÒv‘FJ£Ñiˆ¹¡TÉíí¬,~Vg1 +32fÎ̘:,9ÒKUZxýÌ™ãÙû²¶n%½_9ÚÓiæŽ.A4Sg¯<"Ø™ý*–ÝUòàÜÞ�Û¶nÙ²5kûŽã×÷9ÆÂÔ€_Osu][7ÝFèˆT¾jF�ÂcÇŽŸ¹xãEC;JïîF|¯�è´!Ch° ²¢ÓPŒ*´ªí5ê—ÛÑÛó�èÆ@ZHtxiH4ê–cD“Jð«�Eh„ž¨Ë*×d¡åó�H*‘¬
(ТÒ#NVØo +aFViéì¿«T›7Ì#3
æzÒ€:¬eÑh»÷©«šºn"ëaŽEÿBeÊV{YZúìÅ«×u�½ x"'©\A™D…\ê$â3Ñž¦º×¯^<+�>}úøi¡>î´ãyþíSGì‚ràHÎm›üçí(Gá§O1~:ɨ’8°A¼Ñµ£1m$U
Ý}–/¼,¦žÎIUɵ3GvlÞðÓO?mؼãðé«ÅUMtòÈs.[¶lÁìé#’£5dŒ³³„KG»;Z[º,jél©¯¨¬¬x]ÝÐÕcê묯ªn&8| ˜�ã§rrN_yÑÉñ +‹ŽK:lØÐ”ø¸X›˜^׋K§Nœ:uâ8ɬûDF»9p2¹¶"i€Vç)®.-zVZUßžéÓTVòøáý"quU;F8¸ù%$$ÈE¢³ªZìÂ#hmÕgÏž}\ÑŒb\É +žU6`v~~û Ø:i
C&Mš4~ôˆX- ªjƒÑÀÄ38<´³«{-×õà521̅ˬ{þðìRñ2?&:<<Tàçfsïž?¬öeɃ*Ú,l‰Ü3rкúúFp§}&³#¹÷(üÎ]Ï-îå;9½Áï×þ÷�˜Å‹'�-÷.Þ²Eqw3¬£¹�W••ÕuÅ9wnüí·#—w1DÚ¸á3f<ÉQÝ‚3l�ÝÜUj
Ë/Ð[îì•2zÚ’W_pâÀ0´Ûö¹WVV^ÛÜ‘)7õt5××¾|öäÑÂòÆn�ˆ1“3ú-¯¯««ˆÃ$2í˜\¡ÂS¦ö +‰MŒ
Ò¸®�¹¿¬¡Û†eç(U‡—½¨ií"Xr?_°ðv=„›’ËË´:�ÚE@câí
•Oª4¾¾¾2Ûö²—ÏËËËYw¯žËG�íÑæû¤Ž#�Œ‹��öu—ÉlÍÝ}`bAì8ÎQ¾înîj…”Ýöòî�KçÏŸ¿~/¿¦««£«×”Éíë��E˜«ž—ä6
ÈåÏìeV†¢ñ\g¸¼Ÿ?™Oà”™Á}ïßô[ƒå 9ýðÑ +…|{(ÞÕRó¢´¸°H«U9q»êËܼ +ßPHââô~ +¢©âÁÍ‹G³,pè]m-õ5Ö졺¶¾µÃD‡Ô‹‘}ôÒíǯIÇ””0?…-»¹äÁõ“'Ož¿ì)o1YÐL1Ø'¤›féíí£2”๺ᆔ~¿0(œ@å'*•JhDz•¹¦
K|øp̘ў2&Ϊvîܹ{ÿÑGÍ6£ÆŒI77?:¶ÿ��$
ÃÝœ™¨S +l¦_IlðéÜÒ»¢¢âå‹gOKón^»ãârþü¥‡¥%Ïž¿¬°R¨bu¼º6øeS T“4‹Å^,Å,$Ê&(ä!ø°´=}töæñ370wÀ˜79çlêßI +÷r´5÷¶·÷Zì[çÁ§- /ïØ±–e–÷l~}‘<~¶–Ö[ýò)䑸ùóqqFf\ÒM·é*ÿ1Î2Ç2Ô²š¹ç©L&sØ¡äۜР¸C4�·©Ã€|IvïÞÈ‘÷î‘ÈH#ÒiD7ï"‘T’T·pèsqdä‹‘‘$r}-êM"yƒ¢·A§ÊDeéeŠ7Ñ÷ �@Py0Ò»nàô[ÛÝkùØò§5ÿܸón³CHxtDdô…K—.^¼ù¤¼Ù9búg H&DM™P×:ЉÂ[Æè«(¼{ûî‹ç�íýÎ`ù1’$çäc�_âÜù†„iØ,#—ͤÓí
#æÎ_˜(éì0]Oîæ—Yhwkí“Ü|ˆ}!R«($ÃC""ƒý<DGÅËÐVWªH%Ü®ª'×.žÍÉÉ¡Óé6ËN(�)“¹{xù…F†ëÃaÙÜÛW/�ÑWYXbä¶õXú +r¯Á�Ë7¨;ÄÓ×-&#E©“f”:ÿÀЦ²Aùu`-µÍ:yï[:bìdJ,ŸRbÙVW^TpùÀ¾“jˆCO¹ê†Î›¿`d\�äÒ¶«±¥ÍHC»ÛÊOlZ'}¥×¸ ̯‹òôK¥‡‡ÆË×ÇÛÛ_¦}t×ä^Ä®ÞyTVkÄkÛM–LŠ˜-töºwý°@à`oËÆQ¤»½¥¾¡¡¾¹Ó‚b,޽Ã÷ßÿ°óèåZTl>mùŠË§
78¡5—�îü�¤ÙtâL=“Å`²ˆND™®=Ý]æN1d8à™‡ÇiÅ6�µ÷.ÍÊÊ:z1·–®‡ÒØÜ�0¸ö|k±·c ]Í�õõiiiÑÁž\¤åÉÝKÇ \¼SÐŒØyG§‘kxTäe?K}RGù(Ø*« +!…÷®‚k¾z¯°Am5A‘à"ƒ4¶ý²¾(\&C�PÿŽÔÔWUÕT¼ +Q‡³ˆÏuKÕÚcÇ>z””žìí$¹pmEŽTì±ópÎã†>™Ì˜±cÇDøHº?Ô�ˆ„<»L‚`Ú{E�ÄÉÜÆž¾L×¶ú’czD�]Ìl¨+<{tP~öf±‰· +#qÇ1£¸£ô¡5æºz+¿D卿hRÐJý¢$éɹpñrTÔ¥ó—kè®C'§ú‹p³ +¬!úd>I˜üæ®þ<!uò
ʦ*||}}< +‚‚‚uáÁ.v¶RY€·?iÄ̽]¤MÞƒ+ç²·oßžµÕb8UZÿ&Ï_ºttä¬�ù×OnýÝUîIklí¯-|RãÔ^reÓ¦MW +Ø(®‰µêýöÆÏJªQY@�¯T*eǸÛvËÃR—’¼š‡Gö€fdmß
™êõ3w +«2å]}Í/žÖ4ÕU?Íø¸´œí‘2sö<àúÜŒ©1®®^J ?“ë ÷ +ñqsv×DÄÄExB|ûöµW_¶wbL®³äÎ�Üye�f{‘Vph½&š½ƒ#$hB[fokGSuÉ[jµ\‴–?¾¶Šu7÷þãü¼÷so“:¶
—/ô÷V‹Ùlˆ« Ð<Œ€ÈA*“»ˆ!Ô¦›Úžƒ/¿ÿᣢúöönj¹}Ý�
uUå/Ÿ={þº¡û·3œ¢‰CC'Nœ<aܘáÃ
RAOÞ�âg�L['›ÖÚ²âÂÂË—IÔÍÍHŸ0açéÒ×m™‚ÒG™ë¾ýág*µÙºmçÎ Ö)4wî45A<x/¯¨ÞŒ²ìR•ÒŠÔÕÙEê®Ñh¤R
‰â¸‘uù²»„ˆÃB�ý3â“ $&ÄF]¾¼îí)màç2¬´túŒ™ÃÂ}8}/ÎÛ·}Û6È?\|Iää‰`ú%]W�îþí·ßN\}ü2ÏHäµ³ml2QGÒ¥ÐÇ8Qü²†&–xøëbbb %,¯¨|]Uôè1Œä9{†CˆìXA"i¡¬†÷sˆP¿u2=7.c˜šà“$öÅW_c^�–�1!XZ%ÜÐúhòzo€÷ +d?‰…¬2bþ³ü×½=©p¦N*»‚=ÖcËž_ΛC"0ӈ̀Ïu6Üø†kµNqÀ8¿§$cD#r>0Œzsò]SVô$¯àiÓgµ¸p�}x˜ŸÄž^_ZPú +c@ÚM4×UV´ã,Ë0Ëȹt×_}õÓO?ýº¾·g$8:5mHjJJ9a'Ùôº¥ Ä["ÁwPÁ`'è4#7Ö`äô:ðõQqÖÈ‘0¯µâàJýÞ¶ß`†w÷„ÙŒ×T;;“èÖÑF,#c§ÙJÒie�1Úܨ’ƒA´”§ÈIe?
$Œÿhˆ¨ªªxœ}¾mïÃm$PüÆ¥º¢\¬»êÐöõTùmß#”ãæ?lÑÂï-F[_<yx%güÌ…‹Hšêé3Uˆ(“õòñµ3OUî/ï¼ÎÄÕÁ ‰±?Kª$sóÑUoPðñ£Ó‡�KŸ,(‹pàȉ#»â‘{H²ù'É +I3t:
Ï‚¼˜®«·�’=S_oñ“-¹—Î��½|÷ÞÍó=II©©©écG§Å9\•ÿ—|r�ôK—ΉDññd&Š/7 »×ÒJK< 3±ÆÝlå›Ü×ëÁƒ¯÷íØ{èÄ5(7nVöðÅ®n’õ¿ý™síYe§³•Âùȶ�ò‘k8[·–={YU�Øòìl˜™Ž8�iÇçKtñ#€7SÇõöÝ=wèеÃk½œ�ßGyîj/oooo•«ëmnNOO�‹P9àµe%yyyù…Ååõ0oJÊåû%¥ÏËjZz!þq4u·×VV–Þ¹r&;;ûÜõ{/+›Í[$À~ÓKïèˆÛ…$Ozÿý÷3F'Hízrsv~AÒY¶\{®½r•ÖÖÂ[gþøóÀùÛù�§Ö64õÑù®nR§_6<—ÛÊ¡ÃR',^¼x¨^…ã¤ÓC?o•”¨+½tò +×ÑÍ͵U¥×ÏŸ>�sòБ3gÏ^¸\PZUßØØøôîã:S ¤µüð{�
߉a.¸uh÷Çî–uÛˆDìΗ·÷mûï6AJËF-¦îî>Ä‚Ñ0ÒÓbAi"¿ ¡‰d.tmJh +$665Ô×¾¾z3ïÙËÊêMh{k[W/ÝÆÑ7È–Íb2h8Ö; Ô›Ólø‘ôAȃ³FtKîTé4w®ö(ùOPAñAwÑŒ-F¼÷f¯^âQíüŸßh9¡Gô'�5Äá$ä0Mxîš°n
!-BФVxöàY×`‚áy1¥É¸ºYÝŒ—Ú¿� +‚ß¹«Ó‘_âQ–m/È/ÿzöFά1 kP>z[ÿSxJýï{vñ†R›äª{…]å÷“¼mHtî‚8ä(dSÐ÷�_Q'™•°H&iÇêrrj=Ã|•~4{zɪª*(Í«ª,ÃÚ�XŠDþ?�Ûxï +endstream +endobj +653 0 obj +<< +/Length 1308 +>> +stream +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (Adobe) +/Ordering (UCS) +/Supplement 0 +>> def +/CMapName /Adobe-Identity-UCS def +/CMapType 2 def +1 begincodespacerange +<0000> <ffff> +endcodespacerange +70 beginbfchar +<0037> <0054> +<0024> <0041> +<0036> <0053> +<0027> <0044> +<0003> <0020> +<0029> <0046> +<004c> <0069> +<004f> <006c> +<0048> <0065> +<0052> <006f> +<0055> <0072> +<0050> <006d> +<0044> <0061> +<0057> <0074> +<0053> <0070> +<0046> <0063> +<0862> <00660069> +<0051> <006e> +<0039> <0056> +<0056> <0073> +<0014> <0031> +<0045> <0062> +<0049> <0066> +<0026> <0043> +<0011> <002e> +<002c> <0049> +<0047> <0064> +<0058> <0075> +<0032> <004f> +<0059> <0076> +<005a> <0077> +<0033> <0050> +<0031> <004e> +<005c> <0079> +<0030> <004d> +<0038> <0055> +<0035> <0052> +<0028> <0045> +<0034> <0051> +<002b> <0048> +<002f> <004c> +<003c> <0059> +<0013> <0030> +<0010> <002d> +<005b> <0078> +<0015> <0032> +<004a> <0067> +<002a> <0047> +<0042> <005f> +<002e> <004b> +<0016> <0033> +<004e> <006b> +<003a> <0057> +<004b> <0068> +<003b> <0058> +<0017> <0034> +<0018> <0035> +<0012> <002f> +<0019> <0036> +<0025> <0042> +<001a> <0037> +<001b> <0038> +<001c> <0039> +<0054> <0071> +<000b> <0028> +<000c> <0029> +<002d> <004a> +<003e> <005b> +<0040> <005d> +<000a> <0027> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +endstream +endobj +654 0 obj +<< +/Type /FontDescriptor +/FontName /UAKETE+Noto-Serif-Bold +/FontFamily (Noto Serif) +/Flags 6 +/FontBBox [ -21 -128 222 714 ] +/ItalicAngle 0 +/Ascent 1068 +/Descent -293 +/CapHeight 714 +/StemV 80 +/StemH 80 +/FontFile2 649 0 R +>> +endobj +655 0 obj +<< +/Type /Font +/Subtype /CIDFontType2 +/BaseFont /UAKETE+Noto-Serif-Bold +/CIDSystemInfo << +/Registry (Adobe) +/Ordering (Identity) +/Supplement 0 +>> +/CIDToGIDMap /Identity +/W [ 3 [ 260 ] 10 [ 290 400 400 ] 16 [ 310 294 288 559 559 559 559 559 559 559 559 559 559 ] 36 [ 753 672 668 767 653 621 769 819 401 397 734 654 952 788 787 638 787 707 586 653 747 698 1067 732 693 ] 62 [ 414 ] 64 [ 414 ] 66 [ 459 ] 68 [ 599 649 527 649 571 407 560 667 352 ] 78 [ 636 352 986 667 613 645 648 523 488 405 667 606 856 646 579 ] 2146 [ 719 ] ] +/FontDescriptor 654 0 R +>> +endobj +656 0 obj +<< +/Type /Font +/Subtype /Type0 +/BaseFont /UAKETE+Noto-Serif-Bold +/ToUnicode 653 0 R +/Encoding /Identity-H +/DescendantFonts [ 655 0 R ] +>> +endobj +657 0 obj +<< +/Length 1578 +>> +stream +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (Adobe) +/Ordering (UCS) +/Supplement 0 +>> def +/CMapName /Adobe-Identity-UCS def +/CMapType 2 def +1 begincodespacerange +<0000> <ffff> +endcodespacerange +89 beginbfchar +<0037> <0054> +<004b> <0068> +<0048> <0065> +<0003> <0020> +<0862> <00660069> +<004f> <006c> +<0049> <0066> +<0052> <006f> +<0055> <0072> +<0050> <006d> +<0044> <0061> +<0057> <0074> +<004c> <0069> +<0056> <0073> +<0058> <0075> +<0047> <0064> +<0051> <006e> +<004a> <0067> +<0005> <0022> +<0024> <0041> +<0036> <0053> +<0053> <0070> +<005c> <0079> +<000b> <0028> +<000c> <0029> +<0059> <0076> +<0046> <0063> +<005a> <0077> +<0011> <002e> +<0045> <0062> +<005b> <0078> +<000f> <002c> +<003a> <0057> +<004e> <006b> +<001d> <003a> +<0033> <0050> +<002c> <0049> +<0026> <0043> +<0035> <0052> +<002a> <0047> +<0015> <0032> +<0017> <0034> +<0013> <0030> +<0039> <0056> +<0025> <0042> +<0014> <0031> +<0062> <00a0> +<0032> <004f> +<0031> <004e> +<0030> <004d> +<0028> <0045> +<0029> <0046> +<002b> <0048> +<0016> <0033> +<002e> <004b> +<0027> <0044> +<0018> <0035> +<0012> <002f> +<0019> <0036> +<0009> <0026> +<002f> <004c> +<0042> <005f> +<003c> <0059> +<0038> <0055> +<001a> <0037> +<001b> <0038> +<001c> <0039> +<003b> <0058> +<0010> <002d> +<002d> <004a> +<000a> <0027> +<0020> <003d> +<003e> <005b> +<0040> <005d> +<0054> <0071> +<085f> <00660066> +<005d> <007a> +<020e> <2022> +<0004> <0021> +<0008> <0025> +<004d> <006a> +<003d> <005a> +<001e> <003b> +<000d> <002a> +<0006> <0023> +<0034> <0051> +<001f> <003c> +<0021> <003e> +<0023> <0040> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +endstream +endobj +658 0 obj +<< +/Type /FontDescriptor +/FontName /ENATNB+Noto-Serif +/FontFamily (Noto Serif) +/Flags 6 +/FontBBox [ -12 -142 867 713 ] +/ItalicAngle 0 +/Ascent 1068 +/Descent -292 +/CapHeight 713 +/StemV 80 +/StemH 80 +/FontFile2 650 0 R +>> +endobj +659 0 obj +<< +/Type /Font +/Subtype /CIDFontType2 +/BaseFont /ENATNB+Noto-Serif +/CIDSystemInfo << +/Registry (Adobe) +/Ordering (Identity) +/Supplement 0 +>> +/CIDToGIDMap /Identity +/W [ 3 [ 260 332 408 559 ] 8 [ 896 742 220 346 346 500 ] 15 [ 250 310 250 288 559 559 559 559 559 559 559 559 559 559 286 286 559 559 559 ] 35 [ 921 705 654 614 727 623 590 714 793 367 357 700 623 938 763 742 604 742 656 544 613 717 675 1047 660 625 592 360 ] 64 [ 360 ] 66 [ 459 ] 68 [ 563 614 492 614 535 369 538 635 320 300 585 310 945 645 577 614 614 471 451 352 635 579 862 578 565 511 ] 98 [ 260 ] 526 [ 362 ] 2143 [ 708 ] 2146 [ 663 ] ] +/FontDescriptor 658 0 R +>> +endobj +660 0 obj +<< +/Type /Font +/Subtype /Type0 +/BaseFont /ENATNB+Noto-Serif +/ToUnicode 657 0 R +/Encoding /Identity-H +/DescendantFonts [ 659 0 R ] +>> +endobj +661 0 obj +<< +/Length 492 +>> +stream +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (Adobe) +/Ordering (UCS) +/Supplement 0 +>> def +/CMapName /Adobe-Identity-UCS def +/CMapType 2 def +1 begincodespacerange +<0000> <ffff> +endcodespacerange +12 beginbfchar +<0039> <0056> +<002a> <0047> +<0003> <0020> +<002c> <0049> +<0051> <006e> +<0057> <0074> +<0048> <0065> +<0055> <0072> +<0044> <0061> +<0046> <0063> +<004c> <0069> +<0059> <0076> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +endstream +endobj +662 0 obj +<< +/Type /FontDescriptor +/FontName /LETBFK+Noto-Serif-Italic +/FontFamily (Noto Serif) +/Flags 70 +/FontBBox [ -20 -8 505 541 ] +/ItalicAngle 0 +/Ascent 1069 +/Descent -292 +/CapHeight 541 +/StemV 80 +/StemH 80 +/FontFile2 651 0 R +>> +endobj +663 0 obj +<< +/Type /Font +/Subtype /CIDFontType2 +/BaseFont /LETBFK+Noto-Serif-Italic +/CIDSystemInfo << +/Registry (Adobe) +/Ordering (Identity) +/Supplement 0 +>> +/CIDToGIDMap /Identity +/W [ 3 [ 260 ] 42 [ 714 ] 44 [ 367 ] 57 [ 675 ] 68 [ 579 ] 70 [ 487 ] 72 [ 493 ] 76 [ 304 ] 81 [ 599 ] 85 [ 468 ] 87 [ 368 ] 89 [ 538 ] ] +/FontDescriptor 662 0 R +>> +endobj +664 0 obj +<< +/Type /Font +/Subtype /Type0 +/BaseFont /LETBFK+Noto-Serif-Italic +/ToUnicode 661 0 R +/Encoding /Identity-H +/DescendantFonts [ 663 0 R ] +>> +endobj +665 0 obj +<< +/Length 1374 +>> +stream +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (Adobe) +/Ordering (UCS) +/Supplement 0 +>> def +/CMapName /Adobe-Identity-UCS def +/CMapType 2 def +1 begincodespacerange +<0000> <ffff> +endcodespacerange +75 beginbfchar +<0076> <005b> +<000f> <004e> +<0001> <0020> +<002a> <006f> +<001e> <0063> +<002f> <0074> +<0020> <0065> +<002e> <0073> +<0077> <005d> +<0036> <0030> +<003d> <0037> +<0007> <0046> +<0037> <0031> +<007c> <002b> +<0067> <002d> +<008e> <007c> +<0017> <0056> +<001c> <0061> +<002d> <0072> +<0084> <003c> +<0024> <0069> +<0027> <006c> +<001d> <0062> +<000e> <004d> +<0002> <0041> +<001a> <0059> +<0028> <006d> +<0029> <006e> +<0022> <0067> +<0081> <003d> +<0074> <0028> +<0003> <0042> +<0075> <0029> +<0038> <0032> +<000a> <0049> +<0060> <002e> +<0014> <0053> +<0039> <0033> +<003a> <0034> +<003b> <0035> +<003c> <0036> +<0015> <0054> +<0005> <0044> +<0030> <0075> +<0008> <0047> +<0066> <005f> +<000c> <004b> +<0006> <0045> +<000d> <004c> +<0034> <0079> +<0016> <0055> +<001f> <0064> +<003e> <0038> +<003f> <0039> +<0004> <0043> +<0011> <0050> +<0019> <0058> +<0061> <003a> +<0085> <003e> +<002b> <0070> +<0031> <0076> +<0089> <002f> +<0010> <004f> +<0023> <0068> +<0026> <006b> +<0032> <0077> +<0021> <0066> +<0033> <0078> +<0013> <0052> +<002c> <0071> +<0035> <007a> +<0009> <0048> +<001b> <005a> +<000b> <004a> +<0096> <002a> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +endstream +endobj +666 0 obj +<< +/Type /FontDescriptor +/FontName /FCTWHU+Roboto-Mono +/FontFamily (Roboto Mono) +/Flags 4 +/FontBBox [ 0 -203 546 710 ] +/ItalicAngle 0 +/Ascent 1047 +/Descent -270 +/CapHeight 710 +/StemV 80 +/StemH 80 +/FontFile2 652 0 R +>> +endobj +667 0 obj +<< +/Type /Font +/Subtype /CIDFontType2 +/BaseFont /FCTWHU+Roboto-Mono +/CIDSystemInfo << +/Registry (Adobe) +/Ordering (Identity) +/Supplement 0 +>> +/CIDToGIDMap /Identity +/W [ 1 [ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ] 19 [ 600 600 600 600 600 ] 25 [ 600 600 600 600 600 600 600 600 600 600 600 600 ] 38 [ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ] 96 [ 600 600 ] 102 [ 600 600 ] 116 [ 600 600 600 600 ] 124 [ 600 ] 129 [ 600 ] 132 [ 600 600 ] 137 [ 600 ] 142 [ 600 ] 150 [ 600 ] ] +/FontDescriptor 666 0 R +>> +endobj +668 0 obj +<< +/Type /Font +/Subtype /Type0 +/BaseFont /FCTWHU+Roboto-Mono +/ToUnicode 665 0 R +/Encoding /Identity-H +/DescendantFonts [ 667 0 R ] +>> +endobj +669 0 obj +<< +/UAKETE 656 0 R +/ENATNB 660 0 R +/LETBFK 664 0 R +/FCTWHU 668 0 R +>> +endobj +xref +0 670 +0000000000 65535 f +0000000015 00000 n +0000000426 00000 n +0000001186 00000 n +0000104039 00000 n +0000104154 00000 n +0000106134 00000 n +0000106552 00000 n +0000106686 00000 n +0000106836 00000 n +0000106970 00000 n +0000107116 00000 n +0000107253 00000 n +0000107413 00000 n +0000107553 00000 n +0000107711 00000 n +0000107848 00000 n +0000107993 00000 n +0000108133 00000 n +0000108295 00000 n +0000108430 00000 n +0000108570 00000 n +0000108705 00000 n +0000108846 00000 n +0000108983 00000 n +0000109144 00000 n +0000109284 00000 n +0000109431 00000 n +0000109571 00000 n +0000109723 00000 n +0000109863 00000 n +0000110016 00000 n +0000110156 00000 n +0000110312 00000 n +0000110452 00000 n +0000110610 00000 n +0000110750 00000 n +0000110900 00000 n +0000112477 00000 n +0000113110 00000 n +0000113247 00000 n +0000113408 00000 n +0000113548 00000 n +0000113707 00000 n +0000113847 00000 n +0000114009 00000 n +0000114149 00000 n +0000114311 00000 n +0000114451 00000 n +0000114613 00000 n +0000114753 00000 n +0000114915 00000 n +0000115055 00000 n +0000115217 00000 n +0000115354 00000 n +0000115510 00000 n +0000115650 00000 n +0000115812 00000 n +0000115955 00000 n +0000116109 00000 n +0000116252 00000 n +0000116408 00000 n +0000116551 00000 n +0000116703 00000 n +0000116846 00000 n +0000116996 00000 n +0000117139 00000 n +0000117292 00000 n +0000117435 00000 n +0000117585 00000 n +0000117728 00000 n +0000117883 00000 n +0000118026 00000 n +0000118184 00000 n +0000118327 00000 n +0000118482 00000 n +0000118626 00000 n +0000118785 00000 n +0000118929 00000 n +0000119083 00000 n +0000119227 00000 n +0000119387 00000 n +0000119531 00000 n +0000119685 00000 n +0000119829 00000 n +0000119980 00000 n +0000120124 00000 n +0000120277 00000 n +0000120421 00000 n +0000120575 00000 n +0000120719 00000 n +0000120869 00000 n +0000121013 00000 n +0000121166 00000 n +0000121310 00000 n +0000121467 00000 n +0000121611 00000 n +0000121766 00000 n +0000121910 00000 n +0000122062 00000 n +0000123657 00000 n +0000124351 00000 n +0000124496 00000 n +0000124654 00000 n +0000124795 00000 n +0000124958 00000 n +0000125102 00000 n +0000125261 00000 n +0000125405 00000 n +0000125564 00000 n +0000125708 00000 n +0000125863 00000 n +0000126007 00000 n +0000126169 00000 n +0000126310 00000 n +0000126473 00000 n +0000126617 00000 n +0000126777 00000 n +0000126921 00000 n +0000127077 00000 n +0000127221 00000 n +0000127384 00000 n +0000127528 00000 n +0000127691 00000 n +0000127832 00000 n +0000127995 00000 n +0000128139 00000 n +0000128302 00000 n +0000128443 00000 n +0000128606 00000 n +0000128750 00000 n +0000128904 00000 n +0000129048 00000 n +0000129203 00000 n +0000129347 00000 n +0000129500 00000 n +0000129644 00000 n +0000129802 00000 n +0000129946 00000 n +0000130098 00000 n +0000130239 00000 n +0000130402 00000 n +0000130546 00000 n +0000130696 00000 n +0000130840 00000 n +0000130995 00000 n +0000131139 00000 n +0000131293 00000 n +0000131429 00000 n +0000131588 00000 n +0000131726 00000 n +0000131889 00000 n +0000132030 00000 n +0000132189 00000 n +0000132330 00000 n +0000132480 00000 n +0000132618 00000 n +0000132774 00000 n +0000132915 00000 n +0000133075 00000 n +0000133216 00000 n +0000133362 00000 n +0000134713 00000 n +0000135328 00000 n +0000135466 00000 n +0000135621 00000 n +0000135762 00000 n +0000135921 00000 n +0000136062 00000 n +0000136227 00000 n +0000136368 00000 n +0000136533 00000 n +0000136674 00000 n +0000136839 00000 n +0000136980 00000 n +0000137125 00000 n +0000137266 00000 n +0000137418 00000 n +0000137556 00000 n +0000137716 00000 n +0000137857 00000 n +0000138021 00000 n +0000138159 00000 n +0000138319 00000 n +0000138460 00000 n +0000138618 00000 n +0000138756 00000 n +0000138918 00000 n +0000139059 00000 n +0000139218 00000 n +0000139356 00000 n +0000139518 00000 n +0000139659 00000 n +0000139818 00000 n +0000139956 00000 n +0000140115 00000 n +0000140256 00000 n +0000140419 00000 n +0000140560 00000 n +0000140723 00000 n +0000140861 00000 n +0000141023 00000 n +0000141164 00000 n +0000141314 00000 n +0000141455 00000 n +0000141616 00000 n +0000141752 00000 n +0000141897 00000 n +0000142035 00000 n +0000142190 00000 n +0000142327 00000 n +0000142478 00000 n +0000142615 00000 n +0000142767 00000 n +0000145656 00000 n +0000145943 00000 n +0000146079 00000 n +0000146226 00000 n +0000146364 00000 n +0000146525 00000 n +0000146661 00000 n +0000146797 00000 n +0000146937 00000 n +0000147095 00000 n +0000147236 00000 n +0000149429 00000 n +0000149632 00000 n +0000151932 00000 n +0000152163 00000 n +0000152301 00000 n +0000152447 00000 n +0000154796 00000 n +0000155059 00000 n +0000155199 00000 n +0000155361 00000 n +0000155497 00000 n +0000155638 00000 n +0000155774 00000 n +0000155916 00000 n +0000157833 00000 n +0000158080 00000 n +0000158218 00000 n +0000158380 00000 n +0000158520 00000 n +0000158667 00000 n +0000160649 00000 n +0000160984 00000 n +0000161124 00000 n +0000161276 00000 n +0000161416 00000 n +0000161569 00000 n +0000161709 00000 n +0000161865 00000 n +0000162005 00000 n +0000162163 00000 n +0000162303 00000 n +0000162453 00000 n +0000162591 00000 n +0000162753 00000 n +0000162893 00000 n +0000163052 00000 n +0000163193 00000 n +0000166062 00000 n +0000166365 00000 n +0000166508 00000 n +0000166647 00000 n +0000166784 00000 n +0000166919 00000 n +0000167056 00000 n +0000167198 00000 n +0000167343 00000 n +0000167485 00000 n +0000167631 00000 n +0000167772 00000 n +0000167919 00000 n +0000170663 00000 n +0000170990 00000 n +0000171131 00000 n +0000171271 00000 n +0000171409 00000 n +0000171546 00000 n +0000171686 00000 n +0000171827 00000 n +0000171964 00000 n +0000172104 00000 n +0000172248 00000 n +0000172390 00000 n +0000172529 00000 n +0000172673 00000 n +0000172813 00000 n +0000172975 00000 n +0000175437 00000 n +0000175748 00000 n +0000175893 00000 n +0000176038 00000 n +0000176179 00000 n +0000176327 00000 n +0000176467 00000 n +0000176629 00000 n +0000176774 00000 n +0000176916 00000 n +0000177065 00000 n +0000177209 00000 n +0000177349 00000 n +0000177511 00000 n +0000180250 00000 n +0000180569 00000 n +0000180721 00000 n +0000180861 00000 n +0000181023 00000 n +0000181163 00000 n +0000181304 00000 n +0000181443 00000 n +0000181587 00000 n +0000181730 00000 n +0000181875 00000 n +0000182015 00000 n +0000182177 00000 n +0000182313 00000 n +0000182454 00000 n +0000184614 00000 n +0000184901 00000 n +0000185041 00000 n +0000185179 00000 n +0000185336 00000 n +0000185476 00000 n +0000185638 00000 n +0000185781 00000 n +0000185936 00000 n +0000186079 00000 n +0000186236 00000 n +0000187890 00000 n +0000188137 00000 n +0000188280 00000 n +0000188433 00000 n +0000188576 00000 n +0000188727 00000 n +0000190787 00000 n +0000191050 00000 n +0000191193 00000 n +0000191347 00000 n +0000191490 00000 n +0000191641 00000 n +0000191784 00000 n +0000191940 00000 n +0000193512 00000 n +0000193759 00000 n +0000193902 00000 n +0000194061 00000 n +0000194204 00000 n +0000194360 00000 n +0000195909 00000 n +0000196188 00000 n +0000196332 00000 n +0000196492 00000 n +0000196636 00000 n +0000196791 00000 n +0000196935 00000 n +0000197096 00000 n +0000197240 00000 n +0000197395 00000 n +0000198972 00000 n +0000199235 00000 n +0000199379 00000 n +0000199531 00000 n +0000199675 00000 n +0000199829 00000 n +0000199973 00000 n +0000200128 00000 n +0000201727 00000 n +0000201974 00000 n +0000202118 00000 n +0000202269 00000 n +0000202413 00000 n +0000202567 00000 n +0000204571 00000 n +0000204774 00000 n +0000206902 00000 n +0000207133 00000 n +0000207277 00000 n +0000207435 00000 n +0000209170 00000 n +0000209417 00000 n +0000209561 00000 n +0000209717 00000 n +0000209861 00000 n +0000210014 00000 n +0000212405 00000 n +0000212676 00000 n +0000212820 00000 n +0000212978 00000 n +0000213123 00000 n +0000213263 00000 n +0000213425 00000 n +0000213568 00000 n +0000213727 00000 n +0000215337 00000 n +0000215600 00000 n +0000215743 00000 n +0000215902 00000 n +0000216045 00000 n +0000216200 00000 n +0000216343 00000 n +0000216505 00000 n +0000218304 00000 n +0000218583 00000 n +0000218723 00000 n +0000218885 00000 n +0000219028 00000 n +0000219188 00000 n +0000219331 00000 n +0000219487 00000 n +0000219630 00000 n +0000219793 00000 n +0000221566 00000 n +0000221861 00000 n +0000222004 00000 n +0000222167 00000 n +0000222307 00000 n +0000222469 00000 n +0000222612 00000 n +0000222775 00000 n +0000222915 00000 n +0000223077 00000 n +0000223220 00000 n +0000223374 00000 n +0000225619 00000 n +0000225866 00000 n +0000226012 00000 n +0000226155 00000 n +0000226310 00000 n +0000226456 00000 n +0000228641 00000 n +0000228888 00000 n +0000229031 00000 n +0000229184 00000 n +0000229327 00000 n +0000229485 00000 n +0000231846 00000 n +0000232109 00000 n +0000232252 00000 n +0000232404 00000 n +0000232544 00000 n +0000232706 00000 n +0000232849 00000 n +0000232999 00000 n +0000234737 00000 n +0000234984 00000 n +0000235127 00000 n +0000235282 00000 n +0000235425 00000 n +0000235579 00000 n +0000237298 00000 n +0000237577 00000 n +0000237713 00000 n +0000237872 00000 n +0000238010 00000 n +0000238173 00000 n +0000238313 00000 n +0000238471 00000 n +0000238611 00000 n +0000238760 00000 n +0000240393 00000 n +0000240640 00000 n +0000240778 00000 n +0000240934 00000 n +0000241074 00000 n +0000241233 00000 n +0000242508 00000 n +0000242739 00000 n +0000242879 00000 n +0000243024 00000 n +0000244354 00000 n +0000244617 00000 n +0000244755 00000 n +0000244910 00000 n +0000245050 00000 n +0000245208 00000 n +0000245348 00000 n +0000245512 00000 n +0000246824 00000 n +0000247055 00000 n +0000247195 00000 n +0000247359 00000 n +0000248657 00000 n +0000248888 00000 n +0000249028 00000 n +0000249192 00000 n +0000250449 00000 n +0000250696 00000 n +0000250836 00000 n +0000250980 00000 n +0000251120 00000 n +0000251271 00000 n +0000252521 00000 n +0000252768 00000 n +0000252906 00000 n +0000253066 00000 n +0000253206 00000 n +0000253369 00000 n +0000254439 00000 n +0000254642 00000 n +0000255906 00000 n +0000256217 00000 n +0000256355 00000 n +0000256515 00000 n +0000256655 00000 n +0000256812 00000 n +0000256950 00000 n +0000257112 00000 n +0000257252 00000 n +0000257410 00000 n +0000257548 00000 n +0000257710 00000 n +0000257850 00000 n +0000258008 00000 n +0000259292 00000 n +0000259555 00000 n +0000259693 00000 n +0000259852 00000 n +0000259992 00000 n +0000260154 00000 n +0000260294 00000 n +0000260456 00000 n +0000261906 00000 n +0000262201 00000 n +0000262339 00000 n +0000262501 00000 n +0000262641 00000 n +0000262790 00000 n +0000262930 00000 n +0000263090 00000 n +0000263226 00000 n +0000263371 00000 n +0000263509 00000 n +0000263664 00000 n +0000266502 00000 n +0000266789 00000 n +0000266987 00000 n +0000267185 00000 n +0000267383 00000 n +0000267581 00000 n +0000267732 00000 n +0000267884 00000 n +0000268062 00000 n +0000268238 00000 n +0000268426 00000 n +0000268599 00000 n +0000268723 00000 n +0000268870 00000 n +0000269046 00000 n +0000269224 00000 n +0000269358 00000 n +0000269521 00000 n +0000269662 00000 n +0000269803 00000 n +0000269975 00000 n +0000270168 00000 n +0000270305 00000 n +0000270461 00000 n +0000270618 00000 n +0000270778 00000 n +0000270940 00000 n +0000271080 00000 n +0000271284 00000 n +0000271433 00000 n +0000271601 00000 n +0000271770 00000 n +0000271942 00000 n +0000272116 00000 n +0000272268 00000 n +0000272443 00000 n +0000272625 00000 n +0000272771 00000 n +0000272933 00000 n +0000273091 00000 n +0000273247 00000 n +0000273406 00000 n +0000273562 00000 n +0000273723 00000 n +0000273887 00000 n +0000274048 00000 n +0000274214 00000 n +0000274375 00000 n +0000274542 00000 n +0000274703 00000 n +0000274861 00000 n +0000275021 00000 n +0000275182 00000 n +0000275339 00000 n +0000275499 00000 n +0000275663 00000 n +0000275825 00000 n +0000275984 00000 n +0000276134 00000 n +0000276334 00000 n +0000276484 00000 n +0000276648 00000 n +0000276808 00000 n +0000276961 00000 n +0000277162 00000 n +0000277313 00000 n +0000277474 00000 n +0000277642 00000 n +0000277805 00000 n +0000278009 00000 n +0000278152 00000 n +0000278358 00000 n +0000278503 00000 n +0000278663 00000 n +0000278821 00000 n +0000278984 00000 n +0000279127 00000 n +0000279311 00000 n +0000279452 00000 n +0000279612 00000 n +0000279757 00000 n +0000279946 00000 n +0000280126 00000 n +0000280274 00000 n +0000280413 00000 n +0000280600 00000 n +0000280749 00000 n +0000280884 00000 n +0000281070 00000 n +0000281218 00000 n +0000281392 00000 n +0000281574 00000 n +0000281754 00000 n +0000281902 00000 n +0000282043 00000 n +0000282234 00000 n +0000282373 00000 n +0000282564 00000 n +0000282697 00000 n +0000282894 00000 n +0000283028 00000 n +0000283227 00000 n +0000283361 00000 n +0000283551 00000 n +0000283707 00000 n +0000283863 00000 n +0000284042 00000 n +0000284181 00000 n +0000284331 00000 n +0000284505 00000 n +0000284634 00000 n +0000284782 00000 n +0000284918 00000 n +0000284981 00000 n +0000290966 00000 n +0000297864 00000 n +0000299734 00000 n +0000316374 00000 n +0000317736 00000 n +0000317976 00000 n +0000318548 00000 n +0000318703 00000 n +0000320335 00000 n +0000320570 00000 n +0000321222 00000 n +0000321372 00000 n +0000321917 00000 n +0000322158 00000 n +0000322511 00000 n +0000322668 00000 n +0000324096 00000 n +0000324331 00000 n +0000324945 00000 n +0000325096 00000 n +trailer +<< +/Size 670 +/Root 3 0 R +/Info 2 0 R +>> +startxref +325183 +%%EOF diff --git a/docs/draft-tasd-0001.txt b/docs/draft-tasd-0001.txt new file mode 100644 index 0000000..613263c --- /dev/null +++ b/docs/draft-tasd-0001.txt @@ -0,0 +1,2158 @@ + + + + +Independent TAS Console Replay Research Group V. Grey + VG Interactive + Bigbass + 24 September 2022 + + + TASD File Format Specification Version 1 + draft-tasd-v0001-00 + +Abstract + + The *TASD* file format is used for storing "Tool Assisted Speedrun" + or "Tool Assisted Superplay" (TAS) data for TAS replay devices to + replay on physical video game console hardware. The format is + defined to be expandable for future needs. The format is also + defined to be parsable by programs that do not understand portions of + the format, whether that is due to incomplete support of the format + specification or due to new features being added to later versions of + the specification at a later date. + + This document defines the file format specification for *TASD* files. + +Table of Contents + + 1. Introduction + 1.1. Overview and Preliminaries + 1.1.1. Notation and Vocabulary + 1.2. Motivations + 1.2.1. Problems With Existing Formats + 2. Header + 3. Packets + 3.1. Assigned Packet Keys Without Descriptions + 3.1.1. General Keys + 3.1.2. NES Specific Keys + 3.1.3. SNES Specific Keys + 3.1.4. Genesis Specific Keys + 3.1.5. Input Frame/Timing Keys + 3.1.6. Extraneous Keys + 3.2. Assigned Packet Keys With Descriptions + 3.2.1. General Key Descriptions + 3.2.2. NES Specific Key Descriptions + 3.2.3. SNES Specific Key Descriptions + 3.2.4. Genesis Specific Key Descriptions + 3.2.5. Input Frame/Timing Key Descriptions + 3.2.6. Extraneous Key Descriptions + 3.3. Packet Payload Formats + 3.3.1. General Key Payload Formats + 3.3.1.1. CONSOLE_TYPE Packet + 3.3.1.2. CONSOLE_REGION Packet + 3.3.1.3. GAME_TITLE Packet + 3.3.1.4. ROM_NAME Packet + 3.3.1.5. ATTRIBUTION Packet + 3.3.1.6. CATEGORY Packet + 3.3.1.7. EMULATOR_NAME Packet + 3.3.1.8. EMULATOR_VERSION Packet + 3.3.1.9. EMULATOR_CORE Packet + 3.3.1.10. TAS_LAST_MODIFIED Packet + 3.3.1.11. DUMP_CREATED Packet + 3.3.1.12. DUMP_LAST_MODIFIED Packet + 3.3.1.13. TOTAL_FRAMES Packet + 3.3.1.14. RERECORDS Packet + 3.3.1.15. SOURCE_LINK Packet + 3.3.1.16. BLANK_FRAMES Packet + 3.3.1.17. VERIFIED Packet + 3.3.1.18. MEMORY_INIT Packet + 3.3.1.19. GAME_IDENTIFIER Packet + 3.3.1.20. MOVIE_LICENSE Packet + 3.3.1.21. MOVIE_FILE Packet + 3.3.1.22. PORT_CONTROLLER Packet + 3.3.2. NES Specific Key Payload Formats + 3.3.2.1. NES_LATCH_FILTER Packet + 3.3.2.2. NES_CLOCK_FILTER Packet + 3.3.2.3. NES_OVERREAD Packet + 3.3.2.4. NES_GAME_GENIE_CODE Packet + 3.3.3. SNES Specific Key Payload Formats + 3.3.3.1. SNES_CLOCK_FILTER Packet + 3.3.3.2. SNES_OVERREAD Packet + 3.3.3.3. SNES_GAME_GENIE_CODE Packet + 3.3.3.4. SNES_LATCH_TRAIN Packet (RESERVED) + 3.3.4. Genesis Specific Key Payload Formats + 3.3.4.1. GENESIS_GAME_GENIE_CODE Packet + 3.3.5. Input Frame/Timing Key Payload Formats + 3.3.5.1. INPUT_CHUNK Packet + 3.3.5.2. INPUT_MOMENT Packet + 3.3.5.3. TRANSITION Packet + 3.3.5.4. LAG_FRAME_CHUNK Packet + 3.3.5.5. MOVIE_TRANSITION + 3.3.6. Extraneous Key Payload Formats + 3.3.6.1. COMMENT Packet + 3.3.6.2. EXPERIMENTAL Packet + 3.3.6.3. UNSPECIFIED Packet + 4. Controller Input Formats + 4.1. NES/Famicom Controller Types + 4.1.1. NES Standard Controller + 4.1.2. NES Four Score + 4.2. SNES Controller Types + 4.2.1. SNES Standard Controller + 4.2.2. SNES Mouse + 4.3. N64 Controller Types + 4.3.1. N64 Standard Controller + 4.3.2. N64 Standard Controller with Rumble + 4.3.3. N64 Standard Controller with Controller Pak + 4.3.4. N64 Standard Controller with Transfer Pak + 4.3.5. N64 Mouse + 4.3.6. N64 Densha de Go + 4.4. GameCube Controller Types + 4.4.1. GameCube Standard Controller + 4.5. Game Boy Controller Types + 4.5.1. GB Standard Controller + 4.6. Game Boy Color Controller Types + 4.6.1. GBC Standard Controller + 4.7. Game Boy Advance Controller Types + 4.7.1. GBA Standard Controller + 4.8. Genesis Controller Types + 4.8.1. Genesis (Mega Drive) 3-Button + 4.8.2. Genesis (Mega Drive) 6-Button + 4.9. Atari 2600 Controller Types + 4.9.1. A2600 Joystick + 4.9.2. A2600 Keyboard Controller + 5. References + 5.1. Normative References + Copyright Notice + Authors' Addresses + +1. Introduction + + The Tool Assisted Speedrun Dump (*TASD*) interchange format is a file + format for storing data to allow "Tool Assisted Speedruns" or "Tool + Assited Superplays" to be played on physical video game console + hardware using TAS replay devices. Created to be hardware and + software agnostic, the *TASD* interchange format uses a key-based, + binary, packet format to break up pieces of information into easily- + parsable and forward-compatible chunks. The format is extensible by + simply defining additional keys or value types as necessary. When + parsing the file, software can skip any packets whose key is unknown + or unsupported. + + Keys can be used multiple times or completely omitted as needed. + This reusability eliminates the need of a predefined delimiter to + separate pieces of data such as a list of TAS authors. + + While files generated by emulator dump scripts should provide as much + information as possible, because keys are optional, the file can be + expanded later with any additional data as desired. No intermediary + file format is necessary. + +1.1. Overview and Preliminaries + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and + "OPTIONAL" in this document are to be interpreted as described in BCP + 14 [RFC2119] [RFC8174] when, and only when, they appear in all + capitals, as shown here. + +1.1.1. Notation and Vocabulary + + Data Types: + + (S) = String + (A) = Binary Data + (I) = Signed Integer + (N) = Unsigned Integer + (B) = Boolean + + We use the terms *byte* and *octet* interchangeably in this document. + + Unless specified otherwise, all multi-octet integers are big-endian. + + We use the terms *Tool Assisted Speedrun*, *Tool Assisted Superplay* + and *TAS* interchangeably in this document. + + In subsections of (Section 3.2), the term "in direct form" is used. + That term is defined to mean a packet in a *TASD* file directly + (first order packet) rather than a packet inside a TRANSITION or + MOVIE_TRANSITION packet (second order packet). + + String values MUST use UTF-8 encoding. If an example of a string + value is given, the example will be between quotation marks. The + quotation marks are not included in the string. Not all content + between quotations will be string value examples, so be aware of that + when continuing through this document. + + Unsigned and signed integers can have different bit widths. For + instance, an 8-bit integer can be used in one part of the + specification and a 64-bit integer can be used in another part of the + specification. + + Boolean values MUST be a single octet with the value of 0 for *FALSE* + or 1 for *TRUE*. + + [N octets] A sequence of octets with a length of N + + [00 7F FF] A sequence of octets 00, 7F, and FF in that order. + + *0-indexed* When counting sequentially, start counting at 0. + + *1-indexed* When counting sequentially, start counting at 1. + + In packet diagrams, a single octet is represented with a box like + this: + + +-----+ + | Var | <-- Vertical bars MAY be missing + +-----+ + + *Var* is a variable name. + + In packet diagrams, an arbitrary number of octets are represented + with a box like this: + + +=====+ + | Var | + +=====+ + + *Var* is a variable name. + + In packet diagrams, boxes can be connected like these examples: + + +-----------+-----------+ + | Var 1 (B) | Var 2 (I) | + +-----------+-----------+ + + In this example, *Var 1* is a 1 octet long boolean value and *Var + 2* is a 1 octet long signed integer. + + +-----+-----+===========+ + | Var 1 (N) | Var 2 (S) | + +-----+-----+===========+ + + In this example, *Var 1* is a 2 octet long unsigned integer and + *Var 2* is an arbitrary octet length string. + + In packet diagrams, boxes MAY have relative offset values above them + like in the following example: + + 0 1 2... + +-----+-----+===========+ + | Var 1 (N) | Var 2 (S) | + +-----+-----+===========+ + + In this example, *Var 1* is a 2 octet long unsigned integer and + *Var 2* is an arbitrary octet length string. + + Packet diagrams MAY be split into multiple lined sections like in the + following example: + + 0 1 2 3 + +-----------+-----------+-----------+-----------+ + | Var 1 (N) | Var 2 (I) | Var 3 (B) | Var 4 (I) | ... + +-----------+-----------+-----------+-----------+ + 4 5 + +-----------+===========+ + | Var 5 (N) | Var 6 (S) | + +-----------+===========+ + + In this example, enough variable boxes are in the packet diagram + to require being split into 2 sections to take up less horizontal + space in this documentation. The packet diagram is seperated by + an ellipsis (...) on the same text row as the variable names to + signify that the packet diagram is continuing. + +1.2. Motivations + + This file format's primary goal is to provide a comprehensive and + replay device agnostic TAS movie controller input dump format that is + usable for any console. Additional goals include: + + * No intermediary formats + + * Forward compatibility + + * High extensibility + + * Ability to easily generate using lua scripting in emulators + + Consideration was also given to how usable the format would be for + the software that interacts with replay devices (examples: methods of + ingestion/parsing, ease of ingestion/parsing in various languages). + +1.2.1. Problems With Existing Formats + + Most existing formats are either incomplete for some verification + needs or don't exist at all for some consoles. A format commonly + used for NES console verifications (r08) only encodes 2 standard + controllers worth of sequential data and a format commonly used for + SNES console verifications (r16m) only encodes up to 8 standard + controllers worth of sequential data. There is no built in way to + store *RESET* press timing information or indicate additional + settings/information. Non-standard controllers are also not + supported in commonly used formats. + + For consoles not as popular as the NES and SNES, controller input + formats would frequently be written in a way that is meant only to + work and not in a "standard" way. While that process works, it's + less than ideal for redistribution of console replays so that others + (especially with differing TAS replay devices) can also verify the + same TAS. + +2. Header + + *TASD* files MUST include a header, which MUST be in the following + format: + + 0 1 2 3 4 5 6 + +----+----+----+----+------+------+--------------+ + | Magic Number (A) | Version (N) | G_KEYLEN (N) | + +----+----+----+----+------+------+--------------+ + + Magic Number (Binary Data) [4 octets] + Version (Unsigned Integer) [2 octets] + G_KEYLEN (Unsigned Integer) [1 octet] + + *Magic Number* + 4 octet value that MUST be [54 41 53 44](ASCII value TASD). + + *Version* + Version of the *TASD* file format. Version currently MUST be a + value of 1. + + *G_KEYLEN* + Global length of *Key* values of packets. G_KEYLEN currently MUST + be a value of 2. + +3. Packets + + Packets MUST be in the following format: + + +=========+----------+==========+=============+ + | Key (A) | PEXP (N) | PLEN (N) | Payload (A) | + +=========+----------+==========+=============+ + + Key (Binary Data) [G_KEYLEN octets] + PEXP (Unsigned Integer) [1 octet] + PLEN (Unsigned Integer) [PEXP octets] + Payload (Binary Data) [PLEN octets] + + *Key* + Packet type (Packet key). + + *PEXP* + Length of *PLEN*. + + *PLEN* + Length of *Payload*. + + *Payload* + Payload/Content of the packet. + + *G_KEYLEN* + Length of *Key* in packets and is specified in the *TASD* file + header. + + All packets are OPTIONAL. + +3.1. Assigned Packet Keys Without Descriptions + +3.1.1. General Keys + + [00 01] CONSOLE_TYPE + [00 02] CONSOLE_REGION + [00 03] GAME_TITLE + [00 04] ROM_NAME + [00 05] ATTRIBUTION + [00 06] CATEGORY + [00 07] EMULATOR_NAME + [00 08] EMULATOR_VERSION + [00 09] EMULATOR_CORE + [00 0A] TAS_LAST_MODIFIED + [00 0B] DUMP_CREATED + [00 0C] DUMP_LAST_MODIFIED + [00 0D] TOTAL_FRAMES + [00 0E] RERECORDS + [00 0F] SOURCE_LINK + [00 10] BLANK_FRAMES + [00 11] VERIFIED + [00 12] MEMORY_INIT + [00 13] GAME_IDENIFIER + [00 14] MOVIE_LICENSE + [00 15] MOVIE_FILE + [00 F0] PORT_CONTROLLER + +3.1.2. NES Specific Keys + + [01 01] NES_LATCH_FILTER + [01 02] NES_CLOCK_FILTER + [01 03] NES_OVERREAD + [01 04] NES_GAME_GENIE_CODE + +3.1.3. SNES Specific Keys + + [02 02] SNES_CLOCK_FILTER + [02 03] SNES_OVERREAD + [02 04] SNES_GAME_GENIE_CODE + [02 05] SNES_LATCH_TRAIN (RESERVED) + +3.1.4. Genesis Specific Keys + + [08 04] GENESIS_GAME_GENIE_CODE + +3.1.5. Input Frame/Timing Keys + + [FE 01] INPUT_CHUNK + [FE 02] INPUT_MOMENT + [FE 03] TRANSITION + [FE 04] LAG_FRAME_CHUNK + [FE 05] MOVIE_TRANSITION + +3.1.6. Extraneous Keys + + [FF 01] COMMENT + [FF FE] EXPERIMENTAL + [FF FF] UNSPECIFIED + +3.2. Assigned Packet Keys With Descriptions + +3.2.1. General Key Descriptions + + [00 01] - CONSOLE_TYPE + Specifies console used on emulator when dumping the TAS controller + inputs. This packet type is OPTIONAL but SHOULD be included in a + *TASD* file and a *TASD* file SHOULD NOT contain more than 1 of + this packet type in direct form. Discussed in (Section 3.3.1.1). + + [00 02] - CONSOLE_REGION + Specifies video region of console used for the TAS. This packet + type is OPTIONAL and a *TASD* file MAY contain more than 1 of this + packet type. Discussed in (Section 3.3.1.2). + + [00 03] - GAME_TITLE + Specifies the name of the game the TAS is written for. This + packet type is OPTIONAL and a *TASD* file MAY contain more than 1 + of this packet type. Discussed in (Section 3.3.1.3). + + [00 04] - ROM_NAME + Specifies the name of the specific ROM file used for the TAS. + This packet type is OPTIONAL and a *TASD* file MAY contain more + than 1 of this packet type. Discussed in (Section 3.3.1.4). + + [00 05] - ATTRIBUTION + Specifies the name of someone involved in the TAS or the creation + or management of the *TASD* file in order to provide proper + attribution for work done. This packet type is OPTIONAL and a + *TASD* file MAY contain more than 1 of this packet type. + Discussed in (Section 3.3.1.5). + + [00 06] - CATEGORY + Specifies the run category of the TAS. This packet type is + OPTIONAL and a *TASD* file SHOULD NOT contain more than 1 of this + packet type in direct form. Discussed in (Section 3.3.1.6). + + [00 07] - EMULATOR_NAME + Specifies the emulator used while dumping TAS controller inputs. + This packet type is OPTIONAL and a *TASD* file SHOULD NOT contain + more than 1 of this packet type in direct form. Discussed in + (Section 3.3.1.7). + + [00 08] - EMULATOR_VERSION + Specifies the version of the emulator used while dump the TAS + controller inputs. This packet type is OPTIONAL and a *TASD* file + SHOULD NOT contain more than 1 of this packet type in direct form. + Discussed in (Section 3.3.1.8). + + [00 09] - EMULATOR_CORE + Specifies the core of the emulator used while dumping the TAS + controller inputs. This packet type is OPTIONAL and a *TASD* file + SHOULD NOT contain more than 1 of this packet type in direct form. + Discussed in (Section 3.3.1.9). + + [00 0A] - TAS_LAST_MODIFIED + Specifies when the TAS was last modified. Frequently used to + specify the date and time when the TAS was published. This packet + type is OPTIONAL and a *TASD* file SHOULD NOT contain more than 1 + of this packet type in direct form. Discussed in + (Section 3.3.1.10). + + [00 0B] - DUMP_CREATEED + Specifies when the *TASD* file was first created. This packet is + OPTIONAL but SHOULD be included in a *TASD* file and a *TASD* file + SHOULD NOT contain more than 1 of this packet type. Discussed in + (Section 3.3.1.11). + + [00 0C] - DUMP_LAST_MODIFIED + Specifies when the *TASD* file was last modified. This packet is + OPTIONAL but SHOULD be included in a *TASD* file and a *TASD* file + SHOULD NOT contain more than 1 of this packet type. Discussed in + (Section 3.3.1.12). + + [00 0D] - TOTAL_FRAMES + Specifies the total number of frames in the TAS. This packet type + is OPTIONAL and a *TASD* file SHOULD NOT contain more than 1 of + this packet type in direct form. Discussed in (Section 3.3.1.13). + + [00 0E] - RERECORDS + Specifies the total number of rerecords of the TAS. This packet + type is OPTIONAL and a *TASD* file SHOULD NOT contain more than 1 + of this packet type in direct form. Discussed in + (Section 3.3.1.14). + + [00 0F] - SOURCE_LINK + Specifies the source link for the TAS. This packet type is + OPTIONAL and a *TASD* file SHOULD NOT contain more than 1 of this + packet type. Discussed in (Section 3.3.1.15). + + [00 10] - BLANK_FRAMES + Specifies the number of blank controller inputs or frames to + prepend to the inputs of the TAS when played on hardware. This + packet type is OPTIONAL and a *TASD* file SHOULD NOT contain more + than 1 of this packet type in direct form. Discussed in + (Section 3.3.1.16). + + [00 11] - VERIFIED + Specifies whether the TAS is verified to run on hardware, also + known as "console verified", using the *TASD* file. This packet + type is OPTIONAL and a *TASD* file SHOULD NOT contain more than 1 + of this packet type in direct form. Discussed in + (Section 3.3.1.17). + + [00 12] - MEMORY_INIT + Specifies initial memory values used for the TAS. This packet + type is OPTIONAL and a *TASD* file MAY contain more than 1 of this + packet type. Discussed in (Section 3.3.1.18). + + [00 13] - GAME_IDENTIFIER + Specifies an identifier for the game the TAS is written for. This + can be checksums, hashes, or other identifying data. This packet + type is OPTIONAL and a *TASD* file MAY contain more than 1 of this + packet type. Discussed in (Section 3.3.1.19). + + [00 14] - MOVIE_LICENSE + Specifies a copyright license for the TAS. This packet type is + OPTIONAL and a *TASD* file MAY contain more than 1 of this packet + type. Discussed in (Section 3.3.1.20). + + [00 15] - MOVIE_FILE + Specifies the TAS movie data. This packet type is OPTIONAL and a + *TASD* file SHOULD NOT contain more than 1 of this packet type. + Discussed in (Section 3.3.1.21). + + [00 F0] - PORT_CONTROLLER + Specifies the controller type in specific console controller ports + for the TAS when played on hardware. This packet type is OPTIONAL + and a *TASD* file SHOULD NOT contain more than 1 of this packet + type in direct form. Discussed in (Section 3.3.1.22). + +3.2.2. NES Specific Key Descriptions + + [01 01] - NES_LATCH_FILTER + Specifies a latch filter time in microseconds for how long how + long to wait after a latch signal until new latch signals SHOULD + be accepted by the replay device. This packet type is OPTIONAL + and a *TASD* file SHOULD NOT contain more than 1 of this packet + type in direct form. Discussed in (Section 3.3.2.1). + + [01 02] - NES_CLOCK_FILTER + Specifies a clock filter time in tenths of a microsecond (0.1 + microseconds or 100 nanoseconds) for how long to wait after a + clock pulse until new clock pulses SHOULD be accepted by the + replay device. This packet type is OPTIONAL and a *TASD* file + SHOULD NOT contain more than 1 of this packet type in direct form. + Discussed in (Section 3.3.2.2). + + [01 03] - NES_OVERREAD + Specifies whether a high or low signal SHOULD be sent to the NES + console if the console clocks the replay device for more input + buttons than are expected for the latch. This packet type is + OPTIONAL and a *TASD* file SHOULD NOT contain more than 1 of this + packet type in direct form. Discussed in (Section 3.3.2.3). + + [01 04] - NES_GAME_GENIE_CODE + Specifies a Game Genie code for the TAS. This packet type is + OPTIONAL and a *TASD* file MAY contain more than 1 of this packet + type. Discussed in (Section 3.3.2.4). + +3.2.3. SNES Specific Key Descriptions + + [02 02] - SNES_CLOCK_FILTER + Specifies a clock filter time in tenths of a microsecond (0.1 + microseconds or 100 nanoseconds) for long how to wait after a + clock pulse before new clock pulses SHOULD be accepted by the + replay device. This packet type is OPTIONAL and a *TASD* file + SHOULD NOT contain more than 1 of this packet type in direct form. + Discussed in (Section 3.3.2.2). + + [02 03] - SNES_OVERREAD + Specifies whether a high or low signal SHOULD be sent to the SNES + console if the console clocks the replay device for more input + buttons than are expected for the latch. This packet type is + OPTIONAL and a *TASD* file SHOULD NOT contain more than 1 of this + packet type in direct form. Discussed in (Section 3.3.3.2). + + [02 04] - SNES_GAME_GENIE_CODE + Specifies a Game Genie code for the TAS. This packet type is + OPTIONAL and a *TASD* file MAY contain more than 1 of this packet + type. Discussed in (Section 3.3.3.3). + + [02 05] - SNES_LATCH_TRAIN (RESERVED) + This packet type is not yet designed and is intended to be + described in the future. Discussed in (Section 3.3.3.4). + +3.2.4. Genesis Specific Key Descriptions + + [08 04] - GENESIS_GAME_GENIE_CODE + Specifies a Game Genie code for the TAS. This packet type is + OPTIONAL and a *TASD* file MAY contain more than 1 of this packet + type. Discussed in (Section 3.3.4.1). + +3.2.5. Input Frame/Timing Key Descriptions + + [FE 01] - INPUT_CHUNK + Specifies a chunk of input data for the TAS when played on + hardware. All data from INPUT_CHUNK packets are concatenated + together in order of appearance in the *TASD* file. If the + INPUT_CHUNK packet type is used, the PORT_CONTROLLER packet type + MUST be used. If the INPUT_CHUNK packet type is used, the + INPUT_MOMENT packet type SHOULD NOT be used. This packet type is + OPTIONAL and a *TASD* file MAY contain more than 1 of this packet + type. Discussed in (Section 3.3.5.1). + + [FE 02] - INPUT_MOMENT + Specifies input data that is sent from the replay device to the + console with specific timing. If the INPUT_MOMENT packet type is + used, the PORT_CONTROLLER packet type MUST be used. If the + INPUT_MOMENT packet type is used, the INPUT_CHUNK packet type + SHOULD NOT be used. This packet type is OPTIONAL and a *TASD* + file MAY contain more than 1 of this packet type. Discussed in + (Section 3.3.5.2). + + [FE 03] - TRANSITION + Specifies when a transition or change occurs during a TAS replay + (example: console reset or changing of controller types). This + packet type is OPTIONAL and a *TASD* file MAY contain more than 1 + of this packet type. Discussed in (Section 3.3.5.3). + + [FE 04] - LAG_FRAME_CHUNK + Specifies a chunk of lag frames in a TAS based on the original TAS + movie. This packet type is OPTIONAL and a *TASD* file MAY contain + more than 1 of this packet type. Discussed in (Section 3.3.5.4). + + [FE 05] - MOVIE_TRANSITION + Specifies when a transition or change occurs in the original TAS + movie (example: console reset or changing of controller types). + This packet type is OPTIONAL and a *TASD* file MAY contain more + than 1 of this packet type. Discussed in (Section 3.3.5.5). + +3.2.6. Extraneous Key Descriptions + + [FF 01] - COMMENT + Comment data. This packet type is OPTIONAL and a *TASD* file MAY + contain more than 1 of this packet type. Discussed in + (Section 3.3.6.1). + + [FF FE] - EXPERIMENTAL + TASD file is using experimental packets. This packet type is + OPTIONAL and a *TASD* file SHOULD NOT contain more than 1 of this + packet type. Discussed in (Section 3.3.6.2). + + [FF FF] - UNSPECIFIED + Unspecified packet data. Can contain any arbitrary data. This + packet type is OPTIONAL and a *TASD* file MAY contain more than 1 + of this packet type. Discussed in (Section 3.3.6.3). + +3.3. Packet Payload Formats + +3.3.1. General Key Payload Formats + +3.3.1.1. CONSOLE_TYPE Packet + + CONSOLE_TYPE packets MUST be in the following format: + + 0 1... + +-------------+==========+ + | Console (A) | Name (S) | + +-------------+==========+ + + Console (Binary Data): [1 octet] + [01] - NES <Nintendo Entertainment System> + [02] - SNES <Super Nintendo> + [03] - N64 <Nintendo 64> + [04] - GC <GameCube> + [05] - GB <Game Boy> + [06] - GBC <Game Boy Color> + [07] - GBA <Game Boy Advance> + [08] - Genesis <Sega Genesis/Sega Mega Drive> + [09] - A2600 <Atari 2600> + [FF] - Custom + Name (String) [PLEN - 1 octets] + + *Console* + Game console the TAS movie is for. There are pre-specified + console types, but a *TASD* file MAY use [FF] to specify a console + that is not in the pre-specified console types. + + *Name* + Name of the console the TAS movie is for. SHOULD be empty if + *Console* is not set to [FF]. + + *PLEN* + Length of the packet payload. + +3.3.1.2. CONSOLE_REGION Packet + + CONSOLE_REGION packets MUST be in the following format: + + 0 + +------------------+ + | Video Signal (A) | + +------------------+ + + Video Signal (Binary Data): [1 octet] + [01] - NTSC + [02] - PAL + [FF] - Other/Unknown + + *Video Signal* + Specifies the video signal of the game console being emulated + while dumping the TAS movie controller inputs. + +3.3.1.3. GAME_TITLE Packet + + GAME_TITLE packets MUST be in the following format: + + 0... + +===========+ + | Title (S) | + +===========+ + + Title (String) [PLEN octets] + + *Title* + Game title the TAS movie is for (example: "Super Mario Bros. 3"). + + *PLEN* + Length of the packet payload. + +3.3.1.4. ROM_NAME Packet + + ROM_NAME packets MUST be in the following format: + + 0... + +==========+ + | Name (S) | + +==========+ + + Name (String) [PLEN octets] + + *Name* + File name of the ROM used for the TAS movie (example: "Super Mario + Bros. 3 (J) [!].nes"). + + *PLEN* + Length of the packet payload. + +3.3.1.5. ATTRIBUTION Packet + + ATTRIBUTION packets MUST be in the following format: + + 0 1... + +----------+==========+ + | Type (A) | Name (S) | + +----------+==========+ + + Type (Binary Data) [1 octet] + [01] - Author + [02] - Verifier + [03] - TASD File Creator + [04] - TASD File Editor + [FF] - Other + Name (String) [PLEN - 1 octets] + + *Type* + Function of the person who is being attributed. *Author* is meant + for a TAS movie author. *Verifier* is meant for a person who + initially console verified the the TAS movie using the *TASD + file*. *TASD File Creator* is meant for the person who initially + dumped the TAS movie controller inputs into the *TASD* file. + *TASD File Editor* is meant for a person who edited the *TASD* + file. + + *Name* + Name of the individual getting the attribution (example: + "OnehundredthCoin"). + + *PLEN* + Length of the packet payload. + +3.3.1.6. CATEGORY Packet + + CATEGORY packets MUST be in the following format: + + 0... + +==============+ + | Category (S) | + +==============+ + + Category (String) [PLEN octets] + + *Category* + Name of the TAS movie run category (example: "Any %", "100%", "No + Warps"). + + *PLEN* + Length of the packet payload. + +3.3.1.7. EMULATOR_NAME Packet + + EMULATOR_NAME packets MUST be in the following format: + + 0... + +==========+ + | Name (S) | + +==========+ + + Name (String) [PLEN octets] + + *Name* + Name of the emulator used to play the TAS movie while dumping + controller inputs (example: "FCEUX", "Bizhawk"). + + *PLEN* + Length of the packet payload. + +3.3.1.8. EMULATOR_VERSION Packet + + EMULATOR_VERSION packets MUST be in the following format: + + 0... + +=============+ + | Version (S) | + +=============+ + + Version (String) [PLEN octets] + + *Version* + Version of the emulator used to play the TAS movie while dumping + controller inputs (example: "2.7.0"). + + *PLEN* + Length of the packet payload. + +3.3.1.9. EMULATOR_CORE Packet + + EMULATOR_CORE packets MUST be in the following format: + + 0... + +==========+ + | Core (S) | + +==========+ + + Core (String) [PLEN octets] + + *Core* + Core of the emulator used to play the TAS movie while dumping + controller inputs (example: "NESHawk", "Gambatte"). + + *PLEN* + Length of the packet payload + +3.3.1.10. TAS_LAST_MODIFIED Packet + + TAS_LAST_MODIFIED packets MUST be in the following format: + + 0 1 2 3 4 5 6 7 + +--+--+--+--+--+--+--+--+ + | Unix Timestamp (I) | + +--+--+--+--+--+--+--+--+ + + Unix Timestamp (Signed Integer) [8 octets] + + *Unix Timestamp* + 64-bit Unix timestamp of when the TAS movie was last modified. + +3.3.1.11. DUMP_CREATED Packet + + DUMP_CREATED packets MUST be in the following format: + + 0 1 2 3 4 5 6 7 + +--+--+--+--+--+--+--+--+ + | Unix Timestamp (I) | + +--+--+--+--+--+--+--+--+ + + Unix Timestamp (Signed Integer) [8 octets] + + *Unix Timestamp* + 64-bit Unix timestamp of when the *TASD* file was created. + +3.3.1.12. DUMP_LAST_MODIFIED Packet + + DUMP_LAST_MODIFIED packets MUST be in the following format: + + 0 1 2 3 4 5 6 7 + +--+--+--+--+--+--+--+--+ + | Unix Timestamp (I) | + +--+--+--+--+--+--+--+--+ + + Unix Timestamp (Signed Integer) [8 octets] + + *Unix Timestamp* + 64-bit Unix timestamp of when the *TASD* file was last modified. + +3.3.1.13. TOTAL_FRAMES Packet + + TOTAL_FRAMES packets MUST be in the following format: + + 0 1 2 3 + +---+---+---+---+ + | Frames (N) | + +---+---+---+---+ + + Frames (Unsigned Integer) [4 octets] + + *Frames* + Total number of frames of the TAS movie. + +3.3.1.14. RERECORDS Packet + + RERECORDS packets MUST be in the following format: + + 0 1 2 3 + +---+---+---+---+ + | Rerecords (N) | + +---+---+---+---+ + + Rerecords (Unsigned Integer) [4 octets] + + *Rerecords* + Total number of rerecords of the TAS movie. + +3.3.1.15. SOURCE_LINK Packet + + SOURCE_LINK packets MUST be in the following format: + + 0... + +==========+ + | Link (S) | + +==========+ + + Link (String) [PLEN octets] + + *Link* + URL that points to the TAS movie or submission (example: + "https://tasvideos.org/4567M"). + + *PLEN* + Length of the packet payload. + +3.3.1.16. BLANK_FRAMES Packet + + BLANK_FRAMES packets MUST be in the following format: + + 0 1 + +------+------+ + | Frames (I) | + +------+------+ + + Frames (Signed Integer) [2 octets] + + *Frames* + Number of blank frames (inputs where no buttons are being pressed) + needed at the beginning of a TAS console replay of the TAS movie. + If *Frames* is a negative value, the value of *Frames* amount of + inputs of the TAS console replay of the TAS movie should be + removed. + +3.3.1.17. VERIFIED Packet + + VERIFIED packets MUST be in the following format: + + 0 + +--------------+ + | Verified (B) | + +--------------+ + + Verified (Boolean) [1 octet] + + *Verified* + Boolean value that is *TRUE* if the *TASD* file has been + successfully console verified and *FALSE* if it has not been + verified. + +3.3.1.18. MEMORY_INIT Packet + + MEMORY_INIT packets MUST be in the following format: + + 0 1 2 3 + +---------------+------+------+--------------+ + | Data Type (A) | Device (A) | Required (B) | ... + +---------------+------+------+--------------+ + 4 5... 6... + +----------+==========+==========+ + | NLEN (N) | Name (S) | Data (A) | + +----------+==========+==========+ + + Data Type (Binary Data): [1 octet] + [01] - No Initialization Required + [02] - All [00] + [03] - All [FF] + [04] - [00 00 00 00 FF FF FF FF] Repeating + [05] - Random + [FF] - Custom + Device (Binary Data): [2 octets] + [01 01] - NES CPU RAM + [01 02] - NES Cartridge Save Data + [02 01] - SNES CPU RAM + [02 02] - SNES Cartridge Save Data + [05 01] - GB CPU RAM + [05 02] - GB Cartridge Save Data + [06 01] - GBC CPU RAM + [06 02] - GBC Cartridge Save Data + [07 01] - GBA CPU RAM + [07 02] - GBA Cartridge Save Data + [08 01] - Genesis CPU RAM + [08 02] - Genesis Cartridge Save Data + [09 01] - A2600 CPU RAM + [09 02] - A2600 Cartridge Save Data + [FF FF] - Custom/Other Device + Required (Boolean) [1 octet] + NLEN (Unsigned Integer) [1 octet] + Name (String) [NLEN octets] + Data (Binary Data) [PLEN - NLEN - + 4 octets] + + *Data Type* + Content type of initial memory. If *Type* is not [FF], *Data* + SHOULD be empty (0 octet length binary data). + + *Device* + Device/Location that is to have memory initialized. + + *Required* + Boolean value that is *TRUE* if this memory initialization data is + known to be required and *FALSE* if the memory initialization data + is not known to be required. + + *NLEN* + Length of *Name* + + *Name* + Label for the memory initialization data (example: "CPU RAM", + "SAVE RAM"). If *Device* is [FF FF], *Name* SHOULD NOT be empty + (0 octet length string). + + *Data* + Raw memory initialization data. If *Data Type* is not [FF], + *Data* SHOULD be empty (0 octet length binary data). + + *PLEN* + Length of the packet payload. + +3.3.1.19. GAME_IDENTIFIER Packet + + GAME_IDENTIFIER packets MUST be in the following format: + + 0 1 2... + +----------+----------+================+ + | Type (A) | Base (A) | Identifier (A) | + +----------+----------+================+ + + Type (Binary Data): [1 octet] + [01] - CRC-8 Checksum + [02] - CRC-16 Checksum + [03] - CRC-32 Checksum + [04] - MD5 Hash + [05] - SHA1 Hash + [06] - SHA224 Hash + [07] - SHA256 Hash + [08] - SHA384 Hash + [09] - SHA512 Hash + [0A] - SHA512/224 Hash + [0B] - SHA512/256 Hash + [0C] - SHA3-224 Hash + [0D] - SHA3-256 Hash + [0E] - SHA3-384 Hash + [0F] - SHA3-512 Hash + [10] - SHAKE-128 Hash + [11] - SHAKE-256 Hash + [FF] - Other + Base (Binary Data): [1 octet] + [01] - Raw Binary + [02] - Case Insensitive Base 16 (Hex) - RFC 4648 + [03] - Case Insensitive Base 32 - RFC 4648 + [04] - Base 64 - RFC 4648 + [FF] - Other + Identifier (Binary Data) [PLEN - 2 octets] + + *Type* + Hash, checksum, or identifier algorithm *Identifier* is using. + + *Base* + Describes the data encoding of *Identifier*. + + *Identifier* + Game hash, checksum, or identifier data. + + *PLEN* + Length of the packet payload + +3.3.1.20. MOVIE_LICENSE Packet + + MOVIE_LICENSE packets MUST be in the following format: + + 0 + +=============+ + | License (S) | + +=============+ + + License (String) [PLEN octet] + + *License* + License information for the TAS movie (example: "Creative Commons + Attribution 2.0"). + + *PLEN* + Length of the packet payload. + +3.3.1.21. MOVIE_FILE Packet + + MOVIE_FILE packets MUST be in the following format: + + 0 1... 1+NLEN... + +----------+==========+=============+ + | NLEN (N) | Name (S) | Data (A) | + +----------+==========+=============+ + + NLEN (Unsigned Integer) [1 octet] + Name (String) [NLEN + 1 octets] + Data (Binary Data) [PLEN - NLEN - + 1 octets] + + *NLEN* + Length of *Name*. + + *Name* + Name of the TAS movie (RECOMMENDED to use TAS movie file name, for + example: "100thcoinv2-smb3j-geg.bk2"). + + *Data* + TAS movie file data/content. + + *PLEN* + Length of the packet payload. + +3.3.1.22. PORT_CONTROLLER Packet + + PORT_CONTROLLER packets MUST be in the following format: + + 0 1 2 + +----------+-----+-----+ + | Port (N) | Type (A) | + +----------+-----+-----+ + + Port (Unsigned Integer) [1 octet] + Type (Binary Data): [2 octets] + [01 01] - NES Standard Controller + [01 02] - NES Four Score + [01 03] - (RESERVED) NES Zapper + [01 04] - (RESERVED) NES Power Pad + [01 05] - (RESERVED) Famicom Family BASIC Keyboard + [02 01] - SNES Standard Controller + [02 02] - SNES Super Multitap + [02 03] - SNES Mouse + [02 04] - (RESERVED) SNES Superscope + [03 01] - N64 Standard Controller + [03 02] - N64 Standard Controller with Rumble Pak + [03 03] - N64 Standard Controller with Controller Pak + [03 04] - N64 Standard Controller with Transfer Pak + [03 05] - N64 Mouse + [03 06] - (RESERVED) N64 Voice Recognition Unit (VRU) + [03 07] - (RESERVED) N64 RandNet Keyboard + [03 08] - N64 Densha de Go + [04 01] - GC Standard Controller + [04 02] - (RESERVED) GC Keyboard + [05 01] - GB Gamepad + [06 01] - GBC Gamepad + [07 01] - GBA Gamepad + [08 01] - Genesis (Mega Drive) 3-Button + [08 02] - Genesis (Mega Drive) 6-Button + [09 01] - A2600 Joystick + [09 02] - (RESERVED) A2600 Paddle + [09 03] - A2600 Keyboard Controller + [FF FF] - Other/Unspecified + + *Port* + Controller port number (*Port* number MUST be *1-indexed*). + + *Type* + Specifies the controller type connected to the *Port*. + *(RESERVED)* specifies that the controller type is not described + in this document, but the byte values are reserved for a later + version of the *TASD* file format protocol. Input formats for + specific controller types are described in (Section 4). + +3.3.2. NES Specific Key Payload Formats + +3.3.2.1. NES_LATCH_FILTER Packet + + NES_LATCH_FILTER packets MUST be in the following format: + + 0 1 + +-----+-----+ + | Time (N) | + +-----+-----+ + + Time (Unsigned Integer) [2 octets] + + *Time* + Latch filter length of time in microseconds. + +3.3.2.2. NES_CLOCK_FILTER Packet + + NES_CLOCK_FILTER packets MUST be in the following format: + + 0 + +----------+ + | Time (N) | + +----------+ + + Time (Unsigned Integer) [1 octet] + + *Time* + Clock filter length of time in tenths of a microsecond (units of + 0.1 microseconds or 100 nanoseconds). + +3.3.2.3. NES_OVERREAD Packet + + NES_OVERREAD packets MUST be in the following format: + + 0 + +----------+ + | High (B) | + +----------+ + + High (Boolean) [1 octet] + + *High* + Boolean value that is *TRUE* if overread bits are set to high and + *FALSE* if overread bits are set to low. + +3.3.2.4. NES_GAME_GENIE_CODE Packet + + NES_GAME_GENIE_CODE packets MUST be in the following format: + + 0... + +==========+ + | Code (S) | + +==========+ + + Code (String) [PLEN octets] + + *Code* + Game Genie code (example: "AATOZA"). + + *PLEN* + Length of the packet payload. + +3.3.3. SNES Specific Key Payload Formats + +3.3.3.1. SNES_CLOCK_FILTER Packet + + SNES_CLOCK_FILTER packets MUST be in the following format: + + 0 + +----------+ + | Time (N) | + +----------+ + + Time (Unsigned Integer) [1 octet] + + *Time* + Clock filter length of time in tenths of a microsecond (units of + 0.1 microseconds or 100 nanoseconds). + +3.3.3.2. SNES_OVERREAD Packet + + SNES_OVERREAD packets MUST be in the following format: + + 0 + +----------+ + | High (B) | + +----------+ + + High (Boolean) [1 octet] + + *High* + Boolean value that is *TRUE* if overread bits are set to high and + *FALSE* if overread bits are set to low. + +3.3.3.3. SNES_GAME_GENIE_CODE Packet + + SNES_GAME_GENIE_CODE packets MUST be in the following format: + + 0... + +==========+ + | Code (S) | + +==========+ + + Code (String) [PLEN octets] + + *Code* + Game Genie code (example: "DDB4-6F07"). + + *PLEN* + Length of the packet payload. + +3.3.3.4. SNES_LATCH_TRAIN Packet (RESERVED) + + This packet type is not yet designed and is intended to be described + in the future. + +3.3.4. Genesis Specific Key Payload Formats + +3.3.4.1. GENESIS_GAME_GENIE_CODE Packet + + GENESIS_GAME_GENIE_CODE packets MUST be in the following format: + + 0... + +==========+ + | Code (S) | + +==========+ + + Code (String) [PLEN octets] + + *Code* + Game Genie code (example: "ATBT-AA32"). + + *PLEN* + Length of the packet payload. + +3.3.5. Input Frame/Timing Key Payload Formats + +3.3.5.1. INPUT_CHUNK Packet + + INPUT_CHUNK packets MUST be in the following format: + + 0 1... + +----------+============+ + | Port (N) | Inputs (A) | + +----------+============+ + + Port (Unsigned Integer) [1 octet] + Inputs (Binary Data) [PLEN - 1 octets] + + *Port* + Controller port number (*Port* number MUST be *1-indexed*). + + *Inputs* + Controller input data for controller on *Port*. Input values are + usually in native format (usually active-low). Input formats for + specific controller types are described in (Section 4). + + *PLEN* + Length of the packet payload. + + A single INPUT_CHUNK packet MAY contain up to every input of a TAS + movie console replay and MAY contain fewer than every input of a TAS + movie console replay. If there are more than 1 INPUT_CHUNK packets, + the INPUT_CHUNK packets MUST be in order of the TAS movie console + replay inputs, where earlier inputs in the TAS movie console replay + are earlier in the *TASD* file and later inputs in the TAS movie + console replay are later in the *TASD* file. + +3.3.5.2. INPUT_MOMENT Packet + + INPUT_MOMENT packets MUST be in the following format: + + 0 1 2 3 4 5 7 8 9 10 + +----------+----------------+--+--+--+--+--+--+--+--+ + | Port (N) | Index Type (A) | Index (N) | ... + +----------+----------------+--+--+--+--+--+--+--+--+ + 11... + +============+ + | Inputs (B) | + +============+ + + Port (Unsigned Integer) [1 octet] + Index Type (Binary Data): [1 octet] + [01] - Frame + [02] - Cycle Count + [03] - Milliseconds + [04] - Microseconds * 10 + Index (Unsigned Integer) [8 octets] + Inputs (Binary Data) [PLEN - 10 octets] + + + *Port* + Controller port number (*Port* number MUST be *1-indexed*). + + *Type* + Determines specific timing type for start of *Inputs*. + + *Index* + Time value to start sending *Inputs* data. + + *Inputs* + Controller input data for controller on *Port*. Input values are + usually in native format (usually active-low). Input formats for + specific controller types are described in (Section 4). + + *PLEN* + Length of the packet payload. + +3.3.5.3. TRANSITION Packet + + TRANSITION packets MUST be in the following format: + + 0 1 2 3 4 5 6 7 8 9 + +----------------+--+--+--+--+--+--+--+--+----------+ + | Index Type (A) | Index (N) | Type (A) | ... + +----------------+--+--+--+--+--+--+--+--+----------+ + 10... + +============+ + | Packet (A) | + +============+ + + Index Type (Binary Data): [1 octet] + [01] - Frame + [02] - Cycle Count + [03] - Milliseconds + [04] - Microseconds * 10 + [05] - INPUT_CHUNK Index + Index (Unsigned Integer) [8 octets] + Type (Binary Data): [1 octet] + [01] - Soft Reset + [02] - Power Reset + [03] - Restart TASD File + [FF] - Packet Derived + Inner Packet (Binary Data) [PLEN - 10 octets] + + *Input Type* + Determines specific timing type for start of transition. + + *Index* + Time or offset value to start transition. + + *Type* + Type of transition. If *Type* is [FF], the transition action will + be interpreting a *TASD* packet. + + *Inner Packet* + If *Type* is [FF], *Inner Packet* SHOULD be a *TASD* packet. + *Inner Packet* MUST NOT be a *INPUT_CHUNK*, *INPUT_MOMENT*, + *TRANSITION*, *LAG_FRAME_CHUNK*, or *MOVIE_TRANSITION* packet. + + *PLEN* + Length of the packet payload (Not *Inner Packet* length). + +3.3.5.4. LAG_FRAME_CHUNK Packet + + LAG_FRAME_CHUNK packets MUST be in the following format: + + 0 1 2 3 4 5 6 7 + +----+----+----+----+--+--+--+--+ + | Movie Frame (N) | Count (N) | + +----+----+----+----+--+--+--+--+ + + Movie Frame (Unsigned Integer) [4 octets] + Count (Unsigned Integer) [4 octets] + + *Movie Frame* + Frame number of the TAS movie where Lag Frames start (*Movie + Frame* MUST be *0-indexed*). + + *Count* + Number of Lag Frames in a row starting from *Movie Frame*. + +3.3.5.5. MOVIE_TRANSITION + + MOVIE_TRANSITION packets MUST be in the following format: + + 0 1 2 3 4 5... + +----+----+----+----+----------+==================+ + | Movie Frame (N) | Type (A) | Inner Packet (A) | + +----+----+----+----+----------+==================+ + + Movie Frame (Unsigned Integer) [4 octets] + Type (Binary Data): [1 octet] + [01] - Soft Reset + [02] - Power Reset + [03] - Restart TASD File + [FF] - Packet Derived + Inner Packet (Binary Data) [PLEN - 5 octets] + + *Movie Frame* + Frame number of the TAS movie (*Movie Frame* MUST be *0-indexed*). + + *Type* + Type of transition. If *Type* is [FF], the transition action will + be interpreting a *TASD* packet. + + *Inner Packet* + If *Type* is [FF], *Inner Packet* SHOULD be a *TASD* packet. + *Inner Packet* MUST NOT be a *INPUT_CHUNK*, *INPUT_MOMENT*, + *TRANSITION*, *LAG_FRAME_CHUNK*, or *MOVIE_TRANSITION* packet. + + *PLEN* + Length of the packet payload (Not *Inner Packet* length). + +3.3.6. Extraneous Key Payload Formats + +3.3.6.1. COMMENT Packet + + COMMENT packets MUST be in the following format: + + 0 + +=============+ + | Comment (S) | + +=============+ + + Comment (String) [PLEN octet] + + *Comment* + Comment text. + + *PLEN* + Length of the packet payload. + +3.3.6.2. EXPERIMENTAL Packet + + EXPERIMENTAL packets MUST be in the following format: + + 0... + +==================+ + | Experimental (B) | + +==================+ + + Experimental (Boolean) [PLEN octet] + + *Experimental* + Boolean data that is *TRUE* if the TASD file is using experimental + features (Currently SHOULD be TRUE). + + *PLEN* + Length of the packet payload. + +3.3.6.3. UNSPECIFIED Packet + + UNSPECIFIED packets MUST be in the following format: + + 0... + +======================+ + | Unspecified Data (A) | + +======================+ + + Unspecified Data (Binary Data) [PLEN octets] + + *Unspecified Data* + Arbitrary data. Can be used for any data. Because this is + unspecified data, there there is no guarantee any software to + control a TAS replay device will support data in this packet type. + + *PLEN* + Length of the packet payload. + +4. Controller Input Formats + + A forward slash (*/*) is used to signify *active low*. As an + example, if a bit is labeled as */A*, the bit MUST be 0 if the A + button is pressed and MUST be 1 if the A button is not pressed. + + Multi-octet controller inputs are in little-endian order + + Bit order for octets in controller inputs are high-order (MSB) (Most + significant bit to least significant bit), so bit 7 MUST be the left- + most bit of the octet and bit 0 MUST be the right-most bit of the + octet. + +4.1. NES/Famicom Controller Types + +4.1.1. NES Standard Controller + + Single Input Length: 1 Octet + + *Octet 0* + + Bit 7: /A + Bit 6: /B + Bit 5: /Select + Bit 4: /Start + Bit 3: /Up + Bit 2: /Down + Bit 1: /Left + Bit 0: /Right + +4.1.2. NES Four Score + + Single Input Length: 3 Octets + + *Octet 0* + + Bit 7: Controller N-1 /A + Bit 6: Controller N-1 /B + Bit 5: Controller N-1 /Select + Bit 4: Controller N-1 /Start + Bit 3: Controller N-1 /Up + Bit 2: Controller N-1 /Down + Bit 1: Controller N-1 /Left + Bit 0: Controller N-1 /Right + + *Octet 1* + + Bit 7: Controller N-2 /A + Bit 6: Controller N-2 /B + Bit 5: Controller N-2 /Select + Bit 4: Controller N-2 /Start + Bit 3: Controller N-2 /Up + Bit 2: Controller N-2 /Down + Bit 1: Controller N-2 /Left + Bit 0: Controller N-2 /Right + + *Octet 2* + + Bit 7: 1 + Bit 6: 1 + Bit 5: 0 if Controller Port is 2, otherwise 1 + Bit 4: 0 if Controller Port is 1, otherwise 1 + Bit 3: 1 + Bit 2: 1 + Bit 1: 1 + Bit 0: 1 + + *Controller N* is the controller port number. The NES Four Score + allows players 1 and 3 to input buttons on controller port 1 and + players 2 and 4 to input buttons on controller port 2. *Controller + N-1* on controller port 1 is *Player 1*, *Controller N-2* on + controller port 1 is *Player 3*, *Controller N-1* on controller port + 2 is *Player 2*, and *Controller N-2* on controller port 2 is *Player + 4*. + +4.2. SNES Controller Types + +4.2.1. SNES Standard Controller + + Single Input Length: 2 Octets + + *Octet 0* + + Bit 7: /B + Bit 6: /Y + Bit 5: /Select + Bit 4: /Start + Bit 3: /Up + Bit 2: /Down + Bit 1: /Left + Bit 0: /Right + + *Octet 1* + + Bit 7: /A + Bit 6: /X + Bit 5: /L + Bit 4: /R + Bit 3: 1 + Bit 2: 1 + Bit 1: 1 + Bit 0: 1 + +4.2.2. SNES Mouse + + Single Input Length: 4 Octets + + *Octet 0* + + Bit 7: 1 + Bit 6: 1 + Bit 5: 1 + Bit 4: 1 + Bit 3: 1 + Bit 2: 1 + Bit 1: 1 + Bit 0: 1 + + *Octet 1* + + Bit 7: /Right button + Bit 6: /Left button + Bit 5: Current sensitivity (0: high sensitivity; 1: low or medium + sensitivity) + Bit 4: Current sensitivity (0: medium sensitivity; 1: low or high + sensitivity) + Bit 3: 1 + Bit 2: 1 + Bit 1: 1 + Bit 0: 0 + + *Octet 2* + + Bits 7-1: /Vertical displacement since last read + Bit 0: Direction (0: up; 1: down) + + *Octet 3* + + Bits 7-1: /Horizontal displacement since last read + Bit 0: Direction (0: up; 1: down) + +4.3. N64 Controller Types + +4.3.1. N64 Standard Controller + + Single Input Length: 4 Octets + + *Octet 0* + + Bit 7: A + Bit 6: B + Bit 5: Z + Bit 4: Start + Bit 3: D-Pad Up + Bit 2: D-Pad Down + Bit 1: D-Pad Left + Bit 0: D-Pad Right + + *Octet 1* + + Bit 7: RST (special controller reset bit) + Bit 6: 0 + Bit 5: Left Trigger + Bit 4: Right Trigger + Bit 3: C-Up + Bit 2: C-Down + Bit 1: C-Left + Bit 0: C-Right + + *Octet 2* + + Bits 7-0: Analog Stick X-Axis (signed 8-bit number) + + *Octet 3* + + Bits 7-0: Analog Stick Y-Axis (signed 8-bit number) + +4.3.2. N64 Standard Controller with Rumble + + Single Input Length: 4 Octets + + *Octet 0* + + Bit 7: A + Bit 6: B + Bit 5: Z + Bit 4: Start + Bit 3: D-Pad Up + Bit 2: D-Pad Down + Bit 1: D-Pad Left + Bit 0: D-Pad Right + + *Octet 1* + + Bit 7: RST (special controller reset bit) + Bit 6: 0 + Bit 5: Left Trigger + Bit 4: Right Trigger + Bit 3: C-Up + Bit 2: C-Down + Bit 1: C-Left + Bit 0: C-Right + + *Octet 2* + + Bits 7-0: Analog Stick X-Axis (signed 8-bit number) + + *Octet 3* + + Bits 7-0: Analog Stick Y-Axis (signed 8-bit number) + +4.3.3. N64 Standard Controller with Controller Pak + + Single Input Length: 4 Octets + + *Octet 0* + + Bit 7: A + Bit 6: B + Bit 5: Z + Bit 4: Start + Bit 3: D-Pad Up + Bit 2: D-Pad Down + Bit 1: D-Pad Left + Bit 0: D-Pad Right + + *Octet 1* + + Bit 7: RST (special controller reset bit) + Bit 6: 0 + Bit 5: Left Trigger + Bit 4: Right Trigger + Bit 3: C-Up + Bit 2: C-Down + Bit 1: C-Left + Bit 0: C-Right + + *Octet 2* + + Bits 7-0: Analog Stick X-Axis (signed 8-bit number) + + *Octet 3* + + Bits 7-0: Analog Stick Y-Axis (signed 8-bit number) + +4.3.4. N64 Standard Controller with Transfer Pak + + Single Input Length: 4 Octets + + *Octet 0* + + Bit 7: A + Bit 6: B + Bit 5: Z + Bit 4: Start + Bit 3: D-Pad Up + Bit 2: D-Pad Down + Bit 1: D-Pad Left + Bit 0: D-Pad Right + + *Octet 1* + + Bit 7: RST (special controller reset bit) + Bit 6: 0 + Bit 5: Left Trigger + Bit 4: Right Trigger + Bit 3: C-Up + Bit 2: C-Down + Bit 1: C-Left + Bit 0: C-Right + + *Octet 2* + + Bits 7-0: Analog Stick X-Axis (signed 8-bit number) + + *Octet 3* + + Bits 7-0: Analog Stick Y-Axis (signed 8-bit number) + +4.3.5. N64 Mouse + + Single Input Length: 4 Octets + + *Octet 0* + + Bit 7: A + Bit 6: B + Bit 5: 0 + Bit 4: 0 + Bit 3: 0 + Bit 2: 0 + Bit 1: 0 + Bit 0: 0 + + *Octet 1* + + Bit 7: 0 + Bit 6: 0 + Bit 5: 0 + Bit 4: 0 + Bit 3: 0 + Bit 2: 0 + Bit 1: 0 + Bit 0: 0 + + *Octet 2* + + Bits 7-0: Relative X-Axis position (signed 8-bit number) + + *Octet 3* + + Bits 7-0: Relative Y-Axis position (signed 8-bit number) + +4.3.6. N64 Densha de Go + + Single Input Length: 4 Octets + + *Octet 0* + + Bit 7: A + Bit 6: B + Bit 5: Accelerator + Bit 4: Start + Bit 3: Accelerator + Bit 2: 0 + Bit 1: 0 + Bit 0: Accelerator + + *Octet 1* + + Bit 7: 0 + Bit 6: 0 + Bit 5: C + Bit 4: Select + Bits 3-0: Brake + + *Octet 2* + + Bit 7: 0 + Bit 6: 0 + Bit 5: 0 + Bit 4: 0 + Bit 3: 0 + Bit 2: 0 + Bit 1: 0 + Bit 0: 0 + + *Octet 3* + + Bit 7: 0 + Bit 6: 0 + Bit 5: 0 + Bit 4: 0 + Bit 3: 0 + Bit 2: 0 + Bit 1: 0 + Bit 0: 0 + +4.4. GameCube Controller Types + +4.4.1. GameCube Standard Controller + + Single Input Length: 8 Octets + + *Octet 0* + + Bit 7: 0 + Bit 6: 0 + Bit 5: 0 + Bit 4: Start + Bit 3: Y + Bit 2: X + Bit 1: B + Bit 0: A + + *Octet 1* + + Bit 7: 1 + Bit 6: L + Bit 5: R + Bit 4: Z + Bit 3: D-Pad Up + Bit 2: D-Pad Down + Bit 1: D-Pad Right + Bit 0: D-Pad Left + + *Octet 2* + + Bits 7-0: Analog Stick X-Axis (signed 8-bit number) + + *Octet 3* + + Bits 7-0: Analog Stick Y-Axis (signed 8-bit number) + + *Octet 4* + + Bits 7-0: C-Stick X-Axis (signed 8-bit number) + + *Octet 5* + + Bits 7-0: C-Stick Y-Axis (signed 8-bit number) + + *Octet 6* + + Bits 7-0: L Analog Value (unsigned 8-bit number) + + *Octet 7* + + Bits 7-0: R Analog Value (unsigned 8-bit number) + +4.5. Game Boy Controller Types + +4.5.1. GB Standard Controller + + Single Input Length: 1 Octet + + *Octet 0* + + Bit 7: /Down + Bit 6: /Up + Bit 5: /Left + Bit 4: /Right + Bit 3: /Start + Bit 2: /Select + Bit 1: /B + Bit 0: /A + +4.6. Game Boy Color Controller Types + +4.6.1. GBC Standard Controller + + Single Input Length: 1 Octet + + *Octet 0* + + Bit 7: /Down + Bit 6: /Up + Bit 5: /Left + Bit 4: /Right + Bit 3: /Start + Bit 2: /Select + Bit 1: /B + Bit 0: /A + +4.7. Game Boy Advance Controller Types + +4.7.1. GBA Standard Controller + + Single Input Length: 2 Octets + + *Octet 0* + + Bit 7: 1 + Bit 6: 1 + Bit 5: 1 + Bit 4: 1 + Bit 3: 1 + Bit 2: 1 + Bit 1: /L + Bit 0: /R + + *Octet 1* + + Bit 7: /Down + Bit 6: /Up + Bit 5: /Left + Bit 4: /Right + Bit 3: /Start + Bit 2: /Select + Bit 1: /B + Bit 0: /A + +4.8. Genesis Controller Types + +4.8.1. Genesis (Mega Drive) 3-Button + + Single Input Length: 1 Octet + + *Octet 0* + + Bit 7: /A + Bit 6: /Start + Bit 5: /Up + Bit 4: /Down + Bit 3: /Left + Bit 2: /Right + Bit 1: /B + Bit 0: /C + +4.8.2. Genesis (Mega Drive) 6-Button + + Single Input Length: 2 Octets + + *Octet 0* + + Bit 7: /A + Bit 6: /Start + Bit 5: /Up + Bit 4: /Down + Bit 3: /Left + Bit 2: /Right + Bit 1: /B + Bit 0: /C + + *Octet 1* + + Bit 7: /Z + Bit 6: /Y + Bit 5: /X + Bit 4: /Mode + Bit 3: 1 + Bit 2: 1 + Bit 1: 1 + Bit 0: 1 + +4.9. Atari 2600 Controller Types + +4.9.1. A2600 Joystick + + Single Input Length: 1 Octet + + *Octet 0* + + Bit 7: /Up + Bit 6: /Down + Bit 5: /Left + Bit 4: /Right + Bit 3: 1 + Bit 2: /Button + Bit 1: 1 + Bit 0: 1 + +4.9.2. A2600 Keyboard Controller + + Single Input Length: 1 Octet + + *Octet 0* + + Bit 7: /Row1 (key 1, 2, or 3 pressed) + Bit 6: /Row2 (key 4, 5, or 6 pressed) + Bit 5: /Row3 (key 7, 8, or 9 pressed) + Bit 4: /Row4 (key *, 0, or # pressed) + Bit 3: /Column1 (key 1, 4, 7, or * pressed) + Bit 2: /Column3 (key 3, 6, 9, or # pressed) + Bit 1: /Column2 (key 2, 5, 8, or 0 pressed) + Bit 0: 1 + +5. References + +5.1. Normative References + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, + DOI 10.17487/RFC2119, March 1997, + <https://www.rfc-editor.org/info/rfc2119>. + + [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC + 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, + May 2017, <https://www.rfc-editor.org/info/rfc8174>. + +Copyright Notice + + Copyright (c) 2021-2022, Vi Grey and Bigbass + + All rights reserved. + + Redistribution and use of this documentation in source (XML format) + and/or "compiled" forms (TXT, PDF, HTML, etc), with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code (XML format) of this documentation + must retain the above copyright notice, this list of conditions, + and the following disclaimer in the documentation. + + 2. Redistributions in compiled form (Converted to TXT, PDF, HTML, + and other formats) of this documentation must reproduce the above + copyright notice, this list of conditions, and the following + disclaimer in the documentation. + + THIS DOCUMENTATION IS PROVIDED BY THE AUTHOR(S) "AS IS" AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Authors' Addresses + + Vi Grey + VG Interactive + Email: vi@vigrey.com + URI: https://vigrey.com + + + Bigbass + URI: https://github.com/bigbass1997 diff --git a/inputmaps.txt b/inputmaps.txt deleted file mode 100644 index 9a11c68..0000000 --- a/inputmaps.txt +++ /dev/null @@ -1,338 +0,0 @@ -When inputs are stored in a TASD file, their values are formatted in a specific order.
-Data is stored as close tothe console-native format as possible.
-
-Most consoles use "active-low" signals for button presses. That means that if a button is pressed, it sends a logical LOW signal,
-represented as binary '0'. For example, a NES controller pressing 'A' and 'Left' can be represented as binary '01111101' or hex 0x7D.
-However, some consoles may include "active-high" signals, or have a more complex protocol.
-
-Each controller map will include their spec-defined controller type that's used in PortController packets. All inputs that are active-low,
-will have a forward slash '/' infront of them. For example, all of the buttons on the NES standard controller are active-low, as seen
-below. Unless otherwise specified, button inputs without a '/' will be active-high, or have a custom protocol.
-
-
-=== NES Standard ===
-Spec Type: 01 01
-Length: 1 byte
-
-bit 7 = /A
-bit 6 = /B
-bit 5 = /Select
-bit 4 = /Start
-bit 3 = /Up
-bit 2 = /Down
-bit 1 = /Left
-bit 0 = /Right
-
-
-=== NES Multitap (Four Score) ===
-Spec Type: 01 02
-Length: ?
-
-???
-
-
-=== NES Zapper ===
-Spec Type: 01 03
-Length: ?
-
-???
-
-
-=== SNES Standard ===
-Spec Type: 02 01
-Length: 2 bytes
-
-bit 15 = /B
-bit 14 = /Y
-bit 13 = /Select
-bit 12 = /Start
-bit 11 = /Up
-bit 10 = /Down
-bit 9 = /Left
-bit 8 = /Right
-
-bit 7 = /A
-bit 6 = /X
-bit 5 = /L
-bit 4 = /R
-bit 3 = 1
-bit 2 = 1
-bit 1 = 1
-bit 0 = 1
-
-
-=== SNES Multitap ===
-Spec Type: 02 02
-Length: ?
-
-???
-
-
-=== SNES Mouse ===
-Spec Type: 02 03
-Length: ?
-
-???
-
-
-=== SNES Superscope ===
-Spec Type: 02 04
-Length: ?
-
-???
-
-
-=== N64 Standard ===
-Spec Type: 03 01
-Length: 4 bytes
-The N64 uses the Joybus Protocol. Pressed buttons are represented as a binary '1'.
-Protocol details can be found here: https://n64brew.dev/wiki/Joybus_Protocol
-
-bit 31 = A
-bit 30 = B
-bit 29 = Z
-bit 28 = Start
-bit 27 = D-Pad Up
-bit 26 = D-Pad Down
-bit 25 = D-Pad Left
-bit 24 = D-Pad Right
-
-bit 23 = RST (special controller reset bit)
-bit 22 = 0
-bit 21 = Left Trigger
-bit 20 = Right Trigger
-bit 19 = C-Up
-bit 18 = C-Down
-bit 17 = C-Left
-bit 16 = C-Right
-
-bits 15-8 = Analog Stick X-Axis (signed 8bit number, decimal -128 to +127)
-bits 7-0 = Analog Stick Y-Axis (signed 8bit number, decimal -128 to +127)
-
-
-=== N64 Standard with Rumble Pak ===
-Spec Type: 03 02
-
-Identical to N64 Standard (03 01)
-
-
-=== N64 Standard with Controller Pak ===
-Spec Type: 03 03
-
-Identical to N64 Standard (03 01)
-
-
-=== N64 Standard with Transfer Pak ===
-Spec Type: 03 04
-
-Identical to N64 Standard (03 01)
-
-
-=== N64 Mouse ===
-Spec Type: 03 05
-Length: 4 bytes
-The N64 uses the Joybus Protocol. Pressed buttons are represented as a binary '1'.
-Protocol details can be found here: https://n64brew.dev/wiki/Joybus_Protocol
-
-bit 31 = A
-bit 30 = B
-bits 29-24 = 0
-
-bits 23-16 = 0
-bits 15-8 = Relative X-Axis position (signed 8bit number, decimal -128 to +127)
-bits 7-0 = Relative Y-Axis position (signed 8bit number, decimal -128 to +127)
-
-
-=== N64 Voice Recognition Unit (VRU) ===
-Spec Type: 03 06
-Length: ?
-
-Unknown at this time, more research is required to understand the VRU.
-
-
-=== N64 RandNet Keyboard ===
-Spec Type: 03 07
-Length: 7 bytes
-The N64 uses the Joybus Protocol. Protocol details can be found here: https://n64brew.dev/wiki/Joybus_Protocol
-And Keyboard specific details here: https://sites.google.com/site/consoleprotocols/home/nintendo-joy-bus-documentation/n64-specific/randnet-keyboard
-
-bits 55-40 = first key ID or all zeros
-bits 39-24 = second key ID or all zeros
-bits 23- 8 = third key ID or all zeros
-bits 7- 0 = special keyboard flags
-
-
-=== N64 Densha de Go ===
-Spec Type: 03 08
-Length: 4 bytes
-The N64 uses the Joybus Protocol. Pressed buttons are represented as a binary '1'.
-Protocol details can be found here: https://n64brew.dev/wiki/Joybus_Protocol
-
-bit 31 = B
-bit 30 = A
-bit 29 = Accelerator
-bit 28 = Start
-bit 27 = Accelerator
-bit 26 = 0
-bit 25 = 0
-bit 24 = Accelerator
-
-bit 23 = 0
-bit 22 = 0
-bit 21 = C
-bit 20 = Select
-bits 19-16 = Brake
-
-bits 15-8 = 0
-bits 7-0 = 0
-
-
-=== GC Standard ===
-Spec Type: 04 01
-Length: 8 bytes
-The GC uses the Joybus Protocol. Pressed buttons are represented as a binary '1'.
-Protocol details can be found here: https://n64brew.dev/wiki/Joybus_Protocol
-
-TODO
-
-
-=== GC Keyboard ===
-Spec Type: 04 02
-Length: ?
-The GC uses the Joybus Protocol. Pressed buttons are represented as a binary '1'.
-Protocol details can be found here: https://n64brew.dev/wiki/Joybus_Protocol
-
-TODO
-
-
-=== GB Gamepad ===
-Spec Type: 05 01
-Length: 1 byte
-
-bit 7 = /Down
-bit 6 = /Up
-bit 5 = /Left
-bit 4 = /Right
-bit 3 = /Start
-bit 2 = /Select
-bit 1 = /B
-bit 0 = /A
-
-
-=== GBC Gamepad ===
-Spec Type: 06 01
-Length: 1 byte
-
-Identical to GB Gamepad (05 01)
-
-
-=== GBA(SP) Gamepad ===
-Spec Type: 07 01
-Length: 2 bytes
-
-bits 15-10 = 1
-bit 9 = /L
-bit 8 = /R
-
-bit 7 = /Down
-bit 6 = /Up
-bit 5 = /Left
-bit 4 = /Right
-bit 3 = /Start
-bit 2 = /Select
-bit 1 = /B
-bit 0 = /A
-
-
-=== Genesis 3-Button ===
-Spec Type: 08 01
-Length: 1 byte
-
-bit 7 = /A
-bit 6 = /Start
-bit 5 = /Up
-bit 4 = /Down
-bit 3 = /Left
-bit 2 = /Right
-bit 1 = /B
-bit 0 = /C
-
-
-=== Genesis 6-Button ===
-Spec Type: 08 02
-Length: 2 bytes
-
-bit 15 = /A
-bit 14 = /Start
-bit 13 = /Up
-bit 12 = /Down
-bit 11 = /Left
-bit 10 = /Right
-bit 9 = /B
-bit 8 = /C
-
-bit 7 = /Z
-bit 6 = /Y
-bit 5 = /X
-bit 4 = /Mode
-bit 3 = 1
-bit 2 = 1
-bit 1 = 1
-bit 0 = 1
-
-
-=== A2600 Joystick ===
-Spec Type: 09 01
-Length: 1 byte
-
-bit 7 = /Up
-bit 6 = /Down
-bit 5 = /Left
-bit 4 = /Right
-bit 3 = 1
-bit 2 = /Button
-bit 1 = 1
-bit 0 = 1
-
-
-=== A2600 Paddle ===
-Spec Type: 09 02
-Length: 1 byte
-
-bit 7 = 1
-bit 6 = 1
-bit 5 = /LeftButton
-bit 4 = /RightButton
-bit 3 = RightPot
-bit 2 = LeftPot
-bit 1 = 1
-bit 0 = 1
-
-
-=== A2600 Keypad ===
-Spec Type: 09 03
-Length: 1 byte
-
-bit 7 = /Row1
-bit 6 = /Row2
-bit 5 = /Row3
-bit 4 = /Row4
-bit 3 = /Column1
-bit 2 = /Column3
-bit 1 = /Column2
-bit 0 = 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/spec.md b/spec.md deleted file mode 100644 index 2b557f7..0000000 --- a/spec.md +++ /dev/null @@ -1,247 +0,0 @@ -# TASD Format Specification
-## Introduction
-Created to be hardware and software agnostic, the Tool Assisted Speedrun Dump (TASD) interchange format uses a key-based, binary, packet format to break up pieces of information into easily-parsable and forward-compatible chunks. The format is extensible by simply defining additional keys or value types as necessary. When parsing the file, software can skip any packets whose key is unknown or unsupported.
-
-Keys can be used multiple times or completely omitted as needed. This reusability eliminates the need of a predefined delimiter to separate pieces of data such as a list of TAS authors.
-
-While files generated by emulator dump scripts should provide as much as much information as possible, because keys are optional, the file can be expanded later with any additional data as desired. No intermediary file format is necessary.
-
-## Header
-A very short binary header is used for special/unique data, in the following order:
-```
- 54 41 53 44 00 01 02
-└───Magic #───┘ └─Version─┘ └─Key Width─┘
-```
-The magic number is the ASCII equivalent of `TASD`. The key width defines the how large each key is (in number of bytes). It's unlikely it'll ever be larger than 2 bytes, but it's specified for the sake of forward-compatibility.
-
-## Packet Format
-Packets are made up of four parts: `[key] [length exponent] [payload length] [payload]`
-
-Because a payload could be as small as a few bytes, or much larger than a 16-bit number could convey, a _**length exponent**_ is used to define how many bytes make up the _**payload length**_. Whereas the _**payload length**_ defines how many bytes are in the _**payload**_ itself.
-
-The **length exponent** or just **exponent** for short, is named this way given that the number of bytes that make up the _**payload length**_, is determined based on (256^exponent - 1).
-
-Packet examples can be found later in this document.
-
-## Key Definitions
-Packets will often have an intended size depending on the key, however, they will still follow the packet format. Some keys will have a list of type specifiers with defined ID values.
-
-_Reminder that every key is optional, and can appear across multiple packets as necessary._
-
-#### Console-agnostic Keys:
-```
-Key | Payload Size | Name | Description
-
-0001 | 1 + p bytes | ConsoleType | The console this TAS is made for. p = 0 for all except custom types.
- -> 01 = NES
- -> 02 = SNES
- -> 03 = N64
- -> 04 = GC (GameCube)
- -> 05 = GB
- -> 06 = GBC
- -> 07 = GBA
- -> 08 = Genesis
- -> 09 = A2600 (Atari 2600)
- -> FF = Custom (p = custom name string, no string length bytes needed)
-
-0002 | 1 byte | ConsoleRegion | Console region required to play this TAS.
- -> 01 = NTSC
- -> 02 = PAL
- -> 03 = Other/Unknown
-
-0003 | variable | GameTitle | (string) Title of the game.
-0004 | variable | Author | (string) Name of one author of the TAS. (e.g. "Bender B. Rodriguez")
-0005 | variable | Category | (string) Category of the TAS. (e.g. "any%")
-0006 | variable | EmulatorName | (string) Name of the emulator used to dump this file.
-0007 | variable | EmulatorVersion | (string) Version of the emulator.
-0008 | variable | EmulatorCore | (string) Name of emulation core being used. (may not be applicable to all emulators)
-
-0009 | 8 bytes | TASLastModified | (Unix epoch in seconds) Last time the TAS movie was edited. Usually TASVideos.org publication date.
-000A | 8 bytes | DumpLastModified | (Unix epoch in seconds) Last time this file was edited.
-000B | 4 bytes | TotalFrames | Total number of frames from original movie, including lag frames. (useful for calculating movie length)
-000C | 4 bytes | Rerecords | TAS rerecord count.
-000D | variable | SourceLink | (string) URL link to publication, video upload of this TAS, or any other relevant websites.
-
-000E | 2 bytes | BlankFrames | Signed 16-bit number of blank frames to prepend to the TAS inputs (positive number), or frames to ignore from the start of the TAS (negative number).
-000F | 1 byte | Verified | Whether or not this TAS has been verified by someone. (boolean, value of either 00 or 01)
-
-0010 | 1 + 1 + v + k + n + p bytes | MemoryInit | Initialization of named memory space. First byte is the kind of initialization.
- Second byte is whether or not this is required for verifications (0 = optional, 1 = required). Then the name of the space.
- And an optional custom payload. (1 byte type, 1 byte verification requirement, v = 1 byte exponent for k, k = length of n, n = name string, p = memory payload)
- -> 01 = No intialization required (p = 0)
- -> 02 = All 0x00 (p = 0)
- -> 03 = All 0xFF (p = 0)
- -> 04 = 00 00 00 00 FF FF FF FF (repeating) (p = 0)
- -> 05 = Random (implementation-dependent) (p = 0)
- -> FF = Custom: The 'p' section of payload is used to initialize the 'n' named memory space (e.g. "EEPROM", "WRAM", "Save", etc.)
-
-00F0 | 1 + 2 bytes | PortController | Specify which controller is plugged into a specific port number (1-indexed). (1 byte Port Number, 2 byte Controller Type)
- -> xx 01 01 = NES Standard
- -> xx 01 02 = NES Multitap (Four Score)
- -> xx 01 03 = NES Zapper
-
- -> xx 02 01 = SNES Standard
- -> xx 02 02 = SNES Multitap
- -> xx 02 03 = SNES Mouse
- -> xx 02 04 = SNES Superscope
-
- -> xx 03 01 = N64 Standard
- -> xx 03 02 = N64 Standard with Rumble Pak
- -> xx 03 03 = N64 Standard with Controller Pak
- -> xx 03 04 = N64 Standard with Transfer Pak
- -> xx 03 05 = N64 Mouse
- -> xx 03 06 = N64 Voice Recognition Unit (VRU)
- -> xx 03 07 = N64 RandNet Keyboard
- -> xx 03 08 = N64 Densha de Go (used for only 1 game)
-
- -> xx 04 01 = GC Standard
- -> xx 04 02 = GC Keyboard
-
- -> xx 05 01 = GB Gamepad
-
- -> xx 06 01 = GBC Gamepad
-
- -> xx 07 01 = GBA(SP) Gamepad
-
- -> xx 08 01 = Genesis 3-Button
- -> xx 08 02 = Genesis 6-Button
-
- -> xx 09 01 = A2600 Joystick
- -> xx 09 02 = A2600 Paddle
- -> xx 09 03 = A2600 Keypad
-
-00xx | k + n + p bytes | Hash | Some kind of hash
-```
-
-#### NES Keys:
-```
-Key | Payload Size | Name | Description
-
-0101 | 1 byte | LatchFilter | Latch Filter time span. (value multiplied by 0.1ms; inclusive range of 0.0ms to 25.5ms)
-0102 | 1 byte | ClockFilter | Clock Filter time span. (value multiplied by 0.25us; inclusive range of 0.0us to 63.75us)
-0103 | 1 byte | Overread | The data value to use when overread clock pulses occur. (active-low: 0 = HIGH, 1 = LOW)
-0104 | 6 or 8 bytes | GameGenieCode | (string) 6 or 8 character game genie code.
-```
-
-#### SNES Keys:
-```
-Key | Payload Size | Description
-```
-
-#### N64 Keys:
-```
-Key | Payload Size | Description
-
-TODO
-```
-
-#### GB/C/A Keys:
-```
-Key | Payload Size | Description
-
-TODO
-```
-
-#### Genesis Keys:
-```
-Key | Payload Size | Description
-
-TODO
-```
-
-#### A2600 Keys:
-```
-Key | Payload Size | Description
-
-TODO
-```
-
-#### Input Frame/Timing Keys:
-```
-Key | Payload Size | Name | Description
-
-FE01 | 1 + n bytes | InputChunks | Port number (1-indexed) + a variable number of input chunks for that port.
- Each chunk can vary in size depending on the controller type in use on the respective frame.
- Refer to transitions to know if any controller types change mid-playback.
- These packets, and the input chunks therein, are in sequential order!
- Therefore, any following input packets are appended to the inputs contained in this one.
- Input values are usually in native format (usually active-low), refer to 'inputmaps.txt' for details.
-
-FE02 | 1 + 1 + 4 + n bytes | InputMoment | Port number (1-indexed) + 1 byte type + 32-bit index number + a single instance of input for that port.
- Similar to InputChunks but instead specifies an input at a specific point in time.
- Useful for consoles with many repeated inputs or that use clock cycles as an index number.
- Some consoles may interpret these packets as inputs that are held until the next specified InputMoment (e.g. GB/C/A),
- or they may use a default input state until the next InputMoment is reached.
- Index number can be based on anything, but should be consistent throughout a file (e.g. clock cycles, frames, seconds, etc).
- Sequential order is not necessary. Refer to 'inputmaps.txt' for input formats.
- -> 01 = frames
- -> 02 = cycles
- -> 03 = milliseconds
-
-FE03 | 4 + 1 + n bytes | Transition | Defines a transition at a specific point in the TAS. First 4 bytes is the frame/index number (0-indexed) based on all inputs contained in all FE01 packets. Then 1 byte specifying the transition type. Followed by a variable number of bytes if applicable.
- -> 01 = "Soft" Reset (n = 0)
- -> 02 = Power Reset (n = 0)
- -> FF = Packet-derived (Place a spec-defined packet here which will indicate a change at this transition. All FExx keys should NOT be used here.)
-
-FE04 | 4 + 4 bytes | LagFrameChunk | Specifies a chunk of lag frames based on the original TAS movie. First 4 bytes is the frame number (0-indexed) this chunk starts on. Second 4 bytes is the number of sequential lag frames in this chunk.
-
-FE05 | 4 + 1 + n bytes | MovieTransition | Defines a transition based on the original TAS movie frames (including lag frames). Using this packet requires FE03 packets. First 4 bytes is the movie frame number (0-indexed). Then 1 byte specifying the transition type. Followed by a variable number of bytes if applicable.
- -> 01 = "Soft" Reset (n = 0)
- -> 02 = Power Reset (n = 0)
- -> FF = Packet-derived (Place a spec-defined packet here which will inidicate a change at this transition. All FExx keys should NOT be used here.)
-```
-
-#### Unspecified
-```
-FFFF | n bytes | Unspecified | The payload of this packet is unspecified. Intended for implementation-specific/custom use cases. Do not use unless you have to.
-```
-
-## Controller Input Maps
-Each controller from each console has defined data needed for each frame (or frame equivalent), which is stored in a specific number of bytes. This data is what is stored in InputChunks packets. These maps are designed to match the real hardware as much as possible, to make decoding easier. If you need to write an emulator/movie dump script, be aware that emulators may format these inputs in a different order. Refer to the `inputmaps.txt` file for specific details.
-
-## Examples
-These examples should cover most use cases of this file format. If something is still unclear, feel free to ask questions on Discord. All examples use hexadecimal values unless otherwise specified.
-
-A madeup packet, with some 2-byte key, and a payload that is 5 bytes wide:
-```
- A8 2F 01 05 00 11 22 33 44
-└─key─┘ └──┘ └──┘ └───payload────┘
-```
-Another made up packet, with a payload that is 260 bytes wide:
-```
- A8 2F 02 01 04 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
-└─key─┘ └──┘ └─────┘ 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
- ......
- F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
- 00 01 02 03 04 ┌────payload────────────────────┘
- └───────────────┘
-```
-
-## Format Goals/Reasoning
-The primary goal of this format is to provided a single comprehensive, replay-device-agnostic, TAS dump format, usable for any console. Additional goals include: no intermediate formats, forward-compatibility, high extensibility, and the ability to easily generate using lua scripting available in emulators. Consideration was also given to how usable the format would be to the software that interacts with replay devices (e.g. methods of ingestion/parsing, and the ease of doing so given various languages).
-
-### Problems With Existing Formats
-Most existing formats are either inadequite for verification needs, or simply don't exist at all for some consoles. The commonly used NES and SNES formats (r08 and r16m respectively), only encode two standard controllers worth of sequential input. There's no built in way to store reset information, nor to indicate any additional settings. There's no way to support non-standard controllers like the Multitap. No existing format has a specified way of including any kind of attributions either (except to bundle a text file with the dump in an archive).
-
-The GC, Genesis, A2600, and N64 do not have any commonly used format. Individuals would need to write their own dump scripts and format the inputs however they felt. This is completely acceptable, but isn't ideal for redistribution so that other people (likely with different replay devices) can also verify the same TAS.
-
-### Binary vs Text vs Containers
-This has been a matter of contention. Each kind of format has it's own advantages and disadvantages. For example, a binary file can easily store any form of data, whereas storing binary inputs into a text file is significantly more complex. However, it's not nearly as easy to manually edit text-based information stored in a binary file.
-
-One possible workaround is to use a container format (e.g. .ZIP files), so that text and binary files can be bundled together. But then container formats can be much harder to generate, especially given that these dumps must be generated sequentially, often in Lua, and sometimes with limited memory resources. Additionally, programming languages will have wildly varying support for reading/writing container formats, at least compared to raw binary or text files.
-
-Concern was raised over the editablity of the format after dumping. While text files are indeed easier to open and modify by a human, humans are also very error prone. In order for receiving software to be able to parse the file, a very specific and consistent format would have to be used regardless of whether it's text or binary. Sure a human can edit a text file easier than binary, but a human can also type the wrong data or format it incorrectly/inconsistently.
-
-### Intermediate Files
-Historically, dump files have only contained a partial amount of information needed to describe a TAS verification. This is primarily due to emulators not exposing enough information to their scripting APIs, or otherwise there is simply no way to provide missing data at dump-time, such as attribution, or verification settings that are discovered afterwards. One possible way to handle this is to use the raw input dumps as a sort of intermediate file which gets bundled with a completely different format at a later time.
-
-While this can work, it would only work to a certain extent given the formats we already have. Existing formats, don't include any way to specify transitions (such as resets), or the ability to handle uncommon controller configurations, or any other edge case that may come up in the future.
-
-### Conclusion
-Before serious thought was put into the format itself, a broad summary was first created, containing the different kinds of data that this format would potentially need to hold. Many people put forth their concerns and ideas, including people who have direct experience working with verification and TAS dumping.
-
-Given all the goals in mind, and after reviewing the collected information, a binary format seemed like the best option. Container formats are not nearly as well supported at any stage of the verification process. The vast majority of this data is already in a binary format. Encoding/decoding such data purely as text would be significantly more difficult than doing so in a binary formatted file. Generating and parsing binary files, given the packet format as defined, can be done so using practically all programming languages and potentially on replay devices themselves. Ultimately fulfilling all of the format goals.
-
-For the moment, GB/C/A verifications are locked into using a specific GBI format that's unlikely to change. However this new format can still store the GBI data, or any other data that may be needed in the future if verifications expand to actual GB/A devices instead of just the Game Boy Player.
-
-It's understood that not everyone will agree, and that's fine. But this is the format to be used going forward. In order to provide support for this format as soon as possible, and to provide an implementation example, a commandline-based editing tool was created alongside the specification development process. NES dump scripts for BizHawk and FCEUX have also been created for the same reason.
diff --git a/src/docs/draft-tasd-0001.xml b/src/docs/draft-tasd-0001.xml new file mode 100644 index 0000000..601b93e --- /dev/null +++ b/src/docs/draft-tasd-0001.xml @@ -0,0 +1,1824 @@ +<?xml version='1.0' encoding='utf-8'?> +<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> +<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> +<rfc + xmlns:xi="http://www.w3.org/2001/XInclude" + category="info" + docName="draft-tasd-v0001-00" + ipr="none" + obsoletes="" + updates="" + submissionType="independent" + xml:lang="en" + tocInclude="true" + tocDepth="4" + symRefs="true" + sortRefs="true" + version="3"> + <front> + <title abbrev="TASD File Format Specification">TASD File Format Specification Version 1</title> + <seriesInfo name="Internet-Draft" stream="independent" value="draft-tasd-v0001-00" status="informational"/> + <author fullname="Vi Grey" initials="V." surname="Grey"> + <organization>VG Interactive</organization> + <address> + <email>vi@vigrey.com</email> + <uri>https://vigrey.com</uri> + </address> + </author> + <author fullname="Bigbass" surname="Bigbass"> + <address> + <uri>https://github.com/bigbass1997</uri> + </address> + </author> + <date year="2022"/> + <area>General</area> + <workgroup>Independent TAS Console Replay Research Group</workgroup> + <abstract> + <t>The <strong>TASD</strong> file format is used for storing "Tool Assisted Speedrun" or "Tool Assisted Superplay" (TAS) data for TAS replay devices to replay on physical video game console hardware. The format is defined to be expandable for future needs. The format is also defined to be parsable by programs that do not understand portions of the format, whether that is due to incomplete support of the format specification or due to new features being added to later versions of the specification at a later date.</t> + <t>This document defines the file format specification for <strong>TASD</strong> files.</t> + </abstract> + </front> + <middle> + <section anchor="introduction" numbered="true" toc="default"> + <name>Introduction</name> + <t>The Tool Assisted Speedrun Dump (<strong>TASD</strong>) interchange format is a file format for storing data to allow "Tool Assisted Speedruns" or "Tool Assited Superplays" to be played on physical video game console hardware using TAS replay devices. Created to be hardware and software agnostic, the <strong>TASD</strong> interchange format uses a key-based, binary, packet format to break up pieces of information into easily-parsable and forward-compatible chunks. The format is extensible by simply defining additional keys or value types as necessary. When parsing the file, software can skip any packets whose key is unknown or unsupported.</t> + <t>Keys can be used multiple times or completely omitted as needed. This reusability eliminates the need of a predefined delimiter to separate pieces of data such as a list of TAS authors.</t> + <t>While files generated by emulator dump scripts should provide as much information as possible, because keys are optional, the file can be expanded later with any additional data as desired. No intermediary file format is necessary.</t> + <section numbered="true" toc="default"> + <name>Overview and Preliminaries</name> + <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t> + + <section numbered="true" toc="default"> + <name>Notation and Vocabulary</name> + <t>Data Types:</t> + <ul spacing="compact" empty="true"> + <li>(S) = String</li> + <li>(A) = Binary Data</li> + <li>(I) = Signed Integer</li> + <li>(N) = Unsigned Integer</li> + <li>(B) = Boolean</li> + </ul> + <t>We use the terms <strong>byte</strong> and <strong>octet</strong> interchangeably in this document.</t> + <t>Unless specified otherwise, all multi-octet integers are big-endian.</t> + <t>We use the terms <strong>Tool Assisted Speedrun</strong>, <strong>Tool Assisted Superplay</strong> and <strong>TAS</strong> interchangeably in this document.</t> + <t>In subsections of (<xref target="descriptions" />), the term "in direct form" is used. That term is defined to mean a packet in a <strong>TASD</strong> file directly (first order packet) rather than a packet inside a TRANSITION or MOVIE_TRANSITION packet (second order packet).</t> + <t>String values <bcp14>MUST</bcp14> use UTF-8 encoding. If an example of a string value is given, the example will be between quotation marks. The quotation marks are not included in the string. Not all content between quotations will be string value examples, so be aware of that when continuing through this document.</t> + <t>Unsigned and signed integers can have different bit widths. For instance, an 8-bit integer can be used in one part of the specification and a 64-bit integer can be used in another part of the specification.</t> + <t>Boolean values <bcp14>MUST</bcp14> be a single octet with the value of <tt>0</tt> for <strong>FALSE</strong> or <tt>1</tt> for <strong>TRUE</strong>.</t> + <dl> + <dt><tt>[N octets]</tt></dt> <dd>A sequence of octets with a length of N</dd> + <dt><tt>[00 7F FF]</tt></dt> <dd>A sequence of octets <tt>00</tt>, <tt>7F</tt>, and <tt>FF</tt> in that order.</dd> + <dt><strong>0-indexed</strong></dt> <dd>When counting sequentially, start counting at 0.</dd> + <dt><strong>1-indexed</strong></dt> <dd>When counting sequentially, start counting at 1.</dd> + </dl> + <t>In packet diagrams, a single octet is represented with a box like this:</t> + <artwork><![CDATA[ + +-----+ + | Var | <-- Vertical bars MAY be missing + +-----+]]> + </artwork> + <ul spacing="compact" empty="true"> + <li><strong>Var</strong> is a variable name.</li> + </ul> + <t>In packet diagrams, an arbitrary number of octets are represented with a box like this:</t> + <artwork><![CDATA[ + +=====+ + | Var | + +=====+]]> + </artwork> + <ul spacing="compact" empty="true"> + <li><strong>Var</strong> is a variable name.</li> + </ul> + <t>In packet diagrams, boxes can be connected like these examples:</t> + <artwork><![CDATA[ + +-----------+-----------+ + | Var 1 (B) | Var 2 (I) | + +-----------+-----------+]]> + </artwork> + <ul spacing="compact" empty="true"> + <li>In this example, <strong>Var 1</strong> is a 1 octet long boolean value and <strong>Var 2</strong> is a 1 octet long signed integer.</li> + </ul> + <artwork><![CDATA[ + +-----+-----+===========+ + | Var 1 (N) | Var 2 (S) | + +-----+-----+===========+]]> + </artwork> + <ul spacing="compact" empty="true"> + <li>In this example, <strong>Var 1</strong> is a 2 octet long unsigned integer and <strong>Var 2</strong> is an arbitrary octet length string.</li> + </ul> + <t>In packet diagrams, boxes <bcp14>MAY</bcp14> have relative offset values above them like in the following example:</t> + <artwork><![CDATA[ + 0 1 2... + +-----+-----+===========+ + | Var 1 (N) | Var 2 (S) | + +-----+-----+===========+]]> + </artwork> + <ul spacing="compact" empty="true"> + <li>In this example, <strong>Var 1</strong> is a 2 octet long unsigned integer and <strong>Var 2</strong> is an arbitrary octet length string.</li> + </ul> + <t>Packet diagrams <bcp14>MAY</bcp14> be split into multiple lined sections like in the following example:</t> + <artwork><![CDATA[ + 0 1 2 3 + +-----------+-----------+-----------+-----------+ + | Var 1 (N) | Var 2 (I) | Var 3 (B) | Var 4 (I) | ... + +-----------+-----------+-----------+-----------+ + 4 5 + +-----------+===========+ + | Var 5 (N) | Var 6 (S) | + +-----------+===========+]]> + </artwork> + <ul spacing="compact" empty="true"> + <li>In this example, enough variable boxes are in the packet diagram to require being split into 2 sections to take up less horizontal space in this documentation. The packet diagram is seperated by an ellipsis (<tt>...</tt>) on the same text row as the variable names to signify that the packet diagram is continuing.</li> + </ul> + </section> + </section> + + <section numbered="true" toc="default"> + <name>Motivations</name> + <t>This file format's primary goal is to provide a comprehensive and replay device agnostic TAS movie controller input dump format that is usable for any console. Additional goals include:</t> + <ul> + <li>No intermediary formats</li> + <li>Forward compatibility</li> + <li>High extensibility</li> + <li>Ability to easily generate using lua scripting in emulators</li> + </ul> + <t>Consideration was also given to how usable the format would be for the software that interacts with replay devices (examples: methods of ingestion/parsing, ease of ingestion/parsing in various languages).</t> + <section numbered="true" toc="default"> + <name>Problems With Existing Formats</name> + <t>Most existing formats are either incomplete for some verification needs or don't exist at all for some consoles. A format commonly used for NES console verifications (r08) only encodes 2 standard controllers worth of sequential data and a format commonly used for SNES console verifications (r16m) only encodes up to 8 standard controllers worth of sequential data. There is no built in way to store <strong>RESET</strong> press timing information or indicate additional settings/information. Non-standard controllers are also not supported in commonly used formats.</t> + <t>For consoles not as popular as the NES and SNES, controller input formats would frequently be written in a way that is meant only to work and not in a "standard" way. While that process works, it's less than ideal for redistribution of console replays so that others (especially with differing TAS replay devices) can also verify the same TAS.</t> + </section> + </section> + </section> + <section numbered="true" toc="default"> + <name>Header</name> + <t><strong>TASD</strong> files <bcp14>MUST</bcp14> include a header, which <bcp14>MUST</bcp14> be in the following format:</t> + + <artwork><![CDATA[ + 0 1 2 3 4 5 6 + +----+----+----+----+------+------+--------------+ + | Magic Number (A) | Version (N) | G_KEYLEN (N) | + +----+----+----+----+------+------+--------------+ + + Magic Number (Binary Data) [4 octets] + Version (Unsigned Integer) [2 octets] + G_KEYLEN (Unsigned Integer) [1 octet]]]> + </artwork> + <dl newline="true"> + <dt><strong>Magic Number</strong></dt> + <dd>4 octet value that <bcp14>MUST</bcp14> be <tt>[54 41 53 44]</tt>(ASCII value <tt>TASD</tt>).</dd> + <dt><strong>Version</strong></dt> + <dd>Version of the <strong>TASD</strong> file format. Version currently <bcp14>MUST</bcp14> be a value of 1.</dd> + <dt><strong>G_KEYLEN</strong></dt> + <dd>Global length of <strong>Key</strong> values of packets. G_KEYLEN currently <bcp14>MUST</bcp14> be a value of 2.</dd> + </dl> + </section> + <section numbered="true" toc="default"> + <name>Packets</name> + <t>Packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + +=========+----------+==========+=============+ + | Key (A) | PEXP (N) | PLEN (N) | Payload (A) | + +=========+----------+==========+=============+ + + Key (Binary Data) [G_KEYLEN octets] + PEXP (Unsigned Integer) [1 octet] + PLEN (Unsigned Integer) [PEXP octets] + Payload (Binary Data) [PLEN octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Key</strong></dt> + <dd>Packet type (Packet key).</dd> + <dt><strong>PEXP</strong></dt> + <dd>Length of <strong>PLEN</strong>.</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of <strong>Payload</strong>.</dd> + <dt><strong>Payload</strong></dt> + <dd>Payload/Content of the packet.</dd> + <dt><strong>G_KEYLEN</strong></dt> + <dd>Length of <strong>Key</strong> in packets and is specified in the <strong>TASD</strong> file header.</dd> + </dl> + <t>All packets are <bcp14>OPTIONAL</bcp14>.</t> + <section numbered="true" toc="default"> + <name>Assigned Packet Keys Without Descriptions</name> + <section numbered="true" toc="default"> + <name>General Keys</name> + <dl spacing="compact"> + <dt><tt>[00 01]</tt></dt> <dd>CONSOLE_TYPE</dd> + <dt><tt>[00 02]</tt></dt> <dd>CONSOLE_REGION</dd> + <dt><tt>[00 03]</tt></dt> <dd>GAME_TITLE</dd> + <dt><tt>[00 04]</tt></dt> <dd>ROM_NAME</dd> + <dt><tt>[00 05]</tt></dt> <dd>ATTRIBUTION</dd> + <dt><tt>[00 06]</tt></dt> <dd>CATEGORY</dd> + <dt><tt>[00 07]</tt></dt> <dd>EMULATOR_NAME</dd> + <dt><tt>[00 08]</tt></dt> <dd>EMULATOR_VERSION</dd> + <dt><tt>[00 09]</tt></dt> <dd>EMULATOR_CORE</dd> + <dt><tt>[00 0A]</tt></dt> <dd>TAS_LAST_MODIFIED</dd> + <dt><tt>[00 0B]</tt></dt> <dd>DUMP_CREATED</dd> + <dt><tt>[00 0C]</tt></dt> <dd>DUMP_LAST_MODIFIED</dd> + <dt><tt>[00 0D]</tt></dt> <dd>TOTAL_FRAMES</dd> + <dt><tt>[00 0E]</tt></dt> <dd>RERECORDS</dd> + <dt><tt>[00 0F]</tt></dt> <dd>SOURCE_LINK</dd> + <dt><tt>[00 10]</tt></dt> <dd>BLANK_FRAMES</dd> + <dt><tt>[00 11]</tt></dt> <dd>VERIFIED</dd> + <dt><tt>[00 12]</tt></dt> <dd>MEMORY_INIT</dd> + <dt><tt>[00 13]</tt></dt> <dd>GAME_IDENIFIER</dd> + <dt><tt>[00 14]</tt></dt> <dd>MOVIE_LICENSE</dd> + <dt><tt>[00 15]</tt></dt> <dd>MOVIE_FILE</dd> + <dt><tt>[00 F0]</tt></dt> <dd>PORT_CONTROLLER</dd> + </dl> + </section> + <section numbered="true" toc="default"> + <name>NES Specific Keys</name> + <dl spacing="compact"> + <dt><tt>[01 01]</tt></dt> <dd>NES_LATCH_FILTER</dd> + <dt><tt>[01 02]</tt></dt> <dd>NES_CLOCK_FILTER</dd> + <dt><tt>[01 03]</tt></dt> <dd>NES_OVERREAD</dd> + <dt><tt>[01 04]</tt></dt> <dd>NES_GAME_GENIE_CODE</dd> + </dl> + </section> + <section numbered="true" toc="default"> + <name>SNES Specific Keys</name> + <dl spacing="compact"> + <dt><tt>[02 02]</tt></dt> <dd>SNES_CLOCK_FILTER</dd> + <dt><tt>[02 03]</tt></dt> <dd>SNES_OVERREAD</dd> + <dt><tt>[02 04]</tt></dt> <dd>SNES_GAME_GENIE_CODE</dd> + <dt><tt>[02 05]</tt></dt> <dd>SNES_LATCH_TRAIN (RESERVED)</dd> + </dl> + </section> + <section numbered="true" toc="default"> + <name>Genesis Specific Keys</name> + <dl spacing="compact"> + <dt><tt>[08 04]</tt></dt> <dd>GENESIS_GAME_GENIE_CODE</dd> + </dl> + </section> + <section numbered="true" toc="default"> + <name>Input Frame/Timing Keys</name> + <dl spacing="compact"> + <dt><tt>[FE 01]</tt></dt> <dd>INPUT_CHUNK</dd> + <dt><tt>[FE 02]</tt></dt> <dd>INPUT_MOMENT</dd> + <dt><tt>[FE 03]</tt></dt> <dd>TRANSITION</dd> + <dt><tt>[FE 04]</tt></dt> <dd>LAG_FRAME_CHUNK</dd> + <dt><tt>[FE 05]</tt></dt> <dd>MOVIE_TRANSITION</dd> + </dl> + </section> + <section numbered="true" toc="default"> + <name>Extraneous Keys</name> + <dl spacing="compact"> + <dt><tt>[FF 01]</tt></dt> <dd>COMMENT</dd> + <dt><tt>[FF FE]</tt></dt> <dd>EXPERIMENTAL</dd> + <dt><tt>[FF FF]</tt></dt> <dd>UNSPECIFIED</dd> + </dl> + </section> + </section> + <section numbered="true" toc="default" anchor="descriptions"> + <name>Assigned Packet Keys With Descriptions</name> + <section numbered="true" toc="default"> + <name>General Key Descriptions</name> + <dl newline="true"> + <dt><tt>[00 01]</tt> - CONSOLE_TYPE</dt> + <dd>Specifies console used on emulator when dumping the TAS controller inputs. This packet type is <bcp14>OPTIONAL</bcp14> but <bcp14>SHOULD</bcp14> be included in a <strong>TASD</strong> file and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type in direct form. Discussed in (<xref target="console_type"/>).</dd> + <dt><tt>[00 02]</tt> - CONSOLE_REGION</dt> + <dd>Specifies video region of console used for the TAS. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>MAY</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="console_region"/>).</dd> + <dt><tt>[00 03]</tt> - GAME_TITLE</dt> + <dd>Specifies the name of the game the TAS is written for. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>MAY</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="game_title"/>).</dd> + <dt><tt>[00 04]</tt> - ROM_NAME</dt> + <dd>Specifies the name of the specific ROM file used for the TAS. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>MAY</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="rom_name"/>).</dd> + <dt><tt>[00 05]</tt> - ATTRIBUTION</dt> + <dd>Specifies the name of someone involved in the TAS or the creation or management of the <strong>TASD</strong> file in order to provide proper attribution for work done. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>MAY</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="author"/>).</dd> + <dt><tt>[00 06]</tt> - CATEGORY</dt> + <dd>Specifies the run category of the TAS. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type in direct form. Discussed in (<xref target="category"/>).</dd> + <dt><tt>[00 07]</tt> - EMULATOR_NAME</dt> + <dd>Specifies the emulator used while dumping TAS controller inputs. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type in direct form. Discussed in (<xref target="emulator_name"/>).</dd> + <dt><tt>[00 08]</tt> - EMULATOR_VERSION</dt> + <dd>Specifies the version of the emulator used while dump the TAS controller inputs. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type in direct form. Discussed in (<xref target="emulator_version"/>).</dd> + <dt><tt>[00 09]</tt> - EMULATOR_CORE</dt> + <dd>Specifies the core of the emulator used while dumping the TAS controller inputs. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type in direct form. Discussed in (<xref target="emulator_core"/>).</dd> + <dt><tt>[00 0A]</tt> - TAS_LAST_MODIFIED</dt> + <dd>Specifies when the TAS was last modified. Frequently used to specify the date and time when the TAS was published. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type in direct form. Discussed in (<xref target="tas_last_modified"/>).</dd> + <dt><tt>[00 0B]</tt> - DUMP_CREATEED</dt> + <dd>Specifies when the <strong>TASD</strong> file was first created. This packet is <bcp14>OPTIONAL</bcp14> but <bcp14>SHOULD</bcp14> be included in a <strong>TASD</strong> file and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="dump_created"/>).</dd> + <dt><tt>[00 0C]</tt> - DUMP_LAST_MODIFIED</dt> + <dd>Specifies when the <strong>TASD</strong> file was last modified. This packet is <bcp14>OPTIONAL</bcp14> but <bcp14>SHOULD</bcp14> be included in a <strong>TASD</strong> file and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="dump_last_modified"/>).</dd> + <dt><tt>[00 0D]</tt> - TOTAL_FRAMES</dt> + <dd>Specifies the total number of frames in the TAS. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type in direct form. Discussed in (<xref target="total_frames"/>).</dd> + <dt><tt>[00 0E]</tt> - RERECORDS</dt> + <dd>Specifies the total number of rerecords of the TAS. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type in direct form. Discussed in (<xref target="rerecords"/>).</dd> + <dt><tt>[00 0F]</tt> - SOURCE_LINK</dt> + <dd>Specifies the source link for the TAS. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="source_link"/>).</dd> + <dt><tt>[00 10]</tt> - BLANK_FRAMES</dt> + <dd>Specifies the number of blank controller inputs or frames to prepend to the inputs of the TAS when played on hardware. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type in direct form. Discussed in (<xref target="blank_frames"/>).</dd> + <dt><tt>[00 11]</tt> - VERIFIED</dt> + <dd>Specifies whether the TAS is verified to run on hardware, also known as "console verified", using the <strong>TASD</strong> file. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type in direct form. Discussed in (<xref target="verified"/>).</dd> + <dt><tt>[00 12]</tt> - MEMORY_INIT</dt> + <dd>Specifies initial memory values used for the TAS. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>MAY</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="memory_init"/>).</dd> + <dt><tt>[00 13]</tt> - GAME_IDENTIFIER</dt> + <dd>Specifies an identifier for the game the TAS is written for. This can be checksums, hashes, or other identifying data. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>MAY</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="game_identifier"/>).</dd> + <dt><tt>[00 14]</tt> - MOVIE_LICENSE</dt> + <dd>Specifies a copyright license for the TAS. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>MAY</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="movie_license"/>).</dd> + <dt><tt>[00 15]</tt> - MOVIE_FILE</dt> + <dd>Specifies the TAS movie data. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="movie_file"/>).</dd> + <dt><tt>[00 F0]</tt> - PORT_CONTROLLER</dt> + <dd>Specifies the controller type in specific console controller ports for the TAS when played on hardware. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type in direct form. Discussed in (<xref target="port_controller"/>).</dd> + </dl> + </section> + <section numbered="true" toc="default"> + <name>NES Specific Key Descriptions</name> + <dl newline="true"> + <dt><tt>[01 01]</tt> - NES_LATCH_FILTER</dt> + <dd>Specifies a latch filter time in microseconds for how long how long to wait after a latch signal until new latch signals <bcp14>SHOULD</bcp14> be accepted by the replay device. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type in direct form. Discussed in (<xref target="nes_latch_filter"/>).</dd> + <dt><tt>[01 02]</tt> - NES_CLOCK_FILTER</dt> + <dd>Specifies a clock filter time in tenths of a microsecond (0.1 microseconds or 100 nanoseconds) for how long to wait after a clock pulse until new clock pulses <bcp14>SHOULD</bcp14> be accepted by the replay device. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type in direct form. Discussed in (<xref target="nes_clock_filter"/>).</dd> + <dt><tt>[01 03]</tt> - NES_OVERREAD</dt> + <dd>Specifies whether a high or low signal <bcp14>SHOULD</bcp14> be sent to the NES console if the console clocks the replay device for more input buttons than are expected for the latch. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type in direct form. Discussed in (<xref target="nes_overread"/>).</dd> + <dt><tt>[01 04]</tt> - NES_GAME_GENIE_CODE</dt> + <dd>Specifies a Game Genie code for the TAS. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>MAY</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="nes_game_genie_code"/>).</dd> + </dl> + </section> + <section numbered="true" toc="default"> + <name>SNES Specific Key Descriptions</name> + <dl newline="true"> + <dt><tt>[02 02]</tt> - SNES_CLOCK_FILTER</dt> + <dd>Specifies a clock filter time in tenths of a microsecond (0.1 microseconds or 100 nanoseconds) for long how to wait after a clock pulse before new clock pulses <bcp14>SHOULD</bcp14> be accepted by the replay device. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type in direct form. Discussed in (<xref target="nes_clock_filter"/>).</dd> + <dt><tt>[02 03]</tt> - SNES_OVERREAD</dt> + <dd>Specifies whether a high or low signal <bcp14>SHOULD</bcp14> be sent to the SNES console if the console clocks the replay device for more input buttons than are expected for the latch. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type in direct form. Discussed in (<xref target="snes_overread"/>).</dd> + <dt><tt>[02 04]</tt> - SNES_GAME_GENIE_CODE</dt> + <dd>Specifies a Game Genie code for the TAS. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>MAY</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="snes_game_genie_code"/>).</dd> + <dt><tt>[02 05]</tt> - SNES_LATCH_TRAIN (RESERVED)</dt> + <dd>This packet type is not yet designed and is intended to be described in the future. Discussed in (<xref target="snes_latch_train"/>).</dd> + </dl> + </section> + <section numbered="true" toc="default"> + <name>Genesis Specific Key Descriptions</name> + <dl newline="true"> + <dt><tt>[08 04]</tt> - GENESIS_GAME_GENIE_CODE</dt> + <dd>Specifies a Game Genie code for the TAS. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>MAY</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="genesis_game_genie_code"/>).</dd> + </dl> + </section> + <section numbered="true" toc="default"> + <name>Input Frame/Timing Key Descriptions</name> + <dl newline="true"> + <dt><tt>[FE 01]</tt> - INPUT_CHUNK</dt> + <dd>Specifies a chunk of input data for the TAS when played on hardware. All data from INPUT_CHUNK packets are concatenated together in order of appearance in the <strong>TASD</strong> file. If the INPUT_CHUNK packet type is used, the PORT_CONTROLLER packet type <bcp14>MUST</bcp14> be used. If the INPUT_CHUNK packet type is used, the INPUT_MOMENT packet type <bcp14>SHOULD NOT</bcp14> be used. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>MAY</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="input_chunk"/>).</dd> + <dt><tt>[FE 02]</tt> - INPUT_MOMENT</dt> + <dd>Specifies input data that is sent from the replay device to the console with specific timing. If the INPUT_MOMENT packet type is used, the PORT_CONTROLLER packet type <bcp14>MUST</bcp14> be used. If the INPUT_MOMENT packet type is used, the INPUT_CHUNK packet type <bcp14>SHOULD NOT</bcp14> be used. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>MAY</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="input_moment"/>).</dd> + <dt><tt>[FE 03]</tt> - TRANSITION</dt> + <dd>Specifies when a transition or change occurs during a TAS replay (example: console reset or changing of controller types). This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>MAY</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="transition"/>).</dd> + <dt><tt>[FE 04]</tt> - LAG_FRAME_CHUNK</dt> + <dd>Specifies a chunk of lag frames in a TAS based on the original TAS movie. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>MAY</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="lag_frame_chunk"/>).</dd> + <dt><tt>[FE 05]</tt> - MOVIE_TRANSITION</dt> + <dd>Specifies when a transition or change occurs in the original TAS movie (example: console reset or changing of controller types). This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>MAY</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="movie_transition"/>).</dd> + </dl> + </section> + <section numbered="true" toc="default"> + <name>Extraneous Key Descriptions</name> + <dl newline="true"> + <dt><tt>[FF 01]</tt> - COMMENT</dt> + <dd>Comment data. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>MAY</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="comment"/>).</dd> + <dt><tt>[FF FE]</tt> - EXPERIMENTAL</dt> + <dd>TASD file is using experimental packets. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>SHOULD NOT</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="experimental"/>).</dd> + <dt><tt>[FF FF]</tt> - UNSPECIFIED</dt> + <dd>Unspecified packet data. Can contain any arbitrary data. This packet type is <bcp14>OPTIONAL</bcp14> and a <strong>TASD</strong> file <bcp14>MAY</bcp14> contain more than 1 of this packet type. Discussed in (<xref target="unspecified"/>).</dd> + </dl> + </section> + </section> + <section numbered="true" toc="default"> + <name>Packet Payload Formats</name> + <section numbered="true" toc="default"> + <name>General Key Payload Formats</name> + <section numbered="true" toc="default" anchor="console_type"> + <name>CONSOLE_TYPE Packet</name> + <t>CONSOLE_TYPE packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 1... + +-------------+==========+ + | Console (A) | Name (S) | + +-------------+==========+ + + Console (Binary Data): [1 octet] + [01] - NES <Nintendo Entertainment System> + [02] - SNES <Super Nintendo> + [03] - N64 <Nintendo 64> + [04] - GC <GameCube> + [05] - GB <Game Boy> + [06] - GBC <Game Boy Color> + [07] - GBA <Game Boy Advance> + [08] - Genesis <Sega Genesis/Sega Mega Drive> + [09] - A2600 <Atari 2600> + [FF] - Custom + Name (String) [PLEN - 1 octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Console</strong></dt> + <dd>Game console the TAS movie is for. There are pre-specified console types, but a <strong>TASD</strong> file <bcp14>MAY</bcp14> use <tt>[FF]</tt> to specify a console that is not in the pre-specified console types.</dd> + <dt><strong>Name</strong></dt> + <dd>Name of the console the TAS movie is for. <bcp14>SHOULD</bcp14> be empty if <strong>Console</strong> is not set to <tt>[FF]</tt>.</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of the packet payload.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="console_region"> + <name>CONSOLE_REGION Packet</name> + <t>CONSOLE_REGION packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 + +------------------+ + | Video Signal (A) | + +------------------+ + + Video Signal (Binary Data): [1 octet] + [01] - NTSC + [02] - PAL + [FF] - Other/Unknown]]> + </artwork> + <dl newline="true"> + <dt><strong>Video Signal</strong></dt> + <dd>Specifies the video signal of the game console being emulated while dumping the TAS movie controller inputs.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="game_title"> + <name>GAME_TITLE Packet</name> + <t>GAME_TITLE packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0... + +===========+ + | Title (S) | + +===========+ + + Title (String) [PLEN octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Title</strong></dt> + <dd>Game title the TAS movie is for (example: "Super Mario Bros. 3").</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of the packet payload.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="rom_name"> + <name>ROM_NAME Packet</name> + <t>ROM_NAME packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0... + +==========+ + | Name (S) | + +==========+ + + Name (String) [PLEN octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Name</strong></dt> + <dd>File name of the ROM used for the TAS movie (example: "Super Mario Bros. 3 (J) [!].nes").</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of the packet payload.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="author"> + <name>ATTRIBUTION Packet</name> + <t>ATTRIBUTION packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 1... + +----------+==========+ + | Type (A) | Name (S) | + +----------+==========+ + + Type (Binary Data) [1 octet] + [01] - Author + [02] - Verifier + [03] - TASD File Creator + [04] - TASD File Editor + [FF] - Other + Name (String) [PLEN - 1 octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Type</strong></dt> + <dd>Function of the person who is being attributed. <strong>Author</strong> is meant for a TAS movie author. <strong>Verifier</strong> is meant for a person who initially console verified the the TAS movie using the <strong>TASD file</strong>. <strong>TASD File Creator</strong> is meant for the person who initially dumped the TAS movie controller inputs into the <strong>TASD</strong> file. <strong>TASD File Editor</strong> is meant for a person who edited the <strong>TASD</strong> file.</dd> + <dt><strong>Name</strong></dt> + <dd>Name of the individual getting the attribution (example: "OnehundredthCoin").</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of the packet payload.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="category"> + <name>CATEGORY Packet</name> + <t>CATEGORY packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0... + +==============+ + | Category (S) | + +==============+ + + Category (String) [PLEN octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Category</strong></dt> + <dd>Name of the TAS movie run category (example: "Any %", "100%", "No Warps").</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of the packet payload.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="emulator_name"> + <name>EMULATOR_NAME Packet</name> + <t>EMULATOR_NAME packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0... + +==========+ + | Name (S) | + +==========+ + + Name (String) [PLEN octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Name</strong></dt> + <dd>Name of the emulator used to play the TAS movie while dumping controller inputs (example: "FCEUX", "Bizhawk").</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of the packet payload.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="emulator_version"> + <name>EMULATOR_VERSION Packet</name> + <t>EMULATOR_VERSION packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0... + +=============+ + | Version (S) | + +=============+ + + Version (String) [PLEN octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Version</strong></dt> + <dd>Version of the emulator used to play the TAS movie while dumping controller inputs (example: "2.7.0").</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of the packet payload.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="emulator_core"> + <name>EMULATOR_CORE Packet</name> + <t>EMULATOR_CORE packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0... + +==========+ + | Core (S) | + +==========+ + + Core (String) [PLEN octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Core</strong></dt> + <dd>Core of the emulator used to play the TAS movie while dumping controller inputs (example: "NESHawk", "Gambatte").</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of the packet payload</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="tas_last_modified"> + <name>TAS_LAST_MODIFIED Packet</name> + <t>TAS_LAST_MODIFIED packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 1 2 3 4 5 6 7 + +--+--+--+--+--+--+--+--+ + | Unix Timestamp (I) | + +--+--+--+--+--+--+--+--+ + + Unix Timestamp (Signed Integer) [8 octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Unix Timestamp</strong></dt> + <dd>64-bit Unix timestamp of when the TAS movie was last modified.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="dump_created"> + <name>DUMP_CREATED Packet</name> + <t>DUMP_CREATED packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 1 2 3 4 5 6 7 + +--+--+--+--+--+--+--+--+ + | Unix Timestamp (I) | + +--+--+--+--+--+--+--+--+ + + Unix Timestamp (Signed Integer) [8 octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Unix Timestamp</strong></dt> + <dd>64-bit Unix timestamp of when the <strong>TASD</strong> file was created.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="dump_last_modified"> + <name>DUMP_LAST_MODIFIED Packet</name> + <t>DUMP_LAST_MODIFIED packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 1 2 3 4 5 6 7 + +--+--+--+--+--+--+--+--+ + | Unix Timestamp (I) | + +--+--+--+--+--+--+--+--+ + + Unix Timestamp (Signed Integer) [8 octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Unix Timestamp</strong></dt> + <dd>64-bit Unix timestamp of when the <strong>TASD</strong> file was last modified.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="total_frames"> + <name>TOTAL_FRAMES Packet</name> + <t>TOTAL_FRAMES packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 1 2 3 + +---+---+---+---+ + | Frames (N) | + +---+---+---+---+ + + Frames (Unsigned Integer) [4 octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Frames</strong></dt> + <dd>Total number of frames of the TAS movie.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="rerecords"> + <name>RERECORDS Packet</name> + <t>RERECORDS packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 1 2 3 + +---+---+---+---+ + | Rerecords (N) | + +---+---+---+---+ + + Rerecords (Unsigned Integer) [4 octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Rerecords</strong></dt> + <dd>Total number of rerecords of the TAS movie.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="source_link"> + <name>SOURCE_LINK Packet</name> + <t>SOURCE_LINK packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0... + +==========+ + | Link (S) | + +==========+ + + Link (String) [PLEN octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Link</strong></dt> + <dd>URL that points to the TAS movie or submission (example: "https://tasvideos.org/4567M").</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of the packet payload.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="blank_frames"> + <name>BLANK_FRAMES Packet</name> + <t>BLANK_FRAMES packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 1 + +------+------+ + | Frames (I) | + +------+------+ + + Frames (Signed Integer) [2 octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Frames</strong></dt> + <dd>Number of blank frames (inputs where no buttons are being pressed) needed at the beginning of a TAS console replay of the TAS movie. If <strong>Frames</strong> is a negative value, the value of <strong>Frames</strong> amount of inputs of the TAS console replay of the TAS movie should be removed.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="verified"> + <name>VERIFIED Packet</name> + <t>VERIFIED packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 + +--------------+ + | Verified (B) | + +--------------+ + + Verified (Boolean) [1 octet]]]> + </artwork> + <dl newline="true"> + <dt><strong>Verified</strong></dt> + <dd>Boolean value that is <strong>TRUE</strong> if the <strong>TASD</strong> file has been successfully console verified and <strong>FALSE</strong> if it has not been verified.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="memory_init"> + <name>MEMORY_INIT Packet</name> + <t>MEMORY_INIT packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 1 2 3 + +---------------+------+------+--------------+ + | Data Type (A) | Device (A) | Required (B) | ... + +---------------+------+------+--------------+ + 4 5... 6... + +----------+==========+==========+ + | NLEN (N) | Name (S) | Data (A) | + +----------+==========+==========+ + + Data Type (Binary Data): [1 octet] + [01] - No Initialization Required + [02] - All [00] + [03] - All [FF] + [04] - [00 00 00 00 FF FF FF FF] Repeating + [05] - Random + [FF] - Custom + Device (Binary Data): [2 octets] + [01 01] - NES CPU RAM + [01 02] - NES Cartridge Save Data + [02 01] - SNES CPU RAM + [02 02] - SNES Cartridge Save Data + [05 01] - GB CPU RAM + [05 02] - GB Cartridge Save Data + [06 01] - GBC CPU RAM + [06 02] - GBC Cartridge Save Data + [07 01] - GBA CPU RAM + [07 02] - GBA Cartridge Save Data + [08 01] - Genesis CPU RAM + [08 02] - Genesis Cartridge Save Data + [09 01] - A2600 CPU RAM + [09 02] - A2600 Cartridge Save Data + [FF FF] - Custom/Other Device + Required (Boolean) [1 octet] + NLEN (Unsigned Integer) [1 octet] + Name (String) [NLEN octets] + Data (Binary Data) [PLEN - NLEN - + 4 octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Data Type</strong></dt> + <dd>Content type of initial memory. If <strong>Type</strong> is not <tt>[FF]</tt>, <strong>Data</strong> <bcp14>SHOULD</bcp14> be empty (0 octet length binary data).</dd> + <dt><strong>Device</strong></dt> + <dd>Device/Location that is to have memory initialized.</dd> + <dt><strong>Required</strong></dt> + <dd>Boolean value that is <strong>TRUE</strong> if this memory initialization data is known to be required and <strong>FALSE</strong> if the memory initialization data is not known to be required.</dd> + <dt><strong>NLEN</strong></dt> + <dd>Length of <strong>Name</strong></dd> + <dt><strong>Name</strong></dt> + <dd>Label for the memory initialization data (example: "CPU RAM", "SAVE RAM"). If <strong>Device</strong> is <tt>[FF FF]</tt>, <strong>Name</strong> <bcp14>SHOULD NOT</bcp14> be empty (0 octet length string).</dd> + <dt><strong>Data</strong></dt> + <dd>Raw memory initialization data. If <strong>Data Type</strong> is not <tt>[FF]</tt>, <strong>Data</strong> <bcp14>SHOULD</bcp14> be empty (0 octet length binary data).</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of the packet payload.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="game_identifier"> + <name>GAME_IDENTIFIER Packet</name> + <t>GAME_IDENTIFIER packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 1 2... + +----------+----------+================+ + | Type (A) | Base (A) | Identifier (A) | + +----------+----------+================+ + + Type (Binary Data): [1 octet] + [01] - CRC-8 Checksum + [02] - CRC-16 Checksum + [03] - CRC-32 Checksum + [04] - MD5 Hash + [05] - SHA1 Hash + [06] - SHA224 Hash + [07] - SHA256 Hash + [08] - SHA384 Hash + [09] - SHA512 Hash + [0A] - SHA512/224 Hash + [0B] - SHA512/256 Hash + [0C] - SHA3-224 Hash + [0D] - SHA3-256 Hash + [0E] - SHA3-384 Hash + [0F] - SHA3-512 Hash + [10] - SHAKE-128 Hash + [11] - SHAKE-256 Hash + [FF] - Other + Base (Binary Data): [1 octet] + [01] - Raw Binary + [02] - Case Insensitive Base 16 (Hex) - RFC 4648 + [03] - Case Insensitive Base 32 - RFC 4648 + [04] - Base 64 - RFC 4648 + [FF] - Other + Identifier (Binary Data) [PLEN - 2 octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Type</strong></dt> + <dd>Hash, checksum, or identifier algorithm <strong>Identifier</strong> is using.</dd> + <dt><strong>Base</strong></dt> + <dd>Describes the data encoding of <strong>Identifier</strong>.</dd> + <dt><strong>Identifier</strong></dt> + <dd>Game hash, checksum, or identifier data.</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of the packet payload</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="movie_license"> + <name>MOVIE_LICENSE Packet</name> + <t>MOVIE_LICENSE packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 + +=============+ + | License (S) | + +=============+ + + License (String) [PLEN octet]]]> + </artwork> + <dl newline="true"> + <dt><strong>License</strong></dt> + <dd>License information for the TAS movie (example: "Creative Commons Attribution 2.0").</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of the packet payload.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="movie_file"> + <name>MOVIE_FILE Packet</name> + <t>MOVIE_FILE packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 1... 1+NLEN... + +----------+==========+=============+ + | NLEN (N) | Name (S) | Data (A) | + +----------+==========+=============+ + + NLEN (Unsigned Integer) [1 octet] + Name (String) [NLEN + 1 octets] + Data (Binary Data) [PLEN - NLEN - + 1 octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>NLEN</strong></dt> + <dd>Length of <strong>Name</strong>.</dd> + <dt><strong>Name</strong></dt> + <dd>Name of the TAS movie (<bcp14>RECOMMENDED</bcp14> to use TAS movie file name, for example: "100thcoinv2-smb3j-geg.bk2").</dd> + <dt><strong>Data</strong></dt> + <dd>TAS movie file data/content.</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of the packet payload.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="port_controller"> + <name>PORT_CONTROLLER Packet</name> + <t>PORT_CONTROLLER packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 1 2 + +----------+-----+-----+ + | Port (N) | Type (A) | + +----------+-----+-----+ + + Port (Unsigned Integer) [1 octet] + Type (Binary Data): [2 octets] + [01 01] - NES Standard Controller + [01 02] - NES Four Score + [01 03] - (RESERVED) NES Zapper + [01 04] - (RESERVED) NES Power Pad + [01 05] - (RESERVED) Famicom Family BASIC Keyboard + [02 01] - SNES Standard Controller + [02 02] - SNES Super Multitap + [02 03] - SNES Mouse + [02 04] - (RESERVED) SNES Superscope + [03 01] - N64 Standard Controller + [03 02] - N64 Standard Controller with Rumble Pak + [03 03] - N64 Standard Controller with Controller Pak + [03 04] - N64 Standard Controller with Transfer Pak + [03 05] - N64 Mouse + [03 06] - (RESERVED) N64 Voice Recognition Unit (VRU) + [03 07] - (RESERVED) N64 RandNet Keyboard + [03 08] - N64 Densha de Go + [04 01] - GC Standard Controller + [04 02] - (RESERVED) GC Keyboard + [05 01] - GB Gamepad + [06 01] - GBC Gamepad + [07 01] - GBA Gamepad + [08 01] - Genesis (Mega Drive) 3-Button + [08 02] - Genesis (Mega Drive) 6-Button + [09 01] - A2600 Joystick + [09 02] - (RESERVED) A2600 Paddle + [09 03] - A2600 Keyboard Controller + [FF FF] - Other/Unspecified]]> + </artwork> + <dl newline="true"> + <dt><strong>Port</strong></dt> + <dd>Controller port number (<strong>Port</strong> number <bcp14>MUST</bcp14> be <strong>1-indexed</strong>).</dd> + <dt><strong>Type</strong></dt> + <dd>Specifies the controller type connected to the <strong>Port</strong>. <strong>(RESERVED)</strong> specifies that the controller type is not described in this document, but the byte values are reserved for a later version of the <strong>TASD</strong> file format protocol. Input formats for specific controller types are described in (<xref target="controller_inputs"/>).</dd> + </dl> + </section> + </section> + <section numbered="true" toc="default"> + <name>NES Specific Key Payload Formats</name> + <section numbered="true" toc="default" anchor="nes_latch_filter"> + <name>NES_LATCH_FILTER Packet</name> + <t>NES_LATCH_FILTER packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 1 + +-----+-----+ + | Time (N) | + +-----+-----+ + + Time (Unsigned Integer) [2 octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Time</strong></dt> + <dd>Latch filter length of time in microseconds.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="nes_clock_filter"> + <name>NES_CLOCK_FILTER Packet</name> + <t>NES_CLOCK_FILTER packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 + +----------+ + | Time (N) | + +----------+ + + Time (Unsigned Integer) [1 octet]]]> + </artwork> + <dl newline="true"> + <dt><strong>Time</strong></dt> + <dd>Clock filter length of time in tenths of a microsecond (units of 0.1 microseconds or 100 nanoseconds).</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="nes_overread"> + <name>NES_OVERREAD Packet</name> + <t>NES_OVERREAD packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 + +----------+ + | High (B) | + +----------+ + + High (Boolean) [1 octet]]]> + </artwork> + <dl newline="true"> + <dt><strong>High</strong></dt> + <dd>Boolean value that is <strong>TRUE</strong> if overread bits are set to high and <strong>FALSE</strong> if overread bits are set to low.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="nes_game_genie_code"> + <name>NES_GAME_GENIE_CODE Packet</name> + <t>NES_GAME_GENIE_CODE packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0... + +==========+ + | Code (S) | + +==========+ + + Code (String) [PLEN octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Code</strong></dt> + <dd>Game Genie code (example: "AATOZA").</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of the packet payload.</dd> + </dl> + </section> + </section> + <section numbered="true" toc="default"> + <name>SNES Specific Key Payload Formats</name> + <section numbered="true" toc="default" anchor="snes_clock_filter"> + <name>SNES_CLOCK_FILTER Packet</name> + <t>SNES_CLOCK_FILTER packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 + +----------+ + | Time (N) | + +----------+ + + Time (Unsigned Integer) [1 octet]]]> + </artwork> + <dl newline="true"> + <dt><strong>Time</strong></dt> + <dd>Clock filter length of time in tenths of a microsecond (units of 0.1 microseconds or 100 nanoseconds).</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="snes_overread"> + <name>SNES_OVERREAD Packet</name> + <t>SNES_OVERREAD packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 + +----------+ + | High (B) | + +----------+ + + High (Boolean) [1 octet]]]> + </artwork> + <dl newline="true"> + <dt><strong>High</strong></dt> + <dd>Boolean value that is <strong>TRUE</strong> if overread bits are set to high and <strong>FALSE</strong> if overread bits are set to low.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="snes_game_genie_code"> + <name>SNES_GAME_GENIE_CODE Packet</name> + <t>SNES_GAME_GENIE_CODE packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0... + +==========+ + | Code (S) | + +==========+ + + Code (String) [PLEN octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Code</strong></dt> + <dd>Game Genie code (example: "DDB4-6F07").</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of the packet payload.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="snes_latch_train"> + <name>SNES_LATCH_TRAIN Packet (RESERVED)</name> + <t>This packet type is not yet designed and is intended to be described in the future.</t> + </section> + </section> + <section numbered="true" toc="default"> + <name>Genesis Specific Key Payload Formats</name> + <section numbered="true" toc="default" anchor="genesis_game_genie_code"> + <name>GENESIS_GAME_GENIE_CODE Packet</name> + <t>GENESIS_GAME_GENIE_CODE packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0... + +==========+ + | Code (S) | + +==========+ + + Code (String) [PLEN octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Code</strong></dt> + <dd>Game Genie code (example: "ATBT-AA32").</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of the packet payload.</dd> + </dl> + </section> + </section> + <section numbered="true" toc="default"> + <name>Input Frame/Timing Key Payload Formats</name> + <section numbered="true" toc="default" anchor="input_chunk"> + <name>INPUT_CHUNK Packet</name> + <t>INPUT_CHUNK packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 1... + +----------+============+ + | Port (N) | Inputs (A) | + +----------+============+ + + Port (Unsigned Integer) [1 octet] + Inputs (Binary Data) [PLEN - 1 octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Port</strong></dt> + <dd>Controller port number (<strong>Port</strong> number <bcp14>MUST</bcp14> be <strong>1-indexed</strong>).</dd> + <dt><strong>Inputs</strong></dt> + <dd>Controller input data for controller on <strong>Port</strong>. Input values are usually in native format (usually active-low). Input formats for specific controller types are described in (<xref target="controller_inputs"/>).</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of the packet payload.</dd> + </dl> + <t>A single INPUT_CHUNK packet <bcp14>MAY</bcp14> contain up to every input of a TAS movie console replay and <bcp14>MAY</bcp14> contain fewer than every input of a TAS movie console replay. If there are more than 1 INPUT_CHUNK packets, the INPUT_CHUNK packets <bcp14>MUST</bcp14> be in order of the TAS movie console replay inputs, where earlier inputs in the TAS movie console replay are earlier in the <strong>TASD</strong> file and later inputs in the TAS movie console replay are later in the <strong>TASD</strong> file.</t> + </section> + <section numbered="true" toc="default" anchor="input_moment"> + <name>INPUT_MOMENT Packet</name> + <t>INPUT_MOMENT packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 1 2 3 4 5 7 8 9 10 + +----------+----------------+--+--+--+--+--+--+--+--+ + | Port (N) | Index Type (A) | Index (N) | ... + +----------+----------------+--+--+--+--+--+--+--+--+ + 11... + +============+ + | Inputs (B) | + +============+ + + Port (Unsigned Integer) [1 octet] + Index Type (Binary Data): [1 octet] + [01] - Frame + [02] - Cycle Count + [03] - Milliseconds + [04] - Microseconds * 10 + Index (Unsigned Integer) [8 octets] + Inputs (Binary Data) [PLEN - 10 octets] +]]> + </artwork> + <dl newline="true"> + <dt><strong>Port</strong></dt> + <dd>Controller port number (<strong>Port</strong> number <bcp14>MUST</bcp14> be <strong>1-indexed</strong>).</dd> + <dt><strong>Type</strong></dt> + <dd>Determines specific timing type for start of <strong>Inputs</strong>.</dd> + <dt><strong>Index</strong></dt> + <dd>Time value to start sending <strong>Inputs</strong> data.</dd> + <dt><strong>Inputs</strong></dt> + <dd>Controller input data for controller on <strong>Port</strong>. Input values are usually in native format (usually active-low). Input formats for specific controller types are described in (<xref target="controller_inputs"/>).</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of the packet payload.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="transition"> + <name>TRANSITION Packet</name> + <t>TRANSITION packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 1 2 3 4 5 6 7 8 9 + +----------------+--+--+--+--+--+--+--+--+----------+ + | Index Type (A) | Index (N) | Type (A) | ... + +----------------+--+--+--+--+--+--+--+--+----------+ + 10... + +============+ + | Packet (A) | + +============+ + + Index Type (Binary Data): [1 octet] + [01] - Frame + [02] - Cycle Count + [03] - Milliseconds + [04] - Microseconds * 10 + [05] - INPUT_CHUNK Index + Index (Unsigned Integer) [8 octets] + Type (Binary Data): [1 octet] + [01] - Soft Reset + [02] - Power Reset + [03] - Restart TASD File + [FF] - Packet Derived + Inner Packet (Binary Data) [PLEN - 10 octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Input Type</strong></dt> + <dd>Determines specific timing type for start of transition.</dd> + + <dt><strong>Index</strong></dt> + <dd>Time or offset value to start transition.</dd> + <dt><strong>Type</strong></dt> + <dd>Type of transition. If <strong>Type</strong> is <tt>[FF]</tt>, the transition action will be interpreting a <strong>TASD</strong> packet.</dd> + <dt><strong>Inner Packet</strong></dt> + <dd>If <strong>Type</strong> is <tt>[FF]</tt>, <strong>Inner Packet</strong> <bcp14>SHOULD</bcp14> be a <strong>TASD</strong> packet. <strong>Inner Packet</strong> <bcp14>MUST NOT</bcp14> be a <strong>INPUT_CHUNK</strong>, <strong>INPUT_MOMENT</strong>, <strong>TRANSITION</strong>, <strong>LAG_FRAME_CHUNK</strong>, or <strong>MOVIE_TRANSITION</strong> packet.</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of the packet payload (Not <strong>Inner Packet</strong> length).</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="lag_frame_chunk"> + <name>LAG_FRAME_CHUNK Packet</name> + <t>LAG_FRAME_CHUNK packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 1 2 3 4 5 6 7 + +----+----+----+----+--+--+--+--+ + | Movie Frame (N) | Count (N) | + +----+----+----+----+--+--+--+--+ + + Movie Frame (Unsigned Integer) [4 octets] + Count (Unsigned Integer) [4 octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Movie Frame</strong></dt> + <dd>Frame number of the TAS movie where Lag Frames start (<strong>Movie Frame</strong> MUST be <strong>0-indexed</strong>).</dd> + <dt><strong>Count</strong></dt> + <dd>Number of Lag Frames in a row starting from <strong>Movie Frame</strong>.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="movie_transition"> + <name>MOVIE_TRANSITION</name> + <t>MOVIE_TRANSITION packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 1 2 3 4 5... + +----+----+----+----+----------+==================+ + | Movie Frame (N) | Type (A) | Inner Packet (A) | + +----+----+----+----+----------+==================+ + + Movie Frame (Unsigned Integer) [4 octets] + Type (Binary Data): [1 octet] + [01] - Soft Reset + [02] - Power Reset + [03] - Restart TASD File + [FF] - Packet Derived + Inner Packet (Binary Data) [PLEN - 5 octets]]]> + </artwork> + + <dl newline="true"> + <dt><strong>Movie Frame</strong></dt> + <dd>Frame number of the TAS movie (<strong>Movie Frame</strong> MUST be <strong>0-indexed</strong>).</dd> + <dt><strong>Type</strong></dt> + <dd>Type of transition. If <strong>Type</strong> is <tt>[FF]</tt>, the transition action will be interpreting a <strong>TASD</strong> packet.</dd> + <dt><strong>Inner Packet</strong></dt> + <dd>If <strong>Type</strong> is <tt>[FF]</tt>, <strong>Inner Packet</strong> <bcp14>SHOULD</bcp14> be a <strong>TASD</strong> packet. <strong>Inner Packet</strong> <bcp14>MUST NOT</bcp14> be a <strong>INPUT_CHUNK</strong>, <strong>INPUT_MOMENT</strong>, <strong>TRANSITION</strong>, <strong>LAG_FRAME_CHUNK</strong>, or <strong>MOVIE_TRANSITION</strong> packet.</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of the packet payload (Not <strong>Inner Packet</strong> length).</dd> + </dl> + </section> + </section> + <section numbered="true" toc="default"> + <name>Extraneous Key Payload Formats</name> + <section numbered="true" toc="default" anchor="comment"> + <name>COMMENT Packet</name> + <t>COMMENT packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0 + +=============+ + | Comment (S) | + +=============+ + + Comment (String) [PLEN octet]]]> + </artwork> + <dl newline="true"> + <dt><strong>Comment</strong></dt> + <dd>Comment text.</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of the packet payload.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="experimental"> + <name>EXPERIMENTAL Packet</name> + <t>EXPERIMENTAL packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0... + +==================+ + | Experimental (B) | + +==================+ + + Experimental (Boolean) [PLEN octet]]]> + </artwork> + <dl newline="true"> + <dt><strong>Experimental</strong></dt> + <dd>Boolean data that is <strong>TRUE</strong> if the TASD file is using experimental features (Currently SHOULD be TRUE).</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of the packet payload.</dd> + </dl> + </section> + <section numbered="true" toc="default" anchor="unspecified"> + <name>UNSPECIFIED Packet</name> + <t>UNSPECIFIED packets <bcp14>MUST</bcp14> be in the following format:</t> + <artwork><![CDATA[ + 0... + +======================+ + | Unspecified Data (A) | + +======================+ + + Unspecified Data (Binary Data) [PLEN octets]]]> + </artwork> + <dl newline="true"> + <dt><strong>Unspecified Data</strong></dt> + <dd>Arbitrary data. Can be used for any data. Because this is unspecified data, there there is no guarantee any software to control a TAS replay device will support data in this packet type.</dd> + <dt><strong>PLEN</strong></dt> + <dd>Length of the packet payload.</dd> + </dl> + </section> + </section> + </section> + </section> + <section numbered="true" toc="default" anchor="controller_inputs"> + <name>Controller Input Formats</name> + <t>A forward slash (<strong>/</strong>) is used to signify <strong>active low</strong>. As an example, if a bit is labeled as <strong>/A</strong>, the bit <bcp14>MUST</bcp14> be 0 if the A button is pressed and <bcp14>MUST</bcp14> be 1 if the A button is not pressed.</t> + <t>Multi-octet controller inputs are in little-endian order</t> + <t>Bit order for octets in controller inputs are high-order (MSB) (Most significant bit to least significant bit), so bit 7 <bcp14>MUST</bcp14> be the left-most bit of the octet and bit 0 <bcp14>MUST</bcp14> be the right-most bit of the octet.</t> + <section numbered="true" toc="default"> + <name>NES/Famicom Controller Types</name> + <section numbered="true" toc="default"> + <name>NES Standard Controller</name> + <t>Single Input Length: 1 Octet</t> + <t><strong>Octet 0</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>/A</dd> + <dt>Bit 6:</dt><dd>/B</dd> + <dt>Bit 5:</dt><dd>/Select</dd> + <dt>Bit 4:</dt><dd>/Start</dd> + <dt>Bit 3:</dt><dd>/Up</dd> + <dt>Bit 2:</dt><dd>/Down</dd> + <dt>Bit 1:</dt><dd>/Left</dd> + <dt>Bit 0:</dt><dd>/Right</dd> + </dl> + </section> + <section numbered="true" toc="default"> + <name>NES Four Score</name> + <t>Single Input Length: 3 Octets</t> + <t><strong>Octet 0</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>Controller N-1 /A</dd> + <dt>Bit 6:</dt><dd>Controller N-1 /B</dd> + <dt>Bit 5:</dt><dd>Controller N-1 /Select</dd> + <dt>Bit 4:</dt><dd>Controller N-1 /Start</dd> + <dt>Bit 3:</dt><dd>Controller N-1 /Up</dd> + <dt>Bit 2:</dt><dd>Controller N-1 /Down</dd> + <dt>Bit 1:</dt><dd>Controller N-1 /Left</dd> + <dt>Bit 0:</dt><dd>Controller N-1 /Right</dd> + </dl> + <t><strong>Octet 1</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>Controller N-2 /A</dd> + <dt>Bit 6:</dt><dd>Controller N-2 /B</dd> + <dt>Bit 5:</dt><dd>Controller N-2 /Select</dd> + <dt>Bit 4:</dt><dd>Controller N-2 /Start</dd> + <dt>Bit 3:</dt><dd>Controller N-2 /Up</dd> + <dt>Bit 2:</dt><dd>Controller N-2 /Down</dd> + <dt>Bit 1:</dt><dd>Controller N-2 /Left</dd> + <dt>Bit 0:</dt><dd>Controller N-2 /Right</dd> + </dl> + <t><strong>Octet 2</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>1</dd> + <dt>Bit 6:</dt><dd>1</dd> + <dt>Bit 5:</dt><dd>0 if Controller Port is 2, otherwise 1</dd> + <dt>Bit 4:</dt><dd>0 if Controller Port is 1, otherwise 1</dd> + <dt>Bit 3:</dt><dd>1</dd> + <dt>Bit 2:</dt><dd>1</dd> + <dt>Bit 1:</dt><dd>1</dd> + <dt>Bit 0:</dt><dd>1</dd> + </dl> + <t><strong>Controller N</strong> is the controller port number. The NES Four Score allows players 1 and 3 to input buttons on controller port 1 and players 2 and 4 to input buttons on controller port 2. <strong>Controller N-1</strong> on controller port 1 is <strong>Player 1</strong>, <strong>Controller N-2</strong> on controller port 1 is <strong>Player 3</strong>, <strong>Controller N-1</strong> on controller port 2 is <strong>Player 2</strong>, and <strong>Controller N-2</strong> on controller port 2 is <strong>Player 4</strong>.</t> + </section> + </section> + <section numbered="true" toc="default"> + <name>SNES Controller Types</name> + <section numbered="true" toc="default"> + <name>SNES Standard Controller</name> + <t>Single Input Length: 2 Octets</t> + <t><strong>Octet 0</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>/B</dd> + <dt>Bit 6:</dt><dd>/Y</dd> + <dt>Bit 5:</dt><dd>/Select</dd> + <dt>Bit 4:</dt><dd>/Start</dd> + <dt>Bit 3:</dt><dd>/Up</dd> + <dt>Bit 2:</dt><dd>/Down</dd> + <dt>Bit 1:</dt><dd>/Left</dd> + <dt>Bit 0:</dt><dd>/Right</dd> + </dl> + <t><strong>Octet 1</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>/A</dd> + <dt>Bit 6:</dt><dd>/X</dd> + <dt>Bit 5:</dt><dd>/L</dd> + <dt>Bit 4:</dt><dd>/R</dd> + <dt>Bit 3:</dt><dd>1</dd> + <dt>Bit 2:</dt><dd>1</dd> + <dt>Bit 1:</dt><dd>1</dd> + <dt>Bit 0:</dt><dd>1</dd> + </dl> + </section> + <section numbered="true" toc="default"> + <name>SNES Mouse</name> + <t>Single Input Length: 4 Octets</t> + <t><strong>Octet 0</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>1</dd> + <dt>Bit 6:</dt><dd>1</dd> + <dt>Bit 5:</dt><dd>1</dd> + <dt>Bit 4:</dt><dd>1</dd> + <dt>Bit 3:</dt><dd>1</dd> + <dt>Bit 2:</dt><dd>1</dd> + <dt>Bit 1:</dt><dd>1</dd> + <dt>Bit 0:</dt><dd>1</dd> + </dl> + <t><strong>Octet 1</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>/Right button</dd> + <dt>Bit 6:</dt><dd>/Left button</dd> + <dt>Bit 5:</dt><dd>Current sensitivity (0: high sensitivity; 1: low or medium sensitivity)</dd> + <dt>Bit 4:</dt><dd>Current sensitivity (0: medium sensitivity; 1: low or high sensitivity)</dd> + <dt>Bit 3:</dt><dd>1</dd> + <dt>Bit 2:</dt><dd>1</dd> + <dt>Bit 1:</dt><dd>1</dd> + <dt>Bit 0:</dt><dd>0</dd> + </dl> + <t><strong>Octet 2</strong></t> + <dl spacing="compact"> + <dt>Bits 7-1:</dt><dd>/Vertical displacement since last read</dd> + <dt>Bit 0:</dt><dd>Direction (0: up; 1: down)</dd> + </dl> + <t><strong>Octet 3</strong></t> + <dl spacing="compact"> + <dt>Bits 7-1:</dt><dd>/Horizontal displacement since last read</dd> + <dt>Bit 0:</dt><dd>Direction (0: up; 1: down)</dd> + </dl> + </section> + </section> + <section numbered="true" toc="default"> + <name>N64 Controller Types</name> + <section numbered="true" toc="default"> + <name>N64 Standard Controller</name> + <t>Single Input Length: 4 Octets</t> + <t><strong>Octet 0</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>A</dd> + <dt>Bit 6:</dt><dd>B</dd> + <dt>Bit 5:</dt><dd>Z</dd> + <dt>Bit 4:</dt><dd>Start</dd> + <dt>Bit 3:</dt><dd>D-Pad Up</dd> + <dt>Bit 2:</dt><dd>D-Pad Down</dd> + <dt>Bit 1:</dt><dd>D-Pad Left</dd> + <dt>Bit 0:</dt><dd>D-Pad Right</dd> + </dl> + <t><strong>Octet 1</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>RST (special controller reset bit)</dd> + <dt>Bit 6:</dt><dd>0</dd> + <dt>Bit 5:</dt><dd>Left Trigger</dd> + <dt>Bit 4:</dt><dd>Right Trigger</dd> + <dt>Bit 3:</dt><dd>C-Up</dd> + <dt>Bit 2:</dt><dd>C-Down</dd> + <dt>Bit 1:</dt><dd>C-Left</dd> + <dt>Bit 0:</dt><dd>C-Right</dd> + </dl> + <t><strong>Octet 2</strong></t> + <dl spacing="compact"> + <dt>Bits 7-0:</dt><dd>Analog Stick X-Axis (signed 8-bit number)</dd> + </dl> + <t><strong>Octet 3</strong></t> + <dl spacing="compact"> + <dt>Bits 7-0:</dt><dd>Analog Stick Y-Axis (signed 8-bit number)</dd> + </dl> + </section> + <section numbered="true" toc="default"> + <name>N64 Standard Controller with Rumble</name> + <t>Single Input Length: 4 Octets</t> + <t><strong>Octet 0</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>A</dd> + <dt>Bit 6:</dt><dd>B</dd> + <dt>Bit 5:</dt><dd>Z</dd> + <dt>Bit 4:</dt><dd>Start</dd> + <dt>Bit 3:</dt><dd>D-Pad Up</dd> + <dt>Bit 2:</dt><dd>D-Pad Down</dd> + <dt>Bit 1:</dt><dd>D-Pad Left</dd> + <dt>Bit 0:</dt><dd>D-Pad Right</dd> + </dl> + <t><strong>Octet 1</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>RST (special controller reset bit)</dd> + <dt>Bit 6:</dt><dd>0</dd> + <dt>Bit 5:</dt><dd>Left Trigger</dd> + <dt>Bit 4:</dt><dd>Right Trigger</dd> + <dt>Bit 3:</dt><dd>C-Up</dd> + <dt>Bit 2:</dt><dd>C-Down</dd> + <dt>Bit 1:</dt><dd>C-Left</dd> + <dt>Bit 0:</dt><dd>C-Right</dd> + </dl> + <t><strong>Octet 2</strong></t> + <dl spacing="compact"> + <dt>Bits 7-0:</dt><dd>Analog Stick X-Axis (signed 8-bit number)</dd> + </dl> + <t><strong>Octet 3</strong></t> + <dl spacing="compact"> + <dt>Bits 7-0:</dt><dd>Analog Stick Y-Axis (signed 8-bit number)</dd> + </dl> + </section> + <section numbered="true" toc="default"> + <name>N64 Standard Controller with Controller Pak</name> + <t>Single Input Length: 4 Octets</t> + <t><strong>Octet 0</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>A</dd> + <dt>Bit 6:</dt><dd>B</dd> + <dt>Bit 5:</dt><dd>Z</dd> + <dt>Bit 4:</dt><dd>Start</dd> + <dt>Bit 3:</dt><dd>D-Pad Up</dd> + <dt>Bit 2:</dt><dd>D-Pad Down</dd> + <dt>Bit 1:</dt><dd>D-Pad Left</dd> + <dt>Bit 0:</dt><dd>D-Pad Right</dd> + </dl> + <t><strong>Octet 1</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>RST (special controller reset bit)</dd> + <dt>Bit 6:</dt><dd>0</dd> + <dt>Bit 5:</dt><dd>Left Trigger</dd> + <dt>Bit 4:</dt><dd>Right Trigger</dd> + <dt>Bit 3:</dt><dd>C-Up</dd> + <dt>Bit 2:</dt><dd>C-Down</dd> + <dt>Bit 1:</dt><dd>C-Left</dd> + <dt>Bit 0:</dt><dd>C-Right</dd> + </dl> + <t><strong>Octet 2</strong></t> + <dl spacing="compact"> + <dt>Bits 7-0:</dt><dd>Analog Stick X-Axis (signed 8-bit number)</dd> + </dl> + <t><strong>Octet 3</strong></t> + <dl spacing="compact"> + <dt>Bits 7-0:</dt><dd>Analog Stick Y-Axis (signed 8-bit number)</dd> + </dl> + </section> + <section numbered="true" toc="default"> + <name>N64 Standard Controller with Transfer Pak</name> + <t>Single Input Length: 4 Octets</t> + <t><strong>Octet 0</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>A</dd> + <dt>Bit 6:</dt><dd>B</dd> + <dt>Bit 5:</dt><dd>Z</dd> + <dt>Bit 4:</dt><dd>Start</dd> + <dt>Bit 3:</dt><dd>D-Pad Up</dd> + <dt>Bit 2:</dt><dd>D-Pad Down</dd> + <dt>Bit 1:</dt><dd>D-Pad Left</dd> + <dt>Bit 0:</dt><dd>D-Pad Right</dd> + </dl> + <t><strong>Octet 1</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>RST (special controller reset bit)</dd> + <dt>Bit 6:</dt><dd>0</dd> + <dt>Bit 5:</dt><dd>Left Trigger</dd> + <dt>Bit 4:</dt><dd>Right Trigger</dd> + <dt>Bit 3:</dt><dd>C-Up</dd> + <dt>Bit 2:</dt><dd>C-Down</dd> + <dt>Bit 1:</dt><dd>C-Left</dd> + <dt>Bit 0:</dt><dd>C-Right</dd> + </dl> + <t><strong>Octet 2</strong></t> + <dl spacing="compact"> + <dt>Bits 7-0:</dt><dd>Analog Stick X-Axis (signed 8-bit number)</dd> + </dl> + <t><strong>Octet 3</strong></t> + <dl spacing="compact"> + <dt>Bits 7-0:</dt><dd>Analog Stick Y-Axis (signed 8-bit number)</dd> + </dl> + </section> + <section numbered="true" toc="default"> + <name>N64 Mouse</name> + <t>Single Input Length: 4 Octets</t> + <t><strong>Octet 0</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>A</dd> + <dt>Bit 6:</dt><dd>B</dd> + <dt>Bit 5:</dt><dd>0</dd> + <dt>Bit 4:</dt><dd>0</dd> + <dt>Bit 3:</dt><dd>0</dd> + <dt>Bit 2:</dt><dd>0</dd> + <dt>Bit 1:</dt><dd>0</dd> + <dt>Bit 0:</dt><dd>0</dd> + </dl> + <t><strong>Octet 1</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>0</dd> + <dt>Bit 6:</dt><dd>0</dd> + <dt>Bit 5:</dt><dd>0</dd> + <dt>Bit 4:</dt><dd>0</dd> + <dt>Bit 3:</dt><dd>0</dd> + <dt>Bit 2:</dt><dd>0</dd> + <dt>Bit 1:</dt><dd>0</dd> + <dt>Bit 0:</dt><dd>0</dd> + </dl> + <t><strong>Octet 2</strong></t> + <dl spacing="compact"> + <dt>Bits 7-0:</dt><dd>Relative X-Axis position (signed 8-bit number)</dd> + </dl> + <t><strong>Octet 3</strong></t> + <dl spacing="compact"> + <dt>Bits 7-0:</dt><dd>Relative Y-Axis position (signed 8-bit number)</dd> + </dl> + </section> + <section numbered="true" toc="default"> + <name>N64 Densha de Go</name> + <t>Single Input Length: 4 Octets</t> + <t><strong>Octet 0</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>A</dd> + <dt>Bit 6:</dt><dd>B</dd> + <dt>Bit 5:</dt><dd>Accelerator</dd> + <dt>Bit 4:</dt><dd>Start</dd> + <dt>Bit 3:</dt><dd>Accelerator</dd> + <dt>Bit 2:</dt><dd>0</dd> + <dt>Bit 1:</dt><dd>0</dd> + <dt>Bit 0:</dt><dd>Accelerator</dd> + </dl> + <t><strong>Octet 1</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>0</dd> + <dt>Bit 6:</dt><dd>0</dd> + <dt>Bit 5:</dt><dd>C</dd> + <dt>Bit 4:</dt><dd>Select</dd> + <dt>Bits 3-0:</dt><dd>Brake</dd> + </dl> + <t><strong>Octet 2</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>0</dd> + <dt>Bit 6:</dt><dd>0</dd> + <dt>Bit 5:</dt><dd>0</dd> + <dt>Bit 4:</dt><dd>0</dd> + <dt>Bit 3:</dt><dd>0</dd> + <dt>Bit 2:</dt><dd>0</dd> + <dt>Bit 1:</dt><dd>0</dd> + <dt>Bit 0:</dt><dd>0</dd> + </dl> + <t><strong>Octet 3</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>0</dd> + <dt>Bit 6:</dt><dd>0</dd> + <dt>Bit 5:</dt><dd>0</dd> + <dt>Bit 4:</dt><dd>0</dd> + <dt>Bit 3:</dt><dd>0</dd> + <dt>Bit 2:</dt><dd>0</dd> + <dt>Bit 1:</dt><dd>0</dd> + <dt>Bit 0:</dt><dd>0</dd> + </dl> + </section> + </section> + <section numbered="true" toc="default"> + <name>GameCube Controller Types</name> + <section numbered="true" toc="default"> + <name>GameCube Standard Controller</name> + <t>Single Input Length: 8 Octets</t> + <t><strong>Octet 0</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>0</dd> + <dt>Bit 6:</dt><dd>0</dd> + <dt>Bit 5:</dt><dd>0</dd> + <dt>Bit 4:</dt><dd>Start</dd> + <dt>Bit 3:</dt><dd>Y</dd> + <dt>Bit 2:</dt><dd>X</dd> + <dt>Bit 1:</dt><dd>B</dd> + <dt>Bit 0:</dt><dd>A</dd> + </dl> + <t><strong>Octet 1</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>1</dd> + <dt>Bit 6:</dt><dd>L</dd> + <dt>Bit 5:</dt><dd>R</dd> + <dt>Bit 4:</dt><dd>Z</dd> + <dt>Bit 3:</dt><dd>D-Pad Up</dd> + <dt>Bit 2:</dt><dd>D-Pad Down</dd> + <dt>Bit 1:</dt><dd>D-Pad Right</dd> + <dt>Bit 0:</dt><dd>D-Pad Left</dd> + </dl> + <t><strong>Octet 2</strong></t> + <dl spacing="compact"> + <dt>Bits 7-0:</dt><dd>Analog Stick X-Axis (signed 8-bit number)</dd> + </dl> + <t><strong>Octet 3</strong></t> + <dl spacing="compact"> + <dt>Bits 7-0:</dt><dd>Analog Stick Y-Axis (signed 8-bit number)</dd> + </dl> + <t><strong>Octet 4</strong></t> + <dl spacing="compact"> + <dt>Bits 7-0:</dt><dd>C-Stick X-Axis (signed 8-bit number)</dd> + </dl> + <t><strong>Octet 5</strong></t> + <dl spacing="compact"> + <dt>Bits 7-0:</dt><dd>C-Stick Y-Axis (signed 8-bit number)</dd> + </dl> + <t><strong>Octet 6</strong></t> + <dl spacing="compact"> + <dt>Bits 7-0:</dt><dd>L Analog Value (unsigned 8-bit number)</dd> + </dl> + <t><strong>Octet 7</strong></t> + <dl spacing="compact"> + <dt>Bits 7-0:</dt><dd>R Analog Value (unsigned 8-bit number)</dd> + </dl> + </section> + </section> + <section numbered="true" toc="default"> + <name>Game Boy Controller Types</name> + <section numbered="true" toc="default"> + <name>GB Standard Controller</name> + <t>Single Input Length: 1 Octet</t> + <t><strong>Octet 0</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>/Down</dd> + <dt>Bit 6:</dt><dd>/Up</dd> + <dt>Bit 5:</dt><dd>/Left</dd> + <dt>Bit 4:</dt><dd>/Right</dd> + <dt>Bit 3:</dt><dd>/Start</dd> + <dt>Bit 2:</dt><dd>/Select</dd> + <dt>Bit 1:</dt><dd>/B</dd> + <dt>Bit 0:</dt><dd>/A</dd> + </dl> + </section> + </section> + <section numbered="true" toc="default"> + <name>Game Boy Color Controller Types</name> + <section numbered="true" toc="default"> + <name>GBC Standard Controller</name> + <t>Single Input Length: 1 Octet</t> + <t><strong>Octet 0</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>/Down</dd> + <dt>Bit 6:</dt><dd>/Up</dd> + <dt>Bit 5:</dt><dd>/Left</dd> + <dt>Bit 4:</dt><dd>/Right</dd> + <dt>Bit 3:</dt><dd>/Start</dd> + <dt>Bit 2:</dt><dd>/Select</dd> + <dt>Bit 1:</dt><dd>/B</dd> + <dt>Bit 0:</dt><dd>/A</dd> + </dl> + </section> + </section> + <section numbered="true" toc="default"> + <name>Game Boy Advance Controller Types</name> + <section numbered="true" toc="default"> + <name>GBA Standard Controller</name> + <t>Single Input Length: 2 Octets</t> + <t><strong>Octet 0</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>1</dd> + <dt>Bit 6:</dt><dd>1</dd> + <dt>Bit 5:</dt><dd>1</dd> + <dt>Bit 4:</dt><dd>1</dd> + <dt>Bit 3:</dt><dd>1</dd> + <dt>Bit 2:</dt><dd>1</dd> + <dt>Bit 1:</dt><dd>/L</dd> + <dt>Bit 0:</dt><dd>/R</dd> + </dl> + <t><strong>Octet 1</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>/Down</dd> + <dt>Bit 6:</dt><dd>/Up</dd> + <dt>Bit 5:</dt><dd>/Left</dd> + <dt>Bit 4:</dt><dd>/Right</dd> + <dt>Bit 3:</dt><dd>/Start</dd> + <dt>Bit 2:</dt><dd>/Select</dd> + <dt>Bit 1:</dt><dd>/B</dd> + <dt>Bit 0:</dt><dd>/A</dd> + </dl> + </section> + </section> + <section numbered="true" toc="default"> + <name>Genesis Controller Types</name> + <section numbered="true" toc="default"> + <name>Genesis (Mega Drive) 3-Button</name> + <t>Single Input Length: 1 Octet</t> + <t><strong>Octet 0</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>/A</dd> + <dt>Bit 6:</dt><dd>/Start</dd> + <dt>Bit 5:</dt><dd>/Up</dd> + <dt>Bit 4:</dt><dd>/Down</dd> + <dt>Bit 3:</dt><dd>/Left</dd> + <dt>Bit 2:</dt><dd>/Right</dd> + <dt>Bit 1:</dt><dd>/B</dd> + <dt>Bit 0:</dt><dd>/C</dd> + </dl> + </section> + <section numbered="true" toc="default"> + <name>Genesis (Mega Drive) 6-Button</name> + <t>Single Input Length: 2 Octets</t> + <t><strong>Octet 0</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>/A</dd> + <dt>Bit 6:</dt><dd>/Start</dd> + <dt>Bit 5:</dt><dd>/Up</dd> + <dt>Bit 4:</dt><dd>/Down</dd> + <dt>Bit 3:</dt><dd>/Left</dd> + <dt>Bit 2:</dt><dd>/Right</dd> + <dt>Bit 1:</dt><dd>/B</dd> + <dt>Bit 0:</dt><dd>/C</dd> + </dl> + <t><strong>Octet 1</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>/Z</dd> + <dt>Bit 6:</dt><dd>/Y</dd> + <dt>Bit 5:</dt><dd>/X</dd> + <dt>Bit 4:</dt><dd>/Mode</dd> + <dt>Bit 3:</dt><dd>1</dd> + <dt>Bit 2:</dt><dd>1</dd> + <dt>Bit 1:</dt><dd>1</dd> + <dt>Bit 0:</dt><dd>1</dd> + </dl> + </section> + </section> + <section numbered="true" toc="default"> + <name>Atari 2600 Controller Types</name> + <section numbered="true" toc="default"> + <name>A2600 Joystick</name> + <t>Single Input Length: 1 Octet</t> + <t><strong>Octet 0</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>/Up</dd> + <dt>Bit 6:</dt><dd>/Down</dd> + <dt>Bit 5:</dt><dd>/Left</dd> + <dt>Bit 4:</dt><dd>/Right</dd> + <dt>Bit 3:</dt><dd>1</dd> + <dt>Bit 2:</dt><dd>/Button</dd> + <dt>Bit 1:</dt><dd>1</dd> + <dt>Bit 0:</dt><dd>1</dd> + </dl> + </section> + <section numbered="true" toc="default"> + <name>A2600 Keyboard Controller</name> + <t>Single Input Length: 1 Octet</t> + <t><strong>Octet 0</strong></t> + <dl spacing="compact"> + <dt>Bit 7:</dt><dd>/Row1 (key 1, 2, or 3 pressed)</dd> + <dt>Bit 6:</dt><dd>/Row2 (key 4, 5, or 6 pressed)</dd> + <dt>Bit 5:</dt><dd>/Row3 (key 7, 8, or 9 pressed)</dd> + <dt>Bit 4:</dt><dd>/Row4 (key *, 0, or # pressed)</dd> + <dt>Bit 3:</dt><dd>/Column1 (key 1, 4, 7, or * pressed)</dd> + <dt>Bit 2:</dt><dd>/Column3 (key 3, 6, 9, or # pressed)</dd> + <dt>Bit 1:</dt><dd>/Column2 (key 2, 5, 8, or 0 pressed)</dd> + <dt>Bit 0:</dt><dd>1</dd> + </dl> + </section> + </section> + </section> + </middle> + + <back> + <references> + <name>References</name> + <references> + <name>Normative References</name> + <xi:include href="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/> + <xi:include href="http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/> + </references> + </references> + <section numbered="false" toc="default"> + <name>Copyright Notice</name> + <t>Copyright (c) 2021-2022, Vi Grey and Bigbass</t> + <t>All rights reserved.</t> + <t>Redistribution and use of this documentation in source (XML format) and/or "compiled" forms (TXT, PDF, HTML, etc), with or without modification, are permitted provided that the following conditions are met:</t> + <ol> + <li>Redistributions of source code (XML format) of this documentation must retain the above copyright notice, this list of conditions, and the following disclaimer in the documentation.</li> + <li>Redistributions in compiled form (Converted to TXT, PDF, HTML, and other formats) of this documentation must reproduce the above copyright notice, this list of conditions, and the following disclaimer in the documentation.</li> + </ol> + <t>THIS DOCUMENTATION IS PROVIDED BY THE AUTHOR(S) "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</t> + </section> + <!-- Change Log + +draft 00 - 2022-09-24 VG Initial draft + + --> + </back> +</rfc> diff --git a/tools/lua/tasd-fceux-dumpscript.lua b/tools/lua/tasd-fceux-dumpscript.lua new file mode 100644 index 0000000..27f9c71 --- /dev/null +++ b/tools/lua/tasd-fceux-dumpscript.lua @@ -0,0 +1,428 @@ +-- Copyright (c) 2022, Vi Grey +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND +-- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +-- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +-- ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE +-- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +-- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +-- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +-- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +-- SUCH DAMAGE. + +local MAGIC_NUMBER = 0x54415344 +local VERSION = 0x0001 +local G_KEYLEN = 0x02 + +local CONSOLE_TYPE = 0x0001 -- Done +local CONSOLE_REGION = 0x0002 -- Done +local ROM_NAME = 0x0004 -- Done +local EMULATOR_NAME = 0x0007 -- Done +local DUMP_CREATED = 0x000b -- Done +local DUMP_LAST_MODIFIED = 0x000c -- Done +local TOTAL_FRAMES = 0x000d -- Done +local RERECORDS = 0x000e -- Done +local MEMORY_INIT = 0x0012 -- Done +local GAME_IDENTIFIER = 0x0013 -- Done +local PORT_CONTROLLER = 0x00f0 -- Done (More to handle later) + +local NES_LATCH_FILTER = 0x0101 -- Done +local NES_CLOCK_FILTER = 0x0102 -- Done +local NES_OVERREAD = 0x0103 -- Done + +local INPUT_CHUNK = 0xfe01 -- Done (More to handle later) +local TRANSITION = 0xfe03 -- Done +local LAG_FRAME_CHUNK = 0xfe04 -- Done + +local EXPERIMENTAL = 0xfffe + +local NES_STANDARD_CONTROLLER = 0x0101 + +local moviePlaying = false +local resetValueLast = 0x0000 +local afterPowerOn = false +local lagCount = 0 +local resetTransitionPackets = "" +local cpuCyclesLastFrame = 0 +local region = "" + +local tasdFile + +local nesControls = {"right", "left", "down", "up", "start", "select", "B", "A"} + +-- Convert a non negative integer (number) to a byte string of size +-- byteLen. Returns a blank string if number is too large for byteLen +-- or if number is negative. +function intToBytes(number, byteLen) + local byteString = "" + if (number < 0) then + return byteString + elseif (number >= (256 ^ byteLen)) then + return byteString + end + for x = byteLen - 1, 0, -1 do + byteString = byteString .. string.char(math.floor(number / 256 ^ x) % 256) + end + return byteString +end + +-- Get exponent of number +function getExponent(number) + return math.ceil(math.log(number + 1)/math.log(256)) +end + +-- Create a packet byte string +function makePacket(packetKey, packetPayload) + local packetString = intToBytes(packetKey, G_KEYLEN) + if packetString == "" then + return packetString + end + local packetPayloadLen = string.len(packetPayload) + local packetPayloadLenExponent = getExponent(packetPayloadLen) + packetString = packetString .. intToBytes(packetPayloadLenExponent, 1) + packetString = packetString .. intToBytes(packetPayloadLen, packetPayloadLenExponent) + packetString = packetString .. packetPayload + return packetString +end + +function getConsoleTypePacket() + local packetPayload = intToBytes(0x01, 1) + return makePacket(CONSOLE_TYPE, packetPayload) +end + +function getConsoleRegionPacket() + local regionNumber = 3 + if (region == "NTSC") then + regionNumber = 1 + elseif (region == "PAL") then + regionNumber = 2 + end + local packetPayload = intToBytes(regionNumber, 1) + return makePacket(CONSOLE_REGION, packetPayload) +end + +function getROMNamePacket() + local packetPayload = rom.getfilename() .. ".nes" + return makePacket(ROM_NAME, packetPayload) +end + +function getMemoryInitPacket(dataType, device, required, name, data) + local packetPayload = intToBytes(dataType, 1) + packetPayload = packetPayload .. intToBytes(device, 2) + packetPayload = packetPayload .. intToBytes(required, 1) + packetPayload = packetPayload .. intToBytes(string.len(name), 1) + packetPayload = packetPayload .. name + packetPayload = packetPayload .. data + return makePacket(MEMORY_INIT, packetPayload) +end + +function getGameIdentifierPacket() + local packetPayload = intToBytes(0x04, 1) -- Type is MD5 + packetPayload = packetPayload .. intToBytes(0x02, 1) -- Base is hex + packetPayload = packetPayload .. rom.gethash("md5") + return makePacket(GAME_IDENTIFIER, packetPayload) +end + +function getEmulatorNamePacket() + local packetPayload = "fceux" + return makePacket(EMULATOR_NAME, packetPayload) +end + +function getDumpCreatedPacket(unixTimestamp) + local packetPayload = intToBytes(unixTimestamp, 8) + return makePacket(DUMP_CREATED, packetPayload) +end + +function getDumpLastModifiedPacket(unixTimestamp) + local packetPayload = intToBytes(unixTimestamp, 8) + return makePacket(DUMP_LAST_MODIFIED, packetPayload) +end + +function getTotalFramesPacket() + local packetPayload = intToBytes(movie.length(), 4) + return makePacket(TOTAL_FRAMES, packetPayload) +end + +function getRerecordsPacket() + local packetPayload = intToBytes(movie.rerecordcount(), 4) + return makePacket(RERECORDS, packetPayload) +end + +-- Only supports standard controllers at the moment +function getPortControllerPacket(playerCount, controllerType) + local finishedPackets = "" + for x = 1, playerCount, 1 do + local packetPayload = intToBytes(x, 1) + packetPayload = packetPayload .. intToBytes(controllerType, 2) + finishedPackets = finishedPackets .. makePacket(PORT_CONTROLLER, packetPayload) + end + return finishedPackets +end + +function getNESLatchFilterPacket() + local packetPayload = intToBytes(8000, 2) + return makePacket(NES_LATCH_FILTER, packetPayload) +end + +function getNESClockFilterPacket() + local packetPayload = intToBytes(10, 1) + return makePacket(NES_CLOCK_FILTER, packetPayload) +end + +function getNESOverreadPacket() + local packetPayload = intToBytes(0, 1) + return makePacket(NES_OVERREAD, packetPayload) +end + +function getInputChunkPacket(player, inputs, controllerType) + local payloadLen = 1 + if (controllerType == NES_STANDARD_CONTROLLER) then + payloadLen = 1 + end + local packetPayload = intToBytes(player, 1) + packetPayload = packetPayload .. intToBytes(inputs, payloadLen) + return makePacket(INPUT_CHUNK, packetPayload) +end + +function getLagFrameChunkPacket() + local packetPayload = intToBytes(movie.framecount() - lagCount, 4) + packetPayload = packetPayload .. intToBytes(lagCount, 4) + return makePacket(LAG_FRAME_CHUNK, packetPayload) +end + +function getTransitionPacket() + local packetPayload = intToBytes(0x01, 1) + packetPayload = packetPayload .. intToBytes(movie.framecount(), 8) + packetPayload = packetPayload .. intToBytes(0x01, 1) + return makePacket(TRANSITION, packetPayload) +end + +function getExperimentalPacket() + local packetPayload = intToBytes(0x01, 1) + return makePacket(EXPERIMENTAL, packetPayload) +end + +-- Get TASD file header (currently TASD\x00\x01\x02) +function getTASDFileHeader() + local header = intToBytes(MAGIC_NUMBER, 4) + header = header .. intToBytes(VERSION, 2) + header = header .. intToBytes(G_KEYLEN, 1) + return header +end + +-- Begin dump by creating TASD file, writing initial data to it, +-- setting the emulator speed to maximum, and starting the movie +function startDump() + -- Movie has not been started since the lua script started + setupTASDFile() + tasdFile:write(getTASDFileHeader()) + tasdFile:write(getExperimentalPacket()) + tasdFile:write(getConsoleTypePacket()) + tasdFile:write(getROMNamePacket()) + tasdFile:write(getGameIdentifierPacket()) + tasdFile:write(getEmulatorNamePacket()) + tasdFile:write(getTotalFramesPacket()) + tasdFile:write(getRerecordsPacket()) + tasdFile:write(getPortControllerPacket(2, NES_STANDARD_CONTROLLER)) + tasdFile:write(getNESLatchFilterPacket()) + tasdFile:write(getNESClockFilterPacket()) + tasdFile:write(getNESOverreadPacket()) + -- Rest CPU cycle count to 0 + debugger.resetcyclescount() + movie.playbeginning() + emu.pause() + -- Get CPU RAM and store it in TASD file + storeInitialCPURAM() + -- Get Cartridge Save RAM and store it in TASD file + storeInitialSaveData() + emu.unpause() + moviePlaying = true + print("Starting movie.\n") + print("Replay (TASD) file will not be finished writing until the movie is " .. + "finished.\n") + emu.speedmode("maximum") + setResetCallback() +end + +-- Set and update execution callback for when the 16-bit big-endian +-- address stored at 0xfffc-0xfffd is executed. This function is +-- called frequently because some NES cartridge mappers allow the +-- data at 0xfffc-0xfffd to be changed. +function setResetCallback() + resetValue = memory.readbyteunsigned(0xfffd) * 256 + resetValue = resetValue + memory.readbyteunsigned(0xfffc) + if (resetValue ~= resetValueLast) then + -- Value at reset vector (0xfffc-0xfffd) has changed + unsetResetCallback() + memory.registerexec(resetValue, detectReset) + resetValueLast = resetValue + end +end + +-- Unset the execution callback for when the 16-bit big-endian address +-- stored at 0xfffc-0xfffd is executed. +function unsetResetCallback() + memory.registerexec(resetValueLast, nil) +end + +-- Add console reset to list of reset transition packets. Ignores the +-- first detected RESET, as the initial console power-on triggers +-- this function as well +function detectReset() + if (afterPowerOn) then + resetTransitionPackets = resetTransitionPackets .. getTransitionPacket() + end + afterPowerOn = true +end + +-- Some cleanup after the movie has closed, including setting the +-- emulator speed back to normal +function finishMovie() + emu.speedmode("normal") + unsetResetCallback() + moviePlaying = false + movie.close() + emu.registerafter(nil) + print("Movie finished.\n") +end + +-- Finish writing the TASD file by writing the DUMP_CREATED, +-- DUMP_LAST_MODIFIED, and CONSOLE_REGION packets and closing the +-- TASD file. +function finishTASDFile() + local unixTimestamp = os.time(os.date("*t")) + tasdFile:write(getDumpCreatedPacket(unixTimestamp)) + tasdFile:write(getDumpLastModifiedPacket(unixTimestamp)) + tasdFile:write(getConsoleRegionPacket()) + tasdFile:close() + print("Replay (TASD) file finished.\n") +end + +-- Converts frame input for players 1 and 2 to an INPUT_CHUNK packet +-- and writes the INPUT_CHUNK packet to the TASD file +function handleInputs() + for i = 1, 2, 1 do + local controls = joypad.get(i) + local controllerInput = 0xff + for x = 1, #nesControls do + if (controls[nesControls[x]]) then + controllerInput = bit.bxor(controllerInput, bit.lshift(1, x - 1)) + end + end + tasdFile:write(getInputChunkPacket(i, controllerInput, NES_STANDARD_CONTROLLER)) + end +end + +-- Single frame handling code. Also determines the NES console's +-- region based on the amount of CPU cycles between 2 adjacent +-- frames. +function handleFrame() + if (region == "") then + local cpuCyclesNow = debugger.getcyclescount() + local cpuCyclesDif = cpuCyclesNow - cpuCyclesLastFrame + cyclesLastFrame = cpuCyclesNow + if (cpuCyclesDif < 36000 and cpuCyclesDif > 29000) then + if (cpuCyclesDif < 31000) then + -- Region is NTSC (~29780.5 cycles per frame) + region = "NTSC" + elseif (cpuCyclesDif > 34000) then + -- Region is Dendy (~35464 cycles per frame) + region = "Dendy" + else + -- Region is PAL (~33247.5 cycles per frame) + region = "PAL" + end + end + else + end + if (emu.lagged()) then + lagCount = lagCount + 1 + else + if (lagCount > 0) then + tasdFile:write(getLagFrameChunkPacket()) + end + lagCount = 0 + handleInputs() + end +end + + +-- Create TASD File from ROM file name +function setupTASDFile() + local fileName = movie.name():match("(.+)%..+$") + local tasdFileName = fileName .. ".tasd" + tasdFile = io.open(tasdFileName, "wb+") + print("Created replay (TASD) file " .. tasdFileName .. "\n") +end + +-- Store initial CPU RAM (0x0000 - 0x07FF) in TASD file +function storeInitialCPURAM() + print("Storing initial CPU RAM") + local cpuRAMData = "" + for i = 0x0000, 0x07ff, 1 do + cpuRAMData = cpuRAMData .. string.char(memory.readbyte(i)) + end + tasdFile:write(getMemoryInitPacket(0xff, 0x0101, 0, "", cpuRAMData)) + print("Finished storing initial CPU RAM\n") +end + +-- Store initial cartridge save data (0x6000 - 0x7FFF) in TASD file +function storeInitialSaveData() + if (bit.band(rom.readbyte(6), 2)) then + print("Storing initial save data") + local saveRAMData = "" + for i = 0x6000, 0x7fff, 1 do + saveRAMData = saveRAMData .. string.char(memory.readbyte(i)) + end + tasdFile:write(getMemoryInitPacket(0xff, 0x0102, 0, "", saveRAMData)) + print("Finished storing initial save data\n") + end +end + +-- General handler for dumping TASD file (this of this essentially as +-- the main() function) +function gameHandler() + if (movie.active()) then + -- Movie is loaded/active + if (moviePlaying == false) then + startDump() + else + if (movie.framecount() > movie.length()) then + -- End of movie + finishTASDFile() + finishMovie() + print("If you wish to dump another TAS, you will need to run this script again\n") + elseif (movie.framecount() > 1) then + setResetCallback() + handleFrame() + -- End of frame + tasdFile:write(resetTransitionPackets) + resetTransitionPackets = "" + end + end + elseif (moviePlaying == true) then + -- Error handling movie + finishMovie() + print("Error handling movie. Try playing the movie again.\n") + end +end + +if (movie.active() == false) then + print("Select a movie file\n") +end + +emu.registerafter(gameHandler) + diff --git a/tools/tasd2r08/tasd2r08.py b/tools/tasd2r08/tasd2r08.py new file mode 100755 index 0000000..f078840 --- /dev/null +++ b/tools/tasd2r08/tasd2r08.py @@ -0,0 +1,137 @@ +#!/usr/bin/env python3 + +# Copyright (c) 2022, Vi Grey +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. + + +import sys +import os + +def print_help(): + print("Usage: python3 tasd2r08 <input file path> <output file path>\r\n" + + "Example: python3 tasd2r08 ~/TAS/smb.tasd /tmp/smb.r08") + +def handle_packet(offset): + init_offset = offset + global infile_data + global infile_len + global tasd_g_len + packet_type = int.from_bytes(infile_data[offset: offset + tasd_g_len], + byteorder="big", signed=False) + offset += tasd_g_len + if offset >= infile_len: + return (1, b"", offset) + packet_exp = infile_data[offset] + offset += 1 + if offset + packet_exp >= infile_len: + return (1, b"", offset) + packet_len = int.from_bytes(infile_data[offset: offset + packet_exp], + byteorder="big", signed=False) + offset += packet_exp + if offset + packet_len > infile_len: + return (1, b"", offset) + if packet_type != 0xfe01: + offset += packet_len + return (1, b"", offset) + return (infile_data[offset], + infile_data[offset + 1: offset + packet_len], + offset + packet_len) + +def main(): + global infile_data + global infile_len + global tasd_g_len + if len(sys.argv) != 3: + print_help() + sys.exit(0) + infile_name = sys.argv[1] + outfile_name = sys.argv[2] + outfile_data = b"" + try: + infile = open(infile_name, "rb") + infile_data = infile.read() + infile.close() + except: + print("Unable to read input file " + infile_name) + print("Exiting") + sys.exit(1) + if os.path.exists(outfile_name): + print("File " + outfile_name + " already exists") + reply = input("Overwrite file? [yes/No] ").lower() + if reply != "yes" and reply != "y": + print("Canceling conversion. No files were written to.") + print("Exiting") + sys.exit(1) + infile_len = len(infile_data) + if infile_len < 7: + print("Input file is not a TASD file (File not long enough to be a" + + "TASD file)") + print("Exiting") + sys.exit(1) + if infile_data[0:4] != b"TASD": + print("Input file is not a TASD file (Invalid file header)") + print("Exiting") + sys.exit(1) + tasd_version = int.from_bytes(infile_data[4:6], byteorder="big", + signed=False) + tasd_g_len = infile_data[6] + if tasd_version != 1: + print("Input file is not using a valid TASD file version") + print("Exiting") + sys.exit(1) + # set infile_offset to after TASD file header, which is 7 bytes long + infile_offset = 7 + while infile_offset + tasd_g_len < infile_len: + (port, data, infile_offset) = handle_packet(infile_offset) + if len(data) > 0: + r08Data[port] += data + r08MaxLen = 0 + for port in r08Data: + dataLen = len(r08Data[port]) + if dataLen > r08MaxLen: + r08MaxLen = dataLen + for port in r08Data: + dataLen = len(r08Data[port]) + if dataLen < r08MaxLen: + r08Data[port] += b"\xff" * (r08MaxLen - dataLen) + for offset in range(r08MaxLen): + for port in sorted(r08Data): + outfile_data += (r08Data[port][offset]^0xFF).to_bytes(1, "big") + try: + outfile = open(outfile_name, "wb") + outfile.write(outfile_data) + outfile.close() + except: + print("Unable to write output file " + infile_name) + print("Exiting") + sys.exit(1) + print("Finished writing " + outfile_name) + +infile_data = b"" +infile_len = 0 +tasd_g_len = 1 +r08Data = {1: b"", 2: b""} +if __name__ == "__main__": + main() |
